Cómo automatizar los archivos de configuración modificados durante la actualización de apt-get en Ubuntu 12

13

Me gusta usar "Navaja Cloudstack Server Create ..." para construir una nueva VM. Mi plantilla de arranque comienza con una "actualización apt-get" y "actualización apt-get -y".

La actualización luego se detiene con:

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

Entonces, realmente hay dos problemas:

En primer lugar, ¿puedo hacer que apt-get haga algo por defecto? Obviamente no hay forma de dar una respuesta.

En segundo lugar, ni siquiera sé cuál debería ser la respuesta correcta a la pregunta. El archivo de configuración que está reemplazando proviene de una plantilla. Todavía no he buscado lo que hace "nscd". (Presumiblemente, "Y" es la respuesta correcta, pero la investigación involucrada en el momento de la pregunta es desalentadora).

Mojo
fuente

Respuestas:

15

Puede pasar argumentos para evitar recibir mensajes. Esto funciona para mi;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(mi elección) hará que éstos "¿Qué desea hacer sobre el archivo de configuración modificado" preguntas por defecto a N(mantener su versión actualmente instalada)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

Advertencia : algunos archivos de configuración modificados pueden dañar su sistema si se mantienen y no son compatibles con la versión actualizada del paquete. Pruébelo antes de implementar en soluciones de automatización.

Jossef Harush
fuente
5

Si no desea responder ninguna pregunta interactiva, configure la DEBIAN_FRONTENDvariable de front end en noninteractive.

Esto puede ser tan fácil como DEBIAN_FRONTEND=noninteractive apt-get upgrade.

No recibirá mensajes y se elegirán los valores predeterminados. En la mayoría de los casos, esto significa que sus archivos de configuración no se cambiarán, y se le dejarán archivos con el mismo nombre *.dpkg-newpara todos los lugares donde no se tocó un archivo de configuración. Luego, puede resolver manualmente los cambios o enviar su configuración local al sistema utilizando un sistema de administración de configuración o lo que sea.

En segundo lugar, ni siquiera sé cuál debería ser la respuesta correcta a la pregunta.

Al presionar la tecla D se mostrará la diferencia, que luego puede inspeccionar. Si está seguro de que nunca ha cambiado manualmente ese archivo, elegir Y para reemplazarlo probablemente sea seguro (¡ha verificado que sus copias de seguridad se actualizan CORRECTAMENTE! ). Elegir N solo conserva el archivo antiguo, que también es seguro el 95% del tiempo, a menos que el paquete haya tenido cambios importantes, que generalmente están cubiertos en las notas de registro de cambios / versión que también ha leído antes de ejecutar el comando actualizar / dist-upgrade.

Después de eso, simplemente intente el comando primero en su entorno de prueba. A ver si las cosas no funcionan. Si realmente no está seguro, obtenga la diferencia y lea la documentación del paquete y la investigación.

Zoredache
fuente
Aconsejas DEBIAN_FRONTEND = no interactivo sobre --force-yes? Parece que el valor predeterminado es NO, y "sí" es más probable que sea correcto en este caso. (No puedo presionar ninguna tecla ya que no hay stdin.)
Mojo