Clef USB de maintenance

Cette documentation est basée sur les articles suivants :

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
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 sda1> / ext2 default 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> 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