您可能已经知道,默认情况下,在基于Debian或Ubuntu的系统上安装软件包时,如果该软件包包含服务,则通常会在安装该软件包时启用并自动启动该服务。
这对我来说是个问题。
我发现自己需要管理用于构建LXC容器的模板。有几个容器,每个容器对应一个Debian或Ubuntu版本。(也有基于Red Hat的容器,但此处与它们无关。)
/var/lib/libvirt/filesystems/debian6_template
/var/lib/libvirt/filesystems/debian7_template
/var/lib/libvirt/filesystems/ubuntu1004_template
/var/lib/libvirt/filesystems/ubuntu1204_template
有时,我会发现模板缺少软件包或需要其他更改,因此我将chroot放入其中以安装软件包。不幸的是,当我这样做时,我得到了运行包服务的多个副本!
举例来说,我发现模板没有syslog守护程序,因此我安装了一个:
for template in /var/lib/libvirt/filesystems/{debian,ubuntu}*_template; do
chroot $template apt-get install rsyslog
done
并迅速结束运行rsyslog的四个副本。更不用说exim4的两个副本了。糟糕!
我读到某个地方(尽管现在找不到了),它不应该在chroot中运行时启动服务,但是显然这没有发生。
一个可能可行的讨厌的黑客呼吁暂时替换实际上启动服务的各种命令,例如start-stop-daemon
和initctl
,尽管这比我真正想做的工作要多得多。不过,如果我别无选择,...
对于基于Debian的系统,这里的理想解决方案是停止执行此操作,但是如果失败了,也许对于apt-get
?
如果还不清楚,我真的想保持与管理模板任何事情外,如果可能的模板。