Linux: Kniha kouzel, vanilková příchuť 2.14 (15. července 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé
14. Správa balíčků
Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022
do 1. března 2025 ve stavu dlouhodobé pasivní údržby;
nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným
projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel
pro novější verze linuxových operačních systémů,
kontaktujte autora nebo rovnou vytvořte odnož.
Tématem této kapitoly jsou balíčkovací systémy dpkg, apt, PPA, Flatpak a Snap, používáné
k instalaci a aktualizaci aplikací, knihoven a systémových součástí v distribuci Ubuntu.
Systém „dpkg“ (Debian PacKaGe manager) instaluje do systému balíčky typu .deb,
hlídá, aby byly splněny závislosti mezi nimi, a eviduje, které soubory v systému
patří ke kterému balíčku; díky tomu je umí také odinstalovat. Nekomunikuje online.
Systém „apt“ (Advanced Packaging Tool) je nadstavbou dpkg, která komunikuje se vzdáleným
repozitářem balíčků typu .deb, stahuje potřebné balíčky a ověřuje jejich pravost.
K instalaci je ovšem předává systému dpkg.
PPA je rozšíření „apt“, které umožňuje pohodlně přidávat mezi vzdálené zdroje apt
repozitáře konkrétních vývojářů hostované firmou Canonical pro použití v distribuci Ubuntu.
Balíčky z PPA jdou přímo od vývojářů a nejsou po cestě nikým dalším prověřovány,
takže je vhodné používat pouze PPA velmi důvěryhodných vývojářů.
Flatpak je nový, moderní balíčkovací systém založený na sandboxingu a systému práv.
Představuje dobrý, bezpečný a pohodlný způsob, jak na staré, ověřené verzi systému
provozovat nejnovější verze vybraných programů.
Snap je nový balíčkovací systém firmy Canonical. Není dobře přijímán linuxovou komunitou
z mnoha důvodů, především proto, že serverová část systému (repozitář) je proprietární
(nesvobodná) a výhradně závislá na firmě Canonical; není možné vytvářet jiné repozitáře
Snapu ani Snap nastavit tak, aby s firmou Canonical nekomunikoval.
Balíček je soubor obsahující neměnná data tvořící aplikaci, knihovnu apod. a metadata včetně případných závislostí na ostatních balíčcích.
Repozitář je ucelený sklad souvisejících balíčků. Může být dostupný buď online, nebo může být umístěný v systému souborů.
Repozitář APT se dělí na archivy („focal“, „focal-updates“, „focal-security“ atd.), ty se dělí na komponenty („main“, „universe“, „restricted“ a „multiverse“) a ty se dál dělí na sekce podle druhu softwaru. Komponenta main obsahuje svobodný software přímo podporovaný jsou součást Ubuntu, komponenta „universe“ obsahuje svobodný software udržovaný pouze komunitou, komponenta „restricted“ obsahuje nesvobodný software považovaný za podporovanou součást Ubuntu (typicky proprietární ovladače) a komponenta „multiverse“ obsahuje nesvobodný software neudržovaný komunitou.
Balíček je dostupný, pokud kterýkoliv v systému nakonfigurovaný repozitář nabízí balíček daného názvu a architektury. Balíček je známý, pokud je dostupný nebo v systému nainstalovaný.
Priorita je celočíselná hodnota přiřazovaná jednotlivým verzím balíčků systémem APT.
Uživatel může její konfigurací ovlivnit, které verze balíčků a ze kterého repozitáře vybere APT k instalaci.
Lze ji nastavit pro každou verzi každého balíčku zvlášť, ale obvykle se nastavuje pro větší celky,
např. celé komponenty repozitářů.
Záporná čísla (např. -1) znamenají zákaz automatického výběru k instalaci. Verze balíčku bude ignorována.
Priorita 0 je zakázána; žádná verze ji nesmí mít.
100 je priorita již nainstalovaných verzí.
500 je výchozí priorita verzí z repozitářů kromě archivů „*-backports“ (ty mají 100).
1000 (a víc) znamená, že daná verze přeinstaluje i novější verzi téhož balíčku.
Poznámka: v každé položce pole „Package“ a každé podmínce v poli „Pin“ včetně podmínky „origin“ lze místo konkrétního názvu použít vzorek (se zvláštními znaky „?“, „*“ a „[]“).
V poli Package lze navíc použít také regulární výraz v lomíkách, např. „/^gimp/“; vybere balíčky, jejichž názvy výrazu odpovídají.
Použití: Vytvořte soubor v adresáři /etc/apt/preferences.d a zadejte do něj níže uvedené záznamy. Za každým záznamem musí být jedna či více prázdných řádek.
@vypsat priority repozitářů a balíčků (pro člověka; příkaz – zadejte do bashe)#1
apt-cache policy
@obecné nastavení priority balíčkům z určité domény#2
Package: *
Pin: origin "doména"
Pin-Priority: celé-číslo
@obecné nastavení priority podle dalších kritérií#3 (8)
for x in {a..z} {0..9}; do snap find [--narrow] $X | sed 1d; done | tr -s "" | sort -iu | sed "$(printf '%s//\\|/\n' s s s)" | column -nt -s $'\t' [> soubor]
Poznámka: Neinstalujte balíček apt-file, pokud ho nevyužijete. Výrazně zvyšuje objem dat přednášených při každé aktualizaci (při každém „sudo apt-get update“)!
Snap je základní součástí Ubuntu přítomnou v každé nové instalaci.
Je možno ho odinstalovat tímto příkazem:
sudo apt-get purge --autoremove snapd
Ale začátečníkům to nedoporučuji, protože není zaručeno, že nová verze některé systémové
součásti nebude Snap vyžadovat. Začátečníkům doporučuji Snap v systému ponechat,
ale nepoužívat.
Co je špatně na Snapu: 1) Automatické updatování balíčků, které nelze vypnout. 2) Zatímco klientská část je svobodný software dostupný pro mnoho linuxových distribucí, serverová část je proprietární a může ji provozovat pouze firma Canonical, takže není možné vytvářet zrcadla repozitáře a při instalaci programů je uživatel závislý na firmě Canonical a připojení do USA. 3) Vzhledem k použítí SquashFS připojené snapy zaplevelují výpisy příkazů jako „mount“ a „df“ (Flatpak tímto netrpí).
Flatpak přistupuje poměrně benevolentně k přístupovým právům uživatelů. Umožňuje instalovat a odinstalovávat balíčky systémové instalace bez zadání hesla nejen superuživateli, ale také všem uživatelům, kteří jsou členy skupin admin a sudo. Ostatní uživatelům to umožní po zadání hesla administrujícího uživatele, dokonce i přesto, že sami nemají právo používat sudo.
Pro APT: „man apt-get“ apod. (ale není příliš přehledná) Pro Flatpak: „man flatpak“ a všechny odtud odkazované manuálové stránky, např. „man flatpak-install“. Pro Snap: „snap --help“ a „snap help podpříkaz“.
vytváření balíčků či repozitářů; zrcadlením repozitářů
sestavování programů ze zdrojového kódu
instalaci balíčků jiného typu (rpm, tar.xz apod.)
1 Tyto příkazy při aktualizaci vynechají balíčky, které by svou aktualizací způsobily odstranění jiných balíčků. Pokud chcete aktualizovat i takové balíčky, použijte „drastickou aktualizaci“.
2 Ponechat celosystémové konfigurační soubory má smysl v případě, že chcete zachovat konfiguraci balíčku pro případ, že byste ho v budoucnu znovu nainstaloval/a. Uživatelskou konfiguraci programů (uloženou v domovských adresářích) APT ani DPKG odstranit neumí.
4 Poznámka: vypíše i balíčky, jejichž upgrade není možný např. kvůli konfliktu s jiným balíčkem.
5 Tip: k manipulaci se soubory v balíčku můžete také použít parametr --fsys-tarfile, který na standardní výstup příkazu vypíše soubory balíčku ve formátu „tar“, který můžete předat rourou příkazu „tar“.
6 Poznámka: Ve výpisu „dpkg-query -L“ se typicky objevují také společné adresáře jako /etc či /usr; není příliš spolehnutí na to, že jde pouze o soubory příslušné danému balíčku.
7 Příkazy „get“ se provádějí na online počítači a stáhnout vše, co je potřeba, do uvedeného archivu typu zip, příkazy „set“ a „install“ se spouštějí na offline počítači.
8 Na řádce „Pin“ musí být uvedena alespoň jedna podmínka. Podmínky se oddělují čárkou. Nastavení se uplatní u komponent archivů, které splní všechny uvedené podmínky.
9 Pozor, verze balíčku je zde verze, jak ji registruje DPKG, tedy např. „2.10.18-1build2“, není to pouhé číslo verze, jak ho intuitivně chápou uživatelé. Pravděpodobně budete chtít použít vzorek namísto zcela konkrétního řetězce.
10 Pokud zadaný adresář neexistuje, bude vytvořen.
11 Pozor! Tento filtr zahrne i balíčky, které nemohou být aktualizovány, protože tomu brání konflikt mezi balíčky nebo zákaz jejich instalace! Naopak nezahrnuje balíčky, které budou nově instalovány pouze pro splnění nově vzniklých závislostí. Proto tento filtr není tak praktický, jak by se mohl zdát.
12 Název balíčku jiné než výchozí architektury bude doplněn o architekturu, např. „gimp:i386“.
13 Je-li dostupných víc verzí balíčku, parametr %V vybere tu, která by se nejspíš instalovala.
14 Není-li instalovaná, resp. dostupná žádná verze, tyto parametry vypíšou „<žádná>“ a ignorují snahu o změnu lokalizace. Pro přenositelnost je proto doporučuji ve skriptech testovat proti regulárnímu výrazu „<.*>“ místo porovnání s konkrétní hodnotou.
15 Je-li dostupných víc verzí balíčku, tento parametr zohledňuje pouze nejnovější verzi. Je-li dostupná ve více archivech, vypíše parametr %t všechny dané archivy oddělené čárkou, typicky např. „focal-security,focal-updates“.
16 Pro balíčky instalované jen pro splnění závislosti jiného balíčku vypíše „A“, jinak vypíše prázdný řetězec.
17 Uvedení verze k balíčku je povinné, pokud je v repozitáři víc verzí téhož balíčku. Bez něj v takovém případě příkaz „flathub remote-info“ selže a vypíše dostupné verze.
18 K provedení tohoto příkazu musíte mít daný balíček nainstalovaný.
19 Poznámka: provedení tohoto příkazu může trvat i několik minut a vzhledem k velkému rozsahu vypsaných informací doporučuji výstup přesměrovat do souboru.
20 Kanál může být: edge, beta, candidate nebo stable.
21 Poznámka: tento příkaz stáhne pouze uvedený balíček, ne však jeho závislosti.
22 Pokud má balíček závislosti na dalších balíčcích, je potřeba nejprve nainstalovat je, jinak se je bude se snap-démon nainstalovat online.
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.