Introducir valores de entrada para dpkg-reconfigure de una manera no interactiva

23

Me gustaría configurar el paquete ubuntu a través de dpkg-reconfigure con todos los valores suministrados a través del modo no 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 pregunta por 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

Lo he intentado here stringsmediante 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 suministraran los valores.

¿Alguna idea de cómo alimentar los valores necesarios para el script?

Peter Butkovic
fuente

Respuestas:

11

Siempre puede usar el lenguaje de espera para automatizar la interacción con un proceso que espera su entrada en un tty. 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.

ACTUALIZAR:

[Peter Butkovic] Considero señalarme expectcomo una dirección correcta, este guión que 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
Joseph R.
fuente
Gracias por señalarme la dirección correcta. Considero que esta respuesta es correcta, ya que fue la solución fácil de implementar.
Peter Butkovic
Sería cauteloso con la posibilidad de problemas de i18n, pero para "uso doméstico" esto parece seguro.
Jasen
20

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 -fopción para dpkg-reconfigureseleccionar qué interfaz de debconf usar.

La readlineinterfaz está diseñada para uso interactivo. No lo use en un script automático.

Si los valores predeterminados están bien, simplemente use la noninteractiveinterfaz.

Si desea proporcionar valores diferentes, tiene dos opciones. Puede seguir con la noninteractiveinterfaz y preseleccionar 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 /var/cache/debconf/config.daty suministrar este archivo a debconf:

DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic

Otro método es usar el editorfrontend y establecer la variable de entorno VISUAL(o EDITOR, pero VISUALtiene prioridad sobre EDITORsi está configurada) en un programa que toma un archivo que contiene la configuración actual como argumento y sobrescribe ese archivo con la configuración que desee.

Gilles 'SO- deja de ser malvado'
fuente
66
No es necesario que /var/cache/debconf/config.datte analices a ti mismo. Puedes usar debconf-get-selectionsdesde el debconf-utilspaquete. Ver esto por ejemplo.
Joseph R.
Además, no estoy seguro de si la preselección es la adecuada aquí. Estamos hablando de correr dpkg-reconfigure, lo que supongo que el OP quiere automatizar porque lo hará con frecuencia.
Joseph R.
gracias por pistas decidió ir a esperar guión. No investigé más a fondo aquí.
Peter Butkovic
2
@JosephR. De hecho, debconf-get-selectionses probable que sea útil aquí. Si Peter quiere hacer esto a menudo con valores diferentes, debe generar config.datdinámicamente (es un formato simple). Esto es más fácil que expect. expectEs el camino de la desesperación. Por ejemplo, se desglosará si una nueva versión del paquete presenta una nueva pregunta (o si necesita un script mucho más sofisticado).
Gilles 'SO- deja de ser malvado'
@JosephR el enlace sobre la siembra previa que publicaste ya no funciona, prueba esto: zacks.eu/debian-preseed
cjohnson318
13

Use el debconf-set-selectionscomando 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 lo explicaré paso a paso.

Lo primero que debe hacer es instalar el paquete de forma interactiva y obtener las selecciones elegidas por (cambiar firebirdel nombre de su paquete):

sudo debconf-get-selections | grep ^firebird

o:

grep -C2 firebird /var/cache/debconf/config.dat

Luego pre-siembra la base de datos debconf con respuestas de 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 es la sintaxis:

echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections

Aquí hay otro ejemplo para el ttf-mscorefonts-installerpaquete:

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections

Nota: Las selecciones de entrada pueden ser de la entrada estándar o del archivo.

Consultar: man debconf-set-selectionspara más información.


La forma alternativa es usar Kickstart .

kenorb
fuente
debconf-set-selections no parece tener efecto en todos los casos, por ejemplo: exim.
Jasen
1
debconf-set-selections NO ejecuta el script de configuración integrado en el paquete deb que está cambiando. Solo establece las selecciones que solicita el paquete, que es solo la primera parte del mismo. dpkg-reconfigure ejecuta ambas partes.
Fred
4

He estado hurgando durante aproximadamente una hora solo tratando de condensar la solución para esto en una sola línea y finalmente lo encontré: debconf-set-selections

echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections

Esto obligará a debconf a usar los valores predeterminados y no molestarte. 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.

Eli
fuente
¿No es lo mismo que sudo dpkg-reconfigure debconf -f noninteractiveo export DEBIAN_FRONTEND=noninteractive?
kenorb
0

He estado intentando hacer una reconfiguración programada de la configuración de LDAP (paquete ldap-auth-config) usando el método debconf-get-selections / set-selections mencionado anteriormente, solo para descubrir que este paquete ignora la configuración en debconf después de la instalación inicial. Puede usar debconf para pre-inicializar antes de la instalación, pero después de instalar ldap-auth-config prefiere sobrescribir sus configuraciones 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 volver a esperar!

Ferg
fuente