3个不稳定版本
0.2.0 | 2021年10月4日 |
---|---|
0.1.2 | 2020年10月17日 |
0.1.1 | 2020年6月11日 |
在 Unix API 中排名 391
33KB
718 行
subsystemd: 在WSL2中运行systemd
在WSL2中运行Linux命名空间下的systemd。在很大程度上受到 arkane-systems/genie 的启发,但用Rust编写。
与arkane-systems/genie的不同之处
略微遵循 genie 的行为,但如下所述...
- 界面
- 命令行界面不兼容。
- 行为
- 使用
--hostname
,--hostname-suffix
修改主机名是可选的/etc/hosts
不更新。建议用户使用nss-myhostname
。
- 使用
machinectl shell
启动用户shell;这允许运行systemd用户会话
- 使用
- 内部
- 删除了对
unshare
,daemonize
,nsenter
命令行工具的依赖 - 通过
systemd.conf
插件设置systemd-wide环境变量,使用DefaultEnvironment=
- root命名空间中的systemd PID 存储在
/run/subsystemctl/systemd.pid
- 删除了对
安装
Arch Linux
PKGBUILD: https://github.com/sorah/arch.sorah.jp/tree/master/aur-sorah/PKGBUILDs/subsystemctl
(原PKGBUILD提交到AUR (https://aur.archlinux.org/packages/subsystemctl) 已被删除,因为它们不欢迎仅WSL的软件包)
Debian/Ubuntu
请参阅 https://github.com/nkmideb/subsystemctl 获取debian源代码。
预构建的二进制软件包在 https://github.com/nkmideb/subsystemctl/releases 中提供,方便您使用。
自建
cargo install subsystemctl
或从git源代码构建
cargo build --release
install -m6755 -oroot -groot ./target/release/subsystemctl /usr/local/bin/subsystemctl
用法
subsystemctl start
:启动 systemd
环境
PS> wsl -u root -- subsystemctl start
subsystemctl shell
:以shell登录到systemd启用环境
PS> wsl subsystemctl shell
Connected to the local host. Press ^] three times within 1s to exit session.
someone@hostname$ ...
指定登录的uid
PS> wsl -u root -- subsystemctl shell --uid=1000
Connected to the local host. Press ^] three times within 1s to exit session.
someone@hostname$ ...
自动启动并进入用户shell
PS> wsl -u root -d Arch -- subsystemctl shell --uid=1000 --start
[2021-06-27T16:32:20Z INFO subsystemctl] Starting systemd
Connected to the local host. Press ^] three times within 1s to exit session.
someone@hostname$ ...
subsystemctl exec
:类似于raw nsenter
的接口
PS> wsl subsystemctl exec id
uid=1000(sorah) gid=1000(sorah) groups=1000(sorah),116(admin)
指定uid(和gid)
PS> wsl -u root -- subsystemctl exec id
uid=0(root) gid=0(root) groups=0(root)
PS> wsl -u root -- subsystemctl exec --uid=1000 id
uid=1000(sorah) gid=1000(sorah) groups=1000(sorah),116(admin)
PS> wsl -u root -- subsystemctl exec --uid=1000 --gid=116 id
uid=1000(sorah) gid=116(admin) groups=116(admin)
subsystemctl是-在内部运行的
#!/bin/bash
if subsystemctl is-running; then
echo "running"
else
echo "not-running"
fi
subsystemctl是-的
#!/bin/bash
if subsystemctl is-inside; then
echo "inside"
else
echo "outside"
fi
提示
建议禁用systemd-resolved和networkd
否则/etc/resolv.conf
可能会被resolved stub-resolver覆盖。
作者
Sorah Fukumori https://sorah.jp/
许可证
MIT
依赖项
~5–14MB
~160K SLoC