Mating av inngangsverdier til dpkg-omkonfigurering på en ikke-interaktiv måte
On februar 18, 2021 by adminJeg vil konfigurere ubuntu-pakken via dpkg-omkonfigurere med alle verdiene som leveres via ikke- interaktiv modus (i skriptet).
Faktisk er mitt tilfelle firebird confiiguration ( http://www.firebirdsql.org/manual/ubusetup.html ), at når du bruker kommando:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
ber meg om de to verdiene, der svarene vil være «Y» og «newpwd».
Eksempelutgang ser slik ut:
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
Jeg har prøvd here strings
via bash-skript slik:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Dette fungerte imidlertid ikke av en eller annen grunn, og det ba om at verdiene skulle leveres.
Eventuelle ideer om hvordan du kan mate de nødvendige verdiene for å skripte?
Svar
Du kan alltid bruke forventer at språk automatiserer interaksjon med en prosess som forventer innspill på en . Jeg har ikke brukt den før, så jeg kan ikke legge til kode her, men din er en typisk brukssak.
OPPDATERING:
[Peter Butkovic] Jeg vurderer å peke meg på expect
som en riktig retning, dette skriptet endte jeg med:
#!/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
Kommentarer
- takk for at du pekte meg i riktig retning. Jeg anser dette svaret som riktig, ettersom det var den enkle å implementere løsningen.
- Jeg ville være forsiktig med muligheten for i18n-problemer, men for » hjemmebruk » dette virker trygt.
Svar
Debian-pakker bruker debconf for å samle innstillingene for installasjonstid. Debconf støtter flere frontend for å be brukeren om verdier. -f
alternativet til dpkg-reconfigure
velger hvilken debconf frontend som skal brukes.
readline
frontend er designet for interaktiv bruk. Ikke bruk det i et automatisk skript.
Hvis standardverdiene er fine, bruker du bare noninteractive
frontend.
Hvis du vil oppgi forskjellige verdier, har du to alternativer. Du kan holde deg til noninteractive
frontend, og forutså debconf-databasen . Den enkleste måten å gjøre dette på er å installere pakken på en maskin og konfigurere den interaktivt, og deretter trekke ut de aktuelle delene fra /var/cache/debconf/config.dat
og levere denne filen til debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
En annen metode er å bruke editor
frontend, og angi miljøvariabelen VISUAL
(eller EDITOR
, men VISUAL
har forrang over EDITOR
) til et program som tar en fil som inneholder gjeldende innstillinger som argument, og overskriver filen med innstillingene du vil ha.
Kommentarer
- Neitrenger å analysere
/var/cache/debconf/config.dat
deg selv. Du kan brukedebconf-get-selections
fradebconf-utils
-pakken. Se dette for eksempel. - Også ‘ er ikke sikker på om forhåndsbestilling er riktig passform her. Vi ‘ snakker om å kjøre
dpkg-reconfigure
, som jeg ‘ gjetter at OP vil automatiser fordi han ‘ gjør det ofte. - takk for hint. bestemte meg for å gå for forventet manus. har ikke ‘ ikke undersøkt dypere her.
- @JosephR. Faktisk vil
debconf-get-selections
sannsynligvis være nyttig her. Hvis Peter ofte vil gjøre dette med forskjellige verdier, bør han generere enconfig.dat
dynamisk (det ‘ er et enkelt format). Dette er enklere ennexpect
.expect
er desperasjonens vei. For eksempel vil det ‘ brytes ned hvis en ny versjon av pakken introduserer et nytt spørsmål (ellers trenger du et langt mer sofistikert skript). - @ JosephR lenken om pre-seeding du la ut fungerer ikke lenger, prøv dette: zacks.eu/debian-preseed
Svar
Bruk debconf-set-selections
kommando for å sette inn nye verdier i debconf-databasen (/var/cache/debconf/config.dat
).
Elis svar var ikke klart for meg, så jeg forklarer det trinn for trinn steg.
Det første du må gjøre er å installere pakken interaktivt og få de valgte valgene ved å (endre firebird
til pakkenavnet ditt):
sudo debconf-get-selections | grep ^firebird
eller:
grep -C2 firebird /var/cache/debconf/config.dat
Pre-seed deretter debconf-databasen med svar av debconf-set-selections
, for eksempel:
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
der syntaksen er:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Her er et annet eksempel for ttf-mscorefonts-installer
pakke:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Merk: Inngangsvalgene kan være enten fra standardinngangen eller filen.
Sjekk: man debconf-set-selections
for mer informasjon.
Alternativ måte er å bruke Kickstart .
Kommentarer
- debconf-set-selections ikke ‘ t virker i alle tilfeller, f.eks: exim.
- debconf-set-selections kjører IKKE konfigurasjonsskriptet innebygd i deb-pakken du endrer ing. Den angir bare valgene pakken ber om som bare er den første delen av den. dpkg-reconfigure kjører begge deler.
- Dette skal være riktig svar på dette spørsmålet.
Svar
Jeg har stukket rundt i omtrent en time bare for å prøve å fortette løsningen for dette til en en-liner, og til slutt fant jeg det: debconf-set -valg
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Dette vil tvinge debconf til å bruke standardinnstillingene og ikke bugge deg. Du kan også angi konfigurasjonsstandardene for alle Debian-pakker, se hjemmesiden for mer info.
Kommentarer
- Ikke ‘ t det samme som
sudo dpkg-reconfigure debconf -f noninteractive
ellerexport DEBIAN_FRONTEND=noninteractive
?
Svar
Jeg har prøvd å gjøre skriptkonfigurering av LDAP-innstillinger (ldap-auth-config-pakke) ved hjelp av debconf-get-selections / set- valgmetoden nevnt ovenfor, bare for å finne ut at denne pakken ignorerer innstillinger i debco nf etter første installasjon. Du kan bruke debconf til å pre-seed før installasjon, men etter installasjon foretrekker ldap-auth-config å overskrive debconf-innstillingene dine med det som er angitt i systemkonfigurasjonsfilene den administrerer. Pakke pam-auth-config har samme oppførsel.
EDITOR / VISUAL-mekanismen er også vanskelig å bruke i dette tilfellet fordi ldap-auth-config påkaller den flere ganger for forskjellige spørsmålssett. Det kan håndteres lettere med et forventet skript, eller ved å endre systemkonfigurasjonsfilene direkte. Så det er ikke alltid lett å unngå å forvente!
Svar
Min versjon av forvent løsning for å installere ArangoDB .deb ved hjelp av 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)
Legg igjen en kommentar