[OpenBSD]

[FAQ-Index] [Zum Kapitel 4 - Installationsanleitung] [Zum Kapitel 6 - Vernetzung]

5 - Das System aus dem Quelltext erzeugen


Inhaltsverzeichnis



5.1 - OpenBSDs Aromata

Es gibt drei Aromata von OpenBSD: Grafisch sieht die Entwicklung dieser Aromata ungefähr so aus:
       ,------o-----------o----X                    4.9 Stable
       |      .           .
       |      .    ,------o---------o----X          5.0 Stable
       |      .    |      .         .
       |      .    |      .    ,----o----------o--> 5.1 Stable
       |      .    |      .    |    .          .
       |      .    |      .    |    .    ,-----o--> 5.2 Stable
       |      .    |      .    |    .    |     .
       |      .    |      .    |    .    |     .
 -->4.9Rel----->5.0Rel----->5.1Rel----->5.2Rel----> Current

          Zeit --->

In und an -current findet die aktive Entwicklung statt, das sich, schließlich, in das nächste -release von OpenBSD verwandelt. Alle sechs Monate, wenn eine neue Version von OpenBSD veröffentlicht wird, wird -current etikettiert und somit zu -release: ein fester Punkt in der Geschichte des Quelltextbaums. Kein -release wird jemals verändert; es ist das, was auf den CDs und FTP-Servern vorliegt.

-stable basiert auf -release und ist ein Zweig des Hauptentwicklungspfads von OpenBSD. Wenn sehr wichtige Korrekturen in -current eingebracht werden, so werden sie in den Zweig -stable »zurückportiert« (eingefügt). Das ist der Grund, warum -stable auch als »patch-branch« bezeichnet wird. In obiger Illustration sind die vertikalen, gepunkteten Linien Fehlerkorrekturen, die in die -stable-Zweige eingefügt wurden. Du wirst auch bemerken, dass der Lebenszyklus des Zweigs 4.9-stable im obigen Beispiel mit Erscheinen des 5.1-release und der Zweig 5.0-stable mit Erscheinen von 5.2-release beendet war - alte Versionen werden typischerweise noch zwei Releases lang weiter gepflegt. Es braucht nun mal Ressourcen und Zeit, ältere Versionen zu pflegen - und obwohl wir das gerne tun würden, konzentrieren wir uns doch lieber auf neue Funktionen. Der Zweig -stable kann vom Design her sehr leicht aus dem Zweig -release derselben Version erzeugt werden (z. B. von 5.2-release zu 5.2-stable).

Der Zweig -stable ist in der Tat -release inklusive jener Korrekturroutinen, die auf der Errataseite aufgeführt sind. Die Benutzung von -stable ist identisch der des -release, auf dem er basiert. Wenn die Handbuchseiten geändert werden müssen, wird es wahrscheinlich nicht in -stable eingefügt werden. Mit anderen Worten: Unterstützung für neue Hardware und neue Funktionen werden NICHT in -stable eingefügt.

Es lohnt sich, darauf hinzuweisen, dass der Name -stable keineswegs impliziert, dass -current in einem Produktivsystem unzuverlässig oder gar weniger stabil ist. Vielmehr bedeutet es, das sich die APIs (Programmierschnittstellen der Programme mit dem Betriebssystem) und Eigenschaften von -current ändern und entwickeln, wohingegen jene von -stable die gleichen sind wie die des Release, auf dem er basiert, sodass es nicht nötig sein sollte, umlernen-, oder irgendwelche Konfigurationsdateien ändern zu müssen, und es keine Probleme geben sollte, zusätzliche Anwendungen zu dem System hinzuzufügen.

In der Tat ist, da es unsere Hoffnung ist, OpenBSD stetig zu verbessern, das Ziel, dass -current zuverlässiger und sicherer ist und, natürlich, großartigere Eigenschaften besitzt als -stable. Grob gesagt ist -current die »beste« Version von OpenBSD.

Die meisten Benutzer sollten entweder -stable oder aber -release benutzen. Nachdem dies gesagt ist, ist anzumerken, dass viele Leute -current auf Produktivsystemen einsetzen, und das es wichtig ist, dass es Leute gibt, die dies tun, damit Fehler gefunden und neue Eigenschaften und Funktionen getestet werden. Allerdings, wenn du nicht wissen solltest, wie man Probleme vernünftig beschreibt, diagnostiziert und mit ihnen umgeht, dann rede bitte dir (oder jemand anderem) nicht ein, dass du »dem Projekt hilfst«, indem du -current benutzt. »Es funktionierte nicht!« ist kein nützlicher Fehlerbericht. »The recent changes to the pciide driver broke compatibility with my Slugchip-based IDE interface, dmesg of working and broken systems follow...« könnte dagegen durchaus ein sinnvoller und nützlicher Bericht sein.

Es mag Zeiten geben, in denen auch ein normaler Benutzer gerne auf des Messers Schneide leben will und -current benutzt. Der häufigste Grund dafür ist, dass er ein Gerät hat, das nicht von -release unterstützt wird (und daher auch nicht von -stable), oder dass er eine neue Funktion von -current benutzen möchte. In diesem Fall besteht die Wahl zwischen -current oder dem Nichtbenutzen des Gerätes, und -current mag das kleinere Übel sein. Wie auch immer, niemand sollte erwarten, dass die Entwickler Händchen halten.

Schnappschüsse

Zwischen den formalen Veröffentlichungen neuer Versionen von OpenBSD werden Schnappschüsse über die FTP-Seiten verfügbar gemacht. Wie der Name impliziert, handelt es sich dabei um übersetzte Versionen des Quelltexts, der sich in dem Moment im Baum vorfand, als der Erzeugungsprozess sich dort eine Kopie für eine bestimmte Plattform besorgt hat. Es ist möglich, wenngleich hoffentlich unwahrscheinlich, dass du Fehler in einem Schnappschuss aufdeckst; dies ist der Grund, warum sie vom Projekt selbst übersetzt und verteilt werden. Solltest du einen Fehler in einem Schnappschuss entdecken, stelle sicher, dass er berichtet wird.

Wenn es dein Wunsch ist, -current zu benutzen, so ist ein halbwegs aktueller Schnappschuss oft das Einzige, was du benötigst, und das Upgraden auf einen Schnappschuss ist eine erforderliche Voraussetzung, bevor man den Versuch starten kann, -current zu erzeugen.

Manchmal wird gefragt, ob es einen Weg gibt, genau den Quelltext zu bekommen, der zur Erzeugung eines Schnappschuss eingesetzt wurde. Die Antwort ist nein. Erstens ergibt sich daraus kein besonderer Vorteil. Zweitens werden Schnappschüsse nach Bedarf erzeugt, wenn die Zeit es erlaubt, und wenn Ressourcen verfügbar werden. Auf schnellen Plattformen können mehrere Schnappschüsse an einem Tag freigegeben werden. Auf langsameren Plattformen kann es eine Woche oder länger dauern, bis ein Schnappschuss vollständig erzeugt ist. Und für jeden Schnappschuss Etiketten oder Markierungen im Quelltextbaum anzubringen ist nicht wirklich praktikabel. Drittens, Schnappschüsse enthalten oft experimentellen Kode, der noch nicht in Baum eingebunden wurde.

Upgrade oder Update

Dir werden oft Referenzen zum »Upgraden« und »Updaten« von OpenBSD-Installationen begegnen. Obwohl beide Wörter ungefähr die gleiche Bedeutung haben, werden sie in Verbindung mit OpenBSD unterschiedlich eingesetzt.

