Установка debian под arm, ppc и пр. архитектуры.

Со всеми этими опенвртэами, билдрутами, ёктопрожектами полностью поменялось мировозрение. Кажется, чтобы что-то запустить на каком-нибудь устройстве, нужно потратить уйму времени на сборку, конфигурацию. А как правило, ничего не собирается с первого раза, ну или собирается, но не пашет толком и
приходится гуглить, почему так происходит и пр. А еще эти кроскомпиляции под разные архитектуры. Столько нюансов и прочих грабель, на которые обязательно 10 раз наступишь, прежде чем придешь к рабочему варианту программы.

С одной стороны, конечно, это и хорошо, и даже может и интересно, но с другой стороны, жизнь-то идет и появляются всякие ёкты, опенврт, где вся сборка сводится к выполнению магической команды - make. И мозг от такого бездействия потихоньку начинает атрофироваться.

Что уж говорить про установку debian на встраиваемую систему, тут даже и выполнение команды make не требуется. Всё настолько просто и быстро, что кажется даже ман не нужен. Но поскольку всё это завтра уже забудется, то лучше сохранить эту магическую последовательность действий.

Установка дебиан под arm архитектуру.

1. Заходим по ссылке http://ftp.debian.org/debian/dists/ и смотрим на последнюю версию дистрибутива debian и как он называется. Так, например, из файла readme можно увидеть, что wheezy это Debian 7.5.

2. Устанавливаем debootstrap. Что это, читаем на вики дебиан.

3. Получаем начальную фс дебиан. Названия архитектур, которые дебиан поддерживает, можно увидеть, например, здесь http://ftp.debian.org/debian/dists/Debian7.5/

sudo debootstrap --verbose --arch armel --variant=minbase --foreign wheezy ./armDeb7 http://ftp.debian.org/debian

4. Далее понадобятся вот такие пакеты: binfmt-support qemu-arm-static, поэтому доустанавливаем их в юбунту. Копируем в дебиан фс:

sudo cp /usr/bin/qemu-arm-static ./usr/bin/

Выполняем монтирование:

mount devpts ./debian7/dev/pts -t devpts
mount -t proc proc ./debian7/proc  

и меняем корневой каталог через chroot

sudo chroot ./armDeb7 

Если увидели надпись "I have no name!@hostname:/#", то значит всё ок. И можно приступать ко второму этапу.

5. Выполняем в файловой системе debian7 (т.е. после того, как выполнили chroot)

/debootstrap/debootstrap --second-stage

Конец выполнения этой операции должен выглядеть примерно так:
I: Base system installed successfully.

6. По идее всё, корневая файловая система готова. Можно брать её и запускать на устройстве. Но прежде, чем это делать, нужно доустановить необходимые работы для полноценной работы системы. Для выходя из chroot набираем exit.

Далее редактируем файл armDeb7/etc/apt/sources.list следующим образом:

deb http://http.debian.net/debian wheezy main
deb-src http://http.debian.net/debian wheezy main

deb http://http.debian.net/debian wheezy-updates main
deb-src http://http.debian.net/debian wheezy-updates main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

и снова меняем кфс:

sudo chroot ./armDeb7 

Выполняем уже стандартные линуксовые утилиты для установки пакетов - обновляемся:

# apt-get update

( результатом выполнения этой операции может быть следующее сообщение:
Reading package lists... Error!
E: Can't mmap an empty file
W: You may want to run apt-get update to correct these problems
E: Empty package cache

одной из причин этого - возможное отсутствтие утилиты bzip2 в директории:
/usr/lib/apt/methods
)

Устанавливаем пакеты:

# export LANG=C
# apt-get install apt-utils dialog locales module-init-tools udev netbase iproute iputils-ping openssh-server

Выходим из chroot - exit

Чтобы работала консоль, нужно добавить строчку в конец файла ./debian7/etc/inittab

T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100

либо раскомментим

# SERIAL CONSOLES
s0:2345:respawn:/sbin/agetty 115200 ttyS0 linux
s1:2345:respawn:/sbin/agetty 115200 ttyS1 linux

Заменим файл /etc/shadow, допустим, из дистрибутива openwrt. Либо для отключения пароля у пользователя root заменим строку в shadow следующим образом:

#root:*:10770:0:::::
root::10770:0:::::

Фс от debian готова, копируем её на устройство и загружаемся.

Настройка сети в debian:

файл etc/network/interfaces
auto eth0
    iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.10

Проверить, установлен ли пакет в debian:

# aptitude show gconf2

Поскольку такие утилиты как aptitude или apt-get - это просто оболочки над утилитой dpkg, то аналогичную операцию по проверке, установлен ли пакет, можно сделать так:

# dpkg -s gconf2

При установке gnome случилась вот проблема, связанная с пакетом gconf2:

Setting up gconf2 (2.28.1-6) ...
Illegal instruction
dpkg: error processing gconf2 (--configure):
 subprocess installed post-installation script returned error exit status 132
dpkg: dependency problems prevent configuration of notification-daemon:
 notification-daemon depends on gconf2 (>= 2.28.1-2); however:
  Package gconf2 is not configured yet.

С помощью команды dpkg смотрим на информацию о пакете:

# dpkg -s gconf2
Package: gconf2
Status: install ok half-configured
Priority: optional
Section: libs

Хз, что это значит. Почему-то пакет установлен, но не сконфигурирован.

Можно, правда, посмотреть на этот самый post-installation script и попытаться там понять, почему он вернул ошибку. Сам скрипт располагается в /var/lib/dpkg/info/gconf2.postinst.

Запустить в режиме отладки его можно так:

sh -x /var/lib/dpkg/info/gconf2.postinst

И как не странно это звучит, но сообщение "Illegal instruction" связано со строкой:

NV_MAGICCONST = 4 * _exp(-0.5)/_sqrt(2.0) в файле  /usr/lib/python2.6/random.py.

Если эту строку закомментировать, установка gconf2 проходит норм. Круто конечно.

Поиск/просмотр доступных для установки пакетов:

# apt-cache search gconf2

Как правило, все приложения в debian устанавливаются из deb пакетов через использование таких утилит как apt-get install или aptitude.

Но бывают ситуации, когда нужно установить приложение из исходников, т.е. произвести предварительную сборку.

Простой пример - установка программы mc.

Установка с помощью утилиты apt-get:

# apt-get install mc

Установка из исходников:

Для сборки пакетов из исходников доустанавливаем:

apt-get install autoconf automake devscripts libtool autotools-dev dpkg-dev build-essential fakeroot

Переходим, допустим, в папочку /home и скачиваем туда исходники

# cd /home
# apt-get source mc

Доустанавливаем необходимые зависимости:

apt-get build-dep mc

Собираем пакет:

# debuild -us -uc

Установка графики (xorg-server) из исходников в debian:

# apt-get source xorg-server
# apt-get build-dep xorg-server
# debuild -us -uc

Переменные юбута для загрузки debian c usb-флешки:

set newBootCmd 'set ethact egiga1;tf $(loadaddr) mrv/brd6282/uImage;bootm $(loadaddr)'
set newBootArgs 'set bootargs console=ttyS0,115200 root=/dev/sda1 rootwait rw loglevel=8 init=/sbin/init'
set new_boot 'run newBootArgs; run newBootCmd;'

Настройка иксов:
http://mydebianblog.blogspot.ru/2011/03/debian-debian-gnulinux-in-true-debian.html