суббота, 14 сентября 2013 г.

BeagleBone Black - Install Gentoo part 3: install & preconfigure base system (Gentoo Linux Stage3,4)

Это четвёртая статья из цикла Gentoo Linux на BealgeBone Black. Посвящена статья целиком установке (если это можно так назвать) и предварительной настройке Gentoo Linux, используя готовый Stage3 архив - набор базовых утилит и программ для развёртывания системы. По сути Stage3 это и есть Gentoo Linux, с одним ограничением - отсутствие системы portage и необходимости предварительной настройки для нормального запуска в конкретном случае.

Stage3


Немного теории
В начале любой установки необходимо чётко понимать, как, что и зачем делать. Ответом на эти вопросы в процессе установки Gentoo Linux может служить официальная по установке Gentoo Linux на МП ARM, а точнее её главы про получение и установку базовой системы. Поэтому в этом разделе, я лишь примерно опишу, самые базовые шаги по настройке системы.
Процесс инсталляции разбит на несколько этапов, а т.к. полный процесс получения Stage4 (так называется полностью установленная версия Gentoo Linux) это процесс достаточно объёмный,  я решил вынести этапы настройки после установки в отдельную статью.

Общие сведения и получения Stage3
Первое, что нам нужно, это выбрать собственно Stage3. Вот его краткая характеристика:

  1. Архитектура соответственно как подсказывает нам КО - ARM: другая просто не заработает на нашем МП.
  2. Субархитектура или модель команд - ARMv7A-hardfp: т.к. процессорное ядро нашего МП это ARM Cortex A-8, для большей эффективности желательно использовать все возможности этой архитектуры, модель команд которую я указал наиболее соответствует нашим потребностям. (далее возможны дополнения)
  3. CHOST или префикс системы и компилятора - armv7a-hardfloat-linux-gnueabi: выбрано в соответствии с вышеуказанными условиями.
  4. Profile, у автора выбран 10, однако советую выбирать самый последний из стабильных, т.к. в отличие от ядра, которое завязано на исправления (патчи), остальная система более гибка к выбору параметров.
Выбрав любимое (наиболее близкое к вам) зеркало можно приступать к получению Stage3. Для меня таким оказалось зеркало от Яндекса. Текущая директория в которой есть архив удовлетворяющий нашим условиям: http://mirror.yandex.ru/gentoo-distfiles/releases/arm/autobuilds/current-stage3-armv7a_hardfp/.

Загружаем Stage3:

# wget http://mirror.yandex.ru/gentoo-distfiles/releases/arm/autobuilds/current-stage3-armv7a_hardfp/stage3-armv7a_hardfp-20130821.tar.bz2

Не забываем куда мы скачали выбранный файл (для меня это директория /root/BBB/). От положения файла зависят дальнейшие действия.

Распаковка Stage3, получение и распаковка Portage
Примонтируем нашу фс, для распаковки Stage3 архива:

# mount /dev/sdb2 p2

Теперь можно распаковать архив:

# tar xjpf stage3-armv7a_hardfp-20130821.tar.bz2 -C p2

Также для полноценной работы системы нам необходим ещё и архив системы пакетов - Portage, который мы после скачивания тоже распакуем в нужную директорию (/usr/portage):

# wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2
# tar xjpf portage-latest.tar.bz2 -C p2/usr

Stage4

Общее положение
Теперь когда у нас есть фактически полноценный Stage3, самое время сделать из него Stage4. Для этого, нам необходимо будет внести некоторые настройки, которые впоследствии помогут нам правильно запустить Gentoo Linux.

Настройка ФС (/etc/fstab)
Для того чтобы ядро смогло правильно работать ему необходимы системные файлы, в частности Init, который в свою очередь запускает различные сервисы. Настроим точки монтирования файловой системы с помощью /etc/fstab:

# vim p2/etc/fstab
#/dev/BOOT              /boot           ext2            noauto,noatime  1 2
/dev/mmcblk0p2          /               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

Вы можете настраивать в полном соответствии с приведённой конфигурацией.

Настройка root пароля для входа в систему
Т.к на вашем ПК вы не можете исполнять код предназначенный для ARM, есть несколько способов задать пароль для учетной записи root  без запуска утилиты passwd:
С помощью утилиты openssl, для примера здесь взят пароль "gentoo":

