Franciser une image ISO live

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Introduction

J'en avais vraiment marre de rajouter manuellement (avec le clavier en mode qwerty) la longue ligne des options de boot suivante qui permet de démarrer ma debian live directement en français.

 lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe/Paris utc=yes

Et puis, comme je suis un très très gros fainéant pour me lancer dans la création d'une nouvelle image ISO à chaque nouvelle version, voilà comment je fais depuis un petit moment.

Description

J'ai décidé d'ajouter ces options de boot directement dans l'image ISO téléchargée, juste avant de la graver ou copier sur une clef USB.

Comme le menu affiché au moment du boot dépend du contenu du fichier "/isolinux/live.cfg" de l'image ISO voici un extrait du contenu (les deux premiers "label"s):

label live-amd64
	menu label ^Live (amd64)
	menu default
	linux /live/vmlinuz
	initrd /live/initrd.img
	append boot=live config quiet splash

label live-amd64-failsafe
	menu label ^Live (amd64 failsafe)
	linux /live/vmlinuz
	initrd

Il me faudrait donc modifier la ligne :

	append boot=live config quiet splash

de façons à ce qu'elle devienne :

	append boot=live config quiet splash lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe/Paris utc=yes

Mais pour cela, il me faudrait d'abord connaître exactement la position de ce texte dans le fichier image ISO téléchargé.

Recherche avec l'éditeur hexcurse :

hexcurse est un éditeur hexadécimal qui pourrait permettre de modifier directement le fichier image ISO,

mais comme il faut insérer ces paramètres dans le texte et donc déplacer la partie de texte qui suivait la ligne des paramètres, etc…,

ça fait beaucoup trop de manipulations à faire pour moi, et puis, comme je vous l'ai déjà dit plus haut : je suis vraiment très très fainéant.

Mais cet éditeur permet de rechercher la position d'une chaîne de caractère dans un fichier, et ça, ça m'intéresse beaucoup, alors, j'entre la commande suivante :

michel@debG53SW:~$ hexcurse ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso

L'écran affiché présente alors le contenu du fichier image ISO en Hexa (à gauche) et ASCII (à droite) :

hexcurse

NOTE: Pour utiliser les touches de raccourcis de hexcurse, vous devrez peut-être désactiver les touches de raccourcis de la fenêtre de terminal virtuel (voir ce post).

La touche F1 permet d'obtenir une fenêtre d'aide:

hexcurse - aide

On peut y voir un petit descriptif des fonctions associées aux touches raccourcis suivantes :

  • "F5" permet de faire une recherche.
  • "F8" quitte "hexcurse".
  • "TAB" est une touche bascule qui permet de positionner le curseur dans chaque partie de l'écran affiché (Hexa ou Ascii).
  • "CTRL-A" est une touche bascule qui permet de basculer entre l'affichage des adresses en valeurs Hexa ou Décimal.
  • "CTRL-z" anulle les modifications effectuées.
  • "Esc" anulle la demande de "sauvegarde", "ouverture", "aller à" , ou "recherche" en cours.


Maintenant que je sais comment faire, je ferme la fenêtre d'aide en utilisant la touche "Esc", et je positionne le curseur dans la fenêtre Ascii avec la touche "Tab" afin de lancer la recherche sur les caractères Ascii.

Je vais lui demander de faire une recherche, et, après avoir appuyé sur la touche "F5", je vois en bas à droite une invite pour entrer la chaîne de caractères à rechercher.

Je réponds alors en entrant la chaîne de caractères à rechercher : live-amd64 suivi de la validation de ma saisie par la touche habituelle Entrée.

La recherche prend un peu de temps (35 secondes, mais il s'agit quand même d'un très gros fichier), mais elle aboutit en me présentant le texte recherché :

hexcurse - "live-amd64" a été trouvé !

Il me faut positionner le curseur au début de la ligne, c'est à dire juste après le premier octet "null" précédent, sur le premier "l" de "label".

En haut à gauche de la fenêtre, on peut lire le décalage depuis le début du fichier : 33807000, mais attention, il s'agit d'une valeur hexadécimale.

Pour convertir cette valeur hexadécimale en valeur décimale, j'utilise la fonction printf : michel@debG53SW:~$ printf "%d\n" 0x33807000 864055296

Extraire avec dd le texte à modifier

dd permet de lire et écrire de façon "brute", donc dans un fichier de format quelconque,

