Distribuce Arch Linux: správa balíčků, aktualizace zrcadel

31. 3. 2016
Doba čtení: 15 minut

Sdílet

Minulý díl byl věnován dokončení instalace nového systému a úvodu do správy balíčků. V dnešním dílu budeme pokračovat v popisu správy balíčků a aktualizace zrcadel s oficiálními repozitáři.

minulém článku jsme ukončili naši práci nejčastějším příkazem pro odstraňování balíčků pomocí standardního správce. Nyní přejdeme na další operaci, kterou jsme avizovali. Jedná se o operaci, se kterou se bude každý uživatel Arch Linuxu potkávat velmi často a pravidelně, a proto je velmi důležitá.

Aktualizace balíčků

Tuto operaci je třeba rozdělit na dvě potenciálně nezávislé akce. První z nich je aktualizace databáze balíčků. V terminologii Arch se tato operace nazývá synchronizací, protože se stahuje aktuální verze databáze balíčků z repozitáře a tou se nahrazuje ta lokální. Základním příkazem je pro tuto akci

sudo pacman -Sy

Tento příkaz provede synchronizaci pouze tehdy, když je k dispozici aktuálnější vzdálená databáze balíčků oproti té lokální. Pokud bychom si chtěli vynutit synchronizaci vzdálené a lokální databáze balíčků bez ohledu na jejich aktuálnost, můžeme použít jiný příkaz

sudo pacman -Syy

Pokud už máme provedenou synchronizaci databáze balíčků, můžeme přistoupit k aktualizaci systému. V případě, že žádné nové verze balíčků nejsou k dispozici, dále uvedený příkaz samozřejmě nic neprovede a jenom oznámí, že není co dělat. Základní příkaz pro aktualizaci systému je opět velmi jednoduchý

sudo pacman -Su

Je asi jasné, že se nabízí kombinace obou výše uvedených příkazů, kterou se dostáváme k nejčastějšímu příkazu při použití Arch – synchronizujeme databázi balíčků v repozitářích s databází lokální a provedeme aktualizaci systému:

sudo pacman -Syu

Je samozřejmě možné použít i kombinaci s vynucenou synchronizací

sudo pacman -Syyu

Po výše uvedeném popisu se velmi krátce vrátíme do našeho virtuálního Archu a příkaz pro aktualizaci systému vyzkoušíme. Výsledek jeho spuštění vidíme na následujícím obrázku.

Aktualizace systému

Když vyjdeme z toho, co na obrázku vidíme, tak si můžeme popsat několik akcí, které byly provedeny:

  1. správce balíčků nás vyzval k zadání hesla oprávněného uživatele
  2. pak došlo k synchronizace databáze balíčků ze všech tří oficiálních repozitářů. Jak je z obrázku patrné, stahovalo se cca 5.1 MB, což není nijak mnoho
  3. po synchronizaci se spustila aktualizace systému, v rámci které proběhlo řešení případných závislostí a kontrola konfliktních balíčků
  4. po úspěšných kontrolách se objevil celkový počet a seznam aktualizovaných balíčků
  5. k němu patří ještě velikost stahování, velikost balíčků po instalaci (samozřejmě v případě, kdyby se balíčky nově instalovaly) a jako poslední údaj je uveden odhad změny velikosti systému, kterou aktualizace přinese
  6. poslední je pak dotaz na to, jestli chceme instalaci spustit či nikoliv

My samozřejmě vybereme možnost pokračování pomocí klávesy A a Enter. Následně dojde ke stažení, kontrole a instalaci všech balíčků. V běžných případech je průběh velmi jednoduchý. V našem případě došlo kromě jiného k aktualizaci jádra, takže bylo třeba znovu generovat spouštěcí sekvence a proto je průběh složitější. Nás to ale nemusí nijak moc trápit, protože po nás systém nic nechce… Více je to vidět na dalším obrázku.

Průběh aktualizace systému

