Pacman/Pacnew and Pacsave (Česky)

From ArchWiki
Jump to: navigation, search

Na začátek

Při upgradech nebo odstraňování balíčků vás Pacman čas od času informuje o souborech (obvykle konfiguračních v /etc), jenž jsou instalovány s příponou .pacnew nebo zálohovány s příponou .pacsave.

Soubor .pacnew může být vytvořen při upgradu balíčku (pacman -Syu, pacman -Su nebo pacman -U), aby se zamezilo přepsání již existujícího souboru, který byl předtím změněn uživatelem. Když tato situace nastane, ve výstupu pacmanu se objeví zpráva podobná následující:

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

Soubor .pacsave může být vytvořen při odstraňování balíčku (pacman -R) nebo jeho upgradu (balíček musí být nejdříve odstraněn). Když má databáze pacmanu záznam o tom, že by měl být jistý soubor vlastněný balíčkem zálohován, vytvoří soubor .pacsave. Když tato situace nastane, pacman zobrazí zprávu podobnou následující:

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

Tyto soubory vyžadují ruční zásah uživatele a je dobrým zvykem po každém upgradu nebo odstranění balíčku tuto situaci nějak vyřešit. V opačném případě mohou nesprávné konfigurace vyústit ve špatnou funkci softwaru nebo jeho neschopnost se vůbec spustit.

backup soubory balíčků

Soubor PKGBUILD balíčkům určuje, které soubory mají být při upgradu nebo odstranění dotyčného balíčku zachovány nebo zálohovány. Například PKGBUILD pro pulseaudio obsahuje následující řádek:

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

Popis druhů

Různé druhy *.pac* souborů.

.pacnew

Pro každý backup soubor, který je v právě upgradovaném balíčku, pacman vzájemně porovnává tři kontrolní součty MD5 generované z obsahu daného souboru: jeden součet pro verzi nainstalovanou původním balíčkem, jeden pro verzi momentálně sídlící v souborovém systému a jeden pro verzi z nového balíčku. Pokud současná verze ze souborového systému byla v minulosti ručně upravena, pacman nedokáže sloučit tyto změny s novou verzí souboru. Proto při upgradu namísto přepisování změněného souboru pacman uloží novou verzi s příponou .pacnew a ponechá stávající změnenou verzi nedotčenou.

Pokud zajdeme více do detailů, toto trojcestné srovnání součtů MD5 může skončit s jedním z následujících výsledků:

původní = X, současný = X, nový = X 
Všechny tři verze souboru mají shodný obsah, přepsání tedy není problém. Přepsat současnou verzi novou verzí a neoznamovat nic uživateli. (I když je obsah souboru shodný, toto přepsání zaktualizuje v souborovém systému informace ohledně času instalace, změny a přístupu k souboru. Zajistí též jakoukoliv změnu přístupových práv souboru.)
původní = X, současný = X, nový = Y 
Obsah současné verze je shodný s původní, ale nová verze je rozdílná. Jelikož uživatel v minulosti neupravil současnou verzi a nová verze může obsahovat vylepšení nebo opravy, přepsat současnou verzi novou verzí a neoznamovat nic uživateli. Toto je jediné automatické slučování změn, které pacman dokáže vykonávat.
původní = X, současný = Y, nový = X 
Původní balíček a nový balíček oba obsahují shodnou verzi souboru, ale verze momentálně sídlící v souborovém systému byla změněna. Ponechat současnou verzi, jak je, a zahodit novou verzi bez oznámení uživateli.
původní = X, současný = Y, nový = Y 
Nová verze je shodná se současnou. Přepsat současnou verzi novou verzí a neoznamovat nic uživateli. (I když je obsah souboru shodný, toto přepsání zaktualizuje v souborovém systému informace ohledně času instalace, změny a přístupu k souboru. Zajistí též jakoukoliv změnu přístupových práv souboru.)
původní = X, současný = Y, nový = Z 
Všechny tři verze jsou rozdílné. Ponechat současnou verzi, nainstalovat novou verzi s příponou .pacnew a varovat uživatele ohledně nové verze. Od uživatele se očekává, že ručně sloučí jakékoliv nutné změny z nové verze do té současné.

.pacsave

Pokud uživatel změnil některý ze souborů jmenovaných v backup, pak bude k tomuto souboru přidána přípona .pacsave a zůstane v souborovém systému i poté, co bude odstraněn zbytek balíčku.

Note: Použití volby -n spolu s pacman -R způsobí kompletní odstranění všech souborů v zadaném balíčku. Žádné .pacsave soubory tedy vytvořeny nebudou.

.pacorig

Když je při instalaci balíčku spatřen soubor (obvykle nějaká konfigurace v /etc), který nepatří žádnému nainstalovanému balíčku, ale je vypsán v poli backup pro momentálně zpracovávaný balíček, bude uložen s příponou .pacorig a nahrazen verzí z balíčku. To se obvykle stává, když je konfigurační soubor přesunut z jednoho balíčku do jiného. Pokud takový soubor není součástí pole backup, pacman oznámí konflikt souborů a ukončí svoji činnost.

Note: Jelikož .pacorig soubory vznikávají za zvláštních okolností, není pro jejich zpracování žádný jednotný postup. Pokud se o tomto případu ví, obvykle naleznete řešení tohoto konfliktu na Arch News.

Lokalizace *.pac* souborů

Arch Linux pro .pacnew soubory neposkytuje žádné oficiální nástroje. Budete je muset řešit sami; několik pomocných nástrojů je předvedeno v následující sekci. Pro ruční řešení budete nejprve muset tyto soubory nalézt. Při upgradu nebo odstraňování velkého počtu balíčků mohou být *.pac* soubory snadno přehlédnuty. Abyste zjistili, zda byly jakékoliv *.pac* vytvořeny:

Pro jednoduché hledání v místě, kde je uložena většina globálních konfigurací:

find /etc -name "*.pac*"

nebo na celém disku:

find / -name "*.pac*"

Případně pro jejich vyhledání použijte logy z pacmana:

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

Poznámka: z logu přímo nezjistíte, které z těchto souborů jsou momentálně ještě v souborovém systému a které již byly smazány.

Nástroje pro soubory .pacnew

Jakmile máte všechny existující .pacnew soubory lokalizovány, můžete je vyřešit ručně pomocí běžných nástrojů pro slučování, např. vimdiff (anglicky), ediff (součást emacs (anglicky)), meld (grafický nástroj pro Gnome) nebo Kompare (grafický nástroj pro KDE). Poté .pacnew soubory smažte.

V repozitáři community a uživatelském repozitáři (AUR) je dostupných několik utilit, které poskytují různou úroveň automatizace těchto úkolů:

  • Dotpac - Základní interaktivní skript s textovým rozhraním založeným na ncurses a užitečnou nápovědou. Žádné pomůcky pro ruční ani automatické slučování.
  • pacdiff - Velmi minimální a nezdokumentovaný konzolový skript. Je součástí balíčku pacman v repozitáři community.
  • pacdiffviewer - Plnohodnotný interaktivní konzolový skript se schopností automatického slučování. Je součástí balíčku yaourt.
  • diffpacAUR[broken link: archived in aur-mirror] - Samostatná náhražka za pacdiffviewer.

Zdroje