Uživatelské nástroje

Nástroje pro tento web


Kompilace Turris OS ze zdrojových kódů

Systém Turris OS je založený na distribuci OpenWrt, do které jsou zahrnuty různé úpravy a software, který například zajišťuje automatické aktualizace nebo analyzuje síťový provoz. Kompletní zdrojové kódy systému jsou k dispozici v gitovém repositáři a je možno jej zkompilovat do binární podoby a nainstalovat na zařízení.

Turris OS je možné zkompilovat prakticky na libovolném počítači. V produkčním prostředí je systém kompilován automaticky na systému Ubuntu a následující postupy jsou na tomto systému ověřeny. Přesto je možné ho obdobným postupem zkompilovat i na jiných systémech.

V prvním kroce je nutné naklonovat si repositář Turris OS. To je možné provést některým z následujících dvou příkazů (druhý příkaz je pro naklonování z mirroru na serveru GitHub):

git clone https://gitlab.labs.nic.cz/turris/openwrt.git
git clone https://github.com/CZ-NIC/turris-os.git

Příprava vývojového prostředí

Nejlepším způsobem jak zajistit hladký průběh kompilace je použít totožné prostředí jako v produkci. Nejlépe pak nasazením tohoto prostředí do kontejneru, což také umožní oddělení hlavního systému od systému pro kompilaci. V tuto chvíli je pouze jedna varianta jak toto učinit a to pomocí nástroje Vagrant.

Vagrant

Vagrant slouží ke snadné správě vývojových prostředí a v repositáři s Turris OS jsou již připraveny skripty, které umožňují toto prostředí vytvořit zadáním několika málo příkazů. Zároveň automaticky zajišťuje synchronizaci mezi hostitelským systémem a vývojovým prostředím, takže je možné v rámci repositáře pracovat se sadou programů, které jsou nainstalovány v hostitelském systému (například s oblíbeným textovým editorem), a změny se okamžitě projeví v jinak izolovaném prostředí, které s hostitelským systémem sdílí pouze složku naklonovaného repositáře a ve kterém spouštíme kompilaci systému.

V prvním kroku je nutné nainstalovat aplikaci Vagrant. To je možné provést pomocí správce balíků (např. APT v Ubuntu/Debian). V repositářích některých distribucí se však nachází zastaralé verze, které pozbývají potřebné funkce a mohou tak způsobovat problémy. V tom případě je doporučeno nainstalovat verzi staženou z oficiálních stránek.

Po instalaci aplikace Vagrant je nutné doinstalovat plugin vagrant-lxc, který umožňuje používat LXC kontejnery. Ty usnadňují oddělení systému pro kompilaci od hlavního systému bez výraznějšího snížení rychlosti kompilace. Tento plugin samozřejmě vyžaduje také instalaci podpory LXC v hlavním systému. Instalaci tohoto pluginu a jeho závislostí by mělo zajistit zadání těchto příkazů (předpokladem je již nainstalovaná aplikace Vagrant):

sudo apt-get install lxc
vagrant plugin install vagrant-lxc

V posledním kroku je potřeba vytvořit symbolický odkaz (nebo zkopírovat) na soubor s definicí vývojového prostředí do kořenového adresáře s naklonovaným repositářem:

ln -s vagrant/Vagrantfile

Nyní je již možné spustit instanci vývojového prostředí, se kterou budete pracovat, to provedete příkazem vagrant up --provider=lxc (příznak --provider=lxc je potřebný pouze při prvotní inicializaci). Tento příkaz se nám bude hodit pokaždé, kdy instanci ukončíme (pomocí vagrant halt nebo po restartu hostitelského systému). Pokud budete z nějakého důvodu potřebovat vývojové prostředí přeinstalovat (ekvivalent přeinstalování celého systému) nebo odstranit, bude se hodit příkaz vagrant destroy.

Pro přístup do systému slouží příkaz vagrant ssh spuštěný v kořenovém adresáři repositáře. Tím se otevře SSH spojení do kontejneru s vývojovým prostředím, se kterým je již možné pracovat jako s normálním systémem. Adresář, který je synchronizován s repositářem v hostitelském systému, je v systému dostupný v cestě /openwrt.

Nastavení prostředí bez kontejnerů

Pokud na vašem systému nemůžete nebo nechcete používat prostředí Vagrant je možné nainstalovat závislosti kompilace systému přímo do hostitelského systému. Tyto závislosti lze nalézt v inicializačním skriptu vagrant/vagrant_bootstrap.sh, který se spouští po prvním spuštění prostředí Vagrant. V systémech založených na distribuci Debian bude možné pravděpodobně příkazy v něm použité použít beze změny, v jiných systémech bude nutné nalézt a nainstalovat software, který instalovaným balíčkům odpovídá. V hledání může pomoct tabulka na wiki OpenWrt. Uvedený skript zároveň upravuje URL pro stahování balíčků a volitelně též umožňuje instalaci doplňování argumentů pro příkaz make v buildrootu pomocí rozšíření openwrt-bash-completion.

Poslední možností je použít pro kompilaci plně virtualizovaný systém. Tato metoda je nejnáročnější na prostředky (CPU a operační paměť), ale je možné ji použít na nejširším množství systémů, včetně OS Windows. Pro virtualizaci lze použít například volně dostupnou aplikaci VirtualBox. V tomto případě je vhodné jako instalovaný systém zvolit distribuci Ubuntu - v tom případě stačí po instalaci systému naklonovat repozitář Turris OS a spustit výše uvedený inicializační skript, který se postará o vše ostatní.

Vlastní kompilace Turris OS

Turris OS, respektive OpenWRT, se skládá z velkého množství skriptů. K sestavení Je nutné vykonat několik kroků jako například vytvoření konfigurace, stažení feedů (zdrojů balíčků nad rámec OpenWRT), záplatování feedů a další. Protože dohromady se jedná o komplexní postup tak v Turris OS je implementován compile_fw skript. Ten automatizuje všechny kroky potřebné pro sestavení Turris OS.

V závislosti na cílovém routeru by měl být použit skript compile_omnia_fw (pro Turris Omnia) nebo compile_turris_fw (pro Turris 1.x).

compile_fw skriptu je možné dát argumenty, které jsou následně použity pro volání make pro OpenWRT build. Doporučeným argumentem je -j$(nproc) tak aby sestavení probíhalo paralelně.

Ve výchozím stavu je sestavena pouze minimální sada balíčků. Nejedná se tak o kompletní Turris OS, ale je to dostatečný základ pro například vytváření nových balíčků. Tento typ sestavení se používá pro vývoj a zrychlené sestavování. V závislosti na hardwaru může trvat půl a celou hodinu.

Pro sestavení a nebo vygenerování medkitu je nutné specifikovat proměnnou BUILD_ALL=y v proměnném prostředí při spuštění jednoho z compile_fw skriptů. To je možné udělat takto: BUILD_ALL=y ./compile_omnia_fw (v případě Turris 1.x pak compile_turris_fw). Tento typ sestavení je nutný pro vygenerování vlastního medkitu (archivu s kořenovým souborovým systémem který je možné nahrát do routeru). Tento typ sestavení může trvat více než osm hodin a to v závislosti na použitém hardwaru. Je také náchylný na selhání (způsobené souběhem balíčků).

Pokud narazíte na problém při sestavování tak můžete zkusit snížit hodnotu argumentu -j nebo ji nastavit na -j1 pro vypnutí paralelního sestavování. Tyto problémy jsou způsobené souběhem balíčků při sestavování a obtížně objevitelnými chybějícími závislostmi.