Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 28/02/2012, à 15:11

Arbiel

[Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

[EDIT] : les erreurs mentionnées par didli sont corrigées et le problème rencontré par pio_killer est a priori résolu[/EDIT]

I - L'introduction d'options utilisateur dans l'écran de démarrage de Grub2

Grub2 construit l'écran de démarrage à partir du fichier /boot/grub/grub.cfg (pour être plus précis, le nom et la localisation de ce fichier dépendent des paramètres utilisés lors de l'installation de Grub2 par la commande grub-install). De manière standard, cet écran ne présente que les systèmes installés sur le PC, mais vous pouvez y introduire des lignes supplémentaires présentant des options qui vous sont propres, comme la possibilité d'amorcer le PC à partir d'une image iso, directement sans passer par un support externe (CD ou USB).

Vous disposez de deux moyens pour intégrer de nouvelles options à l'écran de démarrage de grub2

  • le fichier /etc/grug.d/40_custom, utilisé lors de l'installation ou la mise à jour de Grub2 ; on peut le qualifier de statique dans la mesure où toute modification de ce fichier ne sera prise en compte que lors d'une ultérieure mise à jour de Grub2  (update-grup ou grub-mkconfig)

  • le fichier custom.cfg, localisé dans le même répertoire que grub.cfg, lu et interprété à chaque démarrage ; on peut la qualifier de dynamique, dans la mesure où toute modification de ce fichier sera prise en compte à tout démarrage ultérieur du PC

II - Règles de nommage des fichiers dans le langage Grub2

Avant de poursuivre, il convient de préciser que lorsque Grub2 s'exécute, aucun système n'est encore actif, et donc que l'arbre des fichiers GNU/Linux, "/" et tout ce qui y est accroché, n'existe pas. Il n'existe que la structure physique de chacune des partitions avec des répertoires imbriqués les uns dans les autres et des fichiers dans ces répertoires. Exprimé dans le langage Grub2, le chemin d'accès à un fichier se note d'une manière qui rappelle la notation GNU/Linux, tout en en différant par la nécessité de préciser de quelle partition il s'agit. On écrit ainsi (partition)/../../fichier (notation dans laquelle le nom de la partition, généralement de la forme hdx,msdosy, x de 0 à n et y de 1 à p, est inclus dans une paire de parenthèses) pour désigner que le fichier /../../fichier se trouve sur la partition "partition".

Grub2 dispose de la commande search pour trouver la partition sur laquelle se trouve le fichier /.../.../fichier.  La notation /.../.../fichier peut ainsi être considérée comme le chemin relatif vers le fichier à partir de la partition dans laquelle il se trouve (reste à savoir laquelle), et non comme dans GNU/Linux, le chemin absolu à partir de la racine. Si votre image iso s'appelle "image.iso" et qu'elle est localisés dans le répertoire "amorces" situé à la racine d'une partition, la commande search appliquée à /amorces/image.iso retourne le nom de la partition en question. Les fonctions que je présente ci-après utilisent la commande search de sorte que c'est une telle notation relative, /.../.../fichier que vous devez utilisez pour désigner vos propres fichiers.

Enfin, la variable Grub ${prefix} pointe sur le répertoire dans lequel se trouve le fichier grub.cfg. Tout autre répertoire ou fichier contenu dans le même répertoire peut ainsi être désigné par son adresse absolue ${prefix}/répertoire ou ${prefix}/fichier.

III - Méthode proposée

Personnellement j'ai opté pour le fichier custom.cfg, mais le fonctionnement serait identique avec 40_custom. Il reste à savoir comment rédiger ou modifier ce fichier. Dans un premier temps, j'indique comment introduire dans le menu Grub2 une ligne de menu pour l'amorçage avec une seule image iso pour ensuite adapter la méthode à l'utilisation de plusieurs images. Sachez qu'il ne s'agit là que d'une méthode parmi tant d'autres.

Cas 1 : une seule image iso

La méthode proposée ici utilise :

  • une image iso, à titre d'exemple, celle de Clonezilla

  • le fichier de définition des entrées de menu spécifiques à Clonezilla

  • des fonctions Grub2 d'accès aux images iso

  • le fichier custom.cfg

a) l'image iso de Clonezilla
Cette image peut être nommée comme bon vous semble et localisée n'importe où dans votre configuration, même sur des systèmes de fichiers FAT ou NTFS, de même d'ailleurs que tous les fichiers mentionnés ici. Dans mon exemple, elle s'appelle "clonezilla-live-20120127-oneiric.iso" et elle est localisée dans un répertoire nommé "amorces". Son chemin d'accès est donc "/amorces/clonezilla-live-20120127-oneiric.iso"

b) le fichier de définition des entrées de menu spécifiques à Clonezilla
Ce fichier peut aussi être nommé et localisé comme vous le souhaitez. Dans mon exemple, il s'appelle "clonezilla-live-20120127-oneiric.loopback.cfg" et est localisé dans le même répertoire qul'utilisation e l'image iso. Son chemin d'accès est donc "/amorces/clonezilla-live-20120127-oneiric.loopback.cfg". J'ai écrit ce fichier à partir des informations présentées sur le site de Clonezilla et du contenu du fichier /EFI/boot/grub.cfg de l'image iso. Le contenu de ce fichier est présenté ci-dessous

