Clef USB de maintenance

Cette documentation est basée sur les articles suivants :

Procédure validée sur Xubuntu 22.04 et Debian 12.

Présentation du projet

Nous souhaitons créer une clef USB de maintenance permettant d'installer un système Xubuntu ainsi que de démarrer un système d'exploitation Debian contenant divers utilitaires système, dont un utilitaire de clonage.

Cette clef USB de maintenance sera capable de démarrer à la fois sur un système 32 et 64 bits, ainsi que sur un BIOS ou un UEFI.

Nous allons utiliser une clef USB 3 de 32 Go. Nous considérerons qu'elle est connectée sur une machine virtuelle sur le disque /dev/sda. Un disque virtuel de 8 Go est connecté sur /dev/sdb sera temporairement utilisé pour créer le système de maintenance. Cette machine virtuelle est démarrée sur un live Xubuntu 22.04.

Partitionnement

La clef USB doit comporter une table de partitions GPT. Nous allons partitionner notre clef USB comme suit avec GParted puis cfdisk pour définir les systèmes de fichiers de /dev/sda1 et /dev/sda2 :

Volume Sys. de fichiers Taille (en Mo) Usage
sda1 Amorcage BIOS 1 Partition d'installation de GRUB
sda2 FAT32 EFI 512 Partition EFI
sda3 ext2 11 264 Système de maintenance
sda4 ext2 10 240 Stockage des images pour clonage
sda5 NTFS 7 549 Stockage de données
sdb1 ext2 10 240 Installation du système de maintenance 32 bits
sdb2 ext2 10 240 Installation du système de maintenance 64 bits

Installation du système d'amorçage hybride

Exécuter les commandes suivantes sur gdisk :

> gdisk /dev/sda

Command (? for help): r
Recovery/transformation command (? for help): h

WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.

Type from one to three GPT partition numbers, separated by spaces, to be
added to the hybrid MBR, in sequence: 1 2 3
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 83): 
Set the bootable flag? (Y/N): Y

Recovery/transformation command (? for help): x
Expert command (? for help): h
Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully. 

Monter la partition sda3 sur /mnt et la partition sda2 sur /mnt/boot/EFI :

mount /dev/sda3 /mnt
mkdir -p /mnt/boot/EFI
mount /dev/sda2 /mnt/boot/EFI

Installer GRUB version BIOS :

grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sda
grub-install --target=i386-pc --recheck --force --boot-directory=/mnt/boot /dev/sda3

Installer GRUB version UEFI :

apt install grub-efi-ia32
grub-install --target=i386-efi --recheck --removable --efi-directory=/mnt/boot/EFI --boot-directory=/mnt/boot
apt install grub-efi-amd64
grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt/boot/EFI --boot-directory=/mnt/boot

Télécharger Memtest86+ :

wget -O /mnt/boot/memtest http://www.memtest.org/download/archives/5.31b/memtest86+-5.31b.bin

Créer le fichier /mnt/boot/grub/grub.cfg :

insmod efi_gop
insmod efi_uga

menuentry "Systeme de maintenance 32 bits (installation)" {
	linux /live32/vmlinuz root=UUID=<UUID de sdb1>
	initrd /live32/initrd.img
}

menuentry "Systeme de maintenance 32 bits" {
	linux /live32/vmlinuz boot=live live-media-path=/live32
	initrd /live32/initrd.img
}

menuentry "Systeme de maintenance 64 bits" {
	linux /live64/vmlinuz boot=live live-media-path=/live64
	initrd /live64/initrd.img
}

menuentry "Live Xubuntu" {
	set isofile="/iso/xubuntu-64.iso"
	loopback loop $isofile
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale=fr_FR bootkbd=fr console-setup/layoutcode=fr noprompt fsck.mode=skip quiet splash
	initrd (loop)/casper/initrd
}

menuentry "Installeur Xubuntu" {
	set isofile="/iso/xubuntu-64.iso"
	loopback loop $isofile
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale=fr_FR bootkbd=fr console-setup/layoutcode=fr noprompt fsck.mode=skip only-ubiquity quiet splash
	initrd (loop)/casper/initrd
}

menuentry "Installeur Xubuntu OEM" {
	set isofile="/iso/xubuntu-64.iso"
	loopback loop $isofile
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale=fr_FR bootkbd=fr console-setup/layoutcode=fr noprompt fsck.mode=skip only-ubiquity oem-config/enable=true quiet splash
	initrd (loop)/casper/initrd
}

menuentry "Installeur Debian 32" {
	linux /iso/debian-32/linux quiet vga=788
	initrd /iso/debian-32/initrd.gz
}

menuentry "Installeur Debian 64" {
	linux /iso/debian-64/linux quiet vga=788
	initrd /iso/debian-64/initrd.gz
}

menuentry "Memtest86+" {
	linux16 /boot/memtest
}

grub_platform

if [ "$grub_platform" = "efi" ]
then
menuentry "Configuration UEFI" {
	fwsetup
}
fi

Création du système de maintenance

Installer le paquet suivant :

apt install debootstrap

Le système de maintenance sera installé deux fois (une fois pour les systèmes 32 bits et une fois pour les systèmes 64 bits) sur le disque /dev/sdb puis sera enpaqueté sous la forme d'un système de fichiers squashfs.

Monter la partition /dev/sdb1 sur le répertoire /media/system32 et /dev/sdb2 sur le répertoire /media/system64

mkdir /media/system32
mount /dev/sdb1 /media/system32
mkdir /media/system64
mount /dev/sdb2 /media/system64

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

debootstrap --arch i386 stable /media/system32/ http://deb.debian.org/debian/
debootstrap --arch amd64 stable /media/system64/ http://deb.debian.org/debian/

