Проблема /etc

kaztost
Сообщения: 110
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 12 окт 2017, 22:43

Одной из проблем при установке Entware на андроид-устройстве является то, что в отличие от обычных Linux-систем, в андроиде отсутствуют файлы /etc/passwd, /etc/group, /etc/shell,/etc/resolv.conf и другие. Более того, в целях обратной совместимости /etc является симлинком на /system/etc. А /system является разделом по умолчанию монтируемым только для чтения. В некоторых случаях на устройстве отсутствует вообще какая-то возможность модификации этого раздела (команда mount -o remount,rw /system не проходит, а если модифицировать /system каким-то другим способом, то система не загрузится вообще). Отчасти проблема решается установкой патченной Entware-ng или альтернативной Entware3x. Но это не решает проблему в целом, например для полноценной работы нужно создавать файл или симлинк /system/etc/resolv.conf. Иначе энтварные программы не смогут резолвить URL-адреса. Конечно, "в нормально настроенной системе данный файл не нужен: запросы будут обрабатываться сервером на локальном хосте", но в данном случае занимать чем-либо 53-й порт локалхоста чревато - если включить штатный андроидовский режим модема, то андроид попадает в вечный цикл в связи с невозможностью запустить свой dnsmasq.

Поэтому думаю, что лучшее универсальное решение названной проблемы - удаление симлинка/etc в процессе запуска и замена его на симлинк на другую директорию с симлинками, указывающими на одноименные объекты в /system/etc. Ну и туда же мы сможем добавить симлинки на /opt/etc/passwd, /opt/etc/group, /opt/etc/shell, /opt/etc/resolv.conf. Например, выполняем:

~ # mkdir /data/local/etc
~ # chmod 755 /data/local/etc
~ # chcon u:object_r:system_file:s0 /data/local/etc
~ # for i in $(ls /system/etc); do ln -s /system/etc/$i /data/local/etc/$i; done
~ # ln -s /opt/etc/resolv.conf /data/local/etc/resolv.conf
~ # ln -s /opt/etc/passwd /data/local/etc/passwd
~ # ln -s /opt/etc/group /data/local/etc/group
~ # ln -s /opt/etc/shells /data/local/etc/shells

и помещаем команды

rm /etc
ln -s /data/local/etc /etc

в автозагрузку. Тогда и Entware-ng можно ставить не патченную, и раздел /system не трогать.

kaztost
Сообщения: 110
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 25 янв 2018, 19:01

После некоторых размышлений подумал, что для андроида все эти костыли, изложенные выше, - действительно костыли. Разработчики андроида монтируют /system только на чтение, а /etc резервируют для симлинка на /system/etc. Без лишней необходимости оба этих факта лучше на андроиде не менять (на некоторых устройствах /system вообще может не перемонтироваться в rw).

В общем, собрал пока новый патченный libc для Entware-ng, где /etc глобально заменен на /opt/etc. Все равно из используемых в энтвари etc-конфигов для андроида единственным актуальным является /etc/hosts, но даже его замена в энтвари на /opt/etc/hosts по моему дает лишь некоторые удобства. Апплеты бизибокса adduser и passwd тоже по идее надо патчить, но думаю пока можно обойтись подменой этих симлинков на старый патченный busybox. Ставить пакет надо либо вручную, либо удалив предварительно /opt/var/opkg-lists/packages по причине несовпадения md5-сумм с оргиналом. О своих проблемах я изложил здесь. Даже где сабверсию поменять, не вижу.

После установки этого модифицированного libc программы ping, wget, opkg, ssh начинают резолвить имена через /opt/etc/resolv.conf. Но чисто теоретически какой-нибудь другой пакет может обращаться к /etc/resolv.conf напрямую, минуя библиотечные функции из libc.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1453
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 25 янв 2018, 21:17

kaztost писал(а):Источник цитаты В общем, собрал пока новый патченный libc для Entware-ng

А мы, например, скоро обновим glibc 2.25 на 2.26. Что произойдет c установленным таким android при `opkg update| opkg upgrade`. Такие фокусы нужно делать только со сборкой всего и вся и репой с другим URL.
Одна из идей Entware-3x - универсальность. Один дистрибутив и для android, и для keenetic (там похожая на android ситуация) и для , скажем, dd-wrt, и для NAS от qnap.

kaztost
Сообщения: 110
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 25 янв 2018, 22:05

Zyxmon писал(а):Источник цитаты скоро обновим glibc 2.25 на 2.26

Ну это же в Entware-3x. А в Entware-ng (для которого я патчил) до сих пор glibc 2.23. У меня, например, на большинстве андроид-устройств Entware-3x не пойдет. Если выйдет там новый несовместимый glibc - придется заново собирать и ставить новый патченный.
Я не против (и даже за) универсальности. Но я за глобальную замену /etc на /opt/etc в этом glibc. В конце концов симлинки /opt/etc/file на /etc/file для устройств с уже имеющимся /etc/file проще сделать (в общем случае), чем в обратную сторону. Да и мое более чем годовое тестирование патченным вами glibc не вызвало каких-либо проблем. Думаю не будет проблем и с /opt/etc/resolv.conf и прочим. То же самое и c Entware-3x. По мне тамошние патчи недопатченны. Ну как альтернативный вариант можно сделать два исключающих друг друга glibc (андроидный и неандроидный). На остальные пакеты это не должно никак отразится. На всякий пожарный можно в скрипте установки ставить для нужных конфигов симлинки /opt/etc/file на /etc/file, если /etc/file существует.

kaztost
Сообщения: 110
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 05 фев 2018, 11:55

Глобальные etc-патчи glibc:
1) для armv7 Entware-ng: ссылка
2) для armv8 Entware-3x: ссылка


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 0 посетителей :: 0 зарегистрированных, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей