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%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á.
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%