我已经编写了一个小型 CDN 服务器,如果新的东西(pool-content-packages)安装到池中,它将重建他的池注册表。
相反,每个 pool-content-package 都调用 cdn-server 的 init.d,我想使用触发器。在安装完所有软件包后,它只会在安装运行结束时重新启动服务器一次。
我该怎么做才能在我的包中使用触发器并支持 debhelper?
您正在寻找的是 dpkg-triggers。
使用 debhelper 构建 debian 软件包的一种解决方案是:
第1步)
创建文件debian/<serverPackageName>.triggers
(替换<serverPackageName>
为您的服务器包的名称)。
步骤 1a)
定义一个监视池目录的触发器。文件的内容是:
interest /path/to/my/pool
步骤 1b)
但是您也可以定义一个命名触发器,它必须被显式触发(参见第 3 步)。
文件内容:
interest cdn-pool-changed
触发器cdn-pool-changed的名称是免费的。你可以拿走任何你想要的。
第2步)
将触发器的处理程序添加到文件debian/<serverPackageName>.postinst
(替换<serverPackageName>
为您的服务器包的名称)。
例子:
#!/bin/sh
set -e
case "$1" in
configure)
;;
triggered)
#here is the handler
/etc/init.d/<serverPackageName> restart
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
#DEBHELPER#
exit 0
替换<serverPackageName>
为您的服务器包的名称。
第 3 步)(仅适用于命名触发器,第 1b 步))
在每个内容包中添加文件debian/<contentPackageName>.triggers
(替换<contentPackageName>
为内容包的名称)。
文件内容:
activate cdn-pool-changed
为您在步骤 1 中定义的触发器使用相同的名称。
我能找到的对 dpkg-triggers 的最佳描述是“如何使用 dpkg 触发器”。相应的带有示例的 git 存储库,您可以在此处获取:
git clone git://anonscm.debian.org/users/seanius/dpkg-triggers-example.git