Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#176 Le 13/01/2016, à 12:05

Laërte

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Moi, il me semble surtout que tu exécute avec bash un script pour grub...
Mais je peux me tromper...

Hors ligne

#177 Le 14/01/2016, à 00:39

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir

J'ai réparé mon erreur, et j'ai testé la version 2-3 du script publiée au point 170. Cette version n'apporte qu'une légère modification par rapport à la version précédente, publiée au point 5.

La différence concerne la recherche par grub des fichiers iso et des fichiers loopback.cfg. Dans la version précédente, cette recherche n'aboutissait pas dans le cas très particulier où ces fichiers sont sur une clé USB et où le PC la voit comme un "floppy disk". Pour déterminer si tel est le cas, il faut basculer grub en mode interactif (conversationnel) et lui passer la commande ls. Dans la réponse, la clé est le périphérique (fd0) (ou fd suivi d'un chiffre) et les partitions de la clé, les périphériques (fd0,msdos1), (fd0,msdos2), …

Cette situation a été rencontrée dans le cas d'un PC dont le BIOS ne sait pas le démarrer à partir de clés USB.

@Laërte

C'est tout à fait cela. En fait j'ai publié le script fonctions_iso de grub au lieu du script amorce_iso de bash. Pour mettre à jour ton script Python, il te faudra exécuter le script du point 170 pour lui faire créer le script grub. La recopie directe des lignes du script bash ne fonctionnera pas.

Arbiel

Dernière modification par Arbiel (Le 14/01/2016, à 00:48)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#178 Le 14/01/2016, à 14:39

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour.
Çà va peut-être éclairer un souci avec la clé grub qui ne boot pas chez moi sans Plop Boot Manager...

Test du script du post#171 de ce sujet.
Os de test Ubuntu12.04.5 où est le script.
Iso Lubuntu-15.04-desktop-i386.iso . téléchargée dans une partition de stockage NTFS (/media/ISO_LINUX/) du hdd de ma machine. (Important çà , puisque il n'y a pas d'USB qui intervient.)
Nettoyage  dans /boot/grub de l'OS 12.04.5 .
suppression de /greffons et de /custom.cfg  .

Lancement du sript.
Je choisi le répertoire /boot/grub de l'Os 12.04.5
J'indique le chemin de l'iso.
Par le script. Création des fichiers dans l'Os 12.04.5
/boot/grub/greffons/fonctions.iso
/boot/grub/custom.cfg
Dans la partition de stockage  /media/ISO_LINUX/Lubuntu-15.04-desktop-i386.loopback.cfg

Contenu des fichiers;

fonctions.iso

# fonctions_iso_V2-3.cfg
# 2016_01_10 : suppression du paramètre "--no-floppy" de la commande search (certaines PC voient les clés USB comme des floppy
#######################################################################################################################
# Redémarrage en cas d'absence ou d'indisponibilité des fichiers (fichier image iso ou fichier de configuration)
function rdmge {
	echo Le PC va redémarrer dans quelques secondes
	sleep -v 10
	reboot
}
#######################################################################################################################
# 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
	rdmge
}
#######################################################################################################################
# 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.
	rdmge
 }
#######################################################################################################################
# Contrôle de l'existence des fichiers
#
function existent_fichiers {
#  recherche du fichier iso
	if [ -n "${iso_file}" ]; then
# si grub trouve le fichier ${iso_file}, alors ce fichier est sur la partition ${root} ; sinon il faut chercher où il est.
		if [ -e "${iso_file}" ]; then set image_iso=${root}; else search --file --set=image_iso "${iso_file}"; fi
	fi
	if [ -z "${image_iso}" ]; then no_iso_file "${iso_file}"; 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})${iso_file}
	set root=iso
	set loopcfg=
# recherche et introduction du menu spécifique à l'image iso considérée
	if [ -z "${sourcefile}" ]; then set sourcefile=/boot/grub/loopback.cfg; 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 "${sourcefile}" ; fi
	if [ -z "${loopcfg}" ]; then no_cfg_file "${sourcefile}";  fi
}
#######################################################################################################################
# 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
function iso_boot  {
	set image_iso=
	set iso_file="${1}"
	set iso_path="${1}"
	set sourcefile="${2}"
	existent_fichiers
	source "(${loopcfg})${sourcefile}"
}
function echec_maj_amorceiso {
#######################################################################################################################
# Cette procédure affiche le message explicatif de ce qu'il faut faire si grub ne sait pas écrire dans le répertoire
# grub pour effacer la demande de démarrage par un fichier iso
	echo "L'erreur précédente résulte d'une limitation de grub qui ne dispose pas des modules pour effacer la demande de démarrage" ;
	echo "par un fichier iso, du fait de la nature du système de fichier support de grub.cfg (le répertoire référencé" ;
	echo "par core.img tel que présenté par le rapport produit par boot-repair ou par bootinfoscript)." ;
	echo "Une fois le démarrage terminé, pour supprimer cette demande de démarrage avec ${iso_file}," ;
	echo "passer les commandes suivantes, dans lesquelles la variable grub désigne le point de montage" ;
	echo "du répertoire pointé par core.img tel que présenté par le rapport produit par boot-repair" ;
	echo "Pour démarrer le PC avec ${iso_file}, appuyer sur la touche Alt." ; 
	echo "Dans le cas contraire, appuyer sur la touche Ctrl." ;
}


function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
    if ${amorceiso}; then
		set image_iso=
		set iso_path="${1}"
		set iso_file="${1}"
		set sourcefile="${2}"
		existent_fichiers
		export iso_path
		export iso_file
		export root
		set amorceiso=false
		if save_env amorceiso ; then
			configfile "(${loopcfg})${sourcefile}"
		else
			echec_maj_amorceiso ;
			until keystatus --ctrl ; do
				sleep 1 ;
				if keystatus --alt ; then configfile "(${loopcfg})${sourcefile}"  ; fi ;
				done ;
			fi
		fi

custom.cfg

	source ${config_directory}/greffons/fonctions_iso.cfg
	submenu "lubuntu-15.04-desktop-i386" {iso_boot "/ISO_LINUX/lubuntu-15.04-desktop-i386.iso" "/ISO_LINUX/lubuntu-15.04-desktop-i386.loopback.cfg"} 

lubuntu-15.04-desktop-i386.loopback.cfg

menuentry "Try Lubuntu without installing" {
	linux	/casper/vmlinuz  file=/cdrom/preseed/lubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Install Lubuntu" {
	linux	/casper/vmlinuz  file=/cdrom/preseed/lubuntu.seed boot=casper only-ubiquity iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Check disc for defects" {
	linux	/casper/vmlinuz  boot=casper integrity-check iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Test memory" {
	linux16	/install/mt86plus
}

Redémarrage.
Au menu grub de l'Os 12.04.5 j'ai bien une entrée pour la lubuntu-15.04-desktop-i386.iso.
Sélection, validation .

Message d'erreur comme avec la clé Grub.

