Quais serviços devem ser parados pelos scripts preinst vs. prerm?

5

O manual do Debian ( link ) diz o seguinte sobre preinst :

Many 'preinst' scripts stop services for packages which are being upgraded until their installation or upgrade is completed

E isso é sobre prerm :

This script typically stops any daemons which are associated with a package.

Até onde eu sei, uma atualização vai chamar prerm do pacote antigo e preinst do novo, e ao remover um pacote apenas prerm será chamado.

Então, se eu criar um pacote debian que contenha um serviço, há algum bom motivo para preferir usar preinst over prerm ? Ou preciso dos dois?

    
por Benno 29.04.2016 / 20:11

1 resposta

6

O documento ao qual você está vinculado é o FAQ, que, embora relevante, não é necessariamente considerado como autoritativo (as distinções são provavelmente sutis, e qualquer inconsistência é realmente um bug). O documento oficial é o Debian Policy Manual, que tem um capítulo inteiro dedicado aos scripts do mantenedor . Como isso não é tão fácil de ler, existem diagramas úteis no wiki que explicam as relações entre os scripts do mantenedor.

Basicamente, o único script que precisa para interromper os serviços no pacote correspondente é prerm ; Como você aponta, esse script é chamado ao remover o pacote, bem como ao atualizá-lo. Um ponto importante em alguns casos é que é o script prerm do pacote instalado, que é usado por padrão; se falhar antes de uma atualização, o sistema de empacotamento também tentará o script prerm atualizado.

preinst sempre vem após prerm durante uma atualização e, quando for executado, os serviços devem ser interrompidos. Alguns pacotes dos scripts ' preinst ' tentam parar os serviços novamente, só para ter certeza; exemplos disso incluem mysql-server-5.6 e timidity , mas não há muitos.

Então, em resumo, você deve parar seus serviços em prerm , e você pode fazê-lo em preinst também (embora não haja necessidade de forma eficaz); você não deve preferir preinst over prerm para isso e não precisa dos dois. Eu só usaria prerm .

(Estritamente falando, devo esclarecer que o Manual de Políticas é descritivo e não prescritivo, pois documenta a prática atual em vez de defini-la - por isso não é tão autoritário quanto você poderia esperar, e as práticas evoluem antes de serem documentadas Mas, neste caso em particular, a Política está correta.Enquanto estou nisso, como prerm sabe se está sendo chamado para uma atualização, pode ser tentador tentar truques inteligentes e deixar os serviços em execução até que algum script posterior possa reiniciá-los , a fim de reduzir o tempo de inatividade do serviço, mas isso só está pedindo problemas.)

    
por 29.04.2016 / 22:47

Tags