Upgraden bezeichnet den Prozess der Installation einer neueren Version von OpenBSD, mit neuer Funktionalität. Zm Beispiel ein Wechsel von v5.1 auf v5.2 oder vom Schnappschuss des 12. Juni auf den Schnappschuss des 20. Juni. Wenn du upgradest, so wirst du dich typischerweise an die Anleitungen in der Entwicklung von -current folgen oder der Upgrade-Anleitung (wenn das Release gewechselt wird) halten, um die Änderungen vorzunehmen, die nötig sind, damit die upgegradete Version von OpenBSD eingesetzt werden kann.
Updaten bezeichnet den Prozess des Einspielens von Korrekturroutinen in ein System, um die Lauffähigkeit zu verbessern, OHNE dass die grundlegenden Funktionen oder die Binärkompatibilität verändert wird. Entweder folgst du hierbei den Anweisungen wie man Korrekturroutinen einspielt, oder wie man -stable folgt. Wenn du dein System »updatest«, dann wechselt es von einem -release-Zweig auf einen -stable-Zweig (oder auf einen korrigierten -release) der gleichen Version von OpenBSD, zum Beispiel von 5.2-release auf 5.2-stable. Du kannst es dann später auf einen neueren -stable derselben OpenBSD-Version updaten. Der Updatevorgang ist normalerweise schmerzlos, da keine Datein unter /etc modifiziert oder andere Systemkonfigurationen geändert werden müssen.

Du könntest also ein System von CD installieren (zum Beispiel 4.9-release), dann ein paar Mal auf 4.9-stable updaten, dann auf 5.0-release per CD upgraden, wieder ein paar Mal updaten und dann wieder auf OpenBSD 5.2-release upzugraden.

Die Dinge synchron halten

Es ist wichtig zu verstehen, dass OpenBSD ein Betriebssystem ist, und als Ganzes gesehen werden muss, nicht als ein Kern mit einem Haufen lose angehängter Werkzeuge. Du musst sicherstellen, dass dein Kern, dein Userland (die unterstützenden Werkzeuge und Dateien) und dein Portierungsbaum alle synchron sind, oder es werden unangenehme Dinge passieren. Oder, anders ausgedrückt (da es immer wieder Leute gibt, die das versuchen), kannst du keine brandneuen Portierungen auf einem System laufen lassen, das einen Monat alt ist, oder einen Kern aus -current neu erzeugen und dann erwarten, dass er ordentlich mit einem release-Userland zusammenarbeitet. Ja, das heißt, dass du dein System upgraden musst, wenn du ein neues Programm benutzen möchtest, das heute in den Portierungsbaum eingefügt worden ist. Entschuldigung, aber noch einmal - OpenBSD verfügt nur über sehr begrenzte Ressourcen.

Man sollte ebenfalls verstehen, dass der Upgradevorgang nur in eine Richtung unterstützt wird: von älter zu neuer und von -stable zu -current. Du kannst kein 5.2-current (oder einen Schnappschuss) laufen lassen und dich dann entscheiden, dass dir das zu gefährlich ist, und einfach nach 5.2-stable zurückgehen. Du bist auf dich allein gestellt, wenn du einen anderen Weg wählst als den unterstützten der kompletten Neuinstallation, also erwarte bitte keinerlei Hilfeleistung des OpenBSD-Entwicklerteams.

Ja, das soll wirklich heißen, dass du darüber nachdenken solltest, bevor du dich -current verschreibst.

5.2 - Warum muss ich mein System vom Quelltext aus erzeugen?

An und für sich ist es sehr wahrscheinlich, dass du es gar nicht musst.

Einige Gründe, NICHT aus dem Quelltext heraus zu erzeugen:

Einige Gründe, warum du in der Tat den Wunsch verspüren könntest, oder etwa gar die Notwendigkeit besteht, das System aus dem Quelltext heraus zu erzeugen:

Das OpenBSD-Team stellt für alle Plattformen regelmäßig neue, auf -current Quelltext basierende Schnappschüsse bereit. Es ist wahrscheinlich, dass du nichts Anderes benötigst, um -current zu betreiben.

Der häufigste Grund, aus dem Quelltext heraus zu erzeugen, ist, dem Zweig -stable zu folgen, da das Erzeugen aus den Quellen die einzige unterstützte Option ist.

Wird -current aus dem Quelltext übersetzt, so ist es SEHR empfehlenswert, dies nur auf einer Maschine zu machen, auf deren Konsole man uneingeschränkten Zugriff hat. Es wird Zeiten im Entwicklungsprozess geben, in denen die Diskrepanz zwischen deinem neuen Betriebssystemkern und deinem alten Userland dazu führt, dass das System über das Netzwerk nicht ansprechbar ist. Dies ist kein Problem mit einem korrekt erzeugten -stable.

5.3 - OpenBSD aus dem Quelltext erzeugen

5.3.1 - Überblick über den Erzeugungsprozess

OpenBSD vom Quelltext aus zu erzeugen beinhaltet einige Schritte: Es gibt ein paar weitere Schritte, die einige Benutzer eventuell durchführen möchten, abhängig von dem Verwendungszweck des erzeugten Systems, und ob X installiert ist:

5.3.2 - Zur nächstliegenden Binärdatei aktualisieren oder diese installieren

Der erste Schritt beim Erzeugen aus dem Quelltext heraus besteht darin, sicherzustellen, dass du die dem Ziel nächstliegende verfügbare Binärdatei installiert hast. Verwende diese Tabelle, um zu sehen, wo du bist, wo du hingehen möchtest und mit welcher Binärdatei du starten solltest:

Du bist beim Ziel Binärdatei-Upgrade auf dann ...
alten -release neues Release neuestes Release Fertig!
-release -stable neuestes Release downloade u. erzeuge -stable
alten -stable -stable neuestes Release downloade u. erzeuge -stable
-release -current aktuellsten Schnappschuss (optional) downloade u. erzeuge -current
alten -current -current aktuellsten Schnappschuss (optional) downloade u. erzeuge -current

Es wird empfohlen, dass du die Binärdatei unter Verwendung der Option »Upgrade« des Installationsmediums installierst. Wenn das nicht möglich ist, kannst du auch die Binärdatei entpacken, so wie es hier beschrieben ist. Unabhängig davon musst du den gesamten Upgradeprozess durchführen, einschließlich des Erzeugens möglicher Benutzer oder anderer Änderungen im Verzeichnis /etc.

5.3.3 - Den passenden Quelltext herunterladen

Der Quelltext von OpenBSD wird unter Verwendung des Versionkontrollsystems CVS verwaltet, und cvs(1) wird genutzt, um eine Kopie der gewünschten Quelle auf deine lokale Maschine zur Übersetzung herunterzuladen. Dies kann unter Verwendung eines AnonCVS-Servers geschehen (einer Maschine, die eine öffentlich zugängliche Kopie vom gesamten CVS-Repositorium hält, das vom OpenBSD-Projekt genutzt wird) oder von einem lokalen CVS-Repositorium, das du unter Verwendung der Programme CVSync oder rsync pflegst, welche als Pakete vorliegen. Wenn du mehrere Maschinen hast, auf denen du den Quelltextbaum verwalten willst, kann es für dich durchaus nützlich sein, ein lokales CVS-Repositorium vorzuhalten, erstellt und gepflegt unter Verwendung von CVSync oder rsync.

Nach der Entscheidung, welchen AnonCVS-Server du zu verwenden wünschst, musst du eine »Arbeitskopie« des Quelltextbaums erzeugen, und danach diesen Baum durch das Ausführen von »Updates« pflegen, um aktualisierte Dateien in deinen lokalen Baum einzubinden.

Das Kommando CVS(1) hat viele Optionen, einige von ihnen sind notwendig, um eine Arbeitskopie eines nutzbaren Baum zu erzeugen und ihn upzudaten. Andere Kommandos können dazu führen, dass dein Baum unbrauchbar wird. Diesen Anweisungen hier zu folgen, und sie zu verstehen, ist wichtig.

-current folgen

In diesem Fall nehmen wir an, dass wir einen öffentlichen AnonCVS-Server, anoncvs@anoncvs.example.org:/cvs, verwenden. Wir nehmen des Weiteren an, dass du sh(1) als deine Kommandoshell verwendest; solltest du eine andere Shell verwenden, so musst du einige dieser Kommandos anpassen.