erreur: commande inconnue  `iso_boot'
appuyer sur une touche pour continuer...

Et çà repart en boucle.

La clé Grub et le Bios de la machine qui ne sait pas booter sur l'USB, n'étant pas en cause...

Un souci dans le script?...

Je copie le contenu du script lancé depuis chez moi.

#! /bin/bash

function ai_version () {
	echo " "
	echo "	Version 2-3 du 13/01/2016"
	echo " "
	Version_amorce_iso="2016_01_13-amorce_iso V2.3";
}

function fonctions_iso_V2.3 () {
echo '# fonctions_iso_V2-3.cfg
# 2016_01_10 : suppression du paramètre "--no-floppy" de la commande search (certaines PC voient les clés USB comme des floppy
#######################################################################################################################
# Redémarrage en cas d'"'"'absence ou d'"'"'indisponibilité des fichiers (fichier image iso ou fichier de configuration)
function rdmge {
	echo Le PC va redémarrer dans quelques secondes
	sleep -v 10
	reboot
}
#######################################################################################################################
# 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
	rdmge
}
#######################################################################################################################
# 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.
	rdmge
 }
#######################################################################################################################
# Contrôle de l'"'"'existence des fichiers
#
function existent_fichiers {
#  recherche du fichier iso
	if [ -n "${iso_file}" ]; then
# si grub trouve le fichier ${iso_file}, alors ce fichier est sur la partition ${root} ; sinon il faut chercher où il est.
		if [ -e "${iso_file}" ]; then set image_iso=${root}; else search --file --set=image_iso "${iso_file}"; fi
	fi
	if [ -z "${image_iso}" ]; then no_iso_file "${iso_file}"; 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})${iso_file}
	set root=iso
	set loopcfg=
# recherche et introduction du menu spécifique à l'"'"'image iso considérée
	if [ -z "${sourcefile}" ]; then set sourcefile=/boot/grub/loopback.cfg; 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 "${sourcefile}" ; fi
	if [ -z "${loopcfg}" ]; then no_cfg_file "${sourcefile}";  fi
}
#######################################################################################################################
# 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
function iso_boot  {
	set image_iso=
	set iso_file="${1}"
	set iso_path="${1}"
	set sourcefile="${2}"
	existent_fichiers
	source "(${loopcfg})${sourcefile}"
}
function echec_maj_amorceiso {
#######################################################################################################################
# Cette procédure affiche le message explicatif de ce qu'"'"'il faut faire si grub ne sait pas écrire dans le répertoire
# grub pour effacer la demande de démarrage par un fichier iso
	echo "L'"'"'erreur précédente résulte d'"'"'une limitation de grub qui ne dispose pas des modules pour effacer la demande de démarrage" ;
	echo "par un fichier iso, du fait de la nature du système de fichier support de grub.cfg (le répertoire référencé" ;
	echo "par core.img tel que présenté par le rapport produit par boot-repair ou par bootinfoscript)." ;
	echo "Une fois le démarrage terminé, pour supprimer cette demande de démarrage avec ${iso_file}," ;
	echo "passer les commandes suivantes, dans lesquelles la variable grub désigne le point de montage" ;
	echo "du répertoire pointé par core.img tel que présenté par le rapport produit par boot-repair" ;
	echo "Pour démarrer le PC avec ${iso_file}, appuyer sur la touche Alt." ; 
	echo "Dans le cas contraire, appuyer sur la touche Ctrl." ;
}


function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
    if ${amorceiso}; then
		set image_iso=
		set iso_path="${1}"
		set iso_file="${1}"
		set sourcefile="${2}"
		existent_fichiers
		export iso_path
		export iso_file
		export root
		set amorceiso=false
		if save_env amorceiso ; then
			configfile "(${loopcfg})${sourcefile}"
		else
			echec_maj_amorceiso ;
			until keystatus --ctrl ; do
				sleep 1 ;
				if keystatus --alt ; then configfile "(${loopcfg})${sourcefile}"  ; fi ;
				done ;
			fi
		fi'
}
	
function ai_exit () {
    exit ${1}
}

function ai_syntaxe ()
{
#	Trois éléments sont nécessaires démarrer (boot) un PC avec une image iso
#		le fichier iso en question,
#		le répertoire qui contient le fichier grub.cfg utilisé par grub lors du lancement,
#		le fichier des commandes grub spécifiques au fichier iso (les lignes du menu et les ordres correspondants)
#	Ces trois éléments sont définis dans la ligne de commande, ou, à défaut, par trois commandes "zenity
#	ce qui n'est pas vraiment ergonomique, car les fenêtres correspondantes peuvent se trouver masquées,
#	ce qui est un peu déconcertant. J'ai prévu la transcription en python, langage que je ne connais pas encore
#	et je suis par avance reconnaissant à quiconque m'apportera une aide dans cette opération.

	echo " Syntaxe : $0 [options]"
	echo " Options disposibles : "
	echo "	-d	--grub-directory	répertoire d'installation de grub"
	echo "	-h	--help			affichage de la syntaxe"
	echo "	-i	--iso-file		fichier iso avec lequel amorcer le PC"
	echo "	-l	--loopback		menu grub à présenter au démarrage"
	echo "	-r	--reboot		réamorcer avec la configuration précédente"
	echo "	-v	--version		version"
	echo " "
	echo " Exemple d'utilisation en ligne de commande : sudo bash $0.sh -d /boot/grub -i ~/isofiles/file.iso"
	echo " "
}

function que_faire () {
########################################################################################
# Présentation de la liste des options disponibles et interprétation des options sélectionnées
########################################################################################

	msg="Définir le comportement de grub au redémarrage avec l'image iso"
	msg="${msg}"$'\n'"${nf}"
	action=$({  cat <<EOF
true
r
Réamorcer immédiatement.
false
e
Continuer à travailler. Amorcer avec l'image au prochain démarrage.
false
p
Introduire l'image comme choix dans le menu grub standard.
EOF
 }  | zenity --list \
		--title "Choix du comportement de grub" \
		--text="${msg}" \
		--multiple --column="Sélection" --column="code" --column="Comportement de grub"  --hide-column=2 --radiolist \
		--print-column=2 --separator="" --width=300 --height=200 2>/dev/null)
	case ${action} in
	"r") permanent=false ; reboot=true ;; 
	"e") permanent=false ; reboot=false ;;
	"p") permanent=true ; reboot=false ;;
	"#") ai_exit 5 ;;
	esac
}
	
	
	
function param_init () {
######################################################
# Initialisation des paramètres
######################################################
	grub_dir= ;
	amorce_menu= ;
	aide=false ;
	reboot=false ;
#	whereis zenity 1>/dev/null && gui=true || gui=false ;
	OPTIND=1 ;
}

function ctrl_root () {
###########################################################
# Vérification du contexte de l'appel
###########################################################
	[ "$USER" != "root" ] &&
	{
    echo " ";
    echo " Erreur : L'amorce depuis un fichier iso nécessite les droits d'administarteur";
    echo " Avez vous oublie sudo devant le nom du script ?";
    echo " ";
	return 1;} 
return 0
}

function param_decod () {
###########################################################
# Decodage de la ligne de commande
###########################################################
	while getopts "d:i:l:hrv-:" option; do
		ol=false
# gestion des options longues avec ou sans argument
# "${OPTARG%%=*} donne comme résultat le début de l'argument jusqu'au signe "=" non compris
# la valeur donnée à l'argument est tout ce qui suit le signe "=" 
		[ "${option}" = "-" ] && opt_long="${OPTARG%%=*}" && OPTARG="${OPTARG:((${#opt_long}+1))}" && ol=true;
		${ol} && case "${opt_long}" in
			grub-directory) option="d" ;;
			iso-file) option="i" ;;
			loopback) option="l" ;;
			help) option="h" ;;
			version) option="v" ;;
			reboot) option="r" ;;
			*) ai_syntaxe ; clean_exit 1 ;;
		esac
# puis gestion des options courtes
		case $option in
			d) grub_dir="${OPTARG}" ;;
			i) amorce_iso="${OPTARG}" ;;
			l) amorce_menu="${OPTARG}" ;;
			h) ai_version && display_syntaxe && ai_exit 0 ;;
			v) ai_version && ai_exit 0  ;;
			r) reboot=true ;;
			*) ai_syntaxe && ai_exit 1 ;;
		esac
	done
}

function iso_fichier () {
###########################################################
# Calcul du nom de fichier pour grub
##########################################################	
# il s'agit ici de trouver le nom du fichier par rapport à la partition dans laquelle il se trouve
# df donne un résultat tel que :
# /dev/sda8        294155260 175789668  103423388  63% /media/Multimedia
# dont grep -o "% *\/.*$" | grep -o "\/.*$" ne retient que tout ce qui suit les espaces qui suivent
# le signe % cad ici : /media/Multimedia
	partition=$(df "${1}" | grep -o "% *\/.*$" | grep -o "\/.*$")
	if ! [ "${partition}" = "/" ]; then
#		on cherche alors dans la partition les fichiers qui ont le même inode, on ne conserve que le premier
#		et on supprime le nom de la partition pour ne renvoyer que le nom du fichier dans la partition
		sudo find -H "${partition}" -samefile "${1}" | grep -m 1 "${partition}" | sed -e "s^${partition}^^"
	else
		echo "${1}"
	fi
}

function quel_menu () {
#########################################################
# Sélection du fichier "loopback.cfg"
##########################################################
	abort=false ;
	amorce_menu="${amorce_iso%.iso}.loopback.cfg"
	if ! [[ -e "${amorce_menu}" ]] && [[ -e "/tmp/${SUDO_USER}/cdrom/boot/grub/loopback.cfg" ]]; then
		cp -T "/tmp/${SUDO_USER}/cdrom/boot/grub/loopback.cfg" "${amorce_menu}" ;
		msg="Le fichier /boot/grub/loopback.cfg du fichier iso a été recopié sur le fichier \"${amorce_menu}\"" ;
		zenity --info --title="Fichier menu grub" --text="${msg}" ;
		sudo chown "${SUDO_USER}:${SUDO_USER}" "${amorce_menu}" ;
	fi
	trouve=false  ;
	abort=false ;
	autre=false ;
	until ${trouve} ; do
		if ! [[ -e "${amorce_menu}" ]] || ${autre} ; then
			autre=false ;
			amorce_menu=$(zenity --file-selection --file-filter="*.cfg" \
			--title="Choisir le modèle pour la création du fichier que grub doit utiliser au redémarrage") ;
			! [ $((${?})) = 0 ] && return 1 ;
			fi
		zenity --text-info \
			--title="Contrôle et mise au point éventuelle du fichier de configuration de grub" \
			--width=900 --height=380 --timeout=0 --filename="${amorce_menu}" \
			--editable --ok-label="C'est le bon fichier" \
			--cancel-label="Choisir un autre modèle de fichier de configuration" 1>"/tmp/${SUDO_USER}/loopback.cfg";
			if ! [ $((${?})) = 0 ]; then
				autre=true
				else
				trouve=true
				sudo cp -fT "/tmp/${SUDO_USER}/loopback.cfg" "${amorce_menu}" ;
				sudo chown "${SUDO_USER}:${SUDO_USER}" "${amorce_menu}" ;
				fi
		done ; 
	return 0 ;
}

function quel_grub() {
########################################################################################
# Présentation de la liste des options disponibles et interprétation des options sélectionnées
########################################################################################

	msg="Attendre l'affichage des répertoires, en cours de constitution,"
	msg="${msg}"$'\n'"puis choisir le répertoire dans lequel se trouve le fichier"
	msg="${msg}"$'\n'"de configuration que grub doit utiliser pour réamorcer le PC"
	[[ -z "${grub_dir}" ]] && grub_dir=$(sudo find /  -path */grub/grub.cfg | sed -e "s^/grub.cfg^^" | while \
		read a; do echo false; echo "${a}"; done  | zenity --list \
		--title "Répertoires /grub disponibles" \
		--text="${msg}" \
		--multiple --column="Sélection" --column="Répertoire"  --radiolist \
		--print-column=2 --separator="" --width=300 --height=300 2>/dev/null)
	[[ -z "${grub_dir}" ]] && return 1 || return 0
}

function quelle_amorce () {
##########################################################
# Contrôle de la structure du fichier d'installation
#########################################################
	( [[ -z "${amorce_iso}" ]] || ! [[ -e  "${amorce_iso}" ]] ) && amorce_iso=$(zenity --file-selection \
		--file-filter="*.iso" --title="Choisir le fichier à partir duquel amorcer le PC") ;
	[[ -z "${amorce_iso}" ]] && return 1 ;
	grub_iso=$(iso_fichier "${amorce_iso}") ;
	nf=$(basename "${grub_iso}" .iso)
	! [[ -e "/tmp/${SUDO_USER}/cdrom" ]] && mkdir -p "/tmp/${SUDO_USER}/cdrom" ;
	mount -r -o loop "${amorce_iso}" "/tmp/${SUDO_USER}/cdrom" ;
	msg="Le fichier \"${amorce_iso}\" a été monté sur le point de montage \"/tmp/${SUDO_USER}/cdrom\""
	zenity --info --title="Fichier iso sélectionné pour le futur redémarrage" --text="${msg}" ;
	return 0 ;
}

function iso_reamorce () {
###########################################################
# Arrêt et redémarrage pour amorçage depuis le fichier iso
##########################################################
	! ${permanent} && sudo grub-editenv "${grub_dir}/grubenv" set amorceiso=true
	${reboot} && sudo shutdown -r now
	return 0
}

function iso_gen_custom () {
##########################################################
## Création ou mise à jour du fichier custom.cfg
##########################################################
	grep -e {config_directory} -c ${grub_dir}/grub.cfg 1>/dev/null && prefix="{config_directory}" || prefix="{prefix}"
	sudo mkdir -p /tmp/amorceiso
	touch "${grub_dir}/custom.cfg" && cat "${grub_dir}/custom.cfg" | grep -v -e amorce_iso -e "${1}" -e greffons/fonctions_iso.cfg \
		1>"/tmp/amorceiso/custom.cfg"
	{ echo -n "	"; echo "source \$${prefix}/greffons/fonctions_iso.cfg" ; } 1>"${grub_dir}/custom.cfg"
	if ${permanent}; then
		{ echo -n "	"; echo "submenu "'"'"${nf}"'"'" {iso_boot "'"'"${1}"'"'" "'"'"${2}"'"'}" " ; } 1>>"${grub_dir}/custom.cfg"
	else
		{ echo -n "	"; echo amorce_iso "${1}" "${2}" ; } 1>>"${grub_dir}/custom.cfg"
	fi
	cat "/tmp/amorceiso/custom.cfg" 1>>"${grub_dir}/custom.cfg"
	return 0
}
###################################
#
# Enregistrement des fonctions iso pour grub
#
####################################
function iso_gen_fonction  () {
	! [ -e "${grub_dir}/greffons" ] && \
		{ titre="Création de la fonction grub pour permettre l'amorce par fichier iso" ;
		msg="Enregistrement du fichier \"fonctions_iso.cfg\" dans le répertoire \"${grub_dir}/greffons\""
		zenity --info \
		--title="${titre}" --text="${msg}"  || echo "${msg}" ;
		sudo mkdir "${grub_dir}/greffons"; }
	fonctions_iso_V2.3 1>"${grub_dir}/greffons/fonctions_iso.cfg" ;
}
function execution () {
#############################################################
#
# Script d'amorce à partir d'une image iso
#
############################################################
	! ctrl_root && ai_exit 1 ;
	shopt -s extglob ;
	param_init ;
	param_decod "${@}" ;
	${reboot} && iso_reamorce && ai_exit 100 ;
#	${gui} && { grub_dir= ; amorce_iso= ; amorce_menu= ; } ;
	! quel_grub && ai_exit 2
	iso_gen_fonction ;
	! quelle_amorce && ai_exit 3 ;
	! quel_menu && ai_exit 4
	[[ -n "${amorce_menu}" ]] && grub_menu=$(iso_fichier "${amorce_menu}") || ai_exit 5 ;
	que_faire
	iso_gen_custom "${grub_iso}" "${grub_menu}"
	iso_reamorce
	ai_exit 100
}

 execution	

@+.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

#179 Le 14/01/2016, à 17:20

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour

@Babdu89

Un nouveau souci dans le script, maintenant corrigé. J'ai fait la mise à jour ici, au point 170.
Mais je n'ai pas encore compris pourquoi le test que j'ai effectué hier a réussi, alors que mon greffon fonctions_iso est lui aussi erroné, comme le tien.

Quelle version de grub utilises-tu ?

grub-mkconfig -v
grub-mkconfig (GRUB) 2.02~beta2-9ubuntu1.4

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#180 Le 14/01/2016, à 21:05

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir.

@ Arbiel.

bernard@bernard-System-Product-Name:~$ grub-mkconfig -v
grub-mkconfig (GRUB) 2.02~beta2-9ubuntu1.7
bernard@bernard-System-Product-Name:~$

Je teste le script lorsque je l'aurai corrigé.

Remplacement du contenu du script par celui (texte total) qui est corrigé.
suppression des fichiers   fonctions.iso.   custom.cfg    <nom de l'iso>-loopback.cfg

Je dis ce qu'il se passe.

@+.   Babdu89  .

Dernière modification par Babdu89 (Le 14/01/2016, à 21:34)


J'ai découvert Ubuntu avec la 07.10.... Et alors?!...  Depuis je regarde de temps en temps si Windows marche toujours....

Hors ligne

#181 Le 14/01/2016, à 21:34

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Non!. Çà ne marche toujours pas. même message d'erreur.

erreur: commande inconnue : 'iso_boot`

 

