Fornire valori di input a dpkg-reconfigure in modo non interattivo
Su Febbraio 18, 2021 da adminVorrei configurare il pacchetto ubuntu tramite dpkg-reconfigure con tutti i valori forniti tramite non- modalità interattiva (nello script).
In effetti 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”.
Loutput 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 strings
tramite uno script bash come questo:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Tuttavia questo non ha funzionato per qualche motivo e ha richiesto che venissero forniti i valori.
Eventuali idee su come nutrire i valori richiesti per lo script?
Risposta
Puoi sempre utilizzare aspettarsi che la lingua automatizzi linterazione con un processo che si aspetta il suo input su un . Non lho mai usato prima, quindi non posso “aggiungere codice qui, ma il tuo è un caso duso tipico.
AGGIORNAMENTO:
[Peter Butkovic] Considero di indicarmi expect
come direzione giusta, questo script 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
Commenti
- grazie per avermi indicato la giusta direzione. Considero questa risposta corretta poiché era la soluzione facile da implementare.
- Sarei diffidente nei confronti della possibilità di problemi con i18n, ma per ” uso domestico ” sembra sicuro.
Risposta
I pacchetti Debian usano debconf per raccogliere le impostazioni del tempo di installazione. Debconf supporta più frontend per richiedere allutente i valori. Lopzione -f
per dpkg-reconfigure
seleziona quale frontend debconf utilizzare.
Il readline
frontend è progettato per un uso interattivo. Non usarlo in uno script automatico.
Se i valori predefiniti vanno bene, usa semplicemente il noninteractive
frontend.
Se se vuoi fornire valori diversi, hai due opzioni. Puoi restare con il noninteractive
frontend e preconfigurare il database debconf . Il modo più semplice per farlo è installare il pacchetto su una macchina e configurarlo in modo interattivo, quindi estrarre le parti pertinenti da /var/cache/debconf/config.dat
e fornire questo file a debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Un altro metodo consiste nellutilizzare il editor
frontend e impostare la variabile di ambiente VISUAL
(o EDITOR
, ma VISUAL
ha la precedenza su EDITOR
se è impostato ) a un programma che accetta un file contenente le impostazioni correnti come argomento e sovrascrive quel file con le impostazioni desiderate.
Commenti
- Nodevi analizzare
/var/cache/debconf/config.dat
da solo. Puoi utilizzaredebconf-get-selections
dal pacchettodebconf-utils
. Vedere questo per esempio. - Inoltre, ‘ non sono sicuro che la preconfigurazione sia si adatta bene qui. ‘ stiamo parlando di eseguire
dpkg-reconfigure
, che io ‘ immagino che lOP voglia automatizza perché ‘ lo farà spesso. - grazie per i suggerimenti. ha deciso di andare per lo script previsto. ‘ non ha indagato più a fondo qui.
- @JosephR. In effetti,
debconf-get-selections
potrebbe essere utile qui. Se Peter vuole farlo spesso con valori diversi, deve generare unconfig.dat
dinamicamente (‘ è un formato semplice). È più facile diexpect
.expect
è il percorso della disperazione. Ad esempio, ‘ si guasterà se una nuova versione del pacchetto introduce una nuova domanda (oppure è necessario uno script molto più sofisticato). - @ JosephR il link sul pre-seeding che hai pubblicato non funziona più, prova questo: zacks.eu/debian-preseed
Risposta
Utilizza il comando debconf-set-selections
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 passo.
La prima cosa da fare è installare il pacchetto in modo interattivo e ottenere le selezioni scelte da (cambia firebird
con il nome del pacchetto):
sudo debconf-get-selections | grep ^firebird
o:
grep -C2 firebird /var/cache/debconf/config.dat
Quindi pre-seed il database debconf con le risposte di 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 di ttf-mscorefonts-installer
pacchetto:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Nota: le selezioni di input possono essere dallo standard input o dal file.
Controlla: man debconf-set-selections
per ulteriori informazioni.
Un modo alternativo è per usare Kickstart .
Commenti
- debconf-set-selections non ‘ sembra avere effetto in tutti i casi, ad esempio: exim.
- debconf-set-selections NON esegue lo script di configurazione integrato nel pacchetto deb che stai modificando ing. Imposta solo le selezioni richieste dal pacchetto che è solo la prima parte di esso. dpkg-reconfigure esegue entrambe le parti.
- Questa dovrebbe essere la risposta corretta per questa domanda.
Risposta
Ho frugato in giro per circa unora cercando di condensare la soluzione per questo in una riga e alla fine lho trovata: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Questo costringerà debconf a usare i valori predefiniti e non ti creerà dei bug. Puoi anche impostare i valori di configurazione predefiniti per qualsiasi pacchetto Debian, consulta la manpage per maggiori informazioni.
Commenti
- Isn ‘ è uguale a
sudo dpkg-reconfigure debconf -f noninteractive
oexport DEBIAN_FRONTEND=noninteractive
?
Risposta
Ho “tentato di eseguire la riconfigurazione tramite script delle impostazioni LDAP (pacchetto ldap-auth-config) utilizzando debconf-get-selections / set- metodo di selezione menzionato sopra, solo per scoprire che questo pacchetto ignora le impostazioni in debco nf dopo linstallazione iniziale. Puoi usare debconf per pre-seed prima dellinstallazione, ma dopo linstallazione ldap-auth-config preferisce sovrascrivere le tue impostazioni di debconf con qualsiasi cosa sia impostata 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 diversi set di domande. Può essere gestito più facilmente con uno script previsto o modificando direttamente i file di configurazione del sistema. Quindi, non è sempre facile evitare di ricadere nelle aspettative!
Risposta
La mia versione del aspetta che la soluzione installi il file ArangoDB .deb utilizzando pexpect
import pexpect import os os.environ["DEBIAN_FRONTEND"]= "readline" child = pexpect.spawnu("dpkg -i arangodb3_3.6.2-1_amd64.deb") child.expect("user:") child.sendline("defg") child.expect("user:") child.sendline("defg") child.expect("Automatically upgrade database files") child.sendline("yes") child.expect("Database storage engine") child.sendline("1") child.expect("Backup database files before upgrading") child.sendline("no") child.expect(pexpect.EOF)
Lascia un commento