Альтернативы Entware на Андроид
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
Тема предназначена для обсуждения альтернативных способов доставки нужных бинарей и библиотек на Андроид-устройство, особенно таких, которых в пакетах Entware нет.
Из простых решений нужно упомянуть Termux с ограничением на версию Андроида (только 5.0 и новее), но его обсуждение здесь хотелось бы избежать (для этого есть тема на одном популярном ресурсе).
Другим простым решением является полноценный Linux-дистрибутив в chroot (например, Linux Deploy). См. также тему на этом форуме. Но chroot есть chroot, он не всегда удобен: требуется монтировать интерфейсы ядра /dev, /proc, /sys и пользовательские данные в контейнер. Следующее сообщение (перенесенное из другой темы) как раз посвящено одному из способов "вывернуть" такой chroot наизнанку, сохранив суть. Другим способом такого "выверта" на мой взгляд можно назвать и Entware.
Обсуждение самостоятельной сборки бинарников приветствуются. Но у меня есть сомнения, что здесь стоит обсуждать сборку бинарников с помощью Android NDK. Лично я просто это никогда не делал, но если у кого-то есть дельные инструкции, как собирать с помощью него продвинутые пакеты программ, типа полноценной samba4, не мучаясь с созданием bionic-патчей на каждом этапе сборки всех нужных библиотек, то милости просим. Имеется также неприятная особенность Android NDK - собранный бинарник для одной версии Андроида может перестать работать на следующей версии, Google так любит делать.
Из простых решений нужно упомянуть Termux с ограничением на версию Андроида (только 5.0 и новее), но его обсуждение здесь хотелось бы избежать (для этого есть тема на одном популярном ресурсе).
Другим простым решением является полноценный Linux-дистрибутив в chroot (например, Linux Deploy). См. также тему на этом форуме. Но chroot есть chroot, он не всегда удобен: требуется монтировать интерфейсы ядра /dev, /proc, /sys и пользовательские данные в контейнер. Следующее сообщение (перенесенное из другой темы) как раз посвящено одному из способов "вывернуть" такой chroot наизнанку, сохранив суть. Другим способом такого "выверта" на мой взгляд можно назвать и Entware.
Обсуждение самостоятельной сборки бинарников приветствуются. Но у меня есть сомнения, что здесь стоит обсуждать сборку бинарников с помощью Android NDK. Лично я просто это никогда не делал, но если у кого-то есть дельные инструкции, как собирать с помощью него продвинутые пакеты программ, типа полноценной samba4, не мучаясь с созданием bionic-патчей на каждом этапе сборки всех нужных библиотек, то милости просим. Имеется также неприятная особенность Android NDK - собранный бинарник для одной версии Андроида может перестать работать на следующей версии, Google так любит делать.
-
- Сообщения: 2
- Зарегистрирован: 15 янв 2018, 01:09
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
Перенесенное сообщение от 17.01.2018
Visitor7, добро пожаловать на этот форум!
Наверное, более подходящее место для ваших скриптов - ветка Устанавливаем Debian (chroot среду) по выбору и используем совместно с Entware. И, опять-таки по личным ощущениям, разворачивать deb-пакеты лучше стандартным образом через apt-get в chroot. А пользоваться без chroot, вызывая дебианный линкер с нужными опциями, как в ваших скриптах.
Так что если возражений с вашей стороны не последует - перемещу ваше сообщение в указанную ветку.
08.02.2018 P.S. Теперь сообщение в нужной теме.
Visitor7, добро пожаловать на этот форум!
Наверное, более подходящее место для ваших скриптов - ветка Устанавливаем Debian (chroot среду) по выбору и используем совместно с Entware. И, опять-таки по личным ощущениям, разворачивать deb-пакеты лучше стандартным образом через apt-get в chroot. А пользоваться без chroot, вызывая дебианный линкер с нужными опциями, как в ваших скриптах.
Так что если возражений с вашей стороны не последует - перемещу ваше сообщение в указанную ветку.
08.02.2018 P.S. Теперь сообщение в нужной теме.
-
- Сообщения: 2
- Зарегистрирован: 15 янв 2018, 01:09
Перенесенное сообщение от 17.01.2018
kaztost, Спасибо, я не против той темы, но для работы на роутерах скорее всего понадобится правка. apt-get хорош, но его установить еще надо с толпой зависимостей, а тут маленький, легко изменяемый скрипт. Я пользуюсь в режиме patch, тогда скрипт для запуска не нужен, но в chroot бинарники после patchelf уже не запустятся.
kaztost, Спасибо, я не против той темы, но для работы на роутерах скорее всего понадобится правка. apt-get хорош, но его установить еще надо с толпой зависимостей, а тут маленький, легко изменяемый скрипт. Я пользуюсь в режиме patch, тогда скрипт для запуска не нужен, но в chroot бинарники после patchelf уже не запустятся.
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
-
- Администратор
- Сообщения: 1912
- Зарегистрирован: 09 авг 2015, 15:33
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
Zyxmon писал(а):Источник цитаты Еще есть способ прикручивания Optware (RIP) на Android. Где видел - не помню.
По аналогии может быть можно и Optware-ng прикрутить.
Да, там есть некоторые пакеты, которых в Entware нет. Я когда-то прикручивал, причем через стандартный инсталлятор. Там больше папок в корне надо создать, типа /tmp и возможно еще что-то. Причем установка обязана быть в бизибоксной PATH-среде.
Я думал, что проект Optware-ng тоже RIP, но сегодня вдруг
dropbear: 2015.68 -> 2017.75
Круто да?! Причем там альтернативный dropbear есть (тоже 2017.75), специально пропатченный для андроида, типа пароли там можно в опциях запуска сервера передать (лучше бы дали возможность передать passwd-файл).
-
- Сообщения: 2
- Зарегистрирован: 18 июл 2017, 14:42
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
Visitor7 писал(а):Источник цитаты Я пользуюсь в режиме patch, тогда скрипт для запуска не нужен, но в chroot бинарники после patchelf уже не запустятся.
Вообще, использовать patchelf - очень здоровая идея. Статично собрал для armv7, кому надо - поделюсь. Эй, любители жаловаться на error: only position independent executables (PIE) are supported. Вот же решение! Затащить линкер и системные библиотеки из какого-нибудь Андроид 4.2.2 себе в папку, пропатчить свой бинарь на нестандартный линкер и запускать его с нужным LD_LIBRARY_PATH. Но конечно, бинари, работающие с Android API, могут не пойти, а обычные линуксовые - вполне.
Хорошо, когда есть возможность запускать сам бинарь, а не скрипт-обертку, вызывающий линкер. Но для этого (кроме самого патчения бинарника) надо играть с LD_LIBRARY_PATH. А эту переменную может активно использовать bionic-linker (как в Андроид 4.2.2). Во избежание подобных конфликтов я пересобрал линуксовый линкер с другой переменной, вместо LD_LIBRARY_PATH. Не знаю, как в glibc, но в musl там всего одну строчку поменять (да и процесс нативной компиляции musl на андроиде оказался быстрее, чем кросс-компиляция glibc на компьютере).
Но все равно остается проблема различных конфигов, лежащих в /etc, /usr и проч. Сейчас мучаю musl следующим: добавил новую функцию char * insprefix (static char *) в stdlib.h, которая выхватывает из окружения нужный префикс и добавляет его к аргументу. А в остальном коде меняю, например, "/etc/passwd" на insprefix("/etc/passwd"), добавляя также зависимость #include <stdlib.h>. Патчи для Entware могут служить неплохим ориентиром, что и как надо патчить в разных пакетах. Если все это продолжать, получится динамический вариант Entware - в разных окружениях может быть своя система, но хватит ли у меня терпения все это делать, хотя бы под свои нужды???
-
- Сообщения: 223
- Зарегистрирован: 17 июл 2017, 00:29
Еще один вариант получения бинарников на андроид-устройстве - использование репозиториев Alpine Linux. Тамошний менеджер пакетов apk (существует и в статически собранном виде) имеет опцию --root, позволяющую устанавливать пакеты в нужную директорию, удовлетворяя все зависимости. Для этого я пересобрал динамически свою статическую коллекцию бинарников, добавив бинарники strace, ar, nm, strip, file, patchelf и apk. Архив лежит здесь, установка:
Рабочее окружение:
Работа с dropbear, ssh и mc такая же как и раньше (с заменой /data/local/static на /data/alp).
Но теперь можно тянуть бинарники из репозитариев Alpine Linux. Приведу пример для бинарника wpa_supplicant (почему-то его нет в энтвари).
1. Установка базовой Alpine системы и добавление библиотечных путей:
В папку /data/alp/root/temp уже можно чрутится, но мы этого делать не будем. Вместо этого мы указывали линкеру новые пути для поиска библиотек. Наш линкер пропатчен следующим образом: сначала он ищет по путям ALP_LIBRARY_PATH, потом по путям из /data/alp/etc/ld-musl-armhf.path, и если не найдет - использует вшитые пути /data/alp/lib:/data/alp/usr/local/lib:/data/alp/usr/lib.
2. Добавляем основные репозитории и устанавливаем wpa_supplicant со всеми зависимостями:
Для каких-то бинариков можно еще добавить репозитарий http://dl-cdn.alpinelinux.org/alpine/edge/testing.
3. Меняем линкер в бинарнике wpa_supplicant:
После данной операции бинарь /data/alp/root/temp/sbin/wpa_supplicant становится рабочим.
В общем случае новым бинарникам может потребоваться конфиги и временные файлы в /etc, /tmp или /var. Бинарники, которые уже есть в архиве пропатчены на работу внутри /data/alp.
Код: Выделить всё
cd /data
tar -xzvf /sdcard/alp.tar.gz
Рабочее окружение:
Код: Выделить всё
export PATH=/data/alp/bin:/data/alp/sbin:/data/alp/usr/bin:/data/alp/usr/sbin:$PATH
Работа с dropbear, ssh и mc такая же как и раньше (с заменой /data/local/static на /data/alp).
Но теперь можно тянуть бинарники из репозитариев Alpine Linux. Приведу пример для бинарника wpa_supplicant (почему-то его нет в энтвари).
1. Установка базовой Alpine системы и добавление библиотечных путей:
Код: Выделить всё
apk -X http://dl-cdn.alpinelinux.org/alpine/latest-stable/main -U --allow-untrusted --root /data/alp/root/temp --initdb add alpine-base
echo "/data/alp/root/temp/lib:/data/alp/root/temp/usr/lib" >> /data/alp/etc/ld-musl-armhf.path
В папку /data/alp/root/temp уже можно чрутится, но мы этого делать не будем. Вместо этого мы указывали линкеру новые пути для поиска библиотек. Наш линкер пропатчен следующим образом: сначала он ищет по путям ALP_LIBRARY_PATH, потом по путям из /data/alp/etc/ld-musl-armhf.path, и если не найдет - использует вшитые пути /data/alp/lib:/data/alp/usr/local/lib:/data/alp/usr/lib.
2. Добавляем основные репозитории и устанавливаем wpa_supplicant со всеми зависимостями:
Код: Выделить всё
echo "http://dl-cdn.alpinelinux.org/alpine/latest-stable/main" > /data/alp/root/temp/etc/apk/repositories
echo "http://dl-cdn.alpinelinux.org/alpine/latest-stable/community" >> /data/alp/root/temp/etc/apk/repositories
apk --root /data/alp/root/temp update
apk --root /data/alp/root/temp add wpa_supplicant
Для каких-то бинариков можно еще добавить репозитарий http://dl-cdn.alpinelinux.org/alpine/edge/testing.
3. Меняем линкер в бинарнике wpa_supplicant:
Код: Выделить всё
patchelf --set-interpreter /data/alp/lib/ld-musl-armhf.so.1 /data/alp/root/temp/sbin/wpa_supplicant
После данной операции бинарь /data/alp/root/temp/sbin/wpa_supplicant становится рабочим.
В общем случае новым бинарникам может потребоваться конфиги и временные файлы в /etc, /tmp или /var. Бинарники, которые уже есть в архиве пропатчены на работу внутри /data/alp.
Вернуться в «Entware на Android»
Кто сейчас на конференции
Всего 2 посетителя :: 0 зарегистрированных, 0 скрытых и 2 гостя (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя