Tra*_*ggs 7 linux debian systemd
我有一个自定义的 Debian 软件包,我为我们的软件构建了一个创建 systemd 服务的软件包。在安装时启用/启动服务的首选/惯用方法是什么?
我所做的是将以下三行添加到我的postinst脚本中:
systemctl --system daemon-reload
systemctl enable my_service.service
systemctl start my_service.service
Run Code Online (Sandbox Code Playgroud)
这工作得很好,直到我们尝试在我们最初运行的图像创建中包含加载这个包,debootstrap在这一点上,结果systemctl似乎需要设置很多通常不会在该过程中设置的环境内容。
我正在考虑类似的情况,我想在 debootstrap rootfs 中配置服务。它似乎只是读取单元文件部分systemctl enable中的目标并创建正确的符号链接。[Install]因此,如果您知道要在哪些目标下启动哪些服务,我认为正确的答案可能是创建正确的符号链接。例如
ln -s /etc/systemd/system/multi-user.target.wants/ssh.service \
/lib/systemd/system/ssh.service
Run Code Online (Sandbox Code Playgroud)
当安装到 debootstrap chroot 中时,您不想执行另外两个步骤(daemon-reload和),但我猜您的问题是如何在 debootstrap env 中执行符号链接,否则以正常方式执行......start
碰巧我也在使用debootstrap,并且我发现systemctl enable只要调用用户root(以避免 Failed to connect to bus警告), 调用就可以正常工作daemon-reload,并且start在 chroot 下安装期间可能没有意义,因为您不在现场环境。所以你postinst可能想要检测 chroot 并跳过这些行。或者设置一个环境变量或传递一些安装程序脚本可以读取的标志。
IM_DEBOOTSTRAPPING=yes dpkg -i mypackage.deb # tells postinst to skip systemctl start
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2207 次 |
| 最近记录: |