Openwrt - aktualizace host ocaml

Snažím se na Turris nainstalovat unison-2.48.4. V podstatě se snažím o aktualizaci mého návodu https://www.turris.cz/forum/topic_show.pl?pid=9041#pid9041 , který je pro unison 2.48.3, ale který zase aktuálně na Gentoo nezkompiluji, protože už nemám ocaml-4.02.3. A proto bych raději zkompiloval unison-2.48.4 pro turris.

Bohužel to není jen jednoduché zvednutí verzí, chtělo to nějaké dodatečné zásahy. Aktuálně mi kompilace unisonu padá na (pravděpodobně) starší verzi ocaml. Snažím se tedy nainstalovat ocaml-4.04.1 (namísto původní verze 4.02.3).

Ovšem kompilace mi padá na chybě:

[ERROR!] While you have an ocaml runtime environment, its version
 (4.02.3) doesn't match the version of these
 sources (4.04.1).
make[2]: *** [Makefile:56: /mnt/data/turris/openwrt/build_dir/toolchain-powerpc_8540_gcc-4.8-linaro_uClibc-0.9.33.2/ocaml-4.04.1/.configured] Error 2
make[2]: Leaving directory '/mnt/data/turris/openwrt/toolchain/ocaml'
make[1]: *** [toolchain/Makefile:83: toolchain/ocaml/compile] Error 2
make[1]: Leaving directory '/mnt/data/turris/openwrt'
make: *** [/mnt/data/turris/openwrt/include/toplevel.mk:183: toolchain/ocaml/install] Chyba 2

Což má asi na svědomí:

$ ls -la build_dir/host/ |grep ocaml
drwxr-xr-x 25 marian users  4096  2. kvě 19.50 ocaml-4.02.3

Takže se naskýtá jednoduchá otázka - jak aktualizuji host ocaml balíček na 4.04.1?

V těhle crossover kompilacích se vůbec nevyznám a google zatím nic použitelného nevrátil :frowning:

Tak už jsem to našel. Ještě je potřeba upravit verzi v adresáři tools/.

Není nad to si utřídit myšlenky :wink:

Puvodni navod zlyhava na:
cp -f configs/config-turris-nand .config

config-turris-nand neexistuje, je tam turris a pak config-turris-nor

V kazdem pripade v zadnem config-u neni:

CONFIG_OCAML

ktery by sel prenastavit na = y. Zkousim CONFIG_OCAML pridat manualne do config-u, aby to zkompilovalo ocaml v dalsim kroku.

CONFIG_OCAML se tam objeví až dodatečně, až po kroku:

git apply ../0001-toolchain-add-OCaml-compiler.patch

jestli nezapomenu, tak se pokusím pohledat poznámky. Snad jsem si nějaké udělal. Chtěl jsem ten upravený postup sepsat, ať to příště nemusím znova řešit, ale už na to nedošlo :frowning:

V nejhorším mohu poskytnout zkompilovanou binárku pro Turris 1.1.

Tak dobrá zpráva je, že patche mám, Špatná zpráva je, že když si to teď zkouším, tak mi příkaz make defconfig skončí s chybou:

$ make defconfig
...
Checking 'svn'... ok.
Checking 'git'... failed.
Checking 'file'... ok.
Checking 'openssl'... ok.
Checking 'ldconfig-stub'... ok.

Build dependency: Please install Git (git-core) >= 1.6.5

Prerequisite check failed. Use FORCE=1 to override.
make: *** [/mnt/data/turris/turris/openwrt/include/toplevel.mk:142: staging_dir/host/.prereq-build] Chyba 1

Zatím nevím co s tím :frowning:

EDIT: je potřeba aplikovat patch ​http://nbd.name/prereq-test3.patch z https://dev.openwrt.org/ticket/21968

Ale dál se už dneska ani zítra nedostanu.

EDIT2: Koukám, že stačilo kouknout na issues https://gitlab.labs.nic.cz/turris/openwrt/issues/56 :smiley:

Tak mi to nakonec nedalo. V poznámkách mám, že OCAML je potřeba povolit přes menu, tedy spustit make menuconfig a tam povolit:

[*] Advanced configuration options (for developers)  --->
    [*]   Toolchain Options  --->
        [*]   Build OCaml Compiler

Pak už to jede normálně.

Ještě poznámka k tomu configu. Správně by mělo být:

cp -f configs/turris .config

Vtip je v tom, ze OCAML v Toolchain Options vobec nieje…

â â — Toolchain Options â â
â â [ ] Enable an extra toolchain target architecture (NEW) ---- â â
â â *** Binary tools *** â â
â â Binutils Version (Linaro binutils 2.24) —> â â
â â () Additional binutils configure options (NEW) â â
â â *** Compiler *** â â â â GCC compiler Version (gcc 4.8.x with Linaro enhancements) â â
â â [ ] Compile in support for the new Graphite framework in GCC 4.â â
â â () Additional gcc configure options (NEW) â â
â â [ ] Enable Stack-Smashing Protection support (NEW) â â
â â [ ] Use setjump()/longjump() exceptions (NEW) â â
â â [ ] Build/install java compiler and GNU classpath ? (NEW) â â
â â [ ] Build/install fortran compiler? (NEW) â â â â *** C Library *** â â
â â C Library implementation (Use uClibc) —> â â
â â uClibc Version (uClibc 0.9.33.2) —> â â
â â [ ] Build with debug information (NEW) â â
â â *** Debuggers *** â â
â â [*] Build gdb (NEW) â â
â â [ ] Build insight-gdb (NEW) â â
â â

