source: install/scripts/alternc.install @ 190

Revision 190, 18.7 KB checked in by anarcat, 8 years ago (diff)

[project @ alternc: changeset 2004-05-08 21:59:32 by anonymous]
changements de commentaires seulement: documenter toutes les étapes et
dépendances au début du fichier ré-écrit quelques commentaires,
correction de fautes, etc.

Original author: anonymous
Date: 2004-05-08 21:59:32

Line 
1#!/usr/bin/perl
2#
3# AlternC Main install perl 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#
9
10# this script needs and calls:
11# /usr/share/alternc/1.0/install/initrep.sh
12# /usr/share/alternc/1.0/install/mysql.sh
13# /tmp/alternc.install.tmp/ldap.sh
14# su www-data -c /usr/share/alternc/1.0/install/newone.php
15
16# These are the steps followed by alternc.install
17#
18# 1. Confirmation
19# 2. Check that the user changed /etc/alternc/alternc.conf
20# 3. Parse the conf file
21# 4. Setup the 18 conf variables
22# 5. Setup etclist and dirlist, the list of configuration files
23#    overriden by alternc and their directories
24# 6. Compute the ldap root DC and the first letter of the second
25#    domain name chunk
26# 7. Create the temporary etc files, and parse them, replacing the
27#    variables set in 4 and 6
28# Chmod the shell scripts (a+x)
29# 8. Backup current conf files in
30#    /usr/lib/alternc/backups/system.`date +%Y%m%d-%H%M`
31# 9. Stop services
32# 10. Create dir structure and copy panel files
33# see /usr/share/alternc/1.0/install/initrep.sh
34# 11. Send etc files to /etc :)
35# 11.1 copy all the files setup in 7 in /etc, plus other places
36# 11.2 setup part of the webmail
37# 11.3 setup part of bind
38# 11.4 setup part of the panel
39# 11.5 setup permissions for scripts and configs
40# 11.6 symlink the bureau in dns/
41# 13. Create Ldap database, restart ldap and add default values
42# see /tmp/alternc.install.tmp/ldap.sh
43# 14. Create MySQL database, restart mysql and add default users
44# see /usr/share/alternc/1.0/install/mysql.sh
45# 15. Start services
46# 16. Create the first user
47# see su www-data -c /usr/share/alternc/1.0/install/newone.php
48# 17. Job's done ! Ready to serve...
49
50
51#########################################################################
52# 1. Confirmation
53#########################################################################
54
55print "
56-------------------------------------------------------------------------
57This is the main install perl script for AlternC
58This script should be launched only once, when installing AlternC
59on a new server. THIS SCRIPT ERASE ALL DATA ON THE AlternC SYSTEM !!
60(/var/alternc) YOU HAVE BEEN WARNED !
61-------------------------------------------------------------------------
62
63Are you sure that you want to install AlternC software on this computer ?
64(y/n) ";
65
66chop($c=<STDIN>);
67if ($c ne "y") {
68    exit();
69} 
70
71
72#########################################################################
73# 2. Check that the user changed /etc/alternc/alternc.conf
74#########################################################################
75
76open C,"</etc/alternc/alternc.conf";
77if (<C> eq "exit\n") {
78    print "
79    YOU DID NOT CHANGE THE MAIN CONFIGURATION FILE OF ALTERNC.
80    PLEASE READ AND CHANGE /etc/alternc/alternc.conf
81    AND LAUNCH THIS SCRIPT AGAIN.
82
83";
84    close(C);
85    exit();
86}
87close(C);
88
89
90#########################################################################
91# 3. Parse the conf file
92#########################################################################
93
94print "reading configuration file\n";
95
96open C,"</etc/alternc/alternc.conf";
97while ($c=<C>) {
98    chop($c);
99    if ($c !~ /^#/) {
100        if ($c =~ /^(.*)= *([^ ].*)$/) {
101            # print "[$1] = $2\n";
102            $conf{$1}=$2;
103        }
104    }
105}
106close(C);
107
108
109#########################################################################
110# 4. Setup the 18 conf variables
111#########################################################################
112
113%vars = (
114         "hosting" => "Nom du service d'hebergement ",
115         "mx" => "Nom du serveur de mail ",
116         "ns1" => "Nom du serveur DNS primaire ",
117         "ns2" => "Nom du serveur DNS secondaire ",
118         "myip" => "Adresse ip de moi-meme !  ",
119         "mynetwork" => "Liste des réseaux autorisés en SMTP",
120         "fqdn" => "Nom de domaine du serveur hébergé ",
121         "ldap_userpwd" => "Mot de passe de l'utilisateur non root du serveur ldap ",
122         "ldap_rootpwd" => "Mot de passe de root du serveur ldap ",
123         "bind_internal" => "Adresse IP ou classe d'IP des machines à l'intérieur de notre réseau de confiance DNS, séparés par ';', facultatif ",
124         "bind_slaves" => "Adresse IP ou classe d'IP des machines esclaves DNS, séparés par ';', facultatif ",
125         "data_part" => "Nom de la partition contenant /%DATA/, pour la gestion des quotas (ex: /dev/hda3)",
126         "dbname" => "Base de données systeme de MySQL à créer",
127         "dbuser" => "Nom d'utilisateur mysql réservé pour le Bureau",
128         "dbpwd" => "Mot de passe de l'utilisateur mysql du Bureau",
129         "monitor_ip" => "Adresse IP (ou ip/prefixe) du(des) serveur(s) dont on veut autoriser le ping vers nous et le status apache (pour le monitoring de serveur.) 127.0.0.1 par défaut",
130         "myrandom" => "Debian : Mot de passe de l'utilisateur 'debian-maint' de mysql.",
131         "DATA_PART" => "General : Partition contenant /var/alternc (pour les quotas)"
132         );
133
134#########################################################################
135# 5. Setup etclist and dirlist, the list of configuration files
136# overriden by alternc and their directories
137#########################################################################
138
139%conf_vars = (
140
141         # Squirrelmail Plugin changepass_ldap
142         "change_ldappass/config.php" => "[Squirrelmail] Change Ldap Password file",
143         "change_ldappass/options.php" => "[Squirrelmail] Change Ldap Password file",
144         "change_ldappass/setup.php" => "[Squirrelmail] Change Ldap Password file",
145         "change_ldappass/README" => "[Squirrelmail] Change Ldap Password file",
146         "change_ldappass/install" => "[Squirrelmail] Change Ldap Password file",
147
148         # PHPMYAdmin, Config file,
149         "config.inc.php" => "[PHPMyAdmin] Config File",
150
151         # Scripts-Shells generaux :
152         "local.php" => "[General] Fichier de configuration general du Bureau virtuel",
153
154         # Taches planifiees :
155         "etc/cron.d/domaines" => "[Cron] Gestion des domaines",
156         "etc/cron.d/webalizer" => "[Cron] Gestion des statistiques web",
157
158         # Externalisation des mots de passe utilises dans les shells systeme :
159         "etc/alternc/local.sh" => "[Pass] Mots de passe mysql utilisés par les shells systeme",
160
161         # Bind9 (serveur DNS)
162         "etc/bind/named.conf" => "[Bind9] Fichier de configuration principal",
163         "etc/bind/automatic.conf" => "[Bind9] Fichier (vide) dynamiquement genere par PHP",
164         "etc/bind/domaines.template" => "[Bind9] Patron pour les entrees de domaine dans named.conf",
165         "etc/bind/master/domaines.template" => "[Bind9] Patron de zone maitre",
166         "etc/bind/master/ip.template" => "[Bind9] Patron d'IP pour les zones maitre",
167         "etc/bind/master/mx.template" => "[Bind9] Patron d'IP pour les zones maitre",
168         "etc/bind/master/slave.template" => "[BInd9] Patron de zone pour les DNS esclaves",
169         "domaines.template" => "[Bind9] Patron de zone esclave, à recopier dans /usr/lib/alternc/bind2/",
170
171         # LdapAuth (LibNSS_Ldap LibPam_Ldap Authentification)
172
173         "etc/courier/authldaprc" => "[LdapAuth] Fichier de configuration de Courier Ldap",
174         "etc/courier/authdaemonrc" => "[LdapAuth] Fihcier de configuration de Courier",
175
176         # ProFTPd (serveur FTP)
177         "etc/proftpd.conf" => "[ProFTPd] Fichier de configuration du serveur FTP",
178         "etc/welcome.msg" => "[ProFTPd] Message de bienvenue du serveur FTP",
179
180         # MySQL (serveur de donnees)
181         "etc/mysql/my.cnf" => "[MySQL] Fichier de configuration du serveur de donnees",
182         "etc/mysql/debian.cnf" => "[MySQL] Fichier de configuration Debian",
183         "etc/cron.d/bcksql" => "[MySQL] Cron de Backup quotidien / hebdomadaire",
184
185         # PHP4 (Language server-side pour Apache)
186         "etc/php4/apache/php.ini" => "[PHP4] Fichier de configuration generale",
187         "etc/php4/cgi/php.ini" => "[PHP4] Fichier de configuratin en mode Shell-Script",
188         "etc/alternc/sendmail" => "[PHP4] Sendmail script perl pour php",
189
190         # Apache (serveur Web)
191         "etc/apache-ssl/httpd.conf" => "[Apache-SSL] Fichier de configuration principal d'Apache",
192         "etc/apache/httpd.conf" => "[Apache] Fichier de configuration principal d'Apache",
193
194         # Ldap (Base de donnees arborescente du systeme)
195         "etc/ldap/slapd.conf" => "[Ldap] Fichier de configuration principal de Ldap",
196         "etc/ldap/alternc.schema" => "[Ldap] Schema specifique a AlternC",
197         "etc/ldap/core.schema" => "[Ldap] Schema general de Ldap",
198         "etc/ldap/conf/postfix.conf" => "[Ldap] Fichier de configuration de la base Ldap Postfix",
199         "etc/ldap/conf/system.conf" => "[Ldap] Fichier de configuration de la base Ldap System",
200         "ldap.ldif" => "[Ldap] Fichier LDIF contenant les entrees de base de l'arbre.",
201         "ldap.sh" => "[Ldap] Script Shell de creation des entrees de base de l'arbre.",
202
203         # [IPTables] Firewall de base...
204         "etc/init.d/iptables" => "[IPTables] Firewall lance au demarrage. ",
205
206         # Postfix (serveur SMTP)
207         "etc/postfix/main.cf" => "[ProFTPd] Fichier de configuration principal de postfix",
208         "etc/postfix/body_checks" => "[Postfix] Regles de filtrage des mails",
209         "etc/postfix/header_checks" => "[Postfix] Regles de filtrage des en-tetes",
210         "etc/postfix/master.cf" => "[Postfix] Fichier de configuration des services MTA",
211
212         "redir.htaccess" => "[WebMail] Redirection url interne",
213         "etc/logrotate.d/apache" => "[Apache] Rotation quotidienne des logs",
214
215         "etc/webalizer/template.conf" => "[Webalizer] Fichier de configuration modèle",
216         "etc/squirrelmail/apache.conf" => "[Squirrelmail] Fichier de conf apache",
217
218         );
219
220@etcdir = (
221        "etc/alternc", "etc/bind", "etc/bind/master", "etc/mysql", "etc/courier",
222        "etc/php4",     "etc/php4/apache", "etc/apache-ssl", "etc/apache", "etc/ldap",
223        "etc/ldap/conf", "etc/init.d","etc/ldap/tmp","etc/postfix","etc/cron.d",
224        "etc/logrotate.d", "etc/webalizer", "etc/squirrelmail", "etc/php4/cgi",
225        "change_ldappass", "etc/pop-before-smtp"
226        );
227
228
229#########################################################################
230# 6. Compute other variables depending on the variables setup in 4. and
231# setup some defaults
232#########################################################################
233
234%varscalc = (
235             "ldap_tree" => "Racine de l'arbre Ldap du systeme",  # dc=alternc,dc=globenet,dc=org
236             "fqdn_lettre" => "Premiere lettre de l'avant dernier membre du fqdn" # a
237             );
238
239@fq=split /\./, $conf{fqdn};
240
241$ldap_tree="";
242for($i=0;$i<scalar @fq;$i++) {
243    if ($i) {
244        $ldap_tree.=",";
245    }
246    $ldap_tree .= "dc=".$fq[$i];
247}
248
249$conf{ldap_tree}   = $ldap_tree;
250$conf{fqdn_lettre} = substr($fq[(scalar @fq)-2],0,1);
251
252if ($conf{bind_internal}) {
253    $conf{bind_internal} .= ";";
254}
255if ($conf{bind_slaves}) { 
256    $conf{bind_slaves} .= ";";
257}
258if (!$conf{monitor_ip}) {
259    $conf{monitor_ip} = "127.0.0.1";
260}
261
262#########################################################################
263# 7. Create the temporary etc files, and parse them, replacing the
264# variables set in 4 and 6
265#########################################################################
266
267system("rm -rf /tmp/alternc.install.tmp");
268mkdir("/tmp/alternc.install.tmp",0777);
269mkdir("/tmp/alternc.install.tmp/etc",0777);
270
271for ($i=0;$i<scalar @etcdir;$i++) {
272    print "creating directory /".$etcdir[$i]."\n";
273    mkdir("/tmp/alternc.install.tmp/".$etcdir[$i]."",0777);
274}
275
276while (($key,$val) = each(%conf_vars)) {
277    print "parsing configuration file /$key    $val  ";
278    open F,"</usr/share/alternc/1.0/install/$key" || die "Erreur Ouverture R";
279    open G,">/tmp/alternc.install.tmp/$key" || die "Erreur Ouverture W";
280    while ($buffer = <F>) {
281        # Replace user variables :
282        while (($kv,$vv)=each(%vars)) {
283            $buffer=~ s/%%$kv%%/$conf{$kv}/;
284        }
285        # Replace computed variables :
286        while (($kv,$vv)=each(%varscalc)) {
287        # printf $kv." : ".$conf{$kv}."\n";
288            $buffer=~ s/%%$kv%%/$conf{$kv}/;
289        }
290        print G $buffer;
291    }
292    close(F);
293    close(G);
294    print "\n";
295}
296# Chmod the shell scripts (a+x)
297system("find /tmp/alternc.install.tmp/ -name \"*.sh\" -exec chmod a+x {} \\;");
298
299
300#########################################################################
301# 8. Backup current conf files
302#########################################################################
303
304print "backup current system files (/etc)\n";
305
306# Creation des dossiers dans /tmp/system.DATEDUJOUR
307chop($TS=`date +%Y%m%d-%H%M`);
308$TMP="/tmp/system.$TS";
309system("rm -rf $TMP >/dev/null 2>&1");
310mkdir($TMP,0777);
311mkdir("$TMP/etc",0777);
312for ($i=0;$i<scalar @etcdir;$i++) {
313    mkdir("$TMP/etc/".$etcdir[$i]."",0777);
314}
315# Copie des fichiers de /etc/... vers /tmp/system.DATE
316while (($key,$val) = each(%conf_vars)) {
317    system("cp /$key /$TMP/$key >/dev/null 2>&1");
318}
319mkdir("/usr/lib/alternc/backups");
320system("tar -czf /usr/lib/alternc/backups/system.$TS.tgz $TMP >/dev/null 2>&1");
321system("rm -rf $TMP >/dev/null 2>&1");
322system("/usr/share/alternc/1.0/install/dopo.sh");
323
324#########################################################################
325# 9. Stop services
326#########################################################################
327
328print "Stopping services : \n";
329
330print "--Apache :\n";
331system("/etc/init.d/apache stop");
332print "--Apache-ssl :\n";
333system("/etc/init.d/apache-ssl stop");
334print "--Postfix :\n";
335system("/etc/init.d/postfix stop");
336print "--Bind :\n";
337system("/etc/init.d/bind9 stop");
338print "--Courier :\n";
339system("/etc/init.d/courier-authdaemon stop");
340system("/etc/init.d/courier-imap stop");
341system("/etc/init.d/courier-imap-ssl stop");
342system("/etc/init.d/courier-pop stop");
343system("/etc/init.d/courier-pop-ssl stop");
344print "--Ldap :\n";
345system("/etc/init.d/slapd stop");
346print "--Cron :\n";
347system("/etc/init.d/cron stop");
348print "--ProFTPd :\n";
349system("/etc/init.d/proftpd stop");
350print "--MySQL :\n";
351system("/etc/init.d/mysql stop");
352print "\n";
353
354
355#########################################################################
356# 10. Create dir structure and copy panel files
357#########################################################################
358
359print "Creating directory structure in /var/alternc\n";
360system("/usr/share/alternc/1.0/install/initrep.sh");
361
362
363#########################################################################
364# 11. Send etc files to /etc :)
365#########################################################################
366
367print "Copying files to /etc\n";
368# 11.1 copy all the files setup in 7 in /etc, plus other places
369system("rsync /tmp/alternc.install.tmp/etc/* /etc/ -a");
370system("rsync /tmp/alternc.install.tmp/change_ldappass /usr/share/squirrelmail/plugins/ -a");
371system("rsync /tmp/alternc.install.tmp/config.inc.php /usr/share/phpmyadmin/ -a");
372# 11.2 setup part of the webmail
373system("cp /tmp/alternc.install.tmp/redir.htaccess /var/alternc/bureau/admin/webmail/.htaccess");
374# 11.3 setup part of bind
375system("cp /tmp/alternc.install.tmp/domaines.template /usr/lib/alternc/system/bind2/");
376# 11.4 setup part of the panel
377system("cp /tmp/alternc.install.tmp/local.php /var/alternc/bureau/class");
378# 11.5 setup permissions for scripts and configs
379system("chmod a+x /etc/init.d/iptables");
380system("chmod 750 /etc/alternc -R");
381system("chown root.root /etc/alternc -R");
382system("mkdir /var/run/alternc");
383system("mkdir /var/log/alternc");
384system("chown www-data.www-data /var/alternc/bureau/admin/webmail/.htaccess /etc/webalizer /var/alternc/bureau /var/alternc/html /var/alternc/mail /var/alternc/dns /var/run/alternc /var/log/alternc -R");
385system("chown root.www-data /usr/lib/alternc/ -R");
386system("chmod 0750 /usr/lib/alternc");
387system("chmod 0750 /usr/lib/alternc/*");
388system("chmod 4750 /usr/lib/alternc/mem_add");
389system("chmod 4750 /usr/lib/alternc/quota_edit");
390system("chmod 4750 /usr/lib/alternc/quota_get");
391system("chmod 4750 /usr/lib/alternc/mail_add");
392system("chmod 4750 /usr/lib/alternc/mail_del");
393system("chmod 4750 /usr/lib/alternc/mem_del");
394system("chmod 4750 /usr/lib/alternc/db_create");
395system("chmod 0640 /var/alternc/bureau/class/*.php");
396system("chown root.www-data /var/alternc/bureau/class/*.php");
397system("chown root.www-data /var/alternc/bureau/class");
398system("chgrp www-data /etc/alternc");
399system("chgrp www-data /etc/alternc/local.sh");
400system("chgrp www-data /etc/alternc/sendmail");
401
402# 11.6 symlink the bureau in dns/
403@fq=split /\./, $conf{fqdn};
404$fl=substr($fq[(scalar @fq)-2],0,1);
405system("ln /var/alternc/bureau /var/alternc/dns/$fl/$conf{fqdn} -s");
406
407#########################################################################
408# 13. Create Ldap database, restart ldap and add default values
409#########################################################################
410
411print "Creating ldap db, starting ldap, then add the default tree\n";
412system("/tmp/alternc.install.tmp/ldap.sh");
413
414#########################################################################
415# 14. Create MySQL database, restart mysql and add default users
416#########################################################################
417
418print "Creating MySQL db, restarting mysql.\n";
419system("/usr/share/alternc/1.0/install/mysql.sh '".$conf{dbuser}."' '".$conf{dbpwd}."' '".$conf{dbname}."' '".$conf{myrandom}."'");
420
421
422#########################################################################
423# 15. Start services
424#########################################################################
425
426print "Starting services : \n";
427
428print "--Apache :\n";
429system("/etc/init.d/apache start");
430print "--Apache-ssl :\n";
431system("/etc/init.d/apache-ssl start");
432print "--Postfix :\n";
433system("/etc/init.d/postfix start");
434print "--Bind :\n";
435system("/etc/init.d/bind9 start");
436print "--Courier :\n";
437system("/etc/init.d/courier-authdaemon start");
438system("/etc/init.d/courier-imap start");
439system("/etc/init.d/courier-imap-ssl start");
440system("/etc/init.d/courier-pop start");
441system("/etc/init.d/courier-pop-ssl start");
442print "--Cron :\n";
443system("/etc/init.d/cron start");
444print "--ProFTPd :\n";
445system("/etc/init.d/proftpd start");
446print "\n";
447
448#########################################################################
449# 16. Create the first user
450#########################################################################
451
452print "Creating user root, with password root (change it as soon as possible)\n";
453
454system("su www-data -c /usr/share/alternc/1.0/install/newone.php");
455
456#########################################################################
457# 17. Job's done ! Ready to serve...
458#########################################################################
459
460print "
461  AlternC Install complete.
462  You may use you server now. Don't forget to change your root password
463  as soon as possible.
464  If you use this software, please send a mail to tech\@alternc.org
465  so that we know who use it :) and build some kind of statistics. Thanks.
466
467";
468
Note: See TracBrowser for help on using the repository browser.