use*_*570 52 unix chroot systemd sysvinit openrc
使用 init 脚本(或使用 openrc)我总是可以从不同的安装根运行服务。
但是当我跑步时,chroot /somepath/to_root /usr/bin/systemctl start someservice我得到了:
Running in chroot, ignoring request.
Run Code Online (Sandbox Code Playgroud)
有没有办法强制systemd运行服务?
更新:
我忘了说我的主机系统运行 init 脚本或 openrc,但从来没有使用 systemd,而且我使用 chroot 来对 Unix 系统进行故障排除,这些系统甚至无法启动最小的 shell。
Mar*_*iae 41
systemd 发行版(Arch Linux、OpenSUSE、Fedora)中的一个众所周知的问题。
Systemd 取代了 sysvinit,并提供了一个巨大的优势。在 sysvinit 中,当您要求启动服务时,它会继承调用脚本的人的执行上下文,其中包括环境变量、ulimit 等。相反,Systemd 通过通知守护进程对此进行了改进,守护进程将在明确定义的、健康的、恒定的环境中启动服务,当然,服务的性能更容易预测,因为环境总是相同的。
这意味着,当我从 chroot 内部调用 systemctl 时,与我在 chroot 内部无关,将被继承的环境仍然是 PID 1 的环境,而不是我当前的环境。但比这更糟糕的是:由于通信套接字放置在 /run/systemd 中,chroot 中的进程甚至无法与 init 系统对话!
那么你如何在 systemd 发行版中进行 chroot 操作呢?
如果您只想拥有一个 Linux 容器,这个 Arch Wiki 页面将告诉您如何在 30 秒内设置 Linux 容器,感谢systemd-nspawn.
相反,如果您真的想要一个 chroot 环境,这个漂亮而清晰的网页将为您提供两个可行的解决方案(第二个是第 1 点提供的解决方案的修改版本)。
use*_*570 12
我真的厌倦了 Systemd,因为我遇到了从未遇到过 Upstart 或 Openrc 之类的问题:
systemd-udevd哪个需要systemd-init哪个需要systemd-boot不能同时安装的包,grub2也不能从 reiser4 分区读取内核映像。networkd.Systemd 对于解决问题来说是不必要的复杂:像 alsa 而不是 ossv4。因此,如果您有使用 systemd 的东西,只需擦除所有数据:
dd if=/dev/urandom of=/dev/dm?0 bs=1M
Run Code Online (Sandbox Code Playgroud)
并安装一些根本不使用它的东西,同时使用 Openrc解决像 Gentoo 这样的 SysV Init 问题。
关于我的问题,systemd 制作了类似于 Windows® 注册表的东西:如果其中的一部分被搞砸了,那么它就结束了。
小智 7
systemd 只忽略“服务”,所以我只是手动运行守护程序命令。
所以代替
service sshd start
Run Code Online (Sandbox Code Playgroud)
我用
/usr/sbin/sshd -D &
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92198 次 |
| 最近记录: |