Linux E X P R E S

Facebook

Balíčky ve Slackware

Když jsem začínal s Linuxem, slýchával jsem i o Slackware a o tom, jakým způsobem se v něm instaluje software a měl jsem v hlavě zakódováno, že v něm správa balíčku neexistuje a že se software instaluje prostým rozbalením archivu. Ale to jsem se mýlil. Správa balíčků ve slacku je sice velmi jednoduchá a samotné balíčky jsou prosté archivy *.tgz, ale v tom je právě jeho síla. A ne nadarmo se říká, že v jednoduchosti je krása.


Pokud narazíte na soubor s příponou *.tgz, tak vězte, že je to archiv souborů a adresářů, který vznikl tak, že se nejdřív dané soubory a adresáře spojily pomocí utility tar do jednoho celku a ten se pak pomocí další utility gzip zkomprimoval.

Anatomie balíčku

Název každého balíčku se řídí schématem nazev-verze-architektura-sestaveni.tgz. To se týká balíčků, které jsou obsaženy přímo v distribuci. Pokud uživatel vytváří své vlastní balíčky, je dobrým mravem a nepsaným standardem přidat na konec části sestavení svoji "značku" (např. ...-1pv.tgz). Jak už bylo řečeno, samotný balíček je prostý archiv doplněný pomocnými soubory slack-desc, který obsahuje popis balíčku, dále pak skript doinst.sh, který se vykoná hned po instalaci (jako např. skript postin v RPM balíčku) a volitelně také slack-required, který obsahuje závislosti. Jeho přítomnost v balíčku je však spíše vzácností a u balíčků z distribuce jej určitě nenajdete. Ovšem u programů s netypickými požadavky se hodí.

Kromě souborů slack-desc a slack-required se mohou v balíčku nacházet ještě slack-conflicts a slack-suggests. První upozorňuje na případné konflikty a druhý na vhodné doplňky daného balíčku. Pokud chcete vědět, co daný balíček obsahuje ještě před tím, než ho nainstalujete, použijte příkaz tar tzvf balicek, který vám zobrazí jeho obsah.

Balíčky ve Slackware musí mít příponu *.tgz, jinak je instalátor odmítne nainstalovat. Někdy se může stát, že stáhnete balíček, který končí příponou *.tar, ale ve skutečnosti je to opravdu *.tgz. Instalátor vám sice "vynadá", stačí ale opravit příponu a vše bude v pořádku.

Podstatnou věcí, kterou se balíčky a vůbec celý systém balíčků ve Slackware odlišuje od ostatních distribucí, jsou věčně skloňované a často proklínané závislosti (pokud tedy pomineme výše zmíněný sporadicky se vyskytující soubor). Ty se ve slacku standardně neřeší - a hotovo. V praxi člověk nenarazí na žádné problémy, hlavně co se týče balíčků přímo z distribuce a pokud se použije něco z jiného zdroje, tak většinou také ne. Tedy alespoň podle mých dosavadních zkušeností. Pokud se bez závislostí neobejdete nebo chcete mít dobrý pocit, že je vše v pořádku, použijte např. SWARET (viz dále).

SWARET je stabilní a výkonný nástroj, ale je třeba jej také správně nakonfigurovat. Lze pomocí něj provést např. kompletní upgrade distribuce, ale pokud si nepřečtete originální instrukce od Patricka Volkerdinga na instalačním CD, kde se píše, že třeba glibc je nutno upgradovat speciálním způsobem, tak se pak můžete divit, proč vám po upgradu nic nefunguje.

Dobrým nápadem je umístit příkaz swaret --update do crontabu, protože pak se nemusíte starat o to, jestli máte aktuální zdroje balíčků. To platí zejména při použití repozitáře www.linuxpackages.net.

Standardní výbava

