Syötetään tuloarvoja dpkg-configureen ei-vuorovaikutteisella tavalla
On helmikuu 18, 2021 by adminHaluan määrittää ubuntu-paketin dpkg-configure -toiminnon avulla kaikkien muiden kuin interaktiivinen tila (komentosarjassa).
Itse asiassa tapaukseni on tulilintujen kokoonpano ( http://www.firebirdsql.org/manual/ubusetup.html ), että kun käytetään komentoa:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
kysyy minulta kahta arvoa, joissa vastaukset olisivat ”Y” ja ”newpwd”.
Esimerkkilähtö näyttää tältä:
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
Olen kokeillut here strings
bash-komentosarjan kautta näin:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Tämä ei kuitenkaan toiminut jostain syystä ja pyysi arvojen toimittamista.
Ideoita syötteestä vaaditut arvot komentosarjaan?
Vastaa
Voit aina käyttää odottaa kielen automatisoimaan vuorovaikutuksen prosessin kanssa, joka odottaa sen syötteen . En ole tosiasiassa käyttänyt sitä aikaisemmin, joten en voi lisätä koodia tähän, mutta sinun on tyypillinen käyttötapaus.
PÄIVITYS:
[Peter Butkovic] Pidän minua osoittamaan expect
oikeaan suuntaan, päädyin tähän käsikirjoitukseen:
#!/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
Kommentit
- kiitos, että osoitit minulle oikean suunnan. Pidän tätä vastausta oikein, koska se oli helppo toteuttaa ratkaisu.
- Olisin varovainen i18n-ongelmien mahdollisuudesta, mutta ” kotikäyttöön ” tämä näyttää turvalliselta.
Vastaa
Debian-paketit käyttävät debconf asennusaika-asetusten keräämiseksi. Debconf tukee useita käyttöliittymiä ja pyytää käyttäjältä arvoja. -f
-vaihtoehto dpkg-reconfigure
valitsee käytettävän debconf-käyttöliittymän.
readline
käyttöliittymä on suunniteltu interaktiiviseen käyttöön. Älä käytä sitä automaattisessa komentosarjassa.
Jos oletusarvot ovat hyvät, käytä yksinkertaisesti noninteractive
-käyttöliittymää.
Jos haluat antaa erilaisia arvoja, sinulla on kaksi vaihtoehtoa. Voit pitää kiinni noninteractive
-käyttöliittymästä ja edeltänyt debconf-tietokannan . Helpoin tapa tehdä tämä on asentaa paketti yhteen koneeseen ja määrittää se vuorovaikutteisesti, pura sitten asiaankuuluvat osat tiedostosta /var/cache/debconf/config.dat
ja toimittaa tämä tiedosto debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Toinen tapa on käyttää editor
-käyttöliittymää ja asettaa ympäristömuuttuja VISUAL
(tai EDITOR
, mutta VISUAL
on etusijalla kohtaan EDITOR
, jos se on asetettu ) ohjelmaan, joka ottaa argumenttina tiedoston, joka sisältää nykyiset asetukset, ja korvaa tiedoston haluamillasi asetuksilla.
Kommentit
- Eisinun on jäsennettävä
/var/cache/debconf/config.dat
itse. Voit käyttäädebconf-get-selections
-pakettiadebconf-utils
. Katso esimerkiksi tämä . - En myöskään ole varma, onko esivuokraus sopii tähän. ’ puhumme käynnissä olevasta
dpkg-reconfigure
-kohdasta, jonka arvaan ’ mistä OP haluaa automatisoi, koska hän ’ tekee sen usein. - kiitos vihjeistä. päätti mennä odottamaan käsikirjoitusta. didn ’ ei tutkinut tarkemmin täällä.
- @JosephR. Todellakin
debconf-get-selections
on todennäköisesti hyödyllinen tässä. Jos Peter haluaa tehdä tämän usein eri arvoilla, hänen tulisi luodaconfig.dat
dynaamisesti (se ’ s on yksinkertainen muoto). Tämä on helpompaa kuinexpect
.expect
on epätoivon polku. Esimerkiksi se ’ hajoaa, jos paketin uusi versio tuo uuden kysymyksen (tai muuten tarvitset paljon kehittyneemmän komentosarjan). - @ Lähettämäsi esikylvöinti-linkki JosephR ei enää toimi, kokeile tätä: zacks.eu/debian-preseed
Vastaus
Käytä komentoja debconf-set-selections
lisätäksesi uusia arvoja debconf-tietokantaan (/var/cache/debconf/config.dat
).
Eli-vastaus ei ollut minulle selvä, joten selitän sen vaihe vaiheelta askel.
Ensimmäinen asia on asentaa paketti vuorovaikutteisesti ja saada valitut valinnat (muuta firebird
paketin nimeksi):
sudo debconf-get-selections | grep ^firebird
tai:
grep -C2 firebird /var/cache/debconf/config.dat
Esitä sitten debconf-tietokanta vastauksilla debconf-set-selections
, esimerkiksi:
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
missä syntakse on:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Tässä on toinen esimerkki ttf-mscorefonts-installer
-paketille:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Huomaa: Tulovalinnat voivat olla joko vakiotulosta tai tiedostosta.
Lisätietoja: man debconf-set-selections
.
Vaihtoehtoinen tapa on käyttää Kickstart .
Kommentit
- debconf-set-selections doesnt ’ ei näytä vaikuttavan kaikissa tapauksissa, esim. exim.
- debconf-set-selections EI suorita muuttamallesi deb-pakettiin sisäänrakennettua määrityskomentoa . Se asettaa vain valinnat, joita paketti pyytää, mikä on vasta sen ensimmäinen osa. dpkg-reconfigure suorittaa molemmat osat.
- Tämän pitäisi olla oikea vastaus tähän kysymykseen.
Vastaa
Olen tönäissyt noin tunnin ajan vain yrittänyt tiivistää tämän ratkaisun alas yhden linjan ja löysin sen lopulta: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Tämä pakottaa debconf: n käyttämään oletusasetuksia eikä vikailmoituksia. Voit myös määrittää kokoonpanon oletusasetukset mille tahansa Debian-paketille, katso lisätietoja sivulta .
Kommentit
- Ei ’ t sama kuin
sudo dpkg-reconfigure debconf -f noninteractive
taiexport DEBIAN_FRONTEND=noninteractive
?
Vastaa
Olen yrittänyt tehdä LDAP-asetusten komentosarjat (ldap-auth-config-paketti) käyttäen debconf-get-selections / set- edellä mainittua valintamenetelmää, vain sen havaitsemiseksi, että tämä paketti ohittaa debcon asetukset nf ensimmäisen asennuksen jälkeen. Voit käyttää debconf-tiedostoa esisiemen ennen asennusta, mutta asennuksen jälkeen ldap-auth-config mieluummin korvaa debconf-asetuksesi kaikilla, jotka on asetettu sen hallinnoimissa järjestelmän kokoonpanotiedostoissa. Paketin pam-auth-config käyttäytyminen on sama.
EDITOR / VISUAL -mekanismia on myös vaikea käyttää tässä tapauksessa, koska ldap-auth-config kutsuu sitä useita kertoja eri kysymysryhmille. Sitä voidaan käsitellä helpommin odotuskoodilla tai muokkaamalla suoraan järjestelmän kokoonpanotiedostoja. Joten, ei ole aina helppoa välttää odottamattomuutta!
Vastaa
Oma versioni odottaa -ratkaisua asentamaan ArangoDB .deb käyttämällä 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)
Vastaa