Skip to content

Instantly share code, notes, and snippets.

@almereyda
Last active January 3, 2016 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save almereyda/7badbd7dde80f52ca4c7 to your computer and use it in GitHub Desktop.
Save almereyda/7badbd7dde80f52ca4c7 to your computer and use it in GitHub Desktop.
GeoCouch Installation : CouchDB > JSScript Fehler

GeoCouch Installation

Zunächst wird CouchDB als Proof-of-Concept aus den Quellen kompiliert. Dies stellt sich als komplizierter als gedacht heraus, da die Dokumentation unvollständig (Stichworte ./bootstrap & INSTALL) und fehlerhaft (Apache CouchDB README im Couchbase Repo?) ist.

./configure --help hilft.

In einem zweiten Schritt wird GeoCouch an den Sourcen von CouchDB kompiliert, was es erlaubt CouchDB mit GeoCouch zu starten.

Voraussetzungen

1. CouchDB

Szenario 1 : Couchbase CouchDB + GeoCouch : jeweils master branch

Zunächst sind die lokalen Repos vorzubereiten:

cd ~
mkdir src
cd src
git clone https://github.com/couchbase/geocouch.git
git clone https://github.com/couchbase/couchdb.git
cd couchdb/

Anders als in der offiziellen Anleitung muss bevor ./configure überhaupt existiert ./bootstrap ausgeführt werden.

./bootstrap 
./configure

Ein erster Konfigurationsversuch schlägt fehl:

cd ..
wget http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz
tar -zxvf js185-1.0.0.tar.gz 
cd js-1.8.5/js/src/
./configure && make
cd ../couchdb/

Konfigurieren und Kompilieren:

./configure --with-js-lib=/home/OBFUSCATED/src/js-1.8.5/js/src --with-js-include=/home/OBFUSCATED/src/js-1.8.5/js/src --with-erlang=/usr/lib64/erlang/usr/include
make

Im gist unten angehängte Fehler verhindern auf uberspace die Kompilierung. Stichwort JSScript. Auch gmake hilft nicht weiter.

  1. Hat uberspace sein CouchDB selbst kompiliert (↗️ Tweet) oder aus den Paketquellen installiert?
  1. Gibt es Erfahrungen wo zwischen ./configure und make die Ungereimtheit auftritt?
Konklusion

Es bietet sich an die aufeinander angepassten CouchDB und GeoCouch Releases zu verwenden, da ältere CouchDB Versionen anscheinend Probleme mit neueren Spidermonkeys haben und, vermutlich unweigerlich, zum erwähnten JSScript Fehler führen.


Szenario 2 : Apache CouchDB > tag/release/branch 1.5.0 + GeoCouch couchdb1.3.x branch

cd ~
mkdir src && cd src
git clone https://github.com/couchbase/geocouch.git
git clone https://github.com/apache/couchdb.git
cd couchdb
git checkout 1.5.0

Auch die Apache Anleitung erwähnt ./bootstrap nicht; trotzdem wird es zwingend zur Generierung des ./configure Scriptes genutzt:

./bootstrap
  • schlägt fehl:
