Android Chroot 网络问题

Android Chroot 网络问题

我正在尝试 chroot Nvidia 的 Ubuntu 16.04 映像,以便在盾牌上进行开发。我把它放在 SD 卡上,安装在 /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

您这里有两个不同的问题

  • apt不解析DNS
  • ping 不工作

-


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

密码格式是

用户名:加密密码:用户ID号(UID):用户组ID号(GID):用户全名(GECOS):用户主目录:登录shell

查看 _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 上运行

Ping 不工作


对我来说,我注意到当我使用这个命令示例 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

现在 ping 可以正常工作了

我现在用

# chroot /linux /bin/su - root

从 Linux 以 root 身份登录,而不是从 Android 以 root 身份登录

相关内容