Entware-3x и Debian на Android — конспект

dandroid

Я уже ранее описывал, как установить Entware-ng на андроид, для установки была собрана специальная, пропатченная системная библиотека. Установка носила экспериментальный характер. В настоящее время таким образом пропатченная библиотека является основой Entware-3x и экспериментальной установке на андроид соответствует т.н. альтернативная установка Entware-3x.

Альтернативную установку Entware-3x можно использовать без каких либо существенных изменений на андроид. Напомним, что для этого нужно. Нужно устройство на андроид с ядром 3.2.40 или старше, рутовый доступ и носитель для установки. Необходима поддержка запуска скриптов при загрузке (обычно это init.d или su.d). Носитель должен поддерживать символические ссылки и атрибуты файлов linux. Таким образом флешки и sd карты с файловыми системами fat16, fat32, exfat не подходят. На форуме рассматривается вариант установки на встроенную флеш память, я предпочитаю установку на sd карту. С последним могут быть проблемы. На Android kitkat  в одном из случаев самым корректным оказался способ, когда на карте создавалось 2 раздела. Первый fat32 монтировался системой андроид, второй ext2 раздел монтировался руками. Для того, чтобы он был виден всем приложениям использовался пакет bindfs из entware. Стандартного решения этой проблемы нет, все зависит от устройства и прошивки.

Я опишу два способа установки Entware-3x и Debian Jessie (в среде chroot) на TV Box на чипе Amlogic S912 (c прошивкой superсeleron V1, android 6). Сначала я опишу установку на SD карту с файловой системой ext4, а потом установку в файл-образ. который может быть расположен и на внешнем носителе с любой файловой системой и на встроенной флешке. Описывать буду кратко, по памяти - данный текст это не инструкция а, скорее, общее описание двух способов установки.

Перед установкой следует установить из маркета busybox (лучше от meefik, т.к. в одной из версий busybox от Stericson не работал wget), SSHDroid или Terminal. Запускайте SSHDroid на нестандартном порту, т.к. в процессе установки будет запущен dropbear на 22 порту.

Установка на SD карту (внешнюю или встроенную)

Начнем с носителя. Отформатированная в ext4 sd карточка подхватилась системой и была автоматически смонтирована в папку /mnt/media_rw/763cc5a6-3ffb-d201-6038-c5a63ffbd201. Тут длинная последовательность букв и цифр — это GUID раздела, у Вас будут другие буквы и цифры. Сначала создадим (если ее нет) папку /opt в корневой файловой системе, создадим также папку /bin и симлинк /bin/sh -> /system/bin/sh для работы linux скриптов.

mount -o rw,remount /
mkdir -p /opt
mkdir -p /bin
ln -s /system/bin/sh /bin/sh
mount -o ro,remount /

Создадим папку, куда будем устанавливать entware (я использую свой guid) и подмонтируем ее в /opt

mkdir -p /mnt/media_rw/763cc5a6-3ffb-d201-6038-c5a63ffbd201/entware
mount -o bind /mnt/media_rw/763cc5a6-3ffb-d201-6038-c5a63ffbd201/entware /opt

Можно использовать вместо внешней карты встроенную память. В этом случае выполняем

mkdir -p /data/local/entware
mount -o bind /data/local/entware /opt

Если в /etc нет файла resolv.conf, создадим его (симлинк), пропишем в него наш DNS сервер (я пропишу от Google):

echo 'nameserver 8.8.8.8' > /opt/etc/resolv.conf
echo 'nameserver 8.8.4.4' >> /opt/etc/resolv.conf
mount -o rw,remount /system
ln -s /opt/etc/resolv.conf /system/etc/resolv.conf
mount -o ro,remount /system

Я немного модифицировал скрипт альтернативной установки Entware-3x — добавил в него задание PATH для андроид, добавил установку dropbear и московской таймзоны. Устанавливаем:

/system/xbin/wget -O- http://entware-3x.zyxmon.org/binaries/armv7/installer/install_android.sh | /system/bin/sh

Если установка пройдет успешно, Вы сможете подключиться к своему устройству по ssh (логин root, пароль 12345) и закончить установку. Поменяйте пароль командой passwd, установите свою таймзону командой ln -sf /opt/share/zoneinfo/[Asia|Europe]/<Свой город>  /opt/etc/localtime. Отредактируйте /opt/etc/profile и задайте в нем export PATH=/opt/bin:/opt/sbin:/system/bin:/system/sbin.

