Unstable semble être à la mode (un peu plus d’article par ci par là), donc je vous fais part de la « méthode » que j’utilise pour mon installation, à savoir une image iso business modifiée pour s’installer en semi-automatique directement avec Unstable.
La méthode est relativement simple.
- 1 image iso (i386 ou amd64)
- 1 fichier isolinux.cfg un peu modifié pour pouvoir lancer l’installation automatiquement
- 1 fichier preseed avec les valeurs qui vont bien pour une installation semi-auto
- 1 script qui récupère le contenu de l’image iso, le modifie et recréée une image iso
1] Image iso:
J’utilise l’image iso 386, donc la suite de l’article sera à modifier en conséquence pour les utilisateurs amd64.
Il faut commencer par récupérer l’image iso ici
On peut monter l’iso pour voir son arborescence, récupérer/visualiser les fichiers, …
mkdir -p /tmp/debian/mnt
mount -o loop debian-testing-i386-businesscard.iso /tmp/debian/mnt
Note: L’image iso businesscard est la seule (de ce que j’ai pu tester) qui permet de choisir sa version de Debian (stable, testing, unstable).
2] Fichier isolinux.cfg
Fichier généré en parti à partir des fichiers isolinux/isolinux.cfg et isolinux/txt.cfg qui se trouvent à la racine de l’image iso.
default vesamenu.c32
#prompt 1
timeout 2
default install
label install
menu label ^Install
menu default
kernel /install.386/vmlinuz
append preseed/file=/cdrom/preseed.cfg lang=fr locale=fr_FR console-keymaps-at/keymap=fr-latin9 vga=normal initrd=/install.386/initrd.gz -- quiet
Le « principal » ajout est preseed/file=/cdrom/preseed.cfg, qui indique de prendre le fichier preseed à la racine du cdrom (là où on le placera dans la suite).
3] Fichier preseed.cfg
Bon alors là, partie un peu plus « velue » pour les néophytes.
Ce fichier dépend évidemment de la manière dont on veut que l’installer se comporte. Pour ma part, tout est en automatique sauf le mot de passe de root et le partitionnement. Voila ce que ça donne:
##### Langues #####
# Préconfigurer la locale seule définit la langue, le pays et la locale.
d-i debian-installer/locale select fr_FR.UTF-8
# Choix du clavier :
d-i console-keymaps-at/keymap select fr-latin9
#d-i keyboard-configuration/xkb-keymap select fr(latin9)
# Choix d'une architecture différente :
#d-i console-keymaps-usb/keymap select mac-usb-us
##### Réseau #####
# Interdire toute configuration réseau. C'est utile pour des installations
# à partir de cédérom sur des machines sans réseau. Les questions et les avertissements
# à propos du réseau ainsi que les temps d'attente sont fastidieux.
#d-i netcfg/enable boolean false
# Netcfg choisira une interface connectée si possible. Cela empêchera d'afficher
# une liste s'il y a plusieurs interfaces.
#d-i netcfg/choose_interface select auto
# Pour utiliser une interface particulière :
d-i netcfg/choose_interface select eth0
# Quand le serveur dhcp est lent et que l'installateur s'arrête pour l'attendre,
# ceci peut être utile :
#d-i netcfg/dhcp_timeout string 60
# Si vous préférez configurer vous-même le réseau, décommentez cette ligne et
# les lignes suivantes sur la configuration du réseau.
#d-i netcfg/disable_dhcp boolean true
# Si vous voulez que le fichier de préconfiguration fonctionne aussi bien
# avec que sans serveur dhcp, décommentez ces lignes et les lignes sur la
# configuration du réseau.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually
# Configuration du réseau.
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true
# Remarquez que les valeurs données par DHCP, nom de domaine ou nom de
# machine, prennent le pas sur les valeurs déclarées ici. Cependant,
# cette déclaration empêche que les questions ne soient posées même si les
# valeurs viennent de dhcp.
d-i netcfg/get_hostname string @@HOSTNAME@@
d-i netcfg/get_domain string @@DOMAINNAME@@
# Supprimer le dialogue irritant sur la clé WEP.
#d-i netcfg/wireless_wep string
# Et l'étonnant nom de machine DHCP que certains FAI utilisent comme mot de
# passe.
#d-i netcfg/dhcp_hostname string radish
# Si pour le réseau ou pour un autre matériel vous avez besoin d'un microprogramme
# (« firmware ») non libre, vous pouvez forcer l'installateur à le télécharger,
# en évitant la demande de confirmation.
# Vous pouvez aussi désactiver la question en mettant ce paramètre « false ».
#d-i hw-detect/load_firmware boolean true
##### Comptes #####
# Autoriser les connexions du superutilisateur
d-i passwd/root-login boolean true
# On peut aussi ne pas créer de compte d'utilisateur.
d-i passwd/make-user boolean true
#Le mot de passe de root en clair...
#d-i passwd/root-password password r00tme
#d-i passwd/root-password-again password r00tme
# ... ou chiffré avec un hachage MD5
#d-i passwd/root-password-crypted password $1$098f6bcd4621d373cade4e832627b4f6
# Vous pouvez aussi présélectionner le nom de l'utilisateur et son identifiant
# de connexion
d-i passwd/user-fullname string
d-i passwd/username string test
# Mot de passe de l'utilisateur en clair...
#d-i passwd/user-password password insecure
#d-i passwd/user-password-again password insecure
# ... ou chiffré avec un hachage MD5
d-i passwd/user-password-crypted password $1$098f6bcd4621d373cade4e832627b4f6
# Préciser l'UID du premier utilisateur.
#d-i passwd/user-uid string 1010
##### Miroirs #####
# Si vous utilisez ftp, il n'est pas nécessaire d'indiquer la chaîne mirror/country.
#d-i mirror/protocol string ftp
d-i mirror/country string FR
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# Distribution à installer.
d-i mirror/suite string unstable
# Distribution à utiliser pour charger les composants de l'installateur (facultatif).
#d-i mirror/udeb/suite string unstable
## Pour pouvoir utiliser ces paramètres de debian-installer, il faut utiliser l'image iso "businesscard" qui est la seule image à proposer le choix de la version de Debian à installer (Stable, Testing ou Unstable).
##Ça ne fonctionnera donc pas avec l'image netinst
##### Fuseau horaire #####
# Cette commande permet de régler l'horloge matérielle sur UTC :
d-i clock-setup/utc boolean true
# Vous pouvez mettre toute valeur acceptée pour $TZ.
# Voyez ce que contient /usr/share/zoneinfo/ pour les valeurs possibles.
d-i time/zone string Europe/Paris
# La ligne suivante autorise l'utilisation de NTP pour régler l'horloge pendant l'installation :
d-i clock-setup/ntp boolean true
# Le serveur NTP à utiliser. Le serveur par défaut est presque toujours correct.
#d-i clock-setup/ntp-server string 0.debian.pool.ntp.org
# Merci à SYRTE (http://http://www.syrte.obspm.fr/) pour leur serveur ntp.
d-i clock-setup/ntp-server string ntp-p1.obspm.fr
##### Installation système de base #####
# Configurer APT pour empêcher l'installation des paquets recommandés.
# Cette option qui peut conduire à un sytème incomplet est réservée des
# utilisateurs expérimentés.
#d-i base-installer/install-recommends boolean false
# Choix du générateur initramfs pour créer l'initrd des noyaux 2.6.
#d-i base-installer/kernel/linux/initramfs-generators string initramfs-tools
# Version du noyau à installer (nom du paquet). Utilisez none si vous ne voulez pas
# installer de noyau.
d-i base-installer/kernel/image string linux-image-3.0.0-1-686-pae
##### Configuration APT #####
# Vous pouvez installer des logiciels des distributions non-free et contrib.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# Décommentez cette ligne si vous n'utilisez pas de miroir sur le réseau.
#d-i apt-setup/use_mirror boolean false
# Choisissez les services de mise à jour et les miroirs à utiliser.
# Les valeurs ci-après sont les valeurs par défaut :
#d-i apt-setup/services-select multiselect security, volatile
#d-i apt-setup/security_host string security.debian.org
#d-i apt-setup/volatile_host string volatile.debian.org
##### Choix des paquets #####
tasksel tasksel/first multiselect standard
# Si vous sélectionnez la tache desktop, vous pouvez installer les environnements kde ou xfce
# au lieu de l'environnement gnome.
#tasksel tasksel/desktop multiselect kde, xfce
# Paquets supplémentaires
#d-i pkgsel/include string openssh-server build-essential
# Mise à jour des paquets après debootstrap.
# Valeurs autorisées : none, safe-upgrade, full-upgrade
#d-i pkgsel/upgrade select none
# Certaines versions de l'installateur peuvent signaler les logiciels que vous avez installés
# et ceux que vous utilisez. Par défaut, rien n'est signalé. Mais l'envoi de rapport
# d'installation aide le projet à connaître les logiciels populaires.
popularity-contest popularity-contest/participate boolean true
##### Installation programme d'amorçage #####
# Le paramètre suivant est sans danger : il installe grub sur le
# secteur d'amorçage principal s'il n'existe aucun autre système d'exploitation
# sur la machine.
d-i grub-installer/only_debian boolean true
# Si il y a d'autres os sur la machine, remplacer la ligne précédente par la suivante:
#d-i grub-installer/with_other_os boolean true
##### Terminer l'installation #####
# Pour éviter le dernier message disant que l'installation est terminée :
d-i finish-install/reboot_in_progress note
# Pour empécher l'éjection du cédérom au moment du redémarrage,
# c'est utile parfois :
d-i cdrom-detect/eject boolean false
## Test de late_command
#Le futur système ne se trouve pas à la racine, mais dans le répertoire /target/
#Pour exécuter une commande au sein du système installé, il faut faire précéder la commande de "in-target".
#d-i preseed/late_command string in-target wget -q -O /tmp/mon_beau_paquet.deb http://lien/mon/beau/paquet.deb; in-target dpkg -i /tmp/mon_beau_paquet.deb
#in-target dpkg -i /target/root/teamviewer.deb
#d-i preseed/late_command string in-target apt-get install htop
#d-i preseed/late_command string apt-install htop
# --> apt-install remplace "in-target apt-get install"
Pour ceux qui souhaiterait approfondir le partitionnement, ou autre, voir les liens en bas de l’article.
Pour les utilisateurs actuellement sous Debian, il est également possible d’avoir le résumé des questions/réponses de votre installation. Ça permet de se donner une petite idée de la configuration actuelle de votre système:
aptitude install debconf-utils
debconf-get-selections --installer > preseed-installer.txt
Ce fichier sert juste à modifier votre fichier principal preseed.cfg
4] Script génération d’image iso:
J’utilise un script pour modifier certaines valeurs du fichier preseed et pour régénérer l’image iso:
#!/bin/bash
PREFIX=/tmp/debian
# Emplacement temporaire
TMPDIR=${PREFIX}/tmp
# Emplacement temporaire où l'iso originale sera montée
MNTDIR=${TMPDIR}/mnt
# Emplacement qui contient les données à ajouter (preseed, isolinux) ainsi que la future image iso
DATADIR=/media/data/config_debian/sid
# Emplacement où sera stocké le contenu de la nouvelle image iso
NEWISODIR=${TMPDIR}/new_debian_businesscard
# Fichier preseed.cfg
PRESEEDFILE=${DATADIR}/preseed.cfg
# Fichier image iso originale
DEBIANISO=${DATADIR}/debian-testing-i386-businesscard.iso
# Fichier isolinux.cfg
ISOLINUX_CFG_FILE=${DATADIR}/isolinux.cfg
# Emplacement de la nouvelle image iso
NEWDEBIANISO=${DATADIR}/new-debian-testing-businesscard.iso
# Variable pour modifier le fichier preseed.cfg
MYHOSTNAME=""
MYDOMAINNAME=""
### Vérification que le script est bien lancé en root
if [ "${USER}" = "root" ]; then
echo "Lancement du script d'installation"
else
echo "/!\\ Le script nécessite d'être root /!\\"
exit 1
fi
### Vérification de la présence du paquet genisoimage
dpkg -s genisoimage|grep installed > /dev/null 2>&1
pkg_geniso=$?
if [ -n "${pkg_geniso}" ]; then
echo "genisoimage est installé" > /dev/null 2>&1
else
echo "/!\\ Le paquet genisoimage n'est pas installé /!\\"
echo "Appuyer sur une touche pour l'installer avec aptitude ou CTRL+C pour quitter le script et l'installer vous même."
read -p "" touche
aptitude install genisoimage
fi
# Changement des variables:
while [ -z "${MYHOSTNAME}" ] # Tant que la variable est vide
do
echo -n "Quel le nom de la future machine [${MYHOSTNAME}]?: "
read MYHOSTNAME
done
while [ -z "${MYDOMAINNAME}" ] # Tant que la variable est vide
do
echo -n "Quel le nom du futur domaine [${MYDOMAINNAME}]?: "
read MYDOMAINNAME
done
# Récupérer le contenu de l'image ISO:
mkdir -p ${MNTDIR}
mount -o loop ${DEBIANISO} ${MNTDIR} > /dev/null 2>&1
# Suppression d'un éventuel répertoire temporaire
rm -rf ${NEWISODIR}
mkdir -p ${NEWISODIR}
# Synchronisation du contenu de l'iso
rsync -a -H --exclude=TRANS.TBL ${MNTDIR}/ ${NEWISODIR}
# On démonte l'image iso et on supprime le répertoire
umount ${MNTDIR}
rmdir ${MNTDIR}
# Copie du fichier preseed.cfg
cat ${PRESEEDFILE}|sed -e "s/@@HOSTNAME@@/${MYHOSTNAME}/g" | sed -e "s/@@DOMAINNAME@@/${MYDOMAINNAME}/g" > ${NEWISODIR}/preseed.cfg
# Copie du fichier isolinux.cfg
cp ${ISOLINUX_CFG_FILE} ${NEWISODIR}/isolinux
# Régénération du fichier md5sum.txt
cd ${NEWISODIR}
md5sum `find -type f` > md5sum.txt
# Génération de l'image iso
cd ${NEWISODIR}
genisoimage -o ${NEWDEBIANISO} \
-r -J -no-emul-boot -boot-load-size 4 \
-boot-info-table -b isolinux/isolinux.bin \
-c isolinux/boot.cat \
${NEWISODIR}
cd -
# Un peu de ménage
rm -rf ${NEWISODIR}
exit 0
Il faut juste préciser l’emplacement du répertoire (DATADIR) qui devra comprendre les fichiers preseed.cfg et isolinux.cfg.
On rend ensuite le script exécutable puis une petite exécution:
chmod a+x gen_iso.sh
./gen_iso.sh
5] Sources:
- Article de Yves Mettier dans GLMF 131
- Exemple de fichier preseed pour Squeeze
- Manuel d’installation de Debian qui traite de l’automatisation de l’installation et de la préconfiguration
- Manuel et Google