Alimentando valores de entrada para reconfigurar o dpkg de uma maneira não interativa

21

Eu gostaria de configurar o pacote ubuntu via dpkg-reconfigure com todos os valores fornecidos via modo não interativo (no script).

Na verdade, meu caso é a configuração do firebird ( link ), que ao usar o comando:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

me pergunta os 2 valores, onde as respostas seriam 'Y' e 'newpwd'.

A saída de exemplo é assim:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline
 * Firebird 2.5 superclassic server not running
Configuring firebird2.5-superclassic
------------------------------------

Accept if you want Firebird server to start automatically.

If you only need the Firebird client and there are no databases that will be served by this host, decline.

Enable Firebird server? Y


Password for firebird 2.5
-------------------------

Firebird has a special user named SYSDBA, which is the user that has access to all databases. SYSDBA can also create new databases and users. Because of this, it 
is necessary to secure SYSDBA with a password.

The password is stored in /etc/firebird/2.5/SYSDBA.password (readable only by root). You may modify it there (don't forget to update the security database too, 
using the gsec utility), or you may use dpkg-reconfigure to update both.

To keep your existing password, leave this blank.

Password for SYSDBA: 


 * Starting Firebird 2.5 superclassic server...
   ...done.
 * Firebird 2.5 superclassic server already running

Eu tentei here strings via script bash como este:

sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF
Y
newpwd
EOF

No entanto, isso não funcionou por algum motivo e solicitou que os valores fossem fornecidos.

Alguma idéia de como alimentar os valores necessários para o script?

    
por Peter Butkovic 15.10.2013 / 23:38

5 respostas

11

Você sempre pode usar o esperar o idioma para automatizar a interação com um processo que espera sua entrada em um tty . Eu realmente não o usei antes, então não posso adicionar código aqui, mas o seu é um caso de uso típico.

ATUALIZAÇÃO:

[Peter Butkovic] Eu considero apontar-me para expect como uma direção certa, esse script terminou com:

#!/usr/bin/expect

spawn dpkg-reconfigure firebird2.5-superclassic -freadline
expect "Enable Firebird server?"
send "Y\r"

expect "Password for SYSDBA:"
send "newpwd\r"

# done
expect eof
    
por 15.10.2013 / 23:52
18

Os pacotes Debian usam debconf para coletar as configurações de tempo de instalação. O debconf suporta múltiplos frontends para solicitar ao usuário valores. A opção -f para dpkg-reconfigure seleciona qual frontend debconf usar.

O frontend readline foi projetado para uso interativo. Não use em um script automático.

Se os valores padrão estiverem bem, basta usar o frontend noninteractive .

Se você quiser fornecer valores diferentes, você tem duas opções. Você pode usar o frontend noninteractive e o pré-configurar o banco de dados debconf . A maneira mais fácil de fazer isso é instalar o pacote em uma máquina e configurá-lo de forma interativa, depois extrair as partes relevantes de /var/cache/debconf/config.dat e fornecer esse arquivo para debconf:

DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic

Outro método é usar o frontend editor e definir a variável de ambiente VISUAL (ou EDITOR , mas VISUAL tem precedência sobre EDITOR , se estiver definida) para um programa que recebe um arquivo contendo as configurações atuais como um argumento e sobrescreve o arquivo com as configurações desejadas.

    
por 16.10.2013 / 02:23
11

Use o comando debconf-set-selections para inserir novos valores no banco de dados debconf ( /var/cache/debconf/config.dat ).

A resposta do Eli não ficou clara para mim, então vou explicá-lo passo a passo.

A primeira coisa a fazer é instalar o pacote interativamente e obter as seleções escolhidas (altere firebird para o nome do seu pacote):

sudo debconf-get-selections | grep ^firebird

ou:

grep -C2 firebird /var/cache/debconf/config.dat

Em seguida, pré-semeia o banco de dados debconf com respostas de debconf-set-selections , por exemplo:

echo firebird2.5-superclassic shared/firebird/enabled boolean true | sudo debconf-set-selections -v
echo firebird2.5-superclassic shared/firebird/sysdba_password/new_password password foo | sudo debconf-set-selections -v

onde a sintaxe é:

echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections

Aqui está outro exemplo para ttf-mscorefonts-installer package:

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections

Observação: as seleções de entrada podem ser da entrada padrão ou do arquivo.

Verifique: man debconf-set-selections para mais informações.

O caminho alternativo é usar o Kickstart .

    
por 27.11.2015 / 02:32
4

Eu tenho procurado por cerca de uma hora apenas tentando condensar a solução para isso em um one-liner e finalmente encontrei: debconf-set-seleções

echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections

Isto irá forçar o debconf a usar os padrões e não a incomodar. Você também pode definir os padrões de configuração para qualquer pacote Debian, veja a página do manual para mais informações.

    
por 29.09.2014 / 14:55
0

Eu tenho tentado fazer a reconfiguração de script de configurações LDAP (pacote ldap-auth-config) usando o método debconf-get-seleções / set-selections mencionado acima, apenas para descobrir que este pacote ignora as configurações no debconf após a inicial instalação. Você pode usar o debconf para pre-seed antes de instalar, mas após a instalação o ldap-auth-config prefere sobrescrever suas configurações do debconf com o que estiver definido nos arquivos de configuração do sistema que ele gerencia. O pacote pam-auth-config tem o mesmo comportamento.

O mecanismo EDITOR / VISUAL também é difícil de usar neste caso porque o ldap-auth-config invoca várias vezes para diferentes conjuntos de questões. Ele pode ser manipulado mais facilmente com um script de espera ou modificando diretamente os arquivos de configuração do sistema. Então, nem sempre é fácil evitar voltar a esperar!

    
por 25.01.2016 / 03:02

Tags