Pacman (Česky)
| Shrnutí |
|---|
| Souhrnné informace o správci balíčků Arch Linuxu. |
| Přehled |
| Balíčky v Arch Linuxu jsou sestavovány pomocí makepkg a pro každý balíček zvláštního sestavovacího skriptu (známý jako PKGBUILD). Jakmile je software zabalen, může být nainstalován a spravován s pacmanem. PKGBUILDy pro software v oficiálních repozitářích jsou dostupné ve stromu ABS; další tisíce jsou dostupné z (nepodpodporovaného) Arch User Repository. |
| Související |
| Downgrading Packages (Česky) |
| Improve Pacman Performance (Česky) |
| pacman GUI Frontends (Česky) |
| pacman Rosetta (Česky) |
| pacman Tips (Česky) |
| Manuálové stránky (anglicky) |
| libalpm(3) |
| makepkg(8) |
| makepkg.conf(5) |
| pacman(8) |
| pacman.conf(5) |
| PKGBUILD(5) |
| repo-add(8) |
Správce balíčků pacman je jedním z hlavních rysů Arch Linuxu. Kombinuje jednoduchý binární formát balíčků se sestavovacím systémem jednoduchým na použití (viz makepkg a Arch Build System). Cílem pacmana je umožnit jednoduchou správu balíčků, ať už pocházejí z oficiálních repozitářů Archu nebo jsou sestaveny samotnými uživateli.
pacman udržuje systém aktuální pomocí synchronizace seznamů balíčků s hlavním serverem. Tento model server/klient též umožňuje stáhnutí/instalaci balíčků jedním jednoduchým příkazem, a to včetně všech vynucených závislostí.
Narozdíl od většiny ostatních správců balíčků je pacman napsán v programovacím jazyku C. Používá formát balíčků .tar.gz a v současnosti migruje k používání formátu .tar.xz (komprese LZMA2).
Konfigurace
Konfigurace pacmana se nachází v souboru /etc/pacman.conf. Ten je místem, kde si uživatel nakonfiguruje program tak, aby pracoval požadovaným způsobem. Zevrubné informace o konfiguračním souboru můžete nalézt v manuálové stránce pacman.conf (anglicky).
Hlavní volby
Hlavní volby jsou v sekci [options]. Pro informace týkající se toho, co zde můžete udělat, si přečtěte si manuálovou stránku nebo si prohlédněte výchozí pacman.conf.
Český překlad bohužel v současnosti neexistuje.
Zamezení upgradu balíčku
Abyste zamezili upgradu některého specifického balíčku, uveďte ho v souboru tímto způsobem:
IgnorePkg=kernel26
Pokud zde potřebujete uvést vícero balíčků, oddělte je mezerami.
Zamezení upgradu skupiny balíčků
Stejně jako u jednotlivých balíčků je možné zamezit i upgradu celé skupiny balíčků:
IgnoreGroup=gnome
Repozitáře
Tato sekce definuje, které repozitáře mají být použity. Mohou zde být uvedeny přímo nebo zahrnuty z jiného souboru.
Všechny oficiální repozitáře používají shodný soubor se seznamem zrcadel /etc/pacman.d/mirrorlist, jenž pro umožnění udržování takovéhoto jednotného seznamu využívá proměnnou "$repo". Ta se při každém zahrnutí seznamu zrcadel v určitém repozitáři nahradí za jméno onoho repozitáře.
Následuje příklad pro oficiální repozitáře, jenž využívá zrcadla ze zmíněného souboru.
[core] # Sem přidejte své upřednostňované servery, budou použity jako první Include=/etc/pacman.d/mirrorlist
[extra] # Sem přidejte své upřednostňované servery, budou použity jako první Include=/etc/pacman.d/mirrorlist
[community] # Sem přidejte své upřednostňované servery, budou použity jako první Include=/etc/pacman.d/mirrorlist
Použití
Pro další ukázky schopností pacmana vizte anglickou manuálovou stránku pacmana. Ukázky uvedené níže jsou pouze malým vzorkem operací, jež mohou být provedeny.
Instalace balíčků
Abyste nainstalovali buď jeden balíček nebo seznam balíčků (včetně závislostí), použijte následující příkaz:
# pacman -S jméno_prvního_balíčku jméno_druhého_balíčku
Někdy je od jednoho balíčku vícero verzí v různých repozitářích (např. extra a testing). Můžete určit, který z nich má být nainstalován:
# pacman -S extra/jméno_balíčku # pacman -S testing/jméno_balíčku
Odstraňování balíčků
Pro odstranění konkrétního balíčku, ponechávaje všechny jeho závislosti i nadále nainstalované:
# pacman -R jméno_balíčku
Pro odstranění balíčku a všech jeho závislostí, jež nejsou vyžadovány žádným jiným nainstalovaným balíčkem:
# pacman -Rs jméno_balíčku
Při odstraňování jistých aplikací pacman ukládá důležité konfigurační soubory s koncovkou .pacsave. Abyste smazali i tyto záložní soubory, použijte volbu -n:
# pacman -Rn jméno_balíčku # pacman -Rns jméno_balíčku
Upgrade balíčků
pacman dokáže zaktualizovat všechny nainstalované balíčky pomocí jednoho jediného příkazu. V závislosti na tom, jak je váš systém aktuální, to může chvíli trvat. Tento příkaz sesynchronizuje databáze repozitářů a zároveň zaktualizuje balíčky v systému:
# pacman -Syu
pacman je mocný nástroj pro správu balíčků, ale nepokouší se "udělat všechno možné". Pokud vás to mate, přečtěte si článek o principech Arch Linuxu. Místo toho by měli být uživatelé ostražití a za údržbu vlastního systému brát odpovědnost. Například, když vykonováte aktualizaci systému (pacman -Syu), je nezbytné, abyste si přečetli veškerý výstup z pacmana a používali zdravý rozum.
Namísto okamžitého aktualizování, jakmile jsou balíčky dostupné, by měli uživatelé mít na paměti, že aktualizace kritického balíčku může mít nedozírné následky. To ku příkladu znamená, že není moudré aktualizovat xorg-server, máte-li za chvíli předvádět důležitou prezentaci. Raději aktualizujte ve volném čase a buďte připraveni se popást s jakýmkoliv problémem, který kvůli aktualizaci může nastat.
Dále je zárukou navštívení domovské stránky Arch Linuxu. Když aktualizace vyžadují zásah uživatele, často se na https://archlinux.org objeví příslušné oznámení, které o tom pojednává. Krátce po tom, co se stanou aktualizace dostupné na zrcadlech, se na též fóru obvykle objeví příspěvky popisující ten samý problém a případně poskytující jeho řešení.
Když je prováděna samotná aktualizace, nezapomeňte si pročíst zprávy vypsané pacmanem. Balíčkovači často popisují změny a očekávané problémy, a vedou uživatele k příslušnému zdroji nebo stránce na této wiki. Vždy si pročtěte veškeré informace ve výstupu pacmana!
Dotazování databází balíčků
Je-li uvedena volba -Q, pacman se dotazuje lokální databáze balíčků, viz:
$ pacman -Q --help
Je-li uvedena volba -S, dotazuje se databáze synchronizované se servery, viz:
$ pacman -S --help
pacman může v databázi vyhledávat určité balíčky, a to jak podle jmen tak podle popisů balíčků:
$ pacman -Ss balíček
Pro prohledání již nainstalovaných balíčků:
$ pacman -Qs balíček
Pokud chcete širší informace o některém balíčku:
$ pacman -Si balíček
A opět pro lokálně nainstalované balíčky:
$ pacman -Qi balíček
Pro zobrazení seznamu souborů nainstalovaných některým balíčkem:
$ pacman -Ql balíček
Též se můžete dotázat databáze, zda-li neví, k jakému balíčku patří určitý soubor v souborovém systému.
$ pacman -Qo /cesta/k/souboru
Pro vypsání všech balíčků, které již nadále nejsou potřebné jako závislosti pro jiné balíčky (sirotci):
$ pacman -Qdt
Další příkazy
Stáhnout balíček, ale neinstalovat ho:
# pacman -Sw balíček
Instalace "lokálního" balíčku, který nepochází z repozitáře:
# pacman -U /cesta/k/balíčku/jméno_balíčku-verze.pkg.tar.gz
Instalace "vzdáleného" balíčku (taktéž nepocházejícího z repozitáře):
# pacman -U http://www.ukázkovýbalíček/repo/ukázkovýbal.tar.gz
Vyčištění cache balíčků od balíčků, jenž nejsou momentálně nainstalovány (/var/cache/pacman/pkg):
# pacman -Sc
Smazání kompletně celé cache balíčků:
# pacman -Scc
Řešení problémů
Q: Aktualizace balíčku XYZ mi rozbila systém!
Nejdůležitější rada pro zapamatování je neaktualizovat systém "naslepo". Vždy si přečtěte seznam balíčků, které mají být zaktualizovány. Všímejte si případů, kdy mají být aktualizovány "kritické" balíčky (linux, xorg-server, a tak dále). Pokud ano, je obvykle dobrý nápad podívat se na https://www.archlinux.org po jakýchkoliv novinkách a projít si poslední příspěvky na fóru, abyste předem věděli, zda lidé nemají v důsledku některé aktualizace problémy.
Pokud je očekáváno/známo, že aktualizace balíčku způsobí problémy, balíčkovači (lidé, kteří se starají o balíčky) nezapomenou přidat příslušnou zprávu, kterou pacman zobrazí při aktualizaci daného balíčku. Pokud po aktualizaci máte nějaké potíže, dvakrát si projděte výstup pacmana, jenž naleznete v logu (/var/log/pacman.log).
V tomto momentě, pouze poté, co jste se ujistili, že pacman neposkytuje žádné informace, že nejsou žádné související novinky na https://www.archlinux.org, a že nejsou na fóru žádné příspěvky ohledně dané aktualizace, byste měli zvážit vyhledání pomoci na fóru, IRC nebo zkuste downgradovat problematický balíček.
Přečtěte si poslední odstavec znova.Q: Vím o tom, že byl vydán update balíčku ABC, ale pacman mi stále říká, že je můj systém aktuální!
Q: Při aktualizaci dostávám chybu: "file exists in filesystem"!
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /cesta/k/souboru exists in filesystem Errors occurred, no packages were upgraded.
Proč se to stává: pacman zjistil konflikt souborů a shodně s jeho návrhem tyto soubory pro vás nepřepíše. Je to vlastnost návrhu, nikoliv nedostatek.
Je odpovědností uživatele udržovat svůj systém, ne správce balíčků. (Pro dotázání, který balíček, pokud vůbec nějaký, vlastní daný soubor, můžete zavolat pacman -Qo.)
pacman -Qo /cesta/k/souboru). Pokud je soubor vlastněn jiným balíčkem, vyplňte zprávu o bugu. Pokud onen soubor není vlastněn jiným balíčkem, přejmenujte soubor, který "existuje v souborovém systému" a vyvolejte příkaz pro aktualizaci znovu. Pokud všechno půjde dobře, ten soubor budete moci odstranit.Q: Při instalaci balíčku dostávám chybu: "not found in sync db"
pacman -Syy pro vynucenou obnovu všech seznamů balíčků.Q: pacman opakovaně upgraduje ten samý balíček!
/var/lib/pacman/local/, např. dvoum instancím kernel26. pacman -Qi vypíše správnou verzi, ale pacman -Qu rozpozná tu starou verzi a proto se pokusí balíček upgradovat.
Řešení: smažte problematický záznam ve /var/lib/pacman/local/.
Q: pacman během upgradu sletěl!
- Nabootujte pomocí Live CD Arch Linuxu
- Připojte svůj kořenový souborový systém (root)
- Aktualizujte databázi balíčků pomocí
pacman -Syy - Nainstalujte poškozený balíček pomocí
pacman -r /cesta/k/rootu -S balíček
Q: Nainstaloval jsem software pomocí make install; tyto soubory nepatří žádnému balíčku!
-S --force, přepíše ručně nainstalovaný software. Pokud byl software nainstalován do /usr/local, můžete nechat vyhledat soubory, o kterých pacman má přehled:
# find /usr/local -exec bash -c 'file={}; pacman -Qo "$file" 2>/dev/null' \;
Pro vyhledání všech souborů, které nejsou sledovány pacmanem:
# find / -xdev -exec bash -c 'file={}; [[ "$file" =~ ^/root || \
> "$file" =~ ^/boot/(grub|kernel) || "$file" =~ ^/usr/(include|lib) ]] || \
> pacman -Qo "$file" &>/dev/null || echo "$file"' \;