menuentry "Clonezilla live" {
linux /live/vmlinuz boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"/usr/share/keymaps/i386/azerty/fr-latin9.kmap.gz\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR.UTF-8\" vga=788 ip=frommedia nosplash toram=filesystem.squashfs findiso=${iso_path}
initrd /live/initrd.img
} 

menuentry "Clonezilla live (Default settings, VGA 800x600)" {
  linux /live/vmlinuz  boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=800x600-16 ip=frommedia  nosplash toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}

menuentry "Clonezilla live (Default settings, VGA 1024x768)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=1024x768-32 ip=frommedia  nosplash toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}

menuentry "Clonezilla live (Default settings, VGA 640x480)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=640x480-16 ip=frommedia  nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}

menuentry "Clonezilla live (Safe graphic settings, vga=normal)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" vga=normal ip=frommedia  nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}

menuentry "Clonezilla live (Failsafe mode)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" acpi=off irqpoll noapic noapm nodma nomce nolapic nosmp ip=frommedia vga=normal ip=frommedia nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img
}

Chaque commande menuentry se traduit par une ligne du menu Grub dont le texte est le libellé qui suit immédiatement la commande menuentry. La commande comprend deux lignes de code :

  • linux, pour le chargement du noyau,

  • et initrd pour l'initialisation de la "ram disk"

Le premier paramètre de l'ordre linux désigne le noyau à utiliser, les autres paramètres sont passés au noyau. Le noyau linux est désigné par /live/vmlinuz. Il s'agit donc du fichier vmlinuz d'un répertoire localisé à la racine d'une partition ; en l'occurrence cette partition est l'image iso elle-même. Une lecture attentive de la page de Clonezilla permet de constater que j'ai modifié la liste de paramètres passés au noyau, et surtout remplacé la variable ${isofile} par la variable ${iso_path} pour me conformer à une normalisation des images iso amorçables avec Grub2 en cours de généralisation. La deuxième commande, initrd, nécessite un paramètre pour désigner le fichier à utiliser pour l'initialisation de la "ram disk". Il s'agit du fichier initrd.img, localisé dans le même répertoire que le fichier noyau vmlinuz.

Ce sont les fonctions Grub2 d'accès aux images, présentées ci-dessous, qui se chargent de définir un périphérique virtuel pointant sur le contenu de l'image, de sorte que la commande search évoquée plus haut saura retrouver la partition sur laquelle se trouve le répertoire live/.

Ces entrées diffèrent les unes des autres essentiellement par la définition de l'écran qui doit être utilisée pour la présentation du menu. Vous pouvez bien sûr supprimer celles qui ne vous conviennent pas.

c) le fichier des fonctions Grub2 d'accès aux images iso
Vous créez dans /boot/grub un répertoire "greffons" et vous y enregistrez un fichier nommé "iso.source.cfg" (donc dont le chemin d'accès est /boot/grub/greffons/iso.source.cfg) dans lequel vous recopiez le script ci-dessous

#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier iso est introuvable, ou n'a pas été donné en paramètre de la commande iso_boot
#   Iso file missing
function no_iso_file {
  if [ -n "${1}" ] ; then
    echo L\'image à partir de laquelle il faut amorcer le PC, ${1}, ne se trouve sur aucun des supports actuellement raccordés à l\'ordinateur.
  else 
    echo Aucune image iso n\'a été attachée au libellé ${chosen} que vous venez de choisir.
  fi
}
#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier de configuration est introuvable
#   Grub configuration file missing
function no_cfg_file {
  echo Le fichier de configuration, ${1}, ne se trouve sur aucun des supports actuellement raccordés à l\'ordinateur.
 }
#######################################################################################################################
function iso_boot  {
#
# Cette procédure crée un periphérique virtuel qui donne accès aux répertoires et fichiers contenu dans le fichier iso
# et cherche le fichier contenant le menu correspondant à l'image iso considérée et l'introduit dans le menu Grub
# paramètre ${1} : le chemin d'accès au fichier iso
# paramètre ${2}, facultatif : le chemin d'accès au fichier contenant les entrées de menu pour l'image iso considérée
#    quand il est omis, il s'agit du fichier /boot/grub/loopback.cfg de l'image iso
  set image_iso=
  set iso_path=${1}
#  recherche du fichier iso
  if [ -n "${1}" ]; then
# si le fichier ${1} de nom /..../nom existe, alors cela signifie qu'il est sur la partition ${root}
     if [ -e ${1} ]; then set image_iso=${root}; else search --file --set=image_iso --no-floppy ${1}; fi
  fi
  if [ -z "${image_iso}" ]; then no_iso_file ${1};  sleep -v 10; fi
# création du périphérique virtuel qui donne accès au fichier iso
#    creation of the virtual device holding the iso file and paths initialisation
   loopback iso (${image_iso})${1}
   set root=iso,msdos1
   set loopcfg=
# recherche et introduction du menu spécifique à l'image iso considérée
   if [ -z "${2}" ]; then set sourcefile=/boot/grub/loopback.cfg; else set sourcefile=${2}; fi
# si le fichier se trouve sur le périphérique $root, il n'est pas utile de le chercher
   if [ -e ${sourcefile} ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy ${sourcefile} ; fi
   if [ -z "${loopcfg}" ]; then no_cfg_file ${sourcefile}; sleep -v 10; else source (${loopcfg})${sourcefile}; fi
}

d) le fichier custom.cfg
Vous créez, s'il n'existe pas déjà, le fichier /boot/grub/custom.cfg et vous y introduisez le code ci-dessous

source ${prefix}/greffons/config.menu.cfg
submenu 'clonezilla-live-20120127-oneiric' {iso_boot /amorces/clonezilla-live-20120127-oneiric.iso /amorces/clonezilla-live-20120127-oneiric.loopback.cfg}

La commande "source ${prefix}/greffons/config.menu.cfg" ordonne à Grub2 de lire et d'interpréter le fichier source ${prefix}/greffons/config.menu.cfg dans lequel est définie la fonction iso_boot utilisée dans la commande submenu qui suit. ${prefix} est une variable de grub. Elle désigne la partition dans laquelle grub a trouvé
La commande submenu se traduit par une ligne dans le menu Grub2, ligne qui, sélectionnée, déclenche l'affichage des lignes menuentry définies dans le fichier /amorces/clonezilla-live-20120127-oneiric.loopback.cfg que nous avons vu précédemment.

Cas 2 : plusieurs images iso

Lorsque l'on veut étendre la méthode pour englober plusieurs images iso, on peut bien sûr introduire de nouvelles lignes faisant appel à la fonction iso_boot. Ces lignes doivent être de la forme

submenu 'titre du menu' {iso_boot /chemin_accès_image.iso /chemin_accès_fichier_loopback.cfg}

ou simplement

submenu 'titre du menu' {iso_boot /chemin_accès_image.iso}

lorsque l'image iso contient le fichier /boot/boot/loopback.cfg. Une normalisation est en effet en cours, pour introduire dans les images iso amorçables un fichier /boot/grub/loopback.cfg. Cette normalisation tend aussi à utiliser la variable ${iso_path} dans les paramètres d'appel du noyau, et non ${isofile} comme indiqué sur le site de Clonezilla. Bien évidemment, cette normalisation n'était pas encore en vigueur lors de la création de l'image iso de clonezilla dont je me suis servi.

Mais lorsque ces lignes deviennent trop nombreuses, on peut les déporter dans un nouveau fichier, par exemple dans /boot/grub/greffons/iso.menu.cfg et modifier le fichier custom.cfg en conséquence :

source ${prefix}/greffons/iso.source.cfg
source ${prefix}/greffons/iso.menu.cfg

Et on crée le fichier /boot/grub/greffons/iso.menu.cfg avec un contenu tel que

submenu 'Fichiers iso' {
submenu 'Ubuntu' {
submenu 'lubuntu-11.10-desktop-i386' {iso_boot /amorces/lubuntu-11.10-desktop-i386.iso}
submenu 'ubuntu-11.10-desktop-i386-fr' {iso_boot /amorces/ubuntu-11.10-desktop-i386-fr.iso /amorces/ubuntu-11.10-desktop-i386-fr.loopback.cfg}
submenu 'ubuntu-securisee-10.10' {iso_boot /amorces/ubuntu-securisee-10.10.iso}
}
submenu 'boot-repair-disk' {iso_boot /amorces/boot-repair-disk.iso /amorces/boot-repair-disk.loopback.cfg}
submenu 'clonezilla-live-20120127-oneiric' {iso_boot /amorces/clonezilla-live-20120127-oneiric.iso /amorces/clonezilla-live-20120127-oneiric.loopback.cfg}
submenu 'grml96_2011.12' {iso_boot /amorces/grml96_2011.12.iso /boot/grub/grub.cfg}
submenu 'linuxmint-10-kde-dvd-amd64' {iso_boot amorces/linuxmint-10-kde-dvd-amd64.iso}
submenu 'system-rescue' {iso_boot /amorces/systemrescuecd-x86-2.5.0.iso /amorces/systemrescuecd-x86-2.5.0.loopback.cfg}
}

Ce code regroupera tous les éléments de menu relatifs aux fichiers iso dans une seule ligne du menu principal, de titre "Fichiers iso". La sélection de cette ligne entraînera l'apparition d'un second menu dans lequel les distributions Ubuntu seront regroupées dans une seule ligne, "Ubuntu", et ainsi de suite.

On s'aperçoit que dans l'ordre relatif à la distribution "lubuntu-11.10-desktop-i386", la fonction iso_boot n'a qu'un seul arguement, le fichier iso à utiliser. La raison en est que l'image contient un fichier /boot/grub/loopback.cfg, utilisé par défaut par la fonction iso_boot.

Lorsque tel n'est pas le cas, il faut trouver le nom et la localisation du noyau et du fichier initrd dans l'image iso, les paramètres à passer à la commande linux de chargement du noyau et coder les entrées de menu correspondantes dans un fichier loopback.cfg, qui lui, doit être passé comme deuxième paramètre à la fonction iso_boot.

Je n'ai pas encore réussi à mettre au point l'ensemble des fichiers loopback.cfg mentionnés ci-dessus. Merci à ceux d'entre vous qui auraient le temps de le faire et de les communiquer dans la présente discussion. Je viendrai moi aussi ajouter les fichiers au fur et à mesure de leur mise au point.

Arbiel

Dernière modification par Arbiel (Le 24/11/2012, à 19:44)


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#2 Le 25/07/2012, à 12:45

didli

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Merci beaucoup pour ce tuto !
Mais attention, c'est blindé de fautes issues d'un copié-collé raté (certaines lignes qui devraient être en commentaires ont perdu leurs balises de commentaires ...)
- - -
linux /live/vmlinuz boot=live live-config noswap qui doit contenirnolocales (...)
- - -
if [ -n "${1}" ] ; thenle fichier de définition des entrées de menu spécifiques à Clonezilla (...)

Dernière modification par didli (Le 25/07/2012, à 13:03)


Plan B : réessayer le Plan A jusqu'à ce qu'il fonctionne.
http://www.mediaklan.com/

Hors ligne

#3 Le 21/08/2012, à 20:50

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonsoir

Je viens de voir ton commentaire sur les fautes de copier-coller. Je ne suis pas certain qu'il s'agisse vraiment de fautes de copier-coller car j'ai souvent des difficultés avec le pavé "touchmachin" qui promène mon pointeur à droite ou à gauche, à "l'insu de mon plein gré", et en particulier en milieu de phrase, et je ne regarde pas toujours mon écran lors de la frappe des caractères. Et je ne trouve pas toujours où la frappe est allée s'insérer. En général, je relis toujours mes textes avant de publier, mais dans le cas présent, le texte étant relativement long, je ne suis pas certain aujourd'hui d'avoir procédé de la sorte il y a 6 mois.

Cela étant dit, si quelqu'un sait comment inhiber le dispositif en question, merci de m'indiquer comment faire.

Pour le reste, je vais prendre le temps de relire mon texte et de modifier ce qui doit l'être. Cela peut prendre un peu de temps, et je vous remercie les uns et les autres de bien vouloir être patients.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#4 Le 21/11/2012, à 23:59

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour,

je suis sous ubuntu 12.10 et je voudrais faire cette manip pour rajouter clonezilla.
J'ai tout suivi mais lorsque je sélectionne clonezilla, j'ai le message

can,'t find iso_boot

Voici ma config :
/dev/sda1 => /boot
/dev/sda2 => /
/dev/sda3 => /home
SWAP

Le fichier "iso.source.cfg" n'a pas été modifié. Il est dans le dossier "greffons"

J'ai mis le dossier "amorces" dans le dossier boot (je me suis dis que ça marcherais parce que c'est une partition)

J'utilise le fichier "clonezilla-live-20121025-quantal.iso"
Le fichier "clonezilla-live-20121025-quantal.loopback.cfg" contient ce que tu a mis dans le fichier "clonezilla-live-20120127-oneiric.loopback.cfg"
Ces deux fichiers sont dans le dossier "amorces"

Voici le contenu du fichier "custom.cfg" (qui est dans le dossier grub)

source /boot/grub/greffons/iso.source.cfg

submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /amorces/clonezilla-live-20121025-quantal.loopback.cfg}

As-tu une idée de mon erreur hmm


Ubuntu 12.10

Hors ligne

#5 Le 22/11/2012, à 11:21

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour pio_killer

Je dois me remettre en tête le fonctionnement de ces fonctions que j'ai écrites il y a presque un an.

Le message indique, si je ne me trompe, que Grub ne trouve pas la fonction iso_boot. Je ne vois que deux raisons à cela :

1) comme me l'a fait remarquer didli en août dernier, les fonctions publiées dans mon message initial comporte des erreurs ; j'avais indiqué que je me pencherais sur le problème, mais cela m'est sorti de l'esprit ; je vais me remettre à la tâche

2) tu as fait toi-même une erreur en recopiant le code dans tes propres fichiers, de sorte que Grub ne trouve pas la fonction iso_boot.

Mais avant de perdre ton temps à chercher une erreur qui provient peut-être de mon fait, laisse moi reprendre tout cela et envoie moi un message privé s'il te paraît que je me suis de nouveau endormi sur le problème.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#6 Le 22/11/2012, à 13:12

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

J'ai à peu près tout relu. J'ai essayé de simplifier le texte.

J'ai trouvé une erreur dans mes explications (j'avais mentionné le fichier /boot/grub/iso.source.cfg au lieu de /boot/grub/greffons/iso.source.cfg) mais je ne pense pas que c'était là la source des tes difficultés puisque tu as dû copier/coller le code, qui lui fait bien référence à /boot/grub/greffons/iso.source.cfg.

Par contre, et ce n'était pas une erreur, mais cela a pu t'induire en erreur dans tes recopies, je n'avais pas introduit de saut à ligne entre la fin du code de iso.source.cfg et la balise de fin de code, de sorte que tu n'as peut-être pas recopié le caractère "}" qui marque la fin de la procédure iso_boot. Et cela pourrait expliquer l'erreur.

Enfin, j'ai corrigé les erreurs qu'avait mentionnées didli en août et je pense que tout est bon maintenant.

Remplace ton fichier iso.source.cfg par celui qui est maintenant contenu dans ma note (#1) et indique moi si tout fonctionne, afin que je mette à jour le commentaire que j'ai introduit au début.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#7 Le 22/11/2012, à 21:53

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Merci de ta réponse wink

Désolé mais ça ne marche toujours pas hmm
Petite correction, le message qui s'affiche est plus précisément :

can't find command iso_boot

Je ne sais pas si ça change quelque chose mais bon ...

Voici le contenu de mon fichier iso.source.cfg qui est sous "/boot/grub/greffons" (que j'ai copié depuis ta note #1) :

#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier iso est introuvable, ou n'a pas été donné en paramètre de la commande iso_boot
#   Iso file missing
function no_iso_file {
  if [ -n "${1}" ] ; then
    echo L\'image à partir de laquelle il faut amorcer le PC, ${1}, ne se trouve sur aucun des supports actuellement raccordés à l\'ordinateur.
  else 
    echo Aucune image iso n\'a été attachée au libellé ${chosen} que vous venez de choisir.
  fi
}
#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier de configuration est introuvable
#   Grub configuration file missing
function no_cfg_file {
  echo Le fichier de configuration, ${1}, ne se trouve sur aucun des supports actuellement raccordés à l\'ordinateur.
 }
#######################################################################################################################
function iso_boot  {
#
# Cette procédure crée un periphérique virtuel qui donne accès aux répertoires et fichiers contenu dans le fichier iso
# et cherche le fichier contenant le menu correspondant à l'image iso considérée et l'introduit dans le menu Grub
# paramètre ${1} : le chemin d'accès au fichier iso
# paramètre ${2}, facultatif : le chemin d'accès au fichier contenant les entrées de menu pour l'image iso considérée
#    quand il est omis, il s'agit du fichier /boot/grub/loopback.cfg de l'image iso
  set image_iso=
  set iso_path=${1}
#  recherche du fichier iso
  if [ -n "${1}" ]; then
# si le fichier ${1} de nom /..../nom existe, alors cela signifie qu'il est sur la partition ${root}
     if [ -e ${1} ]; then set image_iso=${root}; else search --file --set=image_iso --no-floppy ${1}; fi
  fi
  if [ -z "${image_iso}" ]; then no_iso_file ${1};  sleep -v 10; fi
# création du périphérique virtuel qui donne accès au fichier iso
#    creation of the virtual device holding the iso file and paths initialisation
   loopback iso (${image_iso})${1}
   set root=iso,msdos1
   set loopcfg=
# recherche et introduction du menu spécifique à l'image iso considérée
   if [ -z "${2}" ]; then set sourcefile=/boot/grub/loopback.cfg; else set sourcefile=${2}; fi
# si le fichier se trouve sur le périphérique $root, il n'est pas utile de le chercher
   if [ -e ${sourcefile} ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy ${sourcefile} ; fi
   if [ -z "${loopcfg}" ]; then no_cfg_file ${sourcefile}; sleep -v 10; else source (${loopcfg})${sourcefile}; fi
}

Voici le contenu de mon fichier custom.cfg qui est dans le dossier "/boot/grub"

source /boot/grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /amorces/clonezilla-live-20121025-quantal.loopback.cfg}

Voici le contenu de mon fichier clonezilla-live-20121025-quantal.loopback.cfg qui est sous "/boot/amorces" (je n'ai rien modifié par rapport au tient)

menuentry "Clonezilla live" {
linux /live/vmlinuz boot=live live-config noswap qui doit contenirnolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" vga=788 ip=frommedia nosplash toram=filesystem.squashfs findiso=${iso_path}
initrd /live/initrd.img
} 
menuentry "Clonezilla live (Default settings, VGA 800x600)" {
  linux /live/vmlinuz  boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=800x600-16 ip=frommedia  nosplash toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}
menuentry "Clonezilla live (Default settings, VGA 1024x768)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=1024x768-32 ip=frommedia  nosplash toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}
menuentry "Clonezilla live (Default settings, VGA 640x480)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" video=uvesafb:mode_option=640x480-16 ip=frommedia  nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}
menuentry "Clonezilla live (Safe graphic settings, vga=normal)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" vga=normal ip=frommedia  nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img 
}
menuentry "Clonezilla live (Failsafe mode)" {
  linux /live/vmlinuz boot=live hostname=oneiric live-config quiet noswap nolocales edd=on nomodeset noprompt ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"fr_FR\" acpi=off irqpoll noapic noapm nodma nomce nolapic nosmp ip=frommedia vga=normal ip=frommedia nosplash  toram=filesystem.squashfs findiso=${iso_path}
  initrd /live/initrd.img

Petite question, dans ton fichier iso.source.cfg, tu as la ligne suivante dans la fonction iso_boot :

 if [ -z "${2}" ]; then set sourcefile=/boot/grub/loopback.cfg; else set sourcefile=${2}; fi

Or je n'ai pas le fichier "loopback.cfg"
Le problème ne viendrait-il pas de là ? roll (je dis ça mais je n'y connais pas grand chose yikes)

Dernière modification par pio_killer (Le 22/11/2012, à 23:34)


Ubuntu 12.10

Hors ligne

#8 Le 22/11/2012, à 23:36

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Dans ton fichier custom.cfg

source /boot/grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /amorces/clonezilla-live-20121025-quantal.loopback.cfg}

tu indiques que le fichier définissant les lignes de l'écran Grub est "/amorces/clonezilla-live-20121025-quantal.loopback.cfg", mais dans ton texte tu dis l'avoir enregistré en

"pio_killer a écrit :

Voici le contenu de mon fichier clonezilla-live-20121025-quantal.loopback.cfg qui est sous "/boot/amorces"

Si ton texte est correct, tu dois modifier le fichier custom.cfg comme ceci

source /boot/grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /boot/amorces/clonezilla-live-20121025-quantal.loopback.cfg}

Je pense que la ligne que tu incrimines est correcte, elle indique la valeur qu'il faut prendre en cas d'absence du deuxième argument de iso_boot, ce qui n'est pas ton cas puisque tu appelles la fonction avec deux arguments.

Sinon, précise s'il te plait ce qui se passe et le message d'erreur que t'indique Grub.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#9 Le 23/11/2012, à 00:07

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

C'est toujours pas bon.

Le message est exactement:

Error : can't find command 'iso_boot'.
press any key to continue ...

J'avais mis "/amorces/clonezilla-live-20121025-quantal.loopback.cfg" car tu a dis que grub recherche dans chaque partition.
Comme le dossier boot n'existe pas au démarrage (c'est une partition), le répertoire "amorces" se trouve donc à la racine.
J'ai aussi essayer comme ceci (car le fichier iso se trouve aussi dans "amorces")

source /boot/grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /boot/amorces/clonezilla-live-20121025-quantal.iso /boot/amorces/clonezilla-live-20121025-quantal.loopback.cfg}

Ubuntu 12.10

Hors ligne

#10 Le 23/11/2012, à 20:15

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Après réflexion, je pense que le problème provient de difficultés dans la recopie du code dans ton fichier. J'ai essayé de recopier le code de ton fichier en sélectionnant la seule zone contenue dans le cadre présentant le code, sans y parvenir.

Par contre en sélectionnant un peu plus largement, un peu de texte avant jusqu'à un peu de texte après, on obtient l'intégralité du code. Il faut alors ne conserver que les lignes comprises entre les commentaires du début

#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier iso est introuvable, ou n'a pas été donné en paramètre de la commande iso_boot

et les dernières lignes

   if [ -e ${sourcefile} ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy ${sourcefile} ; fi
   if [ -z "${loopcfg}" ]; then no_cfg_file ${sourcefile}; sleep -v 10; else source (${loopcfg})${sourcefile}; fi
}

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#11 Le 23/11/2012, à 21:29

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Je ne comprend pas ce que tu me dis hmm

Mon fichier commence bien avec

#######################################################################################################################
# Avertissement présenté à l'utilisateur si le fichier iso est introuvable, ou n'a pas été donné en paramètre de la commande iso_boot

et se termine par

   if [ -e ${sourcefile} ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy ${sourcefile} ; fi
   if [ -z "${loopcfg}" ]; then no_cfg_file ${sourcefile}; sleep -v 10; else source (${loopcfg})${sourcefile}; fi
}

J'ai même essayé en faisant un retour à la ligne après "}"

Au cas où ce soit à ça que tu pensais, saches que je suis allé jusqu'au bout du chariot lorsque j'ai copié le script wink

Dernière modification par pio_killer (Le 23/11/2012, à 21:54)


Ubuntu 12.10

Hors ligne

#12 Le 23/11/2012, à 22:22

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

J'avais tout vérifié sauf le code de mon fichier custom.cfg, dont je viens de m'apercevoir que je l'ai modifié après avoir écrit ce tuto.

Il faut y remplacer
source /greffons/config.menu.cfg
par
source ${prefix}/greffons/config.menu.cfg

Explications :
source /greffons/config.menu.cfg est un raccourci pour source ${root}/greffons/config.menu.cfg

En début d'exécution, ${prefix} et ${root} contiennent la même valeur. Aucune ligne de grub.cfg ne modifie la variable ${prefix}, alors que la variable ${root} peut être modifiée. Je suppose que c'est ce qui est arrivé.

Ce qui implique que
source ${prefix}/greffons/config.menu.cfg
n'a pas abouti à la lecture effective du fichier config.menu.cfg et donc que la fonction iso_boot n'est pas définie lorsque s'exécute l'ordre submenu qui suit.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#13 Le 23/11/2012, à 23:18

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Ca y'est ca marche smile

Mais pas avec ce que tu m'as dis
J'étais en train de modifié le fichier custom.cfg et je me suis aperçus qu'il y avait "/boot" en trop yikes

En fait, j'avais ça

source /boot/grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /amorces/clonezilla-live-20121025-quantal.loopback.cfg}

ça marche en mettant ça

source /grub/greffons/iso.source.cfg
submenu 'test_clonezilla' {iso_boot /amorces/clonezilla-live-20121025-quantal.iso /amorces/clonezilla-live-20121025-quantal.loopback.cfg}

Par contre, est-ce que tes explication sont nécéssaires maintenant ?
Et c'est quoi le fichier "config.menu.cfg" ?

Dernière modification par pio_killer (Le 23/11/2012, à 23:20)


Ubuntu 12.10

Hors ligne

#14 Le 23/11/2012, à 23:25

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

A priori, utiliser la notation ${prefix} est préférable. C'est celle que j'ai été conduit à utiliser, et donc j'avais certainement rencontré des difficultés avec la notation simplifiée.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#15 Le 24/11/2012, à 22:33

pio_killer

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Merci pour ton aide big_smile

Tout marche impec et grâce à toi, j'ai compris beaucoup de chose. wink


Ubuntu 12.10

Hors ligne

#16 Le 22/05/2013, à 15:25

tutoux

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour,
est-ce qu'on peut obtenir le même résultat en passant par grub-customizer ?
http://doc.ubuntu-fr.org/grub-customizer
merci d'avance.
cordialement.
tutoux

Hors ligne

#17 Le 22/05/2013, à 16:05

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour

Je ne sais pas répondre à cette question.

Je connais Grub-customizer de nom et pour l'avoir utilisé une fois et tout de suite abandoné, n'en voyant pas l'intérêt. Passer par une interface graphique pour lancer le système ne me paraît pas une fonction essentielle, d'autant que j'ai écrit un script pour me permettre de lancer systématiquement mon système préféré sans passage par le menu, et récupérer le passage par le menu en appuyant sur la touche Ctlr lors de l'amorce. Je ne passe donc que très rarement par le menu. Je réfléchis même à la façon de faire pour que le choix d'un système autre que le système préféré puisse se faire lors de la demande de redémarrage.

Ce que j'ai présenté ici s'appuie sur l'utilisation du fichier custom.cfg, standard dans grub, et, comme son nom l'indique, à la disposition des utilisateurs pour introduire de nouvelles fonctions, options, lignes de menu dans le dialogue géré par grub.

Si donc grub-customizer ne modifie pas les fondamentaux de grub, ce que j'ai écrit ici devrait être compatible.

Cependant, réalisant que la mise en oeuvre peut être un peu délicate, j'ai depuis tenté une simplification en écrivant un nouveau script bash pour automatiser la création des fichiers que je présente ici. Tu trouveras des explications ici

Tu peux aussi suivre cette discussion dans laquelle j'aide actuellement utodeb à installer la 12.10 sur un Toshiba où il ne peut utiliser aucun support externe comme amorce, et où il a maintenant des difficultés à installer grub 2 à la place de grub legacy.

Je suis à ta disposition pour de plus amples informations.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#18 Le 22/05/2013, à 16:56

tutoux

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

merci Arbiel,
j'essaye de trouver une solution à la question posée ici :
http://forum.ubuntu-fr.org/viewtopic.ph … #p13632301
si ça t'inspire pour une réorientation :-)
merci d'avance
tutoux

Hors ligne

#19 Le 22/05/2013, à 18:22

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Dans la discussion que tu références,

tutoux a écrit :

premier objectif : être capable de redémarrer rapidement un pc dans le cas où le disque dur lâche : remplacement du disque et réinstallation complète de la dernière image sauvegardée : il me semble que clonezilla pourrait intervenir.

Si le disque est devenu inutilisable, il faut effectivement le remplacer, et y refaire les partitions nécessaires. A voir par ailleurs.

Si par contre, c'est uniquement le système présent sur le disque dur qui est devenu inexploitable, il suffit que le disque de secours soit branché sur un port USB et que le PC à réparer puisse amorcer à partir d'un support externe, ce qui est maintenant certainement le cas le plus général. Attention quand même à l'introduction de l'architecture GPT à côté de l'architecture msdos, qui complexifie vraisemblablement (?) la réalisation de ton objectif.

grub 2 sait amorcer le PC à partir de l'image iso de clonezilla. C'est d'ailleurs, si j'ai bonne mémoire (il me suffirait de me reporter à ce que j'ai écrit), clonezilla que je prends comme exemple dans la présentation du script. J'avais commencé à investiguer le problème, car je veux répliquer un système mis au point sur mon PC vers d'autres PC, mais j'ai pour l'instant abandonné. Pour faire les choses correctement, il faut en effet fixer de plus nombreux paramètres que ceux que j'ai mentionnés dans mon exemple, pour que Clonezilla restaure au démarrage la partition cible. Un des problèmes que tu vas rencontrer est la modification de cette partition cible. En effet Clonezilla restaure a priori la partition qui a été préalablement sauvegardée, et il faut modifier à la main je ne sais plus exactement quel paramètre dans quel fichier pour viser une autre partition, ce qui sera vraisemblablement ton cas, car rien ne permet d'affirmer que les configurations des PC cibles seront toujours identiques les unes avec les autres.

J'ai pour l'instant remplacé Clonezilla par GParted. Bien sûr, je dois conserver sur une partition le système tel que je veux le répliquer. Je fais l'opération sur mon PC vers un boîtier USB dans lequel j'installe le disque du PC cible. Mais je rencontre les problèmes suivants, indépendants de la méthode utilisée, Clonezilla ou GParted.

1) la réplication fait que le ou les utilisateurs définis sur le système source sont reconduits sans changement sur le système cible
2) en toute logique, le fichier initrd.img devrait être reconstruit sur le PC cible dans la configuration ne peut être la même que sur le PC source ; cela ne m'a pour l'instant pas posé de problème, je sais qu'un fichier initrd.img non conforme à la configuration sur laquelle il est utilisé peut amener des difficultés
3) et bien sûr, il faut modifier les fichiers fstab, sauf à ce que les étiquettes des partitions montées au démarrage soient uniformisées, auquel cas l'utilisation de LABEL=<étiquette> au lieu de UUID=<uuid> permet d'avoir un fichier fstab unique (il est possible d'apposer une étiquette à la partition swap et de l'utiliser dans fstab).

La documentation de Clonezilla indique qu'elle est capable de restaurer par le réseau simultanément de nombreux PC. Rien n'est dit sur la manière dont sont résolus les points que j'ai évoqués ci-dessus.

Mais, bien sûr, tu peux garder autant d'images différentes que de PC cibles potentielles de la restauration, mais je ne pense pas que ce soit ton objectif.

Je n'ai rien à dire sur ton deuxième objectif.

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#20 Le 03/04/2014, à 12:33

Aku

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour,

Après avoir suivis votre tuto de plusieurs manière différentes j'ai finis pas le suivre à l'identique mais je rencontre quelques difficultés. J'ai donc téléchargé l'iso de clonezilla et l'ai renommé comme dans votre tuto : clonezilla-live-20120127-oneiric.iso
Au démarrage dans le grub apparait donc le nom de l'iso mais quand je tempe de le demander le message d'erreur suivant est visible :
error : unknown command 'iso_boot'
je suppose que c'est une erreur dans le script mais je ne comprend pas d'où cela proviens

Pouvez vous m’apporter votre aide ?

Merci par avance

Hors ligne

#21 Le 03/04/2014, à 21:00

Aku

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

bonjour,

après avoir modifier le fichier custom.cfg de la façon suivante :
avant :

source ${prefix}/greffons/config.menu.cfg
submenu 'clonezilla-live-20120127-oneiric' {iso_boot /amorces/clonezilla-live-20120127-oneiric.iso /amorces/clonezilla-live-20120127-oneiric.loopback.cfg}

apres :

source ${prefix}/greffons/iso.source.cfg
submenu 'clonezilla-live-20120127-oneiric' {iso_boot /amorces/clonezilla-live-20120127-oneiric.iso /amorces/clonezilla-live-20120127-oneiric.loopback.cfg}

une nouvelle erreur a fait son apparition  :

error : no such device: /amorces/clonezilla-live-20120127-oneiric.iso.
L'image à partir de laquelle il faut amorcer le pc,
/amorces/clonezilla-live-20120127-oneiric.iso, ne ce trouve sur aucun des supports actuellement raccordés à l'ordinateur.

Dernière modification par Aku (Le 03/04/2014, à 21:05)

Hors ligne

#22 Le 04/04/2014, à 18:47

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour Aku

Ce doit être un problème de nommage de fichier. Pour que grub trouve ton fichier /amorces/clonezilla-live-20120127-oneiric.iso, il faut que celui-ci se trouve dans un répertoire nommé "amorces" présent à la racine de l'une de tes partitions.

Ce nommage présentant quelques difficultés, j'ai écrit, depuis l'ouverture de la présente discussion, pour automatiser la création des fichiers dont il est question ici, un script que tu trouveras à cette adresse

Arbiel


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#23 Le 05/04/2014, à 14:49

Aku

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour,

Tous d'abord merci pour ta réponse.
j'ai commencer à essayer ton script, cependant j'ai une erreur qui ce produit dès le début.
Je suppose que cela viens du fait que je n'utilise pas d'interface graphique ..
Le message suivant s'affiche :
Erreur fatale : le mode graphique nécessite zenity

Hors ligne

#24 Le 05/04/2014, à 18:16

Arbiel

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Installe zenity, par exemple avec synaptic.


Arbiel Perlacremaz
Dell Vostro 3550 Ubuntu 12.04 32 bits

Hors ligne

#25 Le 06/04/2014, à 09:27

Aku

Re : [Tuto] utiliser Grub2 pour amorcer une image iso depuis le disque dur

Bonjour,

C'est bon j'ai fini de tester ton script en version 2.
Quand je vais dans le grub je choisis donc clonezilla, j'arrive donc dans le menu de clonezilla, mais quand je décide de le lancer ( clonezilla live (default settings, vga 800 X 600))
error : file not found
à n'y rien comprendre >< je vais essayer avec un autre iso pour voir ...

Hors ligne

Haut de page ↑