Clef USB de maintenance
Cette documentation est basée sur les articles suivants :
- https://wiki.debian-fr.xyz/Installation_Debian_Stretch_avec_Debootstrap_et_chroot
- https://blog.sleeplessbeastie.eu/2015/12/07/how-to-create-bootable-usb-flash-drive/
- https://askubuntu.com/questions/95392/how-to-create-a-bootable-system-with-a-squashfs-root
- https://l3net.wordpress.com/2013/09/21/how-to-build-a-debian-livecd/
- https://forum.manjaro.org/t/this-live-system-image-failed-to-boot/39967/3
- https://wiki.archlinux.org/title/Multiboot_USB_drive
Procédure validée sur Xubuntu 24.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 24.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 cups gnome-firmware xfce4-power-manager 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> update-initramfs -u chroot> apt clean chroot> exit
chroot /media/system64
chroot> apt -y install live-boot chroot> update-initramfs -u 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 minimale depuis un miroir Xubuntu :
mkdir -p /mnt/iso/ wget -O /mnt/iso/xubuntu-64.iso http://ftp.free.fr/mirrors/ftp.xubuntu.com/releases/24.04/release/xubuntu-24.04-minimal-amd64.iso
Installation des installeurs Debian
Télécharger la derniere version de l'installeur Debian netinstall :
mkdir -p /mnt/iso/debian-32 mkdir -p /mnt/iso/debian-64 wget -O /mnt/iso/debian-32/linux http://ftp.fr.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/linux wget -O /mnt/iso/debian-32/initrd.gz http://ftp.fr.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz wget -O /mnt/iso/debian-64/linux http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux wget -O /mnt/iso/debian-64/initrd.gz http://ftp.fr.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz