Kernel und Welt mit Clang neu bauen

tellmi

Member
Hallo,

ich habe es so verstanden, dass clang der neue Standard beim Kompilieren sein soll und dass es ab 9.1 standardmäßig installiert ist. Also habe ich mir gedacht, dass ich zuerst mein frisch installiertes System mit clang neu baue, eventuell später meinen Kernel abspecke und danach erst anfange, meine benötigte Software aus den Ports zu installieren.

Gesagt, getan, https://wiki.freebsd.org/BuildingFreeBSDWithClang gibt eigentlich eine ganz gute Anleitung, sie hat aber so ihre Tücken.

Deswegen stelle ich heute einige Verständnisfragen:

  1. aus dem Artikel wird nicht ersichtlich, dass man die sources mit
    Code:
    svn checkout svn://svn.freebsd.org/base/releng/9.1/ /usr/src
    installiert, ich habe es jedoch mittlerweile herausgefunden
  2. Code:
    svn co http://svn.freebsd.org/base/head src
    verstehe ich nicht so recht. Ist das jetzt eine andere Version der Sources, oder gibt es so etwas ähnliches, wie "headers", wie man das auch von Linux her kennt? Mein allergrößtes Problem ist hier aber, von welchem Verzeichnis aus man den Befehl starten muss, weil er ja offensichtlich ein Unterverzeichnis "src" erstellt. Ich habe mich noch nicht getraut, ihn unter /usr/ auszuführen, um mir nicht meine mühsamen heruntergeladenen sources (in China läuft das Internet oft seeeehr laaaaangsaaaaam) zu zerschießen. Ich komme an dieser Stelle nicht weiter.
    Code:
    make kernel KERNCONF=GENERIC INSTKERNNAME=clang
    steigt mir mit der Fehlermeldung "make: don't know how to make kernel. Stop" aus. Verstehe ich auch, der Befehl wird ja als chroot in meiner eben neu erstellten Welt ausgeführt und darin gibt es keine sources. Nur sagt die Anleitung nichts, dass man die Sources auch dorthinein kopieren muss.
  3. Ich habe noch keine Jails eingerichtet, plane es aber in Zukunft, z.B. für den Apache22. Ist es richtig, diese Einstellungen auch schon in der make.conf zu setzen.
  4. Grundsatzfrage: Ist es generell ratsam, überhaupt schon auf clang umzustellen, oder sollte man als Anfänger besser die Finger von lassen?
  5. Benutzt man bei der Analyse entweder den "static analyzer" oder den analyzer aus den vanilla sources oder muss ich die Befehle aus beiden Sektionen ausführen? Was ist das eigentlich?
  6. Sind die Link Time Optimizations optional oder obligatorisch?
  7. Wozu braucht man KLEE?

Ich setze mir vorsichtshalber schon mal den :huth: auf... Danke für eure Antworten! ;)
 
2.
Das: http://svn.freebsd.org/base/head wäre CURRENT. Anders gesagt, Finger weg.
3.
Sicher, dass du im richtigen Verzeichnis bist?
4.
Sollte ziemlich egal sein.
5.
Überspring das.
6.
Optional.
7.
Nicht.


Um ehrlich zu sein deucht mir, du hast keine Ahnung was du da tust. Das System mit Clang zu bauen ist keine große Sache und auch nicht weiter riskant. Ich sehe bloß nicht, dass es Dir irgend etwas bringt. Nicht einmal einen Erkenntnisgewinn.

Gibt es irgend etwas woran du entwickeln willst? Wenn ja, steig da erst mal ein. Davon hast du mehr.
 
2.
Um ehrlich zu sein deucht mir, du hast keine Ahnung was du da tust. ...

Dir deucht richtig, ich beschäftige mich erst seit wenigen Wochen mit FreeBSD und komme, wie so viele hier, von Arch Linux. :huth:

Ich habe mich nur deswegen mit clang auseinandergesetzt, weil ich es so verstanden habe, dass clang die Zukunft und GCC schon ziemlich alt ist. Weil man nicht "mischen" soll, dachte ich mir, ein frisch installiertes System ist der perfekte Zeitpunkt, die Umstellung auf clang zu vollziehen.

Weil jedoch etliche Ports immer noch nur GCC akzeptieren und ich wirklich keine große Ahnung davon habe, was ich da mache, werde ich deinen Rat beherzigen und auf clang verzichten, bis es irgendwann mal der Standardkompilierer wird.

Nur eine letzte kleine Anmerkung habe ich noch zu deiner Frage, ob ich mir sicher wäre, wo ich gerade bin. Ja, das weiß ich. Zu dem Zeitpunkt meines derzeitigen Fehlers befinde ich mich per chroot in meiner neu gebauten Welt, auf "root"-Ebene. Und glaube ich die Fehlermeldung im Grunde zu verstehen, in meine neu gebaute Welt habe ich ja noch keine Sources heruntergeladen. Da liegt mein derzeitiger Knackpunkt, der eigentlich nun doch keiner mehr ist, weil ich es doch lieber lasse.

Vielen Dank!

tellmi
 
Ich habe mich nur deswegen mit clang auseinandergesetzt, weil ich es so verstanden habe, dass clang die Zukunft und GCC schon ziemlich alt ist.
So weit ist das was FreeBSD betrifft korrekt.

Weil man nicht "mischen" soll, dachte ich mir, ein frisch installiertes System ist der perfekte Zeitpunkt, die Umstellung auf clang zu vollziehen.
Hier ist der Knackpunkt. Es ist nicht das geringste Problem zu mischen. Im Gegenteil es wird wahrscheinlich noch über viele Jahre hinweg unvermeidbar sein.

Weil jedoch etliche Ports immer noch nur GCC akzeptieren und ich wirklich keine große Ahnung davon habe, was ich da mache, werde ich deinen Rat beherzigen und auf clang verzichten, bis es irgendwann mal der Standardkompilierer wird.
Clang hast du garantiert schon drauf. Dafür musst du nichts neu bauen. Deshalb kannst du das auch jederzeit schon mal ausprobieren.

Nur eine letzte kleine Anmerkung habe ich noch zu deiner Frage, ob ich mir sicher wäre, wo ich gerade bin. Ja, das weiß ich. Zu dem Zeitpunkt meines derzeitigen Fehlers befinde ich mich per chroot in meiner neu gebauten Welt, auf "root"-Ebene. ...
Ah, das ist der Knackpunkt. Welt und Kernel bilden bei FreeBSD eine zusammengehörige Einheit. Wenn du den Kernel aktualisierst solltest du auch die Welt neu bauen. Sonst geht das irgendwann schief.

Du kannst natürlich jederzeit einen neuen Kernel bauen, etwa mit anderen Optionen oder eben mit clang statt gcc. Aber wenn du dafür neue Sourcen ziehst solltest Du die Welt auch aus den gleichen Sourcen gebaut haben. In der Regel macht man das in einem make buildworld buildkernel Durchgang.
 
Clang kompiliert manchmal schneller als gcc und man bekommt vernünftigere Fehlermeldungen, wenn mal was nicht klappt, ansonsten merkst du als reiner Anwender aber nichts davon.

Noch etwas Allgemeines: Außer ihr sitzt hinter einem Proxy, der nur Port 80 / 443 durchlässt, nehmt bitte nicht http:// sondern svn:// zum Auschecken der Sources.

Intern wird auf dem Subversion Server http:// auf svn:// umgemappt, es erzeugt also unnötige I/O und schneller ist es auf Clientseite somit auch nicht.
 
Back
Top