# Pacman/Pacnew and Pacsave (Español)

< Pacman

La traducción de este artículo o sección no refleja el texto original.

Motivos: desactualizada (Discusión)

## Introducción

Durante la actualización o remoción de paquetes, `pacman` a veces advierte que ciertos archivos — usualmente configuraciones en `/etc` — están siendo instalados con una extensión `.pacnew` o resguradados con una extensión `.pacsave`.

Un archivo `.pacnew` es creado durante la actualización de un paquete (`pacman -U` o `pacman -Su`) para evitar sobreescribir un archivo que ya existe y que fue previamente modificado por el usuario. Cuando esto pasa, un mensaje como el siguiente aparecerá en la salida de `pacman`:

    advertencia: /etc/pam.d/usermod instalado como /etc/pam.d/usermod.pacnew

Un archivo `.pacsave` es creado durante la eliminación de un paquete (`pacman -R`, el cual es también llamado automáticamente por `pacman -U` and `pacman -Su`) cuando la base de datos de `pacman` indica que cierto archivo perteneciente al paquete debe ser renombrado con una extensión `.pacsave` si fue previamente modificado por el usuario. Cuando esto pasa, `pacman` escribe un mensaje como el siguiente:

    advertencia: /etc/pam.d/usermod guardado como /etc/pam.d/usermod.pacsave

Estos archivos requieren intervención manual del usuario y es una buena práctica manejarlos inmediatamente después de cada invocación de `pacman`. Si se deja sin manejar ellos acumularán y recargarán el sistema de archivos, y el software instalado puede volverse mal configurado, causando comportamiento indeseado que puede ser dificil de resolver.

## Cuando Archivos .pac* Son Creados

### .pacnew

Por cada archivo en un paquete que se actualiza, `pacman` compara tres sumas MD5 generadas del contenido del archivo: una suma por la versión instalada por el paquete, una para la versión actual en el sistema de archivos, y una para la versión en el nuevo paquete. Si la versión del archivo actualmente en el sistema de archivos fue modificada de la versión originalmente instalada del paquete, `pacman` no puede saber como mezclar esos cambios con la versión nueva del archivo. Por lo tanto, en vez de sobreescribir el archivo modificado cuando actualiza, `pacman` guarda la nueva versión con una extensión `.pacnew` y deja la versión modificada intacta.

Yendo a más detalles, el resultado de la comparación de tres vías de sumas MD5 resulta en lo siguiente:

original = X, actual = X, nuevo = X
  Todos las tres versiones del archivo tienen contenido idéntico, así que sobreescribir no es un problema. Sobreescribir la versión actual con la nueva versión y no notificar al usuario. (Aunque el contenido del archivo es el mismo, sobreescribir actualizará la información del sistema del archivo acerca del archivo instalado, su fecha de modificación y acceso, y también se asegura que cualquier cambio de permisos de archivo sea aplicada.)

original = X, actual = X, nuevo = Y
  El contenido de la versión actual es idéntivo al original, pero la nueva versión es diferente. Ya que el usuario no ha modificado la versión actual y la nueva versión puede contener mejoras o corregir errores, sobreescribe la versión actual con la nueva versión y no notifica al usuario. Este es la única auto-mezcla de nuevos cambios que `pacman` puede realizar.

original = X, actual = Y, nuevo = X
  El paquete original y el nuevo contienen exactamente la misma versión del archivom pero la versión actual en el sistema de archivos ha sido modificada. Deja la versión actual en su lugar y descarta la nueva versión sin notificar al usuario.

original = X, actual = Y, nuevo = Y
  La nueva versión es idéntica a la actual. Sobreescribe la versión actual con la nueva versión y no notifica al usuario. (Aunque el contenido de los archivos es el mismo, esta sobreescritura actualizará la información del sistema de archivo acerca de la fecha de instalación, modificación y acceso del archivo, así como se asegura que cualquier cambio de permisos sea aplicado.)

