Pacman (Čeština)/Pacnew and Pacsave (Čeština)
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.
-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.
.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 [[Official repositories (Čeština)#[community]|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[dead link 2021-05-17 ⓘ] - Plnohodnotný interaktivní konzolový skript se schopností automatického slučování. Je součástí balíčku yaourt.
- diffpacAUR[broken link: package not found] - Samostatná náhražka za pacdiffviewer.
Zdroje
- Fóra Arch Linuxu: Dealing With .pacnew Files (anglicky)