Krmení vstupních hodnot do dpkg-reconfigure neinteraktivním způsobem
On 18 února, 2021 by adminChtěl bych nakonfigurovat balíček ubuntu přes dpkg-reconfigure se všemi hodnotami dodávanými prostřednictvím non- interaktivní režim (ve skriptu).
Ve skutečnosti jde o konfiguraci firebirdu ( http://www.firebirdsql.org/manual/ubusetup.html ), že při použití příkazu:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
se mě zeptá na 2 hodnoty, kde odpovědi budou „Y“ a „newpwd“.
Ukázkový výstup vypadá takto:
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
Zkoušel jsem here strings
pomocí bash skriptu takto:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
To však z nějakého důvodu nefungovalo a vyžádalo si zadání hodnot.
Nějaké nápady, jak krmit požadované hodnoty pro skript?
Odpověď
Vždy můžete použít očekávejte, že jazyk automatizuje interakci s procesem, který očekává jeho vstup na . Ještě jsem to opravdu nepoužíval, takže sem opravdu nemůžu přidávat kód, ale váš je typický případ použití.
UPDATE:
[Peter Butkovic] Považuji nasměrování mě na expect
za správný směr, tento skript jsem zakončil:
#!/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
Komentáře
- děkuji, že jste mi ukázal správný směr. Tuto odpověď považuji za správnou, protože se jednalo o snadno implementovatelné řešení.
- Chtěl bych se obávat možnosti problémů s i18n, ale pro “ domácí použití “ zdá se to bezpečné.
Odpověď
Balíčky Debianu používají debconf ke shromažďování nastavení doby instalace. Debconf podporuje více frontendů, aby uživatele vyzval k zadání hodnot. Možnost -f
k dpkg-reconfigure
vybere, které frontend debconf se má použít.
readline
frontend je určen pro interaktivní použití. Nepoužívejte jej v automatickém skriptu.
Pokud jsou výchozí hodnoty v pořádku, použijte jednoduše rozhraní noninteractive
.
Pokud chcete-li zadat různé hodnoty, máte dvě možnosti. Můžete se držet noninteractive
rozhraní a přednastavit databázi debconf . Nejjednodušší způsob, jak to provést, je nainstalovat balíček na jeden počítač a nakonfigurovat jej interaktivně, poté extrahovat příslušné části z /var/cache/debconf/config.dat
a dodat tento soubor debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Další metodou je použití frontendu editor
a nastavení proměnné prostředí VISUAL
(nebo EDITOR
, ale VISUAL
má přednost před EDITOR
, pokud je nastaven ) na program, který vezme jako argument soubor obsahující aktuální nastavení a přepíše tento soubor požadovaným nastavením.
Komentáře
- Neje třeba analyzovat
/var/cache/debconf/config.dat
sebe. Můžete použítdebconf-get-selections
z balíčkudebconf-utils
. Viz toto . - Také si ‚ nejsem jistý, zda je přednastavení správně zapadnout sem. ‚ mluvíme o spuštění
dpkg-reconfigure
, o kterém ádám, že OP chce automatizovat, protože ‚ to dělá často. - děkuji za rady. rozhodl se očekávat skript. ‚ zde nebudeme zkoumat hlouběji.
- @JosephR. Pravděpodobně zde bude
debconf-get-selections
užitečné. Pokud to chce Peter dělat často s různými hodnotami, měl by generovatconfig.dat
dynamicky (je to ‚ jednoduchý formát). To je jednodušší nežexpect
.expect
je cesta zoufalství. Například ‚ se rozpadne, pokud nová verze balíčku zavede novou otázku (nebo jinak potřebujete mnohem propracovanější skript). - @ JosephR odkaz na předběžné nasazení, který jste zveřejnili, již nefunguje, zkuste toto: zacks.eu/debian-preseed
Odpověď
Pomocí příkazu debconf-set-selections
vložte nové hodnoty do databáze debconf (/var/cache/debconf/config.dat
).
Eli odpověď pro mě nebyla jasná, takže to vysvětlím postupně krok.
První věcí, kterou musíte udělat, je nainstalovat balíček interaktivně a získat vybrané výběry pomocí (změnit firebird
na název vašeho balíčku):
sudo debconf-get-selections | grep ^firebird
nebo:
grep -C2 firebird /var/cache/debconf/config.dat
Poté přednastavte databázi debconf odpověďmi debconf-set-selections
, například:
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
kde je syntaxe:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Zde je další příklad balíčku ttf-mscorefonts-installer
:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Poznámka: Výběr vstupu může být buď ze standardního vstupu nebo souboru.
Další informace najdete na man debconf-set-selections
.
Alternativní způsob je použít Kickstart .
Komentáře
- debconf-set-selections doesn ‚ Zdá se, že se projeví ve všech případech, např .: exim.
- debconf-set-selections NEBUDE spouštět konfigurační skript zabudovaný do balíčku deb, který měníte ing. Nastavuje pouze výběry, které balíček požaduje, což je pouze jeho první část. dpkg-reconfigure spustí obě části.
- Toto by měla být správná odpověď na tuto otázku.
Odpověď
Pokoušel jsem se asi hodinu jen zkoušet zkondenzovat řešení tohoto problému na jednu linii a nakonec jsem to našel: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
To donutí debconf použít výchozí hodnoty a nebude vás obtěžovat. Můžete také nastavit výchozí nastavení konfigurace pro jakýkoli balíček Debianu, další informace najdete na stránce .
Komentáře
- Není ‚ to stejné jako
sudo dpkg-reconfigure debconf -f noninteractive
neboexport DEBIAN_FRONTEND=noninteractive
?
Odpověď
Pokoušel jsem se provést skriptovanou rekonfiguraci nastavení LDAP (balíček ldap-auth-config) pomocí debconf-get-selections / set- výše uvedená metoda výběrů, jen aby zjistila, že tento balíček ignoruje nastavení v debco nf po počáteční instalaci. Před instalací můžete použít debconf k předběžnému nasazení, ale po instalaci ldap-auth-config upřednostňuje přepsat vaše nastavení debconf čímkoli, co je nastaveno v systémových konfiguračních souborech, které spravuje. Balíček pam-auth-config má stejné chování.
V tomto případě je také obtížné použít mechanismus EDITOR / VISUAL, protože ldap-auth-config jej vyvolá několikrát pro různé sady otázek. Lze s ním jednat snadněji pomocí skriptu expect nebo přímou úpravou konfiguračních souborů systému. Není vždy snadné vyhnout se očekávání!
Odpovědět
Moje verze očekávejte , že řešení nainstaluje soubor ArangoDB .deb pomocí 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)
Napsat komentář