Skip to content

Instantly share code, notes, and snippets.

@abetkin
Created October 23, 2017 05:10
Show Gist options
  • Save abetkin/5e76f1917d69033561fcb0b8d9091845 to your computer and use it in GitHub Desktop.
Save abetkin/5e76f1917d69033561fcb0b8d9091845 to your computer and use it in GitHub Desktop.
I found this looking around on the net.
Grub2 is capable of directly booting ISO images for many Linux distros if the entries have been properly defined in the Grub2 configuration files.
The ISO image must be placed on a separate partition that does not have an operating system installed on it. For the sake of simplicity, we would place it inside a new directory under /boot (assuming it is on a separate partition).
Create the new directory and copy your ISO image:
sudo mkdir /boot/iso
sudo cp ~/Desktop/name.iso /boot/iso
Where ~/Desktop/name.iso is the location and name of your ISO image assuming that the image is located at your desktop.
Add the Grub2 entry:
The entry for the ISO image needs to be added to /etc/grub.d/40_custom file. Edit the file by:
gksudo gedit /etc/grub.d/40_custom
And replace the text in that file with this one:
```
#!/bin/sh
echo "Adding 40_custom." >&2
exec tail -n +4 $0
# 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 "Kubuntu ISO" {
set isofile="/boot/iso/kubuntu-12.04.iso"
loopback loop (hd0,8)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
```
Where is:
Kubuntu ISO = The name you want to display in the Grub menu.
boot/iso/kubuntu-12.04.iso = The location and name of your ISO image.
(hd0,8) = The partition which contains the ISO image.
note: the tail -n +4 means simply "which line grub starts to read the configuration from as is". the 4th line in this example is the first comment line, which is fine.
Grub reads the partitions in a different way than Ubuntu does. 'hd0' means first HDD which is read as sda by Ubuntu, and 8 is the partition which is the same as for Ubuntu. So in other words, (hd0,8) means 'sda8'.
To find out your partition, run this command in a Terminal:
sudo fdisk -l
Suppose your image is contained in the sda1 partition, you'd change (hd0,8) in the above line to (hd0,1) and if the image is in the sdb1 partition, you'd change (hd0,8) to (hd1,1).
Save and close this file and now run this command:
sudo update-grub
Reboot and choose the new ISO entry from Grub menu this time. Hopefully, it will boot successfully to the desktop.
Now, if you want to perform an installation from the same ISO, you'd need to unmount the ISO image first as it is mounted from a partition on your HDD (probably you've got a single HDD and want to install Ubuntu to the same HDD) and the installer needs to unmount any mounted partitions before it can make any changes.
So, from the Live CD environment, go to a Terminal and run:
sudo umount -l /isodevice
That's all. Now you can double-click the 'Install' icon at the desktop and proceed with the installation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment