Skip to content
Tiantan
Articles

Mata in ingångsvärden till dpkg-omkonfigurera på ett icke-interaktivt sätt

On februari 18, 2021 by admin

Jag vill konfigurera ubuntu-paket via dpkg-omkonfigurera med alla värden som tillhandahålls via icke- interaktivt läge (i skriptet).

Mitt fall är faktiskt firebird confiiguration ( http://www.firebirdsql.org/manual/ubusetup.html ), att när jag använder kommando:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline 

ber mig om de två värdena, där svaret skulle vara ”Y” och ”newpwd”.

Provutdata ser ut så här:

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 

Jag har försökt here strings via bash-skript så här:

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

Detta fungerade dock inte av någon anledning och den bad om att värdena skulle tillhandahållas.

Några idéer för hur man matar de värden som krävs för att skript?

Svar

Du kan alltid använda förvänta dig att språket automatiserar interaktionen med en process som förväntar sig inmatningen på en . Jag har inte riktigt använt det tidigare så jag kan inte lägga till kod här men din är ett typiskt användningsfall.

UPPDATERING:

[Peter Butkovic] Jag överväger att peka mig på expect som rätt riktning, detta skript slutade jag 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

  • tack för att du pekar åt mig rätt riktning. Jag anser att det här svaret är korrekt eftersom det var den enkla att implementera lösningen.
  • Jag skulle vara försiktig med möjligheten till i18n-problem, men för ” hemanvändning ” detta verkar säkert.

Svar

Debian-paket använder debconf för att samla inställningar för installationstiden. Debconf stöder flera frontends för att be användaren om värden. Alternativet -f till dpkg-reconfigure väljer vilken debconf-frontend som ska användas.

readline frontend är utformad för interaktiv användning. Använd det inte i ett automatiskt skript.

Om standardvärdena är bra, använd bara noninteractive frontend.

Om du vill ange olika värden, du har två alternativ. Du kan hålla fast vid noninteractive frontend och förbereder debconf-databasen . Det enklaste sättet att göra detta är att installera paketet på en maskin och konfigurera det interaktivt och sedan extrahera relevanta delar från /var/cache/debconf/config.dat och leverera den här filen till debconf:

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

En annan metod är att använda editor frontend och ställa in miljövariabeln VISUAL (eller EDITOR, men VISUAL har företräde framför EDITOR ) till ett program som tar en fil som innehåller de aktuella inställningarna som ett argument och skriver över den filen med de inställningar du vill ha.

Kommentarer

  • Nejmåste analysera /var/cache/debconf/config.dat själv. Du kan använda debconf-get-selections från paketet debconf-utils. Se till exempel detta .
  • Jag ’ är inte säker på om förinställning är rätt passform här. Vi ’ talar om att köra dpkg-reconfigure, vilket jag ’ gissar att OP vill automatisera eftersom han ’ gör det ofta.
  • tack för tips. beslutade att gå till förvänta manus. undersökte inte ’ här.
  • @JosephR. Faktum är att debconf-get-selections sannolikt kommer att vara användbart här. Om Peter vill göra detta ofta med olika värden bör han generera en config.dat dynamiskt (det ’ är ett enkelt format). Detta är enklare än expect. expect är desperationens väg. Till exempel går det ’ om en ny version av paketet introducerar en ny fråga (annars behöver du ett mycket mer sofistikerat skript).
  • @ JosephR länken om försådd du publicerade fungerar inte längre, prova det här: zacks.eu/debian-preseed

Svar

Använd debconf-set-selections för att infoga nya värden i debconf-databasen (/var/cache/debconf/config.dat).


Elis svar var inte klart för mig, så jag kommer att förklara det steg för steg steg.

Det första du ska göra är att installera paketet interaktivt och få de valda valen genom att (ändra firebird till ditt paketnamn):

sudo debconf-get-selections | grep ^firebird 

eller:

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

Pre-seeda sedan debconf-databasen med svar av debconf-set-selections, till exempel:

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 

där syntax är:

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

Här är ett annat exempel på ttf-mscorefonts-installer -paket:

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

Obs! Ingångsvalen kan vara antingen från standardingången eller filen.

Kontrollera: man debconf-set-selections för mer information.


Alternativt sätt är för att använda Kickstart .

Kommentarer

  • debconf-set-selections inte ’ t verkar träda i kraft i alla fall, t.ex.: exim.
  • debconf-set-selections kör INTE konfigurationsskriptet inbyggt i deb-paketet du ändrar ing. Den anger bara de val paketet efterfrågar som bara är den första delen av det. dpkg-reconfigure kör båda delarna.
  • Detta borde vara rätt svar för den här frågan.

Svar

Jag har pockat i ungefär en timme bara försökt att kondensera lösningen för detta till en enfodrad och jag hittade äntligen: debconf-set -val

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

Detta tvingar debconf att använda standardvärdena och inte bugga dig. Du kan också ställa in standardinställningarna för alla Debian-paket, se manpage för mer info.

Kommentarer

  • Är inte ’ t samma som sudo dpkg-reconfigure debconf -f noninteractive eller export DEBIAN_FRONTEND=noninteractive?

Svar

Jag har försökt göra skriptkonfigurering av LDAP-inställningar (ldap-auth-config-paket) med debconf-get-selections / set- selections-metod som nämns ovan, bara för att upptäcka att detta paket ignorerar inställningar i debco nf efter första installationen. Du kan använda debconf för att pre-seed före installationen, men efter installationen föredrar ldap-auth-config att skriva över dina debconf-inställningar med vad som helst som anges i systemkonfigurationsfilerna som hanteras. Paketet pam-auth-config har samma beteende.

EDITOR / VISUAL-mekanismen är också svår att använda i det här fallet eftersom ldap-auth-config åberopar det flera gånger för olika uppsättningar frågor. Det kan hanteras enklare med ett förväntat skript eller genom att direkt ändra systemkonfigurationsfilerna. Så det är inte alltid lätt att undvika att förvänta sig!

Svar

Min version av förvänta sig en lösning för att installera ArangoDB .deb med 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

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Senaste inläggen

  • Med hjälp av en balun med en resonansdipol
  • Vad är skillnaden mellan “ kan inte ” och “ kan inte ”? [duplicera]
  • På JFK, kan du flytta mellan terminalerna på sidan om inrikesflyg?
  • “ Uppskattat djupt ” eller “ uppskattade ”
  • Vad betyder ' abstrakta idéer '? [stängd]

Arkiv

  • februari 2021
  • januari 2021
  • december 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