Créer les points de montage sur le système de maintenance :

mkdir /media/system32/media/images
mkdir /media/system32/media/donnees
mkdir /media/system64/media/images
mkdir /media/system64/media/donnees

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

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

Les commandes suivantes lors du chroot sont à répéter pour le système 64 bits.

Entrer dans le système de maintenance 32 bits :

chroot /media/system32

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

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

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). Remplacer linux-image-686 par linux-image-amd64 pour la version 64 bits :

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 qt5-style-plugins system-config-printer firmware-linux-nonfree 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-microbit-micropython firmware-microbit-micropython-doc 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-tomu firmware-zd1211 hdmi2usb-fx2-firmware 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-686
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. Ignorer cette étape pour le système 64 bits :

UUID=<UUID de sdb1> / ext2 defaults 0 1
UUID=<UUID de sda4> /media/images ext2 ro 0 1
UUID=<UUID de sda5> /media/donnees ntfs defaults 0 2
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 --config x-cursor-theme

Définir le gestionnaire de thème Qt :

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

Désactiver l'enregistrement de session XFCE :

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

Quitter le chroot :

chroot> exit

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

umount /media/system32/sys
umount /media/system32/proc
umount /media/system32/dev/pts
umount /media/system32/dev
umount /media/system32/tmp
umount /media/system64/sys
umount /media/system64/proc
umount /media/system64/dev/pts
umount /media/system64/dev
umount /media/system64/tmp

Copier les fichiers kernel et vmlinuz sur la partition de démarrage :

mkdir /mnt/live32
mkdir /mnt/live64
cp /media/system32/{vmlinuz,initrd.img} /mnt/live32/

Redémarrer la machine virtuelle sur le disque /dev/sda et sélectionner l'option Systeme de maintenance 32 bits (installation) et personnaliser la configuration selon vos besoins.

Désactiver la mise en veille, l'hibernation depuis la session graphique :

xfconf-query -c xfce4-session -np '/shutdown/ShowSuspend' -t 'bool' -s 'false'
xfconf-query -c xfce4-session -np '/shutdown/ShowHibernate' -t 'bool' -s 'false'

Un fois cela fait, redémarrer sur le live Xubuntu et remonter les partitions :

mkdir /media/system32
mkdir /media/system64
mount /dev/sda3 /mnt
mount /dev/sdb1 /media/system32
mount /dev/sdb2 /media/system64

Copier les modifications apportées depuis le système 32 bits vers le système 64 bits :

cp -Rp /media/system32/home/* /media/system64/home/

Installer le paquet live-boot sur le système de maintenance :

mount -t sysfs /sys /media/system32/sys
mount -t proc /proc /media/system32/proc
mount --bind /dev /media/system32/dev
mount -t devpts /dev/pts /media/system32/dev/pts
mount --bind /tmp /media/system32/tmp
mount -t sysfs /sys /media/system64/sys
mount -t proc /proc /media/system64/proc
mount --bind /dev /media/system64/dev
mount -t devpts /dev/pts /media/system64/dev/pts
mount --bind /tmp /media/system64/tmp
chroot /media/system32
chroot> apt -y install live-boot
chroot> apt clean
chroot> exit
chroot /media/system64
chroot> apt -y install live-boot
chroot> apt clean
chroot> exit
umount /media/system32/sys
umount /media/system32/proc
umount /media/system32/dev/pts
umount /media/system32/dev
umount /media/system32/tmp
umount /media/system64/sys
umount /media/system64/proc
umount /media/system64/dev/pts
umount /media/system64/dev
umount /media/system64/tmp

Dans le fichier /media/system32/etc/fstab, retirer le montage de la racine.

Copier le fichier fstab vers le système 64 bits :

cp /media/system32/etc/fstab /media/system64/etc/fstab

Créer les systèmes de fichiers squashfs :

mksquashfs /media/system32 /mnt/live32/filesystem.squashfs -e boot
mksquashfs /media/system64 /mnt/live64/filesystem.squashfs -e boot

Éditer le fichier /mnt/boot/grub/grub.cfg et supprimer l'entrée Systeme de maintenance 32 bits (installation).

Suite à l'installation de live-boot, copier de nouveau les fichiers kernel et vmlinuz sur la partition de démarrage :

cp /media/system32/{vmlinuz,initrd.img} /mnt/live32/
cp /media/system64/{vmlinuz,initrd.img} /mnt/live64/

Installation de l'ISO Xubuntu

Télécharger la derniere version LTS de l'ISO Xubuntu 64 bits depuis un miroir Xubuntu :

mkdir -p /mnt/iso/
wget -O /mnt/iso/xubuntu-64.iso http://cdimages.ubuntu.com/xubuntu/releases/22.04/release/xubuntu-22.04.2-desktop-amd64.iso

Installation des installeurs Debian

Télécharger la derniere version de l'installeur Debian netinstall :

wget -O /tmp/debian-netinstall-32.tgz http://ftp.fr.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/netboot.tar.gz
wget -O /tmp/debian-netinstall-64.tgz http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/netboot.tar.gz

Décompresser les archives téléchargées et copier les fichiers nécessaires dans l'arborescence du système de démarrage :

mkdir -p /mnt/iso/debian-32
mkdir -p /mnt/iso/debian-64
mkdir -p /tmp/debian-32
mkdir -p /tmp/debian-64
tar zxvf /tmp/debian-netinstall-32.tgz -C /tmp/debian-32
tar zxvf /tmp/debian-netinstall-64.tgz -C /tmp/debian-64
cp /tmp/debian-32/debian-installer/i386/{linux,initrd.gz} /mnt/iso/debian-32
cp /tmp/debian-64/debian-installer/amd64/{linux,initrd.gz} /mnt/iso/debian-64