Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build failure on a specific machine (despite Docker container) #2

Closed
penguineer opened this issue Apr 10, 2018 · 24 comments
Closed

Build failure on a specific machine (despite Docker container) #2

penguineer opened this issue Apr 10, 2018 · 24 comments
Assignees
Labels
bug Something isn't working

Comments

@penguineer
Copy link
Member

Ich bin nach FreifunkMD/FFMD-Orga#9 (comment) vorgegangen, um mit dem Docker-Image eine Firmware zu bauen, jedoch laufe ich immer in Build-Fehler:

make GLUON_TARGET=ar71xx-generic -j8

make[5] -C tools/tar compile
make -C /gluon/openwrt -f /gluon/Makefile GLUON_TOOLS=0 QUILT= prepare-target: build failed. Please re-run make with V=s to see what's going on
Makefile:66: recipe for target 'prepare-target' failed

Debian Stretch mit Docker CE 18.03

@penguineer penguineer added the bug Something isn't working label Apr 10, 2018
@penguineer
Copy link
Member Author

Seems to be compiling so far.

@penguineer
Copy link
Member Author

So, Situation:

  • auf meinem Notebook kann ich bauen
  • auf meinem HomeServer kann ich bauen
  • auf meinem Arbeitsrechner geht es nicht

Alle Systeme sind gleich. (Debian Stretch, Docker version 18.03.0-ce, build 0520e24)

@penguineer
Copy link
Member Author

penguineer commented Apr 23, 2018

Fehler beim compilieren von tar:

gcc -DHAVE_CONFIG_H -I. -I..  -I../gnu -I../ -I../gnu -I../lib -I../lib -I/gluon/openwrt/staging_dir/host/include -I/gluon/openwrt/staging_dir/host/usr/include   -O2 -I/gluon/openwrt/staging_dir/host/include -I/gluon/openwrt/staging_dir/host/usr/include -MT tar.o -MD -MP -MF .deps/tar.Tpo -c -o tar.o tar.c tar.c:1351:5: error: 'SAVEDIR_SORT_INODE' undeclared here (not in a function); did you mean 'SAVEDIR_SORT_NONE'?

und später:

/gluon/Makefile:304: recipe for target '/gluon/build/ar71xx-generic/target-prepared' failed
make[1]: *** [/gluon/build/ar71xx-generic/target-prepared] Error 2
make[1]: Leaving directory '/gluon/openwrt'
Makefile:81: recipe for target 'clean' failed
make: *** [clean] Error 2

Aufruf im Container jetzt mit

make update
site/build.sh -v

@penguineer
Copy link
Member Author

@christf Kannst Du damit was anfangen?

@penguineer
Copy link
Member Author

Shell Trail

Auflistung der Shell-Befehle, die ich ausgeführt habe.
(Debian Stretch, Docker version 18.03.0-ce, build 0520e24)

Host-Shell

git clone https://github.com/FreifunkMD/gluon-docker
cd gluon-docker/
docker build -t ffmd-v2016.2.7 .
docker run -it --name ffmd ffmd-v2016.2.7

Container Shell

make update
site/build.sh

@penguineer
Copy link
Member Author

(Schlägt mit Aufruf von buildOnly.sh übrigens genauso fehl.)

@johannwagner
Copy link
Member

Das Bauen failt random, das kommt durch die Parallelität. Kannst du den Build-Prozess auf deinem Home-Server einfach nochmal anstupsen und schauen, ob es dann durchbaut?
Ich hab das Problem bei mir auch ab und zu.

@penguineer
Copy link
Member Author

Worauf bezieht sich "random"?

Ich habe zwei Maschinen, auf denen der Build immer funktioniert (Notebook und HomeServer) und eine, auf der es immer bei tar fehlschlägt (Arbeit). Zahl der Versuche ist inzwischen für den Arbeitsrechner zweistellig.

@johannwagner
Copy link
Member

Okay, dann ist das wohl noch nen extra Fehler. Wie auch immer sowas passiert.

@penguineer
Copy link
Member Author

Könnte "-j 10" problematisch sein, wenn ich gar keine 10 Kerne habe?

Ganz ohne Parallelität habe ich das das Problem aber auch. Es gibt ja auch einen konkreten Compilerfehler!

@johannwagner
Copy link
Member

-j 10 spawnt zehn Threads beim Bauen, wie dein Scheduler das hält, ist das Problem des Betriebssystem.

Gut, bei mir failt das Bauen halt an zufälligen Stellen, nicht reproduzierbar.
Wenn es auf deinem Arbeitsrechner failt, dann ist das noch ein anderes Problem.

@penguineer penguineer changed the title Build failure Build failure on a specific machine (despite Docker container) Apr 23, 2018
@LeSpocky
Copy link
Member

Fehler beim compilieren von tar:

gcc -DHAVE_CONFIG_H -I. -I..  -I../gnu -I../ -I../gnu -I../lib -I../lib -I/gluon/openwrt/staging_dir/host/include -I/gluon/openwrt/staging_dir/host/usr/include   -O2 -I/gluon/openwrt/staging_dir/host/include -I/gluon/openwrt/staging_dir/host/usr/include -MT tar.o -MD -MP -MF .deps/tar.Tpo -c -o tar.o tar.c tar.c:1351:5: error: 'SAVEDIR_SORT_INODE' undeclared here (not in a function); did you mean 'SAVEDIR_SORT_NONE'?

Das einzige, was ich im Netz zu diesem Fehler finden konnte, war ein Patch von 2014: https://lists.gnu.org/archive/html/bug-tar/2014-09/msg00014.html