Le contenu de ce que j'ai changé.

Le srcipt;

#! /bin/bash

function ai_version () {
	echo " "
	echo "	Version 2-3 du 13/01/2016"
	echo " "
	Version_amorce_iso="2016_01_13-amorce_iso V2.3";
}

function fonctions_iso_V2.3 () {
echo '# fonctions_iso_V2-3.cfg
# 2016_01_10 : suppression du paramètre "--no-floppy" de la commande search (certaines PC voient les clés USB comme des floppy
#######################################################################################################################
# Redémarrage en cas d'"'"'absence ou d'"'"'indisponibilité des fichiers (fichier image iso ou fichier de configuration)
function rdmge {
	echo Le PC va redémarrer dans quelques secondes
	sleep -v 10
	reboot
}
#######################################################################################################################
# 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
	rdmge
}
#######################################################################################################################
# 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.
	rdmge
 }
#######################################################################################################################
# Contrôle de l'"'"'existence des fichiers
#
function existent_fichiers {
#  recherche du fichier iso
	if [ -n "${iso_file}" ]; then
# si grub trouve le fichier ${iso_file}, alors ce fichier est sur la partition ${root} ; sinon il faut chercher où il est.
		if [ -e "${iso_file}" ]; then set image_iso=${root}; else search --file --set=image_iso "${iso_file}"; fi
	fi
	if [ -z "${image_iso}" ]; then no_iso_file "${iso_file}"; 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})${iso_file}
	set root=iso
	set loopcfg=
# recherche et introduction du menu spécifique à l'"'"'image iso considérée
	if [ -z "${sourcefile}" ]; then set sourcefile=/boot/grub/loopback.cfg; 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 "${sourcefile}" ; fi
	if [ -z "${loopcfg}" ]; then no_cfg_file "${sourcefile}";  fi
}
#######################################################################################################################
# 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
function iso_boot  {
	set image_iso=
	set iso_file="${1}"
	set iso_path="${1}"
	set sourcefile="${2}"
	existent_fichiers
	source "(${loopcfg})${sourcefile}"
}
function echec_maj_amorceiso {
#######################################################################################################################
# Cette procédure affiche le message explicatif de ce qu'"'"'il faut faire si grub ne sait pas écrire dans le répertoire
# grub pour effacer la demande de démarrage par un fichier iso
	echo "L'"'"'erreur précédente résulte d'"'"'une limitation de grub qui ne dispose pas des modules pour effacer la demande de démarrage" ;
	echo "par un fichier iso, du fait de la nature du système de fichier support de grub.cfg (le répertoire référencé" ;
	echo "par core.img tel que présenté par le rapport produit par boot-repair ou par bootinfoscript)." ;
	echo "Une fois le démarrage terminé, pour supprimer cette demande de démarrage avec ${iso_file}," ;
	echo "passer les commandes suivantes, dans lesquelles la variable grub désigne le point de montage" ;
	echo "du répertoire pointé par core.img tel que présenté par le rapport produit par boot-repair" ;
	echo "Pour démarrer le PC avec ${iso_file}, appuyer sur la touche Alt." ; 
	echo "Dans le cas contraire, appuyer sur la touche Ctrl." ;
}


function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
    if ${amorceiso}; then
		set image_iso=
		set iso_path="${1}"
		set iso_file="${1}"
		set sourcefile="${2}"
		existent_fichiers
		export iso_path
		export iso_file
		export root
		set amorceiso=false
		if save_env amorceiso ; then
			configfile "(${loopcfg})${sourcefile}"
		else
			echec_maj_amorceiso ;
			until keystatus --ctrl ; do
				sleep 1 ;
				if keystatus --alt ; then configfile "(${loopcfg})${sourcefile}"  ; fi ;
				done ;
			fi
		fi
}' ;
}
	
function ai_exit () {
    exit ${1}
}

function ai_syntaxe ()
{
#	Trois éléments sont nécessaires démarrer (boot) un PC avec une image iso
#		le fichier iso en question,
#		le répertoire qui contient le fichier grub.cfg utilisé par grub lors du lancement,
#		le fichier des commandes grub spécifiques au fichier iso (les lignes du menu et les ordres correspondants)
#	Ces trois éléments sont définis dans la ligne de commande, ou, à défaut, par trois commandes "zenity
#	ce qui n'est pas vraiment ergonomique, car les fenêtres correspondantes peuvent se trouver masquées,
#	ce qui est un peu déconcertant. J'ai prévu la transcription en python, langage que je ne connais pas encore
#	et je suis par avance reconnaissant à quiconque m'apportera une aide dans cette opération.

	echo " Syntaxe : $0 [options]"
	echo " Options disposibles : "
	echo "	-d	--grub-directory	répertoire d'installation de grub"
	echo "	-h	--help			affichage de la syntaxe"
	echo "	-i	--iso-file		fichier iso avec lequel amorcer le PC"
	echo "	-l	--loopback		menu grub à présenter au démarrage"
	echo "	-r	--reboot		réamorcer avec la configuration précédente"
	echo "	-v	--version		version"
	echo " "
	echo " Exemple d'utilisation en ligne de commande : sudo bash $0.sh -d /boot/grub -i ~/isofiles/file.iso"
	echo " "
}

function que_faire () {
########################################################################################
# Présentation de la liste des options disponibles et interprétation des options sélectionnées
########################################################################################

	msg="Définir le comportement de grub au redémarrage avec l'image iso"
	msg="${msg}"$'\n'"${nf}"
	action=$({  cat <<EOF
true
r
Réamorcer immédiatement.
false
e
Continuer à travailler. Amorcer avec l'image au prochain démarrage.
false
p
Introduire l'image comme choix dans le menu grub standard.
EOF
 }  | zenity --list \
		--title "Choix du comportement de grub" \
		--text="${msg}" \
		--multiple --column="Sélection" --column="code" --column="Comportement de grub"  --hide-column=2 --radiolist \
		--print-column=2 --separator="" --width=300 --height=200 2>/dev/null)
	case ${action} in
	"r") permanent=false ; reboot=true ;; 
	"e") permanent=false ; reboot=false ;;
	"p") permanent=true ; reboot=false ;;
	"#") ai_exit 5 ;;
	esac
}
	
	
	
function param_init () {
######################################################
# Initialisation des paramètres
######################################################
	grub_dir= ;
	amorce_menu= ;
	aide=false ;
	reboot=false ;
#	whereis zenity 1>/dev/null && gui=true || gui=false ;
	OPTIND=1 ;
}

function ctrl_root () {
###########################################################
# Vérification du contexte de l'appel
###########################################################
	[ "$USER" != "root" ] &&
	{
    echo " ";
    echo " Erreur : L'amorce depuis un fichier iso nécessite les droits d'administarteur";
    echo " Avez vous oublie sudo devant le nom du script ?";
    echo " ";
	return 1;} 
return 0
}

function param_decod () {
###########################################################
# Decodage de la ligne de commande
###########################################################
	while getopts "d:i:l:hrv-:" option; do
		ol=false
# gestion des options longues avec ou sans argument
# "${OPTARG%%=*} donne comme résultat le début de l'argument jusqu'au signe "=" non compris
# la valeur donnée à l'argument est tout ce qui suit le signe "=" 
		[ "${option}" = "-" ] && opt_long="${OPTARG%%=*}" && OPTARG="${OPTARG:((${#opt_long}+1))}" && ol=true;
		${ol} && case "${opt_long}" in
			grub-directory) option="d" ;;
			iso-file) option="i" ;;
			loopback) option="l" ;;
			help) option="h" ;;
			version) option="v" ;;
			reboot) option="r" ;;
			*) ai_syntaxe ; clean_exit 1 ;;
		esac
# puis gestion des options courtes
		case $option in
			d) grub_dir="${OPTARG}" ;;
			i) amorce_iso="${OPTARG}" ;;
			l) amorce_menu="${OPTARG}" ;;
			h) ai_version && display_syntaxe && ai_exit 0 ;;
			v) ai_version && ai_exit 0  ;;
			r) reboot=true ;;
			*) ai_syntaxe && ai_exit 1 ;;
		esac
	done
}

