dpkg:如何使用触发器?

TLi*_*dig 15 debian triggers dpkg debhelper

我写了一个小的cdn服务器,如果在池中安装了新的东西(pool-content-packages),它将重建他的池注册表.

相反,每个pool-content-package都调用cdn-server的init.d,我想使用触发器.安装所有软件包后,在安装运行结束时只重启服务器一次.

我有什么办法在debhelper支持的包中使用触发器?

TLi*_*dig 26

您正在寻找的是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
Run Code Online (Sandbox Code Playgroud)

替换<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

  • 在大多数情况下,你真的想要感兴趣的是,不要让激活触发器的软件包被标记为需要等待处理触发器的软件包以便能够返回到配置状态. (4认同)
  • `anonscm`链接不再起作用。目前,该回购似乎已保存在https://alioth-archive.debian.org/git/users/seanius/中,考古副本似乎已保存在http://eric.van-der-vlist中。 com / blog / owark / 473 / (2认同)