Kleine Verständnisfrage buildworld

mr44er

moderater Moderator
Teammitglied
Nach meinem gusto und weil es der traditionelle Weg ist, habe ich mir angewöhnt, alles zu bauen und auf binaries zu verzichten.

Bin nun über

Code:
make buildworld NO_CLEAN=yes

gestolpert und freue mich, dass das sehr flott stiefelt.

Ab welchen Änderungen im Source-Tree sollte man darauf verzichten und komplett alles neu bauen? Kann es da Probleme geben, wenn man mittendrin mal nicht komplett baut?
Ist ein Intervall von 6 Monaten komplett bauen ratsam oder overdosed?

Hoffe, die Frage wird richtig verstanden. :)
 
-DNO_CLEAN alleine ist gefährlich, weil make(1) im klassischen Modus nicht in der Lage ist Abhängigkeiten zwischen einzelnen, für sich genommen eigenständigen Komponenten zu erkennen. Ein simples Beispiel ist, dass eine Bibliothek geändert wurde, ein sie statisch linkendes Tool aber nicht neu gebaut wird. Anschließend funktioniert das Tool nicht. Im schlimmsten, zugegeben etwas akademischen Fall kann dadurch das "make installworld" abbrechen oder das System nicht mehr starten. Außerdem neigt -DNO_CLEAN dazu, dass sich beim parallelen Bauen einzelne Zweige überholen und dadurch Abhängigkeiten nicht erfüllt werden können. Das führt dann meist zum Abbruch. Kurz um, -DNO_CLEAN sollte man nutzen, wenn man weiß was man tut oder etwas Mut zum Risiko hat.

Ab FreeBSD 11.0 gibt es nun auch noch den "Metamode" als Ergänzung zum klassischen make(1)-Modus. Er berechnet einen vollständigen Satz Abhängigkeiten, trackt anschließend per filemon(4) was jeder einzelne make-Branch neu gebaut hat und nutzt die Informationen um zu berechnen, was weiter unten im Abhägigkeitsbaum ebenfalls neu gebaut werden muss. Das ist sehr effizient, da eben exakt das neu gebaut wird, was auch neu gebaut werden muss und zugleich 100% sicher. Also besser den hier:

Code:
% kldload filemon
% make -j $(sysctl hw.ncpu) -DWITH_META_MODE buildworld buildkernel

Hier gibt's noch etwas mehr Informationen zum Metamode, aber ich finde sie schwer verständlich: http://crufty.net/help/sjg/bmake-meta-mode.htm
 
Danke dir, übernehme ich doch glatt so. :D

Mut zum Risiko eigentlich immer, aber zwischen Fullbuild und meinem Test liegt ein Tag. Das System bootet und ich denke nicht, dass ich mir was zerkrumpelt habe. :)
 
Ich habe den meta-mode automatisch aktiviert, indem ich ihn in die ``/etc/src-env.conf`` eingetragen habe. Mit dem filemon(4) in der ``/boot/loader.conf`` sieht mein make(1)-Aufruf aus wie immer.
 
Zurück
Oben