#26 Le 09/11/2013, à 21:17
- Arbiel
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir
@Babdu89
Merci pour tous les tests que tu fais et qui me sont bien utiles pour mettre au point ce script.
Il y a effectivement un problème avec les noms qui contiennent des espaces, qu'il s'agisse du nom du fichier iso ou de l'un quelconque des répertoires dans la hiérarchie desquels il se trouve.
La modification est plus délicate que j'ai initialement cru ; ainsi. après avoir modifié le script pour traiter le problème, j'ai lancé hybryde fusion, avec un fichier nommé "Hybryde Fusion-release-live-dvd-i386.iso" (un espace entre Hybryde et Fusion) pour constater l'échec après la présentation du premier écran de fusion.
Pour l'instant, il faut proscrire la présence d'espaces.
Je réfléchis à une solution.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, 24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#27 Le 09/11/2013, à 23:26
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir.
@ Arbiel
Du nouveau aussi sur le sujet de la clé "grub"...
http://forum.ubuntu-fr.org/viewtopic.ph … #p15151381
Ah!! , autre souci avec le script. Le démarrage des iso en sessions live, se fait en anglais avec clavier querty. Ceci même avec les iso francophones.
Y a t'il moyen de passer des paramètres quelque part, pour que au moins le clavier soit en azerty .
Ou bien, comment faire apparaître ce panneau au démarrage?
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#28 Le 10/11/2013, à 22:44
- Arbiel
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir
@Babdu89
J'avais bien noté tes remarques relatives à l'anglais et au clavier qwerty. Autant que je puisse me souvenir, les clés créées par Unetbootin présentent le même problème. J'imagine que la présentation en français résulte de l'intervention de Multisystème, dont j'ignore tout du fonctionnement interne. Et je suis également surpris que les fichiers iso francisés ne proposent pas eux-mêmes le menu grub en français et le clavier azerty.
Et en supposant qu'il suffise de passer des paramètres au noyau, je ne suis pas un expert de cette manipulation. J'en comprends la syntaxe, mais je ne sais pas définir ces paramètres par moi-même.
Pour l'affichage des 4 lignes "Essayer …", "Installer …", …, le script affiche les instructions pour grub intégrées dans le fichier iso, qu'il est aisé de traduire en français. Par contre, le problème est beaucoup plus important lorsque grub n'est pas le lanceur utilisé dans l'image iso, et je ne sais pas le résoudre facilement. C'est d'ailleurs la raison pour laquelle je n'ai pas encore trouvé comment amorcer Manjaro.
On constate aussi, dans l'écran que tu as publié, que Multisystème propose l'utilisation des touches de fonction F1 à F6 et insère une ligne de menu supplémentaire, "Démarrer sur le premier disque".
Dans la méthode que je présente ici, c'est grub qui fait le travail. Je ne sais pas le faire réagir aux touches de fonction. Pour ce qui est de la ligne de menu "Démarrer sur le premier disque", elle ne me paraît indispensable :
avec le choix 3 du dernier écran du script, les lignes sont ajoutées au menu de grub et l'utilisateur dispose, en même temps que les images iso, de toutes les choix créés par "update-grub"
et, en refusant les choix de ce dernier écran, les modifications apportées à grub ne sont pas activées
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, 24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#29 Le 10/11/2013, à 23:58
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir.
@ Arbiel .
Non non , l'écran montré ci-dessus n'est pas celui du Multisystem...
C'est celui de bien des iso Ubuntu lancées en session live CD ou usb. Lorsque que l'on appui sur une touche du clavier dès apparition de l'écran ci-dessous.
Écrans inaccessibles avec le clés faites par UnetBootin, comme tu le signales.
Il est vrais que toi tu lances tes iso sans clé ni CD, donc tu ne vois pas ces écrans...
Voir la doc
http://doc.ubuntu-fr.org/live_cd
Cela permet de passer des paramètres qui sont proposés par les indications de cette fenêtre.
Alors passer les paramètres à grub, (où à ce qui prend le relai derière grub) pour qu'il lance l'iso avec clavier et bureau en français...
J'ai bien essayé de "bidouillé" les fichiers <nom de l'iso.loopback.cfg> d'iso francophone. Ceci en m'inspirant de ce que j'ai pu trouvé dans le fichier grub.cfg d'une de mes clés MultiSystem .
Mais comme je n'y connais rien en code, au mieux l'iso se lance sans tenir compte des modifs, démarre et reste coincé sur Plymouth (logo Ubuntu avec les points qui clignotent) . Où j'ai un message d'erreur .
busybox ,ou un truc comme çà .... J'ai testé sur des 12.04 français et anglais. voila le message .
Voici la partie du fichier grub.cfg du MultiSystem concerné. Lancement de l'iso (MultiSystem basé sur Ubuntu 12.04) en français et en anglais .
#MULTISYSTEM_MENU_DEBUT|19-08-2013-22:46:04-877277442|ms_lts_precise_r7.iso|multisystem-icon|687Mio|
menuentry "MultiSystem live French (toram)" {
search --set -f "/ms_lts_precise_r7.iso"
loopback loop "/ms_lts_precise_r7.iso"
linux (loop)/casper/vmlinuz toram root=UUID=F362-BAB9 iso-scan/filename=/ms_lts_precise_r7.iso debian-installer/language=fr keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode=oss ignore_uuid boot=casper noprompt quiet splash --
initrd (loop)/casper/initrd.lz
}
menuentry "MultiSystem live English (toram)" {
search --set -f "/ms_lts_precise_r7.iso"
loopback loop "/ms_lts_precise_r7.iso"
linux (loop)/casper/vmlinuz toram root=UUID=F362-BAB9 iso-scan/filename=/ms_lts_precise_r7.iso debian-installer/language=en keyboard-configuration/layoutcode=us ignore_uuid boot=casper noprompt quiet splash --
initrd (loop)/casper/initrd.lz
}
#MULTISYSTEM_MENU_FIN|19-08-2013-22:46:04-877277442|ms_lts_precise_r7.iso|multisystem-icon|687Mio|
Ce dont je me suis inspiré, pour tenter le lancement en français ...
linux (loop)/casper/vmlinuz toram root=UUID=F362-BAB9 iso-scan/filename=/ms_lts_precise_r7.iso debian-installer/language=fr keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode=oss ignore_uuid boot=casper noprompt quiet splash --
Les iso sont lancées depuis le menu du MultiSystem (menu grub customisé) en choisissant l'entrée qui va bien. Mais çà n'affiche pas les fenêtres montrées plus haut. Donc c'est quand même limité (clavier et bureau en français), on ne peut pas appliquer les paramètres proposés dans ces fenêtres .
Quoique si je me souvient bien il y a quelque chose à faire dans les menus graphiques du MultiSystem pour passer certains réglages a grub .
Mais ce n'est pas notre propos . Voila celui de ma clé.
Alors, j'avais bien essayé de modifier le fichier loopback.cfg comme ceci, en ajoutant deux menuentry, à l'iso ubuntu-12.04-desktop-i386-fr.iso. mais avec les résultats négatifs décrits plus haut...
menuentry "Try Ubuntu without installing" {
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/ubuntu-12.04-desktop-i386-fr.iso debian-installer/language=fr keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
menuentry "Try Ubuntu without installing" {
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/ubuntu-12.04-desktop-i386-fr.iso debian-installer/language=fr keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
De quoi j'me mèle ?. Moi qui n'y connais rien en code, c'est forcément pas bon ... Laissons faire les spécialistes .
Si çà peut de donner des idées .
@+. Babdu89 .
Dernière modification par Babdu89 (Le 11/11/2013, à 00:56)
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#30 Le 14/11/2013, à 09:10
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonjour.
Du nouveau ici, avec l'utilisation de ce script sur la "clé usb Grub" de Laërte.
http://forum.ubuntu-fr.org/viewtopic.ph … #p15185991
Merci Arbiel.
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#31 Le 19/11/2013, à 23:19
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir.
Pour le lancement des sessions live des iso en français; voir ici
http://forum.ubuntu-fr.org/viewtopic.ph … #p15249921
Et posts suivants .
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#32 Le 21/11/2013, à 12:53
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Même problème avec la clé Grub, j'ai déplacé mes isos pour qu'elle soit dans un chemin d'accès sans espace.
Hors ligne
#33 Le 01/02/2014, à 18:05
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@Arbiel :
Pour les /boot/grub/grub.cfg : c'est quoi le contenu ?
D'ailleurs si tu pouvais me préciser le contenu de tout les fichiers de conf', ce serait parfait. J'apprend à coder en python, donc dès que j'aurais appris comment manipuler des fichiers, je m'attellerais à une transcription de ton script en python avec une interface graphique grâce à tkinter (en attendant de savoir utiliser Qt...)
Mais pour ça, il me faut le contenu du grub.cfg, du fonction_iso.cfg et du custom.cfg (ou à quoi ça correspond, si le contenu se modifie --> Je pense au custom.cfg qui contient le lien vers les isos).
Merci !
Hors ligne
#34 Le 02/02/2014, à 22:49
- Arbiel
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir
@ Laërte
J'ai bien vu ta demande et je viendrai t'apporter des informations quand je disposerai d'un peu plus de temps. C'est une bonne idée d'envisager de réécrire ce script en python.
N'hésite pas à me relancer dans une bonne quinzaine de jours si tu crains que j'aie oublié.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, 24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#35 Le 03/02/2014, à 13:39
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonjour.
@ Laërte
Si çà peut t'aider, voici le contenu des fichiers qui t'intéresse chez moi.
Pour le fichier /boot/grub/grub.cfg
Il faut, si çà n'y est pas déjà, ajouter ceci en fin de fichier;
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
Pour le fichier /boot/grub/greffons/fonctions_iso.cfg;
#######################################################################################################################
# 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 nom du fichier iso, chemin d'accès compris, dans la partition où il se trouve, en commençant par /
# paramètre ${2}, facultatif : idem pour le 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
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
}
function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
if ${amorceiso}; then
set amorceiso=false
save_env amorceiso
if ! keystatus --ctrl; then
if ! keystatus --shift; then
set image_iso=
set iso_path="${1}"
set iso_file="${1}"
if [ -e "${1}" ]; then set image_iso="${root}"; else search --file --set=image_iso --no-floppy "${1}"; fi
loopback iso (${image_iso})${1}
set root=iso
if [ -e "${2}" ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy "${2}" ; fi
export iso_path
export iso_file
export root
configfile "(${loopcfg})${2}"
fi
fi
fi
}
Pour le fichier /boot/grub/custom.cfg;
source ${prefix}/greffons/fonctions_iso.cfg
submenu "trusty-desktop-i386_32_01_2014" {iso_boot "/iso-linux/14.04/trusty-desktop-i386_32_01_2014.iso" "/iso-linux/14.04/trusty-desktop-i386_32_01_2014.loopback.cfg"}
submenu "boot-repair-disk-32bit" {iso_boot "/iso-linux/BRD/boot-repair-disk-32bit.iso" "/iso-linux/BRD/boot-repair-disk-32bit.loopback.cfg"}
submenu "Lubuntu-trusty-desktop-i386" {iso_boot "/iso-linux/14.04/Lub/trusty-desktop-i386.iso" "/iso-linux/14.04/Lub/trusty-desktop-i386.loopback.cfg"}
submenu "Xubuntu-24_12_2013 trusty-desktop-i386" {iso_boot "/iso-linux/14.04/xub/24_12_2013/trusty-desktop-i386.iso" "/iso-linux/14.04/xub/24_12_2013/trusty-desktop-i386.loopback.cfg"}
submenu "Ubuntu_Gnome-trusty-desktop-i386" {iso_boot "/iso-linux/14.04/Ubu-Gnome3/trusty-desktop-i386.iso" "/iso-linux/14.04/Ubu-Gnome3/trusty-desktop-i386.loopback.cfg"}
submenu "Ubuntu-trusty-desktop-i386" {iso_boot "/iso-linux/14.04/trusty-desktop-i386.iso" "/iso-linux/14.04/trusty-desktop-i386.loopback.cfg"}
submenu "Emmabuntus2-desktop-12.04.1-1.03" {iso_boot "/iso-linux/Emmabuntus2-desktop-12.04.1-1.03.iso" "/iso-linux/Emmabuntus2-desktop-12.04.1-1.03.loopback.cfg"}
submenu "ubuntu-12.04.3-desktop-i386" {iso_boot "/iso-linux/ubuntu-12.04.3-desktop-i386.iso" "/iso-linux/ubuntu-12.04.3-desktop-i386.loopback.cfg"}
submenu "lubuntu-12.04-desktop-i386" {iso_boot "/iso-linux/lubuntu-12.04-desktop-i386.iso" "/iso-linux/lubuntu-12.04-desktop-i386.loopback.cfg"}
submenu "linux-secure-13.04-32bit" {iso_boot "/iso-linux/linux-secure-13.04-32bit.iso" "/iso-linux/linux-secure-13.04-32bit.loopback.cfg"}
submenu "boot-repair-disk-32bit" {iso_boot "/iso-linux/boot-repair-disk-32bit.iso" "/iso-linux/boot-repair-disk-32bit.loopback.cfg"}
submenu "lubuntu-13.10-desktop-i386" {iso_boot "/iso-linux/lubuntu-13.10-desktop-i386.iso" "/iso-linux/lubuntu-13.10-desktop-i386.loopback.cfg"}
submenu "xubuntu-13.10-desktop-i386" {iso_boot "/iso-linux/xubuntu-13.10-desktop-i386.iso" "/iso-linux/xubuntu-13.10-desktop-i386.loopback.cfg"}
submenu "ubuntu-13.10-desktop-i386" {iso_boot "/iso-linux/ubuntu-13.10-desktop-i386.iso" "/iso-linux/ubuntu-13.10-desktop-i386.loopback.cfg"}
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#36 Le 09/03/2014, à 16:58
- Vaykadji
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@Babdu89 :
Normalement, en BASH, tu peux ajouter des "guillemets" à peu près où tu veux pour que les espaces soient pris en compte tels quels.
Par exemple, un script bash lira
Ubuntu 13.04
comme ceci : "Ubuntu" "13.04" (deux choses séparées donc).
Alors qu'il va lire
"Ubuntu 13.04"
comme "Ubuntu 13.04" (une seule chose).
Dernière modification par Vaykadji (Le 09/03/2014, à 17:01)
Hors ligne
#37 Le 09/03/2014, à 17:13
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@Babdu89 :
Normalement, en BASH, tu peux ajouter des "guillemets" à peu près où tu veux pour que les espaces soient pris en compte tels quels.
Par exemple, un script bash lira
Ubuntu 13.04
comme ceci : "Ubuntu" "13.04" (deux choses séparées donc).
Alors qu'il va lire
"Ubuntu 13.04"
comme "Ubuntu 13.04" (une seule chose).
Bonjour, et merci.
Mais c'est à Arbiel qu'il faut que tu t'adresses. C'est lui qui écrit le script. Moi je suis bien incapable d'écrire la moindre ligne de code, donc le moindre script. Je ne suis qu'utilisateur/testeur de ce qu'écrivent les spécialistes.
Mais, j'ai bien compris la manip à faire dans les scripts. Merci
@+. Babdu89 .
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#38 Le 07/04/2014, à 20:54
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@Vaykadji:
En bash, oui, mais aparement ce n'est pas le cas de GRUB. J'ai essayé en modifiant les fichiers manuellement et ça ne marche pas mieux.... Le problème ne semle donc pas venir du script, mais de GRUB lui-même ce qui est un peu plus embêtant... Mais merci pour ton aide. Si tu as une autre idée je suis toute ouïe !
Hors ligne
#39 Le 07/04/2014, à 22:43
- Zakhar
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Intéressant ça, je ne savais pas que Grub savait faire cela... je vais m'y pencher de plus près !
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#40 Le 29/04/2014, à 12:42
- Babdu89
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonjour.
@ tout le monde et surtout Arbiel ...
Il se passe des choses intéressantes ici aussi .
http://forum.ubuntu-fr.org/viewtopic.ph … #p16750241
En utilisant Grub4Dos, depuis un W$ XP, lancer des session live Linux d'iso stockées dans la partition racine de XP , sans avoir à passer par le Bios pour changer l'ordre de boot de la machine.
Merci Arbiel, car sans ce que tu as fais ici et dans le sujet de la clé "grub de Laërte" , ne me serait pas venu l'idée de chercher a transposer les manips sous Grub4Dos .
@+. Babdu89
Dernière modification par Babdu89 (Le 29/04/2014, à 14:20)
J'ai découvert Ubuntu avec la 07.10.... Et alors?!... Depuis je regarde de temps en temps si Windows marche toujours....
Hors ligne
#41 Le 07/01/2015, à 14:00
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonjour tout le monde ! (si il reste quelqu'un... )
Je me suis enfin occupé du script en python ! Il a pour l'instant un certain nombre de défaut, notamment l’absence d'interface graphique (c'est super long à coder ces trucs ! )
Sinon à part ça le fonctionnement est assez simple : je vous affiche le résultat d'un GRUBEnhancer.py -h :
usage: GRUB Enhancer [-h] -i FILE -l FILE [--grub-rep DIRECTORY]
Modifie les fichiers de configuration de GRUB afin de démarrer l'ordi sur une
image iso.
optional arguments:
-h, --help show this help message and exit
-i FILE, --iso FILE L'image iso destinée à être bootée
-l FILE, --loop FILE Le fichier loopback qui y est associé
--grub-rep DIRECTORY Un éventuel répertoire alternatif pour GRUB.
Default=/boot/grub/
Je pense que c'est clair...
J'ai de plus créé un autre script (en bash celui-là, mais je vais probablement le transcrire en python) qui va chercher dans l'iso le fichier loopback.cfg pour le copier à côté de l'iso. Pas de fichier d'aide (c'est en partie pour ça que je veux le transcrire en python), donc la syntaxe est :
LoopbackCreator.sh fichier.iso
Seul problème, il ne rajoute pas les instructions pour l'interface en français, je rajoute ça dès que j'ai un peu de temps.
Bien sûr les deux scripts nécessitent les droits root...
Pour pouvoir s'en servir il faut mettre dans un même dossier :
Le fichier GRUBEnhancer.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
import os
from os.path import join, basename
import argparse
import subprocess
def check_grub_config(rep):
"""Vérifie la configuration par défaut de GRUB"""
content = open("grub.cfg", 'r').read()
grub_config = open(join(rep, "grub.cfg"), 'r').read()
if content not in grub_config:
open(join(rep, "grub.cfg"), 'a').write(content)
def write_function(rep):
"""Écrit le fichier de fonctions de boot"""
content = open("fonctions_iso.cfg", 'r').read()
try:
os.mkdir(join(rep, "greffons"))
except: pass
open(join(rep, "greffons/fonctions_iso.cfg"), 'w').write(content)
def modify_custom(rep, iso, loop):
"""Modifie le fichier contenant les entrées du menu"""
incipit = "source ${prefix}/greffons/fonctions_iso.cfg\n"
# Ici on tente d'ouvrir le fichier custom.cfg pour y écrire l'incipit
# Si on n'y arrive pas, il n'existe pas : on le crée,
# Sinon on vérifie que l'incipit n'est pas déjà présent et on le rajoute le cas échéant.
try:
custom = open(join(rep, 'custom.cfg'), 'r').read()
except IOError:
open(join(rep, 'custom.cfg'), 'w').write(incipit)
else:
if incipit in custom: pass
else:
content = incipit + custom
open(join(rep, 'custom.cfg'), 'w').write(content)
# Le chemin d'accès à l'iso à partir de / n'est pas forcément le même
# que celui à partir de la racine de la partition.
iso = find_path(iso)
loop = find_path(loop)
iso_name = basename(iso)
config = '\tsubmenu "'+ iso_name + '" {iso_boot "' + iso + '" "' + loop + '"}\n'
open(join(rep, 'custom.cfg'), 'a').write(config)
def find_path(path):
"""Retrouve le chemin d'accès d'un fichier à partir de la racine de sa partition"""
# On utilise le programme df pour retrouver le point de montage de la partition
subprocess.call(["bash", "-c", "df " + path + " > partition"])
resultat = open("partition", "r").read()
partition = resultat.split()[-1]
os.remove("partition")
# On ne supprime que la première occurence de la partition (des fois que l'utilisateur
# toto se soit amusé à créer un dossier home/toto et à mettre ses isos dedans...
path = path.replace(partition, "", 1)
return path
### Programme principal ###
parser = argparse.ArgumentParser(description='''Modifie les fichiers de configuration de GRUB afin de démarrer l'ordi sur une image iso.''', prog='GRUB Enhancer')
parser.add_argument('-i', '--iso', required=True, metavar='FILE', help="L'image iso destinée à être bootée")
parser.add_argument('-l', '--loop', required=True, metavar='FILE', help="Le fichier loopback qui y est associé")
parser.add_argument('--grub-rep', metavar='DIRECTORY', dest='rep', default='/boot/grub/', help="Un éventuel répertoire alternatif pour GRUB. Default=/boot/grub/")
args = parser.parse_args()
print("Vérification de la configuration de GRUB...")
check_grub_config(args.rep)
print("Écriture des fonctions nécessaire aux démarrage sur une image iso...")
write_function(args.rep)
print("Modification du fichier de menu...")
modify_custom(args.rep, args.iso, args.loop)
ainsi que les deux fichier grub.cfg et fonctions_iso.cfg contenant respectivement :
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
et
#######################################################################################################################
# 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 nom du fichier iso, chemin d'accès compris, dans la partition où il se trouve, en commençant par /
# paramètre ${2}, facultatif : idem pour le 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
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
}
function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
if ${amorceiso}; then
set amorceiso=false
save_env amorceiso
if ! keystatus --ctrl; then
if ! keystatus --shift; then
set image_iso=
set iso_path="${1}"
set iso_file="${1}"
if [ -e "${1}" ]; then set image_iso="${root}"; else search --file --set=image_iso --no-floppy "${1}"; fi
loopback iso (${image_iso})${1}
set root=iso
if [ -e "${2}" ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy "${2}" ; fi
export iso_path
export iso_file
export root
configfile "(${loopcfg})${2}"
fi
fi
fi
}
Ces trois fichier doivent être impérativement dans le même dossier, le script GRUBEnhancer.py ne fonctionnera pas sinon, puisqu'il y lit le contenu qui doit être utilisé pour modifier GRUB !
Enfin le script LoopbackCreator.sh qui est plus modeste :
#!/bin/bash
# Vérification des droits root
if [ $EUID -ne 0 ];
then
echo "Ce script nécessite les droits administrateur."
exit
fi
# Vérification de la présence d'une iso existante
if [ $# -eq 1 ];
then
if [ -f $1 ];
then
iso=$1
else
echo "$1 : Ce fichier n'existe pas."
exit
fi
else
echo "Il faut préciser un fichier iso !"
exit
fi
# On monte l'iso dans un emplacement temporaire pour aller voir le contenu
echo "Montage de l'iso..."
mkdir /tmp/iso
mount $1 /tmp/iso > /dev/null 2>&1
# On copie le fichier loopback dans le dossier de l'iso
echo "Récupération du fichier loopback..."
if [ -e /tmp/iso/boot/grub/loopback.cfg ];
then
cp /tmp/iso/boot/grub/loopback.cfg ${iso%.*}.loopback.cfg
else
cp /tmp/iso/isolinux/live.cfg ${iso%.*}.live.cfg
echo -e "\033[31mAttention ce fichier est un fichier pour Isolinux ! Il convient de le traduire avant de l'utiliser.\033[0m"
fi
# On supprime les fichiers temporaires
echo "Supression des fichiers temporaires..."
umount /tmp/iso
rmdir /tmp/iso
Ce script récupère, s'il ne trouve pas le fichier loopback.cfg, le fichier live.cfg, qui semble être l'équivalent pour Isolinux. Dès qu'on aura trouvé comment booter des isos créées avec isolinux ce sera probablement ce fichier qu'on devra utiliser.
Voilà !
N'hésitez pas si vous avez des questions ou trouvez des bugs !
Hors ligne
#42 Le 07/01/2015, à 18:20
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
C'est encore moi !
J'ai décidé d'être productif aujourd'hui, donc voici mon deuxième script (celui en bash) traduit en python. Il est même plus complet encore, dans le sens ou il gère les erreurs de nom de fichier (le précédent copiait mais ne précisait pas s'il avait bien trouvé un fichier ou pas... )
Et j'ai enfin l'aide en ligne de commande !
usage: Loopback Creator [-h] iso
Extrait d'une image iso le fichier loopback permettant de la booter.
positional arguments:
iso L'image iso dont va être extraite le fichier loopback.
optional arguments:
-h, --help show this help message and exit
Donc voilà, la syntaxe est la même que précédemment, rien ne change. Sauf que je vais pouvoir l'intégrer dans l'autre plus facilement une fois que j'aurais codé l'interface graphique.
Petite précision quand même : aucun des deux scripts python ne gère les tildes ( ~ ) dans les noms de fichier. Il faut préciser le chemin complet à chaque fois. Bien sûr, les chemins relatifs sont pris en charge (par python).
Voici le script :
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import subprocess
import os
import shutil
import argparse
# Vérification des droits root
if os.geteuid() != 0:
print("Ce script nécessite les droits administrateur.")
exit()
# Initialisation des paramêtres
parser = argparse.ArgumentParser(description="Extrait d'une image iso le fichier loopback permettant de la booter.", prog="Loopback Creator")
parser.add_argument('iso', help="L'image iso dont va être extraite le fichier loopback.")
args = parser.parse_args()
# Montage de l'iso dans un emplacement temporaire pour y avoir accès
print("Montage de l'iso...")
os.mkdir("/tmp/iso")
subprocess.call("mount {} /tmp/iso".format(args.iso).split())
# Copie du fichier loopback dans le dossier de l'iso
print("Récupération du fichier loopback...")
loopback_location = "/tmp/iso/boot/grub/loopback.cfg"
live_location = "/tmp/iso/isolinux/live.cfg"
if os.access(loopback_location, os.F_OK):
copy = shutil.copy2(loopback_location, "{}.loopback.cfg".format(args.iso[:-4]))
print("Copie réalisée dans {} avec succès !".format(copy))
elif os.access(live_location, os.F_OK):
copy = copy = shutil.copy2(live_location, "{}.live.cfg".format(args.iso[:-4]))
print("Fichier loopback non trouvé. Copie du fichier live dans {} à la place.".format(copy))
print("*** Attention ! Ce fichier est un fichier pour Isolinux ! Il n'est pas utilisable en l'état avec GRUB ! ***")
else:
print("Aucun fichier trouvé.")
# Suppression des fichiers temporaires
print("Suppression des fichiers temporaires...")
subprocess.call("umount /tmp/iso".split())
os.rmdir("/tmp/iso")
Voilà ! ^^
Dernière modification par Laërte (Le 07/01/2015, à 18:21)
Hors ligne
#43 Le 08/01/2015, à 13:15
- k3c
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonjour
je vais chipoter un peu, mais je remplacerai bien, par exemple
subprocess.call("umount /tmp/iso".split())
par
code_de_retour = subprocess.call("umount /tmp/iso".split())
et on regarde si ce code_de_retour vaut 0
La doc
https://docs.python.org/2/library/subpr … ocess.call
De manière générale, c'est bien de tester le code de retour d'une opération
Debian 12 sur Thinkpad reconditionné
Hors ligne
#44 Le 08/01/2015, à 13:26
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@k3c : Tu as raison tu chipotes Mais il n'y a pas de mauvais moment pour prendre de bonnes habitudes. J'ai corrigé ma version locale, je posterai peut-être plus tard la nouvelle version (qui ajoute entre autre le support du tilde...)
Merci pour ton retour sur mon code !
Hors ligne
#45 Le 08/01/2015, à 15:11
- bruno
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
C'est quoi l’intérêt de tous ces scripts par rapport à grub-imageboot ?
#46 Le 09/01/2015, à 13:27
- Laërte
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@bruno :
Excellente question... Je ne connaissais pas grub-imageboot... Je dirais que la grosse différence c'est que les scripts peuvent fonctionner avec un répertoire grub installé sur une clef usb ou un hdd, ce qui permet une utilisation nomade de Linux. Enfin, la plus grosse partie reste à faire, à savoir ajouter une interface graphique, afin de les rendre accessibles aux débutants (ceux qui ne savent pas ce qu'est un chargeur de démarrage par exemple... )
Hors ligne
#47 Le 09/01/2015, à 14:45
- k3c
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
@bruno
Le plaisir de comprendre comment ça marche et écrire son code ?
Debian 12 sur Thinkpad reconditionné
Hors ligne
#48 Le 09/01/2015, à 15:28
- bruno
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Oui, enfin grub + syslinux (grâce à memdisk) permet depuis longtemps d'amorcer sur une image disque sans qu'il y ait besoin d’écrire de script, juste quelques lignes de configuration pour grub.
Et avec le paquet grub-imageboot c'est encore plus simple puisqu'il suffit de placer ses images dans /boot/images (ou un autre emplacement si on modifie /etc/default/grub-imageboot) et de mettre à jour grub. Cela marchera aussi parfaitement sur une clé usb ou sur n'importe quel disque où grub est installé.
Après effectivement chacun est libre de réinventer la roue
#49 Le 13/01/2015, à 01:17
- Arbiel
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Bonsoir
@bruno
Je ne sais si nous avons réinventé la roue comme tu le laisses entendre car la commande grub-imageboot n'est documentée ni dans la documentation française, ni dans les "manpages" anglo-saxones, ni dans le paquet une fois installé. La commande
grub-imageboot
reste inconnue après installation du paquet, évidemment.
Si tu as la gentillesse d'indiquer où se trouve la documentation et comment la commande se met en œuvre, je pourrai alors t'indiquer les éventuelles différences avec ce que propose Laerte, qui est la traduction en python, à titre d'exercice, d'un script bash, Celui-ci propose une interface graphique pour redémarrer le PC à partir d'une image iso, avec une éventuelle modification, à la main, du menu contenu dans l'image en question (traduction en français, adaptation du clavier). Le menu grub ainsi obtenu peut être inséré dans le menu grub initial ou au contraire n'être utilisé qu'au premier redémarrage, sans venir perturber les redémarrages ultérieurs.
grub-imageboot m'était évidemment inconnue lorsque j'ai commencé à travailler sur le sujet.
@Laerte
Je ne connais pas python. Je ne sais donc pas exactement ce que tu fais.
Il faut utiliser la fonction amorce_iso, et simplifier le fichier fonctions_iso.cfg comme indiqué ci-dessous
function amorce_iso {
########################################################################################
#
# amorçage à partir d'une image iso
# le chemin d'accès au fichier contenant l'image est passé en premier paramètre
# le chemin d'accès au fichier contenant le menu à afficher est passé en deuxième paramètre
# rappel : si le fichier "menu" ne contient pas l'ordre "menuentry", ne pas oublier de le terminer par un ordre boot
#
#######################################################################################
# pour éviter le bouclage sur la procédure
if ${amorceiso}; then
set amorceiso=false
save_env amorceiso
if ! keystatus --ctrl; then
if ! keystatus --shift; then
set image_iso=
set iso_path="${1}"
set iso_file="${1}"
if [ -e "${1}" ]; then set image_iso="${root}"; else search --file --set=image_iso --no-floppy "${1}"; fi
loopback iso (${image_iso})${1}
set root=iso
if [ -e "${2}" ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy "${2}" ; fi
export iso_path
export iso_file
export root
configfile "(${loopcfg})${2}"
fi
fi
fi
}
Les tests sur les touches "Maj" et "Ctrl" servent à éviter le lancement de l'image iso, au cas où l'utilisateur changerait d'avis après avoir demandé le redémarrage du PC ce qui n'est pas indispensable. Tu peux alors simplifier encore un peu fonctions_iso.cfg
function amorce_iso {
########################################################################################
#
# amorçage à partir d'une image iso
# le chemin d'accès au fichier contenant l'image est passé en premier paramètre
# le chemin d'accès au fichier contenant le menu à afficher est passé en deuxième paramètre
# rappel : si le fichier "menu" ne contient pas l'ordre "menuentry", ne pas oublier de le terminer par un ordre boot
#
#######################################################################################
# pour éviter le bouclage sur la procédure
if ${amorceiso}; then
set amorceiso=false
save_env amorceiso
set image_iso=
set iso_path="${1}"
set iso_file="${1}"
if [ -e "${1}" ]; then set image_iso="${root}"; else search --file --set=image_iso --no-floppy "${1}"; fi
loopback iso (${image_iso})${1}
set root=iso
if [ -e "${2}" ]; then set loopcfg=${root} ; else search --file --set=loopcfg --no-floppy "${2}" ; fi
export iso_path
export iso_file
export root
configfile "(${loopcfg})${2}"
fi
}
Enfin, pour effectivement lancer l'image iso, il faut que ton script effectue la commande
grub-editenv /boot/grub/grubenv set amorceiso=true
Enfin, le fichier grub.cfg que tu proposes est beaucoup trop particulier et n'est valable que dans le cas de la clé USB que tu as créée. Dans le cas général dans lequel il convient que tu te places, le fichier grub.cfg contient déjà l'appel de custom.cfg si celui-ci existe. S'il n'existe pas, il faut que tu le crées.
Arbiel
Dernière modification par Arbiel (Le 13/01/2015, à 01:40)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, 24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#50 Le 13/01/2015, à 07:12
- bruno
Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM
Abriel, je ne nie pas la qualité du travail effectué, je trouve simplement curieuse la méthode utilisée. Comme je l'ai déjà dit Grub permet de démarrer sur image disque grâce à memdisk. grub-imageboot n'est pas une commande mais un paquet qui permet d'utiliser cela très simplement en fournissant un script pour grub dans /etc/grub.d (là on l'on place les éléments de configuration pour grub2).