Aplikoval jsi ty patche? Ty jej tam totiž přidávají.

EDIT: i když, možná to je až v tom aktuálním patchi, který mám zatím jen u sebe :thinking:
Bohužel se k tomu dostanu nejdříve až pozdě večer.

A kterou verzi Unisonu se snažíš zkompilovat?

Tohle je peklo když se snažíte přeložit něco ze zdrojáků. Dejte sem pak výslednou binárku.

Spíš by možná nebylo na škodu dostat ten balíček do oficiálního repa. Postup kompilace je vyzkoušený, tak by to nemusel být takový problém.

EDIT: Hlavní problém Unisonu je, že na obou stranách musí být stejné verze. Jinak to nefunguje. No a různé distribuce mají rozdílné verze. To nevím, jestli by šlo zařídit, abych si vybral určitou verzi a ta se mi sama od sebe neaktualizovala.

Hm no to by byla jistě ideální situace ale to nikdo z NICu nikdy neudělá protože to pro ně není žádná priorita.

Tak teoreticky bych se mohl ujmout správy toho balíku. Stejně si to pro sebe kompiluji :smiley:

@Twinkie A o kterou verzi Unisonu bys měl zájem? A pro Turris nebo Omnii?

zamna:
unison -version
unison version 2.48.3

tak tie patche to tam pridaly…
nejaky problem s rekurzivitou,
tmp/.config-package.in:107:error: recursive dependency detected!
tmp/.config-package.in:107: symbol PACKAGE_dnsmasq-dhcpv6 depends on PACKAGE_dnsmasq-full
tmp/.config-package.in:125: symbol PACKAGE_dnsmasq-full depends on PACKAGE_dnsmasq-dhcpv6
tu som odmazal zavislost u dhcpv6.

kazdopadne to skonci na:
[ERROR!] Unable to compile the test program.
Make sure the C compiler gcc -m32 -O is properly installed.
Makefile:35: recipe for target ‘/home/rasto/tmp/turris/openwrt/build_dir/host/ocaml-4.02.3/.configured’ failed
make[3]: *** [/home/rasto/tmp/turris/openwrt/build_dir/host/ocaml-4.02.3/.configured] Error 2
make[3]: Leaving directory '/home/rasto/tmp/turris/openwrt/tools/ocaml’
tools/Makefile:125: recipe for target ‘tools/ocaml/compile’ failed
make[2]: *** [tools/ocaml/compile] Error 2
make[2]: Leaving directory '/home/rasto/tmp/turris/openwrt’
tools/Makefile:124: recipe for target ‘/home/rasto/tmp/turris/openwrt/staging_dir/target-powerpc_8540_uClibc-0.9.33.2/stamp/.tools_install_yynyyyynynynyyyyyyyyynyyyyyyyyyynyyyyyynnyyynnyynyynyyy’ failed
make[1]: *** [/home/rasto/tmp/turris/openwrt/staging_dir/target-powerpc_8540_uClibc-0.9.33.2/stamp/.tools_install_yynyyyynynynyyyyyyyyynyyyyyyyyyynyyyyyynnyyynnyynyynyyy] Error 2
make[1]: Leaving directory ‘/home/rasto/tmp/turris/openwrt’
/home/rasto/tmp/turris/openwrt/include/toplevel.mk:181: recipe for target ‘toolchain/install’ failed
make: *** [toolchain/install] Error 2

Ty recursive dependencies se mi taky objevily a nijak jsem je neřešil. Na kompilaci to nemělo vliv.

Ta hláška spíš vypadá, že máš nějaký problém s kompilátorem. Ale s tím asi moc neporadím. Na Gentoo nefunkční kompilátor řešit nemusím :smiley:

Turris 1.0 ale bylo by fajn sem dát asi oboje

Vlastně by bylo fajn někde vytvořit úložiště pro takto přeložené binárky, které NIC nikdy nezahrne do distribuce sám mám několik přeložených programů (oscam, pcsensor), které se podařilo takto v potu tváře někomu přeložit. Osobně vždycky raději sáhnu po již hotové funkční binárce než se trápit s překladem.

Ale zase musíš té binárce věřit, že je to opravdu zkompilováno z oficiálního zdrojáku a že tam někdo nepřidal něco nekalého. Chtělo by to nějaké napůl oficiální repo s pevně nastavenými pravidly pro přispěvatele balíčků.

Přesně za tohle mě @miska nepochválil, nabízel jsem tu nějaké drobnosti už přeložené, raději chtěl ať to
přidám přes Github.
Ale asi by bylo fajn to někam ukládat, ať mají přístup i jiní.