Po ukončení aktualizace systému ho zatím neopustíme a vrhneme se do další operace, kterou je třeba probrat. Jedná se o možnosti správce balíčků získat nějaké podrobnější informace o přítomných balíčcích. Tyto informace je možné získat o balíčcích z repozitářů nebo z lokální databáze balíčků.

Dotazy na databázi balíčků

Jako první si ukážeme některé příkazy pro hledání informací o balíčcích z repozitářů. Základní příkaz nám pomůže najít vybraný balíček a sdělí nám o něm nějaké základní informace. Pokud zadaný balíček neexistuje, nic se nezobrazí. Příkaz pro hledání je jednoduchý.

pacman -Ss jwm

Jeho výsledek včetně neúspěšného pokusu a hledání necelého řetězce je vidět na dalším obrázku.

Hledání balíčků v repozitářích

Z obrázku je zřejmé, že nám systém prozradí repozitář, ve kterém se balíček nachází, verzi balíčku a jeho stručný popis. Pokud bychom chtěli pouze jednodušší přehled, můžeme omezit rozsah informací o balíčku tím, že použije další příznak (q nebo –quiet) pro hledání. Jak ukazuje další obrázek, tento výpis je mnohem jednodušší a ukazuje pouze ty balíčky, které mají zadaný výraz buď v názvu nebo popisu.

Zkrácený výpis hledání

Pokud bychom chtěli ještě podrobnější informace a nějakém balíčku, je to také možné. K tomu použijeme příkaz

pacman -Si jwm

V tomto případě dostaneme informací poměrně hodně a další dva obrázky nám ukazují, že jsou to informace velmi podobné těm, které se nacházejí na stránkách distribuce v seznamu dostupných balíčků.

Podrobný výpis hledání

Balíček v repozitáři

Následně můžeme přikročit k popisu možností, které nám správce balíčků nabízí v rámci dotazů na aktuálně instalované či lokální balíčky. Je asi jasné, že těchto možností bude víc a my si uvedeme ty nejdůležitější. V prvním případě si zopakujeme základní hledání včetně podrobného výpisu. Výsledek je vidět na dalším obrázku.

Dotaz na lokální databázi

Obrázek nám ukazuje, že hledaný balíček není v lokální databázi k dispozici (pacman -Qs jwm), že je instalovaný balíček, který má hledaný název v popisu (pacman -Qs mouse), opět potvrzení, že zadaný balíček není v lokální databázi (pacman -Qi jwm) a konečně že nelze najít podrobné informace o balíčku, který v lokální databázi není (pacman -Qi mouse). Pro další experimenty bude proto nutné najít nějaký balíček, který je instalovaný v rámci základního systému a na něm se vyřádit… – viz další obrázek po níže uvedených příkazech.

Instalovaný balíček

pacman -Qs sqlite
pacman -Qi sqlite

Další možností je dotaz na to, jaké soubory a kam byly instalovány se zadaným balíčkem – viz další obrázek.

Instalované soubory

pacman -Ql sqlite

Výše uvedený příkaz nám zobrazí instalované soubory balíčku a dva následující pak umožní ověřit, jestli jsou tyto soubory skutečně k dispozici na správných místech – viz obrázek.

Kontrola přítomnosti souborů

V rámci dotazů na balíčky si ukážeme i dva příkazy, které využívají další aplikace, které správce souborů obsahuje (již jsme se o nich zmínili v předchozích dílech). První příkaz nám ukáže strom závislostí balíčku – viz další obrázek.

Strom závislostí

pactree sqlite

Druhý příkaz nám naopak umožní zobrazit strom balíčků, které jsou na tom zadaném závislé – viz obrázek.

Rekurzivní závislost

pactree -r sqlite

V dalším příkazu se opět vrátíme k samotnému správci balíčku a ukážeme si příkaz, kterým se dají najít tzv. sirotci. To jsou balíčky, které jsou sice instalované, ale již nejsou potřebné jako závislosti pro jiné (nejspíše odstraněné) balíčky. Nám tento příkaz samozřejmě neukáže nic, takže není nutný žádný obrázek.

pacman -Qdt

Poslední příkaz z této kapitoly nám ukáže seznam explicitně instalovaných balíčků, které ale nejsou žádným dalším balíčkem požadovány jako závislosti – viz obrázek.

Explicitní balíčky bez závislosti

pacman -Qet

Na základě výše uvedených příkazů a příkladů si můžeme blíže rozebrat příkaz, který byl bez dalšího vysvětlení použit v minulém dílu.

pacman -Qlq pacman | grep bin

Jednalo se o seznam aplikací, které se instalují spolu se správcem balíčků. Uvedený příkaz vznáší dotaz na lokální balíček (Q), požaduje výpis balíčků instalovaných s uvedeným balíčkem (l) a zkrácený výpis pouze s názvy balíčků (q). Dotaz je položen na balíček pacman a výpis je omezen pouze na ty položky, které obsahují zadaný řetězec (grep bin). Tímto bychom kapitolu o dotazech na databázi balíčků mohli ukončit a pokročit ke kapitole poslední, kde jsou zahrnuty některé zajímavé příklady z ostatních operací nebo voleb.

Ostatní příkazy

Při hledání můžeme využít nejen přímo zadání řetězce, ale také tzv. regulární výrazy, viz např. zde Regular expressions. Dokonce můžeme pomocí takto zadaných dotazů a jejich výsledků provádět instalaci jednoho nebo více balíčků, např. pomocí příkazu

sudo pacman -S $(pacman -Ssq package_regex)

Arch, resp. jeho správce balíčků si ukládá všechny stažené (instalované aktuálně či již odstraněné) balíčky v tzv. vyrovnávací paměti. Ta je umístěna v adresáři /var/cache/pacman/pkg. Správce balíčků nám umožní tuto paměť vyčistit a odstranit např. ty balíčky, které nejsou aktuálně instalované.

sudo pacman -Sc

Následující příkaz provede úplné odstranění všech balíčků.

sudo pacman -Scc

Již dříve jsme si ukázali, jak je možné vybrané balíčky z oficiálních repozitářů instalovat. Správce balíčků nabízí také možnost balíček/ky pouze stáhnout a instalovat je později.

sudo pacman -Sw pkg5

Hrátky s možnostmi správce balíčků mohou být někdy i celkem nebezpečné a jejich výsledkem může být nefunkční (někdy i nenávratně…) systém. Jako jeden z příkladů zde můžeme uvést příkaz pro reinstalaci všech aktuálně instalovaných balíčků.

sudo pacman -S $(pacman -Qqen)

Výše jsme si ukázali, jak nalézt a vypsat seznam všech balíčkových sirotků. Následující příkaz je všechny ze systému odstraní.

sudo pacman -Rsn $(pacman -Qdtq)

Při ukázce instalace či aktualizace jsme si řekli, že správce balíčků provádí kontroly závislostí a dalších ukazatelů. Pokud by to z nějakých důvodů bylo nutné či vhodné, lze kontrolu závislostí přeskočit a instalaci provést příkazem

sudo pacman -Sd pkg5

Následující příkaz přeskočí všechny kontroly při instalaci balíčků.

sudo pacman -Sdd pkg5

V minulém dílu jsme si uvedli příklad, jak zobrazit členy vybrané skupiny balíčků. Je možné zobrazit také všechny dostupné skupiny balíčků a jejich členy.

pacman -Sgg

Tímto bychom mohli uzavřít poměrně rozsáhlou kapitolu s popisem možností správce balíčků pacman a pokročit dále v instalaci našeho ukázkového systému. Než to ale uděláme, ještě se krátce vrátíme k problematice balíčků, resp. zrcadel pro uložení balíčků Arch. Jak asi vyplynulo z dosavadního popisu, zrcadla nejsou v čase neměnná, a proto je součástí aktualizací systému i balíček pacman-mirrorlist-RRRRMMDD-X. Pokud se tento balíček objeví v aktualizacích, její výsledek skončí tak, jak nám to ukazuje následující obrázek.

Aktualizace zrcadel

V příslušném adresáři /etc/pacman.d nám tak vzniknou dva soubory se seznamem zrcadel – původní a nový s příponou .pacnew. My jako uživatelé máme dvě možnosti. Buď neuděláme nic (ani teď ani kdykoliv v budoucnu) a ponecháme původní seznam zrcadel. Je velmi pravděpodobné, že nenarazíme ani teď ani později na nějaký zásadní problém. Budou se sice objevovat pořád nové seznamy zrcadel, ale ten původní bude nejspíš fungovat. Je to dáno tím, že je zrcadel k dispozic velké množství (pokud bychom ponechali všechny v seznamu aktivní) a systém si vždy nějaké najde a použije ho. Danou situaci ukazuje další obrázek ze správce souborů mc.

Seznamy zrcadel

Obrázek nám ukazuje, že oba soubory mají rozdílnou velikost a dělí je od sebe devět kalendářních dnů. Pokud bychom chtěli situaci nějak řešit, tak máme opět dvě možnosti. První z nich je v konfiguraci správce balíčků zastavit vytváření stále nových seznamů zrcadel při aktualizacích. To docílíme změnou souboru /etc/pacman.conf, kam přidáme, resp. odkomentujeme a změníme řádek

NoExtract = /etc/pacman.d/mirrorlist

Druhou možností je pak provádět aktualizace seznamu zrcadel po každé příslušné aktualizaci (ručně či automatizovaně) nebo namátkově (třeba v případě, kdy uživatelům stroj někdo spravuje a občas se na něj přijde podívat). Změna aktuálního seznamu zrcadel je samozřejmě možná pomocí základních linuxových příkazů, jako např.

sudo cp /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist

My ale můžeme velmi výhodně použít další součást systému správy balíčků Arch a provést jednoduše dvě operace najednou. K tomuto účelu nám poslouží aplikace rankmirrors, která nám provede seřazení všech nebo omezeného počtu zrcadel podle rychlosti odezvy. Možnosti aplikace jsou vidět na dalším obrázku.

Nápověda rankmirrors

Pro lepší představu si před vlastní aktualizací seznamu zrcadel ukážeme jednoduchý příklad, který nám vypíše pět aktuálně „nejrychlejších“ zrcadel z původního seznamu.

rankmirrors -t -n 5 /etc/pacman.d/mirrorlist

Běh příkazu bude pravděpodobně trvat docela dlouho, protože je nutné projít všechny aktivní zrcadla (což je případě, že žádná nebyla zakomentována vysoko přes 200). Výsledek je viditelný na dalším obrázku a asi není žádné nečekané překvapení, že se objevila pouze česká zrcadla.

Nejrychlejší zrcadla

Tím se konečně můžeme posunout k avizovanému příkazu pro aktualizaci seznamu zrcadel. V tomto případě nám nestačí ani použití práva administrátora a musíme se přepnout rovnou na uživatele root. Pro jistotu zadáme příkazy dva a tím prvním si vytvoříme kopii aktuálního seznamu zrcadel. Celkový příkaz pak můžeme zadat např. takto:

cp /etc/pacman.d/mirrorlist /etc/mirrorlist.old
rankmirrors -n 10 /etc/pacman.d/mirrorlist.pacnew > /etc/pacman.d/mirrorlist

Po spuštění příkazu nás může trochu překvapit velmi rychlý průběh akce. Zatím si toho ale nebudeme všímat a zkusíme provést aktualizaci systému známým příkazem

pacman -Syu

Výsledek viditelný na dalším obrázku je velmi nepříjemný až zákeřný – pokus o aktualizaci selhal, i když předtím bez problémů fungoval!

Selhání

Naštěstí nám chybové hlášení cosi napovídá a my s jeho pomocí můžeme zjednat nápravu. Problém je totiž v tom, že soubor mirrorlist.pacnew má na rozdíl od našeho původního souboru všechna zrcadla zakomentována tzn. že žádné není aktivní a přístupné! Pokud tedy chceme, můžeme se vrátit ke starší uložené kopii a nebo s pomocí třeba mc všechny nebo jenom některá zrcadla odkomentovat. Abychom mohli náš příklad dokončit, odkomentujeme zrcadla pro Rakousko, Česko, Francii, Německo a Polsko. V aktuálním případě se jedná o celkem 92 zrcadel. Změnu uložíme a znovu spustíme příkaz

rankmirrors -n 10 /etc/pacman.d/mirrorlist.pacnew > /etc/pacman.d/mirrorlist

Po spuštění se žádné informace neobjeví, běh signalizuje pouze blikající kurzor. Délka běhu je samozřejmě o něco menší a my si můžeme zkontrolovat, že došlo nejen k vytvoření nového souboru se seznamem zrcadel, ale že je tento soubor o něco menší, než byl ten aktualizovaný. Také došlo ke změně v jeho uspořádání – na začátku jsou všechna zakomentovaná zrcadla a na konci pak 10 nejrychlejších aktivních. To nám ukazuje následující obrázek.

Aktualizovaný seznam zrcadel

Dané uspořádání nám velmi zjednodušuje případnou snahu o to nechat v souboru pouze aktivní zrcadla a ta zbylá vymazat. Zvolený počet aktivních zrcadel 10 je pravděpodobně dostatečný na to, aby systém mohl dále bez problémů fungovat. Je také samozřejmě možné při aktualizaci seznamu toto číslo zvýšit podle přání či potřeby (nebo dočasné či trvalé změně lokality uživatele nebo stroje…). Abychom vše pro jistotu ještě jednou zkontrolovali, spustíme po sobě následující dva příkazy:

rankmirrors -t -n 10 /etc/pacman.d/mirrorlist
pacman -Syu

Oba příkazy jsou dokončeny bez problémů a ten první je velmi rychlý, protože je aktivních pouze 10 zrcadel s balíčky. Další obrázek nám také ukazuje, že se rychlost odezvy zrcadel může v čase měnit.

Řazení zrcadel, aktualizace

Jak ukazuje přechodí popis, není aktualizace seznamu zrcadel nijak triviální a je otázka, jakou ze tří variant je vhodné volit. Proto se k nim ještě vrátíme a zkusíme je navázat na skupiny uživatelů:

  • seznam zrcadel se nebude aktualizovat – tato volba je pro běžné uživatele asi nejvhodnější a obecně se dá říct, že při jejím použití nehrozí žádné zásadní riziko. Může být vhodná i pro zkušenější uživatele, kteří se ale nechtějí do seznamu zrcadel moc hrabat a sáhnout na něj jenom tehdy, když je to bezpodmínečně nutné
  • při aktualizaci se nebude nový seznam zrcadel vytvářet – změnu konfigurace asi nebudou dělat běžní uživatelé, ale spíš ti pokročilejší nebo správci těch běžných. Je ale otázka, co by tato varianta mohla obecně přinést. Podle mého názoru celkem nic a proto bych jí nedoporučoval s výjimkou případů, kdy to má jasný a deklarovaný význam
  • aktualizace seznamu zrcadel – tuto variantu zvolí určitě jenom pokročilejší uživatelé či správci systémů. Jak vyplývá z popisu, není úplně jednoduchá, a tak určitě záleží na tom, jak často by se měla provádět

Arch by ale nebyl sám sebou, kdyby nám v této trochu zapeklité situaci nenabídl další možnosti. My si z nich ukážeme jednu, která je založena na skriptu Reflector. Tento skript není v základní sadě instalován, takže ho musíme do systému přidat pomocí příkazu

pacman -S reflector

Jedná se sice pouze o jednoduchý skript (sám o sobě má pouze necelých 90 kB), ale je napsán v Pythonu, a tak nám sebou do systému přidá ještě nejnovější verzi Pythonu 3 a přibude tak cca 100 MB na disku. Každopádně se na dalším obrázku můžeme přesvědčit, že se jedná o docela mocný nástroj.

Reflector Help

