Balíčky

dnf, apt, pacman, repozitáře, závislosti.

Co se naučíš: Budeš umět nainstalovat, aktualizovat a odinstalovat software, aniž bys rozbil závislosti.

14 min čtení + cvičeníNavazuje na:⌨️ Terminál a shell

Balíček je zabalený kus softwaru, program nebo knihovna + informace o tom, co k běhu potřebuje. V Linuxu software neinstaluješ stahováním .exe z náhodné stránky jako na Windows. Místo toho o něj požádáš balíčkovací systém, který ho stáhne z ověřeného repozitáře, dotáhne všechny závislosti a udrží ho aktualizovaný. Až pochopíš tenhle model, přestaneš hledat „instalačky" a začneš softwaru důvěřovat, protože víš, odkud jde.


Pár pojmů na úvod

  • Balíček (package) = jeden zabalený software (.rpm, .deb, …), samotné soubory programu + metadata: jak se jmenuje, verze, co potřebuje k běhu, kdo ho podepsal.
  • Repozitář (repo) = server se sbírkou balíčků, které distribuce spravuje a ověřuje. Tvůj systém má seznam repozitářů a stahuje software jen z nich, to je ten „ověřený zdroj".
  • Závislost (dependency) = jiný balíček, který tvůj program potřebuje k běhu (třeba knihovnu). Balíčkovač je dohledá a doinstaluje sám, nemusíš je lovit ručně.
  • Metadata = popisná data u balíčku (verze, závislosti, podpis). Podle nich balíčkovač ví, co s čím ladí a co doinstalovat.
  • Podpis (GPG) = kryptografický podpis balíčku i repozitáře. Systém ověří, že balíček opravdu vydala distribuce a nikdo ho po cestě nezměnil. Tohle je důvěra, jádro celého modelu.

Proč vůbec balíčkovací systém

Na Windows je běžné jít na web, stáhnout setup.exe a spustit ho. Věříš přitom, že web je pravý, že soubor nikdo nepodstrčil a že instalátor nedělá nic navíc. V Linuxu se tenhle problém řeší jinak:

  • Jeden ověřený zdroj. Software bereš z repozitářů své distribuce. Balíčky jsou podepsané, systém pozná, jestli jsou pravé a nezměněné. Nemusíš věřit náhodné stránce.
  • Závislosti řeší stroj, ne ty. Program potřebuje pět knihoven? Balíčkovač je dohledá a doinstaluje. Žádné „chybí ti DLL, stáhni si ho někde".
  • Aktualizace na jednom místě. Jedním příkazem aktualizuješ celý systém, jádro, knihovny, aplikace. Ne obcházet dvacet programů, každý s vlastním „check for updates".
  • Čistá odinstalace. Balíčkovač ví, které soubory k programu patří, a umí je odebrat.

💡 Zjednodušeně: balíčkovač je správce softwaru s pamětí. Ví, co máš nainstalované, odkud to je, co na čem závisí a jestli je to aktuální. Proto se v Linuxu skoro nikdy nestahují „instalačky ručně".


Tři světy: dnf, apt, pacman

Podle distribuce narazíš na jeden ze tří hlavních balíčkovačů. Koncept je stejný, liší se příkazy a formát balíčků:

  • dnf: Fedora, RHEL, Rocky, AlmaLinux. Balíčky .rpm.
  • apt: Debian, Ubuntu, Mint. Balíčky .deb.
  • pacman: Arch, Manjaro. Balíčky .pkg.tar.zst, rolling release (vždy nejnovější).

Nauč se jeden pořádně a ostatní přečteš z tabulky. Tady jsou nejběžnější operace vedle sebe:

Operacednf (Fedora/RHEL)apt (Debian/Ubuntu)pacman (Arch)
Nainstaluj balíčeksudo dnf install htopsudo apt install htopsudo pacman -S htop
Odeber balíčeksudo dnf remove htopsudo apt remove htopsudo pacman -R htop
Aktualizuj seznam repů(automaticky)sudo apt update(součást -Syu)
Aktualizuj celý systémsudo dnf upgradesudo apt upgradesudo pacman -Syu
Hledej balíčekdnf search textapt search textpacman -Ss text
Info o balíčkudnf info htopapt show htoppacman -Si htop
Co balíček obsahujednf repoquery -l htopdpkg -L htoppacman -Ql htop
Který balíček vlastní soubordnf provides /usr/bin/htopdpkg -S /usr/bin/htoppacman -Qo /usr/bin/htop

