Création d'images système live

Procédure validée sur Debian 13.

Présentation du projet

Nous allons voir ici comment créer des images systèmes live pour des usages divers. Ces images peuvent, ensuite, êtres démarrées depuis un serveur PXE, un ISO de CD-ROM ou une clef USB de maintenance.

La génération d'image système se fera depuis un disque dur virtuel Qemu.

Installation des prérequis

Installer debootstrap, les outils Qemu et les utilitaires usuels :

apt -y install debootstrap qemu-utils parted squashfs-tools

Création de la base système

Créer un disque dur virtuel de 32 Go et le connecter comme /dev/nbd0 :

qemu-img create -f qcow2 virtualDisk.qcow 32G
modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 virtualDisk.qcow

Créer une table de partitions MS-DOS et créer une unique partition ext2 :

parted -s /dev/nbd0 mklabel msdos
parted -a cylinder /dev/nbd0 mkpart primary 1 34360
mkfs.ext2 /dev/nbd0p1

Monter la partition dans /media/live :

mkdir /media/live
mount /dev/nbd0p1 /media/live

Nous allons utiliser debootstrap pour installer un système Debian de base depuis les dépôts sur Internet :

debootstrap --arch amd64 stable /media/live http://deb.debian.org/debian/

Monter les répertoires du nouveau système fraîchement installés :

mount -t sysfs /sys /media/live/sys
mount -t proc /proc /media/live/proc
mount --bind /dev /media/live/dev
mount -t devpts /dev/pts /media/live/dev/pts
mount --bind /tmp /media/live/tmp

Entrer dans le système du client :

chroot /media/live

Pour la suite de cette documentation, les commandes à exécuter lors du chroot seront précédées par chroot>.

Configuration d'une image live graphique

Définir le mot de passe du compte root (si nécessaire) :

chroot> passwd root

Modifier le nom de la machine dans le fichier /etc/hostname et ajouter le nom de machine sur la ligne 127.0.0.1 dans le fichier /etc/hosts.

Créer un utilisateur standard :

chroot> adduser antoine

Définir la langue du système en français :

chroot> apt -y install locales
chroot> dpkg-reconfigure locales

Cocher fr_FR.UTF-8 et choisir cette langue par défaut.

Définir le fuseau horaire de l'horloge :

chroot> dpkg-reconfigure tzdata

Choisir Europe, puis Paris.

Modifier le fichier /etc/apt/sources.list comme suit :

deb http://deb.debian.org/debian/ stable main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security stable-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ stable-updates main contrib non-free non-free-firmware
# deb http://deb.debian.org/debian/ stable-proposed-updates main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian stable-backports main contrib non-free non-free-firmware

Mettre à jour les dépôts et installer les paquets nécessaires (à personnaliser si vous le souhaitez).

chroot> apt update
chroot> apt -y install bash-completion nano mc xfce4 lightdm network-manager network-manager-gnome gparted gsmartcontrol xfce4-whiskermenu-plugin numix-gtk-theme papirus-icon-theme dmz-cursor-theme cheese vlc firefox-esr firefox-esr-l10n-fr engrampa mate-calc mousepad partclone dcfldd console-data sudo terminator krusader kate geany geany-plugins simple-scan grsync audacity blueman wpasupplicant grub2 os-prober debootstrap gvfs-backends gvfs-fuse qt5ct qt5ct adwaita-qt qt5-gtk-platformtheme xfce4-power-manager system-config-printer cups gnome-firmware firmware-linux-nonfree displaylink-driver firmware-amd-graphics firmware-ath9k-htc firmware-atheros firmware-bnx2 firmware-bnx2x firmware-brcm80211 firmware-cavium firmware-intel-sound firmware-ipw2x00 firmware-ivtv firmware-iwlwifi firmware-libertas firmware-linux firmware-linux-free firmware-linux-nonfree firmware-misc-nonfree firmware-myricom firmware-netronome firmware-netxen firmware-qcom-media firmware-qcom-soc firmware-qlogic firmware-realtek firmware-samsung firmware-siano firmware-sof-signed firmware-ti-connectivity firmware-zd1211 midisport-firmware sigrok-firmware-fx2lafw ubertooth-firmware ubertooth-firmware-source arm-trusted-firmware-tools atmel-firmware bluez-firmware dahdi-firmware-nonfree dns323-firmware-tools broadcom-sta-common broadcom-sta-dkms broadcom-sta-source bluetooth bluez bluez-cups bluez-firmware bluez-obexd bluez-tools pulseaudio-module-bluetooth pulseaudio-module-gsettings pulseaudio-module-zeroconf mesa-utils mesa-utils-extra mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers vulkan-tools vulkan-validationlayers linux-image-amd64 live-boot
chroot> apt -y upgrade

