在 22.04 中构建包时 systemctl 不可用?

在 22.04 中构建包时 systemctl 不可用?

我的构建服务器运行良好,但对于尝试在其postinst脚本中使用某些命令的项目,它会失败。

我当前遇到的问题是systemctl

我有一个名为的项目iplock这是另一个项目 () 的依赖项snapwebsites,它包含一个名为 的服务ipload。所以我必须启动该单独的服务手动为此,我运行以下命令iplock.postinst

systemctl enable ipload
if ! systemctl start ipload
then
    echo "ERROR: the ipload command failed to load the firewall on installation."
fi

产生的错误:

/var/lib/dpkg/info/iplock.postinst: 110: systemctl:未找到
dpkg: 处理软件包 iplock 时出错(--configure):
  已安装 iplock 包安装后脚本子进程返回错误退出状态 127

看起来构建系统没有安装,systemctl因此尝试构建时命令失败snapwebsites

我应该做些什么?

我检查了debhelper脚本。也许我们应该使用deb-systemd-helperperl 脚本?我不喜欢必须测试我是在实际安装还是在构建系统内安装。可能是我缺少依赖项?尽管似乎deb-systemd-helper对其他服务执行了正确的操作(那些与项目同名的服务按预期安装在构建系统 chrooted 环境中,您可以运行它debuild)。

答案1

我发现有一个覆盖可以用于此目的:

override_dh_installsystemd:
    dh_installsystemd
    dh_installsystemd --name=ipload

请注意,您需要兼容级别 12 或更高才能使此覆盖生效(即,值debian/compat必须至少为 12)。

使用这种技术,如果存在 systemd,服务就会被安装、启用和启动,所有这些都是在后台进行的。如果不存在 systemd(如在构建系统中),则什么也不会发生。

注1:第一个dh_installsystemd安装的,ipwall将其作为默认的 systemd 服务处理。

笔记2:第二种方法dh_installsystemd要求将 .service 文件命名为iplock.ipload.service。partiplock是要添加该服务的包。此技术还可用于在一个包中添加多个服务。

欲了解更多信息,我建议阅读dh_installsystemd手册页并对该命令进行进一步搜索。

相关内容