🚩 Dvě věci na zapamatování: (1) instalace a odebírání chce sudo (mění systém), hledání a info ne (jen čtou). (2) U apt je zvykem před instalací pustit apt update, aby měl aktuální seznam balíčků; dnf a pacman -Syu si to řeší samy.


Typické operace na příkladech

Ať máš konkrétní vzory. Ukázky pro všechny tři světy:

Nainstaluj program

# Fedora / RHEL
sudo dnf install htop

# Debian / Ubuntu
sudo apt install htop

# Arch
sudo pacman -S htop

Odeber program

sudo dnf remove htop        # Fedora
sudo apt remove htop        # Debian/Ubuntu
sudo pacman -R htop         # Arch

Aktualizuj VŠE (celý systém, to chceš dělat pravidelně):

sudo dnf upgrade            # Fedora
sudo apt update && sudo apt upgrade   # Debian/Ubuntu (nejdřív seznam, pak upgrade)
sudo pacman -Syu            # Arch (jeden příkaz dělá obojí)

Hledej, když nevíš přesný název:

dnf search "web server"     # Fedora
apt search "web server"     # Debian/Ubuntu
pacman -Ss "web server"     # Arch

Ukaž, co balíček obsahuje (které soubory nainstaluje):

dnf repoquery -l nginx      # Fedora
dpkg -L nginx               # Debian/Ubuntu (funguje po instalaci)
pacman -Ql nginx            # Arch

💡 Nevíš, jak se jmenuje balíček s příkazem, který chceš? Skoro vždy se jmenuje jako ten příkaz (htop, git, curl). Když ne, pomůže dnf provides */nazev / apt-file search nazev.


Proč aktualizovat celý systém, ne jeden balíček

Láká to: „chci jen novější curl, zbytek nechám být." V praxi je to cesta k problémům, protože balíčky netvoří ostrůvky, sdílejí knihovny a navzájem na sebe závisí.

  • Když aktualizuješ jen jeden balíček, může chtít novější verzi knihovny, kterou používá i deset dalších programů. Repozitáře jsou testované jako celek, konzistentní sada verzí, které spolu ladí.
  • Vytáhnout jeden novější kus z jinak starého systému znamená riskovat rozbité závislosti: něco čeká starou knihovnu, něco novou, a rozbije se to uprostřed.
  • Aktualizace jsou taky bezpečnostní záplaty. Aktualizovat celek pravidelně = mít zalepené díry všude, ne jen v jednom náhodném programu.

🚩 Pravidlo: aktualizuj systém jako celek a pravidelně (dnf upgrade / apt upgrade / pacman -Syu), ne po jednotlivých balíčcích. U Archu je to obzvlášť důležité, částečné aktualizace (upgrade jednoho balíčku bez -Syu) tam oficiálně nejsou podporované a umí rozbít systém.


Univerzální formáty: Flatpak a Snap

Klasické balíčky jsou vázané na distribuci, .rpm z Fedory nenainstaluješ na Ubuntu. Proto vznikly univerzální, sandboxované formáty, které běží napříč distry:

  • Flatpak: appka se dodává i se svými knihovnami, běží izolovaně (sandbox) a má omezený přístup k systému (soubory, kamera…) přes oprávnění. Zdroj je hlavně Flathub. Nezávislé na distribuci.
  • Snap: podobný nápad od Canonicalu (Ubuntu). Taky sandbox a vlastní knihovny, centrální obchod (Snap Store).
# Flatpak: přidání Flathubu a instalace appky
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.videolan.VLC   # --user = bez roota, jen pro tebe
flatpak run org.videolan.VLC

# Snap
sudo snap install vlc

Kdy se hodí: desktopové aplikace, kde chceš nejnovější verzi nezávisle na distru (Signal, Slack, prohlížeče, VLC), nebo appku, která v oficiálních repech není. Kdy raději ne: systémové nástroje, knihovny, servery a cokoli, co má běžet efektivně a integrovaně, tam patří klasický balíček z repa.

💡 Cena za pohodlí: Flatpak/Snap appky jsou větší (nesou si knihovny s sebou) a startují o kousek pomaleji. Za to jsou izolované a nezávislé na verzích v systému. Rozumný mix: základ systému z repa, vybrané desktopové appky z Flatpaku.


