21

我已经编写了一个小型 CDN 服务器,如果新的东西(pool-content-packages)安装到池中,它将重建他的池注册表。

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

我该怎么做才能在我的包中使用触发器并支持 debhelper?

4

1 回答 1

32

您正在寻找的是 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

于 2013-03-07T16:31:47.987 回答