Franciser fichier ISO debian Live (en moins d'1 seconde)

Si vous êtes pressé, rendez-vous directement ici:

J’en avais vraiment marre de rajouter manuellement (avec le clavier en mode “qwerty”) les options de boot pour “franciser” ma “live nonfree”.

Et 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à ce que je fais depuis un petit moment :

Pour “Franciser” en moins de 2 minutes le fichier image ISO debian 7.5 live nonfree :
il suffit d’ajouter les options

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

à la suite des options du boot.

NOTE :
Si besoin, vous pourrez aussi en profiter pour ajouter dans cette liste d’options l’option persistence,
mais pour ça, le clavier en mode “qwerty” ne va pas vous causer de problèmes.
Bien sûr, vous pouvez adapter la configuration pour le pays et autres dispositions de clavier de votre choix.


(Sur cette image ISO, l’offset 0x36F82800 => 922232832, utilisé pour skip à été “cherché/trouvé” avec le programme hexcurse)

michel@debG53SW:~$ dd bs=1 skip=922232832 count=512 if=debian-live-7.5-amd64-xfce-desktop+nonfree.iso of=fichTemp.txt
512+0 enregistrements lus
512+0 enregistrements écrits
512 octets (512 B) copiés, 0,00298631 s, 171 kB/s
michel@debG53SW:~$ 

Visualisation du contenu du fichier fichTemp.txt récupéré avec la commande ci-dessus :

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 nouveau.modeset=0 radeon.modeset=0

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:~$ 

Modifier le fichier fichTemp.txt en ajoutant les options “francisantes” à la suite des options du boot :

lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe/Paris utc=yes
michel@debG53SW:~$ sed -i 's/radeon.modeset=0/radeon.modeset=0 lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes/' fichTemp.txt
michel@debG53SW:~$ 

Vérifier le résultat de la modification :

 
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 nouveau.modeset=0 radeon.modeset=0 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:~$ 

Modifier le nom du fichier image ISO qui va être modifié :

michel@debG53SW:~$ mv debian-live-7.5-amd64-xfce-desktop+nonfree.iso debian-live-FR-7.5-amd64-xfce-desktop+nonfree.iso
michel@debG53SW:~$ 

Inscrire la modification dans le fichier image ISO :

michel@debG53SW:~$ dd conv=notrunc bs=1 count=512 seek=922232832 if=fichTemp.txt of=debian-live-FR-7.5-amd64-xfce-desktop+nonfree.iso
512+0 enregistrements lus
512+0 enregistrements écrits
512 octets (512 B) copiés, 0,00350515 s, 146 kB/s
michel@debG53SW:~$ 

Extraire la zone modifiée depuis le fichier image ISO vers un autre fichier (verif.txt):

michel@debG53SW:~$ dd bs=1 count=512 skip=922232832 if=debian-live-FR-7.5-amd64-xfce-desktop+nonfree.iso of=verif.txt
512+0 enregistrements lus
512+0 enregistrements écrits
512 octets (512 B) copiés, 0,00422957 s, 121 kB/s
michel@debG53SW:~$ 

Vérifier le résultat de la modification :

michel@debG53SW:~$ cat verif.txt 
label live-amd64
	menu label ^Live (amd64)
	menu default
	linux /live/vmlinuz
	initrd /live/initrd.img
	append boot=live config quiet splash nouveau.modeset=0 radeon.modeset=0 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:~$ 

Tout va bien, la ligne d’options append boot= a bien été modifiée.
on peut maintenant graver un CD ou copier (avec dd) le fichier ISO sur une clef USB.


Voilà voilà: l’image ISO ainsi modifiée va maintenant permettre de lancer debian Live 7.5 non-free en français sans rien avoir à rajouter sur la ligne de boot.

NOTE:
Le fichier fichTemp.txt récupéré était constitué de 386 octets de caractères suivis d’octets nulls (0x00), pour un total de 512 octets.
La modification a rajouté 108 octets de caractères au fichier original, mais on n’a pas recopié les 108 octets (à 0x00) de la fin du fichier modifié, étant donné que seuls les premiers 512 octets ont étés recopiés

On aurait tout aussi bien pu utiliser 2048 octets (taille de bloc utilisé pour cette ISO9660),
et même en profiter pour rajouter un ou plusieurs autres choix dans le menu de boot.

==================
D’autre part, dans linux kernel boot parameters (redsymbol.net)

Donc, s’il s’agissait d’une installation utilisant la même version que celle du système que j’utilise (wheezy 7.5),

michel@debG53SW:~$ uname -a
Linux debG53SW 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3+deb7u2 x86_64 GNU/Linux
michel@debG53SW:~$ fgrep COMMAND_LINE_SIZE /usr/include/asm-generic/setup.h
#define COMMAND_LINE_SIZE	512
michel@debG53SW:~$ 

cette ligne de paramètres de boot serait donc limitée à 512 octets:

Comment as-tu déterminer le « seek=922232832 » ?

Tes manips d’écriture sur image .iso m’intéressent, parce que je souhaiterais tenter la manip’ suivante pour booter un .iso Archlinux sur mon eeePC (évoqué sur ce fil : forums.archlinux.fr/topic15433.html)

[quote]You can disable to check entirely by switching out which file the EFI system boots to. There are three .efi files in the ISO image. By overwriting the one your system is using with the simpler non Secure Boot enabled one, you can sidestep the whole problem.

Mount your USB boot media (or unpack the ISO to later repack and burn if you must use a CD)
Move to the directory where it is mounted and issue the following copy command:
cp EFI/boot/loader.efi to EFI/boot/bootx64.efi
Boot that sucker up and eat cake.[/quote]

source – superuser.com/questions/615142/u … ity-policy

J’ai visualisé le fichier image ISO avec l’éditeur Hexa [mono]hexcurse[/mono] :

michel@debG53SW:~$ hexcurse debian-live-7.5-amd64-xfce-desktop+nonfree.iso

[mono]F1[/mono] (Voir ce post) m’a permis d’afficher l’aide, et d’y trouver que [mono]F5[/mono] correspondait à [mono]Find[/mono].

J’ai donc quitté l’affichage de l’aide avec [mono]Esc[/mono],
et j’ai positionné le curseur clignotant (avec [mono]Tab[/mono]) sur la partie [mono]ASCII[/mono] (Texte) à droite de la fenêtre,

J’ai alors utilisé la touche [mono]F5[/mono] pour entrer : [mono]live-amd64[/mono].

Une fois cette chaîne de caractère trouvée dans le fichier, il m’a suffit de positionner mon curseur 6 caractères avant,
et en haut à gauche de la fenêtre d’affichage [mono]Hexa[/mono], j’ai pu constater que l’offset était de [mono]36F82800[/mono].

J’ai alors utilisé la touche [mono]F8[/mono] pour quitter [mono]hexcurse[/mono] sans sauvegarder de modifications.

Puis, j’ai convertis cette valeur Hexadécimale en valeur décimale :

michel@debG53SW:~$ printf "%d\n" 0x36f82800
922232832
michel@debG53SW:~$ 

EDIT: Mais si j’avais pris le temps de lire un peu mieux la page d’aide, je me serai économisé cette peine et j’aurai directement eu la conversion décimale de l’offset en tapant [mono]Ctrl-a[/mono], bien que sur cette version (1.55) de [mono]hexcurse[/mono], il y a un petit problème avec cette fonctionnalité…

Pour la “persistence” :

Il suffit qu’une partition dont le label est [mono]persistence[/mono] soit accessible au système [mono]live[/mono] lors de son démarrage,
et que cette partition ait, à sa racine, un fichier [mono]persistence.conf[/mono]

Pour mes tests, j’ai simplement mis dans ce fichier une seule ligne de texte : [mono]/ union[/mono]
ce qui m’a permis de faire une mise à jour de la version [mono]live[/mono] (1,2Gio d’espace occupé suite à la mise à jour…).

Mais vous pouvez “fignoler” votre mode de [mono]persistence[/mono] en fonction de vos besoins.

===================
Il me reste maintenant à tester aussi l’ajout du fichier de paquetage [mono]non-free[/mono] (sur une autre partition, peut-être même la partition [mono]persistence[/mono]…) indispensable pour faire fonctionner la carte réseau de mon PC G53SW,
et à démarrer avec la [mono]debian live officielle[/mono] (pas [mono]nonfree[/mono]).

Salut,

Dommage de laisser s’enfouir dans la jungle de Trucs & Astuces alors que le wiki est là :confused:

Ce script

[code]#!/bin/sh
FICHIER=$1
FICHIERMAJ=echo $FICHIER | tr '[:upper:]' '[:lower:]'
NOM=basename $FICHIER
ISO=$2
DEB=0
PAS=65536
FIN=expr $PAS - 1
FINP=$DEB
MAXDL=1048576
#4194304
ONCHERCHE=true
VITMIN=1024
isoinfo -l -R -i $ISO | tr ‘[:upper:]’ ‘[:lower:]’ | grep -v “^ *$” > /tmp/listing
while read ligne ; do
if echo $ligne | grep -q “^directory” ; then
DIR=echo $ligne | awk '{print $4}'
elif echo $ligne | grep -q “^-” ; then
ligne=echo $ligne | sed -e '1,$s/\[//g'| sed -e '1,$s/\]//g'
FIC=echo $ligne | awk '{print $11}' | sed -e 's/;1 *$//' | sed -e 's/\.$//'

echo $DIR$FIC $FIC $FICHIERMAJ

        if ( [ ! -z $FIC ] && ([ $DIR$FIC = $FICHIERMAJ ] || [ $FIC = $FICHIERMAJ ])) ; then
            ONCHERCHE=false
            OFFSET=`echo $ligne  | awk '{print $9}'`
            DEBUT=`expr $OFFSET \* 2048`
            LONGUEUR=`echo $ligne | awk '{print $5}'`

echo $OFFSET $DEBUT $LONGUEUR

            tail -c +$(expr $DEBUT + 1) $ISO | head -c +$LONGUEUR > $NOM
            exit 0
        fi 
    fi
done < /tmp/listing

[/code]permet de trouver un fichier de nom donné sur une image ISO.
J’en avais fait un script permettant de charger un fichier donné à partir d’une image ISO en téléchargement sans tout télécharger:

[code]#!/bin/sh
FICHIER=$1
URL=$2
FICHIERMAJ=echo $FICHIER | tr '[:upper:]' '[:lower:]'
NOM=basename $FICHIER
ISO=/tmp/getfic-date +%s.iso
DEB=0
PAS=65536
FIN=expr $PAS - 1
FINP=$DEB
MAXDL=1048576
#4194304
ONCHERCHE=true
VITMIN=1024
while ($ONCHERCHE) ; do
echo curl -L -r $FINP-$FIN $URL
curl -L -r $FINP-$FIN $URL >> $ISO
isoinfo -l -R -i $ISO | tr ‘[:upper:]’ ‘[:lower:]’ | grep -v “^ *$” > /tmp/listing
while read ligne ; do
if echo $ligne | grep -q “^directory” ; then
DIR=echo $ligne | awk '{print $4}'
elif echo $ligne | grep -q “^-” ; then
ligne=echo $ligne | sed -e '1,$s/\[//g'| sed -e '1,$s/\]//g'
FIC=echo $ligne | awk '{print $11}' | sed -e 's/;1 *$//' | sed -e 's/\.$//'

echo $DIR$FIC $FIC $FICHIERMAJ

        if ( [ ! -z $FIC ] && ([ $DIR$FIC = $FICHIERMAJ ] || [ $FIC = $FICHIERMAJ ])) ; then
            ONCHERCHE=false
            OFFSET=`echo $ligne  | awk '{print $9}'`
            DEBUT=`expr $OFFSET \* 2048`
            LONGUEUR=`echo $ligne | awk '{print $5}'`

echo $OFFSET $DEBUT $LONGUEUR

            echo -n > $NOM
            while [ $LONGUEUR -ge $MAXDL ] ; do
            BOUT=`expr $DEBUT + $MAXDL - 1`
            curl -L -y 10 --speed-limit $VITMIN -r $DEBUT-$BOUT $URL > t_$NOM
           LONG=`ls -l t_$NOM | awk '{print $5}'` 
            if [ $LONG -eq $MAXDL ] ; then
            cat t_$NOM >> $NOM
            rm t_$NOM
            DEBUT=`expr $BOUT + 1`
            LONGUEUR=`expr $LONGUEUR - $MAXDL`
            else
            rm t_$NOM
            fi
            done
            BOUT=`expr $DEBUT + $LONGUEUR - 1`
            while [ $LONGUEUR -gt 0 ] ; do
                    curl -L -y 10 --speed-limit $VITMIN  -r $DEBUT-$BOUT $URL > t_$NOM
                    LONG=`ls -l t_$NOM | awk '{print $5}'` 
                    if [ $LONG -eq $LONGUEUR ] ; then
                            cat t_$NOM >> $NOM
                            rm t_$NOM
                            LONGUEUR=0
                    else
                            rm t_$NOM
                    fi
            done
            exit 0
        fi 
    fi
done < /tmp/listing
    if ($ONCHERCHE) ; then
        FINP=`expr $FIN + 1`
        FIN=`expr $FIN + $PAS`
        PAS=`expr $PAS + $PAS`
    fi

done
[/code]

Pour des modifications d’image .iso plus profondes un tutoriel détaillé :
linux.jpvweb.com/mesrecetteslinu … ges_iso_cd
(basé sur mount et mkisofs)

Voilà voila : Franciser une image ISO live

@fran.b

Sûr que ma méthode de recherche avec hexcurse est un pis aller,
et je ne connaissais pas assez bien les commandes utilitaires des images ISO.
En fait, j’ai laissé tombé mes recherches sur le format ISO9660 quand j’ai vu arriver joliet.
Alors depuis…

Finalement, je crois bien que mon “tuto” va passer à la poubelle :slight_smile: :

#!/bin/bash

fichImgEng="debian-live-7.5.0-amd64-xfce-desktop.iso"
fichImgFR="debian-live-FR-7.5.0-amd64-xfce-desktop.iso"
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"

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 * '$blkSize'}'`

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

