
Чтобы развеять иллюзии, сразу объясняю: Debian запускается через chroot-окружение, доступ к X11 осуществляется через VNC-сервер. Способ кривоват, но было интересно.

Подготовка образа Debian
Устанавливаем debootstrapapt-get install debootstrapСоздаём файл-контейнер размером 1Гб, а в нём - файловую систему ext2:
dd if=/dev/zero of=debian-arm.img bs=1 count=0 seek=1GНастройки mke2fs можно посмотреть в файле /etc/mke2fs.conf, и будьте предельно осторожны с командой dd - её неспроста расшифровывают как disk destroyer!
mke2fs -F debian-arm.img
Создаём каталог debian-arm и монтируем в него debian-arm.img
mkdir -p debian-armПодготавливаем минимальный образ Debian в директории debian-arm
mount -o loop debian-arm.img debian-arm
debootstrap --verbose --arch armel --foreign lenny debian-arm http://mirror.yandex.ru/debianПараметр verbose можно пропустить,
arch armel - обозначение целевой архитектуры,
foreign - указывается при отличии архитектуры хоста от целевой,
lenny - название релиза Debian,
debian-arm - каталог для инсталляции
и http://mirror.yandex.ru/debian - используемое зеркало

Вытягивается 149 пакетов, в некоторых случаях оптимальнее выбрать зеркало из ближайших в списке http://www.debian.org/mirror/list

По завершении отмонтируем образ и уберём лишнее
umount debian-arm
rm -r debian-arm
Подготовка android-устройства
Подключаем девайс к копьютеру и отключаем usb-накопитель, оставив режим "отладка по usb", после чего запускаем adb из под рута.Корректируем перенаправления к исполняемым файлам:
export bin=/system/binУказываем пути к образу debian и будущей точке монтирования:
export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH
export img=/sdcard/sdcard/debian-arm.img
export mnt=/data/debian

Создаём каталог перекрытия режима записи каталога system и точку монтирования образа:
busybox mkdir -p /data/systemrwЗагружаем модуль вспомогательной файловой системы aufs, после чего открываем ветвь system для записи:
busybox mkdir -p $mnt
insmod /data/local/aufs.ko
busybox mount -t aufs -o br=/data/systemrw=rw:/system=ro none /system

Если смысл этих манипуляций не ясен, то ранее я подробно описывал рецепт каскадно-объединённого монтирования на rk2818
Смотрим используемые псевдоустройства:
busybox losetup -a и ls /dev/block/loop*Выбираем следующее по порядку и создаём новое:
busybox mknod /dev/block/loop8 b 7 0Здесь loop8 - это имя псевдоустройства, опция b указывает на блочный спец. файл, а 7 и 0 - это т.н. старший и младший номера, указывающие на характер устройства (cat /proc/devices для получения спиcка по конкретной системе)
Монтируем debian-arm.img в полученное устройство
busybox losetup /dev/block/loop8 $imgТеперь, обращаясь к устройству /dev/block/loop8, мы будем обращаться к файлу (то есть файловой системе) на /sdcard/sdcard/debian-arm.img
Монтируем /dev/block/loop8 в /data/debian
busybox mount -t ext2 -o noatime,nodiratime /dev/block/loop8 $mntЗдесь -t ext2 указывает на тип файловой системы, a -o noatime,nodiratime запрещает для заданной ф/с обновление полей дескриптора времени доступа.

Завершаем монтирование procfs и sysfs
busybox mount -t proc proc $mnt/procУказываем тип терминала и домашнюю директорию
busybox mount -t sysfs sysfs $mnt/sys
export TERM=linux
export HOME=/root

Включаем режим маршрутизатора (см. /proc/sys/net/ipv4/ip_forward)
busybox sysctl -w net.ipv4.ip_forward=1Определяем расположение узла localhost
busybox echo "127.0.0.1 localhost" > $mnt/etc/hostsВозможно, потребуется также сконфигурировать DNS (в моём случае необязательно)
echo "nameserver 8.8.8.8" > $mnt/etc/resolv.conf
echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf

Наконец, вызываем chroot:
busybox chroot $mnt /bin/bashИ завершаем создание базовой системы
/debootstrap/debootstrap --second-stage

Процесс не самый быстрый, по окончанию удаляем всё лишнее:
apt-get autoclean

Собственно, на этом настройку можно считать оконченной, но я вышел, чтобы смонтировать devpts (теперь это получится), добавил в окружение переменную USER и снова вызвал chroot.
busybox mount -t devpts devpts $mnt/dev/pts
export USER=root
busybox chroot $mnt /bin/bash

Отредактировал список репозиториев и проверил работу apt-get:
echo 'deb http://mirror.yandex.ru/debian lenny main' > /etc/apt/sources.list
apt-get update

