Запуск debian на android 4.4.4

Установка и настройка программ в Debian

Запуск debian на android 4.4.4

Сообщение nezabudka » 15 авг 2015, 16:09

Перепробовав кучу приложений по запуску линукс на свем планшете
Мегафон логин я пришла к выводу что значительная их часть предназначена
для запуска на устройствах 4.3.0 и старше. Мне порядком надоело разбираться
в чужих скриптах запуска в поисках ошибок и подумала что в моем случае будет проще
запустить мой любимый дебиан создав все с ноля. Тем более что мне нужна минимальная
система для работы в консоли, а значит и скрипт запуска ссожмется до десятка
строчек кода. Приступим. Что бы не забыть сразу скажу что нам понадобится
установить android терминал, легко найти в google market по запросу terminal Jack Palevich
Страничка проекта на гитхабе https://github.com/jackpal/Android-Terminal-Emulator
После установки обязательно нужно выбрать в настройках тип "linux" для корректной работы.
Еще будут необходимы права рут на нашем девайсе и для их управления прграмма SuperSU ожидающая
загрузки на том же google market. Приходится сознавать, что ее я ранее
незаслуженно забраковала по причине некоторой неровности своих рук, о чем я коснусь
в скользь несколько позже и этим исправлюсь перед читателями моей предыдущей темы
Установка линукс на планшет MFLogin3T на нашем форуме.
Буду описывать все по упрощенной схеме пропуская не существеенные моменты,
например у меня сд карта с тремя разделами vfat ext4 ext2 но описываю что мы
устанавливаем на сд карту 1G отформатированную в ext2, можно выбрать и ext4,
но заметте что в любом случае в опциях команды mount нужно обязательно выбирать
параметр ext4 иначе в место желаемого результата мы получим сообщение об ошибке.
Карточку я предварительно отформатировала на планшете с помощью apated из того же
google market но все это прекресно можно сделать и на своем десктопе.
Вставляем sd карточку в usb адаптер и подключаем к компу. У меня она определилась
как /dev/sdc, скоректируйте код если на вашей машине по другому. Открываем терминал
и устанавливаем отсутствующие инструменты на компе
Код: выделить все
apt install debootstrap qemu-user-static

Отмонтируем нашу карточку и смонтируем в каталог /mnt
Начинаем установку минимальной системы через debootstrap
Код: выделить все
debootstrap --arch=armhf --variant=minbase --foreign --no-check-gpg --verbose jessie /mnt http://ftp.de.debian.org/debian

По завершению выполняем следом команду
Код: выделить все
sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin

Код: выделить все
LANG=C sudo chroot /mnt /usr/bin/qemu-arm-static /bin/bash ./debootstrap/debootstrap --second-stage

Не пугайтесь что так много адресных параметров, все прекрасно работает.
Код: выделить все
sudo mkdir /mnt/sdcard #создаем каталог для подключения sd карты планшета

К стати сказать устанавливать прямиком на устройство тоже не обязательно,
достаточно при помощи тулзы dd создать образ необходимого размера и выше
приведенные манипуляции произвести над ним
Код: выделить все
dd if=/dev/zero of=debian.img bs=1M count=1024
sudo mkfs.ext2 debian.img
sudo mount -o loop debian.img /mnt

Или в продвинутой нотации
Код: выделить все
dd if=/dev/zero of=debian.img bs1M count=1536
sudo losetup --find --show debian.img

Создаст и покажет какое луп устройство связано с образом, чаще это /dev/loop0
Код: выделить все
sudo mkfs -t ext4 /dev/loop0
sudo mount /dev/loop0 /mnt

А как его подключить на андрюше я сделаю в конце небольшое пояснение. Можно
и не подключать, а приготовленный образ с системой переместить на планшет и в терминале
побитно опять же через утилиту dd скопировать все на
подготовленный за раннее свободный раздел карточки аналогичного размера или
несколько большего во избежание не хватки места. Все теперь у нас готова система
на карточке без загрузчика и ядра, но ведь оно нам и не надо. Вставляем карточку в планшет.
Так как у меня на карточке 3 раздела и первый автоматом монтируется как накопитель,
второй тоже монтирует на автомате приложение под названием link2sd увеличивая тем самым
внутреннюю память для устанавливаемых приложений. Третий же раздел в1G у меня
просто определяется как устройство /dev/block/mmcblk1p3 и не смонтированно ни где.
Если на карточке у вас будет как описано один раздел в формате ext2 то он также не
будет монтироватся автоматом из за ошибки в типе файловой системы и поэтому скрипт
будет идентичным за исключением номера раздела устройства. Это фактически и есть наш
жесткий диск с линухом. Теперь пишем скрипт управления. Но перед этим выполним одну команду
Код: выделить все
mkdir -p /data/local/tmp/linux #создаем каталог монтирования

Ну и теперь сам скрипт. Если вы поместите его в директорию /system/bin
как будет показано ниже, необходимо будет в начале добавить Sha bang
Код: выделить все
#!/system/bin/sh
export MNT=/data/local/tmp/linux
export PATH=/system/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH
export LD_PRELOAD=''
export LD_LIBRARY_PATH=''
export TERM=linux
export HOME=/root
mount -t ext4 /dev/block/mmcblk1p3 $MNT # mmcblk1p1 если карта только с одним разделом
mount -t devpts devpts $MNT/dev/pts
mount -t proc proc $MNT/proc
mount -t sysfs sysfs $MNT/sys
mount -o bind /storage/sdcard1 $MNT/sdcard # если карточка только с одним разделом
#заменяем sdcard1 на sdcard0 и у вас будет в линуксе доступна общая внутренняя
#память для для двух систем
busybox sysctl -w net.ipv4.ip_forward=1 # если не установлен busybox можно заменить
#на echo с записью в sysctl.conf или пропишем nameserver 8.8.8.8 в resolv.conf
chroot $MNT /bin/bash -l #после этой команды выполнение скрипта прекращается до выхода
# из чейндж рута
umount $MNT/dev/pts # продолжение работы после команды exit из чендж рута
umount $MNT/proc
umount $MNT/sys
umount $MNT/sdcard
umount $MNT

