В предыдущей заметке я описал, как установить Entware.arm на роутер с прошивкой Tomato от Shibby. Теперь поставим Entware на android.
Большинство современных Android железок используют архитектуру arm и теоретически должны поддерживать Entware.arm, если используемый процессор cortex-a9 или старше (совместимый). В этой заметке я это продемонстрирую.
Подопытным кроликом у меня выступает TV стик Tronsmart CX-919 с рутованной прошивкой Finless ROM 1.6b (android 4.2.2). Все манипуляции я осуществлял по ssh, для чего на стик был установлены пакеты SSHDroid и BusyBox.
Итак приступим. Нам потребуется папка /opt в корне файловой системы с правами записи. Хорошо бы иметь и шелл по стандартному пути /bin/sh, чтобы не редактировать скрипты. Нужно и место установки с файловой системой, поддерживающей символические ссылки. Можно использовать и внутреннюю флешь память устройства, но лучше, на мой взгляд, использовать micro SD карту с одной из файловых систем ext2/ext3/ext4. Я использовал SD карту с файловой системой ext2. Как подготовить такую карту я рассказывать не буду, об этом достаточно статей в интернете.
Последовательность операций по установке такая:
Даем права на запись в корневую файловую систему
/system/bin/mount -o rw,remount /
Создаем папки /opt и /bin
mkdir /opt
mkdir /bin
Создаем символическую ссылку /bin/sh
ln -s /system/bin/sh /bin/sh
Больше нам запись в корневую файловую систему не понадобиться. Закрываем запись
/system/bin/mount -o ro,remount /
Теперь создадим папку на SD карте, в которую будет устанавливаться система и сделаем bind на /opt
mkdir /mnt/external_sd/entware.arm
mount -o bind /mnt/external_sd/entware.arm /opt
Для самой установки все готово. Приступим.
Скачиваем скрипт установки, запускаем
wget http://qnapware.zyxmon.org/binaries-armv7/installer/entware_install_arm.sh
chmod +x ./entware_install_arm.sh
./entware_install_arm.sh
Надеюсь у Вас, как и у меня, установка завершиться без ошибок. Нам осталось совсем немного. Для того чтобы добавить пути к бинарникам Entware в PATH создадим локальный профиль в домашней директории SSHDroid следующего содержания
root@android:/data/data/berserker.android.apps.sshdroid/home # pwd
/data/data/berserker.android.apps.sshdroid/home
root@android:/data/data/berserker.android.apps.sshdroid/home # cat .profile
#!/system/bin/sh
. /opt/etc/profile
Теперь мы можем завершить ssh сессию и зайти заново, чтобы сработал скрипт из профиля. Можем устанавливать приложения. Например:
opkg install mc
opkg install nano
Остался последний штрих. Нужно, чтобы это все работало, после перезагрузки системы. У меня прошивка поддерживает скрипты в init.d. Я создал такой (команды sleep остались от разных отладок, наверняка многие и не нужны).
#!/system/bin/sh
sleep 3
/system/bin/mount -o rw,remount /
sleep 1
/system/bin/chmod 777 /mnt/external_sd
/system/bin/mkdir /opt
/system/bin/mkdir /bin
ln -s /system/bin/sh /bin/sh
/system/bin/mount -o ro,remount /
sleep 3
/system/bin/mount -t ext2 -o rw /dev/block/mmcblk0p1 /mnt/external_sd
/system/bin/mount -o bind /mnt/external_sd/entware.arm /opt
sleep 2
/opt/etc/init.d/rc.unslung start
В настоящий момент в репозитории Entware.arm 1767 пакетов. Список можно посмотреть тут -
http://qnapware.zyxmon.org/binaries-armv7/Packages.html
или просто так http://qnapware.zyxmon.org/binaries-armv7/
Вот так у меня выглядит mc на стике
PS Я не являюсь знатоком Android. Если где нарушил философию системы — сообщите.
а самбу из репозитория на андроиде удалось запустить? у меня со слегка подправленным конфигом из .template nmbd стартует, а smbd — ни в какую. или может можно собрать версию с поддержкой логов, чтобы хоть что-то было видно?
Я не пробовал запускать самбу ни в Entware-arm, ни в Qnapware. Я бы установил strace (opkg install strace) и посмотрел бы, что происходит с запуском smbd из под strace.
Какие опции нужно включить при сборке? За основу берется следующий Makefile — https://dev.openwrt.org/browser/trunk/package/network/services/samba36/Makefile
Еще может пригодиться тема — http://wl500g.info/showthread.php?30087-Samba-3-6-EntWare-%F3%F1%F2%E0%ED%EE%E2%EA%E0-%E8-%ED%E0%F1%F2%F0%EE%E9%EA%E0&highlight=samba
в той теме, кстати, и упоминается samba_multicall с включенными debug сообщениями
Та тема как раз про Samba из Entware. Разница в архитектуре (там про mips) и в железе, на котором запускают (там роутеры асус на бродкоме). Собираются пакеты с одинаковыми опциями? что и видно из:
/tmp/home/root# opkg files samba36-server
Package samba36-server (3.6.25-3) is installed on root and has the following files:
/opt/sbin/smbd
/opt/etc/samba/lowcase.dat
/opt/etc/init.d/S08samba
/opt/etc/samba/valid.dat
/opt/sbin/nmbd
/opt/etc/samba/upcase.dat
/opt/sbin/samba_multicall
/opt/sbin/smbpasswd
/opt/etc/samba/smb.conf.template
а можно собрать пакет с немного измененным Makefile? собственно, нужен только samba_multicall, собранный с такими опциями.
вот кусок с изменениями:
define Package/samba36-server/config
config PACKAGE_SAMBA_MAX_DEBUG_LEVEL
int «Maximum level of compiled-in debug messages»
depends on PACKAGE_samba36-server || PACKAGE_samba36-client
- default -1
+ default 3
endef
как раз можно будет посмотреть, чего ему не хватает
Проверяйте — http://qnapware.zyxmon.org/binaries-armv7/test/samba36-server_3.6.25-3a_armv7soft.ipk
В любом случае отпишите, включились ли логи. Возможно при следующих синхронизациях включу логи по умолчанию.
PS Я попробовал запустить самбу на android — smbd запускается и судя по strace выходит с exit code 0 — без ошибки. Скорее всего конфиг ему не нравится.
Сам проверил. Логи включились. Ошибка такая
ERROR: failed to setup system user info: NT code 0xc0000064.
Скорее всего связана с отсутствием пользователей в /etc/passwd
Для dropbear я знаю (уже делал патч) как заменить /etc/passwd на /opt/etc/passwd
Это можно сделать, если нужно, для android. Для samba нужно копать, как обойти ошибку.
Сейчас в голову пришла (дурная ???) идея, которая требует некоторое время на проверку. Если она правильная, то ….. не хочу забегать вперед…. Можно будет и дальше разделить Qnap/Ent-ware и ось роутера/НАСа/андроида. Пусть приложения *ware используют свои файлы (/Apps)/opt/etc/passwd и другие.
я вообще-то думал, что *ware как раз и используют /opt/etc вместо /etc
у меня samba вываливалась с этой ошибкой
SamInfo3_for_guest: Unable to locate guest account [nobody]!
ERROR: failed to setup guest info.
строки в smb.conf, определяющие guest account как nobody
guest account = nobody
guest ok = yes
после adduser -D nobody все заработало. спасибо за скомпиленную с debug сообщениями версию. думаю, что 3 уровень избыточен, с первым эта ошибка тоже видна
>>я вообще-то думал, что *ware как раз и используют /opt/etc вместо /etc
Так и есть, за исключением системных файлов, например, /etc/passwd и еще некоторых.
У меня в android нет многих необходимых для работы файлов и директорий, которые есть в linux. Тем не менее удалось завести и самбу и dropbear. Пришлось пропатчить системную либу entware, busybox (entware), samba.
Обсуждение этого у меня на форуме — http://forum.zyxmon.org/topic831-izmeneniya-v-entware-ideya-obsuzhdaem.html
Надеюсь скоро выложу все в виде пакетов для общего тестирования.
Написал заметку об установке dropbear и samba на android и другие «нестандартные» железки:
http://www.zyxmon.org/2015/05/10/ustanavlivaem-entware-arm-na-nestandartnye-zhelezki/
Во время установки возникла проблема — opkg не запускается (No such file or directory)
mw7 Какой процессор на Вашем устройстве? Приведите лог установки.