Установка и первичная настройка Debian armhf

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску
this article is under construction...But it's almost ready :)

Просьба: про обнаруженные неточности пишите в комментариях.

Описание

Эта статья повествует об установке Debian armhf на нашу Тошибу с нуля, без использования предварительно запакованных rootfs и bootimg.

После выполнения получим:

  • Debian armhf
  • ядро bmw
  • среду xfce4

(TODO: узнать насчет обновления пакетов в chroot-среде TODO: настройка звука TODO: перенос на SSD Важно: TODO: дополнить, как нужно изменить cmdline при разных вариантах разбиения встроенной флеш-памяти. TODO: про аппаратное декодирование видео)

По мотивам официального руководства

Часть 1. Подготовка rootfs

Имейте ввиду, что всё, описанное в данной статье, выполняется на свой страх и риск. Многие операции могут занять продолжительное время.

Хочется отметить, что для расположения директории armhf_root нужно выбирать диск с файловой системой Linux, ибо необходимо сохранять атрибуты каждого файла (автор напоролся на такую проблему, как отказ видеть init при загрузке с карты в первый раз; проблема была вызвана сборкой rootfs на NTFS-разделе).

Нам потребуется: SD-карта объемом от 2 Гб и кардридер, компьютер с Debian\Ubuntu, кабель USB-mini USB, nvflash (в Ubuntu есть в репозиториях), ядро c.bmw отсюда, желательно наличие Wi-Fi (в этой статье описан вариант с использованием WiFi; теоретически, можно устанавливать требуемые пакеты без него в chroot'e либо перенося каждый пакет с помощью SD-карты).

Пункт номер ноль ВСЕГДА: бэкап.

1. Подготовим хост-компьютер (так мы будем называть Большой Компьютер) и rootfs.

Цель данного этапа - создать на хосте папку-rootfs (т.е. папку, в которой будет лежать вся ОС для Тошибы, кроме ядра).

1) Установим некоторые пакеты на хост:

root@pc# apt-get install debootstrap qemu-user-static debian-ports-archive-keyring
root@pc# mkdir armhf_root
root@pc# debootstrap --foreign --arch=armhf sid armhf_root http://ftp.debian.org/debian

Поскольку процессор хоста - x86, то он не может запускать бинарники, скомпилированные для других архитектур (в том числе и ARM). Поэтому мы должны использовать так называемый "foreign mode" для debootstrap (это - софт, который занимается "подтягиванием самого себя за шнурки ботинок", т.е. распаковывает и подготавливает первичную rootfs). Из мана к debootstrap: "foreign-режим всего лишь распаковывает файлы для следующей фазы. Копия deboostrap, необходимая для завершения процесса, будет установлена в целевую файловую систему как /debootstrap/debootstrap"

2) Запустим скрипты конфигурации:

root@pc# cp /usr/bin/qemu-arm-static armhf_root/usr/bin
root@pc# chroot armhf_root /debootstrap/debootstrap --second-stage

Если на каком-то из этапов мы видим ошибку, просто повторяем исполнение последней команды. Если ошибка не исчезает, игнорируем её и едем дальше.

3) Заполним /etc/apt/sources.list (список источников ПО) в rootfs, обновим список ПО и установим пакеты для зашивания ядра и загрузочных образов (даже несмотря на то, что ядро мы устанавливаем в обход APT):

root@pc# nano armhf_root/etc/apt/sources.list
#Вставляем туда:

deb http://ftp.debian-ports.org/debian unstable main
#deb http://ftp.debian-ports.org/debian unreleased main
#deb http://ftp.debian-ports.org/debian experimental main

#deb http://people.debian.org/~jak/ac100/ unreleased main non-free
#deb-src http://people.debian.org/~jak/ac100/ unreleased main non-free
#Сохраняем (Ctrl+O), выходим (Ctrl+X)

root@pc# chroot armhf_root apt-get update
[...]
root@pc# chroot armhf_root apt-get install abootimg flash-kernel
[...]

Игнорируем возникающие ошибки с публичными ключами, с ними разберемся позже. 4) Установим пакеты, необходимые для Wi-Fi:

root@pc# chroot armhf_root apt-get install wireless-tools wpasupplicant firmware-ralink
[...]

