21

新しいもの (プール コンテンツ パッケージ) がプールにインストールされた場合にプール レジストリを再構築する小さな cdn サーバーを作成しました。

すべてのプール コンテンツ パッケージが cdn サーバーの init.d を呼び出す代わりに、トリガーを使用したいと思います。すべてのパッケージがインストールされた後、インストール実行の最後にサーバーを1回だけ再起動するよりも。

debhelper をサポートするパッケージでトリガーを使用するにはどうすればよいですか?

4

1 に答える 1

32

探しているのは dpkg-triggers です。

debhelper を使用して debian パッケージをビルドする 1 つの解決策は次のとおりです。

ステップ1)

ファイルを作成します (サーバー パッケージの名前にdebian/<serverPackageName>.triggers置き換えます)。<serverPackageName>

ステップ 1a)

プールのディレクトリを監視するトリガーを定義します。ファイルの内容は次のようになります。

interest /path/to/my/pool

ステップ 1b)

ただし、明示的に起動する必要がある名前付きトリガーを定義することもできます (手順 3 を参照)。

ファイルの内容:

interest cdn-pool-changed

トリガーcdn-pool-changedの名前は free です。好きなものをいつでも取ることができます。

ステップ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 に答える