Automatiser une installation de Debian avec preseed

install automatique par fichier de réponse

Source : https://wiki.deimos.fr/Automatiser_une_installation_de_Debian

Introduction

Il n'est pas toujours facile de faire 10 serveurs à l'identique. C'est pourquoi cette section va aider à avoir une installation propre et maîtrisée.

preseed.cfg

Vous devez d'abord créer le fichier de préconfiguration et le placer là où vous le voulez. Voici le preseed que j'utilise pour Debian Wheezy (Vour http://git.deimos.fr pour la version la plus récente) :

# Preseed file for Debian
# Made by Pierre Mavro / Deimosfr
# To create a temporary web server to quickly serve this preseed file,
# simply type one of this command in the same folder than preseed :
# while true; do nc -l -p 8000 -q 1 < preseed.cfg ; done
# python -m SimpleHTTPServer
# For more informations :
# http://wiki.deimos.fr/Automatiser_une_installation_de_Debian
### Contents of the preconfiguration file (for wheezy)
d-i debian-installer/language string en
d-i debian-installer/country string FR
d-i debian-installer/locale string en_US.UTF-8
### Keyboard
d-i console-keymaps-at/keymap select fr
d-i keyboard-configuration/xkb-keymap select fr
d-i console-keymaps-at/keymap select fr
# keymap is an alias for keyboard-configuration/xkb-keymap
#d-i keymap select fr(latin9)
### Network configuration
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/wireless_wep string
### Apt mirror
d-i mirror/protocol string http
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-i mirror/suite string wheezy
### Account setup
d-i passwd/root-login boolean false
d-i passwd/make-user boolean true
d-i passwd/root-password password soleil
d-i passwd/root-password-again password soleil
d-i passwd/user-fullname string Deimos
d-i passwd/username string deimos
d-i passwd/user-password password soleil
d-i passwd/user-password-again password soleil
### Clock and time zone setup
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris
d-i clock-setup/ntp boolean true
### Partitioning
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string vgos
# Partition will be :
# /boot : ~128M ext4
# / : [1-âˆž]G LVM ext4
# /var : [768-2048]M LVM ext4
# swap : [RAM*150%-2048]M LVM
d-i partman-auto/expert_recipe string \
boot-root :: \
128 3000 128 ext4 \
$primary{ } \
$bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /boot } \
options/noatime{ noatime } \
. \
1024 4000 -1 ext4 \
$lvmok{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
options/noatime{ noatime } \
lv_name{ root } \
. \
768 1000 2048 ext4 \
$lvmok{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var } \
options/noatime{ noatime } \
lv_name{ var } \
. \
100% 1000 150% linux-swap \
$lvmok{ } \
method{ swap } format{ } \
lv_name{ swap } \
.
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-i partman-md/confirm boolean true
d-i partman/mount_style select uuid
### Base system installation
d-i base-installer/install-recommends boolean false
### Apt setup
apt-cdrom-setup apt-setup/cdrom/set-first boolean false
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/use_mirror boolean true
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
### Package selection
tasksel tasksel/first multiselect standard
d-i pkgsel/upgrade select safe-upgrade
popularity-contest popularity-contest/participate boolean true
d-i pkgsel/include string openssh-server
### Grub
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
# Finish install
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean true

python -m SimpleHTTPServer est une petite astuce pour monter rapidement un serveur web temporaire pour pouvoir balancer le preseed sans avoir à refaire une image ISO.

Charger le fichier de préconfiguration

Pour ce qui est du chargement de ce fichier, vous pouvez choisir ce que vous souhaitez (fichier, http…) lors de l'amorçage de l'installation (grub) :

# Version serveur Web
preseed/url=http://host/path/to/preseed.cfg
# Version CD
preseed/file=/cdrom/preseed.cfg
# Version clef USB
preseed/file=/hd-media/preseed.cfg

Vous pouvez également éditez le fichier txt.cfg sur un cdrom afin de lui indiquer l'emplacement du fichier :

default install
label install
menu label ^Install
menu default
kernel /install.amd/vmlinuz
append preseed/file=/cdrom/preseed.cfg auto=true priority=critical lang=fr locale=en_US.UTF-8 console-keymaps-at/keymap=fr-latin9 vga=788 initrd=/install.amd/initrd.gz -- quiet

Utiliser un serveur DHCP pour indiquer les fichiers de préconfiguration

Il est aussi possible d'utiliser DHCP pour spécifier un fichier à télécharger sur le réseau. DHCP permet d'indiquer un nom de fichier. Normalement ce fichier sert à un amorçage sur le réseau. S'il s'agit d'une URL, le système d'installation qui permet une préconfiguration de type network téléchargera le fichier et l'utilisera comme fichier de préconfiguration. Voici un exemple montrant comment configurer le fichier dhcpd.conf appartenant à la version 3 du serveur ISC DHCP (paquet debian dhcp3-server).

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
filename "http://host/preseed.cfg";
}

Remarquez que l'exemple précédent n'autorise le fichier qu'aux clients DHCP qui s'identifient comme « d-i ». Les autres clients DHCP ne sont pas affectés. Vous pouvez aussi mettre le texte dans un paragraphe à destination d'un seul hôte pour ne pas préconfigurer toutes les installations faites dans votre réseau.

Une bonne façon d'utiliser cette technique est de ne préconfigurer que les valeurs liées à votre réseau, par exemple le nom de votre miroir Debian. De cette manière les installations utilisent automatiquement le bon miroir et la suite de l'installation peut se faire interactivement. Il faut être très prudent si l'on veut automatiser toute l'installation avec une préconfiguration de type DHCP.

Ressources

http://www.debian.org/releases/stable/s390/apbs02.html.fr
http://www.unixgarden.com/index.php/gnu-linux-magazine-hs/une-installation-de-debian-automatique-2