Um die Arbeitskopie eines -current CVS Quelltextbaums zu erhalten, kannst du Folgendes nutzen:

    # cd /usr
    # export CVSROOT=anoncvs@anoncvs.example.org:/cvs
    # cvs -d$CVSROOT checkout -P src

Sobald du einen Baum hast, kannst du ihn später jederzeit aktualisieren:

    # cd /usr/src
    # export CVSROOT=anoncvs@anoncvs.example.org:/cvs
    # cvs -d$CVSROOT up -Pd
-stable folgen
Wenn du die Arbeitskopie eines alternativen »Zweigs« des Baums, wie zum Beispiel des Zweigs -stable, haben möchtest, so musst du die Option -r benutzen:
    # cd /usr
    # export CVSROOT=anoncvs@anoncvs.example.org:/cvs
    # cvs -d$CVSROOT checkout -rOPENBSD_5_1 -P src
Dies wird die Quelltextdateien des Zweigs OPENBSD_5_1 populieren, welcher ebenfalls als »patch-branch« oder »-stable« bekannt ist. Den Kode würdest du ähnlich aktualisieren:
    # cd /usr/src
    # export CVSROOT=anoncvs@anoncvs.example.org:/cvs
    # cvs -d$CVSROOT up -rOPENBSD_5_1 -Pd
Tatsächlich ist CVS nett genug, ein Etikett (»tag«) an die heruntergeladenen Dateien anzuhängen, sodass du dir -rOPENBSD_5_1 für die Kommandozeile nicht merken musst. CVS wird sich immer daran erinnern, bis du dies explizit zurücksetzt oder eine neue Markierung unter Verwendung der Option -A mit update verwendest. Jedoch ist es vermutlich besser, zu viele Informationen in deine CVS-Kommandozeilen zu packen als zu wenig.

Obwohl bis jetzt nur der Baum »src« gezeigt wurde, wirst du die gleichen Schritte für »xenocara« und »ports« durchführen. Da alle Teile von OpenBSD synchron gehalten werden müssen, sollten alle Bäume, die du verwendest, zur gleichen Zeit als Arbeitskopie erzeugt und geupdated werden. Du kannst das Erzeugen der Arbeitskopien in einer Zeile kombinieren (-stable gezeigt):

    # export CVSROOT=anoncvs@anoncvs.example.org:/cvs
    # cd /usr
    # cvs -d$CVSROOT checkout -rOPENBSD_5_1 -P src ports xenocara
Updates jedoch müssen Verzeichnis für Verzeichnis durchgeführt werden.

Zu diesem Zeitpunkt, egal ob du nun -stable oder -current gefolgt bist, solltest du einen einsetzbaren Quelltextbaum haben. Sei sehr vorsichtig damit, welchen Baum du beziehst - es ist einfach, zu versuchen, -current zu übersetzen, obwohl du in Wirklichkeit auf -stable abziehlst.

Den Baum vorladen: src.tar.gz, sys.tar.gz

Obwohl du den gesamten Quelltextbaum von einem AnonCVS-Server herunterladen kannst, kannst du oft eine Menge Zeit und Bandbreite sparen, indem du deinen Quelltextbaum mit den Quelltextdateien von der OpenBSD-CD oder einem FTP-Server »vorlädst«. Das ist insbesondere dann der Fall, wenn du -stable einsetzt, da nur wenige Dateien zwischen dieser Version und dem -release, auf dem es basiert, geändert werden.

Um den Quelltextbaum von der CD unter /usr/src zu entpacken (und angenommen, dass die CD unter /mnt eingehängt wurde):

    # cd /usr/src; tar xzf /mnt/src.tar.gz
    # cd /usr; tar xzf /mnt/xenocara.tar.gz
    # cd /usr; tar xzf /mnt/ports.tar.gz
Die zum Download auf den FTP-Servern vorliegenden Quelltextdateien befinden sich in zwei separaten Dateien, um die Downloadzeit für jene Benutzer zu minimieren, die nur mit einem Teil des Baum arbeiten wollen. Die beiden Dateien sind sys.tar.gz, das alle zur Erzeugung des Betriebssystemkerns nötigen Dateien enthält, und src.tar.gz, das all die anderen Werkzeuge des »Userlands« mit Ausnahme des Portierungsbaums und der X11-Quellen enthält. Generell gesagt ist es jedoch so, dass du normalerweise beide installieren möchtest. Angenommen, dass sich die heruntergeladenen Dateien src.tar.gz und sys.tar.gz in /usr befinden:
    # cd /usr/src
    # tar xzf ../sys.tar.gz
    # tar xzf ../src.tar.gz
    # cd /usr
    # tar xzf xenocara.tar.gz
    # tar xzf ports.tar.gz

Nicht jeder möchte alle Dateisets auspacken, doch da das System synchron gehalten werden muss, ist es generell nötig, alle Teile des Baums einzurichten.

Allgemeine CVS-Tipps

Wie zuvor schon beschrieben, sind einige Optionen nachgeradezu notwendig, um einen gültigen src-Baum in OpenBSD zu erhalten. Die oben gezeigte Option »-P« ist eine solche: Sie entfernt (»prunes«) Verzeichnisse, die leer sind. Über die Jahre wurden Verzeichnisse im OpenBSD Quelltextbaum erstellt und gelöscht, und ab und zu werden die Namen von alten Verzeichnissen im Moment als Dateinamen genutzt. Ohne Nutzung der Option »-P« wird dein gerade erst erstellter Baum NICHT erfolgreich übersetzt werden.

Größtenteils gilt das Gleiche für die Option »-d« des Kommandos »update« -- es erstellt neue Verzeichnisse, die eventuell seit der ersten Erstellung deiner lokalen Arbeitskopie zum Baum hinzugefügt worden sind. Um ein erfolgreiches Update durchzuführen, musst du die Optionen -Pd verwenden.

Erfahrene CVS-Anwender wundern sich vielleicht, warum CVSROOT angegeben und in diesem Beispiel benutzt wurde, obwohl cvs(1) die Adresse des Servers in der Arbeitskopie des Baums abspeichert. Das ist korrekt, jedoch gibt es genug Momente, in denen man den standardmäßigen AnonCVS-Server überschreiben muss, weshalb viele Leute empfehlen, das Repositorium immer explizit anzugeben. Es ist an dieser Stelle ebenfalls erwähnenswert, dass, obwohl die Umgebungsvariable CVSROOT direkt von cvs(1) genutzt werden kann, sie nur genutzt wird, wenn sie nicht von einer anderen Angabe überschrieben wird (d. h., wenn cvs(1) ohne sie einen Fehler produzieren würde), wohingegen ihre Angabe in der cvs(1)-Kommandozeile alle anderen Werte überschreibt.

Es ist oft nützlich, eine .cvsrc in deinem Heimatverzeichnis zu verwenden, um Standardwerte für einige dieser Optionen anzugeben. Ein Beispiel einer solchen .cvsrc-Datei:

    $ more ~/.cvsrc
    cvs -q -danoncvs@anoncvs.example.org:/cvs
    diff -up
    update -Pd
    checkout -P
Diese Datei würde cvs(1) dazu veranlassen, den Server anoncvs@anoncvs.example.org:/cvs zu verwenden, für alle Operationen normalerweise unnötige Ausgaben zu unterdrücken (»-q« steht für »quiet«, still), dass das Kommando »cvs up« standardmäßig die Optionen -Pd nutzt, ein »cvs diff« aufgrund der Option »-u« standardmäßig »Unified Diffs« erstellt und dass ein »cvs checkout« die Option »-P« verwendet. Obwohl dies praktisch ist, wirst du Probleme haben, wenn du vergisst, dass diese Datei existiert, oder du versuchst, Kommandos auf einer Maschine auszuführen, auf der diese Datei nicht existiert.