Для того, чтобы Entware (с dropbear) автоматически запускался при загрузке android добавьте в автозапуск (у меня это папка /system/etc/init.d) такой скрипт

root@localhost:/opt# cat /system/etc/init.d/1ware
#!/system/bin/sh
while [ ""`getprop dev.bootcomplete` != "1" ] ; do sleep 1; done
mount -o rw,remount /
mkdir -p /opt
mkdir -p /bin
[ -e /bin/sh ] || ln -s /system/bin/sh /bin/sh
mount -o ro,remount /
sleep 1
# remount with dev + suid for debian chrooted installs
mount -o remount,dev,suid /mnt/media_rw/763cc5a6-3ffb-d201-6038-c5a63ffbd201
sleep 1
mount -o bind /mnt/media_rw/763cc5a6-3ffb-d201-6038-c5a63ffbd201/entware /opt
sleep 1
mount -o rw,remount /system
[ -e /system/etc/resolv.conf ] || ln -s /opt/etc/resolv.conf /system/etc/resolv.conf
mount -o ro,remount /system
sleep 1
[ -f /opt/etc/init.d/rc.unslung ] && /opt/etc/init.d/rc.unslung start

Проверьте, что все работает, после перезагрузки. Я добавил в автозапуск перемонтирование mount -o remount,dev,suid... Эта строчка нужна, если Вы хотите установить Debian и только при использовании внешней карты. Ври использовании внутренней флеш памяти она не нужна и команда монтирования /opt другая (см. выше). Другой, предпочтительным способ автозапуска Entware — использование утилиты Universal_Autocontrol, оно описано в следующем разделе и легко переносится на этот способ установки.

Существует множество способов установки Debian на Androidhttps://wiki.debian.org/ChrootOnAndroid. Все они основаны на выполнении скрипта debootstrap. Слегка адаптированный вариант установки встроен в Entware-3x и описан тут - http://forums.zyxmon.org/viewtopic.php?f=5&t=5484. Работает это и на entware-3x+андроид. Если нужно, устанавливайте. Я рекомендую включить ARCH=armhf (если Ваш процессор, как и Amlogic S912 поддерживает операции с плавающей запятой) и зеркало пакетов yandex для ускорения. Процедура установки заняла у меня около 30 минут. все работает штатно….

 

Установка в файл-образ

Я буду устанавливать Entware в файл-образ на SD карте. Я отформатировал карту как fat32 и она у меня смонтировалась в папку /mnt/media_rw/86BB-1DE4.

Перед тем, как создавать образ следует оценить требуемый объем дискового пространства для установки. Если (невероятный случай) Вы захотите установить ВСЕ пакеты Entware, то Вам понадобиться чуть меньше 2 гигабайт. Реальные установки Entware требуют несколько десятков или сотен мегабайт. Если Вы будете устанавливать Debian, следует расчитывать на 0.5-1GB.

Файл, заполненный нулями, размером 512GB создадим командой (используйте свой путь и имя файла по желанию)

 

dd bs=1M count=512 if=/dev/zero of=/mnt/media_rw/86BB-1DE4/eware.img

 

«Отформатируем» файл в файловую систему ext2

 

mkfs.ext2 -F /mnt/media_rw/86BB-1DE4/eware.img

 

Для монтирования образа придется немного поплясать с бубном. Дело в том, что в Android т.н. loop устройства создаются не в папке /dev, а в /dev/block. По этой причине стандартные утилиты работы с такими устройствами не полностью работоспособны. Для их работы создадим символические ссылки на loop устройства в папке /dev

 

for file in /dev/block/loop*; do [ -e /dev/`basename $file` ] || ln -s $file /dev/`basename $file`; done

 

Существуют и другие решения для работы с /dev/block/loopN, описанные на форуме. Подготовительные этапы подготовки к монтированию аналогичны описанным в первом способе

 

mount -o rw,remount /
mkdir -p /opt
mkdir -p /bin
ln -s /system/bin/sh /bin/sh

Создание /etc/resolv.conf (если нет)

mount -o ro,remount /mount -o rw,remount /system
ln -s /opt/etc/resolv.conf /system/etc/resolv.conf
mount -o ro,remount /system

