Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

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.

#151 Le 06/07/2015, à 18:41

Babdu89

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

Bonsoir.
Je mets à jour la  "checkout master" et je regarde le fonctionnement. Puis je reviendrais à l'iso slitaz...

@+.    Babdu89   .


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

En ligne

#152 Le 07/07/2015, à 00:32

Babdu89

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

Alors, cette doc est bien pratique ,çà aide...

https://doc.ubuntu-fr.org/tutoriel/grub … images_iso

Pour SliTaz.
J'ai téléchargé la dernière version disponible.  slitaz-5.0-rc3.iso  dans la racine de l'Os par défaut de ma machine.
Adapté pour faire une entrée dans le Grub.cfg de l'Os par défaut de ma machine.
Voici son contenu.

menuentry "Slitaz-5.0-rc3" {
insmod loopback
insmod iso9660
set isofile="/slitaz-5.0-rc3.iso"
search --set -f $isofile
loopback loop $isofile
linux (loop)/boot/vmlinuz-3.2.53-slitaz kmap=fr-latin1
initrd (loop)/boot/rootfs.gz
}

Je démarre une session live.

pour le loopback.cfg utilisable par le script, çà donne ceci.

menuentry "Slitaz" {
        linux  /boot/vmlinuz-3.2.53-slitaz kmap=fr-latin1
        initrd  /boot/rootfs.gz
}

Le script permet de lancer une session live.

Bon, je vais regarde d'autres iso.

@+.   Babdu89  .


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

En ligne

#153 Le 08/07/2015, à 00:16

Laërte

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

De mon côté, je bataille avec Arch Linux, qui ne veut pas booter.
Plus précisement, il boote, mais, d'après ce que j'ai compris en tatonnant dans le BusyBox, il tente de détecter le périphérique sur lequel est installé l'iso par son label, sauf qu'une iso non montée n'est pas considérée comme un périphérique, et il fait la gueule.
Si quelqu'un sait comment forcer l'affichage d'une iso par label dans un système booté, je suis preneur. ^^
Par contre, une fois que j'ai montée la bonne iso à un emplacement quelconque dans le BusyBox (/tmp/iso, si vous voulez vraiment le savoir), il comprend bien que c'est celle-ci.

J'en déduis que les isos ont un label, et que si on pouvait s'arranger pour qu'il la détecte comme périphérique (les isos montées ont comme nom de périphérique /dev/loopX ), il booterai correctement.

Sauf qu'à partir de là ça sors de mon domaine de compétence, je lance donc un appel désespéré sur le forum! big_smile

Help ! lol

Sinon j'ai bien ajouté ton loopback pour slitaz et j'ai aussi corrigé quelques bugs.
Voilà !

@Arbiel :
Est-ce qu'il y a moyen de rendre accessible à un système booté les périphériques créé dans GRUB avec la commande loopback ?
Histoire qu'on puisse lui filer notre "device" iso, qu'Arch (et Manjaro probablement) bootent correctement ?

Dernière modification par Laërte (Le 08/07/2015, à 00:48)

Hors ligne

#154 Le 08/07/2015, à 00:51

Babdu89

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

Bonsoir.
Je bataille de mon coté avec antiX-13.2_386-full.iso   .

Je la fais marcher avec le MultiSystem.
Lui la démarre avec grub4Dos. Mais l'iso est extraite dans un dossier ; antiX
Contenu du menu.list

#MULTISYSTEM_MENU_DEBUT|07-07-2015-15:31:39-517424867|antiX|multisystem-antix|690Mio|
title antiX
kernel /antiX/vmlinuz quiet lean noxorg blab=MULTISYSTEM bdir=antiX vga=791
initrd /antiX/initrd.gz

#MULTISYSTEM_MENU_FIN|07-07-2015-15:31:39-517424867|antiX|multisystem-antix|690Mio|

Remarque , avec mes test j'ai compris que    blab=MULTISYSTEM   était le label du périphérique ou est stockée l'iso   . et non pas le label de l'iso

