Turris & Buildroot - přidání balíčku


#1

Zdravím CZNIC i Turrisí uživatele.

Jak do Buildroot4Turris dostat vlastní balíček?

Právě se snažím vytvořit balíček pro Turris Omnia (potřeboval bych wireshark, resp. tshark kdyby někdo měl, ale budu chtít asi vytvořit i úplně vlastní soft, takže potřebě téhle znalosti se stejně nevyhnu). Nepodařilo se mi najít žádnou dokumentaci popisující, jak sbalíkovat soft pro Turris, pouze originální dokumentaci k Buildrootu, u které jsem narazil na konkrétní citaci:

The package/ directory contains the Makefiles and associated files for all user-space tools and libraries that Buildroot can compile and add to the target root filesystem. There is one sub-directory per package.

Nicméně v turrisím forku OWRT je v package spousta dalších podadresářů a tak předpokládám, že i v BR byly provedeny nějaké úpravy. V čem tyto úpravy spočívají a co to pro mě znamená při pokusu vytvořit nový balíček?

Když jsem se pokusil jakž takž držet manuálu BR, dokázal jsem se dostat do fáze, kdy jsem wireshark měl v menuconfigu. Ovšem pokus o make package/wireshark/install už skončil chybou (make[1]: *** No rule to make target 'package/wireshark/install'. Stop.).

Odhaduji, že jsem někde přehlédl nějakou drobnou informaci nebo mi unikla nějaká souvislost, ale zaboha nejsem schopen to rozběhat. Za pomoc budu vděčný. Dík.


#2

Možná toto by mohlo pomoct :slight_smile:


#3

Děkuju. Zatím jsem to zběžně prohlíd a je to trošku jiný. Na webu turrisu se píše, že používá buildroot, ale tohle není buildroot? Pořád nějak nevím, jaká informace mě minula. Ještě jednou dík :wink:


#4

Já jsem zkoušel dělat pár věcí, ale pro Turris 1.0, podle
https://doc.turris.cz/doc/cs/howto/turris_os_build

nejprve jsem musel udělat komplet kompilaci

USE_CCACHE=1 ./compile_turris_fw -j4

pak mi teprve šlo dělat jednotlivé balíčky, které jsem si doplnil nebo upravil na novější verze.

make package/nazev-balicku/install


#5

OpenWRT build systém je založen na buildorootu, to je ta spojitost. Ale aktuálně už natolik divergoval, že buildroot balíčky není možné použít v OpenWRT. Studujte OpenWRT dokumentaci a existující balíčky.


#6

commar: Jo, to já mam celej toolchain i OS zbuilděnej - dokonce jsem schopnej vzit finální tgz a nahrát ho na zařízení a to je funkční. Jen ten pomatenej wireshark tam zatím nemůžu dostat. Dokonce ani po zhlédnutí videa.

Akutalne mam v ~/build/packages/wireshark soubor Makefile: https://gist.github.com/sukovec/3bfffc38381f7cf13c04079e8a68c0c1

Wireshark jsem (pomocí make menuconfig) povolil, nicméně make package/wireshark/install udělá nic. Můžu pustit fáze download a configure - ty proběhnou (jenom samostatně, v rámci install ne). Compile už neudělá nic.

cynerd: Aha. Takže jsem se úspěšně nechal zmást. Možná by to stálo za to dopsat do wiki, aby se někdo nesnažil inspirovat originálním BR a nedivil se, že to nefunguje (respektive funguje tak nějak polovičatě).


#7

Já jsem spíše laik a co se týká kompilace tak miminko, teď jsem se díval na váš Makefile, není problém v chybějících závislostech?


#8

Chybějící závislosti by problém být neměly - respektive, pokud by chyběly závislosti, očekával bych chybu při kompilaci, jenže ono se to nedostalo ani k té kompilaci. Nicméně, v ostatních balících jsem našel nutnost definovat Package/XYZ/install (ve videu jsem na to nenarazil) a teď už se kompilace rozeběhne. Takže zatím díky za pomoc :slight_smile:


#9

Jinak pro wireshard z mých poznámek:

# Dump tcp connection to see it in wireshark
mkfifo /tmp/pipe
ssh turris "tcpdump -n -w - -i eth2" > /tmp/pipe
wireshark -k -i /tmp/pipe

#10

Díky, bohužel mi to je k ničemu, potřebuju wireshark (respektive tshark) rozběhat přímo na Turrisu. Aktuálně už se to snaží kompilovat, ale zatím je problém s getresgid syscallem, který dle compileru není definovaný (pravděpopdobně se wireshark pokouší použít glibc ale toolchain používá musl libc)


#11

Ahoj přátelé!

Po docela dlouhé době se vracím s poměrně dobrými zprávami. S pomocí vaší, s pomocí vývojářů WS (v buildech bylo pár chyb znemožňujících cross-kompilaci) a s pomocí anonymních uživatelů toto řešících v dávné minulosti (některé posty byly i z roku 2009) jsem dostal wireshark (resp. tshark) na Turris. Už mi zbývá vyřešit jednu “formální” drobnost a mám to i jako balíček.

Aktuální Makefile přikládám, kdyby někoho zajímal:

V aktuální chvíli obsahuje úpravy, protože kompiluje verzi z gitu (branch master-2.6.0), která zatím nebyla vydaná.

Pokud jde o tu formální drobnost, tak je to následující. Po dokončení kompilace a install fáze dostanu následující chybovou hlášku:

Package wireshark is missing dependencies for the following libraries:
libglib-2.0.so.0
libgmodule-2.0.so.0
libgnutls.so.30
libgthread-2.0.so.0
libxml2.so.2

Jakým způsobem ji vyřešit, respektive kde se takováto informace bere? Zkusil jsem nakopírovat zbuilděné binárky do turrise do tmp a pokud se pokusím tshark spustit (s korektní LD_LIBRARY_PATH), tak běží podle očekávání. Lze nějak ignorovat tyto chyby aby byl balíček sestaven?


#12

Podařilo se mi zkompilovat wireshark, ipk balíček pro Turris 1.x,
váš Makefile mi nechodil, alespoň zatím, použil jsem starší verzi 2.2.1-5, odtud.

Na konci mi to taky hlásilo chybějící závislosti, libgcrypt, libgnutls a libgpg-error
přidal jsem je do Makefile.
Výsledná binárka se mi ale moc nelíbí, sice běží ale má 16MB, tak nevím co vše se mi tam přibalilo.

root@turris:/usr/bin# tshark -v
Running as user “root” and group “root”. This could be dangerous.
TShark (Wireshark) 2.2.1 (Git Rev Unknown from unknown)

Copyright 1998-2016 Gerald Combs gerald@wireshark.org and contributors.
License GPLv2+: GNU GPL version 2 or later http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (32-bit) with libpcap, with POSIX capabilities (Linux), without libnl,
with GLib 2.46.2, with zlib 1.2.8, without SMI, without c-ares, without Lua,
with GnuTLS 3.5.14, with Gcrypt 1.6.1, without Kerberos, without GeoIP.

Running on Linux 4.4.136-88296389d45a13cd00ad641134e9ff81-0, with locale C, with
libpcap version 1.8.1, with GnuTLS 3.5.14, with Gcrypt 1.6.1, with zlib 1.2.8.

root@turris:/usr/bin# tshark -D
Running as user “root” and group “root”. This could be dangerous.

  1. eth0
  2. br-guest_turris
  3. br-lan
  4. wlan0
  5. tun0
  6. guest_turris_0
  7. pppoe-wan
  8. eth1
  9. wlan1
  10. eth2
  11. any
  12. lo (Loopback)

Přes víkend to otestuji.


#13

Tak to vypadá že wireshark_2.2.1-5 chodí, dneska jsem zkoušel váš Makefile s verzí 2.6.1,
bohužel končím s chybou, na kterou jsem zatím nenalezl řešení.

Making dissectors.c
./make-dissectors: line 117: /home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/epan/dissectors/.libs/lt-make-dissectors: cannot execute binary file: Exec format error
./make-dissectors: line 117: /home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/epan/dissectors/.libs/lt-make-dissectors: Success
make[7]: *** [dissectors.c] Error 126
make[7]: Leaving directory `/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/epan/dissectors'
make[6]: *** [all-recursive] Error 1
make[6]: Leaving directory `/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/epan'
make[5]: *** [all] Error 2
make[5]: Leaving directory `/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/epan'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1'
make[2]: *** [/home/martin/turris-os/build_dir/target-powerpc_8540_uClibc-0.9.33.2/wireshark-2.6.1/.built] Error 2
make[2]: Leaving directory `/home/martin/turris-os/package/utils/wireshark'
make[1]: *** [package/utils/wireshark/install] Error 2
make[1]: Leaving directory `/home/martin/turris-os'
make: *** [package/wireshark/install] Error 2

#14

Zdravím,

tenhle problém jsem řešil s vývojáři WS na jejich bugtrackeru: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=14622

Zkráceně jde o to, že při cross-kompilaci WS je nutné zkompilovat i nějaké nástroje pro nativní/hostovskou architekturu a s Autohellem to nebylo úplně jednoduché. Funkčí verze WS je zatím jen v gitu (branch master-2.6.0).


#15

Zdravím po poněkud delší době, kdy jsem se k WS znovu dostal. Dnes je venku už dokonce v2.6.4, která jde pro turris zkompilovat naprosto bez problému, Makefile na gist: https://gist.github.com/sukovec/3bfffc38381f7cf13c04079e8a68c0c1

Já ovšem stále končím s onou hláškou týkající se potenciálně chybějících libek. Můžu se zeptat, @commar, kam přesně jste napsal ty libky, aby se balík zkompiloval úplně? Díky!


#16

Tak, nakonec jsem to po spoustě pokusů zvládl zkompilovat. Odkaz na gist platí a je tam funkční Wireshark pro OpenWRT.

Ty knihovny je nutno psát správně, tedy v mnoha případech použít jméno balíčku (glib2, nikoliv libglib) a v některých jméno něčeho jiného (libgnutls, ačkoliv balíček se jmenuje jenom gnutls).


#17

Bohužel už nevím, nenašel jsem to, asi jsem to smazal, fakt nevím.
Ale do sekce DEPENDS jsem vždy doplňoval název balíčku.
Někdy jsem si věci pro kompilaci sám stahoval do složky /DL, občas se něco nechtělo stáhnout
nebo už cesta neexistovala.

Každopádně váš Makefile jsem teď vyzkoušel a vše proběhlo bez problému.