diff --git a/debian/alternc.config b/debian/alternc.config index 3e9bd097..2784ed09 100644 --- a/debian/alternc.config +++ b/debian/alternc.config @@ -1,4 +1,4 @@ -#! /bin/bash +#!/bin/bash set -e @@ -8,61 +8,68 @@ set -e db_capb backup -#Return if everything is good, exit error number otherwise +#Return if everything is good, exit error number otherwise function valid_ip() { - local ip=$1 - local stat=1 + 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 + 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(){ - +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 - + 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/retry_remote_mysql || true + if [ $? -eq 30 ]; then + db_input high alternc/remote_mysql_error || true + db_go || true + exit 4 + fi + db_go + db_get alternc/retry_remote_mysql || true + if [ "$RET" = "false" ]; then + db_input high alternc/remote_mysql_error || true + db_go || true + exit 4 + fi + fi + done } -function get_first_existing_dir() { +function get_first_existing_dir() +{ # Prend en premier parametre un chemin # Retourne le répertoire parent existant le plus "proche" # Exemple: on lui donne /var/www/alternc/gerard/dupont/ mais @@ -79,7 +86,6 @@ function get_first_existing_dir() { } - # default values for local.sh MYSQL_HOST=127.0.0.1 MYSQL_DATABASE=alternc @@ -102,28 +108,33 @@ SQLBACKUP_TYPE="rotate" SQLBACKUP_OVERWRITE="no" QUEST_STATE=1 -while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 13 ]; do +while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 14 ]; do case "$QUEST_STATE" in 1) if [ -r /etc/alternc/local.sh ]; then - # source the current config - . /etc/alternc/local.sh + # source the current config + . /etc/alternc/local.sh fi # upgrade <= 3.0 to >= 3.1 - if [ "x$ALTERNC_LOC" != "x" ] - then - ALTERNC_HTML="$ALTERNC_LOC/html" - ALTERNC_MAIL="$ALTERNC_LOC/mail" + if [ "x$ALTERNC_LOC" != "x" ]; then + ALTERNC_HTML="$ALTERNC_LOC/html" + ALTERNC_MAIL="$ALTERNC_LOC/mail" 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 + db_get alternc/hostingname + if [ -z "$RET" ]; then + db_set alternc/hostingname "$HOSTING" + db_input high alternc/hostingname || true + fi ;; 2) # Get the FQDN - db_input high alternc/desktopname || true + db_get alternc/desktopname + if [ -z "$RET" ]; then + db_set alternc/desktopname "$FQDN" + db_input high alternc/desktopname || true + fi # Be sure that the FQDN is lowercase (Bug #1405) db_get alternc/desktopname db_set alternc/desktopname "`echo $RET | tr '[:upper:]' '[:lower:]'`" @@ -131,24 +142,27 @@ while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 13 ]; do ;; 3) #we ask for the public and private ip - db_set alternc/public_ip "$PUBLIC_IP" + db_get alternc/public_ip + if [ -z "$RET" ]; then + db_set alternc/public_ip "$PUBLIC_IP" + fi STATE=0 while [ $STATE -eq 0 ]; do db_input high alternc/public_ip || true db_go - db_get alternc/public_ip + db_get alternc/public_ip ip="$RET" - if valid_ip $ip ; then + 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 + 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 @@ -159,55 +173,69 @@ while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 13 ]; do ;; 4) #private IP - - db_set alternc/internal_ip "$INTERNAL_IP" + db_get alternc/internal_ip + if [ -z "$RET" ]; then + db_set alternc/internal_ip "$INTERNAL_IP" + fi STATE=0 while [ $STATE -eq 0 ]; do db_input high alternc/internal_ip || true db_go - db_get alternc/internal_ip + db_get alternc/internal_ip ip="$RET" - if valid_ip $ip ; then + if valid_ip $ip ; then STATE=1 - fi + fi done ;; 5) #We ask for the DNS server for the ip - db_set alternc/ns1 "$NS1_HOSTNAME" - db_input high alternc/ns1 || true + db_get alternc/ns1 + if [ -z "$RET" ]; then + db_set alternc/ns1 "$NS1_HOSTNAME" + db_input high alternc/ns1 || true + fi ;; 6) - db_set alternc/ns2 "$NS2_HOSTNAME" - db_input high alternc/ns2 || true + db_get alternc/ns2 + if [ -z "$RET" ]; then + db_set alternc/ns2 "$NS2_HOSTNAME" + db_input high alternc/ns2 || true + fi ;; 7) - db_set alternc/default_mx "$DEFAULT_MX" - db_input high alternc/default_mx || true + db_get alternc/default_mx + if [ -z "$RET" ]; then + db_set alternc/default_mx "$DEFAULT_MX" + db_input high alternc/default_mx || true + fi ;; 8) 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 ;; 9) - db_get alternc/use_local_mysql || true - if [ -z "$RET" -o "$RET" == "false" ] - then - #user want to use a remote server - check_mysql + db_get alternc/use_local_mysql + if [ "$RET" != "true" ]; then + db_input critical alternc/use_remote_mysql || true fi ;; 10) - # We need to set the alternc_location here because we have to test for quotas and acls + db_get alternc/use_remote_mysql + if [ "$RET" == "true" ]; then + # user want to use a remote server + check_mysql + fi + ;; + 11) + # We need to set the alternc_location here because we have to test for quotas and acls db_get alternc/alternc_html - if [ -z "$RET" ];then + if [ -z "$RET" ]; then db_set alternc/alternc_html $ALTERNC_HTML - db_input high alternc/alternc_html + db_input high alternc/alternc_html || true fi db_get alternc/alternc_html @@ -219,121 +247,93 @@ while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 13 ]; do aclcheckfile="$basedir/test-acl" touch "$aclcheckfile" setfacl -m u:root:rwx "$aclcheckfile" 2>/dev/null || ( - test -e "$aclcheckfile" && rm -f "$aclcheckfile" || true - db_input critical alternc/acluninstalled || true - db_go - db_reset alternc/acluninstalled || true - db_fset alternc/acluninstalled "seen" "false" || true - exit 2 + test -e "$aclcheckfile" && rm -f "$aclcheckfile" || true + db_input high alternc/acluninstalled || true + db_go || true + exit 2 ) test -e "$aclcheckfile" && rm -f "$aclcheckfile" || true quota -gA -f $MOUNT_POINT 2>/dev/null || ( - db_get alternc/quotauninstalled - if [ -z "$RET" ]; then - db_input critical alternc/quotauninstalled || true - db_go - #db_reset alternc/quotauninstalled || true - db_set alternc/quotauninstalled "false" || true - fi + db_get alternc/quotauninstalled + if [ -z "$RET" ]; then + db_input critical alternc/quotauninstalled || true + db_go + #db_reset alternc/quotauninstalled || true + db_set alternc/quotauninstalled "false" || true + fi ) ;; - 11) + 12) db_get alternc/alternc_mail - if [ -z "$RET" ];then + if [ -z "$RET" ]; then db_set alternc/alternc_mail $ALTERNC_MAIL - db_input high alternc/alternc_mail + db_input high alternc/alternc_mail || true fi ;; - 12) + 13) db_get alternc/alternc_logs if [ -z "$RET" ];then db_set alternc/alternc_logs $ALTERNC_LOGS - db_input high alternc/alternc_logs + db_input high alternc/alternc_logs || true fi ;; esac if db_go; then QUEST_STATE=$(($QUEST_STATE + 1)) - else + 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` + # 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` + # 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 - -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" +if [ -z "$RET" ]; then + db_set alternc/monitor_ip "$MONITOR_IP" fi db_get alternc/default_mx2 -if [ -z "$RET" ] - then -db_set alternc/default_mx2 "$DEFAULT_SECONDARY_MX" +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" +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" +if [ -z "$RET" ]; then + db_set alternc/mysql/db "$MYSQL_DATABASE" fi db_get alternc/mysql/user -if [ -z "$RET" ] - then +if [ -z "$RET" ]; then db_get alternc/mysql/remote_user - if [ -z "$RET" ] - then + if [ -z "$RET" ]; then db_set alternc/mysql/user "$MYSQL_USER" else db_set alternc/mysql/user "$RET" @@ -341,11 +341,9 @@ if [ -z "$RET" ] fi db_get alternc/mysql/password -if [ -z "$RET" ] - then +if [ -z "$RET" ]; then db_get alternc/mysql/remote_password - if [ -z "$RET" ] - then + if [ -z "$RET" ]; then db_set alternc/mysql/password "$MYSQL_PASS" else db_set alternc/mysql/password "$RET" @@ -353,33 +351,28 @@ if [ -z "$RET" ] fi db_get alternc/mysql/client -if [ -z "$RET" ] - then - db_set alternc/mysql/client "$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" +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" +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" +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" +if [ -z "$RET" ]; then + db_set alternc/mysql/alternc_mail_password "$MYSQL_MAIL_PASS" fi db_input low alternc/default_mx2 || true diff --git a/debian/alternc.templates b/debian/alternc.templates index 9a98dca6..53e45640 100644 --- a/debian/alternc.templates +++ b/debian/alternc.templates @@ -1,11 +1,14 @@ Template: alternc/acluninstalled -Type: note +Type: error _Description: AlternC need ACL on filesystem AlternC can't work without ACL activated on its filesystem. ACL are currently not enabled. . Also, you need to activate group quota (grpquota) to be able to use disk quota (but that's not mandatory). + . + This is a fatal error and will cause the package installation + to fail. Template: alternc/quotauninstalled Type: note @@ -238,11 +241,10 @@ _Description: Use locally found MySQL server? Template: alternc/use_remote_mysql Type: boolean _Description: Use a remote MySQL server? - No local Mysql server was found. Please confirm you want to use a remote Mysql Server. If not, AlternC cannot be installed. -Template: alternc/remote_mysql_error +Template: alternc/retry_remote_mysql Type: boolean _Description: MySQL connection error. Try again? Remote connection to the MySQL server failed. @@ -255,3 +257,10 @@ _Description: Private IP detected, use it anyway? this is an expected situation, since the server might not be reachable from outside your network. +Template: alternc/remote_mysql_error +Type: error +_Description: Remote mysql: connection error + Connection to the remote MySQL server failed. + . + This is a fatal error and will cause the package installation + to fail.