
如何在Android上让systemd成为PID 1Droidspaces的OpenRC/runit/s6多init系统完整指南【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSSDroidspaces是一款轻量级、LXC 风格的 Linux 容器运行环境能在 Android 和 Linux 上以零性能损耗原生运行完整的 Linux 发行版核心亮点正是对systemd、OpenRC、runit、s6、SysVinit等 init 系统的完整 PID 1 支持。本文带你从原理到实操在手机上真正开机一个拥有 systemd 的 Linux 系统。为什么 PID 1 如此重要没有 init 系统的容器只是一个加强版 shell没有服务管理、没有systemctl、没有 journald 日志、没有规范的登录会话。当 init 系统成功成为 PID 1 后容器就是一个完整的迷你主机✅ 服务可用systemctl start/stop/enable管理✅ 日志可用journalctl查询✅login、su、sudo等会话功能正常工作✅ 定时器单元、socket 激活等特性全部可用Droidspaces 如何让 init 成为 PID 1systemd 要在容器内跑起来必须满足三个条件而 Droidspaces 逐一帮你搞定条件Droidspaces 的解法init 必须是 PID 1创建 PID 命名空间CLONE_NEWPID后 fork让容器 init 成为该命名空间中的第一个进程容器身份识别写入droidspaces到/run/systemd/container并设置containerdroidspaces环境变量Cgroup 写权限为每个容器分配独立的 cgroup 树供 systemd 创建 scope 和 slice相比 chroot 只改根目录、完全无法运行 init 系统Droidspaces 使用pivot_root 私有挂载传播实现了进程、挂载、主机名、IPC 的完整隔离。更多细节可查阅 Features.md 的 Init system support 一节。五大 init 系统全支持systemd 之外的选择Droidspaces 理论上兼容任何可作为 PID 1 运行的 init 系统systemd大多数主流发行版OpenRCAlpine Linux、GentoorunitVoid Linux、Devuans6-initAlpine 及各种容器镜像SysVinitDebian、Devuan唯一硬性要求init 二进制文件必须位于 rootfs 的/sbin/init。如果缺失或不可执行Droidspaces 会直接拒绝启动容器——这是为了保证你每次启动都得到一个可用的服务管理环境。快速上手两种启动方式方式一Android App 图形界面在 Containers 标签页点击安装容器可通过内置 Rootfs 仓库直接下载发行版镜像配置完成后点击播放按钮容器启动init 系统自动成为 PID 1停止按钮会向容器 init 发送干净的关机信号而非粗暴杀进程完整操作流程见 Usage-Android-App.md。方式二命令行CLI在 Linux 桌面或 Android 终端中运行# 启动容器并附加控制台直接查看 init 启动日志 droidspaces --namemybox --rootfs/path/to/rootfs --foreground--foreground-f参数会把你接上容器控制台完整看到 systemd 或 OpenRC 的开机日志。注意--rootfs指定的目录必须包含/sbin/init参数说明见 Linux-CLI.md。优雅关机Droidspaces 按 init 类型发信号停止容器时Droidspaces 会自动检测 init 类型并发送对应的关机信号检测逻辑位于 src/container.c这保证了各 init 都能走干净的关机流程init 系统关机方式systemd发送SIGRTMIN3专用停止信号OpenRC / s6 / busybox发送SIGUSR2runit发送SIGCONTSysVinit直接向容器/run/initctl写入 telinit 兼容的关机请求常见问题systemd 启动失败怎么办问题 1旧内核上新版 systemd 启动失败2025 年 9 月发布的 systemd v258 移除了对 5.4 以下内核的兼容层因此在 3.18、4.4、4.14 等旧 Android 内核上Arch、Fedora 等新版发行版可能直接崩溃。解决方案详见 Troubleshooting.md改用OpenRC、runit 或 s6作为 init 的容器本文主角或使用 systemd 低于 v258 的发行版如 Ubuntu 22.04/24.04、Debian 12问题 2Required key not available 错误旧内核 Android FBE 文件加密时可能出现。5.0 以下内核上Droidspaces 的自适应 Seccomp 防护盾会自动拦截相关系统调用让 systemd 回退到已有密钥环若仍报错建议升级到 rootfs.img 模式并确认 Droidspaces 版本为 v4.2.4 以上。总结在 Android 上运行一个 init 系统成为 PID 1 的完整 Linux过去需要 Termux proot 一堆妥协而 Droidspaces 用内核命名空间一条路走通systemd、OpenRC、runit、s6、SysVinit 全部原生支持零性能损耗。选一个你喜欢的发行版点击播放你的手机里的服务器就开机了 延伸阅读特性深潜Documentation/Features.md排错手册Documentation/Troubleshooting.mdCLI 完整参考Documentation/Linux-CLI.md【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考