Základními nástroji pro práci s balíčky jsou pkgtools, které se skládají z několika příkazů: installpkg, removepkg, upgradepkg, makepkg, explodepkg a pkgtool. První čtyři určitě není třeba popisovat, protože už samotný název je dostatečně intuitivní. Příkaz explodepkg je dle mého názoru spíše jen do počtu, protože dělá to samé, co tar xzf (rozbalení balíčku). Posledním článkem je pkgtool, což je program používající menu (pomocí ncurses), který v sobě pohodlně integruje první tři utility a také něco navíc (instalace z různých míst, přehled nainstalovaných balíčků a souborů, které obsahují a možnost znovu spustit instalační skripty).

Obrázek: Hlavní nabídka skriptu pkgtool

Obrázek: Rozhraní skriptu pkgtool

Mezi nástroji pro příkazovou řádku ještě pro úplnost chybí něco jako listpkg, který lze ovšem snadno nahradit příkazem ls /var/log/packages. V tomto adresáři se totiž nachází databáze aktuálně nainstalovaných balíčků s jejich popisy a seznamy souborů.

Kromě toho, že se v adresáři /var/log nachází databáze balíčků, existují ve /var ještě další adresáře, a to removed_packages, kde se nachází databáze odstraněných balíčků, dále pak removed_scripts, kde jsou poinstalační skripty pocházející z odstraněných balíčků a nakonec adresář scripts, kde jsou umístěny poinstalační skripty nainstalovaných balíčků. Ty lze kdykoliv spustit znovu, např. pokud dostaneme konfiguraci daného balíčku do nefunkčního stavu a je potřeba se vrátit ke konfiguraci výchozí.

Přímo v distribuci se nachází dokonce i RPM (tedy pokud si jej nainstalujete), takže lze instalovat RPM balíčky. Takto přímo bych to ale nedoporučoval. Lepší je použít převodní program rpm2tgz, vytvořit si z RPM balíčku *.tgz balíček a ten pak nainstalovat. Ale i tak je docela dost pravděpodobné, že vám takový balíček nadělá trošku neplechu v zažitých konvencích pro adresářovou strukturu. Nicméně, pokud spěcháte, tak se to hodí.

RPM je notoricky známá zkratka pro Red Hat Package Management. Balíčky RPM se používají nejen v distribucích firmy Red Hat a ve Fedora Core, ale také v Mandrake a SUSE.

Na třetím CD distribuce pak najdete v adresáři /extra CheckInstall, slackpkg a slacktrack. První zmíněný je myslím notorický známý (nejen ve Slackware) a slouží k vytváření balíčků v případě, že máte k dispozici pouze zdrojové kódy. Dřívější verze sice nefungovaly úplně stoprocentně, tzn. neprováděly např. některé důležité instalační kroky, ta nejnovější by však měla být již v pořádku, takže se již nemusíte obávat využití služeb tohoto skvělého pomocníka. Další dvě utility jsou už poněkud méně známé a v praxi je asi nepoužijete, ale je dobré o nich vědět.

V balíčku rpm, který je přímo v distribuci, se nachází i utilita rpmbuild, pomocí které lze ze zdrojových kódu a z tzv. spec souboru vytvořit binární balíček RPM. Lze se tedy vydat i touto cestou, tj. vytvořit balíček pomocí spec souboru a rpmbuild a pak jej překonvertovat pomocí rpm2tgz a nainstalovat.

Obrázek: Skript CheckInstall v akci

Další nástroje

Pro běžný provoz sice standardní nástroje dostačují, ale neposkytují moc komfortu, jako je např. vyhledávání balíčku na internetu nebo automatické aktualizace. Klasickým pokročilým nástrojem je SWARET neboli SlackWARE Tool. Využívá balíčky ze standardní distribuce i z jakéhokoliv dalšího repozitáře, který si přidáte do konfigurace.

Obrázek: SWARET a vyhledávání vše ohledně MPlayeru

Umožňuje instalovat balíčky přímo z internetu (a kontrolovat správnost stažení pomocí kontrolního součtu), dále je aktualizovat novými verzemi, vyhledávat na základě klíčového slova, kontrolovat závislosti aj. Na rozdíl od slapt-get existuje pouze pro příkazovou řádku, což je škoda, protože mnohým uživatelům by se určitě líbilo nějaké to grafické udělátko.

Dále tu máme již zmíněný slapt-get, jehož název by mohl evokovat myšlenku, že nějakým způsobem využívá zdroje Debianu. V podstatě umí to samé co SWARET a využívá ty samé zdroje balíčků. Na rozdíl od SWARETu ale disponuje i grafickým rozhraním v podobě programu GSlapt. Který z nich použijete, je už na vás, ale ať už se rozhodnete jakkoliv, tak se myslím o nic zásadního neochudíte.

Nevýhodou GSlaptu je nutnost spouštět jej pod uživatelem root nebo vhodně nakonfigurovat práva k adresáři, kde si slapt-get uchovává informace (/var/slapt-get).

Obrázek:Ikony používané v programu GSlapt jsou velmi podobné těm v Synapticu

Obrázek: Rozhraní aplikace GSlapt

Velice užitečným pomocníkem je cpan2tgz, který se specializuje na perlovské moduly z archívu CPAN (Comprehensive Perl Archive Network). Ovládá se opět z příkazové řádky a v podstatě po zadání klíčového slova stáhne, zkompiluje a vytvoří balíček příslušného modulu, popř. jej hned nainstaluje. A pokud budete chtít, vytvoří také všechny další moduly, které jsou potřeba pro ten, který jste původně chtěli.

Dalším zajímavým projektem je Portpkg, což je systém, který shromažďuje tzv. SlackBuild skripty (co to je, viz dále), které se nazývají porty a disponuje vlastním správcem balíčků v podobě příkazu portpkg. Princip je takový, že se stáhne zdrojový kód programu a port daného balíčku a podle něj se pak vytvoří binární balíček. Nevýhodou je, jak už to u takovýchto systémů bývá, malý počet dostupných portů. Nicméně, porty obsahují i docela exotické kousky, takže je možné, že zde najdete to, co jinde ne.

Obrázek:Vyhledávání balíčků pomocí skriptu portpkg

Velmi podobným nástrojem s téměř shodným názvem je pak Protopkg, který už ovšem není příliš podporován (spíš vůbec) a o dostupnosti tzv. prototypů radši ani nemluvit.

Ve světě Linuxu se občas dějí bizarní věci, a tak asi nikoho nepřekvapí, když vám teď řeknu, že si z ze svého slacku můžete udělat Gentoo, a to pomocí systému Emerde, což je v podstatě port emerge pro Slackware. Když jsem na něj poprvé narazil, byl jsem velice nadšený a vkládal jsem do něj velké naděje. Říkal jsem si, že už konečně budu mít pokoj se sháněním balíčků. Bohužel, každá mince má dvě strany.

Emerde se tváří přátelsky do té doby, než se pokusíte něco nainstalovat. Pak vám třeba za běhu aktualizuje knihovnu glibc a vy se pak nestačíte divit. A samotná deinstalace tohoto systému také není zrovna přítulná, když pominu to, že vám deinstalační utilita na konci vynadá do zrádců, tak některé věci je pak ještě nutno dokončit ručně.

Pominu-li to, že instalace je velmi nestandardní a poměrně zdlouhavá, tak v mém případě byla také dosti problémová. Jako "správný linuxář" jsem se při prvním problému začal pídit pomocí Google po řešení a narazil jsem na blog jednoho českého uživatele, který popisoval své zkušeností s Emerde. Tak rychle, jak jsem Emerde nainstaloval, jsem jej i sprovodil ze systému. Bohužel provádí poměrně rozsáhlé a zásadní změny, které ne vždy skončí dobře, v nejhorším případě reinstalací systému. Pokud tedy chcete mít distribuci založenou na kompilaci ze zdrojových kódu, sáhněte raději po Gentoo a na Emerde ve Slacku radši rychle zapomeňte. Myslím si, že to nestojí za to.

Na závěr části o alternativních nástrojích bych se ještě zmínil o programu s názvem alien, pomocí kterého lze převádět několik typů balíčku mezi sebou, tedy jakási obdoba rpm2tgz s tím rozdílem, že lze převádět i balíčky z Debianu.

Kde shánět balíčky