Da der Quelltextbaum aus einer großen Anzahl meist kleiner Dateien besteht, wird das Aktivieren von »soft updates« für die Partition, auf der sich der Quelltextbaum befindet, zu einer deutlich spürbaren Leistungssteigerung führen.

5.3.4 - Einen Kern erzeugen

Wir nehmen im Weiteren an, dass du einen standardmäßigen (GENERIC oder GENERIC.MP) Kern erzeugen möchtest. Normalerweise ist es dies, was du machen möchtest. Ziehe nicht in Betracht, einen angepassten Kern zu erzeugen, wenn du den normalen Erzeugungsprozess noch nicht im Griff hast.

Es ist offensichtlich, dass der Betriebssystemkern eine SEHR hardwareabhängige Komponente des Systems ist. Der Quelltext des Kerns findet sich im Verzeichnis /usr/src/sys. Einige Teile des Kodes des OpenBSD-Betriebssystemkerns werden auf allen Plattformen verwendet, andere sind sehr spezifisch für einen Prozessor oder eine Architektur. Wenn du in das Verzeichnis /usr/src/sys/arch/ schaust, wirst du eventuell Dinge sehen, die etwas verwirrend wirken - zum Beispiel gibt es dort die Verzeichnisse mac68k, m68k und mvme68k. In diesem Fall verwenden die Systeme mvme68k und mac68k den gleichen Prozessor, aber die Maschinen, auf denen sie basieren, sind sehr unterschiedlich, und benötigen daher einen sehr unterschiedlichen Betriebssystemkern (zu einem Computer-Design gehört mehr als nur der Prozessor!). Jedoch gibt es auch Teile des Kerns, die diesen Architekturen gemein sind, und diese Teile werden im Verzeichnis m68k aufbewahrt. Wenn du einfach nur einen Kern erzeugst, so sind diese, den Basis-Architekturen gewidmeten Verzeichnisse, wie m68k, nichts, worüber du dir Gedanken machen musst; du wirst exklusiv mit den Verzeichnissen der wahren »Grundarchitekturen« arbeiten, wie zum Beispiel mvme68k.

Betriebssystemkerne werden basierend auf den Kern-Konfigurationsdateien erzeugt, die sich in dem Verzeichnis befinden, das dem Namensschema /usr/src/sys/arch/<deine Plattform>/conf folgt. Das Erzeugen des Kerns besteht aus dem Verwenden des Programms config(8), dass ein Übersetzungsverzeichnis des Kerns erzeugt und populiert, und zwar folgend dem Schema /usr/src/sys/arch/<deine Plattform>/compile/<KernName>. Für dieses Beispiel nehmen wir an, dass du die i386-Plattform verwendest.

# cd /usr/src/sys/arch/i386/conf
# config GENERIC
# cd ../compile/GENERIC
# make clean && make
    [... jede Menge Ausgabe ...]
# make install
Ersetze das »i386« in der ersten Zeile mit dem Namen deiner Plattform. Das Kommando machine(1) kann dir sagen, wie der Name deiner Plattform lautet, sodass eine offensichtliche Generalisierung die Nutzung des Kommandos »cd /usr/src/sys/arch/`machine`/conf« anstelle der ersten Zeile wäre.

Starte an diesem Punkt deine Maschine neu, um den neuen Kern zu aktivieren. Beachte, dass der neue Betriebssystemkern vor dem nächsten Schritt laufen sollte, obwohl es, solltest du obigem Ratschlag gefolgt sein, auf den am nächsten liegenden Schnappschuss upzugraden, nicht ganz so wichtig sein muss. Manchmal jedoch ändern sich die APIs und der alte Kern wird nicht in der Lage sein, neue Anwendungen auszuführen, der neue Kern aber normalerweise die alten unterstützen.

Denke daran, dass du einen Kern ohne root-Zugriff erzeugen kannst, aber du musst root sein, um den Kern zu installieren.

5.3.5 - Das Userland erzeugen

Dafür gibt es einen spezifischen, von OpenBSD benutzten Ablauf. Von anderen Betriebssystemen benutzte Abläufe, mit denen du vertraut bist, werden vermutlich mit OpenBSD nicht funktionieren, und du wirst ausgelacht werden, solltest du fragen, warum.

5.4 - Ein Release erstellen

Was ist ein »Release«, und warum würde ich eines erstellen wollen?

Ein Release bezeichnet einen kompletten Satz an Dateien, der verwendet werden kann, um OpenBSD auf einem anderen Rechner zu installieren. Wenn du nur einen Computer hast, auf dem OpenBSD läuft, hast du wirklich keinen Grund, ein Release zu erstellen, da der obige Erzeugungsprozess alles produziert, was du brauchst. Eine Beispielanwendung für den Releaseprozess wäre das Erzeugen von -stable auf einer schnellen Maschine, gefolgt von der Erstellung eines Release, das dann auf alle deine Maschinen in deinem Büro installiert werden kann.

Der Releaseprozess verwendet die Binärdateien, die während des obigen Erzeugungsprozesses im Verzeichnis /usr/obj erstellt wurden, sodass du diesen Schritt zuerst erfolgreich abschließen musst, und nichts darf das Verzeichnis /usr/obj in Unordnung bringen. Eine Situation, in der das ein Problem sein könnte, ist, wenn du ein speicherbasiertes Laufwerk als /usr/obj verwendest, für ein klein wenig Extraleistung während des Erzeugungsprozesses, in welchem Falle du sicherlich keinen Systemneustart zwischen »Erzeugung« und »Release« durchführen möchtest.

Der Releaseprozess erfordert zwei Arbeitsverzeichnisse, welche wir DESTDIR und RELEASEDIR nennen werden. Alle Dateien, die Teil einer »sauberen« OpenBSD-Installation sind, werden an ihre richtige Stelle im DESTDIR kopiert. Sie werden dann getar(1)t und im RELEASEDIR platziert. Am Ende des Prozesses wird RELEASEDIR ein vollständiges Release von OpenBSD enthalten. Der Releaseprozess wird ebenfalls den Einhängepunkt /mnt verwenden, sodass dieser Ort für keine anderen Dinge während des Releaseprozesses genutzt werden sollte. Zum Zwecke eines Beispiels werden wir nun DESTDIR mit dem Wert /usr/dest und RELEASEDIR mit /usr/rel verwenden.

Der Releaseprozess bezieht ein Werkzeug mit ein, crunchgen(8), das benutzt wird, um eine einzige ausführbare Datei aus vielen einzelnen ausführbaren Binärdateien zu erzeugen. Der Name, mit dem diese einzelne Binärdatei aufgerufen wird, entscheidet, welche Binärdatei-Komponente ausgeführt wird. Dies ist die Art und Weise, wie individuelle Programme in den RAM-Laufwerkskern gequetscht werden, der auf Systemstartdisketten und anderen Systemstartmedien vorliegt.

Du musst root-Privilegien haben, um ein Release zu erstellen.

Release-Erstellung

Definieren der Umgebungsvariablen DESTDIR und RELEASEDIR:
# export DESTDIR=/usr/dest
# export RELEASEDIR=/usr/rel
Wir leeren nun das DESTDIR und erstellen die Verzeichnisse, sollte dies nötig sein:
# test -d ${DESTDIR} && mv ${DESTDIR} ${DESTDIR}.old && rm -rf ${DESTDIR}.old &
# mkdir -p ${DESTDIR} ${RELEASEDIR}
RELEASEDIR muss normalerweise vor dem Beginn des Releaseprozesses nicht leer sein, jedoch könnten alte Dateien herumliegen bleiben, sollten sich Änderungen in den Dateien des Release oder ihren Namen ergeben haben. Du könntest den Wunsch verspüren, dieses Verzeichnis ebenfalls zu löschen, bevor es losgeht.

Wir erstellen nun das eigentliche Release:

