Le but de cet article est de réunir sur une clé usb différents live cd de maintenance que j'ai l'habitude d'utiliser sur mes différentes machines.
A l'origine j'utilisais des cd rw pour ces opérations, mais mes cd sont devenus vieillissant à force de réécriture pour basculer d'un live cd à un autre. Je suis finalement passer à un support sur clé USB de petite taille, mais n'en ayant pas beaucoup, je passais encore mon temps à formater la clé pour réinstaller un autre iso à l'aide d'usb-creator.
Finalement, je suis parvenu à réunir tout mes iso sur une seule clé usb et à les faire démarrer à l'aide de grub2.
Voilà donc la procédure pour y parvenir.
Dans ce tutoriel, je vais expliquer comment démarrer certains iso de maintenance que j'utilise à l'aide de grub2 sur un support usb.
D'autres iso peuvent être utilisés, mais certains nécessiteront sans doute de nombreux essais et du travail.
Les live cd utilisés ici sont ceux-ci:
- Clonezilla live
- Gparted live
- Kubuntu live
- Framakey Ubuntu-remix. Remplacé ensuite par Kubuntu live avec persistance des données.
- Windows live via BartPE. Remplacé par Windows live via UBCD4Win.
Préparation de la clé usb
Le but de cette clé étant de pouvoir intervenir sur tout type de machine, nous devrons la formater en FAT32. A l'exception de BartPE et UBCD4Win, les iso et grub2 devrait pouvoir fonctionner sur une partition ext2 (ext3 et ext4 sont à éviter en raison de la journalisation, dont les multiples écritures réduisent la durée de vie de la clé usb) si on lui réserve un usage uniquement sur des systèmes linux.
Dés lors que la clé usb est formatée, nous allons installer grub2 sur celle-ci. Pour cela, il faut commencer par identifier la clé et son point de montage.
mount -l | grep fat
Ensuite, nous pouvons procéder à l'installation de grub2.
sudo grub-install --root-directory=/media/POINT_DE_MONTAGE /dev/sdX
Pour configurer le menu de démarrage de grub2, nous allons créer un fichier grub.cfg dans boot/grub/ sur la clé usb et y inscrire ce code.
set USB_UUID=XXXX-XXXX #UUID de la clé USB. insmod png #Prise en charge des fichiers png insmod gfxterm #Permet de modifier l'interface graphique du menu de grub2 insmod vbe #Prise en charge de VESA BIOS Extension pour exploiter la carte graphique de façon basique insmod font #Permet la manipulation des polices d'écriture. insmod loopback #Permet le montage des images cd sur un point de montage insmod iso9660 #Permet la lecture des fichiers iso set default=0 #Entrée du menu par défaut set timeout=-1 #Désactive le compte à rebours pour le choix par défaut. Rendant ainsi nécessaire l'intervention de l'utilisateur search --no-floppy --fs-uuid --set=root ${USB_UUID} #Localise la clé USB if loadfont /boot/polices/unicode.pf2 ; then #Charge la police d'écriture set gfxmode=640x480 #Fixe la résolution d'écran pour respecter la taille de l'image de fond. if terminal_output gfxterm ; then true ; else terminal gfxterm fi fi if background_image /boot/splash/splash.png ; then #Charge l'image de fond. #Règles les couleurs du texte si l'image est chargée, set color_normal=black/black set color_highlight=green/white else #ou au contraire si le chargement de l'image a échoué. set color_normal=white/black set color_highlight=green/white fi # Liste des entrées du menu de grub menuentry "memtest86+"{ linux16 /boot/img/memtest86+.bin } menuentry "Reboot" { insmod reboot reboot } menuentry "Extinction de la machine" { insmod halt halt --no-apm }
Le début du fichier commence par l'UUID de la clé USB, afin de pouvoir y faire référence plus rapidement par la suite et le changer facilement en cas de formatage du support. L'UUID s'obtient facilement par la commande suivante.
blkid | grep fat
Le chargement des modules png, gfxterm, vbe et font sont optionnels, ils ne servent qu'à modifier l'interface du menu de grub2 afin qu'il soit plus esthétique.
Le cas échéant, il faudra créer un dossier boot/splash/ et y ajouter l'image de fond sous le nom splash.png. Il est préférable également de redimensionner l'image en 640*480 afin d'éviter une déformation de l'image lors de l'affichage.
L'ajout de la police d'écriture se fait via la commande suivante:
mkdir /media/POINT_DE_MONTAGE/boot/polices && cp /usr/share/grub/unicode.pf2 /media/POINT_DE_MONTAGE/boot/polices/unicode.pf2
Les couleurs de la police seront bien sûr à adapter à l'image choisie.
Pour terminer, nous allons ajouter memtest86+ de la même manière.
mkdir /media/POINT_DE_MONTAGE/boot/img && cp /boot/memtest86+.bin /media/POINT_DE_MONTAGE/boot/img/memtest86+.bin
Préparation des dossiers
Histoire d'éviter de se perdre rapidement au sein de notre clé, nous allons nous organiser.
Commençons par créer un dossier ISO, dans lequel nous rangerons les iso et leurs fichiers liés.
Ensuite, pour chaque iso, nous allons lui dédier un dossier à son nom.
Dans le cas présent, on ne créera que 3 dossiers, pour clonezilla, gparted et kubuntu uniquement.
Par exemple pour clonezilla:
mkdir -p /media/POINT_DE_MONTAGE/ISO/clonezilla
Dans le dossier de chaque iso, nous allons créer 2 fichiers textes vide.
cd /media/POINT_DE_MONTAGE/ISO/clonezilla/ && touch Grub_line version- && cd ../..
Les dossiers prêt, nous allons pouvoir passer aux choses sérieuses, les fichiers iso.
Copie des fichiers iso et extraction des commandes de grub2
Commençons par copier chaque fichier iso dans son dossier, mais uniquement pour clonezilla, gparted et kubuntu pour le moment.
Sur chaque fichier iso, on tronque le numéro de version et on colle celui-ci à la suite du nom du fichier version-.
Ceci permettra d'avoir des commandes dans grub2 ne tenant pas compte du numéro de version tout en gardant l'information de côté.
Ensuite, nous allons devoir explorer chaque iso afin d'en extraire les commandes de démarrage de grub2, ces lignes seront dupliquées dans le fichier Grub_line. Ainsi, lors de la mise à jour de l'iso, nous pourrons comparer simplement les anciennes commande de démarrage avec les nouvelles.
Pour clonezilla et gparted, les commandes de grub2 sont dans le fichier EFI/boot/grub.cfg.
Pour kubuntu, elles se trouvent dans boot/grub/loopback.cfg
A présent que nous avons les commandes de démarrage de chaque iso, nous allons pouvoir les intégrer à notre propre grub2.
Nous allons éditer notre fichier /media/POINT_DE_MONTAGE/boot/grub/grub.cfg et ajouter ces commandes après la ligne # Liste des entrées du menu de grub
Pour clonezilla, j'ai relevé dans la première commande de EFI/boot/grub.cfg
menuentry "Clonezilla live (Default settings, VGA 800x600)"{ search --set -f /live/vmlinuz linux /live/vmlinuz boot=live username=user config quiet noswap edd=on nomodeset noeject locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no vga=788 ip= nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=no initrd /live/initrd.img }
Nous allons dupliquer cette commande dans notre grub2 avant de la modifier comme suit:
La ligne "search --set -f /live/vmlinuz" ne nous est pas utile, on la supprime donc. Seules les lignes "linux" et "initrd" nous seront utile pour tout ces fichiers iso.
A la place de cette ligne nous allons ajouter les commandes suivantes:
set isofile="/ISO/clonezilla/clonezilla-live-i486.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/
Ces commandes vont permettre de monter l'iso afin de pouvoir l'exploiter directement sous cette forme.
La ligne linux devra être modifiée ainsi:
Ajout de (loop) devant /live/vmlinuz
Ajout de locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile à la fin de la ligne.
Soit:
linux (loop)/live/vmlinuz boot=live username=user config quiet noswap edd=on nomodeset noeject locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no vga=788 ip= nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=no locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile
La ligne initrd devra être modifiée ainsi:
Ajout de (loop) devant /live/initrd.img
Procédons de même pour gparted.
Je relève dans EFI/boot/grub.cfg
menuentry "GParted Live (Default settings)"{ search --set -f /live/vmlinuz linux /live/vmlinuz boot=live username=user config quiet noswap noeject ip= nosplash initrd /live/initrd.img }
"search --set -f /live/vmlinuz" sera remplacé par
set isofile="/ISO/gparted/gparted-live-i486.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/
Et la ligne "linux" est modifiée ainsi:
Ajout de (loop) devant /live/vmlinuz
Ajout de locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile à la fin de la ligne.
Soit:
linux (loop)/live/vmlinuz boot=live username=user config quiet noswap noeject ip= nosplash locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile
La ligne initrd devra être modifiée ainsi:
Ajout de (loop) devant /live/initrd.img
Enfin, pour kubuntu.
Je relève dans boot/grub/loopback.cfg
menuentry "Start Kubuntu" { linux /casper/vmlinuz file=/cdrom/preseed/kubuntu.seed boot=casper maybe-ubiquity iso-scan/filename=${iso_path} quiet splash -- initrd /casper/initrd.lz }
Nous ajoutons donc au début
set isofile="/ISO/kubuntu/kubuntu-desktop-i386.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/
Et la ligne "linux" est modifiée ainsi:
Ajout de (loop) devant /casper/vmlinuz
Remplacement de iso_path par isofile
Ajout de debian-installer/language=fr findiso=$isofile à la fin de la ligne.
Soit:
linux (loop)/casper/vmlinuz file=/cdrom/preseed/kubuntu.seed boot=casper maybe-ubiquity iso-scan/filename=${isofile} quiet splash -- debian-installer/language=fr findiso=$isofile
La ligne initrd devra être modifiée ainsi:
Ajout de (loop) devant /casper/initrd.img
Avec nos 3 iso ajoutés au menu de grub2, ce dernier ressemble à présent à ça:
set USB_UUID=XXXX-XXXX #UUID de la clé USB. insmod png #Prise en charge des fichiers png insmod gfxterm #Permet de modifier l'interface graphique du menu de grub2 insmod vbe #Prise en charge de VESA BIOS Extension pour exploiter la carte graphique de façon basique insmod font #Permet la manipulation des polices d'écriture. insmod loopback #Permet le montage des images cd sur un point de montage insmod iso9660 #Permet la lecture des fichiers iso set default=0 #Entrée du menu par défaut set timeout=-1 #Désactive le compte à rebours pour le choix par défaut. Rendant ainsi nécessaire l'intervention de l'utilisateur search --no-floppy --fs-uuid --set=root ${USB_UUID} #Localise la clé USB if loadfont /boot/polices/unicode.pf2 ; then #Charge la police d'écriture set gfxmode=640x480 #Fixe la résolution d'écran pour respecter la taille de l'image de fond. if terminal_output gfxterm ; then true ; else terminal gfxterm fi fi if background_image /boot/splash/splash.png ; then #Charge l'image de fond. #Règles les couleurs du texte si l'image est chargée, set color_normal=black/black set color_highlight=green/white else #ou au contraire si le chargement de l'image a échoué. set color_normal=white/black set color_highlight=green/white fi # Liste des entrées du menu de grub menuentry "Clonezilla live (Default settings, VGA 800x600)" { set isofile="/ISO/clonezilla/clonezilla-live-i486.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/ linux (loop)/live/vmlinuz boot=live username=user config quiet noswap edd=on nomodeset noeject locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no vga=788 ip= nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=no locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile initrd (loop)/live/initrd.img } menuentry "GParted Live (Default settings)" { set isofile="/ISO/gparted/gparted-live-i486.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/ linux (loop)/live/vmlinuz boot=live username=user config quiet noswap noeject ip= nosplash locales=fr_FR.UTF-8 keyboard-layouts=fr findiso=$isofile initrd (loop)/live/initrd.img } menuentry "Kubuntu live et setup" { set isofile="/ISO/kubuntu/kubuntu-desktop-i386.iso" loopback loop $isofile #Montage du fichier ISO dans (loop)/ linux (loop)/casper/vmlinuz file=/cdrom/preseed/kubuntu.seed boot=casper maybe-ubiquity iso-scan/filename=${isofile} quiet splash -- debian-installer/language=fr findiso=$isofile initrd (loop)/casper/initrd.lz } menuentry "memtest86+"{ linux16 /boot/img/memtest86+.bin } menuentry "Reboot" { insmod reboot reboot } menuentry "Extinction de la machine" { insmod halt halt --no-apm }
Les options "debian-installer/language=fr", "locales=fr_FR.UTF-8" et "keyboard-layouts=fr" permettent de sélectionner directement la langue et le clavier et nous épargne ainsi la demande récurrente de la langue au démarrage du système.
A présent, notre clé USB est capable de démarrer sur clonezilla, gparted ou kubuntu. De plus, il est aisé de mettre à jour ces logiciels en remplaçant le fichier iso et en le renommant.
1er cas particulier: Ajout d'un démarrage sur Framakey Ubuntu-remix 12.04 avec persistance des données
Le démarrage d'ubuntu sur la framakey est assez contraignant car il oblige à créer une seconde partition. De plus il est très difficile de mettre à jour le système. Enfin, je trouve cette version d'ubuntu particulièrement lente! Ce faisant, ce n'est pas une solution que j'ai gardé. Je l'ai remplacé par un live persistant directement sur un iso de kubuntu, beaucoup plus simple et rapide.
La Framakey Ubuntu-remix démarre sur syslinux, je n'ai pas trouvé d'autre solution pour booter sur syslinux que de le placer sur une partition dédiée. La clé usb doit donc être partitionnée pour laisser la place à la framakey.
On peut alors identifier l'emplacement de la nouvelle partition à l'aide de la commande "mount -l | grep fat" afin d'y installer le chargeur d'amorçage syslinux en parallèle à grub2.
sudo syslinux -sf /dev/sdXy
Nous pouvons à présent copier le contenu de la framakey dans la partition que nous venons de lui dédier.
Puis ajouter une nouvelle entrée à grub2 afin de pouvoir démarrer sur la framakey.
menuentry "Framakey Ubuntu-remix live persistant" { insmod chain insmod fat insmod msdospart search --no-floppy --fs-uuid --set=root ${FUR_UUID} #Localise la partition de la framakey chainloader +1 }
Les commandes de démarrage font référence à la variable 'FUR_UUID', cette dernière sera ajoutée au début du fichier grub.cfg, juste après "set USB_UUID=XXXX-XXXX #UUID de la clé USB.". Et nous lui renseignerons l'UUID, obtenu à l'aide de la commande blkid.
set FUR_UUID=XXXX-XXXX #UUID de la partition de la framakey.
Notre clé USB est maintenant capable de faire démarrer la Framakey Ubuntu-remix.
Le prochain article sera l'objet de l'ajout de BartPE et UBCD4win et du remplacement de la Framakey par un Kubuntu persistant à partir de l'iso déjà présent.
Comments
Leave a Reply