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ň