Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

Запуск debian на android 4.4.4

Установка и настройка программ в Debian
Ответить
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Запуск debian на android 4.4.4

Сообщение nezabudka »

Перепробовав кучу приложений по запуску линукс на свем планшете
Мегафон логин я пришла к выводу что значительная их часть предназначена
для запуска на устройствах 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
Это мой дебют, моя первая статья написанная на планшете на новой, "старой" работе.
Мне отдали этот девайс как дешевое и крайнее неудобство.
У меня под рукой кроме него больше ни чего нет. Пока я писала статью, получила
большое моральное удовлетворение от работы с любовью настроенной вещью.
Вывод, устройство на котором запускается линь становится бесценным и нивелирует
изначальную стоимость любого дивайса. Всем удачи.
[album]212[/album]
[album]213[/album]
[album]214[/album]
[album]215[/album]
[album]216[/album]
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

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

Сообщение nezabudka »

Я написала в коде монтирования луп устройства в андроиде следующее

Код: Выделить всё

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
Ответить

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