Установка Gentoo на загрузочную USB-флэшку

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Install Gentoo on a bootable USB stick and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎русский • ‎中文(中国大陆)‎

На самом деле, загрузить Gentoo с USB-флешки довольно просто. Основная сложность состоит в том, чтобы настроить исходный диск и включить драйверы для всех машин, на которых она собирается загружаться. В этой статье описывается как установить Gentoo на флешку, способную загрузиться на любом компьютере, что будет похоже на обычную настольную установку, где система ещё долго не будет изменяться.

Приготовления

Заметка
Руководство предполагает, что текущей платформой является Gentoo Linux. Большинство шагов, однако же, могут быть выполнены для любого дистрибутива, просто переведите присущие приёмы работы с Gentoo (например, установка программного обеспечения) на приёмы другого дистрибутива.

Начнём с установки пары необходимых пакетов. Наиболее важные - ядро и sys-kernel/genkernel:

root #emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel

Чтобы добавить специфичные для пакета USE-флаги, создайте новый файл в /etc/portage/package.use/:

Файл /etc/portage/package.use/sys-apps
sys-apps/busybox static

Далее установите sys-apps/busybox:

root #emerge --ask sys-apps/busybox

Сборка ядра

Сделайте необходимые изменения в ядре и соберите его. Смотрите статьи настройку ядра 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-флешку.

Раздел ниже приводит пример настроек lilo для и syslinux.

lilo

Установите lilo (из под chroot):

(chroot) #emerge sys-boot/lilo

Исправьте etc/lilo.conf таким образом, чтобы он содержал правильную информацию.

Предупреждение
Эти настройки очень важны и будут рассматриваться построчно.
Файл /etc/lilo.confConfigure 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
Файл /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

Файл /etc/fstabНастройка файла 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 - компиляция, так или иначе, будет идти намного быстрей!