Unable to find the `ax_check_icu.m4' file.

Have you installed GNU Autoconf Archive?
  1. Ich gehe davon aus, dass der Apache CouchDB Branch andere Voraussetzungen hat, als der Couchbase 1.2.x Fork. Würde uberspace zur Unterstützung die vrmtl. fehlenden Autoconf Pakete auf canis Bereitstellen? Dann erübrige sich auch die Verwendung eines selbstkompilierten Spidermonkeys.

Fedora 20

Ausschnitte einer beispielhaften, funktionierenden (RHEL-basierten) Konfiguration. Alle weiteren Schritte wie oben.

  • 64bit js-devel und erlang Pfade (rpm -ql js-devel erlang-erts) übergeben:
./configure --with-erlang=/usr/lib64/erlang/usr/include --with-js-include=/usr/include/js/ --with-js-lib=/usr/lib64/
  • für Apache CouchDB 1.5.0 fehlte noch gcc-c++, obwohl es in den in den Voraussetzungen enthaltenen "Development Tools" enthalten sein sollte, die aber installiert waren:
yum install gcc-c++ -y

Abschließend sind noch die Dienstbenutzer und das Startup-Script einzurichten


All together now:

Kontextlinks:

2. GeoCouch

Diese Schritte setzen eine funktionierende, selbstkompilierte CouchDB Instanz voraus.

git clone https://github.com/couchbase/geocouch.git
cd geocouch
git checkout couchdb1.3.x

GeoCouch Konfiguration kopieren. default.d aber in CouchDB 1.5.0 nicht vorhanden. Alternativer Ort möglich? cp ./etc/couchdb/default.d/geocouch.ini ../couchdb/etc/couchdb/ ? Nein.
Also verschieben cd /root/couchdb/etc/couchdb && mkdir default.d && cp geocouch.ini ./default.d.

Kompilieren klappte ja, daher beim Test nach exportieren der ERL_FLAGS und starten des couchdb service erst später einen Fehler gefunden: curl -X GET 'http://localhost:5984/places/_design/main/_spatial/points?bbox=0,0,180,90' > {"error":"not_found","reason":"missing handler: _spatial"}`

Daher soll der lokale Testserver zum Einsatz kommen, welcher zunächst crasht: mkdir ./couchdb/tmp/log


ERL_FLAGS="-pa /root/geocouch/ebin" /root/couchdb/utils/run

