Dpkg: Как использовать триггер?

Я написал небольшой сервер cdn, который будет перестраивать реестр своего пула, если в пул будет добавлен новый материал (пул-контент-пакеты).

Вместо этого каждый пул-контент-пакет вызывает init.d cdn-сервера, я бы хотел использовать триггеры. Затем он перезапустил сервер только один раз в конце запуска установки после установки всех пакетов.

Что мне делать, чтобы использовать триггер в моих пакетах с поддержкой debhelper?

Ответ 1

То, что вы ищете, это 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-триггеров, которые я мог найти, это " Как использовать триггеры dpkg". Соответствующий репозиторий git с примерами, которые вы можете получить здесь:

git clone git://anonscm.debian.org/users/seanius/dpkg-triggers-example.git