function iso_fichier () {
###########################################################
# Calcul du nom de fichier pour grub
##########################################################	
# il s'agit ici de trouver le nom du fichier par rapport à la partition dans laquelle il se trouve
# df donne un résultat tel que :
# /dev/sda8        294155260 175789668  103423388  63% /media/Multimedia
# dont grep -o "% *\/.*$" | grep -o "\/.*$" ne retient que tout ce qui suit les espaces qui suivent
# le signe % cad ici : /media/Multimedia
	partition=$(df "${1}" | grep -o "% *\/.*$" | grep -o "\/.*$")
	if ! [ "${partition}" = "/" ]; then
#		on cherche alors dans la partition les fichiers qui ont le même inode, on ne conserve que le premier
#		et on supprime le nom de la partition pour ne renvoyer que le nom du fichier dans la partition
		sudo find -H "${partition}" -samefile "${1}" | grep -m 1 "${partition}" | sed -e "s^${partition}^^"
	else
		echo "${1}"
	fi
}

function quel_menu () {
#########################################################
# Sélection du fichier "loopback.cfg"
##########################################################
	abort=false ;
	amorce_menu="${amorce_iso%.iso}.loopback.cfg"
	if ! [[ -e "${amorce_menu}" ]] && [[ -e "/tmp/${SUDO_USER}/cdrom/boot/grub/loopback.cfg" ]]; then
		cp -T "/tmp/${SUDO_USER}/cdrom/boot/grub/loopback.cfg" "${amorce_menu}" ;
		msg="Le fichier /boot/grub/loopback.cfg du fichier iso a été recopié sur le fichier \"${amorce_menu}\"" ;
		zenity --info --title="Fichier menu grub" --text="${msg}" ;
		sudo chown "${SUDO_USER}:${SUDO_USER}" "${amorce_menu}" ;
	fi
	trouve=false  ;
	abort=false ;
	autre=false ;
	until ${trouve} ; do
		if ! [[ -e "${amorce_menu}" ]] || ${autre} ; then
			autre=false ;
			amorce_menu=$(zenity --file-selection --file-filter="*.cfg" \
			--title="Choisir le modèle pour la création du fichier que grub doit utiliser au redémarrage") ;
			! [ $((${?})) = 0 ] && return 1 ;
			fi
		zenity --text-info \
			--title="Contrôle et mise au point éventuelle du fichier de configuration de grub" \
			--width=900 --height=380 --timeout=0 --filename="${amorce_menu}" \
			--editable --ok-label="C'est le bon fichier" \
			--cancel-label="Choisir un autre modèle de fichier de configuration" 1>"/tmp/${SUDO_USER}/loopback.cfg";
			if ! [ $((${?})) = 0 ]; then
				autre=true
				else
				trouve=true
				sudo cp -fT "/tmp/${SUDO_USER}/loopback.cfg" "${amorce_menu}" ;
				sudo chown "${SUDO_USER}:${SUDO_USER}" "${amorce_menu}" ;
				fi
		done ; 
	return 0 ;
}

function quel_grub() {
########################################################################################
# Présentation de la liste des options disponibles et interprétation des options sélectionnées
########################################################################################

	msg="Attendre l'affichage des répertoires, en cours de constitution,"
	msg="${msg}"$'\n'"puis choisir le répertoire dans lequel se trouve le fichier"
	msg="${msg}"$'\n'"de configuration que grub doit utiliser pour réamorcer le PC"
	[[ -z "${grub_dir}" ]] && grub_dir=$(sudo find /  -path */grub/grub.cfg | sed -e "s^/grub.cfg^^" | while \
		read a; do echo false; echo "${a}"; done  | zenity --list \
		--title "Répertoires /grub disponibles" \
		--text="${msg}" \
		--multiple --column="Sélection" --column="Répertoire"  --radiolist \
		--print-column=2 --separator="" --width=300 --height=300 2>/dev/null)
	[[ -z "${grub_dir}" ]] && return 1 || return 0
}

function quelle_amorce () {
##########################################################
# Contrôle de la structure du fichier d'installation
#########################################################
	( [[ -z "${amorce_iso}" ]] || ! [[ -e  "${amorce_iso}" ]] ) && amorce_iso=$(zenity --file-selection \
		--file-filter="*.iso" --title="Choisir le fichier à partir duquel amorcer le PC") ;
	[[ -z "${amorce_iso}" ]] && return 1 ;
	grub_iso=$(iso_fichier "${amorce_iso}") ;
	nf=$(basename "${grub_iso}" .iso)
	! [[ -e "/tmp/${SUDO_USER}/cdrom" ]] && mkdir -p "/tmp/${SUDO_USER}/cdrom" ;
	mount -r -o loop "${amorce_iso}" "/tmp/${SUDO_USER}/cdrom" ;
	msg="Le fichier \"${amorce_iso}\" a été monté sur le point de montage \"/tmp/${SUDO_USER}/cdrom\""
	zenity --info --title="Fichier iso sélectionné pour le futur redémarrage" --text="${msg}" ;
	return 0 ;
}

function iso_reamorce () {
###########################################################
# Arrêt et redémarrage pour amorçage depuis le fichier iso
##########################################################
	! ${permanent} && sudo grub-editenv "${grub_dir}/grubenv" set amorceiso=true
	${reboot} && sudo shutdown -r now
	return 0
}

function iso_gen_custom () {
##########################################################
## Création ou mise à jour du fichier custom.cfg
##########################################################
	grep -e {config_directory} -c ${grub_dir}/grub.cfg 1>/dev/null && prefix="{config_directory}" || prefix="{prefix}"
	sudo mkdir -p /tmp/amorceiso
	touch "${grub_dir}/custom.cfg" && cat "${grub_dir}/custom.cfg" | grep -v -e amorce_iso -e "${1}" -e greffons/fonctions_iso.cfg \
		1>"/tmp/amorceiso/custom.cfg"
	{ echo -n "	"; echo "source \$${prefix}/greffons/fonctions_iso.cfg" ; } 1>"${grub_dir}/custom.cfg"
	if ${permanent}; then
		{ echo -n "	"; echo "submenu "'"'"${nf}"'"'" {iso_boot "'"'"${1}"'"'" "'"'"${2}"'"'}" " ; } 1>>"${grub_dir}/custom.cfg"
	else
		{ echo -n "	"; echo amorce_iso "${1}" "${2}" ; } 1>>"${grub_dir}/custom.cfg"
	fi
	cat "/tmp/amorceiso/custom.cfg" 1>>"${grub_dir}/custom.cfg"
	return 0
}
###################################
#
# Enregistrement des fonctions iso pour grub
#
####################################
function iso_gen_fonction  () {
	! [ -e "${grub_dir}/greffons" ] && \
		{ titre="Création de la fonction grub pour permettre l'amorce par fichier iso" ;
		msg="Enregistrement du fichier \"fonctions_iso.cfg\" dans le répertoire \"${grub_dir}/greffons\""
		zenity --info \
		--title="${titre}" --text="${msg}"  || echo "${msg}" ;
		sudo mkdir "${grub_dir}/greffons"; }
	fonctions_iso_V2.3 1>"${grub_dir}/greffons/fonctions_iso.cfg" ;
}
function execution () {
#############################################################
#
# Script d'amorce à partir d'une image iso
#
############################################################
	! ctrl_root && ai_exit 1 ;
	shopt -s extglob ;
	param_init ;
	param_decod "${@}" ;
	${reboot} && iso_reamorce && ai_exit 100 ;
#	${gui} && { grub_dir= ; amorce_iso= ; amorce_menu= ; } ;
	! quel_grub && ai_exit 2
	iso_gen_fonction ;
	! quelle_amorce && ai_exit 3 ;
	! quel_menu && ai_exit 4
	[[ -n "${amorce_menu}" ]] && grub_menu=$(iso_fichier "${amorce_menu}") || ai_exit 5 ;
	que_faire
	iso_gen_custom "${grub_iso}" "${grub_menu}"
	iso_reamorce
	ai_exit 100
}

 execution

Le fonctions.iso

# fonctions_iso_V2-3.cfg
# 2016_01_10 : suppression du paramètre "--no-floppy" de la commande search (certaines PC voient les clés USB comme des floppy
#######################################################################################################################
# Redémarrage en cas d'absence ou d'indisponibilité des fichiers (fichier image iso ou fichier de configuration)
function rdmge {
	echo Le PC va redémarrer dans quelques secondes
	sleep -v 10
	reboot
}
#######################################################################################################################
# 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
	rdmge
}
#######################################################################################################################
# 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.
	rdmge
 }
