Správa balíků softwaru -- RedHat Package Manager
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
System is going down at 2pm to install scheduler bug.
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.
Pro čtenáře výhně asi bude nutné vysvětlit. Linux se dodává v
mnoha distribucích. Jedny z nich jsou Debian (jediná pořádná free
distribuce) a Red Hat (nejznámější komerční - ale je také k
dispozici zadarma na internetu). Tar.gz je formát zabalených soborů
něco jako arj, zip nebo rar v dosu.
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ů.
Opět malá poznámka. V UNIXU nejsou kompresní a archivační
programy pohromadě jako v DOSu. Tar je program, co umí vzít víc
souboru a spojit je do jednoho a gzip je program, co umí jeden
soubor zabalit. Tedy když pakujete nějaký adresář, napřed jej
spojíte tarem a potom gzipem zabalíte (proto ty dvě přípony). Není
ale nutné na disku dělat velký nezabalený archív po taru - protože
UNIX ma multitásking, příkaz jako: tar czvf - <adresář> | gzip -9 >
archiv.tar.gz (nemusí se to vždycky psát takhle složitě :)
přesměruje výstup z taru rovnou do gzipu a jeho výstup do souboru,
aniž by dělal nějaké dočasné fajly jako DOS.
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.
/etc/passwd je soubor obsahující informace o všech uživatelech,
jejich hesla apod. Některé programy (jako WWW server) běží pod
vlastním uživatelem, aby bylo jednoduché specifikovat, kam můžou a
kam ne, a nevznikaly díry v bezpečnosti systému. /etc/inetd.conf je
soubor obsahující informace o službách počítače v síti. Pokud jiný
počítač chce třeba ftpčkovat, přijme to internet superdaemon, ten se
koukne do tohoto souboru a spustí obslužný prográmek. /etc/rc.d se
spouští při startu, je tedy něco jako autoexec, /etc/profile.d se
pouští při přihlášení uživatele (autoexec pro daného uživatele).
Například existuje balík fortunes, který po přihlášení se do systému
vybere nějaký citát a tím uživatele potěší. Takový program se by se
tam pak měl při instalaci sám přidat (a zrušit po odinstalováni).
/etc/cron je zase tabulka programů, které se pouští v nějaký čas
(jako je úklid disku, mirror ftp apod.)
Ve starých distribucích jsou toto soubory. V nových jsou to
adresáře a každý package si prostě vytvoří soubor při instalaci a
nemusí tedy číst a modifikovat ty soubory přímo.
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ýheň