Bonsoir
Je m'interroge sur ce qu'il convient de faire lorsque la configuration n'est pas conforme à ce qui est nécessaire pour que tout se passe bien (absence de custom.cfg, de loopback.cfg ou du répertoire grub).
Automatiser ces ajouts permet à l'utilisateur de ne pas avoir à intervenir à la main pour réaliser ces compléments, mais cela ne lui permet pas de toucher du doigt le fonctionnement de l'ensemble ni, probablement, de pouvoir investiguer de manière autonome si un problème survient. Ne faudrait-il pas plutôt lui indiquer quelles actions entreprendre et les contrôles à effectuer avant de les entreprendre ?
custom.cfg
Apparemment le script Python rencontre des difficultés pour déceler la présence de "custom.cfg" dans le fichier grub.cfg (attention aux appels que l'utilisateur aurait pu commenter et donc rendre ineffectifs malgré la présence de "custom.cfg" dans le fichier). Si le script ne trouve pas trace de cet appel, ne pourrait-il pas se contenter d'ouvrir une fenêtre "gedit" avec une proposition de mise à jour du fichier et demander à l'utilisateur de la vérifier et de la valider ? Et peut-être l'utilisateur s'apercevrait-il alors qu'il n'a pas choisi le bon répertoire grub.
loopback.cfg
Le mieux que l'on puisse faire dans l'immédiat est de prévenir l'utilisateur de cette absence et de lui proposer la création d'un tel fichier à partir d'une source qui peut être un fichier grub.cfg trouvé dans l'iso ou à défaut, en supposant l'image iso montée en /cdrom, quelque chose comme
set titre="Libellé à afficher dans le menu de grub"
set noyau="chemin d'accès au noyau dans le fichier iso actuellement monté en /cdrom"
set options="liste des options spécifiques à passer au noyau et à déterminer en fonction de la distribution"
set initrd="chemin d'accès à initrd dans le fichier iso actuellement monté en /cdrom"
menuentry "${titre}" {
set gfxpayload=keep
linux ${noyau} ${options} --
initrd ${initrd}
}
L'utilisation d'un fichier grub.cfg de l'image iso en lieu et place d'un fichier loopback.cfg présente les mêmes risques que la mise à jour par update-grub. Les hypothèses retenues lors de l'écriture de ce fichier grub.cfg ne sont éventuellement pas vérifiées dans l'environnement de démarrage. Le script Python peut tenter d'enlever toutes les lignes qui précèdent la première ligne "menuentry" ou "submenu", mais le plus simple me semble être de présenter à l'utilisateur le fichier grub.cfg tel quel, dans une fenêtre "gedit" en lui demandant de l'adapter en fonction de son environnement. À noter que les lignes "linux" et "initrd" ne présentent pas de risque d'incohérence.
En l'absence de tout fichier loopback.cfg (présent dans l'iso ou élaboré par l'utilisateur - constitution d'une bibliothèque au fil des retours des utilisateurs ? -), le démarrage de l'iso peut être tenté avec memdisk, mais il n'y aura plus aucune possibilité pour modifier les paramètres à passer au noyau par la ligne "linux". Je dois faire des tests sur ce point avant d'aller plus loin.
Mais il faut garder à l'esprit que le démarrage direct à partir d'un fichier iso n'est possible que si ce fichier iso contient les modules nécessaires, ce qui n'est pas systématique.
Remarque : quoi que pense Laërte, je ne suis guère expert en la matière et mes propos peuvent fort bien être erronés.
répertoire grub
Je ne sais si une telle hypothèse est réaliste, sauf à envisager l'exécution dans un contexte Windows, auquel je ne connais pratiquement rien. Dans un contexte GNU/Linux, le mieux me semble être d'arrêter l'exécution du script.
présence de caractères parasites dans le chemin d'accès aux fichiers (espaces, tabulations, apostrophes, … )
Il faudrait passer les fonctions grub (iso_boot et amorce_iso) de 2 à 4 paramètres, les deux premiers (le premier surtout) pour permettre à l'utilisateur de savoir à quelle distribution correspond chaque ligne du menu, et les deux derniers étant le nom des liens créés sans caractères parasites. J'opterais a priori pour des liens physiques dont je suis certain que grub sait les gérer, et non pour des liens symboliques, pour lesquels j'ai un doute, ces liens étant des objets systèmes, et grub n'est pas linux. De tels liens ne peuvent pas être créés sur des partitions FAT, mais peuvent l'être sur des partitions NTFS. Il convient donc de ne les créer que s'ils sont nécessaires, et refuser l'opération si elle est nécessaire et que la partition est en FAT.
Arbiel