#######################################################################################################################
# Contrôle de l'existence des fichiers
#
function existent_fichiers {
#  recherche du fichier iso
	if [ -n "${iso_file}" ]; then
# si grub trouve le fichier ${iso_file}, alors ce fichier est sur la partition ${root} ; sinon il faut chercher où il est.
		if [ -e "${iso_file}" ]; then set image_iso=${root}; else search --file --set=image_iso "${iso_file}"; fi
	fi
	if [ -z "${image_iso}" ]; then no_iso_file "${iso_file}"; 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})${iso_file}
	set root=iso
	set loopcfg=
# recherche et introduction du menu spécifique à l'image iso considérée
	if [ -z "${sourcefile}" ]; then set sourcefile=/boot/grub/loopback.cfg; 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 "${sourcefile}" ; fi
	if [ -z "${loopcfg}" ]; then no_cfg_file "${sourcefile}";  fi
}
#######################################################################################################################
# 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
function iso_boot  {
	set image_iso=
	set iso_file="${1}"
	set iso_path="${1}"
	set sourcefile="${2}"
	existent_fichiers
	source "(${loopcfg})${sourcefile}"
}
function echec_maj_amorceiso {
#######################################################################################################################
# Cette procédure affiche le message explicatif de ce qu'il faut faire si grub ne sait pas écrire dans le répertoire
# grub pour effacer la demande de démarrage par un fichier iso
	echo "L'erreur précédente résulte d'une limitation de grub qui ne dispose pas des modules pour effacer la demande de démarrage" ;
	echo "par un fichier iso, du fait de la nature du système de fichier support de grub.cfg (le répertoire référencé" ;
	echo "par core.img tel que présenté par le rapport produit par boot-repair ou par bootinfoscript)." ;
	echo "Une fois le démarrage terminé, pour supprimer cette demande de démarrage avec ${iso_file}," ;
	echo "passer les commandes suivantes, dans lesquelles la variable grub désigne le point de montage" ;
	echo "du répertoire pointé par core.img tel que présenté par le rapport produit par boot-repair" ;
	echo "Pour démarrer le PC avec ${iso_file}, appuyer sur la touche Alt." ; 
	echo "Dans le cas contraire, appuyer sur la touche Ctrl." ;
}


function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
    if ${amorceiso}; then
		set image_iso=
		set iso_path="${1}"
		set iso_file="${1}"
		set sourcefile="${2}"
		existent_fichiers
		export iso_path
		export iso_file
		export root
		set amorceiso=false
		if save_env amorceiso ; then
			configfile "(${loopcfg})${sourcefile}"
		else
			echec_maj_amorceiso ;
			until keystatus --ctrl ; do
				sleep 1 ;
				if keystatus --alt ; then configfile "(${loopcfg})${sourcefile}"  ; fi ;
				done ;
			fi
		fi
}

Le custom.cfg

	source ${config_directory}/greffons/fonctions_iso.cfg
	submenu "lubuntu-15.04-desktop-i386" {iso_boot "/ISO_LINUX/lubuntu-15.04-desktop-i386.iso" "/ISO_LINUX/lubuntu-15.04-desktop-i386.loopback.cfg"}

le lubuntu-15.04-desktop-i386.loopback.cfg

menuentry "Try Lubuntu without installing" {
	linux	/casper/vmlinuz  file=/cdrom/preseed/lubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Install Lubuntu" {
	linux	/casper/vmlinuz  file=/cdrom/preseed/lubuntu.seed boot=casper only-ubiquity iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Check disc for defects" {
	linux	/casper/vmlinuz  boot=casper integrity-check iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Test memory" {
	linux16	/install/mt86plus
}

@+.   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

#182 Le 15/01/2016, à 00:54

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir

L'erreur que j'ai trouvée à la suite de ton essai précédent n'apparaît plus dans la fonction "fonctions.iso" que tu présentes ci-dessus. J'en arrive à me demander si c'est bien le script que la ligne

source ${config_directory}/greffons/fonctions_iso.cfg

va chercher.

L'erreur est peut-être sur la valeur de la variable config_directory. Je suppose en effet que tu as deux fichiers, un sur ta clé et un sur ton disque, et je vais peut-être charger le mauvais.

Peux-tu, s'il te plaît, ajouter, en première ligne de fonctions_iso, la ligne suivante

echo " fonctions_iso correctement chargée" ; sleep 5 ;

et redémarrer, sans exécuter le script bash amorce_iso.

Dis moi si tu vois apparaître le message (pendant 5 secondes)

Arbiel

P.S. Je viens de comparer ta fonction.iso avec la mienne. Les deux fichiers sont strictement identiques. Tu dois avoir un autre fichier, incorrect, et c'est ce mauvais fichier que je suis presque certain de charger.

Dernière modification par Arbiel (Le 15/01/2016, à 00:59)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#183 Le 15/01/2016, à 01:56

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Alors, pas de message    "fonctions_iso correctement chargée"  pendant 5 s.
Çà affiche la même erreur.

Comme tu penses que çà peut charger un autre  fonctions.iso.
Je viens de regarder dans mes autres Os si je n'avais pas utilisé le script.
Non, il n'est utilisé que dans le Ubuntu 12.04.5 .

Je rappelle que pour les derniers tests, j'avais supprimé le dossier "greffons" avec son contenu "fonctions.iso",  le fichier "custom.cfg" , le fichier   "<nom de l'iso>-loopback.cfg"

La clé n'est plus branchée. Et je n'ai pas de hdd usb branché.

Donc en lançant le script corrigé, je recommençais toute la procédure de création des fichiers et répertoires à neuf.

Édit.

Par curiosité ,j'ai renommé "fonctions.iso" en "cacher-fonctions.iso" , j'ai toujours la même erreur au reboot.

Bonne nuit, à demain.

@+.   Babdu89  .

Dernière modification par Babdu89 (Le 15/01/2016, à 02:17)


J'ai découvert Ubuntu avec la 07.10.... Et alors?!...  Depuis je regarde de temps en temps si Windows marche toujours....

Hors ligne

#184 Le 15/01/2016, à 09:41

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bien, j'ai compris, et j'ai vérifié. La variable ${config_directory} n'est pas initialisée. Il faut que je réfléchisse avant de modifier le script, et éventuellement que je voie avec les développeurs de grub s'ils considèrent qu'il s'agit là d'une régression ou d'une décision volontaire de leur part.

En attendant, tu peux supprimer la ligne echo que je t'ai fait ajouter, et modifier ainsi ton fichier custom.cfg

source ${prefix}/greffons/fonctions_iso.cfg
submenu "lubuntu-15.04-desktop-i386" {iso_boot "/ISO_LINUX/lubuntu-15.04-desktop-i386.iso" "/ISO_LINUX/lubuntu-15.04-desktop-i386.loopback.cfg"}

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#185 Le 15/01/2016, à 13:38

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour.

@ Arbiel.

Problème résolu chez moi.
Le script du post#170 fonctionne avec la machine sans passer par l'USB (clé Grub ou hdd de stockage des iso).
Je ne comprenais plus pourquoi avoir le message d'erreur avec mon Os Ubuntu 12.04.5, alors que çà marchait avant...

Explication.
Il y a quelques temps. J'ai eu un souci avec la partition système. J'ai donc réorganisé mon disque en copiant les partitions entres elles. Puisque depuis une sauvegarde du même système qui se trouve sur un hdd usb. Je trimballe mes Os sur hdd usb de machines en machines.

Actuellement, mon Ubuntu 12.04.5 fonctionne depuis deux partitions Système sur mon hdd interne;  l'originale et un clone. Les deux partitions systèmes utilisent la même partition /home séparée.
La partition système originale passe bien les scripts celui du post#5 et celui du post#170.

La partition copy, ne fait pas marcher les scripts comme il faut, Même en supprimant tous les relicats de fichiers.
Je ne sais pas où est le problème avec ce système, mais je vais réglé çà vite fait, en supprimant cette partition copy de mon hdd, et en utilisant la partition original dorénavant..

Alors, comme depuis le début de nos tests, sur ce sujet-ci, et sur le sujet de Isaric, j'utilisais la partition copy ... Tu comprends d'où vient le souci.

