Fournir des valeurs dentrée à dpkg-reconfigure de manière non interactive
On février 18, 2021 by adminJe voudrais configurer le package ubuntu via dpkg-reconfigure avec toutes les valeurs fournies via non- mode interactif (dans le script).
En fait, mon cas est la configuration de Firebird ( http://www.firebirdsql.org/manual/ubusetup.html ), que lors de lutilisation de la commande:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
me demande les 2 valeurs, où les réponses seraient « Y » et « newpwd ».
Exemple de sortie ressemble à ceci:
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
Jai essayé here strings
via un script bash comme celui-ci:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Cependant, cela na pas fonctionné pour une raison quelconque et il a demandé que les valeurs soient fournies.
Des idées sur comment alimenter les valeurs requises pour le script?
Réponse
Vous pouvez toujours utiliser le sattendre à ce que le langage automatise linteraction avec un processus qui attend son entrée sur un . Je ne lai pas vraiment utilisé auparavant, donc je ne peux pas vraiment ajouter de code ici, mais le vôtre est un cas dutilisation typique.
UPDATE:
[Peter Butkovic] Je pense me diriger vers expect
comme une bonne direction, ce script que jai terminé par:
#!/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
Commentaires
- merci de mavoir indiqué la bonne direction. Je considère cette réponse comme correcte car cétait la solution facile à mettre en œuvre.
- Je me méfierais de la possibilité de problèmes i18n, mais pour » un usage domestique » cela semble sûr.
Réponse
Les paquets Debian utilisent debconf pour collecter les paramètres d’installation. Debconf prend en charge plusieurs interfaces pour inviter lutilisateur à saisir des valeurs. Loption -f
de dpkg-reconfigure
sélectionne linterface debconf à utiliser.
Le readline
frontend est conçu pour une utilisation interactive. Ne lutilisez pas dans un script automatique.
Si les valeurs par défaut sont correctes, utilisez simplement linterface noninteractive
.
Si vous voulez fournir des valeurs différentes, vous avez deux options. Vous pouvez vous en tenir à linterface noninteractive
et préconfigurer la base de données debconf . Le moyen le plus simple de le faire est dinstaller le package sur une machine et de le configurer de manière interactive, puis dextraire les parties pertinentes de /var/cache/debconf/config.dat
et de fournir ce fichier à debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Une autre méthode consiste à utiliser linterface editor
et à définir la variable denvironnement VISUAL
(ou EDITOR
, mais VISUAL
a la priorité sur EDITOR
sil est défini ) vers un programme qui prend un fichier contenant les paramètres actuels comme argument et écrase ce fichier par les paramètres souhaités.
Commentaires
- Nonbesoin danalyser
/var/cache/debconf/config.dat
vous-même. Vous pouvez utiliserdebconf-get-selections
du packagedebconf-utils
. Voir ceci par exemple. - De plus, je ‘ ne sais pas si la préconfiguration est la bon ajustement ici. Nous ‘ parlons d’exécuter
dpkg-reconfigure
, ce que je ‘ deviner que le PO veut automatiser parce quil ‘ le fera fréquemment. - merci pour les conseils. a décidé dopter pour un script attendu. n ‘ pas enquêté plus en profondeur ici.
- @JosephR. En effet,
debconf-get-selections
est susceptible dêtre utile ici. Si Peter veut faire cela souvent avec des valeurs différentes, il doit générer unconfig.dat
dynamiquement (il ‘ est un format simple). Cest plus simple queexpect
.expect
est le chemin du désespoir. Par exemple, il ‘ échouera si une nouvelle version du package introduit une nouvelle question (ou bien vous avez besoin dun script beaucoup plus sophistiqué). - @ JosephR le lien sur le pré-amorçage que vous avez posté ne fonctionne plus, essayez ceci: zacks.eu/debian-preseed
Réponse
Utilisez la commande debconf-set-selections
pour insérer de nouvelles valeurs dans la base de données debconf (/var/cache/debconf/config.dat
).
La réponse Eli nétait pas claire pour moi, je vais donc lexpliquer étape par étape étape.
La première chose à faire est dinstaller le package de manière interactive et dobtenir les sélections choisies en (remplacez firebird
le nom de votre package):
sudo debconf-get-selections | grep ^firebird
ou:
grep -C2 firebird /var/cache/debconf/config.dat
Puis pré-ensemencez la base de données debconf avec les réponses de debconf-set-selections
, par exemple:
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
où la syntaxe est:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Voici un autre exemple de package ttf-mscorefonts-installer
:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Remarque: Les sélections dentrée peuvent être soit à partir de lentrée standard ou du fichier.
Vérifiez: man debconf-set-selections
pour plus dinformations.
Une autre méthode est pour utiliser Kickstart .
Commentaires
- debconf-set-selections ne ‘ t semble prendre effet dans tous les cas, par exemple: exim.
- debconf-set-selections nexécute PAS le script de configuration intégré au paquet deb que vous changez ing. Il définit uniquement les sélections demandées par le package, lesquelles ne sont que la première partie de celui-ci. dpkg-reconfigure exécute les deux parties.
- Cela devrait être la bonne réponse pour cette question.
Answer
Cela fait environ une heure que jessaie juste de condenser la solution pour cela en une seule ligne et je lai finalement trouvée: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Cela forcera debconf à utiliser les valeurs par défaut et ne vous dérangera pas. Vous pouvez également définir les valeurs par défaut de configuration pour nimporte quel paquet Debian, voir la page de manuel pour plus dinformations.
Commentaires
- Isn ‘ t identique à
sudo dpkg-reconfigure debconf -f noninteractive
ouexport DEBIAN_FRONTEND=noninteractive
?
Réponse
Jai essayé de faire une reconfiguration scriptée des paramètres LDAP (paquet ldap-auth-config) en utilisant le debconf-get-selections / set- méthode de sélection mentionnée ci-dessus, uniquement pour constater que ce package ignore les paramètres de debco nf après linstallation initiale. Vous pouvez utiliser debconf pour pré-amorcer avant linstallation, mais après linstallation, ldap-auth-config préfère écraser vos paramètres debconf avec tout ce qui est défini dans les fichiers de configuration système quil gère. Le package pam-auth-config a le même comportement.
Le mécanisme EDITOR / VISUAL est également difficile à utiliser dans ce cas car ldap-auth-config linvoque plusieurs fois pour différents ensembles de questions. Il peut être géré plus facilement avec un script expect, ou en modifiant directement les fichiers de configuration du système. Donc, il « nest pas toujours facile de ne pas tomber en arrière!
Réponse
Ma version du attend la solution pour installer ArangoDB .deb en utilisant 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)
Laisser un commentaire