# cd /usr/src/etc
# make release
Nachdem das Release erstellt wurde, ist es eine gute Idee, das Release zu überprüfen, um sicherzustellen, dass die tar-Dateien mit dem übereinstimmen, was sich im Verzeichnis DESTDIR befindet. Die Ausgabe dieses Schritts sollte äußerst minimal sein.
# cd /usr/src/distrib/sets
# sh checkflist
Du hast nun vollständige und überprüfte Dateisets innerhalb des RELEASEDIR. Diese Dateien können nun verwendet werden, um OpenBSD auf anderen Maschinen zu installieren oder upzugraden.

Die verbindlichen Anweisungen, wie man ein Release erstellt, finden sich in release(8).

Hinweis: Wenn du die daraus resultierenden Dateien über HTTP für die Upgrade- und Installationsskripte zur Verfügung stellen willst, musst du eine index.txt-Datei hinzufügen, in der eine Liste aller Dateien enthalten ist, die sich in deinem neu erzeugten Release befinden.

# /bin/ls -1 >index.txt
Sobald ein komplettes Release erzeugt wurde, kann man diese Dateien für eine Standardinstallation oder das Upgrade einer anderen Maschine nutzen, oder, wenn man eine Maschine auf einen neuen -stable aktualisiert, kann man einfach die tar-Dateien im Wurzelverzeichnis der Zielmaschine auspacken.

5.5 - X erzeugen (Xenocara)

Beginnend mit X.org v7 stellte X auf ein System zur »modularen Erzeugung« um, was zur Folge hatte, dass der Quelltext von X.org in über dreihundert mehr oder weniger unabhängige Pakete zerlegt worden ist.

Um das Leben der OpenBSD-Anwender zu vereinfachen, wurde eine »Meta-Erzeuger« mit dem Namen Xenocara entwickelt. Dieses System »konvertiert« X zurück in einen großen Baum, der mit einem Arbeitsschritt übersetzt wird. Als zusätzliches Bonbon ist dieser Erzeugungsschritt dem Erzeugungsprozess des Rests von OpenBSD sehr viel ähnlicher, als es die früheren Versionen waren.

Die offiziellen Instruktionen für die Erzeugung von X befinden sich auf deinem System in der Datei /usr/xenocara/README und in release(8).

Den Quelltext beziehen

Der »übliche« Ort für den xenocara-Quelltextbaum ist /usr/xenocara und der Quelltext selbst befindet sich im CVS-Modul xenocara. Eine Arbeitskopie wird wie folgt erstellt:
$ cd /usr
$ cvs -qdanoncvs@anoncvs.example.org:/cvs checkout -P xenocara

Xenocara erzeugen

Für die Erzeugung des standardmäßigen Xenocara-Baums, wie er von OpenBSD unterstützt wird, werden keine weiteren Werkzeuge benötigt.
# cd /usr/xenocara
# rm -rf /usr/xobj/*
# make bootstrap
# make obj
# make build
Wenn du tatsächlich Änderungen am Quelltext vornehmen möchtest, dann wirst du sehr wahrscheinlich einige Pakete zusätzlich installieren müssen. Details hierüber befinden sich in der Datei /usr/xenocara/README.

Ein Release erstellen

Dies ist dem Releaseprozess des Hauptsystems sehr ähnlich. Nach dem erfolgreichen Erzeugen von X wirst du DESTDIR und RELEASEDIR aus dem gleichen Grund erzeugen wie oben erläutert. RELEASEDIR kann das gleiche Verzeichnis sein wie das RELEASEDIR des Hauptsystems, aber während dieses Prozesses wird DESTDIR gelöscht und wieder neu erstellt. Wenn es vorsichtig angestellt wird, ist dies kein Problem, aber separate DESTDIRs zu verwenden, kann »sicherer« sein.

Für dieses Beispiel werden wir DESTDIR und RELEASEDIR mit den respektiven Werten /usr/dest und /usr/rel nutzen. Dies muss nach obigem Erzeugungsprozess geschehen.

# export DESTDIR=/usr/dest
# export RELEASEDIR=/usr/rel
# test -d ${DESTDIR} && mv ${DESTDIR} ${DESTDIR}- && \
     rm -rf ${DESTDIR}- &
# mkdir -p ${DESTDIR} ${RELEASEDIR}
# make release
Wenn dieser Prozess abgeschlossen ist, wirst du ein Set der Releasedateien im $RELEASEDIR haben.

5.6 - Warum brauche ich einen selbst erstellten Kern?

In der Tat brauchst du ihn wahrscheinlich nicht.

Ein angepasster Kern ist ein Betriebssystemkern, der mit einer anderen Konfigurationsdatei als der bereitgestellten Konfigurationsdatei GENERIC erstellt wurde. Ein angepasster Kern kann auf Quelltext der Aromata -release-, -stable- oder -current basieren, genauso wie der GENERIC es tun kann. Während das Übersetzen deines eigenen GENERIC-Kerns vom OpenBSD-Team unterstützt wird, so wird es die Übersetzung deines selbst angepassten Betriebssystemkerns nicht.

Die standardmäßige OpenBSD-Kernkonfiguration (GENERIC) ist dafür entworfen, für die meisten Leute brauchbar zu sein. Es gibt mehr Leute, die ihr System bei dem Versuch, den Kern zu optimieren, ruiniert haben, als solche, die damit ihre Systemfunktion verbessert haben. Es gibt einige Leute, die glauben, dass du deinen Kern anpassen musst, um die optimale Leistung zu erhalten, doch das stimmt für OpenBSD nicht. Nur die fortgeschrittensten und erfahrensten Anwender mit den anspruchsvollsten Anwendungen müssen sich Gedanken über einen angepassten Kern oder ein angepasstes System machen.

Einige Gründe, warum du vielleicht einen angepassten Kern erzeugen möchtest oder musst:

Einige Gründe, warum du keinen eigenen, angepassten Kern erzeugen solltest:

Das Entfernen von Gerätetreibern mag den Systemstart deines Systems beschleunigen, kann aber die Wiederherstellung erschweren, wenn du ein Problem mit der Hardware hast, und wird meistens falsch gemacht. Das Entfernen der Gerätetreiber wird nicht dazu beitragen, dass dein System spürbar schneller wird, obwohl es einen kleineren Kern erzeugt. Das Entfernen von Debuginformationen und Fehlerüberprüfungsroutinen kann das System spürbar beschleunigen, doch wird es die Untersuchung eines Systems unmöglich machen, wenn etwas schief geht.

Es sei an dieser Stelle noch einmal erwähnt, dass Entwickler normalerweise Fehlerberichte ignorieren, außer wenn sie ebenfalls mit einem GENERIC-Kern hervorgerufen werden können. Du wurdest gewarnt.

5.7 - Einen angepassten Kern erzeugen

Es wird angenommen, dass du das Vorherige gelesen hast und wirklich auf Schmerzen stehst. Es wird des Weiteren angenommen, dass du ein Ziel hast, das man weder durch die Konfiguration während des Systemstarts (UKC>), noch durch die config(8)uration eines GENERIC-Kerns erreicht werden kann. Wenn diese Annahmen falsch sind, solltest du weiterhin bei GENERIC verbleiben.

Die Generierung des OpenBSD-Betriebssystemkerns wird über Konfigurationsdateien gesteuert, die sich standardmäßig im Verzeichnis /usr/src/sys/arch/<arch>/conf/ befinden. Alle Architekturen haben eine Datei namens GENERIC, die verwendet wird, um den standardmäßigen OpenBSD-Betriebssystemkern für diese Architektur zu erzeugen. Dort können sich ebenfalls andere Konfigurationsdateien befinden, die Kerne erzeugen, die andere Ziele verfolgen, zum Beispiel minimalen Speicherbedarf, Workstations ohne Laufwerke etc.