В предыдущей теме у меня появлялись ошибки при запуске линя когда я обновляла
конфигурацию приложения SuperSU. Анализ выявил следующее что при запуске линя
ему передавались глобальные переменные LD_PRELOAD и LD_LIBRARY_PATH с установленными
значениями для андроида. Я посмотрела значения этих переменных на десктопе и так как
они были равны пустому значению то и я определила для передачи в линукс аналогично.
Их значения записаны у меня как два одинарных апострофа без пробела. После
этого запуск debian под управлением SuperSU происходит корректно. Еще раз извинюсь
перед создателями этого приложения за не уместную критику не разобравшись в
суте проблеммы. Файл скрипта у меня называется linuxin но ни кто вам не помешает
назвать его например linuxim. Да и я наверное переименую. Поместила я его во
внутреннюю память телефона смонтирванную для чтения,запись и запускается он
командой sh ./sdcard/linuxin
По команде exit мы выйдем из окружения чендж рут и скрипт автоматически размонтирует
все в нем смонтированное и вернет систему к изначальному состоянию.
Можем по новому запускать и работать но я бы посоветовала перемонтировать
раздел /system в андроиде с опцией чтение запись, поместить скрипт в директорию
/system/bin установить права на выполнение и перемонтировать опять раздел в
тоько чтение или перезагрузится и наш скрипт будет запускаться всего одной командой linuxim
Код: выделить все
busybox mount -o remount,rw /system
cp /sdcard/linuxim /system/bin/
chmod 755 /system/bin/linuxim
busybox mount -o remount,ro /system

Имеем ввиду что у нас установлена минималка, а значит
правим sources.list по средством команды echo, Обновляемся, устанавливаем необходимое
Код: выделить все
apt install apt-utils
apt install bash-completion
#расширение для bash
Чтобы система не ругалась что не может нормально интерактивно
общаться с пользователем установим
Код: выделить все
apt install dialog whiptail

Установим локалку по этому мануалу Обустраиваем контейнер docker
Да! Чтобы не редактировать фалы через echo установим текстовый редактор
так же как в высше преведенной теме. Не забываем работа в docker ни чем не отличается
от нашей установки. Так же не забываем установить локальное время.
Код: выделить все
dpkg-reconfigure tzdata

Корректный выбор для тех кто проживает по Московскому времени будет город Минск! :D
Так же не помешает установить командой passwd пароль рут и создать командой
adduser user своего пользователя. Ну и в заключение как и обещала пара команд для монтирования
образа как луп устройство, для подсказки, с чем я уверена каждый заинтересовашийся разберется
самостоятельно, а нет, я всегда рядом. Для этой альтернативы необходимо установить
busybox с google store. У меня кастомная прошивка уже оснащена подобными инструментами.
Ну и теперь сам продвинутый метод монтирования луп устройства.
Код: выделить все
if [ ! -b /dev/block/loop255 ]; then
busybox mknod /dev/block/loop255 b 7 255 #создаем луп устройство если его нет
else :
fi
busybox losetup /dev/loop255 /path/image.img #связываем его с образом
mount /dev/loop255 /path/mnt  #монтируем

Ну а дальше мы уже проходили.
Только в конце скрипта не забудим добавить строчку дизасоциации устройства
Код: выделить все
busybox losetup -d /dev/loop225

Это мой дебют, моя первая статья написанная на планшете на новой, "старой" работе.
Мне отдали этот девайс как дешевое и крайнее неудобство.
У меня под рукой кроме него больше ни чего нет. Пока я писала статью, получила
большое моральное удовлетворение от работы с любовью настроенной вещью.
Вывод, устройство на котором запускается линь становится бесценным и нивелирует
изначальную стоимость любого дивайса. Всем удачи.
212
213
214
215
216
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 25 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

Запуск debian на android 4.4.4

Спонсор

Спонсор
 

Re: Запуск debian на android 4.4.4

Сообщение nezabudka » 16 авг 2015, 21:06

Я написала в коде монтирования луп устройства в андроиде следующее
Код: выделить все
if [ ! -b /dev/block/loop255 ]; then
busybox mknod /dev/block/loop255 b 7 255
else :
fi
busybox losetup /dev/loop255 debian.img
mount /dev/loop255 /mnt

Когда мы делаем асоциацию луп устройства на компе мы просто можем написать
Код: выделить все
a=$(sudo losetup --find --show debian.img)
mount $a /mnt

Это значит что первое свободное луп устройство свяжется с нашим образом и все!
В андроиде многие команды имеют урезаные возможности и такая простота превращается
в большую конструкцию. И в добавок по своей сути конструкция не гибкая а занчит не правильная.
Я написала костыль который способен заменить отсутствующую опцию
в андродовской утилите losetup:
Код: выделить все
a=$(losetup -f)
losetup /dev/block${a:4} debian.img
mount /dev/block${a:4} /mnt

И все. образ будет асоциироваться с первым свободным устройством
И в конце скрипта будет достаточно следующей строчки для освобождения
Код: выделить все
losetup -d /dev/block${a:4}

Это позволит пользоваться стандартными свободными устройствами
и не создавать помехи системе.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 25 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.


Вернуться в Установка программ

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1