Pacman (Português)/Pacnew and Pacsave (Português) - ArchWiki

Jump to content
From ArchWiki
< Pacman (Português)
Status de tradução: Esse artigo é uma tradução de Pacman/Pacnew and Pacsave. Data da última tradução: 2020-06-21. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Quando o pacman remove um pacote que tem um arquivo de configuração, ele normalmente cria uma cópia backup daquele arquivo de configuração e anexa .pacsave ao nome do arquivo. Da mesma forma, quando o pacman atualiza um pacote que inclui um novo arquivo de configuração pelo mantenedor, comparando-o com a configuração atualmente instalada, ele salva um arquivo .pacnew com a nova configuração. O pacman fornece um aviso quando esses arquivos são escritos.

## Por que esses arquivos são criados

Um arquivo .pacnew pode ser criado durante uma atualização de pacote (`pacman -Syu`, `pacman -Su` ou `pacman -U`) para evitar sobrescrever um arquivo que já existe e foi previamente modificado pelo usuário. Quando isso acontecer, uma mensagem como a seguir aparecerá na saída do pacman:

    atenção: /etc/pam.d/usermod instalado como /etc/pam.d/usermod.pacnew

Um arquivo .pacsave pode ser criado durante a remoção de um pacote (`pacman -R`) ou na atualização de um pacote (o pacote deve ser removido primeiro). Quando a base de dados do pacman tiver um registro de que deve-se fazer backup de um certo arquivo de um pacote, ele vai criar um arquivo .pacsave. Quando isso acontece, o pacman emite uma mensagem como a seguir:

    atenção: /etc/pam.d/usermod salvo como /etc/pam.d/usermod.pacsave

Esses arquivos exigem intervenção manual do usuário e é uma boa prática tratar deles imediatamente a cada atualização ou remoção de pacote. Se não for tratado, configurações inadequadas podem resultar em função inadequada do software ou o software sendo incapaz de funcionar por completo.

## Arquivos backup do pacote

Um arquivo PKGBUILD do pacote especifica quais arquivos devem ser preservados ou cujo backup deve ser armazenado quando o pacote é atualizado ou removido. Por exemplo, o PKGBUILD do pulseaudio contém a seguinte linha:

    backup=(etc/pulse/{daemon.conf,default.pa,system.pa})

Para evitar que um pacote sobrescreva um certo arquivo, veja Pacman (Português)#Pular pacotes para não serem atualizados.

## Tipos explicados

### .pacnew

Para cada um dos #Arquivos backup do pacote sendo atualizado, o pacman compara três md5sums gerados do conteúdo do arquivo: uma soma para a versão originalmente instalada pelo pacote, um para a versão atualmente no sistema de arquivo e uma para a versão no novo pacote. Se a versão do arquivo atualmente no sistema de arquivos foi modificada da versão originalmente instalada pelo pacote, o pacman não consegue saber como mesclar essas alterações com a nova versão do arquivo. Portanto, em vez de escrever no arquivo modificado ao atualizar, o pacman salva a nova versão com uma extensão .pacnew e deixa a versão modificada sem alterá-la.

Entrando nos detalhes, os resultados da comparação de soma do MD5 em três vias é um dos seguintes:

original = X, atual = X, novo = X
  Todas as três versões do arquivo possuem conteúdo idêntico, então sobrescrever não é um problema. Sobrescreve a versão atual com a nova versão e não notifica o usuário (apesar do conteúdo do arquivo ser o mesmo, isso vai sobrescrever as informações do sistema de arquivos a cerca dos tempos de instalação, modificação e acesso do arquivo, bem como garante que qualquer alteração de permissão do arquivo seja aplicada).

original = X, atual = X, novo = Y
  O conteúdo da versão atual é idêntico ao da original, mas a nova versão é diferente. Já que o usuário não modificou a versão atual e a nova versão pode conter melhorias ou correções de erros, sobrescreve a versão atual com a nova versão e não notifica o usuário. Esse é a única automesclagem de novas alterações que o pacman é capaz de realizar.

original = X, atual = Y, novo = X
  O pacote original e o novo pacote contêm exatamente a mesma versão do arquivo, mas a versão atualmente no sistema foi modificada. Deixa a versão atual no lugar e descarta a nova versão sem notificar o usuário.

original = X, atual = Y, novo = Y
  A nova versão é idêntica à versão atual. Sobrescreve a versão atual com a nova versão e não notifica o usuário (apesar do conteúdo do arquivo ser o mesmo, isso vai sobrescrever as informações do sistema de arquivos a cerca dos tempos de instalação, modificação e acesso do arquivo, bem como garante que qualquer alteração de permissão do arquivo seja aplicada).

