找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 624|回复: 7

[教程] 在安卓设备上获得一个linux发行版容器:(共四类)

[复制链接]
发表于 2026-7-5 13:23:05 | 显示全部楼层 |阅读模式
本帖最后由 winpefk 于 2026-7-6 21:42 编辑

注: 以下内容人工智能生成, 感谢阅读!


如标题, 据我所知: 短视频平台和头条类网站上的 分享者, 会教你用 proot 这个 基于ptrace的 rootless container daemon, 这无可厚非, 毕竟大多数android机器并不开放root.


然而, proot 的缺陷是十分明显的: 在 cortex a73 - cortex a53 的SoC上, 计算性能的确不是问题, 但io性能几乎是崩: 由于网络通讯的rootless协议栈完全由slirp库完成, nat 操作完全是 cpu 进行, 在收发大量小文件(apt install)的时候, 下载速度仅2~3MB/s, [而下载大文件(llvm-19.deb)时, 可以到达10MB/s, 这证明不是emmc瓶颈]


同样的, 小文件io也是很差的. 因此不应该指望拿它编译软件
拿删除(rm)一个linux源码树文件夹举例:
瞬时, proot的单核处理器占用比率到达100%
等待50s后删除完毕
而chroot容器中却只需15s.


那么,有什么解决方案呢, 以下内容针对解锁bootloader的设备


1: (要求最低) chroot 容器
首先, 你需要一个有效的root环境 (supersu, magisk, kernelsu, apatch), 只需能执行 su, 并且能提权到一个正常的rootshell.


其次, 你需要termux, 可以从fdroid的国内镜像源下载.


鉴于目前许多容器管理器(tmoe-linux)都停止更新, 我这里提供一个rootfs构建脚本和登陆脚本(都需termux下运行, 在此之前请 apt update && apt upgrade && apt install debootstrap fakeroot proot -y )


根文件系统构建和后续修补:

  1. # Android chroot container builder
  2. # The script is designed for arm64 arch, you may change it for yourself
  3. # Use proot for the network access in early stage

  4. id=$(whoami)
  5. rootfs=$1
  6. unset LD_PRELOAD
  7. if [ $id != root ];then
  8. echo No Permission to get proceed.
  9. exit
  10. fi

  11. path_set="/usr/bin/busybox env PATH=/usr/bin:/usr/sbin:/bin:/sbin"

  12. in_container="proot -r $rootfs --sysvipc -w /tmp -b /dev -b /proc -b /sys"

  13. debootstrap --include=fakeroot,busybox-static,strace --download-only --arch arm64 --variant=minbase stable $rootfs https://mirrors.tuna.tsinghua.edu.cn/debian
  14. debootstrap --include=fakeroot,busybox-static,strace --arch arm64 --variant=minbase stable $rootfs https://mirrors.tuna.tsinghua.edu.cn/debian

  15. echo Base rootfs has been built, performing minor fixing.

  16. $in_container -0 $path_set /usr/bin/apt reinstall passwd -y # debootstrap installed a stub addgroup program which brokes the groupadd commmand
  17. $in_container -0 $path_set /usr/bin/apt reinstall perl-base -y #de.. use l2s(link2symlink) in proot. broke the hard link.
  18. $in_container -0 $path_set /usr/bin/apt reinstall coreutils -y

  19. # here are proofs:
  20. # in debootstrap(termux version)
  21. # .../usr/share/debootstrap/scripts/debian-common
  22. #         Replace problematic binaries with a stub
  23. #         echo "" > "$TARGET/bin/chown"
  24. #         echo "" > "$TARGET/usr/sbin/groupadd"
  25. # ...

  26. $in_container -0 $path_set /usr/bin/apt clean
  27. $in_container -0 $path_set /usr/sbin/groupadd -g 3003 aid_inet
  28. $in_container -0 $path_set /usr/sbin/usermod -g aid_inet _apt
  29. $in_container -0 $path_set /usr/sbin/usermod -G aid_inet root
  30. #
  31. $in_container -0 $path_set /usr/bin/chmod 644 /etc/resolv.conf
  32. # newly found bug: chroot mode failed to set correct file permission flag
  33. # so containers running in chroot using sandbox cannot connect to the internet.

  34. # fix /tmp access
  35. $in_container -0 $path_set /usr/bin/chmod -R 777 /tmp/
  36. #
  37. # fix apt access
  38. $in_container -0 $path_set /usr/bin/chown _apt:aid_inet -R /etc/apt/
  39. #

  40. echo "All done!"
  41. echo "for proot container, don't use the script, use proot-distro instead."
  42. echo "If you want to build a rootfs for yourself without root access., try 'fakeroot debootstrap' instead."
