我在我的 Android 设备(使用 armhf 架构)上以 chroot 方式安装了 xenial(Ubuntu 16.04)。一切运行正常。所有本地命令以及 wget 和 curl 均运行正常。但是,apt-get 失败。问题如下:
sudo apt-get update
出现错误:暂时无法解析ports.ubuntu.com
(其他程序,例如 wget 和 curl 可以成功访问 dns 名称)。我 ping 了服务器并获取了 IP,因此我编辑了/etc/apt/sources.list
以反映此情况sudo apt-get update
给了我另一个错误:无法创建套接字91.189.88.150 (f=2 t=1 p=6) - socket (13: Permission denied)
好的,然后我 suid 所有 apt-* 程序:
sudo chmod u+s /usr/bin/apt-*
为了消除有关特定 apt-get 版本的任何疑问,我已通过 apt-get 本身删除了 apt,并通过 dpkg 成功安装了 apt.deb,但是问题仍然存在。
令人惊讶的是,Ubuntu 上的这个基本功能似乎被破坏了,这可能是 armhf 软件包所特有的。我似乎找不到 SO 上报告的相同问题。不过,我确实在 reddit 上找到了另一个用户报告了类似的问题,/r/debian
但还没有得出结论。
有什么建议么?
答案1
我评论了https://www.reddit.com/r/debian/comments/503ja3/issues_with_debian_on_android_phone/d8j290s/我已经解决了这个问题,这里有更多详细信息(正如你在 reddit 上 ping 我一样):
据我所知,由于 Android sepolicy,在 debian chroot 中将 setsid 设置为 root 不起作用。也许 Android sepolicy 中有一条规则,例如“要使用网络,您必须具有 inet 的 gid(如您所见,为 3003 adb shell id
)”。也许它还说,“拥有 setsid root 是没用的”。
因此,为了使其工作,您必须在 debian chroot: 中添加一个 gid 为 3003 的组(可能名为 android_inet)sudo addgroup --gid 3003 android_inet
,然后将 _apt 的主组 id 更改为 android_inet sudo usermod -g android_inet _apt
:。
将 android_inet 添加为 _apt 的补充组不起作用,因为这不是 Android Sepolicy 想要的。
答案2
编辑 /etc/passwd 查找“_apt”,将组的值从 65534 更改为 3003 在此处输入图片描述