Skip to content
Tiantan
Articles

Alimentarea valorilor de intrare pentru dpkg-reconfigure într-un mod non-interactiv

On februarie 18, 2021 by admin

Aș 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 utiliza debconf-get-selections din pachetul debconf-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 un config.dat în mod dinamic (este ‘ un format simplu). Acest lucru este mai ușor decât expect. 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 sau export 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)  

Written by admin

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Articole recente

  • Folosind un balun cu un dipol rezonant
  • Care este diferența dintre “ nu poate ” și “ nu poate ”? [duplicat]
  • La JFK, vă puteți deplasa între terminalele aeriene pe zborurile interne?
  • “ Apreciat profund ” sau “ apreciat cu drag ”
  • Ce înseamnă ' idei abstracte '? [închis]

Arhive

  • februarie 2021
  • ianuarie 2021
  • decembrie 2020
  • noiembrie 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