V 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.
Když vyjdeme z toho, co na obrázku vidíme, tak si můžeme popsat několik akcí, které byly provedeny:
- správce balíčků nás vyzval k zadání hesla oprávněného uživatele
- 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
- 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ů
- po úspěšných kontrolách se objevil celkový počet a seznam aktualizovaných balíčků
- 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
- 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.
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.
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.
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ů.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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ů:
- -l 50 – omezí počet zrcadel ve výpisu na zadanou hodnotu. Vybírá nejčastěji synchronizované servery
- -p http – omezí protokol serveru s uloženým zrcadlem na jeden vybraný typ, byl zvolen nejčastěji použitý typ http
- –sort rate – výpis zrcadel je seřazen podle pořadí, které určuje Arch generátor zrcadel
- -f 10 – vybere 10 nejrychlejších zrcadel z předchozího seznamu
- –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ů.
Další obrázek nám ukazuje, jak vypadá konečná verze vytvořeného seznamu zrcadel právě popsaným způsobem.
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/system/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.