couchdb icon indicating copy to clipboard operation
couchdb copied to clipboard

3.2.2 on Ubuntu 22.04 -- interactive install creates admin, pre-populated debconf does not -- couchdb refuses to start

Open mattpr opened this issue 1 year ago • 3 comments

Moving to couch3.

We pre-populate debconf for unattended installs when provisioning servers. Something like...

echo "couchdb couchdb/mode    select  standalone
couchdb couchdb/adminpass   password <somepass>
couchdb couchdb/adminpass_again password <somepass>
couchdb couchdb/bindaddress string  127.0.0.1
couchdb couchdb/nodename    string  couchdb@localhost
couchdb couchdb/postrm_remove_databases boolean false
couchdb couchdb/cookie  string <somecookie>
" | debconf-set-selections

followed by

DEBIAN_FRONTEND=noninteractive apt-get install -y couchdb

However when starting up couchdb we get the following:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  No Admin Account Found, aborting startup.
  Please configure an admin account in your local.ini file.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

However if we clear the debconf values and do a manual interactive install of couchdb, the admin account is properly set and couchdb starts up without issue.

apt-get remove couchdb
apt-get install debconf-utils
echo PURGE | debconf-communicate couchdb
debconf-get-selections | grep -E '^couchdb'
apt-get install couchdb

Is there a way we can utilize debconf preseed to ensure the admin is created? I know I can also set the password in a local ini and couch will salt/hash it on next startup...however we would like to use debconf if possible.

mattpr avatar Aug 05 '22 15:08 mattpr

Well I found at least one interesting thing.

This debconf...

couchdb couchdb/bindaddress string  127.0.0.1

...results in...

cat /opt/couchdb/etc/default.d/10-bind-address.ini

# Package-introduced bind address
[chttpd]
bind_address =  127.0.0.1

...which prevents couchdb from starting. The error in the log is the following:

Application chttpd exited with reason: {{shutdown,{failed_to_start_child,chttpd,invalid_bind_address}},{chttpd_app,start,[normal,[]]}}

This is because there is 2 spaces between the = and the 127. Apparently couchdb doesn't trim whitespace when parsing config files (at least in 3.2.2).

The fix is that all excess whitespace needs to be removed from the debconf pre-populated values (single space separating each token only).

This doesn't resolve the admin user not getting created, but is a related debconf issue.

mattpr avatar Aug 05 '22 15:08 mattpr

Hi, I suspect that the problems are entirely due to the leading/trailing white spaces. Did the admin-config value also have leading white-spaces in it?

big-r81 avatar Aug 15 '22 09:08 big-r81

@mattpr ^

big-r81 avatar Aug 24 '22 16:08 big-r81

I think this issue is fixed. Closing.

big-r81 avatar Oct 10 '22 17:10 big-r81

Hey @big-r81 -- really sorry I ghosted you. It wasn't on purpose. I didn't see any notifications (probably just missed it on a busy inbox day) and don't normally check notifications directly on github.

Unfortunately it has been so long I don't have the repro or issue top of mind anymore, but I did save a backup of the debconf we were using from around this time and there was some extra whitespace on couchdb/adminpass.

couchdb couchdb/adminpass   password XXXXXXXXXXXXXXX
couchdb couchdb/adminpass_again password XXXXXXXXXXXXXXX
...

Our updated debconf doesn't have the extra whitespaces.

I've deployed couchdb recently for a new app and the debconf does work for the admin user now...so yes I would say one way or another (it was probably the same whitespace issue), this has been resolved.

mattpr avatar Dec 13 '22 15:12 mattpr

👍🏼

big-r81 avatar Dec 13 '22 16:12 big-r81