Linux: Kniha kouzel, vanilková příchuť 1.17 (27. února 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

17. Správa balíčků

Řada 1.x vanilkové příchuti Linuxu: Knihy kouzel je od 1. října 2020 do 1. března 2023 ve stavu dlouhodobé pasivní údržby; nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje novější vývojové řadě určené pro novější verze operačního systému a programů. Pokud nejste vázáni na starší verze programů, doporučuji vyhledat novou verzi z aktivně vyvíjené vývojové řady.
apt Flatpak Snap systém tematický okruh

1. Úvod

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.

Tato kapitola se nezabývá vytvářením balíčků, vytvářením repozitářů ani jejich zrcadel (pro zrcadla zkuste např. tuto sérii článků (anglicky) nebo modernější aptly) (anglicky). Rovněž se (pochopitelně) nezabývá sestavováním programů ze zdrojového kódu nebo instalací balíčků jiného typu (.rpm, .tar.xz apod.).

Tato verze kapitoly nepokrývá offline instalaci balíčků Flatpaku a chybí zmínka o příkazu „dpkg-deb“. Rovněž až na výjimky nepokrývá uživatelské nastavení práv aplikací ve Flathubu (výchozí nastavení práv určuje dodavatel aplikace, ale uživatel může výchozí práva aplikace zúžit nebo rozšířit).

2. Definice

3. Zaklínadla (DPKG a APT)

3/1 Instalace a odinstalace

aktualizovat informace o dostupných balíčcích (alternativy)#1
sudo aptitude update
sudo apt-get update
aktualizovat všechny aktualizovatelné balíčky (normálně/drasticky/normálně/drasticky)#2
sudo apt-get upgrade [-y] [--autoremove [--purge]]
sudo apt-get dist-upgrade [-y] [--autoremove [--purge]]
sudo aptitude [-y] [--no-new-installs] safe-upgrade
sudo aptitude [-y] full-upgrade
nainstalovat nový balíček včetně závislostí (vzdálený balíček/lokální soubor)#3
sudo apt-get install [-y] [--no-install-recommends] [--install-suggests] [-V] balíček
sudo gdebi balíček.deb
odinstalovat balíček (celosystémové konfigurační soubory smazat/ponechat)#4 (1)
sudo apt-get purge [--autoremove] balíček
sudo apt-get remove [--autoremove] balíček
aktualizovat jen konkrétní balíčky a jejich závislosti#5
sudo apt-get install --only-upgrade balíček
nainstalovat či upgradovat zvolené balíčky a současně upgradovat ostatní#6
sudo apt-get upgrade [-y] && sudo apt-get install [-y] [--autoremove [--purge]] balíček
pokusit se napravit poškozené závislosti#7
sudo apt-get install --fix-broken
stáhnout balíčky do lokálních souborů .deb (bez závislostí)#8
apt-get download balíček

3/2 Vypsat balíčky

vypsat všechny dostupné nebo nainstalované balíčky (pro člověka)#1
apt list
vypsat známé balíčky, filtrovat na základě kritérií#2
aptitude [-F formát] search 'vyhledávací podmínka' ['další vyhledávací podmínka']
vypsat všechny dostupné balíčky (včetně dostupných verzí, pouze pro hlavní architekturu)#3
aptitude search --disable-columns -F "$(printf "%s\t%s" %p %V)" '?true' | egrep -v "$(printf "[^\t]*:[^\t]|[^\t]*\t<[^\t]*>(\t|\$)")"
vypsat seznam nainstalovaných balíčků včetně verzí (pro člověka – alternativy)#4
apt list --installed
dpkg-query -l [| less]
vypsat seznam nainstalovaných balíčků (pro skript – alternativy)#5
dpkg-query -Wf '${Package}:${Architecture}/${Version}/${db:Status-Status}\n' ['vzorek'] | egrep '/installed$'
(apt-mark showauto; apt-mark showmanual) | LC_ALL=C sort -u
aptitude --disable-columns -F formát search '?installed'
vypsat seznam nainstalovaných balíčků podle místa zabraného na disku; od největšího po nejmenší (pro člověka)#6 (2)
dpkg-query -Wf '${Installed-Size}\t${Package}:${Architecture}\n' | sort -nr | less
vypsat všechny známé (nainstalované nebo dostupné) balíčky (pro všechny architektury)#7
aptitude search '?true'
vypsat balíčky, pro které je dostupný upgrade (pro člověka/pro skript)#8 (3)
apt list --upgradable
aptitude search --disable-columns -F %p "?upgradable"
vypsat balíčky, které by se skutečně upgradovaly#9
sudo apt-get upgrade --simulate | egrep "^Inst "
vypsat nainstalovaný balíček vlastnící určitý příkaz#10
test -e "$(which příkaz)" && (dpkg-query -S "$(which příkaz)" | cut -d : -f 1)
vypsat seznam balíčků (nainstalovaných/dostupných), kterým přísluší určitý soubor#11
dpkg-query -S vzorek
apt-file search -F "/celá/cesta"

3/3 Podrobné informace o balíčku

vypsat podrobné informace o balíčku#1
apt-cache show balíček
kolik místa na disku zabírá balíček? (pro člověka)#2
aptitude search -F %I '?name(balíček)' | head -n1
vypsat seznam souborů a adresářů v systému, které kontroluje daný (nainstalovaný/dostupný) balíček#3 (4)
dpkg-query -L balíček
apt-file list balíček
vypsat závislosti balíčku#4
apt-cache depends balíček

3/4 Zákaz aktualizace a označení „automaticky“

vypsat zákazy instalace či aktualizace balíčku#1
apt-mark showhold
vypsat balíčky předinstalované nebo instalované ručně#2
apt-mark showmanual
vypsat balíčky instalované jen jako závislosti jiných balíčků#3
apt-mark showauto
zakázat instalaci či aktualizaci balíčku/zrušit tento zákaz#4
sudo apt-mark hold balíček
sudo apt-mark unhold balíček
označit balíček jako instalovaný ručně/automaticky#5
sudo apt-mark manual balíček
sudo apt-mark auto balíček

3/5 PPA

přidat do zdrojů nové PPA/odebrat PPA#1
sudo add-apt-repository [-y] ppa:id-vývojáře/id-repozitáře
sudo add-apt-repository -r [-y] ppa:id-vývojáře/id-repozitáře
vypsat seznam aktivních PPA#2
egrep -shx '\s*deb(\[[^]]*\])?\s*http://ppa.launchpad.net/.*' /etc/apt/sources.list /etc/apt/sources.list.d/*.list | cut -d / -f 4,5 | sed -E 's/.*/ppa:&/' | LC_ALL=C sort -u
vypsat seznam balíčků dostupných z určitého PPA#3

3/6 Jádra

vypsat seznam nainstalovaných jader#1
linux-version list

3/7 Správa důvěryhodných klíčů

přidat klíč jako důvěryhodný (ze souboru/ze standardního vstupu)#1
sudo apt-key add soubor
sudo apt-key add -
odstranit klíč ze seznamu důvěryhodných#2
sudo apt-key del id-klíče
vypsat seznam důvěryhodných klíčů (pro člověka, ne pro skript)#3
apt-key list

3/8 Offline provoz APT

aktualizovat údaje o dostupných balíčcích (poprvé)#1 (5)
sudo apt-offline set pozadavek.sig --update
sudo apt-offline get pozadavek.sig --generate-changelog --bundle pozadavek.zip
sudo apt-offline install pozadavek.zip
aktualizovat všechny balíčky#2
sudo apt-offline set pozadavek.sig
sudo apt-offline get pozadavek.sig --generate-changelog --bundle pozadavek.zip
sudo apt-offline install pozadavek.zip
sudo apt-get upgrade [-y]
nainstalovat nové balíčky#3
sudo apt-offline set pozadavek.sig --install-packages balíček [další-balíček]
sudo apt-offline get pozadavek.sig --generate-changelog --bundle pozadavek.zip
sudo apt-offline install pozadavek.zip
sudo apt-get install balíček [další-balíček]

3/9 Odklonění

odklonit soubor do nového umístění#1
sudo dpkg-divert --local [--rename] --divert /nové/umístění /původní/umístění
zrušit odklon souboru#2
sudo dpkg-divert --remove /původní/umístění
vypsat seznam odklonů#3
dpkg-divert --list \*
odklonit soubor pro všechny balíčky kromě zadaného#4
sudo dpkg-divert --package balíček [--rename] --divert /nové/umístění /původní/umístění

3/10 Ostatní

přidat do zdrojů nový repozitář/odebrat repozitář#1
sudo add-apt-repository 'řádek sources.list'
sudo add-apt-repository -r 'řádek sources.list'
zjistit hodnotu konfigurační volby APT#2
apt-config dump volba
„velikonoční vajíčko“ v APT#3
apt-get moo

4. Zaklínadla (aptitude)

4/1 Vyhledávací podmínky

hledání podle jména balíčku (alternativy)#1
?name("regulární-výraz")
?exact-name(přesné-jméno)
hledání podle krátkého popisu balíčku#2
?description("regulární výraz")
hledání podle architektury#3
?architecture(architektura)
hledání podle archivu balíčku v repozitáři#4
?archive("regulární-výraz")
hledání podle sekce a podsekce v repozitáři#5
?section("regulární-výraz")
jen balíčky instalované ručně/automaticky#6
?and(?installed,?not(?automatic))
?automatic
jen nainstalované balíčky#7
?installed
logické operace mezi vzorky#8
?and(vzorek1,vzorek2)
?or(vzorek1,vzorek2)
?not(vzorek)
balíčky, které by byly odstraněny operací „autoremove“#9
~g
balíčky, pro které je dostupná novější verze/které mohou být upgradovány#10 (6)
?upgradable
jen „nové“ balíčky#11
?new
Øjen „virtuální“ balíčky#12
?virtual

4/2 Formát -F

Za znakem „=“ následuje příklad hodnoty pro balíček „gimp“.

název balíčku#1 (7)
%p = gimp
krátký popis balíčku#2
%d = GNU Image Manipulation Program
architektura#3
%E = amd64
verze (instalovaná/dostupná)#4 (8)(9)
%v = 2.8.22-1
%V = 2.8.22-1
archiv balíčku v repozitáři#5 (10)
%t = bionic
sekce a podsekce balíčku#6
%s = universe/graphics
ͳvelikost balíčku/velikost instalovaných souborů#7
%D = 3 672 kB
%I = 15,8 MB
popis původu balíčku#8
%O = Ubuntu:18.04/bionic [amd64]
příznak automatické instalace#9 (11)
%M =

5. Zaklínadla (Flatpak)

5/1 Časté úkony

Poznámka: „server“ je v uvedených příkazech zpravidla „flathub“.

spustit program z balíčku#1
flatpak run balíček parametry
aktualizovat všechny nainstalované balíčky/jen konkrétní#2
flatpak update
flatpak update balíček
instalovat balíček#3
flatpak install [server] balíček
odinstalovat balíček#4
flatpak uninstall balíček
vypsat nainstalované balíčky#5
flatpak list
hledat dostupné balíčky podle podřetězce#6
flatpak search podřetězec
˔vypsat výchozí práva aplikace#7
flatpak info --show-permissions balíček
vypsat podrobnější informace o balíčku (nainstalovaném/dostupném)#8 (12)
flatpak info balíček
flatpak remote-info server balíček[//verze]
vypsat všechny dostupné balíčky aplikací/úplně všechny dostupné balíčky#9
flatpak remote-ls --app flathub
flatpak remote-ls --all flathub
spustit program z balíčku bez přístupu k síti#10
flatpak run --unshare=network balíček
ͳspustit GIMP s přístupem jen ke čtení k většině systému souborů#11 (13)
flatpak run --nofilesystem=host --filesystem=host:ro org.gimp.GIMP

5/2 Správa vzdálených repozitářů

přidat FlatHub#1
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
přidat repozitář#2
flatpak remote-add [--if-not-exists] id-pro-repozitář URL
odebrat repozitář#3
flatpak remote-delete id-repozitáře
vypsat seznam repozitářů#4
flatpak remotes

5/3 Offline instalace

příprava (na online počítači)#1
instalace (na offline počítači)#2

6. Zaklínadla (Snap)

6/1 Instalace, spuštění a odinstalace

spustit program z balíčku#1
snap run balíček
instalovat balíček#2
sudo snap install [--kanál] balíček
odinstalovat balíček#3
sudo snap remove balíček
vrátit balíček do stavu před posledním upgradem na novou verzi (neověřeno)#4
sudo snap revert balíček

6/2 Vypsat balíčky a informace o nich

vypsat nainstalované balíčky#1
snap list
vypsat seznam všech dostupných balíčků#2 (14)
(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 -ts \| [> soubor]
vypsat podrobnější informace o balíčku#3
snap info balíček
vypsat spojení konektorů a slotů (všech/jen spojených)#4
snap connections --all
snap connections

6/3 Ostatní

deaktivovat balíček/znovu ho aktivovat#1
sudo snap disable balíček
sudo snap enable balíček
ručně připojit konektor balíčku do slotu jiného balíčku/rozpojit spojení#2
sudo snap connect balíček:jeho-konektor jiný-balíček:jeho-slot
sudo snap disconnect balíček:konektor-nebo-slot
stáhnout balíček k offline instalaci#3 (15)(16)
snap download [--kanál] balíček
nainstalovat balíček offline#4 (17)
sudo snap ack soubor_s_balíčkem.assert
sudo snap install soubor_s_balíčkem.snap

7. Instalace na Ubuntu

Příkazy „aptitude“ a „gdebi“ (doporučuji)#1
sudo apt-get install aptitude gdebi
Příkaz „apt-file“#2
sudo apt-get install apt-file &&sudo apt-file update

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“)!

Flatpak#3 (18)
sudo add-apt-repository ppa:alexlarsson/flatpak
sudo aptitude update
sudo apt-get install flatpak [gnome-software-plugin-flatpak]
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Restartujte operační systém.
Pro umožnění uživatelské instalace (parametr --user) spusťte z účtu příslušného uživatele navíc:#4
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

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.

8. Ukázka

Instalace, spuštění a odinstalování GIMPu různými způsoby:

sudo apt-get update
sudo apt-get install -y gimp
gimp
Ukončete Gimp.
sudo apt-get remove -y gimp
apt-get download gimp
sudo gdebi gimp*.deb
Odpovězte „a“.
gimp
Ukončete Gimp.
sudo apt-get remove -y gimp
sudo snap install gimp
snap run gimp
Ukončete Gimp.
sudo snap remove gimp
flatpak install flathub org.gimp.GIMP
Odpovězte kladně na všechny dotazy.
flatpak run org.gimp.GIMP
Ukončete Gimp.
flatpak remove org.gimp.GIMP
Potvrďte.

9. Tipy a zkušenosti

10. Další zdroje informací

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“.

1 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í.
2 Velikosti jsou uvedeny v kilobajtech.
3 Poznámka: vypíše i balíčky, jejichž upgrade není možný např. kvůli konfliktu s jiným balíčkem.
4 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.
5 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.
6 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.
7 Název balíčku jiné než výchozí architektury bude doplněn o architekturu, např. „gimp:i386“.
8 Je-li dostupných víc verzí balíčku, parametr %V vybere tu, která by se nejspíš instalovala.
9 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.
10 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ř. „bionic-security,bionic-updates“.
11 Pro balíčky instalované jen pro splnění závislosti jiného balíčku vypíše „A“, jinak vypíše prázdný řetězec.
12 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.
13 K provedení tohoto příkazu musíte mít daný balíček nainstalovaný.
14 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.
15 Kanál může být: edge, beta, candidate nebo stable.
16 Poznámka: tento příkaz stáhne pouze uvedený balíček, ne však jeho závislosti.
17 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.
18 PPA podle: https://flatpak.org/setup/Ubuntu/
Soubory a adresářeMarkdownProměnné prostředí a interpretu