问题解决:在 Android 上的 Ubuntu chroot 环境中运行 apt-get update 失败
我在 Android 设备(采用 armhf/x64 架构)的 chroot 环境中安装了 Ubuntu 。一切运行正常。所有本地命令以及 wget 和 curl 都能正常工作。然而,apt-get 却失败了。
我在 Android 设备(采用 armhf/x64 架构)的 chroot 环境中安装了 Ubuntu 。一切运行正常。所有本地命令以及 wget 和 curl 都能正常工作。然而,apt-get 却失败了。问题如下:
- 执行
sudo apt-get update时出现错误:解析ports.ubuntu.com暂时失败(其他程序如 wget 和 curl 能成功访问该域名)。我已通过 ping 命令获取了服务器 IP,并据此修改了/etc/apt/sources.list文件 - 执行
sudo apt-get update又出现另一个错误:无法为91.189.88.150 (f=2 t=1 p=6) 创建套接字 - 套接字 (13: 权限被拒绝) - 好吧,于是我将所有 apt-* 程序设为 suid 权限:
sudo chmod u+s /usr/bin/apt-*
为排除特定 apt-get 版本的影响,我已通过 apt-get 自身卸载了 apt,并成功使用 dpkg 安装了 apt.deb 包,但问题依然存在。
Ubuntu上这个基本功能似乎失效了,这非常令人惊讶,可能是armhf架构包特有的问题。我在Stack Overflow上似乎找不到关于此问题的报告。不过,我在Reddit的 /r/debian 版块确实发现另一位用户报告了类似情况,但该问题尚未得到解决。
有什么建议吗?
据我所知,在 Debian chroot 环境中使用 setsid 切换到 root 用户是行不通的,这是因为 Android 的安全策略(sepolicy)。也许 Android 的安全策略中有一条规则,例如:“要使用网络,必须拥有 inet 的组 ID(即 3003,如 adb shell id 所示)”。也许它还规定:“拥有 setsid root 权限是无效的”。
因此,要使之生效,你必须在 Debian chroot 环境中添加一个 GID 为 3003 的组(可能命名为 aid_inet):sudo addgroup --gid 3003 aid_inet,然后将 _apt 的主组 ID 更改为 aid_inet:sudo usermod -g aid_inet _apt。
将 android_inet 作为 _apt 的辅助组添加是行不通的,因为这不符合 Android 安全策略的要求。
addgroup --gid 3003 --system aid_inet
你也许感兴趣的:
- chroot 技术–Linux 系统的瑞士军刀
- 用Rust重写的 coreutils 漏洞导致Ubuntu 25.10自动更新功能失效
- 日期漏洞影响 Ubuntu 25.10 自动更新
- 氧化 Ubuntu:默认采用 Rust 实用工具
- 【外评】Ubuntu 桌面 24.04 LTS:Noble Numbat 深度挖掘
- 【外评】Ubuntu 24.04 中 .NET 的新功能
- 【外评】Ubuntu 24.04 LTS Noble Numbat 正式发布
- 披着Windows 11外衣的Ubuntu:能跑exe程序、支持Android应用
- 官方的 Ubuntu 精简 ISO 真的“精简”吗?
- Ubuntu 23.04性能大幅下滑

你对本文的反应是: