Qual é a maneira correta de ignorar um script do sistema instalado por um pacote ao remover esse pacote?

1

Estou lidando com quase 30 pacotes e tenho todos os tipos de arquivos e scripts que são instalados.

Alguns desses scripts podem ser executados enquanto o pacote é instalado, mas depois de removidos (opostos a limpos), eles não devem mais ser executados.

Como isso é gerenciado em pacotes padrão Ubuntu / Debian?

Por exemplo, eu tenho um arquivo logrotate que é instalado com:

/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
}

O binário /usr/bin/snapsignal desaparecerá se todos os pacotes forem removidos, mas este script de logrotate permanece no lugar ... então, quando é executado, ele falha nessa chamada.

Eu pensei que poderia fazer uma remoção no script postrm como em:

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

Isso funciona para a etapa de remoção, mas se o usuário reinstalar o pacote, ele não voltará (ele não será descompactado). Portanto, como resultado, eu não obteria a rotação de log esperada. Pelo menos não até extrair forçosamente esse arquivo e reinstalá-lo manualmente.

Eu posso ver várias soluções, mas gostaria de saber como isso é feito em um pacote Debian apropriado.

Uma solução que funcionaria é adicionar um teste para saber se snapsignal ainda está instalado.

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

Só isso significa que logrotate continua a executar essa entrada para sempre, mesmo que o pacote tenha desaparecido. Eu tenho um sentimento semelhante sobre os outros scripts que eu gerencio. Depois que o pacote for removido, não será necessário que esse script ainda esteja em execução.

Note que o logrotate é um exemplo que exibe o problema. Nós realmente notamos com o arquivo dpkg configuration , um script que colocamos abaixo:

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

que permanece em vigor após a remoção.

Outro tipo de script que fica para trás e também causará problemas: arquivos CRON. Aqueles que você instala em /etc/cron.daily , /etc/cron.monthly , etc. Se algum desses scripts tentar acessar um de seus arquivos binários após a remoção, ele falhará.

    
por Alexis Wilke 10.11.2016 / 21:33

1 resposta

0

Com a ajuda de outras pessoas, encontrei uma resposta no documento de política do Debian, mas isso só está escrito no Seção CRON Jobs (em oposição a uma seção mais genérica sobre esses scripts.)

O parágrafo em questão:

% bl0ck_qu0te%     
por Alexis Wilke 11.11.2016 / 23:27