Proč NEmíchat ruční .rpm/.deb z internetu s repozitáři

Občas najdeš program jen jako .rpm nebo .deb ke stažení ze stránky výrobce. Nainstalovat to jde (sudo dnf install ./soubor.rpm, sudo apt install ./soubor.deb), ale ber to jako poslední možnost:

  • Rozbité závislosti. Ruční balíček může chtít knihovny v jiných verzích, než má tvůj systém z repa. Balíčkovač se to snaží dorovnat a někdy skončí v konfliktu, ze kterého se špatně leze.
  • Žádné automatické aktualizace. Co jsi stáhl ručně, ručně i aktualizuješ. Repozitáře drží software aktuální samy; ruční .rpm zůstane viset ve staré (a možná děravé) verzi.
  • Míň důvěry. Balíček z náhodné stránky nemusí být podepsaný klíčem, kterému tvůj systém věří.

🚩 Správný postup, když program není v repu: nejdřív hledej oficiální repozitář výrobce (přidáš ho jednou a máš aktualizace), pak Flatpak (Flathub). Ruční .rpm/.deb až úplně nakonec a jen z důvěryhodného zdroje.


Failure modes, časté chyby začátečníků

  • Stahování softwaru mimo repozitář. „Našel jsem to na nějakém webu ke stažení." První reflex má být repozitář nebo Flathub, ne náhodná stránka. Mimo repo = žádné podpisy, žádné aktualizace, riziko.
  • sudo u příkazu z neznámého zdroje. Návod na fóru říká curl … | sudo bash? To dáváš rootu cizí skript naslepo. Nikdy nespouštěj pod sudo nic, čemu nerozumíš a co nemá důvěryhodný původ.
  • Částečná aktualizace. Upgrade jednoho balíčku ve starém systému (hlavně na Archu bez -Syu) → rozbité závislosti. Aktualizuj celek.
  • Ignorování GPG varování. Když balíčkovač hlásí neplatný nebo chybějící podpis, není to otravnost k odklikání, je to přesně ta pojistka, že balíček je pravý. Zastav se a zjisti proč.
  • Přidání nedůvěryhodného repa. Přidat cizí repozitář znamená dát mu důvěru instalovat cokoli do tvého systému (a přebít i systémové balíčky). Přidávej jen repa, kterým opravdu věříš.

🛠️ Cvičení

  1. Poznej svůj balíčkovač. Zjisti, kterou distribuci máš (cat /etc/os-release) a podle toho urči, jestli používáš dnf, apt, nebo pacman. Jak by ses zeptal na verzi konkrétního balíčku?
  2. Nainstaluj a ukliď. Nainstaluj malý nástroj (třeba htop nebo tree), spusť ho, a pak ho zase odeber. Jaký příkaz na to použiješ na své distribuci a proč potřebuje sudo?
  3. Kam to vlastně spadlo. Zjisti, které soubory nainstaloval nějaký balíček (např. htop) a kde leží jeho spustitelný soubor. (Nápověda: dnf repoquery -l / dpkg -L / pacman -Ql.)
  4. Repo vs Flatpak. Najdi jednu appku, kterou bys rozumně instaloval z Flatpaku (Flathub), a jednu, kterou naopak chceš z repa. Zdůvodni rozdíl.
  5. Aktualizace jako celek. Napiš příkaz, kterým aktualizuješ celý systém, a vysvětli jednou větou, proč je to lepší než aktualizovat jednotlivé balíčky.