复制代码


登陆容器:
  1. unset LD_PRELOAD
  2. mount -t proc proc $1/proc
  3. mount --bind /dev $1/dev
  4. mount --bind /dev/pts $1/dev/pts
  5. mount --bind /sdcard/Download $1/mnt
  6. mount -t sysfs sys $1/sys
  7. if [ ! -e /dev/shm ]; then
  8.         echo Creating SHM directory.
  9.         mkdir /dev/shm
  10.         chmod 777 /dev/shm
  11.         mount -t tmpfs tmpfs /dev/shm
  12. fi
  13. chroot $1/ usr/bin/su -l
  14. echo cleaning...
  15. umount -l $1/dev/pts
  16. umount -l $1/dev
  17. umount -l $1/mnt
  18. umount -l $1/proc
  19. umount -l $1/sys
复制代码

登陆后,可以安装dropbear或者openssh

这样的容器也有弊端:
即使io速度上去了, 但是却无法使用systemctl等工具, 无论如何环境是不完整的, 同样的, 一些软件仍然需要手工指定关闭沙盒 (chromium, vscode ...), 况且容器内外相互干扰, 如果你想要把手机改为局域网网关之类的 (比如使用squid进行透明的网页访问管理, 外加 watt toolkit 进行steam加速), 你会发现 通讯并不稳定, 常常连该机器ip都ping不通, 这是安卓的netd等系统服务在干扰, 它以为自己独占整个无线网卡. 因此chroot方案个人用起来并不顺手

这时候, 你需要修改内核:
一般地来说, 如果你不跑docker, 用我这里的丐版方案, 只需要重编译内核,开启以下选项:
CONFIG_UTS_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
如果需要 容器内 对 容器外 网络的直接访问:(就像独立的主机插了一网线连到和物理机器相同的网络上)
CONFIG_MACVLAN=y

然后你刷入改版内核, 理论上可以 unshare --pid --uts --net --user ./rootfs/sbin/init 了

关于macvlan虚拟网卡的创建和移动, 我回头再讲, 且让我看看这个话题大家是否关心.

下一类, 需要支持 avf (android virt framework), 直接在root的adb shell下执行 ..., 不过这个框架下, 虚拟网卡只能以 tun, tap 形式存在, 那么你就需要 内核支持:
CONFIG_BRIDGE
和 CONFIG_MACVLAN

把macvlan创建的虚拟网卡桥接于tap网卡 (我没试过,不知道能不能成)

发表于 2026-7-5 13:32:48 | 显示全部楼层
貌似会有用,先收藏一份再赞!
回复

使用道具 举报

发表于 2026-7-5 14:19:25 | 显示全部楼层
回复

使用道具 举报

发表于 2026-7-5 14:34:33 | 显示全部楼层
你这写的跟AI搞也没大差了
回复

使用道具 举报

发表于 2026-7-5 18:24:02 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2026-7-6 01:48:05 来自手机 | 显示全部楼层
不懂,纯支持
回复

使用道具 举报

发表于 2026-7-6 06:46:28 | 显示全部楼层
很好的资源

评分

参与人数 1无忧币 +5 收起 理由
yyz2191958 + 5

查看全部评分

回复

使用道具 举报

发表于 2026-7-6 08:32:35 | 显示全部楼层
据说安卓平板运行pc级应用 就是大部分用的linux,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-7-21 18:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表