Я установил xenial (Ubuntu 16.04) в chroot на моем устройстве Android (используя архитектуру armhf). Все работает просто отлично. Все локальные команды и wget и curl работают нормально. Однако apt-get терпит неудачу. Вот проблема:
sudo apt-get update
выдает мне сообщение об ошибке: Устранение временного сбоя ports.ubuntu.com
(другие программы, такие как wget и curl, могут успешно обращаться к именам DNS). Я пропинговал серверы и получил IP, поэтому я редактирую /etc/apt/sources.list
, чтобы отразить это
sudo apt-get update
, дает мне еще одну ошибку: не удалось создать сокет для 91.189.88.150 (f=2 t=1 p=6) - socket (13: Permission denied)
Хорошо, тогда я выбрал все программы apt- *: sudo chmod u+s /usr/bin/apt-*
Чтобы удалить любые вопросы о конкретной версии apt-get, которую я имею удалил apt через apt-get сам и успешно установил apt.deb через dpkg, однако проблема сохраняется.
Очень удивительно, что эта базовая функция в Ubuntu, похоже, не работает, она может быть специфичной для пакетов armhf. Я не могу найти ту же проблему, о которой сообщалось на SO. Тем не менее, я нашел другого пользователя, сообщающего о чем-то похожем на Reddit /r/debian
, но это не было сделано.
Есть предложения?
Я прокомментировал https://www.reddit.com/r/debian/comments/503ja3/issues_with_debian_on_android_phone/d8j290s/ , что я решил эту проблему, и вот вам более подробная информация (как вы pinged мне на reddit):
AFAIK, setid для root в debian chroot не будет работать, из-за Android sepolicy. Возможно, в Android-политике есть правило, например, «чтобы использовать сеть, у вас должен быть gid of inet (а это 3003, как вы можете видеть из adb shell id
)». Может быть, в нем также говорится: «корень сетта бесполезен».
Итак, чтобы это работало, вы должны добавить группу (возможно, с именем android_inet) с gid 3003 в chroot debian: sudo addgroup --gid 3003 android_inet
, а затем изменить идентификатор основной группы _apt на android_inet: sudo usermod -g android_inet _apt
.
Добавление android_inet в качестве дополнительной группы для _apt не будет работать, потому что это не то, что хочет Android Sepolicy.