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

Revision 2291, 10.1 KB checked in by anarcat, 5 years ago (diff)

move /var/alternc-specific commands from alternc.install to postinst

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_USER/;s/password/MYSQL_PASS/;s/database/MYSQL_DATABASE/;p}" /etc/alternc/my.cnf`
94    chown root:www-data /etc/alternc/my.cnf
95    chmod 640 /etc/alternc/my.cnf
96fi
97
98WARNING="WARNING: Do not edit this file, edit the one in /etc/alternc/templates and launch alternc.install again."
99
100VERSION="`dpkg -s alternc | sed -n -e 's/^Version: \(.*\)/\1/p'`"
101
102# /var/alternc/dns/d/www.example.com
103FQDN_LETTER="`echo $FQDN | sed -e 's/.*\.\([^\.]\)[^\.]*\.[^\.]*$/\1/'`"
104if [ "$FQDN_LETTER" = "$FQDN" ] 
105then
106       FQDN_LETTER="_" 
107fi
108
109NS2_IP=`perl -e "\\$h = (gethostbyname(\"$NS2_HOSTNAME\"))[4];
110                 @ip = unpack('C4', \\$h);
111                 print join (\".\", @ip);"`
112
113if [ ! -z "$BIND_INTERNAL" ]; then
114    BIND_INTERNAL="$BIND_INTERNAL;"
115fi
116
117if [ -z "$MONITOR_IP" ]; then
118    MONITOR_IP="127.0.0.1"
119fi
120
121# XXX: I assume this is secure if /tmp is sticky (+t)
122# we should have a better way to deal with templating, of course.
123SED_SCRIPT=`mktemp`
124cat > $SED_SCRIPT <<EOF
125s\\%%hosting%%\\$HOSTING\\;
126s\\%%fqdn%%\\$FQDN\\;
127s\\%%public_ip%%\\$PUBLIC_IP\\;
128s\\%%internal_ip%%\\$INTERNAL_IP\\;
129s\\%%monitor_ip%%\\$MONITOR_IP\\;
130s\\%%ns1%%\\$NS1_HOSTNAME\\;
131s\\%%ns2%%\\$NS2_HOSTNAME\\;
132s\\%%bind_internal%%\\$BIND_INTERNAL\\;
133s\\%%mx%%\\$DEFAULT_MX\\;
134s\\%%dbhost%%\\$MYSQL_HOST\\;
135s\\%%dbname%%\\$MYSQL_DATABASE\\;
136s\\%%dbuser%%\\$MYSQL_USER\\;
137s\\%%dbpwd%%\\$MYSQL_PASS\\;
138s\\%%ALTERNC_LOC%%\\$ALTERNC_LOC\\;
139s\\%%mynetwork%%\\$SMTP_RELAY_NETWORKS\\;
140s\\%%warning_message%%\\$WARNING\\;
141s\\%%fqdn_lettre%%\\$FQDN_LETTER\\;
142s\\%%version%%\\$VERSION\\;
143s\\%%ns2_ip%%\\$NS2_IP\\;
144EOF
145
146#######################################################################
147# Backup configuration files
148#
149BACKUP_FILE="/var/backups/alternc/etc-original-`date +%Y%m%d-%H%M`.tar.gz"
150
151# Only backup what we are really going to replace
152BACKUPS=""
153for file in $CONFIG_FILES; do
154    TEMPLATE="$TEMPLATE_DIR/${file##etc/}"
155    if [ -f "$TEMPLATE" ]; then
156        BACKUPS="$BACKUPS $file"
157    fi
158done
159
160tar -zcf "$BACKUP_FILE" -C / $BACKUPS 2>/dev/null || true
161
162#######################################################################
163# Expand templates in the right place
164#
165echo -n "Expanding variables in configuration files:"
166for file in $CONFIG_FILES; do
167    TEMPLATE="$TEMPLATE_DIR/${file##etc/}"
168    echo -n " $file"
169    if [ -f "$TEMPLATE" ]; then
170        sed -f "$SED_SCRIPT" < $TEMPLATE > /$file
171    fi
172done
173echo "."
174rm -f $SED_SCRIPT
175
176#######################################################################
177# Save installed files to check them during next install
178#
179tar -zcf "$INSTALLED_CONFIG_TAR" -C / $CONFIG_FILES
180
181########################################################################
182# Ad-hoc fixes
183#
184
185php="`ls /usr/lib/apache*/*/*php*.so | sed -e 's/^.*libphp\(.\)\.so$/php\1/' | tail -1`"
186if [ -x /usr/sbin/apache ]
187then
188    # Enable vhost_alias apache module at the right place (ie: BEFORE mod_alias)
189    if ! grep -q "vhost_alias_module" /etc/apache/modules.conf
190    then
191        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
192    fi
193    echo "LoadModule ${php}_module /usr/lib/apache/1.3/lib${php}.so" | append_no_dupe /etc/apache/modules.conf
194    echo "LoadModule ${php}_module /usr/lib/apache/1.3/lib${php}.so" | append_no_dupe /etc/apache-ssl/modules.conf
195    SERVICES="$SERVICES apache apache-ssl"
196fi
197if [ -x /usr/sbin/apache2 ] &&  ! ( [ -L /etc/apache2/mods-enabled/vhost_alias.load ] && [ -L /etc/apache2/mods-enabled/$php.load ] )
198then
199    a2enmod vhost_alias
200    a2enmod $php
201    SERVICES="$SERVICES apache2"
202fi
203
204# Copy postfix *_checks if they do not exist
205for file in body_checks header_checks; do
206    if [ ! -e "/etc/postfix/$file" ]; then
207        cp /usr/share/alternc/install/$file /etc/postfix
208    fi
209done
210
211# Attribute the correct rights to critical postfix files
212if [ -e /etc/postfix/myalias.cf -o -e /etc/postfix/mydomain.cf -o -e /etc/postfix/mygid.cf -o -e /etc/postfix/myvirtual.cf ]; then
213    chown root:postfix /etc/postfix/my*
214    chmod 640 /etc/postfix/my*
215fi
216
217if [ -e /etc/courier/authmysqlrc ] ; then
218    chown root:root /etc/courier/authmysqlrc
219    chmod 640 /etc/courier/authmysqlrc
220fi
221
222if [ -e /etc/proftpd.conf ] ; then
223    chmod 640 /etc/proftpd/proftpd.conf
224fi
225
226if [ -x /usr/sbin/locale-gen ] ; then
227    touch /etc/locale.gen
228    LOCALECHANGED=""
229    # Add de_DE ISO-8859-1, en_US ISO-8859-1, es_ES ISO-8859-1, fr_FR ISO-8859-1 to the locales :
230    if ! grep -q "^de_DE ISO-8859-1$" /etc/locale.gen ; then
231        echo "de_DE ISO-8859-1" >>/etc/locale.gen
232        LOCALECHANGED=1
233    fi
234    if ! grep -q "^en_US ISO-8859-1$" /etc/locale.gen ; then
235        echo "en_US ISO-8859-1" >>/etc/locale.gen
236        LOCALECHANGED=1
237    fi
238    if ! grep -q "^es_ES ISO-8859-1$" /etc/locale.gen ; then
239        echo "es_ES ISO-8859-1" >>/etc/locale.gen
240        LOCALECHANGED=1
241    fi
242    if ! grep -q "^fr_FR ISO-8859-1$" /etc/locale.gen ; then
243        echo "fr_FR ISO-8859-1" >>/etc/locale.gen
244        LOCALECHANGED=1
245    fi
246    if [ "$LOCALECHANGED" ] ; then
247        locale-gen
248    fi
249fi
250
251#######################################################################
252# Reload services
253#
254for service in $SERVICES postfix bind9 courier-authdaemon \
255               courier-imap courier-imap-ssl courier-pop courier-pop-ssl \
256               cron proftpd; do
257    invoke-rc.d $service reload || true
258done
259
260#######################################################################
261# Last touches
262#
263
264# Add basedir protection
265/usr/lib/alternc/basedir_prot.sh
266
267# Creating admin user if needed
268HAS_ROOT=`mysql --defaults-file=/etc/alternc/my.cnf -e "SELECT COUNT(*) FROM membres WHERE login = 'admin' OR login = 'root' and su = 1" | tail -1`
269if [ "$HAS_ROOT" != "1" ]; then
270    echo "Creating admin user..."
271    echo ""
272
273    if su - www-data -c /usr/share/alternc/install/newone.php
274      then
275      echo "*******************************************"
276      echo "*                                         *"
277      echo "*               Admin account             *"
278      echo "*               ------------              *"
279      echo "*                                         *"
280      echo "* user: admin             password: admin *"
281      echo "*                                         *"
282      echo "* Please change this as soon as possible! *"
283      echo "*                                         *"
284      echo "*******************************************"
285    else
286      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."
287    fi
288fi
289
290# We should restart apaches after all configuration stuff ...
291for service in apache apache-ssl apache2 ; do
292    test -x /etc/init.d/$service && invoke-rc.d $service stop || true
293done
294for service in apache apache-ssl apache2 ; do
295    test -x /etc/init.d/$service && invoke-rc.d $service start || true
296done
Note: See TracBrowser for help on using the repository browser.