# Pacman/Pacnew and Pacsave (Italiano)

< Pacman

## Per Iniziare

Durante degli aggiornamenti o rimozioni di pacchetti, Pacman vi informerà di alcuni file (solitamente dei file di configurazione in `/etc`) che sono stati installati con una estensione `.pacnew` o di cui è stata fatta una copia con una estensione `.pacsave`.

Un file `.pacnew` può essere creato durante un aggiornamento con (`pacman -Syu`, `pacman -Su` o (`pacman -U`) per evitare di sovrascrivere una configurazione già esistente e precedentemente modificata dall'utente. Quando ciò accade, apparirà un messaggio nell'output di pacman simile al seguente:

    warning: /etc/pam.d/usermod installed as /etc/pam.d/usermod.pacnew

Un file `.pacsave` può essere creato durante la rimozione di un pacchetto (`pacman -R`), o durante una sostituzione di pacchetto (che forza la rimozione di un pacchetto che andrà a sostituire). Quando nel database di pacman c'è una registrazione che un certo file posseduto da un pacchetto debba essere salvato, verrà creato un file `.pacsave`. Quando ciò accade, pacman avviserà con un messaggio simile al seguente:

    warning: /etc/pam.d/usermod saved as /etc/pam.d/usermod.pacsave

Questi file richiedono l'intervento manuale dell'utente, ed è buona pratica sistemarli subito dopo una rimozione o aggiornamento di quei pacchetti. Se lasciati in giro, configurazioni errate possono portare a malfunzionamenti di qualche software o addirittura impedire l'avvio degli stessi.

## File di `backup` dei pacchetti

Un `PKGBUILD` di un pacchetto può specificare quali particolari file debbano essere preservati o backup-pati quando il relativo pacchetto venga aggiornato o rimosso. Per esempio, il `PKGBUILD` di `pulseaudio` contiene la riga seguente:

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

## Spiegazione dei Tipi

I tipi differenti dei file *.pac* sono i seguenti:

### .pacnew

Per ogni file `backup` di un pacchetto che sta per essere aggiornato, pacman fa una comparazione incrociata di tre md5sums generati dal contenuti dei file stessi: uno per la versione originariamente installata dal pacchetto, una per la versione corrente, e una per la versione che sta per essere installata con l'aggiornamento. Se il file attualmente presente sul sistema è stato modificato rispetto alla versione originale, pacman non può conoscere come importare questi cambiamenti nella nuova versione dello stesso file. Dunque, invece di sovrascrivere il file vecchio con quello nuovo, pacman salverà la nuova versione del file di configurazione con l'estensione .pacnew e lascerà la versione già presente sul sistema intatta.

Nel dettaglio, il controllo triplo delle somme MD5 possono portare ad uno dei casi seguenti:

originale = X, attuale = X, nuovo = X
  tutte e tre le versioni hanno contenuti identici, quindi sovrascrivere non porta a problemi. Verrà quindi sovrascritto il file e non verranno fatte notifiche all'utente. (nonostante ciò, questa sovrascrittura porterà all'aggiornamento delle informazioni del filesystem relative alle date di installazione, modifica e accesso oltre che alla modifica dei permessi se necessarie.)

originale = X, attuale = X, nuovo = Y
  la versione corrente del file è identica alla originale, ma la nuova versione è differente. Dato che l'utente non ha dunque modificato la configurazione attuale, e che la nuova versione può contenere miglioramenti o risoluzione di qualche bug, il file corrente verrà sovrascritto con quello nuovo, ancora senza notifiche all'utente. Questa è l'unica maniera che ha pacman per aggiornare i contenuti di un file.

originale = X, attuale = Y, nuovo = X
  il pacchetto originale e quello nuovo contengono la stessa versione del file, ma quello sul sistema è stato modificato. In questo caso, verrà lasciata la versione correntemente sul sistema, senza notifiche all'utente.

originale = X, attuale = Y, nuovo = Y
  la versione nuova è identica a quella installata sul sistema. Anche qui, verrà effettuata la sovrascrittura senza notifiche all'utente. (nonostante ciò, questa sovrascrittura porterà all'aggiornamento delle informazioni del filesystem relative alle date di installazione, modifica e accesso oltre che alla modifica dei permessi se necessarie.)

originale = X, attuale = Y, nuovo = Z
  le tre versioni del file sono differenti: in questo caso, verrà conservata la versione corrente al suo posto, la nuova versione verrà installata con estensione `.pacnew` e l'utente verrà avvisato dell'esistenza della nuova versione. In questo caso, l'utente deve intervenire per fare le dovute modifiche al nuovo file e sostituirlo manualmente alla versione corrente.

