AlternC/debian/alternc.config

402 lines
11 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /bin/bash
set -e
set -x
# 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
}
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
# seul /var/www/alternc existe, ca répond /var/www/alternc
dir="$1"
if [ -z "$dir" ] ; then
return 0
fi
if ! test -d "$dir" ; then
get_first_existing_dir "$(dirname "$dir")"
else
echo "$dir"
fi
}
# 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_HTML="/var/www/alternc/"
ALTERNC_MAIL="/var/mail/alternc"
ALTERNC_LOGS="/var/log/alternc/sites/"
NS1_HOSTNAME="$FQDN"
NS2_HOSTNAME="$FQDN"
HOSTING="AlternC"
SQLBACKUP_TYPE="rotate"
SQLBACKUP_OVERWRITE="no"
QUEST_STATE=1
while [ "$QUEST_STATE" != 0 -a "$QUEST_STATE" != 13 ]; do
case "$QUEST_STATE" in
1)
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
;;
2)
# 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
;;
3)
#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
;;
4)
#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
;;
5)
#We ask for the DNS server for the ip
#
db_set alternc/ns1 "$NS1_HOSTNAME"
db_input high alternc/ns1 || true
;;
6)
db_set alternc/ns1 "$NS2_HOSTNAME"
db_input high alternc/ns2 || true
;;
7)
db_set alternc/default_mx "$DEFAULT_MX"
db_input high alternc/default_mx || true
;;
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
fi
;;
10)
# 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
db_set alternc/alternc_html $ALTERNC_HTML
db_input high alternc/alternc_html
fi
db_get alternc/alternc_html
ALTERNC_HTML="$RET"
#checking acl and quota activation.
basedir=`get_first_existing_dir "$ALTERNC_HTML"`;
MOUNT_POINT=$(df -P ${basedir} | tail -n 1 | awk '{print $6}')
#we get the first existing dir
aclcheckfile="$basedir/test-acl"
touch "$aclcheckfile"
setfacl -m u:root:rwx "$aclcheckfile" 2>/dev/null
if [ $? -ne 0 ]; then
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
fi
test -e "$aclcheckfile" && rm -f "$aclcheckfile" || true
quota -gA -f $MOUNT_POINT 2>/dev/null
if [ $? -ne 0 ]; then
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
fi
;;
11)
db_get alternc/alternc_mail
if [ -z "$RET" ];then
db_set alternc/alternc_mail $ALTERNC_MAIL
db_input high alternc/alternc_mail
fi
;;
12)
db_get alternc/alternc_logs
if [ -z "$RET" ];then
db_set alternc/alternc_logs $ALTERNC_LOGS
db_input high alternc/alternc_logs
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
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_get alternc/mysql/remote_user
if [ -z "$RET" ]
then
db_set alternc/mysql/user "$MYSQL_USER"
else
db_set alternc/mysql/user "$RET"
fi
fi
db_get alternc/mysql/password
if [ -z "$RET" ]
then
db_get alternc/mysql/remote_password
if [ -z "$RET" ]
then
db_set alternc/mysql/password "$MYSQL_PASS"
else
db_set alternc/mysql/password "$RET"
fi
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