« Franciser une image ISO live » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
m (→‎Ou alors, utilisez un script. : modif "monFichTmp")
m (→‎Ou alors, utilisez un script. : formatage divers)
Ligne 235 : Ligne 235 :


fichImgEng=$1
fichImgEng=$1
fichImgFR=${fichImgEng%.*}-FR.${fichImgEng##*.}
fichImgFr="${fichImgEng%.*}-FR.${fichImgEng##*.}"


fichRech="live.cfg"
fichRech="live.cfg"
chOrigin="quiet splash"
chOrigin="quiet splash"
chAjout="lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes"
chAjout="lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes"
monFichTmp=/tmp/tmpAeffacer`date +%s`.dat
monFichTmp="/tmp/tmpAeffacer`date +%s`.dat"
chRempl="$chOrigin $chAjout"
chRempl="$chOrigin $chAjout"


blkSize=`  isoinfo -d    -i $fichImgEng | grep "block size" | awk '{print $5}'`
blkSize=`  isoinfo -d    -i "${fichImgEng}" | grep "block size" | awk '{print $5}'`
valOffset=`isoinfo -l -R -i $fichImgEng | grep $fichRech   | awk '{print $10}'`
valOffset=`isoinfo -l -R -i "${fichImgEng}" | grep "${fichRech}" | awk '{print $10}'`


dd bs=$blkSize count=1 skip=$valOffset if=$fichImgEng 2>/dev/null                      |  \
sed "s/$chOrigin/$chRempl/"                          > $monFichTmp                    &&  \
dd bs=$blkSize count=1 seek=$valOffset if=$monFichTmp of=$fichImgEng conv=notrunc,sync &&  \
mv $fichImgEng $fichImgFr                                                              &&  \
rm $monFichTmp


printf "\n\nVoilà voilà! \"$fichImgFR\" est la version francisée.\n\n"
dd bs=$blkSize count=1 skip=$valOffset if="${fichImgEng}" 2>/dev/null                                      |  \
sed "s/$chOrigin/$chRempl/"                          > "${monFichTmp}"                                    &&  \
dd bs=$blkSize count=1 seek=$valOffset if="${monFichTmp}" of="${fichImgEng}" conv=notrunc,sync 2>/dev/null &&  \
mv "${fichImgEng}" "${fichImgFr}"                                                                          &&  \
rm ${monFichTmp}
 
printf "\nVoilà voilà! \"${fichImgFr}\" est la version francisée.\n\n"
</code>
</code>

Version du 10 juillet 2014 à 19:39

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'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
dont 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 faudra donc modifier la ligne :

	append boot=live config quiet splash

de façon à 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 faudra 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.

Toutefois, 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

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


hexcurse - aide
La touche "F1" permet d'obtenir une fenêtre d'aide.

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).

Touche Description
"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-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 faire la recherche sur les caractères Ascii.

En bas, à gauche -> Enter ascii value (): live-amd64
Après avoir appuyé sur la touche "F5", en bas à gauche de l'écran s'affiche une invite me proposant d'entrer la chaîne de caractères à rechercher.
Je réponds alors en entrant la chaîne de caractères : live-amd64 et je valide ma saisie avec la touche habituelle : "Entrée".


hexcurse - "live-amd64" a été trouvé !
La recherche prend un petit peu de temps (35 secondes) mais il s'agit quand même d'un très gros fichier, puis le texte recherché est enfin trouvé.
Mais 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".

Une fois le curseur bien positionné, en haut à gauche de la fenêtre, on pourra 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 parfaitement pour extraire et replacer une partie du fichier 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 recopierai que les 512 premiers caractères de ce fichier dans l'image ISO.

Recopier 512 octets dans le fichier image ISO

Avant tout, je vais sauvegarder 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 -m 2G -cpu host -boot d -cdrom ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso 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 bien fonctionnelle.

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

Il ne reste plus qu'à supprimer les fichiers devenus inutiles : michel@debG53SW:~$ rm fichTemp.txt ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop-original.iso

Ou alors, utilisez un script.

  1. !/bin/sh
  1. -------------------------------------------------------------------------------------------------
  2. NOM DU SCRIPT: isoLive2fr.sh
  3. NÉCESSITE: "isoinfo" du paquetage "genisoimage"
  4. "dd" du paquetage "coreutils"
  5. BUT: Ajouter les paramètres de boot à une image ISO Live debian
  6. de façon à ce qu'elle démarre directement en Français.
  7. DATE: 10/07/2014
  8. -------------------------------------------------------------------------------------------------
  9. NOTES:
  10. -------------------------------------------------------------------------------------------------
  11. Ce n'est qu'une ébauche de script inspiré par ceux qu'a posté fran.b dans le fil de discussion :
  12. http://www.debian-fr.org/franciser-l-iso-debian-7-5-live-nonfree-moins-de-2-minutes-t48948.html
  13. Ça fonctionne, mais je reviendrai plus tard pour rajouter les contrôles d'erreur, et plus...
  14. -------------------------------------------------------------------------------------------------

test "$1" ||

 {
   printf "Donnez un chemin d'image \"ISO Live\" debian en paramètre.\n"; 
   exit 1;
 }

fichImgEng=$1 fichImgFr="${fichImgEng%.*}-FR.${fichImgEng##*.}"

fichRech="live.cfg" chOrigin="quiet splash" chAjout="lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes" monFichTmp="/tmp/tmpAeffacer`date +%s`.dat" chRempl="$chOrigin $chAjout"

blkSize=` isoinfo -d -i "${fichImgEng}" | grep "block size" | awk '{print $5}'` valOffset=`isoinfo -l -R -i "${fichImgEng}" | grep "${fichRech}" | awk '{print $10}'`


dd bs=$blkSize count=1 skip=$valOffset if="${fichImgEng}" 2>/dev/null | \ sed "s/$chOrigin/$chRempl/" > "${monFichTmp}" && \ dd bs=$blkSize count=1 seek=$valOffset if="${monFichTmp}" of="${fichImgEng}" conv=notrunc,sync 2>/dev/null && \ mv "${fichImgEng}" "${fichImgFr}" && \ rm ${monFichTmp}

printf "\nVoilà voilà! \"${fichImgFr}\" est la version francisée.\n\n"