Установка 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