Проблема /etc

kaztost
Сообщения: 38
Зарегистрирован: 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 не трогать.

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

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

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

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