LINUX.ORG.RU
решено ФорумMobile

Debian on HTC Desire (trouble)


0

1

Нарыл статейку, в которой был описан способ chroot`ового запуска ОС Debian с графической средой LXDE. По сути всё просто: создаётся образ с ExT2, туда пихается базовый дебайн, на него сверху тайдВНЦ и лхде, а так же ssh, потом этот образ монтируется в телефоне и с помощью chroot запускаются процессы, в итоге граф. среда может быть получена в доступ по локальной петле VNC.
http://www.android-hilfe.de/anleitungen-fuer-motorola-milestone/26870-how-deb...
http://www.mayrhofer.eu.org/debian-on-android
Данный метод был выбран потому как Дебиан изолирован от корневой файловой системы телефона, хоть и может писать на карту SD, а теперь о проблеме:
Поискав нашёл «готовое решение» (линк на страницу, если нужен, дам в коментариях): образ дебиана с lxde, ssh, vnc и работающей историей команд баша. Автор образа обещал исправление некоторых косяков и глюков.

Так вот, захожу по chroot, стартует nvc, захочу через него и открываю терминал - начиная с этого момента lxde не запускает НИ ОДНОЙ КНОПКИ-ПРИЛОЖЕНИЯ. Перезагрузил...
Стартую chroot`ом и автоматом стартует nvc. Захожу по нему и пробую извне открыть ssh - как только начата сессия, lxde более не стартует ни одной кнопочки... REBOOT
Старт всё так же, захожу по vnc, возвращаюсь в терминал, в котором chroot выполнял и пишу bash. С этого момента lxde кнопок не знает...

Оказалось что в .bashrc прописан старт демона ssh и старт vnc-сервера с предварительным убиванием второго vnc-дисплея. (для чего всё это в башрц???)
Убрал из этого файла vnc в отдельный файл - по идее это должно было избавить как от автостарта новой сессии Х11 и vnc при новом shell, так и от необходимости убивать дисплеи, но это не решило проблему с lxde.
Убрал старт ssh-демона из башрц, однако это ни к чему не привело - после любого запуска *sh lxde перестаёт понимать кнопки запуска, хотя перезайти в терминал андройда или по ssh - по прежнему можно, и ещё можно в lxde после запуска баша запустить *.sh «двойным кликом» (есть только один, и в нём убийство дисплея vnc)

Так в чём дело-то? Какого фига lxde не падает и кнопки не стартует именно после старта *sh? Почему не стартуют сервисы rc.local?? «Если хочешь чтобы всё было сделано как надо - сделай это САМ» - хорошая фраза, но у меня так и не выходит заставить баш сохранять историю, сделать ssh с аутентификацией по rsa (чего нет и ни в одном образе из всех, что я пробовал или собирал)

★★
Ответ на: комментарий от Quasar

make disk-image
$ sudo dd if=/dev/zero of=debian.img bs=$((1024*1024*1024)) count=3
$ sudo mkfs.ext2 -F debian.img
$ sudo tune2fs -c0 debian.img

Install debian in disk-image
$ mkdir debian
$ sudo mount -o loop debian.img debian/
$ sudo build-arm-chroot --verbose --arch=armel --foreign lenny debian http://ftp.de.debian.org/debian

Теперь самое интересное:
CHROOT disk-image
$ sudo mount -t proc none debian/proc/
$ sudo mount -t sysfs sysfs debian/sys/
$ sudo mount -t devpts devpts debian/dev/pts
$ sudo chroot debian/ /bin/bash
И вот вам!: '/bin/bash' не найден!
ls показывает и каталоги, и наличие баша. В пути к образу нет ни пробелов, ни специальных символов. Однако на другом компе chroot проходит удачно, НО баш не хранит историю, не стартуют сервисы (только вручную или скриптом), да и так, мелкие глючки...

zzdnx ★★
() автор топика
Ответ на: комментарий от Quasar

Я делал с нуля для оптимуса - всё работает.

Может, у тебя другая прошивка, не такая, как у меня, может, дело в версии андроида... Как я понял, при chroot`е наследуется часть переменных из «внешней» (для нового / ) системы.

zzdnx ★★
() автор топика
Ответ на: комментарий от Quasar

В простых прошивах нет модуля для чтения даже ExT2. Собственно, у меня по заранее назначенным путям (которые там озвучены неоднократно) тоже этих модулей нет, а на карте памяти партиция с ExT3, и она прекрасно читается/пишется без всяких модулей. Как бы это странно не звучало, но я и образ с ExT2 подключаю без каких либо указаний на то, какая внутри ФС и всё прекрасно работает как на «R», так и на «W», но мне известно что у не малого количества андроидов это невозможно (нужны модули). Так как я не помню за давностью дела, чью прошивку я поставил и какие в ней были проделанны изменения - я не могу сказать о своём случае ничего, но 4pda мне не помог.

zzdnx ★★
() автор топика
22 апреля 2011 г.
Ответ на: комментарий от zzdnx

Мануал по решению...

:: Удовлетворяем зависимости
$ sudo apt-get install qemu-arm-static debootstrap

:: Творим диск:
$ sudo dd if=/dev/zero of=debian.img bs=$((1024*1024*1024)) count=3
$ sudo mkfs.ext2 -F debian.img
$ sudo tune2fs -c0 debian.img

:: Ставим в него дёбиян
$ mkdir debian
$ sudo mount -o loop debian.img debian/
$ sudo build-arm-chroot --verbose --arch=armel --foreign lenny debian http://ftp.ru.debian.org/debian

:: Теперь внутри образа под root`ом:
# export HOME=/root
# export LC_ALL=C
# echo 'deb http://ftp.ru.debian.org/debian lenny main contrib non-free' > /etc/apt/sources.list
# apt-get update