original = X, actual = Y, nuevo = Z
  Todas las versiones son diferentes, así que deja la versión actual en lugar, instala la versión nueva con una extensión `.pacnew` y advierte al suario acerca de la nueva versión. El usuario se espera que manualmente mezcle cualquier cambio necesario de la nueva versión a la actual.

### .pacsave

Un archivo `PKGBUILD` de un paquete especifica que archivos deben ser guardar una copia de seguridad cuando el paquete es actualizado o removido.Por ejemplo, el `PKGBUILD` del `pulseaudio` contiene la siguiente línea:

    backup=('etc/pulse/client.conf' 'etc/pulse/daemon.conf' 'etc/pulse/default.pa')

Si el usuario ha modificado uno de los archivos especificados en `backup` entonces ese archivo será renombrado a la extensión `.pacsave` y permanecerá en el sistema de archivos después de que el resto del paquete sea actualizado o removido.

Note: El uso de la opción `-n` con `pacman -R` resultará en una completa eliminación de todos los archivos en el paquete especificado, así que ningún archivo `.pacsave` será creado.

### .pacorig

Cuando un archivo (usualmente una configuración ubicada en `/etc`) que es encontrado durante la instalación o actualización de un paquete no pertenece a ningún paquete instalado, pero es listado en `backup` (vea la sección `.pacsave` arriba) por el paquete en la operación actual, será guardado con una extensión `.pacorig` y reemplazado con la versión del archivo del paquete. Usualmente eso ocurre cuando un archivo de configuración ha sido movido de un paquete a otro. Si tal archivo no es listado en `backup`, `pacman` abortará con un error de conflicto de archivos.

Note: Ya que los archivos `.pacorig` tienden a ser creados para circunstancias especiales no hay una forma universal para manejarlos. Puede ser útil consultar las Noticias de Arch por instrucciones de manejo si es un caso conocido.

## Manejando Archivos .pac*

Siempre pon atención a la salida de `pacman`. Cuando actualizando o removiendo un gran número de paquetes, mensajes importantes pueden pasar de largo muy rápidamente o más allá del almacenamiento de la terminal; afortunadamente existen otras formas de descubrir si una operación de `pacman` creó algún archivo `.pac*`.

Si el usuario o un trabajo `cron` ha ejecutado `updatedb` para actualizar la base de datos de `locate` ya que `pacman` fue ejecutado recientemente, los archivos pueden ser encontrados con:

    locate .pac

Un método más lento (a menos que el usuario manualmente ejecute `updatedb` antes de `locate`) que siempre devuelve resultados actualizados a la fecha es el comando `find`:

    find / -name "*.pac*"

Buscando el historial de `pacman` con `egrep` puede ser tan rápido como el método `locate` anterior y siempre mostrará resultados actualizados a la fecha; sin embargo el historial no mantiene rastro de que archivos están actualmente en el sistema de archivos o cuales ya fueron removidos:

    egrep "pac(new|orig|save)" /var/log/pacman.log

Una vez que todos los archivos `.pac*` existentes han sido localizados, el usuario puede manejarlos manualmente usando herramientas de mezcla — como `vimdiff` (parte de `vim`), `ediff` (parte de `emacs`), `meld` (GTK+ GUI), o `kompare` (Qt GUI) — y borrando los archivos `.pac*` que el usuario esté seguro que no necesita más. Unas pocas utilidades de terceros proveen varios niveles de acceso de automatización de estas tareas están disponibles en el repositorio `comunitario` y en Arch User Repository (Arch no provee utilidades oficiales para el manejo de archivos `.pac*`):

- Dotpac — Programa básico e interactivo, con una interfaz de texto basado en "ncurses" y una útil guía. Sin características de mezcla o automezcla.
- `pacdiff` — Programa de cliente mínimo y no documentado. Parte del paquete de pacman en el repositorio `comunitario`.
- pacdiffviewer — Programa de cliente interactivo lleno de características con capacidad de auto-mezcla. Parte del paquete `yaourt`.

## Vínculos Externos

- Foros de Arch Linux: Dealing With .pacnew Files

Category:

- Package management (Español)