In Gluon hab ich keine tar-spezifischen Patches gesehen, in OpenWRT gab es nach 15.05 nur Updates von tar insgesamt, keine Patches, die dieses Build-Problem beheben. Vielleicht war eines der Updates von tar ausreichend. Dafür müsste man bei upstream tar mal schauen, ob es dahingehend Änderungen gab oder der o.g. Patch angenommen wurde.

@christf
Copy link
Contributor

christf commented Apr 23, 2018

Das bauen failt nicht random. Das hat immer Gründe. Bislang konnte ich folgende Gründe beobachten:

  • Downloads funktionierten nicht und deshalb fehlten Pakete(deshalb hält der ffm firmware builder einen download-cache auch über unterschiedliche builds und make cleans hinweg vor)
  • zu wenig RAM, Abbruch
  • zu wenig HDD, Abbruch, Builds dnaah fehlerhaft durch unvollständig geputzten tree.
  • build auf NFS gemountetem Dateisystem
  • build nach vorherigem abgebrochenen make clean
  • fehlerhafte Downlaods, die allerdings sauber entpackt wurden und dann komische Effekte beim Bauen hatten
  • fehlerhafte / fehlende Patches weil make update abgebrochen wurde und danach ein build gestartet wurde.

Ist es jeweils all das nicht?
Dass es sich um einen Bug in tar handelt, kann ich mir nicht gut vorstellen, weil der build auf anderen Systemen mit identischer Architektur durch laufen. Ich denke es ist irgend etwas, dass im Zusammenhang mit dieser Maschine auftritt.

make V=s -j1 könnte hier helfen weil bei make -j10 die Fehlermeldungen wirklich sehr weit oben stehen können. Ist der Ausschnitt wirklich der erste Fehler?

@penguineer
Copy link
Member Author

make update
make GLUON_TARGET=ar71xx-generic V=s -j1

läuft ohne Fehler durch.

@christf
Copy link
Contributor

christf commented Apr 24, 2018

ok. In dem Fall würde ich auf Verknotung des buildsystems tippen, die dann wohl jetzt bereinigit ist und weiter analysieren, wenn das im master auch auftritt.
Das ist nicht ganz ohne Aufwand machbar, der master erfordert eine andere site.conf

Wie wollen wir weiter verfahren?

@penguineer
Copy link
Member Author

penguineer commented Apr 24, 2018

Ich teste noch einen Build ohne -j1

Wenn das fehlschlägt, würde ich das trotzdem zurückstellen. Wir sind ziemlich weit hinten im Tree und es ist jetzt nur eine Maschine.

Wenn das am HEAD auch noch auftritt, dann sollten wir uns etwas überlegen. Ich kann die Situation recht zuverlässig herstellen.

@penguineer penguineer self-assigned this Apr 24, 2018
@LeSpocky
Copy link
Member

Parallel build issues gibt es in anderen embedded build Projekten neben OpenWRT auch hin und wieder. In ptxdist und buildroot sieht man entsprechende Commits und Patches, die nur parallel build issues fixen, regelmäßig. Da gebe ich @christf recht, das ist nervig bis schwer zu debuggen, häufig steckt das Problem dann im jeweiligen Projekt (openssl ist mir häufiger negativ aufgefallen) und die haben ggf. sehr unterschiedliche Buildsysteme (autotools, CMake, meson, …). Der Aufwand lohnt für unsere alte Gluon-bzw. OpenWRT-Version denke ich nicht mehr.

@penguineer
Copy link
Member Author

make update
make GLUON_TARGET=ar71xx-generic V=s

lief nun auch durch. WTF.
(Images wurden komplett neu erstellt.)

@penguineer
Copy link
Member Author

penguineer commented Apr 24, 2018

Beide Versuche mit mounts für die Build-Verzeichnisse:

docker run \
     -it --name ffmd \
     -v "$(pwd)/firmwares:/gluon/output" \
     -v "$(pwd)/openwrt_build:/gluon/openwrt/build_dir" \
     ffmd-v2016.2.7

@penguineer
Copy link
Member Author

Ich stimme euch zu, dass wir das in der alten Version nicht fixen sollten. Hauptsächlich versuche ich gerade, herauszufinden, unter welchen Umständen das Problem auftritt, damit wir dann mit der neuen Version sehen können, ob es beseitigt ist.

@penguineer
Copy link
Member Author

Okay, jetzt habe ich das ursprüngliche Problem auch nicht mehr.

Ich schlage vor, wir schließen dieses Issue und ich beobachte das auf neueren Versionen noch einmal.

@penguineer
Copy link
Member Author

Nachtrag:

Sobald ich alles in einem Container baue (ohne mounts), schlägt der Build wieder an der gleichen Stelle fehl.

Platz auf der Platte sollte genug sein:

$ df -h
udev                      3,9G       0  3,9G    0% /dev
tmpfs                     786M    9,6M  776M    2% /run
/dev/md0p1                1,8T     55G  1,7T    4% /
tmpfs                     3,9G       0  3,9G    0% /dev/shm
tmpfs                     5,0M    4,0K  5,0M    1% /run/lock
tmpfs                     3,9G       0  3,9G    0% /sys/fs/cgroup
tmpfs                     786M     12K  786M    1% /run/user/1000

@penguineer
Copy link
Member Author

make GLUON_TARGET=ar71xx-generic V=s -j1

schlägt ebenfalls fehl, Fehlermeldung ist unverändert.

(Ich schreibe das hier mal noch zu Dokumentationszwecken auf.)

@christf
Copy link
Contributor

christf commented Apr 25, 2018 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants