diff --git a/de_DE.ISO8859-1/books/handbook/advanced-networking/chapter.sgml b/de_DE.ISO8859-1/books/handbook/advanced-networking/chapter.sgml index c1e1cc67b9..ca74d739f8 100644 --- a/de_DE.ISO8859-1/books/handbook/advanced-networking/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/advanced-networking/chapter.sgml @@ -1,5812 +1,5834 @@ Johann Kois Übersetzt von Weiterführende Netzwerkthemen Übersicht Dieses Kapitel beschreibt verschiedene weiterführende Netzwerkthemen. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Die Grundlagen von Gateways und Routen kennen. Bluetooth- sowie drahtlose, der Norm IEEE 802.11 entsprechende, Geräte mit FreeBSD verwenden können. Eine Bridge unter FreeBSD einrichten können. Einen plattenlosen Rechner über das Netzwerk starten können. Wissen, wie man NAT (Network Address Translation) einrichtet. Zwei Computer über PLIP verbinden können. IPv6 auf einem FreeBSD-Rechner einrichten können. ATM einrichten können. CARP, das Common Access Redundancy Protocol, unter &os; einsetzen können. Bevor Sie dieses Kapitel lesen, sollten Sie Die Grundlagen der /etc/rc-Skripte verstanden haben. Mit der grundlegenden Netzwerkterminologie vertraut sein. Einen neuen FreeBSD-Kernel konfigurieren und installieren können (). Wissen, wie man zusätzliche Softwarepakete von Drittherstellern installiert (). Coranth Gryphon Beigetragen von Gateways und Routen Routing Gateway Subnetz Damit ein Rechner einen anderen über ein Netzwerk finden kann, muss ein Mechanismus vorhanden sein, der beschreibt, wie man von einem Rechner zum anderen gelangt. Dieser Vorgang wird als Routing bezeichnet. Eine Route besteht aus einem definierten Adressenpaar: Einem Ziel und einem Gateway. Dieses Paar zeigt an, dass Sie über das Gateway zum Ziel gelangen wollen. Es gibt drei Arten von Zielen: Einzelne Rechner (Hosts), Subnetze und das Standardziel. Die Standardroute wird verwendet, wenn keine andere Route zutrifft. Wir werden Standardrouten später etwas genauer behandeln. Außerdem gibt es drei Arten von Gateways: Einzelne Rechner (Hosts), Schnittstellen (Interfaces, auch als Links bezeichnet), sowie Ethernet Hardware-Adressen (MAC-Adressen). Ein Beispiel Um die verschiedenen Aspekte des Routings zu veranschaulichen, verwenden wir folgende Ausgaben von netstat: &prompt.user; netstat -r Routing tables Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0 Defaultroute Die ersten zwei Zeilen geben die Standardroute (die wir im nächsten Abschnitt behandeln), sowie die localhost Route an. Loopback-Gerät Das in der Routingtabelle für localhost festgelegte Interface (Netif-Spalte) lo0, ist auch als loopback-Gerät (Prüfschleife) bekannt. Das heißt, dass der ganze Datenverkehr für dieses Ziel intern (innerhalb des Gerätes) bleibt, anstatt ihn über ein Netzwerk (LAN) zu versenden, da das Ziel dem Start entspricht. Ethernet MAC-Adresse Der nächste auffällige Punkt sind die mit 0:e0: beginnenden Adressen. Es handelt sich dabei um Ethernet Hardwareadressen, die auch als MAC-Adressen bekannt sind. FreeBSD identifiziert Rechner im lokalen Netz automatisch (im Beispiel test0) und fügt eine direkte Route zu diesem Rechner hinzu. Dies passiert über die Ethernet-Schnittstelle ed0. Außerdem existiert ein Timeout (in der Spalte Expire) für diese Art von Routen, der verwendet wird, wenn dieser Rechner in einem definierten Zeitraum nicht reagiert. Wenn dies passiert, wird die Route zu diesem Rechner automatisch gelöscht. Rechner im lokalen Netz werden durch einen als RIP (Routing Information Protocol) bezeichneten Mechanismus identifiziert, der den kürzesten Weg zu den jeweiligen Rechnern bestimmt. Subnetz FreeBSD fügt außerdem Subnetzrouten für das lokale Subnetz hinzu (10.20.30.255 ist die Broadcast-Adresse für das Subnetz 10.20.30, example.com ist der zu diesem Subnetz gehörige Domainname). Das Ziel link#1 bezieht sich auf die erste Ethernet-Karte im Rechner. Sie können auch feststellen, dass keine zusätzlichen Schnittstellen angegeben sind. Routen für Rechner im lokalen Netz und lokale Subnetze werden automatisch durch den routed Daemon konfiguriert. Ist dieser nicht gestartet, sind nur statisch definierte (explizit eingegebene) Routen vorhanden. Die Zeile host1 bezieht sich auf unseren Rechner, der durch seine Ethernetadresse bekannt ist. Da unser Rechner der Sender ist, verwendet FreeBSD automatisch das Loopback-Gerät (lo0), anstatt den Datenverkehr über die Ethernetschnittstelle zu senden. Die zwei host2 Zeilen sind ein Beispiel dafür, was passiert, wenn wir ein &man.ifconfig.8; Alias verwenden (Lesen Sie dazu den Abschnitt über Ethernet, wenn Sie wissen wollen, warum wir das tun sollten.). Das Symbol => (nach der lo0-Schnittstelle) sagt aus, dass wir nicht nur das Loopbackgerät verwenden (da sich die Adresse auf den lokalen Rechner bezieht), sondern dass es sich zusätzlich auch um ein Alias handelt. Solche Routen sind nur auf Rechnern vorhanden, die den Alias bereitstellen; alle anderen Rechner im lokalen Netz haben für solche Routen nur eine einfache link#1 Zeile. Die letzte Zeile (Zielsubnetz 224) behandelt das Multicasting, das wir in einem anderen Abschnitt besprechen werden. Schließlich gibt es für Routen noch verschiedene Attribute, die Sie in der Spalte Flags finden. Nachfolgend finden Sie eine kurze Übersicht von einigen dieser Flags und ihrer Bedeutung: U Up: Die Route ist aktiv. H Host: Das Ziel der Route ist ein einzelner Rechner (Host). G Gateway: Alle Daten, die an dieses Ziel gesendet werden, werden von diesem System an ihr jeweiliges Ziel weitergeleitet. S Static: Diese Route wurde manuell konfiguriert, das heißt sie wurde nicht automatisch vom System erzeugt. C Clone: Erzeugt eine neue Route, basierend auf der Route für den Rechner, mit dem wir uns verbinden. Diese Routenart wird normalerweise für lokale Netzwerke verwendet. W WasCloned: Eine Route, die automatisch konfiguriert wurde. Sie basiert auf einer lokalen Netzwerkroute (Clone). L Link: Die Route beinhaltet einen Verweis auf eine Ethernetkarte (MAC-Adresse). Standardrouten Defaultroute Standardroute Defaultroute Wenn sich der lokale Rechner mit einem entfernten Rechner verbinden will, wird die Routingtabelle überprüft, um festzustellen, ob bereits ein bekannter Pfad vorhanden ist. Gehört dieser entfernte Rechner zu einem Subnetz, dessen Pfad uns bereits bekannt ist (Cloned route), dann versucht der lokale Rechner über diese Schnittstelle eine Verbindung herzustellen. Wenn alle bekannten Pfade nicht funktionieren, hat der lokale Rechner eine letzte Möglichkeit: Die Standardroute (Defaultroute). Bei dieser Route handelt es sich um eine spezielle Gateway-Route (gewöhnlich die einzige im System vorhandene), die im Flags-Feld immer mit C gekennzeichnet ist. Für Rechner im lokalen Netzwerk ist dieses Gateway auf welcher Rechner auch immer eine Verbindung nach außen hat gesetzt (entweder über eine PPP-Verbindung, DSL, ein Kabelmodem, T1 oder eine beliebige andere Netzwerkverbindung). Wenn Sie die Standardroute für einen Rechner konfigurieren, der selbst als Gateway zur Außenwelt funktioniert, wird die Standardroute zum Gateway-Rechner Ihres Internetanbieter (ISP) gesetzt. Sehen wir uns ein Beispiel für Standardrouten an. So sieht eine übliche Konfiguration aus: [Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW] Die Rechner Local1 und Local2 befinden sich auf Ihrer Seite. Local1 ist mit einem ISP über eine PPP-Verbindung verbunden. Dieser PPP-Server ist über ein lokales Netzwerk mit einem anderen Gateway-Rechner verbunden, der über eine Schnittstelle die Verbindung des ISP zum Internet herstellt. Die Standardrouten für Ihre Maschinen lauten: Host Standard Gateway Schnittstelle Local2 Local1 Ethernet Local1 T1-GW PPP Eine häufig gestellte Frage lautet: Warum (oder wie) sollten wir T1-GW als Standard-Gateway für Local1 setzen, statt den (direkt verbundenen) ISP-Server zu verwenden?. Bedenken Sie, dass die PPP-Schnittstelle für die Verbindung eine Adresse des lokalen Netzes des ISP verwendet. Daher werden Routen für alle anderen Rechner im lokalen Netz des ISP automatisch erzeugt. Daraus folgt, dass Sie bereits wissen, wie Sie T1-GW erreichen können! Es ist also unnötig, einen Zwischenschritt über den ISP-Server zu machen. Es ist üblich, die Adresse X.X.X.1 als Gateway-Adresse für ihr lokales Netzwerk zu verwenden. Für unser Beispiel bedeutet dies Folgendes: Wenn Ihr lokaler Klasse-C-Adressraum 10.20.30 ist und Ihr ISP 10.9.9 verwendet, sehen die Standardrouten so aus: Rechner (Host) Standardroute Local2 (10.20.30.2) Local1 (10.20.30.1) Local1 (10.20.30.1, 10.9.9.30) T1-GW (10.9.9.1) Sie können die Standardroute ganz einfach in der Datei /etc/rc.conf festlegen. In unserem Beispiel wurde auf dem Rechner Local2 folgende Zeile in /etc/rc.conf eingefügt: defaultrouter="10.20.30.1" Die Standardroute kann über &man.route.8; auch direkt gesetzt werden: &prompt.root; route add default 10.20.30.1 Weitere Informationen zum Bearbeiten von Netzwerkroutingtabellen finden Sie in &man.route.8;. Rechner mit zwei Heimatnetzen Dual-Homed-Hosts Es gibt noch eine Konfigurationsmöglichkeit, die wir besprechen sollten, und zwar Rechner, die sich in zwei Netzwerken befinden. Technisch gesehen, zählt jeder als Gateway arbeitende Rechner zu den Rechnern mit zwei Heimatnetzen (im obigen Beispiel unter Verwendung einer PPP-Verbindung). In der Praxis meint man damit allerdings nur Rechner, die sich in zwei lokalen Netzen befinden. Entweder verfügt der Rechner über zwei Ethernetkarten und jede dieser Karten hat eine Adresse in einem separaten Subnetz, oder der Rechner hat nur eine Ethernetkarte und verwendet &man.ifconfig.8; Aliasing. Die erste Möglichkeit wird verwendet, wenn zwei physikalisch getrennte Ethernet-Netzwerke vorhanden sind, die zweite, wenn es nur ein physikalisches Ethernet-Netzwerk gibt, das aber aus zwei logisch getrennten Subnetzen besteht. In beiden Fällen werden Routingtabellen erstellt, damit jedes Subnetz weiß, dass dieser Rechner als Gateway zum anderen Subnetz arbeitet (inbound route). Diese Konfiguration (der Gateway-Rechner arbeitet als Router zwischen den Subnetzen) wird häufig verwendet, wenn es darum geht, Paketfilterung oder eine Firewall (in eine oder beide Richtungen) zu implementieren. Soll dieser Rechner Pakete zwischen den beiden Schnittstellen weiterleiten, müssen Sie diese Funktion manuell konfigurieren und aktivieren. Lesen Sie den nächsten Abschnitt, wenn Sie weitere Informationen zu diesem Thema benötigen. Einen Router konfigurieren Router Ein Netzwerkrouter ist einfach ein System, das Pakete von einer Schnittstelle zur anderen weiterleitet. Internetstandards und gute Ingenieurspraxis sorgten dafür, dass diese Funktion in FreeBSD in der Voreinstellung deaktiviert ist. Sie können diese Funktion aktivieren, indem Sie in &man.rc.conf.5; folgende Änderung durchführen: gateway_enable=YES # Auf YES setzen, wenn der Rechner als Gateway arbeiten soll Diese Option setzt die &man.sysctl.8;-Variable net.inet.ip.forwarding auf 1. Wenn Sie das Routing kurzzeitig unterbrechen wollen, können Sie die Variable auf 0 setzen. BGP RIP OSPF Ihr neuer Router benötigt nun noch Routen, um zu wissen, wohin er den Verkehr senden soll. Haben Sie ein (sehr) einfaches Netzwerk, können Sie statische Routen verwenden. FreeBSD verfügt über den Standard BSD-Routing-Daemon &man.routed.8;, der RIP (sowohl Version 1 als auch Version 2) und IRDP versteht. BGP v4, OSPF v2 und andere Protokolle werden von net/zebra unterstützt. Es stehen auch kommerzielle Produkte wie gated zur Verfügung. Al Hoang Beigetragen von Statische Routen einrichten Manuelle Konfiguration Nehmen wir an, dass wir über folgendes Netzwerk verfügen: INTERNET | (10.0.0.1/24) Default Router to Internet | |Interface xl0 |10.0.0.10/24 +------+ | | RouterA | | (FreeBSD gateway) +------+ | Interface xl1 | 192.168.1.1/24 | +--------------------------------+ Internal Net 1 | 192.168.1.2/24 | +------+ | | RouterB | | +------+ | 192.168.2.1/24 | Internal Net 2 RouterA, ein &os;-Rechner, dient als Router für den Zugriff auf das Internet. Die Standardroute ist auf 10.0.0.1 gesetzt, damit ein Zugriff auf das Internet möglich wird. Wir nehmen nun an, dass RouterB bereits konfiguriert ist und daher weiß, wie er andere Rechner erreichen kann. Dazu wird die Standardroute von RouterB auf 192.168.1.1 gesetzt, da dieser Rechner als Gateway fungiert. Sieht man sich die Routingtabelle für RouterA an, erhält man folgende Ausgabe: &prompt.user; netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0/24 link#1 UC 0 0 xl0 192.168.1/24 link#2 UC 0 0 xl1 Mit dieser Routingtabelle kann RouterA unser internes Netz 2 nicht erreichen, da keine Route zum Rechner 192.168.2.0/24 vorhanden ist. Um dies zu korrigieren, kann die Route manuell gesetzt werden. Durch den folgenden Befehl wird das interne Netz 2 in die Routingtabelle des Rechners RouterA aufgenommen, indem 192.168.1.2 als nächster Zwischenschritt verwenden wird: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 Ab sofort kann RouterA alle Rechner des Netzwerks 192.168.2.0/24 erreichen. Routen dauerhaft einrichten Das obige Beispiel ist für die Konfiguration einer statischen Route auf einem laufenden System geeignet. Diese Information geht jedoch verloren, wenn der &os;-Rechner neu gestartet werden muss. Um dies zu verhindern, wird diese Route in /etc/rc.conf eingetragen: # Add Internal Net 2 as a static route static_routes="internalnet2" route_internalnet2="-net 192.168.2.0/24 192.168.1.2" Die Variable static_routes enthält eine Reihe von Strings, die durch Leerzeichen getrennt sind. Jeder String bezieht sich auf den Namen einer Route. In unserem Beispiel hat static_routes internalnet2 als einzigen String. Zusätzlich verwendet man die Konfigurationsvariable route_internalnet2, in der alle sonstigen an &man.route.8; zu übergebenden Parameter festgelegt werden. In obigen Beispiel hätte man folgenden Befehl verwendet: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 Daher wird "-net 192.168.2.0/24 192.168.1.2" als Parameter der Variable route_ angegeben. Wie bereits erwähnt, können bei static_routes auch mehrere Strings angegeben werden. Dadurch lassen sich mehrere statische Routen anlegen. Durch folgende Zeilen werden auf einem imaginären Rechner statische Routen zu den Netzwerken 192.168.0.0/24 sowie 192.168.1.0/24 definiert: static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1" Verteilung von Routing-Informationen routing propagation Wir haben bereits darüber gesprochen, wie wir unsere Routen zur Außenwelt definieren, aber nicht darüber, wie die Außenwelt uns finden kann. Wir wissen bereits, dass Routing-Tabellen so erstellt werden können, dass sämtlicher Verkehr für einen bestimmten Adressraum (in unserem Beispiel ein Klasse-C-Subnetz) zu einem bestimmten Rechner in diesem Netzwerk gesendet wird, der die eingehenden Pakete im Subnetz verteilt. Wenn Sie einen Adressraum für Ihre Seite zugewiesen bekommen, richtet Ihr Diensteanbieter seine Routingtabellen so ein, dass der ganze Verkehr für Ihr Subnetz entlang Ihrer PPP-Verbindung zu Ihrer Seite gesendet wird. Aber woher wissen die Seiten in der Außenwelt, dass sie die Daten an Ihren ISP senden sollen? Es gibt ein System (ähnlich dem verbreiteten DNS), das alle zugewiesenen Adressräume verwaltet und ihre Verbindung zum Internet-Backbone definiert und dokumentiert. Der Backbone ist das Netz aus Hauptverbindungen, die den Internetverkehr in der ganzen Welt transportieren und verteilen. Jeder Backbone-Rechner verfügt über eine Kopie von Haupttabellen, die den Verkehr für ein bestimmtes Netzwerk hierarchisch vom Backbone über eine Kette von Diensteanbietern bis hin zu Ihrer Seite leiten. Es ist die Aufgabe Ihres Diensteanbieters, den Backbone-Seiten mitzuteilen, dass sie mit Ihrer Seite verbunden wurden. Durch diese Mitteilung der Route ist nun auch der Weg zu Ihnen bekannt. Dieser Vorgang wird als Bekanntmachung von Routen (routing propagation) bezeichnet. Problembehebung traceroute Manchmal kommt es zu Problemen bei der Bekanntmachung von Routen, und einige Seiten sind nicht in der Lage, Sie zu erreichen. Vielleicht der nützlichste Befehl, um festzustellen, wo das Routing nicht funktioniert, ist &man.traceroute.8;. Er ist außerdem sehr nützlich, wenn Sie einen entfernten Rechner nicht erreichen können (lesen Sie dazu auch &man.ping.8;). &man.traceroute.8; wird mit dem zu erreichenden Rechner (Host) ausgeführt. Angezeigt werden die Gateway-Rechner entlang des Verbindungspfades. Schließlich wird der Zielrechner erreicht oder es kommt zu einem Verbindungsabbruch (beispielsweise durch Nichterreichbarkeit eines Gateway-Rechners). Weitere Informationen finden Sie in &man.traceroute.8;. Multicast-Routing Multicast-Routing Kerneloptionen MROUTING &os; unterstützt sowohl Multicast-Anwendungen als auch Multicast-Routing. Multicast-Anwendungen müssen nicht konfiguriert werden, sie laufen einfach. Multicast-Routing muss in der Kernelkonfiguration aktiviert werden: options MROUTING Zusätzlich muss &man.mrouted.8;, der Multicast-Routing-Daemon, über die Datei /etc/mrouted.conf eingerichtet werden, um Tunnel und DVMRP zu aktivieren. Weitere Informationen zu diesem Thema finden Sie in &man.mrouted.8;. Loader Marc Fonvieille Murray Stokely Drahtlose Netzwerke Netzwerke, drahtlos 802.11 drahtlose Netzwerke Grundlagen Die meisten drahtlosen Netzwerke basieren auf dem Standard IEEE 802.11. Sie bestehen aus Stationen, die in der Regel im 2,4 GHz- oder im 5 GHz-Band miteinander kommunizieren. Es ist aber auch möglich, dass regional andere Frequenzen, beispielsweise im 2,3 GHz- oder 4,9 GHz-Band, verwendet werden. 802.11-Netzwerke können auf zwei verschiedene Arten aufgebaut sein: Im Infrastruktur-Modus agiert eine Station als Master, mit dem sich alle andere Stationen verbinden. Die Summe aller Stationen wird als BSS (Basic Service Set), die Master-Station hingegen als Access Point (AP) bezeichnet. In einem BSS läuft jedwede Kommunikation über den Access Point. Die zweite Form drahtloser Netzwerke sind die sogenannten Ad-hoc-Netzwerke (auch als IBSS bezeichnet), in denen es keinen Access Point gibt und in denen die Stationen direkt miteinander kommunizieren. Die ersten 802.11-Netzwerke arbeiteten im 2,4 GHz-Band und nutzten dazu Prokolle der IEEE-Standards 802.11 sowie 802.11b. Diese Standards legen unter anderem Betriebsfrequenzen sowie Merkmale des MAC-Layers (wie Frames und Transmissionsraten) fest. Später kam der Standard 802.11a hinzu, der im 5 GHz-Band, im Gegensatz zu den ersten beiden Standards aber mit unterschiedlichen Signalmechanismen und höheren Transmissionsraten arbeitet. Der neueste Standard 802.11g implementiert die Signal- und Transmissionsmechanismen von 802.11a im 2,4 GHz-Band, ist dabei aber abwärtskompatibel zu 802.11b-Netzwerken. Unabhängig von den zugrundeliegenden Transportmechanismen verfügen 802.11-Netzwerke über diverse Sicherheitsmechanismen. Der ursprüngliche 802.11-Standard definierte lediglich ein einfaches Sicherheitsprotokoll namens WEP. Dieses Protokoll verwendet einen fixen (gemeinsam verwendeten) Schlüssel sowie die RC4-Kryptografie-Chiffre, um Daten verschlüsselt über das drahtlose Netzwerk zu senden. Alle Stationen des Netzwerks müssen sich auf den gleichen fixen Schlüssel einigen, um miteinander kommunizieren zu können. Dieses Schema ist sehr leicht zu knacken und wird deshalb heute kaum mehr eingesetzt. Aktuelle Sicherheitsmechanismen bauen auf dem Standard IEEE 802.11i auf, der neue kryptografische Schlüssel (Chiffren), ein neues Protokoll für die Anmeldung von Stationen an einem Access Point sowie Mechanismen zum Austausch von Schlüsseln als Vorbereitung der Kommunikation zwischen verschiedenen Geräten festlegt. Kryptografische Schlüssel werden regelmäßig getauscht. Außerdem gibt es Mechanismen, um Einbruchsversuche zu entdecken (und Gegenmaßnahmen ergreifen zu können). Ein weiteres häufig verwendetes Sicherheitsprotokoll ist WPA. Dabei handelt es sich um einen Vorläufer von 802.11i, der von einem Industriekonsortium als Zwischenlösung bis zur endgültigen Verabschiedung von 802.11i entwickelt wurde. WPA definiert eine Untergruppe der Anforderungen des 802.11i-Standards und ist für den Einsatz in älterer Hardware vorgesehen. WPA benötigt nur den (auf dem ursprünglichen WEP-Code basierenden) TKIP-Chiffre. 802.11i erlaubt zwar auch die Verwendung von TKIP, fordert aber zusätzlich eine stärkere Chiffre (AES-CCM) für die Datenverschlüsselung. (AES war für WPA nicht vorgesehen, weil man es als zu rechenintensiv für den Einsatz in älteren Geräten ansah.) Neben den weiter oben erwähnten Standards ist auch der Standard 802.11e von großer Bedeutung. Dieser definiert Protokolle zur Übertragung von Multimedia-Anwendungen wie das Streaming von Videodateien oder Voice-over-IP (VoIP) in einem 802.11-Netzwerk. Analog zu 802.11i verfügt auch 802.11e über eine vorläufige Spezifikation namens WMM (ursprünglich WME), die von einem Industriekonsortium als Untergruppe von 802.11e spezifiziert wurde, um Multimedia-Anwendungen bereits vor der endgültigen Verabschiedung des 802.11e-Standards implementieren zu können. 802.11e sowie WME/WMM erlauben eine Prioritätenvergabe beim Datentransfer im einem drahtlosen Netzwerk. Möglich wird dies durch den Einsatz von Quality of Service-Protokollen (QoS) und erweiterten Medienzugriffsprotokollen. Werden diese Protokolle korrekt implementiert, erlauben sie daher hohe Datenübertragungsraten und einen priorisierten Datenfluss. &os; unterstützt seit der Version 6.0 die Standards 802.11a, 802.11b, sowie 802.11g. Ebenfalls unterstützt werden WPA sowie die Sicherheitsprotokolle gemäß 802.11i (dies sowohl für 11a, 11b als auch 11g). QoS und Verkehrpriorisierung, die von den WME/WMM-Protokollen benötigt werden, werden ebenfalls (allerdings nicht für alle drahtlosen Geräte) unterstützt. Basiskonfiguration Kernelkonfiguration Um ein drahtloses Netzwerk zu nutzen, benötigen Sie eine drahtlose Netzkarte und einen Kernel, der drahtlose Netzwerke unterstützt. Der &os;-Kernel unterstützt den Einsatz von Kernelmodulen. Daher müssen Sie nur die Unterstützung für die von Ihnen verwendeten Geräte aktivieren. Als Erstes benötigen Sie ein drahtloses Gerät. Die meisten drahtlosen Geräte verwenden Bauteile von Atheros und werden deshalb vom &man.ath.4;-Treiber unterstützt. Um diesen Treiber zu verwenden, nehmen Sie die folgende Zeile in die Datei /boot/loader.conf auf: if_ath_load="YES" Der Atheros-Treiber besteht aus drei Teilen: dem Treiber selbst (&man.ath.4;), dem Hardware-Support-Layer für die chip-spezifischen Funktionen (&man.ath.hal.4;) sowie einem Algorithmus zur Auswahl der korrekten Frame-Übertragungsrate (ath_rate_sample). Wenn Sie die Unterstützung für diesen Treiber als Kernelmodul laden, kümmert sich dieses automatisch um diese Aufgaben. Verwenden Sie ein Nicht-Atheros-Gerät, so müssen Sie hingegen das für dieses Gerät geeignete Modul laden, beispielsweise if_wi_load="YES" für Geräte, die auf Bauteilen von Intersil Prism basieren und daher den Treiber &man.wi.4; voraussetzen. In den folgenden Abschnitten wird der &man.ath.4;-Treiber verwendet. Verwenden Sie ein anderes Gerät, müssen Sie diesen Wert daher an Ihre Konfiguration anpassen. Eine Liste aller verfügbaren Treiber für drahtlose Geräte finden Sie in der Manualpage &man.wlan.4;. Gibt es keinen nativen &os;-Treiber für Ihr drahtloses Gerät, können Sie möglicherweise mit NDIS einen &windows;-Treiber verwenden. Neben dem korrekten Treiber benötigen Sie auch die Unterstützung für 802.11-Netzwerke. Für den &man.ath.4;-Treiber wird dazu automatisch das Kernelmodul &man.wlan.4; geladen. Zusätzlich benötigen Sie noch Module zur Verschlüsselung ihres drahtlosen Netzwerks. Diese werden normalerweise dynamisch vom &man.wlan.4;-Modul geladen. Im folgenden Beispiel erfolgt allerdings eine manuelle Konfiguration. Folgende Module sind verfügbar: &man.wlan.wep.4;, &man.wlan.ccmp.4; sowie &man.wlan.tkip.4;. Sowohl &man.wlan.ccmp.4; als auch &man.wlan.tkip.4; werden nur benötigt, wenn Sie WPA und/oder die Sicherheitsprotokolle von 802.11i verwenden wollen. Wollen Sie Ihr Netzwerk hingegen offen betreiben (also völlig ohne Verschlüsselung), benötigen Sie nicht einmal die &man.wlan.wep.4;-Unterstützung. Um alle drei Module beim Systemstart zu laden, fügen Sie folgende Zeilen in die Datei /boot/loader.conf ein: wlan_wep_load="YES" wlan_ccmp_load="YES" wlan_tkip_load="YES" Danach müssen Sie Ihr &os;-System neu starten. Alternativ können Sie die Kernelmodule aber auch manuell mit &man.kldload.8; laden. Wollen Sie keine Kernelmodule verwenden, können Sie die benötigten Treiber auch in Ihren Kernel kompilieren. Daz nehmen Sie folgende Zeilen in Ihre Kernelkonfigurationsdatei auf: device ath # Atheros IEEE 802.11 wireless network driver device ath_hal # Atheros Hardware Access Layer device ath_rate_sample # John Bicket's SampleRate control algorithm. device wlan # 802.11 support (Required) device wlan_wep # WEP crypto support for 802.11 devices device wlan_ccmp # AES-CCMP crypto support for 802.11 devices device wlan_tkip # TKIP and Michael crypto support for 802.11 devices Danach bauen Sie den neuen Kernel und starten Ihr &os;-System neu. Während des Systemstarts sollten nun einige Informationen ähnlich den folgenden über das von Ihnen verwendete drahtlose Gerät ausgegeben werden: ath0: <Atheros 5212> mem 0xff9f0000-0xff9fffff irq 17 at device 2.0 on pci2 ath0: Ethernet address: 00:11:95:d5:43:62 ath0: mac 7.9 phy 4.5 radio 5.6 Infrastruktur-Modus Drahtlose Netzwerke werden in der Regel im Infrastruktur-Modus (auch BSS-Modus genannt) betrieben. Dazu werden mehrere drahtlose Access Points zu einem gemeinsamen drahtlosen Netzwerk verbunden. Jedes dieser drahtlosen Netzwerke hat einen eigenen Namen, der als SSID bezeichnet wird. Alle Clients eines drahtlosen Netzwerks verbinden sich in diesem Modus mit einem Access Point. &os;-Clients Einen Access Point finden Um nach drahtlosen Netzwerken zu suchen, verwenden Sie ifconfig. Dieser Scanvorgang kann einige Zei in Anspruch nehmen, da dazu jede verfügbare Frequenz auf verfügbare Access Points hin überprüft werden muss. Um die Suche zu starten, müssen Sie als Super-User angemeldet sein: &prompt.root; ifconfig ath0 up scan SSID BSSID CHAN RATE S:N INT CAPS -dlinkap 00:13:46:49:41:76 6 54M 29:0 100 EPS WPA WME -freebsdap 00:11:95:c3:0d:ac 1 54M 22:0 100 EPS WPA +dlinkap 00:13:46:49:41:76 6 54M 29:3 100 EPS WPA WME +freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS WPA Ihre Netzwerkkarte muss in den Status versetzt werden, bevor Sie den ersten Scanvorgang starten können. Für spätere Scans ist dies aber nicht mehr erforderlich. Als Ergebnis erhalten Sie eine Liste mit allen gefundenen BSS/IBSS-Netzwerken. Zusätzlich zur SSID (dem Namen des Netzwerks) wird auch die BSSID ausgegeben. Dabei handelt es sich um MAC-Adresse des Access Points. Das Feld CAPS gibt den Typ des Netzwerks sowie die Fähigkeiten der Stationen innerhalb des Netzwerks an: E Extended Service Set (ESS). Zeigt an, dass die Station Teil eines Infrastruktur-Netzwerks ist (und nicht eines IBSS/Ad-hoc-Netzwerks). I IBSS/Ad-hoc-Netzwerk. Die Station ist Teil eines Ad-hoc-Netzwerks (und nicht eines ESS-Netzwerks). P Privacy. Alle Datenframes, die innerhalb des BSS ausgetauscht werden, sind verschlüsselt. Dieses BSS verwendet dazu kryptografische Verfahren wie WEP, TKIP oder AES-CCMP. S Short Preamble. Das Netzwerk verwendet eine kurze Präambel (definiert in 802.11b High Rate/DSSS PHY). Eine kurze Präambel verwendet ein 56 Bit langes Sync-Feld (im Gegensatz zu einer langen Präambel, die ein 128 Bit langes Sync-Feld verwendet). s Short slot time. Das 802.11g-Netzwerk verwendet eine kurze Slotzeit, da es in diesem Netzwerk keine veralteten (802.11b) Geräte gibt. Um eine Liste der bekannten Netzwerke auszugeben, verwenden Sie den folgenden Befehl: &prompt.root; ifconfig ath0 list scan Diese Liste kann entweder automatisch durch das drahtlose Gerät oder manuell durch eine -Aufforderung aktualisiert werden. Veraltete Informationen werden dabei automatisch entfernt. Basiseinstellungen Dieser Abschnitt beschreibt, wie Sie ein einfaches drahtloses Netzerk ohne Verschlüsselung unter &os; einrichten. Nachdem Sie sich mit den Informationen dieses Abschnitts vertraut gemacht haben, sollten Sie Ihr drahtloses Netzwerk mit WPA verschlüsseln. Das Einrichten eines drahtlosen Netzwerks erfolgt in drei Schritten: Der Auswahl eines Access Points, der Anmeldung Ihrer Station sowie der Konfiguration Ihrer IP-Adresse. Einen Access Point auswählen Im Normalfall wird sich Ihre Station automatisch mit einem der zur Verfügung stehenden Access Points verbinden. Sie müssen dazu lediglich Ihr drahtloses Gerät aktivieren. Alternativ können Sie auch einen Eintrag ähnlich dem folgenden in /etc/rc.conf aufnehmen: ifconfig_ath0="DHCP" Wollen Sie sich hingegen mit einem bestimmten Access Point verbinden, müssen Sie dessen SSID angeben: ifconfig_ath0="ssid Ihre_SSID DHCP" Gibt es in Ihrem Netzwerk mehrere Access Points mit der gleichen SSID (was der Einfachheit wegen häufig der Fall ist), können Sie sich dennoch mit einem bestimmten Access Point verbinden. Dazu müssen Sie lediglich die BSSID des Access Points angeben (die Angabe der SSID ist in diesem Fall nicht erforderlich): ifconfig_ath0="ssid Ihre_SSID bssid xx:xx:xx:xx:xx:xx DHCP" Es gibt noch weitere Möglichkeiten, den Zugriff auf bestimmte Access Point zu beschränken, beispielsweise durch die Begrenzung der Frequenzen, auf denen eine Station nach einem Acces Point sucht. Sinnvoll ist ein solches Vorgehen beispielsweise, wenn Ihr drahtloses Gerät in verschiedenen Frequenzbereichen arbeiten kann, da in diesem Fall das Prüfen aller Frequenzen sehr zeitintensiv ist. Um nur innerhalb eines bestimmten Frequenzbereichs nach einem Access Point zu suchen, verwenden Sie die Option : ifconfig_ath0="mode 11g ssid Ihre_SSID DHCP" Dadurch sucht Ihr drahtloses Gerät nur im 2,4 GHz-Band (802.11g), aber nicht innerhalb des 5 GHz-Bandes nach einem Access Point. Mit der Option können Sie eine bestimmte Frequenz vorgeben, auf der gesucht werden soll. Die Option erlaubt die Angabe mehrerer erlaubter Frequenzen. Eine umfassende Beschreibung dieser Optionen finden Sie in der Manualpage &man.ifconfig.8;. Authentifizierung Wenn Sie einen Access Point gefunden haben, muss sich Ihrem Station am Access Point anmelden, bevor Sie Daten übertragen kann. Dazu gibt es verschiedene Möglichkeiten. Am häufigsten wird nach wie vor die sogenannte offene Authentifizierung verwendet. Dabei wird es jeder Station erlaubt, sich mit einem Netzwerk zu verbinden und Daten zu übertragen. Aus Sicherheitsgründen sollte diese Methode allerdings nur zu Testzwecken bei der erstmaligen Einrichtung eines drahtlosen Netzwerks verwendet werden. Andere Authentifizierungsmechanismen erfordern den Austausch kryptografischer Informationen, bevor Sie die Übertragung von Daten erlauben. Dazu gehören der Austausch fixer (vorher vereinbarter) Schlüssel oder Kennwörter sowie der Einsatz komplexerer Verfahren mit Backend-Diensten wie RADIUS. Die meisten Netzwerke nutzen allerdings nach wie vor die offene Authentifizierung, da dies die Voreinstellung ist. Am zweithäufigsten kommt das weiter unten beschriebene WPA-PSK (das auch als WPA Personal bezeichnet wird) zum Einsatz. Verwenden Sie eine &apple; &airport; Extreme-Basisstation als Access Point, benötigen Sie wahrscheinlich sowohl die Shared-Key-Authentifizierung als auch einen WEP-Schlüssel. Die entsprechende Konfiguration erfolgt entweder in der Datei /etc/rc.conf oder über das Programm &man.wpa.supplicant.8;. Verwenden Sie nur eine einzige &airport;-Basisstation, benötigen Sie einen Eintrag ähnlich dem folgenden: ifconfig_ath0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP" Normalerweise sollten Sie Shared-Key-Authentifizierung aber nicht verwenden, da diese die Sicherheit des WEP-Schlüssel noch weiter verringert. Müssen Sie WEP einsetzen (beispielsweise weil Sie zu veralteten Geräten kompatibel bleiben müssen), sollten Sie WEP nur zusammen mit der offenen Authentifizierung (open authentication) verwenden. WEP wird im näher beschrieben. Eine IP-Adresse über DHCP beziehen Nachdem Sie einen Access Point gefunden und sich authentifiziert haben, benötigen Sie noch eine IP-Adresse, die Sie in der Regel über DHCP zugewiesen bekommen. Dazu müssen Sie lediglich die Option DHCP in Ihre in der Datei /etc/rc.conf vorhandene Konfiguration Ihres drahtlosen Geräts aufnehmen: ifconfig_ath0="DHCP" Nun können Sie Ihr drahtloses Gerät starten: &prompt.root; /etc/rc.d/netif start Nachdem Sie das Gerät aktiviert haben, können Sie mit ifconfig den Status des Geräts ath0 abfragen: &prompt.root; ifconfig ath0 ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/54Mbps) status: associated ssid dlinkap channel 6 bssid 00:13:46:49:41:76 authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100 status: associated besagt, dass sich Ihr Gerät mit dem drahtlosen Netzwerk verbunden hat (konkret mit dem Netzwerk dlinkap). bssid 00:13:46:49:41:76 gibt die MAC-Adresse Ihres Access Points aus und die Zeile mit authmode informiert Sie darüber, dass Ihre Kommunikation nicht verschlüsselt wird (OPEN). Statische IP-Adressen Alternativ zu dynamischen IP-Adressen können Sie auch eine statische IP-Adresse verwenden. Dazu ersetzen Sie in Ihrer Konfiguration DHCP durch die zu verwendende IP-Adresse. Beachten Sie dabei, dass Sie die anderen Konfigurationsparameter nicht versehentlich verändern: - ifconfig_ath0="inet 192.168.1.100 netmask 255.255.255.0 ssid Ihre_SSID" + ifconfig_ath0="ssid Ihre_ssid inet 192.168.1.100 netmask 255.255.255.0" WPA Bei WPA (Wi-Fi Protected Access) handelt es sich um ein Sicherheitsprotokoll, das in 802.11-Netzwerken verwendet wird, um die Nachteile von WEP (fehlende Authentifizierung und schwache Verschlüsselung) zu vermeiden. WPA stellt das aktuelle 802.1X-Authentifizierungsprotokoll dar und verwendet eine von mehreren Chiffren, um die Datensicherheit zu gewährleisten. Die einzige Chiffre, die von WPA verlangt wird, ist TKIP (Temporary Key Integrity Protocol), eine Chiffre, die die von WEP verwendete RC4-Chiffre um Funktionen zur Prüfung der Datenintegrität und zur Erkennung und Bekämpfung von Einbruchsversuchen erweitert. TKIP ist durch Softwaremodifikationen auch unter veralteter Hardware lauffähig. Im Vergleich zu WEP ist WPA zwar sehr viel sicherer, es ist aber dennoch nicht völlig immun gegen Angriffe. WPA definiert mit AES-CCMP noch eine weitere Chiffre als Alternative zu TKIP. AES-CCMP (das häufig als WPA2 oder RSN bezeichnet wird) sollte, wenn möglich, eingesetzt werden. WPA definiert Authentifizierungs- und Verschlüsselungsprotokolle. Die Authentifizierung erfolgt in der Regel über eine der folgenden Techniken: 802.1X gemeinsam mit einem Backend-Authentifizierungsdienst wie RADIUS, oder durch einen Minimal-Handshake zwischen der Station und dem Access Point mit einem vorher vereinbarten gemeinsamen Schlüssel. Die erste Technik wird als WPA Enterprise, die zweite hingegen als WPA Personal bezeichnet. Da sich der Aufwand für das Aufsetzen eines RADIUS-Backend-Servers für die meisten drahtlosen Netzwerke nicht lohnt, wird WPA in der Regel als WPA-PSK (WPA, Pre-Shared-Key) konfiguriert. Die Kontrolle der drahtlosen Verbindung sowie die vorangehende Authentifizierung (über Schlüssel oder durch die Kommunikation mit einem Server) erfolgt über das Programm &man.wpa.supplicant.8;, das über die Datei /etc/wpa_supplicant.conf eingerichtet wird. Ausführliche Informationen zur Konfiguration des Programms finden sich in der Manualpage &man.wpa.supplicant.conf.5;. WPA-PSK WPA-PSK oder WPA-Personal basiert auf einem gemeinsamen (vorher vereinbarten) Schlüssel (PSK), der aus einem Passwort generiert und danach als Master-Key des drahtlosen Netzwerks verwendet wird. Jeder Benutzer des drahtlosen Netzwerks verwendet daher den gleichen Schlüssel. WPA-PSK sollte nur in kleinen Netzwerken eingesetzt werden, in denen die Konfiguration eines Authentifizierungsservers nicht möglich oder erwünscht ist. Achten Sie darauf, dass Sie immer starke Passwörter verwenden, die ausreichend lang sind und, wenn möglich, auch Sonderzeichen enthalten, damit diese nicht leicht erraten und/oder geknackt werden können. Der erste Schritt zum Einsatz von WPA-PSK ist die Konfiguration der SSID und des gemeinsamen Schlüssels Ihres Netzwerks in der Datei /etc/wpa_supplicant.conf: network={ ssid="freebsdap" psk="freebsdmall" } Danach geben Sie in /etc/rc.conf an, dass WPA zur Verschlüsselung eingesetzt werden soll und dass die IP-Adresse über DHCP bezogen wird: ifconfig_ath0="WPA DHCP" Nun können Sie Ihr Netzgerät aktivieren: &prompt.root; /etc/rc.d/netif start Starting wpa_supplicant. DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 5 DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 6 DHCPOFFER from 192.168.0.1 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.1 bound to 192.168.0.254 -- renewal in 300 seconds. ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/36Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 Alternativ können Sie die Konfiguration von WPA-PSK auch manuell durchführen, wobei Sie wiederum die Konfigurationsdatei /etc/wpa_supplicant.conf verwenden: &prompt.root; wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz) Associated with 00:11:95:c3:0d:ac WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=TKIP GTK=TKIP] Im zweiten Schritt starten Sie nun dhclient, um eine IP-Adresse vom DHCP-Server zu beziehen: &prompt.root; dhclient ath0 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.1 bound to 192.168.0.254 -- renewal in 300 seconds. &prompt.root; ifconfig ath0 ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/48Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 Enthält Ihre /etc/rc.conf bereits die Zeile ifconfig_ath0="DHCP", müssen Sie dhclient nicht mehr manuell aufrufen, da dhclient in diesem Fall automatisch gestartet wird, nachdem wpa_supplicant die Schlüssel übergibt. Sollte der Einsatz von DHCP nicht möglich sein, können Sie auch eine statische IP-Adresse angeben, nachdem wpa_supplicant Ihre Station authentifiziert hat: &prompt.root; ifconfig ath0 inet 192.168.0.100 netmask 255.255.255.0 &prompt.root; ifconfig ath0 ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/36Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 Verwenden Sie DHCP nicht, müssen Sie zusätzlich noch das Standard-Gateway sowie den/die Nameserver manuell festlegen: &prompt.root; route add default your_default_router &prompt.root; echo "nameserver your_DNS_server" >> /etc/resolv.conf WPA und EAP-TLS Die zweite Möglichkeit, WPA einzusetzen, ist die Verwendung eines 802.1X-Backend-Authentifizierungsservers. Diese Variante wird als WPA-Enterprise bezeichnet, um sie vom weniger sicheren WPA-Personal abzugrenzen, das auf dem Austausch gemeinsamer (und vorher vereinbarter Schlüssel) basiert. Die bei WPA-Enterprise verwendete Authentifizierung basiert auf EAP (Extensible Authentication Protocol). EAP selbst bietet keine Verschlüsselung, sondern operiert in einem verschlüsselten Tunnel. Es gibt verschiedene, auf EAP basierende Authentifizierungsmethoden, darunter EAP-TLS, EAP-TTLS sowie EAP-PEAP. Bei EAP-TLS (EAP with Transport Layers Security) handelt es sich um sehr gut unterstütztes Authentifizierungsprotokoll, da es sich dabei um die erste EAP-Methode handelt, die von der Wi-Fi Alliance zertifiziert wurde. EAP-TLS erfordert drei Zertifikate: Das (auf allen Rechnern installierte) CA-Zertifikat, das Server-Zertifikat Ihres Authentifizierungsservers, sowie ein Client-Zertifikat für jeden drahtlosen Client. Sowohl der Authentifizierungsservers als auch die drahtlosen Clients authentifizieren sich gegenseitig durch ihre Zertifikate, wobei sie überprüfen, ob diese Zertifikate auch von der Zertifizierungs-Authorität (CA) des jeweiligen Unternehmens signiert wurden. Die Konfiguration erfolgt (analog zu WPA-PSK) über die Datei /etc/wpa_supplicant.conf: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=TLS identity="loader" ca_cert="/etc/certs/cacert.pem" client_cert="/etc/certs/clientcert.pem" private_key="/etc/certs/clientkey.pem" private_key_passwd="freebsdmallclient" } Der Name des Netzwerks (die SSID). Das RSN/WPA2-Protokoll (IEEE 802.11i) wird verwendet. Die key_mgmt-Zeile bezieht sich auf das verwendete Key-Management-Protokoll. In diesem Beispiel wird WPA gemeinsam mit der EAP-Authentifizierung verwendet (WPA-EAP). Die für die Verbindung verwendete EAP-Methode. Das identity-Feld enthält den von EAP verwendeten Identifizierungsstring. Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an. Dieses Datei wird benötigt, um das Server-Zertifikat zu verifizieren. Die client_cert-Zeile gibt den Pfad zum Client-Zertifikat an. Jeder Client hat ein eigenes, innerhalb des Netzwerks eindeutiges Zertifikat. Das Feld private_key gibt den Pfad zum privaten Schlüssel des Client-Zertifikat an. Das Feld private_key_passwd enthält die Passphrase für den privaten Schlüssel. Danach fügen Sie die folgende Zeile in /etc/rc.conf ein: ifconfig_ath0="WPA DHCP" Nun können Sie Ihr drahtloses Gerät über das rc.d-System aktivieren: &prompt.root; /etc/rc.d/netif start Starting wpa_supplicant. DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 Alternativ können Sie Ihr drahtloses Gerält wiederum manuell über wpa_supplicant und ifconfig aktivieren. WPA und EAP-TTLS Bei EAP-TLS müssen sowohl der Authentifizierungsserver als auch die Clients jeweils ein eigenes Zertifikat aufweisen. Setzen Sie hingegen EAP-TTLS (EAP-Tunneled Transport Layer Security) ein, ist das Client-Zertifikat optional. EAP-TTLS geht dabei ähnlich vor wie verschlüsselte Webseiten, bei denen der Webserver einen sicheren SSL-Tunnel erzeugen kann, ohne dass der Besucher dabei über ein client-seitiges Zertifikat verfügen muss. EAP-TTLS verwendet einen verschlüsselten TLS-Tunnel zum sicheren Transport der Authentifizierungsdaten. Die Konfiguration von EAP-TTLS erfolgt in der Datei /etc/wpa_supplicant.conf: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=TTLS identity="test" password="test" ca_cert="/etc/certs/cacert.pem" phase2="auth=MD5" } Die für die Verbindung verwendete EAP-Methode. Das identity-Feld enthält den Identifizierungsstring für die EAP-Authentifizierung innerhalb des verschlüsselten TlS-Tunnels. Das password-Feld enthält die Passphrase für die EAP-Authentifizierung. Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an, das benötigt wird, um das Server-Zertifikat zu verifizieren. Die innerhalb des verschlüsselten TLS-Tunnels verwendete Authentifizierungsmethode. In unserem Beispiel handelt es sich dabei um EAP und MD5. Diese Phase der inneren Authentifizierung wird oft als phase2 bezeichnet. Folgende Zeile muss zusätzlich in die Datei /etc/rc.conf aufgenommen werden: ifconfig_ath0="WPA DHCP" Nun können Sie Ihr drahtloses Gerät aktivieren: &prompt.root; /etc/rc.d/netif start Starting wpa_supplicant. DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 WPA und EAP-PEAP PEAP (Protected EAP) wurde als Alternative zu EAP-TTLS entwickelt. Es gibt zwei verschiedene PEAP-Methoden, wobei es sich bei PEAPv0/EAP-MSCHAPv2 um die häufiger verwendete Methode handelt. In den folgenden Ausführungen wird der Begriff PEAP synonym für diese EAP-Methode verwendet. PEAP ist nach EAP-TLS der am häufigsten verwendete und am besten unterstützte EAP-Standard. PEAP arbeitet ähnlich wie EAP-TTLS: Es verwendet ein server-seitiges Zertifikat, um einen verschlüsselten TLS-Tunnel zu erzeugen, über den die sichere Authentifizierung zwischen den Clients und dem Authentifizierungsserver erfolgt. In Sachen Sicherheit unterscheiden sich EAP-TTLS und PEAP allerdings: PEAP überträgt den Benutzernamen im Klartext und verschlüsselt nur das Passwort, während EAP-TTLS sowohl den Benutzernamen als auch das Passwort über den TLS-Tunnel überträgt. Um EAP-PEAP einzurichten, müssen Sie die Konfigurationsdatei /etc/wpa_supplicant.conf anpassen: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=PEAP identity="test" password="test" ca_cert="/etc/certs/cacert.pem" phase1="peaplabel=0" phase2="auth=MSCHAPV2" } Die für die Verbindung verwendete EAP-Methode. Das identity-Feld enthält den Identifizierungsstring für die innerhalb des verschlüsselten TLS-Tunnels erfolgende EAP-Authentifizierung. Das Feld password enthält die Passphrase für die EAP-Authentifizierung. Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an, das zur Verifizierung des Server-Zertifikats benötigt wird. Dieses Feld enthält die Parameter für die erste Phase der Authentifizierung (also den TLS-Tunnel). Je nach dem, welchen Authentifizierungsserver Sie verwenden, müssen Sie hier einen unterschiedlichen Wert angeben. In den meisten Fällen wird dieses Feld den Wert client EAP encryption aufweisen, der durch die Angabe von peaplabel=0 gesetzt wird. Weitere Informationen zur Konfiguration von PEAP finden Sie in der Manualpage &man.wpa.supplicant.conf.5;. Das innerhalb des verschlüsselten TLS-Tunnels verwendete Authentifizierungsprotokoll. In unserem Beispiel handelt es sich dabei um auth=MSCHAPV2. Danach fügen Sie die folgende Zeile in /etc/rc.conf ein: ifconfig_ath0="WPA DHCP" Zuletzt müssen Sie die Netzkarte noch aktivieren: &prompt.root; /etc/rc.d/netif start Starting wpa_supplicant. DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPREQUEST on ath0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps) status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36 protmode CTS roaming MANUAL bintval 100 WEP WEP (Wired Equivalent Privacy) ist Teil des ursprünglichen 802.11-Standards. Es enthält keinen Authentifzierungsmechanismus und verfügt lediglich über eine schwache Zugriffskontrolle, die sehr leicht geknackt werden kann. WEP kann über ifconfig aktiviert werden: - &prompt.root; ifconfig ath0 inet 192.168.1.100 netmask 255.255.255.0 ssid my_net \ - wepmode on weptxkey 3 wepkey 3:0x3456789012 + &prompt.root; ifconfig ath0 ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012 \ + inet 192.168.1.100 netmask 255.255.255.0 Mit weptxkey geben Sie an, welcher WEP-Schlüssel für für die Datenübertragung verwendet wird (in unserem Beispiel ist dies der dritte Schlüssel). Der gleiche Schlüssel muss auch am Access Point eingestellt sein. Mit wepkey legen Sie den zu verwendenden WEP-Schlüssel in der Form Nummer:Schlüssel fest. Ist der Schlüssel "Nummer" nicht vorhanden, wird automatisch Schlüssel 1 verwendet. Die Angabe von "Nummer" ist zwingend nötig, wenn Sie einen anderen als den ersten Schlüssel verwenden wollen. In Ihrer Konfiguration müssen Sie 0x3456789012 durch den an Ihrem Access Point konfigurierten Schlüssel ersetzen. Weitere Informationen finden Sie in der Manualpage &man.ifconfig.8;. Das Programm wpa_supplicant eignet sich ebenfalls dazu, WEP für Ihr drahtloses Gerät zu aktivieren. Obige Konfiguration lässt sich dabei durch die Aufnahme der folgenden Zeilen in die Datei /etc/wpa_supplicant.conf realisieren: network={ ssid="my_net" key_mgmt=NONE wep_key3=3456789012 wep_tx_keyidx=3 } Danach müssen Sie das Programm noch aufrufen: &prompt.root; wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz) Associated with 00:13:46:49:41:76 Ad-hoc-Modus Der IBSS-Modus (auch als Ad-hoc-Modus bezeichnet), ist für Punkt-zu-Punkt-Verbindungen vorgesehen. Um beispielsweise eine Ad-hoc-Verbindung zwischen den Rechnern A und B aufzubauen, benötigen Sie lediglich zwei IP-Adressen und eine SSID. Auf dem Rechner A geben Sie Folgendes ein: - &prompt.root; ifconfig ath0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mediaopt adhoc + &prompt.root; ifconfig ath0 ssid freebsdap mediaopt adhoc inet 192.168.0.1 netmask 255.255.255.0 &prompt.root; ifconfig ath0 ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::211:95ff:fec3:dac%ath0 prefixlen 64 scopeid 0x4 ether 00:11:95:c3:0d:ac media: IEEE 802.11 Wireless Ethernet autoselect <adhoc> (autoselect <adhoc>) status: associated ssid freebsdap channel 2 bssid 02:11:95:c3:0d:ac authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100 Der adhoc-Parameter gibt an, dass die Schnittstelle im IBSS-Modus läuft. Rechner B sollte nun in der Lage sein, Rechner A zu finden: &prompt.root; ifconfig ath0 up scan SSID BSSID CHAN RATE S:N INT CAPS - freebsdap 02:11:95:c3:0d:ac 2 54M 19:0 100 IS + freebsdap 02:11:95:c3:0d:ac 2 54M 19:3 100 IS Der Wert I (Spalte CAPS) gibt an, dass sich Rechner A im Ad-hoc-Modus befindet. Nun müssen Sie nur noch Rechner B eine unterschiedliche IP-Adresse zuweisen: - &prompt.root; ifconfig ath0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap mediaopt adhoc + &prompt.root; ifconfig ath0 ssid freebsdap mediaopt adhoc inet 192.168.0.2 netmask 255.255.255.0 &prompt.root; ifconfig ath0 ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:11:95:d5:43:62 media: IEEE 802.11 Wireless Ethernet autoselect <adhoc> (autoselect <adhoc>) status: associated ssid freebsdap channel 2 bssid 02:11:95:c3:0d:ac authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100 Damit sind die Rechner A und B bereit und können untereinander Daten austauschen. + + &os; Host Access Points + + Dieser Abschnitt ist noch nicht übersetzt. + Lesen Sie bitte + das Original in englischer Sprache. Wenn Sie helfen + wollen, diesen Abschnitt zu übersetzen, senden Sie bitte + eine E-Mail an die Mailingliste &a.de.translators;. + + Problembehandlung Die folgenden Auflistung zeigt, wie Sie einige häufig auftretende Probleme bei der Einrichtung Ihres drahtlosen Netzwerks beheben können. Wird Ihr Access Point bei der Suche nicht gefunden, sollten Sie überprüfen, ob Sie bei Konfiguration Ihres drahtlosen Geräts die Anzahl der Kanäle beschränkt haben. Wenn Sie sich nicht mit Ihrem Access Point verbinden können, sollten Sie überprüfen, ob die Konfiguration Ihrer Station auch der des Access Points entspricht. Achten Sie dabei speziell auf die Authentifzierungsmethode und die Sicherheitsprotokolle. Halten Sie Ihre Konfiguration so einfach wie möglich. Verwenden Sie ein Sicherheitsprotokoll wie WPA oder WEP, sollten Sie testweise Ihren Access Point auf offene Authentifizierung und keine Sicherheit einstellen. Danach versuchen Sie sich erneut mit Ihren Access Point zu verbinden. Nachdem Sie sich mit dem Access Point verbinden können, prüfen Sie die Sicherheitseinstellungen, beginnend mit einfachen Werkzeugen wie &man.ping.8;. Das Programm wpa_supplicant kann Ihnen bei der Fehlersuche helfen. Dazu starten Sie es manuell mit der Option und durchsuchen anschließend die Protokollinformationen nach eventuellen Fehlermeldungen. Zusätzlich gibt es auch zahlreiche Low-Level-Debugging-Werkzeuge. Die Ausgabe von Debugging-Informationen des 802.11 Protocol Support Layers lassen sich mit dem Programm wlandebug (das sich unter /usr/src/tools/tools/net80211 befindet) aktivieren. Um beispielsweise während der Suche nach Access Points und des Aufbaus von 802.11-Verbindungen (Handshake) auftretende Systemmeldungen auf die Konsole auszugeben, verwenden Sie den folgenden Befehl: &prompt.root; wlandebug -i ath0 +scan+auth+debug+assoc net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan> Der 802.11-Layer liefert umfangreiche Statistiken, die Sie mit dem Werkzeug wlanstats abrufen können. Diese Statistiken sollten alle Fehler identifizieren, die im 802.11-Layer auftreten. Beachten Sie aber, dass einige Fehler bereits im darunterliegenden Gerätetreiber auftreten und daher in diesen Statistiken nicht enthalten sind. Wie Sie Probleme des Gerätetreibers identifizieren, entnehmen Sie bitte der Dokumentation Ihres Gerätetreibers. Können Sie Ihr Problem durch diese Maßnahmen nicht lösen, sollten Sie einen Problembericht (PR) erstellen und die Ausgabe der weiter oben genannten Werkzeuge in den Bericht aufnehmen. Pav Lucistnik Beigetragen von
pav@FreeBSD.org
Bluetooth Bluetooth Übersicht Bluetooth ermöglicht die Bildung von persönlichen Netzwerken über drahtlose Verbindungen bei einer maximalen Reichweite von 10 Metern und operiert im unlizensierten 2,4-GHz-Band. Solche Netzwerke werden normalerweise spontan gebildet, wenn sich mobile Geräte, wie Mobiltelefone, Handhelds oder Notebooks miteinander verbinden. Im Gegensatz zu Wireless LAN ermöglicht Bluetooth auch höherwertige Dienste, wie FTP-ähnliche Dateiserver, Filepushing, Sprachübertragung, Emulation von seriellen Verbindungen und andere mehr. Der Bluetooth-Stack von &os; verwendet das Netgraph-Framework (&man.netgraph.4;). Viele Bluetooth-USB-Adapter werden durch den &man.ng.ubt.4;-Treiber unterstützt. Auf dem Chip BCM2033 von Broadcom basierende Bluetooth-Geräte werden von den Treibern &man.ubtbcmfw.4; sowie &man.ng.ubt.4; unterstützt. Die Bluetooth-PC-Card 3CRWB60-A von 3Com verwendet den &man.ng.bt3c.4;-Treiber. Serielle sowie auf UART basierende Bluetooth-Geräte werden von &man.sio.4;, &man.ng.h4.4; sowie &man.hcseriald.8; unterstützt. Dieses Kapitel beschreibt die Verwendung von USB-Bluetooth-Adaptern. Die Bluetooth-Unterstützung aktivieren Bluetooth-Unterstützung ist in der Regel als Kernelmodul verfügbar. Damit ein Gerät funktioniert, muss der entsprechende Treiber im Kernel geladen werden: &prompt.root; kldload ng_ubt Ist das Bluetooth-Gerät beim Systemstart angeschlossen, kann das entsprechende Modul auch von /boot/loader.conf geladen werden: ng_ubt_load="YES" Schließen Sie Ihren USB-Adapter an, sollte eine Meldung ähnlich der folgenden auf der Konsole (oder in syslog) erscheinen: ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3, wMaxPacketSize=49, nframes=6, buffer size=294 Verwenden Sie &os; 6.0 oder eine 5.X-Version vor 5.5, müssen Sie den Bluetooth-Stack manuell starten. Ab &os; 5.5 beziehungsweise 6.1 und neuer wird der Stack hingegen automatisch von &man.devd.8; gestartet. Kopieren Sie /usr/share/examples/netgraph/bluetooth/rc.bluetooth nach /etc/rc.bluetooth. Über dieses Skript wird der Bluetooth-Stack gestartet und beendet. Es ist empfehlenswert, den Bluetooth-Stack zu beenden, bevor Sie den Adapter entfernen. Selbst wenn Sie dies nicht tun, kommt es (normalerweise) zu keinem fatalen Fehler. Wenn Sie den Bluetooth-Stack starten, erhalten Sie eine Meldung ähnlich der folgenden: &prompt.root; /etc/rc.bluetooth start ubt0 BD_ADDR: 00:02:72:00:d4:1a Features: 0xff 0xff 0xf 00 00 00 00 00 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> Max. ACL packet size: 192 bytes Number of ACL packets: 8 Max. SCO packet size: 64 bytes Number of SCO packets: 8 HCI Das Host Controller Interface (HCI) Das Host Controller Interface (HCI) bietet eine Befehlsschnittstelle zum Basisbandcontroller und Linkmanager, sowie Zugriff auf den Hardwarestatus und die Kontrollregister. Dadurch wird ein einheitlicher Zugriff auf die Fähigkeiten des Bluetooth-Basisbands möglich. Die HCI-Layer des Rechners tauschen Daten und Befehle mit der HCI-Firmware der Bluetooth-Geräte aus. Über den Host Controller Transport Layer-Treiber (also den physikalischen Bus) können beide HCI-Layer miteinander kommunizieren. Eine einzelne Netgraph-Gerätedatei vom Typ hci wird für ein einzelnes Bluetooth-Gerät erzeugt. Die HCI-Gerätedatei ist normalerweise mit der Bluetooth-Gerätetreiberdatei (downstream) sowie der L2CAP-Gerätedatei (upstream) verbunden. Alle HCI-Operationen müssen über die HCI-Gerätedatei und nicht über die Treiberdatei erfolgen. Der Standardname für die HCI-Gerätedatei (die in &man.ng.hci.4; beschrieben wird) lautet devicehci. Eine der wichtigsten Aufgaben ist das Auffinden von sich in Reichweite befindenden Bluetooth-Geräten. Diese Funktion wird als inquiry bezeichnet. Inquiry sowie andere mit HCI in Verbindung stehende Funktionen werden von &man.hccontrol.8; zur Verfügung gestellt. Das folgende Beispiel zeigt, wie man herausfindet, welche Bluetooth-Geräte sich in Reichweite befinden. Eine solche Abfrage dauert nur wenige Sekunden. Beachten Sie, dass ein Gerät nur dann antwortet, wenn es sich im Modus discoverable befindet. &prompt.user; hccontrol -n ubt0hci inquiry Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:80:37:29:19:a4 Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 00 Page Scan Mode: 00 Class: 52:02:04 Clock offset: 0x78ef Inquiry complete. Status: No error [00] BD_ADDR stellt, ähnlich der MAC-Adresse einer Netzkarte, die eindeutige Adresse eines Bluetooth-Gerätes dar. Diese Adresse ist für die Kommunikation mit dem Gerät nötig. Es ist aber auch möglich, BD_ADDR einen Klartextnamen zuzuweisen. Die Datei /etc/bluetooth/hosts enthält Informationen über die bekannten Bluetooth-Rechner. Das folgende Beispiel zeigt, wie man den Klartextnamen eines entfernten Geräts in Erfahrung bringen kann: &prompt.user; hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4 BD_ADDR: 00:80:37:29:19:a4 Name: Pav's T39 Wenn Sie ein entferntes Bluetooth-Gerät abfragen, wird dieses Ihren Rechner unter dem Namen your.host.name (ubt0) finden. Dieser Name kann aber jederzeit geändert werden. Bluetooth ermöglicht Punkt-zu-Punkt-Verbindungen (an denen nur zwei Bluetooth-Geräte beteiligt sind), aber auch Punkt-zu-Multipunkt-Verbindungen, bei denen eine Verbindung von mehreren Bluetooth-Geräten gemeinsam genutzt wird. Das folgende Beispiel zeigt, wie man die aktiven Basisbandverbindungen des lokalen Gerätes anzeigen kann: &prompt.user; hccontrol -n ubt0hci read_connection_list Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State 00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN Ein connection handle ist für die Beendigung einer Basisbandverbindung nützlich. Im Normalfall werden inaktive Verbindungen aber automatisch vom Bluetooth-Stack getrennt. &prompt.root; hccontrol -n ubt0hci disconnect 41 Connection handle: 41 Reason: Connection terminated by local host [0x16] Rufen Sie hccontrol help auf, wenn Sie eine komplette Liste aller verfügbaren HCI-Befehle benötigen. Die meisten dieser Befehle müssen nicht als root ausgeführt werden. L2CAP Das Logical Link Control and Adaptation Protocol (L2CAP) Das Logical Link Control and Adaptation Protocol (L2CAP) bietet höherwertigen Protokollen verbindungsorientierte und verbindungslose Datendienste an. Dazu gehören auch Protokollmultiplexing, Segmentierung und Reassemblierung. L2CAP erlaubt höherwertigen Protokollen und Programmen den Versand und Empfang von L2CAP-Datenpaketen mit einer Länge von bis zu 64 Kilobytes. L2CAP arbeitet kanalbasiert. Ein Kanal ist eine logische Verbindung innerhalb einer Basisbandverbindung. Jeder Kanal ist dabei an ein einziges Protokoll gebunden. Mehrere Geräte können an das gleiche Protokoll gebunden sein, es ist aber nicht möglich, einen Kanal an mehrere Protokolle zu binden. Jedes über einen Kanal ankommende L2CAP-Paket wird an das entsprechende höherwertige Protokoll weitergeleitet. Mehrere Kanäle können sich die gleiche Basisbandverbindung teilen. Eine einzelne Netgraph-Gerätedatei vom Typ l2cap wird für ein einzelnes Bluetooth-Gerät erzeugt. Die L2CAP-Gerätedatei ist normalerweise mit der Bluetooth-HCI-Gerätedatei (downstream) sowie der Bluetooth-Socket-Gerätedatei (upstream) verbunden. Der Standardname für die L2CAP-Gerätedatei, die in &man.ng.l2cap.4; beschrieben wird, lautet devicel2cap. Ein nützlicher Befehl zum Anpingen von anderen Geräten ist &man.l2ping.8;. Einige Bluetooth-Geräte senden allerdings nicht alle erhaltenen Daten zurück. Die Ausgabe 0 bytes ist also kein Fehler: &prompt.root; l2ping -a 00:80:37:29:19:a4 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0 Das Programm &man.l2control.8; liefert Informationen über L2CAP-Dateien. Das folgende Beispiel zeigt, wie man die Liste der logischen Verbindungen (Kanäle) sowie die Liste der Basisbandverbindungen abfragen kann: &prompt.user; l2control -a 00:02:72:00:d4:1a read_channel_list L2CAP channels: Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State 00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN &prompt.user; l2control -a 00:02:72:00:d4:1a read_connection_list L2CAP connections: Remote BD_ADDR Handle Flags Pending State 00:07:e0:00:0b:ca 41 O 0 OPEN &man.btsockstat.1; ist ein weiteres Diagnoseprogramm. Es funktioniert analog zu &man.netstat.1;, arbeitet aber mit Bluetooth-Datenstrukturen. Das folgende Beispiel zeigt die gleiche Liste der logischen Verbindungen wie &man.l2control.8; im vorherigen Beispiel. &prompt.user; btsockstat Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN Active RFCOMM sessions L2PCB PCB Flag MTU Out-Q DLCs State c2afe900 c2b53380 1 127 0 Yes OPEN Active RFCOMM sockets PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN Das RFCOMM-Protokoll RFCOMM Das RFCOMM-Protokoll emuliert serielle Verbindungen über das L2CAP-Protokoll. Es basiert auf dem ETSI-Standard TS 07.10. Bei RFCOMM handelt es sich um ein einfaches Transportprotokoll, das um Funktionen zur Emulation der 9poligen Schaltkreise von mit RS-232 (EIATIA-232-E) kompatiblen seriellen Ports ergänzt wurde. RFCOMM erlaubt bis zu 60 simultane Verbindungen (RFCOMM-Kanäe) zwischen zwei Bluetooth-Geräten. Eine RFCOMM-Kommunikation besteht aus zwei Anwendungen (den Kommunikationsendpunkten), die über das Kommunikationssegment miteinander verbunden sind. RFCOMM unterstützt Anwendungen, die auf serielle Ports angewiesen sind. Das Kommunikationssegment entspricht der (direkten) Bluetooth-Verbindung zwischen den beiden Geräten. RFCOMM kümmert sich um die direkte Verbindung von zwei Geräten, oder um die Verbindung zwischen einem Gerät und einem Modem (Netzwerkverbindung). RFCOMM unterstützt auch andere Konfigurationen. Ein Beispiel dafür sind Module, die drahtlose Bluetooth-Geräte mit einer verkabelten Schnittstelle verbinden können. Unter &os; wurde das RFCOMM-Protokoll im Bluetooth Socket-Layer implementiert. Pairing Erstmaliger Verbindungsaufbau zwischen zwei Bluetooth-Geräten (<foreignphrase>Pairing</foreignphrase>) In der Voreinstellung nutzt Bluetooth keine Authentifizierung, daher kann sich jedes Bluetoothgerät mit jedem anderen Gerät verbinden. Ein Bluetoothgerät (beispielsweise ein Mobiltelefon) kann jedoch für einen bestimmten Dienst (etwa eine Einwählverbindung) eine Authentifizierung anfordern. Bluetooth verwendet zu diesem Zweck PIN-Codes. Ein PIN-Code ist ein maximal 16 Zeichen langer ASCII-String. Damit eine Verbindung zustande kommt, muss auf beiden Geräten der gleiche PIN-Code verwendet werden. Nachdem der Code eingegeben wurde, erzeugen beide Geräte einen link key, der auf den Geräten gespeichert wird. Beim nächsten Verbindungsaufbau wird der zuvor erzeugte Link Key verwendet. Diesen Vorgang bezeichnet man als Pairing. Geht der Link Key auf einem Gerät verloren, muss das Pairing wiederholt werden. Der &man.hcsecd.8;-Daemon verarbeitet alle Bluetooth-Authentifzierungsanforderungen und wird über die Datei /etc/bluetooth/hcsecd.conf konfiguriert. Der folgende Ausschnitt dieser Datei zeigt die Konfiguration für ein Mobiltelefon, das den PIN-Code 1234 verwendet: device { bdaddr 00:80:37:29:19:a4; name "Pav's T39"; key nokey; pin "1234"; } Von der Länge abgesehen, unterliegen PIN-Codes keinen Einschränkungen. Einige Geräte, beispielsweise Bluetooth-Headsets, haben einen festen PIN-Code eingebaut. Die Option sorgt dafür, dass der &man.hcsecd.8;-Daemon im Vordergrund läuft. Dadurch kann der Ablauf einfach verfolgt werden. Stellen Sie das entfernte Gerät auf receive pairing und initiieren Sie die Bluetoothverbindung auf dem entfernten Gerät. Sie erhalten die Meldung, dass Pairing akzeptiert wurde und der PIN-Code benötigt wird. Geben Sie den gleichen PIN-Code ein, den Sie in hcsecd.conf festgelegt haben. Ihr Computer und das entfernte Gerät sind nun miteinander verbunden. Alternativ können Sie das Pairing auch auf dem entfernten Gerät initiieren. Unter &os; 5.5, 6.1 und neuer können Sie hcsecd durch das Einfügen der folgenden Zeile in /etc/rc.conf beim Systemstart automatisch aktivieren: hcsecd_enable="YES" Es folgt nun eine beispielhafte Ausgabe des hcsecd-Daemons: hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 SDP Das Service Discovery Protocol (SDP) Das Service Discovery Protocol (SDP) erlaubt es Clientanwendungen, von Serveranwendungen angebotene Dienste sowie deren Eigenschaften abzufragen. Zu diesen Eigenschaften gehören die Art oder die Klasse der angebotenen Dienste sowie der Mechanismus oder das Protokoll, die zur Nutzung des Dienstes notwendig sind. SDP ermöglicht Verbindungen zwischen einem SDP-Server und einem SDP-Client. Der Server enthält eine Liste mit den Eigenschaften der vom Server angebotenen Dienste. Jeder Eintrag beschreibt jeweils einen einzigen Serverdienst. Ein Client kann diese Informationen durch eine SDP-Anforderung vom SDP-Server beziehen. Wenn der Client oder eine Anwendung des Clients einen Dienst nutzen will, muss eine seperate Verbindung mit dem Dienstanbieter aufgebaut werden. SDP bietet einen Mechanismus zum Auffinden von Diensten und deren Eigenschaften an, es bietet aber keine Mechanismen zur Verwendung dieser Dienste. Normalerweise sucht ein SDP-Client nur nach Diensten, die bestimmte geforderte Eigenschaften erfüllen. Es ist aber auch möglich, anhand der Dienstbeschreibungen eine allgemeine Suche nach den von einem Server angebotenen Diensten durchzuführen. Diesen Vorgang bezeichnet man als Browsing. Der Bluetooth-SDP-Server &man.sdpd.8; und der Kommandozeilenclient &man.sdpcontrol.8; sind bereits in der Standardinstallation von &os; enthalten. Das folgende Beispiel zeigt, wie eine SDP-Abfrage durchgeführt wird: &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec browse Record Handle: 00000000 Service Class ID List: Service Discovery Server (0x1000) Protocol Descriptor List: L2CAP (0x0100) Protocol specific parameter #1: u/int/uuid16 1 Protocol specific parameter #2: u/int/uuid16 1 Record Handle: 0x00000001 Service Class ID List: Browse Group Descriptor (0x1001) Record Handle: 0x00000002 Service Class ID List: LAN Access Using PPP (0x1102) Protocol Descriptor List: L2CAP (0x0100) RFCOMM (0x0003) Protocol specific parameter #1: u/int8/bool 1 Bluetooth Profile Descriptor List: LAN Access Using PPP (0x1102) ver. 1.0 ... und so weiter. Beachten Sie, dass jeder Dienst eine Liste seiner Eigenschaften (etwa den RFCOMM-Kanal) zurückgibt. Je nach dem, welche Dienste Sie benötigen, sollten Sie sich einige dieser Eigenschaften notieren. Einige Bluetooth-Implementationen unterstützen kein Service Browsing und geben daher eine leere Liste zurück. Ist dies der Fall, ist es dennoch möglich, nach einem bestimmten Dienst zu suchen. Das folgende Beispiel demonstriert die Suche nach dem OBEX Object Push (OPUSH) Dienst: &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH Unter &os; ist es die Aufgabe des &man.sdpd.8;-Servers, Bluetooth-Clients verschiedene Dienste anzubieten. Unter &os; 5.5, 6.1 und neuer können Sie dazu die folgende Zeile in die Datei /etc/rc.conf einfügen: sdpd_enable="YES" Nun kann der sdpd-Daemon durch folgene Eingabe gestartet werden: &prompt.root; /etc/rc.d/sdpd start Unter &os; 6.0 und &os; 5.X-Versionen vor 5.5 ist sdpd nicht in die &os;-Startskripten integriert. Daher müssen Sie den Damon durch folgende Eingabe manuell starten: &prompt.root; sdpd Der lokale Server, der den entfernten Clients Bluetooth-Dienste anbieten soll, bindet diese Dienste an den lokalen SDP-Daemon. Ein Beispiel für eine solche Anwendung ist &man.rfcomm.pppd.8;. Einmal gestartet, wird der Bluetooth-LAN-Dienst an den lokalen SDP-Daemon gebunden. Die Liste der vorhandenen Dienste, die am lokalen SDP-Server registriert sind, lässt sich durch eine SDP-Abfrage über einen lokalen Kontrollkanal abfragen: &prompt.root; sdpcontrol -l browse Einwahlverbindungen (Dial-Up Networking (DUN)) oder Netzwerkverbindungen mit PPP (LAN)-Profilen einrichten Das Dial-Up Networking (DUN)-Profil wird vor allem für Modems und Mobiltelefone verwendet. Dieses Profil ermöglicht folgende Szenarien: Die Verwendung eines Mobiltelefons oder eines Modems durch einen Computer als drahtloses Modem, um sich über einen Einwahlprovider mit dem Internet zu verbinden oder andere Einwahldienste zu benutzen. Die Verwendung eines Mobiltelefons oder eines Modems durch einen Computers, um auf Datenabfragen zu reagieren. Der Zugriff auf ein Netzwerk über das PPP (LAN)-Profil kann in folgenden Situationen verwendet werden: Den LAN-Zugriff für ein einzelnes Bluetooth-Gerät Den LAN-Zugriff für mehrere Bluetooth-Geräte Eine PC-zu-PC-Verbindung (unter Verwendung einer PPP-Verbindung über eine emulierte serielle Verbindung) Beide Profile werden unter &os; durch &man.ppp.8; sowie &man.rfcomm.pppd.8; implementiert - einem Wrapper, der RFCOMM Bluetooth-Verbindungen unter PPP nutzbar macht. Bevor ein Profil verwendet werden kann, muss ein neuer PPP-Abschnitt in /etc/ppp/ppp.conf erzeugt werden. Beispielkonfigurationen zu diesem Thema finden Sie in &man.rfcomm.pppd.8;. Im folgenden Beispiel verwenden wir &man.rfcomm.pppd.8;, um eine RFCOMM-Verbindung zu einem entfernten Gerät mit der BD_ADDR 00:80:37:29:19:a4 auf dem RFCOMM-Kanal DUN aufzubauen. Die aktuelle RFCOMM-Kanalnummer erhalten Sie vom entfernten Gerät über SDP. Es ist auch möglich, manuell einen RFCOMM-Kanal festzulegen. In diesem Fall führt &man.rfcomm.pppd.8; keine SDP-Abfrage durch. Verwenden Sie &man.sdpcontrol.8;, um die RFCOMM-Kanäle des entfernten Geräts herauszufinden. &prompt.root; rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup Der &man.sdpd.8;-Server muss laufen, damit ein Netzzugriff mit dem PPP (LAN)-Profil möglich ist. Außerdem muss für den LAN-Client ein neuer Eintrag in /etc/ppp/ppp.conf erzeugt werden. Beispielkonfigurationen zu diesem Thema finden Sie in &man.rfcomm.pppd.8;. Danach starten Sie den RFCOMM PPP-Server über eine gültige RFCOMM-Kanalnummer. Der RFCOMM PPP-Server bindet dadurch den Bluetooth-LAN-Dienst an den lokalen SDP-Daemon. Das folgende Beispiel zeigt Ihnen, wie man den RFCOMM PPP-Server startet. &prompt.root; rfcomm_pppd -s -C 7 -l rfcomm-server OBEX Das Profil OBEX-Push (OPUSH) OBEX ist ein häufig verwendetes Protokoll für den Dateitransfer zwischen Mobilgeräten. Sein Hauptzweck ist die Kommunikation über die Infrarotschnittstelle. Es dient daher zum Datentransfer zwischen Notebooks oder PDAs sowie zum Austausch von Visitenkarten oder Kalendereinträgen zwischen Mobiltelefonen und anderen Geräten mit PIM-Funktionen. Server und Client von OBEX werden durch das Softwarepaket obexapp bereitgestellt, das als Port comms/obexapp verfügbar ist. Mit dem OBEX-Client werden Objekte zum OBEX-Server geschickt oder angefordert. Ein Objekt kann etwa eine Visitenkarte oder ein Termin sein. Der OBEX-Client fordert über SDP die Nummer des RFCOMM-Kanals vom entfernten Gerät an. Dies kann auch durch die Verwendung des Servicenamens anstelle der RFCOMM-Kanalnummer erfolgen. Folgende Dienste werden unterstützt: IrMC, FTRN und OPUSH. Es ist möglich, den RFCOMM-Kanal als Nummer anzugeben. Es folgt nun ein Beispiel für eine OBEX-Sitzung, bei der ein Informationsobjekt vom Mobiltelefon angefordert und ein neues Objekt (hier eine Visitenkarte) an das Telefonbuch des Mobiltelefons geschickt wird: &prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC obex> get telecom/devinfo.txt Success, response: OK, Success (0x20) obex> put new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20) Um OBEX-Push-Dienste anbieten zu können, muss der sdpd-Server gestartet sein. Ein Wurzelverzeichnis, in dem alle ankommenden Objekt gespeichert werden, muss zusätzlich angelegt werden. In der Voreinstellung ist dies /var/spool/obex. Starten Sie den OBEX-Server mit einer gültigen Kanalnummer. Der OBEX-Server registriert nun den OBEX-Push-Dienst mit dem lokalen SDP-Daemon. Um den OBEX-Server zu starten, geben Sie Folgendes ein: &prompt.root; obexapp -s -C 10 Das Profil Serial-Port (SPP) Durch dieses Profil können Bluetooth-Geräte RS232- (oder damit kompatible) serielle Kabelverbindungen emulieren. Anwendungen sind dadurch in der Lage, über eine virtuelle serielle Verbindung Bluetooth als Ersatz für eine Kabelverbindung zu nutzen. Das Profil Serial-Port wird durch &man.rfcomm.sppd.1; verwirklicht. Pseudo-tty wird hier als virtuelle serielle Verbindung verwendet. Das folgende Beispiel zeigt, wie man sich mit einem entfernten Serial-Port-Dienst verbindet. Beachten Sie, dass Sie den RFCOMM-Kanal nicht angeben müssen, da &man.rfcomm.sppd.1; diesen über SDP vom entfernten Gerät abfragen kann. Wenn Sie dies nicht wollen, können Sie einen RFCOMM-Kanal auch manuell festlegen. &prompt.root; rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6 rfcomm_sppd[94692]: Starting on /dev/ttyp6... Sobald die Verbindung hergestellt ist, kann pseudo-tty als serieller Port verwenden werden. &prompt.root; cu -l ttyp6 Problembehandlung Ein entferntes Gerät kann keine Verbindung aufbauen Einige ältere Bluetooth-Geräte unterstützen keinen Rollentausch. Wenn &os; eine neue Verbindung akzeptiert, wird versucht, die Rolle zu tauschen, um zum Master zu werden. Geräte, die dies nicht unterstützen, können keine Verbindung aufbauen. Beachten Sie, dass der Rollentausch ausgeführt wird, sobald eine neue Verbindung aufgebaut wird, daher ist es nicht möglich, das entfernte Gerät zu fragen, ob es den Rollentausch unterstützt. Dieses Verhalten von &os; kann aber durch eine HCI-Option geändert werden: &prompt.root; hccontrol -n ubt0hci write_node_role_switch 0 Wo finde ich genaue Informationen darüber, was schiefgelaufen ist? Verwenden Sie hcidump, das Sie über den Port comms/hcidump installieren können. hcidump hat Ähnlichkeiten mit &man.tcpdump.1;. Es dient zur Anzeige der Bluetooth-Pakete in einem Terminal oder zur Speicherung der Pakete in einer Datei (Dump).
Andrew Thompson Geschrieben von LAN-Kopplung mit einer Bridge Einführung Subnetz Bridge Manchmal ist es nützlich, ein physikalisches Netzwerk (wie ein Ethernetsegment) in zwei separate Netzwerke aufzuteilen, ohne gleich IP-Subnetze zu erzeugen, die über einen Router miteinander verbunden sind. Ein Gerät, das zwei Netze auf diese Weise verbindet, wird als Bridge bezeichnet. Jedes FreeBSD-System mit zwei Netzkarten kann als Bridge fungieren. Die Bridge arbeitet, indem sie die MAC Layeradressen (Ethernet Adressen) der Geräte in ihren Netzwerksegmenten lernt. Der Verkehr wird nur dann zwischen zwei Segmenten weitergeleitet, wenn sich Sender und Empfänger in verschiedenen Netzwerksegmenten befinden. In vielerlei Hinsicht entspricht eine Bridge daher einem Ethernet-Switch mit sehr wenigen Ports. Situationen, in denen <emphasis>Bridging</emphasis> angebracht ist Es gibt zahlreiche Situationen, in denen der Einsatz einer Bridge sinnvoll ist: Verbinden von Netzwerken Die Hauptaufgabe einer Bridge ist die Verbindung von zwei oder mehreren Netzwerksegmenten zu einem gemeinsamen Netzwerk. Es ist oft sinnvoller, eine hostbasierte Bridge anstelle normaler Netzwerkkomponenten (wie Kabelverbindungen), Firewalls oder Pseudonetzwerken über die Schnittstelle einer virtuellen Maschine einzusetzen. Eine Bridge kann außerdem ein drahtloses Gerät mit einem Kabelnetzwerk verbinden. Diese Fähigkeit der Bridge wird als HostAP-Modus bezeichnet. Die Bridge agiert in diesem Fall als Access Point für das drahtlose Gerät. Filtering/Traffic Shaping Firewall Firewall NAT Häufig kommt es vor, dass Firewallfunktionen benötigt werden, ohne dass Routing oder Network Adress Translation (NAT) verwendet werden soll. Ein Beispiel dafür wäre ein kleines Unternehmen, das über DSL oder ISDN an seinen ISP angebunden ist. Es verfügt über 13 weltweit erreichbare IP-Adressen, sein Netzwerk besteht aus 10 Rechnern. In dieser Situation ist der Einsatz von Subnetzen sowie einer routerbasierten Firewall schwierig. Router DSL ISDN Eine brigdebasierte Firewall kann konfiguriert und in den ISDN/DSL-Downstreampfad ihres Routers eingebunden werden, ohne dass Sie sich um IP-Adressen kümmern müssen. Netzwerküberwachung Eine Bridge kann zwei Netzwerksegmente miteinander verbinden und danach alle Ethernet-Rahmen überprüfen, die zwischen den beiden Netzwerksegmenten ausgetauscht werden. Dazu verwendet man entweder &man.bpf.4;/&man.tcpdump.1; auf dem Netzgerät der Bridge oder schickt Kopien aller Rahmen an ein zusätzliches Netzgerät (den sogenannten Span Port). Layer 2-VPN Zwei Ethernetnetzwerke können über einen IP-Link miteinander verbunden werden, indem Sie die beiden Netzwerke über einen EtherIP-Tunnel koppeln oder eine &man.tap.4;-basierte Lösung wie OpenVPN einsetzen. Layer 2-Redundanz Die Systeme eines Netzwerks können redundant miteinander verbunden sein. In diesem Fall verwenden Sie das Spanning Tree Protocol, um redundante Pfade zu blockieren. Damit ein Ethernetnetzwerk korrekt arbeitet, darf immer nur ein aktiver Pfad zwischen zwei Geräten des Netzwerks existieren. Aufgabe des Spanning Tree Protocols ist es daher, Schleifen zu entdecken und redundante Links in den Status blockiert zu versetzen. Fällt ein aktiver Link aus, so berechnet das Protokoll einen neuen Pfad. Dazu wird ein blockierter Pfad in den Status aktiv versetzt, damit alle Systeme des Netzwerks wieder miteinander kommunizieren können. Kernelkonfiguration Dieser Abschnitt beschreibt nur die &man.if.bridge.4;-Bridge-Implementierung. Ein Netgraph-Bridge-Treiber ist ebenfalls verfügbar, wird hier aber nicht behandelt. Lesen Sie die Manualpage &man.ng.bridge.4;, wenn Sie diesen Treiber einsetzen wollen. Bei diesem Treiber handelt es sich um ein Kernelmodul, das von &man.ifconfig.8; automatisch geladen wird, wenn ein Bridge-Interface erzeugt wird. Alternativ ist es aber auch möglich, die Unterstützung für den Treiber in Ihren Kernel zu kompilieren. Dazu fügen Sie die Zeile device if_bridge in Ihre Kernelkonfigurationsdatei ein und bauen danach den Kernel neu. Paketfilter können mit allen Firewallpaketen verwendet werden, die das &man.pfil.9;-Framework benutzen. Die Firewall kann dabei entweder als Kernelmodul geladen oder in den Kernel kompiliert werden. Eine Bridge kann auch als Traffic Shaper verwendet werden, wenn Sie &man.altq.4; oder &man.dummynet.4; einsetzen. Die LAN-Kopplung aktivieren Eine Bridge wird durch das Klonen von Schnittstellen erzeugt. Um eine Bridge zu erzeugen, verwenden Sie den Befehl &man.ifconfig.8;. Ist der Bridge-Treiber nicht in Ihren Kernel kompiliert, wird er automatisch geladen. &prompt.root; ifconfig bridge create bridge0 &prompt.root; ifconfig bridge0 bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 96:3d:4b:f1:79:7a id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0 Im obigen Beispiel wird die Bridge erzeugt und erhält automatisch eine zufällig generierte Ethernet-Adresse zugewiesen. Die Parameter maxaddr sowie timeout legen fest, wie viele MAC-Adressen die Bridge in ihrer Forward-Tabelle halten kann beziehungsweise wie viele Sekunden jeder Eintrag erhalten bleiben soll, nachdem er zuletzt verwendet wurde. Die restlichen Parameter sind für die Konfiguration von Spanning Tree notwendig. Im nächsten Schritt werden die Schnittstellen, die die Bridge verbinden soll, zugewiesen. Damit die Bridge Datenpakete weiterleiten kann, müssen sowohl die Bridge als auch die Schnittstellen (der zu verbindenden Netzwerksegmente) aktiviert sein: &prompt.root; ifconfig bridge0 addm fxp0 addm fxp1 up &prompt.root; ifconfig fxp0 up &prompt.root; ifconfig fxp1 up Danach ist die Bridge in der Lage, Ethernet-Rahmen zwischen den Schnittstellen fxp0 und fxp1 weiterzuleiten. Um diese Konfiguration beim Systemstart automatisch zu aktivieren, müssen Sie folgende Einträge in die Datei /etc/rc.conf aufnehmen: cloned_interfaces="bridge0" ifconfig_bridge0="addm fxp0 addm fxp1 up" ifconfig_fxp0="up" ifconfig_fxp1="up" Benötigen Sie für die Bridge eine IP-Adresse, müssen Sie diese der Schnittstelle der Bridge zuweisen (und nicht einer der Schnittstellen der gekoppelten Netzwerksegmente). Dabei können Sie die IP-Adresse sowohl statisch als auch dynamisch über DHCP zuweisen: &prompt.root; ifconfig bridge0 inet 192.168.0.1/24 Sie können der Bridge-Schnittstelle auch eine IPv6-Adresse zuweisen. Firewalls firewall Nachdem ein Paketfilter aktiviert wurde, können Datenpakete, die von den Schnittstellen der gekoppelten Netzwerksegmente gesendet und empfangen werden, über die Bridge weitergeleitet oder nach bestimmten Regeln gefiltert oder auch komplett geblockt werden. Ist die Richtung des Paketflusses wichtig, ist es am besten, eine Firewall auf den Schnittstellen der einzelnen Netzwerksegmente einzurichten und nicht auf der Bridge selbst. Eine Bridge verfügt über verschiedene Optionen, über die Sie die Weiterleitung von Nicht-IP- und ARP-Paketen sowie den Einsatz von Layer 2-Firewalls (mit IPFW) steuern können. Lesen Sie die Manualpage &man.if.bridge.4;, wenn Sie diese Funktionen benötigen. Spanning Tree Der Bridge-Treiber implementiert das Rapid Spanning Tree Protocol (RSTP oder 802.1w), das abwärtskompatibel zum veralteten Spanning Tree Protocol (STP) ist. Spanning Tree dient dazu, Schleifen in einer Netzwerktopologie zu entdecken und zu entfernen. RSTP arbeitet dabei schneller als das veraltete STP. RSTP tauscht Informationen mit benachbarten Switchen aus, um Pakete korrekt weiterzuleiten und eine Schleifenbildung zu verhindern. Die folgende Tabelle listet die von den verschiedenen &os;-Versionen unterstützten Betriebsmodi auf: &os;-Version STP-Modus Standardmodus &os; 5.4—&os; 6.2 STP STP &os; 6.3+ RSTP oder STP STP &os; 7.0+ RSTP oder STP RSTP Spanning Tree kann auf den Schnittstellen der durch die Bridge verbundenen Netzwerksegmente über die Option stp aktiviert werden. Für eine Bridge, die die Schnittstellen fxp0 und fxp1 verbindet, aktivieren Sie STP wie folgt: &prompt.root; ifconfig bridge0 stp fxp0 stp fxp1 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether d6:cf:d5:a0:94:6d id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0 member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 3 priority 128 path cost 200000 proto rstp role designated state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 4 priority 128 path cost 200000 proto rstp role designated state forwarding Diese Bridge hat die Spanning-Tree-ID 00:01:02:4b:d4:50 und die Priorität 32768. Da diese ID mit der Root-ID identisch ist, handelt es sich um die Root-Bridge dieses Netzwerks. Auf einer anderen Bridge des Netzwerks ist Spanning Tree ebenfalls aktiviert: bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 96:3d:4b:f1:79:7a id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4 member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 4 priority 128 path cost 200000 proto rstp role root state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 5 priority 128 path cost 200000 proto rstp role designated state forwarding Die Zeile root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4 zeigt an, dass die Root-Bridge wie im obigen Beispiel die ID 00:01:02:4b:d4:50 hat. Die Pfadkosten hin zur Root-Bridge betragen 400000, wobei der Pfad zur Root-Bridge über Port 4 geht (der wiederum der Schnittstelle fxp0 entspricht). Fortgeschrittene Funktionen Den Datenfluss rekonstruieren Die Bridge unterstützt den Monitormodus. Dabei werden alle Pakete verworfen, nachdem sie von &man.bpf.4; verarbeitet wurden. In diesem Modus erfolgt keine weitere Bearbeitung und auch keine Weiterleitung von Datenpaketen. Es ist daher möglich, die Eingabe von zwei oder mehr Netzwerkschnittstellen in einen einzigen gemeinsamen &man.bpf.4;-Stream zu vereinen. Ein solcher Datenstrom ist beispielsweise nützlich, um den Datenverkehr für ""network taps"" zu rekonstruieren, die ihre RX/TX-Signale über verschiedene Schnittstellen senden. Um die Eingabe von vier Netzwerkschnittstellen in einzigen gemeinsamen Datenstrom zu vereinen, geben Sie Folgendes ein: &prompt.root; ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up &prompt.root; tcpdump -i bridge0 Span Ports Eine Kopie jedes Ethernet-Rahmens, der an der Bridge ankommt, wird über einen festgelegten Span Port verschickt. Auf einer Bridge können beliebig viele Span Ports festgelegt werden. Wird eine Schnittstelle als Span Port konfiguriert, kann sie nicht mehr als normaler Bridge-Port verwendet werden. Eine derartige Konfiguration ist beispielsweise sinnvoll, um den Datenverkehr, der in einem Netzwerk über die Bridge läuft, auf einen Rechner zu übertragen, der mit einem Span Port der Bridge verbunden ist. Um eine Kopie aller Ethernet-Rahmen über die Schnittstelle fxp4 zu verschicken, geben Sie Folgendes ein: &prompt.root; ifconfig bridge0 span fxp4 Private Schnittstellen Eine private Schnittstelle leitet keine Daten an einen Port weiter, bei dem es sich ebenfalls um eine private Schnittstelle handelt. Der Datenverkehr wird dabei komplett blockiert, auch Ethernet-Rahmen und ARP-Pakete werden nicht weitergeleitet. Wollen Sie hingegen nur spezifische Datenpakete blockieren, sollten Sie eine Firewall einsetzen. Schnittstellen als <foreignphrase>sticky</foreignphrase> kennzeichnen Wenn die Schnittstelle eines über eine Bridge verbundenen Netzwerksegments als sticky gekennzeichnet wird, werden alle dynamisch gelernten Adressen als statische Adressen behandelt, sobald sie in den Forward-Cache der Bridge aufgenommen wurden. Sticky-Einträge werden niemals aus dem Cache entfernt oder ersetzt. Selbst dann nicht, wenn die Adresse von einer anderen Schnittstelle verwendet wird. Sie können dadurch die Vorteile statischer Adresseinträge nutzen, ohne die Forward-Tabelle vor dem Einsatz der Bridge mit statischen Einträgen füllen zu müssen. Clients, die sich in einem bestimmten von der Bridge verwalteten Segmente befinden, können dabei nicht in ein anderes Segment wechseln. Ein weiteres Beispiel für den Einsatz von Sticky-Adressen wäre die Kombination einer Bridge mit mehreren VLANs, um einen Router zu konfigurieren, der in in der Lage ist, einzelne Kundennetzwerke voneinander zu trennen, ohne IP-Adressbereiche zu verschwenden. Für das folgende Beispiel nehmen wir an, dass sich der Client CustomerA im VLAN vlan100 und der Client CustomerB im VLAN vlan101 befinden. Die Bridge hat die IP-Adresse 192.168.0.1 und ist als Internet-Router konfiguriert. &prompt.root; ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101 &prompt.root; ifconfig bridge0 inet 192.168.0.1/24 Beide Clients sehen 192.168.0.1 als Ihr Default-Gateway. Da der Brücken-Cache sticky ist, sind Sie nicht dazu in der Lage, die MAC-Adresse des anderen Kunden zu spoofen und dessen Datenverkehr abzufangen. Sie können die Kommunikation zwischen den VLANs vollständig unterbinden, wenn Sie private Schnittstellen (oder eine Firewall) einsetzen: &prompt.root; ifconfig bridge0 private vlan100 private vlan101 Die Kunden sind nun komplett voneinander isoliert und der komplette /24-Adressbereich kann zugewiesen werden, ohne dass Sie Subnetze einsetzen müssen. SNMP-Monitoring Die Schnittstelle der Bridge sowie die STP-Parameter können durch den bereits im Basissystem enthaltenen SNMP-Daemon überwacht werden. Die exportierten Bridge-MIBs entsprechen den IETF-Standards, daher können Sie einen beliebigen SNMP-Client oder ein beliebiges Monitoring-Werkzeug einsetzen, um die benötigten Daten zu erhalten. Auf dem Rechner, auf dem die Bridge konfiguriert ist, aktivieren Sie die Zeile begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so" in der Datei /etc/snmp.config und starten danach den bsnmpd-Daemon. Eventuell benötigen Sie noch weitere Konfigurationsparameter wie Community-Namen und Zugriffslisten. Die Konfiguration dieser Parameter wird in den Manualpages &man.bsnmpd.1; sowie &man.snmp.bridge.3; beschrieben. Die folgenden Beispiele verwenden das Softwarepaket Net-SNMP (net-mgmt/net-snmp), um die Bridge abzufragen. Alternativ können Sie dafür auch den Port net-mgmt/bsnmptools einsetzen. Auf dem SNMP-Client fügen Sie danach die folgenden Zeilen in die Datei $HOME/.snmp/snmp.conf ein, um die MIB-Definitionen der Bridge in Net-SNMP zu importieren: mibdirs +/usr/share/snmp/mibs mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB Um eine einzelne Bridge über den IETF BRIDGE-MIB (RFC4188) zu überwachen, geben Sie Folgendes ein: &prompt.user; snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44 BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2 BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50 ... BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5) BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1) BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000 BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50 BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0 BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50 BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80 BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1 RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2) Der Wert der Variable dot1dStpTopChanges.0 ist hier 2, die STP-Topologie der Bridge wurde also bereits zweimal geändert. Unter einer Änderung versteht man dabei die Anpassung eines oder mehrerer Links und die Kalkulation eines neuen Baums. Der Wert der Variable dot1dStpTimeSinceTopologyChange.0 gibt an, wann dies zuletzt geschah. Um mehrere Bridge-Schnittstellen zu überwachen, können Sie den privaten BEGEMOT-BRIDGE-MIB einsetzen: &prompt.user; snmpwalk -v 2c -c public bridge1.example.com enterprises.fokus.begemot.begemotBridge BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1 ... BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9 Um die über den mib-2.dot1dBridge-Subtree überwachte Bridge-Schnittstelle zu ändern, geben Sie Folgendes ein: &prompt.user; snmpset -v 2c -c private bridge1.example.com BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2 + + Link Aggregation and Failover + + Dieser Abschnitt ist noch nicht übersetzt. + Lesen Sie bitte + das Original in englischer Sprache. Wenn Sie helfen + wollen, diesen Abschnitt zu übersetzen, senden Sie bitte + eine E-Mail an die Mailingliste &a.de.translators;. + + Jean-François Dockès Aktualisiert von Alex Dupre Reorganisiert und erweitert von Start und Betrieb von FreeBSD über ein Netzwerk plattenloser Arbeitsplatz plattenloser Betrieb FreeBSD kann über ein Netzwerk starten und arbeiten, ohne eine lokale Festplatte zu verwenden, indem es Dateisysteme eines NFS-Servers in den eigenen Verzeichnisbaum einhängt. Dazu sind, von den Standardkonfigurationsdateien abgesehen, keine Systemänderungen nötig. Ein solches System kann leicht installiert werden, da alle notwendigen Elemente bereits vorhanden sind: Es gibt mindestens zwei Möglichkeiten, den Kernel über das Netzwerk zu laden: PXE: Das Preboot eXecution Environment System von &intel; ist eine Art intelligentes Boot-ROM, das in einigen Netzkarten oder Hauptplatinen verwendet wird. Weitere Informationen finden Sie in &man.pxeboot.8;. Der Port Etherboot (net/etherboot) erzeugt ROM-fähigen Code, um einen Kernel über das Netzwerk zu laden. Dieser Code kann entweder auf ein Boot-PROM einer Netzkarte gebrannt werden, was von vielen Netzkarten unterstützt wird. Oder er kann von einer lokalen Diskette, Festplatte oder von einem laufenden &ms-dos;-System geladen werden. Das Beispielskript /usr/share/examples/diskless/clone_root erleichtert die Erzeugung und die Wartung des root-Dateisystems auf dem Server. Das Skript muss wahrscheinlich angepasst werden, dennoch werden Sie schnell zu einem Ergebnis kommen. Die Startdateien, die einen plattenlosen Systemstart erkennen und unterstützen, sind nach der Installation in /etc vorhanden. Dateiauslagerungen können sowohl via NFS als auch auf die lokale Platte erfolgen. Es gibt verschiedene Wege, einen plattenlosen Rechner einzurichten. Viele Elemente sind daran beteiligt, die fast immer an den persönlichen Geschmack angepasst werden können. Im folgenden Abschnitt wird die Installation eines kompletten Systems beschrieben, wobei der Schwerpunkt auf Einfachheit und Kompatibilität zu den Standardstartskripten von FreeBSD liegt. Das beschriebene System hat folgende Eigenschaften: Die plattenlosen Rechner haben ein gemeinsames /- sowie ein gemeinsames /usr-Dateisystem, die jeweils schreibgeschützt sind. Das root-Dateisystem ist eine Kopie eines Standardwurzelverzeichnisses von FreeBSD (üblicherweise das des Servers), bei dem einige Konfigurationsdateien durch für den plattenlosen Betrieb geeignete Versionen ersetzt wurden. Für die Bereiche des root-Dateisystems, die beschreibbar sein müssen, werden mit &man.md.4; virtuelle Dateisysteme erzeugt. Dies bedeutet aber auch, dass alle Veränderungen verloren gehen, wenn das System neu gestartet wird. Der Kernel wird, in Abhängigkeit von der jeweiligen Situation, entweder von Etherboot oder von PXE transferiert und geladen. Das hier beschriebene System ist nicht sicher. Es sollte nur in einem gesicherten Bereich eines Netzwerks verwendet werden und für andere Rechner nicht erreichbar sein. Alle Informationen in diesem Abschnitt wurden unter &os; 5.2.1-RELEASE getestet. Hintergrundinformationen Die Einrichtung von plattenlosen Rechnern ist einfach, aber auch fehleranfällig. Der Grund dafür sind auftretende Fehler, die sich oft nur schwer zuordnen lassen. Unter anderem sind dafür folgende Umstände verantwortlich: Kompilierte Optionen haben zur Laufzeit unterschiedliche Auswirkungen. Fehlermeldungen sind oft kryptisch oder fehlen vollständig. Daher ist es nützlich, über die im Hintergrund ablaufenden Mechanismen Bescheid zu wissen. Dadurch wird es einfacher, eventuell auftretende Fehler zu beheben. Verschiedene Operationen müssen ausgeführt werden, um ein System erfolgreich zu starten: Der Rechner benötigt einige Startparameter, wie seine IP-Adresse, die Namen ausführbarer Dateien, den Servernamen sowie den root-Pfad. Für die Übermittlung dieser Informationen wird entweder das DHCP- oder das BOOTP-Protokoll verwendet. Bei DHCP handelt es sich um eine abwärtskompatible Erweiterung von BOOTP, die die gleichen Portnummern und das gleiche Paketformat verwendet. Es ist möglich, das System so zu konfigurieren, dass es nur BOOTP verwendet. Das Serverprogramm &man.bootpd.8; ist bereits im &os;-Basissystem enthalten. DHCP hat im Vergleich zu BOOTP allerdings mehrere Vorteile (bessere Konfigurationsdateien, die Möglichkeit zur Verwendung von PXE, sowie viele andere, die nicht in direktem Zusammenhang mit dem plattenlosen Betrieb stehen). Dieser Abschnitt beschreibt die Konfiguration mittels DHCP. Wenn möglich, werden aber entsprechende Beispiele für &man.bootpd.8; angeführt. Die Beispielkonfiguration nutzt das Softwarepaket ISC DHCP. Der Rechner muss ein oder mehrere Programme in den lokalen Speicher laden. Dazu wird entweder TFTP oder NFS verwendet. Die Auswahl zwischen TFTP und NFS erfolgt über das Setzen von verschiedenen Kompilieroptionen. Ein häufig gemachter Fehler ist es, Dateinamen für das falsche Protokoll anzugeben: TFTP transferiert normalerweise alle Dateien aus einem einzigen Verzeichnis des Servers, und erwartet einen Pfad relativ zu diesem Verzeichnis. NFS verlangt hingegen absolute Dateipfade. Die möglichen Bootstrap-Programme und der Kernel müssen initialisiert und ausgeführt werden. Dabei gibt es zwei Möglichkeiten: PXE lädt &man.pxeboot.8;. Dabei handelt es sich um eine modifizierte Version des &os;-Laders der Boot-Phase drei. Der &man.loader.8; beschafft alle für den Systemstart notwendigen Parameter, und hinterlegt diese in der Kernelumgebung, bevor er die Kontrolle übergibt. Es ist hier möglich, den GENERIC-Kernel zu verwenden. Etherboot lädt den Kernel hingegen direkt. Dafür müssen Sie allerdings einen Kernel mit spezifischen Optionen erzeugen. PXE und Etherboot sind zwar im Großen und Ganzen gleichwertig, da der Kernel aber viele Aufgaben an &man.loader.8; übergibt, sollte bevorzugt PXE eingesetzt werden. Wenn Ihr BIOS und Ihre Netzkarten PXE unterstützen, sollten Sie es auch verwenden. Zuletzt muss der Rechner auf seine Dateisysteme zugreifen können. Dafür wird stets NFS verwendet. Weitere Informationen finden Sie in &man.diskless.8;. Installationsanweisungen Konfiguration unter Verwendung von <application>ISC DHCP</application> DHCP plattenloser Betrieb Der ISC DHCP-Server kann Anfragen sowohl von BOOTP als auch von DHCP beantworten. isc-dhcp 3.0 ist nicht Teil des Basissystems. Sie müssen es daher zuerst installieren. Verwenden Sie dazu den Port net/isc-dhcp3-server oder das entsprechende Paket. Nachdem ISC DHCP installiert ist, muss das Programm konfiguriert werden (normalerweise in /usr/local/etc/dhcpd.conf). Im folgenden Beispiel verwendet Rechner margaux Etherboot, während Rechner corbieres PXE verwendet: default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/tftpboot/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } host corbieres { hardware ethernet 00:02:b3:27:62:df; fixed-address corbieres.example.com; next-server 192.168.4.4; filename "pxeboot"; option root-path "192.168.4.4:/data/misc/diskless"; } } Diese Option weist dhcpd an, den Wert der host-Deklaration als Rechnernamen des plattenlosen Rechners zu senden. Alternativ kann man der host-Deklaration Folgendes hinzufügen: option host-name margaux Die Anweisung next-server bestimmt den TFTP- oder NFS-Server, von dem der Loader oder der Kernel geladen werden (in der Voreinstellung ist das der DHCP-Server selbst). Die Anweisung filename bestimmt die Datei, die Etherboot als nächstes lädt. Das genaue Format hängt von der gewählten Transfermethode ab. Etherboot kann sowohl mit NFS als auch mit TFTP kompiliert werden. In der Voreinstellung wird der &os;-Port mit NFS-Unterstützung kompiliert. PXE verwendet TFTP, daher wird im Beispiel ein relativer Dateipfad verwendet. Dies kann aber, je nach Konfiguration des TFTP-Servers, auch anders sein. Beachten Sie, dass PXE pxeboot lädt, und nicht den Kernel. Es ist auch möglich, das Verzeichnis /boot einer &os;-CD-ROM von pxeboot laden zu lassen. &man.pxeboot.8; kann einen GENERIC-Kernel laden, dadurch ist es möglich, PXE von einer entfernten CD-ROM zu starten. Die Option root-path bestimmt den Pfad des root-Dateisystems in normaler NFS-Schreibweise. Wird PXE verwendet, ist es möglich, die IP-Adresse des Rechners wegzulassen, solange nicht die Kerneloption BOOTP aktiviert wird. Der NFS-Server entspricht in diesem Fall dem TFTP-Server. Konfiguration bei Verwendung von BOOTP BOOTP plattenloser Betrieb Es folgt nun eine der Konfiguration von DHCP entsprechende Konfiguration (für einen Client) für bootpd. Zu finden ist die Konfigurationsdatei unter /etc/bootptab. Beachten Sie bitte, dass Etherboot mit der Option NO_DHCP_SUPPORT kompiliert werden muss, damit BOOTP verwendet werden kann. PXE hingegen benötigt DHCP. Der einzige offensichtliche Vorteil von bootpd ist, dass es bereits im Basissystem vorhanden ist. .def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100 Ein Startprogramm unter Verwendung von <application>Etherboot</application> erstellen Etherboot Die Internetseite von Etherboot enthält ausführliche Informationen, die zwar vor allem für Linux gedacht sind, aber dennoch nützliche Informationen enthalten. Im Folgenden wird daher nur grob beschrieben, wie Sie Etherboot auf einem FreeBSD-System einsetzen können. Als Erstes müssen Sie net/etherboot als Paket oder als Port installieren. Sie können Etherboot so konfigurieren, dass TFTP anstelle von NFS verwendet wird, indem Sie die Datei Config im Quellverzeichnis von Etherboot bearbeiten. Für unsere Installation verwenden wir eine Startdiskette. Für Informationen zu anderen Methoden (PROM oder &ms-dos;-Programme) lesen Sie bitte die Dokumentation zu Etherboot. Um eine Startdiskette zu erzeugen, legen Sie eine Diskette in das Laufwerk des Rechners ein, auf dem Sie Etherboot installiert haben. Danach wechseln Sie in das Verzeichnis src des Etherboot-Verzeichnisbaums und geben Folgendes ein: &prompt.root; gmake bin32/devicetype.fd0 devicetype hängt vom Typ der Ethernetkarte ab, über die der plattenlose Rechner verfügt. Lesen Sie dazu NIC im gleichen Verzeichnis, um den richtigen Wert für devicetype zu bestimmen. Das System mit <acronym>PXE</acronym> starten In der Voreinstellung lädt der &man.pxeboot.8;-Loader den Kernel über NFS. Soll stattdessen TFTP verwendet werden, muss beim Kompilieren die Option LOADER_TFTP_SUPPORT in der Datei /etc/make.conf eingetragen sein. Sehen Sie sich die Datei /usr/share/examples/etc/make.conf für weitere Anweisungen an. Es gibt zwei Optionen für make.conf, die nützlich sein können, wenn Sie eine plattenlose serielle Konsole einrichten wollen: BOOT_PXELDR_PROBE_KEYBOARD, und BOOT_PXELDR_ALWAYS_SERIAL. Um PXE beim Systemstart zu verwenden, müssen Sie im BIOS des Rechner die Option Über das Netzwerk starten aktivieren. Alternativ können Sie während der PC-Initialisierung auch eine Funktionstaste drücken. Serverkonfiguration - <acronym>TFTP</acronym> und <acronym>NFS</acronym> TFTP plattenloser Betrieb NFS plattenloser Betrieb Wenn Sie PXE oder Etherboot so konfiguriert haben, dass diese TFTP verwenden, müssen Sie auf dem Dateiserver tftpd aktivieren: Erzeugen Sie ein Verzeichnis, in dem tftpd seine Dateien ablegt, beispielsweise /tftpboot. Fügen Sie folgende Zeile in /etc/inetd.conf ein: tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot Anscheinend benötigen zumindest einige PXE-Versionen die TCP-Version von TFTP. Sollte dies bei Ihnen der Fall sein, fügen Sie eine zweite Zeile ein, in der Sie dgram udp durch stream tcp ersetzen. Weisen Sie inetd an, seine Konfiguration erneut einzulesen (Damit der folgende Befehl funktioniert, muss die Option in der Datei /etc/rc.conf vorhanden sein.): &prompt.root; /etc/rc.d/inetd restart Sie können das Verzeichnis /tftpboot an einem beliebigen Ort auf dem Server ablegen. Stellen Sie aber sicher, dass Sie diesen Ort sowohl in inetd.conf als auch in dhcpd.conf eingetragen haben. Außerdem müssen Sie NFS aktivieren und die entsprechenden Verzeichnisse exportieren. Fügen Sie folgende Zeile in /etc/rc.conf ein: nfs_server_enable="YES" Exportieren Sie das Verzeichnis, in dem sich das Wurzelverzeichnis für den plattenlosen Betrieb befindet, indem Sie folgende Zeile in /etc/exports einfügen (passen Sie dabei den mountpoint an und ersetzen Sie margaux corbieres durch den Namen Ihres plattenlosen Rechners): /data/misc -alldirs -ro margaux Weisen sie nun mountd an, seine Konfigurationsdatei erneut einzulesen. Wenn Sie NFS erst in der Datei /etc/rc.conf aktivieren mussten, sollten Sie stattdessen den Rechner neu starten. Dadurch wird die Konfigurationsdatei ebenfalls neu eingelesen. &prompt.root; /etc/rc.d/mountd restart Einen plattenlosen Kernel erzeugen plattenloser Betrieb Kernelkonfiguration Wenn Sie Etherboot verwenden, müssen Sie in die Kernelkonfigurationsdatei Ihres plattenlosen Clients zusätzlich folgende Optionen einfügen: options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root file system using BOOTP info Außerdem können Sie die Optionen BOOTP_NFSV3, BOOT_COMPAT sowie BOOTP_WIRED_TO verwenden (sehen Sie sich dazu auch die Datei NOTES an). Die Namen dieser Optionen sind historisch bedingt. Sie ermöglichen eine unterschiedliche Verwendung von DHCP und BOOTP innerhalb des Kernels. Es ist auch möglich, eine strikte Verwendung von BOOTP oder DHCP zu erzwingen. Erzeugen Sie den neuen Kernel (lesen Sie dazu auch ) und kopieren Sie ihn an den in dhcpd.conf festgelegten Ort. Wenn Sie PXE verwenden, ist die Erzeugung eines Kernels zwar nicht unbedingt nötig, sie wird allerdings dennoch empfohlen. Die Aktivierung dieser Optionen bewirkt, dass die Anzahl der möglichen DHCP-Anforderungen während des Kernelstarts erhöht wird. Ein kleiner Nachteil sind eventuell auftretende Inkonsistenzen zwischen den neuen Werten und den von &man.pxeboot.8; erhaltenen Werten. Der große Vorteil dieser Variante ist es, dass dabei der Rechnername gesetzt wird, den Sie ansonsten durch eine andere Methode, beispielsweise in einer clientspezifischen rc.conf-Datei festlegen müssten. Damit der Kernel von Etherboot geladen werden kann, müssen device hints im Kernel einkompiliert sein. Dazu setzen Sie normalerweise folgende Option in die Kernelkonfigurationsdatei (sehen Sie sich dazu auch die kommentierte Datei NOTES an): hints "GENERIC.hints" Das root-Dateisystem erzeugen Root-Dateisystem plattenloser Betrieb Sie müssen für den plattenlosen Rechner ein root-Dateisystem erzeugen, und zwar an dem in dhcpd.conf als root-path festgelegten Ort. <command>make world</command> zum Füllen des Dateisystems einsetzen Diese schnelle Methode installiert ein komplettes jungfräuliches System (und nicht nur ein root-Dateisystem) nach DESTDIR. Dazu müssen Sie lediglich das folgende Skript ausführen: #!/bin/sh export DESTDIR=/data/misc/diskless mkdir -p ${DESTDIR} cd /usr/src; make buildworld && make buildkernel cd /usr/src/etc; make distribution Danach müssen Sie noch die dadurch in DESTDIR erzeugten Dateien /etc/rc.conf sowie /etc/fstab Ihren Wünschen anpassen. Den Auslagerungsbereich konfigurieren Falls nötig, kann eine auf dem NFS-Server liegende Datei als Auslagerungsdatei eingerichtet werden. Eine <acronym>NFS</acronym>-Auslagerungsdatei einrichten Der Kernel unterstützt beim Systemstart keine NFS-Auslagerungsdatei. Diese muss daher in den Startskripten aktiviert werden, indem ein beschreibbares Dateisystem eingehängt wird, um dort die Auslagerungsdatei zu erzeugen und zu aktivieren. Um eine Auslagerungsdatei zu erzeugen, gehen Sie wie folgt vor: &prompt.root; dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000 Um die Auslagerungsdatei zu aktivieren, fügen Sie folgende Zeile in rc.conf ein: swapfile=/path/to/swapfile Verschiedenes Schreibgeschütztes Dateisystem <filename>/usr</filename> plattenloser Betrieb /usr schreibgeschützt Wenn am plattenlosen Rechner X läuft, müssen Sie die Konfigurationsdatei von XDM anpassen, da Fehlermeldungen in der Voreinstellung auf /usr geschrieben werden. Der Server läuft nicht unter FreeBSD Wenn das root-Dateisystem nicht auf einem FreeBSD-Rechner liegt, muss das Dateisystem zuerst unter FreeBSD erzeugt werden. Anschließend wird es beispielsweise mit tar oder cpio an den gewünschten Ort kopiert. Dabei kann es Probleme mit den Gerätedateien in /dev geben, die durch eine unterschiedliche Darstellung der Major- und Minor-Number von Geräten auf beiden Systemen hervorgerufen werden. Eine Problemlösung besteht darin, das root-Verzeichnis auf einem FreeBSD-Rechner einzuhängen und die Gerätedateien dort mit &man.devfs.5; zu erzeugen. ISDN – diensteintegrierendes digitales Netzwerk ISDN Eine gute Quelle für Informationen zu ISDN ist die ISDN-Seite von Dan Kegel. Welche Informationen finden Sie in diesem Abschnitt? Wenn Sie in Europa leben, könnte der Abschnitt über ISDN-Karten für Sie interessant sein. Wenn Sie ISDN hauptsächlich dazu verwenden wollen, um sich über einen Anbieter ins Internet einzuwählen, sollten Sie den Abschnitt über Terminaladapter lesen. Dies ist die flexibelste Methode, die auch die wenigsten Probleme verursacht. Wenn Sie zwei Netzwerke miteinander verbinden, oder sich über eine ISDN-Standleitung mit dem Internet verbinden wollen, finden Sie entsprechende Informationen im Abschnitt über Router und Bridges. Bei der Wahl der gewünschten Lösung sind die entstehenden Kosten ein entscheidender Faktor. Die folgenden Beschreibungen reichen von der billigsten bis zur teuersten Variante. Hellmuth Michaelis Beigetragen von ISDN-Karten ISDN Karten Das ISDN-Subsystem von FreeBSD unterstützt den DSS1/Q.931- (oder Euro-ISDN)-Standard nur für passive Karten. Zusätzlich werden aber auch einige aktive Karten unterstützt, bei denen die Firmware auch andere Signalprotokolle unterstützt; dies schließt auch die erste ISDN-Karte mit Primärmultiplex-Unterstützung mit ein. isdn4bsd ermöglicht es Ihnen, sich unter Nutzung von IP over raw HDLC oder synchronem PPP mit anderen ISDN-Routern zu verbinden. Dazu verwenden Sie entweder Kernel-&man.ppp.8; (via isppp, einem modifizierten sppp-Treiber), oder Sie benutzen User-&man.ppp.8;. Wenn Sie User-&man.ppp.8; verwenden, können Sie zwei oder mehrere ISDN-B-Kanäle bündeln. Im Paket enthalten ist auch ein Programm mit Anrufbeantworterfunktion sowie verschiedene Werkzeuge, wie ein Softwaremodem, das 300 Baud unterstützt. FreeBSD unterstützt eine ständig wachsende Anzahl von PC-ISDN-Karten, die weltweit erfolgreich eingesetzt werden. Von FreeBSD unterstützte passive ISDN-Karten enthalten fast immer den ISAC/HSCX/IPAC ISDN-Chipsatz von Infineon (ehemals Siemens). Unterstützt werden aber auch Karten mit Cologne Chip (diese allerdings nur für den ISA-Bus), PCI-Karten mit Winbond W6692 Chipsatz, einige Karten mit dem Tiger 300/320/ISAC Chipsatz sowie einige Karten mit einem herstellerspezifischen Chipsatz, wie beispielsweise die Fritz!Card PCI V.1.0 und die Fritz!Card PnP von AVM. An aktiven ISDN-Karten werden derzeit die AVM B1 BRI-Karten (ISA und PCI-Version) sowie die AVM T1 PRI-Karten (PCI-Version) unterstützt. Informationen zu isdn4bsd finden Sie im Verzeichnis /usr/share/examples/isdn/ Ihres FreeBSD-Systems, oder auf der Internetseite von isdn4bsd. Dort finden Sie auch Verweise zu Tipps, Korrekturen, sowie weiteren Informationen, wie dem isdn4bsd-Handbuch. Falls Sie an der Unterstützung eines zusätzlichen ISDN-Protokolls, einer weiteren ISDN-Karte oder an einer anderen Erweiterung von isdn4bsd interessiert sind, wenden Sie sich bitte an &a.hm;. Für Fragen zur Installation, Konfiguration und zu sonstigen Problemen von isdn4bsd gibt es die Mailingliste &a.isdn.name;. ISDN-Terminaladapter Terminaladapter Terminaladapter (TA) sind für ISDN, was Modems für analoge Telefonleitungen sind. Modem Die meisten Terminaladapter verwenden den Standardbefehlssatz für Modems von Hayes (AT-Kommandos) und können daher als Modemersatz verwendet werden. Ein Terminaladapter funktioniert prinzipiell wie ein Modem, allerdings erfolgt der Verbindungsaufbau um einiges schneller. Die Konfiguration von PPP entspricht dabei exakt der eines Modems. Stellen Sie dabei allerdings die serielle Geschwindigkeit so hoch wie möglich ein. PPP Der Hauptvorteil bei der Verwendung eines Terminaladapters zur Verbindung mit einem Internetanbieter ist die Möglichkeit zur Nutzung von dynamischem PPP. Da IP-Adressen immer knapper werden, vergeben die meisten Provider keine statischen IP-Adressen mehr. Die meisten Router unterstützen allerdings keine dynamische Zuweisung von IP-Adressen. Der PPP-Daemon bestimmt die Stabilität und Eigenschaften der Verbindung, wenn Sie einen Terminaladapter verwenden. Daher können Sie unter FreeBSD einfach von einer Modemverbindung auf eine ISDN-Verbindung wechseln, wenn Sie PPP bereits konfiguriert haben. Allerdings bedeutet dies auch, das bereits bestehende Probleme mit PPP auch unter ISDN auftreten werden. Wenn Sie an maximaler Stabilität interessiert sind, verwenden Sie Kernel-PPP, und nicht das User-PPP. Folgende Terminaladapter werden von FreeBSD unterstützt: Motorola BitSurfer und Bitsurfer Pro Adtran Die meisten anderen Terminaladapter werden wahrscheinlich ebenfalls funktionieren, da die Hersteller von Terminaladaptern darauf achten, dass ihre Produkte den Standardbefehlssatz möglichst gut unterstützen. Das wirkliche Problem mit einem externen Terminaladapter ist, dass, ähnlich wie bei Modems, eine gute serielle Karte eine Grundvoraussetzung ist. Sie sollten sich die Anleitung für die Nutzung serieller Geräte unter FreeBSD ansehen, wenn Sie detaillierte Informationen über serielle Geräte und die Unterschiede zwischen asynchronen und synchronen seriellen Ports benötigen. Ein Terminaladapter, der an einem (asynchronen) seriellen Standardport angeschlossen ist, beschränkt Sie auf 115,2 Kbs. Dies selbst dann, wenn Sie eine Verbindung mit 128 Kbs haben. Um die volle Leistungsfähigkeit von ISDN (128 Kbs) nutzen zu können, müssen Sie den Terminaladapter daher an eine synchrone serielle Karte anschließen. Kaufen Sie keinen internen Terminaladapter in der Hoffnung, damit das synchron/asynchron-Problem vermeiden zu können. Interne Terminaladapter haben einen (asynchronen) seriellen Standardportchip eingebaut. Der einzige Vorteil interner Terminaladapter ist es, dass Sie ein serielles sowie ein Stromkabel weniger benötigen. Eine synchrone Karte mit einem Terminaladapter ist mindestens so schnell wie ein autonomer ISDN-Router, und, in Kombination mit einem einfachen 386-FreeBSD-System, wahrscheinlich flexibler. Die Entscheidung zwischen synchroner Karte/Terminaladapter und einem autonomen ISDN-Router ist beinahe eine religiöse Angelegenheit. Zu diesem Thema gibt es viele Diskussionen in den Mailinglisten. Suchen Sie in den Archiven danach, wenn Sie an der kompletten Diskussion interessiert sind. ISDN-Bridges und Router ISDN Autonome Bridge/Router ISDN-Bridges und Router sind keine Eigenheit von FreeBSD oder eines anderen Betriebssystems. Für eine vollständigere Beschreibung von Routing und Netzwerkkopplungen mit einer Bridge informieren Sie sich bitte durch weiterführende Literatur. In diesem Abschnitt werden die Begriffe Router und Bridge synonym verwendet. ISDN-Router und Bridges werden immer günstiger und damit auch immer beliebter. Ein ISDN-Router ist eine kleine Box, die direkt an Ihr lokales Ethernet-Netzwerk angeschlossen wird und sich mit einem Router oder einer Bridge verbindet. Die eingebaute Software ermöglicht die Kommunikation über PPP oder andere beliebte Protokolle. Ein Router ermöglicht einen deutlich höheren Datendurchsatz als ein herkömmlicher Terminaladapter, da er eine vollsynchrone ISDN-Verbindung nutzt. Das Hauptproblem mit ISDN-Routern und Bridges ist, dass die Zusammenarbeit zwischen Geräten verschiedener Hersteller nach wie vor ein Problem ist. Wenn Sie sich auf diese Weise mit einem Internetanbieter verbinden wollen, klären Sie daher vorher ab, welche Anforderungen Ihre Geräte erfüllen müssen. Eine ISDN-Bridge ist eine einfache und wartungsarme Lösung, zwei Netze, beispielsweise Ihr privates Netz und Ihr Firmennetz, miteinander zu verbinden. Da Sie die technische Ausstattung für beide Seiten kaufen müssen, ist sichergestellt, dass die Verbindung funktionieren wird. Um beispielsweise einen privaten Computer oder eine Zweigstelle mit dem Hauptnetzwerk zu verbinden, könnte folgende Konfiguration verwendet werden: Kleines Netzwerk (Privatnetz) 10 base 2 Das Netzwerk basiert auf der Bustopologie mit 10base2 Ethernet (Thinnet). Falls nötig, stellen Sie die Verbindung zwischen Router und Netzwerkkabel mit einem AUI/10BT-Transceiver her. ---Sun Workstation | ---FreeBSD Rechner | ---Windows 95 | Autonomer Router | ISDN BRI Verbindung 10Base2 - Ethernet Wenn Sie nur einen einzelnen Rechner verbinden wollen, können Sie auch ein Twisted-Pair-Kabel (Cross-Over) verwenden, das direkt an den Router angeschlossen wird. Großes Netzwerk (Firmennetz) 10 base T Dieses Netzwerk basiert auf der Sterntopologie und 10baseT Ethernet (Twisted Pair). -------Novell Server | H | | ---Sun | | | U ---FreeBSD | | | ---Windows 95 | B | |___---Autonomer Router | ISDN BRI Verbindung ISDN Netzwerkdiagramm Ein großer Vorteil der meisten Router und Bridges ist es, dass man gleichzeitig zwei unabhängige PPP-Verbindungen zu zwei verschiedenen Zielen aufbauen kann. Diese Funktion bieten die meisten Terminaladapter nicht. Die Ausnahme sind spezielle (meist teure) Modelle, die über zwei getrennte serielle Ports verfügen. Verwechseln Sie dies aber nicht mit Kanalbündelung oder MPP. Dies kann sehr nützlich sein, wenn Sie eine ISDN-Standleitung in Ihrem Büro haben, die sie aufteilen wollen, ohne eine zusätzliche ISDN-Leitung zu installieren. Ein ISDN-Router kann über einen B-Kanal (64 Kbps) eine dedizierte Verbindung ins Internet aufbauen, und gleichzeitig den anderen B-Kanal für eine separate Datenverbindung nutzen. Der zweite B-Kanal kann beispielsweise für ein- oder ausgehende Verbindungen verwendet werden. Sie können ihn aber auch dynamisch mit dem ersten B-Kanal bündeln, um Ihre Bandbreite zu erhöhen. IPX/SPX Eine Ethernet-Bridge kann Daten nicht nur im IP-Protokoll, sondern auch in beliebigen anderen Protokollen versenden. Chern Lee Beigetragen von NAT - Network Address Translation Überblick natd &man.natd.8;, der Network-Address-Translation-Daemon von FreeBSD, akzeptiert ankommende Raw-IP-Pakete, ändert den Sender der Daten in den eigenen Rechner und leitet diese Pakete in den ausgehenden IP-Paketstrom um, indem IP-Adresse und Port des Senders so geändert werden, dass bei einer Antwort der ursprüngliche Sender wieder bestimmt und die Daten an ihn weitergeleitet werden können. Internet connection sharing NAT Der häufigste Grund für die Verwendung von NAT ist die gemeinsame Nutzung einer Internetverbindung. Einrichtung Wegen der begrenzten Verfügbarkeit von IPv4-Adressen und der gestiegenen Anzahl von Breitbandverbindungen über Kabelmodem oder DSL, wird die gemeinsame Nutzung von Internetverbindungen immer wichtiger. Der &man.natd.8;-Daemon ermöglicht die Anbindung von mehreren Rechnern an das Internet unter Nutzung einer gemeinsamen Verbindung und einer IP-Adresse. Häufig soll ein über Kabelmodem oder DSL und eine IP-Adresse an das Internet angebundener Rechner mehreren Rechnern eines lokalen Netzwerks Internetdienste anbieten. Um dies zu ermöglichen, muss der FreeBSD-Rechner als Gateway fungieren. Dazu sind zwei Netzkarten notwendig. Eine für die Verbindung zum Internet, die zweite für die Verbindung mit dem lokalen Netzwerk. Sämtliche Rechner des lokalen Netzwerks sind über einen Hub oder einen Switch miteinander verbunden. Es gibt verschiedene Möglichkeiten, ein LAN über ein &os;-Gateway an das Internet anzubinden. Das folgende Beispiel beschreibt ein Gateway, das zumindest zwei Netzwerkkarten enthält. _______ __________ ________ | | | | | | | Hub |-----| Client B |-----| Router |----- Internet |_______| |__________| |________| | ____|_____ | | | Client A | |__________| Network Layout Eine derartige Netzwerkkonfiguration wird vor allem zur gemeinsamen Nutzung einer Internetverbindung verwendet. Ein Rechner des lokalen Netzwerks (LAN) ist mit dem Internet verbunden. Alle anderen Rechner des lokalen Netzwerks haben nur über diesen Gateway-Rechner Zugriff auf das Internet. Kernel Konfiguration Kernelkonfiguration Folgende Optionen müssen in die Kernelkonfigurationsdatei eingetragen werden: options IPFIREWALL options IPDIVERT Die folgende Optionen können ebenfalls eingetragen werden: options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE In /etc/rc.conf tragen Sie Folgendes ein: gateway_enable="YES" firewall_enable="YES" firewall_type="OPEN" natd_enable="YES" natd_interface="fxp0" natd_flags="" Richtet den Rechner als Gateway ein. Die Ausführung von sysctl net.inet.ip.forwarding=1 hätte den gleichen Effekt. Aktiviert die Firewallregeln in /etc/rc.firewall beim Systemstart. Ein vordefinierter Satz von Firewallregeln, der alle Pakete durchlässt. Sehen Sie sich /etc/rc.firewall an, wenn Sie diese Option verwenden wollen. Die Netzkarte, die Pakete weiterleitet (und mit dem Internet verbunden ist). Zusätzliche Konfigurationsoptionen, die beim Systemstart an &man.natd.8; übergeben werden. Durch die Definition dieser Optionen in /etc/rc.conf wird die Anweisung natd -interface fxp0 beim Systemstart ausgeführt. Dies kann aber auch manuell erfolgen. Falls Sie viele Optionen an &man.natd.8; übergeben müssen, können Sie auch eine Konfigurationsdatei verwenden. Dazu fügen Sie folgende Zeile in /etc/rc.conf ein: natd_flags="-f /etc/natd.conf" Die Datei /etc/natd.conf enthält verschiedene Konfigurationsoptionen, wobei jede Option in einer Zeile steht. Das Beispiel im nächsten Abschnitt würde folgende Konfigurationsdatei verwenden: redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcp 192.168.0.3:80 80 Wenn Sie eine Konfigurationsdatei verwenden wollen, sollten Sie sich die Handbuchseite zu &man.natd.8; durchlesen, insbesondere den Abschnitt über die Nutzung der Option . Jedem Rechner und jeder Schnittstelle des lokalen Netzwerks sollte eine IP-Adresse des im RFC 1918 definierten privaten Adressraums zugewiesen werden. Der Standardgateway entspricht der internen IP-Adresse des natd-Rechners. Im Beispiel werden den LAN-Clients A und B die IP-Adressen 192.168.0.2 und 192.168.0.3 zugewiesen, während die LAN-Netzkarte des natd-Rechners die IP-Adresse 192.168.0.1 erhält. Der natd-Rechner mit der IP-Adresse 192.168.0.1 wird als Standardgateway für die Clients A und B gesetzt. Die externe Netzkarte des natd-Rechners muss für die korrekte Funktion von &man.natd.8; nicht konfiguriert werden. Ports umleiten Wenn Sie &man.natd.8; verwenden, sind Ihre LAN-Clients von aussen nicht erreichbar. LAN-Clients können zwar Verbindungen nach aussen aufbauen, sind aber für ankommende Verbindungen nicht erreichbar. Wenn Sie Internetdienste auf einem LAN-Client anbieten wollen, haben Sie daher ein Problem. Eine einfache Lösung ist die Umleitung von bestimmten Internetports des natd-Rechners auf einen LAN-Client. Beispielsweise könnte ein IRC-Server auf Client A und ein Webserver auf Client B laufen. Damit diese Konfiguration funktioniert, müssen Verbindungen, die auf den Ports 6667 (IRC) und 80 (Web) ankommen, auf die entsprechenden Clients umgeleitet werden. Dazu wird die Option unter Nutzung folgender Syntax an &man.natd.8; übergeben: -redirect_port proto targetIP:targetPORT[-targetPORT] [aliasIP:]aliasPORT[-aliasPORT] [remoteIP[:remotePORT[-remotePORT]]] Für unser Beispiel heißt das: -redirect_port tcp 192.168.0.2:6667 6667 -redirect_port tcp 192.168.0.3:80 80 Dadurch werden die entsprechenden tcp-Ports auf die jeweiligen LAN-Clients umgeleitet. Mit können auch ganze Portbereiche statt einzelner Ports umgeleitet werden. So werden mit tcp 192.168.0.2:2000-3000 2000-3000 alle Verbindungen, die auf den Ports 2000 bis 3000 ankommen, auf die entsprechenden Ports des Clients A umgeleitet. Diese Optionen können während des Betriebs von &man.natd.8; oder über die Option natd_flags="" in /etc/rc.conf gesetzt werden. Eine ausführliche Konfigurationsanleitung finden Sie in &man.natd.8;. Adressen umleiten address redirection Die Umleitung von Adressen ist nützlich, wenn mehrere IP-Adressen verfügbar sind, die aber alle auf einem Rechner verbleiben sollen. In diesem Fall kann &man.natd.8; jedem LAN-Client eine eigene externe IP-Adresse zuweisen. Ausgehende Pakete eines LAN-Clients werden so der entsprechenden externen IP-Adresse des Clients zugeordnet. Ankommender Verkehr für diese IP-Adresse wird automatisch an den entsprechenden LAN-Client weitergeleitet. Diesen Vorgang bezeichnet man auch als statisches NAT. Dem natd-Gatewayrechner könnten beispielsweise die IP-Adressen 128.1.1.1, 128.1.1.2 sowie 128.1.1.3 zugewiesen werden. 128.1.1.1 wird als die externe IP-Adresse des natd-Gatewayrechners verwendet, während 128.1.1.2 und 128.1.1.3 an die LAN-Clients A und B weitergegeben werden. benutzt folgende Syntax: -redirect_address localIP publicIP localIP Die interne IP-Adresse des LAN-Clients publicIP Die externe IP-Adresse des LAN-Clients Für unser Beispiel hieße dies: -redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3 Analog zur Option können Sie diese Argumente auch in der Option natd_flags="" in /etc/rc.conf angeben. Bei der Nutzung der Adressumleitung ist die Portumleitung überflüssig, weil alle für eine bestimmte IP-Adresse ankommenden Daten umgeleitet werden. Die externe IP-Adresse des natd-Rechners muss aktiv sein und der externen Netzkarte zugewiesen sein. Weitere Informationen zu diesem Thema finden Sie in &man.rc.conf.5;. PLIP – Parallel Line IP PLIP Parallel Line IP PLIP PLIP ermöglicht TCP/IP-Verbindungen zwischen zwei Rechnern, die über ihre parallelen Schnittstellen verbunden sind. Eine solche Verbindung ist nützlich, wenn zwei Rechner nicht mit Netzkarten ausgestattet sind, oder wenn eine Installation auf einem Laptop erfolgen soll. Dieser Abschnitt behandelt folgende Themen: Die Herstellung eines parallelen (Laplink-) Kabels Die Verbindung von zwei Computern über PLIP Ein paralleles Kabel herstellen Ein paralleles (Laplink-)Kabel können Sie in fast jedem Computergeschäft kaufen. Falls dies nicht möglich sein sollte, oder Sie einfach wissen wollen, wie ein solches Kabel aufgebaut ist, sollten Sie sich die folgende Tabelle ansehen. Sie beschreibt die Herstellung eines parallelen Netzwerkkabels aus einem gewöhnlichen parallelen Druckerkabel. Die Netzwerk-Verdrahtung eines parallelen Kabels A-Name A-Ende B-Ende Beschreibung Post/Bit DATA0 -ERROR 2 15 15 2 Data 0/0x01 1/0x08 DATA1 +SLCT 3 13 13 3 Data 0/0x02 1/0x10 DATA2 +PE 4 12 12 4 Data 0/0x04 1/0x20 DATA3 -ACK 5 10 10 5 Strobe 0/0x08 1/0x40 DATA4 BUSY 6 11 11 6 Data 0/0x10 1/0x80 GND 18-25 18-25 GND -
PLIP einrichten Als Erstes benötigen Sie ein Laplink-Kabel. Danach müssen Sie sicherstellen, dass beide Computerkernel den &man.lpt.4;-Treiber unterstützen: &prompt.root; grep lp /var/run/dmesg.boot lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port Der Parallelport muss Interrupt-gesteuert sein, daher sollte die Datei /boot/device.hints zwei Zeilen ähnlich den folgenden enthalten: hint.ppc.0.at="isa" hint.ppc.0.irq="7" Danach überprüfen Sie, ob die Kernelkonfigurationsdatei die Zeile device plip enthält, oder ob das Kernelmodul plip.ko geladen wurde. In beiden Fällen sollte die parallele Schnittstelle von &man.ifconfig.8; angezeigt werden: &prompt.root; ifconfig plip0 plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 Verbinden Sie die parallelen Schnittstellen der beiden Computer über das (Laplink-)Kabel. Konfigurieren Sie die Netzwerkparameter auf beiden Rechnern als root. Wenn Sie beispielsweise den Rechner host1 mit dem Rechner host2 verbinden wollen, gehen Sie folgendermaßen vor: host1 <-----> host2 IP Address 10.0.0.1 10.0.0.2 Richten Sie die parallele Schnittstelle von host1 ein, indem Sie Folgendes eingeben: &prompt.root; ifconfig plip0 10.0.0.1 10.0.0.2 Danach richten Sie die parallele Schnittstelle von host2 ein: &prompt.root; ifconfig plip0 10.0.0.2 10.0.0.1 Sie sollten nun über eine funktionierende Verbindung verfügen. Bei Problemen lesen Sie bitte die Hilfeseiten &man.lp.4; sowie &man.lpt.4;. Zusätzlich sollten beide Rechner in /etc/hosts eingetragen werden: 127.0.0.1 localhost.my.domain localhost 10.0.0.1 host1.my.domain host1 10.0.0.2 host2.my.domain Um die Verbindung zu überprüfen, pingen Sie jeden Rechner vom anderen Rechner aus an. Auf host1 gehen Sie dazu folgendermaßen vor: &prompt.root; ifconfig plip0 plip0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 &prompt.root; netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire host2 host1 UH 0 0 plip0 &prompt.root; ping -c 4 host2 PING host2 (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms 64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms --- host2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms
Aaron Kaplan Beigetragen von Tom Rhodes Überarbeitet und erweitert von Brad Davis Erweitert von IPv6 – Internet Protocol Version 6 Bei IPv6 (auch als IPng oder IP next generation bekannt) handelt es sich um die neueste Version des bekannten IP-Protokolls (das auch als IPv4 bezeichnet wird). FreeBSD enthält, genauso wie die anderen frei erhältlichen BSD-Systeme, die IPv6-Referenzimplementation von KAME. FreeBSD erfüllt damit bereits alle für die Nutzung von IPv6 nötigen Voraussetzungen. Dieser Abschnitt konzentriert sich daher auf die Konfiguration und den Betrieb von IPv6. Anfang der 90er Jahre wurde man auf den stark steigenden Verbrauch von IPv4-Adressen aufmerksam. Im Hinblick auf das Wachstums des Internets gab es zwei Hauptsorgen: Die drohende Knappheit von IPv4-Adressen. Dieses Problem konnte durch die Einführung von privaten Adressräumen gemäß RFC1918 (mit Adressen wie 10.0.0.0/8, 172.16.0.0/12, oder 192.168.0.0/16) sowie der Entwicklung von Network Address Translation (NAT) weitestgehend entschärft werden. Die immer größer werdenden Einträge in Router-Tabellen. Dieses Problem ist auch heute noch aktuell. IPv6 ist in der Lage, diese, aber auch viele andere Probleme zu lösen: IPv6 hat einen 128 Bit großen Adressraum. Es sind also theoretisch 340.282.366.920.938.463.463.374.607.431.768.211.456 Adressen verfügbar. In anderen Worten: Für jeden Quadratmeter der Erdoberfläche sind etwa 6,67 * 10^27 IPv6-Adressen verfügbar. Router speichern nur noch Netzwerk-Aggregationsadressen in Ihren Routingtabellen. Dadurch reduziert sich die durchschnittliche Größe einer Routingtabelle auf 8192 Einträge. Weitere nützliche Eigenschaften von IPv6 sind: Die automatische Konfiguration von Adressen, die im RFC2462 beschrieben wird. Anycast-Adressen (eine-von-vielen) Verpflichtende Multicast-Adressen Die Unterstützung von IPsec (IP-Security) Eine vereinfachte Headerstruktur Mobile IP-Adressen Die Umwandlung von IPv4- in IPv6-Adressen Weitere Informationsquellen: Beschreibung von IPv6 auf playground.sun.com KAME.net Hintergrundinformationen zu IPv6-Adressen Es gibt verschiedene Arten von IPv6-Adressen: Unicast-, Anycast- und Multicast-Adressen. Unicast-Adressen sind die herkömlichen Adressen. Ein Paket, das an eine Unicast-Adresse gesendet wird, kommt nur an der Schnittstelle an, die dieser Adresse zugeordnet ist. Anycast-Adressen unterscheiden sich in ihrer Syntax nicht von Unicast-Adressen, sie wählen allerdings aus mehreren Schnittstellen eine Schnittstelle aus. Ein für eine Anycast-Adresse bestimmtes Paket kommt an der nächstgelegenen (entsprechend der Router-Metrik) Schnittstelle an. Anycast-Adressen werden nur von Routern verwendet. Multicast-Adressen bestimmen Gruppen, denen mehrere Schnittstellen angehören. Ein Paket, das an eine Multicast-Adresse geschickt wird, kommt an allen Schnittstellen an, die zur Multicast-Gruppe gehören. Die von IPv4 bekannte Broadcast-Adresse (normalerweise xxx.xxx.xxx.255) wird bei IPv6 durch Multicast-Adressen verwirklicht. Reservierte IPv6-Adressen IPv6-Adresse Präfixlänge Beschreibung Anmerkungen :: 128 Bit nicht festgelegt entspricht 0.0.0.0 bei IPv4 ::1 128 Bit Loopback-Adresse entspricht 127.0.0.1 bei IPv4 ::00:xx:xx:xx:xx 96 Bit Eingebettete IPv4-Adresse Die niedrigen 32 Bit entsprechen der IPv4-Adresse. Wird auch als IPv4-kompatible IPv6-Adresse bezeichnet. ::ff:xx:xx:xx:xx 96 Bit Eine auf IPv6 abgebildete IPv4-Adresse Die niedrigen 32 Bit entsprechen der IPv4-Adresse. Notwendig für Rechner, die IPv6 nicht unterstützen. fe80:: - feb:: 10 Bit link-local Entspricht der Loopback-Adresse bei IPv4 fec0:: - fef:: 10 Bit site-local   ff:: 8 Bit Multicast   001 (im Dualsystem) 3 Bit Globaler Unicast Alle globalen Unicastadressen stammen aus diesem Pool. Die ersten 3 Bit lauten 001.
IPv6-Adressen verstehen Die kanonische Form von IPv6-Adressen lautet x:x:x:x:x:x:x:x, jedes x steht dabei für einen 16-Bit-Hexadezimalwert. Ein Beispiel für eine IPv6-Adresse wäre etwa FEBC:A574:382B:23C1:AA49:4592:4EFE:9982. Eine IPv6-Adresse enthält oft Teilzeichenfolgen aus lauter Nullen. Eine solche Zeichenfolge kann zu :: verkürzt werden. Bis zu drei führende Nullen eines Hexquads können ebenfalls weggelassen werden. fe80::1 entspricht also der Adresse fe80:0000:0000:0000:0000:0000:0000:0001. Eine weitere Möglichkeit ist die Darstellung der letzten 32 Bit in der bekannten (dezimalen) IPv4-Darstellung, bei der Punkte (.) zur Trennung verwendet werden. 2002::10.0.0.1 ist also nur eine andere Schreibweise für die (hexadezimale) kanonische Form 2002:0000:0000:0000:0000:0000:0a00:0001, die wiederum der Adresse 2002::a00:1 entspricht. Sie sollten nun in der Lage sein, die folgende Ausgabe zu verstehen: &prompt.root; ifconfig rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 ether 00:00:21:03:08:e1 media: Ethernet autoselect (100baseTX ) status: active Bei fe80::200:21ff:fe03:8e1%rl0 handelt es sich um eine automatisch konfigurierte link-local-Adresse. Sie wird im Rahmen der automatischen Konfiguration aus der MAC-Adresse erzeugt. Weitere Informationen zum Aufbau von IPv6-Adressen finden Sie im RFC3513. Eine IPv6-Verbindung herstellen Es gibt derzeit drei Möglichkeiten, sich mit anderen IPv6-Rechnern oder Netzwerken zu verbinden: Die Teilnahme am IPv6-Netzwerk Ihres Providers. Wenn Sie daran interessiert sind, wenden Sie sich an Ihren Provider. Die Verwendung eines 6-nach-4-Tunnels (RFC3068). Die Verwendung des Ports /usr/ports/net/freenet6 bei der Einwahl ins Internet. DNS in der IPv6-Welt Ursprünglich gab es zwei verschiedene DNS-Einträge für IPv6. Da A6-Einträge von der IETF für obsolet erklärt wurden, sind AAAA-Einträge nun Standard. Weisen Sie die erhaltene IPv6-Adresse Ihrem Rechnernamen zu, indem Sie den Eintrag MYHOSTNAME AAAA MYIPv6ADDR in Ihre primäre DNS-Zonendatei einfügen. Falls Sie nicht für Ihre DNS-Zone verantwortlich sind, bitten Sie den dafür Zuständigen, diese Änderung durchzuführen. Die aktuellen Versionen von bind (Version 8.3 oder 9) sowie dns/djbdns (bei Verwendung des IPv6-Patches) unterstützen AAAA-Einträge. <filename>/etc/rc.conf</filename> für die Nutzung von IPv6 anpassen Einen Client unter IPv6 einrichten Dieser Abschnitt beschreibt die Konfiguration eines Rechners, der in Ihrem LAN als Client, aber nicht als Router verwendet wird. Um die Schnittstelle während des Systemstarts mit &man.rtsol.8; automatisch einzurichten, fügen Sie folgende Zeile in /etc/rc.conf ein: ipv6_enable="YES" Durch die folgende Zeile weisen Sie Ihrer Schnittstelle fxp0 die statische IP-Adresse 2001:471:1f11:251:290:27ff:fee0:2093 zu: ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093" Um 2001:471:1f11:251::1 als Standardrouter festzulegen, fügen Sie folgende Zeile in /etc/rc.conf ein: ipv6_defaultrouter="2001:471:1f11:251::1" Gateways und Router unter IPv6 einrichten Dieser Abschnitt beschreibt, wie Sie Ihren Rechner mit Hilfe der von Ihrem Tunnel-Anbieter erhaltenen Anweisungen dauerhaft für die Nutzung von IPv6 einrichten. Um den Tunnel beim Systemstart wiederherzustellen, passen Sie /etc/rc.conf wie folgt an: Listen Sie die einzurichtenden Tunnelschnittstellen (hier gif0) auf: gif_interfaces="gif0" Um den lokalen Endpunkt MY_IPv4_ADDR über diese Schnittstelle mit dem entfernten Endpunkt REMOTE_IPv4_ADDR zu verbinden, verwenden Sie folgende Zeile: gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR" Um die Ihnen zugewiesene IPv6-Adresse als Endpunkt Ihres IPv6-Tunnels zu verwenden, fügen Sie folgende Zeile ein: ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR" Nun müssen Sie nur noch die IPv6-Standardroute angeben. Diese legt das andere Ende des IPv6-Tunnels fest. ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR" Einen IPv6-Tunnel einrichten Wenn Ihr Server IPv6-Verkehr zwischen Ihrem Netzwerk und der Außenwelt routen muss, benötigen Sie zusätzlich die folgenden Zeilen in Ihrer /etc/rc.conf: ipv6_gateway_enable="YES" Bekanntmachung von Routen und automatische Rechnerkonfiguration Dieser Abschnitt beschreibt die Einrichtung von &man.rtadvd.8;, das Sie bei der Bekanntmachung der IPv6-Standardroute unterstützt. Um &man.rtadvd.8; zu aktivieren, fügen Sie folgende Zeile in /etc/rc.conf ein: rtadvd_enable="YES" Es ist wichtig, die Schnittstelle anzugeben, über die IPv6-Routen bekanntgemacht werden sollen. Soll &man.rtadvd.8; fxp0 verwenden, ist folgender Eintrag nötig: rtadvd_interfaces="fxp0" Danach erzeugen Sie die Konfigurationsdatei /etc/rtadvd.conf. Dazu ein Beispiel: fxp0:\ :addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether: Ersetzen Sie dabei fxp0 durch die zu verwendende Schnittstelle. Anschließend ersetzen Sie 2001:471:1f11:246:: durch das Präfix der Ihnen zugewiesenen Verbindung. Wenn Sie eine /64-Netzmaske verwenden, müssen Sie keine weiteren Anpassungen vornehmen. Anderenfalls müssen Sie prefixlen# auf den korrekten Wert setzen.
Harti Brandt Beigetragen von ATM - Asynchronous Transfer Mode <foreignphrase>Classical IP over ATM</foreignphrase> als PVC-Verbindung einrichten Classical IP over ATM (CLIP) ist die einfachste Möglichkeit, um IP-Verkehr über ATM (Asynchronous Transfer Mode-Verbindungen zu übertragen. CLIP kann sowohl mit geschalteten Verbindungen (SVCs) als auch mit permanenten Verbindungen (PVCs) verwendet werden. Dieser Abschnitt beschreibt die Einrichtung eines PVC-basierten Netzwerks. Ein vollständig vermaschtes Netzwerk aufbauen Bei einem vollständig vermaschten (fully meshed) Netzwerk ist jeder Rechner über eine dezidierte Verbindung mit jedem anderen Rechner des Netzwerks verbunden. Die Konfiguration ist - vor allem für kleinere Netzwerke - relativ einfach. Unser Beispielnetzwerk besteht aus vier Rechnern, die jeweils über eine ATM-Adapterkarte mit dem ATM-Netzwerk verbunden sind. Als ersten Konfigurationsschritt planen wir die Vergabe von IP-Adressen sowie die anzulegenden ATM-Verbindungen: Rechner IP-Adresse hostA 192.168.173.1 hostB 192.168.173.2 hostC 192.168.173.3 hostD 192.168.173.4 Um ein vollständiges Netz aufzubauen, benötigen wir für jedes Rechnerpaar eine eigene ATM-Verbindung: Rechnerpaar VPI.VCI-Paar hostA - hostB 0.100 hostA - hostC 0.101 hostA - hostD 0.102 hostB - hostC 0.103 hostB - hostD 0.104 hostC - hostD 0.105 Die Werte VPI und VCI an den Verbindungsenden können natürlich unterschiedlich sein. Wir nehmen hier aber an, dass sie gleich sind. Nun müssen wir die ATM-Schnittstellen auf jedem Rechner einrichten: hostA&prompt.root; ifconfig hatm0 192.168.173.1 up hostB&prompt.root; ifconfig hatm0 192.168.173.2 up hostC&prompt.root; ifconfig hatm0 192.168.173.3 up hostD&prompt.root; ifconfig hatm0 192.168.173.4 up Dabei setzen wir voraus, dass hatm0 auf allen Rechnern die ATM-Schnittstelle darstellt. Danach werden, beginnend mit hostA, die PVCs auf den einzelnen Rechnern eingerichtet (Wir nehmen an, dass die PVCs auf den ATM-Switches bereits eingerichet sind. Lesen Sie die entsprechenden Handbücher, wenn Sie einen Switch einrichten müssen.): hostA&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr Statt UBR können auch andere traffic contracts verwendet werden. Voraussetzung ist allerdings, dass diese von Ihrem ATM-Adapter unterstützt werden. Ist dies der Fall, folgen auf den Namen des traffic contracts die entsprechenden Konfigurationsparameter. Weitere Informationen zur Konfiguration von ATM-Adapterkarten erhalten Sie über den Befehl &prompt.root; atmconfig help natm add oder durch das Lesen von &man.atmconfig.8;. Die Konfiguration von ATM-Adaptern kann auch über die Datei /etc/rc.conf erfolgen. Für hostA sähe die Konfiguration so aus: network_interfaces="lo0 hatm0" ifconfig_hatm0="inet 192.168.173.1 up" natm_static_routes="hostB hostC hostD" route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr" route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr" route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr" Mit dem folgenden Befehl lässt sich der derzeitige Status aller CLIP-Routen anzeigen: hostA&prompt.root; atmconfig natm show Tom Rhodes Beigetragen von CARP - Common Access Redundancy Protocol CARP Common Access Redundancy Protocol (CARP) Das Common Access Redundancy Protocol (CARP) erlaubt es, mehreren Rechnern die gleiche IP-Adresse zuzuweisen. Durch ein solches Vorgehen läßt sich beispielsweise die Verfügbarkeit bestimmter Dienste verbessern oder die Last zwischen einzelnen Systemen besser verteilen. Den auf diese Art und Weise konfigurierten Systemen kann zusätzlich eine eigene (im Netzwerk eindeutige) IP-Adresse zugewiesen werden (wie dies auch im folgenden Beispiel erfolgt). Um CARP zu aktivieren, müssen Sie die &os;-Kernelkonfigurationsdatei um die folgende Option erweitern und danach den &os;-Kernel neu bauen: device carp Danach ist CARP auf Ihrem System verfügbar und kann über verschiedene sysctl-Optionen (OIDs) gesteuert werden. Zuerst müssen Sie CARP jedoch mit ifconfig aktivieren: &prompt.root; ifconfig carp0 create Damit Sie dieses Protokoll in Ihrem Netzwerk einsetzen können, muss jede Netzkarte eine eindeutige Identifikationsnummer, die sogenannte VHID (Virtual Host Identification), besitzen, da sich ansonsten die Rechner Ihres Netzwerks nicht voneinander unterscheiden lassen. Die Serververfügbarkeit mit CARP verbessern Wie bereits weiter oben erwähnt wurde, können Sie CARP dazu verwenden, die Verfübarkeit Ihrer Server zu verbessern. Im folgenden Bespiel werden insgesamt drei Server (mit jeweils eigener, eindeutiger IP-Adresse), die alle den gleichen Inhalt anbieten, in einer Round Robin DNS-Konfiguration eingerichtet. Der Backup-Server verfügt über zwei CARP-Schnittstellen (für die beiden IP-Adressen der Content-Server). Tritt bei einem Content-Server ein Problem auf, übernimmt der Backup-Server die IP-Adresse des ausgefallenen Servers. Dadurch sollte die Auswahl eines Servers vom Anwender nicht bemerkt werden. Der Backup-Server muss identisch konfiguriert sein und die gleichen Daten und Dienste anbieten wie das System, das er ersetzen soll. Die beiden Content-Server werden (abgesehen von ihren jeweiligen Hostnamen und VHIDs) identisch konfiguriert und heißen in unserem Beispiel hosta.example.org beziehungsweise hostb.example.org. Damit Sie CARP einsetzen können, müssen Sie als Erstes die Datei rc.conf auf beiden Systemen anpassen. Für das System hosta.example.org nehmen Sie dazu folgende Zeilen in rc.conf auf: hostname="hosta.example.org" ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0" cloned_interfaces="carp0" ifconfig_carp0="vhid 1 pass testpast 192.168.1.50/24" Für das System hostb.example.org benötigen Sie zusätzlich folgende Zeilen in rc.conf: hostname="hostb.example.org" ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0" cloned_interfaces="carp0" ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24" Achten Sie unbedingt darauf, dass die durch die Option an ifconfig übergebenen Passwörter auf beiden Systemen identisch sind, da carp-Geräte nur mit Systemen kommunizieren können, die über ein korrektes Passwort verfügen. Beachten Sie weiters, dass sich die VHIDs der beiden Systeme unterscheiden müssen. Nun richten Sie noch das dritte System, provider.example.org, ein, das aktiviert wird, wenn eines der beiden zuvor konfigurierten Systeme ausfällt. Dieses dritte System benötigt zwei carp-Geräte, um bei Bedarf eines der beiden anderen Systeme ersetzen zu können. Dazu konfigurieren Sie rc.conf analog zur folgenden Beispielkonfiguration: hostname="provider.example.org" ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0" cloned_interfaces="carp0 carp1" ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24" ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24" Durch die beiden carp-Geräte ist es provider.example.org möglich, festzustellen, ob eines der beiden anderen Systeme nicht mehr reagiert. In diesem Fall übernimmt provider.example.org die IP-Adresse des betroffenen Systems. Ist im installierten &os;-Kernel die Option "preemption" aktiviert, kann es sein, dass provider.example.org die übernommene IP-Adresse nicht mehr an den Content-Server zurückgibt (wenn dieser wieder funktioniert). In diesem Fall muss ein Administrator die entsprechende Schnittstelle zurücksetzen. Dazu gibt er auf dem Rechner provider.example.org den folgenden Befehl ein: &prompt.root; ifconfig carp0 down && ifconfig carp0 up Dieser Befehl muss auf das carp-Gerät ausgeführt werden, das dem betroffenen System zugeordnet ist. Damit ist CARP vollständig konfiguriert und der Testbetrieb kann beginnen. Zuvor müssen Sie allerdings noch alle Systeme neu starten (beziehungsweise die Netzwerkkonfiguration auf allen Systemen neu einlesen), um die Einstelllungen zu übernehmen. Für weitere Informtionen lesen Sie bitte die Manualpage &man.carp.4;.
diff --git a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml index 680dcb69ec..33c0173342 100644 --- a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml @@ -1,1170 +1,1214 @@ Christophe Juniet Beigetragen von Martin Heinen Übersetzt von Desktop-Anwendungen Übersicht FreeBSD bietet eine reiche Auswahl an Desktop-Anwendungen, wie Browser und Textverarbeitungen, die als Pakete oder mit der Ports-Sammlung installiert werden. Gerade neue Benutzer erwarten Anwendungen mit einer grafischen Benutzeroberfläche an ihrem Arbeitsplatz. Dieses Kapitel zeigt Ihnen, wie Sie einige der beliebtesten Desktop-Anwendungen mühelos installieren. Wenn Sie Ports installieren, beachten Sie, dass dabei die Quelltexte der Programme übersetzt werden. Abhängig von dem Programm und der Geschwindigkeit Ihrer Maschinen kann das sehr lange dauern. Wenn Ihnen das Übersetzen zu lange dauert, können Sie die meisten Programme der Ports-Sammlung auch als fertige Pakete installieren. Da FreeBSD binär kompatibel zu Linux ist, können Sie zahlreiche für Linux entwickelte Desktop-Anwendungen einsetzen. Bevor Sie allerdings Linux-Anwendungen installieren, sollten Sie das lesen. Wenn Sie nach einem bestimmten Port suchen, zum Beispiel mit &man.whereis.1;, beachten Sie, dass die Namen vieler Programme, die die Linux-Binärkompatibilität benutzen, mit linux- anfangen. Wir gehen im Folgenden davon aus, dass Sie die Linux-Binärkompatibilität aktiviert haben, bevor Sie Linux-Anwendungen installieren. Dieses Kapitel behandelt Anwendungen aus den Bereichen: Browser (Mozilla, Opera, Firefox, Konqueror) Büroanwendungen (KOffice, AbiWord, The GIMP, OpenOffice.org) Dokumentformate(&acrobat.reader;, gv, Xpdf, GQview) Finanzsoftware ( GnuCash, Gnumeric, Abacus) Bevor Sie dieses Kapitel lesen, sollten Sie Software Dritter installieren können () und Linux-Anwendungen installieren können (). Wie Sie Multimedia-Anwendungen einrichten, wird in einem gesonderten Kapitel erklärt. Wie Sie E-Mail einrichten und benutzen, wird in beschrieben. Browser Browser Web FreeBSD besitzt keinen vorinstallierten Browser, stattdessen enthält das www-Verzeichnis der Ports-Sammlung Browser, die Sie installieren können. Wenn Ihnen das Übersetzen der Browser zu lange dauert, bei einigen Browsern dauert das wirklich lange, installieren Sie die Pakete, die es für viele Browser gibt. KDE und GNOME enthalten schon HTML-Browser. Das Einrichten dieser grafischen Benutzeroberflächen ist in beschrieben. Wenn Sie besonders schlanke Browser benötigen, suchen Sie in der Ports-Sammlung nach www/dillo, www/links oder www/w3m. Dieser Abschnitt behandelt die nachstehenden Anwendungen: Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten Mozilla hoch hoch Gtk+ Opera niedrig niedrig Es gibt eine &os;- und eine Linux-Version. Die Linux-Version hängt von der Linux-Kompatibilität (Linux Binary Compatibility) und linux-openmotif ab. Firefox mittel hoch Gtk+ Konqueror mittel hoch KDE-Biliotheken Mozilla Mozilla Mozilla ist ein moderner, stabiler und kompletter Browser, der nach FreeBSD portiert wurde. Er entspricht dem HTML-Standard und verfügt über einen E-Mail-Client und einen Newsreader. Für den Fall, dass Sie einige HTML-Seiten selbst verfassen wollen, enthält der Browser auch einen HTML-Editor. Wenn Sie &netscape; kennen, wird Ihnen vielleicht die Ähnlichkeit mit dem Communicator auffallen. Dies liegt daran, dass die beiden Programme eine gemeinsame Entwicklungsgeschichte haben (und auf der gleichen ursprünglichen Codebasis aufbauen). Auf langsamen Maschinen, deren CPU-Taktfrequenz weniger als 233 MHz beträgt, oder die weniger als 64 MB Speicher besitzen, können Sie Mozilla wegen dessen Ressourcenbedarfs nur eingeschränkt benutzen. Weniger Ressourcen verbraucht der Opera-Browser, der gleich in diesem Kapitel behandelt wird. Für den Fall, dass Sie Mozilla nicht selbst übersetzen wollen, hat das FreeBSD-GNOME-Team schon ein Paket für Sie erstellt, das Sie über das Netz installieren können: &prompt.root; pkg_add -r mozilla Wenn das Paket nicht zur Verfügung steht und Sie genügend Zeit und Plattenplatz haben, können Sie Mozilla mit den nachstehenden Befehlen selbst übersetzen und installieren: &prompt.root; cd /usr/ports/www/mozilla &prompt.root; make install clean Das Erscheinungsbild von Mozilla können Sie mit so genannten Themes oder Gestures beeinflussen. Der Mozilla-Port sorgt für die richtige Installation des Chrome-Themes. Die Installation weiterer Zusatzkomponenten erfordert allerdings root-Rechte. Nachdem Sie die Installation von Mozilla abgeschlossen haben, benötigen Sie die root-Rechte nicht mehr. Starten Sie den Browser dann einfach mit dem Kommando: &prompt.user; mozilla Sie können auch den E-Mail-Client oder den Newsreader direkt starten: &prompt.user; mozilla -mail Firefox Firefox Firefox ist ein auf dem Mozilla-Code basierender Browser. Während es sich bei Mozilla um ein komplettes Anwendungspaket (bestehend aus Browser, E-Mail-Programm, Chatclient und anderem mehr) handelt, konzentriert sich Firefox auf die Aufgabe als Browser, was das Programm kleiner und schneller macht. Das Paket können Sie mit dem nachstehenden Befehl installieren: &prompt.root; pkg_add -r firefox Alternativ können Sie auch die Ports-Sammlung verwenden, um das Programm aus dem Quellcode zu installieren: &prompt.root; cd /usr/ports/www/firefox &prompt.root; make install clean Firefox, Mozilla und das &java;-Plugin Dieser und der nächste Abschnitt gehen davon aus, dass Sie Firefox oder Mozilla bereits installiert haben. Die &os; Foundation hat von Sun Microsystems eine Lizenz erworben, die es erlaubt, &os;-Binärpakete des Java Runtime Environment (&jre;) und des Java Development Kit (&jdk;) zu verteilen. Diese Binärpakete sind auf der Webseite der &os; Foundation erhältlich. Damit Firefox oder Mozilla &java; unterstützen, müssen Sie zuerst den Port java/javavmwrapper installieren. Anschließend laden Sie das Diablo &jre;-Paket von herunter und installieren es mit &man.pkg.add.1;. Danach starten Sie Ihren Browser und geben in der Adresszeile about:plugins ein und bestätigen die Eingabe mit der Enter-Taste. Dadurch wird eine Seite geladen, auf der alle installierten Plugins aufgelistet werden. Auch das &java;-Plugin sollte nun in dieser Liste aufgeführt sein. Sollte dies bei Ihnen nicht der Fall sein, müssen Sie als root noch den folgenden Befehl ausführen: &prompt.root; ln -s /usr/local/diablo-jre1.5.0/plugin/i386/ns7/libjavaplugin_oji.so \ /usr/local/lib/browser_plugins/ Danach starten Sie Ihren Browser neu, um das Plugin zu aktivieren. Firefox, Mozilla und das ¯omedia; &flash;-Plugin Das ¯omedia; &flash;-Plugin ist für &os; nicht verfügbar. Es existiert jedoch ein Software-Layer (ein sogenannter Wrapper), der es erlaubt, die Linux-Version des Plugins unter &os; einzusetzen. Dieser Wrapper unterstützt außerdem das &adobe; &acrobat;-Plugin, das &realplayer;-Plugin und andere mehr. Als erstes installieren Sie den Port www/linuxpluginwrapper. Dieser Port setzt voraus, dass Sie den Port emulators/linux_base bereits installiert haben. Folgen Sie exakt den bei der Installation des Ports gegebenen Anweisungen, um die Datei /etc/libmap.conf korrekt zu konfigurieren, da ansonsten das Plugin später nicht erkannt wird. Beispielkonfigurationen finden Sie im Verzeichnis /usr/local/share/examples/linuxpluginwrapper/. Anschließend installieren Sie den Port www/linux-flashplugin7. Nachdem Sie das Plugin installiert haben, rufen Sie Ihren Browser auf und geben in der Adresszeile about:plugins ein. Diese Eingabe muss mit der Enter-Taste bestätigt werden. Danach wird eine Seite geladen, auf der alle installierten Plugins aufgelistet werden. Sollte das &flash;-Plugin bei Ihnen nicht aufgelistet sein, liegt dies in der Regel an einem fehlenden symbolischen Link. In diesem Fall führen Sie als root die folgenden Befehle aus: &prompt.root; ln -s /usr/local/lib/npapi/linux-flashplugin/libflashplayer.so \ /usr/local/lib/browser_plugins/ &prompt.root; ln -s /usr/local/lib/npapi/linux-flashplugin/flashplayer.xpt \ /usr/local/lib/browser_plugins/ Nach einem Neustart sollte das Plugin nun in der Liste der installierten Plugins auftauchen. Der linuxpluginwrapper funktioniert nur unter der &i386;-Architektur. Opera Opera Opera ist ein schneller, vollwertiger und standardkonformer Browser, der wie Mozilla über einen eingebauten E-Mail- und Newsreader verfügt. Zusätzlich sind ein IRC-Client, ein RSS/Atom-Feeds-Reader sowie weitere Programme enthalten. Dennoch handelt es sich bei Opera weiterhin um ein relativ kleines und sehr schnelles Programmpaket. Sie haben die Wahl zwei Versionen dieses Browsers: Der nativen FreeBSD-Version und der Linux-Version. Wenn Sie das Web mit der FreeBSD-Version von Opera erkunden wollen, installieren Sie das Paket: &prompt.root; pkg_add -r opera Einige FTP-Server haben nicht alle Pakete, Sie können Opera aber über die Ports-Sammlung installieren: &prompt.root; cd /usr/ports/www/opera &prompt.root; make install clean Wenn Sie die Linux-Version des Browsers verwenden wollen, ersetzen Sie in den Beispielen opera durch linux-opera. Wenn Sie Plugins einsetzen wollen, die nur für Linux erhältlich sind, wie das Adobe &acrobat.reader; Plugin, benötigen Sie die Linux-Version. Ansonsten sind die FreeBSD- und Linux-Versionen des Browsers äquivalent. Konqueror Konqueror Konqueror ist Teil von KDE, kann aber außerhalb von KDE benutzt werden, wenn der Port x11/kdebase3 installiert ist. Konqueror ist mehr als nur ein Browser. Sie können das Programm weiters zur Dateiverwaltung und zum Abspielen von Multimedia-Dateien benutzen. Der Port misc/konq-plugins installiert verschiedene Plugins für Konqueror. Konqueror kann &flash;-Seiten darstellen. Wie Sie die &flash;-Unterstützung aktiviern, können Sie unter nachlesen. Büroanwendungen Neue Benutzer suchen oft ein komplettes Office-Paket oder eine leicht zu bedienende Textverarbeitung. Einige Benutzeroberflächen wie KDE enthalten zwar ein Office-Paket, diese werden in der Standardeinstellung unter FreeBSD aber nicht installiert. Unabhängig von der verwendeten Benutzeroberfläche können Sie diverse Office-Pakete aber jederzeit über die Ports-Sammlung installlieren. Dieser Abschnitt behandelt die nachstehenden Anwendungen: Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten KOffice niedrig hoch KDE AbiWord niedrig niedrig Gtk+ oder GNOME The Gimp niedrig hoch Gtk+ OpenOffice.org hoch enorm &jdk; 1.4, Mozilla KOffice KOffice Office-Pakete KOffice Die KDE-Gemeinschaft stellt ein Office-Paket bereit, das auch außerhalb von KDE eingesetzt werden kann. Es besteht aus vier, von anderen Office-Paketen bekannten, Komponenten: KWord ist die Textverarbeitung, KSpread die Tabellenkalkulation, mit KPresenter werden Präsentationen erstellt und Kontour ist ein Zeichenprogramm. Stellen Sie vor der Installation des neusten KOffice sicher, dass Sie eine aktuelle Version von KDE besitzen. Mit dem folgenden Kommando installieren Sie das KOffice-Paket: &prompt.root; pkg_add -r koffice Wenn das Paket nicht zur Verfügung steht, benutzen Sie bitte die Ports-Sammlung. Wenn Sie beispielsweise KOffice für KDE3 installieren wollen, setzen Sie die nachstehendenen Befehle ab: &prompt.root; cd /usr/ports/editors/koffice-kde3 &prompt.root; make install clean AbiWord AbiWord AbiWord ist eine freie Textverarbeitung, die ähnlich wie µsoft; Word ist. Sie können damit Artikel, Briefe, Berichte, Notizen usw. verfassen. Das Programm ist sehr schnell, besitzt viele Funktionen und ist sehr benutzerfreundlich. AbiWord kann viele Dateiformate, unter anderem nicht offene wie .doc von µsoft;, importieren und exportieren. Das AbiWord-Paket installieren Sie wie folgt: &prompt.root; pkg_add -r AbiWord Sollte das Paket nicht zur Verfügung stehen, können Sie das Programm mit der Ports-Sammlung, die zudem aktueller als die Pakete ist, übersetzen. Gehen Sie dazu folgendermaßen vor: &prompt.root; cd /usr/ports/editors/AbiWord &prompt.root; make install clean The GIMP The GIMP The GIMP ist ein sehr ausgereiftes Bildverarbeitungsprogramm mit dem Sie Bilder erstellen oder retuschieren können. Sie können es sowohl als einfaches Zeichenprogramm als auch zum retuschieren von Fotografien benutzen. Das Programm besitzt eine eingebaute Skriptsprache und es existieren sehr viele Plug-Ins. The GIMP kann Bilder in zahlreichen Formaten lesen und speichern und stellt Schnittstellen zu Scannern und grafischen Tabletts zur Verfügung. Sie installieren das Paket mit dem nachstehenden Befehl: &prompt.root; pkg_add -r gimp Benutzen Sie die Ports-Sammlung, wenn Ihr FTP-Server das Paket nicht bereitstellt. Im Verzeichnis graphics finden Sie das Handbuch The Gimp Manual. Sie können alles mit den folgenden Befehlen installieren: &prompt.root; cd /usr/ports/graphics/gimp &prompt.root; make install clean &prompt.root; cd /usr/ports/graphics/gimp-manual-pdf &prompt.root; make install clean Die Entwickler-Version von The GIMP finden Sie im Verzeichnis graphics der Ports-Sammlung. Das Handbuch ist im HTML-Format (graphics/gimp-manual-html) erhältlich. OpenOffice.org OpenOffice.org Office-Pakete OpenOffice.org OpenOffice.org enthält alles, was von einem Office-Paket erwartet wird: Textverarbeitung, Tabellenkalkulation, Präsentation und ein Zeichenprogramm. Die Bedienung gleicht anderen Office-Paketen und das Programm kann zahlreiche Dateiformate importieren und exportieren. Es gibt lokalisierte Versionen mit angepassten Menüs, Rechtschreibkontrollen und Wörterbüchern. Die Textverarbeitung von OpenOffice.org speichert Dateien im XML-Format. Dadurch wird die Verwendbarkeit der Dateien auf anderen Systemen erhöht und die Handhabung der Daten vereinfacht. Die Tabellenkalkulation besitzt eine Makrosprache und eine Schnittstelle zu Datenbanken. OpenOffice.org läuft auf &windows;, &solaris;, Linux, FreeBSD und &macos; X. Weitere Informationen über OpenOffice.org finden Sie auf der OpenOffice.org Website. Spezifische Informationen für FreeBSD finden Sie auf der Webseite FreeBSD OpenOffice.org Porting Team. Von dort können Sie auch direkt das OpenOffice-Paket herunterladen. OpenOffice.org installieren Sie wie folgt: &prompt.root; pkg_add -r openoffice.org Diese Art der Installation sollte mit einer -RELEASE-Version funktionieren. Verwenden Sie eine andere Version, sollten Sie die Internetseite des &os; OpenOffice.org Porting Teams besuchen und das entsprechende Paket herunterladen und über &man.pkg.add.1; installieren, wobei Sie zwischen der aktuellen Version und der Entwicklerversion wählen können. Nachdem das Paket installiert ist, müssen Sie lediglich folgenden Befehl eingeben, um OpenOffice.org zu starten: &prompt.user; openoffice.org Nach dem ersten Start werden Ihnen einige Fragen gestellt. Außerdem wird in Ihrem Heimatverzeichnis der neue Unterordner .openoffice.org2 angelegt. Falls die OpenOffice.org-Pakete nicht zur Verfügung stehen, können Sie immer noch die Ports-Sammlung benutzen. Beachten Sie aber bitte, dass Sie sehr viel Plattenplatz und Zeit benötigen, um die Quellen zu übersetzen. &prompt.root; cd /usr/ports/editors/openoffice-2 &prompt.root; make install clean Wenn Sie ein lokalisierte Version bauen wollen, ersetzen Sie den letzten Befehl durch die folgende Zeile: &prompt.root; make LOCALIZED_LANG=Ihre_Sprache install clean Dabei ersetzen Sie Ihre_Sprache durch den korrekten ISO-Code. Eine Liste der unterstützten Codes enthält die Datei files/Makefile.localized, die sich im Portsverzeichnis befindet. Nachdem die Installation abgeschlossen ist, können Sie OpenOffice.org durch folgenden Befehl starten: &prompt.user; openoffice.org Anzeigen von Dokumenten Einige neuere Dokumentformate, die sich aktuell großer Beliebtheit erfreuen, können Sie sich mit den im Basissystem enthaltenen Programmen und Werkzeugen nicht ansehen. Dieser Abschnitt behandelt Programme, mit denen Sie sich Dokumente in unterschiedlichsten Formaten ansehen können. Die nachstehenden Anwendungen werden behandelt: Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten &acrobat.reader; niedrig niedrig Linux Binary Compatibility gv niedrig niedrig Xaw3d Xpdf niedrig niedrig FreeType GQview niedrig niedrig Gtk+ oder GNOME &acrobat.reader; Acrobat Reader PDF anzeigen Viele Dokumente werden heute im Portable Document Format (PDF) zur Verfügung gestellt. PDF-Dokumente schauen Sie sich am Besten mit dem Programm &acrobat.reader; an, das von Adobe für Linux freigegeben wurde. Da Linux-Programme unter FreeBSD laufen, steht Ihnen das Programm auch hier zur Verfügung. Um &acrobat.reader; 7 über die Ports-Sammlung zu installieren, geben Sie Folgendes ein: &prompt.root; cd /usr/ports/print/acroread7 &prompt.root; make install clean Aufgrund der Lizenzbedinungen ist eine Paketversion leider nicht verfügbar. gv gv PDF anzeigen PostScript anzeigen gv kann &postscript;- und PDF-Dokumente anzeigen. Es stammt von ghostview ab, besitzt aber wegen der Xaw3d-Bibliothek eine schönere Benutzeroberfläche. In gv können Sie viele Operationen durchführen: Sie können die Ausrichtung und die Papiergröße eines Dokuments ändern, das Dokument skalieren oder die Kantenglättung (Anti-Aliasing) aktivieren. Fast jede Operation kann sowohl mit der Tastatur als auch mit der Maus durchgeführt werden. Installieren Sie das gv-Paket wie folgt: &prompt.root; pkg_add -r gv Benutzen Sie die Ports-Sammlung, wenn das Paket nicht zur Verfügung steht: &prompt.root; cd /usr/ports/print/gv &prompt.root; make install clean Xpdf Xpdf PDF anzeigen Ein schlankes und effizientes Programm zum Betrachten von PDF-Dateien ist Xpdf. Es benötigt wenige Ressourcen und ist sehr stabil. Da das Programm die Standard X-Zeichensätze benutzt, ist es nicht auf &motif; oder ein anderes X-Toolkit angewiesen. Das Xpdf-Paket können Sie mit dem folgenden Kommando installieren: &prompt.root; pkg_add -r xpdf Wenn das Paket nicht verfügbar ist, oder Sie lieber die Ports-Sammlung benutzen möchten, gehen Sie wie folgt vor: &prompt.root; cd /usr/ports/graphics/xpdf &prompt.root; make install clean Wenn Sie nach Abschluss der Installation Xpdf starten, öffnen Sie das Menü mit der rechten Maustaste. GQview GQview Mit GQview lassen sich Bilder verwalten. Unter anderem können Sie sich Bilder (auch auf dem ganzen Bildschirm) anschauen, ein externes Werkzeug aufrufen und eine Vorschau (thumbnail) erzeugen. Weiterhin können Sie automatisch ablaufende Präsentationen erstellen und grundlegende Dateioperationen durchführen, Bildersammlungen verwalten und doppelte Bilder aufspüren. GQview ist internationalisiert, das heißt es berücksichtigt die Spracheinstellungen des Systems. Wenn Sie das GQview-Paket installieren wollen, geben Sie das folgende Kommando ein: &prompt.root; pkg_add -r gqview Ist das Paket nicht erhältlich, oder wenn Sie die Ports-Sammlung bevorzugen, setzen Sie die folgenden Kommandos ab: &prompt.root; cd /usr/ports/graphics/gqview &prompt.root; make install clean Finanzsoftware Wenn Sie, warum auch immer, Ihre Finanzen mit einem FreeBSD Arbeitsplatz verwalten wollen, stehen Ihnen verschiedene Anwendungen zur Verfügung. Einige von ihnen unterstützen verbreitete Formate, darunter Dateiformate, die von Quicken oder Excel verwendet werden. Dieser Abschnitt behandelt die folgenden Anwendungen: Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten GnuCash niedrig hoch GNOME Gnumeric niedrig hoch GNOME Abacus niedrig niedrig Tcl/Tk + + + KMyMoney + niedrig + hoch + KDE + GnuCash GnuCash GnuCash ist Teil des GNOME-Projekts, dessen Ziel es ist, leicht zu bedienende und doch leistungsfähige Anwendungen zu erstellen. Mit GnuCash können Sie Ihre Einnahmen und Ausgaben, Ihre Bankkonten und Wertpapiere verwalten. Das Programm ist leicht zu bedienen und genügt dennoch hohen Ansprüchen. GnuCash stellt ein Register, ähnlich dem in einem Scheckheft und ein hierarchisches System von Konten zur Verfügung. Eine Transaktion kann in einzelne Teile aufgespaltet werden. GnuCash kann Quicken-Dateien (QIF) importieren und einbinden. Weiterhin unterstützt das Programm die meisten internationalen Formate für Zeitangaben und Währungen. Die Bedienung des Programms kann durch zahlreiche Tastenkombinationen und dem automatischen Vervollständigen von Eingaben beschleunigt werden. Das GnuCash-Paket installieren Sie wie folgt: &prompt.root; pkg_add -r gnucash Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung: &prompt.root; cd /usr/ports/finance/gnucash &prompt.root; make install clean Gnumeric Gnumeric Tabellenkalkulation Gnumeric Gnumeric ist eine Tabellenkalkulation, die Teil der GNOME Benutzeroberfläche ist. Das Programm kann Eingaben anhand des Zellenformats oder einer Folge von Eingaben vervollständigen. Dateien verbreiteter Formate, wie die von Excel, Lotus 1-2-3 oder Quattro Pro lassen sich importieren. Grafiken erstellt Gnumeric mit dem Programm math/guppi. Gnumeric besitzt viele eingebaute Funktionen und Zellenformate (zum Beispiel die üblich verwendeten, wie Zahl, Währung, Datum oder Zeit). Installieren Sie das Gnumeric-Paket mit dem folgenden Kommando: &prompt.root; pkg_add -r gnumeric Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung: &prompt.root; cd /usr/ports/math/gnumeric &prompt.root; make install clean Abacus Abacus Tabellenkalkulation Abacus Abacus ist eine kleine und leicht zu bedienende Tabellenkalkulation. Die vordefinierten Funktionen stammen aus verschiedenen Bereichen wie der Statistik, der Wirtschaft und der Mathematik. Das Programm kann Dateien im Excel Dateiformat importieren und exportieren sowie Ausgaben in &postscript; erzeugen. Installieren Sie das Abacus-Paket mit dem folgenden Kommando: &prompt.root; pkg_add -r abacus Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung: &prompt.root; cd /usr/ports/deskutils/abacus +&prompt.root; make install clean + + + + KMyMoney + + KMyMoney + + + Tabellenkalkulation + KMyMoney + + + Bei KMyMoney handelt es sich + ein Programm zur Verwaltung der persönlichen Finanzen, das + unter KDE entwickelt wird. KMyMoney hat das Ziel, alle + wichtigen Funktionen zu bieten, die auch von kommerziellen + Programmen zur Verwaltung der persönlichen Finanzen + unterstützt werden. Weiters zählen einfache + Benutzung sowie korrekte doppelte Buchführung zu den + herausragenden Fähigkeiten dieses Programms. KMyMoney + unterstützt den Import von Datendateien im Format + Quicken Interchange Format (QIF), + kann Investionen verfolgen, unterstützt verschiedene + Währungen und bietet umfangreiche Reportmöglichkeiten. + OFX-Import wird über ein separates Plugin realisiert. + + Um KMyMoney über das + &os;-Paketsystem zu installieren, geben Sie Folgendes ein: + + &prompt.root; pkg_add -r kmymoney2 + + Sollte das Paket nicht verfügbar sein, können Sie + das Programm auch über die Ports-Sammlung + installieren: + + &prompt.root; cd /usr/ports/finance/kmymoney2 &prompt.root; make install clean Zusammenfassung FreeBSD wird von Internet Service Providern wegen seiner Schnelligkeit und Stabilität eingesetzt, es ist aber auch zum Einrichten eines Arbeitsplatzes geeignet. Mit tausenden Anwendungen, die als Pakete oder Ports zur Verfügung stehen, können Sie sich einen Arbeitsplatz nach Ihren Wünschen einrichten. Die folgende Aufstellung fasst die in diesem Kapitel besprochenen Anwendungen zusammen: Anwendung Paket-Name Port-Name Mozilla mozilla www/mozilla &netscape; linux-netscape7 www/netscape7 Opera opera www/opera Firefox firefox www/firefox KOffice koffice-kde3 editors/koffice-kde3 AbiWord abiword editors/abiword The GIMP gimp graphics/gimp OpenOffice.org openoffice editors/openoffice-1.1 &acrobat.reader; acroread print/acroread7 gv gv print/gv Xpdf xpdf graphics/xpdf GQview gqview graphics/gqview GnuCash gnucash finance/gnucash Gnumeric gnumeric math/gnumeric Abacus abacus deskutils/abacus diff --git a/de_DE.ISO8859-1/books/handbook/install/chapter.sgml b/de_DE.ISO8859-1/books/handbook/install/chapter.sgml index 1ad4eb750c..65f57b156c 100644 --- a/de_DE.ISO8859-1/books/handbook/install/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/install/chapter.sgml @@ -1,5187 +1,5333 @@ Jim Mock Überarbeitet und teilweise neu geschrieben von Randy Pratt Der Gang durch sysinstall und alle Bildschirmabzüge von Martin Heinen Übersetzt von &os; installieren Übersicht Installation + + Dieses Kapitel wird in der deutschen Version gerade + überarbeitet. Im Zweifelsfall ist es daher ratsam, + das + Original in englischer Sprache zu lesen. Wenn Sie + helfen wollen, dieses Kapitel zu übersetzen, senden Sie + bitte eine E-Mail an die Mailingliste &a.de.translators;. + + &os; wird mit dem textorientierten Programm sysinstall installiert. Distributoren können ein anderes Installationsprogramm verwenden, voreingestellt ist jedoch sysinstall. Dieses Kapitel zeigt Ihnen, wie Sie mithilfe von sysinstall &os; installieren. Dieses Kapitel behandelt folgende Punkte: Das Erzeugen von &os;-Startdisketten. Wie &os; Platten anspricht und aufteilt. Wie sysinstall ausgeführt wird. Die Menüs von sysinstall und die erforderlichen Eingaben in den Menüs. Bevor Sie dieses Kapitel lesen, sollten Sie Die Hardware-Notes der &os;-Release, die Sie installieren wollen, lesen und sicherstellen, dass Ihre Hardware unterstützt wird. Diese Installationsanleitung gilt für Rechner mit &i386;-Architektur (PC-kompatible Rechner). Abweichende Anweisungen für andere Plattformen (beispielsweise Alpha) werden wo notwendig gegeben. Obwohl diese Anleitung so aktuell wie möglich ist, kann das Installationsverfahren von dem hier gezeigten geringfügig abweichen. Legen Sie bitte daher diese Anleitung nicht wortwörtlich aus, sondern lassen Sie sich von diesem Kapitel durch den Installationsprozess leiten. Hardware-Anforderungen Minimalkonfiguration Die zur Installation von &os; erforderliche Minimalkonfiguration hängt von der zu installierenden &os;-Version sowie von der Hardware-Architektur ab. Informationen zur jeweiligen Minimalkonfiguration finden Sie in Installation Notes auf der Unterseite Release Information der &os;-Internetseiten. Die folgenden Abschnitte fassen diese Informationen zusammen. Je nachdem, wie Sie &os; installieren, benötigen Sie eventuell auch ein Diskettenlaufwerk, ein unterstütztes CD-ROM-Laufwerk, oder auch eine Netzwerkkarte. des Handbuchs enthält weitere Informationen zu den verschiedenen Installationsarten. Die i386- und pc98-Architektur Sowohl &os;/i386 als auch &os;/pc98 benötigen jeweils mindestens einen 486-Prozessor sowie mindestens 24 MB RAM. Außerdem benötigen Sie für eine Minimalinstallation mindestens 150 MB freien Platz auf Ihrer Festplatte. In den meisten derartigen Konfigurationen ist es besser, für mehr RAM und mehr Plattenplatz zu sorgen, statt einen schnelleren Prozessor einzubauen. Die Alpha-Architektur + Alpha + Um &os;/alpha zu installieren, benötigen Sie eine unterstützte Plattorm (lesen Sie dazu auch des Handbuchs) sowie eine seperate Festplatte für die &os;-Installation. Es ist nicht derzeit möglich, die Platte mit einem weiteren Betriebssystem zu teilen. Diese seperate Platte muss an einen SCSI-Controller angeschlossen sein, der von der SRM-Firmware unterstützt wird. Alternativ können Sie auch eine IDE-Platte verwenden, wenn Ihr SRM das Starten von IDE-Platten unterstützt. + ARC + Alpha BIOS + SRM + Für die &os;-Installation benötigen Sie die SRM-Konsolen-Firmware für Ihre Plattform. Manchmal ist es möglich, zwischen der AlphaBIOS-Firmware (auch ARC genannt) und SRM zu wechseln. Ist dies bei Ihnen nicht möglich, müssen Sie sich die neue Firmware von der Internetseite Ihres Herstellers herunterladen. Die amd64-Architektur &os;/amd64 benötigt für den Betrieb mindestens einen AMD Athlon 64-, AMD Athlon 64-FX-, oder einen AMD Opteron-Prozessor. Wenn Sie einen auf dem Chipsatz nVidia nForce3 Pro-150 basierenden Rechner haben, müssen Sie im BIOS das IO-APIC deaktivieren. Erlaubt ihr BIOS dies nicht, müssen Sie stattdessen ACPI deaktivieren. Der Grund dafür sind Fehler im Pro-150-Chipsatz, die bis jetzt nicht behoben werden konnten. Die &sparc64;-Architektur Um &os;/&sparc64; zu installieren, benötigen Sie eine unterstützte Plattform (lesen Sie dazu auch des Handbuchs). Sie benötigen außerdem eine seperate Festplatte, wenn Sie &os;/&sparc64; installieren wollen, da es derzeit leider noch nicht möglich ist, die Platte mit einem weiteren Betriebssystem zu teilen. Unterstützte Hardware Die Hardware-Notes, die mit jedem &os;-Release ausgeliefert werden, enthalten eine Liste lauffähiger Hardware. Die Hardware-Notes befinden sich üblicherweise in der Datei HARDWARE.TXT im Wurzelverzeichnis der Distribution (CD-ROM oder FTP). Sie können die Hardware-Notes außerdem im Dokumentationsmenü von sysinstall oder auf der Webseite Release Information lesen. Vor der Installation Erstellen Sie eine Geräteliste Bevor Sie &os; installieren, erfassen Sie die Komponenten Ihres Rechners. Die &os;-Installation wird die Komponenten (Festplatten, Netzwerkkarten, CD-ROM-Laufwerke) zusammen mit der Modellbezeichnung und des Herstellers anzeigen. &os; wird auch versuchen, die richtige Konfiguration der Geräte zu ermitteln. Dazu gehören die benutzten Interrupts (IRQ) und IO-Ports. Wegen der Unwägbarkeiten von PC-Hardware kann die Konfiguration der Geräte allerdings fehlschlagen. In diesem Fall müssen Sie die von &os; ermittelte Konfiguration korrigieren. Wenn Sie schon ein anderes Betriebssystem, wie &windows; oder Linux installiert haben, können Sie die Hardware-Konfiguration mit den Mitteln dieses Betriebssystems bestimmen. Wenn Sie nicht sicher sind, welche Einstellungen eine Erweiterungskarte besitzt, sehen Sie auf der Karte selbst nach. Manchmal sind die Einstellungen dort aufgedruckt. Gebräuchliche IRQs sind 3, 5 und 7. Die Adressen von IO-Ports werden normalerweise hexadezimal, zum Beispiel 0x330, angegeben. Halten Sie die Gerätekonfiguration vor der Installation in einer Tabelle wie der nachstehenden fest: Gerätekonfiguration Gerät IRQ IO-Ports Anmerkung erste Festplatte - - 40 GB, Seagate, erster IDE-Master CD-ROM - - erster IDE-Slave zweite Festplatte - - 20 GB, IBM, zweiter IDE-Master erster IDE-Controller 14 0x1f0 Netzwerkkarte - - &intel; 10/100 Modem - - &tm.3com; 56K Faxmodem, an COM1
Nachdem Sie wissen, über welche Hardware Ihr Rechner verfügt, müssen Sie diese Informationen mit den Hardwareanforderungen der zu installierenden &os;-Version abgleichen.
Sichern Sie Ihre Daten Wenn der Rechner, auf dem Sie &os; installieren wollen, wichtige Daten enthält, sichern Sie bitte diese Daten. Prüfen Sie auch, dass Sie die Daten aus der Sicherung wiederherstellen können, bevor Sie &os; installieren. Die &os;-Installation fragt zwar nach, bevor Sie Daten auf Ihre Festplatte schreibt, Ihre Daten sind allerdings unwiderruflich verloren, wenn der Installationsvorgang einmal angelaufen ist. Den Installationsort von &os; festlegen Wenn Sie die gesamte Festplatte für &os; verwenden wollen, müssen Sie sich an dieser Stelle keine weiteren Gedanken machen – lesen Sie bitte im nächsten Abschnitt weiter. Wenn Sie allerdings &os; neben anderen Betriebssystemen betreiben wollen, müssen Sie wissen, wie Daten auf einer Festplatte abgelegt werden und welche Auswirkungen dies hat. Platteneinteilung von &i386;-Systemen Eine PC-Festplatte wird in einzelne Bereiche unterteilt, die Partitionen heißen. &os; verwendet intern ebenfalls Partitionen. Um Verwechslungen und Unklarheiten zu vermeiden, werden diese Plattenbereiche unter &os; als Slices bezeichnet. So verwendet beispielsweise das Werkzeug fdisk den Begriff Slices, um sich auf PC-Partitionen zu beziehen. Auf einer PC-Festplatte können maximal vier Partitionen, die primäre Partitionen genannt werden, angelegt werden. Eine erweiterte Partition hebt diese Beschränkung auf. Eine Festplatte kann nur eine erweiterte Partition enthalten, die wiederum weitere so genannte logische Partitionen enthalten kann. Jede Partition besitzt eine Partitions-ID – eine Zahl, die den Typ der Partition festlegt. &os;-Partitionen tragen die Partitions-ID 165. Üblicherweise kennzeichnen Betriebssysteme Partitionen in einer besonderen Art und Weise. Beispielsweise werden jeder primären und logischen Partition unter DOS und dem verwandten &windows; Laufwerksbuchstaben beginnend mit C: zugewiesen. &os; muss auf einer primären Partition installiert werden. In dieser Partition hält &os; alle Daten einschließlich der Dateien, die Sie anlegen. Verfügt das System über mehrere Festplatten, können Sie auf allen oder einigen Platten eine &os;-Partition einrichten. Zur Installation von &os; benötigen Sie eine freie Partition: Dies kann eine extra für die Installation eingerichtete Partition sein oder eine existierende Partition, die nicht mehr benötigte Daten enthält. Wenn auf allen Platten bereits sämtliche Partitionen benutzt werden, müssen Sie eine der Partitionen für &os; frei machen. Benutzen Sie dazu die Werkzeuge des eingesetzten Betriebssystems (fdisk unter DOS oder &windows;). Verfügt das System über eine freie Partition, benutzen Sie diese Partition. Es kann allerdings sein, dass Sie eine oder mehrere der vorhandenen Partitionen vorher verkleinern müssen. Eine minimale &os;-Installation benötigt nur 100 MB Plattenplatz. Diese Installation ist allerdings sehr begrenzt und lässt wenig Platz für Ihre eigenen Dateien. Realistischer sind 250 MB für &os; ohne graphische Benutzeroberfläche und 350 MB für &os; mit einer graphischen Benutzeroberfläche. Sie benötigen weiteren Platz für die Installation zusätzlicher Software. Um die Partitionen zu verkleinern, können Sie beispielsweise das kommerzielle &partitionmagic; oder das freie GParted benutzen. Alternativ enthält das Verzeichnis tools der CD-ROM für diesen Zweck bereits die freien Werkzeuge FIPS und PResizer. Die Dokumentation zu beiden Werkzeugen befindet sich ebenfalls in diesem Verzeichnis. FIPS und PResizer können nur die Größen von FAT16- und FAT32-Partitionen verändern, während GParted und &partitionmagic; auch NTFS-Partitionen verändern - können. + können. GParted ist auf + vielen Linux-Live-CDs, beispielsweise der SystemRescueCD, + verfügbar. + + Bei der Veränderung von µsoft; Vista-Partionen + kommt es manchmal zu Problemen. In einem solchen Fall ist es + von Vorteil, wenn Sie eine Vista-Installations-CD zur + Verfügung haben. Wie bei jeder Änderung an Ihrer + Festplatte sollten Sie auch hier zuerst ein aktuelles Backup + anlegen. Der falsche Gebrauch dieser Werkzeuge kann Daten auf der Festplatte löschen. Vor dem Einsatz dieser Werkzeuge stellen Sie bitte sicher, dass Sie frische, funktionierende Datensicherungen besitzen. Eine bestehende Partition verwenden Nehmen wir an, Sie haben einen Rechner mit einer 4 GB Festplatte auf der schon eine Version von &windows; installiert ist. Weiterhin haben Sie die Platte in zwei Laufwerke C: und D: unterteilt, die jeweils 2 GB groß sind. Auf C: wird 1 GB benutzt und 0,5 GB von Laufwerk D: werden benutzt. Sie haben also eine Festplatte mit zwei Partitionen und könnten alle Daten von Laufwerk D: auf das Laufwerk C: kopieren. Damit wäre die zweite Partition für &os; frei. Eine bestehende Partition verkleinern Nehmen wir an, Sie haben einen Rechner mit einer 4 GB Festplatte auf der schon eine Version von &windows; installiert ist. Während der Installation von &windows; haben sie eine große Partition C: angelegt, die 4 GB groß ist. Von den 4 GB werden 1,5 GB benutzt und Sie wollen 2 GB für &os; verwenden. Sie haben zwei Möglichkeiten, &os; zu installieren: Sichern Sie die Daten der &windows;-Partition und installieren Sie &windows; erneut auf einer 2 GB großen Partition. Verkleinern Sie die &windows;-Partition mit einem der oben aufgeführten Werkzeuge. Platteneinteilung von Alpha-Systemen Alpha Auf einer Alpha müssen Sie &os; auf einer eigenen Festplatte installieren. Zurzeit können Sie diese Festplatte nicht mit einem anderen Betriebssystem zusammen benutzen. Abhängig von der Alpha-Maschine, die Sie besitzen, können Sie eine SCSI- oder eine IDE-Festplatte verwenden; Voraussetzung ist, dass Sie das System von der gewählten Platte starten können. Entsprechend den Konventionen der Handbücher von Digital/Compaq werden Eingaben im SRM in Großbuchstaben dargestellt. Der SRM beachtet Groß- und Kleinschreibung nicht. Das SRM-Kommando SHOW DEVICE zeigt die Art und die Namen der Laufwerke des Systems an. Geben Sie das Kommando an der SRM-Eingabeaufforderung ein: >>>SHOW DEVICE dka0.0.0.4.0 DKA0 TOSHIBA CD-ROM XM-57 3476 dkc0.0.0.1009.0 DKC0 RZ1BB-BS 0658 dkc100.1.0.1009.0 DKC100 SEAGATE ST34501W 0015 dva0.0.0.0.1 DVA0 ewa0.0.0.3.0 EWA0 00-00-F8-75-6D-01 pkc0.7.0.1009.0 PKC0 SCSI Bus ID 7 5.27 pqa0.0.0.4.0 PQA0 PCI EIDE pqb0.0.1.4.0 PQB0 PCI EIDE Die Ausgabe stammt von einer Digital Personal Workstation 433au und zeigt drei an das System angeschlossene Laufwerke. Das erste Laufwerk ist ein CD-ROM mit dem Namen DKA0, die anderen beiden sind Festplatten mit den Namen DKC0 und DKC100. Laufwerke mit Namen wie DKx sind SCSI-Laufwerke. Der Name DKA100 zeigt ein SCSI-Laufwerk mit der SCSI-ID 1 auf dem ersten SCSI-Bus (A) an. DKC300 zeigt ein SCSI-Laufwerk mit der SCSI-ID 3 auf dem dritten SCSI-Bus (C) an. SCSI Host-Bus-Adapter werden mit dem Namen PKx bezeichnet. Wie in der Ausgabe von SHOW DEVICE gezeigt, werden SCSI-CD-ROM-Laufwerke wie andere SCSI-Festplatten behandelt. IDE-Laufwerke werden mit DQx bezeichnet, der dazugehörige IDE-Controller heißt PQx. Netzwerkparameter ermitteln Wird während der Installation ein Netzwerk benötigt (weil Sie über FTP oder von einem NFS-Server installieren wollen), müssen Sie die Konfiguration des Netzwerks kennen. Während der Installation werden Netzwerkparameter abgefragt, damit sich &os; mit dem Netzwerk verbinden und die Installation abschließen kann. Verbindung über Ethernet oder ein Kabel/DSL-Modem Wenn Sie sich mit einem Ethernet verbinden oder eine Internet-Verbindung mit einem Ethernet-Adapter über Kabel oder DSL herstellen, benötigen Sie die nachstehenden Daten: IP-Adresse IP-Adresse des Default-Gateways Hostname IP-Adressen der DNS-Server Subnetzmaske Wenn Sie die Daten nicht besitzen, fragen Sie bitte Ihren Systemadministrator oder Ihren Service-Provider. Können die Daten über DHCP bezogen werden, merken Sie sich diese Tatsache. Verbindung über ein Modem Auch wenn Sie sich mit einem normalen Modem bei einem ISP einwählen, können Sie &os; aus dem Internet installieren. Die Installation über ein Modem dauert nur sehr lange. Sie benötigen die nachstehenden Daten: Die Telefonnummer des ISPs. Die COM-Schnittstelle, an der das Modem angeschlossen ist. Den Benutzernamen und das Passwort für Ihr Konto. Lesen Sie die &os;-Errata Auch wenn das &os;-Project bemüht ist, ein Release so stabil wie möglich herzustellen, treten ab und an Fehler auf. In seltenen Fällen betrifft ein Fehler die Installations-Prozedur. Die Fehler und deren Behebungen werden in den &os;-Errata festgehalten. Lesen Sie bitte die Errata bevor Sie &os; installieren, damit Sie nicht in frisch entdeckte Probleme laufen. Dokumentation zu jedem Release, inklusive der Errata zu jedem Release, finden Sie im Release-Abschnitt des FreeBSD Webauftritts.. Die Installationsdateien beschaffen &os; kann von Dateien aus irgendeiner der nachstehenden Quellen installiert werden: Lokale Medien von einer CD-ROM oder einer DVD von einer DOS-Partition auf demselben Rechner von einem SCSI- oder QIC-Bandlaufwerk von Disketten Netzwerk von einem FTP-Server, wenn erforderlich auch durch eine Firewall oder durch einen HTTP-Proxy von einem NFS-Server über eine feste serielle oder eine feste parallele Verbindung Wenn Sie eine &os;-CD oder &os;-DVD gekauft haben, besitzen Sie schon alles, was Sie zur Installation benötigen. Lesen Sie bitte im nächsten Abschnitt () weiter. Wenn Sie sich die &os;-Installationsdateien noch nicht besorgt haben, lesen Sie bitte zuerst den . Dort werden die notwendigen Vorbereitungen für eine Installation von den eben genannten Medien beschrieben. Wenn Sie den Abschnitt durchgearbeitet haben, lesen Sie bitte in weiter. Das Startmedium vorbereiten Um &os; zu installieren, müssen Sie Ihren Rechner mit einem speziellen Startmedium hochfahren, das die Installationsroutine startet. Sie können das Installationsprogramm nicht unter einem anderen Betriebssystem ausführen. Ein Rechner startet normalerweise das auf der Festplatte installierte Betriebssystem, er kann aber auch von Disketten gestartet werden. Heutige Rechner können ebenfalls mit einer CD-ROM gestartet werden. Wenn Sie eine &os; CD-ROM oder DVD besitzen (gekauft oder selbst erstellt) und Ihr Rechner von CD-ROM oder DVD starten kann (üblicherweise können Sie das mit der BIOS-Option einstellen), können Sie diesen Abschnitt überspringen. Eine &os; CD-ROM oder DVD lässt sich direkt starten; Sie können damit &os; ohne weitere Vorbereitungen installieren. Um Startdisketten zu erzeugen, benutzen Sie die nachstehende Anleitung: Abbilder der Startdisketten besorgen Die Abbilder Startdisketten befinden sich auf dem Installationsmedium im Verzeichnis floppies/; sie können auch aus dem Internet heruntergeladen werden: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/<arch>/<version>-RELEASE/floppies/. Ersetzen Sie <arch> und <version> durch die passende Architektur und die passende Version. Beispielsweise stehen die Startdisketten von &os; &rel.current;-RELEASE für &i386; unter . Die Abbilder besitzen die Dateinamenerweiterung .flp. Im Verzeichnis floppies/ befinden sich verschiedene Abbilder; welches Sie benutzen, hängt von der zu installierenden &os;-Version und in einigen Fällen vom Zielrechner ab. In den meisten Fällen werden Sie vier Disketten benötigen: boot.flp, kern1.flp, kern2.flp sowie kern3.flp. Lesen Sie bitte die Datei README.TXT im Verzeichnis floppies/, sie enthält aktuelle Informationen zu den Abbildern. Wenn Sie die Abbilder aus dem Internet herunterladen, benutzen Sie bitte den Binärmodus des FTP-Programms. Einige Web-Browser verwenden den Textmodus (oder ASCII-Modus), was dazu führt, dass sich die erstellten Disketten nicht starten lassen. Die Disketten vorbereiten Pro Abbild benötigen Sie eine Diskette. Es ist wichtig, dass die verwendeten Disketten fehlerfrei sind. Sie können dies sicherstellen, indem Sie die Disketten selbst formatieren, verlassen Sie sich bitte nicht auf vorformatierte Disketten. Das Formatierprogramm von &windows; zeigt fehlerhafte Blöcke nicht an, es markiert die Blöcke einfach als fehlerhaft und ignoriert sie dann. Benutzen Sie neue Disketten, wenn Sie diese Installationsart verwenden. Wenn Sie &os; installieren und das Installationsprogramm abstürzt, einfriert oder sich merkwürdig verhält, sind oft fehlerbehaftete Disketten die Ursache. Schreiben Sie die Abbilder auf neue Disketten und versuchen Sie, noch mal zu installieren. Die Abbilder auf Disketten schreiben Die .flp-Dateien sind keine normalen Dateien, die Sie auf eine Diskette kopieren. Sie können die Abbilder nicht von einem Laufwerk auf ein anderes Laufwerk kopieren. Die Abbilder werden mit einem speziellen Werkzeug direkt auf die Diskette geschrieben. DOS Wenn Sie die Startdisketten unter &ms-dos; oder &windows; erstellen, können Sie das mitgelieferte Werkzeug fdimage verwenden. Wenn Sie die Abbilder auf der CD-ROM verwenden und das CD-ROM-Laufwerk den Laufwerksbuchstaben E: besitzt, führen Sie den nachstehenden Befehl aus: E:\> tools\fdimage floppies\boot.flp A: Führen Sie das Kommando für jede .flp-Datei aus. Wechseln Sie bitte jedes Mal die Diskette und beschriften Sie die Diskette mit dem Namen der kopierten Datei. Falls Sie die Abbilder an anderer Stelle liegen haben, passen Sie bitte die Kommandozeile an. Wenn Sie keine CD-ROM besitzen, können Sie fdimage aus dem Verzeichnis tools des &os;-FTP-Servers herunterladen. Wenn Sie Startdisketten auf einem &unix; System (zum Beispiel einem anderen &os; System) erstellen, schreiben Sie die Abbilder mit dem Befehl &man.dd.1; direkt auf die Disketten. Auf einem &os;-System lautet die Kommandozeile: &prompt.root; dd if=boot.flp of=/dev/fd0 Unter &os; spricht /dev/fd0 das erste Diskettenlaufwerk an (das Laufwerk A:), /dev/fd1 spricht das Laufwerk B: an. Andere &unix; Varianten verwenden unter Umständen andere Gerätenamen, die in der Dokumentation des jeweiligen Systems beschrieben sind. Nun ist alles für die &os;-Installation vorbereitet.
Die Installation starten Die Installationsprozedur lässt die Daten auf Ihren Laufwerken solange unverändert bis die nachstehende Meldung erscheint: Last Chance: Are you SURE you want continue the installation? If you're running this on a disk with data you wish to save then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding! We can take no responsibility for lost disk contents! Vor dieser Meldung kann die Installationsprozedur jederzeit abgebrochen werden, ohne die Daten auf der Festplatte zu verändern. Wenn Sie meinen, etwas falsch konfiguriert zu haben, können Sie vor diesem Zeitpunkt einfach den Rechner ausschalten. Der Systemstart Systemstart von &i386;-Systemen Schalten Sie zunächst Ihren Rechner aus. Schalten Sie den Rechner ein. Während des Starts sollte angezeigt werden, wie Sie das Systemeinstellungsmenü (oder BIOS) erreichen. Meist drücken Sie dazu die Tasten F2, F10, Del oder Alt S . Benutzen Sie die angezeigte Tastenkombination. Viele Rechner zeigen beim Systemstart eine Grafik an. Typischerweise können Sie die Grafik mit der Taste Esc entfernen und so die angezeigten Meldungen lesen. Suchen Sie Option, die einstellt von welchem Gerät der Rechner startet. Normalerweise wird die Option genannt und zeigt eine Geräteliste, beispielsweise Floppy, CD-ROM, First Hard Disk an. Wenn Sie Startdisketten erstellt haben, wählen Sie Floppy aus, wenn Sie von CD-ROM starten, stellen Sie sicher, dass die CD-ROM ausgewählt ist. Wenn Sie nicht sicher sind, lesen Sie bitte im Handbuch des Rechners oder im Handbuch der Systemplatine nach. Stellen Sie das gewünschte Startmedium ein und sichern Sie die Einstellungen. Der Rechner sollte dann neu starten. Wenn Sie, wie in beschrieben, Startdisketten vorbereitet haben, benötigen Sie nun die erste Diskette, die boot.flp enthält. Legen Sie diese Diskette in das Diskettenlaufwerk ein. Wenn Sie den Rechner von einer CD-ROM starten, legen Sie die CD-ROM so früh wie möglich in das Laufwerk ein. Wenn Ihr Rechner wie normal startet und das existierende Betriebssystem lädt, kann das folgende Ursachen haben: Das Startmedium (Diskette, CD-ROM) ist nicht schnell genug eingelegt worden. Belassen Sie das Startmedium im Laufwerk und starten Sie Ihren Rechner neu. Die BIOS-Einstellungen sind falsch vorgenommen worden. Wiederholen Sie diesen Schritt, bis Sie die richtige Einstellung gefunden haben. Das verwendete BIOS kann nicht von dem gewünschten Medium starten. &os; startet jetzt. Wenn Sie von einer CD-ROM starten, sehen Sie die folgenden Meldungen (Versionsangaben entfernt): Booting from CD-Rom... CD Loader 1.2 Building the boot loader arguments Looking up /BOOT/LOADER... Found Relocating the loader and the BTX Starting the BTX loader BTX loader 1.00 BTX version is 1.01 Console: internal video/keyboard BIOS CD is cd0 BIOS drive C: is disk0 BIOS drive D: is disk1 BIOS 639kB/261120kB available memory FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d] \ Wenn Sie mit Startdisketten hochfahren, sehen Sie folgende Meldungen (Versionsangaben entfernt): Booting from Floppy... Uncompressing ... done BTX loader 1.00 BTX version is 1.01 Console: internal video/keyboard BIOS drive A: is disk0 BIOS drive C: is disk1 BIOS 639kB/261120kB available memory FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /kernel text=0x277391 data=0x3268c+0x332a8 | Insert disk labelled "Kernel floppy 1" and press any key... Folgen Sie der Anweisung und entfernen Sie die boot.flp-Diskette, anschließend legen Sie die kern1.flp-Diskette ein und drücken Enter. Starten Sie das System mit der ersten Diskette und legen Sie, wenn Sie dazu aufgefordert werden, die anderen Disketten ein. Unabhängig davon, ob Sie von Disketten oder von CD-ROM gestartet haben, erscheint danach das &os; Bootloader-Menü:
&os; Boot Loader Menu
Warten Sie entweder zehn Sekunden oder drücken Sie Enter.
Systemstart von Alpha-Systemen Alpha Schalten Sie zunächst Ihren Rechner aus. Schalten Sie den Rechner ein und warten Sie auf die Eingabeaufforderung des Boot-Monitors. Wenn Sie, wie in beschrieben, Startdisketten vorbereitet haben, benötigen Sie nun die erste Diskette, die boot.flp enthält. Legen Sie diese Diskette in das Diskettenlaufwerk ein. Das nachstehende Kommando startet den Rechner von der Diskette (falls nötig, passen Sie den Gerätenamen der Diskette an): >>>BOOT DVA0 -FLAGS '' -FILE '' Wenn Sie den Rechner von einer CD-ROM starten, legen Sie die CD-ROM in das Laufwerk ein und führen das folgende Kommando aus (wenn nötig, passen Sie den Gerätenamen des CD-ROM-Laufwerks an): >>>BOOT DKA0 -FLAGS '' -FILE '' &os; wird jetzt starten. Wenn Sie den Rechner mit einer Diskette gestartet haben, wird irgendwann die nachstehende Meldung erscheinen: Insert disk labelled "Kernel floppy 1" and press any key... Folgen Sie der Anweisung und entfernen Sie die boot.flp-Diskette, anschließend legen Sie die kern1.flp-Diskette ein und drücken Enter. Unabhängig davon, ob Sie von Disketten oder von CD-ROM gestartet haben, wird folgende Meldung erscheinen: Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel] in 9 seconds... _ Warten Sie entweder zehn Sekunden oder drücken Sie Enter, danach erscheint das Kernelkonfigurationsmenü. + + + Systemstart bei &sparc64;-Systemen + + Die meisten &sparc64;-Systeme sind so konfiguriert, dass sie + automatisch von der Festplatte starten. Um &os; auf einem + solchen System zu installieren, müssen Sie das System aber + über das Netzwerk oder von einer CD-ROM starten. Daher + müssen Sie den Bootprozess unterbrechen und das System + über das PROM (OpenFirmware) starten. + + Dazu starten Sie Ihr System neu und warten, bis die + Startmeldung erscheint. Der genaue Wortlaut hängt vom + eingesetzten Modell ab, die Nachricht sollte aber ähnlich + der folgenden aussehen: + + Sun Blade 100 (UltraSPARC-IIe), Keyboard Present +Copyright 1998-2001 Sun Microsystems, Inc. All rights reserved. +OpenBoot 4.2, 128 MB memory installed, Serial #51090132. +Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4. + + Um den Startvorgang zu unterbrechen, drücken Sie nun + die Tastenkombination L1A + oder StopA. + Verwenden Sie eine serielle Verbindung, senden Sie das Signal + BREAK über die serielle Konsole + (etwa durch die Eingabe von ~# in den + Programmen &man.tip.1; oder &man.cu.1;). In beiden Fällen + landen Sie anschließend am PROM-Prompt: + + + + + + + + ok +ok {0} + + + + Der auf Einprozessorsystemen verwendete Prompt. + + + + Der Prompt auf Mehrprozessorsystemen. Die Zahl steht + dabei für die Anzahl der vorhandenen Prozessoren. + + + + + Nun legen Sie Ihre CD-ROM in das Laufwerk ein und geben am + PROM-Prompt boot cdrom ein. Danach startet Ihr + System von der eingelegten CD-ROM. + +
Die Geräteerkennung prüfen Die letzten paar Hundert Zeilen der Bildschirmausgabe werden gesichert und können geprüft werden. Um sich den Bildschirmpuffer anzusehen, drücken Sie die Taste Scroll-Lock. Im Puffer können Sie mit den Pfeiltasten oder den Tasten PageUp und PageDown blättern. Um zur normalen Bildschirmausgabe zurückzukehren, drücken Sie nochmals die Taste Scroll-Lock. Prüfen Sie mit diesem Verfahren nun die Ausgaben der Geräteerkennung. Sie werden einen Text ähnlich wie in sehen. Die genauen Ausgaben sind abhängig von den in Ihrem System installierten Geräten.
Ausgabe der Geräteerkennung avail memory = 253050880 (247120K bytes) Preloaded elf kernel "kernel" at 0xc0817000. Preloaded mfs_root "/mfsroot" at 0xc0817084. md0: Preloaded image </mfsroot> 4423680 bytes at 0xc03ddcd4 md1: Malloc disk Using $PIR table, 4 entries at 0xc00fde60 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib1:<VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0 isa0: <iSA bus> on isab0 atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0 <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci 0 usb0: <VIA 83572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr1 uhub0: 2 ports with 2 removable, self powered pci0: <unknown card> (vendor=0x1106, dev=0x3040) at 7.3 dc0: <ADMtek AN985 10/100BaseTX> port 0xe800-0xe8ff mem 0xdb000000-0xeb0003ff ir q 11 at device 8.0 on pci0 dc0: Ethernet address: 00:04:5a:74:6b:b5 miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xec00-0xec1f irq 9 at device 10. 0 on pci0 ed0 address 52:54:05:de:73:1b, type NE2000 (16 bit) isa0: too many dependant configs (8) isa0: unexpected small tag 14 orm0: <Option ROM> at iomem 0xc0000-0xc7fff on isa0 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model Generic PS/@ mouse, device ID 0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 pppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/15 bytes threshold plip0: <PLIP network interface> on ppbus0 ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master UDMA33 acd0: CD-RW <LITE-ON LTR-1210B> at ata1-slave PIO4 Mounting root from ufs:/dev/md0c /stand/sysinstall running as init on vty0
Prüfen Sie die Ausgabe der Geräteerkennung sorgfältig und stellen Sie sicher, dass &os; alle erwarteten Geräte gefunden hat. Wenn ein Gerät nicht gefunden wurde, wird es nicht angezeigt. Ist dies bei Ihnen der Fall, müssen Sie einen angepassten Kernel erstellen, da das betroffene Gerät (beispielsweise eine Soundkarte) in diesem Fall vom GENERIC-Kernel nicht unterstützt wird. Ab &os; 6.2 gelangen Sie im nächsten Schritt in ein Menü, in dem Sie über die Cursortasten das Land, in dem Sie sich befinden, auswählen können (). Durch die Bestätigung mit der Enter-Taste wird automatisch das von Ihnen gewählte Land sowie die dazu passende Tastaturbelegung gewählt. Alternativ ist es auch hier möglich, sysinstall zu verlassen und von vorne zu beginnen.
Ihr Land auswählen
sysinstall beenden
Wählen Sie mit den Pfeiltasten den Punkt Exit Install des Hauptmenüs aus. Nach der Auswahl wird die folgende Meldung angezeigt: User Confirmation Requested Are you sure you wish to exit? The system will reboot (be sure to remove any floppies from the drives). [ Yes ] No Wenn Sie die Auswahl mit &gui.yes; bestätigen, wird das Installationsprogramm erneut starten, falls sich die CD-ROM noch im Laufwerk befindet. Wenn Sie mit Disketten gestartet haben, müssen Sie vor dem Neustart die boot.flp-Diskette entfernen.
Das Werkzeug sysinstall Zum Installieren von &os; stellt das &os;-Project das Werkzeug sysinstall zur Verfügung. Das Werkzeug arbeitet textorientiert und bietet eine Reihe von Menüs und Bildschirmen, um den Installationsprozess zu konfigurieren und zu steuern. Die Menüs von sysinstall werden mit Tasten wie den Pfeiltasten, Enter, Tab oder Space bedient. Eine ausführliche Beschreibung der Tastenbelegung ist in der Gebrauchsanweisung von sysinstall enthalten. Die Gebrauchsanweisung können Sie lesen, indem Sie den Menüpunkt Usage auswählen. Stellen Sie sicher, dass die Schaltfläche [Select], wie in gezeigt, aktiviert ist und drücken Sie die Taste Enter. Es erscheinen Anweisungen wie das Menüsystem zu bedienen ist. Wenn Sie diese gelesen haben, drücken Sie Enter, um in das Hauptmenü zurückzukehren.
Die Gebrauchsanweisung von sysinstall auswählen
Die Dokumentation abrufen Aus dem Hauptmenü wählen Sie mit den Pfeiltasten Doc aus und drücken Enter.
Die Dokumentation abrufen
Es wird das Dokumentationsmenü angezeigt.
Das Dokumentationsmenü von sysinstall
Lesen Sie bitte unbedingt die mitgelieferte Dokumentation. Um ein Dokument zu lesen, wählen Sie das Dokument mit den Pfeiltasten aus und drücken Enter. Wenn Sie das Dokument gelesen haben, kommen Sie mit der Taste Enter in das Dokumentationsmenü zurück. Um in das Hauptmenü zurückzukommen, wählen Sie mit den Pfeiltasten Exit aus und drücken die Taste Enter.
Die Tastaturbelegung ändern Um die Tastaturbelegung zu ändern, wählen Sie den Menüpunkt Keymap und drücken Enter. Dies ist nur erforderlich wenn Sie eine nicht standard-konforme Tastatur oder eine andere als eine amerikanische Tastatur einsetzen.
Das Hauptmenü von sysinstall
Eine andere Tastaturbelegung können Sie mit den Pfeiltasten markieren und der Taste Space auswählen. Wenn Sie die Taste Space nochmals drücken wird die Auswahl aufgehoben. Haben Sie eine Tastaturbelegung ausgewählt, markieren Sie mit den Pfeiltasten &gui.ok; und drücken Sie Enter. Der Bildschirmabzug zeigt nur einen der verfügbaren Belegungen an. Mit der Taste Tab markieren Sie die Schaltfläche &gui.cancel;, die mit der Vorgabe-Belegung wieder in das Hauptmenü zurückführt.
Sysinstall Keymap Menu
Installationsoptionen einstellen Wählen Sie Options aus und rücken die Taste Enter.
Das Hauptmenü von sysinstall
Optionen von sysinstall
Für die meisten Benutzer sind die voreingestellten Werte völlig ausreichend und brauchen daher nicht geändert werden. Der Name des Releases variiert mit der zu installierenden Version von &os;. Eine Beschreibung der ausgewählten Option erscheint blau hervorgehoben am unteren Ende des Bildschirms. Mit der Option Use Defaults können Sie alle Optionen auf die Vorgabewerte zurückstellen. Wenn Sie die Hilfeseite zu den verschiedenen Optionen lesen wollen, drücken Sie die Taste F1. Die Taste Q führt in das Hauptmenü zurück.
Eine Standard-Installation starten Die Standard-Installation sollte von allen &unix;- oder &os;-Anfängern benutzt werden. Markieren Sie mit den Pfeiltasten Standard und drücken Sie Enter, um die Installation zu starten.
Die Standard-Installation starten
Plattenplatz für &os; bereitstellen Ihre erste Aufgabe ist, &os; Plattenplatz bereitzustellen und den Plattenplatz für sysinstall kenntlich zu machen (label). Sie müssen daher wissen, wie &os; mit Platten umgeht. Nummerierung der Laufwerke im BIOS Bevor Sie &os; installieren und konfigurieren, sollten Sie Sie einen wichtigen Punkt beachten, besonders wenn Sie mehrere Festplatten besitzen. DOS Microsoft Windows In einem PC, der unter einem vom BIOS abhängigen Betriebssystem, wie &ms-dos; oder µsoft.windows; läuft, kann das BIOS die normale Reihenfolge der Laufwerke verändern und das Betriebssystem beachtet diese Änderung. Mit dieser Funktion kann der Rechner von einem anderen Laufwerk als dem so genannten primären Laufwerk gestartet werden. Die Funktion ist sehr zweckmäßig für Benutzer, die Datensicherungen auf einer zweiten Platte erstellen und dafür Werkzeuge wie Ghost oder xcopy einsetzen. Wenn die erste Platte ausfällt, von einem Virus befallen wird oder durch einen Fehler des Betriebssystems verunstaltet wird, können die Platten im BIOS logisch getauscht werden. Es sieht so aus, als wären die Laufwerke, ohne Öffnen des Gehäuses getauscht worden. SCSI BIOS Teurere Systeme mit SCSI-Controllern haben oft BIOS Erweiterungen, mit denen die Reihenfolge von bis zu sieben SCSI-Platten in ähnlicher Weise verändert werden kann. Ein Benutzer, der es gewohnt ist, diese BIOS-Funktionen zu benutzen, mag überrascht sein, dass &os; sich nicht wie erwartet verhält. &os; verwendet das BIOS nicht und weiß daher nichts von der logischen Plattenordnung im BIOS. Dies kann zu sehr verwirrenden Situationen führen, insbesondere wenn die Platten identische Geometrien besitzen und Kopien voneinander sind. Vor der Installation von &os; sollte im BIOS die normale Nummerierung der Laufwerke eingestellt und so belassen werden. Ist es nötig, die Reihenfolge der Laufwerke zu verändern, so sollte das immer auf dem schweren Weg, also durch Öffnen des Gehäuses und Verändern der Jumper und Kabel, erfolgen. Von Bills und Freds ungewöhnlichen Abenteuern Bill macht aus einer älteren Wintel Kiste ein neues &os;-System für Fred. Auf einer SCSI-Platte, die er mit der SCSI-ID 0 konfiguriert, installiert Bill &os;. Nachdem Fred das System einige Tage benutzt hat, bemerkt er, dass die ältere SCSI-Platte viele Fehler meldet und beschwert sich bei Bill. Nach einigen Tagen entschließt sich Bill, die Sache in die Hand zu nehmen. Er schnappt sich eine identische SCSI-Platte aus dem Lager im Hinterzimmer und baut diese, nachdem Sie einen Oberflächenscan überstanden hat, mit der SCSI-ID 4 ein. Anschließend kopiert er die Daten von der Platte mit der SCSI-ID 0 auf die Platte mit der SCSI-ID 4. Da die neue Platte zufriedenstellend läuft, stellt Bill im SCSI-BIOS die Reihenfolge der Platten so um, dass das System von der neuen Platte startet. Nach einem problemlosen Start von &os; läuft das System und Fred ist zufrieden. Nach einiger Zeit haben Bill und Fred Lust auf ein weiteres Abenteuer – Sie wollen das System auf eine neue &os;-Version aktualisieren. Bill ersetzt die angeschlagene Platte mit der SCSI-ID 0 durch eine gleiche Platte aus dem Lager. Auf der ausgetauschten Platte installiert er problemlos mithilfe von Freds Startdisketten die neue Version von &os;. Fred braucht ein paar Tage, um die neue &os;-Version zu testen und entscheidet, dass Sie für den produktiven Einsatz geeignet ist. Nun müssen die Daten von der alten Platte (mit der SCSI-ID 4) kopiert werden. Fred hängt dazu die alte Platte ein und stellt bestürzt fest, dass alle Daten verschwunden sind. Wo sind die Daten hin? Bill kopierte die Daten von der Platte mit der SCSI-ID 0 auf die Platte mit der SCSI-ID 4. Als Bill die Startreihenfolge im SCSI-BIOS änderte, führte er sich nur selbst an der Nase herum. &os; lief weiterhin auf der Platte mit der SCSI-ID 0. Durch die Änderung der Startreihenfolge wurde nur ein Teil des Boot- und Loader-Codes von der Platte mit der SCSI-ID 4 geladen. Die Kernel-Treiber von &os; ignorieren die BIOS-Einstellungen und benutzen die normale Nummerierung. Das System lief also weiterhin auf der Platte mit der SCSI-ID 0 und alle Daten von Fred befanden sich auf dieser Platte. Es schien nur so, als würde das System auf der Platte mit der SCSI-ID 4 laufen. Wir sind erleichtert zu bemerken, dass keine Daten verloren gingen oder verändert wurden. Die alte Platte wurde im Müll wiedergefunden und Freds Daten konnten wiederhergestellt werden (Bill weiß jetzt, dass er noch viel zu lernen hat). Obwohl in diesem Beispiel SCSI-Platten verwendet wurden, gelten die Konzepte gleichermaßen für IDE-Platten. Slices mit Fdisk erstellen Zu diesem Zeitpunkt werden noch keine Änderungen auf die Festplatte ausgeschrieben. Sie können daher sysinstall jederzeit verlassen, und erneut beginnen, wenn Sie denken, einen Fehler gemacht zu haben. Sie können sysinstall über die Menüs verlassen, die Taste U drücken oder die Option Undo wählen. Wenn Sie einmal nicht wissen, wie Sie ein Menü verlassen, können Sie den Rechner auch einfach ausschalten. Nachdem Sie in sysinstall die Standard-Installation ausgewählt haben, werden Sie folgende Meldung sehen: Message In the next menu, you will need to set up a DOS-style ("fdisk") partitioning scheme for your hard disk. If you simply wish to devote all disk space to FreeBSD (overwriting anything else that might be on the disk(s) selected) then use the (A)ll command to select the default partitioning scheme followed by a (Q)uit. If you wish to allocate only free space to FreeBSD, move to a partition marked "unused" and use the (C)reate command. [ OK ] [ Press enter or space ] Drücken Sie, wie angegeben, Enter. Im nächsten Bildschirm werden alle Festplatten angezeigt, die der Kernel während der Geräteerkennung gefunden hat. zeigt ein Beispiel von einem System mit zwei IDE-Platten, die als ad0 und ad2 erkannt wurden.
Ein Laufwerk für Fdisk aussuchen
Sie fragen sich vielleicht, warum ad1 nicht angezeigt wird. Wurde die Platte vielleicht nicht erkannt? Stellen Sie sich ein System mit zwei IDE-Platten vor. Eine Platte ist als Master am ersten Controller, die andere als Master am zweiten Controller angeschlossen. Wenn &os; die Platten in der Reihenfolge, in der sie gefunden werden, nummerieren würde, hießen die Platten ad0 und ad1 und alles würde funktionieren. Wenn Sie nun am ersten IDE-Controller eine dritte Platte als Slave anschließen würden, wäre diese Platte ad1. Die vorher ad1 genannte Platte würde nun ad2 heißen. Dateisysteme werden auf Geräten wie ad1s1a angelegt. Daher könnte es passieren, dass auf einmal Dateisysteme nicht mehr gefunden werden und Sie &os; umkonfigurieren müssten. Um diese Probleme zu umgehen, kann der Kernel so eingestellt werden, dass er Platten nach ihrem Anschlussort anstelle der gefundenen Reihenfolge benennt. Nach diesem Schema ist die Master-Platte am zweiten IDE-Controller immer ad2, auch wenn es die Geräte ad0 oder ad1 gar nicht gibt. Dieses Verhalten ist in &os; voreingestellt und der Grund warum im Beispiel die Geräte ad0 und ad2 angezeigt werden. Der Rechner, von dem die gezeigte Ausgabe stammt, hatte zwei IDE-Platten, die beide als Master konfiguriert waren, und keine Slave-Platten. Wählen Sie die Platte aus, auf die Sie &os; installieren wollen und drücken Sie &gui.ok;. Anschließend startet Fdisk und zeigt einen Bildschirm wie den in . Der Bildschirm von Fdisk ist in drei Abschnitte unterteilt. Der erste Abschnitt umfasst die ersten beiden Zeilen der Anzeige. Er enthält Einzelheiten über die aktuell ausgewählte Platte, unter anderem den &os;-Gerätenamen, die Plattengeometrie und die Kapazität der Platte. Der zweite Abschnitt zeigt die auf der Platte befindlichen Slices. Angezeigt wird der Anfang und das Ende der Slice, die Größe der Slice, der &os;-Gerätename, eine Beschreibung und der Subtyp. Im Beispiel sehen Sie zwei unbenutzte Slices, die durch die Plattenbelegung auf PCs entstehen. Weiterhin sehen Sie eine große FAT-Slice, die ziemlich sicher unter &ms-dos;/&windows; als Laufwerk C: auftaucht und eine erweiterte Slice, die unter &ms-dos;/&windows; weitere Laufwerke enthalten kann. Im dritten Abschnitt sind die Kommandos von Fdisk zusammengefasst.
Typischer Fdisk-Bildschirm vor dem Editieren
Die nächsten Schritte hängen von der beabsichtigten Einteilung der Festplatte ab. Wenn Sie die gesamte Festplatte für &os; verwenden wollen, drücken Sie die Taste A (entspricht dem Menüpunkt Use Entire Disk). Später im Installationsverlauf müssen Sie diese Auswahl bestätigen, danach werden alle bisherigen Daten von der Festplatte gelöscht. Diese Auswahl löscht vorher vorhandene Slices und ersetzt sie durch einen kleinen unbenutzten Bereich (der wieder durch das PC-Design bedingt ist) und eine große Slice für &os;. Wählen Sie dann die neu erstellte Slice mit den Pfeiltasten aus und drücken Sie die Taste S, um die Slice als startfähig (bootbar) zu markieren. zeigt den Bildschirm zu diesem Zeitpunkt. Beachten Sie das A in der Spalte Flags. Dies zeigt an, dass die Slice aktiv ist und das System von dieser Slice starten wird. Um Platz für &os; zu schaffen, können Sie auch bestehende Slices löschen. Markieren Sie dazu die Slice mit den Pfeiltasten und drücken Sie die Taste D. Danach legen Sie eine neue Slice mit der Taste C an. Sie werden nach der Größe der zu erstellenden Slice gefragt; der Vorgabewert entspricht der größten Slice, die angelegt werden kann (entspricht entweder dem größten freien Bereich auf der Festplatte oder der ganzen Festplatte). Wenn Sie schon Platz für &os; geschaffen haben (beispielsweise mit &partitionmagic;), können Sie eine neue Slice direkt mit der Taste C anlegen. Sie werden wieder nach der Größe der anzulegenden Slice gefragt.
Eine Partition über die gesamte Platte
Drücken Sie die Taste Q, wenn Sie fertig sind. Sysinstall merkt sich die Änderungen, schreibt sie aber noch nicht auf die Festplatte.
Einen Boot-Manager installieren Sie können nun einen Boot-Manager installieren. Unter folgenden Umständen sollten Sie den &os;-Boot-Manager installieren: Das System besitzt mehr als ein Laufwerk und &os; ist auf einem anderen Laufwerk als dem ersten Laufwerk installiert. &os; teilt sich das Laufwerk mit einem anderen Betriebssystem. Beim Systemstart wollen Sie auswählen, welches Betriebssystem gestartet wird. Wird der Rechner ausschließlich mit &os; betrieben und &os; ist auf dem ersten Laufwerk installiert, dann genügt der Standard-Boot-Manager. Wenn Sie einen anderen Boot-Manager benutzen, der &os; starten kann, wählen Sie bitte None aus. Nachdem Sie die Auswahl getroffen haben, drücken Sie die Taste Enter.
Sysinstall Boot-Manager-Menü
In der Hilfe, die Sie mit der Taste F1 aufrufen, werden Probleme beschrieben, die entstehen können, wenn sich zwei Betriebssysteme ein Laufwerk teilen.
Slices auf einem anderen Laufwerk anlegen Wenn das System mehr als ein Laufwerk besitzt, kehrt die Installationsprozedur nach der Auswahl des Boot-Managers zum Bildschirm Select Drives zurück. Sie können hier ein anderes Laufwerk auswählen und auf diesem Laufwerk mit Fdisk weitere Slices anlegen. Wenn Sie &os; auf einem anderen Laufwerk als dem ersten Laufwerk installieren, müssen Sie den &os;-Boot-Manager auf beiden Laufwerken installieren.
Die Laufwerksauswahl verlassen
Die Taste Tab wechselt zwischen dem zuletzt ausgewählten Laufwerk und den Schaltflächen &gui.ok; und &gui.cancel;. Drücken Sie einmal die Taste Tab, um &gui.ok; auszuwählen und drücken Sie anschließend Enter um die Installation weiterzuführen.
Partitionen mit <application>Bsdlabel</application> anlegen In jeder angelegten Slice müssen Sie Partitionen anlegen. Die Partitionen werden mit Buchstaben von a bis h gekennzeichnet. Die Buchstaben b, c und d haben eine besondere Bedeutung, die Sie beachten sollten. Einige Anwendungen profitieren von einer besonderen Aufteilung der Partitionen, insbesondere wenn das System mehr als ein Laufwerk besitzt. Bei der ersten &os;-Installation sollten Sie sich allerdings nicht zu viele Gedanken über die Partitionen machen. Wichtiger ist, dass Sie &os; installieren und benutzen. Wenn Sie mehr Erfahrung mit &os; gesammelt haben, können Sie &os; jederzeit mit anderen Partitionen installieren. Das folgende Schema legt vier Partitionen an: Eine Partition für den Auslagerungsbereich (swap space) und drei Partitionen für Dateisysteme. Partitionen auf dem ersten Laufwerk Partition Dateisystem Größe Beschreibung a / 100 MB Das Root-Dateisystem. Jedes andere Dateisystem wird irgendwo unterhalb von diesem Dateisystem eingehangen. 100 MB ist eine vernünftige Größe für dieses Dateisystem. Sie werden hier wenig Daten speichern und &os; benötigt ungefähr 40 MB Platz auf diesem Dateisystem. Der Rest ist für temporäre Daten und die Reserve, falls künftige Versionen von &os; mehr Platz in / benötigen. b N/A 2-3 x RAM Der Auslagerungsbereich befindet sich auf der b-Partition. Es ist schon fast eine Kunst, die Größe des Auslagerungsbereichs richtig zu bestimmen. Eine gute Daumenregel ist, den Auslagerungsbereich zwei bis dreimal größer als den Hauptspeicher (RAM) anzulegen. Sie sollten mindestens 64 MB für den Auslagerungsbereich vorsehen. Wenn das System also weniger als 32 MB Hauptspeicher besitzt, richten Sie einen 64 MB großen Auslagerungsbereich ein. Besitzt das System mehr als ein Laufwerk, können Sie auf jedem Laufwerk Auslagerungsbereiche anlegen. Da &os; alle Auslagerungsbereiche benutzt, wird der Vorgang des Auslagerns durch mehrere Bereiche beschleunigt. Berechnen Sie in diesem Fall die Größe des benötigten Auslagerungsbereichs, beispielsweise 128 MB, und teilen Sie die Größe durch die Anzahl der Laufwerke. Dies gibt die Größe des Auslagerungsbereichs auf jedem Laufwerk. Mit zwei Platten ergibt das in diesem Beispiel 64 MB Auslagerungsbereich pro Platte. e /var 50 MB Das Verzeichnis /var enthält Dateien, die sich dauernd ändern (Protokolldateien und Dateien für Verwaltungszwecke) und auf die im Normalbetrieb oft zugegriffen wird. Liegen diese Dateien in einem gesonderten Dateisystem, kann &os; den Zugriff auf die Dateien optimieren, ohne den Zugriff auf Dateien mit einem anderen Zugriffmuster zu stören. f /usr Der Rest des Laufwerks Alle anderen Dateien werden normalerweise im Verzeichnis /usr oder einem Unterverzeichnis von /usr abgelegt.
Wenn Sie &os; auf mehr als einem Laufwerk installieren, müssen Sie noch weitere Partitionen in den Slices auf den anderen Laufwerken anlegen. Am einfachsten legen Sie pro Laufwerk zwei Partitionen an: eine für den Auslagerungsbereich und eine andere für ein Dateisystem. Partitionen auf weiteren Laufwerken Partition Dateisystem Größe Beschreibung b - - Wie schon besprochen, können Sie den Auslagerungsbereich auf mehrere Platten verteilen. Auch wenn die a-Partition frei ist, sollte der Auslagerungsbereich entsprechend der Konvention auf der b-Partition angelegt werden. e /diskn Der Rest des Laufwerks Der Rest der Platte wird von einer großen Partition eingenommen. Sie könnten für diese Partition die a-Partition anstelle der e-Partition benutzen. Allerdings ist die a-Partition per Konvention für das Root-Dateisystem (/) reserviert. Sie brauchen die Konvention nicht zu beachten, da aber sysinstall die Konvention beachtet, ist die Installation sauberer, wenn Sie das auch tun. Sie können das Dateisystem irgendwo einhängen. Das Beispiel schlägt die Verzeichnisse /diskn vor, wobei n die Laufwerke nummeriert. Sie können ein anderes Schema verwenden, wenn Sie möchten.
Wenn Sie die Aufteilung der Partitionen festgelegt haben, können Sie die Partitionen mit sysinstall anlegen. Es erscheint die nachstehende Meldung: Message Now, you need to create BSD partitions inside of the fdisk partition(s) just created. If you have a reasonable amount of disk space (200MB or more) and don't have any special requirements, simply use the (A)uto command to allocate space automatically. If you have more specific needs or just don't care for the layout chosen by (A)uto, press F1 for more information on manual layout. [ OK ] [ Press enter or space ] Drücken Sie Enter, um den &os;-Partitionseditor, der Disklabel heißt, zu starten. zeigt den Einstiegsbildschirm von Disklabel. Der Bildschirm ist in drei Bereiche geteilt. Die ersten Zeilen zeigen den Namen des Laufwerks, das Sie gerade bearbeiten und die Slice, die die erstellten Partitionen enthält (Disklabel spricht hier von Partitionen anstatt von Slices). Der freie Platz einer Slice, der noch keiner Partition zugeordnet ist, wird ebenfalls angezeigt. In der Mitte des Bildschirms werden die angelegten Partitionen, der Name des Dateisystems, das sich in der Partition befindet, dessen Größe und die Optionen zum Erstellen des Dateisystems angezeigt. Das untere Drittel des Bildschirms zeigt die in Disklabel gültigen Tastenkombinationen.
Sysinstall Disklabel-Editor
Disklabel kann für Sie automatisch Partitionen mit vorgegebenen Größen erstellen. Probieren Sie das bitte jetzt aus und drücken Sie die Taste A. Der Bildschirm sieht danach ähnlich wie in aus. Abhängig von der Größe des Laufwerks können die Vorgabewerte richtig oder falsch sein. Da Sie die Vorgaben nicht akzeptieren müssen, spielt das keine Rolle. &os; legt das Verzeichnis /tmp in einer eigenen Partition an. Dies verhindert, dass sich die Root-Partition mit temporären Dateien füllt.
Sysinstall Disklabel-Editor mit automatischen Vorgaben
Wollen Sie die vorgegebenen Partitionen nicht verwenden und durch eigene ersetzen, markieren Sie mit den Pfeiltasten die erste Partition und drücken Sie die Taste D, um die Partition zu löschen. Wiederholen Sie dies für alle vorgegebenen Partitionen. Um die erste Partition (a), die als / eingehangen wird, zu erstellen, drücken Sie die Taste C. Stellen Sie dabei sicher, dass die richtige Slice im oberen Teil des Bildschirms markiert ist. Wie in , erscheint ein Fenster, in dem Sie die Größe der Partition angeben müssen. Sie können die Größe in Blöcken oder einer Zahl gefolgt von M für Megabyte, G für Gigabyte oder C für Zylinder angeben. Ab &os; 5.X gibt es den Menüpunkt Custom Newfs (Taste Z). Sie können dort Dateisysteme vom Typ UFS2 anlegen (dies ist ab &os; 5.1 die Vorgabe), die Einstellungen von mit Auto Defaults angelegten Dateisystemen ändern oder die Option für zu erstellende Dateisysteme voreinstellen. Vergessen Sie nicht, Soft Updates mit der Option zu aktivieren.
Die Größe einer Partition festlegen
Die vorgegebene Größe erstellt eine Partition, die den Rest der Slice ausfüllt. Wenn Sie die Größen aus dem früheren Beispiel verwenden, löschen Sie die vorgeschlagene Größe mit der Taste Backspace und tragen Sie die neue Größe, wie in gezeigt, ein. Drücken Sie anschließend &gui.ok;.
Die Größe einer Partition ändern
Nachdem Sie die Größe der Partition festgelegt haben, werden Sie gefragt, ob die Partition ein Dateisystem oder einen Auslagerungsbereich enthalten soll (siehe ). Die erste Partition enthält ein Dateisystem, wählen Sie FS aus und drücken Sie die Taste Enter.
Den Partitionstyp festlegen
Abschließend müssen Sie, weil Sie ein Dateisystem erstellen, angeben, wo das Dateisystem eingehangen wird. Die Eingabe ist in dargestellt. Das Root-Dateisystem wird in / eingehangen, geben Sie daher / ein und drücken Sie die Taste Enter.
Den Mountpoint festlegen
Auf dem Bildschirm wird jetzt die neu angelegte Partition angezeigt. Wiederholen Sie diese Prozedur für die restlichen Partitionen. Beim Anlegen des Auslagerungsbereichs werden Sie nicht nach einem Mountpoint gefragt, da ein Auslagerungsbereich nie eingehangen wird. Wenn Sie die letzte Partition anlegen, /usr, können Sie die vorgeschlagene Größe stehen lassen. Das Dateisystem wird dann den Rest der Slice einnehmen. Der letzte Bildschirm von Disklabel sieht wie in aus (Ihre Werte werden von den gezeigten Werten abweichen). Drücken Sie die Taste Q, um Disklabel zu verlassen.
Sysinstall Disklabel-Editor
Den Installationsumfang bestimmen Die Distribution auswählen Welche Software Sie installieren, hängt hauptsächlich vom Zweck des Rechners und dem zur Verfügung stehenden Plattenplatz ab. Die vorgegebenen Distributionen reichen von der minimalen Installation bis hin zu einer kompletten Installation. Anfänger sollten eine der vorgegebenen Distributionen auswählen, erfahrene Benutzer können die zu installierende Distribution anpassen. Die Taste F1 führt zu einem Hilfebildschirm, der die Distributionen und deren Inhalte beschreibt. Drücken Sie Enter, um die Hilfe zu verlassen und zur Auswahl der Distribution zurückzukehren. Wenn Sie eine graphische Benutzeroberfläche installieren wollen, sollten Sie eine Distribution auswählen, deren Name mit X anfängt. Die Konfiguration des X-Servers und die Auswahl der Benutzeroberfläche ist Teil der Nacharbeiten. Die Konfiguration des X-Servers wird in besprochen. Seit &os; 5.3 wird &xorg; als Standard-X-Server installiert. Wenn Sie einen angepassten Kernel erstellen wollen, wählen Sie eine Distribution aus, die den Quellcode (source code) enthält. Warum und wie Sie einen angepassten Kernel erstellen, erfahren Sie in . Natürlich ist das flexibelste System das, auf dem alles installiert ist. Wenn das System über ausreichend Plattenplatz verfügt, wählen Sie mit den Pfeiltasten die Option All aus (siehe ) und drücken die Taste Enter. Wenn Sie Bedenken haben, dass der Plattenplatz nicht ausreicht, wählen Sie eine Distribution, die weniger Software enthält. Machen Sie sich keine unnötigen Sorgen um die richtige Distribution, ausgelassene Distribution können später nachinstalliert werden.
Die Distribution auswählen
Die Ports-Sammlung installieren Nach der Auswahl der Distribution haben Sie Gelegenheit, die &os;-Ports-Sammlung zu installieren. Mit der Ports-Sammlung lässt sich Software Dritter auf einfache Art und Weise installieren. Der Quellcode der zu installierenden Software ist nicht in der Ports-Sammlung enthalten. Stattdessen enthält die Ports-Sammlung Dateien, die den Installationsprozess (herunterladen, übersetzen und installieren) automatisieren. Die Ports-Sammlung wird in besprochen. Der Installationsprozess prüft nicht, ob ausreichend Platz für die Ports-Sammlung vorhanden ist. Wählen Sie die Ports-Sammlung bitte nur aus, wenn das System über ausreichenden Platz verfügt. In &os; &rel.current; nimmt die Ports-Sammlung ungefähr &ports.size; Plattenplatz in Anspruch. Neuere Versionen von &os; benötigen mit Sicherheit noch mehr Platz. User Confirmation Requested Would you like to install the FreeBSD ports collection? This will give you ready access to over &os.numports; ported software packages, at a cost of around &ports.size; of disk space when "clean" and possibly much more than that if a lot of the distribution tarballs are loaded (unless you have the extra CDs from a FreeBSD CD/DVD distribution available and can mount it on /cdrom, in which case this is far less of a problem). The ports collection is a very valuable resource and well worth having on your /usr partition, so it is advisable to say Yes to this option. For more information on the ports collection & the latest ports, visit: http://www.FreeBSD.org/ports [ Yes ] No Wählen Sie mit den Pfeiltasten &gui.yes; aus, um die Ports-Sammlung zu installieren. Wählen Sie &gui.no; aus, um die Ports-Sammlung auszulassen. Drücken Sie danach die Taste Enter, es erscheint wieder das Distributionsmenü.
Die Distributionen bestätigen
Wenn Sie mit den ausgewählten Optionen zufrieden sind, wählen Sie mit den Pfeiltasten Exit aus (stellen Sie sicher, dass &gui.ok; aktiv ist) und drücken Sie die Taste Enter.
Das Installationsmedium auswählen Wenn Sie von einer CD-ROM oder einer DVD installieren, wählen Sie bitte Install from a FreeBSD CD/DVD aus. Stellen Sie sicher, dass &gui.ok; aktiv ist und drücken Sie dann die Taste Enter, um mit der Installation fortzufahren. Wenn Sie ein anderes Installationsmedium benutzen, wählen Sie die passende Option aus und folgen den angezeigten Anweisungen. Die Hilfeseiten über Installationsmedien erreichen Sie mit der Taste F1. Drücken Sie Enter, um zur Auswahl des Installationsmediums zurückzukehren.
Das Installationsmedium auswählen
FTP-Installationsmodi Installation FTP Sie können zwischen drei FTP-Installationsmodi wählen: Active-FTP, Passive-FTP oder über einen HTTP-Proxy. FTP Active: Install from an FTP server Diese Option führt alle FTP-Operationen im Active-Mode aus. Dieser Modus funktioniert nicht durch Firewalls, er funktioniert aber mit alten FTP-Servern, die den Passive-Mode nicht beherrschen. Wenn die Verbindung im Passive-Mode (das ist die Vorgabe) hängt, versuchen Sie den Active-Mode. FTP Passive: Install from an FTP server through a firewall FTP Passive-Mode Mit dieser Option benutzt sysinstall den Passive-Mode für alle FTP-Operationen. In diesem Modus funktionieren Verbindungen durch Firewalls, die einkommende Pakete auf beliebigen TCP-Ports blockieren. FTP via a HTTP proxy: Install from an FTP server through a http proxy FTP über einen HTTP-Proxy Diese Option weist sysinstall an, alle FTP-Operationen mit HTTP über einen Proxy (wie ein Web-Browser) durchzuführen. Der Proxy leitet die Anfragen an den richtigen FTP-Server weiter. Mit dieser Option passieren Sie eine Firewall, die FTP-Verbindungen verbietet, aber einen HTTP-Proxy anbietet. Neben dem FTP-Server müssen Sie in diesem Fall den Proxy-Server angeben. Bei einem FTP-Proxy-Server müssen Sie normalerweise den Ziel-FTP-Server als Teil des Benutzernamens hinter dem Klammeraffen (@) angeben. Der Proxy-Server übernimmt die Kommunikation mit dem Ziel-FTP-Server. Nehmen wir an, Sie wollen von ftp.FreeBSD.org über den FTP-Proxy foo.example.com auf Port 1234 installieren. Wählen Sie das Menü Options aus und setzen Sie dort den FTP-Benutzernamen (username) auf ftp@ftp.FreeBSD.org. Als Passwort geben Sie bitte Ihre E-Mail-Adresse an. Setzen Sie das Installationsmedium auf Active-FTP oder Passive-FTP, je nachdem welchen Modus der Proxy-Server unterstützt. Für die URL geben Sie ftp://foo.example.com:1234/pub/FreeBSD an. Der Proxy-Server foo.example.com leitet Zugriffe auf das Verzeichnis /pub/FreeBSD an den Server ftp.FreeBSD.org weiter. Daher können foo.example.com als FTP-Server angeben.
Die Installation festschreiben Wenn Sie wünschen, kann die Installation nun beginnen. Dies ist die letzte Gelegenheit, die Installation abzubrechen und Änderungen auf der Festplatte zu vermeiden. User Confirmation Requested Last Chance! Are you SURE you want to continue the installation? If you're running this on a disk with data you wish to save then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding! We can take no responsibility for lost disk contents! [ Yes ] No Wählen Sie &gui.yes; aus und drücken Sie Enter, um weiter zu machen. Die Installationsdauer hängt von den ausgewählten Distributionen, dem Installationsmedium und der Geschwindigkeit des Rechners ab. Während der Installation wird der Fortgang mit Statusmeldungen angezeigt. Die Installation ist beendet, wenn die folgende Meldung erscheint: Message Congratulations! You now have FreeBSD installed on your system. We will now move on to the final configuration questions. For any option you do not wish to configure, simply select No. If you wish to re-enter this utility after the system is up, you may do so by typing: /usr/sbin/sysinstall. [ OK ] [ Press enter or space ] Drücken Sie die Taste Enter, um die Nacharbeiten durchzuführen. Wenn Sie &gui.no; auswählen und Enter drücken wird die Installation abgebrochen und das System wird nicht verändert. Die nachstehende Meldung wird angezeigt: Message Installation complete with some errors. You may wish to scroll through the debugging messages on VTY1 with the scroll-lock feature. You can also choose "No" at the next prompt and go back into the installation menus to retry whichever operations have failed. [ OK ] Die Meldung wird angezeigt, weil nichts installiert wurde. Drücken Sie Enter, um in das Hauptmenü zurückzukehren. Dort können Sie die Installationsprozedur verlassen. Arbeiten nach der Installation Nach einer erfolgreichen Installation wird das System konfiguriert. Sie können das System direkt konfigurieren oder nach einem Neustart. Nach einem Neustart rufen Sie sysinstall (vor &os; 5.2 /stand/sysinstall) auf und wählen den Menüpunkt Configure. Netzwerkkonfiguration Wenn Sie schon PPP für eine FTP-Installation konfiguriert haben, erscheint dieser Bildschirm nicht. Sie können die Konfiguration später in sysinstall vornehmen. Netzwerke und die Konfiguration von &os; als Gateway oder Router werden eingehend im Kapitel Weiterführende Netzwerkthemen behandelt. User Confirmation Requested Would you like to configure any Ethernet or SLIP/PPP network devices? [ Yes ] No Wenn Sie eine Netzwerkkarte konfigurieren wollen, wählen Sie &gui.yes; aus und drücken Sie die Taste Enter. Wählen Sie &gui.no;, um die Netzwerkkonfiguration zu überspringen.
Eine Netzwerkkarte auswählen
Wählen Sie die zu konfigurierende Karte mit den Pfeiltasten aus und drücken Sie die Taste Enter. User Confirmation Requested Do you want to try IPv6 configuration of the interface? Yes [ No ] Für das gezeigte Installationsbeispiel genügte das momentan verwendete Internet-Protokoll (IPv4). Daher wurde mit den Pfeiltasten &gui.no; ausgewählt und mit der Taste Enter bestätigt. Wenn Sie durch einen RA-Server mit einem IPv6-Netzwerk verbunden sind, wählen Sie bitte &gui.yes; und drücken die Taste Enter. Die Suche nach den RA-Servern dauert einige Sekunden. User Confirmation Requested Do you want to try DHCP configuration of the interface? Yes [ No ] Falls Sie das Dynamic Host Configuration Protocol (DHCP) nicht verwenden, wählen Sie &gui.no; aus und drücken Sie Enter. Wenn Sie &gui.yes; auswählen, wird das Programm dhclient ausgeführt und bei Erfolg die Netzwerkkarte konfiguriert. Mehr über DHCP können Sie in nachlesen. Der nächste Bildschirmabzug zeigt die Netzwerkkonfiguration eines Systems, das Gateway für das lokale Netz ist.
Die Netzwerkkarte ed0 konfigurieren
Tragen Sie in die Felder, die Sie mit der Taste Tab auswählen können, die richtige Konfiguration ein. Host Der vollständige Rechnername (fully-qualified hostname), wie in diesem Beispiel k6-2.example.com. Domain Der Domain-Name, in dem sich der Rechner befindet. Im Beispiel ist das example.com. IPv4 Gateway Die IP-Adresse des Rechners, der Pakete an entfernte Netze weiterleitet. Sie müssen dieses Feld ausfüllen, wenn der sich der Rechner in einem Netzwerk befindet. Lassen Sie das Feld leer, wenn der Rechner der Gateway in das Internet ist. Der IPv4-Gateway wird auch default gateway oder default route genannt. Name server Die IP-Adresse des lokalen DNS-Servers. Im Beispiel gibt es keinen lokalen DNS-Server, daher wurde der DNS-Server des Providers (208.163.10.2) benutzt. IPv4 address Die IP-Adresse der Netzwerkkarte (192.168.0.1). Netmask (Netzmaske) Im Beispiel werden Adressen aus einem Klasse C Netz (192.168.0.0 bis 192.168.0.255) benutzt. Standardmäßig besitzt ein Klasse C Netz die Netzmaske 255.255.255.0. Extra options to ifconfig (Optionen für ifconfig) Zusätzliche Optionen für den Befehl ifconfig, die spezifisch für die verwendete Netzwerkkarte sind. Im Beispiel sind keine Optionen angegeben. Wenn Sie alle Werte eingegeben haben, wählen Sie mit Tab &gui.ok; aus und drücken Sie Enter. User Confirmation Requested Would you like to Bring Up the ed0 interface right now? [ Yes ] No Wenn Sie &gui.yes; auswählen und Enter drücken, wird die Netzwerkkonfiguration aktiviert. Allerdings bringt dies zu diesem Zeitpunkt nicht viel, da der Rechner noch neu gestartet werden muss.
Gateway einrichten User Confirmation Requested Do you want this machine to function as a network gateway? [ Yes ] No Wählen Sie &gui.yes;, wenn der Rechner ein Gateway für ein lokales Netz ist und Pakete an andere Netze weiterleitet. Wenn der Rechner ein normaler Netzknoten ist, wählen Sie &gui.no; aus. Bestätigen Sie die auswahl mit der Taste Enter. IP-Dienste einrichten User Confirmation Requested Do you want to configure inetd and the network services that it provides? Yes [ No ] Wenn &gui.no; ausgewählt wird, werden Dienste wie telnetd nicht aktiviert. Benutzer können sich dann von entfernten Rechnern nicht mit telnet an dieser Maschine anmelden. Lokale Benutzer können aber auf entfernte Rechner mit telnet zugreifen. Die Dienste können Sie nach der Installation aktivieren, indem Sie die Datei /etc/inetd.conf editieren. Dies wird in beschrieben. Wenn Sie jetzt weitere Dienste aktivieren möchten, wählen Sie &gui.yes; aus. Es erscheint die nachstehende Rückfrage: User Confirmation Requested The Internet Super Server (inetd) allows a number of simple Internet services to be enabled, including finger, ftp and telnetd. Enabling these services may increase risk of security problems by increasing the exposure of your system. With this in mind, do you wish to enable inetd? [ Yes ] No Bestätigen Sie die Rückfrage mit &gui.yes;. User Confirmation Requested inetd(8) relies on its configuration file, /etc/inetd.conf, to determine which of its Internet services will be available. The default FreeBSD inetd.conf(5) leaves all services disabled by default, so they must be specifically enabled in the configuration file before they will function, even once inetd(8) is enabled. Note that services for IPv6 must be separately enabled from IPv4 services. Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to use the current settings. [ Yes ] No Wenn Sie &gui.yes; auswählen, können Sie Dienste aktivieren, in dem Sie das Zeichen # am Zeilenanfang entfernen.
<filename>inetd.conf</filename> editieren
Wenn Sie die gewünschten Dienste aktiviert haben, drücken Sie die Taste Esc. Es erscheint ein Menü, in dem Sie die Änderungen abspeichern und den Editor verlassen können.
Anonymous-FTP FTP anonymous User Confirmation Requested Do you want to have anonymous FTP access to this machine? Yes [ No ] Anonymous-FTP verbieten Wenn Sie die vorgegebene Auswahl &gui.no; mit der Taste Enter bestätigen, können Benutzer, die ein Konto und ein Passwort auf dem System besitzen, immer noch mit FTP auf das System zugreifen. Anonymous-FTP erlauben Wenn Sie Anonymous-FTP erlauben, darf jeder auf Ihr System zugreifen. Bedenken Sie die Folgen für die Systemsicherheit (siehe ) bevor Sie diese Option aktivieren. Um Anonymous-FTP zu aktivieren, wählen Sie mit den Pfeiltasten &gui.yes; aus und drücken Sie die Taste Enter. Es erscheint ein ähnlicher Bildschirm wie der folgende:
Anonymous-FTP konfigurieren
Mit der Taste F1 rufen Sie die Hilfe auf: This screen allows you to configure the anonymous FTP user. The following configuration values are editable: UID: The user ID you wish to assign to the anonymous FTP user. All files uploaded will be owned by this ID. Group: Which group you wish the anonymous FTP user to be in. Comment: String describing this user in /etc/passwd FTP Root Directory: Where files available for anonymous FTP will be kept. Upload subdirectory: Where files uploaded by anonymous FTP users will go. Das FTP-Wurzelverzeichnis wird per Voreinstellung in /var angelegt. Wenn in /var zu wenig Platz vorhanden ist, können Sie das FTP-Wurzelverzeichnis beispielsweise nach /usr/ftp verlegen. Wenn Sie mit den Einstellungen zufrieden sind, drücken Sie die Taste Enter. User Confirmation Requested Create a welcome message file for anonymous FTP users? [ Yes ] No Wenn Sie &gui.yes; auswählen und mit Enter bestätigen, können Sie die Begrüßungsmeldung des FTP-Servers in einem Editor ändern.
Begrüßungsmeldung des FTP-Servers editieren
Der Editor, in dem Sie sich befinden, heißt ee. Folgen Sie den Anweisungen, um die Meldung zu editieren. Sie können die Meldung auch später in einem Editor Ihrer Wahl editieren. Merken Sie sich dazu den Dateinamen, der im Editor unten angezeigt wird. Wenn Sie die Taste Esc drücken, erscheint ein Menü, in dem a) leave editor vorgewählt ist. Drücken Sie die Taste Enter, um den Editor zu verlassen. Falls Sie Änderungen vorgenommen haben, bestätigen Sie die Änderungen nochmals mit Enter.
Network-File-System einrichten Mit dem Network-File-System (NFS) können Sie über ein Netzwerk auf Dateien zugreifen. Ein Rechner kann NFS-Server, NFS-Client oder beides sein. NFS wird in besprochen. NFS-Server einrichten User Confirmation Requested Do you want to configure this machine as an NFS server? Yes [ No ] Wenn Sie keinen NFS-Server benötigen, wählen Sie &gui.no; aus und bestätigen Sie mit Enter. Wenn Sie &gui.yes; auswählen, erscheint der Hinweis, dass die Datei exports angelegt werden muss. Message Operating as an NFS server means that you must first configure an /etc/exports file to indicate which hosts are allowed certain kinds of access to your local filesystems. Press [Enter] now to invoke an editor on /etc/exports [ OK ] Drücken Sie Enter und es wird ein Editor gestartet, in dem Sie die Datei exports editieren können.
<filename>exports</filename> editieren
Folgen Sie den Anweisungen, um Dateisysteme zu exportieren. Sie können die Datei auch später in einem Editor Ihrer Wahl editieren. Merken Sie sich dazu den Dateinamen, der im Editor unten angezeigt wird. Drücken Sie die Taste Esc und es erscheint ein Menü, in dem a) leave editor vorgewählt ist. Drücken Sie die Taste Enter, um den Editor zu verlassen.
<acronym>NFS</acronym>-Client einrichten Mit einem NFS-Client können Sie auf NFS-Server zugreifen. User Confirmation Requested Do you want to configure this machine as an NFS client? Yes [ No ] Wählen Sie entweder &gui.yes; oder &gui.no; aus und drücken Sie Enter.
Die Systemkonsole einrichten Sie können verschiedene Merkmale der Systemkonsole anpassen. User Confirmation Requested Would you like to customize your system console settings? [ Yes ] No Wenn Sie die Merkmale der Systemkonsole anpassen wollen, wählen Sie &gui.yes; aus und drücken Sie die Taste Enter.
Merkmale der Systemkonsole
Oft wird ein Bildschirmschoner auf der Konsole aktiviert. Wälen Sie mit den Pfeiltasten Saver aus und drücken Sie die Taste Enter.
Bildschirmschoner auswählen
Wählen Sie den gewünschten Bildschirmschoner mit den Pfeiltasten aus und drücken Sie Enter. Das Konfigurationsmenü der Systemkonsole erscheint wieder. In der Voreinstellung wird der Bildschirmschoner nach 300 Sekunden aktiviert. Um diese Zeitspanne zu ändern, wählen Sie wieder Saver aus. Mit den Pfeiltasten wählen Sie dann Timeout aus und drücken Enter. Es erscheint ein Eingabefenster:
Den Bildschirmschoner einstellen
Ändern Sie die Zeitspanne und wählen Sie &gui.ok; aus. Mit Enter kehren Sie in das Konfigurationsmenü der Systemkonsole zurück.
Die Konfiguration der Systemkonsole verlassen
Um die Nacharbeiten fortzuführen, wählen Sie Exit aus und drücken Sie Enter.
Die Zeitzone einstellen Wenn Sie die Zeitzone richtig einstellen, kann Ihr Rechner automatisch regional bedingte Zeitumstellungen ausführen und andere von der Zeitzone abhängige Funktionen handhaben. Das folgende Beispiel gilt für den Osten der USA. Ihre Auswahl hängt vom geographischen Standort Ihres Rechners ab. User Confirmation Requested Would you like to set this machine's time zone now? [ Yes ] No Um die Zeitzone einzustellen, wählen Sie &gui.yes; und drücken Enter. User Confirmation Requested Is this machine's CMOS clock set to UTC? If it is set to local time or you don't know, please choose NO here! Yes [ No ] Je nachdem ob die Systemzeit die Zeitzone UTC verwendet, wählen Sie &gui.yes; oder &gui.no; aus. Bestätigen Sie die Auswahl mit der Taste Enter.
Das Gebiet auswählen
Wählen Sie mit den Pfeiltasten das richtige Gebiet aus und drücken Sie Enter.
Das Land auswählen
Wählen Sie mit den Pfeiltasten das richtige Land aus und drücken Sie Enter.
Die Zeitzone auswählen
Wählen Sie mit den Pfeiltasten die richtige Zeitzone aus drücken Sie Enter. Confirmation Does the abbreviation 'EDT' look reasonable? [ Yes ] No Wenn die angezeigte Abkürzung der Zeitzone richtig ist, bestätigen Sie diese mit der Taste Enter.
Linux-Kompatibilität User Confirmation Requested Would you like to enable Linux binary compatibility? [ Yes ] No Wenn Sie &gui.yes; auswählen und Enter drücken, können Sie Linux-Software auf &os; laufen lassen. Später wird dazu die notwendige Software installiert. Wenn Sie über FTP installieren, müssen Sie mit dem Internet verbunden sein. Einige FTP-Server bieten nicht alle verfügbare Software an. Es kann sein, dass die nötige Software für die Linux-Kompatibilität nicht installiert werden kann, dies können Sie später jedoch nachholen. Die Maus konfigurieren Mit einer 3-Tasten-Maus können Sie Texte auf der Konsole und in Programmen markieren und einfügen (cut and paste). Wenn Sie eine 2-Tasten-Maus besitzen, können Sie eine 3-Tasten-Maus emulieren. Lesen Sie dazu nach der Installation die Hilfeseite &man.moused.8;. Das folgende Beispiel zeigt die Konfiguration einer nicht-USB-Maus (PS/2 oder serielle Maus): User Confirmation Requested Does this system have a non-USB mouse attached to it? [ Yes ] No Wählen Sie &gui.no; für eine USB-Maus und &gui.yes; für eine andere Maus aus und drücken Sie Enter.
Das Mausprotokoll festlegen
Markieren Sie mit den Pfeiltasten Type und drücken Sie press Enter.
Das Mausprotokoll festlegen
Im Beispiel wurde eine PS/2-Maus verwendet, sodass die Vorgabe Auto passend war. Sie können das Protokoll mit den Pfeiltasten ändern. Stellen Sie sicher, dass &gui.ok; aktiviert ist und verlassen Sie das Menü mit der Taste Enter.
Den Mausport einstellen
Wählen Sie mit den Pfeiltasten Port und drücken Sie die Taste Enter.
Den Mausport einstellen
Im Beispiel wurde eine PS/2-Maus verwendet, sodass die Vorgabe PS/2 richtig war. Sie können den Port mit den Pfeiltasten ändern. Bestätigen Sie die Auswahl mit der Taste Enter.
Den Mouse-Daemon aktivieren
Wählen Sie nun mit den Pfeiltasten Enable aus und drücken Sie die Taste Enter, um den Mouse-Daemon zu aktivieren und zu testen.
Den Mouse-Daemon testen
Bewegen Sie die Maus hin und her und prüfen Sie, dass sich der Mauszeiger entsprechend bewegt. Wenn alles in Ordnung ist, wählen Sie &gui.yes; aus und drücken Sie Enter. Wenn sich die Maus nicht richtig verhält, wurde sie nicht korrekt konfiguriert. Wählen Sie in diesem Fall &gui.no; und versuchen Sie, die Einstellungen zu korrigieren. Um mit den Nacharbeiten fortzufahren, wählen Sie mit den Pfeiltasten Exit aus und drücken Sie Enter.
Tom Rhodes Beigetragen von Weitere Netzwerkdienste einrichten Anfänger ohne Vorwissen finden das Einrichten von Netzwerkdiensten oft deprimierend. Netzwerke und das Internet sind für moderne Betriebssysteme von entscheidender Bedeutung. Es ist daher wichtig, die Netzwerkfunktionen von &os; zu kennen. Die von &os; angebotenen Netzwerkdienste können Sie während der Installation kennen lernen. Netzwerkdienste sind Programme, die Eingaben aus dem Netzwerk entgegennehmen. Es wird große Mühe darauf verwendet, dass diese Programme keinen Schaden verursachen. Leider können auch Programmierern Fehler unterlaufen und es gibt Fälle, in denen Fehler in Netzwerkdiensten von Angreifern ausgenutzt wurden. Es ist daher wichtig, dass Sie nur Dienste aktivieren, die Sie benötigen. Im Zweifallsfall sollten Sie einen Dienst solange nicht aktivieren, bis Sie herausfinden, dass Sie den Dienst benötigen. Einen Dienst können Sie später immer noch mit sysinstall oder in der Datei /etc/rc.conf aktivieren. Wählen Sie den Menüpunkt Networking und es erscheint ein Menü wie das nachstehende:
Netzwerkdienste – obere Hälfte
Die erste Option, Interfaces, wurde schon in konfiguriert. Sie können daher diesen Punkt überspringen. Der Punkt AMD aktiviert einen Dienst, der automatisch Dateisysteme einhängt. Normalerweise wird der Dienst zusammen mit dem NFS-Protokoll (siehe unten) verwendet, um automatisch entfernte Dateisysteme einzuhängen. Dieser Menüpunkt erfordert keine weitere Konfiguration. Der nächste Menüpunkt ist AMD Flags. Wenn Sie den Punkt auswählen, erscheint ein Fenster, in dem Sie AMD-spezifische Optionen eingeben können. Die nachstehenden Optionen sind schon vorgegeben: -a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map Die Option legt das Verzeichnis fest (hier /.amd_mnt), unter dem Dateisysteme eingehangen werden. Die Option legt die Protokolldatei fest. Wenn syslogd verwendet wird, werden alle Meldungen an den Daemon syslogd gesendet. Das Verzeichnis /host dient zum Zugriff auf exportierte Verzeichnisse von entfernten Rechnern, das Verzeichnis /net dient zum Zugriff auf exportierte Verzeichnisse von entfernten IP-Adressen. Die Datei /etc/amd.map enthält die Einstellungen für von AMD verwaltete Dateisysteme. FTP anonymous Die Auswahl Anon FTP erlaubt Anonymous-FTP-Verbindungen. Wählen Sie diese Option, wenn Sie einen Anonymous-FTP-Server einrichten wollen. Seien Sie sich über die Sicherheitsrisiken bewusst, wenn Sie Anonymous-FTP erlauben. Die Sicherheitsrisiken und die Konfiguration von Anonymous-FTP werden in einem gesonderten Fenster erklärt, das aufgeht, wenn Sie diese Option auswählen. Der Menüpunkt Gateway konfiguriert das System, wie vorher erläutert, als Gateway. Wenn Sie während der Installation den Rechner aus Versehen als Gateway konfiguriert haben, können Sie dies hier wieder rückgängig machen. Der Menüpunkt Inetd konfiguriert, wie schon oben besprochen, den Daemon &man.inetd.8;. Die Auswahl Mail konfiguriert den Mail Transfer Agent (MTA) des Systems. Wenn Sie diesen Punkt auswählen, erscheint das folgende Menü:
Den <acronym>MTA</acronym> festlegen
In diesem Menü wählen Sie aus, welcher MTA installiert und benutzt wird. Ein MTA ist ein Mail-Server, der E-Mails an lokale Empfänger oder an Empfänger im Internet ausliefert. Die Auswahl Sendmail installiert das verbreitete sendmail (in &os; die Voreinstellung). Die Auswahl Sendmail local verwendet sendmail als MTA, deaktiviert aber den Empfang von E-Mails aus dem Internet. Postfix und Exim sind ähnlich wie Sendmail. Beide Programme liefern E-Mails aus und einige Anwender verwenden lieber eines der beiden Programme als MTA. Nachdem Sie einen MTA ausgewählt haben (oder beschlossen haben, keinen MTA zu benutzen), erscheint wieder das Menü Netzwerkdienste. Der nächste Menüpunkt ist NFS client. Die Auswahl NFS client erlaubt es dem System, mit einem NFS-Server zu kommunizieren. Ein NFS-Server stellt mithilfe des NFS-Protokolls Dateisysteme für andere Systeme auf dem Netzwerk bereit. Wenn der Rechner alleine für sich steht, können Sie diesen Menüpunkt auslassen. Wahrscheinlich müssen Sie noch weitere Einstellungen vornehmen; der beschreibt die Einstellungen für NFS-Server und NFS-Clients. Der Menüpunkt NFS server richtet einen NFS-Server auf dem Rechner ein. Durch die Auswahl dieses Punktes werden die für Remote-Procedure-Call (RPC) benötigten Dienste gestartet. Mit RPC werden Routinen auf entfernten Rechnern aufgerufen. Der nächste Punkt, Ntpdate, konfiguriert die Zeitsynchronisation. Wenn Sie diesen Punkt auswählen, erscheint das folgende Menü:
Ntpdate konfigurieren
Wählen Sie aus diesem Menü einen nahe liegenden Server aus. Die Zeitsynchronisation mit einem nahe liegenden Server ist, wegen der geringeren Latenzzeit, genauer als die Synchronisation mit einem weiter entfernten Server. Der nächste Menüpunkt ist PCNFSD. Wenn Sie diesen Punkt auswählen, wird net/pcnfsd aus der Ports-Sammlung installiert. Dieses nützliche Werkzeug stellt NFS-Authentifizierungsdienste für Systeme bereit, die diese Dienste nicht anbieten (beispielsweise Microsofts &ms-dos;). Um die nächsten Menüpunkte zu sehen, müssen Sie herunterblättern:
Netzwerkdienste – untere Hälfte
Die Programme &man.rpcbind.8;, &man.rpc.statd.8; und &man.rpc.lockd.8; werden für Remote-Procedure-Calls (RPC) benutzt. Das Programm rpcbind verwaltet die Kommunikation zwischen NFS-Servern und NFS-Clients und ist für den Betrieb eines NFS-Servers erforderlich. Der Daemon rpc.statd hält zusammen mit dem Daemon rpc.statd des entfernten Rechners den Status der Verbindung. Der Status einer Verbindung wird normalerweise in der Datei /var/db/statd.status festgehalten. Der nächste Menüpunkt ist rpc.lockd, der Dateisperren (file locks) bereitstellt. rpc.lockd wird normalerweise zusammen mit dem Daemon rpc.statd benutzt, der festhält welche Rechner Sperren anfordern und wie oft Sperren angefordert werden. Beide Dienste sind wunderbar zur Fehlersuche geeignet, doch werden Sie zum Betrieb von NFS-Servern und NFS-Clients nicht benötigt. Der nächste Punkt in der Auswahl ist Routed, der Routing-Daemon. Das Programm &man.routed.8; verwaltet die Routing-Tabelle, entdeckt Multicast-Router und stellt die Routing-Tabelle auf Anfrage jedem mit dem Netz verbundenen Rechner zur Verfügung. Der Daemon wird hauptsächlich auf Gateways eines lokalen Netzes eingesetzt. Wenn Sie den Punkt auswählen müssen Sie den Ort des Programms angeben. Die Vorgabe können Sie mit der Taste Enter übernehmen. Anschließend werden Sie nach den Kommandozeilenoptionen für routed gefragt. Vorgegeben ist die Option . Der nächste Menüpunkt ist Rwhod. Wenn Sie diesen Punkt auswählen, wird während des Systemstarts der Daemon &man.rwhod.8; gestartet. Das Kommando rwhod schickt Broadcast-Meldungen in das Netz oder empfängt diese im Consumer-Mode. Die Funktion der Werkzeuge wird in den Hilfeseiten &man.ruptime.1; und &man.rwho.1; beschrieben. Der vorletzte Menüpunkt aktiviert den Daemon &man.sshd.8;, den OpenSSH Secure-Shell-Server. Wo möglich sollte SSH anstelle von telnet und FTP eingesetzt werden. Der Secure-Shell-Server erstellt verschlüsselte und daher sichere Verbindungen zwischen zwei Rechnern. TCP Extensions ist der letzte Menüpunkt. Diese Auswahl aktiviert die TCP-Erweiterungen aus RFC 1323 und RFC 1644. Obwohl dies auf vielen Rechnern die Verbindungsgeschwindigkeit erhöht, können durch diese Option auch Verbindungsabbrüche auftreten. Auf Servern sollte diese Option nicht aktiviert werden, auf Einzelmaschinen kann diese Option nützlich sein. Wenn Sie die Netzwerkdienste eingerichtet haben, blättern Sie zum Menüpunkt Exit hoch, um die Nacharbeiten fortzusetzen.
Den X-Server einrichten Der X-Server kann erst nach einer erfolgreichen Installation von &os; eingerichtet werden. Weitere Informationen zur Installation und Konfiguration des X-Servers enthält des Handbuchs. Wenn Sie eine graphische Benutzeroberfläche, wie KDE oder GNOME verwenden wollen, müssen Sie einen X-Server einrichten. Pakete installieren Pakete (packages) sind schon übersetzte Programme und sind ein zweckmäßiger Weg, Programme zu installieren. Beispielhaft wird im Folgenden die Installation eines Paketes gezeigt. In diesem Schritt können auch weitere Pakete installiert werden. Nach der Installation können Sie mit sysinstall (vor &os; 5.2 /stand/sysinstall) zusätzliche Pakete installieren. User Confirmation Requested The FreeBSD package collection is a collection of hundreds of ready-to-run applications, from text editors to games to WEB servers and more. Would you like to browse the collection now? [ Yes ] No Nachdem Sie [ Yes ] ausgewählt und Enter gedrückt haben, gelangen Sie in die Paketauswahl:
Die Paketkategorie aussuchen
Es stehen nur die Pakete zur Auswahl, die sich auf dem momentanen Installationsmedium befinden. Wenn Sie All auswählen, werden alle Pakete angezeigt. Sie können die Anzeige auf die Pakete einer Kategorie beschränken. Wählen Sie mit den Pfeiltasten die Kategorie aus und drücken Sie die Taste Enter. Ein Menü mit allen Paketen der ausgewählten Kategorie erscheint:
Pakete auswählen
Im gezeigten Bildschirm ist das Paket bash ausgewählt. Sie können weitere Pakete auswählen, indem Sie die Pakete mit den Pfeiltasten markieren und die Taste Space drücken. In der unteren linken Ecke des Bildschirms wird eine Kurzbeschreibung des ausgewählten Pakets angezeigt. Die Taste Tab wechselt zwischen dem zuletzt ausgesuchten Paket, &gui.ok; und &gui.cancel;. Wenn Sie die zu installierenden Pakete ausgewählt haben, drücken Sie einmal Tab, um &gui.ok; zu markieren. Drücken Sie dann Enter, um wieder in die Paketauswahl zu gelangen. Die rechte und die linke Pfeiltaste wechseln ebenfalls zwischen &gui.ok; und &gui.cancel;. Mit diesen Tasten können Sie auch &gui.ok; auswählen und dann mit Enter zur Paketauswahl zurückkehren.
Pakete installieren
Benutzen Sie die Taste Tab und die Pfeiltasten um [ Install ] auszuwählen. Drücken Sie anschließend die Taste Enter. Sie müssen jetzt die Installation der Pakete bestätigen:
Paketinstallation bestätigen
Die Paketinstallation wird gestartet, wenn Sie &gui.ok; auswählen und Enter drücken. Den Verlauf der Installation können Sie anhand der angezeigten Meldungen verfolgen; achten Sie dabei auf Fehlermeldungen. Nach der Paketinstallation können Sie die Nacharbeiten fortsetzen. Wenn Sie keine Pakete ausgewählt haben und die Nacharbeiten fortsetzen möchten, wählen Sie trotzdem [ Install ] aus.
Benutzer und Gruppen anlegen Während der Installation sollten Sie mindestens ein Benutzerkonto anlegen, sodass Sie das System ohne das Konto root benutzen können. Normalerweise ist die Root-Partition recht klein und läuft schnell voll, wenn Sie Anwendungen unter dem root-Konto laufen lassen. Vor der größten Gefahr warnt der nachstehende Hinweis: User Confirmation Requested Would you like to add any initial user accounts to the system? Adding at least one account for yourself at this stage is suggested since working as the "root" user is dangerous (it is easy to do things which adversely affect the entire system). [ Yes ] No Der Bildschirm auf Deutsch: Bestätigung erforderlich Wollen Sie Benutzerkonten anlegen? Wir empfehlen, mindestens ein Konto für sich selbst anzulegen, da es gefährlich ist, unter "root" zu arbeiten (es ist leicht, Befehle einzugeben, die das System nachhaltig beeinträchtigen). [ Yes ] No Um ein Benutzerkonto anzulegen, wählen Sie &gui.yes; aus und drücken Enter.
Benutzerkonto auswählen
Markieren Sie User mit den Pfeiltasten und drücken Sie die Taste Enter.
Benutzerkonto anlegen
Wählen Sie die Felder zum Ausfüllen mit der Taste Tab aus. Zur Hilfe werden die nachstehenden Beschreibungen werden im unteren Teil des Bildschirms angezeigt: Login ID Der Name des Benutzerkontos (verpflichtend). UID Die numerische ID dieses Kontos. Wenn Sie das Feld leer lassen, wird eine ID automatisch zugeteilt. Group Die diesem Konto zugeordnete Login-Gruppe. Wenn Sie das Feld leer lassen, wird automatisch eine Gruppe zugeteilt. Password Das Passwort des Benutzerkontos. Füllen Sie dieses Feld sehr sorgfätig aus. Full name Der vollständige Name des Benutzers (Kommentarfeld). Member groups Die Gruppen, in denen dieses Konto Mitglied ist (das Konto erhält Zugriffsrechte auf Dateien dieser Gruppe). Home directory Das Heimatverzeichnis des Benutzerkontos. Wenn Sie das Feld leer lassen, wird das Verzeichnis automatisch festgelegt. Login shell Die Login-Shell des Kontos. Wenn Sie das Feld leer lassen, wird /bin/sh als Login-Shell festgesetzt. Im Beispiel wurde die Login-Shell von /bin/sh zu der vorher installierten /usr/local/bin/bash geändert. Tragen Sie keine Shell ein, die nicht existiert, da sich sonst nicht anmelden können. In der BSD-Welt wird häufig die C-Shell benutzt, die Sie mit /bin/tcsh angeben können. Damit ein Wechsel auf den Superuser root möglich ist, wurde dem Benutzerkonto die Gruppe wheel zugeordnet. Wenn Sie zufrieden sind, drücken Sie &gui.ok;. Es erscheint wieder das Benutzer-Menü:
Benutzermenü verlassen
Weitere Gruppen können, wenn Sie die Anforderungen schon kennen, zu diesem Zeitpunkt angelegt werden. Nach der Installation können Sie Gruppen mit dem Werkzeug sysinstall (vor &os; 5.2 /stand/sysinstall) anlegen. Wenn Sie alle Benutzer angelegt haben, wählen Sie mit den Pfeiltasten Exit aus und drücken Sie die Taste Enter.
Das <username>root</username>-Passwort festlegen Message Now you must set the system manager's password. This is the password you'll use to log in as "root". [ OK ] - [ Press enter to continue ] + [ Press enter or space ] Um das root-Passwort festzulegen, drücken Sie die Taste Enter. Sie müssen das Passwort zweimal eingeben. Stellen Sie sicher, dass Sie das Passwort nicht vergessen. Beachten Sie, dass bei der Eingabe das Passwort weder ausgegeben wird noch Sterne angezeigt werden. - Changing local password for root. -New password : + New password : Retype new password : Nach der erfolgreichen Eingabe des Passworts kann die Installation fortgesetzt werden. Die Installation beenden Wenn Sie noch weitere Netzwerkkarten konfigurieren oder weitere Einstellungen vornehmen wollen, können Sie das jetzt tun. Sie können die Einstellungen auch nach der Installation mit sysinstall (/stand/sysinstall vor &os; 5.2) vornehmen. User Confirmation Requested Visit the general configuration menu for a chance to set any last options? Yes [ No ] Um in das Hauptmenü zurückzukehren, wählen Sie mit den Pfeiltasten &gui.no; aus und drücken Sie Enter.
Die Installation beenden
Wählen Sie mit den Pfeiltasten [X Exit Install] aus und drücken Sie die Taste Enter. Sie müssen das Beenden der Installation bestätigen: User Confirmation Requested Are you sure you wish to exit? The system will reboot (be sure to - remove any floppies from the drives). + remove any floppies/CDs/DVDs from the drives). [ Yes ] No Wählen Sie &gui.yes; aus und entfernen Sie die Diskette aus dem Laufwerk, wenn Sie von einer Diskette gestartet haben. Das CD-Laufwerk ist bis zum Neustart des Systems verriegelt. Entfernen Sie die CD zügig wenn der Rechner startet. Achten Sie beim Neustart des Systems auf eventuell auftauchende Fehlermeldungen.
&os; starten Start von &os; auf einem &i386; Wenn alles funktioniert hat, laufen viele Meldungen über den Bildschirm und schließlich erscheint ein Anmeldeprompt. Um sich die Meldungen anzusehen. drücken Sie die Taste Scroll-Lock. Sie können dann mit den Tasten PgUp und PgDn blättern. Wenn Sie erneut Scroll-Lock drücken, kehren Sie zum Anmeldeprompt zurück. Es kann sein, dass der Puffer zu klein ist, um alle Meldungen anzuzeigen. Nachdem Sie sich angemeldet haben, können Sie sich mit dem Kommando dmesg alle Meldungen ansehen. Melden Sie sich bitte mit dem Benutzerkonto an (rpratt im Beispiel), das Sie während der Installation eingerichtet haben. Arbeiten Sie mit root nur dann wenn es erforderlich ist. Die nachfolgende Abbildung zeigt typische Startmeldungen (Versionsangaben entfernt): Copyright (c) 1992-2002 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. Timecounter "i8254" frequency 1193182 Hz CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU) Origin = "AuthenticAMD" Id = 0x580 Stepping = 0 Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX> AMD Features=0x80000800<SYSCALL,3DNow!> real memory = 268435456 (262144K bytes) config> di sn0 config> di lnc0 config> di le0 config> di ie0 config> di fe0 config> di cs0 config> di bt0 config> di aic0 config> di aha0 config> di adv0 config> q avail memory = 256311296 (250304K bytes) Preloaded elf kernel "kernel" at 0xc0491000. Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c. md0: Malloc disk Using $PIR table, 4 entries at 0xc00fde60 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0 isa0: <ISA bus> on isab0 atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0 usb0: <VIA 83C572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0 ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at device 10.0 on pci0 ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit) isa0: too many dependant configs (8) isa0: unexpected small tag 14 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model Generic PS/2 mouse, device ID 0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x1 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/15 bytes threshold ppbus0: IEEE1284 device found /NIBBLE Probing for PnP devices on ppbus0: plip0: <PLIP network interface> on ppbus0 lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port ppi0: <Parallel I/O> on ppbus0 ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33 ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33 acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4 Mounting root from ufs:/dev/ad0s1a swapon: adding /dev/ad0s1b as swap device Automatic boot in progress... /dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation) /dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation) /dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation) /dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS /dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation) Doing initial network setup: hostname. ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1 ether 52:54:05:de:73:1b lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 Additional routing options: IP gateway=YES TCP keepalive=YES routing daemons:. additional daemons: syslogd. Doing additional network setup:. Starting final network daemons: creating ssh RSA host key Generating public/private rsa1 key pair. Your identification has been saved in /etc/ssh/ssh_host_key. Your public key has been saved in /etc/ssh/ssh_host_key.pub. The key fingerprint is: cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com creating ssh DSA host key Generating public/private dsa key pair. Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com. setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib /usr/local/lib a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout starting standard daemons: inetd cron sshd usbd sendmail. Initial rc.i386 initialization:. rc.i386 configuring syscons: blank_time screensaver moused. Additional ABI support: linux. Local package initialization:. Additional TCP options:. FreeBSD/i386 (k6-2.example.com) (ttyv0) login: rpratt Password: Das Erzeugen der RSA- und DSA-Schlüssel kann auf langsamen Maschinen lange dauern. Die Schlüssel werden nur beim ersten Neustart erzeugt, spätere Neustarts sind schneller. Wenn der X-Server konfiguriert ist und eine Oberfläche ausgewählt wurde, können Sie X mit dem Kommando startx starten. Start von &os; auf einer Alpha Alpha Nach der Installation können Sie &os; von der SRM-Eingabeaufforderung mit einem Befehl wie dem folgenden starten: >>>BOOT DKC0 Der Befehl weist die Firmware an, von dem angegebenen Laufwerk zu starten. Damit &os; künftig automatisch startet, geben Sie die folgenden Befehle ein: >>> SET BOOT_OSFLAGS A >>> SET BOOT_FILE '' >>> SET BOOTDEF_DEV DKC0 >>> SET AUTO_ACTION BOOT Beim Start von &os; erscheinen ähnliche Meldungen, wie beim Start von &os; auf einem &i386;-System. &os; herunterfahren Es ist wichtig, dass Sie das Betriebssystem richtig herunterfahren. Wechseln Sie zunächst mit dem Befehl su zum Superuser; Sie müssen dazu das root-Passwort eingeben. Der Wechsel auf den Superuser gelingt nur, wenn der Benutzer ein Mitglied der Gruppe wheel ist. Ansonsten melden Sie sich direkt als Benutzer root an. Der Befehl shutdown -h now hält das System an. The operating system has halted. Please press any key to reboot. Sie können den Rechner ausschalten, nachdem die Meldung Please press any key to reboot erschienen ist. Wenn Sie stattdessen eine Taste drücken, startet das System erneut. Sie können das System auch mit der Tastenkombination Ctrl Alt Del neu starten. Sie sollten diese Tastenkombination allerdings nicht gewohnheitsmäßig benutzen.
Fehlersuche Installation Fehlersuche Dieser Abschnitt behandelt häufig auftretende Installationsprobleme. Weiterhin enthält er Hinweise wie &os; parallel mit &ms-dos; oder &windows; betrieben wird. Wenn etwas schief geht Aufgrund der Beschränkungen der PC-Architektur ist eine zuverlässige Geräteerkennung nicht möglich. Falls die Geräteerkennung fehlschlägt, können Sie einige Dinge versuchen. Sehen Sie in den Hardware Notes Ihrer &os;-Version nach, ob Ihre Hardware unterstützt wird. Wenn Ihre Hardware unterstützt wird und sich der Installationsprozess aufhängt oder sonstige Probleme auftauchen, müssen Sie einen angepassten Kernel erstellen, da Ihre Hardware in diesem Fall nicht vom GENERIC-Kernel unterstützt wird. Der Kernel auf den Startdisketten verwendet die Werkseinstellungen für IRQs, IO-Adressen und DMA-Kanäle. Geänderte Einstellungen müssen Sie daher in der Kernelkonfigurationsdatei angeben, damit &os; diese Geräte korrekt erkennt. Es ist auch möglich, dass die Suche nach einem nicht vorhandenen Gerät dazu führt, dass die Erkennung eines vorhandenen Geräts fehlschlägt. In diesem Fall sollten Sie nicht vorhandene Geräte, deren Einstellungen sich mit vorhandenen Geräten überschneiden, deaktivieren. Einige Installationsprobleme können Sie vermeiden oder umgehen, indem Sie die Firmware der Hardware, insbesondere die Firmware der Systemplatine, aktualisieren. Die Firmware der Systemplatine ist das BIOS. Die meisten Hardware-Hersteller bieten aktuelle Firmware und Anleitungen zur Aktualisierung der Firmware auf dem Internet an. Viele Hersteller raten davon ab, ohne guten Grund das BIOS zu aktualisieren. Die Aktualisierung kann fehlschlagen und den BIOS-Chip dauerhaft beschädigen. - - Vorhandene &ms-dos;-Partitionen bearbeiten - - - Partitionen - &ms-dos; - - - Viele Benutzer wollen &os; auf PCs - installieren, auf denen sich schon ein - µsoft;-Betriebssystem befindet. Bei diesem Vorhaben - unterstützt das Werkzeug FIPS. - Das Werkzeug befindet sich auf der Installations-CD-ROM im - Verzeichnis tools - oder kann von den &os;-Spiegeln - heruntergeladen werden. - - Das Werkzeug FIPS teilt - eine bestehende &ms-dos;-Partition auf. Der erste Teil - enthält die Daten der alten Partition, der zweite - Teil steht für die Installation von &os; zur - Verfügung. Vorher muss die &ms-dos;-Partition - defragmentiert werden. Klicken Sie im Explorer mit - der rechten Maustaste das Laufwerk an und wählen - Sie Defragmentieren aus. Alternativ können Sie - die Norton Disk Tools benutzen. - Nachdem das Laufwerk defragmentiert ist, können Sie - FIPS aufrufen. Folgen Sie einfach - den Anweisungen des Werkzeugs. Nach einem Neustart - können Sie &os; in die freie Slice installieren. - Den Platzbedarf der Installation können Sie im - Menü Distributions von - sysinstall abschätzen. - - Von PowerQuest - stammt das nützliche Werkzeug - &partitionmagic;. Diese - Anwendung bietet weit mehr Funktionen als - FIPS. Benutzen Sie - &partitionmagic;, wenn Sie - die verwendeten Betriebssysteme oft wechseln wollen. - Das Produkt kostet allerdings Geld; wenn Sie &os; - installieren und beibehalten wollen, ist wahrscheinlich - FIPS das Richtige für - Sie. - - &ms-dos;- und &windows;-Dateisysteme benutzen Mit Double Space™ komprimierte Dateisysteme werden zurzeit von &os; nicht unterstützt. Damit &os; auf die Daten zugreifen kann, müssen Sie das Dateisystem daher dekomprimieren. Rufen Sie dazu den Compression Agent aus dem Menü Start > Programs > System Tools auf. Unter &os; hängen Sie &ms-dos;-Dateisysteme (FAT16 sowie FAT32) mit dem Kommando &man.mount.msdosfs.8; ein. Dazu ein Beispiel: &prompt.root; mount_msdosfs /dev/ad0s1 /mnt Das &ms-dos;-Dateisystem befindet sich hier auf der ersten Partition der primären Platte. Dies kann bei Ihnen anders sein. Die Anordnung der Partitionen entnehmen Sie den Ausgaben von dmesg und mount. Erweiterte &ms-dos;-Partitionen werden für gewöhnlich hinter die &os;-Partitionen gelegt: Die Nummern der von &ms-dos; benutzten Slices ist höher als die der Slices von &os;. Beispielsweise kann /dev/ad0s1 die erste &ms-dos; Partition sein, /dev/ad0s2 die &os;-Partition sein und /dev/ad0s3 eine erweiterte &ms-dos;-Partition. Einige Anfänger verwirrt diese Situation zunächst. Analog werden NTFS-Partitionen mit dem Kommando &man.mount.ntfs.8; eingehangen. - Fragen und Antworten für Alpha-Benutzer - - - Alpha - - - Dieser Abschnitt beantwortet häufig gestellte - Fragen zur &os;-Installation auf Alpha-Systemen. + Fragen und Antworten zu häufig auftretenden + Problemen - Kann ich &os; von der ARC- oder Alpha-BIOS-Konsole - starten? - - - ARC - Alpha-BIOS - SRM - - - Nein, wie Compaq Tru64 und VMS startet - &os; nur von der SRM-Konsole. - - - - - - Hilfe, ich habe keinen Platz! Muss ich - zuerst alles löschen? + Mein System hängt sich beim Testen der Hardware + auf, oder es verhält sich seltsam während der + Installation oder das Diskettenlaufwerk wird nicht + getestet. - - - Leider ja. - - - - - - Kann ich Compaq Tru64- oder VMS-Dateisysteme - einhängen? - - + - Zurzeit nicht. + &os; 5.0 and above makes extensive use of the system ACPI + service on the i386, amd64 and ia64 platforms to aid in system + configuration if it's detected during boot. Unfortunately, + some bugs still exist in both the ACPI driver and within system + motherboards and BIOS. The use of ACPI can be disabled by setting + the hint.acpi.0.disabled hint in the third stage + boot loader: + + set hint.acpi.0.disabled="1" + + This is reset each time the system is booted, so it is + necessary to add hint.acpi.0.disabled="1" + to the file + /boot/loader.conf. More information about the + boot loader can be found in the &os; Handbook. + + + + + I go to boot from the hard disk for the first time + after installing &os;, the kernel loads and probes my + hardware, but stops with messages like: + + changing root device to ad1s1a panic: cannot mount root + What is wrong? What can I do? + + What is this + bios_drive:interface(unit,partition)kernel_name + thing that is displayed with the boot help? + + + There is a longstanding problem in the case where the + boot disk is not the first disk in the system. The BIOS + uses a different numbering scheme to &os;, and working + out which numbers correspond to which is difficult to get + right. + + In the case where the boot disk is not the first disk + in the system, &os; can need some help finding it. There + are two common situations here, and in both of these cases, + you need to tell &os; where the root filesystem is. You + do this by specifying the BIOS disk number, the disk type + and the &os; disk number for that type. + + The first situation is where you have two IDE disks, + each configured as the master on their respective IDE + busses, and wish to boot &os; from the second disk. The + BIOS sees these as disk 0 and disk 1, while &os; sees + them as ad0 and + ad2. + + &os; is on BIOS disk 1, of type + ad and the &os; disk number is 2, so + you would say: + + 1:ad(2,a)kernel + + Note that if you have a slave on the primary bus, the + above is not necessary (and is effectively wrong). + + The second situation involves booting from a SCSI disk + when you have one or more IDE disks in the system. In this + case, the &os; disk number is lower than the BIOS disk + number. If you have two IDE disks as well as the SCSI disk, + the SCSI disk is BIOS disk 2, type da and + &os; disk number 0, so you would say: + + 2:da(0,a)kernel + + To tell &os; that you want to boot from BIOS disk + 2, which is the first SCSI disk in the system. If you only + had one IDE disk, you would use '1:' instead. + + Once you have determined the correct values to use, + you can put the command exactly as you would have typed it + in the /boot.config file using a + standard text editor. Unless instructed otherwise, &os; + will use the contents of this file as the default response + to the boot: prompt. + + + + + I go to boot from the hard disk for the first time + after installing &os;, but the Boot Manager prompt just + prints F? at the boot menu each time but + the boot won't go any further. + + + The hard disk geometry was set incorrectly in the + Partition editor when you installed &os;. Go back into + the partition editor and specify the actual geometry of your + hard disk. You must reinstall &os; again from the + beginning with the correct geometry. + + If you are failing entirely in figuring out the + correct geometry for your machine, here's a tip: Install a + small DOS partition at the beginning of the disk and install + &os; after that. The install program will see the DOS + partition and try to infer the correct geometry from it, + which usually works. + + The following tip is no longer recommended, but is left here + for reference: + +
+ If you are setting up a truly dedicated &os; + server or workstation where you don't care for (future) + compatibility with DOS, Linux or another operating system, + you've also got the option to use the entire disk (`A' in + the partition editor), selecting the non-standard option + where &os; occupies the entire disk from the very first + to the very last sector. This will leave all geometry + considerations aside, but is somewhat limiting unless + you're never going to run anything other than &os; on a + disk. +
+
+
+ + + The system finds my &man.ed.4; network card, but I + keep getting device timeout errors. + + + Your card is probably on a different IRQ from what is + specified in the /boot/device.hints file. The ed driver does + not use the `soft' configuration by default (values entered + using EZSETUP in DOS), but it will use the software + configuration if you specify -1 in the hints + for the interface. + + Either move the jumper on the card to a hard + configuration setting (altering the kernel settings if + necessary), or specify the IRQ as -1 + by setting the hint hint.ed.0.irq="-1" + This will tell the kernel to + use the soft configuration. + + Another possibility is that your card is at IRQ 9, + which is shared by IRQ 2 and frequently a cause of problems + (especially when you have a VGA card using IRQ 2!). You + should not use IRQ 2 or 9 if at all possible.
- + Valentino Vaschetto Beigetragen von Anspruchsvollere Installationen Dieser Abschnitt beschreibt die Installation von &os; in besonderen Situationen. &os; auf einem System ohne Monitor oder Tastatur installieren Installation headless (serielle Konsole) serielle Konsole Diese Methode wird als headless install (kopflose Installation) bezeichnet, da die Maschine, auf die &os; installiert werden soll, entweder keinen Monitor angeschlossen hat oder über keine VGA-Karte verfügt. Wie kann &os; dennoch installiert werden? Eben mithilfe einer seriellen Konsole. Im Wesentlichen ist eine serielle Konsole eine andere Maschine, die Ein- und Ausgaben für eine andere Maschine bereitstellt. Um über eine serielle Konsole zu installieren, erstellen Sie zunächst die Startdisketten, wie in beschrieben. Damit ein Systemstart mit der seriellen Konsole möglich ist, müssen die Disketten entsprechend der nachstehenden Anleitung angepasst werden: Die Startdisketten für eine serielle Konsole anpassen mount Wenn Sie ein System mit den frisch erstellten Disketten starten, läuft der normale &os;-Installationsprozess an. Diese Installation soll aber über die serielle Konsole gesteuert werden. Hängen Sie mit dem Kommando &man.mount.8; die Diskette boot.flp ein: &prompt.root; mount /dev/fd0 /mnt Wechseln Sie in das Verzeichnis /mnt: &prompt.root; cd /mnt In diesem Verzeichnis können Sie den Start über eine serielle Konsole einstellen. Erstellen Sie die Datei boot.config mit dem Inhalt /boot/loader -h. Diese Zeile weist den Bootloader an, mit der seriellen Konsole zu starten. &prompt.root; echo "/boot/loader -h" > boot.config Nachdem Sie die Diskette angepasst haben, hängen Sie die Diskette mit dem Kommando &man.umount.8; wieder aus: &prompt.root; cd / &prompt.root; umount /mnt Sie können die Diskette nun aus dem Laufwerk entfernen. Das Nullmodemkabel anschließen Nullmodemkabel Sie müssen beide Maschinen mit einem Nullmodemkabel verbinden. Schließen Sie das Nullmodemkabel an die seriellen Schnittstellen beider Maschinen an. Sie können kein direktes serielles Kabel verwenden, Nullmodemkabel besitzen gekreuzte Leitungen. Die Installation starten Sie können die Installation jetzt starten. Legen Sie die boot.flp-Diskette in das Laufwerk der Maschine ein, auf der Sie &os; installieren wollen. Schalten Sie anschließend die Maschine ein. Die Verbindung mit der zur installierenden Maschine herstellen cu Mit dem Kommando &man.cu.1; verbinden Sie sich mit der zu installierenden Maschine: &prompt.root; cu -l /dev/cuad0 Unter &os; 5.X müssen Sie /dev/cuaa0 anstelle von /dev/cuad0 verwenden. Fertig! Über die cu-Sitzung können Sie nun die zu installierende Maschine steuern. Sie erhalten die Aufforderung die Diskette kern1.flp einzulegen. Anschließend legen Sie den Terminaltyp fest. Wählen Sie die FreeBSD color console aus und fahren wie gewohnt mit der Installation fort. Eigene Installationsmedien herstellen Im Folgenden ist mit Installations-CD eine CD-ROM oder DVD gemeint, die Sie gekauft oder selbst hergestellt haben. Oft müssen Sie eigene Installationsmedien erzeugen. Dies können physische Medien wie Bänder sein oder Installationsquellen sein, aus denen sysinstall Dateien herunterlädt, beispielsweise ein lokaler FTP-Server oder eine &ms-dos;-Partition. Beispiele: Im lokalen Netzwerk befinden sich viele Maschinen, Sie besitzen allerdings nur eine Installations-CD. Den Inhalt der Installations-CD wollen Sie auf einem lokalem FTP-Server bereitstellen. Zur Installation wird der lokale FTP-Server anstelle eines Internet-Servers benutzt. Sie haben eine Installations-CD, allerdings erkennt &os; im Gegensatz zu &ms-dos;/&windows; das CD- oder DVD-Laufwerk nicht. Sie können die Installationsdateien auf eine DOS-Partition desselben Rechners kopieren und &os; von der DOS-Partition installieren. Der Rechner, auf dem Sie &os; installieren wollen, besitzt kein CD- oder DVD-Laufwerk. Ein anderer Rechner, zu dem eine serielle oder parallele Verbindung besteht, besitzt allerdings ein CD- oder DVD-Laufwerk. Sie wollen ein Band erzeugen, mit dem Sie &os; installieren können. Eine Installations-CD-ROM erzeugen Mit jeder Release stellt das &os;-Project für jede unterstützte Architektur mindestens zwei CD-Abbilder (ISO-Images) zur Verfügung. Wenn Sie einen CD-Brenner besitzen, können Sie diese Abbilder brennen und damit &os; installieren. Wenn Sie einen CD-Brenner besitzen und über eine gute Internet-Verbindung verfügen, ist das die preiswerteste Art, &os; zu installieren. Das richtige Abbild herunterladen Die ISO-Abbilder für jedes Releases können Sie von ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version oder einem nahe gelegenen Spiegel herunterladen. Ersetzen Sie arch und version durch passende Werte. Das Verzeichnis enthält die folgenden Abbilder: FreeBSD 5.<replaceable>X</replaceable> sowie 6.<replaceable>X</replaceable>-ISO-Abbilder Dateiname Inhalt Version-RELEASE-Architektur-bootonly.iso Enthält alles, was Sie benötigen, um um den FreeBSD-Kernel zu laden und die Installationsoberfläche zu starten. Die zu installierenden Dateien müssen über FTP oder eine andere geeignete Quelle bezogen werden. version-RELEASE-Architektur-disc1.iso Alles, was Sie für die Installation von FreeBSD benötigen. Zusätzlich ist ein Live-Dateisystem enthalten, das gemeinsam mit der Repair-Funktion von sysinstall verwendet werden kann. version-RELEASE-Architektur-disc2.iso Die &os;-Dokumentation (bis einschließlich &os; 6.1) und so viele Pakete Dritter, wie auf dem Installationsmedium Platz hatten. version-RELEASE-arch-docs.iso Die &os;-Dokumentation (ab &os; 6.2).
Sie benötigen nur eines der beiden Abbilder bootonly oder disc1. Laden Sie bitte nicht beide Abbilder herunter, das disc1-Abbild enthält alles, was das bootonly-Abbild enthält. Benutzen Sie das bootonly-Abbild, wenn Sie eine preiswerte Internet-Anbindung besitzen. Mit diesem Abbild können Sie &os; installieren. Software Dritter können Sie anschließend mithilfe des Ports-Systems () herunterladen. Benutzen Sie das disc1-Abbild, wenn Sie &os; installieren wollen und das Installationsmedium eine angemessene Auswahl an Software Dritter enthalten soll. Die zusätzlichen Abbilder sind nützlich aber nicht notwendig, insbesondere wenn Sie eine schnelle Internet-Verbindung besitzen.
Die CDs brennen Sie müssen die Abbilder auf eine CD brennen. Das Brennen von CDs unter &os; wird in erläutert (sehen Sie sich insbesondere und an). Wenn Sie die CDs unter einem anderen Betriebssystem erstellen, benutzen Sie die entsprechenden Werkzeuge des Betriebssystems. Die Abbilder sind Standard-ISO-Abbilder und können von vielen Brennprogrammen verarbeitet werden.
Wenn Sie eine angepasste Version von FreeBSD erstellen wollen, sollten Sie den Release Engineering Article lesen.
Einen lokalen FTP-Server einrichten Installation Netzwerkinstallation FTP Die Dateien auf der Installations-CD sind genauso angeordnet wie auf den &os;-FTP-Servern. Daher ist es einfach, einen lokalen FTP-Server für die &os;-Installation über ein Netzwerk einzurichten. Hängen Sie auf dem FTP-Server die CD-ROM in das Verzeichnis /cdrom ein: &prompt.root; mount /cdrom Legen Sie ein Konto für Anonymous-FTP an. Dazu editieren Sie die Datei /etc/passwd mit dem Kommando &man.vipw.8; und fügen die nachstehende Zeile hinzu: ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent Stellen Sie sicher, dass der FTP-Dienst in der Datei /etc/inetd.conf aktiviert ist. Jeder, der Ihren Rechner über das Netzwerk erreicht, kann nun &os; über FTP installieren. In sysinstall wird dazu FTP als Installationsmedium wählt. Der FTP-Server wird durch die Auswahl Other (andere als die vorgegebenen Server) und anschließende Eingabe von ftp://Ihr Rechner festgelegt. Wenn die Version der für die FTP-Installation Ihrer Clients verwendeten Bootmedien (normalerweise Disketten) nicht exakt der von Ihnen auf Ihrem lokalen FTP-Server angebotenen Version entspricht, ist sysinstall nicht in der Lage, die Installation abzuschließen. Sind die Versionsnummern unterschiedlich, können Sie durch das Aufrufen des Punktes Options sysinstall dazu zwingen, die Installation dennoch abzuschließen. Dazu setzen Sie den Namen der Distribution auf any. Diese Vorgehensweise ist in Ihrem lokalen Netzwerk, das durch eine Firewall geschützt ist, völlig in Ordnung. Wenn Sie FTP für Rechner auf dem Internet (und nicht für lokale Rechner) anbieten, zieht Ihr Server die Aufmerksamkeit von Crackern und andere Unannehmlichkeiten auf sich. Achten Sie in diesem Fall darauf, dass Sie gute Sicherheitsverfahren anwenden. Installationsdisketten erstellen Installation Disketten Wenn Sie, was wir nicht empfehlen, von Disketten installieren müssen, weil Disketten das einzig unterstützte Installationsmedium sind oder Sie es sich einfach schwer machen wollen, müssen Sie zunächst einige Disketten vorbereiten. Sie müssen mindestens den Inhalt des Verzeichnisses base auf 1.44 MB Disketten kopieren. Wenn Sie die Disketten unter &ms-dos; erstellen, müssen Sie die Disketten mit dem DOS-Kommando FORMAT formatieren. Unter &windows; können Sie Disketten mithilfe des Explorers formatieren (klicken Sie mit der rechten Maustaste auf das A:-Laufwerk und wählen Sie Format aus). Vertrauen Sie vorformatierten Disketten nicht; formatieren Sie die Disketten zur Sicherheit immer selbst. In der Vergangenheit waren vorformatierte Disketten der Verursacher vieler Probleme. Falls Sie die Disketten auf einer &os;-Maschine erstellen, sollten Sie immer noch formatieren. Allerdings brauchen Sie kein DOS-Dateisystem auf den Disketten anzulegen. Mit den Kommandos bsdlabel und newfs können Sie das Dateisystem UFS verwenden, wie im nachstehenden Beispiel für 3.5" 1.44 MB Disketten gezeigt: &prompt.root; fdformat -f 1440 fd0.1440 &prompt.root; bsdlabel -w fd0.1440 floppy3 &prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/fd0 Anschließend können Sie die Disketten wie ein normales Dateisystem einhängen und beschreiben. Nachdem Sie die Disketten formatiert haben, kopieren Sie die Dateien der Distribution auf die Disketten. Die Dateien der Distribution sind in Stücke geteilt, sodass fünf Dateien auf eine 1.44 MB Diskette passen. Kopieren Sie die gewünschten Distribution auf Disketten, wobei Sie so viele Dateien wie möglich auf eine Diskette kopieren. Jede Distribution wird auf der Diskette in einem eigenen Verzeichnis abgelegt, beispielsweise a:\base\base.aa, a:\base\base.ab und so weiter. Die Datei base.inf muss unbedingt auf die erste Diskette des base-Diskettensatzes kopiert werden, damit das Installationsprogramm feststellen kann, wie viele Disketten geladen werden müssen, um die Distribution wieder zusammenzusetzen. Im Installationsprozess wählen Sie als Installationsmedium Floppy aus. Folgen Sie dann den gegebenen Anweisungen. Von einer &ms-dos;-Partition installieren Installation von einer &ms-dos;-Partition Um eine Installation von einer &ms-dos;-Partition vorzubereiten, kopieren Sie Dateien der Distributionen in das Verzeichnis freebsd direkt unterhalb des Wurzelverzeichnisses (zum Beispiel c:\freebsd). In diesem Verzeichnis muss sich dieselbe Verzeichnisstruktur wie auf dem Installationsmedium befinden. Wenn Sie die Dateien von einer Installations-CD kopieren, empfehlen wir den DOS-Befehl xcopy. Das nachstehende Beispiel bereitet eine minimale Installation von &os; vor: C:\> md c:\freebsd C:\> xcopy e:\bin c:\freebsd\bin\ /s C:\> xcopy e:\manpages c:\freebsd\manpages\ /s Im Beispiel wurde angenommen, dass auf Laufwerk C: ausreichend Platz vorhanden ist und die CD-ROM Laufwerk E: ist. Wenn Sie kein CD-Laufwerk besitzen, können Sie die Distributionen von ftp.FreeBSD.org herunterladen. Jede Distribution liegt in einem eigenen Verzeichnis. Beispielsweise liegt die Base-Distribution im Verzeichnis &rel.current;/base/. Kopieren Sie jede Distribution, die Sie von einer &ms-dos;-Partition installieren wollen (und für die Platz ist) in das Verzeichnis c:\freebsd. Für eine minimale Installation benötigen Sie nur die Base-Distribution. Ein Installationsband erstellen Installation von einem QIC/SCSI-Band Falls Sie nicht über FTP oder von einer CD-ROM installieren können, ist die Installation von Band wahrscheinlich die einfachste Methode. Das Installationsprogramm erwartet, dass sich die Distributionen im tar-Format auf dem Band befinden. Von den Distributions-Dateien erstellen Sie das Installationsband einfach mit dem Kommando tar: &prompt.root; cd /freebsd/distdir &prompt.root; tar cvf /dev/rwt0 dist1 ... dist2 Stellen Sie während der Installation sicher, dass Sie über genügend freien Platz in einem temporären Verzeichnis (das Sie festlegen können) verfügen. Das temporäre Verzeichnis muss den gesamten Inhalt des Bands aufnehmen können. Da auf Bänder nicht wahlfrei zugegriffen werden kann, benötigt diese Installationsmethode temporär sehr viel Platz. Das Band muss sich vor dem Neustart mit der Startdiskette im Laufwerk befinden. Ansonsten wird das Band während der Geräteerkennung vielleicht nicht erkannt. Eine Netzwerkinstallation vorbereiten Installation Netzwerkinstallation seriell (SLIP oder PPP) Installation Netzwerkinstallation parallel (PLIP) Installation Netzwerkinstallation Ethernet Sie können drei Verbindungsarten für eine Netzwerkinstallation benutzen: Eine Ethernet-Verbindung, eine serielle Verbindung (SLIP oder PPP), oder eine parallele Verbindung (PLIP, Laplink-Kabel). Die schnellste Netzwerkinstallation ist natürlich mit einer Netzwerkkarte möglich. &os; unterstützt die meisten der üblichen Netzwerkkarten. Eine Liste der unterstützten Netzwerkkarten ist in den Hardware-Notes jedes Releases enthalten. Wenn Sie eine unterstützte PCMCIA-Netzwerkkarte benutzen, stellen Sie sicher, dass die Karte eingesteckt ist, bevor der Laptop eingeschaltet wird. Leider unterstützt &os; das Einstecken von PCMCIA-Karten während der Installation noch nicht. Für eine Netzwerkinstallation müssen Sie Ihre IP-Adresse, die Netzwerkmaske und den Namen Ihres Rechner kennen. Wenn Sie über eine PPP-Verbindung installieren und keine feste IP-Adresse besitzen, braucht Sie der vorgehende Satz nicht zu beunruhigen. Sie können eine IP-Adresse dynamisch von Ihrem ISP beziehen. Fragen Sie Ihren Systemadministrator nach den richtigen Netzwerkeinstellungen. Wenn Sie andere Rechner über Namen anstatt über IP-Adressen erreichen wollen, brauchen Sie zudem einen Nameserver und möglicherweise die Adresse eines Gateways (mit PPP ist das die Adresse des ISPs), über den Sie den Nameserver erreichen. Wenn Sie von einem FTP-Server über einen HTTP-Proxy installieren wollen, benötigen Sie außerdem noch die Adresse des Proxy-Servers. Wenn Sie nicht alle oder zumindest die meisten der benötigten Daten kennen, sollten Sie wirklich vor der Installation mit Ihrem Systemadministrator oder ISP reden! Die SLIP-Unterstützung ist recht einfach und auf feste Verbindungen, beispielsweise ein serielles Kabel zwischen einem Laptop und einem anderen Rechner, beschränkt. Die Verbindung muss fest sein, da die Installation mit SLIP keine Einwahl unterstützt. Eine Einwahl ist mit PPP möglich, das Sie, wenn möglich, gegenüber SLIP bevorzugen sollten. Wenn Sie ein Modem benutzen, ist PPP ziemlich sicher die einzige Wahl. Stellen Sie sicher, dass Sie die Daten Ihres Service Providers bereitliegen haben, da Sie während der Installation die Daten früh benötigen. Wenn Sie PAP oder CHAP benutzen, um sich mit Ihrem ISP zu verbinden (wenn Sie unter &windows; kein Skript benötigen, um die Verbindung herzustellen), brauchen Sie an der ppp-Eingabeaufforderung nur das Kommando dial abzusetzen. Ansonsten müssen Sie sich mit Modem-spezifischen AT-Kommandos bei Ihrem ISP einwählen (PPP stellt nur einen einfachen Terminal-Emulator zur Verfügung). Weiteres über PPP erfahren Sie im Abschnitt User-PPP des Handbuchs und im PPP-Abschnitt der FAQ. Bei Problemen können Sie mit dem Kommando set log local Meldungen auf den Bildschirm umleiten. Wenn eine feste Verbindung zu einer anderen &os;-Maschine besteht (2.0 Release oder neuer), sollten Sie ein paralleles Laplink-Kabel in Betracht ziehen. Über eine parallele Verbindung sind höhrere Geschwindigkeiten als über eine serielle Verbindung (typischerweise bis zu 50 kByte/s) möglich. Daher ist die Installation über eine parallele Verbindung schneller als eine Installation über eine serielle Verbindung. Eine NFS-Installation vorbereiten Installation Netzwerkinstallation NFS Eine NFS-Installation ist unkompliziert. Kopieren Sie einfach die Distributionen auf einen NFS-Server und wählen Sie NFS als Installationsmedium aus. Wenn der NFS-Server nur Verbindungen über privilegierte Ports (Ports kleiner 1024) annimmt, setzen Sie vor der Installation die Option NFS Secure im Menü Options. Wenn Sie eine schlechte Netzwerkkarte besitzen, die sehr langsam ist, wählen Sie die Option NFS Slow. Damit die NFS-Installation funktioniert, muss der NFS-Server auch Unterverzeichnisse von exportierten Verzeichnissen zum Einhängen freigeben. Wenn beispielsweise die Distribution von &os; &rel.current; unter ziggy:/usr/archive/stuff/FreeBSD liegt, muss der Rechner ziggy erlauben, das Verzeichnis /usr/archive/stuff/FreeBSD einzuhängen. Es reicht nicht, dass ziggy erlaubt das Verzeichnis /usr oder /usr/archive/stuff einzuhängen. Unter &os; werden diese Freigaben in der Datei /etc/exports mit der Option eingestellt. Die nötigen Einstellungen können auf einem anderen NFS-Server unterschiedlich sein. Wenn Sie vom NFS-Server die Fehlermeldung permission denied erhalten, dann haben Sie wahrscheinlich die Freigaben nicht richtig konfiguriert.
diff --git a/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml b/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml index aaab631485..e3052e447d 100644 --- a/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml @@ -1,3400 +1,3400 @@ Bezugsquellen für FreeBSD CD-ROM und DVD Verleger FreeBSD-Pakete FreeBSD-Pakete (FreeBSD-CDs, zusätzliche Software und gedruckte Dokumentation) erhalten Sie von mehreren Händlern:
CompUSA WWW:
Frys Electronics WWW:
FreeBSD-CDs und -DVDs Die FreeBSD-CDs und -DVDs werden von vielen Online-Händlern angeboten:
BSD Mall by Daemon News PO Box 161 Nauvoo, IL 62354 USA Telefon: +1 866 273-6255 Fax: +1 217 453-9956 E-Mail: sales@bsdmall.com - WWW: + WWW:
BSD-Systems E-Mail: info@bsd-systems.co.uk WWW:
FreeBSD Mall, Inc. 3623 Sanford Street Concord, CA 94520-1405 USA - Telefon: +1 925 674-0783 + Telefon: +1 925 240-6652 Fax: +1 925 674-0821 E-Mail: info@freebsdmall.com WWW:
Dr. Hinner EDV St. Augustinus-Str. 10 D-81825 München Germany Telefon: (089) 428 419 WWW:
Ikarios 22-24 rue Voltaire 92000 Nanterre France WWW:
JMC Software Ireland Telefon: 353 1 6291282 WWW:
Linux CD Mall Private Bag MBE N348 Auckland 1030 New Zealand Telefon: +64 21 866529 WWW:
The Linux Emporium Hilliard House, Lester Way Wallingford OX10 9TA United Kingdom Telefon: +44 1491 837010 Fax: +44 1491 837016 WWW:
Linux+ DVD Magazine Lewartowskiego 6 Warsaw 00-190 Poland Telefon: +48 22 860 18 18 E-Mail: editors@lpmagazine.org WWW:
Linux System Labs Australia 21 Ray Drive Balwyn North VIC - 3104 Australia Telefon: +61 3 9857 5918 Fax: +61 3 9857 8974 WWW:
LinuxCenter.Ru Galernaya Street, 55 Saint-Petersburg 190000 Russia Telefon: +7-812-3125208 E-Mail: info@linuxcenter.ru WWW:
Lieferanten Wenn Sie FreeBSD-CD-ROM-Produkte weiterverkaufen möchten, kontaktieren Sie einen der folgenden Lieferanten:
Cylogistics 809B Cuesta Dr., #2149 Mountain View, CA 94040 USA Telefon: +1 650 694-4949 Fax: +1 650 694-4953 E-Mail: sales@cylogistics.com WWW:
Ingram Micro 1600 E. St. Andrew Place Santa Ana, CA 92705-4926 USA Telefon: 1 (800) 456-8000 WWW:
Kudzu, LLC 7375 Washington Ave. S. Edina, MN 55439 USA Telefon: +1 952 947-0822 Fax: +1 952 947-0876 E-Mail: sales@kudzuenterprises.com
LinuxCenter.Ru Galernaya Street, 55 Saint-Petersburg 190000 Russia Telefon: +7-812-3125208 E-Mail: info@linuxcenter.ru WWW:
Navarre Corp 7400 49th Ave South New Hope, MN 55428 USA Telefon: +1 763 535-8333 Fax: +1 763 535-0341 WWW:
FTP-Server Die offiziellen Quellen von FreeBSD sind mit anonymous FTP über ein weltweites Netz von FTP-Spiegeln erhältlich. Obwohl über eine gute Anbindung verfügt, sollten Sie einen Spiegel in Ihrer Nähe verwenden (insbesondere, wenn Sie selber einen Spiegel einrichten wollen). Die Datenbank der FreeBSD-Spiegel ist aktueller als die folgende Liste, da sie im Gegensatz zu einer statischen Liste die Informationen aus dem DNS erhält. Sie können FreeBSD auch über anonymous FTP von den folgenden Spiegeln beziehen. Wenn Sie FreeBSD über anonymous FTP beziehen wollen, wählen Sie bitte einen Spiegel in Ihrer Nähe. Die unter Haupt-Spiegel aufgeführten Spiegel stellen normalerweise das komplette FreeBSD-Archiv (alle momentan erhältlichen Versionen für jede unterstützte Architektur) zur Verfügung. Wahrscheinlich geht es aber schneller, wenn Sie einen Spiegel in Ihrer Nähe benutzen. Die Länder-Spiegel stellen die neusten Versionen für die beliebtesten Architekturen bereit, sie stellen aber unter Umständen nicht das komplette FreeBSD-Archiv bereit. Auf alle Server kann mit anonymous FTP zugegriffen werden, einige Server bieten auch andere Zugriffsmethoden an. Die zur Verfügung stehenden Zugriffsmethoden sind bei jedem Server in Klammern angegeben. &chap.mirrors.ftp.inc; Anonymous CVS <anchor id="anoncvs-intro">Einführung CVS anonymous Anonymous CVS (oder anoncvs) dient zum Synchronisieren mit entfernten Repositories und steht mit den CVS Werkzeugen, die im FreeBSD Basissystem enthalten sind, zur Verfügung. Benutzer von FreeBSD können damit unter anderem lesende Operationen auf den Anoncvs Servern des FreeBSD Projects durchführen, ohne über besondere Berechtigungen zu verfügen. Um es zu benutzen, setzen Sie einfach die CVSROOT Umgebungsvariable auf einen Anoncvs Server und geben beim Login mit cvs login das Passwort anoncvs an. Danach können Sie mit &man.cvs.1; wie auf jedes lokale Repository (allerdings nur lesend) zugreifen. cvs login speichert Passwörter zur Authentifizierung an einem CVS Server in der Datei .cvspass in Ihrem HOME-Verzeichnis. Wenn diese Datei beim ersten Benutzen von cvs login nicht existiert, erhalten Sie vielleicht eine Fehlermeldung. In diesem Fall legen Sie einfach eine leere .cvspass Datei an und melden sich erneut an. CVSup und Anoncvs bieten dieselbe Funktionalität, die folgenden Kriterien helfen Ihnen zu entscheiden, welche Methode Sie benutzen sollen. CVSup geht wesentlich effizienter mit Netzwerk-Ressourcen um und ist auch technisch ausgereifter. Allerdings müssen Sie zuerst einen speziellen Client installieren und konfigurieren, bevor Sie CVSup benutzen können. Weiterhin können Sie mit CVSup nur relativ große Teile der Quellen, die Sammlungen genannt werden, synchronisieren. Im Gegensatz dazu können Sie mit Anoncvs jede beliebige Datei oder indem Sie einfach den CVS Namen des Moduls angeben, ein beliebiges Programm, wie ls oder grep, bearbeiten. Natürlich können Sie mit Anoncvs nur lesend auf ein CVS Repository zugreifen. Wenn Sie lokal mit dem FreeBSD-Repository entwickeln wollen, dann ist CVSup die einzige Wahl. <anchor id="anoncvs-usage">Benutzen von Anonymous CVS Setzen Sie einfach die CVSROOT Umgebungsvariable, um &man.cvs.1; das CVS Repository eines FreeBSD Anoncvs-Servers bekannt zu geben. Zurzeit stehen folgende Server zur Verfügung: Deutschland: :pserver:anoncvs@anoncvs.de.FreeBSD.org:/home/ncvs (rsh, pserver, ssh, ssh/2022) Frankreich: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs (Das Passwort für pserver ist anoncvs, ssh-Zugriffe verwenden kein Passwort.) Japan: :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs (Benutzen Sie cvs login und das Passwort anoncvs.) Österreich: :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs (Benutzen Sie cvs login und ein beliebiges Passwort.) Taiwan: :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs (pserver: Benutzen Sie cvs login und ein beliebiges Passwort. ssh: kein Passwort.) SSH2 HostKey: 1024 e8:3b:29:7b:ca:9f:ac:e9:45:cb:c8:17:ae:9b:eb:55 /etc/ssh/ssh_host_dsa_key.pub USA: freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs (nur ssh ohne Passwort). SSH HostKey: 1024 a1:e7:46:de:fb:56:ef:05:bc:73:aa:91:09:da:f7:f4 root@sanmateo.ecn.purdue.edu SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 ssh_host_dsa_key.pub USA: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs (nur ssh ohne Passwort). SSH2 HostKey: 2048 53:1f:15:a3:72:5c:43:f6:44:0e:6a:e9:bb:f8:01:62 /etc/ssh/ssh_host_dsa_key.pub Mit CVS können Sie praktisch jede Version von FreeBSD, die schon einmal existiert hat (oder in manchen Fällen existieren wird) auschecken. Sie sollten daher damit vertraut sein, wie Sie mit Tags unter &man.cvs.1; arbeiten (die Option). Zudem müssen Sie die Namen der Tags im FreeBSD-Repository kennen. Es gibt zwei verschiedene TagsTags sind symbolische Namen, die im Repository vergeben werden. : Tags, die Revisionen bezeichnen und Tags, die Zweige bezeichnen. Die Ersten sind statisch und fest an eine Revision gebunden. Ein Tag, das einen Zweig bezeichnet, bezieht sich dagegen zu einem gegebenen Zeitpunkt immer auf die aktuellste Revision. Da ein Tag eines Zweiges nicht an eine bestimmte Revision gebunden ist, kann sich dessen Bedeutung von heute auf morgen ändern. In finden Sie eine Liste der gültigen Tags. Beachten Sie bitte, dass keines der Tags auf die Ports-Sammlung anwendbar ist, da diese nicht über Zweige verfügt. Wenn Sie ein Tag eines Zweiges verwenden, erhalten Sie die aktuellsten Dateien dieses Entwicklungszweiges. Wenn Sie eine frühere Revision erhalten möchten, können Sie zum Beispiel einen Zeitpunkt mit der Option angeben. Weitere Informationen dazu entnehmen Sie bitte &man.cvs.1;. Beispiele Im Folgenden finden Sie einige Beispiele für den Umgang mit Anonymous CVS. Sie sollten sich aber die Manualpage von &man.cvs.1; sorgfältig durchlesen, bevor Sie anfangen. &man.ls.1; von -CURRENT auschecken &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs &prompt.user; cvs login Wenn Sie dazu aufgefordert werden, benutzen Sie ein beliebiges Passwort. &prompt.user; cvs co ls Den <filename>src/</filename>-Baum über SSH auschecken &prompt.user; cvs -d freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs co src The authenticity of host 'anoncvs.freebsd.org (128.46.156.46)' can't be establiestablished. DSA key fingerprint is 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known hosts. &man.ls.1; aus dem 6-STABLE-Zweig auschecken &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs &prompt.user; cvs login Wenn Sie dazu aufgefordert werden, benutzen Sie ein beliebiges Passwort. &prompt.user; cvs co -rRELENG_6 ls Änderungen in &man.ls.1; zwischen 5.3 RELEASE und 5.4 RELEASE (als unified diff) &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs &prompt.user; cvs login Wenn Sie dazu aufgefordert werden, benutzen Sie ein beliebiges Passwort. &prompt.user; cvs rdiff -u -rRELENG_5_3_0_RELEASE -rRELENG_5_4_0_RELEASE ls Gültige Modulnamen herausfinden &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs &prompt.user; cvs login Wenn Sie dazu aufgefordert werden, benutzen Sie ein beliebiges Passwort. &prompt.user; cvs co modules &prompt.user; more modules/modules Weitere Ressourcen Die folgenden Ressourcen sind nützlich, um den Umgang mit CVS zu lernen: CVS Tutorial von Cal Poly. CVS Home, die Homepage des CVS-Projekts. CVSweb das Web Interface zu CVS des FreeBSD Projekts. CTM CTM Mit CTM Abkürzung für CVS Through eMail können Sie einen entfernten Verzeichnisbaum mit einem zentralen Baum synchronisieren. Es wurde extra zum Synchronisieren der FreeBSD Quellen entwickelt, obwohl es mit der Zeit vielleicht auch andere Anwendungen geben wird. Zurzeit existiert leider so gut wie keine Dokumentation zum Erstellen der Deltas. Wenn Sie Hilfe benötigen oder CTM für andere Zwecke einsetzen wollen, wenden Sie sich bitte an die Mailingliste &a.ctm-users.name;. Warum soll ich <application>CTM</application> benutzen? Mit CTM erhalten Sie eine lokale Kopie des FreeBSD-Quellbaums, den es in mehreren Varianten gibt. Sie können das ganze Repository oder nur einen Zweig spiegeln. Wenn Sie ein aktiver FreeBSD-Entwickler mit einer schlechten oder gar keiner TCP/IP Verbindung sind, oder die Änderungen einfach automatisch zugesandt bekommen wollen, dann ist CTM das Richtige für Sie. Für die Zweige mit der meisten Aktivität müssen Sie sich täglich bis zu drei Deltas beschaffen, Sie sollten allerdings erwägen, die Deltas automatisch über E-Mail zu beziehen. Die Größe der Updates wird so klein wie möglich gehalten. Normalerweise sind sie kleiner als 5 kB, manchmal sind sie 10-50 kB groß (etwa jedes 10. Update) und ab und an werden Sie auch einmal ein Update mit 100 kB oder mehr erhalten. Sie sollten sich über die Vorbehalte gegen die Verwendung der Quellen anstelle eines offiziellen Releases bewusst sein. Das trifft besonders auf &os.current; zu, lesen Sie dazu bitte den Abschnitt &os.current;. Was brauche ich, um <application>CTM</application> zu benutzen? Zwei Sachen: Das CTM Programm und die initialen Deltas, von denen aus Sie auf die aktuellen Stände kommen. CTM ist schon seit der Version 2.0 Teil des FreeBSD-Basissystems. Sie finden es in /usr/src/usr.sbin/ctm, wenn Sie eine Kopie der Quellen besitzen. Die Deltas, die CTM verarbeitet, können Sie über FTP oder E-Mail beziehen. Wenn Sie über einen FTP Zugang zum Internet verfügen, erhalten Sie die Deltas unter der folgenden URL: Die Deltas werden auch von CTM Spiegeln bereitgehalten. Wechseln Sie in das passende Verzeichnisse zum Beispiel src-cur für &os.current; und laden Sie sich von dort die Deltas herunter. Sie können die Deltas auch über E-Mail beziehen. Abonnieren Sie dazu eine der CTM-Verteilerlisten. Über &a.ctm-cvs-cur.name; erhalten Sie den kompletten CVS-Baum, über &a.ctm-src-cur.name; erhalten Sie &os.current; und über &a.ctm-src-4.name; erhalten Sie den FreeBSD 4.X-Zweig. Wenn Sie nicht wissen, wie Sie eine der Mailinglisten abonnieren, folgen Sie einem der Verweise von oben oder besuchen Sie die Seite &a.mailman.lists.link;. Weitere Informationen erhalten Sie, wenn Sie dort auf die gewünschte Liste klicken. Benutzen Sie ctm_rmail, um die CTM Updates, die Sie per E-Mail empfangen, auszupacken und anzuwenden. Wenn Sie diesen Prozess automatisiert ablaufen lassen möchten, können Sie dazu einen Eintrag in /etc/aliases verwenden. Genauere Informationen finden Sie in der Manualpage von ctm_rmail. Sie sollten die Mailingliste &a.ctm-announce.name; abonnieren, egal wie Sie die CTM-Deltas erhalten. Ankündigungen, die den Betrieb des CTM-Systems betreffen, werden nur auf dieser Liste bekannt gegeben. Klicken Sie auf den Namen der Liste oder besuchen Sie die Seite &a.mailman.lists.link;, um diese Liste zu abonnieren. Initialisieren von <application>CTM</application> Bevor Sie die CTM Deltas benutzen können, brauchen Sie einen Startpunkt, auf den die nachfolgenden Deltas angewendet werden. Sie können natürlich mit einem leeren Verzeichnis beginnen. In diesem Fall benötigen Sie ein XEmpty-Delta, mit dem Sie den CTM-Verzeichnisbaum initialisieren. Wenn Sie Glück haben, finden Sie ein XEmpty-Delta, mit dem sie beginnen können, auf einer der CDs Ihrer Distribution. Da die Verzeichnisbäume mehrere Megabyte groß sind, sollten Sie nach Möglichkeit etwas schon vorhandenes benutzen. Wenn Sie eine -RELEASE CD besitzen, können Sie die Quellen von dieser CD benutzen. Sie ersparen sich damit das Übertragen großer Datenmengen. Die Deltas, mit denen Sie beginnen können, enthalten ein X in ihrem Namen, wie in src-cur.3210XEmpty.gz. Hinter dem X wird der Startpunkt der Deltas angegeben, in diesem Fall steht Empty für ein leeres Verzeichnis. Nach etwa 100 Deltas wird ein neues XEmpty-Delta erstellt. Mit ungefähr 75 Megabyte komprimierter Daten sind diese XEmpty-Deltas übrigens sehr groß. Nachdem Sie Ihren Startpunkt festgelegt haben, benötigen Sie alle Deltas mit einer höheren Nummer. Benutzen von <application>CTM</application> Um ein Delta einzuspielen, benutzen Sie das folgende Kommando: &prompt.root; cd /Pfad/zu/den/Quellen &prompt.root; ctm -v -v /Pfad/zu/den/Deltas/src-xxx.* CTM kann mit Deltas arbeiten, die mit gzip komprimiert wurden. Sie brauchen die Deltas vorher nicht mit gunzip zu dekomprimieren und sparen damit Plattenplatz. Ihr Quellbaum wird erst dann verändert, wenn CTM die Deltas sauber verarbeiten kann. Die Integrität der Deltas und ihre Anwendbarkeit auf den Quellbaum lassen sich durch die Angabe des Schalters -c überprüfen, CTM ändert in diesem Fall Ihren Quellbaum nicht. CTM verfügt über weitere Kommandozeilenoptionen, Informationen dazu finden Sie in der Manualpage oder dem Quellcode. Das war schon alles. Um Ihre Quellen aktuell zu halten, verwenden Sie CTM jedes Mal, wenn Sie neue Deltas bekommen. Löschen Sie die Deltas nicht, wenn Sie diese nur schwer wieder beschaffen können. Behalten Sie sie für den Fall, das etwas passiert. Auch wenn Sie nur Disketten besitzen, sollten Sie erwägen, die Deltas mit fdwrite zu sichern. Umgang mit lokalen Änderungen Entwickler wollen mit den Dateien im Quellbaum experimentieren und diese verändern. In beschränkter Weise werden lokale Änderungen von CTM unterstützt. Wenn CTM die Datei foo bearbeiten will, überprüft es zuerst ob die Datei foo.ctm existiert. Wenn diese Datei existiert, werden Änderungen in ihr anstatt in foo vorgenommen. Mit diesem Verfahren ist eine leichte Handhabung lokaler Änderungen möglich. Kopieren Sie die Dateien, die Sie ändern möchten, in Dateien, die das Suffix .ctm tragen. Sie können dann ungestört mit dem Quellcode arbeiten, während CTM die .ctm Dateien aktualisiert. Weitere <application>CTM</application>-Optionen Was wird aktualisiert? Eine Liste der Änderungen, die CTM an Ihrem Quellbaum vornehmen wird, erhalten Sie, wenn Sie die Option angeben. Das ist nützlich, wenn Sie Logs über die Änderungen führen wollen, geänderte Dateien vor- oder nachbearbeiten wollen, oder einfach ein bisschen paranoid sind. Sicherungen vor einer Aktualisierung erstellen Sie wollen vielleicht die Dateien, die durch eine CTM Aktualisierung verändert werden, sichern. Mit weisen Sie CTM an, alle Dateien, die durch ein CTM Delta verändert würden, nach backup-file zu sichern. Dateien ausschließen Manchmal wollen Sie nur bestimmte Teile aktualisieren oder nur bestimmte Dateien aus einer Folge von Deltas extrahieren. Sie können die Liste der Dateien, mit denen CTM arbeitet, einschränken, indem Sie reguläre Ausdrücke mit den Optionen und angeben. Wenn Sie eine aktuelle Kopie von lib/libc/Makefile aus den gesicherten CTM Deltas erhalten wollen, setzen Sie das folgende Kommando ab: &prompt.root; cd /wo/Sie/es/auspacken/wollen/ &prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.* Die Optionen und werden in der Reihenfolge angewandt, in der sie auf der Kommandozeile angegeben wurden. Eine Datei wird nur dann von CTM verarbeitet, wenn dies nach der Anwendung der Optionen und noch erlaubt ist. Pläne für <application>CTM</application> Mehrere: Hinzufügen eines Authentifizierungsmechanismus, damit gefälschte CTM-Deltas erkannt werden können. Aufräumen der CTM-Optionen, die mit der Zeit unübersichtlich und irreführend wurden. Verschiedenes Es gibt Deltas für die Ports-Sammlung, die aber nicht intensiv genutzt werden. CTM-Spiegel Die CTM-Deltas können Sie mit anonymous FTP von den folgenden Spiegeln beziehen. Versuchen Sie bitte einen Spiegel in Ihrer Nähe zu benutzen. Bei Problemen wenden Sie sich bitte an die Mailingliste &a.ctm-users.name;. Kalifornien, Bay Area, Offizieller Server Südafrika, Backup-Server für alte Deltas Taiwan/R.O.C. Wenn die Liste keinen Spiegel in Ihrer Nähe enthält oder Sie Probleme mit dem ausgewählten Spiegel haben, versuchen Sie einen Spiegel mit einer Suchmaschine, wie alltheweb, zu finden. Benutzen von CVSup Einführung CVSup ist eine Anwendung, die Verzeichnisbäume von einem entfernten CVS-Server bereitstellt und aktualisiert. Die Quellen von FreeBSD werden in einem CVS-Repository auf einer Entwicklungsmaschine in Kalifornien gepflegt. Mit CVSup können sich FreeBSD-Benutzer den eigenen Quellbaum auf aktuellem Stand halten. Zum Aktualisieren benutzt CVSup die Pull-Methode, bei der die Aktualisierungen vom Client angefragt werden. Der Server wartet dabei passiv auf Anfragen von Clients, das heißt er verschickt nicht unaufgefordert Aktualisierungen. Somit gehen alle Anfragen vom Client aus und die Benutzer müssen CVSup entweder manuell starten oder einen cron Job einrichten, um regelmäßig Aktualisierungen zu erhalten. CVSup in genau dieser Schreibweise bezeichnet die Anwendung, die aus dem Client cvsup und dem Server cvsupd besteht. cvsup läuft auf den Maschinen der Benutzer, cvsupd läuft auf jedem der FreeBSD-Spiegel. Wenn Sie die FreeBSD-Dokumentation und die Mailinglisten lesen, werden Sie oft auf Sup, dem Vorgänger von CVSup stoßen. CVSup wird in gleicher Weise wie Sup benutzt und verfügt sogar über Konfigurationsdateien, die kompatibel zu denen von Sup sind. Da CVSup schneller und flexibler als Sup ist, wird Sup vom FreeBSD Project nicht mehr benutzt. Mit csup gibt es in inzwischen auch eine in C geschriebene Neuimplementierung von CVSup. Der größte Vorteil dieser neuen Version ist neben einer höheren Geschwindigkeit der, dass dieses Programm nicht von der Sprache Modula-3 abhängig ist und Sie daher dieses Paket nicht mitinstallieren müssen. Ab &os; 6.2 ist csup bereits im Basissystem enthalten und kann sofort verwendet werden. Verwenden Sie hingegen eine ältere &os;-Version, können Sie &man.csup.1; über den Port net/csup installieren. Alternativ können Sie zur Installation auch ein vorkompiliertes Paket (Package) verwenden. csup unterstützt allerdings keinen CVS-Modus. Wollen Sie komplette Repositories spiegeln, müssen Sie also weiterhin CVSup einsetzen. Wollen Sie künftig csup einsetzen, überspringen Sie in den folgenden Ausführungen einfach den Abschnitt zur Installation von CVSup und ersetzen alle Vorkommen von CVSup durch csup. Installation von <application>CVSup</application> CVSup können Sie leicht installieren, wenn Sie das vorkompilierte Paket net/cvsup aus der Ports-Sammlung benutzen. Alternativ können Sie net/cvsup auch ausgehend von den Quellen bauen, doch seien Sie gewarnt: net/cvsup hängt vom Modula-3 System ab, das viel Zeit und Platz zum Herunterladen und Bauen braucht. Wenn Sie CVSup auf einer Maschine ohne &xfree86; oder &xorg;, beispielsweise einem Server, benutzen, stellen Sie sicher, dass Sie den Port ohne das CVSup-GUI, net/cvsup-without-gui verwenden. Wollen Sie csup unter &os; 6.1 oder älter installieren, können Sie dazu das vorkompilierte Paket net/csup oder den Port net/csup (zur Installation aus den Quellen) verwenden. Konfiguration von CVSup Das Verhalten von CVSup wird mit einer Konfigurationsdatei gesteuert, die supfile genannt wird. Beispiele für Konfigurationsdateien finden Sie in dem Verzeichnis . Ein supfile enthält die folgenden Informationen: Welche Dateien Sie erhalten wollen. Welche Versionen der Dateien Sie benötigen. Woher Sie die Dateien beziehen wollen. Wo Sie die erhaltenen Dateien speichern. Wo Sie die Status-Dateien aufbewahren wollen. In den folgenden Abschnitten erstellen wir ein typisches supfile indem wir nach und nach diese Punkte klären. Zuerst beschreiben wir aber den Aufbau dieser Konfigurationsdatei. Ein supfile ist eine Textdatei. Kommentare beginnen mit einem # und gelten bis zum Zeilenende. Leerzeilen und Zeilen, die nur Kommentare enthalten, werden ignoriert. Die anderen Zeilen legen die Dateien fest, die ein Benutzer erhalten will. Der Server organisiert verschiedene Dateien in einer Sammlung, deren Name auf einer Zeile angegeben wird. Nach dem Namen der Sammlung können mehrere durch Leerzeichen getrennte Felder folgen, die die oben angesprochenen Informationen festlegen. Es gibt zwei Arten von Feldern: Felder, die Optionen festlegen und Felder mit Parametern. Optionen bestehen aus einem Schlüsselwort, wie oder und stehen alleine. Ein Parameterfeld beginnt mit einem Schlüsselwort, dem = und ein Parameter, wie in , folgt. Dieses Feld darf keine Leerzeichen enthalten. In einem supfile werden normalerweise mehrere Sammlungen angefordert. Die erforderlichen Felder können explizit für jede Sammlung angegeben werden, dann werden jedoch die Zeilen ziemlich lang. Außerdem ist dieses Vorgehen sehr unhandlich, da die meisten Felder für alle Sammlungen gleich sind. CVSup bietet die Möglichkeit, Vorgaben für die Felder der Sammlungen festzulegen. Zeilen, die mit der Pseudo-Sammlung *default beginnen, legen Optionen und Parameter für nachfolgende Sammlungen im supfile fest. Der Vorgabewert kann in der Zeile einer bestimmten Sammlung überschrieben werden. Durch Hinzufügen weiterer *default Zeilen können die Vorgaben auch mitten im supfile überschrieben oder erweitert werden. Mit diesem Wissen können wir nun ein supfile erstellen, das den Quellbaum von FreeBSD-CURRENT anfordert und aktualisiert. Welche Dateien wollen Sie empfangen? Dateien werden von CVSup in Sammlungen organisiert. Die erhältlichen Sammlungen werden später beschrieben. Wir wollen den Quellbaum von FreeBSD empfangen, der in der Sammlung src-all enthalten ist. Das supfile enthält pro Zeile eine Sammlung, in diesem Fall also nur eine einzige Zeile: src-all Welche Versionen der Dateien werden benötigt? Mit CVSup können Sie jede Version der Quellen bekommen, da der cvsupd-Server seine Daten direkt aus dem CVS-Repository bezieht. Sie können die benötigten Versionen in den Parameterfeldern tag= und angeben. Achten Sie darauf, dass Sie das richtige tag=-Feld angeben. Einige Tags sind nur für spezielle Sammlungen gültig. Wenn Sie ein falsches Tag angeben oder sich verschreiben, wird CVSup Dateien löschen, die Sie wahrscheinlich gar nicht löschen wollten. Achten Sie insbesondere bei den ports-*-Sammlungen darauf, ausschließlich tag=. zu verwenden. Mit tag= wird ein symbolischer Name aus dem Repository angegeben. Es gibt zwei verschiedene Tags: Tags, die Revisionen bezeichnen und Tags, die Zweige bezeichnen. Die ersteren sind statisch und fest an eine Revision gebunden. Ein Tag, das einen Zweig bezeichnet, bezieht sich dagegen zu einem gegebenen Zeitpunkt immer auf die aktuellste Revision. Da ein Tag eines Zweiges nicht an eine bestimmte Revision gebunden ist, kann sich dessen Bedeutung von heute auf morgen ändern. zählt für Benutzer relevante Tags auf. Wenn Sie in der Konfigurationsdatei ein Tag, wie RELENG_4, angeben, müssen Sie diesem tag= vorstellen: tag=RELENG_4. Denken Sie daran, dass es für die Ports-Sammlung nur tag=. gibt. Achten Sie darauf, dass Sie den Namen eines Tags richtig angeben. CVSup kann nicht zwischen richtigen und falschen Tags unterscheiden. Wenn Sie sich bei der Angabe eines Tags vertippen, nimmt CVSup an, Sie hätten ein gültiges Tag angegeben, dem nur keine Dateien zugeordnet sind. Die Folge davon ist, dass Ihre vorhandenen Quellen gelöscht werden. Wenn Sie ein Tag angeben, das sich auf einen Zweig bezieht, erhalten Sie die aktuellsten Revisionen der Dateien auf diesem Zweig. Wenn Sie eine frühere Revision erhalten möchten, können Sie diese im Feld angeben. Einzelheiten dazu finden Sie in der Manualpage von cvsup. Wir möchten gerne FreeBSD-CURRENT beziehen und fügen die folgende Zeile am Anfang der Konfigurationsdatei ein: *default tag=. Eine wichtige Ausnahme ist wenn Sie weder ein tag=-Feld noch ein date=-Feld angeben. In diesem Fall erhalten Sie anstelle einer speziellen Revision die wirklichen RCS-Dateien aus dem CVS-Repository des Servers. Diese Vorgehensweise wird von Entwicklern bevorzugt, da sie mit einem eigenen Repository leicht die Entwicklungsgeschichte und Veränderungen von Dateien verfolgen können. Dieser Vorteil muss allerdings mit sehr viel Plattenplatz bezahlt werden. Woher sollen die Dateien bezogen werden? Im host=-Feld wird angegeben, woher cvsup die Dateien holen soll. Sie können hier jeden der CVSup-Spiegel angeben, doch sollten Sie einen Server in Ihrer Nähe auswählen. Für dieses Beispiel wollen wir den erfundenen Server cvsup99.FreeBSD.org verwenden: *default host=cvsup99.FreeBSD.org Bevor Sie CVSup laufen lassen, sollten Sie hier einen existierenden Server einsetzen. Den zu verwendenden Server können Sie auf der Kommandozeile mit überschreiben. Wo sollen die Dateien gespeichert werden? Im prefix=-Feld teilen Sie cvsup mit, wo die Dateien gespeichert werden sollen. In diesem Beispiel werden wir die Quelldateien direkt im Verzeichnisbaum für Quellen /usr/src ablegen. Das Verzeichnis src ist schon in der Sammlung, die wir beziehen enthalten, so dass wir die folgende Zeile angeben: *default prefix=/usr Wo sollen die Statusinformationen von cvsup gespeichert werden? cvsup legt in einem Verzeichnis Statusinformationen ab, die festhalten, welche Versionen schon empfangen wurden. Wir verwenden das Verzeichnis /var/db: *default base=/var/db Wenn das Verzeichnis für die Statusinformationen nicht existiert, sollten Sie es jetzt anlegen, da cvsup ohne dieses Verzeichnis nicht startet. Verschiedene Einstellungen: Eine weitere Zeile sollte normalerweise in jedem supfile sein: *default release=cvs delete use-rel-suffix compress Mit release=cvs wird angegeben, dass der Server das FreeBSD-Haupt-Repository abfragen soll, was praktisch immer der Fall ist (die Ausnahmen werden in diesem Text nicht diskutiert). delete erlaubt es CVSup, Dateien zu löschen. Diese Option sollten Sie immer angeben, damit CVSup Ihren Quellbaum auch wirklich aktuell halten kann. CVSup löscht nur Dateien für die es auch verantwortlich ist. Andere Dateien, die sich in einem Baum unter Kontrolle von CVSup befinden, werden nicht verändert. Wenn Sie wirklich etwas über das obskure use-rel-suffix erfahren wollen, lesen Sie bitte in der Manualpage nach, ansonsten geben Sie es einfach an und vergessen es. Wenn Sie compress angeben, werden Daten auf dem Kommunikationskanal komprimiert. Wenn Sie über eine T1-Leitung oder eine schnellere Netzanbindung verfügen, brauchen Sie diese Option vielleicht nicht. In allen anderen Fällen beschleunigt sie aber den Ablauf. Zusammenfassung: Das vollständige supfile unseres Beispiels sieht nun so aus: *default tag=. *default host=cvsup99.FreeBSD.org *default prefix=/usr *default base=/var/db *default release=cvs delete use-rel-suffix compress src-all Die <filename>refuse</filename> Datei CVSup benutzt die Pull-Methode, das heißt wenn sich ein Client mit einem Server verbindet, erhält er eine Liste der verfügbaren Sammlungen und wählt aus diesen die herunterzuladenden Dateien aus. In der Voreinstellung wählt der Client alle Dateien aus, die zu einer gegebenen Sammlung und zu einem gegebenen Tag passen. Dieses Verhalten ist aber nicht immer erwünscht, besonders wenn Sie die doc, ports oder www Verzeichnisbäume synchronisieren. Die wenigsten Leute beherrschen vier oder fünf Sprachen und benötigen Dateien mit speziellen Anpassungen für eine Sprache. Wenn Sie die Ports-Sammlung synchronisieren, können Sie anstelle von ports-all einzelne Ports, wie ports-astrology oder ports-biology angeben. Die doc und www Verzeichnisbäume verfügen aber nicht über Sammlungen für spezielle Sprachen. In diesem Fall müssen Sie eines der vielen eleganten Merkmale von CVSup benutzen: Die refuse Datei. Mit einer refuse Datei können Sie bestimmte Dateien einer Sammlung von der Übertragung ausschließen. Der Ort der refuse ist base/sup/refuse, wobei base in Ihrem supfile festgelegt wurde. Wir verwenden das Verzeichnis /var/db, der Ort der refuse Datei ist daher /var/db/sup/refuse. Das Format der refuse Datei ist einfach: Sie enthält eine Liste der Dateien und Verzeichnisse, die Sie nicht herunterladen wollen. Wenn Sie zum Beispiel die Dokumentation nicht in anderen Sprachen als Englisch lesen wollen, könnte Ihre refuse-Datei wie folgt aussehen: doc/bn_* doc/da_* doc/de_* doc/el_* doc/es_* doc/fr_* doc/it_* doc/ja_* doc/nl_* doc/no_* doc/pl_* doc/pt_* doc/ru_* doc/sr_* doc/tr_* doc/zh_* Die Aufzählung setzt sich für andere Sprachen fort. Eine vollständige Liste finden Sie im FreeBSD CVS Repository. Die refuse Datei spart Anwendern von CVSup, die über eine langsame Internetanbindung verfügen oder deren Internetverbindung zeitlich abgerechnet wird, wertvolle Zeit, da sie Dateien, die sie nicht benötigen, nicht mehr herunterladen müssen. Weitere Informationen zu refuse Dateien und anderen Eigenschaften von CVSup entnehmen Sie bitte der Manualpage. Ausführen von <application>CVSup</application> Wir können nun eine Aktualisierung mit der folgenden Kommandozeile starten: &prompt.root; cvsup supfile supfile gibt dabei das eben erstelle supfile an. Wenn Sie X11 benutzen, wird cvsup ein GUI starten. Drücken Sie go und schauen Sie zu. Das Beispiel aktualisiert die Dateien im Verzeichnisbaum /usr/src. Sie müssen cvsup als root starten, damit Sie die nötigen Rechte haben, die Dateien zu aktualisieren. Sie sind vielleicht ein bisschen nervös weil Sie das Programm zum ersten Mal anwenden und möchten zuerst einmal einen Testlauf durchführen. Legen Sie dazu ein temporäres Verzeichnis an und übergeben es auf der Kommandozeile von cvsup: &prompt.root; mkdir /var/tmp/dest &prompt.root; cvsup supfile /var/tmp/dest Aktualisierungen werden dann nur in dem angegebenen Verzeichnis vorgenommen. CVSup untersucht die Dateien in /usr/src, wird aber keine dieser Dateien verändern. Die veränderten Dateien finden Sie stattdessen in /var/tmp/dest/usr/src. Die Statusdateien von CVSup werden ebenfalls nicht geändert, sondern in dem angegebenen Verzeichnis abgelegt. Wenn Sie Leseberechtigung in /usr/src haben, brauchen Sie das Programm noch nicht einmal unter root laufen zu lassen. Wenn Sie X11 nicht benutzen wollen oder keine GUIs mögen, sollten Sie cvsup wie folgt aufrufen: &prompt.root; cvsup -g -L 2 supfile verhindert den Start des GUIs. Wenn Sie kein X11 laufen haben, passiert das automatisch, ansonsten müssen Sie diesen Schalter angeben. Mit gibt CVSup Einzelheiten zu jeder Aktualisierung aus. Die Wortfülle der Meldungen können Sie von bis einstellen. In der Voreinstellung werden nur Fehlermeldungen ausgegeben. Eine Zusammenfassung der Optionen von CVSup erhalten Sie mit cvsup -H. Genauere Informationen finden Sie in der Manualpage von CVSup. Wenn Sie mit dem Ablauf der Aktualisierung zufrieden sind, können Sie CVSup regelmäßig aus &man.cron.8; ausführen. In diesem Fall sollten Sie natürlich nicht das GUI benutzen. <application>CVSup</application> Sammlungen Die CVSup Sammlungen sind hierarchisch organisiert. Es gibt wenige große Sammlungen, die in kleinere Teilsammlungen unterteilt sind. Wenn Sie eine große Sammlung beziehen, entspricht das dem Beziehen aller Teilsammlungen. Der Hierarchie der Sammlung wird in der folgenden Aufzählung durch Einrückungen dargestellt. Die am häufigsten benutzen Sammlungen sind src-all und ports-all. Die anderen Sammlungen werden von wenigen Leuten zu speziellen Zwecken benutzt und es kann sein, dass diese nicht auf allen Spiegeln zur Verfügung stehen. cvs-all release=cvs Das FreeBSD-Haupt-Repository einschließlich der Kryptographie-Module. distrib release=cvs Dateien, die zum Verteilen und Spiegeln von FreeBSD benötigt werden. doc-all release=cvs Quellen des FreeBSD-Handbuchs und weiterer Dokumentation. Diese Sammlung enthält nicht die FreeBSD-Webseite. ports-all release=cvs Die FreeBSD-Ports-Sammlung. Wenn Sie nicht die gesamte Ports-Sammlung (ports-all) aktualisieren wollen, sondern nur eine der nachstehend aufgeführten Teilsammlungen, aktualisieren Sie immer die Teilsammlung ports-base. Diese Teilsammlung enthält das Bausystem der Ports. Immer wenn ports-base geändert wird, ist es so gut wie sicher, dass diese Änderung auch tatsächlich von einem Port benutzt wird. Der Bau eines Ports, der auf Änderungen im Bausystem angewiesen wird, wird fehlschlagen, wenn das Bausystem noch auf einem alten Stand ist. Aktualisieren Sie vor allen Dingen ports-base, wenn Sie bei einem Bau merkwürdige Fehlermeldungen erhalten und kein aktuelles Bausystem benutzen. Wenn Sie die Datei ports/INDEX selbst erzeugen, brauchen Sie unbedingt die Sammlung ports-all (den ganzen Ports-Baum). Es ist nicht möglich, ports/INDEX nur mit einem Teilbaum zu erstellen. Lesen Sie dazu bitte die FAQ. ports-accessibility release=cvs Werkzeuge für behinderte Benutzer. ports-arabic release=cvs Arabische Sprachunterstützung. ports-archivers release=cvs Werkzeuge zum Archivieren. ports-astro release=cvs Astronomie-Programme. ports-audio release=cvs Audio-Programme. ports-base release=cvs Das Bausystem der Ports-Sammlung. Dazu gehören verschiedene Dateien in den Unterverzeichnissen Mk/ und Tools/ von /usr/ports. Aktualisieren Sie diese Teilsammlung jedes Mal, wenn Sie einen Teil der Ports-Sammlung aktualisieren. Lesen Sie dazu auch den obigen Hinweis zur Ports-Sammlung. ports-benchmarks release=cvs Benchmarks. ports-biology release=cvs Biologie. ports-cad release=cvs Computer Aided Design Werkzeuge. ports-chinese release=cvs Chinesische Sprachunterstützung. ports-comms release=cvs Programme zur Datenkommunikation. ports-converters release=cvs Zeichensatz Konvertierer. ports-databases release=cvs Datenbanken. ports-deskutils release=cvs Sachen, die sich vor dem Computer-Zeitalter auf dem Schreibtisch befanden. ports-devel release=cvs Werkzeuge für Entwickler. ports-dns release=cvs Software für DNS. ports-editors release=cvs Editoren. ports-emulators release=cvs Programme, die andere Betriebssysteme emulieren. ports-finance release=cvs Finanz-Anwendungen. ports-ftp release=cvs Werkzeuge für FTP Clients und Server. ports-games release=cvs Spiele. ports-german release=cvs Deutsche Sprachunterstützung. ports-graphics release=cvs Graphik-Programme. ports-hebrew release=cvs Hebräische Sprachunterstützung. ports-hungarian release=cvs Ungarische Sprachunterstützung. ports-irc release=cvs Internet Relay Chat Werkzeuge. ports-japanese release=cvs Japanische Sprachunterstützung. ports-java release=cvs &java; Werkzeuge. ports-korean release=cvs Koreanische Sprachunterstützung. ports-lang release=cvs Programmiersprachen. ports-mail release=cvs E-Mail Programme. ports-math release=cvs Programme zur numerischen Mathematik. ports-mbone release=cvs MBone Anwendungen. ports-misc release=cvs Verschiedene Werkzeuge. ports-multimedia release=cvs Multimedia-Anwendungen. ports-net release=cvs Netzwerk-Programme. ports-net-im release=cvs Diverse Instant-Messenger. ports-net-mgmt release=cvs Software zum Verwalten von Netzwerken. ports-net-p2p release=cvs Software für die Nutzung von Peer-to-Peer-Netzwerken. ports-news release=cvs USENET News Werkzeuge. ports-palm release=cvs Programme für den Palm. ports-polish release=cvs Polnische Sprachunterstützung. ports-ports-mgmt release=cvs Werkzeuge zum Management von Ports und Paketen. ports-portuguese release=cvs Portugiesische Sprachunterstützung. ports-print release=cvs Druckprogramme. ports-russian release=cvs Russische Sprachunterstützung. ports-science release=cvs Wissenschaft. ports-security release=cvs Werkzeuge zum Thema Sicherheit. ports-shells release=cvs Kommandozeilen-Shells. ports-sysutils release=cvs System-Werkzeuge. ports-textproc release=cvs Programme zur Textverarbeitung (ohne Desktop Publishing). ports-ukrainian release=cvs Ukrainische Sprachunterstützung. ports-vietnamese release=cvs Vietnamesische Sprachunterstützung. ports-www release=cvs Software rund um das World Wide Web. ports-x11 release=cvs X-Window Programme. ports-x11-clocks release=cvs X11-Uhren. ports-x11-drivers release=cvs X11-Treiber. ports-x11-fm release=cvs X11-Dateiverwalter. ports-x11-fonts release=cvs X11-Zeichensätze und Werkzeuge dazu. ports-x11-toolkits release=cvs X11-Werkzeuge. ports-x11-servers release=cvs X11-Server. ports-x11-themes release=cvs X11-Themes. ports-x11-wm release=cvs X11-Fensterverwalter. projects-all release=cvs Quelltexte der verschiedenen FreeBSD-Projekte. src-all release=cvs Die FreeBSD-Quellen einschließlich der Kryptographie-Module. src-base release=cvs Verschiedene Dateien unter /usr/src. src-bin release=cvs Benutzer-Werkzeuge die im Einzelbenutzermodus gebraucht werden (/usr/src/bin). src-cddl release=cvs Werkzeuge und Bibliotheken, die der CDDL-Lizenz unterliegen (/usr/src/cddl). src-contrib release=cvs Werkzeuge und Bibliotheken, die nicht aus dem FreeBSD Project stammen und wenig verändert übernommen werden. (/usr/src/contrib). src-crypto release=cvs Kryptographische Werkzeuge und Bibliotheken, die nicht aus dem FreeBSD Project stammen und wenig verändert übernommen werden. (/usr/src/crypto). src-eBones release=cvs Kerberos und DES (/usr/src/eBones). Wird in aktuellen Releases von FreeBSD nicht benutzt. src-etc release=cvs Konfigurationsdateien des Systems (/usr/src/etc). src-games release=cvs Spiele (/usr/src/games). src-gnu release=cvs Werkzeuge, die unter der GNU Public License stehen (/usr/src/gnu). src-include release=cvs Header Dateien (/usr/src/include). src-kerberos5 release=cvs Kerberos5 (/usr/src/kerberos5). src-kerberosIV release=cvs KerberosIV (/usr/src/kerberosIV). src-lib release=cvs Bibliotheken (/usr/src/lib). src-libexec release=cvs Systemprogramme, die von anderen Programmen ausgeführt werden (/usr/src/libexec). src-release release=cvs Dateien, die zum Erstellen eines FreeBSD Releases notwendig sind (/usr/src/release). src-rescue release=cvs Statisch gelinkte Programme zur Wiederherstellung eines defekten Systems. Lesen Sie dazu auch die Manualpage &man.rescue.8; (/usr/src/rescue). src-sbin release=cvs Werkzeuge für den Einzelbenutzermodus (/usr/src/sbin). src-secure release=cvs Kryptographische Bibliotheken und Befehle (/usr/src/secure). src-share release=cvs Dateien, die von mehreren Systemen gemeinsam benutzt werden können (/usr/src/share). src-sys release=cvs Der Kernel (/usr/src/sys). src-sys-crypto release=cvs Kryptographie Quellen des Kernels (/usr/src/sys/crypto). src-tools release=cvs Verschiedene Werkzeuge zur Pflege von FreeBSD (/usr/src/tools). src-usrbin release=cvs Benutzer-Werkzeuge (/usr/src/usr.bin). src-usrsbin release=cvs System-Werkzeuge (/usr/src/usr.sbin). www release=cvs Die Quellen der FreeBSD-WWW-Seite. distrib release=self Die Konfigurationsdateien des CVSup Servers. Diese werden von den CVSup benutzt. gnats release=current Die GNATS Datenbank, in der Problemberichte verwaltet werden. mail-archive release=current Das Archiv der FreeBSD-Mailinglisten. www release=current Die formatierten Dateien der FreeBSD-WWW-Seite (nicht die Quellen). Diese werden von den WWW-Spiegeln benutzt. Weiterführende Informationen Die CVSup FAQ und weitere Informationen über CVSup finden Sie auf The CVSup Home Page. FreeBSD spezifische Diskussionen über CVSup finden auf der Mailingliste &a.hackers; statt. Dort und auf der Liste &a.announce; werden neue Versionen von CVSup angekündigt. Bei Fragen und Problemberichten zu CVSup lesen Sie bitte die CVSup FAQ. CVSup-Server Die folgende Aufzählung enthält CVSup Server für FreeBSD: &chap.mirrors.cvsup.inc; Portsnap einsetzen Einführung Bei Portsnap handelt es sich um ein System für die sichere Distribution der &os;-Ports-Sammlung. Dazu wird in der Regel stündlich ein Snapshot des Ports-Baumes erzeugt, der anschließend komprimiert und kryptografisch signiert wird. Die dabei erzeugten Dateien werden danach über HTTP verteilt. Analog zu CVSup verwendet auch auch Portsnap das Pull-Prinzip, um die Ports-Sammlung zu aktualisieren: Der komprimierte und signierte Ports-Baum wird auf einem Webserver abgelegt, der danach passiv auf Client-Anforderungen wartet. Ein Anwender muss daher &man.portsnap.8; manuell starten, um seine Ports-Sammlung zu aktualisieren. Eine Alternative ist das Erstellen eines &man.cron.8; -Jobs, der den Ports-Baum regelmäßig automatisch aktualisiert. Beachten Sie, dass Portsnap nicht mit der echten Ports-Sammlung unter /usr/ports/, sondern mit einer komprimierten Kopie des Ports-Baumes arbeitet, die in der Voreinstellung unter /var/db/portsnap/ angelegt wird. Diese komprimierte Version wird danach dazu verwendet, den tatsächlichen Ports-Baum zu aktualisieren. Haben Sie Portsnap über die &os;-Ports-Sammlung installiert, wird der komprimierte Ports-Baum statt unter /var/db/portsnap/ unter /usr/local/portsnap/ angelegt. Installation Seit &os; 6.0 ist Portsnap im &os;-Basissystem enthalten. Verwenden Sie eine ältere &os;-Version, können Sie zur Installation den Port ports-mgmt/portsnap verwenden. <application>portsnap</application> konfigurieren portsnap kann über die Datei /etc/portsnap.conf konfiguriert werden. In der Regel kann allerdings die Standardkonfiguration unverändert übernommen werden. Wollen Sie die Datei dennoch anpassen, sollten Sie zuvor &man.portsnap.conf.5; lesen. Wurde Portsnap über die &os;-Ports-Sammlung installiert, so wird statt /etc/portsnap.conf /usr/local/etc/portsnap.conf als Konfigurationsdatei verwendet. Diese Datei wird während der Installation nicht angelegt, allerdings wird eine Beispielkonfigurationsdatei mitgeliefert, die Sie in dieses Verzeichnis kopieren können: &prompt.root; cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf Der erste Aufruf von <application>portsnap</application> Wenn Sie &man.portsnap.8; das erste Mal aufrufen, müssen Sie einen komprimierten Snapshot des kompletten Ports-Baumes nach /var/db/portsnap/ herunterladen (oder nach /usr/local/portsnap/ Sie Portsnap über die Ports-Sammlung installiert haben). Die ungefähre Größe des komprimierten Ports-Baumes beträgt derzeit (Anfang 2006) etwa 41 MB. &prompt.root; portsnap fetch Nachdem der komprimierte Snapshot heruntergeladen wurde, kann eine Live-Version des Ports-Baumes nach /usr/ports/ extrahiert werden. Dieser Schritt ist selbst dann nötig, wenn sich bereits ein Ports-Baum in diesem Verzeichnis befindet (der beispielsweise von CVSup angelegt wurde), weil portsnap einen Ausgangszustand des Ports-Baumes benötigt, um festzustellen, welche Teile des Baums aktualisiert werden müssen: &prompt.root; portsnap extract Bei einer &os;-Standardinstallation wird das Verzeichnis /usr/ports nicht angelegt. Verwenden Sie &os; 6.0-RELEASE, sollten Sie dies vor der ersten Ausführung von portsnap nachholen. Verwenden Sie hingegen eine aktuellere &os;-Version oder eine aktuellere Version von Portsnap, wird dies beim ersten Aufruf von portsnap automatisch erledigt. Den Ports-Baum aktualisieren Nachdem der originale komprimierte Snapshot des Ports-Baumes heruntergeladen und nach /usr/ports/ extrahiert wurde, können Sie den Ports-Baum aktualisieren. Dazu sind zwei Schritte nötig: Mit fetch laden Sie Aktualisierungen herunter, mit update aktualisieren Sie die Live-Version des Ports-Baumes. Beide Parameter können gleichzeitig an portsnap übergeben werden: &prompt.root; portsnap fetch update Einige ältere portsnap-Versionen unterstützen diese Syntax nicht. In diesem Fall gehen Sie wie folgt vor: &prompt.root; portsnap fetch &prompt.root; portsnap update Portsnap als cron-Job starten Um eine Überlastung der Portsnap-Server zu vermeiden, kann portsnap fetch nicht als normaler &man.cron.8;-Job ausgeführt werden. Als Alternative gibt es den Befehl portsnap cron, der eine zufällige Zeitspanne (bis zu 3600 Sekunden) wartet, bevor Aktualisierungen heruntergeladen werden. portsnap update sollte ebenfalls nicht als cron-Job ausgeführt werden, da es zu massiven Problemen kann, wenn parallel zur Aktualisierung ein Port gebaut oder installiert wird. Die Aktualisierung des Portsindex stellt hingegen kein Problem dar. Um die INDEX-Datei zu aktualisieren, übergeben Sie zusätzlich die Option an portsnap. (Wenn Sie portsnap -I update als cron-Job definiert haben, müssen Sie portsnap update ohne die Option aufrufen, um den Rest des Ports-Baumes zu aktualisieren.) Wenn Sie die folgende Zeile in /etc/crontab aufnehmen, aktualisiert portsnap den komprimierten Snapshot sowie die INDEX-Dateien unter /usr/ports/ und verschickt eine E-Mail, wenn Ihre installierten Ports veraltet sind: 0 3 * * * root portsnap -I cron update && pkg_version -vIL= Ist Ihre Systemuhr nicht auf Ihre lokale Zeitzone eingestellt, ersetzen Sie bitte 3 durch eine beliebige Zahl zwischen 0 und 23, damit die Last der Portsnap-Server gleichmäßiger verteilt wird. Einige ältere portsnap-Versionen unterstützen die Angabe von mehreren Befehlen (etwa cron update) für einen einzigen portsnap-Aufruf nicht. Ist dies bei Ihnen der Fall, ersetzen Sie bitte portsnap -I cron update durch portsnap cron && portsnap -I update. CVS-Tags Wenn Sie Quellen mit CVS oder CVSup erhalten oder aktualisieren wollen, müssen Sie ein Tag angeben. Ein Tag kann einen bestimmten &os;-Zweig oder einen bestimmten Zeitpunkt (Release-Tag) bestimmen. Tags für Zweige Mit Ausnahme von HEAD (das immer ein gültiges Tag ist), können die folgenden Tags nur im src/-Quellbaum verwendet werden. Die Quellbäume ports/, doc/ und www/ sind nicht verzweigt. HEAD Symbolischer Name für den Hauptzweig, auch &os.current; genannt. Dies ist die Vorgabe, wenn keine Revision angegeben wird. In CVSup wird dieses Tag mit einem . (Punkt) bezeichnet. In CVS ist das die Vorgabe, wenn Sie kein Tag oder eine Revision angeben. Außer Sie wollen einen -STABLE Rechner auf -CURRENT aktualisieren, ist es nicht ratsam, die -CURRENT Quellen auf einem -STABLE Rechner einzuspielen. RELENG_6 Der Entwicklungszweig für FreeBSD-6.X, auch als FreeBSD 6-STABLE bekannt. RELENG_6_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 6.1 durchgeführt werden. RELENG_6_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 6.1 durchgeführt werden. RELENG_6_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 6.0 durchgeführt werden. RELENG_5 Der &os; 5.X Entwicklungszweig, der auch &os; 5-STABLE genannt wird. RELENG_5_5 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.5 durchgeführt werden. RELENG_5_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.4 durchgeführt werden. RELENG_5_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.3 durchgeführt werden. RELENG_5_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.2 und &os; 5.2.1 durchgeführt werden. RELENG_5_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.1 durchgeführt werden. RELENG_5_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 5.0 durchgeführt werden. RELENG_4 Der &os; 4.X Entwicklungszweig, der auch &os; 4-STABLE genannt wird. RELENG_4_11 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.11 durchgeführt werden. RELENG_4_10 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.10 durchgeführt werden. RELENG_4_9 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.9 durchgeführt werden. RELENG_4_8 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.8 durchgeführt werden. RELENG_4_7 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.7 durchgeführt werden. RELENG_4_6 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.6 und FreeBSD 4.6.2 durchgeführt werden. RELENG_4_5 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.5 durchgeführt werden. RELENG_4_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.4 durchgeführt werden. RELENG_4_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für FreeBSD 4.3 durchgeführt werden. RELENG_3 Der FreeBSD-3.X Entwicklungszweig, der auch 3.X-STABLE genannt wird. RELENG_2_2 Der FreeBSD-2.2.X Entwicklungszweig, der auch 2.2-STABLE genannt wird. Release-Tags Diese Tags geben den Zeitpunkt an, an dem eine bestimme &os;-Version veröffentlicht wurde. Das Erstellen einer Release ist in den Dokumenten Release Engineering Information und Release Process beschrieben. Der src-Baum benutzt Tags, deren Namen mit RELENG_ anfangen. Die Bäume ports und doc benutzen Tags, deren Namen mit RELEASE anfangen. Im Baum www werden keine Release-Tags verwendet. RELENG_6_2_0_RELEASE FreeBSD 6.2 RELENG_6_1_0_RELEASE FreeBSD 6.1 RELENG_6_0_0_RELEASE FreeBSD 6.0 RELENG_5_5_0_RELEASE FreeBSD 5.5 RELENG_5_4_0_RELEASE FreeBSD 5.4 RELENG_4_11_0_RELEASE FreeBSD 4.11 RELENG_5_3_0_RELEASE FreeBSD 5.3 RELENG_4_10_0_RELEASE FreeBSD 4.10 RELENG_5_2_1_RELEASE FreeBSD 5.2.1 RELENG_5_2_0_RELEASE FreeBSD 5.2 RELENG_4_9_0_RELEASE FreeBSD 4.9 RELENG_5_1_0_RELEASE FreeBSD 5.1 RELENG_4_8_0_RELEASE FreeBSD 4.8 RELENG_5_0_0_RELEASE FreeBSD 5.0 RELENG_4_7_0_RELEASE FreeBSD 4.7 RELENG_4_6_2_RELEASE FreeBSD 4.6.2 RELENG_4_6_1_RELEASE FreeBSD 4.6.1 RELENG_4_6_0_RELEASE FreeBSD 4.6 RELENG_4_5_0_RELEASE FreeBSD 4.5 RELENG_4_4_0_RELEASE FreeBSD 4.4 RELENG_4_3_0_RELEASE FreeBSD 4.3 RELENG_4_2_0_RELEASE FreeBSD 4.2 RELENG_4_1_1_RELEASE FreeBSD 4.1.1 RELENG_4_1_0_RELEASE FreeBSD 4.1 RELENG_4_0_0_RELEASE FreeBSD 4.0 RELENG_3_5_0_RELEASE FreeBSD-3.5 RELENG_3_4_0_RELEASE FreeBSD-3.4 RELENG_3_3_0_RELEASE FreeBSD-3.3 RELENG_3_2_0_RELEASE FreeBSD-3.2 RELENG_3_1_0_RELEASE FreeBSD-3.1 RELENG_3_0_0_RELEASE FreeBSD-3.0 RELENG_2_2_8_RELEASE FreeBSD-2.2.8 RELENG_2_2_7_RELEASE FreeBSD-2.2.7 RELENG_2_2_6_RELEASE FreeBSD-2.2.6 RELENG_2_2_5_RELEASE FreeBSD-2.2.5 RELENG_2_2_2_RELEASE FreeBSD-2.2.2 RELENG_2_2_1_RELEASE FreeBSD-2.2.1 RELENG_2_2_0_RELEASE FreeBSD-2.2.0 AFS-Server Die folgende Aufzählung enthält AFS Server für FreeBSD: Schweden Die Dateien sind unter dem Pfad /afs/stacken.kth.se/ftp/pub/FreeBSD/ erreichbar. stacken.kth.se # Stacken Computer Club, KTH, Sweden 130.237.234.43 #hot.stacken.kth.se 130.237.237.230 #fishburger.stacken.kth.se 130.237.234.3 #milko.stacken.kth.se Betreuer ftp@stacken.kth.se rsync-Server rsync wird ähnlich wie &man.rcp.1; verwendet, besitzt aber mehr Optionen und verwendet das rsync remote-update Protokoll, das nur geänderte Dateien überträgt und damit viel schneller als ein normaler Kopiervorgang ist. rsync ist sehr nützlich, wenn Sie einen FreeBSD-FTP-Spiegel oder einen CVS-Spiegel betreiben. Das Programm ist für viele Betriebssysteme erhältlich, mit FreeBSD können Sie den Port net/rsync oder das fertige Paket benutzen. Die folgenden Server stellen FreeBSD über das rsync Protokoll zur Verfügung: Deutschland rsync://grappa.unix-ag.uni-kl.de/ Verfügbare Sammlungen: freebsd-cvs: Das vollständige CVS-Repository von &os;. Neben anderen Repositories spiegelt diese Maschine auch die Repositories der NetBSD- und OpenBSD-Projekte. Großbritannien rsync://rsync.mirror.ac.uk/ Verfügbare Sammlungen: ftp.FreeBSD.org: Kompletter Spiegel des FreeBSD-FTP-Servers. Niederlande rsync://ftp.nl.FreeBSD.org/ Verfügbare Sammlungen: vol/4/freebsd-core: Kompletter Spiegel des FreeBSD-FTP-Servers. Taiwan rsync://ftp.tw.FreeBSD.org/ rsync://ftp2.tw.FreeBSD.org/ rsync://ftp6.tw.FreeBSD.org/ Verfügbare Sammlungen: FreeBSD: Kompletter Spiegel des FreeBSD-FTP-Servers. Tschechische Republik rsync://ftp.cz.FreeBSD.org/ Verfügbare Sammlungen: ftp: Unvollständiger Spiegel des FreeBSD-FTP-Servers. FreeBSD: Vollständiger Spiegel des FreeBSD-FTP-Servers. USA rsync://ftp-master.FreeBSD.org/ Dieser Server darf nur von primären Spiegeln benutzt werden. Verfügbare Sammlungen: FreeBSD: Das Hauptarchiv des FreeBSD FTP Servers. acl: Die primäre ACL-Liste. rsync://ftp13.FreeBSD.org/ Verfügbare Sammlungen: FreeBSD: Kompletter Spiegel des FreeBSD-FTP-Servers.
diff --git a/de_DE.ISO8859-1/books/handbook/network-servers/chapter.sgml b/de_DE.ISO8859-1/books/handbook/network-servers/chapter.sgml index 7e61784cb2..721fe2cd95 100644 --- a/de_DE.ISO8859-1/books/handbook/network-servers/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/network-servers/chapter.sgml @@ -1,5308 +1,5313 @@ Murray Stokely Überarbeitet von Johann Kois Übersetzt von Netzwerkserver Übersicht Dieses Kapitel beschreibt einige der häufiger verwendeten Netzwerkdienste auf &unix;-Systemen. Beschrieben werden Installation und Konfiguration sowie Test und Wartung verschiedener Netzwerkdienste. Zusätzlich sind im ganzen Kapitel Beispielkonfigurationsdateien vorhanden, von denen Sie sicherlich profitieren werden. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Den inetd-Daemon konfigurieren können. Wissen, wie man ein Netzwerkdateisystem einrichtet. Einen Network Information Server einrichten können, um damit Benutzerkonten im Netzwerk zu verteilen. Rechner durch Nutzung von DHCP automatisch für ein Netzwerk konfigurieren können. In der Lage sein, einen Domain Name Server einzurichten. Den Apache HTTP-Server konfigurieren können. Wissen, wie man einen File Transfer Protocol (FTP)-Server einrichtet. Mit Samba einen Datei- und Druckserver für &windows;-Clients konfigurieren können. Unter Nutzung des NTP-Protokolls Datum und Uhrzeit synchronisieren sowie einen Zeitserver installieren können. Bevor Sie dieses Kapitel lesen, sollten Sie Die Grundlagen der /etc/rc-Skripte verstanden haben. Mit der grundlegenden Netzwerkterminologie vertraut sein. Wissen, wie man zusätzliche Softwarepakete von Drittherstellern installiert (). Chern Lee Beigetragen von Aktualisiert für &os; 6.1-RELEASE vom &os; Documentation Project Der <application>inetd</application> <quote>Super-Server</quote> Überblick &man.inetd.8; wird manchmal auch als Internet Super-Server bezeichnet, weil er Verbindungen für mehrere Dienste verwaltet. Wenn eine Verbindung eintrifft, bestimmt inetd, welches Programm für die eingetroffene Verbindung zuständig ist, aktiviert den entsprechenden Prozess und reicht den Socket an ihn weiter (der Socket dient dabei als Standardein- und -ausgabe sowie zur Fehlerbehandlung). Der Einsatz des inetd-Daemons an Stelle viele einzelner Daemonen kann auf nicht komplett ausgelasteten Servern zu einer Verringerung der Systemlast führen. inetd wird vor allem dazu verwendet, andere Daemonen zu aktivieren, einige Protokolle werden aber auch direkt verwaltet. Dazu gehören chargen, auth, sowie daytime. Dieser Abschnitt beschreibt die Konfiguration von inetd durch Kommandozeilenoptionen sowie die Konfigurationsdatei /etc/inetd.conf. Einstellungen inetd wird durch das &man.rc.8;-System initialisiert. Die Option inetd_enable ist in der Voreinstellung zwar auf NO gesetzt, sie kann aber in Abhängigkeit von der vom Benutzer bei der Installation gewählten Konfiguration von sysinstall aktiviert werden. Die Verwendung von inetd_enable="YES" oder inetd_enable="NO" in /etc/rc.conf deaktiviert oder startet inetd beim Systemstart. Über den Befehl &prompt.root; /etc/rc.d/inetd rcvar können Sie die aktuelle Konfiguration abfragen. Weitere Optionen können über die Option inetd_flags an inetd übergeben werden. Kommandozeilenoptionen Wie die meisten anderen Server-Daemonen lässt sich auch inetd über verschiedene Optionen steuern. Die vollständige Syntax für inetd lautet: inetd Die verschiedenen Optionen können über die Option inetd_flags der Datei /etc/rc.conf an inetd übergeben werden. In der Voreinstellung hat diese Option den Wert -wW -C 60. Durch das Setzen dieser Werte wird das TCP-Wrapping für alle inetd-Dienste aktiviert. Zusätzlich kann eine einzelne IP-Adresse jeden Dienst nur maximal 60 Mal pro Minute anfordern. Für Einsteiger ist es erfreulich, dass diese Parameter in der Regel nicht angepasst werden müssen. Da diese Parameter aber dennoch von Interesse sein können (beispielsweise, wenn Sie eine enorme Anzahl von Verbindungsanfragen erhalten), werden einige dieser einschränkenden Parameter im Folgenden näher erläutert. Eine vollständige Auflistung aller Optionen finden Sie hingegen in &man.inetd.8;. -c maximum Legt die maximale Anzahl von parallen Aufrufen eines Dienstes fest; in der Voreinstellung gibt es keine Einschränkung. Diese Einstellung kann für jeden Dienst durch Setzen des -Parameters festgelegt werden. -C rate Legt fest, wie oft ein Dienst von einer einzelnen IP-Adresse in einer Minute aufgerufen werden kann; in der Voreinstellung gibt es keine Einschränkung. Dieser Wert kann für jeden Dienst durch Setzen des Parameters festgelegt werden. -R rate Legt fest, wie oft ein Dienst in der Minute aktiviert werden kann; in der Voreinstellung sind dies 256 Aktivierungen pro Minute. Ein Wert von 0 erlaubt unbegrenzt viele Aktivierungen. -s maximum Legt fest, wie oft ein Dienst in der Minute von einer einzelnen IP-Adresse aus aktiviert werden kann; in der Voreinstellung gibt es hier keine Beschränkung. Diese Einstellung kann für jeden Dienst durch die Angabe angepasst werden. <filename>inetd.conf</filename> Die Konfiguration von inetd erfolgt über die Datei /etc/inetd.conf. Wenn /etc/inetd.conf geändert wird, kann inetd veranlasst werden, seine Konfigurationsdatei neu einzulesen. Die <application>inetd</application>-Konfiguration neu einlesen &prompt.root; /etc/rc.d/inetd reload Jede Zeile der Konfigurationsdatei beschreibt jeweils einen Daemon. Kommentare beginnen mit einem #. Ein Eintrag der Datei /etc/inetd.conf hat folgenden Aufbau: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments Ein Eintrag für den IPv4 verwendenden &man.ftpd.8;-Daemon könnte so aussehen: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l service-name Der Dienstname eines bestimmten Daemons. Er muss einem in /etc/services aufgelisteten Dienst entsprechen. In dieser Datei wird festgelegt, welchen Port inetd abhören muss. Wenn ein neuer Dienst erzeugt wird, muss er zuerst in die Datei /etc/services eingetragen werden. socket-type Entweder stream, dgram, raw, oder seqpacket. stream muss für verbindungsorientierte TCP-Daemonen verwendet werden, während dgram das UDP-Protokoll verwaltet. protocol Eines der folgenden: Protokoll Bedeutung tcp, tcp4 TCP (IPv4) udp, udp4 UDP (IPv4) tcp6 TCP (IPv6) udp6 UDP (IPv6) tcp46 TCP sowohl unter IPv4 als auch unter IPv6 udp46 UDP sowohl unter IPv4 als auch unter IPv6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] gibt an, ob der von inetd aktivierte Daemon seinen eigenen Socket verwalten kann oder nicht. -Sockets müssen die Option verwenden, während Daemonen mit Stream-Sockets, die normalerweise auch aus mehreren Threads bestehen, die Option verwenden sollten. Die Option gibt in der Regel mehrere Sockets an einen einzelnen Daemon weiter, während für jeden neuen Socket einen Childdaemon erzeugt. Die maximale Anzahl an Child-Daemonen, die inetd erzeugen kann, wird durch die Option festgelegt. Wenn ein bestimmter Daemon 10 Instanzen benötigt, sollte der Wert /10 hinter die Option gesetzt werden. Geben Sie hingegen den Wert /0 an, gibt es keine Beschränkung. Zusätzlich zu kann die maximale Anzahl von Verbindungen eines Rechners mit einem bestimmten Daemon durch zwei weitere Optionen beschränkt werden. Die Option legt die maximale Anzahl von Verbindungsversuchen fest, die von einer bestimmten IP-Adresse aus unternommen werden können. Ein Wert von zehn würde die maximale Anzahl von Verbindungsversuchen einer IP-Adresse mit einem bestimmten Dienst auf zehn Versuche in der Minute beschränken. Durch die Angabe der Option können Sie hingegen festlegen, wieviele Child-Daemonen von einer bestimmten IP-Adresse aus gestartet werden können. Durch diese Optionen lassen sich ein absichtlicher oder unabsichtlicher Ressourcenverbrauch sowie die Auswirkungen eines Denial of Service (DoS)-Angriffs auf einen Rechner begrenzen. Sie müssen hier entweder oder angeben. Die Angabe von , und ist hingegen optional. Ein multithread-Daemon vom Streamtyp ohne die Optionen , oder sieht so aus: nowait Der gleiche Daemon mit einer maximal möglichen Anzahl von 10 parallelen Daemonen würde so aussehen: nowait/10 Wird zusätzlich die Anzahl der möglichen Verbindungen pro Minute für jede IP-Adresse auf 20 sowie die mögliche Gesamtzahl von Childdaemonen auf 10 begrenzt, so sieht der Eintrag so aus: nowait/10/20 All diese Optionen werden vom &man.fingerd.8;-Daemon bereits in der Voreinstellung verwendet: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s Will man die maximale Anzahl von Child-Daemonen auf 100 beschränken, wobei von jeder IP-Adresse aus maximal 5 Child-Daemonen gestartet werden dürfen, verwendet man den folgenden Eintrag: nowait/100/0/5. user Der Benutzername, unter dem der jeweilige Daemon laufen soll. Meistens laufen Daemonen als User root. Aus Sicherheitsgründen laufen einige Server aber auch als User daemon, oder als am wenigsten privilegierter User nobody. server-program Der vollständige Pfad des Daemons, der eine Verbindung entgegennimmt. Wird der Daemon von inetd intern bereitgestellt, sollte die Option verwendet werden. server-program-arguments Dieser Eintrag legt (gemeinsam mit und beginnend mit argv[0]), die Argumente fest, die bei der Aktivierung an den Daemon übergeben werden. Wenn die Anweisung auf der Kommandozeile also mydaemon -d lautet, wäre mydaemon -d auch der Wert der Option . Wenn es sich beim Daemon um einen internen Dienst handelt, sollte wiederum die Option verwendet werden. Sicherheit Abhängig von der bei der Installation festgelegten Konfiguration werden viele der von inetd verwalteten Dienste automatisch aktiviert! Wenn Sie einen bestimmten Daemon nicht benötigen, sollten Sie ihn deaktivieren! Dazu kommentieren Sie den jeweiligen Daemon in /etc/inetd.conf mit einem # aus, um danach die inetd-Konfiguration neu einzulesen. Einige Daemonen, zum Beispiel fingerd, sollten generell deaktiviert werden, da sie zu viele Informationen an einen potentiellen Angreifer liefern. Einige Daemonen haben unsichere Einstellungen, etwa große oder nichtexistierende Timeouts für Verbindungsversuche, die es einem Angreifer erlauben, über lange Zeit langsam Verbindungen zu einem bestimmten Daemon aufzubauen, um dessen verfügbare Ressourcen zu verbrauchen. Es ist daher eine gute Idee, diese Daemonen durch die Optionen , sowie zu beschränken, wenn Sie sehr viele Verbindungsversuche mit Ihrem System registrieren. TCP-Wrapping ist in der Voreinstellung aktiviert. Lesen Sie &man.hosts.access.5;, wenn Sie weitere Informationen zum Setzen von TCP-Beschränkungen für verschiedene von inetd aktivierte Daemonen benötigen. Verschiedenes Bei daytime, time, echo, discard, chargen, und auth handelt es sich um intern von inetd bereitgestellte Dienste. Der auth-Dienst bietet Identifizierungsdienste über das Netzwerk an und ist bis zu einem bestimmten Grad konfigurierbar, während die meisten anderen Dienste nur aktiviert oder deaktiviert werden können. Eine ausführliche Beschreibung finden Sie in &man.inetd.8;. Tom Rhodes Reorganisiert und erweitert von Bill Swingle Geschrieben von NFS – Network File System NFS Eines der vielen von FreeBSD unterstützten Dateisysteme ist das Netzwerkdateisystem, das auch als NFS bekannt ist. NFS ermöglicht es einem System, Dateien und Verzeichnisse über ein Netzwerk mit anderen zu teilen. Über NFS können Benutzer und Programme auf Daten entfernter Systeme zugreifen, und zwar genauso, wie wenn es sich um lokale Daten handeln würde. Einige der wichtigsten Vorteile von NFS sind: Lokale Arbeitsstationen benötigen weniger Plattenplatz, da gemeinsam benutzte Daten nur auf einem einzigen Rechner vorhanden sind. Alle anderen Stationen greifen über das Netzwerk auf diese Daten zu. Benutzer benötigen nur noch ein zentrales Heimatverzeichnis auf einem NFS-Server. Diese Verzeichnisse sind über das Netzwerk auf allen Stationen verfügbar. Speichergeräte wie Disketten-, CD-ROM- oder &iomegazip;-Laufwerke können über das Netzwerk von anderen Arbeitstationen genutzt werden. Dadurch sind für das gesamte Netzwerk deutlich weniger Speichergeräte nötig. Wie funktioniert <acronym>NFS</acronym>? NFS besteht aus zwei Hauptteilen: Einem Server und einem oder mehreren Clients. Der Client greift über das Netzwerk auf die Daten zu, die auf dem Server gespeichert sind. Damit dies korrekt funktioniert, müssen einige Prozesse konfiguriert und gestartet werden: Der Server benötigt folgende Daemonen: NFS Server Dateiserver Unix-Clients rpcbind mountd nfsd Daemon Beschreibung nfsd Der NFS-Daemon. Er bearbeitet Anfragen der NFS-Clients. mountd Der NFS-Mount-Daemon. Er bearbeitet die Anfragen, die &man.nfsd.8; an ihn weitergibt. rpcbind Der Portmapper-Daemon. Durch ihn erkennen die NFS-Clients, welchen Port der NFS-Server verwendet. Der Client kann ebenfalls einen Daemon aufrufen, und zwar den nfsiod-Daemon. Der nfsiod-Daemon bearbeitet Anfragen vom NFS-Server. Er ist optional und verbessert die Leistung des Netzwerks. Für eine normale und korrekte Arbeit ist er allerdings nicht erforderlich. Mehr erfahren Sie in der Hilfeseite &man.nfsiod.8;. <acronym>NFS</acronym> einrichten NFS einrichten NFS lässt sich leicht einrichten. Die nötigen Prozesse werden durch einige Änderungen in /etc/rc.conf bei jedem Systemstart gestartet. Stellen Sie sicher, dass auf dem NFS-Server folgende Optionen in der Datei /etc/rc.conf gesetzt sind: rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r" mountd läuft automatisch, wenn der NFS-Server aktiviert ist. Auf dem Client muss in /etc/rc.conf folgende Option gesetzt sein: nfs_client_enable="YES" /etc/exports legt fest, welche Dateisysteme NFS exportieren (manchmal auch als teilen bezeichnet) soll. Jede Zeile in /etc/exports legt ein Dateisystem sowie die Arbeitsstationen, die darauf Zugriff haben, fest. Außerdem ist es möglich, Zugriffsoptionen festzulegen. Es gibt viele verschiedene Optionen, allerdings werden hier nur einige von ihnen erwähnt. Wenn Sie Informationen zu weiteren Optionen benötigen, lesen Sie &man.exports.5;. Nun folgen einige Beispieleinträge für /etc/exports: NFS Export von Dateisystemen Die folgenden Beispiele geben Ihnen Anhaltspunkte zum Exportieren von Dateisystemen, obwohl diese Einstellungen natürlich von Ihrer Arbeitsumgebung und Ihrer Netzwerkkonfiguration abhängen. Das nächste Beispiel exportiert das Verzeichnis /cdrom für drei Rechner, die sich in derselben Domäne wie der Server befinden oder für die entsprechende Einträge in /etc/hosts existieren. Die Option kennzeichnet das exportierte Dateisystem als schreibgeschützt. Durch dieses Flag ist das entfernte System nicht in der Lage, das exportierte Dateisystem zu verändern. /cdrom -ro host1 host2 host3 Die nächste Zeile exportiert /home auf drei durch IP-Adressen bestimmte Rechner. Diese Einstellung ist nützlich, wenn Sie über ein privates Netzwerk ohne DNS-Server verfügen. Optional könnten interne Rechnernamen auch in /etc/hosts konfiguriert werden. Benötigen Sie hierzu weitere Informationen, lesen Sie bitte &man.hosts.5;. Durch das Flag wird es möglich, auch Unterverzeichnisse als Mountpunkte festzulegen. Dies bedeutet aber nicht, dass alle Unterverzeichnisse eingehängt werden, vielmehr wird es dem Client ermöglicht, nur diejenigen Verzeichnisse einzuhängen, die auch benötigt werden. /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 Die nächste Zeile exportiert /a, damit Clients von verschiedenen Domänen auf das Dateisystem zugreifen können. Das -Flag erlaubt es dem Benutzer root des entfernten Systems, als root auf das exportierte Dateisystem zu schreiben. Wenn dieses Flag nicht gesetzt ist, kann selbst root nicht auf das exportierte Dateisystem schreiben. /a -maproot=root host.example.com box.example.org Damit ein Client auf ein exportiertes Dateisystem zugreifen kann, muss ihm dies explizit gestattet werden. Stellen Sie also sicher, dass der Client in /etc/exports aufgeführt wird. Jede Zeile in /etc/exports entspricht der Exportinformation für ein Dateisystem auf einen Rechner. Ein entfernter Rechner kann für jedes Dateisystem nur einmal festgelegt werden, und kann auch nur einen Standardeintrag haben. Nehmen wir an, dass /usr ein einziges Dateisystem ist. Dann wären folgende Zeilen ungültig: #Nicht erlaubt, wenn /usr ein einziges Dateisystem ist /usr/src client /usr/ports client Das Dateisystem /usr wird hier zweimal auf den selben Rechner (client) exportiert. Dies ist aber nicht zulässig. Der korrekte Eintrag sieht daher so aus: /usr/src /usr/ports client Die Eigenschaften eines auf einen anderen Rechner exportierten Dateisystems müssen alle in einer Zeile stehen. Zeilen, in denen kein Rechner festgelegt wird, werden als einzelner Rechner behandelt. Dies schränkt die Möglichkeiten zum Export von Dateisystemen ein, für die meisten Anwender ist dies aber kein Problem. Eine gültige Exportliste, in der /usr und /exports lokale Dateisysteme sind, sieht so aus: # Export src and ports to client01 and client02, but only # client01 has root privileges on it /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # The client machines have root and can mount anywhere # on /exports. Anyone in the world can mount /exports/obj read-only /exports -alldirs -maproot=root client01 client02 /exports/obj -ro Der Daemon mountd muss die Datei /etc/exports nach jeder Änderung neu einlesen, damit die Änderungen wirksam werden. Dies kann durch das Senden des HUP-Signals an den mountd-Prozess erfolgen: &prompt.root; kill -HUP `cat /var/run/mountd.pid` Alternativ können Sie das mountd-&man.rc.8;-Skript auch mit dem passenden Parameter aufrufen: &prompt.root; /etc/rc.d/mountd onereload Lesen Sie bitte des Handbuchs für Informationen zum Einsatz der rc-Skripte. Eine weitere Möglichkeit, diese Änderungen zu übernehmen, wäre der Neustart des Systems. Dies ist allerdings nicht nötig. Wenn Sie die folgenden Befehle als root ausführen, sollte alles korrekt gestartet werden. Auf dem NFS-Server: &prompt.root; rpcbind &prompt.root; nfsd -u -t -n 4 &prompt.root; mountd -r Auf dem NFS-Client: &prompt.root; nfsiod -n 4 Nun sollte alles bereit sein, um ein entferntes Dateisystem einhängen zu können. In unseren Beispielen nennen wir den Server server, den Client client. Wenn Sie ein entferntes Dateisystem nur zeitweise einhängen wollen, oder nur Ihre Konfiguration testen möchten, führen Sie auf dem Client als root einen Befehl ähnlich dem folgenden aus: NFS Dateisysteme einhängen &prompt.root; mount server:/home /mnt Dadurch wird das Verzeichnis /home des Servers auf dem Client unter /mnt eingehängt. Wenn alles korrekt konfiguriert wurde, sehen Sie auf dem Client im Verzeichnis /mnt alle Dateien des Servers. Wenn Sie ein entferntes Dateisystem nach jedem Systemstart automatisch einhängen wollen, fügen Sie das Dateisystem in /etc/fstab ein. Dazu ein Beispiel: server:/home /mnt nfs rw 0 0 Eine Beschreibung aller Optionen enthält die Hilfeseite &man.fstab.5;. Dateien sperren (<foreignphrase>Locking</foreignphrase>) Einige Anwendungen (beispielsweise mutt) erfordern die Sperrung von Dateien, damit sie korrekt arbeiten. Verwenden Sie NFS, so können Sie für die Sperrung von Dateien rpc.lockd einsetzen. Um diesen Daemon zu aktivieren, müssen Sie in /etc/rc.conf (sowohl auf Client- als auch auf Serverseite) folgende Zeilen aufnehmen (wobei vorausgesetzt wird, dasss NFS auf beiden Systemen bereits konfiguriert ist): rpc_lockd_enable="YES" rpc_statd_enable="YES" Danach starten Sie die Anwendung zur Verwaltung der Dateisperren durch folgenden Befehl: &prompt.root; /etc/rc.d/nfslocking start Benötigen Sie keine echten Dateisperren zwischen den NFS-Clients und dem NFS-Server, können Sie den NFS-Client durch die Übergabe der Option an &man.mount.nfs.8; zu einer lokalen Sperrung von Dateien zwingen. Lesen Sie dazu auch die Manualpage &man.mount.nfs.8;. Praktische Anwendungen NFS ist in vielen Situationen nützlich. Einige Anwendungsbereiche finden Sie in der folgenden Liste: NFS Anwendungsbeispiele Mehrere Maschinen können sich ein CD-ROM-Laufwerk oder andere Medien teilen. Dies ist billiger und außerdem praktischer, um Programme auf mehreren Rechnern zu installieren. In größeren Netzwerken ist es praktisch, einen zentralen NFS-Server einzurichten, auf dem die Heimatverzeichnisse der Benutzer gespeichert werden. Diese Heimatverzeichnisse werden über das Netzwerk exportiert. Dadurch haben die Benutzer immer das gleiche Heimatverzeichnis zur Verfügung, unabhängig davon, an welchem Arbeitsplatz sie sich anmelden. Verschiedene Rechner können auf ein gemeinsames Verzeichnis /usr/ports/distfiles zugreifen. Wenn Sie nun einen Port auf mehreren Rechnern installieren wollen, greifen Sie einfach auf dieses Verzeichnis zu, ohne die Quelldateien auf jede Maschine zu kopieren. Wylie Stilwell Beigetragen von Chern Lee Überarbeitet von <application>AMD</application> amd Automatic Mounter Daemon &man.amd.8; (Automatic Mounter Daemon) hängt ein entferntes Dateisystem automatisch ein, wenn auf eine Datei oder ein Verzeichnis in diesem Dateisystem zugegriffen wird. Dateisysteme, die über einen gewissen Zeitraum inaktiv sind, werden von amd automatisch abgehängt. amd ist eine einfache Alternative zum dauerhaften Einhängen von Dateisystemen in /etc/fstab. In der Voreinstellung stellt amd die Verzeichnisse /host und /net als NFS-Server bereit. Wenn auf eine Datei in diesen Verzeichnissen zugegriffen wird, sucht amd den entsprechenden Mountpunkt und hängt das Dateisystem automatisch ein. /net wird zum Einhängen von exportierten Dateisystemen von einer IP-Adresse verwendet, während /host zum Einhängen von exportierten Dateisystemen eines durch seinen Namen festgelegten Rechners dient. Ein Zugriff auf eine Datei in /host/foobar/usr würde amd veranlassen, das von foobar exportierte Dateisystem /usr einzuhängen. Ein exportiertes Dateisystem mit <application>amd</application> in den Verzeichnisbaum einhängen Sie können sich die verfügbaren Mountpunkte eines entfernten Rechners mit showmount ansehen. Wollen Sie sich die Mountpunkte des Rechners foobar ansehen, so verwenden Sie: &prompt.user; showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 &prompt.user; cd /host/foobar/usr Wie Sie an diesem Beispiel erkennen können, zeigt showmount /usr als exportiertes Dateisystem an. Wenn man in das Verzeichnis /host/foobar/usr wechselt, versucht amd den Rechnernamen foobar aufzulösen und den gewünschten Export in den Verzeichnisbaum einzuhängen. amd kann durch das Einfügen der folgenden Zeile in /etc/rc.conf automatisch gestartet werden: amd_enable="YES" Mit der Option amd_flags kann amd angepasst werden. Die Voreinstellung für amd_flags sieht so aus: amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" /etc/amd.map legt die Standardoptionen fest, mit denen exportierte Dateisysteme in den Verzeichnisbaum eingehängt werden. /etc/amd.conf hingegen legt einige der erweiterten Optionen von amd fest. Weitere Informationen finden Sie in den Hilfeseiten &man.amd.8; und &man.amd.conf.5;. John Lind Beigetragen von Integrationsprobleme mit anderen Systemen Bestimmte ISA-Ethernetadapter haben Beschränkungen, die zu ernsthaften Netzwerkproblemen, insbesondere mit NFS führen können. Es handelt sich dabei nicht um ein FreeBSD-spezifisches Problem, aber FreeBSD-Systeme sind davon ebenfalls betroffen. Das Problem tritt fast ausschließlich dann auf, wenn (FreeBSD)-PC-Systeme mit Hochleistungsrechnern verbunden werden, wie Systemen von Silicon Graphics, Inc. oder Sun Microsystems, Inc. Das Einhängen via NFS funktioniert problemlos, auch einige Dateioperationen können erfolgreich sein. Plötzlich aber wird der Server nicht mehr auf den Client reagieren, obwohl Anfragen von anderen Rechnern weiterhin bearbeitet werden. Dieses Problem betrifft stets den Client, egal ob es sich beim Client um das FreeBSD-System oder den Hochleistungsrechner handelt. Auf vielen Systemen gibt es keine Möglichkeit mehr, den Client ordnungsgemäß zu beenden. Die einzige Lösung ist es oft, den Rechner neu zu starten, da dieses NFS-Problem nicht mehr behoben werden kann. Die korrekte Lösung für dieses Problem ist es, sich eine schnellere Ethernetkarte für FreeBSD zu kaufen. Allerdings gibt es auch eine einfache und meist zufriedenstellende Lösung, um dieses Problem zu umgehen. Wenn es sich beim FreeBSD-System um den Server handelt, verwenden Sie beim Einhängen in den Verzeichnisbaum auf der Clientseite zusätzlich die Option . Wenn es sich beim FreeBSD-System um den Client handelt, dann hängen Sie das NFS-Dateisystem mit der zusätzlichen Option ein. Diese Optionen können auf der Clientseite auch durch das vierte Feld der Einträge in /etc/fstab festgelegt werden, damit die Dateisysteme automatisch eingehängt werden. Um die Dateisysteme manuell einzuhängen, verwendet man bei &man.mount.8; zusätzlich die Option . Es gibt ein anderes Problem, das oft mit diesem verwechselt wird. Dieses andere Problem tritt auf, wenn sich über NFS verbundene Server und Clients in verschiedenen Netzwerken befinden. Wenn dies der Fall ist, stellen Sie sicher, dass Ihre Router die nötigen UDP-Informationen weiterleiten, oder Sie werden nirgends hingelangen, egal was Sie machen. In den folgenden Beispielen ist fastws der Name des Hochleistungsrechners (bzw. dessen Schnittstelle), freebox hingegen ist der Name des FreeBSD-Systems, das über eine Netzkarte mit geringer Leistung verfügt. /sharedfs ist das exportierte NFS -Dateisystem (lesen Sie dazu auch &man.exports.5;). Bei /project handelt es sich um den Mountpunkt, an dem das exportierte Dateisystem auf der Clientseite eingehängt wird. In allen Fällen können zusätzliche Optionen, wie z.B. , oder wünschenswert sein. FreeBSD als Client (eingetragen in /etc/fstab auf freebox): fastws:/sharedfs /project nfs rw,-r=1024 0 0 Manuelles Einhängen auf freebox: &prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /project &os; als Server (eingetragen in /etc/fstab auf fastws): freebox:/sharedfs /project nfs rw,-w=1024 0 0 Manuelles Einhängen auf fastws: &prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /project Nahezu alle 16-bit Ethernetadapter erlauben Operationen ohne obengenannte Einschränkungen auf die Lese- oder Schreibgröße. Für alle technisch Interessierten wird nun beschrieben, was passiert, wenn dieser Fehler auftritt, und warum er irreversibel ist. NFS arbeitet üblicherweise mit einer Blockgröße von 8 kByte (obwohl es kleinere Fragmente zulassen würde). Da die maximale Rahmengröße von Ethernet 1500 Bytes beträgt, wird der NFS-Block in einzelne Ethernetrahmen aufgeteilt, obwohl es sich nach wie vor um eine Einheit handelt, die auch als Einheit empfangen, verarbeitet und bestätigt werden muss. Der Hochleistungsrechner verschickt die Pakete, aus denen der NFS-Block besteht, so eng hintereinander, wie es der Standard erlaubt. Auf der anderen Seite (auf der sich die langsamere Netzkarte befindet), überschreiben die späteren Pakete ihre Vorgänger, bevor diese vom System verarbeitet werden (Überlauf!). Dies hat zur Folge, dass der NFS-Block nicht mehr rekonstruiert und bestätigt werden kann. Als Folge davon glaubt der Hochleistungsrechner, dass der andere Rechner nicht erreichbar ist (Timeout!) und versucht die Sendung zu wiederholen. Allerdings wird wiederum der komplette NFS-Block verschickt, so dass sich der ganze Vorgang wiederholt, und zwar immer wieder (oder bis zum Systemneustart). Indem wir die Einheitengröße unter der maximalen Größe der Ethernetpakete halten, können wir sicherstellen, dass jedes vollständig erhaltene Ethernetpaket individuell angesprochen werden kann und vermeiden die Blockierung des Systems. Überläufe können zwar nach wie vor auftreten, wenn ein Hochleistungsrechner Daten auf ein PC-System transferiert. Durch die besseren (und schnelleren) Netzkarten treten solche Überläufe allerdings nicht mehr zwingend auf, wenn NFS-Einheiten übertragen werden. Tritt nun ein Überlauf auf, wird die betroffene Einheit erneut verschickt, und es besteht eine gute Chance, dass sie nun erhalten, verarbeitet und bestätigt werden kann. Bill Swingle Beigetragen von Eric Ogren Erweitert von Udo Erdelhoff NIS/YP – Network Information Service Was ist NIS? NIS Solaris HP-UX AIX Linux NetBSD OpenBSD NIS wurde von Sun Microsystems entwickelt, um &unix;-Systeme (ursprünglich &sunos;) zentral verwalten zu können. Mittlerweile hat es sich zu einem Industriestandard entwickelt, der von allen wichtigen &unix;-Systemen (&solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, FreeBSD und anderen) unterstützt wird. yellow pages NIS NIS war ursprünglich als Yellow Pages bekannt, aus markenrechtlichen Gründen wurde der Name aber geändert. Die alte Bezeichnung (sowie die Abkürzung YP) wird aber nach wie vor häufig verwendet. NIS Domänen Bei NIS handelt es sich um ein RPC-basiertes Client/Server-System. Eine Gruppe von Rechnern greift dabei innerhalb einer NIS-Domäne auf gemeinsame Konfigurationsdateien zu. Ein Systemadministrator wird dadurch in die Lage versetzt, NIS-Clients mit minimalem Aufwand einzurichten, sowie Änderungen an der Systemkonfiguration von einem zentralen Ort aus durchzuführen. Windows NT Die Funktion entspricht dem Domänensystem von &windowsnt;; auch wenn sich die interne Umsetzung unterscheidet, sind die Basisfunktionen vergleichbar. Wichtige Prozesse und Begriffe Es gibt verschiedene Begriffe und Anwenderprozesse, auf die Sie stoßen werden, wenn Sie NIS unter FreeBSD einrichten, egal ob Sie einen Server oder einen Client konfigurieren: rpcbind Begriff Beschreibung NIS-Domänenname Ein NIS-Masterserver sowie alle Clients (inklusive der Slaveserver) haben einen NIS-Domänennamen. Dieser hat (ähnlich den &windowsnt;-Domänennamen) nichts mit DNS zu tun. rpcbind Muss laufen, damit RPC (Remote Procedure Call, ein von NIS verwendetes Netzwerkprotokoll) funktioniert. NIS-Server sowie Clients funktionieren ohne rpcbind nicht. ypbind Bindet einen NIS-Client an seinen NIS-Server. Der Client bezieht den NIS-Domänennamen vom System und stellt über das RPC-Protokoll eine Verbindung zum NIS-Server her. ypbind ist der zentrale Bestandteil der Client-Server-Kommunikation in einer NIS-Umgebung. Wird >ypbind auf einem Client beendet, ist dieser nicht mehr in der Lage, auf den NIS-Server zuzugreifen. ypserv Sollte nur auf dem NIS-Server laufen, da es sich um den Serverprozess selbst handelt. Wenn &man.ypserv.8; nicht mehr läuft, kann der Server nicht mehr auf NIS-Anforderungen reagieren (wenn ein Slaveserver existiert, kann dieser als Ersatz fungieren). Einige NIS-Systeme (allerdings nicht das von FreeBSD) versuchen allerdings erst gar nicht, sich mit einem anderen Server zu verbinden, wenn der bisher verwendete Server nicht mehr reagiert. Die einzige Lösung dieses Problems besteht dann darin, den Serverprozess (oder gar den Server selbst) oder den ypbind-Prozess auf dem Client neu zu starten. rpc.yppasswdd Ein weiterer Prozess, der nur auf dem NIS-Masterserver laufen sollte. Es handelt sich um einen Daemonprozess, der es NIS-Clients ermöglicht, sich auf dem NIS-Masterserver anzumelden, um ihr Passwort zu ändern. Wie funktioniert NIS? In einer NIS-Umgebung gibt es drei Rechnerarten: Masterserver, Slaveserver und Clients. Server dienen als zentraler Speicherort für Rechnerkonfigurationen. Masterserver speichern die maßgebliche Kopie dieser Informationen, während Slaveserver diese Informationen aus Redundanzgründen spiegeln. Die Clients beziehen ihre Informationen immer vom Server. Auf diese Art und Weise können Informationen aus verschiedenen Dateien von mehreren Rechnern gemeinsam verwendet werden. master.passwd, group, und hosts werden oft gemeinsam über NIS verwendet. Immer, wenn ein Prozess auf einem Client auf Informationen zugreifen will, die normalerweise in lokalen Dateien vorhanden wären, wird stattdessen eine Anfrage an den NIS-Server gestellt, an den der Client gebunden ist. Arten von NIS-Rechnern NIS Masterserver Ein NIS-Masterserver verwaltet, ähnlich einem &windowsnt;-Domänencontroller, die von allen NIS-Clients gemeinsam verwendeten Dateien. passwd, group, sowie verschiedene andere von den Clients verwendete Dateien existieren auf dem Masterserver. Ein Rechner kann auch für mehrere NIS-Domänen als Masterserver fungieren. Dieser Abschnitt konzentriert sich im Folgenden allerdings auf eine relativ kleine NIS-Umgebung. NIS Slaveserver NIS-Slaveserver. Ähnlich einem &windowsnt;-Backupdomänencontroller, verwalten NIS-Slaveserver Kopien der Daten des NIS-Masterservers. NIS-Slaveserver bieten die Redundanz, die für kritische Umgebungen benötigt wird. Zusätzlich entlasten Slaveserver den Masterserver: NIS-Clients verbinden sich immer mit dem NIS-Server, der zuerst reagiert. Dieser Server kann auch ein Slaveserver sein. NIS Client NIS-Clients. NIS-Clients identifizieren sich gegenüber dem NIS-Server (ähnlich den &windowsnt;-Workstations), um sich am Server anzumelden. NIS/YP konfigurieren Dieser Abschnitt beschreibt an Hand eines Beispiels die Einrichtung einer NIS-Umgebung. Planung Nehmen wir an, Sie seien der Administrator eines kleinen Universitätsnetzes. Dieses Netz besteht aus fünfzehn FreeBSD-Rechnern, für die derzeit keine zentrale Verwaltung existiert, jeder Rechner hat also eine eigene Version von /etc/passwd und /etc/master.passwd. Diese Dateien werden manuell synchron gehalten; legen Sie einen neuen Benutzer an, so muss dies auf allen fünfzehn Rechnern manuell erledigt werden (unter Verwendung von adduser). Da diese Lösung sehr ineffizient ist, soll das Netzwerk in Zukunft NIS verwenden, wobei zwei der Rechner als Server dienen sollen. In Zukunft soll das Netz also wie folgt aussehen: Rechnername IP-Adresse Rechneraufgabe ellington 10.0.0.2 NIS-Master coltrane 10.0.0.3 NIS-Slave basie 10.0.0.4 Workstation der Fakultät bird 10.0.0.5 Clientrechner cli[1-11] 10.0.0.[6-17] Verschiedene andere Clients Wenn Sie NIS das erste Mal einrichten, ist es ratsam, sich zuerst über die Vorgangsweise Gedanken zu machen. Unabhängig von der Größe Ihres Netzwerks müssen Sie stets einige Entscheidungen treffen. Einen NIS-Domänennamen wählen NIS Domänenname Dies muss nicht der Domainname sein. Es handelt sich vielmehr um den NIS-Domainnamen. Wenn ein Client Informationen anfordert, ist in dieser Anforderung der Name der NIS-Domäne enthalten. Dadurch weiß jeder Server im Netzwerk, auf welche Anforderung er antworten muss. Stellen Sie sich den NIS-Domänennamen als den Namen einer Gruppe von Rechnern vor, die etwas gemeinsam haben. Manchmal wird der Name der Internetdomäne auch für die NIS-Domäne verwendet. Dies ist allerdings nicht empfehlenswert, da dies bei der Behebung von Problemen verwirrend sein kann. Der Name der NIS-Domäne sollte innerhalb Ihres Netzwerks einzigartig sein. Hilfreich ist es, wenn der Name die Gruppe der in ihr zusammengefassten Rechner beschreibt. Die Kunstabteilung von Acme Inc. hätte daher die NIS-Domäne acme-art. Für unser Beispiel verwenden wir den NIS-Domänennamen test-domain. SunOS Es gibt jedoch auch Betriebssysteme (vor allem &sunos;), die als NIS-Domänennamen den Name der Internetdomäne verwenden. Wenn dies für einen oder mehrere Rechner Ihres Netzwerks zutrifft, müssen Sie den Namen der Internetdomäne als Ihren NIS-Domänennamen verwenden. Anforderungen an den Server Wenn Sie einen NIS-Server einrichten wollen, müssen Sie einige Dinge beachten. Eine unangenehme Eigenschaft von NIS ist die Abhängigkeit der Clients vom Server. Wenn sich der Client nicht über den Server mit seiner NIS-Domäne verbinden kann, wird der Rechner oft unbenutzbar, da das Fehlen von Benutzer- und Gruppeninformationen zum Einfrieren des Clients führt. Daher sollten Sie für den Server einen Rechner auswählen, der nicht regelmäßig neu gestartet werden muss und der nicht für Testversuche verwendet wird. Idealerweise handelt es sich um einen alleinstehenden Rechner, dessen einzige Aufgabe es ist, als NIS-Server zu dienen. Wenn Sie ein Netzwerk haben, das nicht zu stark ausgelastet ist, ist es auch möglich, den NIS-Server als weiteren Dienst auf einem anderen Rechner laufen zu lassen. Denken Sie aber daran, dass ein Ausfall des NIS-Servers alle NIS-Clients betrifft. NIS-Server Die verbindlichen Kopien aller NIS-Informationen befinden sich auf einem einzigen Rechner, dem NIS-Masterserver. Die Datenbanken, in denen die Informationen gespeichert sind, bezeichnet man als NIS-Maps. Unter FreeBSD werden diese Maps unter /var/yp/[domainname] gespeichert, wobei [domainname] der Name der NIS-Domäne ist. Ein einzelner NIS-Server kann gleichzeitig mehrere NIS-Domänen verwalten, daher können auch mehrere Verzeichnisse vorhanden sein. Jede Domäne verfügt über ein eigenes Verzeichnis sowie einen eigenen, von anderen Domänen unabhängigen Satz von NIS-Maps. NIS-Master- und Slaveserver verwenden den ypserv-Daemon, um NIS-Anfragen zu bearbeiten. ypserv empfängt eingehende Anfragen der NIS-Clients, ermittelt aus der angeforderten Domäne und Map einen Pfad zur entsprechenden Datenbank, und sendet die angeforderten Daten von der Datenbank zum Client. Einen NIS-Masterserver einrichten NIS Serverkonfiguration Abhängig von Ihren Anforderungen ist die Einrichtung eines NIS-Masterservers relativ einfach, da NIS von FreeBSD bereits in der Standardkonfiguration unterstützt wird. Sie müssen nur folgende Zeilen in /etc/rc.conf einfügen: nisdomainname="test-domain" Diese Zeile setzt den NIS-Domänennamen auf test-domain, wenn Sie das Netzwerk initialisieren (beispielsweise nach einem Systemstart). nis_server_enable="YES" Dadurch werden die NIS-Serverprozesse gestartet. nis_yppasswdd_enable="YES" Durch diese Zeile wird der rpc.yppasswdd-Daemon aktiviert, der, wie bereits erwähnt, die Änderung von NIS-Passwörtern von einem Client aus ermöglicht. In Abhängigkeit von Ihrer NIS-Konfiguration können weitere Einträge erforderlich sein. Weitere Informationen finden Sie im Abschnitt NIS-Server, die auch als NIS-Clients arbeiten. Nun müssen Sie nur noch /etc/netstart als Superuser ausführen, um alles entsprechend Ihren Vorgaben in /etc/rc.conf einzurichten. Die NIS-Maps initialisieren NIS maps NIS-Maps sind Datenbanken, die sich im Verzeichnis /var/yp befinden. Sie werden am NIS-Masterserver aus den Konfigurationsdateien unter /etc erzeugt. Einzige Ausnahme: /etc/master.passwd. Dies ist auch sinnvoll, da Sie die Passwörter für Ihr root- oder andere Administratorkonten nicht an alle Server der NIS-Domäne verteilen wollen. Bevor Sie also die NIS-Maps des Masterservers einrichten, sollten Sie Folgendes tun: &prompt.root; cp /etc/master.passwd /var/yp/master.passwd &prompt.root; cd /var/yp &prompt.root; vi master.passwd Entfernen Sie alle Systemkonten (wie bin, tty, kmem oder games), sowie alle Konten, die Sie nicht an die NIS-Clients weitergeben wollen (beispielsweise root und alle Konten mit der UID 0 (=Superuser). Stellen Sie sicher, dass /var/yp/master.passwd weder von der Gruppe noch von der Welt gelesen werden kann (Zugriffsmodus 600)! Ist dies nicht der Fall, ändern Sie dies mit chmod. Tru64 UNIX Nun können Sie die NIS-Maps initialisieren. FreeBSD verwendet dafür das Skript ypinit (lesen Sie dazu auch &man.ypinit.8;). Dieses Skript ist auf fast allen UNIX-Betriebssystemen verfügbar. Bei Digitals Unix/Compaq Tru64 UNIX nennt es sich allerdings ypsetup. Da wir Maps für einen NIS-Masterserver erzeugen, verwenden wir ypinit mit der Option . Nachdem Sie die beschriebenen Aktionen durchgeführt haben, erzeugen Sie nun die NIS-Maps: ellington&prompt.root; ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors. Dadurch erzeugt ypinit /var/yp/Makefile aus der Datei /var/yp/Makefile.dist. Durch diese Datei wird festgelegt, dass Sie in einer NIS-Umgebung mit nur einem Server arbeiten und dass alle Clients unter FreeBSD laufen. Da test-domain aber auch über einen Slaveserver verfügt, müssen Sie /var/yp/Makefile entsprechend anpassen: ellington&prompt.root; vi /var/yp/Makefile Sie sollten die Zeile NOPUSH = "True" auskommentieren (falls dies nicht bereits der Fall ist). Einen NIS-Slaveserver einrichten NIS Slaveserver Ein NIS-Slaveserver ist noch einfacher einzurichten als ein Masterserver. Melden Sie sich am Slaveserver an und ändern Sie /etc/rc.conf analog zum Masterserver. Der einzige Unterschied besteht in der Verwendung der Option , wenn Sie ypinit aufrufen. Die Option erfordert den Namen des NIS-Masterservers, daher sieht unsere Ein- und Ausgabe wie folgt aus: coltrane&prompt.root; ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hosts.byaddr... ypxfr: Exiting: Map successfully transferred Transferring protocols.bynumber... ypxfr: Exiting: Map successfully transferred Transferring ypservers... ypxfr: Exiting: Map successfully transferred Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington. Sie sollten nun über das Verzeichnis /var/yp/test-domain verfügen. Die Kopien der NIS-Masterserver-Maps sollten sich in diesem Verzeichnis befinden. Allerdings müssen Sie diese auch aktuell halten. Die folgenden Einträge in /etc/crontab erledigen diese Aufgabe: 20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid Diese zwei Zeilen zwingen den Slaveserver, seine Maps mit denen des Masterservers zu synchronisieren. Diese Einträge sind nicht zwingend, da der Masterserver versucht, alle Änderungen seiner NIS-Maps an seine Slaveserver weiterzugeben. Da Passwortinformationen aber für vom Server abhängige Systeme vital sind, ist es eine gute Idee, diese Aktualisierungen zu erzwingen. Besonders wichtig ist dies in stark ausgelasteten Netzen, in denen Map-Aktualisierungen unvollständig sein könnten. Führen Sie nun /etc/netstart auch auf dem Slaveserver aus, um den NIS-Server erneut zu starten. NIS-Clients Ein NIS-Client bindet sich unter Verwendung des ypbind-Daemons an einen NIS-Server. ypbind prüft die Standarddomäne des Systems (die durch domainname gesetzt wird), und beginnt RPCs über das lokale Netzwerk zu verteilen (broadcast). Diese Anforderungen legen den Namen der Domäne fest, für die ypbind eine Bindung erzeugen will. Wenn der Server der entsprechenden Domäne eine solche Anforderung erhält, schickt er eine Antwort an ypbind. ybind speichert daraufhin die Adresse des Servers. Wenn mehrere Server verfügbar sind (beispielsweise ein Master- und mehrere Slaveserver), verwendet ypbind die erste erhaltene Adresse. Ab diesem Zeitpunkt richtet der Client alle Anfragen an genau diesen Server. ypbind pingt den Server gelegentlich an, um sicherzustellen, dass der Server funktioniert. Antwortet der Server innerhalb eines bestimmten Zeitraums nicht (Timeout), markiert ypbind die Domäne als ungebunden und beginnt erneut, RPCs über das Netzwerk zu verteilen, um einen anderen Server zu finden. Einen NIS-Client konfigurieren NIS Client konfigurieren Einen FreeBSD-Rechner als NIS-Client einzurichten, ist recht einfach. Fügen Sie folgende Zeilen in /etc/rc.conf ein, um den NIS-Domänennamen festzulegen, und um ypbind bei der Initialisierung des Netzwerks zu starten: nisdomainname="test-domain" nis_client_enable="YES" Um alle Passworteinträge des NIS-Servers zu importieren, löschen Sie alle Benutzerkonten in /etc/master.passwd und fügen mit vipw folgende Zeile am Ende der Datei ein: +::::::::: Diese Zeile legt für alle gültigen Benutzerkonten der NIS-Server-Maps einen Zugang an. Es gibt verschiedene Wege, Ihren NIS-Client durch Änderung dieser Zeile zu konfigurieren. Lesen Sie dazu auch den Abschnitt über Netzgruppen weiter unten. Weitere detaillierte Informationen finden Sie im Buch Managing NFS and NIS von O'Reilly. Sie sollten zumindest ein lokales Benutzerkonto, das nicht über NIS importiert wird, in Ihrer /etc/master.passwd behalten. Dieser Benutzer sollte außerdem ein Mitglied der Gruppe wheel sein. Wenn es mit NIS Probleme gibt, können Sie diesen Zugang verwenden, um sich anzumelden, root zu werden und das Problem zu beheben. Um alle möglichen Gruppeneinträge vom NIS-Server zu importieren, fügen sie folgende Zeile in /etc/group ein: +:*:: Nachdem Sie diese Schritte erledigt haben, sollten Sie mit ypcat passwd die passwd-Map des NIS-Servers anzeigen können. Sicherheit unter NIS NIS Sicherheit Im Allgemeinen kann jeder entfernte Anwender einen RPC an &man.ypserv.8; schicken, um den Inhalt Ihrer NIS-Maps abzurufen, falls er Ihren NIS-Domänennamen kennt. Um solche unautorisierten Transaktionen zu verhindern, unterstützt &man.ypserv.8; securenets, durch die man den Zugriff auf bestimmte Rechner beschränken kann. &man.ypserv.8; versucht, beim Systemstart die Informationen über securenets aus der Datei /var/yp/securenets zu laden. Die Datei securenets kann auch in einem anderen Verzeichnis stehen, das mit der Option angegeben wird. Diese Datei enthält Einträge, die aus einer Netzwerkadresse und einer Netzmaske bestehen, die durch Leerzeichen getrennt werden. Kommentarzeilen beginnen mit #. /var/yp/securnets könnte beispielsweise so aussehen: # allow connections from local host -- mandatory 127.0.0.1 255.255.255.255 # allow connections from any host # on the 192.168.128.0 network 192.168.128.0 255.255.255.0 # allow connections from any host # between 10.0.0.0 to 10.0.15.255 # this includes the machines in the testlab 10.0.0.0 255.255.240.0 Wenn &man.ypserv.8; eine Anforderung von einer zu diesen Regeln passenden Adresse erhält, wird die Anforderung bearbeitet. Gibt es keine passende Regel, wird die Anforderung ignoriert und eine Warnmeldung aufgezeichnet. Wenn /var/yp/securenets nicht vorhanden ist, erlaubt ypserv Verbindungen von jedem Rechner aus. ypserv unterstützt auch das TCP-Wrapper-Paket von Wietse Venema. Mit diesem Paket kann der Administrator für Zugriffskontrollen die Konfigurationsdateien von TCP-Wrapper anstelle von /var/yp/securenets verwenden. Während beide Kontrollmechanismen einige Sicherheit gewähren, beispielsweise durch privilegierte Ports, sind sie gegenüber IP spoofing-Attacken verwundbar. Jeder NIS-Verkehr sollte daher von Ihrer Firewall blockiert werden. Server, die /var/yp/securenets verwenden, können Schwierigkeiten bei der Anmeldung von Clients haben, die ein veraltetes TCP/IP-Subsystem besitzen. Einige dieser TCP/IP-Subsysteme setzen alle Rechnerbits auf Null, wenn Sie einen Broadcast durchführen und/oder können die Subnetzmaske nicht auslesen, wenn sie die Broadcast-Adresse berechnen. Einige Probleme können durch Änderungen der Clientkonfiguration behoben werden. Andere hingegen lassen sich nur durch das Entfernen des betreffenden Rechners aus dem Netzwerk oder den Verzicht auf /var/yp/securenets umgehen. Die Verwendung von /var/yp/securenets auf einem Server mit einem solch veralteten TCP/IP-Subsystem ist eine sehr schlechte Idee, die zu einem Verlust der NIS-Funktionalität für große Teile Ihres Netzwerks führen kann. TCP-Wrapper Die Verwendung der TCP-Wrapper verlangsamt die Reaktion Ihres NIS-Servers. Diese zusätzliche Reaktionszeit kann in Clientprogrammen zu Timeouts führen. Dies vor allem in Netzwerken, die stark ausgelastet sind, oder nur über langsame NIS-Server verfügen. Wenn ein oder mehrere Ihrer Clientsysteme dieses Problem aufweisen, sollten Sie die betreffenden Clients in NIS-Slaveserver umwandeln, und diese an sich selbst binden. Bestimmte Benutzer an der Anmeldung hindern NIS Benutzer blockieren In unserem Labor gibt es den Rechner basie, der nur für Mitarbeiter der Fakultät bestimmt ist. Wir wollen diesen Rechner nicht aus der NIS-Domäne entfernen, obwohl passwd des NIS-Masterservers Benutzerkonten sowohl für Fakultätsmitarbeiter als auch für Studenten enthält. Was können wir also tun? Es gibt eine Möglichkeit, bestimmte Benutzer an der Anmeldung an einem bestimmten Rechner zu hindern, selbst wenn diese in der NIS-Datenbank vorhanden sind. Dazu müssen Sie lediglich an diesem Rechner den Eintrag -Benutzername an das Ende von /etc/master.passwd setzen, wobei Benutzername der zu blockierende Benutzername ist. Diese Änderung sollte bevorzugt durch vipw erledigt werden, da vipw Ihre Änderungen an /etc/master.passwd auf Plausibilität überprüft und nach erfolgter Änderung die Passwortdatenbank automatisch aktualisiert. Um also den Benutzer bill an der Anmeldung am Rechner basie zu hindern, gehen wir wie folgt vor: basie&prompt.root; vipw [add -bill to the end, exit] vipw: rebuilding the database... vipw: done basie&prompt.root; cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill basie&prompt.root; Udo Erdelhoff Beigetragen von Netzgruppen verwenden Netzgruppen Die im letzten Abschnitt beschriebene Methode eignet sich besonders, wenn Sie spezielle Regeln für wenige Benutzer oder wenige Rechner benötigen. In großen Netzwerken werden Sie allerdings mit Sicherheit vergessen, einige Benutzer von der Anmeldung an bestimmten Rechnern auszuschließen. Oder Sie werden gezwungen sein, jeden Rechner einzeln zu konfigurieren. Dadurch verlieren Sie aber den Hauptvorteil von NIS, die zentrale Verwaltung. Die Lösung für dieses Problem sind Netzgruppen. Ihre Aufgabe und Bedeutung ist vergleichbar mit normalen, von UNIX-Dateisystemen verwendeten Gruppen. Die Hauptunterschiede sind das Fehlen einer numerischen ID sowie die Möglichkeit, Netzgruppen zu definieren, die sowohl Benutzer als auch andere Netzgruppen enthalten. Netzgruppen wurden entwickelt, um große, komplexe Netzwerke mit Hunderten Benutzern und Rechnern zu verwalten. Sie sind also von Vorteil, wenn Sie von dieser Situation betroffen sind. Andererseits ist es dadurch beinahe unmöglich, Netzgruppen mit einfachen Beispielen zu erklären. Das hier verwendete Beispiel veranschaulicht dieses Problem. Nehmen wir an, dass Ihre erfolgreiche Einführung von NIS die Aufmerksamkeit Ihrer Vorgesetzten geweckt hat. Ihre nächste Aufgabe besteht nun darin, Ihre NIS-Domäne um zusätzliche Rechner zu erweitern. Die folgenden Tabellen enthalten die neuen Benutzer und Rechner inklusive einer kurzen Beschreibung. Benutzername(n) Beschreibung alpha, beta Beschäftigte der IT-Abteilung charlie, delta Die neuen Lehrlinge der IT-Abteilung echo, foxtrott, golf, ... Normale Mitarbeiter able, baker, ... Externe Mitarbeiter Rechnername(n) Beschreibung war, death, famine, pollution Ihre wichtigsten Server. Nur IT-Fachleute dürfen sich an diesen Rechnern anmelden. pride, greed, envy, wrath, lust, sloth Weniger wichtige Server. Alle Mitarbeiter der IT-Abteilung dürfen sich auf diesen Rechnern anmelden. one, two, three, four, ... Gewöhnliche Arbeitsrechner. Nur die wirklichen Mitarbeiter dürfen diese Rechner verwenden. trashcan Ein sehr alter Rechner ohne kritische Daten. Sogar externe Mitarbeiter dürfen diesen Rechner verwenden. Wollten Sie diese Einschränkungen umsetzen, indem Sie jeden Benutzer einzeln blockieren, müssten Sie auf jedem System für jeden Benutzer eine entsprechende Zeile in passwd einfügen. Wenn Sie nur einen Eintrag vergessen, haben Sie ein Problem. Es mag noch angehen, dies während der ersten Installation zu erledigen, im täglichen Betrieb werden Sie allerdings mit Sicherheit einmal vergessen, die entsprechenden Einträge anzulegen. Vergessen Sie nicht: Murphy war Optimist. Die Verwendung von Netzgruppen hat in dieser Situation mehrere Vorteile. Sie müssen nicht jeden Benutzer einzeln verwalten; weisen Sie stattdessen den Benutzer einer Netzgruppe zu und erlauben oder verbieten Sie allen Mitglieder dieser Gruppe die Anmeldung an einem Server. Wenn Sie einen neuen Rechner hinzufügen, müssen Sie Zugangsbeschränkungen nur für die Netzgruppen festlegen. Legen Sie einen neuen Benutzer an, müssen Sie ihn nur einer oder mehrere Netzgruppen zuweisen. Diese Veränderungen sind voneinander unabhängig; Anweisungen der Form für diese Kombination aus Benutzer und Rechner mache Folgendes ... sind nicht mehr nötig. Wenn Sie die Einrichtung von NIS sorgfältig geplant haben, müssen Sie nur noch eine zentrale Konfigurationsdatei bearbeiten, um den Zugriff auf bestimmte Rechner zu erlauben oder zu verbieten. Der erste Schritt ist die Initialisierung der NIS-Maps der Netzgruppe. &man.ypinit.8; kann dies unter FreeBSD nicht automatisch durchführen. Sind die Maps aber erst einmal erzeugt, werden sie jedoch von NIS problemlos unterstützt. Um eine leere Map zu erzeugen, geben Sie Folgendes ein: ellington&prompt.root; vi /var/yp/netgroup Danach legen Sie die Einträge an. Für unser Beispiel benötigen wir mindestens vier Netzgruppen: IT-Beschäftige, IT-Lehrlinge, normale Beschäftigte sowie Externe. IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) USERS (,echo,test-domain) (,foxtrott,test-domain) \ (,golf,test-domain) INTERNS (,able,test-domain) (,baker,test-domain) Bei IT_EMP, IT_APP usw. handelt es sich um Netzgruppennamen. In den Klammern werden diesen Netzgruppen jeweils ein oder mehrere Benutzerkonten hinzugefügt. Die drei Felder in der Klammer haben folgende Bedeutung: Der Name des Rechners, auf dem die folgenden Werte gültig sind. Legen Sie keinen Rechnernamen fest, ist der Eintrag auf allen Rechnern gültig. Dadurch gehen Sie vielen Problemen aus dem Weg. Der Name des Benutzerkontos, der zu dieser Netzgruppe gehört. Die NIS-Domäne für das Benutzerkonto. Sie können Benutzerkonten von anderen NIS-Domänen in Ihre Netzgruppe importieren, wenn Sie mehrere NIS-Domänen verwalten. Jedes Feld kann Wildcards enthalten. Die Einzelheiten entnehmen Sie bitte &man.netgroup.5;. Netzgruppen Netzgruppennamen sollten nicht länger als 8 Zeichen sein, vor allem dann, wenn Sie Rechner mit verschiedenen Betriebssystemen in Ihrer NIS-Domäne haben. Es wird zwischen Groß- und Kleinschreibung unterschieden. Die Verwendung von Großbuchstaben für Netzgruppennamen ermöglicht eine leichte Unterscheidung zwischen Benutzern, Rechnern und Netzgruppen. Einige NIS-Clients (dies gilt nicht für FreeBSD) können keine Netzgruppen mit einer großen Anzahl von Einträgen verwalten. Einige ältere Versionen von &sunos; haben beispielsweise Probleme, wenn Netzgruppen mehr als fünfzehn Einträge enthalten. Sie können dieses Problem umgehen, indem Sie mehrere Subnetzgruppen mit weniger als fünfzehn Benutzern anlegen und diese Subnetzgruppen wiederum in einer Netzgruppe zusammenfassen: BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 Sie können diesen Vorgang wiederholen, wenn Sie mehr als 255 Benutzer in einer einzigen Netzgruppe benötigen. Das Aktivieren und Verteilen Ihre neuen NIS-Map ist einfach: ellington&prompt.root; cd /var/yp ellington&prompt.root; make Dadurch werden die NIS-Maps netgroup, netgroup.byhost und netgroup.byuser erzeugt. Prüfen Sie die Verfügbarkeit Ihrer neuen NIS-Maps mit &man.ypcat.1;. ellington&prompt.user; ypcat -k netgroup ellington&prompt.user; ypcat -k netgroup.byhost ellington&prompt.user; ypcat -k netgroup.byuser Die Ausgabe des ersten Befehls gibt den Inhalt von /var/yp/netgroup wieder. Der zweite Befehl erzeugt nur dann eine Ausgabe, wenn Sie rechnerspezifische Netzgruppen erzeugt haben. Der dritte Befehl gibt die Netzgruppen nach Benutzern sortiert aus. Die Einrichtung der Clients ist einfach. Sie müssen lediglich auf dem Server war &man.vipw.8; aufrufen und die Zeile +::::::::: durch +@IT_EMP::::::::: ersetzen. Ab sofort werden nur noch die Daten der in der Netzgruppe IT_EMP vorhandenen Benutzer in die Passwortdatenbank von war importiert. Nur diese Benutzer dürfen sich am Server anmelden. Unglücklicherweise gilt diese Einschränkung auch für die ~-Funktion der Shell und für alle Routinen, die auf Benutzernamen und numerische Benutzer-IDs zugreifen. Oder anders formuliert, cd ~user ist nicht möglich, ls -l zeigt die numerische Benutzer-ID statt dem Benutzernamen und find . -user joe -print erzeugt die Fehlermeldung No such user. Um dieses Problem zu beheben, müssen Sie alle Benutzereinträge importieren, ohne ihnen jedoch zu erlauben, sich an Ihrem Server anzumelden. Dazu fügen Sie eine weitere Zeile in /etc/master.passwd ein. Diese Zeile sollte ähnlich der folgenden aussehen: +:::::::::/sbin/nologin, was in etwa Importiere alle Einträge, aber ersetze die Shell in den importierten Einträgen durch /sbin/nologin entspricht. Sie können jedes Feld dieses Eintrages ersetzen, indem Sie einen Standardwert in /etc/master.passwd eintragen. Stellen Sie sicher, dass die Zeile +:::::::::/sbin/nologin nach der Zeile +@IT_EMP::::::::: eingetragen ist. Sonst haben alle via NIS importierten Benutzerkonten /sbin/nologin als Loginshell. Danach müssen Sie nur mehr eine einzige NIS-Map ändern, wenn ein neuer Mitarbeiter berücksichtigt werden muss. Für weniger wichtige Server gehen Sie analog vor, indem Sie den alten Eintrag +::::::::: in den lokalen Versionen von /etc/master.passwd durch folgende Einträge ersetzen: +@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin Die entsprechenden Zeilen für normale Arbeitsplätze lauten: +@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin Ab jetzt wäre alles wunderbar, allerdings ändert sich kurz darauf die Firmenpolitik: Die IT-Abteilung beginnt damit, externe Mitarbeiter zu beschäftigen. Externe dürfen sich an normalen Arbeitsplätzen sowie an den weniger wichtigen Servern anmelden. Die IT-Lehrlinge dürfen sich nun auch an den Hauptservern anmelden. Sie legen also die neue Netzgruppe IT_INTERN an, weisen Ihr die neuen IT-Externen als Benutzer zu und beginnen damit, die Konfiguration auf jedem einzelnen Rechner zu ändern ... Halt. Sie haben gerade die alte Regel Fehler in der zentralisierten Planung führen zu globaler Verwirrung. bestätigt. Da NIS in der Lage ist, Netzgruppen aus anderen Netzgruppen zu bilden, lassen sich solche Situationen leicht vermeiden. Eine Möglichkeit ist die Erzeugung rollenbasierter Netzgruppen. Sie könnten eine Netzgruppe BIGSRV erzeugen, um den Zugang zu den wichtigsten Servern zu beschränken, eine weitere Gruppe SMALLSRV für die weniger wichtigen Server und eine dritte Netzgruppe USERBOX für die normalen Arbeitsplatzrechner. Jede dieser Netzgruppen enthält die Netzgruppen, die sich auf diesen Rechnern anmelden dürfen. Die Einträge der Netzgruppen in der NIS-Map sollten ähnlich den folgenden aussehen: BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS Diese Methode funktioniert besonders gut, wenn Sie Rechner in Gruppen mit identischen Beschränkungen einteilen können. Unglücklicherweise ist dies die Ausnahme und nicht die Regel. Meistens werden Sie die Möglichkeit zur rechnerspezischen Zugangsbeschränkung benötigen. Rechnerspezifische Netzgruppen sind die zweite Möglichkeit, um mit den oben beschriebenen Änderungen umzugehen. In diesem Szenario enthält /etc/master.passwd auf jedem Rechner zwei mit + beginnende Zeilen. Die erste Zeile legt die Netzgruppe mit den Benutzern fest, die sich auf diesem Rechner anmelden dürfen. Die zweite Zeile weist allen anderen Benutzern /sbin/nologin als Shell zu. Verwenden Sie auch hier (analog zu den Netzgruppen) Großbuchstaben für die Rechnernamen. Die Zeilen sollten also ähnlich den folgenden aussehen: +@BOXNAME::::::::: +:::::::::/sbin/nologin Wenn Sie dies für alle Rechner erledigt haben, werden Sie die lokalen Versionen von /etc/master.passwd nie mehr verändern müssen. Alle weiteren Änderungen geschehen über die NIS-Maps. Nachfolgend ein Beispiel für eine mögliche Netzgruppen-Map, die durch einige Besonderheiten erweitert wurde: # Define groups of users first IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) DEPT2 (,golf,test-domain) (,hotel,test-domain) DEPT3 (,india,test-domain) (,juliet,test-domain) ITINTERN (,kilo,test-domain) (,lima,test-domain) D_INTERNS (,able,test-domain) (,baker,test-domain) # # Now, define some groups based on roles USERS DEPT1 DEPT2 DEPT3 BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS # # And a groups for a special tasks # Allow echo and golf to access our anti-virus-machine SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) # # machine-based netgroups # Our main servers WAR BIGSRV FAMINE BIGSRV # User india needs access to this server POLLUTION BIGSRV (,india,test-domain) # # This one is really important and needs more access restrictions DEATH IT_EMP # # The anti-virus-machine mentioned above ONE SECURITY # # Restrict a machine to a single user TWO (,hotel,test-domain) # [...more groups to follow] Wenn Sie eine Datenbank verwenden, um Ihre Benutzerkonten zu verwalten, sollten Sie den ersten Teil der NIS-Map mit Ihren Datenbanktools erstellen können. Auf diese Weise haben neue Benutzer automatisch Zugriff auf die Rechner. Eine letzte Warnung: Es ist nicht immer ratsam, rechnerbasierte Netzgruppen zu verwenden. Wenn Sie Dutzende oder gar Hunderte identische Rechner einrichten müssen, sollten Sie rollenbasierte Netzgruppen verwenden, um die Grösse der NISs-Maps in Grenzen zu halten. Weitere wichtige Punkte Nachdem Sie Ihre NIS-Umgebung eingerichtet haben, müssen Sie einige Dinge anders als bisher erledigen. Jedes Mal, wenn Sie einen neuen Benutzer anlegen wollen, tun Sie dies ausschließlich am NIS-Masterserver. Außerdem müssen Sie anschließend die NIS-Maps neu erzeugen. Wenn Sie diesen Punkt vergessen, kann sich der neue Benutzer nur am NIS-Masterserver anmelden. Wenn Sie also den neuen Benutzer jsmith anlegen, gehen Sie folgerndermassen vor: &prompt.root; pw useradd jsmith &prompt.root; cd /var/yp &prompt.root; make test-domain Statt pw useradd jsmith könnten Sie auch adduser jsmith verwenden. Tragen Sie die Administratorkonten nicht in die NIS-Maps ein. Administratorkonten und Passwörter dürfen nicht auf Rechnern verbreitet werden, auf denen sich Benutzer anmelden können, die auf diese Konten keine Zugriff haben sollen. Sichern Sie die NIS-Master- und Slaveserver und minimieren Sie die Ausfallzeiten. Wenn diese Rechner gehackt oder einfach nur ausgeschaltet werden, haben viele Leute keinen Netzwerkzugriff mehr. Dies ist die größte Schwäche jeder zentralen Verwaltung. Wenn Sie Ihre NIS-Server nicht schützen, werden Sie viele verärgerte Anwender haben. Kompatibilität zu NIS v1 NIS Kompatibilität zu NIS v1 ypserv unterstützt NIS v1 unter FreeBSD nur eingeschränkt. Die NIS-Implementierung von FreeBSD verwendet nur NIS v2, andere Implementierungen unterstützen aus Gründen der Abwärtskompatibilität mit älteren Systemen auch NIS v1. Die mit diesen Systemen gelieferten ypbind-Daemonen versuchen, sich an einen NIS-v1-Server zu binden (Dies selbst dann, wenn sie ihn nie benötigen. Außerdem versuchen Sie auch dann, einen v1-Server zu erreichen, wenn Sie zuvor eine Antwort von einem v2-Server erhalten.). Während normale Clientaufrufe unter FreeBSD unterstützt werden, sind Anforderungen zum Transfer von v1-Maps nicht möglich. Daher kann FreeBSD nicht als Client oder Server verwendet werden, wenn ein NIS-Server vorhanden ist, der nur NIS v1 unterstützt. Glücklicherweise sollte es heute keine Server mehr geben, die nur NIS v1 unterstützen. NIS-Server, die auch als NIS-Clients arbeiten Wenn Sie ypserv in einer Multi-Serverdomäne verwenden, in der NIS-Server gleichzeitig als NIS-Clients arbeiten, ist es eine gute Idee, diese Server zu zwingen, sich an sich selbst zu binden. Damit wird verhindert, dass Bindeanforderungen gesendet werden und sich die Server gegenseitig binden. Sonst könnten seltsame Fehler auftreten, wenn ein Server ausfällt, auf den andere Server angewiesen sind. Letztlich werden alle Clients einen Timeout melden, und versuchen, sich an andere Server zu binden. Die dadurch entstehende Verzögerung kann beträchtlich sein. Außerdem kann der Fehler erneut auftreten, da sich die Server wiederum aneinander binden könnten. Sie können einen Rechner durch die Verwendung von ypbind sowie der Option zwingen, sich an einen bestimmten Server zu binden. Um diesen Vorgang zu automatisieren, können Sie folgende Zeilen in /etc/rc.conf einfügen: nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server" Lesen Sie &man.ypbind.8;, wenn Sie weitere Informationen benötigen. Passwortformate NIS Passwortformate Unterschiedliche Passwortformate sind das Hauptproblem, das beim Einrichten eines NIS-Servers auftreten kann. Wenn der NIS-Server mit DES verschlüsselte Passwörter verwendet, werden nur Clients unterstützt, die ebenfalls DES benutzen. Wenn sich auf Ihrem Netzwerk beispielsweise &solaris; NIS-Clients befinden, müssen die Passwörter mit DES verschlüsselt werden. Welches Format die Server und Clients verwenden, steht in /etc/login.conf. Wenn ein System Passwörter mit DES verschlüsselt, enthält die default-Klasse einen Eintrag wie den folgenden: default:\ :passwd_format=des:\ :copyright=/etc/COPYRIGHT:\ [weitere Einträge] Mögliche Werte für passwd_format sind unter anderem blf und md5 (mit Blowfish und MD5 verschlüsselte Passwörter). Wenn die Datei /etc/login.conf geändert wird, muss die Login-Capability Datenbank neu erstellt werden. Geben Sie dazu als root den folgenden Befehl ein: &prompt.root; cap_mkdb /etc/login.conf Das Format der schon in /etc/master.passwd befindlichen Passwörter wird erst aktualisiert, wenn ein Benutzer sein Passwort ändert, nachdem die Datenbank neu erstellt wurde. Damit die Passwörter auch im gewählten Format abgespeichert werden, muss mit crypt_default in der Datei /etc/auth.conf die richtige Priorität der Formate eingestellt werden. Das gewählte Format sollte als Erstes in der Liste stehen. Sollen die Passwörter mit DES verschlüsselt werden, verwenden Sie den folgenden Eintrag: crypt_default = des blf md5 Wenn Sie alle &os; NIS-Server und NIS-Clients entsprechend den obigen Schritten eingestellt haben, wird im ganzen Netzwerk dasselbe Passwortformat verwendet. Falls Sie Probleme mit der Authentifizierung eines NIS-Clients haben, kontrollieren Sie die verwendeten Passwortformate. In einer heterogenen Umgebung werden Sie DES benutzen müssen, da dies der meist unterstützte Standard ist. Greg Sutter Geschrieben von Automatische Netzwerkkonfiguration mit DHCP Was ist DHCP? Dynamic Host Configuration Protocol DHCP Internet Software Consortium (ISC) Über DHCP, das Dynamic Host Configuration Protocol, kann sich ein System mit einem Netzwerk verbinden und die für die Kommunikation mit diesem Netzwerk nötigen Informationen beziehen. &os;-Versionen vor 6.0 verwenden die DHCP-Client-Implementierung (&man.dhclient.8;) von ISC (Internet Software Consortium). Ab 6.0 wird der von OpenBSD 3.7 stammende dhclient zum Einsatz kommen. Die Informationen in diesem Abschnitt beziehen sich daher sowohl auf den dhclient von ISC als auch auf den von OpenBSD. Als DHCP-Server wird in beiden Fällen der DHCP-Server der ISC-Distribution verwendet. Übersicht Dieser Abschnitt beschreibt sowohl die Clientseite des ISC- als auch des OpenBSD-Clients sowie die Serverseite des DHCP-Systems von ISC. Das Clientprogramm dhclient ist in FreeBSD integriert, das Serverprogramm kann über den Port net/isc-dhcp3-server installiert werden. Weiter Informationen finden Sie in &man.dhclient.8;, &man.dhcp-options.5; sowie &man.dhclient.conf.5;. Wie funktioniert DHCP? UDP Der DHCP-Client dhclient beginnt von einem Clientrechner aus über den UDP-Port 68 Konfigurationsinformationen anzufordern. Der Server antwortet auf dem UDP-Port 67, indem er dem Client eine IP-Adresse zuweist und ihm weitere wichtige Informationen über das Netzwerk, wie Netzmasken, Router und DNS-Server mitteilt. Diese Informationen werden als DHCP-Lease bezeichnet und sind nur für eine bestimmte Zeit, die vom Administrator des DHCP-Servers vorgegeben wird, gültig. Dadurch fallen verwaiste IP-Adressen, deren Clients nicht mehr mit dem Netzwerk verbunden sind, automatisch an den Server zurück. DHCP-Clients können sehr viele Informationen von einem DHCP-Server erhalten. Eine ausführliche Liste finden Sie in &man.dhcp-options.5;. Integration in FreeBSD In Abhängigkeit von der eingesetzten &os;-Version wird entweder der ISC-DHCP-Client oder der DHCP-Client von OpenBSD in FreeBSD integriert. Sowohl während der Installation als auch im Basissystem steht der DHCP-Client zur Verfügung. In Netzen mit DHCP-Servern wird dadurch die Konfiguration von Systemen erheblich vereinfacht. dhclient ist seit der Version 3.2 in &os; enthalten. sysinstall DHCP wird von sysinstall unterstützt. Wenn Sie eine Netzwerkkarte mit sysinstall konfigurieren, lautet die zweite Frage Do you want to try DHCP configuration of the interface?. Wenn Sie diese Frage bejahen, wird dhclient aufgerufen, und die Netzkarte wird automatisch eingerichtet. Um DHCP beim Systemstart zu aktivieren, müssen Sie zwei Dinge erledigen: DHCP Anforderungen Stellen Sie sicher, dass bpf in Ihren Kernel kompiliert ist. Dazu fügen Sie die Zeile device bpf in Ihre Kernelkonfigurationsdatei ein und erzeugen einen neuen Kernel. Weitere Informationen zur Kernelkonfiguration finden Sie in des Handbuchs. Das Gerät bpf ist im GENERIC-Kernel bereits enthalten. Für die Nutzung von DHCP muss also kein angepasster Kernel erzeugt werden. Wenn Sie um die Sicherheit Ihres Systems besorgt sind, sollten Sie wissen, dass bpf auch zur Ausführung von Paketsniffern erforderlich ist (obwohl diese dennoch als root ausgeführt werden müssen). bpf muss vorhanden sein, damit DHCP funktioniert. Sind Sie sehr sicherheitsbewusst, sollten Sie bpf aus Ihrem Kernel entfernen, wenn Sie DHCP nicht verwenden. Fügen Sie folgende Zeile in /etc/rc.conf ein: ifconfig_fxp0="DHCP" Ersetzen Sie fxp0 durch den Eintrag für die Netzkarte, die Sie dynamisch einrichten wollen. Lesen Sie dazu auch . Wenn Sie dhclient an einem anderen Ort installiert haben, oder zusätzliche Flags an dhclient übergeben wollen, fügen Sie auch folgende (entsprechend angepasste) Zeilen ein: dhcp_program="/sbin/dhclient" dhcp_flags="" DHCP Server Der DHCP-Server dhcpd ist als Teil des Ports net/isc-dhcp3-server verfügbar. Dieser Port enthält die komplette ISC-DHCP-Distribution, inklusive der Dokumentation. Dateien DHCP Konfigurationsdateien /etc/dhclient.conf dhclient benötigt die Konfigurationsdatei /etc/dhclient.conf. Diese Datei enthält normalerweise nur Kommentare, da die Vorgabewerte zumeist ausreichend sind. Lesen Sie dazu auch &man.dhclient.conf.5;. /sbin/dhclient dhclient ist statisch gelinkt und befindet sich in /sbin. Weitere Informationen finden Sie in &man.dhclient.8;. /sbin/dhclient-script Bei dhclient-script handelt es sich um das FreeBSD-spezifische Konfigurationsskript des DHCP-Clients. Es wird in &man.dhclient-script.8; beschrieben und kann meist unverändert übernommen werden. /var/db/dhclient.leases Der DHCP-Client verfügt über eine Datenbank, die alle derzeit gültigen Leases enthält und als Logdatei erzeugt wird. Weitere Informationen finden Sie in &man.dhclient.8;. Weitere Informationen Das DHCP-Protokoll wird vollständig im RFC 2131 beschrieben. Eine weitere, lehrreiche Informationsquelle existiert unter . Einen DHCP-Server installieren und einrichten Übersicht Dieser Abschnitt beschreibt die Einrichtung eines FreeBSD-Systems als DHCP-Server. Dazu wird die DHCP-Implementation von ISC (Internet Software Consortium) verwendet. Der DHCP-Server ist nicht im Basissystem von FreeBSD enthalten, daher müssen Sie als Erstes den Port net/isc-dhcp3-server installieren. Lesen Sie , wenn Sie weitere Informationen zur Ports-Sammlung benötigen. Den DHCP-Server installieren DHCP installieren Stellen Sie sicher, dass &man.bpf.4; in Ihren Kernel kompiliert ist. Dazu fügen Sie die Zeile device bpf Ihre Kernelkonfigurationsdatei ein und erzeugen einen neuen Kernel. Die Kernelkonfiguration wird in beschrieben. Das Gerät bpf ist im GENERIC-Kernel bereits enthalten. Für die Nutzung von DHCP muss also kein angepasster Kernel erzeugt werden. Wenn Sie um die Sicherheit Ihres Systems besorgt sind, sollten Sie wissen, dass bpf auch zur Ausführung von Paketsniffern erforderlich ist (obwohl diese dennoch als root ausgeführt werden müssen). bpf muss vorhanden sein, damit DHCP funktioniert. Sind Sie sehr sicherheitsbewusst, sollten Sie bpf aus Ihrem Kernel entfernen, wenn Sie DHCP nicht verwenden. Danach müssen Sie die vom Port net/isc-dhcp3-server erzeugte Vorlage für dhcpd.conf anpassen. Die bei der Installation erzeugte Datei /usr/local/etc/dhcpd.conf.sample sollten Sie nach /usr/local/etc/dhcpd.conf kopieren, bevor Sie Veränderungen vornehmen. Den DHCP-Server einrichten DHCP dhcpd.conf dhcpd.conf besteht aus Festlegungen zu Subnetzen und Rechnern und lässt sich am besten an einem Beispiel erklären: option domain-name "example.com"; option domain-name-servers 192.168.4.100; option subnet-mask 255.255.255.0; default-lease-time 3600; max-lease-time 86400; ddns-update-style none; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254; option routers 192.168.4.1; } host mailhost { hardware ethernet 02:03:04:05:06:07; fixed-address mailhost.example.com; } Diese Option beschreibt die Domäne, die den Clients als Standardsuchdomäne zugewiesen wird. Weitere Informationen finden Sie in man.resolv.conf.5;. Diese Option legt eine, durch Kommata getrennte Liste von DNS-Servern fest, die von den Clients verwendet werden sollen. Die den Clients zugewiesene Netzmaske. Ein Client kann eine Lease einer bestimmten Dauer anfordern. Geschieht dies nicht, weist der Server eine Lease mit einer vorgegebenen Ablaufdauer (in Sekunden) zu. Die maximale Zeitdauer, für die der Server Konfigurationsinformationen vergibt. Sollte ein Client eine längere Zeitspanne anfordern, wird dennoch nur der Wert max-lease-time in Sekunden zugewiesen. Diese Option legt fest, ob der DHCP-Server eine DNS-Aktualisierung versuchen soll, wenn Konfigurationsdateien vergeben oder zurückgezogen werden. In der ISC-Implementation muss diese Option gesetzt sein. Dadurch werden die IP-Adressen festgelegt, die den Clients zugewiesen werden können. IP-Adressen zwischen diesen Grenzen sowie die einschließenden Adressen werden den Clients zugewiesen. Legt das Standard-Gateway fest, das den Clients zugewiesen wird. Die (Hardware-)MAC-Adresse eines Rechners (durch die der DHCP-Server den Client erkennt, der eine Anforderung an ihn stellt). Einem Rechner soll immer die gleiche IP-Adresse zugewiesen werden. Beachten Sie, dass hier auch ein Rechnername gültig ist, da der DHCP-Server den Rechnernamen auflöst, bevor er die Konfigurationsinformationen zuweist. Nachdem Sie dhcpd.conf fertig konfiguriert haben, sollten Sie den DHCP-Server aktivieren, indem Sie folgende Zeilen in /etc/rc.conf aufnehmen: dhcpd_enable="YES" dhcpd_ifaces="dc0" Dabei müssen Sie den Geräteeintrag dc0 durch die Gerätedatei (mehrere Gerätedateien müssen durch Leerzeichen getrennt werden) ersetzen, die Ihr DHCP-Server auf Anfragen von DHCP-Clients hin überwachen soll. Danach können Sie den Server durch Eingabe des folgenden Befehls starten: &prompt.root; /usr/local/etc/rc.d/isc-dhcpd.sh start Sollten Sie die Konfiguration Ihres Servers einmal verändern müssen, reicht es nicht aus, ein SIGHUP-Signal an dhcpd zu senden, weil damit die Konfiguration nicht erneut geladen wird (im Gegensatz zu den meisten Daemonen). Sie müssen den Prozess vielmehr mit dem Signal SIGTERM stoppen, um ihn anschließend neu zu starten. Dateien Server Konfigurationsdateien /usr/local/sbin/dhcpd dhcpd ist statisch gelinkt und befindet sich in /usr/local/sbin. Lesen Sie auch die mit dem Port installierte Hilfeseite &man.dhcpd.8;, wenn Sie weitere Informationen zu dhcpd benötigen. /usr/local/etc/dhcpd.conf dhcpd benötigt die Konfigurationsdatei /usr/local/etc/dhcpd.conf, damit der Server den Clients seine Dienste anbieten kann. Diese Datei muss alle Informationen enthalten, die an die Clients weitergegeben werden soll. Außerdem sind hier Informationen zur Konfiguration des Servers enthalten. Die mit dem Port installierte Hilfeseite &man.dhcpd.conf.5; enthält weitere Informationen. /var/db/dhcpd.leases Der DHCP-Server hat eine Datenbank, die alle vergebenen Leases enthält. Diese wird als Logdatei erzeugt. Weitere Informationen finden Sie in der vom Port installierten Hilfeseite &man.dhcpd.leases.5;. /usr/local/sbin/dhcrelay dhcrelay wird in komplexen Umgebungen verwendet, in denen ein DHCP-Server eine Anfrage eines Clients an einen DHCP-Server in einem separaten Netzwerk weiterleitet. Wenn Sie diese Funktion benötigen, müssen Sie den Port net/isc-dhcp3-relay installieren. Weitere Informationen zu diesem Thema finden Sie in &man.dhcrelay.8;. Chern Lee Beigetragen von Tom Rhodes Daniel Gerzo <acronym>DNS</acronym> – Domain Name Service Überblick BIND DNS ist das für die Umwandlung von Rechnernamen in IP-Adressen zuständige Protokoll. &os; verwendet dazu BIND (Berkeley Internet Name Domain), die am häufigsten verwendete Implementierung von DNS). Eine Anfrage nach www.FreeBSD.org gibt die IP-Adresse des &os;-Webservers, eine Anfrage nach ftp.FreeBSD.org die IP-Adresse des entsprechenden FTP-Servers zurück. Der umgekehrte Weg ist ebenso möglich, eine IP-Adresse kann also auch in ihren Rechnernamen aufgelöst werden. Um eine DNS-Abfrage durchzuführen, muss auf dem jeweiligen Rechner kein Nameserver installiert sein. &os; verwendet derzeit in der Voreinstellung BIND9 als DNS-Serversoftware. Unsere Installation bietet Ihnen eine erhöhte Sicherheit, ein neues Dateisystemlayout sowie eine automatisierte &man.chroot.8;-Konfiguration. DNS Im Internet wird DNS durch ein komplexes System von autoritativen Root-Nameservern, Top Level Domain-Servern (TLD) sowie anderen kleineren Nameservern verwaltet, die individuelle Rechnerinformationen speichern und untereinander abgleichen. Derzeit wird BIND vom Internet Software Consortium () verwaltet. Begriffsbestimmungen Um dieses Dokument besser verstehen zu können, müssen einige DNS-spezifische Begriffe genauer definiert werden. Resolver Reverse-DNS Root-Zone Begriff Bedeutung Forward-DNS Rechnernamen in IP-Adressen umwandeln. Origin (Ursprung) Die in einer bestimmten Zonendatei beschriebene Domäne. named, BIND, Nameserver Gebräuchliche Namen für das unter &os; verwendete BIND-Nameserverpaket. Resolver Ein Systemprozess, durch den ein Rechner Zoneninformationen von einem Nameserver anfordert. Reverse-DNS Das Gegenteil von Forward-DNS; die Umwandlung von IP-Adressen in Rechnernamen Root-Zone Der Beginn der Internet-Zonenhierarchie. Alle Zonen befinden sich innerhalb der Root-Zone. Dies ist analog zu einem Dateisystem, in dem sich alle Dateien und Verzeichnisse innerhalb des Wurzelverzeichnisses befinden. Zone Eine individuelle Domäne, Unterdomäne, oder ein Teil von DNS, der von der gleichen Autorität verwaltet wird. Zonen Beispiele Es folgen nun einige Zonenbeispiele: . ist die Root-Zone. org. ist eine Top level Domain (TLD) innerhalb der Root-Zone. example.org. ist eine Zone innerhalb der org.-TLD. 1.168.192.in-addr.arpa. ist die Zone mit allen IP-Adressen des 192.168.1.*-IP-Adressraums. Wie man an diesen Beispielen erkennen kann, befindet sich der spezifischere Teil eines Rechnernamens auf der linken Seite der Adresse. example.org. beschreibt einen Rechner also genauer als org., während org. genauer als die Root-Zone ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit einem Dateisystem, in dem etwa /dev dem Wurzelverzeichnis untergeordnet ist. Gründe für die Verwendung eines Nameservers Es gibt zwei Arten von Nameservern: Autoritative Nameserver sowie zwischenspeichernde (cachende) Nameserver. Ein autoritativer Nameserver ist notwendig, wenn Sie anderen verbindliche DNS-Auskünfte erteilen wollen. eine Domain, beispielsweise example.org, registriert wird, und den zu dieser Domain gehörenden Rechnern IP-Adressen zugewiesen werden müssen. ein IP-Adressblock reverse-DNS-Einträge benötigt, um IP-Adressen in Rechnernamen auflösen zu können. ein Backup-Nameserver (auch Slaveserver genannt) oder ein zweiter Nameserver auf Anfragen antworten soll. Ein cachender Nameserver ist notwendig, weil ein lokaler DNS-Server Daten zwischenspeichern und daher schneller auf Anfragen reagieren kann als ein entfernter Server. Wird nach www.FreeBSD.org gesucht, leitet der Resolver diese Anfrage an den Nameserver des ISPs weiter und nimmt danach das Ergebnis der Abfrage entgegen. Existiert ein lokaler, zwischenspeichernder DNS-Server, muss dieser die Anfrage nur einmal nach außen weitergeben. Für alle weiteren Anfragen ist dies nicht mehr nötig, da diese Information nun lokal gespeichert ist. Wie funktioniert <acronym>DNS</acronym>? Unter &os; wird der BIND-Daemon als named bezeichnet. Datei Beschreibung named Der BIND-Daemon. &man.rndc.8; Das Steuerprogramm für named. /etc/namedb Das Verzeichnis, in dem sich die Zoneninformationen für BIND befinden. /etc/namedb/named.conf Die Konfigurationsdatei für named. Je nachdem, wie eine Zone auf dem Server konfiguriert wurde, finden sich die zur Zone gehörendenden Dateien in den Unterverzeichnissen master, slave, oder dynamic des Verzeichnisses /etc/namedb. Diese Dateien enthalten die DNS-Informationen, die der Nameserver für die Beantwortung von Anfragen benötigt. BIND starten BIND Start Da BIND automatisch installiert wird, ist die Konfiguration relativ einfach. In der Voreinstellung wird ein in einer &man.chroot.8;-Umgebung betriebener named-Server eingerichtet. Um den Server manuell zu starten, verwenden Sie den folgenden Befehl: &prompt.root; /etc/rc.d/named forcestart Um den named-Daemon beim Systemstart automatisch zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein: named_enable="YES" /etc/namedb/named.conf bietet zahlreiche Konfigurationsoptionen, die in diesem Dokument nicht alle beschrieben werden können. Wollen Sie die Startoptionen von named unter &os; anpassen, sollten Sie sich die named_*-Flags in der Datei /etc/defaults/rc.conf sowie die Manualpage zu &man.rc.conf.5; näher ansehen. Zusätzliche Informationen bietet Ihnen auch der Abschnitt des Handbuchs. Konfigurationsdateien BIND Konfigurationsdateien Die Konfigurationsdateien von named finden sich unter /etc/namedb und müssen in der Regel an Ihre Bedürfnisse angepasst werden. Es sei denn, Sie benötigen nur einen einfachen Resolver. Ein Großteil der Konfigurationsarbeiten erfolgt dabei in diesem Verzeichnis. <command>make-localhost</command> verwenden Um eine Master-Zone für den lokalen Rechner zu erstellen, wechseln Sie in das Verzeichnis /etc/namedb und führen dort den folgenden Befehl aus: &prompt.root; sh make-localhost Wenn es keine Probleme gab, sollte nun eine neue Datei im Unterverzeichnis master vorhanden sein. Diese heißt entweder localhost.rev (für den lokalen Domain-Namen) oder localhost-v6.rev (wenn Sie IPv6 einsetzen). Als Standardkonfigurationsdatei wird dabei named.conf verwendet. <filename>/etc/namedb/named.conf</filename> // $FreeBSD$ // // Refer to the named.conf(5) and named(8) man pages, and the documentation // in /usr/share/doc/bind9 for more details. // // If you are going to set up an authoritative server, make sure you // understand the hairy details of how DNS works. Even with // simple mistakes, you can break connectivity for affected parties, // or cause huge amounts of useless Internet traffic. options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // If named is being used only as a local resolver, this is a safe default. // For named to be accessible to the network, comment this option, specify // the proper IP address, or delete this option. listen-on { 127.0.0.1; }; // If you have IPv6 enabled on this system, uncomment this option for // use as a local resolver. To give access to the network, specify // an IPv6 address, or the keyword "any". // listen-on-v6 { ::1; }; // In addition to the "forwarders" clause, you can force your name // server to never initiate queries of its own, but always ask its // forwarders only, by enabling the following line: // // forward only; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 127.0.0.1; }; */ Um vom Cache Ihres Internetproviders zu profitieren, können hier forwarders aktiviert werden. Normalerweise sucht ein Nameserver das Internet rekursiv ab, bis er die gesuchte Antwort findet. Durch diese Option wird stets der Nameserver Ihres Internetproviders zuerst abgefragt, um von dessen Cache zu profitieren. Wenn es sich um einen schnellen, viel benutzten Nameserver handelt, kann dies zu einer Geschwindigkeitssteigerung führen. 127.0.0.1 funktioniert hier nicht. Ändern Sie diese Adresse in einen Nameserver Ihres Einwahlproviders. /* * If there is a firewall between you and name servers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND versions 8 and later * use a pseudo-random unprivileged UDP port by default. */ // query-source address * port 53; }; // If you enable a local name server, don't forget to enter 127.0.0.1 // first in your /etc/resolv.conf so this server will be queried. // Also, make sure to enable it in /etc/rc.conf. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "master/localhost.rev"; }; // RFC 3152 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" { type master; file "master/localhost-v6.rev"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // // Example slave zone config entries. It can be convenient to become // a slave at least for the zone your own domain is in. Ask // your network administrator for the IP address of the responsible // primary. // // Never forget to include the reverse lookup (IN-ADDR.ARPA) zone! // (This is named after the first bytes of the IP address, in reverse // order, with ".IN-ADDR.ARPA" appended.) // // Before starting to set up a primary zone, make sure you fully // understand how DNS and BIND works. There are sometimes // non-obvious pitfalls. Setting up a slave zone is simpler. // // NB: Don't blindly enable the examples below. :-) Use actual names // and addresses instead. /* An example master zone zone "example.net" { type master; file "master/example.net"; }; */ /* An example dynamic zone key "exampleorgkey" { algorithm hmac-md5; secret "sf87HJqjkqh8ac87a02lla=="; }; zone "example.org" { type master; allow-update { key "exampleorgkey"; }; file "dynamic/example.org"; }; */ /* Examples of forward and reverse slave zones zone "example.com" { type slave; file "slave/example.com"; masters { 192.168.1.1; }; }; zone "1.168.192.in-addr.arpa" { type slave; file "slave/1.168.192.in-addr.arpa"; masters { 192.168.1.1; }; }; */ Hierbei handelt es sich um Slave-Einträge für eine Reverse- und Forward-DNS-Zone, die in der Datei named.conf definiert sind. Für jede neue Zone muss ein zusätzlicher Eintrag in named.conf erstellt werden. Ein einfacher Eintrag für eine Zone example.org könnte beispielsweise so aussehen: zone "example.org" { type master; file "master/example.org"; }; Die Option legt fest, dass es sich um eine Master-Zone handelt, deren Zoneninformationen sich in der Datei /etc/namedb/master/example.org befinden. Diese Datei wird durch die Option festgelegt. zone "example.org" { type slave; file "slave/example.org"; }; Hier handelt es sich um einen Slaveserver, der seine Informationen vom Masterserver der betreffenden Zone bezieht und diese in der angegebenen Datei speichert. Wenn der Masterserver nicht erreichbar ist, verfügt der Slaveserver über die transferierten Zoneninformationen und kann diese an andere Rechner weitergeben. Zonendateien BIND Zonendatei Die in der Datei /etc/namedb/master/example.org definierte Zonendatei für example.org könnte etwa so aussehen: $TTL 3600 ; 1 hour example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) ; DNS Servers IN NS ns1.example.org. IN NS ns2.example.org. ; MX Records IN MX 10 mx.example.org. IN MX 20 mail.example.org. IN A 192.168.1.1 ; Machine Names localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5 ; Aliases www IN CNAME @ Beachten Sie, dass jeder mit einem . endende Rechnername ein exakter Rechnername ist, während sich alles ohne einen abschließenden . auf den Ursprung bezieht. www steht daher für www.Ursprung. In unserer fiktiven Zonendatei ist example.org. der Ursprung, daher steht www für www.example.org. Eine Zonendatei hat folgenden Aufbau: recordname IN recordtype value DNS Einträge Die am häufigsten verwendeten DNS-Einträge sind: SOA Start der Zonenautorität NS Ein autoritativer Nameserver A Eine Rechneradresse CNAME Der kanonische Name eines Alias MX Mail Exchanger PTR Ein (bei Reverse-DNS verwendeter) Domain Name Pointer example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 86400 ) ; Minimum TTL of 1 day example.org. Der Name der Domäne und damit der Ursprung dieser Zonendatei. ns1.example.org. Der primäre/autoritative Nameserver dieser Zone. admin.example.org. Die für diese Zone verantwortliche Person. Das Zeichen @ wird dabei ersetzt (admin@example.org wird also zu admin.example.org). 2006051501 Die Seriennummer der Datei. Sie muss stets inkrementiert werden, wenn die Zonendatei geändert wird. Viele Administratoren bevorzugen ein JJJJMMTTRR-Format, um die Seriennummer festzulegen. 2006051501 steht also für den 15.05.2006, die beiden letzten Stellen für die erste Modifikation der Zonendatei an diesem Tag. Die Seriennummer ist von großer Bedeutung, da Slaveserver daran eine aktualisierte Zonendatei erkennen können. IN NS ns1.example.org. Ein NS-Eintrag. Jeder Nameserver, der für eine Zone verantwortlich ist, muss über einen solchen Eintrag verfügen. localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5 Der Eintrag A bezieht sich auf Rechnernamen. ns1.example.org würde also zu 192.168.1.2 aufgelöst werden. IN A 192.168.1.1 Diese Zeile weist die IP-Adresse 192.168.1.1 dem aktuellen Ursprung, in unserem Fall also example.org, zu. www IN CNAME @ Der Eintrag für den kanonischen Namen wird dazu verwendet, Aliase für einen Rechner zu vergeben. Im Beispiel ist www ein Alias für den Master-Rechner localhost.example.org oder 192.168.1.1). Durch die Option CNAME können Aliasnamen vergeben werden. Ein Rechnername kann aber auch abwechselnd verschiedenen Rechnern zugewiesen werden. MX-Eintrag IN MX 10 mail.example.org. Die Option MX legt fest, welcher Mailserver für eintreffende Mails der Zone verantwortlich ist. mail.example.org ist der Rechnername des Mailservers, der eine Priorität von 10 hat. Es können auch mehrere Mailserver mit verschiedener Priorität (10, 20, ...) vorhanden sein. Ein Mailserver, der eine Mail an example.org verschicken will, verwendet zuerst den MX mit der höchsten Priorität (das heißt den mit der niedrigsten Prioritätsnummer), danach den mit der nächsthöheren Priorität. Und dies solange, bis die E-Mail zugestellt werden kann. Für (bei Reverse-DNS verwendete) in-addr.arpa-Zonendateien wird das gleiche Format verwendet. Der einzige Unterschied besteht in der Verwendung der Option PTR an Stelle der Optionen A und CNAME. $TTL 3600 1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum IN NS ns1.example.org. IN NS ns2.example.org. 1 IN PTR example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 4 IN PTR mx.example.org. 5 IN PTR mail.example.org. Durch diese Datei werden den Rechnernamen der fiktiven Domäne IP-Adressen zugewiesen. Zwischenspeichernde (cachende) Nameserver BIND Zwischenspeichernde Nameserver Ein cachender Nameserver ist für keine Zonen verantwortlich. Er stellt lediglich eigene Anfragen und speichert deren Ergebnisse ab. Um einen solchen Nameserver einzurichten, gehen Sie wie gewohnt vor, allerdings definieren Sie keine Zonen. Sicherheit Obwohl BIND die am meisten verwendete (und kontrollierte) Implementierung von DNS darstellt, werden dennoch manchmal neue Sicherheitsprobleme entdeckt. Zwar startet &os; named automatisch in einer &man.chroot.8;-Umgebung, es gibt aber noch weitere Sicherheitsmechanismen, mit denen Sie potentielle DNS-Serviceattacken erschweren können. Es ist daher eine gute Idee, die Sicherheitshinweise von CERT zu lesen sowie die Mailingliste &a.security-notifications; zu abonnieren, um sich über Sicherheitsprobleme im Zusammenhang mit dem Internet und FreeBSD zu informieren. Tritt ein Problem auf, kann es nie schaden, die Quellen zu aktualisieren und named neu zu kompilieren. Weitere Informationsquellen Hilfeseiten zu BIND/named: &man.rndc.8;, &man.named.8;, &man.named.conf.5; Offizielle ISC-Seite zu BIND Offizielles Forum zu ISC- BIND BIND FAQs O'Reilly DNS and BIND 5th Edition RFC1034 - Domain Names - Concepts and Facilities RFC1035 - Domain Names - Implementation and Specification Murray Stokely Beigetragen von Der Apache HTTP-Server Webserver konfigurieren Apache Überblick Einige der weltgrößten Internetauftritte laufen unter &os;. Die Mehrzahl der Webserver im Internet nutzt den Apache HTTP-Server. Die Installationspakete für den Apache sollten auf Ihrem Installationsmedium vorhanden sein. Wenn Sie den Apache noch nicht installiert haben, können Sie dies jederzeit über den Port www/apache13 oder - www/apache20 nachholen. + www/apache22 nachholen. Nachdem der Apache erfolgreich installiert wurde, muss er noch konfiguriert werden. Dieser Abschnitt beschreibt die Version 1.3.X des Apache HTTP-Servers, da diese Version unter &os; am häufigsten verwendet wird. Apache 2.X bringt zwar viele Verbesserungen mit sich, wird hier aber nicht beschrieben. Sollten Sie an Apache 2.X interessiert sein, informieren Sie sich bitte auf . Konfiguration Apache Konfigurationsdatei Der Apache HTTP-Server wird unter &os; primär über die Datei /usr/local/etc/apache/httpd.conf konfiguriert. Bei dieser Datei handelt es sich um eine typische &unix;-Konfigurationsdatei, in der Kommentarzeilen mit einem #-Zeichen beginnen. Eine komplette Beschreibung aller Optionen würde den Rahmen dieses Handbuchs sprengen, daher beschreiben wir hier nur die am häufigsten verwendeten Optionen. ServerRoot "/usr/local" Legt das Standardwurzelverzeichnis für die Apache-Installation fest. Binärdateien werden in die Verzeichnisse bin und sbin unterhalb des Serverwurzelverzeichnisses installiert, während sich Konfigurationsdateien im Verzeichnis etc/apache befinden. ServerAdmin you@your.address Die E-Mail-Adresse, an die Mitteilungen über Serverprobleme geschickt werden sollen. Diese Adresse erscheint auf vom Server erzeugten Seiten, beispielsweise auf Fehlerseiten. ServerName www.example.com Über die Option ServerName können Sie einen Rechnernamen festlegen, den Ihr Server an die Clients sendet, wenn sich dieser von tatsächlichen Rechnernamen unterscheidet (sie könnten etwa www statt des richtigen Rechnernamens verwenden). DocumentRoot "/usr/local/www/data" DocumentRoot: Das Verzeichnis, in dem Sie Ihre Dokumente ablegen. In der Voreinstellung befinden sich alle Seiten in diesem Verzeichnis, durch symbolische Links oder Aliase lassen sich aber auch andere Orte festlegen. Es ist empfehlenswert, eine Sicherungskopie Ihrer Konfigurationsdatei anzulegen, bevor Sie Änderungen durchführen. Nachdem Sie die Konfiguration beendet haben, können Sie den Apache starten. Den <application>Apache</application> betreiben Apache Starten oder Beenden Der Apache wird, im Gegensatz zu vielen anderen Netzwerkservern, nicht vom inetd-Super-Server verwaltet, sondern wird als eigenständiger Server betrieben, um die Leistung für eintreffende HTTP-Anfragen von den Clients (also von Internetbrowsern) zu verbessern. Gestartet, beendet oder neu gestartet wird der Server über einen Shellskript-Wrapper. Um den Apache erstmals zu starten, geben Sie einfach Folgendes ein: &prompt.root; /usr/local/sbin/apachectl start Wenn Sie den Server beenden wollen, geben Sie Folgendes ein: &prompt.root; /usr/local/sbin/apachectl stop Wenn Sie die Konfigurationsdatei verändern, müssen Sie den Server neu starten: &prompt.root; /usr/local/sbin/apachectl restart Um den Apache ohne den Abbruch bestehender Verbindungen neu zu starten, geben Sie Folgendes ein: &prompt.root; /usr/local/sbin/apachectl graceful Diese und weitere Optionen werden in &man.apachectl.8; beschrieben. Um den Apache beim Systemstart zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein: apache_enable="YES" + Um Apache 2.2 zu starten, + fügen Sie hingegen folgende Zeile ein: + + apache22_enable="YES" + Wenn Sie während des Systemstarts weitere Parameter an den Apache-httpd-Daemon übergeben wollen, können Sie diese durch eine zusätzliche Zeile in rc.conf angeben: apache_flags="" Nachdem der Webserver gestartet ist, können Sie sich Ihre Internetseite ansehen, indem Sie in Ihren Browser die Adresse http://localhost/ eingeben. Die vordefinierte Standardstartseite ist /usr/local/www/data/index.html. Virtual Hosting Der Apache unterstützt zwei Formen des Virtual Hostings. Die erste Möglichkeit bezeichnet man als namenbasiertes virtuelles Hosting. Dabei wird der HTTP/1.1-Header der Clients dazu verwendet, den Rechnernamen zu bestimmen. Dadurch wird es möglich, mehrere Domains unter der gleichen IP-Adresse zu betreiben. Damit der Apache namenbasierte virtuelle Domains verwalten kann, fügen Sie die folgende Zeile in httpd.conf ein: NameVirtualHost * Wenn Ihr Webserver www.domain.tld heißt und Sie die virtuelle Domain www.someotherdomain.tld einrichten wollen, ergänzen Sie httpd.conf um folgende Einträge: <VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld </VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost> Ersetzen Sie dabei die Adressen sowie den Pfad zu den Dokumenten durch Ihre eigenen Einstellungen. Ausführliche Informationen zum Einrichten von virtuellen Domains finden Sie in der offiziellen Apache-Dokumentation unter . Häufig verwendete Apache-Module Apache Module Es gibt viele verschiedene Apache-Module, die den Server um zusätzliche Funktionen erweitern. Die FreeBSD-Ports-Sammlung ermöglicht es Ihnen, den Apache gemeinsam mit einigen der beliebtesten Zusatzmodule zu installieren. mod_ssl Webserver Verschlüsselung SSL Verschlüsselung Das Modul mod_ssl verwendet die OpenSSL-Bibliothek, um, unter Nutzung der Protokolle Secure Sockets Layer (SSL v2/v3) sowie Transport Layer Security (TLS v1) starke Verschlüsselung zu ermöglichen. Durch dieses Modul können Sie ein signiertes Zertifikat von einer Zertifizierungsstelle anfordern, damit Sie einen sicheren Webserver unter &os; betreiben können. Wenn Sie den Apache 1.3.X noch nicht installiert haben, können Sie über den Port www/apache13-modssl eine Apache-Version installieren, in die mod_ssl als Modul einkompiliert wurde. Bevorzugen Sie den Apache 2.X, installieren Sie stattdessen den Port - www/apache20, bei dem die + www/apache22, bei dem die SSL-Unterstützung bereits in der Voreinstellung aktiviert ist. Dynamische Webseiten mit Perl & PHP In den vergangenen Jahren haben immer mehr Unternehmen das Internet als Mittel für die Steigerung ihrer Einnahmen sowie für die Erhöhung ihrer Reichweite entdeckt. Dadurch stieg auch die Nachfrage nach interaktiven Internetinhalten. Neben einigen Unternehmen, darunter µsoft;, die dafür proprietäre Produkte entwickelt haben, hat auch die Open Source Community auf diesen Umstand reagiert und unter anderem mit mod_perl und mod_php Möglichkeiten zur Generierung dynamischer Internetseiten geschaffen. mod_perl mod_perl Perl Die Kombination Apache/Perl vereinigt die Vorteile der Programmiersprache Perl und des Apache HTTP-Servers. Durch das Modul mod_perl ist es möglich, vollständig in Perl geschriebene Apache-Module zu erzeugen. Da der Perl-Interpreter in den Server eingebettet wird, müssen Sie weder einen externen Interpreter noch Perl zusätzlich aufrufen. mod_perl ist in verschiedenen Versionen erhältlich. Bevor Sie mod_perl einsetzen,denken Sie bitte daran, dass mod_perl 1.0 nur mit Apache 1.3 und mod_perl 2.0 nur mit - Apache 2 zusammenarbeitet. + Apache 2.X zusammenarbeitet. mod_perl 1.0 kann über den Port www/mod_perl, eine statisch kompilierte Version hingegen über den Port www/apache13-modperl installiert werden. Für die Installation von mod_perl 2.0 schließlich verwenden Sie den Port www/mod_perl2. Tom Rhodes Geschrieben von mod_php mod_php PHP Bei PHP, dem Hypertext Preprocessor, handelt es sich um eine vielseitig verwendbare Skriptsprache, die besonders für die Internetprogrammierung geeignet ist. PHP kann in HTML eingebettet werden und ähnelt von der Syntax her Sprachen wie C, &java; und Perl. Das Hauptanliegen von PHP ist es, Internetprogrammierern die rasche Erstellung von dynamisch erzeugten Internetseiten zu ermöglichen. Damit Ihr System PHP5 unterstützt, müssen Sie als Erstes den Apache Webserver über den Port lang/php5 installieren. Wenn Sie den Port lang/php5 das erste Mal installieren, werden die verfügbaren Optionen (OPTIONS) automatisch angezeigt. Erscheint das Konfigurationsmenü bei Ihnen nicht, so liegt dies daran, dass Sie den Port lang/php5 schon einmal auf Ihrem System installiert hatten. Es ist aber jederzeit möglich, dieses Menü aus dem Ports-Verzeichnis heraus über folgenden Befehl erneut aufzurufen: &prompt.root; make config In diesem Konfigurationsmenü müssen Sie die Option APACHE auswählen, damit mod_php5 als ein vom Apache-Webserver ladbares Modul gebaut wird. Viele Seiten verwenden nach wie vor (beispielsweise wegen der benötigten Kompatibilität zu bereits vorhandenen Web-Applikationen) PHP4. Ist dies bei Ihnen der Fall, so müssen Sie statt mod_php5 mod_php4 über den Port lang/php4 installieren. Der Port lang/php4 unterstützt viele der Konfigurations- und Laufzeitoptionen von lang/php5. Dieser Port installiert und konfiguriert die Module, die für die Unterstützung von dynamischen PHP-Anwendungen benötigt werden. Stellen Sie danach sicher, dass Ihre /usr/local/etc/apache/httpd.conf die folgenden Abschnitte enthält: LoadModule php5_module libexec/apache/libphp5.so AddModule mod_php5.c <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> <IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule> Nachdem dies erledigt ist, rufen Sie apachectl auf, um das PHP-Modul zu laden: &prompt.root; apachectl graceful Bei künftigen Upgrades von PHP wird make config nicht mehr benötigt, da die von Ihnen ursprünglich ausgewählten Optionen (OPTIONS) vom &os;-Ports-Framework automatisch gespeichert werden. Die PHP-Unterstützung von &os; ist stark modular aufgebaut, daher verfügt eine Basisinstallation nur über wenige Funktionen. Eine Erweiterung um zusätzliche Funktionen ist allerdings sehr einfach über den Port lang/php5-extensions möglich. Der Port bietet Ihnen ein Auswahlmenü, über das Sie verschiedene PHP-Erweiterungen installieren können. Alternativ können Sie einzelne Erweiterungen aber weiterhin direkt über den jeweiligen Port installieren. Um beispielsweise die Unterstützung des Datenbankservers MySQL in PHP5 zu aktivieren, installieren Sie den Port databases/php5-mysql. Nachdem Sie eine Erweiterung installiert haben, müssen Sie den Apache-Server neu starten, damit die Erweiterung auch erkannt wird: &prompt.root; apachectl graceful Ab nun wird MySQL von PHP unterstützt. Murray Stokely Beigetragen von FTP – File Transfer Protocol FTP-Server Überblick Das File Transfer Protocol (FTP) ermöglicht auf einfache Art und Weise den Dateiaustausch mit einem FTP-Server. Der FTP-Server ftpd ist bei &os; bereits im Basisystem enthalten. Daher sind Konfiguration und Betrieb eines FTP-Servers unter FreeBSD relativ einfach. Konfiguration Der wichtigste Punkt ist hier die Entscheidung darüber, welche Benutzer auf Ihren FTP-Server zugreifen dürfen. Ein FreeBSD-System verfügt über diverse Systembenutzerkonten, um einzelnen Daemonen den Zugriff auf das System zu ermöglichen. Anonyme Benutzer sollten sich allerdings nicht über diese Benutzerkonten anmelden dürfen. Die Datei /etc/ftpusers enthält alle Benutzer, die vom FTP-Zugriff ausgeschlossen sind. In der Voreinstellung gilt dies auch die gerade erwähnten Systembenutzerkonten. Sie können über diese Datei weitere Benutzer vom FTP-Zugriff ausschließen. Sie können den Zugriff für einige Benutzer einschränken, ohne FTP komplett zu verbieten. Dazu passen Sie /etc/ftpchroot entsprechend an. Diese Datei enthält Benutzer und Gruppen sowie die für sie geltenden FTP-Einschränkungen und wird in &man.ftpchroot.5; ausführlich beschrieben. FTP anonymous Wenn Sie einen anonymen FTP-Zugriff auf Ihren Server ermöglichen wollen, müssen Sie den Benutzer ftp auf Ihrem &os;-System anlegen. Danach können sich Benutzer mit dem Benutzernamen ftp oder anonymous auf Ihrem FTP-Server anmelden. Das Passwort ist dabei beliebig (allerdings wird dazu in der Regel eine E-Mail-Adresse verwendet). Meldet sich ein anonymer Benutzer an, aktiviert der FTP-Server &man.chroot.2;, um den Zugriff auf das Heimatverzeichnis des Benutzers ftp zu beschränken. Es gibt zwei Textdateien, deren Inhalt Sie bei der Anmeldung an Ihrem FTP-Server anzeigen lassen können. Der Inhalt von /etc/ftpwelcome wird angezeigt, bevor der Login-Prompt erscheint. Nach einer erfolgreichen Anmeldung wird der Inhalt von /etc/ftpmotd angezeigt. Beachten Sie aber, dass es dabei um einen Pfad relativ zur Umgebung des anzumeldenden Benutzers handelt. Bei einer anonymen Anmeldung würde also die Datei ~ftp/etc/ftpmotd angezeigt. Nachdem Sie den FTP-Server konfiguriert haben, müssen Sie Ihn in /etc/inetd.conf aktivieren. Dazu müssen Sie lediglich das Kommentarsymbol # am Beginn der bereits vorhandenen ftpd-Zeile entfernen: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l Nachdem Sie diese Änderung durchgeführt haben, müssen Sie, wie in beschrieben, die inetd-Konfiguration neu einlesen. Danach können Sie sich auf Ihrem FTP-Server anmelden: &prompt.user; ftp localhost Wartung syslog Logdateien FTP Der ftpd-Daemon verwendet &man.syslog.3;, um Protokolldateien zu erstellen. In der Voreinstellung werden alle FTP betreffenden Nachrichten in die Datei /var/log/xferlog geschrieben. Dies lässt sich aber durch das Einfügen der folgenden Zeile in /etc/syslog.conf ändern: ftp.info /var/log/xferlog FTP anonymous Beachten Sie, dass mit dem Betrieb eines anonymen FTP-Servers verschiedene Sicherheitsrisiken verbunden sind. Problematisch ist hier vor allem die Erlaubnis zum anonymen Upload von Dateien. Dadurch könnte Ihr Server zur Verbreitung von illegaler oder nicht lizensierter Software oder noch Schlimmeren missbraucht werden. Wollen Sie anonyme Uploads dennoch erlauben, sollten Sie die Zugriffsrechte so setzen, dass solche Dateien erst nach Ihrer Zustimmung von anderen Benutzern heruntergeladen werden können. Murray Stokely Beigetragen von Mit Samba einen Datei- und Druckserver für µsoft.windows;-Clients einrichten Samba-Server Microsoft Windows Dateiserver Windows-Clients Druckserver Windows-Clients Überblick Samba ist ein beliebtes Open Source-Softwarepaket, das es Ihnen ermöglicht, einen Datei- und Druckserver für µsoft.windows;-Clients einzurichten. Clients können sich dadurch mit einem FreeBSD-System verbinden und dessen Speicherplatz oder dessen Drucker verwenden. Dies genauso, als wenn es sich um lokale Drucker oder Festplatten handeln würde. Samba sollte als Softwarepaket auf Ihren Installationsmedien vorhanden sein. Wenn Sie Samba noch nicht installiert haben, können Sie dies jederzeit über den Port oder das Paket net/samba3 nachholen. Konfiguration Die Standardkonfigurationsdatei von Samba heißt /usr/local/share/examples/smb.conf.default. Diese Datei muss nach /usr/local/etc/smb.conf kopiert und angepasst werden, bevor Samba verwendet werden kann. Die Datei smb.conf enthält Laufzeitinformationen für Samba, beispielsweise Druckerdefinitionen oder filesystem shares, also Bereiche des Dateisystems, die Sie mit &windows;-Clients teilen wollen. Die Konfiguration der Datei smb.conf erfolgt webbasiert über das im Samba-Paket enthaltene Programm swat. Das Samba Web Administration Tool (SWAT) verwenden Das Samba Web Administration Tool (SWAT) wird als Daemon von inetd aktiviert. Daher müssen Sie den Kommentar vor der folgenden Zeile in /etc/inetd.conf entfernen, bevor Sie swat zur Konfiguration von Samba verwenden können: swat stream tcp nowait/400 root /usr/local/sbin/swat swat Wie bereits in beschrieben, müssen Sie die inetd-Konfiguration neu einlesen, nachdem Sie diese Änderung durchgeführt haben. Nachdem swat in der Datei inetd.conf aktiviert wurde, rufen Sie in Ihrem Internetbrowser die Adresse auf und melden sich mit dem root-Benutzerkonto an. Nachdem Sie sich erfolgreich angemeldet haben, wird die Hauptkonfigurationseite von Samba geladen. Sie können nun die Dokumentation lesen, oder durch einen Klick auf die Globals-Karteikarte mit der Konfiguration beginnen. Die Einstellungen, die Sie hier vornehmen können, entsprechen denen des Abschnitts [global] von /usr/local/etc/smb.conf. Globale Einstellungen Unabhängig davon, ob Sie swat verwenden, oder /usr/local/etc/smb.conf direkt editieren, sollten Sie zuerst folgende Einstellungen anpassen: workgroup Der NT-Domänenname oder der Arbeitsgruppenname der Rechner, die auf den Server Zugriff haben sollen. netbios name NetBIOS Legt den NetBIOS-Namen fest, unter dem der Samba-Server bekannt ist. In der Regel handelt es sich dabei um den ersten Teil des DNS-Namens des Servers. server string Legt die Beschreibung fest, die angezeigt werden soll, wenn mit net view oder über andere Netzwerkprogramme Informationen über den Server angefordert werden. Samba absichern Zwei der wichtigsten Einstellungen in /usr/local/etc/smb.conf betreffen das zu verwendende Sicherheitsmodell sowie das Backend-Passwortformat für die Benutzer der Samba-Clients. Folgende Optionen sind dafür verantwortlich: security Die häufigsten Optionen sind security = share und security = user. Wenn Ihre Clients Benutzernamen verwenden, die den Benutzernamen auf Ihrem &os;-Rechner entsprechen, dann sollten Sie die Einstellung user level verwenden. Dies ist auch die Standardeinstellung. Allerdings ist es dazu erforderlich, dass sich die Clients auf Ihrem Rechner anmelden, bevor sie auf gemeinsame Ressourcen zugreifen können. In der Einstellung share level müssen sich Clients nicht unter Verwendung eines gültigen Logins auf Ihrem Rechner anmelden, bevor sie auf gemeinsame Ressourcen zugreifen können. In früheren Samba-Versionen war dies die Standardeinstellung. passdb backend NIS+ LDAP SQL database Samba erlaubt verschiedene Backend-Authentifizierungsmodelle. Sie können Clients durch LDAP, NIS+, eine SQL-Datenbank oder eine Passwortdatei authentifizieren. In der Voreinstellung wird smbpasswd verwendet. Diese Methode wird im folgenden Abschnitt näher beschrieben. Wenn Sie smbpasswd verwenden, müssen Sie die Datei /usr/local/private/smbpasswd erzeugen, damit Samba in der Lage ist, Clients zu authentifizieren. Wenn Sie auf Ihrem &unix;-Rechner vorhandenen Benutzern den Zugriff von einem &windows;-Client aus ermöglichen wollen, verwenden Sie den folgenden Befehl: &prompt.root; smbpasswd -a username Ausführliche Informationen zur Konfiguration von Samba finden Sie im Official Samba HOWTO. Sie sollten aber bereits nach dem Lesen dieses Abschnitts in der Lage sein, Samba zu starten. <application>Samba</application> starten Der Port net/samba3 legt ein neues Startskript an, mit dem Samba gesteuert (also etwa gestartet oder beendet) werden kann. Um dieses Skript zu aktivieren, fügen Sie folgende Zeile in /etc/rc.conf ein: samba_enable="YES" Alternativ können Sie auch die folgenden beiden Einträge verwenden: nmbd_enable="YES" smbd_enable="YES" Durch diese Einträge Samba beim Systemstart automatisch aktiviert. Danach können Sie Samba jederzeit durch folgenden Befehl starten: &prompt.root; /usr/local/etc/rc.d/samba start Starting SAMBA: removing stale tdbs : Starting nmbd. Starting smbd. Weitere Informationen zu den rc-Startskripten finden Sie im des Handbuchs. Samba verwendet drei Daemonen. Beachten Sie, dass sowohl nmbd als auch smbd durch das Skript samba gestartet werden. Wenn Sie die winbind name resolution services in smb.conf aktiviert haben, wird zusätzlich der winbindd-Daemon gestartet. Sie können Samba jederzeit durch den folgenden Befehl beenden: &prompt.root; /usr/local/etc/rc.d/samba stop Samba ist ein komplexes Softwarepaket mit umfassenden Funktionen, die eine weitreichende Integration von µsoft.windows;-Netzwerken ermöglichen. Für eine Beschreibung dieser Zusatzfunktionen sollten Sie sich auf umsehen. Tom Hukins Beigetragen von Die Uhrzeit mit NTP synchronisieren NTP Überblick Da die interne Uhrzeit eines Computers nie ganz exakt ist, wurde mit NTP (Network Time Protocol) eine Möglichkeit geschaffen, die exakte Uhrzeit zu ermitteln und festzulegen. Viele Internetdienste sind von einer exakten Uhrzeit abhängig. Ein Webserver könnte beispielsweise die Anforderung erhalten, eine Datei zu versenden, wenn sich diese in einer bestimmten Zeitspanne geändert hat. In einem lokalen Netzwerk ist es unbedingt notwendig, dass Rechner, die Dateien von einem gemeinsamen Dateiserver beziehen, ihre Uhrzeit synchronisieren, damit die Zeitstempel der Dateien konstistent bleiben. Dienste wie &man.cron.8; führen Befehle zu einem bestimmten Zeitpunkt aus. Ist die Uhrzeit nicht korrekt, kann dies zu Problemen führen. NTP ntpd &os; verwendet den &man.ntpd.8;- NTP-Server, um die genaue Uhrzeit von anderen NTP-Servern abzufragen, die eigene Systemzeit zu setzen, oder um diese anderen Rechnern anzubieten. Einen passenden NTP-Server auswählen NTP Serverwahl Um die Uhrzeit zu synchronisieren, müssen Sie sich mit einem NTP-Server verbinden. Ihr Netzwerkadministrator oder Ihr Internetprovider haben vielleicht schon einen NTP-Server eingerichtet. Lesen Sie deren Dokumentation, um dies zu überprüfen. Es gibt im Internet eine Liste mit frei zugänglichen NTP-Servern, aus der Sie sich einen in Ihrer Nähe gelegenen Server auswählen können. Beachten Sie aber auf jeden Fall die Nutzungsbedingungen des entsprechenden Servers, und fragen Sie um Erlaubnis, wenn dies nötig ist. Die Auswahl von mehreren NTP-Servern kann sinnvoll sein, wenn ein Server ausfällt oder falsche Zeiten liefert. &man.ntpd.8; verwendet die Antworten anderer Server, um zuverlässige Server zu bestimmen, die dann bevorzugt abgefragt werden. NTP unter &os; einrichten NTP Konfiguration NTP aktivieren ntpdate Wenn Sie Ihre Uhrzeit nur beim Systemstart synchronisieren wollen, können Sie &man.ntpdate.8; verwenden. Für Desktoprechner, die regelmäßig neu gestartet werden und keine ständige Synchronisation benötigen, ist dies akzeptabel. In allen anderen Fällen sollten Sie jedoch &man.ntpd.8; verwenden. Die Ausführung von &man.ntpdate.8; während des Systemstarts ist aber auch für Rechner, die &man.ntpd.8; verwenden, sinnvoll. &man.ntpd.8; passt die Systemzeit nur bei größeren Abweichungen an, während &man.ntpdate.8; die Zeit immer synchronisiert, egal wie groß die Differenz zwischen Systemzeit und korrekter Zeit ist. Um &man.ntpdate.8; beim Systemstart zu aktivieren, fügen Sie den Eintrag ntpdate_enable="YES" in /etc/rc.conf ein. Außerdem müssen Sie alle Server, mit denen Sie sich synchronisieren wollen, sowie alle an &man.ntpdate.8; zu übergebenden Optionen in den ntpdate_flags angeben. NTP ntp.conf NTP einrichten Die Konfiguration von NTP erfolgt über die Datei /etc/ntp.conf, und wird in der Hilfeseite &man.ntp.conf.5; beschrieben. Dazu ein einfaches Beispiel: server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift Die Option server legt die zu verwendenden Server fest, wobei jeder Server in einer eigenen Zeile steht. Wenn ein Server mit der Option prefer versehen ist, wie dies hier bei ntplocal.example.com der Fall ist, wird dieser Server bevorzugt verwendet. Eine Antwort von einem bevorzugten Server wird nur dann verworfen, wenn sie signifikant von denen anderer Server abweicht, ansonsten wird sie ohne Abfrage weiterer Server verwendet. Die Option prefer wird gewöhnlich nur für sehr zuverlässige und genaue Server verwendet, die über spezielle Hardware zur Zeitüberwachung verfügen. Die Option driftfile legt fest, in welcher Datei die Abweichungen der Systemuhr protokolliert werden. &man.ntpd.8; verwendet diese Datei, um die Systemzeit automatisch anzupassen, selbst wenn kurzzeitig kein NTP-Server zur Synchronisation verfügbar ist. Weiterhin legt die Option driftfile fest, wo Informationen über frühere Antworten des von Ihnen verwendeten NTP-Servers gespeichert werden sollen. Diese Datei enthält NTP-interne Informationen, sie sollte daher von anderen Prozessen nicht verändert werden. Den Zugang zu Ihrem NTP-Server beschränken In der Voreinstellung ist Ihr NTP-Server für alle Rechner im Internet erreichbar. Über die Option restrict in der Datei /etc/ntp.conf können Sie den Zugang zu Ihrem Server beschränken. Wenn Sie alle Rechner vom Zugriff auf Ihren NTP-Server ausschließen wollen, fügen Sie folgende Zeile in /etc/ntp.conf ein: restrict default ignore Durch diesen Eintrag verhindern Sie den Zugriff Ihres Servers auf alle auf Ihrem System konfigurierten Server. Müssen Sie Ihren NTP-Server mit einem externen NTP-Server synchronisieren, müssen Sie dies daher dezidiert zulassen. Lesen Sie in diesem Fall die Manualpage &man.ntp.conf.5;. Wenn Sie nur Rechnern Ihres eigenen Netzwerks die Synchronisation mit Ihrem NTP-Server erlauben, gleichzeitig aber verhindern wollen, dass diese den NTP-Server konfigurieren oder als Server für andere Rechner dienen können, fügen Sie folgende Zeile ein: restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap Bei 192.168.1.0 handelt es sich um einen Rechner Ihres Netzwerks. 255.255.255.0 ist die Netzmaske Ihres Netzwerks. /etc/ntp.conf kann verschiedene restrict-Optionen enthalten. Weiteres erfahren Sie im Abschnitt Access Control Support der Hilfeseite &man.ntp.conf.5;. Den NTP-Server starten Damit der NTP-Server beim Systemstart automatisch gestartet wird, fügen Sie den Eintrag ntpd_enable="YES" in /etc/rc.conf ein. Wenn Sie weitere Argumente an &man.ntpd.8; übergeben wollen, passen Sie die Option ntpd_flags in der Datei /etc/rc.conf entsprechend an. Um den NTP-Server ohne einen Systemneustart zu starten, rufen Sie ntpd mit den unter ntpd_flags in /etc/rc.conf festgelegten Parametern auf. Hierzu ein Beispiel: &prompt.root; ntpd -p /var/run/ntpd.pid ntpd mit einer Einwahlverbindung verwenden &man.ntpd.8; benötigt keine ständige Internetverbindung. Wenn Sie sich ins Internet einwählen, ist es sinnvoll, zu verhindern, dass NTP-Verkehr eine Verbindung aufbauen oder aufrechterhalten kann. Wenn Sie user-PPP verwenden, können Sie dies in den filter-Direktiven von /etc/ppp/ppp.conf festlegen. Sehen Sie sich dazu das folgende Beispiel ein: set filter dial 0 deny udp src eq 123 # Prevent NTP traffic from initiating dial out set filter dial 1 permit 0 0 set filter alive 0 deny udp src eq 123 # Prevent incoming NTP traffic from keeping the connection open set filter alive 1 deny udp dst eq 123 # Prevent outgoing NTP traffic from keeping the connection open set filter alive 2 permit 0/0 0/0 Weitere Informationen finden Sie im Abschnitt PACKET FILTERING von &man.ppp.8; sowie in den Beispielen unter /usr/share/examples/ppp/. Einige Internetprovider blockieren Ports mit niedrigen Nummern. In solchen Fällen funktioniert NTP leider nicht, da Antworten eines NTP-Servers Ihren Rechner nicht erreichen werden. Weitere Informationen Weiterführende Dokumentation (im HTML-Format) zum NTP-Server finden Sie unter /usr/share/doc/ntp/. diff --git a/de_DE.ISO8859-1/books/porters-handbook/book.sgml b/de_DE.ISO8859-1/books/porters-handbook/book.sgml index 38c7c90783..da51e54aa5 100644 --- a/de_DE.ISO8859-1/books/porters-handbook/book.sgml +++ b/de_DE.ISO8859-1/books/porters-handbook/book.sgml @@ -1,14023 +1,14060 @@ %books.ent; ]> Das FreeBSD Porter-Handbuch The FreeBSD German Documentation Project April 2000 2000 2001 2002 2003 2004 2005 2006 2007 The FreeBSD German Documentation Project &bookinfo.trademarks; &bookinfo.legalnotice; Einführung Die Ports-Sammlung von FreeBSD ist der gebräuchlichste Weg, um Anwendungen ("Ports") unter FreeBSD zu installieren. Wie alles andere in FreeBSD auch, ist sie hauptsächlich das Ergebnis der Arbeit von Freiwilligen. Es ist wichtig, diesen Aspekt beim Lesen im Hinterkopf zu behalten. In FreeBSD kann jeder einen neuen Port einsenden oder sich dazu bereit erklären, einen bereits vorhandenen Port zu pflegen, sofern der Port derzeit keinen Maintainer hat – dazu sind keine besonderen Rechte nötig. Einen neuen Port erstellen Sie sind also daran interessiert, einen neuen Port zu erstellen oder einen vorhandenen zu aktualisieren? Großartig! Die folgenden Kapitel beinhalten einige Richtlinien, um einen neuen Port für FreeBSD zu erstellen. Wenn Sie einen vorhandenen Port auf den neuesten Stand bringen wollen, sollten Sie mit fortfahren. Wenn Ihnen dieses Dokument nicht detailliert genug ist, sollten Sie einen Blick in /usr/ports/Mk/bsd.port.mk werfen. Das Makefile jedes Ports bindet diese Datei ein. Auch wenn Sie nicht täglich mit Makefiles arbeiten, sollten Sie gut damit zurecht kommen, da die Datei gut dokumentiert ist und Sie eine Menge Wissen daraus erlangen können. Zusätzlich können Sie speziellere Fragen an die &a.ports;-Mailingliste stellen. Nur ein Bruchteil der Variablen (VAR), die von Ihnen gesetzt werden können, finden hier Erwähnung. Die meisten von ihnen (wenn nicht sogar alle) sind am Anfang von /usr/ports/Mk/bsd.port.mk erläutert. Beachten Sie bitte, dass diese Datei eine nicht standardkonforme Tabulator-Einstellung verwendet. Emacs und Vim sollten diese Einstellung jedoch automatisch beim Öffnen der Datei setzen. Sowohl &man.vi.1; als auch &man.ex.1; können mit dem Befehl :set tabstop=4 dazu gebracht werden, die Datei richtig anzuzeigen, wenn sie geöffnet wird. Port erstellen auf die Schnelle Dieser Abschnitt beschreibt, wie Sie schnell einen Port erstellen können. In vielen Fällen ist dies allerdings nicht ausreichend, dann werden Sie in diesem Buch weiterlesen müssen. Als Erstes besorgen Sie sich das Original-Tarball (komprimiertes Archiv) und legen es im DISTDIR ab, welches standardmäßig /usr/ports/distfiles ist. Im Folgenden wird angenommen, dass die Software unverändert kompiliert werden konnte, dass also keinerlei Änderungen nötig waren, um den Port auf Ihrem FreeBSD-Rechner zum Laufen zu bringen. Falls Sie Änderungen vornehmen mussten, werden Sie auch den nächsten Abschnitt beachten müssen. Das <filename>Makefile</filename> schreiben Ein minimales Makefile sieht in etwa so aus: # New ports collection makefile for: oneko # Date created: 5 December 1994 # Whom: asami # # $FreeBSD$ # PORTNAME= oneko PORTVERSION= 1.1b CATEGORIES= games MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ MAINTAINER= asami@FreeBSD.org COMMENT= A cat chasing a mouse all over the screen MAN1= oneko.1 MANCOMPRESSED= yes USE_IMAKE= yes .include <bsd.port.mk> Versuchen Sie es zu verstehen. Machen Sie sich keine Gedanken um die $FreeBSD$-Zeile, diese wird automatisch vom CVS eingefügt, wenn der Port in den Haupt-Ports-Tree importiert wird. Ein detailliertes Beispiel finden Sie im Abschnitt sample Makefile. Die Beschreibungsdateien erstellen Es gibt zwei Beschreibungsdateien, die für jeden Port benötigt werden, ob sie tatsächlich im Paket enthalten sind oder nicht. Dies sind pkg-descr und pkg-plist. Der pkg- Präfix unterscheidet sie von anderen Dateien. <filename>pkg-descr</filename> Diese enthält eine längere Beschreibung des Ports. Einer oder mehrere Absätze, die kurz und prägnant erklären, was der Port macht, sind ausreichend. pkg-descr enthält keine Anleitung oder detaillierte Beschreibung wie der Port benutzt oder kompiliert wird! Bitte seien Sie vorsichtig, wenn Sie aus dem README oder der Manualpage kopieren ; Diese sind oft keine prägnanten Beschreibungen des Ports oder sie sind in einem ungünstigen Format (Manualpages haben z.B. bündige Zwischenräume). Wenn es für die portierte Software eine offizielle Webseite gibt, sollten Sie diese hier angeben. Fügen Sie hierzu eine der Webseiten mit dem Präfix WWW: ein, damit automatische Werkzeuge korrekt arbeiten. Das folgende Beispiel zeigt wie Ihre pkg-descr aussehen sollte: This is a port of oneko, in which a cat chases a poor mouse all over the screen. : (etc.) WWW: http://www.oneko.org/ <filename>pkg-plist</filename> Diese Datei enthält eine Liste aller Dateien, die von diesem Port installiert werden. Sie wird auch die Packliste genannt, da das Paket durch die hier aufgeführten Dateien erstellt wird. Die Pfadangaben sind relativ zum Installationspräfix (für gewöhnlich /usr/local oder /usr/X11R6). Wenn Sie die MANn-Variablen verwenden (was Sie auch machen sollten), führen Sie hier keine Manualpages auf. Wenn der Port während der Installation Verzeichnisse erstellt, stellen Sie sicher entsprechende @dirrm-Zeilen einzufügen, um die Verzeichnisse zu entfernen, wenn das Paket gelöscht wird. Hier ist ein kleines Beispiel: bin/oneko lib/X11/app-defaults/Oneko lib/X11/oneko/cat1.xpm lib/X11/oneko/cat2.xpm lib/X11/oneko/mouse.xpm @dirrm lib/X11/oneko Für weitere Details zur Packliste lesen Sie in der &man.pkg.create.1; Manualpage nach. Es wird empfohlen alle Dateinamen in dieser Datei alphabetisch sortiert zu halten. Das erlaubt Ihnen die Änderungen bei einem Upgrade Ihres Ports deutlich einfacher zu Überprüfen. Eine Packlist von Hand zu erzeugen kann eine sehr mühsame Aufgabe sein. Wenn der Port eine große Anzahl Dateien installiert, kann es Zeit sparen, eine Packliste automatisch zu erstellen. Es gibt nur einen Fall, in dem pkg-plist weggelassen werden kann. Wenn der Port nur eine handvoll Dateien und Verzeichnisse installiert, können diese in den Variablen PLIST_FILES und PLIST_DIRS im Makefile aufgelistet werden. Zum Beispiel könnten wir im obigen Beispiel ohne pkg-plist für den oneko-Port auskommen, indem wir die folgenden Zeilen ins Makefile einfügen: PLIST_FILES= bin/oneko \ lib/X11/app-defaults/Oneko \ lib/X11/oneko/cat1.xpm \ lib/X11/oneko/cat2.xpm \ lib/X11/oneko/mouse.xpm PLIST_DIRS= lib/X11/oneko Natürlich sollte PLIST_DIRS ungesetzt bleiben, wenn der Port keine eigenen Verzeichnisse installiert. Der Preis für diese Art die Dateien eines Ports anzugeben ist, dass man keine Befehlsfolgen wie in &man.pkg.create.1; nutzen kann. Deshalb ist es nur für einfache Ports geeignet und macht diese noch einfacher. Gleichzeitig bringt es den Vorteil die Anzahl der Dateien in der Ports-Sammlung zu reduzieren. Deshalb ziehen Sie bitte diese Vorgehensweise in Erwägung, bevor Sie pkg-plist benutzen. Später werden wir uns ansehen, wie pkg-plist und PLIST_FILES benutzt werden können, um anspruchsvollere Aufgaben zu erfüllen. Die Checksummendatei erzeugen Geben Sie einfach make makesum ein. Die Regeln von Make sorgen dafür, dass die Datei distinfo automatisch erstellt wird. Wenn sich die Checksumme einer heruntergeladenen Datei regelmäßig ändert und Sie sicher sind, dass Sie der Quelle trauen können (weil sie z.B. von einer Hersteller-CD oder täglich erstellter Dokumentation stammt), sollten Sie diese Dateien in der Variable IGNOREFILES angeben. Dann wird die Checksumme für diese Datei bei make makesum nicht berechnet, sondern auf IGNORE gesetzt. Den Port testen Sie sollten sicherstellen, dass die Port-Regeln genau das einhalten, was Sie von ihnen erwarten, auch beim Erzeugen eines Pakets aus dem Port. Dies sind die wichtigen Punkte, die Sie überprüfen sollten. pkg-plist enthält nichts, das nicht von Ihrem Port installiert wurde. pkg-plist enthält alles, was von Ihrem Port installiert wurde. Ihr Port kann mit Hilfe von make reinstall mehrmals installiert werden. Ihr Port räumt bei der Deinstallation hinter sich auf. Empfohlene Testreihenfolge make install make package make deinstall pkg_add Paket-Name make deinstall make reinstall make package Stellen Sie bitte sicher, dass während make package und make deinstall keine Warnungen ausgegeben werden. Nach Schritt 3 überprüfen Sie bitte, ob alle neuen Verzeichnisse korrekt entfernt wurden. Und versuchen Sie die Software nach Schritt 4 zu benutzen, um sicherzustellen, dass sie korrekt funktioniert, wenn diese aus einem Paket installiert wird. Der gründlichste Weg diese Schritte zu automatisieren ist eine Tinderbox zu installieren. Diese verwaltet Jails, in denen Sie alle oben genannten Schritte durchführen können, ohne den Zustand Ihres laufenden Systems zu verändern. Mehr Informationen hierzu entält ports/ports-mgmt/tinderbox Ihren Port mit <command>portlint</command> überprüfen Bitte verwenden Sie portlint, um festzustellen, ob Ihr Port unseren Richtlinien entspricht. Das Programm ports-mgmt/portlint ist Teil der Ports-Sammlung. Stellen Sie vor allem sicher, dass das Makefile in der richtigen Form und das Paket passend benannt ist. Den Port einreichen Als Erstes sorgen Sie bitte dafür, dass Sie den Abschnitt DOs and DON'Ts gelesen haben. Nun, da Sie mit Ihrem Port zufrieden sind, müssen Sie ihn nur noch in den Haupt-Ports-Tree von FreeBSD einbringen, damit alle daran teilhaben können. Wir benötigen nicht Ihr work-Verzeichnis oder Ihr pkgname.tgz-Paket – diese können Sie nun löschen. Als Nächstes fügen Sie bitte einfach die Ausgabe von shar `find port_dir` in einen Fehlerbericht (PR - Problem Report) und senden diesen mittels &man.send-pr.1; (unter Bug Reports and General Commentary finden Sie weitere Informationen über &man.send-pr.1;). Ordnen Sie den Fehlerbericht bitte in die Kategorie Ports mit der Klasse Change-Request ein (Markieren Sie den Bericht nicht als vertraulich (confidential)!). Fügen Sie bitte eine kurze Beschreibung des Programms, das Sie portiert haben, in das Beschreibungs-Feld des Problemberichts und das Shar (Shell-Archiv) in das Fix-Feld ein. Sie können uns die Arbeit um einiges vereinfachen, wenn Sie eine gute Beschreibung in der Zusammenfassung des Problemberichtes verwenden. Wir bevorzugen etwas wie Neuer Port: <Kategorie>/<Portname><Kurzbeschreibung des Ports> für neue Ports und Update Port: <Kategorie>/<Portname> <Kurzbeschreibung des Updates> für Portupdates. Wenn Sie sich an dieses Schema halten, ist die Chance, dass sich jemand bald Ihren Bericht ansieht, deutlich besser. Noch einmal: Bitte fügen Sie nicht das distfile der Originalquelle, das work-Verzeichnis oder das Paket, das Sie mit make package erstellt haben, ein. Haben Sie bitte etwas Geduld, nachdem Sie den Port eingereicht haben. Manchmal kann es einige Monate dauern, bevor ein Port in FreeBSD eingefügt wird, obwohl es wahrscheinlich nur ein paar Tage dauert. Sie können sich die Liste der Ports, die darauf warten in FreeBSD committet zu werden, ansehen. Nachdem wir einen Blick auf Ihren Port geworfen haben, werden wir, wenn nötig, bei Ihnen nachfragen und ihn in die Ports-Sammlung übernehmen. Ihr Name taucht dann auch in der Liste der Additional FreeBSD Contributors und in anderen Dateien auf. Ist das nicht toll?! :-) Einen Port in aller Ruhe erstellen Ok, das war nicht ganz einfach und der Port hat einige Veränderungen erfordert, um funktionieren zu können. In diesem Abschnitt werden wir Schritt für Schritt erklären, wie man den funktionierenden Port den Vorgaben der Ports entsprechend anpasst. Die Funktionsweise Beginnen wir mit der Abfolge der Ereignisse, die eintreten, wenn der Nutzer das erste make in Ihrem Portsverzeichnis ausführt. Sie empfinden es für das Verständnis vielleicht hilfreich bsd.port.mk in einem anderen Fenster offen zu haben, während Sie diesen Abschnitt lesen. Aber machen Sie sich keine Sorgen, falls Sie nicht wirklich verstehen, was bsd.port.mk macht, die Wenigsten begreifen dies... :> Das Target fetch wird aufgerufen. Es ist dafür verantwortlich sicherzustellen, dass der Tarball lokal im DISTDIR verfügbar ist. Falls fetch die benötigten Dateien in DISTDIR nicht finden kann, durchsucht es die URL MASTER_SITES, welche im Makefile gesetzt ist, ebenso wie unsere Haupt-FTP-Seite unter ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/ , wo wir genehmigte Distfiles als Backup aufbewahren. Danach wird versucht, so eine direkte Internetverbindung besteht, dass genannte Distfile mit FETCH herunterzuladen. Falls dies gelingt, wird die Datei in DISTDIR für weitere Nutzung abgelegt und fährt fort. Das Target extract wird aufgerufen. Es sucht nach den Distfiles Ihres Ports (normalerweise ein gzip-komprimierter Tarball) in DISTDIR und entpackt diese in ein temporäres Unterverzeichnis, welches von WRKDIR festgelegt wird (standardmäßig work). Das Target patch wird aufgerufen. Zuerst werden alle in PATCHFILES festgelegten Patches eingespielt. Anschließend werden, falls Patches der Form patch-* in PATCHDIR (standardmäßig das files-Unterverzeichnis) gefunden werden, diese in alphabetischer Reihenfolge eingespielt. Das Target configure wird aufgerufen. Dieses kann viele verschiedene Dinge machen. Existiert scripts/configure, so wird es aufgerufen. Falls HAS_CONFIGURE oder GNU_CONFIGURE gesetzt sind, wird WRKSRC/configure ausgeführt. Falls USE_IMAKE gesetzt ist, wird XMKMF (standardmäßig xmkmf -a) ausgeführt. Das Target build wird aufgerufen. Es ist für das Wechseln in das private Arbeitsverzeichnis (WRKSRC) und das Bauen des Ports zuständig. Ist USE_GMAKE gesetzt, so wird GNU make verwendet, sonst das System-make. Die oben genannten Schritte sind die Standardaktionen. Zusätzlich können Sie pre- irgendwas oder post-irgendwas als Targets definieren oder Skripten mit diesen Namen in das scripts-Unterverzeichnis legen. Sie werden dann vor bzw. nach den Standardaktionen aufgerufen. Angenommen Sie haben das Target post-extract in Ihrem Makefile definiert und eine Datei pre-build im scripts Unterverzeichnis, so wird das Target post-extract nach dem normalen Entpacken aufgerufen und das Skript pre-build ausgeführt, bevor die vordefinierten Bau-Regeln abgearbeitet sind. Es wird empfohlen, dass Sie Makefile-Targets verwenden, falls die Aktionen es erlauben, da es so für jemanden einfacher sein wird herauszufinden, was für eine nicht-standardmäßige Aktion der Port benötigt. Die Standardaktionen werden aus den Targets bsd.port.mk do-irgendwas übernommen. Zum Beispiel sind die Befehle zum Entpacken eines Ports im Target do-extract zu finden. Falls Sie mit einem vorgegebenen Target nicht zufrieden sind, können Sie es verändern, indem Sie das Target do-irgendwas in Ihrem Makefile neu definieren. Die Haupt-Targets (z.B. extract, configure usw.) machen nicht mehr als sicherzustellen, dass bis hierhin alle Abschnitte abgeschlossen sind, um danach die eigentlichen Targets oder Skripte aufzurufen. Und es ist nicht beabsichtigt, dass diese geändert werden. Falls Sie das Entpacken verändern wollen, verändern Sie do-extract, aber niemals die Art, wie extract arbeitet! Jetzt, da Sie verstehen, was geschieht, wenn der Benutzer make eingibt, lassen Sie uns durch die empfohlenen Schritte gehen, um den perfekten Port zu erstellen. Den originalen Quelltext besorgen Normalerweise liegt der original Quelltext als gepackte Datei (foo.tar.gz oder foo.tar.Z) vor. Kopieren Sie diese nach DISTDIR. Nutzen Sie, soweit möglich, immer die Quellen aus dem Hauptzweig. Es ist notwendig die Variable MASTER_SITES anzupassen, um anzugeben, wo sich der originale Quelltext befindet. In bsd.sites.mk finden sich hilfreiche Definitionen für die gebräuchlichsten Seiten. Bitte nutzen Sie diese Seiten und die zugehörigen Definitionen, soweit dies möglich ist. Damit wird vermieden, immer und immer wieder dieselben Informationen zu wiederholen. Da die Hauptseiten regelmäßig angepasst werden müssen, vereinfacht dieses Vorgehen die Pflege der Dateien für jeden Beteiligten. Falls keine zuverlässige und gut erreichbare FTP/HTTP-Seite zu finden ist, oder nur Seiten auffindbar sind, die keinen Standards entsprechen, sollte eine Kopie des Quelltextes auf einer zuverlässigen Seite abgelegt werden. Dies könnte z.B. die eigene Internetseite sein. Ist kein geeigneter Ort zum Ablegen des Quelltextes auffindbar, ist es möglich diesen intern auf ftp.FreeBSD.org abzulegen; dies sollte jedoch als letzte Möglichkeit angesehen werden. Das Distfile muss in diesem Fall in ~/public_distfiles/ eines freefall-Accounts abgelegt werden. Bitten Sie den Committer Ihres Ports dies zu erledigen. Er wird außerdem MASTER_SITES nach MASTER_SITE_LOCAL und MASTER_SITE_SUBDIR auf den freefall-Benutzernamen angepasst. Sollte sich das Distfile des Ports regelmäßig ohne Versionsanpassungen des Autors ändern, sollte überlegt werden, das Disfile auf der eigenen Internetseite abzulegen und diese in der Liste der MASTER_SITES an die erste Stelle zu setzen. Falls möglich, sollte der Autor des Ports gebeten werden, dies zu erledigen; hierüber wird die Kontrolle des Quelltextes verbessert. Wird eine eigene Version des Quelltextes auf eigenen Internetseiten verfügbar gemacht, verhindert dies Warnungen von checksum mismatch und reduziert den Arbeitsaufwand der Maintainer der FTP-Seiten. Auch wenn nur eine Quelle für den Quelltext des Ports zur Verfügung steht, ist es empfohlen, ein Backup auf einer weiteren Seite abzulegen und diese als zweiten Eintrag in MASTER_SITES aufzunehmen. Sind für den Port zusätzlich aus dem Internet verfügbare Patches erforderlich, sollten diese ebenfalls in DISTDIR abgelegt werden. Sollten diese Patches von anderer Quelle als der Hauptseite des Ports stammen, ist das kein Grund zur Sorge. Es gibt Wege diesem Umstand gerecht zu werden (beachten Sie die unten stehende Beschreibung zu PATCHFILES ). Den Port bearbeiten Entpacken Sie eine Kopie des Tarballs in ein privates Verzeichnis und nehmen Sie alle Änderungen vor, die nötig sind, um den Port unter einer aktuellen FreeBSD-Version kompilieren zu können. Protokollieren Sie sorgfältig alle Schritte, die Sie vornehmen, da Sie den Prozess in Kürze automatisieren werden. Alles, auch das Entfernen, Hinzufügen oder Bearbeiten von Dateien, sollte von einem automatisierten Skript oder einer Patch-Datei machbar sein, wenn Ihr Port fertig ist. Falls Ihr Port bedeutende Interaktionen/Veränderungen durch den Benutzer benötigt, um ihn zu Kompilieren oder zu Installieren, sollten Sie einen Blick auf Larry Walls klassische Configure-Skripte werfen oder vielleicht etwas Ähnliches selbst erstellen. Das Ziel der Ports-Sammlung ist es, jeden Port so plug-and-play-fähig wie möglich für den Endbenutzer zu machen, während ein Minimum an Speicherplatz gebraucht wird. Solange nicht anders angegeben wird von Patch-Dateien, Skripten und anderen Dateien, die Sie erstellt und der FreeBSD Ports-Sammlung hinzugefügt haben, angenommen, dass Sie unter den standardmäßigen BSD-Copyright-Bedingungen stehen. Fehlerbehebung (Patches) Bei der Vorbereitung eines Ports können die Dateien, die hinzugefügt oder verändert wurden, mittels &man.diff.1; abgefangen werden, um Sie später an &man.patch.1; zu übergeben. Jeder Patch, der dem Quelltext übergeben werden soll, sollte in einer Datei patch-* abgelegt werden, wobei * dem Pfadnamen der zu korrigierenden Datei entspricht, wie er auch in patch-Imakefile oder im patch-src-config.h erscheint. Diese Dateien sollten in PATCHDIR (normalerweise files) abgelegt sein, von wo sie automatisch übernommen werden. Alle Patches müssen sich relativ zur WRKSRC-Variable (normalerweise dem Verzeichnis, in dem sich der Quelltext des Ports entpackt und wo auch der Bau stattfindet) befinden. Um Korrekturen und Updates zu vereinfachen, sollte es vermieden werden, mehr als einen Patch für eine Datei zu nutzen (z.B. patch-file und patch-file2, welche beide WRKSRC/foobar.c verändern). Für die Benennung der Patches sollten nur die Zeichen [-+._a-zA-Z0-9] genutzt werden. Bitte verwenden Sie keine weiteren Zeichen als die angegebenen. Die Namensvergabe sollte nicht patch-aa oder patch-ab etc. entsprechen, erwähnen Sie immer den Pfad und Dateinamen. RCS-Zeichenketten sollten vermieden werden, da CVS diese verstümmeln würde, sobald wir diese Dateien in die Ports-Sammlung einpflegen. Wenn wir die Dateien wieder abrufen wären diese verändert und der Patch würde fehlschlagen. RCS-Zeichenketten sind in Dollar-Zeichen ($) eingefügte Zeichen und beginnen üblicherweise mit $Id oder $RCS. Die Option rekursiv () zu nutzen &man.diff.1;, um Patches zu erstellen, ist zulässig, jedoch sollte der Patch anschließend geprüft werden, um Unnötiges aus dem Patch zu entfernen. Im Einzelnen bedeutet dies, dass Diffs zwischen zwei Backup-Dateien, Makefiles oder wenn der Port Imake oder GNU configure usw. nutzt, überflüssig sind und entfernt werden sollten. Falls es es notwendig war, configure.in zu bearbeiten und es soll autoconf zum Neuerstellen von configure genutzt werden, sollten die Diffs aus configure nicht genutzt werden (diese werden oft einige tausend Zeilen groß!); – hier sollte USE_AUTOTOOLS=autoconf:261 definiert und das Diff aus configure.in genutzt werden. + Zusätzlich sollte man unnötige + Markup-Änderungen in Patches/Änderungen möglichst + vermeiden. In der Open Source-Welt teilen sich Projekte + häufig große Teile des Quellcodes. Allerdings + verwenden die einzelnen Projekte oft unterschiedliche + Programmierstile und Vorgaben für Einrückungen. Wenn + man also einen funktionierenden Teil einer Funktion aus einem + Projekt verwendet, um ein ähnliches Problem in einem anderen + Projekt zu lösen, sollte man besonders vorsichtig sein, weil + sich ansonsten die CVS-Änderungseinträge mit + überflüssigen Einträgen füllen, die nur + das Markup des Quellcodes betreffen, ohne dass sich an der + Funktion des eigentlichen Quellcode etwas ändert + (withspace-only changes). Solche Änderungen + vergrößern nicht nur das CVS-Repository, sondern + erschweren es auch die Ursache für eventuell auftretende + Probleme zu finden. + War es notwendig eine Datei zu entfernen, wird dies besser mittels des post-extract-Targets als über den Patch selbst realisiert. Ein einfacher Austausch kann direkt über das Makefile des Ports umgesetzt werden, indem der in-place-Modus von &man.sed.1; genutzt wird. Dies ist sehr hilfreich, wenn variable Werte korrigiert werden sollen. Beispiel: post-patch: @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|' ${WRKSRC}/configure Relativ häufig ergibt sich die Situation, in der die portierte Software die CR/LF-Konventionen für Zeilenenden nutzt (dies ist bei unter &windows; entwickelter Software häufig der Fall). Dies kann bei weiteren Patches Probleme (Compiler-Warnungen, Fehlermeldungen bei der Ausführung von Skripten wie z.B. /bin/sh^M not found) und anderes ergeben. Um schnell alle Dateien von CR/LF nach LF zu konvertieren, kann USE_DOS2UNIX=yes in das Makefile des Ports geschrieben werden. Hierzu kann eine Liste der zu konvertierenden Dateien erstellt werden: USE_DOS2UNIX= util.c util.h Sollen Gruppen von Dateien über verschiedene Unterverzeichnisse konvertiert werden, kann DOS2UNIX_REGEX genutzt werden, dessen Argumente find-kompatible, reguläre Ausdrücke sind. Mehr zur Formatierung findet sich in &man.re.format.7;. Diese Option ist beim Konvertieren aller Dateien mit definierter Endung, z.B. aller Dateien im Quellcode, wobei binäre Dateien unberührt bleiben, sinnvoll: USE_DOS2UNIX= yes DOS2UNIX_REGEX= .*\.(c|cpp|h) Konfigurieren Fügen Sie alle zusätzlichen Veränderungsbefehle Ihrem Skript configure hinzu und speichern Sie es im scripts-Unterverzeichnis. Wie vorstehend schon erwähnt, können Sie dies auch mit den Targets Makefile und/oder Skripte mit dem Namen pre-configure oder post-configure erledigen. Handhabung von Benutzereingaben Sollte der Port Eingaben vom Benutzer benötigen, muss IS_INTERACTIVE im Makefile des Ports gesetzt werden. Dies erlaubt overnight builds Ihren Port zu überspringen, falls der Nutzer die Variable BATCH setzt (setzt der Nutzer hingegen die Variable INTERACTIVE, werden nur Ports gebaut, die Interaktion vom Nutzer erwarten). Dies erspart den Rechnern, welche kontinuierlich Ports bauen, eine Menge Zeit (siehe unten). Zudem ist es empfohlen, falls sinnvolle Vorgaben für interaktive Optionen gesetzt sind, die PACKAGE_BUILDING-Variable zu prüfen und das interaktive Skript abzuschalten. Dies macht es uns möglich, Pakete für CDROMs und FTP-Server zu bauen. Die Konfiguration des Makefile Das Konfigurieren des Makefile ist sehr einfach und wir schlagen vor, dass Sie zunächst einen Blick auf vorhandene Beispiele werfen. Zusätzlich gibt es ein Beispiel eines Makefile in diesem Handbuch. Schauen Sie es sich an und verfolgen Sie bitte die Abfolge der Variablen und Abschnitte in dieser Vorlage. Damit erleichtern Sie es anderen, Ihren Port zu lesen. Bedenken Sie bitte die folgenden Probleme in der hier vorgegebenen Abfolge der Unterabschnitte dieses Kapitels, wenn Sie Ihr neues Makefile erstellen: Der originale Quelltext Liegt der Quelltext in DISTDIR als eine standardisierte und mit gzip gepackte Datei in der Art foozolix-1.2.tar.gz? Falls ja, können Sie zum nächsten Schritt übergehen. Falls nicht, sollten Sie versuchen, die Variablen DISTVERSION, DISTNAME, EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX, oder DISTFILES zu ändern. Das hängt davon ab, wie fremdartig das Distributionsfile Ihres Ports ist (der häufigste Fall ist EXTRACT_SUFX=.tar.Z, wenn der Tarball durch ein normales compress und nicht durch gzip gepackt wurde). Im schlimmsten Fall können Sie einfach Ihre eigene Vorgabe mittels do-extract erzeugen und die Standardvorgabe überschreiben; aber dies sollte in den wenigsten Fällen, wenn überhaupt, notwendig sein. Bezeichnungen Der erste Teil des Makefile beschreibt die Versionsnummer des Ports und führt ihn in der richtigen Kategorie auf. <makevar>PORTNAME</makevar> und <makevar>PORTVERSION</makevar> Setzen Sie bitte die Variable PORTNAME auf den Basisnamen Ihres Ports und die Variable PORTVERSION auf dessen Versionsnummer. <makevar>PORTREVISION</makevar> und <makevar>PORTEPOCH</makevar> <makevar>PORTREVISION</makevar> Die PORTREVISION-Variable ist ein streng monoton wachsender Wert, welcher auf 0 zurückgesetzt wird, nachdem PORTVERSION erhöht wurde (d.h. jedes Mal, wenn ein offizielles Release erfolgt). Sie wird an den Namen des Pakets angehängt, wenn sie ungleich 0 ist. Änderungen an PORTREVISION werden von automatisierten Werkzeugen (z.B. &man.pkg.version.1;) genutzt, um anzuzeigen, dass ein neues Paket verfügbar ist. PORTREVISION sollte jedes Mal erhöht werden, wenn eine Änderung am Port erfolgt, die beträchtliche Auswirkungen auf den Inhalt oder Struktur des aus dem Port erzeugten Pakets zur Folge hat. Beispiele dafür, wann PORTREVISION erhöht werden sollte: Hinzufügen von Patches, welche Sicherheitslücken schließen, Fehler beseitigen oder neue Funktionalität zum Port hinzufügen. Änderungen am Makefile des Ports, welche compile-time-Optionen hinzufügen oder entfernen. Änderungen bezüglich Packliste oder am Verhalten während der Installation des Pakets (d.h. Änderungen an einem Skript, welches Ausgangsdaten für das Paket erzeugt, wie z.B. SSH-Hostschlüssel). Versionssprung einer Shared-Library, welche eine Abhängigkeit dieses Ports ist (In diesem Fall würde ein Anwender bei der Installation des alten Pakets scheitern, falls er eine neue Version der Abhängigkeit bereits installiert hat, weil nach der alten Bibliothek libfoo.x anstatt nach libfoo.(x+1)) gesucht wird). Schleichende Änderungen am Distfile, welche bedeutende funktionale Änderungen verursachen, d.h. Änderungen des Distfile erfordern eine Korrektur an distinfo, ohne dass damit zusammenhängend die PORTVERSION verändert wird, obwohl ein diff -ru zwischen der alten und der neuen Version bedeutende Veränderungen am Code nachweist. Beispiele für Änderungen, welche keine Erhöhung von PORTREVISION erfordern: Stilistische Änderungen am Grundgerüst des Ports ohne funktionale Änderungen am daraus resultierenden Paket. Änderungen an der Variable MASTER_SITES oder andere funktionale Änderungen, welche das resultierende Paket nicht verändern. Marginale Patches am Distfile wie die Korrektur von Tippfehlern, welche nicht wichtig genug sind, um dem Benutzer die Bürde eines Upgrades aufzuerlegen. Build fixes, die ein Paket erst kompilierbar machen, welches ohne diese Änderungen vorher nicht erzeugt werden konnte (solange die Änderungen keine funktionale Differenz bringen auf Plattformen, auf denen dieses Paket schon vorher gebaut werden konnte). Da PORTREVISION den Inhalt des Pakets wiederspiegelt, ist es nicht notwendig PORTREVISION zu erhöhen, wenn das Paket vorher nicht erstellt werden konnte. Als Faustregel gilt: Stellen Sie sich die Frage, ob die durchgeführte Änderung am Port jedem hilft (entweder aufgrund einer Verbesserung, Beseitigung eines Fehlers, oder der Annahme, dass das neue Paket überhaupt erst funktioniert) und wägen Sie es gegen den Umstand ab, dass jedermann, der seine Ports-Sammlung regelmässig auf dem neuesten Stand hält, zu einer Aktualisierung gezwungen wird. Falls Sie die Frage positiv beantworten sollten, erhöhen Sie die Variable PORTREVISION. <makevar>PORTEPOCH</makevar> Von Zeit zu Zeit geschieht es, dass irgendjemand (Drittanbieter von Software oder FreeBSD Ports Committer) etwas Dummes tut und eine Version einer Software veröffentlicht, deren Versionsnummer niedriger ist als die der vorherigen. Ein Beispiel hierfür ist ein Port, der von foo-20000801 auf foo-1.0 geändert wird (der Erstere wird fälschlicherweise als neue Version behandelt, weil 2000801 ein numerisch größerer Wert ist als 1). In Situationen wie diesen sollte die Variable PORTEPOCH erhöht werden. Wenn PORTEPOCH größer als 0 ist, wird sie an den Namen des Pakets angehängt, wie in Abschnitt 0 oberhalb bereits beschrieben. PORTEPOCH darf niemals verringert oder auf 0 gesetzt werden, weil der Vergleich des Pakets mit einem früheren Zeitpunkt scheitern würde (d.h. das Paket würde niemals als veraltet erkannt werden): Die neue Versionsnummer (1.0,1 im obigen Beispiel) ist immer noch numerisch kleiner als die vorherige Version (2000801), aber das Suffix ,1 wird von automatisierten Werkzeugen gesondert behandelt und wird als größer erkannt, als das implizit angenommene Suffix ,0 im früheren Paket. Das Entfernen oder Zurücksetzen von PORTEPOCH führt zu unendlichem Ärger. Wenn Sie die obigen Ausführungen nicht vollständig verstanden haben, lesen Sie es bitte unbedingt nochmals bis Sie es vollständig verinnerlicht haben, oder fragen Sie vor jeder Änderung auf den Mailinglisten nach! Es wird erwartet, dass PORTEPOCH für die weitaus überwiegende Zahl der Ports nicht verwendet wird und der verantwortungsvolle und vorausschauende Umgang mit PORTVERSION macht es meist überflüssig, falls ein späteres Release die Versionsstruktur ändern sollte. Vorsicht ist geboten, wenn ein Release einer Drittanbieter-Software ohne eine offizielle Versionsnummer veröffentlicht wird, wie z.B. bei Snapshot-Versionen. Man ist versucht, das Release mit dem jeweiligen Datum zu bezeichnen, was unweigerlich zu den oben beschriebenen Problemen führt, wenn das nächste offizielle Release erscheint. Wenn z.B. ein Snapshot zum Datum 20000917 veröffentlicht wird und die vorherige Version der Software war 1.2, dann sollte der Snapshot die PORTVERSION 1.2.20000917 oder ähnlich erhalten und nicht 20000917, damit das nachfolgende Release, angenommen 1.3, immer noch einen größeren numerischen Wert aufweist. Beispiel für den Gebrauch von <makevar>PORTREVISION</makevar> und <makevar>PORTEPOCH</makevar> Der gtkmumble-Port, Version 0.10, befindet sich in der Ports-Sammlung: PORTNAME= gtkmumble PORTVERSION= 0.10 PKGNAME wird zu gtkmumble-0.10. Ein Sicherheitsloch wurde entdeckt, das einen lokalen Patch von FreeBSD erforderlich macht. PORTREVISION wird entsprechend erhöht. PORTNAME= gtkmumble PORTVERSION= 0.10 PORTREVISION= 1 PKGNAME wird zu gtkmumble-0.10_1 Eine neue Version wird vom Software-Drittanbieter veröffentlicht, bezeichnet mit der Version 0.2 (es stellt sich heraus, dass der Autor beabsichtigte, dass 0.10 eigentlich 0.1.0 bedeuten sollte, nicht was kommt nach 0.9  – Hoppla, aber nun ist es zu spät). Da die neue Unterversion 2 numerisch kleiner ist als die vorherige Version 10, muss PORTEPOCH erhöht werden, um sicherzustellen, dass das neue Paket auch als neuer erkannt wird. Da es ein neues Release des Drittanbieters ist, wird PORTREVISION auf 0 zurückgesetzt (oder aus dem Makefile entfernt). PORTNAME= gtkmumble PORTVERSION= 0.2 PORTEPOCH= 1 PKGNAME wird zu gtkmumble-0.2,1 Das nächste Release ist 0.3. Da PORTEPOCH niemals verringert wird, sind die Versionsvariablen nun wie folgt: PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1 PKGNAME wird zu gtkmumble-0.3,1 Falls PORTEPOCH mit diesem Upgrade auf 0 zurückgesetzt worden wäre, dann würde jemand, der das Paket gtkmumble-0.10_1 installiert hätte, das Paket gtkmumble-0.3 nicht als neuer erkennen, da 3 immer noch numerisch kleiner ist als 10. Bedenken Sie, dass genau dies der springende Punkt an PORTEPOCH ist. <makevar>PKGNAMEPREFIX</makevar> und <makevar>PKGNAMESUFFIX</makevar> Zwei optionale Variablen, PKGNAMEPREFIX und PKGNAMESUFFIX, werden verknüpft mit PORTNAME und PORTVERSION, um PKGNAME zu bilden als ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} . Stellen Sie bitte unbedingt sicher, dass diese Variablen den Richtlinien für einen guten Paketnamen entsprechen. Insbesondere dürfen Sie keinesfalls einen Bindestrich (-) in PORTVERSION verwenden. Falls das Paket den language- oder -compiled.specifics-Teil aufweist (siehe unten) benutzen Sie PKGNAMEPREFIX oder PKGNAMESUFFIX respektive. Machen Sie diese Variablen nicht zum Bestandteil von PORTNAME! <makevar>LATEST_LINK</makevar> In einigen Fällen können mehrere Versionen einer Applikation gleichzeitig in der Ports-Sammlung sein. Das index build- und das package build-System müssen nun in der Lage sein, diese als unterschiedliche Ports zu erkennen, obwohl diese Versionen alle die gleichen Variablen PORTNAME, PKGNAMEPREFIX und sogar PKGNAMESUFFIX aufweisen. In solchen Fällen sollte die optionale Variable LATEST_LINK auf einen unterschiedlichen Wert für alle Ports gesetzt werden mit Ausnahme des Haupt-Ports. Beispiele hierfür sind die editors/vim5 und editors/vim-Ports und die www/apache*-Familie. Beachten Sie bitte, dass die Frage der Auswahl der wichtigsten Version (am populärsten, am besten Unterstützt, zuletzt gepatcht usw.) ausserhalb der Möglichkeiten dieses Handbuches liegt. Wir sagen Ihnen nur, wie Sie die anderen Ports spezifizieren, nachdem Sie den Haupt-Port erkoren haben. Namensregeln für Pakete Im Folgenden finden Sie die Regeln für die Benennung Ihrer Pakete. Diese sollen gewährleisten, dass das Paketverzeichnis leicht zu durchsuchen ist, da es bereits abertausende Pakete gibt und die Nutzer sich mit Schauder abwenden, wenn Ihre Augen überstrapaziert werden! Der Paketname soll aussehen wie language_region-name-compiled.specifics-version.numbers. Der Paketname ist definiert als ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} . Stellen Sie bitte sicher, dass die Variablen Ihres Ports diesem Format entsprechen. FreeBSD bemüht sich ausserordentlich, die Landessprachen seiner Nutzer zu unterstützen. Die language-Variable soll eine Abkürzung mit 2 Buchstaben sein der Sprachen gemäß ISO-639, falls der Port für eine bestimmte Sprache spezifisch ist. Beispiele hierfür sind ja für Japanisch, ru für Russisch, vi für Vietnamesisch, zh für Chinesisch, ko für Koreanisch und de für Deutsch. Sollte der Port spezifisch sein für eine gewisse Region innerhalb eines Sprachraumes, dann fügen Sie bitte auch den Ländercode mit 2 Buchstaben hinzu. Beispiele sind en_US für nordamerikanisches Englisch und fr_CH für schweizerisches Französisch. Der language-Teil muss in der PKGNAMEPREFIX-Variable gesetzt werden. Der erste Buchstabe des name-Teils muss kleingeschrieben werden (der Rest des Namens kann Großbuchstaben enthalten. Daher seien Sie bitte umsichtig, wenn Sie den Namen einer Software konvertieren, welche Grossbuchstaben enthält). Es ist Tradition, Perl 5-Module durch ein vorstehendes p5- und durch Umwandlung des doppelten Doppelpunktes in Bindestriche zu bezeichnen. So wird z.B. aus dem Data::Dumper-Modul der p5-Data-Dumper-Port. Vergewissern Sie sich, dass der Name des Ports und seine Versionsnummer klar getrennt sind und in den Variablen PORTNAME und PORTVERSION stehen. Der einzige Grund, um in PORTNAME einen Versionsteil aufzunehmen ist der, dass die Software wirklich so bezeichnet wird, wie z.B. die Ports textproc/libxml2 oder japanese/kinput2-freewnn. Ansonsten sollte PORTNAME keine versionsspezifischen Bestandteile aufweisen. Es ist vollkommen normal, dass viele Ports den gleichen PORTNAME aufweisen wie z.B. die www/apache*-Ports. In diesem Falle werden unterschiedliche Versionen (und unterschiedliche Indexeinträge) unterschieden durch die Werte von PKGNAMEPREFIX, PKGNAMESUFFIX und LATEST_LINK. Falls der Port mit verschiedenen, fest kodierten Vorgaben (üblicherweise Teil des Verzeichnisnamens in einer Familie von Ports) gebaut werden kann, dann soll der -compiled.specifics-Teil die einkompilierten Vorgaben anzeigen (der Bindestrich ist optional). Beispiele hierfür sind Papiergrößen und Font-Einheiten. Der -compiled.specifics-Teil muss in der Variablen PKGNAMESUFFIX gesetzt werden. Die Versionszeichenfolge sollte einen Bindestrich (-) am Schluss haben und eine von Punkten getrennte Liste von Integer-Zahlen und kleingeschriebenen Buchstaben sein. Es ist nicht zulässig, einen weiteren Bindestrich innerhalb des Versionsstrings zu verwenden! Die einzige Ausnahme hiervon ist die Zeichenfolge pl (bedeutet patchlevel), welche nur dann gebraucht werden darf, wenn die Applikation über keine Haupt– oder Unterversionsnummern verfügt. Wenn die Versionsbezeichnung der Software Zeichenketten wie alpha, beta, rc oder pre enthält, dann nehmen Sie bitte den ersten Buchstaben daraus und setzen ihn unmittelbar hinter einen Punkt. Falls die Versionszeichenfolge nach diesem Punkt fortgesetzt wird, sollen die Zahlen ohne einen Punkt zwischen den einzelnen Buchstaben folgen. Das Ziel ist es, die Ports anhand der Versionszeichenfolge zu sortieren. Stellen Sie bitte unbedingt sicher, dass die Bestandteile der Versionsnummer immer durch einen Punkt getrennt sind und falls Datumsangaben verwandt werden diese im Format yyyy.mm.dd und nicht dd.mm.yyyy oder gar dem nicht Y2K-kompatiblen Format yy.mm.dd vorliegen. Hier sind einige reale Beispiele, die aufzeigen, wie man den Namen einer Applikation zu einem vernünftigen Paketnamen umwandelt: Softwarename PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION Grund mule-2.2.2 (leer) mule (leer) 2.2.2 Keine Änderung erforderlich EmiClock-1.0.2 (leer) emiclock (leer) 1.0.2 keine Großbuchstaben für einzelne Applikationen rdist-1.3alpha (leer) rdist (leer) 1.3.a Keine Zeichenketten wie alpha erlaubt es-0.9-beta1 (leer) es (leer) 0.9.b1 keine Zeichenketten wie beta erlaubt mailman-2.0rc3 (leer) mailman (leer) 2.0.r3 keine Zeichenketten wie rc erlaubt v3.3beta021.src (leer) tiff (leer) 3.3 Was sollte denn das eigentlich sein? tvtwm (leer) tvtwm (leer) pl11 Versionsstring zwingend erforderlich piewm (leer) piewm (leer) 1.0 Versionsstring zwingend erforderlich xvgr-2.10pl1 (leer) xvgr (leer) 2.10.1 pl nur erlaubt, wenn keine Versionsnummer vorhanden gawk-2.15.6 ja- gawk (leer) 2.15.6 Japanische Sprachversion psutils-1.13 (leer) psutils -letter 1.13 Papergröße beim Paketbau fix kodiert pkfonts (leer) pkfonts 300 1.0 Paket für 300 DPI Schriftarten Falls es in der Originalquelle überhaupt keinen Anhaltspunkt für irgendeine Versionsbezeichnung gibt und es unwahrscheinlich ist, dass der Autor jemals eine neue Version veröffentlichen wird, dann setzen Sie bitte die Version einfach auf 1.0 (wie im obigen Beispiel piewm). Sie können auch den Autor fragen oder eine Datumszeichenfolge (yyyy.mm.dd) als Version verwenden. Kategorisierung <makevar>CATEGORIES</makevar> Wenn ein Paket erzeugt wird, dann wird es unter /usr/ports/packages/All abgelegt und von einem oder mehreren Unterverzeichnissen werden auf /usr/ports/packages Links erstellt. Die Namen dieser Unterverzeichnisse werden durch die Variable CATEGORIES festgelegt. Dies geschieht, um dem Nutzer zu helfen, eine große Zahl von Paketen auf einer FTP-Webseite oder einer CD/DVD zu durchsuchen. Bitte werfen Sie einen Blick auf die Aktuelle Liste der Kategorien und suchen Sie die beste Kategorie für Ihren Port aus. Diese Liste legt auch fest, an welcher Stelle in der Ports-Sammlung der Port eingefügt wird. Falls Sie mehrere Kategorien angeben wird angenommen, dass die Dateien des Ports im Unterverzeichnis mit dem Namen der ersten angegebenen Kategorie liegen. Schauen Sie bitte unten für weitere Informationen darüber, wie man die richtige Kategorie bestimmt. Aktuelle Liste der Kategorien Hier ist die aktuelle Liste der Kategorien. Die mit einem Asterisk (*) bezeichneten sind virtuelle Kategorien, also solche, welche über kein eigenes Unterverzeichnis in der Ports-Sammlung verfügen. Sie werden nur als Sekundärkategorien benutzt und sind nur für Suchzwecke eingerichtet worden. Für nicht-virtuelle Kategorien finden Sie eine einzeilige Beschreibung in der Variable COMMENT im Makefile des jeweiligen Unterverzeichnisses. Kategorie Beschreibung Anmerkung accessibility Ports für behinderte Menschen. afterstep* Ports für den AfterStep Window Manager. arabic Arabische Sprachunterstützung. archivers Archivierungswerkzeuge. astro Ports für Astronomie. audio Sound-Unterstützung. benchmarks Benchmarking-Werkzeuge. biology Software für Biologie. cad CAD-Werkzeuge. chinese Chinesische Sprachunterstützung. comms Kommunikationsprogramme. Hauptsächlich Software für serielle Schnittstellen. converters Zeichensatz-Konverter. databases Datenbanken. deskutils Dinge, die vor der Erfindung des Computers auf dem Schreibtisch waren. devel Entwicklungs-Werkzeuge. Legen Sie keine Bibliotheken hier ab, nur weil es Bibliotheken sind, es sei denn, sie gehören wirklich nirgendwo anders hin. dns DNS-bezogene Software. editors allgemeine Editoren. Spezielle Editoren gehören in Ihre jeweilige Kategorie, (z.B. gehört ein mathematischer Formeleditor in math). elisp* Emacs-lisp-Ports. emulators Emulatoren für andere Betriebssysteme. Terminal-Emulatoren gehören nicht hierher; X-basierende gehören zu x11 und text-basierende zu comms oder misc, abhängig von deren genauer Funktionalität. finance Finanz-Software und ähnliches. french Französische Sprachunterstützung. ftp FTP Client- und Server-Werkzeuge. Falls Ihr Port sowohl FTP als auch HTTP unterstützt, stellen Sie ihn in ftp mit der Zweitkategorie www. games Spiele. geography* geografische Software. german Deutsche Sprachunterstützung. gnome* Ports für GNOME graphics grafische Werkzeuge. gnustep* Software für GNUstep. hamradio* Software für Amateurfunk. haskell* Software für die Haskell-Programmiersprache. hebrew Hebräische Sprachunterstützung. hungarian Ungarische Sprachunterstützung. ipv6* IPv6-bezogene Software. irc Internet Relay Chat (IRC)-Werkzeuge. japanese Japanische Sprachunterstützung. java Software für die Java-Programmiersprache. Die java-Kategorie sollte nicht die Einzige für einen Port sein mit Ausnahme der direkt nur mit der Programmiersprache zusammenhängenden Applikationen. Porter sollten java nicht als Hauptkategorie eines Ports wählen. kde* Ports für das K Desktop Environment (KDE)-Projekt. kld* Kernelmodule. korean Koreanische Sprachunterstützung. lang Programmiersprachen. linux* Linux-Applikationen und -Werkzeuge. lisp* Software für die Lisp-Programmiersprache. mail Mail-Software. math Numerische Berechnungen und andere mathematische Werkzeuge. mbone MBone-Applikationen. misc Verschiedene Werkzeuge. Hauptsächlich Werkzeuge, die nicht anderswo hingehören. Versuchen Sie, falls irgend möglich, eine bessere Kategorie für Ihren Port zu finden als misc, weil Ports hier leicht untergehen. multimedia Multimedia-Software. net Verschiedene Netzwerk-Software. net-im Instant Messaging-Software. net-mgmt Netzwerk-Management-Software. net-p2p Peer to peer-Netzwerkprogramme. news USENET News-Software. palm Software für Palm™. parallel* Applikationen für paralleles Rechnen. pear* Ports für das Pear PHP-Framework. perl5* Ports, welche Perl Version 5 benötigen. plan9* Verschiedene Programme von Plan9. polish Polnische Sprachunterstützung. ports-mgmt Hilfsprogramme für das Installieren und Entwickeln von FreeBSD Ports und Paketen. portuguese Portugiesische Sprachunterstützung. print Drucker-Software. Desktop Veröffentlichungs-Werkzeuge (DTP, Betrachter etc.) gehören auch hierher. python* Software für Python. ruby* Software für Ruby. rubygems* Ports für RubyGems-Pakete. russian Russische Sprachunterstützung. scheme* Software für die Scheme-Programmiersprache. science Wissenschaftliche Programme, die in keine andere Kategorie passen wie z.B. astro, biology und math. security Security-Werkzeuge. shells Shells. spanish* Spanische Sprachunterstützung. sysutils System-Werkzeuge. tcl* Ports, welche Tcl benötigen. tcl80* Ports, welche Tcl 8.0 benötigen. tcl82* Ports, welche Tcl 8.2 benötigen. tcl83* Ports, welche Tcl 8.3 benötigen. tcl84* Ports, welche Tcl 8.4 benötigen. textproc Textverarbeitungsprogramme. Dies beinhaltet nicht DTP-Werkzeuge, diese gehören in print. tk* Ports, welche Tk benötigen. tk80* Ports, welche Tk 8.0 benötigen. tk82* Ports, welche Tk 8.2 benötigen. tk83* Ports, welche Tk 8.3 benötigen. tk84* Ports, welche Tk 8.4 benötigen. tkstep80* Ports, welche TkSTEP 8.0 benötigen. ukrainian Ukrainische Sprachunterstützung. vietnamese Vietnamesische Sprachunterstützung. windowmaker* Ports für den WindowMaker Window-Manager. www Software für das World Wide Web (WWW). HTML-Werkzeuge gehören auch hierher. x11 X-Window-System und dergleichen. Diese Kategorie ist nur für Software, welche direkt X unterstützt. Fügen Sie keine normalen X-Applikationen hinzu. Die meisten davon gehören in eine andere x11-*-Kategorie (siehe unten). Falls Ihr Port eine X-Applikation ist, dann definieren Sie bitte USE_XLIB (impliziert durch USE_IMAKE) und fügen ihn der entsprechenden Kategorie hinzu. x11-clocks X11-Uhren. x11-drivers X11-Treiber. x11-fm X11-Dateimanager. x11-fonts X11-Schriftarten und Werkzeuge. x11-servers X11-Server. x11-themes X11-Themes. x11-toolkits X11-Toolkits. x11-wm X11-Window-Manager. xfce* Ports in Zusammenhang mit Xfce. zope* Zope-Unterstützung. Wählen der richtigen Kategorie Da viele der Kategorien sich überlappen, müssen Sie oft festlegen, welches die primäre Kategorie Ihres Ports ist. Hierzu gibt es einige Regeln, welche diese Auswahl bestimmen. Hier ist die Liste der Regeln mit abnehmender Wichtigkeit: Die erste (primäre) Kategorie muss eine physische (keine virtuelle, siehe oben) sein. Dies ist notwendig damit Pakete erstellt werden können. Die nachfolgenden Kategorien können wahllos virtuelle oder physische Kategorien sein. Sprachspezifische Kategorien kommen immer zuerst. Wenn Ihr Port z.B. Japanische X11-Schriftarten installiert, dann muss Ihre CATEGORIES-Zeile japanese x11-fonts enthalten. Spezifische Kategorien werden vor weniger spezifischen Kategorien aufgelistet. Ein HTML-Editor sollte z.B. als www editors aufgeführt werden und nicht umgekehrt. Genauso sollten Sie keinen Port unter net aufführen, wenn er zu irc, mail, mbone, news, security oder www passt, da net stillschweigend eingeschlossen ist in diesen Kategorien. x11 wird nur als sekundäre Kategorie benutzt, wenn die primäre Kategorie eine sprachspezifische ist. Keinesfalls sollten Sie x11 in die Kategorie-Zeile einer X-Applikation setzen. Emacs modes gehören in die gleiche Kategorie wie die vom jeweiligen mode unterstützte Applikation und nicht in editors. Ein Emacs mode z.B. für das Editieren von Quelltext einer bestimmten Programmiersprache gehört zur Kategorie lang. Für Ports, die vom Benutzer ladbare Kernelmodule installieren, sollte die virtuelle Kategorie kld in die CATEGORIES-Zeile aufgenommen werden. misc sollte nicht zusammen mit irgendeiner anderen nicht-virtuellen Kategorie auftreten. Falls Sie misc mit einer anderen Kategorie in CATEGORIES haben bedeutet dies, dass Sie gefahrlos misc streichen und die andere Kategorie alleine verwenden können! Falls Ihr Port wirklich in keine andere Kategorie passt, verwenden Sie bitte misc. Falls Sie sich über die Kategorie im Unklaren sind, hinterlassen Sie bitte einen Kommentar in Ihrem per &man.send-pr.1; eingereichten Bericht, damit wir diese Frage vor dem Import diskutieren können. Falls Sie ein Committer sind, schicken Sie bitte eine Nachricht an &a.ports;, damit die Frage im Vorhinein erörtert werden kann. Neue Ports werden zu häufig falsch kategorisiert und werden sofort wieder verschoben. Das bläht das Master Source Repository unnötig auf. Eine neue Kategorie vorschlagen Da die Ports-Sammlung über viele Jahre gewachsen ist, wurden viele neue Kategorien hinzugefügt. Neue Kategorien können virtuell (ohne eigenes Unterverzeichnis in der Ports-Sammlung) oder physisch sein. Der nachfolgende Text führt einige Punkte auf, welche bei der Neueinführung einer physischen Kategorie beachtet werden müssen, damit Sie dies bei einem eventuellen Vorschlag Ihrerseits berücksichtigen können. Unsere bestehende Maxime ist die Vermeidung der Neuanlage von physischen Kategorien, solange nicht eine große Zahl von Ports zugeordnet werden können oder falls ihr nicht Ports zugehören würden, welche eine logisch abgegrenzte Gruppe von limitiertem öffentlichem Interesse zugehören würden (zum Beispiel neue Sprachkategorien) oder vorzugsweise beides. Die Erklärung dafür ist, dass eine Neuanlage einer physischen Kategorie einen erheblichen Arbeitsaufwand sowohl für die Committer als auch diejenigen Nutzer bedeutet, welche die Änderungen der Ports-Sammlung nachvollziehen. Zusätzlich verursachen Vorschläge für neue Kategorien oftmals Kontroversen (natürlich deswegen, weil es keinen klaren Konsens darüber gibt, welche Kategorie als zu groß betrachtet werden muss noch ob sich bestimmte Kategorien zur einfachen Suche eignen (und wie viele Kategorien überhaupt ideal wären) und so weiter). Hier ist das Prozedere: Schlagen Sie die neue Kategorie auf &a.ports; vor. Sie sollten eine detaillierte Begründung für die neue Kategorie beifügen einschließlich einer Erklärung, warum Sie meinen, die existierenden Kategorien seien nicht ausreichend. Zeigen Sie außerdem eine Liste der zu verschiebenden Ports (falls neue Ports in GNATS auf ihren commit warten, die in diese Kategorie passen würden. Listen Sie diese bitte auch mit auf). Sind Sie der Maintainer oder Einreicher dieser Ports, erwähnen Sie es bitte. Es verleiht Ihrem Vorschlag mehr Gewicht. Nehmen Sie an der Diskussion teil. Falls es Unterstützung für Ihren Vorschlag geben sollte, reichen Sie bitte einen PR ein, welcher die Begründung und die Liste der betroffenen Ports enthält, die verschoben werden müssen. Idealerweise sollte der PR Patches für Folgendes enthalten: Makefiles für die neuen Ports nach dem Repocopy Makefile für die neue Kategorie Makefile für die alten Kategorien der betroffenen Ports Makefiles für Ports, welche von den alten Ports abhängen Für zusätzliches Ansehen sorgen Sie, wenn Sie die anderen Dateien, die geändert werden müssen, beifügen wie in der Direktive des Committer's Guide beschrieben. Da es die Ports-Infrastruktur beeinflusst und nicht nur die Durchführung von Repocopies und möglicherweise sogar Regressionstests auf dem Build Cluster durchgeführt werden müssen, sollte der PR dem Ports Management Team &a.portmgr; zugeordnet werden. Sobald der PR bestätigt wurde muss ein Committer den Rest der Prozedur durchführen, welche im Committers Guide beschrieben ist. Das Vorschlagen einer neuen virtuellen Kategorie ist ähnlich, aber wesentlich weniger aufwendig, weil keine Ports verschoben werden müssen. In diesem Falle müssen nur die Patches an den PR beigefügt werden, welche die neue Kategorie zur Variable CATEGORIES der betroffenen Ports hinzufügen. Vorschlagen einer Neuorganisation aller Kategorien Von Zeit zu Zeit schlägt jemand eine komplette Neuorganisation aller Ports, entweder mit einer zweistufigen Struktur oder irgendeiner Art von Schlüsselwörtern, vor. Bis heute wurde keiner dieser Vorschläge umgesetzt, weil sie zwar einfach zu machen sind, aber der Aufwand zur Umsetzung und Reorganisation der kompletten Ports-Sammlung schlichtweg mörderisch wäre. Bitte lesen Sie die Geschichte dieser Vorschläge in den Archiven der Mailinglisten nach, bevor Sie diese Ideen nochmals unterbreiten. Zudem sollten Sie gewappnet sein, dass man Sie auffordert, einen arbeitsfähigen Prototyp vorzulegen. Die Distributionsdateien Der zweite Teil des Makefile beschreibt die Dateien, welche heruntergeladen werden müssen, um den Port zu bauen und wo diese Dateien zu finden sind. <makevar>DISTVERSION/DISTNAME</makevar> DISTNAME ist der Name der Applikation wie er von den Autoren vergeben wurde. DISTNAME hat als Vorgabe ${PORTNAME}-${PORTVERSION} also überschreiben Sie diese Vorgabe nur, wenn es notwendig ist. DISTNAME wird nur an zwei Stellen genutzt. Erstens: (DISTFILES) hat als Vorgabe ${DISTNAME}${EXTRACT_SUFX}. Zweitens: Die Distributionsdatei soll in einem Unterverzeichnis namens WRKSRC extrahiert werden, dessen Vorgabe work/${DISTNAME} ist. Manche Drittanbieter-Namen, welche nicht in das Schema ${PORTNAME}-${PORTVERSION} passen, können durch Setzen von DISTVERSION automatisch behandelt werden. PORTVERSION und DISTNAME werden automatisch abgeleitet, können aber natürlich manuell überschrieben werden. Die folgende Tabelle führt einige Beispiele auf: DISTVERSION PORTVERSION 0.7.1d 0.7.1.d 10Alpha3 10.a3 3Beta7-pre2 3.b7.p2 8:f_17 8f.17 PKGNAMEPREFIX und PKGNAMESUFFIX beeinflussen DISTNAME nicht. Beachten Sie bitte auch, dass Sie DISTNAME unverändert lassen sollten, falls WRKSRC denselben Wert hat wie work/${PORTNAME}-${PORTVERSION} und gleichzeitig dass Archiv des originalen Quelltextes anders benannt ist als ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}. Es ist einfacher DISTFILES zu definieren, als DISTNAME und WRKSRC (und möglicherweise EXTRACT_SUFX) zu setzen. <makevar>MASTER_SITES</makevar> Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL, welche auf den originalen Tarball zeigt, in der Variable MASTER_SITES. Bitte vergessen Sie niemals den Schrägstrich (/) am Ende! Die make-Makros werden versuchen, diese Festlegung für die Aufbereitung der Distributionsdateien mittels FETCH zu benutzen, falls sie diese nicht schon auf dem System finden. Es wird empfohlen, mehrere Webseiten in dieser Liste aufzuführen, vorzugsweise auf verschiedenen Kontinenten. Dies ist ein Schutz gegen Probleme bei größeren Ausfällen im Internet. Wir planen sogar Unterstützung einzubauen, die automatisch einen Server in der Nähe zum Herunterladen bestimmt. Die Verfügbarkeit von vielen Webseiten wird dieses Vorhaben beträchtlich erleichtern. Falls der originale Tarball Teil eines populären Archivs ist, wie X-contrib, GNU oder Perl CPAN, können Sie möglicherweise auf diese Seiten in einer einfachen und kompakten Form mittels MASTER_SITE_* (d.h., MASTER_SITE_XCONTRIB, MASTER_SITE_GNU und MASTER_SITE_PERL_CPAN) referenzieren. Setzen Sie einfach MASTER_SITES auf eine dieser Variablen und MASTER_SITE_SUBDIR auf den Pfad innerhalb des Archivs. Hier ist ein Beispiel: MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications Diese Variablen werden in /usr/ports/Mk/bsd.sites.mk definiert. Es werden ständig neue Einträge hinzugefügt, daher stellen Sie bitte unbedingt sicher, dass Sie die neueste Version verwenden, bevor Sie einen Port einschicken. Der Nutzer kann ebenfalls die Variable MASTER_SITE_* in der /etc/make.conf setzen. Dadurch werden unsere Vorgaben überschrieben und stattdessen werden die Spiegel-Server seiner Wahl für die populären Archive genutzt. <makevar>EXTRACT_SUFX</makevar> Falls Sie eine Distributionsdatei haben, die ein eigentümliches Suffix nutzt, um die Art der Kompression anzuzeigen, dann setzen Sie EXTRACT_SUFX. Ist die Distributionsdatei zum Beispiel im Stil von foo.tgz anstatt des normalen foo.tar.gz benannt, würden Sie schreiben: DISTNAME= foo EXTRACT_SUFX= .tgz Falls erforderlich, setzen die Variablen USE_BZIP2 und USE_ZIP automatisch EXTRACT_SUFX auf .tar.bz2 oder .zip. Falls keine der beiden gesetzt ist, dann verwendet EXTRACT_SUFX die Vorgabe .tar.gz. Sie müssen niemals beide Variablen EXTRACT_SUFX und DISTFILES setzen. <makevar>DISTFILES</makevar> Manchmal haben die zu ladenden Dateien keinerlei Ähnlichkeit mit dem Namen des Ports. Es könnte z.B. source.tar.gz oder ähnlich heißen. In anderen Fällen könnte der Quelltext in mehreren Archiven sein und alle müssen heruntergeladen werden. Falls dies der Fall ist, setzen Sie DISTFILES als eine durch Leerzeichen getrennte Liste aller Dateien, die geladen werden müssen. DISTFILES= source1.tar.gz source2.tar.gz Wenn nicht ausdrücklich gesetzt, verwendet DISTFILES als Vorgabe ${DISTNAME}${EXTRACT_SUFX}. <makevar>EXTRACT_ONLY</makevar> Falls nur einige der DISTFILES extrahiert werden müssen (z.B. eine Datei ist der Quelltext und eine andere ist ein unkomprimiertes Dokument), dann listen Sie die zu extrahierenden Dateien in EXTRACT_ONLY auf. DISTFILES= source.tar.gz manual.html EXTRACT_ONLY= source.tar.gz Falls keine der DISTFILES unkomprimiert sein sollte, dann setzen Sie EXTRACT_ONLY auf einen leeren String. EXTRACT_ONLY= <makevar>PATCHFILES</makevar> Falls Ihr Port zusätzliche Patches benötigt, welche per FTP oder HTTP verfügbar sind, dann setzen Sie PATCHFILES auf den Namen der Dateien und PATCH_SITES auf die URL des Verzeichnisses, das diese Patches enthält (das Format ist das gleiche wie MASTER_SITES). Falls ein Patch wegen einiger zusätzlicher Pfadnamen nicht relativ zum Anfang des Quelltextbaumes (d.h., WRKSRC) liegt, dann setzen Sie bitte PATCH_DIST_STRIP entsprechend. Wenn z.B. alle Pfadnamen in diesem Patch ein zusätzliches foozolix-1.0/ vor ihren Dateinamen aufweisen, dann setzen Sie bitte PATCH_DIST_STRIP=-p1. Kümmern Sie sich nicht darum, ob die Patches komprimiert sind. Sie werden automatisch dekomprimiert, wenn die Dateinamen auf .gz oder .Z enden. Falls der Patch zusammen mit anderen Dateien in einem gezippten Tarball verteilt wird (z.B. mit Dokumentation), dann können Sie nicht PATCHFILES verwenden. In diesem Fall fügen Sie den Namen und den Ort dieses Tarballs zu DISTFILES und MASTER_SITES. Benutzen Sie dann die EXTRA_PATCHES-Variable, um auf diese Dateien zu zeigen und bsd.port.mk wird automatisch diese Dateien nutzen. Kopieren Sie niemals Patch-Dateien in das PATCHDIR-Verzeichnis, weil es möglicherweise nicht beschreibbar ist. Der Tarball wird zusammen mit dem anderen Quelltext extrahiert werden. Eine ausdrückliche Dekomprimierung eines mit gzip oder compress erzeugten Tarball ist nicht notwendig. Sollten Sie dies dennoch vorgeben, so beachten Sie bitte peinlich genau, dass Sie nichts überschreiben, was bereits im Verzeichnis vorhanden ist. Vergessen Sie auch nicht den kopierten Patch im Target von pre-clean zu entfernen. Verschiedene Distributionsdateien oder Patches von verschiedenen Seiten und Verzeichnissen (<literal>MASTER_SITES:n</literal>) (Betrachten Sie es als in irgendeiner Form fortgeschrittenes Thema. Neulinge sollten möglicherweise diesen Abschnitt beim ersten Lesen überspringen). Dieser Abschnitt stellt Informationen über die Mechanismen zum Herunterladen von Dateien zur Verfügung und behandelt die Variablen MASTER_SITES:n und MASTER_SITES_NN. Wir beziehen uns im weiteren Text auf diese Variablen als MASTER_SITES:n. Etwas Hintergrundinformation zu Beginn: OpenBSD verfügt über eine sehr elegante Option innerhalb der Variablen DISTFILES und PATCHFILES. Sowohl Dateien als auch Patches können mit angehängten :n-Bezeichnern versehen werden wobei n in beiden Fällen [0-9] sein kann und eine Gruppenzugehörigkeit anzeigt. Ein Beispiel hierfür ist: DISTFILES= alpha:0 beta:1 In OpenBSD wird die Datei alpha mit der Variable MASTER_SITES0 verknüpft anstatt dem in FreeBSD gebräuchlichen MASTER_SITES und beta mit MASTER_SITES1. Das ist eine sehr interessante Möglichkeit, die endlose Suche nach der richtigen Download-Seite zu verkürzen. Stellen Sie sich zwei Dateien in DISTFILES und 20 Webseiten in der Variable MASTER_SITES vor. Alle Seiten sind erschreckend langsam, beta findet sich auf allen Seiten in MASTER_SITES und alpha kann nur auf der zwanzigsten Seite gefunden werden. Wäre es nicht reine Verschwendung, wenn der Maintainer alle Seiten zuvor überprüfen müsste? Kein guter Start für das wundervolle Wochenende! Übertragen Sie diesen Umstand auf noch mehr DISTFILES und mehr MASTER_SITES. Ganz sicher würde unser distfiles survey master die Erleichterung sehr zu schätzen wissen, die eine solche Verringerung der Netzwerkbelastung bringen würde. In den nächsten Abschnitten sehen Sie die Implementierung dieser Idee durch FreeBSD. Dabei wurde das Konzept von OpenBSD ein wenig verbessert. Prinzipielle Information Dieser Abschnitt informiert Sie, wie Sie schnell ein fein granuliertes Herunterladen von vielen Dateien und Fehlerbereinigungen von verschiedenen Webseiten und Unterverzeichnissen bewerkstelligen. Wir beschreiben hier den Fall der vereinfachten Nutzung von MASTER_SITES:n. Das ist für die meisten Szenarien ausreichend. Falls Sie weitere Informationen benötigen, sollten Sie den nächsten Abschnitt lesen. Einige Programme bestehen aus mehreren Dateien, welche von verschiedenen Webseiten heruntergeladen werden müssen. Zum Beispiel besteht Ghostscript aus dem Kern des Programms und einer großen Zahl von Treiberdateien, die vom Drucker des Benutzers abhängen. Einige dieser Treiberdateien werden mit der Kernapplikation mitgeliefert aber viele müssen von verschiedenen Webseiten heruntergeladen werden. Um das zu unterstützen, muss jeder Eintrag in DISTFILES mit einem Komma und einem tag name abgeschlossen werden. Jeder in MASTER_SITES aufgeführte Webseite folgt ein Komma und eine Marke (tag), die anzeigt, welche Datei von dieser Webseite heruntergeladen werden kann. Stellen Sie sich bitte eine Applikation vor, deren Quelltext in zwei Teile aufgeteilt ist, source1.tar.gz und source2.tar.gz, welche von zwei verschiedenen Webseiten heruntergeladen werden müssen. Das Makefile des Port würde Zeilen enthalten wie in . Vereinfachtes Beispiel für den Gebrauch von <literal>MASTER_SITES:n</literal> mit einer Datei pro Webseite MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2 Verschiedene Dateien können die gleiche Marke aufweisen. Ausgehend vom vorherigen Beispiel nehmen wir an, dass es noch eine dritte Datei gibt (source3.tar.gz), welche von ftp.example2.com heruntergeladen werden soll. Das Makefile würde dann aussehen wie . Vereinfachtes Beispiel für den Gebrauch von <literal>MASTER_SITES:n</literal> mit mehr als einer Datei pro Webseite MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2 \ source3.tar.gz:source2 Ausführliche Information In Ordnung, das vorherige Beispiel reicht nicht für Ihre Bedürfnisse? In diesem Abschnitt werden wir im Detail erklären, wie der fein granulierte Mechanismus zum Herunterladen (MASTER_SITES:n) funktioniert und wie Sie Ihre Ports modifizieren, um ihn zu nutzen. Elemente können nachstehend bezeichnet werden mit :n wobei n in diesem Falle [^:,]+ ist. Das heißt n könnte theoretisch jede alphanumerische Zeichenkette sein, aber wir beschränken sie auf [a-zA-Z_][0-9a-zA-Z_]+ für diesen Moment. Zudem ist die Zeichenkette case sensitive; d.h. n unterscheidet sich von N. Allerdings dürfen die folgenden Wörter nicht gebraucht werden, da sie spezielle Bedeutungen haben: default, all und ALL (diese Wörter werden intern genutzt in Punkt ). Ausserdem ist DEFAULT ein reserviertes Wort (beachten Sie ). Elemente mit angehängtem :n gehören zur Gruppe n, :m gehört zur Gruppe m und so weiter. Elemente ohne Anhängsel sind gruppenlos, d.h. sie gehören alle zu der speziellen Gruppe DEFAULT. Falls sie an irgendeinem Element DEFAULT hängen, ist dies überflüssig, es sei denn Sie wollen, dass ein Element sowohl zu DEFAULT als auch anderen Gruppen gleichzeitig gehört (beachten Sie ). Die folgenden Beispiele sind gleichwertig, aber das erste Beispiel ist vorzuziehen: MASTER_SITES= alpha MASTER_SITES= alpha:DEFAULT Gruppen sind nicht ausschliessend, d.h. ein Element kann mehreren Gruppen gleichzeitig angehören und eine Gruppe wiederum kann entweder mehrere Elemente oder überhaupt keine aufweisen. Wiederholte Elemente sind schlicht nur wiederholte Elemente. Wenn Sie wollen, dass ein Element gleichzeitig zu mehreren Gruppen gehört, dann können Sie diese durch ein Komma (,) trennen. Anstatt jedes Mal ein anderes Anhängsel zu verwenden und Wiederholungen aufzuführen, können Sie mehrere Gruppen auf einmal in einem einzigen Anhängsel bestimmen. Zum Beispiel markiert :m,n,o ein Element, welches zu den Gruppen m, n und o gehört. Alle folgenden Beispiele sind gleichwertig, aber das erste Beispiel ist vorzuziehen: MASTER_SITES= alpha alpha:SOME_SITE MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE MASTER_SITES= alpha:SOME_SITE,DEFAULT MASTER_SITES= alpha:DEFAULT,SOME_SITE Alle Webseiten in einer Gruppe werden gemäß MASTER_SORT_AWK sortiert. Alle Gruppen innerhalb von MASTER_SITES und PATCH_SITES werden genauso sortiert. Gruppensemantik kann benutzt werden in den folgenden Variablen: MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR, PATCH_SITE_SUBDIR, DISTFILES und PATCHFILES entsprechend der folgenden Syntax: Elemente mit MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR und PATCH_SITE_SUBDIR müssen mit einem Schrägstrich beendet werden ( /). Falls Elemente zu irgendwelchen Gruppen gehören, muss :n direkt nach dem Trenner / stehen. Der MASTER_SITES:n-Mechanismus verlässt sich auf das Vorhandensein des Trennzeichens /, um verwirrende Elemente zu vermeiden in denen :n ein zulässiger Bestandteil des Elementes ist und das Auftreten von :n die Gruppe n anzeigt. Aus Kompatibilitätsgründen (da der /-Trenner sowohl in MASTER_SITE_SUBDIR als auch PATCH_SITE_SUBDIR-Elementen nicht erforderlich ist) wird, falls das auf das Anhängsel folgende nächste Zeichen kein / ist, auch :n als gültiger Teil des Elementes behandelt anstatt als Gruppenzusatz, selbst wenn ein Element ein angehängtes :n aufweist. Beachten Sie sowohl als auch . Ausführliches Beispiel von <literal>MASTER_SITES:n</literal> in <makevar>MASTER_SITE_SUBDIR</makevar> MASTER_SITE_SUBDIR= old:n new/:NEW Verzeichnisse innerhalb der Gruppe DEFAULT -> old:n Verzeichnisse innerhalb der Gruppe NEW -> new Ausführliches Beispiel von <literal>MASTER_SITES:n</literal> mit Komma-Operator, mehreren Dateien, mehreren Webseiten und mehreren Unterverzeichnissen MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \ http://site3/:group3 http://site4/:group4 \ http://site5/:group5 http://site6/:group6 \ http://site7/:DEFAULT,group6 \ http://site8/%SUBDIR%/:group6,group7 \ http://site9/:group8 DISTFILES= file1 file2:DEFAULT file3:group3 \ file4:group4,group5,group6 file5:grouping \ file6:group7 MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \ directory-one/:group6,DEFAULT \ directory Das vorstehende Beispiel führt zu einem fein granulierten Herunterladen. Die Webseiten werden in der exakten Reihenfolge ihrer Nutzung aufgelistet. file1 wird heruntergeladen von MASTER_SITE_OVERRIDE http://site1/directory-trial:1/ http://site1/directory-one/ http://site1/directory/ http://site2/ http://site7/ MASTER_SITE_BACKUP file2 wird genauso heruntergeladen wie file1, da sie zur gleichen Gruppe gehören MASTER_SITE_OVERRIDE http://site1/directory-trial:1/ http://site1/directory-one/ http://site1/directory/ http://site2/ http://site7/ MASTER_SITE_BACKUP file3 wird heruntergeladen von MASTER_SITE_OVERRIDE http://site3/ MASTER_SITE_BACKUP file4 wird heruntergeladen von MASTER_SITE_OVERRIDE http://site4/ http://site5/ http://site6/ http://site7/ http://site8/directory-one/ MASTER_SITE_BACKUP file5 wird heruntergeladen von MASTER_SITE_OVERRIDE MASTER_SITE_BACKUP file6 wird heruntergeladen von MASTER_SITE_OVERRIDE http://site8/ MASTER_SITE_BACKUP Wie gruppiere ich eine der speziellen Variablen aus bsd.sites.mk, d.h. MASTER_SITE_SOURCEFORGE? Lesen Sie . Ausführliches Beispiel von <literal>MASTER_SITES:n</literal> mit <makevar>MASTER_SITE_SOURCEFORGE</makevar> MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/} DISTFILES= something.tar.gz:sourceforge something.tar.gz wird von allen Webseiten innerhalb von MASTER_SITE_SOURCEFORGE heruntergeladen. Wie nutze ich dies mit PATCH*-Variablen. In allen Beispielen wurden MASTER*-Variablen genutzt, aber sie funktionieren exakt genauso mit PATCH*-Variablen, wie Sie an . sehen können. Vereinfachte Nutzung von <literal>MASTER_SITES:n</literal> mit <makevar>PATCH_SITES</makevar>. PATCH_SITES= http://site1/ http://site2/:test PATCHFILES= patch1:test Was ändert sich für die Ports? Was ändert sich nicht? Alle bestehenden Ports bleiben gleich. Der Code für MASTER_SITES:n wird nur aktiviert, falls es Elemente mit angehängtem :n entsprechend den zuvor erwähnten Syntax-Regeln wie in gezeigt gibt. Das Target des Port bleibt gleich: checksum, makesum, patch, configure, build etc. Mit der offensichtlichen Ausnahme von do-fetch, fetch-list, master-sites und patch-sites. do-fetch: nutzt die neue Gruppierung DISTFILES und PATCHFILES mit ihren darauf zutreffenden Gruppenelementen in MASTER_SITES und PATCH_SITES welche zutreffende Gruppenelemente sowohl in MASTER_SITE_SUBDIR als auch PATCH_SITE_SUBDIR aufweisen. Sehen Sie hierzu . fetch-list: arbeitet wie das alte fetch-list mit der Ausnahme, dass es nur wie do-fetch gruppiert. master-sites und patch-sites: (inkompatibel zu älteren Versionen) geben nur die Elemente der Gruppe DEFAULT zurück. Beziehungsweise sie führen genau genommen die Targets von master-sites-default und patch-sites-default aus. Weiterhin ist der Gebrauch des Target entweder von master-sites-all oder patch-sites-all der direkten Überprüfung von MASTER_SITES oder PATCH_SITES vorzuziehen. Zudem ist nicht garantiert, dass das direkte Überprüfen in zukünftigen Versionen funktionieren wird. Sehen Sie für weitere Informationen zu diesen neuen Port-Targets. Neue Port-Targets Es gibt master-sites-n und patch-sites-n-Targets, welche die Elemente der jeweiligen Gruppe n innerhalb von MASTER_SITES und PATCH_SITES auflisten. Beispielweise werden sowohl master-sites-DEFAULT als auch patch-sites-DEFAULT die Elemente der Gruppe DEFAULT, master-sites-test und patch-sites-test der Gruppe test usw. zurückgeben. Es gibt das neue Target master-sites-all und patch-sites-all, welche die Arbeit der alten Targets master-sites und patch-sites übernehmen. Sie geben die Elemente aller Gruppen zurück,als würden sie zur gleichen Gruppe gehören - mit dem Vorbehalt, dass sie so viele MASTER_SITE_BACKUP und MASTER_SITE_OVERRIDE auflisten wie Gruppen mittels DISTFILES oder PATCHFILES definiert sind. Das gleiche gilt entsprechend für master-sites-all und patch-sites-all. <makevar>DIST_SUBDIR</makevar> Verhindern Sie, dass Ihr Port das Verzeichnis /usr/ports/distfiles in Unordnung bringt. Falls Ihr Port eine ganze Reihe von Dateien herunterladen muss oder eine Datei enthält, die einen Namen hat, der möglicherweise mit anderen Ports in Konflikt stehen könnte (d.h.Makefile), dann setzen Sie die Variable DIST_SUBDIR auf den Namen des Ports (${PORTNAME} oder ${PKGNAMEPREFIX}${PORTNAME} sollte hervorragend funktionieren). Dies wird DISTDIR von der Vorgabe /usr/ports/distfiles auf /usr/ports/distfiles/DIST_SUBDIR ändern und stellt tatsächlich alle für Ihren Port benötigten Dateien in dieses Unterverzeichnis. Es wird zusätzlich nach dem Unterverzeichnis mit dem gleichen Namen auf der Sicherung der Hauptseite auf ftp.FreeBSD.org suchen (das ausdrückliche Setzen von DISTDIR in Ihrem Makefile wird dies nicht gewährleisten, also nutzen Sie bitte DIST_SUBDIR). Dies hat keine Auswirkungen auf die Variable MASTER_SITES, die Sie in Ihrem Makefile definieren. <makevar>ALWAYS_KEEP_DISTFILES</makevar> Falls Ihr Port binäre Distfiles benutzt und eine Lizenz aufweist, die verlangt, dass das der Quelltext in Form binärer Pakete verteilt werden muss, z.B. GPL, dann wird ALWAYS_KEEP_DISTFILES den &os; Build Cluster anweisen eine Kopie der Dateien in DISTFILES vorzuhalten. Nutzer dieser Ports benötigen generell diese Dateien nicht, daher ist es ein gutes Konzept, nur dann die Distfiles zu DISTFILES hinzuzufügen, wenn PACKAGE_BUILDING definiert ist. Nutzung von <makevar>ALWAYS_KEEP_DISTFILES</makevar>. .if defined(PACKAGE_BUILDING) DISTFILES+= foo.tar.gz ALWAYS_KEEP_DISTFILES= yes .endif Wenn Sie zusätzliche Dateien zu DISTFILES hinzufügen, dann beachten Sie bitte, dass Sie diese auch in distinfo aufführen. Zudem werden die zusätzlichen Dateien normalerweise ebenso in WRKDIR extrahiert, was für einige Ports zu unbeabsichtigten Seiteneffekten führen mag und spezielle Behandlung erfordert. <makevar>MAINTAINER</makevar> Fügen Sie hier Ihre E-Mailadresse ein. Bitte. :-) Beachten Sie bitte, dass nur eine einzelne E-Mailadresse ohne Kommentar in der Variable MAINTAINER zulässig ist. Das Format sollte user@hostname.domain sein. Bitte fügen Sie keinen beschreibenden Text wie z.B. Ihren wirklichen Namen ein, dies verwirrt lediglich bsd.port.mk. Der Maintainer ist dafür verantwortlich, dass der Port aktuell gehalten wird und er sorgt dafür, dass der Port korrekt arbeitet. Für eine detaillierte Beschreibung der Verantwortlichkeiten eines Maintainers beachten Sie bitte den Abschnitt Die Herausforderung für einen Port-Maintainer. Änderungen am Port werden dem Maintainer zur Begutachtung und Zustimmung vorgelegt, bevor sie committed werden. Falls der Maintainer einem Aktualisierungs-Wunsch nicht binnen 2 Wochen (ausgenommen wichtige öffentliche Feiertage) zustimmt, dann wird dies als Maintainer-Timeout betrachtet und eine Aktualisierung kann ohne ausdrückliche Zustimmung des Maintainers erfolgen. Falls der Maintainer nicht binnen 3 Monaten zustimmt, wird er als abwesend ohne Grund betrachtet und kann als Maintainer des fraglichen Ports durch eine andere Person ersetzt werden. Ausgenommen davon ist alles, was durch das &a.portmgr; oder das &a.security-officer; betreut wird. Es dürfen niemals committs ohne vorherige Zustimmung an solchen Ports vorgenommen werden! Wir behalten uns das Recht vor, die Einreichungen eines Maintainers ohne ausdrückliche Zustimmung zu ändern, falls wir der Auffassung sind, dass dadurch die Einhaltung von Richtlinien und stilistischen Vorgaben für die Ports-Sammlung besser erfüllt wird. Zudem können größere Änderungen an der Infrastruktur der Ports zu Änderungen an einem bestimmten Port ohne Zustimmung des Maintainers führen. Diese Änderungen beeinflussen niemals die Funktionalität eines Ports. Das &a.portmgr; behält sich das Recht vor, die Maintainerschaft jedem aus irgendeinem Grund zu entziehen oder ausser Kraft zu setzen, und das Security Officer Team &a.security-officer; behält sich das Recht vor, jede Maintainerschaft aus Sicherheitsgründen aufzuheben oder ausser Kraft zu setzen. <makevar>COMMENT</makevar> Dies ist eine einzeilige Beschreibung des Ports. Bitte fügen Sie nicht den Paketnamen (oder die Version der Software) in den Kommentar ein. Der Kommentar soll mit einem Großbuchstaben beginnen und mit einem Punkt enden. Hier ist ein Beispiel: COMMENT= A cat chasing a mouse all over the screen Die COMMENT-Variable soll unmittelbar nach der MAINTAINER-Variable im Makefile stehen. Bitte versuchen Sie die COMMENT-Zeile auf weniger als 70 Zeichen zu begrenzen, da sie den Nutzern als einzeilige Zusammenfassung des Ports angezeigt wird. Abhängigkeiten (dependencies) Viele Ports hängen von anderen Ports ab. Es gibt sieben Variablen, welche Sie benutzen können, um sicherzustellen, dass alle benötigten Teile auf dem Rechner des Nutzers sind. Zusätzlich gibt es einige vordefinierte Variablen für Abhängigkeiten in häufigen Fällen und einige, welche das Verhalten der Abhängigkeiten bestimmen. <makevar>LIB_DEPENDS</makevar> Diese Variable spezifiziert die Shared-Libraries, von denen der Port abhängt. Es ist eine Liste von lib:dir:target-Tupeln wobei lib den Name der gemeinsam genutzten Bibliothek, dir das Verzeichnis, in welchem sie zu finden ist, falls nicht verfügbar, und target das Target in diesem Verzeichnis angeben. Zum Beispiel wird LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg auf eine jpeg-Bibliothek mit der Hauptversionsnummer 9 prüfen, in das graphics/jpeg-Unterverzeichnis Ihrer Ports-Sammlung wechseln, es bauen und installieren, falls es nicht gefunden wird. Der target-Teil kann weggelassen werden, falls er identisch mit DEPENDS_TARGET ist (Vorgabe hierfür ist install). Der lib-Teil ist ein regulärer Ausdruck, welcher die Ausgabe von ldconfig -r ausgewertet. Werte wie intl.[5-7] und intl sind zulässig. Das erste Muster, intl.[5-7], stimmt überein mit: intl.5, intl.6 oder intl.7. Das zweite Muster, intl, stimmt überein mit jeder Version der intl-Bibliothek. Die Abhängigkeit wird zwei Mal überprüft, einmal innerhalb des extract-Target und dann innerhalb des install-Target. Zudem wird der Name der Abhängigkeit in das Paket eingefügt, damit &man.pkg.add.1; es automatisch installiert, falls es nicht auf dem Rechner des Nutzers ist. <makevar>RUN_DEPENDS</makevar> Diese Variable legt Binärdateien oder Dateien, von denen der Port abhängt, für die Laufzeit fest. Es ist eine Liste von path:dir:target-Tupeln, wobei path der Name der Binärdatei oder Datei, dir das Verzeichnis, in welchem sie gefunden werden kann, falls nicht vorhanden, und target das Target in diesem Verzeichnis angeben. Falls path mit einem Slash (/) beginnt, wird es als Datei behandelt und deren Vorhandensein wird mit test -e; überprüft. Andernfalls wird angenommen, dass es eine Binärdatei ist und which -s wird benutzt, um zu überprüfen, ob das Programm im Pfad vorhanden ist. Zum Beispiel wird RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ wish8.0:${PORTSDIR}/x11-toolkits/tk80 überprüfen, ob die Datei oder das Verzeichnis /usr/local/etc/innd existiert und es erstellen und installieren aus dem news/inn-Unterverzeichnis der Ports-Sammlung, falls es nicht gefunden wird. Es wird zudem überprüft, ob die Binärdatei namens wish8.0 im Suchpfad vorhanden ist und danach zum Unterverzeichnis x11-toolkits/tk80 in Ihrer Ports-Sammlung wechseln, es bauen und installieren, falls es nicht gefunden wird. In diesem Fall ist innd eine Binärdatei. Falls sich eine Binärdatei an einem ungewöhnlichen Platz befindet, der nicht im Suchpfad ist, dann sollten Sie die volle Pfadangabe verwenden. Der offizielle Suchpfad PATH, welcher im Ports Cluster benutzt wird, ist /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin Die Abhängigkeit wird innerhalb des install-Target überprüft. Zudem wird der Name der Abhängigkeit in das Paket übernommen, damit &man.pkg.add.1; es automatisch installieren wird, falls es auf dem System des Nutzers nicht vorhanden ist. Der target-Teil kann weggelassen werden, wenn er der gleiche ist wie in der Variable DEPENDS_TARGET. <makevar>BUILD_DEPENDS</makevar> Diese Variable legt Binärdateien oder Dateien fest, die dieser Port zur Erstellung benötigt. Wie RUN_DEPENDS ist es eine Liste von path:dir:target-Tupeln. Zum Beispiel wird BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip überprüfen, ob eine Binärdatei unzip vorhanden ist und in das Unterverzeichnis archivers/unzip Ihrer Ports-Sammlung wechseln und sie erstellen und installieren, falls sie nicht gefunden wird. Erstellen bedeutet hier alles von der Extraktion bis zur Kompilierung. Die Abhängigkeit wird im extract-Target überprüft. Der target-Teil kann weggelassen werden, falls er identisch mit der Variable DEPENDS_TARGET ist. <makevar>FETCH_DEPENDS</makevar> Diese Variable legt eine Binärdatei oder Datei fest, welche der Port benötigt, um heruntergeladen werden zu können. Wie die vorherigen beiden Variablen ist er eine Liste von path:dir:target-Tupeln. Zum Beispiel wird FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 überprüfen, ob eine Binärdatei namens ncftp2 vorhanden ist, in das Unterverzeichnis net/ncftp2 Ihrer Ports-Sammlung wechseln, sie erstellen und installieren, falls sie nicht gefunden wird. Die Abhängigkeit wird innerhalb des fetch-Target überprüft. Der target-Teil kann weggelassen werden, falls er identisch mit der Variable DEPENDS_TARGET ist. <makevar>EXTRACT_DEPENDS</makevar> Diese Variable spezifiziert eine Binärdatei oder eine Datei, welche dieser Port für die Extraktion benötigt. Wie die vorherigen Variablen ist er eine Liste von path:dir:target-Tupeln. Zum Beispiel wird EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip überprüfen, ob eine Binärdatei namens unzip vorhanden ist, in das Unterverzeichnis archivers/unzip Ihrer Ports-Sammlung wechseln, sie erstellen und installieren, falls sie nicht gefunden wird. Die Abhängigkeit wird innerhalb des extract-Target überprüft. Der target-Teil kann weggelassen werden, falls er identisch mit der Variable DEPENDS_TARGET ist. Nutzen Sie diese Variable nur, wenn die Extraktion nicht funktioniert (die Vorgabe nimmt gzip an) und nicht mit USE_ZIP oder USE_BZIP2 wie in beschrieben zum Laufen gebracht werden kann. <makevar>PATCH_DEPENDS</makevar> Diese Variable legt eine Binärdatei oder eine Datei fest, welche dieser Port zum Patchen benötigt. Wie die vorhergehenden Variablen ist diese eine Liste von path:dir:target-Tupeln. Zum Beispiel wird PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract in das Unterverzeichnis java/jfc Ihrer Ports-Sammlung wechseln, um es zu entpacken. Die Abhängigkeit wird innerhalb des patch-Target überprüft. Der target-Teil kann entfallen, falls er identisch mit der Variable DEPENDS_TARGET ist. <makevar>USE_<replaceable>*</replaceable></makevar> Es gibt eine Reihe von Variablen, um gebräuchliche Abhängigkeiten einzukapseln, die viele Ports aufweisen. Obwohl Ihre Verwendung optional ist, können sie helfen die Übersichtlichkeit des Makefile eines Ports zu erhöhen. Jede von ihnen ist im Stil von USE_*. Der Gebrauch dieser Variablen ist beschränkt auf das Makefile eines Ports und ports/Mk/bsd.*.mk. Es ist nicht entworfen worden, um durch den Nutzer setzbare Optionen einzukapseln; benutzen Sie WITH_* und WITHOUT_* für diese Zwecke. Es ist immer falsch, irgendeine USE_*-Variable in der /etc/make.conf zu setzen. Zum Beispiel würde das Setzen von USE_GCC=3.2 eine Abhängigkeit für GCC32 für jeden Port einschliesslich GCC32 selbst hinzufügen! Die <makevar>USE_<replaceable>*</replaceable></makevar>-Varibalen Variable Bedeutung USE_BZIP2 Der Tarball dieses Ports wird mit bzip2 komprimiert. USE_ZIP Der Tarball des Ports wird mit zip komprimiert. USE_BISON Der Port benutzt bison für die Erstellung. USE_CDRTOOLS Der Port erfordert cdrecord entweder von sysutils/cdrtools oder sysutils/cdrtools-cjk, abhängig davon, was der Nutzer vorgibt. USE_GCC Dieser Port benötigt eine bestimmte Version von gcc zur Erstellung. Die genaue Version kann festgelegt werden mit Werten wie 3.2. Mit 3.2+ kann die mindestens erforderliche Version spezifiziert werden. Der gcc aus dem Basissystem wird genutzt, wenn er die erforderliche Version erfüllt, andernfalls wird eine geeignete Version des gcc aus den Ports kompiliert und die Variablen CC und CXX werden angepasst.
Variablen zugehörig zu gmake und dem configure-Skript werden in beschrieben, währenddessen autoconf, automake und libtool in beschrieben sind. Perl-spezifische Variablen werden in behandelt. X11-Variablen sind aufgelistet in . behandelt GNOME-bezogene Variablen und KDE-bezogene Variablen. dokumentiert Java-Variablen, während Informationen zu Apache, PHP und PEAR-Modulen enthält. Python wird in und Ruby in erörtert. stellt Variablen für SDL-Programme zur Verfügung und enthält schliesslich Variablen für Xfce.
Minimale Version einer Abhängigkeit Eine minimale Version einer Abhängigkeit kann in jeder *_DEPENDS-Variable festgelegt werden mit Ausnahme von LIB_DEPENDS durch Anwendung folgender Syntax: p5-Spiffy>=0.26:${PORTSDIR}/devel/p5-Spiffy Das erste Feld enthält einen abhängigen Paketnamen, welcher einem Eintrag in der Paketdatenbank entsprechen muss und einen Vergleich mit einer Paketversion. Die Abhängigkeit wird erfüllt, wenn p5-Spiffy-0.26 oder eine neuere Version auf dem System installiert ist. Anmerkungen zu Abhängigkeiten Wie vorstehend beschrieben ist das Vorgabe-Target DEPENDS_TARGET, wenn eine Abhängigkeit benötigt wird. Die Vorgabe hierfür ist install. Dies ist eine Nutzer-Variable; sie wird niemals im Makefile eines Ports definiert. Falls Ihr Port einen besonderen Weg benötigt, um mit einer Abhängigkeit umzugehen, dann benutzen Sie bitte den :target-Teil der *_DEPENDS-Variablen, anstatt DEPENDS_TARGET zu ändern. Falls Sie make clean schreiben, werden dessen Abhängigkeiten auch gesäubert. Falls Sie dies nicht wollen, definieren Sie die Variable NOCLEANDEPENDS in Ihrer Umgebung. Dies kann besonders erstrebenswert sein, wenn der Port etwas in seiner Liste von Abhängigkeiten hat, das sehr viel Zeit für einen rebuild benötigt wie KDE, GNOME oder Mozilla. Um von einem anderen Port bedingungslos abhängig zu sein, benutzen Sie bitte die Variable ${NONEXISTENT} als erstes Feld von BUILD_DEPENDS oder RUN_DEPENDS. Benutzen Sie dies nur, wenn Sie den Quelltext eines anderen Port benötigen. Sie können auch oft Kompilierzeit sparen, wenn Sie das Target festlegen. Zum Beispiel wird BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract immer zum jpeg-Port wechseln und ihn extrahieren. Zirkuläre Abhängigkeiten sind fatal Führen Sie niemals irgendwelche zirkulären Abhängigkeiten in der Ports-Sammlung ein! Die Struktur für die Erstellung von Ports dulde keinerlei zirkuläre Abhängigkeiten. Falls Sie dennoch eine verwenden, wird es irgendjemanden irgendwo auf der Welt geben, dessen FreeBSD-Installation nahezu sofort zusammenbricht und vielen anderen wird es sehr schnell genauso ergehen. So etwas kann extrem schwer festzustellen sein. Falls Sie Zweifel haben vor einer Änderung, dann vergewissern Sie sich, dass Sie folgendes getan haben: cd /usr/ports; make index. Dieser Prozess kann auf alten Maschinen sehr langsam sein, aber Sie ersparen sich und einer Vielzahl von Menschen möglicherweise eine Menge Ärger.
<makevar>MASTERDIR</makevar> Falls Ihr Port wegen einer Variable, die verschiedene Werte annimmt (z.B. Auflösung oder Papiergröße), leicht unterschiedliche Versione von Paketen erzeugen muss, dann legen Sie bitte ein Unterverzeichnis pro Paket an, um es für den Nutzer einfacher begreiflich zu machen, was zu machen ist. Aber versuchen Sie dabei so viele Dateien wie möglich zwischen diesen Ports gemeinsam zu nutzen. Normalerweise benötigen Sie nur ein sehr kurzes Makefile in allen ausser einem Unterverzeichnis, wenn Sie Variablen intelligent nutzen. In diesem einzigen Makefile können Sie MASTERDIR verwenden, um anzugeben, wo der Rest der Dateien liegt. Benutzen Sie bitte auch eine Variable für PKGNAMESUFFIX, damit die Pakete unterschiedliche Namen haben werden. Wir demonstrieren dies am Besten an einem Beispiel. Es ist Teil von japanese/xdvi300/Makefile; PORTNAME= xdvi PORTVERSION= 17 PKGNAMEPREFIX= ja- PKGNAMESUFFIX= ${RESOLUTION} : # default RESOLUTION?= 300 .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ ${RESOLUTION} != 300 && ${RESOLUTION} != 400 @${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" @${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400." @${FALSE} .endif japanese/xdvi300 verfügt ebenfalls über alle Patches, Paket-Dateien usw. Wenn Sie make eintippen, wird der Port die Standardvorgabe für die Auflösung nehmen (300) und den Port ganz normal erstellen. Genauso wie für alle anderen Auflösungen ist dies das vollständige xdvi118/Makefile: RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include "${MASTERDIR}/Makefile" (xdvi240/Makefile und xdvi400/Makefile sind ähnlich). Die MASTERDIR-Definition teilt dem bsd.port.mk mit, dass die normalen Unterverzeichnisse wie FILESDIR und SCRIPTDIR unter xdvi300 gefunden werden können. Die RESOLUTION=118-Zeile wird die RESOLUTION=300-Zeile in xdvi300/Makefile überschreiben und der Port wird mit einer Auflösung von 118 erstellt. Manualpages Die Variablen MAN[1-9LN] werden automatisch jede Manualpage zur pkg-plist hinzufügen (dies bedeutet, dass Sie Manualpages nicht in der pkg-plist auflisten dürfen, lesen Sie bitte Erstellung der PLIST für weitere Details). Sie veranlassen zudem den Installationsabschnitt dazu, die Manualpages zu Komprimieren oder zu Dekomprimieren abhängig vom gesetzten Wert der Variable NOMANCOMPRESS in /etc/make.conf. Falls Ihr Port versucht verschiedene Namen für Manualpages unter Zuhilfenahme von Symlinks oder Hardlinks zu installieren, müssen Sie die Variable MLINKS nutzen, um diese zu identifizieren. Der von Ihrem Port installierte Link wird von bsd.port.mk gelöscht und wieder eingefügt, um sicherzustellen, dass er auf die korrekte Datei zeigt. Jede Manualpage, welche in MLINKS aufgeführt ist, darf nicht in der pkg-plist aufgenommen werden. Falls die Manualpages während der Installation komprimiert werden sollen, müssen Sie die Variable MANCOMPRESSED setzen. Diese Variable kann drei Werte annehmen, yes, no und maybe. yes bedeutet, dass Manualpages bereits komprimiert installiert sind, bei no sind sie es nicht und maybe bedeutet, dass die Software bereits den Wert von NOMANCOMPRESS beachtet, damit bsd.port.mk nichts besonderes auszuführen hat. MANCOMPRESSED wird automatisch auf yes gesetzt, wenn USE_IMAKE vorgegeben ist und gleichzeitig NO_INSTALL_MANPAGES nicht. Im umgekehrten Falle ist MANCOMPRESSED auf no gesetzt. Sie müssen es nicht explizit angeben, außer die Standardvorgabe ist für Ihren Port nicht passend. Wenn Ihr Port den man tree irgendwo anders als in der Variable MANPREFIX verankert, können Sie ihn mit MANPREFIX bestimmen. Sollten zudem Manualpages nur in bestimmten Abschnitten an einem nicht-standardkonformen Platz liegen, wie z.B. bestimmte Perl-Modul-Ports, dann können Sie mittels der Variable MANsectPREFIX (wobei sect ein Wert aus 1-9, L oder N ist) individuelle Pfade zu den Manualpages festlegen. Wenn Ihre Manualpages in sprachspezifische Unterverzeichnisse installiert werden, dann bestimmen Sie bitte den Namen der Sprache mit der Variable MANLANG. Der Wert dieser Variable ist mit "" vorgegeben (das bedeutet nur Englisch). Hier ist ein Beispiel, welches alles zusammenfasst. MAN1= foo.1 MAN3= bar.3 MAN4= baz.4 MLINKS= foo.1 alt-name.8 MANLANG= "" ja MAN3PREFIX= ${PREFIX}/share/foobar MANCOMPRESSED= yes Dies zeigt an, dass sechs Dateien von diesem Port installiert werden; ${MANPREFIX}/man/man1/foo.1.gz ${MANPREFIX}/man/ja/man1/foo.1.gz ${PREFIX}/share/foobar/man/man3/bar.3.gz ${PREFIX}/share/foobar/man/ja/man3/bar.3.gz ${MANPREFIX}/man/man4/baz.4.gz ${MANPREFIX}/man/ja/man4/baz.4.gz ${MANPREFIX}/man/man8/alt-name.8.gz kann zusätzlich von Ihrem Port installiert werden, oder auch nicht. Unabhängig davon wird ein Symlink erstellt, welcher die Manualpages foo(1) und alt-name(8) einbindet. Falls nur manche Manualpages übersetzt sind, können Sie einige dynamisch vom MANLANG-Inhalt erzeugte Variablen nutzen: MANLANG= "" de ja MAN1= foo.1 MAN1_EN= bar.1 MAN3_DE= baz.3 Dies führt zu folgender Liste von Dateien: ${MANPREFIX}/man/man1/foo.1.gz ${MANPREFIX}/man/de/man1/foo.1.gz ${MANPREFIX}/man/ja/man1/foo.1.gz ${MANPREFIX}/man/man1/bar.1.gz ${MANPREFIX}/man/de/man3/baz.3.gz Info-Dateien Falls Ihr Paket GNU-Info-Dateien installiert, sollten diese in der INFO-Variablen augelistet sein (ohne das angehängte .info) mit einem Eintrag für jedes Dokument. Von diesen Dateien wird angenommen, dass sie nach PREFIX/INFO_PATH installiert werden. Sie können INFO_PATH ändern, falls Ihr Paket einen anderen Ort vorsieht. Jedoch wird dies nicht empfohlen. Die Einträge enthalten nur den relativen Pfad zu PREFIX/INFO_PATH. Zum Beispiel installiert lang/gcc33 Info-Dateien nach PREFIX/INFO_PATH/gcc33, wobei INFO etwa so aussieht: INFO= gcc33/cpp gcc33/cppinternals gcc33/g77 ... Entsprechende Installations-/Deinstalltions-Codes werden vor der Paket-Registrierung automatisch der vorläufigen pkg-plist hinzugefügt. Makefile-Optionen Einige größere Applikationen können mit einer Reihe von Konfigurationen, die zusätzliche Funktionalitäten hinzufügen, erstellt werden, falls eine oder mehrere Bibliotheken oder Applikationen verfügbar sind. Dazu gehören die Auswahl von natürlichen Sprachen, GUI versus Kommandozeilen-Versionen oder die Auswahl aus mehreren Datenbank-Programmen. Da nicht alle Nutzer diese Bibliotheken oder Applikationen wollen, stellt das Ports-System hooks (Haken) zur Verfügung, damit der Autor des Ports bestimmen kann, welche Konfiguration erstellt werden soll. KNOBS (Einstellungen) <makevar>WITH_<replaceable>*</replaceable></makevar> und <makevar>WITHOUT_<replaceable>*</replaceable></makevar> Diese Variablen sind entworfen worden, um vom System-Administrator gesetzt zu werden. Es gibt viele, die in ports/Mk/bsd.*.mk standardisiert sind. Andere sind es nicht, was verwirrend sein kann. Falls Sie eine solche Konfigurationsvariable hinzufügen müssen, dann nehmen Sie bitte eine aus der folgenden Liste. Sie sollten nicht annehmen, dass ein WITH_* notwendigerweise eine korrespondierende WITHOUT_*-Variable hat oder umgekehrt. Im Allgemeinen wird diese Vorgabe einfach unterstellt. Falls nicht anderweitig festgelegt, werden diese Variablen nur dahingehend überprüft, ob sie gesetzt sind oder nicht – nicht darauf, ob sie auf bestimmte Werte wie YES oder NO gesetzt sind. Die <makevar>WITH_<replaceable>*</replaceable></makevar> und <makevar> WITHOUT_<replaceable>*</replaceable></makevar>-Variablen Variable Bedeutung WITH_APACHE2 Falls gesetzt, benutze www/apache20 anstelle der Vorgabe www/apache13. WITH_BERKELEY_DB Definiere diese Variable, um die Fähigkeit zu erhalten, eine Variante der Berkeley Database wie z.B. databases/db41 zu nutzen. Eine verwandte Variable, WITH_BDB_VER, kann mit Werten wie 2, 3, 4, 41 oder 42 festgelegt werden. WITH_MYSQL Definiere diese Variable, um die Fähigkeit zu erhalten, eine Variante von MySQL zu nutzen wie z.B. databases/mysql40-server. Eine verwandte Variable ist, WANT_MYSQL_VER, welche mit Werten wie 323, 40, 41, oder 50 belegt werden kann. WITHOUT_NLS Falls gesetzt, bedeutet sie, dass eine Internationalisierung nicht benötigt wird, was Kompilierzeit sparen kann. Als Vorgabe wird Internationalisierung gebraucht. WITH_OPENSSL_BASE Nutze die Version von OpenSSL aus dem Basissystem. WITH_OPENSSL_PORT Nutze die Version von OpenSSL aus security/openssl und überschreibe die Version, welche original im Basissystem installiert wurde. WITH_POSTGRESQL Definiere diese Variable, um die Fähigkeit zu erhalten, eine Variante der Datenbank PostGreSQL wie databases/postgresql72 auszuwählen. WITHOUT_X11 Falls der Port mit oder ohne Unterstützung für X erstellt werden kann, dann sollte normalerweise mit X-Unterstützung erstellt werden. Falls die Variable gesetzt ist, soll die Version ohne X-Unterstützung erstellt werden.
Benennung von Knobs (Einstellungen) Um die Anzahl der Knobs niedrig zu halten und zum Vorteil des Anwenders, wird empfohlen, dass Porter ähnliche Namen für Knobs verwenden. Eine Liste der beliebtesten Knobs kann in der KNOBS-Datei eingesehen werden. Knob-Namen sollten wiederspiegeln, was der Knob bedeutet und was er bewirkt. Wenn ein Port einen lib-Präfix im PORTNAME hat, dann soll das lib-Präfix im Knob-Namen entfallen.
<makevar>OPTIONS</makevar> Hintergrund Die OPTIONS-Variable gibt dem Nutzer, der diesen Port installiert, einen Dialog mit auswählbaren Optionen und speichert diese in /var/db/ports/portname/options. Bei der nächsten Neuerstellung des Ports werden diese Einstellungen wieder verwandt. Sie werden sich niemals mehr an all die zwanzig WITH_* und WITHOUT_*-Optionen erinnern müssen, die Sie benutzt haben, um diesen Port zu erstellen! Wenn der Anwender make config benutzt (oder ein make build das erste Mal laufen lässt) wird das Framework auf /var/db/ports/portname/options die Einstellungen prüfen. Falls die Datei nicht existiert, werden die Werte von OPTIONS genutzt, um eine Dialogbox zu erzeugen, in welcher die Optionen an- oder abgeschaltet werden können. Dann wird die options-Datei gespeichert und die ausgewählten Variablen werden bei der Erstellung des Ports benutzt. Falls eine neue Version des Ports OPTIONS hinzufügt, wird der Dialog mit den gespeicherten Werten dem Nutzer angezeigt. Benutzen Sie make showconfig, um die gespeicherte Konfiguration zu betrachten. Benutzen Sie make rmconfig, um die gespeicherte Konfiguration zu Löschen. Syntax Die Syntax für die OPTIONS-Variable lautet: OPTIONS= OPTION "descriptive text" default ... Der Wert als Vorgabe ist entweder ON oder OFF. Wiederholungen dieser drei Felder sind erlaubt. OPTIONS-Definitionen müssen vor der Einbindung von bsd.port.pre.mk erscheinen. Die WITH_* und WITHOUT_*-Variablen können nur nach der Einbindung von bsd.port.pre.mk getestet werden. Beispiel Einfache Anwendung von <makevar>OPTIONS</makevar> OPTIONS= FOO "Enable option foo" On \ BAR "Support feature bar" Off .include <bsd.port.pre.mk> .if defined(WITHOUT_FOO) CONFIGURE_ARGS+= --without-foo .else CONFIGURE_ARGS+= --with-foo .endif .if defined(WITH_BAR) RUN_DEPENDS+= bar:${PORTSDIR}/bar/bar .endif .include <bsd.port.post.mk> Automatische Aktivierung von Funktionen Wenn Sie ein GNU-Konfigurationsskript benutzen, sollten Sie ein Auge darauf werfen, welche Funktionen durch die automatische Erkennung aktiviert werden. Schalten Sie Funktionen, die Sie nicht möchten, ausdrücklich durch Verwendung von --without-xxx oder --disable-xxx in der Variable CONFIGURE_ARGS einzeln ab. Falsche Behandlung einer Option .if defined(WITH_FOO) LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .endif Stellen Sie sich vor im obigen Beispiel ist eine Bibliothek libfoo auf dem System installiert. Der Nutzer will nicht, dass diese Applikation libfoo benutzt, also hat er die Option auf "off" im make config-Dialog umgestellt. Aber das Konfigurationsskript der Applikation hat erkannt, dass die Bibliothek auf dem System vorhanden ist und fügt ihre Funktionen in die Binärdatei ein. Falls der Nutzer sich nun entschliesst libfoo von seinem System zu entfernen, dann wird das Ports-System nicht protestieren (es wurde keine Abhängigkeit von libfoo eingetragen), aber die Applikation bricht ab. Korrekte Behandlung einer Option .if defined(WITH_FOO) LIB_DEPENDS+= foo.0:${PORTSDIR}/devel/foo CONFIGURE_ARGS+= --enable-foo .else CONFIGURE_ARGS+= --disable-foo .endif Im zweiten Beispiel wird die Bibliothek libfoo explizit abgeschaltet. Das Konfigurationsskript aktiviert die entsprechenden Funktionen nicht in der Applikation trotz der Anwesenheit der Bibliothek auf dem System.
Die Festlegung des Arbeitsverzeichnisses Jeder Port wird extrahiert in ein Arbeitsverzeichnis, welches beschreibbar sein muss. Das Ports-System gibt als Standard vor, dass die DISTFILES in einem Verzeichnis namens ${DISTNAME} entpackt werden. Mit anderen Worten, wenn Sie: PORTNAME= foo PORTVERSION= 1.0 festgelegt haben, dann enthalten die Distributions-Dateien des Ports ein Verzeichnis auf oberster Ebene, foo-1.0, und der Rest der Dateien befindet sich unter diesem Verzeichnis. Es gibt eine Reihe von Variablen, die Sie überschreiben können, falls dies nicht der Fall sein sollte. <makevar>WRKSRC</makevar> Diese Variable listet den Namen des Verzeichnisses, welches erstellt wird, wenn die Distfiles der Applikation extrahiert werden. Wenn unser vorheriges Beispiel in einem Verzeichnis namens foo (und nicht foo-1.0) extrahiert wurde, würden Sie schreiben: WRKSRC= ${WRKDIR}/foo oder möglicherweise WRKSRC= ${WRKDIR}/${PORTNAME} <makevar>NO_WRKSUBDIR</makevar> Wenn der Port überhaupt nicht in einem Unterverzeichnis extrahiert wird, sollten Sie dies mit dem Setzen von NO_WRKSUBDIR anzeigen. NO_WRKSUBDIR= yes <makevar>CONFLICTS</makevar> Falls Ihr Paket nicht mit anderen Paketen koexistieren kann (wegen Dateikonflikten, Laufzeit-Inkompatibilitäten usw.), führen Sie bitte die anderen Paketnamen in der Variable CONFLICTS auf. Sie können hier Shell-Globs wie * und ? verwenden. Paketnamen sollten in der gleichen Weise aufgezählt werden, wie sie in /var/db/pkg auftauchen. Bitte stellen Sie sicher, dass CONFLICTS nicht mit dem Paket des Ports selbst übereinstimmt, da ansonsten das Erzwingen der Installation durch FORCE_PKG_REGISTER nicht länger funktionieren wird. CONFLICTS setzt automatisch die Variable IGNORE, welche ausführlicher in dokumentiert ist. Beim Entfernen eines von mehreren in Konflikt stehenden Ports ist es ratsam, die CONFLICTS-Einträge in den anderen Ports für einige Monate beizubehalten, um Nutzer zu unterstützen, die ihre Ports nur sporadisch aktualisieren. Installation von Dateien INSTALL_* macros Nutzen Sie die Makros in bsd.port.mk, um korrekte Modi und Eigentümer von Dateien in Ihren *-install-Targets sicherzustellen. INSTALL_PROGRAM ist ein Befehl, um binäre Binärdateien zu installieren. INSTALL_SCRIPT ist ein Befehl, um ausführbare Skripte zu installieren. INSTALL_KLD ist ein Befehl, mit dem Kernelmodule installiert werden können. Einige Architekturen haben Probleme mit stripped-Modulen. Daher sollten Sie diesen Befehl anstelle von INSTALL_PROGRAM verwenden. INSTALL_DATA ist ein Befehl, um gemeinsam nutzbare Daten zu installieren. INSTALL_MAN ist ein Befehl, um Manualpages oder andere Dokumentation zu installieren (es wird nichts komprimiert). Das sind grundsätzlich alle install-Befehle mit ihren passenden Flags. Zerlegen von Binärdateien Zerlegen Sie keine Binärdateien manuell, wenn Sie es nicht müssen. Alle Binaries sollten gestripped werden; allerdings vermag das INSTALL_PROGRAM-Makro gleichzeitig eine Binärdatei zu installieren und zu strippen (beachten Sie den nächsten Abschnitt). Wenn Sie eine Datei strippen müssen, aber nicht das INSTALL_PROGRAM-Makro nutzen wollen, dann kann ${STRIP_CMD} Ihr Programm strippen. Dies wird typischerweise innerhalb des post-install-Targets gemacht. Zum Beispiel: post-install: ${STRIP_CMD} ${PREFIX}/bin/xdl Nutzen Sie &man.file.1; für die installierte Applikation, um zu überprüfen, ob eine Binärdatei gestripped ist oder nicht. Wenn es nicht meldet not stripped, dann ist es bereits gestripped. Zudem wird &man.strip.1; nicht ein bereits gestripptes Programm nochmals versuchen zu strippen, sondern wird stattdessen einfach sauber beenden. Installation eines ganzen Verzeichnisbaums inklusive Dateien Manchmal muss man eine große Zahl von Dateien unter Erhalt ihrer hierarchischen Struktur installieren, d.h. Kopieraktionen über einen ganzen Verzeichnisbaum von WRKSRC zu einem Zielverzeichnis unter PREFIX. Für diesen Fall gibt es zwei Makros. Der Vorteil der Nutzung dieser Makros anstatt cp ist, dass sie korrekte Besitzer und Berechtigungen auf den Zieldateien garantieren. Das erste Makro, COPYTREE_BIN, wird alle installierten Dateien ausführbar markieren und damit passend für die Installation in PREFIX/bin vorbereiten. Das zweite Makro, COPYTREE_SHARE, setzt keine Ausführungsberechtigungen auf Dateien und ist daher geeignet für die Installation von Dateien im Target von PREFIX/share. post-install: ${MKDIR} ${EXAMPLESDIR} (cd ${WRKSRC}/examples/ && ${COPYTREE_SHARE} \* ${EXAMPLESDIR}) Dieses Beispiel wird den Inhalt des examples-Verzeichnisses im Distfile des Drittanbieters in das Beispielverzeichnis Ihres Ports kopieren. post-install: ${MKDIR} ${DATADIR}/summer (cd ${WRKSRC}/temperatures/ && ${COPYTREE_SHARE} "June July August" ${DATADIR}/summer/) Und dieses Beispiel wird die Daten der Sommermonate in das summer-Unterverzeichnis eines DATADIR installieren. Zusätzliche find-Argumente können mit dem dritten Argument an die COPYTREE_*-Makros übergeben werden. Um zum Beispiel alle Dateien aus dem 1. Beispiel ohne die Makefiles zu installieren, kann man folgenden Befehl benutzen. post-install: ${MKDIR} ${EXAMPLESDIR} (cd ${WRKSRC}/examples/ && \ ${COPYTREE_SHARE} \* ${EXAMPLESDIR} "! -name Makefile") Beachten Sie bitte, dass diese Makros die installierten Dateien nicht zur pkg-plist hinzufügen, Sie müssen sie immer noch selbst auflisten. Installation zusätzlicher Dokumentation Falls Ihre Software zusätzlich zu den üblichen Manualpages und Info-Seiten weitere Dokumentation hat und Sie diese für nützlich halten, dann installieren Sie sie unter PREFIX/share/doc. Dies kann wie vorstehend im Target des post-install geschehen. Legen Sie ein neues Verzeichnis für Ihren Port an. Das Verzeichnis sollte wiederspiegeln, was der Port ist. Das bedeutet normalerweise PORTNAME. Wie auch immer, wenn Sie meinen, der Nutzer möchte verschiedene Versionen des Ports zur gleichen Zeit installiert haben, dann können Sie die gesamte Variable PKGNAME nutzen. Machen Sie die Installation von der Variablen NOPORTDOCS abhängig, damit die Nutzer sie in /etc/make.conf abschalten können: post-install: .if !defined(NOPORTDOCS) ${MKDIR} ${DOCSDIR} ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR} .endif Hier einige praktische Variablen und wie sie standardmässig bei Verwendung im Makefile expandiert werden: DATADIR wird expandiert zu PREFIX/share/PORTNAME. DATADIR_REL wird expandiert zu share/PORTNAME. DOCSDIR wird expandiert zu PREFIX/share/doc/PORTNAME. DOCSDIR_REL wird expandiert zu share/doc/PORTNAME. EXAMPLESDIR wird expandiert zu PREFIX/share/examples/PORTNAME. EXAMPLESDIR_REL wird expandiert zu share/examples/PORTNAME. NOPORTDOCS behandelt nur zusätzliche Dokumentation, die in DOCSDIR installiert ist. Für normale Manualpages und Info-Seiten wird die Variable benutzt. Dinge, welche in DATADIR und EXAMPLESDIR installiert werden, legen die Variablen NOPORTDATA und NOPORTEXAMPLES fest. Die Variablen werden nach PLIST_SUB exportiert. Ihre Werte erscheinen dort als Pfadnamen relativ zu PREFIX, falls möglich. Das bedeutet, dass share/doc/PORTNAME standardmässig ersetzt wird durch %%DOCSDIR%% in der Packliste usw. (mehr zur Ersetzung durch die pkg-plist finden Sie hier). Alle installierten Dokumentationsdateien und –Verzeichnisse sollten in der pkg-plist dem %%PORTDOCS%%-Präfix enthalten sein, zum Beispiel: %%PORTDOCS%%%%DOCSDIR%%/AUTHORS %%PORTDOCS%%%%DOCSDIR%%/CONTACT %%PORTDOCS%%@dirrm %%DOCSDIR%% Alternativ zur Auflistung der Dokumentationsdateien in der pkg-plist kann in einem Port auch die Variable PORTDOCS gesetzt werden für eine Liste von Dateien und Shell-Globs, um diese zur endgültigen Packliste hinzuzufügen. Die Namen werden relativ zur Variable DOCSDIR sein. Wenn Sie also einen Port haben, welcher PORTDOCS benutzt, und Sie haben eine vom Standard abweichenden Platz für seine Dokumentation, dann müssen Sie die Variable DOCSDIR entsprechend setzen. Wenn ein Verzeichnis in PORTDOCS aufgeführt ist, oder von einem Shell-Glob dieser Variable abgebildet wird, dann wird der komplette Verzeichnisbaum inklusive Dateien und Verzeichnissen in der endgültigen Packliste aufgenommen. Wenn die Variable NOPORTDOCS gesetzt ist, dann werden die Dateien und Verzeichnisse, die in PORTDOCS aufgelistet sind, nicht installiert und werden auch nicht zur Packliste des Ports hinzugefügt. Wie oben gezeigt bleibt es dem Port selbst überlassen, die Dokumentation in PORTDOCS zu installieren. Ein typisches Beispiel für den Gebrauch von PORTDOCS sieht wie folgt aus: PORTDOCS= README.* ChangeLog docs/* Die Äquivalente zu PORTDOCS für unter DATADIR und EXAMPLESDIR installierte Dateien sind PORTDATA beziehungsweise PORTEXAMPLES. Sie können auch pkg-message benutzen, um Meldungen während der Installation anzuzeigen. Lesen Sie diesen Abschnitt über den Gebrauch von pkg-message für weitere Details. Die pkg-message-Datei muss nicht zur pkg-plist hinzugefügt werden. Unterverzeichnisse mit PREFIX Lassen Sie den Port die Dateien in die richtigen Unterverzeichnisse von PREFIX verteilen. Einige Ports werfen alles in einen Topf und legen es im Unterverzeichnis mit dem Namen des Ports ab, was falsch ist. Ausserdem legen viele Ports alles ausser Binaries, Header-Dateien und Manualpages in ein Unterverzeichnis von lib, was natürlich auch nicht der BSD-Philosophie entspricht und nicht gut funktioniert. Viele der Dateien sollten in eines der folgenden Verzeichnisse geschoben werden: etc (Konfigurationsdateien), libexec (intern gestartete Binärdateien), sbin (Binärdateien für Superuser/Manager), info (Dokumentation für Info-Browser) oder share (Architektur-unabhängige Dateien). Lesen Sie hierzu &man.hier.7;; weitestgehend greifen die Regeln für /usr auch für /usr/local. Die Ausnahme sind Ports, welche mit news aus dem USENET arbeiten. In diesem Falle sollte PREFIX/news als Zielort für die Dateien benutzt werden.
Besonderheiten Es gibt einige Dinge mehr, die zu beachten sind, wenn man einen Port erstellt. Dieser Abschnitt erklärt die wichtigsten. Shared-Libraries Wenn Ihr Port eine oder mehrere Shared-Libraries installiert, dann definieren Sie bitte eine USE_LDCONFIG make-Variable, die bsd.port.mk anweisen wird, ${LDCONFIG} -m auf das Verzeichnis, in das die neue Library installiert wird (normalerweise PREFIX/lib), während des post-install-Targets anzuwenden, um sie im Shared-Library-Cache zu registrieren. Diese Variable, wenn definiert, wird auch dafür sorgen, dass ein entsprechendes @exec /sbin/ldconfig -m und @unexec /sbin/ldconfig -R-Paar zu Ihrer pkg-plist-Datei hinzugefügt wird, sodass ein Benutzer, der das Paket installiert, die Bibliothek danach sofort benutzen kann und das System nach deren Deinstallation nicht glaubt, die Bibliothek wäre noch da. USE_LDCONFIG= yes Wenn nötig, können Sie das Standardverzeichnis außer Kraft setzen, indem Sie den USE_LDCONFIG Wert auf eine Liste von Verzeichnissen setzen, in die Shared Libraries installiert werden sollen. Wenn Ihr Port z.B. diese Bibliotheken nach PREFIX/lib/foo und PREFIX/lib/bar installiert, könnten Sie folgendes in Ihrem Makefile benutzen: USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar Bitte überprüfen Sie dies genau. Oft ist das überhaupt nicht nötig oder kann durch -rpath oder das Setzen von LD_RUN_PATH während des Linkens umgangen werden (s. lang/moscow_ml für ein Beispiel), oder durch einen Shell-Wrapper, der LD_LIBRARY_PATH setzt, bevor er die Binärdatei ausführt, wie es www/mozilla tut. Wenn Sie 32-Bit Libraries auf 64-Bit Systemen installieren, benutzen Sie stattdessen USE_LDCONFIG32. Versuchen Sie Shared-Library-Versionsnummern im libfoo.so.0 Format zu halten. Unser Runtime-Linker kümmert sich nur um die Major (erste) Nummer. Wenn sich die Major-Library-Versionsnummer während der Aktualisierung zu einer neuen Portversion erhöht, sollte auch die PORTREVISION aller Ports, die die Shared-Library linken, erhöht werden, damit diese mit der neuen Version der Bibliothek neu kompiliert werden. Ports mit beschränkter Verbreitung Lizenzen variieren und manche geben Restriktionen vor, wie die Applikation gepackt werden oder ob sie gewinnorientiert verkauft werden kann, usw. Es liegt in Ihrer Verantwortung als Porter die Lizenzbestimmungen der Software zu lesen und sicherzustellen, dass das FreeBSD-Projekt nicht haftbar gemacht wird für Lizenzverletzungen durch Weiterverbreitung des Quelltextes oder kompilierter Binaries über FTP/HTTP oder CD-ROM. Im Zweifelsfall kontaktieren Sie bitte die &a.ports;. In solchen Situationen können die in den folgenden Abschnitten beschriebenen Variablen gesetzt werden. <makevar>NO_PACKAGE</makevar> Diese Variable zeigt an, dass wir keine binären Pakete dieser Applikation erzeugen dürfen - z.B. wenn die Lizenz die Weiterverteilung von binären Paketen oder Paketen verbietet, die aus verändertem Quelltext erzeugt wurden. Die DISTFILES des Ports dürfen allerdings frei über FTP/HTTP Mirrors weiterverbreitet werden. Sie dürfen auch auf CD-ROM (oder ähnlichen Medien) weiterverbreitet werden - es sei denn, NO_CDROM ist ebenfalls gesetzt. NO_PACKAGE sollte auch benutzt werden, wenn das binäre Paket nicht allgemein brauchbar ist und die Applikation immer aus dem Quelltext kompiliert werden sollte. Zum Beispiel, wenn die Applikation konfigurierte Informationen über den Rechner/Installationsort bei der Installation einkompiliert bekommt, setzen Sie NO_PACKAGE. NO_PACKAGE sollte auf eine Zeichenkette gesetzt werden, die den Grund beschreibt, warum kein Paket erzeugt werden soll. <makevar>NO_CDROM</makevar> Diese Variable gibt an, dassobwohl wir binäre Pakete erzeugen dürfen – wir weder diese Pakete noch die DISTFILES des Ports auf einer CD-ROM (oder ähnlichen Medien) verkaufen dürfen. Die DISTFILES des Ports dürfen allerdings immer noch auf FTP/HTTP Mirrors. Wenn diese Variable und auch NO_PACKAGE gesetzt ist, dann werden nur die DISTFILES des Ports erhältlich sein – und das nur mittels FTP/HTTP. NO_CDROM sollte auf eine Zeichenkette gesetzt werden, die den Grund beschreibt, warum der Port nicht auf CD-ROM weiterverbreitet werden kann. Das sollte z.B. gemacht werden, wenn die Lizenz des Ports nur für nichtkommerzielle Zwecke gilt. <makevar>NOFETCHFILES</makevar> Dateien, die in der Variable NOFETCHFILES aufgelistet sind, sind von keiner der MASTER_SITES abrufbar. Ein Beispiel solch einer Datei ist eine selbige, welche vom Anbieter auf CD-ROM bereitgestellt wird. Werkzeuge, die das Vorhandensein dieser Dateien auf den MASTER_SITES überprüfen, sollten diese Dateien ignorieren und sie nicht melden. <makevar>RESTRICTED</makevar> Setzen Sie diese Variable, wenn die Lizenz der Applikation weder das Spiegeln der DISTFILES der Applikation noch das Weiterverbreiten von binären Paketen in jedweder Art erlaubt. NO_CDROM oder NO_PACKAGE sollten nicht zusammen mit RESTRICTED gesetzt werden, weil letztere Variable die anderen beiden impliziert. RESTRICTED sollte auf eine Zeichenkette gesetzt werden, die den Grund beschreibt, warum der Port nicht weiterverbreitet werden kann. Typischerweise besagt dies, dass der Port proprietäre Software enthält und der Benutzer die DISTFILES manuell herunterladen muss – möglicherweise erst nachdem er sich für die Software registriert oder die Bedingungen eines Endbenutzer-Lizenzvertrags (EULA) akzeptiert hat. <makevar>RESTRICTED_FILES</makevar> Wenn RESTRICTED oder NO_CDROM gesetzt ist, ist diese Variable auf ${DISTFILES} ${PATCHFILES} voreingestellt, sonst ist sie leer. Wenn nicht jede dieser Dateien beschränkt ist, dann führen Sie die betroffenen Dateien in dieser Variable auf. Beachten Sie, dass der Porter für jede aufgeführte Distributionsdatei einen Eintrag zu /usr/ports/LEGAL hinzufügen sollte, der genau beschreibt, was die Beschränkung mit sich bringt. Build-Mechanismen <command>make</command>, <command>gmake</command> und <command>imake</command> Wenn Ihr Port GNU make benutzt, dann setzen Sie bitte USE_GMAKE=yes. Port-Variablen im Zusammenhang mit gmake Variable Bedeutung USE_GMAKE Der Port benötigt gmake für den Build. GMAKE Der ganze Pfad zu gmake, wenn es nicht im PATH ist.
Wenn Ihr Port eine X-Applikation ist, die Makefile-Dateien aus Imakefile-Dateien mit imake erzeugt, dann setzen Sie USE_IMAKE=yes. Das sorgt dafür, dass die Konfigurationsphase automatisch ein xmkmf -a ausführt. Wenn das Flag ein Problem für Ihren Port darstellt, setzen Sie XMKMF=xmkmf. Wenn der Port imake benutzt, aber das install.man-Target nicht versteht, dann sollte NO_INSTALL_MANPAGES=yes gesetzt werden. Wenn das Makefile im Quelltext Ihres Ports etwas anderes als all als Haupt-Build-Target hat, setzen Sie ALL_TARGET entsprechend. Das Gleiche gilt für install und INSTALL_TARGET.
<command>configure</command> Skript Wenn Ihr Port ein configure-Skript benutzt, um Makefile-Dateien aus Makefile.in-Dateien zu erzeugen, setzen Sie GNU_CONFIGURE=yes. Wenn Sie dem configure-Skript zusätzliche Argumente übergeben wollen (das Vorgabeargument ist --prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man ${CONFIGURE_TARGET}), setzen Sie diese zusätzlichen Argumente in CONFIGURE_ARGS. Zusätzliche Umgebungsvariablen können überdie Variable CONFIGURE_ENV übergeben werden. Wenn Ihr Paket GNU configure benutzt und die entstandene Binärdatei hat einen komischen Namen wie i386-portbld-freebsd4.7-appname, dann müssen Sie zusätzlich die CONFIGURE_TARGET-Variable setzen, um das Target so anzugeben, wie Skripten, die von neueren Versionen von autoconf erzeugt wurden, es erwarten. Fügen Sie das Folgende direkt nach der Zeile GNU_CONFIGURE=yes in Ihrem Makefile hinzu: CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL} Variablen für Ports, die configure benutzen Variable Bedeutung GNU_CONFIGURE Der Port benutzt ein configure-Skript, um das Bauen vorzubereiten. HAS_CONFIGURE Wie GNU_CONFIGURE, nur dass kein Standard-Konfigurations-Target zu CONFIGURE_ARGS hinzugefügt wird. CONFIGURE_ARGS Zusätzliche Argumente für das configure-Skript. CONFIGURE_ENV Zusätzliche Umgebungsvariablen für die Abarbeitung des configure-Skriptes. CONFIGURE_TARGET Ersetzt das Standard-Konfigurations-Target. Vorgabewert ist ${MACHINE_ARCH}-portbld-freebsd${OSREL}.
Benutzung von <command>scons</command> Wenn Ihr Port SCons benutzt, definieren Sie USE_SCONS=yes. Variablen für Ports, die <command>scons</command> benutzen Variable Bedeutung SCONS_ARGS Port-spezifische SCons-Argumente, die der SCons-Umgebung übergeben werden. SCONS_BUILDENV Variablen, die in der System-Umgebung gesetzt werden sollen. SCONS_ENV Variablen, die in der SCons-Umgebung gesetzt werden sollen. SCONS_TARGET Letztes Argument, das SCons übergeben wird – ähnlich MAKE_TARGET.
Um SConstruct im Quelltext alles, was SCons in SCONS_ENV übergeben wird, respektieren zu lassen (das ist hauptsächlich CC/CXX/CFLAGS/CXXFLAGS), patchen Sie SConstruct, sodass das Build Environment wie folgt konstruiert wird: env = Environment(**ARGUMENTS) Es kann dann mit env.Append und env.Replace modifiziert werden.
Benutzung von GNU autotools Einführung Die verschiedenen GNU autotools stellen einen Abstraktionsmechanismus bereit für das Kompilieren von Software für eine Vielfalt von Betriebssystemen und Maschinenarchitekturen. Innerhalb der Ports-Sammlung kann ein einzelner Port diese Werkzeuge mit Hilfe eines einfachen Konstrukts benutzen: USE_AUTOTOOLS= tool:version[:operation] ... Als dies geschrieben wurde konnte tool eins von libtool, libltdl, autoconf, autoheader, automake oder aclocal sein. version gibt die einzelne Werkzeug-Revision an, die benutzt werden soll (siehe devel/{automake,autoconf,libtool}[0-9]+ für mögliche Versionen). operation ist eine optionale Angabe, die modifiziert, wie das Werkzeug benutzt wird. Es können auch mehrere Werkzeuge angegeben werden – entweder durch Angabe aller in einer einzigen Zeile oder durch Benutzung des += Makefile-Konstrukts. Schliesslich gibt es das spezielle Tool, genannt autotools, das der Einfachheit dient indem es von alle verfügbaren Versionen der Autotools abhängt, was sinnvoll für Cross-Development ist. Dies kann auch erreicht werden, indem man den Port devel/autotools installiert. <command>libtool</command> Shared-Libraries, die das GNU Build-System benutzen, verwenden normalerweise libtool, um die Kompilierung und Installation solcher Bibliotheken anzupassen. Die übliche Praxis ist, eine Kopie von libtool, die mit dem Quelltext geliefert wird, zu benutzen. Falls Sie ein externes libtool benötigen, können Sie die Version, die von der Ports-Sammlung bereitgestellt wird, benutzen: USE_AUTOTOOLS= libtool:version[:env] Ohne zusätzliche Angaben sagt libtool:version dem Build-System, dass es das Konfigurationsskript mit der auf dem System installierten Kopie von libtool patchen soll. Die Variable GNU_CONFIGURE ist impliziert. Außerdem werden einige make– und shell-Variablen zur weiteren Benutzung durch den Port gesetzt. Für Genaueres siehe bsd.autotools.mk. Mit der Angabe :env wird nur die Umgebung vorbereitet. Schließlich können optional LIBTOOLFLAGS und LIBTOOLFILES gesetzt werden, um die häufigsten Argumente und durch libtool gepatchten Dateien außer Kraft zu setzen. Die meisten Ports werden das aber nicht brauchen. Für Weiteres siehe bsd.autotools.mk. <command>libltdl</command> Einige Ports benutzen das libltdl-Bibliothekspaket, welches Teil der libtool-Suite ist. Der Gebrauch dieser Bibliothek macht nicht automatisch den Gebrauch von libtool selbst nötig, deshalb wird ein separates Konstrukt zur Verfügung gestellt. USE_AUTOTOOLS= libltdl:version Im Moment sorgt dies nur für eine LIB_DEPENDS-Abhängigkeit von dem entsprechenden libltdl-Port und wird zur Vereinfachung zur Verfügung gestellt, um Abhängigkeiten von den Autotools-Ports ausserhalb des USE_AUTOTOOLS-Systems zu eliminieren. Es gibt keine weiteren Angaben für dieses Werkzeug. <command>autoconf</command> und <command>autoheader</command> Manche Ports enthalten kein Konfigurationsskript, sondern eine autoconf-Vorlage in der configure.ac-Datei. Sie können die folgenden Zuweisungen benutzen, um autoconf das Konfigurationsskript erzeugen zu lassen, und auch autoheader Header-Vorlagen zur Benutzung durch das Konfigurationsskript erzeugen zu lassen. USE_AUTOTOOLS= autoconf:version[:env] und USE_AUTOTOOLS= autoheader:version welches auch die Benutzung von autoconf:version impliziert. Ähnlich wie bei libtool, bereitet die Angabe des optionalen :env nur die Umgebung für weitere Benutzung vor. Ohne dieses wird der Port auch gepatched und erneut konfiguriert. Die zusätzlichen optionalen Variablen AUTOCONF_ARGS und AUTOHEADER_ARGS können durch das Makefile des Ports ausser Kraft gesetzt werden, wenn erforderlich. Wie bei den libtool-Äquivalenten werden die meisten Ports dies aber nicht benötigen. <command>automake</command> und <command>aclocal</command> Manche Pakete enthalten nur Makefile.am-Dateien. Diese müssen durch automake in Makefile.in-Dateien konvertiert und dann durch configure weiterbearbeitet werden, um schließlich ein Makefile zu erzeugen. Ähnliches gilt für Pakete, die gelegentlich keine aclocal.m4-Dateien mitliefern, welche ebenfalls zum Erstellen der Software benötigt werden. Diese können durch aclocal erzeugt werden, welches configure.ac oder configure.in durchsucht. aclocal hat eine ähnliche Beziehung zu automake wie autoheader zu autoconf – beschrieben im vorherigen Abschnitt. aclocal impliziert die Benutzung von automake, also haben wir: USE_AUTOTOOLS= automake:version[:env] und USE_AUTOTOOLS= aclocal:version was auch die Benutzung von automake:version impliziert. Ähnlich wie bei libtool und autoconf, bereitet die optionale Angabe :env nur die Umgebung zur weiteren Benutzung vor. Ohne sie wird der Port erneut konfiguriert. Wie schon autoconf und autoheader, hat sowohl automake als auch aclocal eine optionale Argument-Variable AUTOMAKE_ARGS bzw. ACLOCAL_ARGS, die durch das Makefile des Ports, falls nötig, außer Kraft gesetzt werden kann. Benutzung von GNU <literal>gettext</literal> Grundlegende Benutzung Wenn Ihr Port gettext benötigt, setzen Sie einfach USE_GETTEXT auf yes, und Ihr Port bekommt die Abhängigkeit von devel/gettext. Der Wert von USE_GETTEXT kann auch die benötigte Version der libintl-Bibliothek angeben, der grundlegenden Teil von gettext – jedoch wird von der Benutzung dieser Funktion dringend abgeraten: Ihr Port sollte einfach nur mit der aktuellen Version von devel/gettext funktionieren. Ein ziemlich häufiger Fall ist, dass ein Port gettext und configure benutzt. Normalerweise sollte GNU configure gettext automatisch finden können. Sollte das einmal nicht funktionieren, können Hinweise über den Ort von gettext in CPPFLAGS und LDFLAGS wie folgt übergeben werden: USE_GETTEXT= yes CPPFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \ LDFLAGS="${LDFLAGS}" Natürlich kann der Code kompakter sein, wenn es keine weiteren Flags gibt, die configure übergeben werden müssen: USE_GETTEXT= yes GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" Optionale Benutzung Manche Softwareprodukte erlauben die Deaktivierung von NLS - z.B. durch Übergeben von an configure. In diesem Fall sollte Ihr Port gettext abhängig vom Status von WITHOUT_NLS benutzen. Für Ports mit niedriger bis mittlerer Komplexität können Sie sich auf das folgende Idiom verlassen: GNU_CONFIGURE= yes .if !defined(WITHOUT_NLS) USE_GETTEXT= yes PLIST_SUB+= NLS="" .else CONFIGURE_ARGS+= --disable-nls PLIST_SUB+= NLS="@comment " .endif Der nächste Punkt auf Ihrer Todo-Liste ist dafür zu sorgen, dass die Message-Catalog-Dateien nur bedingt in der Packliste aufgeführt werden. Der Makefile-Teil dieser Aufgabe ist schon durch obiges Idiom erledigt. Das wird im Abschnitt über Fortgeschrittene pkg-plist-Methoden erklärt. Kurz gesagt, jedes Vorkommen von %%NLS%% in pkg-plist wird durch @comment , wenn NLS abgeschaltet ist, oder durch eine leere Zeichenkette, wenn NLS aktiviert ist, ersetzt. Folglich werden die Zeilen, denen %%NLS%% vorangestellt ist, zu reinen Kommentaren in der endgültigen Packliste, wenn NLS abgeschaltet ist; andernfalls wird der Prefix einfach nur ausgelassen. Alles, was Sie jetzt noch machen müssen, ist %%NLS%% vor jedem Pfad zu einer Message-Catalog-Datei in pkg-plist einzufügen. Zum Beispiel: %%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo %%NLS%%share/locale/no/LC_MESSAGES/foobar.mo In sehr komplexen Fällen müssen Sie eventuell fortgeschrittenere Techniken als die hier vorgestellte benutzen - wie z.B. Dynamische Packlistenerzeugung. Behandlung von Message-Catalog-Verzeichnissen Bei der Installation von Message-Catalog-Dateien gibt es einen Punkt zu beachten. Ihr Zielverzeichnis, das unter LOCALBASE/share/locale liegt, sollte nur selten von Ihrem Port erzeugt und gelöscht werden. Die Verzeichnisse für die gebräuchlichsten Sprachen sind in /etc/mtree/BSD.local.dist aufgelistet; das heisst, sie sind Teil des Systems. Die Verzeichnisse für viele andere Sprachen sind Teil des Ports devel/gettext. Sie wollen vielleicht dessen pkg-plist zur Hand nehmen, um festzustellen, ob Ihr Port eine Message-Catalog-Datei für eine seltene Sprache installiert. Die Benutzung von <literal>perl</literal> Wenn MASTER_SITES auf MASTER_SITE_PERL_CPAN gesetzt ist, dann ist der bevorzugte Wert von MASTER_SITE_SUBDIR der Top-Level-Name der Hierarchie. Zum Beispiel ist der empfohlene Wert für p5-Module-Name-Module. Die Top-Level-Hierarchie kann unter cpan.org angeschaut werden. Dies sorgt dafür, dass der Port weiter funktioniert, wenn sich der Autor des Moduls ändert. Die Ausnahme dieser Regel ist, dass das entsprechende Verzeichnis selber oder das Distfile in diesem Verzeichnis nicht existiert. In solchen Fällen ist die Benutzung der Id des Autors als MASTER_SITE_SUBDIR erlaubt. Jede der Einstellungen unten kann sowohl auf YES als auch auf eine Versionszeichenkette wie 5.8.0+ gesetzt werden. Wenn YES benutzt wird, bedeutet das, dass der Port mit jeder der unterstützten Perl-Versionen funktioniert. Falls ein Port nur mit einer bestimmten Perl-Version funktioniert, kann darauf mit einer Versionszeichenkette hingewiesen werden, die entweder eine Mindest- (z.B. 5.7.3+), Maximal- (z.B. 5.8.0-) oder Absolutversion (z.B. 5.8.3) festlegt. Variablen für Ports, die <literal>perl</literal> benutzen Variable Bedeutung USE_PERL5 Bedeutet, dass der Port perl 5 zum Erstellen und zum Ausführen benutzt. USE_PERL5_BUILD Bedeutet, dass der Port perl 5 zum Erstellen benutzt. USE_PERL5_RUN Bedeutet, dass der Port perl 5 zur Laufzeit benutzt. PERL Der gesamte Pfad zu perl 5 – entweder im Basissystem oder nachinstalliert über einen Port – ohne die Versionsnummer. Benutzen Sie diese Variable, wenn Sie #!-Zeilen in Skripten ersetzen müssen. PERL_CONFIGURE Perls MakeMaker für die Konfiguration benutzen. Dies impliziert USE_PERL5. PERL_MODBUILD Module::Build für configure, build und install benutzen. Dies impliziert PERL_CONFIGURE. Nur lesbare Variablen PERL_VERSION Die volle Version des installierten perl (z.B. 5.00503). PERL_VER Die kurze Angabe der installierten perl-Version (z.B. 5.005). PERL_LEVEL Die installierte perl-Version als ein Integer der Form MNNNPP (z.B. 500503). PERL_ARCH Wo perl architektur abhängige Bibliotheken ablegt. Vorgabe ist ${ARCH}-freebsd. PERL_PORT Name des perl-Ports, der installiert ist (z.B. perl5). SITE_PERL Verzeichnis, in das die Site-spezifischen perl-Pakete kommen. Dieser Wert wird zu PLIST_SUB hinzugefügt.
Ports von Perl-Modulen, die keine offizielle Webseite haben, sollen in der WWW-Zeile ihrer pkg-descr-Datei auf cpan.org verlinken. Die bevorzugte URL-Form ist http://search.cpan.org/dist/Module-Name/ (inklusive des Slash am Ende).
Benutzung von X11 X.Org-Komponenten Die X11-Implementierung, welche die Ports-Sammlung bereitstellt, ist X.Org. Wenn Ihre Applikation von X-Komponenten abhängt, listen Sie die benötigten Komponenten in USE_XORG auf. Als dies geschrieben wurde, wurden die folgenden Komponenten bereitgestellt: bigreqsproto compositeproto damageproto dmx dmxproto evieproto fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice inputproto kbproto libfs oldx printproto randrproto recordproto renderproto resourceproto scrnsaverproto sm trapproto videoproto x11 xau xaw xaw6 xaw7 xaw8 xbitmaps xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil xprintutil xpr oto xproxymngproto xrandr xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm. Die aktuelle Liste finden Sie immer in /usr/ports/Mk/bsd.xorg.mk. Das Mesa Projekt ist ein Versuch, eine freie OpenGL Implementierung bereitzustellen. Sie können eine Abhängigkeit von verschiedenen Komponenten diese Projektes in der Variable USE_GL spezifizieren. ouml;gliche Optionen sind: glut, glu, glw, gl und linux. Für Rückwärtskompatibilitä gilt der Wert yes als glu. Beispiel für USE_XORG USE_XORG= xrender xft xkbfile xt xaw USE_GL= glu Viele Ports definieren USE_XLIB, was dafür sorgt, dass der Port von allen (rund 50) Bibliotheken abhängt. Diese Variable existiert, um uuml;ckwärtskompatibilität sicherzustellen (sie stammt noch aus der Zeit vor dem modularem X.Org), und sollte bei neuen Ports nicht mehr benutzt werden. Variablen für Ports, die X benutzen USE_XLIB Der Port benutzt die X-Bibliotheken. Soll nicht mehr verwendet werden - benutzen Sie stattdessen eine Liste von Komponenten in USE_XORG. USE_X_PREFIX Soll nicht mehr benutzt werden, ist jetzt äquivalent zu USE_XLIB und kann einfach durch letzteres ersetzt werden. USE_IMAKE Der Port benutzt imake. Impliziert USE_X_PREFIX. XMKMF Ist auf den Pfad zu xmkmf gesetzt, wenn nicht in PATH. Vorgabe ist xmkmf -a.
Variablen bei Abhängigkeit von einzelnen Teilen von X11 X_IMAKE_PORT Ein Port, der imake und einige andere Werkzeuge, die zum Erstellen von X11 benutzt werden, bereitstellt. X_LIBRARIES_PORT Ein Port, der die X11-Bibliotheken bereitstellt. X_CLIENTS_PORT Ein Port, der X11-Clients bereitstellt. X_SERVER_PORT Ein Port, der den X11-Server bereitstellt. X_FONTSERVER_PORT Ein Port, der den Fontserver bereitstellt. X_PRINTSERVER_PORT Ein Port, der den Printserver bereitstellt. X_VFBSERVER_PORT Ein Port, der den virtuellen Framebuffer-Server bereitstellt. X_NESTSERVER_PORT Ein Port, der einen nested X-Server bereitstellt. X_FONTS_ENCODINGS_PORT Ein Port, der Kodierungen für Schriftarten bereitstellt. X_FONTS_MISC_PORT Ein Port, der verschiedene Bitmap-Schriftarten bereitstellt. X_FONTS_100DPI_PORT Ein Port, der 100dpi Bitmap-Schriftarten bereitstellt. X_FONTS_75DPI_PORT Ein Port, der 75dpi Bitmap-Schriftarten bereitstellt. X_FONTS_CYRILLIC_PORT Ein Port, der kyrillische Bitmap-Schriftarten bereitstellt. X_FONTS_TTF_PORT Ein Port, der &truetype;-Schriftarten bereitstellt. X_FONTS_TYPE1_PORT Ein Port, der Type1-Schriftarten bereitstellt. X_MANUALS_PORT Ein Port, der entwicklerorientierte Manualpages bereitstellt.
Benutzung von X11-bezogenen Variablen in einem Port # Port benutzt X11-Bibliotheken und hängt vom Font-Server # sowie von kyrillischen Schriftarten ab. RUN_DEPENDS= ${X11BASE}/bin/xfs:${X_FONTSERVER_PORT} \ ${X11BASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT} USE_XLIB= yes
Ports, die Motif benötigen Wenn Ihr Port eine Motif-Bibliothek benötigt, definieren Sie USE_MOTIF im Makefile. Die Standard-Motif-Implementierung ist x11-toolkits/open-motif. Benutzer können stattdessen x11-toolkits/lesstif wählen, indem Sie die WANT_LESSTIF-Variable setzen. Die Variable MOTIFLIB wird von bsd.port.mk auf die entsprechende Motif-Bibliothek gesetzt. Bitte patchen Sie den Quelltext Ihres Ports, sodass er überall ${MOTIFLIB} benutzt, wo die Motif-Bibliothek im Original Makefile oder Imakefile referenziert wird. Es gibt zwei verbreitete Fälle: Wenn sich der Port in seinem Makefile oder Imakefile auf die Motif-Bibliothek als -lXm bezieht, ersetzen Sie das einfach durch ${MOTIFLIB}. Wenn der Port in seinem Imakefile XmClientLibs benutzt, ersetzen Sie das durch ${MOTIFLIB} ${XTOOLLIB} ${XLIB}. Anmerkung: MOTIFLIB expandiert (normalerweise) zu -L/usr/X11R6/lib -lXm oder /usr/X11R6/lib/libXm.a - d.h. Sie müssen kein -L oder -l davor einfügen. X11 Schriftarten Wenn Ihr Port Schriftarten für das X-Window-System installiert, legen Sie diese nach X11BASE/lib/X11/fonts/local. Erzeugen eines künstlichen <envar>DISPLAY</envar> durch Xvfb Manche Applikationen benötigen ein funktionierendes X11-Display, damit die Kompilierung funktioniert. Das stellt für den FreeBSD Package-Building-Cluster, der ohne Display läuft, ein Problem dar. Wenn der folgende kanonische Hack benutzt wird, startet der Package-Building-Cluster den virtuellen Framebuffer-X-Server, und ein funktionierendes DISPLAY wird dem Build übergeben. USE_DISPLAY= yes Desktop-Einträge Desktop-Einträge (Freedesktop Standard) können in Ihrem Port einfach über die DESKTOP_ENTRIES-Variable erzeugt werden. Diese Einträge erscheinen dann im Applikationsmenü von standardkonformen Desktop-Umgebungen wie GNOME oder KDE. Die .desktop-Datei wird dann automatisch erzeugt, installiert und der pkg-plist hinzugefügt. Die Syntax ist: DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify Die Liste der möglichen Kategorien ist auf der Freedesktop Webseite abrufbar. StartupNotify zeigt an, ob die Applikation den Status in Umgebungen, die Startup-Notifications kennen, löschen wird. Beispiel: DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \ "${DATADIR}/xtra/graf/tome-128.png" \ "tome -v -g" "Application;Game;RolePlaying" \ false
Benutzung von GNOME Das FreeBSD/GNOME-Projekt benutzt seine eigene Gruppe von Variablen, um zu definieren, welche GNOME-Komponenten ein bestimmter Port benutzt. Eine umfassende Liste dieser Variablen existiert innerhalb der Webseite des FreeBSD/GNOME-Projektes. Benutzung von KDE Variablen-Definitionen Variablen für Ports, die KDE benutzen USE_KDELIBS_VER Der Port benutzt KDE-Bibliotheken. Die Variable spezifiziert die Major Version von KDE, die benutzt werden soll, und impliziert USE_QT_VER der entsprechenden Version. Der einzig mögliche Wert ist 3. USE_KDEBASE_VER Der Port benutzt die KDE-Base. Die Variable spezifiziert die Major Version von KDE, die benutzt werden soll, und impliziert USE_QT_VER der entsprechenden Version. Der einzig mögliche Wert ist 3.
Ports, die Qt benötigen Variablen für Ports, die Qt benötigen USE_QT_VER Der Port benutzt das Qt-Toolkit. Mögliche Werte sind 3 und 4; diese spezifizieren die Major Version von Qt, die benutzt werden soll. Entsprechende Parameter werden an das configure-Skript und make übergeben. QT_PREFIX Enthält den Pfad, wohin Qt installiert ist (nur lesbare Variable). MOC Enthält den Pfad von moc (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Werts. QTCPPFLAGS Zusätzliche Compiler-Flags, die über CONFIGURE_ENV an das Qt-Toolkit übergeben werden. Voreingestellt entsprechend des USE_QT_VER-Wertes. QTCFGLIBS Zusätzliche Bibliotheken, die über CONFIGURE_ENV für das Qt-Toolkit gelinkt werden sollen. Voreingestellt entsprechend des USE_QT_VER-Wertes. QTNONSTANDARD Änderungen von CONFIGURE_ENV, CONFIGURE_ARGS und MAKE_ENV sollen unterdrückt werden.
Zusätzliche Variablen für Ports, die Qt 4.xi benutzen QT_COMPONENTS Spezifiziert Tool– und Bibliothek-Abhängigkeiten für Qt4. Siehe unten für Details. UIC Enthält den Pfad von uic (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes. QMAKE Enthält den Pfad von qmake (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes. QMAKESPEC Enthält den Pfad der Konfigurationsdatei für qmake (nur lesbare Variable). Voreingestellt entsprechend des USE_QT_VER-Wertes.
Wenn USE_QT_VER gesetzt ist, werden dem configure-Skript einige nützliche Einstellungen übergeben: CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \ --with-qt-libraries=${QT_PREFIX}/lib \ --with-extra-libs=${LOCALBASE}/lib \ --with-extra-includes=${LOCALBASE}/include CONFIGURE_ENV+= MOC="${MOC}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \ QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}" Wenn USE_QT_VER auf 4 gesetzt ist, werden auch die folgenden Einstellungen übergeben: CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" MAKE_ENV+= QMAKESPEC="${QMAKESPEC}"
Komponentenauswahl (nur bei Qt 4.x) Wenn USE_QT_VER auf 4 gesetzt ist, können individuelle Qt4-Tool- und Bibliotheksabhängigkeiten in der Variable QT_COMPONENTS angegeben werden. An jede Komponente kann _build oder _run als Suffix angehängt werden, was eine Abhängigkeit zur Build- bzw. Laufzeit angibt. Ohne Suffix gilt die Abhängigkeit sowohl zur Build- als auch zur Laufzeit. Bibliothekskomponenten sollten normalerweise ohne Suffix angegeben werden, Tool-Komponenten mit _build und Plugin-Komponenten mit _run. Die gebräuchlichsten Komponenten werden im Folgenden angegeben (alle verfügbaren Komponenten sind in _QT_COMPONENTS_ALL in /usr/ports/Mk/bsd.qt.mk aufgelistet): Verfügbare Qt4-Bibliothekskomponenten Name Beschreibung corelib Kern-Bibliothek (kann weggelassen werden– es sei denn, der Port benutzt nichts außer corelib) gui Graphische Benutzeroberflächen-Bibliothek network Netzwerk-Bibliothek opengl OpenGL-Bibliothek qt3support Qt3-Kompatibilitäts-Bibliothek qtestlib Modultest-Bibliothek script Skript-Bibliothek sql SQL-Bibliothek xml XML-Bibliothek
Sie können herausfinden, welche Bibliotheken die Applikation benötigt, indem Sie nach erfolgreicher Kompilierung ldd auf die Hauptbinärdatei anwenden. Verfügbare Qt4-Tool-Komponenten Name Beschreibung moc meta object compiler (wird zum Build fast jeder Qt-Applikation benötigt) qmake Makefile-Generator / Build-Werkzeug rcc Resource-Compiler (wird benötigt, falls die Applikation *.rc oder *.qrc Dateien enthält) uic User-Interface-Compiler (wird benötigt, falls die Applikation von Qt-Designer erzeugte *.ui Dateien enthält - gilt für praktisch jede Qt-Applikation mit einer GUI)
Verfügbare Qt4-Plugin-Komponenten Name Beschreibung iconengines SVG-Icon-Engine Plugin (wenn die Applikation SVG-Icons mitliefert) imageformats Bildformatplugins für GIF, JPEG, MNG und SVG (wenn die Applikation Bilddateien mitliefert)
Qt4-Komponenten auswählen In diesem Beispiel benutzt die portierte Applikation die Qt4 GUI-Bibliothek, die Qt4-Core-Bibliothek, alle Qt4-Codeerzeugungstools und Qt4's Makefile Generator. Da die GUI-Bibliothek eine Abhängigkeit von der Core-Bibliothek impliziert, muss corelib nicht angegeben werden. Die Qt4-Codeerzeugungstools moc, uic und rcc, sowie der Makefile Generator qmake werden nur für den Build benötigt, deshalb bekommen die den Suffix _build: USE_QT_VER= 4 QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build
Zusätzliche Besonderheiten Wenn die Applikation keine configure Datei, sondern eine .pro Datei hat, können Sie das Folgende benutzen: HAS_CONFIGURE= yes do-configure: @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \ ${QMAKE} -unix PREFIX=${PREFIX} texmaker.pro Beachten Sie die Ähnlichkeit mit der qmake-Zeile im mitgelieferten BUILD.sh-Skript. Die Übergabe von CONFIGURE_ENV stellt sicher, dass qmake die QMAKESPEC-Variable übergeben bekommt, ohne die es nicht funktioniert. qmake erzeugt Standard-Makefiles, sodass es nicht nötig ist ein eigenes neues build-Target zu schreiben. Qt-Applikationen sind oft so geschrieben, dass sie plattformübergreifend sind, und oft ist X11/Unix nicht die Plattform, auf der sie entwickelt werden. Das sorgt oft für bestimmte fehlende Kleinigkeiten wie z.B.: Fehlende zusätzliche Include-Pfade. Viele Applikationen kommen mit System-Tray-Icon Support– unterlassen es aber Includes oder Bibliotheken in den X11 Verzeichnissen zu suchen. Sie können qmake über die Kommandozeile sagen, es soll Verzeichnisse zu den Include- und Bibliotheks-Suchpfaden hinzufügen - z.B.: ${QMAKE} -unix PREFIX=${PREFIX} INCLUDEPATH+=${X11BASE}/include \ LIBS+=-L${X11BASE}/lib sillyapp.pro Falsche Installations-Pfade. Manchmal werden Daten wie Icons oder .desktop-Dateien per Vorgabe in Verzeichnisse installiert, die nicht von XDG-kompatiblen Applikationen durchsucht werden. editors/texmaker ist hierfür ein Beispiel– siehe patch-texmaker.pro im files-Verzeichnis dieses Ports als eine Vorlage, die zeigt, wie man dies direkt in der Qmake Projektdatei löst.
Benutzung von Java Variablen-Definitionen Wenn Ihr Port ein Java™ Development Kit (JDK) benötigt, entweder zum Bauen, zur Laufzeit oder sogar, um das Distfile auszupacken, dann sollten Sie USE_JAVA setzen. Es gibt mehrere JDKs in der Ports-Sammlung– von verschiedenen Anbietern und in verschiedenen Versionen. Wenn Ihr Port eine bestimmte dieser Versionen benötigt, können Sie definieren welche. Die aktuelle Version ist java/jdk15. Variablen, die von Ports, die Java benutzen, gesetzt werden müssen Variable Bedeutung USE_JAVA Sollte definiert sein, damit die übrigen Variablen irgendeinen Effekt haben. JAVA_VERSION Durch Leerzeichen getrennte Liste von geeigneten Java-Versionen für den Port. Ein optionales "+" ermöglicht die Angabe eines Bereiches von Versionen (mögliche Werte: 1.1[+] 1.2[+] 1.3[+] 1.4[+]). JAVA_OS Durch Leerzeichen getrennte Liste von geeigneten JDK-Port-Betriebssystemen für den Port. (erlaubte Werte: native linux). JAVA_VENDOR Durch Leerzeichen getrennte Liste von geeigneten JDK-Port-Anbietern für den Port. (erlaubte Werte: freebsd bsdjava sun ibm blackdown). JAVA_BUILD Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Build-Abhängigkeiten des Ports hinzugefügt werden soll. JAVA_RUN Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Laufzeit-Abhängigkeiten des Ports hinzugefügt werden soll. JAVA_EXTRACT Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Extract-Abhängigkeiten des Ports hinzugefügt werden soll. USE_JIKES Legt fest, ob der Port den jikes Bytecode-Compiler zum Kompilieren benutzen soll. Wenn kein Wert für diese Variable gesetzt ist, wird der Port jikes für die Kompilierung benutzen– falls vorhanden. Sie können die Benutzung von jikes auch ausdrücklich verbieten oder erzwingen (durch Setzen auf 'no' oder 'yes'). Im letzteren Fall wird devel/jikes zu den Build-Abhängigkeiten des Ports hinzugefügt. In jedem Fall wird, wenn jikes tatsächlich statt javac zur Kompilierung benutzt wird, die Variable HAVE_JIKES von bsd.java.mk definiert.
Das Folgende ist eine Liste aller Variablen, die ein Port bekommt, nachdem er USE_JAVA gesetzt hat: Bereitgestellte Variablen für Ports, die Java benutzen Variable Wert JAVA_PORT Der Name des JDK-Ports (z.B. 'java/jdk14'). JAVA_PORT_VERSION Die volle Version des JDK Ports (z.B. '1.4.2'). Wenn Sie nur die ersten beiden Stellen dieser Versionsnummer benötigen, benutzen Sie ${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}. JAVA_PORT_OS Das vom JDK-Port benutzte Betriebssystem (z.B. 'linux'). JAVA_PORT_VENDOR Der Anbieter des JDK-Ports (z.B. 'sun'). JAVA_PORT_OS_DESCRIPTION Beschreibung des vom JDK-Port benutzten Betriebssystems (z.B. 'Linux'). JAVA_PORT_VENDOR_DESCRIPTION Beschreibung des Anbieters des JDK-Ports (z.B. 'FreeBSD Foundation'). JAVA_HOME Pfad zum Installationsverzeichnis des JDK (z.B. '/usr/local/jdk1.3.1'). JAVAC Pfad zum Java-Compiler, der benutzt werden soll (z.B. '/usr/local/jdk1.1.8/bin/javac' oder '/usr/local/bin/jikes'). JAR Pfad zum jar-Werkzeug, das benutzt werden soll (z.B. '/usr/local/jdk1.2.2/bin/jar' oder '/usr/local/bin/fastjar'). APPLETVIEWER Pfad zum appletviewer-Werkzeug (z.B. '/usr/local/linux-jdk1.2.2/bin/appletviewer'). JAVA Pfad zur java Binärdatei. Benutzen Sie dies, um Java-Programme auszuführen (z.B. '/usr/local/jdk1.3.1/bin/java'). JAVADOC Pfad zum javadoc-Werkzeug. JAVAH Pfad zum javah-Programm. JAVAP Pfad zum javap-Programm. JAVA_KEYTOOL Pfad zum keytool-Werkzeug. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher ist. JAVA_N2A Pfad zum native2ascii-Werkzeug. JAVA_POLICYTOOL Pfad zum policytool Programm. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher ist. JAVA_SERIALVER Pfad zum serialver-Werkzeug. RMIC Pfad zum RMI Stub/Skeleton-Generator, rmic. RMIREGISTRY Pfad zum RMI Registry-Werkzeug, rmiregistry. RMID Pfad zum RMI Daemon rmid. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher unterstützt. JAVA_CLASSES Pfad zum Archiv, das die JDK-Klassendateien enthält. Für das JDK 1.2 oder später ist dies ${JAVA_HOME}/jre/lib/rt.jar. Frühere JDKs benutzten ${JAVA_HOME}/lib/classes.zip. HAVE_JIKES Ist dann gesetzt, wenn jikes vom Port benutzt wird (s. USE_JIKES oben).
Sie können das java-debug make-Target benutzen, um Information zum Debuggen Ihres Ports zu erhalten. Es wird die Werte vieler der obenangegebenen Variablen anzeigen. Zusätzlich sind die folgenden Konstanten definiert, damit alle Java-Ports auf eine konsistente Art installiert werden können: Konstanten, die für Ports, welche Java benutzen, definiert sind Konstante Wert JAVASHAREDIR Das Basis-Verzeichnis für alles, was mit Java zusammenhängt. Standardmäßig ${PREFIX}/share/java. JAVAJARDIR Das Verzeichnis, wohin JAR-Dateien installiert werden sollen. Standardmäßig ${JAVASHAREDIR}/classes. JAVALIBDIR Das Verzeichnis, in dem JAR-Dateien, die von anderen Ports installiert wurden, liegen. Standardmäßig ${LOCALBASE}/share/java/classes.
Die entsprechenden Einträge sind sowohl in PLIST_SUB (dokumentiert in ) als auch in SUB_LIST definiert.
Kompilieren mit Ant Wenn der Port mit Apache Ant kompiliert werden soll, muss er USE_ANT setzen. Ant wird dann als das sub-make-Kommando betrachtet. Wenn kein do-build-Target vom Port definiert ist, wird eine Standardvorgabe benutzt, die einfach Ant entsprechend MAKE_ENV, MAKE_ARGS und ALL_TARGETS aufruft. Das ähnelt dem USE_GMAKE-Mechanismus, der in dokumentiert ist. Wenn jikes anstelle von javac benutzt wird (siehe USE_JIKES in ), dann wird Ant es automatisch benutzen, um den Port zu kompilieren. Optimales Verfahren Wenn Sie eine Java-Bibliothek portieren, sollte Ihr Port die JAR-Datei(en) in ${JAVAJARDIR} installieren, und alles andere unter ${JAVASHAREDIR}/${PORTNAME} (ausgenommen die Dokumentation - siehe unten). Um die Größe der Packlistendatei zu reduzieren, können die JAR-Datei(en) direkt im Makefile angegeben werden. Benutzen Sie einfach die folgende Anweisung (wobei myport.jar der Name der JAR-Datei ist, die als Teil des Ports installiert wird): PLIST_FILES+= %%JAVAJARDIR%%/myport.jar Beim Portieren einer Java-Applikation installiert der Port normalerweise alles unter einem einzigen Verzeichnis (inklusive seiner JAR-Abhängigkeiten). Die Benutzung von ${JAVASHAREDIR}/${PORTNAME} wird in dieser Beziehung dringend empfohlen. Es liegt im Entscheidungsbereich des Portierenden, ob der Port die zusätzlichen JAR-Abhängigkeiten unter diesem Verzeichnis installieren oder direkt die schon installierten (aus ${JAVAJARDIR}) benutzen soll. Unabhängig von der Art Ihres Ports (Bibliothek oder Applikation), sollte die zusätzliche Dokumentation an die gleiche Stelle installiert werden wie bei jedem anderen Port auch. Das JavaDoc-Werkzeug ist dafür bekannt einen unterschiedlichen Satz von Dateien abhängig von der Version des benutzten JDKs zu erstellen. Für Ports, die nicht die Benutzung eines bestimmten JDKs vorgeben, ist es deshalb eine komplexe Aufgabe die Packliste (pkg-plist) festzulegen. Dies ist ein Grund, warum dringend angeraten wird, das PORTDOCS-Makro zu benutzen. Außerdem, selbst wenn Sie den Satz von Dateien, den javadoc erzeugen wird, voraussagen können, die Größe der resultierenden pkg-plist befürwortet die Benutzung von PORTDOCS. Der Vorgabewert für DATADIR ist ${PREFIX}/share/${PORTNAME}. Es ist eine gute Idee, DATADIR für Java-Ports stattdessen auf ${JAVASHAREDIR}/${PORTNAME} zu setzen. In der Tat wird DATADIR automatisch zu PLIST_SUB (dokumentiert in ) hinzugefügt, d.h. Sie können %%DATADIR%% direkt in pkg-plist benutzen. Zu der Frage, ob Java-Ports aus dem Quelltext gebaut werden, oder direkt bereitgestellte binäre Distributionen benutzt werden sollten, gab es, als dies geschrieben wurde, keine definierte Richtlinie. Allerdings ermutigen Mitglieder des &os; Java-Projekts Porter dazu, Ihre Ports aus dem Quelltext kompilieren zu lassen, wann immer dies kein Problem darstellt. Alle Eigenschaften, die in diesem Abschnitt präsentiert wurden sind in bsd.java.mk implementiert. Sollten Sie jemals der Meinung sein, dass Ihr Port ausgefeiltere Java-Unterstützung benötigt, schauen Sie bitte erst in das bsd.java.mk CVS Log, weil es normalerweise immer etwas Zeit braucht bis die neuesten Eigenschaften dokumentiert sind. Wenn Sie glauben, dass der fehlende Support auch für viele andere Java Ports nützlich sein könnte, wenden Sie sich bitte an die &a.java;. Obwohl es eine java-Kategorie für Fehlerberichte gibt, bezieht sich diese auf die JDK-Portierungsbemühungen des &os; Java-Projektes. Deshalb sollten Sie Ihren Java-Port in der ports-Kategorie einreichen wie bei jeden anderen Port auch - es sei denn, die Angelegenheit, die Sie zu klären versuchen, steht in Zusammenhang entweder mit einer JDK-Implementierung oder bsd.java.mk. Gleichermaßen gibt es eine definierte Richtlinie für die CATEGORIES eines Java-Ports, die in erklärt wird.
Webanwendungen, Apache und PHP Apache Variablen für Ports, die Apache verwenden USE_APACHE Der Port benötigt Apache. Mögliche Werte: yes (beliebige Version), 1.3, 2.0, 2.2, 2.0+, etc. – Standard ist Version 1.3. WITH_APACHE2 Der Port benötigt Apache 2.0. Ist diese Variable nicht gesetzt, so benötigt der Port Apache 1.3. Diese Variable ist veraltet und sollte nicht mehr verwendet werden. APXS Vollständiger Pfad zu der apxs Binärdatei. Die Variable kann neu gesetzt werden. HTTPD Vollständiger Pfad zu der httpd Binärdatei. Die Variable kann neu gesetzt werden. APACHE_VERSION Beinhaltet die Versionsnummer des aktuell installierten Apache (nur lesbare Variable). Diese Variable ist nach Einbinden der Datei bsd.port.pre.mk verfügbar. Mögliche Werte: 13, 20, 22. APACHEMODDIR Verzeichnis der Apache-Module. Diese Variable wird automatisch in pkg-plist ersetzt. APACHEINCLUDEDIR Verzeichnis der Apache Header-Dateien. Diese Variable wird automatisch in pkg-plist ersetzt. APACHEETCDIR Verzeichnis der Apache-Konfigurationsdateien. Diese Variable wird automatisch in pkg-plist ersetzt.
Nützliche Variablen für Ports von Apache-Modulen MODULENAME Name des Moduls. Standardwert ist PORTNAME. Beispiel: mod_hello SHORTMODNAME Der gekürzte Name des Moduls. Standardmäßig wird der Wert von MODULENAME übernommen. Beispiel: hello AP_FAST_BUILD Verwende apxs zum Kompilieren und Installieren des Moduls. AP_GENPLIST Eine pkg-plist wird automatisch erzeugt. AP_INC Verzeichnis für zusätzliche Header-Dateien, die beim Kompilieren mitverwendet werden. AP_LIB Verzeichnis für zusätzliche Bibliothek-Dateien, welche beim Kompilieren mitverwendet werden. AP_EXTRAS Zusätzliche Flags für apxs.
Webanwendungen Webanwendungen sollten nach PREFIX/www/programmname installiert werden. Der Einfachheit halber ist dieser Pfad sowohl im Makefile als auch in pkg-plist als WWWDIR verfügbar. Der relative Pfad PREFIX ist hingegen im Makefile durch die Variable WWWDIR_REL festgelegt. Der Benutzername und die Benutzergruppe, mit deren Rechte Webanwendungen laufen, sind in WWWOWN und WWWGRP festgelegt. Standardwert ist bei beiden www. Falls ein Port mit anderen Rechten gestartet werden soll, so sollte die Anweisung WWWOWN?= myuser verwendet werden. Dies vereinfacht dem Benutzer eine Anpassung dieser Werte. Falls die Webanwendung nicht explizit Apache benötigt, so sollte dieser auch nicht als Abhängigkeit des Ports aufgeführt werden. Dadurch bleibt es dem Benutzer überlassen Apache oder einen anderen Webserver zu verwenden. PHP Variablen für Ports, die PHP verwenden USE_PHP Der Port benötigt PHP. Der Wert yes bewirkt eine Abhängigkeit des Ports von PHP. Es kann auch eine Liste der benötigten PHP-Erweiterungen angegeben werden. Beispiel: pcre xml gettext DEFAULT_PHP_VER Legt die Version von PHP fest, die standardmäßig installiert wird, falls noch kein PHP vorhanden ist. Standardwert ist 4. Mögliche Werte sind: 4,5 IGNORE_WITH_PHP Der Port funktioniert nicht mit der angegebenen Version von PHP. Mögliche Werte: 4, 5 USE_PHPIZE Der Port wird als PHP-Erweiterung gebaut. USE_PHPEXT Der Port wird wie eine PHP-Erweiterung behandelt – Installation und Eintragung in die PHP-Registry für Erweiterungen. USE_PHP_BUILD Setzt PHP als build-Anhängigkeit. WANT_PHP_CLI Benötigt die Kommandozeilen-Version von PHP. WANT_PHP_CGI Benötigt die CGI-Version von PHP. WANT_PHP_MOD Benötigt das Apache-Modul von PHP. WANT_PHP_SCR Benötigt die Kommandozeilen- oder die CGI-Version von PHP. WANT_PHP_WEB Benötigt das Apache-Modul oder die CGI-Version von PHP.
PEAR Module Das Portieren von PEAR-Modulen ist sehr einfach. Mit Hilfe der Variablen FILES, TESTS, DATA, SQLS, SCRIPTFILES, DOCS und EXAMPLES können die zu installierenden Dateien angegeben werden. Alle aufgeführten Dateien werden automatisch in die jeweiligen Verzeichnisse installiert und der Datei pkg-plist hinzugefügt. Die Datei ${PORTSDIR}/devel/pear/bsd.pear.mk muss am Ende des Makefiles eingebunden werden. Beispiel eines Makefiles für eine PEAR Klasse PORTNAME= Date PORTVERSION= 1.4.3 CATEGORIES= devel www pear MAINTAINER= example@domain.com COMMENT= PEAR Date and Time Zone Classes BUILD_DEPENDS= ${PEARDIR}/PEAR.php:${PORTSDIR}/devel/pear-PEAR RUN_DEPENDS= ${BUILD_DEPENDS} FILES= Date.php Date/Calc.php Date/Human.php Date/Span.php \ Date/TimeZone.php TESTS= test_calc.php test_date_methods_span.php testunit.php \ testunit_date.php testunit_date_span.php wknotest.txt \ bug674.php bug727_1.php bug727_2.php bug727_3.php \ bug727_4.php bug967.php weeksinmonth_4_monday.txt \ weeksinmonth_4_sunday.txt weeksinmonth_rdm_monday.txt \ weeksinmonth_rdm_sunday.txt DOCS= TODO _DOCSDIR= . .include <bsd.port.pre.mk> .include "${PORTSDIR}/devel/pear/bsd.pear.mk" .include <bsd.port.post.mk>
Python benutzen Die Ports unterstützen parallele Installationen mehrerer Python-Versionen. Ports sollten sicherstellen, dass der richtige python-Interpreter verwendet wird – entsprechend der durch den Benutzer definierbaren Variable PYTHON_VERSION. Häufig bedeutet dies, dass der Pfad zum python-Interpreter durch den Wert der Variablen PYTHON_CMD ersetzt werden muss. Ports, die Dateien unter PYTHON_SITELIBDIR installieren, sollten pyXY- als Präfix des Paketnamens haben, sodass in deren Paketname die zugehörige Python Version aufgeführt wird. PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} Nützliche Variablen für Ports, die Python verwenden USE_PYTHON Der Port benötigt Python. Die minimal benötigte Version kann durch Werte wie 2.3+ angegeben werden. Bereiche von Versionsnummern können durch Angabe der minimalen und maximalen Versionsnummer, getrennt durch einen Gedankenstrich, festgelegt werden, z.B.: 2.1-2.3 USE_PYDISTUTILS Verwende Python-distutils zum Konfigurieren, Kompilieren und Installieren. Dies ist erforderlich, falls der Port eine setup.py-Datei beinhaltet. Dadurch werden die do-build und do-install-Ziele und eventuell auch das do-configure-Ziel übergangen, falls GNU_CONFIGURE nicht definiert ist. PYTHON_PKGNAMEPREFIX Wird als PKGNAMEPREFIX verwendet, um Pakete für unterschiedliche Python-Versionen zu trennen. Beispiel: py24- PYTHON_SITELIBDIR Verzeichnis des site-Pakete Baums, der das Installationsverzeichnis von Python (üblicherweise LOCALBASE) beinhaltet. Die PYTHON_SITELIBDIR-Variable kann sehr nützlich bei der Installation von Python-Modulen sein. PYTHONPREFIX_SITELIBDIR Die präfix-freie Variante von PYTHON_SITELIBDIR. Benutzen Sie immer %%PYTHON_SITELIBDIR%% in pkg-plist, wenn möglich. Der Standardwert von %%PYTHON_SITELIBDIR%% ist lib/python%%PYTHON_VERSION%%/site-packages PYTHON_CMD Kommandozeilen-Interpreter für Python mit Versionsnummer. PYNUMERIC Liste der Abhängigkeiten für numerische Erweiterungen. PYNUMPY Liste der Abhängigkeiten für die neue numerische Erweiterung numpy. (PYNUMERIC ist vom Anbieter als veraltet deklariert) PYXML Liste der Abhängigkeiten für XML-Erweiterungen (wird ab Python 2.0 nicht mehr benötigt, da im Basispaket enthalten). USE_TWISTED Setzt die Abhängigkeit des Ports von twistedCore. Die Liste der erforderlichen Komponenten kann als Wert spezifiziert werden. Beispiel: web lore pair flow USE_ZOPE Setzt Zope, eine Plattform für Webanwendungen, als Abhängigkeit des Ports. Setzt die Versionsabhängigkeit von Python auf 2.3. Setzt ZOPEBASEDIR auf das Verzeichnis, in welches Zope installiert wurde.
Eine vollständige Liste aller verfügbaren Variablen ist in /usr/ports/Mk/bsd.python.mk zu finden.
Emacs benutzen Dieser Abschnitt muss noch geschrieben werden. Ruby benutzen Nützliche Variablen für Ports, die Ruby verwenden Variable Description USE_RUBY Der Port benötigt Ruby. USE_RUBY_EXTCONF Der Port verwendet extconf.rb für die Konfiguration. USE_RUBY_SETUP Der Port verwendet setup.rb für die Konfiguration. RUBY_SETUP Legt den alternativen Namen von setup.rb fest. Üblich ist der Wert install.rb.
Die folgende Tabelle listet ausgewählte Variablen auf, die Portautoren über die Port-Infrastruktur zur Verfügung stehen. Diese Variablen sollten für die Installation von Dateien in die entsprechenden Verzeichnisse verwendet werden. Sie sollten in pkg-plist so häufig wie möglich verwendet und in einem Port nicht neu definiert werden. Ausgewählte read-only-Variablen für Ports, die Ruby verwenden Variable Beschreibung Beispiel RUBY_PKGNAMEPREFIX Wird als PKGNAMEPREFIX verwendet, um Pakete für verschiedene Versionen von Ruby zu unterscheiden. ruby18- RUBY_VERSION Vollständige Version von Ruby in der Form x.y.z. 1.8.2 RUBY_SITELIBDIR Installationsverzeichnis der von der Rechnerarchitektur unabhängigen Bibliotheken. /usr/local/lib/ruby/site_ruby/1.8 RUBY_SITEARCHLIBDIR Installationsverzeichnis der von der Rechnerarchitektur abhängigen Bibliotheken. /usr/local/lib/ruby/site_ruby/1.8/amd64-freebsd6 RUBY_MODDOCDIR Installationsverzeichnis für die Dokumentation der Module. /usr/local/share/doc/ruby18/patsy RUBY_MODEXAMPLESDIR Installationsverzeichnis für die Beispiele der Module. /usr/local/share/examples/ruby18/patsy
Eine vollständige Liste der verfügbarenVariablen kann in /usr/ports/Mk/bsd.ruby.mk eingesehen werden.
SDL verwenden Die Variable USE_SDL wird für die automatische Konfiguration der Abhängigkeiten für Ports benutzt, die auf SDL basierende Bibliotheken wie devel/sdl12 und x11-toolkits/sdl_gui verwenden. Die folgenden SDL-Bibliotheken sind derzeit bekannt: sdl: devel/sdl12 gfx: graphics/sdl_gfx gui: x11-toolkits/sdl_gui image: graphics/sdl_image ldbad: devel/sdl_ldbad mixer: audio/sdl_mixer mm: devel/sdlmm net: net/sdl_net sound: audio/sdl_sound ttf: graphics/sdl_ttf Falls ein Port z.B. von net/sdl_net und audio/sdl_mixer abhängt, so wäre die Syntax: USE_SDL= net mixer Die Abhängigkeit von devel/sdl12, die durch net/sdl_net und audio/sdl_mixer entsteht, wird automatisch zum Port hinzugefügt. Falls USE_SDL im Port verwendet wird, so wird automatisch: die Abhängigkeit von sdl12-config zu BUILD_DEPENDS hinzugefügt die Variable SDL_CONFIG zu CONFIGURE_ENV hinzugefügt die Abhängigkeit der ausgewählten Bibliotheken zu LIB_DEPENDS hinzugefügt Um zu überprüfen, ob die SDL-Bibliotheken verfügbar sind, kann die Variable WANT_SDL verwendet werden: WANT_SDL=yes .include <bsd.port.pre.mk> .if ${HAVE_SDL:Mmixer}!="" USE_SDL+= mixer .endif .include <bsd.port.post.mk> <application>wxWidgets</application> verwenden Dieser Abschnitt beschreibt den Status der wxWidgets-Bibliotheken in den Ports und deren Einbindung in das Ports-System. Einführung Es gibt viele Probleme bei der gleichzeitigen Verwendung unterschiedlicher Versionen von wxWidgets-Bibliotheken (Dateien unterschiedlicher wxWidgets-Versionen haben denselben Dateinamen). In den Ports wurde das Problem dadurch gelöst, dass jede Version unter einem eigenen Namen installiert wird, der die Versionsnummer als Suffix beinhaltet. Der offensichtliche Nachteil dabei ist, dass jede Anwendung so verändert werden muss, dass sie die erwartete Version vorfindet. Die meisten solcher Anwendungen benutzen das wx-config-Skript, um die benötigten Compiler- und Linkerflags zu erhalten. Dieses Skript hat für jede verfügbare Version einen anderen Namen. Die meisten Anwendungen beachten eine Umgebungsvariable oder ein Argument beim configure-Skript, um das gewünschte wx-config-Skript festzulegen. Ansonsten müssen sie gepatcht werden. Auswahl der Version Um festzulegen, welche Version der wxWidgets verwendet werden soll, gibt es zwei Variablen (falls nur eine der beiden definiert wird, so wird die andere auf einen Standardwert gesetzt): Variablen, um die <application>wxWidgets</application>-Version festzulegen Variable Beschreibung Standardwert USE_WX Liste der Versionen, die der Port verwenden kann Alle verfügbaren Versionen USE_WX_NOT Liste der Versionen, die der Port nicht verwenden kann Nichts
Es folgt eine Liste an möglichen wxWidgets-Versionen und deren zugehöriger Port: Verfügbare <application>wxWidgets</application>-Versionen Version Port 2.4 x11-toolkits/wxgtk24 2.6 x11-toolkits/wxgtk26 2.8 x11-toolkits/wxgtk28
Ab Version 2.5 werden auch Versionen in Unicode unterstützt und über einen Unterport mit dem Suffix -unicode installiert. Dies kann aber auch über Variablen gehandhabt werden (siehe ). Die Variablen in können auf einen oder mehrere (durch Leerzeichen getrennt) der folgenden Werte gesetzt werden: Spezifikationen der <application>wxWidgets</application>-Versionen Beschreibung Beispiel Einzelne Version 2.4 Aufsteigende Versionsnummern 2.4+ Absteigende Versionsnummern 2.6- Versionsinterval (muss aufsteigend sein) 2.4-2.6
Desweiteren gibt es Variablen, über die eine bevorzugte Version festgelegt werden kann. Die Versionen können als Liste angegeben werden, wobei die Reihenfolge der Priorisierung entspricht. Variablen zur Festlegung der bevorzugten <application>wxWidgets</application>-Version Name Bestimmt für WANT_WX_VER den Port WITH_WX_VER den Benutzer
Komponentenauswahl Desweiteren gibt es Anwendungen, die nicht direkt wxWidgets-Bibliotheken sind, aber trotzdem mit diesen zusammenhängen. Diese Anwendungen können über die Variable WX_COMPS festgelegt werden. Die folgenden Komponenten sind verfügbar: Verfügbare <application>wxWidgets</application>-Komponenten Name Beschreibung Versionsbeschränkungen wx Hauptbibliothek Nichts contrib Beigesteuerte Bibliothek Nichts python wxPython (Python-Bindungen) 2.4-2.6 mozilla wxMozilla 2.4 svg wxSVG 2.6
Der Typ der Abhängigkeit kann für jede Komponente durch hinzufügen eines Suffix (durch Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht angegeben wird, wird ein Standardwert verwendet (siehe ). Die folgenden Typen sind verfügbar: Verfügbare Typen von <application>wxWidgets</application>-Abhängigkeiten Name Beschreibung build Komponente wird zum Bau benötigt – äquivalent zu BUILD_DEPENDS run Komponente wird zum Ausführen benötigt – äquivalent zu RUN_DEPENDS lib Komponente wird zum Bau und Ausführen benötigt – äquivalent zu LIB_DEPENDS
Die Standardwerte für die einzelnen Komponenten sind in der folgenden Tabelle aufgeführt: Standardtypen der <application>wxWidgets</application>-Abhängigkeiten Komponente Typ der Abhängigkeit wx lib contrib lib python run mozilla lib svg lib
Auswahl von <application>wxWidgets</application>-Komponenten Der folgende Ausschnitt entspricht einem Port, der die wxWidgets-Version 2.4 und die zugehörigen Bibliotheken verwendet. USE_WX= 2.4 WX_COMPS= wx contrib
Unicode Die wxWidgets-Bibliotheken unterstützen Unicode seit der Version 2.5. In den Ports sind beide Versionen verfügbar und können über die folgenden Variablen ausgewählt werden: Variablen, um Unicode in den <application>wxWidgets</application>-Versionen auszuwählen Variable Beschreibung Bestimmt für WX_UNICODE Der Port funktioniert ausschließlich mit der Unicode-Version den Port WANT_UNICODE Der Port funktioniert in beiden Versionen – bevorzugt wird jedoch Unicode den Port WITH_UNICODE Der Port verwendet die Unicode-Version den Benutzer WITHOUT_UNICODE Der Port verwendet, falls unterstützt, die normale Version (falls WX_UNICODE nicht definiert ist) den Benutzer
Die Variable WX_UNICODE darf nicht bei Ports benutzt werden, die sowohl die Version mit als auch ohne Unterstützung für Unicode verwenden können. Falls der Port standardmäßig Unterstützung für Unicode bieten soll, verwenden Sie WANT_UNICODE stattdessen.
Feststellen der installierten Version Um eine bereits installierte Version zu finden, muss WANT_WX definiert werden. Falls diese Variable nicht auf eine bestimmte Versionsnummer gesetzt wird, werden die Komponenten einen Suffix mit der Versionsnummer tragen. Die Variable HAVE_WX wird gesetzt, falls eine installierte Version vorgefunden wurde. Installierte <application>wxWidgets</application>-Versionen und –Komponenten feststellen Der folgende Ausschnitt kann in einem Port verwendet werden, der wxWidgets verwendet, falls es installiert ist, oder falls eine Option dafür ausgewählt wurde. WANT_WX= yes .include <bsd.port.pre.mk> .if defined(WITH_WX) || ${HAVE_WX:Mwx-2.4} != "" USE_WX= 2.4 CONFIGURE_ARGS+=--enable-wx .endif Der folgende Ausschnitt kann verwendet werden, um die Unterstützung für wxPython zusätzlich zu der von wxWidgets zu aktivieren (beide in Version 2.6), wenn das installiert ist, oder die Option ausgewählt wurde. USE_WX= 2.6 WX_COMPS= wx WANT_WX= 2.6 .include <bsd.port.pre.mk> .if defined(WITH_WXPYTHON) || ${HAVE_WX:Mpython} != "" WX_COMPS+= python CONFIGURE_ARGS+=--enable-wxpython .endif Vordefinierte Variablen Die folgenden Variablen sind in den Ports verfügbar (nachdem sie entsprechend definiert wurden). Vordefinierte Variablen für Ports, die <application>wxWidgets</application> verwenden Name Beschreibung WX_CONFIG Pfad zum wxWidgets wx-config-Skript (mit unterschiedlichem Namen) WXRC_CMD Pfad zum wxWidgets wxrc-Programm (mit unterschiedlichem Namen) WX_VERSION Version der wxWidgets, die verwendet werden soll (z.B. 2.6) WX_UNICODE Falls Unterstützung für Unicode nicht explizit definiert, jedoch verwendet wird, dann wird die Unterstützung automatisch aktiviert.
Verarbeitung in <filename>bsd.port.pre.mk</filename> Falls die Variablen gleich nach dem Importieren von bsd.port.pre.mk benutzt werden sollen, so muss die Variable WX_PREMK definiert werden. Falls WX_PREMK definiert ist, so werden Version, Abhängigkeiten, Komponenten und vordefinierte Variablen nicht geändert, wenn die Variablen des wxWidgets-Ports nach dem Einbinden von bsd.port.pre.mk geändert werden. Verwendung von <application>wxWidgets</application>-Variablen in Kommandos Der folgende Ausschnitt zeigt die Verwendung von WX_PREMK durch Ausführen des wx-config-Skriptes, um die vollständige Version als Zeichenkette zu erhalten, diese dann einer Variablen zuzuweisen und die Variable anschließend einem Programm zu übergeben. USE_WX= 2.4 WX_PREMK= yes .include <bsd.port.pre.mk> .if exists(${WX_CONFIG}) VER_STR!= ${WX_CONFIG} --release PLIST_SUB+= VERSION="${VER_STR}" .endif Die wxWidgets-Variablen können problemlos in Kommandos benutzt werden, falls diese in Targets ohne gesetztes WX_PREMK verwendet werden. Weitere <command>configure</command>-Argumente Einige GNU configure-Skripte können wxWidgets nicht auffinden, falls nur die Umgebungsvariable WX_CONFIG gesetzt ist, sondern benötigen zusätzliche Argumente. Dafür kann die Variable WX_CONF_ARGS benutzt werden. Zulässige Werte für <makevar>WX_CONF_ARGS</makevar> Möglicher Wert Resultierendes Argument absolute --with-wx-config=${WX_CONFIG} relative --with-wx=${X11BASE} --with-wx-config=${WX_CONFIG:T}
Verwendung von <application>Lua</application> Dieser Abschnitt beschreibt den Status der Lua-Bibliotheken in den Ports und deren Einbindung in das Ports System. Einführung Es gibt viele Probleme bei der gleichzeitigen Verwendung unterschiedlicher Versionen von Lua-Bibliotheken (Dateien unterschiedlicher Versionen haben denselben Dateinamen). In den Ports wurde das Problem gelöst, indem jede Version unter einem eigenen Namen mit der Versionsnummer als Suffix installiert wird. Der offensichtliche Nachteil dabei ist, dass jede Anwendung so verändert werden muss, dass sie die erwartete Version vorfindet. Dies kann jedoch durch zusätzliche Flags für Compiler und Linker gelöst werden. Auswahl der Version Um festzulegen, welche Version von Lua verwendet werden soll, gibt es zwei Variablen (falls nur eine der beiden definiert ist, so wird die andere auf einen Standardwert gesetzt): Variablen, um die <application>Lua</application>-Version festzulegen Variable Beschreibung Standardwert USE_LUA Liste der Versionen, welche der Port verwenden kann Alle verfügbaren Versionen USE_LUA_NOT Liste der Versionen, die der Port nicht verwenden kann Nichts
Es folgt eine Liste an möglichen Lua-Versionen und deren zugehöriger Port: Verfügbare <application>Lua</application>-Versionen Version Port 4.0 lang/lua4 5.0 lang/lua50 5.1 lang/lua
Die Variablen in können auf einen oder mehrere (durch Leerzeichen getrennt) der folgenden Werte gesetzt werden: Spezifikationen der <application>Lua</application>-Versionen Beschreibung Beispiel Spezielle Version 4.0 Aufsteigende Versionen 5.0+ Absteigende Versionen 5.0- Versionenintervall (muss aufsteigend sein) 5.0-5.1
Desweiteren gibt es Variablen, über die eine bevorzugte Version festgelegt werden kann. Die Versionen können als Liste angegeben werden, wobei die Reihenfolge der Priorisierung entspricht. Variablen zur Festlegung der bevorzugten <application>Lua</application>-Version Name Bestimmt für WANT_LUA_VER den Port WITH_LUA_VER den Benutzer
Auswahl der <application>Lua</application>-Version Der folgende Ausschnitt entspricht einem Port, der Lua in den Versionen 5.0 oder 5.1 verwenden kann und standardmäßig 5.0 verwendet. Diese Einstellung kann durch die benutzerdefinierte Variable WITH_LUA_VER überschrieben werden. USE_LUA= 5.0-5.1 WANT_LUA_VER= 5.0
Komponentenauswahl Desweiteren gibt es Anwendungen, die nicht direkt Lua-Bibliotheken sind, aber trotzdem mit diesen zusammenhängen. Diese Anwendungen können über die Variable LUA_COMPS festgelegt werden. Die folgenden Komponenten sind verfügbar: Verfügbare <application>Lua</application>-Komponenten Name Beschreibung Versionseinschränkungen lua Hauptbibliothek Keine tolua Bibliothek für die Unterstützung von C/C++-Code 4.0-5.0 ruby Ruby-Bindungen 4.0-5.0
Es gibt weitere Komponenten, die jedoch Module für den Interpreter sind und nicht von Anwendungen benutzt werden (nur von anderen Modulen). Der Typ der Abhängigkeit kann für jede Komponente durch Hinzufügen eines Suffix (durch Strichpunkt getrennt) festgelegt werden. Falls der Typ nicht angegeben wird, wird ein Standardwert verwendet (siehe ). Die folgenden Typen sind verfügbar: Verfügbare Typen von <application>Lua</application>-Abhängigkeiten Name Beschreibung build Komponente wird zum Bau benötigt – äquivalent zu BUILD_DEPENDS run Komponente wird zum Ausführen benötigt – äquivalent zu RUN_DEPENDS lib Komponente wird zum Bau und zum Ausführen benötigt – äquivalent zu LIB_DEPENDS
Die Standardwerte für die einzelnen Komponenten sind in der folgenden Tabelle aufgeführt: Standardtypen für <application>Lua</application>-Abhängigkeiten Komponente Typ der Abhängigkeit lua lib für 4.0-5.0 (shared) und build für 5.1 (static) tolua build (static) ruby lib (shared)
Auswahl von <application>Lua</application>-Komponenten Der folgende Ausschnitt entspricht einem Port, welcher die Lua-Version 4.0 und die zugehörigen Ruby-Bindungen verwendet. USE_LUA= 4.0 LUA_COMPS= lua ruby
Feststellen der installierten Version Um eine bereits installierte Version zu finden, muss WANT_LUA definiert werden. Falls diese Variable nicht auf eine bestimmte Versionsnummer gesetzt wird, werden die Komponenten einen Suffix mit der Versionsnummer tragen. Die Variable HAVE_LUA wird gesetzt, falls eine installierte Version vorgefunden wurde. Installierte <application>Lua</application>-Versionen und– Komponenten feststellen Der folgende Ausschnitt kann in einem Port verwendet werden, der Lua benutzt, falls es installiert ist oder eine Option dafür ausgewählt wurde. WANT_LUA= yes .include <bsd.port.pre.mk> .if defined(WITH_LUA5) || ${HAVE_LUA:Mlua-5.[01]} != "" USE_LUA= 5.0-5.1 CONFIGURE_ARGS+=--enable-lua5 .endif Der folgende Ausschnitt kann verwendet werden, um die Unterstützung für tolua zusätzlich zu der von Lua zu aktivieren (beide in Version 4.0), wenn dies installiert ist oder die Option ausgewählt wurde. USE_LUA= 4.0 LUA_COMPS= lua WANT_LUA= 4.0 .include <bsd.port.pre.mk> .if defined(WITH_TOLUA) || ${HAVE_LUA:Mtolua} != "" LUA_COMPS+= tolua CONFIGURE_ARGS+=--enable-tolua .endif Vordefinierte Variablen Die folgenden Variablen sind in den Ports verfügbar (nachdem sie entsprechend definiert wurden). Vordefinierte Variablen für Ports, die <application>Lua</application> verwenden Name Beschreibung LUA_VER Die Lua-Version, die verwendet wird (z.B. 5.1) LUA_VER_SH Die Hauptversion für shared-Lua-Bibliotheken (z.B. 1) LUA_VER_STR Die Lua-Version ohne die Punkte (z.B. 51) LUA_PREFIX Der Präfix, unter dem Lua (und Komponenten) installiert ist LUA_SUBDIR Das Verzeichnis unter ${PREFIX}/bin, ${PREFIX}/share und ${PREFIX}/lib, in welchem Lua installiert ist LUA_INCDIR Das Verzeichnis, in dem Lua- und tolua-Header-Dateien installiert sind LUA_LIBDIR Das Verzeichnis, in dem Lua– und tolua-Bibliotheken installiert sind LUA_MODLIBDIR Das Verzeichnis, in dem Lua Modul-Bibliotheken (.so) installiert sind LUA_MODSHAREDIR Das Verzeichnis, in dem Lua-Module (.lua) installiert sind LUA_PKGNAMEPREFIX Der Paketnamen-Präfix, der von Lua-Modulen verwendet wird LUA_CMD Das Verzeichnis, in dem der Lua-Interpreter liegt LUAC_CMD Das Verzeichnis, in dem der Lua-Compiler liegt TOLUA_CMD Das Verzeichnis, in dem das tolua-Programm liegt
Einem Port mitteilen, in welchem Verzeichnis <application>Lua</application> liegt Der folgende Ausschnitt zeigt, wie einem Port, welcher ein configure-Skript verwendet, mitgeteilt werden kann, wo die Lua-Header-Dateien und Bibliotheken liegen. USE_LUA= 4.0 GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="-I${LUA_INCDIR}" LDFLAGS="-L${LUA_LIBDIR}"
Verarbeitung in <filename>bsd.port.pre.mk</filename> Falls die Variablen gleich nach dem Einbinden von bsd.port.pre.mk benutzt werden sollen, so muss die Variable LUA_PREMK definiert werden. Falls LUA_PREMK definiert ist, so werden Version, Abhängigkeiten, Komponenten und vordefinierte Variablen nicht geändert, wenn die Variablen des Lua-Ports nach dem Einbinden von bsd.port.pre.mk geändert werden. Verwendung von <application>Lua</application>-Variablen in Kommandos Der folgende Ausschnitt zeigt die Verwendung von LUA_PREMK durch Ausführen des Lua-Interpreters, um die vollständige Version als Zeichenkette zu erhalten, diese dann einer Variablen zuzuweisen und die Variable schließlich einem Programm zu übergeben. USE_LUA= 5.0 LUA_PREMK= yes .include <bsd.port.pre.mk> .if exists(${LUA_CMD}) VER_STR!= ${LUA_CMD} -v CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}" .endif Die Lua-Variablen können problemlos in Befehlen benutzt werden, falls diese in Targets ohne gesetztes LUA_PREMK verwendet werden.
Xfce verwenden Die USE_XFCE-Variable wird für die automatische Konfiguration der Abhängigkeiten eingesetzt, welche die Xfce-Basisbibliotheken oder Anwendungen wie x11-toolkits/libxfce4gui und x11-wm/xfce4-panel verwenden. Die folgenden Xfce-Bibliotheken und -Anwendungen werden derzeit unterstützt: libexo: x11/libexo libgui: x11-toolkits/libxfce4gui libutil: x11/libxfce4util libmcs: x11/libxfce4mcs mcsmanager: sysutils/xfce4-mcs-manager panel: x11-wm/xfce4-panel thunar: x11-fm/thunar wm: x11-wm/xfce4-wm xfdev: dev/xfce4-dev-tools Die folgenden zusätzlichen Parameter werden unterstützt: configenv: Benutzen Sie dies, wenn Ihr Port eine speziell angepasste CONFIGURE_ENV-Variable benötigt, um seine erforderlichen Bibliotheken zu finden. -I${LOCALBASE}/include -L${LOCALBASE}/lib wird CPPFLAGS hinzugefügt und ergibt CONFIGURE_ENV. Wenn also ein Port von sysutils/xfce4-mcs-manager abhängt und die speziellen CPPFLAGS in seiner configure-Umgebung verlangt, dann würde die Syntax wie folgt aussehen: USE_XFCE= mcsmanager configenv Starten und Anhalten von Diensten (rc Skripten) rc.d-Skripten werden zum Starten von Diensten während des Systemstarts verwendet und um den Administratoren einen Standardweg zum Anhalten und Starten von Diensten zu bieten. Ports halten sich an dieses systemweite rc.d-Framework. Details zu deren Benutzung können im rc.d Kapitel des Handbuchs nachgelesen werden. Ausführliche Beschreibungen der verfügbaren Befehle stehen in &man.rc.8; und &man.rc.subr.8;. Desweiteren gibt es einen Artikel zu praktischen Aspekten bezüglich rc.d-Skripten. Ein oder mehrere rc-Skripten können installiert werden mittels: USE_RC_SUBR= doormand Skripten müssen im Unterverzeichnis files abgelegt und jeder Skript-Datei muss ein .in-Suffix hinzugefügt werden. Der einzige Unterschied zu einem rc.d-Skript aus dem Basissystem ist, dass die Zeile . /etc/rc.subr in . %%RC_SUBR%% umbenannt werden muss, da ältere Versionen von &os; die Datei /etc/rc.subr nicht besitzen. Standarderweiterungen wie SUB_LIST werden ebenfalls unterstützt. Die Verwendung von %%PREFIX%%, %%LOCALBASE%% und %%X11BASE%% wird dringend empfohlen. Näheres zu SUB_LIST kann im zugehörigen Kapitel nachgelesen werden. Für &os;-Versionen, die älter als 6.1-RELEASE sind, ist die Integration mittels &man.rcorder.8; möglich, indem USE_RCORDER anstatt USE_RC_SUBR verwendet wird. Die Verwendung dieser Methode wird aber nicht mehr empfohlen. Seit &os; 6.1-RELEASE sind lokale rc.d-Skripten (inklusive der durch Ports installierten) im allgemeinen &man.rcorder.8; des Basissystems. Beispiel eines einfachen rc.d-Skripts: #!/bin/sh # PROVIDE: doormand # REQUIRE: LOGIN # # Add the following lines to /etc/rc.conf.local or /etc/rc.conf # to enable this service: # # doormand_enable (bool): Set to NO by default. # Set it to YES to enable doormand. # doormand_config (path): Set to %%PREFIX%%/etc/doormand/doormand.cf # by default. # . %%RC_SUBR%% name="doormand" rcvar=${name}_enable command=%%PREFIX%%/sbin/${name} pidfile=/var/run/${name}.pid load_rc_config $name : ${doormand_enable="NO"} : ${doormand_config="%%PREFIX%%/etc/doormand/doormand.cf"} command_args="-p $pidfile -f $doormand_config" run_rc_command "$1" Für die Wertzuweisung von Variablen sollte "=" anstatt ":=" verwendet werden, da bei Ersterem nur auf einen Standardwert gesetzt wird, wenn die Variable vorher noch nicht gesetzt war, und bei Letzterem dieser gesetzt wird, auch wenn der Wert vorher Null gewesen ist. Ein Benutzer kann durchaus einen Ausdruck wie doormand_flags="" in seiner rc.conf.local-Datei stehen haben, und eine Variablenzuweisung mittels ":=" würde in diesem Fall die Benutzerdefinition überschreiben. Der Suffix des rc-Skriptes wird durch RC_SUBR_SUFFIX für die weitere Verwendung im Makefile des Ports bereitgestellt. Aktuelle Versionen von &os; fügen keinen Suffix den Skriptnamen hinzu im Gegensatz zu ältere Versionen, die dies mit dem Suffix .sh taten. Es sollten keine weiteren Skripten mit der .sh-Endung hinzugefügt werden. Irgendwann wird es ein Massenumbenennen aller Skripten im Repository geben, die immer noch diese Endung haben. Anhalten und Deinstallieren von Diensten Es ist möglich, dass ein Dienst während der Deinstallation automatisch angehalten wird. Es wird empfohlen dieses Verhalten nur zu implementieren, wenn es unbedingt erforderlich ist zuerst den Dienst anzuhalten und dann die Dateien zu entfernen. Normalerweise sollte es dem Administrator überlassen werden, ob ein Dienst durch Deinstallieren angehalten werden soll. Dies betrifft auch den Vorgang des Aktualisierens. Der Datei pkg-plist sollte eine Zeile wie folgt zugefügt werden: @stopdaemon doormand Das Argument muss dabei mit dem Inhalt der USE_RC_SUBR-Variablen übereinstimmen.
Fortgeschrittene <filename>pkg-plist</filename>-Methoden Änderungen an <filename>pkg-plist</filename> mit Hilfe von make-Variablen Einige Ports, insbesondere die p5--Ports, müssen, abhängig von ihren Konfigurationsoptionen (oder im Falle der p5-Ports von der perl-Version), die pkg-plist verändern. Um dies zu vereinfachen, werden für jeden Eintrag in pkg-plist die Variablen %%OSREL%%, %%PERL_VER%% und %%PERL_VERSION%% durch die jeweiligen Werte ersetzt. Der Wert von %%OSREL%% ist die Revisionsnummer des Betriebssystems (z.B. 4.9). %%PERL_VERSION%% gibt die vollständige Versionsnummer von perl (z.B. 5.00502) und %%PERL_VER%% die Versionsnummer ohne Patchlevel (z.B. 5.005) an. Weitere, die Dokumentationsdateien des Ports betreffende %%VARS%%, werden im entsprechenden Abschnitt erläutert. Falls Sie weitere Ersetzungen von Variablen durchführen müssen, können Sie in der Variable PLIST_SUB eine Liste von VAR=VALUE-Paaren angeben, wobei in der pkg-plist %%VAR%% durch VALUE ersetzt wird. Wenn Sie z.B. einen Port haben, der viele Dateien in ein versionsspezifisches Unterverzeichnis installiert, dann können Sie etwas wie OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} in das Makefile schreiben und %%OCTAVE_VERSION%% verwenden, unabhängig davon, wo die Variable in pkg-plist verwendet wird. In diesem Fall müssen Sie bei einem Upgrade des Ports nicht dutzende (oder manchmal sogar hunderte) Zeilen in pkg-plist anpassen. Diese Ersetzung (ebenso wie das Hinzufügen weiterer Manualpages) wird zwischen den pre-install- und do-install-Targets ausgeführt, indem aus PLIST gelesen und in TMPPLIST geschrieben wird (Standard: WRKDIR/.PLIST.mktmp). Falls Ihr Port also PLIST während dem Erstellen generiert, so sollte dies vor oder in pre-install geschehen. Muss Ihr Port die resultierende Datei verändern, so sollte dies in post-install mit der Ausgabedatei TMPPLIST erfolgen. Eine weitere Möglichkeit, die Paketliste eines Ports zu verändern, besteht darin die Variablen PLIST_FILES und PLIST_DIRS zu setzen. Der Wert jeder der beiden Variablen stellt eine Liste von Pfadnamen dar, die zusammen mit dem Inhalt von PLIST in TMPPLIST geschrieben wird. Dabei unterliegen die Namen in PLIST_FILES und PLIST_DIRS der weiter oben beschriebenen Substitution von %%VAR%%. Die Namen aus PLIST_FILES werden ansonsten unverändert in die endgültige Paketliste übernommen, während den Namen aus PLIST_DIRS noch der Wert von @dirrm vorangestellt wird. Damit die Verwendung von PLIST_FILES und PLIST_DIRS überhaupt möglich ist, müssen diese gesetzt werden, bevor TMPPLIST geschrieben wird – z.B. in pre-install oder vorher. Leere Verzeichnisse Aufräumen leerer Verzeichnisse Bitte sorgen Sie dafür, dass ihre Ports bei der Deinstallation leere Verzeichnisse löschen. Dazu wird für jedes Verzeichnis, das der Port erzeugt hat, eine @dirrm-Zeile angegeben. Um ein Verzeichnis zu löschen müssen Sie zuerst dessen Unterverzeichnisse entfernen. : lib/X11/oneko/pixmaps/cat.xpm lib/X11/oneko/sounds/cat.au : @dirrm lib/X11/oneko/pixmaps @dirrm lib/X11/oneko/sounds @dirrm lib/X11/oneko Es kann allerdings auch vorkommen, dass @dirrm Fehler ausgibt, da andere Ports ein Verzeichnis ebenfalls nutzen. Deshalb können Sie @dirrmtry verwenden, um nur Verzeichnisse zu löschen, die wirklich leer sind, und damit Warnhinweise vermeiden. @dirrmtry share/doc/gimp Dadurch wird es weder eine Fehlermeldung geben noch wird &man.pkg.delete.1; abnormal beendet werden - auch dann nicht, wenn ${PREFIX}/share/doc/gimp nicht leer ist, da andere Ports hier ebenfalls Dateien installiert haben. Erstellen leerer Verzeichnisse Um leere Verzeichnisse während der Installation eines Ports zu erstellen, bedarf es etwas Aufmerksamkeit. Diese Verzeichnisse werden nicht erstellt, wenn das Paket installiert wird, da Pakete nur die Dateien speichern und &man.pkg.add.1; nur die Verzeichnisse erstellt, die dafür benötigt werden. Um sicher zu gehen, dass das leere Verzeichnis erstellt wird, wenn ein Paket installiert wird, muss die folgende Zeile in pkg-plist über der entsprechenden @dirrm Zeile eingetragen werden: @exec mkdir -p %D/share/foo/templates Konfigurationsdateien Sollte Ihr Port Konfigurationsdateien in PREFIX/etc benötigen, so sollten Sie diese nicht einfach installieren und in pkg-plist auflisten. Dies würde &man.pkg.delete.1; veranlassen, diese Dateien zu löschen, selbst wenn wenn sie vom Benutzer editiert wurden. Stattdessen sollten Beispieldateien mit einem entsprechenden Suffix (beispielsweise filename.sample) versehen werden. Ist die Konfigurationsdatei nicht vorhanden, so sollte die Beispieldatei an deren Platz kopiert werden. Bei der Deinstallation sollte die Konfigurationsdatei gelöscht werden, aber nur, wenn sie nicht vom Benutzer verändert wurde. Das alles muss sowohl im Makefile des Ports als auch in der pkg-plist (für die Installation aus einem Paket) sichergestellt werden. Beispiel aus einem Makefile: post-install: @if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \ ${CP} -p ${PREFIX}/etc/orbit.conf.sample ${PREFIX}/etc/orbit.conf ; \ fi Beispiel aus einer pkg-plist: @unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi etc/orbit.conf.sample @exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi Wahlweise können Sie auch eine Nachricht ausgegeben lassen, in der Sie den Nutzer auffordern, die Datei an die richtige Stelle zu kopieren und zu bearbeiten, bevor das Programm ausgeführt werden kann. Dynamische oder statische Paketliste Eine statische Paketliste ist eine Paketliste, die in der Ports-Sammlung, entweder in Form der pkg-plist (mit oder ohne der Ersetzung von Variablen) oder durch PLIST_FILES und PLIST_DIRS im Makefile eingebettet, verfügbar ist. Selbst wenn der Inhalt durch ein Werkzeug oder ein Target im Makefile automatisch erzeugt wird, bevor die Datei von einem Committer in die Ports-Sammlung aufgenommen wird, so ist dies immer noch eine statische Liste, da es möglich ist den Dateiinhalt zu betrachten ohne ein Distfile Herunterladen oder Kompilieren zu müssen. Eine dynamische Paketliste ist eine Paketliste, die beim Kompilieren des Ports erstellt wird, abhängig davon, welche Dateien und Verzeichnisse installiert werden. Es ist nicht möglich diese Liste zu betrachten, bevor der Quelltext heruntergeladen und kompiliert oder nachdem ein make clean ausgeführt wurde. Der Einsatz dynamischer Paketlisten ist zwar nicht untersagt, aber Sie sollten, wann immer das möglich ist, statische Paketlisten verwenden, da die Nutzer dann &man.grep.1; auf alle verfügbaren Ports anwenden können, um z.B. herauszufinden, von welchem eine bestimmte Datei installiert wurde. Dynamische Paketlisten sollten für komplexe Ports verwendet werden, bei denen sich die Liste abhängig von den gewählten Funktionen sehr stark ändern kann (wodurch die Pflege von statischen Listen unmöglich wird), oder Ports, welche die Paketliste abhängig von den Versionen verwendeter Abhängigkeiten verändern (z.B. Ports, die Ihre Dokumentation mit Javadoc erzeugen). Maintainer, die dynamische Paketlisten bevorzugen, werden dazu aufgefordert, neue Targets zu Ihren Ports hinzuzufügen, welche die pkg-plist-Datei erzeugen, sodass Benutzer den Inhalt überprüfen können. Automatisiertes Erstellen von Paketlisten Als Erstes sollten Sie sich vergewissern, dass der Port bis auf pkg-plist vollständig ist. Als Nächstes erstellen Sie einen temporären Verzeichnisbaum, in welchem Ihr Port installiert werden kann, und installieren Sie alle Abhängigkeiten. &prompt.root; mkdir /var/tmp/$(make -V PORTNAME) &prompt.root; mtree -U -f $(make -V MTREE_FILE) -d -e -p /var/tmp/$(make -V PORTNAME) &prompt.root; make depends PREFIX=/var/tmp/$(make -V PORTNAME) Speichern Sie die Verzeichnisstruktur in einer neuen Datei. &prompt.root; (cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort > OLD-DIRS Erstellen Sie eine leere pkg-plist-Datei: &prompt.root; :>pkg-plist Wenn Ihr Port auf PREFIX achtet (was er machen sollte), so kann der Port nun installiert und die Paketliste erstellt werden. &prompt.root; make install PREFIX=/var/tmp/$(make -V PORTNAME) &prompt.root; (cd /var/tmp/$(make -V PORTNAME) && find -d * \! -type d) | sort > pkg-plist Sie müssen auch alle neu erstellten Verzeichnisse in die Paketliste aufnehmen. &prompt.root; (cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plist Zu guter Letzt muss die Paketliste noch manuell aufgeräumt werden - es funktioniert eben nicht alles automatisch. Manualpages sollten im Makefile des Ports unter MANn aufgeführt sein und nicht in der Paketliste. Konfigurationsdateien des Benutzers sollten entfernt oder als filename.sample installiert werden. Die info/dir-Datei sollte nicht aufgeführt sein und die zugehörigen install-info-Zeilen sollten hinzugefügt werden, wie im info files-Abschnitt beschrieben. Alle Bibliotheken, die der Port installiert, sollten aufgelistet werden, wie es im Shared Libraries-Abschnitt festgelegt ist. Alternativ dazu können Sie das plist-Skript in /usr/ports/Tools/scripts/ verwenden, um die Paketliste automatisch zu erstellen. Der erste Schritt ist derselbe wie oben: Nehmen Sie die ersten drei Zeilen, also mkdir, mtree und make depends. Installieren und bauen Sie dann den Port: &prompt.root; make install PREFIX=/var/tmp/$(make -V PORTNAME) Und lassen Sie plist die pkg-plist-Datei erstellen: &prompt.root; /usr/ports/Tools/scripts/plist -Md -m $(make -V MTREE_FILE) /var/tmp/$(make -V PORTNAME) > pkg-plist Die Paketliste muss immer noch von Hand aufgeräumt werden, wie es oben erklärt wurde. Die <filename>pkg-<replaceable>*</replaceable></filename> Dateien Es gibt noch einige Tricks mit pkg-*, die wir noch nicht erwähnt haben, die aber oft sehr praktisch sind. <filename>pkg-message</filename> Wenn Sie dem Anwender bei der Installation weitere Informationen anzeigen wollen, so können Sie diese Nachricht in pkg-message speichern. Diese Vorgehensweise ist oft nützlich, um zusätzliche Schritte anzuzeigen, die nach &man.pkg.add.1; durchgeführt werden müssen. Dadurch können Sie auch Lizenzinformationen darstellen. Wollen Sie nur ein paar Zeilen über die Einstellungen zum Erstellen des Ports oder Warnungen ausgeben, benutzen Sie ECHO_MSG. pkg-message ist nur für Schritte nach der Installation vorgesehen. Sie sollten den Unterschied zwischen ECHO_MSG und ECHO_CMD beachten: Ersteres wird benutzt, um Informationen auf dem Bildschirm auszugeben, während Letzteres für Kommando-Pipelining bestimmt ist. Ein gutes Beispiel für die Benutzung der beiden Befehle ist in shells/bash2/Makefile zu finden: update-etc-shells: @${ECHO_MSG} "updating /etc/shells" @${CP} /etc/shells /etc/shells.bak @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \ ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells @${RM} /etc/shells.bak Die pkg-message wird nicht zur pkg-plist hinzugefügt. Sie wird auch nicht automatisch angezeigt, falls ein Anwender den Port installiert. Sie müssen also die Ausgabe selbst im post-install-Ziel des Make-Vorgangs veranlassen. <filename>pkg-install</filename> Sollte es nötig sein, dass Ihr Port bei der Installation des Binärpakets mit &man.pkg.add.1; Befehle ausführt, können Sie das Skript pkg-install benutzen. Dieses Skript wird automatisch dem Paket hinzugefügt und zweimal von &man.pkg.add.1; ausgeführt: Zuerst als ${SH} pkg-install ${PKGNAME} PRE-INSTALL und beim zweiten Mal als ${SH} pkg-install ${PKGNAME} POST-INSTALL. $2 kann also getestet werden, um festzustellen, in welchem Modus das Skript ausgeführt wird. Die Umgebungsvariable PKG_PREFIX wird auf das Verzeichnis gesetzt, in welches das Paket installiert wird. Siehe &man.pkg.add.1; für weiterführende Informationen. Das Skript wird nicht automatisch ausgeführt, wenn Sie den Port mit make install installieren. Wenn Sie es ausführen lassen wollen, dann müssen Sie es im Makefile aufrufen: PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL. <filename>pkg-deinstall</filename> Dieses Skript wird ausgeführt, wenn ein Paket deinstalliert wird. Es wird zweimal von &man.pkg.delete.1; aufgerufen. Das erste Mal als ${SH} pkg-deinstall ${PKGNAME} DEINSTALL und dann als ${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL. <filename>pkg-req</filename> Muss Ihr Port entscheiden, ob er installiert werden soll oder nicht, können Sie ein pkg-req-Bedingungsskript verwenden. Dieses wird automatisch bei der Installation/ Deinstallation aufgerufen, um zu entscheiden, ob die Installation/ Deinstallation fortgesetzt werden soll. Das Skript wird während der Installation von &man.pkg.add.1; als pkg-req ${PKGNAME} INSTALL aufgerufen. Bei der Deinstallation wird es von &man.pkg.delete.1; als pkg-req ${PKGNAME} DEINSTALL ausgeführt. Ändern der Namen der <filename>pkg-<replaceable>*</replaceable></filename> Dateien Alle Namen der pkg-* Dateien werden durch Variablen festgelegt. Sie können sie bei Bedarf also im Makefile des Ports ändern. Das ist besonders nützlich, wenn Sie die gleichen pkg-* Dateien in mehreren Ports nutzen oder in eine der oben genannten Dateien schreiben wollen. Schreiben Sie niemals außerhalb des Unterverzeichnisses WRKDIR pkg-*, eine Erklärung hierzu finden Sie in Schreiben ausserhalb von WRKDIR. Hier ist eine Liste von Variablennamen und ihren Standardwerten (PKGDIR ist standardmäßig ${MASTERDIR}). Variable Standardwert DESCR ${PKGDIR}/pkg-descr PLIST ${PKGDIR}/pkg-plist PKGINSTALL ${PKGDIR}/pkg-install PKGDEINSTALL ${PKGDIR}/pkg-deinstall PKGREQ ${PKGDIR}/pkg-req PKGMESSAGE ${PKGDIR}/pkg-message Bitte benutzen Sie diese Variablen anstatt PKG_ARGS zu ändern. Wenn Sie PKG_ARGS modifizieren, werden diese Dateien bei der Installation des Ports nicht korrekt in /var/db/pkg installiert. Nutzung von <makevar>SUB_FILES</makevar> und <makevar>SUB_LIST</makevar> Die Variablen SUB_FILES und SUB_LIST sind nützlich, um dynamische Werte in Port-Dateien zu verwenden, wie beispielsweise der Installations-PREFIX in pkg-message. Die Variable SUB_FILES enthält eine Liste von Dateien, die automatisch verändert werden. Jede Datei in SUB_FILES muss ein entsprechendes Pendant datei.in im Verzeichnis FILESDIR haben. Die modifizierte Version wird in WRKDIR angelegt. Dateien, die als Werte von USE_RC_SUBR (oder veraltet in USE_RCORDER) gespeichert werden, werden automatisch zu SUB_FILES hinzugefügt. Für die Dateien pkg-message, pkg-install, pkg-deinstall und pkg-req werden die jeweiligen Makefile-Variablen selbsttätig auf die geänderte Version der Datei gesetzt. Die Variable SUB_LIST ist eine Liste von VAR=WERT-Paaren. Jedes Paar %%VAR%% in den Dateien von SUB_FILES wird mit WERT ersetzt. Einige gebräuchliche Paare werden automatisch definiert: PREFIX, LOCALBASE, X11BASE, DATADIR, DOCSDIR, EXAMPLESDIR. Jede Zeile, die mit @comment beginnt, wird nach der Variablen-Ersetzung aus der neu erstellten Datei gelöscht. Im folgenden Beispiel wird %%ARCH%% mit der Systemarchitektur in pkg-message ersetzt: SUB_FILES= pkg-message SUB_LIST= ARCH=${ARCH} Beachten Sie bitte, dass in diesem Beispiel die Datei pkg-message.in im Verzeichnis FILESDIR vorhanden sein muss. Hier ein Beispiel für eine gute pkg-message.in: Now it is time to configure this package. Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory as .putsy.conf and edit it. Ihren Port testen <command>make describe</command> ausführen Einige der &os;-Werkzeuge zur Pflege von Ports, wie zum Beispiel &man.portupgrade.1;, verwenden eine Datenbank names /usr/ports/INDEX, welche Eigenschaften, wie z.B. Port-Abhängigkeiten, verfolgt. INDEX wird vom Makefile der höchsten Ebene, ports/Makefile, mittels make index erstellt, welches in das Unterverzeichnis jedes Ports wechselt und dort make describe ausführt. Wenn also make describe bei einem Port fehlschlägt, kann INDEX nicht generiert werden und schnell werden viele Leute darüber unzufrieden sein. Es ist wichtig diese Datei erzeugen zu können, unabhängig davon, welche Optionen in make.conf vorhanden sind. Bitte vermeiden Sie es daher beispielsweise .error-Anweisungen zu benutzen, wenn zum Beispiel eine Abhängigkeit nicht erfüllt wird (Lesen Sie dazu bitte ). Wenn make describe eine Zeichenkette anstatt einer Fehlermeldung erzeugt, sind Sie wahrscheinlich auf der sicheren Seite. Vergleichen Sie die erzeugte Zeichenkette mit bsd.port.mk, um mehr über deren Bedeutung zu erfahren. Beachten Sie bitte außerdem, dass die Benutzung einer aktuellen Version von portlint (wie im nächsten Abschnitt beschrieben) automatisch make describe startet. Portlint Bitte überprüfen Sie Ihre Arbeit stets mit portlint, bevor Sie diese einreichen oder committen. portlint warnt Sie bei häufigen Fehlern, sowohl funktionaler als auch stilistischer Natur. Für einen neuen (oder repokopierten) Port ist portlint -A die gründlichste Variante; für einen bereits existierenden Port ist portlint -C ausreichend. Da portlint heuristische Methoden zur Fehlersuche benutzt, kann es vorkommen, dass Warnungen für Fehler erzeugt werden, die keine sind. Gelegentlich kann etwas, das als Problem angezeigt wird, aufgrund von Einschränkungen im Port-System nicht anders gelöst werden. Wenn es Zweifel gibt, fragen Sie am besten auf &a.ports; nach. Port Tools Das Programm ports-mgmt/porttools ist Teil der Ports-Sammlung. port ist das Front-End-Skript, das Ihnen dabei behilflich sein kann Ihre Arbeit als Tester zu vereinfachen. Um einen neuen Port zu testen oder einen bereits bestehenden Port zu aktualisieren, können Sie port test verwenden, damit die Tests, inklusive der portlint-Überprüfung, durchgeführt werden. Dieser Befehl spürt ausserdem alle nicht in pkg-plist enthaltenen Dateien auf und gibt eine Liste dieser aus. Hier ein Beispiel: &prompt.root; port test /usr/ports/net/csup <makevar>PREFIX</makevar> und <makevar>DESTDIR</makevar> PREFIX bestimmt, an welche Stelle der Port installiert werden soll. In der Regel ist dies/usr/local oder /opt. Benutzer können PREFIX setzen, wie sie wollen. Ihr Port muss sich an diese Variable halten. DESTDIR, wenn es vom Benutzer gesetzt wird, bestimmt die alternative Umgebung (in der Regel eine Jail oder ein installiertes System, welches an anderer Stelle als / eingehängt ist). Ein Port wird unter DESTDIR/PREFIX installiert und registriert sich in der Paket-Datenbank unter DESTDIR/var/db/pkg. Da DESTDIR mittels eines &man.chroot.8;-Aufrufs vom Ports-System automatisch gesetzt wird, brauchen Sie keine Änderungen oder besondere Pflege für DESTDIR-konforme Ports. Der Wert von PREFIX wird auf LOCALBASE gesetzt (Standard ist /usr/local). Falls USE_X_PREFIX oder USE_IMAKE gesetzt ist, wird PREFIX X11BASE entsprechen (aus Kompatiblitätsgründen standardmäßig LOCALBASE, das in Zukunft aber komplett verschwinden wird). Falls USE_LINUX_PREFIX gesetzt ist, wird PREFIX LINUXBASE annehmen (Standard ist /compat/linux). Die Vermeidung der hart kodierten Angaben von /usr/local oder /usr/X11R6 im Quelltext wird den Port viel flexibler machen und erleichtert es die Anforderungen anderer Einsatzorte zu erfüllen. Für X-Ports, die imake benutzen, geschieht dies automatisch; andernfalls kann dies erreicht werden, indem alle Angaben von /usr/local (oder /usr/X11R6 für X-Ports, die nicht imake benutzen) in den verschiedenen Makefiles im Port ersetzt werden, um ${PREFIX} zu lesen, da diese Variable automatisch an jede Stufe des Build- und Install-Prozesses übergeben wird. Vergewissern Sie sich bitte, dass Ihre Anwendung nichts unter /usr/local an Stelle von PREFIX installiert. Um dies festzustellen, können Sie folgendes machen: &prompt.root; make clean; make package PREFIX=/var/tmp/$(make -V PORTNAME) Wenn etwas außerhalb von PREFIX installiert wird, so gibt der Prozess der Paketerstellung eine Meldung aus, dass es die Dateien nicht finden kann. Dies prüft nicht das Vorhandensein eines internen Verweises oder die richtige Verwendung von LOCALBASE für Verweise auf Dateien anderer Ports. Das Testen der Installation in /var/tmp/$(make -V PORTNAME) würde dies erledigen. Bitte verzichten Sie auf das Setzen von USE_X_PREFIX, es sei denn, Ihr Port benötigt dies wirklich (das heißt, er muss auf Dateien in X11BASE verweisen). Die Variable PREFIX kann in Ihrem Makefile oder der Umgebung des Benutzers neu gesetzt werden. Allerdings wird für einzelne Ports dringend davon abgeraten diese Variable in den Makefiles direkt zu setzen. Verweisen Sie bitte außerdem auf Programme/Dateien von anderen Ports durch die oben erwähnten Variablen und nicht mit den eindeutigen Pfadnamen. Wenn Ihr Port zum Beispiel vom Makro PAGER erwartet, dass es den vollständigen Pfadnamen von less enthält, benutzen Sie folgendes Compiler-Flag: -DPAGER=\"${LOCALBASE}/bin/less\" anstatt -DPAGER=\"/usr/local/bin/less\". Somit ist die Wahrscheinlichkeit höher, dass es auch funktioniert, wenn der Administrator den ganzen /usr/local-Baum an eine andere Stelle verschoben hat. Die Tinderbox Wenn Sie ein begeisterter Ports-Entwickler sind möchten Sie vielleicht einen Blick auf die Tinderbox werfen. Es ist ein leistungsstarkes System zur Erstellung und zum Testen von Ports, welches auf Skripten basiert, die auf Pointyhat verwendet werden. Sie können Tinderbox installieren, indem Sie den Port ports-mgmt/tinderbox benutzen. Bitte lesen Sie die mitgelieferte Dokumentation gründlich, da die Konfiguration nicht einfach ist. Um Näheres darüber zu erfahren, besuchen Sie bitte die Tinderbox Homepage. Einen Port aktualisieren Wenn Sie feststellen, dass ein Port verglichen mit der neuesten Version des Originalautors nicht mehr auf dem aktuellen Stand ist, sollten Sie als Erstes sicherstellen, dass Sie die aktuellste Version des Ports haben. Diese finden Sie im Verzeichnis ports/ports-current der FreeBSD FTP-Spiegelseiten. Wenn Sie allerdings mit mehr als ein paar Ports arbeiten, werden Sie es wahrscheinlich einfacher finden CVSup zu benutzen, um Ihre gesamte Ports-Sammlung aktuell zu halten, wie es im Handbuch beschrieben wird. Das hat zusätzlich den Vorteil, dass Sie so auch alle Abhängigkeiten des Ports aktuell halten. Der nächste Schritt besteht darin festzustellen, ob bereits eine Aktualisierung des Ports darauf wartet committet zu werden. Um das sicherzustellen haben Sie folgende Möglichkeiten. Es gibt eine durchsuchbare Schnittstelle zur FreeBSD Problembericht Datenbank (PR - Problem Report) (auch bekannt als GNATS). Wählen Sie dazu Ports im Drop-Down-Menü und geben Sie den Namen des Ports ein. Allerdings wird manchmal vergessen den Namen des Ports eindeutig im Feld für die Zusammenfassung anzugeben. In diesem Fall können Sie das FreeBSD Ports Monitoring System (auch bekannt als portsmon) nutzen. Dieses versucht PRs von Ports nach Portname zu sortieren. Um PRs nach einem bestimmten Port zu durchsuchen können Sie die Übersicht eines Ports verwenden. Wenn es keine wartenden PRs gibt, ist der nächste Schritt eine E-Mail an den Maintainer des Ports zu schicken, wie von make maintainer gezeigt wird. Diese Person arbeitet vielleicht schon an einer Aktualisierung, oder hat einen guten Grund den Port im Moment nicht zu aktualisieren (z.B. wegen Stabilitätsproblemen der neuen Version). Sie wollen sicher nicht die Arbeit des Maintainers doppelt machen. Beachten Sie bitte, dass für Ports ohne Maintainer ports@FreeBSD.org eingetragen ist. Das ist nur die allgemeine &a.ports;-Mailingliste, deshalb wird es in diesem Fall wahrscheinlich nicht helfen eine E-Mail dorthin zu schicken. Wenn Sie der Maintainer bittet die Aktualisierung zu erledigen, oder falls es keinen Maintainer gibt, haben Sie Gelegenheit FreeBSD zu helfen, indem Sie die Aktualisierung selbst bereitstellen. Bitte führen Sie die Änderungen durch und speichern Sie die Ausgabe des rekursiven diff des neuen und alten Portverzeichnisses (wenn Ihr verändertes Portverzeichnis z.B. superedit und das Original superedit.bak heißt, dann speichern Sie bitte die Ergebnisse von diff -ruN superedit.bak superedit). Sowohl vereinheitlichendes als auch kontextabhängiges diff (Auflistung der Unterschiede zweier Dateien) sind akzeptabel, aber im Allgemeinen bevorzugen Port-Committer vereinheitlichende diffs. Bitte beachten Sie die Verwendung der -N-Option. Dies ist der gebräuchliche Weg diff dazu zu bewegen korrekt damit umzugehen, neue Dateien anzulegen und alte zu löschen. Bevor Sie das diff einsenden überprüfen Sie bitte die Ausgabe, um sicherzugehen, dass die Änderungen sinnvoll sind. Um gängige Operationen mit Korrekturdateien zu vereinfachen, können Sie /usr/ports/Tools/scripts/patchtool.py benutzen. Aber lesen Sie bitte vorher /usr/ports/Tools/scripts/README.patchtool. Falls der Port keinen Maintainer hat und Sie ihn selbst aktiv benutzen, ziehen Sie bitte in Erwägung sich als Maintainer zu melden. &os; hat mehr als 2000 Ports ohne Maintainer und in diesem Bereich werden immer zusätzliche Freiwillige benötigt (Für eine ausführliche Beschreibung der Verantwortlichkeiten eines Maintainers lesen Sie bitte im Developer's Handbook nach). Der beste Weg uns das diff zu schicken ist mittels &man.send-pr.1; (Kategorie Ports). Wenn Sie der Maintainer des Ports sind, fügen Sie bitte [maintainer update] an den Anfang Ihrer Zusammenfassung und setzen Sie die Klasse des PR auf maintainer-update. Ansonsten sollte die Klasse des PR change-request sein. Bitte erwähnen Sie alle hinzugefügten oder gelöschten Dateien in der Nachricht, da diese beim Commit ausdrücklich an &man.cvs.1; übergeben werden müssen. Wenn das diff größer ist als 20 Kilobyte komprimieren und uuencoden Sie es bitte. Ansonsten können Sie es in den PR einfügen wie es ist. Bevor Sie den PR mit &man.send-pr.1; abschicken, sollten Sie den Abschnitt Den Problembericht schreiben im Artikel über Problemberichte lesen. Dieser enthält sehr viel mehr Informationen darüber, wie man nützliche Problemberichte verfasst. Wenn Sie Ihre Aktualisierung aufgrund von Sicherheitsbedenken oder eines schwerwiegenden Fehlers bereitstellen wollen, informieren Sie bitte das &a.portmgr;, um einen sofortigen Rebuild und eine Neuverteilung des Pakets Ihres Ports durchzuführen. Sonst werden ahnungslose Nutzer von &man.pkg.add.1; über mehrere Wochen die alte Version durch pkg_add -r installieren. Noch einmal: Bitte verwenden Sie &man.diff.1; und nicht &man.shar.1;, um Aktualisierungen existierender Ports zu senden. Nun, da Sie all das geschafft haben, werden Sie in nachlesen können, wie Sie den Port aktuell halten. Sicherheit der Ports Warum Sicherheit so wichtig ist Es finden sich immer wieder Fehler in Software. Die gefährlichsten davon sind wohl jene, die Sicherheitslücken öffnen. Technisch gesehen müssen diese Lücken geschlossen werden, indem die Fehler, die Sie verursacht haben, beseitigt werden. Aber die Vorgehensweisen, wie mit bloßen Fehlern und Sicherheitslücken umgegangen wird, sind sehr unterschiedlich. Ein typischer kleiner Fehler betrifft nur Nutzer, die eine bestimmte Kombination von Optionen aktiviert haben, die den Fehler auslöst. Der Entwickler wird letztendlich einen Patch herausgeben, gefolgt von einer neuen Version des Programms, die den Fehler nicht mehr enthält – jedoch wird die Mehrheit der Nutzer nicht sofort aktualisieren, da sie von diesem Fehler nicht betroffen sind. Ein kritischer Fehler, der zu Datenverlust führen kann, stellt ein schwerwiegendes Problem dar. Dennoch sind sich umsichtige Nutzer bewusst, dass Datenverlust verschiedene Ursachen – neben Softwarefehlern – haben kann, und machen deshalb Sicherungskopien wichtiger Daten. Zumal ein kritischer Fehler sehr schnell entdeckt wird. Bei einer Sicherheitslücke ist dies ganz anders. Erstens wird sie vielleicht jahrelang nicht entdeckt, da dies oftmals keine Fehlfunktion im Programm verursacht. Zweitens kann eine böswillige Person unerlaubten Zugriff auf ein unsicheres System erlangen, um empfindliche Daten zu verändern oder zu zerstören; im schlimmsten Fall findet der Nutzer nicht einmal die Ursache des Schadens. Drittens hilft der Zugriff auf ein unsicheres System dem Angreifer oft in ein anderes System einzudringen, welches ansonsten nicht gefährdet wäre. Deshalb reicht es nicht aus eine Sicherheitslücke nur zu schließen: Die Zielgruppe sollte möglichst genau und umfassend darüber informiert werden, damit sie die Gefahr einschätzen und passende Maßnahmen ergreifen können. Sicherheitslücken schliessen Bei Ports und Paketen kann eine Sicherheitslücke im ursprünglichen Programm oder in den Port-Dateien verursacht werden. Im ersten Fall wird der ursprüngliche Entwickler den Fehler wahrscheinlich umgehend korrigieren oder eine neue Version herausgeben und Sie müssen den Port nur aktualisieren und die Korrekturen des Autors beachten. Falls sich die Korrektur aus irgendeinem Grund verzögert, sollten Sie den Port als FORBIDDEN markieren oder selbst den Fehler für den Port korrigieren. Falls die Sicherheitslücke im Port verursacht wird, sollten Sie ihn sobald wie möglich berichtigen. In jedem Fall sollte die Standardvorgehensweise zum Einreichen von Änderungen beachtet werden – es sei denn, Sie haben das Recht diese direkt in den Ports-Baum zu committen. Ports-Committer zu sein ist nicht genug, um Änderungen an einem beliebigen Port zu committen. Bitte denken Sie daran, dass Ports üblicherweise Maintainer haben, die Sie respektieren sollten. Bitte stellen Sie sicher, dass die Revision des Ports erhöht wird, sobald die Sicherheitslücke geschlossen wurde. Dadurch sehen die Nutzer, die installierte Pakete regelmäßig aktualisieren, dass es an der Zeit ist eine Aktualisierung durchzuführen. Außerdem wird ein neues Paket gebaut, über FTP– und WWW-Spiegel verteilt und die unsichere Version damit verdrängt. PORTREVISION sollte erhöht werden – es sei denn, PORTREVISION hat sich im Laufe der Korrektur des Fehlers geändert. Das heißt, Sie sollten PORTREVISION erhöhen, wenn Sie eine Korrektur hinzugefügt haben. Sie sollten diese aber nicht erhöhen, wenn Sie den Port auf die neueste Version des Programms gebracht haben und PORTREVISION somit schon verändert wurde. Bitte beachten Sie den betreffenden Abschnitt für weitere Informationen. Die Community informiert halten Die VuXML-Datenbank Ein sehr wichtiger und dringender Schritt, den man unternehmen muss, sobald eine Sicherheitslücke entdeckt wurde, ist die Gemeinschaft der Anwender des Ports über die Gefahr zu informieren. Diese Benachrichtigung hat zwei Gründe. Erstens wird es sinnvoll sein, wenn die Gefahr wirklich so groß ist, sofort Abhilfe zu schaffen, indem man z.B. den betreffenden Netzwerkdienst beendet oder den Port komplett deinstalliert, bis die Lücke geschlossen wurde. Und Zweitens pflegen viele Nutzer installierte Pakete nur gelegentlich zu aktualisieren. Sie werden aus der Mitteilung erfahren, dass Sie das Paket, sobald eine Korrektur verfügbar ist, sofort aktualisieren müssen. Angesichts der riesigen Zahl an Ports kann nicht für jeden Vorfall ein Sicherheitshinweis erstellt werden, ohne durch die Flut an Nachrichten die Aufmerksamkeit der Empfänger zu verlieren, im Laufe der Zeit kommt es so zu ernsten Problemen. Deshalb werden Sicherheitslücken von Ports in der FreeBSD VuXML-Datenbank aufgezeichnet. Das Team der Sicherheitsverantwortlichen beobachtet diese wegen Angelegenheiten, die Ihr Eingreifen erfordern. Wenn Sie Committerrechte haben, können Sie die VuXML-Datenbank selbst aktualisieren. Auf diese Weise helfen Sie den Sicherheitsverantwortlichen und liefern die kritischen Informationen frühzeitig an die Community. Aber auch wenn Sie kein Committer sind und glauben, Sie haben eine außergewöhnlich schwerwiegende Lücke gefunden – egal welche – zögern Sie bitte nicht die Sicherheitsverantwortlichen zu kontaktieren, wie es in den FreeBSD Sicherheitsinformationen beschrieben wird. In Ordnung, Sie haben sich also für den schwierigen Weg entschieden. Wie vielleicht aus dem Titel hervorgeht, ist die VuXMl-Datenbank hauptsächlich ein XML-Dokument. Die Quelldatei vuln.xml können Sie im Port security/vuxml finden. Deshalb wird der komplette Pfadname PORTSDIR/security/vuxml/vuln.xml lauten. Jedes Mal, wenn Sie eine Sicherheitslücke in einem Port entdecken, fügen Sie bitte einen Eintrag dafür in diese Datei ein. Solange Sie nicht mit VuXML vertraut sind, ist es das Beste, was Sie machen können, einen vorhandenen Eintrag, der zu Ihrem Fall passt, zu kopieren und als Vorlage zu verwenden. Eine kurze Einführung in VuXML Das komplette XML ist komplex und würde den Rahmen dieses Buches sprengen. Allerdings benötigen Sie für einen grundlegenden Einblick in die Struktur eines VuXML-Eintrags nur eine Vorstellung der Tags. XML-Tags bestehen aus Namen, die in spitzen Klammern eingeschlossen sind. Zu jedem öffnenden <Tag> muss ein passendes </Tag> existieren. Tags können geschachtelt werden. Wenn sie geschachtelt werden müssen die inneren Tags vor den Äußeren geschlossen werden. Es gibt eine Hierarchie von Tags – das heißt komplexere Regeln zur Schachtelung. Klingt so ähnlich wie HTML, oder? Der größte Unterschied ist: XML ist erweiterbar (eXtensible) – das heißt es basiert darauf maßgeschneiderte Tags zu definieren. Aufgrund seiner wesentlichen Struktur bringt XML ansonsten formlose Daten in eine bestimmte Form. VuXML ist speziell darauf zugeschnitten Beschreibungen von Sicherheitslücken zu verwalten. Lassen Sie uns nun einen realistischen VuXML-Eintrag betrachten: <vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> <topic>Several vulnerabilities found in Foo</topic> <affects> <package> <name>foo</name> <name>foo-devel</name> <name>ja-foo</name> <range><ge>1.6</ge><lt>1.9</lt></range> <range><ge>2.*</ge><lt>2.4_1</lt></range> <range><eq>3.0b1</eq></range> </package> <package> <name>openfoo</name> <range><lt>1.10_7</lt></range> <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range> </package> </affects> <description> <body xmlns="http://www.w3.org/1999/xhtml"> <p>J. Random Hacker reports:</p> <blockquote cite="http://j.r.hacker.com/advisories/1"> <p>Several issues in the Foo software may be exploited via carefully crafted QUUX requests. These requests will permit the injection of Bar code, mumble theft, and the readability of the Foo administrator account.</p> </blockquote> </body> </description> <references> <freebsdsa>SA-10:75.foo</freebsdsa> <freebsdpr>ports/987654</freebsdpr> <cvename>CAN-2010-0201</cvename> <cvename>CAN-2010-0466</cvename> <bid>96298</bid> <certsa>CA-2010-99</certsa> <certvu>740169</certvu> <uscertsa>SA10-99A</uscertsa> <uscertta>SA10-99A</uscertta> <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <url>http://j.r.hacker.com/advisories/1</url> </references> <dates> <discovery>2010-05-25</discovery> <entry>2010-07-13</entry> <modified>2010-09-17</entry> </dates> </vuln> Die Namen der Tags sollten selbsterklärend sein  – also werfen wir einen genaueren Blick auf die Felder, die Sie selbst ausfüllen müssen: Dies ist die höchste Tag-Ebene eines VuXML-Eintrags. Es ist ein vorgeschriebenes Attribut vid, welches eine allgemein einzigartige Kennung (universally unique identifier, UUID) in Anführungszeichen für diesen Eintrag festlegt. Sie sollten eine UUID für jeden neuen VuXML-Eintrag erzeugen (und vergessen Sie nicht die UUID der Vorlage zu ersetzen, es sei denn, Sie schreiben den Eintrag von Grund auf selbst). Sie können &man.uuidgen.1; verwenden, um eine VuXML UUID zu erzeugen. Wahlweise können Sie, wenn Sie FreeBSD 4.x verwenden, den Port devel/p5-Data-UUID verwenden und folgenden Befehl aufrufen: perl -MData::UUID -le 'print lc new Data::UUID->create_str' Dies ist eine einzeilige Beschreibung des gefundenen Fehlers. Hier werden die Namen betroffener Pakete aufgeführt. Es können mehrere Namen angegeben werden, da mehrere Pakete von einem einzigen Master-Port oder Software-Produkt abhängen können. Das schließt Stable– und Developement-Zweige, lokalisierte Versionen und Slave-Ports ein, die verschiedene Auswahlmöglichkeiten wichtiger Kompilierungszeit-Optionen bieten. Es liegt in Ihrer Verantwortung all diese betroffenen Pakete zu finden, wenn Sie den VuXML-Eintrag schreiben.Behalten Sie im Hinterkopf, dass make search name=foo Ihr Freund ist. Die wichtigsten Punkte, auf die Sie achten sollten, sind die folgenden: die foo-devel Variante eines foo Ports; andere Varianten mit einem Suffix wie -a4 (für Druck-betreffende Pakete), -without-gui (für Pakete mit deaktivierter X-Unterstützung) oder ähnliche jp-, ru-, zh- und andere, eventuell lokalisierte, Varianten in den entsprechenden Länderkategorien der Ports-Sammlung Betroffene Versionen der Pakete werden hier als ein Bereich oder mehrere durch eine Kombination aus <lt>, <le> , <eq>, <ge>, und <gt>-Elementen ausgegeben. Die angegebenen Bereiche sollten sich nicht überschneiden. In einer Bereichsangabe steht * (Asterisk) für die kleinste Versionsnummer. Insbesondere ist 2.* kleiner als 2.a. Deshalb kann ein Stern benutzt werden, um auf alle möglichen Alpha -, Beta– und RC -Versionen zuzutreffen. Zum Beispiel passt <ge>2.*</ge><lt>3.* </lt> auf alle Versionen der Form 2.x, während <ge> 2.0</ge><lt>3.0</lt> das nicht erfüllt, da es nicht auf 2.r3 passt, auf 3.b aber schon. Das obige Beispiel legt fest, dass Versionen von 1.6 bis 1.9 betroffen sind – außerdem Versionen 2.x vor 2.4_1 und Version 3.0b1. Mehrere zusammenhängende Gruppen von Paketen (im wesentlichen Ports) können im Abschnitt <affected> aufgeführt werden. Das kann man benutzen, wenn sich Programme (sagen wir FooBar, FreeBar und OpenBar) denselben Quelltext als Grundlage haben und sich noch dessen Fehler und Sicherheitslücken teilen. Beachten Sie den Unterschied zum Anführen mehrerer Namen innerhalb eines <package> Abschnittes. Die Versionsbereiche sollten, wenn möglich, sowohl PORTEPOCH als auch PORTREVISION erlauben. Bitte denken Sie daran, dass gemäß der Vergleichsregeln eine Version mit einer PORTEPOCH, die nicht Null ist, größer ist als jede Version ohne PORTEPOCH. Das heißt, 3.0,1 ist größer als 3.1 oder sogar 8.9. Das ist die Zusammenfassung des Problems. In diesem Feld wird XHTML verwendet. Zumindest umschließende <p> und </p> sollten auftauchen. Komplexere Tags sind zwar möglich, aber sollten nur um der Genauigkeit und Klarheit willen verwendet werden: Bitte verwenden Sie hier kein Eye-Candy. Dieser Abschnitt enthält Verweise auf relevante Dokumente. Es wird empfohlen so viele Referenzen wie nötig aufzuführen. Das ist ein FreeBSD Sicherheitshinweis. Das ist ein FreeBSD Problembericht. Das ist eine Mitre CVE Kennung. Das ist eine SecurityFocus Fehler-Kennung. Das ist ein Sicherheitshinweis von US-CERT. Das ist eine Mitteilung über eine Schwachstelle von US-CERT. Das ist ein Cyber-Sicherheitsalarm von US-CERT. Das ist ein technischer Cyber-Sicherheitsalarm von US-CERT. Das ist eine URL zu einem archivierten Posting auf einer Mailingliste. Das Attribut msgid ist optional und gibt die Nachrichtenkennung des Postings an. Das ist eine gewöhnliche URL. Sie sollte nur verwendet werden, wenn keine der anderen Referenzkategorien verfügbar ist. Das ist das Datum, an dem die Sicherheitslücke bekannt wurde (JJJJ-MM-TT). Das ist das Datum, an dem der Eintrag hinzugefügt wurde (JJJJ-MM-TT). Das ist das Datum, an dem zuletzt irgendeine Information des Eintrags verändert wurde (JJJJ-MM-TT). Neue Einträge dürfen dieses Feld nicht enthalten. Es sollte beim Editieren eines existierenden Eintrags eingefügt werden. Ihre Änderungen an der VuXML-Datenbank testen Nehmen wir an, Sie haben gerade einen Eintrag für eine Sicherheitslücke in dem Paket clamav geschrieben oder ausgefüllt, die in der Version 0.65_7 korrigiert wurde. Als Voraussetzung sollten Sie eine neue Version der Ports ports-mgmt/portaudit und ports-mgmt/portaudit-db installieren. Zuerst überprüfen Sie bitte, ob bereits ein Eintrag für diese Schwachstelle existiert. Wenn es einen solchen Eintrag gibt, sollte er auf die vorige Version 0.65_6 zutreffen: &prompt.user; packaudit &prompt.user; portaudit clamav-0.65_6 Um packaudit auszuführen, müssen Sie die Berechtigung haben DATABASEDIR zu schreiben – üblicherweise ist das /var/db/portaudit. Wenn keine vorhandenen Einträge gefunden werden haben Sie grünes Licht einen neuen Eintrag für diese Sicherheitslücke anzulegen. Sie können nun eine neue UUID erzeugen (wir nehmen an, diese lautet 74a9541d-5d6c-11d8-80e3-0020ed76ef5a) und einen neuen Eintrag in der VuXML-Datenbank anlegen. Bitte überprüfen Sie danach die Syntax mit folgendem Befehl: &prompt.user; cd ${PORTSDIR}/security/vuxml && make validate Sie werden zumindest eines der folgenden Pakete benötigen: textproc/libxml2, textproc/jade. Jetzt bauen Sie bitte die portaudit-Datenbank aus der VuXML-Datei neu: &prompt.user; packaudit Um sicherzustellen, dass der Abschnitt <affected> Ihres Eintrags die richtigen Pakete betrifft, verwenden Sie bitte den folgenden Befehl: &prompt.user; portaudit -f /usr/ports/INDEX -r 74a9541d-5d6c-11d8-80e3-0020ed76ef5a Bitte lesen Sie in &man.portaudit.1; nach, um ein besseres Verständnis der Befehlssyntax zu entwickeln. Bitte stellen Sie sicher, dass Ihr Eintrag keine falschen Treffer in der Ausgabe erzeugt. Jetzt überprüfen Sie bitte, dass Ihr Eintrag die richtigen Versionen des Pakets angibt: &prompt.user; portaudit clamav-0.65_6 clamav-0.65_7 Affected package: clamav-0.65_6 (matched by clamav<0.65_7) Type of problem: clamav remote denial-of-service. Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html> 1 problem(s) found. Offensichtlich sollte die erste Version ausgegeben werden – die zweite jedoch nicht. Abschließend überprüfen Sie bitte, ob die Webseite, die aus der VuXML-Datenbank erzeugt wird, wie erwartet aussieht: &prompt.user; mkdir -p ~/public_html/portaudit &prompt.user; packaudit &prompt.user; lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html Was man machen respektive vermeiden sollte Einführung Hier ist eine Liste von gebräuchlichen Dos and Don'ts (Dinge, die man machen oder vermeiden sollte), welchen Sie während des Portierungsprozesses begegnen werden. Sie sollten Ihren Port anhand dieser Liste überprüfen. Sie können auch Ports in der PR Datenbank, welche andere Menschen eingereicht haben, kontrollieren. Senden Sie bitte Kommentare zu Ports, die Sie verifizieren wie unter Bug Reports and General Commentary beschrieben. Der Abgleich von Ports aus der PR-Datenbank hilft uns diese schneller zu committen, und zeigt auch, dass Sie wissen, worum es geht. <makevar>WRKDIR</makevar> Schreiben Sie in keine Dateien außerhalb von WRKDIR. WRKDIR ist der einzige Ort, welcher während des Erstellen des Ports garantiert beschreibbar ist (siehe Ports Installieren von CDROM für ein Beispiel, um Ports in einem schreibgeschützen Zweig zu erstellen). Wenn Sie eine der pkg-* Dateien modifizieren müssen, sollten Sie eine Variable erneut definieren, anstatt die Datei zu überschreiben. <makevar>WRKDIRPREFIX</makevar> Vergewissern Sie sich, dass Ihr Port WRKDIRPREFIX beachtet. Die meisten Ports sollten sich darüber keine Sorgen machen. Beachten Sie bitte, falls auf WRKDIR eines anderen Ports verwiesen wird, dass die korrekte Position WRKDIRPREFIXPORTSDIR/subdir/name/work, und nicht etwa PORTSDIR/subdir/name/work, .CURDIR/../../subdir/name/work oder ähnliches ist. Falls Sie WRKDIR selbst definieren, sollten Sie sicherstellen, dass Sie ${WRKDIRPREFIX}${.CURDIR} am Anfang anfügen. Unterschiedliche Betriebssysteme und Betriebssystemversionen Sie können auf Quelltext treffen, welcher Modifizierungen oder bedingtes Kompilieren, abhängig davon, unter welcher Unix-Version er läuft, benötigt. Falls Sie Änderungen an solch einem Quelltext vornehmen müssen, stellen Sie bitte sicher, dass Sie Ihre Änderungen so allgemein wie möglich halten, damit wir den Quelltext auf ältere FreeBSD-Systeme portieren und zur Quer-Portierung auf andere BSD-Systeme, wie etwa 4.4BSD von CSRG, BSD/386, 386BSD, NetBSD und OpenBSD verwenden können. Der bevorzugte Weg, um 4.3BSD/Reno (1990) und neuere Versionen des BSD-Quelltextes zu unterscheiden, ist das BSD-Makro zu nutzen, welches in sys/param.h definiert ist. Hoffentlich ist diese Datei schon enthalten – falls nicht, so fügen Sie folgenden Quelltext: #if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif an der richtigen Stelle in der .c Datei hinzu. Wir glauben, dass jedes System, welches diese beiden Symbole definiert, die Datei sys/param.h besitzt. Wenn Sie auf Systeme stoßen, wo dies nicht so ist, würden wir gerne davon erfahren. Bitte senden Sie eine E-Mail an &a.ports;. Eine andere Möglichkeit zur Unterscheidung ist der GNU Autoconf-Stil: #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif Vergessen Sie nicht -DHAVE_SYS_PARAM_H zu den CFLAGS im Makefile hinzuzufügen, falls Sie diese Methode benutzen sollten. Sobald Sie sys/param.h hinzugefügt haben, können Sie mit Hilfe von #if (defined(BSD) && (BSD >= 199103)) unterscheiden, ob der Quelltext auf einer 4.3 Net2 Code-Basis oder neuer (z.B. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 und niedriger) kompiliert werden wird. Benutzen Sie: #if (defined(BSD) && (BSD >= 199306)) um zu differenzieren, ob der Quelltext auf der Basis von 4.4 Code oder neuer (z.B. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 oder höher) kompiliert werden wird. Der Wert des BSD-Makros ist 199506 für die 4.4BSD-Lite2 Codebasis. Beachten Sie bitte, dass dies hier nur der Information wegen angegeben ist. Das Makro sollte nicht dazu benutzt werden, um zwischen Versionen von FreeBSD, welche auf 4.4-Lite basieren, und Versionen, welche Änderungen von 4.4-Lite2 übernommen haben, zu unterscheiden. Das __FreeBSD__ Makro sollte stattdessen verwandt werden. Sparsam sollte eingesetzt werden: __FreeBSD__ ist in allen Versionen von FreeBSD definiert. Benutzen Sie dieses Makro, falls die Änderung(en), die Sie machen, nur FreeBSD betrifft. Portierungsfallen, wie der Gebrauch von sys_errlist[] gegenüber strerror() sind Berkeley-Eigenheiten, keine FreeBSD Änderungen. In FreeBSD 2.x, ist __FreeBSD__ auf 2 definiert. In älteren Versionen, ist es 1. Alle späteren Versionen erhöhen es, damit es mit der Haupt-Versionsnummer übereinstimmt. Falls Sie zwischen einem FreeBSD 1.x und einem FreeBSD 2.x (oder höher) System unterscheiden müssen, ist es normalerweise richtig, die BSD-Makros (wie oben beschrieben) zu benutzen. Gibt es tatsächlich eine FreeBSD-spezifische Änderung (wie z.B. spezielle Optionen von Shared-Libraries für ld), ist es nicht zu beanstanden __FreeBSD__ und #if __FreeBSD__ > 1 zu nutzen, um FreeBSD 2.x und spätere Systeme zu erkennen. Falls Sie eine höhere Genauigkeit benötigen, um FreeBSD Systeme seit 2.0-RELEASE zu erkennen, können Sie folgendes nutzen: #if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif In den Tausenden von Ports, die bis jetzt erstellt wurden, gab es nur ein oder zwei Fälle, in denen __FreeBSD__ hätte benutzt werden sollen. Nur weil ein früherer Port es an der falschen Stelle benutzt hatte, bedeutet das nicht, dass Sie dies auch machen sollten. __FreeBSD_version Werte Hier ist eine praktische Liste von __FreeBSD_version-Werten wie in sys/param.h definiert: __FreeBSD_version-Werte Release __FreeBSD_version 2.0-RELEASE 119411 2.1-CURRENT 199501, 199503 2.0.5-RELEASE 199504 2.2-CURRENT vor 2.1 199508 2.1.0-RELEASE 199511 2.2-CURRENT vor 2.1.5 199512 2.1.5-RELEASE 199607 2.2-CURRENT vor 2.1.6 199608 2.1.6-RELEASE 199612 2.1.7-RELEASE 199612 2.2-RELEASE 220000 2.2.1-RELEASE 220000 (keine Änderung) 2.2-STABLE nach 2.2.1-RELEASE 220000 (keine Änderung) 2.2-STABLE nach texinfo-3.9 221001 2.2-STABLE nach top 221002 2.2.2-RELEASE 222000 2.2-STABLE nach 2.2.2-RELEASE 222001 2.2.5-RELEASE 225000 2.2-STABLE nach 2.2.5-RELEASE 225001 2.2-STABLE nach der Aufnahme von ldconfig -R 225002 2.2.6-RELEASE 226000 2.2.7-RELEASE 227000 2.2-STABLE nach 2.2.7-RELEASE 227001 2.2-STABLE nach &man.semctl.2; Änderung 227002 2.2.8-RELEASE 228000 2.2-STABLE nach 2.2.8-RELEASE 228001 3.0-CURRENT vor &man.mount.2; Änderung 300000 3.0-CURRENT nach &man.mount.2; Änderung 300001 3.0-CURRENT nach &man.semctl.2; Änderung 300002 3.0-CURRENT nach ioctl arg Änderungen 300003 3.0-CURRENT nach ELF-Konvertierung 300004 3.0-RELEASE 300005 3.0-CURRENT nach 3.0-RELEASE 300006 3.0-STABLE nach 3/4 Zweig 300007 3.1-RELEASE 310000 3.1-STABLE nach 3.1-RELEASE 310001 3.1-STABLE nach Änderung der C++ Konstruktor/Destruktor-Reihenfolge 310002 3.2-RELEASE 320000 3.2-STABLE 320001 3.2-STABLE nach binär-inkompatibler IPFW und Socket-Änderungen 320002 3.3-RELEASE 330000 3.3-STABLE 330001 3.3-STABLE nach Hinzufügen von &man.mkstemp.3; zur libc 330002 3.4-RELEASE 340000 3.4-STABLE 340001 3.5-RELEASE 350000 3.5-STABLE 350001 4.0-CURRENT nach 3.4 Zweig 400000 4.0-CURRENT nach der Änderung im Verhalten des dynamischen Linkers. 400001 4.0-CURRENT nach Änderung der C++ Konstruktor/Destruktor Reihenfolge. 400002 4.0-CURRENT nach funktionierendem &man.dladdr.3;. 400003 4.0-CURRENT nach der __deregister_frame_info Fehlerbehebung für den dynamischen Linker (auch 4.0-CURRENT nach EGCS 1.1.2 Integration). 400004 4.0-CURRENT nach &man.suser.9; API Änderung (auch 4.0-CURRENT nach newbus). 400005 4.0-CURRENT nach Änderung der cdevsw-Registrierung. 400006 4.0-CURRENT nach Hinzufügen von so_cred für Zugangsberechtigungen auf Socket-Ebene. 400007 4.0-CURRENT nach Hinzufügen eines poll Syscall-Wrappers zur libc_r. 400008 4.0-CURRENT nach der Änderung des Kernel dev_t-Typs zum struct specinfo-Zeiger. 400009 4.0-CURRENT nach dem Beseitigen eines Fehlers in &man.jail.2;. 400010 4.0-CURRENT nach der sigset_t Datentyp Änderung. 400011 4.0-CURRENT nach dem Wechsel zum GCC 2.95.2-Compiler. 400012 4.0-CURRENT nach Hinzufügen der erweiterbaren Linux Mode ioctl-Routinen. 400013 4.0-CURRENT nach dem OpenSSL-Import. 400014 4.0-CURRENT nach der C++ ABI Änderung in GCC 2.95.2 von -fvtable-thunks zu -fno-vtable-thunks als Standard. 400015 4.0-CURRENT nach OpenSSH-Import. 400016 4.0-RELEASE 400017 4.0-STABLE nach 4.0-RELEASE 400018 4.0-STABLE nach der Einführung von verzögerten Prüfsummen. 400019 4.0-STABLE nach dem Einpflegen des libxpg4-Quelltextes in die libc. 400020 4.0-STABLE nach der Aktualisierung von Binutils auf 2.10.0, Änderungen der binären ELF-Markierungen, Aufnahme von tcsh ins Basissystem. 400021 4.1-RELEASE 410000 4.1-STABLE nach 4.1-RELEASE 410001 4.1-STABLE nachdem &man.setproctitle.3; von der libutil in die libc verschoben wurde. 410002 4.1.1-RELEASE 411000 4.1.1-STABLE nach 4.1.1-RELEASE 411001 4.2-RELEASE 420000 4.2-STABLE nach Kombinaion von libgcc.a und libgcc_r.a und zugehörigen Änderungen der GCC-Bindungen. 420001 4.3-RELEASE 430000 4.3-STABLE nach der Einführung von wint_t. 430001 4.3-STABLE nach dem Einpflegen der PCI Stromstatus-API. 430002 4.4-RELEASE 440000 4.4-STABLE nach der Einführung von d_thread_t. 440001 4.4-STABLE nach den Änderungen der mount-Struktur (betrifft Dateisystem-Kernelmodule). 440002 4.4-STABLE nachdem die Userland-Komponenten von smbfs importiert worden sind. 440003 4.5-RELEASE 450000 4.5-STABLE nach der Umbenennung von Elementen der USB-Struktur. 450001 4.5-STABLE nachdem die sendmail_enable &man.rc.conf.5; Variable geändert worden ist, um den Wert - NONE zu akzeptieren. + NONE zu akzeptieren. 450004 4.5-STABLE nachdem XFree86 4 als Standard zum Bauen der Pakete benutzt wird. 450005 4.5-STABLE nach dem Reparieren des Empfangsfilters, welcher anfällig für einfache DoS-Attacken war. 450006 4.6-RELEASE 460000 4.6-STABLE &man.sendfile.2; repariert, um mit der Dokumentation übereinzustimmen, und nicht mehr die Anzahl der gesendeten Header mit der Anzahl der Daten, welche aus der Datei geschickt werden, gegenzurechnen. 460001 4.6.2-RELEASE 460002 4.6-STABLE 460100 4.6-STABLE nach dem Einfließen von `sed -i' aus CURRENT. 460101 4.6-STABLE nach dem Einfließen von vielen neuen pkg_install-Funktionen aus HEAD (HEAD = die aktuellste und letzte Version des Quellverzeichnisbaumes). 460102 4.7-RELEASE 470000 4.7-STABLE 470100 Beginn von generierten __std{in,out,err}p Referenzen statt __sF. Dies ändert std{in,out,err} von einem Ausdruck während des Kompilierens zu einem Laufzeitausdruck. 470101 4.7-STABLE nach dem Einfliessen von mbuf-Änderungen, um m_aux mbufs mit denen von m_tag zu ersetzen 470102 4.7-STABLE erhält OpenSSL 0.9.7 470103 4.8-RELEASE 480000 4.8-STABLE 480100 4.8-STABLE nachdem &man.realpath.3; Thread-sicher gemacht wurde. 480101 4.8-STABLE Änderung der 3ware-API in twe. 480102 4.9-RELEASE 490000 4.9-STABLE 490100 4.9-STABLE nachdem e_sid zu der Struktur kinfo_eproc hinzugefügt wurde. 490101 4.9-STABLE nach dem Einfliessen der libmap-Funktionalität für rtld. 490102 4.10-RELEASE 491000 4.10-STABLE 491100 4.10-STABLE nach dem Einfliessen von Revision 20040629 der Paket-Werkzeuge aus CURRENT. 491101 4.10-STABLE nach der Fehlerbehebung in der VM, um das Freigeben von fiktiven Speicherseiten korrekt zu handhaben. 491102 4.11-RELEASE 492000 4.11-STABLE 492100 4.11-STABLE nach dem Hinzufügen von libdata/ldconfig Verzeichnissen zu den mtree-Dateien. 492101 5.0-CURRENT 500000 5.0-CURRENT nach Hinzufügen von zusätzlichen Feldern in den ELF-Headern und Ändern der Methode zur ELF-Markierung von Binärdateien. 500001 5.0-CURRENT nach kld-Metadaten Änderungen. 500002 5.0-CURRENT nach buf/bio Änderungen. 500003 5.0-CURRENT nach binutils Aktualisierung. 500004 5.0-CURRENT nach dem Einfliessen des libxpg4 Quelltextes in die libc und der Einführung der TASKQ-Schnittstelle. 500005 5.0-CURRENT nach dem Hinzufügen der AGP-Schnittstellen. 500006 5.0-CURRENT nach der Aktualisierung von Perl auf Version 5.6.0. 500007 5.0-CURRENT nach der Aktualisierung des KAME-Quelltextes zu den 2000/07-Quellen. 500008 5.0-CURRENT nach ether_ifattach() und ether_ifdetach() Änderungen. 500009 5.0-CURRENT nachdem die mtree-Standards zurück zur ursprünglichen Variante geändert wurden; -L hinzugefügt, um Symlinks zu folgen. 500010 5.0-CURRENT nachdem die kqueue-API geändert worden ist. 500011 5.0-CURRENT nachdem &man.setproctitle.3; von libutil nach libc verschoben worden ist. 500012 5.0-CURRENT nach dem ersten SMPng-Commit. 500013 5.0-CURRENT nachdem <sys/select.h> nach <sys/selinfo.h> verschoben worden ist. 500014 5.0-CURRENT nach dem Kombinieren von libgcc.a und libgcc_r.a und damit verbundene Änderungen an GCC-Bindungen. 500015 5.0-CURRENT nach der Änderung das Zusammenbinden von libc und libc_r zu erlauben, womit die -pthread Option veraltet ist. 500016 5.0-CURRENT nach dem Umschalten von struct ucred zu struct xucred, um die vom Kernel exportierte API für mount u.a.zu stabilisieren. 500017 5.0-CURRENT nach dem Hinzufügen der CPUTYPE make Variable zum Kontrollieren von CPU-spezifischen Optimierungen. 500018 5.0-CURRENT nach dem Verschieben von machine/ioctl_fd.h nach sys/fdcio.h 500019 5.0-CURRENT nach der Umbenennung der locale-Namen. 500020 5.0-CURRENT nach dem Bzip2-Import. Kennzeichnet auch, dass S/Key entfernt wurde. 500021 5.0-CURRENT nach SSE Unterstützung. 500022 5.0-CURRENT nach KSE-Meilenstein 2. 500023 5.0-CURRENT nach d_thread_t, und nachdem UUCP in die Ports verschoben worden ist. 500024 5.0-CURRENT nach Änderungen in der ABI bei der Weitergabe von Deskriptoren und Berechtigungen auf 64 Bit Plattformen. 500025 5.0-CURRENT nachdem XFree86 4 als Standard zum Erstellen der Pakete benutzt wird und die neue libc strnstr()-Funktion hinzugefügt wurde. 500026 5.0-CURRENT nachdem die neue libc strcasestr()-Funktion hinzugefügt wurde. 500027 5.0-CURRENT nachdem die Userland-Komponenten von smbfs importiert wurden. 500028 5.0-CURRENT nachdem die neuen C99-Ganzzahlen mit spezifischer Breite hinzugefügt wurden. (Nicht hochgezählt.) 5.0-CURRENT nachdem eine Änderung im Rückgabewert von &man.sendfile.2; gemacht wurde. 500029 5.0-CURRENT nach der Einführung des Types fflags_t, welches die passende Größe für Dateiflags hat. 500030 5.0-CURRENT nach der Umbenennung der USB elements-Struktur. 500031 5.0-CURRENT nach der Einführung von Perl 5.6.1. 500032 5.0-CURRENT nachdem die sendmail_enable &man.rc.conf.5; Variable geändert worden ist, um den Wert NONE zu akzeptieren. 500033 5.0-CURRENT nachdem mtx_init() einen dritten Parameter entgegen nimmt. 500034 5.0-CURRENT mit GCC 3.1. 500035 5.0-CURRENT ohne Perl in /usr/src 500036 5.0-CURRENT nach dem Hinzufügen von &man.dlfunc.3; 500037 5.0-CURRENT nachdem die Typen von einigen Elementen der sockbuf-Struktur geändert wurden und nachdem die Struktur neu geordnet wurde. 500038 5.0-CURRENT nach dem GCC 3.2.1 Import. Und auch nachdem die Header nicht mehr _BSD_FOO_T_ sondern _FOO_T_DECLARED benutzen. Dieser Wert kann auch als konservative Schätzung für den Beginn der Unterstützung des &man.bzip2.1; Pakets verwendet werden. 500039 5.0-CURRENT nachdem verschiedene Änderungen an Plattenfunktionen gemacht wurden, um die Anhängigkeit von Interna der disklabel-Struktur zu entfernen. 500040 5.0-CURRENT nach dem Hinzufügen von &man.getopt.long.3; zur libc. 500041 5.0-CURRENT nach der Aktualisierung von Binutils auf 2.13, bei denen die FreeBSD-Emulation, vec und das Ausgabeformat geändert wurden. 500042 5.0-CURRENT nach dem Hinzufügen schwacher pthread_XXX Stubs zur libc, womit libXThrStub.so veraltet ist. 5.0-RELEASE. 500043 5.0-CURRENT nach dem Erstellen des RELENG_5_0-Zweiges 500100 <sys/dkstat.h> ist leer und sollte nicht inkludiert werden. 500101 5.0-CURRENT nach der Änderung in der d_mmap_t-Schnittstelle. 500102 5.0-CURRENT nachdem taskqueue_swi geädert wurde, um ohne Giant zu arbeiten, und taskqueue_swi_giant hinzugefügt wurde, um Giant zu verwenden. 500103 cdevsw_add() und cdevsw_remove() gibt es nicht länger. Auftauchen der MAJOR_AUTO-Allokationsmöglichkeit. 500104 5.0-CURRENT nach der neuen cdevsw-Initialisierungsmethode. 500105 devstat_add_entry() wurde durch devstat_new_entry() ersetzt. 500106 Devstat Schnittstellenänderung; siehe sys/sys/param.h 1.149. 500107 Token-Ring Schnittstellenänderungen. 500108 Hinzufügen von vm_paddr_t. 500109 5.0-CURRENT nachdem &man.realpath.3; Thread-sicher gemacht wurde. 500110 5.0-CURRENT nachdem &man.usbhid.3; mit NetBSD synchronisiert wurde. 500111 5.0-CURRENT nach der neuen NSS Implementierung und Hinzufügen der POSIX.1 getpw*_r, getgr*_r Funktionen. 500112 5.0-CURRENT nach Entfernen des alten rc-Systems. 500113 5.1-RELEASE. 501000 5.1-CURRENT nach dem Erstellen des RELENG_5_1 Zweiges. 501100 5.1-CURRENT nachdem die Semantik von sigtimedwait(2) and sigwaitinfo(2) korrigiert wurden. 501101 5.1-CURRENT nach dem Hinzufügen der lockfunc und lockfuncarg-Felder zu &man.bus.dma.tag.create.9;. 501102 5.1-CURRENT nach der Integration des GCC 3.3.1-pre 20030711 Snapshots. 501103 5.1-CURRENT 3ware-API Änderungen in twe. 501104 5.1-CURRENT Unterstützung von dynamisch gebundenen /bin und /sbin und Verschieben von Bibliotheken nach /lib. 501105 5.1-CURRENT nachdem im Kernel Unterstützung für Coda 6.x hinzugefügt wurden. 501106 5.1-CURRENT nachdem die 16550 UART-Konstanten von <dev/sio/sioreg.h> nach <dev/ic/ns16550.h> verschoben wurden. Und nachdem die libmap Funktionalität vorbehaltlos vom rtld unterstützt wurde. 501107 5.1-CURRENT nach Aktualisierung der PFIL_HOOKS API. 501108 5.1-CURRENT nachdem kiconv(3) hinzugefügt wurde. 501109 5.1-CURRENT nachdem der standardmäßige Ablauf von open und close in cdevsw geändert wurde. 501110 5.1-CURRENT nachdem das Layout von cdevsw geändert wurde. 501111 5.1-CURRENT nach dem Hinzufügen von Mehrfachvererbung in kobj. 501112 5.1-CURRENT nach der if_xname Änderung in der Struktur ifnet 501113 5.1-CURRENT nachdem /bin und /sbin geändert wurden, um sie dynamisch zu binden. 501114 5.2-RELEASE 502000 5.2.1-RELEASE 502010 5.2-CURRENT nach dem Erstellen des RELENG_5_2-Zweiges. 502100 5.2-CURRENT nachdem die __cxa_atexit/__cxa_finalize Funktionen zur libc hinzugefügt wurden. 502101 5.2-CURRENT nachdem die Standard-Thread Bibliothek von libc_r zu libpthread geändert wurde. 502102 5.2-CURRENT nach dem Gerätetreiber API Megapatch. 502103 5.2-CURRENT nachdem getopt_long_only() hinzugefügt wurde. 502104 5.2-CURRENT nachdem NULL für C in ((void *)0) geändert wurde, was mehr Warnungen erzeugt. 502105 5.2-CURRENT nachdem pf beim Bauen und Installieren mit eingebunden wird. 502106 5.2-CURRENT nachdem time_t auf der sparc64-Plattform in einen 64-bit Wert geändert wurde. 502107 5.2-CURRENT nachdem sich die Unterstützung für den Intel C/C++-Compiler in einigen Headern und execve(2) geändert hat, um sich strikter an POSIX zu halten. 502108 5.2-CURRENT nach der Einführung der bus_alloc_resource_any API 502109 5.2-CURRENT nach dem Hinzufügen von UTF-8 locales 502110 5.2-CURRENT nach dem Entfernen der getvfsent(3) API 502111 5.2-CURRENT nach dem Hinzufügen der .warning Directive für make. 502112 5.2-CURRENT nachdem ttyioctl() zwingend erforderlich für serielle Treiber gemacht wurde. 502113 5.2-CURRENT nach dem Import des ALTQ-Frameworks. 502114 5.2-CURRENT nachdem sema_timedwait(9) geändert wurde, 0 bei Erfolg und einen von 0 verschiedenen Fehlercode im Falle eines Fehlers zurückzuliefern. 502115 5.2-CURRENT nach dem Ändern der Kernel Struktur dev_t, in ein Zeiger auf die Struktur cdev * 502116 5.2-CURRENT nach dem Ändern der Kernelstruktur udev_t in dev_t. 502117 5.2-CURRENT nachdem Unterstützung für CLOCK_VIRTUAL und CLOCK_PROF zu clock_gettime(2) und clock_getres(2) hinzugefügt wurde. 502118 5.2-CURRENT nachdem die Überprüfung des Klonens von Netzwerk-Schnittstellen geändert wurde. 502119 5.2-CURRENT nach dem Einfliessen von Revision 20040629 der Paket-Werkzeuge. 502120 5.2-CURRENT nachdem Bluetooth-Quelltext als nicht i386-spezifisch markiert wurde. 502121 5.2-CURRENT nach der Einführung des KDB Debugger Frameworks, der Umwandlung des DDB in ein Backend und der Einführung des GDB-Backends. 502122 5.2-CURRENT nachdem VFS_ROOT geändert wurde, eine Struktur thread als Argument zu aktzeptieren, wie vflush. Die Struktur kinfo_proc enthält nun einen Zeiger auf Benutzer Daten. Der Umstieg auf xorg als standardmäßige X Implementierung wurde auch zu dieser Zeit durchgeführt. 502123 5.2-CURRENT nachdem die Art und Weise, wie rc.d-Skripte von Ports und Altlasten gestartet werden, getrennt wurde. 502124 5.2-CURRENT nachdem die vorherige Änderung rückgängig gemacht wurde. 502125 5.2-CURRENT nach dem Entfernen von kmem_alloc_pageable() und dem Import von GCC 3.4.2. 502126 5.2-CURRENT nachdem die UMA Kernel API geändert wurde, um Konstruktoren und Initialisierungsmethoden zu erlauben fehlzuschlagen. 502127 5.2-CURRENT nach der Änderung in der vfs_mount Signatur sowie allgemeines Ersetzen von PRISON_ROOT durch SUSER_ALLOWJAIL in der suser(9) API. 502128 5.3-BETA/RC vor der Änderung der pfil-API. 503000 5.3-RELEASE 503001 5.3-STABLE nach dem Erstellen des RELENG_5_3-Zweiges. 503100 5.3-STABLE nach dem Hinzufügen von Fülloptionen im Stile der libc zu &man.strftime.3;. 503101 5.3-STABLE nachdem OpenBSD's nc(1) von CURRENT importiert wurde. 503102 5.4-PRERELEASE nach dem Einfliessen der Reparaturen aus CURRENT, in <src/include/stdbool.h> und <src/sys/i386/include/_types.h>, um die GCC-Kompatibilität des Intel C/C++-Compilers zu benutzen. 503103 5.4-PRERELEASE nach dem Einfliessen der Änderung aus CURRENT in ifi_epoch statt der lokalen Zeit die Betriebszeit des Systems zu benutzen. 503104 5.4-PRERELEASE nach dem Einfliessen der Reparaturen von EOVERFLOW in vswprintf(3) aus CURRENT. 503105 5.4-RELEASE. 504000 5.4-STABLE nach dem Erstellen des RELENG_5_4-Zweiges. 504100 5.4-STABLE nach dem Vergrößern der standardmäßigen Stackgröße für Threads. 504101 5.4-STABLE nach dem Hinzufügen von sha256. 504102 5.4-STABLE nach dem Einfliessen von if_bridge aus CURRENT. 504103 5.4-STABLE nach dem Einfliessen von bsdiff und portsnap aus CURRENT. 504104 5.4-STABLE nach dem Einfliessen der Änderung von ldconfig_local_dirs aus CURRENT. 504105 5.5-RELEASE. 505000 5.5-STABLE nach dem Erstellen des RELENG_5_5-Zweiges. 505100 6.0-CURRENT 600000 6.0-CURRENT nach der festen Aktivierung von PFIL_HOOKS im Kernel. 600001 6.0-CURRENT nach der anfänglichen Einführung von ifi_epoch zur Struktur if_data. Wurde nach ein paar Tagen wieder rückgängig gemacht. Benutzen Sie diesen Wert bitte nicht. 600002 6.0-CURRENT nach dem erneuten Hinzufügen des Elements ifi_epoch zur Struktur if_data. 600003 6.0-CURRENT nach dem Hinzufügen der Struktur inpcb als Argument in der pfil API. 600004 6.0-CURRENT nach dem Hinzufügen des "-d DESTDIR" Schalters zu newsyslog. 600005 6.0-CURRENT nach dem Hinzufügen von Fülloptionen im Style der libc zu &man.strftime.3;. 600006 6.0-CURRENT nach dem Hinzufügen von 802.11 Framework Neuerungen. 600007 6.0-CURRENT Änderung an den VOP_*VOBJECT() Funktionen und Einführung des MNTK_MPSAFE Schalters für Dateisysteme, welche ohne Giant arbeiten. 600008 6.0-CURRENT nach dem Hinzufügen von cpufreq Framework und Treibern. 600009 6.0-CURRENT nachdem OpenBSD's nc(1) importiert wurde. 600010 6.0-CURRENT nachdem der Anschein von matherr() Unterstützung in SVID2 entfernt wurde. 600011 6.0-CURRENT nach dem Vergrößern der standardmäßigen Stackgröße für Threads. 600012 6.0-CURRENT nach dem Einfliessen der Reparaturen in <src/include/stdbool.h> und <src/sys/i386/include/_types.h>, um die GCC-Kompatibilität des Intel C/C++-Compilers zu benutzen. 600013 6.0-CURRENT nachdem die Überprüfungen auf EOVERFLOW in vswprintf(3) korrigiert wurden. 600014 6.0-CURRENT nach dem Einfliessen der Änderung, in ifi_epoch, statt der lokalen Zeit, die Betriebzeit des Systems zu benutzen. 600015 6.0-CURRENT nachdem das Format von LC_CTYPE auf der Festplatte verändert wurde. 600016 6.0-CURRENT nachdem das Format der NLS-Kataloge auf der Festplatte verändert wurde. 600017 6.0-CURRENT nachdem das Format von LC_COLLATE auf der Festplatte verändert wurde. 600018 Installation der acpica Include-Dateien in /usr/include. 600019 Hinzufügen des MSG_NOSIGNAL Schalters zur send(2) API. 600020 Hinzufügen von Feldern zu cdevsw 600021 gtar wurde aus dem Basissystem entfernt. 600022 Die Optionen LOCAL_CREDS, LOCAL_CONNWAIT für Sockets wurde zu unix(4) hinzugefügt. 600023 &man.hwpmc.4; und zugehörige Werkzeuge wurden zu 6.0-CURRENT hinzugefügt. 600024 Die Struktur icmphdr wurden zu 6.0-CURRENT hinzugefügt. 600025 pf Aktualisierung auf 3.7. 600026 Kernel libalias und ng_nat wurden eingeführt. 600027 POSIX ttyname_r(3) wurde über unistd.h und libc zur Verfügung gestellt. 600028 6.0-CURRENT nachdem libpcap zu Version v0.9.1 alpha 096 aktualisiert wurde. 600029 6.0-CURRENT nach dem Import von NetBSDs if_bridge(4). 600030 6.0-CURRENT nachdem die Struktur ifnet aus dem Treiber softcs herausgelöst wurde. 600031 6.0-CURRENT nach dem Import von libpcap v0.9.1. 600032 6.0-STABLE nachdem die Versionen aller gemeinsam genutzten Bibliotheken, welche seit RELENG_5 nicht geändert wurden, erhöht wurden. 600033 6.0-STABLE nachdem das Argument credential zu der dev_clone-Ereignisbehandlung hinzugefügt wurde. 6.0-RELEASE. 600034 6.0-STABLE nach dem Erstellen des 6.0-RELEASE-Zweiges. 600100 6.0-STABLE nach dem Aufnehmen von Skripten aus den local_startup-Verzeichnissen in &man.rcorder.8; des Basissystems. 600101 6.0-STABLE nach dem Aktualisieren der ELF-Typen und Konstanten. 600102 6.0-STABLE nach dem Einfliessen der pidfile(3)-API aus CURRENT. 600103 6.0-STABLE nach dem Einfliessen der Änderung von ldconfig_local_dirs aus CURRENT. 600104 6.0-STABLE nach der NLS-Katalogunterstützung von csh(1). 600105 6.1-RELEASE 601000 6.1-STABLE nach 6.1-RELEASE. 601100 6.1-STABLE nach dem Import von csup. 601101 6.1-STABLE nach der iwi(4)-Aktualisierung. 601102 6.1-STABLE nach der Aktualisierung der Namensauflösung zu BIND9 und Aufnahme der ablaufinvarianten Versionen der netdb-Funktionen. 601103 6.1-STABLE nachdem Unterstützung für DSO (dynamic shared objects - gemeinsam genutzte, dynamische Objekte) in OpenSSL aktiviert wurde. 601104 6.1-STABLE nachdem 802.11 Reparaturen die API der IEEE80211_IOC_STA_INFO ioctl geändert haben. 601105 6.2-RELEASE 602000 6.2-STABLE nach 6.2-RELEASE. 602100 6.2-STABLE nach dem Hinzufügen der Wi-Spy Eigenart. 602101 6.2-STABLE nachdem pci_find_extcap() hinzugefügt wurde. 602102 6.2-STABLE nach dem Einpflegen der dlsym Änderung aus CURRENT, ein angefordertes Symbol sowohl in der spezifizierten dso, als auch in den impliziten Abhängigkeiten nachzuschlagen. 602103 6.2-STABLE nach dem Einpflegen von ng_deflate(4) und ng_pred1(4) netgraph Knoten und neuen Kompressions- und -Verschlüsselungmodi für den ng_ppp(4) Knoten aus CURRENT. 602104 6.2-STABLE nach dem Einpflegen der BSD lizensierten Version von &man.gzip.1;, welche von NetBSD portiert wurde aus CURRENT. 602105 6.2-STABLE nach dem Einpflegen der PCI MSI und MSI-X Unterstützung aus CURRENT. 602106 6.2-STABLE nach dem Einpflegen von ncurses 5.6 und Unterstützung für Multibyte-Zeichen aus CURRENT. 602107 6.2-STABLE nach dem Einpflegen des 'SG' Peripheriegerätes aus CURRENT in CAM, welches einen Teil der SCSI SG passthrough Geräte API von Linux enthält. 602108 6.2-STABLE nach dem Einpflegen von readline 5.2 Patchset 002 aus CURRENT. 602109 6.2-STABLE nach dem Einpflegen von pmap_invalidate_cache(), pmap_change_attr(), pmap_mapbios(), pmap_mapdev_attr(), und pmap_unmapbios() für amd64 und i386 aus CURRENT. 602110 6.2-STABLE nach dem Einpflegen von BOP_BDFLUSH aus CURRENT und dem daraus resultierendem Bruch mit dem Dateisystemmodul KBI. 602111 6.2-STABLE nach dem Einpflegen von libutil(3) aus CURRENT. 602112 6.2-STABLE, nach der Trennung in "wide und single byte ctype". Neu kompilierte Binärdateien, die ctype.h referenzieren, erfordern möglicherweise ein neues Symbol, __mb_sb_limit, das auf älteren Systemen nicht verfügbar ist. 602113 6.2-STABLE, nachdem die ctype ABI-Aufwärtskompatibilität wiederhergestellt wurde. 602114 + + + FreeBSD 6.2-STABLE nach der Entfernung/Eliminierung + der wide und single Byte ctype-Trennung + 602115 + + + 6.3-RELEASE + 603000 + + + 6.3-STABLE nach 6.3-RELEASE. + 603100 + 7.0-CURRENT. 700000 7.0-CURRENT nachdem die Versionen aller gemeinsam genutzten Bibliothken, welche seit RELENG_5 nicht geändert wurden, erhöht wurden. 700001 7.0-CURRENT nachdem ein Berechtigungs-Argument zur dev_clone-Ereignisroutine hinzugefügt wurde. 700002 7.0-CURRENT nachdem memmem(3) zur libc hinzugefügt wurde. 700003 7.0-CURRENT nachdem die Argumente der Kernelfunktion solisten(9) modifiziert wurden, um einen Backlog-Parameter (Anzahl der maximalen wartenden Verbindungen) zu akzeptieren. 700004 7.0-CURRENT nachdem IFP2ENADDR() geändert wurde, einen Zeiger auf IF_LLADDR() zurückzugeben. 700005 7.0-CURRENT nach dem Hinzufügen des if_addr-Elements zur Struktur ifnet und dem Entfernen von IFP2ENADDR(). 700006 7.0-CURRENT nach dem Aufnehmen von Skripten aus den local_startup Verzeichnissen in &man.rcorder.8; des Basissystems. 700007 7.0-CURRENT nach dem Entfernen der MNT_NODEV mount-Option. 700008 7.0-CURRENT nach ELF-64 Typen Änderungen und Symbol Versionierung. 700009 7.0-CURRENT nach Hinzufügen der hostb und vgapci Treiber, Hinzufügen von pci_find_extcap() und Änderung der AGP Treiber die Apertur nicht länger abzubilden. 700010 7.0-CURRENT nachdem auf allen Plattformen außer Alpha tv_sec in time_t umgewandelt wurde. 700011 7.0-CURRENT nach Änderung von ldconfig_local_dirs. 700012 7.0-CURRENT nach Änderung in /etc/rc.d/abi um /compat/linux/etc/ld.so.cache als Symlink in ein schreibgeschütztes Dateisystem zu unterstützen. 700013 7.0-CURRENT nach pts Import. 700014 7.0-CURRENT nach Einführung von Version 2 der &man.hwpmc.4;'s ABI. 700015 7.0-CURRENT nach dem Hinzufügen von &man.fcloseall.3; zur libc. 700016 7.0-CURRENT nach dem Entfernen von ip6fw. 700017 7.0-CURRENT nach dem Import von snd_emu10kx. 700018 7.0-CURRENT nach dem Import von OpenSSL 0.9.8b. 700019 7.0-CURRENT nach dem Hinzufügen der bus_dma_get_tag-Funktion 700020 7.0-CURRENT nach dem Import von libpcap 0.9.4 und tcpdump 3.9.4. 700021 7.0-CURRENT nach der dlsym Änderung, ein angefordertes Symbol sowohl in der spezifizierten dso, als auch in den impliziten Abhängigkeiten nachzuschlagen. 700022 7.0-CURRENT nach dem Hinzufügen neuer Sound-IOCTLs. 700023 7.0-CURRENT nach dem Import von OpenSSL 0.9.8d. 700024 7.0-CURRENT nach dem Hinzufügen der libelf. 700025 7.0-CURRENT nach größeren Änderungen an den Sound sysctls. 700026 7.0-CURRENT nach dem Hinzufügen der Wi-Spy-Eigenart. 700027 7.0-CURRENT nach dem Hinzufügen von sctp-Aufrufen zur libc. 700028 7.0-CURRENT nach dem Ersetzen von GNU &man.gzip.1; durch eine von NetBSD portierte Version, die unter BSD-Lizenz steht. 700029 7.0-CURRENT nach dem Entfernen der IPIP Tunnelkapselung (VIFF_TUNNEL) aus dem IPv4 Multicast-Forwarding-Quelltext. 700030 7.0-CURRENT nach den Modifizierungen an bus_setup_intr() (newbus). 700031 7.0-CURRENT nach der Aufnahme der Firmware für ipw(4) und iwi(4). 700032 7.0-CURRENT nach Unterstützung für Multibyte-Zeichen. 700033 7.0-CURRENT nach Änderungen, wie insmntque(), getnewvnode() und vfs_hash_insert() arbeiten. 700034 7.0-CURRENT nach Hinzufügen eines Benachrichtigungsmechanismus für CPU Frequenzänderungen. 700035 7.0-CURRENT nach dem Import des ZFS Dateisystemes. 700036 7.0-CURRENT nach dem Einpflegen des 'SG' Peripheriegerätes in CAM, welches einen Teil der SCSI SG passthrough Geräte API von Linux enthält. 700037 7.0-CURRENT nachdem &man.getenv.3;, &man.putenv.3;, &man.setenv.3; und &man.unsetenv.3; geändert wurden, um POSIX konform zu sein. 700038 7.0-CURRENT nachdem die Änderungen von 700038 rückgängig gemacht wurden. 700039 7.0-CURRENT nach dem Hinzufügen von &man.flopen.3; zur libutil. 700040 7.0-CURRENT nachdem Symbol Versionierung aktiviert und die standardmäßige Thread-Bibliothek zu libthr geändert wurde. 700041 7.0-CURRENT nach dem Import von GCC 4.2.0. 700042 7.0-CURRENT nachdem die Versionen aller Shared-Libraries, welche seit RELENG_6 nicht geändert wurden, erhöht worden sind. 700043 7.0-CURRENT nachdem das Argument für vn_open()/VOP_OPEN() vom Dateideskriptorindex zur Struktur file * geädert wurde. 700044 7.0-CURRENT nachdem &man.pam.nologin.8; geädert wurde, eine Kontoverwaltungs-Funktion statt einer Authentifizierungsfunktion für das PAM-Framework zur Verfügung zu stellen. 700045 7.0-CURRENT nach aktualisierter 802.11 wireless Unterstützung. 700046 7.0-CURRENT, nachdem TCP-LRO-Schnittstellen-Ressourcen hinzugefügt wurden. 700047 7.0-CURRENT, nachdem die RFC 3678 API-Unterstützung zum IPv4-Stack hinzugefügt wurde. Veraltetes RFC 1724-Verhalten des IP_MULTICAST_IF ioctl wurde entfernt; 0.0.0.0/8 darf nicht länger als Schnittstellen-Index benutzt werden. Stattdessen sollte die Struktur ipmreqn verwendet werden. 700048 7.0-CURRENT, nachdem pf von OpenBSD 4.1 importiert wurde 700049 7.0-CURRENT, nachdem die IPv6-Unterstützung um FAST_IPSEC erweitert, KAME IPSEC entfernt und FAST_IPSEC in IPSEC umbenannt wurde. (nicht geändert) 7.0-CURRENT, nachdem Aufrufe von setenv/putenv/usw. von der traditionellen BSD-Art und Weise nach POSIX konvertiert wurden. 700050 7.0-CURRENT, nachdem neue Systemaufrufe (mmap/lseek/usw.) implementiert wurden. 700051 7.0-CURRENT, nachdem die I4B-Header nach include/i4b verschoben wurden. 700052 7.0-CURRENT, nachdem die Unterstützung für PCI Domänen hinzugefügt wurde. 700053 - 7.0-STABLE, nach der Trennung in "wide und + 7.0-CURRENT, nach der Trennung in "wide und single byte ctype". 700054 - 7.0-STABLE, nachdem die + 7.0-CURRENT, nachdem die ABI-Abwärtskompatibilität für die FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD- sowie PCIOCWRITE IOCTLs hinzugefügt wurde. Damit verbunden war, dass die ABI der PCIOCGETCONF IOCTL erneut deaktiviert werden musste. 700055 8.0-CURRENT. Nach der Trennung in "wide und single byte ctype". 800000 8.0-CURRENT, nachdem libpcap 0.9.8 und tcpdump 3.9.8 importiert wurden. 800001 8.0-CURRENT, nachdem kthread_create() und Konsorten in kproc_create() usw. umbenannt wurden. 800002 8.0-CURRENT, nachdem die ABI-Abwärtskompatibilität für die FreeBSD 4/5/6-Versionen der PCIOCGETCONF-, PCIOCREAD- sowie PCIOCWRITE IOCTLs hinzugefügt wurde. Damit verbunden war, dass die ABI der PCIOCGETCONF IOCTL erneut deaktiviert werden musste. 800003 + + 8.0-CURRENT, nachdem der agp(4) Treiber verschoben + wurde von src/sys/pci nach src/sys/dev/agp. + 800004 +
Beachten Sie, dass 2.2-STABLE sich nach dem 2.2.5-RELEASE manchmal als 2.2.5-STABLE identifiziert. Das Muster war früher das Jahr gefolgt von dem Monat, aber wir haben uns entschieden, ab 2.2. einen geradlinigeren Ansatz mit major/minor-Nummern zu benutzen. Dies liegt daran, dass gleichzeitiges Entwickeln an mehreren Zweigen es unmöglich macht, die Versionen nur mit Hilfe des Datums des Releases zu unterteilen. Wenn Sie jetzt einen Port erstellen brauchen Sie sich nicht um alte -CURRENTs zu kümmern; diese sind hier nur als Referenz augeführt.
Etwas hinter die <filename>bsd.port.mk</filename>-Anweisung schreiben Schreiben Sie bitte nichts hinter die .include <bsd.port.mk>-Zeile. Normalerweise kann dies vermieden werden, indem Sie die Datei bsd.port.pre.mk irgendwo in der Mitte Ihres Makefiles und bsd.port.post.mk am Ende einfügen. Sie dürfen entweder nur das bsd.port.pre.mk/bsd.port.post.mk-Paar oder bsd.port.mk alleine hinzufügen; vermischen Sie diese Verwendungen nicht! bsd.port.pre.mk definiert nur einige Variablen, welche in Tests im Makefile benutzt werden können, bsd.port.post.mk definiert den Rest. Hier sind einige wichtige Variablen, welche in bsd.port.pre.mk definiert sind (dies ist keine vollständige Liste, lesen Sie bitte bsd.port.mk für eine vollständige Auflistung). Variable Beschreibung ARCH Die Architektur, wie von uname -m zurückgegeben (z.B. i386) OPSYS Der Typ des Betriebsystems, wie von uname -s zurückgegeben (z.B. FreeBSD) OSREL Die Release Version des Betriebssystems (z.B., 2.1.5 oder 2.2.7) OSVERSION Die numerische Version des Betriebssystems; gleichbedeutend mit __FreeBSD_version. PORTOBJFORMAT Das Objektformat des Systems (elf oder aout; beachten Sie, dass für moderne Versionen von FreeBSD aout veraltet ist). LOCALBASE Die Basis des local Verzeichnisbaumes (z.B. /usr/local/) X11BASE Die Basis des X11 Verzeichnisbaumes (z.B., /usr/X11R6) PREFIX Wo der Port sich selbst installiert (siehe Mehr Informationen über PREFIX). Falls Sie die Variablen USE_IMAKE, USE_X_PREFIX, oder MASTERDIR definieren müssen, sollten Sie dies vor dem Einfügen von bsd.port.pre.mk machen. Hier sind ein paar Beispiele von Dingen, die Sie hinter die Anweisung bsd.port.pre.mk schreiben können: # lang/perl5 muss nicht kompliliert werden, falls perl5 schon auf dem System ist .if ${OSVERSION} > 300003 BROKEN= perl ist im System .endif # nur eine Versionsnummer für die ELF Version der shlib .if ${PORTOBJFORMAT} == "elf" TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} .else TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} .endif # die Software erstellt schon eine Verknüpfung fü ELF, aber nicht fü a.out post-install: .if ${PORTOBJFORMAT} == "aout" ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so .endif Sie haben sich daran erinnert Tabulator statt Leerzeichen nach BROKEN= und TCL_LIB_FILE= zu benutzen, oder? :-). Benutzen Sie die <function>exec</function>-Anweisung in Wrapper-Skripten Falls der Port ein Shellskript installiert, dessen Zweck es ist ein anderes Programm zu starten, und falls das Starten des Programmes die letzte Aktion des Skripts ist, sollten Sie sicherstellen, dass Sie die Funktion exec dafür benutzen; zum Beispiel: #!/bin/sh exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@" Die Funktion exec ersetzt den Shell-Prozess mit dem angegebenen Programm. Falls exec ausgelassen wird, verbleibt der Shell-Prozess im Speicher während das Programm ausgefährt wird und verbraucht unnötig Systemressourcen. UIDs und GIDs Die aktuellen Listen von reservierten UIDs und GIDs sind in ports/UIDs und ports/GIDs zu finden. Falls Ihr Port einen bestimmten Benutzer auf dem zu installierendem System benötigt, lassen Sie das pkg-install-Skript den Aufruf von pw machen, um ihn automatisch anzulegen. Schauen Sie sich für ein Beispiel net/cvsup-mirror an. Beachten Sie bitte, dass wir von diesem Vorgehen stark abraten! Bitte registrieren Sie Benutzer/Gruppen wie unten beschrieben. Falls Ihr Port die gleichen Benutzer/Gruppen IDs benutzen muss, egal ob als Binär-Paket installiert oder als Port kompiliert, müssen Sie eine nicht benutzte UID zwischen 50 und 999 benutzen und entweder in ports/UIDs (für Benutzer) oder in ports/GIDs (für Gruppen) registrieren. Für ein Beispiel schauen Sie sich bitte japanese/Wnn6 an. Stellen Sie sicher, dass Sie keine UIDs verwenden, welche schon vom System oder von einem anderen Port gebraucht werden. Bitte fügen Sie einen Patch für diese beiden Datei hinzu, falls für Ihren Port ein neuer Benutzer oder Gruppe angelegt werden muss. Aufgaben vernünftig lösen Das Makefile sollte die nötigen Schritte einfach und vernünftig durchführen. Wenn Sie ein einige Zeilen einsparen oder die Lesbarkeit verbessern können, dann machen Sie dies bitte. Beispiele sind: Ein make-Konstrukt .if anstatt eines Shellkonstrukt if zu verwenden, anstatt do-extract neu zu definieren, dies mit EXTRACT* machen, oder GNU_CONFIGURE anstelle von CONFIGURE_ARGS += --prefix=${PREFIX} zu verwenden. Falls Sie sich in einer Situation wiederfinden, in der Sie viel Code neu schreiben müssen, um etwas zu testen, sollten Sie zuerst bsd.port.mk erneut konsultieren und nachprüfen ob es nicht bereits eine Lösung für Ihr Problem enthält. Es ist zwar schwer zu lesen, beinhaltet jedoch eine Menge kurzer Lösungen für viele scheinbar schwierige Probleme. Berücksichtigen Sie sowohl <makevar>CC</makevar> als auch <makevar>CXX</makevar> Der Port sollte sowohl die CC- wie auch die CXX-Variable berücksichtigen. Damit ist gemeint, dass der Port diese Variablen nicht ohne Rücksicht auf eventuell schon gesetzte Werte einfach überschreiben sollte; stattdessen sollten neue Werte an schon existierende angehängt werden. Dadurch können Build-Optionen, die alle Ports betreffen, global definiert werden. Falls der Port diese Variablen nicht berücksichtigt, sollte NO_PACKAGE=ignores either cc or cxx ins Makefile eingefügt werden. Im Folgenden wird ein Beispiel eines Makefiles gezeigt, welches die beiden Variablen CC und CXX berücksichtigt. Beachten Sie das ?=: CC?= gcc CXX?= g++ Nachfolgend ein Beispiel, welches weder CC noch CXX berücksichtigt: CC= gcc CXX= g++ Die Variablen CC und CXX können auf FreeBSD-Systemen in /etc/make.conf definiert werden. Im ersten Beispiel wird ein Wert nur dann gesetzt, falls dieser vorher noch nicht gesetzt war, um so systemweite Definitionen zu berücksichtigen. Im zweiten Beispiel werden die Variablen ohne Rücksicht überschrieben. Berücksichtigen Sie <makevar>CFLAGS</makevar> Der Port sollte die Variable CFLAGS berücksichtigen. Damit ist gemeint, dass der Port den Wert dieser Variablen nicht absolut setzen und damit existierende Werte überschreiben sollte; stattdessen sollte er weitere Werte der Variablen durch Anhängen hinzufügen. Dadurch können Build-Optionen, die alle Ports betreffen, global definiert werden. Falls der Port diese Variablen nicht berücksichtigt, sollte NO_PACKAGE=ignores cflags ins Makefile eingefügt werden. Im Folgenden wird ein Beispiel eines Makefiles gezeigt, welches die Variable CFLAGS berücksichtigt. Beachten Sie das +=: CFLAGS+= -Wall -Werror Nachfolgend finden Sie ein Beispiel, welches die CFLAGS-Variable nicht berücksichtigt: CFLAGS= -Wall -Werror Die Variable CFLAGS wird auf FreeBSD-Systemen in /etc/make.conf definiert. Im ersten Beispiel werden weitere Flags an die Variable CFLAGS angehängt und somit der bestehende Wert nicht gelöscht. Im zweiten Beispiel wird die Variable ohne Rücksicht überschrieben. Sie sollten Optimierungsflags aus Makefiles Dritter entfernen. Die CFLAGS des Systems beinhalten systemweite Optimierungsflags. Ein Beispiel eines unveränderten Makefiles: CFLAGS= -O3 -funroll-loops -DHAVE_SOUND Werden nun systemweite Optimierungsflags verwendet so würde das Makefile in etwa folgendermaßen aussehen: CFLAGS+= -DHAVE_SOUND Threading-Bibliotheken Die Threading-Bibliothek muss mit Hilfe eines speziellen Linker-Flags -pthread in die Binärdateien unter &os; gebunden werden. Falls ein Port auf ein direktes Verlinken gegen -lpthread oder -lc_r besteht, passen Sie den Port bitte so an, dass er die durch das Port-Framework bereitgestellte Variable PTHREAD_LIBS verwendet. Diese Variable hat üblicherweise den Wert -pthread, kann aber auf einigen Architekturen und &os;-Versionen abweichende Werte haben und daher sollte nie -pthread direkt in Patches geschrieben werden, sondern immer PTHREAD_LIBS. Falls durch das Setzen von PTHREAD_LIBS der Bau des Ports mit der Fehlermeldung unrecognized option '-pthread' abbricht, kann die Verwendung des gcc als Linker durch setzen von CONFIGURE_ENV auf LD=${CC} helfen. Die Option -pthread wird nicht direkt von ld unterstützt. Rückmeldungen Brauchbare Änderungen/Patches sollten an den ursprünglichen Autor/Maintainer der Software geschickt werden, damit diese in der nächsten Version der Software mit aufgenommen werden können. Dadurch wird Ihre Aufgabe für die nächste Version der Software deutlich einfacher. <filename>README.html</filename> Nehmen Sie bitte keine README.html in den Port auf. Diese Datei ist kein Bestandteil der CVS-Sammlung sondern wird durch make readme erzeugt. Einen Port durch <makevar>BROKEN</makevar>, <makevar>FORBIDDEN</makevar> oder <makevar>IGNORE</makevar> als nicht installierbar markieren In manchen Fällen sollten Benutzer davon abgehalten werden einen Port zu installieren. Um einem Benutzer mitzuteilen, dass ein Port nicht installiert werden sollte, gibt es mehrere Variablen für make, die im Makefile des Ports genutzt werden können. Der Wert der folgenden make-Variablen wird dem Benutzer als Grund für die Ablehnung der Installation des Ports zurückgegeben. Bitte benutzen Sie die richtige make-Variable, denn jede enthält eine völlig andere Bedeutung für den Benutzer und das automatische System, das von dem Makefile abhängt, wie der Ports-Build-Custer, FreshPorts und portsmon. Variablen BROKEN ist reserviert für Ports, welche momentan nicht korrekt kompiliert, installiert oder deinstalliert werden. Es sollte für Ports benutzt werden, von denen man annimmt, dass dies ein temporäres Problem ist. Falls angegeben, wird der Build-Cluster dennoch versuchen den Port zu bauen, um zu sehen, ob das zugrunde liegende Problem behoben wurde (das ist jedoch im Allgemeinen nicht der Fall). Benutzen Sie BROKEN zum Beispiel, wenn ein Port: nicht kompiliert beim Konfiguration- oder Installation-Prozess scheitert Dateien außerhalb von ${LOCALBASE} und ${X11BASE} installiert beim Deinstallieren nicht alle seine Dateien sauber entfernt (jedoch kann es akzeptable und wünschenswert sein, Dateien, die vom Nutzer verändert wurden, nicht zu entfernen) FORBIDDEN wird für Ports verwendet, die Sicherheitslücken enthalten oder die ernste Sicherheitsbedenken für das FreeBSD-System aufwerfen, wenn sie installiert sind (z.B. ein als unsicher bekanntes Programm, oder ein Programm, das einen Dienst zur Verfügung stellt, der leicht kompromittiert werden kann). Ports sollten als FORBIDDEN gekennzeichnet werden, sobald ein Programm eine Schwachstelle hat und kein Update veröffentlicht wurde. Idealerweise sollten Ports so bald wie möglich aktualisiert werden wenn eine Sicherheitslücke entdeckt wurde, um die Zahl verwundbarer FreeBSD-Hosts zu verringern (wir schätzen es für unsere Sicherheit bekannt zu sein), obwohl es manchmal einen beachtlichen Zeitabstand zwischen der Bekanntmachung einer Schwachstelle und dem entsprechenden Update gibt. Bitte kennzeichnen Sie einen Port nicht aus irgendeinem Grund außer Sicherheit als FORBIDDEN. IGNORE ist für Ports reserviert, die aus anderen Gründen nicht gebaut werden sollten. Es sollte für Ports verwendet werden, in denen ein strukturelles Problem vermutet wird. Der Build-Cluster wird unter keinen Umständen Ports, die mit IGNORE markiert sind, erstellen. Verwenden Sie IGNORE zum Beispiel, wenn ein Port: kompiliert, aber nicht richtig läuft nicht auf der installierten Version von &os; läuft &os; Kernelquelltext zum Bauen benötigt, aber der Benutzer diese nicht installiert hat ein Distfile benötigt, welches aufgrund von Lizenzbeschränkungen nicht automatisch abgerufen werden kann nicht korrekt mit einem momentan installiertem Port arbeitet (der Port hängt zum Beispiel von www/apache21 ab, aber www/apache13 ist installiert) Wenn ein Port mit einem momentan installiertem Port kollidiert (zum Beispiel, wenn beide eine Datei an die selbe Stelle installieren, diese aber eine andere Funktion hat), benutzen Sie stattdessen CONFLICTS. CONFLICTS setzt IGNORE dann selbstständig. Um einen Port nur auf bestimmte Systemarchitekturen mit IGNORE zu markieren, gibt es zwei Variablen, die automatisch IGNORE für Sie setzen: ONLY_FOR_ARCHS und NOT_FOR_ARCHS. Beispiele: ONLY_FOR_ARCHS= i386 amd64 NOT_FOR_ARCHS= alpha ia64 sparc64 Eine eigene IGNORE-Ausgabe kann mit ONLY_FOR_ARCHS_REASON und NOT_FOR_ARCHS_REASON festgelegt werden. Für eine bestimmte Architektur sind Angaben durch ONLY_FOR_ARCHS_REASON_ARCH und NOT_FOR_ARCHS_REASON_ARCH möglich. Wenn ein Port i386-Binärdateien herunterlädt und installiert, sollte IA32_BINARY_PORT gesetzt werden. Wenn die Variable gesetzt ist, wird überprüft, ob das Verzeichnis /usr/lib32 für IA32-Versionen der Bibliotheken vorhanden ist, und ob der Kernel mit IA32-Kompatibilität gebaut wurde. Wenn eine dieser zwei Voraussetzungen nicht erfüllt ist, wird IGNORE automatisch gesetzt. Anmerkungen zur Implementierung Zeichenketten sollten nicht in Anführungszeichen gesetzt werden. Auch die Wortwahl der Zeichenketten sollte die Art und Weise beachten, wie die Informationen dem Nutzer angezeigt werden. Beispiele: BROKEN= this port is unsupported on FreeBSD 5.x IGNORE= is unsupported on FreeBSD 5.x resultieren in den folgenden Ausgaben von make describe: ===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x. ===> foobar-0.1 is unsupported on FreeBSD 5.x. Kennzeichnen eines Ports zur Entfernung durch <makevar>DEPRECATED</makevar> oder <makevar>EXPIRATION_DATE</makevar> Denken Sie bitte daran, dass BROKEN und FORBIDDEN nur als temporärer Ausweg verwendet werden sollten, wenn ein Port nicht funktioniert. Dauerhaft defekte Ports sollten komplett aus der Ports-Sammlung entfernt werden. Wenn es sinnvoll ist, können Benutzer vor der anstehenden Entfernung eines Ports mit DEPRECATED und EXPIRATION_DATE gewarnt werden. Ersteres ist einfach eine Zeichenkette, die angibt, warum der Port entfernt werden soll. Letzteres ist eine Zeichenkette im ISO 8601-Format (JJJJ-MM-TT). Beides wird dem Benutzer gezeigt. Es ist möglich DEPRECATED ohne EXPIRATION_DATE zu setzen (zum Beispiel, um eine neuere Version des Ports zu empfehlen), aber das Gegenteil ist sinnlos. Es gibt keine Vorschrift wie lange die Vorwarnzeit sein muss. Gegenwärtig ist es üblich einen Monat für sicherheitsrelevante Probleme und zwei Monate für Build-Probleme anzusetzen. Dies gibt allen interessierten Committern ein wenig Zeit die Probleme zu beheben. Vermeiden Sie den Gebrauch des <literal>.error</literal>-Konstruktes Der korrekte Weg eines Makefile anzuzeigen, dass der Port aufgrund eines externen Grundes nicht installiert werden kann (zum Beispiel, weil der Benutzer eine ungültige Kombination von Build-Optionen angegeben hat), ist IGNORE auf einen nicht leeren Wert zu setzen. Dieser wird dann formatiert und dem Benutzer von make install ausgegeben. Es ist ein verbreiteter Fehler .error für diesem Zweck zu verwenden. Das Problem dabei ist, dass viele automatisierte Werkzeuge, die mit dem Ports-Baum arbeiten, in dieser Situation fehlschlagen. Am Häufigsten tritt das Problem beim Versuch /usr/ports/INDEX zu bauen auf (siehe ). Jedoch schlagen auch trivialere Befehle wie make -V maintainer in diesem Fall fehl. Dies ist nicht akzeptabel! Wie vermeidet man die Verwendung von <literal>.error</literal> Nehmen Sie an, dass die Zeile USE_POINTYHAT=yes in make.conf enthalten ist. Der erste der folgenden zwei Makefile-Schnipsel lässt make index fehlschlagen, während der zweite dies nicht tut. .if USE_POINTYHAT .error "POINTYHAT is not supported" .endif .if USE_POINTYHAT IGNORE=POINTYHAT is not supported .endif Verwendung von <filename>sysctl</filename> Vom Gebrauch von sysctl wird, außer in Targets, abgeraten. Das liegt daran, dass die Auswertung aller makevars, wie sie während make index verwendet werden, dann den Befehl ausführen muss, welches den Prozess weiter verlangsamt. Die Verwendung von &man.sysctl.8; sollte immer durch die Variable SYSCTL erfolgen, da diese den vollständigen Pfad enthält und überschrieben werden kann, so dies als notwendig erachtet wird. Erneutes Ausliefern von Distfiles Manchmal ändern die Autoren der Software den Inhalt veröffentlichter Distfiles, ohne den Dateinamen zu ändern. Sie müssen überprüfen, ob die Änderungen offizell sind und vom Autor durchgeführt wurden. Es ist in der Vergangenheit vorgekommen, dass Distfiles still und heimlich auf dem Download-Server geändert wurden, um Schaden zu verursachen oder die Sicherheit der Nutzer zu kompromittieren. Verschieben Sie das alte Distfile und laden Sie das neue herunter. Entpacken Sie es und vergleichen Sie den Inhalt mittels &man.diff.1;. Wenn Sie nichts Verdächtiges sehen können Sie distinfo aktualisieren. Stellen Sie sicher, dass die Änderungen in Ihrem PR oder Commit-Protokoll zusammengefasst sind, um zu Gewährleisten, dass nichts Negatives passiert ist. Sie können auch mit den Autoren der Software in Verbindung treten und sich die Änderungen bestätigen lassen. Notwendige Abhilfen (Workarounds) Manchmal ist es nötig Fehler in Programmen, die mit älteren Versionen von &os; ausgeliefert werden, zu umgehen. Einige Versionen von &man.make.1; waren zumindest auf &os; 4.8 und 5.0 in Bezug auf die Behandlung von Vergleichen mit OSVERSION defekt. Dies führte häufig zu Fehlern während make describe (und damit auch während des make index für alle Ports). Abhilfe schafft hier, den bedingten Vergleich in Leerzeichen einzuschließen, z.B.: if ( ${OSVERSION} > 500023 ) Beachten Sie, dass eine Test-Installation eines Ports auf 4.9 oder 5.2 dieses Problem nicht aufspürt. Verschiedenes Die Dateien pkg-descr und pkg-plist sollten beide doppelt kontrolliert werden. Wenn Sie einen Port nachprüfen und glauben, dass man es besser machen kann, dann verbessern Sie ihn bitte. Bitte kopieren Sie nicht noch mehr Exemplare der GNU General Public License in unser System. Bitte überprüfen Sie alle gesetzlichen Punkte gründlich! Lassen Sie uns bitte keine illegale Software verbreiten!
Beispiel eines <filename>Makefile</filename> Hier ein Beispiel für ein Makefile, welches als Vorlage für einen neuen Port dienen kann. Alle zusätzlichen Kommentare in eckigen Klammern müssen entfernt werden! Es wird empfohlen, die hier gezeigte Formatierung zu übernehmen (Reihenfolge der Variablen, Leerzeichen zwischen einzelnen Abschnitten, usw.). Dadurch werden die wichtigen Informationen sofort ersichtlich. Zur Überprüfung Ihres Makefiles sollten Sie portlint verwenden. [the header...just to make it easier for us to identify the ports.] # New ports collection makefile for: xdvi [the "version required" line is only needed when the PORTVERSION variable is not specific enough to describe the port.] # Date created: 26 May 1995 [this is the person who did the original port to FreeBSD, in particular, the person who wrote the first version of this Makefile. Remember, this should not be changed when upgrading the port later.] # Whom: Satoshi Asami <asami@FreeBSD.org> # # $FreeBSD$ [ ^^^^^^^^^ This will be automatically replaced with RCS ID string by CVS when it is committed to our repository. If upgrading a port, do not alter this line back to "$FreeBSD$". CVS deals with it automatically.] # [section to describe the port itself and the master site - PORTNAME and PORTVERSION are always first, followed by CATEGORIES, and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR. PKGNAMEPREFIX and PKGNAMESUFFIX, if needed, will be after that. Then comes DISTNAME, EXTRACT_SUFX and/or DISTFILES, and then EXTRACT_ONLY, as necessary.] PORTNAME= xdvi PORTVERSION= 18.2 CATEGORIES= print [do not forget the trailing slash ("/")! if you are not using MASTER_SITE_* macros] MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications PKGNAMEPREFIX= ja- DISTNAME= xdvi-pl18 [set this if the source is not in the standard ".tar.gz" form] EXTRACT_SUFX= .tar.Z [section for distributed patches -- can be empty] PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz [maintainer; *mandatory*! This is the person who is volunteering to handle port updates, build breakages, and to whom a users can direct questions and bug reports. To keep the quality of the Ports Collection as high as possible, we no longer accept new ports that are assigned to "ports@FreeBSD.org".] MAINTAINER= asami@FreeBSD.org COMMENT= A DVI Previewer for the X Window System [dependencies -- can be empty] RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm [this section is for other standard bsd.port.mk variables that do not belong to any of the above] [If it asks questions during configure, build, install...] IS_INTERACTIVE= yes [If it extracts to a directory other than ${DISTNAME}...] WRKSRC= ${WRKDIR}/xdvi-new [If the distributed patches were not made relative to ${WRKSRC}, you may need to tweak this] PATCH_DIST_STRIP= -p1 [If it requires a "configure" script generated by GNU autoconf to be run] GNU_CONFIGURE= yes [If it requires GNU make, not /usr/bin/make, to build...] USE_GMAKE= yes [If it is an X application and requires "xmkmf -a" to be run...] USE_IMAKE= yes [et cetera.] [non-standard variables to be used in the rules below] MY_FAVORITE_RESPONSE= "yeah, right" [then the special rules, in the order they are called] pre-fetch: i go fetch something, yeah post-patch: i need to do something after patch, great pre-install: and then some more stuff before installing, wow [and then the epilogue] .include <bsd.port.mk> Auf dem Laufenden bleiben Die &os; Ports-Sammlung verändert sich ständig. Hier finden Sie einige Informationen, wie Sie auf dem Laufenden bleiben. FreshPorts Einer der einfachsten Wege, um sich über Aktualisierungen, die bereits durchgeführt wurden, zu informieren, ist sich bei FreshPorts anzumelden. Sie können dort beliebige Ports auswählen, die Sie beobachten möchten. Maintainern wird ausdrücklich empfohlen sich anzumelden, da Sie nicht nur über Ihre eigenen Änderungen informiert werden, sondern auch über die aller anderen Committer (Diese sind oft nötig, um über Änderungen des zugrunde liegenden Frameworks informiert zu bleiben. Obwohl es höflich wäre, vorher über solche Änderungen benachrichtigt zu werden, wird es manchmal vergessen oder ist einfach nicht möglich. Außerdem sind die Änderungen manchmal nur sehr klein. Wir erwarten von jedem in solchen Fällen nach bestem Gewissen zu urteilen). Wenn Sie Fresh-Ports benutzen möchten, benötigen Sie nur einen Account. Falls Sie sich mit einer @FreeBSD.org E-Mailadresse registriert haben, werden Sie den Anmeldelink am rechten Rand der Seite finden. Diejenigen, die bereits einen FeshPorts-Account haben, aber nicht Ihre @FreeBSD.org E-Mailadresse benutzen, können einfach Ihre E-Mailadresse auf @FreeBSD.org ändern, sich anmelden, und dann die Änderung rückgängig machen. FreshPorts bietet auch eine Überprüfungsfunktion, die automatisch alle Committs zum &os; Ports-Baum testet. Wenn Sie sich für diesen Dienst anmelden, werden Sie über alle Fehler, die bei der Überprüfung Ihres Committs auftreten, informiert. Die Webschnittstelle zum Quelltext-Repository Es ist möglich die Dateien des Quellen-Repositories mit Hilfe einer Webschnittstelle durchzusehen. Änderungen, die das gesamte Ports-System betreffen, werden jetzt in der Datei CHANGES dokumentiert. Solche, die nur bestimmte Ports betreffen, in der Datei UPDATING. Aber die maßgebliche Antwort auf alle Fragen liegt zweifellos darin, den Quelltext von bsd.port.mk und dazugehörige Dateien zu lesen. Die &os; Ports-Mailingliste Wenn Sie Maintainer sind, sollten Sie in Erwägung ziehen die &a.ports;-Mailingliste zu verfolgen. Wichtige Änderungen an der grundlegenden Funktionsweise von Ports werden dort angekündigt und dann in CHANGES committet. Der Cluster zum Bauen von &os;-Ports auf <hostid role="hostname">pointyhat.FreeBSD.org</hostid> Eine der weniger bekannten Stärken von &os; ist es, dass ein ganzer Cluster von Maschinen nur dafür reserviert ist, andauernd die Ports-Sammlung zu bauen, und zwar für jedes große &os; Release und jede Tier-1-Architektur. Die Ergebnisse können Sie unter package building logs and errors finden. Alle Ports ausser denjenigen, die als IGNORE markiert sind, werden gebaut. Ports, die als BROKEN markiert sind, werden dennoch ausprobiert, um zu sehen, ob das zugrunde liegende Problem gelöst wurde (Dies wird erreicht, indem TRYBROKEN an das Makefile des Ports übergeben wird). Die &os; Port-Distfile-Prüfung Der Build-Cluster ist dazu bestimmt, das neueste Release jedes Ports aus bereits heruntergeladenden Distfiles zu bauen. Da sich das Internet aber ständig verändert, können Distfiles schnell verloren gehen. Die FreeBSD Ports Distfiles Prüfung versucht jeden Download-Standort für jeden Port anzufragen, um herauszufinden, ob jedes Distfile noch verfügbar ist. Maintainer werden gebeten diesen Bericht regelmäßig durchzusehen, nicht nur, um den Build-Prozess für die Nutzer zu beschleunigen, sondern auch um zu vermeiden, dass auf den Maschinen, die freiwillig zur Verfügung gestellt werden, um all diese Dateien anzubieten, Ressourcen verschwendet werden. Das &os; Ports-Monitoring-System Eine weitere praktische Ressource ist das FreeBSD Ports-Monitoring-System (auch bekannt als portsmon). Dieses System besteht aus einer Datenbank, die Informationen von mehreren Quellen bezieht und es erlaubt diese über ein Webinterface abzufragen. Momentan werden die Ports-Problemberichte (PRs), die Fehlerprotokolle des Build-Clusters und die einzelnen Dateien der Ports-Sammlung verwendet. In Zukunft soll das auf die Distfile-Prüfung und weitere Informationsquellen ausgedehnt werden. Als Ausgangspunkt können Sie alle Informationen eines Ports mit Hilfe der Übersicht eines Ports betrachten. Zum Zeitpunkt des Schreibens ist dies die einzige Quelle, die GNATS PR-Einträge auf Portnamen abbildet (PR-Einreicher geben den Portnamen nicht immer in der Zusammenfassung an, obwohl wir uns das wünschen würden). Also ist portsmon ein guter Anlaufpunkt, wenn Sie herausfinden wollen, ob zu einem existierenden Port PRs oder Buildfehler eingetragen sind. Oder um herauszufinden, ob ein neuer Port, den Sie erstellen wollen, bereits eingereicht wurde.