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

Aller à la navigation Aller à la recherche
m
→‎Ou alors, utilisez un script. : nvlle version script
m (→‎Ou alors, utilisez un script. : nvlle version script)
Ligne 351 : Ligne 351 :
#    SYNTAXE: isoLive2fr <fichier image ISO Live>
#    SYNTAXE: isoLive2fr <fichier image ISO Live>
#
#
#        BUT: Ajouter les paramètres de boot
#        BUT: Remplacer le menu de démarrage par une nouvelle entrée.
#               dans un fichier image ISO Live debian,
#             Cette nouvelle entrée permettra un démarrage directement en français.
#              de façon à ce qu'elle démarre en Français.
#
#
#  NÉCESSITE: "isoinfo" du paquetage "genisoimage"
#  NÉCESSITE: Commande    Version      Paquetage
#            "dd"      du paquetage "coreutils"
#            --------    -------      -----------
#            "awk"    du paquetage "gawk"
#            isoinfo     1.1.11      genisoimage
#            "grep"    du paquetage "grep"
#            GNU dd       8.13        coreutils
#            "sed"    du paquetage "sed"
#            GNU awk     4.0.1        gawk
#            GNU sed     4.2.1        sed
#
#
#    AUTEUR: MicP (debian-fr)
#    AUTEUR: MicP (debian-fr)
#
#
#      DATE: 12/07/2014
#      DATE: 18/07/2014
#    VERSION: 0.02
#
#    VERSION: 0.04.05
#
#
#-------------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------------
Ligne 371 : Ligne 372 :
# http://www.debian-fr.org/franciser-l-iso-debian-7-5-live-nonfree-moins-de-2-minutes-t48948.html
# 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...
# Ç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.
#=================================================================================================
#=================================================================================================


test "$fichImgEn" ||
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 "\nDonnez un chemin d'image \"ISO Live\" debian en paramètre.\n"
     printf "\n\n\"$0\" n'a pu avoir accès à \"${fichImgEn}\".\n\n\tEst-ce bien un nom de fichier ?\n\n"
     exit 1
     exit 1
   }
   }


isoinfo -d -i "$fichImgEn" | grep "Application id: DEBIAN LIVE" || \
#-----------------------------------------------
# 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\"${fichImgEn}\" n'est PAS un fichier d'image ISO \"Debian Live\"...\n\n"
     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
     exit 1
   }
   }


#----------------------------------------------------------------
# Préparer le nom pour renommer le fichier ISO une fois francisé.
#  (insertion de "-FR" juste après "live")
#----------------------------------------------------------------
frAins="-FR"
frAins="-FR"
insApres="live"
insApres="live"
Ligne 391 : Ligne 452 :
fichImgFr="${fichImgEn%$insApres*}${insApres}${frAins}${fichImgEn#*$insApres}"
fichImgFr="${fichImgEn%$insApres*}${insApres}${frAins}${fichImgEn#*$insApres}"


fichRech="live.cfg"
#------------------------------------------------------------
chOrigin="quiet splash"
# Créer quelques variables pour la création du menu Francisé.
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"
#------------------------------------------------------------
fichTmp="/tmp/tmpAeffacer`date +%s`.dat"
chLive=" ^Live ("
chRempl="$chOrigin $chAjout"
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}"


blockSize=`isoinfo -d    -i "${fichImgEn}" | grep "block size"  | awk '{print $5}'`
#------------------------------
valOffset=`isoinfo -l -R -i "${fichImgEn}" | grep "${fichRech}" | awk '{print $10}'`
# Annoncer que tout a été fait.
#------------------------------
printf "\nVoilà voilà! \"${fichImgFr}\" est la version francisée.\n\nSomme MD5 :\n"


dd bs=$blockSize count=1 skip=$valOffset if="${fichImgEn}"                                  2>/dev/null    |  \
#-----------------------------------------------------------
sed "s/$chOrigin/$chRempl/"                                                                  > "${fichTmp}" &&  \
# Calcul de la somme MD5 de la nouvelle image ISO francisée.
dd bs=$blockSize count=1 seek=$valOffset if="${fichTmp}" of="${fichImgEn}" conv=notrunc,sync 2>/dev/null    &&  \
#-----------------------------------------------------------
mv "${fichImgEn}" "${fichImgFr}"                                                                             &&  \
md5sum "${fichImgFr}"
rm "${fichTmp}"
printf "\n\n"


printf "\nVoilà voilà! \"${fichImgFr}\" est la version francisée.\n\n"
#=================================================================================================</code>
</code>
editor
621

modifications

Menu de navigation