Для доступа к X11 понадобится tightvncserver и сама среда рабочего стола на выбор, я хотел протестировать LXDE и Xfce.
apt-get install lxdeНо глядя на то, как электронная книга спотыкается на установке, решил устанавливать пакеты по частям. Желающие могут разобраться с зависимостями командой apt-cache depends <имя_пакета>, мне было лень, ставил в таком порядке:
icewm, tightvncserver, python, hal, openbox, xserver-xorg, rpm, gdm, lxde, xfce4Создаём к корне директорию tmp и настраиваем tightvncserver
mkdir tmpПри первом запуске будет предложено ввести пароли для доступа и view-only режима: первый обязателен, а вот второй можно пропустить.
vncserver
Вводим, после чего убиваем сервер командой
vncserver -kill :1

Далее необходимо настроить запуск среды рабочего стола, отредактировав файл (/root/.vnc/xstartup) под xfce:
#!/bin/bashТеперь можно снова запустить vnc-сервер, указав требуемое разрешение экрана.
xrdb /root/.Xresources
xsetroot -solid grey
startxfce4
Archos 70b ereader работает на разрешении 800x480, за вычетом области статуса остаётся 800x440:
vncserver -geometry 800x440

Запускаем androidVNC, в настройках оставляем пустое имя пользователя, указываем пароль, адрес - localhost, порт - 5901, 24-bit color.

Соединяемся и видим рабочий стол:

Сказать, что работает тормозно - значит не сказать вообще ничего. Можно попробовать поэкспериментировать с цветовыми режимами и перейти на grayscale :)



Редактируем /root/.vnc/xstartup для запуска LXDE:
#!/bin/bash
xrdb /root/.Xresources
xsetroot -solid grey
icewm &
lxsession

После установки экранной клавиатуры выставляем ей "always on top" - и можно сёрфить)
apt-get install matchbox-keyboard

LXDE менее прожорлив, чем xfce, однако не стоит ждать чудес. Зелёные пики индикатора загрузки ЦП прыгают до 100% при большинстве действий.

А вот Iceweasel порадовал: всё-таки классический интерфейс удобнее кпк-реализаций браузеров.
Окей, теперь аккуратно выходим. Андроиду-то всё равно: после перезагрузки мы увидим девственное устройство. Но если мы хотим еще поиграться с debian, мы должны корректно отмонтировать образ.
Гасим vnc-сервер и чистим tmp:
vncserver -kill :1Убиваем все процессы, запущенные из-под chroot:
cd /
rm -r -f tmp
mkdir tmp
fuser -km /Если это не удаётся - убиваем процессы вручную.
Принудительно размонтируем систему:
busybox umount -l -f $mnt/dev/ptsОтключаем созданный loop и режим маршрутизатора:
busybox umount -l -f $mnt/proc
busybox umount -l -f $mnt/sys
busybox umount -l -f $mnt
busybox losetup -d /dev/block/loop8На этом все, разве что PATH можно вернуть в исходное состояние...
busybox sysctl -w net.ipv4.ip_forward=0
export PATH=/sbin:/system/sbin:/system/bin:/system/xbin

UPD: продолжаем насиловать электронную книгу, или
Chroot, Ubuntu и Rockchip RK2818

Прежде всего, пришлось поискать рабочее зеркало. На ports.ubuntu.com нет релиза jaunty, с archive.canonical.com arm-версия не хотела устанавливаться, а вот на old-releases.ubuntu.com меня ждала удача.
Соответственно, debootstrap запускается со следующими параметрами:
debootstrap --verbose --foreign --arch=armel --include ubuntu-desktop jaunty ubuntu-arm http://old-releases.ubuntu.com/ubuntu/
Здесь ubuntu-arm - это каталог, в который смонтирован образ, а опция --include указывает на установку необходимых пакетов - я пожалел читалку и решил выполнить second stage на ПК. Для этого потребуется эмуляция arm-архитектуры:
sudo apt-get install qemu-user-staticКопируем бинарник в рабочий каталог:
cp /usr/bin/qemu-arm-static ubuntu-arm/usr/bin/Теперь можно сделать chroot в arm-окружение на i686 компьютере:
chroot ubuntu-armЕсли система не распознаёт формат, можно попробовать установить binfmt-support, но на большинстве современных дистрибутивов этого не требуется.
Секонд стейдж:
./debootstrap/debootstrap --second-stageВ процессе установки появлялись ошибки конфигурирования, но со второго или третьего раза система встала.
W: Failure while configuring required packages.Корректируем sources.list, выходим и chroot и подчищаем мусор:
echo 'deb http://old-releases.ubuntu.com/ubuntu jaunty main' > /etc/apt/sources.listОтключаем образ, переносим на читалку и наслаждаемся:
echo 'deb http://old-releases.ubuntu.com/ubuntu jaunty universe' >> /etc/apt/sources.list
echo 'deb http://old-releases.ubuntu.com/ubuntu jaunty-updates universe' >> /etc/apt/sources.list
exit
rm ubuntu-arm/usr/bin/qemu-arm-static



