Планета Calculate

Облако тэгов

world wi-fi udev мышка news Midnight Commander kde calculate-sources полезное templates pitivi calculate 2.2 portage CMC mail xchat swap ПДУ theme звук xsel серые листы meta djvu winbind tracker ДНК cld cp1251 X linuxdcpp 1C postgresql apache live-flash syslog cairo-dock автологин atheros9285 настройка цветов принтера mpg123 профиль пользователя sony bonding smplayer flags optimization fonts book bluetooth dwm NetworkManager apvlv VirtualBox nm-applet weechat 11.6 CLDG backdor rtorrent uptime rutorrent ati autologin ccze alsa asus n10j torrent press tail радио mailman интервью Audio BINHOST builder bash donation CSS сеты клавиатура Office cldg security strategy загрузчик dhcp binhost Скоростной алгоритм сжатия LZ4 TV GSC canto screenshot пресса xxkb участие feh USE samba tun slim maillist lighttpd шаблоны домашний сервер xbmc Gnome3 hdmi atom n270 stage UTF-8 оптимизация linux foto pam KDE textile bond install Calculate Utilities elogv многопоточная закачка gnome3 asus tint gentoo vlc ati-drivers p2p mp3 plugn ldap lirc screencast vaio mc games desktop ups lvm ускорение git Xorg team windows MultiTail BugTracker Atheros mplayer XFCE PowerTOP ПО package unmasking установка pulseaudio net vulnerability ppp0 blog tap tint2 mouse vim перемещаемые профили iptables mirror livecd Gnome установка linux calculate3 помощь update binary dns calculate-install рассылка man kde и многопоточный звук euse grub2 интернет db Calculate E17 hdd wiki most umd openrc release acoola новости mirrorselect bsa font aufs iphone btrfs pxe birthday obmenu E17 доступ nut настройка цветов монитора RSS безопасность emerge ncurses почта удаленная сеть qutim разработка udisks ntfs-3g Новости xorg grub openldap openbox udisks настройка цветов сканера keyboard Calculate template package sound calculate handbook postfix ffmpeg ubuntu grc kernel pwkl cds глобальное меню загрузка командная строка EAPI 2 CLS make.conf E17 Calculate win7 acl chromium jabber overlay recordmydesktop windows 7 autounmask bittorrent nouveau network двойная загрузка #calculatelinux developers ParaType linux tbn facebook locale Desktop DNA irc bug benchmarking оптимизация ядра CDS настройка linux raid atheros calculate linux obconf calculate2 маршрутизатор gnome vpn pptp MidnightCommander calculate-install-gui CLDX calculate utilities glx-dock internet history видео blueman profile Windows 7 layout Zen CLD CDS dns dhcp настройка цветов фотоаппарата Calculate Linux Enlightenment video сглаживание udisks-glue python debian reader цветовой профиль icc localepurge smart перенесено костыли bash-completion кеширование proxy распространение pdf cmc Calculate USB Creator dropbox kde xfce pastebin Calculate Linux Spamassassin twitter брелок ssh шрифт authentication cls канал wget LVM

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

Добавил(а) Ilya Ashchepkov больше 1 года назад

Дано: обычная флешка на 2Гб, компьютер с линуксом, iso-образ CL.
Цель: сделать live-flash CL.

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

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

# mount -t vfat /dev/sdb1 /mnt/flash

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

По идее данная операция не должна уничтожить существующую информацию на флеш-диске. Но бекап лучше все-таки сделать.

Граб установлен, надо где-то взять ядро и initrd
Монтируем iso-образ CL:

# mount -o loop -t iso9660 cld-20101230.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 "Calculate linux desktop 11.0 beta 2" {
    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,Asia/Novosibirsk,auto
    initrd /boot/initrd
}

Опции ядра можно подглядеть в /mnt/cdrom/isolinux/

В принципе все.
Перезагрузка, проверка загрузки с флешки.

