Alimentando valores de entrada a dpkg-reconfigure de una manera no interactiva
On febrero 18, 2021 by adminMe gustaría configurar el paquete ubuntu a través de dpkg-reconfigure con todos los valores proporcionados a través de modo interactivo (en el script).
De hecho, mi caso es la configuración de Firebird ( http://www.firebirdsql.org/manual/ubusetup.html ), que al usar el comando:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
me pide los 2 valores, donde las respuestas serían «Y» y «newpwd».
La salida de muestra se ve así:
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
He probado here strings
mediante un script bash como este:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Sin embargo, esto no funcionó por alguna razón y solicitó que se proporcionaran los valores.
Alguna idea de cómo alimentar los valores requeridos para el script?
Respuesta
Siempre puede usar el esperar que el lenguaje automatice la interacción con un proceso que espera su entrada en un . Realmente no lo he usado antes, así que realmente no puedo agregar código aquí, pero el suyo es un caso de uso típico.
ACTUALIZACIÓN:
[Peter Butkovic] Considero apuntarme a expect
como una dirección correcta, este script terminó con:
#!/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
Comentarios
- gracias por señalarme la dirección correcta. Considero que esta respuesta es correcta, ya que fue la solución fácil de implementar.
- Desconfiaría de la posibilidad de problemas con i18n, pero para » uso doméstico » esto parece seguro.
Respuesta
Los paquetes Debian usan debconf para recopilar la configuración del tiempo de instalación. Debconf admite múltiples interfaces para solicitar valores al usuario. La opción -f
para dpkg-reconfigure
selecciona qué interfaz de debconf usar.
La readline
frontend está diseñado para uso interactivo. No lo use en una secuencia de comandos automática.
Si los valores predeterminados están bien, simplemente use la interfaz noninteractive
.
Si desea proporcionar valores diferentes, tiene dos opciones. Puede seguir con la noninteractive
frontend y preconfigurar la base de datos de debconf . La forma más fácil de hacer esto es instalar el paquete en una máquina y configurarlo de forma interactiva, luego extraer las partes relevantes de /var/cache/debconf/config.dat
y proporcionar este archivo a debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Otro método es usar la interfaz editor
y establecer la variable de entorno VISUAL
(o EDITOR
, pero VISUAL
tiene precedencia sobre EDITOR
si está configurado ) a un programa que toma un archivo que contiene la configuración actual como argumento y sobrescribe ese archivo con la configuración que desea.
Comentarios
- Nonecesita analizar
/var/cache/debconf/config.dat
usted mismo. Puede usardebconf-get-selections
del paquetedebconf-utils
. Consulte esto , por ejemplo. - Además, ‘ no estoy seguro de si la preconfiguración es la encaja aquí. ‘ estamos hablando de ejecutar
dpkg-reconfigure
, lo que ‘ supongo que el OP quiere automatizar porque ‘ lo hará con frecuencia. - gracias por las sugerencias. decidió ir por el guión esperado. No ‘ no investigaste más aquí.
- @JosephR. De hecho, es probable que
debconf-get-selections
sea útil aquí. Si Peter quiere hacer esto a menudo con valores diferentes, debe generar unconfig.dat
dinámicamente (es ‘ un formato simple). Esto es más fácil queexpect
.expect
es el camino de la desesperación. Por ejemplo, ‘ se descompondrá si una nueva versión del paquete introduce una nueva pregunta (o si necesita una secuencia de comandos mucho más sofisticada). - @ JosephR, el enlace sobre la preselección que publicó ya no funciona, intente esto: zacks.eu/debian-preseed
Responder
Utilice el comando debconf-set-selections
para insertar nuevos valores en la base de datos debconf (/var/cache/debconf/config.dat
).
La respuesta de Eli no fue clara para mí, así que la explicaré paso a paso paso.
Lo primero que debe hacer es instalar el paquete de forma interactiva y obtener las selecciones elegidas (cambie firebird
por el nombre de su paquete):
sudo debconf-get-selections | grep ^firebird
o:
grep -C2 firebird /var/cache/debconf/config.dat
Luego, pre-semilla la base de datos debconf con respuestas por debconf-set-selections
, por ejemplo:
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
donde la sintaxis es:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Aquí hay otro ejemplo para el paquete ttf-mscorefonts-installer
:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Nota: Las selecciones de entrada pueden ser desde la entrada estándar o el archivo.
Consulte: man debconf-set-selections
para obtener más información.
La forma alternativa es para usar Kickstart .
Comentarios
- debconf-set-selections doesn ‘ No parece tener efecto en todos los casos, por ejemplo: exim.
- debconf-set-selections NO ejecuta el script de configuración integrado en el paquete deb que está cambiando En g. Solo establece las selecciones que solicita el paquete, que es solo la primera parte. dpkg-reconfigure ejecuta ambas partes.
- Esta debería ser la respuesta correcta para esta pregunta.
Respuesta
He estado hurgando durante aproximadamente una hora tratando de condensar la solución para esto en una sola línea y finalmente la encontré: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Esto forzará a debconf a utilizar los valores predeterminados y no molestarle. También puede establecer los valores predeterminados de configuración para cualquier paquete Debian, consulte la página de manual para obtener más información.
Comentarios
- Isn ‘ t lo mismo que
sudo dpkg-reconfigure debconf -f noninteractive
oexport DEBIAN_FRONTEND=noninteractive
?
Respuesta
He estado intentando realizar una reconfiguración por script de la configuración LDAP (paquete ldap-auth-config) usando debconf-get-selections / set- método de selecciones mencionado anteriormente, solo para encontrar que este paquete ignora la configuración en debco nf después de la instalación inicial. Puede usar debconf para pre-sembrar antes de la instalación, pero después de la instalación, ldap-auth-config prefiere sobrescribir la configuración de debconf con lo que esté configurado en los archivos de configuración del sistema que administra. El paquete pam-auth-config tiene el mismo comportamiento.
El mecanismo EDITOR / VISUAL también es difícil de usar en este caso porque ldap-auth-config lo invoca varias veces para diferentes conjuntos de preguntas. Se puede manejar más fácilmente con un script de espera o modificando directamente los archivos de configuración del sistema. Por lo tanto, ¡no siempre es fácil evitar caer en las expectativas!
Responder
Mi versión de espera que la solución ArangoDB .deb instale 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)
Deja una respuesta