Fornire valori di input a dpkg-reconfigure in modo non interattivo


23

Vorrei configurare il pacchetto Ubuntu tramite dpkg-reconfigure con tutti i valori forniti tramite modalità non interattiva (nello script).

In realtà il mio caso è la configurazione di Firebird ( http://www.firebirdsql.org/manual/ubusetup.html ), che quando si utilizza il comando:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

mi chiede i 2 valori, dove le risposte sarebbero "Y" e "newpwd".

L'output di esempio è simile al seguente:

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

Ho provato here stringstramite bash script in questo modo:

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

Tuttavia, ciò non ha funzionato per qualche motivo e ha richiesto la fornitura dei valori.

Qualche idea su come alimentare i valori richiesti per lo script?

Risposte:


11

È sempre possibile utilizzare il linguaggio prevede per automatizzare l'interazione con un processo che prevede il suo input in a tty. Non l'ho mai usato prima, quindi non posso davvero aggiungere codice qui, ma il tuo è un tipico caso d'uso.

AGGIORNARE:

[Peter Butkovic] Considero indicarmi expectla giusta direzione, questa sceneggiatura che ho concluso con:

#!/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

grazie per avermi indicato la giusta direzione. Ritengo che questa risposta sia corretta in quanto è stata la soluzione facile da implementare.
Peter Butkovic,

Diffiderei della possibilità di problemi i18n, ma per "uso domestico" questo sembra sicuro.
Jasen,

20

I pacchetti Debian usano debconf per raccogliere le impostazioni del tempo di installazione. Debconf supporta più frontend per richiedere all'utente valori. L' -fopzione per dpkg-reconfigureselezionare quale frontend debconf usare.

Il readlinefrontend è progettato per l'uso interattivo. Non usarlo in uno script automatico.

Se i valori predefiniti vanno bene, usa semplicemente il noninteractivefrontend.

Se si desidera fornire valori diversi, sono disponibili due opzioni. È possibile attenersi al noninteractivefrontend e preimpostato il database debconf . Il modo più semplice per farlo è installare il pacchetto su un computer e configurarlo in modo interattivo, quindi estrarre le parti rilevanti da /var/cache/debconf/config.date fornire questo file a debconf:

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

Un altro metodo consiste nell'utilizzare il editorfrontend e impostare la variabile di ambiente VISUAL(o EDITOR, ma VISUALha la precedenza EDITORse è impostata) su un programma che accetta come argomento un file contenente le impostazioni correnti e lo sovrascrive con le impostazioni desiderate.


6
Non c'è bisogno di analizzarti /var/cache/debconf/config.dat. È possibile utilizzare debconf-get-selectionsdal debconf-utilspacchetto. Vedi questo per esempio.
Joseph R.,

Inoltre, non sono sicuro che la preconfigurazione sia la soluzione giusta qui. Stiamo parlando di corsa dpkg-reconfigure, che suppongo che l'OP voglia automatizzare perché lo farà frequentemente.
Joseph R.,

grazie per i suggerimenti. deciso di aspettarmi uno script. non ho indagato più a fondo qui.
Peter Butkovic,

2
@JosephR. In effetti, debconf-get-selectionsprobabilmente sarà utile qui. Se Peter vuole farlo spesso con valori diversi, dovrebbe generare config.datdinamicamente (è un formato semplice). Questo è più facile di expect. expectè la strada della disperazione. Ad esempio, si romperà se una nuova versione del pacchetto introduce una nuova domanda (oppure hai bisogno di uno script molto più sofisticato).
Gilles 'SO- smetti di essere malvagio' il

@JosephR il link sul pre-seeding che hai pubblicato non funziona più, prova questo: zacks.eu/debian-preseed
cjohnson318,

13

Utilizzare il debconf-set-selectionscomando per inserire nuovi valori nel database debconf ( /var/cache/debconf/config.dat).


La risposta di Eli non era chiara per me, quindi la spiegherò passo dopo passo.

La prima cosa da fare è installare il pacchetto in modo interattivo e ottenere le selezioni scelte da (cambiare firebirdil nome del pacchetto):

sudo debconf-get-selections | grep ^firebird

o:

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

Quindi pre-seeding del database debconf con le risposte debconf-set-selections, ad esempio:

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

dove la sintassi è:

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

Ecco un altro esempio per il ttf-mscorefonts-installerpacchetto:

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

Nota: le selezioni di input possono provenire dall'input standard o dal file.

Verifica: man debconf-set-selectionsper ulteriori informazioni.


Un modo alternativo è usare Kickstart .


debconf-set-selections non sembra avere effetto in tutti i casi, ad esempio: exim.
Jasen,

1
debconf-set-selections NON esegue lo script di configurazione incorporato nel pacchetto deb che si sta modificando. Imposta solo le selezioni richieste dal pacchetto, che è solo la prima parte di esso. dpkg-reconfigure esegue entrambe le parti.
fred

4

Ho cercato per circa un'ora solo cercando di condensare la soluzione per questo fino a una riga e finalmente l'ho trovata: debconf-set-selections

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

Questo costringerà debconf a usare le impostazioni predefinite e non a bombardarti. Puoi anche impostare i valori di configurazione predefiniti per qualsiasi pacchetto Debian, vedi la manpage per maggiori informazioni.


Non è lo stesso di sudo dpkg-reconfigure debconf -f noninteractiveo export DEBIAN_FRONTEND=noninteractive?
Kenorb,

0

Ho provato a fare una riconfigurazione tramite script delle impostazioni LDAP (pacchetto ldap-auth-config) usando il metodo debconf-get-selections / set-selections sopra menzionato, solo per scoprire che questo pacchetto ignora le impostazioni in debconf dopo l'installazione iniziale. È possibile utilizzare debconf per eseguire il pre-seed prima dell'installazione, ma dopo l'installazione ldap-auth-config preferisce sovrascrivere le impostazioni di debconf con tutto ciò che è impostato nei file di configurazione del sistema che gestisce. Il pacchetto pam-auth-config ha lo stesso comportamento.

Anche il meccanismo EDITOR / VISUAL è difficile da usare in questo caso perché ldap-auth-config lo invoca più volte per diverse serie di domande. Può essere gestito più facilmente con uno script prevede o modificando direttamente i file di configurazione del sistema. Quindi, non è sempre facile evitare di ricorrere alle aspettative!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.