ordenação da execução dos scripts preinst e config

0

É possível forçar algum script preinst a ser executado antes do outro?

O que eu gostaria de fazer, é criar um pacote no meu repositório privado, que quando instalado, faria FIRST algumas questões, e somente então outros pacotes (dos quais ele depende) seriam descompactados.

Por exemplo, digamos que eu queira criar my-mysql package, que dependeria de mysql-server-5.5 do repositório padrão. Eu gostaria que quando o usuário digitasse apt-get install my-mysql para my-mysql.preinst para ser executado antes de mysql-server-5.5.preinst (então, pode fazer debconf-set-selections para autogerar a senha root e parar o pacote mysql-server de pedir interativamente).

Eu poderia fazer isso sem colocar qualquer dependência em my-mysql package e executar manualmente dois comandos:

apt-get install my-mysql
apt-get install mysql-server-5.5

mas preciso que funcione com apenas um comando ( apt-get install my-mysql ). Eu tentei jogar com Pre-depends no terceiro pacote que faria config, e Depends no mysql-server-5.5, mas parece que mysql-server-5.5.preinst sempre é executado primeiro. Existe uma maneira de mudar isso e forçar o preinst do meu pacote a ser executado antes?

Como forma alternativa, eu também não posso executar apt-get install mysql-server-5.5 do postinst por causa dos problemas de bloqueio do dpkg, e gostaria de fazê-lo de uma maneira muito mais limpa do que bloqueando kludges como este.

ATUALIZAÇÃO: como mencionado nos comentários, parece que o pacote mysql-server também possui .config scripts (com .templates associado) que executam mesmo antes de .preinst scripts, então eu preciso ordená-los também.

    
por Matija Nalis 17.02.2016 / 01:42

1 resposta

2

Eu encontrei uma maneira de fazer isso.

Então, para que o único apt-get install my-mysql funcione como descrito em questão, eu tive que fazer várias coisas:

  • crie o pacote my-mysql de modo que ele dependa de my-mysql-config e dependa de mysql-server
  • crie o pacote adicional my-mysql-config , que pré-depende de debconf e contém my-mysql-config.templates e my-mysql-config.config script (que, entre outras coisas, define a senha para que o mysql-server-5.5 não solicite) contendo código como:

    . /usr/share/debconf/confmodule
    db_set  mysql-server/root_password "$PW"
    db_fset mysql-server/root_password seen true
    
    db_set  mysql-server/root_password_again "$PW"
    db_fset mysql-server/root_password_again seen true
    
  • também my-mysql-config.preinst contém código que faz db_get e cria arquivos de configuração antes mysql-server é iniciado

  • você pode usar o script my-mysql package .postinst para executar coisas que você deseja depois que o mysql-server estiver instalado e em execução.

O tutorial do programador do Debconf foi de grande ajuda por lá, já que estava usando export DEBCONF_DEBUG=developer e set -x em scripts para depuração.

Outros dois problemas demorados para depuração foram garantir que os scripts config / preinst / postinst não emitem QUALQUER OUTDO para STDOUT (já que ele quebra o debconf de formas estranhas e interessantes) e que você precisa de db_stop se você fizer coisas como invoke-rc.d mysql restart ou similar (ou seu apt-get irá travar, mesmo sem responder a Ctrl + C )

    
por Matija Nalis 11.03.2016 / 01:44