Voici un moyen de créer une clé USB Debian live avec persistance. Il permettra d'installer les packages manquants qui seront désormais disponibles à chaque démarrage en direct en utilisant la persistance. Étant donné que nous recréons le contenu du système de fichiers d'image ISO en direct sur un système de fichiers compatible en lecture-écriture, nous pouvons modifier les configurations du chargeur de démarrage pour activer la persistance et définir la disposition du clavier au démarrage.
Les étapes décrites ici ont été testées pour fonctionner sur Debian stretch et buster afin de créer une image live Debian stretch.
Il y a beaucoup d'étapes impliquées, mais il semble que cette méthode soit encore assez efficace.
Avertissement: vous perdrez les données sur le lecteur USB cible et si vous gâchez les commandes ci-dessous, vous pourriez être très désolé par la suite. Je ne suis pas responsable de tes actions.
Se sentir chanceux
Si vous vous sentez particulièrement chanceux aujourd'hui, vous pouvez essayer un script bash automatisant le processus pour vous. Donnez-lui votre chemin d'image ISO comme premier paramètre et le nom du périphérique de bloc de lecteur USB comme deuxième. Notez que ce script est incroyablement dangereux et que vous ne devez pas l'exécuter sans l'avoir lu et compris au préalable.
TL; DR
Obtenez l'image ISO en direct de Debian, puis procédez comme suit:
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
En détail et avec quelques explications
Vous devrez exécuter la plupart des commandes suivantes avec des privilèges élevés, c'est-à-dire en les utilisant sudo
sur la plupart des systèmes GNU / Linux.
Télécharger
Téléchargez une image ISO Debian en direct avec le gestionnaire de fenêtres de votre choix:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Nous désignerons simplement l'image ISO téléchargée par "live.iso".
Déterminer le lecteur cible
Recherchez l'appareil utilisé par votre clé USB lsblk
. Nous appellerons cela /dev/sdX
.
Démonter
Démontez les partitions existantes sur votre lecteur à l'aide de umount /dev/sdX*
Créer des partitions
Nous avons besoin d'une partition de démarrage EFI pour que les PC UEFI démarrent à partir du lecteur USB. Ensuite, nous avons besoin d'une partition suffisamment grande pour contenir le contenu original de l'image du système de fichiers ISO. Cette partition doit avoir le legacy_boot
drapeau défini. Ensuite, nous ajoutons la partition de persistance, en utilisant tout l'espace restant du lecteur USB. Vous pouvez le faire avec n'importe quel outil de partitionnement compatible GPT (attention à l' legacy_boot
indicateur). Voici un exemple d'utilisation parted
:
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
Cela crée une table de partition GPT et une table de partition MBR protectrice.
Créer des systèmes de fichiers
Nous voulons FAT sur la partition EFI et live et nous voulons ext4
sur la partition de persistance et nous avons besoin de l'étiquette persistence
pour que la fonctionnalité de persistance fonctionne.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Monter les ressources
Nous devrons monter l'ISO source et les partitions cibles à des points de montage temporaires.
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
Installer le système en direct
Copiez le contenu du système de fichiers ISO en direct sur la partition LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Préparez le système de fichiers de persistance avec le fichier de configuration requis. La fonction de persistance ne fonctionnera pas sans ce fichier.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub pour le support UEFI
Installez grub2 pour la prise en charge du démarrage UEFI (cela nécessite le grub-efi-amd64-bin
paquet sur Debian). Nous forçons grub-install
à ne pas utiliser le démarrage sécurisé UEFI, ce qui ne fonctionne apparemment pas avec l' --removable
option.
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux pour la prise en charge du BIOS hérité
Installez syslinux gptmbr.bin
bootloader sur le lecteur (téléchargez syslinux ou installez le package syslinux-common
). Installez ensuite syslinux sur la partition live.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Correction d'Isolinux
Réutilisez la configuration isolinux de l'ISO en direct d'origine pour travailler avec syslinux.
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
Paramètres du noyau
Maintenant que nous avons copié les fichiers système en direct dans un système de fichiers en lecture-écriture, nous pouvons manipuler la configuration grub et syslinux.
Ajoutez le paramètre de noyau de persistance à menu.cfg
et grub.cfg
. Dans les deux fichiers, ajoutez le mot-clé persistence
à la fin de la première ligne respective avec boot=live
.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Définissez le paramètre de noyau de disposition de clavier. Dans les deux fichiers, ajoutez les mots clés à la fin de la première ligne respective avec boot=live
.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Grub splash
Correction de l'image de démarrage de grub (facultatif; nous l'avons déplacée dans un autre répertoire).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Démontage et nettoyage
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Pourquoi cela devrait fonctionner à la fois pour UEFI et le BIOS
Lors du démarrage en mode UEFI, le PC analysera les partitions FAT que nous avons définies dans la table de partition GPT. La première partition FAT porte le chargeur de démarrage grub UEFI, qui se trouve car il est situé dans le chemin spécifié par UEFI pour les lecteurs amovibles (le --removable
commutateur a grub-install
fait cela). Aucune entrée de démarrage UEFI n'est nécessaire pour que cela fonctionne, il suffit de faire en sorte que le PC essaie de démarrer à partir du lecteur USB. Ce grub est configuré pour le prendre à partir de là (charger le grub.cfg, afficher le menu, etc.).
Lors du démarrage en mode BIOS et de la sélection pour démarrer à partir du lecteur USB, le PC exécutera le gptmbr.bin
code du chargeur de démarrage que nous avons écrit sur le MBR protecteur du lecteur USB. Ce chargeur de démarrage recherche la partition GPT marquée avec l' legacy_boot
indicateur et syslinux chainload de cette partition. Syslinux prend alors le relais (charger menu.cfg, afficher le menu, etc.).
Persistance cryptée
Au lieu d'utiliser plain ext4 sur la partition de persistance, on pourrait d'abord crypter la partition de persistance avec LUKS (en utilisant cryptsetup
), puis formater celle-ci avec ext4 (en utilisant l'étiquette appropriée). Cependant, comme l' indique la documentation , le système en direct doit inclure le cryptsetup
package. Sinon, la partition chiffrée ne peut pas être déchiffrée par le système en direct. Cela signifie que l'on doit d'abord créer une image ISO personnalisée en direct. Cela sort cependant du cadre de cette réponse.
Histoire
L' --no-uefi-secure-boot
option ne faisait auparavant pas partie de l'appel à grub-install
. Le stick a bien fonctionné pour moi, mais cela s'est arrêté avec Debian Buster, même si le démarrage sécurisé est toujours désactivé sur ma machine.