Como falhar o script prerm e o script preinst com mensagem de erro no pacote Debian

1

Estruturei meu pacote debian da seguinte maneira

  • preinst script que exibe o EULA para o usuário e solicita a opção 'y' ou 'n'.
  • postinst script que instala o pacote e atualiza a imagem initrd.
  • prerm script , antes de desinstalar o pacote, verifica se há uma condição se a condição corresponder e sair do prerm com exit 1 .
  • postrm script descarrega o pacote se o script check in prerm falhar e atualizar a imagem initrd.

Agora tenho as seguintes perguntas

  1. Digamos que o pacote já esteja instalado na máquina e o usuário esteja tentando reinstalá-lo ou atualizá-lo. Agora, se o usuário disser "sim" ao EULA, o que o debian fará? Eu observei isso simplesmente - desinstale o pacote instalado anteriormente e reinstale-o, o que é perfeitamente adequado. Mas, se o usuário disser 'n' ao EULA, como eu sairia do processo de desinstalação? Eu fiz isso adicionando exit 1 no script preinst mas não está funcionando.Eu observei que se você diz dpkg -i package , o debian primeiro verifica se o pacote já está instalado, Se o pacote já estiver instalado então descomprime o pacote antes de chamar o script preinst ( 'checou usando lsmod) então se você disser' n 'ao EULA ele começa a reverter as mudanças, isto é, reinstalar o pacote descompactado chamando script postinst que se parece com comportamento estranho para o usuário final já que o usuário disse' n 'para EULA. adicionando uma verificação se o módulo estiver presente, não o instale novamente, mas como eu disse sempre que você diz dpkg -i package, o debian primeiro remove o módulo e falha na minha verificação.Então, como evitar a reinstalação do pacote se o usuário disser não ao EULA?

  2. Se eu disser dpkg -r package e meu prerm script fails and exits with status 1 .A mesma coisa acontece como acima. Se você diz dpkg -r package , debian descarrega o pacote antes de chamar o script prerm e verifica a condição em prerm se corresponder a ele sai dele e começa a reverter as alterações chamando script postinst, que é mais uma vez um comportamento estranho.

Eu sei que é o comportamento padrão do Debian, mas e se eu quiser sobrescrever o comportamento padrão?

    
por Dipak Ingole 04.07.2013 / 08:47

1 resposta

4

Esse tipo de coisa não deve ser feito em (pre|post)|(inst|rm) scripts. Os scripts (pre|post)|(inst|rm) devem ser idempotent e nãointerativos .

Em vez disso, o que você quer fazer é fornecer um template debconf que requer que as questões sejam respondidas para que o pacote seja totalmente instalado.

Se você quiser um exemplo, veja os sun-java* packages. Você pode ver o template debconf aqui: dlj.templates .

Os pacotes sun-java* apresentam especificamente uma licença que deve ser aprovada antes de o Java ser instalado.

Aqui está uma pergunta de exemplo diferente do modelo (porque a licença é muito longa para ser reproduzida aqui):

Template: shared/accepted-sun-dlj-v1-1
Type: boolean
Default: false
_Description: Do you accept the DLJ license terms?
 In order to install this package, you must accept the license terms, the
 "Operating System Distributor License for Java" (DLJ), v1.1. Not accepting
 will cancel the installation.
  • Template é o nome do objeto no banco de dados debconf. Deve ser único.
  • Type é o tipo de valor. Neste caso, é um booleano que significa que o debconf irá fazer uma pergunta sim / não.
  • Default fornece a resposta inicialmente selecionada quando apresentada ao usuário (ou a resposta escolhida automaticamente se a prioridade não for alta o suficiente para a pergunta ser vista).
  • _Description é o título da caixa de diálogo.
  • O restante é o texto apresentado na caixa de diálogo. Deve ser recuado com um único espaço.
  • Os modelos são separados por linhas vazias (por exemplo, \n\n )

Para mais informações, consulte a documentação especificação do debconf do Debian e o seção Referência do desenvolvedor 6.5 .

    
por 09.07.2013 / 09:37

Tags