Debian Installation avec Preseed

Afin de pouvoir automatiser l’installation de Debian et de ses dérivés, nous pouvons écrire des fichiers de réponse qui permettent de dérouler une installation sans interaction utilisateur. Ce fichier est prénommé preseed pour Debian, ou encore Kickstart pour RedHat et ses dérivés. Il existe plusieurs façon de spécifier ce fameux fichier de réponse, soit en modifiant directement le fichier ISO, soit en le spécifiant dans le lancement de l’installation.


Spécification du fichier preseed lors de l’installation

Vous pouvez trouver mon fichier preseed içi : https://github.com/Eliora59/KickStart-Preseed/blob/main/preseed
Il est également auto-héberger à l’adresse suivante afin de faciliter son utilisation : ks.overcomputing.net/preseed

Lors du lancement de l’ISO officiel de Debian, nous allons nous aller directement dans Advanced options

Puis ensuite aller dans Automated install

Le système va effectuer quelques actions de base, comme recevoir une configuration DHCP et va demander ensuite votre fichier preseed, on indique donc l’adresse du fichier


Intégration du preseed dans l’ISO

Cette solution permet de déployer une installation de Debian sans même à avoir besoin de spécifier l’emplacement du fichier preseed. Le fichier preseed qui va être préciser doit être au plus minimal possible, c’est à dire sans commentaire et juste les commandes principale afin d’éviter une corruption de fichier. Dans un premier temps, nous allons télécharger l’ISO.

wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.6.0-amd64-netinst.iso
Bash user command

Une fois que l’iso est téléchargé, nous allons maintenant la décompresser avec l’utilitaire 7zip

7z x -oDEBIAN-ISO-EXTRACT debian-11.6.0-amd64-netinst.iso
Bash user command

On ajoute notre fichier preseed.cfg dans le dossier extrait de Debian, et il doit être neutre sans commentaire pour éviter tout problème de corruption :

DEBIAN-ISO-EXTRACT/preseed.cfg
d-i debian-installer/locale string fr_FR
d-i console-keymaps-at/keymap select fr
d-i keyboard-configuration/xkb-keymap select fr(latin9)
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string DEB-SRV
d-i netcfg/get_domain string overcomputing.net
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
d-i mirror/suite string stable
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
d-i clock-setup/ntp boolean false
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i passwd/root-password password root
d-i passwd/root-password-again password root
d-i passwd/make-user boolean false
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/cdrom/set-first boolean false
d-i apt-setup/cdrom/set-next boolean false   
d-i apt-setup/cdrom/set-failed boolean false
popularity-contest popularity-contest/participate boolean false
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server build-essential
d-i grub-installer/only_debian boolean true
d-i grub-installer/bootdev string /dev/sda
d-i debian-installer/exit/poweroff boolean true
d-i finish-install/reboot_in_progress note
d-i preseed/late_command string in-target sh -c "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config"; in-target /etc/init.d/ssh restart

Nous allons maintenant rendre modifiable notre fichier fichier initrd, le décompresser et y ajouter notre fichier preseed.cfg

chmod +w -R DEBIAN-ISO-EXTRACT/install.amd/

gunzip DEBIAN-ISO-EXTRACT/install.amd/initrd.gz

echo preseed.cfg | cpio -H newc -o -A -F DEBIAN-ISO-EXTRACT/install.amd/initrd

gzip DEBIAN-ISO-EXTRACT/install.amd/initrd

chmod -w -R DEBIAN-ISO-EXTRACT/install.amd/
Bash user command

Nous allons maintenant régénérer le md5

cd DEBIAN-ISO-EXTRACT/

chmod +w md5sum.txt

find -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt

chmod -w md5sum.txt
Bash user command

On génère maintenant le nouvel ISO

genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../preseed-debian-perso.iso .
Bash user command

Maintenant si nous démarrons notre image, nous avons la possibilité de soit faire l’installation en mode graphique, ce qui nous permettra de configurer certains éléments à la main si nous souhaitons une machine pas commune, ou si on veut dérouler une installation courante, on appuie sur Install.