Udělej si vlastní linuxový systém II.

9. 3. 2009 19:17 atrament

Před samotnou tvorbou systému je vhodné si nejprve pořádně promyslet pár věcí. Především ty, které by se později měnily docela těžko. Zde platí ono staré dobré pořekadlo – dvakrát měř a jednou instaluj.

Jednou z takových věcí, kterou bychom měli dobře uvážit, je jakým způsobem budeme v našem systému spravovat software. Dokumenty LFS si totiž s touto věcí hlavu nelámou, a vše se v nich instaluje přímo do systému pomocí make install. Což, jak doufám uznáte, není zrovna nejsofistikovanější řešení. Problémem tohoto způsobu je, že my vlastně nevíme co se kam nainstalovalo, a nemáme tudíž způsob, jak to lehce, v případě potřeby, odstranit. Taktéž dohledat informace o tom, co je vlastně nainstalováno, a k čemu patří jaký soubor, je takřka nemožné.

Dalo by se celkem dlouho diskutovat nad tím, zda je vůbec nějaké takové organizování software potřeba. Jistě v dokonalém světě by potřeba nebylo – všechno by se totiž do systému pomocí make install hladce nainstalovalo, nikde by nic s ničím nekolidovalo a všechno by hned fungovalo. A nikdy bychom to nepotřebovali odinstalovávat. Protože svět není dokonalý, nefunguje to tak. Dost často narazíme na problém, že někde se něco při pokusu o instalaci snaží přepsat soubor, který tam už nainstalovalo něco jiného. Stane se, že po nainstalování daný program nefunguje tak, jak jsme si představovali a chceme se ho zbavit. Chtít mít proces přidávání a odebírání software plně pod kontrolou je, dle mého názoru, dobré rozhodnutí.

Protože tvoříme svůj vlastní systém, můžeme si sami rozhodnout jakým způsobem budeme proces instalace držet pod kontrolou. Pojďme se tedy podívat jaké máme možnosti. Následující výčet není ani zdaleka úplný, jistě existují i další způsoby, pokud o nějakých víte, podělte se o ně s námi v diskusi pod článkem.

Balíčky

Nejpoužívanějším systémem správy software jsou klasické balíčkovací systémy, známé z většiny distribucí. Aplikace či knihovny či cokoliv dalšího pak přicházejí do systému jako balíčky. Tyto balíčky příslušný balíčkovací systém vezme, rozbalí, soubory z nich nakopíruje na definované lokace a udělá si záznam ve své databázi co nainstaloval a kam. Tyto informace jsou nám potom kdykoliv na požádání k dispozici a taktéž slouží při případném odinstalovávání. Stačí požádat balíčkovací systém, aby ze systému odebral ten a ten balíček, on se koukne do databáze, vytáhne si informace které soubory je třeba odstranit a tyto odstraní načež si odstraní i záznam o tom, že ten balíček vůbec kdy viděl.

Balíčky z distribucí v sobě, kromě samotného software, nesou spoustu dalších informací. Důležitý je především seznam závislostí. Drtivá většina programů totiž ke svému fungování potřebuje knihovny, které autor programu při jeho vývoji použil. Distributor, který vytváří balíček do něj tedy uvede na jaké knihovně je program závislý. Takže při pokusu o instalaci tohoto programu nám chytré balíčkovací systémy napřed stáhnou z distribučních repozitářů požadovanou knihovnu a nainstalují ji, takže následně instalovaný program ji už v sytému má, a je tudíž spokojený. Ty méně user-friendly nás aspoň upozorní, že chybí ona knihovna a dokud ji nenainstalujeme tak nám instalaci programu nepovolí (pokud nepoužijeme násilí). A pak jsou taky takové, které si s nějakými závislostmi hlavu nelámou vůbec, a je na uživateli, aby si zjistil co k provozování programu potřebuje a taky to obstaral.

Pokud se rozhodneme v našem systému použít balíčkovací systém, budeme si balíčky vytvářet sami. Nemusíme tedy vůbec uvádět žádný seznam závislostí. Nebudeme totiž mít v tomto případě k dispozici žádný repozitář a balíčkovací systém by tak neměl jak tyto závislosti řešit. Není to vlastně ani potřeba, protože si program kompilujeme sami ve svém systému a tudíž tam ony potřebné knihovny už být musí, jinak by se nám program zkompilovat ani nepovedlo. Narazit můžeme leda pokud bychom z nějakého důvodu něco odinstalovali – při samotné odinstalaci by nás totiž nic neupozornilo na fakt, že to co mažeme je potřeba pro deset dalších programů, které bez toho nebudou fungovat. Ale na to bychom vzápětí přišli velmi rychle sami :)

