- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny Listopad 1997

Správa balíků softwaru - RedHat Package Manager

Jan "Yenya" Kasprzak, 6. listopadu 1997

Co je balík softwaru?

Při instalaci jakéhokoli většího softwarového systému - ať už je to operační systém (jako je třeba Linux) nebo aplikace (jako například WordPerfect) - asi každý zjistil, že tento systém je distribuován v určitých oddělených kouscích - balících (packages). Takovýto balík na instalačním médiu obvykle slouží k vygenerování jednoho nebo více souborů v příslušné části disku.

Takže pod pojmem balík softwaru (package) si lze představit několik souvisejících souborů zabalených do nějaké formy, kterou lze dále distribuovat a na cílovém stroji rozbalovat. A právě instalace - rozbalování - balíků je jednou z hlavních úloh správce balíků (package manageru).

Většina čtenářů tohoto listu již asi slyšela o distribucích Debian a Red Hat. V oznámeních o těchto distribucích se dočtete, že používají určitý sofistikovaný systém správy balíků. Co to je a proč nestačí distribuovat software jako tar.gz soubor se dočtete v tomto článku.

Správce balíků

Ne všechny operační systémy (nebo lépe distribuce) mají svůj vlastní definovaný formát pro správu balíků, natož pak svého vlastního správce balíků. Například pod DOSem jsou programy distribuovány například jako samorozbalující se (.EXE) nebo komprimovány programem ZIP nebo ARJ.

Některé systémy sice mají správce balíků, ale ve formě příslušných balíků je distribuován pouze operační systém samotný, nikoli však další programy od jiných výrobců. To je případ většiny komerčních UNIXů, uveďme například inst na IRIXu.

A jiné systémy správy balíků zase nemají všechny vlastnosti, které lze čekat od opravdového systému pro správu balíků (to je například případ Windows).

Vyvstává tedy otázka, co všechno lze čekat od systému pro správu balíků.

Co může umět správce balíků?

Samozřejmě první a základní vlastností je, že musí umět příslušný balík rozbalit a nainstalovat. Tomuto v podstatě vyhovují i balíky distribuované ve formátu .tar.gz a tar s gzipem ve funkci správce balíků.

Podstatnou úlohou pro správce balíku je odinstalování softwaru. Jistě znáte případy z prostředí Windows, kdy odinstalovaný program po sobě zanechá spousty DLL souborů, volně rozprostřených po celém disku, o dočasných souborech ani nemluvě. Dobrý správce balíků by měl být schopen balík odinstalovat, a to nejen smazáním všech souborů, které k balíku patří, ale i zrušením odkazů z dalších konfiguračních souborů, zrušením příslušných pseudouživatelů ze systémových tabulek, adresářů pro dočasné soubory a podobně. To jest po odinstalování balíku by měl systém být ve stavu, v jakém byl před jeho nainstalováním.

Jistě se vám už někdy stalo, že jste narazili na svém disku na nějaký soubor, o němž jste si vůbec nebyli jisti, k čemu vlastně slouží. Toto by měla být další schopnost správce balíků - udržovat v nějaké rychle vyhledávatelné formě informace o tom, které balíky jsou v systému nainstalovány a které soubory patří do kterého balíku. Tohle už například Windows nezvládají.

Správce balíků by si nejen měl pamatovat, které soubory k danému balíku patří, ale také na požádání zkontrolovat, jestli tyto soubory jsou skutečně v takovém stavu, v jakém byly při konfiguraci. Správce balíků má udržovat mimo jiné i informace o přístupových právech jednotlivých souborů, jejich vlastnících a skupinách. Navíc je dobré, pokud si správce balíků pamatuje i kontrolní součet souborů (obvykle pomocí metody MD5).

Pokud instalujete na svůj počítač cizí software, měli byste také mít možnost přesvědčit se, že balík nebyl cestou modifikován. K tomu slouží mimo jiné kontrolní součet celého balíku. Také lze ověřovat, je-li balík skutečně vyroben tím, o kom to tvrdí. K tomu slouží elektronický podpis balíku, obvykle metodou RSA (PGP).

Často se setkáte s nutností upgradovat určitý balík softwaru. Na některých systémech vám nezbude než smazat původní balik a nainstalovat nový. Tímto ovšem obvykle ztratíte příslušné konfigurační soubory. Správce balíků by měl být schopen upgradovat balík s tím, že vás upozorní, které konfigurační soubory jste měnili a které ne. Pochopitelně by měl konfigurační soubor přepsat novou verzí a starý někam uložit, byl-li modifikován. Stává se totiž, že nová verze softwaru vyžaduje jiný formát konfiguračního souboru, než byl u starší verze.

Instalace softwaru není ovšem jen rozbalení balíku. Často je třeba přidat určité informace do různých souborů (/etc/passwd, /etc/inetd.conf a podobně). Tento úkol je netriviální a je to jedna z příčin existence konfiguračních adresářů místo konfiguračních souborů (/etc/cron.daily, /etc/profile.d, /etc/rc.d, /etc/pam.d a další). Přesto je někdy nutno změnit konfigurační soubor programem. Dobrý správce balíků/formát balíků by měl umět spustit skript uložený uvnitř balíku, a to před instalací, po instalaci, před smazáním a po smazání určitého balíku.

Někdy je také nutné, aby před nainstalováním určitého balíku byl nainstalován jiný balík (říkáme, že balík závisí na jiném balíku). Toto se typicky vyskytuje například u knihoven - příslušná sdílená knihovna musí být nainstalována před instalací programu, který ji používá. Stává se také, že balík nevyžaduje instalaci jiného konkrétního balíku, ale balíku, obsahujícího určitý soubor (například program mail může vyžadovat existenci souboru /usr/sbin/sendmail, nebo program v Perlu vyžaduje předchozí nainstalování Perlu samotného). Další důležitou vlastností správce balíku jsou tedy závislosti (dependencies).

Pro psaní obslužných programů pro správu balíků se také vyžaduje, aby byl formát balíku dobře dokumentován, navržen rozšiřitelně pro přidání dalších vlastností (s tím souvisí i umožnění dalšího vývoje formou verze příslušného formátu balíků). Vývoj aplikací a nadstaveb na správu balíků jistě usnadní i dostupnost knihovny pro práci s balíky a s databází instalovaných balíků.

Správce balíků musí také napomáhat vytváření balíků někým jiným, než autorem distribuce nebo operačního systému. Musí být schopen distribuovat i balíky ve zdrojové podobě včetně případných záplat. V balíku ve zdrojové formě musí být obsaženy všechny informace k automatickému skompilování a nainstalování balíku z původní nemodifikované zdrojové verze daného softwaru. To jest v balíku by měl být původní nemodifikovaný zdrojový text sám (například ve formě tar.gz souboru), záplaty pro případný port na danou platformu, příkazy pro rozbalení, kompilaci a nainstalování, a samozřejmě seznam souborů, které v konečné fázi budou ke kompilovanému balíku patřit.

Poslední, i když ne nejméně důležitou vlastností správce balíků je, aby samotný software pro správu balíků byl volně šiřitelný. Tato vlastnost je důležitá u jakéhokoli softwaru stejně jako u správce balíků softwaru.

Správci balíků v Linuxu

V distribucích Linuxu se postupem času vyvinuly prostředky pro správu balíků, a to v nejrůznějších formách a schopnostech. Správce pkgtool z distribuce Slackware má poměrně omezené možnosti. Udržuje informace o jménech souborů v jednotlivých balících (a tedy umožňuje jistou formu odinstalování balíku), umí i spustit skript po instalaci. Jeho kladnou vlastností je formát balíku - jedná se o běžný tar.gz soubor, který tedy lze prohlížet a rozbalovat i na jiných než Linuxových systémech.

Mezi další patří dpkg z distribuce Debian. Je to první správce balíků, který umí i závislosti (dependence). Distribuce Red Hat používá systém RPM, o kterém bude v tomto listě řeč v příštích číslech. Oba dva systémy tvoří špičku ve správě balíků. Liší se v některých drobnostech s tím, že postupně přebírají i kladné vlastnosti ze svých protějšků: do RPM byly implementovány závislosti, do dpkg zase MD5 součty a PGP podpisy.

Před nějakou dobou se objevil program alien, který umožní instalovat balíky z Red Hatu, Debianu a Slackwaru i do libovolné z těchto distribucí.

V příštím čísle Linuxových novin porovnáme dpkg a RPM. *


- předchozí článek - následující článek - obsah - úvodní stránka -