#!/usr/bin/perl # # AlternC Main install perl script. # This script should be launched only once, when installing AlternC # on a new server. THIS SCRIPT ERASE ALL DATA ON THE AlternC SYSTEM !! # YOU HAVE BEEN WARNED ! # # ######################################################################### # 1. Confirmation ######################################################################### print " ------------------------------------------------------------------------- This is the main install perl script for AlternC This script should be launched only once, when installing AlternC on a new server. THIS SCRIPT ERASE ALL DATA ON THE AlternC SYSTEM !! (/var/alternc) YOU HAVE BEEN WARNED ! ------------------------------------------------------------------------- Are you sure that you want to install AlternC software on this computer ? (y/n) "; chop($c=); if ($c ne "y") { exit(); } ######################################################################### # 2. Check that the user changed /etc/alternc/alternc.conf ######################################################################### open C," eq "exit\n") { print " YOU DID NOT CHANGE THE MAIN CONFIGURATION FILE OF ALTERNC. PLEASE READ AND CHANGE /etc/alternc/alternc.conf AND LAUNCH THIS SCRIPT AGAIN. "; close(C); exit(); } close(C); ######################################################################### # 3. Parse the conf file ######################################################################### print "reading configuration file\n"; open C,") { chop($c); if ($c !~ /^#/) { if ($c =~ /^(.*)= *([^ ].*)$/) { # print "[$1] = $2\n"; $conf{$1}=$2; } } } close(C); ######################################################################### # 4. Read the conf variables ######################################################################### %vars = ( "hosting" => "Nom du service d'hebergement ", "mx" => "Nom du serveur de mail ", "ns1" => "Nom du serveur DNS primaire ", "ns2" => "Nom du serveur DNS secondaire ", "myip" => "Adresse ip de moi-meme ! ", "mynetwork" => "Liste des réseaux autorisés en SMTP", "fqdn" => "Nom de domaine du serveur hébergé ", "ldap_userpwd" => "Mot de passe de l'utilisateur non root du serveur ldap ", "ldap_rootpwd" => "Mot de passe de root du serveur ldap ", "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 ", "bind_slaves" => "Adresse IP ou classe d'IP des machines esclaves DNS, séparés par ';', facultatif ", "data_part" => "Nom de la partition contenant /%DATA/, pour la gestion des quotas (ex: /dev/hda3)", "dbname" => "Base de données systeme de MySQL à créer", "dbuser" => "Nom d'utilisateur mysql réservé pour le Bureau", "dbpwd" => "Mot de passe de l'utilisateur mysql du Bureau", "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.) ", "QUOTA_DOMAINS" => "Quota : Nombre de Domaines autorisés par défaut", "QUOTA_MAILS" => "Quota : Nombre de Comptes Mails autorisés par défaut", "QUOTA_FTP" => "Quota : Nombre de Comptes FTP autorisés par défaut", "QUOTA_ML" => "Quota : Nombre de Listes de Diffusion autorisées par défaut", "QUOTA_STATS" => "Quota : Nombre de jeux de statistiques autorisés par défaut", "QUOTA_WEB" => "Quota : Nombre de Kilos-Octets d'espace disque autorisés par défaut", "myrandom" => "Debian : Mot de passe de l'utilisateur 'debian-maint' de mysql.", "DATA_PART" => "General : Partition contenant /var/alternc (pour les quotas)" ); ######################################################################### # 5. Read etclist and dirlist ######################################################################### %conf_vars = ( # Sympa "etc/sympa/sympa.conf" => "[Sympa] Fichier de configuration de Sympa", "etc/sympa/wwsympa.conf" => "[Sympa] Fichier de config de wwsympa", # Squirrelmail Plugin changepass_ldap "change_ldappass/config.php" => "[Squirrelmail] Change Ldap Password file", "change_ldappass/options.php" => "[Squirrelmail] Change Ldap Password file", "change_ldappass/setup.php" => "[Squirrelmail] Change Ldap Password file", "change_ldappass/README" => "[Squirrelmail] Change Ldap Password file", "change_ldappass/install" => "[Squirrelmail] Change Ldap Password file", # PHPMYAdmin, Config file, "config.inc.php" => "[PHPMyAdmin] Config File", # Scripts-Shells generaux : "local.php" => "[General] Fichier de configuration general du Bureau virtuel", # Taches planifiees : "etc/cron.d/domaines" => "[Cron] Gestion des domaines", "etc/cron.d/webalizer" => "[Cron] Gestion des statistiques web", # Externalisation des mots de passe utilises dans les shells systeme : "etc/alternc/local.sh" => "[Pass] Mots de passe mysql utilisés par les shells systeme", # Bind9 (serveur DNS) "etc/bind/named.conf" => "[Bind9] Fichier de configuration principal", "etc/bind/automatic.conf" => "[Bind9] Fichier (vide) dynamiquement genere par PHP", "etc/bind/domaines.template" => "[Bind9] Patron pour les entrees de domaine dans named.conf", "etc/bind/master/domaines.template" => "[Bind9] Patron de zone maitre", "etc/bind/master/ip.template" => "[Bind9] Patron d'IP pour les zones maitre", "etc/bind/master/slave.template" => "[BInd9] Patron de zone pour les DNS esclaves", "domaines.template" => "[Bind9] Patron de zone esclave, à recopier dans /usr/lib/alternc/bind2/", # LdapAuth (LibNSS_Ldap LibPam_Ldap Authentification) "etc/courier/authldaprc" => "[LdapAuth] Fichier de configuration de Courier Ldap", "etc/courier/authdaemonrc" => "[LdapAuth] Fihcier de configuration de Courier", # ProFTPd (serveur FTP) "etc/proftpd.conf" => "[ProFTPd] Fichier de configuration du serveur FTP", "etc/welcome.msg" => "[ProFTPd] Message de bienvenue du serveur FTP", # MySQL (serveur de donnees) "etc/mysql/my.cnf" => "[MySQL] Fichier de configuration du serveur de donnees", "etc/mysql/debian.cnf" => "[MySQL] Fichier de configuration Debian", "etc/cron.d/bcksql" => "[MySQL] Cron de Backup quotidien / hebdomadaire", # PHP4 (Language server-side pour Apache) "etc/php4/apache/php.ini" => "[PHP4] Fichier de configuration generale", "etc/php4/cgi/php.ini" => "[PHP4] Fichier de configuratin en mode Shell-Script", "etc/alternc/sendmail" => "[PHP4] Sendmail script perl pour php", # Apache (serveur Web) "etc/apache-ssl/httpd.conf" => "[Apache-SSL] Fichier de configuration principal d'Apache", "etc/apache/httpd.conf" => "[Apache] Fichier de configuration principal d'Apache", # Ldap (Base de donnees arborescente du systeme) "etc/ldap/slapd.conf" => "[Ldap] Fichier de configuration principal de Ldap", "etc/ldap/alternc.schema" => "[Ldap] Schema specifique a AlternC", "etc/ldap/core.schema" => "[Ldap] Schema general de Ldap", "etc/ldap/conf/postfix.conf" => "[Ldap] Fichier de configuration de la base Ldap Postfix", "etc/ldap/conf/system.conf" => "[Ldap] Fichier de configuration de la base Ldap System", "ldap.ldif" => "[Ldap] Fichier LDIF contenant les entrees de base de l'arbre.", "ldap.sh" => "[Ldap] Script Shell de creation des entrees de base de l'arbre.", # [IPTables] Firewall de base... "etc/init.d/iptables" => "[IPTables] Firewall lance au demarrage. ", # Postfix (serveur SMTP) "etc/postfix/main.cf" => "[ProFTPd] Fichier de configuration principal de postfix", "etc/postfix/body_checks" => "[Postfix] Regles de filtrage des mails", "etc/postfix/header_checks" => "[Postfix] Regles de filtrage des en-tetes", "etc/postfix/master.cf" => "[Postfix] Fichier de configuration des services MTA", "redir.htaccess" => "[WebMail] Redirection url interne", "etc/logrotate.d/apache" => "[Apache] Rotation quotidienne des logs", "etc/webalizer/template.conf" => "[Webalizer] Fichier de configuration modèle", "etc/squirrelmail/apache.conf" => "[Squirrelmail] Fichier de conf apache", ); @etcdir = ( "etc/alternc", "etc/bind", "etc/bind/master", "etc/mysql", "etc/courier", "etc/php4", "etc/php4/apache", "etc/apache-ssl", "etc/apache", "etc/ldap", "etc/ldap/conf", "etc/init.d","etc/ldap/tmp","etc/postfix","etc/cron.d", "etc/logrotate.d", "etc/sympa", "etc/webalizer", "etc/squirrelmail", "etc/php4/cgi", "change_ldappass" ); ######################################################################### # 6. Compute some stuffs. ######################################################################### %varscalc = ( "ldap_tree" => "Racine de l'arbre Ldap du systeme", # dc=alternc,dc=globenet,dc=org "fqdn_lettre" => "Premiere lettre de l'avant dernier membre du fqdn" # a ); @fq=split /\./, $conf{fqdn}; $ldap_tree=""; for($i=0;$i/tmp/alternc.install.tmp/$key" || die "Erreur Ouverture W"; while ($buffer = ) { # Replace user variables : while (($kv,$vv)=each(%vars)) { $buffer=~ s/%%$kv%%/$conf{$kv}/; } # Replace computed variables : while (($kv,$vv)=each(%varscalc)) { # printf $kv." : ".$conf{$kv}."\n"; $buffer=~ s/%%$kv%%/$conf{$kv}/; } print G $buffer; } close(F); close(G); print "\n"; } # Chmod the shell scripts (a+x) system("find /tmp/alternc.install.tmp/ -name \"*.sh\" -exec chmod a+x {} \\;"); ######################################################################### # 8. Backup current conf files ######################################################################### print "backup current system files (/etc)\n"; # Creation des dossiers dans /tmp/system.DATEDUJOUR chop($TS=`date +%Y%m%d-%H%M`); $TMP="/tmp/system.$TS"; system("rm -rf $TMP >/dev/null 2>&1"); mkdir($TMP,0777); mkdir("$TMP/etc",0777); for ($i=0;$i/dev/null 2>&1"); } mkdir("/usr/lib/alternc/backups"); system("tar -czf /usr/lib/alternc/backups/system.$TS.tgz $TMP >/dev/null 2>&1"); system("rm -rf $TMP >/dev/null 2>&1"); ######################################################################### # 9. Stop services ######################################################################### print "Stopping services : \n"; print "--Apache :\n"; system("/etc/init.d/apache stop"); print "--Apache-ssl :\n"; system("/etc/init.d/apache-ssl stop"); print "--Postfix :\n"; system("/etc/init.d/postfix stop"); print "--Sympa :\n"; system("/etc/init.d/sympa stop"); print "--WWSympa :\n"; system("/etc/init.d/wwsympa stop"); print "--Bind :\n"; system("/etc/init.d/bind9 stop"); print "--Courier :\n"; system("/etc/init.d/courier-authdaemon stop"); system("/etc/init.d/courier-imap stop"); system("/etc/init.d/courier-imap-ssl stop"); system("/etc/init.d/courier-pop stop"); system("/etc/init.d/courier-pop-ssl stop"); print "--Ldap :\n"; system("/etc/init.d/slapd stop"); print "--Cron :\n"; system("/etc/init.d/cron stop"); print "--ProFTPd :\n"; system("/etc/init.d/proftpd stop"); print "--MySQL :\n"; system("/etc/init.d/mysql stop"); print "\n"; ######################################################################### # 10. Create dir structure and copy panel files ######################################################################### print "Creating directory structure in /var/alternc and copying panel files\n"; system("/usr/share/alternc/1.0/install/initrep.sh"); system("cp /usr/share/alternc/1.0/bureau /var/alternc/ -R"); ######################################################################### # 11. Send etc files to /etc :) ######################################################################### print "Copying files to /etc\n"; system("rsync /tmp/alternc.install.tmp/etc/* /etc/ -a"); system("rsync /tmp/alternc.install.tmp/change_ldappass /usr/share/squirrelmail/plugins/ -a"); system("rsync /tmp/alternc.install.tmp/config.inc.php /usr/share/phpmyadmin/ -a"); system("cp /tmp/alternc.install.tmp/redir.htaccess /var/alternc/bureau/admin/webmail/.htaccess"); system("cp /tmp/alternc.install.tmp/domaines.template /usr/lib/alternc/system/bind2/"); system("cp /tmp/alternc.install.tmp/local.php /var/alternc/bureau/class"); system("chmod a+x /etc/init.d/iptables"); system("chmod 750 /etc/alternc -R"); system("chown root.www-data /etc/alternc -R"); system("mkdir /var/run/alternc"); system("mkdir /var/log/alternc"); system("chown www-data.www-data /var/alternc/bureau/admin/webmail/.htaccess /var/alternc/bureau/class/local.php /etc/webalizer /var/alternc/bureau /var/alternc/html /var/alternc/mail /var/alternc/dns /var/run/alternc /var/log/alternc -R"); system("chown sympa.sympa /etc/sympa"); @fq=split /\./, $conf{fqdn}; $fl=substr($fq[(scalar @fq)-2],0,1); system("ln /var/alternc/bureau /var/alternc/dns/$fl/$conf{fqdn} -s"); ######################################################################### # 13. Create Ldap database, restart ldap and add default values ######################################################################### print "Creating ldap db, starting ldap, then add the default tree\n"; system("/tmp/alternc.install.tmp/ldap.sh"); ######################################################################### # 14. Create MySQL database, restart mysql and add default users ######################################################################### print "Creating MySQL db, restarting mysql.\n"; system("/usr/share/alternc/1.0/install/mysql.sh '".$conf{dbuser}."' '".$conf{dbpwd}."' '".$conf{dbname}."' '".$conf{myrandom}."'"); ######################################################################### # 15. Start services ######################################################################### print "Starting services : \n"; print "--Apache :\n"; system("/etc/init.d/apache start"); print "--Apache-ssl :\n"; system("/etc/init.d/apache-ssl start"); print "--Postfix :\n"; system("/etc/init.d/postfix start"); print "--Sympa :\n"; system("/etc/init.d/sympa start"); print "--WWSympa :\n"; system("/etc/init.d/wwsympa start"); print "--Bind :\n"; system("/etc/init.d/bind9 start"); print "--Courier :\n"; system("/etc/init.d/courier-authdaemon start"); system("/etc/init.d/courier-imap start"); system("/etc/init.d/courier-imap-ssl start"); system("/etc/init.d/courier-pop start"); system("/etc/init.d/courier-pop-ssl start"); print "--Cron :\n"; system("/etc/init.d/cron start"); print "--ProFTPd :\n"; system("/etc/init.d/proftpd start"); print "\n"; ######################################################################### # 16. Create the first user ######################################################################### print "Creating user root, with password root (change it as soon as possible)\n"; system("/usr/share/alternc/1.0/install/newone.php"); ######################################################################### # 17. Job's done ! Ready to serve... ######################################################################### print " AlternC Install complete. You may use you server now. Don't forget to change your root password as soon as possible. If you use this software, please send a mail to tech\@alternc.org so that we know who use it :) and build some kind of statistics. Thanks. ";