# openssl passwd -1
Password: 
Verifying - Password: 
$1$YJoKM1kQ$5Hrn/6GbzSYcs2pQ440b6/

Также можно взять уже готовый сгенерированный хэш, в котором тоже зашит пароль "gentoo":

$6$I9Q9AyTL$Z76H7wD8mT9JAyrp/vaYyFwyA5wRVN0tze8pvM.MqScC7BBm2PU7pLL0h5nSxueqUpYAlZTox4Ag2Dp5vchjJ0

Затем необходимо заменить в файле /etc/shadow "*" у пользователя root на один из вышеперечисленных хешей.

# vim p2/etc/shadow
root:$1$YJoKM1kQ$5Hrn/6GbzSYcs2pQ440b6/:10770:0:::::
halt:*:9797:0:::::
operator:*:9797:0:::::
shutdown:*:9797:0:::::
sync:*:9797:0:::::
bin:*:9797:0:::::
daemon:*:9797:0:::::
adm:*:9797:0:::::
lp:*:9797:0:::::
news:*:9797:0:::::
uucp:*:9797:0:::::
nobody:*:9797:0:::::
man:!:15939::::::
sshd:!:15939::::::

Настройка имени хоста и сети
Данная настройка рассмотрена подробно в соответствующем разделе мануала по установке Gentoo Linux на архитектуру ARM. Настройку сети, используя USB - Device (Gadget) я рассмотрю в одной из следующих статей.

Настройка часов реального времени
Одной из проблем присущих плате BeagleBone Black, является отсутствие бесперебойного питания часов реального времени. Поэтому, после старта они всегда имеют значение: 1 января 2000 года 00:00:00. Чтобы это изменить, мы воспользуемся демоном swclock, который запустим вместо hwclock:

# ln -sf /etc/init.d/swclock p2/etc/runlevels/boot
# rm p2/etc/runlevels/boot/hwclock

Также не забудем обновить время доступка файла /sbin/rc, по которому собственно и вычисляется при старте предыдущее время:

# touch p2/sbin/rc

Это одно из начальных решений касательно обновления статуса времени, в следующей статье я расскажу как сделать так, чтобы время автоматически настраивалось при запуске платы.

Включение доступа по SSH (опционально)
Для того чтобы при запущенной сети иметь доступ к плате по SSH соединению, необходимо его активировать, запустим SSH демон:

# ln -sf /etc/init.d/sshd p2/etc/runlevels/default

Включение доступа по последовательному порту UART0 (опционально)
Если же у вас нет сетевого подключения, этот способ является единственным который возможен для управления платой, при отсутствии иных способов доступа к плате (например подключив клавиатуру и дисплей), по умолчанию он выключен, поэтому включим его, и заодно настроим скорость и порт соединения:

# vim p2/etc/inittab
# SERIAL CONSOLES
s0:12345:respawn:/sbin/agetty -L 115200 ttyO0 vt100

Копирование необходимых файлов
Т.к. ядро уже скопировано на носитель, то необходимо скопировать ещё и модули, для этого перейдём в каталог собранного ядра и выполним команду установки модулей, указав при этом ещё и путь установки:

# cd kernel/kernel/
# make -j9 ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- INSTALL_MOD_PATH=../../p2/ modules_install

Теперь можно перейти в каталог сборки и отмонтировать носитель:

# cd ../..
# umount p2

Запуск системы
После того как вы вставили носитель в BeagleBone Black, запуск можно осуществлять двумя способами:
  1. Нажимая кнопку boot - тогда собранный нами загрузчик запустит ядро с карты памяти
  2. Не нажимая кнопку boot - тогда загрузчик, который находится на eMMC сделает тоже самое.
При этом вы можете, либо наблюдать ход загрузки системы подключившись к плате по последовательному порту , либо подождать примерно 15 - 20 секунд и присоединится по SSH к плате (если вы активизировали его перед этим):
На снимке видно как работает система, я пока ещё не настроил сетевое окружение на этом дистрибутиве (как я и обещал, я покажу это в одной из последующих статей).
Видео запуска системы:


Послесловие
У нас есть рабочая Stage4 система, осталось внести несколько штрихов для удобства работы с ней и можно пользоваться.
В следующей статье, мы рассмотрим дополнительную послестартовую настройку системы.