Kompilace ze zdrojáků
Nejjednodušší možnost je zkompilovat si software sám. Zjevná výhoda tohoto přístupu je jeho relativní jednoduchost. Na druhou stranu tento přístup má i své nevýhody. Jedna z nich je nutnost instalovat si všechny devel balíčky. Ty jsou třeba i při každé rekompilaci. A rekompilace je nutná vždy, když se dostatečně změní některý z balíčků na kterých váš oblíbený software závisí. To dostatečně by mělo být patrné z verze, ale nemusí tomu tak být vždy. Je možné že se něco změní jen trochu a výsledek jsou náhodné pády aplikace. Další nevýhoda je, že váš správce balíčků samozřejmě neví o tom, co jste si nainstalovali ručně, a tedy se i o závislosti musíte starat ručně.
Nejrozšířenější build systém jsou autotools. U těch vám ke kompilaci programu většinou stačí ./configure
, který zkontroluje, zda máte všechny závislosti nainstalované, následovaný příkazem make
. Ten už program opravdu přeloží. Pak by měla následovat fáze make install
která program nainstaluje. Výchozí nastavení bývá instalace do /usr/local
. Na to bychom ale potřebovali roota a za chvíli by tam byl pěkný binec. Kam se má program instalovat lze ovlivnit volbou ./configure
scriptu. Pro lepší pořádek v ručně nainstalovaných programech bych doporučil instalovat každý program do jiného adresáře. Například volat ./configure --prefix=~/myusr/program
, kde program
je jméno programu (nejlépe bez mezer, proč uvidíme za chvíli). Tím budete mít všechny programy hezky oddělené a usnadní to deinstalaci (stačí smazat patřičný adresář). Na druhou stranu ale nebudeme mít program v cestě (nepůjde ho zavolat z příkazové řádky). To lze vyřešit například přidáním následujícího do souboru ~/.profile
nebo ~/.bashrc
.
for i in ~/myusr/*/bin; do [ -d "$i" ] && export PATH="$i:$PATH"; done
Věci ale začnou být komplikovanější, pokud chceme používat ručně zkompilované knihovny. V tom případě budeme muset přidat další řádky, které budou podobně upravovat proměnou LD_LIBRARY_PATH
. Pokud budeme chtít aby program přibyl v seznamu aplikací, bude to vyžadovat další úpravy. A nakonec člověka napadne, jestli by nebylo přeci jen jednodušší program nechat nainstalovat přímo do /usr
a ať si tam dělá co chce a nebo uplácat balíček. Protože všichni máme rádi pořádek na svých strojích, podívejme se jak stvořit balíček.
Balíkaření
Elegantní řešení jak spravovat software je mít ho v balíčcích. Balíčky lze samozřejmě dělat lokálně, ale my se dnes podíváme na mnohem zajímavější možnost. Tou je openSUSE Buildservice. Tato služba umožňuje nechat si vybuildit (tedy sestavit) balíček na cizím stroji a vytvořit si snadno a rychle vlastní repositář s balíčky. A to nejen pro openSUSE. A navíc za vás ohlídá změny závislostí a umožní vám lehce spolupracovat s ostatními.
Jak začít?
Pro využívání openSUSE Buildservice potřebujete Novell login. Pokud jste někdy reportovali bug do openSUSE, dožadovali se featury, nebo upravovali openSUSE Wiki, tak jeden už dozajista máte. Pokud nemáte, není problém si ho vytvořit.
Po zalogování si můžete vytvořit svůj domovský repozitář a v něm si dělat, co chcete. Pokud to s balíkařením myslíte alespoň trochu vážně, určitě se vám bude hodit nástroj osc
pro příkazovou řádku i když hodně akcí lze provádět i přímo na webu. Klienta pro příkazovou řádku naleznete na download.opensuse.org/repositories/openSUSE:/Tools/, kde jsou k dispozici repozitáře pro většinu distribucí.
První balíček
Začněme tedy balit. Budeme vytvářet .rpm balíček, jelikož to je snadnější, ale s vynaložením o trošku většího úsilí lze v openSUSE Build Service vytvářet i .deb balíčky. Nejjednodušší start je kliknout v pohledu na domácí repozitář na odkaz s názvem Add package. Pokud si na následující obrazovce zvolíte experimentálního wizarda, ušetří vám to něco práce. Ve většině případů je volba Generic (./configure && make) to, co chcete. Průvodce vám vygeneruje vzorový .spec file, což je jakýsi recept na upečení .rpm balíčku. Na vás pak už jen bude ho nějak doupravovat.
Další možnost, jak získat .spec file, a možná i lepší a jednodušší, je najít podobný program, který v Build Service už je, a jen si jeho .spec file zkopírovat. Pozor, nejde o funkční podobnost, ale o buildící/závislostní podobnost. Například kecálek pro KDE bude mít blíž k video přehrávači pro KDE, než ke kecálkovi pro GNOME.
Časem dospějete k závěru, že webové rozhraní vám už nestačí, a po vytvoření úvodního .spec file a přidání zdrojáků budete chtít pohodlněji a rychleji dotáhnout balíček do konce. Pak se bude hodit osc
. Jak asi vypadá běžný postup práce?
Příkaz osc co home:login
stáhne celý váš domácí projekt na váš počítač. Můžete pak soubory editovat lokálně vaším oblíbeným textovým editorem. Nové soubory přidáte do online repositáře pomocí osc add file
a odstraníte pomocí osc rm file
. Po editaci následuje osc build --no-verify
, což zkusí balíček vybuildit lokálně. Stáhne vše potřebné, nainstaluje to do jednoho adresáře, který lze pak snadno odstranit, a zkusí stvořit balíček. Dá se tak rychleji otestovat, zda máte vše v pořádku, než čekat až na vás přijde řada. Pozor, i pro lokální sestavení balíčku potřebujete mít na webu přidánu distribuci, pro kterou chcete balíček tvořit. V okamžiku, kdy jste už se vším spokojeni, je na řadě zdokumentovat změny. Od toho tu je příkaz osc vc
. A pak už jen pomocí osc status
zkontrolovat, že žádný nový soubor nezůstal opomenut a promítnout změny zpět na server pomocí osc commit
.
Spolupráce
Jedna z největších předností openSUSE Buildservice je možnost spolupráce s jinými vývojáři. Na to už je ovšem potřeba něco lepšího než jen webové rozhraní. I když jen na některé kroky. A proč spolupracovat? Samozřejmě proto, abyste toho nemuseli dělat tolik sami.
Já mám balíček
Pokud se vám povedlo zabalit si software, není úplně nejlepší nechávat si ho jen pro sebe ve svém projektu. Pokud se vám podaří dostat balíček do nějakého nehome repa, je dost dobře možné, že ho začne používat i někdo jiný. A tito lidé vám mohou pomoci opravit chyby, nebo třeba pošlou update balíčku dříve, než se k tomu dostanete. Většinou stačí si jen zvolit správný projekt ze seznamu projektů, poslat submitrequest a pak reagovat na připomínky mainterů projektu. Odeslání žádosti o přijetí balíčku do projektu se dělá příkazem osc sr home:login balicek projekt_pro_balicek
.
On má balíček
Toto je opačný případ než předchozí. Někdo už software, který chcete, zabalil. Ale zabalil starou verzi a nevšiml si, že už je novější k dispozici. Nebo začal s balením, ale nedodělal balíček až do konce. V takovém případě máte usnadněný start. Nejdřív si uděláte svojí vlastní branch kde budete moci dělat změny pomocí osc branch projekt balicek home:login
. To vytvoří u vás v domácím projektu branch, kam můžete ukládat změny. A až vše doděláte ke své spokojenosti, odešlete změny zpět. Pokud máte lokální kopii na disku, stačí být v adresáři s balíčkem a spustit osc sr
.
Závěr
Pokud vás balíkaření zaujalo a narazíte na nějaké problémy s openSUSE Build Service, nenechte se odradit a přijďte se zeptat. Například na IRC kanále #opensuse-buildservice na irc.freenode.net. Pokud nevládnete angličtinou, na IRC kanále #susecz na stejném serveru se také občas najde někdo, kdo vám poradí ;-)