« Installation automatique Debian » : différence entre les versions
Aucun résumé des modifications |
(→Via PXE : Ajout du paramètre "net.ifnames=0" afin que l'installeur Debian ne remplisse pas le fichier interfaces avec les noms PNIN qui ne correspondront pas avec les nom eth post installation (donc pas de réseau).) |
||
(4 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 4 : | Ligne 4 : | ||
=Concepts= | =Concepts= | ||
Afin de réaliser cette automatisation, Nous allons utiliser la méthode standard des distributions à base de Debian, à savoir Preseed. Il est également possible d'utiliser [https://doc.ubuntu-fr.org/kickstart Kickstart], le système de Red Hat porté sur cette plateforme. | Afin de réaliser cette automatisation, Nous allons utiliser la méthode standard des distributions à base de Debian, à savoir Preseed. Il est également possible d'utiliser [https://doc.ubuntu-fr.org/kickstart Kickstart], le système de Red Hat porté sur cette plateforme, que j'utilise [[Installation automatique CentOS|ici]]. | ||
Un fichier Preseed est un bête document texte contenant les paramètres prédéfinit des différentes étapes de l'installation de Debian. Il peut-être utilisé directement depuis un CD netinstall ou entièrement par le réseau via [[Serveur_PXE#Preseed|PXE]]. La première solution à le mérite d'être portable (on peut emporter le fichier Preseed sur son PC et utiliser le serveur WEB de [[Busybox#Serveur_WEB|Busybox]] pour le partager à la machine que l'on veux installer) tandis que la méthode par le réseau est largement plus efficace pour une infrastructure sédentaire et permet le déploiement massif de machines (virtuelles ou non). | |||
=Préparation= | =Préparation= | ||
==Contenu du fichier Preseed== | ==Contenu du fichier Preseed== | ||
Ligne 42 : | Ligne 43 : | ||
## Ici, l'utilisateur root | ## Ici, l'utilisateur root | ||
d-i passwd/root-password-crypted password $1$gS7ub6Es$mXmJM2Pcx81LfiFrskJrE1 | d-i passwd/root-password-crypted password $1$gS7ub6Es$mXmJM2Pcx81LfiFrskJrE1 | ||
## Ici, l'utilisateur | ## Ici, l'utilisateur yohan | ||
d-i passwd/user-fullname string Foo Bar | d-i passwd/user-fullname string Foo Bar | ||
d-i passwd/username string foo | d-i passwd/username string foo | ||
Ligne 57 : | Ligne 58 : | ||
## Partitionnement du disque | ## Partitionnement du disque | ||
## | ## Formatage du premier disque | ||
d-i partman-base partman/default_filesystem string ext4 | |||
d-i partman-auto/method string regular | d-i partman-auto/method string regular | ||
d-i partman-lvm/device_remove_lvm boolean true | d-i partman-lvm/device_remove_lvm boolean true | ||
d-i partman-md/device_remove_md boolean true | d-i partman-md/device_remove_md boolean true | ||
USBDEV=$(mount | grep hd-media | cut -d" " -f1 | sed "s/\(.*\)./\1/");\ | |||
BOOTDEV=$(list-devices disk | grep -v \$USBDEV | head -1);\ | |||
debconf-set partman-auto/disk \$BOOTDEV;\ | |||
debconf-set grub-installer/bootdev \$BOOTDEV; | |||
d-i partman-auto/expert_recipe string \ | d-i partman-auto/expert_recipe string \ | ||
500 10000 1000000 ext4 \ | |||
$primary{ } \ | |||
$bootable{ } \ | |||
method{ format } \ | |||
format{ } \ | |||
use_filesystem{ } \ | |||
filesystem{ ext4 } \ | |||
mountpoint{ / } . \ | |||
64 512 300% linux-swap \ | |||
method{ swap } \ | |||
format{ } . \ | |||
d-i partman-partitioning/confirm_write_new_label boolean true | d-i partman-partitioning/confirm_write_new_label boolean true | ||
d-i partman/choose_partition select finish | d-i partman/choose_partition select finish | ||
Ligne 102 : | Ligne 99 : | ||
## Utilitaires usuels du systèmes + interface graphique | ## Utilitaires usuels du systèmes + interface graphique | ||
tasksel tasksel/first multiselect standard, desktop | tasksel tasksel/first multiselect standard, desktop | ||
#tasksel tasksel/first multiselect standard | |||
## Installation d'utilitaires supplémentaires | ## Installation d'utilitaires supplémentaires | ||
d-i pkgsel/include string openssh-server vim htop tmux | d-i pkgsel/include string openssh-server vim tree htop tmux bash-completion tcpdump | ||
## Installer GRUB sur /dev/sda sans poser question | |||
#d-i grub-installer/bootdev string /dev/sda | |||
d-i grub-installer/only_debian boolean true | |||
d-i grub-installer/bootdev string default | |||
#d-i preseed/late_command string update-grub | |||
# | ## Exécuter un script après l'installation | ||
d-i | d-i preseed/late_command string in-target wget -P /tmp/ http://192.168.180.180/scripts/bash/post-install-deb.sh; in-target chmod +x /tmp/post-install-deb.sh; in-target /tmp/post-install-deb.sh | ||
#Terminer l'installation sans poser de question | ## Terminer l'installation sans poser de question | ||
d-i finish-install/reboot_in_progress note | d-i finish-install/reboot_in_progress note | ||
## Éteindre la machine plutôt que de la redémarrer | |||
d-i debian-installer/exit/poweroff boolean true | |||
</source> | </source> | ||
'' | * Pour limiter l'effet ''n'importe-quoi'' d'un copier/coller sauvage du fichier ci-dessus, vous pouvez le télécharger [https://{{SERVERNAME}}/fichiers/amorçage/preseed/preseed_prod/preseed.cfg ici] | ||
* La source pour la partie sur l'exclusion de l'USB pour '''/dev/sda''' est [https://serverfault.com/questions/685251/unattended-installation-with-preseed-give-a-custom-device-to-partman-auto ici] | |||
* Celle pour le script post-install [https://askubuntu.com/questions/294338/is-it-possible-to-download-a-bash-script-and-execute-it-from-a-preseed-file#299893 ici]. Le script que j'utilise dans cette même partie est téléchargeable [https://{{SERVERNAME}}/fichiers/amorçage/preseed/post-install-deb.sh ici] | |||
Pour une installation sans interface graphique, il faut retirer <source lang="bash" inline>desktop</source> dans la ligne <source lang="bash" inline> tasksel tasksel/first multiselect standard, desktop </source> | Pour une installation sans interface graphique, il faut retirer <source lang="bash" inline>desktop</source> dans la ligne <source lang="bash" inline> tasksel tasksel/first multiselect standard, desktop </source> | ||
Ligne 160 : | Ligne 170 : | ||
<source lang="bash">d-i anna/choose_modules apt-cdrom-setup</source>}} | <source lang="bash">d-i anna/choose_modules apt-cdrom-setup</source>}} | ||
===Via PXE=== | ===Via PXE=== | ||
Je part du principe que votre serveur PXE est déjà fonctionnel | Je part du principe que votre [[serveur PXE]] est déjà fonctionnel. | ||
{{info|Si vous utilisez un miroir de dépôt local, n'oubliez pas de rajouter la branche de l'installeur de Debian pour | {{info|Si vous utilisez un miroir de dépôt local, n'oubliez pas de rajouter la branche de l'installeur de Debian pour [[Apt-mirror]]. Les lignes suivantes dans le fichier '''mirror.list''' sont à mettre (pour les architectures <source lang="bash" inline>adm64</source> et <source lang="bash" inline>i386</source> dans mon exemple): | ||
<source lang="bash"> | <source lang="bash"> | ||
deb http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free | deb http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free | ||
Ligne 186 : | Ligne 196 : | ||
MENU LABEL Installer Debian 9 | MENU LABEL Installer Debian 9 | ||
KERNEL http://192.168.180.180/noyaux/stretch/debian-installer/linux quiet | KERNEL http://192.168.180.180/noyaux/stretch/debian-installer/linux quiet | ||
APPEND vga=normal initrd=http://192.168.180.180/noyaux/stretch/debian-installer/initrd.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical url=http://192.168.180.180/scripts/preseed/preseed.cfg DEBCONF_DEBUG=5 IPAPPEND 2 | APPEND vga=normal initrd=http://192.168.180.180/noyaux/stretch/debian-installer/initrd.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical url=http://192.168.180.180/scripts/preseed/preseed.cfg DEBCONF_DEBUG=5 IPAPPEND 2 net.ifnames=0 | ||
</source> | </source> | ||
Explications de la section '''APPEND''': | Explications de la section '''APPEND''': | ||
Ligne 202 : | Ligne 212 : | ||
''Je précise que je n'ai pas affiné et sélectionné chaque paramètre pour trouver leur utilité et que l’absence de documentation qualitative au niveau de celle de [https://qemu.weilnetz.de/doc/qemu-doc.html Qemu] rend la tâche d'autant plus difficile. J'ai mis en branle des paramètres qui fonctionnent et qui font que ça marche comme je l'entend, je n'ai pas cherché plus loin car les bénéfices sont trop maigres pour que j'y dépense du temps et de l'énergie. Si vous cherchez quelque chose en particulier, vous allez devoir galérer à votre tour et comprendre par vous même que ce n'est pas si simple...'' | ''Je précise que je n'ai pas affiné et sélectionné chaque paramètre pour trouver leur utilité et que l’absence de documentation qualitative au niveau de celle de [https://qemu.weilnetz.de/doc/qemu-doc.html Qemu] rend la tâche d'autant plus difficile. J'ai mis en branle des paramètres qui fonctionnent et qui font que ça marche comme je l'entend, je n'ai pas cherché plus loin car les bénéfices sont trop maigres pour que j'y dépense du temps et de l'énergie. Si vous cherchez quelque chose en particulier, vous allez devoir galérer à votre tour et comprendre par vous même que ce n'est pas si simple...'' | ||
{{info|J'ai constaté que la présence de faux paramètres dans la section ''APPEND'' pouvaient empêcher le téléchargement du fichier Preseed donc si vous faites des copier/coller de certains sites et que ça ne fonctionne pas, | {{info|J'ai constaté que la présence de faux paramètres dans la section ''APPEND'' pouvaient empêcher le téléchargement du fichier Preseed donc si vous faites des copier/coller de certains sites et que ça ne fonctionne pas, pensez à ça.}} | ||
=Sources= | =Sources= |
Dernière version du 7 novembre 2019 à 18:53
L'installeur de Debian (et plus généralement de ses dérivés comme Ubuntu) permet l'automatisation complète. Il est ainsi possible de ce passer d'intervention Humaine pour mastériser une machine, ce qui permet de les faire à la chaîne ou d'en préparer une à des fins de tests sans rester comme un gland devant l'écran (de plus comme c'est automatique c'est largement plus rapide puisque les choix sont prédéfinis donc pas de questions chronophages).
Concepts
Afin de réaliser cette automatisation, Nous allons utiliser la méthode standard des distributions à base de Debian, à savoir Preseed. Il est également possible d'utiliser Kickstart, le système de Red Hat porté sur cette plateforme, que j'utilise ici.
Un fichier Preseed est un bête document texte contenant les paramètres prédéfinit des différentes étapes de l'installation de Debian. Il peut-être utilisé directement depuis un CD netinstall ou entièrement par le réseau via PXE. La première solution à le mérite d'être portable (on peut emporter le fichier Preseed sur son PC et utiliser le serveur WEB de Busybox pour le partager à la machine que l'on veux installer) tandis que la méthode par le réseau est largement plus efficace pour une infrastructure sédentaire et permet le déploiement massif de machines (virtuelles ou non).
Préparation
Contenu du fichier Preseed
Un fichier Preseed peut accepter un grand nombre de paramètres afin de personnaliser votre installation au plus proche de vos besoins. Je détaillerai surtout ce qui m'est utile (après tout c'est mon site hein ;D). Mes besoins lors de mes tests sont surtout une installation basique comportant massivement des "suivant, suivant, suivant, oui, oui , enter, entrer, entrer... terminer" avec en plus quelques outils préinstallés pour faciliter l'administration. Mais une fois que vous avez le concept en main ce n'est pas bien compliquer de couper le cordon avec mes explications.
Voici le fichier que j'utilise:
## Mettre le système en Français
d-i debian-installer/locale string fr_FR.UTF-8
d-i keyboard-configuration/xkb-keymap select fr(latin9)
d-i keyboard-configuration/layout string French
d-i keyboard-configuration/layoutcode string fr
#d-i console-keymaps-at/keymap select fr
d-i keymap skip-config
d-i netcfg/choose_interface select auto
## Définir le nom d'hôte.
## Avec les deux paramètres suivants, le nom d'hôte peut-être récupéré
## directement deuis le DHCP avec les directives "option host-name"
# d-i netcfg/get_hostname string unassigned-hostname
# d-i netcfg/get_domain string unassigned-domain
## Sinon utiliser la linge suivante pour donner le que vous voulez
## Ici, la machine se nommera "Debian-auto"
d-i netcfg/hostname string Debian-auto
## Définir le miroir d'installation
## Si vous avez un miroir local, c'est ici qu'il faut donner son adresse
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
## Définir les mots de passes utilisateurs
## Ici, l'utilisateur root
d-i passwd/root-password-crypted password $1$gS7ub6Es$mXmJM2Pcx81LfiFrskJrE1
## Ici, l'utilisateur yohan
d-i passwd/user-fullname string Foo Bar
d-i passwd/username string foo
d-i passwd/user-password password bar
d-i passwd/user-password-again password bar
#d-i passwd/user-password-crypted $1$Ohff74uq$BE9PsuTxEgdUvU.HNpZiR1
## Configurer la date et l'heure
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
## On peut utiliser le serveur NTP que l'on souhaite
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string 192.168.1.140
## Partitionnement du disque
## Formatage du premier disque
d-i partman-base partman/default_filesystem string ext4
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
USBDEV=$(mount | grep hd-media | cut -d" " -f1 | sed "s/\(.*\)./\1/");\
BOOTDEV=$(list-devices disk | grep -v \$USBDEV | head -1);\
debconf-set partman-auto/disk \$BOOTDEV;\
debconf-set grub-installer/bootdev \$BOOTDEV;
d-i partman-auto/expert_recipe string \
500 10000 1000000 ext4 \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ / } . \
64 512 300% linux-swap \
method{ swap } \
format{ } . \
d-i partman-partitioning/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éfinition du dépôt des mises à jours de sécurités
d-i apt-setup/services-select multiselect security
d-i apt-setup/security_host string security.debian.org
## Participation à l'étude statistique d'utilisation des paquets
## Désactivée
popularity-contest popularity-contest/participate boolean false
## Type d'installation
## Utilitaires usuels du systèmes + interface graphique
tasksel tasksel/first multiselect standard, desktop
#tasksel tasksel/first multiselect standard
## Installation d'utilitaires supplémentaires
d-i pkgsel/include string openssh-server vim tree htop tmux bash-completion tcpdump
## Installer GRUB sur /dev/sda sans poser question
#d-i grub-installer/bootdev string /dev/sda
d-i grub-installer/only_debian boolean true
d-i grub-installer/bootdev string default
#d-i preseed/late_command string update-grub
## Exécuter un script après l'installation
d-i preseed/late_command string in-target wget -P /tmp/ http://192.168.180.180/scripts/bash/post-install-deb.sh; in-target chmod +x /tmp/post-install-deb.sh; in-target /tmp/post-install-deb.sh
## Terminer l'installation sans poser de question
d-i finish-install/reboot_in_progress note
## Éteindre la machine plutôt que de la redémarrer
d-i debian-installer/exit/poweroff boolean true
- Pour limiter l'effet n'importe-quoi d'un copier/coller sauvage du fichier ci-dessus, vous pouvez le télécharger ici
- La source pour la partie sur l'exclusion de l'USB pour /dev/sda est ici
- Celle pour le script post-install ici. Le script que j'utilise dans cette même partie est téléchargeable ici
Pour une installation sans interface graphique, il faut retirer desktop
dans la ligne tasksel tasksel/first multiselect standard, desktop
INFORMATION
Ce fichier se charge après la partie réseau de l'installation (normal, sinon il ne pourrait pas le télécharger). Les paramètres touchants à la configuration réseau ne s'appliquent donc qu'a une installation via Cédérom.ASTUCE
J'ai constaté sans l'expérimenter complètement que l'ensemble des informations du fichier Preseed peuvent être données en paramètres au noyau lors du démarrage. Avec de la détermination, je suis sûr que l'on peu ce passer de ce fichier (au prix d'un beau bordel dans la ligne de boot).Installation par SSH
L'installeur de Debian permet d'effectuer les divers étapes d'installation via une interface ncurses dans une session SSH. Dans le cas d'une installation automatique, cette fonctionnalité est selon moi inutile mais dans le cas d'une mise à disposition de l'installeur via le réseau (afin de ne pas ce faire chier à faire des clés bootables à tout va ou de graver un CD), ceci peut s'avérer très intéressant (surtout pour l'installation d'un serveur car pas besoin de rester à coté à attendre comme un gland avec le bruit et le froid de la clim).
Pour ce faire, il suffit de mettre ces quelques options au début du fichier Preseed. À savoir qu'il est possible de se connecter soit via mot de passe, soit via clé SSH (un serveur WEB sera requis pour cette dernière):
## Activer l'installation par SSH (l'utilisateur est "installer")
d-i anna/choose_modules string network-console
## Utiliser un mot de passe pour la session
#d-i network-console/password password SECRET123
#d-i network-console/password-again password SECRET123
## Utiliser une clé SSH pour la session
d-i network-console/password-disabled boolean true
d-i network-console/authorized_keys_url string http://192.168.180.180/ssh/openssh-key
d-i preseed/early_command string anna-install network-console
## Permet de passer automatiquement l'écran d'information de connexion
d-i network-console/start select continue
Comme on peut le voir avec la ligne
d-i network-console/authorized_keys_url string http://192.168.180.180/ssh/openssh-key
Un répertoire ssh contient un fichier openssh-key (bien sûr, on peut nommer tout ça comme on veut). Ce fichier est en fait ni plus ni moins qu'un bête fichier authorized_keys que l'on utilise pour une connexion SSH sans mot de passe. Il suffit donc de créer ce fichier sur votre serveur WEB avec la clé publique de votre machine cliente pour que l'installeur la récupère et permette l'authentification de cette dernière lors de la connexion.
INFORMATION
Le module SSH est également activable par une variable fournit au noyau lors du démarrage. Pour cela, il faudra ajouter dans la ligne APPEND le paramètre : modules=network-console.Sources de la section
- https://wiki.debian.org/DebianInstaller/NetworkConsole
- https://help.ubuntu.com/community/Installation/NetworkConsole
- https://nos-oignons.net/wiki-admin/Machines/bulbe.nos-oignons.net/Installation/preseed.cfg ou sur nos fichiers
- https://forum.ubuntuusers.de/topic/bestaetigung-ssh-fingerprint-in-pxe-installati/
Mise à disposition
Via le CD netinstall
Pour utiliser un fichier Preseed depuis un CD netinstall Debian, il faut appuyer sur <echap>
au menu de choix d'actions afin d'afficher une console et taper la commande suivante:
auto url=http://IP_DU_SERVEUR/preseed.cfg
Vous pouvez télécharger un fichier Preseed fonctionnel sur le site de Debian.
ASTUCE
Vous pouvez choisir d'utiliser le dépôt local du CD pour l'installation, ainsi, seul les fichiers absents de ce support seront pris sur le réseau. Pour ce faire, il faut utiliser le paramètre suivant après les options de langues et de réseaux:d-i anna/choose_modules apt-cdrom-setup
Via PXE
Je part du principe que votre serveur PXE est déjà fonctionnel.
INFORMATION
Si vous utilisez un miroir de dépôt local, n'oubliez pas de rajouter la branche de l'installeur de Debian pour Apt-mirror. Les lignes suivantes dans le fichier mirror.list sont à mettre (pour les architecturesadm64
et i386
dans mon exemple):
deb http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free
deb-i386 http://ftp.fr.debian.org/debian/ stretch main main/debian-installer contrib non-free
Création du répertoire de destination des fichiers
mkdir -p /srv/tftp/noyaux/stretch/debian-installer/
On se déplace dans notre répertoire de travail
cd /tmp
Télécharger le noyau et l'initrd de l'installeur
wget http://ftp.fr.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz
Décompresser le tout
tar xvf netboot.tar.gz
Copie du noyau
cp /tmp/debian-installer/amd64/linux /srv/tftp/noyaux/stretch/debian-installer/
Copie de l'initrd
cp /tmp/debian-installer/amd64/initrd.gz /srv/tftp/noyaux/stretch/debian-installer/
Ajouter l'entrée correspondante dans le menu PXE
vim /srv/tftp/pxelinux.cfg/default
LABEL Installation_Debian_auto
MENU LABEL Installer Debian 9
KERNEL http://192.168.180.180/noyaux/stretch/debian-installer/linux quiet
APPEND vga=normal initrd=http://192.168.180.180/noyaux/stretch/debian-installer/initrd.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical url=http://192.168.180.180/scripts/preseed/preseed.cfg DEBCONF_DEBUG=5 IPAPPEND 2 net.ifnames=0
Explications de la section APPEND:
- vga=normal: Spécifie la définition d'affichage (je ne sais pas à quoi correspond normal, l'info est introuvable)
- initrd=: Spécifie l'emplacement de l'initrd
- auto=true: Lance l'installation sans poser de question (il se base uniquement sur les paramètres renseigné)
Je ne comprend pas vraiment ce que sont les paramètres commençant par netcfg/. Ce qui suit n'est que supposition (oui ça fait vachement pro, je sais)
- interace=auto: Je pense que c'est pour ne pas poser de questions au moment de l'interface à utiliser pour la configuration réseau
- dhcp_timeout=60: définit un délais max d'attente d'une minute pour la requête DHCP
- choose_interface=auto: Le re-voila, je ne sais pas pourquoi
- priority=critical: Ha ça je sais ! Le paramètre critical permet de lancer l'installation en mode automatique (en fait auto=true ne fonctionne pas si on ne met pas ce paramètre. Allez savoir pourquoi les mecs ont codés ça comme ça...). On peut mettre low à la place de critical pour effectuer une installation en mode interactive (il faudra dans ce cas mettre auto=false)
- url=: Spécifie l'emplacement du fichier Preseed
Ce qui suit, je ne sais pas.
Je précise que je n'ai pas affiné et sélectionné chaque paramètre pour trouver leur utilité et que l’absence de documentation qualitative au niveau de celle de Qemu rend la tâche d'autant plus difficile. J'ai mis en branle des paramètres qui fonctionnent et qui font que ça marche comme je l'entend, je n'ai pas cherché plus loin car les bénéfices sont trop maigres pour que j'y dépense du temps et de l'énergie. Si vous cherchez quelque chose en particulier, vous allez devoir galérer à votre tour et comprendre par vous même que ce n'est pas si simple...
INFORMATION
J'ai constaté que la présence de faux paramètres dans la section APPEND pouvaient empêcher le téléchargement du fichier Preseed donc si vous faites des copier/coller de certains sites et que ça ne fonctionne pas, pensez à ça.Sources
Documentation officielle
Installation
- https://wiki.debian.org/DebianInstaller/Preseed
- https://angoule.me/lit/linux-et-TCPIP/preseed-pour-debian
- https://angoule.me/lit/linux-et-TCPIP/DHCP-TFTP-PXE-et-bien-plus
- http://ghantoos.org/2012/10/21/cocktail-of-pxe-debian-preseed-ipmi-puppet/