【问题标题】:CouchDB on FreeBSD doesn't start as couchdb userFreeBSD 上的 CouchDB 不以 couchdb 用户身份启动
【发布时间】:2016-03-25 21:28:37
【问题描述】:

我已经通过 portage 在 FreeBSD 上安装了 CouchDB 1.3.1。它在由 root 用户启动时运行 find。但是,当尝试通过 rc-script 启动它时,它不会出现。

我已经为/var/log/couchdb /var/run/couchdb/usr/local/etc/couchdb 设置了正确的(couchdb 拥有它)权限

然而,这并没有奏效。我已登录couchdb 用户帐户并尝试启动couchdb。结果我得到了这个:

Apache CouchDB 1.3.1 (LogLevel=info) is starting.
[error] [<0.97.0>] {error_report,<0.30.0>,
                    {<0.97.0>,crash_report,
                     [[{initial_call,{couch_file,init,['Argument__1']}},
                       {pid,<0.97.0>},
                       {registered_name,[]},
                       {error_info,
                        {exit,
                         {{badmatch,{error,eacces}},
                          [{couch_file,init,1,
                            [{file,"couch_file.erl"},{line,314}]},
                           {gen_server,init_it,6,
                            [{file,"gen_server.erl"},{line,304}]},
                           {proc_lib,init_p_do_apply,3,
                            [{file,"proc_lib.erl"},{line,227}]}]},
                         [{gen_server,init_it,6,
                           [{file,"gen_server.erl"},{line,328}]},
                          {proc_lib,init_p_do_apply,3,
                           [{file,"proc_lib.erl"},{line,227}]}]}},
                       {ancestors,[<0.96.0>]},
                       {messages,[]},
                       {links,[#Port<0.2176>,<0.96.0>]},
                       {dictionary,[]},
                       {trap_exit,true},
                       {status,running},
                       {heap_size,610},
                       {stack_size,24},
                       {reductions,478}],
                      [{neighbour,
                        [{pid,<0.96.0>},
                         {registered_name,[]},
                         {initial_call,{erlang,apply,2}},
                         {current_function,{proc_lib,sync_wait,2}},
                         {ancestors,[]},
                         {messages,
                          [{ack,<0.97.0>,
                            {error,
                             {{badmatch,{error,eacces}},
                              [{couch_file,init,1,
                                [{file,"couch_file.erl"},{line,314}]},
                               {gen_server,init_it,6,
                                [{file,"gen_server.erl"},{line,304}]},
                               {proc_lib,init_p_do_apply,3,
                                [{file,"proc_lib.erl"},{line,227}]}]}}}]},
                         {links,[<0.86.0>,<0.97.0>]},
                         {dictionary,[]},
                         {trap_exit,false},
                         {status,runnable},
                         {heap_size,233},
                         {stack_size,20},
                         {reductions,28}]}]]}}
{"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}},[{couch_server_sup,start_server,1,[{file,"couch_server_sup.erl"},{line,98}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,274}]}]}}}}}},[{couch,start,0,[{file,"couch.erl"},{line,18}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
init terminating in do_boot ()

我还能尝试什么让 couchdb 从非 root 帐户启动?

【问题讨论】:

    标签: couchdb freebsd


    【解决方案1】:

    问题解决了。那里有几个原因使它不起作用。这是简短的版本:

    安装端口后,不要以 root 身份运行couchdb。这样做会破坏权限。

    对此的快速修复是完全删除 couchdb 并重新安装。当然,这只是一种选择,只要数据库中没有任何内容。以下脚本将确保从您的系统中彻底清除 couchdb:

    cd /usr/ports/database/couchdb
    make deinstall
    make clean
    rm -rf /var/{db,lib,log,run}/couchdb /usr/local/etc/couchdb/
    

    之后再次安装 couchdb 并按照它应该运行的方式运行它

    cd /usr/ports/database/couchdb
    make install clean
    service couchdb start
    

    如果您无法选择重新安装,请运行以下脚本来修复权限。

    chown -R couchdb:couchdb /var/{db,lib,log,run}/couchdb /usr/local/etc/couchdb/
    chmod -R ug+rw /var/{db,lib,log,run}/couchdb /usr/local/etc/couchdb/local.ini
    chmod -R o-rwx /var/{db,lib,log,run}/couchdb /usr/local/etc/couchdb/
    

    最后一行删除了除couchdb 之外的用户的权限,因为这是所有数据的存储位置。这当然是可选的,但可以提高安全性。

    这些解决方案已经使用来自 portage 的 FreeBSD 9.1 和 CouchDB 1.3.1 进行了测试。

    特别感谢 this blogpost,因为它包含有关问题所在的重要线索。

    【讨论】:

    • 还记得至少在/var/lib 上设置chmod a+x。否则,couchdb 进程无法遵循它自己的符号链接。
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多