Lors de l'installation du paquet console-data, vous serez amené à choisir la configuration du clavier. Choisir l'option Choisir un codage clavier dans la liste complète, puis pc / azerty / French / Same as X11 (latin9).

Installer les composants standards :

chroot> tasksel install standard print-server

Ajouter l'utilisateur standard dans le groupe sudo (si nécessaire) :

chroot> usermod -a -G sudo antoine

Modifier le fichier /etc/fstab comme suit :

tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0

Configurer la connexion automatique pour l'utilisateur standard à l'environnement graphique en décommentant et modifiant les lignes suivantes dans /etc/lightdm/lightdm.conf :

autologin-user=antoine
autologin-user-timeout=0

Définir le curseur de la souris par défaut :

chroot> update-alternatives --set x-cursor-theme /usr/share/icons/DMZ-White/cursor.theme

Définir le gestionnaire de thème Qt :

echo "QT_QPA_PLATFORMTHEME=qt5ct" >> /etc/environment

Désactiver l'enregistrement de session XFCE :

chroot> mkdir /etc/xdg/xfce4/kiosk
chroot> echo "[xfce4-session]" > /etc/xdg/xfce4/kiosk/kioskrc
chroot> echo "SaveSession=NONE" >> /etc/xdg/xfce4/kiosk/kioskrc

Configurer l'environnement de bureau à votre guise. Un exemple de configuration à placer dans /home/antoine est disponible ici.

Configuration d'une image live en ligne de commandes

Installer le noyau et les outils permettant de démarrer en live :

chroot> apt install linux-image-amd64 live-boot console-data

Pour une connexion automatique du système en mode ligne de commande, modifier le fichier /etc/systemd/system/getty.target.wants/getty@tty1.service et remplacer la ligne suivante :

ExecStart=-/sbin/agetty --autologin antoine --noclear %I $TERM

Configuration d'un système kiosque

Les systèmes kiosque permettent d'exécuter une application unique sans possibilité d'exécuter autre chose. Cela est utile, par exemple, dans le cas des bornes d'accès Internet en libre-service, des systèmes d'affichages publics, etc.

Dans notre exemple, nous allons configurer un kiosque permettant d'accéder à un seul site Internet avec un navigateur plein écran.

Définir le mot de passe du compte root (si nécessaire) :

chroot> passwd root

Modifier le nom de la machine dans le fichier /etc/hostname et ajouter le nom de machine sur la ligne 127.0.0.1 dans le fichier /etc/hosts.

Définir la langue du système en français :

chroot> apt -y install locales
chroot> dpkg-reconfigure locales

Cocher fr_FR.UTF-8 et choisir cette langue par défaut.

Définir le fuseau horaire de l'horloge :

chroot> dpkg-reconfigure tzdata

Créer le compte utilisateur du kiosque :

chroot> adduser kiosk

Installer les paquets nécessaires. Remplacer firefox-esr par l'application de votre choix :

chroot> apt install matchbox-window-manager x11-xserver-utils lightdm dmz-cursor-theme linux-image-amd64 live-boot firefox-esr firefox-esr-l10n-fr console-data

Lors de l'installation du paquet console-data, vous serez amené à choisir la configuration du clavier. Choisir l'option Choisir un codage clavier dans la liste complète, puis pc / azerty / French / Same as X11 (latin9).

Installer unclutter si vous voulez que la souris disparaisse en cas d'inactivité (dans le cas d'affichages publics par exemple) :

chroot> apt install unclutter

Définir le curseur de la souris par défaut :

chroot> update-alternatives --set x-cursor-theme /usr/share/icons/DMZ-White/cursor.theme

Configurer la connexion automatique pour l'utilisateur standard à l'environnement graphique en décommentant et modifiant les lignes suivantes dans /etc/lightdm/lightdm.conf :

autologin-user=kiosk
autologin-user-timeout=0

Créer le script gérant la session du compte kiosque en créant le fichier /home/kiosk/.xsession :

xset s off
xset -dpms
matchbox-window-manager &
while true
do
	firefox-esr -kiosk https://antoinepernot.fr
done

Empaquetage des images systèmes

Quitter le chroot :

chroot> exit

Démonter les répertoires du système de fichiers chrooté :

umount /media/live/sys
umount /media/live/proc
umount /media/live/dev/pts
umount /media/live/dev
umount /media/live/tmp

Nous allons stocker les fichiers de notre système live dans /media/live-image :

mkdir /media/live-image

Copier les fichiers vmlinuz et initrd.img :

cp /media/live/{initrd.img,vmlinuz} /media/live-image/

Créer le système de fichiers squashfs :

mksquashfs /media/live /media/live-image/filesystem.squashfs -e boot

Démonter le disque virtuel :

umount /dev/nbd0*
qemu-nbd --disconnect /dev/nbd0