Apache CouchDB 1.5.0 (LogLevel=info) is starting.
Failure to start Mochiweb: eaddrinuse
{"init terminating in do_boot",{{badmatch,{error,{bad_return,{{couch_app,start,[normal,["/usr/local/etc/couchdb/default.ini","/usr/local/etc/couchdb/local.ini"]]},{'EXIT',{{badmatch,{error,{shutdown,{failed_to_start_child,couch_secondary_services,{shutdown,{failed_to_start_child,httpd,eaddrinuse}}}}}},[{couch_server_sup,start_server,1,[{file,"couch_server_sup.erl"},{line,98}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,269}]}]}}}}}},[{couch,start,0,[{file,"couch.erl"},{line,18}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

Der Service lief noch und startete sich immer wieder neu:

rm /etc/init.d/couchdb -y, da chkconfig --levels 123456 couchdb off && service couchdb stop nicht half.


Apache CouchDB 1.5.0 (LogLevel=info) is starting.
Apache CouchDB has started. Time to relax.
[info] [<0.31.0>] Apache CouchDB has started on http://127.0.0.1:5984/
[error] [<0.31.0>] Failed to write to URI file /root/couchdb/tmp/run/couch.uri: no such file or directory
[error] [<0.30.0>] {error_report,<0.30.0>,
                    {<0.30.0>,crash_report,
                     [[{initial_call,
                        {application_master,init,
                         ['Argument__1','Argument__2','Argument__3',
                          'Argument__4']}},
                       {pid,<0.30.0>},
                       {registered_name,[]},
                       {error_info,
                        {exit,
                         {enoent,
                          {couch_app,start,
                           [normal,
                            ["/usr/local/etc/couchdb/default.ini",
                             "/usr/local/etc/couchdb/local.ini"]]}},
                         [{application_master,init,4,
                           [{file,"application_master.erl"},{line,133}]},
                          {proc_lib,init_p_do_apply,3,
                           [{file,"proc_lib.erl"},{line,239}]}]}},
                       {ancestors,[<0.29.0>]},
                       {messages,[{'EXIT',<0.31.0>,normal}]},
                       {links,[<0.29.0>,<0.7.0>]},
                       {dictionary,[]},
                       {trap_exit,true},
                       {status,running},
                       {heap_size,987},
                       {stack_size,27},
                       {reductions,160}],
                      []]}}
{"init terminating in do_boot",{{badmatch,{error,{enoent,{couch_app,start,[normal,["/usr/local/etc/couchdb/default.ini","/usr/local/etc/couchdb/local.ini"]]}}}},[{couch,start,0,[{file,"couch.erl"},{line,18}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

Nach erneutem Start fehlte noch ein Ordner : mkdir /root/couchdb/tmp/run

Nun gibt es auf http://localhost:5984/_utils/config.html die _spatial Objekte.

gmake all-recursive
gmake[1]: Entering directory `/home/OBFUSCATED/src/couchdb'
Making all in bin
gmake[2]: Entering directory `/home/OBFUSCATED/src/couchdb/bin'
gmake[2]: Nothing to be done for `all'.
gmake[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/bin'
Making all in etc
gmake[2]: Entering directory `/home/OBFUSCATED/src/couchdb/etc'
Making all in couchdb
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/couchdb'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/couchdb'
Making all in default
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/default'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/default'
Making all in init
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/init'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/init'
Making all in launchd
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/launchd'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/launchd'
Making all in logrotate.d
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/logrotate.d'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/logrotate.d'
Making all in windows
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/windows'
gmake[3]: Nothing to be done for `all'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/windows'
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc'
gmake[3]: Nothing to be done for `all-am'.
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc'
gmake[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc'
Making all in src
gmake[2]: Entering directory `/home/OBFUSCATED/src/couchdb/src'
Making all in couchdb
gmake[3]: Entering directory `/home/OBFUSCATED/src/couchdb/src/couchdb'
Making all in priv
gmake[4]: Entering directory `/home/OBFUSCATED/src/couchdb/src/couchdb/priv'
gcc -DHAVE_CONFIG_H -I. -I../../.. -D_XOPEN_SOURCE -L/home/OBFUSCATED/src/js-1.8.5/js/src -L/usr/local/lib -L/opt/local/lib -I/usr/lib64/erlang/usr/include -I/home/OBFUSCATED/src/js-1.8.5/js/src -DXP_UNIX -D_BSD_SOURCE -g -O2 -MT couchjs-main.o -MD -MP -MF .deps/couchjs-main.Tpo -c -o couchjs-main.o `test -f 'couch_js/main.c' || echo './'`couch_js/main.c
couch_js/main.c: In function ‘evalcx’:
couch_js/main.c:62: warning: assignment makes pointer from integer without a cast
couch_js/main.c: In function ‘execute_script’:
couch_js/main.c:215: error: ‘JSScript’ undeclared (first use in this function)
couch_js/main.c:215: error: (Each undeclared identifier is reported only once
couch_js/main.c:215: error: for each function it appears in.)
couch_js/main.c:215: error: ‘script’ undeclared (first use in this function)
couch_js/main.c: At top level:
couch_js/main.c:251: warning: initialization from incompatible pointer type
couch_js/main.c:251: warning: excess elements in struct initializer
couch_js/main.c:251: warning: (near initialization for ‘global_functions[0]’)
couch_js/main.c:252: warning: initialization from incompatible pointer type
couch_js/main.c:252: warning: excess elements in struct initializer
couch_js/main.c:252: warning: (near initialization for ‘global_functions[1]’)
couch_js/main.c:253: warning: initialization from incompatible pointer type
couch_js/main.c:253: warning: excess elements in struct initializer
couch_js/main.c:253: warning: (near initialization for ‘global_functions[2]’)
couch_js/main.c:254: warning: initialization from incompatible pointer type
couch_js/main.c:254: warning: excess elements in struct initializer
couch_js/main.c:254: warning: (near initialization for ‘global_functions[3]’)
couch_js/main.c:255: warning: initialization from incompatible pointer type
couch_js/main.c:255: warning: excess elements in struct initializer
couch_js/main.c:255: warning: (near initialization for ‘global_functions[4]’)
couch_js/main.c:256: warning: initialization from incompatible pointer type
couch_js/main.c:256: warning: excess elements in struct initializer
couch_js/main.c:256: warning: (near initialization for ‘global_functions[5]’)
couch_js/main.c:257: warning: excess elements in struct initializer
couch_js/main.c:257: warning: (near initialization for ‘global_functions[6]’)
couch_js/main.c:266: warning: initialization from incompatible pointer type
gmake[4]: *** [couchjs-main.o] Error 1
gmake[4]: Leaving directory `/home/OBFUSCATED/src/couchdb/src/couchdb/priv'
gmake[3]: *** [all-recursive] Error 1
gmake[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/src/couchdb'
gmake[2]: *** [all-recursive] Error 1
gmake[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/src'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/OBFUSCATED/src/couchdb'
gmake: *** [all] Error 2
make all-recursive
make[1]: Entering directory `/home/OBFUSCATED/src/couchdb'
Making all in bin
make[2]: Entering directory `/home/OBFUSCATED/src/couchdb/bin'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/bin'
Making all in etc
make[2]: Entering directory `/home/OBFUSCATED/src/couchdb/etc'
Making all in couchdb
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/couchdb'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/couchdb'
Making all in default
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/default'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/default'
Making all in init
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/init'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/init'
Making all in launchd
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/launchd'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/launchd'
Making all in logrotate.d
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/logrotate.d'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/logrotate.d'
Making all in windows
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc/windows'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc/windows'
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/etc'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc'
make[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/etc'
Making all in src
make[2]: Entering directory `/home/OBFUSCATED/src/couchdb/src'
Making all in couchdb
make[3]: Entering directory `/home/OBFUSCATED/src/couchdb/src/couchdb'
Making all in priv
make[4]: Entering directory `/home/OBFUSCATED/src/couchdb/src/couchdb/priv'
gcc -DHAVE_CONFIG_H -I. -I../../.. -D_XOPEN_SOURCE -L/home/OBFUSCATED/src/js-1.8.5/js/src -L/usr/local/lib -L/opt/local/lib -I/usr/lib64/erlang/usr/include -I/home/OBFUSCATED/src/js-1.8.5/js/src -DXP_UNIX -D_BSD_SOURCE -g -O2 -MT couchjs-main.o -MD -MP -MF .deps/couchjs-main.Tpo -c -o couchjs-main.o `test -f 'couch_js/main.c' || echo './'`couch_js/main.c
make[4]: Leaving directory `/home/OBFUSCATED/src/couchdb/src/couchdb/priv'
make[3]: Leaving directory `/home/OBFUSCATED/src/couchdb/src/couchdb'
make[2]: Leaving directory `/home/OBFUSCATED/src/couchdb/src'
make[1]: Leaving directory `/home/OBFUSCATED/src/couchdb'
couch_js/main.c: In function ‘evalcx’:
couch_js/main.c:62: warning: assignment makes pointer from integer without a cast
couch_js/main.c: In function ‘execute_script’:
couch_js/main.c:215: error: ‘JSScript’ undeclared (first use in this function)
couch_js/main.c:215: error: (Each undeclared identifier is reported only once
couch_js/main.c:215: error: for each function it appears in.)
couch_js/main.c:215: error: ‘script’ undeclared (first use in this function)
couch_js/main.c: At top level:
couch_js/main.c:251: warning: initialization from incompatible pointer type
couch_js/main.c:251: warning: excess elements in struct initializer
couch_js/main.c:251: warning: (near initialization for ‘global_functions[0]’)
couch_js/main.c:252: warning: initialization from incompatible pointer type
couch_js/main.c:252: warning: excess elements in struct initializer
couch_js/main.c:252: warning: (near initialization for ‘global_functions[1]’)
couch_js/main.c:253: warning: initialization from incompatible pointer type
couch_js/main.c:253: warning: excess elements in struct initializer
couch_js/main.c:253: warning: (near initialization for ‘global_functions[2]’)
couch_js/main.c:254: warning: initialization from incompatible pointer type
couch_js/main.c:254: warning: excess elements in struct initializer
couch_js/main.c:254: warning: (near initialization for ‘global_functions[3]’)
couch_js/main.c:255: warning: initialization from incompatible pointer type
couch_js/main.c:255: warning: excess elements in struct initializer
couch_js/main.c:255: warning: (near initialization for ‘global_functions[4]’)
couch_js/main.c:256: warning: initialization from incompatible pointer type
couch_js/main.c:256: warning: excess elements in struct initializer
couch_js/main.c:256: warning: (near initialization for ‘global_functions[5]’)
couch_js/main.c:257: warning: excess elements in struct initializer
couch_js/main.c:257: warning: (near initialization for ‘global_functions[6]’)
couch_js/main.c:266: warning: initialization from incompatible pointer type
make[4]: *** [couchjs-main.o] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment