RPM: Balíčkovací formát
RPM (původně zkratka pro Red Hat Package Manager, dnes rekurzivně RPM Package Manager) je nízkoúrovňový systém pro správu softwaru a zároveň standardizovaný formát souborů (s příponou .rpm). Byl vyvinut v roce 1997 společností Red Hat a stal se základním stavebním kamenem pro instalaci, aktualizaci a odstraňování softwaru v mnoha populárních linuxových distribucích, jako jsou Red Hat Enterprise Linux (RHEL), Fedora, CentOS, AlmaLinux, Rocky Linux nebo SUSE/openSUSE.
Hlavním cílem RPM je usnadnit distribuci zkompilovaného softwaru. Namísto toho, aby koncový uživatel musel ručně stahovat zdrojové kódy, řešit chybějící knihovny a software zdlouhavě kompilovat (tzv. Dependency Hell), obdrží jeden úhledný balíček. Ten obsahuje jak samotné binární soubory, tak i přesné instrukce, kam se mají v systému překopírovat.
Architektura a obsah RPM balíčku
Fyzický soubor s příponou `.rpm` není nic jiného než speciálně strukturovaný archiv. Skládá se ze čtyř hlavních logických částí:
- Lead (Hlavička souboru): Historická část, která slouží primárně k identifikaci souboru (tzv. magic number), aby operační systém bezpečně poznal, že se jedná o formát RPM. Dnes má spíše zpětně-kompatibilní význam.
- Signature (Digitální podpis): Zajišťuje integritu a bezpečnost. Obsahuje kryptografický hash (např. SHA-256) a GPG podpis tvůrce balíčku. Díky tomu systém pozná, že balíček nebyl po cestě zasažen hackerem nebo poškozen při stahování.
- Header (Metadatová hlavička): Zásadní datová část. Obsahuje podrobné informace o softwaru: název, verzi, architekturu (např. x86_64, ARM), jméno tvůrce, licenci, a především seznam závislostí (jaké další knihovny program potřebuje ke svému běhu).
- Payload (Užitečné zatížení): Samotná data. Jedná se o archiv ve formátu cpio, který je silně komprimován (historicky pomocí `gzip`, v moderních systémech nejčastěji pomocí `xz` nebo `zstd`). Obsahuje přesnou adresářovou strukturu a binární soubory aplikace.
Vývoj balíčku: Soubor SPEC
Aby mohl vývojář vytvořit RPM balíček, musí napsat tzv. SPEC soubor (`.spec`). Jedná se o textový „recept“, který programu `rpmbuild` přesně říká, jak má stáhnout zdrojové kódy, jak je zkompilovat a jak je zabalit.
Typický SPEC soubor se dělí na několik fází:
- Předpříprava (`%prep`): Rozbalení stažených zdrojových kódů a aplikace případných patchů.
- Sestavení (`%build`): Samotná kompilace softwaru (často klasické spuštění `make`).
- Instalace (`%install`): Zkopírování zkompilovaných souborů do fiktivního dočasného kořenového adresáře (buildroot), který simuluje skutečný systém.
- Soubory (`%files`): Přesný soupis všech souborů, které si má RPM balíček „vzít“ a uložit do Payloadu.
Součástí SPEC souboru mohou být i skripty (Pre/Post install), které se automaticky spustí před nebo po instalaci balíčku (např. vytvoření nového systémového uživatele pro databázi nebo restartování webového serveru).
Důležitý rozdíl: RPM vs. DNF / YUM
V praxi dochází k velmi častému zmatení mezi příkazy `rpm` a nástroji jako `yum`, `dnf` nebo `zypper`. Je klíčové chápat rozdíl mezi backendem a frontendem.
RPM (Backend)
Nástroj `rpm` je nízkoúrovňový správce. Umí nainstalovat balíček, který už máte stažený fyzicky na disku (např. `rpm -i balicek.rpm`). Pokud ale zjistí, že balíčku chybí nějaká závislost (jiná knihovna), operaci zruší a vypíše chybové hlášení. Sám si chybějící knihovny stáhnout neumí, nemá přístup k internetovým repozitářům. Zapisuje provedené změny do lokální RPM databáze (uložené nejčastěji v `/var/lib/rpm/`).
DNF / YUM / Zypper (Frontend)
Jedná se o vysokoúrovňové správce softwaru. Když jim řeknete, aby nainstalovaly program, připojí se na internet, prohledají repozitáře, stáhnou požadovaný RPM balíček a zároveň samy identifikují a stáhnou všechny chybějící závislosti. Samotnou fyzickou instalaci pak ale „pod kapotou“ tiše předají nízkoúrovňovému RPM.
Srovnání: RPM vs. DEB
Ve světě Linuxu existují dva hlavní konkurenční formáty. RPM (doména Red Hatu) a DEB (doména Debianu a Ubuntu).
| Vlastnost | RPM (Red Hat, Fedora, SUSE) | DEB (Debian, Ubuntu, Mint) |
|---|---|---|
| Nízkoúrovňový nástroj | `rpm` | `dpkg` |
| Vysokoúrovňový manažer | `dnf` (dříve `yum`), `zypper` | `apt` (nebo `apt-get`) |
| Formát archivu (Payload) | `cpio` | `ar` (obsahující tarbally) |
| Tvorba balíčku | Pomocí jediného `.spec` souboru | Pomocí struktury adresáře `debian/` |
| Databáze nainstalovaných | Historicky Berkeley DB (BDB), nově NDB / SQLite | Textové databázové soubory |
| Hlavní výhoda | Jednodušší syntaxe pro sestavení v jednom souboru | Extrémně striktní a robustní řešení závislostí |
