Bonjour
Laërte a écrit
Après vérification, la commande grub-editenv n'est utile que lorsque l'iso est une iso temporaire.
Oui, le problème ne concerne que l'exécution temporaire d'un fichier iso. Voici quelques explications que j'espère, bien qu'un peu longues, être suffisamment claires.
L'exécution temporaire s'appuie sur la variable d'environnement de grub que j'ai nommée "amorceiso". Les variables d'environnement de grub sont rassemblées dans le fichier grubenv. grub lui-même utilise la variable "recordfail" pour mémoriser le fait que la procédure de démarrage réussit ou échoue, de sorte que, au démarrage suivant un échec, la procédure se déroule différemment, et donc qu'elle ait des chances d'aboutir, permettant ainsi à l'utilisateur de disposer d'un système opérationnel pour analyser et potentiellement réparer ce qui n'a pas fonctionné.
Il se trouve que grub ne sait pas écrire sur un volume logique LVM (l'utilisation de RAID implique, je crois, celle de LVM) ni sur les systèmes de fichiers que j'ai mentionnés au point #60. À chaque démarrage, grub enregistre la réussite ou l'échec de la procédure de démarrage. Ayant comme objectif de migrer mon système sur LVM, je suis en train de faire des tests dans ce sens, et c'est ainsi que j'ai découvert cette limitation de grub.
L'exécution temporaire d'un fichier iso est déclenchée par le fait que la variable d'environnement "amorceiso" est positionnée à la valeur "true", ce qui est effectué dans ton script par la traduction en python de la commande bash "grub-editenv". Le script grub "fonctions_iso.cfg" la remet à la valeur "false" pour rendre l'exécution effectivement temporaire. Mais si grub ne sait pas écrire dans le fichier grubenv, la variable reste à la valeur "true" et le démarrage par le fichier iso devient non seulement permanent, mais systématique avec deux inconvénients :
1/ le retour à une situation "normale" nécessite une bonne connaissance du fonctionnement de nos scripts et des commandes à exécuter pour remettre "amorceiso" à la valeur "false"
2) en cas d'échec de la procédure de démarrage par le fichier iso, il faut alors disposer d'un autre support (CD-Rom, clé USB, disque externe, …) pour démarrer et se trouver en position pour réparer, avec bien évidemment la même difficulté que dans le cas précédent.
Je suis en train de tester une modification de "fonctions_iso.cfg" pour essayer au moins d'éviter le cas 2. L'idée est de demander à l'utilisateur, lorsque je m'aperçois que grub n'a pas réussi à réécrire dans grubenv, s'il veut amorcer avec le fichier iso, ou l'ignorer. Je suis obligé de prévoir un tel contournement même si tu sais éviter de tomber dans ce piège, l'utilisation de "fonctions_iso.cfg" pouvant avoir été mise en œuvre à la main sans passer par ton script, ou en passant par mon script bash, ou sa version actuelle s'il me prenait l'idée de le modifier malgré la disponibilité du tien.
Laërte a écrit
Est-ce que le reste du script fonctionne chez toi, ou bien est-il complètement inutilisable dans le cas de partition /boot sur LVM ou RAID ?
Petite précision : si dans la plupart des cas, le répertoire grub est dans la partition /boot, ce n'est pas systématiquement le cas. Il s'agit donc plutôt de /boot/grub.
Je n'ai pas encore eu réellement le temps de tester, et surtout, mon répertoire grub étant sur LVM, je ne veux pas tester tant que subsistent les risques de bouclage que j'ai mentionnés plus haut.
Laërte a écrit
Je vais me renseigner pour comment détecter LVM ou le type de système de fichier en python.
En bash, la commande grub-probe permet de déterminer sur quel support se trouve grubenv, ou la nature du système de fichier. Si ${grubdir} est le répertoire en question
disque=$(sudo grub-probe --target=disk "${grubdir}")
syst_fic=$(sudo grub-probe --target=fs "${grubdir}")
Si ${disque} commence par /dev/mapper, /dev/dm ou /dev/md, ou dans le cas contraire, si ${syst_fic} est l'un des systèmes de fichiers du #60, il faut refuser la demande d'exécution temporaire.
Laërte a écrit
Est-ce que quelqu'un sait comment monter une partition sans avoir les droits root ?
A priori
man mount a écrit
The non-superuser mounts.
Normally, only the superuser can mount filesystems. However,
when fstab contains the user option on a line, anybody can mount
the corresponding system.
Thus, given a line
/dev/cdrom /cd iso9660 ro,user,noauto,unhide
any user can mount the iso9660 filesystem found on his CDROM
using the command
mount /dev/cdrom
or
mount /cd
For more details, see fstab(5). Only the user that mounted a
filesystem can unmount it again. If any user should be able to
unmount, then use users instead of user in the fstab line. The
owner option is similar to the user option, with the restriction
that the user must be the owner of the special file. This may be
useful e.g. for /dev/fd if a login script makes the console user
owner of this device. The group option is similar, with the
restriction that the user must be member of the group of the
special file.
Laërte a écrit
Créer le fichier loopback n'est pas nécessaire
Ceci n'est vrai que si l'iso contient le fichier loopback.cfg, ce qui n'est pas garanti.
Babdu89 a écrit
Pour le français, j'ai ajouté,
locale=fr_FR bootkbd=fr console-setup/layoutcode=fr console-setup/variantcode=oss
Comment modifier pour le clavier bépo ? Et ceci ne pourrait-il pas être déduit par analyse du système actif lors de l'exécution du script ?
Laërte a écrit
Quant aux traductions française, j'avais prévu le coup, une entrée dans le menu "Loopback" de la fenêtre permet de les ajouter automatiquement.
Le plus simple pourrait être l'ajout dans custom.cfg d'une ligne
glob_options="locale=fr_FR bootkbd=fr console-setup/layoutcode=fr console-setup/variantcode=oss"
et d'ajouter à la fin de chaque ligne "linux" ou "linux16" du fichier loopback.cfg
${glob_options}
Enfin, Babdu89 avait trouvé une faille dans certaines distributions lorsque le chemin d'accès au fichier iso, ou le nom du fichier iso contient des espaces (tabulations ?). Cette faille résulte d'erreurs non pas du script, mais de la distribution elle-même, dans laquelle il manque l'encadrement de variables par une paire de ". J'avais prévu de créer un lien physique à la racine de la partition dans laquelle se trouve le fichier, caché, de nom identique à l'inode du fichier iso (ce qui en garantit l'unicité et l'absence de caractères susceptibles de perturber le démarrage de la distribution).