Encore Merci pour la source d’inspiration :slight_smile:

Salut,

Nous pouvons compter sur toi pour mettre à jour le wiki :038

Ça c’est sûr que je vais mettre à jour le wiki.

Mais je vais essayer d’améliorer ce brouillon de semblant de “script” d’abord,
en m’inspirant de ce que fran.b a transmis :
Un “.sh” avec un “here sting” utilisant le répertoire “/tmp” et les paramètres de la ligne de commande, au moins.
Enfin… je vais essayer de faire au mieux.

EDIT: Avec des TouDou en plus

#!/bin/sh
#
#============================================
# En commentaire dans le script: les "TouDou"
#============================================
# Ici je mettrai un pavé descriptif.

# Modifier les noms de variable de ce script,
#   afin qu'ils soient en anglais.

# La ligne de commande sera vérifiée, et parsée pour extraire les paramètres,
#   pour au moins l'existence du nom du fichier ISO-Live en paramètre.
fichImgEng=$1

# Avant d'aller plus loin dans l'exécution du script,
#  il faudra vérifier le système hôte (version et distro Linux) et la version de "isoinfo" et "dd" (merci à [b]bobo38[/b])
#  il faudra vérifier aussi si le contenu du fichier est bien une ISO-Live (avec "isoinfo").
#
# En projet : 
# - utiliser "printf" à la place d'"echo", ou mieux: pas de message, juste le code d'erreur correct.
# - modifier "exit" pour qu'il envoie un code d'erreur correspondant à "fichier non trouvé"
isoinfo -d -i "$1" | grep "Application id: DEBIAN LIVE" || \
  {
    printf "\n\"${1}\" n'est PAS un fichier d'image ISO \"Debian Live\"...\n\n"
    exit 1
  }

