Lancer des images iso directement depuis GRUB 2
Pour lancer une distribution linux sans avoir à graver sur Cd, les solutions existantes ont le plus souvent le recours à une clé USB gravée avec :
- l'instruction "dd" (en mode graphique avec Etcher)
- un utilitaire comme :
- etc.
On peut aussi utiliser Virtualbox qui ne nécessite pas de clé USB mais dont l'inconvénient est qu'il ne teste pas votre configuration mais un matériel émulé.
Voici la procédure à suivre pour lancer vos ISOs présents sur le disque dur directement avec Grub 2.
Généralités
Pourquoi lancer les ISOs avec Grub2 ?
- pouvoir tester n'importe quelle distribution Linux
- pouvoir installer vos distributions préférées sans avoir à graver un CD
- pouvoir installer les distributions de maintenance pour quand l'ordinateur ne marche plus (gparted live, rescueCD,.. )
Prérequis
- la version de Grub doit etre en version 1.97 ou supérieure.
grub-install -V
- la page de doc principale pour grub est ici.
- ce type de lancement est très différent d'une distribution linux à l'autre voir impossible avec certaines d'entre elles.
Installation depuis l'iso lancé
Par défaut, Ubuntu monte le support d'installation dans /isodevice. On n'en a pas besoin car Ubuntu est lancé en ram. Pour éviter que l'installation ne soit bloquée, on lancera la commande:
sudo umount -lrf /isodevice
Maintenant, il suffit de double cliquer sur "installer ubuntu".
Comment ajouter un ISO à Grub ?
Les étapes
Dans ce tutoriel, les fichiers "iso" sont tous stockés dans un dossier /isos à la racine d'une des partitions présentes dans l'ordinateur.
- On ajoutera les menus pour les isos au fichier de configuration /etc/grub.d/40_custom (avec les droits 'administrateurs').
- On lancera ensuite dans un terminal la commande:
sudo update-grub
Une méthode modulaire (plus souple) est d'utiliser un fichier de configuration par système d'exploitation et de le référencer dans grub.cfg : voir la section Une configuration sans être root
La méthode universelle et rapide
Lorsque Grub est en mode EFI, on peut activer le menu par défaut intégré à l'iso avec ce menu type:
- /etc/grub.d/40_custom
menuentry ".. Xubuntu Focal 20.04 (Daily build)" { iso_path="/isos/focal-desktop-amd64.iso" export iso_path search --set=root --file $iso_path loopback loop $iso_path root=(loop) configfile /boot/grub/loopback.cfg loopback --delete loop }
Testé sans souci avec les variantes Ubuntu actuelles (2019), Linux Mint 19.3 et Debian 10. Parfois, sur d'autres distributions, on a le menu mais ensuite le lancement échoue.
C'est pratique et rapide à mettre en oeuvre (on ne change que le nom de l'iso) mais la distribution n'est pas localisée en français..
Distribution Ubuntu et dérivés
Ubuntu utilise le paquet 'casper' pour ses live-cd. Donc ce menu est valable aussi pour Linux-Mint et d'autres distributions basées sur Ubuntu.
- /etc/grub.d/40_custom
menuentry ".. Xubuntu 19.10 eoan ...." { set isofile="/isos/xubuntu-19.10-desktop-amd64.iso" search --set=root --file $isofile loopback loop $isofile echo 'Lancement de l'iso en cours, veuillez patienter..' linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/xubuntu.seed noprompt quiet splash -- initrd (loop)/casper/initrd }
- L'avantage principal de ce menu est qu'on peut ajouter des options de boot spécifiques à notre matériel (clavier, résolution écran, etc). (Le "preseed" est utilisé lors d'une installation sur l'ordi).
- Ce menu fonctionne aussi avec les BIOS non EFI.
Sources des isos
Ubuntu et ses variantes
Pour vérifier, il faut ouvrir l'iso avec le gestionnaire d'archives (par clic droit) et regarder dans le dossier "casper".
Voici les lignes 'preseed' pour toutes les variantes d'Ubuntu :
- Ubuntu-Budgie (nouvelle variante depuis 2017) : versions soutenues - versions en cours de développement
file=/cdrom/preseed/ubuntu-budgie.seed
- Ubuntu-Mate : versions soutenues - versions en cours de développement
file=/cdrom/preseed/ubuntu-mate.seed
- Ubuntu Studio : versions soutenues - versions en cours de développement
file=/cdrom/preseed/ubuntustudio.seed
Dérivés : LinuxMint,..
- Linux Mint : versions soutenues - versions en cours de développement
file=/cdrom/preseed/linuxmint.seed
Systèmes de maintenance
GParted Live
Elle contient PhotoRec et Testdisk. Par contre, le gestionnaire de fichiers est un peu limité (il n'affiche pas les partitions non montées) - Téléchargement
- linux (loop)/live/vmlinuz findiso=${isofile} boot=live union=overlay username=user config components noswap toram=filesystem.squashfs ip= net.ifnames=0 nosplash locales=fr_FR.UTF-8 keyboard-layouts=fr
initrd (loop)/live/initrd.img
SystemRescueCd
À partir de la version 6. Basé maintenant sur Arch (au lieu de Gentoo).
Page de téléchargement - Manuel d'utilisation - Documentation Officielle SystemRescue ISO et grub2
- Officiel: la partition où se trouve l'iso a une étiquette "USB-ISOs" (créée avec Gparted). Nom inchangé même si autre chose est branché en USB.
- Classique: quand on est sûr du nom du disque où se trouve l'iso. Ici: /dev/sdb1 ou (hd1,1) pour grub.
menuentry "systemrescuecd Officiel" { set isofile="/isos/10_maintenance/systemrescuecd-6.0.0.iso" search --no-floppy --label USB-ISOs --set=root loopback loop $isofile echo 'Chargement du noyau Linux ...' linux (loop)/sysresccd/boot/x86_64/vmlinuz img_label=USB-ISOs img_loop=$isofile archisobasedir=sysresccd copytoram setkmap=fr-latin9 echo 'Chargement de initramfs ...' initrd (loop)/sysresccd/boot/x86_64/sysresccd.img } menuentry "systemrescuecd Classique" { set isofile="/isos/10_maintenance/systemrescuecd-6.0.0.iso" set root=(hd1,1) loopback loop $isofile echo 'Chargement du noyau Linux ...' linux (loop)/sysresccd/boot/x86_64/vmlinuz img_dev=/dev/sdb1 img_loop=$isofile archisobasedir=sysresccd copytoram setkmap=fr-latin9 echo 'Chargement de initramfs ...' initrd (loop)/sysresccd/boot/x86_64/sysresccd.img }
CloneZilla
Clonezilla vous permettra de cloner une partition vers une image ou une autre partition ou inversement.
- version stable (basée sur Debian)
linux (loop)/live/vmlinuz persistent boot=live findiso=$isofile union=overlay username=user config components quiet noswap lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 edd=on nomodeset nodmraid ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" keyboard-layouts=fr ocs_live_batch=\"no\" vga=normal ip=frommedia nosplash toram=filesystem.squashfs timezone=Europe/Paris utc=yes initrd (loop)/live/initrd.img
- version alternative stable (basée sur Ubuntu)
linux (loop)/live/vmlinuz persistent boot=live findiso=$isofile union=overlay username=user hostname=xenial config components quiet noswap lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 edd=on nomodeset nodmraid noeject ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" keyboard-layouts=fr ocs_live_batch=\"no\" vga=normal ip=frommedia nosplash toram=filesystem.squashfs timezone=Europe/Paris utc=yes net.ifnames=0 initrd (loop)/live/initrd.img
Distributions Linux prinipales
Arch
Ne connaissant aucune version livecd officielle, voici quelques distributions dérivées de Arch Linux (pas trouvé comment les lancer directement en français) :
- Archbang (environnement Openbox) : Téléchargement
pensez à modifier 'img_dev' selon la partition où est votre iso et 'archisolabel'
linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop archisobasedir=arch archisolabel=ARCHBANG
initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/x86_64/archiso.img
- ArchEX (environnement Lxde) : Téléchargement
pensez à modifier 'img_dev' selon la partition où est votre iso et 'archisolabel'
linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop archisobasedir=arch archisolabel=ARCH_201607
initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/x86_64/archiso.img
- Manjaro Lxqt : Lxqt et autres environnements
pensez à modifier 'img_dev' selon la partition où est votre iso. 'misobasedir' et 'misolabel' ne sont pas indispensables pour toutes les versions (il faut ouvrir l'iso dans votre gestionnaire d'archives et les rechercher dans /boot/grub/kernel.cfg)
linux (loop)/boot/vmlinuz-x86_64 img_dev=/dev/sda10 img_loop=$isofile misobasedir=manjaro misolabel=MJRO1715 driver=free lang=fr_FR keytable=fr tz=Europe/Paris
initrd (loop)/boot/intel_ucode.img (loop)/boot/initramfs-x86_64.img
Debian
Même si Debian est parent du projet Ubuntu, son lancement est différent car il n'utilise pas casper (pour connaître la version du vmlinuz et du initrd, il faut ouvrir l'iso avec votre gestionnaire d'archives).
- Stable (version 9.3 : Stretch) : Téléchargement
linux (loop)/live/vmlinuz-4.9.0-4-amd64 boot=live findiso=${isofile} components keyboard-layouts=fr locales=fr_FR.UTF-8 timezone=Europe/Paris
initrd (loop)/live/initrd.img-4.9.0-4-amd64
Dérivées
- LMDE : Téléchargement
linux (loop)/live/vmlinuz boot=live findiso=${isofile} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
initrd (loop)/live/initrd.lz
Fedora
Par rapport au menu standard, on définira une variable de plus : $isolabel. Pour la trouver, il faut ouvrir l'iso avec le gestionnaire d'archive (clic droit). Dans le dossier 'isolinux', il faut ouvrir 'isolinux.cfg' puis rechercher CDLABEL.
- Fedora live Workstation - Téléchargement
set isolabel="Fedora-WS-Live-29-1-2"
linux (loop)/isolinux/vmlinuz root=live:CDLABEL=$isolabel iso-scan/filename=$isofile rootfstype=auto rd.live.image rhgb keytable=fr lang=fr_FR.utf8 locale.lang=fr_FR vconsole.keymap=fr
initrd (loop)/isolinux/initrd.img
Après le lancement, il faut aller dans les paramètres de langue et région, faire les changements et relancer la session comme proposé (sans mot de passe).
Gentoo
- Gentoo Live DVD (les codes pour le lancer directement en français ne fonctionnent plus depuis la version 2016) - Téléchargement
linux (loop)/isolinux/gentoo isoboot=$isofile root=/dev/ram0 init=/linuxrc aufs looptype=squashfs loop=/image.squashfs cdroot vconsole.keymap=fr locale=fr_FR console=tty1 nomodeset
initrd (loop)/isolinux/gentoo.xz
Dérivées
- Sabayon (lui peut être lancé en français sans problème) - Téléchargement
linux (loop)/boot/sabayon root=/dev/ram0 init=/linuxrc lang=fr_FR isoboot=${isofile} cdroot looptype=squashfs loop=/livecd.squashfs overlayfs
initrd (loop)/boot/sabayon.igz
OpenMandriva Lx
- OpenMandriva Lx - Téléchargement
menuentry "OpenMandriva" { set isofile=/isos/OpenMandrivaLx.4.1-plasma.x86_64.iso set isoname=OpenMandrivaLx_4.1 loopback loop $isofile echo 'Lancement en cours, patientez ...' linux (loop)/boot/vmlinuz0 root=live:LABEL=${isoname} iso-scan/filename=${isofile} locale.LANG=fr_FR.UTF-8 vconsole.keymap=fr rd.live.image toram -- initrd (loop)/boot/liveinitrd.img }
openSUSE
- openSUSE version install Téléchargement
linux (loop)/boot/x86_64/loader/linux install=hd:$isofile
initrd (loop)/boot/x86_64/loader/initrd
Slackware
Un petit tour chez la grand-mère des distros. Pas réussi à lancer la version live depuis Grub.
- Slackware version install. Téléchargement
linux (loop)/kernels/huge.s/bzImage load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s locale=fr_FR.utf8 kbd=fr tz=Europe/Paris
initrd (loop)/isolinux/initrd.img
Distributions linu spécialisées
Ce sont des distributions dédiées à une certaine utilisation. N'oubliez pas les paramètres généraux et les lignes en italiques sont celles qui sont différentes du menu de base.
Jeux
- Fedora Games (voir plus haut) Téléchargement - Autres suites logicielles
set isolabel="Fedora-Game-Live-24-1-2"
linux (loop)/isolinux/vmlinuz root=live:CDLABEL=$isolabel iso-scan/filename=$isofile rootfstype=auto rd.live.image rhgb KEYTABLE=fr LANG=fr_FR.utf8 locale.lang=fr_FR vconsole.keymap=fr
initrd (loop)/isolinux/initrd.img
Logiciels éducatifs
- edubuntu pas d'iso depuis 2014.
- PrimTux : Page de téléchargement
linux (loop)/live/vmlinuz2 boot=live findiso=${isofile} components live-config hostname=localhost lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
initrd (loop)/live/initrd2.img
- Uberstudent (beaucoup de logiciels qui ne sont pas sur d'autres distros) : Téléchargement
linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/uberstudent.seed noprompt quiet splash
initrd (loop)/casper/initrd.lz
Logiciels pour la MAO (Musique Assistée par Ordinateur)
- Ubuntu Studio est déjà cité plus haut.
- Musix développée par des argentins : Site de téléchargement
linux (loop)/live/vmlinuz boot=live findiso=${isofile} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes quiet splash
initrd (loop)/live/initrd.img
Distribution pour test d'environnements
Enlightenment
- Elive a quelques racourcis intéressants (Alt + clic glissé : clic gauche déplace la fenêtre, clic droit la redimensionne par exemple) : téléchargement de la version beta
linux (loop)/live/vmlinuz1 username=eliveuser boot=live findiso=${isofile} live-config lang=fr_FR.UTF-8 locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris utc=yes loglevel=0 quiet splash
initrd (loop)/live/initrd1.img
Pantheon d'Elementary OS
elementary OS (basé sur Ubuntu) a son propre environnement baptisé Pantheon.
Page de téléchargement (pour tester, on peut mettre 0€ et utiliser le magnet/torrent)
- linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper noprompt quiet splash
initrd (loop)/casper/initrd.lz
antiX: IceWm et Fluxbox
Antix est une distribution pouvant tourner sur de vieux systèmes. Elle utilise notamment des environnements de bureau légers tels que IceWm et Fluxbox.
Page de téléchargement
- linux (loop)/antiX/vmlinuz fromiso=${isofile} bootdev=sda2 lang=fr tz=Europe/Paris xres=1920x1080 toram hwclock=utc quiet splash
initrd (loop)/antiX/initrd.gz
Remarque : 'bootdev' et 'xres' sont à adapter à votre configuration.
Windows 10
Voici la configuration de base :
menuentry "Windows 10" --class windows --class os { # Insert modules needed in order to access the iso-file insmod part_gpt #insmod part_msdos insmod ntfs #insmod ext2 # Insert module needed in order to find partition insmod search_fs_uuid # Set UUID of partition with the iso-image # and let grub2 find the partition # (save it's identifier to the variable $root) set uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" search --no-floppy --set=root --fs-uuid $uuid # Mount the iso image by addressing it with (partition)/path set iso=/ISO_PATH/file.iso loopback loop ($root)$iso # boot (chain-load) the image using the cdboot.efi file located # on the win10-image chainloader (loop)/efi/microsoft/boot/cdboot.efi }
Adaptation :
- Remplacer XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX avec UUID de la partition ou est l'image Windows 10.
- Activer les modules necessaires :
- insmod part_gpt: ce module est nécessaire, si Win10-ISO-Image est sur une table de partition GPT.
- insmod part_msdos: Choisir si l'image Windows est sur une table de partition DOS
- insmod ntfs: ce module est nécessaire si l'image Windows est sur une table de partition NTFS.
- insmod ext2: Remplacer insmod ntfs par insmod ext2, si l'image est sur des partitions ext2/ext3 ou ext4
- Remplacer /ISO_PATH/file.iso pas le chemin d'accès et le fichier iso
Pour aller plus loin
GRUB sur une clé USB
Pour lancer ses ISOs, on peut créer une clé USB bootable avec Grub dessus.
- La procédure décrite ci-dessous permet de démarrer aussi bien avec des BIOS anciens qu'avec des BIOS UEFI.
- La clé sera totalement effacée. Pensez à sauvegarder son éventuel contenu!
- Bien repérer le nom de la clé.
sudo blkid
- exemple réalisé depuis un iso Xubuntu lancé en 'live-cd'.
Remise à zéro de la clé
Dans Gparted
Créer 2 partitions
- créer une partition de type "FAT32" de 16Mo, étiquette EFI-USB
- créer une seconde partition de type "FAT32" pour le reste, étiquette GRUB-SOS
- Appliquer
- par clic-droit mettre le drapeau "esp" sur la partition EFI-USB (la rend bootable sur les systèmes UEFI)
Installer Grub
- s'assurer que les binaires des 2 types de Grub sont bien installés:
sudo apt install grub-pc-bin grub-efi-amd64-bin
- créer les points de montage et monter les 2 partitions (sdc s'appelle peut-être différemment pour vous):
sudo mkdir /mnt/efi sudo mkdir /mnt/usb sudo mount /dev/sdc1 /mnt/efi sudo mount /dev/sdc2 /mnt/usb
- lignes de commandes pour installer les 2 types de Grub sur la clé:
sudo grub-install --no-floppy --boot-directory=/mnt/usb --removable --target=i386-pc /dev/sdc sudo grub-install --no-floppy --boot-directory=/mnt/usb --removable --target=x86_64-efi --efi-directory=/mnt/efi /dev/sdc
Pour faire fonctionner cette clé, il vous faudra rajouter un fichier dans /grub: grub.cfg.
exemple de fichier grub.cfg
Voici un grub.cfg qui fonctionne:
- grub.cfg
insmod part_gpt insmod part_msdos insmod fat insmod ext2 #insmod all_video insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrus insmod gfxterm set gfxmode=1920x1080 set locale_dir=/grub/locale set lang=fr_FR insmod gettext terminal_output gfxterm insmod gfxmenu insmod gzio insmod loopback insmod iso9660 insmod png insmod jpeg insmod font loadfont /grub/fonts/unicode.pf2 loadfont /grub/themes/Crunchy-simple/ComicNeue_normal.pf2 loadfont /grub/themes/Crunchy-simple/ComicNeue_title.pf2 theme=/grub/themes/Crunchy-simple/theme-fog.txt #timeout=4 default=1 background_image /grub/themes/Crunchy-simple/fog/foggy-forest.jpg gfxpayload=keep menuentry "------------------- MAINTENANCE -------------------" { true } menuentry "... Gparted live" { set isofile="/gparted-live-1.0.0-5-amd64.iso" search --set=root --file $isofile loopback loop $isofile echo 'Lancement en cours, veuillez patienter ...' linux (loop)/live/vmlinuz findiso=${isofile} boot=live union=overlay username=user config components noswap toram=filesystem.squashfs ip= net.ifnames=0 nosplash locales=fr_FR.UTF-8 keyboard-layouts=fr initrd (loop)/live/initrd.img } menuentry "----------------- Linux à installer -----------------" { true } menuentry ".... Xubuntu 20.04 LTS" { set isofile="/xub-focal-desktop-amd64.iso" search --set=root --file $isofile loopback loop $isofile echo 'Lancement en cours, veuillez patienter ...' linux (loop)/casper/vmlinuz locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/xubuntu.seed noprompt quiet splash -- initrd (loop)/casper/initrd } menuentry "----------- Accès aux systèmes installés -----------" { true } menuentry ".. Menu sur /dev/sda2 (e pour modifier)" { set root='hd0,gpt2' configfile /boot/grub/grub.cfg } menuentry " > » ETEINDRE « <" { halt }
Comme sur la clé, nous sommes sur une partition FAT32, nous pourrons modifier ce fichier sans avoir besoin d'être 'root'.
Le thème utilisé provient de cette page.
Une configuration sans être root
le dossier /isos
Si ce dossier est à la racine, peut-être avez-vous des problèmes de droits avec. Il vous suffit de changer l'appartenance du dossier avec la commande:
sudo chown -R $USER:$USER /isos
Fichier de configuration non root
Plus haut, nous avons dit qu'il fallait ajouter les menus dans le fichier "/etc/grub.d/40_custom". Cela oblige à faire un update-grub après chaque modification.
La solution:
- utiliser, par exemple, le fichier grub.cfg cité plus haut,
- le placer dans le dossier /isos
- le renommer, par exemple, grubiso.cfg
- ajouter cette entrée de menu à "/etc/grub.d/40_custom":
- 40_custom
menuentry "===>> lancer mes isos" { search --set=root --file /isos/grubiso.cfg configfile /isos/grubiso.cfg }
- lancer un sudo update-grub
Maintenant, chaque modification de grubiso.cfg est prise en compte sans nouvel update-grub !
Problèmes connus
grub en version 2.04 installé en mode EFI
Selon ce bug, pour les versions 19.10 et suivantes avec un grub en version 2.04 installé en mode EFI, cette fonctionnalité ne fonctionne plus.
Sans essayer de réinstaller grub en version 2.02, on peut lui demander de lancer cette version au démarrage ainsi:
- télécharger le paquet grub-efi-amd64-bin en version 2.02 → https://packages.ubuntu.com/disco-updates/amd64/grub-efi-amd64-bin/download
- ouvrir avec le gestionnaire d'archives le paquet deb
- en extraire le fichier grubx64.efi (dans /usr/lib/grub/x86_64-efi/monolithic/)
- dans un terminal avec la commande efibootmgr vérifier le système sur lequel l'ordi boote (xubuntu par exemple)
- copier grubx64.efi dans le bon dossier sur /boot/efi.
sudo cp grubx64.efi /boot/efi/EFI/xubuntu/.
Note: Il faudra peut-être renouveller cette opération si grub s'est mis à jour vers une version 2.04 ou supérieure sans résoudre le problème.
Contributeurs principaux : Frombenny …