Náčrt řešení: rozbal, až si cvičení zkusíš sám
  1. Poznej balíčkovač, cat /etc/os-release řekne distribuci: Fedora/RHEL → dnf, Debian/Ubuntu → apt, Arch → pacman. Na verzi balíčku: dnf info htop / apt show htop / pacman -Si htop. Pozor: název balíčku a název příkazu se občas liší, když nevíš, hledej (dnf search / apt search).
  2. Instaluj a ukliď, sudo dnf install htop (příp. apt/pacman -S), spustíš htop, odebereš sudo dnf remove htop (apt remove / pacman -R). sudo je potřeba, protože instalace zapisuje do systémových složek (/usr/bin…), kam běžný uživatel nesmí, mění to systém pro všechny. Pozor: hledání a info sudo nechtějí, jen čtou.
  3. Kam to spadlo, soubory balíčku: dnf repoquery -l htop / dpkg -L htop / pacman -Ql htop. Spustitelný soubor bývá v /usr/bin/htop (ověříš which htop). Pozor: dpkg -L funguje až po instalaci; na dosud nenainstalovaný balíček se ptáš přes repozitář.
  4. Repo vs Flatpak, z Flatpaku dává smysl desktopová appka, kde chceš nejnovější verzi nezávisle na distru (Signal, Slack, VLC) nebo která v repu není. Z repa chceš systémové nástroje, knihovny a servery (nginx, git, curl), menší, rychlejší, integrované, aktualizované s celým systémem. Pozor: Flatpak appky jsou větší a izolované v sandboxu; to je plus (bezpečnost) i mínus (občas nevidí na soubory bez povolení).
  5. Aktualizace jako celek, sudo dnf upgrade / sudo apt update && sudo apt upgrade / sudo pacman -Syu. Je to lepší, protože repozitář je testovaná konzistentní sada verzí, které spolu ladí, aktualizace celku udrží závislosti v souladu a zalepí bezpečnostní díry všude najednou. Pozor: částečná aktualizace (jen jeden balíček) umí rozbít závislosti, na Archu je to dokonce oficiálně nepodporované.

🧠 Otázky & odpovědi

Proč se v Linuxu nestahují instalačky z internetu jako na Windows

Protože Linux má balíčkovací systém, software bereš z ověřených repozitářů své distribuce. Balíčky jsou podepsané (systém pozná, že jsou pravé a nezměněné), balíčkovač si sám dohledá a doinstaluje závislosti a jedním příkazem pak aktualizuješ celý systém. Stahovat .exe/.rpm z náhodné stránky obchází všechny tyhle pojistky: žádný podpis, žádné automatické aktualizace a riziko, že ti někdo podstrčí něco jiného. Repozitář = ověřený zdroj s pamětí.

Co je závislost a proč ji neřeším ručně

Závislost je jiný balíček, který tvůj program potřebuje k běhu, typicky sdílená knihovna. Programy si takhle věci půjčují, aby se stejná knihovna nemusela dodávat pětkrát. Balíčkovač čte metadata každého balíčku, ví, co na čem visí, a chybějící kusy dotáhne sám ve správných verzích. Kdybys to řešil ručně, skončíš v „dependency hell", jedna knihovna chce druhou, ta třetí… Přesně tuhle práci ti balíčkovač bere, proto stačí říct install nazev a on dořeší zbytek.

Proč aktualizovat celý systém a ne jen jeden balíček

Protože balíčky sdílejí knihovny a závisí na sobě. Repozitář je testovaná konzistentní sada verzí, které spolu ladí. Když vytáhneš jeden novější balíček do jinak starého systému, může chtít novější knihovnu, na které visí i další programy a rozbiješ závislosti (částečná aktualizace). Aktualizace jsou navíc bezpečnostní záplaty, takže aktualizovat celek pravidelně = mít díry zalepené všude. Na Archu je částečná aktualizace dokonce oficiálně nepodporovaná.

Kdy se hodí Flatpak nebo Snap místo klasického balíčku

Když chceš desktopovou aplikaci nezávisle na distribuci, nejnovější verzi, kterou nemáš čekat, až projde do repa, nebo appku, co v oficiálních repech vůbec není (Signal, Slack, prohlížeče). Flatpak a Snap si nesou vlastní knihovny a běží v sandboxu (izolovaně, s omezeným přístupem k systému), takže běží stejně napříč distry. Cenou je větší velikost a o kousek pomalejší start. Pro systémové nástroje, knihovny a servery naopak zůstaň u klasického balíčku z repa, je menší, rychlejší a integrovaný.

Proč je riskantní míchat ruční .rpm/.deb z internetu s repozitáři

Protože ruční balíček může chtít jiné verze knihoven, než má tvůj systém z repa a balíčkovač pak skončí v konfliktu, ze kterého se špatně leze (rozbité závislosti). Navíc se sám neaktualizuje (co stáhneš ručně, ručně i udržuješ) a nemusí být podepsaný klíčem, kterému systém věří. Když program v repu není, správné pořadí je: nejdřív oficiální repozitář výrobce, pak Flatpak (Flathub), a ruční .rpm/.deb až úplně nakonec a jen z důvěryhodného zdroje.