вторник, 31 января 2012 г.

Установка Calculate Linux с usb flash используя grub2

Чуть-чуть теории или как livecd gentoo определеяет с какого диска продолжать загрузку.
Делают это скрипты initrd.
Они по очереди монтируют /dev/sd[a-b][1-9] и /dev/sr[0-9] (возможно с диапазонами я ошибся, но сути это не меняет) и проверяют наличее в корне примонтированного диска файла livecd.
Как только файл обнаружен - монтируется файл заданный в переменной окружения LOOP и chroot'ится в новый корень, передавая управление новому init'у.
Переменная окружения LOOP не задается где-то внутри скриптов, как может показаться на первый взгляд, а передается как опция ядра.
И ядро уже в свою очередь передает эту опцию init'у, который и выставляет переменную окружения.


Практика

У меня флешка в системе определилась как /dev/sdb. На первой партиции vfat раздел. ФС не принципиальна, главное чтобы grub ее знал.

Можно отформатировать флешку, например в FAT32 
mkfs.vfat /dev/sdb1


Монтируем флешку:
mount -t vfat /dev/sdb1 /mnt/flash

Устаналиваем загрузчик:
grub-install --no-floppy --root-directory=/mnt/flash/ /dev/sdb

Вариант 1
В этом варианте мы вручную "потрошим" установочный образ диска.
По идее данная операция не должна уничтожить существующую информацию на флеш-диске. Но бекап лучше все-таки сделать. Граб установлен, надо где-то взять ядро и initrd Монтируем iso-образ CL:

# mount -o loop -t iso9660 ~/cld-11.12-x86_64.iso /mnt/cdrom
# cp /mnt/cdrom/boot/vmlinuz /mnt/flash/boot/vmlinuz
# cp /mnt/cdrom/boot/initrd /mnt/flash/boot/initrd
Заодно скопируем файл livecd и тот самый образ livecd.squashfs

# cp /mnt/cdrom/livecd* /mnt/flash/
И последнее - настройка grub2. Необходимо создать /mnt/flash/boot/grub/grub.cfg со следующим содержимым (никаких \ быть не должно, как и переносов строк после них. Здесь они ради удобства чтения):

menuentry "alculate linux desktop 11.12 x86_64" {
    linux /boot/vmlinuz init=/linuxrc looptype=squashfs unionfs cdroot_type=vfat \
doload=vfat,nls_cp866,nls_utf8,squashfs,isofs,unionfs loop=livecd.squashfs \
nodevfs cdroot video=uvesafb:ywrap,1280x1024-32@60,mtrr:3,splash=silent,theme:tty1 \
CONSOLE=/dev/tty1 udev quiet noresume doscsi calculate=ru_RU,ru_RU,Europe/Kiev,auto    
    initrd /boot/initrd
}
Опции ядра можно подглядеть в /mnt/cdrom/isolinux/
В принципе все.
Перезагрузка, проверка загрузки с флешки.
Если ОС загрузилась с флешки, то именно флешка будет /dev/sda!
Все остальные диски будут начинаться с /dev/sdb.
Чуть-чуть внимания при установке.

Все выше описанное должно быть справедливо и для lilo и для grub (не 2)

Вариант 2 

В данном варианте, по факту выполняется тоже самое, только не нужно распаковывать образ iso.
Мы указываем grub2 откуда и что брать в образе.
Т.е. по факту используем возможность grub2 по работе с образами.

menuentry "Calculate linux desktop 11.12 x86_64 (from ISO)" {
    loopback loop /boot/iso/cld-11.12-x86_64.iso
    linux (loop)/boot/vmlinuz  init=/linuxrc looptype=squashfs unionfs cdroot_type=vfat doload=vfat,nls_cp866,nls_utf8,squashfs,isofs,unionfs loop=livecd.squashfs        nodevfs cdroot video=uvesafb:ywrap,1280x1024-32@60,mtrr:3,splash=silent,theme:tty1 CONSOLE=/dev/tty1 udev quiet noresume doscsi       calculate=ru_RU,ru_RU,Asia/Novosibirsk,auto    
    initrd (loop)/boot/initrd
}
Итак немного опишу, что там за команды:
loopback loop задает точку монтирования loop, для образа /boot/iso/cld-11.12-x86_64.iso  
initrd -путь к сценарию initrd
linux - путь к ядру Линукса + дополнительные параметры, более подробно по параметрам можно почитать в GNU GRUB Manual 1.99

Аналогичным образом можно настраивать загрузку и многих других образов.
Я приведу несколько настроек для grub.cfg, найденных на просторах интернета:

menuentry "Ubuntu Live 11.04 64bit" {
        loopback loop /boot/iso/ubuntu-11.04-desktop-amd64.iso
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-11.04-desktop-amd64.iso noeject noprompt --
        initrd (loop)/casper/initrd.lz
}
 
menuentry "Ubuntu Live 9.10 32bit" {
 loopback loop /boot/iso/ubuntu-9.10-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-i386.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}
 
menuentry "Ubuntu Live 9.10 64bit" {
 loopback loop /boot/iso/ubuntu-9.10-desktop-amd64.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-9.10-desktop-amd64.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}
 
menuentry "Grml small 2009.10" {
  loopback loop /boot/iso/grml-small_2009.10.iso
  linux (loop)/boot/grmlsmall/linux26 findiso=/boot/iso/grml-small_2009.10.iso apm=power-off lang=us vga=791 boot=live nomce noeject noprompt --
  initrd (loop)/boot/grmlsmall/initrd.gz
}
 
menuentry "tinycore" {
 loopback loop /boot/iso/tinycore_2.3.1.iso
 linux (loop)/boot/bzImage --
 initrd (loop)/boot/tinycore.gz
}
 
menuentry "Netinstall 32 preseed" {
  loopback loop /boot/iso/mini.iso
  linux (loop)/linux auto url=http://www.panticz.de/pxe/preseed/preseed.seed locale=en_US console-setup/layoutcode=de netcfg/choose_interface=eth0 debconf/priority=critical --
  initrd (loop)/initrd.gz
}
 
menuentry "debian-installer-amd64.iso" {
  loopback loop /boot/iso/debian-installer-amd64.iso
  linux (loop)/linux vga=normal --
  initrd (loop)/initrd.gz
}
 
menuentry "BackTrack 4" {
 linux /boot/bt4/boot/vmlinuz BOOT=casper boot=casper nopersistent rw vga=0x317 --
 initrd /boot/bt4/boot/initrd.gz
}
 
menuentry "Memory test (memtest86+)" {
 linux16 /boot/img/memtest86+.bin
}
 
menuentry "BackTrack ERR" {
 loopback loop /boot/iso/bt4-pre-final.iso
 linux (loop)/boot/vmlinuz find_iso/filename=/boot/iso/bt4-pre-final.iso BOOT=casper boot=casper nopersistent rw vga=0x317--
 initrd (loop)/boot/initrd.gz
}          
 
menuentry "XBMC ERR" {
 loopback loop /boot/iso/XBMCLive.iso
 linux (loop)/vmlinuz boot=cd isofrom=/dev/sda1/boot/iso/XBMCLive.iso xbmc=nvidia,nodiskmount,tempfs,setvolume loglevel=0 --
 initrd (loop)/initrd0.img
}
 
menuentry "netboot.me" {
 loopback loop /boot/iso/netbootme.iso
 linux16 (loop)/GPXE.KRN
}
 
menuentry "debian installer amd64 netboot XEN pressed" {
  linux /boot/debian/linux auto preseed/url=http://www.panticz.de/pxe/preseed/xen.seed locale=en_US console-setup/layoutcode=de netcfg/choose_interface=eth0 debconf/priority=critical --
  initrd /boot/debian/initrd.gz
}

Ссылки:
GNU GRUB Manual 1.99
GRUB 2 bootloader - Full tutorial
Wiki Grub 2
Установка Calculate Linux с usb flash используя grub2
Загрузка нескольких iso-образов с одного USB Flash c файловой системой VFAT
MultiBoot USB with Grub2 (boot directly from iso files) 

Комментариев нет:

Отправить комментарий