Skip to content
Tiantan
Articles

Mating av inngangsverdier til dpkg-omkonfigurering på en ikke-interaktiv måte

On februar 18, 2021 by admin

Jeg 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 bruke debconf-get-selections fra debconf-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 en config.dat dynamisk (det ‘ er et enkelt format). Dette er enklere enn expect. 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 eller export 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)  

Written by admin

Legg igjen en kommentar Avbryt svar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Siste innlegg

  • Ved å bruke en balun med en resonansdipol
  • Hva er forskjellen mellom “ kan ikke ” og “ kan ikke ”? [duplikat]
  • På JFK, kan du bevege deg mellom terminalene på flyplassen på innenlandsflyvninger?
  • “ Dypt verdsatt ” eller “ setter stor pris på ”
  • Hva betyr ' abstrakte ideer '? [lukket]

Arkiv

  • februar 2021
  • januar 2021
  • desember 2020
  • november 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top