Die Konfigurationsdatei wird von config(8) verarbeitet, das ein für die Übersetzung gedachtes Verzeichnis in ../compile erstellt und populiert; bei einer typischen Installation wäre es in /usr/src/sys/arch/<arch>/compile/. config(8) erstellt ebenfalls ein Makefile und weitere Dateien, die für eine erfolgreiche Erzeugung des Kerns notwendig sind.

Kern-Konfigurationsoptionen sind Optionen, die du zu deiner Kernkonfiguration hinzufügst und die bestimmte Eigenschaften oder Funktionen des Kerns bereitstellen. Dies erlaubt dir die von dir gewünschte Unterstützung exakt zu definieren und unnötige Geräte außen vor zu lassen. Es gibt eine Vielzahl an Möglichkeiten, deinen Kern auf deine Wünsche abzustimmen. Hier werden wir nur auf einige der am häufigsten benutzten Möglichkeiten eingehen. Lies die Handbuchseite options(4) für eine komplette Liste der Optionen und, da sich diese von Zeit zu Zeit ändern, solltest du sicherstellen, dass es die Handbuchseite für die gleiche Version von OpenBSD ist, die du erzeugst. Du kannst auch die Beispielkonfigurationsdateien zu Rate ziehen, die für deine Architektur zur Verfügung stehen.

Ändere, entferne oder füge niemals Optionen hinzu, wenn du keinen triftigen Grund dazu hast! Editiere nicht die Konfigurationsdatei GENERIC!! Die einzige Kernkonfiguration, die vom OpenBSD-Team unterstützt wird, ist der GENERIC-Kern, der eine Kombination der Optionen in /usr/src/sys/arch/<arch>/conf/GENERIC und /usr/src/sys/conf/GENERIC ist, so, wie sie vom OpenBSD-Team bereit gestellt worden sind (d. h. NICHT verändert). Ein Fehlerbericht, der mit einem modifizierten Kern zustande kam, resultiert meistens darin, dass dir gesagt wird, dass du versuchen sollst, das Problem mit einem GENERIC-Kern zu reproduzieren. Nicht alle Optionen sind untereinander kompatibel und viele Optionen sind notwendig, damit das System läuft. Es gibt keine Garantie, dass ein Kern läuft, nur weil du ihn übersetzen konntest. Es gibt außerdem keine Garantie, dass ein Kern, der »config(8)uriert« werden konnte, auch erzeugt werden kann.

Hier kannst du die plattformspezifischen Konfigurationsdateien sehen:

Wenn du diese Dateien genauer betrachtest, dann wird dir am Anfang eine Zeile ähnlich dieser auffallen:

     include "../../../conf/GENERIC"
Das bedeutet, dass ein Verweis auf eine andere Konfigurationsdatei vorhanden ist, eine, die plattformunabhängige Optionen enthält. Wenn du also deinen eigenen Kern konfigurieren willst, so stelle sicher, dass du auch /sys/conf/GENERIC durchgeschaut hast.

Betriebsystemkern-Konfigurationsoptionen sollten in deiner Kernkonfigurationsdatei in folgenden Formaten angeführt werden:

option      Name
oder
option      Name=Wert
Um beispielsweise die Option »DEBUG« in den Kern einzubringen, füge eine Zeile wie die folgende ein:
option      DEBUG
Die Optionen im OpenBSD-Kern werden in Übersetzer-Präprozessoroptionen transformiert, weshalb die Angabe einer Option wie DEBUG den Quelltext mit der Option -DDEBUG übersetzen wird, entsprechend einem #define DEBUG im Kern.

Manchmal möchtest du vielleicht Optionen deaktivieren, die bereits definiert sind, typischerweise in der Datei src/sys/conf/GENERIC. Obwohl du eine Kopie dieser Datei verändern könntest, ist das Verwenden der Angabe rmoption eine bessere Wahl. Falls du zum Beispiel den im Kern befindlichen Debugger deaktivieren möchtest (nicht empfohlen!), würdest du eine Zeile wie diese:

     rmoption DDB
in deine Kernkonfigurationsdatei hinzufügen. option DDB ist in src/sys/conf/GENERIC definiert, aber die oben angegebene Zeile rmoption deaktiviert sie wieder.

Noch einmal, bitte lies options(4) für weitere Informationen über die Besonderheiten dieser Optionen. Beachte auch, dass viele dieser Optionen ihre eigenen Handbuchseiten haben - lies immer alles, was über eine Option verfügbar ist, bevor du sie zu deinem Kern hinzufügst oder aus ihm entfernst.

Einen angepassten Kern erzeugen

In diesem Fall werden wir einen Kern erzeugen, der die boca(4) Serielle-Mehrfachport ISA-Karte unterstützt. Diese Karte ist aufgrund von Konflikten mit anderen Treibern nicht im Kern GENERIC vorhanden. Es gibt zwei typische Wege, einen angepassten Kern zu erzeugen: kopiere die Konfigurationsdatei GENERIC und editiere sie unter einem anderen Name, oder erstelle eine »Dateihülse«, die die normale GENERIC-Kernkonfiguration »einbindet« und des weiteren alle von dir gebrauchten Optionen enthält. In folgendem Fall sieht unsere Dateihülse dergestalt aus:
include "arch/i386/conf/GENERIC"

boca0  at       isa? port 0x100 irq 10     # BOCA 8-port serial cards
com*   at       boca? slave ?
Die zwei Zeilen bezüglich der boca(4)-Karte wurden von den auskommentierten Zeilen in GENERIC kopiert, jedoch wurde der IRQ den eigenen Bedürfnissen angepasst. Der Vorteil der Nutzung einer Hülsendatei ist es, dass Änderungen an GENERIC automatisch aktualisiert werden, und damit im Einklang mit Änderungen am übrigen Quelltext bleiben. Der Nachteil ist, dass man Geräte nicht entfernen kann (obwohl das, generell gesagt, sowieso eine schlechte Idee ist).

Der andere Weg, einen angepassten Kern zu generieren, ist, eine Kopie der standardmäßigen GENERIC zu machen, ihr einen anderen Namen zu geben und dann den eigenen Bedürfnissen anzupassen. Der Nachteil dabei ist, dass spätere Updates der Konfigurationsdatei GENERIC manuell in deine Kopie übertragen werden müssen, oder aber du musst deine Konfigurationsdatei neu erstellen.

In alle Fällen gilt, dass du, nachdem du deine angepasste Kernkonfigurationsdatei erstellt hast, config(1) benutzen und dann den Kern wie oben beschrieben erzeugen kannst.

Vollständige Instruktionen zum Erstellen deines eigenen angepassten Kerns finden sich auf der Handbuchseite config(8).

5.8 - Konfiguration während des Systemstarts

Manchmal wird dir, wenn du dein System startest, auffallen, dass der Betriebssystemkern dein Gerät zwar findet, es aber vielleicht dem falschen IRQ zugewiesen ist. Und vielleicht brauchst du dieses Gerät sofort. Nun, ohne den Kern neu zu bauen kannst du OpenBSDs Systemstart-Kernkonfiguration benutzen. Dies wird dein Problem unmittelbar für jetzt lösen. Startest du neu, so musst du diesen Schritt wiederholen. Dies ist also nur eine vorübergehende Lösung, und du solltest das Problem durch Nutzung von config(8) korrigieren. Dafür benötigt dein Kern jedoch die option BOOT_CONFIG, die in GENERIC gesetzt ist.

Der Großteil dieses Dokumentes kann auf der Handbuchseite boot_config(8) gefunden werden.

Um in die Benutzer-Kern-Konfiguration, kurz UKC (»User Kernel Config«) zu gelangen, musst du den Systemstart mit der Option -c ausführen.

boot> boot hd0a:/bsd -c
Oder welchen Kern du auch immer starten möchtest. Tust du dies, so wird ein UKC-Prompt erscheinen. Hier kannst du Kommandos direkt an den Kern absetzen, Geräte spezifizieren, die du ändern, deaktivieren oder sogar aktivieren möchtest.