original = X, atual = Y, nova = Z
  Todas as três versões são diferentes, então deixa a versão atual no lugar, instala a nova versão com uma extensão .pacnew e avisa o usuário sobre a nova versão. Espera-se que o usuário mescle manualmente quaisquer alterações necessárias da nova versão na versão atual.

Raramente, quando um pacote atualizado inclui um arquivo backup que a versão anterior não incluía, a situação é corretamente lidada como X/Y/Y ou X/Y/Z, com X sendo um valor não existente.

### .pacsave

Se o usuário modificou um dos arquivos especificados em `backup`, então aquele arquivo será renomeado com a extensão .pacsave e vai permanecer no sistema de arquivos após o resto do pacote ser removido.

Nota: O uso da opção `-n` com `pacman -R` vai resultar na remoção completa de todos os arquivos no pacote especificado, então nenhum arquivo .pacsave será criado.

## Localizando arquivos .pac*

O pacman não lida com arquivos .pacnew automaticamente: você deve mantê-los você mesmo. Algumas poucas ferramentas são apresentadas na próxima seção. Para fazer isso manualmente, você primeiro terá que localizá-los. Ao atualizar ou remover um grande número de pacotes, arquivos .pac* atualizados serão perdidos. Para descobrir se algum arquivo .pac* foi instalado, use um entre os seguintes:

- Para procurar no `/etc`, onde a maioria das configurações globais estão armazenadas:

      $ find /etc -regextype posix-extended -regex ".+\.pac(new|save)" 2> /dev/null

  ou pesquisar em todo o disco substituindo `/etc` por `/` no comando anterior.
- Se instalado, locate também pode ser usado. Primeiro reindexe a base de dados:

      # updatedb

  . Então, execute:

      $ locate --existing --regex "\.pac(new|save)$"

- Use o log do pacman para localizá-los:

      $ grep --extended-regexp "\.pac(new|save)" /var/log/pacman.log

  Note que o log não mantém rastro dos arquivos atualmente no sistema de arquivos nem daqueles que já foram removidos; o comando acima vai listar todos os arquivos .pac* que já existiram em seu sistema. Para apenas obter os 10 mais recentes arquivos .pac*, faça um pipe do resultado para `tail`.

## Gerenciando arquivos .pac*

### pacdiff

pacman-contrib fornece pacdiff, uma ferramenta simples para gerenciar arquivos pac*. Com isso, pode-se vai pesquisar por todos os arquivos .pacnew e .pacsave e pedir por quaisquer ações neles. Ele usa vimdiff por padrão, mas você pode especificar uma ferramenta diferente com `DIFFPROG=seu_editor pacdiff`. Veja List of applications/Utilities#Comparison, diff, merge para outras ferramentas de comparação comum.

### Utilitários de terceiros

Alguns poucos utilitários de terceiros fornecendo vários níveis de automação para essas ferramentas estão disponíveis no AUR.

Você pode usar uma das seguintes ferramentas:

- dotpac — Script interativo básico com interface de texto baseada no ncurses e um passo a passo útil. Nenhum recurso de mesclagem ou automesclagem.

  https://github.com/AladW/dotpac || dotpacAUR

- etc-update — Utilitário do Gentoo compatível com outras distribuições, incluindo o Arch. Ele fornece uma CLI simples para ver, mesclar e editar interativamente alterações. Alterações triviais, como comentários, podem ser mescladas automaticamente.

  https://wiki.gentoo.org/wiki/Handbook:Parts/Portage/Tools#etc-update || etc-update

- p3wm — Mesclagem em três vias de arquivos .pacnew. Ele consegue mesclar automaticamente alterações triviais. Se ocorrer conflitos, ele vai iniciar o vimdiff, meeld ou kdiff3 para resolvê-los.

  https://github.com/5long/p3wm || p3wmAUR

- pacnews-git — Um script simples visando localizar todos os arquivos .pacnew, para então editá-los com vimdiff.

  https://github.com/pbrisbin/scripts/blob/master/pacnews || pacnews-gitAUR

- pacfiles-mode — Um pacote para Emacs para gerenciar e mesclar arquivos .pacnew.

  https://github.com/UndeadKernel/pacfiles-mode || disponível em melpa

## Veja também

- Fórum do Arch Linux: Dealing with .pacnew files ("Lidando com arquivos .pacnew")

Category:

- Package management (Português)