Я уже ранее описывал, как установить 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 на Android — https://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). Возможно эти проблемы могут быть полностью или частично решены (одно костыльное решение могу предложить сразу).
Я не понял зачем здесь Entware:) Есть изюмительные средства для автоматизированного развёртывания десятка линуксовых дистрибутивов с автовыбором платформы, вот одно из популярных — https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy
Заметка об установке Entware. Установка Debian из Entware — бесплатное приложение, об этом только последний абзац. Ссылку на LinuxDeploy и другие способы я дал. Проблемы установки (да и способ, в случае debian) — одинаковые.
Если не ошибаюсь, для установки Linux Deploy желательна поддержка loop устройств (основной способ установки). Мой amlogic бокс их не поддерживает (хотел выложить готовый минимальный образ jessie). Поэтому некоторым может установка на extN носитель в произвольную папку и пригодится.
Насчет loop на боксе я был неправ. loop устройства на андроиде расположены в /dev/block. Если с помощью mknod создать loop устройство в /dev, то начнет работать `mount -o loop`. С помощью losetup можно использовать и /dev/block/loop*.