Než začneme něco s tímto skriptem podnikat, pro jistotu si znovu uděláme kopii aktuálního seznamu zrcadel. Pro jejich aktualizaci máme dvě cesty, které si obě ukážeme. Ta první představuje vykonání přípravného kroku, kterým se stáhne aktuální seznam zrcadel z webu Arch Linux.

Stažení seznamu zrcadel

curl -o /etc/pacman.d/mirrorlist https://www.archlinux.org/mirrorlist/all/

Pokud se na nový soubor podíváme blíž zjistíme, že jsou opět všechna zrcadla zakomentovaná. To nám ale vůbec nevadí, protože skript si s tím dokáže poradit bez problémů. Ve výše uvedeném odkazu je několik jednoduchých příkladů. My si ale uděláme trochu složitější verzi, která by mohla být připravená pro automatizaci celého procesu, jak je to v odkazu také podrobněji popsáno. Vytvoříme si tedy příkaz

reflector -l 50 -p http --sort rate -f 10 --save /etc/pacman.d/mirrorlist

Námi vytvořený příkaz má celkem 5 parametrů:

  1. -l 50 – omezí počet zrcadel ve výpisu na zadanou hodnotu. Vybírá nejčastěji synchronizované servery
  2. -p http – omezí protokol serveru s uloženým zrcadlem na jeden vybraný typ, byl zvolen nejčastěji použitý typ http
  3. –sort rate – výpis zrcadel je seřazen podle pořadí, které určuje Arch generátor zrcadel
  4. -f 10 – vybere 10 nejrychlejších zrcadel z předchozího seznamu
  5. –save FileName – uloží výsledek příkazu do deklarovaného souboru

Parametry si každý samozřejmě může upravit podle své touhy či potřeby. My ale po ukončení více vzpomeneme na problémy popsané výše a zkusíme spustit aktualizaci systému. Jak ukazuje následující obrázek, proběhla nyní absolutně bez problémů.

Řazení zrcadel, aktualizace systému

Další obrázek nám ukazuje, jak vypadá konečná verze vytvořeného seznamu zrcadel právě popsaným způsobem.

ict ve školství 24

Aktuální seznam zrcadel

Tuto kapitolu a celý dnešní díl uzavřeme konstatováním, že použití skriptu reflector je nepoměrně jednodušší, než v případě rankmirrors. Jsme ušetřeni otravného odkomentování vybraných zrcadel (tím pádem můžeme využít i aktualizované soubory mirrorlist.pacnew bez nutnosti je sami stahovat). Kromě toho je zde nabízené filtrování podle pořadí generátoru lepší (rankmirrors řadí pouze podle okamžité hodnoty ping, což nezahrnuje aktuálnost zrcadel a ani reálnou rychlost připojení). Z odkazu je také zřejmé, že lze tento způsob aktualizace velmi dobře automatizovat jak s použitím systemD, tak s pomocí jiných nástrojů. Tím pádem je asi nasnadě doporučení, že pokud aktualizovat seznam zrcadel, tak tímto způsobem. Pro zájemce přidáváme do přílohy soubor, který zajistí vytvoření služby systemD pro zkopírování aktualizovaného souboru se seznamem zrcadel a jeho následnou aktualizaci pomocí skritu reflector /etc/systemd/sys­tem/reflector.service.

Dnešní díl jsme věnovali dokončení kapitoly o správci balíčků a zaměřili se hlavně na aktualizace balíčků i systému a dotazům na databázi balíčků vzdálené i lokální. Popis správce balíčků by završen přehledem některých vybraných příkladů, které patří do různých kategorií. Díl jsme pak ukončili popisem aktualizace seznamu zrcadel oficiálních repozitářů. V příštím dílu se budeme postupně věnovat prvotnímu nastavení shellu pro uživatele, instalaci a základní konfiguraci grafického systému a instalaci základní sady aplikací. Pak si krátce přiblížíme rozdíly mezi desktopovým prostředím a okenním manažerem a nakonec si nainstalujeme a částečně nastavíme okenní manažer JWM.