La respuesta proporcionada por Ryan Thomson se dirigía al camino correcto. Aún así no podría hacer el trabajo (la razón de los detalles se proporciona a continuación).
La forma correcta (y más fácil) de hacerlo está utilizando -o
con el apt
pasar opción dpkg y forzar a dpkg
preguntarle si desea conservar los archivos de configuración modificados o los originales. El comando será así:
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
Esto te haría una pregunta como
Configuration file '/etc/foo/foo.conf'
==> Modified (by you or by a script) since installation.
Version in package is the same as at last installation.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ?
Debe presionar Y o I para instalar el archivo de configuración original del mantenedor del paquete. Incluso puede presionar D para ver cuáles son los cambios o iniciar un shell raíz con la opción Z para solucionarlo.
Nota: Después del reemplazo, encontrará su archivo modificado comoat /etc/foo/foo.conf.dpkg-old
¿Por qué otras opciones no funcionarían?
Porque las otras opciones en dpkg no funcionan bien. Las opciones que se ocupan de los archivos de configuración de un paquete son
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
no funcionaría cuando la versión del paquete no cambie. De la página man
Si se modificó un archivo de conffg y la versión del paquete cambió, siempre instale la nueva versión sin preguntar , a menos que también se especifique --force-confdef , en cuyo caso se prefiere la acción predeterminada.
--force-confmiss
funciona con archivos faltantes. También fallará cuando la versión no haya cambiado. Citando la página man
confmiss: si falta un archivo de configuración y la versión del paquete cambió, siempre instale el archivo de configuración que falta sin preguntar. Esto es peligroso, ya que significa no preservar un cambio (eliminación) realizado en el archivo
--force-confold
retendrá la versión modificada solo si se cambia la versión . Para el mismo paquete, también fallará. Citando la página man
confold: si se modificó un archivo de conffg y la versión del paquete cambió, mantenga siempre la versión anterior sin preguntar , a menos que también se especifique --force-confdef , en cuyo caso se prefiere la acción predeterminada.
--force-confdef
también fallará porque la acción predeterminada es retener el archivo anterior (indicado por el mensaje que se muestra con --force-confask
. Tiene una línea (Y/I/N/O/D/Z) [default=N]
que significa que la retención es predeterminada. Ver arriba). Y si --force-confnew
se especifica pero la versión no cambia, eso tampoco funcionará. Citando la página man
confdef: si se modificó un archivo de conffg y la versión del paquete cambió, elija siempre la acción predeterminada sin preguntar. Si no hay una acción predeterminada, dejará de preguntarle al usuario a menos que también se indique --force-confnew o --force-confold , en cuyo caso lo usará para decidir la acción final.
Solo --force-confask
funcionará, porque explícitamente te hará la pregunta incluso cuando la versión sea la misma. Citando la página man
confask: si se ha modificado un archivo de configuración, siempre ofrezca reemplazarlo con la versión del paquete, incluso si la versión del paquete no cambió (desde dpkg 1.15.8). Si cualquiera de --force-confmiss , --force-confnew , --force-confold o --force-confdef también se proporciona, se utilizará para decidir la acción final.
Espero que eso ayude.
foo
, lo que sibar
depende defoo
y no me quiero quitarbar
?