J'ai essayé de faire un démarrage de l'iso copiée dans la racine de mon XP avec grub4Dos.

À près avoir vu que c'était antiX avec un X majuscule... tongue çà commençait à se lancer...

Menu.list de Grub4Dos

#pour lancer antiX tests
title antiX
root (hd0,0)
#kernel /antiX/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr console-setup/variantcode=oss file=/cdrom/preseed/antiX.seed boot=casper iso-scan/filename=/antiX-13.2_386-full.iso #toram=filesystem.squashfs quiet splash --
#kernel /pour-antiX/antiX/vmlinuz linuxfs quiet toram=filesystem.squashfs  
#initrd /pour-antiX/antiX/initrd.gz
kernel /antiX/vmlinuz quiet lean noxorg blab=XP-MAXTOR bdir=antiX vga=791
initrd /antiX/initrd.gz
boot

Les entrées kernel débutant par le croisillon ( # ) m'ont menées toutes vers un message d'erreur disant ne pas trouver le fichier  antiX/linuxfs ... taille du fichier  714,3 Mo
Donc fichier important comme les initrd.
En m'inspirant du MultiSystem, j'ai refais un menu.list en mettant le label de la partition de stokage ...   blab=XP-MAXTOR
Toujours le même message ... Comme l'iso dans le MultiSystem est extraite , j'ai créé un dossier  antiX et j'ai extrait l'iso dedans.

contenu du menu list qui fait lancer l'iso en live.

#pour lancer antiX 
title antiX
root (hd0,0)
kernel /antiX/vmlinuz quiet lean noxorg blab=XP-MAXTOR bdir=antiX vga=791
initrd /antiX/initrd.gz
boot

Avec l'iso extraite dans un dossier antiX, çà marche, je lance la session live.


Alors j'ai essayer de faire un loopback  pour lancer antiX avec le script.

menuentry "Antix" {
        linux  /antiX/vmlinuz boot=live config union=aufs noswap noprompt vga=788 ip=frommedia findiso=${iso_path} toram=filesystem.squashfs
        initrd  /antiX/initrd.gz
}

J'ai encore eu le message qui indique que le système ne trouve pas le fichier  antiX/linuxfs ...

J'ai ajouter un dossier antiX dans la partition où je stock mes iso . et pour voir je n'ai extrait dedans que le fichier ; linuxfs .
J'ai bricolé un nouveau loopback.cfg qui fonctionne cette foi.

menuentry "Antix" {
#linux /antiX/vmlinuz boot=live config union=aufs noswap noprompt vga=788 ip=frommedia findiso=${iso_path} toram=filesystem.squashfs
       linux  /antiX/vmlinuz quiet lean blab=DONNEES_SATA_1_ bdir=antiX vga=791
       initrd  /antiX/initrd.gz
}

Avec la ligne commenté, çà ne marche pas...

Mais je suis obliger d'extraire ce foutu fichier  linuxfs dans un dossier à ajouter ...
Il faudrait trouver le moyen de ne pas avoir à le faire...

@+.   Babdu89  .

Dernière modification par Babdu89 (Le 08/07/2015, à 00:55)


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

En ligne

#155 Le 08/07/2015, à 01:02

Laërte

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

antiX-13.2_386-full.iso ? Ça date...
La dernière version est la numéro 15... ^^

Je télécharge antiX et je vois ce que j'arrive à faire avec.
Bonne chance de ton côté.

Hors ligne

#156 Le 08/07/2015, à 01:08

Babdu89

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

Laërte a écrit :

antiX-13.2_386-full.iso ? Ça date...
La dernière version est la numéro 15... ^^

Je télécharge antiX et je vois ce que j'arrive à faire avec.
Bonne chance de ton côté.


http://antix.mepis.org/index.php?title= … ation_Tips

Pour les "ceuss" qui connaissent l'anglais. lance antiX en live depuis l'iso.

Je télécharge la 15,  merci.

En français pour lancer l'iso, c'est mieux

http://translate.googleusercontent.com/ … 3A0_w4vQJg

Je vais lire çà .

.... Ouais bon, on en est toujours à être obligé d'extraire l'iso dans un dossier ...

@+.   Babdu89  .

Dernière modification par Babdu89 (Le 08/07/2015, à 01:42)


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

En ligne

#157 Le 08/07/2015, à 01:19

Laërte

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

Avec un menu.lst pour Grub4Dos comme ça, ça donne quoi ?

title antiX
kernel /antiX/vmlinuz vga=791 fromiso=${iso_path} en xres=1024x768
initrd /antiX/initrd.gz
boot

Et sinon, histoire d'être sûr, tu comprends l'anglais ou pas ? Histoire que je ne t'envoie pas de la doc en anglais sans chercher avant s'il y a une traduction française... ^^

Hors ligne

#158 Le 08/07/2015, à 01:21

Laërte

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

Et le fichier loopback équivalent :

menuentry "AntiX" {
    linux /antiX/vmlinuz vga=791 fromiso=${iso_path} en xres=1024x768
    initrd /antiX/initrd.gz
}

Hors ligne

#159 Le 08/07/2015, à 01:36

Babdu89

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

Je teste çà.

Non stp, pas de doc en Anglais....  J'ai des vagues souvenirs... Mais l'anglais technique. tongue

@+.  Babdu89  .


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

En ligne

#160 Le 08/07/2015, à 01:42

Laërte

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

J'ai testé le fichier loopback, ça marche pas. Va falloir rajouter le "fromhd=/dev/sdxX" dont ils parlent dans la doc et que j'aurais préféré éviter (trop spécifique, on peut pas en faire quelque chose de générique.
À moins que... ?
Si je ne me trompe pas, les scripts d'Arbiel stockent la valeur de l'identifiant du périphérique de l'iso dans ${image_iso}.
Nouveau fichier loopback à tester :

menuentry "AntiX" {
    linux /antiX/vmlinuz vga=791 fromhd=${image_iso} fromiso=${iso_path} en xres=1024x768
    initrd /antiX/initrd.gz
}

Hors ligne

#161 Le 08/07/2015, à 02:05

Laërte

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

Bon, ça marche pas mieux, antiX me dit même que l'option fromhd est inconnue... mad
Sinon, pour le Grub4Dos ça ne marchera normalement pas (j'oublie qu'il n'y a pas l'option loopback et que tu ne le lance pas à travers les scripts d'Arbiel... roll

Je sèche...

Hors ligne

#162 Le 08/07/2015, à 08:23

Babdu89

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

Bonjour.
Avec la antiX15 .
Création d'un dossier antiX à la racine de la partition qui stocke mes iso,  pour y extraire le fichier ;  linuxfs  dedans.
Et ce fichier loopback.cfg fait manuellement dans le script.

menuentry "Antix" {
       linux  /antiX/vmlinuz quiet lean blab=DONNEES_SATA_1_ bdir=antiX vga=791
       initrd  /antiX/initrd.gz
}

Çà marche comme avec la version 13.
Mais c'est spécifique à ma machine;    label de la partition qui contient les iso ==>   blab=DONNEES_SATA_1_
Et obligation d'extraire une partie de l'iso à lancer en session live dans un dossier contenu dans la racine de la partition de stockage des iso.

@+.   Babdu89    .


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

En ligne

#163 Le 08/07/2015, à 10:53

Laërte

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

Babdu89 a écrit :

Mais c'est spécifique à ma machine;    label de la partition qui contient les iso ==>   blab=DONNEES_SATA_1_

Que ce soit spécifique à ta machine n'est pas très grave, je peux toujours faire l'adaptation lors du chargement du fichier loopback. Même si les labels ça va être super galère à trouver en python… mad

Par contre l'extraction, c'est plus chiant déjà…

Hors ligne

#164 Le 08/07/2015, à 13:10

Babdu89

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

Bonjour.

Pour les label, c'est d'autant plus "coton" si les partitions n'en n'ont pas... Il vaudrait mieux essayer de passer par les UUID, c'est unique à chaque partition.
Quelle commande pour indiquer de rechercher l'UUID de de la partition de stockage, au lieux d'indiquer blab=DONNEES_SATA_1_ , on peut mette dans les  loopback.cfg  et le menu.list  pour lancer depuis grub4Dos?.
Je veux bien tester çà avec la  antiX.  UUID de ;  DONNEES_SATA_1_   est;  07BCAE8F3189725B

Par contre l'extraction, c'est plus chiant déjà…

Ah oui!!. Car il suffit d'extraire le dossier antiX et sont contenu depuis l'iso, dans la racine de la partition où est stockée l'iso. Çà créer un répertoire  antiX avec les dossiers et fichiers, et c'est du lourd.
Mais dans tous les cas, est-ce qu'il y aura la place sur la partition? , On ne connaît les configs des utilisateurs futurs du script.
Un utilisateur peu attentionné, lorsqu'il supprimera l'iso, pour la remplacer par une autre à lancer. Va certainement oublier de virer le dossier d’extraction. Sutout si c'est le script qui fait l'extraction tâche de fond.
Au bout de quelques tests çà va prendre pas mal de place sur les partitions.

Édit;

Quelle commande pour indiquer de rechercher l'UUID de de la partition de stockage, au lieux d'indiquer blab=DONNEES_SATA_1_ , on peut mette dans les  loopback.cfg  et le menu.list  pour lancer depuis grub4Dos?.

J'ai remplacé  blab=DONNEES_SATA_1_  par  buuid=07BCAE8F3189725B  et c'est bon, mais c'est moi qui indique l'uuid. Ce n'est pas le script qui dit de rechercher l'UUID de la partition de stockage.

@+.    Babsu89

Dernière modification par Babdu89 (Le 08/07/2015, à 14:05)


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

En ligne

#165 Le 08/07/2015, à 14:58

Laërte

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

Babdu89 a écrit :

J'ai remplacé  blab=DONNEES_SATA_1_  par  buuid=07BCAE8F3189725B  et c'est bon, mais c'est moi qui indique l'uuid. Ce n'est pas le script qui dit de rechercher l'UUID de la partition de stockage.

Le problème c'est que trouver l'UUID d'une partition, ça n'a pas l'air possible en python… Je peux toujours afficher un message, mais ça augmente les risques d'erreurs…

Je vais voir ce que je peux faire.

Hors ligne

#166 Le 08/07/2015, à 17:57

k3c

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

>>>Le problème c'est que trouver l'UUID d'une partition, ça n'a pas l'air possible en python

spawner un process qui fait

sudo blkid  /dev/sda

et analyser l'output ?


Archlinux sur Xiaomi Air 13

Hors ligne

#167 Le 08/07/2015, à 18:06

Laërte

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

k3c a écrit :

spawner un process qui fait

sudo blkid  /dev/sda

et analyser l'output ?

Oui, c'est vrai qu'il y a toujours cette solution, mais tant que possible, j'essaye d'éviter les "subprocess".
Déjà c'est pas super propre comme manière de coder, et c'est moins performant qu'une solution tout en python.
De la même manière, je me suis cassé le *** à créer une fonction python qui ne fait rien de plus qu'un simple appel de la commande find... Mais je sais précisément ce que ça fait (d'ailleur python3.5 rendra ma fonction caduque, puisqu'il sera possible de faire la même chose nativement)
De plus, comment je devine sur quelle partition se trouve l'iso ?

Hors ligne

#168 Le 08/07/2015, à 18:18

k3c

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

Au fait il y a
https://github.com/digitie/pyblkid

en Python


Archlinux sur Xiaomi Air 13

Hors ligne

#169 Le 08/07/2015, à 18:33

Laërte

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

k3c a écrit :

Au fait il y a
https://github.com/digitie/pyblkid

en Python

Oh. C'est beau ! ^^
J'adopte ! Dommage que ça manque de doc par contre (et comme le code est écrit en Python2, je pige pas tout, sans parler des sources en C tongue )

EDIT:
Ça va pas être possible pour ce module en fait (hélas). Il n'est dispo que pour python2, et toute mon appli est en python3 (et j'ai essayé, c'est pas compatible).
Dommage, parce que j'avais trouvé pile ce qu'il faut pour aller avec... J'aurais pu tout compléter automatiquement du coup (UUID, label, /dev/sdxX, etc...)

Dernière modification par Laërte (Le 08/07/2015, à 20:50)

Hors ligne

#170 Le 12/01/2016, à 20:55

Arbiel

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

Bonsoir

[Edit] Le diagnostic "Par contre une expérience toute récente m'a mis en évidence que certains PC voient les clés USB comme des "floppy disk" ci-dessous est erroné. Je suis donc revenu sur cette modification, et j'ai décidé de réintroduire dans la prochaine version l'interdiction de recherche sur les floppy.

La version V2-2 de mon script indiquait à grub de ne pas chercher de fichiers sur des "floppy disk" du fait de la la lenteur de leur accès. Or ces terminaux ne sont plus utilisés. Par contre une expérience toute récente m'a mis en évidence que certains PC voient les clés USB comme des "floppy disk". La version V2-3 ci-dessous supprime cette restriction et permet à grub de trouver des fichiers sur des clés USB, même vues comme des floppy

#! /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

Arbiel

Dernière modification par Arbiel (Le 18/02/2016, à 00:06)


Arbiel Perlacremaz
Dell Vostro Ubuntu 18.04 64 bits
J'ai abandonné azerty au profit de bépo, google au profit de Lilo et mes adresses électroniques au profit d'une messagerie réellement sécurisée, Protonmail.

Hors ligne

#171 Le 12/01/2016, à 21:01

Laërte

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

Malheureusement je n’ai pas du tout le temps de m’occuper de ça maintenant, je prépare le bac et c’est assez intense… ^^
Pour ceux qui testent, remplacer le fichiers fonctions.cfg dans le répertoire avec les sources, en lui donnant le même nom que précédemment, devrait suffire.
Merci en tout cas de poster des amélios.

Bonne semaine !

Hors ligne

#172 Le 12/01/2016, à 22:10

k3c

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

Je vais porter pyblkid en python3, si ça intéresse du monde

:-)


Archlinux sur Xiaomi Air 13

Hors ligne

#173 Le 12/01/2016, à 22:30

Laërte

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

Plutôt oui ! ^^
Prend ton temps, je ne suis pas pressé XD
Merci beaucoup de passer prévenir !

Hors ligne

#174 Le 13/01/2016, à 00:15

Babdu89

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

Bonsoir.

Pour le test du script  v2.3 chez moi. Le terminal renvoi ceci.


bernard@bernard:~$ sudo bash script-arbiel-v2.3-.sh
[sudo] password for bernard: 
script-arbiel-v2.3-.sh: ligne 40: Erreur de syntaxe près du symbole inattendu « ( »
script-arbiel-v2.3-.sh: ligne 40: `	loopback iso (${image_iso})${iso_file}'
bernard@bernard:~$

À tout hasard, sans trop savoir si c'est bien ce qu'il faut faire. J'ai remplacé le ( ) par des " " ,

Mais, le script ne marche pas. Il n'y a pas les fenêtres zenity  &&&.
N'y aurait il pas une erreur quelque part. Ou c'est moi qui suis entrain de faire des bêtises?
La version 2 du post#5 marche bien.

@+.   Babdu89  .


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

En ligne

#175 Le 13/01/2016, à 10:52

Arbiel

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

Bonjour

Effectivement, j'ai fait une erreur. Je regarde, je répare, et je modifie le point 170 en conséquence.

Arbiel


Arbiel Perlacremaz
Dell Vostro Ubuntu 18.04 64 bits
J'ai abandonné azerty au profit de bépo, google au profit de Lilo et mes adresses électroniques au profit d'une messagerie réellement sécurisée, Protonmail.

Hors ligne