Recentemente, comecei a empacotar alguns dos meus softwares e publicá-los no Launchpad. A instalação e remoção funcionam bem, mas a atualização do pacote de uma versão para a próxima é problemática.
O problema é que existem alguns scripts que só precisam ser executados durante a primeira instalação do pacote. Esses scripts preenchem o banco de dados, criam um usuário etc. Eles são chamados atualmente na configure)
seção package.postinst . No entanto, isso resulta em serem chamados durante uma atualização, bem como mostrado no diagrama .
Existe uma maneira de incluir um script de mantenedor em um pacote .deb que é executado apenas durante a primeira instalação do pacote e não durante uma atualização? Ou qual seria uma maneira elegante de incluir alguns scripts de configuração inicial em um pacote .deb?
fonte
Você pode usar um script debian / preinst em combinação com o postinst.
No script preinst, verifique se há um arquivo que seu pkg definitivamente instala. Se estiver presente, não faça nada (porque seu pacote foi instalado anteriormente); caso contrário, execute as etapas de instalação.
Se as etapas de configuração exigirem que o seu pkg esteja instalado (nesse caso, o acima descrito não funcionará porque o preinst é executado antes da instalação), o script do preinst poderá gravar um arquivo, por exemplo: / tmp / setupmypkg. Seu script postinst pode simplesmente testar se esse arquivo está presente e, em caso afirmativo, fazer duas coisas:
fonte
Descobri que o teste de US $ 2 no script "postinst configure" não funcionará corretamente se você já instalou o pacote uma vez antes, desinstalou-o (mas sem limpar) e tente reinstalar novamente. Nesse caso, o script postinst ainda recebe um argumento de versão para a etapa "postinst configure".
No entanto, se você instalou o pacote antes, remova-o E limpe-o e reinstale-o novamente, o script "postinst configure" NÃO receberá um argumento de versão em $ 2
fonte
Acho que não, mas você pode modificar facilmente os scripts preinst / postinst para verificar se o pacote está sendo instalado pela primeira vez e executar uma ação padrão.
Pode ser algo assim,
em preinst.
no postinst,
Editar
Hmm, pode ser que você possa verificar tudo isso diretamente no postinst porque acho que o dpkg não definiria o status do pacote como instalado antes de executar o postinst, mas não tenho certeza. Então, o que foi dito acima pode vir,
no postinst,
Onde is_package_installed pode ser sua função para detectar o status da instalação. Pode ser algo como 'dpkg --status packagename'
OU
Por que não simplesmente verificar se as alterações que você deseja fazer já estão lá e somente prosseguir se não estiverem?
fonte