Για προχωρημένους χρήστες.
Το παρακάτω σκριπτάκι φορμάρει ένα USB stick και του εγκαθιστά τον grub, ώστε να μπορούμε μετά να βάζουμε εκδόσεις του Linux σε .iso μορφή στο stick, ή images από δισκέτες κτλ. Είναι πολύ βολικό, ουσιαστικά με αυτό δεν θα ξαναχρειαστείτε πια το unetbootin ή το usb-creator-gtk.
#!/bin/sh
usage()
{
echo "Usage: $0 [OPTION] <DEVICE>
Partitions a usb drive, installs grub on it, and creates a grub.cfg that
displays a simple menu for loading .iso files etc.
Options:
-l, --label= Specify a label for the usb drive.
-f, --force Don't prompt for user confirmation.
-h, --help Show a help message.
Example:
$0 -l \"BOOTABLE\" /dev/sdb
"
}
error()
{
echo "$@" >&2
}
die()
{
error "$@"
exit 1
}
process_cmdline()
{
while [ -n "$1" ]; do
case "$1" in
-f|--force)
force=true
;;
-h|--help)
usage
exit
;;
-l|--label)
label=$2
shift 2
;;
*)
device=$1
shift
;;
esac
done
if [ ! -b "$device" ]; then
usage >&2
exit 1
fi
}
require_root()
{
UID=${UID:-$(id -u)}
if [ "$UID" -ne 0 ]; then
die "Superuser privileges are required."
fi
}
generate_grub_cfg()
{
cat >/mnt/boot/grub/grub.cfg <<EOF
# To install grub to a usb stick, mount it to e.g. /media/stick, and then run:
# sudo grub-install --force --no-floppy --root-directory=/media/stick /dev/sdb
set timeout=10
set default=0
menuentry "Ubuntu 12.04-sch Desktop ISO" {
loopback loop /boot/ubuntu-12.04.1-desktop-i386-sch.iso
linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/boot/ubuntu-12.04.1-desktop-i386-sch.iso noeject noprompt -- debian-installer/language=el keyboard-configuration/layoutcode=gr
initrd (loop)/casper/initrd.lz
}
menuentry "Tinycore ISO" {
loopback loop /boot/TinyCore-current.iso
linux (loop)/boot/vmlinuz cde --
initrd (loop)/boot/core.gz
}
menuentry "Windows 98 boot disk" {
linux16 /boot/memdisk
initrd16 /boot/W98SeEl.img
}
menuentry "Memtest 86+" {
linux16 /boot/memtest86+.bin
}
menuentry "PXE - Network boot" {
linux16 /boot/ipxe.lkrn
}
EOF
}
set -e
process_cmdline "$@"
require_root
if [ "$force" != true ]; then
echo -n "This will ERASE all data in $device, are you sure? [y/n] "
read answer
if [ "$answer" != "y" ]; then
die "Aborted"
fi
fi
echo ',,b,*' | sfdisk -D "$device"
mkfs.vfat ${label:+-n "$label"} "${device}1"
mount "${device}1" /mnt
grub-install --root-directory=/mnt "$device"
cp /boot/memtest86+.bin \
/usr/lib/ipxe/ipxe.lkrn \
/usr/lib/syslinux/memdisk \
/mnt/boot/ || true
generate_grub_cfg
umount /mnt
echo "
Don't forget to put your .iso images to <drive>/boot,
and to manually update <drive>/boot/grub/grub.cfg accordingly.
If you have kvm installed, you can test the USB drive by running:
kvm -m 512 $device"
Πάρα πολύ χρήσιμο! Φέτος έτυχε να αλλάξω πολλές φορές το στικάκι μου ανάμεσα σε ubuntu, lubuntu και clonezilla και μου φαίνεται τρομερή η δυνατότητα να μπορείς να χρησιμοποιείς πολλά iso ταυτόχρονα.
Ψάχνοντας να δω αν υπάρχει κάποιος στάνταρ τρόπος να βρίσκεις το απαιτούμενο menuentry για κάθε iso, έπεσα πάνω στο multibootUSB που φαίνεται να κάνει την ίδια δουλειά. Με το λίγο που προσπάθησα δεν κατάφερα να το εγκαταστήσω στο 12.04 γιατί φαίνεται να τα έχουν κάνει λίγο μαντάρα με τα dependencies όμως έκλεψα ένα script (το επισυνάπτω) στο οποίο μπορεί κανείς να βρει έτοιμα menuentry για καμιά εκατοστή διανομές. Αυτά (φαντάζομαι) μπορεί να τα βάλει κανείς στο grub.cfg, όπως απαιτείται από το script του Άλκη.
Ευχαριστούμε πολύ. Όταν βρω χρόνο να το δοκιμάσω θα αναφέρω.
Δυστυχώς δεν κατάφερα να το κάνω να δουλέψει ούτε για το .iso της Τεχνικής Στήριξης, για το οποίο υπάρχει έτοιμο menuentry.
edit: Κλασική περίπτωση στραβομάρας, δουλεύει μια χαρά. Το δοκίμασα επίσης με το κλασικό live cd του Ubuntu, το Lubuntu και το Clonezilla.
Νομίζω θα ήταν επίσης πολύ χρήσιμο ένα live image που να έχει έτοιμη την υποδομή που στήνει το άλλο σκριπτάκι του Άλκη (https://wiki.ubuntu.com/LiveCDNetboot), σε συνδυασμό με ένα μενού πολλαπλών επιλογών (https://alkisg.mysch.gr/steki/index.php?topic=2828.0), ώστε να είναι δυνατή η εκκίνηση πολλαπλών images και μέσω δικτύου.