Alimentarea valorilor de intrare pentru dpkg-reconfigure într-un mod non-interactiv
On februarie 18, 2021 by adminAș dori să configurez pachetul ubuntu prin dpkg-reconfigure cu toate valorile furnizate prin non- modul interactiv (în script).
De fapt, cazul meu este configurarea firebird ( http://www.firebirdsql.org/manual/ubusetup.html ), că atunci când se utilizează comanda:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
îmi cere cele 2 valori, unde răspunsurile ar fi „Y” și „newpwd”.
Exemplul de ieșire arată astfel:
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
Am „încercat here strings
printr-un script bash astfel:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Cu toate acestea, acest lucru nu a funcționat dintr-un anumit motiv și a cerut furnizarea valorilor.
Orice idee despre cum să alimentați valorile necesare pentru script?
Răspuns
Puteți folosi oricând așteptați-vă ca limbajul să automatizeze interacțiunea cu un proces care așteaptă introducerea acestuia pe un . Nu l-am folosit cu adevărat înainte, așa că nu pot adăuga cod aici, dar al tău este un caz de utilizare tipic.
UPDATE:
[Peter Butkovic] Consider că mă îndreaptă spre expect
ca o direcție corectă, acest script l-am încheiat cu:
#!/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
Comentarii
- mulțumesc că mi-ați indicat direcția corectă. Consider că acest răspuns este unul corect, deoarece a fost soluția ușor de implementat.
- Aș fi precaut cu privire la posibilitatea apariției unor probleme i18n, dar pentru ” utilizare la domiciliu ” pare sigur.
Răspuns
Pachetele Debian folosesc debconf pentru a colecta setările pentru timpul de instalare. Debconf acceptă mai multe frontend-uri pentru a solicita utilizatorului valori. Opțiunea -f
pentru dpkg-reconfigure
selectează frontend-ul debconf de utilizat.
readline
frontend este conceput pentru utilizare interactivă. Nu-l utilizați într-un script automat.
Dacă valorile implicite sunt bine, atunci pur și simplu utilizați frontendul noninteractive
.
Dacă doriți să furnizați valori diferite, aveți două opțiuni. Puteți rămâne cu noninteractive
frontend și preconizați baza de date debconf . Cel mai simplu mod de a face acest lucru este să instalați pachetul pe o singură mașină și să-l configurați interactiv, apoi să extrageți părțile relevante din /var/cache/debconf/config.dat
și să furnizați acest fișier debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
O altă metodă este utilizarea frontendului editor
și setarea variabilei de mediu VISUAL
(sau EDITOR
, dar VISUAL
are prioritate față de EDITOR
dacă este setat ) la un program care ia ca argument un fișier care conține setările curente și suprascrie acel fișier cu setările dorite.
Comentarii
- Nutrebuie să vă analizați
/var/cache/debconf/config.dat
. Puteți utilizadebconf-get-selections
din pachetuldebconf-utils
. A se vedea aceasta de exemplu. - De asemenea, nu ‘ nu sunt sigur dacă preconfigurarea este se potrivesc corect aici. ‘ vorbim despre rularea
dpkg-reconfigure
, ceea ce ‘ presupun că OP vrea să automatizează, deoarece ‘ o va face frecvent. - mulțumim pentru sugestii. a decis să meargă pentru aștepta script. ‘ nu a cercetat mai adânc aici.
- @JosephR. Într-adevăr,
debconf-get-selections
este probabil probabil util aici. Dacă Peter dorește să facă acest lucru adesea cu valori diferite, ar trebui să genereze unconfig.dat
în mod dinamic (este ‘ un format simplu). Acest lucru este mai ușor decâtexpect
.expect
este calea disperării. De exemplu, ‘ se va defecta dacă o nouă versiune a pachetului introduce o nouă întrebare (sau altfel aveți nevoie de un script mult mai sofisticat). - @ JosephR linkul despre pre-însămânțare pe care l-ați postat nu mai funcționează, încercați acest lucru: zacks.eu/debian-preseed
Răspuns
Utilizați comanda debconf-set-selections
pentru a insera noi valori în baza de date debconf (/var/cache/debconf/config.dat
).
Răspunsul Eli nu mi-a fost clar, așa că îl voi explica pas cu pas Etapa.
Primul lucru de făcut este să instalați pachetul interactiv și să obțineți selecțiile alese prin (schimbați firebird
la numele pachetului):
sudo debconf-get-selections | grep ^firebird
sau:
grep -C2 firebird /var/cache/debconf/config.dat
Apoi pregătiți baza de date debconf cu răspunsuri de debconf-set-selections
, de exemplu:
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
unde este sintaxa:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Iată un alt exemplu pentru pachetul ttf-mscorefonts-installer
:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Notă: Selecțiile de intrare pot fi fie din intrarea standard sau din fișier.
Verificați: man debconf-set-selections
pentru informații suplimentare.
Mod alternativ este a utiliza Kickstart .
Comentarii
- debconf-set-selections doesn ‘ t pare să aibă efect în toate cazurile, de exemplu: exim.
- debconf-set-selections NU rulează scriptul de configurare încorporat în pachetul deb pe care îl modificați ing. Setează doar selecțiile pe care le solicită pachetul, care este doar prima parte a acestuia. dpkg-reconfigure rulează ambele părți.
- Acesta ar trebui să fie răspunsul corect pentru această întrebare.
Răspuns
Mă uit de aproximativ o oră doar încercând să condensez soluția pentru aceasta într-un singur liner și am găsit-o în cele din urmă: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Acest lucru va forța debconf să utilizeze valorile implicite și să nu vă blocheze. De asemenea, puteți seta setările implicite de configurare pentru orice pachet Debian, consultați pagina de manual pentru mai multe informații.
Comentarii
- Nu este ‘ este la fel ca
sudo dpkg-reconfigure debconf -f noninteractive
sauexport DEBIAN_FRONTEND=noninteractive
?
Răspuns
Am încercat să fac reconfigurarea scriptată a setărilor LDAP (pachetul ldap-auth-config) folosind debconf-get-selections / set- metoda selections menționată mai sus, doar pentru a constata că acest pachet ignoră setările din debco nf după instalarea inițială. Puteți utiliza debconf pentru pre-seed înainte de instalare, dar după instalare ldap-auth-config preferă să suprascrie setările debconf cu orice este setat în fișierele de configurare a sistemului pe care le gestionează. Pachetul pam-auth-config are același comportament.
Mecanismul EDITOR / VISUAL este, de asemenea, dificil de utilizat în acest caz, deoarece ldap-auth-config îl invocă de mai multe ori pentru diferite seturi de întrebări. Poate fi tratat mai ușor cu un script expect sau prin modificarea directă a fișierelor de configurare a sistemului. Așadar, nu este întotdeauna ușor să eviți să ne așteptăm!
Răspuns
Versiunea mea a așteptați soluția pentru a instala ArangoDB .deb folosind 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)
Lasă un răspuns