dpkg:如何使用触发器?

时间:2013-03-07 16:31:48

标签: triggers debian dpkg debhelper

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

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

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

1 个答案:

答案 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