Каков корректный способ проигнорировать системный сценарий, установленный пакетом при удалении того пакета?

Я обрабатываю почти 30 пакетов и имею все виды файлов и сценариев, которые установлены.

Некоторые из тех сценариев могут работать, в то время как пакет установлен, но когда-то удален (настроенный против очищенного), они не должны больше выполняться.

Как это управляет в стандартных пакетах Ubuntu/Debian?

Например, у меня есть logrotate файл, который установлен с:

/var/log/snapwebsites/snapmanagerdaemon.log {
    weekly
    maxsize 10M
    su snapwebsites snapwebsites
    missingok
    rotate 10
    postrotate
        /usr/bin/snapsignal snapmanagerdaemon/LOG
    endscript
    compress
    delaycompress
    notifempty
    create 640 snapwebsites snapwebsites
}

/usr/bin/snapsignal двоичный файл исчезнет, если все пакеты будут удалены, но этот logrotate сценарий остается на месте... поэтому, когда он выполняется, он перестал работать на том одном вызове.

Я думал, что мог сделать удаление в postrm сценарии как в:

if [ "$1" = "remove" ]
then
    rm -f /etc/logrotate.d/snapmanagerdaemon
fi

Это работает на удалить шаг, но если пользователь переустанавливает пакет, он не возвращается (это не становится распакованным.) Так в результате я не был бы, получил ожидаемое вращение журнала. Нет, пока я насильственно не извлекаю тот файл и переустанавливаю его вручную.

Я вижу несколько решений, но я хотел бы знать, как это сделано в надлежащем пакете Debian.

Одно решение, которое работало бы, состоит в том, чтобы я добавил тест, чтобы знать ли snapsignal все еще установлен.

    postrotate
        if test -x /usr/bin/snapsignal
        then
            /usr/bin/snapsignal snapmanagerdaemon/LOG
        fi
    endscript

Только это означает, что logrotate продолжает выполнять эту запись навсегда даже при том, что того пакета не стало. У меня есть подобное чувство о других сценариях, которыми я управляю. После того как пакет удален, не должно быть никакой потребности иметь такой сценарий, все еще работающий.

Обратите внимание, что logrotate является одним примером, показывающим проблему. Мы на самом деле заметили его с dpkg конфигурационным файлом, сценарий, под которым мы помещаем:

/etc/dpkg/dpkg.conf.d/...

который остается на месте после удаления.

Другой тип сценария, который остается и также вызовет проблемы: файлы КРОНА. Те, под которыми Вы устанавливаете /etc/cron.daily, /etc/cron.monthly, и т.д., Если кто-либо из тех сценариев попытается получить доступ к одному из Ваших двоичных файлов после удаления, то это перестанет работать.

1
задан 11 November 2016 в 04:26

1 ответ

С помощью некоторых других людей я нашел ответ в программном документе Debian, но это только разъяснено в раздел CRON Jobs (настроенный против более универсального раздела о таких сценариях.)

соответствующий абзац:

сценарии или crontab записи в этих каталогах должны проверить, установлены ли все необходимые программы, прежде чем они попытаются выполнить их. Иначе проблемы возникнут, когда пакет был удален, но не очищен, так как конфигурационные файлы сохранены в системе в этой ситуации.

0
ответ дан 8 December 2019 в 07:54

Другие вопросы по тегам:

Похожие вопросы: