#! /bin/bash -x set -e # Source debconf library. . /usr/share/debconf/confmodule db_capb backup #Return if everything is good, exit error number otherwise function valid_ip() { local ip=$1 local stat=1 if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then OIFS=$IFS IFS='.' ip=($ip) IFS=$OIFS [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] stat=$? fi return $stat } #checking mysql connectivity and updating local.sh variables accordingly check_mysql(){ STATE=0 while [ "$STATE" -eq 0 ]; do db_input high alternc/mysql/host || true db_go db_get alternc/mysql/host || true MYSQL_HOST="$RET" db_input high alternc/mysql/remote_user || true db_go db_get alternc/mysql/remote_user || true MYSQL_USER="$RET" db_input high alternc/mysql/remote_password || true db_go db_get alternc/mysql/remote_password || true MYSQL_PASSWORD="$RET" db_input high alternc/mysql/client || true db_go db_get alternc/mysql/client || true MYSQL_CLIENT="$RET" if [ "`mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -h"$MYSQL_HOST" -Bse 'SELECT "OK";' 2>/dev/null`" = "OK" ]; then STATE=`expr $STATE + 1` else db_input high alternc/remote_mysql_error || true db_go db_get alternc/remote_mysql_error || true if [ "$RET" = "false" ]; then exit 4 fi fi done } # default values for local.sh MYSQL_HOST=127.0.0.1 MYSQL_DATABASE=alternc MYSQL_USER=sysusr MYSQL_PASS="`perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..10)' `" MYSQL_MAIL_USER=alternc_user MYSQL_MAIL_PASS="`perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..10)' `" MYSQL_CLIENT=localhost FQDN="`(cat /etc/mailname 2>/dev/null || hostname -f)|tr '[:upper:]' '[:lower:]'`" INTERNAL_IP="`env LANG=C /sbin/ifconfig|grep inet | grep -v 127.0.0.1| head -1 | cut -d: -f2 | sed -e 's/\([0-9\.]*\).*$/\1/' 2>/dev/null || hostname -f`" PUBLIC_IP="$INTERNAL_IP" DEFAULT_MX="`cat /etc/mailname 2>/dev/null || hostname -f`" ALTERNC_LOC=/var/alternc NS1_HOSTNAME="$FQDN" NS2_HOSTNAME="$FQDN" HOSTING="AlternC" SQLBACKUP_TYPE="rotate" SQLBACKUP_OVERWRITE="no" QUEST_STATE=1 while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 14 ]; do case "$QUEST_STATE" in 1) db_title AlternC db_input critical alternc/welcomeconfirm || true #db_go ;; 2) # Check the answer. db_get alternc/welcomeconfirm || true if [ "$RET" = "false" ]; then # reset the welcomeconfirm flag if user refuses so it gets asked again next time db_reset alternc/welcomeconfirm || true db_fset alternc/welcomeconfirm "seen" "false" || true exit 3 fi ;; 3) if [ -r /etc/alternc/local.sh ]; then # source the current config . /etc/alternc/local.sh fi #We ask for the hosting name and the FQDN db_set alternc/hostingname "$HOSTING" db_set alternc/desktopname "$FQDN" db_input high alternc/hostingname || true ;; 4) # Get the FQDN db_input high alternc/desktopname || true # Be sure that the FQDN is lowercase (Bug #1405) db_get alternc/desktopname db_set alternc/desktopname "`echo $RET | tr '[:upper:]' '[:lower:]'`" # End bug #1405 ;; 5) #we ask for the public and private ip db_set alternc/public_ip "$PUBLIC_IP" STATE=0 while [ $STATE -eq 0 ]; do db_input high alternc/public_ip || true db_go db_get alternc/public_ip ip="$RET" if valid_ip $ip ; then if [ $(echo $ip |egrep '(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1)$') ]; then db_input high alternc/use_private_ip || true db_go db_get alternc/use_private_ip if [ "$RET" = "true" ]; then STATE=1 else db_reset alternc/use_private_ip || true db_fset alternc/use_private_ip "seen" "false" || true fi else STATE=1 fi else STATE=1 fi done ;; 6) #private IP db_set alternc/internal_ip "$INTERNAL_IP" STATE=0 while [ $STATE -eq 0 ]; do db_input high alternc/internal_ip || true db_go db_get alternc/internal_ip ip="$RET" if valid_ip $ip ; then STATE=1 fi done ;; 7) #We ask for the DNS server for the ip # db_set alternc/ns1 "$NS1_HOSTNAME" db_input high alternc/ns1 || true ;; 8) db_set alternc/ns1 "$NS2_HOSTNAME" db_input high alternc/ns2 || true ;; 9) db_set alternc/default_mx "$DEFAULT_MX" db_input high alternc/default_mx || true ;; 10) if [ "`mysql --defaults-file=/etc/mysql/debian.cnf -Bse 'SELECT "OK";' 2>/dev/null`" = "OK" ]; then db_input critical alternc/use_local_mysql || true else db_input critical alternc/use_remote_mysql || true fi ;; 11) db_get alternc/use_local_mysql || true if [ "$RET" = "false" ]; then #user want to use a remote server check_mysql fi ;; 12) db_input low alternc/alternc_location || true ;; 13) # We need to check the alternc_location here because we have to test for quotas and acls db_get alternc/alternc_location if [ -z "$RET" ] then db_set alternc/alternc_location "$ALTERNC_LOC" fi db_get alternc/alternc_location LOCATION="$RET" #checking acl and quota activation, does't work with NFS yet. should now work with lxc MOUNT_POINT=$(df -P ${LOCATION%/*} | tail -n 1 | awk '{print $6}') # Get the mount options for the path: (warning, / may have multiple declarations, take the last one only : MOUNT_OPTS=$(awk '$2=="'$MOUNT_POINT'" { print $4 }' /proc/mounts | tail -1) # Check to see if acl is one of the mount points: ACL="$(echo "$MOUNT_OPTS" | tr "," "\\n" | egrep '^acl|attr2|user_xattr$')" || true if [ -z "$ACL" ]; then db_input critical alternc/acluninstalled || true db_title AlternC db_reset alternc/acluninstalled || true db_fset alternc/acluninstalled "seen" "false" || true exit 2 fi quota_activation=$(quotaon -pa 2>/dev/null |grep '^group.*on$' | /usr/bin/awk '$4 ~ /^\'$MOUNT_POINT'$/ {print $4}') if [ -z "$quota_activation" -o "$quota_activation" != "$MOUNT_POINT" ]; then db_input critical alternc/quotauninstalled || true db_go db_reset alternc/quotauninstalled || true db_fset alternc/quotauninstalled "seen" "false" || true fi ;; esac if db_go; then QUEST_STATE=$(($QUEST_STATE + 1)) else QUEST_STATE=$(($QUEST_STATE - 1)) fi done if [ -r /etc/alternc/my.cnf ]; then # make mysql configuration available as shell variables # to convert from .cnf to shell syntax, we: # * match only lines with "equal" in them (/=/) # * remove whitespace around the = and add a left quote operator ' (;s) # * add a right quote operator at the end of line (;s) # * convert mysql variables into our MYSQL_ naming convention (;s) # * print the result (;p) eval `sed -n -e "/=/{s/ *= *\"\?/='/;s/\"\?\$/'/;s/host/MYSQL_HOST/;s/user/MYSQL_USER/;s/password/MYSQL_PASS/;s/database/MYSQL_DATABASE/;p}" /etc/alternc/my.cnf` fi if [ -r /etc/alternc/my_mail.cnf ]; then # make mysql configuration available as shell variables # to convert from .cnf to shell syntax, we: # * match only lines with "equal" in them (/=/) # * remove whitespace around the = and add a left quote operator ' (;s) # * add a right quote operator at the end of line (;s) # * convert mysql variables into our MYSQL_ naming convention (;s) # * print the result (;p) eval `sed -n -e "/=/{s/ *= *\"\?/='/;s/\"\?\$/'/;s/host/MYSQL_HOST/;s/user/MYSQL_MAIL_USER/;s/password/MYSQL_MAIL_PASS/;s/database/MYSQL_DATABASE/;p}" /etc/alternc/my_mail.cnf` fi #if [ "`mysql --defaults-file=/etc/mysql/debian.cnf -Bse 'SELECT "OK";' 2>/dev/null`" = "OK" ]; then # db_input critical alternc/use_local_mysql || true # db_go # db_get alternc/use_local_mysql || true # if [ "$RET" = "false" ]; then # #user want to use a remote server # check_mysql # fi #else #db_input critical alternc/use_remote_mysql || true #db_go #db_get alternc/use_remote_mysql || true # if [ "$RET" = "true" ]; then # #user want to use a remote server # check_mysql # fi #fi #if [ -z "$ACL" ]; then # db_input critical alternc/acluninstalled || true # db_go # db_title AlternC # db_reset alternc/acluninstalled || true # db_fset alternc/acluninstalled "seen" "false" || true # exit 2 #fi #quota_activation=$(quotaon -pa 2>/dev/null |grep '^group.*on$' | /usr/bin/awk '$4 ~ /^\'$MOUNT_POINT'$/ {print $4}') # #if [ -z "$quota_activation" -o "$quota_activation" != "$MOUNT_POINT" ]; then # db_input critical alternc/quotauninstalled || true # db_go # db_reset alternc/quotauninstalled || true # db_fset alternc/quotauninstalled "seen" "false" || true #fi db_get alternc/hostingname if [ -z "$RET" ] then db_set alternc/hostingname "$HOSTING" fi db_get alternc/desktopname if [ -z "$RET" ] then db_set alternc/desktopname "$FQDN" fi db_get alternc/monitor_ip if [ -z "$RET" ] then db_set alternc/monitor_ip "$MONITOR_IP" fi db_get alternc/ns2 if [ -z "$RET" ] then db_set alternc/ns2 "$NS2_HOSTNAME" fi db_get alternc/default_mx2 if [ -z "$RET" ] then db_set alternc/default_mx2 "$DEFAULT_SECONDARY_MX" fi db_get alternc/mysql/host if [ -z "$RET" ] then db_set alternc/mysql/host "$MYSQL_HOST" fi #Even if we asked the question concerning the database earlier in the process #those calls are needed to pass the variable of remote sql server to AlternC db_get alternc/mysql/db if [ -z "$RET" ] then db_set alternc/mysql/db "$MYSQL_DATABASE" fi db_get alternc/mysql/user if [ -z "$RET" ] then db_set alternc/mysql/user "$MYSQL_USER" fi db_get alternc/mysql/password if [ -z "$RET" ] then db_set alternc/mysql/password "$MYSQL_PASS" fi db_get alternc/mysql/client if [ -z "$RET" ] then db_set alternc/mysql/client "$MYSQL_CLIENT" fi db_get alternc/sql/backup_type if [ -z "$RET" ] then db_set alternc/sql/backup_type "$SQLBACKUP_TYPE" fi db_get alternc/sql/backup_overwrite if [ -z "$RET" ] then db_set alternc/sql/backup_overwrite "$SQLBACKUP_OVERWRITE" fi db_get alternc/mysql/alternc_mail_user if [ -z "$RET" ] then db_set alternc/mysql/alternc_mail_user "$MYSQL_MAIL_USER" fi db_get alternc/mysql/alternc_mail_password if [ -z "$RET" ] then db_set alternc/mysql/alternc_mail_password "$MYSQL_MAIL_PASS" fi db_input low alternc/default_mx2 || true db_input low alternc/mysql/host || true db_input low alternc/mysql/db || true db_input low alternc/mysql/user || true db_input low alternc/mysql/password || true db_input low alternc/mysql/alternc_mail_password || true db_input low alternc/mysql/alternc_mail_user || true db_input low alternc/mysql/client || true db_input low alternc/sql/backup_type || true db_input low alternc/sql/overwrite || true db_input low alternc/monitor_ip || true db_input low alternc/slaves || true db_go # vim: et sw=4