source: alternc/trunk/install/alternc.install @ 2128

Revision 2128, 10.5 KB checked in by anarcat, 5 years ago (diff)

last minute fix: fix template instantiation for mysql passwords

Line 
1#!/bin/sh
2#
3# AlternC Main install script.
4# This script should be launched only once, when installing AlternC
5# on a new server. THIS SCRIPT ERASE ALL DATA ON THE AlternC SYSTEM !!
6# YOU HAVE BEEN WARNED !
7
8# This script now assumes it has MySQL connectivity through
9# /etc/alternc/my.cnf
10
11set -e
12
13. /usr/lib/alternc/functions.sh
14
15#######################################################################
16# Script configuration
17#
18
19# Configuration template location
20TEMPLATE_DIR="/etc/alternc/templates"
21
22# Find needed configuration files (without the initial '/')
23# replace this one unconditionnally
24CONFIG_FILES="etc/alternc/bureau.conf"
25
26if [ -e /etc/bind/named.conf ]; then
27    CONFIG_FILES="$CONFIG_FILES etc/bind/templates/zone.template
28                  etc/bind/templates/named.template etc/bind/named.conf"
29fi
30if [ -e /etc/courier/authdaemonrc ]; then
31    CONFIG_FILES="$CONFIG_FILES etc/courier/authdaemonrc
32                  etc/courier/authmysqlrc"
33fi
34if [ -d /etc/postfix ]; then
35    CONFIG_FILES="$CONFIG_FILES etc/postfix/main.cf etc/postfix/myalias.cf
36                  etc/postfix/mydomain.cf etc/postfix/mygid.cf
37                  etc/postfix/myvirtual.cf etc/postfix/sasl/smtpd.conf"
38fi
39if [ -e /etc/proftpd/proftpd.conf ]; then
40    CONFIG_FILES="$CONFIG_FILES etc/proftpd/proftpd.conf etc/proftpd/welcome.msg etc/proftpd/modules.conf"
41fi
42if [ -e /etc/squirrelmail/apache.conf ]; then
43    CONFIG_FILES="$CONFIG_FILES etc/squirrelmail/apache.conf"
44fi
45
46if [ -e /etc/default/saslauthd ]; then
47    CONFIG_FILES="$CONFIG_FILES etc/default/saslauthd"
48fi
49
50INSTALLED_CONFIG_TAR="/var/backups/alternc/etc-installed.tar.gz"
51
52#######################################################################
53# Look for modified configuration files
54#
55if [ -f "$INSTALLED_CONFIG_TAR" ]; then
56    CHANGED="`tar -zdf "$INSTALLED_CONFIG_TAR" -C / 2> /dev/null |
57              grep -v 'Uid differs'|grep -v 'Gid differs'  |grep -v 'Mode differs' |
58              sed -e 's/^\([^:]*\).*/    \1/' | sort -u`"
59    if [ ! -z "$CHANGED" ]; then
60        echo "The following configuration files has changed since last AlternC"
61        echo "installation :"
62        echo "$CHANGED"
63        echo ""
64        if [ "$1" = "force" ]; then
65            echo "Replacing them as you requested."
66        else
67            echo "These configuration files should normally be modified by"
68            echo "changing the template in $TEMPLATE_DIR and then calling"
69            echo "$0 to perform the update."
70            echo ""
71            echo "Please examine the situation closely and call '$0 force'"
72            echo "if you still want to actually overwrite these files."
73            exit 1
74        fi
75    fi
76fi
77
78#######################################################################
79# Prepare template expansions
80#
81
82. /etc/alternc/local.sh
83
84# XXX: copy-paste from debian/config
85if [ -r /etc/alternc/my.cnf ]; then
86    # make mysql configuration available as shell variables
87    # to convert from .cnf to shell syntax, we:
88    # * match only lines with "equal" in them (/=/)
89    # * remove whitespace around the = and add a left quote operator ' (;s)
90    # * add a right quote operator at the end of line (;s)
91    # * convert mysql variables into our MYSQL_ naming convention (;s)
92    # * print the result (;p)
93    eval `sed -n -e "/=/{s/ *= *"?/='/;s/"?\$/'/;s/host/MYSQL_HOST/;s/user/MYSQL_LOGIN/;s/password/MYSQL_PASS/;s/database/MYSQL_DATABASE/;p}" /etc/alternc/my.cnf`
94fi
95
96WARNING="WARNING: Do not edit this file, edit the one in /etc/alternc/templates and launch alternc.install again."
97
98VERSION="`dpkg -s alternc | sed -n -e 's/^Version: \(.*\)/\1/p'`"
99
100# /var/alternc/dns/d/www.example.com
101FQDN_LETTER="`echo $FQDN | sed -e 's/.*\.\([^\.]\)[^\.]*\.[^\.]*$/\1/'`"
102if [ "$FQDN_LETTER" = "$FQDN" ]
103then
104       FQDN_LETTER="_"
105fi
106
107NS2_IP=`perl -e "\\$h = (gethostbyname(\"$NS2_HOSTNAME\"))[4];
108                 @ip = unpack('C4', \\$h);
109                 print join (\".\", @ip);"`
110
111if [ ! -z "$BIND_INTERNAL" ]; then
112    BIND_INTERNAL="$BIND_INTERNAL;"
113fi
114
115if [ -z "$MONITOR_IP" ]; then
116    MONITOR_IP="127.0.0.1"
117fi
118
119# XXX: I assume this is secure if /tmp is sticky (+t)
120# we should have a better way to deal with templating, of course.
121SED_SCRIPT=`mktemp`
122cat > $SED_SCRIPT <<EOF
123s\\%%hosting%%\\$HOSTING\\;
124s\\%%fqdn%%\\$FQDN\\;
125s\\%%public_ip%%\\$PUBLIC_IP\\;
126s\\%%internal_ip%%\\$INTERNAL_IP\\;
127s\\%%monitor_ip%%\\$MONITOR_IP\\;
128s\\%%ns1%%\\$NS1_HOSTNAME\\;
129s\\%%ns2%%\\$NS2_HOSTNAME\\;
130s\\%%bind_internal%%\\$BIND_INTERNAL\\;
131s\\%%mx%%\\$DEFAULT_MX\\;
132s\\%%dbhost%%\\$MYSQL_HOST\\;
133s\\%%dbname%%\\$MYSQL_DATABASE\\;
134s\\%%dbuser%%\\$MYSQL_USER\\;
135s\\%%dbpwd%%\\$MYSQL_PASS\\;
136s\\%%ALTERNC_LOC%%\\$ALTERNC_LOC\\;
137s\\%%mynetwork%%\\$SMTP_RELAY_NETWORKS\\;
138s\\%%warning_message%%\\$WARNING\\;
139s\\%%fqdn_lettre%%\\$FQDN_LETTER\\;
140s\\%%version%%\\$VERSION\\;
141s\\%%ns2_ip%%\\$NS2_IP\\;
142EOF
143
144#######################################################################
145# Backup configuration files
146#
147BACKUP_FILE="/var/backups/alternc/etc-original-`date +%Y%m%d-%H%M`.tar.gz"
148
149# Only backup what we are really going to replace
150BACKUPS=""
151for file in $CONFIG_FILES; do
152    TEMPLATE="$TEMPLATE_DIR/${file##etc/}"
153    if [ -f "$TEMPLATE" ]; then
154        BACKUPS="$BACKUPS $file"
155    fi
156done
157
158tar -zcf "$BACKUP_FILE" -C / $BACKUPS 2>/dev/null || true
159
160#######################################################################
161# Expand templates in the right place
162#
163for file in $CONFIG_FILES; do
164    TEMPLATE="$TEMPLATE_DIR/${file##etc/}"
165    if [ -f "$TEMPLATE" ]; then
166        sed -f "$SED_SCRIPT" < $TEMPLATE > /$file
167    fi
168done
169rm -f $SED_SCRIPT
170
171#######################################################################
172# Save installed files to check them during next install
173#
174tar -zcf "$INSTALLED_CONFIG_TAR" -C / $CONFIG_FILES
175
176########################################################################
177# Ad-hoc fixes
178#
179# Add access to the management panel
180ln -nsf /var/alternc/bureau /var/alternc/dns/$FQDN_LETTER/$FQDN
181
182# Update l18n files
183/usr/share/alternc/install/dopo.sh
184
185# Bind stuff
186touch /var/alternc/bind/automatic.conf /var/alternc/bind/slaveip.conf
187chown root:bind /var/alternc/bind/automatic.conf /var/alternc/bind/slaveip.conf
188chmod 640 /var/alternc/bind/automatic.conf /var/alternc/bind/slaveip.conf
189touch /var/run/alternc/refresh_slave
190/usr/lib/alternc/slave_dns
191
192# Apache will not start without this file
193touch /var/alternc/apacheconf/override_php.conf
194php="`ls /usr/lib/apache*/*/*php*.so | sed -e 's/^.*libphp\(.\)\.so$/php\1/' | tail -1`"
195if [ -x /usr/sbin/apache ]
196then
197    # Enable vhost_alias apache module at the right place (ie: BEFORE mod_alias)
198    if ! grep -q "vhost_alias_module" /etc/apache/modules.conf
199    then
200        sed -i -e 's/^\(LoadModule.*config_log.*\)$/LoadModule vhost_alias_module \/usr\/lib\/apache\/1.3\/mod_vhost_alias.so\n\1/' /etc/apache/modules.conf
201    fi
202    echo "LoadModule ${php}_module /usr/lib/apache/1.3/lib${php}.so" | append_no_dupe /etc/apache/modules.conf
203    echo "LoadModule ${php}_module /usr/lib/apache/1.3/lib${php}.so" | append_no_dupe /etc/apache-ssl/modules.conf
204    SERVICES="$SERVICES apache apache-ssl"
205fi
206if [ -x /usr/sbin/apache2 ] &&  ! ( [ -L /etc/apache2/mods-enabled/vhost_alias.load ] && [ -L /etc/apache2/mods-enabled/$php.load ] )
207then
208    a2enmod vhost_alias
209    a2enmod $php
210    SERVICES="$SERVICES apache2"
211fi
212
213# Copy postfix *_checks if they do not exist
214for file in body_checks header_checks; do
215    if [ ! -e "/etc/postfix/$file" ]; then
216        cp /usr/share/alternc/install/$file /etc/postfix
217    fi
218done
219
220# Attribute the correct rights to critical postfix files
221if [ -e /etc/postfix/myalias.cf -o -e /etc/postfix/mydomain.cf -o -e /etc/postfix/mygid.cf -o -e /etc/postfix/myvirtual.cf ]; then
222    chown root:postfix /etc/postfix/my*
223    chmod 640 /etc/postfix/my*
224fi
225
226if [ -e /etc/courier/authmysqlrc ] ; then
227    chown root:root /etc/courier/authmysqlrc
228    chmod 640 /etc/courier/authmysqlrc
229fi
230
231if [ -e /etc/proftpd.conf ] ; then
232    chmod 640 /etc/proftpd/proftpd.conf
233fi
234
235if [ -x /usr/sbin/locale-gen ] ; then
236    touch /etc/locale.gen
237    LOCALECHANGED=""
238    # Add de_DE ISO-8859-1, en_US ISO-8859-1, es_ES ISO-8859-1, fr_FR ISO-8859-1 to the locales :
239    if ! grep -q "^de_DE ISO-8859-1$" /etc/locale.gen ; then
240        echo "de_DE ISO-8859-1" >>/etc/locale.gen
241        LOCALECHANGED=1
242    fi
243    if ! grep -q "^en_US ISO-8859-1$" /etc/locale.gen ; then
244        echo "en_US ISO-8859-1" >>/etc/locale.gen
245        LOCALECHANGED=1
246    fi
247    if ! grep -q "^es_ES ISO-8859-1$" /etc/locale.gen ; then
248        echo "es_ES ISO-8859-1" >>/etc/locale.gen
249        LOCALECHANGED=1
250    fi
251    if ! grep -q "^fr_FR ISO-8859-1$" /etc/locale.gen ; then
252        echo "fr_FR ISO-8859-1" >>/etc/locale.gen
253        LOCALECHANGED=1
254    fi
255    if [ "$LOCALECHANGED" ] ; then
256        locale-gen
257    fi
258fi
259
260#######################################################################
261# Reload services
262#
263for service in $SERVICES postfix bind9 courier-authdaemon \
264               courier-imap courier-imap-ssl courier-pop courier-pop-ssl \
265               cron proftpd; do
266    invoke-rc.d $service reload || true
267done
268
269#######################################################################
270# Last touches
271#
272
273# Add basedir protection
274/usr/lib/alternc/basedir_prot.sh
275
276# Creating admin user if needed
277HAS_ROOT=`mysql --defaults-file=/etc/alternc/my.cnf -e "SELECT COUNT(*) FROM membres WHERE login = 'admin' OR login = 'root' and su = 1" | tail -1`
278if [ "$HAS_ROOT" != "1" ]; then
279    echo "Creating admin user..."
280    echo ""
281
282    if su - www-data -c /usr/share/alternc/install/newone.php
283      then
284      echo "*******************************************"
285      echo "*                                         *"
286      echo "*               Admin account             *"
287      echo "*               ------------              *"
288      echo "*                                         *"
289      echo "* user: admin             password: admin *"
290      echo "*                                         *"
291      echo "* Please change this as soon as possible! *"
292      echo "*                                         *"
293      echo "*******************************************"
294    else
295      echo "Il a été impossible de créer un nouveau membre alternc. newone.php a retourné un code d'erreur $?. Vérifiez si la base MySQL, PHP, ainsi que le fichier local.sh sont bien configurés. Vérifiez aussi si des erreurs ne sont pas apparues plus haut dans l'installation."
296    fi
297fi
298
299# We should restart apaches after all configuration stuff ...
300for service in apache apache-ssl apache2 ; do
301    test -x /etc/init.d/$service && invoke-rc.d $service stop || true
302done
303for service in apache apache-ssl apache2 ; do
304    test -x /etc/init.d/$service && invoke-rc.d $service start || true
305done
Note: See TracBrowser for help on using the repository browser.