Hier eine Liste der gängigen Befehle der UKC.

Wenn du deinen Kern fertig konfiguriert hast, nutze quit oder exit und setze den Systemstart fort. Danach solltest du deine Änderung am Kernabbild permanent machen, indem du die Schritte ausführst, die in Mittels config(8) deinen Kern verändern beschrieben sind.

5.9 - Mittels config(8) deinen Kern verändern

Die Optionen -e und -u von config(8) können äußerst hilfreich sein und wertvolle Zeit sparen, die du mit dem Übersetzen deines Kerns verschwenden würdest. Die Option -e erlaubt dir die Benutzer-Kern-Konfiguration, kurz UKC (»User Kernel Config«), auf einem laufenden System zu nutzen. Diese Änderungen werden dann beim nächsten Systemstart wirksam. Die Option -u testet, ob irgendwelche Änderungen am laufenden Kern während des Systemstarts gemacht wurden, d. h., ob du mittels boot -c die UKC beim Starten benutzt hast.

Das folgende Beispiel zeigt das Deaktivieren der ep*-Geräte im Kern. Zur Sicherheit musst du die Option -o benutzen, die die Änderung in die angegebene Datei schreibt. Zum Beispiel: config -e -o bsd.new /bsd wird die Änderungen in bsd.new schreiben. Das folgende Beispiel verwendet die Option -o nicht, daher werden die Änderungen einfach ignoriert und nicht zurück in die Kernbinärdatei geschrieben. Für weitere Informationen über Fehler- und Warnmeldungen lies die Handbuchseite config(8).

$ sudo config -e /bsd
OpenBSD 5.2 (GENERIC) #278: Wed Aug  1 10:04:16 MDT 2012
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
warning: no output file specified
Enter 'help' for information
ukc> ?
        help                                Command help list
        add             dev                 Add a device
        base            8|10|16             Base on large numbers
        change          devno|dev           Change device
        disable         attr val|devno|dev  Disable device
        enable          attr val|devno|dev  Enable device
        find            devno|dev           Find device
        list                                List configuration
        lines           count               # of lines per page
        show            [attr [val]]        Show attribute
        exit                                Exit, without saving changes
        quit                                Quit, saving current changes
        timezone        [mins [dst]]        Show/change timezone
        bufcachepercent [number]            Show/change BUFCACHEPERCENT
        nkmempg         [number]            Show/change NKMEMPAGES
ukc> list
  0 video* at uvideo* flags 0x0
  1 audio* at uaudio*|sb0|sb*|gus0|pas0|ess*|wss0|wss*|ym*|eap*|envy*|eso*|sv*|n
eo*|cmpci*|clcs*|clct*|auacer*|auglx*|auich*|auixp*|autri*|auvia*|azalia*|fms*|m
aestro*|esa*|yds*|emu* flags 0x0
  2 midi* at umidi*|sb0|sb*|ym*|mpu*|mpu*|autri*|eap*|envy* flags 0x0
  3 drm* at inteldrm*|radeondrm* flags 0x0
  4 inteldrm* at vga0|vga* flags 0x0
  5 radeondrm* at vga0|vga* flags 0x0
  6 radio* at udsbr*|bktr0|fms* flags 0x0
  7 vscsi0 at root flags 0x0
  8 softraid0 at root flags 0x0
  9 nsphy* at url*|udav*|mos*|axe*|aue*|xe*|ef*|hme*|lii*|bce*|ale*|alc*|age*|jm
e*|et*|nfe*|stge*|vge*|bnx*|bge*|lge*|nge*|msk*|sk*|ste*|se*|sis*|wb*|tl*|vte*|v
r*|pcn*|sf*|ti*|gem*|ne0|ne1|ne2|ne*|ne*|ne*|epic*|sm0|sm*|dc*|dc*|re*|re*|rl*|r
l*|mtd*|fxp*|fxp*|xl*|xl*|ep0|ep*|ep*|ep*|ep*|ep* phy -1 flags 0x0
 10 nsphyter* at url*|udav*|mos*|axe*|aue*|xe*|ef*|hme*|lii*|bce*|ale*|alc*|age*
|jme*|et*|nfe*|stge*|vge*|bnx*|bge*|lge*|nge*|msk*|sk*|ste*|se*|sis*|wb*|tl*|vte
*|vr*|pcn*|sf*|ti*|gem*|ne0|ne1|ne2|ne*|ne*|ne*|epic*|sm0|sm*|dc*|dc*|re*|re*|rl
*|rl*|mtd*|fxp*|fxp*|xl*|xl*|ep0|ep*|ep*|ep*|ep*|ep* phy -1 flags 0x0
[...snip...]
ukc> disable ep
 95 ep* disabled
 96 ep* disabled
281 ep0 disabled
282 ep* disabled
283 ep* disabled
340 ep* disabled
ukc> quit
not forced

Im obigen Beispiel werden alle ep* Geräte im Kern deaktiviert und es wird auch nicht getestet, ob sie überhaupt vorhanden sind. In einigen Situationen, in denen du die UKC beim Systemstart via boot -c benutzt hast, wird die Notwendigkeit bestehen, diese Änderungen dauerhaft einzubringen. Für diesen Zweck musst du die Option -u benutzen. Im folgenden Beispiel wurde der Computer in die UKC gestartet und das Gerät wi(4) deaktiviert. Da diese Änderung mit boot -c NICHT dauerhaft ist, müssen die Änderungen erst geschrieben werden. Dieses Beispiel schreibt die Änderung von boot -c in eine neue Kernbinärdatei namens bsd.new.

$ sudo config -e -u -o bsd.new /bsd
OpenBSD 5.2 (GENERIC) #278: Wed Aug  1 10:04:16 MDT 2012
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Processing history...
161 wi* disabled
162 wi* disabled
417 wi* disabled
Enter 'help' for information
ukc> quit

5.10 - Ausführlichere Meldungen während des Systemstarts erhalten

Ausführlichere Meldungen zu erhalten kann sehr hilfreich sein, wenn man versucht, Probleme während des Systemstarts zu beheben. Wenn du in einer Problemsituation steckst, in der deine Systemstartdiskette nicht startet, und du mehr Informationen benötigst, so starte einfach neu. Am »boot>«-Prompt angelangt, starte mit boot -c. Dies bringt dich in die UKC>, wo du dann Folgendes eingibst:
UKC> verbose
autoconf verbose enabled
UKC> quit

Nun wirst du äußerst ausführliche Meldungen während des Systemstarts erhalten.

5.11 - Häufige Probleme, Tipps und Fragen zum Übersetzen und Erzeugen

Meistens werden Probleme während des Erzeugungsprozesses dadurch verursacht, dass den zuvor genannten Anleitungen nicht sorgfältig gefolgt wurde. Ab und zu gibt es echte Probleme bei der Erzeugung von -current aus dem allerneuesten Schnappschuss, aber Fehler während der Erzeugung von -release oder -stable sind fast immer Anwenderfehler.

Die meisten Probleme treten aus einem der folgenden Gründe auf:

Hier sind noch einige weitere Probleme, die auftreten könnten:

5.11.1 - Das Erzeugen bricht mit einem »Signal 11« Fehler ab

OpenBSD und andere Programme aus dem Quelltext heraus zu erzeugen ist eine Aufgabe, die die Hardware stärker beansprucht als die meisten anderen, da CPU, Festplatte und Speicher intensiv genutzt werden. Als Ergebnis ist der wahrscheinlichste Zeitpunkt, an dem sich bei Hardware, die ein Problem hat, dieses Problem zeigt, während des Übersetzens. Signal 11 Fehler sind typischerweise durch Hardware-Probleme verursacht, sehr häufig Speicherprobleme, können aber auch CPU-, Mainboard- oder Hitzeprobleme sein. Dein System mag ansonsten sogar sehr stabil sein, sich aber nicht in der Lage befinden, Programme zu übersetzen.

