| #!/bin/sh |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| set -e |
| |
| . /usr/share/debconf/confmodule |
| |
| alias stripwhitespace="sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]*$//'" |
| |
| if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi |
| ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 } |
| |
| # prompt for password + confirmation until we get matching entries |
| # or an empty password |
| promptpass() { |
| while :; do |
| RET="" |
| db_input high couchdb/adminpass || true |
| db_go |
| db_get couchdb/adminpass |
| # if password isn't empty we ask for password verification |
| if [ -z "$RET" ]; then |
| break |
| fi |
| ADMIN_PW="$RET" |
| db_input high couchdb/adminpass_again || true |
| db_go |
| db_get couchdb/adminpass_again |
| if [ "$RET" = "$ADMIN_PW" ]; then |
| ADMIN_PW='' |
| break |
| fi |
| db_fset couchdb/adminpass_mismatch seen false |
| db_input critical couchdb/adminpass_mismatch |
| db_set couchdb/adminpass "" |
| db_set couchdb/adminpass_again "" |
| db_go |
| done |
| } |
| |
| promptbind() { |
| while :; do |
| RET="" |
| db_input high couchdb/bindaddress || true |
| db_go |
| db_get couchdb/bindaddress |
| # don't allow whatever is passed in |
| if [ "$RET" != "$1" ]; then |
| break |
| fi |
| db_fset couchdb/bindaddress seen false |
| done |
| } |
| |
| # if they exist, make current settings debconf's defaults |
| if [ -e /opt/couchdb/etc/vm.args ] ; then |
| cookie="$(grep '^-setcookie' /opt/couchdb/etc/vm.args | cut -d ' ' -f 2 | stripwhitespace)" |
| nodename="$(grep '^-name' /opt/couchdb/etc/vm.args | cut -d ' ' -f 2 | stripwhitespace)" |
| if [ "${cookie}" != "monster" ]; then |
| db_set couchdb/cookie "${cookie}" |
| fi |
| if [ "${nodename}" != "couchdb@localhost" ]; then |
| db_set couchdb/nodename "${nodename}" |
| fi |
| fi |
| if [ -e /opt/couchdb/etc/local.ini ]; then |
| if grep -q '^bind_address =' /opt/couchdb/etc/local.ini; then |
| bindaddress="$(grep '^bind_address' /opt/couchdb/etc/local.ini | cut -d ' ' -f 3 | stripwhitepsace)" |
| db_set couchdb/bindaddress "${bindaddress}" |
| fi |
| fi |
| # might be overridden by a local.d file |
| if [ -d /opt/couchdb/etc/local.d -a ls /opt/couchdb/etc/local.d/*.ini >/dev/null 2>&1 ]; then |
| for f in $(ls /opt/couchdb/etc/local.d/*.ini); do |
| if grep -q '^bind_address =' $f; then |
| bindaddress="$(grep '^bind_address' $f | cut -d ' ' -f 3 | stripwhitepsace)" |
| db_set couchdb/bindaddress "${bindaddress}" |
| fi |
| done |
| fi |
| |
| db_input high couchdb/mode || true |
| db_go |
| db_get couchdb/mode |
| case "$RET" in |
| none) |
| # Poor misguded one... |
| db_fset couchdb/nodename seen false |
| db_fset couchdb/cookie seen false |
| db_fset couchdb/adminpass seen false |
| db_fset couchdb/adminpass_again seen false |
| ;; |
| standalone) |
| db_fset couchdb/nodename seen false |
| db_fset couchdb/cookie seen false |
| promptbind w.x.y.z |
| # still prompt for password |
| promptpass |
| ;; |
| clustered) |
| if [ -z "$bindaddress" ]; then |
| db_set couchdb/bindaddress "0.0.0.0" |
| fi |
| db_input high couchdb/nodename || true |
| db_go |
| db_input high couchdb/cookie || true |
| db_go |
| # do not allow binding to loopback in clustered mode |
| promptbind 127.0.0.1 |
| promptpass |
| ;; |
| esac |