5) Создадим файл bootimg.cfg, который позволит в дальнейшем создавать корректные загрузочные образы:

root@pc# echo "bootsize = 0x800000
pagesize = 0x800
kerneladdr = 0x10008000
ramdiskaddr = 0x11000000
secondaddr = 0x10f00000
tagsaddr = 0x10000100
name = jak-ac100
cmdline = root=/dev/mmcblk1p1 mem=512M@0M vmalloc=320M console=tty0 rootdelay=10 tegrapart=recovery:700:a00:800,mbr:2100:200:800" > armhf_root/boot/bootimg.cfg

Обратим внимание на то, что в <range type="comment" id="489788">cmdline</range id="489788"> передается параметр root=/dev/mmcblk1p1, т.е. SD-карта. Параметр tegraboot также указывает на использование SD-карты. А параметр tegrapart зависит от разбиения разделов на Вашей тошибе, однако на большинстве моделей он будет именно таким. 6) Редактируем /etc/initramfs-tools/initramfs.conf, дабы сделать генерируемый образ initrd как можно меньше (меняем MODULES=most на MODULES=dep):

root@pc# nano armhf_root/etc/initramfs-tools/initramfs.conf
...
MODULES=dep
...

7) Заполним /etc/fstab (при необходимости, поменяйте):

root@pc# cat >> armhf_root/etc/fstab
/dev/mmcblk1p1 / ext4 rw,noatime,commit=30,barrier=1,data=ordered 0 0

8) Заполним /etc/network/interfaces:

root@pc# cat >> armhf_root/etc/network/interfaces
auto lo
iface lo inet loopback

9) Добавим модули ядра:

root@pc# tar xzf /path/to/modules.2.6.38.3-c.bmw+.38.tar.gz -C armhf_root/

10) Зададим пароль рута:

root@pc# chroot armhf_root passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

11) В общем-то, теперь папку armhf_root можно упаковать в архив и выложить куда-нибудь в интернеты - это наш базовый rootfs. Однако, поехали дальше.

2. Подготовим SD-карту.

1) Для начала, создадим на ней таблицу разделов GPT (/dev/sdb - ваша SD-карта):

root@pc# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.6.14
[...]

Command (? for help):

Жмем o, соглашаемся с тем, что все разделы на карте будут удалены и создастся новая MBR - жмем Y, затем Enter.

Command (? for help): o

This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help):

Теперь создадим новую партицию: жмем n, затем соглашаемся со всеми параметрами по-умолчанию. Заключительный штрих: жмем w, чтобы записать все изменения на карту.

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): y

OK; writing new GUID partition table (GPT).
The operation has completed successfully.

root@pc#

Важно: теперь нужно извлечь карту из компьютера и вставить её снова, иначе хост не поймет, что там изменилась таблица разделов. 2) Отформатируем карту в ext4.

root@pc# mkfs -t ext4 -v -b 4096 -E stride=32,stripe-width=32,resize=32G /dev/sdb1

Теперь всё готово для копирования нашей rootfs на карту. 3) Копируем rootfs (/media/sdcard - это точка монтирования карты памяти в системе) и извлекаем носитель:

root@pc# cp -ax armhf_root/* /media/sdcard/
root@pc# umount /media/sdcard

Будьте внимательны, не извлекайте карту до появления приглашения командной строки после команды umount, иначе файлы запишутся не полностью. Карта готова, на ней есть один-единственный раздел и rootfs.

3. Прошьем ядро в 6 раздел Тошибы

root@pc# nvflash --bl /usr/lib/fastboot.bin --download 6 /path/to/zImage.2.6.38.3-c.bmw+.sd.img -w

Вставляем кабель в Тошибу, жмем Ctrl+Esc+Pwr, ждём окончания процесса.

Теперь вставляем карточку в Тошибу, перезагружаем Тошибу, ждем(если нет ошибок, конечно), и видим приглашение к логину. Пишем: root. Вводим пароль. Лицезреем приглашение консоли.

Часть 2. Первичная настройка

