Quiero revertir un archivo /etc/
a su forma original instalada. He editado el archivo desde que se instaló. ¿Cómo puedo revertir este archivo de configuración? Apt es lo suficientemente inteligente como para no sobrescribir los archivos de configuración editados, entonces, ¿cómo le digo que quiero que lo haga?
Por el bien de la discusión, digamos que quiero revertir el archivo /etc/foo.conf
del paquete foo
.
configuration
apt
Ryan C. Thompson
fuente
fuente
foo
, lo que sibar
depende defoo
y no me quiero quitarbar
?Respuestas:
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 elapt
pasar opción dpkg y forzar adpkg
preguntarle si desea conservar los archivos de configuración modificados o los originales. El comando será así:Esto te haría una pregunta como
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 como
at /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--force-confmiss
funciona con archivos faltantes. También fallará cuando la versión no haya cambiado. Citando la página man--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--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 manSolo
--force-confask
funcionará, porque explícitamente te hará la pregunta incluso cuando la versión sea la misma. Citando la página manEspero que eso ayude.
fuente
--force-confnew
? Lo intentéapt-get […] -y
, pero eso no funcionó. (Si no es posible, edite también la respuesta para decirlo).--force-confnew
sin preguntar? Creo que ese es el caso predeterminado, lo que significa que conservará sus cambios. siempre--force-confask
haceapt
la pregunta, de lo contrario, usaría otras opciones si ya conoce la respuesta.-o Dpkg::Options::=--force-confnew
sin éxito (como tu respuesta predijo) y no leí el mensaje de error cuando lo intenté-o Dpkg::Options::="--force-confask --force-confnew"
. Sin embargo,apt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
sobrescribió correctamente los archivos de configuración de cambio de$package
. ¡Gracias!Si el daño ya está hecho, aquí hay una forma de línea de comandos para recuperar la versión oficial del archivo de configuración. Primero, descargue el archivo del paquete (ya sea con el
apt-get --download-only
siguiente, o desde la página del paquete en packages.ubuntu.com ), luego extraiga su contenido en una ubicación temporal. Luego puede copiar el archivo en/etc
. Asegúrese de respetar los permisos originales (la mayoría de los archivos/etc
son propiedad de root y modo 644 (es decir, legibles por palabras y de escritura de root), pero cada excepción está ahí por una razón importante).Tenga en cuenta que esto no se aplica a los archivos de configuración que no son de un paquete, como
/etc/fstab
o/etc/passwd
. Si pierde estos, está solo. (La mayoría dependen mucho del sistema de todos modos).Para el futuro, recomiendo usar etckeeper . Instale el paquete y ejecútelo
sudo etckeeper init
. Esto configura el control de versiones para todos los archivos en/etc
. No necesita hacer nada más para administrar etckeeper; solo necesita interactuar con él cuando desea realizar una operación de control de versiones, como hacer referencia a archivos más antiguos. Los archivos se confirman automáticamente antes y después de cada ejecución de apt y todas las noches (esto es configurable).Por defecto, en Ubuntu, etckeeper usa Bazaar . Cambie la configuración
/etc/etckeeper/etckeeper.conf
antes de ejecutaretckeeper init
si prefiere Darcs, Git o Mercury.Con Bazaar, para volver
/etc/foo.conf
a la última versión comprometida:Si desea retroceder más en el tiempo, use
sudo bzr log foo.conf
para ver el historial del archivo, ysudo bzr revert -r 42 foo.conf
si ha determinado querevno: 42
es la revisión a la que desea volver.fuente
Puede descargar el paquete manualmente desde packages.ubuntu.com , extraer el archivo y reemplazar su versión con él.
O podrías:
El segundo se siente mucho más brutal. También podría borrar otra configuración si usa más de un archivo. El primero es más clics y esfuerzo, pero parece mucho más seguro.
Para el segundo, es posible que pueda eliminar el archivo y - reinstalar podría reemplazarlo. Si es así, eso sería más seguro.
fuente
apt-get --reinstall purge package
no dañará a los dependientes.Dependiendo del paquete, puede encontrar un archivo de configuración predeterminado en
/usr/share/doc/foo/examples
.fuente
Use Synaptic (el ajuste de Ubuntu es aún más conveniente, pero Synaptic es más sencillo) y elija "eliminar completamente el paquete". Esto eliminará todos los archivos de configuración (¡es posible que desee hacer una copia de seguridad de estos archivos!).
Luego reinstalar. Ya terminaste
Con Ubuntu Tweak, obtienes aún más opciones para la limpieza, la renovación y las copias de seguridad de la configuración. Quizás quieras echarle un vistazo. Está en el centro de software.
ps: Synaptic también usa la opción de "purga" (como mencionó anteriormente Oli ...), solo con una GUI para un manejo más cómodo.
fuente
Finalmente encontré la respuesta que recordaba vagamente de hace años:
El argumento "confnew" obliga a dpkg a reemplazar los archivos de configuración modificados con los proporcionados por el paquete, y el "confmiss" hace lo mismo con los archivos de configuración que se han eliminado.
De acuerdo con este chatlog , también puede usar estas opciones a través de apt-get de la siguiente manera:
lo que le ahorra la necesidad de encontrar el archivo deb usted mismo.
Obviamente, estas opciones son peligrosas y tienen el potencial de eliminar archivos de configuración importantes del sistema si se usan incorrectamente.
fuente
--force-confnew
es que solo instalará nuevos archivos de configuración si la versión cambia. Si está reinstalando la misma versión, no instalará un nuevo archivo de configuración, ya que lo he probado explícitamente--force-confmiss
solo instalará un nuevo archivo de configuración si se cambia la versión y falta la configuración. Como se describe en la página del manualconfmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.