diff --git a/de_DE.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml b/de_DE.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml index 6ece8429b0..63da2d78e1 100644 --- a/de_DE.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml +++ b/de_DE.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml @@ -1,3004 +1,3004 @@ SGML-Dokumente erstellen In diesem Kapitel werden die beiden vom FDP eingesetzen Auszeichnungssprachen HTML und DocBook behandelt. Hierbei beschränkt sich dieses Kapitel auf die Elemente, die bei der täglichen Arbeit am ehesten zum Einsatz kommen werden. Beide Sprachen besitzen eine große Anzahl von Elementen. Das erschwert es, das richtige Element in der richtigen Situation auszuwählen. Aus diesem Grund werden zu jedem Element auch immer Beispiele angeboten, die den richtigen Einsatz des Elements verdeutlichen sollen. Es ist nicht das Ziel dieses Kapitels möglichst viele Elemente beider Sprachen zu behandeln – dies wäre nur eine Wiederholung der eigentlichen Sprachreferenz. Sofern es Unklarheiten zur Verwendung einzelner Elemente und Auszeichnung von bestimmten Sachverhalten gibt, können diese an &a.doc; geschickt werden. Fluß- kontra Blockelemente Wenn im folgenden von Flußelementen die Rede ist, sind damit Elemente gemeint, die in einem Blockelement auftreten können und keinen Zeilenumbruch hervorrufen. Blockelemente hingegen erzeugen unter anderem einen ZeilenumbruchDie englische Bezeichnung inline element wurde in Anlehnung an das Wort Fließtext mit Flußelement übersetzt.. HTML HTML, die HyperText Markup Language, ist die Auszeichnungssprache des Internets. Weitere Informationen zu HTML finden sich unter . Sie kommt bei der Erstellung der Webseiten des FreeBSD-Projektes zum Einsatz. Für technische Dokumentationen sollte HTML jedoch nicht eingesetzt werden, da DocBook eine größere und bessere Auswahl an Elementen bietet. Folglich sollte HTML nur für die FreeBSD-Webseiten verwendet werden. Die HTML-Spezifikation liegt bis jetzt in mehreren Versionen vor: 1, 2, 3.0, 3.2 und (die aktuelle) 4.0. Von letzterer existieren zwei Varianten: streng (HTML 4.0 Strict) und locker (HTML 4.0 Transitional). Die HTML-DTDs sind über den Port textproc/html verfügbar und werden automatisch als Teil des Metaports textproc/docproj mitinstalliert. Formale Öffentliche Bezeichner Da es mehrere Version von HTML gibt, existieren auch mehrere FÖPs, zu denen ein HTML-Dokument konform erklärt werden kann. Die Mehrzahl der sich auf der FreeBSD-Webseite befindenen HTML-Seiten sind zu der lockeren Version von HTML 4.0 konform. PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" Die Elemente <sgmltag>head</sgmltag> und <sgmltag>body</sgmltag> Ein HTML-Dokument unterteilt sich normalerweise in zwei Bereiche: head und body. Der Kopf (head) enthält Metadaten wie den Dokumententitel und Angaben zum Autor. Der Rumpf (body) umfaßt den eigentlichen Dokumenteninhalt, der für den Leser bestimmt ist. In einem HTML-Dokument werden diese Bereiche über die Elemente head und body voneinander abgegrenzt. Beide sind Kinder des Wurzelelementes html. Die Struktur eines HTML-Dokumentes <html> <head> <title>Der Dokumententitel</title> </head> <body> … </body> </html> Blockelemente Überschriften HTML kennt sechs verschiedene Elemente, mit denen Überschriften ausgezeichnet werden können. Das bekannteste Element ist h1, das sich am Anfang der Überschriftenhierarchie befindet. h1 folgen die Überschriftenelemente h2 bis h6. Der Inhalt von hN stellt den Text der Überschrift dar. <sgmltag>h1</sgmltag>, <sgmltag>h2</sgmltag>… Fügen Sie in eine der existierenden Übungsdateien folgendes ein: Erstes Kapitel

Das ist die Überschrift des ersten Kapitels

Das ist die Überschrift des ersten Unterkapitels

Das ist die Überschrift des zweiten Kapitels

]]>
Eine HTML-Seite sollte immer nur eine Überschrift h1 haben. Dieser Überschrift können beliebig viele Kapitel mit einer Überschrift h2 folgen, die selbst wiederum eine beliebige Anzahl von Kapiteln mit einer Überschrift h3 enthalten können. Diese Verschachtelung setzt sich bis zu Kapiteln mit einer h6-Überschrift fort. Es sollte vermieden werden, Elemente in der Überschriftenhierarchie auszulassen. Falsche Verschachtelung von Überschriften Fügen Sie in eine der existierenden Übungsdateien folgendes ein: Erstes Kapitel

Unterkapitel

]]>
Absätze Absätze können in HTML mit Hilfe des Elementes p ausgezeichnet werden. Absätze mit dem Element <sgmltag>p</sgmltag> Fügen Sie in eine der existierenden Übungsdateien folgendes ein: Das hier, das ist ein Absatz. Absätze können andere Elemente enhalten.

]]>
Blockzitate Ein Blockzitat ist ein etwas umfangreicheres Zitat aus einem anderen Text, das nicht zum aktuellen Absatz gehört. Blockzitat Fügen Sie in eine der existierenden Übungsdateien folgendes ein:

Artikel 1: Menschenwürde; Grundrechtsbindung der staatlichen Gewalt

  1. Die Würde des Menschen ist unantastbar. Sie zu achten und zu schützen ist Verpflichtung aller staatlichen Gewalten.

  2. Das Deutsche Volk bekennt sich darum zu unverletzlichen und unveräußerlichen Menschenrechten als Grundlage jeder menschlichen Gemeinschaft, des Friedens und der Gerechtigkeit in der Welt.

  3. Die nachfolgenden Grundrechte binden Gesetzgebung, vollziehende Gewalt und Rechtsprechung als unmittelbar geltendes Recht.

]]>
Listen HTML kennt drei Arten von Listen: sortierte, unsortierte und Definitionslisten. Ein Eintrag in einer sortierten Liste wird üblicherweise mit einer Nummer versehen, Einträge in unsortierten Listen hingegen mit einem Aufzählungspunkt. Definitionslisten wiederum bestehen aus zwei Teilen: Der erste enthält den Begriff der definiert werden soll und der zweite dessen Erläuterung. Sortierte Listen werden mit dem Element ol (für ordered list) ausgezeichnet, unsortierte Listen mit ul (für unordered list) und Definitionslisten mit dl. Listenpunkte sortierter und unsortierter Listen werden mit dem Element li ausgezeichnet, welches Text oder andere Blockelemente enthalten kann. Begriffe, die in einer Definitionslisten enthalten sind, werden mit dem Element dt (für definition term) ausgezeichnet. Die Erklärung zu diesem Begriff wird mit Hilfe des Elementes dd (für definition description) markiert. So wie li, kann das Element dd ebenfalls andere Blockelemente aufnehmen. Listen mit <sgmltag>ul</sgmltag> und <sgmltag>ol</sgmltag> erstellen Fügen Sie in eine der existierenden Übungsdateien folgendes ein: Jetzt folgt eine unsortierte Liste. Wahrscheinlich werden die einzelnen Einträge mit einem vorangehenden Punkt dargestellt.

  • Erster Eintrag
  • Zweiter Eintrag
  • Dritter Eintrag

Die zweite Liste ist sortiert und ihre Einträge bestehen aus mehreren Absätzen. Jeder Listeneintrag ist nummeriert.

  1. Das ist der erste Eintrag mit nur einem Absatz.

  2. Das ist der erste Absatz des zweiten Eintrags.

    Und das ist der zweite Absatz des zweiten Eintrags.

  3. Der dritte Eintrag besteht ebenfalls nur aus einem Eintrag.

]]>
Definitionslisten mit <sgmltag>dl</sgmltag> erstellen Fügen Sie in eine der existierenden Übungsdateien folgendes ein:
Erster Begriff

Erster Absatz der Erklärung

Zweiter Absatz der Erklärung.

Zweiter Begriff

Erster Absatz der Erklärung.

Dritter Begriff
Erster Absatz der Erklärung zum dritten Begriff.
]]>
Vorformatierter Text In einigen Fällen ist es gewollt, dass die Formatierung eines Textes im Quelldokument erhalten bleibt, damit der Leser diesen genau so sieht, wie ihn der Autor erstellt hat. In der HTML-Spezifikation ist dafür das Element pre vorgesehen, welches dafür sorgt, dass Zeilenumbrüche erhalten bleiben und Leerzeichen nicht zusammengefaßt werden. Browser verwenden für den Inhalt des Elementes pre üblicherweise eine Fixschrift. Vorformatierten Text mit <sgmltag>pre</sgmltag> erstellen Der Originaltext einer E-Mail läßt sich beispielsweise wie folgt einbinden: From: nik@FreeBSD.org To: freebsd-doc@FreeBSD.org Subject: Neue Version verfügbar Es ist eine neue Version der Fibel für neue Mitarbeiter am FreeBSD-Dokumentationsprojekt verfügbar: <URL:http://people.FreeBSD.org/~nik/primer/index.html> Kommentare und Anmerkungen sind willkommen. N]]> Beachten Sie, dass < und & nach wie vor als Sonderzeichen erkannt werden. Daher wird in diesem Beispiel auch &lt; an Stelle von < verwendet. Aus dem gleichen Grund wurde auch &gt; an Stelle von > verwendet. Achten Sie also stets auf Sonderzeichen, wenn Sie normalen Text aus E-Mails, Programmcode oder einer anderen Quelle kopieren. Tabellen Die meisten Textbrowser, beispielsweise Lynx, können Tabellen nicht besonders gut darstellen. Deshalb sollten Auszeichnungsalternativen in Betracht gezogen werden, um eine angemessene Darstellung sicherzustellen. Tabellen lassen sich in HTML mit Hilfe des Elements table auszeichnen. Eine Tabelle setzt sich aus einer oder mehreren Zeilen (tr) zusammen, von denen jede mindestens eine Zelle (td) enthält. Zellen können wiederum andere Blockelemente, wie Absätze oder Listen, enthalten. Auch können sie auch andere Tabellen aufnehmen, wobei die Verschachtelungstiefe unbegrenzt ist. Soll die Tabellenzelle nur einen Textabsatz enthalten, ist es nicht notwendig den Text mit einem p zu umschließen. Einfache Tabelle mit <sgmltag>table</sgmltag> Fügen Sie in eine der existierenden Übungsdateien folgendes ein: Eine einfache 2x2 Tabelle.

Obere linke Zelle Obere rechte Zelle
Untere linke Zelle Untere rechte Zelle
]]>
HTML kennt die Möglichkeit, dass sich eine Zelle mehrere Zeilen und/oder Spalten erstrecken kann. Sollen beispielsweise mehrere Spalten zusammenfassen werden, kann dies mit mit Hilfe des Attributes colspan erreicht werden, indem man ihm die Anzahl der zusammenzufassenden Spalten zuweist. Ähnliches gilt für die Zusammenfassung von Zeilen: Hierfür wird dem Attribut rowspan die Anzahl der zusammenzufassenden Zeilen zugewiesen. Anwendung des Attributes <literal>rowspan</literal> Diese Tabelle besteht aus einer langen Zelle auf der linken Seite und zwei kleineren Zellen auf der rechten.

Lang und dünn
Obere Zelle Untere Zelle
]]>
Anwendung des Attributes <literal>colspan</literal> Eine breite Zeile oben und zwei schmalere Zeilen darunter.

Obere Zelle
Linke untere Zelle Rechte untere Zelle
]]>
Gemeinsame Anwendung der Attrbute <literal>rowspan</literal> und <literal>colspan</literal> Eine Tablle mit 3-mal-3 Zellen. Oben links werden 2 mal 2 Zelle zusammengezogen.

Große obere linke Zelle Obere rechte Zelle
Mittlere rechte Zelle
Untere linke Zelle Untere mittlere Zelle Untere rechte Zelle
]]>
Flußelemente Hervorheben von Information Sollen sich bestimmte Informationen von anderen optisch abheben, kann dies mit den HTML-Tags strong und em erreicht werden. strong stellt dabei eine stärkere Hervorhebung als em dar, wobei mit strong ausgezeichnete Elemente fett und mit em ausgezeichnete Elemente kursiv dargestellt werden. Allerdings ist diese Aussage nicht verläßlich, da die Darstellung vom Browser abhängig ist. Text mit <sgmltag>em</sgmltag> und <sgmltag>strong</sgmltag> hervorheben Dieses Wort ist hervorgehoben, während dieses noch stärker hervorgehoben ist.

]]>
Fett- und Schrägschrift Da mittels HTML auch Festlegungen über die Darstellung getroffen werden können, gibt es die Möglichkeit direkt zu bestimmen, dass bestimmte Inhalte fett oder kursiv dargestellt werden sollen. Mit b eingefaßte Inhalte werden fett und mit i eingefaßte kursiv dargestellt. Text mit <sgmltag>b</sgmltag> und <sgmltag>i</sgmltag> formatieren Dieses Wort wird fett dargestellt, während dieses kursiv dargestellt wird.

]]>
Nicht-proportionale Schrift für Texte Der Tag tt erlaubt es, Text in einer schreibmaschinenähnlichen Schrift darzustellen. Nicht-proportionale Schrift mit <sgmltag>tt</sgmltag> Dieses Dokument wurde ursprünglich von Nik Clayton geschrieben. Nick Clayton kann unter der E-Mail-Adresse nik@FreeBSD.org erreicht werden.

]]>
Änderung der Schriftgröße HTML bietet auch Möglichkeiten, um Einfluß auf die Schriftgröße zu nehmen, das heißt, zu bestimmen, ob die Schrift größer oder kleiner als die Standardschrift dargestellt werden soll. Es gibt drei verschiedene Wege, dies zu erreichen: Mittels der Tags big und small kann die Darstellungsgröße des eingeschlossenen Textes vergrößert respektive verkleinert werden. HTML erlaubt es zudem, diese Tags zu verschachteln, so dass auch <big><big>Das ist wesentlich größer.</big></big> geschrieben werden kann. Das gleiche Ergebnis kann über die Zuweisung der Werte 1 und -1 an das Attribut size des Tags font erreicht werden. Diese Vorgehensweise sollte allerdings als veraltet betrachtet werden, da der Einsatz eines CSS hierfür die bessere Lösung darstellt. Über die Zuweisung von absoluten Werten im Bereich von 1 bis 7 an das Attribut size des Tags font Der Standardwert für size ist 3.. Diese Herangehensweise ist ebenfalls veraltet und sollte nicht mehr angewandt werden. Schriftgröße ändern mit <sgmltag>big</sgmltag>, <sgmltag>small</sgmltag> und <sgmltag>font</sgmltag> Die folgenden HTML-Schnipsel bewirken alle das gleiche: Dieser Text ist etwas kleiner. Dieser jedoch ein wenig größer.

Dieser Text ist etwas kleiner. Dieser jedoch ein wenig größer.

Dieser Text ist etwas kleiner. Dieser jedoch ein wenig größer.

]]>
Links Bei Links handelt es sich ebenfalls Flußelemente. Auf andere Dokumente im WWW verweisen Um auf ein anderes Dokument im WWW zu verweisen, müssen Sie die URL dieses Dokuments kennen. Links auf andere Dokumente im WWW werden in HTML durch den Tag a und dessen Attribute href, das die Zieladresse enthält, angelegt. Der Inhalt des Elementes wird selbst zum Link und seine Darstellung erfolgt verschieden vom übrigen Text. Meist geschieht das durch eine andere Schriftfarbe oder dadurch, dass der Linktext unterstrichen wird. <literal><a href="..."></literal> benutzen Weitere Informationen stehen auf der FreeBSD-Webseite zur Verfügung.

]]>
Beim Aufruf dieses Links wird das referenzierte Dokument vom Browser geladen und mit dessen Seitenanfang dargestellt.
Auf bestimmte Dokumentenabschnitte verweisen HTML unterstützt neben einfachen Links auch solche, die auf einen bestimmten Abschnitt innerhalb eines Dokumentes verweisen. Dazu müssen die Abschnitte, auf die verwiesen werden soll, mit Hilfe von sogenannten Ankern markiert werden. Diese Anker können ebenfalls mit Hilfe des Tags a gesetzt werden, nur das anstelle von href das Attribut name gesetzt werden muss. Anwendung von <literal><a name="..."></literal> Auf diesen Absatz kann mit Hilfe seines Namens (absatz1) verwiesen werden.

]]>
Um auf einen so gekennzeichneten Abschnitt zu verweisen, muss die URL des Dokumentes um das Zeichen # und den Namen des Zielankers erweitert werden. Auf einen Abschnitt eines anderen Dokumentes verweisen Für dieses Beispiel wird davon ausgegangen, dass der mit absatz1 gekennzeichnete Absatz sich in der HTML-Datei foo.html befindet. Weitere Informationen können im ersten Absatz der Datei foo.html gefunden werden.

]]>
Die DocBook DTD DocBook wurde ursprüglich von HaL Computer Systems and O'Reilly & Associates als DTD für das Erstellen von technischen Dokumenten entwickelt Einen kurzen historischen Abriss finden Sie unter . + url="http://www.oasis-open.org/docbook/intro.shtml#d0e41">http://www.oasis-open.org/docbook/intro.shtml#d0e41. . Seit 1998 wird es vom DocBook Technical Committee gewartet. DocBook ist sehr stark auf die Beschreibung von Inhalten, und nicht auf die Darstellung des Inhalts ausgerichtet. Damit steht es im Gegensatz zu LinuxDoc und HTML. Formelle und informelle Elemente Einige Elemente der DocBook DTD sind in zwei Varianten vorhanden: formell und informell. Üblicherweise besitzt die formelle Variante einen Titel, dem der eigentliche Elementeninhalt folgt. Die informelle Variante hingegen hat keinen Titel. Die DocBook DTD ist in der Ports-Sammlung im Port textproc/docbook enthalten und wird bei der Installation des Metaports textproc/docproj automatisch mitinstalliert. Die FreeBSD-Erweiterungen Für das FDP wurde die DocBook DTD durch das FreeBSD-Dokumentationsproject um zusätzliche Elemente erweitert, um damit präzisiere Auszeichnungsmöglichkeiten zur Verfügung zu haben. Sofern im folgenden FreeBSD-spezifische Elemente genutzt werden, wird explizit darauf hingewiesen werden. Wenn nachfolgend im Text der Begriff DocBook verwendet wird, ist damit die durch das FDP erweiterte Version der DocBook DTD gemeint. Die durch das FDP vorgenommenen Erweiterungen sind nicht FreeBSD-spezifisch. Sie wurden lediglich vorgenommen, da sie für die Arbeit des FDPs als nützlich erschienen. Für den Fall, das in den anderen *nix-Lagern (NetBSD, OpenBSD, Linux,…) Interesse daran besteht, gemeinsam eine Standarderweiterung für die DocBook DTD zu entwickeln, kann mit dem &a.doceng; Verbindung aufgenommen werden. Zum jetzigen Zeitpunkt sind die FreeBSD-Erweiterungen nicht Bestandteil der Ports-Sammlung. Sie werden im &os;-CVS-Archiv (doc/share/sgml/freebsd.dtd) verwaltet. Formelle Öffentliche Bezeichner In Übereinstimmung mir der DocBook-Richtlinie zur Erstellung von Bezeichnern für DocBook-Erweiterungen lautet der Bezeichner der erweiterten FreeBSD-Variante: PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" Die Struktur von DocBook-Dokumenten DocBook erlaubt es, Dokumente auf verschiedene Weise zu strukturieren. Innerhalb des FDPs werden hauptsächlich zwei Arten von DocBook-Dokumenten verwendet: Buch und Artikel. Beide unterscheiden sich darin, dass ein Buch auf der obersten Ebene durch chapter-Elemente strukturiert wird. Sollte das noch nicht ausreichend sein, können die einzelnen Kapitel eines Buches mit Hilfe des Elementes part in Teile aufgespalten werden. Das Handbuch ist beispielsweise auf diese Weise aufgebaut. Kapitel (chapter) können weiterhin in Unterkapitel unterteilt werden. Diese werden durch die Elemente sect1 ausgezeichnet. Soll ein Unterkapitel selbst weitere Unterkapitel enthalten, kann das über das Element sect2 geschehen. Diese Unterteilung kann bis zur Tiefe von fünf Unterkapiteln – über die Elemente sect3, sect4 und sect5 – fortgeführt werden. Der eigentliche Inhalt, um den es ja in dem Artikel oder Buch geht, wird unterhalb der hier genannten Elemente eingefügt. Vom Aufbau her ist ein Artikel ist einfacher strukturiert als ein Buch. So kann ein Artikel beispielsweise keine Kapitel (chapter) enthalten. Stattdessen kann der Inhalt eines Artikels nur durch die schon bekannten sectN-Elemente in einen oder mehrere Abschnitte gegliedert werden. Überlegen Sie sich vor dem Schreiben eines Textes, ob der zu schreibende Text am besten als Buch oder als Artikel angelegt wird. Artikel eignen sich besser für Texte, die nicht in mehrere Kapitel aufgeteilt werden müssen und mit einem Umfang von ungefähr 20 bis 25 Seiten vergleichsweise kurz sind. Natürlich ist das nur eine Richtlinie. Bücher sind dementsprechend am besten für lange Texte geeignet, die sich sinnvoll in Kapitel unterteilen lassen und möglichweiser noch Anhänge und ähnliches enthalten können. Alle Tutorien von FreeBSD sind als Artikel verfaßt, während hingegen die FreeBSD-FAQ und das FreeBSD-Handbuch als Bücher verfaßt wurden. Bücher schreiben Der Inhalt eines Buches wird in einem book-Element abgelegt. Neben dem Textteil des Buches kann dieses Element weitergehende Informationen über das Buch selbst, wie Meta-Informationen zum Erstellen eines Stichwortverzeichnisses oder zusätzliche Inhalte zum Erstellen einer Titelei, enthalten. Diese zusätzlichen Inhalte sollten in einem bookinfo-Element abgelegt werden. Buchvorlage <sgmltag>book</sgmltag> mit <sgmltag>bookinfo</sgmltag> <book> <bookinfo> <title>Titel</title> <author> <firstname>Vorname</firstname> <surname>Nachname</surname> <affiliation> <address><email>E-Mail-Adresse</email></address> </affiliation> </author> <copyright> <year>1998</year> <holder role="mailto:E-Mail-Adresse">Vollständiger Name</holder> </copyright> <releaseinfo>$FreeBSD$</releaseinfo> <abstract> <para>Kurze Zusammenfassung des Buchinhaltes.</para> </abstract> </bookinfo> … </book> Artikel schreiben Der Inhalt eines Artikels wird in einem article-Element abgelegt. Neben dem Textteil kann dieses Element weitere Teile, wie Meta-Informationen zum Erstellen eines Stichwortverzeichnisses oder zusätzliche Inhalte zum Erstellen einer Titelei, enthalten. Analog zu einem Buch, sollten diese Informationen in einem articleinfo-Element abgelegt werden. Artikelvorlage <sgmltag>article</sgmltag> mit <sgmltag>articleinfo</sgmltag> <article> <articleinfo> <title>Titel</title> <author> <firstname>Vorname</firstname> <surname>Nachname</surname> <affiliation> <address><email>E-Mail-Adresse</email></address> </affiliation> </author> <copyright> <year>1998</year> <holder role="mailto:E-Mail-Adresse">Vollständiger Name</holder> </copyright> <releaseinfo>$FreeBSD$</releaseinfo> <abstract> <para>Kurze Zusammenfassung des Artikelinhalts.</para> </abstract> </articleinfo> … </article> Kapitel Kapitel werden mit dem chapter-Element angelegt und müssen ein title-Element enthalten. Verwendet werden können sie nur in Büchern. Ein einfaches Kapitel Kapitelüberschrift
]]> Kapitel können nicht leer sein. Nebem einem title-Element müssen sie weiteren Inhalt beinhalten. Falls ein leeres Kapitel benötig wird, kann dies durch das Einfügen eines leeren Absatzes (para) erreicht werden. Ein leeres Kapitel Das ist ein leeres Kapitel ]]> Unterkapitel Bücher werden auf der obersten Gliederungsebene durch chapter-Elemente in Kapitel unterteilt. Eine weitergehende Untergliederung kann durch das Anlegen von Unterkapiteln erreicht werden. Im Gegensatz zu Kapiteln, die durch chapter-Elemente ausgezeichnet werden, erfolgt die Auszeichnung von Unterkapitel mit dem Element sectn. Das n in Elementnamen trifft eine Aussage über die Gliederungstiefe, auf der sich das Unterkapitel befindet. Ein sect1-Element kann mehrere Elemente vom Typ sect2 enthalten, die die Unterkapitel der nächsten Gliederungsebene darstellen. sect5 ist das letzte Element, das auf diese Art zur Gliederung eingesetzt werden kann. Unterkapitel Ein Beispielkapitel Ein beliebiger Text. Erster Abschnitt (1.1) Zweiter Abschnitt (1.2) Erster Unterabschnitt (1.2.1) Erster Unterunterabschnitt (1.2.1.1) Zweiter Unterabschnitt (1.2.2) ]]> Die Unterkapitel dieses Beispiels wurden zu Demonstrationszwecken manuell durchnummeriert. In normalen Dokumenten wird diese Aufgabe von den Stylesheets übernommen. Bücher mittels <sgmltag>part</sgmltag> unterteilen In den Fällen, in denen die Unteilung eines Buches in Kapitel nicht ausreichend ist, können mehrere Kapitel mit dem Element part zu einem Teil zusammengefasst werden. Einführung Überblick Was ist FreeBSD? Die Geschichte von FreeBSD ]]> Blockelemente Absätze DocBook kennt drei Arten von Absätzen: Absätze mit Überschrift (formalpara), normale Absätze (para) und einfache Absätze (simpara). Normale Absätze und einfache Absätze unterscheiden sich dadurch, dass innerhalb von para Blockelemente erlaubt sind, innerhalb von simpara hingegen nicht. Es ist empfehlenswert, para den Vorzug zu geben. Absatz mit <sgmltag>para</sgmltag> Das ist ein Absatz. Absätze können fast jedes andere Element aufnehmen.]]> Darstellung: Das ist ein Absatz. Absätze können fast jedes andere Element aufnehmen. Blockzitate Blockzitate sind textlich umfangreichere Zitate aus einem anderen Text, die nicht innerhalb des aktuellen Absatzes angezeigt werden sollen. Wahlweise können Blockzitate eine Überschrift haben und die Zitatquelle nennen. <sgmltag>blockquote</sgmltag> Ein Auszug aus dem Grundgesetz:
Menschenwürde; Grundrechtsbindung der staatlichen Gewalt Aus dem Grundgesetz Die Würde des Menschen ist unantastbar. Sie zu achten und zu schützen ist Verpflichtung aller staatlichen Gewalten. Das Deutsche Volk bekennt sich darum zu unverletzlichen und unveräußerlichen Menschenrechten als Grundlage jeder menschlichen Gemeinschaft, des Friedens und der Gerechtigkeit in der Welt. Die nachfolgenden Grundrechte binden Gesetzgebung, vollziehende Gewalt und Rechtsprechung als unmittelbar geltendes Recht.
]]>
Darstellung:
Menschenwürde; Grundrechtsbindung der staatlichen Gewalt Aus dem Grundgesetz Die Würde des Menschen ist unantastbar. Sie zu achten und zu schützen ist Verpflichtung aller staatlichen Gewalten. Das Deutsche Volk bekennt sich darum zu unverletzlichen und unveräußerlichen Menschenrechten als Grundlage jeder menschlichen Gemeinschaft, des Friedens und der Gerechtigkeit in der Welt. Die nachfolgenden Grundrechte binden Gesetzgebung, vollziehende Gewalt und Rechtsprechung als unmittelbar geltendes Recht.
Tipps, Anmerkungen, Warnungen, wichtige Informationen und Randbemerkungen In bestimmten Fällen kann es nützlich sein, dem Leser zusätzliche Informationen zu geben, die sich vom Haupttext abheben, damit der Leser sie besser wahrnimmt. Abhängig von der Art der Information, können solche Stellen mit einem der Elemente tip (für Tipps), note (für Anmerkungen), warning (für Warnungen), caution (für besonders ernstzunehmende Warnungen) und important (für wichtige Anmerkungen) ausgezeichnet werden. Trifft keines dieser Element für die auszuzeichnende Stelle zu, sollte diese mit dem Element sidebar ausgezeichnet werden. Da die richtige Einordnung einer auszuzeichnenden Textstelle nicht immer leicht zu treffen ist, werden in der DocBook-Dokumentation folgende Empfehlungen gegeben: Eine Anmerkung (note) ist eine Information, die von jedem Leser beachtet werden sollte. Eine wichtige Anmerkung (important) eine Variation einer Anmerkung. Eine Warnung (warning) betrifft einen möglichen Hardwareschaden oder weist auf eine Gefahr für Leib und Leben hin. Eine besonders ernstzunehmende Warnung (caution) betrifft einen möglichen Datenverlust oder Softwareschaden. <sgmltag>warning</sgmltag> Wenn Sie FreeBSD auf Ihrer Festplatte installieren, kann es sein, da&szlig; Sie Windows nie mehr benutzen wollen. ]]> Eine Warnung wird wie folgt dargestellt: Wenn Sie FreeBSD auf Ihrer Festplatte installieren, kann es sein, dass Sie Windows nie mehr benutzen wollen. Listen und Handlungsanweisungen Listen sind ein oft gebrauchtes Hilfsmittel, wenn es darum geht, Informationen für den Benutzer übersichtlich darzustellen oder eine Abfolge von Arbeitsschritten zu beschreiben, die notwendig sind, um ein bestimmtes Ziel zu erreichen. Zur Auszeichnung von Listen stellt DocBook die Elemente itemizedlist, orderedlist und procedure zur Verfügung. DocBook kennt noch andere Elemente für die Auszeichnung von Listen, die an dieser Stelle jedoch nicht behandelt werden. . itemizedlist und orderedlist ähneln sehr stark ihren HTML-Gegenstücken ul und ol. Beide Listenarten müssen mindestens ein Element listitem enthalten. Das listitem Element muss mindestens ein weiteres Blockelement enthalten. procedure unterscheidet sich ein wenig von den vorhergehenden. Es enthält step-Elemente, die wiederum step- oder substel-Elemente enthalten können. Ein step-Element kann nur Blockelemente aufnehmen. <sgmltag>itemizedlist</sgmltag>, <sgmltag>orderedlist</sgmltag> und <sgmltag>procedure</sgmltag> Das ist das erste Listenelement. Das ist das zweite Listenelement. Das ist das erste Aufzählungselement. Das ist das zweite Aufzählungselement. Machen Sie zuerst dies. Und dann machen Sie das.. Und jetzt noch das… ]]> Darstellung: Das ist das erste Listenelement. Das ist das zweite Listenelement. Das ist das erste Aufzählungselement. Das ist das zweite Aufzählungselement. Machen Sie zuerst dies. Und dann machen Sie das.. Und jetzt noch das… Dateiinhalte auszeichnen Technische Dokumente enthalten oft auch Konfigurationsbeispiele oder Quellcodeschnipsel. Zur Auszeichnung dieser Inhalte, stellt Docbook das Element programmlisting zur Verfügung. Im Gegensatz zu anderen DocBook-Elementen wird der Elementinhalt von programmlisting nicht normalisiert, das heißt, dass alle Leerzeichen, Tabulatoren und Zeilenumbrüche unverändert übernommen werden. Aus diesem Grund ist es unter anderem wichtig, dass sich der öffende Tag in der selben Zeile wie der Anfang des darzustellenden Textes befindet. Gleiches gilt für den schließenden Tag: Er muss sich am Ende der letzten Zeile befinden. Wird das nicht beachtet, kann es sein, dass unerwartete Leerzeichen und Leerzeilen in der Ausgabe auftauchen. <sgmltag>programlisting</sgmltag> Am Ende sollte Ihr Programm wie folgt aussehen: #include &lt;stdio.h&gt; int main(void) { printf("Hallo Welt!\n"); }]]> Die spitzen Klammern der #include-Anweisung können nicht direkt verwendet werden, sondern müssen über ihre Entitäten eingebunden werden. Darstellung: Am Ende sollte Ihr Programm wie folgt aussehen: #include <stdio.h> int main(void) { printf("Hallo Welt!\n"); } Textanmerkungen Textanmerkungen auf Englisch: callout sind ein Mechanismus, um auf bestimmte Stellen in einem vorhergehenden Beispiel oder Text zu verweisen. Um solche Verweise anzulegen, müssen die betreffenden Stellen in den Beispielen (programlisting, literallayout, …) mit co-Elementen markiert werden, wobei jedes Element ein eindeutiges id-Attribut besitzen muss. Anschließend sollte ein calloutlist-Element eingefügt werden, dessen Elemente sich auf die co-Elemente des Beispiels beziehen und die jeweiligen Anmerkungen enthalten. Das <sgmltag>co</sgmltag>- und das <sgmltag>calloutlist</sgmltag>-Element Am Ende sollte Ihr Programm wie folgt aussehen: #include &lt;stdio.h&gt; int main(void) { printf("Hallo Welt\n"); } Bindet die Headerdatei stdio.h ein. Bestimmt den Typ des Rückgabewertes von main(). Ruft die Funktion printf() auf, die Hallo Welt! auf der Standardausgabe ausgibt ]]> Darstellung: Am Ende sollte Ihr Programm wie folgt aussehen: #include &lt;stdio.h&gt; int main(void) { printf("Hallo Welt\n"); } Bindet die Headerdatei stdio.h ein. Bestimmt den Typ des Rückgabewertes von main(). Ruft die Funktion printf() auf, die Hallo Welt! auf der Standardausgabe ausgibt Tabellen Im Gegensatz zu HTML ist es nicht notwendig, Tabellen zu Layoutzwecken einzusetzen, da die Layoutaufgabe von den Stylesheets übernommen wird. Stattdessen sollten Tabellen nur für die Auszeichnung von Daten in Tabellenform genutzt werden. Vereinfacht betrachtet (für Details sollte die DocBook-Dokumentation zu Rate gezogen werden) besteht eine Tabelle, die entweder als formelle oder als informelle Tabelle angelegt werden kann, aus einem table-Element. Dieses Element selbst beinhaltet mindestens ein Element tgroup, das über ein Attribut die Spaltenanzahl der Tabelle bestimmt. Innerhalb des Elementes tgroup kann sich ein Element thead mit den Spaltenüberschriften und ein Element tbody mit dem eigentlichen Tabelleninhalt befinden. Beide Elemente beinhalten row-Elemente, die wiederum entry-Elemente beinhalten. Jedes entry-Element stellt eine einzelne Tabellenzelle dar. Tabellen mittels <sgmltag>informaltable</sgmltag> auszeichnen Spaltenüberschrift 1 Spaltenüberschrift 2 Zeile 1, Spalte 1 Zeile 1, Spalte 2 Zeile 2, Spalte 1 Zeile 2, Spalte 2 ]]> Darstellung: Spaltenüberschrift 1 Spaltenüberschrift 2 Zeile 1, Spalte 1 Zeile 1, Spalte 2 Zeile 2, Spalte 1 Zeile 2, Spalte 2 Verwenden Sie stets das Attribut pgwide mit dem Wert 1, wenn Sie das Element informaltable benutzen. Ein Bug des Internet Explorers verhindert ansonsten die korrekte Darstellung dieser Tabellen. Soll die Tabelle keinen Rand haben, kann das Attribut frame mit dem Wert none dem Element informaltable hinzugefügt werden (<informaltable frame="none">)). Tabelle mit Attribut <literal>frame="none"</literal> Darstellung: Spaltenüberschrift 1 Spaltenüberschrift 2 Zeile 1, Spalte 1 Zeile 1, Spalte 2 Zeile 2, Spalte 1 Zeile 2, Spalte 2 Beispiele für den Leser Oft gilt es, für dem Benutzer Beispiele zu geben, die er dann selber nachvollziehen soll. Meist handelt es sich dabei um interaktive Dialoge zwischen Mensch und Maschine: Der Benutzer gibt einen Befehl ein und erhält eine Antwort vom System. Ein Satz von speziellen Elementen und Entitäten unterstützt den Autor bei der Auszeichnung solcher Textstellen: screen Gedacht zur Auszeichnung von Bildschirminhalten. Im Unterschied zu anderen Elementen werden Leerzeichen innerhalb des Elementes screen unverändert übernommen. prompt, &prompt.root; und &prompt.user; Eingabeaufforderungen des Rechners (Betriebssysten, Shell oder Anwendung) sind ein häufig auftretender Teil dessen, was der Benutzer auf dem Bildschirm zu sehen bekommt. Sie sollten mit prompt ausgezeichnet werden. Ein Spezialfall sind die beiden Eingabeaufforderungen der Shell für normale Benutzer und den Superuser root. Jedesmal wenn auf eine von diesen beiden Nutzerrollen hingewiesen werden soll, sollte entweder &prompt.root; oder &prompt.user; eingesetzt werden. Beide Entitäten können auch außerhalb von screen verwendet werden. &prompt.root; und &prompt.user; sind FreeBSD-spezifische Erweiterungen der DocBook DTD und nicht in der originalen DocBook DTD enthalten. userinput Das Element userinput ist für die Auszeichnung von Benutzereingaben gedacht. <sgmltag>screen</sgmltag>, <sgmltag>prompt</sgmltag> und <sgmltag>userinput</sgmltag> &prompt.user; ls -1 foo1 foo2 foo3 &prompt.user; ls -1 | grep foo2 foo2 &prompt.user; su Password: &prompt.root; cat foo2 This is the file called 'foo2']]> Darstellung: &prompt.user; ls -1 foo1 foo2 foo3 &prompt.user; ls -1 | grep foo2 foo2 &prompt.user; su Password: &prompt.root; cat foo2 This is the file called 'foo2' Obgleich der Inhalt der Datei foo2 in dem obigen Beispiel angezeigt wird, sollte dieser nicht mit programlisting ausgezeichnet werden. Vielmehr sollte programlisting einzig und allein für die Darstellung von Dateifragmenten außerhalb von Benutzeraktionen gewählt werden.
Flußelemente Hervorhebungen Wenn es darum geht bestimmte Wörter oder Textstellen hervorzuheben, sollte dafür das Element emphasis verwendet werden. Das so ausgezeichnete Text wird dann kursiv oder fett dargestellt; im Falle einer Sprachausgabe würde es anders betont werden. Im Gegensatz zu den HTML mit seinen Elementen b und i, kennt DocBook keinen Weg, um diese Darstellung zu ändernAnmerkung des Übersetzers: Hier sollte man sich noch einmal ins Gedächtnis rufen, dass mittels der DocBook DTD nur Inhalte ausgezeichnet werden und nicht das Layout bestimmt wird.. Handelt es sich bei dem darzustellenden um eine wichtige Information, kann alternativ important verwendet werden. Das Element <sgmltag>emphasis</sgmltag> FreeBSD ist zweifelslos das führende Unix-artige Bestriebssystem für die Intel-Plattform.]]> Darstellung: FreeBSD ist zweifelslos das führende Unix-artige Bestriebssystem für die Intel-Plattform. Zitate Um einen Auszug aus einer anderen Quelle zu zitieren oder kenntlich zu machen, dass eine bestimmte Wendung im übertragenen Sinne zu verstehen ist, kann der betreffende Text mit Hilfe des Elementes quote ausgezeichnet werden. Innerhalb von quote können die meisten der normalerweise zur Verfügung stehenden Elemente genutzt werden. Richtig zitieren Es sollte immer sichergestellt werden, dass die Suche die Grenzen zwischen lokaler und öffentlicher Administration (RFC 1535) einhält.]]> Darstellung: Es sollte immer sichergestellt werden, das die Suche die Grenzen zwischen lokaler und öffentlicher Administration (RFC 1535) einhält. Tasten, Maustasten und Tastenkombinationen Das Element keycap beschreibt eine bestimmte Taste der Tastatur. Für die Auszeichnung von Maustasten steht analog das Element mousebutton zur Verfügung. Mit Hilfe von keycombo können beliebige Tasten- und Maustastenkombinationen beschrieben werden. Das Element keycombo besitzt ein Attribut action, dem einer der Werte click, double-click, other, press, seq oder simul zugewiesen werden kann. Die letzten beiden Werte deuten an, dass die genannte Kombination nacheinander oder gleichzeitig gedrückt werden soll. Die Stylesheets fügen zwischen die einzelnen Unterelemente von keycombo +-Zeichen ein. Tasten, Maustasten und Tastenkombinationen Diese Eingaben zeichnen Sie wie folgt aus: Mit der Tastenkombination Alt F1 kann auf die zweite virtuelle Konsole umgeschaltet werden. Um vi zu beenden, ohne die Änderungen zu speichern, muss Esc :q! eingegeben werden. Der Fenstermanager ist so konfiguriert, dass mittels Alt rechter Maustaste Fenster verschoben werden können.]]> Darstellung: Mit der Tastenkombination Alt F1 kann auf die zweite virtuelle Konsole umgeschaltet werden. Um vi zu beenden, ohne die Änderungen zu speichern, muss Esc :q! eingegeben werden. Der Fenstermanager ist so konfiguriert, dass mittels Alt rechter Maustaste Fenster verschoben werden können. Anwendungen, Befehle, Optionen und Hilfeseiten Oft besteht die Notwendigkeit auf bestimmte Anwendungen und Befehle zu verweisen. Der Unterschied zwischen einer Anwendung und einem Befehl liegt darin, dass eine Anwendung ein einzelnes oder eine Gruppe von Programmen ist, mit denen eine bestimmte Aufgabe erledigt werden kann. Ein Befehl hingegen ist der Name eines Programmes, dass der Benutzer aufrufen kannDer Befehl mozilla startet das Programm mozilla. . Desweiteren kann es auch vorkommen, dass die von einem Programm (in einem bestimmten Fall) akzeptierten Optionen genannt werden müssen. Schlußendlich ist es oft gewünscht, zu einem Befehl dessen Abschnitt der Manualseiten im Unix-üblichen Stil Befehl(Zahl) anzugeben. Anwendungsnamen können mit application ausgezeichnet werden. Befehle können zusammen mit der betreffenden Hilfeseite über das DocBook-Element citerefentry ausgezeichnet werden. citerefentry muss zwei weitere Elemente enthalten: refentrytitle, für den Befehlsnamen, und manvolnum, für die Kategorie der Hilfeseite. Diese Art auf Befehle zu verweisen kann sehr ermüdent sein. Daher gibt es einen Satz von Allgemeinen Entitäten, der diese Arbeit erleichtert. Er ist in der Datei doc/share/sgml/man-refs.ent enhalten und kann über den folgenden Bezeichner eingebunden werden: PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN" Jede Entität in dieser Datei ist wie folgt aufgebaut: &man.Hilfeseite.Kategorie;. Der Anfang eines Dokumentes, das diese Entitäten einbindet, könnte so aussehen: <!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ <!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man; … ]> Um Befehle innerhalb des Fließtextes auszuzeichen, kann das Element command genutzt werden. Die Optionen eines Befehles können mit Hilfe von option ausgezeichnet werden. Wenn man sich mehrmals hintereinander auf den gleichen Befehl bezieht, sollte man beim ersten Auftreten die Notation &man.command.section; verwenden. Für alle folgenden Referenzen sollte hingegen command verwendet werden. Dadurch verbessert sich das Erscheinungsbild, insbesondere von HTML, deutlich. Die Unterscheidung zwischen command und application kann schwer sein, und manchmal ist die Entscheidung, welches Element das richtige ist, nicht leicht. Das folgende Beispiel soll diese Unterscheidung erleichtern. Anwendungen, Befehle und Optionen Sendmail ist der verbreitetste UNIX-Mailserver. Sendmail besteht aus den Programmen sendmail 8 , &man.mailq.1;, und &man.newaliases.1;. Mittels der Option kann sendmail 8 den Status der Mailwarteschlange ausgeben. Der Status der Mailwarteschlange kann durch den Befehl sendmail -bp überprüft werden.]]> Darstellung: Sendmail ist der verbreitetste UNIX-Mailserver. Sendmail besteht aus den Programmen sendmail 8 , &man.mailq.1; sowie &man.newaliases.1;. Mittels der Option kann sendmail 8 den Status der Mailwarteschlange ausgeben. Der Status der Mailwarteschlange kann durch den Befehl sendmail -bp überprüft werden. Die Schreibweise &man.Hilfeseite.Kategorie; ist leichter lesbar. Dateien, Verzeichnisse und Erweiterungen Immer wenn in einem Text der Name einer Datei, eines Verzeichnisses oder eine Dateierweiterung vorkommt, sollte die betreffende Stelle mit dem Element filename ausgezeichnet werden. Das Element <sgmltag>filename</sgmltag> Die SGML-Quellen des englischen Handbuches befinden sich im Verzeichnis /usr/doc/en/handbook/. In diesem Verzeichnis befindet sich eine Datei handbook.sgml. Desweiteren sollte sich eine Datei mit dem Namen Makefile zusammen mit mehreren Dateien mit der Endung .ent in diesem Verzeichnis befinden.]]> Darstellung: Die SGML-Quellen des englischen Handbuches befinden sich im Verzeichnis /usr/doc/en/handbook/. In diesem Verzeichnis befindet sich eine Datei handbook.sgml. Desweiteren sollte sich eine Datei mit dem Namen Makefile zusammen mit mehreren Dateien mit der Endung .ent in diesem Verzeichnis befinden. Portnamen FreeBSD-Erweiterung Die hier genannten Elemente sind Bestandteil der FreeBSD-Erweiterung für DocBook und sind nicht in der originalen DocBook DTD enthalten. An einigen Stellen ist es notwendig, den Namen eines Ports aus FreeBSDs Ports-Sammlung in Dokumenten zu verwenden. In diesem Fall sollte ebenfalls das Element filename eingesetzt werden, dabei aber dem Element das Attribut role mit dem Wert package zugewiesen werden. Da die Ports-Sammlung an jeder beliebigen Stelle im Dateisystem installiert werden kann, sollte filename nur die Kategorie und den Namen des Ports enthalten, aber nicht das Verzeichnis /usr/ports. Portsnamen und das Element <sgmltag>filename</sgmltag> Wenn Sie Ihr Netz und dessen Datenverkehr analysieren möchten, dann installieren Sie bitte den Port net/ethereal.]]> Darstellung: Wenn Sie Ihr Netz und dessen Datenverkehr analysieren möchten, dann installieren Sie bitte den Port net/ethereal. Gerätedateien unterhalb von <filename>/dev</filename> FreeBSD-Erweiterung Die hier genannten Elemente sind Bestandteil der FreeBSD-Erweiterung für DocBook und sind nicht in der originalen DocBook DTD enthalten. Wird in einem Dokument Bezug auf Gerätedateien unterhalb von dev genommen, dann gibt es zwei Möglichkeiten diese auszuzeichnen. Zum einen kann man sich auf das Gerät beziehen, so wie es unter /dev zu finden ist, und zum anderen kann man sich auf den Gerätenamen beziehen, wie es innerhalb des Kerns verwendet wird. Für letztere Möglichkeit sollte das Element devicename genutzt werden. Allerdings besteht nicht immer diese Wahlmöglichkeit. Einige Geräte, wie zum Beispiel Netzwerkkartenm haben keinen Eintrag unter /dev oder werden anders dargestellt. Gerätenamen per <sgmltag>devicename</sgmltag> auszeichnen Unter FreeBSD wird die serielle Datenübertragung über sio abgewickelt, das unterhalb von /dev eine Reihe von Einträgen anlegt. Zu diesen Einträgen behören beispielsweise /dev/ttyd0 und /dev/cuaa0. Andererseits erscheinen Geräte wie beispielsweise ed0 nicht unterhalb von /dev. Unter MS-DOS wird das erste Diskettelaufwerk als a: bezeichnet. FreeBSD bezeichnet es als /dev/fd0.]]> Darstellung: Unter FreeBSD wird die serielle Datenübertragung über sio abgewickelt, das unterhalb von /dev eine Reihe von Einträgen anlegt. Zu diesen Einträgen behören beispielsweise /dev/ttyd0 und /dev/cuaa0. Andererseits erscheinen Geräte wie beispielsweise ed0 nicht unterhalb von /dev. Unter MS-DOS wird das erste Diskettelaufwerk als a: bezeichnet. FreeBSD bezeichnet es als /dev/fd0. Rechner, Domains, IP-Adressen und mehr FreeBSD-Erweiterung Die hier genannten Elemente sind Bestandteil der FreeBSD-Erweiterung für DocBook und sind nicht in der originalen DocBook DTD enthalten. Bezeichner für Rechner können in Abhängigkeit der Bezeichnungsweise auf verschiedene Art und Weise ausgezeichnet werden. Gemeinsam ist allen, dass sie das Element hostid benutzen. Über das Attribut role wird die Art des Bezeichners genauer bestimmt. Kein Rollenattribut oder role="hostname" Ohne Rollenattribut stellt der umschlossene Text einen normlen Rechnernamen wie freefall oder wcarchive dar. Wenn es gewünscht ist, kann mittels role="hostname" explizit angegeben werden, dass es sich um einen Rechnernamen handelt. role="domainname" Ein Domainname wie FreeBSD.org oder ngo.org.uk. Er enthält keinen Rechnernamen. role="fqdn" Vollqualifizierter Domainname wie www.FreeBSD.org. Enthält sowohl einen Domainnamen als auch einen Rechnernamen. role="ipaddr" Eine IP-Adresse, meistens als durch Doppelpunkte getrenntes Tupel von vier Zahlen dargestellt. role="ip6addr" Eine IPv6-Adresse. role="netmask" Eine Netzwerkmaske, dargestellt als ein durch Doppelpunkte getrenntes Vierzahlentupel, einer Hexzahl oder als ein /, dem eine Zahl folgt. role="mac" Eine MAC-Adresse, dargestellt durch zweistellige Hexzahlen, die durch Doppelpunkte getrennt sind. <literal>role</literal> und <sgmltag>hostid</sgmltag> Der lokale Rechner kann immer über den Namen localhost angesprochen werden, dem immer die IP-Adresse 127.0.0.1 zugeordnet ist. Zur Domain FreeBSD.org gehören verschiedene Rechner, inklusive freefall.FreeBSD.org und pointyhat.FreeBSD.org. Wenn eine IP-Adresse einer Netzwerkkarte zugeordnet wird, was mit der Hilfe von ifconfig geschieht, sollte immer die Netzmaske 255.255.255.255, die auch hexadezimal als 0xffffffff abgegeben werden kann, benutzt werden. Die MAC-Adresse ist für jede existierende Netzwerkkarte auf der Welt eindeutig. Eine typische MAC-Adresse ist beispielsweise 08:00:20:87:ef:d0.]]> Darstellung: Der lokale Rechner kann immer über den Namen localhost angesprochen werden, dem immer die IP-Adresse 127.0.0.1 zugeordnet ist. Zur Domain FreeBSD.org gehören verschieden Rechner, inklusive freefall.FreeBSD.org und bento.FreeBSD.org. Wenn eine IP-Adresse einer Netzwerkkarte zugeordnet wird, was mit der Hilfe von ifconfig geschieht, sollte immer die Netzmaske 255.255.255.255, die auch hexadezimal als 0xffffffff abgegeben werden kann, benutzt werden. Die MAC-Adresse ist für jede existierende Netzwerkkarte auf der Welt eindeutig. Eine typische MAC-Adresse ist beispielsweise 08:00:20:87:ef:d0. Benutzernamen FreeBSD-Erweiterung Die hier genannten Elemente sind Bestandteil der FreeBSD-Erweiterung für DocBook und sind nicht in der originalen DocBook DTD enthalten. Namen von Benutzern, wie root oder bib, können mit dem Element username ausgezeichnet werden. Das Element <sgmltag>username</sgmltag> Für die meisten Administrationsaufgaben müssen Sie als root angemeldet sein.]]> Darstellung: Für die meisten Administrationsaufgaben müssen Sie als root angemeldet sein. Beschreibung von <filename>Makefile</filename>s FreeBSD-Erweiterung Die hier genannten Elemente sind Bestandteil der FreeBSD-Erweiterung für DocBook und sind nicht in der originalen DocBook DTD enthalten. Zur Beschreibung von Teilen einer Makedatei stehen die beiden Elemente marketarget und makevar zur Verfügung. maketarget bezeichnet ein Ziel eines Makefiles, das als Parameter beim Aufruf von make angegeben werden kann. makevar hingegen bezeichnet eine Variable, die entweder in einem Makefile definiert oder make auf der Befehlszeile übergeben werden kann, um so den Bauprozess zu beeinflussen. <sgmltag>maketarget</sgmltag> und <sgmltag>makevar</sgmltag> Zwei übliche Ziele in einem Makefile sind all und clean. Üblicherweise wird, wenn das Ziel all aufgerufen wird, die gesamte Anwendung neu erstellt. Der Aufruf des Zieles clean veranlaßt das Löschen aller temporären Dateien (zum Beispiel .o), die während der Übersetzung erzeugt wurden. Das genaue Verhalten von clean kann von einer Reihe von Variablen beeinflußt werden. Stellvertretend seien hier CLOBBER und RECURSE genannt.]]> Darstellung: Zwei übliche Ziele in einem Makefile sind all und clean. Üblicherweise wird, wenn das Ziel all aufgerufen wird, die gesamte Anwendung neu erstellt. Der Aufruf des Zieles clean veranlaßt das Löschen aller temporären Dateien (zum Beispiel .o), die während der Übersetzung erzeugt wurden. Das genaue Verhalten von clean kann von einer Reihe von Variablen beeinflußt werden. Stellvertretend seien hier CLOBBER und RECURSE genannt. Text buchstabengetreu übernehmen Für das Handbuch ist es oft notwendig, Textausschnitte buchstabengetreu darzustellen. Hierbei kann es sich um Texte handeln, die aus einer anderen Datei stammen oder die der Leser eins-zu-eins aus dem Handbuch kopieren können soll. In einigen Fällen ist zu diesem Zwecke programlisting ausreichend, jedoch nicht immer. So ist programlisting zum Beispiel nicht einsetzbar, wenn es darum geht, einen Auszug aus einer Datei innerhalb eines Absatzes einzufügen. In solchen Fällen sollte das Element literal zum Einsatz kommen. <sgmltag>literal</sgmltag> Die Zeile maxusers 10 in der Kernelkonfigurationsdatei beeinflußt die Größe vieler Systemtabellen und kann als ungefähr als Richtwert dafür gelten, wie viele paralle Anmeldungen das System handhaben kann.]]> Darstellung: Die Zeile maxusers 10 in der Kernelkonfigurationsdatei beeinflußt die Größe vieler Systemtabellen und kann als ungefähr als Richtwert dafür gelten, wie viele paralle Anmeldungen das System handhaben kann. Benutzerspezifische Eingaben darstellen Es kommt oft vor, dass der Leser Beispiele, Dateinamen oder Kommandozeilen verändern muss. Für einen solchen Anwendungsfall ist das Element replaceable gedacht. Es kann innerhalb von anderen Elementen genutzt werden, um die Teile auszuzeichnen, die es zu ersetzen gilt. Das Element <sgmltag>replaceable</sgmltag> &prompt.user; man command]]> Darstellung: &prompt.user; man command Dieses Beispiel zeigt, dass nur der Text mit replaceable umschlossen werden soll, den der Benutzer einzusetzen hat. Sämtlicher anderer Text sollte wie üblich ausgezeichnet werden. Die Zeile maxusers n in der Kernelkonfigurationsdatei bestimmt die Größe vieler Systemtabellen und stellt einen groben Richtwert dafür dar, wie viele gleichzeitige Anmeldungen das System unterstützt. Für einen Arbeitsplatzrechner stellt 32 einen guten Wert für n dar.]]> Darstellung: Die Zeile maxusers n in der Kernelkonfigurationsdatei bestimmt die Größe vieler Systemtabellen und stellt einen groben Richtwert dafür dar, wie viele gleichzeitige Anmeldungen das System unterstützt. Für einen Arbeitsplatzrechner stellt 32 einen guten Wert für n dar. Fehlermeldungen des Systems darstellen In manchen Fällen kann es nötig sein, Fehlermeldungen darzustellen, die von FreeBSD erzeugt werden können. Für solche Fälle ist das Element errorname vorgesehen. Das Element <sgmltag>errorname</sgmltag> Panic: cannot mount root ]]> Darstellung: Panic: cannot mount root Bilder und Grafiken Die Verwendung von Grafiken innerhalb der Dokumentation ist momentan noch in einem experimentellen Stadium. Es ist daher wahrscheinlich, dass sich die hier beschriebenen Mechanismen noch ändern werden. Für die Verwendung von Grafiken ist es notwendig, den Port graphics/ImageMagick zusätzlich zu installieren, da er nicht vom Port textproc/docproj mitinstalliert wird. Das beste Beispiel für den Einsatz von Grafiken ist der unter doc/en_US.ISO8859-1/articles/vm-design/ zu findene Artikel Design elements of the FreeBSD VM system. Falls beim Lesen der folgenden Kapitel Fragen unbeantwortet oder unklar bleiben, empfiehlt es sich, die unter dem genannten Verzeichnis befindlichen Dateien zu studieren und anhand ihrer zu verstehen, wie alles zusammenhängt. Es empfiehlt sich, den Artikel in verschiedenen Ausgabeformaten zu erzeugen, da man so sehen kann, wie die Grafiken in Abhängigkeit vom Ausgabemedium angeordnet werden. Unterstütze Grafikformate Zur Zeit werden nur zwei Grafikformate unterstützt. Welches von beiden Formaten zum Einsatz kommen sollte, hängt von der Art der Grafik ab. Für Bilder, die vorrangig Vektorelemente wie Netzwerkdiagramme, Zeitlinien und ähnliches beinhalten, sollte Encapsulated Postscript als Format gewählt werden. Wichtig ist es in diesem Fall, dass die Grafikdatei die Endung .eps hat. Für Bitmapgrafiken, wie zum Beispiel Bildschirmfotos, steht das Portable Network Grafic Format zur Verfügung. In diesem Fall, sollte die Grafikdatei immer die Endung .png haben. In das CVS-Archiv sollten nur Grafiken in diesen beiden Formaten übernommen werden. Es sollte darauf sehr darauf geachtet werden, das richtige Format für das richtige Bild zu wählen. Erwartungsgemäß wird es Dokumente geben, die eine Mischung aus PNG- und EPS-Grafiken enthalten. In solchen Fällen, stellen die Makedateien die Verwendung des richtigen Formats in Abhängigkeit vom Ausgabeformat sicher. Deshalb sollte die gleiche Grafik niemals in zwei unterschiedlichen Formaten in das CVS-Archiv übernommen werden. Es ist absehbar, dass das Dokumentationsprojekt in Zukunft das Scalable Vector Graphic-Format (SVG) als Standardformat für Vektorgrafiken übernehmen wird. Zum jetzigen Zeitpunkt ist dieser Wechsel noch nicht möglich, da der Stand der jetzigen SVG-Anwendungen noch nicht den dafür notwendigen Erfordernissen entspricht. DocBook-Elemente für den Grafikeinsatz Das Auszeichnen von Bildern mittels DocBook ist relativ einfach. Zuerst wird ein mediaobject-Element eingefügt, das als Container für medienspezifische Elemente fungieren kann. Für die Zwecke des FDPs sind das die Elemente imageobject und textobject. In das mediaobject-Element sollten ein Element vom Typ imageobject und zwei textobject-Elemente eingefügt werden. Das imageobject-Element verweist auf die eigentliche Grafikdatei. Dabei ist allerdings nur der Dateipfad ohne Erweiterung anzugegeben. Die textobject-Elemente werden dafür genutzt, Texte aufzunehmen, die dem Leser anstelle des Bildes oder zusammen mit dem Bild angezeigt werden. Dies kann unter zwei Umständen geschehen: Wenn ein Dokument als HTML-Datei durch einem Browser angezeigt wird. In diesem Falle muss jeder Grafik ein Alternativtext zugeordnet werden, der dem Leser angezeigt werden kann. Meist ist das notwendig, wenn der Browser die Grafik noch nicht geladen hat oder wenn der Benutzer den Mauszeiger über die Grafik führt. Wenn das Dokument als Textdatei gelesen wird. Da in einer Textdatei keine Grafiken angezeigt werden können, sollte es für die Grafik eine Textentsprechung geben, die alternativ angezeigt werden kann. Das folgende Beispiel soll das bisher geschriebene illustrieren. Angenommen es liegt eine einzubindene Grafik in der Datei bild1 vor, die die Darstellung eines As in einem Rechteck enthält. Die ASCII-Alternative könnte so ausgezeichnet werden: <mediaobject> <imageobject> <imagedata fileref="bild1"> </imageobject> <textobject> <literallayout class="monospaced">+ - - - - - - - - - - - - - - -+ | A | +- - - - - - - - - - - - - - -+</literallayout> </textobject> <textobject> <phrase>Ein Bild</phrase> </textobject> </mediaobject> Innerhalb vom Element imageobject befindet sich ein Element imagedata, welches mit Hilfe des Attributes fileref den Namen der Grafikdatei (ohne Erweiterung) angibt. Die Bestimmung der Dateierweiterung wird von den Stylesheets übernommen. Das erste textobject-Element enthält ein literallayout-Element, dessen Attribut class den Wert monospaced zugewiesen bekommt. Der Inhalt dieses Elements wird genutzt, wenn das Dokument in Textform ausgegeben wird. An dieser Stelle hat der Autor die Möglichkeit seine Textzeichenkünste unter Beweis zu stellen. Wichtig ist, dass die erste und die letzte Zeile sich gleichauf mit dem öffenden und dem schließenden Tag befindet. Dadurch wird sichergestellt, dass keine unnötigen Leerzeichen in die Ausgabe aufgenommen werden. Das zweite textobject-Element sollte lediglich ein phrase-Element enthalten. Wird das Dokument nach HTML konvertiert, wird dessen Inhalt für das Attribut alt des img-Tags verwendet. Die <filename>Makefile</filename>-Einträge Alle in einem Dokument verwendeten Grafiken müssen in dem zugehörigen Makefile in der Variable IMAGES enthalten sein. IMAGES sollte immer die Namen der Quellgrafiken enthalten. Werden in einem Dokument beispielsweise die drei Grafiken bild1.eps, bild2.png und bild3.png referenziert, sollte das Makefile die folgende Zeile enthalten: … IMAGES= bild1.eps bild2.png bild3.png … Eine andere Möglichkeit wäre: … IMAGES= bild1.eps IMAGES+= bild2.png IMAGES+= bild3.png … Es kann nicht oft genug betont werden: Welche Grafikdateien für das zu erzeugende Dokument benötigt werden, wird von dem Makefiles bestimmt. IMAGES darf nur die Originaldateien enthalten. Grafiken und Kapitel in Unterverzeichnissen Wenn Sie Ihre Dokumentation in mehrere kleine Dateien aufspalten (siehe ), müssen Sie sorgfältig vorgehen. Angenommen es handelt sich um ein Buch, dessen drei Kapitel in separaten Verzeichnissen angelegt wurden (kapitel1/kapitel.sgml, kapitel2/kapitel.sgml und kapitel3/kapitel.sgml). Enthalten die Kapitel Grafiken, empfiehlt es sich, diese in den gleichen Verzeichnisses abzulegen, wie die Kapitel selbst. In diesem Falle gilt es jedoch zu beachten, dass die Pfade der Grafikdateien in der Variable IMAGES und in den imagedata-Elementen immer auch den Verzeichnisnamen mitenthalten. Soll beispielsweise die Datei kapitel1/bild1.png in das in kapitel1/kapitel.sgml enthaltene Kapitel eingebunden werden, sollte dies so erfolgen: <mediaobject> <imageobject> <imagedata fileref="kapitel1/bild1"> </imageobject> … </mediaobject> fileref muss den Datei- und den Verzeichnisnamen enthalten. Das Makefile muss dementsprechend die Zeile … IMAGES= kapitel1/bild1.png … enthalten. Wird dies beachtet, sollte es zu keinen Problemen kommen. Querverweise Querverweise sind auch Flußelemente. Querverweise innerhalb eines Dokumentes Um innerhalb eines Dokumentes Verweise anzulegen, muss angegeben werden, von welcher Textstelle aus wohin verwiesen werden soll. Jedes DocBook-Element besitzt ein Attribut id, über das seinem Element ein eindeutiger Bezeichner zugewiesen werden kann. In den meisten Fällen werden Querverweise nur zu Kapiteln gesetzt. Die chaper- und sect*-Elemente sollten aus diesem Grunde ein gesetztes id-Attribut besitzen. <sgmltag>chapter</sgmltag> und <sgmltag>section</sgmltag> mit dem Attribut <literal>id</literal> Einführung Das ist eine Einführung. Sie enthält ein Unterkapitel, das ebenfalls einen eigenen Bezeichner hat. Unterkapitel 1 Das ist ein Unterkapitel. ]]> Als Wert für das Attribut id sollte immer ein selbsterklärender Bezeichner gewählt werden. Zudem ist es notwendig, dass dieser Bezeichner innerhalb des Dokumentes eindeutig ist. Im obigen Beispiel wurde der Bezeichner für das Unterkapitel gebildet, indem der Bezeichner des übergeordneten Kapitels um den Titel des Unterkapitels erweitert wurde. Diese Vorgehensweise hilft sicherzustellen, dass Bezeichner eindeutig sind und bleiben. Manchmal soll jedoch nicht auf den Anfang eines Kapitels verwiesen werden, sondern zum Beispiel auf eine Stelle in einem Absatz oder auf ein bestimmtes Beispiel. In solchen Fällen kann an der Stelle, auf die verwiesen werden soll, das Element anchor mit gesetztem Attribut id eingefügt werden. anchor kann selber keinen weiteren Inhalt aufnehmen. Querverweise und das Element <sgmltag>anchor</sgmltag> Dieser Absatz enthält ein Ziel für Querverweise, was jedoch keine Auswirkung auf dessen Darstellung hat.]]> Zum Anlegen des eigentlichen Querverweises selbst kann eines der beiden Elemente xref oder link genutzt werden. Beide besitzen das Attribut linkend, dem der id-Wert des Verweiszieles zugewiesen wird. Ob sich das Ziel vor oder nach dem Verweis befindet, spielt keine Rolle. xref und link unterscheiden sich jedoch hinsichtlich der Art und Weise, auf die der Text erzeugt wird, auf dem der Querverweis liegt. Kommt xref zum Einsatz, hat der Autor keine Kontrolle darüber – der Text wird automatisch für ihn erzeugt. Einsatz von <sgmltag>xref</sgmltag> Für dieses Beispiel wird davon ausgegangen, dass sich folgendes Textfragment irgendwo innerhalb eines Dokumentes auftaucht, dass das vorherige id-Beispiel enthält. Weitere Informationen gibt es im . Genauere Informationen können im gefunden werden.]]> Der Verweistext wird automatisch von den Stylesheets erzeugt und so hervorgehoben, dass ersichtlich ist, dass es sich bei dem Text um einen Verweis handelt.
Weitere Informationen können in der Einführung gefunden werden. Genauere Informationen können im Unterkapitel 1 gefunden werden.
Der Text, auf dem der HTML-Link für den Querverweis liegt, wurde von den Kapitelüberschriften übernommen. Das bedeutet, dass es nicht möglich ist, mit der Hilfe von xref einen Querverweis zu einer mit anchor gekennzeichneten Stelle anzulegen. Da anchor keinen Inhalt aufnehmen kann, können die Stylesheets nicht automatisch einen Text für den Verweis erzeugen. Möchte man selber den für den Verweis benutzten Text bestimmen können, sollte das Element link verwendet werden. Im Gegensatz zu xref kann link Inhalt aufnehmen, der dann für den Verweis verwendet wird. <sgmltag>link</sgmltag> beutzen Für dieses Beispiel wird davon ausgegangen, dass es sich in dem Dokument befindet, das auch das id-Beispiel enthält. Weitere Informationen können im ersten Kapitel gefunden werden. Genauere Informationen können in diesem Kapitel gefunden werden.]]> Aus diesem SGML-Fragment würden die Stylesheets folgendes generieren (der hervorgehobene Text deutet den erzeugten Verweis an):
Weitere Informationen können im ersten Kapitel gefunden werden. Genauere Informationen können in diesem Kapitel gefunden werden.
Das letzte Beispiel ist schlecht. Es sollten niemals Wörter wie dieses oder hier als Linktext benutzt werden. Solche Wörter zwingen den Leser dazu, den Kontext des Verweises zu lesen, um zu verstehen, wohin der Verweis führt. Mit dem Element link kann auf mit anchor gekennzeichnete Stellen im Dokument verwiesen werden, da der Inhalt von link als Text für den Querverweise genutzt wird.
Verweise auf Dokumente im WWW Das Anlegen von Verweisen auf externe Dokumente ist wesentlich einfacher – solange die URL des zu referenzierenden Dokumentes bekannt ist. Um von einem bestimmten Textabschnitt auf das gewünschte externe Dokument zu verweisen, muss die jeweilige Stelle mit dem Element ulink ausgezeichnet werden. Mittels des Attributes url kann die Adresse des Zieldokumentes angegeben werden. Bei der Umformung des Quelldokumentes in die verschiedenen Ausgabeformate wird der sich zwischen Start- und Endtag befindliche Text für den Verweis übernommen, den der Leser aufrufen kann. Verweise mit <sgmltag>ulink</sgmltag> Natürlich ist es möglich, anstatt diesen Text weiterzulesen, sofort die FreeBSD-Homepage aufzurufen.]]> Darstellung: Natürlich ist es möglich, anstatt diesen Text weiterzulesen, sofort die FreeBSD-Homepage aufzurufen.
diff --git a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml index a63e6b42e9..73e5542b93 100644 --- a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml @@ -1,2771 +1,2922 @@ Chris Shumway Umgeschrieben von Uwe Pierau Übersetzt von Grundlagen des UNIX Betriebssystems Übersicht Das folgende Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden Material gilt auch für jedes andere &unix;-artige System. Falls Sie mit dem Material schon vertraut sind, können Sie dieses Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall aufmerksam lesen. Dieser Abschnitt behandelt die folgenden Themen: virtuelle Konsolen, Zugriffsrechte unter &unix; sowie Datei-Flags unter &os;, Zugriffskontrolllisten für Dateisysteme, die Verzeichnisstruktur von &os;, Organisation von Dateisystemen unter &os;, Ein- und Abhängen von Dateisystemen, Prozesse, Dämonen und Signale, Shells und die Login-Umgebung, Texteditoren, Geräte und Gerätedateien, Binärformate unter &os; und wie Sie in den Manualpages nach weiteren Informationen suchen können. Virtuelle Konsolen und Terminals virtuelle Konsole Terminals Sie können FreeBSD mit einem Terminal benutzen, der nur Text darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen Ihnen alle Möglichkeiten eines &unix; Betriebssystems zur Verfügung. Dieser Abschnitt beschreibt was Terminals und Konsolen sind und wie sie unter FreeBSD eingesetzt werden. Die Konsole Konsole Wenn Ihr FreeBSD-System ohne eine graphische Benutzeroberfläche startet, wird am Ende des Systemstarts, nachdem die Startskripten gelaufen sind, ein Anmeldeprompt ausgegeben. Die letzten Startmeldungen sollten ähnlich wie die Folgenden aussehen: Additional ABI support:. Local package initialization:. Additional TCP options:. Fri Sep 20 13:01:06 EEST 2002 FreeBSD/i386 (pc3.example.org) (ttyv0) login: Beachten Sie die letzten beiden Zeilen der Ausgabe, die vorletzte lautet: FreeBSD/i386 (pc3.example.org) (ttyv0) Diese Zeile enthält einige Informationen über das gerade gestartete System. Die Ausgabe stammt von der FreeBSD-Konsole einer Maschine mit einem Intel oder Intel-kompatiblen Prozessor der x86-Architektur Genau das ist mit i386 gemeint. Auch wenn Ihr System keine Intel 386 CPU besitzt, wird i386 ausgegeben. Es wird immer die Architektur und nicht der Typ des Prozessors ausgegeben. . Der Name des Systems (jedes &unix; System besitzt einen Namen) ist pc3.example.org und die Ausgabe stammt von der Systemkonsole, dem Terminal ttyv0. Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe eines Benutzernamens: login: Der Anmeldevorgang wird im nächsten Abschnitt erläutert. Der Anmeldevorgang FreeBSD ist ein Mehrbenutzersystem, das Multitasking unterstützt. Das heißt mehrere Benutzer können gleichzeitig viele Programme auf einem System laufen lassen. Jedes Mehrbenutzersystem muss die Benutzer voneinander unterscheiden können. Bei FreeBSD und allen anderen &unix;-artigen Betriebssystemen wird dies dadurch erreicht, dass sich die Benutzer anmelden müssen, bevor sie Programme laufen lassen können. Jeder Benutzer besitzt einen eindeutigen Namen (den Account) und ein dazugehörendes Passwort, die beide bei der Anmeldung abgefragt werden. Startskripten Nachdem FreeBSD gestartet ist und die Startskripten Startskripten sind Programme, die FreeBSD automatisch bei jedem Startvorgang ausführt. Der Zweck der Skripte besteht darin, das System zu konfigurieren und nützliche Dienste im Hintergrund zu starten. , gelaufen sind, erscheint eine Aufforderung zur Eingabe des Benutzernamens: login: Wenn Ihr Benutzername beispielsweise john ist, geben Sie jetzt john gefolgt von Enter ein. Sie sollten dann eine Aufforderung zur Eingabe des Passworts erhalten: login: john Password: Geben Sie jetzt das Passwort von john gefolgt von Enter ein. Das Passwort wird aus Sicherheitsgründen nicht auf dem Bildschirm angezeigt. Wenn Sie das richtige Passwort eingegeben haben, sind Sie am System angemeldet und können nun alle verfügbaren Kommandos absetzen. Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen (message of today) gefolgt von einer Eingabeaufforderung (dem Zeichen #, $ oder %) gesehen haben. Virtuelle Konsolen Da FreeBSD mehrere Programme gleichzeitig laufen lassen kann, ist eine einzige Konsole, an der Kommandos abgesetzt werden können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die mehrere Konsolen zur Verfügung stellen. Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie einstellen. Zwischen den einzelnen Konsolen können Sie mit speziellen Tastenkombinationen wechseln. Jede Konsole verfügt über einen eigenen Ausgabekanal und FreeBSD ordnet die Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn Sie zwischen den Konsolen wechseln. Zum Umschalten der Konsolen stellt FreeBSD spezielle Tastenkombinationen bereit Eine recht technische und genaue Beschreibung der FreeBSD-Konsole und der Tastatur-Treiber finden Sie in den Hilfeseiten &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; und &man.kbdcontrol.1;. Lesen Sie diese Seiten, wenn Sie an den Einzelheiten interessiert sind. . Benutzen Sie AltF1, AltF2 bis AltF8, um zwischen den verschiedenen Konsolen umzuschalten. Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole aus. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole gewechselt haben, laufen die dort abgesetzten Kommandos weiter. <filename>/etc/ttys</filename> In der Voreinstellung stehen unter FreeBSD acht virtuelle Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen oder verringern können. Die Anzahl und Art der Konsolen wird in /etc/ttys eingestellt. Jede Zeile in /etc/ttys, die nicht mit # anfängt, konfiguriert einen Terminal oder eine virtuelle Konsole. In der Voreinstellung werden in dieser Datei neun virtuelle Konsolen definiert, von denen acht aktiviert sind. Die Konsolen sind in den Zeilen, die mit ttyv beginnen, definiert: # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Die Hilfeseite &man.ttys.5; enthält eine ausführliche Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum Konfigurieren der virtuellen Konsolen benutzen können. Die Konsole im Single-User-Modus Eine eingehende Beschreibung des Single-User-Modus finden Sie in . Im Single-User-Modus steht Ihnen nur eine Konsole zur Verfügung. Die Definition dieser Konsole befindet sich ebenfalls in /etc/ttys. Suchen Sie nach einer Zeile, die mit console beginnt: # name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure In der Zeile, die mit console beginnt, können Sie secure durch insecure ersetzen. Wenn Sie danach in den Single-User-Modus booten, verlangt das System ebenfalls die Eingabe des root-Passworts. Setzen Sie insecure nicht leichtfertig ein. Wenn Sie das Passwort von root vergessen, wird es schwierig, in den Single-User-Modus zu gelangen, wenn Sie den FreeBSD-Boot-Prozess nicht genau verstehen. Den Videomodus der Konsole anpassen Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden Modus eingestellt werden, der von Ihrer Grafikkarte und Ihrem Monitor unterstützt wird (beispielsweise 1024x768 oder 1280x1024). Wollen Sie eine andere Einstellung verwenden, müssen Sie Ihren Kernel neu kompilieren, nachdem Sie die zwei folgenden Zeilen in Ihre Kernelkonfigurationsdatei aufgenommen haben: OPTIONS VESA options SC_PIXEL_MODE Nachdem Sie den Kernel mit diesen zwei Optionen neu kompiliert haben, bestimmen Sie die möglichen Videomodi mit dem Werkzeug &man.vidcontrol.1;. Um beispielsweise einer Liste aller unterstützten Modi zu erhalten, verwenden Sie den folgenden Befehl: &prompt.root; vidcontrol -i mode Als Ergebnis erhalten Sie eine Liste aller Videomodi, die von Ihrer Hardware unterstützt werden. Sie wählen einen neuen Modus aus, indem Sie den entsprechenden Wert (wiederum als Benutzer root) an &man.vidcontrol.1; übergeben: &prompt.root; vidcontrol MODE_279 Um diese Einstellung dauerhaft zu speichern, müssen Sie die folgende Zeile in die Datei /etc/rc.conf aufnehmen: allscreens_flags="MODE_279" Zugriffsrechte UNIX FreeBSD, das ein direkter Abkömmling von BSD &unix; ist, stützt sich auf mehrere Grundkonzepte von &unix; Systemen. Das erste und ausgeprägteste: FreeBSD ist ein Mehrbenutzer-Betriebssystem. Das System ermöglicht, dass mehrere Benutzer gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU-Zeit unter den Benutzern. Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus: Zugriffsrechte Dateizugriffsrechte Wert Zugriffsrechte Auflistung im Verzeichnis 0 Kein Lesen, Kein Schreiben, Kein Ausführen --- 1 Kein Lesen, Kein Schreiben, Ausführen --x 2 Kein Lesen, Schreiben, Kein Ausführen -w- 3 Kein Lesen, Schreiben, Ausführen -wx 4 Lesen, Kein Schreiben, Kein Ausführen r-- 5 Lesen, Kein Schreiben, Ausführen r-x 6 Lesen, Schreiben, Kein Ausführen rw- 7 Lesen, Schreiben, Ausführen rwx ls Verzeichnisse Sie können auf der Kommandozeile von &man.ls.1; angeben, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die Ausgabe von ls -l könnte wie folgt aussehen: &prompt.user; ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ... Die erste Spalte der Ausgabe enthält die Zugriffsrechte: -rw-r--r-- Das erste Zeichen von links ist ein Symbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein zeichenorientiertes Gerät, ein Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel zeigt - eine normale Datei an. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, dass das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert. Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware-Geräten? FreeBSD behandelt die meisten Hardware-Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /dev gespeichert. Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis zum Beispiel mit cd gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu. Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein. Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in &man.chmod.1;. Tom Rhodes Beigesteuert von Symbolische Zugriffsrechte Zugriffsrechte symbolische Die Zugriffsrechte lassen sich auch über Symbole anstelle von oktalen Werten festlegen. Symbolische Zugriffsrechte werden in der Reihenfolge Wer, Aktion und Berechtigung angegeben. Die folgenden Symbole stehen zur Auswahl: Option Symbol Bedeutung Wer u Benutzer (user) Wer g Gruppe (group) Wer o Andere (other) Wer a Alle Aktion + Berechtigungen hinzufügen Aktion - Berechtigungen entziehen Aktion = Berechtigungen explizit setzen Berechtigung r lesen (read) Berechtigung w schreiben (write) Berechtigung x ausführen (execute) Berechtigung t Sticky-Bit Berechtigung s Set-UID oder Set-GID Symbolische Zugriffsrechte werden wie die numerischen mit dem Kommando &man.chmod.1; vergeben. Wenn Sie beispielsweise allen anderen Benutzern den Zugriff auf die Datei FILE verbieten wollen, benutzen Sie den nachstehenden Befehl: &prompt.user; chmod go= FILE Wenn Sie mehr als eine Änderung der Rechte einer Datei vornehmen wollen, können Sie eine durch Kommata getrennte Liste der Rechte angeben. Das folgende Beispiel entzieht der Gruppe und der Welt (den anderen) die Schreibberechtigung auf die Datei FILE und fügt dann für alle Ausführungsrechte hinzu: &prompt.user; chmod go-w,a+x FILE Tom Rhodes Beigetragen von &os; Datei-Flags Zusätzlich zu den vorhin diskutierten Zugriffsrechten unterstützt &os; auch die sogenannten Datei-Flags. Diese erhöhen die Sicherheit Ihres Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt. Diese verbesserte Sicherheit führt dazu, dass manche Dateien nicht einmal von root gelöscht oder bearbeitet werden können. Datei-Flags können über &man.chflags.1; gesetzt oder gelöscht werden. Um beispielsweise die Datei file1 mit dem unlöschbar-Flag zu sichern, geben Sie folgenden Befehl ein: &prompt.root; chflags sunlink file1 Um dieses Flag wieder zu löschen, geben Sie den Befehl erneut ein. Allerdings setzen Sie ein no vor : &prompt.root; chflags nosunlink file1 Um die Flags dieser Datei anzuzeigen, verwenden Sie &man.ls.1; zusammen mit der Option : &prompt.root; ls -lo file1 Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden: -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 Viele Flags können nur von root gesetzt oder gelöscht werden. Andere wiederum können auch vom Eigentümer der Datei gesetzt werden. Weitere Informationen zu Datei-Flags finden sich in den Manualpages &man.chflags.1; und &man.chflags.2;. + + + + + + Tom + Rhodes + Beigetragen von + + + + + Die Berechtigungen setuid, setgid, und sticky + + Anders als die Berechtigungen, die bereits angesprochen wurden, + existieren drei weitere Einstellungen, über die alle + Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen + setuid, setgid und + sticky. + + Diese Einstellungen sind wichtig für manche &unix;-Operationen, + da sie Funktionalitäten zur Verfügung stellen, die + normalerweise nicht an gewöhnliche Anwender vergeben wird. + Um diese zu verstehen, muss der Unterschied zwischen der realen + und der effektiven Benutzer-ID erwähnt werden. + + Die reale Benutzer-ID ist die UID, welche den + Prozess besitzt oder gestartet hat. Die effektive + UID ist diejenige, als die der Prozess läuft. + Beispielsweise wird &man.passwd.1; mit der realen ID des Benutzers + ausgeführt, der sein Passwort ändert. Um jedoch die + Passwortdatenbank zu bearbeiten, wird es effektiv als + root-Benutzer ausgeführt. Das + ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne + einen Permission Denied-Fehler angezeigt zu + bekommen. + + + Die nosuid &man.mount.8;-Option wird dafür + sorgen, dass diese Anwendungen stillschweigend scheitern. Genauer + gesagt, sie werden nicht ausgeführt und der Anwender wird + darüber auch nicht informiert. Auf diese Option kann man sich + nicht vollständig verlassen, da ein + nosuid-Wrapper in der Lage wäre, dies zu + umgehen, wie in der &man.mount.8; Manualpage zu lesen ist. + + + Die setuid-Berechtigung kann durch das Voranstellen bei einer + Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im + folgenden Beispiel gezeigt wird: + + &prompt.root; chmod 4755 suidexample.sh + + Die Berechtigungen auf der + suidexample.sh-Datei + sollten jetzt wie folgt aussehen: + + -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh + + In dem Beispiel sollte auffallen, dass ein s + jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches + das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen + mit erhöhten Berechtigungen zu laufen, wie z.B. + passwd. + + Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals. + Starten Sie auf einem den passwd-Prozess als normaler + Benutzer. Während es auf die Passworteingabe wartet, + überprüfen Sie die Prozesstabelle und sehen Sie sich die + Informationen des passwd-Kommandos an. + + Im Terminal A: + + Changing local password for trhodes +Old Password: + + Im Terminal B: + + &prompt.root; ps aux | grep passwd + + trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd + root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd + + Wie oben erwähnt, wird passwd von einem + normalen Benutzer ausgeführt, benutzt aber die effektive + UID von root. + + Die setgid-Berechtigung führt die gleiche + Aktion wie die setuid-Berechtigung durch, allerdings + verändert sie die Gruppenberechtigungen. Wenn eine Anwendung + oder ein Werkzeug mit dieser Berechtigung ausgeführt wird, + erhält es die Berechtigungen basierend auf der Gruppe, welche die + Datei besitzt und nicht die des Benutzers, der den Prozess gestartet + hat. + + Um die setgid-Berechtigung auf einer Datei zu + setzen, geben Sie dem chmod-Befehl eine + führende Zwei (2) mit, wie im folgenden gezeigt: + + &prompt.root; chmod 2755 sgidexample.sh + + Die neue Einstellung kann wie zuvor betrachtet werden. Beachten Sie, + dass das s sich jetzt in dem Feld befindet, das + für die Berechtigungen der Gruppe bestimmt ist: + + -rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh + + + Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript + um eine ausführbare Datei handelt, wird es nicht mit einer + anderen EUID oder effektiven Benutzer-ID + ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf + &man.setuid.2;-Systemaufrufe erhalten. + + + Diese beiden ersten angesprochenen Spezialberechtigungen (die + setuid und setgid + Berechtigungs-Bits) können die Systemsicherheit verringern, da + sie erhöhte Rechte ermöglichen. Es gibt noch ein drittes + Berechtigungs-Bit, das die Sicherheit eines Systems erhöhen kann: + das sticky bit. + + Das sticky bit erlaubt, wenn es auf ein + Verzeichnis angewendet wird, nur dem Besitzer der Datei diese Dateien + auch zu löschen. Dieses Recht ist nützlich, um die + Löschung von Dateien in öffentlichen Verzeichnissen durch + Benutzer, denen diese Dateien nicht gehören, zu verhindern, wie + z.B. in /tmp. Um diese Berechtigung anzuwenden, + stellen Sie der Berechtigung eine Eins (1) voran, beispielsweise + so: + + &prompt.root; chmod 1777 /tmp + + Den Effekt können Sie sich ansehen, indem Sie + das Kommando ls ausführen: + + &prompt.root; ls -al / | grep tmp + + drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp + + Das sticky bit kann anhand des + t ganz am Ende der Berechtigungen abgelesen + werden. + Verzeichnis-Strukturen Verzeichnis Hierarchien Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Konzept, das Sie verstehen sollten, ist das Root-Verzeichnis /. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das System in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte für Dateisysteme, die beim Wechsel in den Multiuser-Modus eingehängt werden. Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses) eingehängt werden können. Dieser Vorgang wird in ausführlich beschrieben. Standard-Mountpunkte sind /usr, /var, /tmp, /mnt sowie /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript &man.rc.8; gemountet, wenn die zugehörigen Einträge nicht mit der Option versehen sind. Weitere Informationen zu diesem Thema finden Sie im . Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in &man.hier.7;. Als Beispiel sei eine kurze Übersicht über die am häufigsten verwendeten Verzeichnisse gegeben: Verzeichnis Beschreibung / Wurzelverzeichnis des Dateisystems. /bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb. /boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden. /boot/defaults/ Vorgaben für die Boot-Konfiguration, siehe &man.loader.conf.5;. /dev/ Gerätedateien, siehe &man.intro.4;. /etc/ Konfigurationsdateien und Skripten des Systems. /etc/defaults/ Vorgaben für die System Konfigurationsdateien, siehe &man.rc.8;. /etc/mail/ Konfigurationsdateien von MTAs wie &man.sendmail.8;. /etc/namedb/ Konfigurationsdateien von named, siehe &man.named.8;. /etc/periodic/ Täglich, wöchentlich oder monatlich ablaufende Skripte, die von &man.cron.8; gestartet werden. Siehe &man.periodic.8;. /etc/ppp/ Konfigurationsdateien von ppp, siehe &man.ppp.8;. /mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird. /proc/ Prozess Dateisystem, siehe &man.procfs.5; und &man.mount.procfs.8;. /rescue/ Statisch gelinkte Programme zur Wiederherstellung des Systems, lesen Sie dazu auch &man.rescue.8;. /root/ Home Verzeichnis von root. /sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind. /tmp/ Temporäre Dateien, die für gewöhnlich bei einem Neustart des Systems verloren gehen. Häufig wird ein speicherbasiertes Dateisystem unter /tmp eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die tmpmfs-bezogenen Variablen von &man.rc.conf.5; verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in &man.mdmfs.8;. /usr/ Der Großteil der Benutzerprogramme und Anwendungen. /usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen. /usr/include/ Standard C include-Dateien. /usr/lib/ Bibliotheken. /usr/libdata/ Daten verschiedener Werkzeuge. /usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden. /usr/local/ Lokale Programme, Bibliotheken usw. Die Ports-Sammlung benutzt dieses Verzeichnis als Zielverzeichnis für zu installierende Anwendungen. Innerhalb von /usr/local sollte das von &man.hier.7; beschriebene Layout für /usr benutzt werden. Das man Verzeichnis wird direkt unter /usr/local anstelle unter /usr/local/share angelegt. Die Dokumentation der Ports findet sich in share/doc/port. /usr/obj/ Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht. /usr/ports Die FreeBSD-Ports-Sammlung (optional). /usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden. /usr/share/ Von der Architektur unabhängige Dateien. /usr/src/ Quelldateien von BSD und/oder lokalen Ergänzungen. /usr/X11R6/ Optionale X11R6-Programme und Bibliotheken. /var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien. Manchmal wird ein speicherbasiertes Dateisystem unter /var eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die varmfs-bezogenen Variablen von &man.rc.conf.5; verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in &man.mdmfs.8;. /var/log/ Verschiedene Logdateien des Systems. /var/mail/ Postfächer der Benutzer. /var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme. /var/tmp/ Temporäre Dateien. Dateien in diesem Verzeichnis bleiben in der Regel auch bei einem Neustart des Systems erhalten, es sei denn, bei /var handelt es sich um ein speicherbasiertes Dateisystem. /var/yp NIS maps. Festplatten, Slices und Partitionen &os; identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: readme.txt und README.TXT bezeichnen daher zwei verschiedene Dateien. &os; benutzt keine Dateiendungen wie .txt, um den Typ der Datei (ein Programm, ein Dokument oder andere Daten) zu bestimmen. Dateien werden in Verzeichnissen gespeichert. In einem Verzeichnis können sich keine oder hunderte Dateien befinden. Ein Verzeichnis kann auch andere Verzeichnisse enthalten und so eine Hierarchie von Verzeichnissen aufbauen, die Ihnen die Ablage von Daten erleichtert. In Dateinamen werden Verzeichnisse durch einen Schrägstrich (/, Slash) getrennt. Wenn das Verzeichnis foo ein Verzeichnis bar enthält, in dem sich die Datei readme.txt befindet, lautet der vollständige Name der Datei (oder der Pfad zur Datei) foo/bar/readme.txt. Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt ein Wurzelverzeichnis (Root-Directory), das weitere Verzeichnisse enthalten kann. Dieses Konzept kennen Sie vielleicht von anderen Betriebssystemen, aber es gibt einige Unterschiede: In &ms-dos; werden Datei- und Verzeichnisnamen mit dem Zeichen \ getrennt, &macos; benutzt dazu das Zeichen :. &os; kennt keine Laufwerksbuchstaben und in Pfaden werden keine Bezeichnungen für Laufwerke benutzt. Die Pfadangabe c:/foo/bar/readme.txt gibt es in &os; nicht. Stattdessen wird ein Dateisystem als Wurzeldateisystem (root file system) ausgewählt. Das Wurzelverzeichnis dieses Dateisystems wird / genannt. Jedes andere Dateisystem wird unter dem Wurzeldateisystem eingehangen (mount). Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf derselben Platte zu liegen. Betrachten wir drei Dateisysteme A, B und C. Jedes Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse enthält: A1, A2, B1, B2, C1 und C2. Das Wurzeldateisystem soll A sein. Das Kommando ls zeigt darin die beiden Verzeichnisse A1 und A2 an. Der Verzeichnisbaum sieht wie folgt aus: / | +--- A1 | `--- A2 Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems eingehangen. Wir hängen nun das Dateisystem B in das Verzeichnis A1 ein. Das Wurzelverzeichnis von B ersetzt nun das Verzeichnis A1 und die Verzeichnisse des Dateisystems B werden sichtbar: / | +--- A1 | | | +--- B1 | | | `--- B2 | `--- A2 Jede Datei in den Verzeichnissen B1 oder B2 kann über den Pfad /A1/B1 oder /A1/B2 erreicht werden. Dateien aus dem Verzeichnis /A1 sind jetzt verborgen. Wenn das Dateisystem B wieder abgehangen wird (umount), erscheinen die verborgenen Dateien wieder. Wenn das Dateisystem B unter dem Verzeichnis A2 eingehangen würde, sähe der Verzeichnisbaum so aus: / | +--- A1 | `--- A2 | +--- B1 | `--- B2 Die Dateien des Dateisystems B wären unter den Pfaden /A2/B1 und /A2/B2 erreichbar. Dateisysteme können übereinander eingehangen werden. Der folgende Baum entsteht, wenn im letzten Beispiel das Dateisystem C in das Verzeichnis B1 des Dateisystems B eingehangen wird: / | +--- A1 | `--- A2 | +--- B1 | | | +--- C1 | | | `--- C2 | `--- B2 C könnte auch im Verzeichnis A1 eingehangen werden: / | +--- A1 | | | +--- C1 | | | `--- C2 | `--- A2 | +--- B1 | `--- B2 Der &ms-dos;-Befehl join kann Ähnliches bewirken. Normalerweise müssen Sie sich nicht mit Dateisystemen beschäftigen. Während der Installation werden die Dateisysteme und die Stellen, in der sie eingehangen werden, festgelegt. Dateisysteme müssen Sie erst wieder anlegen, wenn Sie eine neue Platte hinzufügen. Sie können sogar mit nur einem großen Dateisystem auskommen. Dies hat mehrere Nachteile und einen Vorteil. Vorteile mehrerer Dateisysteme Die Dateisysteme können mit unterschiedlichen Optionen (mount options) eingehangen werden. Bei sorgfältiger Planung können Sie beispielsweise das Wurzeldateisystem nur lesbar einhängen. Damit schützen Sie sich vor dem unabsichtlichen Löschen oder Editieren kritischer Dateien. Von Benutzern beschreibbare Dateisysteme wie /home können Sie mit der Option nosuid einhängen, wenn sie von anderen Dateisystemen getrennt sind. Die SUID- und GUID-Bits verlieren auf solchen Dateisystemen ihre Wirkung und die Sicherheit des Systems kann dadurch erhöht werden. Die Lage von Dateien im Dateisystem wird, abhängig vom Gebrauch des Dateisystems, automatisch von &os; optimiert. Ein Dateisystem mit vielen kleinen Dateien, die häufig geschrieben werden, wird anders behandelt als ein Dateisystem mit wenigen großen Dateien. Mit nur einem Dateisystem ist diese Optimierung unmöglich. In der Regel übersteht ein &os;-Dateisystem auch einen Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen Zeitpunkt das Dateisystem beschädigen. Wenn die Daten über mehrere Dateisysteme verteilt sind, lässt sich das System mit hoher Wahrscheinlichkeit noch starten. Dies erleichtert das Zurückspielen von Datensicherungen. Vorteil eines einzelnen Dateisystems Die Größe von Dateisystemen liegt fest. Es kann passieren, dass Sie eine Partition vergrößern müssen. Dies ist nicht leicht: Sie müssen die Daten sichern, das Dateisystem vergrößert anlegen und die gesicherten Daten zurückspielen. &os; kennt den Befehl &man.growfs.8;, mit dem man Dateisysteme im laufenden Betrieb vergrößern kann. Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen &ms-dos;-Partitionen gemeint). Jede Partition wird mit einem Buchstaben von a bis h bezeichnet und kann nur ein Dateisystem enthalten. Dateisysteme können daher über ihren Mount-Point, den Punkt an dem sie eingehangen sind, oder den Buchstaben der Partition, in der sie liegen, identifiziert werden. &os; benutzt einen Teil der Platte für den Swap-Bereich, der dem Rechner virtuellen Speicher zur Verfügung stellt. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann &os; nicht benutzte Daten in den Swap-Bereich auslagern. Die ausgelagerten Daten können später wieder in den Speicher geholt werden (dafür werden dann andere Daten ausgelagert). Für einige Partitionen gelten besondere Konventionen: Partition Konvention a Enthält normalerweise das Wurzeldateisystem b Enthält normalerweise den Swap-Bereich c Ist normalerweise genauso groß wie die Slice in der die Partition liegt. Werkzeuge, die auf der kompletten Slice arbeiten, wie ein Bad-Block-Scanner, können so die c-Partition benutzen. Für gewöhnlich legen Sie in dieser Partition kein Dateisystem an. d Früher hatte die d-Partition eine besondere Bedeutung. Heute ist dies nicht mehr der Fall und die Partition d kann wie jede andere Partition auch verwendet werden. Jede Partition, die ein Dateisystem enthält, wird in einer Slice angelegt. Slice ist der Begriff, den &os; für &ms-dos;-Partitionen verwendet. Slices werden von eins bis vier durchnummeriert. Slices Partitionen dangerously dedicated Die Slice-Nummern werden mit vorgestelltem s hinter den Gerätenamen gestellt: da0s1 ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer Festplatte gibt es höchstens vier Slices. In einer Slice des passenden Typs kann es weitere logische Slices geben. Diese erweiterten Slices werden ab fünf durchnummeriert: ad0s5 ist die erste erweiterte Slice auf einer IDE-Platte. Diese Geräte werden von Dateisystemen benutzt, die sich in einer kompletten Slice befinden müssen. Slices, dangerously dedicated-Festplatten und andere Platten enthalten Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der Buchstabe wird an den Gerätenamen gehangen: da0a ist die a-Partition des ersten da-Laufwerks. Dieses Laufwerk ist dangerously dedicated. ad1s3e ist die fünfte Partition in der dritten Slice der zweiten IDE-Platte. Schließlich wird noch jede Festplatte des Systems eindeutig bezeichnet. Der Name einer Festplatte beginnt mit einem Code, der den Typ der Platte bezeichnet. Es folgt eine Nummer, die angibt, um welche Festplatte es sich handelt. Anders als bei Slices werden Festplatten von Null beginnend durchnummeriert. Gängige Festplatten-Namen sind in zusammengestellt. Wenn Sie eine Partition angeben, erwartet &os;, dass Sie auch die Slice und die Platte angeben, in denen sich die Partition befindet. Wenn Sie eine Slice angeben, müssen Sie auch die Platte der Slice angeben. Setzen Sie den Namen aus dem Plattennamen gefolgt von einem s, der Slice-Nummer und dem Buchstaben der Partition zusammen. Einige Beispiele finden Sie in . Der Aufbau einer Festplatte wird in dargestellt. Um &os; zu installieren, müssen Sie zuerst Slices auf den Festplatten anlegen. Innerhalb der Slices, die Sie für &os; verwenden wollen, müssen Sie dann Partitionen anlegen. In den Partitionen wiederum werden die Dateisysteme (oder der Auslagerungsbereich) angelegt. Für Dateisysteme müssen Sie schließlich noch festlegen, wo diese eingehangen werden (Mount-Point). Laufwerk-Codes Code Bedeutung ad ATAPI (IDE) Festplatte da SCSI-Festplatte acd ATAPI (IDE) CD-ROM cd SCSI-CD-ROM fd Disketten-Laufwerk
Namen von Platten, Slices und Partitionen Name Bedeutung ad0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten IDE-Festplatte (ad0). da1s2e Die fünfte Partition (e) der zweiten Slice (s2) auf der zweiten SCSI-Festplatte (da1). Aufteilung einer Festplatte Das folgende Diagramm zeigt die Sicht von &os; auf die erste IDE-Festplatte eines Rechners. Die Platte soll 4 GB groß sein und zwei Slices (&ms-dos;-Partitionen) mit je 2 GB besitzen. Die erste Slice enthält ein &ms-dos;-Laufwerk (C:), die zweite Slice wird von &os; benutzt. Im Beispiel verwendet die &os;-Installationen drei Datenpartitionen und einen Auslagerungsbereich. Jede der drei Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die a-Partition. In der e-Partition befindet sich der /var-Verzeichnisbaum und in der f-Partition befindet sich der Verzeichnisbaum unterhalb von /usr. .-----------------. --. | | | | DOS / Windows | | : : > First slice, ad0s1 : : | | | | :=================: ==: --. | | | Partition a, mounted as / | | | > referred to as ad0s2a | | | | | :-----------------: ==: | | | | Partition b, used as swap | | | > referred to as ad0s2b | | | | | :-----------------: ==: | Partition c, no | | | Partition e, used as /var > file system, all | | > referred to as ad0s2e | of FreeBSD slice, | | | | ad0s2c :-----------------: ==: | | | | | : : | Partition f, used as /usr | : : > referred to as ad0s2f | : : | | | | | | | | --' | `-----------------' --'
Anhängen und Abhängen von Dateisystemen Ein Dateisystem wird am besten als ein Baum mit der Wurzel / veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local haben können. Root-Dateisystem Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft. Ein weiterer Grund bestimmte Verzeichnisbäume auf andere Dateisysteme zu legen, ist gegeben, wenn sich die Verzeichnisbäume auf gesonderten physikalischen oder virtuellen Platten, wie Network File System oder CD-ROM-Laufwerken, befinden. Die <filename>fstab</filename> Datei Dateisysteme fstab Während des Boot-Prozesses werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option versehen sind, automatisch angehangen. Die Zeilen in /etc/fstab haben das folgende Format: device /mount-point fstype options dumpfreq passno device Ein existierender Gerätename wie in beschrieben. mount-point Ein existierendes Verzeichnis, an das das Dateisystem angehangen wird. fstype Der Typ des Dateisystems, der an &man.mount.8; weitergegeben wird. FreeBSDs Standarddateisystem ist ufs. options Entweder für beschreibbare Dateisysteme oder für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in &man.mount.8;. dumpfreq Gibt die Anzahl der Tage an, nachdem das Dateisystem gesichert werden soll. Fehlt der Wert, wird 0 angenommen. passno Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf null zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von passno eins betragen. Allen anderen Dateisystemen sollten Werte größer eins zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird &man.fsck.8; versuchen, diese parallel zu überprüfen. Das <command>mount</command> Kommando Dateisysteme anhängen &man.mount.8; hängt schließlich Dateisysteme an. In der grundlegenden Form wird es wie folgt benutzt: &prompt.root; mount device mountpoint Viele Optionen werden in &man.mount.8; beschrieben, die am häufigsten verwendeten sind: Optionen von <command>mount</command> Hängt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind Dateisysteme, die mit noauto markiert sind, die mit der Option ausgeschlossen wurden und Dateisysteme, die schon angehangen sind. Führt alles bis auf den mount-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit . Damit wird angezeigt, was &man.mount.8; tatsächlich versuchen würde, um das Dateisystem anzuhängen. Erzwingt das Anhängen eines unsauberen Dateisystems oder erzwingt die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird. Hängt das Dateisystem schreibgeschützt ein. Das kann auch durch Angabe von als Argument ( vor FreeBSD 5.2) der Option erreicht werden. fstype Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn auch angegeben wurde. Die Voreinstellung für den Typ des Dateisystems ist ufs. Aktualisiert die Mountoptionen des Dateisystems. Geschwätzig sein. Hängt das Dateisystem beschreibbar an. erwartet eine durch Kommata separierte Liste von Optionen, unter anderem die folgenden: noexec Verbietet das Ausführen von binären Dateien auf dem Dateisystem. Dies ist eine nützliche Sicherheitsfunktion. nosuid SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist eine nützliche Sicherheitsfunktion. Das <command>umount</command> Kommando Dateisysteme abhängen &man.umount.8; akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder die Optionen oder . Jede Form akzeptiert , um das Abhängen zu erzwingen, und , um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit : Ihr Computer kann abstürzen oder es können Daten auf dem Dateisystem beschädigt werden, wenn Sie das Abhängen erzwingen. und werden benutzt um alle Dateisysteme, deren Typ durch modifiziert werden kann, abzuhängen. hängt das Rootdateisystem nicht ab. Prozesse Da FreeBSD ein Multitasking-Betriebssystem ist, sieht es so aus, als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, das zu irgendeiner Zeit läuft, wird Prozess genannt. Jedes Kommando startet mindestens einen Prozess. Einige Systemprozesse laufen ständig und stellen die Funktion des Systems sicher. Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die Prozess-ID oder PID genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Dabei finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein Prozess und jedes Kommando, das Sie starten, ist auch ein Prozess. Jeder Prozess, den Sie auf diese Weise starten, besitzt den Shell-Prozess als Elternprozess. Die Ausnahme hiervon ist ein spezieller Prozess, der &man.init.8; heißt. init ist immer der erste Prozess und hat somit die PID 1. init wird vom Kernel beim Booten von FreeBSD gestartet. Die Kommandos &man.ps.1; und &man.top.1; sind besonders nützlich, um sich die Prozesse auf einem System anzusehen. ps zeigt eine statische Liste der laufenden Prozesse und kann deren PID, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden und vieles mehr anzeigen. top zeigt alle laufenden Prozesse an und aktualisiert die Anzeige, so dass Sie Ihrem Computer bei der Arbeit zuschauen können. Normal zeigt Ihnen ps nur die laufenden Prozesse, die Ihnen gehören. Zum Beispiel: &prompt.user; ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish Wie Sie sehen, gibt &man.ps.1; mehrere Spalten aus. In der PID Spalte findet sich die vorher besprochene Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an, wenn die Grenze überschritten wird. Ist eine PID bereits vergeben, wird diese allerdings nicht erneut vergeben. Die Spalte TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt den Status des Programms an und kann für die Zwecke dieser Diskussion ebenso wie TT ignoriert werden. TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist – dies ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen ist, da die meisten Programme hauptsächlich auf bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND finden Sie schließlich die Kommandozeile, mit der das Programm gestartet wurde. &man.ps.1; besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. Mit werden Information über alle laufenden Prozesse und nicht nur Ihrer eigenen angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit angezeigt. zeigt auch Dämonen-Prozesse an, und veranlasst &man.ps.1; die komplette Kommandozeile für jeden Befehl anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird. Die Ausgabe von &man.top.1; sieht ähnlich aus: &prompt.user; top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ... Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die Systemauslastung (engl. load average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele Prozesse momentan laufen (im Beispiel 47), wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt. Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von &man.ps.1;. Wie im vorigen Beispiel können Sie die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando erkennen. &man.top.1; zeigt auch den Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt ist. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. &netscape; hat im gezeigten Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt es allerdings nur 9 MB. Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden aktualisiert. Der Zeitraum kann mit eingestellt werden. Dämonen, Signale und Stoppen von Prozessen Wenn Sie einen Editor starten, können Sie ihn leicht bedienen und Dateien laden. Sie können das, weil der Editor dafür Vorsorge getroffen hat und auf einem Terminal läuft. Manche Programme erwarten keine Eingaben von einem Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren sind ein weiteres Beispiel für diesen Typ von Anwendungen. Wir nennen diese Programme Dämonen. Dämonen stammen aus der griechischen Mythologie und waren weder gut noch böse. Sie waren kleine dienstbare Geister, die meistens nützliche Sachen für die Menschheit vollbrachten. Ähnlich wie heutzutage Web-Server und Mail-Server nützliche Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack. Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem d am Ende benannt. BIND steht beispielsweise für Berkeley Internet Name Domain, das tatsächlich laufende Programm heißt aber named. Der Apache Webserver wird httpd genannt, der Druckerspool-Dämon heißt lpd usw. Dies ist allerdings eine Konvention und keine unumstößliche Regel: Der Dämon der Anwendung sendmail heißt sendmail und nicht maild, wie Sie vielleicht gedacht hatten. Manchmal müssen Sie mit einem Dämon kommunizieren. Dazu verwenden Sie Signale. Sie können mit einem Dämonen oder jedem anderen laufenden Prozess kommunizieren, indem Sie diesem ein Signal schicken. Sie können verschiedene Signale verschicken – manche haben eine festgelegte Bedeutung, andere werden von der Anwendung interpretiert. Die Dokumentation zur fraglichen Anwendung wird erklären, wie die Anwendung Signale interpretiert. Sie können nur Signale zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben nicht die Berechtigung, Prozessen anderer Benutzer mit &man.kill.1; oder &man.kill.2; Signale zu schicken. Der Benutzer root darf jedem Prozess Signale schicken. In manchen Fällen wird FreeBSD Signale senden. Wenn eine Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht zugreifen soll, so sendet FreeBSD dem Prozess das Segmentation Violation Signal (SIGSEGV). Wenn eine Anwendung den &man.alarm.3; Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm Signal (SIGALRM) gesendet. Zwei Signale können benutzt werden, um Prozesse zu stoppen: SIGTERM und SIGKILL. Mit SIGTERM fordern Sie den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und merken, dass er sich beenden soll. Er hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er vor der Aufforderung sich zu beenden durchführte, abzuschließen. Er kann sogar SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf. SIGKILL kann von keinem Prozess ignoriert werden. Das Signal lässt sich mit Mich interessiert nicht, was du gerade machst, hör sofort auf damit! umschreiben. Wenn Sie einem Prozess SIGKILL schicken, dann wird FreeBSD diesen sofort beenden Das stimmt nicht ganz: Es gibt Fälle, in denen ein Prozess nicht unterbrochen werden kann. Wenn der Prozesss zum Beispiel eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser Rechner aus irgendwelchen Gründen nicht erreichbar ist (ausgeschaltet, oder ein Netzwerkfehler), dann ist der Prozess nicht zu unterbrechen. Wenn der Prozess den Lesezugriff nach einem Timeout von typischerweise zwei Minuten aufgibt, dann wir er beendet. . Andere Signale, die Sie vielleicht verschicken wollen, sind SIGHUP, SIGUSR1 und SIGUSR2. Diese Signale sind für allgemeine Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich auf diese Signale reagieren. Nehmen wir an, Sie haben die Konfiguration Ihres Webservers verändert und möchten dies dem Server mitteilen. Sie könnten den Server natürlich stoppen und httpd wieder starten. Die Folge wäre eine kurze Zeit, in der der Server nicht erreichbar ist. Die meisten Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines SIGHUP neu ein. Da es keinen Standard gibt, der vorschreibt, wie auf diese Signale zu reagieren ist, lesen Sie bitte die Dokumentation zu dem in Frage kommenden Dämon. Mit &man.kill.1; können Sie, wie unten gezeigt, Signale verschicken. Verschicken von Signalen Das folgende Beispiel zeigt, wie Sie &man.inetd.8; ein Signal schicken. Die Konfigurationsdatei von inetd ist /etc/inetd.conf. Diese Konfigurationsdatei liest inetd ein, wenn er ein SIGHUP empfängt. Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal schicken wollen. Benutzen Sie dazu &man.ps.1; und &man.grep.1;. Mit &man.grep.1; können Sie in einer Ausgabe nach einem String suchen. Da &man.inetd.8; unter dem Benutzer root läuft und Sie das Kommando als normaler Benutzer absetzen, müssen Sie &man.ps.1; mit aufrufen: &prompt.user; ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW Die Prozess-ID von &man.inetd.8; ist 198. In einigen Fällen werden Sie auch das grep inetd Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie &man.ps.1; die Liste der laufenden Prozesse untersucht. Senden Sie das Signal mit &man.kill.1;. Da &man.inetd.8; unter dem Benutzer root läuft, müssen Sie zuerst mit &man.su.1; root werden: &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 &man.kill.1; wird, wie andere Kommandos von &unix; Systemen auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, einem Prozess, der nicht Ihnen gehört, ein Signal zu senden, dann werden Sie die Meldung kill: PID: Operation not permitted sehen. Wenn Sie sich bei der Eingabe der PID vertippen, werden Sie das Signal dem falschen Prozess schicken, was schlecht sein kann. Wenn Sie Glück haben, existiert der Prozess nicht und Sie werden mit der Ausgabe kill: PID: No such process belohnt. Warum soll ich <command>/bin/kill</command> benutzen? Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Das kann nützlich sein, aber die unterschiedlichen Shells benutzen eine verschiedene Syntax, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill ... direkt aufzurufen. Andere Signale senden Sie auf die gleiche Weise, ersetzen Sie nur TERM oder KILL entsprechend. Es kann gravierende Auswirkungen haben, wenn Sie zufällig Prozesse beenden. Insbesondere &man.init.8; mit der Prozess-ID ist ein Spezialfall. Mit /bin/kill -s KILL 1 können Sie Ihr System schnell herunterfahren. Überprüfen Sie die Argumente von &man.kill.1; immer zweimal bevor Sie Return drücken. Shells Shells Kommandozeile Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), einen Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und tcsh (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung. Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit &unix; Systemen neu, so könnten Sie die bash probieren. Der Punkt ist, dass jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien foobar und foo.bar. Die Datei foo.bar möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: rm fo[Tab]. [Tab]. Die Shell würde dann rm foo[BEEP].bar ausgeben. [BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, dass es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem Sie . eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen. Umgebungsvariablen Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. Die folgende Liste zeigt verbreitete Umgebungsvariablen und was sie bedeuten: Umgebungsvariablen Variable Beschreibung USER Name des angemeldeten Benutzers. PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. DISPLAY Der Name des X11-Bildschirms, auf dem Ausgaben erfolgen sollen. SHELL Die aktuelle Shell. TERM Name des Terminaltyps des Benutzers. Benutzt, um die Fähigkeiten des Terminals zu bestimmen. TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen. OSTYPE Typ des Betriebsystems, beispielsweise FreeBSD. MACHTYPE Die CPU Architektur auf dem das System läuft. EDITOR Vom Benutzer bevorzugter Text-Editor. PAGER Vom Benutzer bevorzugter Text-Betrachter. MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages. Shells Bourne Shell Das Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash benutzen Sie zum Setzen von Umgebungsvariablen export. Um beispielsweise die Variable EDITOR mit csh oder tcsh auf /usr/local/bin/emacs zu setzen, setzen Sie das folgende Kommando ab: &prompt.user; setenv EDITOR /usr/local/bin/emacs Unter Bourne-Shells: &prompt.user; export EDITOR="/usr/local/bin/emacs" Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt. Shells behandeln viele Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Diese Metazeichen können zum Vervollständigen von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert das Kommando echo * nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen, an echo weitergibt. Um zu verhindern, dass die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht. Ändern der Shell Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit Shell: entsprechend Ihren Wünschen. Sie können auch chsh mit der Option aufrufen, dann wird Ihre Shell gesetzt, ohne dass Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein: &prompt.user; chsh -s /usr/local/bin/bash Die von Ihnen gewünschte Shell muss in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports-Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen. Haben Sie beispielsweise die bash nach /usr/local/bin installiert, geben Sie Folgendes ein: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Danach können Sie chsh aufrufen. Text-Editoren Text Editoren Editoren Eine großer Teil der Konfiguration wird bei FreeBSD durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr viel mehr in der Ports-Sammlung. ee Text Editoren ee Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, wobei filename den Namen der zu editierenden Datei darstellt. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf ein. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ steht für die Ctrl (oder Strg) Taste, mit ^e ist also die Tastenkombination Ctrle gemeint. Um ee zu verlassen, drücken Sie Esc und wählen dann aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde. vi Text Editoren vi emacs Text Editoren emacs FreeBSD verfügt über leistungsfähigere Editoren wie vi als Teil des Basissystems, andere Editoren wie emacs oder vim sind Teil der Ports-Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit, jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Wenn Sie viele Textdateien editieren, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen von Editoren wie vim oder emacs ein. + + Viele Anwendungen, die Dateien verändern oder Texteingabe + erwarten, werden automatisch einen Texteditor öffnen. Um den + Standardeditor zu ändern, setzen Sie die Umgebungsvariable + EDITOR. Um mehr darüber zu erfahren, lesen Sie den + Abschnitt Shells. Geräte und Gerätedateien Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf gefundene Geräte. Sie können sich die Bootmeldungen später in /var/run/dmesg.boot ansehen. Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen werden, sind zum Beispiel acd0, das erste IDE CD-ROM oder kbd0, die Tastatur. Auf die meisten Geräte wird unter &unix; Systemen über spezielle Gerätedateien im /dev Verzeichnis zugegriffen. Anlegen von Gerätedateien Wenn sie ein neues Gerät zu Ihrem System hinzufügen, oder die Unterstützung für zusätzliche Geräte kompilieren, müssen ein oder mehrere Gerätedateien erstellt werden. <literal>DEVFS</literal> (Gerätedateisystem) Das Gerätedateisystem DEVFS ermöglicht durch den Namensraum des Dateisystems Zugriff auf den Namensraum der Geräte im Kernel. Damit müssen Gerätedateien nicht mehr extra angelegt werden, sondern werden von DEVFS verwaltet. Weitere Informationen finden Sie in &man.devfs.5;. Binärformate Um zu verstehen, warum &os; das Format &man.elf.5; benutzt, müssen Sie zunächst etwas über die drei gegenwärtig dominanten ausführbaren Formate für &unix; Systeme wissen: &man.a.out.5; Das älteste und klassische Objektformat von &unix; Systemen. Es benutzt einen kurzen, kompakten Header mit einer magischen Nummer am Anfang, die oft benutzt wird, um das Format zu charakterisieren (weitere Details finden Sie unter &man.a.out.5;). Es enthält drei geladene Segmente: .text, .data und .bss, sowie eine Symboltabelle und eine Stringtabelle. COFF Das Objektformat von SVR3. Der Header enthält nun eine Sectiontable. Man kann also mit mehr als nur den Sections .text, .data und .bss arbeiten. &man.elf.5; Der Nachfolger von COFF. Kennzeichnend sind mehrere Sections und mögliche 32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil: ELF wurde auch unter der Annahme entworfen, dass es nur eine ABI (Application Binary Interface) pro Systemarchitektur geben wird. Tatsächlich ist diese Annahme falsch – nicht einmal für die kommerzielle SYSV-Welt (in der es mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft sie zu. FreeBSD versucht, dieses Problem zu umgehen, indem ein Werkzeug bereitgestellt wird, um ausführbare Dateien im ELF-Format mit Informationen über die ABI zu versehen, zu der sie passen. Weitere Informationen finden Sie in der Manualpage &man.brandelf.1;. FreeBSD kommt aus dem klassischen Lager und verwendete traditionell das Format &man.a.out.5;, eine Technik, die bereits über viele BSD-Releases hinweg eingesetzt und geprüft worden ist. Obwohl es bereits seit einiger Zeit möglich war, auf einem FreeBSD-System auch Binaries (und Kernel) im ELF-Format zu erstellen und auszuführen, widersetzte FreeBSD sich anfangs dem Druck, auf ELF als Standardformat umzusteigen. Warum? Nun, als das Linux-Lager die schmerzhafte Umstellung auf ELF durchführte, ging es nicht so sehr darum, dem ausführbaren Format a.out zu entkommen, als dem unflexiblen, auf Sprungtabellen basierten Mechanismus für Shared-Libraries der die Konstruktion von Shared-Libraries für Hersteller und Entwickler gleichermaßen sehr kompliziert machte. Da die verfügbaren ELF-Werkzeuge eine Lösung für das Problem mit den Shared-Libraries anboten und ohnehin generell als ein Schritt vorwärts angesehen wurden, wurde der Aufwand für die Umstellung als notwendig akzeptiert und die Umstellung wurde durchgeführt. Unter FreeBSD ist der Mechanismus von Shared-Libraries enger an den Stil des Shared-Library-Mechanismus von Suns &sunos; angelehnt und von daher sehr einfach zu verwenden. Ja, aber warum gibt es so viele unterschiedliche Formate? In alter, grauer Vorzeit gab es simple Hardware. Diese simple Hardware unterstützte ein einfaches, kleines System. a.out war absolut passend für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11) darzustellen. Als &unix; von diesem simplen System portiert wurde, wurde auch das a.out-Format beibehalten, weil es für die frühen Portierungen auf Architekturen wie den Motorola 68000 und VAX ausreichte. Dann dachte sich ein schlauer Hardware-Ingenieur, dass, wenn er Software zwingen könnte, einige Tricks anzustellen, es ihm möglich wäre, ein paar Gatter im Design zu sparen, und seinen CPU-Kern schneller zu machen. Obgleich es dazu gebracht wurde, mit dieser neuen Art von Hardware (heute als RISC bekannt) zu arbeiten, war a.out für diese Hardware schlecht geeignet. Deshalb wurden viele neue Formate entwickelt, um eine bessere Leistung auf dieser Hardware zu erreichen, als mit dem begrenzten, simplen a.out-Format. Dinge wie COFF, ECOFF und einige andere obskure wurden erdacht und ihre Grenzen untersucht, bevor die Dinge sich in Richtung ELF entwickelten. Hinzu kam, dass die Größe von Programmen gewaltig wurde und Festplatten sowie physikalischer Speicher immer noch relativ klein waren. Also wurde das Konzept von Shared-Libraries geboren. Das VM-System wurde auch immer fortgeschrittener. Obwohl bei jedem dieser Fortschritte das a.out-Format benutzt worden ist, wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr gedehnt. Zusätzlich wollte man Dinge dynamisch zur Ausführungszeit laden, oder Teile ihres Programms nach der Initialisierung wegwerfen, um Hauptspeicher oder Swap-Speicher zu sparen. Programmiersprachen wurden immer fortschrittlicher und man wollte, dass Code automatisch vor der main-Funktion aufgerufen wird. Das a.out-Format wurde oft überarbeitet, um alle diese Dinge zu ermöglichen und sie funktionierten auch für einige Zeit. a.out konnte diese Probleme nicht ohne ein ständiges Ansteigen eines Overheads im Code und in der Komplexität handhaben. Obwohl ELF viele dieser Probleme löste, wäre es sehr aufwändig, ein System umzustellen, das im Grunde genommen funktionierte. Also musste ELF warten, bis es aufwändiger war, bei a.out zu bleiben, als zu ELF überzugehen. Im Laufe der Zeit haben sich die Erstellungswerkzeuge, von denen FreeBSD seine Erstellungswerkzeuge abgeleitet hat (speziell der Assembler und der Loader), in zwei parallele Zweige entwickelt. Im FreeBSD-Zweig wurden Shared-Libraries hinzugefügt und einige Fehler behoben. Das GNU-Team, das diese Programme ursprünglich geschrieben hat, hat sie umgeschrieben und eine simplere Unterstützung zur Erstellung von Cross-Compilern durch beliebiges Einschalten verschiedener Formate usw. hinzugefügt. Viele Leute wollten Cross-Compiler für FreeBSD erstellen, aber sie hatten kein Glück, denn FreeBSD's ältere Sourcen für as und ld waren hierzu nicht geeignet. Die neuen GNU-Werkzeuge (binutils) unterstützen Cross-Compilierung, ELF, Shared-Libraries, C++-Erweiterungen und mehr. Weiterhin geben viele Hersteller ELF-Binaries heraus und es ist gut, wenn FreeBSD sie ausführen kann. ELF ist ausdrucksfähiger als a.out und gestattet eine bessere Erweiterbarkeit des Basissystems. Die ELF-Werkzeuge werden besser gewartet und bieten Unterstützung von Cross-Compilierung, was für viele Leute wichtig ist. ELF mag etwas langsamer sein, als a.out, aber zu versuchen, das zu messen, könnte schwierig werden. Es gibt unzählige Details, in denen sich die beiden Formate unterscheiden, wie sie Pages abbilden, Initialisierungscode handhaben usw. Keins davon ist sehr wichtig, aber es sind Unterschiede. Irgendwann wird die Unterstützung für Programme im a.out-Format aus dem GENERIC-Kernel entfernt werden. Wenn es dann keinen oder kaum noch Bedarf für die Unterstützung dieses Formates gibt, werden die entsprechenden Routinen ganz entfernt werden. Weitere Informationen Manualpages Manualpages Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Manualpages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach: &prompt.user; man Kommando Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein: &prompt.user; man ls Die Online-Dokumentation ist in nummerierte Sektionen unterteilt: Benutzerkommandos. Systemaufrufe und Fehlernummern. Funktionen der C Bibliothek. Gerätetreiber. Dateiformate. Spiele und andere Unterhaltung. Verschiedene Informationen. Systemverwaltung und -Kommandos. Kernel Entwickler. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben: &prompt.user; man 1 chmod Dies wird Ihnen die Manualpage für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich &man.chmod.1; auf das Benutzerkommando chmod und mit &man.chmod.2; ist der Systemaufruf gemeint. Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können mit man nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter benutzen: &prompt.user; man -k mail Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort mail enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen. Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann rufen Sie doch einfach das folgende Kommando auf: &prompt.user; cd /usr/bin &prompt.user; man -f * Dasselbe erreichen Sie durch Eingabe von: &prompt.user; cd /usr/bin &prompt.user; whatis * GNU Info Dateien FreeBSD enthält viele Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen. Um das Kommando &man.info.1; zu benutzen, geben Sie einfach ein: &prompt.user; info Eine kurze Einführung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?.
diff --git a/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml b/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml index 62818b375d..921264646b 100644 --- a/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml @@ -1,662 +1,662 @@ Tom Rhodes Geschrieben von Benedict Reuschling Übersetzt von Daniel Seuffert Dateisystemunterstützung Übersicht File Systems File Systems Support File Systems Dateisysteme sind ein wesentlicher Bestandteil von Betriebssystemen. Sie erlauben es den Benutzern Dateien zu laden und zu speichern, ermöglichen den Zugriff auf die Daten und machen Festplatten überhaupt erst nützlich. Unterschiedliche Betriebssysteme besitzen normalerweise eine Gemeinsamkeit, nämlich deren mitgeliefertes Dateisystem. Bei &os; ist dieses Dateisystem bekannt unter dem Namen Fast File System FFS, das direkt auf dem Original-Unix™ Dateisystem, UFS genannt, basiert. Dieses ist das von &os; mitgelieferte Dateisystem, das auf Festplatten für den Dateizugriff verwendet wird. &os; unterstützt auch eine Vielzahl von anderen Dateisystemen, um auf Daten von anderen Betriebssystemen lokal zuzugreifen, wie z.B. Daten auf USB-Speichermedien, Flash-Speichern und Festplatten. Es gibt auch Unterstützung für fremde Dateisysteme. Dabei handelt es sich um Dateisysteme, die auf anderen Betriebssystemen entwickelt wurden, wie beispielsweise das &linux; Extended File System (EXT) und das Z-Dateisystem (ZFS) von &sun;. Es gibt verschiedene Stufen der Unterstützung in &os; für diese unterschiedlichen Dateisysteme. Manche benötigen ein geladenes Kernelmodul, andere die Installation bestimmter Werkzeuge. Dieses Kapitel dient dazu, den Benutzern von &os; dazu helfen, auf andere Dateisysteme zuzugreifen, beginnend mit &sun;s Z-Dateisystem (ZFS). Nachdem Sie dieses Kapitel gelesen haben, werden Sie die folgenden Dinge wissen: Den Unterschied zwischen eingebauten und unterstützten Dateisystemen. Welche Dateisysteme von &os; unterstützt werden. Wie man fremde Dateisysteme aktiviert, konfiguriert, darauf zugreift und diese verwendet. Bevor Sie dieses Kapitel lesen, sollten Sie: Grundlagen von &unix; und &os; verstehen (). Mit den Grundlagen der Konfiguration und dem Bauen des Kernels vertraut sein (). Problemlos Software von Drittherstellern in &os; installieren können (). sich ein wenig mit Festplatten, Speicher und Gerätenamen in &os; auskennen (). Die ZFS-Funktionen sind als experimentell zu betrachten. Manchen Optionen werden möglicherweise bestimmte Funktionalitäten fehlen, andere funktionieren eventuell gar nicht. Mit der Zeit werden diese Eigenschaften als für den Produktivbetrieb geeignet erachtet werden und dann wird diese Dokumentation entsprechend geändert, um diesem Zustand gerecht zu werden. Das Z-Dateisystem (ZFS) Das Z-Dateisystem ist eine neue von &sun; entwickelte Technologie, mit dem Konzept einer gepoolten Speichermethodik. Das bedeutet, dass Speicher nur verwendet wird, wenn dieser als Datenspeicher benutzt wird. ZFS wurde auch für maximale Datenintegrität entwickelt und unterstützt dabei mehrfache Kopien, Schnappschüsse und Prüfsummen für Daten. Ein neues Datenreplikationsmodell, bekannt als RAID-Z, wurde ebenfalls hinzugefügt. Das RAID-Z-Modell ist ähnlich zu RAID5, wurde aber mit dem Ziel entworfen, Datenverfälschung beim Schreiben zu verhindern. ZFS Einstellungen Das ZFS-Teilsystem benötigt viele Systemressourcen, weshalb gewisse Einstellungen notwendig sind, um maximale Effizienz während des täglichen Gebrauchs zu gewährleisten. Da es sich um eine experimentelle Funktion in &os; handelt, wird sich das in naher Zukunft ändern. Wie dem auch sei, zum gegenwärtigen Zeitpunkt wird die Anwendung der folgenden Schritte empfohlen. Hauptspeicher Der verfügbare Hauptspeicher im System sollte mindestens 1 Gigabyte betragen, jedoch werden 2 Gigabyte oder mehr empfohlen. In allen gezeigten Beispielen in diesem Abschnitt verwendet das System 1 Gigabyte Hauptspeicher mit mehreren anderen Einstellungen. Manche Nutzer hatten Erfolg bei der Verwendung von weniger als 1 GB Hauptspeicher, aber mit dieser begrenzten Menge an RAM ist es sehr wahrscheinlich, dass &os; eine Panic wegen erschöpftem Hauptspeicher erleiden wird, wenn es hohen Belastungen ausgesetzt ist. Kernelkonfiguration Es wird vorgeschlagen, nicht benötigte Treiber und Optionen aus der Kernelkonfigurationsdatei zu entfernen. Da die meisten Geräte als Module verfügbar sind, können diese einfach mittels der Datei /boot/loader.conf geladen werden. Nutzer der &i386;-Architektur sollten die folgende Option in ihrer Kernelkonfigurationsdatei hinzufügen, den Kernel neu erstellen und anschliessend das System neustarten: options KVA_PAGES=512 Diese Option wird den Adressraum des Kernels vergrössern, was es ermöglicht, die Einstellung vm.kvm_size über die momentan verhängte Grenze von 1 GB (2 GB für PAE) zu erhöhen. Um den passenden Wert dieser Option zu ermitteln, teilen Sie den gewünschten Adressraum in Megabyte durch vier. In diesem Fall beträgt er 512 für 2 GB. Einstellungen des Loaders Der kmem-Addressraum sollte auf allen &os;-Architekturen erhöht werden. Die folgende Option, die dem Testsystem mit einem Gigabyte Hauptspeicher der Datei /boot/loader.conf hinzugefügt und welches anschliessend neu gestartet wurde, war erfolgreich: vm.kmem_size="330M" vm.kmem_size_max="330M" vfs.zfs.arc_max="40M" vfs.zfs.vdev.cache.size="5M" Eine detailliertere Liste von Vorschlägen zu ZFS-verwandten Einstellungen finden Sie unter . Verwenden von <acronym>ZFS</acronym> Es existiert ein Startmechanismus, der es &os; erlaubt, ZFS als Pool während des Systemstarts zu initialisieren. Um das zu tun, geben Sie die folgenden Befehle ein: &prompt.root; echo 'zfs_enable="YES"' >> /etc/rc.conf &prompt.root; /etc/rc.d/zfs start Für den Rest dieses Dokuments wird angenommen, dass zwei SCSI-Platten im System verfügbar sind und dass deren Gerätenamen da0 und da1 lauten. Benutzer von IDE-Hardware können ad-Geräte an Stelle von SCSI-Hardware einsetzen. Pool mit nur einer Platte Um ein ZFS auf einer einzelnen Festplatte zu erstellen, benutzen Sie das zpool-Kommando: &prompt.root; zpool create example /dev/da0 Um den neuen Pool anzusehen, überprüfen Sie die Ausgabe von df: &prompt.root; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235230 1628718 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032846 48737598 2% /usr example 17547136 0 17547136 0% /example Diese Ausgabe zeigt deutlich, dass der example-Pool nicht nur erstellt, sondern auch gemountet wurde. Er ist genau wie andere Dateisysteme verfügbar, Dateien können darin erstellt und von den Benutzern aufgelistet werden, wie im folgenden Beispiel gezeigt wird: &prompt.root cd /example &prompt.root; ls &prompt.root; touch testfile &prompt.root; ls -al total 4 drwxr-xr-x 2 root wheel 3 Aug 29 23:15 . drwxr-xr-x 21 root wheel 512 Aug 29 23:12 .. -rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile Leider verwendet dieser Pool keine der Vorteile der ZFS-Eigenschaften. Erstellen Sie ein Dateisystem auf diesem Pool und aktivieren Sie die Komprimierung darauf: &prompt.root; zfs create example/compressed &prompt.root; zfs set compression=gzip example/compressed Jetzt ist example/compressed ein von ZFS komprimiertes Dateisystem. Versuchen Sie, ein paar grosse Dateien in das Verzeichnis /example/compressed zu kopieren. Die Komprimierung kann jetzt deaktiviert werden mittels: &prompt.root; zfs set compression=off example/compressed Um das Dateisystem aus dem Verzeichnisbaum abzuhängen, geben Sie den folgenden Befehl ein und vergewissern Sie sich über df vom Erfolg dieser Aktion: &prompt.root; zfs umount example/compressed &prompt.root; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235232 1628716 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example Mounten Sie das Dateisystem erneut, um es wieder verfügbar zu machen und bestätigen Sie mit df: &prompt.root; zfs mount example/compressed &prompt.root; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235234 1628714 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example example/compressed 17547008 0 17547008 0% /example/compressed Der Pool und das Dateisystem können genausogut über die Ausgabe von mount überwacht werden: &prompt.root; mount /dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1d on /usr (ufs, local, soft-updates) example on /example (zfs, local) example/data on /example/data (zfs, local) example/compressed on /example/compressed (zfs, local) Wie zu beobachten ist, können ZFS-Dateisysteme nach deren Erstellung genauso wie normale Dateisysteme verwendet werden, jedoch sind auch noch viele andere Eigenschaften verfügbar. Im folgenden Beispiel wird ein neues Dateisystem, data, erstellt. Wichtige Dateien sollen hier gespeichert werden, weshalb das Dateisystem angewiesen wird, jeweils zwei Kopien jedes Datenblocks zu unterhalten: &prompt.root; zfs create example/data &prompt.root; zfs set copies=2 example/data Es ist nun möglich, den Speicherplatzverbrauch der Daten mittels df erneut zu betrachten: &prompt.root; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235234 1628714 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example example/compressed 17547008 0 17547008 0% /example/compressed example/data 17547008 0 17547008 0% /example/data Beachten Sie, dass jedem Dateisystem des Pools die gleiche Menge an Speicher zur Verfügung steht. Das ist der Grund für die Verwendung von df in all diesen Beispielen, da es zeigt, dass das Dateisystem nur den Speicher belegt, den es auch benötigt und alles wird von dem gleichen Pool abgezogen. ZFS macht Konzepte wie Volumen und Partitionen überflüssig und erlaubt mehrere Dateisysteme auf demselben Pool. Zerstören Sie die Datensysteme und anschliessend den Pool, da sie nicht länger gebraucht werden: &prompt.root; zfs destroy example/compressed &prompt.root; zfs destroy example/data &prompt.root; zpool destroy example Festplatten werden mit der Zeit schlechter und fallen aus, eine unvermeidliche Tatsache. Wenn diese Platte ausfällt, sind die Daten verloren. Eine Möglichkeit, diesen Datenverlust beim Plattenausfall zu vermeiden, ist die Verwendung von RAID. ZFS unterstützt diese Eigenschaft im Entwurf seiner Pools und wird im nächsten Abschnitt behandelt. <acronym>ZFS</acronym> RAID-Z Wie zuvor bereits erwähnt, wird in diesem Abschnitt angenommen, dass zwei SCSI-Geräte vorhanden sind (da0 und da1). Um einen RAID-Z Pool zu erstellen, geben Sie das folgende Kommando ein: &prompt.root; zpool create storage raidz da0 da1 Der storage-zPool sollte jetzt erstellt worden sein. Sie können das überprüfen, indem Sie die Befehle &man.mount.8; und &man.df.1; wie zuvor verwenden. Weitere Plattenspeicher können an das Ende der oben stehenden Liste hinzugefügt werden. Erstellen Sie ein neues Dateisystem in dem Pool, home genannt, in dem später Dateien von Benutzern platziert werden: &prompt.root; zfs create storage/home Nun kann die Komprimierung aktiviert und zusätzliche Kopien der Benutzerverzeichnisse und der darin enthaltenen Dateien angelegt werden. Dies geschieht über die gleichen Befehle wie bereits zuvor: &prompt.root; zfs set copies=2 storage/home &prompt.root; zfs set compression=gzip storage/home Um dieses Verzeichnis als neues Benutzerverzeichnis zu verwenden, kopieren Sie die Nutzerdaten dort hin und erstellen Sie die entsprechenden Symlinks: &prompt.root; cp -rp /home/* /storage/home &prompt.root; rm -rf /home /usr/home &prompt.root; ln -s /storage/home /home &prompt.root; ln -s /storage/home /usr/home Anwender sollten jetzt ihre Daten in dem neu angelegten /storage/home Dateisystem auffinden. Prüfen Sie das, indem Sie einen neuen Benutzer hinzufügen und sich als dieser Benutzer am System anmelden. Versuchen Sie, einen Schnappschuss anzulegen, der später wieder zurückgerollt werden kann: &prompt.root; zfs snapshot storage/home@08-30-08 Beachten Sie, dass die Schnappschuss-Option nur auf echte Dateisysteme, jedoch nicht auf Verzeichnisse oder eine Datei angewendet werden kann. Das @-Zeichen dient als Begrenzer zwischen dem Dateisystem- oder Volumenamen. Wenn ein Benutzerverzeichnis zerstört wird, können Sie es über den folgenden Befehl wieder herstellen: &prompt.root; zfs rollback storage/home@08-30-08 Um eine Liste von allen verfügbaren Schnappschüssen zu erhalten, starten Sie das ls-Kommando in Verzeichnis .zfs/snapshot des entsprechenden Dateisystems. Beispielsweise können Sie den vorhin angelegten Schnappschuss mit dem folgenden Befehl auflisten: &prompt.root; ls /storage/home/.zfs/snapshot Es ist möglich ein Skript zu schreiben, dass monatliche Schnappschüsse der Nutzerdaten anlegt. Allerdings werden die Schnappschüsse mit der Zeit eine grosse Menge an Speicherplatz einnehmen. Den vorherigen Schnappschuss können Sie über das folgende Kommando löschen: &prompt.root; zfs destroy storage/home@08-30-08 Nach all diesen Tests gibt es keinen Grund, das Verzeichnis /storage/home noch länger in seinem momentanen Zustand zu belassen. Ernennen Sie es zum echten /home-Dateisystem: &prompt.root; zfs set mountpoint=/home storage/home Die Eingabe der Befehle df und mount zeigt, dass das System das Dateisystem nun als das echte /home behandelt: &prompt.root; mount /dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1d on /usr (ufs, local, soft-updates) storage on /storage (zfs, local) storage/home on /home (zfs, local) &prompt.root; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235240 1628708 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032826 48737618 2% /usr storage 17547008 0 17547008 0% /storage storage/home 17547008 0 17547008 0% /home Damit ist die RAID-Z-Konfiguration abgeschlossen. Um über den Status des Dateisystems mittels des nächtlichen &man.periodic.8;-Skripts auf dem Laufenden gehalten zu werden, geben Sie das folgende Kommando ein: &prompt.root; echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf Wiederherstellung von <acronym>RAID</acronym>-Z Jedes Software-RAID besitzt Verfahren, um dessen Zustand zu überwachen. ZFS ist da keine Ausnahme. Der Status von RAID-Z Geräten kann mittels des folgenden Kommandos betrachtet werden: &prompt.root; zpool status -x Wenn alle Pools gesund sind und alles normal ist, wird die folgende Nachricht zurückgegeben: all pools are healthy Wenn ein Problem existiert (möglicherweise ist eine Platte ausgefallen), wird der Zustand des Pools ähnlich dem Folgenden ausgegeben: pool: storage state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: none requested config: NAME STATE READ WRITE CKSUM storage DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 da0 ONLINE 0 0 0 da1 OFFLINE 0 0 0 errors: No known data errors Das bedeutet, dass das Gerät vom Systemadministrator abgeschaltet wurde. In diesem Fall trifft das zu. Um eine Platte abzuschalten, wurde das folgende Kommando eingegeben: &prompt.root; zpool offline storage da1 Es ist jetzt möglich, da1 zu ersetzen, nachdem das System ausgeschaltet wurde. Wenn das System wieder läuft, kann der folgende Befehl benutzt werden, um die Platte zu ersetzen: &prompt.root; zpool replace storage da1 Von da an kann der Status erneut überprüft werden, jedoch dieses Mal ohne die Option , um die Zustandsinformation zu bekommen: &prompt.root; zpool status storage pool: storage state: ONLINE scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008 config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 errors: No known data errors Wie in diesem Beispiel gezeigt, scheint alles wieder normal zu sein. Datenüberprüfung Wie bereits erwähnt, verwendet ZFS Prüfsummen, um die Integrität der gespeicherten Daten zu verifizieren. Die Prüfsummen werden automatisch beim Erstellen des Dateisystem aktiviert und können über den folgenden Befehl deaktiviert werden: &prompt.root; zfs set checksum=off storage/home Das ist jedoch kein schlauer Einfall, da die Prüfsummen nur ganz wenig Speicherplatz einnehmen und viel nützlicher sind, wenn Sie aktiviert bleiben. Es scheint auch kein nennenswerter Ressourcenverbrauch mit deren Aktivierung verbunden zu sein. Wenn die Prüfsummen aktiv sind, kann ZFS die Datenintegrität über den Vergleich der Prüfsummen gewährleisten. Dieser Prozess wird als reinigen bezeichnet. Um die Datenintegrität des storage-Pools zu überprüfen, geben Sie den folgenden Befehl ein: &prompt.root; zpool scrub storage Dieser Prozess kann einige Zeit in Anspruch nehmen, abhängig davon, wieviele Daten gespeichert sind. Es handelt sich dabei auch um eine I/O-intensive Aktion, weshalb auch jeweils nur eine dieser Operationen durchgeführt werden darf. Nachdem die Reinigung abgeschlossen ist, wird der Status aktualisiert und kann über eine Statusabfrage eingesehen werden: &prompt.root; zpool status storage pool: storage state: ONLINE scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008 config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 errors: No known data errors Die Zeit des Abschlusses der Aktion kann in diesem Beispiel direkt abgelesen werden. Die Prüfsummen helfen dabei, sicherzustellen, dass die Datenintegrität über einen langen Zeitraum hinaus erhalten bleibt. Es gibt viele weitere Optionen für das Z-Dateisystem, lesen Sie dazu die Manualpage &man.zfs.8; und &man.zpool.8;. diff --git a/de_DE.ISO8859-1/books/handbook/ppp-and-slip/chapter.sgml b/de_DE.ISO8859-1/books/handbook/ppp-and-slip/chapter.sgml index 6585be4728..593e4da97f 100644 --- a/de_DE.ISO8859-1/books/handbook/ppp-and-slip/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/ppp-and-slip/chapter.sgml @@ -1,3463 +1,3373 @@ Jim Mock Restrukturiert, neu organisiert und aktualisiert von Thomas Schwarzkopf Übersetzt von PPP und SLIP Übersicht PPP SLIP Unter FreeBSD stehen verschiedene Möglichkeiten zur Verfügung, um Computer miteinander zu verbinden. Der Aufbau einer Netzwerk- oder Internetverbindung mit Hilfe eines Einwahlmodems – für den eigenen oder für andere Rechner – erfordert den Einsatz von PPP oder SLIP. Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen: Wie Sie User-PPP einrichten. Wie Sie Kernel-PPP einrichten. Was zu tun ist, um PPPoE (PPP over Ethernet) einzurichten. Wie Sie PPPoA (PPP over ATM) einrichten. Wie Sie einen SLIP-Client und -Server einrichten und konfigurieren PPP User-PPP PPP Kernel-PPP PPP over Ethernet Bevor Sie dieses Kapitel lesen, sollten Sie: mit den grundlegenden Begriffen der Netzwerktechnik vertraut sein. die Grundlagen und den Zweck einer Einwahlverbindung sowie PPP und/oder SLIP kennen. Sie fragen sich vielleicht, worin denn der Hauptunterschied zwischen User-PPP und Kernel-PPP liegt. Die Antwort ist einfach: User-PPP verarbeitet die ein- und ausgehenden Daten im Userland, statt im Kernel. Dies ist zwar aufwändig, im Hinblick auf die Daten, die dadurch zwischen Kernel und Userland hin und her kopiert werden müssen, doch es ermöglicht auch eine PPP-Implementierung mit weitaus mehr Funktionen. User-PPP verwendet das Gerät tun, um mit anderen Rechnern zu kommunizieren, während Kernel-PPP hierfür das Gerät ppp benutzt. In diesem Kapitel wird durchgängig vom Programm ppp gesprochen, wenn damit User-PPP gemeint ist. Ausnahmen werden gemacht, wenn eine Unterscheidung gegenüber anderer PPP-Software, wie pppd, notwendig wird. Soweit nichts anderes angegeben ist, sollten alle Befehle, die in diesem Kapitel erklärt werden, als root ausgeführt werden. Tom Rhodes Aktualisiert und erweitert von Brian Somers Ursprünglich geschrieben von Nik Clayton Mit Beiträgen von Dirk Frömberg Peter Childs User-PPP User-PPP Voraussetzungen Dieses Dokument geht davon aus, dass Sie Folgendes zur Verfügung haben: ISP PPP Einen Account bei einem Internet Service Provider (ISP), zu dem Sie mit PPP eine Verbindung aufbauen können. Ein Modem oder ein anderes Gerät, das, richtig konfiguriert und mit Ihrem Rechner verbunden, Ihnen die Herstellung einer Verbindung zu Ihrem ISP erlaubt. Die Einwahlnummer(n) Ihres ISP. PAP CHAP UNIX Login Name Passwort Ihren Login-Namen und Ihr Passwort (entweder ein - reguläres Login/Passwort-Paar im UNIX-Stil oder + reguläres Login/Passwort-Paar im &unix;-Stil oder ein PAP bzw. CHAP Login/Passwort-Paar). Nameserver Die IP-Adresse von einem oder mehreren Nameservern. Üblicherweise werden Ihnen von Ihrem ISP zwei IP-Adressen für diesen Zweck zur Verfügung gestellt. Wenn Sie keine solche IP-Adresse von Ihrem Provider bekommen haben, können Sie das Kommando enable dns in der Datei ppp.conf verwenden, um ppp anzuweisen, den Nameserver für Sie einzutragen. Diese Funktion setzt allerdings voraus, dass Ihr ISP eine PPP-Implementierung verwendet, die das Aushandeln eines Nameservers unterstützt. Die folgenden Informationen werden Ihnen möglicherweise von Ihrem ISP zur Verfügung gestellt, sie sind aber nicht zwingend erforderlich: Die Gateway IP-Adresse Ihres ISP. Als Gateway wird der Computer bezeichnet, zu dem Sie eine Verbindung aufbauen. Die IP-Adresse dieses Rechners wird als default route eingetragen. Wenn Sie diese Information nicht zur Verfügung haben, kann PPP so konfiguriert werden, dass der PPP-Server Ihres ISP während des Verbindungsaufbaus eine gültige Adresse übermittelt. ppp bezieht sich mit HISADDR auf diese IP-Adresse. Die Netzmaske, die Sie verwenden sollten. Falls Ihnen Ihr ISP keine Netzmaske vorgegeben hat, können Sie 255.255.255.255 verwenden. feste IP-Adresse Wenn Ihnen Ihr ISP eine statische IP-Adresse zur Verfügung stellt, können Sie diese eintragen. Andernfalls lassen wir uns einfach von der Gegenstelle eine IP-Adresse zuweisen. Falls Ihnen die erforderlichen Informationen fehlen sollten, nehmen Sie bitte Kontakt mit Ihrem ISP auf. Die Beispieldateien, die in diesem Kapitel dargestellt werden, enthalten Zeilennummern. Die Nummerierung dient lediglich einer leichteren Orientierung und sollte von Ihnen nicht in Ihre Dateien übernommen werden. Richtiges Einrücken, durch Tabulatoren und Leerzeichen, ist ebenfalls wichtig. Automatische Konfiguration von <application>PPP</application> PPP Konfiguration Sowohl ppp als auch pppd (die PPP-Implementierung auf Kernelebene) verwenden die - Konfigurationsdateien im Verzeichnis /etc/ppp. - Beispiele für User-PPP sind in - /usr/share/examples/ppp/ zu finden. + Konfigurationsdateien im Verzeichnis /etc/ppp. + Beispiele für User-PPP sind in /usr/share/examples/ppp/ + zu finden. Die Konfiguration von ppp erfordert, je nach Ihren besonderen Bedingungen, die Bearbeitung einiger Dateien. Was Sie in diese Dateien eintragen, hängt unter anderem davon ab, ob Ihnen Ihr ISP eine statische IP-Adresse (Sie verwenden immer dieselbe IP-Adresse, die Ihnen einmal zugeteilt wurde) oder eine dynamische IP-Adresse (Ihre IP-Adresse ändert sich bei jeder Verbindung mit dem ISP) zugewiesen hat. PPP und statische IP-Adressen PPP mit fester IP-Adresse Sie müssen die Konfigurationsdatei /etc/ppp/ppp.conf bearbeiten. Sie sollte so aussehen, wie in dem unten angegebenen Beispiel. Zeilen die mit einem : enden, beginnen in der ersten Spalte (am Beginn der Zeile). Alle anderen Zeilen sollten wie dargestellt durch Leerzeichen oder Tabulatoren eingerückt werden. 1 default: 2 set log Phase Chat LCP IPCP CCP tun command 3 ident user-ppp VERSION (built COMPILATIONDATE) -4 set device /dev/cuaa0 +4 set device /dev/cuad0 5 set speed 115200 6 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ 7 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT" 8 set timeout 180 9 enable dns 10 11 provider: 12 set phone "(123) 456 7890" 13 set authname foo 14 set authkey bar 15 set login "TIMEOUT 10 \"\" \"\" gin:--gin: \\U word: \\P col: ppp" 16 set timeout 300 17 set ifaddr x.x.x.x y.y.y.y 255.255.255.255 0.0.0.0 18 add default HISADDR Zeile 1: Gibt den Standardeintrag an. Befehle dieses Eintrags werden automatisch ausgeführt, wenn ppp läuft. Zeile 2: Schaltet die Loggingparameter ein. Wenn die Verbindung zufriedenstellend funktioniert, können Sie diese Zeile verkürzen: set log phase tun Dies verhindert ein übermäßiges Anwachsen der Logdateien. Zeile 3: Gibt PPP an, wie es sich gegenüber der Gegenstelle identifizieren soll. PPP identifiziert sich gegenüber der Gegenstelle, wenn es Schwierigkeiten bei der Aushandlung und beim Aufbau der Verbindung gibt. Dabei werden Informationen bereitgestellt, die dem Administrator der Gegenstelle helfen können, die Ursache der Probleme zu finden. Zeile 4: Gibt das Device an, an dem das Modem angeschlossen ist. - COM1 entspricht - /dev/cuaa0 und - COM2 entspricht - /dev/cuaa1. + COM1 entspricht /dev/cuad0 und + COM2 entspricht /dev/cuad1. Zeile 5: Legt die Geschwindigkeit fest, mit der Sie die Verbindung betreiben möchten. Falls ein Wert von 115200 nicht funktioniert (was aber bei jedem einigermaßen neuen Modem funktionieren sollte), versuchen Sie es stattdessen mit 38400. Zeilen 6 & 7: PPP User-PPP Die Zeichenfolge für die Einwahl. User-PPP verwendet eine expect-send Syntax, ähnlich dem &man.chat.8;-Programm. Weitere Informationen zu den Eigenschaften dieser Sprache bietet die Manual-Seite. Beachten Sie, dass dieser Befehl aufgrund der besseren Lesbarkeit auf der nächsten Zeile weitergeht. Das kann für jeden Befehl in - ppp.conf gelten, wenn ``\'' - das letzte Zeichen in einer Zeile ist. + ppp.conf gelten, wenn + \ das letzte Zeichen in einer Zeile + ist. Zeile 8: Legt den Zeitrahmen fest, innerhalb dessen eine Reaktion erfolgen muss. Der Standardwert liegt bei 180 Sekunden, so dass diese Zeile lediglich einen kosmetischen Charakter hat. Zeile 9: Weist PPP an, bei der Gegenstelle eine Bestätigung der lokalen Resolvereinstellungen anzufordern. Wenn Sie einen lokalen Nameserver betreiben, sollte diese Zeile auskommentiert oder gelöscht werden. Zeile 10: Eine leere Zeile zur besseren Lesbarkeit. Leere Zeilen werden von PPP ignoriert. Zeile 11: Bestimmt einen Provider, namens provider. Wenn Sie hier den Namen Ihres ISP einsetzen, können Sie später die Verbindung - mit aufbauen. + mit + aufbauen. Zeile 12: Gibt die Telefonnummer des Providers an. Mehrere Telefonnummern können angegeben werden, indem Doppelpunkte (:) oder Pipe-Zeichen (|) als Trennzeichen verwendet werden. Der Unterschied zwischen diesen beiden Trennzeichen ist in &man.ppp.8; beschrieben. Zusammenfassend: Wenn Sie die verschiedenen Nummern abwechselnd verwenden möchten, sollten Sie die Nummern durch einen Doppelpunkt trennen. Wenn Sie immer die erste Nummer verwenden möchten und die anderen nur zum Einsatz kommen sollen, wenn eine Einwahl mit der ersten Telefonnummer nicht möglich ist, sollten Sie das Pipe-Zeichen zur Trennung verwenden. Wie im Beispiel, sollten Sie die gesamte Reihe der Telefonnummern in Anführungszeichen setzen. Sie müssen die Telefonnummer in Anführungszeichen (") setzen, wenn Sie Leerzeichen in der Telefonnummer verwenden, ansonsten rufen Sie einen Fehler hervor, der vielleicht schwer zu finden ist. Zeilen 13 & 14: Gibt den Benutzernamen und das Passwort an. Wenn Sie zur Verbindung einen Login-Prompt im UNIX-Stil verwenden, bezieht sich der Befehl set login mit den \U und \P Variablen auf diese Werte. Wenn Sie zum Verbindungsaufbau PAP oder CHAP verwenden, werden diese Werte zum Zeitpunkt der Authentifizierung verwendet. Zeile 15: PAP CHAP Wenn Sie PAP oder CHAP einsetzen, gibt es an dieser Stelle keinen Login-Prompt, weshalb Sie diese Zeile auskommentieren oder löschen sollten. Der Abschnitt Authentifizierung mit PAP und CHAP enthält hierzu weitere Einzelheiten. Der Login-String hat die gleiche chat-ähnliche Syntax, wie der Einwahlstring. Der String in diesem Beispiel funktioniert mit einem ISP, dessen Login-Session folgendermaßen aussieht: J. Random Provider login: foo password: bar protocol: ppp Sie müssen dieses Skript noch an Ihre eigenen Erfordernisse anpassen. Wenn Sie dieses Skript zum ersten Mal schreiben, sollten Sie sicherstellen, dass Sie chat-logging aktiviert haben, damit Sie überprüfen zu können, ob die Konversation zwischen Ihrem Rechner und dem Rechner des Providers wie erwartet abläuft. Zeile 16: Zeitbeschränkung Setzt einen Zeitrahmen (in Sekunden), innerhalb dessen eine Reaktion erfolgen muss. In diesem Fall, wird die Verbindung nach 300 Sekunden automatisch geschlossen, wenn keine Aktivität zu verzeichnen ist. Wenn Sie keinen Zeitrahmen festlegen wollen, nach dessen Überschreiten die Verbindung geschlossen wird, können Sie diesen Wert auf 0 setzen oder die Kommandozeilen-Option verwenden. Zeile 17: ISP Gibt die IP-Adresse für das Interface an. Der String x.x.x.x sollte durch die IP-Adresse ersetzt werden, die Ihnen Ihr Provider zugeteilt hat. Der String y.y.y.y sollte durch die IP-Adresse ersetzt werden, die Ihr ISP als Gateway angegeben hat (das ist der Rechner, mit dem Ihr Rechner eine Verbindung aufbaut). Wenn Ihnen Ihr ISP keine Gateway Adresse zur Verfügung gestellt hat, verwenden Sie hier einfach 10.0.0.2/0. Wenn Sie eine erratene IP-Adresse verwenden müssen, sollten Sie in der Datei /etc/ppp/ppp.linkup einen entsprechenden Eintrag machen. Folgen Sie dazu den Anweisungen im Abschnitt PPP und dynamische IP-Adressen. Wenn diese Zeile ausgelassen wird, kann ppp nicht im Modus betrieben werden. Zeile 18: Fügt eine Defaultroute für das Gateway Ihres Providers hinzu. Das Wort HISADDR wird dabei durch die in Zeile 17 angegebene Gateway Adresse ersetzt. Wichtig ist, dass diese Zeile nach Zeile 17 erscheint, da andernfalls HISADDR noch nicht initialisiert ist. Wenn Sie ppp nicht im Modus betreiben, sollte diese Zeile in die Datei ppp.linkup verschoben werden. Wenn Sie eine statische IP-Adresse verwenden und ppp im Modus läuft, ist es nicht notwendig, einen Eintrag in die Datei ppp.linkup hinzuzufügen. In diesem Fall hat ihre Routingtabelle bereits die richtigen Einträge, bevor Sie die Verbindung aufbauen. Sie möchten aber vielleicht einen Eintrag hinzufügen, um ein Programm aufzurufen, nachdem die Verbindung aufgebaut ist. Dies wird weiter unten am Beispiel von Sendmail erklärt. Beispiele für Konfigurationsdateien finden Sie - im Verzeichnis /usr/share/examples/ppp/. + im Verzeichnis /usr/share/examples/ppp/. PPP und dynamische IP-Adressen PPP mit dynamischen IP-Adressen IPCP Wenn Ihnen Ihr ISP keine statische IP-Adresse zuteilt, kann ppp so konfiguriert werden, dass die lokale und die entfernte IP-Adresse beim Verbindungsaufbau ausgehandelt werden. Dies geschieht, indem zunächst eine IP-Adresse erraten wird, die von ppp, unter Verwendung des IP Configuration Protocol (IPCP) durch eine richtige ersetzt wird, wenn die Verbindung aufgebaut ist. Die Konfiguration der Datei ppp.conf entspricht derjenigen, die im Abschnitt PPP und statische IP- Adressen dargestellt wurde, jedoch mit folgender Änderung: 17 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 Auch hier dient die Zeilennummerierung lediglich der besseren Übersichtlichkeit. Einrückungen, von mindestens einem Leerzeichen, sind allerdings erforderlich. Zeile 17: Die Zahl nach dem / Zeichen, gibt die Anzahl der Bits der Adresse an, auf die ppp besteht. Sie möchten vielleicht andere IP-Adressen verwenden, die oben angegebenen werden aber immer funktionieren. Das letzte Argument (0.0.0.0) weist PPP an, den Verbindungsaufbau mit der Adresse 0.0.0.0 zu beginnen, statt 10.0.0.1 zu verwenden. Dies ist bei einigen ISPs notwendig. Verwenden Sie nicht 0.0.0.0 als erstes Argument für set ifaddr, da so verhindert wird, dass PPP im Modus eine initiale Route setzt. Wenn PPP nicht im Modus läuft, müssen Sie die Datei/etc/ppp/ppp.linkup editieren. ppp.linkup kommt zum Einsatz, wenn eine Verbindung aufgebaut worden ist. Zu diesem Zeitpunkt hat ppp die Interface Adressen vergeben und es ist möglich, die Einträge in der Routingtabelle hinzuzufügen: 1 provider: 2 add default HISADDR Zeile 1: Beim Aufbau einer Verbindung sucht ppp in der Datei ppp.linkup nach einem Eintrag. PPP geht dabei nach folgenden Regeln vor: Suche zunächst nach der gleichen Bezeichnung, die wir auch in der Datei ppp.conf verwendet haben. Falls das nicht funktioniert, suche nach einem Eintrag der IP-Adresse unseres Gateways. Dieser Eintrag ist eine Bezeichnung im Stil von IP-Adressen, die sich aus vier Oktetts zusammensetzt. Falls immer noch kein passender Eintrag gefunden wurde, suche nach dem Eintrag MYADDR. Zeile 2: Diese Zeile weist ppp an, eine Defaultroute zu verwenden, die auf HISADDR zeigt. HISADDR wird nach der Aushandlung mit IPCP durch die IP-Adresse des Gateways ersetzt. Die Dateien /usr/share/examples/ppp/ppp.conf.sample und /usr/share/examples/ppp/ppp.linkup.sample bieten detaillierte Beispiele für pmdemand Einträge. Annahme eingehender Anrufe PPP eingehende Anrufe annehmen Wenn Sie ppp auf einem Rechner, der in ein LAN eingebunden ist, so konfigurieren, dass eingehende Anrufe angenommen werden, müssen Sie entscheiden, ob Pakete an das LAN weitergeleitet werden sollen. Wenn Sie das möchten, sollten Sie an die Gegenstelle eine IP-Adresse aus Ihrem lokalen Subnetz vergeben und den Befehl enable proxy in die Datei /etc/ppp/ppp.conf einfügen. Außerdem sollte die Datei /etc/rc.conf Folgendes enthalten: gateway_enable="YES" Welches getty? Der Abschnitt Einwählverbindungen bietet eine gute Beschreibung, wie Einwählverbindungen unter Verwendung von &man.getty.8; genutzt werden können. Eine Alternative zu getty ist mgetty, eine raffiniertere Version von getty, die mit Blick auf Einwählverbindungen entworfen wurde. Der Vorteil von mgetty ist, dass es auf aktive Weise mit Modems spricht, das heißt wenn ein Port in /etc/ttys ausgeschaltet ist, wird Ihr Modem nicht auf Anrufe reagieren. Spätere Versionen von mgetty (von 0.99beta aufwärts) unterstützen auch die automatische Erkennung von PPP-Streams, was Ihren Clients den skriptlosen Zugang zu Ihren Servern erlaubt. Der Abschnitt Mgetty und AutoPPP bietet weitere Informationen zu mgetty. <application>PPP</application> und Rechte Der Befehl ppp muss normalerweise als root ausgeführt werden. Wenn Sie jedoch möchten, dass ppp im Server-Modus auch von einem normalen Benutzer, wie unten beschrieben, durch Aufruf von ppp ausgeführt werden kann, müssen Sie diesem Benutzer die Rechte erteilen, ppp auszuführen, indem Sie ihn in der Datei /etc/group der Gruppe - network hinzufügen. + network hinzufügen. Sie werden ihm ebenfalls den Zugriff auf einen oder mehrere Abschnitte der Konfigurationsdatei geben müssen, indem Sie den allow Befehl verwenden: allow users fred mary Wenn dieser Befehl im default Abschnitt verwendet wird, erhalten die angegebenen Benutzer vollständigen Zugriff. PPP-Shells für dynamische IP-Adressen PPP Shells Erzeugen Sie eine Datei mit dem Namen /etc/ppp/ppp-shell, die Folgendes enthält: #!/bin/sh IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'` CALLEDAS="$IDENT" TTY=`tty` if [ x$IDENT = xdialup ]; then IDENT=`basename $TTY` fi echo "PPP for $CALLEDAS on $TTY" echo "Starting PPP for $IDENT" exec /usr/sbin/ppp -direct $IDENT Dieses Skript sollte ausführbar sein. Nun erzeugen Sie einen symbolischen Link ppp-dialup auf dieses Skript mit folgendem Befehl: &prompt.root; ln -s ppp-shell /etc/ppp/ppp-dialup Sie sollten dieses Skript als Shell für alle Benutzer von Einwählverbindungen verwenden. Dies ist ein Beispiel aus der Datei /etc/passwd für einen Benutzer namens pchilds, der PPP für Einwählverbindungen verwenden kann (Denken Sie daran, die Passwortdatei nicht direkt zu editieren, sondern dafür &man.vipw.8; zu verwenden). pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup - Erstellen Sie ein Verzeichnis /home/ppp, - das von allen Benutzern gelesen werden kann und die folgenden leeren - Dateien enthält: + Erstellen Sie ein Verzeichnis /home/ppp, das von allen Benutzern + gelesen werden kann und die folgenden leeren Dateien + enthält: -r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin -r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts Dies verhindert, dass /etc/motd angezeigt wird. PPP-Shells für statische IP-Adressen PPP Shells Erstellen Sie die Datei ppp-shell wie oben oben dargestellt. Erzeugen Sie nun für jeden Account mit statischer IP-Adresse einen symbolischen Link auf ppp-shell. Wenn Sie beispielsweise die drei Kunden, fred, sam und mary haben, für die Sie CIDR-/24-Netzwerke routen, schreiben Sie Folgendes: &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary Jeder Einwählzugang dieser Kunden sollte den oben erzeugten symbolischen Link als Shell haben (mary's Shell sollte also /etc/ppp/ppp-mary sein). Einrichten von <filename>ppp.conf</filename> für dynamische IP-Adressen Die Datei /etc/ppp/ppp.conf sollte in etwa wie folgt aussehen: default: set debug phase lcp chat set timeout 0 ttyd0: set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255 enable proxy ttyd1: set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255 enable proxy Die Einrückungen sind wichtig. Der Abschnitt default: wird für jede Sitzung geladen. Erstellen Sie für jede Einwählverbindung, die Sie in der Datei /etc/ttys ermöglicht haben, einen Eintrag, wie oben für ttyd0: gezeigt. Jede Verbindung sollte eine eigene IP-Adresse aus dem Pool der Adressen bekommen, die sie für diese Benutzergruppe reserviert haben. Einrichten von <filename>ppp.conf</filename> für statische IP-Adressen Zu dem bisher dargestellten Inhalt der Beispieldatei /usr/share/examples/ppp/ppp.conf sollten Sie einen Abschnitt für jeden Benutzer mit statisch zugewiesener IP-Adresse hinzufügen. Wir werden nun unser Beispiel mit den Accounts fred, sam und mary weiterführen. fred: set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255 sam: set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255 mary: set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255 Die Datei /etc/ppp/ppp.linkup sollte, falls erforderlich, ebenfalls Routinginformationen für jeden Benutzer mit statischer IP-Adresse enthalten. Die unten dargestellte Zeile würde dem Netzwerk 203.14.101.0/24 eine Route über die PPP-Verbindung des Client hinzufügen. fred: add 203.14.101.0 netmask 255.255.255.0 HISADDR sam: add 203.14.102.0 netmask 255.255.255.0 HISADDR mary: add 203.14.103.0 netmask 255.255.255.0 HISADDR <command>mgetty</command> und AutoPPP mgetty AutoPPP LCP Wird mgetty mit der Option AUTO_PPP konfiguriert und kompiliert, kann mgetty die LCP Phase von PPP-Verbindungen erkennen und automatisch eine ppp-Shell starten. Da hierbei jedoch die Login/Passwort-Sequenz nicht durchlaufen wird, ist es notwendig, Benutzer durch PAP oder CHAP zu authentifizieren. In diesem Abschnitt wird davon ausgegangen, dass der Benutzer eine Version von mgetty mit der Option AUTO_PPP (v0.99beta oder neuer) erfolgreich konfiguriert, kompiliert und installiert hat. Stellen Sie sicher, dass die Datei /usr/local/etc/mgetty+sendfax/login.config Folgendes enthält: /AutoPPP/ - - /etc/ppp/ppp-pap-dialup Hierdurch wird mgetty angewiesen, das Skript ppp-pap-dialup für die erkannten PPP-Verbindungen auszuführen. Erstellen Sie nun die Datei /etc/ppp/ppp-pap-dialup mit folgendem Inhalt (die Datei sollte ausführbar sein): #!/bin/sh exec /usr/sbin/ppp -direct pap$IDENT Erstellen Sie bitte für jede Einwählverbindung, die Sie in /etc/ttys ermöglicht haben, einen korrespondierenden Eintrag in der Datei /etc/ppp/ppp.conf. Diese Einträge können problemlos, mit den Definitionen die wir weiter oben gemacht haben, koexistieren. pap: enable pap set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40 enable proxy Jeder Benutzer, der sich auf diese Weise anmeldet, benötigt einen Benutzernamen und ein Passwort in der Datei /etc/ppp/ppp.secret. Sie haben auch die Möglichkeit, Benutzer mit Hilfe von PAP zu authentifizieren, indem Sie der Datei /etc/passwd folgende Option hinzufügen: enable passwdauth Wenn Sie bestimmten Benutzern eine statische IP-Adresse zuweisen möchten, können Sie diese als drittes Argument in der Datei /etc/ppp/ppp.secret angeben. In /usr/share/examples/ppp/ppp.secret.sample finden Sie hierfür Beispiele. MS-Erweiterungen DNS NetBIOS PPP Erweiterungen von Microsoft Es ist möglich PPP so zu konfigurieren, dass bei Bedarf DNS und NetBIOS Nameserveradressen bereitgestellt werden. Um diese Erweiterungen für die PPP Version 1.x zu aktivieren, sollte der entsprechende Abschnitt der Datei /etc/ppp/ppp.conf um folgende Zeilen ergänzt werden: enable msext set ns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5 Für PPP Version 2 und höher: accept dns set dns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5 Damit werden den Clients die primären und sekundären Nameserveradressen sowie ein NetBIOS Nameserver-Host mitgeteilt. In Version 2 und höher verwendet PPP die Werte, die in /etc/resolv.conf zu finden sind, wenn die Zeile set dns weggelassen wird. Authentifizierung durch PAP und CHAP PAP CHAP Einige ISPs haben ihr System so eingerichtet, dass der Authentifizierungsteil eines Verbindungsaufbaus mit Hilfe von PAP oder CHAP-Mechanismen durchgeführt wird. Wenn dies bei Ihnen der Fall sein sollte, wird Ihnen Ihr ISP bei der Verbindung keinen login:-Prompt präsentieren, sondern sofort mit der Aushandlung der PPP-Verbindung beginnen. PAP ist nicht so sicher wie CHAP, doch die Sicherheit ist hierbei normalerweise kein Problem, da Passwörter, obgleich von PAP im Klartext versandt, lediglich über die serielle Verbindung verschickt werden. Es gibt für Cracker wenig Möglichkeiten zu lauschen. Zurückkommend auf die Abschnitte PPP und statische IP-Adressen oder PPP und dynamische IP-Adressen müssen folgende Veränderungen vorgenommen werden: 13 set authname MyUserName 14 set authkey MyPassword 15 set login Zeile 13: Diese Zeile legt Ihren PAP/CHAP Benutzernamen fest. Sie müssen den richtigen Wert für MyUserName eingeben. Zeile 14: Passwort Diese Zeile legt Ihr PAP/CHAP Passwort fest. Sie müssen den richtigen Wert für MyPassword eingeben. Sie können eine zusätzliche Zeile, wie etwa: 16 accept PAP oder 16 accept CHAP verwenden, um deutlich zu machen, dass dies beabsichtigt ist, aber sowohl PAP wie auch CHAP als standardmäßig akzeptiert werden. Zeile 15: Ihr ISP wird normalerweise nicht von Ihnen verlangen, dass Sie sich am Server einloggen, wenn Sie PAP oder CHAP verwenden. Sie müssen deshalb den String set login deaktivieren. Veränderung Ihrer <command>ppp</command> Konfiguration im laufenden Betrieb Es ist möglich, dem Programm ppp Befehle zu erteilen, während es im Hintergrund läuft. Dazu ist jedoch die Einrichtung eines passenden Diagnose-Ports erforderlich. Ergänzen Sie hierzu Ihre Konfigurationsdatei um folgende Zeile: set server /var/run/ppp-tun%d DiagnosticPassword 0177 Damit wird PPP angewiesen, auf den angegebenen UNIX-Domainsocket zu hören und Clients nach dem angegebenen Passwort zu fragen, bevor der Zugang Gewährt wird. Das %d wird durch die Nummer des benutzten tun-Devices ersetzt. Wenn ein Socket eingerichtet ist, kann das Programm &man.pppctl.8; in Skripten verwendet werden, mit denen in das laufende Programm eingegriffen wird. Interne NAT von PPP benutzen PPP NAT PPP kann Network Address Translation (NAT) ohne Hilfe des Kernels durchführen. Wenn Sie diese Funktion benutzen wollen, fügen Sie die folgende Zeile in /etc/ppp/ppp.conf ein: nat enable yes Sie können NAT mit der Option auf der Kommandozeile von PPP aktivieren. Weiterhin kann NAT in /etc/rc.conf mit der Variablen ppp_nat aktiviert werden. Dies ist auch die Voreinstellung. Die nachstehende /etc/ppp/ppp.conf benutzt NAT für bestimmte eingehende Verbindungen: nat port tcp 10.0.0.2:ftp ftp nat port tcp 10.0.0.2:http http Wenn Sie Verbindungen von außen überhaupt nicht trauen, benutzen Sie die folgende Zeile: nat deny_incoming yes Abschließende Systemkonfiguration PPP Konfiguration Sie haben ppp nun konfiguriert, aber bevor PPP eingesetzt werden kann, gibt noch einige weitere Dinge zu erledigen, die alle die Bearbeitung der Datei /etc/rc.conf erfordern. Gehen Sie diese Datei von oben nach unten durch, und stellen Sie als Erstes sicher, dass die Zeile hostname= vorhanden ist: hostname="foo.example.com" Wenn Ihnen Ihr ISP eine statische IP-Adresse und einen Namen zugewiesen hat, ist es wahrscheinlich am besten, wenn Sie diesen Namen als Hostnamen verwenden. Schauen Sie nach der Variable network_interfaces. Wenn Sie Ihr System so konfigurieren möchten, dass bei Bedarf eine Verbindung zu Ihrem ISP aufgebaut wird, sollten Sie das Device tun0 zu der Liste hinzufügen oder es andernfalls entfernen. network_interfaces="lo0 tun0" ifconfig_tun0= Die Variable ifconfig_tun0 sollte leer sein und eine Datei namens /etc/start_if.tun0 sollte erstellt werden. Diese Datei sollte die nachfolgende Zeile enthalten: ppp -auto mysystem Dieses Skript startet Ihren ppp-Dæmon im Automatik-Modus. Es wird bei der Netzwerkkonfiguration ausgeführt. Wenn Ihr Rechner als Gateway für ein LAN fungiert, möchten Sie vielleicht auch die Option verwenden. In der Manual-Seite sind weitere Einzelheiten hierzu zu finden. Stellen Sie sicher, dass der Start eines Routerprogramms in /etc/rc.conf wie folgt deaktiviert ist: router_enable="NO" routed Es ist wichtig, dass der routed Dæmon nicht gestartet wird da routed dazu tendiert, die von ppp erstellten Einträge der Standardroute zu überschreiben. Es ist außerdem sinnvoll, darauf zu achten, dass die Zeile sendmail_flags nicht die Option enthält, da sendmail sonst ab und zu die Netzwerkverbindung prüfen wird, was möglicherweise dazu führt, dass sich Ihr Rechner einwählt. Sie können hier Folgendes angeben: sendmail_flags="-bd" sendmail Der Nachteil dieser Lösung ist, dass Sie sendmail nach jedem Aufbau einer ppp-Verbindung auffordern müssen, die Mailwarteschlange zu überprüfen, indem Sie Folgendes eingeben: &prompt.root; /usr/sbin/sendmail -q Vielleicht möchten Sie den Befehl !bg in der Datei ppp.linkup verwenden, um dies zu automatisieren: 1 provider: 2 delete ALL 3 add 0 0 HISADDR 4 !bg sendmail -bd -q30m SMTP Wenn Sie dies nicht möchten, ist es möglich, einen dfilter einzusetzen, um SMTP-Verkehr zu blockieren. Weitere Einzelheiten hierzu finden Sie in den Beispieldateien. Das Einzige, was nun noch zu tun bleibt, ist Ihren Rechner neu zu starten. Nach dem Neustart können Sie entweder: &prompt.root; ppp und danach dial provider eingeben, um eine PPP-Sitzung zu starten, oder Sie geben: &prompt.root; ppp -auto provider ein, um ppp bei Datenverkehr aus Ihrem Netzwerk heraus, automatisch eine Verbindung herstellen zu lassen (vorausgesetzt Sie haben kein start_if.tun0 Skript erstellt). Zusammenfassung Die folgenden Schritte sind nötig, wenn ppp zum ersten Mal eingerichtet werden soll: Clientseite: Stellen Sie sicher, dass das tun Device in den Kernel eingebaut ist. - Vergewissern Sie sich, dass die Gerätedatei - tunN - im Verzeichnis /dev vorhanden ist. + Vergewissern Sie sich, dass die Gerätedatei tunN + im Verzeichnis /dev vorhanden ist. Bearbeiten Sie die Datei /etc/ppp/ppp.conf. Das Beispiel pmdemand sollte für die meisten ISP ausreichen. Wenn Sie eine dynamische IP-Adresse haben, erstellen Sie einen Eintrag in der Datei /etc/ppp/ppp.linkup. Aktualisieren Sie die Datei /etc/rc.conf. Erstellen Sie das Skript start_if.tun0, wenn Sie einen bedarfgesteuerten Einwahlprozess (demand dialing) benötigen. Serverseite: Stellen Sie sicher, dass das tun Device in den Kernel eingebaut ist. Vergewissern Sie sich, dass die Gerätedatei tunN im Verzeichnis /dev vorhanden ist Erstellen Sie einen Eintrag in der Datei /etc/passwd (verwenden Sie dazu das Programm &man.vipw.8;). Erstellen Sie ein Profil im Heimatverzeichnis des Benutzers, das ppp -direct direct-server o.Ä. ausführt. Bearbeiten Sie die Datei /etc/ppp/ppp.conf. Das Beispiel direct-server sollte ausreichen. Erzeugen Sie einen Eintrag in /etc/ppp/ppp.linkup. Aktualisieren Sie die Datei /etc/rc.conf. Gennady B. Sorokopud Teile wurden ursprünglich beigetragen von Robert Huff Kernel-PPP Einrichtung von Kernel-PPP PPP Kernel-PPP Bevor Sie PPP auf Ihrem Computer einrichten, sollten Sie - dafür sorgen, dass pppd im Verzeichnis - /usr/sbin vorhanden ist und - /etc/ppp existiert. + dafür sorgen, dass pppd im Verzeichnis /usr/sbin vorhanden ist und /etc/ppp existiert. pppd kann auf zweierlei Weise arbeiten: Als Client – Sie möchten Ihren Rechner mit einem Netz verbinden, indem Sie eine serielle PPP-Verbindung aufbauen. PPP Server Als Server – Ihr Rechner ist in ein Netzwerk eingebunden und stellt die PPP-Verbindung für andere Rechner im Netzwerk her. In beiden Fällen werden Sie eine Datei mit den benötigten Optionen erstellen müssen (/etc/ppp/options oder, wenn mehr als ein Benutzer PPP verwendet, ~/.ppprc). Sie benötigen außerdem eine Software (vorzugsweise comms/kermit), mit der Sie seriell per Modem wählen und eine Verbindung zu dem entfernten Host aufbauen können. Trev Roydhouse Basierend auf Informationen von Verwendung von <command>pppd</command> als Client PPP Client Cisco Die folgende Datei /etc/ppp/options kann für einen Verbindungsaufbau mit PPP zu einem Cisco Terminalserver verwendet werden. crtscts # enable hardware flow control modem # modem control line noipdefault # remote PPP server must supply your IP address # if the remote host does not send your IP during IPCP # negotiation, remove this option passive # wait for LCP packets domain ppp.foo.com # put your domain name here -:<remote_ip> # put the IP of remote PPP host here +:remote_ip # put the IP of remote PPP host here # it will be used to route packets via PPP link # if you didn't specified the noipdefault option - # change this line to <local_ip>:<remote_ip> + # change this line to local_ip:remote_ip defaultroute # put this if you want that PPP server will be your # default router Um eine Verbindung herzustellen, sollten Sie: Kermit Modem Mit Kermit (oder einem anderen Modemprogramm) den entfernten Host anwählen und Ihren Benutzernamen sowie Ihr Passwort (oder was sonst nötig ist, um PPP auf dem entfernten Host zu aktivieren) eingeben. Kermit beenden (ohne die Verbindung abzubrechen). Folgendes eingeben: - &prompt.root; /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200 + &prompt.root; /usr/sbin/pppd /dev/tty01 19200 Achten Sie darauf, dass sie eine geeignete Geschwindigkeit wählen und das richtige Device verwenden. Nun ist Ihr Computer mit Hilfe von PPP verbunden. Wenn die Verbindung nicht funktionieren sollte, können Sie die Option in die Datei /etc/ppp/options eintragen und die Ausgaben auf der Konsole beobachten, um die Fehler zu finden. Das folgende Skript /etc/ppp/pppup führt alle 3 Schritte automatisch aus: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.dial pppd /dev/tty01 19200 Kermit /etc/ppp/kermit.dial ist ein Kermit-Skript das den Einwählvorgang und alle notwendigen Autorisationen auf dem entfernten Host durchführt (ein Beispiel für ein solches Skript ist im Anhang zu diesem Dokument zu finden). Verwenden Sie das folgende Skript /etc/ppp/pppdown, um die PPP-Verbindung abzubrechen: #!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill -TERM ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi /sbin/ifconfig ppp0 down /sbin/ifconfig ppp0 delete kermit -y /etc/ppp/kermit.hup /etc/ppp/ppptest Prüfen Sie, ob pppd immer noch läuft, indem Sie /usr/etc/ppp/ppptest ausführen. Dieses Skript sollte folgendermaßen aussehen: #!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'pppd running: PID=' ${pid-NONE} else echo 'No pppd running.' fi set -x netstat -n -I ppp0 ifconfig ppp0 Um die Modemverbindung abzubrechen, können Sie das Skript /etc/ppp/kermit.hup verwenden, das Folgendes enthalten sollte: set line /dev/tty01 ; put your modem device here set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit Hier ist eine alternative Methode, bei der chat an Stelle von Kermit eingesetzt wird: Die folgenden beiden Dateien reichen aus, um eine Verbindung über pppd herzustellen. /etc/ppp/options: - /dev/cuaa1 115200 + /dev/cuad1 115200 crtscts # enable hardware flow control modem # modem control line connect "/usr/bin/chat -f /etc/ppp/login.chat.script" noipdefault # remote PPP serve must supply your IP address # if the remote host doesn't send your IP during # IPCP negotiation, remove this option passive # wait for LCP packets domain <your.domain> # put your domain name here : # put the IP of remote PPP host here # it will be used to route packets via PPP link # if you didn't specified the noipdefault option - # change this line to <local_ip>:<remote_ip> + # change this line to local_ip:remote_ip; defaultroute # put this if you want that PPP server will be # your default router /etc/ppp/login.chat.script: Die folgenden Angaben sollten in einer Zeile stehen. - ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number> - CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id> - TIMEOUT 5 sword: <password> + ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDTphone.number + CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: login-id + TIMEOUT 5 sword: password Wenn diese Dateien richtig installiert und modifiziert sind, müssen Sie pppd, nur noch wie folgt starten: &prompt.root; pppd Verwendung von <command>pppd</command> als Server /etc/ppp/options sollte etwa Folgendes enthalten: crtscts # Hardware flow control netmask 255.255.255.0 # netmask (not required) 192.114.208.20:192.114.208.165 # IP's of local and remote hosts # local ip must be different from one # you assigned to the Ethernet (or other) # interface on your machine. # remote IP is IP address that will be # assigned to the remote machine domain ppp.foo.com # your domain passive # wait for LCP modem # modem line Das folgende Skript /etc/ppp/pppserv lässt pppd als Server zu arbeiten: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi # reset ppp interface ifconfig ppp0 down ifconfig ppp0 delete # enable autoanswer mode kermit -y /etc/ppp/kermit.ans # run ppp pppd /dev/tty01 19200 Verwenden Sie das Skript/etc/ppp/pppservdown, um den Server zu beenden: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.noans Mit dem Kermit-Skript (/etc/ppp/kermit.ans) lässt sich die Funktion Ihres Modems, automatisch zu antworten, ein- bzw. ausschalten. Es sollte folgendermaßen aussehen: set line /dev/tty01 set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 inp 5 OK echo \13 out ATS0=1\13 ; change this to out ATS0=0\13 if you want to disable ; autoanswer mode inp 5 OK echo \13 exit Ein Skript namens /etc/ppp/kermit.dial wird für die Einwahl und Authentifizierung am entfernten Host verwendet. Sie müssen es noch an Ihre lokalen Gegebenheiten anpassen. Geben Sie in diesem Skript Ihren Benutzernamen und Ihr Passwort ein. In Abhängigkeit von der Reaktion Ihres Modems und des entfernten Hosts, werden Sie auch noch die input Anweisungen verändern müssen. ; ; put the com line attached to the modem here: ; set line /dev/tty01 ; ; put the modem speed here: ; set speed 19200 set file type binary ; full 8 bit file xfer set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none set modem hayes set dial hangup off set carrier auto ; Then SET CARRIER if necessary, set dial display on ; Then SET DIAL if necessary, set input echo on set input timeout proceed set input case ignore def \%x 0 ; login prompt counter goto slhup :slcmd ; put the modem in command mode echo Put the modem in command mode. clear ; Clear unread characters from input buffer pause 1 output +++ ; hayes escape sequence input 1 OK\13\10 ; wait for OK if success goto slhup output \13 pause 1 output at\13 input 1 OK\13\10 if fail goto slcmd ; if modem doesn't answer OK, try again :slhup ; hang up the phone clear ; Clear unread characters from input buffer pause 1 echo Hanging up the phone. output ath0\13 ; hayes command for on hook input 2 OK\13\10 if fail goto slcmd ; if no OK answer, put modem in command mode :sldial ; dial the number pause 1 echo Dialing. output atdt9,550311\13\10 ; put phone number here assign \%x 0 ; zero the time counter :look clear ; Clear unread characters from input buffer increment \%x ; Count the seconds input 1 {CONNECT } if success goto sllogin reinput 1 {NO CARRIER\13\10} if success goto sldial reinput 1 {NO DIALTONE\13\10} if success goto slnodial reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 60 goto look else goto slhup :sllogin ; login assign \%x 0 ; zero the time counter pause 1 echo Looking for login prompt. :slloop increment \%x ; Count the seconds clear ; Clear unread characters from input buffer output \13 ; ; put your expected login prompt here: ; input 1 {Username: } if success goto sluid reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 10 goto slloop ; try 10 times to get a login prompt else goto slhup ; hang up and start again if 10 failures :sluid ; ; put your userid here: ; output ppp-login\13 input 1 {Password: } ; ; put your password here: ; output ppp-password\13 input 1 {Entering SLIP mode.} echo quit :slnodial echo \7No dialtone. Check the telephone line!\7 exit 1 ; local variables: ; mode: csh ; comment-start: "; " ; comment-start-skip: "; " ; end: Tom Rhodes Beigetragen von Probleme bei <acronym>PPP</acronym>-Verbindungen PPP Fehlersuche Dieser Abschnitt behandelt Probleme, die auftauchen können, wenn PPP über ein Modem verwendet wird. Sie müssen beispielsweise genau die Eingabeaufforderung des Systems kennen, in das Sie sich einwählen. Einige ISPs verwenden ssword andere verwenden password; wenn das Einwahlskript falsch ist, scheitert die Anmeldung. Üblicherweise suchen Sie nach Fehlern der PPP-Verbindung indem Sie sich manuell verbinden. Wie das genau geht, wird im Folgenden gezeigt. Gerätedateien überprüfen - Wenn Sie den Kernel neu konfiguriert haben, werden - Sie such an das sio-Gerät - erinnern. Falls Sie keinen Kernel konfiguriert haben, - machen Sie sich keine Sorgen. Die seriellen Geräte - finden Sie in der Ausgabe von dmesg: + Wenn Sie einen eigenen Kernel verwenden, stellen Sie sicher, dass + die folgende Zeile in der Kernelkonfigurationsdatei vorhanden + ist: + + device sio + + Das sio-Gerät ist bereits + im GENERIC-Kernel vorhanden, deshalb sind in + diesem Fall keine zusätzlichen Schritte vonnöten. + Kontrollieren Sie die Ausgabe von dmesg: &prompt.root; dmesg | grep sio In der Ausgabe sollten die entsprechenden sio-Geräte, beispielsweise sio1 (COM2), angezeigt werden. Wird ein passendes Gerät angezeigt, brauchen Sie keinen neuen Kernel zu erstellen. Wenn Ihr Modem an sio1 angeschlossen ist (in DOS ist dieser Anschluss als - COM2 bekannt), ist - /dev/cuaa1 die - dazugehörende Gerätedatei. + COM2 bekannt), ist /dev/cuad1 die dazugehörende + Gerätedatei. Manuelle Verbindungen Ein Verbindungsaufbau zum Internet durch manuelle Steuerung von ppp geht schnell, ist einfach und stellt einen guten Weg dar, eine Verbindung auf Fehler hin zu überprüfen oder einfach Informationen darüber zu sammeln, wie Ihr ISP Verbindungen handhabt. Lassen Sie uns PPP von der Kommandozeile aus starten. Beachten Sie, dass in allen Beispielen example der Hostname der Maschine ist, auf der PPP läuft. Sie starten ppp, indem Sie einfach ppp eingeben: &prompt.root; ppp Wir haben ppp nun gestartet. - ppp ON example> set device /dev/cuaa1 + ppp ON example> set device /dev/cuad1 Wir geben das Device an, an das unser Modem angeschlossen ist. - In diesem Fall ist es cuaa1. + In diesem Fall ist es cuad1. ppp ON example> set speed 115200 Wir geben die Verbindungsgeschwindigkeit an. Im Beispiel verwenden wir 115200 kbps ppp ON example> enable dns Wir weisen ppp an, unseren Resolver zu konfigurieren und in der Datei /etc/resolv.conf Einträge für den Nameserver hinzuzufügen. Falls ppp unseren Hostnamen nicht bestimmen kann, geben wir diesen später manuell an. ppp ON example> term Wir wechseln in den Terminal-Modus, um das Modem manuell kontrollieren zu können. - deflink: Entering terminal mode on /dev/cuaa1 + deflink: Entering terminal mode on /dev/cuad1 type '~h' for help at OK atdt123456789 Sie verwenden at zur Initialisierung Ihres Modems und dann atdt sowie die Nummer Ihres ISP, um den Einwählprozess zu starten. CONNECT Dies ist die Bestätigung, dass eine Verbindung aufgebaut wurde. Falls wir Verbindungsprobleme bekommen, die nicht mit der Hardware zusammenhängen, werden wir an dieser Stelle ansetzen müssen, um eine Lösung zu finden. ISP Login:myusername Hier werden Sie nach einem Benutzernamen gefragt. Geben Sie am Prompt den Namen ein, den Ihnen Ihr ISP zur Verfügung gestellt hat. ISP Pass:mypassword An dieser Stelle müssen Sie das Passwort angeben, das Ihnen von Ihrem ISP vorgegeben wurde. Das Passwort wird, analog dem normalen Anmeldevorgang, nicht angezeigt. Shell or PPP:ppp Abhängig von Ihrem ISP, kann es sein, dass dieser Prompt bei Ihnen gar nicht erscheint. Wir werden hier gefragt, ob wir eine Shell beim Provider verwenden oder ppp starten wollen. Weil wir eine Internetverbindung aufbauen wollen, haben wir uns in diesem Beispiel für ppp entschieden. Ppp ON example> Beachten Sie, dass sich in diesem Beispiel das erste in einen Großbuchstaben verwandelt hat. Dies zeigt, dass wir erfolgreich eine Verbindung zu unserem ISP hergestellt haben. PPp ON example> An dieser Stelle haben wir uns erfolgreich bei unserem ISP authentifiziert und warten darauf, dass uns eine IP-Adresse zugewiesen wird. PPP ON example> Wir haben uns mit der Gegenstelle auf eine IP-Adresse geeinigt und den Verbindungsaufbau erfolgreich abgeschlossen PPP ON example> add default HISADDR Hier geben wir unsere Standardroute an. Weil zu diesem Zeitpunkt unsere einzige Verbindung zu unserer Gegenstelle besteht, müssen wir dies tun, bevor wir Kontakt zu unserer Umwelt aufnehmen können. Falls dies aufgrund bestehender Routen nicht funktionieren sollte, können Sie ein Ausrufungszeichen ! vor setzen. Sie können diese Standardroute aber auch vor dem eigentlichen Verbindungsaufbau angeben und PPP wird entsprechend eine neue Route aushandeln. Wenn alles gut ging, sollten wir nun eine aktive Internetverbindung haben, die wir mit Ctrl z in den Hintergrund schicken können Wenn sie feststellen, dass PPP wieder zu ppp wird, ist die Verbindung abgebrochen. Es ist gut dies zu wissen, weil dadurch der Verbindungsstatus angezeigt wird. Große Ps zeigen an, dass wir eine Verbindung zum ISP haben und kleine ps zeigen an, dass wir aus irgendeinem Grund die Verbindung verloren haben. ppp hat nur diese beiden Zustände. Fehlersuche Wenn sie einen Direktanschluss haben und keine Verbindung aufbauen können, schalten Sie die Hardware-Flusssteuerung CTS/RTS aus, indem Sie die Option verwenden. Dies ist zumeist dann der Fall, wenn Sie mit einem PPP-fähigen Terminalserver verbunden sind. Hier bleibt PPP bei dem Versuch hängen, Daten über Ihre Nachrichtenverbindung zu schicken, weil auf ein CTS-Signal (Clear-to-Send) gewartet wird, das nie kommt. Wenn Sie diese Option jedoch gebrauchen, sollten Sie auch die Option verwenden, die erforderlich sein kann, um bestimmte Hardware zu kontrollieren, die auf die Übertragung bestimmter Zeichen zwischen den Kommunikations-Endpunkten (zumeist XON/XOFF) angewiesen ist. Die Manual-Seite &man.ppp.8; bietet mehr Informationen zu dieser Option und ihrer Verwendung. Wenn Sie ein älteres Modem haben, benötigen Sie vielleicht die Option . Standardmäßig wird keine Parität vorausgesetzt, sie ist aber für die Fehlerprüfung bei älteren Modems und bei bestimmten ISPs erforderlich. Sie könnten diese Option für den ISP Compuserve benötigen. PPP kehrt möglicherweise nicht in den Befehlsmodus zurück, was normalerweise auf einen Fehler bei der Aushandlung hinweist, wobei der ISP wartet, dass Ihre Seite den Aushandlungsprozess beginnt. Die Option ~p erzwingt in diesem Fall den Beginn des Aushandlungsprozesses. Wenn Sie nie einen Login-Prompt erhalten, müssen Sie statt des im Beispiel gezeigten UNIX-Stils höchst wahrscheinlich PAP oder CHAP für die Authentifizierung verwenden. Um PAP oder CHAP zu verwenden, ergänzen Sie PPP einfach um folgende Optionen, bevor Sie in den Terminalmodus wechseln: ppp ON example> set authname myusername Hierbei sollte myusername durch den Benutzernamen ersetzt werden, den Sie von Ihrem ISP bekommen haben. ppp ON example> set authkey mypassword mypassword sollten Sie durch das Passwort ersetzen, das Ihnen Ihr ISP gegeben hat. Wenn die Verbindung aufgebaut wird, Sie aber keine Rechner unter ihrem Domänen-Namen erreichen können, versuchen Sie, einen Rechner mit &man.ping.8; und seiner IP-Adresse zu erreichen. Wenn 100% der Pakete verloren gehen, ist es sehr wahrscheinlich, dass Ihnen keine Standardroute zugewiesen wurde. Überprüfen Sie, ob während des Verbindungsaufbaus die Option gesetzt war. Wenn Sie zu einer entfernten IP-Adresse eine Verbindung aufbauen können, ist es möglich, dass die Adresse eines Nameservers nicht in die Datei /etc/resolv.conf eingetragen wurde. Diese Datei sollte folgendermaßen aussehen: domain example.com nameserver x.x.x.x nameserver y.y.y.y Dabei sollten x.x.x.x und y.y.y.y durch die IP-Adressen der DNS-Server Ihres ISPs ersetzt werden. Diese Information ist Ihnen bei Vertragsabschluss mitgeteilt worden. Wenn nicht, sollte ein Anruf bei Ihrem ISP Abhilfe schaffen. Mit &man.syslog.3; können Sie Ihre PPP-Verbindung protokollieren. Fügen Sie einfach die folgende Zeile in /etc/syslog.conf ein: !ppp *.* /var/log/ppp.log In den meisten Fällen existiert diese Funktionalität bereits. Jim Mock Beigetragen (durch http://node.to/freebsd/how-tos/how-to-freebsd-pppoe.html) von PPP over Ethernet (PPPoE) PPP over Ethernet PPPoE PPP, over Ethernet Dieser Abschnitt beschreibt, wie Sie PPP over Ethernet (PPPoE) einrichten. Konfiguration des Kernels Eine besondere Kernelkonfiguration ist für PPPoE nicht mehr erforderlich. Sofern die notwendige NetGraph-Unterstützung nicht in den Kernel eingebaut wurde, wird diese von ppp dynamisch geladen. Einrichtung von <filename>ppp.conf</filename> Dies hier ist ein Beispiel einer funktionierenden ppp.conf: default: set log Phase tun command # you can add more detailed logging if you wish set ifaddr 10.0.0.1/0 10.0.0.2/0 name_of_service_provider: set device PPPoE:xl1 # replace xl1 with your Ethernet device set authname YOURLOGINNAME set authkey YOURPASSWORD set dial set login add default HISADDR <application>ppp</application> ausführen Als root, geben Sie ein: &prompt.root; ppp -ddial name_of_service_provider <application>ppp</application> beim Systemstart ausführen Fügen Sie Folgendes in Ihre Datei /etc/rc.conf ein: ppp_enable="YES" ppp_mode="ddial" ppp_nat="YES" # if you want to enable nat for your local network, otherwise NO ppp_profile="name_of_service_provider" Verwendung einer PPPoE-Dienstbezeichnung (service tag) Manchmal kann es notwendig sein, eine Dienstbezeichnung (service tag) zu verwenden, um eine Verbindung aufzubauen. Dienstbezeichnungen werden eingesetzt, um zwischen verschiedenen PPPoE-Servern unterscheiden zu können, die einem bestehenden Netzwerk zugeteilt sind. Die erforderlichen Dienstbezeichnungen sollten in der Dokumentation, zu finden sein, die Ihnen Ihr ISP zur Verfügung gestellt hat. Wenn Sie diese Informationen dort nicht finden, fragen Sie beim technischen Kundendienst Ihres ISP danach. Als letzte Möglichkeit, bleibt die Methode, die von dem Programm Roaring Penguin PPPoE vorgeschlagen wird, das in der Ports-Sammlung zu finden ist. Bedenken Sie aber, dass dadurch Daten Ihres Modems gelöscht werden können, so dass es nicht mehr benutzt werden kann. Überlegen Sie also genau, ob Sie dies machen wollen. Installieren Sie einfach das Programm, das Ihnen Ihr Provider zusammen mit dem Modem geliefert hat. Gehen Sie dann in das Menü System dieses Programms. Der Name Ihres Profils, sollte in der Liste aufgeführt sein. Normalerweise ist dies ISP. Der Name des Profils (service tag) wird im Eintrag für die PPPoE-Konfiguration in der Datei ppp.conf verwendet, als der Teil des Befehls set device (die manpage &man.ppp.8; enthält Einzelheiten hierzu), der den Provider angibt. Dieser Eintrag sollte folgendermaßen aussehen: set device PPPoE:xl1:ISP Vergessen Sie nicht, statt xl1 das richtige Device Ihrer Netzwerkkarte anzugeben. Denken sie auch daran, ISP durch das Profil, das Sie oben gefunden haben zu ersetzen. Weitere Informationen bieten: Nutzung von T-DSL und T-Online mit FreeBSD von Udo Erdelhoff Cheaper Broadband with FreeBSD on DSL von Renaud Waldura. PPPoE mit einem &tm.3com; <trademark class="registered">HomeConnect</trademark> ADSL Modem Dual Link Dieses Modem folgt nicht dem RFC 2516 (A Method for transmitting PPP over Ethernet (PPPoE), verfasst von L. Mamakos, K. Lidl, J. Evarts, D. Carrel, D. Simone, und R. Wheeler). Stattdessen wurden andere Pakettyp-Codes für die Ethernet Frames verwendet. Bitte beschweren Sie sich unter 3Com, wenn Sie der Ansicht sind, dass dieses Modem die PPPoE-Spezifikation einhalten sollte. Um FreeBSD in die Lage zu versetzen, mit diesem Gerät zu kommunizieren, muss ein sysctl Befehl angegeben werden. Dies kann beim Systemstart automatisch geschehen, indem die Datei /etc/sysctl.conf angepasst wird: net.graph.nonstandard_pppoe=1 oder, wenn der Befehl unmittelbar wirksam werden soll, durch: &prompt.root; sysctl net.graph.nonstandard_pppoe=1 Da hiermit eine systemweit gültige Einstellung vorgenommen wird, ist es nicht möglich, gleichzeitig mit einem normalen PPPoE-Client oder Server und einem &tm.3com; HomeConnect ADSL Modem zu kommunizieren. <application>PPP</application> over ATM (PPPoA) PPP over ATM PPPoA PPP, over ATM Nachfolgend wird beschrieben, wie PPP over ATM (PPPoA) eingerichtet wird. PPPoA ist vor allem unter europäischen DSL-Providern populär. Der Einsatz von PPPoA mit dem Alcatel &speedtouch; USB PPPoA-Unterstützung für dieses Gerät ist unter FreeBSD als Port verfügbar, da die Firmware unter Alcatels Lizenzvereinbarung vertrieben wird und deshalb nicht mit dem FreeBSD-Basissystem frei verteilt werden kann. Um die Software zu installieren, verwenden Sie einfach die Ports-Sammlung. Installieren Sie den Port net/pppoa und folgen Sie den dabei angegebenen Instruktionen. Für den ordnungsgemäßen Betrieb muss das Alcatel &speedtouch; USB, wie viele USB-Geräte, Firmware auf den Gastrechner laden. FreeBSD kann die Firmware automatisch laden, wenn das Gerät mit dem USB-Anschluss verbunden wird. Dazu fügen Sie als Benutzer root die nachstehenden Zeilen in /etc/usbd.conf ein: device "Alcatel SpeedTouch USB" devname "ugen[0-9]+" vendor 0x06b9 product 0x4061 attach "/usr/local/sbin/modem_run -f /usr/local/libdata/mgmt.o" Den USB-Dæmon aktivieren Sie mit der folgenden Zeile in /etc/rc.conf: usbd_enable="YES" Wenn die Verbindung beim Start von ppp aufgebaut werden soll, fügen Sie die nachstehenden Zeilen als Benutzer root in /etc/rc.conf ein: ppp_enable="YES" ppp_mode="ddial" ppp_profile="adsl" Verwenden Sie bitte diese Einstellungen zusammen mit der Beispielkonfiguration in ppp.conf des Ports net/pppoa. Die Verwendung von mpd Sie können mpd verwenden, um zu einer Reihe von Diensten, insbesondere PPTP-Diensten eine Verbindung herzustellen. Sie finden mpd in der Ports-Sammlung unter net/mpd. Viele ADSL Modems, wie das Alcatel &speedtouch; Home, sind auf einen PPTP-Tunnel zwischen dem Modem und dem Rechner angewiesen. Zuerst müssen Sie den Port installieren, um danach mpd entsprechend Ihren Anforderungen und den Vorgaben Ihres Providers konfigurieren zu können. Der Port installiert auch einige - gut dokumentierte Beispielkonfigurationsdateien in - PREFIX/etc/mpd/. + gut dokumentierte Beispielkonfigurationsdateien in PREFIX/etc/mpd/. Beachten Sie, dass PREFIX hier das Verzeichnis angibt, in das Ihre Ports installiert werden. Standardmäßig - ist dies das Verzeichnis /usr/local/. + ist dies das Verzeichnis /usr/local/. Ein kompletter Leitfaden zur Konfiguration von mpd ist im HTML-Format verfügbar, - sobald der Port installiert ist. Dieser ist in - PREFIX/share/doc/mpd/ + sobald der Port installiert ist. Dieser ist in PREFIX/share/doc/mpd/ zu finden. Hier ist eine Beispielkonfiguration, um mit mpd eine Verbindung zu einem ADSL-Dienst aufzubauen. Die Konfiguration ist auf zwei Dateien verteilt. Zunächst die Datei mpd.conf: default: load adsl adsl: new -i ng0 adsl adsl set bundle authname username set bundle password password set bundle disable multilink set link no pap acfcomp protocomp set link disable chap set link accept chap set link keep-alive 30 10 set ipcp no vjcomp set ipcp ranges 0.0.0.0/0 0.0.0.0/0 set iface route default set iface disable on-demand set iface enable proxy-arp set iface idle 0 open Der Benutzername, den Sie zur Authentifizierung bei Ihrem ISP verwenden. Das Passwort, das Sie zur Authentifizierung bei Ihrem ISP verwenden. Die Datei mpd.links enthält Informationen über die Verbindung(en), die Sie aufbauen möchten. Eine Beispieldatei mpd.links, die das vorige Beispiel ergänzt, wird unten angegeben: adsl: set link type pptp set pptp mode active set pptp enable originate outcall set pptp self 10.0.0.1 set pptp peer 10.0.0.138 Die IP-Adresse des &os;-Rechners von dem aus Sie mpd verwenden. Die IP-Adresse des ADSL-Modems. Das Alcatel &speedtouch; Home hat die Adresse 10.0.0.138 voreingestellt. Ein Verbindungsaufbau kann einfach durch Eingabe des folgenden Befehls als root gestartet werden: &prompt.root; mpd -b adsl Sie können sich den Status der Verbindung durch folgenden Befehl anzeigen lassen: &prompt.user; ifconfig ng0 ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500 inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff Die Verwendung von mpd ist der empfehlenswerteste Weg, um mit &os; eine Verbindung zu einem ADSL-Dienst aufzubauen. Die Verwendung von pptpclient Es ist außerdem möglich, mit FreeBSD eine Verbindung zu anderen PPPoA-Diensten aufzubauen. Dazu wird net/pptpclient verwendet. Um mit net/pptpclient eine eine Verbindung zu einem DSL-Dienst aufbauen zu können, müssen Sie den entsprechenden Port bzw. das Paket installieren und die Datei /etc/ppp/ppp.conf bearbeiten. Sie müssen root sein, um diese Schritte durchführen zu können. Eine Beispieldatei für ppp.conf ist weiter unten angegeben. Weitere Informationen zu den Optionen von ppp.conf bietet die Manual-Seite ppp &man.ppp.8;: adsl: set log phase chat lcp ipcp ccp tun command set timeout 0 enable dns set authname username set authkey password set ifaddr 0 0 add default HISADDR Der Benutzername für den Zugang zu den Diensten Ihres ISP. Das Passwort für Ihren Account. Weil Sie Ihr Passwort in der Datei ppp.conf in Klartext angeben müssen, sollten Sie sicherstellen, dass niemand den Inhalt dieser Datei lesen kann. Die folgende Reihe von Befehlen stellt sicher, dass die Datei nur von root lesbar ist. Zusätzliche Informationen bieten die Manual-Seiten &man.chmod.1; und &man.chown.8;: &prompt.root; chown root:wheel /etc/ppp/ppp.conf &prompt.root; chmod 600 /etc/ppp/ppp.conf Dies wird einen Tunnel für eine PPP-Session zu Ihrem DSL-Router öffnen. Ethernet-DSL-Modems haben eine vorkonfigurierte LAN-IP-Adresse, mit der Sie eine Verbindung aufbauen. Im Falle des Alcatel &speedtouch; Home handelt es sich dabei um die Adresse 10.0.0.138. In der Dokumentation Ihres Routers sollte angegeben sein, welche Adresse Ihr Gerät verwendet. Um den Tunnel zu öffnen und eine PPP-Session zu starten, führen Sie bitte folgenden Befehl aus: &prompt.root; pptp address adsl Vielleicht möchten Sie ein kaufmännisches Und (&) an das Ende oben angegebenen Kommandos anfügen, da pptp sonst den Prompt nicht zurückgibt. Ein virtuelles Tunnel-Device tun wird für das Zusammenspiel der Prozesse pptp und ppp geschaffen. Wenn Sie den Prompt zurückerhalten haben oder der pptp-Prozess das Vorliegen einer Verbindung bestätigt, können Sie den Tunnel folgendermaßen überprüfen: &prompt.user; ifconfig tun0 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00 Opened by PID 918 Wenn Sie nicht in der Lage sein sollten, eine Verbindung aufzubauen, überprüfen Sie die Konfiguration Ihres Routers, den Sie normalerweise per telnet oder mit einem Web-Browser erreichen können. Falls dennoch keine Verbindung zustande kommt, sollten Sie die Ausgabe des Befehls pptp und die Logdatei /var/log/ppp.log von ppp nach Hinweisen auf die Ursache durchsuchen. Satoshi Asami Ursprünglich beigetragen von Guy Helmer Mit Beiträgen von Piero Serini SLIP SLIP Einrichtung eines SLIP-Clients SLIP Client Im Folgenden wird ein Weg beschrieben, SLIP auf einer FreeBSD-Maschine für ein Netzwerk mit festen Hostnamen einzurichten. Bei einer dynamischen Zuweisung des Hostnamens (das heißt wenn sich Ihre Adresse bei jeder Einwahl ändert) wird die Einrichtung wahrscheinlich etwas komplexer aussehen. Bestimmen Sie zuerst, an welcher seriellen Schnittstelle Ihr Modem angeschlossen ist. Viele Leute erzeugen einen symbolischen Link, - wie etwa /dev/modem, der auf den - wirklichen Gerätenamen /dev/cuaaN - (/dev/cuadN unter &os; 6.X) - verweist. Damit ist es Ihnen möglich, - vom eigentlichen Gerätenamen zu abstrahieren, sollten Sie - das Modem einmal an eine andere Schnittstelle anschließen - müssen. Es kann ziemlich umständlich sein, wenn Sie - eine viele Dateien in /etc und - .kermrc-Dateien, die über - das ganze System verstreut sind, anpassen müssen! + wie etwa /dev/modem, der auf den wirklichen + Gerätenamen /dev/cuadN verweist. Damit ist es Ihnen + möglich, vom eigentlichen Gerätenamen zu abstrahieren, + sollten Sie das Modem einmal an eine andere Schnittstelle + anschließen müssen. Es kann ziemlich umständlich sein, + wenn Sie eine viele Dateien in /etc und + .kermrc-Dateien, die über das ganze System + verstreut sind, anpassen müssen! - /dev/cuaa0 - (/dev/cuad0 unter &os; 6.X) ist - COM1, /dev/cuaa1 - (/dev/cuad1 unter &os; 6.X) ist - COM2, etc. + /dev/cuad0 ist + COM1, /dev/cuad1 + ist COM2, etc. Stellen Sie sicher, dass Folgendes in Ihrer Kernelkonfigurationsdatei steht: device sl 1 Dieses pseudo-device ist im GENERIC Kernel enthalten. Falls es von Ihnen nicht gelöscht wurde, sollten Sie hier kein Problem haben. Dinge, die Sie nur einmal erledigen müssen Tragen Sie Ihren lokalen Rechner, das Gateway, sowie die Nameserver in Ihre Datei /etc/hosts ein. Diese Datei sieht bei mir so aus: 127.0.0.1 localhost loghost 136.152.64.181 water.CS.Example.EDU water.CS water 136.152.64.1 inr-3.CS.Example.EDU inr-3 slip-gateway 128.32.136.9 ns1.Example.EDU ns1 128.32.136.12 ns2.Example.EDU ns2 Vergewissern Sie sich, dass in der Datei - /etc/host.conf - hosts vor bind steht, wenn - Sie ein System vor FreeBSD 5.0 verwenden. Ab - FreeBSD 5.0 wird die Datei - /etc/nsswitch.conf verwendet, in deren - -Zeile files vor - dns stehen sollte. Ohne diese Reihenfolge + /etc/host.conf im Abschnitt + hosts: files vor + dns steht. Ohne diese Reihenfolge könnten lustige Dinge passieren. Editieren Sie die Datei /etc/rc.conf. Ihren Hostnamen geben Sie an, indem Sie folgende Zeile bearbeiten: hostname="myname.my.domain" Hier sollte der vollständige Internethostname Ihres Rechners angegeben werden. Defaultroute Den Defaultrouter geben Sie durch die Modifikation folgender Zeile an: defaultrouter="NO" wird zu: defaultrouter="slip-gateway" Erstellen Sie die Datei /etc/resolv.conf, die Folgendes enthält: domain CS.Example.EDU nameserver 128.32.136.9 nameserver 128.32.136.12 Nameserver Domain Name Wie Sie sehen, werden hiermit die Nameserver angegeben. Natürlich hängen die tatsächlichen Domainnamen und Adressen von Ihren Gegebenheiten ab. Legen Sie ein Passwort für root und toor (sowie für alle anderen Accounts die kein Passwort haben) fest. Starten Sie Ihren Rechner neu und überprüfen Sie, ob er mir dem richtigen Hostnamen startet. Aufbau einer SLIP-Verbindung SLIP Verbindungsaufbau Wählen Sie sich ein, geben Sie slip und am Prompt den Namen Ihres Rechners sowie Ihr Passwort ein. Was Sie eingeben müssen, hängt von Ihren Gegebenheiten ab. Wenn Sie Kermit verwenden, können Sie ein Skript ähnlich dem Folgenden verwenden: # kermit setup set modem hayes set line /dev/modem set speed 115200 set parity none set flow rts/cts set terminal bytesize 8 set file type binary # The next macro will dial up and login define slip dial 643-9600, input 10 =>, if failure stop, - output slip\x0d, input 10 Username:, if failure stop, - output silvia\x0d, input 10 Password:, if failure stop, - output ***\x0d, echo \x0aCONNECTED\x0a Natürlich müssen Sie hier Ihren Benutzernamen und Ihr Passwort eintragen. Wenn Sie das getan haben, können Sie am Kermit-Prompt einfach slip eingeben, um sich zu verbinden. Es ist generell eine schlechte Idee, Ihr Passwort in einer unverschlüsselten Textdatei irgendwo im Dateisystem zu speichern. Tun Sie dies auf Ihr eigenes Risiko. Belassen Sie Kermit so (Sie können es mit Ctrl z unterbrechen) und geben Sie als root ein: &prompt.root; slattach -h -c -s 115200 /dev/modem Wenn Sie mit ping Hosts auf der anderen Seite des Routers erreichen können, sind Sie verbunden! Wenn es nicht funktionieren sollte, können Sie versuchen statt als Argument für slattach zu verwenden. Beenden der Verbindung Um slattach zu beenden, geben Sie Folgendes ein: &prompt.root; kill -INT `cat /var/run/slattach.modem.pid` Beachten Sie, dass Sie root sein müssen, um dies durchführen zu können. Kehren Sie zu kermit zurück (mit Hilfe von fg, wenn Sie es unterbrochen haben) und beenden Sie dieses Programm (q). &man.slattach.8; gibt an, dass ifconfig sl0 down verwendet werden soll, um das Interface zu deaktivieren, doch das scheint keinen Unterschied zu machen. (ifconfig sl0 gibt dasselbe aus). Es kann vorkommen, dass Ihr Modem sich weigert, das Trägersignal zu beenden. In diesem Fall starten Sie kermit einfach neu und beenden es wieder. Beim zweiten Versuch geht es meist aus. Lösungen bei Problemen Wenn es nicht funktionieren sollte, können Sie an die Mailingliste &a.net.name; schreiben. Über diese Dinge sind Benutzer bisher gestolpert: Nicht oder in slattach verwenden (Das sollte nicht entscheidend sein, aber einige Benutzer haben berichtet, dass dies ihre Probleme löst). Verwendung von statt (bei einigen Schriftarten kann der Unterschied schwer zu erkennen sein). Probieren Sie ifconfig sl0, um den Status Ihrer Schnittstelle abzufragen. Das Ergebnis könnte beispielsweise so aussehen: &prompt.root; ifconfig sl0 sl0: flags=10<POINTOPOINT> inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00 Wenn &man.ping.8; die Fehlermeldung no route to host ausgibt, kann die Routingtabelle falsch sein. Die Routen können Sie sich mit dem Kommando netstat -r ansehen: &prompt.root; netstat -r Routing tables Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks: (root node) (root node) Route Tree for Protocol Family inet: (root node) => default inr-3.Example.EDU UG 8 224515 sl0 - - localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438 inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - - water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438 (root node) Die Zahlen im Beispiel stammen von einer recht ausgelasteten Maschine. Die Zahlen auf Ihrem System werden, je nach Netzaktivität, von den gezeigten abweichen. Einrichtung eines SLIP-Servers SLIP Server Dieses Dokument bietet Empfehlungen, wie Sie Ihr FreeBSD-System als SLIP-Server einrichten. Typischerweise bedeutet dies, Ihr System so zu, konfigurieren, dass beim Login automatisch eine Verbindung für entfernte SLIP-Clients aufgebaut wird. Voraussetzungen TCP/IP Netze Dieser Abschnitt ist ausgesprochen technischer Natur, weshalb Hintergrundwissen erforderlich ist. Wir gehen davon aus, dass Sie mit dem TCP/IP Protokoll, insbesondere mit Netzwerk- und Rechneradressierung, Netzwerkmasken, Subnetzen, Routing und Routingprotokollen, wie RIP, vertraut sind. Die Konfiguration von SLIP-Diensten auf einem Einwählserver erfordert die Kenntnis dieser Konzepte. Wenn Sie damit nicht vertraut sein sollten, lesen Sie bitte Craig Hunt's TCP/IP Network Administration publiziert von O'Reilly & Associates, Inc. (ISBN Nummer 0-937175-82-X) oder die Bücher von Douglas Comer über das TCP/IP Protokoll. Modem Wir gehen außerdem davon aus, dass Sie Ihr(e) Modem(s) eingerichtet haben und die entsprechenden Systemdateien so konfiguriert haben, dass Logins durch Ihr Modem zugelassen sind. Wenn Sie Ihr System dafür noch nicht vorbereitet haben, lesen Sie bitte , um Ihre Einwahlverbindung zu konfigurieren. Hilfreich sind auch die Manualpages &man.sio.4; mit Informationen zum Gerätetreiber der seriellen Schnittstelle &man.ttys.5;, sowie &man.gettytab.5;, &man.getty.8; und &man.init.8; für Informationen zur Konfiguration von Logins über ein Modem. &man.stty.1; bietet Informationen zur Einstellung der Parameter der seriellen Schnittstelle (etwa von clocal für direkt angeschlossene serielle Geräte). Ein kurzer Überblick Mit der normal verwendeten Konfiguration funktioniert der FreeBSD-SLIP-Server folgendermaßen: Ein SLIP-Benutzer wählt einen FreeBSD-SLIP-Server an und meldet sich mit einer speziellen SLIP-Login-ID ein, wobei /usr/sbin/sliplogin als Shell dieses besonderen Accounts dient. Das Programm sliplogin durchsucht die Datei /etc/sliphome/slip.hosts nach einer passenden Zeile für diesen Account. Falls ein Treffer erzielt wird, verbindet es den seriellen Anschluss mit einem verfügbaren SLIP-Interface und führt das Shellskript /etc/sliphome/slip.login aus, um das SLIP-Interface zu konfigurieren. Ein Beispiel für ein Login eines SLIP-Servers Wenn beispielsweise die Kennung eines SLIP-Benutzers, Shelmerg wäre, könnte der Eintrag des Benutzers Shelmerg in der Datei /etc/master.passwd etwa so aussehen: Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin Wenn sich Shelmerg anmeldet, wird sliplogin die Datei /etc/sliphome/slip.hosts nach einer übereinstimmenden Benutzerkennung durchsuchen. So könnte etwa folgende Zeile in /etc/sliphome/slip.hosts stehen: Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp sliplogin wird die passende Zeile finden, den seriellen Anschluss mit dem nächsten verfügbaren SLIP-Interface verbinden und dann /etc/sliphome/slip.login wie hier dargestellt ausführen: /etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp Wenn alles gut läuft, wird /etc/sliphome/slip.login ein ifconfig für das SLIP-Interface durchführen, mit dem sich sliplogin verbunden hat (in obigem Beispiel ist das slip 0, der als erster Parameter in der Liste an slip.login übergeben wurde), um die lokale IP-Adresse (dc-slip), die entfernte IP-Adresse (sl-helmer), die Netzmaske des SLIP-Interface (0xfffffc00) und alle zusätzlichen Optionen (autocomp) festzulegen. Wenn etwas schief laufen sollte, bietet, sliplogin normalerweise informative Meldungen durch den syslogd-Daemon, der die Meldungen standardmäßig nach /var/log/messages schreibt (sehen Sie hierzu auch in den Manual-Seiten für &man.syslogd.8; und &man.syslog.conf.5; nach). Überprüfen Sie auch /etc/syslog.conf, um zu sehen, was syslogd aufzeichnet und wo es aufgezeichnet wird. Kernelkonfiguration Kernel Konfiguration Der Standardkernel von &os; (GENERIC) bietet bereits SLIP-Unterstützung (&man.sl.4;). Falls Sie einen angepassten Kernel verwenden, müssen Sie sicherstellen, dass Ihre Kernelkonfigurationsdatei folgende Zeile enthält: device sl In der Voreinstellung leitet Ihr &os;-Rechner keine Pakete weiter. Wenn Sie Ihren FreeBSD-SLIP-Server als Router einsetzen möchten, müssen Sie die Datei /etc/rc.conf bearbeiten und den Wert der Variable gateway_enable auf - setzen. + setzen. Dadurch ist sichergestellt, dass + die Routingoptionen auch nach einem Neustart erhalten bleiben. - Danach sollten Sie Ihren Rechner neu starten, damit die neuen - Einstellungen wirksam werden. + Um die Einstellungen sofort anzuwenden, führen Sie den + folgenden Befehl als root-Benutzer aus: + + &prompt.root; /etc/rc.d/routing start Weitere Informationen zur Konfiguration Ihres Kernels, finden Sie in dieses Handbuches. Konfiguration des Sliplogin - Wie bereits erwähnt, gibt es im Verzeichnis - /etc/sliphome drei Dateien, die Teil der + Wie bereits erwähnt, gibt es im Verzeichnis /etc/sliphome drei Dateien, die Teil der Konfiguration für /usr/sbin/sliplogin sind (sliplogin ist in &man.sliplogin.8; beschrieben): slip.hosts, definiert die SLIP-Benutzer sowie deren IP-Adresse; slip.login, womit normalerweise nur das SLIP-Interface konfiguriert wird und (optional) slip.logout, womit die Auswirkungen von slip.login rückgängig gemacht werden, wenn die serielle Verbindung beendet wird. Konfiguration der Datei <filename>slip.hosts</filename> /etc/sliphome/slip.hosts enthält Zeilen, die mindestens vier durch Leerzeichen getrennte Elemente enthalten: Login-Kennung des SLIP-Benutzers Lokale Adresse (lokal für den SLIP-Server) der SLIP-Verbindung Entfernte Adresse der SLIP-Verbindung Netzwerkmaske Die lokalen und entfernten Adressen können Hostnamen sein, deren zugehörige IP-Adresse durch die Datei /etc/hosts oder mithilfe des Domain Name Service aufgelöst wird. Wie die Adressen aufgelöst werden, hängt von den Einstellungen in /etc/nsswitch.conf ab. Die Netzwerkmaske kann ein Name sein, der durch eine Suche in /etc/networks aufgelöst werden kann. Auf einem Beispielsystem, würde die Datei /etc/sliphome/slip.hosts folgendermaßen aussehen: # # login local-addr remote-addr mask opt1 opt2 # (normal,compress,noicmp) # Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp Am Ende der Zeile stehen eine oder mehrere der folgenden Optionen. – keine Header-Kompression – Header werden komprimiert – Header werden komprimiert, sofern die Gegenstelle es erlaubt – ICMP-Pakete werden deaktiviert (ping Pakete werden unterdrückt, statt die Ihnen zur Verfügung stehende Bandbreite aufzubrauchen) SLIP TCP/IP Netze Die Auswahl von lokalen und entfernten Adressen für Ihre SLIP-Verbindung, hängt davon ab, ob Sie ein TCP/IP-Subnetz reservieren oder ob Sie proxy ARP auf Ihrem SLIP-Server verwenden (es handelt sich nicht um echtes proxy ARP, aber dieser Begriff wird in diesem Abschnitt verwendet, um diesen Sachverhalt zu beschreiben). Wenn Sie nicht sicher sind, welche Methode Sie wählen sollen oder wie IP-Adressen zugewiesen werden, lesen Sie bitte in den Büchern zum Thema TCP/IP nach, die als Voraussetzungen für SLIP () angegeben worden sind oder fragen Sie Ihren IP-Netzwerkadministrator. Wenn Sie für Ihre SLIP-Clients ein eigenes Subnetz verwenden, werden Sie die Nummer des Subnetzes aus der Ihnen zugewiesenen IP-Netzwerknummer zuteilen und die IP-Adressen Ihrer SLIP-Clients aus diesem Subnetz verwenden müssen. Dann können Sie eine statische Route zu Ihrem SLIP-Subnetz über Ihren SLIP-Server auf Ihren nächsten IP-Router konfigurieren. Ethernet Wenn Sie aber andererseits die proxy ARP Methode verwenden möchten, werden Sie die IP-Adressen Ihrer SLIP-Clients aus dem Subnetz Ihres SLIP-Server nehmen und die Skripte /etc/sliphome/slip.login /etc/sliphome/slip.logout anpassen müssen, damit diese &man.arp.8; zur Verwaltung der - proxy-ARP-Einträge in der ARP-Tabelle Ihres SLIP-Servers - verwenden + proxy ARP-Einträge in der ARP-Tabelle Ihres + SLIP-Servers verwenden. Konfiguration von <filename>slip.login</filename> Eine typische Datei /etc/sliphome/slip.login sieht folgendermaßen aus: #!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 Diese slip.login Datei führt lediglich ifconfig für das entsprechende SLIP-Interface mit den lokalen und entfernten Adressen und der Netzwerkmaske des SLIP-Interface aus. Wenn Sie sich dafür entschieden haben, die proxy ARP Methode zu verwenden (statt eines separaten Subnetzes für Ihre SLIP-Clients) sollte Ihre Datei /etc/sliphome/slip.login etwa folgendermaßen aussehen: #!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 # Answer ARP requests for the SLIP client with our Ethernet addr /usr/sbin/arp -s $5 00:11:22:33:44:55 pub Die zusätzliche Zeile arp -s $5 00:11:22:33:44:55 pub in der Datei slip.login erzeugt einen ARP-Eintrag in der ARP-Tabelle des SLIP-Servers. Dieser ARP-Eintrag veranlasst den SLIP-Server mit seiner Ethernet MAC-Adresse zu antworten, sobald ein anderer IP-Knoten im Ethernet mit der IP-Adresse des SLIP-Clients Kontakt aufnehmen möchte. Ethernet MAC Adresse Wenn Sie das Beispiel von oben verwenden, achten Sie darauf die Ethernet MAC-Adresse (00:11:22:33:44:55) durch die MAC-Adresse der Ethernetkarte Ihres Systems zu ersetzen. Sonst wird Ihr proxy ARP sicher nicht funktionieren! Sie können die MAC-Adresse Ihres SLIP-Servers herausfinden, indem Sie sich die Ausgabe von netstat -i ansehen. Die zweite Zeile der Ausgabe sollte ungefähr aussehen wie diese hier: ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116 Dies zeigt an, dass die Ethernet MAC-Adresse dieses Systems 00:02:c1:28:5f:4a lautet. Die Punkte in der Ethernet MAC-Adresse, die von netstat -i ausgegeben wird, müssen durch Doppelpunkte ersetzt werden. Bei jeder einstelligen Hexadezimalzahl sollten außerdem führende Nullen hinzugefügt werden, um die Adresse in die Form zu bringen, die von &man.arp.8; verlangt wird. Die Manual-Seite von &man.arp.8; bietet hierzu eine vollständige Übersicht. Wenn Sie die Dateien /etc/sliphome/slip.login und /etc/sliphome/slip.logout erstellen, müssen diese ausführbar gemacht werden (chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout), da sliplogin auf deren Ausführbarkeit angewiesen ist. Konfiguration von <filename>slip.logout</filename> Die Datei/etc/sliphome/slip.logout ist nicht zwingend erforderlich (außer Sie verwenden proxy ARP), aber falls Sie diese Datei erzeugen möchten, ist hier ein Beispiel für ein grundlegendes slip.logout Skript: #!/bin/sh - # # slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down Wenn Sie proxy ARP einsetzen, muss /etc/sliphome/slip.logout den ARP-Eintrag für den SLIP-Client löschen: #!/bin/sh - # # @(#)slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down # Quit answering ARP requests for the SLIP client /usr/sbin/arp -d $5 arp -d $5 löscht den ARP-Eintrag, den die proxy ARP slip.login hinzufügte, als der SLIP-Client sich eingeloggt hatte. Es soll nochmals darauf hingewiesen werden, dass für die Datei /etc/sliphome/slip.logout das Ausführungs-Bit gesetzt werden muss, nachdem die Datei erstellt worden ist (z.B. chmod 755 /etc/sliphome/slip.logout). Überlegungen zum Routing SLIP Routing Wenn Sie nicht die proxy ARP Methode benutzen, um Datenpakete zwischen Ihren SLIP-Clients und dem Rest Ihres Netzwerkes (oder vielleicht dem Internet) zu routen, werden Sie wahrscheinlich statische Routen zu Ihrem nächsten Standardrouter hinzufügen müssen, um Pakete aus dem Subnetz Ihres SLIP-Clients über Ihren SLIP-Server weiterzuleiten. Statische Routen statische Routen Das Hinzufügen von statischen Routen zu Ihrem nächsten Standardrouter kann problematisch sein (oder unmöglich, wenn Sie nicht die erforderliche Berechtigung haben...). Wenn Sie in Ihrer Organisation ein Netzwerk mit mehreren Routern haben, müssen einige Router, wie etwa die von Cisco und Proteon hergestellten, nicht nur mit der statischen Route zum SLIP-Subnetz konfiguriert werden, sondern es muss ihnen auch mitgeteilt werden, über welche statischen Routen sie andere Router informieren sollen. Daher ist einiges an Fachwissen und Problemlösungskompetenz erforderlich, um auf statischen Routen basierendes Routing erfolgreich einzurichten. - - - Der Einsatz von <application>&gated;</application> - - &gated - - - - &gated; ist inzwischen - proprietäre Software und steht der Öffentlichkeit - nicht mehr als Sourcecode zur Verfügung - (weitere Informationen hierzu sind auf der - &gated; - Webseite zu finden). Dieser Abschnitt existiert lediglich, - um die Rückwärtskompatibilität für - diejenigen sicherzustellen, die noch eine ältere Version - verwenden. - - - Eine Alternative zu dem aufwändigen Einsatz von - statischen Routen ist die Installation von - &gated; auf Ihrem FreeBSD-SLIP-Server. - &gated; kann so konfiguriert - werden, dass er die passenden Routingprotokolle (RIP/OSPF/BGP/EGP) - verwendet, um die anderen Router über Ihr SLIP-Subnetz zu - informieren. Sie müssen die Datei - /etc/gated.conf erstellen, - um &gated; zu konfigurieren. - Hier ist eine Beispieldatei, ähnlich derjenigen, - die der Autor auf einem FreeBSD-SLIP-Server verwendet hat: - - # -# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5 -# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface -# -# -# tracing options -# -traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ; - -rip yes { - interface sl noripout noripin ; - interface ed ripin ripout version 1 ; - traceoptions route ; -} ; - -# -# Turn on a bunch of tracing info for the interface to the kernel: -kernel { - traceoptions remnants request routes info interface ; -} ; - -# -# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP -# - -export proto rip interface ed { - proto direct { - xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections - } ; -} ; - -# -# Accept routes from RIP via ed Ethernet interfaces - -import proto rip interface ed { - all ; -} ; - - RIP - Die oben angegebene Beispieldatei - gated.conf sendet Routinginformationen, - die das SLIP-Subnetz xxx.xxx.yy - betreffen, mit Hilfe von RIP zum Ethernet. Wenn Sie einen - anderen Ethernet-Treiber als ed - verwenden, werden Sie die Einträge, - die sich auf ed beziehen, entsprechend - abändern müssen. Mit dieser Beispieldatei wird auch - die Aufzeichnung der Aktivitäten von - &gated; in der Datei - /var/tmp/gated.output - eingerichtet, was für eine eventuelle Fehlersuche - nützlich sein kann. Sie können diese Option - natürlich auch abschalten, wenn - &gated; - bei Ihnen ohne Probleme läuft. Sie müssen - xxx.xxx.yy noch durch die - Netzwerkadresse Ihres SLIP-Subnetzes ersetzen (ändern - Sie die Netzmaske im Abschnitt proto direct - ebenfalls). - - Wenn Sie &gated; auf Ihrem System - installiert und konfiguriert haben, müssen Sie die - FreeBSD-Startskripten noch anweisen, - &gated; - statt routed zu verwenden. Am - einfachsten können Sie dies erreichen, indem Sie - die Variablen router und - router_flags in der Datei - /etc/rc.conf entsprechend setzen. - Die Manual-Seite für &gated; bietet - weitere Informationen zu den Kommandozeilenparametern. - diff --git a/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml b/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml index bd58eb1fa5..1ea0a19cbe 100644 --- a/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml @@ -1,3090 +1,3040 @@ Martin Heinen Übersetzt von Serielle Datenübertragung Übersicht serielle Datenübertragung &unix; Systeme unterstützten schon immer die serielle Datenübertragung. Tatsächlich wurden Ein- und Ausgaben auf den ersten &unix; Maschinen über serielle Leitungen durchgeführt. Seit der Zeit, in der ein durchschnittlicher Terminal aus einem seriellen Drucker mit 10 Zeichen/Sekunde und einer Tastatur bestand, hat sich viel verändert. Dieses Kapitel behandelt einige Möglichkeiten, serielle Datenübertragung unter FreeBSD zu verwenden. Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen: Wie Sie Terminals an Ihr FreeBSD anschließen. Wie Sie sich mit einem Modem auf einem entfernten Rechner einwählen. Wie Sie entfernten Benutzern erlauben, sich mit einem Modem in Ihr System einzuwählen. Wie Sie Ihr System über eine serielle Konsole booten. Bevor Sie dieses Kapitel lesen, sollten Sie einen neuen Kernel konfigurieren und installieren können (). Das Berechtigungskonzept von &unix; und Prozesse verstehen (). Zudem sollten Sie Zugriff auf die Handbücher der seriellen Komponenten (Modem oder Multiportkarte) haben, die Sie mit FreeBSD verwenden wollen. Einführung Begriffe bits-per-second bps Bits pro Sekunde – Einheit für die Übertragungsgeschwindigkeit. DEE (DTE) DEE DTE Datenendeinrichtung (Data Terminal Equipment) – zum Beispiel Ihr Computer. DÜE (DCE) DÜE DCE Datenübertragungseinrichtung (Data Communications Equipment) – Ein Modem. RS-232 RS-232C Kabel EIA (Electronic Industries Association) Norm für die serielle Datenübertragung. In diesem Abschnitt wird der Begriff Baud nicht für Übertragungsgeschwindigkeiten gebraucht. Baud bezeichnet elektrische Zustandswechsel pro Zeiteinheit, die Taktfrequenz, während bps (Bits pro Sekunde) der richtige Begriff für die Übertragungsgeschwindigkeit ist (die meisten Pedanten sollten damit zufrieden sein). Kabel und Schnittstellen Um ein Modem oder einen Terminal an Ihr FreeBSD-System anzuschließen, muss Ihr Computer über eine serielle Schnittstelle verfügen. Zusätzlich brauchen Sie noch das passende Kabel, um das Gerät mit der Schnittstelle zu verbinden. Wenn Sie mit Ihren Geräten und den nötigen Kabeln schon vertraut sind, können Sie diesen Abschnitt überspringen. Kabel Es gibt verschiedene serielle Kabel. Die zwei häufigsten sind Nullmodemkabel und Standard-RS-232-Kabel. Die Dokumentation Ihrer Hardware sollte beschreiben, welchen Kabeltyp Sie benötigen. Nullmodemkabel Nullmodemkabel Ein Nullmodemkabel verbindet einige Signale, wie die Betriebserde, eins zu eins, andere Signale werden getauscht: Die Sende- und Empfangsleitungen werden zum Beispiel gekreuzt. Sie können das Kabel für die Anbindung eines Terminals auch selbst herstellen. Die folgende Tabelle enthält die Signalnamen von RS-232C sowie die Pinbelegung für einen Stecker vom Typ DB-25. Beachten Sie dabei aber, dass der Standard zwar eine direkte Verbindung beider Pin 1 (Protective Ground) vorschreibt, diese aber in vielen Fällen nicht vorhanden ist. Einige Terminals benötigen nur die Pins 2, 3 und 7 für eine korrekte Funktion, während andere eine unterschiedliche Konfiguration als die in den folgenden Beispielen gezeigte benötigen. Nullmodemkabel vom Typ DB-25-zu-DB-25 Signal Pin # Pin # Signal SG 7 verbunden mit 7 SG TD 2 verbunden mit 3 RD RD 3 verbunden mit 2 TD RTS 4 verbunden mit 5 CTS CTS 5 verbunden mit 4 RTS DTR 20 verbunden mit 6 DSR DTR 20 verbunden mit 8 DCD DSR 6 verbunden mit 20 DTR DCD 8 verbunden mit 20 DTR
Die folgenden zwei Schemata werden heutzutage ebenfalls häufig eingesetzt: Nullmodemkabel vom Typ DB-9-zu-DB-9 Signal Pin # Pin # Signal RD 2 verbunden mit 3 TD TD 3 verbunden mit 2 RD DTR 4 verbunden mit 6 DSR DTR 4 verbunden mit 1 DCD SG 5 verbunden mit 5 SG DSR 6 verbunden mit 4 DTR DCD 1 verbunden mit 4 DTR RTS 7 verbunden mit 8 CTS CTS 8 verbunden mit 7 RTS
Nullmodemkabel vom Typ DB-9-zu-DB-25 Signal Pin # Pin # Signal RD 2 verbunden mit 2 TD TD 3 verbunden mit 3 RD DTR 4 verbunden mit 6 DSR DTR 4 verbunden mit 8 DCD SG 5 verbunden mit 7 SG DSR 6 verbunden mit 20 DTR DCD 1 verbunden mit 20 DTR RTS 7 verbunden mit 5 CTS CTS 8 verbunden mit 4 RTS
Wird ein Pin eines Kabels mit zwei Pins des anderen Kabels verbunden, werden dazu in der Regel zuerst die beiden Pins mit einem kurzem Draht verbunden. Danach wird dieser Draht mit dem Pin des anderen Endes verbunden. Die eben besprochenen Schemata scheinen die beliebtesten zu sein. Es gibt aber noch weitere Varianten. Im Buch RS-232 Made Easy wird beispielsweise SG mit SG verbunden, TD mit RD, RTS und CTS mit DCD, DTR mit DSR, und umgekehrt.
Standard RS-232C Kabel RS-232C Kabel Ein Standard-RS-232C-Kabel verbindet alle Signale direkt, das heißt das Signal Transmitted Data wird mit dem Signal Transmitted Data der Gegenstelle verbunden. Dieses Kabel wird benötigt, um ein Modem mit einem FreeBSD-System zu verbinden. Manche Terminals benötigen dieses Kabel ebenfalls.
Schnittstellen Über serielle Schnittstellen werden Daten zwischen dem FreeBSD-System und dem Terminal übertragen. Dieser Abschnitt beschreibt die verschiedenen Schnittstellen und wie sie unter FreeBSD angesprochen werden. Arten von Schnittstellen Da es verschiedene Schnittstellen gibt, sollten Sie vor dem Kauf oder Selbstbau eines Kabels sicherstellen, dass dieses zu den Schnittstellen Ihres Terminals und FreeBSD-Systems passt. Die meisten Terminals besitzen DB-25-Stecker. Personal Computer haben DB-25- oder DB-9-Stecker. Wenn Sie eine serielle Multiportkarte für Ihren PC besitzen, haben Sie vielleicht RJ-12- oder RJ-45-Anschlüsse. Die Dokumentation Ihrer Geräte sollte Aufschluss über den Typ der benötigten Anschlüsse geben. Oft hilft es, wenn Sie sich den Anschluss einfach ansehen. Schnittstellenbezeichnung Unter FreeBSD sprechen Sie die serielle Schnittstelle (Port) über einen Eintrag im /dev Verzeichnis an. Es gibt dort zwei verschiedene Einträge: Schnittstellen für eingehende Verbindungen werden /dev/ttydN genannt. Dabei ist N die Nummer der Schnittstelle, deren Zählung bei Null beginnt. Allgemein wird diese Schnittstelle für Terminals benutzt. Diese Schnittstelle funktioniert nur, wenn ein Data Carrier Detect Signal (DCD) vorliegt. Für ausgehende Verbindungen wird /dev/cuadN verwendet. Dieser Port wird normalerweise nur von Modems genutzt. Sie können ihn allerdings für Terminals benutzen, die das Data Carrier Detect - Signal nicht unterstützen. - - Unter &os;5.X wurden Ports für ausgehende - Verbindungen mit - /dev/cuaaN - bezeichnet. - + Signal nicht unterstützen. Wenn Sie einen Terminal an die erste serielle Schnittstelle (COM1 in &ms-dos;), angeschlossen haben, sprechen Sie ihn über /dev/ttyd0 an. Wenn er an der zweiten seriellen Schnittstelle angeschlossen ist, verwenden Sie /dev/ttyd1, usw.
Kernelkonfiguration In der Voreinstellung benutzt FreeBSD vier serielle Schnittstellen, die in &ms-dos;-Kreisen als COM1, COM2, COM3 und COM4 bekannt sind. Momentan unterstützt FreeBSD einfache Multiportkarten (z.B. die BocaBoard 1008 und 2016) und bessere wie die von Digiboard und Stallion Technologies. In der Voreinstellung sucht der Kernel allerdings nur nach den Standardanschlüssen. Um zu überprüfen, ob der Kernel eine Ihrer seriellen Schnittstellen erkennt, achten Sie auf die Meldungen beim Booten, oder schauen sich diese später mit /sbin/dmesg an. Insbesondere sollten Sie auf Meldungen achten, die mit den Zeichen sio anfangen. Das folgende Kommando zeigt Ihnen nur die Meldungen an, die die Folge sio enthalten: &prompt.root; /sbin/dmesg | grep 'sio' Auf einem System mit vier seriellen Schnittstellen sollte der Kernel die folgenden Meldungen ausgeben: sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A Wenn Ihr Kernel nicht alle seriellen Schnittstellen erkennt, müssen Sie Ihren Kernel über die Datei /boot/device.hints konfigurieren. Zusätzlich können Sie Einträge für Geräte, die auf Ihrem System nicht vorhanden sind, aus dem Kernel entfernen. Die Hilfeseite &man.sio.4; enthält weitere Informationen zu seriellen Schnittstellen und Multiportkarten. Seien Sie vorsichtig, wenn Sie Konfigurationsdateien von älteren FreeBSD-Versionen verwenden, da sich die Syntax und die Bedeutung der Optionen zwischen verschiedenen Versionen geändert hat. port IO_COM1 ist ein Ersatz für port 0x3f8, IO_COM2 bedeutet port 0x2f8, IO_COM3 bedeutet port 0x3e8 und IO_COM4 steht für port 0x2e8. Die angegebenen IO-Adressen sind genau wie die Interrupts 4, 3, 5 und 9 üblich für serielle Schnittstellen. Beachten Sie bitte, dass sich normale serielle Schnittstellen auf ISA-Bussen keine Interrupts teilen können. Multiportkarten besitzen zusätzliche Schaltkreise, die es allen 16550As auf der Karte erlauben, sich einen oder zwei Interrupts zu teilen. Gerätedateien Die meisten Geräte im Kernel werden durch Gerätedateien in /dev angesprochen. Die sio Geräte werden durch /dev/ttydN für eingehende Verbindungen und durch /dev/cuadN für ausgehende Verbindungen angesprochen. Zum Initialisieren der Geräte stellt FreeBSD die Dateien - /dev/ttydN und - /dev/cuadN (unter - &os; 6.X) beziehungsweise - /dev/ttyidN und - /dev/cuaiaN + /dev/ttydN.init und + /dev/cuadN.init zur Verfügung. Zusätzlich existieren Dateien für das Sperren von Gerätedateien (Locking). Dabei handelt es sich um die Dateien /dev/ttydN.lock und - /dev/cuadN.lock - (unter &os; 6.X) beziehungsweise um die Dateien - /dev/ttyldN und - /dev/cualaN. - Diese Dateien werden - benutzt, um Kommunikationsparameter beim Öffnen eines Ports - vorzugeben. Für Modems, die zur Flusskontrolle - RTS/CTS benutzen, kann damit + /dev/cuadN.lock. + Diese Dateien werden benutzt, um Kommunikationsparameter beim + Öffnen eines Ports vorzugeben. Für Modems, die zur + Flusskontrolle RTS/CTS benutzen, kann damit crtscts gesetzt werden. Die Geräte /dev/ttyldN und /dev/cualaN (locking devices) werden genutzt, um bestimmte Parameter festzuschreiben und vor Veränderungen zu schützen. Weitere Informationen zu Terminals finden Sie in &man.termios.4;, &man.sio.4; erklärt die Dateien zum Initialisieren und Sperren der Geräte, &man.stty.1; beschreibt schließlich Terminal-Einstellungen. Konfiguration der seriellen Schnittstelle ttyd cuad Anwendungen benutzen normalerweise die Geräte ttydN oder cuadN. Das Gerät besitzt einige Voreinstellungen für Terminal-I/O, wenn es von einem Prozess geöffnet wird. Mit dem folgenden Kommando können Sie sich diese Einstellungen ansehen: &prompt.root; stty -a -f /dev/ttyd1 Sie können diese Einstellungen verändern, sie bleiben allerdings nur solange wirksam, bis das Gerät geschlossen wird. Wenn das Gerät danach wieder geöffnet wird, sind die Voreinstellungen wieder wirksam. Um die Voreinstellungen zu ändern, öffnen Sie das Gerät, das zum Initialisieren dient und verändern dessen Einstellungen. Um beispielsweise für ttyd5 den Modus, 8-Bit Kommunikation und Flusssteuerung einzuschalten, setzen Sie das folgende Kommando ab: &prompt.root; stty -f /dev/ttyd5.init clocal cs8 ixon ixoff rc-Dateien rc.serial In /etc/rc.d/rc.serial werden die systemweiten Voreinstellungen für serielle Geräte vorgenommen. Um zu verhindern, dass Einstellungen von Anwendungen verändert werden, können Sie die Geräte zum Festschreiben von Einstellungen (locking devices) benutzen. Wenn sie beispielsweise die Geschwindigkeit von ttyd5 auf 57600 bps festlegen wollen, benutzen Sie das folgende Kommando: &prompt.root; stty -f /dev/ttyld5 57600 Eine Anwendung, die ttyd5 öffnet, kann nun nicht mehr die Geschwindigkeit ändern und muss 57600 bps benutzen. Die Geräte zum Initialisieren und Festschreiben von Einstellungen sollten selbstverständlich nur von root beschreibbar sein.
Sean Kelly Beigetragen von Terminals Terminals Wenn Sie sich nicht an der Konsole oder über ein Netzwerk an Ihrem FreeBSD-System anmelden können, sind Terminals ein bequemer und billiger Weg auf Ihr System zuzugreifen. Dieser Abschnitt beschreibt wie Sie Terminals mit FreeBSD benutzen. Terminaltypen Das ursprüngliche &unix; System besaß keine Konsolen. Zum Anmelden und Starten von Programmen wurden stattdessen Terminals benutzt, die an den seriellen Schnittstellen des Rechners angeschlossen waren. Dies entspricht der Benutzung eines Modems zum Anmelden auf einem entfernten System, um dort mit einem Terminalemulator im Textmodus zu arbeiten. Die Konsolen heutiger PCs besitzen sehr gute Grafikfähigkeiten, trotzdem gibt es in fast jedem &unix; System die Möglichkeit, sich über die serielle Schnittstelle anzumelden; FreeBSD ist da keine Ausnahme. Sie können sich an einem Terminal anmelden und dort jedes Textprogramm, das Sie normalerweise an der Konsole oder in einem xterm Fenster im X Window System benutzen, laufen lassen. Im kommerziellen Umfeld können Sie viele Terminals an ein FreeBSD-System anschließen und diese auf den Arbeitsplätzen Ihrer Angestellten aufstellen. Im privaten Umfeld kann ein älterer IBM PC oder &macintosh; als Terminal dienen. Damit verwandeln Sie einen Einzelarbeitsplatz in ein leistungsfähiges Mehrbenutzersystem. FreeBSD kennt drei verschiedene Terminals: Dumb terminals, PCs, die als Terminals fungieren, X Terminals. Die folgenden Abschnitte beschreiben jeden dieser Terminals. Dumb-Terminals Dumb-Terminals (unintelligente Datenstationen) sind Geräte, die über die serielle Schnittstelle mit einem Rechner verbunden werden. Sie werden unintelligent genannt, weil sie nur Text senden und empfangen und keine Programme laufen lassen können. Alle Programme, wie Texteditoren, Compiler oder Spiele befinden sich auf dem Rechner, der mit dem Terminal verbunden ist. Es gibt viele Dumb-Terminals, die von verschiedenen Herstellern produziert werden, wie zum Beispiel der VT-100 von Digital Equipment Corporation oder der WY-75 von Wyse. So gut wie jeder der verschiedenen Terminals sollte mit FreeBSD zusammenarbeiten. Manche High-End Geräte verfügen sogar über Grafikfähigkeiten, die allerdings nur von spezieller Software genutzt werden kann. Dumb-Terminals sind in Umgebungen beliebt, in denen keine Grafikanwendungen, wie zum Beispiel X-Programme, laufen müssen. PCs, die als Terminal fungieren Jeder PC kann die Funktion eines Dumb-Terminals, der ja nur Text senden und empfangen kann, übernehmen. Dazu brauchen Sie nur das richtige Kabel und eine Terminalemulation, die auf dem PC läuft. Diese Konfiguration ist im privaten Umfeld sehr beliebt. Wenn Ihr Ehepartner zum Beispiel gerade an der FreeBSD-Konsole arbeitet, können Sie einen weniger leistungsstarken PC, der als Terminal mit dem FreeBSD-System verbunden ist, benutzen, um dort gleichzeitig im Textmodus zu arbeiten. Bereits im Basissystem sind mindestens zwei Werkzeuge vorhanden, die Sie zur Arbeit über eine serielle Konsole einsetzen können: &man.cu.1; sowie &man.tip.1;. Um sich von einem &os;-System aus über eine serielle Verbindung mit einem anderen System zu verbinden, geben Sie folgenden Befehl ein: &prompt.root; cu -l serial-port-device serial-port-device ist hier der Name der Gerätedatei, die einer bestimmten seriellen Schnittstelle - Ihres Systems zugewiesen ist. Diese Gerätedateien wurden - vor &os; 6.0 als - /dev/cuaaN, - seither als + Ihres Systems zugewiesen ist. Diese Gerätedateien werden /dev/cuadN - bezeichnet. + genannt. Der Buchstabe N muss dabei durch die Nummer des seriellen Ports Ihres Systems ersetzt werden. Beachten Sie, dass die Numerierung dieses Daten (im Gegensatz etwa zu &ms-dos;-kompatiblen Systemen) unter &os; mit Null und nicht mit Eins beginnt. Die Schnittstelle COM1 entspricht daher in der Regel /dev/cuad0 unter &os;. In der Ports-Sammlung finden sich weitere Programme (beispielsweise comms/minicom), mit denen Sie eine Verbindung über eine serielle Schnittstelle herstellen können. X-Terminals X-Terminals sind die ausgereiftesten der verfügbaren Terminals. Sie werden nicht mit der seriellen Schnittstelle sondern mit einem Netzwerk, wie dem Ethernet, verbunden. Diese Terminals sind auch nicht auf den Textmodus beschränkt, sondern können jede X-Anwendung darstellen. X-Terminals sind hier nur der Vollständigkeit halber aufgezählt. Die Einrichtung von X-Terminals wird in diesem Abschnitt nicht beschrieben. Konfiguration Im Folgenden wird beschrieben, wie Sie Ihr FreeBSD-System konfigurieren müssen, um sich an einem Terminal anzumelden. Dabei wird vorausgesetzt, dass der Kernel bereits die serielle Schnittstelle, die mit dem Terminal verbunden ist, unterstützt. Weiterhin sollte der Terminal schon angeschlossen sein. Aus wissen Sie, dass init für das Initialisieren des Systems und den Start von Prozessen zum Zeitpunkt des Systemstarts verantwortlich ist. Unter anderem liest init /etc/ttys ein und startet für jeden verfügbaren Terminal einen getty Prozess. getty wiederum fragt beim Anmelden den Benutzernamen ab und startet login. Um Terminals auf Ihrem FreeBSD-System einzurichten, führen Sie folgenden Schritte als root durch: Wenn er noch nicht da ist, fügen Sie einen Eintrag in /etc/ttys für die serielle Schnittstelle aus /dev ein. Geben Sie /usr/libexec/getty als auszuführendes Programm an. Als Parameter für getty geben Sie den passenden Verbindungstyp aus /etc/gettytab an. Geben Sie den Terminaltyp an. Aktivieren Sie den Anschluss. Geben Sie die Sicherheit des Anschlusses an. Veranlassen Sie init /etc/ttys erneut zu lesen. Optional können Sie in /etc/gettytab auch einen auf Ihre Zwecke angepassten Terminaltyp erstellen. Die genaue Vorgehensweise wird in diesem Abschnitt nicht erklärt, aber die Manualpages von &man.gettytab.5; und &man.getty.8; enthalten dazu weitere Informationen. Hinzufügen eines Eintrags in <filename>/etc/ttys</filename> In /etc/ttys werden alle Terminals aufgeführt, an denen Sie sich auf dem FreeBSD-System anmelden können. Hier findet sich zum Beispiel ein Eintrag für die erste virtuelle Konsole - /dev/ttyv0, der es Ihnen ermöglicht, + /dev/ttyv0, der es Ihnen ermöglicht, sich dort anzumelden. Die Datei enthält des Weiteren Einträge für andere virtuelle Konsolen, serielle Schnittstellen und Pseudoterminals. Wenn Sie einen Terminal konfigurieren wollen, fügen sie einen Eintrag für den Namen des Gerätes aus /dev ohne das Präfix /dev hinzu. Zum Beispiel wird /dev/ttyv0 als ttyv0 aufgeführt. In der Voreinstellung enthält /etc/ttys Einträge für die ersten - vier seriellen Schnittstellen. Wenn Sie an eine von diesen einen + vier seriellen Schnittstellen: ttyd0 bis + ttyd3. Wenn Sie an eine von diesen einen Terminal anschließen, brauchen Sie keinen weiteren Eintrag hinzuzufügen. Einträge in <filename>/etc/ttys</filename> hinzufügen Angenommen, wir wollen an ein System zwei Terminals anschließen: Einen Wyse-50 und einen alten 286 IBM PC, der mit Procomm einen VT-100 Terminal emuliert. Den Wyse-Terminal verbinden wir mit der zweiten seriellen Schnittstelle und den 286 mit der sechsten seriellen Schnittstelle (einem Anschluss auf einer Multiportkarte). Die entsprechenden Einträge in /etc/ttys würden dann wie folgt aussehen: ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure Das erste Feld gibt normalerweise den Namen der Gerätedatei aus /dev an. Im zweiten Feld wird das auszuführende Kommando, normal ist das &man.getty.8;, angegeben. getty initialisiert und öffnet die Verbindung, setzt die Geschwindigkeit und fragt den Benutzernamen ab. Danach führt es &man.login.1; aus. getty akzeptiert einen optionalen Parameter auf der Kommandozeile, den Verbindungstyp, der die Eigenschaften der Verbindung, wie die Geschwindigkeit und Parität, festlegt. Die Typen und die damit verbundenen Eigenschaften liest getty aus /etc/gettytab. /etc/gettytab enthält viele Einträge sowohl für neue wie auch alte Terminalverbindungen. Die meisten Einträge, die mit std beginnen, sollten mit einem festverdrahteten Terminal funktionieren. Für jede Geschwindigkeit zwischen 110 bps und 115200 bps gibt es einen std Eintrag. Natürlich können Sie auch eigene Einträge erstellen, Informationen dazu finden Sie in &man.gettytab.5;. Wenn Sie den Verbindungstyp in /etc/ttys eintragen, stellen Sie bitte sicher, dass die Kommunikationseinstellungen auch mit denen des Terminals übereinstimmen. In unserem Beispiel verwendet der Wyse-50 keine Parität und 38400 bps, der 286 PC benutzt ebenfalls keine Parität und arbeitet mit 19200 bps. Das dritte Feld gibt den Terminaltyp an, der normalerweise mit diesem Anschluss verbunden ist. Für Einwählverbindungen wird oft unknown oder dialup benutzt, da sich die Benutzer praktisch mit beliebigen Terminals oder Emulatoren anmelden können. Bei festverdrahteten Terminals ändert sich der Typ nicht, so dass Sie in diesem Feld einen richtigen Typ aus der &man.termcap.5; Datenbank angeben können. In unserem Beispiel benutzen wir für den Wyse-50 den entsprechenden Typ aus &man.termcap.5;, der 286 PC wird als VT-100, den er ja emuliert, angegeben. Das vierte Feld gibt an, ob der Anschluss aktiviert werden soll. Wenn Sie hier on angeben, startet init das Programm, das im zweiten Feld angegeben wurde (normal getty). Wenn Sie off angeben, wird das Kommando aus dem zweiten Feld nicht ausgeführt und folglich können Sie sich dann an dem betreffenden Terminal nicht anmelden. Im letzten Feld geben Sie die Sicherheit des Anschlusses an. Wenn Sie hier secure angeben, darf sich root (oder jeder Account mit der UID 0) über diese Verbindung anmelden. Wenn Sie insecure angeben, dürfen sich nur unprivilegierte Benutzer anmelden. Diese können später mit &man.su.1; oder einem ähnlichen Mechanismus zu root wechseln. Es wird dringend empfohlen, insecure nur für Terminals hinter verschlossenen Türen zu verwenden, da Sie mit su leicht zum Superuser werden können. <command>init</command> zwingen, <filename>/etc/ttys</filename> erneut zu lesen Nachdem Sie die nötigen Änderungen in /etc/ttys vorgenommen haben, schicken Sie init ein SIGHUP-Signal (hangup), um es zu veranlassen, seine Konfigurationsdatei neu zu lesen: &prompt.root; kill -HUP 1 Da init immer der erste Prozess auf einem System ist, besitzt es immer die PID 1. Wenn alles richtig eingerichtet ist, alle Kabel angeschlossen und die Terminals eingeschaltet sind, sollte für jeden Terminal ein getty Prozess laufen und auf jedem Terminal sollten Sie eine Anmeldeaufforderung sehen. Fehlersuche Selbst wenn Sie den Anweisungen akribisch gefolgt sind, kann es immer noch zu Fehlern beim Einrichten eines Terminals kommen. Die folgende Aufzählung von Symptomen beschreibt mögliche Lösungen: Es erscheint kein Anmeldeprompt Stellen Sie sicher, dass der Terminal verbunden und eingeschaltet ist. Wenn ein PC als Terminal fungiert, überprüfen Sie, dass die Terminalemulation auf den richtigen Schnittstellen läuft. Stellen Sie sicher, dass Sie das richtige Kabel verwenden und dass das Kabel fest mit dem Terminal und dem FreeBSD-Rechner verbunden ist. Stellen Sie sicher, dass die Einstellungen für die Geschwindigkeit (bps) und Parität auf dem FreeBSD System und dem Terminal gleich sind. Wenn Ihr Terminal einen Bildschirm besitzt, überprüfen Sie die richtige Einstellung von Helligkeit und Kontrast. Wenn Ihr Terminal druckt, stellen Sie die ausreichende Versorgung mit Papier und Tinte sicher. Überprüfen Sie mit ps, dass der getty Prozess für den Terminal läuft: &prompt.root; ps -axww|grep getty Für jeden Terminal sollten Sie einen Eintrag sehen. Aus dem folgenden Beispiel erkennen Sie, dass getty auf der zweiten seriellen - Schnittstelle läuft und den Verbindungstyp - std.38400 aus + Schnittstelle tyyd1 läuft und den + Verbindungstyp std.38400 aus /etc/gettytab benutzt: 22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1 Wenn getty nicht läuft, überprüfen Sie, ob der Anschluss in /etc/ttys aktiviert ist. Haben Sie kill -HUP 1 abgesetzt, nachdem Sie /etc/ttys geändert hatten? Wenn getty läuft, aber der Terminal immer noch kein Anmeldeprompt ausgibt, oder Sie am Anmeldeprompt nichts eingeben können, kann es sein, dass Ihr Terminal oder Kabel keinen Hardware-Handshake unterstützt. Ändern Sie dann den Eintrag std.38400 in /etc/ttys zu 3wire.38400. Nachdem Sie /etc/ttys geändert haben, setzen Sie das Kommando kill -HUP 1 ab. Der Eintrag 3wire besitzt ähnliche Eigenschaften wie der Eintrag std, ignoriert aber den Hardware-Handshake. Wenn Sie den Eintrag 3wire verwenden, müssen Sie vielleicht die Geschwindigkeit verkleinern oder die Software-Flusssteuerung aktivieren, um Pufferüberläufe zu vermeiden. Es erscheinen nur unverständliche Zeichen Stellen Sie sicher, dass die Einstellungen für die Geschwindigkeit (bps) und Parität auf dem FreeBSD System und dem Terminal gleich sind. Kontrollieren Sie den getty Prozess und stellen Sie sicher, dass der richtige Verbindungstyp aus /etc/gettytab benutzt wird. Wenn das nicht der Fall ist, editieren Sie /etc/ttys und setzen das Kommando kill-HUP 1 ab. Zeichen erscheinen doppelt und eingegebene Passwörter erscheinen im Klartext Stellen Sie den Terminal oder die Terminalemulation von half duplex oder local echo auf full duplex. um. Guy Helmer Beigetragen von Sean Kelly Mit Anmerkungen von Einwählverbindungen Einwählverbindungen Das Einrichten von Einwählverbindungen ähnelt dem Anschließen von Terminals, nur dass Sie anstelle eines Terminals ein Modem verwenden. Externe und interne Modems Externe Modems sind für Einwählverbindungen besser geeignet, da sie die Konfiguration in nicht flüchtigem RAM speichern können. Zudem verfügen Sie über Leuchtanzeigen, die den Status wichtiger RS-232 Signale anzeigen und unter Umständen Besucher beeindrucken können. Interne Modems verfügen normalerweise nicht über nicht flüchtiges RAM und lassen sich meist nur über DIP-Schalter konfigurieren. Selbst wenn ein internes Modem Leuchtanzeigen besitzt, sind diese meist schwer einzusehen, wenn das Modem eingebaut ist. Modems und Kabel Modem Mit einem externen Modem müssen Sie das richtige Kabel benutzen: Ein Standard RS-232C Kabel, bei dem die folgenden Signale miteinander verbunden sind, sollte ausreichen: Signalnamen Abkürzung Bedeutung RD Received Data TD Transmitted Data DTR Data Terminal Ready DSR Data Set Ready DCD Data Carrier Detect (dadurch erkennt RS-232 das Signal Received Line) SG Signal Ground RTS Request to Send CTS Clear to Send
Ab Geschwindigkeiten von 2400 bps benötigt FreeBSD die Signale RTS und CTS für die Flusssteuerung. Das Signal CD zeigt an, ob ein Träger vorliegt, das heißt ob die Verbindung aufgebaut ist oder beendet wurde. DTR zeigt an, dass das Gerät betriebsbereit ist. Es gibt einige Kabel, bei denen nicht alle nötigen Signale verbunden sind. Wenn Sie Probleme der Art haben, dass zum Beispiel die Sitzung nicht beendet wird, obwohl die Verbindung beendet wurde, kann das an einem solchen Kabel liegen. Wie andere &unix; Betriebssysteme auch, benutzt FreeBSD Hardwaresignale, um festzustellen, ob ein Anruf beantwortet wurde, eine Verbindung beendet wurde, oder um die Verbindung zu schließen und das Modem zurückzusetzen. FreeBSD vermeidet es, dem Modem Kommandos zu senden, oder den Statusreport des Modems abzufragen. Falls Sie ein Benutzer von PC-basierenden Bulletin Board Systemen sind, mag Sie das verwundern.
Schnittstellenbausteine FreeBSD unterstützt EIA RS-232C (CCITT V.24) serielle Schnittstellen, die auf den NS8250, NS16450, NS16550 oder NS16550A Bausteinen basieren. Die Bausteine der Serie 16550 verfügen über einen 16 Byte großen Puffer, der als FIFO angelegt ist. Wegen Fehler in der FIFO-Logik kann der Puffer in einem 16550 Baustein allerdings nicht genutzt werden, das heißt der Baustein muss als 16450 betrieben werden. Bei allen Bausteinen ohne Puffer und dem 16550 Baustein muss jedes Byte einzeln von dem Betriebssystem verarbeitet werden, was Fehler bei hohen Geschwindigkeiten oder großer Systemlast erzeugt. Es sollten daher nach Möglichkeit serielle Schnittstellen, die auf 16550A Bausteinen basieren, eingesetzt werden. Überblick getty Wie bei Terminals auch, startet init für jede serielle Schnittstelle, die eine Einwählverbindung zur Verfügung stellt, einen getty Prozess. Wenn das Modem beispielsweise an /dev/ttyd0 angeschlossen ist, sollte in der Ausgabe von ps ax eine Zeile wie die folgende erscheinen: 4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0 Wenn sich ein Benutzer einwählt und die Verbindung aufgebaut ist, zeigt das Modem dies durch das CD Signal (Carrier Detect) an. Der Kernel merkt, dass ein Signal anliegt und vollendet das Öffnen der Schnittstelle durch getty. Dann sendet getty das Anmeldeprompt mit der ersten für die Verbindung vereinbarten Geschwindigkeit und wartet auf eine Antwort. Wenn die Antwort unverständlich ist, weil zum Beispiel die Geschwindigkeit des Modems von gettys Geschwindigkeit abweicht, versucht getty die Geschwindigkeit solange anzupassen, bis es eine verständliche Antwort erhält. /usr/bin/login getty führt, nachdem der Benutzer seinen Namen eingegeben hat, /usr/bin/login aus, welches das Passwort abfragt und danach die Shell des Benutzers startet. Konfigurationsdateien Drei Konfigurationsdateien in /etc steuern, ob eine Einwahl in Ihr FreeBSD-System möglich ist. Die erste, /etc/gettytab, konfiguriert den /usr/libexec/getty Dæmon. In /etc/ttys wird festgelegt, auf welchen Schnittstellen /sbin/init einen getty Prozess startet. Schließlich haben Sie in /etc/rc.d/serial die Möglichkeit, Schnittstellen zu initialisieren. Es gibt zwei Ansichten darüber, wie Modems für Einwählverbindungen unter &unix; zu konfigurieren sind. Zum einen kann die Geschwindigkeit zwischen dem Modem und dem Computer fest eingestellt werden. Sie ist damit unabhängig von der Geschwindigkeit, mit der sich der entfernte Benutzer einwählt. Dies hat den Vorteil, dass der entfernte Benutzer das Anmeldeprompt sofort bekommt. Der Nachteil bei diesem Verfahren ist, dass das System die tatsächliche Geschwindigkeit der Verbindung nicht kennt. Damit können bildschirmorientierte Programme wie Emacs ihren Bildschirmaufbau nicht an langsame Verbindungen anpassen, um die Antwortzeiten zu verbessern. Die andere Möglichkeit besteht darin, die Geschwindigkeit der RS-232 Schnittstelle des lokalen Modems an die Geschwindigkeit des entfernten Modems anzupassen. Bei einer V.32bis (14400 bps) Verbindung kann das lokale Modem die RS-232 Schnittstelle mit 19200 bps betreiben, während bei einer Verbindung mit 2400 bps die RS-232 Schnittstelle mit 2400 bps betrieben wird. Da getty die Verbindungsgeschwindigkeit des Modems nicht kennt, startet es den Anmeldevorgang mit der Ausgabe von login: und wartet auf eine Antwort. Wenn der Benutzer der Gegenstelle nun nur unverständliche Zeichen erhält, muss er solange Enter drücken, bis das Anmeldeprompt erscheint. Solange die Geschwindigkeiten nicht übereinstimmen, sind die Antworten der Gegenstelle für getty ebenfalls unverständlich. In diesem Fall wechselt getty zur nächsten Geschwindigkeit und gibt wieder login: aus. In aller Regel erhält der Benutzer der Gegenstelle nach ein bis zwei Tastendrücken eine erkennbare Anmeldeaufforderung. Diese Anmeldeprozedur sieht nicht so sauber wie die Methode mit einer festen Geschwindigkeit aus, bietet dem Benutzer einer langsamen Verbindung allerdings den Vorteil, dass sich bildschirmorientierte Programme an die Geschwindigkeit anpassen können. Im Folgenden wird die Konfiguration für beide Methoden besprochen, doch die Methode der angepassten Geschwindigkeit wird bei der Diskussion bevorzugt. <filename>/etc/gettytab</filename> /etc/gettytab Mit /etc/gettytab wird &man.getty.8; im Stil von &man.termcap.5; konfiguriert. Das Format dieser Datei und die Bedeutung der Einträge wird in &man.gettytab.5; beschrieben. Konfiguration für feste Geschwindigkeit Wenn Sie die Modemgeschwindigkeit vorgeben, werden Sie in /etc/gettytab nichts ändern müssen. Konfiguration für angepasste Geschwindigkeit In /etc/gettytab müssen Einträge für die Geschwindigkeiten, die Sie benutzen wollen, sein. Wenn Sie ein 2400 bps Modem besitzen, können Sie wahrscheinlich den schon vorhandenen D2400 Eintrag benutzen. # # Fast dialup terminals, 2400/1200/300 rotary (can start either way) # D2400|d2400|Fast-Dial-2400:\ :nx=D1200:tc=2400-baud: 3|D1200|Fast-Dial-1200:\ :nx=D300:tc=1200-baud: 5|D300|Fast-Dial-300:\ :nx=D2400:tc=300-baud: Wenn Sie ein Modem mit einer höheren Geschwindigkeit besitzen, müssen Sie wahrscheinlich in /etc/gettytab weitere Einträge erstellen. Hier ist ein Beispiel, das Sie mit einem 14400 bps Modem benutzen können: # # Additions for a V.32bis Modem # um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300: un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200: uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400: up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600: uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200: Die damit erzeugten Verbindungen verwenden 8 Bit und keine Parität. Im obigen Beispiel startet die Geschwindigkeit bei 19200 bps (eine V.32bis Verbindung) und geht dann über 9600 bps (V.32), 400 bps, 1200 bps und 300 bps wieder zurück zu 19200 bps. Das Schlüsselwort nx= (next table) sorgt für das zyklische Durchlaufen der Geschwindigkeiten. Jede Zeile zieht zudem noch mit tc= (table continuation) die Vorgabewerte für die jeweilige Geschwindigkeit an. Wenn Sie ein 28800 bps Modem besitzen und/oder Kompression mit einem 14400 bps Modem benutzen wollen, brauchen Sie höhere Geschwindigkeiten als 19200 bps. Das folgende Beispiel startet mit 57600 bps: # # Additions for a V.32bis or V.34 Modem # Starting at 57600 bps # vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300: vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200: vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400: vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600: vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600: Wenn Sie eine langsame CPU oder ein stark ausgelastetes System besitzen und sich kein 16550A in Ihrem System befindet, erhalten Sie bei 57600 bps vielleicht sio Fehlermeldungen der Form silo overflow. <filename>/etc/ttys</filename> /etc/ttys /etc/ttys wurde bereits in besprochen. Die Konfiguration für Modems ist ähnlich, allerdings braucht getty ein anderes Argument und es muss ein anderer Terminaltyp angegeben werden. Der Eintrag für beide Methoden (feste und angepasste Geschwindigkeit) hat die folgende Form: ttyd0 "/usr/libexec/getty xxx" dialup on Das erste Feld der obigen Zeile gibt die Gerätedatei - für diesen Eintrag an – ttyd0 + für diesen Eintrag an – ttyd0 bedeutet, dass getty mit /dev/ttyd0 arbeitet. Das zweite Feld "/usr/libexec/getty xxx" gibt das Kommando an, das init für dieses Gerät startet (xxx wird durch einen passenden Eintrag aus /etc/gettytab ersetzt). Die Vorgabe für den Terminaltyp, hier dialup, wird im dritten Feld angegeben. Das vierte Feld, on, zeigt init an, dass die Schnittstelle aktiviert ist. Im fünften Feld könnte noch secure angegeben werden, um Anmeldungen von root zu erlauben, doch sollte das wirklich nur für physikalisch sichere Terminals, wie die Systemkonsole, aktiviert werden. Die Vorgabe für den Terminaltyp, dialup im obigen Beispiel, hängt von lokalen Gegebenheiten ab. Traditionell wird dialup für Einwählverbindungen verwendet, so dass die Benutzer in ihren Anmeldeskripten den Terminaltyp auf ihren Terminal abstimmen können, wenn der Typ auf dialup gesetzt ist. Wenn Sie aber beispielsweise nur VT102 Terminals oder Emulatoren einsetzen, können Sie den Terminaltyp hier auch fest auf vt102 setzen. Nachdem Sie /etc/ttys geändert haben, müssen Sie init ein HUP Signal schicken, damit es die Datei wieder einliest. Sie können dazu das folgende Kommando verwenden: &prompt.root; kill -HUP 1 Wenn Sie das System zum ersten Mal konfigurieren, sollten Sie dieses Kommando erst ausführen, wenn Sie Ihr Modem richtig konfiguriert und angeschlossen haben. Konfiguration für feste Geschwindigkeit Das Argument von getty muss in diesem Fall eine feste Geschwindigkeit vorgeben. Der Eintrag für ein Modem, das fest auf 19200 bps eingestellt ist, könnte wie folgt aussehen: ttyd0 "/usr/libexec/getty std.19200" dialup on Wenn Ihr Modem auf eine andere Geschwindigkeit eingestellt ist, setzen Sie anstelle von std.19200 einen passenden Eintrag der Form std.speed ein. Stellen Sie sicher, dass dies auch ein gültiger Verbindungstyp aus /etc/gettytab ist. Konfiguration für angepasste Geschwindigkeit Das Argument von getty muss hier auf einen der Einträge aus /etc/gettytab zeigen, der zu einer Kette von Einträgen gehört, die die zu probierenden Geschwindigkeiten beschreiben. Wenn Sie dem obigen Beispiel gefolgt sind und zusätzliche Einträge in /etc/gettytab erzeugt haben, können Sie die folgende Zeile verwenden: ttyd0 "/usr/libexec/getty V19200" dialup on <filename>/etc/rc.d/serial</filename> rc-Dateien rc.serial Modems, die höhere Geschwindigkeiten unterstützen, zum Beispiel V.32, V.32bis und V.34 Modems, benutzen Hardware-Flusssteuerung (RTS/CTS). Für die entsprechenden Schnittstellen können Sie die Flusssteuerung mit stty in /etc/rc.d/serial einstellen. Um beispielsweise die Hardware-Flusssteuerung für die Geräte zur Ein- und Auswahl der zweiten seriellen Schnittstelle (COM2) zu aktivieren, benutzen Sie die Dateien zur Initialisierung der entsprechenden Geräte und fügen die folgenden Zeilen in /etc/rc.d/serial hinzu: # Serial port initial configuration stty -f /dev/ttyd1.init crtscts stty -f /dev/cuad1.init crtscts Modemkonfiguration Wenn Sie ein Modem besitzen, das seine Konfiguration in nicht flüchtigem RAM speichert, werden Sie ein Terminalprogramm wie - Telix unter &ms-dos; oder tip unter FreeBSD - benötigen, um die Parameter einzustellen. Verbinden Sie sich - mit derselben Geschwindigkeit, die getty - zuerst benutzen würde, mit dem Modem und treffen Sie folgende - Einstellungen: + Telix unter &ms-dos; oder + tip unter &os; benötigen, um die Parameter + einzustellen. Verbinden Sie sich mit derselben Geschwindigkeit, die + getty zuerst benutzen würde, mit dem Modem und + treffen Sie folgende Einstellungen: DCD ist eingeschaltet, wenn das Trägersignal des entfernten Modems erkannt wird. Im Betrieb liegt DTR an. Bei einem Verlust von DTR legt das Modem auf und setzt sich zurück. CTS Flusssteuerung ist für ausgehende Daten aktiviert. XON/XOFF Flusssteuerung ist ausgeschaltet. RTS Flusssteuerung ist für eingehende Daten aktiviert. Keine Rückmeldungen ausgeben. Die Echo-Funktion ist deaktiviert. In der Dokumentation Ihres Modems finden Sie die nötigen Befehle, die Sie absetzen müssen, und/oder nötigen DIP-Schalterstellungen, um die obigen Einstellungen zu treffen. Für ein externes 14400 &usrobotics; &sportster; gelten zum Beispiel die folgenden Befehle: ATZ AT&C1&D2&H1&I0&R2&W Bei dieser Gelegenheit können Sie auch gleich andere Einstellungen, zum Beispiel ob Sie V42.bis und/oder MNP5 Kompression benutzen wollen, an Ihrem Modem vornehmen. Bei einem externen 14400 &usrobotics; &sportster; müssen Sie auch noch einige DIP-Schalter einstellen. Die folgenden Einstellungen können Sie vielleicht als Beispiel für andere Modems verwenden: Schalter 1: OBEN – DTR normal Schalter 2: N/A (Rückmeldungen als Text/numerische Rückmeldungen) Schalter 3: OBEN – Keine Rückmeldungen ausgeben Schalter 4: UNTEN – Echo-Funktion aus Schalter 5: OBEN – Rufannahme aktiviert Schalter 6: OBEN – Carrier Detect normal Schalter 7: OBEN – Einstellungen aus dem NVRAM laden Schalter 8: N/A (Smart Mode/Dumb Mode) Für Einwählverbindungen sollten die Rückmeldungen deaktiviert sein, da sonst getty dem Modem das Anmeldeprompt login: schickt und das Modem im Kommandomodus das Prompt wieder ausgibt (Echo-Funktion) oder eine Rückmeldung gibt. Das führt dann zu einer länglichen und fruchtlosen Kommunikation zwischen dem Modem und getty. Konfiguration für feste Geschwindigkeit Die Geschwindigkeit zwischen Modem und Computer muss auf einen festen Wert eingestellt werden. Mit einem externen 14400 &usrobotics; &sportster; Modem setzen die folgenden Kommandos die Geschwindigkeit auf den Wert der Datenendeinrichtung fest: ATZ AT&B1&W Konfiguration für angepasste Geschwindigkeit In diesem Fall muss die Geschwindigkeit der seriellen Schnittstelle des Modems der eingehenden Geschwindigkeit angepasst werden. Für ein externes 14400 &usrobotics; &sportster; Modem erlauben die folgenden Befehle eine Anpassung der Geschwindigkeit der seriellen Schnittstelle für Verbindungen, die keine Fehlerkorrektur verwenden: ATZ AT&B2&W Verbindungen mit Fehlerkorrektur (V.42, MNP) verwenden die Geschwindigkeit der Datenendeinrichtung. Überprüfen der Modemkonfiguration Die meisten Modems verfügen über Kommandos, die die Konfiguration des Modems in lesbarer Form ausgeben. Auf einem externen 14400 &usrobotics; &sportster; zeigt ATI5 die Einstellungen im nicht flüchtigen RAM an. Um die wirklichen Einstellungen unter Berücksichtigung der DIP-Schalter zu sehen, benutzen Sie ATZ gefolgt von ATI4. Wenn Sie ein anderes Modem benutzen, schauen Sie bitte in der Dokumentation Ihres Modems nach, wie Sie die Konfiguration des Modems überprüfen können. Fehlersuche Bei Problemen können Sie die Einwählverbindung anhand der folgenden Punkte überprüfen: Überprüfen des FreeBSD-Systems Schließen Sie das Modem an das FreeBSD-System an und booten Sie das System. Wenn Ihr Modem über Statusindikatoren verfügt, überprüfen Sie, ob der DTR Indikator leuchtet, wenn das Anmeldeprompt erscheint. Dies zeigt an, dass das FreeBSD-System einen getty Prozess auf der entsprechenden Schnittstelle gestartet hat und das Modem auf einkommende Verbindungen wartet. Wenn der DTR-Indikator nicht leuchtet, melden Sie sich an dem FreeBSD-System an und überprüfen mit ps ax, ob FreeBSD einen getty-Prozess auf der entsprechenden Schnittstelle gestartet hat. Unter den angezeigten Prozessen sollten Sie ähnliche wie die folgenden finden: 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1 Wenn das Modem noch keinen Anruf entgegengenommen hat und Sie stattdessen die folgende Zeile sehen 114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0 bedeutet dies, dass getty die Schnittstelle schon geöffnet hat und zeigt Kabelprobleme oder eine falsche Modemkonfiguration an, da getty die Schnittstelle erst dann öffnen kann, wenn das CD Signal (Carrier Detect) vom Modem anliegt. Wenn Sie keine getty-Prozesse auf den - gewünschten ttydN + gewünschten ttydN Ports finden, untersuchen Sie bitte /etc/ttys auf Fehler. Suchen Sie auch in /var/log/messages nach Meldungen von init oder getty. Wenn Sie dort Meldungen finden, sollten Sie noch einmal die beiden Konfigurationsdateien /etc/ttys und /etc/gettytab nach Fehlern durchsehen. Überprüfen Sie auch, ob die Gerätedateien /dev/ttydN vorhanden sind. Einwählversuch Versuchen Sie, sich in Ihr System einzuwählen. Auf dem entfernten System stellen Sie bitte die folgenden Kommunikationsparameter ein: 8 Bit, keine Parität, ein Stop-Bit. Wenn Sie kein Anmeldeprompt erhalten oder nur unleserliche Zeichen sehen, drücken Sie mehrmals, in Abständen von ungefähr einer Sekunde, Enter. Wenn Sie immer noch nicht die login: Meldung sehen, schicken Sie ein BREAK Kommando. Wenn Sie zur Einwahl ein Highspeed-Modem benutzen, verwenden Sie eine feste Geschwindigkeit auf der seriellen Schnittstelle des Modems (AT&B1 für ein &usrobotics; &sportster;). Wenn Sie jetzt immer noch kein Anmeldeprompt erhalten, überprüfen Sie nochmals /etc/gettytab und stellen sicher, dass der Verbindungstyp in /etc/ttys zu einem gültigen Eintrag in /etc/gettytab gehört, jeder der nx= Einträge in gettytab gültig ist und jeder tc= Eintrag auf einen gültigen Eintrag in gettytab verweist. Wenn das Modem an Ihrem FreeBSD-System auf einen eingehenden Anruf nicht antwortet, stellen Sie sicher, dass das Modem so konfiguriert ist, dass es einen Anruf beantwortet, wenn DTR anliegt. Wenn Ihr Modem Statusindikatoren besitzt, können Sie das Anliegen von DTR anhand der Leuchten überprüfen. Wenn Sie alles schon mehrfach überprüft haben und es immer noch noch nicht funktioniert, machen Sie erst einmal eine Pause, bevor Sie weitermachen. Wenn es immer noch nicht funktioniert, können Sie eine Mail an die Mailingliste &a.de.questions; schicken, in der Sie Ihr Modem und Ihr Problem beschreiben und Ihnen sollte geholfen werden.
Verbindungen nach Außen Die folgenden Ratschläge beschreiben, wie Sie mit einem Modem eine Verbindung zu einem anderen Computer herstellen. Dies können Sie nutzen, um sich auf einem entfernten Computer anzumelden, oder um eine Verbindung zu einem BBS (Bulletin Board System) herzustellen. Weiterhin ist diese Art von Verbindungen nützlich, wenn mal Ihr PPP nicht funktioniert. Wenn Sie zum Beispiel eine Datei mit FTP übertragen wollen und das über PPP gerade nicht möglich ist, melden Sie sich auf dem entfernten Rechner an und führen dort die FTP-Sitzung durch. Die Dateien können Sie danach mit zmodem auf den lokalen Rechner übertragen. - + Mein Hayes Modem wird nicht unterstützt – was kann ich tun? Eigentlich ist die Onlinehilfe für tip nicht mehr aktuell. Es gibt einen eingebauten, allgemeinen Hayes Wähler. Verwenden Sie einfach at=hayes in /etc/remote. Der Hayes-Treiber ist nicht schlau genug, um ein paar der erweiterten Funktionen von neueren Modems zu erkennen – Nachrichten wie BUSY, NO DIALTONE oder CONNECT 115200 verwirren ihn nur. Sie sollten diese Nachrichten mit Hilfe von ATX0&W abschalten, wenn Sie tip benutzen. Der Anwahl-Timeout von tip beträgt 60 Sekunden. Ihr Modem sollte weniger verwenden, oder tip denkt, dass ein Kommunikationsfehler vorliegt. Versuchen Sie es mit ATS7=45&W. - - - Tatsächlich unterstützt die ausgelieferte Version - von tip Hayes Modems noch nicht - vollständig. Die Lösung ist, - tipconf.h in - /usr/src/usr.bin/tip/tip zu editieren. - Dafür benötigen Sie natürlich die Quellcode - Distribution. - - Ändern Sie die Zeile #define HAYES 0 - zu #define HAYES 1. Dann führen Sie - make und make install aus. - Es sollte jetzt funktionieren. - Wie soll ich die AT-Befehle eingeben? /etc/remote Erstellen Sie einen so genannten direct Eintrag in /etc/remote. Wenn Ihr Modem zum Beispiel an der ersten seriellen Schnittstelle, /dev/cuad0, angeschlossen ist, dann fügen Sie die folgende Zeile hinzu: cuad0:dv=/dev/cuad0:br#19200:pa=none Verwenden Sie die höchste bps-Rate, die Ihr Modem in der br Fähigkeit unterstützt. Geben Sie dann tip cuad0 ein und Sie sind mit Ihrem Modem verbunden. Oder benutzen Sie cu als root mit dem folgenden Befehl: &prompt.root; cu -lline -sspeed line steht für die serielle Schnittstelle (/dev/cuad0) und speed für die Geschwindigkeit (57600). Wenn Sie mit dem Eingeben der AT - Befehle fertig sind, beenden Sie mit ~.. + Befehle fertig sind, beenden Sie mit ~.. - + Wieso funktioniert das <literal>@</literal> Zeichen für die pn Fähigkeit nicht? Das @ Zeichen in der Telefonnummerfähigkeit sagt tip, dass es in der Datei /etc/phones nach einer Nummer suchen soll. Aber @ ist auch ein spezielles Zeichen in den Dateien, in denen Fähigkeiten beschrieben werden, wie /etc/remote. Schreiben Sie es mit einem Backslash: pn=\@ - + Wie kann ich von der Kommandozeile eine Telefonnummer wählen? Stellen Sie einen allgemeinen Eintrag in /etc/remote. Zum Beispiel: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuad0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuad0:br#57600:at=hayes:pa=none:du: Mit dem folgenden Befehl können Sie dann wählen: &prompt.root; tip -115200 5551234 Sollten Sie cu gegenüber tip bevorzugen, verwenden Sie einen allgemeinen cu-Eintrag: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuad1:br#57600:at=hayes:pa=none:du: und benutzen zum Wählen das Kommando: &prompt.root; cu 5551234 -s 115200 - + Muss ich dabei jedes Mal die bps-Rate angeben? Schreiben Sie einen tip1200- oder einen cu1200-Eintrag, aber geben Sie auch die bps-Rate an, die Ihr Modem wirklich unterstützt. Leider denkt &man.tip.1;, dass 1200 bps ein guter Standardwert ist und deswegen sucht es nach einem tip1200-Eintrag. Natürlich müssen Sie nicht 1200 bps benutzen. - + Wie kann ich möglichst komfortabel über einen Terminal-Server auf verschiedene Rechner zugreifen? Sie müssen nicht warten bis Sie verbunden sind, und jedes Mal CONNECT Rechner eingeben, benutzen Sie tips cm-Fähigkeit. Sie können diese Einträge in /etc/remote verwenden: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuad2:br#38400:at=hayes:du:pa=none:pn=5551234: Mit den Befehlen tip pain oder tip muffin können Sie eine Verbindungen zu den Rechnern pain oder muffin herstellen; mit tip deep13 verbinden Sie sich mit dem Terminalserver. - + Kann <command>tip</command> mehr als eine Verbindung für jede Seite ausprobieren? Das ist oft ein Problem, wenn eine Universität mehrere Telefonleitungen hat und viele tausend Studenten diese benutzen wollen. Erstellen Sie einen Eintrag für Ihre Universität in /etc/remote und benutzen Sie @ für die pn-Fähigkeit: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuad3:br#9600:at=courier:du:pa=none: Listen Sie die Telefonnummern der Universität in /etc/phones auf: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 tip probiert jede der Nummern in der aufgelisteten Reihenfolge und gibt dann auf. Möchten Sie, dass tip beim Versuchen eine Verbindung herzustellen nicht aufgibt, lassen Sie es in einer while-Schleife laufen. - + Warum muss ich zweimal <keycombo action="simul"> <keycap>Ctrl</keycap> <keycap>P</keycap> </keycombo> tippen, um ein <keycombo action="simul"> <keycap>Ctrl</keycap> <keycap>P</keycap> </keycombo> zu senden? Ctrl P ist das voreingestellte Zeichen, mit dem eine Übertragung erzwungen werden kann und wird benutzt, um tip zu sagen, dass das nächste Zeichen direkt gesendet werden soll und nicht als Fluchtzeichen interpretiert werden soll. Mit Hilfe der Fluchtsequenz ~s, mit der man Variablen setzen kann, können Sie jedes andere Zeichen als force-Zeichen definieren. Geben Sie ~sforce=Zeichen gefolgt von Enter ein. Für Zeichen können Sie ein beliebiges einzelnes Zeichen einsetzen. Wenn Sie Zeichen weglassen, ist das force-Zeichen nul, das Sie mit Ctrl2 oder CtrlLeertaste eingeben können. Ein guter Wert für Zeichen ist Shift Ctrl 6 , welches nur auf wenigen Terminal Servern benutzt wird. Sie können das force-Zeichen auch bestimmen, indem Sie in $HOME/.tiprc das Folgende einstellen: - force=<single-char> + force=single-char - + Warum ist auf einmal alles was ich schreibe in GROSSBUCHSTABEN?? Sie müssen Ctrl A , eingegeben haben, das raise-Zeichen von tip, das speziell für Leute mit defekten caps-lock Tasten eingerichtet wurde. Benutzen Sie ~s wie oben und setzen Sie die Variable raisechar auf etwas, das Ihnen angemessen erscheint. Tatsächlich kann die Variable auf das gleiche Zeichen wie das force-Zeichen gesetzt werden, wenn Sie diese Fähigkeiten niemals benutzen wollen. Hier ist ein Muster der .tiprc Datei, perfekt für Emacs Benutzer, die oft Ctrl2 und CtrlA tippen müssen: force=^^ raisechar=^^ Geben Sie für ^^ ShiftCtrl6 ein. - + Wie kann ich Dateien mit <command>tip</command> übertragen? Wenn Sie mit einem anderen &unix; System kommunizieren, können Sie mit ~p (put) und ~t (take) Dateien senden und empfangen. Diese Befehle lassen cat und echo auf dem entfernten System laufen, um Dateien zu empfangen und zu senden. Die Syntax ist: ~p local-file remote-file ~t remote-file local-file Es gibt keine Fehlerkontrolle, deshalb sollten Sie besser ein anderes Protokoll, wie zmodem, benutzen. - + Wie kann ich zmodem mit <command>tip</command> laufen lassen? Um Dateien zu empfangen, starten Sie das Programm zum Senden auf dem entfernten Computer. Geben Sie dann ~C rz ein, um die Dateien lokal zu empfangen. Um Dateien zu senden, starten Sie das Programm zum Empfangen auf dem entfernten Computer. Geben Sie dann ~C sz Dateien ein, um Dateien auf das entfernte System zu senden. Kazutaka YOKOTA Beigesteuert von Bill Paul Auf Grundlage eines Dokuments von Einrichten der seriellen Konsole serielle Konsole Einführung FreeBSD kann ein System mit einem Dumb-Terminal (unintelligente Datenstation) an einer seriellen Schnittstelle als Konsole booten. Diese Konfiguration ist besonders nützlich für Systemadministratoren, die FreeBSD auf Systemen ohne Tastatur oder Monitor installieren wollen, und Entwickler, die den Kernel oder Gerätetreiber debuggen. Wie in beschrieben, besitzt FreeBSD drei Bootphasen. Der Code für die ersten beiden Bootphasen befindet sich im Bootsektor am Anfang der FreeBSD-Slice der Bootplatte. Dieser Bootblock lädt den Bootloader (/boot/loader) in Phase drei. Um eine serielle Konsole einzurichten, müssen Sie den Bootblock, den Bootloader und den Kernel konfigurieren. Serielle Konsole einrichten, Kurzfassung Dieser Abschnitt fasst zusammen, wie Sie eine serielle Konsole einrichten. Es wird vorausgesetzt, dass Sie die Voreinstellungen verwenden und wissen, wie serielle Schnittstellen verbunden werden. - Verbinden Sie die serielle Konsole mit COM1 sowie - dem Kontrollterminal. + Verbinden Sie die serielle Konsole mit + COM1 sowie dem Kontrollterminal. Um die Startmeldungen der seriellen Konsole zu sehen, geben Sie als root Folgendes ein: &prompt.root; echo 'console="comconsole"' >> /boot/loader.conf Ändern Sie in /etc/ttys - den Eintrag für ttyd0 von + den Eintrag für ttyd0 von off auf on. Zusätzlich sollten Sie den Wert dialup auf vt100 ändern. Nur so wird auf der seriellen Konsole eine Eingabeaufforderung mit einer Passwortabfrage aktiviert. Starten Sie nun das System neu, damit die serielle Konsole aktiviert wird. Wenn Sie eine unterschiedliche Konfiguration benötigen, sollten Sie lesen. Konfiguration der Konsole Bereiten Sie ein serielles Kabel vor. Nullmodemkabel Sie benötigen entweder ein Nullmodemkabel oder ein serielles Standard Kabel mit einem Nullmodemkabel-Adapter. In wurden serielle Kabel beschrieben. Trennen Sie die Tastatur vom Computer. Die meisten PC Systeme suchen beim Power On Self Test (POST) nach einer Tastatur und geben eine Fehlermeldung aus, wenn sie keine finden. Einige Maschinen werden sich sogar weigern, ohne Tastatur zu booten. Wenn Ihr Rechner trotz einer Fehlermeldung normal weiterbootet, brauchen Sie weiter nichts zu tun. Beispielsweise geben einige Maschinen mit einem Phoenix BIOS nur Keyboard failed aus und booten dann normal weiter. Wenn Ihr System ohne Tastatur nicht booten will, müssen Sie das BIOS so konfigurieren, das es diesen Fehler ignoriert (wenn das möglich ist). Das Handbuch zu Ihrem Motherboard sollte beschreiben, wie das zu bewerkstelligen ist. Selbst wenn Sie im BIOS Not installed für die Tastatur einstellen, können Sie eine Tastatur angeschlossen haben und diese auch weiterhin benutzen, da sie mit dieser Anweisung das BIOS lediglich anweisen, nach dem Einschalten des Rechners nicht nach einer Tastatur zu suchen und den Rechner ohne - entsprechende Fehlermeldung zu starten. + entsprechende Fehlermeldung zu starten. Wenn die oben + beschriebene Option nicht im BIOS vorhanden ist, halten Sie + stattdessen Ausschau nach einer Halt on Error + Option. Sie können den gleichen Effekt wie oben erzielen, + wenn Sie diese Option auf All but Keyboard oder + sogar No Errors setzen. Wenn Ihr System über eine &ps2; Maus verfügt, müssen Sie diese wahrscheinlich auch abziehen. Da sich die &ps2; Maus und die Tastatur einige Hardwarekomponenten teilen, kann das dazu führen, dass die Hardwareerkennung fälschlicherweise eine Tastatur findet, wenn eine &ps2; Maus angeschlossen ist. Gateway 2000 Pentium 90 MHz Systemen wird dieses Verhalten nachgesagt. Normalerweise ist das kein Problem, da eine Maus ohne Tastatur sowieso nicht sinnvoll einsetzbar ist. Schließen Sie einen Dumb-Terminal an COM1 (sio0) an. Wenn Sie keinen Dumb-Terminal besitzen, können Sie einen alten PC/XT mit einem Terminalemulator oder die serielle Schnittstelle eines anderen &unix; Rechners benutzen. Sie benötigen auf jeden Fall eine freie erste serielle Schnittstelle (COM1). Zurzeit ist es nicht möglich, in den Bootblöcken eine andere Schnittstelle zu konfigurieren, ohne diese neu zu kompilieren. Wenn Sie COM1 bereits für ein anderes Gerät benutzen, müssen Sie dieses Gerät temporär entfernen und einen neuen Bootblock sowie Kernel installieren, wenn Ihr FreeBSD erst einmal installiert ist. Auf einem Server sollte COM1 ohnehin verfügbar sein. Wenn Sie die Schnittstelle für ein anderes Gerät benutzen und Sie dieses nicht auf COM2 (sio1) legen können, sollten Sie sich nicht an erster Stelle mit dem Aufsetzen einer seriellen Konsole beschäftigen. Stellen Sie sicher, dass Ihre Kernelkonfiguration die richtigen Optionen für COM1 (sio0) enthält. Relevante Optionen sind: 0x10 Aktiviert die Konsolenunterstützung für dieses Gerät. Zurzeit kann nur ein Gerät die Konsolenunterstützung aktiviert haben. Das erste, in der Konfigurationsdatei aufgeführte Gerät, mit dieser Option, verfügt über eine aktivierte Konsolenunterstützung. Beachten Sie, dass diese Option alleine nicht ausreicht, um die serielle Konsole zu aktivieren. Setzen Sie entweder noch die nachfolgend diskutierte Option oder verwenden Sie beim Booten, wie unten beschrieben, den Schalter . 0x20 Das erste Gerät in der Kernelkonfigurationsdatei mit dieser Option wird, unabhängig von dem unten diskutierten Schalter , zur Konsole. Die Option muss zusammen mit verwendet werden. 0x40 Reserviert dieses Gerät und sperrt es für normale Zugriffe. Sie sollten diese Option nicht auf dem Gerät setzen, das Sie als serielle Konsole verwenden wollen. Der Zweck dieser Option ist es, dieses Gerät für das Remote-Debuggen zu reservieren. Das FreeBSD Developers' Handbook enthält dazu weitere Informationen. Beispiel: device sio0 at isa? port IO_COM1 tty flags 0x10 irq 4 Weitere Einzelheiten entnehmen Sie bitte &man.sio.4;. Wenn diese Optionen nicht gesetzt sind, müssen Sie auf einer anderen Konsole beim Booten UserConfig starten oder den Kernel neu kompilieren. Erstellen Sie boot.config im Rootverzeichnis der a-Partition des Bootlaufwerks. Der Code des Bootblocks entnimmt dieser Datei, wie Sie Ihr System booten möchten. Um die serielle Konsole zu aktivieren, müssen Sie hier eine oder mehrere Optionen (alle in derselben Zeile) angeben. Die folgenden Optionen stehen zur Auswahl der Konsole zur Verfügung: Schaltet zwischen der internen und der seriellen Konsole um. Wenn Sie beispielsweise von der internen Konsole (Bildschirm) booten, weist den Bootloader und den Kernel an, die serielle Schnittstelle als Konsole zu nehmen. Wenn die Konsole normal auf der seriellen Schnittstelle liegt, wählen Sie mit den Bildschirm aus. Schaltet zwischen Einzelkonsole und Dual-Konsole um. Die Einzelkonsole ist entweder die interne Konsole (der Bildschirm) oder die serielle Schnittstelle, je nach dem Stand von . Im Dual-Konsolen Betrieb ist die Konsole, unabhängig von , gleichzeitig der Bildschirm und die serielle Schnittstelle. Dies trifft aber nur zu, wenn der Bootblock ausgeführt wird. Sobald der Bootloader ausgeführt wird, wird die durch gegebene Konsole die alleinige Konsole. Veranlasst den Bootblock nach einer Tastatur zu suchen. Wenn keine Tastatur gefunden wird, werden und automatisch gesetzt. Wegen Platzbeschränkungen in den Bootblöcken kann nur erweiterte Tastaturen erkennen. Tastaturen mit weniger als 101 Tasten (und ohne F11 und F12 Tasten) werden wahrscheinlich, wie vielleicht auch die Tastaturen einiger Laptops, nicht erkannt. Wenn dies bei Ihrem System der Fall ist, können Sie nicht verwenden, da es leider noch keine Umgehung für dieses Problem gibt. Benutzen Sie also entweder , um die Konsole automatisch zu setzen, oder , um die serielle Konsole zu verwenden. In boot.config können Sie auch andere, in &man.boot.8; beschriebene Optionen, aufnehmen. Mit Ausnahme von werden die Optionen an den Bootloader (/boot/loader) weitergegeben. Der Bootloader untersucht dann einzig um festzustellen, welches Gerät die Konsole wird. Wenn Sie also nur angegeben haben, können Sie die serielle Schnittstelle nur als Konsole verwenden während der Bootblock ausgeführt wird. Danach wird der Bootloader, da ja fehlt, den Bildschirm zur Konsole machen. Booten Sie die Maschine. Wenn Sie das FreeBSD-System starten, werden die Bootblöcke den Inhalt von /boot.config auf der Konsole ausgeben: /boot.config: -P Keyboard: no Die zweite Zeile sehen Sie nur, wenn Sie in /boot.config angegeben haben. Sie zeigt an, ob eine Tastatur angeschlossen ist oder nicht. Die Meldungen gehen je nach den Einstellungen in /boot.config auf die interne Konsole, die serielle Konsole, oder beide Konsolen. Optionen Meldungen erscheinen auf keine der internen Konsole der seriellen Konsole der seriellen und der internen Konsole der seriellen und der internen Konsole , mit Tastatur der internen Konsole , ohne Tastatur der seriellen Konsole Nach den oben gezeigten Meldungen gibt es eine kleine Verzögerung bevor die Bootblöcke den Bootloader laden und weitere Meldungen auf der Konsole erscheinen. Sie können die Ausführung der Bootblöcke unterbrechen, um zu überprüfen, ob auch alles richtig aufgesetzt ist, brauchen das aber unter normalen Umständen nicht zu tun. Drücken Sie eine Taste außer Enter um den Bootvorgang zu unterbrechen. Sie erhalten dann ein Prompt, an dem Sie weitere Eingaben tätigen können: >> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot: Je nach Inhalt von /boot.config erscheint das Prompt auf der seriellen Konsole, der internen Konsole oder beiden Konsolen. Wenn die Meldung auf der richtigen Konsole erscheint, drücken Sie Enter um fortzufahren. Wenn Sie das Prompt auf der seriellen Konsole erwartet haben, dort aber nichts sehen, liegt ein Fehler in Ihren Einstellungen vor. Als Umgehung geben Sie an der momentanen Konsole ein, um den Bootblock und den Bootloader auf die serielle Konsole umzustellen. Führen Sie dann den Bootvorgang mit Enter weiter und wenn das System gebootet hat, können Sie die fehlerhaften Einstellungen korrigieren. Nachdem der Bootloader geladen wurde und Sie sich in der dritten Bootphase befinden, können Sie immer noch zwischen der internen und der seriellen Konsole auswählen. Setzen Sie dazu, wie in beschrieben, die entsprechenden Variablen des Bootloaders. Zusammenfassung Die folgende Übersicht zeigt, welche Konsole, abhängig von den getroffenen Einstellungen, ausgewählt wird. Fall 1: Option 0x10 für <devicename>sio0</devicename> device sio0 at isa? port IO_COM1 tty flags 0x10 irq 4 Optionen in /boot.config Konsole in den Bootblöcken Konsole im Bootloader Konsole im Kernel keine interne interne interne serielle serielle serielle serielle und interne interne interne serielle und interne serielle serielle , mit Tastatur interne interne interne , ohne Tastatur serielle und interne serielle serielle Fall 2: Option 0x30 für <devicename>sio0</devicename> device sio0 at isa? port IO_COM1 tty flags 0x30 irq 4 Optionen in /boot.config Konsole in den Bootblöcken Konsole im Bootloader Konsole im Kernel keine interne interne serielle serielle serielle serielle serielle und interne interne serielle serielle und interne serielle serielle , mit Tastatur interne interne serielle , ohne Tastatur serielle und interne serielle serielle Hinweise zur seriellen Konsole Verwenden einer höheren Geschwindigkeit Die Vorgabewerte für die Kommunikationsparameter der seriellen Schnittstelle sind: 9600 baud, 8 Bit, keine Parität und ein Stopp-Bit. Wenn Sie die Standardgeschwindigkeit ändern wollen, haben Sie folgende Möglichkeiten: Geben Sie die neue Konsolengeschwindigkeit mit BOOT_COMCONSOLE_SPEED an und kompilieren Sie die Bootblöcke neu. Ausführliche Informationen zum Bau und zur Installation von neuen Bootblöcken finden Sie im des Handbuchs. Wenn die serielle Konsole nicht mit der Option gestartet wird, oder wenn die verwendete serielle Konsole sich von der von den Bootblöcken verwendeten unterscheidet, müsssen Sie zusätzlich die folgende Option in Ihre Kernelkonfigurationsdatei aufnehmen und den Kernel neu bauen: options CONSPEED=19200 Verwenden Sie die Option , um den Kernel zu booten. Die Option kann auch in die Datei /boot.config aufgenommen werden. Eine Beschreibung dieses Vorgangs sowie eine Auflistung der von /boot.config unterstützten Optionen finden Sie in der Manualpage &man.boot.8;. Aktivieren Sie die Option comconsole_speed in der Datei /boot/loader.conf. Diese Option setzt voraus, dass auch die Optionen console, boot_serial, sowie boot_multicons in der Datei /boot/loader.conf gesetzt sind. Im Folgenden finden Sie ein Beispiel, in dem comconsole_speed verwendet wird, um die Geschwindigkeit der seriellen Konsole zu ändern: boot_multicons="YES" boot_serial="YES" comconsole_speed="115200" console="comconsole,vidconsole" - - - &os;-Versionen vor 6.1-RELEASE unterstützen - weder die Option noch die Option - comconsole_speed in der Datei - /boot/loader.conf. Verwenden - Sie eine solche &os;-Version, müssen Sie - die Bootblöcke neu bauen. - Eine andere Schnittstelle als <devicename>sio0</devicename> benutzen Wenn Sie, warum auch immer, ein anderes Gerät als sio0 für die serielle Konsole einsetzen wollen, kompilieren Sie bitte die Bootblöcke, den Bootloader und den Kernel nach dem folgenden Verfahren neu. Installieren Sie die Kernelquellen (siehe ). Setzen Sie in /etc/make.conf BOOT_COMCONSOLE_PORT auf die Adresse der Schnittstelle (0x3F8, 0x2F8, 0x3E8 oder 0x2E8), die Sie benutzen möchten. Sie können nur sio0 bis sio3 (COM1 bis COM4) benutzen, Multiportkarten können Sie nicht als Konsole benutzen. Interrupts müssen Sie hier nicht angeben. Erstellen Sie eine angepasste Kernelkonfiguration und geben Sie dort die richtigen Optionen für die Schnittstelle, die Sie benutzen möchten, an. Wenn Sie zum Beispiel sio1 (COM2) zur Konsole machen wollen, geben Sie dort entweder device sio1 at isa? port IO_COM2 tty flags 0x10 irq 3 oder device sio1 at isa? port IO_COM2 tty flags 0x30 irq 3 an. Keine andere serielle Schnittstelle sollte als Konsole definiert werden. Übersetzen und installieren Sie die Bootblöcke und den Bootloader: &prompt.root; cd /sys/boot &prompt.root; make clean &prompt.root; make &prompt.root; make install Bauen und installieren Sie einen neuen Kernel. Schreiben Sie die Bootblöcke mit &man.bsdlabel.8; auf die Bootplatte und booten Sie den neuen Kernel. DDB Debugger über die serielle Schnittstelle Wenn Sie den Kerneldebugger über eine serielle Verbindung bedienen möchten (nützlich, kann aber gefährlich sein, wenn auf der Leitung falsche BREAK-Signale generiert werden), sollten Sie einen Kernel mit den folgenden Optionen erstellen: options BREAK_TO_DEBUGGER options DDB Benutzung der seriellen Konsole zum Anmelden Da Sie schon die Bootmeldungen auf der Konsole verfolgen können und den Kerneldebugger über die Konsole bedienen können, wollen Sie sich vielleicht auch an der Konsole anmelden. Öffnen Sie /etc/ttys in einem Editor und suchen Sie nach den folgenden Zeilen: ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure - ttyd0 bis ttyd3 + ttyd0 bis ttyd3 entsprechen COM1 bis COM4. Ändern Sie für die entsprechende Schnittstelle off zu on. Wenn Sie auch die Geschwindigkeit der seriellen Schnittstelle geändert haben, müssen Sie std.9600 auf die momentane Geschwindigkeit, zum Beispiel std.19200, anpassen. Sie sollten auch den Terminaltyp von unknown auf den tatsächlich verwendeten Terminal setzen. Damit die Änderungen an der Datei wirksam werden, müssen Sie noch kill -HUP 1 absetzen. Die Konsole im Bootloader ändern In den vorigen Abschnitten wurde beschrieben, wie Sie die serielle Konsole durch Änderungen im Bootblock aktivieren. Dieser Abschnitt zeigt Ihnen, wie Sie mit Kommandos und Umgebungsvariablen die Konsole im Bootloader definieren. Da der Bootloader die dritte Phase im Bootvorgang ist und nach den Bootblöcken ausgeführt wird, überschreiben seine Einstellungen die des Bootblocks. Festlegen der Konsole Mit einer einzigen Zeile in - /boot/loader.rc können Sie den + /boot/loader.conf können Sie den Bootloader und den Kernel anweisen, die serielle Schnittstelle zur Konsole zu machen: set console="comconsole" Unabhängig von den Einstellungen im Bootblock legt dies die Konsole fest. Die obige Zeile sollte die erste Zeile in - /boot/loader.rc sein, so dass Sie die + /boot/loader.conf sein, so dass Sie die Bootmeldungen so früh wie möglich auf der Konsole sehen. Analog können Sie die interne Konsole verwenden: set console="vidconsole" Wenn Sie console nicht setzen, bestimmt der Bootloader (und damit auch der Kernel) die Konsole über die Option des Bootblocks. - Ab FreeBSD 3.2 können Sie die Bootkonsole in + Sie können die Bootkonsole in /boot/loader.conf.local oder - /boot/loader.conf anstatt in - /boot/loader.rc angeben. In - /boot/loader.rc finden Sie bei dieser Methode - den folgenden Inhalt: - - include /boot/loader.4th -start - - Erstellen Sie /boot/loader.conf.local - und fügen die Zeile - - console=comconsole - - oder - - console=vidconsole + /boot/loader.conf angeben. - ein. Weitere Informationen erhalten Sie in - &man.loader.conf.5;. + Weitere Informationen erhalten Sie in &man.loader.conf.5;. Momentan gibt es im Bootloader nichts vergleichbares zu im Bootblock. Damit kann die Konsole nicht automatisch über das Vorhandensein einer Tastatur festgelegt werden. Eine andere Schnittstelle als <devicename>sio0</devicename> benutzen Sie müssen den Bootloader neu kompilieren, wenn Sie eine andere Schnittstelle als sio0 benutzen wollen. Folgen Sie der Anleitung aus . Vorbehalte Hinter dem ganzen steckt die Idee, Server ohne Hardware für Grafik und ohne Tastatur zu betreiben. Obwohl es die meisten Systeme erlauben, ohne Tastatur zu booten, gibt es leider nur wenige Systeme, die ohne eine Grafikkarte booten. Maschinen mit einem AMI BIOS können ohne Grafik booten, indem Sie den Grafikadapter im CMOS-Setup auf Not installed setzen. Viele Maschinen unterstützen diese Option allerdings nicht. Damit diese Maschinen booten, müssen sie über eine Grafikkarte, auch wenn es nur eine alte Monochromkarte ist, verfügen. Allerdings brauchen Sie keinen Monitor an die Karte anzuschließen. Sie können natürlich auch versuchen, auf diesen Maschinen ein AMI BIOS zu installieren.
diff --git a/de_DE.ISO8859-1/books/handbook/users/chapter.sgml b/de_DE.ISO8859-1/books/handbook/users/chapter.sgml index c45efd1bda..c16d25433d 100644 --- a/de_DE.ISO8859-1/books/handbook/users/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/users/chapter.sgml @@ -1,1089 +1,1104 @@ Neil Blakey-Milner Beigetragen von Robert Drehmel Übersetzt von Benutzer und grundlegende Account-Verwaltung Übersicht Einen FreeBSD-Computer können mehrere Benutzer zur selben Zeit benutzen, allerdings kann immer nur einer vor der Konsole sitzen Außer Sie verwenden, wie in besprochen, zusätzliche Terminals , über das Netzwerk können beliebig viele Benutzer angemeldet sein. Jeder Benutzer muss einen Account haben, um das System benutzen zu können. Nachdem Sie dieses Kapitel gelesen haben, werden Sie die verschiedenen Account-Typen von FreeBSD kennen, wissen, wie Accounts angelegt werden, wissen, wie Sie Accounts löschen, wie Sie Attribute eines Accounts, wie den Loginnamen oder die Login-Shell ändern, wissen, wie Sie Limits für einen Account setzen, um beispielsweise Ressourcen, wie Speicher oder CPU-Zeit, einzuschränken, wie Sie mit Gruppen die Verwaltung der Accounts vereinfachen. Vor dem Lesen dieses Kapitels sollten Sie die Grundlagen von &unix; und FreeBSD () verstanden haben. Einführung Jeder Zugriff auf das System geschieht über Accounts und alle Prozesse werden von Benutzern gestartet, also sind Benutzer- und Account-Verwaltung von wesentlicher Bedeutung in FreeBSD-Systemen. Mit jedem Account eines FreeBSD-Systems sind bestimmte Informationen verknüpft, die diesen Account identifizieren. Loginnamen Den Loginnamen geben Sie bei der Anmeldung ein, wenn Sie dazu mit login: aufgefordert werden. Loginnamen müssen auf dem System eindeutig sein, das heißt auf einem System kann es nicht zwei Accounts mit demselben Loginnamen geben. In &man.passwd.5; wird beschrieben, wie ein gültiger Loginname gebildet wird. Normalerweise sollten Sie Namen verwenden, die aus Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind. Passwort Mit jedem Account ist ein Passwort verknüpft. Wenn das Passwort leer ist, wird es bei der Anmeldung nicht abgefragt. Das ist allerdings nicht zu empfehlen, daher sollte jeder Account ein Passwort besitzen. User ID (UID) Die UID ist üblicherweise eine Zahl zwischen 0 und 65535 Für UIDs und GIDs können Zahlen bis einschließlich 4294967295 verwendet werden. Allerdings können solche IDs erhebliche Probleme mit Anwendungen verursachen, die Annahmen über den Wertebereich der IDs treffen. , die einen Account eindeutig identifiziert. Intern verwendet FreeBSD nur die UID, Loginnamen werden zuerst in eine UID umgewandelt, mit der das System dann weiter arbeitet. Das bedeutet, dass Sie Accounts mit unterschiedlichen Loginnamen aber gleicher UID einrichten können. Vom Standpunkt des Systems handelt es sich dabei um denselben Account. In der Praxis werden Sie diese Eigenschaft des Systems wahrscheinlich nicht benutzen. Group ID (GID) Die GID ist üblicherweise eine Zahl zwischen 0 und 65536, die eine Gruppe eindeutig identifiziert. Mit Gruppen kann der Zugriff auf Ressourcen über die GID anstelle der UID geregelt werden. Einige Konfigurationsdateien werden durch diesen Mechanismus deutlich kleiner. Ein Account kann mehreren Gruppen zugehören. Login-Klasse Login-Klassen erweitern das Gruppenkonzept. Sie erhöhen die Flexibilität des Systems in der Handhabung der verschiedenen Accounts. Gültigkeit von Passwörtern Ein regelmäßiges Ändern des Passworts wird in der Voreinstellung von FreeBSD nicht erzwungen. Sie können allerdings einen Passwortwechsel nach einer gewissen Zeit auf Basis einzelner Accounts erzwingen. Verfallszeit eines Accounts In der Voreinstellung verfallen unter FreeBSD keine Accounts. Wenn Sie Accounts einrichten, die nur für eine bestimmte Zeit gültig sein sollen, beispielsweise Accounts für Teilnehmer eines Praktikums, können Sie angeben, wie lange der Account gültig sein soll. Nachdem die angegebene Zeitspanne verstrichen ist, kann dieser Account nicht mehr zum Anmelden verwendet werden, obwohl alle Verzeichnisse und Dateien, die diesem Account gehören, noch vorhanden sind. vollständiger Benutzername FreeBSD identifiziert einen Account eindeutig über den Loginnamen, der aber keine Ähnlichkeit mit dem richtigen Namen des Benutzers haben muss. Der vollständige Benutzername kann daher beim Einrichten eines Accounts angegeben werden. Heimatverzeichnis Das Heimatverzeichnis gibt den vollständigen Pfad zu dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher Anmeldung befindet. Es ist üblich, alle Heimatverzeichnisse unter /home/Loginname oder /usr/home/Loginname anzulegen. Im Heimatverzeichnis oder in dort angelegten Verzeichnissen werden die Dateien eines Benutzers gespeichert. Login-Shell Grundsätzlich ist die Schnittstelle zum System eine Shell, von denen es viele unterschiedliche gibt. Die bevorzugte Shell eines Benutzers kann seinem Account zugeordnet werden. Es gibt drei Haupttypen von Accounts: Der Superuser, Systembenutzer und Benutzer-Accounts. Der Superuser-Account, normalerweise root genannt, wird benutzt, um das System ohne Beschränkungen auf Privilegien zu verwalten. Systembenutzer starten Dienste. Abschließend werden Benutzer-Accounts von echten Menschen genutzt, die sich einloggen, Mails lesen und so weiter. Der Superuser-Account Accounts Superuser (root) Der Superuser-Account, normalerweise root genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte aber nicht für alltägliche Aufgaben wie das Verschicken und Empfangen von Mails, Entdecken des Systems oder Programmierung benutzt werden. Das ist so, da der Superuser im Gegensatz zu normalen Benutzer-Accounts ohne Beschränkungen operiert und falsche Anwendung des Superuser-Accounts in spektakulären Katastrophen resultieren kann. Benutzer-Accounts sind nicht in der Lage, das System versehentlich zu zerstören, deswegen ist es generell am besten normale Benutzer-Accounts zu verwenden, solange man nicht hauptsächlich die extra Privilegien benötigt. Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und dreifach überprüfen, da ein zusätzliches Leerzeichen oder ein fehlender Buchstabe irreparablen Datenverlust bedeuten kann. Das erste, das Sie tun sollten, nachdem Sie dieses Kapitel gelesen haben, ist einen unprivilegierten Benutzer für Ihre eigene normale Benutzung zu erstellen, wenn Sie das nicht bereits getan haben. Das trifft immer zu, egal ob Sie ein Mehrbenutzersystem oder ein System laufen haben, welches Sie alleine benutzen. Später in diesem Kapitel besprechen wir, wie man zusätzliche Accounts erstellt und wie man zwischen dem normalen Benutzer und dem Superuser wechselt. System-Accounts Accounts System-Accounts Systembenutzer starten Dienste wie DNS, Mail-Server, Web-Server und so weiter. Der Grund dafür ist die Sicherheit; wenn die Programme von dem Superuser gestartet werden, können Sie ohne Einschränkungen handeln. Accounts daemon Accounts operator Beispiele von Systembenutzern sind daemon, operator, bind (für den Domain Name Service) und news und www. Accounts nobody nobody ist der generische unprivilegierte Systembenutzer. Bedenken Sie aber, dass je mehr Dienste nobody benutzen, desto mehr Dateien und Prozesse diesem Benutzer gehören und dieser Benutzer damit umso privilegierter wird. Benutzer-Accounts Accounts Benutzer-Accounts Benutzer-Accounts sind das primäre Mittel des Zugriffs für Menschen auf das System und isolieren Benutzer und Umgebung, schützen die Benutzer davor, das System oder Daten anderer Benutzer zu beschädigen und erlauben Benutzern ihre Umgebung selbst einzurichten, ohne das sich dies auf andere auswirkt. Jede Person, die auf Ihr System zugreift, sollte ihren eigenen Account besitzen. Das erlaubt Ihnen herauszufinden, wer was macht und hält Leute davon ab, die Einstellungen der anderen zu verändern oder Mails zu lesen, die nicht für sie bestimmt waren. Jeder Benutzer kann sich eine eigene Umgebung mit alternativen Shells, Editoren, Tastaturbelegungen und Sprachen einrichten. Accounts verändern Accounts verändern Unter &unix; gibt es verschiedene Kommandos, um Accounts zu verändern. Die gebräuchlichsten Kommandos sind unten, gefolgt von einer detaillierten Beschreibung, zusammengefasst. Kommando Zusammenfassung &man.adduser.8; Das empfohlene Werkzeug, um neue Accounts zu erstellen. &man.rmuser.8; Das empfohlene Werkzeug, um Accounts zu löschen. &man.chpass.1; Ein flexibles Werkzeug, um Informationen in der Account-Datenbank zu verändern. &man.passwd.1; Ein einfaches Werkzeug, um Passwörter von Accounts zu ändern. &man.pw.8; Ein mächtiges und flexibles Werkzeug um alle Informationen über Accounts zu ändern. <command>adduser</command> Accounts erstellen adduser /usr/share/skel &man.adduser.8; ist ein einfaches Programm um neue Benutzer hinzuzufügen. Es erstellt passwd und group Einträge für den Benutzer, genauso wie ein home Verzeichnis, kopiert ein paar vorgegebene Dotfiles aus /usr/share/skel und kann optional dem Benutzer eine ,,Willkommen``-Nachricht zuschicken. Einen Benutzer unter &os; anlegen &prompt.root; adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! &prompt.root; Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen angezeigt. Passen Sie auf, dass Sie das Passwort korrekt eingeben. <command>rmuser</command> rmuser Accounts löschen Benutzen Sie &man.rmuser.8;, um einen Account vollständig aus dem System zu entfernen. &man.rmuser.8; führt die folgenden Schritte durch: Entfernt den &man.crontab.1; Eintrag des Benutzers (wenn dieser existiert). Entfernt alle &man.at.1; jobs, die dem Benutzer gehören. Schließt alle Prozesse des Benutzers. Entfernt den Benutzer aus der lokalen Passwort-Datei des Systems. Entfernt das Heimatverzeichnis des Benutzers (falls es dem Benutzer gehört). Entfernt eingegange E-Mails des Benutzers aus /var/mail. Entfernt alle Dateien des Benutzers aus temporären Dateispeicherbereichen wie /tmp. Entfernt den Loginnamen von allen Gruppen, zu denen er gehört, aus /etc/group. Wenn eine Gruppe leer wird und der Gruppenname mit dem Loginnamen identisch ist, wird die Gruppe entfernt; das ergänzt sich mit den einzelnen Benutzer-Gruppen, die von &man.adduser.8; für jeden neuen Benutzer erstellt werden. Der Superuser-Account kann nicht mit &man.rmuser.8; entfernt werden, da dies in den meisten Fällen das System unbrauchbar macht. Als Vorgabe wird ein interaktiver Modus benutzt, der sicherzustellen versucht, dass Sie wissen, was Sie tun. Interaktives Löschen von Account mit <command>rmuser</command> &prompt.root; rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done. Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done. Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done. Removing files belonging to jru from /var/tmp/vi.recover: done. &prompt.root; <command>chpass</command> chpass &man.chpass.1; ändert Informationen der Benutzerdatenbank wie Passwörter, Shells und persönliche Informationen. Nur Systemadministratoren, mit Superuser-Rechten, können die Informationen und Passwörter der anderen Benutzer mit &man.chpass.1; verändern. Werden keine Optionen neben dem optionalen Loginnamen angegeben, zeigt &man.chpass.1; einen Editor mit Account-Informationen an und aktualisiert die Account-Datenbank, wenn dieser verlassen wird. Unter &os; wird nach dem Verlassen des Editors nach dem Passwort gefragt, es sei denn, man ist als Superuser angemeldet. Interaktives <command>chpass</command> des Superusers #Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: Der normale Benutzer kann nur einen kleinen Teil dieser Informationen verändern und natürlich nur die Daten des eigenen Accounts. Interaktives <command>chpass</command> eines normalen Benutzers #Changing user database information for jru. Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: &man.chfn.1; und &man.chsh.1; sind nur Verweise auf &man.chpass.1; genauso wie &man.ypchpass.1;, &man.ypchfn.1; und &man.ypchsh.1;. NIS wird automatisch unterstützt, deswegen ist es nicht notwendig das yp vor dem Kommando einzugeben. NIS wird später in besprochen. <application>passwd</application> passwd Accounts Passwort wechseln &man.passwd.1; ist der übliche Weg, Ihr eigenes Passwort als Benutzer zu ändern oder das Passwort eines anderen Benutzers als Superuser. Um unberechtigte Änderungen zu verhindern, muss bei einem Passwortwechsel zuerst das ursprüngliche Passwort eingegeben werden. Wechseln des Passworts &prompt.user; passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done &prompt.root; passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done Als Superuser das Passwort eines anderen Accounts verändern &prompt.root; passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done Wie bei &man.chpass.1; ist &man.yppasswd.1; nur ein Verweis auf &man.passwd.1;. NIS wird von jedem dieser Kommandos unterstützt. <command>pw</command> pw &man.pw.8; ist ein Kommandozeilenprogramm, mit dem man Accounts und Gruppen erstellen, entfernen, verändern und anzeigen kann. Dieses Kommando dient als Schnittstelle zu den Benutzer- und Gruppendateien des Systems. &man.pw.8; besitzt eine Reihe mächtiger Kommandozeilenschalter, die es für die Benutzung in Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung des Kommandos komplizierter, als die der anderen hier vorgestellten Kommandos. Benutzer einschränken Benutzer einschränken Accounts einschränken Wenn ein System von mehreren Benutzern verwendet wird, ist es vielleicht notwendig, den Gebrauch des Systems zu beschränken. FreeBSD bietet dem Systemadministrator mehrere Möglichkeiten die System-Ressourcen, die ein einzelner Benutzer verwenden kann, einzuschränken. Diese Limitierungen sind in zwei Kategorien eingeteilt: Festplattenkontingente und andere Ressourcenbeschränkungen. Quotas Benutzer einschränken Quotas Festplatten Quotas Festplatten-Kontingente schränken den Plattenplatz, der einem Benutzer zur Verfügung steht, ein. Sie bieten zudem, ohne aufwändige Berechnung, einen schnellen Überblick über den verbrauchten Plattenplatz. Kontingente werden in diskutiert. /etc/login.conf Die Login-Klassen werden in /etc/login.conf definiert. Auf die präzisen Semantiken gehen wir hier nicht weiter ein, sie können jedoch in &man.login.conf.5; nachgelesen werden. Es ist ausreichend zu sagen, dass jeder Benutzer einer Login-Klasse zugewiesen wird (standardmäßig default) und dass jede Login-Klasse mit einem Satz von Login-Fähigkeiten verbunden ist. Eine Login-Fähigkeit ist ein Name=Wert Paar, in dem Name die Fähigkeit bezeichnet und Wert ein willkürlicher Text ist, der je nach Name entsprechend verarbeitet wird. Login-Klassen und -Fähigkeiten zu definieren, ist fast schon selbsterklärend und wird auch in &man.login.conf.5; beschrieben. Das System verwendet die Datei /etc/login.conf normalerweise nicht direkt, sondern nur über die Datenbank /etc/login.conf.db, da diese eine schnellere Abfrage erlaubt. Der nachstehende Befehl erzeugt die Datenbank /etc/login.conf.db aus der Datei /etc/login.conf: &prompt.root; cap_mkdb /etc/login.conf Ressourcenbeschränkungen unterscheiden sich von normalen Login-Fähigkeiten zweifach. Erstens gibt es für jede Beschränkung ein aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig bis zum maximalen Limit verändert werden. Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die meisten Ressourcenbeschränkungen für jeden vom Benutzer gestarteten Prozess, nicht für den Benutzer selbst. Beachten Sie jedoch, dass diese Unterschiede durch das spezifische Einlesen der Limits und nicht durch das System der Login-Fähigkeiten entstehen (das heißt, Ressourcenbeschränkungen sind keine Login-Fähigkeiten). Hier befinden sich die am häufigsten benutzten Ressourcenbeschränkungen (der Rest kann zusammen mit den anderen Login-Fähigkeiten in &man.login.conf.5; gefunden werden): coredumpsize coredumpsize Benutzer einschränken coredumpsize Das Limit der Größe einer core-Datei, die von einem Programm generiert wird, unterliegt aus offensichtlichen Gründen anderen Limits der Festplattenbenutzung (zum Beispiel filesize oder Festplattenkontingenten). Es wird aber trotzdem oft als weniger harte Methode zur Kontrolle des Festplattenplatz-Verbrauchs verwendet: Da Benutzer die core-Dateien nicht selbst erstellen, und sie oft nicht löschen, kann sie diese Option davor retten, dass ihnen kein Festplattenspeicher mehr zur Verfügung steht, sollte ein großes Programm, wie emacs, abstürzen. cputime cputime Benutzer einschränken cputime Die maximale Rechenzeit, die ein Prozess eines Benutzers verbrauchen darf. Überschreitet der Prozess diesen Wert, wird er vom Kernel beendet. Die Rechenzeit wird limitiert, nicht die prozentuale Prozessorenbenutzung, wie es in einigen Feldern in &man.top.1; und &man.ps.1; dargestellt wird. Letzteres war zu der Zeit, als dies hier geschrieben wurde nicht möglich und würde eher nutzlos sein: Ein Compiler – ein wahrscheinlich legitimer Vorgang – kann leicht fast 100% des Prozessors in Anspruch nehmen. filesize filesize Benutzer einschränken filesize Hiermit lässt sich die maximale Größe einer Datei bestimmen, die der Benutzer besitzen darf. Im Gegensatz zu Festplattenkontingenten ist diese Beschränkung nur für jede einzelne Datei gültig und nicht für den Platz, den alle Dateien eines Benutzers verwenden. maxproc maxproc Benutzer einschränken maxproc Das ist die maximale Anzahl von Prozessen, die ein Benutzer starten darf, und beinhaltet sowohl Vordergrund- als auch Hintergrundprozesse. Natürlich darf dieser Wert nicht höher sein als das System-Limit, das in kern.maxproc angegeben ist. Vergessen Sie auch nicht, dass ein zu kleiner Wert den Benutzer in seiner Produktivität einschränken könnte; es ist oft nützlich, mehrfach eingeloggt zu sein, oder Pipelines Pipeline = Leitung. Mit Pipes sind Verbindungen zwischen zwei Sockets in meistens zwei verschiedenen Prozessen gemeint. zu verwenden. Ein paar Aufgaben, wie die Kompilierung eines großen Programms, starten mehrere Prozesse (zum Beispiel &man.make.1;, &man.cc.1; und andere). memorylocked memorylocked Benutzer einschränken memorylocked Dieses Limit gibt an, wie viel virtueller Speicher von einem Prozess maximal im Arbeitsspeicher festgesetzt werden kann. (siehe auch &man.mlock.2;). Ein paar systemkritische Programme, wie &man.amd.8;, verhindern damit einen Systemzusammenbruch, der auftreten könnte, wenn sie aus dem Speicher genommen werden. memoryuse memoryuse Benutzer einschränken memoryuse Bezeichnet den maximalen Speicher, den ein Prozess benutzen darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap- Benutzung. Es ist kein allübergreifendes Limit für den Speicherverbrauch, aber ein guter Anfang. openfiles openfiles Benutzer einschränken openfiles Mit diesem Limit lässt sich die maximale Anzahl der von einem Prozess des Benutzers geöffneten Dateien festlegen. In FreeBSD werden Dateien auch verwendet, um Sockets und IPC-Kanäle IPC steht für Interprocess Communication. darzustellen. Setzen Sie es deshalb nicht zu niedrig. Das System-Limit ist im kern.maxfiles &man.sysctl.8; definiert. sbsize sbsize Benutzer einschränken sbsize Dieses Limit beschränkt den Netzwerk-Speicher, und damit die mbufs, die ein Benutzer verbrauchen darf. Es stammt aus einer Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets geöffnet wurden, kann aber generell dazu benutzt werden Netzwerk-Verbindungen zu beschränken. stacksize Das ist die maximale Größe, auf die der Stack eines Prozesses heranwachsen darf. Das allein ist natürlich nicht genug, um den Speicher zu beschränken, den ein Programm verwenden darf. Es sollte deshalb in Verbindung mit anderen Limits gesetzt werden. Beim Setzen von Ressourcenbeschränkungen sind noch andere Dinge zu beachten. Nachfolgend ein paar generelle Tipps, Empfehlungen und verschiedene Kommentare. Von /etc/rc beim Hochfahren des Systems gestartete Prozesse werden der daemon Login-Klasse zugewiesen. Obwohl das mitgelieferte /etc/login.conf eine Quelle von vernünftigen Limits darstellt, können nur Sie, der Administrator, wissen, was für Ihr System angebracht ist. Ein Limit zu hoch anzusetzen könnte Ihr System für Missbrauch öffnen, und ein zu niedriges Limit der Produktivität einen Riegel vorschieben. Benutzer des X-Window Systems (X11) sollten wahrscheinlich mehr Ressourcen zugeteilt bekommen als andere Benutzer. X11 beansprucht selbst schon eine Menge Ressourcen, verleitet die Benutzer aber auch, mehrere Programme gleichzeitig laufen zu lassen. Bedenken Sie, dass viele Limits für einzelne Prozesse gelten und nicht für den Benutzer selbst. Setzt man zum Beispiel openfiles auf 50, kann jeder Prozess des Benutzers bis zu 50 Dateien öffnen. Dadurch ist die maximale Anzahl von Dateien, die von einem Benutzer geöffnet werden können, openfiles mal maxproc. Das gilt auch für den Speicherverbrauch. Weitere Informationen über Ressourcenbeschränkungen, Login-Klassen und -Fähigkeiten enthalten die Hilfeseiten &man.cap.mkdb.1;, &man.getrlimit.2; und &man.login.conf.5;. Gruppen Gruppen /etc/groups Accounts Gruppen Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden durch den Gruppennamen und die GID (group ID) identifiziert. Der Kernel von FreeBSD (und den meisten anderen &unix; Systemen) entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht. Im Unterschied zur UID kann ein Prozess zu einer Reihe von Gruppen gehören. Wenn jemand von der GID eines Benutzers oder Prozesses spricht, meint er damit meistens die erste Gruppe der Gruppenliste. Die Zuordnung von Gruppennamen zur GID steht in /etc/group, einer Textdatei mit vier durch Doppelpunkte getrennten Feldern. Im ersten Feld steht der Gruppenname, das zweite enthält ein verschlüsseltes Passwort, das dritte gibt die GID an und das vierte besteht aus einer Komma separierten Liste der Mitglieder der Gruppe. Diese Datei kann einfach editiert werden (natürlich nur, wenn Sie dabei keine Syntaxfehler machen). Eine ausführliche Beschreibung der Syntax dieser Datei finden Sie in &man.group.5;. Wenn Sie /etc/group nicht händisch editieren möchten, können Sie &man.pw.8; zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufügen einer Gruppe mit dem Namen teamtwo: - Hinzufügen einer Gruppe mit <command>pw</command> + Setzen der Mitgliederliste einer Gruppe mit &man.pw.8; &prompt.root; pw groupadd teamtwo &prompt.root; pw groupshow teamtwo teamtwo:*:1100: Die Zahl 1100 ist die GID der Gruppe teamtwo. Momentan hat teamtwo noch keine Mitglieder und ist daher ziemlich nutzlos. Um das zu ändern, nehmen wir nun jru in teamtwo auf. Ein Gruppenmitglied mit <command>pw</command> hinzufügen &prompt.root; pw groupmod teamtwo -M jru &prompt.root; pw groupshow teamtwo teamtwo:*:1100:jru Als Argument von geben Sie eine Komma - separierte Liste von Mitgliedern an, die Sie in die Gruppe aufnehmen - möchten. Aus den vorherigen Abschnitten ist bekannt, dass die + separierte Liste von Mitgliedern an, die in die Gruppe aufgenommen + werden sollen. Aus den vorherigen Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für jeden Benutzer enthält. Das System teilt dem Benutzer automatisch eine Gruppe zu, die aber vom Kommando von &man.pw.8; nicht angezeigt wird. Diese Information wird allerdings von &man.id.1; und ähnlichen Werkzeugen angezeigt. Das heißt, dass &man.pw.8; nur /etc/group manipuliert, es wird nicht versuchen, zusätzliche Informationen aus /etc/passwd zu lesen. + + Hinzufügen eines neuen Gruppenmitglieds mittels + &man.pw.8; + + &prompt.root; pw groupmod teamtwo -m db +&prompt.root; pw groupshow teamtwo +teamtwo:*:1100:jru,db + + + Die Argumente zur Option ist eine durch Komma + getrennte Liste von Benutzern, die der Gruppe hinzugefügt werden + sollen. Anders als im vorherigen Beispiel werden diese Benutzer in die + Gruppe aufgenommen und ersetzen nicht die Liste der bereits bestehenden + Benutzer in der Gruppe. + Mit <command>id</command> die Gruppenzugehörigkeit bestimmen &prompt.user; id jru uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) Wie Sie sehen, ist jru Mitglied von jru und teamtwo. Weitere Informationen entnehmen Sie bitte &man.pw.8;. diff --git a/de_DE.ISO8859-1/books/handbook/vinum/chapter.sgml b/de_DE.ISO8859-1/books/handbook/vinum/chapter.sgml index 3dd73042d9..5864ee11c9 100644 --- a/de_DE.ISO8859-1/books/handbook/vinum/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/vinum/chapter.sgml @@ -1,1537 +1,1536 @@ Greg Lehey Ursprünglich geschrieben von Johann Kois Übersetzt von Kay Abendroth Der Vinum Volume Manager Übersicht Egal, über welche und wieviele Festplatten Ihr System auch verfügt, immer wieder werden Sie mit den folgenden Problemen konfrontiert: Ihre Platten sind zu klein. Sie sind zu langsam. Ihre Platten sind unzuverlässig. Um derartige Probleme zu lösen, wurden verschiedene Methoden entwickelt. Eine Möglichkeit bietet der Einsatz von mehreren, manchmal auch redundant ausgelegten Platten. Zusätzlich zur Unterstützung verschiedener Erweiterungskarten und Controller für Hardware-RAID-Systeme - enthält das FreeBSD-Basissystem auch den Vinum + enthält das &os;-Basissystem auch den Vinum Volume Manager, einen Blockgerätetreiber, der die Einrichtung virtueller Platten unterstützt. Bei Vinum handelt es sich um einen sogenannten Volume Manager, einen virtuellen Plattentreiber, der obige drei Probleme löst. Vinum bietet Ihnen größere Flexibilität, Leistung und Zuverlässigkeit als die klassische Datenspeicherung auf einzelne Festplatten. Dazu unterstützt Vinum RAID-0, RAID-1 und RAID-5 (sowohl einzeln als auch in Kombination). Dieses Kapitel bietet Ihnen einen Überblick über potentielle Probleme der klassischen Datenspeicherung auf Festplatten sowie eine Einführung in den Vinum Volume Manager. - Für FreeBSD 5.X wurde Vinum überarbeitet und + Für &os; 5.X wurde Vinum überarbeitet und an die GEOM-Architektur () angepasst, wobei die ursprünglichen Ideeen und Begriffe sowie die auf der Platte benötigten Metadaten beibehalten wurden. Die überarbeitete Version wird als gvinum (für GEOM-Vinum) bezeichnet. Die folgenden Ausführungen verwenden den Begriff Vinum als abstrakten Namen, unabhängig davon, welche Variante implementiert wurde. Sämtliche Befehlsaufrufe erfolgen über gvinum, welches nun das Kernelmodul geom_vinum.ko (statt vinum.ko) benötigt. Analog - finden sich alle Gerätedateien nun unter - /dev/gvinum statt unter - /dev/vinum. Seit FreeBSD 6.x ist die - alte Vinum-Implementierung nicht mehr im Basissystem - enthalten. + finden sich alle Gerätedateien nun unter /dev/gvinum statt unter /dev/vinum. Seit &os; 6.x ist die + alte Vinum-Implementierung nicht mehr im Basissystem enthalten. Ihre Platten sind zu klein. Vinum RAID Software Festplatten werden zwar immer größer, parallel dazu steigt aber auch die Größe der zu speichernden Daten an. Es kann also nach wie vor vorkommen, dass Sie ein Dateisystem benötigen, welches die Größe Ihrer Platten übersteigt. Zwar ist dieses Problem nicht mehr so akut wie noch vor einigen Jahren, aber es existiert nach wie vor. Einige Systeme lösen dieses Problem durch die Erzeugung eines abstrakten Gerätes, das seine Daten auf mehreren Platten speichert. Mögliche Engpässe Moderne Systeme müssen häufig parallel auf Daten zugreifen. Große FTP- und HTTP-Server können beispielsweise Tausende von parallelen Sitzungen verwalten und haben mehrere 100 MBit/s-Verbindungen zur Außenwelt. Diese Bandbreite überschreitet die durchschnittliche Transferrate der meisten Platten bei weitem. Aktuelle Plattenlaufwerke können Daten mit bis zu 70 MB/s sequentiell übertragen, wobei dieser Wert in einer Umgebung, in der viele unabhängige Prozesse auf eine gemeinsame Platte zugreifen, die jeweils nur einen Bruchteil dieses Wertes erreichen, von geringer Aussagekraft ist. In solchen Fällen ist es interessanter, das Problem vom Blickwinkel des Platten-Subsystems aus zu betrachten. Der wichtigste Parameter ist dabei die Last, die eine Übertragung auf dem Subsystem verursacht. Unter Last versteht man dabei die Zeit, in der die Platte mit der Übertragung der Daten beschäftigt ist. Bei jedem Plattenzugriff muss das Laufwerk zuerst die Köpfe positionieren und auf den ersten Sektor warten, bis er den Lesekopf passiert. Dann wird die Übertragung gestartet. Diese Aktionen können als atomar betrachtet werden, da es keinen Sinn macht, diese zu unterbrechen. Nehmen wir beispielsweise an, dass wir 10 kB transferieren wollen. Aktuelle hochperformante Platten können die Köpfe im Durchschnitt in 3,5 ms positionieren und drehen sich mit maximal 15.000 U/min. Daher beträgt die durchschnittliche Rotationslatenz (eine halbe Umdrehung) 2 ms. Bei einer Transferrate von 70 MB/s dauert die eigentliche Übertragung von 10 kB etwa 150 μs, fast nichts im Vergleich zur Positionierungszeit. In einem solchen Fall beträgt die effektive Transferrate nur etwas mehr als 1 MB/s. Die Tranferrate ist also stark von der Größe der zu tranferierenden Daten abhängig. Die traditionelle und offensichtliche Lösung zur Beseitigung dieses Flaschenhalses sind mehr Spindeln. Statt einer einzigen großen Platte werden mehrere kleinere Platten mit demselben Gesamtspeicherplatz benutzt. Jede Platte ist in der Lage, unabhängig zu positionieren und zu transferieren, weshalb der effektive Durchsatz um einen Faktor nahe der Zahl der eingesetzten Platten steigt. Obwohl die Platten Daten parallel transferieren können, ist es nicht möglich, Anfragen gleichmäßig auf die einzelnen Platten zu verteilen. Daher wird die Last auf bestimmten Laufwerken immer höher sein als auf anderen Laufwerken. Daraus ergibt sich auch, dass die exakte Verbesserung des Datendurchsatzes immer kleiner ist als die Anzahl der involvierten Platten. Plattenkonkatenation Vinum Konkatenation Die gleichmäßige Verteilung der Last auf die einzelnen Platten ist stark abhängig von der Art, wie die Daten auf die Laufwerke aufgeteilt werden. In den folgenden Ausführungen wird eine Platte als eine große Anzahl von Datensektoren dargestellt, die durch Zahlen adressierbar sind (ähnlich den Seiten eines Buches). Die naheliegendste Methode ist es, die virtuelle Platte (wieder analog den Seiten eines Buches) in Gruppen aufeinanderfolgender Sektoren zu unterteilen, die jeweils der Größe der einzelnen physischen Platten entsprechen. Diese Vorgehensweise wird als Konkatenation bezeichnet und hat den Vorteil, dass die Platten keine spezielle Größenbeziehung haben müssen. Sie funktioniert gut, solange der Zugriff gleichmäßig auf den Adressraum der virtuellen Platte verteilt wird. Wenn sich der Zugriff allerdings auf einen kleinen Bereich konzentriert, ist die Verbesserung vernachlässigbar klein. verdeutlicht die Verteilung der Speichereinheiten in einer konkatenierten Anordnung.
Konkatenierte Anordnung
Striping von Platten Vinum Striping RAID Ein alternatives Mapping unterteilt den Adressraum in kleinere, gleich große Komponenten und speichert diese sequentiell auf verschiedenen Geräten. Zum Beispiel werden die ersten 256 Sektoren auf der ersten Platte, die nächsten 256 Sektoren auf der zweiten Platte gespeichert und so weiter. Nachdem die letzte Platte beschrieben wurde, wird dieser Vorgang solange wiederholt, bis die Platten voll sind. Dieses Mapping nennt man Striping oder RAID-0. RAID steht für Redundant Array of Inexpensive Disks und bietet verschiedene Formen der Fehlertorleranz, obwohl der letzte Begriff etwas irreführend ist, da RAID keine Redundanz bietet. Striping erfordert einen etwas größeren Aufwand, um die Daten zu lokalisieren, und kann zusätzliche E/A-Last verursachen, wenn eine Übertragung über mehrere Platten verteilt ist. Auf der anderen Seite erlaubt es aber eine gleichmäßigere Verteilung der Last auf die einzelnen Platten. veranschaulicht die Abfolge, in der Speichereinheiten in einer striped-Anordnung alloziert werden.
Striped-Anordnung
Datenintegrität Das dritte Problem, welches aktuelle Platten haben, ist ihre Unzuverlässigkeit. Obwohl sich die Zuverlässigkeit von Festplatten in den letzten Jahren stark verbessert hat, handelt es sich bei ihnen nach wie vor um die Komponente eines Servers, die am ehesten ausfällt. Fällt eine Festplatte aus, können die Folgen katastrophal sein: Es kann Tage dauern, bis eine Platte ersetzt und alle Daten wiederhergestellt sind. disk mirroring Vinum Spiegelung RAID-1 Die traditionelle Art, dieses Problem anzugehen, war es, Daten zu spiegeln, also zwei Kopien der Daten auf getrennten Platten zu verwahren. Diese Technik wird auch als RAID Level 1 oder RAID-1 bezeichnet. Jeder Schreibzugriff findet auf beiden Datenträgern statt. Ein Lesezugriff kann daher von beiden Laufwerken erfolgen, sodass beim Ausfall eines Laufwerks die Daten immer noch auf dem anderen Laufwerk verfügbar sind. Spiegeln verursacht allerdings zwei Probleme: Es verursacht höhere Kosten, da doppelt so viel Plattenspeicher wie bei einer nicht-redundanten Lösung benötigt wird. Die Gesamtleistung des Systems sinkt, da Schreibzugriffe auf beiden Laufwerken ausgeführt werden müssen, daher wird im Vergleich zu einem nicht gespiegelten Datenträger die doppelte Bandbreite benötigt. Lesezugriffe hingegen sind davon nicht betroffen, es sieht sogar so aus, als würden diese schneller ausgeführt. RAID-5 Eine alternative Lösung ist Parity, das in den RAID-Leveln 2, 3, 4 und 5 implementiert ist. Von diesen ist RAID-5 der interessanteste. So wie in VINUM implementiert, ist es eine Variante einer gestripten Anordung, welche einen Block - jedes Stripes als Paritätsblock für die anderen + jedes Stripes als Paritätsblock für einen der anderen Blöcke verwendet. Wie in RAID-5 vorgeschrieben, ist die Position dieses Paritätsblockes auf jedem Stripe unterschiedlich. Die Nummern in den Datenblöcken geben die relativen Blocknummern an.
RAID-5 Aufbau
Im Vergleich zur Spiegelung hat RAID-5 den Vorteil, dass es signifikant weniger Speicherplatz benötigt. Lesezugriffe sind vergleichbar schnell mit jenen bei einem Striped-Aufbau, aber Schreibzugriffe sind deutlich langsamer (etwa 25% der Lesegeschwindigkeit). Wenn eine Platte ausfällt, kann das Array in einem "schwachen" Modus weiterarbeiten: Ein Lesezugriff auf eine der übrigen erreichbaren Platten wird normal ausgeführt, ein Lesezugriff auf die ausgefallene Platte muss aber zunächst mit dem zugehörigen Block aller verbleibender Platten rückberechnet werden.
Vinum-Objekte Um die in den vorigen Abschnitte besprochenen Probleme zu lösen, verwendet Vinum eine vierstufige Objekthierarchie: Das auffälligste Objekt ist die virtuelle Platte, die Volume genannt wird. Volumes haben im Wesentlichen die gleichen Eigenschaften wie ein &unix;-Laufwerk, obwohl es ein paar kleine Unterschiede gibt. So existieren für Volumes beispielsweise keine Größenbeschränkungen. Volumes bestehen aus einem oder mehreren Plexus, von denen jeder den gesamten Adressraum eines Datenträgers repräsentiert. Diese Hierarchieebene ist für die benötigte Redundanz der Daten erforderlich. Stellen Sie sich die Plexus als eigenständige Platten in einem gespiegelten Array vor, von denen jede die gleichen Daten enthält. Da Vinum im &unix;-Plattenspeicher-Framework arbeitet, wäre es möglich, als Grundbaustein für Multiplatten-Plexus &unix;-Partitionen zu verwenden. In der Praxis ist dieser Ansatz aber zu unflexibel, da &unix;-Platten nur eine begrenzte Anzahl von Partitionen haben können. Daher unterteilt Vinum stattdessen eine einzige &unix;-Partition (die Platte) in zusammenhängende Bereiche, die als Subdisks bezeichnet werden und als Grundbausteine für einen Plexus benutzt werden. Subdisks befinden sich auf Vinum-Platten, eigentlich &unix;-Partitionen. Vinum-Platten können eine beliebige Anzahl von Subdisks haben und den gesamten Speicher der Platte mit Ausnahme eines kleinen Bereiches am Anfang der Platte (welcher zur Speicherung von Konfigurations- und Statusinformationen verwenden wird) verwenden. Der folgende Abschnitt beschreibt, wie diese Objekte die von Vinum benötigten Funktionen zur Verfügung stellen. Überlegungungen zur Größe eines Volumes Plexus können mehrere Subdisks beinhalten, die über alle Platten der Vinum-Konfiguration verteilt sind. Daraus folgt, dass die Größe einer Platte nicht die Größe eines Plexus (und damit eines Volumes) limitiert. Redundante Datenspeicherung Vinum implementiert die Datenspiegelung, indem es ein Volume auf mehrere Plexus verteilt. Jeder Plexus ist dabei die Repräsentation der Daten eines Volumes. Ein Volume kann aus bis zu acht Plexus bestehen. Obwohl ein Plexus die gesamten Daten eines Volumes repräsentiert, ist es möglich, dass Teile der Repräsentation physisch fehlen, entweder aufgrund des Designs (etwa durch nicht definierte Subdisks für Teile des Plexus) oder durch Zufall (als ein Ergebnis eines Plattenfehlers). Solange wenigstens ein Plexus die gesamten Daten für den kompletten Adressbereich des Volumes zur Verfügung stellen kann, ist das Volume voll funktionsfähig. Überlegungen zur Leistung Sowohl Konkatenation als auch Striping werden von Vinum auf der Plexus-Ebene realisiert: Ein konkatenierter Plexus benutzt abwechselnd den Adressraum jeder Subdisk. Ein gestripter Plexus striped die Daten über jede Subdisk. Die Subdisks müssen alle die gleiche Größe haben, und es muss mindestens zwei Subdisks in Reihenfolge geben, um ihn von einem konkatenierten Plexus unterscheiden zu können. Wie ist ein Plexus aufgebaut? - Die Version von Vinum, welche von FreeBSD-&rel.current; + Die Version von Vinum, welche von &os;-&rel.current; bereitgestellt wird, implementiert zwei Arten von Plexus: Konkatenierte Plexus sind die flexibelsten: Sie können aus einer beliebigen Anzahl von Subdisks unterschiedlicher Größe bestehen. Der Plexus kann erweitert werden, indem man zusätzliche Subdisks hinzufügt. Sie brauchen weniger CPU-Zeit als gestripte Plexus, obwohl der Unterschied des CPU-Overheads nicht messbar ist. Auf der anderen Seite sind sie aber sehr anfällig für das Entstehen von "hot spots", wobei eine Platte sehr aktiv ist, andere hingegen nahezu ungenutzt sind. Der größte Vorteil eines gestripten Plexus (RAID-0) ist die Verringerung von "hot spots". Dies wird durch die Auswahl eines Stripes optimaler Größe (etwa 256 kB) erreicht, wodurch die Last gleichmäßig auf die Platten verteilt werden kann. Nachteile dieser Vorgehensweise sind ein (geringfügig) komplexerer Code sowie einige Restriktionen für die Subdisks: Diese müssen alle die gleiche Größe haben, und das Erweitern eines Plexus durch das Hinzufügen neuer Subdisks ist so kompliziert, dass es von Vinum derzeit nicht unterstützt wird. Vinum fordert noch eine weitere triviale Beschränkung: Ein gestripter Plexus muss aus mindestens zwei Subdisks bestehen, da er ansonsten nicht von einem konkatenierten Plexus unterscheidbar ist. fasst die Vor- und Nachteile jedes Plexus-Aufbaus zusammen. Vinum-Plexus - Aufbau Plexus-Typ Minimum an Subdisks? Kann Subdisks hinzufügen? Müssen die gleiche Größe haben Applikation konkateniert 1 ja nein Großer Datenspeicher mit maximaler Platzierungsflexibilität und moderater Leistung gestriped 2 nein ja Hohe Leistung in Kombination mit gleichzeitigem Zugriff
Einige Beispiele Vinum verwaltet eine Konfigurationsdatenbank für alle einem individuellen System bekannten Objekte. Zu Beginn erzeugt ein Benutzer mit &man.gvinum.8; eine Konfigurationsdatenbank aus einer oder mehreren Konfigurationsdateien. Vinum speichert danach eine Kopie der Konfigurationsdatenbank in jedem von ihm kontrollierten Slice (von Vinum als Device bezeichnet). Da die Datenbank bei jedem Statuswechsel aktualisiert wird, kann nach einem Neustart der Status jedes Vinum-Objekts exakt wiederhergestellt werden. Die Konfigurationsdatei Die Konfigurationsdatei beschreibt individuelle Vinum-Objekte. Die Beschreibung eines einfachen Volumes könnte beispielsweise so aussehen: drive a device /dev/da3h volume myvol plex org concat sd length 512m drive a Diese Datei beschreibt vier Vinum-Objekte: Die drive-Zeile beschreibt eine Plattenpartition (drive) sowie ihre Position in Bezug auf die darunter liegende Hardware. Die Partition hat dabei den symbolischen Namen a. Diese Trennung von symbolischen Namen und Gerätenamen erlaubt es, die Position von Platten zu ändern, ohne dass es zu Problemen kommt. Die volume-Zeile beschreibt ein Volume. Dafür wird nur ein einziges Attribut, der Name des Volumes, benötigt. In unserem Fall hat das Volume den Namen myvol. Die plex-Zeile definiert einen Plexus. Auch hier wird nur ein Parameter, und zwar die Art des Aufbau, benötigt (in unserem Fall concat). Es wird kein Name benötigt, das System generiert automatisch einen Namen aus dem Volume-Namen und dem Suffix .px wobei x die Nummer des Plexus innerhalb des Volumes angibt. So wird dieser Plexus den Namen myvol.p0 erhalten. Die sd-Zeile beschreibt eine Subdisk. Um eine Subdisk einzurichten, müssen Sie zumindest den Namen der Platte, auf der Sie die Subdisk anlegen wollen, sowie die Größe der Subdisk angeben. Analog zur Definition eines Plexus wird auch hier kein Name benötigt: Das System weist automatisch Namen zu, die aus dem Namen des Plexus und dem Suffix .sx gebildet werden, wobei x die Nummer der Subdisk innerhalb des Plexus ist. Folglich gibt Vinum dieser Subdisk den Namen myvol.p0.s0. Nach dem Verarbeiten dieser Datei erzeugt &man.gvinum.8; die folgende Ausgabe: &prompt.root; gvinum -> create config1 Configuration summary Drives: 1 (4 configured) Volumes: 1 (4 configured) Plexes: 1 (8 configured) Subdisks: 1 (16 configured) D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB Diese Ausgabe entspricht dem verkürzten Ausgabeformat von &man.gvinum.8; und wird in grafisch dargestellt.
Ein einfaches Vinum-Volume
Dieses und die folgenden Beispiele zeigen jeweils ein Volume, welches die Plexus enthält, die wiederum die Subdisk enthalten. In diesem trivialen Beispiel enthält das Volume nur einen Plexus, der wiederum nur aus einer Subdisk besteht. Eine solche Konfiguration hätte allerdings keinen Vorteil gegenüber einer konventionellen Plattenpartion. Das Volume enthält nur einen einzigen Plexus, daher gibt es keine redundante Datenspeicherung. Da der Plexus außerdem nur eine einzige Subdisk enthält, unterscheidet sich auch die Speicherzuweisung nicht von der einer konventionellen Plattenpartition. Die folgenden Abschnitte beschreiben daher verschiedene interessantere Konfigurationen.
Verbesserte Ausfallsicherheit durch Spiegelung Die Ausfallsicherheit eines Volumes kann durch Spiegelung der Daten erhöht werden. Beim Anlegen eines gespiegelten Volumes ist es wichtig, die Subdisks jedes Plexus auf verschiedene Platten zu verteilen, damit ein Plattenausfall nicht beide Plexus unbrauchbar macht. Die folgende Konfiguration spiegelt ein Volume: drive b device /dev/da4h volume mirror plex org concat sd length 512m drive a plex org concat sd length 512m drive b Bei diesem Beispiel war es nicht nötig, noch einmal eine Platte a zu spezifizieren, da Vinum die Übersicht über alle Objekte und seine Konfigurationsdatenbank behält. Nach dem Abarbeiten dieser Definition sieht die Konfiguration wie folgt aus: Drives: 2 (4 configured) Volumes: 2 (4 configured) Plexes: 3 (8 configured) Subdisks: 3 (16 configured) D a State: up Device /dev/da3h Avail: 1549/2573 MB (60%) D b State: up Device /dev/da4h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB stellt diese Struktur grafisch dar.
Ein gespiegeltes Vinum Volume
In diesem Beispiel enthält jeder Plexus die vollen 512 MB des Adressraumes. Wie im vorangegangenen Beispiel enthält jeder Plexus nur eine Subdisk.
Die Leistung optimieren Das gespiegelte Volume des letzten Beispieles ist resistenter gegenüber Fehlern als ein ungespiegeltes Volume, seine Leistung ist hingegen schlechter, da jeder Schreibzugriff auf das Volume einen Schreibzugriff auf beide Platten erfordert und damit mehr der insgesamt verfügbaren Datentransferrate benötigt. Steht also die optimale Leistung im Vordergrund, muss anders vorgegangen werden: Statt alle Daten zu spiegeln, werden die Daten über so viele Platten wie möglich gestriped. Die folgende Konfiguration zeigt ein Volume mit einem über vier Platten hinwegreichenden Plexus: drive c device /dev/da5h drive d device /dev/da6h volume stripe plex org striped 512k sd length 128m drive a sd length 128m drive b sd length 128m drive c sd length 128m drive d Wie zuvor ist es nicht nötig, die Platten zu definieren, die Vinum schon bekannt sind. Nach dem Abarbeiten dieser Definition sieht die Konfiguration wie folgt aus: Drives: 4 (4 configured) Volumes: 3 (4 configured) Plexes: 4 (8 configured) Subdisks: 7 (16 configured) D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%) D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%) D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%) D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB V striped State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB P striped.p1 State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB S striped.p0.s0 State: up PO: 0 B Size: 128 MB S striped.p0.s1 State: up PO: 512 kB Size: 128 MB S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB
Ein Striped Vinum Volume
Dieses Volume wird in dargestellt. Die Schattierung der Stripes zeigt die Position innerhalb des Plexus-Adressraumes an. Die hellsten Stripes kommen zuerst, die dunkelsten zuletzt.
Ausfallsicherheit und Leistung Mit entsprechender Hardware ist es möglich, Volumes zu bauen, welche gegenüber Standard-&unix;-Partitionen beides, nämlich erhöhte Ausfallsicherheit und erhöhte Leistung, aufweisen können. Eine typische Konfigurationsdatei könnte etwa so aussehen: volume raid10 plex org striped 512k sd length 102480k drive a sd length 102480k drive b sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e plex org striped 512k sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e sd length 102480k drive a sd length 102480k drive b Die Subdisks des zweiten Plexus sind gegenüber denen des ersten Plexus um zwei Platten verschoben. Dadurch wird sichergestellt, dass Schreibzugriffe nicht auf den gleichen Subdisks auftreten, auch wenn eine Übertragung über zwei Platten geht. veranschaulicht die Struktur dieses Volumes.
Ein gespiegeltes, Striped Vinum Volume
Objektbenennung Wie oben beschrieben, weist Vinum den Plexus und Subdisks Standardnamen zu, wenngleich diese überschrieben werden können. Das Überschreiben dieser Standardnamen wird allerdings nicht empfohlen. Erfahrungen mit dem VERITAS Volume Manager (der eine willkürliche Benennung von Objekten erlaubt) haben gezeigt, dass diese Flexibilität keinen entscheidenden Vorteil bringt und zudem Verwirrung stiften kann. Namen dürfen zwar alle nichtleeren Zeichen enthalten, es ist aber sinnvoll, nur Buchstaben, Ziffern und den Unterstrich zu verwenden. Die Namen von Volumes, Plexus und Subdisks können bis zu 64 Zeichen lang sein, die Namen von Platten dürfen hingegen nur bis zu 32 Zeichen lang sein. - Vinum-Objekten werden Gerätedateien in der - /dev/gvinum-Hierarchie zugewiesen. Die + Vinum-Objekten werden Gerätedateien in der /dev/gvinum-Hierarchie zugewiesen. Die weiter oben dargestellte Konfiguration würde Vinum dazu veranlassen, die folgenden Gerätedateien zu erstellen: Dies trifft nur für die veraltete Vinum-Implementierung zu. - Die Kontrollgeräte - /dev/vinum/control und - /dev/vinum/controld, welche von - &man.gvinum.8; beziehungsweise dem Vinum-Daemon - verwendet werden. + Die Kontrollgeräte /dev/vinum/control und /dev/vinum/controld, welche von + &man.gvinum.8; beziehungsweise dem Vinum-Daemon verwendet + werden. Geräte-Einträge für jedes Volume. Dieses sind die Hauptgeräte, die von Vinum benutzt werden. Somit würde die Konfiguration von oben folgende Geräte beinhalten: - /dev/gvinum/myvol, - /dev/gvinum/mirror, - /dev/gvinum/striped, - /dev/gvinum/raid5 sowie - /dev/gvinum/raid10. + /dev/gvinum/myvol, + /dev/gvinum/mirror, + /dev/gvinum/striped, + /dev/gvinum/raid5 sowie + /dev/gvinum/raid10. Dies trifft nur für die veraltete Vinum-Implementierung zu. - Ein Verzeichnis /dev/vinum/drive - mit Einträgen für jede Platte. Diese - Einträge sind tatsächlich symbolische Links auf - die korrespondierenden Plattendateien. + Ein Verzeichnis /dev/vinum/drive mit Einträgen + für jede Platte. Diese Einträge sind tatsächlich + symbolische Links auf die korrespondierenden Plattendateien. - Alle Volumes bekommen direkte Einträge unter - /dev/gvinum/. + Alle Volumes bekommen direkte Einträge unter /dev/gvinum/. - Die Verzeichnisse - /dev/gvinum/plex und - /dev/gvinum/sd, die - Gerätedateien für jeden Plexus sowie jede - Subdisk enthalten. + Die Verzeichnisse /dev/gvinum/plex und /dev/gvinum/sd, die Gerätedateien + für jeden Plexus sowie jede Subdisk enthalten. Stellen Sie sich folgende Konfigurationsdatei vor: drive drive1 device /dev/sd1h drive drive2 device /dev/sd2h drive drive3 device /dev/sd3h drive drive4 device /dev/sd4h volume s64 setupstate plex org striped 64k sd length 100m drive drive1 sd length 100m drive drive2 sd length 100m drive drive3 sd length 100m drive drive4 Nach Abarbeitung dieser Datei erstellt &man.gvinum.8; die - folgende Struktur unter /dev/gvinum: + folgende Struktur unter /dev/gvinum: drwxr-xr-x 2 root wheel 512 Apr 13 16:46 plex crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64 drwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd /dev/vinum/plex: total 0 crwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0 /dev/vinum/sd: total 0 crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0 crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1 crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2 crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3 Es wird empfohlen, für Plexus und Subdisks keine eigenen Namen zu vergeben. Dies gilt aber nicht für Vinum-Platten. Durch die Benennung von Vinum-Platten wird es erst möglich, eine Platte an einen anderen Ort zu verschieben und sie trotzdem noch automatisch erkennen zu lassen. Plattennamen können bis zu 32 Zeichen lang sein. Dateisysteme erstellen Volumes erscheinen (mit einer Ausnahme) dem System nicht anders als Platten. Anders als &unix;-Platten partitioniert Vinum seine Volumes nicht, weshalb diese auch keine Partitionstabellen haben. Dies wiederum hat Modifikationen an einigen Platten-Tools, insbesondere &man.newfs.8;, nötig gemacht, welche bis dahin den letzten Buchstaben eines Vinum-Volume-Namen als Partitionsbezeichner identifiziert haben. Zum Beispiel könnte eine Platte einen Namen wie - /dev/ad0a oder - /dev/da2h haben. Diese Namen bedeuten, - dass es sich um die erste Partition + /dev/ad0a oder + /dev/da2h haben. Diese Namen + bedeuten, dass es sich um die erste Partition (a) der ersten (0) IDE-Platte (ad) und respektive die achte Partition (h) der dritten (2) SCSI-Platte (da) handelt. Im Vergleich - dazu könnte ein Vinum-Volume beispielsweise - /dev/gvinum/concat heißen, ein Name, + dazu könnte ein Vinum-Volume beispielsweise /dev/gvinum/concat heißen, ein Name, der in keiner Beziehung mit einem Partitionsnamen steht. Normalerweise interpretiert &man.newfs.8; den Namen einer Platte und beschwert sich, wenn es ihn nicht versteht: &prompt.root; newfs /dev/gvinum/concat newfs: /dev/gvinum/concat: can't figure out file system partition Um nun ein Dateisystem auf diesem Volume anzulegen, benutzen Sie &man.newfs.8;: &prompt.root; newfs /dev/gvinum/concat Bei &os;-Versionen vor 5.0 benötigt - &man.newfs.8; ein zusätzliches -v Flag und - das alte Gerätenamen-Schema: - - - &prompt.root; newfs -v /dev/vinum/concat + &man.newfs.8; ein zusätzliches Flag und + das alte Gerätenamen-Schema: + + &prompt.root; newfs -v /dev/vinum/concat Vinum konfigurieren Der GENERIC-Kernel enthät kein Vinum. Es ist zwar möglich, einen speziellen Kernel zu bauen, der Vinum beinhaltet, empfohlen wird aber, Vinum als ein Kernelmodul (über kld) zu laden. Dazu müssen Sie nicht einmal &man.kldload.8; benutzen, da beim Start von &man.gvinum.8; automatisch überprüft wird, ob das Modul bereits geladen wurde. Falls das Modul noch nicht geladen wurde, wird es daraufhin geladen. Inbetriebnahme Vinum speichert seine Konfigurationsinformationen auf den Platten-Slices im Wesentlichen genauso ab wie in den Konfigurationsdateien. Beim Lesen der Konfigurationsdatenbank erkennt Vinum eine Anzahl von Schlüsselwörtern, die in den Konfigurationsdateien nicht erlaubt sind. Zum Beispiel könnte eine Platten-Konfiguration den folgenden Text enthalten: volume myvol state up volume bigraid state down plex name myvol.p0 state up org concat vol myvol plex name myvol.p1 state up org concat vol myvol plex name myvol.p2 state init org striped 512b vol myvol plex name bigraid.p0 state initializing org raid5 512b vol bigraid sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b Die offensichtlichen Unterschiede sind hier die Anwesenheit von Informationen über explizite Speicherorte und Benennungen (beides ist zwar erlaubt, aber es wird dem Benutzer davon abgeraten, es zu benutzen) und Informationen über die Zustände (welche für den Benutzer nicht zur Verfügung stehen). Vinum speichert keine Informationen über Platten in den Konfigurationsinformationen, es findet die Platten durch Scannen nach Vinum-Markierungen auf den eingerichteten Laufwerken. Dies ermöglicht es, Vinum-Platten auch dann noch korrekt zu identifizieren, wenn sie schon andere &unix;-Platten-IDs zugewiesen bekommen haben. Automatische Inbetriebnahme Diese Information bezieht sich nur auf die veraltete Vinum-Implementierung. Gvinum unterstützt eine automatische Inbetriebnahme immer, wenn das Kernelmodul über &man.loader.conf.5; geladen ist. Um das Gvinum Modul beim Hochfahren des Systems zu laden, fügen Sie die Zeile geom_vinum_load="YES" in /boot/loader.conf ein. Um Vinum automatisch zu starten, wenn Sie Ihr System starten, müssen Sie sicherstellen, dass Ihre /etc/rc.conf (die in &man.rc.conf.5; ausführlich beschrieben wird) folgende Zeile enthält: start_vinum="YES" # set to YES to start vinum Durch diesen Eintrag wird das Vinum-kld geladen, das alle Objekte startet, die in der Konfiguration erwähnt werden. All dies wird vor dem Mounten der Dateisysteme getan, so dass ein automatisches &man.fsck.8; und Mounten der Dateisysteme auf Vinum-Volumes möglich ist. Beim starten von Vinum durch den Befehl vinum start liest Vinum die Konfigurationsdatenbank von einer der Vinum-Platten. Unter normalen Umständen enthält jede Platte eine identische Kopie der Konfigurationsdatenbank, so dass es keine Rolle spielt, von welcher der Platten diese eingelesen wird. Nach einem Plattencrash muss Vinum allerdings zunächst feststellen, welche der Platten zuletzt aktualisiert wurde und dann die Konfiguration von dieser Platte lesen. Danach werden (falls nötig) die Konfigurationen der "alten" Platten aktualisiert. Vinum für das Root-Dateisystem benutzen Auf einem System, das mit Hilfe von Vinum vollgespiegelte Dateisysteme hat, ist es wünschenswert, auch das Root-Dateisystem zu spiegeln. Solch eine Konfiguration ist allerdings weniger trivial als das Spiegeln eines gewöhnlichen Dateisystems, weil: Das Root-Dateisystem in einer sehr frühen Phase des Bootvorgangs verfügbar sein muss, und damit auch die Vinum-Infrastruktur. Das Volume, welches das Root-Dateisystem enthält, auch den Bootstrap und den Kernel enthält, die wiederum nur mit den systemeigenen Tools (zum Beispiel dem BIOS bei handelsüblichen PCs) gelesen werden können und meist nicht dazu gebracht werden können, Vinum zu verstehen. Im folgenden Abschnitt wird der Begriff Root-Volume benutzt, um das Vinum-Volume zu beschreiben, welches das Root-Dateisystem enthält. Es ist eine gute Idee, für dieses Volume den Namen "root" zu benutzen, aber es ist in keiner Weise technisch nötig (Das folgende Beispiel geht allerdings davon aus, dass dies der Fall ist.). Vinum für das Root-Dateisystem rechtzeitig starten Damit dies gelingt, müssen Sie folgende Aufgaben erledigen: Vinum muss zum Zeitpunkt des Bootvorganges im Kernel zur Verfügung stehen. Deswegen ist die Methode zum Start von Vinum, die in beschrieben wird, für diese Aufgabe nicht geeignet. Also muss auch der start_vinum-Parameter eigentlich nicht gesetzt werden, wenn man das folgende Setup einrichtet. Die erste Möglichkeit wäre es, Vinum statisch in den Kernel zu kompilieren, so dass es ständig verfügbar ist, was aber in der Regel nicht erwünscht ist. Ebenso gibt es die Möglichkeit /boot/loader () das Vinum-Kernelmodul früh genug laden zu lassen (und zwar noch bevor der Kernel gestartet wird). Dies kann bewerkstelligt werden, indem die Zeile geom_vinum_load="YES" in die Datei /boot/loader.conf eingetragen wird. Für Gvinum ist das oben beschriebene Prozedere alles, was Sie tun müssen, da der gesamte Startvorgang automatisch erledigt wird, sobald das Kernelmodul geladen wurde. Der folgende Text dokumentiert das Verhalten des ursprünglichen Vinum-Systems. Vinum muss früh initialisiert werden, weil es das Volume für das Root-Dateisystem bereitstellen muss. In der Voreinstellung sucht das Vinum-Kernelmodul nicht nach Laufwerken, die vielleicht Vinum-Volumeninformationen enthalten könnten, bis der Administrator (oder eines der Startskripte) den Befehl vinum start ausführt. Der folgende Absatz gibt einen Überblick - über die nötigen Schritte für FreeBSD. + über die nötigen Schritte für &os;. Durch Aufnahme der Zeile vinum.autostart="YES" in /boot/loader.confwird Vinum beim Starten des Kernels dazu veranlasst, automatisch alle Platten nach Vinuminformationen zu scannen. Beachten Sie, dass es nicht nötig ist, den Kernel davon zu unterrichten, wo er nach dem Root-Dateisystem suchen soll. /boot/loader holt sich den Namen des Root-Gerätes aus /etc/fstab und übergibt diesen dann dem Kernel. Sobald es Zeit wird, das Root-Dateisystem zu mounten, findet der Kernel anhand des Gerätenamens heraus, welchen Treiber er fragen muss, um den Namen in die interne Geräte-ID zu übersetzen (major/minor-Nummer). Ein Vinum-basiertes Root-Volume dem Bootstrap verfügbar machen - Da der aktuelle FreeBSD-Bootstrap nur 7,5 KB Code + Da der aktuelle &os;-Bootstrap nur 7,5 KB Code enthält und schon ohne Vinum die Aufgabe hat, bestimmte Dateien (wie /boot/loader) von einem UFS-Dateisystem zu lesen, ist es schier unmöglich, ihm auch noch die Interna von Vinum beizubringen, damit er die Vinum-Konfigurationsdaten auslesen und die Elemente eines Boot-Volumes selbst herausfinden könnte. Daher sind ein paar Tricks nötig, um dem Bootstrap-Code die Illusion einer Standard-"a"-Partition mit einem Root-Dateisystem vorzugaukeln. Damit dies überhaupt möglich wird, müssen die folgenden Bedingungen für das Root-Dateisystem erfüllt sein: Das Root-Volume darf weder gestriped noch RAID-5 sein. Das Root-Volume darf nicht mehr als eine konkatenierte Subdisk pro Plexus enthalten. Beachten Sie, dass es möglich und wünschenswert ist, mehrere Plexus zu haben, von denen jeder eine Kopie des Root-Dateisystems enthält. Der Bootstrap-Prozess wird hingegen nur einen dieser Plexus benutzen, um den Bootstrap und alle Dateien zu finden, bis der Kernel letztendlich das Root-Dateisystem selbst laden wird. Jede einzelne Subdisk innerhalb dieser Plexus wird dann ihre eigene Illusion der Partition "a" brauchen, damit das entsprechende Gerät bootbar wird. Es ist nicht unbedingt notwendig, dass sich jede dieser gefälschten "a"-Partitionen auf seinem Gerät an einem Ort befindet, der um den selben Wert verschoben ist wie auf den anderen Geräten, die Plexus des Root-Dateisystems enthalten. Um Unklarheiten zu verhindern, ist es jedoch eine gute Idee, die Vinum-Volumes so zu erstellen, dass die gespiegelten Geräte symmetrisch sind. Damit diese "a"-Partitionen eingerichtet werden können, muss für alle Geräte, die Teil des Root-Dateisystems sind, folgendes getan werden: Der Ort (Verschiebung vom Beginn des Gerätes) und die Größe der Subdisk, die Teil des Root-Volumes ist, muss untersucht werden: &prompt.root; gvinum l -rv root Beachten Sie, dass Vinum-Verschiebungen und -Größen in Bytes gemessen werden. Sie müssen deshalb durch 512 geteilt werden, um die Blockanzahl zu erhalten, wie sie das bsdlabel-Kommando verwendet. Führen Sie den Befehl &prompt.root; bsdlabel -e devname für jedes Gerät, dass am Root-Volume beteiligt ist, aus. devname muss entweder der Name der Platte (wie da0), im Falle einer Platte ohne Slice-Tabelle oder der Name des Slices (wie ad0s1) sein. Wenn es schon eine "a"-Partition auf dem Gerät (in der Regel wahrscheinlich ein Prä-Vinum-Root-Dateisystem) gibt, sollte diese umbenannt werden, damit sie weiterhin verfügbar bleibt (nur für den Fall). Sie wird aber nicht länger benutzt, um das System zu starten. Beachten Sie aber, dass aktive Partitionen (wie ein gemountetes Root-Dateisystem) nicht umbenannt werden können, sodass Sie entweder von einem Fixit-Medium booten müssen, oder aber mittels eines zweistufigen Prozesses (sofern Sie in einer gespiegelten Umgebung arbeiten) zuerst die Platte ändern, von der gerade nicht gebootet wurde. Nun muss die Verschiebung der Vinum-Partition (sofern vorhanden) auf diesem Gerät mit der Veschiebung der entsprechenden Root-Volume-Subdisk addiert werden. Das Resultat wird der "offset"-Wert für die neue "a"-Partition. Der "size"-Wert für diese Partition kann entsprechend der Berechnung ermittelt werden. "fstype" sollte 4.2BSD sein. Die "fsize"-, "bsize"-, und "cpg"- Werte sollten entsprechend dem eigentlichen Dateisystem gewählt werden, obwohl sie in diesem Kontext ziemlich unwichtig sind. Auf diese Art und Weise wird eine neue Partition "a" etabliert, die die Vinum-Partition auf diesem Gerät überschneidet. Beachte Sie, dass das bsdlabel-Kommando diese Überschneidung nur erlaubt, wenn die Partition richtig mit dem "vinum"-fstype markiert ist. Das ist alles. Auf jedem Gerät befindet sich nun eine gefälschte "a"-Partition, die eine Kopie des Root-Volumes enthält. Es wird dringend empfohlen, das Resultat dieser Konfiguration zu überprüfen: &prompt.root; fsck -n /dev/devnamea Denken Sie stets daran, dass alle Dateien, die Kontrollinformationen enthalten, nun relativ zum Root-Dateisystem innerhalb des Vinum-Volumes sein müssen. Denn ein neu eingerichtetes Vinum-Root-Dateisystem ist möglicherweise inkompatibel zum gerade aktiven Root-Dateisystem. Deshalb müssen insbesondere die Dateien /etc/fstab und /boot/loader.conf überprüft werden. Beim nächsten Systemstart sollte der Bootstrap die adäquaten Kontrollinformationen des neuen Vinum-basierten Root-Dateisystems automatisch herausfinden und entsprechend handeln. Am Ende des Kernel-Initialisierungsprozesses (nachdem alle Geräte angezeigt wurden) erhalten Sie bei einer erfolgreichen Konfiguration eine Nachricht ähnlich der folgenden: Mounting root from ufs:/dev/gvinum/root Beispiel eines Vinum-basierten Root-Setups Nachdem das Vinum-Root-Volume eingerichtet wurde, könnte die Ausgabe von gvinum l -rv root bespielsweise so aussehen: ... Subdisk root.p0.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p0 at offset 0 (0 B) Drive disk0 (/dev/da0h) at offset 135680 (132 kB) Subdisk root.p1.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p1 at offset 0 (0 B) Drive disk1 (/dev/da1h) at offset 135680 (132 kB) Wichtig ist hier insbesondere ist der Wert - 135680 für die Verschiebung (relativ - zur Partition /dev/da0h). Das entspricht + 135680 für die Verschiebung (relativ zur + Partition /dev/da0h). Das entspricht beim Einsatz von bsdlabel 265 512-Byte-Plattenblöcken. Dieses Root-Volume ist ebenso 245760 512-Byte-Blöcke groß. - /dev/da1h enthält die zweite Kopie - dieses Root-Volumes und ist symmetrisch aufgebaut. + /dev/da1h enthält die + zweite Kopie dieses Root-Volumes und ist symmetrisch aufgebaut. Das Bsdlabel für diese Geräte könnte so aussehen: ... 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*) c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*) h: 71771672 16 vinum # (Cyl. 0*- 4467*) Wie man leicht feststellen kann, entspricht der Parameter "size" der gefälschten "a"-Partition dem ausgewiesenen Wert von oben, während der Parameter "offset" gleich der Summe der Verschiebung innerhalb der Vinum-Partition "h" und der Verschiebung innerhalb des Geräts (oder Slice) ist. Dies ist ein typischer Aufbau, der nötig ist, um die in beschriebenen Probleme zu vermeiden. Die gesamte Partition "a" befindet sich in "h", die alle Vinum-Daten für dieses Gerät enthält. Beachten Sie, dass in dem oben beschriebenen Beispiel das gesamte Gerät Vinum gewidmet ist und keine Prä-Vinum-Partition zurückgelassen wurde, da es sich im Beispiel um eine neu eingerichtete Platte handelt, die nur für die Vinum-Konfiguration bestimmt war. Fehlerbehebung Der folgende Abschnitt beschreibt einige bekannte Probleme und Fallstricke bei der Vinum-Konfiguration sowie deren Behebung. Der System-Bootstrap lädt zwar, das System startet aber nicht. Wenn aus irgendeinem Grund das System nicht mit dem Booten fortfährt, kann man den Bootstrap während der 10-Sekunden-Warnung durch Drücken der Leertaste unterbrechen. Die loader-Variablen (wie vinum.autostart) können mittels des show-Kommandos untersucht, und mit set oder unset geändert werden. Wenn das einzige Problem das Fehlen des Vinum-Kernelmoduls in der Liste der automatisch zu ladenden Module ist, hilft ein einfaches load geom_vinum. Danach können Sie den Bootvorgang mit boot -as fortsetzen. Die Optionen fordern den Kernel auf, nach dem zu mountenden Root-Dateisystem zu fragen (), und den Bootvorgang im Single-User-Modus () zu beenden, in dem das Root-Dateisystem schon schreibgeschützt gemountet ist. Auf diese Weise wird keine Dateninkonsistenz zwischen den Plexus riskiert, auch wenn nur ein Plexus eines Multi-Plexus-Volumes gemountet wurde. Beim Prompt, das nach einem Root-Dateisystem fragt, kann jedes Gerät angegeben werden, dass ein gültiges Root-Dateisystem hat. Wenn /etc/fstab richtig konfiguriert wurde, sollte die Vorgabe etwas wie ufs:/dev/gvinum/root sein. Eine typische Alternative würde etwas wie ufs:da0d sein, welches eine hypothetische Partition sein könnte, die ein Pre-Vinum-Root-Dateisystem enthält. Vorsicht sollte walten, wenn eine der alias "a"-Partitionen hier eingegeben wird, die eigentlich Referenzen auf die Subdisks des Vinum-Root-Dateisystems sind, da so nur ein Stück eines gespiegelten Root-Gerätes gemountet werden würde. Wenn das Dateisystem später zum Lesen und Schreiben gemountet werden soll, ist es nötig, die anderen Plexus des Vinum-Root-Volumes zu entfernen, weil diese Plexus andernfalls inkonsistente Daten enthalten würden. Nur der primäre Bootstrap lädt Wenn das Laden von /boot/loader fehlschlägt, aber der primäre Bootstrap dennoch lädt (sichtbar an dem einzelnen Strich in der linken Spalte des Bildschirms gleich nachdem der Bootprozess startet), kann man versuchen, den primären Bootstrap an diesem Punkt durch Benutzen der Leertaste zu unterbrechen. Dies wird den Bootstrap in der zweiten Phase stoppen (siehe dazu auch ). Hier kann nun der Versuch unternommen werden, von einer anderen Partition zu booten, wie beispielsweise dem vorhergehenden Root-Dateisystem, das von "a" verschoben wurde. Nichts bootet, der Bootstrap hängt sich auf Diese Situation wird vorkommen, wenn der Bootstrap durch die Vinum-Installation zerstört worden ist. Unglücklicherweise lässt Vinum am Anfang seiner Partition nur 4 KB frei und schreibt dahinter seine Kopfinformationen. Allerdings benötigen Stufe-Eins- und -Zwei-Bootstraps plus dem dazwischen eingebetteten bsdlabel momentan 8 KB. Demzufolge wird die Vinum-Installation, wenn die Vinum-Partition mit der Verschiebung 0 (innerhalb eines Slice oder einer Platte, die zum Start bestimmt waren) eingerichtet wurde, den Bootstrap zerstören. Analog wird eine anschließende Reinstallation eines Bootstrap (zum Beispiel durch Booten eines Fixit-Mediums) mit bsdlabel -B, wie in beschrieben, den Vinum-Kopf zerstören und Vinum wird seine Platte(n) nicht mehr finden können. Obwohl keine eigentlichen Vinum-Konfigurationsdaten oder Daten in den Vinum-Volumes zerstört werden und es möglich wäre, alle Daten wiederherzustellen, indem die exakt gleichen Vinum-Konfigurationsdaten noch einmal eingegeben werden, bleibt die Situation schwer zu bereinigen, da es nötig ist, die gesamte Vinum-Partition um mindestens 4 KB nach hinten zu verschieben, damit Bootstrap und Vinum-Kopf nicht mehr kollidieren.