Замечу, что с высокой долей вероятности имя компьютера (root@paz00:~#) будет таким же, как и имя хост-машины. Это настроим позже. 1) Перво-наперво, нам нужна сеть. (взято отсюда)

root@paz00:~# modprobe rt2800usb
root@paz00:~# wpa_passphrase ИмяСети Пароль > /etc/wpa_supplicant.conf
root@paz00:~# wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant.conf & dhclient wlan0
root@paz00:~# iwconfig wlan0 power off #Не актуально, но в редких случаях при потере пакетов помогает; иногда просто уменьшает задержки

2) После того, как сеть поднимется, можно использовать ssh, чтобы несколько повысить удобство вбивания\копирования команд из инструкции (w.x.y.z - айпи-адрес Тошибы):

root@pas00:~# aptitude install openssh-server
[...]


user@pc:~$ ssh [email protected]
[email protected]'s password:

Linux paz00 2.6.38.3-c.bmw+ #7 SMP PREEMPT Sun Oct 9 21:56:47 MSK 2011 armv7l
The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Mon Nov 28 06:52:37 2011 from N.N.N.N

root@paz00:~#

3) Обновим список пакетов и добавим публичные ключи репозиториев:

root@paz00:~# aptitude update
[...]
W: GPG error: http://ftp.debian-ports.org unstable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY <ключ>
root@paz00:~# gpg --keyserver subkeys.pgp.net --recv <ключ>
root@paz00:~# gpg --export --armor <ключ> | apt-key add -

4) Обновим систему, мало ли:

root@paz00:~# aptitude upgrade

5) Установим пакет локалей, и настроим локали и временную зону:

root@paz00:~# aptitude install locales
root@paz00:~# dpkg-reconfigure locales && dpkg-reconfigure tzdata

Выбираем требуемые локали (я выбрал en_US.UTF8 UTF8 и ru_RU.UTF8 UTF8), локаль по умолчанию (ru_RU) и временную зону(Европа, Москва). Устанавливаем русские шрифты для консоли:

root@paz00:~# aptitude install console-cyrillic

6) Установим некоторые необходимые для последующих шагов пакеты:

root@paz00:~# aptitude install bzip2 sudo

7) Установим графическую оболочку:

Ставим xserver-xorg, xfce4, менеджер дисплеев slim и менеджер окон openbox:

root@paz00:~# aptitude install xserver-xorg xfce4 xfce4-goodies slim openbox

Теперь необходимо установить драйвера из пакета L4T.

8) Создаем нового пользователя, даем привилегии на выполнение некоторых административных задач без ввода пароля:

root@paz00:~# adduser user
root@paz00:~# usermod user -aG sys,dip,sudo
root@paz00:~# nano /etc/sudoers
# User privilege specification
root ALL=(ALL) ALL
user ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%sudo ALL=(ALL) NOPASSWD: /sbin/ifconfig
%sudo ALL=(ALL) NOPASSWD: /sbin/iwconfig
%sudo ALL=(ALL) NOPASSWD: /sbin/wpa_supplicant
%sudo ALL=(ALL) NOPASSWD: /sbin/dhclient
%sudo ALL=(ALL) NOPASSWD: /usr/bin/tee
%sudo ALL=(ALL) NOPASSWD: /usr/bin/killall

9) Возможны проблемы с тачпадом, если таковые имеются - пишите в обсуждения. Однако, первое, что надо сделать, если тачпад не работает - нажать на кнопку его включения. 10) Меняем имя компьютера:

root@paz00:~# nano /etc/hostname

11) Устанавливаем менеджер беспроводной сети. Мне нравится wicd.

root@paz00:~# aptitude install wicd

12) ??? (дополняем, что необходимо описать в качестве базы)

Итак, теперь имеем работающую систему на карте памяти. Некоторые могут останавливаться на этом шаге. Мы же едем дальше.

Часть 3. Перенос работающей системы с SD-карты на внутренний флеш

Итак, для начала вполне резонным будет желание объединить разделы на внутренней флешке, дабы получить как можно больше свободного места после переноса системы.

(TODO: краткая инструкция по переразбивке, ссылка на полную версию)

Затем - загружаемся с SD-карты, форматируем новосозданную партицию (возможно, потребуется редактировать cmdline ядра для SD-карты), монтируем её, копируем на неё rootfs, меняем /etc/fstab, прошиваем ядро, перезагружаемся, PROFIT. (TODO: подробная инструкция)