Проблемы с сетью Android Chroot

Проблемы с сетью Android Chroot

Я пытаюсь chroot-анимировать образ Ubuntu 16.04, который Nvidia использует для разработки на shield. Я поместил его на sdcard, смонтировал его в /mnt/chroots. Я не могу заставить apt-get update работать без сбоев, ping также не работает. Помощь была бы признательна.

cd rootfs
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -o bind /dev/pts dev/pts/
chroot . /bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH

Также я добавил root в группы:

groupadd -g 3001 aid_net_bt_admin
groupadd -g 3002 aid_net_bt
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_inet_raw
groupadd -g 3005 aid_inet_admin

gpasswd -a root aid_net_bt_admin
gpasswd -a root aid_net_bt
gpasswd -a root aid_inet
gpasswd -a root aid_inet_raw
gpasswd -a root aid_inet_admin

/etc/resolv.conf
nameserver 8.8.8.8

с /etc/init.d/networking начать

root@localhost:/# apt-get update
Err:1 http://ports.ubuntu.com/ubuntu-ports xenial InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:2 http://ports.ubuntu.com/ubuntu-ports xenial-updates InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:3 http://ports.ubuntu.com/ubuntu-ports xenial-security InRelease
Temporary failure resolving 'ports.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...nial/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...ates/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...rity/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

решение1

У вас здесь 2 разные проблемы

  • apt не разрешает DNS
  • пинг не работает

-


APT НЕ РАЗРЕШАЕТ DNS:

Проблема в том, что APT использует _apt как нашего непривилегированного пользователя. На Android с параноидальной сетью только пользователи в группе 3003 aid_inet или 3004 aid_inet_raw могут открывать сетевые сокеты. Когда apt устанавливается, он создает пользователя _apt.

    # add unprivileged user for the apt methods
     adduser --force-badname --system --home /nonexistent  \
       --no-create-home --quiet _apt || true

Пользователь выглядит так в /etc/passwd

    root@localhost:~
    # grep -E "_apt" /etc/passwd
    _apt:x:103:65534::/nonexistent:/bin/false

Формат пароля:

Имя пользователя:Зашифрованный пароль:Идентификационный номер пользователя (UID):Идентификационный номер группы пользователя (GID):Полное имя пользователя (GECOS):Домашний каталог пользователя:Оболочка входа

Глядя на пользователя _apt, GID установлен на 65534, что означает отсутствие группы, в обычных системах Linux это нормально. На Android этот GID никогда не сможет устанавливать сетевые соединения. Нужно изменить GID на 3003.

# usermod -g 3003 _apt изменит GID

    root@localhost:~
    # grep -E "_apt" /etc/passwd
    _apt:x:103:3003::/nonexistent:/bin/false

Теперь APT будет работать на Android chroot

ПИНГ НЕ РАБОТАЕТ


Я заметил, когда я использую chroot, используя этот пример команды

# chroot /linux /bin/bash -l

В Android группы используются для приложений, в некотором роде. Так что root, вызывающий bash, находится только в root группе, вы можете проверить это по

    # groups
     root

группы, запущенные без имени пользователя, выводят текущие группы процессов

Теперь попробуйте это

# su - root

Команда su — это смена пользователя

    # groups
    root sdcard-rw aid_bt aid_bt-net aid_inet aid_net-raw aid_net_admin

Теперь пинг будет работать

Я теперь использую

# chroot /linux /bin/su - root

который входит в систему как root из Linux, а не как root из Android

Связанный контент