Hlavním zdrojem jsou samozřejmě instalační disky, ale tam nenajdete zdaleka vše, spíše jen to základní a nejnutnější (výjimkou je adresář /extra, na který lze ovšem při hledání snadno zapomenout). Pokud sháníte něco dalšího, musíte se prostě poohlédnout jinde. Nejlepším zdrojem je web a repozitář www.linuxpackages.net, kde najdete téměř vše, hlavně to, co se hodně používá a je rozšířené. Balíčky lze vyhledávat a stahovat buď ručně, a nebo např. pomocí SWARETu nebo slapt-get.

Balíčky lze dále získat tím nejjednodušším způsobem, a sice přímo z webu daného programu. Dost jich totiž vytváří balíčky nejen pro RPM distribuce a Debian, ale také pro Slackware. Dále lze pak najít další repozitáře různých lidí, odkazy na fórech aj. No a samozřejmě lze hledat přes Google. Poslední možností je pak vlastnoruční vytvoření balíčku, které v poslední době preferuji nejvíce.

Vlastní tvorba

Pokud vše ostatní selže a vy máte k dispozici jen zdrojové kódy daného programu nebo si prostě chcete vytvořit balíček sami, je čas si o tom něco málo povědět. Základem je vědět, jak se daný program kompiluje a instaluje (většinou pomocí "svaté trojice" ./configure && make && make install), jaké má požadavky atd.

Pak jen stačí napsat si tzv. SlackBuild skript, což je skript, který provede všechny tyto akce (spolu s dalšími jako např. komprimace manuálových stránek nebo odstranění ladicích symbolů z binárek) a ve finále vytvoří balíček, který je pak možno nainstalovat. Výhodou je to, že máte nad celým procesem absolutní kontrolu a také to, že se toho při psaní těchto skriptů docela dost naučíte. Příklady lze nalézt na třetím a čtvrtém instalačním CD, kde jsou ke každému balíčku k dispozici jak zdrojové kódy tak i SlackBuild skripty.

Nebudu se zde podrobně rozepisovat, jak při takové tvorbě balíčku postupovat, protože takový návod by pomalu stačil na další článek. Odkážu vás však opět na www.linuxpackages.net, kde najdete návod ("The perfect package" neboli přeloženo do češtiny "Perfektní balíček"), jak postupovat. Je zde obsaženo vše, co potřebujete vědět - kam co patří v adresářové struktuře, jak na práva a vlastníky souborů, jak na dokumentaci a další užitečné věci.

Pokud tvoříte vlastní balíček, musíte dávat pozor na to, aby se v názvu neobjevily ve verzi žádné pomlčky, protože pkgtools zpracovávají název balíčku zprava doleva a pomlčku používají jako oddělovač jednotlivých části, takže byste pak mohli mít problém při aktualizaci takového balíčku. Stručně řečeno, pomlčka do verze nepatří.

Závěr

Jak jste se dnes mohli přesvědčit, s balíčky ve Slackware to vůbec není tak triviální, jak se na první pohled může zdát, ale naštěstí existují kvalitní nástroje, které vám ulehčí život, z nichž za nejdůležitější nebo nejužitečnější považuji SWARET a slapt-get. Není to sice tak komfortní jako např. pravý apt v Debianu, ale určitě je to lepší, než instalovat natvrdo ze zdrojových kódů. Takový systém pak rychle ztrácí přehlednost a možnost snadné aktualizace. Je také možné, že existují další projekty zaměřující se na systém balíčků Slackware, takže dnešní výčet není kompletní, ale určitě je v něm to nejdůležitější.

Na druhou stranu tohle všechno má i své stinné stránky, a to je především lehká roztříštěnost, více různých nástrojů, které řeší to samé a občasné obtížnější shánění některých balíčků, případné dilema, který balíček nainstalovat, pokud je dostupný od více autorů nebo z více zdrojů, protože se mohou kvalitativně lišit. Ale na úplný závěr lze říct, že systém balíčků ve slacku by nemělo být to, co by vás od něj mělo odrazovat.

Diskuze (0) Nahoru