Membuat Multi Installer Menggunakan GRUB2
Jika sering berkeliling ke grup atau forum Linux, niscaya sering menemui pertanyaan senada berikut; “Bagaimana burning ISO ke flash disk?”, “Burning ISO ke flash disk pakai software apa?”, dan sejenisnya. It’s kind of boring, really…. Meski memang bisa dimaklumi, tidak banyak piranti lunak GUI untuk membuat installer USB flash disk (UFD) di GNU/Linux. Sepertinya yang langsung terlintas di benak adalah unetbootin
. Terlebih dengan tren ISO hibrida, banyak yang menyarankan penggunaan dd
melalui terminal yang umumnya masih menjadi momok menyeramkan bagi pemula.
Uniknya, –atau mungkin lebih tepat, ironisnya– piranti lunak pembuat UFD installer ini lebih banyak diperuntukkan sistem operasi Windows, padahal banyak di antara piranti lunak tersebut mengandalkan fork dari GRUB.
Dari sekian banyak piranti lunak GUI pembuat UFD installer di GNU/Linux, misal unetbootin
, gnome-multi-writer
, atau etcher
sepertinya tidak ada yang benar-benar saya sukai. Umumnya piranti lunak ini merupakan front end dari dd
yang berarti mewajibkan semua isi UFD dibabad habis.
Persyaratan utama yang saya ajukan bagi UFD installer adalah ia mesti menjaga keutuhan isi UFD atau HDD external yang digunakan, karena umumnya UFD atau HDD yang saya miliki telah berisi data. Multiboot adalah nilai tambah, terlebih jika mampu booting berkas ISO Windows.
Selama ini saya menggunakan dua piranti lunak untuk membuat UFD installer; (1) menggunakan easy2boot sebagaimana pernah saya tulis di artikel “Membuat USB Installer Menggunakan easy2boot”, dan (2) menggunakan kemampuan GRUB2 untuk booting berkas ISO sebagaimana telah saya tulis di artikel “Boot ISO Menggunakan GRUB2”.
Artikel kali ini sebenarnya sama persis dengan artikel “Boot ISO Menggunakan GRUB2”, hanya ditambahi cara memasang GRUB di UFD atau HDD external yang dijadikan sarana penyimpanan boot. Sangat disarankan untuk membaca artikel tersebut terlebih dahulu.
Langsung saja, berikut tutorial menjadikan UFD atau HDD external sebagai installer bagi banyak distro GNU/Linux. Sebagai bonus, data yang ada dalam UFD atau HDD external akan tetap utuh dan installer ini bisa pula booting berkas ISO Windows recovery atau PE selama ukurannya tidak melebihi 500MB.
- Tancapkan UFD atau HDD ke slot USB kemudian cari PATH-nya menggunakan
sudo lsblk -f
. Dimisalkan letaknya disda1
alias/dev/sda1
. Kaitkan partisi tersebut, misal ke
/mnt
sudo mount /dev/sda1 /mnt
Buat map untuk direktori GRUB dan menyimpan berkas-berkas ISO
sudo mkdir /mnt/{boot,iso}
Pasang GRUB ke Master Boot Record (MBR) UFD atau HDD external. Karena tadi letak partisinya di
sda1
, maka MBR diska tersebut ada disda
.sudo grub-install --force --boot-directory=/mnt/boot /dev/sda
- Simpan berkas-berkas ISO yang hendak di-boot ke dalam map
/mnt/iso
dalam UFD/HDD. Buat berkas bernama
grub.cfg
dan simpan di/mnt/boot/grub
UFD/HDD. Berikut dicontohkan menggunakannano
.sudo nano /mnt/boot/grub/grub.cfg
Isi berkas
grub.cfg
tersebut dengan entri boot dari masing-masing ISO yang terdapat dalam mapiso
. Kita bisa mencontoh entri boot dari artikel Boot ISO Menggunakan GRUB2 kemarin, misal seperti ini:menuentry "Arch 2015.10.01" --class iso { set isofile=/iso/archlinux-2015.10.01-dual.iso loopback loop $isofile linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201508 img_dev=/dev/sda1 img_loop=$isofile earlymodules=loop initrd (loop)/arch/boot/x86_64/archiso.img } menuentry "Bodhi Linux 3.0 amd64" --class iso { set isofile=/iso/bodhi-3.0.0-64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "elementary OS Freya amd64" --class iso { set isofile=/iso/elementaryos-stable-0.3.1-amd64.20150903.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "Fedora-Live-Workstation-x86_64-21-5" { set isofile=/iso/Fedora-Live-Workstation-x86_64-21-5.iso loopback loop $isofile linux (loop)/isolinux/vmlinuz0 iso-scan/filename=$isofile root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 initrd (loop)/isolinux/initrd0.img } menuentry "Grml Rescue System (grml32-full_2014.11.iso)" { insmod part_msdos insmod btrfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 44afbedc-1299-493f-b823-bd0b0ac7e61f else search --no-floppy --fs-uuid --set=root 44afbedc-1299-493f-b823-bd0b0ac7e61f fi iso_path="/iso/grml32-full_2014.11.iso" export iso_path kernelopts=" " export kernelopts loopback loop "/iso/grml32-full_2014.11.iso" set root=(loop) configfile /boot/grub/loopback.cfg } menuentry "Kubuntu 15.04 amd64" --class iso { set isofile=/iso/kubuntu-15.04-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "LinuxMint 17 Cinnamon amd64" { set isofile=/iso/linuxmint-17-cinnamon-dvd-64bit.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- initrd (loop)/casper/initrd.lz } menuentry "LinuxMint 18 MATE amd64" { set isofile=/iso/linuxmint-18-mate-64bit.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- initrd (loop)/casper/initrd.lz } menuentry "Lubuntu 15.04 amd64" --class iso { set isofile=/iso/lubuntu-15.04-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } # Jika gagal boot, coba-coba ubah /dev/sdc1 ke diska yang sesuai, misal sda1, sda2, dst, atau sdb1, sdb2 dst menuentry "Manjaro LXQt 0.8.12 i686" --class iso { set isofile=/iso/manjaro-lxqt-0.8.12-i686.iso loopback loop $isofile linux (loop)/manjaro/boot/i686/manjaroiso misobasedir=manjaro misolabel=MJRO0812 img_dev=/dev/sdc1 img_loop=$isofile initrd (loop)/manjaro/boot/i686/manjaro.img } menuentry "Parted Magic 2015.01.13" { linux16 /boot/memdisk iso initrd16 /iso/pmagic_2015_01_13.iso } menuentry "Repair_disc_Windows_7_32-bit" { linux16 /boot/memdisk iso initrd16 /iso/Windows/Repair_disc_Windows_7_32-bit.iso } menuentry "Repair_disc_Windows_7_64-bit" { linux16 /boot/memdisk iso initrd16 /home/iza/Software/Windows/ISO/Repair_disc_Windows_7_64-bit.iso } menuentry "Siduction 14.1.0 LXQT amd64" --class iso { set isofile=/iso/siduction-14.1.0-paintitblack-lxqt-amd64-201405081704.iso loopback loop $isofile linux (loop)/boot/vmlinuz0.amd boot=boot iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/boot/initrd0.amd } menuentry "Super Grub2 Disk Hybrid 2.02s3" { linux16 /boot/memdisk iso initrd16 /iso/super_grub2_disk_hybrid_2.02s3.iso } menuentry 'SolusOS 2017.04.18 Budgie' { set isofile='/iso/Solus-2017.04.18.0-Budgie.iso' loopback loop $isofile linux (loop)/boot/kernel boot=casper iso-scan/filename=$isofile noprompt noeject root=live:CDLABEL=SolusLiveBudgie ro rd.live.image rd.luks=0 rd.md=0 rd.dm=0 -- initrd (loop)/boot/initrd.img } menuentry "SystemRescueCD 4.8.2-beta003 32bit" { set isofile=/iso/systemrescuecd-x86-4.8.2-beta003.iso loopback loop $isofile linux (loop)/isolinux/rescue32 setkmap=us isoloop=$isofile initrd (loop)/isolinux/initram.igz } menuentry "Ubuntu 16.04.1 amd64" --class iso { set isofile=/iso/ubuntu-16.04.1-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "Ubuntu 17.04 amd64" --class iso { set isofile=/iso/ubuntu-17.04-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "Ubuntu MATE 14.10 amd64" --class iso { set isofile=/iso/ubuntu-mate-14.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram -- initrd (loop)/casper/initrd.lz } menuentry "Void Linux 4.5.2_1 x86_64 (RAM)" { set isofile=/iso/void-live-x86_64-20160420-lxqt.iso loopback loop $isofile linux (loop)/boot/vmlinuz iso-scan/filename=$isofile root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8 rd.live.ram initrd (loop)/boot/initrd } menuentry "Windows 7 PESE x86" { linux16 /boot/memdisk iso initrd16 /iso/Win7PESE_x86.iso }
Simpan berkas dengan menekan
CTRL+O
kemudian keluar darinano
menggunakanCTRL+X
.Tentunya jika berkas ISO Anda tidak tercantum dalam contoh, berarti mesti mencari sendiri entri boot yang tepat. Untuk Ubuntu dan turunannya biasanya tinggal menyesuaikan nama berkas ISO saja.
Pasang paket
sysutils
kemudian salin/usr/lib/syslinux/memdisk
ke/mnt/boot
agar kita bisa booting entri yang terdapatmemdisk
di dalam barisnya.sudo aptitude install sysutils sudo cp /usr/lib/syslinux/memdisk /mnt/boot
memdisk
hanya bisa booting ISO berukuran di bawah 500MB. FYI,memdisk
di Grub4DOS bisa booting berkas berukuran lebih dari 500MB, entah bagaimana caranya, mungkin telah patched.- That’s it. Saatnya untuk reboot dan menjajal apakah installer ini bekerja dengan baik.