Установка Gentoo на загрузочную USB-флэшку
На самом деле, загрузить Gentoo с USB-флешки довольно просто. Основная сложность состоит в том, чтобы настроить исходный диск и включить драйверы для всех машин, на которых она собирается загружаться. В этой статье описывается как установить Gentoo на флешку, способную загрузиться на любом компьютере, что будет похоже на обычную настольную установку, где система ещё долго не будет изменяться.
This article covers installation of a complete, functional, Gentoo system onto a USB drive. See the LiveUSB article for instructions on creating a simple bootable drive, that can for example be used for Gentoo installation.
Приготовления
Руководство предполагает, что текущей платформой является Gentoo Linux. Большинство шагов, однако же, могут быть выполнены для любого дистрибутива, просто переведите присущие приёмы работы с Gentoo (например, установка программного обеспечения) на приёмы другого дистрибутива.
Начнём с установки пары необходимых пакетов. Наиболее важные - ядро и sys-kernel/genkernel:
root #
emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel
Сборка ядра
Сделайте необходимые изменения в ядре и соберите его. Смотрите статьи настройку ядра Linux и конфиурацию ядра, чтобы узнать больше подробностей об этом шаге. Важно помнить, что здесь лучше всего подходит обобщённое ядро, потому что чем оно более общее, тем больше машин будет загружаться с ним.
В ходе настройки, возможно скомпилировать модули и включить их в initramfs. Они будут загружаться при загрузке.
root #
mkdir /tmp/boot
root #
genkernel --firmware --busybox --disklabel --bootdir=/tmp/boot --no-symlink --all-ramdisk-modules --install all
Команда выше займёт некоторое время на установку стандартного ядра, создание диска и копирования файлов в /tmp/boot.
root #
ls /tmp/boot/
initramfs-genkernel-x86_64-3.5.2-gentoo kernel-genkernel-x86_64-3.5.2-gentoo System.map-genkernel-x86_64-3.5.2-gentoo
Приготовление USB-флэшки
Создайте 2 раздела на диске (при условии установки в /boot и / (root) разделы). Мы предполагаем, что USB-флешка находится на /dev/sdb (запустите dmesg сразу после подключения USB-флешки, чтобы увидеть, какое устройство задействуется).
root #
fdisk /dev/sdb
Command (m for help): d Selected partition 1 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4001759, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4001759, default 4001759): +100M Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (1-4, default 2): Using default value 2 First sector (206848-4001759, default 206848): Using default value 206848 Last sector, +sectors or +size{K,M,G} (206848-4001759, default 4001759): Using default value 4001759 Command (m for help): a Partition number (1-4): 1 Command (m for help): p Disk /dev/sdb: 2048 MB, 2048901120 bytes 255 heads, 63 sectors/track, 249 cylinders, total 4001760 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x001663df Device Boot Start End Blocks Id System /dev/sdb1 * 2048 206847 102400 83 Linux /dev/sdb2 206848 4001759 1897456 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Убедитесь, что первый раздел - загрузочный (загрузочный флаг включается командой).
Теперь отформатируем новые разделы. В данном примере мы используем файловую систему ext2, но возможно использование другой файловой системы для / раздела, если она поддерживается ядром. Обратите внимание на то, что во время операции форматирования разделам присваиваются метки. Это очень важно, потому что это определит, как корневая файловая система обнаружится позже, во время загрузки с USB-флешки на системах, где распределение букв диска совершенно иное. Это связано с опцией --disklabel
из genkernel команды ранее.
root #
mkfs.ext2 -L GENTOO_USB_BOOT /dev/sdb1
root #
mkfs.ext2 -L GENTOO_USB_ROOT /dev/sdb2
Установка Gentoo stage 3
С готовыми ядром, диском и файловыми системами, нам осталось выполнить минимальную установку. В том числе свежие stage3 и снимок дерева Portage.
Для примера используется stage3-amd64-20120621.tar.bz2 и portage-latest.tar.xz. Далее немного из руководства по установке Gentoo.
root #
mount /dev/sdb2 /mnt/gentoo
root #
cd /mnt/gentoo
root #
tar -xpf ~/Download/stage3-amd64-20120621.tar.bz2
root #
cd usr
root #
tar -xpf ~/Download/portage-latest.tar.xz
root #
mount /dev/sdb1 /mnt/gentoo/boot
root #
cp /tmp/boot/* /mnt/gentoo/boot
В нижеследующих разделах охватываются частности Gentoo Linux, специфичные для установки на USB-флешку. Советуем использовать Gentoo handbook, при чтении этой статьи.
Загрузчик
Для того, чтобы загрузить новую систему, установите загрузчик на USB-флешку.
GRUB
This method only applies to UEFI booting!
Emerge GRUB (from within the chroot):
(chroot) #
emerge sys-boot/grub
Install GRUB to the corresponding place with your platform information. Suppose you are running a x86_64 machine with an EFI partition mounted to /boot/efi, the following command will install GRUB onto the USB stick:
(chroot) #
grub-install --efi-directory=/boot/efi --target=x86_64-efi --removable
Note that the
--removable
option is very important. It indicates that the target location is removable device. Don't forget it otherwise you may mess up your own system!If nothing bad happens, run grub-mkconfig to generate the GRUB configuration:
(chroot) #
grub-mkconfig -o /boot/grub/grub.cfg
Change the target directory accordingly if you use a different GRUB config directory.
lilo
Установите lilo (из под chroot):
(chroot) #
emerge sys-boot/lilo
Исправьте etc/lilo.conf таким образом, чтобы он содержал правильную информацию.
Эти настройки очень важны и будут рассматриваться построчно.
boot=/dev/sdb # The location of the USB Stick (currently)
lba32 # use lba32 addressing (ignore)
compact # boot quickly by loading lots of blocks
# remove when there are problems with booting
prompt # Prompt for user input
timeout=20 # Time to wait before default selection
default="Gentoo-352" # Default selection after timeout
image=/boot/kernel-genkernel-x86_64-3.5.2-gentoo
label="Gentoo-352"
read-only
root=/dev/ram0
append="real_root=LABEL=GENTOO_USB_ROOT scandelay=5"
initrd=/boot/initramfs-genkernel-x86_64-3.5.2-gentoo
Строки после image - просты, но дополнительная строка содержит некоторые интересные опции.
real_root=LABEL=GENTOO_USB_ROOT
будет использовать метку диска вместо /dev/sdb2, что имеет важное значение, так как эти номера изменяются в зависимости от количества жестких дисков на компьютере или от числа USB.- Также важным для загрузки с USB является опция
scandelay
, так как USB-устройствам нужно некоторое время для обнаружения ядром. Если в системе есть множество модулей, то загрузка занимает много времени, и это не так критично, но если модулей мало, то это важно, так как система может быть загружена до того, как ядро обнаружит устройство USB. Кроме того, на новых машинах с контроллерами USB3 необходимо добавитьxhci_hcd
драйвер (встроенный в ядро или в виде модуля).
Теперь установим LILO (с настройками) на USB-флешку:
(chroot) #
lilo
Warning: /dev/sdb is not on the first disk Warning: The initial RAM disk is too big to fit between the kernel and the 15M-16M memory hole. It will be loaded in the highest memory as though the configuration file specified "large-memory" and it will be assumed that the BIOS supports memory moves above 16M. Added Gentoo-352 ? * 2 warnings were issued.
Первое предупреждение, как и ожидалось, из-за того, что мы устанавливаем загрузчик не на жесткий диск. Второе предупреждение говорит о возможных проблемах на старых машинах, если же это важно, то попробуйте сократить ядро посредством удаления модулей.
syslinux
На данный момент syslinux работает только с файловыми системами ext{2,3,4}, btrfs, ntfs и fat.
(chroot) #
emerge syslinux
Запишите загрузочный сектор на USB-флешку.
(chroot) #
dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdb
Теперь настроим загрузчик.
(chroot) #
mkdir /boot/syslinux
(chroot) #
nano -w /boot/syslinux/syslinux.cfg
PROMPT 1
TIMEOUT 50
DEFAULT gentoo
LABEL gentoo
LINUX ../kernel-genkernel-x86_64-3.5.2-gentoo
APPEND root=LABEL=GENTOO_USB_ROOT scandelay=3 ro
INITRD ../initramfs-genkernel-x86_64-3.5.2-gentoo
ro
, что находится в приведенной выше строке APPEND
, будет устанавливать корневой раздел только для чтения (что обычно предпочтительнее для USB-флешки). Замена ro
на rw
позволяет системе изменяться после загрузки (вместо того, чтобы пользователь монтировал файловую систему на чтение и запись позже).Далее установим syslinux на USB-флешку. Однако опция --device /dev/sdb1
не обязательна.
(chroot) #
extlinux --device /dev/sdb1 --install /boot/syslinux
fstab
LABEL=GENTOO_USB_BOOT /boot ext2 noauto,noatime 1 2
LABEL=GENTOO_USB_ROOT / ext2 noatime 0 1
/dev/SWAP none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
/dev/fd0 /mnt/floppy auto noauto 0 0
Советы и хитрости
Несмотря на то, что уже можно использовать только что сделанную систему в качестве стандартной Gentoo, было бы целесообразнее собрать бинарные пакеты непосредственно на хосте, а затем установить их на USB-флешку. Или, если система имеет достаточно памяти, просто примонтировать /var/tmp к TMPFS - компиляция, так или иначе, будет идти намного быстрей!
See also
- Installation — an overview of the principles and practices of installing Gentoo on a running system.
- LiveUSB — explains how to create a Gentoo LiveUSB or, in other words, how to emulate a x86 or amd64 Gentoo LiveCD using a USB drive.