Bon, vu que les scripts (post#5 et 170) fonctionnent avec le stockage des iso sur mon hdd interne.

Je vais reprendre les tests dans le sujet de Isaric avec le script du post#170. les support USB (hdd usb et clé Grub qui contient les iso.).

Tu voudras bien m'excuser pour ce contre temps... Çà aura au moins permis de mon côté de révéler le souci, et d'y remédier.

@+.   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

#186 Le 07/02/2016, à 19:30

Laërte

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour,

Je n’ai pas encore lu tous vos posts, qui semblent concerner le script grub d’Arbiel, et pas vraiment le fichier fonctions_iso.cfg utilisé par mon script python.
Toutefois je peux me tromper à ce niveau-là…

De mon côté je fais de petits progrès concernant le fichier loopback : aujourd’hui j’ai réussi à lancer une iso fedora, ce qui est un net progrès par rapport aux fois précédentes.
Je m’attaque aux isos d’arch linux, et je réalise qu’il me faut, une fois encore, la valeur UUID de la partition contenant l’iso.
Y a-t-il moyen que GRUB récupère cette valeur de lui-même par un procédé quelconque pour la stocker dans une variable qu’il serait alors possible de réutiliser dans le fichier loopback, où faut-il que je me débrouille pour trouver comment obtenir une UUID directement avec python ?

Je ne pense pas vraiment prendre le temps de regarder tout ce que vous avez fait, serait-il possible de m’en faire un résumé dès que la nouvelle version de tes fonctions grub sera disponible, Arbiel ? C’est surtout ça qui m’intéresse, vu que c’est ce qui est utilisé par mon script…

Merci !

Sources : https://wiki.archlinux.org/index.php/Mu … _USB_drive

Hors ligne

#187 Le 07/02/2016, à 23:23

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir.
@Laërte
Tu dis;

Je m’attaque aux isos d’arch linux, et je réalise qu’il me faut, une fois encore, la valeur UUID de la partition contenant l’iso.
Y a-t-il moyen que GRUB récupère cette valeur de lui-même par un procédé quelconque pour la stocker dans une variable qu’il serait alors possible de réutiliser dans le fichier loopback, où faut-il que je me débrouille pour trouver comment obtenir une UUID directement avec python ?

Chez moi, je lance des sessions live de  "ubuntu-15.10-desktop-i386.iso"  qui est stockée dans une partition système, dont le label est; "s3fusion-12-sys"  et dont l'UUID est  "aec00812-bb57-4bbe-a5ed-90228e770e48"
Je les lance depuis le menu Grub de l'Os qui démarre par défaut la machine.

Voici ce que j'ajoute dans le fichier /etc/grub.d/40_custom ... Et que l'on retrouve, après maj de grub, dans le fichier /boot/grub/grub.cfg  de l'Os qui démarre par défaut la machine.


### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Iso Live ubuntu-15.10-desktop-i386.iso test encours-stockage iso dans s3fusion-12-sys" {
	insmod part_msdos
	insmod iso9660
        #recherche de la partition dans laquelle se trouve le fichier ISO et montage de celle ci dans "/"
        search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48
	set isofile="/ubuntu-15.10-desktop-i386.iso"
	loopback loop $isofile
	echo	'Chargement du noyau Linux ...'
	linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale=fr_FR bootkbd=fr console-setup/layoutcode=fr noprompt noeject quiet splash --
	echo	'Chargement du disque mémoire initial ...'
	initrd (loop)/casper/initrd.lz
}
### END /etc/grub.d/40_custom ###

Si je n'indique pas ;

   #recherche de la partition dans laquelle se trouve le fichier ISO et montage de celle ci dans "/"
        search --no-floppy --fs-uuid --set=root aec00812-bb57-4bbe-a5ed-90228e770e48

J'ai droit à un message indiquant ne pas trouvé où est stockée l'iso.

Si çà peut aider...

@+.   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

#188 Le 08/02/2016, à 10:42

Laërte

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Le problème, c’est que dans cette partie, tu connais déjà la valeur de l’UUID, puisque tu la rentres dans le fichier de config.
Or ma question, c’est est-ce que lorsque grub connaît l’emplacement d’une iso, il peut trouver l’UUID de la partition sur laquelle est stockée cette iso ?

Hors ligne

#189 Le 08/02/2016, à 15:23

Babdu89

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour.

Laërte a écrit;
où faut-il que je me débrouille pour trouver comment obtenir une UUID directement avec python ?

Je pense que oui, il faut en passer par là.
Je n'y connais rien en écriture de script... Mais je comprends bien ce qu'il faut leur faire faire. C'est pour çà que j'aime bien tester, et apporter ma contribution.

Lorsque dans ton script, on en arrive à indiquer le chemin de iso à lancer en live. Elles est stockée sur une partition.
Si tu te contentes de faire indiquer /dev/sd*,*   au script , je pense que çà ne suffit pas, il faut aussi que çà trouve, et indique l'UUID de la partition...

Mais bon, je ne sais pas en dire plus pour indiquer quoi écrire...

Stp, veux tu bien m'envoyer un MP, que je puisse te répondre.

J'ai tester des scripts en bash et python qui faisaient ceci...
Remplacer l'installateur de Ubuntu défaillant (oui, çà arrive...).
Seulement, avec la machine qui servait aux tests, j'ai un souci de "stabilité" . Le Bios n'est pas capable de garder l'ordre des disques constamment...
Suivant les reboot, le disque /dev/sda est vu comme /dev/sdb, /dev/sdc, /dev/sdd  &&&... Pareil pour les autres disques.
Pas facile pour utiliser des scripts. Seule solution écrire les scripts pour rechercher les partitions avec leurs UUID... C'est ce que je demandais aux auteurs des scripts. Il y arrivaient.

En réponse de ton MP, je t'enverrai, avec des explications, les scripts en question en pièces jointes. Je ne vais pas développer plus ici. Mais si çà peut t'aider...

@+.   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

#190 Le 08/02/2016, à 17:00

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour

La réponse à la question de Laërte,

Laërte a écrit :

est-ce que lorsque grub connaît l’emplacement d’une iso, il peut trouver l’UUID de la partition sur laquelle est stockée cette iso

est

Arbiel a écrit :

Oui

J'imagine que tu veux récupérer cette information pour l'utiliser dans les commandes "menuentry" de fichiers "loopback.cfg" que tu écris à la main.

Mais toutes ces informations sont également accessibles depuis le système opérationnel, c'est-à-dire par ton script Python, comme par mon script bash. J'ai par ailleurs l'intention de définir une variable gbl_opt pour communiquer au noyau des informations sur la langue, le clavier, ou tout paramètre nécessaire au démarrage, de sorte que le fichier custom.cfg contiendrait des commandes telles que