### .pacsave

Se l'utente ha modificato uno dei file specificati nella sezione `backup` allora questo file verrà rinominato con una estensione `.pacsave` e verrà conservato nel filesystem qualora il pacchetto venga rimosso.

Note: L'uso dell'opzione `-n` con il comando `pacman -R` equivarrà all'ordine di rimuovere qualsiasi file relativo al pacchetto da rimuovere; in questo caso nessun file `.pacsave` verrà creato.

### .pacorig

Quando un file (solitamente un file di configurazione posizionato in `/etc`) che viene incontrato durante un installazione o aggiornamento non appartiene a nessun pacchetto installato ma è elencato in quelli `backup` per il pacchetto che si sta per installare, sarà salvato con estensione `.pacorig` e rimpiazzato con la versione del pacchetto. Solitamente questo accade quando un file di configurazione è stato spostato da un pacchetto all'altro. Se questi file non fossero elencati nella sezione `backup`, pacman annullerebbe l'operazione per un errore di conflitto fra pacchetti.

Note: Poichè i file `.pacorig` tendono ad essere creati per circostanze speciali, non esiste un metodo universale per gestirli. Può essere utile consultare le Arch News per delle istruzioni in caso ci si trovi davanti a qualche aggiornamento particolare.

## Localizzare i file .pac*

Arch Linux non fornisce utility ufficiali per gestire i file `.pacnew`. L'utente dovrà dunque gestirseli a mano autonomamente. Per fare ciò, innanzitutto dovrete sapere dove sono. Quando si aggiorna o rimuove una gran quantità di pacchetti, potreste non accorgervi di qualche file *.pac* da sistemare. Per scoprire quali sono:

Sarà innanzitutto necessario cercarli nel luogo dove di solito sono i file di configurazione:

    find /etc -name "*.pac*"

o nel disco intero:

    find / -name "*.pac*"

In alternativa sarà possibile sfruttare il file log di pacman per trovarli:

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

Notare che il log non tiene traccia di quali file attualmente sono già presenti sul sistema o di quelli che sono già stati rimossi.

## Gestire i file .pacnew

Una volta che tutti i file `.pacnew` esistenti sono stati localizzati, l'utente potrà gestirli manualmente tramite varie utilità di unione come vimdiff[broken link: invalid section], ediff (parte di emacs), meld (una utilità grafica per Gnome), o Kompare (una utilità grafica per KDE GUI gui), per poi eliminare il file `.pacnew` una volta fatte le modifiche.

Ci sono alcune utilità di terze parti che forniscono vari livelli di automatizzazione di queste operazioni, disponibili sul repository community e su Arch User Repository:

- Dotpac - Script interattivo basilare, basato su interfaccia ncurses e che fornisce istruzioni passo-passo. Nessuna funzione di unione automatica.
- pacdiff - Script minimale e non documentato per terminale. Fa parte del pacchetto `pacman` nel repo `community`.
- pacdiffviewer - Completo Script da terminale con capacità di unione automatica. fa parte di `yaourt`.
- diffpacAUR[broken link: archived in aur-mirror] - Versione di pacdiffviewer autonoma.

### Usare Meld per sistemare le Differenze

È possibile usare meld in loop per effettuare tutti i cambiamenti necessari. Questo script vi permetterà di sistemare i file uno ad uno, permettendovi di osservarne le differenze:

    #!/bin/bash
    # pacnew-update - merge *.pacnew files with original configurations with meld

    pacnew=$(find /etc -type f -name "*.pacnew")

    for config in $pacnew; do
      # Merge with meld
      kdesu meld ${config%\.*} $config &
      wait
    done

Nello script viene utilizzato `kdesu`, comando della suite KDE, per ottenere permessi di root tramite GUI grafica. Usate `gksudo` se avete un sistema Gnome/XFCE. Eventualmente potete aggiungere la riga `sudo rm -i $config` per rimuovere i file dopo averli modificati, ma ciò richiederà privilegi particolari per l'utente. Una maniera migliore per fare ciò è eseguire il comando seguente dopo che avrete effettuato tutte le modifiche, in modo da eliminare tutti i file `*.pacnew`:

    find /etc -type f -name "*.pacnew" -exec rm {} \;

## Risorse

- Arch Linux Forums: Dealing With .pacnew Files (in inglese)

Category:

- Package management (Italiano)

Hidden categories:

- Pages with broken section links
- Pages with broken package links