You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by Hans J Schroeder <hs...@cloudno.de> on 2012/12/16 09:12:49 UTC

Tracking down missing runtime dependencies

Hi,

I have trouble to get the latest build from the 1.3.x branch running. The error is since Dec 11th. The build runs through so far, but when I start couchdb, I get the famous "init terminating in do_boot" error. I am sure there is a missing native dependency, but neither the log nor the crash_dump is giving a hint which component, icu, ejson, crypto,... is not satisfied.

Is there any way to track this down other than trail and error?

The error message is always the same, despite which lib is missing or has missing dependencies:

Apache CouchDB 1.3.0a-a325083-git (LogLevel=info) is starting.
{"init terminating in do_boot",{{badmatch,{error,{bad_return,{{couch_app,start,[normal,["/Users/hs/prj/build-couchdb-1.3/build/etc/couchdb/default.ini","/Users/hs/prj/build-couchdb-1.3/build/etc/couchdb/local.ini"]]},{'EXIT',{{badmatch,{error,shutdown}},[{couch_server_sup,start_server,1,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/couch_server_sup.erl"},{line,98}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,274}]}]}}}}}},[{couch,start,0,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/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 ()

- Hans

Re: Tracking down missing runtime dependencies

Posted by Hans J Schroeder <hs...@cloudno.de>.
On Dec 16, 2012, at 10:43 AM, Dave Cottlehuber <dc...@jsonified.com> wrote:

> Hi Hans,
> 
> That's odd. If you can post the output of the build phase (configure +
> make both) somewhere that will help.
> 
> Are you using build-couchdb for this?
> 
> The general approach is to start up using the same erlang parameters
> as in `couchdb -i` but without the `-s couch`. This will dump you into
> an erlang shell and you can work through from there. You can add
> -init_debug to the mix as well, but I find the output is not
> particularly helpful.
> 
> {progress,preloaded}
> {progress,kernel_load_completed}
> {progress,modules_loaded}
> {start,heart}
> {start,error_logger}
> {start,application_controller}
> {progress,init_kernel_started}
> {apply,{application,load,[{application,stdlib,[{description,"ERTS  CXC
> 138 10"},{vsn,"1.18.3"},{id,[]},{modules,[array,base64,beam_lib,binary,c,calendar,dets,dets_server,dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph,digraph_utils,edlin,edlin_expand,epp,eval_bits,erl_bits,erl_compile,erl_eval,erl_expand_records,erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,erl_scan,erl_tar,error_logger_file_h,error_logger_tty_h,escript,ets,file_sorter,filelib,filename,gb_trees,gb_sets,gen,gen_event,gen_fsm,gen_server,io,io_lib,io_lib_format,io_lib_fread,io_lib_pretty,lib,lists,log_mf_h,math,ms_transform,orddict,ordsets,otp_internal,pg,pool,proc_lib,proplists,qlc,qlc_pt,queue,random,re,sets,shell,shell_default,slave,sofs,string,supervisor,supervisor_bridge,sys,timer,unicode,win32reg,zip]},{registered,[timer_server,rsh_starter,take_over_monitor,pool_master,dets]},{applications,[kernel]},{included_applications,[]},{env,[]},{maxT,infinity},{maxP,infinity}]}]}}
> {progress,applications_loaded}
> {apply,{application,start_boot,[kernel,permanent]}}
> Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:8:8]
> [async-threads:4] [hipe] [kernel-poll:true] [dtrace]
> 
> {apply,{application,start_boot,[stdlib,permanent]}}
> {apply,{c,erlangrc,[]}}
> {progress,started}
> Eshell V5.9.3  (abort with ^G)
> (icouch@akai)1> Apache CouchDB 1.2.0 (LogLevel=debug) is starting.
> Configuration Settings ["/usr/local/etc/couchdb/default.ini",
> ….
> 
> http://mail-archives.apache.org/mod_mbox/couchdb-user/201205.mbox/%3CCAKrexVKSaK8CM-4sYmmrbfFuunm09reGUTib6UV-=QFRC9Nezw@mail.gmail.com%3E
> 
> If erlang starts up fine, you more or less do:
> 
> application:start(crypto).
> application:start(couch).
> 
> and eventually one of them will bork.
> 
> 
> IIRC neither icu, ejson or snappy are required for couch to start up.
> 
> application:start(ejson).
> application:start(snappy).
> 
> A+
> Dave
> 
> On 16 December 2012 09:12, Hans J Schroeder <hs...@cloudno.de> wrote:
>> Hi,
>> 
>> I have trouble to get the latest build from the 1.3.x branch running. The error is since Dec 11th. The build runs through so far, but when I start couchdb, I get the famous "init terminating in do_boot" error. I am sure there is a missing native dependency, but neither the log nor the crash_dump is giving a hint which component, icu, ejson, crypto,... is not satisfied.
>> 
>> Is there any way to track this down other than trail and error?
>> 
>> The error message is always the same, despite which lib is missing or has missing dependencies:
>> 
>> Apache CouchDB 1.3.0a-a325083-git (LogLevel=info) is starting.
>> {"init terminating in do_boot",{{badmatch,{error,{bad_return,{{couch_app,start,[normal,["/Users/hs/prj/build-couchdb-
> 
> basically this is saying that the application you're requesting to
> start erlang with (via `-s couch` in our case) isn't running so the VM
> shuts down.
> 
> If you exclude the `-s couch` from startup you can walk through these
> steps manually, following what couch does during the startup phase
> until you find something illuminating.
> 
> Some useful links:
> 
> the overall application & related erlang / vm dependencies:
> 
> https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch.app.tpl.in
> 
> the start function (load config files, start beam dependencies):
> 
> https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch_app.erl
> 
> the couch initialisation:
> 
> https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch_server_sup.erl
> 
> That should get you 90% of the way there -- happy spelunking!
> 
> 1.3/build/etc/couchdb/default.ini","/Users/hs/prj/build-couchdb-1.3/build/etc/couchdb/local.ini"]]},{'EXIT',{{badmatch,{error,shutdown}},[{couch_server_sup,start_server,1,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/couch_server_sup.erl"},{line,98}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,274}]}]}}}}}},[{couch,start,0,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/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 ()
>> 
>> - Hans

Hi Dave,

Many thanks for the detailed insight. That's exactly what I missed so far. To start the app step by step and to isolate the failing component. And yes, I am using build-couchdb. 

I am very close now to get everything running again.

The culprit was couch_icu_driver.so. Wrong fixups kept it from loading. I used the "OSX dependency tracker" from there. (http://mmi.tudelft.nl/~wouter/useful/dylibdeps/index.html) 

- Hans

Re: Tracking down missing runtime dependencies

Posted by Dave Cottlehuber <dc...@jsonified.com>.
Hi Hans,

That's odd. If you can post the output of the build phase (configure +
make both) somewhere that will help.

Are you using build-couchdb for this?

The general approach is to start up using the same erlang parameters
as in `couchdb -i` but without the `-s couch`. This will dump you into
an erlang shell and you can work through from there. You can add
-init_debug to the mix as well, but I find the output is not
particularly helpful.

{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,error_logger}
{start,application_controller}
{progress,init_kernel_started}
{apply,{application,load,[{application,stdlib,[{description,"ERTS  CXC
138 10"},{vsn,"1.18.3"},{id,[]},{modules,[array,base64,beam_lib,binary,c,calendar,dets,dets_server,dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph,digraph_utils,edlin,edlin_expand,epp,eval_bits,erl_bits,erl_compile,erl_eval,erl_expand_records,erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,erl_scan,erl_tar,error_logger_file_h,error_logger_tty_h,escript,ets,file_sorter,filelib,filename,gb_trees,gb_sets,gen,gen_event,gen_fsm,gen_server,io,io_lib,io_lib_format,io_lib_fread,io_lib_pretty,lib,lists,log_mf_h,math,ms_transform,orddict,ordsets,otp_internal,pg,pool,proc_lib,proplists,qlc,qlc_pt,queue,random,re,sets,shell,shell_default,slave,sofs,string,supervisor,supervisor_bridge,sys,timer,unicode,win32reg,zip]},{registered,[timer_server,rsh_starter,take_over_monitor,pool_master,dets]},{applications,[kernel]},{included_applications,[]},{env,[]},{maxT,infinity},{maxP,infinity}]}]}}
{progress,applications_loaded}
{apply,{application,start_boot,[kernel,permanent]}}
Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:8:8]
[async-threads:4] [hipe] [kernel-poll:true] [dtrace]

{apply,{application,start_boot,[stdlib,permanent]}}
{apply,{c,erlangrc,[]}}
{progress,started}
Eshell V5.9.3  (abort with ^G)
(icouch@akai)1> Apache CouchDB 1.2.0 (LogLevel=debug) is starting.
Configuration Settings ["/usr/local/etc/couchdb/default.ini",
….

http://mail-archives.apache.org/mod_mbox/couchdb-user/201205.mbox/%3CCAKrexVKSaK8CM-4sYmmrbfFuunm09reGUTib6UV-=QFRC9Nezw@mail.gmail.com%3E

If erlang starts up fine, you more or less do:

application:start(crypto).
application:start(couch).

and eventually one of them will bork.


IIRC neither icu, ejson or snappy are required for couch to start up.

application:start(ejson).
application:start(snappy).

A+
Dave

On 16 December 2012 09:12, Hans J Schroeder <hs...@cloudno.de> wrote:
> Hi,
>
> I have trouble to get the latest build from the 1.3.x branch running. The error is since Dec 11th. The build runs through so far, but when I start couchdb, I get the famous "init terminating in do_boot" error. I am sure there is a missing native dependency, but neither the log nor the crash_dump is giving a hint which component, icu, ejson, crypto,... is not satisfied.
>
> Is there any way to track this down other than trail and error?
>
> The error message is always the same, despite which lib is missing or has missing dependencies:
>
> Apache CouchDB 1.3.0a-a325083-git (LogLevel=info) is starting.
> {"init terminating in do_boot",{{badmatch,{error,{bad_return,{{couch_app,start,[normal,["/Users/hs/prj/build-couchdb-

basically this is saying that the application you're requesting to
start erlang with (via `-s couch` in our case) isn't running so the VM
shuts down.

If you exclude the `-s couch` from startup you can walk through these
steps manually, following what couch does during the startup phase
until you find something illuminating.

Some useful links:

the overall application & related erlang / vm dependencies:

https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch.app.tpl.in

the start function (load config files, start beam dependencies):

https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch_app.erl

the couch initialisation:

https://github.com/apache/couchdb/blob/1.3.x/src/couchdb/couch_server_sup.erl

That should get you 90% of the way there -- happy spelunking!

1.3/build/etc/couchdb/default.ini","/Users/hs/prj/build-couchdb-1.3/build/etc/couchdb/local.ini"]]},{'EXIT',{{badmatch,{error,shutdown}},[{couch_server_sup,start_server,1,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/couch_server_sup.erl"},{line,98}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,274}]}]}}}}}},[{couch,start,0,[{file,"/Users/hs/prj/build-couchdb-1.3/git-build/git@github.com%3Aapache%2Fcouchdb.git%3A1.3.x/src/couchdb/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 ()
>
> - Hans