Pěkný návod jak ve svém systému zprovoznit a používat debianovský dpkg je zde.

Samostatné adresáře

Další možností je mít pro každou aplikaci zvláštní adresář. Při instalaci se prostě místo standardního umístění nechá aplikace nainstalovat do námi určeného adresáře. K tomuto účelu může dobře posloužit například adresář /opt. Nicméně pak by bylo nejspíš vhodné vytvořit v $PATH  adresářích symlinky na jejich spustitelné soubory tak, aby bylo možno je lehce spouštět v příkazové řádce bez nutnosti uvádět celou jejich cestu. U knihoven by určitě bylo nutné přidat do /etc/ld.so.conf patřičný záznam o tom kam jsme dotyčnou knihovnu nainstalovali, případně ve standardních adresářích s knihovnami vytvořit symlinky na ty knihovny. Odinstalace by pak probíhala prostým smazáním adresáře, symlinku a případného záznamu v /etc/ld.so.conf. Informace o tom co je vlastně v systému nainstalované by pak bylo možné zjistit třeba pomocí  ls /opt.

Systém založený na majitelích souborů

Velice zajímavá myšlenka je využít odlišných majitelů souborů. Pro názornost – pro instalaci mplayeru se vytvoří uživatel mplayer a pod tímto uživatelem provedeme samotnou instalaci mplayeru. Soubory které tak budou nainstalovány budou mít majitele mplayer, čímž jsou jednoznačně a lehce odlišitelné od souborů jiných aplikací. Na tomto základě pak probíhá celá správa software, která má díky tomu některá velmi zajímavá specifika a možnosti. Například instalace neprobíhá s právy roota, což opatrnější z nás určitě ocení. Domovské adresáře těchto uživatelů se dají krásně použít pro přehledné uložení hromady informací vztahující se k dané aplikaci včetně zdrojových kódů. Situace kdy jedna aplikace při instalaci přepíše nějaký soubor jiné aplikace jsou takřka vyloučené. Taktéž odstranit při odinstalaci soubor patřící jiné aplikaci není zrovna snadné. Detaily jsou výborně popsány v tomto článku.

Vlastní řešení

V neposlední řadě si můžeme nějaký ten systém pro správu software vytvořit sami. Klidně za pomoci bashe a základních GNU utilit. Napsat si pár šikovných skriptíků, které by v podstatě simulovaly základní funkce klasických balíčkovacích systémů nemůže být pro zdatnějšího linuxáka příliš velký problém. V podstatě jde pouze o to udržet si přehled kam co instalujeme, takže při instalaci si toto prostě někam poznamenat a následně to na základě tohoto záznamu dokázat odinstalovat (smazat). V případě, že máme podobný záznam, tak dokázat vypsat co všechno je v systému nainstalované, je už to nejmenší. Je to sice tak trochu objevování kola, ale fantasii a iniciativě se meze nekladou.

Pro co jsem se rozhodl já

Já jsem se rozhodl ve svém systému použít balíčkovací systém z Debianu, již zmiňovaný program dpkg. Neměl jsem pro to žádný zvláštní důvod, jsem prostě na ty deb balíčky zvyklý a vím jak je snadno vytvářet. Jiné balíčkovací mechanismy jako třeba rpm moc do detailů neznám. U věcí, které mi samotným názvem nenapoví, si píšu do popisku balíčku co to je, a proč to instaluji. Napříště se ale zřejmě vrhnu na onen systém založený na majitelích souborů, neboť čím víc nad ním přemýšlím, tím více se mi zamlouvá.

Shrnutí

Abych to tedy nějak shrnul. Pečlivě si rozmyslete jakým způsobem budete do systému, který vytvoříte, dostávat další software. Mějte na paměti, že vám nic nebrání používat i více způsobů najednou – například standardní aplikace mít klasickýma balíčkama, nějaké pokusy v oddělených adresářích, a knihovny pomocí různých majitelů souborů. Jak je libo. Hlavní je, abyste se v tom vyznali vy a aby vám to vyhovovalo.

Sdílet