Uživatelské nástroje

Nástroje pro tento web

Tato dokumentace již není udržována týmem projektu Turris (přestože ji lze i nadále používat pro sdílení komunitního obsahu). Aktuální oficiální dokumentace se nachází na docs.turris.cz.

Tato dokumentace je jen pro Turris OS 3.x, který se už nenachází na nově prodávaných routerech. Novou dokumentaci najdete na https://docs.turris.cz/.

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.