Установка и первичная настройка Debian armhf
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: подробная инструкция)