Stručný úvod do kompilace

Kompilace programů ze zdrojových kódů často připomíná linuxovým začátečníkům černou magii, a dokonce i někteří dlouholetí uživatelé jinak přívětivého tučňáčího operačního systému se jí vyhýbají jako čert kříži. V tomto tématu bych chtěl ukázat, že pro takovéto postoje do značné míry není důvod. Kompilace má přesně daná pravidla a autoři programů se nám ji většinou snaží co nejvíce zjednodušit. Jak říkal jeden můj učitel matematiky: Nejhorší smrt je z vyděšení wink
Proč kompilovat?
Repositáře dnešních distribucí obsahují nepřeberné množství balíčků s nejrůznějšími aplikacemi, nástroji a knihovnami. Také valná většina autorů programů poskytuje předem připravené balíčky pro hlavní distribuce, nebo dokonce sestavuje a udržuje vlastní repositáře. Proto nejen pro začátečníka je nejjednodušší této nabídky využít a nainstalovat si vyhlédnutou aplikaci nebo hru pomocí svého balíčkovacího systému. Přesto se najdou situace, kdy je kompilace přímo ze zdrojového kódu výhodou či dokonce nutností.
Může to být třeba prostý fakt, že autor aplikace balíček pro naši distribuci jednoduše nenabízí a my nemáme jinou možnost, jak ho získat. Je sice možné, aby nám někdo balíček zkompiloval a poskytl, ale ten nemusí vždy fungovat (architktura x86 vs. x64 atd…). Nesmíme také zapomenout na případné bezpečnostní riziko takovéhoto postupu. (Na druhou stranu: můžeme vůbec nějakému softwaru jako laici důvěřovat, když nejsme schopni přečíst si jeho zdrojové kódy a porozumět jim? – Věc na delší diskuzi.) Balíčky si můžeme vyrobit i sami pro vlastní potřebu.
Dalším důvodem pro kompilaci může být i snaha o co nejmenší systémové nároky takto vytvořené aplikace. Kompilací si totiž sestavíme program ušitý přímo na míru našemu hardwaru, a tím dosáhneme podstatného zkrácení kódu, který bude muset procesor obsloužit. To povede k rychlejšímu spouštění a celkovému běhu aplikace. Balíčky totiž z důvodu snahy o co největší kompatibilitu s nejrůznějším hardwarem obsahují velké množství dat, které pro chod na našem stroji vůbec nepotřebujeme. Nejlepších výsledků dosáhneme, začneme-li od podlahy a zkompilujeme si rovnou celé jádro systému nebo i grafické prostředí a další jeho součásti, to je ale daleko za hranicemi tohoto stručného úvodu. Se stále zvyšujícím se výkonem běžně dostupných počítačů a jejich komponent už tenhle důvod pomalu ztrácí význam, avšak pro někoho se starším hardwarem nebo nepříliš výkonným zařízením (třeba netbookem) může být stále zajímavý.
Do třetice všeho dobrého: Schopnost zkompilovat si program patří k pilířům pokročilejší linuxové gramotnosti a neměli bychom se jí proto vyhýbat. Kompilování nás mnohému naučí a pro některé z nás to bude i velká zábava smile
Jaké jsou nevýhody kompilace?
Kromě časové náročnosti a složitosti oproti dnes tradičním způsobům instalace programů můžeme narazit na hlavní dvě:
O program, který si takto sami vytvoříme se musíme taky i sami starat. Bude stát mimo náš balíčkovací systém, a proto pro něj nebudou poskytovány žádné aktualizace. Tento neduh se dá částečně odstranit pomocí různých nástrojů jako například GITu, ale to bychom opět zabíhali do přílišných podrobností.
Další věc, která nás může překvapit, je ta, že ne všichni autoři myslí na integraci své aplikace do systému. Proto si často budeme muset sami vytvořit spouštěč v nabídce programů a na ploše nebo propojit program s ostatními součástmi distribuce a jinými aplikacemi. Většinou se nevyhneme ruční editaci různě složitých konfiguračních souborů, v čemž nám může hodně pomoci prostudování dokumentace od poskytovatele programu.
Jak kompilovat?
Postup při kompilaci, nebo též překladu programů ze zdrojových kódů, můžeme shrnout do tří výrazů, které se staly už v dávných dobách Linuxu a podobných systémů jakousi jeho značkou, mantrou nebo zaklínadlem. Říká se jim také někdy Svatá trojice nebo trojkombinace. Je to posloupnost příkazů CONFIGURE, MAKE a MAKE INSTALL.
Zanechme už ale suchopárné teorie a dejme se do díla.
Před prvními pokusy si určitě nainstalujeme  balíček build-essential (platí pro distribuce založené na Debianu a možná i některé další), jsou v něm nejzákladnější nástroje potřebné pro kompilaci. Pak si přečteme soubor README a ostatní texťáky, které najdeme u každého zdrojového kódu. Bývají tam detailní návody, jak při kompilaci postupovat včetně seznamu závislostí tedy balíčků nebo knihoven, bez kterých se nám tento kód sestavit nepodaří. Doinstalujeme tedy potřebné balíčky, pokud je už v systému nemáme, a pustíme se směle do toho.
Přepneme se v konzoli do adresáře se zdrojákem a začneme spuštěním skriptu configure (normálně to napíšeme a zmáčkneme klávesu enter). Když se mu nebude něco líbit, tak napíšeme před configure příkaz sudo. Stejně postupujeme u make a make install. Configure sestaví části kódu na míru našemu počítači a systému, make ho zkompiluje a make install nakonec nainstaluje. Některý program práva roota vyžaduje a některý ne. Výstupy všech skriptů jsou hodně podrobné a dá se z nich přijít na případný zádrhel. Je celkem jedno, odkud kompilaci spustíme, ale správně by měl být takto vytvořený program umístěn v adresáři /opt, kam patří všechny programy, které nejsou standardní součástí distribuce.
Nakonec si můžeme pogratulovat k prvnímu vlastnoručně zkompilovanému programu smile
Doufám, že se mi povedlo vám problematiku kompilace alespoň trochu přiblížit a obavy mírně rozptýlit. Budu rád, když se o svoje zkušenosti a zážitky podělíte v této diskuzi.
Příspěvek byl publikován v rubrice o106 se štítky , , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.