il conviendra très bien pour extraire et replacer la partie de l'image ISO à modifier. michel@debG53SW:~$ dd bs=1 count=512 skip=864055296 if=~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso of=fichTemp.txt 512+0 enregistrements lus 512+0 enregistrements écrits 512 octets (512 B) copiés, 0,00403728 s, 127 kB/s michel@debG53SW:~$ Je visualise avec hexdump les 512 octets récupérés : michel@debG53SW:~$ hexdump -Cv fichTemp.txt 00000000 6c 61 62 65 6c 20 6c 69 76 65 2d 61 6d 64 36 34 |label live-amd64| 00000010 0a 09 6d 65 6e 75 20 6c 61 62 65 6c 20 5e 4c 69 |..menu label ^Li| 00000020 76 65 20 28 61 6d 64 36 34 29 0a 09 6d 65 6e 75 |ve (amd64)..menu| 00000030 20 64 65 66 61 75 6c 74 0a 09 6c 69 6e 75 78 20 | default..linux | 00000040 2f 6c 69 76 65 2f 76 6d 6c 69 6e 75 7a 0a 09 69 |/live/vmlinuz..i| 00000050 6e 69 74 72 64 20 2f 6c 69 76 65 2f 69 6e 69 74 |nitrd /live/init| 00000060 72 64 2e 69 6d 67 0a 09 61 70 70 65 6e 64 20 62 |rd.img..append b| 00000070 6f 6f 74 3d 6c 69 76 65 20 63 6f 6e 66 69 67 20 |oot=live config | 00000080 71 75 69 65 74 20 73 70 6c 61 73 68 0a 0a 6c 61 |quiet splash..la| 00000090 62 65 6c 20 6c 69 76 65 2d 61 6d 64 36 34 2d 66 |bel live-amd64-f| 000000a0 61 69 6c 73 61 66 65 0a 09 6d 65 6e 75 20 6c 61 |ailsafe..menu la| 000000b0 62 65 6c 20 5e 4c 69 76 65 20 28 61 6d 64 36 34 |bel ^Live (amd64| 000000c0 20 66 61 69 6c 73 61 66 65 29 0a 09 6c 69 6e 75 | failsafe)..linu| 000000d0 78 20 2f 6c 69 76 65 2f 76 6d 6c 69 6e 75 7a 0a |x /live/vmlinuz.| 000000e0 09 69 6e 69 74 72 64 20 2f 6c 69 76 65 2f 69 6e |.initrd /live/in| 000000f0 69 74 72 64 2e 69 6d 67 0a 09 61 70 70 65 6e 64 |itrd.img..append| 00000100 20 62 6f 6f 74 3d 6c 69 76 65 20 63 6f 6e 66 69 | boot=live confi| 00000110 67 20 6d 65 6d 74 65 73 74 20 6e 6f 61 70 69 63 |g memtest noapic| 00000120 20 6e 6f 61 70 6d 20 6e 6f 64 6d 61 20 6e 6f 6d | noapm nodma nom| 00000130 63 65 20 6e 6f 6c 61 70 69 63 20 6e 6f 6d 6f 64 |ce nolapic nomod| 00000140 65 73 65 74 20 6e 6f 73 6d 70 20 6e 6f 73 70 6c |eset nosmp nospl| 00000150 61 73 68 20 76 67 61 3d 6e 6f 72 6d 61 6c 0a 00 |ash vga=normal..| 00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000200 michel@debG53SW:~$ Comme on peut le constater, les 161 derniers octets sont à 0, il y aura largement assez de place pour insérer les options.

Ajouter les options avec sed

Je rajoute les options à la suite de "quiet splash" en utilisant sed : michel@debG53SW:~$ sed -i 's/quiet splash/quiet splash lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes/' fichTemp.txt Je vérifie que les options ont bien été ajoutées : michel@debG53SW:~$ cat fichTemp.txt label live-amd64 menu label ^Live (amd64) menu default linux /live/vmlinuz initrd /live/initrd.img append boot=live config quiet splash lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe/Paris utc=yes

label live-amd64-failsafe menu label ^Live (amd64 failsafe) linux /live/vmlinuz initrd /live/initrd.img append boot=live config memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal michel@debG53SW:~$ Bien sûr, la taille du fichier est passée de 512 à 620 octets : michel@debG53SW:~$ ls -l fichTemp.txt -rw-r--r-- 1 michel michel 620 juil. 7 11:50 fichTemp.txt michel@debG53SW:~$ Mais je ne vais recopier que les 512 premiers caractères de ce fichier dans l'image ISO.

Modifier le fichier image ISO

Avant, je sauvegarde le fichier original en en faisant une copie : michel@debG53SW:~$ cp ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop-original.iso Maintenant, je replace les 512 premiers octets du fichier fichTemp.txt dans le fichier image ISO avec dd : michel@debG53SW:~$ dd conv=notrunc bs=1 count=512 seek=864055296 if=fichTemp.txt of=~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso 512+0 enregistrements lus 512+0 enregistrements écrits 512 octets (512 B) copiés, 0,00166931 s, 307 kB/s michel@debG53SW:~$

Tester l'image ISO avec kvm

Je teste le démarrage de l'image ISO avec kvm (ou VirtualBox) : michel@debG53SW:~$ kvm -sdl -usbdevice mouse -m 2G -cpu host -cdrom ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso -boot d Un appui sur la touche "Tab" me permet de constater que les options ajoutées sont bien là, et le lancement de l'image ISO "debian live" me permet de constater que la francisation de l'interface graphique de Xfce est fonctionnelle.

Je peux donc utiliser ce fichier image ISO pour préparer mon périphérique de boot (DVD ou USB).