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/
Procédure validée sur Xubuntu 20.04 et Debian 10.
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.
Nous allons utiliser une clef USB 3 de 16 Go. Nous considérerons qu'elle est connectée sur une machine virtuelle sur le disque /dev/sda. Un disque virtuel de 20 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 20.04.
Partitionnement
La clef USB doit comporter une table de partitions MS-DOS. Nous allons partitionner notre clef USB comme suit avec GParted :
Volume | Sys. de fichiers | Taille (en Mo) | Drapeaux | Usage |
---|---|---|---|---|
sda1 | ext2 | 6 144 | boot |
Système de maintenance et ISO |
sda2 | ext2 | 8 192 | Images de clonage | |
sda3 | fat32 | 2 048 | Stockage de données | |
sdb1 | ext2 | 20 479 | Installation du système de maintenance |
Création du système de maintenance
Installer les paquets suivants :
apt install extlinux syslinux-common debootstrap
Le système d'amorçage
Copier le MBR extlinux sur le disque de destination :
dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda
Monter la partition sda1 sur /mnt et créer le dossier /mnt/boot/extlinux :
mount /dev/sda1 /mnt cd /mnt mkdir -p /mnt/boot/extlinux
Installer extlinux :
extlinux --install /mnt/boot/extlinux
Copier les modules nécessaires à l'affichage du menu de démarrage :
cp /usr/lib/syslinux/modules/bios/{menu.c32,vesamenu.c32,reboot.c32,chain.c32,libutil.c32,libcom32.c32,hdt.c32,ldlinux.c32,libgpl.c32,libmenu.c32} /mnt/boot/extlinux/
Télécharger Memtest86+ :
wget -O /mnt/boot/extlinux/memtest http://www.memtest.org/download/5.01/memtest86+-5.01.bin
Télécharger le descriptif PCI pour l'utilitaire HDT :
wget -O /mnt/boot/extlinux/pci.ids http://pci-ids.ucw.cz/v2.2/pci.ids
Créer le fichier /mnt/boot/extlinux/extlinux.conf :
DEFAULT vesamenu.c32 TIMEOUT 100 ONTIMEOUT LOCALDISK MENU TITLE Clef USB de maintenance MENU BACKGROUND splash-pxe.jpg MENU COLOR TITLE 0 #FFD64937 #00000000 std MENU COLOR SEL 0 #E0000000 #FFD64937 all MENU COLOR BORDER 0 #00000000 #00000000 none MENU VSHIFT 2 ALLOWOPTIONS 0 MENU AUTOBOOT Demarrage automatique du disque local dans # seconde{,s}. LABEL LOCALDISK MENU LABEL Demarrer le disque local KERNEL chain.c32 APPEND hd0 TEXT HELP Amorcer le disque dur local. ENDTEXT LABEL REBOOT MENU LABEL Redemarrer le systeme KERNEL reboot.c32 TEXT HELP Redemarrer l'ordinateur. ENDTEXT LABEL MEMTEST MENU LABEL Memtest86+ KERNEL memtest APPEND -e TEXT HELP Effectuer un test de memoire. ENDTEXT LABEL HDT MENU LABEL Inventaire du materiel COM32 hdt.c32 APPEND pciidc=pci.ids TEXT HELP Inventaire du materiel ENDTEXT MENU SEPARATOR LABEL MAINT-INSTALL MENU LABEL Systeme de maintenance (installation) KERNEL /live/vmlinuz APPEND initrd=/live/initrd.img root=/dev/sdb1 quiet splash -- TEXT HELP Systeme de maintenance (installation seulement). ENDTEXT LABEL MAINT MENU LABEL Systeme de maintenance KERNEL /live/vmlinuz APPEND initrd=/live/initrd.img boot=live quiet splash -- TEXT HELP Systeme de maintenance. ENDTEXT LABEL XUBUNTU MENU LABEL Xubuntu 20.04 64 bits live KERNEL /iso/xubuntu-64/vmlinuz APPEND boot=casper initrd=/iso/xubuntu-64/initrd fsck.mode=skip iso-scan/filename=/iso/xubuntu-64/xubuntu-64.iso locale=fr quiet splash noprompt -- TEXT HELP Live CD Xubuntu 20.04 64 bits. ENDTEXT LABEL DEBIAN-64 MENU LABEL Debian 10 amd64 install KERNEL /iso/debian-64/linux APPEND initrd=/iso/debian-64/initrd.gz quiet TEXT HELP Installeur Debian 10 64 bits. ENDTEXT LABEL DEBIAN-32 MENU LABEL Debian 10 i386 install KERNEL /iso/debian-32/linux APPEND initrd=/iso/debian-32/initrd.gz quiet TEXT HELP Installeur Debian 10 32 bits. ENDTEXT
Télécharger l'image de fond du menu PXE :
wget -O /mnt/boot/extlinux/splash-pxe.jpg https://antoinepernot.fr/data/splash-pxe.jpg
Installation du système Debian de maintenance
Le système de maintenance sera installé 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/system
mkdir /media/system mount /dev/sdb1 /media/system
Nous allons utiliser debootstrap pour installer un système Debian de base depuis les dépôts sur Internet :
debootstrap --arch amd64 stable /media/system/ http://deb.debian.org/debian/
Créer les points de montage sur le système de maintenance :
mkdir /media/system/media/images mkdir /media/system/media/donnees
Monter les répertoires du nouveau système fraîchement installés :
mount -t sysfs /sys /media/system/sys mount -t proc /proc /media/system/proc mount --bind /dev /media/system/dev mount -t devpts /dev/pts /media/system/dev/pts mount --bind /tmp /media/system/tmp
Entrer dans le système de la clef de maintenance :
chroot /media/system
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 :
chroot> passwd root
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 deb http://security.debian.org/ stable/updates main contrib non-free deb http://deb.debian.org/debian/ stable-updates main contrib non-free deb http://deb.debian.org/debian/ stable-proposed-updates main contrib non-free deb http://ftp.debian.org/debian stable-backports main contrib non-free
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 linux-image-amd64 numix-gtk-theme papirus-icon-theme dmz-cursor-theme cheese vlc firefox-esr firefox-esr-l10n-fr engrampa mate-calc partclone dcfldd locales console-data sudo terminator krusader kate geany geany-plugins simple-scan cheese audacity blueman dmz-cursor-theme wpasupplicant grub2 os-prober 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
Ajouter l'utilisateur standard dans le groupe sudo (si nécessaire) :
chroot> usermod -a -G sudo antoine
Modifier le fichier /etc/fstab comme suit :
UUID=<UUID de sdb1> / ext2 defaults 0 1 UUID=<UUID de sda2> /media/images ext2 ro 0 1 UUID=<UUID de sda3> /media/donnees vfat defaults,nofail 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
Quitter le chroot :
chroot> exit
Démonter les répertoires du système de fichiers chrooté :
umount /media/system/sys umount /media/system/proc umount /media/system/dev/pts umount /media/system/dev umount /media/system/tmp
Copier les fichiers kernel et vmlinuz sur la partition de démarrage :
mkdir /mnt/live cp /media/system/{vmlinuz,initrd.img} /mnt/live/
Redémarrer la machine virtuelle sur le disque /dev/sda et sélectionner l'option Systeme de maintenance (installation) et personnaliser la configuration selon vos besoins.
Un fois cela fait, redémarrer sur le live Xubuntu et remontez les partitions :
mkdir /media/system mount /dev/sda1 /mnt mount /dev/sdb1 /media/system
Installer le paquet live-boot sur le système de maintenance :
mount -t sysfs /sys /media/system/sys mount -t proc /proc /media/system/proc mount --bind /dev /media/system/dev mount -t devpts /dev/pts /media/system/dev/pts mount --bind /tmp /media/system/tmp chroot /media/system
chroot> apt -y install live-boot chroot> apt clean chroot> exit
umount /media/system/sys umount /media/system/proc umount /media/system/dev/pts umount /media/system/dev umount /media/system/tmp
Dans le fichier /media/system/etc/fstab, retirer le montage de la racine.
Créer le système de fichier squashfs :
mksquashfs /media/system /mnt/live/filesystem.squashfs -e boot
Éditer le fichier /mnt/boot/extlinux/extlinux.conf et supprimer l'entrée MAINT-INSTALL.
Suite à l'installation de live-boot, copier de nouveau les fichiers kernel et vmlinuz sur la partition de démarrage :
cp /media/system/{vmlinuz,initrd.img} /mnt/live/
Installation de l'ISO Xubuntu
Télécharger la derniere version LTS des ISO Xubuntu 64 bits depuis un miroir Xubuntu :
mkdir -p /mnt/iso/xubuntu-64 wget -O /mnt/iso/xubuntu-64/xubuntu-64.iso http://cdimages.ubuntu.com/xubuntu/releases/20.04/release/xubuntu-20.04.1-desktop-amd64.iso
Monter les ISO sur un répertoire :
mkdir /media/xubuntu-iso mount -o loop /mnt/iso/xubuntu-64/xubuntu-64.iso /media/xubuntu-iso
Copier les fichiers casper/vmlinuz et casper/initrd.lz des ISO montés vers les dossiers accueillant les ISO :
cp /media/xubuntu-iso/casper/{vmlinuz,initrd} /mnt/iso/xubuntu-64/
Démonter les ISO :
umount /media/xubuntu-iso && rmdir /media/xubuntu-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.nl.debian.org/debian/dists/buster/main/installer-i386/current/images/netboot/netboot.tar.gz wget -O /tmp/debian-netinstall-64.tgz http://ftp.nl.debian.org/debian/dists/buster/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/{initrd.gz,linux} /mnt/iso/debian-32 cp /tmp/debian-64/debian-installer/amd64/{initrd.gz,linux} /mnt/iso/debian-64