:: Навешиваем софт
# apt-get install tightvncserver ssh fvwm-crystal
:: Тут то, что было нужно именно мне. Оконный менеджер fvwm-crystal или, если угодно, ставьте lxde, но тогда придётся менять строчку в файле «/root/.vnc/xstartup», когда будем VNC настраивать.

:: Теперь конфигим:
:: Вот такой у меня /root/.bashrc:
# ~/.bashrc: executed by bash(1) for non-login shells.

export LANGUAGE=ru_RU:en
export LANG=ru_RU.UTF-8
export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
export USER=root
export HOSTNAME=htcdesire
export LC_ALL=C

if [ -f /tmp/statusfile ] ; then echo 'All servises is started :-)'; else
echo «StatusFile does not exist.»
# If isn`t running VNC (veryfing vnc`s status):
function a () { echo ${#} ;};
vnc=`a \`pgrep Xtightvnc\``;
if [ `echo $vnc` == 0 ];
then
echo «Starting VNC-server:»;
echo «geometry 800x480 dysplay :1»;
vncserver -geometry 800x480;
else
echo «VNC-service is running [OK]»;
fi;
# If ssh isn`t running (veryfing ssh`s status):
if [ «`/etc/init.d/ssh status | cut -d» " -f5`" != «running» ];
then
echo «Starting SSH-service...»;
/etc/init.d/ssh start;
else
echo «SSH-service is running [OK]»;
fi;
# Make status-fle:
echo " «>/tmp/statusfile && echo „Make statusfile in /tmp [DONE]“ || echo „Make statusfile in /tmp [FILED!]“;
fi;

export PS1='\h:\w\$ '
umask 022

:: Продолжим файлом VNC - /root/.vnc/xstartup:
#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title »$VNCDESKTOP Desktop" &
#x-window-manager &
#/etc/X11/Xsession
/usr/bin/fvwm-crystal
:: Если у вас не fvwm-crystal, а lxde то последняя строка должна указывать не на «/usr/bin/fvwm-crystal», а на «lxsession» (этого обычно достаточно)

:: добавляем хостики
# echo «localhost» > /etc/hostname
# echo «127.0.0.1 localhost.localdomain localhost» > /etc/hosts

:: настраиваем пароль VNC
# vncpasswd

:: Настраиваем пароль для SSH
# passwd

:: Демонтируем образ и продолжаем работу.

:: На сием закончим конфиги и перейдём к инструментам:
:: Сначала первый скрипт «debian», который нужно поместить в андроиде в каталог «/system/bin» и которому нужны права на выполнение.
#!/system/bin/sh
sh «`find / -name deboot 2>/dev/null`»
:: Как видим, происходит поиск и запуск файла deboot

:: Файл-скрипт «deboot» (для запуска и чрутования):
#!/system/bin/sh
dir=`find / -name deboot 2>/dev/null | sed 's/deboot/ /' | sed 's/[ \t]*$//'`
k='«';
export PATH=$bin:/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
mkdir /app-cache/Debian 2>>/dev/null ;
if [ -d /app-cache/Debian ] ;
then
if [ -d /app-cache/Debian/root ] ;
then
echo „Found folder /app-cache/Debian/root\nExit...“ ;
exit ;
else
losetup /dev/block/loop5 »$dir"debian.img ;
dir=«/app-cache/Debian» ;
mount -t ext2 /dev/block/loop5 «$dir» ;
rm -rf «$dir»/tmp ;
mkdir «$dir»/tmp ;
mount -t devpts devpts «$dir»/dev/pts ;
mount -t proc proc «$dir»/proc ;
mount -t sysfs sysfs «$dir»/sys ;
busybox mount /sdcard «$dir»/root/SD-Card ;
rm «$dir»/root/.vnc/*.log ;
rm «$dir»/root/.vnc/*.pid ;
sysctl -w net.ipv4.ip_forward=1 ;
fi ;
else
if [ -e «$dir"RootFS/root ] ;
then
echo „Found active RootFS on SD-Card...\n“$dir"RootFS/root» ;
else
if [ -d «$dir"RootFS ] ;
then
echo „The folder RootFS exist“ ;
else
echo „Make folder RootFS“ ;
mkdir »$dir"RootFS ;
fi ;
fs=RootFS
losetup /dev/block/loop5 «$dir"debian.img ;
mount -t ext2 /dev/block/loop5 »$dir"RootFS ;
rm -rf «$dir"RootFS/tmp ;
mkdir »$dir"RootFS/tmp ;
mount -t devpts devpts «$dir"RootFS/dev/pts ;
mount -t proc proc »$dir"RootFS/proc ;
mount -t sysfs sysfs «$dir"RootFS/sys ;
busybox mount /sdcard »$dir"RootFS/root/SD-Card ;
rm «$dir"RootFS/root/.vnc/*.log ;
rm »$dir"RootFS/root/.vnc/*.pid ;
sysctl -w net.ipv4.ip_forward=1 ;
fi ;
fi ;
chroot «$dir»"$fs" /bin/bash

:: Внутри АндройдОС есть каталог /app-cache , доступный по умолчанию как «rwx» простому юзеру, туда и монтируется корневая система нашего образа. Если это невозможно, то образ будет смонтирован на том месте, где и лежит (там для него каталог будет создан).

::Теперь на ведройде открываю терминал и командую:
$ su
# debian
:: и вижу стартующие SSH и VNC, после чего попадаю в консоль примонтированного в андроиде образа как пользователь root. Теперь по VNC локально ловлю рабочий стол... Готово.

zzdnx ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.