Eingabe von Eingabewerten für dpkg-Rekonfiguration auf nicht interaktive Weise
On Februar 18, 2021 by adminIch möchte das Ubuntu-Paket über dpkg-Rekonfiguration mit allen über nicht Interaktiver Modus (im Skript).
Tatsächlich handelt es sich bei meinem Fall um eine Firebird-Konfiguration ( http://www.firebirdsql.org/manual/ubusetup.html ), dass bei Verwendung des Befehls:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
mich nach den 2 Werten fragt, wobei die Antworten „Y“ und „newpwd“ wären.
Die Beispielausgabe sieht folgendermaßen aus:
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
Ich habe here strings
über ein Bash-Skript wie folgt versucht:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Dies funktionierte jedoch aus irgendeinem Grund nicht und forderte die Angabe der Werte an.
Ideen zum Füttern die erforderlichen Werte für das Skript?
Antwort
Sie können immer die verwenden Erwarten Sie, dass Sprache die Interaktion mit einem Prozess automatisiert, der seine Eingabe auf einem . Ich habe es vorher noch nicht wirklich verwendet, daher kann ich hier keinen Code hinzufügen, aber Ihr Fall ist ein typischer Anwendungsfall.
UPDATE:
[Peter Butkovic] Ich erwäge, mich auf expect
als richtige Richtung zu verweisen. Dieses Skript endete mit:
#!/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
Kommentare
- Vielen Dank, dass Sie mir die richtige Richtung gezeigt haben. Ich halte diese Antwort für richtig, da sie die einfach zu implementierende Lösung war.
- Ich würde die Möglichkeit von i18n-Problemen fürchten, aber für “ für den Heimgebrauch “ Dies scheint sicher zu sein.
Antwort
Verwendung von Debian-Paketen debconf zum Sammeln der Einstellungen für die Installationszeit. Debconf unterstützt mehrere Frontends, um den Benutzer zur Eingabe von Werten aufzufordern. Die Option -f
für dpkg-reconfigure
wählt das zu verwendende Debconf-Frontend aus.
Die readline
Frontend ist für die interaktive Verwendung konzipiert. Verwenden Sie es nicht in einem automatischen Skript.
Wenn die Standardwerte in Ordnung sind, verwenden Sie einfach das Frontend noninteractive
.
If Wenn Sie unterschiedliche Werte angeben möchten, haben Sie zwei Möglichkeiten: Sie können sich an das Frontend noninteractive
halten und die Debconf-Datenbank vorab festlegen Der einfachste Weg, dies zu tun, besteht darin, das Paket auf einem Computer zu installieren und interaktiv zu konfigurieren, dann die relevanten Teile aus /var/cache/debconf/config.dat
zu extrahieren und diese Datei an debconf zu liefern:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Eine andere Methode besteht darin, das Frontend editor
zu verwenden und die Umgebungsvariable VISUAL
(oder EDITOR
, aber VISUAL
hat Vorrang vor EDITOR
, wenn es festgelegt ist ) zu einem Programm, das eine Datei mit den aktuellen Einstellungen als Argument verwendet und diese Datei mit den gewünschten Einstellungen überschreibt.
Kommentare
- NeinSie müssen
/var/cache/debconf/config.dat
selbst analysieren. Sie könnendebconf-get-selections
aus dem Paketdebconf-utils
verwenden. Siehe dies zum Beispiel. - Außerdem bin ich ‚ nicht sicher, ob die Voreinstellung die ist hier richtig passen. Wir ‚ sprechen über das Ausführen von
dpkg-reconfigure
, was ich ‚ vermute, dass das OP dies möchte automatisieren, weil er ‚ es häufig tun wird. - danke für Hinweise. entschied sich für das erwartete Skript. ‚ hat hier nicht tiefer nachgeforscht.
- @JosephR. In der Tat ist
debconf-get-selections
hier wahrscheinlich nützlich. Wenn Peter dies häufig mit unterschiedlichen Werten tun möchte, sollte er dynamisch einconfig.dat
generieren (es ist ein einfaches Format ‚). Dies ist einfacher alsexpect
.expect
ist der Weg der Verzweiflung. Zum Beispiel wird ‚ zusammenbrechen, wenn eine neue Version des Pakets eine neue Frage einführt (oder Sie benötigen ein weitaus komplexeres Skript). - @ JosephR Der Link zum Pre-Seeding, den Sie gepostet haben, funktioniert nicht mehr. Versuchen Sie Folgendes: zacks.eu/debian-preseed
Antwort
Verwenden Sie den Befehl debconf-set-selections
, um neue Werte in die Debconf-Datenbank einzufügen ().
Eli-Antwort war mir nicht klar, daher erkläre ich es Schritt für Schritt Schritt.
Das erste, was Sie tun müssen, ist, das Paket interaktiv zu installieren und die ausgewählte Auswahl zu erhalten, indem Sie (firebird
in Ihren Paketnamen ändern):
sudo debconf-get-selections | grep ^firebird
oder:
grep -C2 firebird /var/cache/debconf/config.dat
Setzen Sie dann die Debconf-Datenbank mit Antworten von , zum Beispiel:
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
wobei die Syntax lautet:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Hier ist ein weiteres Beispiel für das Paket ttf-mscorefonts-installer
:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Hinweis: Die Eingabeauswahl kann entweder erfolgen von der Standardeingabe oder der Datei.
Überprüfen Sie: man debconf-set-selections
für weitere Informationen.
Alternativ ist Kickstart verwenden.
Kommentare
- debconf-set-selections nicht ‚ scheint nicht in allen Fällen wirksam zu werden, z. B.: exim.
- debconf-set-selections führt NICHT das Konfigurationsskript aus, das in das von Ihnen geänderte Deb-Paket integriert ist ing. Es werden nur die Auswahlen festgelegt, nach denen das Paket fragt. Dies ist nur der erste Teil davon. dpkg-recfigure führt beide Teile aus.
- Dies sollte die richtige Antwort auf diese Frage sein.
Antwort
Ich habe ungefähr eine Stunde lang herumgestöbert, nur um die Lösung für dieses Problem auf einen Einzeiler zu reduzieren, und schließlich habe ich es gefunden: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Dadurch wird debconf gezwungen, die Standardeinstellungen zu verwenden und Sie nicht zu nerven. Sie können die Konfigurationsstandards auch für jedes Debian-Paket festlegen. Weitere Informationen finden Sie in der Manpage .
Kommentare
- Isn ‚ entspricht
sudo dpkg-reconfigure debconf -f noninteractive
oderexport DEBIAN_FRONTEND=noninteractive
?
Antwort
Ich habe versucht, die Skript-Rekonfiguration der LDAP-Einstellungen (Paket ldap-auth-config) mithilfe von debconf-get-selections / set- durchzuführen. Auswahlmethode oben erwähnt, nur um festzustellen, dass dieses Paket Einstellungen in Debco ignoriert nf nach der Erstinstallation. Sie können debconf verwenden, um vor der Installation einen Pre-Seed durchzuführen. Nach der Installation überschreibt ldap-auth-config jedoch lieber Ihre debconf-Einstellungen mit den Einstellungen in den von ihm verwalteten Systemkonfigurationsdateien. Das Paket pam-auth-config hat das gleiche Verhalten.
Der EDITOR / VISUAL-Mechanismus ist in diesem Fall ebenfalls schwierig zu verwenden, da ldap-auth-config ihn mehrmals für verschiedene Fragensätze aufruft. Es kann einfacher mit einem Expect-Skript oder durch direktes Ändern der Systemkonfigurationsdateien gehandhabt werden. Es ist also nicht immer einfach zu vermeiden, dass man zurückfällt, um zu erwarten!
Antwort
Meine Version der erwarten , dass die ArangoDB .deb mit 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)
Schreibe einen Kommentar