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:

 

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