Монтировать будем командой

mount -t ext2 -o loop /mnt/media_rw/86BB-1DE4/eware.img /opt

Пропишем DNS
echo 'nameserver 8.8.8.8' > /opt/etc/resolv.conf
echo 'nameserver 8.8.4.4' >> /opt/etc/resolv.conf

Сама установка аналогична ранее описанному:

/system/xbin/wget -O- http://entware-3x.zyxmon.org/binaries/armv7/installer/install_android.sh | /system/bin/sh
Для автоматического монтирования и автозапуска служб Entware воспользуемся утилитой Universal_Autocontrol (1.2 или старше) , созданной форумчанином kaztost (ссылка на форуме). После установки настроим Universal_Autocontrol — отредактируем AutoStart Command Start Command, Stop Command и OnShutdown Command - зададим пути к файлам скриптам Entware-3x.

Содержимое mount.sh (у Вас будет свой путь к файлу образу)


#!/system/bin/sh
while [ ""`getprop dev.bootcomplete` != "1" ] ; do sleep 1; done
mount -o rw,remount /
mkdir -p /opt
mkdir -p /bin
[ -e /bin/sh ] || ln -s /system/bin/sh /bin/sh
mount -o ro,remount /
sleep 2
for file in /dev/block/loop*; do [ -e /dev/`basename $file` ] || ln -s $file /dev/`basename $file`; done
sleep 2
mount -t ext2 -o loop /mnt/media_rw/86BB-1DE4/eware.img /opt
sleep 1
mount -o rw,remount /system
[ -e /system/etc/resolv.conf ] || ln -s /opt/etc/resolv.conf /system/etc/resolv.conf
mount -o ro,remount /system

Содержимое start.sh

#!/system/bin/sh
[ -f /opt/etc/init.d/rc.unslung ] && /opt/etc/init.d/rc.unslung start

Содержимое stop.sh и onshutdown.sh одинаковое. Первый скрипт служит для остановки сервисов Entware вручную, второй при перезагрузке, выключении

#!/system/bin/sh
[ -f /opt/etc/init.d/rc.unslung ] && /opt/etc/init.d/rc.unslung stop

Готовые файлы с образами выложены тут — http://android.zyxmon.org/files/
Для Entware ssh логин root, пароль 12345
Для Debian ssh демон на порту 50022, логин root, пароль 12345. Для Entware_Debian так же досупны оба ssh сервера. В Entware установлен mc (Midnight Commander)/
Тема на форуме — http://forums.zyxmon.org/viewtopic.php?f=21&t=5565

 

Какой способ установки выбрать

Если предполагается использование Debian или большого числа Entware пакетов, то лучше использовать установку в файл, образ. Для небольшого числа Entware пакетов — лучше использовать встроенную память (флешку). Установка в папку extN носителя связана с проблемами, о которых я не писал (специфика монтирования носителей в Android). Возможно эти проблемы могут быть полностью или частично решены (одно костыльное решение могу предложить сразу).

3 Комментарии в“Entware-3x и Debian на Android — конспект”

  1. 16.07.2017 в 14:15 #

    Я не понял зачем здесь Entware:) Есть изюмительные средства для автоматизированного развёртывания десятка линуксовых дистрибутивов с автовыбором платформы, вот одно из популярных — https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy

  2. Zyxmon
    16.07.2017 в 14:52 #

    Заметка об установке Entware. Установка Debian из Entware — бесплатное приложение, об этом только последний абзац. Ссылку на LinuxDeploy и другие способы я дал. Проблемы установки (да и способ, в случае debian) — одинаковые.
    Если не ошибаюсь, для установки Linux Deploy желательна поддержка loop устройств (основной способ установки). Мой amlogic бокс их не поддерживает (хотел выложить готовый минимальный образ jessie). Поэтому некоторым может установка на extN носитель в произвольную папку и пригодится.

  3. Zyxmon
    17.07.2017 в 23:07 #

    Насчет loop на боксе я был неправ. loop устройства на андроиде расположены в /dev/block. Если с помощью mknod создать loop устройство в /dev, то начнет работать `mount -o loop`. С помощью losetup можно использовать и /dev/block/loop*.

Добавить комментарий для Zyxmon Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

(Required)

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Автор темы: www.gopiplus.com, перевел WP-Templates.ru, поддержка SearchTimes.ru.