Если ОС загрузилась с флешки, то именно флешка будет /dev/sda!
Все остальные диски будут начинаться с /dev/sdb.
Чуть-чуть внимания при установке.

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

Немного эзотерики или зачем все это затеяно
Дело в команде граба loopback
Если в конфиге граба указать примерно следующее (я намеренно опускаю опции ядра, для более легко чтения)

menuentry "Calculate linux desktop 11.0 beta 2" {
    loopback loop /boot/cld-20101230.iso
    linux (loop)/boot/vmlinuz
    initrd (loop)/boot/initrd
}

то ядро и initrd будет браться из образа диска. Это достаточно простой способ создания мультизагрузочной флешки.
Накидываем .iso образов, прописываем их в grub.cfg (а можно еще и при загрузке редактировать записи).
Но тут мы и столкнемся с особенностями загрузки livecd gentoo описанными выше. В некоторых других дистрибутивах (к примеру убунту) есть возможность указать опцию ядру, которая скажет initrd монтировать определенный iso-образ, а не искать его по всем возможным устройствам.
Решение, кстати, уже существует и даже принято в upstream http://bugs.gentoo.org/show_bug.cgi?id=294268
Для интереса я решил применить его не к скриптам genkernel, а к скриптам внутри initrd.
# cd /root
# mkdir initrd
# cd initrd
# zcat /mnt/cdrom/boot/initrd | cpio -id

Далее патчим linuxrc и etc/initrd.scripts (патч по ссылке на баг-трекере) и собираем обратно:
# find . | cpio -H newc -o | gzip > /mnt/flash/boot/inird.new

Теперь появилась возможность сделать следующий конфиг grub'а:
menuentry "Calculate linux desktop 11.0 beta 2" {
    loopback loop /boot/cld-20101230.iso
    linux (loop)/boot/vmlinuz isoboot=/boot/cld-20101230.iso 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 /boot/initrd.new
}

Проверено, работает.

В багтрекере генту указано, что патч принят в апстрим, ждем в скором времени его в CL.


Комментарии

Comment

Добавил(а) Ilya Ashchepkov больше 1 года назад

ob server wrote:

можно один вопрос? не пойму, как используется патч в этой команде
<b># find . | cpio -H newc | gzip > /mnt/flash/boot/inird.new</b>

никак, это как собирать initrd обратно после накладывания патча

у меня выдает ошибку
cpio: You must specify one of -oipt options.
Try `cpio --help' or `cpio --usage' for more information.

упс, ошибочка вкралась, спасибо, правильная команда

find . | cpio -H newc -o | gzip > /mnt/flash/boot/inird.new

поправил в тексте

Comment

Добавил(а) ob server больше 1 года назад

доброе время суток! спасибо за статью, но попробовал пропатчить свой инитрд, получаю ошибку

artems@artems-desktop:~/initrd$ patch -p2 --dry-run <~/grub2-genkernel.patch
patching file initrd.scripts
Hunk #1 FAILED at 72.
Hunk #2 FAILED at 104.
Hunk #3 FAILED at 115.
3 out of 3 hunks FAILED -- saving rejects to file initrd.scripts.rej
patching file linuxrc
Hunk #1 succeeded at 84 (offset 4 lines).

artems@artems-desktop:~/initrd$ patch -p1 --dry-run <~/grub2-genkernel.patch
patching file defaults/initrd.scripts
Hunk #1 FAILED at 72.
Hunk #2 FAILED at 104.
Hunk #3 FAILED at 115.
3 out of 3 hunks FAILED -- saving rejects to file defaults/initrd.scripts.rej
patching file defaults/linuxrc
Hunk #1 FAILED at 80.
1 out of 1 hunk FAILED -- saving rejects to file defaults/linuxrc.rej

не подскажете в чем дело?
initrd с лив-двд gentoo 11.0

Comment

Добавил(а) Ilya Ashchepkov больше 1 года назад

даже не знаю, я мало работал с патчами.

я думаю что можно и руками прописать, там различай на 10 строк.

Спасибо!