2013-08-23 4 views
2

J'ai installé CouchDB 1.3.1 sur FreeBSD depuis le portage. Il exécute find lorsqu'il est démarré par l'utilisateur root. Cependant, lorsque vous essayez de le démarrer avec rc-script, il ne s'affiche pas.CouchDB sur FreeBSD ne démarre pas en tant qu'utilisateur couchdb

J'ai défini les autorisations correctes (propriétaire CouchDB il) pour /var/log/couchdb/var/run/couchdb et /usr/local/etc/couchdb

Cela ne l'ont pas cependant le rick. J'ai ouvert une session sur le compte d'utilisateur couchdb et essayé de démarrer couchdb. En conséquence, je suis arrivé ceci:

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() 

Que puis-je essayer de faire démarrer de CouchDB à partir d'un compte non root?

Répondre

2

Problème résolu. Là où quelques raisons pour cela ne pas fonctionner. Voici la version courte:

Après l'installation du port, NE PAS exécuter couchdb en tant que root. Faire cela bouleverse les permissions.

Le correctif pour cela serait de supprimer complètement couchdb et de le réinstaller. Bien sûr, ce n'est qu'une option tant qu'il n'y a rien dans la base de données. Le script suivant fera en sorte que CouchDB est purgé de votre système complètement:

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

Après cette installation CouchDB à nouveau et l'exécuter comme il est censé fonctionner

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

Si la réinstallation n'est pas un option pour vous exécutez le script suivant pour réparer les autorisations.

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/ 

La dernière ligne supprime les autorisations pour d'autres utilisateurs que couchdb comme c'est où toutes les données sont les magasins. Ceci est bien sûr facultatif, mais améliore la sécurité.

Ces solutions ont été testées avec FreeBSD 9.1 et CouchDB 1.3.1 à partir du portage.

Un merci spécial à this blogpost car il contenait des indices essentiels sur ce qui n'allait pas.