我已经编写了一个小的cdn服务器,如果在池中安装了新的东西(pool-content-packages),它将重建他的池注册表。
相反,每个pool-content-package调用cdn-server的init.d,我想使用触发器。比安装所有软件包后安装运行结束时只重启服务器一次。
我有什么办法可以在debhelper支持的包中使用触发器?
答案 0 :(得分:24)
您正在寻找的是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的最佳描述是“How to use dpkg triggers”。相应的git存储库以及您可以在此处获得的示例:
git clone git://anonscm.debian.org/users/seanius/dpkg-triggers-example.git