# FR est proposé pour l'instant, on verra en fnct des futurs fichiers de config à créer.
langSortie="FR"

# Création du nom pour renommer le fichier image ISO live :
# (je reverrai ça pour placer le "FR" juste après le "-live-")
fichImgFR=${fichImgEng%.*}-${langSortie}.${fichImgEng##*.}

# Récup de la somme MD5 avant modif pour vérif depuis le site "debian" (ou autre).
# Script externe à faire pour tout ce qui concerne MD5....

# Les variables suivantes devront êtres initialisées en fonction du contenu de l'ISO-Live.
fichRech="live.cfg"
chOrigin="quiet splash"

# Cette ligne sera composée par un menu avec sélection de choix d'options possibles
#   qui seront extraites d'un fichier séparé en fnct des différentes versions,
#   et/ou des variables locales et config clavier du système en cours.
#
# Je créerai deux fichiers de plus pour les configs et l'historique
#     qui seront associés à ce script.
# Puis les fonctions interactives de création de la chaîne d'options de boot.
# Voir : http://redsymbol.net/linux-kernel-boot-parameters/3.2/
#
chAjout="lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-model=pc105 timezone=Europe\/Paris utc=yes"
chRempl="$chOrigin $chAjout"

# Là je mettrai la fonction "help"
#  qui affichera l'écran d'aide.
# (Prévoir création/utilisation de fichier ".mo" ".po" par "gettext" (si possible...))

# Ces deux opérations devront êtres contrôlées (sortie code d'erreur si pb).
#
# j'ai modifié le calul pour "valOffset" qui sera en unité de "blkSize"
#   ce qui permet à "dd" de lire par bloc. (donc, un seul block à lire)

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

# Là, je changerai de méthode : la copie de l'ISO entière ne sera pas faite.
#   Je modifierai le bloc original (live.cfg), puis le renommerai le fichier image ISO en fnct du langage.
#   le bloc sera transféré dans un "here string" pour traitement par "sed",
#   puis, si demandé, recopie et sauvegarde éventuelle du bloc original dans l'historique.
# De plus, cette suite d'opérations devra être contrôlée (sortie d'un code d'erreur si pb).
cp $fichImgEng $fichImgFR && \
dd bs=$blkSize count=1 skip=$valOffset if=$fichImgEng 2>/dev/null | \
sed "s/$chOrigin/$chRempl/" | \
dd bs=$blkSize count=1 seek=$valOffset of=$fichImgFR conv=notrunc,sync

# Re-calcul et sauvegarde dans l'historique 
#   de la nouvelle somme MD5 pour l'image ISO-Live modifiée,
#   pour contrôle après gravure ou autre.

# La récup, depuis le site officiel de debian, de la somme MD5 de l'ISO originale
#  et le calcul de la somme MD5 du fichier modifié,
#  seront fait par un autre script externe (à créer)

Le petit dernier (presque finit, mais qui fonctionne tout de même).
Du coup, j’ai changé “minute” par “seconde” dans le titre de ce fil

#!/bin/sh -
#====================================================================================================
#        NOM: isoLive2fr.sh
#
#    SYNTAXE: isoLive2fr <fichier image ISO Live>
#
#        BUT: Ajouter les paramètres de boot
#               dans un fichier image ISO Live debian,
#               de façon à ce qu'elle démarre en Français.
#
#  NÉCESSITE: Commande     Version      Paquetage
#             --------     -------      -----------
#             isoinfo      1.1.11       genisoimage
#             GNU dd       8.0.13       coreutils
#             GNU awk      4.0.1        gawk
#             GNU grep     2.12         grep
#             GNU sed      4.2.1        sed
#
#  TESTÉ SUR: debian wheezy 7.5.0 (Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux)
#
#     AUTEUR: MicP (debian-fr)
#
#       DATE: 14/07/2014
#    VERSION: 0.03
#
#----------------------------------------------------------------------------------------------------
# NOTES: Ce n'est qu'une ébauche de script inspiré par ceux qui ont été postés par fran.b
#         dans le fil de discussion suivant :
# http://www.debian-fr.org/franciser-l-iso-debian-7-5-live-nonfree-moins-de-2-minutes-t48948.html
#
# Ça fonctionne, mais je reviendrai plus tard pour rajouter les contrôles d'erreur, et plus...
#
# Si l'image ISO de la clef USB n'est pas "mounté", il est possible de modifier directement
#  l'image ISO sur la clef USB en donnant le nom de fichier de périphérique ("/dev/sdc" par exemple)
#  en paramètre à ce script, à la place du nom de fichier image ISO.
#----------------------------------------------------------------------------------------------------
# Projets :
#----------
# - Créer une entrée (FR) à insérer dans le menu de "grub" et a mettre "par defaut".
# - Ajouter la gestion des listes (tableau) en entrée 
#    depuis un "glissé" de nom de dossier, ou sélection multiple depuis l'interface graphique.
#----------------------------------------------------------------------------------------------------
# En prévision:
# -------------
# - Pour les futurs scripts associés :
#   - Fichier de Configuration :
#       Rechercher dans l'ISO à Franciser les fichiers des locales et clavier disponibles.
#   - Vérifier somme MD5 du fichier image ISO source avant modification.
#   - Créer somme MD5 du fichier image ISO modifiée pour test intégrité après gravure.
#====================================================================================================

#------------------------------------------------------------
#  Y-a t-il un paramètre sur la ligne de commande du script ?
#   Sinon, demander gentiment à l'utilisateur d'entrer
#   un chemin de fichier image ISO de type Live en paramètre.
#------------------------------------------------------------
fichImgEn="$1"

test "$fichImgEn" ||
  {
    printf "\n\nDonnez un chemin du fichier d'image \"ISO Live debian\" à franciser en paramètre de cette commande.\n\n Comme par exemple:\n\n\t$0 ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso\n\n\"$0\" vous remercie.\n\n"
    exit 1
  }

#------------------------------------------------------------
# Est-ce bien un fichier d'image ISO de type "DEBIAN LIVE" ?
#   pour le savoir, tester la présence du fichier "live.cfg".
#------------------------------------------------------------
NmFichLive="live.cfg"

varLiveCfg=`isoinfo -l -R -i "${fichImgEn}" | grep "${NmFichLive}"  | awk '{print $5, $10}'`

#---------------------------------------------------
# Si le fichier "live.cfg" n'est pas là,
#   l'annoncer par un message, et quitter le script.
#---------------------------------------------------
if [ -z "${varLiveCfg}" ]; then
  printf "\n\"$0\" n'a pas pu trouver de fichier \"${NmFichLive}\" dans le fichier \"$fichImgEn\".\n\n\tCe fichier n'est peut-être PAS un fichier d'image ISO \"Debian Live\"...\n\n"
  exit 1
fi

#----------------------------------------------------------
# Récupérer la taille et la position du fichier "live.cfg".
#----------------------------------------------------------
valuOffset=${varLiveCfg##* } # récup de ce qui suit l'espace
ficcfgSize=${varLiveCfg%% *} # récup de ce qui précède l'espace

#-----------------------------------------------
# Récupérer la taille de bloc utilisé par l'ISO.
#-----------------------------------------------
chBlksSize="Logical block size is:"
isoBlckSiz=`isoinfo -d    -i "${fichImgEn}" | grep "${chBlksSize}"  | awk '{print $5}'`

#--------------------------------------------------------------
# Créer un nom unique dans le temps pour le fichier temporaire.
#--------------------------------------------------------------
fichTmp="/tmp/tmpAeffacer`date +%s`.dat"

#----------------------------------------------------------------
# Préparer le nom pour renommer le fichier ISO une fois francisé.
#   (insertion de "-FR" juste après "live")
#----------------------------------------------------------------
frAins="-FR"
insApres="live"

fichImgFr="${fichImgEn%$insApres*}${insApres}${frAins}${fichImgEn#*$insApres}"

#---------------------------------------------------------------
# Créer la nouvelle chaîne de caractères des paramètres de boot.
#---------------------------------------------------------------
chOrigin="quiet splash"
chAjout="lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-model=pc105 keyboard-layouts=fr keyboard-variant=latin9 timezone=Europe/Paris utc=yes"

chRempl="$chOrigin $chAjout"
#---------------------------------------------------------------

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

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

Salut,

Testé cette version qui est réellement époustouflante de rapidité.

[quote]printf "\nDonnez un chemin d’image “ISO Live” debian en paramètre.\n"
exit 1[/quote]

Pourquoi ne pas donner une chance à celui qui a oublié de donner la réponse à ce moment ?

En fait, j’avais envie d’en faire un script qui serait utilisable par les interface graphiques: genre glisser un fichier sur le script, ou mieux: un dossier, et toutes les ISO Live trouvées dans le dossier seraient francisées, ou/et le gestionnaire de fichiers pourrait proposer cette option par un click droit, etc…

Pour l’utilisation en ligne de commande, je ferai un autre script qui appellera celui là, et qui permettra de choisir différentes options (langues, TimeZones, types de claviers, etc…) depuis un fichier de configuration, et un autre fichier historique qui garderai les listes d’options en fonction des machines de l’utilisateur.

En fait, si je mettais tout ça dans le même script, ça deviendrait (à mon avis) vite trop lourd, et surtout trop dépendant d’un contexte particulier.

Par exemple, bobo38 a essayé de l’utiliser avec Arch, mais voilà: l’utilitaire “isoinfo” qu’il a utilisé ne retournait pas les informations dans le même ordre.
Il a résolu le problème en modifiant lui même le script, mais j’aimerais éviter ce genre de problèmes qui pourrait aussi arriver avec les autres utilitaires utilisés, et donc aussi, l’interface utilisateur (si tant est qu’il n’y en ait qu’un type, d’utilisateur).

Pour l’instant, j’essaie (avec mes faibles connaissance d’autodidacte) de rendre ce script le plus “propre” (portable peut-être) possible.
Alors j’en suis à “nettoyer” toutes les erreurs que je peux y trouver, et c’est bien sûr très long car j’apprends (lecture) à mesure et par essais (pour vérifier et assimiler).

Bien sûr, je suis preneur de tous les conseils qu’on pourrait me donner, notamment au sujet des erreurs de type “bashisme” car j’en connais trop peu pour les voir toutes, et je suis sûr qu’il doit y en avoir de grosses, et même d’autre type d’erreurs que je ne vois pas du tout.

Voilà pourquoi je ne laisse aucune autre chance à l’utilisateur, car c’est un autre script ou autre interface qui s’en chargera.

Salut,

Pour moi, il me va très bien mais si je ne l’avait lu avant je n’aurait pas pensé à entrer le chemin complet dans la commande.
Bravo encore :038

Merci beaucoup pour l’appréciation :grin:

[quote=“ggoodluck47”]… si je ne l’avait lu avant je n’aurait pas pensé à entrer le chemin complet dans la commande. …[/quote]Alors, il va me falloir aussi apprendre à faire une page pour “man” concernant ce script. => dans les “TouDoux”.

[quote=“MicP”]Merci beaucoup pour l’appréciation :smiley:

Plutôt que de demander gentiment où se trouve l’iso à traiter :laughing:

[quote=“ggoodluck47”]… demander gentiment …[/quote]Voilà, j’ai apporté les :slight_smile: modifications demandées :slight_smile: , plus quelques commentaires.

J’y travaille encore, bien sûr.

EDIT: J’avais mis ça :

test "$fichImgEn" ||
  {
    printf "\n\"$0\" vous prie de bien vouloir avoir l'obligeance, l'extrême amabilité, la bonté et la délicatesse\nde donner le chemin du fichier d'image \"ISO Live\" debian à franciser en paramètre de cette commande.\n\n Comme par exemple:\n\n\t$0 ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso\n\n\"$0\" vous remercie pour votre diligence.\n\n"
    exit 1
  }

Mais je l’ai enlevé : Peur que ce genre d’humour soit “mal pris”.
Désolé. :oops:

Une nouvelle version qui insère un choix (pour la config en français) [strike]de plus dans la liste des choix[/strike] de démarrage proposés.

EDIT: Si le contenu du fichier original est bien modifié, la nouvelle taille du fichier “live.cfg” ne l’est pas,
étant donné que le système de fichier de l’image ISO n’est pas actif.
Seuls les 351 (taille originale du fichier) premiers octets de ce fichiers seront donc pris en compte.

Il faudra donc se contenter d’une seule entrée francisée afin de limiter la taille du fichier modifié à sa taille originale.

==========
J’ai quand même réussi à faire faire à “sed” ce que faisait “grep” dans ce script => Plus besoin de “grep”.

#!/bin/sh -
#=================================================================================================
#        NOM: isoLive2fr.sh
#
#    SYNTAXE: isoLive2fr <fichier image ISO Live>
#
#        BUT: Remplacer le menu de démarrage par une nouvelle entrée.
#             Cette nouvelle entrée permettra un démarrage directement en français.
#
#  NÉCESSITE: Commande     Version      Paquetage
#             --------     -------      -----------
#             isoinfo      1.1.11       genisoimage
#             GNU dd       8.13         coreutils
#             GNU basename 8.13         coreutils
#             GNU awk      4.0.1        gawk
#             GNU sed      4.2.1        sed
#
#     AUTEUR: MicP (debian-fr)
#
#       DATE: 18/07/2014
#
#    VERSION: 0.04.05
#
#-------------------------------------------------------------------------------------------------
# NOTES: Ce n'est qu'une ébauche de script inspiré par ceux qui ont été postés par fran.b
#         dans le fil de discussion suivant :
# http://www.debian-fr.org/franciser-l-iso-debian-7-5-live-nonfree-moins-de-2-minutes-t48948.html
#
# Ça fonctionne, mais je reviendrai plus tard pour rajouter des contrôles d'erreur, et plus...
#-------------------------------------------------------------------------------------------------
# Projets :
#
# - Ajouter la gestion des listes (tableau) en entrée
#     depuis un "glissé" de nom de dossier, ou sélection multiple depuis l'interface graphique.
# - Adapter le script pour pouvoir modifier directement l'image "ISO Live" déjà "gravée" sur Clef USB.
# - Contrôler si le fichier n'a pas déjà été "francisé".
#---------------------------------------------------------------
# En prévision: (Pour le futur script pour le fichier de config)
# - Rechercher dans l'ISO à Franciser les fichiers des locales et clavier disponibles.
#=================================================================================================

fichImgEn="$1"
#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Ci dessous, la ligne des paramètres de boot qui sera utilisée par le menu de démarrage par défaut.
#   Ce menu apparaîtra en premier dans la liste avec le nom: "Live Fr" (suivit du type d'architecture de votre machine).
#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nvParams="append boot=live config quiet splash lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-model=pc105 keyboard-layouts=fr keyboard-variant=latin9 timezone=Europe/Paris utc=yes"
#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#------------------------------------------------------------
#  Y-a t-il un paramètre sur la ligne de commande du script ?
#------------------------------------------------------------
test -z "${fichImgEn}" &&
  {
    printf "\n\nDonnez le chemin du fichier d'image \"ISO Live debian\" à franciser en paramètre de cette commande.\n\n Comme par exemple:\n\n\t$0 ~/Téléchargements/debian-live-7.5.0-amd64-xfce-desktop.iso\n\n\"$0\" vous remercie.\n\n"
    exit 1
  }

#----------------------------------------------------------------
#  Le paramètre corresponds-t-il à un nom de fichier accessible ?
#----------------------------------------------------------------
test -f "${fichImgEn}" ||
  {
    printf "\n\n\"$0\" n'a pu avoir accès à \"${fichImgEn}\".\n\n\tEst-ce bien un nom de fichier ?\n\n"
    exit 1
  }

#-----------------------------------------------
# Récupérer la taille de bloc utilisé par l'ISO.
#-----------------------------------------------
chBlksSize="Logical block size is:"

isoBlckSiz=$(isoinfo -d -i "${fichImgEn}" | sed -n "/${chBlksSize}/p" | sed 's/.* //')

#--------------------------------------------------------------
# Est-ce bien un fichier d'image ISO de type "DEBIAN LIVE" ?
#   pour le savoir, vérifier la présence du fichier "live.cfg".
#--------------------------------------------------------------
NmFichLive="  live.cfg"

varLiveCfg=$(isoinfo -l -R -i "${fichImgEn}" 2>/dev/null | sed -n "/${NmFichLive}/p" | awk '{print $5, $10}')

#----------------------------------------------------------
# Récupérer la taille et la position du fichier "live.cfg".
#----------------------------------------------------------
ficCFGsize=${varLiveCfg%% *} # récup de ce qui précède l'espace
blckOffset=${varLiveCfg##* } # récup de ce qui suit l'espace
octsOffset=$(( $blckOffset * $isoBlckSiz ))

#---------------------------------------------------
# Si le fichier "live.cfg" n'est pas là,
#   l'annoncer par un message, et quitter le script.
#---------------------------------------------------
test -z "${varLiveCfg}" &&
  {
    printf "\n\"$0\" n'a pas pu trouver de fichier \"${NmFichLive}\" dans le fichier \"${fichImgEn}\".\n\n\tCe fichier n'est peut-être PAS un fichier d'image ISO \"Debian Live\"...\n\n"
    exit 1
  }

#----------------------------------------------------------------
# Préparer le nom pour renommer le fichier ISO une fois francisé.
#   (insertion de "-FR" juste après "live")
#----------------------------------------------------------------
frAins="-FR"
insApres="live"

fichImgFr="${fichImgEn%$insApres*}${insApres}${frAins}${fichImgEn#*$insApres}"

#------------------------------------------------------------
# Créer quelques variables pour la création du menu Francisé.
#------------------------------------------------------------
chLive=" ^Live ("
chLiveFR=" ^Live Fr ("
chMenDef="\tmenu default"
chAppend="\tappend boot="

#--------------------------------------------------------------------
# Créer un nom unique dans le temps pour le fichier temporaire,
# dans un sous-répertoire de "/tmp/" au nom du script et utilisateur.
#--------------------------------------------------------------------
nomRepTmp="$(basename $0)"
nomRepTmp="/tmp/${nomRepTmp%.*}-${USER}"
test -d "${nomRepTmp}" || mkdir "${nomRepTmp}"
fichTmp="${nomRepTmp}/tmp-$(date +%s).dat"

#-----------------------------------------------------------------------------------
# Extraire le contenu du fichier "live.cfg",
#  sélectionner le paragraphe concernant le premier menu,
#  modifier le titre du label, supprimer la ligne des paramètres de boot,
#  puis sauvegarder dans "$fichTmp".
#----------------------------------------------------------------------------------
dd bs=1 count=$ficCFGsize skip=$octsOffset if="${fichImgEn}" 2>/dev/null | \
sed -n "1,/${chAppend}/p" | sed -e "s/${chLive}/${chLiveFR}/" -e "/^${chAppend}/d" > "${fichTmp}"

#--------------------------------------------------
# Ajouter la nouvelle chaîne des paramètres de boot
#  + une ligne vide à la fin du fichier temporaire.
#--------------------------------------------------
printf "\t${nvParams}\n\n" >> "${fichTmp}"

#-------------------------------------------
# Remplacer le contenu du fichier "live.cfg"
#  par des caractères 0x00 sur l'image ISO.
#-------------------------------------------
dd bs=1 count=$ficCFGsize seek=$octsOffset if=/dev/zero of="${fichImgEn}" conv=notrunc,sync 2>/dev/null

#------------------------------------------------
# Copie du nouveau contenu du fichier "live.cfg".
#------------------------------------------------
dd bs=1 seek=$octsOffset if="${fichTmp}" of="${fichImgEn}" conv=notrunc,sync 2>/dev/null

#-----------------------------------------
# Renommer le fichier image ISO avec "FR".
#-----------------------------------------
mv "${fichImgEn}" "${fichImgFr}"

#---------------------------------------------
# Supprimer le sous-répertoire et son contenu:
# le fichier temporaire.
#---------------------------------------------
rm -rf "${nomRepTmp}"

#------------------------------
# Annoncer que tout a été fait.
#------------------------------
printf "\nVoilà voilà! \"${fichImgFr}\" est la version francisée.\n\nSomme MD5 :\n"

#-----------------------------------------------------------
# Calcul de la somme MD5 de la nouvelle image ISO francisée.
#-----------------------------------------------------------
md5sum "${fichImgFr}"
printf "\n\n"

#=================================================================================================

NOTE: Ce script ne pourra fonctionner correctement que si:

  • Le fichier “live.cfg” existe bien dans le système de fichiers du fichier “image ISO” donné en paramètre,
  • La chaîne de caractères “live” existe dans le nom du fichier “image ISO” donné en paramètre,
  • La chaîne de caractères " ^Live (" est présente dans le nom du premier label du menu de démarrage de l’ISO,
  • La chaîne de caractères des options de boot du premier label débute par: “append boot= live config quiet splash”.