Σκριπτάκι για δημιουργία USB stick

Ξεκίνησε από alkisg, 16 Δεκ 2012, 09:50:00 ΜΜ

« προηγούμενο - επόμενο »

alkisg

Για προχωρημένους χρήστες.

Το παρακάτω σκριπτάκι φορμάρει ένα USB stick και του εγκαθιστά τον grub, ώστε να μπορούμε μετά να βάζουμε εκδόσεις του Linux σε .iso μορφή στο stick, ή images από δισκέτες κτλ. Είναι πολύ βολικό, ουσιαστικά με αυτό δεν θα ξαναχρειαστείτε πια το unetbootin ή το usb-creator-gtk.

Κώδικας: shell
#!/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"

odysseas

Πάρα πολύ χρήσιμο! Φέτος έτυχε να αλλάξω πολλές φορές το στικάκι μου ανάμεσα σε ubuntu, lubuntu και clonezilla και μου φαίνεται τρομερή η δυνατότητα να μπορείς να χρησιμοποιείς πολλά iso ταυτόχρονα.

Ψάχνοντας να δω αν υπάρχει κάποιος στάνταρ τρόπος να βρίσκεις το απαιτούμενο menuentry για κάθε iso, έπεσα πάνω στο multibootUSB που φαίνεται να κάνει την ίδια δουλειά. Με το λίγο που προσπάθησα δεν κατάφερα να το εγκαταστήσω στο 12.04 γιατί φαίνεται να τα έχουν κάνει λίγο μαντάρα με τα dependencies όμως έκλεψα ένα script (το επισυνάπτω) στο οποίο μπορεί κανείς να βρει έτοιμα menuentry για καμιά εκατοστή διανομές. Αυτά (φαντάζομαι) μπορεί να τα βάλει κανείς στο grub.cfg, όπως απαιτείται από το script του Άλκη.

Ευχαριστούμε πολύ. Όταν βρω χρόνο να το δοκιμάσω θα αναφέρω.

odysseas

#2
Δυστυχώς δεν κατάφερα να το κάνω να δουλέψει ούτε για το .iso της Τεχνικής Στήριξης, για το οποίο υπάρχει έτοιμο menuentry.

edit: Κλασική περίπτωση στραβομάρας, δουλεύει μια χαρά. Το δοκίμασα επίσης με το κλασικό live cd του Ubuntu, το Lubuntu και το Clonezilla.

Νομίζω θα ήταν επίσης πολύ χρήσιμο ένα live image που να έχει έτοιμη την υποδομή που στήνει το άλλο σκριπτάκι του Άλκη, σε συνδυασμό με ένα μενού πολλαπλών επιλογών, ώστε να είναι δυνατή η εκκίνηση πολλαπλών images και μέσω δικτύου.