Installation d'une distribution Linux dans un répertoire avec schroot
By thierry on Thursday 22 September 2011, 20:54 - Configuration serveur - Permalink
La commande chroot permet de confiner l'exécution de programmes à l'intérieur d'un système Linux. Les utilitaires schroot et debootstrap permettent d'aller plus loin en installant une distribution complète à l'intérieur d'un répertoire.
Ainsi il est possible d'installer un programme récent dans une distribution ancienne sans créer de conflit avec des librairies obsolètes. Bien entendu cela ne fonctionne que si le programme et les librairies n'ont pas de dépendance avec le noyau qui reste celui de la distribution principale.
Par exemple je souhaite installer Imp Horde 5 sous Ubuntu, mon serveur dispose d'un disque de bonne capacité mais d'une distribution trop ancienne. La solution que j'ai mise en œuvre est d'installer une distribution stable mais plus récente dans un environnement confiné chroot dans un sous-répertoire qui va contenir une distribution minimale.
Installation de schroot
Exécuter la commande :
sudo apt-get install schroot debootstrap
Installation d'Ubuntu schrooté
Créer un répertoire :sudo mkdir /home/schroot-horde
Comme la nouvelle distribution n'est pas déclarée il faut ajouter un lien symbolique :sudo ln -s gutsy /usr/share/debootstrap/scripts/lucid
Téléchargement et installation :sudo debootstrap --arch i386 lucid /home/schroot-horde http://fr.archive.ubuntu.com/ubuntu/
(...)
Recopie des utilisateurs et nom de machine :sudo cp /etc/passwd /etc/group /etc/sudoers /etc/hosts /etc/hostname /home/schroot-horde/etc
Ajout à la fin du fichier /etc/schroot/schroot.conf
des lignes suivantes :[horde]
description=Serveur Webmail Horde 4
location=/home/schroot-horde
users=thierry
root-groups=root
root-users=root
type=directory
aliases=default
run-setup-scripts=true
run-exec-scripts=true
Il faut se connecter à l'environnement schroot :schroot -c horde
Contourne le problème de fonctionnement d'initctl en schroot :sudo dpkg-divert --local --rename --add /sbin/initctl
sudo ln -s /bin/true /sbin/initctl
sudo apt-get install vim
Mise à jour des repository exécuter la commande suivante :sudo vim /etc/apt/sources.list
Remplacer par les lignes suivantes :deb http://fr.archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu lucid-security main restricted universe multiverse
Mise à jour de la liste des paquets et mise à jour des paquets :sudo apt-get update
sudo apt-get dist-upgrade
(voir si nécessaire sudo apt-key update
)
Définition des langues et paramètres de localisation
Créer un fichier /var/lib/locales/supported.d/fr
avec les langues et jeux de caractères (en UTF8 et ISO8859-1 pour Horde) :fr_FR.UTF-8 UTF-8
en_US.UTF-8 UTF-8
fr_FR.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1
Générer les paramètres correspondants avec la commande : sudo locale-gen
.
Installation de Horde Groupware Webmail Edition
Il faut se connecter à l'environnement schroot :schroot -c horde
Puis installer Apache, PHP et Pear :sudo apt-get install apache2 php5 php-pear php5-dev
Puis installer les modules complémentaires de PHP :sudo apt-get install php5-gd php5-geoip php5-imagick php5-mysql
Ajouter à la fin du fichier .profile une ligne :export PHP_PEAR_SYSCONF_DIR=/etc/pear
Se déconnecter puis relancer schroot.
Enregistrer le canal Pear de Horde :sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf channel-discover pear.horde.org
Préparation de l'installation de Horde :sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf install horde/horde_role
sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf run-scripts horde/horde_role
Saisir l'emplacement où installer horde (par exemple /var/www/horde).
Installation des modules complémentaires :sudo apt-get install php5-xmlrpc php5-tidy php5-curl libidn11-dev libssh2-1-dev libimage-exiftool-perl
Installation de Horde avec toutes les dépendances y compris les dépendances binaires :sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf install -a horde/webmail
Installation des dépendances non stables :sudo pear install -a SOAP-0.12.0 Date_Holidays-0.21.5 Text_CAPTCHA-0.4.3 XML_Serializer-0.20.2 Numbers_Words-0.16.2
sudo pecl install idn-0.2.0 ssh2-0.11.3
Ajouter dans php.ini (/etc/php5/apache2/php.ini) les lignes suivantes :extension=lzf.so
extension=memcache.soextension=idn.so
extension=ssh2.so
Configuration d'Apache schroot
Modifier le fichier ports.conf (sudo vim /etc/apache2/ports.conf
) :NameVirtualHost *:8080
Listen localhost:8080
Modifier le fichier sites-available/default (sudo vim /etc/apache2/sites-available/default
) :<VirtualHost *:8080>
ServerAdmin webmaster@monsite.com
DocumentRoot /var/www/horde
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Démarrer le service manuellement avec la commande sudo /etc/init.d/apache2 start
.
Configuration d'Apache sur l'installation principale
Depuis Webmin créer un nouveau serveur virtuel :
Pour ce serveur virtuel modifier le fichier de directives en ajoutant :ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Proxy *>
allow from all
</Proxy>
Configuration de Horde
Sur l'installation principale créer une base de données Mysql avec son utilisateur et les droits Select
, Insert
, Update
, Delete
, Create
, Drop
, Index
et Alter
.
Exécuter la commande sudo webmail-install
puis répondre aux questions suivantes :
- What database backend should we use?
mysqli
(le nom du pilote Mysql) - Username to connect to the database as* []
horde
(le nom de l'utilisateur créé dans Mysql pour accéder à la nouvelle base de données) - Password to connect with
horde
(le mot de passe de l'utilisateur Mysql) - How should we connect to the database?
(unix) UNIX Sockets
(tcp) TCP/IP
Type your choice [unix]:tcp
(la base de données est sur l'installation principale de Linux donc il faut utiliser tcp) - Database server/host* []
localhost
(Mysql est installé sur le serveur local) - Port the DB is running on, if non-standard [3306] (pour le port Mysql on laisse la valeur par défaut)
- Database name to use* []
horde
(le nom de la base de données créée dans Mysql) - Internally used charset* [utf-8] (lors de la création de la base de données Mysql j'ai mis cet encodage par défaut)
- Use SSL to connect to the server?
(1) Yes
(0) No
Type your choice [0]: (comme il s'agit d'une configuration locale la connexion n'est pas sécurisée) - Certification Authority to use for SSL connections [] (il n'y a pas de certificat)
- Split reads to a different server?
(false) Disabled
(true) Enabled
Type your choice [false]: (il n'y a qu'un seul serveur) - Specify an existing mail user who you want to give administrator
permissions (optional):thierry
(nom de mon utilisateur qui est administrateur)
$conf['use_ssl'] = 0;
$conf['server']['name'] = 'webmail4.test2.martin-thierry.nom.fr';
$conf['cookie']['domain'] = $conf['server']['name'];
Depuis mon serveur Horde de test je vais utiliser mon serveur mail Internet réel et non un serveur de test. Dans le fichier de configuration du serveur mail de imp (/var/www/horde/imp/config/backends.php) il faut laisser uniquement la configuration du serveur imap (les autres exemples peuvent être commentés ou supprimés) :$servers['imap'] = array(
// ENABLED by default
'disabled' => false,
'name' => 'Mon serveur IMAP',
'hostspec' => 'mondomaine.fr',
'hordeauth' => false,
'protocol' => 'imap',
'port' => 993,
// Plaintext logins are disabled by default on IMAP servers (see RFC 3501
// [6.2.3])
'secure' => 'ssl',
'maildomain' => '',
// 'smtphost' => 'smtp.example.com',
// 'smtpport' => 25,
'cache' => false,
);
Ensuite la configuration peut se poursuivre via le navigateur web à l'adresse du serveur web (dans mon cas http://webmail4.test2.martin-thierry.nom.fr/).
Dans la fenêtre de connexion indiquer l'identifiant de l'administrateur et son mot de passe :
Cliquer sur le menu Administration puis Configuration :
Cliquer sur Horde puis Mailer et sélectionner le type Use a SMTP server
qui est par défaut sur localhost ce qui convient :
Puis dans Image Manipulation pour Image Manipulation Settings sélectionner The PECL Imagick Library
et pour Image Metadata Driver Settings sélectionner Exiftool
:
Dans Menu supprimer la possibilité de rapporter un problème en répondant Never
a Should we display problem reporting links in the menu :
Dans ActiveSync à la question Enable ActiveSync server sélectionner Disabled pour désactiver cette fonction :
Ensuite cliquer sur Générer la configuration de Horde
et copier/coller le contenu dans le fichier config/conf.php (avec sudo vim /var/www/horde/config/conf.php
).
Test de la configuration de Horde
Aller dans la configuration de Horde (comme dans le paragraphe précédent) et dans l'onglet General décocher Disable the test script
:
Puis générer la configuration comme dans le paragraphe précédent.
Configuration de Imp (Courrier)
Comme pour configurer Horde dans le menu Administration/Configuration cliquer sur Courrier (imp) puis dans l'onglet User Capabilities and Constraints cocher select sentmail folder afin de permettre à l'utilisateur de choisir dans quel dossier placer le message envoyé :
Comme pour la configuration de Horde cliquer sur Générer la configuration de Courrier et copier/coller le contenu dans le fichier imp/config/conf.php (avec sudo vim /var/www/horde/imp/config/conf.php
).
Ensuite pour voir les emails html il faut faire un réglage directement dans le fichier mime_drivers.php (sudo vim /var/www/horde/imp/config/mime_drivers.php
) et modifier inline à true dans la partie suivante : 'html' => array(
/* NOTE: Inline HTML display is turned OFF by default. */
'inline' => true,
Configuration de Turba (Carnet d'adresses)
Comme pour configurer Horde dans le menu Administration/Configuration
cliquer sur Carnet d'adresses (turba) puis sélectionner les applications qui doivent apparaître dans le menu :
Comme pour la configuration de Horde cliquer sur Générer la configuration de Carnet d'adresses et copier/coller le contenu dans le fichier turba/config/conf.php (avec sudo vim /var/www/horde/turba/config/conf.php
).
Configuration de Mnemo (Notes)
Comme pour configurer Horde dans le menu Administration/Configuration
cliquer sur Notes (mnemo) puis sélectionner les applications qui doivent apparaître dans le menu :
Comme pour la configuration de Horde cliquer sur Générer la
configuration de Notes et copier/coller le contenu dans le
fichier mnemo/config/conf.php (avec sudo vim /var/www/horde/mnemo/config/conf.php
).
Configuration de Nag (Tâches)
Comme pour configurer Horde dans le menu Administration/Configuration
cliquer sur Tâches (nag) puis sélectionner les applications qui doivent apparaître dans le menu :
Comme pour la configuration de Horde cliquer sur Générer la
configuration de Tâches et copier/coller le contenu dans le
fichier nag/config/conf.php (avec sudo vim /var/www/horde/nag/config/conf.php
).
Démarrage automatique de l'Apache schroot
Depuis l'environnement principal créer le script de démarrage schroot-horde suivant (sudo vim /etc/init.d/schroot-horde
) :#!/bin/bash
#******************************************************************************
# Fichier : /etc/init.d/schroot-horde
#
# Auteur : Thierry MARTIN
#
# Date création : dimanche 9 octobre 2011, 20:49:51
# Description : Démarrer automatiquement schroot et le service Apache pour le
# serveur Horde
#******************************************************************************
. /lib/lsb/init-functions
NAMESCRIPT=`readlink $0`
if [ -z $NAMESCRIPT ]; then
NAMESCRIPT=$0
fi
NAMESCRIPT=`basename $0`
IDFILENAME=/var/run/$NAMESCRIPT.uid
do_start() {
if [ ! -e "$IDFILENAME" ]; then
SCHROOT_ID=$(schroot -b -c horde)
schroot -r -c $SCHROOT_ID /etc/init.d/apache2 start
echo $SCHROOT_ID > $IDFILENAME
elif [ -e "$IDFILENAME" ]; then
echo "$NAMESCRIPT is already running"
fi
}
do_stop() {
if [ -e "$IDFILENAME" ]; then
SCHROOT_ID=$(cat $IDFILENAME)
schroot -r -c $SCHROOT_ID /etc/init.d/apache2 stop
schroot -e -c $SCHROOT_ID
rm $IDFILENAME
elif [ ! -e "$IDFILENAME" ]; then
echo "$NAMESCRIPT is not starting"
fi
}
case $1 in
start)
log_daemon_msg "Starting configuration" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_start
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
stop)
log_daemon_msg "Stopping configuration" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_stop
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
restart)
log_daemon_msg "restarting" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_stop
do_start
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
status)
if [[ $EUID = 0 ]]
then
if [ ! -e "$IDFILENAME" ]; then
echo "$NAMESCRIPT isn't running"
elif [ -e "$IDFILENAME" ]; then
SCHROOT_ID=$(cat $IDFILENAME)
echo "$NAMESCRIPT is running : $SCHROOT_ID"
fi
else
echo "You are not root !"
fi
;;
*)
log_daemon_msg "$0 [start|stop|restart|status]"
;;
esac
Ensuite il faut rendre le fichier exécutable et indiquer quand il doit être exécuté :sudo chmod a+x /etc/init.d/schroot-horde
sudo update-rc.d schroot-horde start 92 2 3 4 5 . stop 08 0 1 6 .
Alarmes
Depuis l'environnement principal créer le script schroot-horde-alarms (sudo vim /usr/bin/schroot-horde-alarms
) comme suit :#!/bin/bash
#******************************************************************************
# Fichier : /usr/bin/schroot-horde-alarms
#
# Auteur : Thierry MARTIN
#
# Date création : dimanche 9 octobre 2011, 20:13:54
# Description : Envoi d'un email pour les alarmes du serveur Horde
#******************************************************************************
IDFILENAME=/var/run/schroot-horde.uid
SCHROOT_ID=$(cat $IDFILENAME)
schroot -r -c $SCHROOT_ID /usr/bin/horde-alarms
Ensuite il faut rendre le fichier exécutable :sudo chmod a+x /usr/bin/schroot-horde-alarms
Et ajouter le cron en créant un script horde4 (sudo vim /etc/cron.d/horde4
) suivant :MAILTO=
* * * * * root /usr/bin/schroot-horde-alarms
Migration des données
Comme l'ancienne installation de horde est très ancienne (horde 3.1.7/imp 4.1.4) et que j'ai seulement quelques utilisateurs du webmail alors je n'ai pas pu utiliser de script de mise à jour de la base de données. Je suis donc parti de la base initiale après installation de horde 4 et j'ai exporté depuis horde3 puis importé dans horde4 les données de chaque utilisateur.
Sécurité
Dans l'environnement schroot il faut modifier les droits des répertoires de configuration :cd /var/www/horde
sudo chown -R root.www-data config */configsudo find config */config -type f -exec chmod 0440 '{}' ';'
sudo find config */config -type d -exec chmod 0755 '{}' ';'
Mise à jour
Afin de mettre à jour l'installation dans l'environnement schroot il faut exécuter les commandes suivantes :sudo apt-get update
sudo apt-get dist-upgrade
sudo pear upgrade-all
sudo pecl upgrade-all
Si nécessaire de nouveau mettre à jour le fichier imp/config/backends.php.
Si nécessaire se connecter avec l'administrateur et mettre à jour les bases de données et les fichiers de configuration.
Fin
Maintenant le serveur doit fonctionner correctement.