Uživatelské nástroje

Nástroje pro tento web


Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
cs:howto:turris_os_build [2017/03/09 12:05]
nkoranova [Vlastní kompilace Turris OS]
cs:howto:turris_os_build [2018/06/07 13:33] (aktuální)
kkoci [Vlastní kompilace Turris OS]
Řádek 131: Řádek 131:
 ===== Vlastní kompilace Turris OS ===== ===== Vlastní kompilace Turris OS =====
  
-Buildroot (kompilační prostředí) ​Turris OS, respektive ​OpenWrt, se skládá z +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í konfiguracestaž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.
-velkého množství skriptů, ​které zajišťují cross kompilaci ​(kompilaci pro cílovou +
-platformuprostřednictvím rozhraní nástroje //GNU Make//. Hlavním příkazem,​ +
-kterým proto budete buildroot ovládat, je příkaz ​''​make''​. ​+
  
-Kromě klíčových komponent systému, obsažených v repositáři //openwrt// (resp. +V závislosti ​na cílovém routeru ​by měbýt použit skript ​''​compile_omnia_fw'' ​(pro Turris Omnia) nebo ''​compile_turris_fw''​ (pro Turris 1.x).
-//​turris-os//​),​ jsou se systémem kompilovány další balíčky, které jsou spravovány +
-v repositáři //​turris-os-packages//​ a dalších repositářích třetích stran. O jejich +
-zahrnutí do systému se stará skript pro správu tzv. feeds. Podívejme se tedy na +
-příkazy, které se mohou hodit při používání buildrootu. Všechny příkazy ​by měly +
-být spouštěny v kořenovém adresáři repositáře (ve složce ''​/openwrt'' ​v prostředí +
-Vagrant). Uvedeny jsou v pořadí, ve kterém je nutné je spustit po inicializaci +
-čistého vývojového prostředí:​+
  
-''​./​scripts/​feeds update -a'' ​-- Aktualizace všech feeds z jejich umístění. V tomto kroku se zpravidla stáhne obsah dalších repozitářů jako turris-os-packages do oddělených složek. +''​compile_fw'' ​skriptu ​je možné ​dát argumenty, které jsou následně použity ​pro volání ​''​make''​ pro OpenWRT buildDoporučeným argumentem je ''​-j$(nproc)'' ​tak aby sestavení probíhalo paralelně.
- * ''​./​scripts/​feeds install -a''​ -- Instalace balíčků ze všech feeds do buildrootu. Tím se vytvoří symbolické odkazy na definice balíčků v adresáři ''​package/''​ a je tak možné ​balíčky vybrat a zkompilovat. +
- * ''​cp configs/​omnia .config''​ -- Zkopírování konfiguračního souboru ​pro Turris Omnia (alternativně ​''​configs/​turris''​ pro Turris 1.x) +
- * ''​make menuconfig''​ -- Zobrazení konfiguračního menu. V rámci nělze nastavit, jaké balíčky se mají kompilovat a případně lze upravit další parametry sestavovaného systému. Po uložení se zároveň sestaví informace o aktuální konfiguraci ​(toho lze docílit i spuštěním příkazu ​''​make defconfig''​).+
  
-Po spuštění těchto příkazů můžete spustit kompilaci všech nástrojů a systému +Ve výchozím stavu je sestavena pouze minimální sada balíčNejedná ​se tak kompletní Turris OSale je to dostatečný základ pro například vytváření nových balíčTento typ sestavení se používá pro vývoj ​zrychlené sestavování. V závislosti ​na hardwaru může trvat celou hodinu.
-samotného. Protože by jednovláknově tato operace trvala velice dlouho, v ukázce ​je +
-použit příznak ''​-j ČÍSLO'',​ kde ''​ČÍSLO''​ reprezentuje počet úloh, které mohou +
-souběžně probíhatDoporučuje ​se volit počet, který odpovídá počtu jader CPU nebo +
-hodnota ​jedna vyšší. Parametry ''​LOGFILE=1 BUILD_LOG=1 IS_TTY=1''​ zajišťujíaby +
-se výstup kompilace zaznamenával do souboru a na konzoli se zobrazovaly pouze +
-základní informace o průběhu kompilace:​ +
- +
- make -j 4 LOGFILE=1 BUILD_LOG=1 IS_TTY=1 +
- +
-<WRAP tip> +
-Občas operace skončí s nějakou chybouV tom případě ​použijte buď parametry z +
-uvedené ukázky ​chybu poté hledejte v souboru ''​logs/​build.log''​ nebo u +
-spouštěného příkazu přidejte parametr ''​V=s''​ pro obdržení "​upovídaného"​ výstupu +
-na konzoli. +
-</​WRAP>​ +
- +
-Někdy je žádoucí sestavit pouze jeden balíček. Pokud už máte sestavený toolchain +
-(například jste spouštěli ​příkaz ''​make''​ jako v ukázce výše), stažení zdrojových +
-kódů, jejich kompilaci pro cílový systém ​vytvoření ''​.ipk''​ balíčku pro +
-instalaci na router odstartujete následujícím příkazem. Někdy je však ještě nutné +
-sestavit nejprve balíčky závislostí požadovaného balíčku. +
- +
- make package/​nazev-balicku/​install+
  
 +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ů).
  
 <WRAP info> <WRAP info>
-Jako název balíčku se zadává název složky, ve které je soubor ​''​Makefile'' ​pro +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.
-daný balíček, nikoliv název balíčku specifikovaný v proměnné ​''​PKG_NAME''​. ​+
-případě, že soubor ''​Makefile'' ​balíčků ​obsahuje více balíčků, budou vytvořeny +
-všechny, které jsou vybrány v konfiguraci.+
 </​WRAP>​ </​WRAP>​
- 
-Zkompilované balíčky (a případně další výstup kompilace, jako SDK, a další 
-soubory) naleznete v adresáři ''​bin/''​. Vytvořené ''​.ipk''​ soubory je pak možné v 
-případě správně dodrženého postupu zkopírovat na router a nainstalovat. 
- 
-Pro usnadnění kompilace jsou pak v repozitáři shellové skripty 
-''​compile_turris_fw''​ a ''​compile_omnia_fw'',​ který po spuštění odstraní staré 
-soubory, provede inicializaci feeds a spustí kompilaci systému. Vhodné je ho 
-spouštět s parametrem ''​USE_CCACHE=1''​ a v několika úlohách (tedy například 
-''​USE_CCACHE=1 ./​compile_turris_fw -j4'',​ což značně urychlí kompilaci (je nutné v 
-systému, ve kterém probíhá kompilace, nainstalovat balík ''​ccache''​). Zároveň je 
-možné použít parametr ''​BUILD_ALL''​ -- tím spustíme instalaci opravdu všech 
-balíků, které jsou v systému Turris OS zahrnuty. Tato operace však trvá značně 
-dlouhou dobu (řádově hodiny). Pro spuštění kompilace kompletního Turris OS, s 
-využitím cache během kompilace, ve čtyřech úlohách a s chybovým výstupem 
-zaznamenávaným do souboru: 
- 
- USE_CCACHE=1 BUILD_ALL=1 ./​compile_turris_fw -j 4 LOGFILE=1 BUILD_LOG=1 IS_TTY=1 
- 
 ===== Řešení problémů ===== ===== Řešení problémů =====