source ${prefix}/greffons/fonctions_iso.cfg
submenu "lubuntu-15.04-desktop-i386" {set gbl_opt="arguments à passer au noyau" (il y aura éventuellement un problème de " ou de ')
iso_boot "/ISO_LINUX/lubuntu-15.04-desktop-i386.iso" "/ISO_LINUX/lubuntu-15.04-desktop-i386.loopback.cfg"}

et que le fichier lubuntu-15.04-desktop-i386.loopback.cfg serait modifié en conséquence

menuentry "Try Lubuntu without installing" {
	linux	/casper/vmlinuz  ${gbl_opt} file=/cdrom/preseed/lubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Install Lubuntu" {
	linux	/casper/vmlinuz  ${gbl_opt} file=/cdrom/preseed/lubuntu.seed boot=casper only-ubiquity iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Check disc for defects" {
	linux	/casper/vmlinuz  boot=casper integrity-check iso-scan/filename=${iso_path} quiet splash ---
	initrd	/casper/initrd.lz
}
menuentry "Test memory" {
	linux16	/install/mt86plus
}

L'uuid de la partition où se trouve l'iso pourrait être passé de la même manière, dans cette variable gbl_opt, à supposer qu'il s'agisse effectivement de la passer au noyau.

Mais cet uuid peut être calculé dynamiquement par grub, pour être transmis dans une variable. Comme grub peut calculer uuid et étiquette de la partition et de l'image iso elle-même, je propose les noms suivants

iso_uuid et iso_label pour l'uuid et l'étiquette de l'iso elle-même
host_iso_uuid et host_iso_label pour la partition qui héberge l'iso.

Je ne sais pas encore s'il sera nécessaire de rendre ces calculs optionnels, ce qui nécessiterait de définir un paramètre supplémentaire pour iso_boot et amorce_iso.

Pour ce qui est du calcul en bash des informations sur un fichier, voici ce que j'obtiens

for t in abstraction  arc_hints  baremetal_hints      bios_hints     compatibility_hint       device   disk   drive   efi_hints   fs   fs_label  fs_uuid  gpt_parttype  hints_string  ieee1275_hints  partmap  zero_check; do
> echo -n "${t}    :" ; sudo.sh grub-probe -t ${t} '/media/remi/Emtec/grub/custom.cfg'; done;
abstraction    :arc_hints    :
baremetal_hints    :ahci3,msdos1 
bios_hints    :hd3,msdos1 
compatibility_hint    :hd3,msdos1
device    :/dev/sdd1
disk    :/dev/sdd
drive    :(hostdisk//dev/sdd,msdos1)
efi_hints    :hd3,msdos1 
fs    :fat
fs_label    :Emtec
fs_uuid    :7411-8A0F
gpt_parttype    :
hints_string    :--hint-bios=hd3,msdos1 --hint-efi=hd3,msdos1 --hint-baremetal=ahci3,msdos1 
ieee1275_hints    :
partmap    :msdos
zero_check    :false

Arbiel
i


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#191 Le 09/02/2016, à 21:26

Laërte

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Si tu peux effectivement dans ta fonction iso_boot la valeur de l’UUID de la partition sur laquelle est stockée l’iso passée en paramêtre, ce serait parfait.
En effet, le problème avec arch, c’est que le boot a besoin de connaître l’UUID de la partition de l’iso, donc si tu le stocke dans une variable, je passe cette variable dans le loopback par défaut, et mon script n’a plus besoin de se prendre la tête à calculer un truc que GRUB a déjà…
Ça permettrait en plus de se passer des fichiers loopback entre utilisateurs, sans devoir les réécrire du fait que l’UUID soit hardcodé dedans.

Hors ligne

#192 Le 11/02/2016, à 18:22

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir

Ci-dessous la nouvelle fonction. uuid et étiquette de la partition qui héberge l'iso sont disponibles dans
host_iso_uuid
host_iso_label

Une nouvelle version est en cours, qui contiendra les fonctions que j'ai écrites pour résoudre le problème auquel Isaric s'est trouvé confronté. J'y ajoute une fonction qui inspecte le contenu du répertoire passé en paramètre et crée autant de lignes que de fichiers iso qui y sont enregistrés. L'insertion d'une nouvelle ligne (distribution) ne nécessite alors que l'enregistrement dans le répertoire de l'image iso, et du fichier loopback.cfg si celui-ci n'est pas contenu dans le fichier iso, ou si aucune adaptation (clavier, langue, …) n'est nécessaire.

Avec cette nouvelle mouture, il n'y aura plus de problème avec les systèmes de fichiers dans lesquels grub ne sait pas écrire.

# fonctions_iso_V2-4.cfg
# 2016_02_10 : introduction dans iso_boot et dans amorce_iso du calcul de l'uuid et de l'étiquette de la partition contenant l'iso
# 2016_01_10 : suppression du paramètre "--no-floppy" de la commande search (certaines PC voient les clés USB comme des floppy
#######################################################################################################################
# Redémarrage en cas d'absence ou d'indisponibilité des fichiers (fichier image iso ou fichier de configuration)
function rdmge {
	if [ -n "${1}" ] ; then echo "${1}" ; fi ;
	if ${2}; then echo "Le PC va redémarrer dans quelques secondes" ; fi ;
	sleep --interruptible -v 10
	if ${2}; then reboot; fi ;
}
#######################################################################################################################
# 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
	rdmge
}
#######################################################################################################################
# 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.
	rdmge
 }
#######################################################################################################################
# Contrôle de l'existence des fichiers
#
function existent_fichiers {
#  recherche du fichier iso
	if [ -n "${iso_file}" ]; then
# si grub trouve le fichier ${iso_file}, alors ce fichier est sur la partition ${root} ; sinon il faut chercher où il est.
		if [ -e "${iso_file}" ]; then set image_iso=${root}; else search --file --set=image_iso "${iso_file}"; fi
	fi
	if [ -z "${image_iso}" ]; then no_iso_file "${iso_file}"; fi
# calcul de l'uuid et de l'étiquette de la partition où se trouve l'iso
	probe --set=host_iso_uuid -u "(${image_iso})"
	probe --set=host_iso_label -l "(${image_iso})"
	export host_iso_uuid
	export host_iso_label
# 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})${iso_file}
	set root=iso
	set loopcfg=
# recherche et introduction du menu spécifique à l'image iso considérée
	if [ -z "${sourcefile}" ]; then set sourcefile=/boot/grub/loopback.cfg; 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 "${sourcefile}" ; fi
	if [ -z "${loopcfg}" ]; then no_cfg_file "${sourcefile}";  fi
}
#######################################################################################################################
# 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
function iso_boot  {
	set image_iso=
	set iso_file="${1}"
	set iso_path="${1}"
	set sourcefile="${2}"
	existent_fichiers
	source "(${loopcfg})${sourcefile}"
}
function echec_maj_amorceiso {
#######################################################################################################################
# Cette procédure affiche le message explicatif de ce qu'il faut faire si grub ne sait pas écrire dans le répertoire
# grub pour effacer la demande de démarrage par un fichier iso
	echo "L'erreur précédente résulte d'une limitation de grub qui ne dispose pas des modules pour effacer la demande de démarrage" ;
	echo "par un fichier iso, du fait de la nature du système de fichier support de grub.cfg (le répertoire référencé" ;
	echo "par core.img tel que présenté par le rapport produit par boot-repair ou par bootinfoscript)." ;
	echo "Une fois le démarrage terminé, pour supprimer cette demande de démarrage avec ${iso_file}," ;
	echo "passer les commandes suivantes, dans lesquelles la variable grub désigne le point de montage" ;
	echo "du répertoire pointé par core.img tel que présenté par le rapport produit par boot-repair" ;
	echo "Pour démarrer le PC avec ${iso_file}, appuyer sur la touche Alt." ; 
	echo "Dans le cas contraire, appuyer sur la touche Ctrl." ;
}


function amorce_iso {
########################################################################################
#
# amorçage par le script shell iso_boot.sh
#
#######################################################################################
# pour éviter le bouclage sur la procédure
    if ${amorceiso}; then
		set image_iso=
		set iso_path="${1}"
		set iso_file="${1}"
		set sourcefile="${2}"
		existent_fichiers
		export iso_path
		export iso_file
		export root
		export host_iso_uuid
		export host_iso_label
		set amorceiso=false
		if save_env amorceiso ; then
			configfile "(${loopcfg})${sourcefile}"
		else
			echec_maj_amorceiso ;
			until keystatus --ctrl ; do
				sleep 1 ;
				if keystatus --alt ; then configfile "(${loopcfg})${sourcefile}"  ; fi ;
				done ;
			fi
		fi
}

Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#193 Le 11/02/2016, à 19:08

lynn

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonjour,

Je ne comprends pas cette ligne

sleep --interruptible -v 10

C'est équivalent à sleep 10 ou c'est autre chose?


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#194 Le 11/02/2016, à 22:26

Arbiel

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Bonsoir

Ce script n'est pas un script bash, mais un script grub.

--interruptible signifie que l'attente peut être interrompue par l'appui sur la touche "Échap".
-v signifie que grub affiche le temps résiduel jusqu'à la fin de l'attente.
10 indique la durée de l'attente, en secondes

On trouve des exemples dans le fichier grub.cfg et on en comprend le fonctionnement en comparant des fichiers obtenus en faisant varier les paramètres définis dans /etc/default/grub. Les commandes de grub ne sont pas toutes documentées, ou sont parfois incomplètement documentées.

L'utilisation de ce script se fait en utilisant la commande "source" de grub, par exemple dans le fichier custom.cfg, lui-même automatiquement incorporé dans le fichier de configuration grub,cfg par un ordre "source", résultat de l'expansion du ficher etc/grub.d/41_custom :

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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

#195 Le 12/02/2016, à 16:56

lynn

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

@Arbiel

Merci pour ces précisions. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#196 Le 29/12/2020, à 16:14

alex2423

Re : [Script/Tuto] Amorcer une image iso sans clé USB ni lecteur de CD-ROM

Je m'abonne, ce topic est d'utilité public smile

Hors ligne