Balíčky

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

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