Du wirst es vermutlich am besten finden, wenn du die Komponenten, die die Fehler verursachen, reparierst oder austauschst, da sich Probleme in Zukunft auch auf andere Weise zeigen könnten. Falls du Hardware besitzt, bei der du wirklich den Wunsch verspürst, sie zu nutzen, und die dir keine anderen Probleme bereitet, so installiere einfach einen Schnappschuss oder ein Release.

Siehe die Sig11 FAQ für sehr viel mehr Informationen.

5.11.2 - »make build« schlägt mit »cannot open output file snake: is a directory« fehl

Dies ist das Resultat zweier separater Fehler: Es ist wichtig, den Instruktionen sorgfältig zu folgen, wenn du deinen Baum herunterlädst und erzeugst.

5.11.3 - Mein System läuft nicht ohne IPv6!

Stimmt. Bitte mach keine Modifikationen am Basissystem, von denen du nicht weißt, wie sie sich auswirken. Eine »kleine« Änderung im Kern kann große Auswirkungen für den gesamten Rest des Systems haben. Bitte lies das hier erneut.

5.11.4 - Hoppla! Ich habe vergessen, zuerst das Verzeichnis /usr/obj zu erstellen!

Durch das Ausführen von »make build« vor einem »make obj« wirst du mit Objektdateien da stehen, die in deinem /usr/src-Verzeichnis verstreut herumliegen. Das ist eine schlechte Sache. Wenn du vermeiden willst, deinen gesamten Quelltextbaum erneut zu beziehen, kannst du Folgendes versuchen, um die obj-Dateien zu entfernen:
    # cd /usr/src
    # find . -type l -name obj | xargs rm
    # make cleandir
    # rm -rf /usr/obj/*
    # make obj

5.11.5 - Tipp: Lege /usr/obj auf seine eigene Partition

Wenn du häufig Erzeugungen anstößt, wirst du es vielleicht als schneller empfinden, wenn du /usr/obj auf seine eigene Partition legst. Der Nutzen ist einfach, es ist typischerweise schneller:
    # umount /usr/obj
    # newfs DeineObjPartition
    # mount /usr/obj
durchzuführen als »rm -rf /usr/obj/*«.

5.11.6 - Wie verhindere ich das Erzeugen bestimmter Teile des Baums?

Manchmal möchtest du das Erzeugen von bestimmten Teilen des Baums verhindern, normalerweise, weil du einen Ersatz für eine mitgelieferte Anwendung durch Pakete hast, oder weil du, aus welchem Grund auch immer, ein »kleineres« Release haben willst. Die Lösung hierfür ist, die Option SKIPDIR von /etc/mk.conf zu verwenden.

Hinweis: Es ist möglich, auf diese Weise ein nicht-funktionales System zu erzeugen. Resultate des Nutzens dieser Option werden vom OpenBSD-Projekt nicht unterstützt.

5.11.7 - Wo kann ich mehr über den Prozess des Erzeugens erfahren?

Hier sind einige andere Ressourcen:

5.11.8 - Ich sehe keine Schnappschüsse auf den FTP-Seiten. Wo sind sie geblieben?

Schnappschüsse können entfernt werden, wenn sie zu alt werden (oder nicht länger relevant sind), oder wenn ein neues -release naht.

5.11.9 - Wie führe ich die Urladung einer neueren Version des Übersetzers (gcc) aus?

Du solltest wirklich einfach den aktuellsten Schnappschuss installieren.

5.11.10 - Was ist der beste Weg, um /etc, /var und /dev zu aktualisieren?

Als Richtlinie modifiziert Software im OpenBSD-Baum keinerlei Dateien in /etc automatisch. Das bedeutet, dass es immer am Administrator liegt, die benötigten Modifikationen dort durchzuführen. Upgrades sind keine Ausnahme. Um Dateien in diesen Verzeichnissen zu aktualisieren, stelle erst einmal fest, welche Änderungen an den Basis- (Distributions) Dateien stattgefunden haben, und führe diese Änderungen erneut durch.

Um zum Beispiel die Dateien im Baum zu sehen, die sich zuletzt geändert haben, führe dies aus:

    # cd /usr/src/etc
    # ls -lt |more

Um alle Änderungen in /etc zwischen zwei bestimmten Versionen von OpenBSD zu sehen, kannst du CVS verwenden. Um zum Beispiel die Änderungen zwischen 5.1 und 5.2 zu sehen, führe dies aus:

    # cd /usr/src/etc
    # cvs diff -u -rOPENBSD_5_1 -rOPENBSD_5_2
Um die Änderungen zwischen 5.2 und -current (»HEAD«) zu sehen, benutze:
    # cd /usr/src/etc
    # cvs diff -u -rOPENBSD_5_2 -rHEAD
Das Skript /dev/MAKEDEV wird nicht automatisch als Teil des »make build« Prozesses aktualisiert, jedoch wird es als Teil einer Binär-Aktualisierung installiert. Als generelle Regel gilt, dass es eine gute Idee ist, dieses Skript zu kopieren (falls das notwendig ist) und von deinem Quelltextbaum aus aufzurufen, um ein Upgrade durchzuführen:
    # cd /dev
    # cp /usr/src/etc/etc.`machine`/MAKEDEV ./
    # ./MAKEDEV all

Sobald du die Änderungen ausgemacht hast, füge sie deinem lokalen Baum erneut zu, jegliche lokale Konfiguration, die du gemacht hast, bewahrend.

Typische Änderungen in /etc, auf die zwischen zwei Releases geachtet werden muss, sind unter anderem:

Diese Änderungen werden in upgrade52.html (um zum 5.1-Release zu gelangen) oder current.html (um zu -current zu gelangen) zusammengefasst.

5.11.11 - Gibt es einen einfachen Weg, um alle nötigen Änderungen an der Dateihierarchie durchzuführen?

Von Zeit zu Zeit werden Dateien oder Verzeichnisse zu der Datei hierarchy hinzugefügt oder aus ihr entfernt. Ebenfalls können sich Besitzer-Informationen für Teile des Dateisystems ändern. Ein einfacher Weg, um sicherzustellen, dass deine Dateihierarchie auf dem neuesten Stand ist, ist das Verwenden des Werkzeugs mtree(8).

Beziehe zuerst den aktuellsten Quelltext, dann führe Folgendes aus:

    # cd /usr/src/etc/mtree
    # install -c -o root -g wheel -m 600 special /etc/mtree
    # install -c -o root -g wheel -m 444 4.4BSD.dist /etc/mtree
    # mtree -qdef /etc/mtree/4.4BSD.dist -p / -u

Deine Dateihierarchie sollte nun auf dem neuesten Stand sein.

5.11.12 - Kann ich querübersetzen? Warum nicht?

Es befinden sich Werkzeuge im System, mit denen man querübersetzen kann - bereit für Entwickler, die an einer neuen Portierung arbeiten. Sie sind jedoch nicht für den allgemeinen Einsatz gedacht.

Wenn ein Entwickler eine neue Plattform unterstützen will, ist einer der ersten großen Tests eine native Erzeugung des Systems. Das Erzeugen des Systems aus dem Quelltext setzt das Betriebssystem und die Maschine unter hohe Last, was wiederum einen guten Test darstellt, wie gut das System tatsächlich arbeitet. Aus diesem Grund führt OpenBSD den Erzeugungsprozess auf der Plattform aus, für die das Resultat gedacht ist, was auch als »native building« bezeichnet wird. Ohne diese native Übersetzung ist es viel schwerer sicherzustellen, dass die unterschiedlichen Plattformen verlässlich eingesetzt werden können und nicht einfach nur starten.

[FAQ-Index] [Zum Kapitel 4 - Installationsanleitung] [Zum Kapitel 6 - Vernetzung]


[zurück] www@openbsd.org
$OpenBSD: faq5.html,v 1.120 2013/02/11 20:44:46 ajacoutot Exp $