我使用debootstrap
和systemd-nspawn
来启动 Debian Unstable 的容器。主机系统是 Debian Jessie。
systemctl
显示容器有一个失败的服务,cgproxy
。 (cgmanager
尽管运行了守护进程,但在主机上安装没有帮助cgmanager
)。
如果我询问如何从容器中apt-get
删除,它会说删除并安装.但建议是首选的选择。cgmanager
systemd-shim
systemd-sysv
aptitude
systemd-shim
$ aptitude why cgmanager
i systemd Recommends libpam-systemd
i A libpam-systemd Depends systemd-shim (>= 10-3~) | systemd-sysv
i A systemd-shim Depends cgmanager (>= 0.32)
- 具体取决于什么
libpam-systemd
,可以由 或 之一systemd-shim
提供systemd-sysv
?的描述systemd-sysv
只说它有“systemd 替换 sysvinit 所需的手册页和链接”。 - 为什么包裹更
libpam-systemd
喜欢?systemd-shim
systemd-sysv
- 如果我切换它,这样我就没有间接安装
systemd-shim
,因此cgmanager
,我是否会失去任何预期的功能?
答案1
libpam-systemd 具体依赖什么,可以由 systemd-shim 或 systemd-sysv 之一提供? systemd-sysv 的描述只说它有“systemd 替换 sysvinit 所需的手册页和链接”。
我认为这是systemd-
部分:-P。
libpam-systemd
设计用于在使用systemd
.或者,如果它使用不同的 init 系统启动,它将与 systemd 一起使用 -垫片。
你有点被这个名字误导了systemd-sysv
。它不仅仅为用户程序提供向后兼容性。它还通过创建从到 的systemd
符号链接将其设置为内核加载的默认 init 系统。/sbin/init
/lib/systemd/systemd
包依赖项假设当且仅当 systemd 是默认 init 系统时libpam-systemd
操作系统才会启动。systemd
结论:当你想在 Debian 中安装 systemd 时,通常需要安装 systemd-sysv 软件包。
您感到困惑的真正原因是您使用 启动了容器systemd-nspawn
。我认为systemd-nspawn
在通常的地方搜索init系统,然后回落到/lib/systemd/systemd
。
如果您尝试使用 Linux 内核(例如在虚拟机中)启动此安装,您会注意到您没有设置默认初始化系统
if (!try_to_run_init_process("/sbin/init") ||
!try_to_run_init_process("/etc/init") ||
!try_to_run_init_process("/bin/init") ||
!try_to_run_init_process("/bin/sh"))
return 0;
panic("No working init found. Try passing init= option to kernel. "
"See Linux Documentation/admin-guide/init.rst for guidance.");
https://github.com/torvalds/linux/blob/v4.11/init/main.c#L990
为什么 libpam-systemd 软件包更喜欢 systemd-shim 而不是 systemd-sysv?
大概有些软件包依赖于 libpam-systemd。当它作为依赖项引入时,如果尚未将其标记为这样,则假定您不希望安装 systemd-sysv。这样做会改变你的初始化系统!相反,最好安装兼容性垫片。
如果我切换它,这样我就没有间接安装 systemd-shim 和 cgmanager,我是否会失去任何预期的功能?
没有。