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.
"A jaké jsou tedy výhody? Především vzdělávací. Nenapadá mě lepší způsob jak se opravdu do hloubky seznámit s fungováním operačního systému postaveného na linuxovém jádře než si sám takový vytvořit. Příjemným bonusem je pak svižný systém ušitý přesně na míru potřebám tvůrce a jeho stroje."
Citát autora z prvního dílu :-)
Makefile může kromě části install obsahovat také část uninstall. Instalované soubory lze pak jednoduše odinstalovat pomocí "make uninstall". Pokud část uninstall definována není, lze seznam instalovaných souborů, nebo také hotový balík, získat pomocí nástrojů jako Installwatch, CheckInstall nebo Buildpkg.
Ano, systém pro správu software lze vytvořit také v Bash. Viz sorcery v Source Mage GNU/Linux.
Ja napriklad ve svem LFS pouzivam balickovaci system pacman (ArchLinux) - jsem s nim spokojeny, dokonce lze vesmes pouzit PKGBUILDY z archlinuxu, pripadne s drobnymi upravami.
Bohuzel pacmana jsem si doinstaloval az po dokonceni LFS, takze jsem jsem si vytvoril prazdne "fake" balicky, ktere odpovidaly nainstalovanym programum v LFS - aby mi porad pacman nehlasil chybejici zavislosti.
Nekde na netu jsem nasel stranky kde byl upraveny postup pro instalaci LFS tak, ze pacman byl pritomen jeste pred samotnou kompilaci systemu LFS. Ale bylo to myslim pro verzi 6.1 a me se nechtelo to upravovat - navic jelikoz to byla moje prvni kompilace LFS, nebyl jsem si jisty, zda to vubec zvladnu.
Kazdopadne pokud bych instaloval LFS podruhe, asi to tak rovnou udelam.
Jeste bych nakonec upozornil na vlastni balickovaci system distribuce Sinux, kterou vytvari pan Pavel Troller, na AVC klubu FEL CVUT lze najit video o jeho distribuci. Ma tam celkem zajimave resenou spravu balicku. Dale se mi tam libi upravene agetty, do ktereho lze zadat napriklad user@vas.vzdalenypc.cz a dostanete se k sobe pres ssh a to bez nutnosti prihlasovat se k danemu PC. (vhodne napriklad pro neduveryhodne kamarady kteri chcteji vyuzit Vaseho PC pro prihlaseni se k sobe domu a mozna i k jinym ucelum :-))
[8] to by pak, ale byl opět pouze upravený Debian. Já jsem neopustil Debian z důvodu nějaké nespokojenosti ze systémem, že bych snad nemohl něco v Debianu si nastavit podle svých představ. Jak jsem taky psal v minulém příspěvku, vlastně jsem původně měl v úmyslu si budovat LFS bokem Debianu, jako takovou hříčku ze zvědavosti. Vůbec jsem netušil, že to nakonec dopadne tak jak to dopadlo - Debian bude co nevidět odstraněn. Používal jsem Debian s dvěmi malými odbočkami (k Mandrivě a Red Hatu) něco kolem deseti let, ale během těch pár měsíců co se teď zajímám o LFS a tvorbu vlastního systému jsem se o celé problematice dozvěděl mnohem více, než za těch předchozích deset let a denně narážím na další překvapení. I tento systém co mám teď budu v dohledné době dělat znova, právě na základě nově ziskaných poznatků již bez dpkg a s několika dalšími změnami.
[7] právě jsem dokoukal to video na kterém pan Troller popisuje Sinux, moc zajímavé, sice mám trochu mořskou nemoc z jeho ustavičného přecházení sem tam, ale jeho systém řešení instalace software - založená na samostatných adresářích pro každou aplikaci - je moc zajímavá. Upravené agetty bych nejspíš nevyužil - nemyslím si že moc mých kamarádů zná ssh a ten nejbližší o kterém vím, že jej zná, je od mne vzdálen cca 1500 km :) A log na tty12 si nechávám vypisovat snad odjakživa, taky mi to přijde jak moc šikovná věc, ačkoliv do něj nekoukám pořád jako pan Troller ale jen když se mi zdá, že něco nejde tak jak má.
Pro zájemce je video ke stažení zde - http://www.avc-cvut.cz/avc.php?id=2842
[8] ještě bych dodal, že to, že požívám deb balíčky pro správu systému, neznamená že používám debianovské repozitáře. Všechny deb balíčky co mám v systému jsem si vlastnoručně vytvořil stažením zdrojáků a jejich následným zkompilováním a vytvořením deb souboru pomocí dpkg-deb -b.
Možná je to v plánu v dalších dílech, ale chtěl bych připomenout systém překrývajících se fs postavených na squashfs/LZMA, jako Slax. Asi nejblíže je to k balíčkovacím systémům, vyhody jsou nasnadě - rychlé přidávání ubírání balíčků "on the fly", nový systém, např. při instalaci jiného počítače/serveru, pomocí cp, za 5 minut a má oblíbená killing-výhoda, pro uchvácení windowsáků, "reinstalace" provedena přejmenováním změnového adresáře/souboru ;) (to samé záloha). Nevýhody taky jasné - práce s předpřípravou lzma modulů, asi i menší stabilita - co chvíli mi HD hlásí IO problém, ale to může být taky hardwarem, nejsem guru, abych to rozpoznal.
Pěkný zápisek. Pouze dodám, že pokud instalujete do /opt, nemusíte dělat symlinky, ale stačí pouze upravit onu proměnnou PATH, podobně jako to děláte s ld.so.conf. Pár desítek adresářů v /opt to tímto způsobem snese, ale rozhodně bych to nedoporučil pro každý balíček. Další nuance je pak používat při další kompilaci --with-něco=/opt/něco. Systém založený na vlastnictví souborů bych označil za trochu obskurní, možná by to šlo ale mnohem elegantněji řešit pomocí rozšířených atributů.
Jak přesně tvoříte ty balíčky? Instalujete do pomocného adresáře, tam pak vyrobíte balíček, a ten nainstalujete do systému?
[12] S těmi symlinky vs. PATH - ten pan Troller ve svém Sinuxu použil právě cestu stále rozšiřující se PATH - uvádí tam, že zkoumal jak moc to zpomalí spuštění programu který se nachází v adresáři který je v PATH až na konci, a vytvořil k tomu uměle nějakou extrémně dlouhou PATH a tvrdí, že zpomalení je zanedbatelné.
Ten systém vlastnictví souborů se mi napoprvé taky moc nepozdával, ale jak píšu v článku, čím víc nad ním uvažuji tím více se mi zamlouvá.
Balíčky vytvářím tak, že zkompilovaný soubor nechám nainstalovat do pomocného adresáře, v něm pak vytvořím adresář DEBIAN se souborem control obsahující jen to nejnutnější. No a to pak normálně zabalím pomocí dpkg-deb -b jmeno_adresare jmenobalicku.deb - popravdě jsem si na to udělal skriptík, který to dělá všechno za mne - jenom se mne zeptá do jaké sekce má balíček zařadit a jaký popisek přidat. Ručně dělám jenom ty věci, které zlobí...
[7] Není to nijak složité - prostě se ten pacman nainstaluje do /tools, a časem pak i do chrootu - chová se to naprosto standardně, neměl jsem s tím žádné potíže. Jinak je celkem dobré si balíčky dostatečně pečlivě rozvrhnout, protože když se na to pak nabalí závislosti, tak se to mění velice těžko...
For those who would like to be the very best wherever you review or function, then you will need to be a effective author. It doesn't imply tricksy or disingenuous, but clear-cut and persuasive. For our aims, writing is really a substance to an conclusion. The conclusion is a clear element of an crucial theme or opinion. So good you will be, and wish the tommorrow of us is going to be superior than ahead of.
I'm just surprised to discover how considerably of info I received on this particular topic. I m so incredibly thankful of you. 1 specific factor I could assert that, after reading this publish I became preserved from the entire ineffective search I ought to have carried out on this specific matter. Your write-up is sometimes a authentic great factor in disguise.
Just will need to say your article is striking. The clearness inside your publish is merely spectacular and i can take for granted you may be an expert on this field. Successfully together with your permission allow me to grab your rss feed to preserve up to date with forthcoming put up. Thank you a million and please maintain up the efficient function.Just will need to say your article is striking. The clearness inside your publish is merely spectacular and i can take for granted you may be an expert on this field. Successfully together with your permission allow me to grab your rss feed to preserve up to date with forthcoming put up. Thank you a million and please maintain up the efficient function.
I would like to thank you for the efforts you have got made in writing this article. I am hoping the exact exact same perfect operate from you within the future too. Truly your creative writing abilities has inspired me to start my own BlogEngine weblog now. Genuinely the blogging is spreading its wings rapidly. Your write up might be a fine example of it.
I'm just surprised to discover how substantially of info I received on this particular topic. I m so incredibly thankful of you. 1 specific factor I could assert that, after reading this publish I became preserved from the entire ineffective search I ought to have carried out on this specific matter. Your write-up is usually a authentic fantastic factor in disguise.
Thank you for taking this chance to talk about this, I really feel strongly about it and I benefit from learning about this topic. If feasible, as you gain data, please update this weblog with new facts. I have discovered it quite beneficial! I admiring time and effort you put inside your weblog, just since it's obviously a single great place where I can uncover excellent deal of useful info. Bookmarked and I will share it. Thank you a fantastic deal!
Just will want to say your article is striking. The clearness inside your publish is merely spectacular and i can take for granted you could be an expert on this field. Successfully together together with your permission permit me to grab your rss feed to preserve up to date with forthcoming put up. Thank you a million and please maintain up the efficient function. I definitelyliked every little bit of it and I've you bookmarked to have a look at new stuff you post.