A bemeneti értékek nem interaktív módon történő betáplálása a dpkg-configure-ba
On február 18, 2021 by adminSzeretném konfigurálni az ubuntu csomagot a dpkg-configure segítségével az összes, a interaktív mód (a szkriptben).
Valójában az én esetem a tűzmadarak konfigurálása ( http://www.firebirdsql.org/manual/ubusetup.html ), hogy a parancs használatakor:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
tőlem kéri a 2 értéket, ahol a válaszok “Y” és “newpwd” lennének.
A minta kimenete így néz ki:
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
Megpróbáltam a here strings
-t ilyen bash szkripten keresztül:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Ez azonban valamilyen oknál fogva nem működött, és az értékek megadását kérte.
Bármilyen ötlet a takarmányozáshoz a parancsfájlhoz szükséges értékek?
Válasz
Mindig használhatja a elvárja, hogy a nyelv automatizálja az interakciót egy olyan folyamattal, amely a bemenetét egy . Még nem használtam korábban, így nem tudok ide kódot adni, de a tiéd tipikus használati eset.
UPDATE:
[Peter Butkovic] Úgy vélem, hogy expect
re mutatok, mint helyes irányra, erre a szkriptre fejeztem be:
#!/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
Megjegyzések
- köszönöm, hogy jó irányba mutattál. Ezt a választ helyesnek tartom, mivel a könnyen megvalósítható megoldás volt.
- Óvatos lennék az i18n problémák lehetőségétől, de ” otthoni használatra. ” ez biztonságosnak tűnik.
Válasz
A Debian csomagok használata debconf a telepítési idő beállításainak összegyűjtéséhez. A Debconf több kezelőfelületet támogat, hogy értékeket kérjen a felhasználótól. A -f
opció a dpkg-reconfigure
opcióra kiválasztja a használni kívánt debconf kezelőfelületet.
A readline
kezelőfelületet interaktív használatra tervezték. Ne használja automatikus szkriptben.
Ha az alapértelmezett értékek rendben vannak, akkor egyszerűen használja az noninteractive
kezelőfelületet.
Ha különböző értékeket szeretne megadni, két lehetősége van. Maradhat az noninteractive
kezelőfelületnél, és előre megadta a debconf adatbázist . Ennek legegyszerűbb módja az, ha a csomagot egy gépre telepíti és interaktív módon konfigurálja, majd kivonja a megfelelő részeket a /var/cache/debconf/config.dat
fájlból, és átadja ezt a fájlt a debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Egy másik módszer a editor
kezelőfelület használata és a VISUAL
(vagy EDITOR
, de VISUAL
elsőbbséget élvez a EDITOR
felett, ha be van állítva ) egy olyan programhoz, amely argumentumként veszi az aktuális beállításokat tartalmazó fájlt, és felülírja a fájlt a kívánt beállításokkal.
Megjegyzések
- Nem
/var/cache/debconf/config.dat
magának kell elemeznie. Használhatja adebconf-get-selections
elemet adebconf-utils
csomagból. Lásd például ezt . - Ezenkívül nem vagyok biztos abban, hogy az elővetés a ide illik. ‘ beszélünk a
dpkg-reconfigure
futtatásáról, amiről ‘ sejtem, hogy az OP szeretné automatizálni, mert ‘ gyakran fogja csinálni. - köszönöm a tippeket. úgy döntött, hogy elvárja a várt forgatókönyvet. nem ‘ nem vizsgált itt mélyebben.
- @JosephR. Valószínűleg a
debconf-get-selections
valószínűleg hasznos lesz itt. Ha Peter ezt gyakran különböző értékekkel akarja megtenni, akkor dinamikusan generálnia kell egyconfig.dat
-et (ez ‘ s egy egyszerű formátumot). Ez könnyebb, mint aexpect
.expect
a kétségbeesés útja. Például ‘ meg fog bomlani, ha a csomag új verziója új kérdést vezet be (különben sokkal kifinomultabb szkriptre van szüksége). - @ JosephR az általad közzétett elővetésről szóló link már nem működik, próbáld ki: zacks.eu/debian-preseed
Válasz
A debconf-set-selections
paranccsal új értékeket illeszthet be a debconf adatbázisba (/var/cache/debconf/config.dat
).
Az Eli válasz nem volt világos számomra, ezért lépésről lépésre elmagyarázom lépés.
Az első dolog az, hogy interaktív módon telepítsd a csomagot, és megszerezd a választott elemeket (módosítsd a firebird
elemet a csomag nevére):
sudo debconf-get-selections | grep ^firebird
vagy:
grep -C2 firebird /var/cache/debconf/config.dat
Ezután előzze meg a debconf adatbázist , például:
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
ahol a szintaxis található:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Itt van egy másik példa a ttf-mscorefonts-installer
csomagra:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Megjegyzés: A bemeneti választások lehetnek a szokásos bemenetből vagy a fájlból.
További információkért ellenőrizze: man debconf-set-selections
.
Alternatív mód a a Kickstart használatához.
Megjegyzések
- a debconf-set-selections nem ‘ nem minden esetben érvényes, pl .: exim.
- A debconf-set-selections NEM futtatja a módosított deb csomagba épített konfigurációs szkriptet ing. Csak azokat a választásokat állítja be, amelyeket a csomag kér, amelyek csak az első része. A dpkg-reconfigure mindkét részt futtatja.
- Ez legyen a helyes válasz erre a kérdésre.
Válasz
Körülbelül egy órája piszkáltam, és megpróbáltam ennek megoldását egysorosra sűríteni, és végül megtaláltam: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Ez arra kényszeríti a debconf-et, hogy használja az alapértelmezéseket, és nem hibát okoz. Megadhatja a konfigurációs alapértelmezéseket is bármely Debian-csomaghoz, további információkért lásd a kezelési oldalt .
Megjegyzések
- Isn ‘ t ugyanaz, mint
sudo dpkg-reconfigure debconf -f noninteractive
vagyexport DEBIAN_FRONTEND=noninteractive
?
Válasz
Megpróbáltam az LDAP beállításait (ldap-auth-config csomag) szkriptekkel átkonfigurálni a debconf-get-selections / set- A fent említett kiválasztási módszer csak annak megállapítására, hogy ez a csomag figyelmen kívül hagyja a debco beállításait nf az első telepítés után. A debconf segítségével előválaszthatja a telepítést, de a telepítés után az ldap-auth-config inkább felülírja a debconf beállításait a kezelt rendszer konfigurációs fájlokban beállítottakkal. A pam-auth-config csomag ugyanúgy viselkedik.
Az EDITOR / VISUAL mechanizmust ebben az esetben is nehéz használni, mert az ldap-auth-config többször is meghívja a kérdéseket. Könnyebben kezelhető egy várakozó szkript segítségével, vagy a rendszer konfigurációs fájljainak közvetlen módosításával. Tehát nem mindig könnyű elkerülni a várakozás visszaesését!
Válasz
A várható megoldás az ArangoDB .deb telepítésére a 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)
Vélemény, hozzászólás?