Downgrading packages (Česky)
Související články
Tento průvodce vás provede procesem návratu k předchozí (starší) verzi balíčku. Návrat k předchozí verzi (tzv. downgrade) se obvykle nedoporučuje, ale může to být nutné v případě, že nový balíček obsahuje chyby.
Než přistoupíte k návratu k předchozí verzi, zvažte dobře důvody, proč to děláte. Pokud je to kvůli chybě v balíčku, pomozte prosím Archu i původním vývojářům tím, že obětujete několik minut nahlášení chyby pomocí Arch Bug Tracker nebo přímo vývojářům balíku. Protože je Arch Linux tzv. "rolling release" distribucí, budete pravděpodobě neustále setkávat s novými balíčky a čas od času i s nějakou tou chybou.
Jak my, tak původní vývojáři ocení vaše úsilí při ohlašování chyb. Každá doplňující informace může ušetřit hodiny testování a ladění a rovněž přispěje vydávání stabilnějšího software.
Contents
Důvody
Proces návratu k předchozí verzi spočívá v odebrání novějšího balíčku a instalace předchozí verze. Předchozí verzí se rozumí bezprostředně předchozí verze balíčku nebo prostě některá ze starších verzí.
Důvody pro návratu k předchozí verzi mezi jinými jsou: nová verze obsahuje chybu, nová verze neposkytuje požadovanou funkčnost nebo experimentujeme s verzemi balíčků. V každém případě je třeba zvážit zda návrat k předchozí verzi nepřinese více problémů než prostě počkat na vydání nové verze balíčku.
Návrat k předchozí verzi jednoho balíčku může způsobit, že bude nutné použít i jiné balíčky starších verzí. Pro ty, kteří nainstalovali větší množství experimentálních balíčků z repozitáře testing může být vhodnější přistoupit spíše k reinstalaci systému než ke snížení verze balíčku.
Podrobnosti
Každý uživatel musí mít na mysli následující. Především je třeba uvážit závislosti každé aplikace, jejíž verzi snižujeme. S novou verzí aplikace se občas mění verze knihoven, které požaduje a rovněž funkčnost poskytovaná knihovnami se verze od (i zcela) verze liší. Řešení pak vyžaduje návrat k předchozí verzi vyžadovaných knihoven (tedy dalších balíků).
Za druhé, je se ujistit, zda potřebné soubory starších verzí balíčků již nebyly ze systému odstraněny, případně zda jsou dostupné z jiných zdrojů. Repozitáře Arch linuxu respektují princip "rolling release" a neobsahují starší verze balíčků. Viz. níže.
Za třetí, musíme brát ohled na související konfigurační soubory a skripty. V současnosti se při návratu k předchozím verzím balíčků spoléháme na nástroj pacman, který nám ovšem nezaručí i odpovídající změnu konfiguračních souborů.
Problematika snižování verze balíčků souvisí s nejnovějším vývojem balíčkovacího systému. Celý koncept Arch Rollback Machine (viz níže) se aktivně vyvíjí a očekává se jeho použitelné začlenění do nástroje pacman. Až k tomu dojde, bude tento proces automatizován. Do té doby platí následující instrukce.
Jak se vrátit k předchozí verzi balíčku
- Otázka: Použil jsem příkaz
pacman -Syu
a balíček ABC byl aktualizován z verze N na verzi M. Nový balíček ovšem způsobuje problémy, jak se vrátím od verze balíčku M ke starší verzi tohoto balíčku - N? - Odpověď: Jednoduše se podívejte do adresáře
/var/cache/pacman/pkg
ve vašem systému, nachází-li se zde starší verze dotčeného balíčku. (Pokud jste v nedávné době nepoužili příkazpacman -Scc
, měli byste ho zde najít.) Pak nainstalujete starší verzi balíčku příkazem:pacman -U /var/cache/pacman/pkg/stary_balicek-stara_verze.pkg.tar.gz
.
Tento proces odebere nový balíček, vyřeší potřebné změny v závislostech mezi balíčky a nainstaluje starší verzi balíčku i s potřebnými závislostmi.
V uživatelském repozitáři AUR je nástroj downgradeAUR. Je to jednoduchý bash skript, který ověří v adresáři obsahujícím místní cache přítomnost starší verze balíčku. Nenajde-li ji zde, prohledá ARM a pak nabídne k výběru starší verzi balíčku k instalaci. V podstatě automatizuje proces naznačený výše. Viz. downgrade --help
pro návod k použití.
Mocnějším nástrojem je downgrader, který pracuje přímo s logy pacmana, umí hledat starší verze balíčků v adresáři cache, v repozitáři ARM a dokáže pracovat i se seznamy balíčků (pro případ kdy je systém nestabilní po aktualizaci více balíčků a vy nevíte, který to způsobuje).
Jak nalézt starší verzi balíčku
Zde máme tři možnosti.
Nesynchronizovaná zrcadla
Když nemůžete najít potřebnou starší verzi balíčku, podívejte se, jestli některé ze zrcadel oficiálních repozitářů není v nesynchronním stavu (out of sync). Na této stránce naleznete stav zrcadel repozitářů. (Poznámka: tato stránka je německy a nás zajímá v přehledu repozitářů sloupec "Verzögerung".)
Také můžete vyzkoušet tento repozitář, který ukládá staré balíčky:
Arch Rollback Machine
Arch Rollback Machine (ARM) obsahuje archiv všech oficiálních repozitářů zpětně až do listopadu 2009. Verze balíčků starších než 1.11.2009 již neobsahuje; balíčky od 1. října 2008 byly ztraceny.
Zajímá.li vás ARM, přečtěte si toto vlákno v diskusním fóru, dozvíte se nejnovější informace o jeho vývoji.
Jak se v tomto vláknu mimo jiné dozvíte cílem ARMu je poskytnou vhodně konstruovanou url, aby mohl jednoduchý skript využívající wget a pacman zajistit snadný návrat všech balíčků systému k určitému datu. Proces, jak by toto mohlo být automatizováno, není zatím jasný. Pokud ovšem budete chtít snížit verzi jednotlivého balíčku, jednoduše použijte toto vyhledávání v systému ARM.
Re-kompilace balíčku
V nejhorším případě - pokud není potřebná verze balíčku z žádného zdroje dostupná,budete muset sami zkompilovat starší verzi . K tomu budete potřebovat odpovídající PKGBUILD; můžete upravit stávající PKGBUILD, který poskytuje ABS, aby použil starší zdrojový kód nebo můžete získat zdrojové kódy z verzovacího systému GIT, který najdete zde: https://www.archlinux.org/packages/ a balíček vytvořit pomocí makepkg.
Další informace
Základní kontrolu nad správou balíčků nám poskytuje konfigurace uložená v souboru pacman.conf. Pro jeho úpravu je třeba se přihlásit v konzoli jako root a použít příkaz nano /etc/pacman.conf
. (V některých případech je to možné udělat pomocí správce běžícího v grafickém rozhraní jako je například Shaman, častěji je vhodnější použít CLI. Je doporučeno vyčistit tento soubor o balastu, když už je otevřen.
Změnit repozitáře ve kterých pacman hledá aktualizované balíčky je jednoduché. Zapsáním znaku "#" na začátek řádku s adresou libovolného repozitáře vyřadíme tento repozitář z těch, ve kterých pacman hledá aktualizované balíčky.
Například, přidání repozitáře ARM spočívá v pouhém zakomentování odpovídajícího oficiálního repozitáře a přidáním tohoto řádku:
[core] #Server=http://mirrors.gigenet.com/archlinux/core/os/i686 Server=http://arm.konnichi.com/2009/11/01/core/os/i686
Takto zadaný repozitář ARMu poskytne verze balíčků aktuální k 1.1.2009 (viz. část relativní cesty "../2009/11/01/..). Uvědomte si, že všechny repozitáře ARMu jsou otisky oficiálních repozitářů. Stačí pak jen nastavit ARM jako prioritní zrcadlo v souboru /etc/pacman.d/mirrorlist
zapsáním http://arm.konnichi.com/2009/11/01/$repo/os/i686 na první řádek, aby došlo k nahrazení všech oficiálních repozitářů uvedených v /etc/pacman.conf
a pak "aktualizovat" systém příkazy:
pacman -Syy # obnovení databáze balíčků pacman -Suu # snížení verze všech balíčků, jejichž verze v repozitáři je starší než ve vašem systému
To samo o sobě nezajistí hladký návrat k předchozímu stavu celého systému, často dojde ke konfliktům mezi verzemi balíčků. V takovém případě můžeme použít globální repozitář http://arm.konnichi.com/core/os/i686, který poskytuje všechny verze balíčků; povšimněte si chybějícího datumu v relativní cestě.
A co závislosti?
- Q: Nemohu snížit verzi balíčku ABC kvůli závislostem.
- A: Můžete při instalaci ignorovat závislosti použitím přepínače 'd', tj. pacman -Ud stary_balicek-stara_verze.pkg.tar.gz, ale riskujete, že se víc věcí rozbije než spraví.
Jak zabránit pacmanu v aktualizaci balíčku
- Q: Jak zabránit pacmanu v aktualizaci již instalované starší verze balíčku?
- A: Použijte proměnnou "IgnorePkg"v souboru
/etc/pacman.conf
.
"IgnorePkg = stary_balicek_1 stary_balicek_1 ..."
v souboru pacman.conf
přikáže pacmanu tyto balíčky při aktualizaci systému ignorovat.
Návrat k předchozímu stavu souborového systému
- Q: Chtěl bych se prostě vrátit do stavu v jakém byl můj systém včera.
- A: Toho snadno dosáhnete pomocí tzv. pravidelných snapshotů, které poskytuje systém LVM - viz. LVM.