diff --git a/de_DE.ISO8859-1/books/faq/book.sgml b/de_DE.ISO8859-1/books/faq/book.sgml index 756e065a06..2e1b8a0b43 100644 --- a/de_DE.ISO8859-1/books/faq/book.sgml +++ b/de_DE.ISO8859-1/books/faq/book.sgml @@ -1,13517 +1,13567 @@ %books.ent; ]> Häufig gestellte Fragen zu FreeBSD 5.X und 6.X Frequently Asked Questions zu FreeBSD 5.X und 6.X The FreeBSD German Documentation Project Deutsche Übersetzung von Robert S. F. Drehmel, Dirk Gouders, Udo Erdelhoff und Johann Kois - $FreeBSDde: de-docproj/books/faq/book.sgml,v 1.602 2007/07/30 19:56:36 jkois Exp $ + $FreeBSDde: de-docproj/books/faq/book.sgml,v 1.604 2008/01/04 20:31:18 jkois Exp $ 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 The FreeBSD Documentation Project 2000 2001 2002 2003 2004 2005 2006 2007 The FreeBSD German Documentation Project &bookinfo.legalnotice; &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.adobe; &tm-attrib.creative; &tm-attrib.cvsup; &tm-attrib.ibm; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.iomega; &tm-attrib.linux; &tm-attrib.microsoft; &tm-attrib.mips; &tm-attrib.netscape; &tm-attrib.opengroup; &tm-attrib.oracle; &tm-attrib.sgi; &tm-attrib.sparc; &tm-attrib.sun; &tm-attrib.usrobotics; &tm-attrib.xfree86; &tm-attrib.general; Dies ist die FAQ für die FreeBSD-Versionen 5.X und 6.X. Alle Einträge sollten für FreeBSD ab Version 5.0 relevant sein, andernfalls wird darauf explizit hingewiesen. Falls Sie daran interessiert sein sollten, an diesem Projekt mitzuarbeiten, senden Sie eine Mail an die Mailingliste &a.de.translators;. Die aktuelle Version dieses Dokuments ist ständig auf dem FreeBSD World-Wide-Web-Server verfügbar. Sie kann aber auch als eine einzige große HTML-Datei, als Textdatei, als &postscript;- oder PDF-Datei sowie in verschiedenen anderen Formaten vom FreeBSD FTP-Server heruntergeladen werden. Alternativ können Sie die FAQ auch durchsuchen. Einleitung Willkommen zur FreeBSD 5.X-6.X FAQ! Wie auch bei den Usenet FAQs üblich, wird mit diesem Dokument beabsichtigt, die am häufigsten gestellten Fragen bezüglich des Betriebssystems FreeBSD zu erfassen und sie natürlich auch zu beantworten. Obwohl FAQs ursprünglich lediglich dazu dienen sollten, die Netzbelastung zu reduzieren und das ständige Wiederholen derselben Fragen zu vermeiden, haben sie sich als wertvolle Informationsquellen etabliert. Wir haben uns die größte Mühe gegeben, diese FAQ so lehrreich wie möglich zu gestalten; falls Sie irgendwelche Vorschläge haben, wie sie verbessert werden kann, senden Sie diese bitte an die Mailingliste des &a.de.translators;. Was ist FreeBSD? FreeBSD ist, kurz gesagt, ein &unix; ähnliches Betriebssystem für die Plattformen Alpha/AXP, AMD64 sowie &intel; EM64T, &i386;, IA-64, PC-98 und &ultrasparc;, das auf der 4.4BSD-Lite-Release der University of California at Berkeley (UCB) basiert; außerdem flossen einige Erweiterungen aus der 4.4BSD-Lite2-Release mit ein. Es basiert außerdem indirekt auf der von William Jolitz unter dem Namen 386BSD herausgebrachten Portierung der Net/2-Release der UCB auf die &i386;-Plattform - allerdings ist nur wenig vom 386BSD-Code übriggeblieben. Eine umfassendere Beschreibung darüber, was FreeBSD ist und wie Sie es für Ihre Zwecke verwenden können, finden Sie auf den Internetseiten des FreeBSD Projects. Unternehmen, Internet Service Provider, Forscher, Computerfachleute, Studenten und Privatnutzer auf der ganzen Welt benutzen FreeBSD für die Arbeit, die Ausbildung oder zur Freizeitgestaltung. Ausführlichere Informationen zu FreeBSD, finden Sie im FreeBSD Handbuch. Welches Ziel hat das FreeBSD Project? Die Ziel von FreeBSD ist es, Software zur Nutzung für beliebige Zwecke, bedingungslos zur Verfügung zu stellen. Viele von uns haben erheblich zur Erstellung des Codes (und zum Projekt) beigetragen und hätten jetzt oder in Zukunft sicherlich nichts gegen einen geringen finanziellen Ausgleich einzuwenden, aber wir beabsichtigen definitiv nicht, darauf zu bestehen. Wir sind der Meinung, dass unsere Mission zuerst und vorderst darin besteht, allen und jedem Kommenden Code für welchen Zweck auch immer zur Verfügung zu stellen, damit der Code möglichst weit eingesetzt wird und den größtmöglichen Nutzen liefert. Das ist, so glauben wir, eines der fundamentalsten Ziele von freier Software und eines, das wir enthusiastisch unterstützen. Der Code in unserem Quellbaum, der der GNU General Public License (GPL) oder der GNU Library General Public License (LGPL) unterliegt, ist mit zusätzlichen, geringfügigen Bedingungen verknüpft, jedoch handelt es sich dabei lediglich um erzwungene Bereitstellung statt des sonst üblichen Gegenteils. Auf Grund der zusätzlichen Komplexität, die durch den kommerziellen Einsatz von GPL Software entstehen kann, bemühen wir uns jedoch, solche Software, wo möglich, durch solche, die der etwas lockereren FreeBSD Lizenz unterliegt, zu ersetzen. Beinhaltet das FreeBSD-Copyright irgendwelche Einschränkungen? Ja. Diese Einschränkungen regeln aber nicht, wie Sie mit dem Sourcecode umgehen, sondern betreffen nur den Umgang mit dem FreeBSD Project an sich. Wenn Sie sich ernsthaft damit auseinandersetzen wollen, lesen Sie einfach die FreeBSD-Lizenz. Wenn Sie einfach nur neugierig sind, sollte diese Zusammenfassung ausreichen: Behaupten Sie nicht, Sie hätten es geschrieben. Verklagen Sie uns nicht, wenn irgend etwas nicht funktioniert. Kann FreeBSD mein bisher verwendetes Betriebssystem ersetzen? In den meisten Fällen lautet die Antwort ja. Allerdings ist diese Frage nicht ganz so einfach, wie sie scheint. Die meisten Anwender benutzen kein Betriebssystem, sondern Anwendungen. Die Anwendungen sind es, die das Betriebssystem benutzen. FreeBSD ist dazu gedacht, eine stabile und vielfältige Umgebung für Anwendungen bereitzustellen. Es unterstützt viele unterschiedliche Web-Browser, Büroanwendungen, E-Mail-Programme, Grafik-Programme, Entwicklungsumgebungen, Netzwerk-Server, und so ziemlich alles andere, was Sie sich wünschen können. Die meisten dieser Anwendungen sind in der Ports-Sammlung verfügbar. Wenn Sie Anwendung benutzen müssen, die es nur für ein bestimmtes Betriebssystem gibt, dann kommen Sie an diesem Betriebssystem nicht vorbei. Allerdings stehen die Chancen nicht schlecht, dass es eine vergleichbare Anwendung für FreeBSD gibt. Wenn Sie einen verläßlichen Server für ihr Büro oder das Internet brauchen, oder eine stabilen Arbeitsplatz, oder einfach nur die Fähigkeit, ihre Arbeit ohne dauernde Abstürze machen zu können, dann kann FreeBSD genau das sein. Viele Anwender auf der ganzen Welt, vom Anfänger bis zum erfahrenen Administrator, benutzen an Ihren Arbeitsplätzen ausschließlich FreeBSD. Wenn Sie von einem anderen &unix; System zu FreeBSD wechseln, dürfte Ihnen vieles bekannt vorkommen. Wenn Ihr Hintergrund ein Grafik-orientiertes Betriebssystem wie &windows; oder ein älteres &macos; ist, werden Sie zusätzliche Zeit investieren müssen, um den &unix; Stil zu verstehen. Dieser FAQ und das FreeBSD Handbuch sind die besten Startpunkte. Warum heißt es FreeBSD? Es darf kostenlos genutzt werden - sogar von kommerziellen Benutzern. Der komplette Quellcode für das Betriebssystem ist frei verfügbar und die Benutzung, Verbreitung und Einbindung in andere (kommerzielle und nicht-kommerzielle) Arbeiten sind mit den geringstmöglichen Einschränkungen versehen worden. Jedem ist es freigestellt, Code für Verbesserungen oder die Behebung von Fehlern einzusenden und ihn zum Quellbaum hinzufügen zu lassen (dies ist natürlich Gegenstand von ein oder zwei offensichtlichen Klauseln). Es wird darauf hingewiesen, dass das englische Wort free hier in den Bedeutungen umsonst und Sie können tun, was immer Sie möchten genutzt wird. Abgesehen von ein oder zwei Dingen, die Sie mit dem FreeBSD-Code nicht tun können (z.B. vorgeben, ihn geschrieben zu haben), können Sie damit tatsächlich tun, was auch immer Sie möchten. Wie unterschieden sich FreeBSD, NetBSD, OpenBSD und andere Open-Source BSD-Systeme? James Howards Artikel The BSD Family Tree, der in DaemonNews erschienen ist, beschreibt sehr gut die Geschichte und die Unterschiede der BSD-Varianten. Welches ist die aktuelle FreeBSD-Version? Momentan gibt es zwei Entwicklungszweige, die für die Erstellung von Releases verwendet werden. Die 5.X-RELEASEs werden auf dem 5-STABLE-Zweig erstellt, die 6.X-RELEASEs auf dem 6-STABLE-Zweig. Bis zur Veröffentlichung von &os; 5.3 galt die 4.X-Serie als -STABLE. Seither gibt es für den Zweig 4.X nur mehr eine erweiterte Unterstützung in der Form von Korrekturen von größeren Problemen, wie neu entdeckten Sicherheitsheitslücken. Aus dem Zweig 5-STABLE werden zwar noch RELEASEs erzeugt, er gilt aber als ausgereift. Aktive Weiterentwicklungen konzentrieren sich daher auf den Zweig 6-STABLE. Version &rel.current; ist das aktuelle Release des 6-STABLE-Zweigs und ist im Januar 2007 erschienen. Version &rel2.current; ist das aktuelle Release aus dem 5-STABLE-Zweig und ist im Mai 2006 erschienen. Kurz gesagt, -STABLE ist für ISPs und andere Benutzer gedacht, die mehr Wert auf Stabilität und eine niedrige Änderungsfrequenz als auf die neuesten und möglicherweise unstabilen Features im aktuellen -CURRENT Snapshot legen. Releases können aus jedem Zweig entstehen, Sie sollten -CURRENT allerdings nur dann benutzen, wenn Sie auf ein erhöhtes Fehlverhalten im Vergleich zu -STABLE auch vorbereitet sind. Releases entstehen nur alle paar Monate. Viele Leute halten ihre Systeme aktueller (lesen Sie die Fragen zu &os;-CURRENT und &os;-STABLE), aber das erfordert ein erhöhtes Engagement, da die Sourcen sich ständig verändern. Weitere Informationen über Releases entnehmen Sie der Seite Release Engineering des FreeBSD Webauftritts. Was ist FreeBSD-CURRENT? &os;-CURRENT ist die Entwicklungsversion des Betriebssystems, aus der zu gegebener Zeit &os.stable; werden wird. Als solche ist sie lediglich für Entwickler, die am System mitarbeiten und für unentwegte Bastler von Interesse. Details zum Betrieb von -CURRENT finden Sie im entsprechenden Abschnitt des Handbuchs. Falls Sie nicht mit dem Betriebssystem vertraut sind oder nicht in der Lage sein sollten, den Unterschied zwischen einen echten und einem temporären Problem zu erkennen, sollten Sie &os;-CURRENT nicht verwenden. Dieser Zweig entwickelt sich manchmal sehr schnell weiter und kann gelegentlich für mehrere Tage hintereinander nicht installierbar sein. Von Personen, die &os;-CURRENT verwenden, wird erwartet, dass Sie dazu in der Lage sind, Probleme zu analysieren und nur dann von ihnen berichten, wenn es sich um Fehler und nicht um kurzzeitige Störungen handelt. Fragen wie make world produziert Fehlermeldungen bezüglich Gruppen werden in der -CURRENT Mailingliste manchmal nicht beachtet. Jeden Tag wird der aktuelle Entwicklungsstand in den Zweigen -CURRENT und -STABLE in einer Snapshot Release festgehalten. Mittlerweile werden sogar CDROM Distributionen dieser gelegentlichen Snapshots zur Verfügung gestellt. Die Ziele dieser Snapshot Releases sind: Die aktuelle Version der Installationssoftware zu testen. Personen, die -CURRENT oder -STABLE benutzen möchten, aber nicht über die nötige Zeit oder Bandbreite verfügen, um tagesaktuell zu bleiben, soll eine bequeme Möglichkeit geboten werden, es auf ihr System zu bringen. Die Erhaltung von Referenzpunkten des fraglichen Codes, für den Fall, dass wir später einmal ernsthaften Schaden anrichten sollten (obwohl CVS verhindern sollte, dass solche Situationen entstehen :) Sicherzustellen, dass alle zu testenden, neuen Merkmale und Fehlerbehebungen zu möglichst vielen potentiellen Testern gelangen. Von keinem -CURRENT Snapshot kann Produktionsqualität für beliebige Zwecke erwartet werden. Wenn Sie eine stabile und ausgetestete Version benötigen, sollten Sie eine vollständige Release oder einen -STABLE Snapshot verwenden. Snapshot-Releases sind auf der Snapshots-Seite verfügbar. In der Regel wird jeden Tag ein Snapshot jedes zur Zeit aktiven Zweiges erstellt. Was ist das Konzept von FreeBSD-STABLE? Zur der Zeit, als FreeBSD 2.0.5 herausgegeben wurde, wurde entschieden, die Entwicklung von FreeBSD zweizuteilen. Ein Zweig wurde -STABLE, der andere -CURRENT genannt. FreeBSD-STABLE ist für Anbieter von Internetdiensten und andere kommerzielle Unternehmen gedacht, für die plötzliche Veränderungen und experimentelle Features unerwünscht sind. In diesem Zweige werden nur ausgetestete Fehlerbehebungen und kleine, inkrementelle Änderungen aufgenommen. FreeBSD-CURRENT ist eine ununterbrochene Linie seitdem die Version 2.0 herausgegeben worden ist. Sie führt zu 6.2-RELEASE (und darüber hinaus). Unmittelbar vor der Veröffentlichung von 6.0-RELEASE wurde der 6-STABLE-Zweig erschaffen und &os.current; wurde zu 7-CURRENT. Weitere Informationen zu diesem Thema finden Sie unter FreeBSD Release Engineering: Creating the Release Branch. Der Zweig 2.2-STABLE wurde mit der Veröffentlichung der Version 2.2.8 eingestellt. Der Zweig 3-STABLE endete mit Version 3.5.1, der letzten 3.X-Version, der Zweig 4.X endete mit der Version 4.11, der letzten 4.X-Version. Änderungen in diesen Zweigen beschränken sich im allgemeinen auf die Korrektur von sicherheitsrelevanten Fehlern. Der Zweig 5-STABLE wird zwar noch unterstützt, die Unterstützung beschränkt sich allerdings auf das Schließen von neu entdeckten Sicherheitslücken und die Behebung von anderen ernsten Problemen. &rel.current;-STABLE ist der Zweig, auf den sich die Entwicklung von -STABLE zurzeit konzentriert. Das neueste Release aus dem &rel.current;-STABLE-Zweig ist &rel.current;-RELEASE und ist im Januar 2007 erschienen. Aus dem 7-CURRENT-Zweig entsteht die nächste &os;-Generation. Weitere Informationen über diesen Zweig finden Sie unter Was ist FreeBSD-CURRENT?. Wann werden FreeBSD-Versionen erstellt? Im Schnitt gibt das &a.re; alle vier Monate eine neue FreeBSD-Version frei. Das Erscheinungsdatum einer neuer Version wird frühzeitig bekanntgegeben, damit die am System arbeitenden Personen wissen, bis wann ihre Projekte abgeschlossen und ausgetestet sein müssen. Vor jedem Release gibt es eine Testperiode um sicherzustellen, dass die neu hinzugefügten Features nicht die Stabilität des Releases beeinträchtigen. Viele Benutzer halten dies für einen großen Vorteil von FreeBSD, obwohl es manchmal frustrierend sein kann, so lange auf die Verfügbarkeit der aktuellsten Leckerbissen zu warten. Weitere Informationen über die Entwicklung von Releases, sowie eine Übersicht über kommende Releases, erhlaten Sie auf den release engineering Seiten der FreeBSD Webseite. Für diejenigen, die ein wenig mehr Spannung brauchen (oder möchten), werden täglich Snapshots herausgegeben, wie oben beschrieben. Wer ist für FreeBSD verantwortlich? Schlüsseldiskussionen, die das FreeBSD Project betreffen, wie z.B. über die generelle Ausrichtung des Projekts und darüber, wem es erlaubt sein soll, Code zum Quellbaum hinzuzufügen, werden innerhalb eines Core Teams von 9 Personen geführt. Es gibt ein weitaus größeres Team von über 350 Committern, die dazu autorisiert sind, Änderungen am FreeBSD Quellbaum durchzuführen. Jedoch werden die meisten nicht-trivialen Änderungen zuvor in den Mailinglisten diskutiert und es bestehen keinerlei Einschränkungen darüber, wer sich an diesen Diskussionen beteiligen darf. Wie kann ich FreeBSD beziehen? Jede bedeutende Ausgabe von FreeBSD ist per Anonymous-FTP vom FreeBSD FTP Server erhältlich: Das aktuelle 6-STABLE-Release, &rel.current;-RELEASE, finden Sie im Verzeichnis &rel.current;-RELEASE. Snapshots-Releases werden täglich aus dem -CURRENT-Zweig sowie aus dem -STABLE-Zweig erzeugt. Sie sollten aber nur von Entwicklern und sehr erfahrenen Testern verwendet werden. Das aktuelle Release von 5-STABLE, &rel2.current;-RELEASE finden Sie im Verzeichnis &rel2.current;-RELEASE. Wo und wie Sie FreeBSD auf CD, DVD, und anderen Medien beziehen können, erfahren Sie im Handbuch. Wie greife ich auf die Datenbank mit Problemberichten zu? Die Datenbank mit Problemberichten (PR, problem report) und Änderungsanfragen von Benutzern kann über die webbasierte PR-Abfrage-Schnittstelle abgefragt werden. Mit dem Programm &man.send-pr.1; können Sie Problemberichte oder Änderungsanträge per E-Mail einsenden. Alternativ können Sie Problemberichte auch über Ihren Browser und die webbasierte PR-Eingabe-Schnittstelle erstellen. Bevor Sie einen Fehler melden, sollten Sie sich zuerst den Artikel Writing FreeBSD Problem Reports durchlesen, damit Sie wissen, wie Sie eine gute Fehlermeldung verfassen. Gibt es weitere Informationsquellen? Sie finden eine umfassende Liste unter Documentation auf der FreeBSD-Webseite. Dokumentation und Support Gibt es gute Bücher über FreeBSD? Im Zuge des FreeBSD Projekts sind diverse gute Dokumente entstanden, die unter der folgenden URL abgerufen werden können: . Die Dokumente stehen auch als Pakete, die Sie leicht installieren können, zur Verfügung. In den nächsten Abschnitten erfahren Sie mehr über diese Pakete. Zusätzlich enthalten die Bibliographien am Ende dieser FAQ und im Handbuch Verweise auf weitere empfohlene Bücher. Ist die Dokumentation auch in anderen Formaten verfügbar? Zum Beispiel als einfacher Text (ASCII) oder als &postscript;? Ja. Werfen Sie einen Blick auf das Verzeichnis /pub/FreeBSD/doc/ auf dem FreeBSD FTP-Server. Dort finden sie Dokumentation in vielen verschiedenen Format. Die Dokumentation wurde nach vielen verschiedenen Kriterien sortiert. Die Kriterien sind: Der Name des Dokumentes, z.B. FAQ oder Handbuch. Die Sprache und der Zeichensatz, die in dem Dokument verwendet werden. Diese entsprechen den Anpassungen, die Sie auf Ihrem FreeBSD-System im Verzeichnis /usr/share/locale finden. Zurzeit werden die folgenden Sprachen und Zeichensätze benutzt: Name Bedeutung bn_BD.ISO10646-1 Bengalisch (oder Bangla) da_DK.ISO8859-1 Dänisch de_DE.ISO8859-1 Deutsch en_US.ISO8859-1 Amerikanisches Englisch es_ES.ISO8859-1 Spanisch fr_FR.ISO8859-1 Französisch it_IT.ISO8859-15 Italienisch hu_HU.ISO8859-2 Ungarisch ja_JP.eucJP Japanisch (EUC-kodiert) mn_MN.UTF-8 Mongolisch (UTF-8-kodiert) nl_NL.ISO8859-1 Niederländisch pl_PL.ISO8859-2 Polnisch pt_BR.ISO8859-1 Brasilianisches Portugiesisch ru_RU.KOI8-R Russisch (KOI8-R-kodiert) sr_YU.ISO8859-2 Serbisch tr_TR.ISO8859-9 Türkisch zh_CN.GB2312 Vereinfachtes Chinesisch (GB2312-kodiert) zh_TW.Big5 Chinesisch (Big5-kodiert) Einige Dokumente sind nicht in allen Sprachen verfügbar. Das Format des Dokumentes. Die Dokumentation wird in verschiedenen Formaten erzeugt, von denen jedes seine eigenen Vor- und Nachteile hat. Einige Formate lassen sich gut an einem Bildschirm lesen, während andere Formate dafür gedacht sind, ein ansprechendes Druckbild zu erzeugen. Das die Dokumentation in verschiedenen Formaten verfügbar ist, stellt sicher, dass unsere Leser die für sie relevanten Teile unabhängig vom Ausgabemedium (Bildschirm oder Papier) lesen können. Derzeit werden die folgenden Formate unterstützt: Format Erklärung html-split Viele kleine HTML-Dateien, die sich gegenseitig referenzieren. html Eine große HTML-Datei, die das komplette Dokument enthält. pdb Palm Pilot Datenbank für das Programm iSilo. pdf Adobe's Portable Document Format ps &postscript; rtf Microsoft's Rich Text Format Die Seitennummern werden nicht automatisch aktualisiert, wenn Sie diese Datei in Word laden. Wenn Sie das Dokument geladen haben, müssen Sie Sie Ctrl A , Ctrl End , F9 eingeben, um die Seitennummern aktualisieren zu lassen. txt Ganz normaler Text Das zur Komprimierung verwendete Programm. Zur Zeit werden drei verschiedene Methoden benutzt. Wenn die Dokumentation im Format html-split vorliegt, werden die Dateien mit &man.tar.1; zusammengefasst. Die so entstandene .tar Datei wird dann mit einer der unten genannten Methoden komprimiert. Bei allen anderen Formaten existiert nur eine Datei mit dem Namen book.format (z.B., book.pdb, book.html, und so weiter). Diese Dateien werden mit zwei verschiedenen Programmen komprimiert. Programm Beschreibung zip Das Zip-Format. Wenn Sie diese Dateien unter FreeBSD auspacken wollen, müssen sie vorher den Port archivers/unzip installieren. bz2 Das BZip2-Format. Es wird seltener als das Zip-Format benutzt, erzeugt aber normalerweise kleinere Archive. Sie müssen den Port archivers/bzip2 installieren, um diese Dateien entpacken zu können. Ein Beispiel: Die mit BZip2 gepackte Version des Handbuchs im &postscript;-Format hat den Namen book.ps.bz2 und ist im Verzeichnis handbook/ zu finden. Nachdem Sie das Format und das Kompressionsverfahren ausgewählt haben, müssen Sie sich entscheiden, ob Sie das Dokument in Form eines FreeBSD Package herunterladen möchten. Der Vorteil dieser Variante, dass Sie die Dokumentation mit normalen Tools wie &man.pkg.add.1; und &man.pkg.delete.1; verwalten können. Wenn Sie das Package herunterladen und installieren wollen, müssen Sie den richtigen Dateinamen kennen. Die Dateien liegen in einem separaten Verzeichnis mit dem Namen packages und werden nach dem Schema Dokument-Name.Sprache.Zeichensatz.Format.tgz benannt. Ein Beispiel: Die englische Version der FAQ im PDF-Format ist in dem Package mit dem Namen faq.en_US.ISO8859-1.pdf.tgz enthalten. Sie können daher das englische PDF FAQ Package mit den folgenden Befehlen installieren. &prompt.root; pkg_add ftp://ftp.de.FreeBSD.org/pub/FreeBSD/doc/packages/faq.en_US.ISO8859-1.pdf.tgz Danach können Sie mit &man.pkg.info.1; nachsehen, wo die Datei installiert wurde. &prompt.root; pkg_info -f faq.en_US.ISO8859-1.pdf Information for faq.en_US.ISO8859-1.pdf: Packing list: Package name: faq.en_US.ISO8859-1.pdf CWD to /usr/share/doc/en_US.ISO8859-1/books/faq File: book.pdf CWD to . File: +COMMENT (ignored) File: +DESC (ignored) Wie Sie sehen können, wurde die Datei book.pdf im Verzeichnis /usr/share/doc/en_US.ISO8859-1/books/faq installiert. Wenn sie die Packages nicht benutzen, müssen Sie die komprimierten selber herunterladen, auspacken und die richtigen Stellen kopieren. Wenn Sie zum Beispiel die mit &man.bzip2.1; gepackte split HTMLVersion der englischen FAQ herunterladen und installieren wollten, bräuchten Sie die Datei doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2. Um diese Datei herunterzuladen und auszupacken, wären die folgenden Schritte notwendig. &prompt.root; fetch ftp://ftp.de.FreeBSD.org/pub/FreeBSD/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2 &prompt.root; gzip -d book.html-split.tar.bz2 &prompt.root; tar xvf book.html-split.tar Danach haben Sie eine Sammlung vieler kleiner .html Datei. Die wichtigste Datei hat Namen index.html und enthält das Inhaltsverzeichnis, eine Einleitung und Verweise auf die anderen Teile des Dokumentes. Falls notwendig, können Sie die diversen Dateien jetzt an ihren endgültigen Bestimmungsort verschieben oder kopieren. Woher bekomme ich Informationen zu den FreeBSD Mailinglisten? Vollständige Informationen finden Sie im Handbucheintrag über Mailinglisten. Welche Newsgruppen existieren zu FreeBSD? Sie finden alle Informationen hierzu im Handbucheintrag zu Newsgruppen. Gibt es FreeBSD IRC (Internet Relay Chat) Kanäle? Ja, die meisten großen IRC Netze bieten einen FreeBSD Chat-Channel: Channel FreeBSD im EFNet ist ein FreeBSD-Forum, aber gehen Sie nicht dorthin, um technische Unterstützung zu suchen, oder, um zu versuchen, die Leute dort dazu zu bringen, Ihnen dabei zu helfen, das mühselige Lesen von Manuals zu ersparen oder eigene Nachforschungen zu betreiben. Es ist in erster Linie ein Chat-Channel und die Themen dort umfassen Sex, Sport oder Kernwaffen ebensogut, wie FreeBSD. Sie wurden gewarnt! Der Channel ist auf dem Server irc.chat.org verfügbar. Der Channel #FreeBSDhelp im EFNet hat sich dagegen auf die Unterstützung der Benutzer von FreeBSD spezialisiert. In diesem Channel sind Fragen deutlich willkommener als im Channel #FreeBSD. + + Der Channel ##FreeBSD auf + Freenode + bietet allgemeine Hilfe zu FreeBSD-Themen. Durchschnittlich + sind zu jeden Zeitpunkt etwa 300 Benutzer online. Zwar + werden auch nicht-FreeBSD-spezifische Themen diskutiert, + den Hauptteil der Diskussionen dreht sich aber um die + Lösung der Probleme von FreeBSD-Anwendern. Die + Teilnehmer dieses Channels helfen Ihnen auch bei Fragen + zu elementaren Dingen und zeigen Ihnen auch, wo Sie die + entsprechenden Erklärungen im FreeBSD-Handbuch oder + anderen Ressourcen finden können. Obwohl die + Teilnehmer des Channels über die ganze Welt verstreut + sind, werden alle Diskussionen auf Englisch geführt. + Wollen Sie die Diskussion in Ihrer Sprache führen, + sollten Sie Ihre Frage trotzdem auf Englisch stellen und + danach gegebenfalls einen neuen Channel in der Form + ##freebsd-Ihre_Sprache + erönnen. + + Der Channel #FreeBSD im DALNET ist in den USA unter irc.dal.net und in Europa unter irc.eu.dal.net verfügbar. Der Channel #FreeBSDHelp im DALNET ist in den USA unter irc.dal.net sowie in Europa unter irc.eu.dal.net verfügbar. Der Channel #FreeBSD im UNDERNET ist in den USA unter us.undernet.org und in Europa unter eu.undernet.org verfügbar. Es handelt sich hierbei um einen Hilfe-Channel, man wird Sie daher auf Dokumente verweisen, die Sie selbst lesen müssen. Der Channel #FreeBSD im RUSNET ist ein russischsprachiger Channel, der sich der Unterstützung von &os;-Anwendern verschrieben hat. Er ist auch ein guter Startpunkt für nichttechnische Diskussionen. Der Channel #BSDChat im IRCNET (Sprache: traditionelles Chinesisch) hat sich der Unterstützung von &os;-Anwendern verschrieben. Er ist auch ein guter Startpunkt für nichttechnische Diskussionen. Alle diese Kanäle unterscheiden sich voneinander und sind nicht miteinander verbunden. Ebenso unterscheiden sich Ihre Chat-Stile, weshalb es sein kann, dass Sie zunächst alle Kanäle ausprobieren müssen, um den zu Ihrem Chat-Stil passenden zu finden. Hier gilt, was für jeden IRC-Verkehr gilt: falls sie sich leicht angegriffen fühlen oder nicht mit vielen jungen (und einigen älteren) Leuten, verbunden mit dem nutzlosen Gezanke umgehen können, dann ziehen Sie es gar nicht erst in Erwägung. Gibt es Firmen, die Training und Support für FreeBSD anbieten? DaemonNews bietet Training und Support für FreeBSD an. Weitergehende Informationen finden Sie in der BSD Mall. Die FreeBSD Mall bietet ebenfalls professionellen FreeBSD support an. Weitergehende Informationen finden Sie auf ihrer Webseite. Wenn Ihre Firma oder Organisation ebenfalls Training und Support anbietet und hier genannt werden möchte, wenden Sie sich bitte an das FreeBSD Project. Nik Clayton
nik@FreeBSD.org
Installation Welche Dateien muss ich herunterladen, um FreeBSD zu bekommen? Sie benötigen drei Floppy-Images: floppies/boot.flp, floppies/kern1.flp sowie floppies/kern2.flp. Diese Images müssen mit Hilfe von Werkzeugen wie fdimage oder &man.dd.1; auf Disketten kopiert werden. Falls Sie selbst die einzelnen Distributionen herunterladen müssen (um z.B. von einem DOS-Dateisystem aus zu installieren), empfehlen wir, sich die folgenden Distributionen zu besorgen: base/ manpages compat* doc src/ssys.* Vollständige Instruktionen für dieses Vorgehen und ein wenig mehr zur Installation generell finden Sie im Handbucheintrag zur Installation von FreeBSD. Was soll ich tun, wenn das Floppy-Image nicht auf eine Diskette passt? Eine 3,5-Zoll (1,44MB) Diskette kann 1474560 Byte an Daten fassen und das Boot-Image ist exakt 1474560 Byte groß. Häufige Fehler bei der Erstellung der Boot-Diskette sind: Bei der Benutzung von FTP das Floppy-Image nicht im Binär-Modus herunterzuladen. Einige FTP-Clients benutzen als Voreinstellung den ASCII-Modus und versuchen, alle Zeilenendezeichen an das Zielsystem anzupassen. Dadurch wird das Boot-Image in jedem Fall unbrauchbar. Überprüfen Sie die Größe des heruntergeladenen Boot-Images: falls sie nicht exakt mit der auf dem Server übereinstimmt, hat das Herunterladen nicht richtig funktioniert. Abhilfe: geben Sie binary an der FTP-Eingabeaufforderung ein, nach dem Sie mit dem Server verbunden sind und bevor Sie das Image herunterladen. Die Benutzung des DOS-Befehls copy (oder eines entsprechendes Werkzeugs der grafischen Benutzeroberfläche), um das Boot-Image auf die Diskette zu übertragen. Programme wie copy sind hier unbrauchbar, weil das Image zur direkten Übertragung erstellt wurde. Das Image stellt den gesamten Disketteninhalt dar, Spur für Spur, und nicht eine gewöhnliche Datei. Sie müssen es roh mit speziellen Werkzeugen (z.B. fdimage oder rawrite) übertragen, wie es in der Installationsanleitung zu FreeBSD beschrieben ist. Wo befinden sich die Instruktionen zur Installation von FreeBSD? Installationsanleitungen finden Sie im Handbucheintrag zur Installation von FreeBSD. Was benötige ich zum Betrieb von FreeBSD? Der Betrieb von &os; 5.X und neuer erfordert mindestens einen 486er Prozessor mit mindestens 24 MB RAM sowie mindestens 150 MB an Festplattenspeicher. Alle &os;-Versionen laufen mit einer einfachen MDA-Grafikkarte, für &xorg; benötigen Sie allerdings eine VGA- oder eine bessere Videokarte. Lesen Sie auch den Abschnitt Hardwarekompatibilität. Wie kann ich eine angepasste Installationsdiskette erstellen? Zurzeit gibt es keine Möglichkeit, nur die angepassten Installationsdisketten zu erstellen. Sie müssen sich eine ganz neues Release erstellen, das Ihre Installationsdiskette enthält. Wenn Sie eine modifizierte Ausgabe erstellen wollen, finden Sie eine Anleitung im Artikel FreeBSD Release Engineering. Kann ich mehr als ein Betriebssystem auf meinem PC unterbringen? Sehen Sie sich Die Multi-OS-Seite an. Kann &windows; neben FreeBSD existieren? Installieren Sie zuerst &windows;, dann FreeBSD. Der Bootmanager von FreeBSD kann dann entweder &windows; oder FreeBSD booten. Falls Sie &windows; nach FreeBSD installieren, wird es, ohne zu fragen, Ihren Bootmanager überschreiben. Lesen Sie den nächsten Abschnitt, falls das passieren sollte. &windows; hat meinen Bootmanager zerstört! Wie stelle ich ihn wieder her? Es gibt drei Möglichkeiten, den FreeBSD-Bootmanager neu zu installieren: Unter DOS wechseln Sie in das Verzeichnis tools/ Ihrer FreeBSD-Distribution und suchen nach bootinst.exe. Rufen sie es so auf: ...\TOOLS> bootinst.exe boot.bin und der Bootmanager wird neu installiert. Booten Sie FreeBSD wieder mit der Bootdiskette und wählen Sie den Menüeintrag Custom Installation. Wählen Sie Partition. Wählen Sie das Laufwerk, auf dem sich der Bootmanager befand (wahrscheinlich der erste Eintrag) und wenn Sie in den Partitioneditor gelangen, wählen Sie als aller erstes (nehmen Sie z.B. keine Änderungen vor) (W)rite. Sie werden nach einer Bestätigung gefragt, antworten ja und vergessen Sie nicht, in der Bootmanager-Auswahl Boot Manager auszuwählen. Hierdurch wird der Bootmanager wieder auf die Festplatte geschrieben. Verlassen Sie nun das Installationsmenü und rebooten wie gewöhnlich von der Festplatte. Booten Sie FreeBSD wieder mit der Bootdiskette (oder der CDROM) und wählen Sie den Menüpunkt Fixit. Wählen Sie die für Sie passende Option, entweder die Fixit-Diskette oder die CD Nummer 2 (die Option live Filesystem). Wechseln Sie zur Fixit-Shell und geben Sie den folgenden Befehl ein: Fixit# fdisk -B -b /boot/boot0 bootdevice Als bootdevice müssen Sie das von Ihrem System verwendete Gerät angeben, z.B. ad0 (erste IDE-Platte), ad4 (erste IDE-Platte an einem zusätzlichen Controller), da0 (erste SCSI-Platte), usw. Mein IBM Thinkpad Modell A, T oder X, hängt sich auf, wenn ich FreeBSD zum ersten Mal starte. Was soll ich machen? Ein Fehler in den ersten BIOS-Versionen dieser Geräte führt dazu, dass sie die von FreeBSD genutzte Partition für eine Suspend-To-Disk-Partition halten. Wenn das BIOS dann versucht, diese Partition auszuwerten, hängt sich das System auf. Laut IBM In einer Mail von Keith Frechette kfrechet@us.ibm.com. wurde der Fehler wurde in den folgenden BIOS-Versionen behoben: Gerät BIOS Version T20 IYET49WW oder neuer T21 KZET22WW oder neuer A20p IVET62WW oder neuer A20m IWET54WW oder neuer A21p KYET27WW oder neuer A21m KXET24WW oder neuer A21e KUET30WW Es ist möglich, dass neuere Version des IBM BIOS den Fehler wieder enthalten. Dieser Beitrag von Jacques Vidrine auf der Mailingliste &a.mobile; beschreibt eine Technik, die Ihnen weiterhelfen könnte, wenn Ihr IBM Laptop mit FreeBSD nicht bootet und Sie eine neuere oder ältere BIOS-Version einspielen können. Wenn Ihr Thinkpad über eine ältere BIOS-Version verfügt und Sie das BIOS nicht aktualisieren können, ist eine der möglichen Lösungen, FreeBSD zu installieren, die Partitions-ID zu ändern und danach neue Bootblocks zu installieren, die mit der geänderten ID umgehen können. Zunächst müssen Sie die Maschine so weit wiederherstellen, dass sie über den Selbst-Test hinauskommt. Dazu ist es erforderlich, dass das System beim Start keine Partitions-ID auf seiner primären Festplatte findet. Eine Variante ist, die Platte auszubauen und vorübergehend in einem älteren Thinkpad (z.B. dem Thinkpad 600) oder (mit einem passenden Adapter) in einen normalen PC einzubauen. Sobald dies erfolgt ist, können Sie die FreeBSD-Partition löschen und die Festplatte wieder in das Thinkpad einbauen. Das Thinkpad sollte jetzt wieder starten können. Danach können Sie mit der nachfolgend beschriebenen Anleitung eine funktionsfähige FreeBSD-Installation erhalten. Beschaffen Sie sich boot1 und boot2 von . Legen Sie diese Dateien so ab, dass Sie während der Installation darauf zugreifen können. Installieren Sie ganz wie gewohnt FreeBSD auf dem Thinkpad. Allerdings dürfen Sie den Dangerously Dedicated-Modus nicht benutzen. Nach dem Abschluss der Installation dürfen Sie die Maschine nicht neu starten. Wechseln Sie zur Emergency Holographic Shell ( Alt F4 ) oder starten Sie eine fixit Shell. Benutzen Sie &man.fdisk.8;, um die Partitions-ID von FreeBSD von 165 in 166 zu ändern (dieser Wert wird von OpenBSD benutzt). Kopieren Sie die Dateien boot1 und boot2 auf die lokale Festplatte. Installieren Sie boot1 und boot2 mit &man.disklabel.8; auf die FreeBSD-Slice. &prompt.root; disklabel -B -b boot1 -s boot2 ad0sn Setzen Sie für n die Nummer der Slice ein, auf der sie FreeBSD installiert haben. Starten Sie das System neu. Am Boot-Prompt sollten Sie die Auswahl OpenBSD erhalten. Damit wird in Wirklichkeit FreeBSD gestartet. Was Sie machen müssen, wenn Sie FreeBSD und OpenBSD parallel installieren wollen, sollten Sie zu Übungszwecken einfach einmal selbst herausfinden. Kann ich FreeBSD auf einer Festplatte mit beschädigten Blöcken installieren? Prinzipiell ja. Allerdings ist das keine gute Idee. Wenn Ihnen bei einer modernen IDE-Platte defekte Sektoren gemeldet werden, wird die Platte mit großer Wahrscheinlichkeit innerhalb kurzer Zeit vollständig ausfallen, da die Meldung ein Zeichen dafür ist, dass die für die Korrektur reservierten Sektoren bereits verbraucht wurden. Wir raten Ihnen, die Platte auszutauschen. Falls Sie ein SCSI-Laufwerk mit beschädigten Blöcken besitzen, lesen Sie diese Antwort. Wenn ich von der Installationsdiskette boote, geschehen merkwürdige Dinge! Was sollte ich tun? Falls Sie beobachten, dass ihr Rechner sich bis zum Stillstand abmüht oder spontan rebootet, während Sie versuchen, von der Installationsdiskette zu booten, sollten Sie sich drei Fragen stellen: Haben Sie eine brandneue, frisch formatierte, fehlerfreie Diskette benutzt (günstigerweise eine brandneue, direkt aus dem Karton und nicht eine Diskette aus einem Magazin, das schon seit drei Jahren unter Ihrem Bett lag)? Haben Sie das Floppy-Image im Binär- (oder Image) Modus heruntergeladen? (Schämen Sie sich nicht. Sogar die besten unter uns haben wenigstens einmal Binärdateien versehentlich im ASCII-Modus heruntergeladen!) Falls Sie &windows; 95 oder &windows; 98 benutzen, haben Sie es heruntergefahren und fdimage bzw. rawrite in einfachem, reinem DOS neu gestartet? Es scheint, dass diese Betriebssysteme Programme stören, die direkt auf Hardware schreiben, wie es das Erstellungsprogramm für die Diskette tut; selbst bei der Ausführung des Programms in einem DOS-Fenster in der grafischen Benutzeroberfläche kann dieses Problem auftreten. Es wurde auch darüber berichtet, dass &netscape; Probleme beim Herunterladen der Bootdisketten verursacht. Es ist also wahrscheinlich besser, einen anderen FTP-Client zu benutzen. Ich habe zur Installation von meinem ATAPI CDROM gebootet, aber das Installationsprogramm sagt mir, dass es kein CDROM gefunden hat. Was geht hier ab? Dieses Problem wird üblicherweise durch ein falsch konfiguriertes CDROM verursacht. Bei vielen PCs ist das CDROM der Slave am zweiten IDE-Controller, ein Master ist nicht vorhanden. Laut Spezifikation ist diese Konfiguration illegal, aber &windows; verletzt die Spezifikation und das BIOS ignoriert sie, wenn es von einem CDROM booten soll. Daher konnten Sie zwar vom CDROM booten, während FreeBSD es nicht für die Installation benutzen kann. Um dieses Problem zu lösen, müssen Sie entweder das CDROM als Master an den IDE-Controller anschließen oder dafür sorgen, dass an dem vom CDROM genutzten IDE-Controller das CD-ROM als Slave und ein anderes Gerät als Master angeschlossen ist. Kann ich auf meinem Laptop per PLIP (Parallel Line IP) installieren? Ja, Sie brauchen dazu nur ein ganz normales Laplink-Kabel. Weitere Informationen zum Thema Netzwerke am Druckerport finden sie im Kapitel PLIP des Handbuchs. Welche Geometrie sollte ich für ein Festplattenlaufwerk verwenden? Unter der Geometrie einer Festplatte verstehen wir die Anzahl Zylinder, Schreib-/Leseköpfen und Sektoren/Spur auf einer Festplatte. Im folgenden wird dafür der Übersichtlichkeit halber der Begriff C/H/S verwendet. Das BIOS des PCs berechnet mit diesen Angaben, auf welche Bereiche der Festplatte es für Schreib-/Lesezugriffe zugreifen muss). Aus einigen Gründen scheint dies gerade bei frischgebackenen Systemadministratoren für sehr viel Verwirrung zu sorgen. Zunächst einmal ist die physikalische Geometrie eines SCSI-Laufwerks vollkommen irrelevant, da FreeBSD mit Blöcken arbeitet. Tatsächlich gibt es die physikalische Geometrie nicht, da die Sektordichte auf einer Festplatte variiert. Was die Hersteller als die wahre physikalische Geometrie bezeichnen, ist im allgemeinen die Geometrie, die aufgrund ihrer Ergebnisse im geringsten ungenutzten Speicher resultiert. Bei IDE-Platten arbeitet FreeBSD mit C/H/S-Angaben, aber alle modernen Laufwerke wandeln diese intern ebenfalls in Blocknummern um. Wichtig ist nur die logische Geometrie. Das BIOS kann die logische Geometrie der Festplatte abfragen; die erhaltenen Daten werden dann vom BIOS bei Zugriffen auf die Festplatte genutzt. Da FreeBSD das BIOS benutzt, während es bootet, ist es sehr wichtig, dass diese Angaben richtig sind. Insbesondere müssen alle Betriebssysteme mit derselben Geometrie arbeiten, falls Sie mehr als ein Betriebssystem auf einer Festplatte haben. Andernfalls werden Sie ernsthafte Bootprobleme bekommen! Bei SCSI-Festplatten hängt die zu verwendende Geometrie davon ab, ob der Extended Translation Support auf Ihrem Controller eingeschaltet ist (oft auch als Unterstützung für DOS-Platten >1GB oder ähnlich bezeichnet). Falls sie ausgeschaltet ist, benutzen Sie N Zylinder, 64 Köpfe und 32 Sektoren/Spur, wobei N die Kapazität der Festplatte in MB ist. Zum Beispiel sollten für eine 2GB Festplatte 2048 Zylinder, 64 Köpfe und 32 Sektoren/Spur angegeben werden. Falls sie eingeschaltet ist (was oft der Fall ist, um bestimmte Einschränkungen von &ms-dos; zu umgehen) und die Plattenkapazität mehr als 1GB beträgt, benutzen Sie M Zylinder, 63 Sektoren/Spur (nicht 64) und 255 Köpfe, wobei M der Plattenkapazität in MB, dividiert durch 7,844238 entspricht (!). Also würde unsere 2GB Beispielplatte 261 Zylinder, 63 Sektoren/Spur und 255 Köpfe haben. Falls Sie sich hier nicht sicher sind oder FreeBSD während der Installation die Geometrie nicht richtig erkennt, hilft es normalerweise, eine kleine DOS-Partition auf der Festplatte anzulegen. Das BIOS sollte dann in der Lage sein, die richtige Geometrie zu erkennen. Sie können die Partition jederzeit im Partitioneditor entfernen, falls Sie sie nicht behalten möchten. Allerdings kann Sie ganz nützlich sein, um Netzwerkkarten zu programmieren und ähnliches. Alternativ können Sie das frei verfügbare Programm pfdisk.exe verwenden. Sie finden es im Unterverzeichnis tools auf der FreeBSD-CDROM und allen FreeBSD FTP-Servern). Mit diesem Programm können Sie herausfinden, welche Geometrie die anderen Betriebssysteme auf der Festplatte verwenden. Diese Geometrie können Sie im Partitioneditor eingeben. Gibt es irgendwelche Einschränkungen, wie ich die Festplatte aufteilen darf? Ja. Sie müssen sicherstellen, dass Ihre Rootpartition innerhalb der ersten 1024 Zylinder liegt, damit das BIOS den Kernel von Ihr booten kann. (Beachten Sie, dass es sich um eine Einschränkung durch das BIOS des PCs handelt und nicht durch FreeBSD). Für ein SCSI-Laufwerk bedeutet dies normalerweise, dass sich die Rootpartition in den ersten 1024MB befindet (oder in den ersten 4096MB, falls die Extended Translation eingeschaltet ist - siehe die vorherige Frage). Der entsprechende Wert für IDE ist 504MB. Verträgt sich FreeBSD mit Plattenmanagern? FreeBSD erkennt den Ontrack Plattenmanager und berücksichtigt ihn. Andere Plattenmanager werden nicht unterstützt. Falls Sie die Festplatte nur mit FreeBSD benutzen wollen, brauchen Sie keinen Plattenmanager. Wenn Sie Sie die Platte einfach in der vom BIOS maximal unterstützten Größe (normalerweise 504 Megabyte) konfigurieren, sollte FreeBSD erkennen, wie viel Platz Sie tatsächlich haben. Falls Sie eine alte Festplatte mit einem MFM-Controller verwenden, könnte es sein, dass Sie FreeBSD explizit angeben müssen, wie viele Zylinder es benutzen soll. Falls Sie die Festplatte mit FreeBSD und einem anderen Betriebssystem benutzen wollen, sollten Sie auch in der Lage sein, ohne einen Plattenmanager auszukommen: stellen sie einfach sicher, dass sich die Bootpartition von FreeBSD und der Bereich für das andere Betriebssystem in den ersten 1024 Zylindern befinden. Eine 20 Megabyte Bootpartition sollte völlig genügen, wenn Sie einigermaßen sorgfältig arbeiten. Beim ersten Booten von FreeBSD erscheint Missing Operating System. Was ist passiert? Dies ist ein klassischer Fall von Konflikten bei den verwendeten Plattengeometrien von FreeBSD und DOS oder anderen Betriebssystemen. Sie werden FreeBSD neu installieren müssen. Bei Beachtung obiger Instruktionen wird in den meisten Fällen alles funktionieren. Wieso komme ich nicht weiter als bis zum F?-Prompt des Bootmanagers? Dies ist ein weiteres Symptom für das bereits in der vorherigen Frage beschriebene Problem. Ihre Einstellungen zur Geometrie im BIOS und in FreeBSD stimmen nicht überein! Falls Ihr Controller oder BIOS Zylinderumsetzung (oft als >1GB drive support bezeichnet), probieren Sie eine Umsetzung dieser Einstellung und Neuinstallation von FreeBSD. Muss ich den vollständigen Quellcode installieren? Im allgemeinen nicht. Wir empfehlen jedoch dringend die Installation des base Source-Kit, das viele der hier erwähnten Dateien enthält und des sys (Kernel) Source-Kit, das den Quellcode für den Kernel enthält. Außer dem Programm zur Konfiguration des Kernels (&man.config.8;) gibt es im System nichts, zu dessen Funktion der Quellcode erforderlich ist. Mit Ausnahme der Kernelquellen ist unsere Build-Struktur so aufgebaut, dass Sie den Quellcode von überall her per NFS read-only mounten und dennoch neue Binaries erstellen können. (Wegen der Einschränkung bezüglich der Kernelquellen empfehlen wir, diese nicht direkt nach /usr/src zu mounten, sondern irgendwoanders hin mit passenden symbolischen Links, um die Toplevel-Struktur des Quellbaumes zu duplizieren.) Die Quellen verfügbar zu haben und zu wissen, wie man ein System mit ihnen erstellt, wird es Ihnen wesentlich einfacher machen, zu zukünftigen Ausgaben von FreeBSD zu wechseln. Um einen Teil der Quellen auszuwählen, verwenden Sie den Menüpunkt Custom, wenn Sie sich im Menü Distributions des Systeminstallationstools befinden. Muss ich einen Kernel erstellen? Ursprünglich war die Erstellung eines neuen Kernels bei fast jeder Installation von FreeBSD erforderlich, aber neuere Ausgaben haben von der Einführung weitaus benutzerfreundlicherer Kernelkonfigurationswerkzeuge profitiert. Seit &os; 5.X erfolgt die Kernelkonfiguration in der Regel durch die die deutlich flexibleren hints, die am Loader-Prompt eingegeben werden können. Es kann dennoch sinnvoll sein, einen neuen Kernel zu erstellen, der nur die benötigten Treiber enthält, um ein wenig Hauptspeicher zu sparen, für die meisten Systeme ist dies aber nicht mehr länger erforderlich. Soll ich DES, Blowfisch oder MD5 zur Verschlüsselung der Passwörter benutzen? FreeBSD benutzt standardmäßig MD5 zur Verschlüsselung der Passwörter. Es wird angenommen, dass diese Methode sicherer ist als das traditionell benutzte Verfahren, das auf dem DES Algorithmus basierte. Es ist immer noch möglich, DES-Passwörter zu benutzen, wenn Sie die Datei mit den Passwörtern mit älteren System austauschen müssen. Ältere System verstehen meist nur das unsichere Verfahren, dieses steht Ihnen zur Verfügung, wenn Sie mit sysinstall die crypto Distribution installieren. Sie können auch die crypto Sourcecodes installieren, wenn Sie Ihr System über die Sourcen aktualisieren. Die crypto Bibliotheken erlauben es Ihnen das sichere Blowfisch Verfahren für die Verschlüsselung der Passwörter einzusetzen. Das für neue Passwörter benutzte Verschlüsselungsverfahren wird über die Einstellung passwd_format in /etc/login festgelegt. Die möglichen Werte sind entweder des, blf (falls sie zur Verfügung stehen) oder md5. Weitere Informationen über die Einstellungen für den Login erhalten Sie in &man.login.conf.5;. Woran kann es liegen, dass ich zwar von der Diskette booten kann, aber nicht weiter als bis zur Meldung Probing Devices... komme? Falls Sie ein IDE &iomegazip;- oder &jaz;-Laufwerk eingebaut haben, entfernen Sie es und versuchen Sie es erneut. Solche Laufwerke könnten dem Bootvorgang stören. Nach der Installation des Systems können Sie das Laufwerk wieder einbauen. Dieser Fehler wird hoffentlich in einer späteren Version behoben werden. Wieso wird mit der Fehler panic: cant mount root gemeldet, wenn ich das System nach der Installation reboote? Dieser Fehler beruht auf Unstimmigkeiten zwischen den Festplatteninformationen im Bootblock und denen im Kernel. Der Fehler tritt normalerweise auf IDE-Systemen mit zwei Festplatten auf, bei denen die Festplatten als Master- oder Single-Device auf separaten IDE-Controllern angeschlossen sind und FreeBSD auf der Platte am zweiten Controller installiert wurde. Der Bootblock vermutet, dass das System auf ad0 (der zweiten BIOS-Platte) installiert ist, während der Kernel der ersten Platte auf dem zweiten Controller die Gerätekennung ad2 zuteilt. Der Kernel versucht nach der Geräteüberprüfung die vom Bootblock angenommene Bootdisk ad0 zu mounten, obwohl sie in Wirklichkeit ad2 heißt - und scheitert. Tun Sie folgendes, um dieses Problem zu beheben: Rebooten Sie das System und drücken Sie Enter, wenn die Meldung Booting kernel in 10 seconds; hit [Enter] to interrupt erscheint. Dadurch gelangen Sie in den Boot Loader. Geben Sie nun root_disk_unit="disk_number" ein. disk_number hat den Wert 0, wenn FreeBSD auf dem Master des ersten IDE-Controllers installiert wurde; 1, wenn FreeBSD auf dem Slave des ersten IDE-Controllers installiert wurde; 2, wenn FreeBSD auf dem Master des zweiten IDE-Controllers installiert wurde; und 3, wenn FreeBSD auf dem Slave des zweiten IDE-Controllers installiert wurde. Nach der Eingabe von boot sollte Ihr System jetzt korrekt starten. Damit Sie dieses Ritual nicht bei jedem Start des Systems durchführen müssen, sollten Sie die Zeile root_disk_unit="disk_number" in die Datei /boot/loader.conf.local eintragen. Stellen Sie eine ununterbrochene Folge der Festplatten her, indem Sie die FreeBSD-Platte am ersten IDE-Controller anschließen. Gibt es eine Hauptspeicherbegrenzung? Bei einer &i386;-Standardinstallation werden maximal 4 Gigabyte Hauptspeicher unterstützt. Seit &os; 4.9 und 5.1 wird auch ein größerer Hauptspeicher unterstützt. Dazu müssen Sie die zusätzliche Option PAE (&man.pae.4;) in Ihren Kernel kompilieren: options PAE &os;/pc98 unterstützt maximal 4 GB Hauptspeicher, daher kann PAE auf diesen Systemen nicht verwendet werden. Unter &os;/alpha hängt dieses Limit von der verwendeten Hardware ab - lesen Sie daher die Alpha Hardware Release Notes für weitere Informationen. Sonstige von &os; unterstützte Architekturen haben ein sehr viel höheres theoretisches Speicherlimit (viele Terabytes). Wo liegen die Grenzen für ffs-Dateisysteme? Theoretisch liegt das Limit für ffs-Dateisysteme bei 8 Terabyte (2G-Blöcke) oder 16TB für die Standard-Blockgröße von 8k. In der Praxis setzt die Software das Limit auf 1 Terabyte herab, aber durch Modifikationen sind auch Dateisysteme mit 4 Terabyte möglich (und existieren auch). Die maximale Größe einer einzelnen ffs-Datei liegt bei ungefähr 1G Blöcken (4TB, falls die Blockgröße 4k beträgt). Maximale Dateigröße Blockgröße geht sollte gehen 4K 4T-1 >4T 8K >32G 32T-1 16K >128G 32T-1 32K >512G 64T-1 64K >2048G 128T-1
Wenn die im Dateisystem verwendete Blockgröße 4k beträgt, wird mit dreifacher Indirektion gearbeitet und die Limitierung sollte durch die höchste Blocknummer erfolgen, die mit dreifacher Indirektion dargestellt werden kann (ungefähr 1k^3 + 1k^2 + 1k). In Wirklichkeit liegt das Limit aber bei der (falschen) Anzahl von 1G-1 Blocknummern im Dateisystem. Die maximale Anzahl der Blocknummern müsste 2G-1 sein. Es gibt einige Fehler für Blocknummern nahe 2G-1, aber solche Blocknummern sind bei einer Blockgröße von 4k unerreichbar. Bei Blocknummern von 8k und größer sollte das Limit bei 2G-1 Blocknummern liegen, tatsächlich liegt es aber bei 1G-1 Blocknummern. Die Verwendung der korrekten Grenze von 2G-1 verursacht Probleme.
Wieso erhalte ich die Fehlermeldung archsw.readin.failed beim Start des Systems, nachdem ich einen neuen Kernel erstellt habe? Ihr System und Ihr Kernel sind nicht synchron - dies ist nicht erlaubt. Sie müssen Ihren Kernel mit make buildworld und make buildkernel aktualisieren. Sie können den zu bootenden Kernel direkt im zweiten Schritt angeben, indem Sie eine beliebige Taste drücken, wenn das | erscheint und bevor der Loader startet. Mein System stürzt beim Booten ab! Was kann ich tun? Deaktivieren Sie die ACPI-Unterstützung. Dazu drücken Sie beim Start des Bootloaders die Leertaste. Das System antwortet darauf mit OK Geben Sie nun unset acpi_load und danach boot ein.
Hardware-Kompatibilität Allgemeines Ich will mir neue Hardware für mein FreeBSD-System zulegen, was soll ich kaufen? Diese Frage wird ständig auf den FreeBSD-Mailinglisten diskutiert. Da sich die Hardware ständig ändert, ist das allerdings keine Überraschung. Trotzdem sollten Sie unbedingt die Hardware-Informationen von &os; (&rel.current; oder &rel2.current;) und die Archive der Mailinglisten durchsehen, bevor Sie nach der neuesten/besten Hardware fragen. Normalerweise gab es kurz zuvor eine Diskussion über genau die Hardware, die Sie sich zulegen wollen. Wenn Sie sich einen Laptop zulegen wollen, sollten Sie einen Blick in das Archiv der Mailingliste FreeBSD-mobile werfen. Ansonsten empfiehlt sich ein Blick in das Archiv von FreeBSD-questions oder auch einer spezialisierte Mailingliste für diese Art von Hardware. Architekturen und Prozessoren Unterstützt FreeBSD neben x86 auch andere Architekturen? Ja. FreeBSD ist zurzeit für die Intel x86 und DEC (jetzt Compaq) Alpha Architekturen verfügbar. Seit FreeBSD 5.0 werden auch AMD64 sowie Intel EM64T, IA-64 und &sparc64; unterstützt. Die Neuzugänge auf der Liste der in Zukunft unterstützten Plattformen sind &mips; und &powerpc;. Abonnieren Sie die Mailinglisten &a.ppc; oder &a.mips; wenn Sie mehr über den Stand der Entwicklung erfahren wollen. Schließen Sie sich der Mailingliste &a.platforms; an, wenn Sie an grundsätzlichen Diskussionen über neue Architekturen interessiert sind. Falls Ihre Maschine eine andere Architektur aufweist und Sie unbedingt sofort etwas benötigen, schlagen wir vor, dass Sie sich einmal NetBSD oder OpenBSD ansehen. Unterstützt FreeBSD Symmetric-Multiproccessing (SMP)? Ja, seit &os;-Version 5.2 wurde SMP bereits im GENERIC-Kernel aktiviert. Dies sollte eigentlich auch für &os; 5.3 gelten. Allerdings traten bei der Entwicklung des Kernels auf einigen Rechnern Probleme auf. Daher entschloss man sich, SMP in der Voreinstellung zu deaktivieren, bis diese Probleme behoben sind. Dies ist eine der vordringlichen Aufgaben für &os; 5.4. Festplatten, Bandlaufwerke, sowie CD- und DVD-Laufwerke Welche Arten von Festplatten werden von FreeBSD unterstützt? FreeBSD unterstützt EIDE-, SATA-, SCSI- und SAS-Laufwerke (mit kompatiblen Controllern - siehe folgenden Abschnitt), sowie alle Laufwerke, die die original Western Digital-Schnittstelle (MFM, RLL, ESDI und natürlich IDE) benutzen. Ein paar Controller mit proprietären Schnittstellen könnten nicht laufen: halten Sie sich an WD1002/3/6/7-Schnittstellen und Clones. Welche SCSI- oder SAS-Controller werden unterstützt? Sie finden eine vollständige und aktuelle Liste in den Hardware-Informationen zu &os; (&rel.current; oder &rel2.current;). Welche Arten von Bandlaufwerken werden unterstützt? FreeBSD unterstützt SCSI-, QIC-36- (mit QIC-02-Schnittstelle) und QIC-40/80-Bandlaufwerke (diskettenbasiert). Hierzu gehören auch 8-mm (aka Exabyte) und DAT-Laufwerke. Die QIC-40/80-Laufwerke sind bekanntlich sehr langsam. Einige der frühen 8-mm-Laufwerke sind nicht besonders kompatibel zu SCSI-2 und könnten unter FreeBSD nicht einwandfrei funktionieren. Unterstützt FreeBSD Bandwechsler? Das Gerät &man.ch.4; und das Kommando chio unterstützen Bandwechsler. Details zum Betrieb des Wechslers finden Sie in der Hilfeseite &man.chio.1;. Falls Sie nicht AMANDA oder ein anderes Produkt benutzen, das den Wechsler bereits kennt, bedenken Sie, dass die Programme nur wissen, wie sie ein Band von einem Punkt zu einem anderen bewegen müssen. Sie selbst müssen sich also merken, in welchem Einschub sich ein Band befindet und zu welchem Einschub das Band, das sich gerade im Laufwerk befindet, zurück muss. Welche CDROM-Laufwerke werden von FreeBSD unterstützt? Jedes an einem unterstützten Controller angeschlossene SCSI-Laufwerk wird unterstützt. Die folgenden proprietären CDROM-Schnittstellen werden ebenfalls unterstützt: Mitsumi LU002 (8bit), LU005 (16bit) und FX001D (16bit 2x Speed). Sony CDU 31/33A Sound Blaster Non-SCSI CDROM Matsushita/Panasonic CDROM ATAPI compatible IDE CDROMs Von allen Nicht-SCSI-Laufwerken ist bekannt, dass sie im Vergleich zu SCSI-Laufwerken extrem langsam sind. Einige ATAPI-CDROMs könnten nicht funktionieren. FreeBSD kann direkt von der offiziellen &os; CD-ROM, sowie den CD-ROMs von Daemon News und &os; Mall, gebootet werden. Welche CD-Brenner werden von FreeBSD unterstützt? FreeBSD unterstützt alle ATAPI-kompatiblen IDE CD-R und CD-RW Brenner. Lesen Sie dazu auch &man.burncd.8;. FreeBSD unterstützt ebenfalls SCSI CD-R und CD-RW Brenner. Installieren und benutzen Sie das Paket cdrecord aus der Ports-Sammlung. Dazu müssen Sie allerdings das Gerät pass mit in Ihren Kernel aufnehmen. Unterstützt FreeBSD &iomegazip;-Laufwerke? FreeBSD unterstützt alle gängigen SCSI- und ATAPI-&iomegazip;-Laufwerke. Ihr SCSI-ZIP-Laufwerk darf nur mit den SCSI-Ziel-IDs 5 oder 6 laufen, aber Sie können sogar davon booten, falls das BIOS Ihres Hostadapters dies unterstützt. Es ist nicht bekannt, welche Hostadapter das Booten von anderen Zielen als 0 oder 1 erlauben; daher werden Sie in ihren Handbüchern nachsehen müssen, wenn Sie dieses Merkmal benutzen möchten. FreeBSD unterstützt ZIP-Laufwerke, die an der parallelen Schnittstelle angeschlossen sind. Der Kernel sollte die folgenden Treiber enthalten: scbus0, da0, ppbus0 und vp0 (der GENERIC-Kernel enthält alle, außer vp0). Wenn diese Treiber vorhanden sind, sollte das Laufwerk an der parallelen Schnittstelle als /dev/da0s4 verfügbar sein. Zip-Datenträger können mit mount /dev/da0s4 /mnt ODER (DOS-formatierte) mount_msdos /dev/da0s4 /mnt gemountet werden. Lesen Sie auch den FAQ-Eintrag zu Wechseldatenträgern und die Anmerkungen zum Thema Formatierung im Kapitel Administration. Unterstützt FreeBSD &jaz;, EZ und andere Wechsellaufwerke? Ja. Bei den meisten dieser Geräte handelt es sich um SCSI-Geräte, die von FreeBSD auch als solche angesprochen werden. Lediglich das IDE-EZ-Laufwerk wird als IDE-Laufwerk angesprochen. Schalten Sie die Laufwerke ein, bevor Sie Ihr System booten. Müssen Sie Medien im laufenden Betrieb wechseln, sollten Sie zuvor &man.mount.8;, &man.umount.8;, sowie &man.camcontrol.8; (für SCSI-Laufwerke) oder &man.atacontrol.8; (für IDE-Laufwerke), sowie den Abschnitt zur Nutzung von Wechsellaufwerken dieser FAQ lesen. Tastaturen und Mäuse Unterstützt FreeBSD meine Tastatur mit USB-Anschluss? Ja. FreeBSD unterstützt USB-Tastaturen, wenn Sie die USB-Unterstützung in /etc/rc.conf aktivieren. Wenn Sie die Unterstützung für USB-Tastaturen konfiguriert haben, ist die AT-Tastatur als /dev/kbd0 und die USB-Tastatur als /dev/kbd1 verfügbar. Dies gilt natürlich nur, wenn beide Tastaturen angeschlossen sind; falls nur die USB-Tastatur angeschlossen ist, ist diese als /dev/ukbd0 verfügbar. Wenn Sie die USB-Tastatur an der Systemkonsole benutzen wollen, müssen Sie dies dem System explizit mitteilen. Dazu muss das folgende Kommando während des Systemstarts ausgeführt werden: &prompt.root; kbdcontrol -k /dev/kbd1 < /dev/ttyv0 > /dev/null Wenn Sie nur die USB-Tastatur angeschlossen haben, ist diese als /dev/ukbd0 verfügbar; daher muss in diesem Fall das folgende Kommando benutzt werden: &prompt.root; kbdcontrol -k /dev/ukbd0 < /dev/ttyv0 > /dev/null Tragen Sie dieses Kommando in Datei /etc/rc.i386 ein. Sobald Sie diese Schritte durchgeführt haben, sollte die USB-Tastatur ohne weitere Änderungen auch unter X benutzbar sei. Zurzeit kann es noch Probleme geben, wenn Sie eine USB-Tastatur im laufenden Betrieb einstecken oder abziehen. Um Probleme zu vermeiden, sollten Sie die Tastatur anschließen, bevor Sie das System anschalten und die Tastatur nicht abziehen, solange das System noch läuft. Weitere Informationen erhalten Sie in &man.ukbd.4;. Ich habe eine unübliche Busmaus. Wie muss ich sie konfigurieren? FreeBSD unterstützt die Busmaus und InPort-Busmaus von Herstellern wie Microsoft, Logitech und ATI. Der Gerätetreiber ist im GENERIC-Kernel allerdings nicht eingebunden. Wenn Sie den Bus-Gerätetreiber benötigen, müssen Sie daher einen angepassten Kernel erstellen. Dazu fügen Sie die folgende Zeile in Ihre Kernelkonfigurationsdatei ein: device mse0 at isa? port 0x23c irq5 Die Busmaus wird üblicherweise zusammen mit einer speziellen Karte ausgeliefert. Sie könnte es Ihnen ermöglichen, andere Werte für die Port-Adresse und den Interrupt zu setzen. Weitere Informationen finden Sie in Handbuch zu Ihrer Maus und in der &man.mse.4; Manualpage. Wie benutze ich meine PS/2 (Mouse-Port oder Tastatur)-Maus? PS/2 Mäuse werden von FreeBSD unterstützt. Der notwendige Gerätetreiber, psm, ist bereits im GENERIC-Kernel enthalten. Wenn Sie einen angepassten Kernel ohne diesen Treiber benutzen, müssen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei einfügen und den Kernel neu kompilieren: device psm0 at atkbdc? irq 12 Wenn der Kernel das Gerät psm0 beim Booten korrekt erkennt, stellen Sie sicher, dass sich im Verzeichnis /dev ein Eintrag für psm0 befindet. Durch die Eingabe von &prompt.root; cd /dev; sh MAKEDEV psm0 können Sie diesen Eintrag auch selbst erstellen. Dazu müssen Sie allerdings als root angemeldet sind. Lassen Sie diesen Schritt aus, wenn Sie FreeBSD 5.0-RELEASE oder eine neuere Version mit &man.devfs.5; verwenden. Die Gerätedateien werden in diesem Fall automatisch in /dev erstellt. Kann man die Maus irgendwie außerhalb des X Window Systems benutzen? Falls Sie den normalen Konsoltreiber &man.syscons.4; benutzen, können Sie den Mauszeiger auf Textkonsolen zum Kopieren und Einfügen von Text verwenden. Starten Sie den Mausdämon &man.moused.8; und schalten Sie den Mauszeiger auf der virtuellen Konsole ein: &prompt.root; moused -p /dev/xxxx -t yyyy &prompt.root; vidcontrol -m on xxxx ist der Gerätename der Maus und yyyy ist das Protokoll. Der Mausdämon erkennt die Protokolle der meisten Mäuse (mit Ausnahme alter serieller Mäuse) automatisch, wenn Sie auto für das Protokoll angeben. Falls das Protokoll nicht automatisch erkannt wird, finden Sie die unterstützten Protokolle in der &man.moused.8; Manualpage. Wenn Sie eine PS/2-Maus besitzen und diese beim Systemstart aktivieren wollen, tragen Sie die Zeile moused_enable="YES" in die Datei /etc/rc.conf ein. Falls Sie den Mausdämon auf allen virtuellen Bildschirmen anstatt nur auf der Konsole benutzen wollen, tragen Sie außerdem allscreens_flags="-m on" in /etc/rc.conf ein. Während der Mausdämon läuft, muss der Zugriff auf die Maus zwischen dem Mausdämon und anderen Programmen, wie X Windows, koordiniert werden. Die FAQ Warum funktioniert meine meine Maus unter X nicht? enthält weitere Details. Wie funktioniert das Kopieren und Einfügen von Text mit der Maus auf einer Textkonsole? Wenn Sie es geschafft haben, den Mausdämon zu starten (wie im vorherigen Abschnitt gezeigt), halten Sie die linke Maustaste gedrückt und bewegen Sie die Maus, um einen Textabschnitt zu markieren. Dann drücken Sie die mittlere Maustaste, um den Text an der Cursorposition einzufügen. Wenn Sie keine 3-Tasten-Maus besitzen, können Sie die mittlere Maustaste mit einer Tastenkombination emulieren oder die Funktion der mittleren Taste auf eine andere Taste legen. Einzelheiten dazu enthält die Hilfeseite &man.moused.8;. Meine Maus hat ein neumodisches Rad und mehr Knöpfe. Kann ich sie in FreeBSD benutzen? Unglücklicherweise lautet die Antwort: Vielleicht. Solche Mäuse mit zusätzlichen Extras erfordern in den meisten Fällen spezielle Treiber. Wenn der Gerätetreiber für die Maus oder das Anwendungsprogramm keine spezielle Unterstützung für die Maus bietet, wird sie sich wie eine gewöhnliche Maus mit zwei oder drei Knöpfen verhalten. Ob und wie Sie das Rad unter X benutzen können, können Sie im passenden Abschnitt der FAQ erfahren. Wie benutze ich Maus/Trackball/Touchpad auf meinem Laptop? Bitte lesen Sie die Antwort zur vorherigen Frage. + + + + Wie kann ich die Delete-Taste in der sh und + csh einsetzen? + + + + Für die Bourne Shell + fügen Sie die folgende Zeile in die Datei + .shrc ein (lesen Sie dazu auch die + Manualpages &man.sh.1; sowie &man.editrc.5;). + + bind ^? ed-delete-next-char # for console +bind ^[[3~ ed-delete-next-char # for xterm + + Für die C Shell nehmen + Sie hingegen die folgende Zeile in die Datei + .cshrc auf (lesen Sie dazu auch die + Manualpage &man.csh.1;). + + bindkey ^? delete-char # for console +bindkey ^[[3~ delete-char # for xterm + + Weitere Informationen zu diesem Thema finden sich auch + hier. + + Netzkarten und serielle Geräte Welche Netzwerkkarten unterstützt FreeBSD? In den Hardware Informationen zu jedem FreeBSD Release werden die unterstützten Karten aufgezählt. Unterstützt FreeBSD Software Modems, wie die Winmodems? FreeBSD unterstützt viele Software-Modems, wenn Sie zusätzliche Software installieren. Der Port comms/ltmdm bietet Unterstützung für Modems, die auf dem oft verwendeten Lucent LT Chipsatz basieren. Der Port comms/mwavem bietet Unterstützung für die Modems im IBM Thinkpad 600 und 700. Sie können FreeBSD nicht über ein Software-Modem installieren, diese Software kann nur installiert werden, nachdem das Betriebssystem installiert wurde. Gibt es einen FreeBSD-Treiber für die Karten der Serie 43xx von Broadcom? Nein, und es wird wohl auch nie einen geben. Broadcom weigert sich, Informationen zu ihren drahtlosen Chipsätzen zu veröffentlichen. Wahrscheinlich liegt dies daran, dass Broadcom auch softwaregesteuerte Radios herstellt. Damit ihre Produkte von der FCC zugelassen werden, muss sichergestellt sein, dass Benutzer nicht in der Lage sind, Betriebsfrequenzen, Modulationsparameter, Ausgangsleistung und andere Werte nach Belieben einzustellen. Ohne solche Informationen ist es aber nahezu unmöglich, einen Treiber zu programmieren. Welche seriellen Multi-Port-Karten werden von FreeBSD unterstützt? Es existiert eine Liste der unterstützten Karten im Abschnitt Verschiedene Geräte des Handbuchs. Von einigen nicht NoName-Nachbauten ist ebenfalls bekannt, dass sie funktionieren, speziell von den AST-kompatiblen. In &man.sio.4; finden Sie weitere Informationen zur Konfiguration solcher Karten. Wie kann ich den boot:-Prompt auf einer seriellen Konsole erscheinen lassen? Erstellen Sie einen Kernel mit options COMCONSOLE. Erstellen Sie /boot.config mit als einzigem Text in der Datei. Ziehen Sie das Tastaturkabel aus dem Rechner. Lesen Sie /usr/src/sys/i386/boot/biosboot/README.serial zur Information. Soundkarten Welche Soundkarten werden von FreeBSD unterstützt? &os; unterstützt verschiedene Soundkarten wie &soundblaster;, &soundblaster; Pro, &soundblaster; 16, Pro Audio Spectrum 16, AdLib und Gravis UltraSound. Lesen Sie die &os; Release Informationen sowie &man.snd.4;, wenn Sie genauere Informationen benötigen. MPU-401 und kompatible MIDI-Karten werden begrenzt unterstützt. Ebenso unterstützt werden Karten, die der µsoft; Sound System-Spezifikation entsprechen. Das gilt nur für Sound! Dieser Treiber unterstützt keine CDROMs, SCSI oder Joysticks auf diesen Karten, außer der &soundblaster;. Die &soundblaster;-SCSI-Schnittstelle und einige Nicht-SCSI-CDROMs werden unterstützt, Sie können von diesen Geräten aber nicht booten. Abhilfen für fehlenden Sound bei Verwendung des &man.pcm.4;-Treibers? Einige Soundkarten, darunter solche mit es1370-Chip, setzen die Lautstärke bei jedem Systemstart auf 0. In diesem Fall müssen Sie nach jedem Bootvorgang den folgenden Befehl ausführen: &prompt.root; mixer pcm 100 vol 100 cd 100 Sonstige Hardware Welche Geräte werden noch von FreeBSD unterstützt? Im Handbuch finden Sie eine Liste von anderen unterstützten Geräten. Unterstützt FreeBSD Power-Management auf meinem Laptop? FreeBSD 4.X unterstützt APM auf einigen Systemen. Lesen Sie dazu auch &man.apm.4;. FreeBSD 5.X und neuer unterstützen einen Großteil der ACPI-Funktionen moderner Hardware. Lesen Sie dazu auch &man.acpi.4;. Unterstützt Ihr System sowohl APM als auch ACPI, können Sie beide Systeme testen und sich für das System entscheiden, das Ihren Anforderungen am besten entspricht. Wie kann ich ACPI deaktivieren? Fügen Sie die Zeile hint.acpi.0.disabled="1" in die Datei /boot/device.hints ein. Wieso hängt sich mein Micron-System beim Booten auf? Einige Micron Motherboards besitzen eine nicht-konforme PCI-BIOS-Implementierung. Sie bereitet Kummer, wenn FreeBSD bootet, weil PCI-Geräte nicht an der angegebenen Adresse konfiguriert werden. Deaktivieren Sie Plug and Play Operating System im BIOS, um dieses Problem zu beheben. Wenn ich ein System mit einem ASUS K7V Mainboard von der Bootdiskette starte, hängt sich das System auf. Wie kann ich dieses Problem lösen? Schalten Sie im BIOS die Option boot virus protection aus. Warum arbeitet meine &tm.3com; PCI-Netzwerkkarte in meinem Micron-Computer nicht? Einige Micron Motherboards besitzen eine nicht-konforme PCI-BIOS-Implementierung, die die PCI-Geräte nicht an den angegebenen Adressen konfiguriert. Hierdurch entstehen Probleme, wenn FreeBSD bootet. Deaktivieren Sie die Option Plug and Play Operating System im BIOS, um das Problem zu umgehen. Meine PCMCIA-Karte funktioniert nicht und ich erhalte die Meldung: cbb0: unsupported card type detected.. Was kann ich tun? Sie können die ursprüngliche OLDCARD-Implementierung verwenden. Dazu entfernen Sie die folgenden Zeilen aus Ihrer Kernelkonfigurationsdatei: device cbb device pccard device cardbus Danach fügen Sie die folgenden Zeilen ein: device pcic device card 1 Um die Änderungen zu aktivieren, müssen Sie den neuen Kernel noch wie im Abschnitt Konfiguration des FreeBSD-Kernels des Handbuchs beschrieben bauen und installieren. Fehlerbehebung Warum zeigt &os; eine falsche Speichergröße an? Das liegt an den Unterschieden zwischen physikalischen und virtuellen Speicheraddressen. Bei moderner PC-Hardware ist es üblich, den Speicherbereich zwischen 3,5 und 4 Gigabyte für spezielle Aufgaben (normalerweise für PCI) zu reservieren. Dieser Adressbereich wird dabei dazu verwendet, um auf PCI-Hardware zuzugreifen. Dadurch kann in diesem Speicherbereich kein physikalischer Speicher existieren. Was mit dem in diesen Bereich gehörenden physikalischen Speicher passiert, hängt von der von Ihnen eingesetzten Hardware ab. Unglücklicherweise gibt es noch immer Hardware, die hier gar nichts macht. In diesem Fall ist Ihr System nicht in der Lage, auf diese 500 Megabyte des RAMs zuzugreifen. Ein Großteil der heute existierenden Hardware ist aber inzwischen in der Lage, diesen Speicherbereich in einen höheren Speicherbereich umzulenken, damit Sie weiterhin darauf zugreifen können. Allerdings kann es durch dieses Umlenken zu verwirrende Meldungen während des Systemstarts kommen. Unter 32-Bit-Versionen von &os; scheint dieser Speicherbereich nicht verfügbar zu sein, da er in einen Bereich oberhalb von 4 Gigabyte übertragen wurde, auf den ein 32-Bit-Kernel allerdings nicht zugreifen kann. Ist dies bei Ihnen der Fall, müssen Sie die PAE-Unterstützung in Ihren Kernel kompilieren. Lesen Sie dazu auch den entsprechenden FAQ-Eintrag. Verwenden Sie hingegen eine 64-Bit-Version von &os; oder einen 32-Bit-Kernel mit aktivierter PAE-Unterstützung, ist &os; in der Lage, diesen Speicherbereich korrekt zu erkennen und umzulenken, damit Sie weiterhin darauf zugreifen können. Allerdings wird in diesem Fall beim Systemstart mehr Speicher angezeigt, als tatsächlich auf Ihrem System vorhanden ist. Dies ist aber normal und wird nach dem Ende des Systemstarts automatisch korrigiert. Was sollte ich tun, wenn auf meiner Festplatte fehlerhafte Blöcke sind? SCSI-Laufwerke sollten in der Lage sein, diese automatisch zu verlagern. Bei einigen Laufwerken ist diese Eigenschaft jedoch aus unerfindlichen Gründen bei der Auslieferung ausgeschaltet... Um sie einzuschalten, müssen Sie den Page-Mode des ersten Gerätes editieren. Unter FreeBSD können Sie das (als root) mit folgendem Befehl tun &prompt.root; camcontrol modepage sd0 -m 1 -e -P 3 und die Werte für AWRE und ARRE von 0 auf 1 ändern:- AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1 Moderne IDE-Controller sind in der Lage, fehlerhafte Blöcke automatisch zu verlagern. Diese Funktionen sind bereits ab Werk aktiviert. Werden dennoch fehlerhafte Blöcke gemeldet (egal auf welchem Laufwerk), sollten Sie über den Kauf einer neuen Platte nachdenken. Zwar könnte es Ihnen mit Diagnoseprogrammen des Plattenherstellers gelingen, diese fehlerhaften Blöcke zu sperren. Allerdings können Sie damit den endgültigen Ausfall der Platte bestenfalls hinauszögern. Wieso wird der SCSI-Controller meines HP Netserver nicht erkannt? Hierbei handelt es sich um ein bekanntes Problem. Der auf dem Board befindliche EISA-SCSI-Controller auf dem HP Netserver belegt die EISA-Slotnummer 11, wodurch sich alle wirklichen EISA-Slots vor ihm befinden. Leider kollidiert der Adressraum von EISA-Slots >=10 mit dem Adressraum, der PCI zugeordnet ist und die Autokonfiguration von FreeBSD kann mit dieser Situation derzeit nicht besonders gut umgehen. Die einfachste Alternative ist, diese Kollision einfach zu leugnen. Setzen Sie dazu die Kerneloption EISA_SLOTS auf den Wert 12. Konfigurieren und kompilieren Sie den Kernel, wie im Handbucheintrag zur Kernelkonfiguration beschrieben. Dies bringt Ihnen natürlich das klassische Huhn-Ei-Problem, wenn Sie auf einer solchen Maschine installieren wollen. Um dieses Problem zu umgehen, existiert ein spezieller Hack in UserConfig. Benutzen Sie nicht die visuelle Schnittstelle, sondern die rohe Kommandozeilenschnittstelle. Geben Sie einfach eisa 12 quit am Prompt ein und Sie können Ihr System ganz normal installieren. Sie sollten auf jeden Fall einen angepassten Kernel zu kompilieren und installieren. Zukünftige Versionen werden hoffentlich eine passende Lösung für dieses Problem beinhalten. Sie können keine dangerously dedicated Platte auf einem HP Netserver verwenden. Lesen Sie weitere Informationen finden Sie in diesem Hinweis. Was bedeuten die ständigen Meldungen ed1: timeout? Dies wird meistens durch einen Interruptkonflikt verursacht (z.B., wenn zwei Karten den selben Interrupt benutzen). Booten Sie mit der Option -c und ändern Sie die Einträge zu ed0/de0/... Ihrem Board entsprechend. Wenn Sie den BNC-Anschluss Ihrer Netzwerkkarte benutzen, könnte es auch sein, dass es sich Geräte-Timeouts aufgrund fehlerhafter Terminierung handelt. Um dies zu überprüfen, verbinden Sie einen Terminator direkt mit der Netzwerkkarte (ohne Kabel) und beobachten Sie, ob die Fehlermeldungen verschwinden. Einige NE2000 kompatible Karten melden diesen Fehler, wenn keine Verbindung am UTP-Eingang existiert oder wenn das Kabel nicht eingesteckt ist. Warum funktioniert meine &tm.3com; 3C509 plötzlich nicht mehr? Diese Karte ist dafür berüchtigt, ihre Konfiguration zu vergessen. Sie müssen die Karte mit dem DOS-Programm 3c5x9.exe neu konfigurieren. Mein an der parallel Schnittstelle angeschlossener Drucker ist unglaublich langsam. Was kann ich tun? Falls das einzige Problem ist, dass er schrecklich langsam ist, dann sollte Sie versuchen, die Kommunikationseinstellungen der parallelen Schnittstellen zu ändern, wie es im Kapitel Drucken des Handbuchs beschrieben ist. Wieso brechen meine Programme gelegentlich mit Signal 11-Fehlern ab? Das Signal 11 wird generiert, wenn ein Prozess versucht, auf Speicher zuzugreifen, obwohl er vom Betriebssystem dazu nicht befugt wurde. Wenn Ihnen das scheinbar zufällig immer wieder passiert, sollten Sie der Sache einmal auf der Grund gehen. Das Problem hat in der Regel eine der folgenden Ursachen: Wenn das Problem nur in einer bestimmten Anwendung auftritt, die Sie selbst entwickeln, dann ist es wahrscheinlich ein Fehler in Ihren Sourcen. Wenn das Problem in einem Teil von FreeBSD auftritt, könnte es natürlich auch ein Fehler sein; aber in den meisten Fällen werden diese Probleme gefunden und behoben, bevor die typischen Leser der FAQ (wir) diese Teile der Sourcen benutzen können (dafür gibt es schließlich -CURRENT). Wenn der Fehler auftritt, wenn Sie ein Programm compilieren aber dabei immer wieder an anderer Stelle auftritt, dann ist das ein ganz eindeutiger Hinweis, dass das Problem nicht bei FreeBSD liegt. Nehmen wir zum Beispiel an, dass Sie make buildworld ausführen und die Compilierung von ls.c in ls.o abbricht. Wenn Sie nochmal "make buildworld" durchführen und die Compilierung an der gleichen Stelle abbricht, handelt es sich um einen Fehler in den Sourcen. Aktualisieren Sie Ihre Sourcen und versuchen Sie es noch einmal. Wenn der Fehler jedoch an einer anderen Stelle auftritt, liegt das Problem mit an Sicherheit grenzender Wahrscheinlichkeit bei Ihrer Hardware. Was Sie tun sollten: Im ersten Fall können Sie einen Debugger wie z.B. gdb benutzen, um die Stelle im Programm zu finden, an der auf eine falsche Adresse zugegriffen wird und danach den Fehler beheben. Im zweiten Fall müssen Sie sicherstellen, dass das Problem nicht von Ihrer Hardware verursacht wird. Typische Ursachen dafür sind unter anderem: Es könnte sein, dass Ihren Festplatten zu warm werden: Überprüfen Sie, ob die Lüfter in Ihrem Gehäuse noch funktionieren, damit Ihre Festplatten (und andere Hardware) nicht heißlaufen. Der Prozessor überhitzt, weil Sie Ihn übertaktet haben oder der CPU-Kühler ausgefallen ist. Sie müssen sicherstellen, dass Sie Ihre Hardware unter den Bedingungen betreiben, für die sie spezifiziert ist, zumindestens während Sie versuchen, das Problem zu lösen. Mit anderen Worten: Betreiben Sie Ihre CPU mit der normalen Taktfrequenz. Wenn Sie übertakten, sollten Sie daran denken, dass ein langsames System deutlich billiger ist als ein defektes System. Die große Masse hat nicht sehr häufig Mitgefühl mit Problemen bei übertakteten System, auch wenn Sie es für ungefährlich halten. Unzuverlässiger Speicher: Wenn Sie mehr als ein SIMM/DIMM installiert haben, sollten Sie sie alle ausbauen und die Maschine testweise mit jedem SIMM oder DIMM einzeln betreiben. So können Sie feststellen, ob die Ursache ein einzelnes SIMM/DIMM oder auch eine Kombination von Modulen ist. Zu optimistische Einstellung des Mainboards: In Ihrem BIOS und mit den Jumpern auf dem Mainboard können Sie diverse Timings ändern. In den meisten Fällen reichen die Defaults aus, aber manchmal kann es durch zu wenig wait states, die Einstellung RAM Speed: Turbo oder ähnliches zu merkwürdigen Problemen kommen. Ein möglicher Ansatz ist, die BIOS defaults zu laden, allerdings könnte es sinnvoll sein, die aktuellen Einstellungen vorher zu notieren. Schlechte oder fehlerhafte Stromversorgung des Mainboards: Wenn Sie unbenutzte Steckkarten, Platten oder CDROMs in Ihrem System haben, sollten Sie sie testweise ausbauen oder die Stromversorgung abziehen. Dadurch können Sie prüfen, ob Ihr Netzteil eventuell mit einer geringeren Last besser zurechtkommt. Sie können auch testweise ein anderes, am besten ein leistungsfähigeres, Netzteil ausprobieren. Wenn Sie zurzeit ein 250W-Netzteil benutzen, sollten Sie testweise ein 300W-Netzteil einbauen. Die sollten ebenfalls die SIG11 FAQ (unten aufgeführt) lesen, da sie gute Erklärungen für alle diese Probleme enthält (allerdings aus &linux;-Sicht). Sie erklärt ebenfalls, warum sowohl Programme als auch Geräte zur Speicherprüfung fehlerhaften Speicher teilweise nicht erkennen. Wenn alle diese Schritte nicht helfen, ist es möglich, dass Sie einen Fehler in FreeBSD gefunden haben. Folgen Sie einfach den Anweisungen für die Erstellung eines Problem Reports. Es existiert eine ausführliche FAQ hierzu unter der SIG11-Problem-FAQ Mein System stürzt mit der Meldung Fatal trap 12: page fault in kernel mode oder panic: ab und gibt eine Menge zusätzlicher Informationen aus. Was kann ich tun? Die Entwickler von FreeBSD interessieren sich für solchen Meldungen, allerdings brauchen Sie deutlich mehr Informationen als die, die Ihnen angezeigt werden. Kopieren Sie die komplette Meldungen und lesen Sie nun den FAQ-Eintrag über kernel panics. Erzeugen sie einen Kernel mit den zusätzlichen Daten zur Fehlersuche, und dann einen backtrace. Das hört sich komplizierter an, als es ist. Sie brauchen keine Programmier-Erfahrung, Sie müssen einfach nur den Anweisungen folgen. Wieso wird beim Booten der Bildschirm schwarz und reagiert nicht mehr? Dies ist ein bekanntes Problem mit der ATI Mach 64 Videokarte. Das Problem besteht darin, dass diese Karte die Adresse 2e8 benutzt und die vierte serielle Schnittstelle ebenfalls. Aufgrund eines Fehlers (einer Besonderheit?) im &man.sio.4;-Treiber wird diese Schnittstelle angesprochen, auch wenn Sie gar keine vierte serielle Schnittstelle besitzen und sogar, wenn sie sio3 (die vierte Schnittstelle), die normalerweise diese Adresse verwendet, deaktivieren. Bis der Fehler behoben ist, können Sie folgende Abhilfe verwenden: Geben Sie am Bootprompt ein. (Dies bringt den Kernel in den Konfigurationsmodus). Deaktivieren Sie sio0, sio1, sio2 und sio3 (alle). Auf diese Weise wird der sio-Treiber nicht aktiviert und das Problem tritt nicht mehr auf. Geben Sie exit ein, um den Bootvorgang fortzusetzen. Falls sie in der Lage sein wollen Ihre seriellen Schnittstellen zu benutzen, müssen Sie einen neuen Kernel mit folgenden Modifikationen erstellen: suchen Sie in /usr/src/sys/i386/isa/sio.c nach der Zeichenkette 0x2e8 und löschen Sie sie und das vorhergehende Komma (nicht das folgende Komma). Nun folgen Sie der normalen Prozedur zur Erstellung eines neuen Kernels. Auch nach Anwendung dieser Maßnahmen könnte es sein, dass Ihr X Windows-System nicht einwandfrei funktioniert. Wenn dies der Fall ist, stellen Sie sicher, dass es sich bei der von Ihnen benutzten X Windows-Version mindestens um &xfree86; 3.3.3 oder höher handelt. Diese Version und höhere besitzen eine integrierte Unterstützung für Mach64-Karten und sogar einen dedizierten X-Server für sie. Wieso verwendet FreeBSD nur 64 MB Hauptspeicher, obwohl in meinem Rechner 128 MB sind? Aufgrund der Art und Weise, wie FreeBSD die Hauptspeichergröße vom BIOS mitgeteilt bekommt, kann es lediglich 16-Bit Werte in kByte-Größe (65535 kByte = 64MB) erkennen (oder weniger... einige BIOSe setzen die Hauptspeichergröße auf 16MB). Falls Sie mehr als 64MB besitzen, wird FreeBSD versuchen, das zu erkennen, was aber nicht immer funktioniert. Um dieses Problem zu umgehen, müssen Sie die untenstehende Kerneloption verwenden. Es gibt einen Weg, vollständige Hauptspeicherinformationen vom BIOS zu erhalten, aber in den Bootblöcken ist nicht genügend Platz dafür vorhanden. Wenn der Platzmangel in den Bootblöcken eins Tages behoben ist, werden wir die erweiterten BIOS-Funktionen dazu nutzen, die vollständigen Hauptspeicherinformationen zu erhalten... aber zurzeit sind wir auf die Kerneloption angewiesen. options "MAXMEM=n" Hierbei ist n Ihre Hauptspeichergröße in Kilobyte. Bei einer 128 MB-Maschine müßten Sie 131072 benutzen. Ich habe mehr als 1 GB RAM. Trotzdem stürzt mein System mit der Meldung kmem_map too small ab. Was läuft hier schief? Im Normalfall bestimmt FreeBSD einige Kernelparameter, darunter die maximale Anzahl der Dateien, die gleichzeitig geöffnet sein können, aus der Größe des im System installierten Hauptspeichers. Auf Systemen mit mindestens 1 GB Hauptspeicher kann dieser auto sizing-Mechanismus diese Werte fälschlicherweise zu hoch ansetzen: Beim Systemstart fordert der Kernel dann verschiedene Tabellen und andere Strukturen an, die den Großteil des verfügbaren Kernelspeichers verbrauchen. Dies führt dazu, dass der Kernel während des Betriebs keine dynamischen Speicheranforderungen mehr ausführen kann und mit einer Kernelpanik abstürzt. Bauen Sie in diesem Fall Ihren eigenen Kernel. Dazu setzen Sie in Ihrer Kernelkonfigurationsdatei auf 400 MB (). 400 MB sollten für Maschinen bis 6 GB Hauptspeicher ausreichend sein. Ich habe weniger als 1 GB Hauptspeicher. Dennoch stürzt mein System mit der Meldung kmem_map too small! ab? Diese Meldung zeigt an, dass der virtuelle Speicher für Netzwerkpuffer (spezieller mbuf-Cluster) aufgebraucht ist. Sie können die für mbuf verfügbare Größe an VM erhöhen, indem Sie den Anweisungen des Abschnitts Netzwerk-Limits des Handbuchs folgen. Wieso erhalte ich die Meldung /kernel: proc: table is full? Der FreeBSD-Kernel beschränkt die Anzahl der gleichzeitig laufenden Prozesse. Die Anzahl errechnet sich aus dem Wert der Variablen MAXUSERS in der Konfigurationsdatei des Kernels. Auch andere Einstellungen wie die Anzahl der Puffer für Netzwerkoperationen (Details dazu finden Sie in diesem Abschnitt). werden durch MAXUSERS beeinflusst. Wenn Ihr System stark belastet ist, sollten Sie den Wert von MAXUSERS erhöhen. Dadurch werden diverse Einstellung des Systems angepasst und die maximale Anzahl gleichzeitig laufender Prozesse erhöht. Um den Wert von MAXUSERS anzupassen, folgen Sie den Anweisungen des Abschnitts Datei- und Prozesslimits des Handbuchs. Dieser Abschnitt spricht zwar nur von Dateien, für Prozesse gelten aber die gleichen Beschränkungen. Wenn Ihr System nicht besonders stark ausgelastet ist und Sie einfach nur mehr gleichzeitig laufende Prozesse erlauben wollen, können Sie den Wert der Variable kern.maxproc in der Datei /boot/loader.conf anpassen. Um die Änderung zu aktivieren, müssen Sie Ihr System neu starten. Wollen Sie Ihr System zusätzlich optimieren, sollten Sie &man.loader.conf.5; und &man.sysctl.conf.5; lesen. Wenn diese Prozesse von einem einzigen Benutzer ausgeführt werden, müssen Sie den Wert von kern.maxprocperuid ebenfalls erhöhen. Dieser Wert muss immer mindestens um eins geringer sein als der Wert von kern.maxproc value. (Der Grund für diese Einschränkung ist, dass ein Systemprogramm, &man.init.8;, immer ausgeführt werden muss.) Damit Änderungen einer sysctl-Variable dauerhaft erhalten bleiben, nehmen Sie diese in /etc/sysctl.conf auf. Weitere Informationen zur Optimierung Ihres Systems finden Sie im Abschnitt Einstellungen mit sysctl des Handbuchs. Wieso erhalte ich die Meldung CMAP busy panic, wenn ich mein System mit einem neuen Kernel starte? Die Logik, die versucht, veraltete /var/db/kvm_*.db-Dateien zu erkennen, versagt manchmal und die Benutzung einer unpassenden Datei kann zu Paniksituationen führen. Falls das passiert, rebooten Sie im Single-User-Modus und löschen Sie die Dateien: &prompt.root; rm /var/db/kvm_*.db Was soll mir die Meldung ahc0: brkadrint, Illegal Host Access at seqaddr 0x0 sagen? Dies ist ein Konflikt mit einem Ultrastor SCSI Hostadapter. Rufen Sie während des Bootprozesses das Kernelkonfigurationsmenü auf und deaktivieren Sie uha0, welches das Problem verursacht. Wenn ich mein System starte, erhalte ich die Meldung ahc0: illegal cable configuration, obwohl die Verkabelung korrekt ist. Woran liegt das? Auf Ihrem Mainboard fehlen ein paar Logikbausteinen, die für die Unterstützung der automatischen Terminierung notwendig sind. Stellen Sie in Ihrem SCSI-BIOS manuell die korrekte Terminierung für Ihr System ein, anstatt sich auf die automatische Terminierung zu verlassen. Der Treiber für den AIC7XXX kann nicht erkennen, ob die externen Logikbausteine für die Erkennung der Kabel (und damit automatische Terminierung) vorhanden sind. Der Treiber muss sich darauf verlassen, dass diese vorhanden sind, wenn in der Konfiguration automatische Terminierung eingestellt ist. Ohne die externen Bausteine ist es sehr wahrscheinlich, dass der Treiber die Terminierung falsch einstellt, was die Zuverlässigkeit des SCSI-Busses herabsetzen kann. Wieso meldet Sendmail mail loops back to myself? Dies wird in der Sendmail-FAQ wie folgt beantwortet:- * Ich erhalte "Local configuration error" Meldungen, wie: 553 relay.domain.net config error: mail loops back to myself 554 <user@domain.net>... Local configuration error Wie kann ich dieses Problem lösen? Sie haben durch die Benutzung einer MX-Zeile eingestellt, dass Mail für die Domäne (z.B. domain.net) an einen speziellen Host (in diesem Fall relay.domain.net) weitergeleitet wird, aber der Relay-Host erkennt sich selbst nicht als domain.net. Fügen Sie domain.net in /etc/mail/local-host-names (falls Sie FEATURE(use_cw_file) benutzen) oder "Cw domain.net" in /etc/mail/sendmail.cf ein. Die aktuelle Version der Sendmail-FAQ wird nicht mehr mit dem Sendmail-Release verwaltet. Sie wird jedoch regelmäßig nach comp.mail.sendmail, comp.mail.misc, comp.mail.smail, comp.answers und news.answers gepostet. Sie können auch eine Kopie per E-Mail bekommen, indem Sie eine Mail mit dem Inhalt send usenet/news.answers/mail/sendmail-faq an mail-server@rtfm.mit.edu schicken. Wieso funktionieren bildschirmorientierte Anwendungen beim Zugriff über ein Netzwerk nicht richtig? Die entfernte Maschine scheint den Terminaltyp auf etwas anderes als den Typ cons25, der von FreeBSD verlangt wird, zu setzen. Es gibt mehrere mögliche Abhilfen für dieses Problem: Setzen Sie die Shell-Variable TERM nach dem Einloggen auf der entfernten Maschine auf ansi oder sco, sofern die entfernte Maschine diese Terminaltypen kennt. Benutzen Sie einen VT100-Emulator wie screen auf der FreeBSD-Console. screen bietet Ihnen die Möglichkeit, mehrere gleichzeitige Sitzungen von einem Bildschirm aus laufen zu lassen. Es ist ein sehr nettes Programm. Jedes screen-Fenster verhält sich, wie ein VT100-Terminal, weshalb die Variable TERM am entfernten Ende auf vt100 gesetzt werden sollte. Installieren Sie den Eintrag cons25 in der Bildschirmdatenbank der entfernten Maschine. Wie das zu geschehen hat, hängt vom Betriebssystem der entfernten Maschine ab. Das Systemadministrationshandbuch für das entfernte System sollte Ihnen hierbei helfen können. Starten Sie einen X-Server auf der FreeBSD-Seite und benutzen Sie einen X-basierten Terminalemulator wie xterm oder rxvt, um sich auf der entfernten Maschine einzuloggen. Die Variable TERM auf dem entfernten Host sollte auf xterm oder vt100 gesetzt werden. Wieso meldet mein Rechner calcru: negative time...? Dies kann durch verschiedene Hardware- oder Softwareprobleme in Verbindung mit Interrupts verursacht werden. Das kann aufgrund von Fehlern sein, aber es kann auch durch die Eigenarten bestimmter Geräte passieren. TCP/IP über die parallele Schnittstelle mit einer großen MTU laufen zu lassen, ist ein sicherer Weg, um dieses Problem hervorzurufen. Grafikbeschleuniger können es auch verursachen. In diesem Fall sollten Sie zunächst die Interrupteinstellungen der Karte überprüfen. Ein Seiteneffekt dieses Problems sind Prozesse, die mit der Meldung SIGXCPU exceeded cpu time limit abbrechen. Falls das Problem nicht anders gelöst werden kann, besteht die Lösung darin, diese sysctl-Variable zu setzen: &prompt.root; sysctl -w kern.timecounter.method=1 Die Option von &man.sysctl.8; sollte nicht mehr benutzt werden. Ab FreeBSD 4.4 wird die Option ignoriert. Sie können die Option auch weglassen, wenn Sie mit sysctl Variablen setzen. Das bedeutet zwar Performanceeinbußen, aber in Anbetracht der Ursache für dieses Problem werden Sie das wahrscheinlich nicht bemerken. Fall das Problem weiter bestehen bleibt, lassen sie die sysctl-Variable auf 1 stehen und setzen Sie die Option NTIMECOUNTER im Kernel auf immer höhere Werte. Wenn Sie irgendwann NTIMECOUNTER=20 erreicht haben sollten, ist das Problem nicht gelöst. Die Interrupts auf Ihrer Maschine sind für eine verlässliche Zeiterhaltung nicht zu gebrauchen. Warum wird meine PnP-Karte nicht mehr (oder nur noch als unknown) erkannt, seit ich FreeBSD 4.X benutze? FreeBSD 4.X ist deutlich PnP-orientierter und das führt leider dazu, dass einige PnP-Geräte (wie z.B. Soundkarten und interne Modems) nicht mehr funktionieren, obwohl Sie von FreeBSD 3.X noch erkannt wurden. Die Gründe für dieses Verhalten werden in der unten zitierten Mail von Mail von Peter Wemm erklärt. Diese Mail stammt von der Mailingliste freebsd-questions und war eine Antwort auf eine Frage bezüglich eines internen Modem, das nach dem Update auf FreeBSD 4.X nicht mehr erkannt wurde. Die mit [] gekennzeichneten Kommentare wurden eingefügt, um an einigen Stellen die Bezüge klarstellen.
Das PnP-BIOS hat es [das Modem] vorkonfiguriert und es dann im Adressraum liegenlassen, daher haben es die alten ISA-Erkennungsroutinen [in 3.X] gefunden. In 4.0 sind die ISA-Routinen deutlich PnP-orientierter. Es war möglich [in 3.X], dass eine ISA-Erkennungsroutinen ein zugelaufenes Gerät fand; während die PnP-Treiber zwar die ID erkannten, das Gerät aber wegen des Ressourcekonfliktes nicht benutzen konnten. Daher werden die programmierbaren Karten zunächst einmal abgeschaltet, um diese doppelte Erkennung vermeiden zu können. Das bedeutet allerdings auch, dass die Treiber die PnP-ID kennen muss, um PnP-Hardware unterstützen zu können. Wir haben uns vorgenommen, den Benutzern eine einfachere Möglichkeit zur Manipulation dieser Informationen zur Verfügung zu stellen.
Damit Ihr Gerät wieder funktioniert, müssen Sie seine PnP-ID herausfinden und die ID in die Listen eintragen, die zur Erkennung von PnP-Geräten genutzten werden. Zu diesem Zweck wird das Gerät mit &man.pnpinfo.8; analysiert. Das Beispiel zeigt die Ausgaben von &man.pnpinfo.8; für ein internes Modem: &prompt.root; pnpinfo Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 0 Device Description: Pace 56 Voice Internal Plug & Play Modem Logical Device ID: PMC2430 0x3024a341 #0 Device supports I/O Range Check TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 4 - only one type (true/edge) [weitere TAG Zeilen gestrichen] TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01 Sie benötigen die Information aus der Zeile Vendor ID ganz im Anfang. Die in Klammern ausgegebene hexadezimale Zahl (0x3024a341 in diesem Beispiel) ist die PnP ID und die unmittelbar davor stehende Zeichenkette (PMC2430) ist eine eindeutige Herstellerkennung. Benutzen Sie &man.pciconf.8; wenn &man.pnpinfo.8; die Karte nicht anzeigt. Der Teil der Ausgabe von pciconf -vl für eine auf dem Motherboard integrierte Soundkarte sieht zum Beispiel so aus: &prompt.root; pciconf -vl chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82801AA 8xx Chipset AC'97 Audio Controller' class = multimedia subclass = audio Sie benötigen die Chip-ID 0x24158086, die hinter chip aufgeführt ist. Die Herstellerkennung oder die Chip-ID müssen in die Datei /usr/src/sys/isa/sio.c eingetragen werden. Sie sollten zunächst ein Backup von sio.c anlegen, falls etwas schief gehen sollte. Sie werden auch einen Patch erzeugen müssen, um ihn zusammen mit Ihrem PR einzusenden. (Sie wollten doch einen PR schreiben, oder etwa nicht?) Öffnen Sie nun sio.c mit einem Editor und suchen Sie nach der Zeile static struct isa_pnp_id sio_ids[] = { und blättern Sie dann nach unten, um die passende Stelle für Ihr Gerät zu finden. Unten finden Sie Beispiel für die Einträge, diese sind nach der Herstellerkennung sortiert. Diese sollte in dem Kommentar auf der rechten Seite aufgenommen werden, dazu kommt die Gerätebeschreibung (Device Description) aus der Ausgabe von &man.pnpinfo.8;: {0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */ Fügen Sie die hexadezimale Gerätekennung an der richtigen Stelle ein, speichern Sie die Datei ab, erzeugen Sie einen neuen Kernel und starten Sie Ihr System neu. Ihr Gerät sollte nun wie bei FreeBSD 3.X als sio Gerät erkannt werden.
Warum erhalte ich die Meldung nlist failed, wenn ich Programme wie top oder systat benutze? Das Programm sucht nach einem speziellen Symbol im Kernel, kann es aber aus irgendeinem Grunde nicht finden. Dieser Fehler wird von einem dieser Probleme verursacht: Ihr Kernel und die sonstigen Programme (das Userland) sind nicht mehr auf dem gleichen Stand. Mit anderen Worten, Sie haben zwar einen neuen Kernel erzeugt, aber kein installworld (oder umgekehrt); darum weicht die Symboltabelle von dem ab, was die Anwendung erwartet. Wenn dies der Fall ist, müssen Sie lediglich die noch fehlenden Schritte des Upgrades durchführen. Die richtige Vorgehensweise kann /usr/src/UPDATING entnommen werden. Um Ihren Kernel zu laden, benutzen Sie nicht /boot/loader, sondern laden ihn direkt mit boot2 (siehe &man.boot.8;). Es ist zwar nicht immer ein Fehler, /boot/loader zu umgehen; allerdings ist er in der Regel besser dazu geeignet, die Symbole des Kernels für normale Anwendungen verfügbar zu machen. Wieso dauert es so lange, bis eine Verbindung (&man.ssh.1; oder &man.telnet.1;) aufgebaut wird? Das Symptom: Nach dem Aufbau des TCP-Verbindung vergeht einige Zeit, bis endlich die Abfrage des Passwortes (bzw. der Login-Prompt bei Telnet) erscheint. Das Problem: In den meisten Fällen versucht der Server in der Zwischenzeit, die IP-Adresse des Clients in einen Rechnernamen zu übersetzen. Viele Server (darunter die Telnet und SSH Server von FreeBSD) machen das, um den Hostnamen z.B. für spätere Verwendung durch den Systemadministrator in eine Protokolldatei schreiben zu können. Die Lösung: wenn das Problem bei jedem Server auftritt, den Sie von Ihrem Computer (dem Client) ansprechen, dann wird das Problem vom Client verursacht. Wenn das Problem aber nur auftritt, wenn jemand Ihren Rechner (den Server) anspricht, dann liegt die Ursache beim Server. Wenn das Problem vom Client verursacht wird, müsssen Sie die Einträge im DNS korrigieren, damit der Server Ihre IP-Adresse übersetzen kann. Wenn das Problem in Ihrem lokalen Netzwerk auftritt, sollten Sie es als Problem des Servers behandeln und weiterlesen; wenn es allerdings im Internet auftritt, werden Sie sich wahrscheinlich an Ihrem ISP wenden müssen, damit dieser das Problem für Sie korrigiert. Wenn das Problem vom Server verursacht wird und Sie sich in einem lokalen Netzwerk befinden, dann müssen Sie Ihren Server so konfigurieren, dass er die lokal genutzten IP-Adressen in Rechnernamen übersetzen kann. Weitere Informationen erhalten Sie in den Onlinehilfen zu &man.hosts.5; und &man.named.8;. Wenn dieses Problem im Internet auftritt, könnte die Ursache auch darin liegen, dass die Namensauflösung auf dem Server nicht funktioniert. Versuchen Sie, einen anderen Hostnamen wie z.B. www.yahoo.com aufzulösen. Wenn das nicht funktioniert, liegt das Problem bei Ihrem System. Haben Sie &os; gerade erst installiert, kann es auch sein, dass die Domänen- und Nameserverinformationen noch nicht in /etc/resolv.conf vorhanden sind. Dadurch kommt es häufig zu Verzögerungen beim Einsatz von SSH, weil die Option UseDNS in der Voreinstellung auf yes gesetzt ist (in der Datei sshd_config im Verzeichnis /etc/ssh). Ist dies bei Ihnen der Fall, müssen Sie entweder die fehlenden Informationen in /etc/resolv.conf eintragen oder als temporäre Maßnahme UseDNS auf no setzen. Was bedeutet stray IRQ? Stray IRQs sind ein Zeichen für Probleme bei der Behandlung von Hardware-IRQs. Sie werden meistens von Geräten verursacht, die ihren Interrupt Request zurückziehen, obwohl gerade der interrupt request acknowledge-Zyklus läuft. Sie können drei Dinge tun: Ertragen Sie die Warnungen. Sie erhalten nur die ersten 5 für jeden IRQ, alle anderen werden unterdrückt. Eliminieren Sie die Meldungen, indem Sie in isa_strayintr() den Wert 5 auf 0 ändern, um alle Meldungen zu unterdrücken. Eliminieren Sie die Meldungen, indem Sie Hardware für den Parallelport installieren, die IRQ 7 nutzt und vom PPP Treiber verwendet wird (das passiert auf den meisten Systemen), und installieren Sie eine IDE-Platte oder andere Hardware sowie einen dazu passenden Treiber, um IRQ 15 zu nutzen. Warum sehe ich in der Ausgabe von dmesg häufig die Meldung file: table is full? Diese Fehlermeldung besagt, dass Sie die zur Verfügung stehenden File-Handles des Systems verbraucht haben. Was das genau bedeutet und wie Sie dieses Problem lösen können, steht im Abschnitt kern.maxfiles im Kapitel Anpassung der Kernelkonfiguration des Handbuchs. Warum ist die Uhrzeit auf meinem Laptop immer falsch? Ihr Laptop verfügt über mehr als eine Uhr und FreeBSD benutzt leider die falsche. Starten Sie &man.dmesg.8; und achten Sie auf die Zeilen, in denen das Wort Timecounter vorkommt. Die von FreeBSD benutzte Uhr steht in der letzten Zeile, mit an Sicherheit grenzender Wahrscheinlichkeit wird es TSC sein. &prompt.root; dmesg | grep Timecounter Timecounter "i8254" frequency 1193182 Hz Timecounter "TSC" frequency 595573479 Hz Sie können das überprüfen, indem Sie den Wert der Systemvariablen kern.timecounter.hardware abfragen. &prompt.root; sysctl kern.timecounter.hardware kern.timecounter.hardware: TSC Es ist durchaus möglich, dass das BIOS die TSC Uhr ändert, um beispielsweise den CPU-Takt zu während des Batteriebetrieb zu ändern, oder im Stromsparmodus; leider bemerkt FreeBSD diese Änderungen nicht und daher scheint die Uhr falsch zu gehen. In diesem Beispiel ist die Uhr i8254 ebenfalls verfügbar; um sie auszuwählen, muss ihr Name in die Systemvariable kern.timecounter.hardware geschrieben werden. &prompt.root; sysctl -w kern.timecounter.hardware=i8254 kern.timecounter.hardware: TSC -> i8254 Die Uhrzeit Ihres Laptops sollte nun genauer funktionieren. Damit diese Änderung automatisch beim Start des Systems durchgeführt wird, müssen Sie die folgende Zeile in die /etc/sysctl.conf eintragen. kern.timecounter.hardware=i8254 Warum erkennt mein Laptop PC-Cards nicht? Dieses Problem tritt häufig auf Laptops mit mehreren Betriebssystemen auf. Einige nicht-BSD Betriebssysteme lassen die Hardware in einem inkonsistenten Zustand. Die Karte wird dann von pccardd als "(null)""(null)" anstelle des tatsächlichen Modells gefunden. Um dies zu beheben, müssen Sie die Hardware zurücksetzen, das heißt der PC-Card Einschub muss stromlos sein. Gehen Sie dazu nicht in den Standby- oder Suspend-Modus und stellen Sie sicher, dass der Laptop wirklich ausgeschaltet ist. Warten Sie einen Moment und booten dann, Ihre PC-Card sollte jetzt funktionieren. Einige Laptops schalten sich nicht wirklich aus. Wenn der obige Vorschlag nichts genutzt hat, entfernen Sie bitte die Batterie, warten einen Moment und booten erneut. Wieso hängt sich FreeBSD nach dem BIOS-Bildschirm mit der Meldung Read error auf? Der Bootloader von FreeBSD erkennt die Geometrie Ihrer Festplatte nicht richtig. Sie müssen die Geometrie manuell festlegen, wenn sie mit fdisk FreeBSD-Bereiche erzeugen oder ändern. Die richtigen Werte für die Geometrie können Sie im BIOS des Rechners ablesen. Achten Sie auf die Anzahl der Zylinder, Köpfe und Sektoren für Ihre Festplatte. Im fdisk von &man.sysinstall.8; müssen Sie G eingeben, um die Geometrie zu definieren. Sie erhalten eine Dialogbox, in der Sie die Anzahl der Zylinder, Köpfe und Sektoren eingeben können. Verwenden Sie die Angaben des BIOS und setzen Sie Schrägstriche zwischen die Zahlen. 5000 Zylinder, 250 Köpfe und 60 Sektoren würden also als 5000/250/60 eingegeben. Schließen Sie die Eingabe mit Enter ab und drücken Sie W, um die neue Partitionstabelle auf die Festplatte schreiben zu lassen. Ein anderes Betriebssystem hat meinen Bootmanager zerstört. Wie kann ich ihn wiederherstellen? Starten Sie &man.sysinstall.8; und wählen Sie Configure, dann Fdisk. Wählen Sie die Platte, auf der sich der Boot Manager befand, mit der Leertaste aus. Drücken Sie W, um die Änderungen auf die Platten schreiben zu lassen. Nun erscheint eine Abfrage, welcher Bootmanager installiert werden soll. Wählen Sie diesen an und er wird wieder installiert. Was soll mir die Meldung swap_pager: indefinite wait buffer: sagen? Ein Programm wollte Speicher auf Platte auslagern, und dieser Vorgang konnte nicht innerhalb von 20 Sekunden durchgeführt werden. Mögliche Gründe sind defekte Blöcke auf der Platte, falsche oder fehlerhafte Verkabelung sowie Probleme mit anderen Komponenten, die am Zugriff auf die Festplatte beteiligt sind. Wenn die Festplatte selbst fehlerhaft sind, sollten Sie entsprechende Meldungen in /var/log/messages und den Ausgaben von dmesg finden. Andernfalls sollten Sie die Kabel und Verbindungen überprüfen. Was sind UDMA ICRC Fehler und wie behebe ich sie? Der &man.ata.4;-Treiber meldet UDMA ICRC Fehler wenn eine DMA-Übertragung zu oder von einem Laufwerk fehlgeschlagen ist. Der Treiber versucht die Übertragung mehrmals durchzuführen und schaltet, wenn die Versuche fehlschlagen, vom DMA-Modus auf den langsameren PIO-Modus um. Der Fehler kann viele Ursachen haben, häufig ist ein Kabel kaputt oder die Geräte sind falsch verkabelt. Prüfen Sie, ob die ATA-Kabel unbeschädigt sind und für den verwendeten Ultra-DMA-Modus tauglich sind. Ebenso müssen Wechselrahmen für den verwendeten Modus geeignet sein. Stellen Sie sicher, dass alle Kabel fest angeschlossen sind. Es gab auch schon Probleme, wenn ein altes Laufwerk zusammen mit einem Ultra-DMA-66 oder einem schnelleren Laufwerk auf einem Kanal betrieben wurde. Es kann aber auch sein, dass das Laufwerk kaputt ist. Die meisten Hersteller stellen Test-Programme für ihre Laufwerke zur Verfügung. Überprüfen Sie damit Ihr Laufwerk und wenn nötig, sichern Sie Ihre Daten und ersetzen das Laufwerk. &man.atacontrol.8; zeigt für jedes ATA-Gerät den verwendeten DMA- oder PIO-Modus an. Das Kommando atacontrol mode Kanal zeigt die auf einem Kanal verwendeten Modi (die Kanäle werden von 0 an nummeriert). Was ist ein lock order reversal? &a.rwatson; hat diese Frage auf der Mailingliste freebsd-current ausführlich beantwortet. Das Original seiner Antwort finden Sie über den Thread lock order reversals - what do they mean?.
&a.rwatson; am 14. Dezember 2003 auf freebsd-current Diese Warnungen werden von Witness, einem Diagnosesystem, das Verklemmungen (deadlocks) zur Laufzeit erkennen kann, ausgegeben. Dieses System ist in FreeBSD -CURRENT-Kerneln vorhanden (aber nicht in Release-Kerneln) und wird in &man.witness.4; beschrieben. Unter anderem ist Witness in der Lage, die korrekte Reihenfolge von bekannten sowie zur Laufzeit entdeckten Ressource-Locks zu überprüfen, und eine Warnung auszugeben, wenn diese Reihenfolge verletzt wird. Dadurch wird es möglich, potentielle Verklemmungen (deadlocks) zu entdecken. Beachten Sie, dass Witness sehr vorsichtig ist und daher Falschmeldungen ausgeben kann. Falls Witness ein Verklemmungsproblem meldet, bedeutet dies: Wenn Sie Pech gehabt hätten, wäre es jetzt zu einer Verklemmung gekommen. Es sind einige falsch positive Meldungen bekannt, die noch besser dokumentiert werden müssten, um unnötige Problemmeldungen zu vermeiden. Neu auftretende Meldungen beruhen in der Regel auf Bugs in neu hinzugefügten Ressource-Locks, und werden meist rasch behoben, weil Witness laufend Fehlermeldungen produziert. :-).
"Falsch-positiv"-Meldungen bedeuten, dass Witness auf ein sehr viel ernsteres Problem gestoßen ist. Ursachen für eine derartige Meldung können beispielsweise Seitenfehler (page faults) oder eine Speicherverletzung innerhalb des Kernels sein, aber auch Namenskollisionen mit einem Mutex. Lesen Sie auch die lock order reversal page von Bjoern Zeeb, um sich über den Status bekannter lock order reversals zu informieren.
Warum erhalte ich die Meldung Called ... with the following non-sleepable locks held? Diese Meldung erscheint, wenn eine Funktion, die sich im Ruhemodus befindet, aufgerufen wird, während ein Mutex oder eine andere (nicht in den Ruhemodus versetzbare) Sperre aktiv war. Der Grund dafür ist, dass ein Mutex nicht für längere Zeitspannen aktiv sein soll, sondern nur für die Synchronisation von Gerätetreibern mit dem Rest des Kernels während eines Interrupts. Unter FreeBSD dürfen Interrupts nicht in den Ruhemodus versetzt werden. Daher ist es von entscheidender Bedeutung, dass während des Bestehens eines Mutex kein Kernelsubsystem für einen längeren Zeitraum blockiert ist. Um solche Fehler abzufangen, können Sicherungen (Assertions) in den Kernel eingebaut werden, die danach mit dem Witness-Subsystem interagieren. Dadurch wird (in Abhängigkeit von Ihrer Systemkonfiguration) eine Warnung oder eine Fehlermeldung ausgegeben, falls der Aufruf einer Funktion während des Bestehens eines Mutex zu einer Blockierung führen kann. Zusammenfassend kann man sagen, dass diese Warnungen in der Regel zwar nicht bedrohlich sind. Unter bestimmten Umständen kann es aber dennoch zu unerwünschten Nebenwirkungen, angefangen von einer Erhöhung der Reaktionszeit bis hin zu einem kompletten Einfrieren des Systems kommen. Warum bricht buildworld/installworld mit der Meldung touch: not found ab? Dieser Fehler bedeutet nicht, dass &man.touch.1; nicht auf Ihrem System vorhanden ist. Vielmehr sind Dateien die Ursache, deren Erzeugungsdatum in der Zukunft liegt. Wenn Ihre CMOS-Uhr auf Ihre lokale Zeit eingestellt ist, müssen Sie adjkerntz -i verwenden, um die Kerneluhr anzupassen, wenn Sie in den Single-User-Modus booten.
Kommerzielle Anwendungen Dieser Abschnitt ist immer noch sehr dürftig, aber wir hoffen natürlich, dass Unternehmen einen Beitrag leisten werden! :) Die FreeBSD-Gruppe hat keinerlei finanzielle Interessen an einem der hier aufgelisteten Unternehmen, sondern listet sie lediglich als öffentlichen Service auf (und ist der Meinung, dass ein kommerzielles Interesse an FreeBSD sehr positiven Einfluss auf ein langfristiges Bestehen von FreeBSD haben kann). Wir möchten Anbieter kommerzieller Software dazu aufrufen, ihren Eintrag hier aufnehmen zu lassen. Auf der Anbieter-Seite finden Sie eine längere Liste. Wo bekomme ich FreeBSD-Versionen der klassischen Büro-Anwendungen? Das als Open Source verfügbare Office-Paket OpenOffice.org läuft nativ unter FreeBSD. Die um zusätzliche Funktionen erweiterte kommerzielle OpenOffice.org-Version StarOffice läuft in der &linux;-Version ebenfalls problemlos unter FreeBSD. In der Ports-Sammlung sind weitere Textbearbeitungsprogramme, Tabellenkalkulationen und Zeichenprogramme enthalten. Woher kann ich &motif; für FreeBSD bekommen? Der Quelltext für &motif; 2.2.2 wurde von der Open Group herausgegeben. Sie können entweder das Package open-motif installieren oder es mit dem entsprechenden Port selbst compilieren. Weitere Informationen über die Benutzung der Ports erhalten Sie im Kapitel Ports des Handbuchs. Die Open &motif; Distribution darf nur weitergegeben werden, wenn sie auf einem Open Source Betriebssystem benutzt wird. Weiterhin gibt es auch kommerzielle &motif;-Paket, die zwar nicht kostenlos sind, aber dafür auch mit closed source Software benutzt werden dürfen. Um die günstigste ELF-&motif; 2.1.20 Distribution für FreeBSD (entweder &i386; oder Alpha) zu bekommen, wenden Sie sich bitte an Apps2go. Es gibt zwei Distributionen, die development edition und die runtime edition (wesentlich günstiger). Diese Distributionen enthalten: OSF/&motif; manager, xmbind, panner, wsm. Development-Kit mit uil, mrm, xm, xmcxx, Include- und Imake-Dateien. Statische und dynamische ELF-Bibliotheken. Demonstrations-Applets. Achten Sie darauf, dass Sie bei der Bestellung angeben, dass Sie die FreeBSD-Version von &motif; möchten (vergessen Sie auch nicht, die Architektur anzugeben)! Von Apps2go werden auch Versionen für NetBSD und OpenBSD verkauft. Dieses Produkt ist zurzeit nur zum Download per FTP verfügbar. Weitere Informationen Apps2go Web-Seite oder sales@apps2go.com oder support@apps2go.com oder Telefon (817) 431 8775 oder +1 817 431-8775 Eine &motif; 2.0 Distribution für FreeBSD im a.out-Format gibt es bei Xi Graphics. Diese Distribution enthält:/ OSF/&motif; manager, xmbind, panner, wsm. Development-Kit mit uil, mrm, xm, xmcxx, Include- und Imake-Dateien. Statische und dynamische Bibliotheken (zur Verwendung unter FreeBSD 2.2.8 und frühere). Demonstrations-Applets. Vorformatierte Manualpages. Achten Sie darauf, bei der Bestellung anzugeben, dass Sie die FreeBSD-Version von &motif; möchten! Xi Graphics verkauft auch Versionen für BSDI und &linux;. Dieses Produkt ist derzeit ein Satz von vier Disketten... zukünftig wird es eine einheitliche CD-Distribution geben, wie beim CDE. Woher kann ich CDE für FreeBSD bekommen? Xi Graphics hat einmal CDE für FreeBSD verkauft, tut es aber nicht mehr. KDE ist ein Open-Source X11-Desktop, der CDE in vielen Punkten ähnelt. Eventuell gefällt Ihnen auch das "Look and Feel" von xfce. KDE und xfce sind über die Ports-Sammlung von FreeBSD verfügbar. Gibt es irgendwelche kommerzielle leistungsfähige X-Server? Ja, Xi Graphics vertreibt beschleunigte X-Produkte für FreeBSD und andere Intel-basierte Systeme. Das Angebot von Xi Graphics besteht aus einem leistungsfähigen X-Server, der einfache Konfiguration und Unterstützung für den parallelen Einsatz mehrerer Videokarten bietet. Es wird in binärer Form in einer einheitlichen Diskettendistribution für FreeBSD und Linux vertrieben. XI Graphics bietet auch leistungsfähige X-Server, die auf die Unterstützung von Laptops zugeschnitten sind. Es gibt ein kostenloses Kompatibilitäts-Demo der Version 5.0. Xi Graphics vertreibt auch &motif; und CDE für FreeBSD (siehe oben). Weitere Informationen Xi Graphics Web-Seite oder sales@xig.com oder support@xig.com oder Telefon (800) 946 7433 oder +1 303 298-7478. Gibt es irgendwelche Datenbanksysteme für FreeBSD? Ja! Lesen Sie den Abschnitt kommerzielle Anbieter auf der FreeBSD-Web-Seite. Schauen Sie auch im Abschnitt Datenbanken der Ports-Sammlung nach. Kann ich &oracle; unter FreeBSD laufen lassen? Ja. Die folgenden Seiten beschreiben genau, wie sich &linux;-&oracle; unter FreeBSD installieren lässt: http://www.unixcities.com/oracle/index.html http://www.shadowcom.net/freebsd-oracle9i/ Benutzerprogramme Nun, wo sind die ganzen Benutzerprogramme? Werfen Sie bitte einen Blick auf die Ports-Seite, um Informationen über die nach FreeBSD portierten Softwarepakete zu erhalten. Die Liste enthält zurzeit &os.numports; Einträge und wächst täglich. Schauen Sie hier also öfter nach oder melden Sie sich bei der Mailinglistefreebsd-announce an, um sich regelmäßig über Änderungen zu informieren. Die meisten Ports sollten auf den 4.X, 5.X und 6.X-Systemen laufen. Jedes Mal, wenn ein FreeBSD-Release erstellt wird, wird auch ein Snapshot des Port-Baumes vom Zeitpunkt des Releases in das Verzeichnis ports/ eingefügt. Wir unterstützen auch das Konzept von Packages - im Grunde genommen nicht mehr als komprimierte Binärdistributionen mit ein wenig zusätzlicher Intelligenz zur Ermöglichung angepasster Installationen. Ein Package kann leicht installiert und wieder deinstalliert werden, ohne, dass man etwas über wissen muss, welche Dateien es enthält. Benutzen Sie das Paketinstallationsmenü in /stand/sysinstall (unter dem Menüpunkt post-configuration) oder führen Sie den Befehl &man.pkg.add.1; mit den speziellen Paketdateien aus, die Sie installieren möchten. Paketdateien können für gewöhnlich an der Endung .tgz oder .tbz erkannt werden und diejenigen, die über eine CDROM-Distribution verfügen, haben auf ihrer CD ein Verzeichnis packages/All, das solche Dateien enthält. Für verschiedene FreeBSD-Versionen können sie von folgenden Adressen auch über das Netz heruntergeladen werden: für 4.X-RELEASE/4-STABLE ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable für 5.X-RELEASE/5-STABLE ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-stable für 6.X-RELEASE/6-STABLE ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-6-stable für 7-CURRENT ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-7-current oder von Ihrem nächstgelegenen Mirror. Beachten Sie, dass nicht alle Ports als Package verfügbar sind, da ständig neue hinzugefügt werden. Es ist immer eine gute Idee, sich regelmäßig auf der ftp.de.FreeBSD.org Masterseite darüber zu informieren, welche Packages verfügbar sind. Wie konfiguriere ich INN (Internet News) für meine Maschine? Ein idealer Startpunkt nach der Installation des Packages oder Ports news/inn ist Dave Barr's INN-Seite, wo Sie die INN-FAQ finden. Unterstützt FreeBSD &java;? Ja. Informieren Sie sich bitte unter http://www.de.FreeBSD.org/java/. Warum kann ich manche Ports auf meiner 4.X-STABLE-Maschine nicht erstellen? Wenn Sie eine FreeBSD-Version benutzen, die deutlich älter als das aktuelle -CURRENT oder -STABLE ist, könnte es sein, dass Sie vorher Ihre Ports-Sammlung aktualisieren müssen. Lesen Sie dazu den Abschnitt Keeping Up des Porters-Handbuch. Ist Ihre Ports-Sammlung aktuell, könnte es sein, dass jemand eine Änderung am Port durchgeführt hat, die für -CURRENT funktioniert, den Port für -STABLE aber unbrauchbar gemacht hat. Bitte senden Sie einen Fehlerbericht mit dem Befehl &man.send-pr.1;. Von der Ports-Sammlung wird nämlich erwartet, dass sie sowohl auf -CURRENT als auch auf -STABLE funktioniert. Ich habe gerade versucht, INDEX mit make index zu bauen, und es hat nicht geklappt. Woran liegt das? Stellen Sie zuerst sicher, dass Ihre Ports-Sammlung aktuell ist. Fehler, die einen Bau von INDEX aus einer aktuellen Ports-Sammlung verhindern, sind sofort sichtbar und werden daher fast immer umgehend behoben. Ist Ihre Ports-Sammlung jedoch aktuell, haben Sie vielleicht ein anderes Problem. make index hat einen Bug im Umgang mit unvollständigen Kopien der Ports-Sammlung. Es nimmt an, dass Sie über eine lokale Kopie aller Ports verfügen, von denen jeder lokale Port abhängt. Wenn Sie also beispielsweise eine Kopie von foo/bar auf Ihrem System haben, und foo/bar ist von baz/quux abhängig, dann muss auch eine Kopie von baz/quux auf Ihrem System vorhanden sein, sowie eine Kopie aller Ports, von denen baz/quux abhängt. Anderenfalls ist make index aufgrund fehlender Informationen nicht in der Lage, den Abhängigkeitsbaum zu erzeugen. Dieses Problem tritt vor allem dann auf, wenn &os;-Benutzer &man.cvsup.1; verwenden, um die Ports-Sammlung zu aktualisieren und dabei verschiedene Kategorien durch die Datei refuse von der Aktualisierung ausschließen. Theoretisch ist es zwar möglich, Kategorien auszuschließen, in der Praxis gibt es aber zu viele Ports, die von Ports in anderen Kategorien abhängen. Wenn Sie also INDEX bauen wollen, müssen Sie über eine komplette Kopie der Ports-Sammlung verfügen. Es gibt seltene Fälle, in denen INDEX nicht gebaut werden kann, wenn bestimmte WITH_* oder WITHOUT_* Variablen in make.conf gesetzt sind. Wenn Sie dieses Problem haben, sollten Sie diese make-Variablen deaktivieren und INDEX erneut bauen, bevor Sie das Problem an &a.ports; melden. Warum ist CVSup nicht im FreeBSD-Basisquellbaum enthalten? Das Basissystem von FreeBSD soll selbstverwaltend sein. Es soll also möglich sein, das komplette Betriebssystem mit einer beschränkten Anzahl von Werkzeugen zu starten. Daher werden die zum Bau von FreeBSD nötigen Werkzeuge mit dem Quelltext gekoppelt. Zu diesen Werkzeugen gehören ein C-Compiler (&man.gcc.1;), &man.make.1;, &man.awk.1; und andere. Da CVSup in Modula-3 geschrieben wurde, müsste ein Modula-3-Compiler ins Basissystem aufgenommen und auch gewartet werden. Dies würde einen gestiegenen Speicherbedarf für die FreeBSD-Quellen sowie einen erhöhten Wartungsaufwand verursachen. Daher ist es sowohl für Entwickler als auch Benutzer einfacher, CVSup bei Bedarf als Port oder als Paket von einer Installations-CD zu installieren. Ich habe die Sourcen aktualisiert, wie aktualisiere ich jetzt die installierten Ports? FreeBSD enthält zwar kein Programm, das die installierten Ports aktualisiert, allerdings existieren diverse Programme, die diesen Prozess etwas vereinfachen. Weiterhin können Sie zusätzliche Programme installieren, die Sie dabei unterstützen. Sie können mit &man.pkg.version.1; ein Script erzeugen, das die installieren Ports mit einer neueren Version aus der Ports-Sammlung ersetzt: &prompt.root; pkg_version -c > /tmp/myscript Das so erzeugte Script muss manuell geändert werden, bevor es benutzt wird. Neuere Versionen von &man.pkg.version.1; erzwingen dies, indem sie ein &man.exit.1; an den Anfang des Scripts setzen. Sie sollten die Ausgaben des Scripts abspeichern, da sie Ihnen melden werden, welche Ports von den dem gerade aktualisierten Port abhängen. Es ist möglich, dass diese auch aktualisiert werden müssen. Der typische Fall, in dem ein Update erforderlich ist, ist eine Änderung der Versionsnummer einer shared library; in diesem Fall müssen die abhängigen Ports neu übersetzt werden, damit sie die neue Library benutzen. Ab FreeBSD 5.0 steht die Option in &man.pkg.version.1; nicht mehr zur Verfügung. Falls Sie über genügend freien Plattenplatz verfügen, können Sie diesen Prozess mit portupgrade automatisieren. portupgrade umfasst diverse Programme, die die Arbeit mit Packages erleichtern und ist als ports-mgmt/portupgrade verfügbar. Da portupgrade in Ruby geschrieben wurde, wird es wahrscheinlich nie ein Bestandteil von FreeBSD werden. Allerdings sollte das niemanden davon abhalten, es trotzdem zu benutzen. Wenn Ihr System rund um die Uhr läuft, kann es jede Woche automatisch eine Liste der Ports erzeugen, die wahrscheinlich aktualisiert werden müssen. Fügen Sie dazu weekly_status_pkg_enable="YES" in /etc/periodic.conf ein. Warum ist /bin/sh so spartanisch? Warum benutzt FreeBSD nicht die bash oder eine ähnliche Shell? Weil der &posix;-Standard definiert, dass es so eine Shell geben muss. Die ausführlichere Antwort: Viele Leute müssen Shell-Programme schreiben, die auf vielen verschiedenen Systemen nutzbar sein müssen. Aus diesem Grund enthält der &posix;-Standard eine sehr detaillierte Definition der Shell und der Hilfsprogramme. Die meisten Programme werden für die Bourne Shell geschrieben; außerdem nutzen mehrere wichtige Schnittstellen (&man.make.1;, &man.system.3;, &man.popen.3; und ihre Entsprechungen in höheren Programmiersprachen wie Perl und Tcl) die Bourne Shell, um Befehle auszuführen. Da die Bourne Shell an so vielen Stellen und so häufig genutzt wird, muss sie die folgenden Anforderungen erfüllen: Schneller Start, ein klar definiertes Verhalten und ein möglichst geringer Speicherverbrauch. Wir haben bei der vorliegenden Implementierung versucht, möglichst viele dieser Anforderungen zu erfüllen. Um /bin/sh nicht zu groß werden zu lasen, haben wir viele der Annehmlichkeiten der anderen Shells weggelassen. Aus diesem Grund gibt es in den Ports die luxuriöseren Shells wie bash, scsh, tcsh und zsh. Vergleichen Sie einfach mal den Speicherverbrauch der verschiedenen Shells, indem Sie ps -u aufrufen und sich die Angaben in den Spalten VSZ und RSS ansehen. Wieso dauert es so lange, bis &netscape; und Opera starten? In den meisten Fällen liegt es daran, dass Ihre DNS-Einstellungen fehlerhaft sind. Sowohl &netscape; als auch Opera stellen Anfragen an DNS, wenn Sie gestartet werden. Das Fenster des Browsers erscheint erst, wenn das Programm eine Antwort erhalten hat oder es festgestellt hat, dass Ihr System nicht an ein Netzwerk angeschlossen ist. Ich habe die Ports-Sammlung mit CVSup aktualisiert. Viele Ports lassen sich danach nicht mehr bauen und geben seltsame Fehlermeldungen aus. Was ist passiert? Ist die Ports-Sammlung kaputt? Sie sollten immer die Teilsammlung ports-base aktualisieren, wenn Sie nur Teile der Ports-Sammlung mit Hilfe der CVSup-Teilsammlungen aktualisieren. Die Erklärung dazu finden Sie im Handbuch. Wie erzeuge ich Audio-CDs aus MIDI-Dateien? Installieren Sie zuerst den Port audio/timidity++. Danach müssen Sie manuell die GUS-Patche von Eric A. Welsh von installieren. Wenn timidity++ richtig installiert wurde, können Sie mit dem folgenden Kommando MIDI-Dateien in das WAV-Format konvertieren: &prompt.user; timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid Die WAV-Dateien können dann in andere Formate konvertiert werden oder auf Audio-CDs, wie im FreeBSD-Handbuch beschrieben, gebrannt werden. Kernelkonfiguration Ich möchte meinen Kernel anpassen. Ist das schwierig? Überhaupt nicht! Lesen Sie den Abschnitt zur Kernelkonfiguration im Handbuch. Sie sollten einen datierten Snapshot Ihres Kernels als kernel.YYMMDD zu erstellen, nachdem Sie alles zum Laufen gebracht haben. Außerdem sollten Sie eine Kopie des Verzeichnisses /modules erstellen, die den Namen /modules.YYMMDD hat. Auf diese Weise können Sie diesen Kernel hochfahren, anstatt den ganzen Weg zurück zu kernel.GENERIC gehen zu müssen, wenn Sie das nächste Mal mit Ihrer Konfiguration herumexperimentieren und dabei etwas falsch machen sollten. Das ist besonders wichtig, wenn Sie nun von einem Controller booten, der vom GENERIC-Kernel nicht unterstützt wird. Was kann ich machen, wenn meine Kernel-Kompilierungen fehlschlagen, weil _hw_float fehlt? Sie haben wahrscheinlich npx0 aus Ihrer Kernelkonfigurationsdatei entfernt, weil Sie keinen mathematischen Co-Prozessor besitzen. Die Gerätedatei npx0 ist allerdings VERPFLICHTEND. Ihre Hardware unterstützt Gleitkommaoperationen, selbst wenn dafür kein eigenes Bauteil (wie bei den 386er-Prozessoren) mehr verwendet wird. Daher müssen Sie die Gerätedatei npx0 einbinden. Selbst wenn es Ihnen gelingen sollte, einen Kernel ohne npx0-Unterstützung zu bauen, werden Sie diesen nicht booten können. Warum ist mein Kernel so groß (über 10 MByte)? Sie haben Ihren Kernel wahrscheinlich im Debug Modus erstellt. Ein Debug-Kernel enthält viele zusätzliche Informationen für die Fehlersuche, daher ist er so groß. Bitte beachten Sie, dass die Verwendung eines Debug-Kernels die Performance des Systems nicht oder nur minimal reduziert; außerdem ist es für den Fall einer system panic sehr praktisch, einen Debug-Kernel zur Hand zu haben. Wenn Ihnen allerdings der Plattenplatz ausgeht oder Sie einfach rein prinzipiell keinen Debug-Kernel benutzen wollen, müssen die beiden folgenden Bedingungen erfüllt sein: Die Konfigurationsdatei für Ihren Kernel darf die folgende Zeile nicht enthalten: makeoptions DEBUG=-g Sie dürfen &man.config.8; nicht mit dem Parameter starten. Sollten Sie sich nicht an diese Einschränkungen halten, wird Ihr Kernel im Debug-Modus erstellt. Solange Sie sich an diese Einschränkungen halten, können Sie Ihren Kernel ganz normal erstellen und die Größe des Kernels sollte deutlich sinken. Ein normaler Kernel ist nur 1.5 MByte bis 2 MByte groß. Wieso erhalte ich Meldungen über Interrupt-Konflikte, wenn ich eine Karte mit mehreren seriellen Schnittstellen einsetzen will? Wenn ich einen Kernel mit Unterstützung für serielle Multi-Port-Schnittstellen kompiliere, bekomme ich den Hinweis, dass nur der erste Port geprüft wird und die restlichen auf Grund von Interrupt-Konflikten übersprungen werden. Wie kann ich das Beheben? Das Problem besteht darin, dass in FreeBSD Code integriert ist, um den Kernel vor Abstürzen aufgrund von Hardware- oder Software-Konflikten zu bewahren. Behoben wird es, indem die IRQ-Angaben für alle Ports, bis auf einen ausgelassen werden. Hier ist ein Beispiel: # # Multiport high-speed serial line - 16550 UARTS # device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr Wieso kann ich nicht einmal den Standard-Kernel (GENERIC) bauen? Es gibt eine Reihe von möglichen Ursachen für dieses Problem: Sie benutzen die neuen Kommandos make buildkernel und make installkernel nicht, obwohl die Sourcen auf Ihrem System nicht zum laufenden System passen (z.B. benutzen Sie die Sourcen von 4.3-RELEASE auf einem System mit 4.0-RELEASE). Wenn Sie ein Upgrade durchführen wollen, sollten Sie /usr/src/UPDATING lesen, beachten Sie insbesondere den Abschnitt COMMON ITEMS gegen Ende des Dokuments. Sie benutzen zwar make buildkernel und make installkernel, aber Sie haben nicht darauf geachtet, dass vorher ein komplettes make buildworld durchgelaufen sein muss. Um seine Arbeit erledigen zu können, benötigt make buildkernel Dateien, die von make buildworld erzeugt werden. Auch wenn Sie FreeBSD-STABLE verwenden, ist es durchaus möglich, dass Sie die Sourcen genau zum falschen Zeitpunkt aktualisiert haben: Während Sie gerade modifiziert wurden oder kurzzeitig fehlerhaft waren. Eine absolute und vollständige Garantie, dass Sie die Sourcen compilieren können, gibt es nur für die Releases, bei FreeBSD-STABLE ist das nicht immer so. Wenn Sie es noch nicht versucht haben, sollten Sie ihre Source nochmals aktualisieren. Es ist denkbar, dass der von Ihnen genutzte Server zurzeit Probleme hat, benutzten Sie daher testweise auch einmal einen anderen Server. Wie kann ich prüfen, welchen Scheduler das System benutzt? Wenn Sie &os; 5.2.1 oder älter verwenden, überprüfen Sie dazu, ob auf Ihrem System die sysctl-Variable kern.quantum existiert. Ist dies bei Ihnen der Fall, werden Sie eine Ausgabe ähnlich der folgenden sehen: &prompt.user; sysctl kern.quantum kern.sched.quantum: 99960 Wenn die sysctl-Variable kern.quantum existiert, dann verwenden Sie den 4BSD-Scheduler. Existiert sie nicht, erzeugt &man.sysctl.8; eine Fehlermeldung (die Sie aber ignorieren können): &prompt.user; sysctl kern.sched.quantum sysctl: unknown oid 'kern.sched.quantum' Seit &os; 5.3-RELEASE wird der Name des verwendeten Schedulers direkt als Wert der sysctl-Variable kern.sched.name ausgegeben: &prompt.user; sysctl kern.sched.name kern.sched.name: 4BSD Was bedeutet kern.quantum? kern.quantum ist die maximale Anzahl Ticks, die ein Prozess ununterbrochen laufen kann. Die Variable ist charakteristisch für den 4BSD Scheduler, somit kann der verwendete Scheduler über die Existenz dieser Variablen bestimmt werden. Seit &os; 5.X wird kern.quantum als kern.sched.quantum bezeichnet. Was ist kern.sched.quantum? Lesen Sie den Abschnitt Platten, Dateisysteme und Boot Loader Wie kann ich meine neue Festplatte in mein FreeBSD-System einbinden? Lesen Sie das Tutorial zur Festplattenformatierung unter www.de.FreeBSD.org. Wie verschiebe ich mein System auf meine neue, große Platte? Die beste Methode ist, das Betriebssystem auf der neuen Platte neu zu installieren und danach die Daten zu verschieben. Wenn Sie -STABLE über eine Release hinaus genutzt haben oder eine Release aktualisiert haben, ist das sehr empfehlenswert. Sie können auf beiden Platten &man.boot0cfg.8; installieren und die beiden Versionen so lange parallel betreiben, bis Ihnen die neue Konfiguration gefällt. Wenn Sie dies tun wollen, können Sie im übernächsten Absatz erfahren, wie sie Ihre Daten verschieben können. Falls Sie sich entscheiden, das nicht zu tun, müssen Sie Ihre neue Platte partitionieren und labeln. Benutzen Sie dafür entweder /stand/sysinstall oder &man.fdisk.8; und &man.disklabel.8;. Weiterhin sollten Sie mit &man.boot0cfg.8; auf beiden Platten booteasy installieren, damit Sie in der Lage sind, das alte und das neue System abwechselnd zu starten, nachdem der Kopiervorgang abgeschlossen ist. Im Formatting-Media Tutorial finden Sie weitere Informationen zu diesen Schritten. Nachdem Sie die neue Platte eingerichtet haben, können Sie Ihre Daten verschieben. Dummerweise können Sie die Daten nicht einfach kopieren. Dinge wie Gerätedateien (in /dev), erweiterte Dateiattribute und symbolische Links führen dazu, dass das in die Hose geht. Sie müssen ein Programm benutzen, das damit umgehen kann, und das ist &man.dump.8;. Es wird oft empfohlen, die Daten im Single-User Modus zu verschieben, aber das ist nicht unbedingt notwendig. Sie sollten auf gar keinen Fall etwas anderes als &man.dump.8; und &man.restore.8; benutzen, um Ihr Root-Filesystem zu verschieben. Es könnte auch mit &man.tar.1; funktionieren - oder auch nicht. Sie sollten ebenfalls &man.dump.8; und &man.restore.8; benutzen, wenn Sie eine komplette Partition auf eine andere, leere Partition verschieben wollen. Um die Daten einer Partition mit dump auf eine andere Partition zu verschieben, müssen Sie die folgenden Schritte ausführen: Richten Sie in der neuen Partition mit newfs ein Dateisystem ein. Mounten Sie die Partition temporär an einer geeigneten Stelle. Wechseln Sie mit cd in dieses Verzeichnis. Lesen Sie die alte Partition mit dump aus und lenken Sie die Ausgabe auf die neue Partition um. Wenn Sie zum Beispiel root auf /dev/ad1s1a verschieben wollen und diese derzeit auf /mnt gemountet ist, bedeutet das: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - Wenn Sie Ihre Partitionen mit &man.dump.8; umorganisieren wollen, steht Ihnen etwas mehr Arbeit bevor. Wenn Sie eine Partition wie /var in die übergeordnete Partition verschieben wollen, müssen Sie zunächst eine neue Partition erzeugen, die die beiden alten Partitionen aufnehmen kann. Der zweite Schritt ist, wie oben beschrieben die übergeordnete Partition in die neue Partition zu verschieben. Im dritten und letzten Schritt verschieben Sie dann die untergeordnete Partition in das leere Verzeichnis, das im zweiten Schritt entstanden ist: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - &prompt.root; cd var &prompt.root; dump 0af - /var | restore xf - Wenn Sie ein Verzeichnis aus einer Partition herauslösen wollen, also z.B. /var auf eine eigene Partition verlegen wollen, dann müssen Sie zunächst beide Partitionen anlegen. Danach müssen Sie die untergeordnete Partition im passenden Verzeichnis unterhalb des temporären mount points mounten und zum Abschluß die alte Partition verschieben: &prompt.root; newfs /dev/ad1s1a &prompt.root; newfs /dev/ad1s1d &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; mkdir /mnt/var &prompt.root; mount /dev/ad1s1d /mnt/var &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - Eventuell sagen Ihnen für Benutzerdaten &man.cpio.1;, &man.pax.1; oder &man.tar.1; eher zu als &man.dump.8;. Allerdings haben alle diese Programme den Nachteil, dass sie die erweiterten Dateiattribute nicht verstehen, daher sollten Sie bei ihrem Einsatz aufpassen. Gefährdet eine dangerously dedicated Festplatte meine Gesundheit? Die Installationsprozedur bietet Ihnen zwei verschiedene Methoden, Ihre Festplatte(n) zu partitionieren. Die Standardmethode macht sie kompatibel zu anderen Betriebssystemen auf derselben Maschine, indem fdisk-Tabelleneinträge (unter FreeBSD slices genannt) mit einem FreeBSD-Eintrag, in dem eigene Partitionen untergebracht werden, benutzt werden. Optional kann ausgewählt werden, ob ein Boot-Selektor installiert werden soll, um zwischen den möglichen Betriebssystemen auf der/den Platte(n) wechseln zu können. Bei der zweiten Methode wird die gesamte Platte für FreeBSD genutzt und nicht versucht, kompatibel zu anderen Betriebssystemen zu sein. Nun, warum wird es gefährlich genannt? Eine Platte in diesem Modus enthält nichts, was von normalen PC-Hilfsprogrammen als gültige fdisk-Tabelle betrachtet werden würde. Abhängig von der Qualität ihres Designs werden sie sich bei Ihnen beschweren, sobald sie mit einer solchen Platte in Kontakt kommen, oder noch schlimmer, sie könnten den Bootstrap von FreeBSD beschädigen, ohne Sie zu fragen oder darauf hinzuweisen. Hinzu kommt, dass vom Layout von dangerously dedicated Platten bekannt ist, dass es viele BIOSe verwirrt, einschließlich solcher von AWARD (wie es z.B. im HP Netserver oder Micronics-Systemen, sowie vielen anderen zu finden ist) und Symbios/NCR (für die bekannte 53C8xx-Reihe von SCSI-Controllern). Dies ist keine vollständige Liste - es gibt weitere. Symptome für diese Verwirrung sind read error-Meldungen, die vom FreeBSD-Bootstrap ausgegeben werden, wenn es sich selbst nicht finden kann, sowie Systemabstürze beim Booten. Warum gibt es diesen Modus dann überhaupt? Es spart ein paar kByte an Plattenplatz und kann echte Probleme verursachen, die zu einer Neuinstallation führen. Die Ursprünge des Dangerously dedicated Modus liegen in der Absicht, eines der häufigsten Probleme, das Erstinstallierer von FreeBSD plagt, zu verhindern - die BIOS-Werte für die Geometrie einer Festplatte auf der Festplatte selbst anzupassen. Geometrie ist ein veraltetes Konzept, das aber immer noch die Grundlage für die Interaktion zwischen dem PC-BIOS und den Festplatten ist. Wenn das Installationsprogramm von FreeBSD Slices erstellt, muss es sich die Lage dieser Slices auf der Festplatte in einer Art merken, die damit übereinstimmt, wie das BIOS erwartet, sie zu finden. Wenn das falsch geschieht, werden Sie nicht in der Lage sein, zu booten. Durch den Dangerously dedicated Modus wird versucht, dies zu umgehen, indem das Problem vereinfacht wird. In einigen Fällen klappt das zwar, aber er ist eher als allerletzter Ausweg gedacht - in 99 von 100 Fällen gibt es bessere Möglichkeiten, das Problem zu lösen. Wie vermeiden Sie also die Notwendigkeit zum DD Modus, wenn Sie installieren? Beginnen Sie, indem Sie sich notieren, welche Geometrie das BIOS für Ihre Platten benutzt. Sie können erreichen, dass der Kernel sie beim Booten ausgibt, indem Sie an der Eingabeaufforderung boot: angeben, oder boot -v im Loader verwenden. Kurz bevor das Installationsprogramm startet, wird der Kernel eine Liste mit den BIOS-Geometrien ausgeben. Keine Panik - warten Sie, bis das Installationsprogramm gestartet wurde und benutzen Sie Scrollback, um die Zahlen zu lesen. Typischerweise befinden sich die BIOS-Platten in derselben Reihenfolge, wie FreeBSD Ihre Platten auflistet - zuerst IDE, dann SCSI. Wenn Sie Ihre Festplatte in Slices unterteilen, überprüfen Sie, ob die Plattengeometrie, die im FDISK-Menü angegeben ist, korrekt ist (das heißt mit den Einstellungen im BIOS übereinstimmen). Falls die Werte nicht stimmen, benutzen Sie g, um sie zu korrigieren. Diese Schritte sind nötig, wenn sich absolut nichts auf der Festplatte befindet, oder, wenn die Festplatte vorher in einem anderen System benutzt worden ist. Beachten Sie, dass dies nur für die Festplatte nötig ist, von der Sie booten wollen. Mit weiteren vorhandenen Platten wird FreeBSD sich problemlos zurechtfinden. Wenn Sie es geschafft haben, dass das BIOS und FreeBSD in der Festplattengeometrie übereinstimmen, dann sind Ihre Probleme ziemlich sicher vorüber - ohne, dass es nötig gewesen wäre, den DD-Modus zu benutzen. Falls sie jedoch immer noch mit der gefürchteten read error-Meldung begrüßt werden sollten, wenn Sie versuchen, zu booten, wird es Zeit, dass Sie Ihre Finger kreuzen und es einfach versuchen - es gibt nichts mehr zu verlieren. Um eine dangerously dedicated Festplatte wieder für einen normalen PC brauchbar zu machen, gibt es zwei Möglichkeiten. Die erste ist, ausreichend viele NULL-Bytes in den MBR zu schreiben, um irgendwelche nachfolgenden Installation glauben zu machen, dass es sich um eine leere Festplatte handelt. Sie können das zum Beispiel so tun: &prompt.root; dd if=/dev/zero of=/dev/rda0 count=15 Alternativ installiert der undokumentierte DOS-Befehl C:\> fdisk /mbr einen neuen Master-Boot-Record, das heißt der BSD-Bootstrap wird zerstört. Auf welchen Partitionen kann ich problemlos Soft Updates einsetzen? Ich habe gehört, das der Einsatz von Soft Updates auf / Probleme verursachen kann. Die schnelle Antwort: Sie können Soft Updates bedenkenlos auf alle Partitionen benutzen. Die ausführliche Antwort: Es gab lange Zeit Bedenken, was den Einsatz von Soft Updates auf der root-Partition betrifft. Der Grund sind zwei Charakteristika der Soft Updates: Zum einen kann es bei einem Absturz des System auf einer Partition mit Soft Updates zum Datenverlust kommen. Die Partition ist zwar noch brauchbar, aber einige Daten können verloren gehen. Weiterhin kann es durch Soft Updates zu einem zeitweisen Mangel an Plattenplatz kommen. Bei der Benutzung von Soft Updates kann es bis zu dreißig Sekunden dauern, bis der Kernel Änderungen auf das physikalische Speichermedium schreibt. Wenn Sie eine große Datei löschen, ist diese Datei noch auf der Platte vorhanden, bis der Kernel die Löschoperation tatsächlich durchführt. Das kann zu einem sehr einfachen Problem führen: Stellen Sie sich vor, Sie löschen eine große Datei und legen gleich darauf eine andere große Datei an. Da die erste Datei noch nicht wirklich gelöscht wurde, ist eventuell nicht genug Platz für die zweite große Datei. Sie erhalten die Fehlermeldung, dass nicht genug freier Platz vorhanden ist, obwohl Sie ganz genau wissen, dass Sie gerade eben Platz geschaffen haben. Wenn Sie die Operation ein paar Sekunden später wiederholen, funktioniert alles wie von Geisterhand. Dieser Effekt hat mehr als einen Benutzer verwirrt und Zweifel an seiner geistigen Stabilität oder dem FreeBSD-Dateisystem aufkommen lassen. Wenn der Kernel ein Datenpaket annimmt und das System abstürzt, bevor er dies Daten auf die Platte geschrieben hat, kann es zum Verlust oder zur Zerstörung von Daten kommen. Dieses Risiko ist nur sehr gering und normalerweise tragbar. Wenn Sie allerdings einen IDE-Write-Cache verwenden, steigt das Risiko; daher wird normalerweise empfohlen, auf den Einsatz dieser Technik zu verzichten, wenn Sie Soft Updates benutzen. Diese beiden Probleme betreffen alle Partitionen, die Soft Updates verwenden. Was bedeutet das für die Root-Partition? Die wichtigen Daten auf der Root-Partition ändern sich nur sehr selten. Dateien wie /kernel und der Inhalt /etc werden nur bei der Wartung des Systems geändert, oder wenn Benutzer ihre Passwörter ändern. Wenn das System in den 30 Sekunden nach einer solchen Änderung abstürzt, ist es möglich, das Daten verloren gehen. Dieses Risiko ist in den meisten Fällen unerheblich, aber es ist vorhanden. Wenn das zu viel Risiko ist, dann sollten Sie Soft Updates nicht auf der Root-Partition einsetzen. / war schon immer eine der kleinsten Partitionen. Standardmäßig legt FreeBSD das Verzeichnis /tmp direkt auf /. Wenn in Ihrem /tmp viel Betrieb ist, kann es gelegentlich zu den oben beschriebenen Platzproblemen kommen. Um das Problem zu lösen, sollten sie einen symbolischen Link von /tmp nach /var/tmp legen. Was stimmt mit meinem ccd nicht? Das Symptom hierfür ist: &prompt.root; ccdconfig -C ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format Das geschieht für gewöhnlich, wenn Sie versuchen, die c Partitionen, die standardmäßig vom Typ unbenutzt sind, zu verbinden. Der ccd-Treiber verlangt Partitionen vom Typ FS_BSDFFS. Editieren Sie den Plattenlabel der Platten, die Sie zu verknüpfen versuchen und ändern Sie die Typen der Partitionen in 4.2BSD. Warum kann ich den Plattenlabel meines ccd nicht editieren? Das Symptom hierfür ist: &prompt.root; disklabel ccd0 (hier wird etwas vernünftiges ausgegeben; versuchen wir nun, es zu editieren) &prompt.root; disklabel -e ccd0 (editiern, speichern, beenden) disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -r" to install initial label Der Grund ist, dass der von ccd zurückgelieferte Plattenlabel ein vorgetäuschter ist, der sich nicht wirklich auf der Platte befindet. Sie können das Problem beheben, indem Sie ihn explizit zurückschreiben, wie z.B. hier: &prompt.root; disklabel ccd0 > /tmp/disklabel.tmp &prompt.root; disklabel -Rr ccd0 /tmp/disklabel.tmp &prompt.root; disklabel -e ccd0 (nun wird es funktionieren) Kann ich andere fremde Dateisysteme unter FreeBSD mounten? FreeBSD unterstützt verschiedene fremde Dateisysteme. Digital UNIX UFS-CDROMs können unter FreeBSD direkt gemountet werden. Das Mounten von Partitionen von Digital &unix; und anderen Systemen, die UFS unterstützen, könnte schwieriger sein, abhängig von den Details der Plattenpartitionierung des betreffenden Betriebssystems. &linux; FreeBSD unterstützt ext2fs-Partitionen. Unter &man.mount.ext2fs.8; finden Sie weitere Informationen. &windowsnt; Ein NTFS-Treiber, der nur Lesezugriffe gestattet, ist Teil von &os;. Weitere Informationen entnehmen Sie bitte der Hilfeseite &man.mount.ntfs.8;. FAT FreeBSD enthält ein FAT-Treiber, der Lese- und Schreibzugriffe ermöglicht. Weitere Informationen entnehmen Sie bitte der Hilfeseite &man.mount.msdosfs.8;. ReiserFS FreeBSD enthält einen Treiber, der Lesezugriffe auf ReiserFS-Partitionen erlaubt. Weiter Informationen dazu finden Sie in der Manualpage &man.mount.reiserfs.8;. FreeBSD unterstützt auch verschiedene Netzwerk-Dateisysteme, wie NFS (&man.mount.nfs.8;), NetWare (&man.mount.nwfs.8;), sowie die SMB-Dateisysteme von Microsoft (&man.mount.smbfs.8;). Wie mounte ich eine erweiterte DOS-Partition? Die erweiterten DOS-Partitionen befinden sich hinter ALLEN primären Partitionen. Wenn sich zum Beispiel eine Partition E als sekundäre DOS-Partition auf Ihrem zweiten SCSI-Laufwerk befindet, müssen Sie die speziellen Dateien für Slice 5 im Verzeichnis /dev erstellen und dann /dev/da1s5 mounten: &prompt.root; cd /dev &prompt.root; ./MAKEDEV da1s5 &prompt.root; mount -t msdos /dev/da1s5 /dos/e Lassen Sie diesen Schritt aus, wenn Sie FreeBSD 5.0-RELEASE oder eine neuere Version mit &man.devfs.5; verwenden. Die Gerätedateien werden in diesem Fall automatisch in /dev erstellt. Gibt es ein verschlüsselndes Dateisystem für &os;? Seit FreeBSD 5.0 können Sie &man.gbde.8; einsetzen. Mit FreeBSD 6.0 kam &man.geli.8; hinzu. Für ältere Versionen gibt es den Port security/cfs. Wie kann ich den &windowsnt;-Loader zum Booten von FreeBSD verwenden? Das grundsätzliche Vorgehen besteht darin, dass Sie den ersten Sektor Ihrer eigentlichen FreeBSD-Rootpartition in eine Datei auf der DOS/&windowsnt;-Partition kopieren. Angenommen, sie nennen die Datei etwa c:\bootsect.bsd (durch c:\bootsect.dos inspiriert), dann können Sie die Datei c:\boot.ini etwa wie folgt editieren: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT" C:\BOOTSECT.BSD="FreeBSD" C:\="DOS" Falls FreeBSD auf derselben Platte, wie die &windowsnt;-Bootpartition installiert ist, kopieren Sie einfach /boot/boot1 nach C:\BOOTSECT.BSD. Falls FreeBSD auf einer anderen Platte installiert ist, wird /boot/boot1 nicht funktionieren; Sie brauchen in diesem Fall /boot/boot0. /boot/boot0 muss mit sysinstall installiert werden. Wählen Sie dazu den FreeBSD-Bootmanager aus, wenn Sie gefragt werden, ob sie einen Bootmanager installieren wollen. Dieser Schritt ist notwendig, weil /boot/boot0 eine leere Partitionstabelle enthält, die von sysinstall ausgefüllt wird, bevor /boot/boot0 in den MBR kopiert wird. Sie dürfen auf gar keinen Fall einfach /boot/boot0 statt /boot/boot1 kopieren. Wenn Sie das doch tun sollten, wird Ihre Partitionstabelle überschrieben und Ihr Rechner wird nicht mehr starten! Wenn der Bootmanager von FreeBSD gestartet wird, merkt er sich das zuletzt gestartet Betriebssystem, indem er dessen Partition als aktiv markiert. Danach kopiert er sich selbst (alle 512 Bytes) in den MBR. Wenn Sie also einfach /boot/boot0 nach C:\BOOTSECT.BSD kopieren, würde der Bootmanager eine leere Partitionstabelle (mit einem als aktiv markiertem Eintrag) in den MBR kopieren. Wie boote ich FreeBSD und &linux; mit LILO? Falls sich FreeBSD und &linux; auf derselben Platte befinden, folgen Sie einfach den Installationsanweisungen von LILO zum Booten eines Nicht-&linux;-Betriebssystems. Ganz knapp sind dies: Booten Sie &linux; und fügen Sie die folgenden Zeilen in die Datei /etc/lilo.conf ein: other=/dev/hda2 table=/dev/hda label=FreeBSD (hierbei wird angenommen, dass Ihre FreeBSD-Partition &linux; unter /dev/hda2 bekannt ist; ändern Sie dies entsprechend Ihren Einstellungen). Führen Sie nun als root den Befehl lilo aus und Sie sind fertig. Falls FreeBSD sich auf einer anderen Platte befindet, müssen Sie loader=/boot/chain.b zu den LILO-Angaben hinzufügen. Zum Beispiel: other=/dev/dab4 table=/dev/dab loader=/boot/chain.b label=FreeBSD In einigen Fällen könnte es sein, dass Sie beim FreeBSD-Bootloader die BIOS-Laufwerksnummer angeben müssen, um von der zweiten Platte booten zu können. Wenn Ihre FreeBSD-SCSI-Platte vom BIOS zum Beispiel als BIOS-Platte 1 erkannt wird, müssen Sie am Prompt des FreeBSD-Bootloaders eingeben: Boot: 1:da(0,a)/kernel Sie können &man.boot.8; so konfigurieren, dass das beim Booten automatisch geschieht. Das &linux;+FreeBSD mini-HOWTO ist ein guter Ratgeber bei Fragen zur Interaktion von FreeBSD und &linux;. Wie boote ich &os; und &linux; mit GRUB? Es ist sehr einfach, GRUB zum Starten von &os; einzusetzen. Dazu müssen Sie lediglich die folgenden Zeilen in die Konfigurationsdatei /boot/grub/grub.conf aufnehmen: title FreeBSD 6.1 root (hd0,a) kernel /boot/loader Dabei steht hd0,a für die root-Partition Ihrer ersten Festplatte. Benötigen Sie auch die Slice-Nummer, so verwenden Sie einen Eintrag der Form (hd0,2,a). In der Voreinstellung ist die Angabe der Slice-Nummer aber nicht nötig, da GRUB automatisch das erste Slice (das die Bezeichnung 'a' hat) nutzt. Wie boote ich FreeBSD und &linux; mit BootEasy? Installieren Sie LILO am Anfang Ihrer &linux;-Bootpartition, anstatt im Master Boot Record. Sie können LILO dann von BootEasy aus booten. Wenn Sie &windows; 95 und &linux; benutzen, wird das ohnehin empfohlen, um es einfacher zu machen, &linux; wieder zu booten, wenn es nötig werden sollte, dass Sie &windows; 95 neu installieren (&windows; 95 ist ein eifersüchtiges Betriebssystem, das kein anderes Betriebssystem im Master Boot Sektor duldet). Wie kann ich das ??? des Boot-Managers durch etwas Sinnvolles ersetzen? Solange Sie den Boot-Manager nicht komplett neu schreiben, gar nicht. Allerdings gibt es in der Kategorie sysutils der Ports diverse Boot-Manager, die diese Funktionalität bieten. Ich habe ein Wechsellaufwerk. Wie benutze ich es? Ob es sich um ein Wechsellaufwerk handelt, um ein &iomegazip; oder ein EZ-Laufwerk (oder sogar ein Diskettenlaufwerk, wenn Sie es auf diese Weise benutzen möchten), oder um eine neue Festplatte - wenn es einmal installiert und vom System erkannt ist und Sie Ihre Kassette/Diskette/was_auch_immer eingelegt haben, ist das Vorgehen bei allen Geräten ziemlich ähnlich. (dieser Abschnitt basiert auf Mark Mayo's ZIP-FAQ) Wenn es sich um ein ZIP- oder Diskettenlaufwerk handelt, und sich bereits ein DOS-Dateisystem darauf befindet, können Sie einen Befehl wie diesen für eine Diskette benutzen: &prompt.root; mount -t msdos /dev/fd0c /floppy oder diesen: &prompt.root; mount -t msdos /dev/da2s4 /zip für eine ZIP-Disk mit der Herstellerkonfiguration. Benutzen Sie bei anderen Platten &man.fdisk.8; oder &man.sysinstall.8;, um herauszufinden, wie sie konfiguriert sind. Die restlichen Beispiele sind für ein ZIP-Laufwerk unter da2, der dritten SCSI-Platte. Wenn es sich nicht um eine Diskette oder eine Wechselplatte handelt, die Sie mit anderen Leuten austauschen wollen, ist es wahrscheinlich besser, ein BSD-Dateisystem darauf zu installieren. Hierdurch bekommen Sie Unterstützung für lange Dateinamen, eine mindestens doppelt so hohe Leistungsausnutzung und wesentlich höhere Stabilität. Zunächst müssen Sie die Partitionen/Dateisysteme auf DOS-Ebene nochmals erstellen. Sie können entweder &man.fdisk.8; oder /stand/sysinstall benutzen, oder, bei einem kleinen Laufwerk, dem Sie eine Unterstützung für mehrere Betriebssysteme nicht zumuten wollen, entfernen Sie einfach die komplette FAT Partitionstabelle (Slices) und benutzen Sie einfach die BSD-Partitionierung: &prompt.root; dd if=/dev/zero of=/dev/rda2 count=2 &prompt.root; disklabel -Brw da2 auto Sie können disklabel oder /stand/sysinstall benutzen, um mehrere BSD-Partitionen zu erstellen. Dies werden Sie sicherlich bei einer fest eingebauten Platte wollen, aber bei einem Wechsellaufwerk wie einem ZIP ist das wahrscheinlich irrelevant. Zum Schluß erstellen Sie ein neues Dateisystem - dieses befindet sich auf unserem ZIP-Laufwerk und belegt die gesamte Platte: &prompt.root; newfs /dev/rda2c anschließend mounten Sie es: &prompt.root; mount /dev/da2c /zip Und sicherlich ist es keine schlechte Idee, eine Zeile ähnlich der folgenden in die Datei /etc/fstab einzufügen, damit Sie in Zukunft nur mount /zip einzugeben brauchen: /dev/da2c /zip ffs rw,noauto 0 0 Wieso erhalte ich die Meldung Incorrect super block beim Mounten einer CDROM? Sie müssen &man.mount.8; mitteilen, was für ein Gerät Sie mounten wollen. Genauere Informationen dazu finden Sie im Kapitel Optische Speichermedien des Handbuch, genauer gesagt im Abschnitt Benutzung von Daten-CDs. Wieso erhalte ich die Meldung Device not configured, wenn ich eine CDROM mounte? Das bedeutet im allgemeinen, dass sich keine CDROM im Laufwerk befindet, oder, dass das Laufwerk auf dem Bus nicht sichtbar ist. Dieses Problem wird im Kapitel Benutzung von Daten-CDs des Handbuchs ausführlich diskutiert. Wieso werden alle Sonderzeichen in den Dateinamen auf meinen CDs durch ? ersetzt, wenn ich die CD unter FreeBSD benutze? Wahrscheinlich werden auf der CDROM die Joliet Erweiterungen für die Speicherung von Datei- und Verzeichnisnamen benutzt. Werfen Sie einen Blick in das Kapitel Erzeugung von CD-ROMs im Handbuch, speziell in den Abschnitt über Benutzung von Daten-CDs. [Anmerkung des Übersetzers: Es geht hier nicht um die deutschen Sonderzeichen, da diese schon im normalen ISO8859-1 enthalten sind. Die Probleme treten auf, wenn man z.B. russische CDs (ISO8859-5) verwendet.] Ich habe eine CD mit FreeBSD gebrannt und kann sie nicht mit anderen Betriebssystemen lesen. Warum? Sie haben wahrscheinlichste eine Datei direkt auf CD geschrieben, statt ein ISO 9660-Dateisystems erzeugt zu haben. Werfen Sie einen Blick in das Kapitel Erzeugung von CD-ROMs im Handbuch, speziell in den Abschnitt über reine Daten-CDs. Wie kann ich ein Image einer Daten-CD erzeugen? Diese Information finden Sie im Abschnitt Kopieren von CD-ROMs des Handbuchs. Weitere Informationen über die Arbeit mit CD-ROMs finden Sie im Abschnitt Erzeugen von CD-ROMs im Kapitel Speichermedien des Handbuchs. Wieso kommt mount nicht meiner Audio-CD zurecht? Wenn Sie versuchen sollten, eine Audio-CD zu mounten, erhalten Sie die Meldung cd9660: /dev/acd0c: Invalid argument. Der Grund dafür ist, dass mount nur für Dateisysteme vorgehen ist. Audio CDs habe kein Dateisystem, sondern nur Daten. Wenn Sie eine Audio CD auslesen wollen, brauchen Sie ein entsprechendes Programm wie z.B. audio/xmcd aus den Ports. Wie nutze ich mount für eine Multi-Session CD? Standardmäßig benutzt &man.mount.8; den letzten (aktuellsten) Daten-Track der CD. Wenn Sie eine ältere Session benutzen wollen, müssen Sie diese mit der Option definieren. Weitere Informationen finden Sie in der Onlinehilfe zu &man.mount.cd9660.8; Wie lasse ich normale Benutzer Disketten, CDROMs und andere Wechseldatenträger mounten? Normale Benutzer können dazu berechtigt werden, Geräte zu mounten. Das geht so: Setzen Sie als root die sysctl-Variable vfs.usermount auf 1: &prompt.root; sysctl -w vfs.usermount=1 Ordnen Sie als root den Block-Geräten, die den Wechsellaufwerken zugeordnet sind, die entsprechenden Zugriffsrechte zu. Wenn Sie zum Beispiel den Benutzer den Zugriff auf das erste Diskettenlaufwerk zu erlauben wollen: &prompt.root; chmod 666 /dev/fd0 Um den Mitgliedern der Gruppe operator den Zugriff auf das CDROM zu gestatten: &prompt.root; chgrp operator /dev/acd0c &prompt.root; chmod 640 /dev/acd0c Ab &os; 5.X müssen Sie zusätzlich /etc/devfs.conf anpassen, weil diese Einstellungen ansonsten beim Systemneustart verloren gehen. Damit normale Benutzer bespielsweise das erste Diskettenlaufwerk mounten können, fügen Sie als root folgende Zeilen in /etc/devfs.conf ein: # Allen Benutzern erlauben, das erste Diskettenlaufwerk zu mounten. own /dev/fd0 root:operator perm /dev/fd0 0666 Damit alle Mitglieder der Gruppe operator das CD-ROM-Laufwerk mounten können, die folgenden Zeilen: # Alle Mitglieder der Gruppe operator dürfen CD-ROMs mounten. own /dev/acd0 root:operator perm /dev/acd0 0660 Fügen Sie zum Abschluss die Zeile vfs.usermount=1 in die Datei /etc/sysctl.conf ein, damit die Einstellung bei einem Neustart des Systems automatisch erhalten bleibt. Alle Benutzer können nun /dev/fd0 auf ein Verzeichnis, das ihnen gehört, mounten: &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t msdos /dev/fd0 ~/my-mount-point Die zur Gruppe operator gehörenden Benutzer können nun /dev/acd0c auf ein Verzeichnis, das ihnen gehört, mounten: &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t cd9660 /dev/acd0c ~/my-mount-point Das Unmounten des Gerätes ist simpel: &prompt.user; umount ~/my-mount-point Die Aktivierung von vfs.usermount hat jedoch negative Auswirkungen auf Sicherheitsaspekte. Ein besserer Weg, um auf &ms-dos;-formatierte Datenträger zuzugreifen, ist die Benutzung des Packages emulators/mtools. Denken Sie daran, dass Sie die Gerätenamen in diesen Beispielen an Ihre Konfiguration anpassen müssen. Wieso geben die Befehle du und df unterschiedliche Werte für den freien Plattenplatz aus? Der Grund ist die Funktionsweise von du und df. du geht durch einen Dateibaum, ermittelt die Größe jeder einzelnen Datei, und gibt die Summe aus. df fragt lediglich das Dateisystem wie viel Platz noch frei ist. Das scheint zwar auf den ersten Blick sehr ähnlich zu sein; allerdings wird sich ein leeres Verzeichnis auf die Ausgabe von df auswirken, während es auf das Ergebnis von du keinen Einfluss hat. Wenn Sie eine Datei löschen, während sie von einem Programm genutzt wird, wird diese Datei erst gelöscht, wenn sie vom Programm freigegeben wird. Allerdings wird die Datei sofort aus dem Verzeichnis entfernt. Sie können dieses Verhalten mit einem Programm wie more sehr einfach nachvollziehen. Dazu brauchen Sie nur eine Datei, die groß genug ist, um die Ausgabe von du und df zu beeinflussen. Bei der Größe aktueller Platten muss diese Datei schon sehr groß sein! Wenn Sie diese Datei löschen, während Sie sie sich in more anzeigen lassen, hat more kein Problem. Der Eintrag für die Datei wird lediglich aus dem Verzeichnis entfernt, damit kein anderes Programm mehr darauf zugreifen kann. Laut du ist die Datei verschwunden – es hat das Verzeichnis untersucht und die Datei nicht gefunden. Laut df ist die Datei aber vorhanden, da sie im Dateisystem immer noch Platz belegt. Sobald Sie more beenden, werden die Ergebnisse von du und df wieder übereinstimmen. Bitte beachten Sie, dass die Freigabe des Plattenplatzes durch die Soft Updates um bis zu 30 Sekunden verzögert werden kann. Die oben beschriebene Situation tritt sehr häufig auf Web-Servern auf. Viele Anwender installieren einen FreeBSD Web-Server und vergessen die Rotation der Logfiles, bis irgendwann die Partition /var überläuft. Der Administrator löscht die Datei, aber das System beschwert sich immer noch über fehlenden Plattenplatz. Die Datei wird erst freigegeben, wenn der Web-Server beendet und neu gestartet wird; dadurch kann das System den Plattenplatz freigeben. Um solche und ähnliche Unfälle zu verhindern, sollten Sie &man.newsyslog.8; einsetzen. Wie kann ich den Swap-Bereich vergrößern? Im Kapitel Konfiguration und Tuning des Handbuches gibt es einen Abschnitt mit einer Schritt-für-Schritt Anleitung. Warum ist meine Festplatte unter &os; kleiner, als sie laut Hersteller sein soll? Festplattenhersteller definieren ein Gigabyte als eine Milliarde Bytes, für &os; ist ein Gigabyte hingegen 1.073.741.824 Bytes groß. Aus diesem Grund wird für eine Platte, die laut Herstellerangaben 80 GB groß ist, während des Bootvorgangs eine Größe von 76.319 MB angezeigt. Beachten Sie auch, dass &os; (in der Voreinstellung) 8 % des Plattenplatzes für sich reserviert. Warum kann eine Partition zu mehr als 100% gefüllt sein? Ein Teil jeder UFS Partition, in der Vorgabe sind das 8%, ist für das Betriebssystem und den Benutzer root reserviert. &man.df.1; rechnet diesen Teil bei der Ausgabe der Capacity Spalte nicht ein, so dass dort Werte über 100% angezeigt werden können. Die Anzahl der Blöcke in der blocks Spalte ist ebenfalls um 8% größer als die Summe der benutzten und verfügbaren Blöcke (die Spalten Used und Avail). Wie viel Platz reserviert wird, können Sie mit der Option von &man.tunefs.8; einstellen. Systemadministration Wo befinden sich die Konfigurationsdateien für den Systemstart? /etc/defaults/rc.conf (siehe &man.rc.conf.5;) ist die primäre Konfigurationsdatei. Die Startskripten des Systems, wie /etc/rc und /etc/rc.d (siehe &man.rc.8;) inkludieren diese Datei. Ändern Sie diese Datei nicht! Wenn Sie den Wert einer der in /etc/defaults/rc.conf gesetzten Variablen ändern wollen, fügen Sie die entsprechende Zeile in die Datei /etc/rc.conf ein und ändern die Zeile dort. Wenn Sie zum Beispiel den mitgelieferten DNS-Server named aktivieren wollen, müssen Sie lediglich das folgende Kommando eingeben: &prompt.root; echo named_enable="YES" >> /etc/rc.conf Wenn Sie lokale Server starten wollen, müssen Sie passende Shellskripten im Verzeichnis /usr/local/etc/rc.d/ ablegen. Die Dateien müssen als ausführbar markiert sein und die Endung .sh haben. Wie kann ich am Einfachsten einen Benutzer hinzufügen? Benutzen Sie den Befehl &man.adduser.8; und für kompliziertere Fälle den Befehl &man.pw.8;. Benutzen Sie den Befehl &man.rmuser.8;, um einen Benutzer wieder zu löschen. Sie können, wenn nötig. auch &man.pw.8; benutzen. Warum erhalte ich Meldungen wie root: not found, nachdem ich meine crontab geändert habe? Die übliche Ursache dieses Problems ist, dass Sie die crontab des Systems (/etc/crontab) geändert und dann mit &man.crontab.1; installiert haben: &prompt.root; crontab /etc/crontab Diese Vorgehensweise ist falsch. Die crontab des Systems hat ein anderes Format als die crontabs für die einzelnen Benutzer, die mit &man.crontab.1; aktualisiert werden (genauere Informationen über die Unterschiede erhalten Sie in &man.crontab.5;). Wenn Sie so vorgegangen sind, ist die zweite crontab einfach nur eine Kopie von /etc/crontab, allerdings im falschen Format. Löschen Sie sie mit dem folgenden Befehl: &prompt.root; crontab -r Wenn Sie /etc/crontab wieder ändern müssen, sollten Sie einfach gar nichts tun, um &man.cron.8; über die Änderung zu informieren, er erkennt die Änderung automatisch. Wenn Sie ein Kommando jeden Tag, jede Woche oder jeden Monat ausführen lassen wollen, ist es wahrscheinlich einfacher, wenn Sie entsprechende Shell-Scripte in /usr/local/etc/periodic ablegen. Diese werden dann von &man.periodic.8; zusammen mit den anderen regelmäßigen Tätigkeiten ausgeführt. Der eigentliche Grund für den Fehler ist die Tatsache, dass die crontab des Systems ein zusätzliches Feld enthält; dieses Feld gibt an, mit welcher Benutzerkennung der Befehl ausgeführt werden soll. In der mitgelieferten crontab ist das bei allen Einträgen die Benutzerkennung root. Wenn diese Datei als die crontab des Benutzers username (die nicht mit der crontab des Systems identisch ist) verwendet wird, hält &man.cron.8; die Zeichenkette root für den Namen des zu startenden Programmes, aber dieses Programm gibt es nicht. Wieso meldet mir &man.su.1; you are not in the correct group to su root, wenn ich mit &man.su.1; root werden will? Das ist ein Sicherheits-Feature. Wenn Sie mit &man.su.1; zum Account root (oder jedem anderen Account mit Super-User-Privilegien) wechseln wollen, müssen Sie ein Mitglied der Gruppe wheel sein. Wenn es dieses Feature nicht gäbe, könnte jeder, der einen Account auf dem System hat und zufällig das Passwort für root erfährt, mit Super-User-Rechten auf das System zugreifen. Durch dieses Feature ist die Lage anders, wenn Sie nicht Mitglied von wheel sind, können Sie nicht einmal versuchen, dass Passwort einzugeben. Um einem Benutzer zu erlauben, mit &man.su.1; root zu werden, müssen Sie ihn nur in die Gruppe wheel eintragen. Ich habe einen Fehler in der rc.conf oder einer der anderen Dateien für den Systemstart und jetzt kann ich sie nicht ändern, weil das Dateisystem read-only ist. Was kann ich tun? Wenn Sie aufgefordert werden, den Pfadnamen der Shell einzugeben, drücken Sie einfach ENTER. Geben Sie danach mount / ein, um das Root-Dateisystem im Schreib/Lese-Modus zu mounten. Sie werden wahrscheinlich auch mount -a -t ufs ausführen müssen, um das Dateisystem mit Ihrem Lieblingseditor zu mounten. Wenn Ihr Lieblingseditor auf einem Netzwerklaufwerk liegt, müssen Sie entweder das Netzwerk von Hand konfigurieren oder einen Editor benutzen, der auf einem lokalen Laufwerk vorhanden ist, z.B. &man.ed.1;. Wenn Sie einen bildschirmorientierten Editor wie zum Beispiel &man.vi.1; oder &man.emacs.1; benutzen wollen, werden Sie auch den Befehl export TERM=cons25 ausführen müssen, damit diese Editoren die richtigen Einstellungen aus der Datenbank &man.termcap.5; übernehmen. Sobald Sie diese Schritte ausgeführt, können Sie den Fehler in der /etc/rc.conf ganz normal beheben. Die Fehlermeldungen, die Ihnen unmittelbar nach den Startmeldungen des Kernels angezeigt wurden, sollten Ihnen die Nummer der Zeile mit dem Fehler melden. Wieso habe ich habe Probleme, meinen Drucker einzurichten? Bitte sehen Sie im Handbucheintrag über Drucker nach. Es sollte die meisten Ihrer Probleme behandeln. Lesen sie den Handbucheintrag über Drucker. Einige Drucker benötigen einen auf dem Rechner laufenden Treiber, um drucken zu können. Diese so genannten WinPrinter oder GDI-Drucker werden von FreeBSD nicht unterstützt und an diesem Zustand wird sich wohl auch nichts ändern. Wenn Ihr Drucker nicht unter DOS oder &windowsnt; 4.0 verwendet werden kann, handelt es sich um einen WinPrinter und wird in der Regel auch nicht unter FreeBSD funktionieren. Ihre einzige Chance, einen dieser Drucker benutzen können, ist der Port ports/print/pnm2ppa. Wie kann ich die Tastaturbelegung meines Systems korrigieren? Informationen dazu finden Sie im Kapitel länderspezifische Einstellungen des Handbuchs, insbesondere im Abschnitt Konfiguration der Konsole. Wieso erhalte ich beim Start des Systems Meldungen wie unknown: <PNP0303> can't assign resources? Die nachfolgende Erklärung stammt aus einer Mail auf der Mailingliste freebsd-current.
&a.wollman;, 24 April 2001 Die Geräte, für die can't assign resources-Meldungen ausgegeben werden, sind Legacy ISAGeräte, für die ein nicht PNP-fähiger Treiber in den Kernel eingebunden wurde. Dabei handelt es sich um Geräte wie den Tastaturkontroller, den programmierbaren Interrupt-Kontroller und diverse andere Standardkomponenten. Die Ressourcen können nicht zugewiesen werden, weil es schon einen Treiber gibt, der diese Ressourcen benutzt.
Wieso funktionieren die Benutzer-Quotas nicht richtig? Es kann sein, dass Ihr Kernel nicht für den Einsatz von Quotas konfiguriert ist. Damit Sie mit Quotas arbeiten können, müssen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei aufnehmen und den Kernel neu bauen: options QUOTA Weitere Informationen zum Einsatz von Quotas finden Sie im entsprechenden Abschnitt des Handbuchs. Benutzen Sie keine Quotas für /. Erstellen Sie die Quotas-Datei in dem Dateisystem, für das die Quotas gelten sollen, z.B.: Filesystem Quota file /usr /usr/admin/quotas /home /home/admin/quotas Unterstützt FreeBSD IPC-Grundfunktionen von System V? Ja, FreeBSD unterstützt IPC im Stil von System V einschließlich gemeinsamen Speicher, Nachrichten und Semaphoren bereits mit dem GENERIC-Kernel. Wenn Sie einen angepassten Kernel verwenden, müssen Sie die folgenden Zeilen in Ihre Kernelkonfigurationsdatei einfügen: options SYSVSHM options SYSVSHM # enable shared memory options SYSVSEM # enable for semaphores options SYSVMSG # enable for messaging Danach kompilieren und installieren Sie den neuen Kernel. Welchen Mail-Server kann ich an Stelle von Sendmail benutzen? Sendmail ist zwar der Mail-Server, der bei FreeBSD standardmäßig installiert wird, aber Sie können Ihn problemlos durch einen anderen MTA (z.B. aus den Ports) ersetzen. In der Port-Sammlung gibt es bereits viele verschiedene MTAs, mail/exim, mail/postfix, mail/qmail, sowie mail/zmailer sind einige der beliebteren Alternativen. Konkurrenz belebt das Geschäft und die Tatsache, dass Sie die Qual der Wahl haben, ist ein Vorteil. Daher sollten Sie Fragen wie Ist Sendmail besser als Qmail? besser nicht auf den Mailinglisten stellen. Wenn Sie dieses Thema interessiert, sollten sie zunächst die Archive durchsehen. Die Vorteile und Nachteile jedes einzelnen der verfügbaren MTAs sind schon mehrere Male bis zur Erschöpfung diskutiert worden. Was kann ich machen, wenn ich das Rootpasswort vergessen habe? Keine Panik! Starten Sie Ihr System neu und geben Sie boot -s an der Eingabeaufforderung Boot: ein, um in den Einzelbenutzermodus zu gelangen. Bei der Frage danach, welche Shell benutzt werden soll, drücken Sie einfach ENTER. Nun erscheint die Eingabeaufforderung &prompt.root;. Geben Sie mount -u / ein, um Ihr Root-Dateisystem für Lese- und Schreibzugriffe zu remounten und dann mount -a, um alle Dateisysteme zu remounten. Mit passwd root können Sie das Rootpasswort ändern und mit &man.exit.1; können Sie mit dem Booten fortfahren. Wie verhindere ich, dass das System mit Ctrl Alt Delete rebootet werden kann? Falls Sie syscons (den Standard-Treiber für die Konsole) benutzen, fügen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei ein: options SC_DISABLE_REBOOT Falls Sie den Konsolen-Treiber PCVT verwenden, benutzen Sie stattdessen die folgende Zeile: options PCVT_CTRL_ALT_DEL Alternativ können Sie auch die folgende sysctl-Variable setzen (die aktiviert wird, ohne dass Sie Ihr System dazu neu starten oder einen angepassten Kernel erstellen müssen): &prompt.root; sysctl hw.syscons.kbd_reboot=0 Wie kann ich Textdateien von DOS Systemen auf &unix; Systemen verwenden? Benutzen Sie diesen Perl-Befehl: &prompt.user; perl -i.bak -npe 's/\r\n/\n/g' file ... file ist/sind die zu verarbeitende(n) Datei(en). Die Änderungen erfolgen in der Originaldatei, die zuvor mit der Erweiterung .bak gesichert wird. Alternativ können Sie den Befehl &man.tr.1; benutzen: &prompt.user; tr -d '\r' < dos-text-file > unix-file dos-text-file ist die Datei, die den Text im DOS-Format enthält und unix-file wird die konvertierte Ausgabe enthalten. Diese Möglichkeit könnte etwas schneller sein, als die Benutzung von Perl. Wie beende ich Prozesse namentlich? Benutzen Sie &man.killall.1;. Warum nervt su mich damit, dass ich nicht in der ACL von root bin? Der Fehler stammt vom verteilten Authentifizierungssystem Kerberos. Das Problem ist nicht ernsthaft, aber störend. Sie können entweder su mit der Option -K benutzen, oder Kerberos deinstallieren, wie in der nächsten Frage beschrieben. Wie deinstalliere ich Kerberos? Um Kerberos aus dem System zu entfernen, müssen Sie die bin-Distribution der von Ihnen benutzen RELEASE neu installieren. Wenn Sie die CDROM besitzen, können Sie sie mounten (wir nehmen an, unter /cdrom) und folgende Schritte ausführen: &prompt.root; cd /cdrom/bin &prompt.root; ./install.sh Alternativ können Sie alle Zeilen mit MAKE_KERBEROS aus der /etc/make.conf entfernen und dann ein make world durchführen. Wo ist /dev/MAKEDEV hin? Ab FreeBSD 5.X werden Geräte automatisch von &man.devfs.8; zur Verfügung gestellt. Die Gerätetreiber erstellen die Gerätedateien, wenn diese benötigt werden. Das Skript /dev/MAKEDEV wird nicht mehr gebraucht. Wenn Sie FreeBSD 4.X oder eine frühere Version benutzen und /dev/MAKEDEV fehlt, dann haben Sie ein Problem. Kopieren Sie das Skript aus den Systemquellen. Es liegt wahrscheinlich unter /usr/src/etc/MAKEDEV. Wie füge ich Pseudo-Terminals zum System hinzu? Wenn Sie viele Benutzer von telnet, ssh, X oder screens haben, könnte es sein, dass Ihnen die Pseudo-Terminals ausgehen. So fügen Sie weitere hinzu: Erstellen und installieren Sie einen neuen Kernel mit der Zeile pseudo-device pty 256 in der Konfigurationsdatei. Führen Sie die Befehle &prompt.root; cd /dev &prompt.root; ./MAKEDEV pty{1,2,3,4,5,6,7} aus, um 256 Geräteeinträge für die neuen Terminals zu erstellen. Editieren Sie die Datei /etc/ttys und fügen Sie Zeilen für jeden der 256 Terminals ein. Sie sollten so aussehen, wie die existierenden Einträge, also etwa so: ttyqc none network Die Reihenfolge der Buchstabenzuordnung lautet mit einem regulären Ausdruck tty[pqrsPQRS][0-9a-v]. Starten Sie das System mit dem neuen Kernel erneut, wenn Sie bereit sind. Warum kann ich das Gerät snd0 nicht erstellen? Es gibt kein Gerät snd. Diese Bezeichnung ist nur ein Sammelbegriff für die diversen Geräte, die zusammen das Soundsystem von FreeBSD bilden, wie zum Beispiel mixer, sequencer, und dsp. So erzeugen Sie diese Geräte: &prompt.root; cd /dev &prompt.root; sh MAKEDEV snd0 Lassen Sie diesen Schritt aus, wenn Sie FreeBSD 5.0-RELEASE oder eine neuere Version mit &man.devfs.5; verwenden. Die Gerätedateien werden in diesem Fall automatisch in /dev erstellt. Wie lade ich /etc/rc.conf und starte /etc/rc neu, ohne zu rebooten? Gehen Sie in den Einzelbenutzermodus und dann zurück in den Mehrbenutzermodus. Geben Sie auf der Konsole folgendes ein: &prompt.root; shutdown now (Hinweis: ohne -r oder -h) &prompt.root; return &prompt.root; exit Ich wollte auf das aktuelle -STABLE updaten, und plötzlich läuft hier ein -BETAx, -RC oder -PRERELEASE. Was ist passiert? Kurze Antwort: Das ist nur ein anderer Name. RC ist die Abkürzung für Release Candidate. Es bedeutet, dass eine neue Release bevorsteht. Und -PRERELEASE bedeutet bei FreeBSD normalerweise, dass die Sourcen zur Vorbereitung auf eine Release eingefroren wurden (in einigen Releases wurde -BETA anstelle von -PRERELEASE verwendet). Ausführliche Antwort: Bei FreeBSD gibt es zwei Quellen für Releases. Die Major Releases wie 4.0-RELEASE und 5.0-RELEASE werden aus dem aktuellen Stand des Hauptzweiges der Entwicklung (besser und kürzer als -CURRENT bekannt) erzeugt. Minor Releases wie 4.1-RELEASE or 5.2-RELEASE stammen aus dem aktiven -STABLE Zweig. Seit 4.3-RELEASE gibt es es nun auch einen eigenen Zweig für jede Release, der für die Leute gedacht ist, die ein sehr konservativ weiterentwickeltes System benötigen (im Normalfall also nur Updates aus dem Bereich Sicherheit). Bevor in einem Zweig eine Release erfolgt, muss in diesem Zweig ein bestimmter Prozess ablaufen. Ein Teil dieses Prozesses ist der code freeze, der Stop der Weiterentwicklung. Sobald dieser Schritt erfolgt ist, wird der Name des Zweiges geändert, um anzuzeigen, dass demnächst eine Release erfolgen wird. Wenn der Zweig zum Beispiel 4.5-STABLE genannt wurde, wird der Name in 4.6-PRERELEASE geändert, um dies zu verdeutlichen. Weiterhin ist das ein Zeichen, dass jetzt besonders intensiv getestet werden sollte. In dieser Phase können Fehler im Sourcecode noch korrigiert werden. Wenn der Sourcecode so weit gereift ist, dass eine Release erstellt werden kann, wird der Name in 4.6-RC geändert, um genau dies anzuzeigen. In dieser Phase können nur noch extrem wichtige Korrekturen aufgenommen werden. Sobald die Release (in diesem Beispiel 4.6-RELEASE) erfolgt ist, wird der Zweig in 4.6-STABLE umbenannt. Weitere Informationen über Versionsnummern und die verschiedenen Entwicklungszweige enthält der Artikel Release Engineering. Als ich versucht habe, einen neuen Kernel zu installieren, ist das chflags fehlgeschlagen. Was mache ich jetzt? Kurze Antwort: Ihre Sicherheitseinstellung (der securelevel) ist wahrscheinlich größer als 0. Sie müssen das System neu starten und den Kernel im Single-User Modus installierten. Ausführliche Antwort: Wenn die Sicherheitseinstellung größer als 0 ist, erlaubt Ihnen FreeBSD nicht, die Systemflags zu ändern. Um den aktuellen Securelevel zu ermitteln, können Sie das folgende Kommando benutzen: &prompt.root; sysctl kern.securelevel Sie können die Sicherheitseinstellung nicht verringern, Sie müssen das System neu starten und den Kernel im Single-User Mode installieren oder die Sicherheitseinstellung in /etc/rc.conf ändern und dann das System neu starten. Weitere Detail zur Sicherheitseinstellung erhalten Sie in &man.init.8;, weitere Informationen zur rc.conf erhalten Sie in /etc/defaults/rc.conf und &man.rc.conf.5;. Ich kann die Systemzeit nicht um mehr als eine Sekunde verstellen. Was mache ich jetzt? Kurze Antwort: Ihre Sicherheitseinstellung (der securelevel) ist wahrscheinlich größer als 1. Sie müssen das System neu starten und die Systemzeit im Single-User Modus verstellen. Ausführliche Antwort: Wenn die Sicherheitseinstellung größer als 1 ist, erlaubt Ihnen FreeBSD nicht, die Systemzeit zu ändern. Um den aktuellen Securelevel zu ermitteln, können Sie das folgende Kommando benutzen: &prompt.root; sysctl kern.securelevel Sie können die Sicherheitseinstellung nicht verringern, Sie müssen das System neu starten und die Systemzeit im Single-User Mode ändern oder die Sicherheitseinstellung in /etc/rc.conf ändern und dann das System neu starten. Weitere Detail zur Sicherheitseinstellung erhalten Sie in &man.init.8;, weitere Informationen zur rc.conf erhalten Sie in /etc/defaults/rc.conf und &man.rc.conf.5;. Warum braucht &man.rpc.statd.8; 256 MByte Speicher? Nein, das Programm hat keinen Fehler und es verbraucht auch nicht 256 MByte Speicher. rpc.statd projiziert nur einen übertrieben großen Speicherbereich in seinen eigenen Adressraum. Von einem rein technischen Standpunkt aus ist das nichts verwerfliches, allerdings verwirrt es Programme wie &man.top.1; und &man.ps.1;. &man.rpc.statd.8; projiziert seine Statusdatei (die in /var liegt) in seinen Adressraum. Um die Probleme zu vermeiden, die bei einer Vergrößerung dieser Projektion entstehen könnten, wird gleich ein möglichst großer Speicherbereich benutzt. Dies kann man sehr schön im Sourcecode sehen: Die Längenangabe beim Aufruf von &man.mmap.2; ist 0x10000000, ein sechzehntel des Adressraums bei IA32, oder genau 256 MByte. Warum kann ich das Dateiattribut schg nicht löschen? Sie betreiben Ihr System mit einer erhöhten Sicherheitsstufe. Senken Sie die Sicherheitsstufe und versuchen Sie es dann noch einmal. Weitere Informationen erhalten Sie im FAQ Eintrag über Sicherheitsstufen und in der Online-Hilfe &man.init.8;. Warum funktioniert die .shosts Authentifizierung von SSH in neueren Version von FreeBSD nicht mehr? Die .shosts Authentifizierung funktioniert nicht mehr, weil &man.ssh.1; in neueren Versionen von FreeBSD nicht mehr SUID-root installiert wird. Um dieses Problem zu lösen, gibt es die folgenden Möglichkeiten: Um das Problem für immer zu lösen, müssen Sie in /etc/make.conf die Variable ENABLE_SUID_SSH auf true setzen und ssh neu übersetzen (oder make world ausführen. Übergangsweise können Sie auch die Dateirechte von /usr/bin/ssh auf 4555 setzen, indem Sie den Befehl chmod 4555 /usr/bin/ssh als root ausführen. Fügen Sie anschließend ENABLE_SUID_SSH= true in die Datei /etc/make.conf ein, damit diese Änderung erhalten bleibt, wenn Sie das nächste Mal make world ausführen. Was ist vnlru? vnlru schreibt vnodes auf Platte und gibt sie wieder frei, falls das System die Grenzwert kern.maxvnodes erreicht. Dieser Thread des Kernel tut meistens gar nichts und wird nur aktiv, wenn Sie extrem viel RAM haben und gleichzeitig auf viele zehntausende kleine Dateien zugreifen. Was bedeuten die Zustände, die top für Speicherseiten ausgibt? Speicherseiten werden vom Kernel in verschiedenen Listen verwaltet: Active: Seiten, die vor Kurzem benutzt wurden. Inactive: Seiten, die länger nicht benutzt wurden. Cache: Meistens Seiten, die vorher im Zustand Inactive waren und noch gültige Daten enthalten. Diese Seiten können sofort in ihrem alten Kontext oder in einem neuen Kontext verwendet werden. Wenn eine Seite unverändert (clean) ist, kann ein Zustandswechsel direkt von Active nach Cache erfolgen. Ob dieser Zustandswechsel möglich ist, wird durch die Seitenersetzungsstrategie bestimmt, die der Entwickler des VM-Systems festgelegt hat. Free: Seiten, die keine Daten enthalten. Diese Seiten können sofort benutzt werden, wenn Seiten im Zustand Cache nicht benutzt werden können. Seiten im Zustand Free können auch während eines Interrupts angefordert werden. Wired: Seiten, die fest im Speicher liegen und nicht ausgelagert werden können. Normalerweise werden solche Seiten vom Kernel benutzt, manchmal werden Sie aber auch für spezielle Zwecke von Prozessen verwendet. Seiten im Zustand Inactive werden oft auf Plattenspeicher geschrieben (sozusagen ein sync des VM-Systems). Wenn die CPU erkennen kann, das eine Seite unmodifiziert (clean) ist, kann auch eine Active-Seite auf den Plattenspeicher ausgeschrieben werden. In bestimmten Situationen ist es von Vorteil, wenn ein Block von VM-Seiten, unabhängig von seinem Zustand, ausgeschrieben werden kann. Die Inactive-Liste enthält wenig benutzte Seiten, die ausgeschrieben werden könnten. Seiten im Zustand Cached sind schon ausgeschrieben und stehen Prozessen für die Verwendung im alten oder in einem neuen Kontext zur Verfügung. Seiten im Zustand Cache sind nicht ausreichend geschützt und können während Unterbrechungen nicht benutzt werden. Die eben beschriebene Behandlung von Speicherseiten kann durch weitere Zustände (wie das das Busy-Flag) verändert werden. Wie viel freien Speicher hat mein System? Es gibt verschiedene Arten von freiem Speicher. Eine Art ist die Speichermenge, die sofort, ohne etwas auszulagern, zur Verfügung steht. Der gesamte VM-Bereich ist eine weitere Art des freien Speichers. Die Betrachtung ist komplex, hängt aber von der Größe des Swap-Bereichs und der Größe des Arbeitsspeichers ab. Es gibt weitere Definitionen für freien Speicher, die aber alle relativ nutzlos sind. Wichtig ist hingegen, dass wenig Seiten ausgelagert werden (paging) und der Swap-Bereich ausreichend groß ist. Ich kann /var/empty nicht löschen! Das Verzeichnis /var/empty wird von &man.sshd.8; benötigt, wenn es mit Privilege Separation läuft. Das Verzeichnis /var/empty ist leer, gehört root und ist durch das Dateiattribut schg geschützt. Wir empfehlen Ihnen, das Verzeichnis zu belassen. Sollten Sie es aber trotzdem löschen wollen, müssen Sie zuerst das schg-Attribut entfernen. Schauen Sie sich dazu die Hilfeseite &man.chflags.1; an und beachten Sie die Antwort auf die Frage wie das schg-Attribut entfernt wird.
Das X Window System und virtuelle Konsolen Was ist das X Window System? Das X Window System (oder auch nur X11) ist das am häufigsten verwendete Window System für &unix;- und &unix;-ähnliche Systeme, zu denen auch &os; gehört. Der X  Protokollstandard wird von der X.org Foundation definiert und liegt aktuell in Version 11 Relase &xorg.version; vor und wird häufig auch nur als X11 bezeichnet. Das X Window System wurde für viele verschiedene Architekturen und Betriebssysteme implementiert. Eine serverseitige Implementierung wird dabei als X-Server bezeichnet. Welche X-Implementierungen sind für &os; verfügbar? Früher war &xfree86;, die X-Implementierung des XFree86 Projects, Inc., der Standard unter &os;. Dieser X-Server wurde bis einschließlich &os; Version 4.10 und 5.2 als Standard-X-Server installiert. Die von &xorg; veröffentlichte Implementierung diente nur als Referenzplattform, weil der verwendete Code über die Jahre sehr ineffizient geworden war. Anfang 2004 verließen einige Entwickler das XFree86 Project, um fortan &xorg; direkt zu unterstützen. Der Grund dafür waren Meinungsverschiedenheiten über die Geschwindigkeit der Weiterentwicklung, die zukünftige Ausrichtung des Projekts sowie persönliche Differenzen. Zur gleichen Zeit aktualisierte &xorg; ihren Quellcodebaum auf die &xfree86;-Version 4.3.99.903, brachte viele Änderungen, die bisher getrennt verwaltet worden waren, in das Projekt ein und veröffentlichte das Paket als X11R6.7.0, bevor &xfree86; die Lizenz änderte. Ein seperates, aber mit &xorg; verbundenes Projekt, freedesktop.org (oder fd.o), arbeitet an einer Überarbeitung des ursprünglichen &xfree86;-Codes, um einerseits mehr Rechenarbeit an die Grafikkarten zu übertragen (mit dem Ziel einer deutlich erhöhten Geschwindigkeit) und andererseits den Code zu modularisieren (mit dem Ziel einer verbesserten Wartung, einer schnelleren Entwicklung sowie einer vereinfachten Konfiguration). &xorg; plant, die Weiterentwicklungen von freedesktop.org in seine zukünftigen Versionen zu integrieren. Seit Juli 2004 ist &xorg; der Standard-X-Server für &os;. Die &xfree86;-Ports (x11/XFree86-4) sind aber weiterhin über die Ports-Sammlung verfügbar. Weitere Informationen zum X Window System finden Sie im X11-Kapitel des FreeBSD-Handbuchs. Der vorletzte Absatz beschreibt nur die Standardeinstellung. Es ist nach wie vor möglich, beide Implementierungen unter &os; zu verwenden. Lesen Sie dazu die Anweisungen im Eintrag vom 23.07.2004 in der Datei /usr/ports/UPDATING. Beachten Sie, dass es derzeit nicht möglich ist, Teile aus beiden Implementierungen parallel zu verwenden. Sie müssen sich also für eine der beiden Implementierungen entscheiden. Funktionieren meine Programme auch mit der &xorg;-Implementierung noch? Der &xorg;-Server basiert auf der gleichen X11R6-Spezifikation, die auch &xfree86; verwendet, daher sollte ein Großteil der Anwendungen problemlos funktionieren. Einige selten verwendete Protokolle werden allerdings nicht mehr unterstützt (XIE, PEX, sowie lbxproxy). Die beiden ersten Protokolle wurden allerdings auch vom &xfree86;-Port nicht unterstützt. Warum hat sich das X Project überhaupt aufgespalten? Diese Frage ist nicht &os;-spezifisch. Es gibt zu diesem Thema umfangreiche Postings in diversen Mailinglist-Archiven. Suchen Sie daher über eine Suchmaschine danach, statt diese Frage auf einer &os;-Mailingliste zu stellen. Warum hat sich &os; für &xorg; als Standard-X-Server entschieden? Die Entwickler von &xorg; geben an, dass sie neue Versionen rascher veröffentlichen und neue Eigenschaften schneller implementieren wollen. Außerdem verwenden sie nach wie vor die traditionelle X-Lizenz, während &xfree86; nun eine veränderte Version benutzt. Diese Entscheidung wird nach wie vor heftig diskutiert. Nur die Zeit wird zeigen, welche Implementierung technisch überlegen ist. Jeder &os;-Benutzer hat aber die freie Wahl zwischen den beiden Implementierungen. Ich möchte X benutzen, was muss ich tun? Wenn Sie X auf einem existierenden System installieren wollen, sollten Sie den Meta-Port x11/xorg verwenden, der alle benötigen Komponenten baut und installiert. Lesen Sie danach die Dokumentation zu &man.xorgconfig.1;, das Sie bei der Konfiguration des X-Servers für Ihre Grafikkarte, Maus usw. unterstützt. Bevorzugen Sie eine grafische Konfigurationsoberfläche, sollten Sie sich &man.xorgcfg.1; ansehen. Weitere Informationen finden sich im Abschnitt X11 des FreeBSD-Handbuchs. Evtentuell möchten Sie sich auch den Xaccel-Server ansehen. Nähere Details finden Sie im Abschnitt über Xi Graphics. Ich habe versucht, X zu starten, aber wenn ich startx eingebe, erhalte ich die Fehlermeldung KDENABIO failed (Operation not permitted). Was soll ich jetzt machen? Das System läuft auf einer erhöhten Sicherheitsstufe (securelevel). X kann auf einer erhöhten Sicherheitsstufe nicht gestartet werden, weil X dazu Schreibzugriff auf /dev/io benötigt. Lesen Sie dazu auch &man.init.8;. Die Frage ist also eigentlich, was Sie anders machen sollten. Sie haben zwei Möglichkeiten: Setzen Sie die Sicherheitsstufe wieder zurück auf 0 (die Einstellung erfolgt in der Regel in /etc/rc.conf) oder starten Sie &man.xdm.1; während des Starts des Systems, bevor die Sicherheitsstufe erhöht wird. Der Abschnitt enthält Informationen darüber, wie Sie &man.xdm.1; beim Start des Systems starten können. Warum funktioniert meine Maus unter X nicht? Wenn Sie syscons (den Standard-Konsoltreiber) benutzen, können Sie FreeBSD so konfigurieren, dass auf jedem virtuellen Bildschirm ein Mauszeiger unterstützt wird. Um Konflikte mit X zu vermeiden, unterstützt syscons ein virtuelles Gerät mit dem Namen /dev/sysmouse. Über dieses virtuelle Gerät können andere Programme alle Mausbewegungen und Mausclicks im MouseSystems-Format mitlesen. Falls Sie Ihre Maus auf einer oder mehreren virtuellen Konsolen und X benutzen wollen, sollten Sie zunächst lesen und dann moused installieren. Die Datei /etc/X11/xorg.conf sollte die folgenden Einträge enthalten: Section "InputDevice" Option "Protocol" "SysMouse" Option "Device" "/dev/sysmouse" ..... Einige Leute ziehen es vor, unter X /dev/mouse zu benutzen. Hierzu sollte /dev/mouse nach /dev/sysmouse gelinkt werden: &prompt.root; cd /dev &prompt.root; rm -f mouse &prompt.root; ln -s sysmouse mouse Kann ich meine Rad-Maus auch unter X benutzen? Ja. Dazu müssen Sie X nur mitteilen, dass Sie eine Maus mit 5 Tasten haben. Dazu fügen Sie die Zeilen Buttons 5 sowie ZAxisMapping 4 5 in den Abschnitt InputDevice der Datei /etc/X11/xorg.conf ein. Das Beispiel zeigt, wie ein solcher Abschnitt aussehen könnte. Abschnitt <quote>InputDevice</quote> für Rad-Mäuse in der Konfigurationsdatei von &xorg; Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "Buttons" "5" Option "ZAxisMapping" "4 5" EndSection <quote>.emacs</quote> Beispiel für seitenweises Blättern mit einer Rad-Maus (optional) ;; wheel mouse (global-set-key [mouse-4] 'scroll-down) (global-set-key [mouse-5] 'scroll-up) X verbietet Verbindungen von entfernten Systemen! Aus Sicherheitsgründen verbietet der X-Server in der Voreinstellung Verbindungen von entfernten Systemen. Starten Sie den X-Server mit der Option , wenn Sie Verbindungen von entfernten Systemen erlauben wollen: &prompt.user; startx -listen_tcp Wieso funktionieren Menüs und Dialoge in X nicht richtig? Versuchen Sie, die Num Lock-Taste auszustellen. Falls Ihre Num Lock-Taste beim Booten standardmäßig eingeschaltet ist, sollten Sie die folgende Zeile in den Abschnitt Keyboard der Datei /etc/X11/xorg.conf einfügen: # Let the server do the NumLock processing. This should only be # required when using pre-R6 clients ServerNumLock Was ist eine virtuelle Konsole und wie erstelle ich mehr? Mit virtuellen Konsolen können Sie mehrere simultane Sitzungen auf einer Maschine laufen lassen, ohne so komplizierte Dinge wie die Einrichtung eines Netzwerkes oder die Benutzung von X zu benötigen. Wenn das System startet, wird es nach der Anzeige aller Bootmeldungen eine Eingabeaufforderung auf dem Bildschirm anzeigen. Sie können dann auf der ersten virtuellen Konsole Ihren Benutzernamen und das Passwort eingeben und anfangen, zu arbeiten (oder zu spielen!). Gelegentlich möchten Sie möglicherweise eine weitere Sitzung starten wollen, vielleicht, um die Dokumentation zu einem Programm, das Sie gerade benutzen, einzusehen, oder, um Ihre Mails zu lesen, während Sie auf das Ende einer FTP-Übertragung warten. Drücken Sie einfach Alt F2 (halten Sie die Alt-Taste gedrückt und drücken Sie die Taste F2) und Sie gelangen zur Anmelde-Aufforderung auf der zweiten virtuellen Konsole! Wenn Sie zurück zur ersten Sitzung möchten, drücken Sie Alt F1 . Die Standardinstallation von FreeBSD bietet acht aktivierte virtuelle Konsolen. Mit Alt F1 , Alt F2 , Alt F3 und so weiter wechseln Sie zwischen diesen virtuellen Konsolen. Um mehr von ihnen zu aktivieren, editieren Sie /etc/ttys und fügen Einträge für ttyv4 bis zu ttyvc nach dem Kommentar zu virtuellen Terminals ein: # Edit the existing entry for ttyv3 in /etc/ttys and change # "off" to "on". ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/libexec/getty Pc" cons25 on secure ttyv9 "/usr/libexec/getty Pc" cons25 on secure ttyva "/usr/libexec/getty Pc" cons25 on secure ttyvb "/usr/libexec/getty Pc" cons25 on secure Benutzen Sie so wenig oder soviele, wie Sie möchten. Je mehr virtuelle Terminals Sie benutzen, desto mehr Ressourcen werden gebraucht; das kann wichtig sein, wenn Sie 8MB RAM oder weniger besitzen. Sie können auch secure in insecure ändern. Wenn Sie einen X-Server benutzen möchten, müssen Sie mindestens ein virtuelles Terminal unbenutzt (oder ausgeschaltet) lassen damit der Server es benutzen kann. Das heißt, dass Sie Pech haben, wenn Sie für jede Ihrer 12 Alt-Funktionstasten eine Anmeldeaufforderung haben möchten - Sie können das nur für elf von ihnen tun, wenn Sie einen X-Server auf derselben Maschine laufen lassen möchten. Der einfachste Weg, eine Konsole zu deaktivieren, ist, sie auszuschalten. Wenn Sie zum Beispiel die oben erwähnte volle Zuordnung aller 12 Terminals hätten, müssten Sie die Einstellung für das virtuelle Terminal 12 von: ttyvb "/usr/libexec/getty Pc" cons25 on secure in: ttyvb "/usr/libexec/getty Pc" cons25 off secure ändern. Wenn Ihre Tastatur nur über zehn Funktionstasten verfügt, bedeutet das: ttyv9 "/usr/libexec/getty Pc" cons25 off secure ttyva "/usr/libexec/getty Pc" cons25 off secure ttyvb "/usr/libexec/getty Pc" cons25 off secure (Sie können diese Zeilen auch einfach löschen.) Die einfachste (und sauberste) Möglichkeit, die virtuellen Konsolen zu aktivieren, ist, zu rebooten. Wenn Sie jedoch auf keinen Fall rebooten möchten, können Sie auch einfach das X Window System herunterfahren und als root &prompt.root; kill -HUP 1 ausführen. Es ist unbedingt erforderlich, dass Sie das X Window System vollständig herunterfahren, falls es läuft. Falls Sie es nicht tun, könnte es sein, dass sich ihr System nach der Eingabe des kill-Befehls aufhängt. Wie greife ich von X aus auf virtuelle Konsolen zu? Benutzen Sie Ctrl Alt Fn um auf eine virtuelle Konsole umzuschalten. Mit Ctrl Alt F1 würden Sie zur ersten virtuellen Konsole umschalten. Sobald Sie auf eine virtuelle Konsole umgeschaltet haben, können Sie ganz normal Alt Fn benutzen, um zwischen den einzelnen virtuellen Konsolen umzuschalten. Um zu Ihrer X-Sitzung zurückzukehren, müssen Sie auf die virtuelle Konsole umschalten, auf der X läuft. Wenn Sie X über der Eingabeaufforderung gestartet haben (z.B. mit startx), benutzt X die nächste freie virtuelle Konsole und nicht die Konsole, von der es gestartet wurde. Wenn Sie acht aktive virtuelle Konsole haben, dann wird X die neunte benutzen und Sie können mit AltF9 umschalten. Wie starte ich XDM beim Booten? Es gibt zwei Denkansätze, wie &man.xdm.1; zu starten ist. Bei dem einen wird xdm unter Nutzung des mitgelieferten Beispiels über /etc/ttys (&man.ttys.5;) gestartet, während beim zweiten Ansatz rc.local (&man.rc.8;) oder das Skript X.sh im Verzeichnis /usr/local/etc/rc.d verwendet wird. Beide Ansätze sind gleichwertig und der eine wird in Situationen funktionieren, in denen der andere es nicht tut. In beiden Fällen ist das Ergebnis das gleiche: X liefert eine graphische Anmeldeaufforderung. Die ttys-Methode hat den Vorteil, dass dokumentiert ist, auf welchem vty X gestartet wird und der Neustart des X-Servers beim Abmelden an init übergeben wird. Die rc.local-Methode erleichtert ein Killen von xdm, falls Probleme beim Start des X-Servers auftreten sollten. Beim Laden von rc.local sollte xdm ohne irgendwelche Argumente (das heißt als Daemon) gestartet werden. xdm muss gestartet werden NACHDEM getty läuft, andernfalls entsteht ein Konflikt zwischen getty und xdm und die Konsole bleibt gesperrt. Der beste Weg, um dies zu vermeiden, ist, das Skript für etwa zehn Sekunden anzuhalten und dann xdm zu starten. Wenn Sie xdm durch einen Eintrag in /etc/ttys starten lassen, kann es zu einem Konflikt zwischen xdm und &man.getty.8; kommen. Um dieses Problem zu vermeiden, sollten Sie die Nummer des vt in die Datei /usr/local/lib/X11/xdm/Xservers eintragen. :0 local /usr/local/bin/X vt4 Diese Zeile führt dazu, dass der X Server /dev/ttyv3 nutzt. Die beiden Zahlen weichen voneinander ab: Der X-Server beginnt die Zählung der vty bei 1, während der FreeBSD-Kernel bei 0 beginnt. Wieso erhalte ich die Meldung Couldn't open console, wenn ich xconsole benutze? Wenn Sie X mit startx starten, werden die Zugriffsrechte für /dev/console leider nicht geändert, was dazu führt, dass Dinge wie xterm -C und xconsole nicht funktionieren. Das hängt damit zusammen, wie die Zugriffsrechte für die Konsole standardmäßig gesetzt sind. Auf einem Mehrbenutzersystem möchte man nicht unbedingt, dass jeder Benutzer einfach auf die Systemkonsole schreiben kann. Für Benutzer, die sich auf einer Maschine direkt mit einem VTY anmelden, existiert die Datei &man.fbtab.5;, um derartige Probleme zu lösen. In Kürze: sorgen Sie dafür, dass sich eine nicht auskommentierte Zeile der Form /dev/ttyv0 0600 /dev/console in der Datei /etc/fbtab befindet. Das sorgt dafür, dass wer auch immer sich auf /dev/ttyv0 anmeldet, auch die Konsole besitzt. Früher konnte ich &xfree86; als normaler User starten. Warum sagt mir das System jetzt, dass ich root sein muss? Alle X-Server müssen mit der ID root laufen, um direkt auf die Videohardware zuzugreifen. Die älteren Versionen von &xfree86; (bis einschließlich 3.3.6) installierten alle mitgelieferten Server so, dass sie automatisch unter ID root ausgeführt werden (setuid to root). Dies stellt natürlich eine Gefahrenquelle dar, da die X-Server große, komplexe Programme sind. Alle neueren Versionen von &xfree86; installieren die Server aus genau diesem Grund nicht mehr "setuid root". Es ist natürlich nicht tragbar, den X-Server immer mit der ID root laufen zu lassen; auch aus Gründen der Sicherheit ist es keine gute Idee. Es gibt zwei Möglichkeiten, um X auch als normaler Benutzer starten zu können. Die erste ist die Verwendung von xdm oder eines ähnlichen Programms; die zweite ist die Benutzer von Xwrapper. xdm ist ein ständig laufendes Programm, mit dem Logins über eine graphische Benutzeroberfläche sind. Es wird normalerweise beim Systemstart initialisiert und für die Authentifizierung der Benutzer und den Start ihrer Sitzungen verantwortlich. Es ist also die graphische Entsprechung von &man.getty.8; und &man.login.1;. Weitere Informationen zum Thema xdm finden Sie in der &xfree86; Dokumentation und dem entsprechenden FAQ-Eintrag. Xwrapper ist eine Hülle für den X-Server. Mit diesem kleinen Utility ist es möglich, manuell den X-Server zu starten und weiterhin eine annehmbare Sicherheit zu haben. Das Tools prüft, ob die per Kommandozeile übergebenen Argumente halbwegs sinnvoll sind. Wenn dies der Fall ist, startet es den entsprechenden X-Server. Wenn Sie (aus welchem Grund auch immer) keine graphische Anmeldung wollen, ist Xwrapper die optimale Lösung. Wenn Sie die vollständige Ports-Sammlung installiert haben, finden Sie das Tool im Verzeichnis /usr/ports/x11/wrapper. Warum funktioniert meine PS/2-Maus nicht richtig? Ihre Maus und der Maustreiber sind etwas aus der Synchronisation geraten. In seltenen Fällen kann es jedoch sein, dass der Treiber fälschlicherweise Synchronisationsprobleme meldet und Sie in den Kernelmeldungen folgendes sehen: psmintr: out of sync (xxxx != yyyy) und Ihre Maus nicht richtig zu funktionieren scheint. Falls das passiert, deaktivieren Sie den Code zur Überprüfung der Synchronisation, indem Sie die Treiberangaben für den PS/2-Maustreiber auf 0x100 setzen. Rufen Sie UserConfig durch Angabe der Option am Boot-Prompt auf: boot: -c Geben sie dann in der Kommandozeile von UserConfig folgendes ein: UserConfig> flags psm0 0x100 UserConfig> quit Meine PS/2-Maus von MouseSystems scheint nicht zu funktionieren. Es wurde berichtet, dass einige Modelle der PS/2-Mäuse von MouseSystems nur funktionieren, wenn sie im hochauflösenden Modus betrieben werden. Andernfalls springt der Mauszeiger sehr oft in die linke obere Ecke des Bildschirms. Das Flag 0x04 des Maustreibers bringt die Maus in den hochauflösenden Modus. Rufen Sie UserConfig durch Angabe der Option am Boot-Prompt auf: boot: -c Geben sie dann in der Kommandozeile von UserConfig folgendes ein: UserConfig> flags psm0 0x04 UserConfig> quit Lesen Sie den vorigen Abschnitt über eine andere mögliche Ursache für Probleme mit der Maus. Wie kann ich einen anderen X-Server installieren? &os;-Versionen vor 5.3 verwendeten &xfree86; 4.X als Standard-X-Server. Seither wird &xorg; als Standard-X-Server verwendet. Wenn Sie einen anderen X-Server installieren wollen, müssen Sie die folgende Zeile in Ihre /etc/make.conf einfügen. (Existiert die Datei nicht, müssen Sie sie zuvor anlegen.) X_WINDOW_SYSTEM= xorg Diese Variable kann die Werte xorg, xfree86-4, oder xfree86-3 annehmen. Wie vertausche ich die Maustasten? Benutzen Sie den Befehl xmodmap -e "pointer = 3 2 1" in Ihrer .xinitrc oder .xsession. Wie installiere ich einen Splash-Screen und wo finde ich sie? &os; erlaubt die Anzeige von Splash-Screens während des Bootvorganges. Die Splash-Screens dürfen Bitmaps mit 256 Farben (*.BMP) oder ZSoft-PCX-Dateien *.PCX) sein. Damit sie mit normalen VGA-Karten dargestellt werden können, darf die Größe 320x200 Bildpunkte nicht überschreiten. Wenn Sie in ihrem Kernel die VESA-Unterstützung eingebunden haben, beträgt die maximale Größe 1024x768 Pixel. Die derzeitige VESA-Unterstützung kann entweder direkt durch die Kernelkonfigurationsoption VESA in den Kernel eingebunden werden, oder durch das Laden des VESA-kld-Moduls während des Bootens. Um einen Splash-Screen zu benutzen, müssen Sie die Startdateien, die den Bootprozess von &os; kontrollieren, modifizieren. Dazu müssen Sie die Datei /boot/loader.rc erstellen, die die folgenden Zeilen enthält: include /boot/loader.4th start Außerdem benötigen Sie die Datei /boot/loader.conf, die die folgenden Zeilen enthält: splash_bmp_load="YES" bitmap_load="YES" Dies setzt voraus, dass Sie /boot/splash.bmp als Ihren Splash-Screen benutzen. Wenn Sie lieber eine PCX-Datei benutzen wollen, dann kopieren Sie sie nach /boot/splash.pcx, erstellen Sie eine Datei /boot/loader.rc, wie oben beschrieben und eine Datei /boot/loader.conf, die folgendes enthält: splash_pcx_load="YES" bitmap_load="YES" bitmap_name="/boot/splash.pcx" Alles, was Sie nun brauchen, ist ein Splash-Screen. Hierzu können Sie durch die Gallerie bei surfen. Kann ich die &windows;-Tasten unter X benutzen? Ja, Sie müssen lediglich mit &man.xmodmap.1; festlegen, welche Aktion diese Tasten auslösen sollen. Unter der Annahme, dass alle &windows; Tastaturen dem Standard entsprechen, lauten die Keycodes für die drei Tasten 115 - &windows;-Taste zwischen den Alt- und Strg-Tasten auf der linken Seite 116 - &windows;-Taste rechts von der AltGr-Taste 117 - Menü-Taste, links von der rechten Strg-Taste Nach der folgenden Anweisung erzeugt die linke &windows;-Taste ein Komma. &prompt.root; xmodmap -e "keycode 115 = comma" Sie werden Ihren Window Manager wahrscheinlich neu starten müssen, damit diese Einstellung wirksam wird. Um die neue Belegung der &windows;-Tasten automatisch beim Start von X zu erhalten, könnten Sie entsprechende xmodmap Anweisungen in ihre ~/.xinitrc einfügen. Die bevorzugte Variante ist aber, eine Datei mit dem Namen ~/.xmodmaprc zu erzeugen, die nur die Parameter für den Aufruf von xmodmap enthält. Wenn Sie mehrere Tasten umdefinieren wollen, muss jede Definition in eine eigene Zeile gesetzt werden. Weiterhin müssen Sie in Ihrer ~/.xinitrc noch die folgende Zeile einfügen: xmodmap $HOME/.xmodmaprc Sie könnten die drei Tasten zum Beispiel mit den Funktionen F13, F14 und F15 belegen. Dadurch ist es sehr einfach, diese Tasten mit nützlichen Funktionen eines Programmes oder Desktops zu verknüpfen. Falls Sie das auch tun wollen, sollten in Ihrer ~/.xmodmaprc die folgenden Anweisungen stehen. keycode 115 = F13 keycode 116 = F14 keycode 117 = F15 Falls Sie zum Beispiel fvwm2 benutzen, können Sie ihn so einstellen, dass F13 das Fenster unter dem Mauszeiger minimiert bzw. maximiert. F14 holt das Fenster unter dem Mauszeiger in den Vordergrund bzw. ganz nach hinten, wenn es bereits im Vordergrund ist. F15 öffnet das Arbeitsplatz (Programme) Menü, auch wenn der Cursor nicht auf den Hintergrund zeigt. Dies ist extrem praktisch, wenn der gesamte Bildschirm von Fenster belegt wird; als kleiner Bonus gibt es sogar einen Zusammenhang zwischen dem Symbol auf der Taste und der durchgeführten Aktion. Dieses Verhalten kann man mit den folgenden Einträgen in der Datei ~/.fvwmrc erhalten: Key F13 FTIWS A Iconify Key F14 FTIWS A RaiseLower Key F15 A A Menu Workplace Nop Wird 3D Hardware Beschleunigung für &opengl; unterstützt? Dies hängt davon ab, welche Version von &xfree86; oder &xorg; und welche Grafikkarte Sie verwenden. Wenn Sie eine Karte mit NVIDIA-Chipsatz besitzen, benutzen Sie die binären Treiber für FreeBSD, die Sie auf der Drivers-Seite von NVIDEA finden. Wenn Sie &xfree86;-4 oder &xorg; mit Grafikkarten wie der Matrox G200/G400, ATI Rage 128/Radeon, oder 3dfx Voodoo 3, 4, 5, und Banshee einsetzen, erhalten Sie weitere Informationen auf der Webseite &xfree86;-4 Direct Rendering on FreeBSD. Netzwerke Woher kann ich Informationen über Diskless Booting bekommen? Diskless Booting bedeutet, dass die FreeBSD-Maschine über ein Netzwerk gebootet wird und die notwendigen Dateien von einem Server anstatt von der Festplatte liest. Vollständige Details finden Sie im Handbucheintrag über den plattenlosen Betrieb. Kann eine FreeBSD-Maschine als Netzwerkrouter genutzt werden? Ja. Genaue Informationen zu diesem Thema finden Sie im Abschnitt Gateways und Routen des Handbuchkapitels Weiterführende Netzwerkthemen. Kann ich meine &windows;-Maschine über FreeBSD ans Internet anbinden? Personen, die diese Frage stellen, haben typischerweise zwei PCs zu Hause: einen mit FreeBSD und einen mit einer &windows;-Variante. Die Idee ist, die FreeBSD-Maschine an das Internet anzubinden, um in der Lage zu sein, von der &windows;-Maschine über die FreeBSD-Maschine auf das Internet zuzugreifen. Das ist tatsächlich nur ein Spezialfall der vorherigen Frage. Das User-Mode &man.ppp.8; von &os; kennt die Option . Wenn Sie &man.ppp.8; mit der Option starten, in /etc/rc.conf die Variable gateway_enable auf YES setzen und Ihre &windows;-Maschine korrekt konfigurieren, sollte das hervorragend funktionieren. Weitere Informationen erhalten Sie in der Hilfeseite &man.ppp.8; oder im Abschnitt User-PPP des Handbuchs. Wenn Sie Kernel-Mode PPP verwenden oder ihre Verbindung zum Internet über Ethernet erstellt wurde, müssen Sie &man.natd.8; verwenden. Weitere Informationen dazu finden Sie im natd-Abschnitt des Handbuchs. Unterstützt FreeBSD SLIP und PPP? Ja. Lesen Sie die Manualpages &man.slattach.8;, &man.sliplogin.8;, &man.pppd.8; und &man.ppp.8;. &man.ppp.8; und &man.pppd.8; liefern Unterstützung sowohl für eingehende, als auch ausgehende Verbindungen. &man.sliplogin.8; behandelt ausschließlich eingehende Verbindungen und &man.slattach.8; behandelt ausschließlich ausgehende Verbindungen. Diese Programme werden im Abschnitt PPP und SLIP des Handbuchs beschrieben. Falls Sie nur durch einen Shell-Account Zugang zum Internet haben, sehen Sie sich einmal das Package net/slirp an. Es kann Ihnen (eingeschränkten) Zugang zu Diensten wie ftp und http direkt von Ihrer lokalen Maschine aus ermöglichen. Unterstützt FreeBSD NAT oder Masquerading? Ja. Wenn Sie NAT über eine User-PPP-Verbindung einsetzen wollen, lesen Sie bitte den User-PPP Abschnitt des Handbuchs. Wollen Sie NAT über eine andere Verbindung einsetzen, lesen Sie bitte den NATD Abschnit des Handbuchs. Wie verbinde ich zwei FreeBSD-Maschinen mit PLIP über die parallele Schnittstelle? Dieses Thema wird im Handbuch-Kapitel PLIP behandelt. Wieso kann ich das Gerät /dev/ed0 nicht erstellen? Weil das nicht notwendig ist. Bei Berkeley-basierten Netzwerkimplementationen kann nur vom Kernel-Code aus direkt auf Netzwerkkarten zugegriffen werden. Zur weiteren Information lesen Sie bitte die Datei /etc/rc.network und die Manualpages zu den unterschiedlichen Netzwerkprogrammen, die dort erwähnt werden. Falls Sie danach total verwirrt sind, sollten Sie sich ein Buch besorgen, das die Netzwerkadministration auf einem anderen BSD-ähnlichen Betriebssystem beschreibt; mit wenigen signifikanten Ausnahmen gleicht die Netzwerkadministration auf FreeBSD im Grunde der auf &sunos; 4.0 oder Ultrix. Wie kann ich Ethernet-Aliase einrichten? Wenn sich die zweite Adresse im gleichen Subnetz befindet wie eine der Adressen, die bereits auf dem Interface konfiguriert sind, benutzen Sie netmask 0xffffffff in Ihrer &man.ifconfig.8; Befehlszeile, wie z.B.: &prompt.root; ifconfig ed0 alias 204.141.95.2 netmask 0xffffffff Andernfalls geben sie die Adresse und die Netzmaske so an, wie sie es bei einem normalen Interface auch tun würden: &prompt.root; ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00 Wie bringe ich meine 3C503 dazu, den anderen Anschluss zu benutzen? Wenn Sie die anderen Anschlüsse benutzen möchten, müssen Sie einen zusätzlichen Parameter in der &man.ifconfig.8;-Befehlszeile spezifizieren. Der Standard-Anschluss ist link0. Um den AUI-Anschluss anstelle des BNC-Anschlusses zu verwenden, benutzen Sie link2. Diese Angaben sollten durch Benutzung der Variablen ifconfig_* in der Datei /etc/rc.conf spezifiziert werden. Warum habe ich Probleme mit NFS und FreeBSD? Gewisse PC-Netzwerkkarten sind (um es gelinde auszudrücken) besser als andere und können manchmal Probleme mit netzwerkintensiven Anwendungen wie NFS verursachen. Weitere Informationen zu diesem Thema finden Sie im Handbucheintrag zu NFS. Warum kann ich per NFS nicht von einer &linux;-Maschine mounten? Einige Versionen des NFS-Codes von &linux; akzeptieren Mount-Requests nur von einem privilegierten Port. Versuchen Sie &prompt.root; mount -o -P linuxbox:/blah /mnt Warum kann ich per NFS nicht von einer Sun-Maschine mounten? Sun Workstations mit &sunos; 4.X akzeptieren Mount-Requests nur von einem privilegierten Port. Versuchen Sie &prompt.root; mount -o -P sunbox:/blah /mnt Warum meldet mir mountd auf meinem FreeBSD NFS-Server ständig can't change attributes und bad exports list? Die häufigste Ursache für dieses Problem ist, dass Sie den Aufbau der &man.exports.5; nicht oder nicht richtig verstanden haben. Überprüfen Sie Ihre &man.exports.5; und lesen das Kapitel NFS im Handbuch, speziell den Abschnitt Konfiguration. Warum habe ich Probleme, per PPP mit NeXTStep-Maschinen zu kommunizieren? Versuchen Sie, die TCP-Erweiterung in /etc/rc.conf zu deaktivieren, indem Sie die folgende Variable auf NO setzen: tcp_extensions=NO Xylogic's Annex-Maschinen arbeiten hier auch fehlerhaft und Sie müssen die obige Änderung benutzen, um über Sie Verbindungen herzustellen. Wie aktiviere ich die Unterstützung für IP-Multicast? Multicast-Host-Funktionen werden standardmäßig unterstützt. Wenn Sie Ihre Maschine als Multicast-Router betreiben wollen, müssen Sie Ihren Kernel mit der Option MROUTING neu kompilieren und &man.mrouted.8; starten. Wenn Sie die Variable mrouted_enable in der Datei /etc/rc.conf auf "YES" setzen, wird &man.mrouted.8; während des Systemstart automatisch gestartet. MBONE-Tools sind in ihrer eigenen Ports-Kategorie mbone verfügbar. Schauen Sie dort nach, wenn Sie die Konferenztools vic und vat suchen! Welche Netzwerkkarten basieren auf dem DEC-PCI-Chipsatz? Hier ist eine von Glen Foster gfoster@driver.nsta.org zusammengetragene Liste mit einigen aktuellen Ergänzungen: Netzwerkkarten mit DEC-PCI-Chipsatz Vendor Model ASUS PCI-L101-TB Accton ENI1203 Cogent EM960PCI Compex ENET32-PCI D-Link DE-530 Dayna DP1203, DP2100 DEC DE435, DE450 Danpex EN-9400P3 JCIS Condor JC1260 Linksys EtherPCI Mylex LNP101 SMC EtherPower 10/100 (Modell 9332) SMC EtherPower (Model 8432) TopWare TE-3500P Znyx (2.2.X) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348 Znyx (3.X) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)
Warum muss ich für Hosts auf meiner Site den FQDN benutzen? Sie werden wahrscheinlich feststellen, dass der Host sich tatsächlich in einer anderen Domäne befindet; wenn Sie sich zum Beispiel in foo.example.org befinden und einen Host namens mumble in der Domäne example.org erreichen wollen, werden Sie den fully-qualified Domainnamen mumble.example.org, anstatt nur mumble benutzen müssen. Traditionell war dies bei BSD-BIND-Resolvern erlaubt. Die aktuelle Version von bind, die mit FreeBSD ausgeliefert wird, ermöglicht jedoch nicht mehr die standardmäßige Abkürzung von nicht-fully-qualified Domainnamen für andere als ihre eigene Domäne. Ein nicht-qualifizierter Host mumble muss also entweder als mumble.foo.example.org gefunden werden, oder er wird in der Hauptdomäne gesucht. Dies unterscheidet sich vom vorherigen Verhalten, wo die Suche über mumble.example.org und mumble.edu fortgesetzt wurde. Werfen Sie einen Blick in RFC 1535, um zu erfahren, warum dies als schlechter Stil oder sogar als eine Sicherheitslücke betrachtet wurde. Als Abhilfe können Sie die Zeile search foo.example.org example.org anstelle der vorherigen domain foo.example.org in Ihre Datei /etc/resolv.conf einfügen. Stellen Sie jedoch sicher, dass die Suchreihenfolge nicht über die Grenze zwischen lokaler und öffentlicher Administration, wie RFC 1535 sie nennt, hinausreicht. Wieso erhalte ich bei allen Netzwerkoperationen die Meldung Permission denied? Dieses Problem kann auftreten, wenn Sie einen Kernel mit der Option IPFIREWALL erstellt haben. In der Voreinstellung werden alle Pakete, die nicht explizit erlaubt wurden, blockiert. Falls sie Ihr System unbeabsichtigt als Firewall konfiguriert haben, können Sie die Netzwerkfunktionalität wiederherstellen, indem Sie als root folgendes eingeben: &prompt.root; ipfw add 65534 allow all from any to any Sie können in /etc/rc.conf auch firewall_type="open" setzen. Weitere Informationen über die Konfiguration einer FreeBSD-Firewall finden Sie im Kapitel Firewalls des Handbuchs. Wie viele Einbußen zieht IPFW nach sich? Diese Frage wird im Handbuch-Kapitel Firewalls im Abschnitt IPFW Overhead und Optimierung ausführlich behandelt. Warum kann ich bei &man.ipfw.8; einen Dienst nicht mit fwd auf eine andere Maschine umlenken? Der wahrscheinlichste Grund ist, dass Sie Network Address Translation (NAT) brauchen und nicht die einfache Weiterleitung von Pakete. Die fwd Anweisung macht genau das, was da steht: Sie leitet Pakete weiter; die Daten in den Paketen werden aber nicht verändert. Ein Beispiel: 01000 fwd 10.0.0.1 from any to foo 21 Wenn ein Paket mit dem Ziel foo die Maschine mit dieser Regel erreicht, wird das Paket an 10.0.0.1 weitergeleitet; die Zieladresse im Paket lautet aber immer noch foo! Die Zieladresse wird nicht in 10.0.0.1 geändert. Die meisten Rechner werden allerdings Pakete verwerfen, wenn die Zieladresse des Paketes nicht mit der Adresse des Rechners übereinstimmt. Das ist der Grund, warum eine fwd Regel oft nicht den Effekt hat, den der Benutzer wollte. Dieses Verhalten ist aber kein Fehler, sondern erwünscht. Wenn Sie einen Dienst auf eine andere Maschine umleiten wollen, sollten Sie sich den FAQ-Eintrag über die Umleitung von Diensten oder die Online-Hilfe zu &man.natd.8; durchlesen. Auch in der Ports Sammlung sind diverse Hilfsprogramme für diesen Zweck enthalten. Wie kann ich Service-Requests von einer Maschine auf eine andere umleiten? Sie können FTP-Requests (und andere Dienste) mit dem Package socket umleiten, das im Ports-Tree in der Kategorie sysutils verfügbar ist. Ersetzen sie die Befehlszeile für den Dienst einfach so, dass stattdessen socket aufgerufen wird, zum Beispiel so: ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp wobei ftp.example.com und ftp entsprechend der Host und der Port sind, wohin umgeleitet werden soll. Woher kann ich ein Bandbreiten-Managementtool bekommen? Für FreeBSD gibt es drei Bandbreiten-Managementtools. &man.dummynet.4; ist als Teil von &man.ipfw.4; in FreeBSD integriert. ALTQ ist für FreeBSD 4.X kostenlos verfügbar und seit FreeBSD 5.X als Bestandteil von &man.pf.4; im Basissystem enthalten. Bei Bandwidth Manager von Emerging Technologies handelt es sich hingegen um ein kommerzielles Produkt. Warum erhalte ich die Meldung /dev/bpf0: device not configured? Der Berkeley-Paket-Filter (&man.bpf.4;) muss in den Kernel eingebunden werden, bevor er von einem Programme aus genutzt werden kann. Fügen Sie folgendes zu Ihrer Kernelkonfigurationsdatei hinzu und erstellen Sie einen neuen Kernel: pseudo-device bpf # Berkeley Packet Filter Unter FreeBSD 4.X und früheren Versionen müssen Sie noch die Gerätedateien erstellen. Wechseln Sie dazu nach dem Neustart in das Verzeichnis /dev und führen Sie den folgenden Befehl aus: &prompt.root; sh MAKEDEV bpf0 Weitere Informationen über den Umgang mit Geräten finden Sie im Handbucheintrag über Device Nodes. Habe ich, analog zum smbmount von &linux;, eine Möglichkeit, auf ein freigegebenes Laufwerk einer &windows;-Maschine in meinem Netzwerk zuzugreifen? Benutzen Sie die Kernel-Erweiterungen und Benutzerprogramme aus dem Programmpaket SMBFS. Das Paket und weitergehende Informationen sind unter net/smbfs in den Ports verfügbar; ab der Version 4.5 ist SMBFS Bestandteil des Basissystems. Was bedeutet die Meldung icmp-response bandwidth limit 300/200 pps in meinen Logfiles? Mit dieser Meldung teilt Ihnen der Kernel mit, dass irgend jemand versucht, ihn zur Generierung von zu vielen ICMP oder TCP reset (RST) Antworten zu provozieren. ICMP Antworten sind oft das Ergebnis von Verbindungsversuchen zu unbenutzten UDP Ports. TCP Resets werden generiert, wenn jemand versucht, eine Verbindung zu einem ungenutzten TCP Port aufzubauen. Die Meldungen können unter anderem durch die folgenden Ereignisse ausgelöst werden: Denial of Service (DoS) Angriffe mit der Brechstange (und nicht durch Angriffe mit einzelnen Paketen, die gezielt eine Schwachstelle des Systems ausnutzen sollen). Port Scans, bei denen versucht wird, Verbindungen zu einer großen Anzahl von Ports (und nicht nur einigen bekannten Ports) herzustellen. Die erste Zahl gibt an, wie viele Pakete vom Kernel ohne das Limit versendet worden wären; die zweite Zahl gibt das Limit an. Sie können das Limit mit Hilfe der sysctl-Variable net.inet.icmp.icmplim einstellen. Im Beispiel wird das Limit auf 300 Pakete pro Sekunde gesetzt: &prompt.root; sysctl -w net.inet.icmp.icmplim=300 Wenn Sie zwar die Begrenzung benutzen möchten, aber die Meldungen nicht in Ihren Logfiles sehen möchten, können Sie die Meldungen mit der sysctl-Variable net.inet.icmp.icmplim_output abschalten: &prompt.root; sysctl -w net.inet.icmp.icmplim_output=0 Falls Sie die Begrenzung ganz abschalten wollen, können Sie die Sysctl-Variable net.inet.icmp.icmplim auf 0. Wir raten Ihnen aus den oben genannten Gründen dringend von diesem Schritt ab. Was bedeutet die Meldung arp: unknown hardware address format? Ein Gerät im lokalen Ethernet verwendet eine MAC-Adresse in einem Format, das FreeBSD nicht kennt. Der wahrscheinlichste Grund ist, dass jemand Experimente mit einer Ethernet-Karte anstellt. Die Meldung tritt sehr häufig in Netzwerken mit Cable Modems auf. Die Meldung ist harmlos und sollte die Performance Ihres Systems nicht negativ beeinflussen. Ich habe gerade CVSup installiert, aber das Programm bricht mit Fehlermeldungen ab. Was ist da schief gelaufen? Schauen Sie bitte zuerst nach, ob Sie eine Fehlermeldung wie die unten gezeigte erhalten. /usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not found Solche Fehlermeldungen erhalten Sie, wenn Sie den net/cvsup Port auf einer Maschine installieren, die kein &xfree86;-System besitzt. Wenn Sie das GUI von CVSup benutzen wollen, müssen Sie &xfree86; installieren. Wenn Sie CVSup nur auf der Kommandozeile benutzen wollen, entfernen Sie bitte den Port, den Sie gerade installiert haben. Installieren Sie stattdessen den Port net/cvsup-without-gui. Genauere Informationen finden Sie im CVSup Abschnitt des Handbuchs.
Sicherheit Was ist ein Sandkasten (sandbox)? Sandkasten (sandbox) ist ein Ausdruck aus dem Bereich Sicherheit. Er hat zwei Bedeutungen: Ein Programm, das innerhalb virtueller Wände ausgeführt wird. Wenn ein Angreifer über eine Sicherheitslücke in diesen Programm einbricht, verhindern diese Wände ein tieferes Vordringen in das System. Man sagt: Der Prozess kann innerhalb der Wände spielen, das heißt nichts, was der Prozess in Bezug auf die Ausführung von Code tut, kann die Wände durchbrechen. Es ist also keine detailierte Revision des Codes erforderlich, um gewisse Aussagen über seine Sicherheit machen zu können. Die Wände könnten z.B. eine Benutzerkennung sein. Dies ist die Definition, die in den Hilfeseiten &man.security.7; und &man.named.8; benutzt wird. Nehmen Sie zum Beispiel den Dienst ntalk (siehe auch /etc/inetd.conf). Dieser Dienst ist früher mit der Benutzerkennung root gelaufen; nun läuft er mit der Benutzerkennung tty. Der Benutzer tty ist ein Sandkasten, der dazu gedacht ist, es jemandem, der über ntalk erfolgreich in das System eingebrochen ist, schwer zu machen, über diese Benutzerkennung hinaus vorzudringen. Ein Prozess, der sich innerhalb einer simulierten Maschine befindet. Dies ist etwas fortgeschrittener; grundsätzlich bedeutet es, dass jemand, der in der Lage ist, in einen Prozess einzudringen, annehmen könnte, er könnte weiter in die Maschine eindringen, tatsächlich aber nur in eine Simulation der Maschine einbricht und keine echten Daten verändert. Der gängigste Weg, dies zu erreichen, ist, in einem Unterverzeichnis eine simulierte Umgebung zu erstellen und den Prozess in diesem Verzeichnis mit chroot auszuführen (für diesen Prozess ist / dieses Verzeichnis und nicht das echte / des Systems). Eine weitere gebräuchliche Anwendung ist, ein untergeordnetes Dateisystem nur mit Leserechten zu mounten, und dann darüber eine Dateisystemebene zu erstellen, die einem Prozess einen scheinbar schreibberechtigten Blick in das Dateisystem gibt. Der Prozess mag glauben, dass er in der Lage ist, diese Dateien zu verändern, aber nur der Prozess sieht diesen Effekt - andere Prozess im System natürlich nicht. Es wird versucht, diese Art von Sandkasten so transparent zu gestalten, dass der Benutzer (oder Hacker) nicht merkt, dass er sich in ihm befindet. Ein &unix; System implementiert zwei Arten von Sandkästen - eine auf Prozessebene und die andere auf der Ebene der Benutzerkennung. Jeder Prozess auf einem &unix; System ist komplett von allen anderen Prozessen abgeschirmt. Ein Prozess kann den Adressraum eines anderen Prozesses nicht modifizieren. Das ist anders als bei &windows;, wo ein Prozess leicht den Adressraum eines anderen überschreiben kann, was zu einem Absturz führt. Ein Prozess gehört einer bestimmten Benutzerkennung. Falls die Benutzerkennung nicht die von root ist, dient sie dazu, den Prozess von Prozessen anderer Benutzer abzuschirmen. Die Benutzerkennung wird außerdem dazu genutzt, Daten auf der Festplatte abzuschirmen. Was sind die Sicherheitsstufen? Die Sicherheitsstufen sind ein Sicherheitsmechanismus, der im Kernel angesiedelt ist. Wenn die Sicherheitsstufe einen positiven Wert hat, verhindert der Kernel die Ausführung bestimmter Tätigkeiten; nicht einmal der Super-User (also root) darf sie durchführen. Zurzeit können über die Sicherheitsstufen unter anderem die folgenden Tätigkeiten geblockt werden: Änderungen bestimmter Dateiattribute, wie zum Beispiel schg (das "system immutable" Attribut) Schreibender Zugriff auf die Speicherbereiche des Kernels mittels /dev/mem und /dev/kmem. Laden von Kernel-Modulen. Änderungen an den Firewall-Regeln. Um die eingestellte Sicherheitsstufe eines aktiven Systems abzufragen, reicht das folgende einfache Kommando: &prompt.root; sysctl kern.securelevel Die Ausgaben wird den Namen der &man.sysctl.8;-Variablen (in diesem Fall kern.securelevel) und eine Zahl enthalten. Die Zahl ist der aktuelle Wert der Sicherheitsstufe. Wenn die Zahl positiv (größer als Null) ist, sind zumindestens einige der Schutzmaßnahmen aktiviert. Sie können die Sicherheitsstufe eines laufenden Systems nicht verringern, da dies den Mechanismus wertlos machen würden. Wenn Sie eine Tätigkeit ausführen müssen, bei der die Sicherheitsstufe nicht-positiv sein muss (z.B. ein installworld oder eine Änderung der Systemzeit), dann müssen Sie die entsprechende Einstellung in /etc/rc.conf ändern (suchen Sie nach den Variablen kern_securelevel und kern_securelevel_enable) und das System rebooten. Weitere Informationen über die Sicherheitsstufen und genaue Informationen, was die Einstellungen bewirken, können Sie der Online-Hilfe &man.init.8; entnehmen. Die Sicherheitsstufen sind kein magischer Zauberstab, der alle Ihre Problem löst; es gibt viele bekannte Probleme. Und in der Mehrzahl der Fälle vermitteln sie ein falsches Gefühl der Sicherheit. Eines der größten Probleme ist, dass alle für den Start des Systems benötigten Dateien geschützt sein müssen, damit die Sicherheitsstufe effektiv sein können. Wenn es ein Angreifer schafft, seine eigenen Programme ausführen zu lassen, bevor die Sicherheitsstufe gesetzt wird (was leider erst gegen Ende des Startvorgangs erfolgen kann, da viele der notwendigen Tätigkeiten für den Systemstart nicht mit einer gesetzten Sicherheitsstufe möglich wären), werden die Schutzmechanismen ausgehebelt. Es ist zwar nicht technisch unmöglich, alle beim Systemstart genutzten Dateien zu schützen; allerdings würde in einem so geschützten System die Administration zu einem Alptraum, da man das System neu starten oder in den Single-User Modus bringen müsste, um eine Konfigurationsdatei ändern zu können. Dieses und andere Probleme werden häufig auf den Mailinglisten diskutiert, speziell auf auf der Mailingliste &a.security;. Das verfügbare Archiv enthält ausgiebige Diskussionen. Einige Benutzer sind guter Hoffnung, dass das System der Sicherheitsstufen bald durch ein besser konfigurierbares System ersetzt wird, aber es gibt noch keine definitiven Aussagen. Fühlen Sie sich gewarnt. Wieso wartet BIND (named) sowohl auf Port 53 als auch auf einem hohen Port auf Anfragen? FreeBSD benutzt eine Version von BIND, die einen Port mit einer hohen, zufälligen Nummer für den Versand von Anfragen nutzt. Wenn Sie Port 53 für abgehende Anfragen benutzen wollen, um durch eine Firewall zu kommen oder sich einfach nur besser zu fühlen, können die folgenden Zeilen in /etc/namedb/named.conf eintragen. options { query-source address * port * 53; }; Wenn Sie möchten, können Sie statt * auch eine einzelne IP-Adresse eintragen, um die Dinge noch weiter einzuschränken. Ach übrigens, herzlichen Glückwunsch. Es ist eine sehr gute Angewohnheit, die Ausgaben von &man.sockstat.1; durchzusehen und auf merkwürdige Dinge zu achten. Wieso wartet Sendmail neuerdings sowohl auf Port 587 als auch auf dem Standard-Port 25 auf Anfragen? Aktuelle Sendmail-Versionen unterstützen eine neue Technik zur Einlieferung von Mails, die Port 587 nutzt. Diese Technik wird zwar noch nicht oft angewendet, erfreut sich aber ständig steigenden Popularität, Woher kommt dieser Benutzer toor mit UID 0? Ist mein System gehackt worden? Keine Panik. toor ist ein alternativer Account für den Super-User (wenn man root rückwärts schreibt, erhält man toor). Früher wurde er nur erzeugt, wenn die Shell &man.bash.1; installiert wurde, heute wird er auf jeden Fall erzeugt. Dieser Account ist für die Verwendung mit einer alternativen Shell vorgesehen; damit ist es nicht mehr erforderlich, die Shell von root zu ändern. Dies ist wichtig, wenn eine Shell verwendet wird, die nicht zum Lieferumfang von FreeBSD gehört, zum Beispiel aus einem Port oder einem Package. Diese Shells werden in der Regel in /usr/local/bin installiert und dieses Verzeichnis liegt standardmäßig auf einem anderem Filesystem. Wenn die Shell von root in /usr/local/bin liegt und /usr (oder das Filesystem, auf dem /usr/local/bin liegt) nicht gemountet werden kann, kann sich root nicht mehr einloggen, um das Problem zu beheben. Es ist allerdings möglich, das System zu rebooten und das Problem im Single-User Modus zu lösen, da man hier gefragt wird, welche Shell benutzt werden soll. Einige Anwender benutzen toor mit einer alternativen Shell für die tägliche Arbeit und benutzen root (mit der Standard-Shell) für den Single-User Modus und für Notfälle. Standardmäßig kann man sich nicht als toor anmelden, da der Account kein gültiges Passwort hat; Sie müssen sich also als root anmelden und ein Passwort für toor setzen, wenn Sie diesen Account benutzen wollen. Warum funktioniert suidperl nicht richtig? Aus Sicherheitsgründen wird suidperl standardmäßig ohne das SUID-Bit installiert. Der Systemadministrator kann das normale Verhalten mit dem folgenden Befehl herstellen: &prompt.root; chmod u+s /usr/bin/suidperl Wenn Sie wollen, dass suidperl auch beim Update via Sourcecode das SUID-Bit erhält, müssen Sie in /etc/make.conf die Zeile ENABLE_SUIDPERL=true einfügen, bevor Sie make buildworld starten. PPP Ich bekomme &man.ppp.8; nicht zum Laufen. Was mache ich falsch? Sie sollten zuerst &man.ppp.8; (die Manualpage zu ppp) und den Abschnitt zu PPP im Handbuch lesen. Aktivieren Sie das Logging mit folgendem Befehl: set log Phase Chat Connect Carrier lcp ipcp ccp command Dieser Befehl kann an der Eingabeaufforderung von &man.ppp.8; eingegeben oder in die Konfigurationsdatei /etc/ppp/ppp.conf eingetragen werden (der beste Ort hierfür ist der Anfang des Abschnitts default. Stellen Sie sicher, dass die Datei /etc/syslog.conf die folgenden Zeilen enthält: !ppp *.* /var/log/ppp.log und, dass die Datei /var/log/ppp.log existiert. Sie können nun über die Logfiles eine Menge darüber herausfinden, was geschieht. Es macht nichts, wenn die Einträge in den Logfiles Ihnen gar nichts sagen. Wenn Sie jemandem um Hilfe bitten müssen, könnten sie für ihn von Nutzen sein. Warum hängt sich ppp auf, wenn ich es benutze? Das liegt meistens daran, dass Ihr Rechnername nicht aufgelöst werden kann. Um dieses Problem zu lösen, müssen Sie sicherstellen, dass die Datei /etc/hosts von Ihrem Resolver zuerst genutzt wird. Dazu muss in der Datei /etc/host.conf der Eintrag hosts an die erste Stelle gesetzt werden. Erstellen Sie dann einfach für Ihren lokalen Rechner einen Eintrag in der Datei /etc/hosts. Falls Sie kein lokales Netzwerk besitzen, ändern Sie die localhost-Zeile: 127.0.0.1 foo.example.com foo localhost Andernfalls fügen Sie einfach einen weiteren Eintrag für Ihren lokalen Rechner hinzu. Weitere Details finden Sie in den betreffenden Manualpages. Wenn Sie fertig sind sollten Sie ping -c1 `hostname` erfolgreich ausführen können. Warum wählt &man.ppp.8; im -auto-Modus nicht? Überprüfen Sie zunächst, ob Sie einen Standard-Gateway eingestellt haben. Wenn Sie netstat -rn ausführen, sollten Sie zwei Einträge ähnlich den folgenden sehen: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.2 UGSc 0 0 tun0 10.0.0.2 10.0.0.1 UH 0 0 tun0 Hier wird angenommen, dass Sie die Adressen aus dem Handbuch, der Manualpage oder aus der Datei ppp.conf.sample benutzt haben. Falls Sie keine Standardroute haben, kann es daran liegen, dass Sie eine alte Version von &man.ppp.8; benutzen, die das Wort HISADDR in der Datei ppp.conf nicht versteht. Ein weiterer Grund dafür, dass die Zeile für die Standardroute fehlt, könnte der sein, dass Sie fälschlicherweise eine Standardroute in der Datei /etc/rc.conf eingetragen und die folgende Zeile in ppp.conf ausgelassen haben: delete ALL Lesen Sie in diesem Fall den Abschnitt Abschließende Systemkonfiguration des Handbuchs. Was bedeutet No route to host? Dieser Fehler beruht für gewöhnlich auf einem fehlenden Abschnitt MYADDR: delete ALL add 0 0 HISADDR in Ihrer Datei /etc/ppp/ppp.linkup. Er ist nur notwendig, wenn Sie eine dynamische IP-Adresse besitzen oder die Adresse Ihres Gateways nicht kennen. Wenn Sie den interaktiven Modus benutzen, können Sie folgendes eingeben, nachdem Sie in den packet mode gelangt sind (den Paket Modus erkennen Sie an PPP im Prompt): delete ALL add 0 0 HISADDR Weitere Details finden Sie im Abschnitt PPP und Dynamische IP-Adressen des Handbuchs. Wieso werden meine Verbindungen nach ca. drei Minuten beendet? Der Standardtimeout für &man.ppp.8; beträgt drei Minuten. Er kann durch die Zeile set timeout NNN eingestellt werden, wobei NNN die Inaktivität in Sekunden, bevor die Verbindung geschlossen wird, angibt. Falls NNN Null ist, wird die Verbindung niemals aufgrund eines Timeouts geschlossen. Es ist möglich, diesen Befehl in die Datei ppp.conf einzubinden, oder ihn an der Eingabeaufforderung im interaktiven Modus einzugeben. Durch eine Verbindung zum Server-Socket von ppp über &man.telnet.1; oder &man.pppctl.8; ist es auch möglich, den Timeout bei aktiver Verbindung anzupassen. Weitere Details finden Sie in der Manualpage &man.ppp.8;. Wieso bricht meine Verbindung bei hoher Auslastung ab? Falls Sie Link-Quality-Reporting (LQR) konfiguriert haben, ist es möglich, dass zu viele LQR-Pakete zwischen Ihrer Maschine und dem verbundenen Rechner verloren gehen. ppp folgert daraus, dass die Verbindung nicht in Ordnung ist und schließt sie. Vor FreeBSD Version 2.2.5 war LQR standardmäßig aktiviert; nun ist es standardmäßig deaktiviert. Es kann durch folgende Zeile deaktiviert werden: disable lqr Warum brechen meine Verbindungen nach unbestimmter Zeit zusammen? Wenn die Qualität Ihrer Telefonleitung zu schlecht oder bei Ihrem Anschluss die Option (Telekomdeutsch: das Leistungsmerkmal) Anklopfen aktiviert ist, kann es manchmal vorkommen, dass Ihr Modem auflegt, weil es (fälschlicherweise) annimmt, dass es das Trägersignal verloren hat. Bei den meisten Modems gibt es eine Einstellmöglichkeit, um anzugeben, wie tolerant es gegenüber vorübergehenden Verlusten des Trägersignals sein soll. Bei einem USR &sportster; wird dies zum Beispiel im Register S10 in Zehntelsekunden angegeben. Um Ihr Modem toleranter zu machen, können Sie zu Ihrem Wählbefehl die folgende Sende-Empfangs-Sequenz hinzufügen: set dial "...... ATS10=10 OK ......" Weitere Information sollten Sie dem Handbuch Ihres Modems entnehmen können. Warum hängen meine Verbindung nach einer unbestimmten Zeit? Viele Leute machen Erfahrungen mit hängenden Verbindungen ohne erkennbaren Grund. Als erstes muss festgestellt werden, welche Seite der Verbindung hängt. Wenn Sie ein externes Modem benutzen, können Sie einfach versuchen, &man.ping.8; zu benutzen, um zu sehen, ob die TD-Anzeige aufleuchtet, wenn Sie Daten übertragen. Falls sie aufleuchtet (und die RD-Anzeige nicht), liegt das Problem am anderen Ende. Falls TD nicht aufleuchtet, handelt es sich um ein lokales Problem. Bei einem internen Modem müssen Sie den Befehl set server in Ihrer Datei ppp.conf benutzen. Stellen Sie über &man.pppctl.8; eine Verbindung zu &man.ppp.8; her, wenn die Verbindung hängt. Falls Ihre Netzwerkverbindung plötzlich wieder funktioniert (ppp wurde durch die Aktivität auf dem Diagnose-Socket wiederbelebt) oder Sie keine Verbindung bekommen (vorausgesetzt, der Befehl set socket wurde beim Start erfolgreich ausgeführt), handelt es sich um ein lokales Problem. Falls Sie eine Verbindung bekommen und die externe Verbindung weiterhin hängt, aktivieren Sie lokales asynchrones Logging mit set log local async und benutzen Sie &man.ping.8; von einem anderen Fenster oder Bildschirm aus, um die externe Verbindung zu benutzen. Das asynchrone Logging zeigt Ihnen, welche Daten über die Verbindung gesendet und empfangen werden. Falls Daten hinausgehen, aber nicht zurückkommen, handelt es sich um ein externes Problem. Wenn Sie festgestellt haben, ob es sich um ein lokales oder um ein externes Problem handelt, haben Sie zwei Möglichkeiten: Wenn es ein externes Problem ist, lesen Sie bitte bei weiter. Handelt es sich um ein lokales Problem, lesen Sie bitte . Was kann ich machen, wenn die Gegenstelle nicht antwortet? Hier können Sie wenig tun. Die meisten ISPs werden ablehnen, Ihnen zu helfen, wenn Sie kein Betriebssystem von Microsoft benutzen. Sie können enable lqr in Ihrer Datei ppp.conf angeben, wodurch &man.ppp.8; ermöglicht wird, ein externes Versagen zu erkennen und aufzulegen, aber diese Erkennung ist relativ langsam und deshalb nicht besonders nützlich. Evtl. sagen Sie Ihrem ISP nicht, dass Sie user-PPP benutzen... Versuchen Sie zunächst, jegliche Datenkompression auszuschalten, indem Sie folgendes zu Ihrer Konfiguration hinzufügen: disable pred1 deflate deflate24 protocomp acfcomp shortseq vj deny pred1 deflate deflate24 protocomp acfcomp shortseq vj Stellen Sie nun wieder eine Verbindung her, um festzustellen, ob sich etwas geändert hat. Falls es nun besser läuft oder falls das Problem vollständig behoben ist, versuchen Sie durch schrittweises Ändern der Einstellungen festzustellen, welche Einstellung den Unterschied bewirkt. Hierdurch erhalten Sie schlüssige Fakten für ein Gespräch mit Ihrem ISP (andererseits wird hierdurch offensichtlich, dass Sie kein Microsoft-Produkt benutzen). Aktivieren Sie asynchrones Logging und warten Sie, bis die Verbindung wieder hängt, bevor Sie sich an Ihren ISP wenden. Hierzu kann einiges an Plattenplatz nötig sein. Die Daten, die als letztes von dem Port gelesen wurden, könnten von Interesse sein. Für gewöhnlich handelt es sich um ASCII-Text, der sogar den Fehler beschreiben kann (Memory fault, core dumped). Falls Ihr ISP hilfsbereit ist, sollte er in der Lage sein, an seinem Ende das Logging zu aktivieren und wenn das nächste Mal die Verbindung abbricht, könnte er Ihnen mitteilen, worin das Problem auf seiner Seite besteht. Gerne können Sie Details auch an &a.brian; schicken, oder Ihren ISP bitten, sich direkt an ihn zu wenden. Was kann ich tun, wenn sich &man.ppp.8; aufhängt? In diesem Fall erstellen Sie am besten &man.ppp.8; neu, indem Sie CFLAGS+=-g und STRIP= am Ende des Makefiles einfügen und dann make clean && make && make install ausführen. Suchen Sie die Prozessnummer von &man.ppp.8; mit ps ajxww | fgrep ppp, wenn &man.ppp.8; sich aufhängt und führen Sie gdb ppp PID aus. Am gdb-Prompt können Sie bt benutzen, um einen Auszug von Stack zu erhalten. Senden Sie die Ergebnisse an &a.brian;. Warum passiert nach der Nachricht Login OK! nichts? Bei Freebsd-Versionen vor 2.2.5 wartete &man.ppp.8; darauf, dass der Partner das Line Control Protocol (LCP) initiiert. Viele ISPs starten nicht mit der Initiierung, sondern erwarten dies vom Client. Benutzen Sie die folgende Zeile, um &man.ppp.8; zu veranlassen, LCP zu initiieren: set openmode active Für gewöhnlich schadet es nicht, wenn beide Seiten versuchen, Verhandlungen einzuleiten. Deshalb ist openmode nun standardmäßig aktiv. Im nächsten Abschnitt wird allerdings erklärt, in welchen Fällen es doch schadet. Ich sehe ständig Fehlermeldungen über gleiche Magic Numbers Was heißt das? Nach dem Aufbau einer Verbindung kann es sein, dass Sie in der Logdatei gelegentlich Meldungen mit dem Hinweis magic is the same sehen. Manchmal sind diese Meldungen harmlos und manchmal bricht die eine oder andere Seite die Verbindung ab. Die meisten Implementationen von PPP können dieses Problem nicht handhaben und Sie werden wiederholte Konfigurationsanforderungen und -bestätigungen in der Logdatei finden, bis &man.ppp.8; schließlich aufgibt und die Verbindung beendet. Dies geschieht normalerweise auf Servern mit langsamen Festplatten, bei denen ein getty auf dem Port ausgeführt und &man.ppp.8; nach dem Einloggen von einem Login-Skript oder einem Programm aus gestartet wird. Ich habe auch davon gehört, dass dies bei der Benutzung von slirp regelmäßig auftritt. Der Grund hierfür ist, dass das ppp auf der Client-Seite in der Zeit, die benötigt wird, getty zu beenden und ppp zu starten, bereits beginnt, Line Control Protocol (LCP) Pakete zu senden. Da ECHO auf dem Serverport weiterhin eingeschaltet ist, werden diese Pakete zum &man.ppp.8; auf der Client-Seite reflektiert. Ein Teil der LCP-Verhandlungen ist die Einrichtung einer Magic Number für jede Seite der Verbindung, damit Echos erkannt werden können. Das Protokoll besagt, dass, wenn der Partner versucht, die gleiche Magic Number auszuhandeln, ein NAK zurückgesendet und eine neue "Magic Number" gewählt werden soll. Während der Server das ECHO eingeschaltet hat, sendet der Client LCP Pakete, sieht die gleiche Magic Number im reflektierten Paket und erzeugt ein NAK. Er sieht auch das reflektierte NAK (was bedeutet, dass &man.ppp.8; seine "Magic Number" ändern muss). Hierdurch wird eine Vielzahl von Änderungen der Magic Number hervorgerufen, die sich allesamt im tty-Puffer des Servers ansammeln. Sobald &man.ppp.8; auf dem Server startet, wird es mit Änderungen der Magic Number überflutet und entscheidet, dass es sich zur Genüge mit den LCP-Verhandlungen beschäftigt hat und gibt auf. Und während sich der Client noch darüber freut, dass er keine weiteren Reflexionen sieht, wird ihm gemeldet, dass der Server auflegt. Dies kann verhindert werden, indem dem Partner durch die folgende Zeile in der Datei ppp.conf erlaubt wird, mit der Verhandlung zu beginnen: set openmode passive Hierdurch wird &man.ppp.8; mitgeteilt, darauf zu warten, dass der Server mit den LCP-Verhandlungen beginnt. Einige Server starten jedoch nie mit der Verhandlungen; falls dies der Fall ist, können Sie folgendes tun: set openmode active 3 Hierdurch bleibt &man.ppp.8; für drei Sekunden passiv und fängt dann erst an, LCP-Anforderungen zu senden. Falls der Partner während dieser Zeit beginnt, Anforderungen zu senden, wird &man.ppp.8; direkt antworten und nicht erst, nachdem die drei Sekunden abgelaufen sind. Die LCP-Verhandlungen dauern an, bis die Verbindung geschlossen wird. Was mache ich falsch? Es gibt eine Fehlfunktion in der Implementierung von &man.ppp.8;, die darin besteht, dass LCP-, CCP- & IPCP-Antworten nicht mit den ursprünglichen Anforderungen assoziiert werden. Für den Fall, dass eine Implementation von PPP mehr als sechs Sekunden langsamer ist, als die andere Seite, resultiert das darin, dass die andere Seite zwei weitere LCP-Konfigurationsanforderungen sendet, was fatale Auswirkungen hat. Stellen Sie sich vor, wir hätten es mit zwei Implementierungen A und B zu tun. A beginnt unmittelbar nach der Verbindung, LCP-Anforderungen zu senden und B benötigt sieben Sekunden, zu starten. Wenn B startet, hat A bereits drei LCP-Anforderungen gesendet. Wir nehmen an, dass ECHO ausgeschaltet ist; andernfalls würden wir Probleme mit der "Magic Number" beobachten, wie bereits im vorherigen Abschnitt beschrieben. B sendet eine Anforderung und anschließend eine Bestätigung der ersten Anforderung von A. Dies führt dazu, dass A in den Zustand OPENED übergeht und eine Bestätigung (die erste) zurück an B sendet. In der Zwischenzeit sendet B zwei weitere Bestätigungen als Antwort auf die zusätzlichen Anforderungen, die von A gesendet worden sind, bevor B gestartet ist. B empfängt dann die erste Bestätigung von A und geht in den Zustand OPENED über. A empfängt die zweite Bestätigung von B, geht zurück in den Zustand REQ-SENT und sendet eine weitere (vierte) Anforderung entsprechend dem RFC. A empfängt dann die dritte Bestätigung und geht in den Zustand OPENED über. In der Zwischenzeit empfängt B die vierte Anforderung von A, wechselt in den Zustand ACK-SENT und sendet eine weitere (zweite) Anforderung und (vierte) Bestätigung entsprechend dem RFC. A erhält die Anforderung, geht in den Zustand REQ-SENT über, sendet eine weitere Anforderung, erhält unverzüglich die nächste Bestätigung und geht in OPENED über. Das geht so weiter, bis eine Seite erkennt, dass man zu keinem Ergebnis gelangt und aufgibt. Am besten verhindert man solche Situationen, indem man eine Seite als passiv konfiguriert, also dafür sorgt, dass eine Seite darauf wartet, dass die andere mit den Verhandlungen beginnt. Das kann durch den Befehl set openmode passive geschehen. Diese Option sollten Sie mit Vorsicht genießen. Folgenden Befehl sollten Sie benutzen, um die Wartezeit auf den Beginn der Verhandlungen des Partners von &man.ppp.8; zu begrenzen: set stopped N Alternativ kann der Befehl set openmode active N (wobei N die Wartezeit in Sekunden vor Beginn der Verhandlungen angibt) benutzt werden. Weitere Details finden Sie in den Manualpages. Warum reagiert &man.ppp.8; nicht mehr, wenn ich es mit shell verlassen habe? Wenn Sie den Befehl shell oder ! benutzen, führt &man.ppp.8; eine Shell aus (falls Sie Argumente übergeben haben, führt &man.ppp.8; diese Argumente aus). &man.ppp.8; wartet auf die Beendigung des Befehls, bevor es seine Arbeit fortsetzt. Falls Sie versuchen, die PPP-Verbindung während der Programmausführung zu benutzen, wird es so aussehen, als wäre die Verbindung eingefroren. Das liegt daran, dass &man.ppp.8; auf die Beendigung des Befehls wartet. Falls Sie solche Befehle verwenden möchten, benutzen Sie stattdessen den Befehl !bg. Hierdurch wird der angegebene Befehl im Hintergrund ausgeführt und &man.ppp.8; kann fortfahren, die Verbindung zu bedienen. Warum wird &man.ppp.8; niemals beendet, wenn ich es über ein Nullmodem-Kabel benutze? Es gibt keine Möglichkeit für &man.ppp.8;, automatisch festzustellen, ob eine direkte Verbindung beendet worden ist. Das liegt an den Leitungen, die bei einem seriellen Nullmodem-Kabel benutzt werden. Wenn Sie diese Art der Verbindung verwenden, sollte LQR immer aktiviert werden: enable lqr LQR wird standardmäßig akzeptiert, wenn es vom Partner ausgehandelt wird. Warum wählt &man.ppp.8; im Modus -auto ohne Grund? Falls &man.ppp.8; unerwarteterweise wählt, müssen Sie den Grund herausfinden und Wählfilter (dfilters) einsetzen, um dies zu verhindern. Benutzen Sie die folgende Zeile, um den Grund herauszufinden: set log +tcp/ip Dadurch wird jeglicher Verkehr über die Verbindung geloggt. Wenn das nächste mal unerwartet eine Verbindung hergestellt wird, werden Sie den Grund zusammen mit einer hilfreichen Zeitangabe in der Logdatei finden. Sie können nun das Wählen aufgrund dieser Bedingungen verhindern. Normalerweise wird diese Art von Problemen durch Anfragen an den DNS verursacht. Um zu verhindern, dass DNS-Anfragen den Aufbau der Verbindung hervorrufen (das verhindert nicht, dass Pakete über eine bestehende Verbindung gesendet werden), benutzen Sie die folgenden Zeilen: set dfilter 1 deny udp src eq 53 set dfilter 2 deny udp dst eq 53 set dfilter 3 permit 0/0 0/0 Dies ist nicht immer brauchbar, weil es effektiv Ihre Fähigkeit, auf Anforderung wählen zu können einschränkt - die meisten Programme müssen eine DNS-Anfrage durchführen, bevor Sie andere, das Netzwerk betreffenden Dinge tun können. Im Fall von DNS sollten Sie versuchen, herauszufinden, welches Programm tatsächlich versucht, einen Hostnamen aufzulösen. Sehr oft handelt es sich hier um &man.sendmail.8;. Sie sollten sicherstellen, dass Sie sendmail in der Konfigurationsdatei sagen, dass keine DNS-Anfragen durchführen soll. Weitere Details enthält der Abschnitt E-Mail über Einwahl-Verbindungen des Handbuchs. Sie könnten z.B. die folgende Zeile in Ihre .mc-Datei einfügen: define(`confDELIVERY_MODE', `d')dnl Das veranlasst sendmail dazu, alles in eine Warteschlange einzureihen, bis die Warteschlange verarbeitet wird (normalerweise wird sendmail mit aufgerufen, was besagt, dass die Warteschlange alle 30 Minuten abgearbeitet wird) oder, bis ein sendmail -q ausgeführt wird (z.B. aus Ihrer Datei ppp.linkup heraus). Was bedeuten diese CCP-Fehler? Ich sehe ständig folgende Fehler in meiner Logdatei: CCP: CcpSendConfigReq CCP: Received Terminate Ack (1) state = Req-Sent (6) Das liegt daran, dass &man.ppp.8; versucht, die Komprimierung Predictor1 auszuhandeln und der Partner über keinerlei Komprimierung verhandeln will. Die Meldungen sind harmlos, aber wenn Sie sie beseitigen möchten, können Sie die Komprimierung Predictor1 auch lokal ausschalten: disable pred1 Warum loggt ppp die Geschwindigkeit meiner Verbindung nicht? Um alle Zeilen Ihrer Modemkonversation mitzuloggen, müssen Sie folgendes einstellen: set log +connect Dies veranlasst &man.ppp.8; dazu, alles bis zur letzten angeforderten expext-Zeile mitzuloggen. Falls Sie die Geschwindigkeit Ihrer Verbindung erfahren möchten und PAP oder CHAP (und deshalb nach dem CONNECT im Wählskript nichts mehr zu chatten haben - kein set login-Skript), müssen Sie sicherstellen, dass Sie &man.ppp.8; anweisen, die gesamte CONNECT-Zeile zu erwarten, etwa so: set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n" Hier bekommen wir unser CONNECT, senden nichts, erwarten dann einen Line-Feed, der &man.ppp.8; zwingt, die gesamte CONNECT-Antwort zu lesen. Warum ignoriert &man.ppp.8; das Zeichen \ in meinem Chat-Skript? ppp analysiert jede Zeile in Ihrer Konfigurationsdatei, damit es Zeichenketten wie z.B. set phone "123 456 789" korrekt interpretieren kann (und erkennen, dass es sich bei der Nummer tatsächlich nur um ein Argument handelt). Um das Zeichen " anzugeben, müssen Sie ihm einen Backslash (\) voranstellen. Wenn der Chat-Interpreter jedes Argument analysiert, reinterpretiert er die Argumente, um irgendwelche speziellen Escape-Sequenzen wie z.B. \P oder \T (sehen Sie in die Manualpage) zu finden. Das Ergebnis dieser Doppelanalyse ist, dass Sie daran denken müssen, die richtige Anzahl an Escape-Zeichen zu verwenden. Falls Sie tatsächlich das Zeichen \ z.B. zu Ihrem Modem senden möchten, brauchen Sie etwas ähnliches, wie: set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK" woraus sich folgende Zeichen ergeben: ATZ OK AT\X OK oder set phone 1234567 set dial "\"\" ATZ OK ATDT\\T" was folgende Zeichen ergibt: ATZ OK ATDT1234567 Warum gibt es die Datei ppp.core nicht, wenn &man.ppp.8; einen Segmentation Fault erzeugt hat? Weder &man.ppp.8; noch andere Programme sollten Core-Dumps erzeugen. Da &man.ppp.8; mit der effektiven Benutzerkennung 0 ausgeführt wird, wird das Betriebssystem &man.ppp.8;'s Coreimage nicht auf die Festplatte schreiben, bevor es &man.ppp.8; beendet hat. Falls &man.ppp.8; jedoch tatsächlich aufgrund einer Speicherverletzung abbricht und Sie die aktuellste Version (siehe Anfang dieses Kapitels) benutzen, dann sollten Sie folgendes tun: &prompt.user; tar xfz ppp-*.src.tar.gz &prompt.user; cd ppp*/ppp &prompt.user; echo STRIP= >>Makefile &prompt.user; echo CFLAGS+=-g >>Makefile &prompt.user; make clean all &prompt.user; su &prompt.root; make install &prompt.root; chmod 555 /usr/sbin/ppp Nun ist die installierte Version von &man.ppp.8; mit einem Debugger ausführbar. Sie können &man.ppp.8; nun nur noch als root ausführen, da alle vorherigen Zugriffsrechte aufgehoben worden sind. Achten Sie darauf, in welchem Verzeichnis Sie sich gerade befinden, wenn Sie &man.ppp.8; starten. Wenn nun wieder eine Speicherverletzung auftreten sollte, wird &man.ppp.8; einen Speicherauszug erzeugen, den Sie in der Datei ppp.core finden. Sie sollten dann folgendes tun: &prompt.user; su &prompt.root; gdb /usr/sbin/ppp ppp.core (gdb) bt ..... (gdb) f 0 .... (gdb) i args .... (gdb) l ..... Mit Hilfe all dieser Informationen sollte es möglich sein, das Problem zu diagnostizieren. Falls Sie mit dem Umgang mit gdb vertraut sind, könnten Sie weitere Einzelheiten herausfinden, z.B. wodurch der Fehler tatsächlich hervorgerufen wurde und die Adressen & Werte der betreffenden Variablen. Warum bekommt das Programm, das eine automatische Anwahl ausgelöst hat, keine Verbindung? Dies war ein bekanntes Problem bei &man.ppp.8;-Konfigurationen, bei denen automatisch dynamische, lokale IP-Adressen mit dem Partner ausgehandelt werden. In der aktuellsten Version ist das Problem behoben - suchen Sie in den Manualpages nach iface. Das Problem bestand darin, dass, wenn das erste Programm &man.connect.2; aufruft, die IP-Adresse der tun-Schnittstelle dem Socketendpunkt zugeordnet wird. Der Kernel erstellt das erste ausgehende Paket und schreibt es in das tun-Gerät. &man.ppp.8; liest dann das Paket und baut eine Verbindung auf. Falls die Schnittstellenadresse sich nun aufgrund &man.ppp.8;s dynamischer Adresszuordnung ändert, wird der originale Socketendpunkt ungültig. Alle weiteren Pakete, die zum Partner gesendet werden, werden für gewöhnlich verworfen. Selbst wenn sie nicht verworfen werden würden, würden alle Antworten nicht an den betreffenden Rechner gelangen, weil die IP-Adresse nicht mehr zu diesem Rechner gehört. Theoretisch gibt es mehrere Möglichkeiten, dieses Problem anzugehen. Am schönsten wäre es, wenn der Partner die gleiche IP-Adresse wieder zuordnen würde, wenn möglich :-) Die derzeitige Version von &man.ppp.8; tut das, aber die meisten anderen Implementierungen nicht. Die einfachste Maßnahme von unserer Seite wäre die, niemals die IP-Adresse der tun-Schnittstelle zu ändern, sondern stattdessen alle ausgehenden Pakete so zu ändern, dass als Absender-IP-Adresse anstelle der IP-Adresse der Schnittstelle die ausgehandelte IP-Adresse gesetzt wird. Das ist im wesentlichen das, was durch die Option iface-alias in der aktuellsten Version von &man.ppp.8; bewirkt wird (mit Unterstützung von &man.libalias.3; und &man.ppp.8;'s Schalter) - alle Schnittstellenadressen werden beibehalten und auf die letzte ausgehandelte Adresse umgesetzt. Eine andere Alternative (und wahrscheinlich die zuverlässigste) wäre die, einen Systemaufruf zu implementieren der die IP-Adressen aller verbundenen Sockets von einer Adresse in eine andere ändert. &man.ppp.8; würde diesen Aufruf benutzen, um die Sockets aller laufenden Programme zu ändern, nachdem eine neue IP-Adresse ausgehandelt worden ist. Der gleiche Systemaufruf könnte von DHCP-Clients benutzt werden, wenn sie gezwungen werden, einen re-bind() auf ihren Sockets auszuführen. Noch eine andere Möglichkeit wäre die, das Aktivieren von Schnittstellen ohne IP-Adresse zu erlauben. Ausgehende Paketen würde die IP-Adresse 255.255.255.255 gegeben, bis der erste ioctl() mit SIOCAIFADDR erfolgt. Dies würde in der vollständigen Verbindung des Sockets resultieren. Es wäre die Aufgabe von &man.ppp.8;, die Absender-IP-Adresse zu ändern, allerdings nur dann, wenn sie 255.255.255.255 lautet und nur die IP-Adresse und IP-Prüfsumme müssten geändert werden. Dies wäre allerdings keine besonders elegante Lösung, da der Kernel fehlerhafte Pakete an eine unzureichend konfigurierte Schnittstelle senden würde, in der Annahme, dass andere Mechanismen in der Lage sind, diese Dinge rückwirkend zu beheben. Warum laufen die meisten Spiele mit dem Schalter nicht? Der Grund dafür, dass Spiele und andere Programme nicht funktionieren, wenn libalias benutzt wird, ist der, dass der Rechner außerhalb des lokalen Netzes versucht, eine Verbindung aufzubauen und (unaufgefordert) UDP-Pakete an den Rechner innerhalb des lokalen Netzes zu senden. Die Software, die für die NAT zuständig ist, weiß nicht, dass sie diese Pakete an den internen Rechner weiterleiten soll. Um dies zu beheben, stellen Sie zunächst sicher, dass die Software, mit der Sie Probleme haben, die einzige ist, die gerade läuft. Benutzen Sie dann entweder tcpdump auf der tun-Schnittstelle des Gateways oder aktivieren Sie auf dem Gateway das Logging von TCP/IP (set log +tcp/ip) unter &man.ppp.8;. Wenn Sie nun das betreffende Programm starten, sollten Sie sehen, wie Pakete den Gateway-Rechner passieren. Wenn von außen etwas zurückkommt, wird es ignoriert (das ist das Problem). Merken Sie sich die Portnummer dieser Pakete und beenden Sie das betreffende Programm. Wiederholen Sie diesen Schritt einige Male, um festzustellen, ob die Portnummern konsistent sind. Falls dem so ist, wird die folgende Zeile im entsprechenden Abschnitt von /etc/ppp/ppp.conf dafür sorgen, dass das Programm funktioniert: nat port proto internalmachine:port port wobei für proto entweder tcp oder udp zu setzen ist, internalmachine den Rechner bezeichnet, an den die Pakete geschickt werden sollen und port die betreffende Portnummer. Sie können das Programm nicht auf einem anderen Rechner benutzen, ohne die obige Zeile abzuändern und die Benutzung des Programms auf zwei internen Rechnern steht außer Frage - schließlich sieht die Außenwelt Ihr gesamtes internes Netz so, als wäre es ein einzelner Rechner. Falls die Portnummern nicht konsistent sind, gibt es drei weitere Optionen: Ermöglichen Sie die Unterstützung durch libalias. Beispiele für spezielle Fälle finden Sie in /usr/src/lib/libalias/alias_*.c (alias_ftp.c ist ein schöner Prototyp). Hierzu gehört für gewöhnlich das Lesen bestimmter, erkannter, ausgehender Pakete, die Identifizierung der Instruktion, die den entfernten Rechner dazu veranlasst, auf einem bestimmten (wahlfreien) Port eine Verbindung zurück zum lokalen Rechner herzustellen, sowie das Erstellen einer Route in der Aliastabelle, so dass nachfolgende Pakete wissen, wohin sie gehören. Dieses ist zwar die komplizierteste Lösung, aber die beste, die auch dafür sorgt, dass die Software auf mehreren Rechnern funktioniert. Benutzen Sie einen Proxy. Die Anwendung könnte z.B. socks5 unterstützen, oder (wie im Fall von cvsup) eine Option passiv besitzen, die stets verhindert, dass verlangt wird, dass der Partner eine Verbindung zurück zur lokalen Maschine aufbaut. Leiten Sie mit nat addr alles zur lokalen Maschine um. Dieses Vorgehen ähnelt dem mit einem Vorschlaghammer. Hat jemand eine Liste mit nützlichen Portnummern erstellt? Noch nicht, aber hieraus könnte eine solche entstehen (falls Interesse besteht). In jedem Beispiel sollte internal durch die IP-Adresse der Maschine ersetzt werden, auf der das Spiel laufen soll. Asheron's Call nat port udp internal:65000 65000 Konfigurieren Sie das Spiel manuell auf Port 65000 um. Wenn Sie von mehreren Rechner aus spielen wollen, weisen Sie jedem eine eindeutige Portnummer zu (also 65001, 65002, u.s.w.) und fügen Sie für jede Maschine eine eigene nat port Zeile ein. Half Life nat port udp internal:27005 27015 PCAnywhere 8.0 nat port udp internal:5632 5632 nat port tcp internal:5631 5631 Quake nat port udp internal:6112 6112 Quake 2 nat port udp internal:27901 27910 nat port udp internal:60021 60021 nat port udp internal:60040 60040 Red Alert nat port udp internal:8675 8675 nat port udp internal:5009 5009 Was sind FCS-Fehler? FCS steht für Frame Check Sequence. Jedes PPP-Paket besitzt eine Checksumme, um sicherzustellen, dass die empfangenen Daten dieselben sind, wie die versendeten. Falls die FCS eines ankommenden Paketes fehlerhaft ist, wird das Paket verworfen und der Zähler HDLC FCS wird erhöht. Der HDLC-Fehlerwert kann durch den Befehl show hdlc angezeigt werden. Falls Ihre Leitung schlecht ist (oder falls Ihr serieller Treiber Pakete verwirft), werden sie gelegentliche FCS-Fehler sehen. Normalerweise lohnt es sich nicht, sich hierüber Gedanken zu machen, obwohl das Kompressionsprotokoll hierdurch wesentlich langsamer wird. Wenn Sie ein externes Modem besitzen, stellen Sie sicher, dass Ihr Kabel ausreichend gegen Interferenzen abgeschirmt ist - das könnte das Problem beseitigen. Falls Ihre Leitung einfriert, sobald die Verbindung steht, und viele FCS-Fehler auftreten, könnte das daran liegen, dass Ihre Leitung nicht 8-Bit-rein ist. Stellen Sie sicher, dass Ihr Modem keinen Software-Flow-Control (XON/XOFF) verwendet. Falls Ihre Datenschnittstelle Software-Flow-Control verwenden muss, benutzen Sie den Befehl set accmap 0x000a0000, um &man.ppp.8; zu sagen, dass es die Zeichen ^Q und ^S maskieren soll. Ein weiterer Grund dafür, dass zu viele FCS-Fehler auftreten, könnte der sein, dass das andere Ende aufgehört hat, ppp zu sprechen. Aktivieren Sie async Logging, um festzustellen, ob es sich bei den eingehenden Daten tatsächlich um einen login- oder Shell-Prompt handelt. Wenn Sie am anderen Ende einen Shell-Prompt haben, ist es möglich, durch den Befehl close lcp &man.ppp.8; zu beenden, ohne die Verbindung zu beenden (ein folgender term-Befehl wird Sie wieder mit der Shell auf dem entfernten Rechner verbinden. Falls nichts in Ihrer Logdatei darauf hindeutet, warum die Verbindung beendet wurde, sollten Sie den Administrator des externen Rechners (Ihren ISP?) fragen, warum die Sitzung beendet worden ist. Wieso hängen die Verbindungen meiner &macos;- und &windows; 98-Maschinen (und eventuell auch andere µsoft; Betriebssysteme), wenn auf meinem Gateway PPPoE läuft? Vielen Dank an Michael Wozniak mwozniak@netcom.ca für die Erklärung und an Dan Flemming danflemming@mac.com für die Lösung für &macos;. Die Ursache des Problems ist ein so genannter Black Hole Router. &macos; und &windows; 98 (und wahrscheinlich auch die anderen Betriebssysteme von Microsoft) senden TCP Pakete, bei denen zum einen die angeforderte Segmentgröße zu groß für einen PPPoE-Rahmen ist (die Default-MTU für Ethernet beträgt 1500 Byte) und bei denen das don't fragment Bit gesetzt ist (das ist bei TCP allerdings Standard). Außerdem sendet der Router beim Provider nicht die eigentlich notwendigen must fragment-Meldungen zu dem Webserver, von dem Sie gerade eine Seite laden wollen. Es ist auch möglich, dass diese Meldung zwar erzeugt, aber danach von einem Firewall vor dem Webserver abgefangen wird. Wenn Ihnen dieser Webserver nun ein Paket schickt, das nicht in einen PPPoE-Rahmen passt, dann verwirft der Router dieses Paket und die Seite wird nicht geladen (einige Seiten/Grafiken werden geladen, weil ihre Größe kleiner ist als die MSS). Dies scheint leider der Normalfall zu sein (wenn die Leute doch nur wüssten, wie man einen Router konfiguriert... stöhn...) Eine der möglichen Lösungen für dieses Problem ist die Erzeugung des folgenden Schlüssels in der Registry des Windows-Clients: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000\MaxMTU Der Schlüssels sollte vom Typ String sein und den Wert 1436 haben, da einige ADSL-Router nicht mit größeren Paketen umgehen können. Wenn Sie &windows; 2000 verwenden, müssen Sie hingegen den Schlüssel Tcpip\Parameters\Interfaces\ID der Netzwerkkarte\MTU benutzen, außerdem müssen Sie als Typ DWORD verwenden. Die Knowledge Base von µsoft; enthält weitere Informationen darüber, wie sie die MTU einer &windows;-Maschine ändern, damit diese mit einem NAT-Router korrekt zusammenarbeitet. Vom besonderen Interesse sind die Artikel Q158474 - &windows; TCPIP Registry Entries und Q120642 - TCPIP & NBT Configuration Parameters for &windowsnt;. Bei &windows; 2000 können Sie alternativ auch, wie im Artikel 120642 beschrieben, mit regedit das DWORD Tcpip\Parameters\Interfaces\ID der Netzwerkkarte\EnablePMTUBHDetect auf 1 setzen. Mit den Bordmitteln von &macos; ist es leider nicht möglich, die TCP/IP-Einstellungen zu verändern. Es gibt jedoch kommerzielle Lösungen wie zum Beispiel OTAdvancedTuner (OT steht für OpenTransport, den TCP/IP-Stack von &macos;) von Sustainable Softworks, mit denen man die TCP/IP-Einstellungen bearbeiten kann. Wenn Sie als &macos;-Anwender NAT benutzen, sollten Sie im entsprechenden drop-down Menü den Punkt ip_interface_MTU auswählen und in der Dialogbox 1450 statt 1500 eingeben. Aktivieren Sie den Punkt Save as Auto Configure und klicken Sie danach auf Make Active. &man.ppp.8; kennt seit Version 2.3 den Befehl enable tcpmssfixup, mit dem die MSS automatisch korrigiert wird. Wenn Sie einen ältere Version von &man.ppp.8; benutzen müssen, könnte der Port tcpmssd für Sie interessant sein. Nichts von alledem hilft - ich bin verzweifelt! Was soll ich machen? Falls alles andere fehlschlägt, senden Sie möglichst umfangreiche Informationen, einschließlich Ihrer Konfigurationsdateien, wie Sie &man.ppp.8; starten, die relevanten Teile Ihrer Logdateien und die Ausgabe des Befehls netstat -rn (vor und nach Aufbau der Verbindung) an die Mailingliste &a.de.questions; oder die Newsgroup de.comp.os.unix.bsd. Irgend jemand sollte Ihnen dann weiterhelfen. Serielle Verbindungen Dieses Kapitel beantwortet häufig gestellte Fragen zu seriellen Verbindungen mit FreeBSD. PPP und SLIP werden im Abschnitt Netzwerke behandelt. Wie kann ich feststellen, ob FreeBSD meine seriellen Schnittstellen gefunden hat? Wenn der FreeBSD Kernel bootet, testet er die seriellen Schnittstellen, für die er konfiguriert wurde. Sie können entweder Ihrem System aufmerksam beim Booten zusehen und die angezeigten Nachrichten lesen, oder Sie führen den Befehl &prompt.user; dmesg | grep sio aus, nachdem Ihr System hochgefahren ist und läuft. Hier ist ein Beispiel einer Ausgabe nach dem oben genannten Befehl: sio0: at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1: at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A Es zeigt zwei serielle Schnittstellen. Die erste verwendet Port-Adresse 0x3f8, IRQ 4 und hat einen 16550A UART Chip. Die zweite benutzt ebenfalls einen 16550A UART, jedoch Port-Adresse 0x2f8 und IRQ 3. Modemkarten werden wie serielle Schnittstellen behandelt. Der einzige Unterschied ist, dass an diesen Schnittstellen immer ein Modem angeschlossen ist. Der GENERIC Kernel beinhaltet Unterstützung für zwei serielle Schnittstellen, die den im Beispiel genannten Port und IRQ verwenden. Wenn diese Einstellungen nicht richtig für Ihr System sind, Sie Modemkarten hinzugefügt oder mehr serielle Schnittstellen haben als Ihre Kernelkonfiguration zulässt, konfigurieren Sie Ihren Kernel einfach neu. In dem Kapitel über die Kernelkonfiguration finden Sie mehr Details. Wie kann ich feststellen, ob FreeBSD meine Modemkarten gefunden hat? Die vorherige Frage sollte darauf eine Antwort geben. Wie kann ich auf die seriellen Schnittstellen in FreeBSD zugreifen? Die in &man.sio.4; beschriebene serielle Schnittstelle sio2 (COM3 unter &ms-dos;/&windows;), ist /dev/cuaa2 für Geräte mit abgehenden Verbindungen und /dev/ttyd2 für Geräte mit eingehenden Verbindungen. Was ist der Unterschied zwischen den beiden Geräteklassen? Sie benutzen ttydX für eingehende Verbindungen. Wird /dev/ttydX im blockierenden Modus geöffnet, wartet ein Prozess darauf, dass das entsprechende cuaaX Gerät inaktiv und der Empfangssignalpegel Mit Empfangssignalpegel oder Trägersignalerkennung wird hier die carrier detect Leitung bezeichnet. aktiv ist. Wird das cuaaX Gerät geöffnet, vergewissert es sich, dass die serielle Schnittstelle nicht bereits von dem ttydX Gerät in Gebrauch ist. Sollte die Schnittstelle verfügbar sein, stiehlt es sie von dem ttydX Gerät. Das cuaaX Gerät kümmert sich nicht um Trägersignalerkennung. Mit diesem Schema und einem automatisch antwortenden Modem, können sich Benutzer von aussen einloggen, Sie können weiterhin mit demselben Modem wählen und das System kümmert sich um die Konflikte. Wie kann ich die Unterstützung für eine Karte mit mehreren seriellen Schnittstellen aktivieren? Die Sektion über die Kernelkonfiguration bietet Informationen darüber, wie Sie Ihren Kernel konfigurieren. Für eine Karte mit mehreren seriellen Schnittstellen, schreiben Sie eine &man.sio.4; Zeile für jede serielle Schnittstelle auf der Karte in die Kernelkonfigurationsdatei. Aber achten Sie darauf, den IRQ und die Vektorbezeichnung nur in einem der Einträge zu plazieren. Alle seriellen Schnittstellen auf der Karte sollten sich einen IRQ teilen. Daher sollten Sie den IRQ nur beim letzten Eintrag angeben. Aktivieren Sie auch die COM_MULTIPORT Option. Das folgende Beispiel ist geeignet für eine AST Karte mit 4 seriellen Schnittstellen, die IRQ 7 benutzt: options "COM_MULTIPORT" device sio4 at isa? port 0x2a0 tty flags 0x781 device sio5 at isa? port 0x2a8 tty flags 0x781 device sio6 at isa? port 0x2b0 tty flags 0x781 device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr Die Flags zeigen an, dass die Master-Schnittstelle die Minor-Nummer 7 (0x700) hat, Diagnosen während des Bootens ermöglicht sind (0x080), und dass sich alle Schnittstellen einen IRQ teilen (0x001). Kann FreeBSD mehrere Karten mit mehreren seriellen Schnittstellen mit den gleichen IRQs verwalten? Noch nicht. Sie müssen für jede Karte einen anderen IRQ verwenden. Kann ich die vorgegebenen seriellen Parameter für eine Schnittstelle einstellen? Das ttydX (oder cuaaX) Gerät ist das reguläre Gerät, das man in Anwendungen öffnet. Wenn ein Prozess es öffnet, hat es die voreingestellten Terminal Eingabe/Ausgabe-Einstellungen. Sie können diese Einstellungen mit dem Befehl &prompt.root; stty -a -f /dev/ttyd1 ansehen. Wenn Sie die Einstellungen für dieses Gerät ändern, sind die Einstellungen gültig, bis das Gerät geschlossen wird. Wird es danach geöffnet, hat es wieder die vorgegebenen Einstellungen. Um Änderungen an den vorgegebenen Einstellungen vorzunehmen, können Sie das Anfangsstatus-Gerät öffnen und dessen Einstellungen anpassen. Um zum Beispiel den CLOCAL Modus, 8 Bits und XON/XOFF Datenflusskontrolle als Standard für ttyd5 einzustellen, geben Sie &prompt.root; stty -f /dev/ttyid5 clocal cs8 ixon ixoff ein. Eine gute Stelle um dies zu tun ist in /etc/rc.serial. Jetzt hat eine Anwendung diese Einstellungen als Standardwerte, wenn sie ttyd5 öffnet. Die Anwendung kann die Einstellungen jedoch immer noch nach Belieben verändern. Man aber kann auch bestimme Einstellungen davor schützen, von einer Anwendung verändert zu werden, indem man Veränderungen am lock state Gerät vornimmt. Um beispielsweise die Geschwindigkeit von ttyd5 auf 57600 bps festzusetzen: &prompt.root; stty -f /dev/ttyld5 57600 Wenn jetzt eine Anwendung ttyd5 öffnet und versucht die Geschwindigkeit zu verändern, wird diese bei 57600 bps bleiben. Natürlich sollten Sie das Schreiben auf die Anfangsstatus- und lock state-Geräte nur root erlauben. Das &man.MAKEDEV.8; Skript tut dies nicht, wenn es die Geräte-Einträge erstellt. Wie kann ich Einwahl-Logins über mein Modem aktivieren? Also Sie wollen ein Internet Service Provider werden, ja? Als erstes brauchen Sie eines oder mehrere Modems, die automatisches Antworten beherrschen. Ihr Modem sollte auf Trägersignalerkennung reagieren und nicht fortlaufend die Leitung offen halten. Es muss auflegen und sich neu initialisieren können, wenn die Data Terminal Ready (DTR) Leitung ausgeschaltet wird. Es sollte wahrscheinlich RTS/CTS oder gar keine lokale Datenflusskontrolle benutzen. Zuletzt muss es eine konstante Geschwindigkeit zwischen dem Computer und sich selbst verwenden, aber es sollte (um die Anrufer freundlich zu behandeln) eine Geschwindigkeit zwischen sich und dem entfernten Modem aushandeln können. Für viele Modems, die mit dem Hayes Befehlssatz kompatibel sind, erzeugt der folgende Befehl diese Einstellungen und legt sie im nicht-flüchtigen Speicher ab: AT &C1 &D3 &K3 &Q6 S0=1 &W Die Sektion über das Senden von AT-Befehlen bietet weitere Informationen, wie man diese Einstellungen vornimmt, ohne zu einem &ms-dos; Terminalprogramm zu flüchten. Als nächstes erstellen Sie einen Eintrag in /etc/ttys für das Modem. Diese Datei listet alle Schnittstellen auf, auf denen das Betriebssystem Einlogversuche erwartet. Fügen Sie eine solche Zeile hinzu: ttyd1 "/usr/libexec/getty std 57600" dialup on insecure Diese Zeile bedeutet, dass an der zweiten seriellen Schnittstelle (/dev/ttyd1) ein Modem angeschlossen ist, das mit 57600 bps läuft und keine Parität besitzt (std.57600 aus /etc/gettytab). Der Terminal-Typ für diese Schnittstelle ist dialup (Einwahl). Die Schnittstelle ist eingeschaltet (on) und unsicher (insecure) – das bedeutet, man kann sich über diese Schnittstelle nicht als root einloggen. Für Einwahlanschlüsse wie diesen, benutzen Sie den ttydX Eintrag. Es ist relativ geläufig, dialup als Terminal-Typ zu verwenden. Viele Benutzer richten in ihren .profile oder .login Dateien eine Abfrage für das eigentliche Terminal ein, wenn der Start-Typ dialup ist. Das Beispiel zeigt die Schnittstelle als unsicher und um über diese Schnittstelle root zu werden, müssen Sie sich als normaler Benutzer einloggen und &man.su.1;. Wenn sie secure (sicher) als Einstellung verwenden, kann sich root direkt einloggen. Nachdem Sie Modifikationen in /etc/ttys vorgenommen haben, müssen Sie ein hangup oder HUP Signal an &man.init.8; senden: &prompt.root; kill -HUP 1 Das bringt &man.init.8; dazu, die Datei /etc/ttys neu einzulesen. init startet dann an allen als eingeschaltet (on) markierten Schnittstellen die getty-Prozesse. Sie können herausfinden ob noch Logins für Ihre Schnittstelle verfügbar sind, wenn Sie folgendes eingeben: &prompt.user; ps -ax | grep '[t]tyd1' Sie sollten etwas sehen, das so ähnlich aussieht wie: 747 ?? I 0:00:04 /usr/libexec/getty std.57600 ttyd1 Wie kann ich ein Hardware-Terminal mit meiner FreeBSD Box verbinden? Wenn Sie einen anderen Computer als Terminal für Ihr FreeBSD System verwenden wollen, verbinden Sie die beiden seriellen Schnittstellen mit einem Nullmodem-Kabel. Wenn Sie ein echtes (Hardware-)Terminal benutzen, lesen Sie die Begleitinformationen. Ändern Sie /etc/ttys wie oben angegeben. Wenn Sie zum Beispiel ein WYSE-50 Terminal mit der fünften seriellen Schnittstelle verbinden wollen, schreiben Sie einen Eintrag wie diesen: ttyd4 "/usr/libexec/getty std.38400" wyse50 on secure Das Beispiel zeigt, dass die Schnittstelle an /dev/ttyd4 mit einem wyse50 Terminal mit 38400 bps und ohne Parität (std.38400 aus /etc/gettytab) verbunden ist und root Logins möglich sind (secure). Warum kann ich tip oder cu nicht laufen lassen? Vielleicht sind auf Ihrem System die Programme &man.tip.1; und &man.cu.1; nur von uucp und der Gruppe dialer ausführbar. Sie können die Gruppe dialer verwenden, um zu kontrollieren wer Zugriff auf Ihr Modem oder entfernte Systeme hat. Fügen Sie sich einfach selbst zur Gruppe dialer hinzu. Als Alternative können Sie jeden Benutzer auf Ihrem System &man.tip.1; und &man.cu.1; verwenden lassen, dazu müssen Sie das folgende eingeben: &prompt.root; chmod 4511 /usr/bin/cu &prompt.root; chmod 4511 /usr/bin/tip Mein Hayes Modem wird nicht unterstützt – was kann ich tun? Eigentlich ist die Onlinehilfe für &man.tip.1; nicht mehr aktuell. Es gibt einen eingebauten, allgemeinen Hayes Wähler. Verwenden Sie einfach at=hayes in /etc/remote. Der Hayes Treiber ist nicht schlau genug, um ein paar der erweiterten Merkmale von neueren Modems zu erkennen – Nachrichten wie BUSY, NO DIALTONE oder CONNECT 115200 verwirren ihn nur. Sie sollten diese Nachrichten mit Hilfe von ATX0&W abschalten, wenn Sie tip benutzen. Das Anwahl-Timeout von &man.tip.1; beträgt 60 Sekunden. Ihr Modem sollte weniger verwenden, oder tip denkt, dass ein Kommunikationsfehler vorliegt. Versuchen Sie es mit ATS7=45&W. Tatsächlich unterstützt die ausgelieferte Version von &man.tip.1; es noch nicht vollständig. Die Lösung ist, tipconf.h im Verzeichnis /usr/src/usr.bin/tip/tip zu editieren. Dafür benötigen Sie natürlich die Quellcode Distribution. Editieren Sie die Zeile #define HAYES 0 in #define HAYES 1 um. Dann führen Sie make und make install aus. Es sollte jetzt funktionieren. Wie soll ich die AT Befehle eingeben? Erstellen Sie einen so genannten direct Eintrag in /etc/remote. Wenn Ihr Modem zum Beispiel an der ersten seriellen Schnittstelle, /dev/cuaa0, angeschlossen ist, dann fügen Sie die folgende Zeile hinzu: cuaa0:dv=/dev/cuaa0:br#19200:pa=none Verwenden Sie die höchste bps Rate, die Ihr Modem in der br Fähigkeit unterstützt. Geben Sie dann tip cuaa0 ein und Sie sind mit Ihrem Modem verbunden. Wenn auf Ihrem System keine /dev/cuaa0 Datei existiert, geben Sie folgendes ein: &prompt.root; cd /dev &prompt.root; sh MAKEDEV cuaa0 Oder benutzen Sie cu als root mit dem folgenden Befehl: &prompt.root; cu -lline -sspeed line steht für die serielle Schnittstelle (/dev/cuaa0) und speed für die Geschwindigkeit (57600). Wenn Sie mit dem Eingeben der AT Befehle fertig sind, beenden Sie mit ~.. Wieso funktioniert das <@> Zeichen für die pn Fähigkeit nicht? Das <@> Zeichen in der Telefonnummerfähigkeit sagt tip, dass es in der Datei /etc/phones nach einer Nummer suchen soll. Aber <@> ist auch ein spezielles Zeichen in den Dateien, in denen Fähigkeiten beschrieben werden, wie /etc/remote. Schreiben Sie es mit einem '\' (backslash): pn=\@ Wie kann ich von der Kommandozeile eine Telefonnummer wählen? Stellen Sie einen allgemeinen Eintrag in /etc/remote. Zum Beispiel: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du: Mit einem Befehl wie tip -115200 5551234 können Sie dann wählen. Sollten Sie &man.cu.1; im Gegensatz zu &man.tip.1; bevorzugen, verwenden Sie einen allgemeinen cu-Eintrag: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du: Zum Wählen können Sie dann cu 5551234 -s 115200 eingeben. Muss ich dabei jedes Mal die bps Rate angeben? Schreiben Sie einen tip1200 oder einen cu1200 Eintrag, aber geben Sie auch die bps Rate an, die Ihr Modem wirklich unterstützt. Leider denkt &man.tip.1;, dass 1200 bps ein guter Standardwert ist und deswegen sucht es nach einem tip1200-Eintrag. Natürlich müssen Sie nicht wirklich 1200 bps benutzen. Wie kann ich möglichst komfortabel über einen Terminal-Server auf verschiedene Rechner zugreifen? Sie müssen nicht warten bis Sie verbunden sind, und jedes Mal CONNECT Rechner eingeben, benutzen Sie tip's cm Fähigkeit. Sie können diese Einträge in /etc/remote verwenden: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234: Mit den Befehlen tip pain oder tip muffin können Sie eine Verbindungen zu den Rechnern pain oder muffin herstellen; mit tip deep13 verbinden Sie sich mit dem Terminal Server. Kann tip mehr als eine Verbindung für jede Seite ausprobieren? Das ist oft ein Problem, wenn eine Universität mehrere Telefonleitungen hat und viele tausend Studenten diese benutzen wollen. Erstellen Sie einen Eintrag für Ihre Universität in /etc/remote und benutzen Sie <\@> für die pn Fähigkeit: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none: Listen Sie die Telefonnummern der Universität in /etc/phones auf: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 &man.tip.1; probiert jede der Nummern in der aufgelisteten Reihenfolge und gibt dann auf. Möchten Sie, dass tip beim Versuchen eine Verbindung herzustellen nicht aufgibt, lassen Sie es in einer while-Schleife laufen. Warum muss ich zweimal Ctrl P tippen, um ein Ctrl P zu senden? Ctrl P ist das voreingestellte Zeichen, mit dem eine Übertragung erzwungen werden kann und wird benutzt, um &man.tip.1; zu sagen, dass das nächste Zeichen direkt gesendet werden soll und nicht als Fluchtzeichen interpretiert werden soll. Mit Hilfe der ~s Fluchtsequenz, mit der man Variablen setzen kann, können Sie jedes andere Zeichen als force-Zeichen definieren. Geben Sie ~sforce=zeichen ein und drücken Sie Enter. Für zeichen können Sie ein beliebiges einzelnes Zeichen einsetzen. Wenn Sie zeichen weglassen, ist das force-Zeichen nul, das Sie mit Ctrl 2 oder Ctrl SPACE eingeben können. Ein guter Wert für zeichen ist Shift Ctrl 6 , welches ich erst auf ein paar Terminal-Servern in Benutzung gesehen habe. Sie können das force-Zeichen auch bestimmen, indem Sie in $HOME/.tiprc das folgende einstellen: force=single-char Warum ist auf einmal alles was ich schreibe in GROSSBUCHSTABEN?? Sie müssen Ctrl A eingegeben haben, das raise-Zeichen von &man.tip.1; das speziell für Leute mit defekten Caps Lock Tasten eingerichtet wurde. Benutzen Sie ~s wie oben und setzen Sie die Variable raisechar auf etwas, das Ihnen angemessen erscheint. Tatsächlich kann die Variable auf das gleiche Zeichen wie das force-Zeichen gesetzt werden, wenn Sie diese Fähigkeiten niemals benutzen wollen. Hier ist ein Muster der .tiprc Datei, perfekt für Emacs Benutzer, die oft Ctrl 2 und Ctrl A tippen müssen: force=^^ raisechar=^^ Das ^^ steht für Shift Ctrl 6 . Wie kann ich Dateien mit tip übertragen? Wenn Sie mit einem anderen &unix; System kommunizieren, können Sie Dateien senden und empfangen – mit ~p (put) und ~t (take). Diese Befehle lassen &man.cat.1; und &man.echo.1; auf dem entfernten System laufen, um Dateien zu akzeptieren und zu senden. Die Syntax ist: ~p <local-file> [<remote-file>] ~t <remote-file> [<local-file>] Es gibt keine Fehlerkontrolle, deshalb sollten Sie besser ein anderes Protokoll benutzen, wie zmodem. Wie kann ich zmodem mit tip laufen lassen? Zuerst installieren Sie ein zmodem Programm aus der Ports-Sammlung (eines der beiden aus der comms-Kategorie, lrzsz oder rzsz). Um Dateien zu empfangen, starten Sie das Programm zum Senden auf dem entfernten Computer. Drücken Sie dann Enter gefolgt von ~C rz (oder ~C lrz, wenn Sie lrzsz installiert haben), um diese lokal zu empfangen. Um Dateien zu senden, starten Sie das Programm zum Empfangen auf dem entfernten Computer. Drücken Sie dann Enter gefolgt von ~C sz Dateien (oder ~C lsz Dateien), um sie zum entfernten System zu senden. Verschiedene Fragen FreeBSD benutzt viel mehr Swap-Speicher als &linux;. Warum? Es sieht nur so aus, als ob FreeBSD mehr Swap benutzt, als &linux;. Tatsächlich ist dies nicht der Fall. In dieser Hinsicht besteht der Hauptunterschied zwischen FreeBSD und &linux; darin, dass FreeBSD vorbeugend vollkommen untätige, unbenutzte Seiten aus dem Hauptspeicher in den Swap-Bereich auslagert, um mehr Hauptspeicher für die aktive Nutzung zur Verfügung zu stellen. &linux; tendiert dazu, nur als letzten Ausweg Seiten in den Swap-Bereich auszulagern. Die spürbar höhere Nutzung des Swap-Speichers wird durch die effizientere Nutzung des Hauptspeichers wieder ausgeglichen. Beachten Sie, dass FreeBSD in dieser Hinsicht zwar vorbeugend arbeitet, es entscheidet jedoch nicht willkürlich, Seiten auszulagern, wenn das System vollkommen untätig ist. Deshalb werden Sie feststellen, dass nicht alle Seiten Ihres Systems ausgelagert wurden, wenn Sie morgens aufstehen, nachdem das System eine Nacht lang nicht benutzt worden ist. Warum zeigt mir &man.top.1; so wenig freien Speicher an, obwohl nur wenige Programme laufen? Die Antwort ist ganz einfach: Freier Speicher ist verschwendeter Speicher. Der FreeBSD Kernel verwendet den von den Programmen nicht genutzten Speicher automatisch für den Plattencache. Die in &man.top.1; für Inact, Cache und Buf gemeldeten Werte stehen alle für zwischengespeicherte Daten mit unterschiedlichem Alter. Wenn das System wiederholt auf Daten zugreifen muss, braucht es nicht auf die langsame Platte zuzugreifen, da die Daten noch zwischengespeichert sind. Dadurch erhöht sich die Performance. Ganz generell ist es ein gutes Zeichen, wenn &man.top.1; einen kleinen Wert bei Free anzeigt, solange der Wert nicht extrem klein ist. Anmerkung des Übersetzers: Mit extrem klein sind hier Werte unterhalb 512 KByte gemeint. Warum ändert chmod die Zugriffsrechte auf symbolische Links nicht? Für symbolische Links gibt es keine separaten Zugriffsrechte und standardmäßig folgt &man.chmod.1; dem Link nicht; die Zugriffsrechte für die Datei, auf die der symbolische Link zeigt, werden also nicht verändert. Wenn Sie eine Datei mit dem Namen foo und einen auf diese Datei zeigenden symbolischen Link mit dem Namen bar haben, wird das folgende Kommando niemals einen Fehler melden. &prompt.user; chmod g-w bar Trotzdem werden die Zugriffsrechte für foo nicht geändert. Hierzu müssen Sie entweder oder zusammen mit der Option benutzen. Weitere Informationen finden Sie in den Manualpages &man.chmod.1; und &man.symlink.7;. Die Option bewirkt ein rekursives &man.chmod.1;. Seien Sie vorsichtig, wenn Sie bei &man.chmod.1; Verzeichnisse oder symbolische Links zu Verzeichnissen angeben. Wenn Sie die Zugriffsrechte eines Verzeichnisses ändern möchten, das durch einen symbolischen Link referenziert wird, benutzen Sie &man.chmod.1; ohne irgendwelche Optionen und folgen dem symbolischen Link durch einen abschließenden Schrägstrich (/). Falls z.B. foo ein symbolischer Link zum Verzeichnis bar ist und Sie die Zugriffsrechte von foo (tatsächlich bar) ändern möchten, dann benutzen Sie etwas ähnliches wie: &prompt.user; chmod 555 foo/ Durch den abschließenden Schrägstrich folgt &man.chmod.1; dem symbolischen Link foo, um die Zugriffsrechte für das Verzeichnis bar zu ändern. Kann ich DOS-Programme unter FreeBSD ausführen? Ja. Sie können emulators/doscmd verwenden, das über die Ports-Sammlung verfügbar ist. doscmd war früher Teil des Basissystems von &os;, es wurde aber vor der Veröffentlichung von &os; 5.3 daraus entfernt. Falls doscmd nicht ausreicht, können Sie den Port emulators/pcemu verwenden, der einen 8088 und genug BIOS-Funktionen emuliert, um DOS-Textanwendungen laufen zu lassen. Der Port benötigt das X-Window-System. Was muss ich tun, um die FreeBSD-Dokumentation in meine Muttersprache zu übersetzen? Informationen zu diesem Thema finden Sie in der FAQ des FreeBSD German Documentation Project. Warum kommen alle meine Mails, die ich an @FreeBSD.org schicke, wieder zurück? Das Mailsystem von FreeBSD.org verwendet einige der strengeren Überprüfungen von Postfix für eingehende Mails. Mails, bei denen es Anzeichen für Konfigurationsprobleme oder Spam gibt, werden nicht akzeptiert. Dies kann aus einem der folgenden Gründe geschehen: Die Mail kommt von einem System oder Netzwerk, dass für Spam-Aktivitäten bekannt ist. Die Mailserver von FreeBSD akzeptierten keine Mails von bekannten Spam-Quellen. Wenn Sie eine Firma oder Domain benutzen, die Spam erzeugt oder verteilt, sollten Sie sich einen anderen ISP suchen. Der Mailtext enthält HTML. Mail sollte immer im Klartext gesendet werden, Sie sollten ihr Mailprogramm entsprechend einstellen. Das Mailsystem kann die IP-Adresse des einliefernden Systems nicht in einen symbolischen Namen umwandeln. Funktionierendes reverse DNS ist eine Vorbedingung, damit ihre Mails angenommen wird. Sorgen Sie dafür, dass der reverse DNS für Ihren Mailserver korrekt konfiguriert wird. Viele Anbieter für Privatkunden geben Ihnen diese Möglichkeit nicht. In diesem Fall sollten Sie Ihre Mails über den Mailserver Ihres Providers versenden. Der Rechnername, der im EHLO/HELO Teil der SMTP Kommunikation übergeben wird, kann nicht zu einer IP-Adresse aufgelöst werden. Damit die E-Mail akzeptiert wird, brauchen Sie einen voll qualifizierten Rechnernamen, der im DNS eingetragen ist. Wenn Sie diesen nicht besitzen, benutzen Sie bitte den Mailserver Ihres Providers, um E-Mails zu verschicken. Die Message-ID Ihrer Mail endet in localhost. Einige Mail-Clients generieren eine Message-ID, die nicht akzeptiert wird. Sie müssen Ihren Mail-Client so konfigurieren, dass er eine gültige Message-ID generiert. Alternativ können Sie die Message-ID von Ihrem Mailserver umschreiben lassen. Wo kann ich einen freien FreeBSD-Account bekommen? Das FreeBSD Project bietet zwar keinen freien Zugang zu seinen Servern an; andere Firmen bieten jedoch frei zugängliche &unix; Systeme. Die Kosten variieren und es kann sein, dass nicht alle Dienste zur Verfügung stehen. Arbornet, Inc, auch als M-Net bekannt, bietet seit 1983 uneingeschränkten Zugang zu &unix; Systemen. Zunächst wurde eine Altos-Maschine mit System III benutzt, 1991 erfolgte dann der Wechsel zu BSD/OS. Im Juni 2000 erfolgte ein erneuter Wechsel, diesmal zu FreeBSD. M-Net bietet Zugang mit Telnet und SSH und den Zugang zur gesamten Software von FreeBSD. Allerdings ist der Zugriff auf das Netzwerk auf Mitglieder und Gönner beschränkt, die eine Spende an die nicht-kommerzielle Organisation geleistet haben. M-Net stellt zusätzlich ein Mailbox-System und einen interaktiven Chat zur Verfügung. Grex bietet ein ganz ähnlichen Dienst wie M-Net an, dazu gehören auch das Mailbox-System und der interaktive Chat. Allerdings wird eine SUN4M mit &sunos; benutzt. Was ist sup und wie benutze ich es? Der Name SUP steht für Software Update Protocol und wurde von der CMU (Carnegie Mellon University) entwickelt, um ihre Entwicklungszweige zu synchronisieren. Wir haben es benutzt, um entfernte Sites mit unseren zentralen Quellcodeentwicklungen zu synchronisieren. SUP ist nicht sehr bandbreitenfreundlich und wurde abgelöst. Die derzeit empfohlene Methode, um Ihren Quellcode auf dem neuesten Stand zu halten ist CVSup. Wie heißt das niedliche rote Kerlchen? Er ist namenlos, es ist einfach der der BSD Daemon. Wenn Sie ihm unbedingt einen Namen geben wollen, rufen Sie ihn beastie. Beachten Sie aber, dass beastie wie BSD ausgesprochen wird. Weitere Informationen über den BSD daemon finden Sie auf seiner Homepage. Kann ich Bilder des BSD Daemon verwenden? Eventuell. Der BSD Daemon unterliegt dem Copyright von Marshall Kirk McKusick. Wenn Sie genaue Informationen über die Einschränkungen bei der Nutzung brauchen, sollten Sie sein Statement on the Use of the BSD Daemon Figure lesen. Kurz gesagt, können Sie den BSD Daemon benutzen, solange es für einen privaten Zweck ist und die Nutzung geschmackvoll bleibt. Für den kommerziellen Einsatz brauchen Sie die Zustimmung von Kirk McKusick. Weitere Informationen erhalten Sie auf der Webseite BSD Daemon's home page. Woher kann ich Bilder des BSD Daemon bekommen? Einige Bilder in den Format xfig und eps sind unter /usr/share/examples/BSD_daemon/ zu finden. Ich habe in den Mailinglisten eine Abkürzung oder einen Begriff gesehen, den ich nicht kenne. Wo erhalte ich eine Erklärung dazu? Sehen Sie bitte im FreeBSD-Glossar nach. Warum sollte mich die Farbe des Fahrradschuppens interessieren? Die ganz, ganz kurze Antwort ist: Überhaupt nicht. Die etwas längere Antwort lautet: Nur weil Sie in der Lage sind, einen Fahrradschuppen zu bauen, müssen Sie noch lange nicht andere davon abhalten, nur weil Ihnen die Farbe nicht gefällt. Dies ist natürlich eine Metapher dafür, dass Sie nicht eine Diskussion über jede kleine Änderung beginnen sollen, nur weil Sie das können. Einige Leute behaupten sogar, dass die Anzahl der (nutzlosen) Kommentare über eine Änderung umgekehrt proportional zur Komplexität der Änderung ist. Die noch längere und vollständigere Antwort ist, dass &a.phk; nach einen langen Diskussion über das Thema "Soll &man.sleep.1; Sekundenbruchteile als Parameter akzeptieren?" eine lange Mail mit dem Titel A bike shed (any colour will do) on greener grass... schrieb. Die einschlägigen Teile der Nachricht lauteten:
&a.phk; in freebsd-hackers, 2.10.1999 Einige von Euch haben mich gefragt, Was meinst Du mit dem Fahrradschuppen? Es ist eine lange oder eigentlich eher eine sehr alte und doch sehr kurze Geschichte. C. Northcote Parkinson schrieb in den frühen Sechzigern ein Buch mit dem Namen Parkinson's Law, das viele Einblick in die Beziehungen innerhalb des Managements gibt. [ein paar Kommentare zum Buch gestrichen] In dem Beispiel mit dem Fahrradschuppen ist die andere wichtige Komponente ein Kernkraftwerk. Ich glaube, dass zeigt schon, wie alt dieses Buch ist. Parkinson zeigte, dass man zum Vorstand gehen kann und die Genehmigung für ein mehrere Millionen oder sogar Milliarden Dollar teures Kernkraftwerk bekommt; wenn man aber einen Fahrradschuppen bauen will, wird man in endlose Diskussionen verwickelt. Laut Parkinson liegt das daran, dass ein Kernkraftwerk so groß, so teuer und so kompliziert ist, dass die Leute es nicht verstehen. Und bevor sie versuchen, es zu verstehen, verlassen Sie sich lieber darauf, dass irgend jemand sicherlich die ganzen Details geprüft hat, bevor das Projekt bis zum Vorstand gekommen ist. Im Buch von Richard P. Feynmann finden sich einige interessante und sehr passende Beispiele aus dem Gebiet von Los Alamos. Ein Fahrradschuppen ist was anderes. Jeder kann an seinem freien Wochenende einen bauen und hat trotzdem noch genug Zeit für die Sportschau. Daher ist es unwichtig, wie gut man sich vorbereitet und wie sinnvoll der eigene Vorschlag ist. Irgend jemand wird die Möglichkeit nutzen und zeigen, dass er seine Arbeit tut, dass er aufmerksam ist, dass er da ist. In Dänemark nennen wir dieses Verhalten Seine Fingerabdrücke hinterlassen. Es geht um persönlichen Stolz und Prestige; die Chance, auf irgend etwas zu zeigen und zu sagen zu können: Da! Das habe Ich getan. Politiker leiden sehr stark darunter, aber viele Leute verhalten sich so, wenn sie die Chance haben. Denkt einfach mal an Fußabdrücke in feuchtem Zement.
Nicht ganz ernstgemeinte Fragen Wie cool ist FreeBSD? Q. Hat irgend jemand Temperaturmessungen durchgeführt, während FreeBSD läuft? Ich weiss, dass &linux; cooler läuft, als DOS, habe aber niemals gesehen, dass FreeBSD erwähnt wurde. Es scheint sehr heiß zu laufen. A. Nein, aber wir haben zahlreiche Geschmackstests mit verblendeten Freiwilligen durchgeführt, denen außerdem zuvor 250 Mikrogramm LSD-25 verabreicht wurden. 35% der Freiwilligen sagte, dass FreeBSD nach Orange schmeckte, &linux; hingegen schmecke wie purple haze (Anm. d. Übersetzers: Song von Jimmy Hendrix und LSD-Marke). Keine der Gruppen hat besondere Abweichungen der Temperatur erwähnt. Eventuell hätten wir sämtliche Ergebnisse dieser Untersuchung fortwerfen sollen, als wir festgestellt haben, dass zu viele der Freiwilligen den Raum während der Tests verlassen haben und dadurch die Ergebnisse verfälscht haben. Wir glauben, dass die meisten der Freiwilligen nun bei Apple sind und an ihrer neuen scratch and sniff Oberfläche arbeiten. Es ist ein lustiges, altes Geschäft, in dem wir uns befinden! Ernsthaft, FreeBSD und &linux; benutzen beide die Instruktion HLT (halt), wenn das System untätig ist, wodurch der Energieverbrauch und dadurch die produzierte Wärme reduziert wird. Falls Sie auch noch APM (Advanced Power Management) konfiguriert haben, kann FreeBSD Ihre CPU auch in einen Low-Power-Modus bringen. Wer kratzt in meinen Speicherbänken?? Q. Gibt es irgend etwas seltsames, das FreeBSD tut, wenn ich den Kernel kompiliere, das dazu führt, dass der Speicher ein kratzendes Geräusch macht? Bei der Kompilierung (und auch für einen kurzen Moment nach der Erkennung des Floppy-Laufwerks beim Hochfahren), kommt ein seltsames kratzendes Geräusch von etwas das die Speicherbänke zu sein scheinen. A. Ja! In der BSD-Dokumentation finden Sie häufige Verweise auf Daemons und was die meisten Leute nicht wissen, ist, dass diese sich auf echte, nicht-körperlichen Wesen beziehen, die Besitz von Ihrem Computer ergriffen haben. Das kratzende Geräusch, das von Ihrem Speicher kommt, ist in Wirklichkeit hochtöniges Flüstern, das unter den Daemons ausgetauscht wird, während Sie entscheiden, wie Sie die verschiedenen Systemadministrationsaufgaben, am besten erledigen. Wenn Sie das Geräusch stört, wird ein fdisk /mbr sie vertreiben, aber wundern Sie sich nicht, wenn sie feindlich reagieren und versuchen, Sie aufzuhalten. Wenn Sie während der Ausführung zu irgendeinem Zeitpunkt die teuflische Stimme von Bill Gates aus dem eingebauten Lautsprecher kommen hören, laufen Sie weg und sehen Sie sich auf keinen Fall um! Befreit von dem ausgleichenden Einfluss der BSD Dämonen sind die beiden Dämonen von DOS und &windows; oft dazu in der Lage, die totale Kontrolle über Ihre Maschine für die ewige Verdammung Ihrer Seele zurückzuerlangen. Da Sie jetzt die Wahrheit kennen, würden Sie es vorziehen, sich an die Geräusche zu gewöhnen, wenn Sie die Wahl hätten. Wie viele FreeBSD-Hacker braucht man, um eine Glühbirne auszuwechseln? Eintausendeinhundertundneunundsechzig: Dreiundzwanzig, die sich bei -CURRENT beschweren, dass das Licht aus ist; Vier, die behaupten, dass es sich um ein Konfigurationsproblem handelt und dass solche Dinge wirklich nach -questions gehören; Drei, die PRs hierzu einreichen, einer von ihnen wird falsch unter DOC abgelegt und fristet sein Dasein im Dunkeln; Einen, der eine ungetestete Glühbirne einreicht, wonach buildworld nicht mehr funktioniert, und sie dann fünf Minuten später wieder herausnimmt; Acht, die die PR-Erzeuger beschimpfen, weil sie zu ihren PRs keine Patche hinzugefügt haben; Fünf, die sich darüber beschweren, dass buildworld nicht mehr funktioniert; Einunddreißig, die antworten, dass es bei ihnen funktioniert und dass sie cvsup wohl zu einigem ungünstigen Zeitpunkt durchgeführt haben; Einen, der einen Patch für eine neue Glühbirne an -hackers schickt; Einen, der sich beschwert, dass es vor drei Jahren Patches hierfür hatte, aber als er sie nach -CURRENT schickte, sind sie einfach ignoriert worden und er hatte schlechte Erfahrungen mit dem PR-System; nebenbei ist die vorgeschlagene Glühbirne nicht reflexiv; Siebenunddreißig, die schreien, dass Glühbirnen nicht in das Basissystem gehören, dass Committer nicht das Recht haben, solche Dinge durchzuführen, ohne die Gemeinschaft zu konsultieren und WAS GEDENKT -CORE HIER ZU TUN!? Zweihundert, die sich über die Farbe des Fahrradschuppens beschweren; Drei, die darauf hinweisen, dass der Patch nicht mit &man.style.9; übereinstimmt; Siebzehn, die sich beschweren, dass die vorgeschlagene neue Glühbirne der GPL unterliegt; Fünfhundertundsechsundachtzig, die sich in einen Streit über die vergleichbaren Vorteile der GPL, der BSD-Lizenz, der MIT-Lizenz, der NPL und der persönlichen Hygiene nichtgenannter FSF-Gründer verwickeln; Sieben, die unterschiedliche Teile des Threads nach -chat und -advocacy weiterleiten; Einer, der die vorgeschlagene Glühbirne einbaut, obwohl sie dunkler leuchtet, als die alte; Zwei, die sie wieder ausbauen, und in einer wütenden Nachricht argumentieren, dass FreeBSD besser ganz im Dunkeln dasteht, als mit einer dämmerigen Glühbirne; Sechsundvierzig, die sich lärmend wegen des Wiederausbaus der dämmerigen Glühbirne streiten und eine Erklärung von -core verlangen; Elf, die eine kleinere Glühbirne beantragen, damit sie in ihr Tamagotchi passt, falls wir irgendwann beschließen, FreeBSD auf diese Plattform zu portieren; Dreiundsiebzig, die sich über die SNR auf -hackers und -chat beschweren und aus Protest abmelden; Dreizehn, die unsubscribe, How do I unsubscribe? oder Please remove me from the list gefolgt von der üblichen Fußzeile abschicken; Einen, der eine funktionierende Glühbirne einbaut, während alle zu beschäftigt damit sind, mit jedem zu streiten, um es zu bemerken; Einunddreißig, die herausstellen, dass die neue Glühbirne 0,364% heller leuchten würde, wenn sie mit TenDRA kompiliert werden würde (obwohl sie in einen Würfel umgeformt werden müsste) und dass FreeBSD deshalb nach TenDRA, anstatt nach GCC wechseln sollte; Einen, der sich beschwert, dass bei der neuen Glühbirne die Verkleidung fehlt; Neun (einschließlich der PR-Ersteller), die fragen Was ist MFC? Siebenundfünfzig, die sich zwei Wochen, nachdem die Birne gewechselt worden ist, darüber beschweren, dass das Licht aus war. &a.nik; hat hinzugefügt: Ich habe ziemlich hierüber gelacht. Und dann dachte ich: "Halt, sollte in dieser Liste nicht irgendwo 'Einer, der es dokumentiert' sein?" Und dann wurde ich erleuchtet :-) Was passiert mit den Daten, die nach /dev/null geschrieben werden? Sie werden in einer speziellen Datensenke der CPU in Wärme umgewandelt, die dann über den Kühlkörper und den Lüfter abgeführt wird. Dies ist einer der Gründe für die Kühlung von CPUs; die Anwender gewöhnen sich an die schnelleren Prozessoren, gehen nicht mehr so sorgfältig mit Ihren Daten um und so landen immer mehr Daten in /dev/null, was zur Überhitzung der CPU führt. Wenn Sie /dev/null löschen (was die Datensenke ziemlich sicher abschaltet), wird Ihre CPU zwar nicht mehr so heiß, dafür wird Ihr System aber sehr schnell von den überzähligen Daten überladen und merkwürdige Effekte zeigen. Wenn Sie eine sehr schnell Netzwerkverbindung haben, können Sie Ihre CPU kühlen, indem sie Daten aus /dev/random lesen und in die Weite des Netzwerkes schicken; allerdings besteht hier die Gefahr der Überhitzung von Netzwerk und /. Außerdem dürfte Ihr ISP ziemlich wütend werden, da der größte Teil der Daten von seinen Geräten in Hitze umgewandelt werden wird; da ISPs aber über Klimaanlagen verfügen, sollte das kein großes Problem sein, solange Sie es nicht übertreiben. Nachtrag Paul Robinson: Es gibt andere Mittel und Wege. Wie jeder gute Systemadministrator weiss, gehört es zum guten Ton, einigen Daten zum Bildschirm zu senden, damit die Leuchtkäferchen, die das Bild anzeigen, glücklich sind. Die Leuchtkäferchen werden nach der Farbe Ihrer Hüte (Rot, Grün, oder Blau) unterschieden und sie verstecken bzw. zeigen sich (wobei man die Farbe ihrer Hüte erkennen kann) bei jeder Nahrungsaufnahme. Grafikkarten wandeln Daten in Leuchkäfer-Nahrung um und schicken sie dann zu den Leuchtkäfern - teure Karten erzeugen bessere Nahrung und sorgen so für besseres Verhalten der Leuchtkäfer. Diese brauchen allerdings einen konstanten Stimulus - darum gibt es Bildschirmschoner. Darum lautet mein Vorschlag, die zufälligen Daten einfach zum Bildschirm zu schicken, damit sie von den Leuchtkäfern verzehrt werden. Dabei entsteht keine Hitze, die Leuchtkäfer bleiben glücklich und man wird seine überflüssigen Daten sehr schnell los, auch wenn der Bildschirm etwas merkwürdig aussieht. Übrigens: Als Ex-Admin eines großen ISPs, der so seine Probleme mit der Kühlung seines Rechenzentrums hatte, kann ich nur davon abraten, überflüssige Daten einfach in das Netzwerk zu schicken. Die Heinzelmännchen, die die Pakete verteilen und versenden, regen sich darüber ganz furchtbar auf. Weiterführende Themen Wie kann ich mehr über die Interna von FreeBSD erfahren? Zurzeit gibt es nur ein Buch über die Interna von FreeBSD, The Design and Implementation of the FreeBSD Operating System von Marshall Kirk McKusick und George V. Neville-Neil, ISBN 0-201-70245-2, das sich auf FreeBSD 5.X konzentriert. Allgemeines Wissen über &unix; kann allerdings in den meisten Fällen auf FreeBSD angewendet werden. Eine Liste finden Sie im entsprechenden Abschnitt der Bibliographie. Wie kann ich bei der Entwicklung von FreeBSD mitarbeiten? Genauere Informationen finden Sie im Artikel FreeBSD unterstützen. Wir können Hilfe immer gut gebrauchen! Was sind SNAPs und RELEASEs? Derzeit existieren drei aktive/halbaktive Zweige im FreeBSD-CVS-Repository. In früheren Zweigen ändert sich wenig, daher gibt es nur drei aktive Entwicklungszweige: RELENG_5 bzw. 5.X-STABLE RELENG_6 bzw. 6-STABLE HEAD bzw. -CURRENT oder 7.X-CURRENT HEAD ist keine wirkliche Bezeichnung für einen Zweig, wie die anderen beiden. Es ist lediglich eine symbolische Konstante für den aktuellen, nicht verzweigten Entwicklungsstrom, auf den wir uns einfach als -CURRENT beziehen. Derzeit steht -CURRENT für den 7.X-Entwicklungsstrom, der 5-STABLE-Zweig (RELENG_5) wurde im Oktober 2004, der 6-STABLE-Zweig (RELENG_6) im November 2005 von -CURRENT abgespalten. Wie kann ich meine eigene, angepasstes Release erstellen? Eine Anleitung dazu finden Sie im Artikel FreeBSD Release Engineering. Wieso überschreibt make world das installierte System? Das ist beabsichtigt. Wie der Name schon andeutet, erstellt make world alle Systemdateien von Grund auf neu. Sie können also sicher sein, am Ende eine saubere, konsistente Umgebung zu haben (das ist der Grund, warum es so lange dauert). Falls die Umgebungsvariable DESTDIR während der Ausführung von make world oder make install definiert ist, werden die neu erstellten Binaries unter ${DESTDIR} in einem zum installierten identischen Verzeichnisbaum abgelegt. Einige zufällige Kombinationen von Änderungen von Shared Libraries und Neuerstellungen von Programmen können hierbei jedoch ein Scheitern von make world verursachen. Warum ist cvsup.FreeBSD.org kein Round-Robin-Eintrag im DNS, so dass Anfragen auf alle CVsup-Server verteilt werden? Die CVsup-Server gleichen sich stündlich mit dem Hauptserver ab. Allerdings findet der Abgleich nicht zur gleichen Zeit statt, daher können einige Server neuere Quellen bereitstellen als andere Server. Alle Server stellen jedoch Quellen bereit, die maximal eine Stunde alt sind. Wäre cvsup.FreeBSD.org ein Round-Robin-Eintrag im DNS, der Benutzern einen zufälligen Server zuteilt, könnten beim zweiten Lauf von CVsup ältere Quellen als beim ersten Lauf heruntergeladen werden. Warum meldet mein System (bus speed defaulted) beim Start? Die Adaptec 1542 SCSI Hostadapter erlauben dem Benutzer die Buszugriffsgeschwindigkeit per Software zu konfigurieren. Ältere Versionen des 1542-Treibers versuchten, die schnellstmögliche Geschwindigkeit herauszufinden und konfigurierten den Adapter entsprechend. Wir haben festgestellt, dass dies auf einigen Systemen nicht funktioniert, weshalb Sie nun die Kernelkonfigurationsoption TUNE_1542 definieren müssen, um es zu aktivieren. Die Benutzung auf Systemen, auf denen es funktioniert, könnte Ihre Platten schneller machen, aber auf den Systemen, auf denen es nicht funktioniert, könnten Ihre Daten beschädigt werden. Kann ich -CURRENT mit begrenztem Internetzugang folgen? Ja, Sie können das tun, ohne den gesamten Quellbaum herunterzuladen, indem Sie die Einrichtung CTM benutzen. Wie haben Sie die Distribution in 240k-Dateien aufgespalten? Bei neueren BSD-basierten Systemen gibt es eine Option zu &man.split.1;, die das Splitten von Dateien an willkürlichen Bytegrenzen erlaubt. Hier ist ein Beispiel aus /usr/src/Makefile. bin-tarball: (cd ${DISTDIR}; \ tar cf - . \ gzip --no-name -9 -c | \ split -b 240640 - \ ${RELEASEDIR}/tarballs/bindist/bin_tgz.) Ich habe eine Kernelerweiterung geschrieben. An wen sende ich sie? Lesen Sie bitte den Artikel FreeBSD unterstützen. Und Danke, dass Sie darüber nachdenken! Wie werden Plug&Play ISA-Karten erkannt und initialisiert? Von: Frank Durda IV uhclem@nemesis.lonestar.org Kurz gesagt gibt es nur wenige I/O-Ports über die PnP-Karten antworten, wenn der Host fragt, ob jemand da ist. Wenn die PnP-Erkennungsroutine startet, fragt sie, ob irgendwelche PnP-Karten vorhanden sind und alle PnP-Karten antworten mit ihrer Modellnummer auf demselben Port, von dem sie auch gelesen haben. Die Erkennungsroutine erhält also ein geodertes Ja auf diese Frage. Mindestens ein Bit wird bei dieser Antwort gesetzt sein. Die Erkennungsroutine ist dann in der Lage, dafür zu sorgen, dass Karten mit Modellnummern (zugeordnet von Microsoft/Intel) kleiner als X off-line gesetzt werden. Sie prüft dann, ob immer noch Karten da sind, die auf die Frage antworten. Falls die Antwort 0 war, sind keine Karten mit IDs größer X vorhanden. Nun prüft die Erkennungsroutine, ob Karten unterhalb X vorhanden sind. Dann setzt die Erkennungsroutine alle Karten größer als X-(limit/4) off-line und wiederholt die Frage. Wenn diese halbbinäre Suche nach IDs in Folge genügend oft wiederholt worden ist, wird die Erkennungsroutine schließlich alle in einem Rechner befindlichen PnP-Karten identifiziert haben und das mit einer Iterationszahl sehr viel kleiner als 2^64. Die IDs bestehen aus zwei 32-Bit-Feldern (daher 2^64) + acht Bit Prüfsumme. Die ersten 32 Bit sind die Herstellerkennung. Es wurde zwar nicht bestätigt, aber es wird angenommen, dass unterschiedliche Kartentypen desselben Herstellers unterschiedliche 32-Bit Herstellerkennungen besitzen können. 32 Bit nur für eindeutige Hersteller zu benötigen, scheint etwas übertrieben. Die niedrigen 32 Bit sind eine Seriennummer, Ethernetadresse - etwas, das die betreffende Karte einzigartig macht. Die Hersteller dürfen niemals eine zweite Karte mit denselben niedrigen 32 Bit herstellen, es sei denn, die höheren 32 Bit sind unterschiedlich. Sie können also mehrere Karten des selben Typs im Rechner haben und die gesamten 64 Bit bleiben stets eindeutig. Die 32-Bit-Gruppen können niemals nur aus Nullen bestehen. Das erlaubt es, bei der binären Suche zu Beginn nur auf von Null verschiedene Bits zu achten. Wenn das System alle vorhandenen Karten-IDs identifiziert hat, reaktiviert es jede Karte - eine nach der anderen (über dieselben I/O-Ports) und ermittelt, welche Ressourcen von der jeweiligen Karte benötigt werden, welche Wahlmöglichkeiten für Interrupts bestehen usw. Alle Karten werden abgefragt, um diese Informationen zusammenzustellen. Diese Informationen werden dann mit Informationen aus allen ECU-Dateien auf der Festplatte oder mit im MLB-BIOS verdrahteten Informationen verknüpft. Die ECU- und BIOS-PnP-Unterstützung für Hardware auf dem MLB ist für gewöhnlich künstlich und was die Peripheriegeräte tun ist nicht wirklich echtes PnP. Durch die Untersuchung der BIOS-Informationen und der ECU-Informationen können die Erkennungsroutinen jedoch die von PnP-Geräten benutzten Ressourcen so ändern, dass vermieden wird, dass bereits von anderen Geräten benutzte Ressourcen verwendet werden. Dann werden die PnP-Geräte nochmals besucht und ihre I/O, DMA, IRQ und Memory-Map-Adressen werden zugeordnet. Die Geräte werden an diesen Stellen sichtbar werden und dort bis zum nächsten Reboot verbleiben. Allerdings hindert Sie auch nichts daran, sie zu verschieben, wohin Sie wollen. Im obigen Teil wurde sehr viel vereinfacht, aber die grundlegende Idee sollte klar geworden sein. Microsoft hat einige der primären Druckerstatusports für PnP übernommen, da keine Karte diese Adressen für die entgegengesetzten I/O-Zyklen decodiert. Ich habe während der frühen Überprüfungsperiode des PnP-Vorschlags eine echte IBM Druckerkarte gefunden, die Schreibzugriffe auf dem Statusport decodiert hat, aber MS hat nur tough gesagt. Also schreiben sie auf den Druckerstatusport, um Adressen zu setzen, benutzen zusätzlich diese Adresse + 0x800 und einen dritten I/O-Port zum Lesen, der irgendwo zwischen 0x200 und 0x3ff liegen kann. Wie bekomme ich eine Major-Number für einen Gerätetreiber, den ich geschrieben habe? &os.current; stellt seit Februar 2003 Major-Numbers für Geräte zur Laufzeit automatisch bereit. Nach Möglichkeit sollte diese neue Funktion benutzt werden, anstatt eine Major-Number statisch festzulegen. Weitere Hinweise finden Sie in src/sys/conf/majors. Wenn Sie eine statisch festgelegte Major-Number benötigen, hängt das weitere Verfahren davon ab, ob Sie den Treiber frei verfügbar machen wollen. Falls dem so ist, senden Sie uns bitte eine Kopie der Treiber-Sourcen und zusätzlich die entsprechenden Änderungen der Datei files.i386, ein Beispiel für einen Eintrag in der Konfigurationsdatei und den entsprechenden Code für &man.MAKEDEV.8;, der die Gerätedateien für Ihr Gerät erzeugt. Falls Sie nicht beabsichtigen, den Treiber frei verfügbar zu machen, oder es aufgrund von Lizenzbeschränkungen nicht können, dann ist die Major-Number 32 für zeichenorientierte und die Major-Number 8 für blockorientierte Geräte speziell für diesen Zweck reserviert. In jedem Fall würden wir uns freuen, auf der Mailingliste &a.hackers; etwas über Ihren neuen Treiber zu hören. Gibt es alternative Layoutverfahren für Verzeichnisse? Als Antwort auf die Frage nach alternativen Layoutverfahren für Verzeichnisse ist das Schema, das derzeit benutzt wird, unverändert von dem, das ich 1983 geschrieben habe. Ich habe das Vorgehen für das originale Fast-Filesystem geschrieben und es niemals überarbeitet. Es funktioniert gut, wenn es darum geht, zu verhindern, dass Zylindergruppen volllaufen. Wie viele von Ihnen angemerkt haben, funktioniert es schlecht für find. Die meisten Dateisysteme werden von Archiven erstellt, die mit einer Tiefensuche (also ftw) erstellt wurden. Diese Verzeichnisse werden über die Zylindergruppen hinweg entfaltet und erzeugen denkbar ungünstigste Voraussetzungen für zukünftige Tiefensuchen. Falls man die Gesamtzahl der zu erstellenden Verzeichnisse wüsste, wäre die Lösung die, (gesamt / fs_ncg) pro Zylindergruppe zu erstellen, bevor fortgefahren wird. Offensichtlich müsste man eine Heuristik erstellen, um die Zahl zu schätzen. Sogar die Benutzung einer kleinen, fixen Zahl, z.B. 10, würde eine Verbesserung um Größenordnungen ausmachen. Um Wiederherstellungen von normalem Betrieb (wo der derzeitige Algorithmus vermutlich sinnvoller ist) zu unterscheiden, könnten Sie die Clusterung von bis zu 10 benutzen, wenn sie alle innerhalb eines 10-Sekunden-Fensters durchgeführt würden. Jedenfalls ist mein Schluss, dass dies ein fruchtbares Gebiet für Experimente ist. Kirk McKusick, September 1998 Wie kann ich optimalen Nutzen aus einer kernel panic ziehen? [Dieser Abschnitt wurde von &a.des;, der einige Tippfehler korrigiert und die Kommentare in eckigen Klammern hinzugefügt hat, aus einer Mail von &a.wpaul; in der Mailingliste freebsd-current entnommen.] From: Bill Paul <wpaul@skynet.ctr.columbia.edu> Subject: Re: the fs fun never stops To: Ben Rosengart Date: Sun, 20 Sep 1998 15:22:50 -0400 (EDT) Cc: current@FreeBSD.org [<Ben Rosengart> sendete die folgende Panik-Meldung] > Fatal trap 12: page fault while in kernel mode > fault virtual address = 0x40 > fault code = supervisor read, page not present > instruction pointer = 0x8:0xf014a7e5 ^^^^^^^^^^ > stack pointer = 0x10:0xf4ed6f24 > frame pointer = 0x10:0xf4ed6f28 > code segment = base 0x0, limit 0xfffff, type 0x1b > = DPL 0, pres 1, def32 1, gran 1 > processor eflags = interrupt enabled, resume, IOPL = 0 > current process = 80 (mount) > interrupt mask = > trap number = 12 > panic: page fault [Wenn] Sie eine Meldung wie diese sehen, reicht es nicht, sie einfach zu reproduzieren und sie einzusenden. Der Wert des Instruktionszeigers, den ich oben hervorgehoben habe, ist wichtig; leider ist er auch konfigurationsabhängig. Mit anderen Worten variieren die Werte abhängig von dem Kernel-Image, das Sie tatsächlich benutzen. Wenn Sie ein GENERIC Kernelimage von einem der Snapshots benutzen, dann ist es für jemand anderen möglich, die fehlerhafte Instruktion herauszufinden, aber wenn Sie einen angepassten Kernel benutzen, können nur Sie uns sagen, wo der Fehler auftrat. Was Sie tun sollten, ist folgendes: Notieren Sie sich den Wert des Instruktionszeigers. Beachten Sie, dass der Teil 0x8: am Anfang in diesem Fall nicht von Bedeutung ist; der Teil 0xf0xxxxxx ist der, den wir wollen. Tun Sie folgendes, wenn das System rebootet: &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxxx wobei 0xf0xxxxxx der Wert des Instruktionszeigers ist. Es besteht die Möglichkeit, dass Sie keinen exakten Treffer erzielen, weil die Symbole in der Symboltabelle des Kernels Funktionseinstiegspunkte sind und die Adresse des Instruktionszeiger irgendwo innerhalb einer Funktion liegen wird und nicht am Anfang. Falls sie keinen exakten Treffer erzielen, lassen Sie den letzten Teil des Werts des Instruktionszeigers weg und versuchen es nocheinmal, z.B.: &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxx Falls das kein Ergebnis liefert, hacken Sie eine weitere Ziffer ab. Wiederholen Sie die Schritte, bis Sie irgendeine Ausgabe erhalten. Das Ergebnis wird eine Liste möglicher Funktionen sein, die die Panik verursacht haben. Das ist zwar kein absolut genauer Mechanismus, um die Fehlerursache ausfindig zu machen, aber es ist besser als gar nichts. Ich sehe ständig Leute, die Panik-Meldungen wie diese zeigen, aber ich sehe kaum jemanden, der sich die Zeit nimmt, den Instruktionszeiger einer Funktion aus der Symboltabelle des Kernel zuzuordnen. Der beste Weg, den Grund für eine Panik herauszufinden, ist der, einen Crash-Dump festzuhalten und dann &man.gdb.1; zu benutzen, um den Stack im Crash-Dump zurückzuverfolgen. Jedenfalls ist die Methode, die ich normalerweise benutze, folgende: Richten Sie eine Kernelkonfigurationsdatei ein, fügen Sie optional options DDB hinzu, falls Sie glauben, dass Sie den Kerneldebugger benötigen. (Ich benutze ihn hauptsächlich zum Setzen von Haltepunkten, wenn ich eine Endlosschleife irgendeiner Art vermute.) Benutzen Sie config -g KERNELCONFIG, um das Erstellungsverzeichnis einzurichten. cd /sys/compile/KERNELCONFIG; make Warten Sie, bis der Kernel fertig kompiliert ist. make install reboot Der &man.make.1;-Prozess wird zwei Kernel erstellt haben: kernel und kernel.debug. kernel wurde als /kernel installiert, während kernel.debug als Quelle für Debuggersymbole für &man.gdb.1; benutzt werden kann. Um sicherzustellen, dass ein Crash-Dump erhalten bleibt, müssen Sie /etc/rc.config editieren und dumpdev so setzen, dass es auf Ihre Swap-Partition zeigt. Das bewirkt, dass die &man.rc.8;-Skripte den Befehl &man.dumpon.8; benutzen, um Crash-Dumps zu ermöglichen. Sie können &man.dumpon.8; auch manuell ausführen. Nach einer Panik kann der Crash-Dump mit &man.savecore.8; wiederhergestellt werden; wenn dumpdev in /etc/rc.conf gesetzt ist, werden die &man.rc.8;-Skripte &man.savecore.8; automatisch ausführen und den Crash-Dump unter /var/crash ablegen. Crash-Dumps von FreeBSD sind für gewöhnlich genauso groß wie der physikalische Hauptspeicher Ihres Rechners. Das heißt, wenn Sie 64MB RAM haben, werden sie einen 64MB Crash-Dump erhalten. Deshalb müssen Sie dafür sorgen, dass genügend Speicherplatz in /var/crash zur Verfügung steht, um den Dump aufnehmen zu können. Alternativ führen Sie &man.savecore.8; manuell aus und lassen es den Crash-Dump in einem anderen Verzeichnis wiederherstellen, in dem Sie mehr Platz haben. Es ist möglich, die Größe des Crash-Dumps zu begrenzen, indem options MAXMEM=(foo) benutzt wird, um den Speicher, den der Kernel benutzt, auf einen etwas vernünftigeren Wert zu setzen. Wenn Sie z.B. 128MB RAM haben, können Sie die Speicherbenutzung des Kernels auf 16MB begrenzen, so dass die Größe Ihres Crash-Dumps 16MB anstatt 128MB beträgen wird. Wenn Sie den Crash-Dump wiederhergestellt haben, können Sie den Stack mit &man.gdb.1; so zurückverfolgen: &prompt.user; gdb -k /sys/compile/KERNELCONFIG/kernel.debug /var/crash/vmcore.0 (gdb) where Beachten Sie, dass es mehrere Seiten mit wertvollen Informationen geben könnte; idealerweise sollten Sie &man.script.1; benutzen, um sie alle festzuhalten. Wenn Sie das vollständige Kernelimage mit allen Debugginginformationen benutzen, müssten Sie exakt die Zeile des Kernel-Sourcecodes finden, wo die Panik aufgetreten ist. Für gewöhnlich müssen Sie den Stack von unten an zurückverfolgen, um die genaue Ereignisabfolge, die zum Crash führte, zurückzuverfolgen. Sie können &man.gdb.1; auch zum Ausdrucken der Inhalte verschiedener Variablen oder Strukturen benutzen, um den Systemstatus zum Zeitpunkt des Absturzes zu untersuchen. Wenn Sie nun wirklich verrückt sind und einen zweiten Computer haben, können Sie &man.gdb.1; auch für entferntes Debugging konfigurieren, so dass Sie &man.gdb.1; auf einem System benutzen können, um den Kernel auf einem anderen System zu debuggen, einschließlich dem Setzen von Haltepunkten und dem Bewegen in Einzelschritten durch den Kernelcode, genauso, wie Sie es mit einem normalen Benutzerprogramm tun können. Ich habe noch nicht damit gespielt weil ich nicht oft Gelegenheit habe, zwei Rechner nebeneinander für Debuggingzwecke einzurichten. [Bill hat hinzugefügt: "Ich vergaß, etwas zu erwähnen: wenn Sie DDB aktiviert haben und der Kernel im Debugger landet, können Sie eine Panik (und einen Crash-Dump) erzwingen, indem Sie einfach 'panic' am ddb-Prompt eingeben. Er könnte während der Panikphase wieder im Debugger stoppen. Falls er das tut, geben Sie 'continue' ein, dann wird er den Crash-Dump beenden." -ed] Wieso funktioniert dlsym() nicht mehr für ELF-Executables? Die ELF-Werkzeuge machen die in einem Executable definierten Symbole dem dynamischen Linker nicht standardmäßig sichtbar. Konsequenterweise werden dlsym()-Suchen nach Handlern aus Aufrufen von dlopen(NULL, flags) diese Symbole nicht finden können. Wenn Sie mit dlsym() nach im Hauptexecutable eines Prozesses vorhandenen Symbolen suchen wollen, müssen Sie das Executable mit der Option von &man.ld.1; linken. Wie kann ich den Adressraum des Kernels vergrössern oder verkleinern? Standardmäßig beträgt der Adressraum des Kernels 256MB (FreeBSD 3.X) bzw. 1 GB (FreeBSD 4.X). Wenn Sie einen netzwerkintensiven Server (z.B. einen großen FTP- oder HTTP-Server) betreiben, kann es sein, dass Sie der Meinung sind, dass 256MB nicht ausreichen. Wie also erhöhen Sie den Adressraum? Hier gibt es zwei Aspekte. Erstens müssen Sie dem Kernel sagen, dass er einen größeren Anteil des Adressraums für sich selbst reservieren soll. Da der Kernel am oberen Ende des Adressraums geladen wird, müssen Sie zweitens die Ladeadresse verringern, damit er mit dem Kopf nicht gegen die Obergrenze stößt. Das erste Ziel erreicht man, indem man den Wert von NKPDE in src/sys/i386/include/pmap.h erhöht. Für einen Adressraum von 1 GB sieht das so aus: #ifndef NKPDE #ifdef SMP #define NKPDE 254 /* addressable number of page tables/pde's */ #else #define NKPDE 255 /* addressable number of page tables/pde's */ #endif /* SMP */ #endif Dividieren Sie die gewünschte Adressraumgröße (in Megabyte) durch vier und subtrahieren Sie dann eins für UP und zwei für SMP, um den korrekten Wert für NKPDE zu finden. Um das zweite Ziel zu erreichen müssen Sie die korrekte Ladeadresse berechnen: subtrahieren Sie einfach die Größe des Adressraums (in Byte) von 0x100100000; für einen Adressraum von 1 GB lautet das Ergebnis 0xc0100000. Setzen Sie LOAD_ADDRESS in src/sys/i386/conf/Makefile.i386 auf diesen Wert; setzen Sie dann den Location-Counter am Anfang der Abschnittsliste in src/sys/i386/conf/kernel.script auf denselben Wert: OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(btext) SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/obj/elf/home/src/tmp/usr/i386-unknown-freebsdelf/lib); SECTIONS { /* Read-only sections, merged into text segment: */ . = 0xc0100000 + SIZEOF_HEADERS; .interp : { *(.interp) } Konfigurieren und erstellen Sie Ihren Kernel dann neu. Sie werden vermutlich Probleme mit &man.ps.1;, &man.top.1; und ähnlichen Programmen haben. Ein make world sollte diese beheben; alternativ können Sie die gepatchte pmap.h in das Verzeichnis /usr/include/vm kopieren und danach libkvm, &man.ps.1; und &man.top.1; neu erzeugen. Hinweis: die Größe des Kernel-Adressraums muss ein Vielfaches von vier Megabyte betragen. [&a.dg; fügt hinzu: Ich glaube, der Kerneladressraum muss eine Zweierpotenz sein, aber ich bin mir dessen nicht sicher. Der alte (ältere) Bootcode pflegte die oberen Adressbits zu mißbrauchen und ich glaube, er erwartete mindestens 256MB Granularität.] Danksagung Dieses kleine unschuldige Dokument mit Häufig gestellten Fragen wurde in den letzten 10 Jahren von Hunderten, wenn nicht Tausenden, geschrieben, neu geschrieben, überarbeitet, gefaltet, verdreht, durcheinander gebracht, wieder aufgebaut, verstümmelt, seziert, durchgekaut, überdacht, und wiederbelebt. Und das nicht nur einmal. Wir möchten allen dafür Verantwortlichen danken und wir fordern auch Sie auf, dieser Gruppe beizutreten, um diese FAQ noch besser zu machen. Folgende Personen haben durch die Beantwortung von Fragen, sowie durch Hinweise und Kommentare an der Entstehung der deutschen Übersetzung mitgewirkt: Ross Alexander &a.jhb; &a.nik; Glen Foster Oliver Fromme Frank Gruender Chris Hill James Howard &a.jkh; &a.alex; &a.jmas; Mike Meyer Dan O'Connor Eric Ogren &a.de.pierau; Oliver Schneider Christoph Sold Und an alle anderen, an die wir nicht gedacht haben. Entschuldigung und herzlichen Dank! &bibliography;
diff --git a/de_DE.ISO8859-1/books/fdp-primer/sgml-primer/chapter.sgml b/de_DE.ISO8859-1/books/fdp-primer/sgml-primer/chapter.sgml index 0e451ab171..c79a3d0fce 100644 --- a/de_DE.ISO8859-1/books/fdp-primer/sgml-primer/chapter.sgml +++ b/de_DE.ISO8859-1/books/fdp-primer/sgml-primer/chapter.sgml @@ -1,1976 +1,1976 @@ Die SGML-Fibel Die Mehrzahl der Dokumente des FDPs sind in SGML geschrieben. Ziel dieses Kapitels ist es, genau zu erklären, was das bedeutet und wie man die SGML-Quellen liest und versteht. Ebenso werden die in den Quellen genutzten Kniffe erklärt, auf die man beim Lesen der Dokumente stoßen wird. Teile dieses Kapitels basieren auf Mark Galassis Get Going With DocBook. Überblick In den guten alten Zeiten war der Umgang mit elektronischem Text einfach. Man musste lediglich wissen, welcher Zeichensatz (ASCII, EBCDIC oder ein anderer) vorlag. Text war einfach Text und sah so aus, wie man ihn sah. Keine Extras, keine Formatierungen und kein sonstiger Schnickschnack. Für viele Zwecke war dies allerdings nicht ausreichend. Von einem machinenlesbaren Text wird erwartet, dass er auch von Maschinen gelesen und intelligent weiterverarbeitet werden kann. Einzelne Stellen sollen hervorgehoben werden, andere sollen in ein Glossar aufgenommen werden oder auf andere Textstellen verweisen. Dateinamen wiederum sollen in einer schreibmaschinenähnlichen Schrift auf dem Bildschirm dargestellt werden, der Ausdruck soll jedoch in Schrägschrift oder in einer beliebigen anderen Darstellungsform erfolgen. Anfänglich gab es die Hoffnung, dass die Künstliche Intelligenz (KI) helfen würde, dieses Ziel zu erreichen. Computer sollte den Text lesen und dazu in der Lage sein, selbstständig wichtige Formulierungen, Dateinamen, Benutzereingaben oder Beispiele zu erkennen. Leider verlief die Entwicklung in diesem Bereich nicht wie gewünscht und Computer benötigen nach wie vor etwas Unterstützung, bevor sie Texte vernünftig verarbeiten können. Genauer gesagt, man muss ihnen sagen, was was ist. Sehen wir Menschen uns folgende Zeilen an:
Löschen Sie /tmp/foo mittels &man.rm.1;. &prompt.user; rm /tmp/foo
fällt es uns leicht zu erkennen, was ein Dateiname, ein einzugebender Befehl oder ein Verweis auf eine Hilfeseite ist. Das kann ein Computer, der einen Text verarbeitet, nicht. Aus diesem Grund ist es notwendig, Texte mit weiteren Informationen auszuzeichnen.
Der Begriff Auszeichnung Im angelsächischschen Sprachraum wird von markup gesprochen. bedeutet, dass sich der Wert eines Textes erhöht, aber auch seine Kosten. Durch Auszeichnungen wird einem Dokument zusätzlicher Text hinzugefügt, der aber von dem eigentlichen Dokumenteninhalt auf eine bestimmte Art und Weise unterschieden werden kann, so dass Programme die Auszeichnung erkennen können und mittels dieser Informationen während der Verarbeitung in der Lage sind, Entscheidungen zu treffen. Texteditoren können diese Auszeichnungselemente vor dem Benutzer verbergen, um zu vermeiden, dass er durch sie abgelenkt wird. Die durch die Auszeichnungselemente im Textdokument zusätzlich abgelegten Informationen erhöhen den Wert des Dokuments. Allerdings muss diese Arbeit in den meisten Fällen von einem Menschen getan werden – wären Maschinen dazu fähig, wären zusätzliche Auszeichnungselemente unnötig. Der damit verbundene Aufwand erhöht die Kosten, die durch die Erstellung des Dokuments entstehen. Das etwas weiter oben gegebene Beispiel sieht im Quelltext so aus: Löschen Sie /tmp/foo mittels &man.rm.1;. &prompt.user; rm /tmp/foo]]> Die Auszeichnungselemente sind deutlich vom eigentlichen Inhalt zu unterscheiden. Die Einführung von Auszeichnungselementen setzt voraus, dass festgelegt wird, welche Bedeutung einzelne Elemente haben und wie diese interpretiert werden. Sie brauchen daher eine Auszeichnungssprache, der Sie folgen, wenn Sie eigene Dokumente verfassen. Natürlich kann es keine universelle Auszeichnungssprache geben und eine einzige mag nicht ausreichend für alle möglichen Anwendungsfälle sein. Eine Sprache für technische Dokumente wird sich wahrscheinlich stark von einer für Kochrezepte unterscheiden. Die universelle Lösung ist eine Basissprache, mit deren Hilfe weitere Sprachen entwickelt werden können – eine Meta-Auszeichungssprache also. Genau diese Anforderung wird von der Standard Generalized Markup Language (SGML) erfüllt. Mit ihrer Hilfe wurden viele andere Auszeichungssprachen wie beispielsweise HTML und DocBook, welche beide von FDP genutzt werden, entwickelt. Die eigentliche Sprachdefinition erfolgt in einer Dokumenten-Typ-Definition (DTD). Innerhalb dieser DTD werden die Namen der einzelnen Elemente, deren mögliche Reihenfolge und Verschachtelung sowie weitere Informationen festgelegt. Eine DTD ist eine vollständige Definition aller möglichen Sprachelemente, ihrer ReihenfolgeBei natürlichen Sprachen spricht man vom Satzbau – demjenigen Konstrukt, das unter anderem die Position des Subjekts, Objekts und Prädikats in einem Satz festlegt., optionaler Elemente und so weiter und so weiter. Dank dieser recht formalen Festlegung ist es möglich, SGML-Parser zu entwickeln, die sowohl ein Dokument als auch seine DTD einlesen und anhand dieser DTD prüfen können, ob das Dokument allen Anforderungen der DTD entspricht. Dieser Vorgang wird allgemein als Validierung des Dokuments bezeichnet. Das Validieren eines SGML-Dokuments gegen eine DTD überprüft lediglich die korrekte Syntax des Dokuments, dass heißt, ob nur gültige Auszeichnungselemente verwendet wurden und ihre Reihenfolge stimmt. Dabei wird nicht geprüft, ob die Elemente der DTD sinngemäß verwandt wurden. Sollten beispielsweise alle Dateinamen als Funktionsnamen ausgezeichnet worden sein, so würde der Parser keinen Fehler signalisieren. Formaler ausgedrückt: Der Parser prüft die Syntax, aber nicht die Semantik. Es ist anzunehmen, dass, wenn man selber vor hat Dokumentation für das FDP zu schreiben, der größte Teil davon mit Hilfe von HTML oder DocBook geschrieben werden wird. Aus diesem Grunde wird an dieser Stelle nicht erklärt, wie eine DTD entwickelt wird.
Von Elementen, Tags und Attributen Alle in SGML geschriebenen DTDs haben bestimmte gemeinsame Eigenschaften. Das ist nicht verwunderlich, da sich die hinter SGML stehende Idee unweigerlich bemerkbar macht. Zwei der markantesten Merkmale dieser Idee sind die Begriffe Inhalt und Element. Von einem Dokument, unabhängig, ob es sich um eine einzelne Webseite oder ein langes Buch handelt, wird angenommen, dass es einen wie auch immer gearteten Inhalt hat. Dieser lässt sich selbst wiederum in Teilelemente aufspalten, die ebenso zerlegbar sind. Durch die Aufnahme von Auszeichnungselementen in einen Text, werden diese einzelnen Elemente eindeutig benannt und voneinander abgegrenzt. Nimmt man zum Beispiel ein typisches Buch, so kann man es auf der obersten Ebene als ein Ganzes, als ein Element betrachten. Dieses Buch-Element enthält nun Kapitel, die wiederum selbst als Elemente bezeichnet werden können. Jedes einzelne Kapitel enthält weitere Elemente. So gibt es beispielsweise Absätze, Zitate und Fußnoten. Jeder Absatz kann wiederum selbst Elemente enthalten, die helfen, den Absatzinhalt als direkte Rede oder als Namen eines der Protagonisten einer Geschichte zu identifizieren. Wenn man möchte, kann man sich das als UnterteilungIm angelsächsichen Sprachraum wird hier von chunking gesprochen. des Inhalts vorstellen. Auf der obersten Ebene gibt es ein Element: das Buch selbst. Schaut man ein wenig tiefer, findet man weitere Teilelemente: die einzelnen Kapitel. Diese sind wiederum unterteilt in Absätze, Fußnoten, Namen und so weiter und so weiter. Anzumerken ist an dieser Stelle, dass das eben gesagte ohne weiteres auf jeden Inhaltstyp angewandt werden kann, auch ohne dass von SGML die Rede ist. Man könnte beispielsweise einfach verschiedene Stifte nehmen und einen Ausdruck dieser Fibel vor sich hinlegen und dann mit verschiedenen Farben die einzelnen Abschnitte des Buchinhalts markieren. Leider gibt es keinen elektronischen Stift, um das zu tun. Deshalb muss ein anderer Weg gewählt werden, um zu bestimmen, zu welchem Element die einzelnen Inhalte gehören. In SGML-basierten Auszeichnungssprachen wie HTML und DocBook werden dafür so genannte Tags eingesetzt. Mit einem solchen Tag wird eindeutig festgelegt, wo ein bestimmtes Element beginnt und wo es endet. Allerdings gehört der Tag selber nicht zum Element. Er legt lediglich die Grenzen des Elements fest. Da jede DTD mit dem Ziel entwickelt wurde, einen speziellen Inhaltstyp auszuzeichnen, wird jede DTD verschiedene Elemente kennen, die daher natürlich auch unterschiedlich benannt sein werden. Der Starttag für ein imaginäres Element mit dem Namen elementname ist <elementname>. Sein Gegenstück, der schließende Endtag, ist </elementname>. Verwendung eines Elements (Start- und Endtag) HTML kennt das Element p, um festzulegen, dass ein bestimmter abgegrenzter Bereich einen Absatz darstellt. Dieses Element hat sowohl einen Start- als auch einen Endtag. Das ist ein Absatz. Er beginnt mit Starttag für das Element 'p' und endet mit dem Endtag für das Element 'p'.

Das ist ein etwas kürzerer Absatz.

]]>
Elemente müssen nicht notwendigerweise einen Endtag haben. Ebenso ist es nicht notwendig, dass Elemente einen Inhalt haben. Beispielsweise kann in HTML-Dokumenten mittels eines speziellen Elements festgelegt werden, dass eine horizontale Linie an einer bestimmten Stelle erscheinen soll. Da dieses Element offensichtlich keinen Inhalt hat, wird auch kein Endtag benötigt. Verwendung eines Elements (nur Starttag) In HTML kann man mit dem Element hr festlegen, dass an einer bestimmten Stelle eine horizontale Linie angezeigt werden soll. Da dieses Element keinen Inhalt umschließt, hat es nur einen Starttag. Das ist ein Abschnitt.


Das ist ein weiterer Absatz. Eine horizontale Linie trennt ihn vom vorherigen Absatz.

]]>
Elemente können andere Elemente enthalten. Im anfangs erwähnten Buch enthielt das Buch-Element alle Kapitel-Elemente, die wiederum alle Absatz-Elemente enthielten und so fort. Verschachtelte Elemente: <sgmltag>em</sgmltag> Das ist ein einfacher Abschnitt, in dem einige Worte hervorgehoben wurden.]]> Welche Elemente andere Elemente enthalten können und welche das sind, wird innerhalb der DTD eines Dokuments festgelegt. Viele Leute sind oft verwirrt, wenn es um die richtige Benutzung der Begriffe Tag und Element geht. Im Ergebnis werden sie oft so genutzt, als wären sie austauschbar. Allerdings sind sie das nicht. Ein Element ist ein konzeptioneller Teil eines Dokuments und hat einen festgelegten Anfang und ein festgelegtes Ende. Ein Tag hingegen markiert die Stelle, an der ein Element beginnt und endet. Wenn in diesem Dokument von dem Tag <p> gesprochen wird, ist damit der Text gemeint, der aus den drei Zeichen <, p und > besteht. Wird hingegen von dem Element <p> gesprochen, ist damit das gesamte Element gemeint. Diese Unterscheidung ist sicherlich subtil. Trotzdem sollte man sie sich vergegenwärtigen. Elemente können selber Attribute haben, die aus einem Namen und einem Wert bestehen. Die Attribute haben die Aufgabe, dem Element zusätzliche Informationen hinzuzufügen. Denkbar sind hier Festlegungen über die Darstellung, Bezeichner, über die das Element eindeutig identifiziert werden kann, oder beliebige andere Informationen. Elementattribute werden in den Starttag eingefügt und haben die Form Attributename="Wert". Bei einigen HTML-Versionen kennt das Element p das Attribut align, mit dessen Hilfe die Textausrichtung eines Absatzes bestimmt werden kann. align akzeptiert einen von vier vorgegebenen Werten: left, center, right und justify. Ist align nicht angegeben, wird vom Standardwert left ausgegangen. Elemente mit Attributen nutzen Die Verwendung des align-Attributs für diesen Absatz ist überflüssig, da left der Standardwert ist.

Dieser Absatz wird hoffentlich mittig dargestellt.

]]>
Einige Attribute akzeptieren nur bestimmte Werte, wie beispielsweise left oder justify. Andere akzeptieren jeden beliebigen Wert. Enthält Attributwert doppelte Anführungszeichen ("), wird der Wert in einfachen Anführungszeichen eingeschlossen. Attribute mit einfachen Anführungszeichen Ich stehe rechts!

]]>
Manchmal können die Anführungszeichen um den Attributwert weggelassen werden. Allerdings sind die Regeln, die festlegen wann dies zulässig ist, sehr spitzfindig. Am besten schließen Sie Attributwerte immer in Anführungszeichen ein. Die Informationen über Attribute, Elemente und Tags sind in SGML-Katalogen abgelegt und werden von den verschiedenen Werkzeugen des Dokumentationsprojektes genutzt, um die geschriebenen Dokumente zu validieren. Die Programme die durch textproc/docproj installiert werden, bringen ihre eigenen Katalogvarianten mit, zudem pflegt das FDP seine eigenen Kataloge. Beide Katalogarten müssen von allen Programmen gefunden werden können. Was dafür getan werden muss;… Damit die Beispiele dieser Fibel ausgeführt werden können, ist es notwendig, dass einige Programme auf dem Rechner installiert sind und das eine Umgebungsvariable korrekt gesetzt wird. Der erste Schritt ist die Installation des Ports textproc/docproj über das FreeBSD-Portsystem. textproc/docproj ist ein Metaport, der alle vom FDP benötigten Programme und Daten aus dem Netz laden und installieren sollte. Anschließend muss in den Shellkonfigurationsdateien die Variable SGML_CATALOG_FILES Sofern man nicht an der deutschen Dokumentation arbeitet, müssen die Verzeichnisangaben entsprechend angepasst werden. gesetzt werden. <filename>.profile</filename>, für &man.sh.1; und &man.bash.1; Benutzer SGML_ROOT=/usr/local/share/sgml SGML_CATALOG_FILES=${SGML_ROOT}/jade/catalog SGML_CATALOG_FILES=${SGML_ROOT}/docbook/4.1/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=${SGML_ROOT}/html/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=${SGML_ROOT}/iso8879/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=/usr/doc/share/sgml/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=/usr/doc/en_US.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=/usr/doc/de_DE.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES export SGML_CATALOG_FILES <filename>.cshrc</filename>, für &man.csh.1;- und &man.tcsh.1;-Benutzer setenv SGML_ROOT /usr/local/share/sgml setenv SGML_CATALOG_FILES ${SGML_ROOT}/jade/catalog setenv SGML_CATALOG_FILES ${SGML_ROOT}/docbook/4.1/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES ${SGML_ROOT}/html/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES ${SGML_ROOT}/iso8879/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES /usr/doc/share/sgml/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES /usr/doc/en_US.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES /usr/doc/de_DE.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES Damit die Änderungen wirksam werden, meldet man sich ab und anschließend wieder an – oder man führt die obigen Anweisungen direkt in der Shell aus und setzt so die benötigten Umgebungsvariablen. Nun sollte man eine Datei beispiel.sgml anlegen, die den folgenden Text enthält: Eine Beispieldatei in HTML

Das ist ein Absatz mit etwas Text.

Das ist ein Absatz mit anderem Text.

Dieser Absatz wird rechtsbündig ausgerichtet.

]]>
Nachdem die Datei abgespeichert wurde, kann sie mit Hilfe eines SGML-Parsers validiert werden. Bestandteil von textproc/docproj ist nsgmls - ein validierender Parser. nsgmls liest ein Dokument entsprechend einer SGML-DTD ein und gibt anschließend ein Element-Structure-Information-Set (ESIS) aus. Allerdings ist das an dieser Stelle nicht weiter wichtig. Wird nsgmls mit der Option aufgerufen, werden nur Fehlermeldungen ausgegeben. Dadurch kann leicht geprüft werden, ob ein Dokument gültig ist oder nicht. So prüft man mit nsgmls, ob die neuangelegte Beispieldatei gültig ist: &prompt.user; nsgmls -s beispiel.sgml Sofern das Beispiel korrekt abgetippt wurde, wird sich nsgmls ohne jegliche Ausgabe beenden. Das bedeutet, dass das Dokument erfolgreich validiert werden konnte und somit gültig ist. Jetzt sollten die Tags title und /title aus dem Dokument gelöscht und das Dokument erneut validiert werden: &prompt.user; nsgmls -s beispiel.sgml nsgmls:beispiel.sgml:5:4:E: character data is not allowed here nsgmls:beispiel.sgml:6:8:E: end tag for "HEAD" which is not finished Die Fehlermeldungen, die von nsgmls ausgegeben werden, sind in durch Doppelpunkte getrennte Spalten unterteilt. Spalte Bedeutung 1 Der Name des Programms, das den Fehler meldet. Hier wird immer nsgmls stehen. 2 Der Name der fehlerhaften Datei. 3 Die Zeilennummer des Fehlers. 4 Die Spaltenummer des Fehlers. 5 Ein einbuchstabiger Code, der über die Art des Fehlers informiert. I steht für eine informelle Meldung, W für eine Warnung und E für Fehler Nicht immer besteht eine Meldung aus fünf Spalten. Die Ausgabe von nsgmls -sv ist beispielsweise nsgmls:I: SP version "1.3" (natürlich abhängig von der Version). Wie man sehen kann, handelt es sich hier um eine informelle Meldung. und X für einen Querverweis. Bei den oben stehenden Ausgaben handelt es sich also um Fehlermeldungen. 6 Die Fehlermeldung. Durch das Weglassen des Tags title sind zwei unterschiedliche Fehler entstanden. Der erste Fehler besagt, dass Inhalt (in diesem Falle Zeichen anstatt eines Starttags) an einer Stelle gefunden wurde, an der der Parser etwas anderes erwartet hat. Genauer gesagt wurde der Starttag eines Elements erwartet, das innerhalb von head auftreten kann. Der zweite Fehler wurde dadurch verursacht, dass das Element head ein Element title enthalten muss und nsgmls nicht berücksichtigt, dass dieser Fehler auf dem vorhergehenden beruht. Es wird lediglich festgestellt, dass der Endtag von head auftritt, obwohl nicht alle notwendigen Elemente vorhanden sind. Zum Schluß sollte der Tag title wieder in die Beispieldatei eingefügt werden.
Die DOCTYPE-Deklaration Am Anfang jedes Dokuments muss der Name der dem Dokument zugrundeliegenden DTD angegeben werden. Mit Hilfe dieser Information können SGML-Parser die verwendete DTD feststellen und prüfen, ob das Dokument zu ihr konform ist. Üblicherweise steht diese Information in einer Zeile, die als DOCTYPE-Deklaration bezeichnet wird. Eine Deklaration für ein HTML-Dokument, das nach den Vorgaben der DTD für HTML 4.0 geschrieben wurde, sieht so aus: ]]> und besteht aus verschiedenen Teilen. <! Die Zeichenkette <! dient hier als Indikator, dass es sich bei diesem Ausdruck um eine SGML-Deklaration handelt und diese Zeile den Dokumententyp festlegt. DOCTYPE Zeigt an, dass dies die SGML-Deklaration für den Dokumententyp ist. html Nennt das erste Element, das im Dokument auftaucht. PUBLIC "-//W3C//DTD HTML 4.0//EN" Nennt den Formalen Öffentlichen Bezeichner auf Englisch Formal Public Identifier (FPI) der DTD des Dokuments. Diese Information wird von SGML-Parsern ausgewertet, um die von dem Dokument referenzierte DTD zu bestimmen. Das Schlüsselwort PUBLIC gehört nicht zum öffentlichen Bezeichner, sondern legt fest, wie ein SGML-Parser die DTD finden kann. Alternative Wege eine DTD zu referenzieren werden später gezeigt. > Schließt den mit <! begonnenen Ausdruck ab. Formale Öffentliche Bezeichner Dieser Abschnitt braucht nicht unbedingt zu gelesen zu werden. Dennoch ist es empfehlenswert, da er nützliche Hintergrundinformationen enthält, die hilfreich sein können, falls der SGML-Prozessor die genutzte DTD nicht finden kann. Jeder öffentliche Bezeichner muss eine bestimmte Syntax haben, die wie folgt lautet: "Besitzer//Schlüsselwort Beschreibung//Sprache" Besitzer Nennt den Besitzer des öffentlichen Bezeichners. Falls diese Zeichenkette mit ISO beginnt, gehört der Bezeichner dem ISO-Kommitee. Der Bezeichner "ISO 8879:1986//ENTITIES Greek Symbols//EN" nennt ISO 8879:1986 als den Besitzer des Satzes von Entitäten für griechische Zeichen. ISO 8879:1986 ist die ISO-Bezeichnung für den SGML-Standard. Beginnt die Zeichenkette nicht mit ISO, sieht sie entweder so -//Besitzer oder so +//Besitzer aus. Beide Varianten unterscheiden sich also nur durch das anfängliche + bzw. -. Sofern am Anfang ein - steht, ist der Bezeichner nicht öffentlich registriert, steht hingegen ein + am Anfang, ist er registriert. Im ISO-Standard ISO 9070:1991 wurde festgelegt, wie registrierte Namen erzeugt werden können. Unter anderem können sie von den Bezeichnungen von ISO-Publikationen, von ISBN-Nummern oder einer Organisationsbezeichnungen entsprechend ISO 6523 abgeleitet werden. Anträge für neue offiziell registrierte Bezeichner werden vom ISO-Kommitee an das American National Standards Institute (ANSI) weitergeleitet. Da das FreeBSD-Projekt seine Bezeichner nicht hat registrieren lassen, ist der Besitzer -//FreeBSD. Unter anderem kann man daran auch sehen, dass das W3C sich nicht hat registrieren lassen. Schlüsselwort Es gibt verschiedene Schlüsselwörter mit denen man die Art der gegebenen Informationen beschreiben kann. Einige der üblichsten sind DTD, ELEMENT, ENTITIES und TEXT. DTD wird nur für Dateien mit DTDs verwandt, ELEMENT findet für Dateien mit Fragmenten von DTDs Verwendung, die nur Deklarationen für Entitäten und Elemente enthalten. TEXT wird für SGML-Inhalte (Texte und Tags) verwendet. Beschreibung Eine frei wählbare Beschreibung des Inhalts der referenzierten Datei. Möglich sind hier Versionsnummern oder ein kurzer und sinnvoller Text, der innerhalb der SGML-Welt eindeutig ist. Sprache Ein ISO-Code aus zwei Buchstaben, der die für die Datei verwendete Sprache nennt. EN steht hier für Englisch, DE für Deutsch. Die <filename>catalog</filename>-Dateien Wenn man die oben beschriebene Syntax für Bezeichner verwendet und ein Dokument durch einen SGML-Prozessor schickt, muss dieser die Möglichkeit haben, den Bezeichner auf eine real existierende Datei abzubilden, die die benötigte DTD enthält. Einer der möglichen Wege hierfür sind Katalogdateien. Eine solche Datei, die üblicherweise catalog heißt, besteht aus einzelnen Zeilen, die Bezeichner auf Dateinamen abbilden. Enthält ein Katalog beispielsweise die Zeile PUBLIC "-//W3C//DTD HTML 4.0//EN" "4.0/strict.dtd" kann ein SGML-Prozessor darüber feststellen, dass die benötigte DTD in der Datei strict.dtd im Unterverzeichnis 4.0 des Verzeichnisses des Katalogs zu finden ist. Ein gutes Beispiel für einen Katalog ist /usr/local/share/sgml/html/catalog. Diese Datei enthält den Katalog für alle HTML DTDs, die im Zuge der Installation von textproc/docproj installiert wurden. Die Variable <envar>SGML_CATALOG_FILES</envar> Natürlich muss einem SGML-Prozessor noch mitgeteilt werden können, wo er seine Kataloge finden kann. Viele Programme bieten hierfür Kommandozeilenoptionen an, über die man einen oder mehrere Kataloge angeben kann. Zusätzlich besteht noch die Möglichkeit mit der Umgebungsvariablen SGML_CATALOG_FILES auf SGML-Kataloge zu verweisen. Die Einträge von SGML_CATALOG_FILES müssen aus den vollständigen Pfadnamen der Kataloge, jeweils durch Komma getrennt, bestehen. Üblicherweise werden die folgenden Kataloge über SGML_CATALOG_FILES für die Arbeit an den Dokumenten des FDPs eingebunden: /usr/local/share/sgml/docbook/4.1/catalog /usr/local/share/sgml/html/catalog /usr/local/share/sgml/iso8879/catalog /usr/local/share/sgml/jade/catalog Allerdings sollte das schon geschehen sein. Alternativen zu Formalen Öffentlichen Bezeichnern Anstatt mit einem Bezeichner die zum Dokument gehörende DTD zu referenzieren, kann auch explizit auf die Datei der DTD verwiesen werden. Die Syntax des DOCTYPE-Deklaration ist in diesem Falle anders: ]]> Das Schlüsselwort SYSTEM legt fest, dass ein SGML-Prozessor die DTD auf systemspezifische Art und Weise bestimmen soll. Meistens, aber nicht immer, wird so auf eine Datei im Dateisystem verwiesen. Allerdings sollte man öffentliche Bezeichner aus Gründen der Portabilität bevorzugen, da man so nicht eine Kopie der DTD mit dem Dokument selber verteilen muss, beziehungsweise da man, wenn man mit SYSTEM arbeitet, nicht davon ausgehen kann, dass die benötigte DTD auf anderen Systemen genau unter dem gleichen Pfad verfügbar ist. Die Rückkehr zu SGML An einer früheren Stelle wurde erwähnt, dass man SGML nur benötigt, falls man selbst eine DTD entwickeln möchte. Genaugenommen ist das nicht 100%ig richtig. Einige Teile der SGML-Syntax können auch in normalen Dokumenten verwendet werden, falls dies gewünscht oder notwendig ist. In diesem Falle muss dafür Sorge getragen werden, dass ein SGML-Prozessor feststellen kann, dass ein bestimmter Abschnitt des Inhalts SGML ist, das er verarbeiteten muss. Solche SGML-Abschnitte werden mittels <! ... > in Dokumenten besonders gekennzeichnet. Alles, was sich zwischen diesen Begrenzungen befindet, ist SGML, wie es auch in DTDs gefunden werden kann. Demnach ist die DOCTYPE-Deklaration ein gutes Beispiel für SGML, das in Dokumenten verwendet werden muss… Kommentare Kommentare sind SGML-Konstrukte, die normalerweise nur in DTDs gültig sind. Dennoch ist es, wie in gezeigt, möglich Fragmente mit SGML-Syntax in Dokumenten zu verwenden. Zum Abgrenzen von SGML-Kommentaren wird ein doppelter Bindestrich -- verwendet. Mit seinem ersten Auftreten öffnet er einen Kommentar, mit seinem zweiten schließt er ihn wieder. Beispiele für Kommentare in SGML <!-- Testkommentar --> ]]> Es sind zwei Bindestriche Es gibt ein Problem mit den PostScript- oder PDF-Versionen dieses Dokuments. Das obige Beispiel zeigt vielleicht nur einen Bindestrich (-) hinter <! und vor >. Es müssen zwei Bindestriche und nicht nur einer benutzt werden. Die PostScript- und PDF-Versionen haben vielleicht beide Bindestriche zu einem längeren Strich, dem em-dash, zusammengefasst. Die HTML-, nur-Text und RTF-Versionen dieses Dokuments sind nicht von diesem Problem betroffen. ]]> Hat man früher schon Erfahrungen mit HTML gesammelt, wird man vielleicht andere Regeln für den Gebrauch von Kommentaren kennengelernt haben. Beispielsweise wird oft angenommen, dass Kommentare mit <!-- begonnen und nur mit --> beendet werden. Dies ist nicht der Fall. Viele Webbrowser haben fehlerhafte HTML-Parser, die dies akzeptieren. Die SGML-Parser, die vom FDP verwendet werden, halten sich strenger an die SGML-Spezifikation und verwerfen Dokumente mit solchen Fehlern. Fehlerhafte SGML-Kommentare ]]> SGML-Parser würden die mittlere Zeile wie folgt interpretieren: <!DIES IST NICHT TEIL EINES KOMMENTARS> Da es sich hierbei nicht um gültiges SGML handelt, kann diese Zeile zur verwirrenden Fehlermeldungen führen. ]]> Wie das Beispiel zeigt, sollten solche Kommentare tunlichst vermieden werden. ]]> Ein solcher Kommentar ist (ein wenig) besser, kann aber jemanden, der mit SGML noch nicht so vertraut ist, verwirren. Fingerübungen… Zur Übung können Sie einige Kommentare in die Datei beispiel.sgml einfügen und überprüfen, ob die Datei nun noch erfolgreich von nsgmls validiert werden kann. Zu Testzwecken sollten Sie auch noch ein paar fehlerhafte Kommentare hinzufügen und sich die resultierenden Fehlermeldungen von nsgmls ansehen. Entitäten Entitäten stellen einen Mechanismus dar, mit dem einzelnen Dokumententeilen ein Name zugewiesen werden kann. Findet ein SGML-Parser während des Parsens eine Entität, ersetzt er diese durch den ihr zugewiesenen Inhalt. Dadurch steht eine einfache Möglichkeit zur Verfügung, mit der variabler Inhalt in SGML-Dokumenten eingebunden werden kann. Zusätzlich sind Entitäten der einzige Weg, über den eine Datei in eine andere Datei mit SGML-Mitteln eingebunden werden kann. Es werden zwei Arten von Entitäten unterschieden: Allgemeine Entitäten und Parameterentitäten. Allgemeine Entitäten Allgemeine Entitäten können nur in Dokumenten benutzt werden. Sie können zwar im SGML-Kontext definiert aber dort nicht benutzt werden. Vergleichen Sie dies mit Im Parameterentitäten. Jede allgemeine Entität hat einen Namen, über den sie angesprochen werden kann, um den von ihr referenzierten Inhalt in ein Dokument einzubinden. Dafür muss an der betreffenden Stelle der Namen der Entität per &entitaetenname; einfügt werden. Eine Entität current.version könnte beispielsweise durch die aktuelle Versionsnummer eines Programms ersetzt werden. Man könnte also schreiben: Die aktuelle Version des Programms ist ¤t.version;.]]> Wenn sich die Versionsnummer ändert, muss nur die Entität angepasst und anschließend das Dokument neu erzeugt werden. Eine weitere Einsatzmöglichkeit für Allgemeine Entitäten ist das Einbinden von Zeichen, die auf andere Weise nicht in ein SGML-Dokument eingefügt werden könnten. Ein Beispiel für solche Zeichen sind < und &, die normalerweise nicht direkt in SGML-Dokumenten erlaubt sind. Stößt ein SGML-Parser bei seiner Arbeit auf das Symbol <, nimmt er an, dass der Anfang eines Start- oder Endtags gefunden wurde. Bei einem & wird er annehmen, den Anfang einer Entität gefunden zu haben. Wenn eines der beiden Zeichen benötigt wird, werden daher die allgemeinen Entitäten &lt; und &amp; verwendet. Allgemeine Entitäten können nur in einem SGML-Kontext definiert werden. Üblich ist es, dies direkt nach der DOCTYPE-Deklaration zu tun: Allgemeine Entitäten festlegen ]>]]> Wichtig ist an dieser Stelle, dass die DOCTYPE-Deklaration durch eine eckige Klammer am Ende der ersten Zeile erweitert wurde. Die beiden Entitäten selber werden in den folgenden zwei Zeilen definiert, bevor in der letzten Zeile die eckige Klammer und die DOCTYPE-Deklaration wieder geschlossen werden. Die eckigen Klammern sind notwendig um festzulegen, dass man die über DOCTYPE genannte DTD erweitern möchte. Parameterentitäten Genau wie Allgemeine Entitäten werden Parameterentitäten eingesetzt um wiederverwendbare Inhaltsteile mit Namen zu versehen. Im Gegensatz zu Allgemeinen Entitäten können sie aber nur innerhalb eines SGML-Kontextes genutzt werden. Die Definition von Parameterentitäten erfolgt ähnlich zu der Allgemeiner Entitäten. Sie werden lediglich mit %entitaetenname; anstelle von &entitaetenname; referenziert Es wird das Prozentzeichen anstelle des kaufmännischen Unds verwendet. . Wichtig ist, dass das %-Zeichen zwischen ENTITY und dem Entitätennamen ein Teil der Definition ist. Parameterentitäten festlegen ]>]]> Fingerübungen… Fügen Sie in beispiel.sgml eine Allgemeine Entität ein. ]> Eine HTML-Beispieldatei

Das ist ein Absatz mit etwas Text.

Das ist ein Absatz mit anderem Text.

Dieser Absatz wird rechtsbündig ausgerichtet.

Die aktuelle Version ist: &version;

]]>
Validieren Sie diese Datei mit nsgmls Öffnen Sie nun beispiel.sgml mit Ihrem Webbrowser. Es kann notwendig sein, dass Sie die Datei vorher in beispiel.html umbenennen müssen, damit die Datei auch als HTML-Dokument erkannt wird. Nur wenn Sie einen sehr modernen Browser haben, werden Sie sehen können, dass &version; durch die Versionsnummer ersetzt wurde. Leider haben die meisten Webbrowser sehr einfache SGML-Parser, die nicht richtig mit SGML umgehen können Eigentlich ist das eine Schande. Man stelle sich vor, welche Probleme und Hacks, wie beispielsweise Server Side Includes, man an dieser Stelle hätte vermeiden können. . Die Lösung hierfür ist, das Dokument zu normalisieren. Zu diesem Zweck liest ein Normer das Dokument ein und gibt anschließend semantisch gleichwertiges SGML wieder aus, dass auf verschiedene Arten transformiert worden sein kann. Eine dieser möglichen Transformationen ist das Ersetzen der Referenzen auf Entitäten mit dem von ihnen präsentierten Inhalt. Versuchen Sie, die Beispieldatei mittels sgmlnorm zu normalisieren: &prompt.user; sgmlnorm beispiel.sgml > beispiel.html Anschließend sollten Sie eine normalisierte Version, dass heißt eine, bei der die Entitäten gegen ihren Inhalt ersetzt wurden, in der Datei beispiel.html finden. Diese Datei können Sie sich nun mit Ihrem Browser ansehen. Wenn Sie sich die Ausgaben von sgmlnorm ansehen, werden Sie feststellen, dass die DOCTYPE-Deklaration am Anfang der Datei nicht mehr enthalten ist. Möchten Sie die Deklaration behalten, muss sgmlnorm mit der Option aufrufen werden: &prompt.user; sgmlnorm -d beispiel.sgml > beispiel.html
Dateien mit Entitäten einbinden Sowohl Allgemeine als auch Parameterentitäten sind nützliche Helfer, wenn es darum geht, eine Datei in eine andere einzubinden. Dateien mit Allgemeinen Entitäten einbinden Angenommen man hat ein Buch geschrieben, dessen Inhalt auf mehrere Dateien aufgeteilt und mittels SGML ausgezeichnet. Jedes Kapitel wurde dazu in einer eigenen Datei (kapitel1.sgml, kapitel2.sgml usw.) abgelegt und über eine Datei buch.sgml sollen alle physischen Dateien wieder mit der Hilfe von Entitäten zu einem logischen Dokument zusammengeführt werden. Damit der Inhalt der Dateien mit Entitäten eingebunden werden kann, muss die Deklaration der Entitäten das Schlüsselwort SYSTEM enthalten. SGML-Parser werden so angewiesen, den Inhalt der referenzierten Datei als Wert für die jeweilige Entität zu nehmen. Dateien mit Allgemeinen Entitäten einbinden ]> &kapitel.1; &kapitel.2; &kapitel.3; ]]> Wenn man Allgemeine Entitäten benutzt, um andere Dateien einzubinden, dürfen diese Dateien (kapitel1.sgml, kapitel2.sgml, ...) keine eigene DOCTYPE-Deklaration haben. Dateien mit Parameterentitäten einbinden Wie bereits festgestellt, können Parameterentitäten nur innerhalb eines SGML-Kontexts genutzt werden. Warum möchte man aber Dateien innerhalb eines SGML-Kontexts einbinden? Der Vorteil liegt in der Möglichkeit, die Deklaration von Entitäten in eine andere Datei auslagern zu können, wodurch diese leichter wiederverwendbar sind. Angenommen das Buch aus dem vorherigen Kapitel besteht aus sehr vielen Kapiteln und diese sollen auch in einem anderen Buch, aber in einer anderen Reihenfolge, verwendet werden. Eine Möglichkeit wäre es, die dafür notwendigen Entitäten am Anfang jedes Buches einzeln festzulegen – was allerdings mit der Zeit unhandlich und fehlerträchtig wird. Alternativ bietet sich dazu an, die Deklarationen in eine separate Datei auszulagern und deren Inhalt anschließend in beide Bücher über Parameterentitäten einzubinden. Dateien mit Parameterentitäten einbinden Zuerst werden die Entitäten in einer separaten Datei namens kapitel.ent deklariert. kapitel.ent enthält für dieses Beispiel die folgenden Zeilen: ]]> Im zweiten Schritt fügt man in beide Bücher eine Parameterentität ein, die den Inhalt von kapitel.ent referenziert, und lädt über diese dann die Deklarationen. Anschließend können die so geladenen Entitäten wie gewohnt genutzt werden. %kapitel; ]> &kapitel.1; &kapitel.2; &kapitel.3; ]]> Fingerübungen… Binden Sie Dateien über Allgemeine Entitäten ein Legen Sie drei Dateien (absatz1.sgml, absatz2.sgml und absatz3.sgml) mit jeweils einer Zeile wie Erster Absatz.

]]>
an.
Ändern Sie beispiel.sgml so ab, dass sie wie folgt aussieht: ]> Eine HTML-Beispieldatei

Die aktuelle Version dieses Dokuments ist &version;

&absatz1; &absatz2; &absatz3; ]]>
Erzeugen Sie nun die Datei beispiel.html, indem Sie beispiel.sgml normalisieren: &prompt.user; sgmlnorm -d beispiel.sgml > beispiel.html Öffnen Sie beispiel.html nun mit einem Webbrowser und vergewissern Sie sich, dass der Inhalt der Dateien absatzN.sgml in beispiel.html übernommen wurde.
Binden Sie Dateien mit Parameterentitäten ein Hierfür müssen Sie die vorherige Fingerübung gemacht haben. Ändern Sie beispiel.sgml so ab, dass es wie folgt aussieht: %entitaeten; ]> Eine HTML-Beispieldatei

Die aktuelle Version dieses Dokuments ist &version;

&absatz1; &absatz2; &absatz3; ]]>
Legen Sie eine weitere Datei entitaeten.sgml an, die folgenden Inhalt hat: ]]> Erzeugen Sie die Datei beispiel.html, indem Sie beispiel.sgml normalisieren: &prompt.user; sgmlnorm -d beispiel.sgml > beispiel.html Öffnen Sie beispiel.html nun mit einem Webbrowser und vergewissern Sie sich, dass der Inhalt der Dateien absatzN.sgml in beispiel.html übernommen wurde.
Markierte Bereiche SGML erlaubt es, dass bestimmte Dokumentabschnitte während der Verarbeitung besonders behandelt werden sollen. Diese Abschnitte werden als markierte Bereiche auf Englisch marked sections bezeichnet. Aufbau eines markierten Bereiches <![ SCHLÜSSELWORT [ Inhalt des markierten Bereiches ]]> Da es sich bei markierten Bereichen um SGML-Konstrukte handelt, werden sie mit <! eingeleitet. Der eigentliche Anfang des markierten Bereiches wird von der folgenden eckigen Klammer bestimmt. Das darauf folgende SCHLÜSSELWORT legt fest, wie der markierte Inhalt durch einen SGML-Prozessor während der Verarbeitung behandelt werden soll. Der markierte Inhalt selbst beginnt erst nach der zweiten eckigen Klammer und erstreckt sich bis zu den zwei schließenden eckigen Klammern am Ende des Bereiches. Mit Hilfe des > Zeichens wird der mit <! begonnene SGML-Kontext wieder verlassen. Schlüsselworte für markierte Bereiche <literal>CDATA</literal> und <literal>RCDATA</literal> Die Schlüsselworte CDATA und RCDATA bestimmen das Inhaltsmodell für markierte Bereiche. Dadurch ist es möglich, vom Standardmodell abzuweichen. Ein SGML-Prozessor muss während der Verarbeitung eines Dokuments zu jedem Zeitpunkt wissen, welches Inhaltsmodell gerade anzuwenden ist. Was ist ein Inhaltsmodell? Kurz gesagt beschreibt das Inhaltsmodell, welche Art von Inhalt der Parser zu erwarten und wie er damit umzugehen hat. Bei CDATA und RCDATA handelt es sich wahrscheinlich um die nützlichsten Inhaltsmodelle. CDATA steht für Zeichendaten auf Englisch character data. Trifft ein Parser auf dieses Inhaltsmodell, wird er annehmen, dass sich im zugehörigen Dokumentenbereich nur gewöhnliche Zeichen befinden. Das bedeutet, dass < und & ihre besondere Bedeutung verlieren und als einfache Zeichen behandelt werden. RCDATA steht für Entitätenreferenzen und Zeichendatenauf Englisch Entity references and character data. Für einen Bereich mit diesem Inhaltsmodell, wird ein Parser davon ausgehen, dass er sowohl Zeichen als auch Enitätenreferenzen finden kann. < verliert hier zwar auch seine besondere Bedeutung, doch & wird weiterhin als Anfang einer Entität interpretiert. Nützlich ist das CDATA-Modell vor allem dann, wenn es darum geht Texte eins-zu-eins zu übernehmen, in denen < und & gehäuft auftreten. Zwar kann man solche Texte überarbeiten und jedes < durch ein &lt; und jedes & durch ein &amp; ersetzen, doch es wird in den meisten Fällen einfacher sein, für den betreffenden Text CDATA als Inhaltsmodell festzulegen. Ein SGML-Parser wird dann, sobald er auf < oder & trifft, diese als Zeichen in einem Text betrachten. Bei der Verwendung von CDATA und RCDATA als Inhaltsmodell für SGML-Beispiele, wie sie in diesem Dokument enthalten sind, muss bedacht werden, dass der Inhalt eines CDATA-Bereiches nicht validiert wird. dass das SGML in diesen Bereichen gültig ist, muss auf andere Weise sichergestellt werden. Denkbar ist beispielsweise, es in einem separaten Dokument zu erstellen, dort zu prüfen und erst dann in das eigentliche Dokument einzufügen. CDATA als Inhaltsmodell für markierte Bereiche <para>Das ist ein Beispiel, wie man einen Text, der viele &lt;- und &amp;- Entitäten enthält, in ein Dokument einbinden kann. Das Beispiel selbst, das sich innerhalb des markierten Bereiches befindet, ist ein HTML-Fragment. Der diesen Text umschließende Tag, beginnend mit mit para und endend mit /para, stammt aus der DocBook DTD.</para> <programlisting> <![ RCDATA [ Dieses Beispiel demonstriert die Verwendung von HTML-Elementen. Da spitze Klammern so oft vorkommen, ist es einfacher, das gesamte Beispiel als CDATA Abschnitt auszuweisen, als die entsprechenden Entitäten zu nutzen.

  • Das ist ein Listenelement.
  • Das ist ein zweites Listenelement.
  • Das ist ein drittes Listenelement.

Und das hier, das ist das Ende des Beispiels.

]]> ]]> </programlisting>
Liest man die Quellen dieser Fibel, wird man feststellen, dass diese Technik durchgängig angewandt wurde.
<literal>INCLUDE</literal> und <literal>IGNORE</literal> Das Schlüsselwort INCLUDE legt fest, dass der Inhalt des betreffenden Abschnittes mitverarbeitet wird. Demgegenüber bestimmt IGNORE, dass er ignoriert wird, dass heißt, dass er bei der Verarbeitung übergangen wird und in der Ausgabe nicht enthalten ist. Anwendung von <literal>INCLUDE</literal> und <literal>IGNORE</literal> in markierten Abschnitten <![ INCLUDE [ Dieser Text wird verarbeitet und eingebunden. ]]> <![ IGNORE [ Dieser Text wird weder verarbeitet noch eingebunden. ]]> Für sich alleine ist IGNORE als Anweisung nicht besonders nützlich, da ein Bereich, der von der Verarbeitung ausgenommen sein soll, auch auskommentiert werden kann. Kombiniert man IGNORE hingegen mit Parameterentitäten, steht so ein Weg zur Verfügung, um dessen Anwendung besser steuern zu können. Zwar können Parameterentitäten nur in einem SGML-Kontext einsetzt werden, da aber markierte Bereiche ebenfalls SGML-Konstrukte sind, ist diese Einschränkung irrelevant. Soll beispielsweise ein und dasselbe Dokument in zwei unterschiedlichen Varianten produziert werden, einer gedruckten und einer digitalen, und soll nur die digitale zusätzliche Informationen enthalten, kann dies mit einem Trick erreicht werden. Man definiert eine Parameterentität, der man als Wert die Zeichenkette INCLUDE zuweist und deklariert den betreffenden Bereich, der nur in der digitalen Variante erscheinen soll, als markierten Abschnitt und setzt als Schlüsselwort die zuvor definierte Parameterentität ein. Soll anstelle der digitalen die gedruckte Variante produziert werden, muss lediglich der Entität IGNORE als Wert zugewiesen und das Ursprungsdokument erneut durch den SGML-Prozessor geschickt werden. Kontrolle von markierten Bereichen über Parameterentitäten <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % digitale.kopie "INCLUDE"> ]]> ... <![ %digitale.kopie [ Dieser Satz sollte nur in der digitalen Version enthalten sein. ]]> Bei der Produktion der gedruckten Variante muss der Wert der Entität geändert werden. <!ENTITY % digitale.kopie "IGNORE"> Bei der Verarbeitung wird als Schlüsselwort in beiden Fällen der von %digitale.kopie repräsentierte Wert verwendet. Im ersten Fall wird der Inhalt des markierten Bereichs mitverarbeitet, im zweiten Fall nicht.
Fingerübung… Legen Sie eine neue Datei abschnitt.sgml an, die folgenden Inhalt hat: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % text.ausgabe "INCLUDE"> ]> <html> <head> <title>Ein Beispiel mit markierten Abschnitten</title> </head> <body> <p>Dieser Absatz <![ CDATA [beinhaltet viele < Zeichen (< < < < <). Weshalb es einfacher ist, ihn als CDATA Bereich auszuweisen. ]></p> <![ IGNORE [ <p>Dieser Absatz wird NICHT in der Ausgabe enthalten sein.</p> ]]> <![ [ <p>Dieser Absatz wird in Abhängigkeit von %text.ausgabe mitausgegeben.</p> ]]> </body> </html> Normalisieren Sie den Inhalt dieser Datei mit Hilfe von sgmlnorm und sehen Sie sich das Ergebnis an. Achten Sie dabei darauf, welche Absätze enthalten beziehungsweise nicht enthalten sind und was aus den CDATA-Bereichen geworden ist. Ändern Sie die Definition von text.ausgabe so, dass es den Wert IGNORE zugewiesen bekommt. Verarbeiten Sie dann die Datei erneut mit sgmlnorm und vergleichen die Ausgabe mit der vom ersten sgmlnorm Lauf.
Schlußbemerkung Aus Platzgründen, und um der Verständlichkeit Willen, wurden viele Gesichtspunkte nicht in aller Tiefe beziehungsweise gar nicht besprochen. Trotzdem sollte in den bisherigen Kapiteln genügend Wissen über SGML vermittelt worden sein, um den Aufbau der Dokumentation des FDPs zu verstehen.
diff --git a/de_DE.ISO8859-1/books/handbook/Makefile b/de_DE.ISO8859-1/books/handbook/Makefile index b9350929eb..cb3a3639b0 100644 --- a/de_DE.ISO8859-1/books/handbook/Makefile +++ b/de_DE.ISO8859-1/books/handbook/Makefile @@ -1,246 +1,259 @@ # # $FreeBSD$ -# $FreeBSDde: de-docproj/books/handbook/Makefile,v 1.58 2007/07/29 18:12:00 jkois Exp $ -# basiert auf: 1.107 +# $FreeBSDde: de-docproj/books/handbook/Makefile,v 1.59 2007/10/22 19:47:34 jkois Exp $ +# basiert auf: 1.108 # # Build the FreeBSD Handbook in its German translation. # .PATH: ${.CURDIR}/../../share/sgml/glossary MAINTAINER=de-bsd-translators@de.FreeBSD.org DOC?= book FORMATS?= html-split HAS_INDEX= true USE_PS2PDF= yes INSTALL_COMPRESSED?= gz INSTALL_ONLY_COMPRESSED?= IMAGES_EN = advanced-networking/isdn-bus.eps IMAGES_EN+= advanced-networking/isdn-twisted-pair.eps IMAGES_EN+= advanced-networking/natd.eps IMAGES_EN+= advanced-networking/net-routing.pic IMAGES_EN+= advanced-networking/static-routes.pic IMAGES_EN+= geom/striping.pic IMAGES_EN+= install/adduser1.scr IMAGES_EN+= install/adduser2.scr IMAGES_EN+= install/adduser3.scr IMAGES_EN+= install/boot-loader-menu.scr IMAGES_EN+= install/boot-mgr.scr IMAGES_EN+= install/config-country.scr IMAGES_EN+= install/console-saver1.scr IMAGES_EN+= install/console-saver2.scr IMAGES_EN+= install/console-saver3.scr IMAGES_EN+= install/console-saver4.scr IMAGES_EN+= install/disklabel-auto.scr IMAGES_EN+= install/disklabel-ed1.scr IMAGES_EN+= install/disklabel-ed2.scr IMAGES_EN+= install/disklabel-fs.scr IMAGES_EN+= install/disklabel-root1.scr IMAGES_EN+= install/disklabel-root2.scr IMAGES_EN+= install/disklabel-root3.scr IMAGES_EN+= install/disk-layout.eps IMAGES_EN+= install/dist-set.scr IMAGES_EN+= install/dist-set2.scr IMAGES_EN+= install/docmenu1.scr IMAGES_EN+= install/ed0-conf.scr IMAGES_EN+= install/ed0-conf2.scr IMAGES_EN+= install/edit-inetd-conf.scr IMAGES_EN+= install/fdisk-drive1.scr IMAGES_EN+= install/fdisk-drive2.scr IMAGES_EN+= install/fdisk-edit1.scr IMAGES_EN+= install/fdisk-edit2.scr IMAGES_EN+= install/ftp-anon1.scr IMAGES_EN+= install/ftp-anon2.scr IMAGES_EN+= install/hdwrconf.scr IMAGES_EN+= install/keymap.scr IMAGES_EN+= install/main1.scr IMAGES_EN+= install/mainexit.scr IMAGES_EN+= install/main-std.scr IMAGES_EN+= install/main-options.scr IMAGES_EN+= install/main-doc.scr IMAGES_EN+= install/main-keymap.scr IMAGES_EN+= install/media.scr IMAGES_EN+= install/mouse1.scr IMAGES_EN+= install/mouse2.scr IMAGES_EN+= install/mouse3.scr IMAGES_EN+= install/mouse4.scr IMAGES_EN+= install/mouse5.scr IMAGES_EN+= install/mouse6.scr IMAGES_EN+= install/mta-main.scr IMAGES_EN+= install/net-config-menu1.scr IMAGES_EN+= install/net-config-menu2.scr IMAGES_EN+= install/nfs-server-edit.scr IMAGES_EN+= install/ntp-config.scr IMAGES_EN+= install/options.scr IMAGES_EN+= install/pkg-cat.scr IMAGES_EN+= install/pkg-confirm.scr IMAGES_EN+= install/pkg-install.scr IMAGES_EN+= install/pkg-sel.scr IMAGES_EN+= install/probstart.scr IMAGES_EN+= install/routed.scr IMAGES_EN+= install/security.scr IMAGES_EN+= install/sysinstall-exit.scr IMAGES_EN+= install/timezone1.scr IMAGES_EN+= install/timezone2.scr IMAGES_EN+= install/timezone3.scr IMAGES_EN+= install/userconfig.scr IMAGES_EN+= install/userconfig2.scr IMAGES_EN+= install/example-dir1.eps IMAGES_EN+= install/example-dir2.eps IMAGES_EN+= install/example-dir3.eps IMAGES_EN+= install/example-dir4.eps IMAGES_EN+= install/example-dir5.eps IMAGES_EN+= mail/mutt1.scr IMAGES_EN+= mail/mutt2.scr IMAGES_EN+= mail/mutt3.scr IMAGES_EN+= mail/pine1.scr IMAGES_EN+= mail/pine2.scr IMAGES_EN+= mail/pine3.scr IMAGES_EN+= mail/pine4.scr IMAGES_EN+= mail/pine5.scr IMAGES_EN+= security/ipsec-network.pic IMAGES_EN+= security/ipsec-crypt-pkt.pic IMAGES_EN+= security/ipsec-encap-pkt.pic IMAGES_EN+= security/ipsec-out-pkt.pic IMAGES_EN+= vinum/vinum-concat.pic IMAGES_EN+= vinum/vinum-mirrored-vol.pic IMAGES_EN+= vinum/vinum-raid10-vol.pic IMAGES_EN+= vinum/vinum-raid5-org.pic IMAGES_EN+= vinum/vinum-simple-vol.pic IMAGES_EN+= vinum/vinum-striped-vol.pic IMAGES_EN+= vinum/vinum-striped.pic IMAGES_EN+= virtualization/parallels-freebsd1.png IMAGES_EN+= virtualization/parallels-freebsd2.png IMAGES_EN+= virtualization/parallels-freebsd3.png IMAGES_EN+= virtualization/parallels-freebsd4.png IMAGES_EN+= virtualization/parallels-freebsd5.png IMAGES_EN+= virtualization/parallels-freebsd6.png IMAGES_EN+= virtualization/parallels-freebsd7.png IMAGES_EN+= virtualization/parallels-freebsd8.png IMAGES_EN+= virtualization/parallels-freebsd9.png IMAGES_EN+= virtualization/parallels-freebsd10.png IMAGES_EN+= virtualization/parallels-freebsd11.png IMAGES_EN+= virtualization/parallels-freebsd12.png IMAGES_EN+= virtualization/parallels-freebsd13.png +IMAGES_EN+= virtualization/virtualpc-freebsd1.png +IMAGES_EN+= virtualization/virtualpc-freebsd2.png +IMAGES_EN+= virtualization/virtualpc-freebsd3.png +IMAGES_EN+= virtualization/virtualpc-freebsd4.png +IMAGES_EN+= virtualization/virtualpc-freebsd5.png +IMAGES_EN+= virtualization/virtualpc-freebsd6.png +IMAGES_EN+= virtualization/virtualpc-freebsd7.png +IMAGES_EN+= virtualization/virtualpc-freebsd8.png +IMAGES_EN+= virtualization/virtualpc-freebsd9.png +IMAGES_EN+= virtualization/virtualpc-freebsd10.png +IMAGES_EN+= virtualization/virtualpc-freebsd11.png +IMAGES_EN+= virtualization/virtualpc-freebsd12.png +IMAGES_EN+= virtualization/virtualpc-freebsd13.png # Images from the cross-document image library IMAGES_LIB= callouts/1.png IMAGES_LIB+= callouts/2.png IMAGES_LIB+= callouts/3.png IMAGES_LIB+= callouts/4.png IMAGES_LIB+= callouts/5.png IMAGES_LIB+= callouts/6.png IMAGES_LIB+= callouts/7.png IMAGES_LIB+= callouts/8.png IMAGES_LIB+= callouts/9.png IMAGES_LIB+= callouts/10.png IMAGES_LIB+= callouts/11.png IMAGES_LIB+= callouts/12.png IMAGES_LIB+= callouts/13.png IMAGES_LIB+= callouts/14.png IMAGES_LIB+= callouts/15.png # # SRCS lists the individual SGML files that make up the document. Changes # to any of these files will force a rebuild # # SGML content SRCS+= audit/chapter.sgml SRCS+= book.sgml SRCS+= colophon.sgml SRCS+= freebsd-glossary.sgml SRCS+= advanced-networking/chapter.sgml SRCS+= basics/chapter.sgml SRCS+= bibliography/chapter.sgml SRCS+= boot/chapter.sgml SRCS+= config/chapter.sgml SRCS+= cutting-edge/chapter.sgml SRCS+= desktop/chapter.sgml SRCS+= disks/chapter.sgml SRCS+= eresources/chapter.sgml SRCS+= firewalls/chapter.sgml SRCS+= geom/chapter.sgml SRCS+= install/chapter.sgml SRCS+= introduction/chapter.sgml SRCS+= jails/chapter.sgml SRCS+= kernelconfig/chapter.sgml SRCS+= l10n/chapter.sgml SRCS+= linuxemu/chapter.sgml SRCS+= mac/chapter.sgml SRCS+= mail/chapter.sgml SRCS+= mirrors/chapter.sgml SRCS+= multimedia/chapter.sgml SRCS+= network-servers/chapter.sgml SRCS+= pgpkeys/chapter.sgml SRCS+= ports/chapter.sgml SRCS+= ppp-and-slip/chapter.sgml SRCS+= preface/preface.sgml SRCS+= printing/chapter.sgml SRCS+= security/chapter.sgml SRCS+= serialcomms/chapter.sgml SRCS+= users/chapter.sgml SRCS+= vinum/chapter.sgml SRCS+= virtualization/chapter.sgml SRCS+= x11/chapter.sgml # Entities SRCS+= chapters.ent SRCS+= newsgroups.ent # alle Kapitel bauen CHAPTERS?= ${SRCS:M*chapter.sgml} SGMLFLAGS+= ${CHAPTERS:S/\/chapter.sgml//:S/^/-i chap./} SGMLFLAGS+= -i chap.freebsd-glossary pgpkeyring: pgpkeys/chapter.sgml @${JADE} -V nochunks ${OTHERFLAGS} ${JADEOPTS} -d ${DSLPGP} -t sgml ${MASTERDOC} URL_RELPREFIX?= ../../../.. DOC_PREFIX?= ${.CURDIR}/../../.. # # rules generating lists of mirror site from XML database. # XMLDOCS= mirrors-ftp:::mirrors.sgml.ftp.inc.tmp \ mirrors-cvsup:::mirrors.sgml.cvsup.inc.tmp \ eresources:::eresources.sgml.www.inc.tmp DEPENDSET.DEFAULT= transtable mirror XSLT.DEFAULT= ${XSL_MIRRORS} XML.DEFAULT= ${XML_MIRRORS} NO_TIDY.DEFAULT= yes PARAMS.mirrors-ftp+= --param 'type' "'ftp'" \ --param 'proto' "'ftp'" \ --param 'target' "'handbook/mirrors/chapter.sgml'" PARAMS.mirrors-cvsup+= --param 'type' "'cvsup'" \ --param 'proto' "'cvsup'" \ --param 'target' "'handbook/mirrors/chapter.sgml'" PARAMS.eresources+= --param 'type' "'www'" \ --param 'proto' "'http'" \ --param 'target' "'handbook/eresources/chapter.sgml'" SRCS+= mirrors.sgml.ftp.inc \ mirrors.sgml.cvsup.inc \ eresources.sgml.www.inc CLEANFILES+= mirrors.sgml.ftp.inc mirrors.sgml.ftp.inc.tmp \ mirrors.sgml.cvsup.inc mirrors.sgml.cvsup.inc.tmp \ eresources.sgml.www.inc eresources.sgml.www.inc.tmp .include "${DOC_PREFIX}/share/mk/doc.project.mk" .for p in ftp cvsup mirrors.sgml.${p}.inc: mirrors.sgml.${p}.inc.tmp ${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2>,;s,,,'\ < $@.tmp > $@ || (${RM} -f $@ && false) .endfor eresources.sgml.www.inc: eresources.sgml.www.inc.tmp ${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2>,;s,,,'\ < $@.tmp > $@ || (${RM} -f $@ && false) diff --git a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml index 75adc7eac0..b8e4089912 100644 --- a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml @@ -1,2734 +1,2771 @@ Chris Shumway Umgeschrieben von Uwe Pierau Übersetzt von Grundlagen des UNIX Betriebssystems Übersicht Das folgende Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden Material gilt auch für jedes andere &unix;-artige System. Falls Sie mit dem Material schon vertraut sind, können Sie dieses Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall aufmerksam lesen. Dieser Abschnitt behandelt die folgenden Themen: virtuelle Konsolen, Zugriffsrechte unter &unix; sowie Datei-Flags unter &os;, Zugriffskontrolllisten für Dateisysteme, die Verzeichnisstruktur von &os;, Organisation von Dateisystemen unter &os;, Ein- und Abhängen von Dateisystemen, Prozesse, Dämonen und Signale, Shells und die Login-Umgebung, Texteditoren, Geräte und Gerätedateien, Binärformate unter &os; und wie Sie in den Manualpages nach weiteren Informationen suchen können. Virtuelle Konsolen und Terminals virtuelle Konsole Terminals Sie können FreeBSD mit einem Terminal benutzen, der nur Text darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen Ihnen alle Möglichkeiten eines &unix; Betriebssystems zur Verfügung. Dieser Abschnitt beschreibt was Terminals und Konsolen sind und wie sie unter FreeBSD eingesetzt werden. Die Konsole Konsole Wenn Ihr FreeBSD-System ohne eine graphische Benutzeroberfläche startet, wird am Ende des Systemstarts, nachdem die Startskripten gelaufen sind, ein Anmeldeprompt ausgegeben. Die letzten Startmeldungen sollten ähnlich wie die Folgenden aussehen: Additional ABI support:. Local package initialization:. Additional TCP options:. Fri Sep 20 13:01:06 EEST 2002 FreeBSD/i386 (pc3.example.org) (ttyv0) login: Beachten Sie die letzten beiden Zeilen der Ausgabe, die vorletzte lautet: FreeBSD/i386 (pc3.example.org) (ttyv0) Diese Zeile enthält einige Informationen über das gerade gestartete System. Die Ausgabe stammt von der FreeBSD-Konsole einer Maschine mit einem Intel oder Intel-kompatiblen Prozessor der x86-Architektur Genau das ist mit i386 gemeint. Auch wenn Ihr System keine Intel 386 CPU besitzt, wird i386 ausgegeben. Es wird immer die Architektur und nicht der Typ des Prozessors ausgegeben. . Der Name des Systems (jedes &unix; System besitzt einen Namen) ist pc3.example.org und die Ausgabe stammt von der Systemkonsole, dem Terminal ttyv0. Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe eines Benutzernamens: login: Der Anmeldevorgang wird im nächsten Abschnitt erläutert. Der Anmeldevorgang FreeBSD ist ein Mehrbenutzersystem, das Multitasking unterstützt. Das heißt mehrere Benutzer können gleichzeitig viele Programme auf einem System laufen lassen. Jedes Mehrbenutzersystem muss die Benutzer voneinander unterscheiden können. Bei FreeBSD und allen anderen &unix;-artigen Betriebssystemen wird dies dadurch erreicht, dass sich die Benutzer anmelden müssen, bevor sie Programme laufen lassen können. Jeder Benutzer besitzt einen eindeutigen Namen (den Account) und ein dazugehörendes Passwort, die beide bei der Anmeldung abgefragt werden. Startskripten Nachdem FreeBSD gestartet ist und die Startskripten Startskripten sind Programme, die FreeBSD automatisch bei jedem Startvorgang ausführt. Der Zweck der Skripte besteht darin, das System zu konfigurieren und nützliche Dienste im Hintergrund zu starten. , gelaufen sind, erscheint eine Aufforderung zur Eingabe des Benutzernamens: login: Wenn Ihr Benutzername beispielsweise john ist, geben Sie jetzt john gefolgt von Enter ein. Sie sollten dann eine Aufforderung zur Eingabe des Passworts erhalten: login: john Password: Geben Sie jetzt das Passwort von john gefolgt von Enter ein. Das Passwort wird aus Sicherheitsgründen nicht auf dem Bildschirm angezeigt. Wenn Sie das richtige Passwort eingegeben haben, sind Sie am System angemeldet und können nun alle verfügbaren Kommandos absetzen. Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen (message of today) gefolgt von einer Eingabeaufforderung (dem Zeichen #, $ oder %) gesehen haben. Virtuelle Konsolen Da FreeBSD mehrere Programme gleichzeitig laufen lassen kann, ist eine einzige Konsole, an der Kommandos abgesetzt werden können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die mehrere Konsolen zur Verfügung stellen. Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie einstellen. Zwischen den einzelnen Konsolen können Sie mit speziellen Tastenkombinationen wechseln. Jede Konsole verfügt über einen eigenen Ausgabekanal und FreeBSD ordnet die Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn Sie zwischen den Konsolen wechseln. Zum Umschalten der Konsolen stellt FreeBSD spezielle Tastenkombinationen bereit Eine recht technische und genaue Beschreibung der FreeBSD-Konsole und der Tastatur-Treiber finden Sie in den Hilfeseiten &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; und &man.kbdcontrol.1;. Lesen Sie diese Seiten, wenn Sie an den Einzelheiten interessiert sind. . Benutzen Sie AltF1, AltF2 bis AltF8, um zwischen den verschiedenen Konsolen umzuschalten. Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole aus. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole gewechselt haben, laufen die dort abgesetzten Kommandos weiter. <filename>/etc/ttys</filename> In der Voreinstellung stehen unter FreeBSD acht virtuelle Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen oder verringern können. Die Anzahl und Art der Konsolen wird in /etc/ttys eingestellt. Jede Zeile in /etc/ttys, die nicht mit # anfängt, konfiguriert einen Terminal oder eine virtuelle Konsole. In der Voreinstellung werden in dieser Datei neun virtuelle Konsolen definiert, von denen acht aktiviert sind. Die Konsolen sind in den Zeilen, die mit ttyv beginnen, definiert: # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Die Hilfeseite &man.ttys.5; enthält eine ausführliche Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum Konfigurieren der virtuellen Konsolen benutzen können. Die Konsole im Single-User-Modus Eine eingehende Beschreibung des Single-User-Modus finden Sie in . Im Single-User-Modus steht Ihnen nur eine Konsole zur Verfügung. Die Definition dieser Konsole befindet sich ebenfalls in /etc/ttys. Suchen Sie nach einer Zeile, die mit console beginnt: # name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure In der Zeile, die mit console beginnt, können Sie secure durch insecure ersetzen. Wenn Sie danach in den Single-User-Modus booten, verlangt das System ebenfalls die Eingabe des root-Passworts. Setzen Sie insecure nicht leichtfertig ein. Wenn Sie das Passwort von root vergessen, wird es schwierig, in den Single-User-Modus zu gelangen, wenn Sie den FreeBSD-Boot-Prozess nicht genau verstehen. + + + Den Videomodus der Konsole anpassen + + Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden + Modus eingestellt werden, der von Ihrer Grafikkarte und Ihrem + Monitor unterstützt wird (beispielsweise 1024x768 oder + 1280x1024). Wollen Sie eine andere Einstellung verwenden, + müssen Sie Ihren Kernel neu kompilieren, nachdem Sie die + zwei folgenden Zeilen in Ihre Kernelkonfigurationsdatei + aufgenommen haben: + + OPTIONS VESA +options SC_PIXEL_MODE + + Nachdem Sie den Kernel mit diesen zwei Optionen neu + kompiliert haben, bestimmen Sie die möglichen + Videomodi mit dem Werkzeug &man.vidcontrol.1;. Um + beispielsweise einer Liste aller unterstützten + Modi zu erhalten, verwenden Sie den folgenden Befehl: + + &prompt.root; vidcontrol -i mode + + Als Ergebnis erhalten Sie eine Liste aller Videomodi, + die von Ihrer Hardware unterstützt werden. Sie wählen + einen neuen Modus aus, indem Sie den entsprechenden Wert + (wiederum als Benutzer root) an + &man.vidcontrol.1; übergeben: + + &prompt.root; vidcontrol MODE_279 + + Um diese Einstellung dauerhaft zu speichern, müssen Sie + die folgende Zeile in die Datei + /etc/rc.conf aufnehmen: + + allscreens_flags="MODE_279" + Zugriffsrechte UNIX FreeBSD, das ein direkter Abkömmling von BSD &unix; ist, stützt sich auf mehrere Grundkonzepte von &unix; Systemen. Das erste und ausgeprägteste: FreeBSD ist ein Mehrbenutzer-Betriebssystem. Das System ermöglicht, dass mehrere Benutzer gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU-Zeit unter den Benutzern. Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus: Zugriffsrechte Dateizugriffsrechte Wert Zugriffsrechte Auflistung im Verzeichnis 0 Kein Lesen, Kein Schreiben, Kein Ausführen --- 1 Kein Lesen, Kein Schreiben, Ausführen --x 2 Kein Lesen, Schreiben, Kein Ausführen -w- 3 Kein Lesen, Schreiben, Ausführen -wx 4 Lesen, Kein Schreiben, Kein Ausführen r-- 5 Lesen, Kein Schreiben, Ausführen r-x 6 Lesen, Schreiben, Kein Ausführen rw- 7 Lesen, Schreiben, Ausführen rwx ls Verzeichnisse Sie können auf der Kommandozeile von &man.ls.1; angeben, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die Ausgabe von ls -l könnte wie folgt aussehen: &prompt.user; ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ... Die erste Spalte der Ausgabe enthält die Zugriffsrechte: -rw-r--r-- Das erste Zeichen von links ist ein Symbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein zeichenorientiertes Gerät, ein Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel zeigt - eine normale Datei an. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, dass das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert. Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware-Geräten? FreeBSD behandelt die meisten Hardware-Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /dev gespeichert. Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis zum Beispiel mit cd gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu. Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein. Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in &man.chmod.1;. Tom Rhodes Beigesteuert von Symbolische Zugriffsrechte Zugriffsrechte symbolische Die Zugriffsrechte lassen sich auch über Symbole anstelle von oktalen Werten festlegen. Symbolische Zugriffsrechte werden in der Reihenfolge Wer, Aktion und Berechtigung angegeben. Die folgenden Symbole stehen zur Auswahl: Option Symbol Bedeutung Wer u Benutzer (user) Wer g Gruppe (group) Wer o Andere (other) Wer a Alle Aktion + Berechtigungen hinzufügen Aktion - Berechtigungen entziehen Aktion = Berechtigungen explizit setzen Berechtigung r lesen (read) Berechtigung w schreiben (write) Berechtigung x ausführen (execute) Berechtigung t Sticky-Bit Berechtigung s Set-UID oder Set-GID Symbolische Zugriffsrechte werden wie die numerischen mit dem Kommando &man.chmod.1; vergeben. Wenn Sie beispielsweise allen anderen Benutzern den Zugriff auf die Datei FILE verbieten wollen, benutzen Sie den nachstehenden Befehl: &prompt.user; chmod go= FILE Wenn Sie mehr als eine Änderung der Rechte einer Datei vornehmen wollen, können Sie eine durch Kommata getrennte Liste der Rechte angeben. Das folgende Beispiel entzieht der Gruppe und der Welt (den anderen) die Schreibberechtigung auf die Datei FILE und fügt dann für alle Ausführungsrechte hinzu: &prompt.user; chmod go-w,a+x FILE Tom Rhodes Beigetragen von &os; Datei-Flags Zusätzlich zu den vorhin diskutierten Zugriffsrechten unterstützt &os; auch die sogenannten Datei-Flags. Diese erhöhen die Sicherheit Ihres Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt. Diese verbesserte Sicherheit führt dazu, dass manche Dateien nicht einmal von root gelöscht oder bearbeitet werden können. Datei-Flags können über &man.chflags.1; gesetzt oder gelöscht werden. Um beispielsweise die Datei file1 mit dem unlöschbar-Flag zu sichern, geben Sie folgenden Befehl ein: &prompt.root; chflags sunlink file1 Um dieses Flag wieder zu löschen, geben Sie den Befehl erneut ein. Allerdings setzen Sie ein no vor : &prompt.root; chflags nosunlink file1 Um die Flags dieser Datei anzuzeigen, verwenden Sie &man.ls.1; zusammen mit der Option : &prompt.root; ls -lo file1 Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden: -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 Viele Flags können nur von root gesetzt oder gelöscht werden. Andere wiederum können auch vom Eigentümer der Datei gesetzt werden. Weitere Informationen zu Datei-Flags finden sich in den Manualpages &man.chflags.1; und &man.chflags.2;. Verzeichnis-Strukturen Verzeichnis Hierarchien Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Konzept, das Sie verstehen sollten, ist das Root-Verzeichnis /. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das System in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte für Dateisysteme, die beim Wechsel in den Multiuser-Modus eingehängt werden. Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses) eingehängt werden können. Dieser Vorgang wird in ausführlich beschrieben. Standard-Mountpunkte sind /usr, /var, /tmp, /mnt sowie /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript &man.rc.8; gemountet, wenn die zugehörigen Einträge nicht mit der Option versehen sind. Weitere Informationen zu diesem Thema finden Sie im . Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in &man.hier.7;. Als Beispiel sei eine kurze Übersicht über die am häufigsten verwendeten Verzeichnisse gegeben: Verzeichnis Beschreibung / Wurzelverzeichnis des Dateisystems. /bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb. /boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden. /boot/defaults/ Vorgaben für die Boot-Konfiguration, siehe &man.loader.conf.5;. /dev/ Gerätedateien, siehe &man.intro.4;. /etc/ Konfigurationsdateien und Skripten des Systems. /etc/defaults/ Vorgaben für die System Konfigurationsdateien, siehe &man.rc.8;. /etc/mail/ Konfigurationsdateien von MTAs wie &man.sendmail.8;. /etc/namedb/ Konfigurationsdateien von named, siehe &man.named.8;. /etc/periodic/ Täglich, wöchentlich oder monatlich ablaufende Skripte, die von &man.cron.8; gestartet werden. Siehe &man.periodic.8;. /etc/ppp/ Konfigurationsdateien von ppp, siehe &man.ppp.8;. /mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird. /proc/ Prozess Dateisystem, siehe &man.procfs.5; und &man.mount.procfs.8;. /rescue/ Statisch gelinkte Programme zur Wiederherstellung des Systems, lesen Sie dazu auch &man.rescue.8;. /root/ Home Verzeichnis von root. /sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind. /tmp/ Temporäre Dateien, die für gewöhnlich bei einem Neustart des Systems verloren gehen. Häufig wird ein speicherbasiertes Dateisystem unter /tmp eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die tmpmfs-bezogenen Variablen von &man.rc.conf.5; verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in &man.mdmfs.8;. /usr/ Der Großteil der Benutzerprogramme und Anwendungen. /usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen. /usr/include/ Standard C include-Dateien. /usr/lib/ Bibliotheken. /usr/libdata/ Daten verschiedener Werkzeuge. /usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden. /usr/local/ Lokale Programme, Bibliotheken usw. Die Ports-Sammlung benutzt dieses Verzeichnis als Zielverzeichnis für zu installierende Anwendungen. Innerhalb von /usr/local sollte das von &man.hier.7; beschriebene Layout für /usr benutzt werden. Das man Verzeichnis wird direkt unter /usr/local anstelle unter /usr/local/share angelegt. Die Dokumentation der Ports findet sich in share/doc/port. /usr/obj/ Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht. /usr/ports Die FreeBSD-Ports-Sammlung (optional). /usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden. /usr/share/ Von der Architektur unabhängige Dateien. /usr/src/ Quelldateien von BSD und/oder lokalen Ergänzungen. /usr/X11R6/ Optionale X11R6-Programme und Bibliotheken. /var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien. Manchmal wird ein speicherbasiertes Dateisystem unter /var eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die varmfs-bezogenen Variablen von &man.rc.conf.5; verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in &man.mdmfs.8;. /var/log/ Verschiedene Logdateien des Systems. /var/mail/ Postfächer der Benutzer. /var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme. /var/tmp/ Temporäre Dateien. Dateien in diesem Verzeichnis bleiben in der Regel auch bei einem Neustart des Systems erhalten, es sei denn, bei /var handelt es sich um ein speicherbasiertes Dateisystem. /var/yp NIS maps. Festplatten, Slices und Partitionen &os; identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: readme.txt und README.TXT bezeichnen daher zwei verschiedene Dateien. &os; benutzt keine Dateiendungen wie .txt, um den Typ der Datei (ein Programm, ein Dokument oder andere Daten) zu bestimmen. Dateien werden in Verzeichnissen gespeichert. In einem Verzeichnis können sich keine oder hunderte Dateien befinden. Ein Verzeichnis kann auch andere Verzeichnisse enthalten und so eine Hierarchie von Verzeichnissen aufbauen, die Ihnen die Ablage von Daten erleichtert. In Dateinamen werden Verzeichnisse durch einen Schrägstrich (/, Slash) getrennt. Wenn das Verzeichnis foo ein Verzeichnis bar enthält, in dem sich die Datei readme.txt befindet, lautet der vollständige Name der Datei (oder der Pfad zur Datei) foo/bar/readme.txt. Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt ein Wurzelverzeichnis (Root-Directory), das weitere Verzeichnisse enthalten kann. Dieses Konzept kennen Sie vielleicht von anderen Betriebssystemen, aber es gibt einige Unterschiede: In &ms-dos; werden Datei- und Verzeichnisnamen mit dem Zeichen \ getrennt, &macos; benutzt dazu das Zeichen :. &os; kennt keine Laufwerksbuchstaben und in Pfaden werden keine Bezeichnungen für Laufwerke benutzt. Die Pfadangabe c:/foo/bar/readme.txt gibt es in &os; nicht. Stattdessen wird ein Dateisystem als Wurzeldateisystem (root file system) ausgewählt. Das Wurzelverzeichnis dieses Dateisystems wird / genannt. Jedes andere Dateisystem wird unter dem Wurzeldateisystem eingehangen (mount). Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf derselben Platte zu liegen. Betrachten wir drei Dateisysteme A, B und C. Jedes Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse enthält: A1, A2, B1, B2, C1 und C2. Das Wurzeldateisystem soll A sein. Das Kommando ls zeigt darin die beiden Verzeichnisse A1 und A2 an. Der Verzeichnisbaum sieht wie folgt aus: / | +--- A1 | `--- A2 Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems eingehangen. Wir hängen nun das Dateisystem B in das Verzeichnis A1 ein. Das Wurzelverzeichnis von B ersetzt nun das Verzeichnis A1 und die Verzeichnisse des Dateisystems B werden sichtbar: / | +--- A1 | | | +--- B1 | | | `--- B2 | `--- A2 Jede Datei in den Verzeichnissen B1 oder B2 kann über den Pfad /A1/B1 oder /A1/B2 erreicht werden. Dateien aus dem Verzeichnis /A1 sind jetzt verborgen. Wenn das Dateisystem B wieder abgehangen wird (umount), erscheinen die verborgenen Dateien wieder. Wenn das Dateisystem B unter dem Verzeichnis A2 eingehangen würde, sähe der Verzeichnisbaum so aus: / | +--- A1 | `--- A2 | +--- B1 | `--- B2 Die Dateien des Dateisystems B wären unter den Pfaden /A2/B1 und /A2/B2 erreichbar. Dateisysteme können übereinander eingehangen werden. Der folgende Baum entsteht, wenn im letzten Beispiel das Dateisystem C in das Verzeichnis B1 des Dateisystems B eingehangen wird: / | +--- A1 | `--- A2 | +--- B1 | | | +--- C1 | | | `--- C2 | `--- B2 C könnte auch im Verzeichnis A1 eingehangen werden: / | +--- A1 | | | +--- C1 | | | `--- C2 | `--- A2 | +--- B1 | `--- B2 Der &ms-dos;-Befehl join kann Ähnliches bewirken. Normalerweise müssen Sie sich nicht mit Dateisystemen beschäftigen. Während der Installation werden die Dateisysteme und die Stellen, in der sie eingehangen werden, festgelegt. Dateisysteme müssen Sie erst wieder anlegen, wenn Sie eine neue Platte hinzufügen. Sie können sogar mit nur einem großen Dateisystem auskommen. Dies hat mehrere Nachteile und einen Vorteil. Vorteile mehrerer Dateisysteme Die Dateisysteme können mit unterschiedlichen Optionen (mount options) eingehangen werden. Bei sorgfältiger Planung können Sie beispielsweise das Wurzeldateisystem nur lesbar einhängen. Damit schützen Sie sich vor dem unabsichtlichen Löschen oder Editieren kritischer Dateien. Von Benutzern beschreibbare Dateisysteme wie /home können Sie mit der Option nosuid einhängen, wenn sie von anderen Dateisystemen getrennt sind. Die SUID- und GUID-Bits verlieren auf solchen Dateisystemen ihre Wirkung und die Sicherheit des Systems kann dadurch erhöht werden. Die Lage von Dateien im Dateisystem wird, abhängig vom Gebrauch des Dateisystems, automatisch von &os; optimiert. Ein Dateisystem mit vielen kleinen Dateien, die häufig geschrieben werden, wird anders behandelt als ein Dateisystem mit wenigen großen Dateien. Mit nur einem Dateisystem ist diese Optimierung unmöglich. In der Regel übersteht ein &os;-Dateisystem auch einen Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen Zeitpunkt das Dateisystem beschädigen. Wenn die Daten über mehrere Dateisysteme verteilt sind, lässt sich das System mit hoher Wahrscheinlichkeit noch starten. Dies erleichtert das Zurückspielen von Datensicherungen. Vorteil eines einzelnen Dateisystems Die Größe von Dateisystemen liegt fest. Es kann passieren, dass Sie eine Partition vergrößern müssen. Dies ist nicht leicht: Sie müssen die Daten sichern, das Dateisystem vergrößert anlegen und die gesicherten Daten zurückspielen. &os; kennt den Befehl &man.growfs.8;, mit dem man Dateisysteme im laufenden Betrieb vergrößern kann. Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen &ms-dos;-Partitionen gemeint). Jede Partition wird mit einem Buchstaben von a bis h bezeichnet und kann nur ein Dateisystem enthalten. Dateisysteme können daher über ihren Mount-Point, den Punkt an dem sie eingehangen sind, oder den Buchstaben der Partition, in der sie liegen, identifiziert werden. &os; benutzt einen Teil der Platte für den Swap-Bereich, der dem Rechner virtuellen Speicher zur Verfügung stellt. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann &os; nicht benutzte Daten in den Swap-Bereich auslagern. Die ausgelagerten Daten können später wieder in den Speicher geholt werden (dafür werden dann andere Daten ausgelagert). Für einige Partitionen gelten besondere Konventionen: Partition Konvention a Enthält normalerweise das Wurzeldateisystem b Enthält normalerweise den Swap-Bereich c Ist normalerweise genauso groß wie die Slice in der die Partition liegt. Werkzeuge, die auf der kompletten Slice arbeiten, wie ein Bad-Block-Scanner, können so die c-Partition benutzen. Für gewöhnlich legen Sie in dieser Partition kein Dateisystem an. d Früher hatte die d-Partition eine besondere Bedeutung. Heute ist dies nicht mehr der Fall und die Partition d kann wie jede andere Partition auch verwendet werden. Jede Partition, die ein Dateisystem enthält, wird in einer Slice angelegt. Slice ist der Begriff, den &os; für &ms-dos;-Partitionen verwendet. Slices werden von eins bis vier durchnummeriert. Slices Partitionen dangerously dedicated Die Slice-Nummern werden mit vorgestelltem s hinter den Gerätenamen gestellt: da0s1 ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer Festplatte gibt es höchstens vier Slices. In einer Slice des passenden Typs kann es weitere logische Slices geben. Diese erweiterten Slices werden ab fünf durchnummeriert: ad0s5 ist die erste erweiterte Slice auf einer IDE-Platte. Diese Geräte werden von Dateisystemen benutzt, die sich in einer kompletten Slice befinden müssen. Slices, dangerously dedicated-Festplatten und andere Platten enthalten Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der Buchstabe wird an den Gerätenamen gehangen: da0a ist die a-Partition des ersten da-Laufwerks. Dieses Laufwerk ist dangerously dedicated. ad1s3e ist die fünfte Partition in der dritten Slice der zweiten IDE-Platte. Schließlich wird noch jede Festplatte des Systems eindeutig bezeichnet. Der Name einer Festplatte beginnt mit einem Code, der den Typ der Platte bezeichnet. Es folgt eine Nummer, die angibt, um welche Festplatte es sich handelt. Anders als bei Slices werden Festplatten von Null beginnend durchnummeriert. Gängige Festplatten-Namen sind in zusammengestellt. Wenn Sie eine Partition angeben, erwartet &os;, dass Sie auch die Slice und die Platte angeben, in denen sich die Partition befindet. Wenn Sie eine Slice angeben, müssen Sie auch die Platte der Slice angeben. Setzen Sie den Namen aus dem Plattennamen gefolgt von einem s, der Slice-Nummer und dem Buchstaben der Partition zusammen. Einige Beispiele finden Sie in . Der Aufbau einer Festplatte wird in dargestellt. Um &os; zu installieren, müssen Sie zuerst Slices auf den Festplatten anlegen. Innerhalb der Slices, die Sie für &os; verwenden wollen, müssen Sie dann Partitionen anlegen. In den Partitionen wiederum werden die Dateisysteme (oder der Auslagerungsbereich) angelegt. Für Dateisysteme müssen Sie schließlich noch festlegen, wo diese eingehangen werden (Mount-Point). Laufwerk-Codes Code Bedeutung ad ATAPI (IDE) Festplatte da SCSI-Festplatte acd ATAPI (IDE) CD-ROM cd SCSI-CD-ROM fd Disketten-Laufwerk
Namen von Platten, Slices und Partitionen Name Bedeutung ad0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten IDE-Festplatte (ad0). da1s2e Die fünfte Partition (e) der zweiten Slice (s2) auf der zweiten SCSI-Festplatte (da1). Aufteilung einer Festplatte Das folgende Diagramm zeigt die Sicht von &os; auf die erste IDE-Festplatte eines Rechners. Die Platte soll 4 GB groß sein und zwei Slices (&ms-dos;-Partitionen) mit je 2 GB besitzen. Die erste Slice enthält ein &ms-dos;-Laufwerk (C:), die zweite Slice wird von &os; benutzt. Im Beispiel verwendet die &os;-Installationen drei Datenpartitionen und einen Auslagerungsbereich. Jede der drei Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die a-Partition. In der e-Partition befindet sich der /var-Verzeichnisbaum und in der f-Partition befindet sich der Verzeichnisbaum unterhalb von /usr. .-----------------. --. | | | | DOS / Windows | | : : > First slice, ad0s1 : : | | | | :=================: ==: --. | | | Partition a, mounted as / | | | > referred to as ad0s2a | | | | | :-----------------: ==: | | | | Partition b, used as swap | | | > referred to as ad0s2b | | | | | :-----------------: ==: | Partition c, no | | | Partition e, used as /var > file system, all | | > referred to as ad0s2e | of FreeBSD slice, | | | | ad0s2c :-----------------: ==: | | | | | : : | Partition f, used as /usr | : : > referred to as ad0s2f | : : | | | | | | | | --' | `-----------------' --'
Anhängen und Abhängen von Dateisystemen Ein Dateisystem wird am besten als ein Baum mit der Wurzel / veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local haben können. Root-Dateisystem Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft. Ein weiterer Grund bestimmte Verzeichnisbäume auf andere Dateisysteme zu legen, ist gegeben, wenn sich die Verzeichnisbäume auf gesonderten physikalischen oder virtuellen Platten, wie Network File System oder CD-ROM-Laufwerken, befinden. Die <filename>fstab</filename> Datei Dateisysteme fstab Während des Boot-Prozesses werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option versehen sind, automatisch angehangen. Die Zeilen in /etc/fstab haben das folgende Format: device /mount-point fstype options dumpfreq passno device Ein existierender Gerätename wie in beschrieben. mount-point Ein existierendes Verzeichnis, an das das Dateisystem angehangen wird. fstype Der Typ des Dateisystems, der an &man.mount.8; weitergegeben wird. FreeBSDs Standarddateisystem ist ufs. options Entweder für beschreibbare Dateisysteme oder für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in &man.mount.8;. dumpfreq Gibt die Anzahl der Tage an, nachdem das Dateisystem gesichert werden soll. Fehlt der Wert, wird 0 angenommen. passno Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf null zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von passno eins betragen. Allen anderen Dateisystemen sollten Werte größer eins zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird &man.fsck.8; versuchen, diese parallel zu überprüfen. Das <command>mount</command> Kommando Dateisysteme anhängen &man.mount.8; hängt schließlich Dateisysteme an. In der grundlegenden Form wird es wie folgt benutzt: &prompt.root; mount device mountpoint Viele Optionen werden in &man.mount.8; beschrieben, die am häufigsten verwendeten sind: Optionen von <command>mount</command> Hängt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind Dateisysteme, die mit noauto markiert sind, die mit der Option ausgeschlossen wurden und Dateisysteme, die schon angehangen sind. Führt alles bis auf den mount-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit . Damit wird angezeigt, was &man.mount.8; tatsächlich versuchen würde, um das Dateisystem anzuhängen. Erzwingt das Anhängen eines unsauberen Dateisystems oder erzwingt die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird. Hängt das Dateisystem schreibgeschützt ein. Das kann auch durch Angabe von als Argument ( vor FreeBSD 5.2) der Option erreicht werden. fstype Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn auch angegeben wurde. Die Voreinstellung für den Typ des Dateisystems ist ufs. Aktualisiert die Mountoptionen des Dateisystems. Geschwätzig sein. Hängt das Dateisystem beschreibbar an. erwartet eine durch Kommata separierte Liste von Optionen, unter anderem die folgenden: noexec Verbietet das Ausführen von binären Dateien auf dem Dateisystem. Dies ist eine nützliche Sicherheitsfunktion. nosuid SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist eine nützliche Sicherheitsfunktion. Das <command>umount</command> Kommando Dateisysteme abhängen &man.umount.8; akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder die Optionen oder . Jede Form akzeptiert , um das Abhängen zu erzwingen, und , um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit : Ihr Computer kann abstürzen oder es können Daten auf dem Dateisystem beschädigt werden, wenn Sie das Abhängen erzwingen. und werden benutzt um alle Dateisysteme, deren Typ durch modifiziert werden kann, abzuhängen. hängt das Rootdateisystem nicht ab. Prozesse Da FreeBSD ein Multitasking-Betriebssystem ist, sieht es so aus, als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, das zu irgendeiner Zeit läuft, wird Prozess genannt. Jedes Kommando startet mindestens einen Prozess. Einige Systemprozesse laufen ständig und stellen die Funktion des Systems sicher. Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die Prozess-ID oder PID genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Dabei finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein Prozess und jedes Kommando, das Sie starten, ist auch ein Prozess. Jeder Prozess, den Sie auf diese Weise starten, besitzt den Shell-Prozess als Elternprozess. Die Ausnahme hiervon ist ein spezieller Prozess, der &man.init.8; heißt. init ist immer der erste Prozess und hat somit die PID 1. init wird vom Kernel beim Booten von FreeBSD gestartet. Die Kommandos &man.ps.1; und &man.top.1; sind besonders nützlich, um sich die Prozesse auf einem System anzusehen. ps zeigt eine statische Liste der laufenden Prozesse und kann deren PID, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden und vieles mehr anzeigen. top zeigt alle laufenden Prozesse an und aktualisiert die Anzeige, so dass Sie Ihrem Computer bei der Arbeit zuschauen können. Normal zeigt Ihnen ps nur die laufenden Prozesse, die Ihnen gehören. Zum Beispiel: &prompt.user; ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish Wie Sie sehen, gibt &man.ps.1; mehrere Spalten aus. In der PID Spalte findet sich die vorher besprochene Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an, wenn die Grenze überschritten wird. Ist eine PID bereits vergeben, wird diese allerdings nicht erneut vergeben. Die Spalte TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt den Status des Programms an und kann für die Zwecke dieser Diskussion ebenso wie TT ignoriert werden. TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist – dies ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen ist, da die meisten Programme hauptsächlich auf bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND finden Sie schließlich die Kommandozeile, mit der das Programm gestartet wurde. &man.ps.1; besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. Mit werden Information über alle laufenden Prozesse und nicht nur Ihrer eigenen angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit angezeigt. zeigt auch Dämonen-Prozesse an, und veranlasst &man.ps.1; die komplette Kommandozeile für jeden Befehl anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird. Die Ausgabe von &man.top.1; sieht ähnlich aus: &prompt.user; top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ... Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die Systemauslastung (engl. load average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele Prozesse momentan laufen (im Beispiel 47), wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt. Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von &man.ps.1;. Wie im vorigen Beispiel können Sie die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando erkennen. &man.top.1; zeigt auch den Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt ist. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. &netscape; hat im gezeigten Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt es allerdings nur 9 MB. Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden aktualisiert. Der Zeitraum kann mit eingestellt werden. Dämonen, Signale und Stoppen von Prozessen Wenn Sie einen Editor starten, können Sie ihn leicht bedienen und Dateien laden. Sie können das, weil der Editor dafür Vorsorge getroffen hat und auf einem Terminal läuft. Manche Programme erwarten keine Eingaben von einem Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren sind ein weiteres Beispiel für diesen Typ von Anwendungen. Wir nennen diese Programme Dämonen. Dämonen stammen aus der griechischen Mythologie und waren weder gut noch böse. Sie waren kleine dienstbare Geister, die meistens nützliche Sachen für die Menschheit vollbrachten. Ähnlich wie heutzutage Web-Server und Mail-Server nützliche Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack. Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem d am Ende benannt. BIND steht beispielsweise für Berkeley Internet Name Domain, das tatsächlich laufende Programm heißt aber named. Der Apache Webserver wird httpd genannt, der Druckerspool-Dämon heißt lpd usw. Dies ist allerdings eine Konvention und keine unumstößliche Regel: Der Dämon der Anwendung sendmail heißt sendmail und nicht maild, wie Sie vielleicht gedacht hatten. Manchmal müssen Sie mit einem Dämon kommunizieren. Dazu verwenden Sie Signale. Sie können mit einem Dämonen oder jedem anderen laufenden Prozess kommunizieren, indem Sie diesem ein Signal schicken. Sie können verschiedene Signale verschicken – manche haben eine festgelegte Bedeutung, andere werden von der Anwendung interpretiert. Die Dokumentation zur fraglichen Anwendung wird erklären, wie die Anwendung Signale interpretiert. Sie können nur Signale zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben nicht die Berechtigung, Prozessen anderer Benutzer mit &man.kill.1; oder &man.kill.2; Signale zu schicken. Der Benutzer root darf jedem Prozess Signale schicken. In manchen Fällen wird FreeBSD Signale senden. Wenn eine Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht zugreifen soll, so sendet FreeBSD dem Prozess das Segmentation Violation Signal (SIGSEGV). Wenn eine Anwendung den &man.alarm.3; Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm Signal (SIGALRM) gesendet. Zwei Signale können benutzt werden, um Prozesse zu stoppen: SIGTERM und SIGKILL. Mit SIGTERM fordern Sie den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und merken, dass er sich beenden soll. Er hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er vor der Aufforderung sich zu beenden durchführte, abzuschließen. Er kann sogar SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf. SIGKILL kann von keinem Prozess ignoriert werden. Das Signal lässt sich mit Mich interessiert nicht, was du gerade machst, hör sofort auf damit! umschreiben. Wenn Sie einem Prozess SIGKILL schicken, dann wird FreeBSD diesen sofort beenden Das stimmt nicht ganz: Es gibt Fälle, in denen ein Prozess nicht unterbrochen werden kann. Wenn der Prozesss zum Beispiel eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser Rechner aus irgendwelchen Gründen nicht erreichbar ist (ausgeschaltet, oder ein Netzwerkfehler), dann ist der Prozess nicht zu unterbrechen. Wenn der Prozess den Lesezugriff nach einem Timeout von typischerweise zwei Minuten aufgibt, dann wir er beendet. . Andere Signale, die Sie vielleicht verschicken wollen, sind SIGHUP, SIGUSR1 und SIGUSR2. Diese Signale sind für allgemeine Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich auf diese Signale reagieren. Nehmen wir an, Sie haben die Konfiguration Ihres Webservers verändert und möchten dies dem Server mitteilen. Sie könnten den Server natürlich stoppen und httpd wieder starten. Die Folge wäre eine kurze Zeit, in der der Server nicht erreichbar ist. Die meisten Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines SIGHUP neu ein. Da es keinen Standard gibt, der vorschreibt, wie auf diese Signale zu reagieren ist, lesen Sie bitte die Dokumentation zu dem in Frage kommenden Dämon. Mit &man.kill.1; können Sie, wie unten gezeigt, Signale verschicken. Verschicken von Signalen Das folgende Beispiel zeigt, wie Sie &man.inetd.8; ein Signal schicken. Die Konfigurationsdatei von inetd ist /etc/inetd.conf. Diese Konfigurationsdatei liest inetd ein, wenn er ein SIGHUP empfängt. Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal schicken wollen. Benutzen Sie dazu &man.ps.1; und &man.grep.1;. Mit &man.grep.1; können Sie in einer Ausgabe nach einem String suchen. Da &man.inetd.8; unter dem Benutzer root läuft und Sie das Kommando als normaler Benutzer absetzen, müssen Sie &man.ps.1; mit aufrufen: &prompt.user; ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW Die Prozess-ID von &man.inetd.8; ist 198. In einigen Fällen werden Sie auch das grep inetd Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie &man.ps.1; die Liste der laufenden Prozesse untersucht. Senden Sie das Signal mit &man.kill.1;. Da &man.inetd.8; unter dem Benutzer root läuft, müssen Sie zuerst mit &man.su.1; root werden: &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 &man.kill.1; wird, wie andere Kommandos von &unix; Systemen auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, einem Prozess, der nicht Ihnen gehört, ein Signal zu senden, dann werden Sie die Meldung kill: PID: Operation not permitted sehen. Wenn Sie sich bei der Eingabe der PID vertippen, werden Sie das Signal dem falschen Prozess schicken, was schlecht sein kann. Wenn Sie Glück haben, existiert der Prozess nicht und Sie werden mit der Ausgabe kill: PID: No such process belohnt. Warum soll ich <command>/bin/kill</command> benutzen? Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Das kann nützlich sein, aber die unterschiedlichen Shells benutzen eine verschiedene Syntax, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill ... direkt aufzurufen. Andere Signale senden Sie auf die gleiche Weise, ersetzen Sie nur TERM oder KILL entsprechend. Es kann gravierende Auswirkungen haben, wenn Sie zufällig Prozesse beenden. Insbesondere &man.init.8; mit der Prozess-ID ist ein Spezialfall. Mit /bin/kill -s KILL 1 können Sie Ihr System schnell herunterfahren. Überprüfen Sie die Argumente von &man.kill.1; immer zweimal bevor Sie Return drücken. Shells Shells Kommandozeile Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), einen Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und tcsh (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung. Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit &unix; Systemen neu, so könnten Sie die bash probieren. Der Punkt ist, dass jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien foobar und foo.bar. Die Datei foo.bar möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: rm fo[Tab]. [Tab]. Die Shell würde dann rm foo[BEEP].bar ausgeben. [BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, dass es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem Sie . eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen. Umgebungsvariablen Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. Die folgende Liste zeigt verbreitete Umgebungsvariablen und was sie bedeuten: Umgebungsvariablen Variable Beschreibung USER Name des angemeldeten Benutzers. PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. DISPLAY Der Name des X11-Bildschirms, auf dem Ausgaben erfolgen sollen. SHELL Die aktuelle Shell. TERM Name des Terminaltyps des Benutzers. Benutzt, um die Fähigkeiten des Terminals zu bestimmen. TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen. OSTYPE Typ des Betriebsystems, beispielsweise FreeBSD. MACHTYPE Die CPU Architektur auf dem das System läuft. EDITOR Vom Benutzer bevorzugter Text-Editor. PAGER Vom Benutzer bevorzugter Text-Betrachter. MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages. Shells Bourne Shell Das Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash benutzen Sie zum Setzen von Umgebungsvariablen export. Um beispielsweise die Variable EDITOR mit csh oder tcsh auf /usr/local/bin/emacs zu setzen, setzen Sie das folgende Kommando ab: &prompt.user; setenv EDITOR /usr/local/bin/emacs Unter Bourne-Shells: &prompt.user; export EDITOR="/usr/local/bin/emacs" Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt. Shells behandeln viele Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Diese Metazeichen können zum Vervollständigen von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert das Kommando echo * nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen, an echo weitergibt. Um zu verhindern, dass die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht. Ändern der Shell Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit Shell: entsprechend Ihren Wünschen. Sie können auch chsh mit der Option aufrufen, dann wird Ihre Shell gesetzt, ohne dass Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein: &prompt.user; chsh -s /usr/local/bin/bash Die von Ihnen gewünschte Shell muss in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports-Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen. Haben Sie beispielsweise die bash nach /usr/local/bin installiert, geben Sie Folgendes ein: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Danach können Sie chsh aufrufen. Text-Editoren Text Editoren Editoren Eine großer Teil der Konfiguration wird bei FreeBSD durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr viel mehr in der Ports-Sammlung. ee Text Editoren ee Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, wobei filename den Namen der zu editierenden Datei darstellt. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf ein. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ steht für die Ctrl (oder Strg) Taste, mit ^e ist also die Tastenkombination Ctrle gemeint. Um ee zu verlassen, drücken Sie Esc und wählen dann aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde. vi Text Editoren vi emacs Text Editoren emacs FreeBSD verfügt über leistungsfähigere Editoren wie vi als Teil des Basissystems, andere Editoren wie emacs oder vim sind Teil der Ports-Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit, jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Wenn Sie viele Textdateien editieren, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen von Editoren wie vim oder emacs ein. Geräte und Gerätedateien Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf gefundene Geräte. Sie können sich die Bootmeldungen später in /var/run/dmesg.boot ansehen. Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen werden, sind zum Beispiel acd0, das erste IDE CD-ROM oder kbd0, die Tastatur. Auf die meisten Geräte wird unter &unix; Systemen über spezielle Gerätedateien im /dev Verzeichnis zugegriffen. Anlegen von Gerätedateien Wenn sie ein neues Gerät zu Ihrem System hinzufügen, oder die Unterstützung für zusätzliche Geräte kompilieren, müssen ein oder mehrere Gerätedateien erstellt werden. <literal>DEVFS</literal> (Gerätedateisystem) Das Gerätedateisystem DEVFS ermöglicht durch den Namensraum des Dateisystems Zugriff auf den Namensraum der Geräte im Kernel. Damit müssen Gerätedateien nicht mehr extra angelegt werden, sondern werden von DEVFS verwaltet. Weitere Informationen finden Sie in &man.devfs.5;. Binärformate Um zu verstehen, warum &os; das Format &man.elf.5; benutzt, müssen Sie zunächst etwas über die drei gegenwärtig dominanten ausführbaren Formate für &unix; Systeme wissen: &man.a.out.5; Das älteste und klassische Objektformat von &unix; Systemen. Es benutzt einen kurzen, kompakten Header mit einer magischen Nummer am Anfang, die oft benutzt wird, um das Format zu charakterisieren (weitere Details finden Sie unter &man.a.out.5;). Es enthält drei geladene Segmente: .text, .data und .bss, sowie eine Symboltabelle und eine Stringtabelle. COFF Das Objektformat von SVR3. Der Header enthält nun eine Sectiontable. Man kann also mit mehr als nur den Sections .text, .data und .bss arbeiten. &man.elf.5; Der Nachfolger von COFF. Kennzeichnend sind mehrere Sections und mögliche 32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil: ELF wurde auch unter der Annahme entworfen, dass es nur eine ABI (Application Binary Interface) pro Systemarchitektur geben wird. Tatsächlich ist diese Annahme falsch – nicht einmal für die kommerzielle SYSV-Welt (in der es mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft sie zu. FreeBSD versucht, dieses Problem zu umgehen, indem ein Werkzeug bereitgestellt wird, um ausführbare Dateien im ELF-Format mit Informationen über die ABI zu versehen, zu der sie passen. Weitere Informationen finden Sie in der Manualpage &man.brandelf.1;. FreeBSD kommt aus dem klassischen Lager und verwendete traditionell das Format &man.a.out.5;, eine Technik, die bereits über viele BSD-Releases hinweg eingesetzt und geprüft worden ist. Obwohl es bereits seit einiger Zeit möglich war, auf einem FreeBSD-System auch Binaries (und Kernel) im ELF-Format zu erstellen und auszuführen, widersetzte FreeBSD sich anfangs dem Druck, auf ELF als Standardformat umzusteigen. Warum? Nun, als das Linux-Lager die schmerzhafte Umstellung auf ELF durchführte, ging es nicht so sehr darum, dem ausführbaren Format a.out zu entkommen, als dem unflexiblen, auf Sprungtabellen basierten Mechanismus für Shared-Libraries der die Konstruktion von Shared-Libraries für Hersteller und Entwickler gleichermaßen sehr kompliziert machte. Da die verfügbaren ELF-Werkzeuge eine Lösung für das Problem mit den Shared-Libraries anboten und ohnehin generell als ein Schritt vorwärts angesehen wurden, wurde der Aufwand für die Umstellung als notwendig akzeptiert und die Umstellung wurde durchgeführt. Unter FreeBSD ist der Mechanismus von Shared-Libraries enger an den Stil des Shared-Library-Mechanismus von Suns &sunos; angelehnt und von daher sehr einfach zu verwenden. Ja, aber warum gibt es so viele unterschiedliche Formate? In alter, grauer Vorzeit gab es simple Hardware. Diese simple Hardware unterstützte ein einfaches, kleines System. a.out war absolut passend für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11) darzustellen. Als &unix; von diesem simplen System portiert wurde, wurde auch das a.out-Format beibehalten, weil es für die frühen Portierungen auf Architekturen wie den Motorola 68000 und VAX ausreichte. Dann dachte sich ein schlauer Hardware-Ingenieur, dass, wenn er Software zwingen könnte, einige Tricks anzustellen, es ihm möglich wäre, ein paar Gatter im Design zu sparen, und seinen CPU-Kern schneller zu machen. Obgleich es dazu gebracht wurde, mit dieser neuen Art von Hardware (heute als RISC bekannt) zu arbeiten, war a.out für diese Hardware schlecht geeignet. Deshalb wurden viele neue Formate entwickelt, um eine bessere Leistung auf dieser Hardware zu erreichen, als mit dem begrenzten, simplen a.out-Format. Dinge wie COFF, ECOFF und einige andere obskure wurden erdacht und ihre Grenzen untersucht, bevor die Dinge sich in Richtung ELF entwickelten. Hinzu kam, dass die Größe von Programmen gewaltig wurde und Festplatten sowie physikalischer Speicher immer noch relativ klein waren. Also wurde das Konzept von Shared-Libraries geboren. Das VM-System wurde auch immer fortgeschrittener. Obwohl bei jedem dieser Fortschritte das a.out-Format benutzt worden ist, wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr gedehnt. Zusätzlich wollte man Dinge dynamisch zur Ausführungszeit laden, oder Teile ihres Programms nach der Initialisierung wegwerfen, um Hauptspeicher oder Swap-Speicher zu sparen. Programmiersprachen wurden immer fortschrittlicher und man wollte, dass Code automatisch vor der main-Funktion aufgerufen wird. Das a.out-Format wurde oft überarbeitet, um alle diese Dinge zu ermöglichen und sie funktionierten auch für einige Zeit. a.out konnte diese Probleme nicht ohne ein ständiges Ansteigen eines Overheads im Code und in der Komplexität handhaben. Obwohl ELF viele dieser Probleme löste, wäre es sehr aufwändig, ein System umzustellen, das im Grunde genommen funktionierte. Also musste ELF warten, bis es aufwändiger war, bei a.out zu bleiben, als zu ELF überzugehen. Im Laufe der Zeit haben sich die Erstellungswerkzeuge, von denen FreeBSD seine Erstellungswerkzeuge abgeleitet hat (speziell der Assembler und der Loader), in zwei parallele Zweige entwickelt. Im FreeBSD-Zweig wurden Shared-Libraries hinzugefügt und einige Fehler behoben. Das GNU-Team, das diese Programme ursprünglich geschrieben hat, hat sie umgeschrieben und eine simplere Unterstützung zur Erstellung von Cross-Compilern durch beliebiges Einschalten verschiedener Formate usw. hinzugefügt. Viele Leute wollten Cross-Compiler für FreeBSD erstellen, aber sie hatten kein Glück, denn FreeBSD's ältere Sourcen für as und ld waren hierzu nicht geeignet. Die neuen GNU-Werkzeuge (binutils) unterstützen Cross-Compilierung, ELF, Shared-Libraries, C++-Erweiterungen und mehr. Weiterhin geben viele Hersteller ELF-Binaries heraus und es ist gut, wenn FreeBSD sie ausführen kann. ELF ist ausdrucksfähiger als a.out und gestattet eine bessere Erweiterbarkeit des Basissystems. Die ELF-Werkzeuge werden besser gewartet und bieten Unterstützung von Cross-Compilierung, was für viele Leute wichtig ist. ELF mag etwas langsamer sein, als a.out, aber zu versuchen, das zu messen, könnte schwierig werden. Es gibt unzählige Details, in denen sich die beiden Formate unterscheiden, wie sie Pages abbilden, Initialisierungscode handhaben usw. Keins davon ist sehr wichtig, aber es sind Unterschiede. Irgendwann wird die Unterstützung für Programme im a.out-Format aus dem GENERIC-Kernel entfernt werden. Wenn es dann keinen oder kaum noch Bedarf für die Unterstützung dieses Formates gibt, werden die entsprechenden Routinen ganz entfernt werden. Weitere Informationen Manualpages Manualpages Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Manualpages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach: &prompt.user; man Kommando Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein: &prompt.user; man ls Die Online-Dokumentation ist in nummerierte Sektionen unterteilt: Benutzerkommandos. Systemaufrufe und Fehlernummern. Funktionen der C Bibliothek. Gerätetreiber. Dateiformate. Spiele und andere Unterhaltung. Verschiedene Informationen. Systemverwaltung und -Kommandos. Kernel Entwickler. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben: &prompt.user; man 1 chmod Dies wird Ihnen die Manualpage für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich &man.chmod.1; auf das Benutzerkommando chmod und mit &man.chmod.2; ist der Systemaufruf gemeint. Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können mit man nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter benutzen: &prompt.user; man -k mail Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort mail enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen. Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann rufen Sie doch einfach das folgende Kommando auf: &prompt.user; cd /usr/bin &prompt.user; man -f * Dasselbe erreichen Sie durch Eingabe von: &prompt.user; cd /usr/bin &prompt.user; whatis * GNU Info Dateien FreeBSD enthält viele Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen. Um das Kommando &man.info.1; zu benutzen, geben Sie einfach ein: &prompt.user; info Eine kurze Einführung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?.
diff --git a/de_DE.ISO8859-1/books/handbook/book.sgml b/de_DE.ISO8859-1/books/handbook/book.sgml index 57ca25aab4..bfa6a487de 100644 --- a/de_DE.ISO8859-1/books/handbook/book.sgml +++ b/de_DE.ISO8859-1/books/handbook/book.sgml @@ -1,360 +1,361 @@ %books.ent; %chapters; %txtfiles; %pgpkeys; ]> Das &os;-Handbuch The FreeBSD German Documentation Project
de-bsd-translators@de.FreeBSD.org
Februar 1999 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 + 2008 The FreeBSD German Documentation Project &bookinfo.legalnotice; &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.3ware; &tm-attrib.arm; &tm-attrib.adaptec; &tm-attrib.adobe; &tm-attrib.apple; &tm-attrib.corel; &tm-attrib.creative; &tm-attrib.cvsup; &tm-attrib.heidelberger; &tm-attrib.ibm; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.intuit; &tm-attrib.linux; &tm-attrib.lsilogic; &tm-attrib.m-systems; &tm-attrib.macromedia; &tm-attrib.microsoft; &tm-attrib.netscape; &tm-attrib.nexthop; &tm-attrib.opengroup; &tm-attrib.oracle; &tm-attrib.powerquest; &tm-attrib.realnetworks; &tm-attrib.redhat; &tm-attrib.sap; &tm-attrib.sun; &tm-attrib.symantec; &tm-attrib.themathworks; &tm-attrib.thomson; &tm-attrib.usrobotics; &tm-attrib.vmware; &tm-attrib.waterloomaple; &tm-attrib.wolframresearch; &tm-attrib.xfree86; &tm-attrib.xiph; &tm-attrib.general; Willkommen bei &os;! Dieses Handbuch beschreibt die Installation und den täglichen Umgang mit &os; &rel2.current;-RELEASE und &os; &rel.current;-RELEASE. Das Handbuch ist jederzeit unter Bearbeitung und das Ergebnis der Arbeit vieler Einzelpersonen. Dies kann dazu führen, dass bestimmte Bereiche nicht mehr aktuell sind und auf den neuesten Stand gebracht werden müssen. Wenn Sie dabei mithelfen möchten, senden Sie bitte eine E-Mail an die Mailingliste &a.de.translators;. Die aktuelle Version des Handbuchs ist immer auf dem &os;-Webserver verfügbar und kann in verschiedenen Formaten und in komprimierter Form vom &os;-FTP-Server oder einem der vielen Spiegel herunter geladen werden (ältere Versionen finden Sie hingegen unter ). Vielleicht möchten Sie das Handbuch aber auch durchsuchen.
&chap.preface; Erste Schritte Dieser Teil des &os;-Handbuchs richtet sich an Benutzer und Administratoren für die &os; neu ist. Diese Kapitel geben Ihnen eine Einführung in &os;, geleiten Sie durch den Installationsprozess, erklären Ihnen die Grundlagen von &unix; Systemen, zeigen Ihnen, wie Sie die Fülle der erhältlichen Anwendungen Dritter installieren und führen Sie in X, der Benutzeroberfläche von &unix; Systemen ein. Es wird gezeigt, wie Sie den Desktop konfigurieren, um effektiver arbeiten zu können. Wir haben uns bemüht, Referenzen auf weiter vorne liegende Textteile auf ein Minimum zu beschränken, so dass Sie diesen Teil des Handbuchs ohne viel Blättern durcharbeiten können. Oft benutzte Funktionen Nach den Grundlagen beschäftigt sich das &os;-Handbuch mit oft benutzten Funktionen von &os;. Die Kapitel behandeln die nachstehenden Themen: Zeigen Ihnen beliebte und nützliche Werkzeuge wie Browser, Büroanwendungen und Programme zum Anzeigen von Dokumenten. Zeigen Ihnen Multimedia-Werkzeuge für &os;. Erklären den Bau eines angepassten &os;-Kernels, der die Systemfunktionen erweitert. Beschreiben ausführlich das Drucksystem, sowohl für direkt angeschlossene Drucker als auch für Netzwerkdrucker. Erläutern, wie Sie Linux-Anwendungen auf einem &os;-System laufen lassen. Damit Sie einige Kapitel verstehen, sollten Sie vorher andere Kapitel gelesen haben. Die Übersicht zu jedem Kapitel zählt die Voraussetzungen für das erolgreiche Durcharbeiten des Kapitels auf. Systemadministration Die restlichen Kapitel behandeln alle Aspekte der &os; Systemadministration. Am Anfang jedes Kapitels finden Sie eine Zusammenfassung, die beschreibt, was Sie nach dem Durcharbeiten des Kapitels gelernt haben. Weiterhin werden die Voraussetzungen beschrieben, die für das Durcharbeiten des Kapitels erforderlich sind. Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin benötigen. Sie brauchen Sie nicht in einer bestimmten Reihenfolge zu lesen, noch müssen Sie die Kapitel lesen, bevor Sie anfangen, &os; zu benutzen. Netzwerke &os; ist eins der meist benutzten Betriebssysteme für leistungsfähige Netzwerkserver. Die Kapitel in diesem Teil behandeln die nachstehenden Themen: Serielle Datenübertragung PPP und PPP over Ethernet Electronic-Mail Den Betrieb von Netzwerkdiensten Firewalls Weiterführende Netzwerkthemen Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin benötigen. Sie brauchen Sie nicht in einer bestimmten Reihenfolge zu lesen, noch müssen Sie die Kapitel lesen, bevor Sie anfangen, &os; zu benutzen. Anhang &chap.colophon;
diff --git a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml b/de_DE.ISO8859-1/books/handbook/config/chapter.sgml index 1da1340dcd..9ac726c94c 100644 --- a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/config/chapter.sgml @@ -1,3527 +1,3527 @@ Chern Lee Geschrieben von Mike Smith Nach einem Tutorium von Matt Dillon Basiert ebenfalls auf tuning(7) von Martin Heinen Übersetzt von Konfiguration und Tuning Übersicht System-Konfiguration System-Optimierung Ein korrekt konfiguriertes System kann die Arbeit, die bei der zukünftigen Pflege und bei Migrationen des Systems entsteht, erheblich reduzieren. Dieses Kapitel beschreibt die Konfiguration von &os; sowie Maßnahmen zur Leistungssteigerung von &os;-Systemen. Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen: Wie Sie effizient Dateisysteme und Swap-Partitionen auf Ihrer Festplatte einrichten. Die Grundlagen der Konfiguration mit rc.conf und des Systems zum Starten von Anwendungen in /usr/local/etc/rc.d. Wie Sie Netzwerkkarten konfigurieren und testen. Wie Sie virtuelle Hosts und Netzwerkgeräte konfigurieren. Wie Sie die verschiedenen Konfigurationsdateien in /etc benutzen. Wie Sie mit sysctl-Variablen &os; einstellen können. Wie Sie die Platten-Performance einstellen und Kernel-Parameter modifizieren können. Bevor Sie dieses Kapitel lesen, sollten Sie die Grundlagen von &unix; und &os; () verstehen. Damit vertraut sein, wie Sie einen Kernel konfigurieren und kompilieren (). Vorbereitende Konfiguration Layout von Partitionen Layout von Partitionen /etc /var /usr Partitionen Wenn Sie Dateisysteme mit &man.bsdlabel.8; oder &man.sysinstall.8; anlegen, sollten Sie beachten, dass Festplatten auf Daten in den äußeren Spuren schneller zugreifen können als auf Daten in den inneren Spuren. Daher sollten die kleineren oft benutzten Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition, an den äußeren Rand der Platte gelegt werden. Die größeren Partitionen wie /usr sollten in die inneren Bereiche gelegt werden. Es empfiehlt sich, die Partitionen in einer ähnlichen Reihenfolge wie Root-Partition, Swap, /var und /usr anzulegen. Die Größe von /var ist abhängig vom Zweck der Maschine. /var enthält hauptsächlich Postfächer, den Spoolbereich zum Drucken und Logdateien. Abhängig von der Anzahl der Systembenutzer und der Aufbewahrungszeit für Logdateien, können gerade die Postfächer und Logdateien zu ungeahnten Größen wachsen. Oft werden Sie mit weniger als einem Gigabyte auskommen, doch beachten Sie, dass /var/tmp für Pakete ausreichend dimensioniert ist. Die /usr-Partition enthält den Hauptteil des Systems, die Ports-Sammlung (empfohlen) und die Quellen (optional). Im Laufe der Installation haben Sie die Möglichkeit, die Quellen und die Ports-Sammlung gleich mit zu installieren. Für die /usr-Partition sollten Sie mindestens zwei Gigabyte vorsehen. Wenn Sie die Größe der Partitionen festlegen, beachten Sie bitte das Wachstum Ihres Systems. Wenn Sie den Platz auf einer Partition vollständig aufgebraucht haben, eine andere Partition aber kaum benutzen, kann die Handhabung des Systems schwierig werden. Die automatische Partitionierung von &man.sysinstall.8; mit Auto-defaults legt manchmal zu kleine / und /var-Partition an. Partitionieren Sie weise und großzügig. Swap Partition Swap-Partition Größe Swap-Partition Als Daumenregel sollten Sie doppelt soviel Speicher für die Swap-Partition vorsehen, als Sie Hauptspeicher haben. Verfügt die Maschine beispielsweise über 128 Megabyte Hauptspeicher, sollten Sie 256 Megabyte für den Swap-Bereich vorsehen. Systeme mit weniger Speicher werden wahrscheinlich mit viel mehr Swap mehr leisten. Es wird nicht empfohlen, weniger als 256 Megabyte Swap einzurichten. Außerdem sollten Sie künftige Speichererweiterungen beachten, wenn Sie die Swap-Partition einrichten. Die VM-Paging-Algorithmen im Kernel sind so eingestellt, dass Sie am besten laufen, wenn die Swap-Partition mindestens doppelt so groß wie der Hauptspeicher ist. Zu wenig Swap kann zu einer Leistungsverminderung im VM page scanning Code führen, sowie Probleme verursachen, wenn Sie später mehr Speicher in Ihre Maschine bauen. Auf größeren Systemen mit mehreren SCSI-Laufwerken (oder mehreren IDE-Laufwerken an unterschiedlichen Controllern) empfehlen wir Ihnen, Swap-Bereiche auf bis zu vier Laufwerken einzurichten. Diese Swap-Partitionen sollten ungefähr dieselbe Größe haben. Der Kernel kann zwar mit beliebigen Größen umgehen, aber die internen Datenstrukturen skalieren bis zur vierfachen Größe der größten Partition. Ungefähr gleich große Swap-Partitionen erlauben es dem Kernel, den Swap-Bereich optimal über die Laufwerke zu verteilen. Große Swap-Bereiche, auch wenn sie nicht oft gebraucht werden, sind nützlich, da sich ein speicherfressendes Programm unter Umständen auch ohne einen Neustart des Systems beenden lässt. Warum partitionieren? Gegen eine einzelne Partition sprechen mehrere Gründe. Jede Partition hat im Betrieb unterschiedliche Eigenschaften und die Trennung der Partitionen erlaubt es, die Dateisysteme an diese Eigenschaften anzupassen. Die Root- und /usr-Partitionen weisen meist nur lesende Zugriffe auf, während /var und /var/tmp hauptsächlich beschrieben werden. Indem Sie ein System richtig partitionieren, verhindern Sie, dass eine Fragmentierung in den häufig beschriebenen Partitionen auf die meist nur gelesenen Partitionen übergreift. Wenn Sie die häufig beschriebenen Partitionen an den Rand der Platte, legen, dann wird die I/O-Leistung diesen Partitionen steigen. Die I/O-Leistung ist natürlich auch für große Partitionen wichtig, doch erzielen Sie eine größere Leistungssteigerung, wenn Sie /var an den Rand der Platte legen. Schließlich sollten Sie noch die Stabilität des Systems beachten. Eine kleine Root-Partition, auf die meist nur lesend zugegriffen wird, überlebt einen schlimmen Absturz wahrscheinlich eher als eine große Partition. Basiskonfiguration rc-Dateien rc.conf Informationen zur Systemkonfiguration sind hauptsächlich in /etc/rc.conf, die meist beim Start des Systems verwendet wird, abgelegt. Der Name der Datei zeigt ihren Zweck an: Sie enthält die Konfigurationen für die rc* Dateien. In rc.conf werden die Vorgabewerte aus /etc/defaults/rc.conf überschrieben. Die Vorgabedatei sollte nicht nach /etc kopiert werden, da sie die Vorgabewerte und keine Beispiele enthält. Jede systemspezifische Änderung wird in rc.conf vorgenommen. Um den administrativen Aufwand gering zu halten, existieren in geclusterten Anwendungen mehrere Strategien, globale Konfigurationen von systemspezifischen Konfigurationen zu trennen. Der empfohlene Weg hält die globale Konfiguration in einer separaten Datei z.B. rc.conf.site. Diese Datei wird dann in /etc/rc.conf, die nur systemspezifische Informationen enthält, eingebunden. Da rc.conf von &man.sh.1; gelesen wird, ist das einfach zu erreichen: rc.conf: . /etc/rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" rc.conf.site kann dann auf jedes System mit rsync verteilt werden, rc.conf bleibt dabei systemspezifisch. Bei einem Upgrade des Systems mit &man.sysinstall.8; oder make world wird rc.conf nicht überschrieben, so dass die Systemkonfiguration erhalten bleibt. Konfiguration von Anwendungen Installierte Anwendungen haben typischerweise eigene Konfigurationsdateien, die eine eigene Syntax verwenden. Damit diese Dateien leicht von der Paketverwaltung gefunden und verwaltet werden können, ist es wichtig, sie vom Basissystem zu trennen. /usr/local/etc Für gewöhnlich werden diese Dateien in /usr/local/etc installiert. Besitzt eine Anwendung viele Konfigurationsdateien, werden diese in einem separaten Unterverzeichnis abgelegt. Wenn ein Port oder ein Paket installiert wird, werden normalerweise auch Beispiele für die Konfigurationsdateien installiert. Diese erkennt man gewöhnlich an dem Suffix .default. Wenn keine Konfigurationsdateien für eine Anwendung existieren, werden sie durch Kopieren der .default Dateien erstellt. Als Beispiel sei /usr/local/etc/apache gezeigt: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default Anhand der Dateigröße erkennen Sie, dass sich nur srm.conf geändert hat. Eine spätere Aktualisierung des Apache-Ports überschreibt diese Datei nicht. Tom Rhodes Beigetragen von Start von Diensten Dienste Viele Benutzer installieren Software Dritter auf &os; mithilfe der Ports-Sammlung. Häufig soll die Software bei einem Systemstart mitgestartet werden. Beispielsweise sollen die Dienste mail/postfix oder www/apache13 nach einem Systemstart laufen. Dieser Abschnitt stellt die Startprozeduren für Software Dritter vor. Unter &os; werden die meisten der im System enthaltenen Dienste wie &man.cron.8; mithilfe von Systemskripten gestartet. Diese Skripten sind abhängig von der &os;- oder Hersteller-Version. Allerdings kann ein Dienst mit einfachen Skripten gestartet werden. Vor der Einführung von rc.d legten Anwendungen einfach ein Startskript im Verzeichnis /usr/local/etc/rc.d ab. Das Startskript wurde von den Systemskripten in den letzten Phasen des Systemstarts ausgeführt. Obwohl bereits viele Startskripten auf das neue rc.d-System umgestellt wurden, gibt es noch Anwendungen, die ein Startskript im eben erwähnten Verzeichnis benötigen. In diesem Fall weisen die Skripte kleinere Unterschiede auf. Vor &os; 5.1 wurde der alte Stil verwendet, obwohl in den meisten Fällen auch der neue Stil problemlos funktionieren würde. Die Startskripten müssen das Suffix .sh tragen und ausführbar sein. Sie machen ein Skript ausführbar, indem Sie mit chmod die Rechte 755 vergeben. Das Skript sollte die Optionen und akzeptieren, um die Anwendung zu starten und zu stoppen. Ein einfaches Startskript sieht wie folgt aus: #!/bin/sh echo -n ' utility' case "$1" in start) /usr/local/bin/utility ;; stop) kill -9 `cat /var/run/utility.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Das Skript akzeptiert die Optionen start und stop zum Starten und Stoppen einer Anwendung mit Namen utility. Manuell wird die Anwendung mit dem nachstehenden Kommando gestartet: &prompt.root; /usr/local/etc/rc.d/utility.sh start Obwohl nicht jede Anwendung die Zeile in rc.conf benötigt, akzeptieren immer mehr Ports diese Konfiguration. Prüfen Sie die Ausgaben während der Installation einer Anwendung, um herauszufinden, wie die Anwendung gestartet wird. Einige Anwendungen stellen Startskripten bereit, die das rc.d-System (wird im nächsten Abschnitt besprochen) verwenden. Dienste über das <filename>rc.d</filename>-System starten Mit rc.d lässt sich der Start von Anwendungen besser steuern als mit den vorher besprochenen Startskripten. Mit den im Abschnitt rc.d besprochenen Schlüsselwörtern können Anwendungen in einer bestimmten Reihenfolge (zum Beispiel nach DNS) gestartet werden und Optionen können in rc.conf statt fest im Startskript der Anwendung festgelegt werden. Ein einfaches Startskript sieht wie folgt aus: #!/bin/sh # # PROVIDE: utility # REQUIRE: DAEMON # KEYWORD: shutdown # # DO NOT CHANGE THESE DEFAULT VALUES HERE # SET THEM IN THE /etc/rc.conf FILE # utility_enable=${utility_enable-"NO"} utility_flags=${utility_flags-""} utility_pidfile=${utility_pidfile-"/var/run/utility.pid"} . /etc/rc.subr name="utility" rcvar=`set_rcvar` command="/usr/local/sbin/utility" load_rc_config $name pidfile="${utility_pidfile}" start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}" run_rc_command "$1" Dieses Skript stellt sicher, dass utility nach den daemon-Diensten gestartet wird. Es stellt auch eine Methode bereit, die Prozess-ID (PID) der Anwendung in einer Datei zu speichern. In /etc/rc.conf könnte für diese Anwendung die folgende Zeile stehen: utility_enable="YES" - Die neue Methode erleichtert den Umgang mit + Die Methode erleichtert den Umgang mit Kommandozeilenargumenten, bindet Funktionen aus /etc/rc.subr ein, ist kompatibel zum Werkzeug &man.rcorder.8; und lässt sich über rc.conf leichter konfigurieren. Andere Arten, um Dienste zu starten Dienste wie POP3 oder IMAP können über den &man.inetd.8; gestartet werden. Nach der Installation der Anwendung aus der Ports-Sammlung muss eine Konfigurationszeile in der Datei /etc/inetd.conf hinzugefügt oder aktiviert werden. Der Abschnitt beschreibt den inetd und dessen Konfiguration. Systemdienste können auch mit &man.cron.8; gestartet werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil &man.cron.8; die Prozesse unter dem Eigentümer der crontab startet, ist es möglich, dass Dienste von nicht-root Benutzern gestartet und gepflegt werden können. Dies nutzt eine Eigenschaft von &man.cron.8;: Für die Zeitangabe kann @reboot eingesetzt werden. Damit wird das Kommando gestartet, wenn &man.cron.8; kurz nach dem Systemboot gestartet wird. Tom Rhodes Beigetragen von Programme mit <command>cron</command> starten cron Ein sehr nützliches Werkzeug von &os; ist &man.cron.8;. cron läuft im Hintergrund und überprüft fortlaufend die Datei /etc/crontab. Beim Start sucht cron neue crontab-Dateien im Verzeichnis /var/cron/tabs. In den crontab-Dateien wird festgelegt, welche Programme zu welchem Zeitpunkt laufen sollen. Das Werkzeug cron verwendet zwei verschiedene Konfigurationsdateien: Die System-crontab und die Benutzer-crontab. Der einzige Unterschied zwischen beiden Formaten ist das sechste Feld. In der System-crontab gibt das sechste Feld das Konto an, unter dem ein Kommando läuft. Aus der System-crontab können daher Kommandos unter beliebigen Konten gestartet werden. In der Benutzer-crontab gibt das sechste Feld das auszuführende Kommando an. Alle Kommandos laufen unter dem Konto, unter dem die crontab erstellt wurde (ein wichtiges Sicherheitsmerkmal). Benutzer können mit Benutzer-crontabs ohne root-Rechte Befehle terminieren. Die Kommandos in Benutzer-crontabs laufen unter dem Benutzer, der die crontab erstellt hat. Der Benutzer root kann, wie jeder andere Benutzer, eine Benutzer-crontab besitzen. Die Benutzer-crontab von root ist nicht mit der Datei /etc/crontab, der System-crontab, zu verwechseln. Normalerweise besitzt root, wegen der Existenz der System-crontab, keine eigene Benutzer-crontab. Der folgende Auszug aus der System-crontab /etc/crontab zeigt den Aufbau einer crontab-Datei: # /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # # #minute hour mday month wday who command # # */5 * * * * root /usr/libexec/atrun Das Zeichen # leitet, wie in den meisten Konfigurationsdateien, einen Kommentar ein. Benutzen Sie Kommentare, um die Funktion eines Eintrags zu erläutern. Kommentare müssen in einer extra Zeile stehen. Sie können nicht in derselben Zeile wie ein Kommando stehen, da sie sonst Teil des Kommandos wären. Leerzeilen in dieser Datei werden ignoriert. Umgebungsvariablen werden mit dem Gleichheits-Zeichen (=) festgelegt. Im Beispiel werden die Variablen SHELL, PATH und HOME definiert. Wenn die Variable SHELL nicht definiert wird, benutzt cron die Shell sh. Wird die Variable PATH nicht gesetzt, müssen alle Pfadangaben absolut sein, da es keinen Vorgabewert für PATH gibt. Der Vorgabewert für HOME ist das Heimatverzeichnis des Accounts, dem die crontab gehört. In dieser Zeile werden sieben Felder beschrieben: minute, hour, mday, month, wday, who und command. Die ersten Felder legen den Zeitpunkt fest, an dem ein Kommando laufen soll. Das Feld minute legt die Minute fest, das Feld hour die Stunde, das Feld mday den Tag des Monats. Im Feld month wird der Monat und im Feld wday der Wochentag festgelegt. Alle Felder müssen numerische Werte enthalten und die Zeitangaben sind im 24-Stunden-Format. Das Feld who gibt es nur in der Datei /etc/crontab und gibt den Account an, unter dem das Kommando laufen soll. In den crontab-Dateien einzelner Accounts existiert dieses Feld nicht. Im letzten Feld wird schließlich das auszuführende Kommando angegeben. Diese Zeile definiert die Zeitpunkte an denen das Kommando atrun laufen soll. Beachten Sie die Zeichenfolge */5 gefolgt von mehreren *-Zeichen. Das Zeichen * ist ein Platzhalter und steht für jede mögliche Zeit. Diese Zeile führt das Kommando atrun unter dem root-Account alle fünf Minuten aus. Mehr über das Kommando atrun erfahren Sie in der Hilfeseite &man.atrun.8;. Bei den Kommandos können beliebige Optionen angegeben werden. Wenn das Kommando zu lang ist und auf der nächsten Zeile fortgesetzt werden soll, muss am Ende der Zeile das Fortsetzungszeichen (\) angegeben werden. Bis auf das sechste Feld, das den Account angibt, sieht jede crontab-Datei so wie das Beispiel aus. Das sechste Feld existiert nur in der Systemdatei /etc/crontab. In den restlichen crontab-Dateien fehlt dieses Feld. <filename>crontab</filename> installieren Die nachstehende Prozedur gilt nur für Benutzer-crontabs. Die System-crontab können Sie einfach mit Ihrem Lieblingseditor editieren. Das Werkzeug cron bemerkt, dass sich die Datei geändert hat und wird die neue Version benutzen. Lesen Sie bitte auch die FAQ zur Meldung root: not found. Eine Benutzer-crontab, beispielsweise die Datei crontab, können Sie mit jedem Editor erstellen. Die Benutzer-crontab installieren Sie mit dem nachstehenden Befehl: &prompt.root; crontab crontab Das Argument zum Befehl crontab ist die vorher erstellte Datei crontab. Der Befehl crontab -l zeigt die installierte crontab-Datei an. Benutzer, die eine eigene crontab-Datei ohne Vorlage erstellen wollen, können den Befehl crontab -e verwenden. Dieser Befehl ruft einen Editor auf und installiert beim Verlassen des Editors die crontab-Datei. Wollen Sie die installierte Benutzer-crontab entfernen, rufen Sie den Befehl crontab mit der Option auf. Tom Rhodes Beigetragen von Das rc-System für Systemdienste 2002 wurde das rc.d-System von NetBSD zum Start von Systemdiensten in &os; integriert. Die zu diesem System gehörenden Dateien sind im Verzeichnis /etc/rc.d abgelegt. Die Skripten in diesem Verzeichnis akzeptieren die Optionen , und . Beispielsweise kann &man.sshd.8; mit dem nachstehenden Kommando neu gestartet werden: &prompt.root; /etc/rc.d/sshd restart Analog können Sie andere Dienste starten und stoppen. Normalerweise werden die Dienste beim Systemstart über Einträge in der Datei &man.rc.conf.5; automatisch gestartet. Der Network Address Translation Dæmon wird zum Beispiel mit dem folgenden Eintrag in /etc/rc.conf aktiviert: natd_enable="YES" Wenn dort bereits die Zeile existiert, ändern Sie einfach in . Die rc-Skripten starten, wie unten beschrieben, auch abhängige Dienste. Da das rcNG-System primär zum automatischen Starten und Stoppen von Systemdiensten dient, funktionieren die Optionen , und nur, wenn die entsprechenden Variablen in /etc/rc.conf gesetzt sind. Beispielsweise funktioniert das Kommando sshd restart nur dann, wenn in /etc/rc.conf die Variable sshd_enable auf gesetzt wurde. Wenn Sie die Optionen , oder unabhängig von den Einstellungen in /etc/rc.conf benutzen wollen, müssen Sie den Optionen mit dem Präfix one verwenden. Um beispielsweise sshd unabhängig von den Einstellungen in /etc/rc.conf neu zu starten, benutzen Sie das nachstehende Kommando: &prompt.root; /etc/rc.d/sshd onerestart Ob ein Dienst in /etc/rc.conf aktiviert ist, können Sie leicht herausfinden, indem Sie das entsprechende rc.d-Skript mit der Option aufrufen. Ein Administrator kann beispielsweise wie folgt prüfen, ob der sshd-Dienst in /etc/rc.conf aktiviert ist: &prompt.root; /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES Die zweite Zeile (# sshd) wird vom Kommando sshd ausgegeben; sie kennzeichnet nicht die Eingabeaufforderung von root. Ob ein Dienst läuft, kann mit der Option abgefragt werden. Das folgende Kommando überprüft, ob der sshd auch wirklich gestartet wurde: &prompt.root; /etc/rc.d/sshd status sshd is running as pid 433. Einige Dienste können über die Option neu initialisiert werden. Dazu wird dem Dienst über ein Signal mitgeteilt, dass er seine Konfigurationsdateien neu einlesen soll. Oft wird dazu das Signal SIGHUP verwendet. Beachten Sie aber, dass nicht alle Dienste diese Option unterstützen. Die meisten Systemdienste werden beim Systemstart vom rc.d-System gestartet. Zum Beispiel aktiviert das Skript bgfsck die Prüfung von Dateisystemen im Hintergrund. Das Skript gibt die folgende Meldung aus, wenn es gestartet wird: Starting background file system checks in 60 seconds. Viele Systemdienste hängen von anderen Diensten ab. NIS und andere RPC-basierende Systeme hängen beispielsweise von dem rpcbind-Dienst (portmapper) ab. Im Kopf der Startskripten befinden sich die Informationen über Abhängigkeiten von anderen Diensten und weitere Metadaten. Mithilfe dieser Daten bestimmt das Programm &man.rcorder.8; beim Systemstart die Startreihenfolge der Dienste. Folgende Schlüsselwörter werden im Kopf der Startskripten verwendet: PROVIDE: Gibt die Namen der Dienste an, die mit dieser Datei zur Verfügung gestellt werden. REQUIRE: Gibt die Namen der Dienste an, von denen dieser Dienst abhängt. Diese Datei wird nach den angegebenen Diensten ausgeführt. BEFORE: Zählt Dienste auf, die auf diesen Dienst angewiesen sind. Diese Datei wird vor den angegebenen Diensten ausgeführt. Mit diesem System kann ein Administrator den Start von Systemdiensten einfach steuern, ohne mit den Schwierigkeiten des runlevel-Systems anderer &unix; Systeme kämpfen zu müssen. Weitere Informationen über das rc.d-System finden sich in den Manualpages zu &man.rc.8; sowie &man.rc.subr.8;. Wenn Sie Ihre eigenen rc.d-Skripte schreiben wollen, sollten Sie den Artikel Practical rc.d scripting in BSD lesen. Marc Fonvieille Beigetragen von Einrichten von Netzwerkkarten Netzwerkkarten einrichten Ein Rechner ohne Netzanschluss ist heute nicht mehr vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu den alltäglichen Aufgaben eines &os; Administrators. Bestimmen des richtigen Treibers Netzwerkkarten Treiber Bevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen, wissen welchen Chip die Karte benutzt und bestimmen, ob es sich um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der unterstützten PCI- und ISA-Karten finden Sie in der Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre Karte dort aufgeführt ist. Wenn Sie wissen, dass Ihre Karte unterstützt wird, müssen Sie den Treiber für Ihre Karte bestimmen. /usr/src/sys/conf/NOTES und /usr/src/sys/arch/conf/NOTES enthalten eine Liste der verfügbaren Treiber mit Informationen zu den unterstützten Chipsätzen und Karten. Wenn Sie sich nicht sicher sind, ob Sie den richtigen Treiber ausgewählt haben, lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält weitere Informationen über die unterstützten Geräte und macht auch auf mögliche Probleme aufmerksam. Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie meistens nicht lange nach dem passenden Treiber zu suchen. Die Treiber zu diesen Karten sind schon im GENERIC-Kernel enthalten und die Karte sollte während des Systemstarts erkannt werden: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto Im Beispiel erkennt das System zwei Karten, die den &man.dc.4; Treiber benutzen. Ist der Treiber für Ihre Netzwerkkarte nicht in GENERIC enthalten, müssen Sie den Treiber laden, um die Karte zu benutzen. Sie können den Treiber auf zwei Arten laden: Am einfachsten ist es, das Kernelmodul für Ihre Karte mit &man.kldload.8; zu laden. Allerdings gibt es nicht für alle Karten Kernelmodule; zum Beispiel gibt es keine Kernelmodule für ISA-Karten. Alternativ können Sie den Treiber für die Karte fest in den Kernel einbinden. Schauen Sie sich dazu /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES und die Hilfeseite des Treibers, den Sie in den Kernel einbinden möchten, an. Die Übersetzung des Kernels wird in beschrieben. Wenn Ihre Karte während des Systemstarts vom Kernel (GENERIC) erkannt wurde, müssen Sie den Kernel nicht neu übersetzen. &windows;-NDIS-Treiber einsetzen NDIS NDISulator &windows;-Treiber Microsoft Windows Microsoft Windows Gerätetreiber KLD (kernel loadable object) Leider stellen nach wie vor viele Unternehmen die Spezifikationen ihrer Treiber der Open Source Gemeinde nicht zur Verfügung, weil sie diese Informationen als Geschäftsgeheimnisse betrachten. Daher haben die Entwickler von FreeBSD und anderen Betriebssystemen nur zwei Möglichkeiten. Entweder versuchen sie in einem aufwändigen Prozess den Treiber durch Reverse Engineering nachzubauen, oder sie versuchen, die vorhandenen Binärtreiber der µsoft.windows;-Plattform zu verwenden. Die meisten Entwickler, darunter auch die an FreeBSD beteiligten, haben sich für den zweiten Ansatz entschieden. Bill Paul (wpaul) ist es zu verdanken, dass es seit FreeBSD 5.3-RELEASE eine native Unterstützung der Network Driver Interface Specification (NDIS) gibt. Der FreeBSD NDISulator (auch als Project Evil bekannt) nutzt den binären &windows;-Treiber, indem er diesem vorgibt, unter &windows; zu laufen. Da der &man.ndis.4;-Treiber eine &windows;-Binärdatei nutzt, kann er nur auf &i386;- und amd64-Systemen verwendet werden. Der &man.ndis.4;-Treiber unterstützt primär PCI-, CardBus- sowie PCMCIA-Geräte, USB-Geräte werden hingegen noch nicht unterstützt. Um den NDISulator zu verwenden, benötigen Sie drei Dinge: Die Kernelquellen Den &windowsxp;-Binärtreiber (mit der Erweiterung .SYS) Die Konfigurationsdatei des &windowsxp;-Treibers (mit der Erweiterung .INF) Suchen Sie die Dateien für Ihre Karte. Diese befinden sich meistens auf einer beigelegten CD-ROM, oder können von der Internetseite des Herstellers heruntergeladen werden. In den folgenden Beispielen werden die Dateien W32DRIVER.SYS und W32DRIVER.INF verwendet. Sie können einen &windows;/i386-Treiber nicht unter &os;/amd64 einsetzen, vielmehr benötigen Sie dafür einen &windows;/amd64-Treiber. Als Nächstes kompilieren Sie den binären Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als root &man.ndisgen.8; auf: &prompt.root; ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS &man.ndisgen.8; arbeitet interaktiv, benötigt es weitere Informationen, so fragt es Sie danach. Als Ergebnis erhalten Sie ein Kernelmodul im Arbeitsverzeichnis, das Sie wie folgt laden können: &prompt.root; kldload ./W32DRIVER.ko Neben dem vorhin erzeugten Kernelmodul müssen Sie auch die Kernelmodule ndis.ko und if_ndis.ko laden. Diese Module sollten automatisch geladen werden, wenn Sie ein von &man.ndis.4; abhängiges Modul laden. Wollen Sie die Module hingegen manuell laden, geben Sie die folgenden Befehle ein: &prompt.root; kldload ndis &prompt.root; kldload if_ndis Der erste Befehl lädt dabei den NDIS-Miniport-Treiber, der zweite das tatsächliche Netzwerkgerät. Überprüfen Sie nun die Ausgabe von &man.dmesg.8; auf eventuelle Fehler während des Ladevorgangs. Gab es dabei keine Probleme, sollten Sie eine Ausgabe ähnlich der folgenden erhalten: ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1 ndis0: NDIS API version: 5.0 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps Ab jetzt können Sie mit dem Gerät ndis0 wie mit jeder anderen Gerätedatei (etwa dc0) arbeiten. Wie jedes Kernelmodul können auch die NDIS-Module beim Systemstart automatisch geladen werden. Dazu kopieren Sie das erzeugte Modul (W32DRIVER.ko) in das Verzeichnis /boot/modules. Danach fügen Sie die folgende Zeile in /boot/loader.conf ein: W32DRIVER_load="YES" Konfiguration von Netzwerkkarten Netzwerkkarten einrichten Nachdem der richtige Treiber für die Karte geladen ist, muss die Karte konfiguriert werden. Unter Umständen ist die Karte schon während der Installation mit sysinstall konfiguriert worden. Das nachstehende Kommando zeigt die Konfiguration der Karten eines Systems an: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 In alten Versionen von &os; müssen Sie vielleicht noch auf der Kommandozeile von &man.ifconfig.8; angeben. Hinweise zum Gebrauch von &man.ifconfig.8; entnehmen Sie bitte der Hilfeseite. Beachten Sie, dass in diesem Beispiel die IPv6-Ausgaben (inet6 etc.) ausgelassen wurden. Im Beispiel werden Informationen zu den folgenden Geräten angezeigt: dc0: Der erste Ethernet-Adapter dc1: Der zweite Ethernet-Adapter lp0: Die parallele Schnittstelle lo0: Das Loopback-Gerät tun0: Das von ppp benutzte Tunnel-Gerät Der Name der Netzwerkkarte wird aus dem Namen des Treibers und einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in der die Geräte beim Systemstart erkannt wurden. Die dritte Karte, die den &man.sis.4; Treiber benutzt, würde beispielsweise sis2 heißen. Der Adapter dc0 aus dem Beispiel ist aktiv. Sie erkennen das an den folgenden Hinweisen: UP bedeutet, dass die Karte konfiguriert und aktiv ist. Der Karte wurde die Internet-Adresse (inet) 192.168.1.3 zugewiesen. Die Subnetzmaske ist richtig (0xffffff00 entspricht 255.255.255.0). Die Broadcast-Adresse 192.168.1.255 ist richtig. Die MAC-Adresse der Karte (ether) lautet 00:a0:cc:da:da:da. Die automatische Medienerkennung ist aktiviert (media: Ethernet autoselect (100baseTX <full-duplex>)). Der Adapter dc1 benutzt das Medium 10baseT/UTP. Weitere Informationen über die einstellbaren Medien entnehmen Sie bitte der Hilfeseite des Treibers. Der Verbindungsstatus (status) ist active, das heißt es wurde ein Trägersignal entdeckt. Für dc1 wird status: no carrier angezeigt. Das ist normal, wenn kein Kabel an der Karte angeschlossen ist. Wäre die Karte nicht konfiguriert, würde die Ausgabe von &man.ifconfig.8; so aussehen: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da Sie brauchen die Berechtigungen von root, um Ihre Karte zu konfigurieren. Die Konfiguration kann auf der Kommandozeile mit &man.ifconfig.8; erfolgen, allerdings müsste sie dann nach jedem Neustart wiederholt werden. Dauerhaft wird die Karte in /etc/rc.conf konfiguriert. Öffnen Sie /etc/rc.conf mit Ihrem Lieblingseditor und fügen Sie für jede Karte Ihres Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden die nachstehenden Zeilen eingefügt: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" Ersetzen Sie dc0, dc1 usw. durch die Gerätenamen Ihrer Karten und setzen Sie die richtigen IP-Adressen ein. Die Hilfeseiten des Treibers und &man.ifconfig.8; enthalten weitere Einzelheiten über verfügbare Optionen. Die Syntax von /etc/rc.conf wird in &man.rc.conf.5; erklärt. Wenn Sie das Netz während der Installation konfiguriert haben, existieren vielleicht schon Einträge für Ihre Karten. Überprüfen Sie /etc/rc.conf bevor Sie weitere Zeilen hinzufügen. In /etc/hosts können Sie die Namen und IP-Adressen der Rechner Ihres LANs eintragen. Weitere Informationen entnehmen Sie bitte &man.hosts.5; und /usr/share/examples/etc/hosts. Test und Fehlersuche Nachdem Sie die notwendigen Änderungen in /etc/rc.conf vorgenommen haben, führen Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter konfiguriert und Sie stellen sicher, dass der Start ohne Konfigurationsfehler erfolgt. Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen. Test der Ethernet-Karte Netzwerkkarten testen Mit zwei Tests können Sie prüfen, ob die Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit ping den Adapter selbst und sprechen Sie dann eine andere Maschine im LAN an. Zuerst, der Test des Adapters: &prompt.user; ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms Jetzt versuchen wir, eine andere Maschine im LAN zu erreichen: &prompt.user; ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms Sie können auch den Namen der Maschine anstelle von 192.168.1.2 benutzen, wenn Sie /etc/hosts entsprechend eingerichtet haben. Fehlersuche Netzwerkkarten Fehlersuche Fehler zu beheben, ist immer sehr mühsam. Indem Sie die einfachen Sachen zuerst prüfen, erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert die Firewall? Wird die Netwerkkarte von &os; unterstützt? Lesen Sie immer die Hardware-Informationen des Releases, bevor Sie einen Fehlerbericht einsenden. Aktualisieren Sie Ihre &os;-Version auf -STABLE. Suchen Sie in den Archiven der Mailinglisten oder auf dem Internet nach bekannten Lösungen. Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind, lesen Sie bitte die Hilfeseite &man.tuning.7;. Prüfen Sie auch die Netzwerkkonfiguration, da falsche Einstellungen die Ursache für langsame Verbindungen sein können. Wenn Sie viele device timeout Meldungen in den Systemprotokollen finden, prüfen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und anderen Geräten Ihres Systems gibt. Überprüfen Sie nochmals die Verkabelung. Unter Umständen benötigen Sie eine neue Netzwerkkarte. Wenn Sie in den Systemprotokollen watchdog timeout Fehlermeldungen finden, kontrollieren Sie zuerst die Verkabelung. Überprüfen Sie dann, ob der PCI-Steckplatz der Karte Bus Mastering unterstützt. Auf einigen älteren Motherboards ist das nur für einen Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie in der Dokumentation Ihrer Karte und Ihres Motherboards nach, ob das vielleicht die Ursache des Problems sein könnte. Die Meldung No route to host erscheint, wenn Ihr System ein Paket nicht zustellen kann. Das kann vorkommen weil beispielsweise keine Default-Route gesetzt wurde oder das Netzwerkkabel nicht richtig steckt. Schauen Sie in der Ausgabe von netstat -rn nach, ob eine Route zu dem Zielsystem existiert. Wenn nicht, lesen Sie bitte das . Die Meldung ping: sendto: Permission denied wird oft von einer falsch konfigurierten Firewall verursacht. Wenn keine Regeln definiert wurden, blockiert eine aktivierte Firewall alle Pakete, selbst einfache ping-Pakete. Weitere Informationen erhalten Sie in . Falls die Leistung der Karte schlecht ist, setzen Sie die Medienerkennung von autoselect (automatisch) auf das richtige Medium. In vielen Fällen löst diese Maßnahme Leistungsprobleme. Wenn nicht, prüfen Sie nochmal die Netzwerkeinstellungen und lesen Sie die Hilfeseite &man.tuning.7;. Virtual Hosts virtual hosts IP-Aliase Ein gebräuchlicher Zweck von &os; ist das virtuelle Hosting, bei dem ein Server im Netzwerk wie mehrere Server aussieht. Dies wird dadurch erreicht, dass einem Netzwerkinterface mehrere Netzwerk-Adressen zugewiesen werden. Ein Netzwerkinterface hat eine echte Adresse und kann beliebig viele alias Adressen haben. Die Aliase werden durch entsprechende alias Einträge in /etc/rc.conf festgelegt. Ein alias Eintrag für das Interface fxp0 sieht wie folgt aus: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Beachten Sie, dass die Alias-Einträge mit alias0 anfangen müssen und weiter hochgezählt werden, das heißt _alias1, _alias2, und so weiter. Die Konfiguration der Aliase hört bei der ersten fehlenden Zahl auf. Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch zum Glück einfach. Für jedes Interface muss es eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann eine Netzwerkmaske, die mit 1 gefüllt ist (also 255.255.255.255 oder hexadezimal 0xffffffff). Als Beispiel betrachten wir den Fall, in dem fxp0 mit zwei Netzwerken verbunden ist: dem Netzwerk 10.1.1.0 mit der Netzwerkmaske 255.255.255.0 und dem Netzwerk 202.0.75.16 mit der Netzwerkmaske 255.255.255.240. Das System soll die Adressen 10.1.1.1 bis 10.1.1.5 und 202.0.75.17 bis 202.0.75.20 belegen. Wie eben beschrieben, hat nur die erste Adresse in einem Netzwerk (hier 10.0.1.1 und 202.0.75.17) die richtige Netzwerkmaske. Alle anderen Adressen (10.1.1.2 bis 10.1.1.5 und 202.0.75.18 bis 202.0.75.20) erhalten die Maske 255.255.255.255. Die folgenden Einträge in /etc/rc.conf konfigurieren den Adapter entsprechend dem Beispiel: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Konfigurationsdateien <filename>/etc</filename> Layout Konfigurationsdateien finden sich in einigen Verzeichnissen unter anderem in: /etc Enthält generelle Konfigurationsinformationen, die Daten hier sind systemspezifisch. /etc/defaults Default Versionen der Konfigurationsdateien. /etc/mail Enthält die &man.sendmail.8; Konfiguration und weitere MTA Konfigurationsdateien. /etc/ppp Hier findet sich die Konfiguration für die User- und Kernel-ppp Programme. /etc/namedb Das Vorgabeverzeichnis, in dem Daten von &man.named.8; gehalten werden. Normalerweise werden hier named.conf und Zonendaten abgelegt. /usr/local/etc Installierte Anwendungen legen hier ihre Konfigurationsdateien ab. Dieses Verzeichnis kann Unterverzeichnisse für bestimmte Anwendungen enthalten. /usr/local/etc/rc.d Ort für Start- und Stopskripten installierter Anwendungen. /var/db Automatisch generierte systemspezifische Datenbanken, wie die Paket-Datenbank oder die locate-Datenbank. Hostnamen hostname DNS <filename>/etc/resolv.conf</filename> resolv.conf Wie der &os;-Resolver auf das Internet Domain Name System (DNS) zugreift, wird in /etc/resolv.conf festgelegt. Die gebräuchlichsten Einträge in /etc/resolv.conf sind: nameserver Die IP-Adresse eines Nameservers, den der Resolver abfragen soll. Bis zu drei Server werden in der Reihenfolge, in der sie aufgezählt sind, abgefragt. search Suchliste mit Domain-Namen zum Auflösen von Hostnamen. Die Liste wird normalerweise durch den Domain-Teil des lokalen Hostnamens festgelegt. domain Der lokale Domain-Name. Beispiel für eine typische resolv.conf: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Nur eine der Anweisungen search oder domain sollte benutzt werden. Wenn Sie DHCP benutzen, überschreibt &man.dhclient.8; für gewöhnlich resolv.conf mit den Informationen vom DHCP-Server. <filename>/etc/hosts</filename> hosts /etc/hosts ist eine einfache textbasierte Datenbank, die aus alten Internetzeiten stammt. Zusammen mit DNS und NIS stellt sie eine Abbildung zwischen Namen und IP-Adressen zur Verfügung. Anstatt &man.named.8; zu konfigurieren, können hier lokale Rechner, die über ein LAN verbunden sind, eingetragen werden. Lokale Einträge für gebräuchliche Internet-Adressen in /etc/hosts verhindern die Abfrage eines externen Servers und beschleunigen die Namensauflösung. # $FreeBSD$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). # /etc/hosts hat ein einfaches Format: [Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ... Zum Beispiel: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 Weitere Informationen entnehmen Sie bitte &man.hosts.5;. Konfiguration von Logdateien Logdateien <filename>syslog.conf</filename> syslog.conf syslog.conf ist die Konfigurationsdatei von &man.syslogd.8;. Sie legt fest, welche syslog Meldungen in welche Logdateien geschrieben werden. # $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manpage. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log Weitere Informationen enthält &man.syslog.conf.5;. <filename>newsyslog.conf</filename> newsyslog.conf Die Konfigurationsdatei für &man.newsyslog.8;, das normalerweise von &man.cron.8; aufgerufen wird, ist newsyslog.conf. &man.newsyslog.8; stellt fest, ob Logdateien archiviert oder verschoben werden müssen. So wird logfile nach logfile.0 geschoben und logfile.0 nach logfile.1 usw. Zudem können Logdateien mit &man.gzip.1; komprimiert werden. Die Namen der Logdateien sind dann logfile.0.gz, logfile.1.gz usw. newsyslog.conf legt fest, welche Logdateien wann bearbeitet und wie viele Dateien behalten werden. Logdateien können auf Basis ihrer Größe oder zu einem gewissen Zeitpunkt archiviert bzw. umbenannt werden. # configuration file for newsyslog # $FreeBSD$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z Um mehr zu erfahren, lesen Sie bitte &man.newsyslog.8;. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf sieht ähnlich wie rc.conf aus. Werte werden in der Form Variable=Wert gesetzt. Die angegebenen Werte werden gesetzt, nachdem sich das System bereits im Mehrbenutzermodus befindet. Allerdings lassen sich im Mehrbenutzermodus nicht alle Werte setzen. Um das Protokollieren von fatalen Signalen abzustellen und Benutzer daran zu hindern, von anderen Benutzern gestartete Prozesse zu sehen, können Sie in der Datei sysctl.conf die folgenden Variablen setzen: # Do not log fatal signal exits (e.g. sig 11) kern.logsigexit=0 # Prevent users from seeing information about processes that # are being run under another UID. security.bsd.see_other_uids=0 Einstellungen mit sysctl sysctl Einstellungen mit sysctl Mit &man.sysctl.8; können Sie Änderungen an einem laufenden &os;-System vornehmen. Unter anderem können Optionen des TCP/IP-Stacks oder des virtuellen Speichermanagements verändert werden. Unter der Hand eines erfahrenen Systemadministrators kann dies die Systemperformance erheblich verbessern. Über 500 Variablen können mit &man.sysctl.8; gelesen und gesetzt werden. Der Hauptzweck von &man.sysctl.8; besteht darin, Systemeinstellungen zu lesen und zu verändern. Alle auslesbaren Variablen werden wie folgt angezeigt: &prompt.user; sysctl -a Sie können auch eine spezielle Variable, z.B. kern.maxproc lesen: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Um eine Variable zu setzen, benutzen Sie die Syntax Variable= Wert: &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Mit sysctl können Sie Strings, Zahlen oder Boolean-Werte setzen. Bei Boolean-Werten setzen sie 1 für wahr und 0 für falsch. Wenn Sie Variablen automatisch während des Systemstarts setzen wollen, fügen Sie die Variablen in die Datei /etc/sysctl.conf ein. Weiteres entnehmen Sie bitte der Hilfeseite &man.sysctl.conf.5; und dem . Tom Rhodes Contributed by Schreibgeschützte Variablen Schreibgeschützte sysctl-Variablen können nur während des Systemstarts verändert werden. Beispielsweise hat &man.cardbus.4; auf einigen Laptops Schwierigkeiten, Speicherbereiche zu erkennen. Es treten dann Fehlermeldungen wie die folgende auf: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 Um dieses Problem zu lösen, muss eine schreibgeschützte sysctl-Variable verändert werden. Eine OID kann in der Datei /boot/loader.conf überschrieben werden. Die Datei /boot/defaults/loader.conf enthält Vorgabewwerte für sysctl-Variablen. Das oben erwähnte Problem wird durch die Angabe von in /boot/loader.conf gelöst. Danach sollte &man.cardbus.4; fehlerfrei funktionieren. Tuning von Laufwerken Sysctl Variablen <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable Die Variable vfs.vmiodirenable besitzt in der Voreinstellung den Wert 1. Die Variable kann auf den Wert 0 (ausgeschaltet) oder 1 (angeschaltet) gesetzt werden. Sie steuert, wie Verzeichnisse vom System zwischengespeichert werden. Die meisten Verzeichnisse sind klein und benutzen nur ein einzelnes Fragment, typischerweise 1 kB, im Dateisystem. Im Buffer-Cache verbrauchen sie mit 512 Bytes noch weniger Platz. Ist die Variable ausgeschaltet (auf 0) wird der Buffer-Cache nur eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch wenn das System über sehr viel Speicher verfügt. Ist die Variable aktiviert (auf 1), kann der Buffer-Cache den VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern. Der ganze Speicher steht damit zum Zwischenspeichern von Verzeichnissen zur Verfügung. Der Nachteil bei dieser Vorgehensweise ist, dass zum Zwischenspeichern eines Verzeichnisses mindestens eine physikalische Seite im Speicher, die normalerweise 4 kB groß ist, anstelle von 512 Bytes gebraucht wird. Wir empfehlen, diese Option aktiviert zu lassen, wenn Sie Dienste zur Verfügung stellen, die viele Dateien manipulieren. Beispiele für solche Dienste sind Web-Caches, große Mail-Systeme oder Netnews. Die aktivierte Variable vermindert, trotz des verschwendeten Speichers, in aller Regel nicht die Leistung des Systems, obwohl Sie das nachprüfen sollten. <varname>vfs.write_behind</varname> vfs.write_behind In der Voreinstellung besitzt die Variable vfs.write_behind den Wert 1 (aktiviert). Mit dieser Einstellung schreibt das Dateisystem anfallende vollständige Cluster, die besonders beim sequentiellen Schreiben großer Dateien auftreten, direkt auf das Medium aus. Dies verhindert, dass sich im Buffer-Cache veränderte Puffer (dirty buffers) ansammeln, die die I/O-Verarbeitung nicht mehr beschleunigen würden. Unter bestimmten Umständen blockiert diese Funktion allerdings Prozesse. Setzen Sie in diesem Fall die Variable vfs.write_behind auf den Wert 0. <varname>vfs.hirunningspace</varname> vfs.hirunningspace Die Variable vfs.hirunningspace bestimmt systemweit die Menge ausstehender Schreiboperationen, die dem Platten-Controller zu jedem beliebigen Zeitpunkt übergeben werden können. Normalerweise können Sie den Vorgabewert verwenden. Auf Systemen mit vielen Platten kann der Wert aber auf 4 bis 5 Megabyte erhöht werden. Beachten Sie, dass ein zu hoher Wert (größer als der Schreib-Schwellwert des Buffer-Caches) zu Leistungverlusten führen kann. Setzen Sie den Wert daher nicht zu hoch! Hohe Werte können auch Leseoperationen verzögern, die gleichzeitig mit Schreiboperationen ausgeführt werden. Es gibt weitere Variablen, mit denen Sie den Buffer-Cache und den VM-Page-Cache beeinflussen können. Wir raten Ihnen allerdings davon ab, diese Variablen zu verändern, da das VM-System den virtuellen Speicher selbst sehr gut verwaltet. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled Die Variable vm.swap_idle_enabled ist für große Mehrbenutzer-Systeme gedacht, auf denen sich viele Benutzer an- und abmelden und auf denen es viele Prozesse im Leerlauf (idle) gibt. Solche Systeme fragen kontinuierlich freien Speicher an. Wenn Sie die Variable vm.swap_idle_enabled aktivieren, können Sie die Auslagerungs-Hysterese von Seiten mit den Variablen vm.swap_idle_threshold1 und vm.swap_idle_threshold2 einstellen. Die Schwellwerte beider Variablen geben die Zeit in Sekunden an, in denen sich ein Prozess im Leerlauf befinden muss. Wenn die Werte so eingestellt sind, dass Seiten früher als nach dem normalen Algorithmus ausgelagert werden, verschafft das dem Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion nur, wenn Sie sie wirklich benötigen: Die Speicherseiten werden eher früher als später ausgelagert. Der Platz im Swap-Bereich wird dadurch schneller verbraucht und die Plattenaktivitäten steigen an. Auf kleine Systeme hat diese Funktion spürbare Auswirkungen. Auf großen Systemen, die sowieso schon Seiten auslagern müssen, können ganze Prozesse leichter in den Speicher geladen oder ausgelagert werden. <varname>hw.ata.wc</varname> hw.ata.wc In &os; 4.3 wurde versucht, den IDE-Schreib-Zwischenspeicher abzustellen. Obwohl dies die Bandbreite zum Schreiben auf IDE-Platten verringerte, wurde es aus Gründen der Datenkonsistenz als notwenig angesehen. Der Kern des Problems ist, dass IDE-Platten keine zuverlässige Aussage über das Ende eines Schreibvorgangs treffen. Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann sogar passieren, dass das Schreiben mancher Blöcke im Fall von starker Plattenaktivität auf unbefristete Zeit verzögert wird. Ein Absturz oder Stromausfall zu dieser Zeit kann die Dateisysteme erheblich beschädigen. Wir entschieden uns daher für die sichere Variante und stellten den Schreib-Zwischenspeicher ab. Leider war damit auch ein großer Leistungsverlust verbunden, so dass wir die Variable nach dem Release wieder aktiviert haben. Sie sollten den Wert der Variable hw.ata.wc auf Ihrem System überprüfen. Wenn der Schreib-Zwischenspeicher abgestellt ist, können Sie ihn aktivieren, indem Sie die Variable auf den Wert 1 setzen. Dies muss zum Zeitpunkt des Systemstarts im Boot-Loader geschehen. Eine Änderung der Variable, nachdem der Kernel gestartet ist, hat keine Auswirkungen. Weitere Informationen finden Sie in &man.ata.4;. <literal>SCSI_DELAY</literal> (<varname>kern.cam.scsi_delay</varname>) kern.cam.scsi_delay Kerneloptionen SCSI_DELAY Mit der Kerneloption SCSI_DELAY kann die Dauer des Systemstarts verringert werden. Der Vorgabewert ist recht hoch und er verzögert den Systemstart um 15 oder mehr Sekunden. Normalerweise kann dieser Wert, insbesondere mit modernen Laufwerken, auf 5 Sekunden heruntergesetzt werden. Ab &os; 5.0 wird dazu die sysctl-Variable kern.cam.scsi_delay benutzt. Die Variable sowie die Kerneloption verwenden für die Zeitangabe Millisekunden und nicht Sekunden. Soft Updates Soft Updates tunefs Mit &man.tunefs.8; lassen sich Feineinstellungen an Dateisystemen vornehmen. Das Programm hat verschiedene Optionen, von denen hier nur Soft Updates betrachtet werden. Soft Updates werden wie folgt ein- und ausgeschaltet: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Ein eingehängtes Dateisystem kann nicht mit &man.tunefs.8; modifiziert werden. Soft Updates werden am besten im Single-User Modus aktiviert, bevor Partitionen eingehangen sind. Durch Einsatz eines Zwischenspeichers wird die Performance im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen Dateisystemen zu aktivieren. Allerdings sollten Sie sich über die zwei Nachteile von Soft Updates bewusst sein: Erstens garantieren Soft Updates zwar die Konsistenz der Daten im Fall eines Absturzes, aber es kann leicht passieren, dass das Dateisystem über mehrere Sekunden oder gar eine Minute nicht synchronisiert wurde. Im Fall eines Absturzes verlieren Sie mit Soft Updates unter Umständen mehr Daten als ohne. Zweitens verzögern Soft Updates die Freigabe von Datenblöcken. Eine größere Aktualisierung eines fast vollen Dateisystems, wie dem Root-Dateisystem, z.B. während eines make installworld, kann das Dateisystem vollaufen lassen. Dadurch würde die Aktualisierung fehlschlagen. Details über Soft Updates Soft Updates Details Es gibt zwei klassische Herangehensweisen, wie man die Metadaten des Dateisystems (also Daten über Dateien, wie inode Bereiche oder Verzeichniseinträge) aktualisiert auf die Platte zurückschreibt: Das historisch übliche Verfahren waren synchrone Updates der Metadaten, d. h. wenn eine Änderung an einem Verzeichnis nötig war, wurde anschließend gewartet, bis diese Änderung tatsächlich auf die Platte zurückgeschrieben worden war. Der Inhalt der Dateien wurde im Buffer Cache zwischengespeichert und asynchron irgendwann später auf die Platte geschrieben. Der Vorteil dieser Implementierung ist, dass sie sicher funktioniert. Wenn während eines Updates ein Ausfall erfolgt, haben die Metadaten immer einen konsistenten Zustand. Eine Datei ist entweder komplett angelegt oder gar nicht. Wenn die Datenblöcke einer Datei im Fall eines Absturzes noch nicht den Weg aus dem Buffer Cache auf die Platte gefunden haben, kann &man.fsck.8; das Dateisystem reparieren, indem es die Dateilänge einfach auf 0 setzt. Außerdem ist die Implementierung einfach und überschaubar. Der Nachteil ist, dass Änderungen der Metadaten sehr langsam vor sich gehen. Ein rm -r beispielsweise fasst alle Dateien eines Verzeichnisses der Reihe nach an, aber jede dieser Änderungen am Verzeichnis (Löschen einer Datei) wird einzeln synchron auf die Platte geschrieben. Gleiches beim Auspacken großer Hierarchien (tar -x). Der zweite Fall sind asynchrone Metadaten-Updates. Das ist z. B. der Standard bei Linux/ext2fs oder die Variante mount -o async für *BSD UFS. Man schickt die Updates der Metadaten einfach auch noch über den Buffer Cache, sie werden also zwischen die Updates der normalen Daten eingeschoben. Vorteil ist, dass man nun nicht mehr auf jeden Update warten muss, Operationen, die zahlreiche Metadaten ändern, werden also viel schneller. Auch hier ist die Implementierung sehr einfach und wenig anfällig für Fehler. Nachteil ist, dass keinerlei Konsistenz des Dateisystems mehr gesichert ist. Wenn mitten in einer Operation, die viele Metadaten ändert, ein Ausfall erfolgt (Stromausfall, drücken des Reset-Tasters), dann ist das Dateisystem anschließend in einem unbestimmten Zustand. Niemand kann genau sagen, was noch geschrieben worden ist und was nicht mehr; die Datenblöcke einer Datei können schon auf der Platte stehen, während die inode Tabelle oder das zugehörige Verzeichnis nicht mehr aktualisiert worden ist. Man kann praktisch kein fsck mehr implementieren, das diesen Zustand wieder reparieren kann, da die dazu nötigen Informationen einfach auf der Platte fehlen. Wenn ein Dateisystem derart beschädigt worden ist, kann man es nur neu erzeugen (&man.newfs.8;) und die Daten vom Backup zurückspielen. Der historische Ausweg aus diesem Dilemma war ein dirty region logging (auch als Journalling bezeichnet, wenngleich dieser Begriff nicht immer gleich benutzt und manchmal auch für andere Formen von Transaktionsprotokollen gebraucht wird). Man schreibt die Metadaten-Updates zwar synchron, aber nur in einen kleinen Plattenbereich, die logging area. Von da aus werden sie dann asynchron auf ihre eigentlichen Bereiche verteilt. Da die logging area ein kleines zusammenhängendes Stückchen ist, haben die Schreibköpfe der Platte bei massiven Operationen auf Metadaten keine allzu großen Wege zurückzulegen, so dass alles ein ganzes Stück schneller geht als bei klassischen synchronen Updates. Die Komplexität der Implementierung hält sich ebenfalls in Grenzen, somit auch die Anfälligkeit für Fehler. Als Nachteil ergibt sich, dass Metadaten zweimal auf die Platte geschrieben werden müssen (einmal in die logging area, einmal an die richtige Stelle), so dass das im Falle regulärer Arbeit (also keine gehäuften Metadatenoperationen) eine Pessimisierung des Falls der synchronen Updates eintritt, es wird alles langsamer. Dafür hat man als Vorteil, dass im Falle eines Crashes der konsistente Zustand dadurch erzielbar ist, dass die angefangenen Operationen aus dem dirty region log entweder zu Ende ausgeführt oder komplett verworfen werden, wodurch das Dateisystem schnell wieder zur Verfügung steht. Die Lösung von Kirk McKusick, dem Schöpfer von Berkeley FFS, waren Soft Updates: die notwendigen Updates der Metadaten werden im Speicher gehalten und dann sortiert auf die Platte geschrieben (ordered metadata updates). Dadurch hat man den Effekt, dass im Falle massiver Metadaten-Änderungen spätere Operationen die vorhergehenden, noch nicht auf die Platte geschriebenen Updates desselben Elements im Speicher einholen. Alle Operationen, auf ein Verzeichnis beispielsweise, werden also in der Regel noch im Speicher abgewickelt, bevor der Update überhaupt auf die Platte geschrieben wird (die dazugehörigen Datenblöcke werden natürlich auch so sortiert, dass sie nicht vor ihren Metadaten auf der Platte sind). Im Fall eines Absturzes hat man ein implizites log rewind: alle Operationen, die noch nicht den Weg auf die Platte gefunden haben, sehen danach so aus, als hätten sie nie stattgefunden. Man hat so also den konsistenten Zustand von ca. 30 bis 60 Sekunden früher sichergestellt. Der verwendete Algorithmus garantiert dabei, dass alle tatsächlich benutzten Ressourcen auch in den entsprechenden Bitmaps (Block- und inode Tabellen) als belegt markiert sind. Der einzige Fehler, der auftreten kann, ist, dass Ressourcen noch als belegt markiert sind, die tatsächlich frei sind. &man.fsck.8; erkennt dies und korrigiert diese nicht mehr belegten Ressourcen. Die Notwendigkeit eines Dateisystem-Checks darf aus diesem Grunde auch ignoriert und das Dateisystem mittels mount -f zwangsweise eingebunden werden. Um noch allozierte Ressourcen freizugeben muss später ein &man.fsck.8; nachgeholt werden. Das ist dann auch die Idee des background fsck: beim Starten des Systems wird lediglich ein Schnappschuss des Filesystems gemacht, mit dem &man.fsck.8; dann später arbeiten kann. Alle Dateisysteme dürfen unsauber eingebunden werden und das System kann sofort in den Multiuser-Modus gehen. Danach wird ein Hintergrund-fsck für die Dateisysteme gestartet, die dies benötigen, um möglicherweise irrtümlich belegte Ressourcen freizugeben. (Dateisysteme ohne Soft Updates benötigen natürlich immer noch den üblichen (Vordergrund-)fsck, bevor sie eingebunden werden können.) Der Vorteil ist, dass die Metadaten-Operationen beinahe so schnell ablaufen wie im asynchronen Fall (also durchaus auch schneller als beim logging, das ja die Metadaten immer zweimal schreiben muss). Als Nachteil stehen dem die Komplexität des Codes (mit einer erhöhten Fehlerwahrscheinlichkeit in einem bezüglich Datenverlust hoch sensiblen Bereich) und ein erhöhter Speicherverbrauch entgegen. Außerdem muss man sich an einige Eigenheiten gewöhnen: Nach einem Absturz ist ein etwas älterer Stand auf der Platte – statt einer leeren, aber bereits angelegten Datei (wie nach einem herkömmlichen fsck Lauf) ist auf einem Dateisystem mit Soft Updates keine Spur der entsprechenden Datei mehr zu sehen, da weder die Metadaten noch der Dateiinhalt je auf die Platte geschrieben wurden. Weiterhin kann der Platz nach einem rm -r nicht sofort wieder als verfügbar markiert werden, sondern erst dann, wenn der Update auch auf die Platte vermittelt worden ist. Dies kann besonders dann Probleme bereiten, wenn große Datenmengen in einem Dateisystem ersetzt werden, das nicht genügend Platz hat, um alle Dateien zweimal unterzubringen. Einstellungen von Kernel Limits Einstellungen von Kernel Limits Datei und Prozeß Limits <varname>kern.maxfiles</varname> kern.maxfiles Abhängig von den Anforderungen Ihres Systems kann kern.maxfiles erhöht oder erniedrigt werden. Die Variable legt die maximale Anzahl von Dateideskriptoren auf Ihrem System fest. Wenn die Dateideskriptoren aufgebraucht sind, werden Sie die Meldung file: table is full wiederholt im Puffer für Systemmeldungen sehen. Den Inhalt des Puffers können Sie sich mit dmesg anzeigen lassen. Jede offene Datei, jedes Socket und jede FIFO verbraucht einen Dateideskriptor. Auf dicken Produktionsservern können leicht Tausende Dateideskriptoren benötigt werden, abhängig von der Art und Anzahl der gleichzeitig laufenden Dienste. In älteren &os;-Versionen wurde die Voreinstellung von kern.maxfile aus der Kernelkonfigurationsoption maxusers bestimmt. kern.maxfiles wächst proportional mit dem Wert von maxusers. Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich diese Option entsprechend der maximalen Benutzerzahl Ihres Systems einzustellen. Obwohl auf einer Produktionsmaschine vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind, können die benötigten Ressourcen ähnlich denen eines großen Webservers sein. Seit &os; 4.5 wird kern.maxusers beim Systemstart automatisch aus dem zur Verfügung stehenden Hauptspeicher bestimmt. Im laufenden Betrieb kann dieser Wert aus der (nur lesbaren) sysctl-Variable kern.maxusers ermittelt werden. Falls ein System für diese Variable einen anderen Wert benötigt, kann der Wert über den Loader angepasst werden. Häufig verwendete Werte sind dabei 64, 128, sowie 256. Es ist empfehlenswert, die Anzahl der Dateideskriptoren nicht auf einen Wert größer 256 zu setzen, es sei denn, Sie benötigen wirklich eine riesige Anzahl von ihnen. Viele der von kern.maxusers auf einen Standardwert gesetzten Parameter können beim Systemstart oder im laufenden Betrieb in der Datei /boot/loader.conf (sehen Sie sich dazu auch &man.loader.conf.5; sowie die Datei /boot/defaults/loader.conf an) an Ihre Bedürfnisse angepasst werden. Auf &os;-Systemen vor &os; 4.4 muss dieser Wert allerdings über die Kernelkonfigurationsoption (siehe auch &man.config.8;) gesetzt werden. Ältere &os;-Versionen setzen diesen Wert selbst, wenn Sie in der Konfigurationsdatei den Wert 0 Der verwendete Algorithmus setzt maxusers auf die Speichergröße des Systems. Der minimale Wert beträgt dabei 32, das Maximum ist 384. angeben. Wenn Sie den Wert selbst bestimmen wollen, sollten Sie maxusers mindestens auf 4 setzen. Dies gilt insbesondere dann, wenn Sie beabsichtigen, das X Window-System zu benutzen oder Software zu kompilieren. Der Grund dafür ist, dass der wichtigste Wert, der durch maxusers bestimmt wird, die maximale Anzahl an Prozessen ist, die auf 20 + 16 * maxusers gesetzt wird. Wenn Sie also maxusers auf 1 setzen, können gleichzeitig nur 36 Prozesse laufen, von denen ungefähr 18 schon beim Booten des Systems gestartet werden. Dazu kommen nochmals etwa 15 Prozesse beim Start des X Window-Systems. Selbst eine einfache Aufgabe wie das Lesen einer Manualpage benötigt neun Prozesse zum Filtern, Dekomprimieren und Betrachten der Datei. Für die meisten Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044 gleichzeitige Prozesse zur Verfügung stehen. Wenn Sie allerdings den gefürchteten Fehler proc table full beim Start eines Programms oder auf einem Server mit einer großen Benutzerzahl (wie ftp.FreeBSD.org) sehen, dann sollten Sie den Wert nochmals erhöhen und den Kernel neu bauen. Die Anzahl der Benutzer, die sich auf einem Rechner anmelden kann, wird durch maxusers nicht begrenzt. Der Wert dieser Variablen legt neben der möglichen Anzahl der Prozesse eines Benutzers weitere sinnvolle Größen für bestimmte Systemtabellen fest. Die Option pseudo-device pty 16 legt die Anzahl der erlaubten Anmeldungen von entfernten Systemen und X-Terminals fest. Unter &os; 5.X brauchen Sie sich um die Anzahl dieser Geräte nicht mehr zu kümmern, da der &man.pty.4;-Treiber automatisch neue Geräte erstellt, wenn Sie die Option device pty in Ihre Kernelkonfigurationsdatei aufnehmen und danach den Kernel neu bauen. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn Die Variable kern.ipc.somaxconn beschränkt die Größe der Warteschlange (Listen-Queue) für neue TCP-Verbindungen. Der Vorgabewert von 128 ist normalerweise zu klein, um neue Verbindungen auf einem stark ausgelasteten Webserver zuverlässig zu handhaben. Auf solchen Servern sollte der Wert auf 1024 oder höher gesetzt werden. Ein Dienst (z.B. &man.sendmail.8;, oder Apache) kann die Größe der Queue selbst einschränken. Oft gibt es die Möglichkeit, die Größe der Listen-Queue in einer Konfigurationsdatei einzustellen. Eine große Listen-Queue übersteht vielleicht auch einen Denial of Service Angriff (DoS). Netzwerk Limits Die Kerneloption NMBCLUSTERS schreibt die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System besitzt. Eine zu geringe Anzahl Mbufs auf einem Server mit viel Netzwerkverkehr verringert die Leistung von &os;. Jeder Mbuf-Cluster nimmt ungefähr 2 kB Speicher in Anspruch, so dass ein Wert von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer im System reserviert. Wie viele Cluster benötigt werden, lässt sich durch eine einfache Berechnung herausfinden. Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige Verbindungen servieren soll und jede der Verbindungen je einen 16 kB großen Puffer zum Senden und Empfangen braucht, brauchen Sie ungefähr 32 MB Speicher für Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl, so dass sich für NMBCLUSTERS der Wert 2x32 MB / 2 kB = 32768 ergibt. Für Maschinen mit viel Speicher sollten Werte zwischen 4096 und 32768 genommen werden. Sie können diesen Wert nicht willkürlich erhöhen, da dies bereits zu einem Absturz beim Systemstart führen kann. Mit der Option von &man.netstat.1; können Sie den Gebrauch der Netzwerkpuffer kontrollieren. Die Netzwerkpuffer können beim Systemstart mit der Loader-Variablen kern.ipc.nmbclusters eingestellt werden. Nur auf älteren &os;-Systemen müssen Sie die Kerneloption NMBCLUSTERS verwenden. Die Anzahl der &man.sendfile.2; Puffer muss auf ausgelasteten Servern, die den Systemaufruf &man.sendfile.2; oft verwenden, vielleicht erhöht werden. Dazu können Sie die Kerneloption NSFBUFS verwenden oder die Anzahl der Puffer in /boot/loader.conf (siehe &man.loader.8;) setzen. Die Puffer sollten erhöht werden, wenn Sie Prozesse im Zustand sfbufa sehen. Die schreibgeschützte sysctl-Variable kern.ipc.nsfbufs zeigt die Anzahl eingerichteten Puffer im Kernel. Der Wert dieser Variablen wird normalerweise von kern.maxusers bestimmt. Manchmal muss die Pufferanzahl jedoch manuell eingestellt werden. Auch wenn ein Socket nicht blockierend angelegt wurde, kann der Aufruf von &man.sendfile.2; blockieren, um auf freie struct sf_buf Puffer zu warten. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* Die sysctl-Variable net.inet.ip.portrange.* legt die Portnummern für TCP- und UDP-Sockets fest. Es gibt drei Bereiche: den niedrigen Bereich, den normalen Bereich und den hohen Bereich. Die meisten Netzprogramme benutzen den normalen Bereich. Dieser Bereich umfasst in der Voreinstellung die Portnummern 500 bis 5000 und wird durch die Variablen net.inet.ip.portrange.first und net.inet.ip.portrange.last festgelegt. Die festgelegten Bereiche für Portnummern werden von ausgehenden Verbindungen benutzt. Unter bestimmten Umständen, beispielsweise auf stark ausgelasteten Proxy-Servern, sind alle Portnummern für ausgehende Verbindungen belegt. Bereiche für Portnummern spielen auf Servern keine Rolle, die hauptsächlich eingehende Verbindungen verarbeiten (wie ein normaler Webserver) oder nur eine begrenzte Anzahl ausgehender Verbindungen öffnen (beispielsweise ein Mail-Relay). Wenn Sie keine freien Portnummern mehr haben, sollten Sie die Variable net.inet.ip.portrange.last langsam erhöhen. Ein Wert von 10000, 20000 oder 30000 ist angemessen. Beachten Sie auch eine vorhandene Firewall, wenn Sie die Bereiche für Portnummern ändern. Einige Firewalls sperren große Bereiche (normalerweise aus den kleinen Portnummern) und erwarten, dass hohe Portnummern für ausgehende Verbindungen verwendet werden. Daher kann es erforderlich sein, den Wert von net.inet.ip.portrange.first zu erhöhen. TCP Bandwidth Delay Product Begrenzung TCP Bandwidth Delay Product Begrenzung net.inet.tcp.inflight.enable Die TCP Bandwidth Delay Product Begrenzung gleicht TCP/Vegas von NetBSD. Die Begrenzung wird aktiviert, indem Sie die sysctl-Variable net.inet.tcp.inflight.enable auf den Wert 1 setzen. Das System wird dann versuchen, für jede Verbindung, das Produkt aus der Übertragungsrate und der Verzögerungszeit zu bestimmen. Dieses Produkt begrenzt die Datenmenge, die für einen optimales Durchsatz zwischengespeichert werden muss. Diese Begrenzung ist nützlich, wenn Sie Daten über Verbindungen mit einem hohen Produkt aus Übertragungsrate und Verzögerungszeit wie Modems, Gigabit-Ethernet oder schnellen WANs, zur Verfügung stellen. Insbesondere wirkt sich die Begrenzung aus, wenn die Verbindung die TCP-Option Window-scaling verwendet oder große Sende-Fenster (send window) benutzt. Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung aktiviert haben. Dazu setzen Sie die Variable net.inet.tcp.inflight.debug auf 0. Auf Produktions-Systemen sollten Sie zudem die Variable net.inet.tcp.inflight.min mindestens auf den Wert 6144 setzen. Allerdings kann ein zu hoher Wert, abhängig von der Verbindung, die Begrenzungsfunktion unwirksam machen. Die Begrenzung reduziert die Datenmenge in den Queues von Routern und Switches, sowie die Datenmenge in der Queue der lokalen Netzwerkkarte. Die Verzögerungszeit (Round Trip Time) für interaktive Anwendungen sinkt, da weniger Pakete zwischengespeichert werden. Dies gilt besonders für Verbindungen über langsame Modems. Die Begrenzung wirkt sich allerdings nur auf das Versenden von Daten aus (Uploads, Server). Auf den Empfang von Daten (Downloads) hat die Begrenzung keine Auswirkungen. Die Variable net.inet.tcp.inflight.stab sollte nicht angepasst werden. Der Vorgabewert der Variablen beträgt 20, das heißt es werden maximal zwei Pakete zu dem Produkt aus Übertragungsrate und Verzögerungszeit addiert. Dies stabilisiert den Algorithmus und verbessert die Reaktionszeit auf Veränderungen. Bei langsamen Verbindungen können sich aber die Laufzeiten der Pakete erhöhen (ohne diesen Algorithmus wären sie allerdings noch höher). In solchen Fällen können Sie versuchen, den Wert der Variablen auf 15, 10 oder 5 zu erniedrigen. Gleichzeitig müssen Sie vielleicht auch net.inet.tcp.inflight.min auf einen kleineren Wert (beispielsweise 3500) setzen. Ändern Sie diese Variablen nur ab, wenn Sie keine anderen Möglichkeiten mehr haben. Virtueller Speicher (<foreignphrase>Virtual Memory</foreignphrase>) <varname>kern.maxvnodes</varname> Ein vnode ist die interne Darstellung einer Datei oder eines Verzeichnisses. Die Erhöhung der Anzahl der für das Betriebssystem verfügbaren vnodes verringert also die Schreib- und Lesezugriffe auf Ihre Festplatte. vnodes werden im Normalfall vom Betriebssystem automatisch vergeben und müssen nicht von Ihnen angepasst werden. In einigen Fällen stellt der Zugriff auf eine Platte allerdings einen Flaschenhals dar, daher sollten Sie in diesem Fall die Anzahl der möglichen vnodes erhöhen, um dieses Problem zu beheben. Beachten Sie dabei aber die Größe des inaktiven und freien Hauptspeichers. Um die Anzahl der derzeit verwendeten vnodes zu sehen, geben Sie Folgendes ein: &prompt.root; sysctl vfs.numvnodes vfs.numvnodes: 91349 Die maximal mögliche Anzahl der vnodes erhalten Sie durch die Eingabe von: &prompt.root; sysctl kern.maxvnodes kern.maxvnodes: 100000 Wenn sich die Anzahl der genutzten vnodes dem maximal möglichen Wert nähert, sollten Sie den Wert kern.maxvnodes zuerst um etwa 1.000 erhöhen. Beobachten Sie danach die Anzahl der vom System genutzten vfs.numvnodes. Nähert sich der Wert wiederum dem definierten Maximum, müssen Sie kern.maxvnodes nochmals erhöhen. Sie sollten nun eine Änderung Ihres Speicherverbrauches (etwa über &man.top.1;) registrieren können und über mehr aktiven Speicher verfügen. Hinzufügen von Swap-Bereichen Egal wie vorausschauend Sie planen, manchmal entspricht ein System einfach nicht Ihren Erwartungen. Es ist leicht, mehr Swap-Bereiche hinzuzufügen. Dazu stehen Ihnen drei Wege offen: Sie können eine neue Platte einbauen, den Swap-Bereich über NFS ansprechen oder eine Swap-Datei auf einer existierenden Partition einrichten. Für Informationen zur Verschlüsselung von Swap-Partitionen, zu den dabei möglichen Optionen sowie zu den Gründen für eine Verschlüsselung des Auslagerungsspeichers lesen Sie bitte des Handbuchs. Swap auf einer neuen Festplatte Der einfachste Weg, zusätzlich einen Swap-Bereich einzurichten, ist der Einbau einer neuen Platte, die Sie sowieso gebrauchen können. Die Anordnung von Swap-Bereichen wird in des Handbuchs besprochen. Swap-Bereiche über NFS Swap-Bereiche über NFS sollten Sie nur dann einsetzen, wenn Sie über keine lokale Platte verfügen, da es durch die zur Verfügung stehende Bandbreite limitiert wird und außerdem den NFS-Server zusätzlich belastet. Swap-Dateien Sie können eine Datei festgelegter Größe als Swap-Bereich nutzen. Im folgenden Beispiel werden wir eine 64 MB große Datei mit Namen /usr/swap0 benutzen, Sie können natürlich einen beliebigen Namen für den Swap-Bereich benutzen. Erstellen einer Swap-Datei Stellen Sie sicher, dass der Kernel RAM-Disks (&man.md.4;) unterstützt. Dies ist in der GENERIC-Konfiguration voreingestellt. device md # Memory "disks" Legen Sie die Swap-Datei /usr/swap0 an: &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Setzen Sie die richtigen Berechtigungen für /usr/swap0: &prompt.root; chmod 0600 /usr/swap0 Aktivieren Sie die Swap-Datei /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Um die Swap-Datei zu aktivieren, führen Sie entweder einen Neustart durch oder geben das folgende Kommando ein: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Hiten Pandya Verfasst von Tom Rhodes Energie- und Ressourcenverwaltung Es ist wichtig, Hardware effizient einzusetzen. Vor der Einführung des Advanced Configuration and Power Interface (ACPI) konnten Stromverbrauch und Wärmeabgabe eines Systems nur schlecht von Betriebssystemen gesteuert werden. Die Hardware wurde vom BIOS gesteuert, was die Kontrolle der Energieverwaltung für den Anwender erschwerte. Das Advanced Power Management (APM) erlaubte es lediglich, einige wenige Funktionen zu steuern, obwohl die Überwachung von Energie- und Ressourcenverbrauch zu den wichtigsten Aufgaben eines Betriebssystems gehört, um auf verschiedene Ereignisse, beispielsweise einen unerwarteten Temperaturanstieg, reagieren können. Dieser Abschnitt erklärt das Advanced Configuration and Power Interface (ACPI). Was ist ACPI? ACPI APM Advanced Configuration and Power Interface (ACPI) ist ein Standard verschiedener Hersteller, der die Verwaltung von Hardware und Energiesparfunktionen festlegt. Die ACPI-Funktionen können von einem Betriebssystem gesteuert werden. Der Vorgänger des ACPI, Advanced Power Management (APM), erwies sich in modernen Systemen als unzureichend. Mängel des Advanced Power Managements (APM) Das Advanced Power Management (APM) steuert den Energieverbrauch eines Systems auf Basis der Systemaktivität. Das APM-BIOS wird von dem Hersteller des Systems zur Verfügung gestellt und ist auf die spezielle Hardware angepasst. Der APM-Treiber des Betriebssystems greift auf das APM Software Interface zu, das den Energieverbrauch regelt. APM findet sich in der Regel nur noch in Systemen, die vor 2001 produziert wurden. Das APM hat hauptsächlich vier Probleme. Erstens läuft die Energieverwaltung unabhängig vom Betriebssystem in einem (herstellerspezifischen) BIOS. Beispielsweise kann das APM-BIOS die Festplatten nach einer konfigurierbaren Zeit ohne die Zustimmung des Betriebssystems herunterfahren. Zweitens befindet sich die ganze APM-Logik im BIOS; das Betriebssystem hat gar keine APM-Komponenten. Bei Problemen mit dem APM-BIOS muss das Flash-ROM aktualisiert werden. Diese Prozedur ist gefährlich, da sie im Fehlerfall das System unbrauchbar machen kann. Zum Dritten ist APM eine Technik, die herstellerspezifisch ist und nicht koordiniert wird. Fehler im BIOS eines Herstellers werden nicht unbedingt im BIOS anderer Hersteller korrigiert. Das letzte Problem ist, dass im APM-BIOS nicht genügend Platz vorhanden ist, um eine durchdachte oder eine auf den Zweck der Maschine zugeschnittene Energieverwaltung zu implementieren. Das Plug and Play BIOS (PNPBIOS) war ebenfalls unzureichend. Das PNPBIOS verwendet eine 16-Bit-Technik. Damit das Betriebssystem das PNPBIOS ansprechen kann, muss es in einer 16-Bit-Emulation laufen. Der APM-Treiber von &os; ist in der Hilfeseite &man.apm.4; beschrieben. Konfiguration des <acronym>ACPI</acronym> Das Modul acpi.ko wird standardmäßig beim Systemstart vom &man.loader.8; geladen und sollte daher nicht fest in den Kernel eingebunden werden. Dadurch kann acpi.ko ohne einen Neubau des Kernels ersetzt werden und das Modul ist leichter zu testen. Wenn Sie in der Ausgabe von &man.dmesg.8; das Wort ACPI sehen, ist das Modul geladen worden. Das ACPI-Modul im laufenden Betrieb zu laden, führt oft nicht zum gewünschten Ergebnis. Treten bei Ihrem System Probleme auf, können Sie ACPI auch komplett deaktivieren. Dazu definieren Sie die Variable hint.acpi.0.disabled="1" in der Datei /boot/loader.conf. Alternativ können Sie die Variable auch am &man.loader.8;-Prompt eingeben. Das Modul kann im laufenden Betrieb nicht entfernt werden, da es zur Kommunikation mit der Hardware verwendet wird. ACPI und APM können nicht zusammen verwendet werden. Das zuletzt geladene Modul beendet sich, sobald es bemerkt, dass das andere Modul geladen ist. Mit &man.acpiconf.8; können Sie das System in einen Ruhemodus (sleep mode) versetzen. Es gibt verschiedene Modi (von 1 bis 5), die Sie auf der Kommandozeile mit angeben können. Für die meisten Anwender sind die Modi 1 und 3 völlig ausreichend. Der Modus 5 schaltet das System aus (Soft-off) und entspricht dem folgenden Befehl: &prompt.root; halt -p Verschiedene Optionen können als &man.sysctl.8;-Variablen gesetzt werden. Lesen Sie dazu die Manualpages zu &man.acpi.4; sowie &man.acpiconf.8;. Nate Lawson Verfasst von Peter Schultz Mit Beiträgen von Tom Rhodes <acronym>ACPI</acronym>-Fehlersuche ACPI Probleme mit ACPI ist ein gänzlich neuer Weg, um Geräte aufzufinden und deren Stromverbrauch zu regulieren. Weiterhin bietet ACPI einen einheitlichen Zugriff auf Geräte, die vorher vom BIOS verwaltet wurden. Es werden zwar Fortschritte gemacht, dass ACPI auf allen Systemen läuft, doch tauchen immer wieder Fehler auf: fehlerhafter Bytecode der ACPI-Machine-Language (AML) einiger Systemplatinen, ein unvollständiges &os;-Kernel-Subsystem oder Fehler im ACPI-CA-Interpreter von &intel;. Dieser Abschnitt hilft Ihnen, zusammen mit den Betreuern des &os;-ACPI-Subsystems, Fehlerquellen zu finden und Fehler zu beseitigen. Danke, dass Sie diesen Abschnitt lesen; hoffentlich hilft er, Ihre Systemprobleme zu lösen. Fehlerberichte einreichen Bevor Sie einen Fehlerbericht einreichen, stellen Sie bitte sicher, dass Ihr BIOS und die Firmware Ihres Controllers aktuell sind. Wenn Sie sofort einen Fehlerbericht einsenden wollen, schicken Sie bitte die folgenden Informationen an die Mailingliste freebsd-acpi: Beschreiben Sie den Fehler und alle Umstände, unter denen der Fehler auftritt. Geben Sie ebenfalls den Typ und das Modell Ihres Systems an. Wenn Sie einen neuen Fehler entdeckt haben, versuchen Sie möglichst genau zu beschreiben, wann der Fehler das erste Mal aufgetreten ist. Die Ausgabe von &man.dmesg.8; nach der Eingabe von boot -v. Geben Sie auch alle Fehlermeldungen an, die erscheinen, wenn Sie den Fehler provozieren. Die Ausgabe von &man.dmesg.8; nach der Eingabe von boot -v und mit deaktiviertem ACPI, wenn das Problem ohne ACPI nicht auftritt. Die Ausgabe von sysctl hw.acpi. Dieses Kommando zeigt die vom System unterstützten ACPI-Funktionen an. Die URL, unter der die ACPI-Source-Language (ASL) liegt. Schicken Sie bitte nicht die ASL an die Mailingliste, da die ASL sehr groß sein kann. Eine Kopie der ASL erstellen Sie mit dem nachstehenden Befehl: &prompt.root; acpidump -td > name-system.asl Setzen Sie bitte für name den Namen Ihres Kontos und für system den Hersteller und das Modell Ihres Systems ein. Zum Beispiel: njl-FooCo6000.asl. Obwohl die meisten Entwickler die Mailingliste &a.current.name; lesen, sollten Sie Fehlerberichte an die Liste &a.acpi.name; schicken. Seien Sie bitte geduldig; wir haben alle Arbeit außerhalb des Projekts. Wenn der Fehler nicht offensichtlich ist, bitten wir Sie vielleicht, einen offiziellen Fehlerbericht (PR) mit &man.send-pr.1; einzusenden. Geben Sie im Fehlerbericht bitte dieselben Informationen wie oben an. Mithilfe der PRs verfolgen und lösen wir Probleme. Senden Sie bitte keinen PR ein, ohne vorher den Fehlerbericht an die Liste &a.acpi.name; zu senden. Wir benutzen die PRs als Erinnerung an bestehende Probleme und nicht zum Sammeln aller Probleme. Es kann sein, dass der Fehler schon von jemand anderem gemeldet wurde. <acronym>ACPI</acronym>-Grundlagen ACPI ACPI gibt es in allen modernen Rechnern der ia32- (x86), ia64- (Itanium) und amd64- (AMD) Architektur. Der vollständige Standard bietet Funktionen zur Steuerung und Verwaltung der CPU-Leistung, der Stromversorgung, von Wärmebereichen, Batterien, eingebetteten Controllern und Bussen. Auf den meisten Systemen wird nicht der vollständige Standard implementiert. Arbeitsplatzrechner besitzen meist nur Funktionen zur Verwaltung der Busse, während Notebooks Funktionen zur Temperaturkontrolle und Ruhezustände besitzen. Ein ACPI konformes System besitzt verschiedene Komponenten. Die BIOS- und Chipsatz-Hersteller stellen mehrere statische Tabellen bereit (zum Beispiel die Fixed-ACPI-Description-Table, FADT). Die Tabellen enthalten beispielsweise die mit SMP-Systemen benutzte APIC-Map, Konfigurationsregister und einfache Konfigurationen. Zusätzlich gibt es die Differentiated-System-Description-Table (DSDT), die Bytecode enthält. Die Tabelle ordnet Geräte und Methoden in einem baumartigen Namensraum an. Ein ACPI-Treiber muss die statischen Tabellen einlesen, einen Interpreter für den Bytecode bereitstellen und die Gerätetreiber im Kernel so modifizieren, dass sie mit dem ACPI-Subsystem kommunizieren. Für &os;, Linux und NetBSD hat &intel; den Interpreter ACPI-CA, zur Verfügung gestellt. Der Quelltext zu ACPI-CA befindet sich im Verzeichnis src/sys/contrib/dev/acpica. Die Schnittstelle von ACPI-CA zu &os; befindet sich unter src/sys/dev/acpica/Osd. Treiber, die verschiedene ACPI-Geräte implementieren, befinden sich im Verzeichnis src/sys/dev/acpica. Häufige Probleme ACPI Probleme mit Damit ACPI richtig funktioniert, müssen alle Teile funktionieren. Im Folgenden finden Sie eine Liste mit Problemen und möglichen Umgehungen oder Fehlerbehebungen. Die Liste ist nach der Häufigkeit, mit der die Probleme auftreten, sortiert. Mausprobleme Es kann vorkommen, dass die Maus nicht mehr funktioniert, wenn Sie nach einem Suspend weiterarbeiten wollen. Ist dies bei Ihnen der Fall, reicht es meistens aus, den Eintrag hint.psm.0.flags="0x3000" in Ihre /boot/loader.conf aufzunehmen. Besteht das Problem weiterhin, sollten Sie einen Fehlerbericht an das FreeBSD Project senden. Suspend/Resume ACPI kennt drei Suspend-to-RAM-Zustände (STR): S1-S3. Es gibt einen Suspend-to-Disk-Zustand: S4. Der Zustand S5 wird Soft-Off genannt. In diesem Zustand befindet sich ein Rechner, wenn die Stromversorgung angeschlossen ist, der Rechner aber nicht hochgefahren ist. Der Zustand S4 kann auf zwei Arten implementiert werden: S4BIOS und S4OS. Im ersten Fall wird der Suspend-to-Disk-Zustand durch das BIOS hergestellt im zweiten Fall alleine durch das Betriebssystem. Die Suspend-Zustände sind Ruhezustände, in denen der Rechner weniger Energie als im Normalbetrieb benötigt. Resume bezeichnet die Rückkehr zum Normalbetrieb. Die Suspend-Zustände können Sie mit dem Kommando sysctl hw.acpi ermitteln. Das Folgende könnte beispielsweise ausgegeben werden: hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0 Diese Ausgabe besagt, dass mit dem Befehl acpiconf -s die Zustände S3, S4OS und S5 eingestellt werden können. Hätte den Wert 1, gäbe es den Zustand S4BIOS anstelle von S4OS. Wenn Sie die Suspend- und Resume-Funktionen testen, fangen Sie mit dem S1-Zustand an, wenn er angeboten wird. Dieser Zustand wird am ehesten funktionieren, da der Zustand wenig Treiber-Unterstützung benötigt. Der Zustand S2 ist ähnlich wie S1, allerdings hat ihn noch niemand implementiert. Als nächstes sollten Sie den Zustand S3 ausprobieren. Dies ist der tiefste STR-Schlafzustand. Dieser Zustand ist auf massive Treiber-Unterstützung angewiesen, um die Geräte wieder richtig zu initialisieren. Wenn Sie Probleme mit diesem Zustand haben, können Sie die Mailingliste &a.acpi.name; anschreiben. Erwarten Sie allerdings nicht zu viel: Es gibt viele Treiber und Geräte, an denen noch gearbeitet und getestet wird. Um das Problem einzugrenzen, entfernen Sie soviele Treiber wie möglich aus dem Kernel. Sie können das Problem isolieren, indem Sie einen Treiber nach dem anderen laden, bis der Fehler wieder auftritt. Typischerweise verursachen binäre Treiber wie nvidia.ko, X11-Grafiktreiber und USB-Treiber die meisten Fehler, hingegen laufen Ethernet-Treiber für gewöhnlich sehr zuverlässig. Wenn ein Treiber zuverlässig geladen und entfernt werden kann, können Sie den Vorgang automatisieren, indem Sie die entsprechenden Kommandos in die Dateien /etc/rc.suspend und /etc/rc.resume einfügen. In den Dateien finden Sie ein deaktiviertes Beispiel, das einen Treiber lädt und wieder entfernt. Ist die Bildschirmanzeige bei der Wiederaufnahme des Betriebs gestört, setzen Sie bitte die Variable auf 0. Versuchen Sie auch, die Variable auf kürzere Zeitspannen zu setzen. Die Suspend- und Resume-Funktionen können Sie auch auf einer neuen Linux-Distribution mit ACPI testen. Wenn es mit Linux funktioniert, liegt das Problem wahrscheinlich bei einem &os;-Treiber. Es hilft uns, das Problem zu lösen, wenn Sie feststellen können, welcher Treiber das Problem verursacht. Beachten Sie bitte, dass die ACPI-Entwickler normalerweise keine anderen Treiber pflegen (beispielsweise Sound- oder ATA-Treiber). Es ist wohl das beste, die Ergebnisse der Fehlersuche an die Mailingliste &a.current.name; und den Entwickler des Treibers zu schicken. Wenn Ihnen danach ist, versuchen Sie, den Fehler in der Resume-Funktion zu finden, indem Sie einige &man.printf.3;-Anweisungen in den Code des fehlerhaften Treibers einfügen. Schließlich können Sie ACPI noch abschalten und stattdessen APM verwenden. Wenn die Suspend- und Resume-Funktionen mit APM funktionieren, sollten Sie vielleicht besser APM verwenden (insbesondere mit alter Hardware von vor dem Jahr 2000). Die Hersteller benötigten einige Zeit, um ACPI korrekt zu implementieren, daher gibt es mit älterer Hardware oft ACPI-Probleme. Temporäre oder permanente Systemhänger Die meisten Systemhänger entstehen durch verlorene Interrupts oder einen Interrupt-Sturm. Probleme werden verursacht durch die Art, in der das BIOS Interrupts vor dem Systemstart konfiguriert, durch eine fehlerhafte APIC-Tabelle und durch die Zustellung des System-Control-Interrupts (SCI). Interrupt-Sturm Anhand der Ausgabe des Befehls vmstat -i können Sie verlorene Interrupts von einem Interrupt-Sturm unterscheiden. Untersuchen Sie die Ausgabezeile, die acpi0 enthält. Ein Interrupt-Sturm liegt vor, wenn der Zähler öfter als ein paar Mal pro Sekunde hochgezählt wird. Wenn sich das System aufgehangen hat, versuchen Sie mit der Tastenkombination Ctrl Alt Esc in den Debugger DDB zu gelangen. Geben Sie dort den Befehl show interrupts ein. APIC deaktivieren Wenn Sie Interrupt-Probleme haben, ist es vorerst wohl am besten, APIC zu deaktivieren. Tragen Sie dazu die Zeile hint.apic.0.disabled="1" in loader.conf ein. Abstürze (Panics) Panics werden so schnell wie möglich behoben; mit ACPI kommt es aber selten dazu. Zuerst sollten Sie die Panic reproduzieren und dann versuchen einen backtrace (eine Rückverfolgung der Funktionsaufrufe) zu erstellen. Richten Sie dazu den DDB über die serielle Schnittstelle (siehe ) oder eine gesonderte &man.dump.8;-Partition ein. In DDB können Sie den backtrace mit dem Kommando tr erstellen. Falls Sie den backtrace vom Bildschirm abschreiben müssen, schreiben Sie bitte mindestens die fünf ersten und die fünf letzten Zeile der Ausgabe auf. Versuchen Sie anschließend, das Problem durch einen Neustart ohne ACPI zu beseitigen. Wenn das funktioniert hat, können Sie versuchen, das verantwortliche ACPI-Subsystem durch Setzen der Variablen herauszufinden. Die Hilfeseite &man.acpi.4; enthält dazu einige Beispiele. Nach einem Suspend oder einem Stopp startet das System wieder Setzen Sie zuerst in &man.loader.conf.5; die Variable auf 0. Damit wird verhindert, dass ACPI während des Systemabschlusses die Bearbeitung verschiedener Ereignisse deaktiviert. Auf manchen Systemen muss die Variable den Wert 1 besitzen (die Voreinstellung). Normalerweise wird der unerwünschte Neustart des Systems durch Setzen dieser Variablen behoben. Andere Probleme Wenn Sie weitere Probleme mit ACPI haben (Umgang mit einer Docking-Station, nicht erkannte Geräte), schicken Sie bitte eine Beschreibung an die Mailingliste. Allerdings kann es sein, dass einige Probleme von noch unvollständigen Teilen des ACPI-Subsystems abhängen und es etwas dauern kann bis diese Teile fertig sind. Seien Sie geduldig und rechnen Sie damit, dass wir Ihnen Fehlerbehebungen zum Testen senden. <acronym>ASL</acronym>, <command>acpidump</command> und <acronym>IASL</acronym> ACPI ASL Ein häufiges Problem ist fehlerhafter Bytecode des BIOS-Herstellers. Dies erkennen Sie an Kernelmeldungen auf der Konsole wie die folgende: ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND Oft können Sie das Problem dadurch lösen, dass Sie eine aktuelle BIOS-Version einspielen. Die meisten Meldungen auf der Konsole sind harmlos, wenn aber beispielsweise der Batteriestatus falsch angezeigt wird, können Sie in den Meldungen nach Problemen mit der AML-Machine-Language (AML) suchen. Der Bytecode der AML wird aus der ACPI-Source-Language (ASL) übersetzt und in einer Tabelle, der DSDT, abgelegt. Eine Kopie der ASL können Sie mit dem Befehl &man.acpidump.8; erstellen. Verwenden Sie mit diesem Befehl sowohl die Option (die Inhalte der statischen Tabellen anzeigen) als auch die Option (die AML in ASL zurückübersetzen). Ein Beispiel für die Syntax finden Sie im Abschnitt Fehlerberichte einreichen. Sie können einfach prüfen, ob sich die ASL übersetzen lässt. Für gewöhnlich können Sie Warnungen während des Übersetzens ignorieren. Fehlermeldungen führen normal dazu, dass ACPI fehlerhaft arbeitet. Ihre ASL übersetzen Sie mit dem nachstehenden Kommando: &prompt.root; iasl ihre.asl Die <acronym>ASL</acronym> reparieren ACPI ASL Auf lange Sicht ist es unser Ziel, dass ACPI ohne Eingriffe des Benutzers läuft. Zurzeit entwickeln wir allerdings noch Umgehungen für Fehler der BIOS-Hersteller. Der µsoft;-Interpreter (acpi.sys und acpiec.sys) prüft die ASL nicht streng gegen den Standard. Daher reparieren BIOS-Hersteller, die ACPI nur unter &windows; testen, ihre ASL nicht. Wir hoffen, dass wir das vom Standard abweichende Verhalten des µsoft;-Interpreters dokumentieren und in &os; replizieren können. Dadurch müssen Benutzer ihre ASL nicht selbst reparieren. Sie können Ihre ASL selbst reparieren, wenn Sie ein Problem umgehen und uns helfen möchten. Senden Sie uns bitte die mit &man.diff.1; erstellte Differenz zwischen alter und neuer ASL. Wir werden versuchen, den Interpreter ACPI-CA zu korrigieren, damit die Fehlerbehebung nicht mehr erforderlich ist. ACPI Fehlermeldungen Die nachfolgende Liste enthält häufige Fehlermeldungen, deren Ursache und eine Beschreibung, wie die Fehler korrigiert werden: Abhängigkeiten vom Betriebssystem Einige AMLs gehen davon aus, dass die Welt ausschließlich aus verschiedenen &windows;-Versionen besteht. &os; kann vorgeben, irgendein Betriebssystem zu sein. Versuchen Sie das Betriebssystem, das Sie in der ASL finden, in der Datei /boot/loader.conf anzugeben: hw.acpi.osname="Windows 2001". Fehlende Return-Anweisungen Einige Methoden verzichten auf die vom Standard vorgeschriebene Rückgabe eines Wertes. Obwohl der Interpreter ACPI-CA dies nicht beheben kann, besitzt &os; die Möglichkeit, den Rückgabewert implizit zu setzen. Wenn Sie wissen, welcher Wert zurückgegeben werden muss, können Sie die fehlenden Return-Anweisungen selbst einsetzen. Die Option zwingt iasl, die ASL zu übersetzen. Überschreiben der vorgegebenen <acronym>AML</acronym> Nachdem Sie Ihre ASL in der Datei ihre.asl angepasst haben, übersetzen Sie die ASL wie folgt: &prompt.root; iasl ihre.asl Mit der Option erzwingen Sie das Erstellen der AML auch wenn während der Übersetzung Fehler auftreten. Beachten Sie, dass einige Fehler, wie fehlende Return-Anweisungen, automatisch vom Interpreter umgangen werden. In der Voreinstellung erstellt der Befehl iasl die Ausgabedatei DSDT.aml. Wenn Sie diese Datei anstelle der fehlerhaften Kopie des BIOS laden wollen, editieren Sie /boot/loader.conf wie folgt: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml" Stellen Sie bitte sicher, dass sich die Datei DSDT.aml im Verzeichnis /boot befindet. <acronym>ACPI</acronym>-Meldungen zur Fehlersuche erzeugen ACPI Probleme mit ACPI Fehlersuche Der ACPI-Treiber besitzt flexible Möglichkeiten zur Fehlersuche. Sie können sowohl die zu untersuchenden Subsysteme als auch die zu erzeugenden Ausgaben festlegen. Die zu untersuchenden Subsysteme werden als so genannte layers angegeben. Die Subsysteme sind in ACPI-CA-Komponenten (ACPI_ALL_COMPONENTS) und ACPI-Hardware (ACPI_ALL_DRIVERS) aufgeteilt. Welche Meldungen ausgegeben werden, wird über level gesteuert. level reicht von ACPI_LV_ERROR (es werden nur Fehler ausgegeben) bis zu ACPI_LV_VERBOSE (alles wird ausgegeben). level ist eine Bitmaske, sodass verschiedene Stufen auf einmal (durch Leerzeichen getrennt) angegeben werden können. Die erzeugte Ausgabemenge passt vielleicht nicht in den Konsolenpuffer. In diesem Fall sollten Sie die Ausgaben mithilfe einer seriellen Konsole sichern. Die möglichen Werte für layers und level werden in der Hilfeseite &man.acpi.4; beschrieben. Die Ausgaben zur Fehlersuche sind in der Voreinstellung nicht aktiviert. Wenn ACPI im Kernel enthalten ist, fügen Sie options ACPI_DEBUG zur Kernelkonfigurationsdatei hinzu. Sie können die Ausgaben zur Fehlersuche global aktivieren, indem Sie in der Datei /etc/make.conf die Zeile ACPI_DEBUG=1 einfügen. Das Modul acpi.ko können Sie wie folgt neu übersetzen: &prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1 Installieren Sie anschließend acpi.ko im Verzeichnis /boot/kernel. In der Datei loader.conf stellen Sie level und layer ein. Das folgende Beispiel aktiviert die Ausgabe von Fehlern für alle ACPI-CA-Komponenten und alle ACPI-Hardwaretreiber (wie CPU, LID): debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR" Wenn ein Problem durch ein bestimmtes Ereignis, beispielsweise den Start nach einem Ruhezustand, hervorgerufen wird, können Sie die Einstellungen für level und layer auch mit dem Kommando sysctl vornehmen. In diesem Fall müssen Sie die Datei loader.conf nicht editieren. Auf der sysctl-Kommandozeile geben Sie dieselben Variablennamen wie in loader.conf an. ACPI-Informationsquellen Weitere Informationen zu ACPI erhalten Sie an den folgenden Stellen: die &a.acpi; Mailingliste, die Archive der ACPI-Mailingliste: , die alten Archive der ACPI-Mailingliste: , die ACPI-Spezifikation (Version 2.0): , in den nachstehenden &os;-Hilfeseiten: &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8; und &man.acpidb.8;, DSDT debugging resource (als Beispiel wird Compaq erläutert, die Ressource ist aber dennoch nützlich). diff --git a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml index 33c0173342..e8099662f4 100644 --- a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml @@ -1,1214 +1,1216 @@ 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 + 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 + 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/disks/chapter.sgml b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml index 9c3eadc463..982e36d09d 100644 --- a/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml @@ -1,4635 +1,4625 @@ Bernd Warken Übersetzt von Martin Heinen Speichermedien Übersicht Dieses Kapitel behandelt die Benutzung von Laufwerken unter FreeBSD. Laufwerke können speichergestützte Laufwerke, Netzwerklaufwerke oder normale SCSI/IDE-Geräte sein. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen: Die Begriffe, die FreeBSD verwendet, um die Organisation der Daten auf einem physikalischen Laufwerk zu beschreiben (Partitionen und Slices). Wie Sie ein weiteres Laufwerk zu Ihrem System hinzufügen. Wie virtuelle Dateisysteme, zum Beispiel RAM-Disks, eingerichtet werden. Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können. Wie Sie Partitionen verschlüsseln, um Ihre Daten zu schützen. Wie unter FreeBSD CDs und DVDs gebrannt werden. Sie werden die Speichermedien, die Sie für Backups einsetzen können, kennen. Wie Sie die unter FreeBSD erhältlichen Backup Programme benutzen. Wie Sie ein Backup mit Disketten erstellen. Was Dateisystem-Schnappschüsse sind und wie sie eingesetzt werden. Bevor Sie dieses Kapitel lesen, sollten Sie einen einen &os;-Kernel installieren können (). Gerätenamen Die folgende Tabelle zeigt die von FreeBSD unterstützten Speichergeräte und deren Gerätenamen. Namenskonventionen von physikalischen Laufwerken Laufwerkstyp Gerätename IDE-Festplatten ad IDE-CD-ROM Laufwerke acd SCSI-Festplatten und USB-Speichermedien da SCSI-CD-ROM Laufwerke cd Verschiedene proprietäre CD-ROM-Laufwerke mcd Mitsumi CD-ROM und scd Sony CD-ROM Diskettenlaufwerke fd SCSI-Bandlaufwerke sa IDE-Bandlaufwerke ast Flash-Laufwerke fla für &diskonchip; Flash-Device RAID-Laufwerke aacd für &adaptec; AdvancedRAID, mlxd und mlyd für &mylex;, amrd für AMI &megaraid;, idad für Compaq Smart RAID, twed für &tm.3ware; RAID.
David O'Brian Im Original von Hinzufügen von Laufwerken Laufwerke hinzufügen Angenommen, Sie wollen ein neues SCSI-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und Laufwerk Herstellers. Den genauen Ablauf können wir wegen der großen Abweichungen leider nicht beschreiben. Nachdem Sie das Laufwerk installiert haben, melden Sie sich als Benutzer root an und kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue Laufwerk gefunden wurde. Das neue Laufwerk wird, um das Beispiel fortzuführen, da1 heißen und soll unter /1 angehangen werden. Fügen Sie eine IDE-Platte hinzu, wird diese den Namen ad1 erhalten.s Partitionen Slices fdisk Da FreeBSD auf IBM-PC kompatiblen Rechnern läuft, muss es die PC BIOS-Partitionen, die verschieden von den traditionellen BSD-Partitionen sind, berücksichtigen. Eine PC Platte kann bis zu vier BIOS-Partitionen enthalten. Wenn die Platte ausschließlich für FreeBSD verwendet wird, können Sie den dedicated Modus benutzen, ansonsten muss FreeBSD in eine der BIOS-Partitionen installiert werden. In FreeBSD heißen die PC BIOS-Partitionen Slices, um sie nicht mit den traditionellen BSD-Partitionen zu verwechseln. Sie können auch Slices auf einer Platte verwenden, die ausschließlich von FreeBSD benutzt wird, sich aber in einem Rechner befindet, der noch ein anderes Betriebssystem installiert hat. Dadurch stellen Sie sicher, dass Sie fdisk des anderen Betriebssystems noch benutzen können. Im Fall von Slices wird die Platte als /dev/da1s1e hinzugefügt. Das heißt: SCSI-Platte, Einheit 1 (die zweite SCSI-Platte), Slice 1 (PC BIOS-Partition 1) und die e BSD-Partition. Wird die Platte ausschließlich für FreeBSD verwendet (dangerously dedicated), wird sie einfach als /dev/da1e hinzugefügt. Da &man.bsdlabel.8; zum Speichern von Sektoren 32-Bit Integer verwendet, ist das Werkzeug in den meisten Fällen auf 2^32-1 Sektoren pro Laufwerk oder 2 TB beschränkt. In &man.fdisk.8; darf der Startsektor nicht größer als 2^32-1 sein und Partitionen sind auf eine Länge von 2^32-1 beschränkt. In den meisten Fällen beschränkt dies die Größe einer Partition auf 2 TB und die maximale Größe eines Laufwerks auf 4 TB. Das &man.sunlabel.8;-Format ist mit 2^32-1 Sektoren pro Partition und 8 Partitionen auf 16 TB beschränkt. Mit größeren Laufwerken können &man.gpt.8;-Partitionen benutzt werden. Verwenden von &man.sysinstall.8; sysinstall hinzufügen von Laufwerken su Das <application>sysinstall</application> Menü Um ein Laufwerk zu partitionieren und zu labeln, kann das menügestützte sysinstall benutzt werden. Dazu melden Sie sich als root an oder benutzen su, um root zu werden. Starten Sie sysinstall und wählen das Configure Menü, wählen Sie dort den Punkt Fdisk aus. Partitionieren mit <application>fdisk</application> Innerhalb von fdisk geben Sie A ein, um die ganze Platte für FreeBSD zu benutzen. Beantworten Sie die Frage remain cooperative with any future possible operating systems mit YES. W schreibt die Änderung auf die Platte, danach können Sie fdisk mit q verlassen. Da Sie eine Platte zu einem schon laufenden System hinzugefügt haben, beantworten Sie die Frage nach dem Master Boot Record mit None. Disk-Label-Editor BSD Partitionen Als nächstes müssen Sie sysinstall verlassen und es erneut starten. Folgen Sie dazu bitte den Anweisungen von oben, aber wählen Sie dieses Mal die Option Label, um in den Disk Label Editor zu gelangen. Hier werden die traditionellen BSD-Partitionen erstellt. Ein Laufwerk kann acht Partitionen, die mit den Buchstaben a-h gekennzeichnet werden, besitzen. Einige Partitionen sind für spezielle Zwecke reserviert. Die a Partition ist für die Root-Partition (/) reserviert. Deshalb sollte nur das Laufwerk, von dem gebootet wird, eine a Partition besitzen. Die b Partition wird für Swap-Partitionen benutzt, wobei Sie diese auf mehreren Platten benutzen dürfen. Im dangerously dedicated Modus spricht die c Partition die gesamte Platte an, werden Slices verwendet, wird damit die ganze Slice angesprochen. Die anderen Partitionen sind für allgemeine Zwecke verwendbar. Der Label Editor von sysinstall bevorzugt die e Partition für Partitionen, die weder Root-Partitionen noch Swap-Partitionen sind. Im Label Editor können Sie ein einzelnes Dateisystem mit C erstellen. Wählen Sie FS, wenn Sie gefragt werden, ob Sie ein FS (Dateisystem) oder Swap erstellen wollen, und geben Sie einen Mountpoint z.B. /mnt an. Wenn Sie nach einer FreeBSD-Installation ein Dateisystem mit sysinstall erzeugen, so werden die Einträge in /etc/fstab nicht erzeugt, so dass die Angabe des Mountpoints nicht wichtig ist. Sie können nun das Label auf das Laufwerk schreiben und das Dateisystem erstellen, indem Sie W drücken. Ignorieren Sie die Meldung von sysinstall, dass die neue Partition nicht angehangen werden konnte, und verlassen Sie den Label Editor sowie sysinstall. Ende Im letzten Schritt fügen Sie noch in /etc/fstab den Eintrag für das neue Laufwerk ein. Die Kommandozeile Anlegen von Slices Mit der folgenden Vorgehensweise wird eine Platte mit anderen Betriebssystemen, die vielleicht auf Ihrem Rechner installiert sind, zusammenarbeiten und nicht das fdisk Programm anderer Betriebssysteme stören. Bitte benutzen Sie den dedicated Modus nur dann, wenn Sie dazu einen guten Grund haben! &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; fdisk -BI da1 # Initialisieren der neuen Platte &prompt.root; bsdlabel -B -w da1s1 auto #Labeln. &prompt.root; bsdlabel -e da1s1 # Editieren des Disklabels und Hinzufügen von Partitionen &prompt.root; mkdir -p /1 &prompt.root; newfs /dev/da1s1e # Wiederholen Sie diesen Schritt für jede Partition &prompt.root; mount /dev/da1s1e /1 # Anhängen der Partitionen &prompt.root; vi /etc/fstab # Ändern Sie /etc/fstab entsprechend Wenn Sie ein IDE-Laufwerk besitzen, ändern Sie da in ad. Dedicated OS/2 Wenn das neue Laufwerk nicht von anderen Betriebssystemen benutzt werden soll, können Sie es im dedicated Modus betreiben. Beachten Sie bitte, dass Microsoft-Betriebssysteme mit diesem Modus eventuell nicht zurechtkommen, aber es entsteht kein Schaden am Laufwerk. Im Gegensatz dazu wird IBMs &os2; versuchen, jede ihm nicht bekannte Partition zu reparieren. &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; bsdlabel -Bw da1 auto &prompt.root; bsdlabel -e da1 # Erstellen der `e' Partition &prompt.root; newfs -d0 /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # /dev/da1e hinzufügen &prompt.root; mount /1 Eine alternative Methode: &prompt.root; dd if=/dev/zero of=/dev/da1 count=2 &prompt.root; bsdlabel /dev/da1 | bsdlabel -BR da1 /dev/stdin &prompt.root; newfs /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # /dev/da1e hinzufügen &prompt.root; mount /1 RAID Software-RAID Christopher Shumway Original von Jim Brown Überarbeitet von Concatenated-Disk (CCD) konfigurieren RAID Software RAID CCD Die wichtigsten Faktoren bei der Auswahl von Massenspeichern sind Geschwindigkeit, Zuverlässigkeit und Preis. Selten findet sich eine ausgewogene Mischung aller drei Faktoren. Schnelle und zuverlässige Massenspeicher sind für gewöhnlich teuer. Um die Kosten zu senken, muss entweder an der Geschwindigkeit oder an der Zuverlässigkeit gespart werden. Das unten beschriebene System sollte vor allem preiswert sein. Der nächst wichtige Faktor war die Geschwindigkeit gefolgt von der Zuverlässigkeit. Die Geschwindigkeit war nicht so wichtig, da über das Netzwerk auf das System zugegriffen wird. Da alle Daten schon auf CD-Rs gesichert sind, war die Zuverlässigkeit, obwohl wichtig, ebenfalls nicht von entscheidender Bedeutung. Die Bewertung der einzelnen Faktoren ist der erste Schritt bei der Auswahl von Massenspeichern. Wenn Sie vor allem ein schnelles und zuverlässiges Medium benötigen und der Preis nicht wichtig ist, werden Sie ein anderes System als das hier beschriebene zusammenstellen. Installation der Hardware Neben der IDE-Systemplatte besteht das System aus drei Western Digital IDE-Festplatten mit 5400 RPM und einer Kapazität von je 30 GB. Insgesamt stehen also 90 GB Speicherplatz zur Verfügung. Im Idealfall sollte jede Festplatte an einen eigenen Controller angeschlossen werden. Um Kosten zu sparen, wurde bei diesem System darauf verzichtet und an jeden IDE-Controller eine Master- und eine Slave-Platte angeschlossen. Beim Reboot wurde das BIOS so konfiguriert, dass es die angeschlossenen Platten automatisch erkennt und FreeBSD erkannte die Platten ebenfalls: ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33 Wenn FreeBSD die Platten nicht erkennt, überprüfen Sie, ob die Jumper korrekt konfiguriert sind. Die meisten IDE-Festplatten verfügen über einen Cable Select-Jumper. Die Master- und Slave-Platten werden mit einem anderen Jumper konfiguriert. Bestimmen Sie den richtigen Jumper mithilfe der Dokumentation Ihrer Festplatte. Als nächstes sollten Sie überlegen, auf welche Art der Speicher zur Verfügung gestellt werden soll. Schauen Sie sich dazu &man.vinum.8; () und &man.ccd.4; an. Im hier beschriebenen System wird &man.ccd.4; eingesetzt. Konfiguration von CCD Mit &man.ccd.4; können mehrere gleiche Platten zu einem logischen Dateisystem zusammengefasst werden. Um &man.ccd.4; zu benutzen, muss der Kernel mit der entsprechenden Unterstützung übersetzt werden. Ergänzen Sie die Kernelkonfiguration um die nachstehende Zeile. Anschließend müssen Sie den Kernel neu übersetzen und installieren. pseudo-device ccd Alternativ kann &man.ccd.4; auch als Kernelmodul geladen werden. Um &man.ccd.4; zu benutzen, müssen die Laufwerke zuerst mit einem Label versehen werden. Die Label werden mit &man.bsdlabel.8; erstellt: bsdlabel -w ad1 auto bsdlabel -w ad2 auto bsdlabel -w ad3 auto Damit wurden die Label ad1c, ad2c und ad3c erstellt, die jeweils das gesamte Laufwerk umfassen. Im nächsten Schritt muss der Typ des Labels geändert werden. Die Labels können Sie mit &man.bsdlabel.8; editieren: bsdlabel -e ad1 bsdlabel -e ad2 bsdlabel -e ad3 Für jedes Label startet dies den durch EDITOR gegebenen Editor, typischerweise &man.vi.1;. Ein unverändertes Label sieht zum Beispiel wie folgt aus: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) Erstellen Sie eine e-Partition für &man.ccd.4;. Dazu können Sie normalerweise die Zeile der c-Partition kopieren, allerdings muss auf 4.2BSD gesetzt werden. Das Ergebnis sollte wie folgt aussehen: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597) Erstellen des Dateisystems Nachdem alle Platten ein Label haben, kann das &man.ccd.4;-RAID aufgebaut werden. Dies geschieht mit &man.ccdconfig.8;: ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e Die folgende Aufstellung erklärt die verwendeten Kommandozeilenargumente: Das erste Argument gibt das zu konfigurierende Gerät, hier /dev/ccd0c, an. Die Angabe von /dev/ ist dabei optional. Der Interleave für das Dateisystem. Der Interleave definiert die Größe eines Streifens in Blöcken, die normal 512 Bytes groß sind. Ein Interleave von 32 ist demnach 16384 Bytes groß. Weitere Argumente für &man.ccdconfig.8;. Wenn Sie spiegeln wollen, können Sie das hier angeben. Die gezeigte Konfiguration verwendet keine Spiegel, sodass der Wert 0 angegeben ist. Das letzte Argument gibt die Geräte des Plattenverbundes an. Benutzen Sie für jedes Gerät den kompletten Pfadnamen. Nach Abschluß von &man.ccdconfig.8; ist der Plattenverbund konfiguriert und es können Dateisysteme auf dem Plattenverbund angelegt werden. Das Anlegen von Dateisystemen wird in der Hilfeseite &man.newfs.8; beschrieben. Für das Beispiel genügt der folgende Befehl: newfs /dev/ccd0c Automatisierung Damit &man.ccd.4; beim Start automatisch aktiviert wird, ist die Datei /etc/ccd.conf mit dem folgenden Kommando zu erstellen: ccdconfig -g > /etc/ccd.conf Wenn /etc/ccd.conf existiert, wird beim Reboot ccdconfig -C von /etc/rc aufgerufen. Damit wird &man.ccd.4; eingerichtet und die darauf befindlichen Dateisysteme können angehängt werden. Wenn Sie in den Single-User Modus booten, müssen Sie den Verbund erst konfigurieren, bevor Sie darauf befindliche Dateisysteme anhängen können: ccdconfig -C In /etc/fstab ist noch ein Eintrag für das auf dem Verbund befindliche Dateisystem zu erstellen, damit dieses beim Start des Systems immer angehängt wird: /dev/ccd0c /media ufs rw 2 2 Der Vinum-Volume-Manager RAID Software RAID Vinum Der Vinum Volume Manager ist ein Block-Gerätetreiber, der virtuelle Platten zur Verfügung stellt. Er trennt die Verbindung zwischen der Festplatte und dem zugehörigen Block-Gerät auf. Im Gegensatz zur konventionellen Aufteilung einer Platte in Slices lassen sich dadurch Daten flexibler, leistungsfähiger und zuverlässiger verwalten. &man.vinum.8; stellt RAID-0, RAID-1 und RAID-5 sowohl einzeln wie auch in Kombination zur Verfügung. Mehr Informationen über &man.vinum.8; erhalten Sie in . Hardware-RAID RAID Hardware FreeBSD unterstützt eine Reihe von RAID-Controllern. Diese Geräte verwalten einen Plattenverbund; zusätzliche Software wird nicht benötigt. Der Controller steuert mithilfe eines BIOS auf der Karte die Plattenoperationen. Wie ein RAID System eingerichtet wird, sei kurz am Beispiel des Promise IDE RAID-Controllers gezeigt. Nachdem die Karte eingebaut ist und der Rechner neu gestartet wurde, erscheint eine Eingabeaufforderung. Wenn Sie den Anweisungen auf dem Bildschirm folgen, gelangen Sie in eine Maske, in der Sie mit den vorhandenen Festplatten ein RAID-System aufbauen können. FreeBSD behandelt das RAID-System wie eine einzelne Festplatte. Wiederherstellen eines ATA-RAID-1 Verbunds Mit FreeBSD können Sie eine ausgefallene Platte in einem RAID-Verbund während des Betriebs auswechseln, vorausgesetzt Sie bemerken den Ausfall vor einem Neustart. Einen Ausfall erkennen Sie, wenn in der Datei /var/log/messages oder in der Ausgabe von &man.dmesg.8; Meldungen wie die folgenden auftauchen: ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\ status=59 error=40 ar0: WARNING - mirror lost Überprüfen Sie den RAID-Verbund mit &man.atacontrol.8;: &prompt.root; atacontrol list ATA channel 0: Master: no device present Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present ATA channel 3: Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED Damit Sie die Platte ausbauen können, muss zuerst der ATA-Channel der ausgefallenen Platte aus dem Verbund entfernt werden: &prompt.root; atacontrol detach ata3 Ersetzen Sie dann die Platte. Nun aktivieren Sie den ATA-Channel wieder: &prompt.root; atacontrol attach ata3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present Nehmen Sie die neue Platte in den Verbund auf: &prompt.root; atacontrol addspare ar0 ad6 Stellen Sie die Organisation des Verbunds wieder her: &prompt.root; atacontrol rebuild ar0 Sie können den Fortschritt des Prozesses durch folgende Befehle kontrollieren: &prompt.root; dmesg | tail -10 [output removed] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed Warten Sie bis die Wiederherstellung beendet ist. Marc Fonvieille Beigetragen von USB Speichermedien USB Speichermedien Der Universal Serial Bus (USB) wird heutzutage von vielen externen Speichern benutzt: Festplatten, USB-Thumbdrives oder CD-Brennern, die alle von &os; unterstützt werden. USB-Konfiguration USB-Massenspeicher werden vom Treiber &man.umass.4; betrieben. Wenn Sie den GENERIC-Kernel benutzen, brauchen Sie keine Anpassungen vorzunehmen. Benutzen Sie einen angepassten Kernel, müssen die nachstehenden Zeilen in der Kernelkonfigurationsdatei enthalten sein: device scbus device da device pass device uhci device ohci device usb device umass Der Treiber &man.umass.4; greift über das SCSI-Subsystem auf die USB-Geräte zu. Ihre USB-Geräte werden daher vom System als SCSI-Geräte erkannt. Abhängig vom Chipsatz Ihrer Systemplatine benötigen Sie in der Kernelkonfiguration entweder die Option device uhci oder die Option device ohci. Die Kernelkonfiguration kann allerdings auch beide Optionen enthalten. Vergessen Sie bitte nicht, einen neuen Kernel zu bauen und zu installieren, wenn Sie die Kernelkonfiguration verändert haben. Wenn es sich bei Ihrem USB-Gerät um einen CD-R- oder DVD-Brenner handelt, müssen Sie den Treiber &man.cd.4; für SCSI-CD-ROMs in die Kernelkonfiguration aufnehmen: device cd Da der Brenner als SCSI-Laufwerk erkannt wird, sollten Sie den Treiber &man.atapicam.4; nicht benutzen. USB 2.0-Controller werden von &os; unterstützt, wenn Sie die folgende Zeile in Ihre Kernelkonfigurationsdatei aufnehmen: device ehci Die Treiber &man.uhci.4; und &man.ohci.4; werden immer noch für USB 1.X benötigt. Die USB-Konfiguration testen Sie können das USB-Gerät nun testen. Schließen Sie das Gerät an und untersuchen Sie die Systemmeldungen (&man.dmesg.8;), Sie sehen Ausgaben wie die folgende: umass0: USB Solid state disk, rev 1.10/1.00, addr 2 GEOM: create disk da0 dp=0xc2d74850 da0 at umass-sim0 bus 0 target 0 lun 0 da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device da0: 1.000MB/s transfers da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C) Die Ausgaben, wie das erkannte Gerät oder der Gerätename (da0) hängen natürlich von Ihrer Konfiguration ab. Da ein USB-Gerät als SCSI-Gerät erkannt wird, können Sie USB-Massenspeicher mit dem Befehl camcontrol anzeigen: &prompt.root; camcontrol devlist <Generic Traveling Disk 1.11> at scbus0 target 0 lun 0 (da0,pass0) Wenn auf dem Laufwerk ein Dateisystem eingerichtet ist, sollten Sie das Dateisystem einhängen können. beschreibt, wie Sie USB-Laufwerke formatieren und Partitionen einrichten. Damit auch normale Anwender (ohne root-Rechte) USB-Laufwerke einhängen können, müssen Sie Ihr System erst entsprechend konfigurieren. Als erstes müssen Sie sicherstellen, dass diese Anwender auf die beim Einhängen eines USB-Laufwerks dynamisch erzeugten Gerätedateien zugreifen dürfen. Dazu können Sie beispielsweise mit &man.pw.8; alle potentiellen Benutzer dieser Gerätedateien in die Gruppe operator aufnehmen. Außerdem muss sichergestellt werden, dass Mitglieder der Gruppe operator Schreib- und Lesezugriff auf diese Gerätedateien haben. Dazu fügen Sie die folgenden Zeilen in die Konfigurationsdatei /etc/devfs.rules ein: [localrules=1] add path 'da*' mode 0660 group operator Verfügt Ihr System auch über SCSI-Laufwerke, gibt es eine Besonderheit. Haben Sie beispielsweise die SCSI-Laufwerke da0 bis da2 installiert, so sieht die zweite Zeile wie folgt aus: add path 'da[3-9]*' mode 0660 group operator Dadurch werden die bereits vorhandenen SCSI-Laufwerke nicht in die Gruppe operator aufgenommen. Vergessen Sie nicht, die &man.devfs.rules.5;-Regeln in der Datei /etc/rc.conf zu aktivieren: devfs_system_ruleset="localrules" Als nächstes müssen Sie Ihre Kernelkonfiguration anpassen, damit auch normale Benutzer Dateisysteme mounten dürfen. Dazu fügen Sie am besten folgende Zeile in die Konfigurationsdatei /etc/sysctl.conf ein: vfs.usermount=1 Damit diese Einstellung wirksam wird, müssen Sie Ihr System neu starten. Alternativ können Sie diese Variable auch mit &man.sysctl.8; setzen. Zuletzt müssen Sie noch ein Verzeichnis anlegen, in das das USB-Laufwerk eingehängt werden soll. Dieses Verzeichnis muss dem Benutzer gehören, der das USB-Laufwerk in den Verzeichnisbaum einhängen will. Dazu legen Sie als root ein Unterverzeichnis /mnt/$USER an (wobei Sie $USER durch den Login des jeweiligen Benutzers ersetzen): &prompt.root; mkdir /mnt/$USER &prompt.root; chown $USER:$USER /mnt/$USER Wenn Sie nun beispielsweise einen USB-Stick anschließen, wird automatisch die Gerätedatei /dev/da0s1 erzeugt. Da derartige Geräte in der Regel mit dem FAT-Dateisystem formatiert sind, können Sie sie beispielsweise mit dem folgenden Befehl in den Verzeichnisbaum einhängen: &prompt.user; mount-t msdosfs -m 644 -M 755 /dev/da0s1 /mnt/$USER Wenn Sie das Gerät entfernen (das Dateisystem müssen Sie vorher abhängen), sehen Sie in den Systemmeldungen Einträge wie die folgenden: umass0: at uhub0 port 1 (addr 2) disconnected (da0:umass-sim0:0:0:0): lost device (da0:umass-sim0:0:0:0): removing device entry GEOM: destroy disk da0 dp=0xc2d74850 umass0: detached Weiteres zu USB Neben den Abschnitten Hinzufügen von Laufwerken und Anhängen und Abhängen von Dateisystemen lesen Sie bitte die Hilfeseiten &man.umass.4;, &man.camcontrol.8; und &man.usbdevs.8;. Mike Meyer Beigesteuert von CDs benutzen CD-ROM brennen Einführung CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Zuerst konnten sie nicht beschrieben werden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. Sie konnten früher auch leichter als vergleichbar große Medien zwischen Systemen bewegt werden. CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Um eine CD mit FreeBSD zu erstellen, werden die Daten jeder Spur der CD in Dateien vorbereitet und dann die Spuren auf die CD geschrieben. ISO 9660 Dateisysteme ISO 9660 Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. Leider hat es auch damals übliche Grenzen für Dateisysteme implementiert. Glücklicherweise existiert ein Erweiterungsmechanismus, der es korrekt geschriebenen CDs erlaubt, diese Grenzen zu überschreiten und dennoch auf Systemen zu funktionieren, die diese Erweiterungen nicht unterstützen. sysutils/cdrtools Der Port sysutils/cdrtools enthält das Programm &man.mkisofs.8;, das eine Datei erstellt, die ein ISO 9660-Dateisystem enthält. Das Programm hat Optionen, um verschiedene Erweiterungen zu unterstützen, und wird unten beschrieben. CD-Brenner ATAPI Welches Tool Sie zum Brennen von CDs benutzen, hängt davon ab, ob Ihr CD-Brenner ein ATAPI-Gerät ist oder nicht. Mit ATAPI-CD-Brennern wird burncd benutzt, das Teil des Basissystems ist. SCSI- und USB-CD-Brenner werden mit cdrecord aus sysutils/cdrtools benutzt. Zusätzlich ist es möglich, über das Modul ATAPI/CAM SCSI-Werkzeuge wie cdrecord auch für ATAPI-Geräte einzusetzen. Wenn Sie eine Brennsoftware mit grafischer Benutzeroberfläche benötigen, sollten Sie sich X-CD-Roast oder K3b näher ansehen. Diese Werkzeuge können als Paket oder aus den Ports (sysutils/xcdroast und sysutils/k3b) installiert werden. Mit ATAPI-Hardware benötigt K3b das ATAPI/CAM-Modul. mkisofs Das Programm &man.mkisofs.8; aus dem Port sysutils/cdrtools erstellt ein ISO 9660-Dateisystem, das ein Abbild eines Verzeichnisbaumes ist. Die einfachste Anwendung ist wie folgt: &prompt.root; mkisofs -o Imagedatei /path/to/tree Dateisysteme ISO 9660 Dieses Kommando erstellt eine Imagedatei, die ein ISO 9660-Dateisystem enthält, das eine Kopie des Baumes unter /path/to/tree ist. Dabei werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien mit Namen, die im ISO 9660-Dateisystem nicht gültig sind, bleiben unberücksichtigt. Dateisysteme HFS Dateisysteme Joliet Es einige Optionen, um diese Beschränkungen zu überwinden. Die unter &unix; Systemen üblichen Rock-Ridge-Erweiterungen werden durch aktiviert, aktiviert die von Microsoft Systemen benutzten Joliet-Erweiterungen und dient dazu, um das von &macos; benutzte HFS zu erstellen. Für CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit wird ein Abbild des Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum, erstellt, obwohl dies den ISO 9660 Standard verletzen kann. CD-ROM bootbare erstellen Die letzte übliche Option ist . Sie wird benutzt, um den Ort eines Bootimages einer El Torito bootbaren CD anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die CD geschrieben werden soll. In der Voreinstellung erzeugt &man.mkisofs.8; ein ISO-Image im Diskettenemulations-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den FreeBSD-Disks verwendete, kennen keinen Emulationsmodus. Daher sollten Sie in diesen Fällen die Option verwenden. Wenn /tmp/myboot ein bootbares FreeBSD-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, können Sie ein Abbild eines ISO 9660-Dateisystems in /tmp/bootable.iso wie folgt erstellen: &prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot Wenn Sie md in Ihrem Kernel konfiguriert haben, können Sie danach das Dateisystem einhängen: &prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 &prompt.root; mount -t cd9660 /dev/md0 /mnt Jetzt können Sie überprüfen, dass /mnt und /tmp/myboot identisch sind. Sie können das Verhalten von &man.mkisofs.8; mit einer Vielzahl von Optionen beeinflussen. Insbesondere können Sie das ISO 9660-Dateisystem modifizieren und Joliet- oder HFS-Dateisysteme brennen. Details dazu entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;. burncd CD-ROM brennen Wenn Sie einen ATAPI-CD-Brenner besitzen, können Sie burncd benutzen, um ein ISO-Image auf CD zu brennen. burncd ist Teil des Basissystems und unter /usr/sbin/burncd installiert. Da es nicht viele Optionen hat, ist es leicht zu benutzen: &prompt.root; burncd -f cddevice data imagefile.iso fixate Dieses Kommando brennt eine Kopie von imagefile.iso auf das Gerät cddevice. In der Grundeinstellung wird das Gerät /dev/acd0 benutzt. &man.burncd.8; beschreibt, wie die Schreibgeschwindigkeit gesetzt wird, die CD ausgeworfen wird und Audiodaten geschrieben werden. cdrecord Wenn Sie keinen ATAPI-CD-Brenner besitzen, benutzen Sie cdrecord, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems. Sie müssen es entweder aus den Ports in sysutils/cdrtools oder dem passenden Paket installieren. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, dass Sie einen Untersetzer brennen. Sie sollten daher den Port aktualisieren, wenn Sie Ihr System aktualisieren bzw. wenn Sie STABLE verfolgen, den Port aktualisieren, wenn es eine neue Version gibt. Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfacher als burncd. Ein ISO 9660-Image erstellen Sie mit: &prompt.root; cdrecord dev=device imagefile.iso Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu zu finden. Benutzen Sie dazu den Schalter von cdrecord, der eine ähnliche Ausgabe wie die folgende produziert: CD-ROM brennen &prompt.root; cdrecord -scanbus Cdrecord 1.9 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Für die aufgeführten Geräte in der Liste wird das passende Argument zu gegeben. Benutzen Sie die drei durch Kommas separierten Zahlen, die zu Ihrem CD-Brenner angegeben sind, als Argument für . Im Beispiel ist das CDRW-Gerät 1,5,0, so dass die passende Eingabe dev=1,5,0 wäre. Einfachere Wege das Argument anzugeben, sind in &man.cdrecord.1; beschrieben. Dort sollten Sie auch nach Informationen über Audiospuren, das Einstellen der Geschwindigkeit und ähnlichem suchen. Kopieren von Audio-CDs Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. Das genaue Verfahren hängt davon ab, ob Sie ATAPI- oder SCSI-Laufwerke verwenden. SCSI-Laufwerke Kopieren Sie die Audiodaten mit cdda2wav: &prompt.user; cdda2wav -v255 -D2,0 -B -Owav Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere CD: &prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav Das Argument von gibt das verwendete Gerät an, das Sie, wie in beschrieben, ermitteln können. ATAPI-Laufwerke Der ATAPI-CD-Treiber stellt die einzelnen Stücke der CD über die Dateien /dev/acddtnn, zur Verfügung. d bezeichnet die Laufwerksnummer und nn ist die Nummer des Stücks. Die Nummer ist immer zweistellig, das heißt es wird, wenn nötig, eine führende Null ausgegeben. Die Datei /dev/acd0t01 ist also das erste Stück des ersten CD-Laufwerks. /dev/acd0t02 ist das zweite Stück und /dev/acd0t03 das dritte. Überprüfen Sie stets, ob die entsprechenden Dateien im Verzeichnis /dev auch angelegt werden. Sind die Einträge nicht vorhanden, weisen Sie Ihr System an, das Medium erneut zu testen: &prompt.root; dd if=/dev/acd0 of=/dev/null count=1 Unter &os; 4.X werden diese Einträge nicht mit dem Wert Null vordefiniert. Falls die entsprechenden Einträge unter /dev nicht vorhanden sind, müssen Sie diese hier von MAKEDEV anlegen lassen: &prompt.root; cd /dev &prompt.root; sh MAKEDEV acd0t99 Die einzelnen Stücke kopieren Sie mit &man.dd.1;. Sie müssen dazu eine spezielle Blockgröße angeben: &prompt.root; dd if=/dev/acd0t01 of=track1.cdr bs=2352 &prompt.root; dd if=/dev/acd0t02 of=track2.cdr bs=2352 ... Die kopierten Dateien können Sie dann mit burncd brennen. Auf der Kommandozeile müssen Sie angeben, dass Sie Audio-Daten brennen wollen und dass das Medium fixiert werden soll: &prompt.root; burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate Kopieren von Daten-CDs Sie können eine Daten-CD in eine Datei kopieren, die einem Image entspricht, das mit &man.mkisofs.8; erstellt wurde. Mit Hilfe dieses Images können Sie jede Daten-CD kopieren. Das folgende Beispiel verwendet acd0 für das CD-ROM-Gerät. Wenn Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen Namen ein. &prompt.root; dd if=/dev/acd0 of=file.iso bs=2048 Danach haben Sie ein Image, das Sie wie oben beschrieben, auf eine CD brennen können. Einhängen von Daten-CDs Nachdem Sie eine Daten-CD gebrannt haben, wollen Sie wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen Sie die CD in den Dateibaum einhängen. Die Voreinstellung für den Typ des Dateisystems von &man.mount.8; ist UFS. Das System wird die Fehlermeldung Incorrect super block ausgeben, wenn Sie versuchen, die CD mit dem folgenden Kommando einzuhängen: &prompt.root; mount /dev/cd0 /mnt Auf der CD befindet sich ja kein UFS Dateisystem, so dass der Versuch, die CD einzuhängen fehlschlägt. Sie müssen &man.mount.8; sagen, dass es ein Dateisystem vom Typ ISO9660 verwenden soll. Dies erreichen Sie durch die Angabe von auf der Kommandozeile. Wenn Sie also die CD-ROM /dev/cd0 in /mnt einhängen wollen, führen Sie folgenden Befehl aus: &prompt.root; mount -t cd9660 /dev/cd0c /mnt Abhängig vom verwendeten CD-ROM kann der Gerätename von dem im Beispiel (/dev/cd0) abweichen. Die Angabe von führt &man.mount.cd9660.8; aus, so dass das Beispiel verkürzt werden kann: &prompt.root; mount_cd9660 /dev/cd0 /mnt Auf diese Weise können Sie Daten-CDs von jedem Hersteller verwenden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Zwar unterstützt der &os;-Kernel derzeit noch kein Unicode, der CD9660-Treiber erlaubt es aber, zur Laufzeit eine Konvertierungstabelle zu laden. Tauchen bei Ihnen also statt bestimmter Zeichen nur Fragezeichen auf, so müssen Sie über die Option den benötigten Zeichensatz angeben. Weitere Informationen zu diesem Problem finden Sie in der Manualpage &man.mount.cd9660.8;. Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option ) erkennt, müssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu fügen Sie entweder folgende Zeile in die Datei loader.conf ein: cd9660_iconv_load="YES" Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über &man.kldload.8; laden. Manchmal werden Sie die Meldung Device not configured erhalten, wenn Sie versuchen, eine CD-ROM einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig. Manchmal wird ein SCSI-CD-ROM nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie ein SCSI-CD-ROM besitzen, sollten Sie die folgende Zeile in Ihre Kernelkonfiguration aufnehmen und einen neuen Kernel bauen: options SCSI_DELAY=15000 Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-ROM-Laufwerk genügend Zeit zu geben, darauf zu antworten. Brennen von rohen CDs Sie können eine Datei auch direkt auf eine CD brennen, ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Diese Vorgehensweise hat den Vorteil, dass Sie schneller als das Brennen einer normalen CD ist. &prompt.root; burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate Wenn Sie die Daten von einer solchen CD wieder zurückbekommen wollen, müssen Sie sie direkt von dem rohen Gerät lesen: &prompt.root; tar xzvf /dev/acd1 Eine auf diese Weise gefertigte CD können Sie nicht in das Dateisystem einhängen. Sie können Sie auch nicht auf einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in das Dateisystem einhängen oder mit anderen Betriebssystemen austauschen wollen, müssen Sie &man.mkisofs.8; wie oben beschrieben benutzen. Marc Fonvieille Beigetragen von CD-Brenner ATAPI/CAM Treiber Der ATAPI/CAM Treiber Mit diesem Treiber kann auf ATAPI-Geräte (wie CD-ROM-, CD-RW- oder DVD-Laufwerke) mithilfe des SCSI-Subsystems zugegriffen werden. Damit können Sie SCSI-Werkzeuge, wie sysutils/cdrdao oder &man.cdrecord.1;, zusammen mit einem ATAPI-Gerät benutzen. Wenn Sie den Treiber benutzen wollen, fügen Sie die folgende Zeile in /boot/loader.conf ein: atapicam_load="YES" Danach müssen Sie Ihr System neu starten, um den Treiber zu aktivieren. Alternativ können Sie die Unterstützung für &man.atapicam.4; auch in Ihren Kernel kompilieren. Dazu fügen Sie die folgende Zeile in Ihre Kernelkonfigurationsdatei ein: device atapicam Die folgenden Zeilen werden ebenfalls benötigt, sollten aber schon Teil der Kernelkonfiguration sein: device ata device scbus device cd device pass Übersetzen und installieren Sie den neuen Kernel. Der CD-Brenner sollte nun beim Neustart des Systems erkannt werden: acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed Über den Gerätenamen /dev/cd0 können Sie nun auf das Laufwerk zugreifen. Wenn Sie beispielsweise eine CD-ROM in /mnt einhängen wollen, benutzen Sie das nachstehende Kommando: &prompt.root; mount -t cd9660 /dev/cd0 /mnt Die SCSI-Adresse des Brenners können Sie als root wie folgt ermitteln: &prompt.root; camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0) Die SCSI-Adresse 1,0,0 können Sie mit den SCSI-Werkzeugen, zum Beispiel &man.cdrecord.1;, verwenden. Weitere Informationen über das ATAPI/CAM- und das SCSI-System erhalten Sie in den Hilfeseiten &man.atapicam.4; und &man.cam.4;. Marc Fonvieille Beigetragen von Andy Polyakov Mit Beiträgen von DVDs benutzen DVD brennen Einführung Nach der CD ist die DVD die nächste Generation optischer Speichermedien. Auf einer DVD können mehr Daten als auf einer CD gespeichert werden. DVDs werden heutzutage als Standardmedium für Videos verwendet. Für beschreibbare DVDs existieren fünf Medienformate: DVD-R: Dies war das erste verfügbare Format. Das Format wurde vom DVD-Forum festgelegt. Die Medien sind nur einmal beschreibbar. DVD-RW: Dies ist die wiederbeschreibbare Version des DVD-R Standards. Eine DVD-RW kann ungefähr 1000 Mal beschrieben werden. DVD-RAM: Dies ist ebenfalls ein wiederbeschreibbares Format, das vom DVD-Forum unterstützt wird. Eine DVD-RAM verhält sich wie eine Wechselplatte. Allerdings sind die Medien nicht kompatibel zu den meisten DVD-ROM-Laufwerken und DVD-Video-Spielern. DVD-RAM wird nur von wenigen Brennern unterstützt. Wollen Sie DVD-RAM einsetzen, sollten Sie lesen. DVD+RW: Ist ein wiederbeschreibbares Format, das von der DVD+RW Alliance festgelegt wurde. Eine DVD+RW kann ungefähr 1000 Mal beschrieben werden. DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des DVD+RW Formats. Auf einer einfach beschichteten DVD können 4.700.000.000 Bytes gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind 1024 Bytes). Die physischen Medien sind unabhängig von der Anwendung. Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf irgendein Medium (zum Beispiel DVD-R, DVD+R oder DVD-RW) geschrieben werden kann. Bevor Sie ein Medium auswählen, müssen Sie sicherstellen, dass der Brenner und der DVD-Spieler (ein Einzelgerät oder ein DVD-ROM-Laufwerk eines Rechners) mit dem Medium umgehen können. Konfiguration Das Programm &man.growisofs.1; beschreibt DVDs. Das Kommando ist Teil der Anwendung dvd+rw-tools (sysutils/dvd+rw-tools). dvd+rw-tools kann mit allen DVD-Medien umgehen. Um die Geräte anzusprechen, brauchen die Werkzeuge das SCSI-Subsystem. Daher muss der Kernel den ATAPI/CAM-Treiber zur Verfügung stellen. Der Treiber ist mit USB-Brennern nutzlos; die Konfiguration von USB-Geräten behandelt . Für ATAPI-Geräte müssen Sie ebenfalls DMA-Zugriffe aktivieren. Fügen Sie dazu die nachstehende Zeile in die Datei /boot/loader.conf ein: hw.ata.atapi_dma="1" Bevor Sie dvd+rw-tools mit Ihrem DVD-Brenner benutzen, lesen Sie bitte die Hardware-Informationen auf der Seite dvd+rw-tools' hardware compatibility notes. Wenn Sie eine grafische Oberfläche bevorzugen, schauen Sie sich bitte den Port sysutils/k3b an. Der Port bietet eine leicht zu bedienende Schnittstelle zu &man.growisofs.1; und vielen anderen Werkzeugen. Daten-DVDs brennen &man.growisofs.1; erstellt mit dem Programm mkisofs das Dateisystem und brennt anschließend die DVD. Vor dem Brennen brauchen Sie daher kein Abbild der Daten zu erstellen. Wenn Sie von den Daten im Verzeichnis /path/to/data eine DVD+R oder eine DVD-R brennen wollen, benutzen Sie das nachstehende Kommando: &prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data Die Optionen werden an &man.mkisofs.8; durchgereicht und dienen zum Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;. Die Option wird für die erste Aufnahme einer Session benötigt, egal ob Sie eine Multi-Session-DVD brennen oder nicht. Für /dev/cd0 müssen Sie den Gerätenamen Ihres Brenners einsetzen. Die Option schließt das Medium, weitere Daten können danach nicht mehr angehängt werden. Durch die Angabe dieser Option kann das Medium von mehr DVD-ROM-Laufwerken gelesen werden. Sie können auch ein vorher erstelltes Abbild der Daten brennen. Die nachstehende Kommandozeile brennt das Abbild in der Datei imagefile.iso: &prompt.root; growisofs -dvd-compat -Z /dev/cd0=imagefile.iso Die Schreibgeschwindigkeit hängt von den verwendeten Medium sowie dem verwendeten Gerät ab und sollte automatisch gesetzt werden. Falls Sie die Schreibgeschwindigkeit vorgeben möchten, verwenden Sie den Parameter . Weiteres erfahren Sie in der Hilfeseite &man.growisofs.1;. DVD DVD-Video DVD-Videos brennen Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Ein DVD-Video ist auf eine bestimmte Datei-Hierarchie angewiesen. Daher müssen Sie DVDs mit speziellen Programmen wie multimedia/dvdauthor erstellen. Wenn Sie schon ein Abbild des Dateisystems eines DVD-Videos haben, brennen Sie das Abbild wie jedes andere auch. Eine passende Kommandozeile finden Sie im vorigen Abschnitt. Wenn Sie die DVD im Verzeichnis /path/to/video zusammengestellt haben, erstellen Sie das DVD-Video mit dem nachstehenden Kommando: &prompt.root; growisofs -Z /dev/cd0 -dvd-video /path/to/video Die Option wird an &man.mkisofs.8; weitergereicht. Dadurch erstellt &man.mkisofs.8; die Datei-Hierarchie für ein DVD-Video. Weiterhin bewirkt die Angabe von , dass &man.growisofs.1; mit der Option aufgerufen wird. DVD DVD+RW DVD+RW-Medien benutzen Im Gegensatz zu CD-RW-Medien müssen Sie DVD+RW-Medien erst formatieren, bevor Sie die Medien benutzen. Sie sollten &man.growisofs.1; einzetzen, da das Programm Medien automatisch formatiert, wenn es erforderlich ist. Sie können eine DVD+RW aber auch mit dem Kommando dvd+rw-format formatieren: &prompt.root; dvd+rw-format /dev/cd0 Sie müssen das Kommando nur einmal mit neuen Medien laufen lassen. Anschließend können Sie DVD+RWs, wie in den vorigen Abschnitten beschrieben, brennen. Wenn Sie auf einer DVD+RW ein neues Dateisystem erstellen wollen, brauchen Sie die DVD+RW vorher nicht zu löschen. Überschreiben Sie einfach das vorige Dateisystem indem Sie eine neue Session anlegen: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/newdata Mit dem DVD+RW-Format ist es leicht, Daten an eine vorherige Aufnahme anzuhängen. Dazu wird eine neue Session mit der schon bestehenden zusammengeführt. Es wird keine Multi-Session geschrieben, sondern &man.growisofs.1; vergrößert das ISO-9660-Dateisystem auf dem Medium. Das folgende Kommando fügt weitere Daten zu einer vorher erstellten DVD+RW hinzu: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wenn Sie eine DVD+RW erweitern, verwenden Sie dieselben &man.mkisofs.8;-Optionen wie beim Erstellen der DVD+RW. Um die Kompatibilität mit DVD-ROM-Laufwerken zu gewährleisten, wollen Sie vielleicht die Option einsetzen. Zu einem DVD+RW-Medium können Sie mit dieser Option auch weiterhin Daten hinzufügen. Wenn Sie das Medium aus irgendwelchen Gründen doch löschen müssen, verwenden Sie den nachstehenden Befehl: &prompt.root; growisofs -Z /dev/cd0=/dev/zero DVD DVD-RW DVD-RW-Medien benutzen Eine DVD-RW kann mit zwei Methoden beschrieben werden: Sequential-Recording oder Restricted-Overwrite. Voreingestellt ist Sequential-Recording. Eine neue DVD-RW kann direkt beschrieben werden; sie muss nicht vorher formatiert werden. Allerdings muss eine DVD-RW, die mit Sequential-Recording aufgenommen wurde, zuerst gelöscht werden, bevor eine neue Session aufgenommen werden kann. Der folgende Befehl löscht eine DVD-RW im Sequential-Recording-Modus: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Das vollständige Löschen () dauert mit einem 1x Medium ungefähr eine Stunde. Wenn die DVD-RW im Disk-At-Once-Modus (DAO) aufgenommen wurde, kann Sie mit der Option schneller gelöscht werden. Um eine DVD-RW im DAO-Modus zu brennen, benutzen Sie das folgende Kommando: &prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso Die Option sollte nicht erforderlich sein, da &man.growisofs.1; den DAO-Modus erkennt. Der Restricted-Overwrite-Modus sollte mit jeder DVD-RW verwendet werden, da er flexibler als der voreingestellte Sequential-Recording-Modus ist. Um Daten auf eine DVD-RW im Sequential-Recording-Modus zu schreiben, benutzen Sie dasselbe Kommando wie für die anderen DVD-Formate: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/data Wenn Sie weitere Daten zu einer Aufnahme hinzufügen wollen, benutzen Sie die Option von &man.growisofs.1;. Werden die Daten im Sequential-Recording-Modus hinzugefügt, wird eine neue Session erstellt. Das Ergebnis ist ein Multi-Session-Medium. Eine DVD-RW im Restricted-Overwrite-Modus muss nicht gelöscht werden, um eine neue Session aufzunehmen. Sie können das Medium einfach mit der Option überschreiben, ähnlich wie bei DVD+RW. Mit der Option können Sie das ISO-9660-Dateisystem, wie mit einer DVD+RW, vergrößern. Die DVD enthält danach eine Session. Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus einzustellen: &prompt.root; dvd+rw-format /dev/cd0 Das folgende Kommando stellt den Modus wieder auf Sequential-Recording zurück: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Multi-Session Nur wenige DVD-ROM-Laufwerke können Multi-Session-DVDs lesen. Meist lesen die Spieler nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und DVD-RW im Sequential-Recording-Modus unterstützt. Im Modus Restricted-Overwrite gibt es nur eine Session. Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende Kommando eine neue Session auf einer DVD+R, DVD-R oder DVD-RW im Sequential-Recording-Modus: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wird diese Kommandozeile mit DVD+RW- oder DVD-RW-Medien im Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten der bestehenden Session zusammengeführt. Das Medium enthält danach eine Session. Auf diesem Weg werden neue Daten zu einer bestehenden Session hinzugefügt. Für den Anfang und das Ende einer Session wird auf dem Medium zusätzlicher Platz verbraucht. Um den Speicherplatz auf dem Medium optimal auszunutzen, sollten Sie daher Sessions mit vielen Daten hinzufügen. Auf ein DVD+R-Medium passen maximal 154 Sessions, 2000 Sessions auf ein DVD-R-Medium und 127 Sessions auf eine DVD+R Double Layer. Weiterführendes Das Kommando dvd+rw-mediainfo /dev/cd0 zeigt Informationen über eine im Laufwerk liegende DVD an. Weiteres zu den dvd+rw-tools lesen Sie bitte in der Hilfeseite &man.growisofs.1;, auf der dvd+rw-tools Web-Seite oder in den Archiven der cdwrite-Mailingliste. DVD-RAM DVD DVD-RAM Konfiguration DVD-RAM-fähige Brenner werden sowohl mit SCSI- als auch mit ATAPI-Schnittstelle angeboten. Verwenden Sie ein ATAPI-Gerät, müssen Sie den DMA-Modus aktivieren. Dazu fügen Sie die folgende Zeile in /boot/loader.conf ein: hw.ata.atapi_dma="1" Das Medium vorbereiten Wie weiter oben in diesem Kapitel bereits erwähnt, kann man eine DVD-RAM mit einer Wechselplatte vergleichen. Wie diese muss auch eine DVD-RAM vor dem ersten Einsatz vorbereitet werden. In unserem Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem formatiert. Dazu geben Sie als root bei eingelegter DVD-RAM die folgenden Befehle ein: &prompt.root; dd if=/dev/zero of=/dev/acd0 count=2 &prompt.root; bsdlabel -Bw acd0 &prompt.root; newfs /dev/acd0 Denken Sie dabei daran, dass Sie gegebenenfalls die Gerätedatei (hier acd0) an Ihre Konfiguration anpassen müssen. Das Medium einsetzen Nachdem Sie das Medium vorbereitet haben, können Sie das DVD-RAM-Medium in Ihren Verzeichnisbaum einhängen: &prompt.root; mount /dev/acd0 /mnt Danach können Sie schreibend und lesend auf das Medium zugreifen. Julio Merino Original von Martin Karlsson Umgeschrieben von Disketten benutzen Disketten sind nützlich, wenn kein anderes bewegliches Speichermedium vorhanden ist oder wenn nur kleine Datenmengen transferiert werden sollen. Dieser Abschnitt beschreibt die Handhabung von Disketten unter FreeBSD. Hauptsächlich geht es um die Formatierung und Benutzung von 3,5 Zoll Disketten, doch lassen sich die Konzepte leicht auf Disketten anderer Formate übertragen. Disketten formatieren Die Gerätedateien Wie auf jedes andere Gerät auch, greifen Sie auf Disketten über Einträge im Verzeichnis /dev zu. Verwenden Sie dazu die Einträge /dev/fdN. Formatierung Bevor eine Diskette benutzt werden kann, muss Sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Es ist möglich, die Kapazität der Diskette zu verändern, allerdings sind die meisten Disketten auf 1440 kB ausgelegt. Mit &man.fdformat.1; formatieren Sie eine Diskette. Das Kommando erwartet die Angabe eines Gerätenamens. Achten Sie bei der Formatierung auf Fehlermeldungen, die schlechte Speichermedien anzeigen. Disketten formatieren Die Disketten werden mithilfe der Gerätedatei /dev/fdN formatiert. Legen Sie eine 3,5 Zoll Diskette in Ihr Laufwerk ein und führen das folgende Kommando aus: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 Das Disklabel Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden. Das Disklabel wird später zerstört, ist aber notwendig, um die Größe und Geometrie der Diskette zu erkennen. Das Disklabel gilt für die ganze Diskette und enthält alle Informationen über die Geometrie der Diskette. Eine Liste der möglichen Geometrien finden Sie in /etc/disktab. Erstellen Sie nun das Label mit &man.bsdlabel.8;: &prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440 Das Dateisystem Auf der Diskette muss nun ein Dateisystem erstellt werden (high-level Formatierung), damit FreeBSD von der Diskette lesen und auf sie schreiben kann. Das Disklabel wird durch das Anlegen eines Dateisystems zerstört. Falls Sie die Diskette später erneut formatieren wollen, müssen Sie dann auch ein neues Disklabel anlegen. Sie können entweder UFS oder FAT als Dateisystem verwenden. Für Floppies ist FAT das beste Dateisystem. Das folgende Kommando legt ein Dateisystem auf der Diskette an: &prompt.root; /sbin/newfs_msdos /dev/fd0 Die Diskette kann nun benutzt werden. Verwenden der Diskette Zum Einhägen der Diskette in das Dateisystem verwenden Sie den Befehl &man.mount.msdosfs.8;. Sie können auch den Port emulators/mtools verwenden, um mit der Diskette zu arbeiten. Bandmedien benutzen Bandmedien Die wichtigsten Bandmedien sind 4mm, 8mm, QIC, Mini-Cartridge und DLT. 4mm (DDS: Digital Data Storage) Bandmedien DDS (4mm) Bänder Bandmedien QIC Bänder Die 4mm-Bänder ersetzen mehr und mehr das QIC-Format als Backupmedium der Wahl für Workstations. Dieser Trend nahm stark zu, als Conner die Firma Archive, einen führenden Hersteller von QIC-Laufwerken, aufkaufte und die Produktion von QIC-Laufwerken stoppte. 4mm-Laufwerke sind klein und ruhig, haben aber nicht den gleichen Ruf der Zuverlässigkeit, den die 8mm-Laufwerke genießen. Die 4mm-Kassetten sind preiswerter und mit den Maßen 76,2 x 50,8 x 12,7 mm (3 x 2 x 0,5 Inch) kleiner als die 8mm-Kassetten. Sowohl die 4mm- als auch die 8mm-Magnetköpfe haben eine relativ kurze Lebensdauer, weil beide die gleiche Helical-Scan-Technik benutzen. Der Datendurchsatz dieser Laufwerke beginnt bei etwa 150 kByte/s, Spitzenwerte liegen bei etwa 500 kByte/s. Die Datenkapazität liegt zwischen 1,3 GB und 2 GB. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Es gibt Multi-Drive-Einheiten für Bandbibliotheken mit bis zu 6 Laufwerken in einem Gehäuse und automatischem Bandwechsel. Die Kapazität einer solchen Bibliothek liegt bei 240 GB. Der Standard DDS-3 unterstützt nun Bandkapazitäten bis zu 12 GB (oder komprimiert 24 GB). 4mm-Laufwerke, ebenso wie 8mm-Laufwerke, verwenden Helical-Scan. Alle Vor- und Nachteile von Helical-Scan gelten sowohl für 4mm- als auch für 8mm-Laufwerke. Bänder sollten nach 2.000 Banddurchläufen oder 100 vollen Backups ersetzt werden. 8mm (Exabyte) Bandmedien Exabyte (8mm) Bänder 8mm-Bänder sind die verbreitetsten SCSI-Bandlaufwerke; sie sind das geeignetste Bandformat zum Austausch von Bändern. Fast an jedem Standort gibt es ein 8mm-Bandlaufwerk mit 2 GB. 8mm-Bänder sind zuverlässig, gut zu handhaben und arbeiten leise. Bandkassetten sind preiswert und klein mit 122 x 84 x 15 mm (4,8 x 3,3 x 0,6 Inch). Ein Nachteil der 8mm-Technik ist die relativ kurze Lebensdauer des Schreib-/Lesekopfs und der Bänder auf Grund der hohen Relativgeschwindigkeit des Bandes über die Köpfe hinweg. Der Datendurchsatz liegt ungefähr zwischen 250 kByte/s und 500 kByte/s. Die Datenkapazität beginnt bei 300 MB und erreicht bis zu 7 GB bei den Spitzengeräten. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Diese Laufwerke sind erhältlich in Form von Einzelgeräten oder als Multi-Drive-Bandbibliotheken mit 6 Laufwerken und 120 Bändern in einem Gehäuse. Die Bänder werden von der Geräteeinheit automatisch gewechselt. Die Kapazität einer solchen Bibliothek liegt bei 840 GB und mehr. Das Exabyte-Modell Mammoth unterstützt 12 GB auf einem Band (24 GB mit Kompression) und kostet etwa doppelt so viel wie ein konventionelles Bandlaufwerk. Die Daten werden mittels Helical-Scan auf das Band aufgezeichnet, die Köpfe sind leicht schräg zum Medium angebracht (mit einem Winkel von etwa 6 Grad). Das Band wickelt sich 270 Grad um die Spule, die die Köpfe trägt. Die Spule dreht sich, während das Band darüberläuft. Das Resultat ist eine hohe Datendichte und eng gepackte Spuren, die von einem Rand des Bands zum gegenüberliegenden quer über das Band abgewinkelt verlaufen. QIC Bandmedien QIC-150 QIC-150-Bänder und -Laufwerke sind wohl der am weitesten verbreitete Bandtyp überhaupt. QIC-Bandlaufwerke sind die preiswertesten seriösen Backupgeräte, die angeboten werden. Der Nachteil dabei ist der hohe Preis der Bänder. QIC-Bänder sind im Vergleich zu 8mm- oder 4mm-Bändern bis zu fünf Mal teurer, wenn man den Preis auf 1 GB Datenkapazität umrechnet. Aber wenn Ihr Bedarf mit einem halben Dutzend Bänder abgedeckt werden kann, mag QIC die richtige Wahl sein. QIC ist der gängigste Bandlaufwerkstyp. Jeder Standort hat ein QIC-Laufwerk der einen oder anderen Dichte. Aber gerade das ist der Haken an der Sache, QIC bietet eine große Anzahl verschiedener Datendichten auf physikalisch ähnlichen (manchmal gleichen) Bändern. QIC-Laufwerke sind nicht leise. Diese Laufwerke suchen lautstark die richtige Bandstelle, bevor sie mit der Datenaufzeichnung beginnen. Sie sind während des Lesens, Schreibens und Suchens deutlich hörbar. Die Abmessungen der QIC-Kassetten betragen 152 x 102 x 17 mm (6 x 4 x 0,7 Inch). Der Datendurchsatz liegt ungefähr zwischen 150 kByte/s und 500 kByte/s. Die Datenkapazität reicht von 40 MB bis zu 15 GB. Hardwarekompression ist in vielen der neueren QIC-Laufwerke eingebaut. QIC-Laufwerke werden heute seltener eingesetzt; sie werden von den DAT-Laufwerken abgelöst. Die Daten werden auf dem Band in Spuren aufgezeichnet. Die Spuren verlaufen entlang der Längsachse des Bandmediums von einem Ende zum anderen. Die Anzahl der Spuren, und damit auch die Breite einer Spur, variiert mit der Kapazität des Laufwerks. Die meisten, wenn nicht alle neueren Laufwerke sind rückwärtskompatibel, zumindest zum Lesen (aber oft auch zum Schreiben). QIC hat einen guten Ruf bezüglich der Datensicherheit (die Mechanik ist einfacher und robuster als diejenige der Helical-Scan-Laufwerke). Bänder sollten nach 5,000 Backups ersetzt werden. DLT Bandmedien DLT DLT hat die schnellste Datentransferrate von allen hier aufgelisteten Gerätetypen. Das 1/2-Inch-Band (12,7 mm) befindet sich in einer Spulkassette mit den Abmessungen 101,6 x 101,6 x 25,4 mm (4 x 4 x 1 Inch). Die eine Seite der Kassette hat eine bewegliche Abdeckung. Der Laufwerksmechanismus öffnet diese Abdeckung und zieht die Bandführung heraus. Die Bandführung trägt ein ovales Loch, die das Laufwerk zum Einhängen des Bandes benutzt. Die Aufwickelspule befindet sich im Innern des Bandlaufwerks. Bei allen anderen hier besprochenen Bandkassetten (9-Spur-Bänder sind die einzige Ausnahme) befinden sich sowohl die Auf- als auch die Abwickelspule im Inneren der Bandkassette. Der Datendurchsatz liegt bei etwa 1,5 MBytes/s, der dreifache Durchsatz der 4mm-, 8mm- oder QIC-Bandlaufwerke. Die Datenkapazität reicht von 10 GB bis 20 GB für Einfachlaufwerke. Auch Mehrfachbandgeräte sind erhältlich, sowohl als Bandwechsler wie auch als Multi-Drive-Bandbibliotheken, die Platz für 5 bis 900 Bänder verteilt auf 1 bis 20 Laufwerke enthalten, mit einer Speicherkapazität von 50 GB bis 9 TB. Mit Kompression unterstützt das Format DLT Type IV bis zu 70 GB Kapazität. Die Daten werden auf dem Band in Spuren aufgezeichnet, die parallel zur Bewegungsrichtung verlaufen (gerade so wie bei den QIC-Bändern). Zwei Spuren werden dabei gleichzeitig beschrieben. Die Lebenszeit der Lese- und Schreibköpfe sind relativ lang; denn sobald das Band anhält, gibt es keine Relativbewegung mehr zwischen den Köpfen und dem Band. AIT Bandmedien AIT AIT ist ein neues Format von Sony, das (mit Kompression) bis zu 50 GB pro Band speichern kann. Die Bänder haben einen Speicherchip, der einen Index mit dem Inhalt des Bandes anlegt. Dieser Index kann vom Bandlaufwerk zur schnellen Bestimmung der Lage von Dateien auf dem Band benutzt werden, während andere Bänder einige Minuten zur Lokalisierung benötigen. Entsprechende Software wie etwa SAMS:Alexandria können 40 oder mehr AIT-Bandbibliotheken verarbeiten, indem sie direkt mit dem Speicherchip des Bandes kommunizieren, wenn der Bandinhalt am Bildschirm dargestellt werden soll oder bestimmt werden soll, welche Dateien auf welchem Band gespeichert sind, oder um das richtige Band zu lokalisieren, zu laden und Daten vom Band zurückzuspielen. Bibliotheken dieser Art liegen in der Preiskategorie von $20,000, womit sie etwas aus dem Hobbymarkt herausfallen. Die erste Benutzung eines neuen Bands Der Versuch ein neues, vollkommen leeres Band ohne weiteres zu lesen oder zu beschreiben wird schief gehen. Auf der Konsole werden dann Meldungen ähnlich wie folgt ausgegeben: sa0(ncr1:4:0): NOT READY asc:4,1 0(ncr1:4:0): Logical unit is in process of becoming ready Das Band enthält nämlich keinen Identifier-Block (Blocknummer 0). Alle QIC-Bandlaufwerke seit der Einführung des QIC-525-Standards schreiben einen Identifier-Block auf das Band. Es gibt zwei Lösungen: mt fsf 1 veranlasst das Bandlaufwerk einen Identifier-Block auf das Band zu schreiben. Das Band durch Drücken des Bandauswurfknopfs an der Vorderseite des Bandgeräts auswerfen. Danach das Band wieder einlegen und mit dump Daten auf das Band übertragen. Das Kommando dump gibt die Meldung DUMP: End of tape detected zurück und die Konsole zeigt: HARDWARE FAILURE info:280 asc:80,96. Das Band zurückspulen mit dem Kommando: mt rewind. Nachfolgende Bandoperationen werden dann erfolgreich ausgeführt. Was ist mit Backups auf Disketten? Kann ich Disketten zum Backup meiner Daten verwenden? Backup Disketten Disketten Disketten sind kein wirklich geeignetes Medium für Backups aus folgenden Gründen: Disketten sind unzuverlässig, besonders langfristig. Speichern und Wiederherstellen ist sehr langsam. Sie haben eine sehr eingeschränkte Kapazität (Die Zeiten sind längst vorbei, wo eine ganze Festplatte auf ein Dutzend Floppies oder so gespeichert werden konnte). Wenn jedoch keine andere Möglichkeit zum Datenbackup vorhanden ist, dann sind Disketten immer noch besser als gar kein Backup. Wenn man gezwungen ist Disketten zu verwenden, dann sollte man auf eine gute Qualität achten. Floppies, die schon einige Jahre im Büro herumgelegen haben, sind eine schlechte Wahl. Ideal sind neue Disketten von einem renommierten Hersteller. Wie mache ich ein Backup auf Disketten? Die beste Art eines Diskettenbackups ist der Befehl &man.tar.1; mit der Mehrfachband-Option , die es ermöglicht ein Backup über mehrere Floppies zu verteilen. Ein Backup aller Dateien im aktuellen Verzeichnis einschließlich aller Unterverzeichnisse wird durch den folgenden Befehl veranlasst (als root): &prompt.root; tar Mcvf /dev/fd0 * Wenn die erste Floppy voll ist, meldet sich &man.tar.1; und verlangt einen Diskettenwechsel (weil &man.tar.1; unabhängig vom Medium arbeitet, wird das nächste Band (Volume) verlangt, was in diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt: Prepare volume #2 for /dev/fd0 and hit return: Dies wird mit steigender Volumenzahl wiederholt, bis alle angegebenen Dateien archiviert sind. Können Diskettenbackups komprimiert werden? tar gzip Kompression Leider erlaubt es &man.tar.1; nicht, die Option für Multi-Volume-Archive zu verwenden. Man kann natürlich alle Dateien mit &man.gzip.1; komprimieren, sie mit &man.tar.1; auf die Floppies aufspielen, und dann die Dateien wieder &man.gunzip.1; entkomprimieren! Wie werden Diskettenbackups wieder hergestellt? Zur Wiederherstellung des gesamten Archivs verwendet man: &prompt.root; tar Mxvf /dev/fd0 Eine Methode um nur bestimmte Dateien wieder her zu stellen ist mit der ersten Diskette den folgenden Befehl auszuführen: &prompt.root; tar Mxvf /dev/fd0 filename &man.tar.1; wird dann die folgenden Disketten anfordern, bis die benötigte Datei gefunden ist. Wenn man die Diskette kennt, auf der sich die Datei befindet, kann man alternativ diese Diskette auch direkt einlegen und den gleichen Befehl wie oben verwenden. Man beachte, dass, falls die erste Datei eine Fortsetzung einer Datei von einer der vorigen Disketten ist, &man.tar.1; die Warnung ausgibt, dass diese Datei nicht wiederhergestellt werden kann, selbst dann, wenn dies gar nicht verlangt wurde! Lowell Gilbert Beigetragen von Backup-Strategien Wenn Sie eine eigene Backup-Strategie planen, müssen Sie darauf achten, dass jedes der folgenden Probleme von Ihrer Strategie abgedeckt wird: Plattendefekte. Versehentliches Löschen von Dateien. Eine nicht vorhersehbare Korrumpierung von Dateien. Die vollständige Zerstörung Ihres Systems, etwa durch ein Feuer. Dazu gehört auch die Zerstörung von Backups, die am gleichen Ort aufbewahrt werden. Es ist nicht nur möglich, dass ein System für jedes dieser Probleme eine eigene (oft völlig unterschiedliche) Strategie benötigt. Es ist vielmehr unwahrscheinlich (sieht man von Systemen ab, die keine wichtigen Daten enthalten), dass eine Technik alle Problembereiche abdecken kann. Häufig verwendeten Techniken sind unter anderen: Die Archivierung des kompletten Systems auf externen Datenträgern, die an einem gesonderten Ort aufbewahrt werden. Dieser Ansatz schützt zwar vor allen oben angeführten Problemen, ist aber zeitaufwändig. Auch eine Wiederherstellung des Systems ist nicht ohne weiteres möglich. Zwar können Sie Kopien Ihrer Backups auch vor Ort und/oder auf online zugängigen Systemen aufbewahren, was aber nichts daran ändert, dass eine Wiederherstellung, insbesondere für nicht privilegierte Benutzer, nach wie vor nicht ohne weiteres möglich ist. Dateisystem-Snapshots. Diese Technik hilft zwar nur gegen das versehentliche Löschen von Dateien, in einem solchen Fall ist sie aber äußerst hilfreich. Vorteile dieser Technik sind außerdem die leichte und schnelle Implementierung und Handhabung. Das Erstellen von Kopien ganzer Dateisysteme und/oder Platten (etwa durch einen periodischen &man.rsync.1;-Transfer des kompletten Systems). Diese Technik ist insbesondere in Netzwerken mit besonderen Anforderungen nützlich. Der Schutz vor Plattendefekten ist allerdings schlechter als beim Einsatz von RAID. Die Fähigkeiten zur Wiederherstellung gelöschter Dateien sind mit denen von UFS-Snapshots vergleichbar. Ob diese Technik für Sie geeignet ist, hängt also letztlich von Ihren Anforderungen ab. RAID. Minimiert oder vermeidet Ausfallzeiten, die durch einen Plattendefekt verursacht werden könnten. Zwar können Plattendefekte (aufgrund der höheren Anzahl verwendeter Platten) häufiger auftreten, sie stellen aber dann kein so akutes Problem dar. Das Überprüfen von Datei-Fingerprints durch &man.mtree.8;. Dabei handelt es sich zwar um keine Backup-Technik im eigentlichen Sinne, Sie werden durch den Einsatz dieser Werkzeugs aber informiert, dass Sie auf Ihre Backups zurückgreifen müssen. Dies ist insbesondere beim Einsatz von Offline-Backups von großer Bedeutung. Daher sollte diese Technik regelmäßig eingesetzt werden. Es gibt noch zahlreiche weitere Techniken, von denen aber viele nur Variationen der eben beschriebenen Techniken sind. Spezielle Anforderungen erfordern dabei in der Regel auch spezielle Backup-Techniken (so erfordert das Backup einer aktiven Datenbank in der Regel ein auf die eingesetzte Datenbank-Software abgestimmtes Verfahren). Entscheidend ist daher immer, gegen welche Gefahren Sie sich schützen und wie Sie diesen Schutz realisieren wollen. Datensicherung Die drei wichtigsten Programme zur Sicherung von Daten sind &man.dump.8;, &man.tar.1; und &man.cpio.1;. Sichern und Wiederherstellen Datensicherung Backup Backup-Software dump Backup-Software restore dump restore dump und restore sind die traditionellen Backupprogramme in &unix; Systemen. Sie betrachten das Laufwerk als eine Ansammlung von Blöcken, operieren also unterhalb dem Abstraktionslevel von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. dump sichert ein ganzes Dateisystem auf einem Gerät, es ist nicht möglich nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst zu sichern. dump schreibt keine Dateien oder Verzeichnisse auf das Band, sondern die Blöcke, aus denen Dateien und Verzeichnisse bestehen. Wenn Sie mit dump das Root-Verzeichnis sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind. dump hat einige Eigenarten, die noch aus den frühen Tagen der Version 6 von AT&T UNIX (ca. 1975) stammen. Die Parameter sind für 9-Spur-Bänder (6250 bpi) voreingestellt, nicht auf die heute üblichen Medien hoher Dichte (bis zu 62.182 ftpi). Bei der Verwendung der Kapazitäten moderner Bandlaufwerke muss diese Voreinstellung auf der Kommandozeile überschrieben werden. .rhosts rdump und rrestore können Daten über Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen Computers befindet, überspielen. Beide Programme benutzen die Funktionen &man.rcmd.3; und &man.ruserok.3; zum Zugriff auf das entfernte Bandlaufwerk. Daher muss der Anwender, der das Backup durchführt, auf dem entfernten Rechner in .rhosts eingetragen sein. Die Argumente zu rdump und rrestore müssen zur Verwendung auf dem entfernten Computer geeignet sein. Wenn Sie zum Beispiel mit rdump von einem FreeBSD-Rechner aus auf ein Exabyte-Bandlaufwerk einer Sun mit Namen komodo zugreifen möchten, setzen Sie das folgende Kommando ab: &prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1 Zum Ausführen dieses Kommandos müssen Sie auf dem entfernten Rechner in .rhosts eingetragen sein. Die r-Kommandos sind ein großes Sicherheitsrisiko, daher sollten Sie deren Verwendung sorgfältig abwägen. Es ist auch möglich, dump und restore über eine gesicherte Verbindung mit ssh einzusetzen: <command>dump</command> mit <application>ssh</application> benutzen &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz Sie können ebenfalls mit der internen Methode von dump auf entfernte Rechner zugreifen, indem Sie die Umgebungsvariable RSH setzen: <command>dump</command> über <application>ssh</application> mit gesetzter <envar>RSH</envar> benutzen &prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr <command>tar</command> Backup-Software tar &man.tar.1; stammt ebenfalls aus Version 6 von AT&T UNIX (ca. 1975). tar arbeitet mit dem Dateisystem, denn es schreibt Dateien und Verzeichnisse auf das Band. tar unterstützt zwar nicht alle Optionen, die bei &man.cpio.1; zur Verfügung stehen, aber dafür erfordert es auch nicht die ungewöhnliche Kommando-Pipeline, die von cpio verwendet wird. tar Seit FreeBSD 5.3 sind sowohl GNU tar als auch bsdtar verfügbar. Die GNU-Version starten Sie über gtar. Sie unterstützt auch entfernte Geräte, wobei die von rdump benutzte Syntax übernommen wurde. Um Daten mit tar auf ein an einer Sun-Workstation (namens komodo) angeschlossenes Exabyte-Bandlaufwerk zu archivieren, geben Sie Folgendes ein: &prompt.root; /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1 Alternativ können Sie für diese Sicherung auch bsdtar verwenden, indem Sie die Daten über eine Pipeline und rsh an das entfernte Laufwerk senden: &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b Wenn Sie Bedenken bezüglich der Sicherheit beim Backup über das Netz haben, sollten Sie ssh anstatt rsh benutzen. Cpio Backup-Software cpio cpio &man.cpio.1; ist das ursprüngliche Programm von &unix; Systemen zum Dateitransfer mit magnetischen Medien. cpio hat (neben vielen anderen Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben einer Anzahl verschiedener Archivformate und zum Weiterleiten von Daten an andere Programme über eine Pipeline. Dieses letzte Leistungsmerkmal macht cpio zu einer ausgezeichneten Wahl für Installationsmedien. Leider kann cpio keine Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden Dateien über stdin angegeben werden muss. cpio unterstützt keine Backups über das Netzwerk. Man kann aber eine Pipeline und rsh verwenden, um Daten an ein entferntes Bandlaufwerk zu senden. &prompt.root; for f in directory_list; do find $f >> backup.list done &prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device" Dabei steht directory_list für eine Aufzählung der Verzeichnisse, die Sie sichern wollen. user@host gibt den Benutzer auf dem Zielrechner an, der die Sicherung laufen lässt. Der Ort der Sicherung wird durch backup_device angegeben (z.B. /dev/nsa0). <command>pax</command> Backup-Software pax pax POSIX IEEE &man.pax.1; ist die Antwort von IEEE/&posix; auf tar und cpio. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat &posix;, statt eine Standardisierung zwischen diesen auszufechten, ein neues Archivprogramm geschaffen. pax versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Die Kommandostruktur ähnelt eher cpio als tar. <application>Amanda</application> Backup-Software Amanda Amanda Amanda (Advanced Maryland Network Disk Archiver) ist ein Client/Server-Backupsystem, nicht nur ein einzelnes Programm. Ein Amanda-Server kann auf einem einzigen Bandlaufwerk Datensicherungen von jeder beliebigen Anzahl von Computern speichern, sofern auf diesen jeweils ein Amanda-Client läuft und sie über Netzwerk mit dem Amanda-Server verbunden sind. Ein häufiges Problem bei Standorten mit einer Anzahl großer Festplatten ist, dass das Kopieren der Daten auf Band langsamer vor sich geht als solche Daten anfallen. Amanda löst dieses Problem durch Verwendung einer Holding Disk, einer Festplatte zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme. Für Datensicherungen über einen längeren Zeitraum erzeugt Amanda Archivsets von allen Dateisystemen, die in Amandas Konfigurationsdatei genannt werden. Ein Archivset ist eine Gruppe von Bändern mit vollen Backups und Reihen von inkrementellen (oder differentiellen) Backups, die jeweils nur die Unterschiede zum vorigen Backup enthalten. Zur Wiederherstellung von beschädigten Dateisystemen benötigt man Das Letzte volle Backup und alle darauf folgenden inkrementellen Backups. Die Konfigurationsdatei ermöglicht die Feineinstellung der Backups und des Netzwerkverkehrs von Amanda. Amanda kann zum Schreiben der Daten auf das Band jedes der oben beschriebenen Backuprogramme verwenden. Amanda ist nicht Teil des Basissystems, Sie müssen Amanda über die Ports-Sammlung oder als Paket installieren. Tue nichts Tue nichts ist kein Computerprogramm, sondern die am häufigsten angewendete Backupstrategie. Diese kostet nichts, man muss keinen Backupplan befolgen, einfach nur nein sagen. Wenn etwas passiert, einfach grinsen und ertragen! Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist die Strategie Tue nichts das geeignetste Backupprogramm für Ihren Computer. Aber &unix; ist ein nützliches Werkzeug, Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten eine Sammlung von Dateien haben, die für Sie wertvoll geworden sind. Tue nichts ist die richtige Backupmethode für /usr/obj und andere Verzeichnisbäume, die vom Computer exakt wiedererzeugt werden können. Ein Beispiel sind die Dateien, die diese Handbuchseiten darstellen – sie wurden aus Quelldateien im Format SGML erzeugt. Es ist nicht nötig, Sicherheitskopien der Dateien in den sekundären Formaten wie etwa HTML zu erstellen. Die Quelldateien in SGML sollten jedoch in die regelmäßigen Backups mit einbezogen werden. Welches Backup-Programm ist am Besten? LISA dump, Punkt und Schluss. Elizabeth D. Zwicky hat alle hier genannten Backup-Programme bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur Sicherung aller Daten mit Berücksichtigung aller Besonderheiten von &unix; Dateisystemen ist dump. Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt ungewöhnlicher Bedingungen (und einiger gar nicht so ungewöhnlicher) und testete jedes Programm durch ein Backup und eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten waren Dateien mit Löchern, Dateien mit Löchern und einem Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im Dateinamen, unlesbare und nichtschreibbare Dateien, Gerätedateien, Dateien, deren Länge sich während des Backups ändert, Dateien, die während des Backups erzeugt und gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse in LISA V im Oktober 1991, s. Torture-testing Backup and Archive Programs. Die Wiederherstellung in einem Notfall Vor dem Unglück Es sind nur vier Vorkehrungen zu treffen, um auf jedes erdenkliche Unglück vorbereitet zu sein. bsdlabel Als erstes drucken Sie das bsdlabel jeder Ihrer Festplatten (z.B. mittels bsdlabel da0 | lpr), die Partitions- und Dateisystemtabelle jeder Festplatte (mit /etc/fstab) sowie alle Bootmeldungen, jeweils in zweifacher Ausfertigung. fix-it floppies Zweitens, überzeugen Sie sich, dass sowohl die Bootdiskette als auch die Reparaturdiskette (boot.flp bzw. fixit.flp) all Ihre Geräte ansprechen können. Die einfachste Methode dies nachzuprüfen ist, Ihren Rechner mit der Boot-Diskette im Floppylaufwerk neu zu starten und die Bootmeldungen zu durchzusehen. Wenn all Ihre Geräte aufgelistet sind und funktionieren, können Sie weiter zu Schritt drei gehen. Ist das nicht der Fall, müssen Sie sich eine eigene Version der beiden zum Booten benötigten Disketten erstellen. Diese müssen einen Kernel enthalten, der all Ihre Platten mounten kann und Zugriff auf Ihr Bandlaufwerk gestattet. Diese Disketten müssen ferner folgende Programme enthalten: fdisk, bsdlabel, newfs, mount sowie jedes Backup-Programm, das Sie verwenden. Diese Programme müssen statisch gelinkt sein. Falls Sie dump verwenden, muss die Diskette auch restore enthalten. Drittens, machen Sie oft Backups auf Band. Jede Änderung seit Ihrem letzten Backup kann unwiederbringlich verloren gehen. Versehen Sie die Backup-Bänder mit Schreibschutz. Viertens, testen Sie aus, wie die Disketten (entweder boot.flp und fixit.flp oder Ihre beiden eigenen Disketten aus Schritt zwei) und die Bänder mit den Backups zu behandeln sind. Machen Sie sich Notizen zu diesem Test. Bewahren Sie diese Notizen zusammen mit den Bootdisketten, den Ausdrucken und den Bändern mit den Backups auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt sein, dass Sie ohne Ihre Notizen vielleicht das Backup auf Ihren Bändern zerstören. (Wie das geht? Man braucht nur unglücklicherweise den Befehl tar cvf /dev/sa0 einzugeben um ein Band zu überschreiben). Als zusätzliche Sicherheitsvorkehrung, kann man jeweils die Disketten und Bänder zweifach erstellen. Eine der Kopien sollte an einem entfernten Standort aufbewahrt werden. Ein entfernter Standort ist NICHT der Keller im gleichen Bürogebäude. Eine Anzahl von Firmen im World Trade Center musste diese Lektion auf die harte Tour lernen. Ein entfernter Standort sollte von Ihrem Computer und Ihren Festplatten physikalisch durch eine erhebliche Entfernung getrennt sein. Ein Beispielskript zum Erstellen eigener Bootdisketten /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root -cp -f /dev/MAKEDEV /mnt/dev -chmod 755 /mnt/dev/MAKEDEV - chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore -# -# Geraetedateien erstellen -# -cd /mnt/dev -./MAKEDEV std -./MAKEDEV da0 -./MAKEDEV da1 -./MAKEDEV da2 -./MAKEDEV sa0 -./MAKEDEV pty0 -cd / - # # Minimale Dateisystemtabelle erstellen # cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd < Nach dem Unglück Die Schlüsselfrage ist, ob Ihre Hardware überlebt hat. Denn da Sie ja regelmäßig Backups angefertigt haben, brauchen Sie sich um die Software keine Sorgen zu machen. Falls die Hardware beschädigt wurde, ersetzen Sie zuerst die defekten Teile bevor Sie den Computer benutzen. Falls die Hardware funktioniert, überprüfen Sie die Disketten. Wenn Sie eigene Bootdisketten verwenden, booten Sie im Single-User-Modus (geben dazu Sie -s am Boot-Prompt boot: ein). Überspringen Sie den folgenden Paragrafen. Wenn Sie die Standarddisketten boot.flp und fixit.flp verwenden, lesen Sie hier weiter. Legen Sie die Bootdiskette boot.flp in das erste Floppylaufwerk ein und starten Sie den Computer. Wie üblich wird dann das originale Installationsmenü von FreeBSD gestartet. Wählen Sie die Option Fixit--Repair mode with CD-ROM or floppy. Legen Sie die Diskette fixit.flp ein, wenn danach gefragt wird. restore und die anderen Programme, die Sie benötigen, befinden sich dann in /mnt2/rescue (/mnt2/stand vor &os; 5.2). Stellen Sie die Dateisysteme nacheinander, getrennt von einander, wieder her. mount Root-Partition bsdlabel newfs Versuchen Sie die Root-Partition Ihrer ersten Festplatte einzuhängen (z.B. mit mount /dev/sd0a /mnt). Wenn das Bsdlabel beschädigt wurde, benutzen Sie bsdlabel um die Platte neu zu partitionieren und zu benennen und zwar so, dass die Festplatte mit dem Label übereinstimmt, das Sie ausgedruckt und aufbewahrt haben. Verwenden Sie newfs um neue Dateisysteme auf den Partitionen anzulegen. Hängen Sie nun die Root-Partition der Festplatte mit Schreibzugriff ein (mit mount -u -o rw /mnt). Benutzen Sie Ihr Backup-Programm um die Daten für das jeweilige Dateisystem aus den Backup-Bändern wieder her zu stellen (z.B. durch restore vrf /dev/sta). Hängen Sie das Dateisystem wieder aus (z.B. durch umount /mnt). Wiederholen Sie diesen Ablauf für jedes betroffene Dateisystem. Sobald Ihr System wieder läuft, machen Sie gleich wieder ein vollständiges Backup auf neue Bänder. Denn die Ursache für den Absturz oder den Datenverlust kann wieder zuschlagen. Eine weitere Stunde, die Sie jetzt noch dranhängen, kann Ihnen später ein weiteres Missgeschick ersparen. * Ich habe mich nicht auf Missgeschicke vorbereitet - was nun? ]]> Marc Fonvieille Verbessert und neu strukturiert von Netzwerk-, speicher- und dateibasierte Dateisysteme Laufwerke virtuelle Neben Laufwerken, die sich physikalisch im Rechner befinden wie Floppylaufwerke, CDs, Festplatten usw., kann FreeBSD auch mit anderen Laufwerken, den virtuellen Laufwerken, umgehen. NFS Coda Laufwerke speicherbasierte Laufwerke RAM-Disks Dazu zählen Netzwerkdateisysteme wie Network Filesystem und Coda, speicher- und dateibasierte Dateisysteme. Abhängig von der verwendeten FreeBSD Version werden speicher- und dateibasierte Dateisysteme mit unterschiedlichen Werkzeugen angelegt. Gerätedateien werden unter &os; automatisch von &man.devfs.5; angelegt. Dateibasierte Laufwerke unter FreeBSD Laufwerke dateibasierte Unter FreeBSD werden virtuelle Laufwerke (&man.md.4;) mit &man.mdconfig.8; erzeugt. Dazu muss das Modul &man.md.4; geladen sein oder das entsprechende Gerät in der Kernelkonfiguration aktiviert sein: device md Mit &man.mdconfig.8; können drei verschiedene virtuelle Laufwerke angelegt werden: speicherbasierte Laufwerke, deren Speicher von &man.malloc.9; zur Verfügung gestellt wird, oder dateibasierte Laufwerke, deren Speicher von einer Datei oder dem Swap-Bereich zur Verfügung gestellt wird. Eine mögliche Anwendung ist das Einhängen von Dateien, die Abbilder von CD-ROMs oder Floppies enthalten. Das Abbild eines Dateisystems wird wie folgt eingehangen: Einhängen eines existierenden Abbildes unter FreeBSD &prompt.root; mdconfig -a -t vnode -f diskimage -u 0 &prompt.root; mount /dev/md0 /mnt Ein neues Dateisystem-Abbild erstellen Sie mit &man.mdconfig.8; wie folgt: Erstellen eines dateibasierten Laufwerks mit <command>mdconfig</command> &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; mdconfig -a -t vnode -f newimage -u 0 &prompt.root; bsdlabel -w md0 auto &prompt.root; newfs md0a /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. super-block backups (for fsck -b #) at: 160, 2720, 5280, 7840 &prompt.root; mount /dev/md0a /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt Wenn Sie keine Gerätenummer mit dem Schalter angeben, wird von &man.md.4; automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen entnehmen Sie bitte der Hilfeseite &man.mdconfig.8;. Das Werkzeug &man.mdconfig.8; ist sehr nützlich, doch muss man viele Kommandos absetzen, um ein dateibasiertes Dateisystem zu erstellen. FreeBSD enthält das Werkzeug &man.mdmfs.8;, das die notwendigen Schritte in einem Befehl zusammenfasst. Es konfiguriert mit &man.mdconfig.8; ein &man.md.4;-Laufwerk, erstellt darauf mit &man.newfs.8; ein Dateisystem und hängt es anschließend mit &man.mount.8; ein. Das virtuelle Laufwerk aus dem obigen Beispiel kann somit einfach mit den nachstehenden Befehlen erstellt werden: Mit <command>mdmfs</command> ein dateibasiertes Dateisystem erstellen &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; mdmfs -F newimage -s 5m md0 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0 4718 4 4338 0% /mnt Wenn sie die Option ohne Gerätenummer verwenden, wählt &man.md.4; automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten entnehmen Sie bitte der Hilfeseite &man.mdmfs.8;. Speicherbasierte Laufwerke unter FreeBSD Laufwerke speicherbasierte Verwenden Sie ein speicherbasiertes Dateisystem, sollten Sie die Option swap backing aktivieren. Setzen Sie diese Option, heißt dies allerdings nicht, dass das speicherbasierte Laufwerk automatisch auf ihre Festplatte ausgelagert wird, vielmehr wird der Speicherplatz danach aus einem Speicherpool angefordert, der bei Bedarf auf die Platte ausgelagert werden kann. Zusätzlich ist es möglich, &man.malloc.9;-gestützte speicherbasierte Laufwerke zu erstellen. Das Anlegen solcher Laufwerke kann allerdings zu einer System-Panic führen, wenn der Kernel danach über zu wenig Speicher verfügt. Erstellen eines speicherbasierten Laufwerks mit <command>mdconfig</command> &prompt.root; mdconfig -a -t swap -s 5m -u 1 &prompt.root; newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes. with soft updates super-block backups (for fsck -b #) at: 160, 2752, 5344, 7936 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt Erstellen eines speicherbasierten Laufwerks mit <command>mdmfs</command> &prompt.root; mdmfs -s 5m md2 /mnt &prompt.root; df /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt Virtuelle Laufwerke freigeben Laufwerke Freigabe von virtuellen Laufwerken Wenn ein virtuelles Laufwerk nicht mehr gebraucht wird, sollten Sie dem System die belegten Ressourcen zurückgeben. Hängen Sie dazu zuerst das Dateisystem ab und geben Sie dann die benutzten Ressourcen mit &man.mdconfig.8; frei. Alle von /dev/md4 belegten Ressourcen werden mit dem nachstehenden Kommando freigegeben: &prompt.root; mdconfig -d -u 4 Eingerichtete &man.md.4;-Geräte werden mit dem Befehl mdconfig -l angezeigt. Tom Rhodes Beigetragen von Schnappschüsse von Dateisystemen Schnappschüsse von Dateisystemen Zusammen mit Soft Updates bietet FreeBSD eine neue Funktion: Schnappschüsse von Dateisystemen. Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn Sie einen Schnappschuss nicht mehr benötigen, können Sie ihn mit &man.rm.1; löschen. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann. Das unveränderliche -Dateiflag wird nach der Erstellung des Snaphshots von &man.mksnap.ffs.8; gesetzt. Durch die Verwendung von &man.unlink.1; ist es allerdings möglich, einen Schnappschuss zu löschen. Schnappschüsse werden mit &man.mount.8; erstellt. Das folgende Kommando legt einen Schnappschuss von /var in /var/snapshot/snap ab: &prompt.root; mount -u -o snapshot /var/snapshot/snap /var Den Schnappschuss können Sie auch mit &man.mksnap.ffs.8; erstellen: &prompt.root; mksnap_ffs /var /var/snapshot/snap Um einen Schnappschuss auf Ihrem System zu finden, verwenden Sie &man.find.1;: &prompt.root; find /var -flags snapshot Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen: Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine CD oder ein Band schreiben. Sie können den Schnappschuss mit &man.fsck.8; manuell prüfen. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte &man.fsck.8; immer erfolgreich durchlaufen. Der Hintergrund-Prozess &man.fsck.8; hat im Übrigen genau diese Aufgabe. Sie können den Schnappschuss mit &man.dump.8; sichern. Sie erhalten dann eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter von &man.dump.8; erstellt für die Sicherung einen Schnappschuss und entfernt diesen am Ende der Sicherung wieder. Sie können einen Schnappschuss in den Verzeichnisbaum einhängen und sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an dem der Schnappschuss erstellt wurde. Der folgende Befehl hängt den Schnappschuss /var/snapshot/snap ein: &prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4 &prompt.root; mount -r /dev/md4 /mnt Sie können sich nun den eingefrorenen Stand des /var Dateisystems unterhalb von /mnt ansehen. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des Schnappschusses. Wenn Sie den Schnappschuss nicht mehr benötigen, können Sie ihn, wie nachfolgend gezeigt, abhängen: &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 4 Weitere Informationen über Soft Updates und Schnappschüsse von Dateisystemen sowie technische Artikel finden Sie auf der Webseite von Marshall Kirk McKusick. Dateisystem-Quotas Accounting Plattenplatz Disk Quotas Quotas sind eine optionale Funktion des Betriebssystems, die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Oft wird dies auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da es dort erwünscht ist, die Ressourcen, die ein Benutzer oder eine Gruppe von Benutzern belegen können, zu limitieren. Das verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt. Konfiguration des Systems, um Quotas zu aktivieren Bevor Quotas benutzt werden können, müssen sie im Kernel konfiguriert werden, wozu die folgende Zeile der Kernelkonfiguration hinzugefügt wird: options QUOTA Im gewöhnlichen GENERIC Kernel sind Quotas nicht aktiviert, so dass Sie einen angepassten Kernel konfigurieren und bauen müssen, um Quotas zu benutzen. Weitere Informationen finden Sie in . Durch Hinzufügen der folgenden Zeile in /etc/rc.conf wird das Quota-System aktiviert: enable_quotas="YES" Disk Quotas überprüfen Um den Start des Quota-Systems zu beeinflussen, steht eine weitere Variable zur Verfügung. Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit &man.quotacheck.8; überprüft. &man.quotacheck.8; stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein sehr zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es Ihnen, diesen Schritt zu überspringen: check_quotas="NO" Schließlich müssen Sie noch in /etc/fstab die Plattenquotas auf Dateisystemebene aktivieren. Dort können Sie für alle Dateisysteme Quotas für Benutzer, Gruppen oder für beide aktivieren. Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem die Option im Feld Optionen von /etc/fstab an. Beispiel: /dev/da1s2g /home ufs rw,userquota 1 2 Um Quotas für Gruppen einzurichten, verwenden Sie anstelle von . Um Quotas für Benutzer und Gruppen einzurichten, ändern Sie den Eintrag wie folgt ab: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 Die Quotas werden jeweils im Rootverzeichnis des Dateisystems unter dem Namen quota.user für Benutzer-Quotas und quota.group für Gruppen-Quotas abgelegt. Obwohl &man.fstab.5; beschreibt, dass diese Dateien an anderer Stelle gespeichert werden können, wird das nicht empfohlen, da es den Anschein hat, dass die verschiedenen Quota-Utilities das nicht richtig unterstützen. Jetzt sollten Sie Ihr System mit dem neuen Kernel booten. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, die die Quota-Dateien für alle Quotas, die Sie in /etc/fstab definiert haben, anlegen. Deshalb müssen vorher auch keine leeren Quota-Dateien angelegt werden. Normalerweise brauchen Sie die Kommandos &man.quotacheck.8;, &man.quotaon.8; oder &man.quotaoff.8; nicht händisch aufzurufen, obwohl Sie vielleicht die entsprechenden Seiten im Manual lesen sollten, um sich mit ihnen vertraut zu machen. Setzen von Quota-Limits Disk Quotas Limits Nachdem Sie Quotas in Ihrem System aktiviert haben, sollten Sie überprüfen, dass Sie auch tatsächlich aktiviert sind. Führen Sie dazu einfach den folgenden Befehl aus: &prompt.root; quota -v Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollten Sie eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits sehen. Mit &man.edquota.8; können Sie nun Quota-Limits setzen. Sie haben mehrere Möglichkeiten, die Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits. Hardlimit Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490 Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen. Softlimit Im Gegensatz dazu können Softlimits für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt. Das folgende Beispiel zeigt die Benutzung von &man.edquota.8;. Wenn &man.edquota.8; aufgerufen wird, wird der Editor gestartet, der durch EDITOR gegeben ist oder vi falls EDITOR nicht gesetzt ist. In dem Editor können Sie die Limits eingeben. &prompt.root; edquota -u test Quotas for user test: /usr: kbytes in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) Für jedes Dateisystem, auf dem Quotas aktiv sind, sehen Sie zwei Zeilen, eine für die Block-Quotas und die andere für die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit dieses Benutzers von einem Softlimit von 50 und einem Hardlimit von 75 auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile /usr: kbytes in use: 65, limits (soft = 50, hard = 75) zu: /usr: kbytes in use: 65, limits (soft = 500, hard = 600) Die neuen Limits sind wirksam, wenn Sie den Editor verlassen. Manchmal ist es erwünscht, die Limits für einen Bereich von UIDs zu setzen. Dies kann mit der Option von &man.edquota.8; bewerkstelligt werden. Weisen Sie dazu die Limits einem Benutzer zu und rufen danach edquota -p protouser startuid-enduid auf. Besitzt beispielsweise der Benutzer test die gewünschten Limits, können diese mit dem folgenden Kommando für die UIDs 10.000 bis 19.999 dupliziert werden: &prompt.root; edquota -p test 10000-19999 Weitere Informationen erhalten Sie in &man.edquota.8;. Überprüfen von Quota-Limits und Plattennutzung Disk Quotas überprüfen Sie können &man.quota.1; oder &man.repquota.8; benutzen, um Quota-Limits und Plattennutzung zu überprüfen. Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann &man.quota.1; benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit &man.repquota.8; erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind. Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt: Disk quotas for user test (uid 1002): Filesystem usage quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 Disk Quotas Frist Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat. In der Ausgabe von &man.quota.1; werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Mit werden diese Dateisysteme, wie /usr/var im obigen Beispiel, angezeigt. Quotas über NFS NFS Quotas werden von dem Quota-Subsystem auf dem NFS Server erzwungen. Der &man.rpc.rquotad.8; Dæmon stellt &man.quota.1; die Quota Informationen auf dem NFS Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können. Aktivieren Sie rpc.rquotad in /etc/inetd.conf wie folgt: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Anschließend starten Sie inetd neu: &prompt.root; kill -HUP `cat /var/run/inetd.pid` Lucky Green Beigetragen von
shamrock@cypherpunks.to
Partitionen verschlüsseln Partitionen verschlüsseln FreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe ) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte einfach in ein anderes System einbauen und dort die Daten analysieren. Die für &os; verfügbaren kryptografischen Subsysteme GEOM Based Disk Encryption (gbde) und geli sind in der Lage, Daten auf Dateisystemen auch vor hoch motivierten Angreifern zu schützen, die über erhebliche Mittel verfügen. Dieser Schutz ist unabhängig von der Art und Weise, durch die ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu schwerfälligen Systemen, die einzelne Dateien verschlüsseln, verschlüsseln gbde und geli transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert. Plattenverschlüsselung mit <application>gbde</application> Wechseln sie zu <username>root</username> Sie benötigen Superuser-Rechte, um gbde einzurichten. &prompt.user; su - Password: Aktivieren Sie &man.gbde.4; in der Kernelkonfigurationsdatei Fügen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei ein: options GEOM_BDE Übersetzen und installieren Sie den FreeBSD-Kernel wie in beschrieben. Starten sie das System neu, um den neuen Kernel zu benutzen. Alternativ zur Neukompilierung des Kernels können Sie auch kldload verwenden, um das Kernelmodul &man.gbde.4; zu laden: &prompt.root; kldload geom_bde Einrichten eines verschlüsselten Dateisystems Das folgende Beispiel beschreibt, wie ein Dateisystem auf einer neuen Festplatte verschlüsselt wird. Das Dateisystem wird in /private eingehangen. Mit gbde könnten auch /home und /var/mail verschlüsselt werden. Die dazu nötigen Schritte können allerdings in dieser Einführung nicht behandelt werden. Installieren der Festplatte Installieren Sie die Festplatte wie in beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. Die Gerätedateien /dev/ad0s1* sind Standard-Partitionen des FreeBSD-Systems. &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 Verzeichnis für gbde-Lock-Dateien anlegen &prompt.root; mkdir /etc/gbde Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei. Vorbereiten der gbde-Partition Eine von gbde benutzte Partition muss einmalig vorbereitet werden: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c &man.gbde.8; öffnet eine Vorlage in Ihrem Editor, in der Sie verschiedene Optionen einstellen können. Setzen Sie sector_size auf 2048, wenn Sie UFS1 oder UFS2 benutzen. $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...] &man.gbde.8; fragt dann zweimal eine Passphrase zum Schutz der Daten ab. Die Passphrase muss beides Mal gleich eingegeben werden. Die Sicherheit der Daten hängt alleine von der Qualität der gewählten Passphrase ab. Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite Diceware Passphrase beschrieben. Mit gbde init wurde im Beispiel auch die Lock-Datei /etc/gbde/ad4s1c angelegt. Sichern Sie die Lock-Dateien von gbde immer zusammen mit den verschlüsselten Dateisystemen. Ein entschlossener Angreifer kann die Daten vielleicht auch ohne die Lock-Datei entschlüsseln. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Dies ist nur noch mit erheblichem manuellen Aufwand möglich, der weder von &man.gbde.8; noch seinem Entwickler unterstützt wird. Einbinden der verschlüsselten Partition in den Kernel &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c Das Kommando fragt die Passphrase ab, die Sie beim Vorbereiten der Partition eingegeben haben. Das neue Gerät erscheint danach als /dev/device_name.bde im Verzeichnis /dev: &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde Dateisystem auf dem verschlüsselten Gerät anlegen Wenn der Kernel die verschlüsselte Partition kennt, können Sie ein Dateisystem auf ihr anlegen. Benutzen Sie dazu den Befehl &man.newfs.8;. Da ein Dateisystem vom Typ UFS2 sehr viel schneller als eins vom Typ UFS1 angelegt wird, empfehlen wir Ihnen, die Option zu benutzen. &prompt.root; newfs -U -O2 /dev/ad4s1c.bde &man.newfs.8; muss auf einer dem Kernel bekannten gbde-Partition (einem Gerät mit dem Namen *.bde laufen. Einhängen der verschlüsselten Partition Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an: &prompt.root; mkdir /private Hängen Sie das verschlüsselte Dateisystem ein: &prompt.root; mount /dev/ad4s1c.bde /private Überprüfen des verschlüsselten Dateisystem Das verschlüsselte Dateisystem sollte jetzt von &man.df.1; erkannt werden und benutzt werden können. &prompt.user; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private Einhängen eines existierenden verschlüsselten Dateisystems Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Die dazu nötigen Befehle müssen als root durchgeführt werden. gbde-Partition im Kernel bekannt geben &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c Das Kommando fragt nach der Passphrase, die Sie beim Vorbereiten der verschlüsselten gbde-Partition festgelegt haben. Prüfen des Dateisystems Das verschlüsselte Dateisystem kann noch nicht automatisch über /etc/fstab eingehangen werden. Daher muss es vor dem Einhängen mit &man.fsck.8; geprüft werden: &prompt.root; fsck -p -t ffs /dev/ad4s1c.bde Einhängen des verschlüsselten Dateisystems &prompt.root; mount /dev/ad4s1c.bde /private Das verschlüsselte Dateisystem steht danach zur Verfügung. Verschlüsselte Dateisysteme automatisch einhängen Mit einem Skript können verschlüsselte Dateisysteme automatisch bekannt gegeben, geprüft und eingehangen werden. Wir raten Ihnen allerdings aus Sicherheitsgründen davon ab. Starten Sie das Skript manuell an der Konsole oder in einer &man.ssh.1;-Sitzung. Zu diesem Zweck existiert ein rc.d-Skript, an das über Einträge in der Datei &man.rc.conf.5; Argumente übergeben werden können. Dazu ein Beispiel: gbde_autoattach_all="YES" gbde_devices="ad4s1c" Durch diese Argumente muss beim Systemstart die gbde-Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die gbde-verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Dieses Vorgehen ist insbesondere dann nützlich, wenn Sie gbde auf einem Notebook einsetzen wollen. Kryptografische Methoden von gbde &man.gbde.8; benutzt den 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem unterschiedlichen AES-Schlüssel verschlüsselt. Mehr Informationen, unter anderem wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, erhalten Sie in &man.gbde.4;. Kompatibilität &man.sysinstall.8; kann nicht mit verschlüsselten gbde-Geräten umgehen. Vor dem Start von &man.sysinstall.8; sind alle *.bde-Geräte zu deaktivieren, da &man.sysinstall.8; sonst bei der Gerätesuche abstürzt. Das im Beispiel verwendete Gerät wird mit dem folgenden Befehl deaktiviert: &prompt.root; gbde detach /dev/ad4s1c Sie können gbde nicht zusammen mit vinum benutzen, da &man.vinum.4; das &man.geom.4;-Subsystem nicht benutzt. Daniel Gerzo Beigetragen von Plattenverschlüsselung mit <command>geli</command> Mit &os; 6.0 wurde eine neue kryptografische GEOM-Klasse eingeführt - geli. Diese wird derzeit von &a.pjd; weiterentwickelt. geli unterscheidet sich von gbde durch unterschiedliche Fähigkeiten und einen unterschiedlichen Ansatz für die Verschlüsselung von Festplatten. Die wichtigsten Merkmale von &man.geli.8; sind: Der Einsatz des &man.crypto.9;-Frameworks – verfügt das System über kryptografische Hardware, wird diese von geli automatisch verwendet. Die Unterstützung verschiedener kryptografischer Algorithmen (derzeit AES, Blowfish, sowie 3DES). Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden. geli erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln (etwa einem privaten Schlüssel und einem Unternehmens-Schlüssel). geli ist durch einfache Sektor-zu-Sektor-Verschlüsselung sehr schnell. Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen. geli erlaubt es, Platten mit einem zufälligen Einmal-Schlüssel einzusetzen, was insbesondere für Swap-Partitionen und temporäre Dateisysteme interessant ist. Weitere Informationen zu den Fähigkeiten von geli finden Sie in &man.geli.8;. Die folgenden Schritte beschreiben, wie Sie geli im &os;-Kernel aktivieren und einen geli-Verschlüsselungs-Provider anlegen können. Voraussetzung für die Nutzung von geli ist der Einsatz von &os; 6.0-RELEASE oder neuer. Da Sie Ihren Kernel anpassen müssen, benötigen Sie außerdem root-Privilegien. Aufnahme der <command>geli</command>-Unterstützung in Ihre Kernelkonfigurationsdatei Fügen Sie die folgenden Zeilen in Ihre Kernelkonfigurationsdatei ein: options GEOM_ELI device crypto Bauen und installieren Sie Ihren neuen Kernel wie in beschrieben. Alternativ können Sie aber auch das geli-Kernelmodul beim Systemstart laden. Dazu fügen Sie die folgende Zeile in /boot/loader.conf ein: geom_eli_load="YES" Ab sofort wird &man.geli.8; vom Kernel unterstützt. Erzeugen des Master-Keys Das folgende Beispiel beschreibt, wie Sie eine Schlüsseldatei erzeugen, die als Teil des Master-Keys für den Verschlüsselungs-Provider verwendet wird, der unter /private in den Verzeichnisbaum eingehängt (gemountet) wird. Diese Schlüsseldatei liefert zufällige Daten, die für die Verschlüsselung des Master-Keys benötigt werden. Zusätzlich wird der Master-Key durch eine Passphrase geschützt. Die Sektorgröße des Providers beträgt 4 KB. Außerdem wird beschrieben, wie Sie einen geli-Provider aktivieren, ein vom ihm verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten und wie Sie es schließlich wieder unmounten und den Provider deaktivieren. Um eine bessere Leistung zu erzielen, sollten Sie eine größere Sektorgröße (beispielsweise 4 KB) verwenden. Der Master-Key wird durch eine Passphrase sowie die Daten der Schlüsseldatei (die von /dev/random stammen) geschützt. Die Sektorgröße von /dev/da2.eli (das als Provider bezeichnet wird) beträgt 4 KB. &prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1 &prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2 Enter new passphrase: Reenter new passphrase: Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden. Wird für die Schlüsseldatei der Wert - angegeben, wird dafür die Standardeingabe verwendet. Das folgende Beispiel zeigt, dass Sie auch mehr als eine Schlüsseldatei verwenden können. &prompt.root; cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2 Aktivieren des Providers mit dem erzeugten Schlüssel &prompt.root; geli attach -k /root/da2.key /dev/da2 Enter passphrase: Dadurch wird die (Normaltext-)Gerätedatei /dev/da2.eli angelegt. &prompt.root; ls /dev/da2* /dev/da2 /dev/da2.eli Das neue Dateisystem erzeugen &prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m &prompt.root; newfs /dev/da2.eli &prompt.root; mount /dev/da2.eli /private Das verschlüsselte Dateisystem wird nun von &man.df.1; angezeigt und kann ab sofort eingesetzt werden. &prompt.root; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private Das Dateisystem unmounten und den Provider deaktivieren Wenn Sie nicht mehr mit dem verschlüsselten Dateisystem arbeiten und die unter /private eingehängte Partition daher nicht mehr benötigen, sollten Sie diese unmounten und den geli-Verschlüsselungs-Provider wieder deaktivieren. &prompt.root; umount /private &prompt.root; geli detach da2.eli Weitere Informationen zum Einsatz von geli finden Sie in &man.geli.8;. Der Einsatz des <filename>geli</filename>- <filename>rc.d</filename>-Skripts geli verfügt über ein rc.d-Skript, das den Einsatz von geli deutlich vereinfacht. Es folgt nun ein Beispiel, in dem geli über die Datei &man.rc.conf.5; konfiguriert wird: geli_devices="da2" geli_da2_flags="-p -k /root/da2.key" Durch diese Einträge wird /dev/da2 als geli-Provider festgelegt. Der Master-Key befindet sich in /root/da2.key. Beim Aktivieren des geli-Providers wird keine Passphrase abgefragt (beachten Sie, dass dies nur dann möglich ist, wenn Sie geli mit dem Parameter initialisieren). Wird das System heruntergefahren, wird der geli-Provider zuvor deaktiviert. Weitere Informationen zur Konfiguration der rc.d-Skripten finden Sie im Abschnitt rc.d des Handbuchs.
Christian Brüffer Geschrieben von Den Auslagerungsspeicher verschlüsseln Auslagerungsspeicher verschlüsseln Die Verschlüsselung des Auslagerungsspeichers ist unter &os; einfach einzurichten und seit &os; 5.3-RELEASE verfügbar. Je nach dem, welche &os;-Version Sie einsetzen, können Konfiguration und mögliche Optionen allerdings unterschiedlich sein. Seit &os; 6.0-RELEASE können Sie entweder das &man.gbde.8;- oder das &man.geli.8;-Verschlüsselungs-Subsystem einsetzen. Verwenden Sie eine ältere &os;-Version, sind Sie hingegen auf &man.gbde.8; beschränkt. Beide Subsysteme werden über das rc.d-Skript encswap gestartet. Der letzte Abschnitt, Partitionen verschlüsseln, enthält eine kurze Beschreibung der verschiedenen Verschlüsselungs-Subsysteme. Warum sollte der Auslagerungsspeicher verschlüsselt werden? Wie die Verschlüsselung von Plattenpartitionen dient auch die Verschlüsselung des Auslagerungsspeichers dem Schutz sensitiver Informationen. Stellen Sie sich etwa eine Anwendung vor, die ein Passwort erfordert. Solange dieses Passwort im Hauptspeicher verbleibt, ist alles in Ordnung. Beginnt Ihr Betriebssystem allerdings, Daten auf die Festplatte auszulagern, um im Hauptspeicher Platz für andere Anwendungen zu schaffen, kann es passieren, dass Ihr Passwort im Klartext in den Auslagerungsspeicher geschrieben wird, was es einem potentiellen Angreifer leicht macht, Ihr Passwort herauszufinden. Die Verschlüsselung Ihres Auslagerungsspeichers kann dieses Problem lösen. Vorbereitungen Für die weiteren Ausführungen dieses Abschnitts stellt ad0s1b die Swap-Partition dar. Noch ist Ihr Auslagerungsspeicher nicht verschlüsselt. Es könnte allerdings sein, dass bereits Passwörter oder andere sensitive Daten als Klartext im Auslagerungsspeicher vorhanden sind. Daher sollten Sie den Auslagerungsspeicher komplett mit zufällig generierten Zeichen überschreiben, bevor Sie ihn verschlüsseln: &prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1m Den Auslagerungsspeicher mit &man.gbde.8; verschlüsseln Verwenden Sie &os; 6.0-RELEASE oder neuer, sollten Sie in /etc/fstab das Suffix .bde an den Gerätenamen der Swap-Partition anhängen: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.bde none swap sw 0 0 Für &os;-Versionen vor 6.0-RELEASE benötigen Sie zusätzlich folgende Zeile in /etc/rc.conf: gbde_swap_enable="YES" Den Auslagerungsspeicher mit &man.geli.8; verschlüsseln Alternativ können Sie Ihren Auslagerungsspeicher auch mit &man.geli.8; verschlüsseln. Die Vorgehensweise ist dabei ähnlich. Allerdings hängen Sie bei der Verwendung von &man.geli.8; in /etc/fstab das Suffix .eli an den Gerätenamen der Swap-Partition an: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.eli none swap sw 0 0 In der Voreinstellung verschlüsselt &man.geli.8; den Auslagerungsspeicher mit dem AES-Algorithmus und einer Schlüssellänge von 256 Bit. Es ist möglich, diese Optionen durch das Setzen der geli_swap_flags-Option in /etc/rc.conf anzupassen. Die folgende Zeile weist das rc.d-Skript encswap an, &man.geli.8;-Swap-Partitionen mit dem Blowfish-Algorithmus und einer Schlüssellänge von 128 Bit zu verschlüsseln. Zusätzlich wird die Sektorgröße auf 4 Kilobyte gesetzt und die Option detach on last close aktiviert: + geli_swap_flags="-e blowfish -l 128 -s 4096 -d" + + Auf Systemen vor &os; 6.2-RELEASE verwenden Sie hingegen + die folgende Zeile: + geli_swap_flags="-a blowfish -l 128 -s 4096 -d" Eine Auflistung möglicher Optionen für den Befehl onetime finden Sie in der Manualpage zu &man.geli.8;. Die korrekte Funktion testen Nachdem Sie Ihr System neu gestartet haben, können Sie die korrekte Funktion Ihres verschlüsselten Auslagerungsspeichers prüfen, indem Sie sich die Ausgabe von swapinfo ansehen. Wenn Sie &man.gbde.8; einsetzen, erhalten Sie eine Meldung ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.bde 542720 0 542720 0% Wenn Sie &man.geli.8; einsetzen, erhalten Sie hingegen ein Ausgabe ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.eli 542720 0 542720 0%
diff --git a/de_DE.ISO8859-1/books/handbook/firewalls/chapter.sgml b/de_DE.ISO8859-1/books/handbook/firewalls/chapter.sgml index 9fd46a626a..0a6061a791 100644 --- a/de_DE.ISO8859-1/books/handbook/firewalls/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/firewalls/chapter.sgml @@ -1,486 +1,486 @@ Joseph J. Barbish Beigetragen von Brad Davis Nach SGML konvertiert und aktualisiert von Michael Bunzel Teilweise übersetzt von Firewalls firewall security firewalls Einführung Firewalls ermöglichen es, den ein- und ausgehenden Netzwerkverkehr Ihres Systems zu filtern. Dazu verwendet eine Firewall eine oder mehrere Gruppen von Regeln, um ankommende Netzwerkpakete zu untersuchen und entweder durchzulassen oder zu blockieren. Die Regeln einer Firewall untersuchen charakteristische Eigenschaften von Datenpaketen, darunter den Protokolltyp, die Quell- und Zieladresse sowie den Quell- und Zielport. Firewalls können die Sicherheit eines Rechners oder eines Netzwerks erhöhen, indem sie folgende Aufgaben übernehmen: Den Schutz der Anwendungen, Dienste und Rechner Ihres internen Netzwerks vor unerwünschtem Datenverkehr aus dem Internet. Die Beschränkung des Zugriffs von Rechnern des internen Netzwerk auf Rechner oder Dienste des externen Internets. Den Einsatz von Network Address Translation (NAT), die es Ihnen durch die Verwendung von privaten IP-Adressen ermöglicht, eine einzige gemeinsame Internetverbindung für mehrere Rechner zu nutzen (entweder über eine einzige Adresse oder über eine Gruppe von jeweils automatisch zugewiesenen öffentlichen IP-Adressen). Nachdem Sie dieses Kapitel gelesen haben, werden Sie: Wissen, wie man korrekte Paketfilterregeln erstellt. Die Unterschiede zwischen den in &os; eingebauten Firewalls kennen. Wissen, wie man die PF-Firewall von OpenBSD konfiguriert und einsetzt. IPFILTER konfigurieren und einsetzen können. Wissen, wie man IPFW konfiguriert und einsetzt. Bevor Sie dieses Kapitel lesen, sollten Sie: Die grundlegenden Konzepte von &os; und dem Internet verstehen. Firewallkonzepte firewall rulesets Es gibt zwei grundlegende Arten, Regelgruppen für Firewalls zu erstellen: einschließend (inclusive firewall) sowie auschließend (exclusive Firewall). Eine auschließende Firewall lässt jeden Datenverkehr durch, der nicht durch eine Regel ausgeschlossen wurde. Eine einschließende Firewall macht das genaue Gegenteil. Sie lässt Datenverkehr nur dann durch, wenn er einer der definierten Regeln entspricht. Einschließende Firewalls sind tendentiell sicherer als ausschließende Firewalls, da sie das Risiko, dass unerwünschter Datenverkehr die Firewall passiert, signifikant reduzieren. Die Sicherheit einer Firewall kann durch den Einsatz einer zustandsabhängigen Firewall (stateful firewall) weiter erhöht werden. Eine zustandsabhängige Firewall überwacht alle durch die Firewall gehenden offenen Verbindungen und erlaubt nur schon bestehenden Verkehr oder Datenverkehr, der eine neue Verbindung öffnet. Der Nachteil einer zustandsabhängigen Firewall ist allerdings, dass sie anfällig für Denial of Service (DoS) -Attacken ist, wenn sehr schnell sehr viele neue Verbindungen erstellt werden. Bei den meisten Firewalls können Sie eine Kombination aus zustandsabhängigem und nicht zustandsabhängigem Verhalten verwenden, um eine für Ihre Bedürfnisse optimale Fireall einzurichten. Firewallpakete Das Basissystem von &os; enthält bereits drei Firewallpakete: IPFILTER (auch als IPF bekannt), IPFIREWALL (auch als IPFW bezeichnet) sowie das von OpenBSD übernommene PacketFilter (das auch als PF bezeichnet wird). Zusätzlich verfügt &os; über zwei eingebaute Pakete für das sogenannte traffic shaping (dabei handelt es sich die Steuerung des Bandbreitenverbrauchs): &man.altq.4; sowie &man.dummynet.4;. Dummynet steht traditionell in enger Verbindung mit IPFW, während ALTQ gemeinsam mit IPF/PF eingesetzt wird. Gemeinsam ist allen Firewallpaketen (IPF, IPFW sowie PF), dass sie Regeln einsetzen, um den Transfer von Datenpaketen auf und von Ihrem System zu regeln. Unterschiedlich sind aber die Art und Weise, wie dies realisiert wird. Auch die für diese Regeln verwendete Syntax ist unterschiedlich. &os; überlässt es dem Anwender, das Firewallsystem zu wählen, dass seinen Anforderungen und Vorlieben am Besten entspricht. Keines der im Basissystem enthaltenen Firewallpakete wird dabei als das beste angesehen. IPFILTER hat etwa den Vorteil, dass dessen zustandsabhängige Regeln relativ einfach in einer NAT-Umgebung implementiert werden können. Außerdem verfügt es über einen eigenen FTP-Proxy, der die Erstellung von sicheren Regeln für ausgehende FTP-Verbindungen vereinfacht. Da alle Firewalls auf der Untersuchung der Werte ausgewählter Kontrollfelder von Datenpaketen basieren, ist es für die Erstellung von Firewallregeln notwendig, die Funktionsweise von TCP/IP zu verstehen. Außerdem muss man dazu wissen, was die Werte der einzelnen Kontrollfelder bedeuten und wie diese während einer Verbindung eingesetzt werden. Eine gute Erklärung dieser Thematik finden Sie unter . Paket Filter (PF) von OpenBSD und <acronym>ALTQ</acronym> firewall PF Im Juli 2003 wurde PF, die Standard-Firewall von OpenBSD, nach &os; portiert und in die &os;-Ports-Sammlung aufgenommen. Die erste &os;-Version, die PF als Teil des Basisssytems enthielt, war &os; 5.3 im November 2004. Bei PF handelt es sich um eine komplette, vollausgestattete Firewall, die optional auch ALTQ (Alternatives Queuing) unterstützt. ALTQ bietet Ihnen Quality of Service (QoS)-Bandbreitenformung. Dadurch können Sie, basierend auf Filterregeln, unterschiedlichen Diensten eine bestimmte Bandbreite garantieren. Da das OpenBSD-Projekt bereits über eine hervorragende Dokumentation verfügt, wurde das PF-Handbuch nicht in dieses Kapitel aufgenommen. Weitere Informationen finden Sie unter . PF aktivieren PF ist in Standardinstallationen von &os; 5.3 oder neuer als eigenes, zur Laufzeit ladbares Kernelmodul enthalten. Das System lädt das PF-Kernelmodul automatisch, wenn die Anweisung pf_enable="YES" in /etc/rc.conf enthalten ist. Das ladbare Kernelmodul wurde mit aktivierter &man.pflog.4;-Protokollierung erstellt. Das Kernelmodul geht davon aus, dass die Einträge options INET sowie device bpf in Ihrer Kernelkonfigurationsdatei vorhanden sind. Haben Sie NO_INET6 (seit &os; 6.X) oder NOINET6 (in &os;-Versionen vor 6.X) nicht definiert, benötigen Sie (etwa in &man.make.conf.5;) zusätzlich die Option options INET6. Nachdem Sie das Kernelmodul geladen oder die PF-Unterstützung statisch in Ihren Kernel kompiliert haben, können Sie pf über den Befehl pfctl aktivieren beziehungsweise deaktivieren. Das folgende Beispiel zeigt, wie Sie pf aktivieren: &prompt.root; pfctl -e pfctl ermöglicht es Ihnen, die pf-Firewall zu steuern. Lesen Sie &man.pfctl.8;, bevor Sie das Programm einsetzen. Kernel-Optionen kernel options device pf kernel options device pflog kernel options device pfsync Es ist nicht zwingend nötig, dass Sie PF durch die Angabe der folgenden Optionen in den &os;-Kernel kompilieren. Kompilieren Sie die PF-Unterstützung in Ihren Kernel, so wird das Kernelmodul nie verwendet werden. Die folgenden Angaben dienen daher nur als Hintergrundinformationen. /usr/src/sys/conf/NOTES enthält Beispiele für die Kernelkonfigurationsoptionen von PF: device pf device pflog device pfsync device pf aktiviert die Unterstützung für die Packet Filter-Firewall. device pflog aktiviert das optionale &man.pflog.4;-Pseudonetzwerkgerät, das zum Protokollieren des Datenverkehrs über einen &man.bpf.4;-Deskriptor dient. &man.pflogd.8; ist in der Lage, diese Protokolldateien auf Ihre Platte zu speichern. device pfsync aktiviert das optionale &man.pfsync.4;-Pseudonetzwerkgerät für die Überwachung von Statusänderungen. Da es sich dabei nicht um einen Bestandteil des Kernelmoduls handelt, muss diese Option auf jeden Fall in den Kernel kompiliert werden, bevor man sie verwenden kann. Diese Einstellungen werden erst dann übernommen, wenn man einen Kernel mit diesen Optionen kompiliert und installiert. Verfügbare rc.conf-Optionen Um PF beim Systemstart zu aktivieren, benötigen Sie die folgenden Einträge in /etc/rc.conf: pf_enable="YES" # PF aktivieren(Modul, wenn nötig, aktivieren) pf_rules="/etc/pf.conf" # Datei mit Regeldefinitionen für pf pf_flags="" # zusätzliche Parameter für den Start von pfctl pflog_enable="YES" # stare pflogd(8) pflog_logfile="/var/log/pflog" # wo soll pflogd die Protokolldatei speichern pflog_flags="" # zusätzliche Parameter für den Start von pflogd Wenn Sie ein lokales Netzwerk hinter dieser Firewall betreiben, und Pakete für dessen Rechner weiterleiten oder NAT verwenden wollen, benötigen Sie zusätzlich die folgende Option: gateway_enable="YES" # LAN Gateway aktivieren <acronym>ALTQ</acronym> aktivieren ALTQ muss vor der Verwendung in den &os;-Kernel kompiliert werden. Beachten Sie, dass ALTQ nicht von allen verfügbaren Netzwerkkartentreibern unterstützt wird. Sehen Sie daher zuerst in &man.altq.4; nach, ob Ihre Netzwerkkarte diese Funktion unter Ihrer &os;-Version unterstützt. Die folgenden Kerneloptionen aktivieren ALTQ sowie alle Zusatzfunktionen: options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Wird von SMP benötigt options ALTQ aktiviert das ALTQ-Framework. options ALTQ_CBQ aktiviert das Class Based Queuing (CBQ). CBQ erlaubt es, die Bandbreite einer Verbindung in verschiedene Klassen oder Warteschlangen zu unterteilen, um die Priorität von Datenpaketen basierend auf Filterregeln zu ändern. options ALTQ_RED aktiviert Random Early Detection (RED). RED wird zur Vermeidung einer Netzwerkverstopfung verwendet. Dazu ermittelt RED die Größe der Warteschlange und vergleicht diesen Wert mit den minimalen und maximalen Grenzwerten der Warteschlange. Ist die Warteschlange größer als das erlaubte Maximum, werden alle neuen Pakete verworfen. Getreu seinem Namen verwirft RED Pakete unterschiedlicher Verbindungen nach dem Zufallsprinzip. options ALTQ_RIO aktiviert Random Early Detection In and Out. options ALTQ_HFSC aktiviert den Hierarchical Fair Service Curve -Paketplaner. Weitere Informationen zu HFSC finden Sie unter . options ALTQ_PRIQ aktiviert Priority Queuing (PRIQ). PRIQ lässt Verkehr einer Warteschlange mit höherer Priorität zuerst durch. options ALTQ_NOPCC aktiviert die SMP Unterstützung von ALTQ. Diese Option ist nur auf SMP-System erforderlich. Filterregeln generieren Der Packetfilter liest seine Konfiguration aus der Datei &man.pf.conf.5; ein, um entsprechend der dort definierten Regeln Pakete durchzulassen oder zu verwerfen. Die Standardinstallation von &os; enthält bereits eine beispielhafte Version der Datei /etc/pf.conf mit einigen hilfreichen Beispielen und Erklärungen. Obwohl &os; eine eigene Version der Datei /etc/pf.conf enthält, wird dennoch die gleiche Syntax wie unter OpenBSD verwendet. Das OpenBSD-Team hat eine großartige Dokumentation zur Konfiguration von pf geschrieben, die unter erhältlich ist. Denken Sie beim Lesen des pf-Handbuch daran, dass die verschiedenen &os;-Versionen unterschiedliche Versionen der pf-Firewall einsetzen. So wird unter &os; 5.X noch die OpenBSD-Version 3.5 der Firewall verwendet, während in den &os;-6.X-Versionen die OpenBSD-Version 3.7 zum Einsatz kommt. Haben Sie weitere Fragen zur pf-Firewall, so können Sie diese auf der Mailingliste &a.pf; stellen. Vergessen Sie aber nicht, vorher die Archive der Mailinglisten zu durchsuchen, bevor Sie dort eine Frage stellen. Die IPFILTER-Firewall (IPF) Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache. Wenn Sie helfen wollen, dieses Kapitel zu übersetzen, senden Sie bitte eine E-Mail an die Mailingliste &a.de.translators;. IPFW Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache. Wenn Sie helfen wollen, dieses Kapitel zu übersetzen, senden Sie bitte eine E-Mail an die Mailingliste &a.de.translators;. diff --git a/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml b/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml index e3052e447d..3a46e5d9c0 100644 --- a/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/mirrors/chapter.sgml @@ -1,3400 +1,3447 @@ 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:
BSD-Systems E-Mail: info@bsd-systems.co.uk WWW:
FreeBSD Mall, Inc. 3623 Sanford Street Concord, CA 94520-1405 USA 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/hu_* doc/it_* doc/ja_* +doc_mn_* 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_7 + + + Der Entwicklungszweig für FreeBSD-7.X, auch als + FreeBSD 7-STABLE bekannt. + + + + + RELENG_7_0 + + + Der Zweig, auf dem sicherheitsrelevante oder kritische + Fehlerbehebungen für FreeBSD 7.0 + durchgeführt werden. + + + RELENG_6 Der Entwicklungszweig für FreeBSD-6.X, auch als FreeBSD 6-STABLE bekannt. + + RELENG_6_3 + + + Der Zweig, auf dem sicherheitsrelevante oder kritische + Fehlerbehebungen für FreeBSD 6.3 + durchgeführt werden. + + + RELENG_6_2 Der Zweig, auf dem sicherheitsrelevante oder kritische - Fehlerbehebungen für FreeBSD 6.1 + Fehlerbehebungen für FreeBSD 6.2 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_7_0_0_RELEASE + + + FreeBSD 7.0 + + + + + RELENG_6_3_0_RELEASE + + + FreeBSD 6.3 + + + 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/ports/chapter.sgml b/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml index 14227f3d17..11c207706e 100644 --- a/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/ports/chapter.sgml @@ -1,1559 +1,1584 @@ Uwe Pierau Übersetzt von Installieren von Anwendungen: Pakete und Ports Übersicht Ports Pakete FreeBSD enthält sehr viele Systemwerkzeuge, die Teil des Basissystems sind. Allerdings sind Sie früher oder später auf Software Dritter angewiesen, damit Sie bestimmte Arbeiten durchführen können. Um diese Software zu installieren, stellt FreeBSD zwei sich ergänzende Methoden zur Verfügung: Die Ports-Sammlung (zur Installation aus dem Quellcode) sowie Pakete (auch als Packages bezeichnet, zur Installation von vorkompilierten binären Softwarepaketen). Sie können beide Methoden benutzen, um Ihre Lieblingsanwendungen von lokalen Medien oder über das Netzwerk zu installieren. Dieses Kapitel behandelt die folgenden Themen: Die Installation binärer Softwarepakete. Der Bau Software Dritter aus dem Quellcode mithilfe der Ports-Sammlung. Wie zuvor installierte Pakete oder Ports entfernt werden. Wie Sie die Voreinstellungen der Ports-Sammlung überschreiben. Die Suche nach geeigneter Software. Wie Sie Ihre Anwendungen aktualisieren. Installation von Software Wenn Sie schon einmal ein &unix; System benutzt haben, werden Sie wissen, dass zusätzliche Software meist wie folgt installiert wird: Download der Software, die als Quelltext oder im Binärformat vorliegen kann. Auspacken der Software, die typischerweise ein mit &man.compress.1;, &man.gzip.1; oder &man.bzip2.1; komprimiertes Tar-Archiv enthält. Durchsuchen der Dokumentation, die sich meist in Dateien wie INSTALL, README oder mehreren Dateien im Verzeichnis doc/ befindet, nach Anweisungen, wie die Software zu installieren ist. Kompilieren der Software wenn sie als Quelltext vorliegt. Dazu müssen Sie vielleicht das Makefile anpassen, oder configure laufen lassen, oder andere Arbeiten durchführen. Testen und installieren der Software. Das beschreibt aber nur den optimalen Fall. Wenn Sie Software installieren, die nicht speziell für FreeBSD geschrieben wurde, müssen Sie vielleicht sogar den Quelltext anpassen, damit die Software funktioniert. Wenn Sie unbedingt wollen, können Sie mit FreeBSD Software nach der althergebrachten Methode installieren. Mit Paketen oder Ports bietet Ihnen FreeBSD allerdings zwei Methoden an, die Ihnen sehr viel Zeit sparen können. Zurzeit werden über &os.numports; Anwendungen Dritter über diese Methoden zur Verfügung gestellt. Das FreeBSD-Paket einer Anwendung besteht aus einer einzigen Datei, die Sie sich herunterladen müssen. Das Paket enthält schon übersetzte Kommandos der Anwendung, sowie zusätzliche Konfigurationsdateien oder Dokumentation. Zur Handhabung der Pakete stellt FreeBSD-Kommandos wie &man.pkg.add.1;, &man.pkg.delete.1; oder &man.pkg.info.1; zur Verfügung. Mit diesem System können neue Anwendungen mit einem Kommando, pkg_add, installiert werden. Der FreeBSD-Port einer Anwendung ist eine Sammlung von Dateien, die das Kompilieren der Quelltexte einer Anwendung automatisieren. Die Dateien eines Ports führen für Sie alle oben aufgeführten Schritte zum Installieren einer Anwendung durch. Mit einigen wenigen Kommandos wird der Quellcode der Anwendung automatisch heruntergeladen, ausgepackt, gepatcht, übersetzt und installiert. Tatsächlich kann das Portsystem auch dazu benutzt werden, Pakete zu generieren, die Sie mit den gleich beschriebenen Kommandos, wie pkg_add, manipulieren können. Pakete und Ports beachten Abhängigkeiten zwischen Anwendungen. Angenommen, Sie wollen eine Anwendung installieren, die von einer Bibliothek abhängt und die Anwendung wie die Bibliothek sind als Paket oder Port für FreeBSD verfügbar. Wenn Sie pkg_add oder das Portsystem benutzen, um die Anwendung zu installieren, werden Sie bemerken, dass die Bibliothek zuerst installiert wird, wenn sie nicht schon vorher installiert war. Sie werden sich fragen, warum FreeBSD-Pakete und -Ports unterstützt, wo doch beide Methoden fast gleiches leisten. Beide Methoden haben ihre Stärken und welche Sie einsetzen, hängt letztlich von Ihren Vorlieben ab. Vorteile von Paketen Das komprimierte Paket einer Anwendung ist normalerweise kleiner als das komprimierte Archiv der Quelltexte. Pakete müssen nicht mehr kompiliert werden. Dies ist ein Vorteil, wenn Sie große Pakete, wie Mozilla, KDE oder GNOME auf langsamen Maschinen installieren. Wenn Sie Pakete verwenden, brauchen Sie nicht zu verstehen, wie Sie Software unter FreeBSD kompilieren. Vorteile von Ports Da die Pakete auf möglichst vielen System laufen sollen, werden Optionen beim Übersetzen zurückhaltend gesetzt. Wenn Sie eine Anwendung über die Ports installieren, können Sie die Angabe der Optionen optimieren. Zum Beispiel können Sie spezifischen Code für Pentium 4 oder Athlon Prozessoren erzeugen. Die Eigenschaften einiger Anwendungen werden über Optionen zum Zeitpunkt des Übersetzens festgelegt. Apache kann zum Beispiel über viele eingebaute Optionen konfiguriert werden. Wenn Sie das Portsystem benutzen, können Sie die Vorgaben für die Optionen überschreiben. Für einige Fälle existieren verschiedene Pakete einer Anwendung, die beim Übersetzen unterschiedlich konfiguriert wurden. Für Ghostscript gibt es ein ghostscript-Paket und ein ghostscript-nox11-Paket, die sich durch die X11 Unterstützung unterscheiden. Diese grobe Unterscheidung ist mit dem Paketsystem möglich, wird aber schnell unhandlich, wenn eine Anwendung mehr als ein oder zwei Optionen zum Zeitpunkt des Übersetzens besitzt. Die Lizenzbestimmungen mancher Software verbietet ein Verbreiten in binärer Form. Diese Software muss als Quelltext ausgeliefert werden. Einige Leute trauen binären Distributionen nicht. Wenn Sie den Quelltext besitzen, können Sie sich diesen (zumindest theoretisch) durchlesen und nach möglichen Problemen durchsuchen. Wenn Sie eigene Anpassungen besitzen, benötigen Sie den Quelltext, um diese anzuwenden. Manch einer besitzt gerne den Quelltext, um ihn zu lesen, wenn es einmal langweilig ist, ihn zu hacken, oder sich einfach ein paar Sachen abzugucken (natürlich nur, wenn es die Lizenzbestimmungen erlauben). Wenn Sie über aktualisierte Ports informiert sein wollen, lesen Sie bitte die Mailinglisten &a.ports; und &a.ports-bugs;. Bevor Sie eine Anwendung installieren, sollten Sie auf der Seite über mögliche Sicherheitsprobleme mit der Anwendung informieren. Die Anwendung ports-mgmt/portaudit prüft automatisch alle installierten Anwendungen auf bekannte Sicherheitslöcher. Vor dem Bau eines Ports findet ebenfalls eine Prüfung statt. Installierte Pakete prüfen Sie mit dem Kommando portaudit -F -a. Der Rest dieses Kapitels beschreibt, wie Sie Software Dritter mit Paketen oder Ports auf einem FreeBSD-System installieren und verwalten. Suchen einer Anwendung Bevor Sie eine Anwendung installieren, müssen Sie deren Art und Namen kennen. Die Anzahl der nach FreeBSD portierten Anwendungen steigt ständig. Zum Glück gibt es einige Wege, die richtige zu finden. Eine aktuelle Liste verfügbarer Anwendungen, die sich auch durchsuchen lässt, finden Sie unter http://www.FreeBSD.org/ports/. Die Anwendungen sind in Kategorien unterteilt und Sie können sich alle Anwendungen einer Kategorie anzeigen lassen. Wenn Sie den Namen der Anwendung kennen, können Sie natürlich auch direkt nach dem Namen suchen. FreshPorts FreshPorts, das von Dan Langille gepflegt wird, erreichen Sie unter . FreshPorts verfolgt Änderungen an Anwendungen aus den Ports. Mit FreshPorts können Sie ein oder mehrere Ports beobachten und sich eine E-Mail schicken lassen, wenn ein Port aktualisiert wird. FreshMeat Wenn Sie den Namen einer Anwendung nicht kennen, versuchen Sie eine Webseite wie FreshMeat (), um eine passende Anwendung zu finden. Schauen Sie dann auf der FreeBSD-Webseite nach, ob die Anwendung schon portiert wurde. Wenn Sie den Portnamen kennen und nur nach der Kategorie suchen wollen, verwenden Sie das Kommando &man.whereis.1;. Geben Sie einfach whereis Datei ein. Datei ist der Name des Programms, das Sie suchen: &prompt.root; whereis lsof lsof: /usr/ports/sysutils/lsof Damit haben wir herausgefunden, dass sich lsof, ein Systemwerkzeug, im Verzeichnis /usr/ports/sysutils/lsof befindet. Ein weiterer Weg, einen bestimmten Port zu finden, ist es, die eingebaute Suchfunktion der Ports-Sammlung zu benutzen. Dazu muss Ihr Arbeitsverzeichnis /usr/ports sein. In diesem Verzeichnis rufen Sie make search name=Anwendungsname auf, wobei Anwendungsname der Name der gesuchten Anwendung ist. Wenn Sie zum Beispiel nach lsof suchen: &prompt.root; cd /usr/ports &prompt.root; make search name=lsof Port: lsof-4.56.4 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: obrien@FreeBSD.org Index: sysutils B-deps: R-deps: Der Teil der Ausgabe der Sie interessiert ist die Zeile, die mit Path: beginnt, weil sie Ihnen sagt, wo der Port zu finden ist. Die anderen Informationen werden zum Installieren des Ports nicht direkt benötigt, Sie brauchen sich darum jetzt nicht weiter zu kümmern. Erweiterte Suchen führen Sie mit dem Kommando make search key=Text aus. Damit werden Portnamen, Kommentare, Beschreibungen und Abhängigkeiten nach Text durchsucht. Dies kann sehr nützlich sein, wenn Sie den Namen des Programms, nach dem Sie suchen, nicht kennen. In beiden Fällen wird Groß- und Kleinschreibung bei der Suche ignoriert. Die Suche nach LSOF wird dieselben Ergebnisse wie die Suche nach lsof liefern. Chern Lee Beigesteuert von Benutzen des Paketsystems Installieren eines Pakets Pakete installieren pkg_add Mit &man.pkg.add.1; können Sie ein FreeBSD-Paket von einer lokalen Datei oder über das Netzwerk installieren. Download vor Installation eines Pakets &prompt.root; ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ 250 CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) ftp> exit &prompt.root; pkg_add lsof-4.56.4.tgz Wenn Sie die Pakete nicht lokal vorliegen haben (zum Beispiel auf den FreeBSD-CD-ROMs), ist es wahrscheinlich einfacher den Schalter von &man.pkg.add.1; zu verwenden. Das Werkzeug bestimmt dann automatisch das nötige Objektformat und die richtige Version des Pakets, lädt dieses dann von einem FTP-Server und installiert das Paket. pkg_add &prompt.root; pkg_add -r lsof Das obige Beispiel würde ohne weitere Interaktion das richtige Paket herunterladen und installieren. Pakete werden vom &os;-Hauptserver heruntergeladen. Wenn Sie anderen Server verwenden möchten, geben Sie den Server in der Umgebungsvariablen PACKAGESITE an. Die Dateien werden mit &man.fetch.3;, das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt, heruntergeladen. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in &man.fetch.3;. Beachten Sie, dass im obigen Beispiel lsof anstelle von lsof-4.56.4 verwendet wird. Wenn Sie &man.pkg.add.1; zum Herunterladen eines Pakets verwenden, darf die Versionsnummer des Pakets nicht angegeben werden, da automatisch die neuste Version der Anwendung geholt wird. Unter &os.current; oder &os.stable; holt &man.pkg.add.1; die neuste Version einer Anwendung, unter einer Release holt &man.pkg.add.1; die Version der Anwendung, die im Release enthalten ist. Sie können dies ändern, indem Sie die Umgebungsvariable PACKAGESITE überschreiben. Wenn Sie bespielsweise &os; 5.4-RELEASE installiert haben, versucht &man.pkg.add.1; in der Voreinstellung die Pakete von ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/ zu laden. Wollen Sie &man.pkg.add.1; dazu zwingen, nur &os; 5-STABLE-Pakete herunterzuladen, setzen Sie die Umgebungsvariable PACKAGESITE auf ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5-stable/Latest/. Pakete werden im .tgz- und .tbz-Format ausgeliefert. Sie finden Sie unter oder auf der FreeBSD-CD-ROM-Distribution. Jede CD der FreeBSD Distribution (oder des PowerPaks) enthält Pakete im Verzeichnis /packages. Die Struktur des Paketbaums entspricht dem /usr/ports Baum. Jede Kategorie besitzt ein eigenes Verzeichnis und alle Pakete befinden sich im Verzeichnis All. Die Verzeichnisstruktur des Paketbaums ist ein Abbild der Ports, da beide Systeme eng zusammenarbeiten. Verwalten von Paketen Pakete verwalten &man.pkg.info.1; zeigt alle installierten Pakete und deren Beschreibung an. pkg_info &prompt.root; pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ... &man.pkg.version.1; vergleicht die Version installierter Pakete mit der Version aus der Ports-Sammlung. pkg_version &prompt.root; pkg_version cvsup = docbook = ... Die Symbole in der zweiten Spalte zeigen das Alter des Pakets im Vergleich zu der lokalen Version aus der Ports-Sammlung an. Symbol Bedeutung = Die Version des installierten Paketes stimmt mit der Version aus der lokalen Ports-Sammlung überein. < Die installierte Version ist älter als die der verfügbaren Version aus der Ports-Sammlung. > Die installierte Version ist neuer als die aus der Ports-Sammlung (Eventuell ist die lokale Ports-Sammlung veraltet). ? Das installierte Paket konnte in der Ports-Sammlung nicht gefunden werden. Das kann dadurch hervorgerufen werden, dass ein installierter Port aus der Ports-Sammlung entfernt wurde oder einen neuen Namen erhalten hat. * In der Ports-Sammlung befinden sich mehrere Versionen der Anwendung. Entfernen eines Pakets pkg_delete Pakete entfernen Um ein zuvor installiertes Paket zu entfernen, benutzen Sie das Werkzeug &man.pkg.delete.1;. &prompt.root; pkg_delete xchat-1.7.1 Beachten Sie, dass &man.pkg.delete.1; die vollständige Bezeichnung des Pakets benötigt (also Paketname und Versionsnummer). Die Eingabe von xchat (anstelle von xchat-1.7.1) ist daher nicht ausreichend. Zwar können Sie die Versionsnummer eines installierten Pakets mit &man.pkg.version.1; herausfinden, es ist aber auch möglich, ein Paket zu deinstallieren, ohne die exakte Versionsnummer zu kennen, wenn Sie Wildcards einsetzen: &prompt.root; pkg_delete xchat\* In diesem Beispiel werden alle Pakete gelöscht, deren Name mit xchat beginnt. Verschiedenes Informationen über alle installierte Pakete werden in /var/db/pkg abgelegt. Das Verzeichnis enthält Dateien, in denen sich die Beschreibungen der Pakete und Listen von Dateien, die zu einem Paket gehören, befinden. Benutzen der Ports-Sammlung Die folgenden Abschnitte stellen die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung auf Ihren Rechner zu installieren oder zu löschen. &man.ports.7; enthält eine Auflistung aller verfügbaren make-Targets und Umgebungsvariablen. Installation der Ports-Sammlung Bevor Sie einen Port installieren können, müssen Sie zuerst die Ports-Sammlung installieren, die aus Makefiles, Patches und Beschreibungen besteht. Die Ports-Sammlung wird für gewöhnlich unter /usr/ports installiert. Bei der FreeBSD-Installation hatten Sie in sysinstall die Möglichkeit, die Ports-Sammlung zu installieren. Wenn Sie die Sammlung damals nicht installiert haben, können Sie das mit den folgenden Anweisungen nachholen: Installieren mit <application>CVSup</application> Dies ist eine schnelle Methode, um die Ports-Sammlung zu installieren und zu aktualisieren. CVSup wird im Abschnitt Benutzen von CVSup des Handbuchs beschrieben. Mit csup existiert eine in C geschriebene Neuimplementierung von CVSup, die ab &os; 6.2 bereits im Basissystem enthalten ist. Haben Sie &os; 6.2 installiert, können Sie Schritt 1 überspringen und die im Basissystem enthaltene Version von csup einsetzen. Verwenden Sie eine ältere &os;-Version, können Sie csup über den Port net/csup installieren. In beiden Fällen ersetzen Sie bitte in den folgenden Ausführungen cvsup durch csup. Achten Sie darauf, dass das Verzeichnis /usr/ports leer ist, bevor Sie CVSup das erste Mal ausführen! Haben Sie die Ports-Sammlung zuvor schon aus einer anderen Quelle installiert, wird CVSup bereits aus dem Repository entfernte Patches nicht aus der lokalen Kopie der Ports-Sammlung löschen. Installieren Sie das Paket net/cvsup-without-gui: &prompt.root; pkg_add -r cvsup-without-gui Weitere Informationen finden Sie im Abschnitt Installation von CVSup des Handbuchs. Danach rufen Sie cvsup auf: &prompt.root; cvsup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile Ersetzen Sie cvsup.FreeBSD.org durch einen CVSup-Server in Ihrer Nähe. Eine vollständige Liste der CVSup-Spiegel finden Sie im Abschnitt CVSup-Server des Handbuchs. Sie sollten sich eine an Ihre Bedürfnisse angepasste ports-supfile erstellen, um so beispielsweise zu vermeiden, dass Sie bei jedem Aufruf von CVSup wieder die Parameterliste übergeben müssen. Dazu kopieren Sie zuerst als root die Datei /usr/share/examples/cvsup/ports-supfile nach /root oder in Ihr Heimatverzeichnis. Danach müssen Sie die Datei ports-supfile anpassen. Dazu ersetzen Sie cvsup.FreeBSD.org durch einen CVSup-Server in Ihrer Nähe. Eine vollständige Liste der CVSup-Spiegel finden Sie im Abschnitt CVSup-Server des Handbuchs. Nun können Sie cvsup mit folgender Syntax starten: &prompt.root; cvsup -L 2 /root/ports-supfile Mit &man.cvsup.1; können Sie später auch die Ports-Sammlung aktualisieren. Die installierten Ports werden mit diesem Kommando allerdings nicht aktualisiert. Installieren mit Portsnap Bei Portsnap handelt es sich um ein alternatives System zur Distribution der Ports-Sammlung, das seit &os; 6.0 im Basissystem enthalten ist. Verwenden Sie eine ältere &os;-Version, können Sie zur Installation das Paket ports-mgmt/portsnap verwenden: &prompt.root; pkg_add -r portsnap Eine detaillierte Beschreibung von Portsnap finden Sie im Abschnitt Portsnap einsetzen des Handbuchs. Ab &os; 6.1-RELEASE oder bei einem aktuellen Portsnap-Paket oder -Port ist dieser Schritt nicht nötig, da in diesen Fällen das Verzeichnis /usr/ports automatisch beim ersten Aufruf von &man.portsnap.8; angelegt wird. Verwenden Sie hingegen eine ältere Version von Portsnap, müssen Sie dieses Verzeichnis manuell anlegen, falls dieses auf Ihrem System noch nicht existiert: &prompt.root; mkdir /usr/ports Laden Sie einen komprimierten Snapshot der Ports-Sammlung in das Verzeichnis /var/db/portsnap herunter. Danach können Sie die Internetverbindung trennen, wenn Sie dies wünschen. &prompt.root; portsnap fetch Wenn Sie Portsnap das erste Mal verwenden, müssen Sie den Snapshot nach /usr/ports extrahieren: &prompt.root; portsnap extract Ist die Ports-Sammlung bereits installiert, und Sie wollen diese nur aktualisieren, führen Sie stattdessen folgenden Befehl aus: &prompt.root; portsnap update Installieren mit <application>sysinstall</application> Nicht zuletzt ist es auch möglich, die Ports-Sammlung über sysinstall zu installieren. Beachten Sie dabei aber, dass bei dieser Methode nicht die aktuellste Version der Ports-Sammlung, sondern die Version, die zum Zeitpunkt der Veröffentlichung der installierten &os;-Version aktuell war, installiert wird. Haben Sie Zugriff auf das Internet, so sollten Sie daher stets eine der weiter oben beschriebenen Methoden verwenden, um die Ports-Sammlung zu installieren. Führen Sie als root sysinstall (vor &os; 5.2 /stand/sysinstall) aus: &prompt.root; /stand/sysinstall Wählen Sie den Punkt Configure aus und drücken Sie Enter. Wählen Sie dann Distributions aus und drücken Sie Enter. In diesem Menü wählen Sie ports aus und drücken die Leertaste. Danach wählen Sie Exit aus und drücken Enter. Legen Sie nun ein geeignetes Installationsmedium, wie CD-ROM oder FTP, fest. Wählen Sie nun Exit aus und drücken Enter. Verlassen Sie sysinstall mit X. Ports installieren Ports installieren Was ist mit einem Gerüst im Zusammenhang mit der Ports-Sammlung gemeint? In aller Kürze: ein Gerüst eines Ports ist ein minimaler Satz von Dateien, mit denen das FreeBSD-System eine Anwendung sauber übersetzen und installieren kann. Ein jeder Port beinhaltet: Eine Datei Makefile. Das Makefile enthält verschiedene Anweisungen, die spezifizieren, wie eine Anwendung kompiliert wird und wo sie auf Ihrem System installiert werden sollte. Eine Datei distinfo. Diese enthält Informationen, welche Dateien heruntergeladen werden müssen sowie deren MD5-Prüfsummen (die Sie mit &man.md5.1; sowie &man.sha256.1; überprüfen können, um sicher zu gehen, dass diese Dateien während des Herunterladens nicht beschädigt wurden). Ein files Verzeichnis. Hierin liegen Patches, welche das Übersetzen und Installieren der Anwendung ermöglichen. Patches sind im Wesentlichen kleine Dateien, die Änderungen an speziellen Dateien spezifizieren. Sie liegen als reiner Text vor und sagen ungefähr: Lösche Zeile 10 oder Ändere Zeile 26 zu .... Patches sind auch bekannt unter dem Namen diffs, weil Sie mit dem Programm &man.diff.1; erstellt werden. Dieses Verzeichnis kann auch noch andere Dateien enthalten, welche zum Bauen des Ports benutzt werden. Eine Datei pkg-descr. Eine ausführlichere, oft mehrzeilige Beschreibung der Anwendung. Eine Datei pkg-plist. Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die zum Entfernen des Ports benötigt werden. Einige Ports besitzen noch andere Dateien, wie pkg-message, die vom Portsystem benutzt werden, um spezielle Situationen zu handhaben. Wenn Sie mehr über diese Dateien oder das Port-System erfahren sollen, lesen Sie bitte das FreeBSD Porter's Handbook. Ein Port enthält lediglich Anweisungen, wie der Quelltext zu bauen ist, nicht aber den eigentlichen Quelltext. Den Quelltext erhalten Sie von einer CD-ROM oder aus dem Internet. Quelltexte werden in einem Format nach Wahl des jeweiligen Software-Autors ausgeliefert. Häufig ist dies ein gezipptes Tar-Archiv, aber es kann auch mit einem anderen Tool komprimiert oder gar nicht komprimiert sein. Der Quelltext, in welcher Form er auch immer vorliegen mag, wird Distfile genannt. Die zwei Methoden, mit denen ein Port installiert wird, werden unten besprochen. Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein. Stellen Sie sicher, dass die Ports-Sammlung aktuell ist, bevor Sie einen Port installieren. Informieren Sie sich vorher zusätzlich unter über mögliche Sicherheitsprobleme des zu installierenden Ports. Vor der Installation kann portaudit eine neue Anwendung automatisch auf Sicherheitslöcher prüfen. Das Werkzeug befindet sich in der Ports-Sammlung (ports-mgmt/portaudit). Vor der Installation einer neuen Anwendung sollten Sie mit portaudit -F die Sicherheitsdatenbank aktualisieren. Die täglich laufende Sicherheitsprüfung des Systems aktualisiert die Datenbank und prüft installierte Anwendungen auf vorhandene Sicherheitslöcher. Weiteres erfahren Sie in den Hilfeseiten &man.portaudit.1; und &man.periodic.8;. Die Ports-Sammlung geht davon, dass Ihr System über eine funktionierende Internetverbindung verfügt. Ist dies nicht der Fall, müssen Sie eine Kopie des zu installierenden Distfiles manuell nach /usr/ports/distfiles kopieren. Dazu wechseln Sie als erstes in das Verzeichnis des Ports, den Sie installieren wollen: &prompt.root; cd /usr/ports/sysutils/lsof Im Verzeichnis lsof kann man das Gerüst erkennen. Der nächste Schritt ist das Übersetzen (auch Bauen genannt) des Ports durch die Eingabe des Befehls make: &prompt.root; make >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.57 ... [Ausgabe des Auspackens weggelassen] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure-Ausgabe weggelassen] ... ===> Building for lsof-4.57 ... [Ausgabe der Übersetzung weggelassen] ... &prompt.root; Ist die Übersetzungsprozedur beendet, landen Sie wiederum in der Kommandozeile und können das Programm im nächsten Schritt installieren. Dazu verwenden Sie den Befehl make install: &prompt.root; make install ===> Installing for lsof-4.57 ... [Ausgabe der Installation weggelassen] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.57 ===> Registering installation for lsof-4.57 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges. &prompt.root; Nachdem die Installation abgeschlossen ist, können Sie die gerade installierte Anwendung starten. Da lsof eine Anwendung ist, die mit erhöhten Rechten läuft, wird eine Sicherheitswarnung angezeigt. Sie sollten alle Warnungen während des Baus und der Installation eines Ports beachten. Es ist eine gute Idee, das Unterverzeichnis work nach erfolgter Installation wieder zu löschen. Einerseits gewinnen Sie dadurch Speicherplatz, andererseits könnte es sonst zu Problemen bei der Aktualisierung des Ports auf eine neuere Version kommen. &prompt.root; make clean ===> Cleaning for lsof-4.57 &prompt.root; Sie können zwei Schritte sparen, wenn Sie gleich make install clean anstelle von make, make install, und make clean eingeben. Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine Liste der verfügbaren Kommandos in den durch die Umgebungsvariable PATH gegebenen Verzeichnissen. Nach der Installation eines Ports müssen Sie in einer solchen Shell vielleicht das Kommando rehash absetzen, um die neu installierten Kommandos benutzen zu können. Das Kommando rehash gibt es in Shells wie der tcsh. Unter Shells wie der sh benutzen Sie das Kommando hash -r. Weiteres entnehmen Sie bitte der Dokumentation Ihrer Shell. Einige von Dritten angebotenen DVD-ROM-Produkte wie das FreeBSD Toolkit von der FreeBSD Mall enthalten auch Distfiles (komprimierte Quellcodepakete). Diese lassen sich über die Ports-Sammlung installieren. Dazu hängen Sie die DVD-ROM unter /cdrom in den Verzeichnisbaum ein. Wenn Sie einen anderen Mountpunkt verwenden, sollten Sie die make-Variable CD_MOUNTPTS setzen, damit die auf der DVD-ROM enthaltenen Distfiles automatisch verwendet werden. Beachten Sie bitte, dass die Lizenzen einiger Ports die Einbeziehung auf der CD-ROM verbieten. Das kann verschiedene Gründe haben. Beispielsweise eine Registrierung vor dem Herunterladen erforderlich oder die Weiterverteilung ist verboten. Wenn Sie einen Port installieren wollen, der nicht auf der CD-ROM enthalten ist, müssen Sie online sein. Die Ports-Sammlung benutzt zum Herunterladen von Dateien &man.fetch.3;, das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen, oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in &man.fetch.3;. Benutzer ohne eine ständige Internet-Verbindung werden das Kommando make fetch zu schätzen wissen. Das Kommando lädt alle benötigten Dateien eines Ports herunter. Sie können das Kommando im Verzeichnis /usr/ports laufen lassen. In diesem Fall werden alle Dateien heruntergeladen. Es ist auch möglich, make fetch nur in einem Teil des Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abhängigen Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn Sie diese Dateien ebenfalls herunterladen wollen, ersetzen Sie im Kommando fetch durch fetch-recursive. Abhängig davon, in welchem Verzeichnis Sie make aufrufen, können Sie analog zu make fetch die Ports einer Kategorie oder alle Ports bauen. Beachten Sie allerdings, dass manche Ports nicht zusammen installiert werden können. Weiterhin gibt es Fälle, in denen zwei Ports unterschiedliche Inhalte in derselben Datei speichern wollen. Manchmal ist es erforderlich, die benötigten Dateien von einem anderen Ort als den im Port vorgesehenen herunterzuladen. Der Ort wird durch die Variable MASTER_SITES vorgegeben, die Sie wie folgt überschreiben können: &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch Im Beispiel wurde MASTER_SITES mit dem Wert ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ überschrieben. Einige Ports besitzen Optionen, mit denen Sie zusätzliche Funktionen oder Sicherheitsoptionen einstellen können (oder manchmal auch müssen). Zusätzliche Optionen können beispielsweise für www/mozilla, security/gpgme und mail/sylpheed-claws angegeben werden. Wenn ein Port über zusätzliche Optionen verfügt, werden diese beim Bau des Ports auf der Konsole ausgegeben. Vorgabe-Verzeichnisse ändern Manchmal ist es nützlich (oder erforderlich), in anderen Verzeichnissen zu arbeiten. Die Verzeichnisse können Sie mit den Variablen WRKDIRPREFIX und PREFIX einstellen. Die Variable WRKDIRPREFIX gibt das Bauverzeichnis an: &prompt.root; make WRKDIRPREFIX=/usr/home/example/ports install Dieses Kommando baut den Port in /usr/home/example/ports und installiert ihn unter /usr/local. Die Variable PREFIX legt das Installations-Verzeichnis fest: &prompt.root; make PREFIX=/usr/home/example/local install In diesem Beispiel wird der Port unter /usr/ports gebaut und nach /usr/home/example/local installiert. Sie können beide Variablen auch zusammen benutzen: &prompt.root; make WRKDIRPREFIX=../ports PREFIX=../local install Die Kommandozeile ist zu lang, um sie hier komplett wiederzugeben, aber Sie sollten die zugrunde liegende Idee erkennen. Probleme mit <command>imake</command> imake Einige Ports, welche &man.imake.1; (Teil des X-Window-Systems) benutzen, funktionieren nicht gut mit PREFIX und bestehen darauf, unter /usr/X11R6 installiert zu werden. In ähnlicher Weise verhalten sich einige Perl-Ports, die PREFIX ignorieren und sich in den Perl-Verzeichnisbaum installieren. Zu erreichen, dass solche Ports PREFIX beachten, ist schwierig oder sogar unmöglich. + + + Ports rekonfigurieren + + Beim Bau einiger Ports erhalten Sie ein ncurses-basiertes + Menü, über dessen Optionen Sie den Bau dieser Ports + beeinflussen können. Es gibt diverse Möglichkeiten, + dieses Menü nach dem Bau eines Ports erneut aufzurufen, um + beispielsweise Optionen zu entfernen, hinzuzufügen oder + anzupassen. Sie können beispielsweise in das + Verzeichnis des Ports wechseln und dort den Befehl + make config + eingeben, wodurch das Menü mit den ursprünglichen + gewählten Optionen erneut aufgerufen wird. Eine andere + Möglichkeit bietet der Befehl + make showconfig, + mit dem Sie eine Liste aller Konfigurationsoptionen dieses + Ports aufrufen. Eine weitere Alternative bietet der Befehl + make rmconfig, + der die von Ihnen ursprünglich gewählten Optionen + zurücksetzt und es Ihnen dadurch ermöglicht, die + Konfiguration erneut zu beginnen. Die eben erwähnten + Optionen (und viele andere) werden ausführlich in + der Manualpage &man.ports.7; beschrieben. + Entfernen installierter Ports Ports entfernen Da Sie nun wissen, wie man einen Port installiert, wollen Sie sicher auch wissen, wie man ein über einen Port installiertes Programm wieder deinstallieren kann. Ports werden analog zu Paketen mit &man.pkg.delete.1; deinstalliert (Lesen Sie sich den Abschnitt Benutzen des Paketsystems des Handbuchs durch, wenn Sie weitere Informationen benötigen.). Für das vorhin installierte Programm lsof würden Sie dazu wie folgt vorgehen: &prompt.root; pkg_delete lsof-4.57 Ports aktualisieren Ports aktualisieren Als erstes sollten sie sich alle installierten Ports anzeigen lassen, von denen eine aktuellere Version in der Ports-Sammlung existiert. Dazu verwenden Sie den Befehl &man.pkg.version.1;: &prompt.root; pkg_version -v <filename>/usr/ports/UPDATING</filename> Nachdem Sie die Ports-Sammlung auf den neusten Stand gebracht haben, lesen Sie bitte zuerst die Datei /usr/ports/UPDATING, bevor Sie einen Port aktualisieren. In dieser Datei werden Probleme und zusätzlich durchzuführende Schritte bei der Aktualisierung einzelner Ports beschrieben. Dazu gehören solche Dinge wie geänderte Dateiformate, verschobene Konfigurationsdateien, aber auch Inkompatibilitäten zu einer Vorgängerversion. Sollte UPDATING etwas hier Gesagtem widersprechen, so gilt das in UPDATING Gesagte. Ports mit Portupgrade aktualisieren portupgrade portupgrade wurde entwickelt, um die Aktualisierung von Ports zu vereinfachen. Sie können portupgrade über den Port ports-mgmt/portupgrade installieren: &prompt.root; cd /usr/ports/ports-mgmt/portupgrade/ &prompt.root; make install clean Durchsuchen Sie regelmäßig (am besten vor jeder Aktualisierung) die Liste der installierten Ports mit pkgdb -F und beheben Sie alle gefundenen Probleme. Wenn Sie portupgrade -a eingeben, beginnt portupgrade automatisch mit der Aktualisierung aller veralteteter Ports Ihres Systems. Verwenden Sie den Schalter , wenn Sie individuell entscheiden wollen, ob ein Port aktualisiert werden soll: &prompt.root; portupgrade -ai Wenn Sie nur eine einzelne Anwendung anstelle aller Anwendungen aktualisieren wollen, verwenden Sie das Kommando portupgrade pkgname. Geben Sie den Schalter an, wenn portupgrade zuvor alle Ports aktualisieren soll, die von dem gegebenen Paket abhängen. Der Schalter verwendet zur Installation Pakete anstelle von Ports. Mit dieser Option durchsucht portupgrade die in der Umgebungsvariablen PKG_PATH aufgeführten Verzeichnisse nach Paketen. Sind lokal keine Pakete vorhanden, versucht portupgrade die Pakete über das Netz herunterzuladen. Gibt es die Pakete weder lokal noch auf entfernten Rechnern, werden die Ports verwendet. Um dies zu verhindern, benutzen Sie die Option . &prompt.root; portupgrade -PP gnome2 Wenn Sie nur die Quelldateien des Ports (oder die Pakete mit ) herunterladen möchten, ohne die Anwendung zu bauen oder zu installieren, geben Sie die Option an. Weitere Möglichkeiten lesen Sie bitte in der Hilfeseite &man.portupgrade.1; nach. Ports mit Portmanager aktualisieren portmanager Portmanager ist ein weiteres Werkzeug, das die Aktualisierung installierter Ports erleichtert. Es kann über den Port ports-mgmt/portmanager installiert werden: &prompt.root; cd /usr/ports/ports-mgmt/portmanager &prompt.root; make install clean Alle installierten Ports können danach durch folgende Eingabe aktualisiert werden: &prompt.root; portmanager -u Wenn Sie zusätzlich die Optionen an Portmanager übergeben, werden Sie bei jedem Schritt um eine Bestätigung gefragt. Portmanager ist außerdem in der Lage, neue Ports auf Ihrem System zu installieren. Im Gegensatz zum bekannten make install clean aktualisiert es aber vor dem Bau und der Installation eines Ports alle abhängigen Ports. &prompt.root; portmanager x11/gnome2 Treten bei den Abhängigkeiten des zu installierenden Ports Probleme auf, ist Portmanager in der Lage, alle Abhängigkeiten in der korrekten Reihenfolge neu zu bauen. Nachdem dieser Schritt abgeschlossen ist, wird der problematische Port ebenfalls neu gebaut. &prompt.root; portmanager graphics/gimp -f Weitere Informationen finden Sie in der Manualpage &man.portmanager.1;. Platzbedarf von Ports Ports Plattenplatz Die Ports-Sammlung kann sehr viel Plattenplatz verschlingen. Führen Sie nach dem Bau und der Installation eines Ports make clean aus, um die Arbeitsverzeichnisse zu löschen. Dieser Befehl entfernt das Verzeichnis work des gebauten Ports. Wollen Sie die gesamte Ports-Sammlung aufräumen, verwenden Sie folgenden Befehl: &prompt.root; portsclean -C Im Laufe der Zeit werden sich zahlreiche Distfiles im Verzeichnis distfiles ansammeln. Sie können diese entweder händisch löschen, oder Sie verwenden den folgenden Befehl, um alle Distfiles zu löschen, die nicht länger benötigt werden: &prompt.root; portsclean -D Falls Sie nur alle Distfiles löschen wollen, die von keinem derzeit installierten Port referenziert werden: &prompt.root; portsclean -DD Das Werkzeug portsclean wird automatisch bei der Installation von portupgrade mit installiert. Denken Sie daran, installierte Ports wieder zu entfernen, wenn Sie diese nicht mehr benötigen. Um diese Arbeit zu erleichtern, können Sie den Port ports-mgmt/pkg_cutleaves installieren. Nach der Installation Nach der Installation einer neuen Anwendung wollen Sie wahrscheinlich die mitgelieferte Dokumentation lesen und die Konfigurationsdateien der Anwendung anpassen. Wenn die Anwendung ein Dæmon ist, sollten Sie sicherstellen, dass die Anwendung beim Booten startet. Die einzelnen Schritte sind natürlich von Anwendung zu Anwendung verschieden. Wenn Sie sich allerdings nach der Installation einer Anwendung die Frage Was nun? stellen, helfen die folgenden Hinweise vielleicht weiter. Finden Sie mit &man.pkg.info.1; heraus, welche Dateien die Anwendung wo installiert hat. Wenn Sie beispielsweise gerade die Version 1.0.0 von FooPackage installiert haben, zeigt Ihnen das folgende Kommando alle installierten Dateien des Pakets: &prompt.root; pkg_info -L foopackage-1.0.0 | less Achten Sie besonders auf die Manualpages, die Sie in man/ Verzeichnissen finden und auf Konfigurationsdateien, die in etc/ abgelegt werden. Manche Pakete enthalten in doc/ zusätzliche Dokumentation. Wenn Sie sich nicht sicher sind, welche Version einer Anwendung Sie gerade installiert haben, können Sie mit dem folgenden Kommando nach der Anwendung suchen: &prompt.root; pkg_info | grep -i foopackage Das Kommando zeigt alle installierten Pakete, deren Paketname foopackage enthält. Ersetzen Sie foopackage durch den Namen der Anwendung, die Sie suchen. Nachdem Sie die Manualpages der Anwendung gefunden haben, lesen Sie diese bitte mit &man.man.1;. Schauen Sie sich auch die Beispiele für Konfigurationsdateien und die zusätzliche Dokumentation, wenn es welche gibt, an. Wenn es für die Anwendung eine Webseite gibt, suchen Sie dort nach zusätzlicher Dokumentation wie FAQs (häufig gestellte Fragen). Wenn Sie die Adresse der Webseite nicht kennen, versuchen Sie das folgende Kommando: &prompt.root; pkg_info foopackage-1.0.0 Die Ausgabe enthält oft eine Zeile, die mit WWW: beginnt und die URL der Webseite enthält. Ports, die während des Systemstarts gestartet werden sollen, installieren meist ein Beispielskript im Verzeichnis /usr/local/etc/rc.d. Überprüfen Sie dieses Skript. Wenn nötig, passen Sie das Skript an und benennen Sie es um. Weitere Informationen finden Sie in . Kaputte Ports Stolpern Sie einmal über einen Port, der bei Ihnen nicht funktioniert, könnten Sie zum Beispiel Folgendes tun: Stellen Sie fest, ob die Datenbank mit den Problemberichten bereits einen Lösungsvorschlag enthält. Ist dies der Fall, können Sie die vorgeschlagene Lösung testen. Bitten Sie den Betreuer des Ports um Hilfe. Geben Sie dazu make maintainer ein oder lesen Sie das Makefile im Verzeichnis des Ports, um an die E-Mail-Adresse zu kommen. Vergessen Sie nicht den Namen und die Version des Ports (schicken Sie die Zeile mit $FreeBSD: aus dem Makefile) und die Ausgabe bis zur Fehlermeldung mitzuschicken. Einige Ports werden nicht von einer Einzelperson, sondern von einer Mailingliste betreut. Viele (aber nicht alle) dieser Adressen haben die Form freebsd-NameDerListe@FreeBSD.org. Denken Sie daran, wenn Sie Ihre Fragen formulieren. Dies gilt insbesondere für Ports, die als als Betreuer den Eintrag freebsd-ports@FreeBSD.org aufweisen. Derartige Ports haben überhaupt keinen Betreuer. Korrekturen und Unterstützung kommen daher nur von Personen, die diese Mailingliste abonniert haben. Gerade in diesem Bereich werden jederzeit zusätzliche freiwillige Helfer benötigt! Erhalten Sie auf Ihre Anfrage keine Antwort, können Sie über &man.send-pr.1; einen Problembericht erstellen. Bevor Sie einen solchen Bericht erstellen, sollten Sie den Artikel Writing FreeBSD Problem Reports lesen. Reparieren Sie ihn! Das FreeBSD Porter's Handbook enthält eine detaillierte Beschreibung des Portsystems. Damit sind Sie in der Lage, einen gelegentlich kaputten Port zu reparieren oder einen eigenen Port zu erstellen. Holen Sie sich das Paket von einem FTP-Server in Ihrer Nähe. Die Basis-Sammlung aller Pakete liegt auf ftp.de.FreeBSD.org im Verzeichnis packages. Aber versuchen Sie zuerst einen Spiegel in Ihrer Nähe! Benutzen Sie das Programm &man.pkg.add.1;, um Pakete auf Ihrem Rechner zu installieren. Dies hat zudem den Vorteil, dass es schneller geht. diff --git a/de_DE.ISO8859-1/books/handbook/security/chapter.sgml b/de_DE.ISO8859-1/books/handbook/security/chapter.sgml index f10c0501b3..db754d36c1 100644 --- a/de_DE.ISO8859-1/books/handbook/security/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/security/chapter.sgml @@ -1,5327 +1,5327 @@ Matthew Dillon Viel von diesem Kapitel stammt aus der security(7) Manualpage von Martin Heinen Übersetzt von Sicherheit Sicherheit Übersicht Dieses Kapitel bietet eine Einführung in die Konzepte der Systemsicherheit. Neben einigen Daumenregeln werden weiterführende Themen wie S/Key, OpenSSL und Kerberos diskutiert. Die meisten der hier besprochenen Punkte treffen sowohl auf die Systemsicherheit sowie die Internetsicherheit zu. Das Internet hat aufgehört ein friedlicher Ort zu sein, an dem Sie nur nette Leute finden werden. Es ist unumgänglich, dass Sie Ihre Daten, Ihr geistiges Eigentum, Ihre Zeit und vieles mehr vor dem Zugriff von Hackern schützen. &os; besitzt eine Reihe von Werkzeugen und Mechanismen, um die Integrität und die Sicherheit Ihrer Systeme und Netzwerke zu gewährleisten. Nach dem Sie dieses Kapitel durchgearbeitet haben, werden Sie: Grundlegende auf &os; bezogene Sicherheitsaspekte kennen. Die verschiedenen Verschlüsselungsmechanismen von &os;, wie DES oder MD5, kennen. Wissen, wie Sie ein Einmalpasswörter zur Authentifizierung verwenden. TCP-Wrapper für inetd einrichten können. Wissen, wie Sie KerberosIV vor 5.0-Release einrichten. Wissen, wie Sie Kerberos5 unter &os; einrichten. Firewalls mit IPFW erstellen können. Wissen, wie Sie IPsec konfigurieren und ein VPN zwischen &os;/&windows; Systemen einrichten, OpenSSH, &os;s Implementierung von SSH, konfigurieren und benutzen können. Portaudit anwenden können, um Softwarepakete Dritter, die Sie über die Ports-Sammlung installieren, auf bekannte Sicherheitslücken hin zu überprüfen. Mit &os;-Sicherheitshinweisen umgehen können. Eine Vorstellung davon haben, was Prozessüberwachung (Process Accounting) ist und wie Sie diese Funktion unter &os; aktivieren können. Bevor Sie dieses Kapitel lesen, sollten Sie Grundlegende Konzepte von &os; und dem Internet verstehen. Dieses Buch behandelt weitere Sicherheitsthemen. Beispielsweise werden vorgeschriebene Zugriffskontrollen in und Firewalls in besprochen. Einführung Sicherheit ist ein Konzept, das beim Systemadministrator anfängt und aufhört. Obwohl alle BSD &unix; Mehrbenutzersysteme über Sicherheitsfunktionen verfügen, ist es wohl eine der größten Aufgaben eines Systemadministrators zusätzliche Sicherheitsmechanismen zu erstellen und zu pflegen. Maschinen sind nur so sicher wie sie gemacht werden und Sicherheitsanforderungen stehen oft der Benutzerfreundlichkeit entgegen. Auf &unix; Systemen können sehr viele Prozesse gleichzeitig laufen und viele dieser Prozesse sind Server, das heißt von außen kann auf sie zugegriffen werden. In einer Zeit, in der die Minicomputer und Mainframes von gestern die Desktops von heute sind und Rechner immer mehr vernetzt werden, kommt der Sicherheit eine große Bedeutung zu. Zur Systemsicherheit gehört auch die Beschäftigung mit verschiedenen Arten von Angriffen, auch solchen, die versuchen, ein System still zu legen, oder sonst unbrauchbar zu machen ohne root zu kompromittieren. Sicherheitsaspekte lassen sich in mehrere Kategorien unterteilen: Denial-of-Service Angriffe. Kompromittierte Accounts. Kompromittierter root-Account durch zugreifbare Server. Kompromittierter root-Account durch kompromittierte Accounts. Einrichten von Hintertüren. DoS Angriffe Denial-of-Service (DoS) Sicherheit DoS Angriffe Denial-of-Service (DoS) Denial-of-Service (DoS) Ein Denial-of-Service (Verhinderung von Diensten, DoS) Angriff entzieht einer Maschine Ressourcen, die sie zur Bereitstellung von Diensten benötigt. Meist versuchen Denial-of-Service Angriffe die Dienste oder den Netzwerkstack einer Maschine zu überlasten, um so die Maschine auszuschalten oder nicht nutzbar zu machen. Einige Angriffe versuchen, Fehler im Netzwerkstack auszunutzen, und die Maschine mit einem einzigen Paket auszuschalten. Diese Art des Angriffs kann nur verhindert werden, indem der entsprechende Fehler im Kernel behoben wird. Oft können Angriffe auf Dienste durch die Angabe von Optionen verhindert werden, die die Last, die ein Dienst auf das System unter widrigen Umständen ausüben kann, begrenzt. Angriffen auf das Netzwerk ist schwerer zu begegnen. Außer durch Trennen der Internetverbindung ist zum Beispiel einem Angriff mit gefälschten Paketen nicht zu begegnen. Diese Art von Angriff wird Ihr System zwar nicht unbrauchbar machen, kann aber die Internetverbindung sättigen. Sicherheit kompromittierte Accounts Kompromittierte Accounts kommen noch häufiger als DoS Angriffe vor. Viele Systemadministratoren lassen auf ihren Maschinen noch die Dienste telnetd, rlogind, rshd und ftpd laufen. Verbindungen zu diesen Servern werden nicht verschlüsselt. Wenn Sie eine größere Benutzerzahl auf Ihrem System haben, die sich von einem entfernten System anmelden, ist die Folge davon, dass das Passwort eines oder mehrerer Benutzer ausgespäht wurde. Ein aufmerksamer Systemadministrator wird die Logs über Anmeldungen von entfernten Systemen auf verdächtige Quelladressen, auch für erfolgreiche Anmeldungen, untersuchen. Es ist immer davon auszugehen, dass ein Angreifer, der Zugriff auf einen Account hat, Zugang zum root-Account erlangt. Allerdings gibt der Zugriff auf einen Account auf einem gut gesicherten und gepflegten System nicht notwendig Zugriff auf den root-Account. Diese Unterscheidung ist wichtig, da ein Angreifer, der keinen Zugang zu root besitzt, seine Spuren nicht verwischen kann. Er kann höchstens die Dateien des betreffenden Benutzers verändern oder die Maschine stilllegen. Kompromittierte Accounts sind sehr häufig, da Benutzer meist nicht dieselben Vorsichtsmaßnahmen wie Administratoren treffen. Sicherheit Hintertüren Es gibt viele Wege, Zugang zum root-Account eines Systems zu bekommen: Ein Angreifer kann das Passwort von root kennen, er kann einen Fehler in einem Server entdecken, der unter root läuft und dann über eine Netzwerkverbindung zu diesem Server einbrechen. Oder er kennt einen Fehler in einem SUID-root Programm, der es ihm erlaubt, root zu werden, wenn er einmal einen Account kompromittiert hat. Wenn ein Angreifer einen Weg gefunden hat, root zu werden, braucht er vielleicht keine Hintertür auf dem System installieren. Viele der heute bekannten und geschlossenen Sicherheitslöcher, die zu einem root Zugriff führen, verlangen vom Angreifer einen erheblichen Aufwand, um seine Spuren zu verwischen. Aus diesem Grund wird er sich wahrscheinlich entschließen, eine Hintertür (engl. Backdoor) zu installieren. Eine Hintertür erlaubt es dem Angreifer leicht auf den root-Account zuzugreifen. Einem klugen Systemadministrator erlaubt sie allerdings auch, den Einbruch zu entdecken. Wenn Sie es einem Angreifer verwehren, Hintertüren zu installieren, kann das schädlich für Ihre Sicherheit sein, da es vielleicht verhindert, dass die Lücke, die der Angreifer für den Einbruch ausgenutzt hat, entdeckt wird. Sicherheitsmaßnahmen sollten immer in mehreren Schichten angelegt werden. Die Schichten können wie folgt eingeteilt werden: Absichern von root und Accounts. Absichern von unter root laufenden Servern und SUID/SGID Programmen. Absichern von Accounts. Absichern der Passwort-Datei. Absichern des Kernels, der Geräte und von Dateisystemen. Schnelles Aufdecken von unbefugten Veränderungen des Systems. Paranoia. Die einzelnen Punkte der obigen Liste werden im nächsten Abschnitt genauer behandelt. Absichern von &os; Sicherheit &os; absichern Kommandos und Protokolle In diesem Abschnitt werden Anwendungen fett gekennzeichnet, spezifische Kommandos werden in einer Fixschrift dargestellt und Protokolle verwenden die normale Schriftart. Diese typographische Konvention hilft, Begriffe wie ssh zu unterscheiden, die sowohl Protokoll als auch Kommando sein können. Die folgenden Abschnitte behandeln die im letzten Abschnitt erwähnten Methoden Ihr &os;-System zu sichern. Absichern von <username>root</username> und Accounts su Zuallererst, kümmern Sie sich nicht um die Absicherung von Accounts, wenn Sie root noch nicht abgesichert haben. Auf den meisten Systemen ist root ein Passwort zugewiesen. Sie sollten immer davon ausgehen, dass dieses Passwort kompromittiert ist. Das heißt nicht, dass Sie das Passwort entfernen sollten, da es meist für den Konsolenzugriff notwendig ist. Vielmehr heißt es, dass Sie das Passwort nicht außerhalb der Konsole, auch nicht zusammen mit &man.su.1;, verwenden sollten. Stellen Sie sicher, dass Ihre PTYs in ttys als unsicher markiert sind und damit Anmeldungen von root mit telnet oder rlogin verboten sind. Wenn Sie andere Anwendungen wie SSH zum Anmelden benutzen, vergewissern Sie sich, dass dort ebenfalls Anmeldungen als root verboten sind. Für SSH editieren Sie /etc/ssh/sshd_config und überprüfen, dass PermitRootLogin auf NO gesetzt ist. Beachten Sie jede Zugriffsmethode – Dienste wie FTP werden oft vergessen. Nur an der Systemkonsole sollte ein direktes Anmelden als root möglich sein. wheel Natürlich müssen Sie als Systemadministrator root-Zugriff erlangen können. Dieser sollte aber durch zusätzliche Passwörter geschützt sein. Ein Weg, Zugang zu root zu ermöglichen, ist es, berechtigte Mitarbeiter in /etc/group in die Gruppe wheel aufzunehmen. Die Personen, die Mitglieder in der Gruppe wheel sind, können mit su zu root wechseln. Ihre Mitarbeiter sollten niemals die Gruppe wheel als primäre Gruppe in /etc/passwd besitzen. Mitarbeiter sollten der Gruppe staff angehören und über /etc/group in wheel aufgenommen werden. Es sollten auch nur die Mitarbeiter, die wirklich root Zugriff benötigen in wheel aufgenommen werden. Mit anderen Authentifizierungsmethoden müssen Sie niemanden in wheel aufnehmen. Wenn Sie z.B. Kerberos benutzen, wechseln Sie mit &man.ksu.1; zu root und der Zugriff wird mit der Datei .k5login geregelt. Dies ist vielleicht eine bessere Lösung, da es der wheel-Mechanismus einem Angreifer immer noch möglich macht, den root-Account zu knacken, nachdem er einen Mitarbeiter-Account geknackt hat. Obwohl der wheel-Mechanismus besser als gar nichts ist, ist er nicht unbedingt die sicherste Lösung. Indirekt können Sie die Accounts von Mitarbeitern und damit auch den Zugriff auf root schützen, indem Sie eine alternative Zugangsmethode verwenden und die Accounts der Mitarbeiter mit einem ungültigen verschlüsselten Passwort versehen. Mit &man.vipw.8; können Sie jedes verschlüsselte Passwort mit einem * Zeichen ersetzen. Das Kommando wird /etc/master.passwd und die Benutzer/Passwort Datenbank aktualisieren und die Passwort Authentifizierung abstellen. Ein Account wie foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh sollte wie folgt abgeändert werden: foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh Da ein verschlüsseltes Passwort niemals ein * sein kann, verhindert dies die normale Anmeldung. Damit müssen sich die Mitarbeiter mit anderen Mechanismen wie &man.kerberos.1; oder &man.ssh.1; authentifizieren. Wenn Sie etwas wie Kerberos benutzen, müssen Sie die Maschinen, die die Kerberos-Server beheimaten und die Maschinen der Benutzer absichern. Wenn Sie öffentliche/private Schlüssel mit SSH benutzen, muss die Maschine von der die Anmeldung gestartet wird, gesichert werden. Als zusätzliche Sicherheitsschicht können Sie das Schlüsselpaar beim Erstellen mit &man.ssh-keygen.1; durch ein Passwort schützen. Dadurch, dass Sie die Passwörter Ihrer Mitarbeiter als ungültig markiert haben, stellen Sie sicher, dass sich die Mitarbeiter nur mit den sicheren Methoden, die Sie aufgesetzt haben, anmelden können. Dies zwingt alle Mitarbeiter, verschlüsselte Verbindungen für ihre Sitzungen zu verwenden, und schließt ein wichtiges Loch, dass gerne von Angreifern ausgenutzt wird: Das Abhören des Netzwerks von einer anderen weniger gesicherten Maschine. Die indirekten Sicherheitsmechanismen setzen voraus, dass Sie sich von einer restriktiven Maschine auf einer weniger restriktiven Maschine anmelden. Wenn zum Beispiel auf Ihrem Hauptrechner alle möglichen Arten von Servern laufen, so sollten auf Ihrer Workstation keine Server laufen. Um Ihre Workstation vernünftig abzusichern, sollten auf Ihr so wenig Server wie möglich bis hin zu keinem Server laufen. Sie sollten zudem über einen Bildschirmschoner verfügen, der mit einem Passwort gesichert ist. Natürlich kann ein Angreifer, der physikalischen Zugang zu einer Maschine hat, jede Art von Sicherheitsmechanismen umgehen. Dieses Problem sollten Sie daher auch in Ihren Überlegungen berücksichtigen. Beachten Sie dabei aber, dass der Großteil der Einbrüche über das Netzwerk erfolgt und die Einbrecher keinen Zugang zu der Maschine besitzen. KerberosIV Mit Kerberos können Sie das Passwort eines Mitarbeiters an einer Stelle ändern und alle Maschinen, auf denen der Mitarbeiter einen Account hat, beachten die Änderung sofort. Wird der Account eines Mitarbeiters einmal kompromittiert, so sollte die Fähigkeit, das Passwort mit einem Schlag auf allen Maschinen zu ändern, nicht unterschätzt werden. Mit einzelnen Passwörtern wird es schwierig, das Passwort auf N Maschinen zu ändern. Mit Kerberos können Sie auch Beschränkungen für Passwörter festlegen: Nicht nur das Ticket kann nach einiger Zeit ungültig werden, Sie können auch festlegen, dass ein Benutzer nach einer bestimmten Zeit, z.B. nach einem Monat, das Passwort wechseln muss. Absichern von unter <username>root</username> laufenden Servern und SUID/SGID Programmen ntalk comsat finger Sandkästen sshd telnetd rshd rlogind Ein kluger Systemadministrator lässt nur die Dienste, die er wirklich braucht, laufen; nicht mehr und auch nicht weniger. Beachten Sie, dass Server von Dritten die fehleranfälligsten sind. Wenn Sie z.B. eine alte Version von imapd oder popper laufen lassen, ist das so, als würden Sie der ganzen Welt freien Zugang zu root geben. Lassen Sie keine Server laufen, die Sie vorher nicht genau überprüft haben. Viele Server müssen nicht unter root laufen, zum Beispiel können ntalk, comsat und finger in speziellen Sandkästen unter einem Benutzer laufen. Ein Sandkasten ist keine perfekte Lösung, wenn Sie nicht eine Menge Arbeit in die Konfiguration investieren, doch bewährt sich hier das Prinzip, die Sicherheit in Schichten aufzubauen. Wenn es einem Angreifer gelingt, in einen Server, der in einem Sandkasten läuft, einzubrechen, dann muss er immer noch aus dem Sandkasten selber ausbrechen. Je mehr Schichten der Angreifer zu durchbrechen hat, desto kleiner sind seine Aussichten auf Erfolg. In der Vergangenheit wurden praktisch in jedem Server, der unter root läuft, Lücken gefunden, die zu einem root Zugriff führten. Dies betrifft selbst die grundlegenden Systemdienste. Wenn Sie eine Maschine betreiben, auf der man sich nur mit SSH anmelden kann, dann stellen Sie die Dienste telnetd, rshd oder rlogind ab! In der Voreinstellung laufen unter &os; ntalkd, comsat und finger nun in einem Sandkasten. Ein weiteres Programm, das in einem Sandkasten laufen sollte, ist &man.named.8;. In /etc/defaults/rc.conf sind die notwendigen Argumente, um named in einem Sandkasten laufen zu lassen, in kommentierter Form schon enthalten. Abhängig davon, ob Sie ein neues System installieren oder ein altes System aktualisieren, sind die hierfür benötigten Benutzer noch nicht installiert. Ein kluger Systemadministrator sollte immer nach Möglichkeiten suchen, Server in einem Sandkasten laufen zu lassen. sendmail Einige Server wie sendmail, popper, imapd und ftpd werden normalerweise nicht in Sandkästen betrieben. Zu einigen Servern gibt es Alternativen, aber diese wollen Sie vielleicht wegen der zusätzlich nötigen Arbeit nicht installieren (ein weiteres Beispiel für den Widerspruch zwischen Sicherheit und Benutzerfreundlichkeit). In diesem Fall müssen Sie die Server unter root laufen lassen und auf die eingebauten Mechanismen vertrauen, Einbrüche zu entdecken. Weitere potentielle Löcher, die zu einem root-Zugriff führen können, sind die auf dem System installierten SUID- und SGID-Programme. Die meisten dieser Programme wie rlogin stehen in /bin, /sbin, /usr/bin, oder /usr/sbin. Obwohl nichts 100% sicher ist, können Sie davon ausgehen, dass die SUID- und SGID-Programme des Basissystems ausreichend sicher sind. Allerdings werden ab und an in diesen Programmen Löcher gefunden. 1998 wurde in Xlib ein Loch gefunden, das xterm, der normal mit SUID installiert wird, verwundbar machte. Es ist besser auf der sicheren Seite zu sein, als sich später zu beklagen, darum wird ein kluger Systemadministrator den Zugriff auf SUID-Programme mit einer Gruppe, auf die nur Mitarbeiter zugreifen können, beschränken. SUID-Programme, die niemand benutzt, sollten mit chmod 000 deaktiviert werden. Zum Beispiel braucht ein Server ohne Bildschirm kein xterm Programm. SGID-Programme sind vergleichbar gefährlich. Wenn ein Einbrecher Zugriff auf SGID-kmem Programm erhält, kann er vielleicht /dev/kmem und damit die verschlüsselte Passwortdatei lesen. Dies kompromittiert unter Umständen jeden Account, der mit einem Passwort geschützt ist. Alternativ kann ein Einbrecher, der in die Gruppe kmem eingebrochen ist, die Tastendrücke auf PTYs verfolgen. Dies schließt auch PTYs mit ein, auf denen sich ein Benutzer mit sicheren Methoden anmeldet. Ein Einbrecher, der Zugriff auf die tty Gruppe hat, kann auf fast jeden Terminal anderer Benutzer schreiben. Wenn der Benutzer einen Terminal-Emulator benutzt, der über eine Tastatur-Simulation verfügt, könnte der Angreifer Daten generieren, die den Terminal veranlassen, ein Kommando unter diesem Benutzer laufen zu lassen. Absichern von Accounts Accounts sind für gewöhnlich sehr schwierig abzusichern. Während Sie drakonische Beschränkungen für Ihre Mitarbeiter einrichten und deren Passwörter als ungültig markieren können, werden Sie das vielleicht bei den normalen Accounts nicht durchsetzen. Wenn Sie über ausreichend Macht verfügen, gelingt es Ihnen vielleicht doch, ansonsten müssen Sie diese Accounts aufmerksam überwachen. Wegen der zusätzlichen Administrationsarbeit und der nötigen technischen Unterstützung ist die Verwendung von SSH und Kerberos mit normalen Accounts erschwert, obwohl das natürlich sicherer als die Verwendung von verschlüsselten Passwörtern ist. Absichern der Passwort-Datei Der einzig sichere Weg ist, so viele Accounts wie möglich als ungültig zu markieren und SSH oder Kerberos zu benutzen, um auf sie zuzugreifen. Obwohl die Datei /etc/spwd.db, die die verschlüsselten Passwörter enthält, nur von root gelesen werden kann, mag ein Angreifer lesenden Zugriff auf diese Datei erlangen, ohne die Fähigkeit sie auch zu beschreiben. Ihre Überwachungsskripten sollten Änderungen an der Passwort-Datei melden (siehe Überprüfen der Integrität von Dateien weiter unten). Absichern des Kernels, der Geräte und von Dateisystemen Wenn ein Angreifer root-Zugriff erlangt, kann er so ziemlich alles mit Ihrem System anstellen, doch sollten Sie es ihm nicht zu leicht machen. Die meisten modernen Kernel haben zum Beispiel einen Gerätetreiber, der es erlaubt, Pakete abzuhören. Unter &os; wird das Gerät bpf genannt. Für gewöhnlich wird ein Angreifer versuchen, dieses Gerät zu nutzen, um Pakete abzuhören. Sie sollten ihm diese Gelegenheit nicht geben und auf den meisten Systemen ist das Gerät bpf nicht nötig. sysctl Auch wenn Sie bpf nicht verwenden, müssen Sie sich immer noch um /dev/mem und /dev/kmem sorgen. Außerdem kann der Angreifer immer noch auf die rohen Geräte (raw devices) schreiben. Weiterhin gibt es ein Programm zum Nachladen von Modulen in den Kernel: &man.kldload.8;. Ein unternehmungslustiger Angreifer kann dies benutzen, um sein eigenes bpf oder ein anderes zum Abhören geeignetes Gerät in den laufenden Kernel einzubringen. Um diese Probleme zu vermeiden, müssen Sie den Kernel auf einer höheren Sicherheitsstufe, mindestens 1, laufen lassen. Die Sicherheitsstufe wird durch die Variable kern.securelevel, die mit sysctl gesetzt werden kann, angegeben. Nachdem Sie die Sicherheitsstufe auf 1 gesetzt haben, sind schreibende Zugriffe auf rohe Geräte verboten und die speziellen chflags Optionen, wie schg werden erzwungen. Sie müssen sicherstellen, dass die schg Option auf allen kritischen Programmen, Verzeichnissen und Skripten, die bis zum Setzen der Option laufen, aktiviert ist. Das mag übertrieben sein da eine Migration des Systems erschwert wird, wenn Sie auf einer höheren Sicherheitsstufe arbeiten. Sie können einen Kompromiss erreichen, indem Sie das System auf einer erhöhten Sicherheitsstufe laufen lassen, aber die schg Option nicht für jede Datei und jedes Verzeichnis auf der Welt setzen. Eine andere Möglichkeit besteht darin, / und /usr einfach schreibgeschützt einzuhängen. Bedenken Sie aber, dass Sie das Aufdecken eines Einbruchs vielleicht verhindern, wenn Sie zu drastische Maßnahmen zum Schutz Ihres Systems verwenden. Überprüfen der Integrität von Dateien Sie können die Systemkonfiguration und die Dateien nur so weit schützen, wie es die Benutzbarkeit des Systems nicht einschränkt. Wenn Sie zum Beispiel mit chflags die Option schg auf die meisten Dateien in / und /usr setzen, kann das Ihre Arbeit mehr behindern als nützen. Die Maßnahme schützt zwar die Dateien, schließt aber auch eine Möglichkeit, Veränderungen zu entdecken, aus. Die letzte Schicht des Sicherheitsmodells – das Aufdecken von Einbrüchen – ist sicherlich die wichtigste. Alle Sicherheitsmaßnahmen sind nichts wert, oder wiegen Sie in falscher Sicherheit, wenn Sie nicht in der Lage sind, einen möglichen Einbruch zu entdecken. Die Hälfte der Sicherheitsmaßnahmen hat die Aufgabe, einen Einbruch zu verlangsamen, um es zu ermöglichen, den Einbrecher auf frischer Tat zu ertappen. Der beste Weg, einen Einbruch zu entdecken, ist es, nach veränderten, fehlenden oder unerwarteten Dateien zu suchen. Der wiederum beste Weg, nach veränderten Dateien zu suchen, ist es, die Suche von einem anderen (oft zentralen) besonders geschützten System durchzuführen. Es ist wichtig, dass Ihre Sicherheitsüberprüfungen vor einem Angreifer verborgen bleiben und daher sind sie auf einem besonders geschützten System gut aufgehoben. Um dies optimal auszunutzen, müssen Sie dem besonders geschützten System Zugriffsrechte auf die zu schützenden Systeme geben. Sie können die Dateisysteme der zu schützenden Systeme schreibgeschützt für das besonders geschützte System exportieren, oder Sie können der besonders geschützten Maschine SSH auf die anderen Maschinen erlauben, indem Sie SSH Schlüsselpaare installieren. Mit Ausnahme des verursachten Netzwerkverkehrs ist die NFS-Methode die am wenigsten sichtbare. Sie erlaubt es Ihnen, nahezu unentdeckt die Dateisysteme der Clients zu beobachten. Wenn Ihr besonders geschütztes System mit den Clients über einen Switch verbunden ist, ist die NFS-Methode oft das Mittel der Wahl. Wenn das besonders geschützte System allerdings mit einem Hub verbunden ist, oder der Zugriff über mehrere Router geschieht, ist die NFS-Methode aus der Netzwerksicht zu unsicher. In einem solchen Fall ist SSH besser geeignet, auch wenn es deutliche Spuren hinterlässt. Wenn das besonders geschützte System lesenden Zugriff auf die Clients hat, müssen Sie Skripten schreiben, die die Überwachung durchführen. Wenn Sie die NFS-Methode verwenden, können Sie dazu einfache Systemwerkzeuge wie &man.find.1; und &man.md5.1; benutzen. Am besten berechnen Sie einmal am Tag MD5-Prüfsummen der Dateien, Konfigurationsdateien in /etc und /usr/local/etc sollten öfter überprüft werden. Wenn Unstimmigkeiten zwischen den auf der besonders geschützten Maschine gehaltenen MD5-Prüfsummen und den ermittelten Prüfsummen festgestellt werden, sollte Ihr System einen Systemadministrator benachrichtigen, der den Unstimmigkeiten dann nachgehen sollte. Ein gutes Skript überprüft das System auch auf verdächtige SUID-Programme sowie gelöschte oder neue Dateien in / und /usr. Wenn Sie SSH anstelle von NFS benutzen, wird das Erstellen der Skripten schwieriger. Sie müssen die Skripten und die Programme wie find mit scp auf den Client kopieren. Damit machen Sie die Überprüfung für einen Angreifer sichtbar. Außerdem kann der SSH-Client auf dem Zielsystem schon kompromittiert sein. Zusammenfassend, kann der Einsatz von SSH nötig sein, wenn Sie über ungesicherte Verbindungen arbeiten, aber der Umgang mit dieser Methode ist auch sehr viel schwieriger. Ein gutes Sicherheitsskript wird auch Dateien von Benutzern, die den Zugriff auf ein System ermöglichen, wie .rhosts, .shosts, .ssh/authorized_keys usw., auf Veränderungen untersuchen, die über die Möglichkeiten einer Überprüfung mit MD5 (die ja nur Veränderungen erkennen kann) hinausgehen. Wenn Sie über große Partitionen verfügen, kann es zu lange dauern, jede Datei zu überprüfen. In diesem Fall sollten Sie beim Einhängen des Dateisystems Optionen setzen, die das Ausführen von SUID-Programmen verbieten. &man.mount.8; stellt dazu nosuid zur Verfügung. Sie sollten diese Dateien aber trotzdem mindestens einmal die Woche überprüfen, da das Ziel dieser Schicht das Aufdecken eines Einbruchs, auch wenn er nicht erfolgreich war, ist. Die Prozessüberwachung (siehe &man.accton.8;) des Betriebssystems steht ein günstiges Werkzeug zur Verfügung, dass sich bei der Analyse eines Einbruchs als nützlich erweisen kann. Insbesondere können Sie damit herausfinden, wie der Einbrecher in das System eingedrungen ist, vorausgesetzt die Dateien der Prozessüberwachung sind noch alle intakt. Schließlich sollten die Sicherheitsskripten die Logdateien analysieren. Dies sollte so sicher wie möglich durchgeführt werden, nützlich ist das Schreiben von Logdateien auf entfernte Systeme mit syslog. Ein Einbrecher wird versuchen, seine Spuren zu verwischen. Die Logdateien sind wichtig für den Systemadministrator, da er aus ihnen den Zeitpunkt und die Art des Einbruchs bestimmen kann. Eine Möglichkeit, die Logdateien unverändert aufzuheben, ist es, die Systemkonsole auf einen seriellen Port zu legen und die Informationen dort von einer gesicherten Maschine auszulesen. Paranoia Es schadet nicht, ein bisschen paranoid zu sein. Grundsätzlich darf ein Systemadministrator jede Sicherheitsmaßnahme treffen, die die Bedienbarkeit des Systems nicht einschränkt. Er kann auch Maßnahmen treffen, die die Bedienbarkeit einschränken, wenn er diese vorher genau durchdacht hat. Was noch wichtiger ist: Halten Sie sich nicht sklavisch an dieses Dokument, sondern führen Sie eigene Maßnahmen ein, um nicht einem künftigen Angreifer, der auch Zugriff auf dieses Dokument hat, alle Ihre Methoden zu verraten. Denial-of-Service Angriffe Denial-of-Service (DoS) Dieser Abschnitt behandelt Denial-of-Service Angriffe (DoS). Ein DoS-Angriff findet typischerweise auf der Paketebene statt. Während Sie nicht viel gegen moderne Angriffe mit falschen Paketen, die das Netzwerk sättigen, ausrichten können, können Sie sehr wohl den Schaden begrenzen, den solche Angriffe verursachen können und insbesondere einen kompletten Serverausfall verhindern, indem Sie beispielsweise folgende Vorkehrungen treffen: Begrenzen von fork() Aufrufen. Begrenzen von Sprungbrett-Angriffen (ICMP response Angriffen, ping zu Broadcast-Adressen usw.). Kernel-Cache für Routen. Ein häufiger DoS-Angriff gegen forkende Server versucht den Server dazu zu bringen, solange neue Prozesse zu starten, bis das System den ganzen Speicher und alle Dateideskriptoren verbraucht hat, was dann zu einem Ausfall des Servers führt. &man.inetd.8; besitzt einige Optionen, um diese Art von Angriffen zu begrenzen. Beachten Sie bitte, dass es möglich ist, einen Ausfall einer Maschine zu verhindern, doch ist es generell nicht möglich, den Ausfall eines Dienstes bei dieser Art von Angriffen zu verhindern. Lesen Sie sich bitte die Manualpages von inetd gut durch und achten Sie speziell auf die Optionen , und . Angriffe mit gefälschten IP-Adressen umgehen , so dass normalerweise eine Kombination der Optionen benutzt werden muss. Manche Server, die nicht von inetd gestartet werden, besitzen Optionen, um den Start über fork() einzuschränken. Sendmail besitzt die Option , die besser als die eingebauten Optionen zur Begrenzung der Systemauslastung funktioniert. Sie sollten beim Start von sendmail MaxDaemonChildren so hoch setzen, dass Sie die erwartete Auslastung gut abfangen können. Allerdings sollten Sie den Wert nicht so hoch setzen, dass der Rechner über seine eigenen Füße fällt. Es ist auch klug, Sendmail im Queue-Modus () laufen zu lassen. Der Dæmon (sendmail -bd) sollte getrennt von den Queue-Läufen (sendmail -q15m) laufen. Wenn Sie trotzdem eine sofortige Auslieferung der Post wünschen, können Sie die Queue in einem geringeren Intervall, etwa , abarbeiten. Geben Sie für dieses Sendmail aber einen vernünftigen Wert für MaxDaemonChildren an, um Fehler zu verhindern. Syslogd kann direkt angegriffen werden. Daher empfehlen wir Ihnen unbedingt die Option zu benutzen. Sollte das nicht möglich sein, benutzen Sie bitte . Vorsicht ist auch mit Diensten geboten, die automatisch eine Rückverbindung eröffnen, wie der reverse-identd der TCP-Wrapper. Diese Funktion der TCP-Wrapper sollten Sie normalerweise nicht benutzen. Es empfiehlt sich sehr, interne Dienste vor externen Zugriffen durch eine Firewall an der Grenze Ihres Netzwerks zu schützen. Dahinter steckt mehr die Idee, das Netzwerk vor Überlastung durch Angriffe von außen zu schützen, als interne Dienste vor einem root-Zugriff aus dem Netz zu schützen. Konfigurieren Sie immer eine Firewall, die alle Zugriffe blockiert, das heißt blockieren Sie alles außer den Ports A, B, C, D und M-Z. Damit können Sie Zugriffe auf alle niedrigen Ports blockieren und Zugriffe auf spezielle Dienste wie named, wenn Sie den primären Namensdienst für eine Zone anbieten, ntalkd oder sendmail erlauben. Wenn Sie die Firewall so konfigurieren, das sie in der Voreinstellung alle Zugriffe erlaubt, ist es sehr wahrscheinlich, dass Sie vergessen, eine Reihe von Diensten zu blockieren bzw. einen internen Dienst einführen und dann vergessen die Firewall zu aktualisieren. Sie können immer die höheren Portnummern öffnen, ohne die niedrigen Portnummern, die nur von root benutzt werden dürfen, zu kompromittieren. Beachten Sie bitte auch, dass es &os; erlaubt, die Portnummern, die für dynamische Verbindungen zur Verfügung stehen, zu konfigurieren. Mit sysctl lassen sich verschiedene Bereiche der net.inet.ip.portrange Variablen setzen (eine Liste erhalten Sie mit sysctl -a | fgrep portrange). So können Sie zum Beispiel die Portnummern 4000 bis 5000 für den normalen Bereich und die Nummern 49152 bis 65535 für den hohen Bereich vorsehen. Dies erleichtert Ihnen die Konfiguration der Firewall, da Sie nun Zugriffe auf Ports unterhalb von 4000, mit Ausnahme der Dienste, die von außen erreichbar sein sollen, blockieren können. Eine andere Form eines DoS-Angriffs nutzt einen Server als Sprungbrett, der Server wird dabei so angegriffen, dass seine Antworten ihn selber, das lokale Netzwerk oder einen anderen Server überlasten. Der am häufigsten verwendete Angriff dieser Art ist der ICMP ping broadcast Angriff. Der Angreifer fälscht dazu ping-Pakete, die zu der Broadcast-Adresse Ihres LANs gesendet werden, indem er darin als Quelladresse die Adresse des Opfers einsetzt. Wenn die Router an der Grenze Ihres Netzwerks ping-Pakete auf Broadcast-Adressen nicht abwehren, wird Ihr LAN genügend Netzwerkverkehr generieren, um das Ziel des Angriffs zu überlasten. Dies kann besonders effektiv sein, wenn der Angreifer diese Methode mit mehreren Dutzend Broadcast-Adressen über mehrere Netzwerke einsetzt. Es wurden schon Broadcast-Angriffe mit über 120 Megabit pro Sekunde gemessen. Ein zweiter Sprungbrett-Angriff wird gegen das Fehlerbehandlungssystem von ICMP eingesetzt. Indem ein Angreifer Pakete konstruiert, die eine ICMP-Fehlermeldung hervorrufen, kann er das einkommende Netzwerk des Servers sättigen und diesen wiederum veranlassen sein ausgehendes Netzwerk mit ICMP-Antworten zu sättigen. Diese Art des Angriffs kann den kompletten Speicher des Servers aufbrauchen und damit den Server stilllegen, insbesondere wenn der Server nicht in der Lage ist, die generierten ICMP-Antworten schnell genug abzuführen. Verwenden Sie die sysctl-Variable net.inet.icmp.icmplim, um die Auswirkungen solcher Angriffe zu begrenzen. Die letzte weit verbreitete Form von Sprungbrett-Angriffen verwendet interne inetd-Dienste wie den UDP echo-Dienst. Der Angreifer fälscht dazu einfach ein UDP-Paket, indem er als Quellport den echo-Port von Server A und als Zielport den echo-Port von Server B angibt, wobei beide Server in Ihrem LAN stehen. Die beiden Server werden nun dieses Paket zwischen sich hin und her schicken. Der Angreifer kann die beiden Server und das LAN einfach damit überlasten, dass er mehrere Pakete dieser Art generiert. Ähnliche Probleme gibt es mit dem internen chargen-Port, daher sollten Sie die internen inetd-Testdienste abstellen. Gefälschte IP-Pakete können dazu benutzt werden, den Kernel-Cache für Routen zu überlasten. Schauen Sie sich bitte die sysctl-Parameter net.inet.ip.rtexpire, rtminexpire und rtmaxcache an. Ein Angriff der gefälschte Pakete mit zufälligen Quelladressen einsetzt, bewirkt, dass der Kernel eine Route im Route-Cache anlegt, die Sie sich mit netstat -rna | fgrep W3 ansehen können. Diese Routen verfallen für gewöhnlich nach 1600 Sekunden. Wenn der Kernel feststellt, dass die Routingtabelle im Cache zu groß geworden ist, wird er dynamisch den Wert von rtexpire verringern. Dieser Wert wird aber nie kleiner werden als rtminexpire. Daraus ergeben sich zwei Probleme: Der Kernel reagiert nicht schnell genug, wenn ein Server mit einer niedrigen Grundlast plötzlich angegriffen wird. rtminexpire ist nicht klein genug, um einen anhaltenden Angriff zu überstehen. Wenn Ihre Server über eine T3 oder eine noch schnellere Leitung mit dem Internet verbunden sind, ist es klug, mit &man.sysctl.8; die Werte für rtexpire und rtminexpire händisch zu setzen. Setzen Sie bitte keinen der Werte auf Null, außer Sie wollen die Maschine zum Erliegen bringen. Ein Wert von 2 Sekunden für beide Parameter sollte ausreichen, um die Routingtabelle vor einem Angriff zu schützen. Anmerkungen zum Zugriff mit Kerberos und SSH ssh KerberosIV Es gibt ein paar Punkte, die Sie beachten sollten, wenn Sie Kerberos oder SSH einsetzen wollen. Kerberos 5 ist ein ausgezeichnetes Authentifizierungsprotokoll. Leider gibt es Fehler in den für Kerberos angepassten Versionen von telnet und rlogin, die sie ungeeignet für den Umgang mit binären Datenströmen machen. Weiterhin verschlüsselt Kerberos Ihre Sitzung nicht, wenn Sie nicht die Option verwenden, mit SSH wird dagegen alles verschlüsselt. Ein Problem mit SSH sind Weiterleitungen von Verbindungen. Wenn Sie von einer sicheren Maschine, auf der sich Ihre Schlüssel befinden, eine Verbindung zu einer ungesicherten Maschine aufmachen, wird für die Dauer der Sitzung ein Port für Weiterleitungen geöffnet. Ein Angreifer, der auf der unsicheren Maschine Zugang zu root hat, kann diesen Port benutzen, um Zugriff auf andere Maschinen zu erlangen, die mit Ihren Schlüsseln zugänglich sind. Wir empfehlen Ihnen, für die Logins Ihrer Mitarbeiter immer SSH zusammen mit Kerberos einzusetzen. Damit reduzieren Sie die Abhängigkeit von potentiell gefährdeten Schlüsseln und schützen gleichzeitig die Passwörter mit Kerberos. SSH-Schlüsselpaare sollten nur für automatisierte Aufgaben von einem besonders gesicherten Server eingesetzt werden (Kerberos kann für diese Art von Aufgaben nicht eingesetzt werden). Weiterhin empfehlen wir Ihnen, das Weiterreichen von Schlüsseln in der SSH-Konfiguration abzustellen bzw. die from=IP/DOMAIN Option in authorized_keys zu verwenden, die den Schlüssel nur von bestimmten Maschinen aus nutzbar macht. Bill Swingle Teile umgeschrieben und aktualisiert von DES, Blowfish, MD5, und Crypt Sicherheit Crypt Crypt Blowfish DES MD5 Jedem Benutzer eines &unix; Systems ist ein Passwort zugeordnet. Es scheint offensichtlich, dass das Passwort nur dem Benutzer und dem System bekannt sein muss. Um die Passwörter geheim zu halten, werden sie mit einer nicht umkehrbaren Hash-Funktion verschlüsselt, das heißt sie können leicht verschlüsselt aber nicht entschlüsselt werden. Was wir gerade als offensichtlich dargestellt haben, ist also nicht wahr: Das Betriebssystem kennt das Passwort wirklich nicht, es kennt nur das verschlüsselte Passwort. Die einzige Möglichkeit, das originale Passwort herauszufinden, besteht darin, alle möglichen Passwörter auszuprobieren (brute force Suche). Zu der Zeit als &unix; entstanden ist, war die einzig sichere Möglichkeit Passwörter zu verschlüsseln, leider DES (Data Encryption Standard). Für die Einwohner der USA stellte das kein Problem dar, aber da der Quellcode von DES nicht aus den USA exportiert werden durfte, musste ein Weg gefunden werden, der die Gesetze der USA nicht verletzte und gleichzeitig die Kompatibilität mit anderen &unix; Systemen, die immer noch DES benutzten, wahrte. Die Lösung bestand darin, die Verschlüsselungsbibliotheken aufzuspalten. Benutzer in den USA konnten die DES-Bibliotheken installieren und nutzen. In der Grundeinstellung benutzt &os; MD5 als Verschlüsselungsmethode, das exportiert werden durfte und damit von jedem genutzt werden konnte. Es wird davon ausgegangen, dass MD5 sicherer als DES ist, so dass DES nur aus Kompatibilitätsgründen installiert werden sollte. Erkennen der Verschlüsselungsmethode Derzeit werden DES-, MD5- und Blowfish-Hash-Funktionen unterstützt. In der Voreinstellung benutzt &os; die MD5-Hash-Funktion. Sie können leicht herausfinden, welche Verschlüsselungsmethode von &os; verwendet wird. Ein Weg besteht darin, die verschlüsselten Passwörter in /etc/master.passwd zu untersuchen. Passwörter, die mit MD5 verschlüsselt wurden, sind länger als die mit DES verschlüsselten und beginnen mit den Zeichen $1$. Passwörter, die mit $2a$ anfangen, wurden mit der Blowfish-Funktion verschlüsselt. DES Passwörter besitzen keine offensichtlichen Merkmale, an denen sie identifiziert werden könnten. Sie sind aber kürzer als MD5-Passwörter und sind in einem 64 Zeichen umfassenden Alphabet kodiert, das das $-Zeichen nicht enthält. Ein relativ kurzes Passwort, das nicht mit einem $-Zeichen anfängt, ist wahrscheinlich ein DES-Passwort. Die Verschlüsselungsmethode für neue Passwörter wird durch passwd_format in /etc/login.conf bestimmt. Der Wert dieser Variablen kann entweder des, md5 oder blf sein. Näheres schlagen Sie bitte in &man.login.conf.5; nach. Einmalpasswörter Einmalpasswörter Sicherheit Einmalpasswörter In der Voreinstellung unterstützt &os; OPIE (One-time Passwords in Everything, das in der Regel MD5-Hash-Funktionen einsetzt. Im Folgenden werden drei verschiedene Passwörter verwendet. Das erste ist Ihr normales System- oder Kerberos-Passwort und wird im Folgenden System-Passwort genannt. Das zweite ist das Einmalpasswort, das bei OPIE von opiekey generiert und von opiepasswd und dem Login-Programm akzeptiert wird. Im Folgenden wird es Einmalpasswort genannt. Das dritte Passwort ist das geheime Passwort, das Sie mit opiekey (manchmal auch mit opiepasswd) zum Erstellen der Einmalpasswörter verwenden. Dieses Passwort werden wir im Folgenden geheimes Passwort oder schlicht Passwort nennen. Das geheime Passwort steht in keiner Beziehung zu Ihrem System-Passwort, beide können gleich sein, obwohl das nicht empfohlen wird. Die geheimen Passwörter von OPIE sind nicht auf eine Länge von 8 Zeichen, wie alte &unix; Passwörter Unter &os; darf das System-Passwort maximal 128 Zeichen lang sein., beschränkt. Sie können so lang sein, wie Sie wollen. Gebräuchlich sind Passwörter, die sich aus sechs bis sieben Wörtern zusammensetzen. Das OPIE-System arbeitet größtenteils unabhängig von den auf &unix;-Systemen verwendeten Passwort-Mechanismen. Neben dem Passwort gibt es noch zwei Werte, die für OPIE wichtig sind. Der erste ist der Initialwert (engl. seed oder key), der aus zwei Buchstaben und fünf Ziffern besteht. Der zweite Wert ist der Iterationszähler, eine Zahl zwischen 1 und 100. OPIE generiert das Einmalpasswort, indem es den Initialwert und das geheime Passwort aneinander hängt und dann die MD5-Hash-Funktion so oft, wie durch den Iterationszähler gegeben, anwendet. Das Ergebnis wird in sechs englische Wörter umgewandelt, die Ihr Einmalpasswort sind. Das Authentifizierungssystem (meistens PAM) merkt sich das zuletzt benutzte Einmalpasswort und Sie sind authentisiert, wenn die Hash-Funktion des Passworts dem vorigen Passwort entspricht. Da nicht umkehrbare Hash-Funktionen benutzt werden, ist es unmöglich, aus einem bekannten Passwort weitere gültige Einmalpasswörter zu berechnen. Der Iterationszähler wird nach jeder erfolgreichen Anmeldung um eins verringert und stellt so die Synchronisation zwischen Benutzer und Login-Programm sicher. Wenn der Iterationszähler den Wert 1 erreicht, muss OPIE neu initialisiert werden. In jedem System werden mehrere Programme verwendet, die weiter unten beschrieben werden. opiekey verlangt einen Iterationszähler, einen Initialwert und ein geheimes Passwort. Daraus generiert es ein Einmalpasswort oder eine Liste von Einmalpasswörtern. opiepasswd wird dazu benutzt, um OPIE zu initialisieren. Mit diesem Programm können Passwörter, Iterationszähler oder Initialwerte geändert werden. Als Parameter verlangt es entweder ein geheimes Passwort oder einen Iterationszähler oder einen Initialwert und ein Einmalpasswort. opieinfo hingegen gibt den momentanen Iterationszähler und Initialwert eines Benutzers aus. Diese werden aus der Datei /etc/opiekeys ermittelt. Im Folgenden werden vier verschiedene Tätigkeiten beschrieben. Zuerst wird erläutert, wie opiepasswd über eine gesicherte Verbindung eingesetzt werden, um Einmalpasswörter das erste Mal zu konfigurieren oder das Passwort oder den Initialwert zu ändern. Als nächstes wird erklärt, wie opiepasswd über eine nicht gesicherte Verbindung, oder zusammen mit opiekey über eine gesicherte Verbindung eingesetzt werden, um dasselbe zu erreichen. Als drittes wird beschrieben, wie opiekey genutzt wird, um sich über eine nicht gesicherte Verbindung anzumelden. Die vierte Tätigkeit beschreibt, wie mit opiekey eine Reihe von Schlüsseln generiert wird, die Sie sich aufschreiben oder ausdrucken können, um sich von Orten anzumelden, die über keine gesicherten Verbindungen verfügen. Einrichten über eine gesicherte Verbindung Um OPIE erstmals zu initalisieren, rufen Sie opiepasswd auf: &prompt.user; opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED Nach der Aufforderung Enter new secret pass phrase: oder Enter secret password: geben Sie bitte Ihr Passwort ein. Dies ist nicht das Passwort, mit dem Sie sich anmelden, sondern es wird genutzt, um das Einmalpasswort zu generieren. Die Zeile, die mit ID anfängt, enthält Ihren Login-Namen, den Iterationszähler und den Initialwert. Diese Werte müssen Sie sich nicht behalten, da das System sie zeigen wird, wenn Sie sich anmelden. In der letzten Zeile steht das Einmalpasswort, das aus diesen Parametern und Ihrem geheimen Passwort ermittelt wurde. Wenn sie sich jetzt wieder anmelden wollten, dann müssten Sie dieses Passwort benutzen. Einrichten über eine nicht gesicherte Verbindung Um Einmalpasswörter über eine nicht gesicherte Verbindung einzurichten, oder das geheime Passwort zu ändern, müssen Sie über eine gesicherte Verbindung zu einer Stelle verfügen, an der Sie opiekey ausführen. Dies kann etwa die Eingabeaufforderung auf einer Maschine, der Sie vertrauen, sein. Zudem müssen Sie einen Iterationszähler vorgeben (100 ist ein guter Wert) und einen Initialwert wählen, wobei Sie auch einen zufällig generierten benutzen können. Benutzen Sie opiepasswd über die ungesicherte Verbindung zu der Maschine, die Sie einrichten wollen: &prompt.user; opiepasswd Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY Drücken Sie Return, um die Vorgabe für den Initialwert zu akzeptieren. Bevor Sie nun das Zugriffspasswort (engl. access password) eingeben, rufen Sie über die gesicherte Verbindung opikey mit denselben Parametern auf: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT Gehen Sie nun zurück zu der nicht gesicherten Verbindung und geben dort das eben generierte Einmalpasswort ein. Erzeugen eines einzelnen Einmalpasswortes Nachdem Sie OPIE eingerichtet haben, werden Sie beim nächsten Anmelden wie folgt begrüßt: &prompt.user; telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password: Anmerkung: OPIE besitzt eine nützliche Eigenschaft, die hier nicht gezeigt ist. Wenn Sie an der Eingabeaufforderung Return eingeben, wird die echo-Funktion eingeschaltet, das heißt Sie sehen, was Sie tippen. Dies ist besonders nützlich, wenn Sie ein generiertes Passwort von einem Ausdruck abtippen müssen. MS-DOS Windows MacOS Jetzt müssen Sie Ihr Einmalpasswort generieren, um der Anmeldeaufforderung nachzukommen. Dies muss auf einem gesicherten System geschehen, auf dem Sie oder opiekey ausführen können. Dieses Programm gibt es übrigens auch für DOS, &windows; und &macos;. Es benötigt den Iterationszähler sowie den Initialwert als Parameter, die Sie mittels cut-and-paste direkt von der Login-Aufforderung nehmen können. Auf dem sicheren System: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT Mit dem jetzt generierten Einmalpasswort können Sie die Anmeldeprozedur fortsetzen. Erzeugen von mehreren Einmalpasswörtern Manchmal müssen Sie sich an Orte begeben, an denen Sie keinen Zugriff auf eine sichere Maschine oder eine sichere Verbindung haben. In diesem Fall können Sie vorher mit opiekey einige Einmalpasswörter generieren, die Sie sich ausdrucken und mitnehmen können. Zum Beispiel: &prompt.user; opiekey -n 5 30 zz99999 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: <secret password> 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI Mit fordern Sie fünf Passwörter der Reihe nach an. Der letzte Iterationszähler wird durch gegeben. Beachten Sie bitte, dass die Passwörter in der umgekehrten Reihenfolge, in der sie zu benutzen sind, ausgeben werden. Wenn Sie wirklich paranoid sind, schreiben Sie sich jetzt die Passwörter auf, ansonsten drucken Sie sie mit lpr aus. Beachten Sie, dass jede Zeile den Iterationszähler und das Einmalpasswort zeigt, trotzdem finden Sie es vielleicht hilfreich, eine Zeile nach Gebrauch durchzustreichen. Einschränken der Benutzung von System-Passwörtern OPIE kann die Verwendung von System-Passwörtern abhängig von der Quell-IP-Adresse einschränken. Die dazu nötigen Einstellungen werden in der Datei /etc/opieaccess vorgenommen, die bei der Installation des Systems automatisch erzeugt wird. Weitere Informationen über diese Datei und Sicherheitshinweise zu ihrer Verwendung entnehmen Sie bitte der Hilfeseite &man.opieaccess.5;. Die Datei opieaccess könnte beispielsweise die folgende Zeile enthalten: permit 192.168.0.0 255.255.0.0 Diese Zeile erlaubt es Benutzern, die sich von einer der angegebenen Quell-IP-Adressen anmelden, ihr System-Passwort zu verwenden. Beachten Sie bitte, dass eine Quell-IP-Adresse leicht gefälscht werden kann. Findet sich in opieaccess kein passender Eintrag, muss die Anmeldung mit OPIE erfolgen. Tom Rhodes Beigetragen von TCP-Wrapper TCP-Wrapper Wahrscheinlich hat jeder, der &man.inetd.8; kennt, schon mal von den TCP-Wrappern gehört. Die wenigsten erkennen den vollen Nutzen der TCP-Wrapper in einer Netzumgebung. Es scheint, dass die meisten Leute Netzverbindungen mit einer Firewall absichern wollen. Auch wenn eine Firewall ein mächtiges Instrument ist, gibt es Sachen, die eine Firewall nicht kann. Eine Firewall kann beispielsweise keine Nachricht an den Verbindungsursprung senden. Genau das und mehr können aber die TCP-Wrapper. Im Folgenden werden die Funktionen der TCP-Wrapper und Beispiele für deren Konfiguration vorgestellt. Die TCP-Wrapper erweitern die Steuerungsmöglichkeiten, die inetd über die Dienste unter seiner Kontrolle hat. Beispielsweise können Verbindungen protokolliert, Nachrichten zurückgesandt oder nur interne Verbindungen angenommen werden. Die TCP-Wrapper bieten nicht nur eine weitere Sicherheitsschicht, die teilweise auch von Firewalls geboten wird, sie bieten darüber hinaus Funktionen zur Steuerung von Verbindungen, die eine Firewall nicht bietet. Die erweiterten Funktionen der TCP-Wrapper sind kein Firewall-Ersatz. Sie sollten zusammen mit einer Firewall und anderen Sicherheitsvorkehrungen eingesetzt werden. Die TCP-Wrapper sind eine weitere Sicherheitsschicht zum Schutz eines Systems. Da die Wrapper die Funktion von inetd erweitern, wird im Folgenden vorausgesetzt, dass Sie den Abschnitt über die inetd-Konfiguration schon gelesen haben. Streng genommen handelt es sich bei den von &man.inetd.8; gestarteten Programmen nicht um Daemonen. Da sich diese Bezeichnung aber eingebürgert hat, wird sie auch in diesem Abschnitt verwendet. TCP-Wrapper einrichten Um die TCP-Wrapper unter &os; zu benutzen, muss nur der inetd aus rc.conf mit den voreingestellten Optionen gestartet werden. Die Konfigurationsdatei /etc/hosts.allow darf keine Fehler enthalten; falls doch, werden die Fehler mit &man.syslogd.8; protokolliert. Im Gegensatz zu anderen Implementationen der TCP-Wrapper wird vom Gebrauch der Datei hosts.deny abgeraten. Die Konfiguration sollte sich vollständig in der Datei /etc/hosts.allow befinden. In der einfachsten Konfiguration werden Dienste abhängig vom Inhalt der Datei /etc/hosts.allow erlaubt oder gesperrt. Unter &os; wird in der Voreinstellung jeder von inetd gestartete Dienst erlaubt. Sehen wir uns zunächst die Grundkonfiguration an. Eine Konfigurationszeile ist wie folgt aufgebaut: Dienst : Adresse : Aktion. Dienst ist der von inetd gestartete Dienst (auch Daemon genannt). Die Adresse kann ein gültiger Rechnername, eine IP-Adresse oder eine IPv6-Adresse in Klammern ([ ]) sein. Der Wert allow im Feld Aktion erlaubt Zugriffe, der Wert deny verbietet Zugriffe. Die Zeilen in hosts.allow werden für jede Verbindung der Reihe nach abgearbeitet. Trifft eine Zeile auf eine Verbindung zu, wird die entsprechende Aktion ausgeführt und die Abarbeitung ist beendet. Es gibt noch weitere Konfigurationsoptionen, die gleich erläutert werden. Das bisher Gesagte reicht, um eine einfache Regel aufzustellen. Wenn Sie einkommende POP3-Verbindungen für den Dienst mail/qpopper erlauben wollen, erweitern Sie hosts.allow um die nachstehende Zeile: # This line is required for POP3 connections: qpopper : ALL : allow Nachdem Sie die Zeile hinzugefügt haben, muss der inetd neu gestartet werden. Sie können dazu das Kommando &man.kill.1; verwenden oder /etc/rc.d/inetd restart ausführen. Erweiterte Konfiguration der TCP-Wrapper Die TCP-Wrapper besitzen weitere Optionen, die bestimmen, wie Verbindungen behandelt werden. In einigen Fällen ist es gut, wenn bestimmten Rechnern oder Diensten eine Nachricht geschickt wird. In anderen Fällen soll vielleicht der Verbindungsaufbau protokolliert oder eine E-Mail an einen Administrator versandt werden. Oder ein Dienst soll nur für das lokale Netz bereitstehen. Dies alles ist mit so genannten Wildcards, Metazeichen und der Ausführung externer Programme möglich und wird in den nächsten zwei Abschnitten erläutert. Externe Kommandos ausführen Stellen Sie sich vor, eine Verbindung soll verhindert werden und gleichzeitig soll demjenigen, der die Verbindung aufgebaut hat, eine Nachricht geschickt werden. Auf welche Art müssen die TCP-Wrapper konfiguriert werden? Die Option führt beim Verbindungsaufbau ein Kommando aus. In der Datei hosts.allow ist ein Beispiel für diese Option enthalten: # Alle anderen Dienste sind geschützt ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h." Für jeden Dienst, der nicht vorher in der Datei hosts.allow konfiguriert wurde, wird die Meldung You are not allowed to use daemon from hostname. zurückgegegeben. Dies ist besonders nützlich, wenn Sie die Gegenstelle sofort benachrichtigen wollen, nachdem die Verbindung getrennt wurde. Beachten Sie, dass der Text der Meldung in Anführungszeichen (") stehen muss, es gibt keine Ausnahmen zu dieser Regel. Ein so konfigurierter Server ist anfällig für Denial-of-Service-Angriffe. Ein Angreifer kann die gesperrten Dienste mit Verbindungsanfragen überfluten. Um einem Denial-of-Service-Angriff zu entgehen, benutzen Sie die Option . Wie die Option verbietet die Verbindung und führt externe Kommandos aus. Allerdings sendet die Option der Gegenstelle keine Rückmeldung. Sehen Sie sich die nachstehende Konfigurationsdatei an: # Verbindungen von example.com sind gesperrt: ALL : .example.com \ : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny Damit sind Verbindungen von der Domain *.example.com gesperrt. Jeder Verbindungsaufbau wird zudem in der Datei /var/log/connections.log protokolliert. Das Protokoll enthält den Rechnernamen, die IP-Adresse und den Dienst, der angesprochen wurde. In der Konfigurationsdatei wurde beispielsweise das Metazeichen %a verwendet. Es gibt weitere Metazeichen, die in der Hilfeseite &man.hosts.access.5; beschrieben werden. Wildcards Bisher verwendeten die Beispiele immer die Wildcard ALL. Die Wildcard ALL passt beispielsweise auf jeden Dienst, jede Domain oder jede IP-Adresse. Eine andere Wildcard ist PARANOID. Sie passt auf jeden Rechner dessen IP-Adresse möglicherweise gefälscht ist. Dies ist dann der Fall, wenn der Verbindungsaufbau von einer IP-Adresse erfolgt, die nicht zu dem übermittelten Rechnernamen passt. Für solche Fälle werden mit der Wildcard PARANOID Aktionen festgelegt, beispielsweise: # Block possibly spoofed requests to sendmail: sendmail : PARANOID : deny In diesem Beispiel werden alle Verbindungen zu sendmail verboten, die von einer IP-Adresse ausgehen, die nicht zum Rechnernamen passt. Die Wildcard PARANOID kann einen Dienst unbrauchbar machen, wenn der Client oder der Server eine fehlerhafte DNS-Konfiguration besitzt. Setzen Sie die Wildcard bitte umsichtig ein. Weiteres über Wildcards und deren Funktion lesen Sie bitte in der Hilfeseite &man.hosts.access.5; nach. In der Voreinstellung sind alle Dienste erlaubt. Damit die gezeigten Beispiele funktionieren, müssen Sie die erste Konfigurationszeile in der Datei hosts.allow auskommentieren. Mark Murray Beigesteuert von Mark Dapoz Basiert auf einem Beitrag von <application>KerberosIV</application> KerberosIV Kerberos ist ein zusätzliches Netzwerkprotokoll, das es Benutzern erlaubt, sich über einen sicheren Server zu authentifizieren. Dienste wie rlogin, rcp oder das sichere Kopieren von Dateien zwischen Systemen und andere risikoreiche Tätigkeiten werden durch Kerberos erheblich sicherer und kontrollierbarer. Die folgende Anleitung kann nur als Wegweiser dazu dienen, wie Sie Kerberos für &os; konfigurieren. Eine komplette Beschreibung des Systems finden Sie in den entsprechenden Hilfeseiten. Installation von <application>KerberosIV</application> MIT KerberosIV installieren Kerberos ist eine optionale Komponente von &os;. Am leichtesten installieren Sie die Software, wenn Sie bei der ersten Installation von &os; in sysinstall die Distribution krb4 oder krb5 auswählen. Damit installieren Sie entweder die eBones (KerberosIV) oder Heimdal (Kerberos5) Version von Kerberos. Beide Versionen werden mit &os; ausgeliefert, da sie außerhalb von den USA oder Kanada entwickelt werden. Sie unterliegen deshalb auch nicht den restriktiven Exportbeschränkungen der USA und sind auch für Bewohner anderer Länder zugänglich. Als Alternative steht die MIT Variante von Kerberos in der Ports-Sammlung unter security/krb5 zur Verfügung. Erstellen der initialen Datenbank Die folgenden Schritte werden nur auf dem Kerberos-Server durchgeführt. Stellen Sie bitte vorher sicher, dass keine alten Kerberos-Datenbanken mehr vorhanden sind. Im Verzeichnis /etc/kerberosIV sollten sich nur die folgenden Dateien befinden: &prompt.root; cd /etc/kerberosIV &prompt.root; ls README krb.conf krb.realms Wenn noch andere Dateien, wie principal.* oder master_key, existieren, müssen Sie die alte Kerberos-Datenbank mit kdb_destroy löschen. Wenn Kerberos nicht läuft, können Sie die Dateien auch einfach löschen. Sie sollten nun die Dateien krb.conf und krb.realms editieren, um Ihr Kerberos-Realm zu definieren. Das folgende Beispiel zeigt dies für das Realm EXAMPLE.COM auf dem Server grunt.example.com. krb.conf sollte wie folgt aussehen: &prompt.root; cat krb.conf EXAMPLE.COM EXAMPLE.COM grunt.example.com admin server CS.BERKELEY.EDU okeeffe.berkeley.edu ATHENA.MIT.EDU kerberos.mit.edu ATHENA.MIT.EDU kerberos-1.mit.edu ATHENA.MIT.EDU kerberos-2.mit.edu ATHENA.MIT.EDU kerberos-3.mit.edu LCS.MIT.EDU kerberos.lcs.mit.edu TELECOM.MIT.EDU bitsy.mit.edu ARC.NASA.GOV trident.arc.nasa.gov Die zusätzlich aufgeführten Realms brauchen Sie nicht anzulegen. Sie zeigen hier nur, wie man Kerberos dazu bringt, andere Realms zu erkennen. Sie können Sie also auch weglassen. Die erste Zeile benennt das Realm, in dem das System arbeitet. Die anderen Zeilen enthalten Realm/Host Paare. Der erste Wert jeder Zeile ist das Realm, der zweite Teil ein Host, der in diesem Realm Key Distribution Center ist. Die Schlüsselwörter admin server nach einem Hostnamen bedeuten, dass dieser Host auch einen administrativen Datenbankserver zur Verfügung stellt. Weitere Erklärungen zu diesen Begriffen finden Sie in den Kerberos Manualpages. Als nächstes muss grunt.example.com in das Realm EXAMPLE.COM aufgenommen werden. Des Weiteren erstellen wir einen Eintrag, der alle Rechner der Domäne .example.com in das Realm EXAMPLE.COM aufnimmt. krb.realms sollte danach so aussehen: &prompt.root; cat krb.realms grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .berkeley.edu CS.BERKELEY.EDU .MIT.EDU ATHENA.MIT.EDU .mit.edu ATHENA.MIT.EDU Die zusätzlichen Realms sind hier wieder als Beispiel gedacht. Sie können sie der Einfachheit halber auch weglassen. Die erste Zeile nimmt ein einzelnes System in das Realm auf. Die anderen Zeilen zeigen, wie bestimmte Subdomänen einem bestimmten Realm zugeordnet werden. Das folgende Kommando muss nur auf dem Kerberos-Server (oder Key Distribution Center) laufen. Mit kdb_init können wir die Datenbank anlegen: &prompt.root; kdb_init Realm name [default ATHENA.MIT.EDU ]: EXAMPLE.COM You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter Kerberos master key: Anschließend muss der Schlüssel gespeichert werden, damit Server auf der lokalen Maschine darauf zugreifen können. Dies geschieht mit kstash: &prompt.root; kstash Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Das verschlüsselte Master-Passwort wurde in /etc/kerberosIV/master_key gesichert. Anlegen von Prinzipals Für jedes System, das mit Kerberos gesichert werden soll, müssen zwei Prinzipale in die Datenbank eingetragen werden. Ihre Namen sind kpasswd und rcmd. Beide Prinzipale müssen für jedes System angelegt werden, wobei die Instanz der Name des jeweiligen Systems ist. Die Dæmonen kpasswd und rcmd erlauben es anderen Systemen, Kerberos-Passwörter zu ändern und Kommandos wie &man.rcp.1;, &man.rlogin.1; und &man.rsh.1; laufen zu lassen. Beide Einträge werden im Folgenden angelegt: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: passwd Instance: grunt <Not found>, Create [y] ? y Principal: passwd, Instance: grunt, kdc_key_ver: 1 New Password: <---- geben Sie hier Zufallswerte ein Verifying password New Password: <---- geben Sie hier Zufallswerte ein Random password [y] ? y Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: rcmd Instance: grunt <Not found>, Create [y] ? Principal: rcmd, Instance: grunt, kdc_key_ver: 1 New Password: <---- geben Sie hier Zufallswerte ein Verifying password New Password: <---- geben Sie hier Zufallswerte ein Random password [y] ? Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Erstellen der Server-Datei Wir müssen nun für jede Maschine die Instanzen, die Dienste definieren, aus der Datenbank mit ext_srvtab extrahieren. Die erstelle Datei muss auf einem sicheren Weg in das Verzeichnis /etc jedes Clients kopiert werden. Die Datei muss auf jedem Server und auf jedem Client vorhanden sein und ist unabdingbar für Kerberos. &prompt.root; ext_srvtab grunt Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Generating 'grunt-new-srvtab'.... Das Kommando erzeugt Dateien mit einem temporären Namen, der es anderen Servern erlaubt, ihre Datei abzuholen. Die Datei muss auf dem entsprechenden System in srvtab umbenannt werden. Auf dem originalen System können Sie &man.mv.1; benutzen, um die Datei umzubenennen: &prompt.root; mv grunt-new-srvtab srvtab Wenn die Datei für ein Client-System bestimmt ist und das Netzwerk nicht sicher ist, kopieren Sie die Datei auf ein bewegliches Medium und transportieren sie physikalisch. Kopieren Sie die Datei auf den Client in das Verzeichnis /etc. Benennen Sie die Datei in srvtab um und setzen Sie schließlich noch die Berechtigungen auf 600: &prompt.root; mv grumble-new-srvtab srvtab &prompt.root; chmod 600 srvtab Füllen der Datenbank Wir können nun Benutzer in der Datenbank anlegen. Mit kdb_edit legen wir zuerst die Benutzerin jane an: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: <Not found>, Create [y] ? y Principal: jane, Instance: , kdc_key_ver: 1 New Password: <---- geben Sie ein sicheres Passwort ein Verifying password New Password: <---- wiederholen Sie die Eingabe Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Testen Zuerst müssen die Kerberos-Dæmonen gestartet sein. Wenn Sie /etc/rc.conf richtig angepasst haben, passiert das automatisch, wenn Sie booten. Dieser Schritt ist nur auf dem Kerberos-Server notwendig, die Clients bekommen alles was sie brauchen aus dem /etc/kerberosIV Verzeichnis. &prompt.root; kerberos & Kerberos server starting Sleep forever on error Log file is /var/log/kerberos.log Current Kerberos master key version is 1. Master key entered. BEWARE! Current Kerberos master key version is 1 Local realm: EXAMPLE.COM &prompt.root; kadmind -n & KADM Server KADM0.0A initializing Please do not use 'kill -9' to kill this job, use a regular kill instead Current Kerberos master key version is 1. Master key entered. BEWARE! Jetzt können wir mit kinit versuchen, ein Ticket für die ID jane, die wir oben angelegt haben, zu erhalten: &prompt.user; kinit jane MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane" Password: Mit klist können Sie sich vergewissern, dass Sie die Tickets auch erhalten haben: &prompt.user; klist Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM Versuchen Sie nun das Passwort mit &man.passwd.1; zu ändern, um zu überprüfen, dass der kpasswd Dæmon auch auf der Kerberos-Datenbank autorisiert ist: &prompt.user; passwd realm EXAMPLE.COM Old password for jane: New Password for jane: Verifying password New Password for jane: Password changed. Anlegen von <command>su</command> Privilegien Mit Kerberos kann jedem Benutzer, der root-Privilegien braucht, ein eigenes Passwort für &man.su.1; zugewiesen werden. Dies wird dadurch erreicht, dass die Instanz eines Prinzipals root ist. Mit kbd_edit legen wir nun den Eintrag jane.root in der Kerberos-Datenbank an: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: root <Not found>, Create [y] ? y Principal: jane, Instance: root, kdc_key_ver: 1 New Password: <---- geben Sie ein sicheres Passwort ein Verifying password New Password: <---- geben Sie das Passwort erneut ein Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short! Attributes [ 0 ] ? Edit O.K. Principal name: <---- geben Sie nichts an, um das Programm zu verlassen Versuchen Sie nun, für diesen Prinzipal Tickets zu bekommen: &prompt.root; kinit jane.root MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root" Password: Als nächstes fügen wir den Prinzipal in .klogin von root ein: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Jetzt benutzen wir &man.su.1;: &prompt.user; su Password: und kontrollieren, welche Tickets wir haben: &prompt.root; klist Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM Weitere Kommandos In einem der Beispiele haben wir einen Prinzipal mit dem Namen jane und der Instanz root angelegt. Der Prinzipal entstand aus einem Benutzer mit dem gleichen Namen. Unter Kerberos ist es Standard, dass ein principal.instance der Form username.root es dem Benutzer username erlaubt, mit &man.su.1; root zu werden, wenn die entsprechenden Einträge in .klogin von root existieren: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Das gilt auch für die .klogin-Datei im Heimatverzeichnis eines Benutzers: &prompt.user; cat ~/.klogin jane@EXAMPLE.COM jack@EXAMPLE.COM Die Einträge erlauben jedem, der sich im Realm EXAMPLE.COM als jane oder jack mit kinit authentifiziert hat, mittels &man.rlogin.1;, &man.rsh.1; oder &man.rcp.1; auf den Account jane und dessen Dateien zuzugreifen. Im folgenden Beispiel meldet sich jane mit Kerberos auf grunt an: &prompt.user; kinit MIT Project Athena (grunt.example.com) Password: &prompt.user; rlogin grunt Last login: Mon May 1 21:14:47 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Im folgenden Beispiel wurde der Prinzipal jack mit einer Instanz null angelegt. Mit der obigen .klogin-Datei kann er sich nun auf derselben Maschine als jane anmelden: &prompt.user; kinit &prompt.user; rlogin grunt -l jane MIT Project Athena (grunt.example.com) Password: Last login: Mon May 1 21:16:55 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Tillman Hodgson Beigetragen von Mark Murray Beruht auf einem Beitrag von <application>Kerberos5</application> Das Basissystem enthält ab &os; 5.1 nur noch Kerberos5. Die Konfiguration von Kerberos5 ist der Konfiguration von KerberosIV sehr ähnlich. Wenn Sie KerberosIV benötigen, installieren Sie den Port security/krb4. Der folgende Abschnitt beschreibt ausschließlich Kerberos5 für &os;-Releases ab 5.0. Kerberos ist ein Netzwerk-Protokoll, das Benutzer mithilfe eines sicheren Servers authentifiziert. Mit Risiken behaftete Dienste, wie das Anmelden an entfernten Systemen oder das Kopieren von Daten auf entfernte Systeme, werden durch Kerberos erheblich sicherer und lassen sich leichter steuern. Kerberos hat eine Aufgabe: Die sichere Prüfung der Identität eines Benutzers (Authentifizierung) über das Netzwerk. Das System überprüft weder die Berechtigungen der Benutzer (Autorisierung), noch verfolgt es die durchgeführten Aktionen (Audit). Daher sollte Kerberos zusammen mit anderen Sicherheits-Systemen eingesetzt werden, die diese Funktionen bereitstellen. Die Daten einer Kommunikation können verschlüsselt werden, nachdem die Kommunikationspartner mit Kerberos ihre Identität geprüft haben. Die folgenden Anweisungen beschreiben, wie Sie das mit &os; gelieferte Kerberos einrichten. Eine vollständige Beschreibung des Systems entnehmen Sie bitte den entsprechenden Hilfeseiten. Die Beschreibung der Kerberos-Installation benutzt folgende Namensräume: Die DNS-Domain (Zone) heißt example.org. Das Kerberos-Realm heißt EXAMPLE.ORG. Benutzen Sie echte Domain-Namen, wenn Sie Kerberos einrichten. Damit vermeiden Sie DNS-Probleme und stellen die Zusammenarbeit mit anderen Kerberos-Realms sicher. Geschichte Kerberos5 Geschichte Das MIT entwickelte Kerberos, um Sicherheitsprobleme auf dem Netzwerk zu lösen. Das Kerberos-Protokoll verwendet starke Kryptographie, sodass ein Server die Identität eines Clients (der umgekehrte Vorgang ist auch möglich) über ein unsicheres Netzwerk feststellen kann. Der Begriff Kerberos wird sowohl für das Protokoll als auch für Programme verwendet, die Kerberos benutzen (wie Kerberos-Telnet). Die aktuelle Protokollversion ist 5 und wird in RFC 1510 beschrieben. Mehrere Implementierungen des Protokolls stehen frei zur Verfügung und decken viele Betriebssysteme ab. Das Massachusetts Institute of Technology (MIT), an dem Kerberos ursprünglich entwickelt wurde, entwickelt seine Kerberos-Version weiter. In den USA wird diese Version häufig eingesetzt, unterlag aber Export-Beschränkungen, da sie in den USA entwickelt wurde. Die MIT-Version von Kerberos befindet sich im Port security/krb5. Heimdal ist eine weitere Implementierung der Protokollversion 5. Sie wurde außerhalb der USA entwickelt und unterliegt daher keinen Export-Beschränkungen. Heimdal-Kerberos befindet sich im Port security/heimdal und das Basissystem von &os; enthält eine minimale Installation von Heimdal. Um möglichst viele Benutzer anzusprechen, verwenden die folgenden Beispiele die in &os; enthaltene Heimdal-Distribution. Das Heimdal <acronym>KDC</acronym> einrichten Kerberos5 Key Distribution Center Kerberos authentifiziert Benutzer an einer zentralen Stelle: dem Key Distribution Center (KDC). Das KDC verteilt Tickets, mit denen ein Dienst die Identität eines Benutzers feststellen kann. Alle Mitglieder eines Kerberos-Realms vertrauen dem KDC, daher gelten für das KDC erhöhte Sicherheitsanforderungen. Obwohl das KDC wenig Ressourcen eines Rechners benötigt, sollte es wegen der Sicherheitsanforderungen auf einem separaten Rechner installiert werden. Das KDC wird in /etc/rc.conf wie folgt aktiviert: kerberos5_server_enable="YES" kadmind5_server_enable="YES" Danach wird die Konfigurationsdatei von Kerberos, /etc/krb5.conf, erstellt: [libdefaults] default_realm = EXAMPLE.ORG [realms] EXAMPLE.ORG = { kdc = kerberos.example.org admin_server = kerberos.example.org } [domain_realm] .example.org = EXAMPLE.ORG Diese Einstellungen setzen voraus, dass der voll qualifizierte Name des KDCs kerberos.example.org ist. Wenn Ihr KDC einen anderen Namen hat, müssen Sie in der DNS-Zone einen Alias-Eintrag (CNAME-Record) für das KDC hinzufügen. Auf großen Netzwerken mit einem ordentlich konfigurierten BIND DNS-Server kann die Datei verkürzt werden: [libdefaults] default_realm = EXAMPLE.ORG Die Zonendatei von example.org muss dann die folgenden Zeilen enthalten: _kerberos._udp IN SRV 01 00 88 kerberos.example.org. _kerberos._tcp IN SRV 01 00 88 kerberos.example.org. _kpasswd._udp IN SRV 01 00 464 kerberos.example.org. _kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org. _kerberos IN TXT EXAMPLE.ORG Damit Klienten die Kerberos-Dienste benutzen können, muss die Datei /etc/krb5.conf entweder die vollständige Konfiguration enthalten oder eine minimale Konfiguration enthalten und zusätzlich ein DNS-Server richtig eingerichtet sein. Im nächsten Schritt wird die Kerberos-Datenbank eingerichtet. Die Datenbank enthält die Schlüssel aller Prinzipale und ist mit einem Passwort geschützt. Dieses Passwort brauchen Sie nicht zu behalten, da ein davon abgeleiteter Schlüssel in der Datei /var/heimdal/m-key gespeichert wird. Den Schlüssel erstellen Sie, indem Sie das Programm kstash aufrufen und ein Passwort eingeben. Nachdem Sie den Schlüssel in /var/heimdal/m-key erstellt haben, können Sie die Datenbank mit dem Kommando kadmin initialisieren. Verwenden Sie hierbei die Option (lokal). Mit dieser Option wird die Datenbank lokal modifiziert. Normal würde der kadmind-Dienst benutzt, der aber zu diesem Zeitpunkt noch nicht läuft. An der Eingabeaufforderung von kadmin können Sie mit dem Kommando init die Datenbank des Realms einrichten. Zuletzt erstellen Sie mit dem Kommando add Ihren ersten Prinzipal. Benutzen Sie die voreingestellten Optionen; Sie können die Einstellungen später mit dem Kommando modify ändern. An der Eingabeaufforderung zeigt das Kommando ? Hilfetexte an. Zusammengefasst wird die Datenbank wie folgt eingerichtet: &prompt.root; kstash Master key: xxxxxxxx Verifying password - Master key: xxxxxxxx &prompt.root; kadmin -l kadmin> init EXAMPLE.ORG Realm max ticket life [unlimited]: kadmin> add tillman Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: Password: xxxxxxxx Verifying password - Password: xxxxxxxx Jetzt kann das KDC gestartet werden. Führen Sie zum Start der Dienste die Kommandos /etc/rc.d/kerberos start und /etc/rc.d/kadmind start aus. Obwohl zu diesem Zeitpunkt noch keine kerberisierten Dienste laufen, können Sie die Funktion des KDCs schon überprüfen. Für den eben angelegten Benutzer können Sie sich vom KDC Tickets holen und diese Tickets anzeigen: &prompt.user; kinit tillman tillman@EXAMPLE.ORG's Password: &prompt.user; klist Credentials cache: FILE: /tmp/krb5cc_500 Principal: tillman@EXAMPLE.ORG Issued Expires Principal Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG Dieses Ticket kann, nachdem Sie Ihre Arbeit beendet haben, zurückgezogen werden: &prompt.user; k5destroy <application>Kerberos</application>-Dienste einrichten Kerberos5 Dienste einrichten Alle Rechner, die kerberisierte Dienste anbieten, müssen eine Kopie der Kerberos-Konfigurationsdatei /etc/krb5.conf besitzen. Sie können die Datei einfach vom KDC kopieren. Anschließend müssen Sie die Datei /etc/krb5.keytab erzeugen. Im Gegensatz zu normalen Workstations benötigt jeder Server eine keytab. Diese Datei enthält den Schlüssel des Servers, mit dem sich der Server und das KDC gegenseitig authentifizieren können. Die Datei muss sicher auf den Server transportiert werden (beispielsweise mit &man.scp.1; oder einer Diskette). Unter keinen Umständen darf die Datei im Klartext, zum Beispiel mit FTP, übertragen werden, da sonst die Sicherheit des Servers gefährdet ist. Sie können die keytab auch mit dem Programm kadmin übertragen. Da Sie mit kadmin sowieso einen Host-Prinzipal für den Server einrichten müssen, ist das ganz praktisch. Sie müssen allerdings schon ein Ticket besitzen und berechtigt sein, kadmin auszuführen. Die Berechtigung erhalten Sie durch einen Eintrag in der Zugriffskontrollliste kadmind.acl. Weitere Informationen über Zugriffskontrolllisten erhalten Sie in den Heimdal-Info-Seiten (info heimdal) im Abschnitt Remote administration. Wenn der Zugriff auf kadmin von entfernten Maschinen verboten ist, müssen Sie sich sicher auf dem KDC anmelden (lokale Konsole, &man.ssh.1; oder kerberisiertes Telnet) und die keytab lokal mit kadmin -l erzeugen. Nachdem Sie die Datei /etc/krb5.conf installiert haben, können Sie das Kommando kadmin benutzen. An der Eingabeaufforderung von kadmin erstellt das Kommando add --random-key den Host-Prinzipal und das Kommando ext extrahiert den Schlüssel des Prinzipals in eine Datei: &prompt.root; kadmin kadmin> add --random-key host/myserver.example.org Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: kadmin> ext host/myserver.example.org kadmin> exit Das Kommando ext (von extract) speichert den extrahierten Schlüssel in der Datei /etc/krb5.keytab. Wenn auf dem KDC, vielleicht aus Sicherheitsgründen, kadmind nicht läuft, können Sie das Kommando kadmin von entfernten Rechnern nicht benutzen. In diesem Fall legen Sie den Host-Prinzipal host/myserver.EXAMPLE.ORG direkt auf dem KDC an. Den Schlüssel extrahieren Sie in eine temporäre Datei (damit die Datei /etc/krb5.keytab nicht überschrieben wird): &prompt.root; kadmin kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org kadmin> exit Anschließend müssen Sie die erzeugte example.keytab sicher auf den Server kopieren (mit scp oder mithilfe einer Diskette). Geben Sie auf jeden Fall einen anderen Namen für die keytab an, weil sonst die keytab des KDCs überschrieben würde. Wegen der Datei krb5.conf kann der Server nun mit dem KDC kommunizieren und seine Identität mithilfe der Datei krb5.keytab nachweisen. Jetzt können wir kerberisierte Dienste aktivieren. Für telnet muss die folgende Zeile in /etc/inetd.conf eingefügt werden: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user Ausschlaggebend ist, dass die Authentifizierungs-Methode mit auf user gesetzt wird. Weitere Details entnehmen Sie bitte der Hilfeseite &man.telnetd.8;. Nachdem sie die Zeile in /etc/inetd.conf eingefügt haben, starten Sie &man.inetd.8; mit dem Kommando /etc/rc.d/inetd restart durch. <application>Kerberos</application>-Clients einrichten Kerberos5 Clients einrichten Ein Client lässt sich leicht einrichten. Sie benötigen nur die Kerberos-Konfigurationsdatei /etc/krb5.conf. Kopieren Sie die Konfigurationsdatei einfach vom KDC auf den Client. Sie können jetzt mit kinit Tickets anfordern, mit klist Tickets anzeigen und mit kdestroy Tickets löschen. Sie können mit Kerberos-Anwendungen kerberisierte Server ansprechen. Wenn das nicht funktioniert, Sie aber Tickets anfordern können, hat wahrscheinlich der kerberisierte Server ein Problem und nicht der Client oder das KDC. Wenn Sie eine Anwendung wie telnet testen, können Sie mit einem Paket-Sniffer (beispielsweise &man.tcpdump.1;) überprüfen, dass Passwörter verschlüsselt übertragen werden. Probieren Sie auch die Option von telnet, die den gesamten Datenverkehr verschlüsselt (analog zu ssh). Zu Heimdal gehören noch weitere Anwendungen. Allerdings enthält das &os;-Basissystem nur eine minimale Heimdal-Installation mit nur einer kerberisierten Anwendung: telnet. Der Heimdal-Port enthält noch mehr kerberisierte Anwendungen wie ftp, rsh, rcp und rlogin. Der MIT-Port enthält ebenfalls weitere kerberisierte Anwendungen. <filename>.k5login</filename> und <filename>.k5users</filename> .k5login .k5users Normalerweise wird ein Kerberos-Prinzipal wie tillman@EXAMPLE.ORG auf ein lokales Benutzerkonto, beispielsweise tillman, abgebildet. Daher benötigen Client-Anwendungen (zum Beispiel telnet) keinen Benutzernamen. Manchmal wird aber Zugriff auf ein lokales Benutzerkonto benötigt, zu dem es keinen passenden Kerberos-Prinzipal gibt. Der Prinzipal tillman@EXAMPLE.ORG bräuchte beispielsweise Zugriff auf das Konto webdevelopers. Ebenso könnten andere Prinzipale auf dieses Konto zugreifen wollen. Die Dateien .k5login und .k5users im Heimatverzeichnis eines Benutzerkontos gewähren Zugriffe ähnlich wie die Dateien .hosts und .rhosts. Um den Prinzipalen tillman@example.org und jdoe@example.org auf das Konto webdevelopers zu geben, wird im Heimatverzeichnis von webdevelopers die Datei .k5login mit folgendem Inhalt angelegt: tillman@example.org jdoe@example.org Die angegebenen Prinzipale haben nun ohne ein gemeinsames Passwort Zugriff auf das Konto. Einzelheiten entnehmen Sie bitte den Hilfeseiten zu diesen Dateien. Die Datei .k5users wird in der Hilfeseite des Kommandos ksu beschrieben. Tipps und Fehlersuche Kerberos5 Fehlersuche Wenn Sie den Heimdal-Port oder den MIT-Port benutzen, muss in der Umgebungsvariable PATH der Pfad zu den Programmen des Ports vor dem Pfad zu den Kerberos-Programmen des Systems stehen. Sind die Uhrzeiten der Systeme synchronisiert? Wenn nicht, schlägt vielleicht die Authentifizierung fehl. beschreibt, wie Sie mithilfe von NTP die Uhrzeiten synchronisieren. Die MIT- und Heimdal-Systeme arbeiten bis auf kadmin gut zusammen. Für kadmin wurde das Protokoll nicht normiert. Wenn Sie den Namen eines Rechners ändern, müssen Sie auch den host/-Prinzipal ändern und die Datei keytab aktualisieren. Dies betrifft auch spezielle Einträge wie den Prinzipal für Apaches www/mod_auth_kerb. Die Rechnernamen müssen vor- und rückwärts aufgelöst werden (im DNS oder in /etc/hosts). CNAME-Einträge im DNS funktionieren, aber die entsprechenden A- und PTR-Einträge müssen vorhanden und richtig sein. Wenn sich Namen nicht auflösen lassen, ist die Fehlermeldung nicht gerade selbstsprechend: Kerberos5 refuses authentication because Read req failed: Key table entry not found. Einige Betriebssysteme installieren ksu mit falschen Zugriffsrechten; es fehlt das Set-UID-Bit für root. Das mag aus Sicherheitsgründen richtig sein, doch funktioniert ksu dann nicht. Dies ist kein Fehler des KDCs. Wenn Sie für einen Prinzipal unter MIT-Kerberos Tickets mit einer längeren Gültigkeit als der vorgegebenen zehn Stunden einrichten wollen, müssen Sie zwei Sachen ändern. Benutzen Sie das modify_principal von kadmin, um die maximale Gültigkeitsdauer für den Prinzipal selbst und den Prinzipal krbtgt zu erhöhen. Mit einem Packet-Sniffer können Sie feststellen, dass Sie sofort nach dem Aufruf von kinit eine Antwort vom KDC bekommen – noch bevor Sie überhaupt ein Passwort eingegeben haben! Das ist in Ordnung: Das KDC händigt ein Ticket-Granting-Ticket (TGT) auf Anfrage aus, da es durch einen vom Passwort des Benutzers abgeleiteten Schlüssel geschützt ist. Wenn das Passwort eingegeben wird, wird es nicht zum KDC gesendet, sondern zum Entschlüsseln der Antwort des KDCs benutzt, die kinit schon erhalten hat. Wird die Antwort erfolgreich entschlüsselt, erhält der Benutzer einen Sitzungs-Schlüssel für die künftige verschlüsselte Kommunikation mit dem KDC und das Ticket-Granting-Ticket. Das Ticket-Granting-Ticket wiederum ist mit dem Schlüssel des KDCs verschlüsselt. Diese Verschlüsselung ist für den Benutzer völlig transparent und erlaubt dem KDC, die Echtheit jedes einzelnen TGT zu prüfen. Wenn Sie OpenSSH verwenden und Tickets mir einer langen Gültigkeit (beispielsweise einer Woche) benutzen, setzen Sie die Option in der Datei sshd_config auf no. Ansonsten werden Ihre Tickets gelöscht, wenn Sie sich abmelden. Host-Prinzipale können ebenfalls Tickets mit längerer Gültigkeit besitzen. Wenn der Prinzipal eines Benutzers über ein Ticket verfügt, das eine Woche gültig ist, das Ticket des Host-Prinzipals aber nur neun Stunden gültig ist, funktioniert der Ticket-Cache nicht wie erwartet. Im Cache befindet sich dann ein abgelaufenes Ticket des Host-Prinzipals. Wenn Sie mit krb5.dict die Verwendung schlechter Passwörter verhindern wollen, geht das nur mit Prinzipalen, denen eine Passwort-Policy zugewiesen wurde. Die Hilfeseite von kadmind beschreibt kurz, wie krb5.dict verwendet wird. Das Format von krb5.dict ist einfach: Die Datei enthält pro Zeile ein Wort. Sie können daher einen symbolischen Link auf /usr/share/dict/words erstellen. Unterschiede zum <acronym>MIT</acronym>-Port Der Hauptunterschied zwischen MIT-Kerberos und Heimdal-Kerberos ist das Kommando kadmin. Die Befehlssätze des Kommandos (obwohl funktional gleichwertig) und das verwendete Protokoll unterscheiden sich in beiden Varianten. Das KDC lässt sich nur mit dem kadmin Kommando der passenden Kerberos-Variante verwalten. Für dieselbe Funktion können auch die Client-Anwendungen leicht geänderte Kommandozeilenoptionen besitzen. Folgen Sie bitte der Anleitung auf der Kerberos-Seite () des MITs. Achten Sie besonders auf den Suchpfad für Anwendungen. Der MIT-Port wird standardmäßig in /usr/local/ installiert. Wenn die Umgebungsvariable PATH zuerst die Systemverzeichnisse enthält, werden die Systemprogramme anstelle der MIT-Programme ausgeführt. Wenn Sie den MIT-Port security/krb5 verwenden, erscheint bei der Anmeldung mit telnetd und klogind die Fehlermeldung incorrect permissions on cache file. Lesen Sie dazu bitte die im Port enthaltene Datei /usr/local/share/doc/krb5/README.FreeBSD. Wichtig ist, dass zur Authentifizierung die Binärdatei login.krb5 verwendet wird, die für durchgereichte Berechtigungen die Eigentümer korrekt ändert. In der Datei rc.conf müssen folgende Zeilen aufgenommen werden: kerberos5_server="/usr/local/sbin/krb5kdc" kadmind5_server="/usr/local/sbin/kadmind" kerberos5_server_enable="YES" kadmind5_server_enable="YES" Diese Zeilen sind notwendig, weil die Anwendungen von MIT-Kerberos Binärdateien unterhalb von /usr/local installieren. Beschränkungen von <application>Kerberos</application> Kerberos5 Beschränkungen <application>Kerberos</application> muss ganzheitlich verwendet werden Jeder über das Netzwerk angebotetene Dienst muss mit Kerberos zusammenarbeiten oder auf anderen Wegen gegen Angriffe aus dem Netzwerk geschützt sein. Andernfalls können Berechtigungen gestohlen und wiederverwendet werden. Es ist beispielsweise nicht sinnvoll, für Anmeldungen mit rsh und telnet Kerberos zu benutzen, dagegen aber POP3-Zugriff auf einen Mail-Server zu erlauben, da POP3 Passwörter im Klartext versendet. <application>Kerberos</application> ist für Einbenutzer-Systeme gedacht In Mehrbenutzer-Umgebungen ist Kerberos unsicherer als in Einbenutzer-Umgebungen, da die Tickets im für alle lesbaren Verzeichnis /tmp gespeichert werden. Wenn ein Rechner von mehreren Benutzern verwendet wird, ist es möglich, dass Tickets gestohlen werden. Dieses Problem können Sie lösen, indem Sie mit der Kommandozeilenoption oder besser mit der Umgebungsvariablen KRB5CCNAME einen Ort für die Tickets vorgeben. Diese Vorgehensweise wird leider selten benutzt. Es reicht, die Tickets im Heimatverzeichnis eines Benutzers zu speichern und mit Zugriffsrechten zu schützen. Das <acronym>KDC</acronym> ist verwundbar Das KDC muss genauso abgesichert werden wie die auf ihm befindliche Passwort-Datenbank. Auf dem KDC dürfen keine anderen Dienste laufen und der Rechner sollte physikalisch gesichert sein. Die Gefahr ist groß, da Kerberos alle Passwörter mit einem Schlüssel, dem Haupt-Schlüssel, verschlüsselt. Der Haupt-Schlüssel wiederum wird in einer Datei auf dem KDC gespeichert. Ein kompromittierter Haupt-Schlüssel ist nicht ganz so schlimm wie allgemein angenommen. Der Haupt-Schlüssel wird nur zum Verschlüsseln der Passwort-Datenbank und zum Initialisieren des Zufallsgenerators verwendet. Solange der Zugriff auf das KDC abgesichert ist, kann ein Angreifer wenig mit dem Haupt-Schlüssel anfangen. Wenn das KDC nicht zur Verfügung steht, vielleicht wegen eines Denial-of-Service Angriffs oder wegen eines Netzwerkproblems, ist eine Authentifizierung unmöglich. Damit können die Netzwerk-Dienste nicht benutzt werden; das KDC ist also ein optimales Ziel für einen Denial-of-Service Angriff. Sie können diesem Angriff ausweichen, indem Sie mehrere KDCs (einen Master und einen oder mehrere Slaves) verwenden. Der Rückfall auf ein sekundäres KDC oder eine andere Authentifizierungs-Methode (dazu ist PAM bestens geeignet) muss sorgfältig eingerichtet werden. Mängel von <application>Kerberos</application> Mit Kerberos können sich Benutzer, Rechner und Dienste gegenseitig authentifizieren. Allerdings existiert kein Mechanismus, der das KDC gegenüber Benutzern, Rechnern oder Diensten authentifiziert. Ein verändertes kinit könnte beispielsweise alle Benutzernamen und Passwörter abfangen. Die von veränderten Programmen ausgehende Gefahr können Sie lindern, indem Sie die Integrität von Dateien mit Werkzeugen wie security/tripwire prüfen. Weiterführende Dokumentation Kerberos5 weiterführende Dokumentation The Kerberos FAQ Designing an Authentication System: a Dialogue in Four Scenes RFC 1510, The Kerberos Network Authentication Service (V5) MIT Kerberos-Seite Heimdal Kerberos-Seite Tom Rhodes Beigetragen von OpenSSL Sicherheit OpenSSL OpenSSL Es wird oft übersehen, dass OpenSSL Teil des &os;-Basissystems ist. OpenSSL bietet eine verschlüsselte Transportschicht oberhalb der normalen Kommunikationsschicht und kann daher zusammen mit vielen Netzdiensten benutzt werden. Anwendungsbeispiele für OpenSSL sind die verschlüsselte Authentifizierung von E-Mail-Clients oder Web-Transaktionen wie das Bezahlen mit einer Kreditkarte. OpenSSL kann während des Baus in viele Ports, wie www/apache13-ssl und mail/sylpheed-claws, integriert werden. Ist beim Aufruf von make die Variable WITH_OPENSSL_BASE nicht explizit auf yes gesetzt, baut die Ports-Sammlung meist den Port security/openssl. Das OpenSSL von &os; stellt die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur Verfügung. Die OpenSSL-Bibliotheken stellen kryptographische Funktionen bereit. Mit OpenSSL kann der IDEA-Algorithmus verwendet werden, wegen Patenten in den USA ist der Algorithmus in der Voreinstellung allerdings deaktiviert. Wenn Sie die IDEA-Lizenz akzeptieren, können Sie den IDEA-Algorithmus aktivieren, indem Sie die Variable MAKE_IDEA in make.conf setzen. Meist wird OpenSSL eingesetzt, um Zertifikate für Anwendungen bereitzustellen. Die Zertifikate stellen die Identität einer Firma oder eines Einzelnen sicher. Wenn ein Zertifikat nicht von einer Zertifizierungsstelle (Certificate Authority, CA) gegengezeichnet wurde, erhalten Sie normalerweise eine Warnung. Eine Zertifizierungsstelle ist eine Firma wie VeriSign, die Zertifikate von Personen oder Firmen gegenzeichnet und damit die Korrektheit der Zertifikate bestätigt. Diese Prozedur kostet Geld, ist aber keine Voraussetzung für den Einsatz von Zertifikaten, beruhigt aber sicherheitsbewusste Benutzer. Zertifikate erzeugen OpenSSL Zertifikate erzeugen Ein Zertifikat erzeugen Sie mit dem nachstehenden Kommando: &prompt.root; openssl req -new -nodes -out req.pem -keyout cert.pem Generating a 1024 bit RSA private key ................++++++ .......................................++++++ writing new private key to 'cert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:PA Locality Name (eg, city) []:Pittsburgh Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []:Systems Administrator Common Name (eg, YOUR name) []:localhost.example.org Email Address []:trhodes@FreeBSD.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:SOME PASSWORD An optional company name []:Another Name Beachten Sie bitte, dass die Eingabe bei Common Name ein gültiger Domain-Name sein muss. Eine andere Eingabe erzeugt ein unbrauchbares Zertifikat. Das Zertifikat kann mit einer Gültigkeitsdauer und anderen Verschlüsselungsalgorithmen erzeugt werden. Die Hilfeseite &man.openssl.1; beschreibt die zur Verfügung stehenden Optionen. Das Verzeichnis, in dem Sie den letzten Befehl ausgeführt haben, enthält nun zwei Dateien: Die Anforderung für ein neues Zertifikat wurde in req.pem gespeichert. Diese Datei können Sie an eine Zertifizierungsstelle senden, wo Ihre Angaben geprüft werden. Nach erfolgreicher Prüfung wird das Zertifikat an Sie zurückgesandt. Die zweite Datei, cert.pem, enthält den privaten Schlüssel für Ihr Zertifikat und darf auch keine Fall in fremde Hände geraten, da ein Angreifer sonst in der Lage ist, anderen Personen oder Rechnern vorzugaukeln, dass es sich bei ihm um Sie handelt. Wenn Sie keine Signatur einer Zertifizierungsstelle benötigen, können Sie ein selbst-signiertes Zertifikat erstellen. Erzeugen Sie dazu zuerst einen RSA-Schlüssel: &prompt.root; openssl dsaparam -rand -genkey -out myRSA.key 1024 Erzeugen Sie dann den CA-Schlüssel: &prompt.root; openssl gendsa -des3 -out myca.key myRSA.key Erstellen Sie mit diesem Schlüssel das Zertifikat: &prompt.root; openssl req -new -x509 -days 365 -key myca.key -out new.crt Zwei neue Dateien befinden sich nun im Verzeichnis: Der Schlüssel der Zertifizierungsstelle myca.key und das Zertifikat selbst, new.crt. Sie sollten in einem Verzeichnis, vorzugsweise unterhalb von /etc abgelegt werden, das nur von root lesbar ist. Setzen Sie die Zugriffsrechte der Dateien mit chmod auf 0700. Beispiel für Zertifikate Was fangen Sie mit einem Zertifikat an? Sie könnten damit beispielsweise die Verbindungen zu Sendmail verschlüsseln. Dies würde die Klartext-Authentifizierung für Benutzer des lokalen MTA überflüssig machen. Das ist nicht unbedingt die beste Lösung, da einige MUAs Warnungen ausgeben, wenn ein Zertifikat nicht lokal installiert ist. Die Installation von Zertifikaten wird in der Dokumentation der MUAs beschrieben. Ergänzen Sie die Konfigurationsdatei von sendmail (.mc) um die nachstehenden Zeilen: dnl SSL Options define(`confCACERT_PATH',`/etc/certs')dnl define(`confCACERT',`/etc/certs/new.crt')dnl define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl Im Verzeichnis /etc/certs befindet sich der Schlüssel und das Zertifikat. Bauen Sie danach im Verzeichnis /etc/mail mit dem Kommando make install die .cf-Datei und starten Sie anschließend sendmail mit make restart neu. Wenn alles gut ging, erscheinen keine Fehlermeldungen in der Datei /var/log/maillog und Sie sehen sendmail in der Prozessliste. Testen Sie nun den Mailserver mit dem Kommando &man.telnet.1;: &prompt.root; telnet example.com 25 Trying 192.0.34.166... Connected to example.com. Escape character is '^]'. 220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) ehlo example.com 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-STARTTLS 250-DELIVERBY 250 HELP quit 221 2.0.0 example.com closing connection Connection closed by foreign host. Wenn in einer Zeile STARTTLS erscheint, hat alles funktioniert. Nik Clayton
nik@FreeBSD.org
Geschrieben von
VPNs mit IPsec IPsec Dieser Abschnitt beschreibt, wie Sie mit &os;-Gateways ein Virtual-Private-Network (VPN) einrichten. Als Beispiel wird ein VPN zwischen zwei Netzen verwendet, die über das Internet miteinander verbunden sind. Hiten M. Pandya
hmp@FreeBSD.org
Geschrieben von
IPsec Grundlagen Dieser Abschnitt zeigt Ihnen, wie Sie IPsec einrichten und damit &os;-Systeme und µsoft.windows; 2000/XP Systeme sicher miteinander verbinden. Um IPsec einzurichten, sollten Sie einen neuen Kernel erzeugen können (siehe ). IPsec ist ein Protokoll, das auf dem Internet-Protokoll (IP) aufbaut. Mit IPsec können mehrere Systeme geschützt miteinander kommunizieren. Das in &os; realisierte IPsec-Protokoll baut auf der KAME-Implementierung auf und unterstützt sowohl IPv4 als auch IPv6. &os enthält eine von Hardware beschleunigte Variante des IPsec-Protokolls. Diese Variante wurde von OpenBSD übernommen und wird Fast-IPsec genannt. Das &man.crypto.4;-Subsystem arbeitet mit Kryptographie-Hardware zusammen, die IPsec beschleunigt. Das Subsystem ist neu und bietet noch nicht alle Funktionen, die KAME-IPsec bietet. Wenn Sie die Hardware-Beschleunigung nutzen wollen, fügen Sie folgende Zeile der Kernelkonfiguration hinzu: Kerneloption FAST_IPSEC options FAST_IPSEC # new IPsec (cannot define w/ IPSEC) Momentan können Sie Fast-IPsec nicht zusammen mit KAME-IPsec benutzen. Weiteres zu Fast-IPsec erfahren Sie in der Hilfeseite &man.fast.ipsec.4;. Damit Firewalls den Status von &man.gif.4;-Tunneln überwachen können, müssen Sie die Option in Ihrer Kernelkonfiguration aktivieren: options IPSEC_FILTERGIF #filter ipsec packets from a tunnel IPsec ESP IPsec AH IPsec besteht wiederum aus zwei Protokollen: Encapsulated Security Payload (ESP) verschlüsselt IP-Pakete mit einem symmetrischen Verfahren (beispielsweise Blowfish oder 3DES). Damit werden die Pakete vor Manipulationen Dritter geschützt. Der Authentication Header (AH) enthät eine kryptographische Prüsumme, die sicher stellt, dass ein IP-Paket nicht verändert wurde. Der Authentication-Header folgt nach dem normalen IP-Header und erlaubt dem Empfänger eines IP-Paketes, dessen Integrität zu prüfen. ESP und AH können, je nach Situation, zusammen oder einzeln verwendet werden. VPN Virtual Private Network VPN IPsec kann in zwei Modi betrieben werden: Der Transport-Modus verschlüsselt die Daten zwischen zwei Systemen. Der Tunnel-Modus verbindet zwei Subnetze miteinander. Durch einen Tunnel können dann beispielsweise verschlüsselte Daten übertragen werden. Ein Tunnel wird auch als Virtual-Private-Network (VPN) bezeichnet. Detaillierte Informationen über das IPsec-Subsystem von &os; enthält die Hilfeseite &man.ipsec.4;. Die folgenden Optionen in der Kernelkonfiguration aktivieren IPsec: Kerneloption IPSEC Kerneloption IPSEC_ESP options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/ IPSEC) Kerneloption IPSEC_DEBUG Wenn Sie zur Fehlersuche im IPsec-Subsystem Unterstützung wünschen, sollten Sie die folgende Option ebenfalls aktivieren: options IPSEC_DEBUG #debug for IP security
Was ist ein VPN? Es gibt keinen Standard, der festlegt, was ein Virtual-Private-Network ist. VPNs können mit verschiedenen Techniken, die jeweils eigene Vor- und Nachteile besitzen, implementiert werden. Dieser Abschnitt stellt eine Möglichkeit vor, ein VPN aufzubauen. VPN zwischen zwei Netzen über das Internet VPN einrichten Dieses Szenario hat die folgenden Vorausetzungen: Es müssen zwei Netzwerke vorhanden sein. Beide Netzwerke müssen intern IP benutzen. Beide Netzwerke sind über einen &os;-Gateway mit dem Internet verbunden. Der Gateway jedes Netzwerks besitzt mindestens eine öffentliche IP-Adresse. Die intern verwendeten IP-Adressen können private oder öffentliche Adressen sein. Der Gateway kann, wenn nötig, IP-Adressen mit NAT umschreiben. Die IP-Adressen der internen Netzwerke dürfen nicht überlappen. Mit NAT ließe sich diese Anforderung zwar umgehen, doch wäre die Konfiguration und Pflege des resultierenden Netzwerks zu aufwändig. Wenn die zu verbindenden Netzwerke intern dieselben IP-Adressen benutzen (beispielsweise 192.168.1.x), müssen einem der Netzwerke neue IP-Adressen zugewiesen werden. Die Netzwerktopologie sieht wie folgt aus: Netzwerk #1 [ Interne Rechner ] Privates Netz, 192.168.1.2-254 [ Win9x/NT/2K ] [ UNIX ] | | .---[fxp1]---. Private IP, 192.168.1.1 | FreeBSD | `---[fxp0]---' Öffentliche IP, A.B.C.D | | -=-=- Internet -=-=- | | .---[fxp0]---. Öffentliche IP, W.X.Y.Z | FreeBSD | `---[fxp1]---' Private IP, 192.168.2.1 | | Netzwerk #2 [ Interne Rechner ] [ Win9x/NT/2K ] Privates Netz, 192.168.2.2-254 [ UNIX ] Beachten Sie die beiden öffentlichen IP-Adressen. Im Folgenden werden sie durch Buchstaben (als Platzhalter) gekennzeichnet. Setzen Sie hierfür Ihre eigenen öffentlichen IP-Adressen ein. Beide Gateways besitzen die interne Adresse x.x.x.1 und beide Netzwerke besitzen unterschiedliche private IP-Adressen: 192.168.1.x und 192.168.2.x. Die Default-Route aller internen Systeme ist jeweils die Gateway-Maschine (x.x.x.1). Aus der Sicht der Systeme sollen jetzt beide Netzwerke wie über einen Router, der in diesem Fall etwas langsamer ist, verbunden werden. Auf dem Rechner 192.168.1.20 soll also beispielsweise der folgende Befehl funktionieren: ping 192.168.2.34 &windows;-Systeme sollen die Systeme auf dem anderen Netzwerk erkennen und Shares sollen funktionieren. Alles soll genauso wie in lokalen Netzwerken funktionieren. Zusätzlich soll die Kommunikation zwischen beiden Netzwerken noch verschlüsselt werden. Das VPN wird in mehreren Schritten aufgebaut: Zuerst wird eine virtuelle Verbindung zwischen beiden Netzwerken über das Internet eingerichtet. Die virtuelle Verbindung können Sie mit Werkzeugen wie &man.ping.8; prüfen. Danach wird eine Sicherheitsrichtlinie (Security-Policy) festgelegt, die automatisch den Datenverkehr zwischen beiden Netzwerken verschlüsselt und entschlüsselt. Mit Werkzeugen wie &man.tcpdump.1; können Sie überprüfen, dass die Daten tatsächlich verschlüsselt werden. Wenn sich &windows;-Systeme im VPN gegenseitig erkennen sollen, so sind noch weitere Konfigurationsschritte notwendig, die aber nicht in diesem Abschnitt beschrieben werden. Schritt 1: Die virtuelle Verbindung einrichten Nehmen wir an, sie wollten von der Gateway-Maschine im Netzwerk #1 (öffentliche IP-Adresse A.B.C.D, private IP-Adresse 192.168.1.1) das Kommando ping 192.168.2.1 absetzen. 192.168.2.1 ist die private IP-Adresse des Systems W.X.Y.Z im Netzwerk #2. Welche Voraussetzungen müssen erfüllt sein, damit der Befehl funktioniert? Die Gateway-Maschine muss das System 192.168.2.1 erreichen können. Das heißt, eine Route zu diesem System muss existieren. Private IP-Adressen, wie der Bereich 192.168.x, sollten im Internet nicht verwendet werden. Jedes Paket zu 192.168.2.1 muss daher in ein anderes Paket gepackt werden, das von A.B.C.D kommt und zu W.X.Y.Z geschickt wird. Das erneute Verpacken der Pakete wird als Kapselung bezeichnet. Wenn das Paket W.X.Y.Z erreicht, muss es dort ausgepackt und an 192.168.2.1 ausgeliefert werden. Sie können sich diese Prozedur so vorstellen, dass ein Tunnel zwischen beiden Netzwerken existiert. Die beiden Tunnel-Enden besitzen die IP-Adressen A.B.C.D und W.X.Y.Z. Der Tunnel muss zudem Verkehr zwischen den privaten IP-Adressen erlauben und transportiert so Daten zwischen privaten IP-Adressen über das Internet. Unter &os; wird der Tunnel mit gif-Geräten (generic interface) erstellt. Auf jedem Gateway muss das gif-Gerät mit vier IP-Adressen eingerichtet werden: Zwei öffentliche IP-Adressen und zwei private IP-Adressen. Die gif-Geräte werden vom Kernel bereitgestellt und müssen in der Kernelkonfigurationsdatei auf beiden Maschinen angegeben werden: device gif Wie gewöhnlich müssen Sie danach einen neuen Kernel erstellen, installieren und das System neu starten. Der Tunnel wird in zwei Schritten aufgebaut. Mit &man.ifconfig.8; werden zuerst die öffentlichen IP-Adressen konfiguriert. Anschließend werden die privaten IP-Adressen mit &man.ifconfig.8; eingerichtet. Auf der Gateway-Maschine im Netzwerk #1 bauen Sie den Tunnel mit den folgenden Kommandos auf: &prompt.root; ifconfig gif0 create &prompt.root; ifconfig gif0 tunnel A.B.C.D W.X.Y.Z &prompt.root; ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff Auf dem anderen Gateway benutzen Sie dieselben Kommandos, allerdings mit vertauschten IP-Adressen: &prompt.root; ifconfig gif0 create &prompt.root; ifconfig gif0 tunnel W.X.Y.Z A.B.C.D &prompt.root; ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff Die Konfiguration können Sie anschließend mit dem folgenden Kommando überprüfen: ifconfig gif0 Auf dem Gateway in Netzwerk #1 sollten Sie beispielsweise die nachstehende Ausgabe erhalten: &prompt.root; ifconfig gif0 gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280 tunnel inet A.B.C.D --> W.X.Y.Z inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff Wie Sie sehen, ist ein Tunnel zwischen den IP-Adressen A.B.C.D und W.X.Y.Z aufgebaut worden, der Verkehr zwischen den Adressen 192.168.1.1 und 192.168.2.1 zulässt. Gleichzeitig wurde ein Eintrag in der Routing-Tabelle erstellt, den Sie sich mit netstat -rn ansehen können. Auf der Gateway-Maschine in Netzwerk #1 sieht das so aus: &prompt.root; netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire ... 192.168.2.1 192.168.1.1 UH 0 0 gif0 ... Die Route ist eine Host-Route, wie in der Spalte Flags angegeben. Das heißt die beiden Gateways wissen wie sie einander erreichen, sie kennen allerdings nicht das Netzwerk auf der anderen Seite. Dieses Problem werden wir gleich angehen. Wahrscheinlich ist auf beiden Gateways eine Firewall eingerichtet. Für den VPN-Verkehr muss die Firewall umgegangen werden. Sie können generell den Verkehr zwischen beiden Netzwerken erlauben oder Regeln erstellen, die beide Tunnel-Enden des VPNs voreinander schützen. Der Test des VPNs wird erheblich leichter, wenn Sie jeden Verkehr zwischen den Tunnel-Enden in der Firewall erlauben. Wenn Sie auf der Gateway-Maschine &man.ipfw.8; einsetzen, erlaubt die folgende Regel jeden Verkehr zwischen den Tunnel-Enden, ohne die anderen Regeln zu beeinflussen: ipfw add 1 allow ip from any to any via gif0 Diese Regel muss offensichtlich auf beiden Gateway-Maschinen existieren. Damit sollten Sie das Kommando ping jetzt absetzen können. Auf dem System 192.168.1.1 sollte der nachstehende Befehl Antworten erhalten: ping 192.168.2.1 Denselben Test können Sie auch auf der anderen Gateway-Maschine ausführen. Allerdings können Sie noch nicht die anderen internen Maschinen auf den Netzwerken erreichen. Die Ursache ist das Routing – die Gateway kennen sich zwar gegenseitig, wissen aber noch nichts von den Netzwerken hinter dem anderen Gateway. Um die Netzwerke bekannt zu geben, muss auf jeder Gateway-Maschine noch eine statische Route hinzugefügt werden. Auf der ersten Gateway-Maschine setzen Sie dazu das folgende Kommando ab: route add 192.168.2.0 192.168.2.1 netmask 0xffffff00 Dies entspricht der Anweisung: Um Rechner auf dem Netz 192.168.2.0 zu erreichen, schicke die Pakete zum System 192.168.2.1. Auf dem anderen Gateway muss das analoge Kommando (mit den IP-Adressen 192.168.1.x) abgesetzt werden. Damit ist jetzt der IP-Verkehr zwischen beiden Netzwerken möglich. Zwei Drittel des VPNs zwischen beiden Netzen ist nun eingerichtet. Es ist virtuell und es ist ein Netzwerk. Es ist allerdings noch nicht privat. Dies können Sie mit &man.ping.8; und &man.tcpdump.1; überprüfen. Setzen Sie auf dem ersten Gateway den folgenden Befehl ab: tcpdump dst host 192.168.2.1 Starten Sie dann, ebenfalls auf dem ersten Gateway, den folgenden Befehl: ping 192.168.2.1 Sie werden die nachstehende Ausgabe erhalten: 16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply 16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply 16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply Die ICMP-Nachrichten werden unverschlüsselt übertragen. Mit der Option von &man.tcpdump.1; können Sie sich weitere Daten der Pakete anzeigen lassen. Die Daten sollen aber automatisch verschlüsselt werden. Wie das geht, wird im nächsten Abschnitt erläutert. Zusammenfassung Fügen Sie in beiden Kerneln die Zeile device gif ein und bauen Sie die Kernel neu. Fügen Sie auf dem Gateway in Netzwerk #1 folgende Zeilen in /etc/rc.conf ein: gif_interfaces="gif0" gifconfig_gif0="A.B.C.D W.X.Y.Z" ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff" static_routes="vpn" route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00" Setzen Sie dabei die richtigen IP-Adressen für die Platzhalter ein. Fügen Sie auf beiden Gateways die nachstehende Regel in das Firewall-Skript (zum Beispiel /etc/rc.firewall) ein: ipfw add 1 allow ip from any to any via gif0 Nehmen Sie in /etc/rc.conf auf dem Gateway #2 analoge Änderungen, die IP-Adressen müssen vertauscht werden, vor. Schritt 2: Die Verbindung mit IPsec schützen Um die Verbindung zu schützen, verwenden wir IPsec. IPsec bietet einen Mechanismus, mit dem sich zwei Systeme auf einen Schlüssel einigen können. Mit diesem Schlüssel wird dann der Datenverkehr zwischen beiden Systemen verschlüsselt. Es gibt hierbei zwei Sachen die konfiguriert werden müssen: Die Security-Association bestimmt, mit welchen Methoden der Verkehr zwischen beiden Systemen verschlüsselt wird. Die Security-Policy bestimmt, was verschlüsselt wird. Es soll ja nicht der gesamte Datenverkehr nach außen verschlüsselt werden, sondern nur der Teil des Verkehrs, der zum VPN gehört. Die Security-Association wie auch die Security-Policy werden vom Kernel verwaltet und können von Anwendungen verändert werden. Dazu müssen allerdings zuerst IPsec und das Encapsulated-Security-Payload (ESP) Protokoll in die Kernelkonfigurationsdatei eingetragen werden: Kerneloption IPSEC options IPSEC options IPSEC_ESP Wie üblich, müssen Sie danach den Kernel übersetzen, installieren und das System neu starten. Die Kernel müssen auf beiden Gateway-Maschinen neu erstellt werden. IKE Sie können die Security-Association auf zwei Arten konfigurieren: Manuell, dann müssen Sie den Verschlüsselungsalgorithmus, die Schlüssel und alles Weitere selbst konfigurieren. Oder automatisch, mithilfe eines Dæmons, der das Internet-Key-Exchange Protokoll (IKE) beherrscht. Im Allgemeinen wird die letzte Variante bevorzugt. Sie ist auch wesentlich leichter einzurichten. IPsec Security-Policy setkey Mit &man.setkey.8; können Sie Security-Policies editieren und anzeigen. Die Beziehung von setkey und der Tabelle der Security-Policies im Kernel entspricht dem Verhältnis von &man.route.8; und der Routing-Tabelle. Die momentanen Security-Associations lassen sich ebenfalls mit setkey anzeigen; setkey verhält sich in diesem Fall wie netstat -r, um die Analogie fortzuführen. Sie haben die Wahl zwischen mehreren Programmen, wenn Sie Security-Associations mit &os; verwalten wollen. Im Folgenden wird racoon beschrieben, das Sie über den Port security/ipsec-tools installieren können. racoon Auf beiden Gateway-Maschinen muss racoon laufen. Konfiguriert wird jeweils die IP-Adresse der Gegenstelle sowie der geheime Schlüssel. Dabei muss auf beiden Gateway-Maschinen der gleiche Schlüssel verwendet werden. Die beiden raccon-Daemonen prüfen mithilfe des geheimen Schlüssels gegenseitig ihre Identität. Anschließend generieren Sie einen neuen geheimen Schlüssel, mit dem dann der Datenverkehr im VPN verschlüsselt wird. Dieser Schlüssel wird von Zeit zu Zeit geändert. Ein Angreifer, der einen der Schlüssel geknackt hat – das ist schon ziemlich unwahrscheinlich – kann somit nicht viel mit diesem Schlüssel anfangen, da schon wieder ein anderer Schlüssel verwendet wird. Die Konfiguration von racoon befindet sich in ${PREFIX}/etc/racoon. In der dort befindlichen Konfigurationsdatei sollten Sie nicht allzu viele Änderungen vornehmen müssen. Sie müssen allerdings den so genannten Pre-Shared-Key (den vorher ausgetauschten Schlüssel) ändern. In der Voreinstellung befindet sich dieser Schlüssel in der Datei ${PREFIX}/etc/racoon/psk.txt. Dieser Schlüssel wird nicht zum Verschlüsseln des Datenverkehrs verwendet. Er dient lediglich der Authentifizierung der beiden racoon-Daemonen. Für jeden entfernten Kommunikationspartner enthält psk.txt eine Zeile. Damit besteht die Datei psk.txt in unserem Beispiel aus einer Zeile (wir verwenden einen entfernten Kommunikationspartner). Auf dem Gateway #1 sieht diese Zeile wie folgt aus: W.X.Y.Z geheim Die Zeile besteht aus der öffentlichen IP-Adresse der Gegenstelle, Leerzeichen und dem geheimen Schlüssel. Sie sollten natürlich nicht geheim verwenden. Für den geheimen Schlüssel gelten dieselben Regeln wie für Passwörter. Auf dem anderen Gateway sieht die Zeile folgendermaßen aus: A.B.C.D geheim Die Zeile besteht aus der öffentlichen IP-Adresse der Gegenstelle, Leerzeichen und dem geheimen Schlüssel. Die Zugriffsrechte von psk.txt müssen auf 0600 (Lese- und Schreibzugriff nur für root) gesetzt sein, bevor racoon gestartet wird. Auf beiden Gateway-Maschinen muss racoon laufen. Sie brauchen ebenfalls Firewall-Regeln, die IKE-Verkehr erlauben. IKE verwendet UDP, um Nachrichten zum ISAKMP-Port (Internet Security Association Key Management Protocol) zu schicken. Die Regeln sollten früh in der Regelkette auftauchen: ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp Wenn racoon läuft, können Sie versuchen, mit ping von einem Gateway-Rechner aus den anderen Gateway zu erreichen. Die Verbindung wird zwar immer noch nicht verschlüsselt, aber racoon wird die Security-Association zwischen beiden Systemen einrichten. Dies kann eine Weile dauern, und Sie bemerken vielleicht eine kleine Verzögerung, bevor die Antworten von der Gegenstelle kommen. Die Security-Association können Sie sich auf einem der beiden Gateway-Systeme mit &man.setkey.8; ansehen: setkey -D Damit ist die erste Hälfte der Arbeit getan. Jetzt muss noch die Security-Policy konfiguriert werden. Damit wir eine sinnvolle Security-Policy erstellen können, fassen wir das bisher geleistete zusammen. Die Diskussion gilt für beide Enden des Tunnels. Jedes gesendete IP-Paket enthält im Header Informationen über das Paket selbst. Im Header befinden sich die IP-Adressen des Senders und des Empfängers. Wie wir bereits wissen, dürfen private IP-Adressen, wie 192.168.x.y nicht auf das Internet gelangen. Pakete zu privaten IP-Adressen müssen zuerst in einem anderen Paket gekapselt werden. In diesem Paket werden die privaten IP-Adressen durch öffentliche IP-Adressen ersetzt. Das ausgehende Paket hat beispielsweise wie folgt ausgesehen: .----------------------. | Src: 192.168.1.1 | | Dst: 192.168.2.1 | | <other header info> | +----------------------+ | <packet data> | `----------------------' Es wird in ein anderes Paket umgepackt (gekapselt) und sieht danach wie folgt aus: .--------------------------. | Src: A.B.C.D | | Dst: W.X.Y.Z | | <other header info> | +--------------------------+ | .----------------------. | | | Src: 192.168.1.1 | | | | Dst: 192.168.2.1 | | | | <other header info> | | | +----------------------+ | | | <packet data> | | | `----------------------' | `--------------------------' Die Kapselung wird vom gif-Gerät vorgenommen. Das neue Paket enthält im Header eine öffentliche IP-Adresse und der Datenteil des Pakets enthält das ursprüngliche Paket. Natürlich soll der gesamte Datenverkehr des VPNs verschlüsselt werden. Dies kann man wie folgt ausdrücken: Wenn ein Paket von A.B.C.D zu W.X.Y.Z geschickt wird, verschlüssele es entsprechend der Security-Association. Wenn ein Paket von W.X.Y.Z kommt und für A.B.C.D bestimmt ist, entschlüssele es entsprechend der Security-Association. Das ist fast richtig. Mit diesen Regeln würde der ganze Verkehr von und zu W.X.Y.Z verschlüsselt, auch wenn er nicht zum VPN gehört. Die richtige Formulierung lautet: Wenn ein Paket, das ein gekapseltes Paket enthält, von A.B.C.D zu W.X.Y.Z geschickt wird, verschlüssele es entsprechend der Security-Association. Wenn ein Paket, das ein gekapseltes Paket enthält, von W.X.Y.Z kommt und für A.B.C.D bestimmt ist, entschlüssele es entsprechend der Security-Association. Dies ist eine zwar subtile aber eine notwendige Änderung. Die Security-Policy können Sie mit &man.setkey.8; erstellen. &man.setkey.8; besitzt eine Konfigurations-Syntax zur Erstellung der Security-Policy. Sie können die Konfiguration über die Standardeingabe oder in einer Datei, die Sie mit der Option angeben, erstellen. Gateway #1 (öffentliche IP-Adresse: A.B.C.D) muss folgendermaßen konfiguriert werden, um alle ausgehenden Pakete an W.X.Y.Z zu verschlüsseln: spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Speichern Sie dieses Kommando in einer Datei, beispielsweise /etc/ipsec.conf ab. Rufen Sie anschließend das nachstehende Kommando auf: &prompt.root; setkey -f /etc/ipsec.conf weist &man.setkey.8; an, der Security-Policy-Datenbank eine Regel hinzuzufügen. Der Rest der Zeile gibt an, auf welche Pakete diese Regel zutrifft. A.B.C.D/32 und W.X.Y.Z/32 sind die IP-Adressen und Netzmasken, die Systeme angeben, auf die diese Regel zutrifft. Im Beispiel gilt die Regel für die beiden Gateway-Systeme. zeigt an, dass die Regel nur für Pakete gilt, die gekapselte Pakete enthalten. legt fest, dass die Regel nur für ausgehende Pakete gilt. gibt an, dass die Pakete geschützt werden. Das benutzte Protokoll wird durch angegeben. kapselt das Paket in ein IPsec-Paket. Die nochmalige Angabe von A.B.C.D und W.X.Y.Z gibt die Security-Association an. Das abschließende erzwingt die Verschlüsselung der Pakete. Diese Regel gilt nur für ausgehende Pakete. Sie brauchen eine analoge Regel für eingehende Pakete: spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; In dieser Regel wird anstelle von benutzt und die IP-Adressen sind notwendigerweise umgekehrt angegeben. Das zweite Gateway-System mit der IP-Adresse W.X.Y.Z braucht entsprechende Regeln: spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Schließlich brauchen Sie auf beiden Gateway-Systemen noch Firewall-Regeln, die ESP- und IPENCAP-Pakete in beide Richtungen erlauben: ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D Da die Regeln symmetrisch sind, können sie auf beiden Systemen verwendet werden. Damit sehen ausgehende Pakete wie folgt aus: .------------------------------. --------------------------. | Src: A.B.C.D | | | Dst: W.X.Y.Z | | | < weitere Header > | | Encrypted +------------------------------+ | packet. | .--------------------------. | -------------. | contents | | Src: A.B.C.D | | | | are | | Dst: W.X.Y.Z | | | | completely | | < weitere Header > | | | |- secure | +--------------------------+ | | Encap'd | from third | | .----------------------. | | -. | packet | party | | | Src: 192.168.1.1 | | | | Original |- with real | snooping | | | Dst: 192.168.2.1 | | | | packet, | IP addr | | | | < weitere Header > | | | |- private | | | | +----------------------+ | | | IP addr | | | | | <Paket-Daten> | | | | | | | | `----------------------' | | -' | | | `--------------------------' | -------------' | `------------------------------' --------------------------' Am anderen Ende des VPNs werden die Pakete zuerst entsprechend der von racoon ausgehandelten Security-Association entschlüsselt. Das gif-Interface entfernt dann die zweite Schicht, damit das ursprüngliche Paket zum Vorschein kommt. Dieses kann dann in das interne Netzwerk transportiert werden. Dass die Pakete wirklich verschlüsselt werden, können Sie wieder mit &man.ping.8; überprüfen. Melden Sie sich auf dem Gateway A.B.C.D an und rufen das folgende Kommando auf: tcpdump dst host 192.168.2.1 Auf demselben Rechner setzen Sie dann noch das nachstehende Kommando ab: ping 192.168.2.1 Dieses Mal wird die Ausgabe wie folgt aussehen: XXX tcpdump output Jetzt zeigt &man.tcpdump.1; ESP-Pakete an. Auch wenn Sie diese mit der Option untersuchen, werden Sie wegen der Verschlüsselung nur unverständliche Zeichen sehen. Herzlichen Glückwunsch. Sie haben soeben ein VPN zwischen zwei entfernten Netzen eingerichtet. Zusammenfassung IPsec muss in beiden Kernelkonfigurationsdateien enthalten sein: options IPSEC options IPSEC_ESP Installieren Sie den Port security/ipsec-tools. Tragen Sie auf beiden Rechnern in ${PREFIX}/etc/racoon/psk.txt jeweils die IP-Adresse des entfernten Gateways und den geheimen Schlüssel ein. Setzen Sie die Zugriffsrechte der Datei auf 0600. Fügen Sie auf jedem Rechner die folgenden Zeilen zu /etc/rc.conf hinzu: ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" Erstellen Sie auf jedem Rechner die Datei /etc/ipsec.conf mit den nötigen -Zeilen. Auf dem Gateway #1 hat die Datei folgenden Inhalt: spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; Auf dem Gateway #2 sieht die Datei so aus: spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Fügen Sie auf beiden Rechnern Firewall-Regeln hinzu, die IKE-, ESP- und IPENCAP-Verkehr erlauben: ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D Das VPN wurde in zwei Schritten eingerichtet. Maschinen auf beiden Netzen können miteinander kommunizieren und der Datenverkehr zwischen beiden Netzen wird automatisch verschlüsselt.
Chern Lee Beigetragen von OpenSSH OpenSSH Sicherheit OpenSSH OpenSSH stellt Werkzeuge bereit, um sicher auf entfernte Maschinen zuzugreifen. Die Kommandos rlogin, rsh, rcp und telnet können durch OpenSSH ersetzt werden. Zusätzlich können TCP/IP-Verbindungen sicher durch SSH weitergeleitet (getunnelt) werden. Mit SSH werden alle Verbindungen verschlüsselt, dadurch wird verhindert, dass die Verbindung zum Beispiel abgehört oder übernommen (Hijacking) werden kann. OpenSSH wird vom OpenBSD-Projekt gepflegt und basiert auf SSH v1.2.12 mit allen aktuellen Fixen und Aktualisierungen. OpenSSH ist mit den SSH-Protokollen der Versionen 1 und 2 kompatibel. Vorteile von OpenSSH Mit &man.telnet.1; oder &man.rlogin.1; werden Daten in einer unverschlüsselten Form über das Netzwerk gesendet. Daher besteht die Gefahr, das Benutzer/Passwort Kombinationen oder alle Daten an beliebiger Stelle zwischen dem Client und dem Server abgehört werden. Mit OpenSSH stehen eine Reihe von Authentifizierungs- und Verschlüsselungsmethoden zur Verfügung, um das zu verhindern. Aktivieren von sshd OpenSSH aktivieren Unter &os; entscheidet der Anwender bei einer Standard-Installation, ob der sshd-Daemon aktiviert werden soll. Um zu überprüfen, ob sshd auf Ihrem System aktiviert ist, suchen Sie in rc.conf nach der folgenden Zeile: sshd_enable="YES" Ist diese Zeile vorhanden, wird &man.sshd.8;, der OpenSSH-Dæmon, beim Systemstart automatisch aktiviert. Alternativ können Sie OpenSSH auch über das &man.rc.8;-Skript /etc/rc.d/sshd starten: /etc/rc.d/sshd start SSH Client OpenSSH Client &man.ssh.1; arbeitet ähnlich wie &man.rlogin.1;: &prompt.root; ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: ******* Der Anmeldevorgang wird danach, wie von rlogin oder telnet gewohnt, weiterlaufen. SSH speichert einen Fingerabdruck des Serverschlüssels. Die Aufforderung, yes einzugeben, erscheint nur bei der ersten Verbindung zu einem Server. Weitere Verbindungen zu dem Server werden gegen den gespeicherten Fingerabdruck des Schlüssels geprüft und der Client gibt eine Warnung aus, wenn sich der empfangene Fingerabdruck von dem gespeicherten unterscheidet. Die Fingerabdrücke der Version 1 werden in ~/.ssh/known_hosts, die der Version 2 in ~/.ssh/known_hosts2 gespeichert. In der Voreinstellung akzeptieren aktuelle OpenSSH-Server nur SSH v2 Verbindungen. Wenn möglich, wird Version 2 verwendet, ist dies nicht möglich, fällt der Server auf Version 1 zurück. Der Client kann gezwungen werden, nur eine der beiden Versionen zu verwenden, indem die Option (für die Version 1) oder (für die Version 2) übergeben wird. Die Unterstützung für Version 1 ist nur noch aus Kompatibilitätsgründen zu älteren Versionen enthalten. Secure Copy OpenSSH secure copy scp Mit &man.scp.1; lassen sich Dateien analog wie mit &man.rcp.1; auf entfernte Maschinen kopieren. Mit scp werden die Dateien allerdings in einer sicheren Weise übertragen. &prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: COPYRIGHT 100% |*****************************| 4735 00:00 &prompt.root; Da der Fingerabdruck schon im vorigen Beispiel abgespeichert wurde, wird er bei der Verwendung von scp in diesem Beispiel überprüft. Da die Fingerabdrücke übereinstimmen, wird keine Warnung ausgegeben. Die Argumente, die scp übergeben werden, gleichen denen von cp in der Beziehung, dass die ersten Argumente die zu kopierenden Dateien sind und das letzte Argument den Bestimmungsort angibt. Da die Dateien über das Netzwerk kopiert werden, können ein oder mehrere Argumente die Form besitzen. Konfiguration OpenSSH Konfiguration Die für das ganze System gültigen Konfigurationsdateien des OpenSSH-Dæmons und des Clients finden sich in dem Verzeichnis /etc/ssh. Die Client-Konfiguration befindet sich in ssh_config, die des Servers befindet sich in sshd_config. Das SSH-System lässt sich weiterhin über die Anweisungen (Vorgabe ist /usr/sbin/sshd) und in /etc/rc.conf konfigurieren. ssh-keygen Mit &man.ssh-keygen.1; können DSA- oder RSA-Schlüssel für einen Benutzer erzeugt werden, die anstelle von Passwörtern verwendet werden können: &prompt.user; ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com &man.ssh-keygen.1; erzeugt einen öffentlichen und einen privaten Schlüssel für die Authentifizierung. Der private Schlüssel wird in ~/.ssh/id_dsa oder ~/.ssh/id_rsa gespeichert, während sich der öffentliche Schlüssel in ~/.ssh/id_dsa.pub oder ~/.ssh/id_rsa.pub befindet, je nachdem, ob es sich um einen DSA- oder einen RSA-Schlüssel handelt. Der öffentliche Schlüssel muss sowohl für RSA- als auch für DSA-Schlüssel in die Datei ~/.ssh/authorized_keys auf dem entfernten Rechner aufgenommen werden, damit der Schlüssel funktioniert. Damit werden Verbindungen zu der entfernten Maschine über SSH-Schlüsseln anstelle von Passwörtern authentifiziert. Wenn bei der Erstellung der Schlüssel mit &man.ssh-keygen.1; ein Passwort angegeben wurde, wird der Benutzer bei jeder Anmeldung zur Eingabe des Passworts aufgefordert. Um den Umgang mit SSH-Schlüsseln zu erleichtern, kann &man.ssh-agent.1; die Verwaltung dieser Schlüssel für Sie übernehmen. Lesen Sie dazu den weiter unten. Die Kommandozeilenoptionen und Dateinamen sind abhängig von der OpenSSH-Version. Die für Ihr System gültigen Optionen finden Sie in der Hilfeseite &man.ssh-keygen.1;. ssh-agent und ssh-add Mit &man.ssh-agent.1; und &man.ssh-add.1; ist es möglich, SSH-Schlüssel in den Speicher zu laden, damit die Passphrase nicht jedesmal eingegeben werden muss. &man.ssh-agent.1; übernimmt die Authentifizierung von ihm geladener privater Schlüssel. &man.ssh-agent.1; sollte nur dazu verwendet werden, ein anderes Programm zu starten, beispielsweise eine Shell oder einen Window-Manager. Um &man.ssh-agent.1; in einer Shell zu verwenden, muss es mit einer Shell als Argument aufgerufen werden. Zusätzlich müssen die zu verwaltende Identität (durch &man.ssh-add.1;) sowie deren Passphrase für den privaten Schlüssel übergeben werden. Nachdem dies erledigt ist, kann sich ein Benutzer über &man.ssh.1; auf jedem Rechner anmelden, der einen entsprechenden öffentlichen Schlüssel besitzt. Dazu ein Beispiel: &prompt.user; ssh-agent csh &prompt.user; ssh-add Enter passphrase for /home/user/.ssh/id_dsa: Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) &prompt.user; Um &man.ssh-agent.1; unter X11 zu verwenden, müssen Sie &man.ssh-agent.1; in Ihre ~/.xinitrc aufnehmen. Dadurch können alle unter X11 gestarteten Programme die Dienste von &man.ssh-agent.1; nutzen. Ihre ~/.xinitrc könnte dazu etwas so aussehen: exec ssh-agent startxfce4 Dadurch wird bei jedem Start von X11 zuerst &man.ssh-agent.1; aufgerufen, das wiederum XFCE startet. Nachdem Sie diese Änderung durchgeführt haben, müssen Sie X11 neu starten. Danach können Sie mit &man.ssh-add.1; Ihre SSH-Schlüssel laden. SSH-Tunnel OpenSSH Tunnel Mit OpenSSH ist es möglich, einen Tunnel zu erstellen, in dem ein anderes Protokoll verschlüsselt übertragen wird. Das folgende Kommando erzeugt einen Tunnel für telnet: &prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com &prompt.user; Dabei wurden die folgenden Optionen von ssh verwendet: Erzwingt die Version 2 des Protokolls (Benutzen Sie die Option nicht mit langsamen SSH-Servern). Zeigt an, dass ein Tunnel erstellt werden soll. Ohne diese Option würde ssh eine normale Sitzung öffnen. Zwingt ssh im Hintergrund zu laufen. Ein lokaler Tunnel wird in der Form localport:remotehost:remoteport angegeben. Die Verbindung wird dabei von dem lokalen Port localport auf einen entfernten Rechner weitergeleitet. Gibt den entfernten SSH server an. Ein SSH-Tunnel erzeugt ein Socket auf localhost und dem angegebenen Port. Jede Verbindung, die auf dem angegebenen Socket aufgemacht wird, wird dann auf den spezifizierten entfernten Rechner und Port weitergeleitet. Im Beispiel wird der Port 5023 auf die entfernte Maschine und dort auf localhost Port 23 weitergeleitet. Da der Port 23 für Telnet reserviert ist, erzeugt das eine sichere Telnet-Verbindung durch einen SSH-Tunnel. Diese Vorgehensweise kann genutzt werden, um jedes unsichere TCP-Protokoll wie SMTP, POP3, FTP, usw. weiterzuleiten. Mit SSH einen sicheren Tunnel für SMTP erstellen &prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** &prompt.user; telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP Zusammen mit &man.ssh-keygen.1; und zusätzlichen Benutzer-Accounts können Sie leicht benutzbare SSH-Tunnel aufbauen. Anstelle von Passwörtern können Sie Schlüssel benutzen und jeder Tunnel kann unter einem eigenen Benutzer laufen. Beispiel für SSH-Tunnel Sicherer Zugriff auf einen POP3-Server Nehmen wir an, an Ihrer Arbeitsstelle gibt es einen SSH-Server, der Verbindungen von außen akzeptiert. Auf dem Netzwerk Ihrer Arbeitsstelle soll sich zudem noch ein Mail-Server befinden, der POP3 spricht. Das Netzwerk oder die Verbindung von Ihrem Haus zu Ihrer Arbeitsstelle ist unsicher und daher müssen Sie Ihre E-Mail über eine gesicherte Verbindung abholen können. Die Lösung zu diesem Problem besteht darin, eine SSH-Verbindung von Ihrem Haus zu dem SSH-Server an Ihrer Arbeitsstelle aufzubauen, und von dort weiter zum Mail-Server zu tunneln. &prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ****** Wenn Sie den Tunnel eingerichtet haben, konfigurieren Sie Ihren Mail-Client so, dass er POP3 Anfragen zu localhost Port 2110 sendet. Die Verbindung wird dann sicher zu mail.example.com weitergeleitet. Umgehen einer strengen Firewall Einige Netzwerkadministratoren stellen sehr drakonische Firewall-Regeln auf, die nicht nur einkommende Verbindungen filtern, sondern auch ausgehende. Es kann sein, dass Sie externe Maschinen nur über die Ports 22 und 80 (SSH und Web) erreichen. Sie wollen auf einen Dienst, der vielleicht nichts mit Ihrer Arbeit zu tun hat, wie einen Ogg Vorbis Musik-Server, zugreifen. Wenn der Ogg Vorbis Server nicht auf den Ports 22 oder 80 läuft, können Sie aber nicht auf ihn zugreifen. Die Lösung hier ist es, eine SSH-Verbindung zu einer Maschine außerhalb der Firewall aufzumachen und durch diese zum Ogg Vorbis Server zu tunneln. &prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org user@unfirewalled-system.example.org's password: ******* Konfigurieren Sie Ihren Client so, dass er localhost und Port 8888 benutzt. Die Verbindung wird dann zu music.example.com Port 8000 weitergeleitet und Sie haben die Firewall erfolgreich umgangen. Die Option <varname>AllowUsers</varname> Es ist in der Regel ein gute Idee, festzulegen, welche Benutzer sich von welchem Rechner aus anmelden können. Dies lässt sich beispielsweise über die Option AllowUsers festlegen. Soll sich etwa nur root vom Rechner mit der IP-Adresse 192.168.1.32 aus einwählen dürfen, würden Sie folgenden Eintrag in /etc/ssh/sshd_config aufnehmen: AllowUsers root@192.168.1.32 Damit sich admin von jedem Rechner aus anmelden kann, geben Sie nur den Benutzernamen an: AllowUsers admin Sie können auch mehrere Benutzer in einer Zeile aufführen: AllowUsers root@192.168.1.32 admin Nur ein Benutzer, der in dieser Liste aufgeführt ist, darf sich auf diesem Rechner anmelden. Nachdem Sie /etc/ssh/sshd_config angepasst haben, muss &man.sshd.8; seine Konfigurationsdateien neu einlesen. Dazu geben Sie Folgendes ein: &prompt.root; /etc/rc.d/sshd reload Weiterführende Informationen OpenSSH &man.ssh.1; &man.scp.1; &man.ssh-keygen.1; &man.ssh-agent.1; &man.ssh-add.1; &man.ssh.config.5; &man.sshd.8; &man.sftp-server.8; &man.sshd.config.5; Tom Rhodes Beigetragen von ACL Zugriffskontrolllisten für Dateisysteme Zusammen mit anderen Verbesserungen des Dateisystems wie Schnappschüsse gibt es ab &os; 5.0 Zugriffskontrolllisten (access control list, ACL). Zugriffskontrolllisten erweitern die normalen Zugriffsrechte von &unix; Systemen auf eine kompatible (&posix;.1e) Weise und bieten feiner granulierte Sicherheitsmechanismen. Zugriffskontrolllisten für Dateisysteme werden mit der nachstehenden Zeile in der Kernelkonfiguration aktiviert: options UFS_ACL Diese Option ist in der GENERIC-Konfiguration aktiviert. Das System gibt eine Warnung aus, wenn ein Dateisystem mit ACLs eingehangen werden soll und die Unterstützung für ACLs nicht im Kernel aktiviert ist. Das Dateisystem muss weiterhin erweiterte Attribute zur Verfügung stellen, damit ACLs verwendet werden können. Das neue UNIX-Dateisystem UFS2 stellt diese Attribute standardmäßig zur Verfügung. Die Konfiguration erweiterter Attribute auf UFS1 ist mit einem höheren Aufwand als die Konfiguration erweiterter Attribute auf UFS2 verbunden. Zudem ist UFS2 mit erweiterten Attributen leistungsfähiger als UFS1. Zugriffskontrolllisten sollten daher mit UFS2 verwendet werden. Die Angabe der Option in /etc/fstab aktiviert Zugriffskontrolllisten für ein Dateisystem. Die bevorzugte Möglichkeit ist die Verwendung von Zugriffskontrolllisten mit &man.tunefs.8; (Option ), im Superblock des Dateisystems festzuschreiben. Diese Möglichkeit hat mehrere Vorteile: Nochmaliges Einhängen eines Dateisystems (Option von &man.mount.8;) verändert den Status der Zugriffskontrolllisten nicht. Die Verwendung von Zugriffskontrolllisten kann nur durch Abhängen und erneutes Einhängen eines Dateisystems verändert werden. Das heißt auch, dass Zugriffskontrolllisten nicht nachträglich auf dem Root-Dateisystem aktiviert werden können. Die Zugriffskontrolllisten auf den Dateisystemen sind, unabhängig von den Option in /etc/fstab oder Namensänderungen der Geräte, immer aktiv. Dies verhindert auch, dass Zugriffskontrolllisten aus Versehen auf Dateisystem ohne Zugriffskontrolllisten aktiviert werden und durch falsche Zugriffsrechte Sicherheitsprobleme entstehen. Es kann sein, dass sich der Status von Zugriffskontrolllisten später durch nochmaliges Einhängen des Dateisystems (Option von &man.mount.8;) ändern lässt. Die momentane Variante ist aber sicherer, da der Status der Zugriffskontrolllisten nicht versehentlich geändert werden kann. Allgemein sollten Zugriffskontrolllisten auf einem Dateisystem, auf dem sie einmal verwendet wurden, nicht deaktiviert werden, da danach die Zugriffsrechte falsch sein können. Werden Zugriffskontrolllisten auf einem solchen Dateisystem wieder aktiviert, werden die Zugriffsrechte von Dateien, die sich zwischenzeitlich geändert haben, überschrieben, was zu erneuten Problemen führt. Die Zugriffsrechte einer Datei werden durch ein + (Plus) gekennzeichnet, wenn die Datei durch Zugriffskontrolllisten geschützt ist: drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html Die Verzeichnisse directory1, directory2 und directory3 sind durch Zugriffskontrolllisten geschützt, das Verzeichnis public_html nicht. Zugriffskontrolllisten benutzen Das Werkzeug &man.getfacl.1; zeigt Zugriffskontrolllisten an. Das folgende Kommando zeigt die ACLs auf der Datei test: &prompt.user; getfacl test #file:test #owner:1001 #group:1001 user::rw- group::r-- other::r-- Das Werkzeug &man.setfacl.1; ändert oder entfernt ACLs auf Dateien. Zum Beispiel: &prompt.user; setfacl -k test Die Option entfernt alle ACLs einer Datei oder eines Dateisystems. Besser wäre es, die Option zu verwenden, da sie die erforderlichen Felder beibehält. &prompt.user; setfacl -m u:trhodes:rwx,g:web:r--,o::--- test Mit dem vorstehenden Kommando werden die eben entfernten Zugriffskontrolllisten wiederhergestellt. Der Befehl gibt die Fehlermeldung Invalid argument aus, wenn Sie nicht existierende Benutzer oder Gruppen als Parameter angeben. Tom Rhodes Beigetragen von Portaudit Sicherheitsprobleme in Software Dritter überwachen In den letzten Jahren wurden zahlreiche Verbesserungen in der Einschätzung und dem Umgang mit Sicherheitsproblemen erzielt. Die Gefahr von Einbrüchen in ein System wird aber immer größer, da Softwarepakete von Dritten auf nahezu jedem Betriebssystem installiert und konfiguriert werden. Die Einschätzung der Verletzlichkeit eines Systems ist ein Schlüsselfaktor für dessen Sicherheit. &os; veröffentlicht zwar Sicherheitshinweise (security advisories) für das Basissystem, das Projekt ist allerdings nicht dazu in der Lage, dies auch für die zahlreichen Softwarepakete von Dritten zu tun. Dennoch gibt es einen Weg, auch diese Programmpakete zu überwachen. Das in der Ports-Sammlung enthaltene Programm Portaudit wurde gezielt dafür entwickelt. Der Port security/portaudit fragt dazu eine Datenbank, die vom &os; Security Team sowie den Ports-Entwicklern aktualisiert und gewartet wird, auf bekannte Sicherheitsprobleme ab. Bevor Sie Portaudit verwenden können, müssen Sie es über die Ports-Sammlung installieren: &prompt.root; cd /usr/ports/security/portaudit && make install clean Während der Installation werden die Konfigurationsdateien für &man.periodic.8; aktualisiert, was es Portaudit erlaubt, seine Ausgabe in den täglichen Sicherheitsbericht einzufügen. Stellen Sie auf jeden Fall sicher, dass diese (an das E-Mail-Konto von root gesendeten) Sicherheitsberichte auch gelesen werden. An dieser Stelle ist keine weitere Konfiguration nötig. Nach der Installation kann ein Administrator die unter /var/db/portaudit lokal gespeicherte Datenbank aktualisieren und sich danach durch folgenden Befehl über mögliche Sicherheitslücken der von ihm installierten Softwarepakete informieren: &prompt.root; portaudit -Fda Die Datenbank wird automatisch aktualisiert, wenn &man.periodic.8; ausgeführt wird. Der eben genannte Befehl ist daher optional, er wird aber für das folgende Beispiel benötigt. Nach erfolgter Installation der Datenbank kann ein Administrator über die Ports-Sammlung installierte Softwarepakete Dritter jederzeit überprüfen. Dazu muss er lediglich folgenden Befehl eingeben: &prompt.root; portaudit -a Existiert in Ihren installierten Softwarepaketen eine Sicherheitslücke, wird Portaudit eine Ausgabe ähnlich der folgenden produzieren: Affected package: cups-base-1.1.22.0_1 Type of problem: cups-base -- HPGL buffer overflow vulnerability. Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html> 1 problem(s) in your installed packages found. You are advised to update or deinstall the affected package(s) immediately. Wenn Sie die angegebene URL über einen Internetbrowser aufrufen, erhalten Sie weitere Informationen über die bestehende Sicherheitslücke, wie die betroffenen Versionen, die Version des &os;-Ports sowie Hinweise auf weitere Seiten, die ebenfalls Sicherheitshinweise zu diesem Problem bieten. Portaudit ist ein mächtiges Werkzeug und insbesondere in Zusammenarbeit mit dem Port Portupgrade äußerst hilfreich. Tom Rhodes Beigesteuert von Sicherheitshinweise &os; Sicherheitshinweise Wie für andere hochwertige Betriebssysteme auch werden für &os; Sicherheitshinweise herausgegeben. Die Hinweise werden gewöhnlich auf den Sicherheits-Mailinglisten und in den Errata veröffentlicht, nachdem das Sicherheitsproblem behoben ist. Dieser Abschnitt beschreibt den Umgang mit den Sicherheitshinweisen. Wie sieht ein Sicherheitshinweis aus? Der nachstehende Sicherheitshinweis stammt von der Mailingliste &a.security-notifications.name;: ============================================================================= &os;-SA-XX:XX.UTIL Security Advisory The &os; Project Topic: denial of service due to some problem Category: core Module: sys Announced: 2003-09-23 Credits: Person@EMAIL-ADDRESS Affects: All releases of &os; &os; 4-STABLE prior to the correction date Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6) 2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15) 2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8) 2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18) 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21) 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33) 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43) 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39) CVE Name: CVE-XXXX-XXXX For general information regarding FreeBSD Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit http://www.FreeBSD.org/security/. I. Background II. Problem Description III. Impact IV. Workaround V. Solution VI. Correction details VII. References Das Feld Topic enthält eine Beschreibung des Sicherheitsproblems und benennt das betroffene Programm. Das Feld Category beschreibt den betroffenen Systemteil. Mögliche Werte für dieses Feld sind core, contrib oder ports. Die Kategorie core gilt für Kernkomponenten des &os;-Betriebssystems, die Kategorie contrib beschreibt zum Basissystem gehörende Software Dritter beispielsweise sendmail. Die Kategorie ports beschreibt Software, die Teil der Ports-Sammlung ist. Das Feld Module beschreibt die betroffene Komponente. Im Beispiel ist sys angegeben, das heißt dieses Problem betrifft eine Komponente, die vom Kernel benutzt wird. Das Feld Announced gibt den Zeitpunkt der Bekanntgabe des Sicherheitshinweises an. Damit existiert das Sicherheitsproblem, ist vom Sicherheits-Team bestätigt worden und eine entsprechende Korrektur wurde in das Quellcode-Repository von &os; gestellt. Das Feld Credits gibt die Person oder Organisation an, die das Sicherheitsproblem bemerkte und gemeldet hat. Welche &os;-Releases betroffen sind, ist im Feld Affects angegeben. Die Version einer Datei, die zum Kernel gehört, können Sie schnell mit ident ermitteln. Bei Ports ist die Versionsnummer angegeben, die Sie im Verzeichnis /var/db/pkg finden. Wenn Sie Ihr System nicht täglich aktualisieren, ist Ihr System wahrscheinlich betroffen. Wann das Problem in welchem Release behoben wurde, steht im Feld Corrected. Reserviert für Informationen, über die in der Common Vulnerabilities Database nach Sicherheitslücken gesucht werden kann. Im Feld Background wird das betroffene Werkzeug beschrieben. Meist finden Sie hier warum das Werkzeug Bestandteil von &os; ist, wofür es benutzt wird und eine kurze Darstellung der Herkunft des Werkzeugs. Im Feld Problem Description befindet sich eine genaue Darstellung des Sicherheitsproblems. Hier wird fehlerhafter Code beschrieben oder geschildert, wie ein Werkzeug ausgenutzt wird. Das Feld Impact beschreibt die Auswirkungen des Sicherheitsproblems auf ein System, beispielsweise erweiterte Rechte oder gar Superuser-Rechte für normale Benutzer. Im Feld Workaround wird eine Umgehung des Sicherheitsproblems beschrieben. Die Umgehung ist für Administratoren gedacht, die ihr System aus Zeitnot, Netzwerk-technischen oder anderen Gründen nicht aktualisieren können. Nehmen Sie Sicherheitsprobleme ernst: Auf einem betroffenen System sollte das Problem entweder behoben oder, wie hier beschrieben, umgangen werden. Im Feld Solution enthält eine getestete Schritt-für-Schritt Anleitung, die das Sicherheitsproblem behebt. Das Feld Correction Details enthält die CVS-Tags der betroffenen Dateien zusammen mit zugehörigen Revisionsnummern. Im Feld References finden sich Verweise auf weitere Informationsquellen. Dies können URLs zu Webseiten, Bücher, Mailinglisten und Newsgroups sein. Tom Rhodes Beigetragen von Prozess-Überwachung Prozess-Überwachung Prozess-Überwachung (Process accounting) ist ein Sicherheitsverfahren, bei dem ein Administrator verfolgt, welche Systemressourcen verwendet werden und wie sich diese auf die einzelnen Anwender verteilen. Dadurch kann das System überwacht werden und es ist sogar möglich, zu kontrollieren, welche Befehle ein Anwender eingibt. Diese Fähigkeiten haben sowohl Vor- als auch Nachteile. Positiv ist, dass man ein Einbruchsversuch bis an den Anfang zurückverfolgen kann. Von Nachteil ist allerdings, dass durch diesen Prozess Unmengen an Protokolldateien erzeugt werden, die auch dementsprechenden Plattenplatz benötigen. Dieser Abschnitt beschreibt die Grundlagen der Prozess-Überwachung. Die Prozess-Überwachung aktivieren und konfigurieren Bevor Sie die Prozess-Überwachung verwenden können, müssen Sie diese aktivieren. Dazu führen Sie als root die folgenden Befehle aus: &prompt.root; touch /var/account/acct &prompt.root; accton /var/account/acct &prompt.root; echo 'accounting_enable="YES"' >> /etc/rc.conf Einmal aktiviert, wird sofort mit der Überwachung von CPU-Statistiken, Befehlen und anderen Vorgängen begonnen. Protokolldateien werden in einem nur von Maschinen lesbaren Format gespeichert, daher müssen Sie diese über &man.sa.8; aufrufen. Geben Sie keine Optionen an, gibt sa Informationen wie die Anzahl der Aufrufe pro Anwender, die abgelaufene Zeit in Minuten, die gesamte CPU- und Anwenderzeit in Minuten, die durchschnittliche Anzahl der Ein- und Ausgabeoperationen und viel andere mehr aus. Um Informationen über ausgeführte Befehle zu erhalten, verwenden Sie &man.lastcomm.1;. So können Sie etwa ermittlen, welche Befehle von wem auf welchem &man.ttys.5; ausgeführt wurden: &prompt.root; lastcomm ls trhodes ttyp1 Das Ergebnis sind alle bekannten Einsätze von ls durch trhodes auf dem Terminal ttyp1. Zahlreiche weitere nützliche Optionen finden Sie in den Manualpages zu &man.lastcomm.1;, &man.acct.5; sowie &man.sa.8;.
diff --git a/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml b/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml index 9905a2a273..212a4334e3 100644 --- a/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/serialcomms/chapter.sgml @@ -1,3090 +1,3090 @@ Martin Heinen Übersetzt von Serielle Datenübertragung Übersicht serielle Datenübertragung &unix; Systeme unterstützten schon immer die serielle Datenübertragung. Tatsächlich wurden Ein- und Ausgaben auf den ersten &unix; Maschinen über serielle Leitungen durchgeführt. Seit der Zeit, in der ein durchschnittlicher Terminal aus einem seriellen Drucker mit 10 Zeichen/Sekunde und einer Tastatur bestand, hat sich viel verändert. Dieses Kapitel behandelt einige Möglichkeiten, serielle Datenübertragung unter FreeBSD zu verwenden. Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen: Wie Sie Terminals an Ihr FreeBSD anschließen. Wie Sie sich mit einem Modem auf einem entfernten Rechner einwählen. Wie Sie entfernten Benutzern erlauben, sich mit einem Modem in Ihr System einzuwählen. Wie Sie Ihr System über eine serielle Konsole booten. Bevor Sie dieses Kapitel lesen, sollten Sie einen neuen Kernel konfigurieren und installieren können (). Das Berechtigungskonzept von &unix; und Prozesse verstehen (). Zudem sollten Sie Zugriff auf die Handbücher der seriellen Komponenten (Modem oder Multiportkarte) haben, die Sie mit FreeBSD verwenden wollen. Einführung Begriffe bits-per-second bps Bits pro Sekunde – Einheit für die Übertragungsgeschwindigkeit. DEE (DTE) DEE DTE Datenendeinrichtung (Data Terminal Equipment) – zum Beispiel Ihr Computer. DÜE (DCE) DÜE DCE Datenübertragungseinrichtung (Data Communications Equipment) – Ein Modem. RS-232 RS-232C Kabel EIA (Electronic Industries Association) Norm für die serielle Datenübertragung. In diesem Abschnitt wird der Begriff Baud nicht für Übertragungsgeschwindigkeiten gebraucht. Baud bezeichnet elektrische Zustandswechsel pro Zeiteinheit, die Taktfrequenz, während bps (Bits pro Sekunde) der richtige Begriff für die Übertragungsgeschwindigkeit ist (die meisten Pedanten sollten damit zufrieden sein). Kabel und Schnittstellen Um ein Modem oder einen Terminal an Ihr FreeBSD-System anzuschließen, muss Ihr Computer über eine serielle Schnittstelle verfügen. Zusätzlich brauchen Sie noch das passende Kabel, um das Gerät mit der Schnittstelle zu verbinden. Wenn Sie mit Ihren Geräten und den nötigen Kabeln schon vertraut sind, können Sie diesen Abschnitt überspringen. Kabel Es gibt verschiedene serielle Kabel. Die zwei häufigsten sind Nullmodemkabel und Standard-RS-232-Kabel. Die Dokumentation Ihrer Hardware sollte beschreiben, welchen Kabeltyp Sie benötigen. Nullmodemkabel Nullmodemkabel Ein Nullmodemkabel verbindet einige Signale, wie die Betriebserde, eins zu eins, andere Signale werden getauscht: Die Sende- und Empfangsleitungen werden zum Beispiel gekreuzt. Sie können das Kabel für die Anbindung eines Terminals auch selbst herstellen. Die folgende Tabelle enthält die Signalnamen von RS-232C sowie die Pinbelegung für einen Stecker vom Typ DB-25. Beachten Sie dabei aber, dass der Standard zwar eine direkte Verbindung beider Pin 1 (Protective Ground) vorschreibt, diese aber in vielen Fällen nicht vorhanden ist. Einige Terminals benötigen nur die Pins 2, 3 und 7 für eine korrekte Funktion, während andere eine unterschiedliche Konfiguration als die in den folgenden Beispielen gezeigte benötigen. Nullmodemkabel vom Typ DB-25-zu-DB-25 Signal Pin # Pin # Signal SG 7 verbunden mit 7 SG TD 2 verbunden mit 3 RD RD 3 verbunden mit 2 TD RTS 4 verbunden mit 5 CTS CTS 5 verbunden mit 4 RTS DTR 20 verbunden mit 6 DSR DTR 20 verbunden mit 8 DCD DSR 6 verbunden mit 20 DTR DCD 8 verbunden mit 20 DTR
Die folgenden zwei Schemata werden heutzutage ebenfalls häufig eingesetzt: Nullmodemkabel vom Typ DB-9-zu-DB-9 Signal Pin # Pin # Signal RD 2 verbunden mit 3 TD TD 3 verbunden mit 2 RD DTR 4 verbunden mit 6 DSR DTR 4 verbunden mit 1 DCD SG 5 verbunden mit 5 SG DSR 6 verbunden mit 4 DTR DCD 1 verbunden mit 4 DTR RTS 7 verbunden mit 8 CTS CTS 8 verbunden mit 7 RTS
Nullmodemkabel vom Typ DB-9-zu-DB-25 Signal Pin # Pin # Signal RD 2 verbunden mit 2 TD TD 3 verbunden mit 3 RD DTR 4 verbunden mit 6 DSR DTR 4 verbunden mit 8 DCD SG 5 verbunden mit 7 SG DSR 6 verbunden mit 20 DTR DCD 1 verbunden mit 20 DTR RTS 7 verbunden mit 5 CTS CTS 8 verbunden mit 4 RTS
Wird ein Pin eines Kabels mit zwei Pins des anderen Kabels verbunden, werden dazu in der Regel zuerst die beiden Pins mit einem kurzem Draht verbunden. Danach wird dieser Draht mit dem Pin des anderen Endes verbunden. Die eben besprochenen Schemata scheinen die beliebtesten zu sein. Es gibt aber noch weitere Varianten. Im Buch RS-232 Made Easy wird beispielsweise SG mit SG verbunden, TD mit RD, RTS und CTS mit DCD, DTR mit DSR, und umgekehrt.
Standard RS-232C Kabel RS-232C Kabel Ein Standard-RS-232C-Kabel verbindet alle Signale direkt, das heißt das Signal Transmitted Data wird mit dem Signal Transmitted Data der Gegenstelle verbunden. Dieses Kabel wird benötigt, um ein Modem mit einem FreeBSD-System zu verbinden. Manche Terminals benötigen dieses Kabel ebenfalls.
Schnittstellen Über serielle Schnittstellen werden Daten zwischen dem FreeBSD-System und dem Terminal übertragen. Dieser Abschnitt beschreibt die verschiedenen Schnittstellen und wie sie unter FreeBSD angesprochen werden. Arten von Schnittstellen Da es verschiedene Schnittstellen gibt, sollten Sie vor dem Kauf oder Selbstbau eines Kabels sicherstellen, dass dieses zu den Schnittstellen Ihres Terminals und FreeBSD-Systems passt. Die meisten Terminals besitzen DB-25-Stecker. Personal Computer haben DB-25- oder DB-9-Stecker. Wenn Sie eine serielle Multiportkarte für Ihren PC besitzen, haben Sie vielleicht RJ-12- oder RJ-45-Anschlüsse. Die Dokumentation Ihrer Geräte sollte Aufschluss über den Typ der benötigten Anschlüsse geben. Oft hilft es, wenn Sie sich den Anschluss einfach ansehen. Schnittstellenbezeichnung Unter FreeBSD sprechen Sie die serielle Schnittstelle (Port) über einen Eintrag im /dev Verzeichnis an. Es gibt dort zwei verschiedene Einträge: Schnittstellen für eingehende Verbindungen werden /dev/ttydN genannt. Dabei ist N die Nummer der Schnittstelle, deren Zählung bei Null beginnt. Allgemein wird diese Schnittstelle für Terminals benutzt. Diese Schnittstelle funktioniert nur, wenn ein Data Carrier Detect Signal (DCD) vorliegt. Für ausgehende Verbindungen wird /dev/cuadN verwendet. Dieser Port wird normalerweise nur von Modems genutzt. Sie können ihn allerdings für Terminals benutzen, die das Data Carrier Detect Signal nicht unterstützen. Unter &os;5.X wurden Ports für ausgehende Verbindungen mit /dev/cuaaN bezeichnet. Wenn Sie einen Terminal an die erste serielle Schnittstelle (COM1 in &ms-dos;), angeschlossen haben, sprechen Sie ihn über /dev/ttyd0 an. Wenn er an der zweiten seriellen Schnittstelle angeschlossen ist, verwenden Sie /dev/ttyd1, usw.
Kernelkonfiguration In der Voreinstellung benutzt FreeBSD vier serielle Schnittstellen, die in &ms-dos;-Kreisen als COM1, COM2, COM3 und COM4 bekannt sind. Momentan unterstützt FreeBSD einfache Multiportkarten (z.B. die BocaBoard 1008 und 2016) und bessere wie die von Digiboard und Stallion Technologies. In der Voreinstellung sucht der Kernel allerdings nur nach den Standardanschlüssen. Um zu überprüfen, ob der Kernel eine Ihrer seriellen Schnittstellen erkennt, achten Sie auf die Meldungen beim Booten, oder schauen sich diese später mit /sbin/dmesg an. Insbesondere sollten Sie auf Meldungen achten, die mit den Zeichen sio anfangen. Das folgende Kommando zeigt Ihnen nur die Meldungen an, die die Folge sio enthalten: &prompt.root; /sbin/dmesg | grep 'sio' Auf einem System mit vier seriellen Schnittstellen sollte der Kernel die folgenden Meldungen ausgeben: sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A Wenn Ihr Kernel nicht alle seriellen Schnittstellen erkennt, müssen Sie Ihren Kernel über die Datei /boot/device.hints konfigurieren. Zusätzlich können Sie Einträge für Geräte, die auf Ihrem System nicht vorhanden sind, aus dem Kernel entfernen. Die Hilfeseite &man.sio.4; enthält weitere Informationen zu seriellen Schnittstellen und Multiportkarten. Seien Sie vorsichtig, wenn Sie Konfigurationsdateien von älteren FreeBSD-Versionen verwenden, da sich die Syntax und die Bedeutung der Optionen zwischen verschiedenen Versionen geändert hat. port IO_COM1 ist ein Ersatz für port 0x3f8, IO_COM2 bedeutet port 0x2f8, IO_COM3 bedeutet port 0x3e8 und IO_COM4 steht für port 0x2e8. Die angegebenen IO-Adressen sind genau wie die Interrupts 4, 3, 5 und 9 üblich für serielle Schnittstellen. Beachten Sie bitte, dass sich normale serielle Schnittstellen auf ISA-Bussen keine Interrupts teilen können. Multiportkarten besitzen zusätzliche Schaltkreise, die es allen 16550As auf der Karte erlauben, sich einen oder zwei Interrupts zu teilen. Gerätedateien Die meisten Geräte im Kernel werden durch Gerätedateien in /dev angesprochen. Die sio Geräte werden durch /dev/ttydN für eingehende Verbindungen und durch /dev/cuadN für ausgehende Verbindungen angesprochen. Zum Initialisieren der Geräte stellt FreeBSD die Dateien /dev/ttydN und /dev/cuadN (unter &os; 6.X) beziehungsweise /dev/ttyidN und /dev/cuaiaN zur Verfügung. Zusätzlich existieren Dateien für das Sperren von Gerätedateien (Locking). Dabei handelt es sich um die Dateien /dev/ttydN.lock und /dev/cuadN.lock (unter &os; 6.X) beziehungsweise um die Dateien /dev/ttyldN und /dev/cualaN. Diese Dateien werden benutzt, um Kommunikationsparameter beim Öffnen eines Ports vorzugeben. Für Modems, die zur Flusskontrolle RTS/CTS benutzen, kann damit crtscts gesetzt werden. Die Geräte /dev/ttyldN und /dev/cualaN (locking devices) werden genutzt, um bestimmte Parameter festzuschreiben und vor Veränderungen zu schützen. Weitere Informationen zu Terminals finden Sie in &man.termios.4;, &man.sio.4; erklärt die Dateien zum Initialisieren und Sperren der Geräte, &man.stty.1; beschreibt schließlich Terminal-Einstellungen. Konfiguration der seriellen Schnittstelle ttyd cuad Anwendungen benutzen normalerweise die Geräte ttydN oder cuadN. Das Gerät besitzt einige Voreinstellungen für Terminal-I/O, wenn es von einem Prozess geöffnet wird. Mit dem folgenden Kommando können Sie sich diese Einstellungen ansehen: &prompt.root; stty -a -f /dev/ttyd1 Sie können diese Einstellungen verändern, sie bleiben allerdings nur solange wirksam, bis das Gerät geschlossen wird. Wenn das Gerät danach wieder geöffnet wird, sind die Voreinstellungen wieder wirksam. Um die Voreinstellungen zu ändern, öffnen Sie das Gerät, das zum Initialisieren dient und verändern dessen Einstellungen. Um beispielsweise für ttyd5 den Modus, 8-Bit Kommunikation und Flusssteuerung einzuschalten, setzen Sie das folgende Kommando ab: &prompt.root; stty -f /dev/ttyd5.init clocal cs8 ixon ixoff rc-Dateien rc.serial In /etc/rc.d/rc.serial werden die systemweiten Voreinstellungen für serielle Geräte vorgenommen. Um zu verhindern, dass Einstellungen von Anwendungen verändert werden, können Sie die Geräte zum Festschreiben von Einstellungen (locking devices) benutzen. Wenn sie beispielsweise die Geschwindigkeit von ttyd5 auf 57600 bps festlegen wollen, benutzen Sie das folgende Kommando: &prompt.root; stty -f /dev/ttyld5 57600 Eine Anwendung, die ttyd5 öffnet, kann nun nicht mehr die Geschwindigkeit ändern und muss 57600 bps benutzen. Die Geräte zum Initialisieren und Festschreiben von Einstellungen sollten selbstverständlich nur von root beschreibbar sein.
Sean Kelly Beigetragen von Terminals Terminals Wenn Sie sich nicht an der Konsole oder über ein Netzwerk an Ihrem FreeBSD-System anmelden können, sind Terminals ein bequemer und billiger Weg auf Ihr System zuzugreifen. Dieser Abschnitt beschreibt wie Sie Terminals mit FreeBSD benutzen. Terminaltypen Das ursprüngliche &unix; System besaß keine Konsolen. Zum Anmelden und Starten von Programmen wurden stattdessen Terminals benutzt, die an den seriellen Schnittstellen des Rechners angeschlossen waren. Dies entspricht der Benutzung eines Modems zum Anmelden auf einem entfernten System, um dort mit einem Terminalemulator im Textmodus zu arbeiten. Die Konsolen heutiger PCs besitzen sehr gute Grafikfähigkeiten, trotzdem gibt es in fast jedem &unix; System die Möglichkeit, sich über die serielle Schnittstelle anzumelden; FreeBSD ist da keine Ausnahme. Sie können sich an einem Terminal anmelden und dort jedes Textprogramm, das Sie normalerweise an der Konsole oder in einem xterm Fenster im X Window System benutzen, laufen lassen. Im kommerziellen Umfeld können Sie viele Terminals an ein FreeBSD-System anschließen und diese auf den Arbeitsplätzen Ihrer Angestellten aufstellen. Im privaten Umfeld kann ein älterer IBM PC oder &macintosh; als Terminal dienen. Damit verwandeln Sie einen Einzelarbeitsplatz in ein leistungsfähiges Mehrbenutzersystem. FreeBSD kennt drei verschiedene Terminals: Dumb terminals, PCs, die als Terminals fungieren, X Terminals. Die folgenden Abschnitte beschreiben jeden dieser Terminals. Dumb-Terminals Dumb-Terminals (unintelligente Datenstationen) sind Geräte, die über die serielle Schnittstelle mit einem Rechner verbunden werden. Sie werden unintelligent genannt, weil sie nur Text senden und empfangen und keine Programme laufen lassen können. Alle Programme, wie Texteditoren, Compiler oder Spiele befinden sich auf dem Rechner, der mit dem Terminal verbunden ist. Es gibt viele Dumb-Terminals, die von verschiedenen Herstellern produziert werden, wie zum Beispiel der VT-100 von Digital Equipment Corporation oder der WY-75 von Wyse. So gut wie jeder der verschiedenen Terminals sollte mit FreeBSD zusammenarbeiten. Manche High-End Geräte verfügen sogar über Grafikfähigkeiten, die allerdings nur von spezieller Software genutzt werden kann. Dumb-Terminals sind in Umgebungen beliebt, in denen keine Grafikanwendungen, wie zum Beispiel X-Programme, laufen müssen. PCs, die als Terminal fungieren Jeder PC kann die Funktion eines Dumb-Terminals, der ja nur Text senden und empfangen kann, übernehmen. Dazu brauchen Sie nur das richtige Kabel und eine Terminalemulation, die auf dem PC läuft. Diese Konfiguration ist im privaten Umfeld sehr beliebt. Wenn Ihr Ehepartner zum Beispiel gerade an der FreeBSD-Konsole arbeitet, können Sie einen weniger leistungsstarken PC, der als Terminal mit dem FreeBSD-System verbunden ist, benutzen, um dort gleichzeitig im Textmodus zu arbeiten. Bereits im Basissystem sind mindestens zwei Werkzeuge vorhanden, die Sie zur Arbeit über eine serielle Konsole einsetzen können: &man.cu.1; sowie &man.tip.1;. Um sich von einem &os;-System aus über eine serielle Verbindung mit einem anderen System zu verbinden, geben Sie folgenden Befehl ein: &prompt.root; cu -l serial-port-device serial-port-device ist hier der Name der Gerätedatei, die einer bestimmten seriellen Schnittstelle Ihres Systems zugewiesen ist. Diese Gerätedateien wurden vor &os; 6.0 als /dev/cuaaN, seither als /dev/cuadN bezeichnet. Der Buchstabe N muss dabei durch die Nummer des seriellen Ports Ihres Systems ersetzt werden. Beachten Sie, dass die Numerierung dieses Daten (im Gegensatz etwa zu &ms-dos;-kompatiblen Systemen) unter &os; mit Null und nicht mit Eins beginnt. Die Schnittstelle COM1 entspricht daher in der Regel /dev/cuad0 unter &os;. In der Ports-Sammlung finden sich weitere Programme (beispielsweise comms/minicom), mit denen Sie eine Verbindung über eine serielle Schnittstelle herstellen können. X-Terminals X-Terminals sind die ausgereiftesten der verfügbaren Terminals. Sie werden nicht mit der seriellen Schnittstelle sondern mit einem Netzwerk, wie dem Ethernet, verbunden. Diese Terminals sind auch nicht auf den Textmodus beschränkt, sondern können jede X-Anwendung darstellen. X-Terminals sind hier nur der Vollständigkeit halber aufgezählt. Die Einrichtung von X-Terminals wird in diesem Abschnitt nicht beschrieben. Konfiguration Im Folgenden wird beschrieben, wie Sie Ihr FreeBSD-System konfigurieren müssen, um sich an einem Terminal anzumelden. Dabei wird vorausgesetzt, dass der Kernel bereits die serielle Schnittstelle, die mit dem Terminal verbunden ist, unterstützt. Weiterhin sollte der Terminal schon angeschlossen sein. Aus wissen Sie, dass init für das Initialisieren des Systems und den Start von Prozessen zum Zeitpunkt des Systemstarts verantwortlich ist. Unter anderem liest init /etc/ttys ein und startet für jeden verfügbaren Terminal einen getty Prozess. getty wiederum fragt beim Anmelden den Benutzernamen ab und startet login. Um Terminals auf Ihrem FreeBSD-System einzurichten, führen Sie folgenden Schritte als root durch: Wenn er noch nicht da ist, fügen Sie einen Eintrag in /etc/ttys für die serielle Schnittstelle aus /dev ein. Geben Sie /usr/libexec/getty als auszuführendes Programm an. Als Parameter für getty geben Sie den passenden Verbindungstyp aus /etc/gettytab an. Geben Sie den Terminaltyp an. Aktivieren Sie den Anschluss. Geben Sie die Sicherheit des Anschlusses an. Veranlassen Sie init /etc/ttys erneut zu lesen. Optional können Sie in /etc/gettytab auch einen auf Ihre Zwecke angepassten Terminaltyp erstellen. Die genaue Vorgehensweise wird in diesem Abschnitt nicht erklärt, aber die Manualpages von &man.gettytab.5; und &man.getty.8; enthalten dazu weitere Informationen. Hinzufügen eines Eintrags in <filename>/etc/ttys</filename> In /etc/ttys werden alle Terminals aufgeführt, an denen Sie sich auf dem FreeBSD-System anmelden können. Hier findet sich zum Beispiel ein Eintrag für die erste virtuelle Konsole /dev/ttyv0, der es Ihnen ermöglicht, sich dort anzumelden. Die Datei enthält des Weiteren Einträge für andere virtuelle Konsolen, serielle Schnittstellen und Pseudoterminals. Wenn Sie einen Terminal konfigurieren wollen, fügen sie einen Eintrag für den Namen des Gerätes aus /dev ohne das Präfix /dev hinzu. Zum Beispiel wird /dev/ttyv0 als ttyv0 aufgeführt. In der Voreinstellung enthält /etc/ttys Einträge für die ersten vier seriellen Schnittstellen. Wenn Sie an eine von diesen einen Terminal anschließen, brauchen Sie keinen weiteren Eintrag hinzuzufügen. Einträge in <filename>/etc/ttys</filename> hinzufügen Angenommen, wir wollen an ein System zwei Terminals anschließen: Einen Wyse-50 und einen alten 286 IBM PC, der mit Procomm einen VT-100 Terminal emuliert. Den Wyse-Terminal verbinden wir mit der zweiten seriellen Schnittstelle und den 286 mit der sechsten seriellen Schnittstelle (einem Anschluss auf einer Multiportkarte). Die entsprechenden Einträge in /etc/ttys würden dann wie folgt aussehen: ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure Das erste Feld gibt normalerweise den Namen der Gerätedatei aus /dev an. Im zweiten Feld wird das auszuführende Kommando, normal ist das &man.getty.8;, angegeben. getty initialisiert und öffnet die Verbindung, setzt die Geschwindigkeit und fragt den Benutzernamen ab. Danach führt es &man.login.1; aus. getty akzeptiert einen optionalen Parameter auf der Kommandozeile, den Verbindungstyp, der die Eigenschaften der Verbindung, wie die Geschwindigkeit und Parität, festlegt. Die Typen und die damit verbundenen Eigenschaften liest getty aus /etc/gettytab. /etc/gettytab enthält viele Einträge sowohl für neue wie auch alte Terminalverbindungen. Die meisten Einträge, die mit std beginnen, sollten mit einem festverdrahteten Terminal funktionieren. Für jede Geschwindigkeit zwischen 110 bps und 115200 bps gibt es einen std Eintrag. Natürlich können Sie auch eigene Einträge erstellen, Informationen dazu finden Sie in &man.gettytab.5;. Wenn Sie den Verbindungstyp in /etc/ttys eintragen, stellen Sie bitte sicher, dass die Kommunikationseinstellungen auch mit denen des Terminals übereinstimmen. In unserem Beispiel verwendet der Wyse-50 keine Parität und 38400 bps, der 286 PC benutzt ebenfalls keine Parität und arbeitet mit 19200 bps. Das dritte Feld gibt den Terminaltyp an, der normalerweise mit diesem Anschluss verbunden ist. Für Einwählverbindungen wird oft unknown oder dialup benutzt, da sich die Benutzer praktisch mit beliebigen Terminals oder Emulatoren anmelden können. Bei festverdrahteten Terminals ändert sich der Typ nicht, so dass Sie in diesem Feld einen richtigen Typ aus der &man.termcap.5; Datenbank angeben können. In unserem Beispiel benutzen wir für den Wyse-50 den entsprechenden Typ aus &man.termcap.5;, der 286 PC wird als VT-100, den er ja emuliert, angegeben. Das vierte Feld gibt an, ob der Anschluss aktiviert werden soll. Wenn Sie hier on angeben, startet init das Programm, das im zweiten Feld angegeben wurde (normal getty). Wenn Sie off angeben, wird das Kommando aus dem zweiten Feld nicht ausgeführt und folglich können Sie sich dann an dem betreffenden Terminal nicht anmelden. Im letzten Feld geben Sie die Sicherheit des Anschlusses an. Wenn Sie hier secure angeben, darf sich root (oder jeder Account mit der UID 0) über diese Verbindung anmelden. Wenn Sie insecure angeben, dürfen sich nur unprivilegierte Benutzer anmelden. Diese können später mit &man.su.1; oder einem ähnlichen Mechanismus zu root wechseln. Es wird dringend empfohlen, insecure nur für Terminals hinter verschlossenen Türen zu verwenden, da Sie mit su leicht zum Superuser werden können. <command>init</command> zwingen, <filename>/etc/ttys</filename> erneut zu lesen Nachdem Sie die nötigen Änderungen in /etc/ttys vorgenommen haben, schicken Sie init ein SIGHUP-Signal (hangup), um es zu veranlassen, seine Konfigurationsdatei neu zu lesen: &prompt.root; kill -HUP 1 Da init immer der erste Prozess auf einem System ist, besitzt es immer die PID 1. Wenn alles richtig eingerichtet ist, alle Kabel angeschlossen und die Terminals eingeschaltet sind, sollte für jeden Terminal ein getty Prozess laufen und auf jedem Terminal sollten Sie eine Anmeldeaufforderung sehen. Fehlersuche Selbst wenn Sie den Anweisungen akribisch gefolgt sind, kann es immer noch zu Fehlern beim Einrichten eines Terminals kommen. Die folgende Aufzählung von Symptomen beschreibt mögliche Lösungen: Es erscheint kein Anmeldeprompt Stellen Sie sicher, dass der Terminal verbunden und eingeschaltet ist. Wenn ein PC als Terminal fungiert, überprüfen Sie, dass die Terminalemulation auf den richtigen Schnittstellen läuft. Stellen Sie sicher, dass Sie das richtige Kabel verwenden und dass das Kabel fest mit dem Terminal und dem FreeBSD-Rechner verbunden ist. Stellen Sie sicher, dass die Einstellungen für die Geschwindigkeit (bps) und Parität auf dem FreeBSD System und dem Terminal gleich sind. Wenn Ihr Terminal einen Bildschirm besitzt, überprüfen Sie die richtige Einstellung von Helligkeit und Kontrast. Wenn Ihr Terminal druckt, stellen Sie die ausreichende Versorgung mit Papier und Tinte sicher. Überprüfen Sie mit ps, dass der getty Prozess für den Terminal läuft: &prompt.root; ps -axww|grep getty Für jeden Terminal sollten Sie einen Eintrag sehen. Aus dem folgenden Beispiel erkennen Sie, dass getty auf der zweiten seriellen Schnittstelle läuft und den Verbindungstyp std.38400 aus /etc/gettytab benutzt: 22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1 Wenn getty nicht läuft, überprüfen Sie, ob der Anschluss in /etc/ttys aktiviert ist. Haben Sie kill -HUP 1 abgesetzt, nachdem Sie /etc/ttys geändert hatten? Wenn getty läuft, aber der Terminal immer noch kein Anmeldeprompt ausgibt, oder Sie am Anmeldeprompt nichts eingeben können, kann es sein, dass Ihr Terminal oder Kabel keinen Hardware-Handshake unterstützt. Ändern Sie dann den Eintrag std.38400 in /etc/ttys zu 3wire.38400. Nachdem Sie /etc/ttys geändert haben, setzen Sie das Kommando kill -HUP 1 ab. Der Eintrag 3wire besitzt ähnliche Eigenschaften wie der Eintrag std, ignoriert aber den Hardware-Handshake. Wenn Sie den Eintrag 3wire verwenden, müssen Sie vielleicht die Geschwindigkeit verkleinern oder die Software-Flusssteuerung aktivieren, um Pufferüberläufe zu vermeiden. Es erscheinen nur unverständliche Zeichen Stellen Sie sicher, dass die Einstellungen für die Geschwindigkeit (bps) und Parität auf dem FreeBSD System und dem Terminal gleich sind. Kontrollieren Sie den getty Prozess und stellen Sie sicher, dass der richtige Verbindungstyp aus /etc/gettytab benutzt wird. Wenn das nicht der Fall ist, editieren Sie /etc/ttys und setzen das Kommando kill-HUP 1 ab. Zeichen erscheinen doppelt und eingegebene Passwörter erscheinen im Klartext Stellen Sie den Terminal oder die Terminalemulation von half duplex oder local echo auf full duplex. um. Guy Helmer Beigetragen von Sean Kelly Mit Anmerkungen von Einwählverbindungen Einwählverbindungen Das Einrichten von Einwählverbindungen ähnelt dem Anschließen von Terminals, nur dass Sie anstelle eines Terminals ein Modem verwenden. Externe und interne Modems Externe Modems sind für Einwählverbindungen besser geeignet, da sie die Konfiguration in nicht flüchtigem RAM speichern können. Zudem verfügen Sie über Leuchtanzeigen, die den Status wichtiger RS-232 Signale anzeigen und unter Umständen Besucher beeindrucken können. Interne Modems verfügen normalerweise nicht über nicht flüchtiges RAM und lassen sich meist nur über DIP-Schalter konfigurieren. Selbst wenn ein internes Modem Leuchtanzeigen besitzt, sind diese meist schwer einzusehen, wenn das Modem eingebaut ist. Modems und Kabel Modem Mit einem externen Modem müssen Sie das richtige Kabel benutzen: Ein Standard RS-232C Kabel, bei dem die folgenden Signale miteinander verbunden sind, sollte ausreichen: Signalnamen Abkürzung Bedeutung RD Received Data TD Transmitted Data DTR Data Terminal Ready DSR Data Set Ready DCD Data Carrier Detect (dadurch erkennt RS-232 das Signal Received Line) SG Signal Ground RTS Request to Send CTS Clear to Send
Ab Geschwindigkeiten von 2400 bps benötigt FreeBSD die Signale RTS und CTS für die Flusssteuerung. Das Signal CD zeigt an, ob ein Träger vorliegt, das heißt ob die Verbindung aufgebaut ist oder beendet wurde. DTR zeigt an, dass das Gerät betriebsbereit ist. Es gibt einige Kabel, bei denen nicht alle nötigen Signale verbunden sind. Wenn Sie Probleme der Art haben, dass zum Beispiel die Sitzung nicht beendet wird, obwohl die Verbindung beendet wurde, kann das an einem solchen Kabel liegen. Wie andere &unix; Betriebssysteme auch, benutzt FreeBSD Hardwaresignale, um festzustellen, ob ein Anruf beantwortet wurde, eine Verbindung beendet wurde, oder um die Verbindung zu schließen und das Modem zurückzusetzen. FreeBSD vermeidet es, dem Modem Kommandos zu senden, oder den Statusreport des Modems abzufragen. Falls Sie ein Benutzer von PC-basierenden Bulletin Board Systemen sind, mag Sie das verwundern.
Schnittstellenbausteine FreeBSD unterstützt EIA RS-232C (CCITT V.24) serielle Schnittstellen, die auf den NS8250, NS16450, NS16550 oder NS16550A Bausteinen basieren. Die Bausteine der Serie 16550 verfügen über einen 16 Byte großen Puffer, der als FIFO angelegt ist. Wegen Fehler in der FIFO-Logik kann der Puffer in einem 16550 Baustein allerdings nicht genutzt werden, das heißt der Baustein muss als 16450 betrieben werden. Bei allen Bausteinen ohne Puffer und dem 16550 Baustein muss jedes Byte einzeln von dem Betriebssystem verarbeitet werden, was Fehler bei hohen Geschwindigkeiten oder großer Systemlast erzeugt. Es sollten daher nach Möglichkeit serielle Schnittstellen, die auf 16550A Bausteinen basieren, eingesetzt werden. Überblick getty Wie bei Terminals auch, startet init für jede serielle Schnittstelle, die eine Einwählverbindung zur Verfügung stellt, einen getty Prozess. Wenn das Modem beispielsweise an /dev/ttyd0 angeschlossen ist, sollte in der Ausgabe von ps ax eine Zeile wie die folgende erscheinen: 4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0 Wenn sich ein Benutzer einwählt und die Verbindung aufgebaut ist, zeigt das Modem dies durch das CD Signal (Carrier Detect) an. Der Kernel merkt, dass ein Signal anliegt und vollendet das Öffnen der Schnittstelle durch getty. Dann sendet getty das Anmeldeprompt mit der ersten für die Verbindung vereinbarten Geschwindigkeit und wartet auf eine Antwort. Wenn die Antwort unverständlich ist, weil zum Beispiel die Geschwindigkeit des Modems von gettys Geschwindigkeit abweicht, versucht getty die Geschwindigkeit solange anzupassen, bis es eine verständliche Antwort erhält. /usr/bin/login getty führt, nachdem der Benutzer seinen Namen eingegeben hat, /usr/bin/login aus, welches das Passwort abfragt und danach die Shell des Benutzers startet. Konfigurationsdateien Drei Konfigurationsdateien in /etc steuern, ob eine Einwahl in Ihr FreeBSD-System möglich ist. Die erste, /etc/gettytab, konfiguriert den /usr/libexec/getty Dæmon. In /etc/ttys wird festgelegt, auf welchen Schnittstellen /sbin/init einen getty Prozess startet. Schließlich haben Sie in /etc/rc.d/serial die Möglichkeit, Schnittstellen zu initialisieren. Es gibt zwei Ansichten darüber, wie Modems für Einwählverbindungen unter &unix; zu konfigurieren sind. Zum einen kann die Geschwindigkeit zwischen dem Modem und dem Computer fest eingestellt werden. Sie ist damit unabhängig von der Geschwindigkeit, mit der sich der entfernte Benutzer einwählt. Dies hat den Vorteil, dass der entfernte Benutzer das Anmeldeprompt sofort bekommt. Der Nachteil bei diesem Verfahren ist, dass das System die tatsächliche Geschwindigkeit der Verbindung nicht kennt. Damit können bildschirmorientierte Programme wie Emacs ihren Bildschirmaufbau nicht an langsame Verbindungen anpassen, um die Antwortzeiten zu verbessern. Die andere Möglichkeit besteht darin, die Geschwindigkeit der RS-232 Schnittstelle des lokalen Modems an die Geschwindigkeit des entfernten Modems anzupassen. Bei einer V.32bis (14400 bps) Verbindung kann das lokale Modem die RS-232 Schnittstelle mit 19200 bps betreiben, während bei einer Verbindung mit 2400 bps die RS-232 Schnittstelle mit 2400 bps betrieben wird. Da getty die Verbindungsgeschwindigkeit des Modems nicht kennt, startet es den Anmeldevorgang mit der Ausgabe von login: und wartet auf eine Antwort. Wenn der Benutzer der Gegenstelle nun nur unverständliche Zeichen erhält, muss er solange Enter drücken, bis das Anmeldeprompt erscheint. Solange die Geschwindigkeiten nicht übereinstimmen, sind die Antworten der Gegenstelle für getty ebenfalls unverständlich. In diesem Fall wechselt getty zur nächsten Geschwindigkeit und gibt wieder login: aus. In aller Regel erhält der Benutzer der Gegenstelle nach ein bis zwei Tastendrücken eine erkennbare Anmeldeaufforderung. Diese Anmeldeprozedur sieht nicht so sauber wie die Methode mit einer festen Geschwindigkeit aus, bietet dem Benutzer einer langsamen Verbindung allerdings den Vorteil, dass sich bildschirmorientierte Programme an die Geschwindigkeit anpassen können. Im Folgenden wird die Konfiguration für beide Methoden besprochen, doch die Methode der angepassten Geschwindigkeit wird bei der Diskussion bevorzugt. <filename>/etc/gettytab</filename> /etc/gettytab Mit /etc/gettytab wird &man.getty.8; im Stil von &man.termcap.5; konfiguriert. Das Format dieser Datei und die Bedeutung der Einträge wird in &man.gettytab.5; beschrieben. Konfiguration für feste Geschwindigkeit Wenn Sie die Modemgeschwindigkeit vorgeben, werden Sie in /etc/gettytab nichts ändern müssen. Konfiguration für angepasste Geschwindigkeit In /etc/gettytab müssen Einträge für die Geschwindigkeiten, die Sie benutzen wollen, sein. Wenn Sie ein 2400 bps Modem besitzen, können Sie wahrscheinlich den schon vorhandenen D2400 Eintrag benutzen. # # Fast dialup terminals, 2400/1200/300 rotary (can start either way) # D2400|d2400|Fast-Dial-2400:\ :nx=D1200:tc=2400-baud: 3|D1200|Fast-Dial-1200:\ :nx=D300:tc=1200-baud: 5|D300|Fast-Dial-300:\ :nx=D2400:tc=300-baud: Wenn Sie ein Modem mit einer höheren Geschwindigkeit besitzen, müssen Sie wahrscheinlich in /etc/gettytab weitere Einträge erstellen. Hier ist ein Beispiel, das Sie mit einem 14400 bps Modem benutzen können: # # Additions for a V.32bis Modem # um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300: un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200: uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400: up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600: uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200: Die damit erzeugten Verbindungen verwenden 8 Bit und keine Parität. Im obigen Beispiel startet die Geschwindigkeit bei 19200 bps (eine V.32bis Verbindung) und geht dann über 9600 bps (V.32), 400 bps, 1200 bps und 300 bps wieder zurück zu 19200 bps. Das Schlüsselwort nx= (next table) sorgt für das zyklische Durchlaufen der Geschwindigkeiten. Jede Zeile zieht zudem noch mit tc= (table continuation) die Vorgabewerte für die jeweilige Geschwindigkeit an. Wenn Sie ein 28800 bps Modem besitzen und/oder Kompression mit einem 14400 bps Modem benutzen wollen, brauchen Sie höhere Geschwindigkeiten als 19200 bps. Das folgende Beispiel startet mit 57600 bps: # # Additions for a V.32bis or V.34 Modem # Starting at 57600 bps # vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300: vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200: vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400: vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600: vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600: Wenn Sie eine langsame CPU oder ein stark ausgelastetes System besitzen und sich kein 16550A in Ihrem System befindet, erhalten Sie bei 57600 bps vielleicht sio Fehlermeldungen der Form silo overflow. <filename>/etc/ttys</filename> /etc/ttys /etc/ttys wurde bereits in besprochen. Die Konfiguration für Modems ist ähnlich, allerdings braucht getty ein anderes Argument und es muss ein anderer Terminaltyp angegeben werden. Der Eintrag für beide Methoden (feste und angepasste Geschwindigkeit) hat die folgende Form: ttyd0 "/usr/libexec/getty xxx" dialup on Das erste Feld der obigen Zeile gibt die Gerätedatei für diesen Eintrag an – ttyd0 bedeutet, dass getty mit /dev/ttyd0 arbeitet. Das zweite Feld "/usr/libexec/getty xxx" gibt das Kommando an, das init für dieses Gerät startet (xxx wird durch einen passenden Eintrag aus /etc/gettytab ersetzt). Die Vorgabe für den Terminaltyp, hier dialup, wird im dritten Feld angegeben. Das vierte Feld, on, zeigt init an, dass die Schnittstelle aktiviert ist. Im fünften Feld könnte noch secure angegeben werden, um Anmeldungen von root zu erlauben, doch sollte das wirklich nur für physikalisch sichere Terminals, wie die Systemkonsole, aktiviert werden. Die Vorgabe für den Terminaltyp, dialup im obigen Beispiel, hängt von lokalen Gegebenheiten ab. Traditionell wird dialup für Einwählverbindungen verwendet, so dass die Benutzer in ihren Anmeldeskripten den Terminaltyp auf ihren Terminal abstimmen können, wenn der Typ auf dialup gesetzt ist. Wenn Sie aber beispielsweise nur VT102 Terminals oder Emulatoren einsetzen, können Sie den Terminaltyp hier auch fest auf vt102 setzen. Nachdem Sie /etc/ttys geändert haben, müssen Sie init ein HUP Signal schicken, damit es die Datei wieder einliest. Sie können dazu das folgende Kommando verwenden: &prompt.root; kill -HUP 1 Wenn Sie das System zum ersten Mal konfigurieren, sollten Sie dieses Kommando erst ausführen, wenn Sie Ihr Modem richtig konfiguriert und angeschlossen haben. Konfiguration für feste Geschwindigkeit Das Argument von getty muss in diesem Fall eine feste Geschwindigkeit vorgeben. Der Eintrag für ein Modem, das fest auf 19200 bps eingestellt ist, könnte wie folgt aussehen: ttyd0 "/usr/libexec/getty std.19200" dialup on Wenn Ihr Modem auf eine andere Geschwindigkeit eingestellt ist, setzen Sie anstelle von std.19200 einen passenden Eintrag der Form std.speed ein. Stellen Sie sicher, dass dies auch ein gültiger Verbindungstyp aus /etc/gettytab ist. Konfiguration für angepasste Geschwindigkeit Das Argument von getty muss hier auf einen der Einträge aus /etc/gettytab zeigen, der zu einer Kette von Einträgen gehört, die die zu probierenden Geschwindigkeiten beschreiben. Wenn Sie dem obigen Beispiel gefolgt sind und zusätzliche Einträge in /etc/gettytab erzeugt haben, können Sie die folgende Zeile verwenden: ttyd0 "/usr/libexec/getty V19200" dialup on <filename>/etc/rc.d/serial</filename> rc-Dateien rc.serial Modems, die höhere Geschwindigkeiten unterstützen, zum Beispiel V.32, V.32bis und V.34 Modems, benutzen Hardware-Flusssteuerung (RTS/CTS). Für die entsprechenden Schnittstellen können Sie die Flusssteuerung mit stty in /etc/rc.d/serial einstellen. Um beispielsweise die Hardware-Flusssteuerung für die Geräte zur Ein- und Auswahl der zweiten seriellen Schnittstelle (COM2) zu aktivieren, benutzen Sie die Dateien zur Initialisierung der entsprechenden Geräte und fügen die folgenden Zeilen in /etc/rc.d/serial hinzu: # Serial port initial configuration stty -f /dev/ttyd1.init crtscts stty -f /dev/cuad1.init crtscts Modemkonfiguration Wenn Sie ein Modem besitzen, das seine Konfiguration in nicht flüchtigem RAM speichert, werden Sie ein Terminalprogramm wie Telix unter &ms-dos; oder tip unter FreeBSD benötigen, um die Parameter einzustellen. Verbinden Sie sich mit derselben Geschwindigkeit, die getty zuerst benutzen würde, mit dem Modem und treffen Sie folgende Einstellungen: DCD ist eingeschaltet, wenn das Trägersignal des entfernten Modems erkannt wird. Im Betrieb liegt DTR an. Bei einem Verlust von DTR legt das Modem auf und setzt sich zurück. CTS Flusssteuerung ist für ausgehende Daten aktiviert. XON/XOFF Flusssteuerung ist ausgeschaltet. RTS Flusssteuerung ist für eingehende Daten aktiviert. Keine Rückmeldungen ausgeben. Die Echo-Funktion ist deaktiviert. In der Dokumentation Ihres Modems finden Sie die nötigen Befehle, die Sie absetzen müssen, und/oder nötigen DIP-Schalterstellungen, um die obigen Einstellungen zu treffen. Für ein externes 14400 &usrobotics; &sportster; gelten zum Beispiel die folgenden Befehle: ATZ AT&C1&D2&H1&I0&R2&W Bei dieser Gelegenheit können Sie auch gleich andere Einstellungen, zum Beispiel ob Sie V42.bis und/oder MNP5 Kompression benutzen wollen, an Ihrem Modem vornehmen. Bei einem externen 14400 &usrobotics; &sportster; müssen Sie auch noch einige DIP-Schalter einstellen. Die folgenden Einstellungen können Sie vielleicht als Beispiel für andere Modems verwenden: Schalter 1: OBEN – DTR normal Schalter 2: N/A (Rückmeldungen als Text/numerische Rückmeldungen) Schalter 3: OBEN – Keine Rückmeldungen ausgeben Schalter 4: UNTEN – Echo-Funktion aus Schalter 5: OBEN – Rufannahme aktiviert Schalter 6: OBEN – Carrier Detect normal Schalter 7: OBEN – Einstellungen aus dem NVRAM laden Schalter 8: N/A (Smart Mode/Dumb Mode) Für Einwählverbindungen sollten die Rückmeldungen deaktiviert sein, da sonst getty dem Modem das Anmeldeprompt login: schickt und das Modem im Kommandomodus das Prompt wieder ausgibt (Echo-Funktion) oder eine Rückmeldung gibt. Das führt dann zu einer länglichen und fruchtlosen Kommunikation zwischen dem Modem und getty. Konfiguration für feste Geschwindigkeit Die Geschwindigkeit zwischen Modem und Computer muss auf einen festen Wert eingestellt werden. Mit einem externen 14400 &usrobotics; &sportster; Modem setzen die folgenden Kommandos die Geschwindigkeit auf den Wert der Datenendeinrichtung fest: ATZ AT&B1&W Konfiguration für angepasste Geschwindigkeit In diesem Fall muss die Geschwindigkeit der seriellen Schnittstelle des Modems der eingehenden Geschwindigkeit angepasst werden. Für ein externes 14400 &usrobotics; &sportster; Modem erlauben die folgenden Befehle eine Anpassung der Geschwindigkeit der seriellen Schnittstelle für Verbindungen, die keine Fehlerkorrektur verwenden: ATZ AT&B2&W Verbindungen mit Fehlerkorrektur (V.42, MNP) verwenden die Geschwindigkeit der Datenendeinrichtung. Überprüfen der Modemkonfiguration Die meisten Modems verfügen über Kommandos, die die Konfiguration des Modems in lesbarer Form ausgeben. Auf einem externen 14400 &usrobotics; &sportster; zeigt ATI5 die Einstellungen im nicht flüchtigen RAM an. Um die wirklichen Einstellungen unter Berücksichtigung der DIP-Schalter zu sehen, benutzen Sie ATZ gefolgt von ATI4. Wenn Sie ein anderes Modem benutzen, schauen Sie bitte in der Dokumentation Ihres Modems nach, wie Sie die Konfiguration des Modems überprüfen können. Fehlersuche Bei Problemen können Sie die Einwählverbindung anhand der folgenden Punkte überprüfen: Überprüfen des FreeBSD-Systems Schließen Sie das Modem an das FreeBSD-System an und booten Sie das System. Wenn Ihr Modem über Statusindikatoren verfügt, überprüfen Sie, ob der DTR Indikator leuchtet, wenn das Anmeldeprompt erscheint. Dies zeigt an, dass das FreeBSD-System einen getty Prozess auf der entsprechenden Schnittstelle gestartet hat und das Modem auf einkommende Verbindungen wartet. Wenn der DTR-Indikator nicht leuchtet, melden Sie sich an dem FreeBSD-System an und überprüfen mit ps ax, ob FreeBSD einen getty-Prozess auf der entsprechenden Schnittstelle gestartet hat. Unter den angezeigten Prozessen sollten Sie ähnliche wie die folgenden finden: 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1 Wenn das Modem noch keinen Anruf entgegengenommen hat und Sie stattdessen die folgende Zeile sehen 114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0 bedeutet dies, dass getty die Schnittstelle schon geöffnet hat und zeigt Kabelprobleme oder eine falsche Modemkonfiguration an, da getty die Schnittstelle erst dann öffnen kann, wenn das CD Signal (Carrier Detect) vom Modem anliegt. Wenn Sie keine getty-Prozesse auf den gewünschten ttydN Ports finden, untersuchen Sie bitte /etc/ttys auf Fehler. Suchen Sie auch in /var/log/messages nach Meldungen von init oder getty. Wenn Sie dort Meldungen finden, sollten Sie noch einmal die beiden Konfigurationsdateien /etc/ttys und /etc/gettytab nach Fehlern durchsehen. Überprüfen Sie auch, ob die Gerätedateien /dev/ttydN vorhanden sind. Einwählversuch Versuchen Sie, sich in Ihr System einzuwählen. Auf dem entfernten System stellen Sie bitte die folgenden Kommunikationsparameter ein: 8 Bit, keine Parität, ein Stop-Bit. Wenn Sie kein Anmeldeprompt erhalten oder nur unleserliche Zeichen sehen, drücken Sie mehrmals, in Abständen von ungefähr einer Sekunde, Enter. Wenn Sie immer noch nicht die login: Meldung sehen, schicken Sie ein BREAK Kommando. Wenn Sie zur Einwahl ein Highspeed-Modem benutzen, verwenden Sie eine feste Geschwindigkeit auf der seriellen Schnittstelle des Modems (AT&B1 für ein &usrobotics; &sportster;). Wenn Sie jetzt immer noch kein Anmeldeprompt erhalten, überprüfen Sie nochmals /etc/gettytab und stellen sicher, dass der Verbindungstyp in /etc/ttys zu einem gültigen Eintrag in /etc/gettytab gehört, jeder der nx= Einträge in gettytab gültig ist und jeder tc= Eintrag auf einen gültigen Eintrag in gettytab verweist. Wenn das Modem an Ihrem FreeBSD-System auf einen eingehenden Anruf nicht antwortet, stellen Sie sicher, dass das Modem so konfiguriert ist, dass es einen Anruf beantwortet, wenn DTR anliegt. Wenn Ihr Modem Statusindikatoren besitzt, können Sie das Anliegen von DTR anhand der Leuchten überprüfen. Wenn Sie alles schon mehrfach überprüft haben und es immer noch noch nicht funktioniert, machen Sie erst einmal eine Pause, bevor Sie weitermachen. Wenn es immer noch nicht funktioniert, können Sie eine Mail an die Mailingliste &a.de.questions; schicken, in der Sie Ihr Modem und Ihr Problem beschreiben und Ihnen sollte geholfen werden.
Verbindungen nach Außen Die folgenden Ratschläge beschreiben, wie Sie mit einem Modem eine Verbindung zu einem anderen Computer herstellen. Dies können Sie nutzen, um sich auf einem entfernten Computer anzumelden, oder um eine Verbindung zu einem BBS (Bulletin Board System) herzustellen. Weiterhin ist diese Art von Verbindungen nützlich, wenn mal Ihr PPP nicht funktioniert. Wenn Sie zum Beispiel eine Datei mit FTP übertragen wollen und das über PPP gerade nicht möglich ist, melden Sie sich auf dem entfernten Rechner an und führen dort die FTP-Sitzung durch. Die Dateien können Sie danach mit zmodem auf den lokalen Rechner übertragen. Mein Hayes Modem wird nicht unterstützt – was kann ich tun? Eigentlich ist die Onlinehilfe für tip nicht mehr aktuell. Es gibt einen eingebauten, allgemeinen Hayes Wähler. Verwenden Sie einfach at=hayes in /etc/remote. Der Hayes-Treiber ist nicht schlau genug, um ein paar der erweiterten Funktionen von neueren Modems zu erkennen – Nachrichten wie BUSY, NO DIALTONE oder CONNECT 115200 verwirren ihn nur. Sie sollten diese Nachrichten mit Hilfe von ATX0&W abschalten, wenn Sie tip benutzen. Der Anwahl-Timeout von tip beträgt 60 Sekunden. Ihr Modem sollte weniger verwenden, oder tip denkt, dass ein Kommunikationsfehler vorliegt. Versuchen Sie es mit ATS7=45&W. Tatsächlich unterstützt die ausgelieferte Version von tip Hayes Modems noch nicht vollständig. Die Lösung ist, tipconf.h in /usr/src/usr.bin/tip/tip zu editieren. Dafür benötigen Sie natürlich die Quellcode Distribution. Ändern Sie die Zeile #define HAYES 0 zu #define HAYES 1. Dann führen Sie make und make install aus. Es sollte jetzt funktionieren. Wie soll ich die AT-Befehle eingeben? /etc/remote Erstellen Sie einen so genannten direct Eintrag in /etc/remote. Wenn Ihr Modem zum Beispiel an der ersten seriellen Schnittstelle, /dev/cuad0, angeschlossen ist, dann fügen Sie die folgende Zeile hinzu: cuad0:dv=/dev/cuad0:br#19200:pa=none Verwenden Sie die höchste bps-Rate, die Ihr Modem in der br Fähigkeit unterstützt. Geben Sie dann tip cuad0 ein und Sie sind mit Ihrem Modem verbunden. Oder benutzen Sie cu als root mit dem folgenden Befehl: &prompt.root; cu -lline -sspeed line steht für die serielle Schnittstelle (/dev/cuad0) und speed für die Geschwindigkeit (57600). Wenn Sie mit dem Eingeben der AT Befehle fertig sind, beenden Sie mit ~.. Wieso funktioniert das <literal>@</literal> Zeichen für die pn Fähigkeit nicht? Das @ Zeichen in der Telefonnummerfähigkeit sagt tip, dass es in der Datei /etc/phones nach einer Nummer suchen soll. Aber @ ist auch ein spezielles Zeichen in den Dateien, in denen Fähigkeiten beschrieben werden, wie /etc/remote. Schreiben Sie es mit einem Backslash: pn=\@ Wie kann ich von der Kommandozeile eine Telefonnummer wählen? Stellen Sie einen allgemeinen Eintrag in /etc/remote. Zum Beispiel: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuad0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuad0:br#57600:at=hayes:pa=none:du: Mit dem folgenden Befehl können Sie dann wählen: &prompt.root; tip -115200 5551234 Sollten Sie cu gegenüber tip bevorzugen, verwenden Sie einen allgemeinen cu-Eintrag: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuad1:br#57600:at=hayes:pa=none:du: und benutzen zum Wählen das Kommando: &prompt.root; cu 5551234 -s 115200 Muss ich dabei jedes Mal die bps-Rate angeben? Schreiben Sie einen tip1200- oder einen cu1200-Eintrag, aber geben Sie auch die bps-Rate an, die Ihr Modem wirklich unterstützt. Leider denkt &man.tip.1;, dass 1200 bps ein guter Standardwert ist und deswegen sucht es nach einem tip1200-Eintrag. Natürlich müssen Sie nicht 1200 bps benutzen. Wie kann ich möglichst komfortabel über einen Terminal-Server auf verschiedene Rechner zugreifen? Sie müssen nicht warten bis Sie verbunden sind, und jedes Mal CONNECT Rechner eingeben, benutzen Sie tips cm-Fähigkeit. Sie können diese Einträge in /etc/remote verwenden: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuad2:br#38400:at=hayes:du:pa=none:pn=5551234: Mit den Befehlen tip pain oder tip muffin können Sie eine Verbindungen zu den Rechnern pain oder muffin herstellen; mit tip deep13 verbinden Sie sich mit dem Terminalserver. Kann <command>tip</command> mehr als eine Verbindung für jede Seite ausprobieren? Das ist oft ein Problem, wenn eine Universität mehrere Telefonleitungen hat und viele tausend Studenten diese benutzen wollen. Erstellen Sie einen Eintrag für Ihre Universität in /etc/remote und benutzen Sie @ für die pn-Fähigkeit: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuad3:br#9600:at=courier:du:pa=none: Listen Sie die Telefonnummern der Universität in /etc/phones auf: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 tip probiert jede der Nummern in der aufgelisteten Reihenfolge und gibt dann auf. Möchten Sie, dass tip beim Versuchen eine Verbindung herzustellen nicht aufgibt, lassen Sie es in einer while-Schleife laufen. Warum muss ich zweimal <keycombo action="simul"> <keycap>Ctrl</keycap> <keycap>P</keycap> </keycombo> tippen, um ein <keycombo action="simul"> <keycap>Ctrl</keycap> <keycap>P</keycap> </keycombo> zu senden? Ctrl P ist das voreingestellte Zeichen, mit dem eine Übertragung erzwungen werden kann und wird benutzt, um tip zu sagen, dass das nächste Zeichen direkt gesendet werden soll und nicht als Fluchtzeichen interpretiert werden soll. Mit Hilfe der Fluchtsequenz ~s, mit der man Variablen setzen kann, können Sie jedes andere Zeichen als force-Zeichen definieren. Geben Sie ~sforce=Zeichen gefolgt von Enter ein. Für Zeichen können Sie ein beliebiges einzelnes Zeichen einsetzen. Wenn Sie Zeichen weglassen, ist das force-Zeichen nul, das Sie mit Ctrl2 oder CtrlLeertaste eingeben können. Ein guter Wert für Zeichen ist Shift Ctrl 6 , welches nur auf wenigen Terminal Servern benutzt wird. Sie können das force-Zeichen auch bestimmen, indem Sie in $HOME/.tiprc das Folgende einstellen: force=<single-char> Warum ist auf einmal alles was ich schreibe in GROSSBUCHSTABEN?? Sie müssen Ctrl A , eingegeben haben, das raise-Zeichen von tip, das speziell für Leute mit defekten caps-lock Tasten eingerichtet wurde. Benutzen Sie ~s wie oben und setzen Sie die Variable raisechar auf etwas, das Ihnen angemessen erscheint. Tatsächlich kann die Variable auf das gleiche Zeichen wie das force-Zeichen gesetzt werden, wenn Sie diese Fähigkeiten niemals benutzen wollen. Hier ist ein Muster der .tiprc Datei, perfekt für Emacs Benutzer, die oft Ctrl2 und CtrlA tippen müssen: force=^^ raisechar=^^ Geben Sie für ^^ ShiftCtrl6 ein. Wie kann ich Dateien mit <command>tip</command> übertragen? Wenn Sie mit einem anderen &unix; System kommunizieren, können Sie mit ~p (put) und ~t (take) Dateien senden und empfangen. Diese Befehle lassen cat und echo auf dem entfernten System laufen, um Dateien zu empfangen und zu senden. Die Syntax ist: ~p local-file remote-file ~t remote-file local-file Es gibt keine Fehlerkontrolle, deshalb sollten Sie besser ein anderes Protokoll, wie zmodem, benutzen. Wie kann ich zmodem mit <command>tip</command> laufen lassen? Um Dateien zu empfangen, starten Sie das Programm zum Senden auf dem entfernten Computer. Geben Sie dann ~C rz ein, um die Dateien lokal zu empfangen. Um Dateien zu senden, starten Sie das Programm zum Empfangen auf dem entfernten Computer. Geben Sie dann ~C sz Dateien ein, um Dateien auf das entfernte System zu senden. Kazutaka YOKOTA Beigesteuert von Bill Paul Auf Grundlage eines Dokuments von Einrichten der seriellen Konsole serielle Konsole Einführung FreeBSD kann ein System mit einem Dumb-Terminal (unintelligente Datenstation) an einer seriellen Schnittstelle als Konsole booten. Diese Konfiguration ist besonders nützlich für Systemadministratoren, die FreeBSD auf Systemen ohne Tastatur oder Monitor installieren wollen, und Entwickler, die den Kernel oder Gerätetreiber debuggen. Wie in beschrieben, besitzt FreeBSD drei Bootphasen. Der Code für die ersten beiden Bootphasen befindet sich im Bootsektor am Anfang der FreeBSD-Slice der Bootplatte. Dieser Bootblock lädt den Bootloader (/boot/loader) in Phase drei. Um eine serielle Konsole einzurichten, müssen Sie den Bootblock, den Bootloader und den Kernel konfigurieren. Serielle Konsole einrichten, Kurzfassung Dieser Abschnitt fasst zusammen, wie Sie eine serielle Konsole einrichten. Es wird vorausgesetzt, dass Sie die Voreinstellungen verwenden und wissen, wie serielle Schnittstellen verbunden werden. Verbinden Sie die serielle Konsole mit COM1 sowie dem Kontrollterminal. Um die Startmeldungen der seriellen Konsole zu sehen, geben Sie als root Folgendes ein: &prompt.root; echo 'console="comconsole"' >> /boot/loader.conf Ändern Sie in /etc/ttys den Eintrag für ttyd0 von off auf on. Zusätzlich sollten Sie den Wert dialup auf vt100 ändern. Nur so wird auf der seriellen Konsole eine Eingabeaufforderung mit einer Passwortabfrage aktiviert. Starten Sie nun das System neu, damit die serielle Konsole aktiviert wird. Wenn Sie eine unterschiedliche Konfiguration benötigen, sollten Sie lesen. Konfiguration der Konsole Bereiten Sie ein serielles Kabel vor. Nullmodemkabel Sie benötigen entweder ein Nullmodemkabel oder ein serielles Standard Kabel mit einem Nullmodemkabel-Adapter. In wurden serielle Kabel beschrieben. Trennen Sie die Tastatur vom Computer. Die meisten PC Systeme suchen beim Power On Self Test (POST) nach einer Tastatur und geben eine Fehlermeldung aus, wenn sie keine finden. Einige Maschinen werden sich sogar weigern, ohne Tastatur zu booten. Wenn Ihr Rechner trotz einer Fehlermeldung normal weiterbootet, brauchen Sie weiter nichts zu tun. Beispielsweise geben einige Maschinen mit einem Phoenix BIOS nur Keyboard failed aus und booten dann normal weiter. Wenn Ihr System ohne Tastatur nicht booten will, müssen Sie das BIOS so konfigurieren, das es diesen Fehler ignoriert (wenn das möglich ist). Das Handbuch zu Ihrem Motherboard sollte beschreiben, wie das zu bewerkstelligen ist. Selbst wenn Sie im BIOS Not installed für die Tastatur einstellen, können Sie eine Tastatur angeschlossen haben und diese auch weiterhin benutzen, da sie mit dieser Anweisung das BIOS lediglich anweisen, nach dem Einschalten des Rechners nicht nach einer Tastatur zu suchen und den Rechner ohne entsprechende Fehlermeldung zu starten. Wenn Ihr System über eine &ps2; Maus verfügt, müssen Sie diese wahrscheinlich auch abziehen. Da sich die &ps2; Maus und die Tastatur einige Hardwarekomponenten teilen, kann das dazu führen, dass die Hardwareerkennung fälschlicherweise eine Tastatur findet, wenn eine &ps2; Maus angeschlossen ist. Gateway 2000 Pentium 90 MHz Systemen wird dieses Verhalten nachgesagt. Normalerweise ist das kein Problem, da eine Maus ohne Tastatur sowieso nicht sinnvoll einsetzbar ist. Schließen Sie einen Dumb-Terminal an COM1 (sio0) an. Wenn Sie keinen Dumb-Terminal besitzen, können Sie einen alten PC/XT mit einem Terminalemulator oder die serielle Schnittstelle eines anderen &unix; Rechners benutzen. Sie benötigen auf jeden Fall eine freie erste serielle Schnittstelle (COM1). Zurzeit ist es nicht möglich, in den Bootblöcken eine andere Schnittstelle zu konfigurieren, ohne diese neu zu kompilieren. Wenn Sie COM1 bereits für ein anderes Gerät benutzen, müssen Sie dieses Gerät temporär entfernen und einen neuen Bootblock sowie Kernel installieren, wenn Ihr FreeBSD erst einmal installiert ist. Auf einem Server sollte COM1 ohnehin verfügbar sein. Wenn Sie die Schnittstelle für ein anderes Gerät benutzen und Sie dieses nicht auf COM2 (sio1) legen können, sollten Sie sich nicht an erster Stelle mit dem Aufsetzen einer seriellen Konsole beschäftigen. Stellen Sie sicher, dass Ihre Kernelkonfiguration die richtigen Optionen für COM1 (sio0) enthält. Relevante Optionen sind: 0x10 Aktiviert die Konsolenunterstützung für dieses Gerät. Zurzeit kann nur ein Gerät die Konsolenunterstützung aktiviert haben. Das erste, in der Konfigurationsdatei aufgeführte Gerät, mit dieser Option, verfügt über eine aktivierte Konsolenunterstützung. Beachten Sie, dass diese Option alleine nicht ausreicht, um die serielle Konsole zu aktivieren. Setzen Sie entweder noch die nachfolgend diskutierte Option oder verwenden Sie beim Booten, wie unten beschrieben, den Schalter . 0x20 Das erste Gerät in der Kernelkonfigurationsdatei mit dieser Option wird, unabhängig von dem unten diskutierten Schalter , zur Konsole. Die Option muss zusammen mit verwendet werden. 0x40 Reserviert dieses Gerät und sperrt es für normale Zugriffe. Sie sollten diese Option nicht auf dem Gerät setzen, das Sie als serielle Konsole verwenden wollen. Der Zweck dieser Option ist es, dieses Gerät für das Remote-Debuggen zu reservieren. Das FreeBSD Developers' Handbook enthält dazu weitere Informationen. Beispiel: device sio0 at isa? port IO_COM1 tty flags 0x10 irq 4 Weitere Einzelheiten entnehmen Sie bitte &man.sio.4;. Wenn diese Optionen nicht gesetzt sind, müssen Sie auf einer anderen Konsole beim Booten UserConfig starten oder den Kernel neu kompilieren. Erstellen Sie boot.config im Rootverzeichnis der a-Partition des Bootlaufwerks. Der Code des Bootblocks entnimmt dieser Datei, wie Sie Ihr System booten möchten. Um die serielle Konsole zu aktivieren, müssen Sie hier eine oder mehrere Optionen (alle in derselben Zeile) angeben. Die folgenden Optionen stehen zur Auswahl der Konsole zur Verfügung: Schaltet zwischen der internen und der seriellen Konsole um. Wenn Sie beispielsweise von der internen Konsole (Bildschirm) booten, weist den Bootloader und den Kernel an, die serielle Schnittstelle als Konsole zu nehmen. Wenn die Konsole normal auf der seriellen Schnittstelle liegt, wählen Sie mit den Bildschirm aus. Schaltet zwischen Einzelkonsole und Dual-Konsole um. Die Einzelkonsole ist entweder die interne Konsole (der Bildschirm) oder die serielle Schnittstelle, je nach dem Stand von . Im Dual-Konsolen Betrieb ist die Konsole, unabhängig von , gleichzeitig der Bildschirm und die serielle Schnittstelle. Dies trifft aber nur zu, wenn der Bootblock ausgeführt wird. Sobald der Bootloader ausgeführt wird, wird die durch gegebene Konsole die alleinige Konsole. Veranlasst den Bootblock nach einer Tastatur zu suchen. Wenn keine Tastatur gefunden wird, werden und automatisch gesetzt. Wegen Platzbeschränkungen in den Bootblöcken kann nur erweiterte Tastaturen erkennen. Tastaturen mit weniger als 101 Tasten (und ohne F11 und F12 Tasten) werden wahrscheinlich, wie vielleicht auch die Tastaturen einiger Laptops, nicht erkannt. Wenn dies bei Ihrem System der Fall ist, können Sie nicht verwenden, da es leider noch keine Umgehung für dieses Problem gibt. Benutzen Sie also entweder , um die Konsole automatisch zu setzen, oder , um die serielle Konsole zu verwenden. In boot.config können Sie auch andere, in &man.boot.8; beschriebene Optionen, aufnehmen. Mit Ausnahme von werden die Optionen an den Bootloader (/boot/loader) weitergegeben. Der Bootloader untersucht dann einzig um festzustellen, welches Gerät die Konsole wird. Wenn Sie also nur angegeben haben, können Sie die serielle Schnittstelle nur als Konsole verwenden während der Bootblock ausgeführt wird. Danach wird der Bootloader, da ja fehlt, den Bildschirm zur Konsole machen. Booten Sie die Maschine. Wenn Sie das FreeBSD-System starten, werden die Bootblöcke den Inhalt von /boot.config auf der Konsole ausgeben: /boot.config: -P Keyboard: no Die zweite Zeile sehen Sie nur, wenn Sie in /boot.config angegeben haben. Sie zeigt an, ob eine Tastatur angeschlossen ist oder nicht. Die Meldungen gehen je nach den Einstellungen in /boot.config auf die interne Konsole, die serielle Konsole, oder beide Konsolen. Optionen Meldungen erscheinen auf keine der internen Konsole der seriellen Konsole der seriellen und der internen Konsole der seriellen und der internen Konsole , mit Tastatur der internen Konsole , ohne Tastatur der seriellen Konsole Nach den oben gezeigten Meldungen gibt es eine kleine Verzögerung bevor die Bootblöcke den Bootloader laden und weitere Meldungen auf der Konsole erscheinen. Sie können die Ausführung der Bootblöcke unterbrechen, um zu überprüfen, ob auch alles richtig aufgesetzt ist, brauchen das aber unter normalen Umständen nicht zu tun. Drücken Sie eine Taste außer Enter um den Bootvorgang zu unterbrechen. Sie erhalten dann ein Prompt, an dem Sie weitere Eingaben tätigen können: >> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot: Je nach Inhalt von /boot.config erscheint das Prompt auf der seriellen Konsole, der internen Konsole oder beiden Konsolen. Wenn die Meldung auf der richtigen Konsole erscheint, drücken Sie Enter um fortzufahren. Wenn Sie das Prompt auf der seriellen Konsole erwartet haben, dort aber nichts sehen, liegt ein Fehler in Ihren Einstellungen vor. Als Umgehung geben Sie an der momentanen Konsole ein, um den Bootblock und den Bootloader auf die serielle Konsole umzustellen. Führen Sie dann den Bootvorgang mit Enter weiter und wenn das System gebootet hat, können Sie die fehlerhaften Einstellungen korrigieren. Nachdem der Bootloader geladen wurde und Sie sich in der dritten Bootphase befinden, können Sie immer noch zwischen der internen und der seriellen Konsole auswählen. Setzen Sie dazu, wie in beschrieben, die entsprechenden Variablen des Bootloaders. Zusammenfassung Die folgende Übersicht zeigt, welche Konsole, abhängig von den getroffenen Einstellungen, ausgewählt wird. Fall 1: Option 0x10 für <devicename>sio0</devicename> device sio0 at isa? port IO_COM1 tty flags 0x10 irq 4 Optionen in /boot.config Konsole in den Bootblöcken Konsole im Bootloader Konsole im Kernel keine interne interne interne serielle serielle serielle serielle und interne interne interne serielle und interne serielle serielle , mit Tastatur interne interne interne , ohne Tastatur serielle und interne serielle serielle Fall 2: Option 0x30 für <devicename>sio0</devicename> device sio0 at isa? port IO_COM1 tty flags 0x30 irq 4 Optionen in /boot.config Konsole in den Bootblöcken Konsole im Bootloader Konsole im Kernel keine interne interne serielle serielle serielle serielle serielle und interne interne serielle serielle und interne serielle serielle , mit Tastatur interne interne serielle , ohne Tastatur serielle und interne serielle serielle Hinweise zur seriellen Konsole Verwenden einer höheren Geschwindigkeit Die Vorgabewerte für die Kommunikationsparameter der seriellen Schnittstelle sind: 9600 baud, 8 Bit, keine Parität und ein Stopp-Bit. Wenn Sie die Standardgeschwindigkeit ändern wollen, haben Sie folgende Möglichkeiten: Geben Sie die neue Konsolengeschwindigkeit mit BOOT_COMCONSOLE_SPEED an und kompilieren Sie die Bootblöcke neu. Ausführliche Informationen zum Bau und zur Installation von neuen Bootblöcken finden Sie im des Handbuchs. Wenn die serielle Konsole nicht mit der Option gestartet wird, oder wenn die verwendete serielle Konsole sich von der von den Bootblöcken verwendeten unterscheidet, müsssen Sie zusätzlich die folgende Option in Ihre Kernelkonfigurationsdatei aufnehmen und den Kernel neu bauen: options CONSPEED=19200 Verwenden Sie die Option , um den Kernel zu booten. Die Option kann auch in die Datei /boot.config aufgenommen werden. Eine Beschreibung dieses Vorgangs sowie eine Auflistung der von /boot.config unterstützten Optionen finden Sie in der Manualpage &man.boot.8;. Aktivieren Sie die Option comconsole_speed in der Datei /boot/loader.conf. Diese Option setzt voraus, dass auch die Optionen console, boot_serial, sowie boot_multicons in der Datei /boot/loader.conf gesetzt sind. Im Folgenden finden Sie ein Beispiel, in dem comconsole_speed verwendet wird, um die Geschwindigkeit der seriellen Konsole zu ändern: boot_multicons="YES" boot_serial="YES" comconsole_speed="115200" console="comconsole,vidconsole" &os;-Versionen vor 6.1-RELEASE unterstützen weder die Option noch die Option comconsole_speed in der Datei /boot/loader.conf. Verwenden Sie eine solche &os;-Version, müssen Sie die Bootblöcke neu bauen. Eine andere Schnittstelle als <devicename>sio0</devicename> benutzen Wenn Sie, warum auch immer, ein anderes Gerät als sio0 für die serielle Konsole einsetzen wollen, kompilieren Sie bitte die Bootblöcke, den Bootloader und den Kernel nach dem folgenden Verfahren neu. Installieren Sie die Kernelquellen (siehe ). Setzen Sie in /etc/make.conf BOOT_COMCONSOLE_PORT auf die Adresse der Schnittstelle (0x3F8, 0x2F8, 0x3E8 oder 0x2E8), die Sie benutzen möchten. Sie können nur sio0 bis sio3 (COM1 bis COM4) benutzen, Multiportkarten können Sie nicht als Konsole benutzen. Interrupts müssen Sie hier nicht angeben. Erstellen Sie eine angepasste Kernelkonfiguration und geben Sie dort die richtigen Optionen für die Schnittstelle, die Sie benutzen möchten, an. Wenn Sie zum Beispiel sio1 (COM2) zur Konsole machen wollen, geben Sie dort entweder device sio1 at isa? port IO_COM2 tty flags 0x10 irq 3 oder device sio1 at isa? port IO_COM2 tty flags 0x30 irq 3 an. Keine andere serielle Schnittstelle sollte als Konsole definiert werden. Übersetzen und installieren Sie die Bootblöcke und den Bootloader: &prompt.root; cd /sys/boot &prompt.root; make clean &prompt.root; make &prompt.root; make install Bauen und installieren Sie einen neuen Kernel. Schreiben Sie die Bootblöcke mit &man.bsdlabel.8; auf die Bootplatte und booten Sie den neuen Kernel. DDB Debugger über die serielle Schnittstelle Wenn Sie den Kerneldebugger über eine serielle Verbindung bedienen möchten (nützlich, kann aber gefährlich sein, wenn auf der Leitung falsche BREAK-Signale generiert werden), sollten Sie einen Kernel mit den folgenden Optionen erstellen: options BREAK_TO_DEBUGGER options DDB Benutzung der seriellen Konsole zum Anmelden Da Sie schon die Bootmeldungen auf der Konsole verfolgen können und den Kerneldebugger über die Konsole bedienen können, wollen Sie sich vielleicht auch an der Konsole anmelden. Öffnen Sie /etc/ttys in einem Editor und suchen Sie nach den folgenden Zeilen: ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure ttyd0 bis ttyd3 entsprechen COM1 bis COM4. Ändern Sie für die entsprechende Schnittstelle off zu on. Wenn Sie auch die Geschwindigkeit der seriellen Schnittstelle geändert haben, müssen Sie std.9600 auf die momentane Geschwindigkeit, zum Beispiel std.19200, anpassen. Sie sollten auch den Terminaltyp von unknown auf den tatsächlich verwendeten Terminal setzen. Damit die Änderungen an der Datei wirksam werden, müssen Sie noch kill -HUP 1 absetzen. Die Konsole im Bootloader ändern In den vorigen Abschnitten wurde beschrieben, wie Sie die serielle Konsole durch Änderungen im Bootblock aktivieren. Dieser Abschnitt zeigt Ihnen, wie Sie mit Kommandos und Umgebungsvariablen die Konsole im Bootloader definieren. Da der Bootloader die dritte Phase im Bootvorgang ist und nach den Bootblöcken ausgeführt wird, überschreiben seine Einstellungen die des Bootblocks. Festlegen der Konsole Mit einer einzigen Zeile in /boot/loader.rc können Sie den Bootloader und den Kernel anweisen, die serielle Schnittstelle zur Konsole zu machen: set console="comconsole" Unabhängig von den Einstellungen im Bootblock legt dies die Konsole fest. Die obige Zeile sollte die erste Zeile in /boot/loader.rc sein, so dass Sie die Bootmeldungen so früh wie möglich auf der Konsole sehen. Analog können Sie die interne Konsole verwenden: set console="vidconsole" Wenn Sie console nicht setzen, bestimmt der Bootloader (und damit auch der Kernel) die Konsole über die Option des Bootblocks. Ab FreeBSD 3.2 können Sie die Bootkonsole in /boot/loader.conf.local oder /boot/loader.conf anstatt in /boot/loader.rc angeben. In /boot/loader.rc finden Sie bei dieser Methode den folgenden Inhalt: include /boot/loader.4th start Erstellen Sie /boot/loader.conf.local und fügen die Zeile console=comconsole oder console=vidconsole ein. Weitere Informationen erhalten Sie in &man.loader.conf.5;. Momentan gibt es im Bootloader nichts vergleichbares zu im Bootblock. Damit kann die Konsole nicht automatisch über das Vorhandensein einer Tastatur festgelegt werden. Eine andere Schnittstelle als <devicename>sio0</devicename> benutzen Sie müssen den Bootloader neu kompilieren, wenn Sie eine andere Schnittstelle als sio0 benutzen wollen. Folgen Sie der Anleitung aus . Vorbehalte Hinter dem ganzen steckt die Idee, Server ohne Hardware für Grafik und ohne Tastatur zu betreiben. Obwohl es die meisten Systeme erlauben, ohne Tastatur zu booten, gibt es leider nur wenige Systeme, die ohne eine Grafikkarte booten. Maschinen mit einem AMI BIOS können ohne Grafik booten, indem Sie den Grafikadapter im CMOS-Setup auf Not installed setzen. Viele Maschinen unterstützen diese Option allerdings nicht. Damit diese Maschinen booten, müssen sie über eine Grafikkarte, auch wenn es nur eine alte Monochromkarte ist, verfügen. Allerdings brauchen Sie keinen Monitor an die Karte anzuschließen. Sie können natürlich auch versuchen, auf diesen Maschinen ein AMI BIOS zu installieren.
diff --git a/de_DE.ISO8859-1/books/handbook/x11/chapter.sgml b/de_DE.ISO8859-1/books/handbook/x11/chapter.sgml index a649304406..6c6433169c 100644 --- a/de_DE.ISO8859-1/books/handbook/x11/chapter.sgml +++ b/de_DE.ISO8859-1/books/handbook/x11/chapter.sgml @@ -1,1730 +1,1741 @@ Ken Tom Erweitert um X.Orgs X11-Server von Marc Fonvieille Martin Heinen Übersetzt von Das X-Window-System Übersicht Mit X11 steht unter &os; eine leistungsfähige frei verfügbare grafische Benutzeroberfläche zur Verfügung, die sowohl in &xorg; und &xfree86; (sowie in weiteren, hier nicht diskutierten Varianten) implementiert wurde. Bis einschließlich &os; 5.2.1-RELEASE wurde standardmäßig &xfree86;, der X11-Server von The &xfree86; Project, Inc., installiert. Seit &os; 5.3-RELEASE ist &xorg; von der X.Org Foundation der voreingestellte X11-Server, der unter einer Lizenz ähnlich der von &os; steht. Zusätzlich sind einige kommerzielle X-Server für &os; verfügbar. Dieses Kapitel behandelt die Installation und Konfiguration von X11; der Schwerpunkt liegt auf &xorg; &xorg.version;. Informationen zur Konfiguration von &xfree86; (beispielsweise auf älteren Versionen von &os;, unter denen &xfree86; noch der Standard-X-Server war) sowie von äteren &xorg;-Versionen finden Sie weiterhin in den archivierten Versionen des &os;-Handbuchs unter . Auskunft über von X11 unterstützte Video-Hardware gibt die Webseite &xorg;. Nachdem Sie dieses Kapitel gelesen haben, werden Sie die Komponenten des X-Window-Systems und ihr Zusammenspiel kennen. Wissen, wie X11 installiert und konfiguriert wird. Wissen, wie Sie verschiedene Window-Manager installieren und benutzen. Wissen, wie &truetype;-Schriftarten mit X11 benutzt werden. Wissen, wie Sie die grafische Anmeldung (XDM) einrichten. Bevor Sie dieses Kapitel lesen, sollten Sie wissen, wie Sie Software Dritter installieren (). X-Grundlagen Anwendern anderer grafischer Benutzeroberflächen, wie µsoft.windows; oder &macos;, kommt X beim ersten Mal oft befremdlich vor. Man braucht kein weitreichendes Verständnis der X-Komponenten und Ihres Zusammenspiels, um X anzuwenden. Um die Stärken von X auszunutzen, sollten Sie allerdings die Grundlagen verstehen. Warum heißt es X? X ist nicht die erste grafische Benutzeroberfläche, die für &unix; geschrieben wurde. Die Entwickler von X arbeiteten vorher an einem anderen System, das W (von engl. window: Fenster) hieß. X ist schlicht der nächste Buchstabe im Alphabet. X wird X, X-Window-System oder X11 genannt. Sagen Sie bitte nicht X-Windows: das kommt bei einigen Leuten schlecht an (die Hilfeseite &man.X.7; führt dies näher aus). Das Client/Server-Modell von X X wurde von Anfang an netzwerktransparent entworfen und verwendet ein Client-Server-Modell. In diesem Modell läuft der Server auf dem Rechner, an dem die Tastatur, der Bildschirm und die Maus angeschlossen ist. Der Server ist für Dinge wie die Verwaltung des Bildschirms und die Verarbeitung von Tastatur- und Maus-Eingaben verantwortlich. Jede X-Anwendung, beispielsweise ein XTerm oder &netscape; ist ein Client. Der Client sendet dem Server Nachrichten wie Zeichne an diesen Koordinaten ein Fenster und der Server sendet dem Client Nachrichten der Art Der Benutzer hat gerade den Ok-Knopf gedrückt. In kleinen Umgebungen laufen der X-Server und die X-Clients auf demselben Rechner. Es ist aber durchaus möglich, den X-Server auf einem weniger leistungsfähigen Arbeitsplatzrechner laufen zu lassen und die X-Anwendungen (die Clients) auf dem leistungsfähigen und teuren Server der Arbeitsgruppe zu betreiben. In diesem Fall kommunizieren der X-Server und die X-Clients über das Netz. Dieses Modell verwirrt viele Leute, die erwarten, dass der X-Server der dicke Rechner im Maschinenraum und der X-Client ihr Arbeitsplatzrechner ist. Merken Sie sich einfach, dass der X-Server der Rechner mit dem Bildschirm und der Maus ist und die X-Clients Programme sind, die in den Fenstern laufen. Das X-Protokoll ist unabhängig vom verwendeten Betriebssystem und Rechnertyp. Ein X-Server kann durchaus auch unter µsoft.windows; oder Apples &macos; betrieben werden, wie viele kostenlose und kommerzielle Anwendungen zeigen. Der Window-Manager Die X-Philosophie Werkzeuge statt Richtlinien ist wie die UNIX-Philosophie. Es wird nicht vorgeschrieben, wie eine Aufgabe zu lösen ist, stattdessen erhält der Benutzer Werkzeuge, über die er frei verfügen kann. Dies geht so weit, dass X nicht bestimmt, wie Fenster auf dem Bildschirm auszusehen haben, wie sie mit der Maus zu verschieben sind, welche Tastenkombination benutzt werden muss, um zwischen den Fenstern zu wechseln (z.B. Alt Tab unter µsoft.windows;), oder ob die Fensterrahmen Schaltflächen zum Schließen haben. X gibt die Verantwortung für all diese Sachen an eine Anwendung ab, die Window-Manager genannt wird. Unter X gibt es zahlreiche Window-Manager: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker um nur einige zu nennen. Jeder dieser Window-Manager sieht anders aus: Manche stellen virtuelle Bildschirme zur Verfügung, in anderen lassen sich die Tastenkombinationen zur Verwaltung des Bildschirms anpassen, einige besitzen eine Startleiste oder etwas Ähnliches und in manchen lässt sich das Aussehen und Verhalten über die Anwendung von Themes beliebig einstellen. Die eben genannten Window-Manager und viele weitere finden Sie in der Kategorie x11-wm der Ports-Sammlung. Die grafischen Benutzeroberflächen KDE und GNOME besitzen eigene Window-Manager, die in den grafischen Arbeitsplatz integriert sind. Die Window-Manager werden unterschiedlich konfiguriert. Einige erwarten eine manuell erstellte Konfigurationsdatei, andere bieten grafische Werkzeuge für die meisten Konfigurationsarbeiten an. Die Konfigurationsdatei von Sawfish ist sogar in einem Lisp-Dialekt geschrieben. Fokus Der Window-Manager ist für die Methode, mit der ein Fenster den Fokus bekommt, verantwortlich. Jedes System, das Fenster verwendet, muss entscheiden, wie ein Fenster aktiviert wird, damit es Eingaben empfangen kann. Das aktive Fenster sollte zudem sichtbar gekennzeichnet werden. Eine geläufige Methode, den Fokus zu wechseln, wird click-to-focus genannt. Die Methode wird in µsoft.windows; benutzt: Ein Fenster wird aktiv, wenn es mit der Maus angeklickt wird. X legt nicht fest, wie der Fokus einzustellen ist, stattdessen bestimmt der Window-Manager welches Fenster den Fokus zu einem gegebenen Zeitpunkt erhält. Alle Window-Manager stellen die Methode click-to-focus bereit, die meisten stellen auch noch andere Methoden bereit. Verbreitete Methoden, den Fokus einzustellen, sind: focus-follows-mouse Den Fokus hat das Fenster, unter dem sich der Mauszeiger befindet. Das muss nicht unbedingt das Fenster, sein, das sich vorne befindet. Wird der Mauszeiger in ein anderes Fenster bewegt, so erhält dieses Fenster den Fokus, ohne das es angeklickt werden muss. sloppy-focus Diese Methode erweitert die Methode focus-follows-mouse. Wenn die Maus mit focus-follows-mouse aus dem Fenster auf die Oberfläche bewegt wird, verliert das aktive Fenster den Fokus. Da dann kein Fenster mehr den Fokus hat, gehen alle Eingaben verloren. Die Methode sloppy-focus wechselt den Fokus nur, wenn sich der Mauszeiger in ein neues Fenster bewegt und nicht, wenn er das aktive Fenster verlässt. click-to-focus Das aktive Fenster wird durch einen Mausklick festgelegt (dabei kann das Fenster vor alle anderen Fenster gesetzt werden). Alle Eingaben werden dann, unabhängig von der Position des Mauszeigers, dem aktiven Fenster zugeordnet. Viele Window-Manager unterstützen noch andere Methoden, so wie Abwandlungen der hier vorgestellten Methoden. Schauen Sie sich dazu bitte die Hilfeseiten Ihres Window-Managers an. Widgets Die X-Philosophie dehnt sich auch auf die Widgets aus, die von den Anwendungen benutzt werden. Ein Widget bezeichnet Objekte, die manipuliert werden können, wie buttons (Schaltflächen), check buttons (Mehrfachauswahlknopf), radio buttons (Einfachauswahlknopf), Icons und Auswahllisten. Unter µsoft.windows; werden Widgets Controls genannt. µsoft.windows; und Apples &macos; geben strenge Richtlinien für Widgets vor: Von den Entwicklern wird erwartet, dass Sie Anwendungen mit einheitlichem Aussehen und einheitlicher Bedienung (look and feel) entwickeln. X gibt weder einen Stil noch Widgets vor, die benutzt werden müssen. Erwarten Sie daher nicht, dass alle X-Anwendungen gleich aussehen oder sich gleich bedienen lassen. Es gibt mehrere verbreitete Widget-Sammlungen, beispielsweise die Athena-Widgets vom MIT, &motif; (abgeschrägte Ecken und drei Grautöne, danach wurden die Widgets von µsoft.windows; entworfen) oder OpenLook. Die meisten neuen X-Anwendungen benutzen heute modern aussehende Widgets, wie Qt, das von KDE benutzt wird oder GTK+, das von GNOME benutzt wird. Damit wird eine gewisse Einheitlichkeit in Bedienung und Aussehen erreicht, die sicher neuen Benutzern die Arbeit erleichtert. X11 installieren &xorg; ist der Standard-X-Server unter &os;. &xorg; ist der von der X.Org Foundation herausgegebene X-Server des Open-Source X Window Systems. &xorg; beruht auf &xfree86 4.4RC2 und X11R6.6. Derzeit ist die Version &xorg.version; von &xorg; in der Ports-Sammlung vorhanden. Die nachstehenden Kommandos bauen und installieren &xorg; aus der Ports-Sammlung: &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean Der komplette Bau von &xorg; benötigt mindestens 4 GB freien Plattenplatz. Mit &man.pkg.add.1; können Sie X11 direkt von fertigen Paketen installieren. Wenn &man.pkg.add.1; die Pakete herunterlädt, lassen Sie die Versionsnummer aus. &man.pkg.add.1; holt automatisch die aktuelle Version eines Pakets. Das &xorg;-Paket holen und installieren Sie wie folgt: &prompt.root; pkg_add -r xorg Die obigen Beispiele installieren die vollständige X11-Distribution, die unter anderem Server, Clients und Fonts enthält. Für die einzelnen Teile der Distribution gibt es ebenfalls separate Pakete. Der Rest dieses Kapitels erklärt, wie Sie X11 konfigurieren und sich eine Arbeitsumgebung einrichten. Christopher Shumway Beigetragen von X11 konfigurieren &xorg; X11 Vorarbeiten Bevor Sie X11 konfigurieren, benötigen Sie folgende Informationen: die Spezifikationen des Monitors den Chipset des Grafikadapters die Speichergröße des Grafikadapters Synchronisationsfrequenz horizontale Synchronisationsfrequenz vertikale Aus den Spezifikationen des Monitors ermittelt X11 die Auflösung und die Wiederholrate für den Betrieb des X-Servers. Die Spezifikationen entnehmen Sie der Dokumentation des Monitors oder der Webseite des Herstellers. Sie benötigen die horizontale und die vertikale Synchronisationsfrequenz. Der Chipsatz der Grafikkarte bestimmt den Treiber, den X11 verwendet. Die meisten Chipsätze werden automatisch erkannt, Sie brauchen die Information jedoch, wenn die Erkennung fehlschlägt. Die Speichergröße der Grafikkarte bestimmt die maximal mögliche Auflösung und Farbtiefe. X11 konfigurieren - X11 wird in mehreren Schritten konfiguriert. - Zuerst müssen Sie eine Vorgabe für die - Konfigurationsdatei erstellen. Setzen Sie dazu als - root den folgenden Befehl ab: + Ab Version 7.3 funktioniert + &xorg; häfig auch, ohne + dass Sie eine eigene Konfigurationsdatei anlegen + müssen. Sie müssen dann nur den folgenden + Befehl eingeben: + + &prompt.user; startx + + Funktioniert dies auf Ihrem System nicht (oder + wollen Sie nicht mit den Standardeinstellungen + arbeiten), müssen Sie X11 weiterhin manuell + konfigurieren. Dazu erstellen Sie als erstes eine + eine Vorgabe für die Konfigurationsdatei. + Setzen Sie dazu als root + den folgenden Befehl ab: &prompt.root; Xorg -configure Die Vorgabe-Konfiguration wird dann unter dem Namen xorg.conf.new im Verzeichnis /root gespeichert (das verwendete Verzeichnis wird durch die Umgebungsvariable $HOME bestimmt und hängt davon ab, wie Sie zu root gewechselt sind). X11 hat in diesem Schritt versucht, die Grafik-Hardware des Systems zu erkennen und eine Konfigurationsdatei ausgeschrieben, die zur Hardware passende Treiber lädt. Im nächsten Schritt wird geprüft, ob &xorg; die Grafik-Hardware des Systems verwenden kann. Setzen Sie dazu den folgenden Befehl ab: &prompt.root; Xorg -config xorg.conf.new Wenn jetzt ein graues Raster und der X-Mauszeiger erscheinen, war die Konfiguration erfolgreich. Beenden Sie den Test indem Sie Ctrl Alt Backspace drücken. Wenn die Maus nicht funktioniert, prüfen Sie, ob die Maus konfiguriert wurde. Die Mauskonfiguration wird in beschrieben. X11 anpassen Als Nächstes passen Sie xorg.conf.new an. Öffnen Sie die Datei in einem Editor, wie &man.emacs.1; oder &man.ee.1; und fügen Sie die Synchronisationsfrequenzen des Monitors ein. Die Frequenzen werden im Abschnitt "Monitor" eingetragen: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection Unter Umständen fehlen die Schlüsselwörter HorizSync und VertRefresh, die Sie dann nachtragen müssen. Geben Sie, wie im Beispiel gezeigt, die horizontale Synchronisationsfrequenz hinter HorizSync und die vertikale Synchronisationsfrequenz hinter VertRefresh an. X unterstützt die Energiesparfunktionen (DPMS, Energy Star) Ihres Monitors. Mit &man.xset.1; können Sie Zeitschranken für die DPMS-Modi standby, suspend, off vorgeben, oder diese zwingend aktivieren. Die DPMS-Funktionen können Sie mit der nachstehenden Zeile im "Monitor"-Abschnitt aktivieren: Option "DPMS" xorg.conf Die gewünschte Auflösung und Farbtiefe stellen Sie im Abschnitt "Screen" ein: Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection Mit DefaultDepth wird die Farbtiefe des X-Servers vorgegeben. Mit der Option -depth von &man.Xorg.1; lässt sich die vorgegebene Farbtiefe überschreiben. Modes gibt die Auflösung für die angegebene Farbtiefe an. Die Farbtiefe im Beispiel beträgt 24 Bits pro Pixel, die zugehörige Auflösung ist 1024x768 Pixel. Beachten Sie, dass in der Voreinstellung nur Standard-VESA-Modi der Grafikkarte angegeben werden können. Sichern Sie die Konfigurationsdatei und testen Sie die Konfiguration wie oben beschrieben. Bei der Fehlersuche sind Ihnen die Protokolle des X11-Servers behilflich. In den Protokollen wird die gefundene Graphik-Hardware protokolliert. Die Protokolle von &xorg; heißen /var/log/Xorg.0.log. Die Dateinamen enthalten eine laufende Nummer, der Name variiert daher von Xorg.0.log zu Xorg.8.log. Wenn alles funktioniert hat, installieren Sie die Datei an einen Ort, an dem &man.Xorg.1; sie findet. Normalerweise wird die Konfigurationsdatei unter /etc/X11/xorg.conf oder /usr/local/etc/X11/xorg.conf gespeichert: &prompt.root; cp xorg.conf.new /etc/X11/xorg.conf Damit ist die X11-Konfiguration beendet und &xorg; kann nun mithilfe von &man.startx.1; gestartet werden. Alternativ können Sie X11 auch mit &man.xdm.1; starten. Sie können X11 auch mit dem graphischen Werkzeug &man.xorgcfg.1; konfigurieren. Mit diesem Werkzeug können Sie Treiber auswählen und Einstellungen vornehmen. Das Werkzeug kann auch auf der Konsole benutzt werden, starten Sie es einfach mit xorgcfg -textmode. Weiteres erfahren Sie in den Hilfeseiten &man.xorgcfg.1;. Weiterhin gibt es noch das Werkzeug &man.xorgconfig.1;. Dieses Konsolenwerkzeug ist zwar schwerer zu handhaben, funktioniert aber auch in Situationen, in denen die anderen Werkzeuge nicht funktionieren. Spezielle Konfigurationen Konfiguration des &intel; i810 Graphics Chipsets Intel i810 Chipset Der &intel; i810-Chipset benötigt den Treiber agpgart, die AGP-Schnittstelle von X11. Weitere Informationen finden sich in &man.agp.4;. Ab jetzt kann die Hardware wie jede andere Grafikkarte auch konfiguriert werden. Der Treiber &man.agp.4; kann nicht nachträglich mit &man.kldload.8; in einen laufenden Kernel geladen werden. Er muss entweder fest im Kernel eingebunden sein oder beim Systemstart über /boot/loader.conf geladen werden. Einen Widescreen-Monitor einsetzen Widescreen-Monitor, Konfiguration Dieser Abschnitt geht über die normalen Konfigurationsarbeiten hinaus und setzt einiges an Vorwissen voraus. Selbst wenn die Standardwerkzeuge zur X-Konfiguration bei diesen Geräten nicht zum Erfolg führen, sollten sich in den Logdateien genug Informationen finden, mit denen Sie letztlich doch einen funktionierenden X-Server konfigurieren können. Alles, was Sie dazu noch benötigen, ist ein Texteditor. Aktuelle Widescreen-Formate (wie WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, und andere mehr) unterstützen Seitenverhältnisse wie 16:10 oder 10:9, die unter X Probleme verursachen können. Bei einem Seitenverhältnis von 16:10 sind beispielsweise folgende Auflösungen möglich: 2560x1600 1920x1200 1680x1050 1440x900 1280x800 Diese Konfiguration könnte so einfach sein wie das zusätzliche Anlegen eines Eintrags einer dieser Auflösungen als ein möglicher Mode in Section "Screen": Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1680x1050" EndSubSection EndSection &xorg; ist normalerweise intelligent genug, um die Informationen zu den erlaubten Auflösungen über I2C/DDC zu beziehen, und weiß daher, welche Auflösungen und Frequenzen Ihr Widescreen-Monitor unterstützt. Wenn diese ModeLines in den Treiberdateien nicht vorhanden sind, kann es sein, dass Sie &xorg; beim Finden der korrekten Werte unterstützen müssen. Dazu extrahieren Sie die benötigten Informationen aus der Datei /var/log/Xorg.0.log und erzeugen daraus eine funktionierende ModeLine. Dazu suchen Sie in dieser Datei nach Zeilen ähnlich den folgenden: (II) MGA(0): Supported additional Video Mode: (II) MGA(0): clock: 146.2 MHz Image Size: 433 x 271 mm (II) MGA(0): h_active: 1680 h_sync: 1784 h_sync_end 1960 h_blank_end 2240 h_border: 0 (II) MGA(0): v_active: 1050 v_sync: 1053 v_sync_end 1059 v_blanking: 1089 v_border: 0 (II) MGA(0): Ranges: V min: 48 V max: 85 Hz, H min: 30 H max: 94 kHz, PixClock max 170 MHz Diese Informationen werden auch als EDID-Informationen bezeichnet. Um daraus eine funktionierende ModeLine zu erzeugen, müssen Sie lediglich die Zahlen in die korrekte Reihenfolge bringen: ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings> Die korrekte ModeLine in Section "Monitor" würde für dieses Beispiel folgendermaßen aussehen: Section "Monitor" Identifier "Monitor1" VendorName "Bigname" ModelName "BestModel" ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089 Option "DPMS" EndSection Nachdem diese Äderungen durchgeführt sind, sollte X auch auf Ihrem neuen Widescreen-Monitor starten. Murray Stokely Beigetragen von Schriftarten in X11 benutzen Type 1 Schriftarten Die Schriftarten, die mit X11 geliefert werden, eignen sich ganz und gar nicht für Desktop-Publishing-Anwendungen. Große Schriftarten zeigen bei Präsentationen deutliche Treppenstufen und die kleinen Schriftarten in &netscape; sind fast unleserlich. Es gibt allerdings mehrere hochwertige Type 1 Schriftarten (&postscript;), die mit X11 benutzt werden können. Beispielsweise enthalten die URW-Schriftarten (x11-fonts/urwfonts) hochwertige Versionen gängiger Type 1 Schriftarten (zum Beispiel Times Roman, Helvetica, Palatino). Die Sammlung Freefonts (x11-fonts/freefonts) enthält noch mehr Schriftarten, doch sind diese für den Einsatz in Grafik-Programmen wie The Gimp gedacht. Es fehlen auch einige Schriftarten, sodass sich die Sammlung nicht für den alltäglichen Gebrauch eignet. Weiterhin kann X11 leicht so konfiguriert werden, dass es &truetype;-Schriftarten verwendet. Mehr dazu erfahren Sie in der Hilfeseite &man.X.7; und im Abschnitt &truetype; Schriftarten. Die Type 1 Schriftarten lassen sich aus der Ports-Sammlung wie folgt installieren: &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean Analog lassen sich Freefont und andere Sammlungen installieren. Die neuen Schriftarten müssen Sie in die Konfigurationsdatei des X-Servers im Verzeichnis /etc/X11 eintragen. Die Konfigurationsdatei von &xorg; heißt xorg.conf. Fügen Sie die folgende Zeile hinzu: FontPath "/usr/local/lib/X11/fonts/URW/" Sie können aber auch in der X-Sitzung das folgende Kommando absetzen: &prompt.user; xset fp+ /usr/local/lib/X11/fonts/URW &prompt.user; xset fp rehash Dann kennt der X-Server die neuen Schriftarten nur bis zum Ende der Sitzung. Wenn die Änderung dauerhaft sein soll, müssen Sie die Kommandos in ~/.xinitrc eintragen, wenn Sie X mit startx starten, oder in ~/.xsession, wenn Sie XDM benutzen. Sie können die Schriftarten auch in die neue Datei /usr/local/etc/fonts/local.conf, die im Abschnitt Anti-aliasing beschrieben wird, eintragen. &truetype;-Schriftarten TrueType-Schriftarten Schriftarten TrueType &xorg; kann &truetype;-Schriftarten mithilfe von zwei Modulen darstellen. Im folgenden Beispiel wird das Freetype-Modul benutzt, da es besser mit anderen Werkzeugen, die &truetype;-Schriftarten darstellen, übereinstimmt. Das Freetype-Modul aktivieren Sie im Abschnitt "Module" von /etc/X11/xorg.conf durch Einfügen der Zeile: Load "freetype" Erstellen Sie ein Verzeichnis für die &truetype;-Schriftarten (z.B. /usr/local/lib/X11/fonts/TrueType) und kopieren Sie alle Schriftarten dorthin. Die Schriftarten müssen im &unix;/&ms-dos;/&windows;-Format vorliegen, Schriftarten von einem &macintosh; können Sie nicht direkt übernehmen. Die Schriftarten müssen noch im Katalog fonts.dir erfasst werden. Den Katalog erzeugen Sie mit dem Kommando ttmkfdir aus dem Port x11-fonts/ttmkfdir: &prompt.root; cd /usr/local/lib/X11/fonts/TrueType &prompt.root; ttmkfdir -o fonts.dir Geben Sie dem System das &truetype;-Verzeichnis, wie im Abschnitt Type 1 Schriftarten beschrieben, bekannt: &prompt.user; xset fp+ /usr/local/lib/X11/fonts/TrueType &prompt.user; xset fp rehash Oder fügen Sie eine FontPath-Zeile in die Datei xorg.conf ein. Das war's. Jetzt sollten &netscape;, Gimp, &staroffice; und alle anderen X-Anwendungen die &truetype;-Schriftarten benutzen. Extrem kleine Schriftarten (Webseiten, die mit hoher Auflösung betrachtet werden) und sehr große Schriftarten (in &staroffice;) sollten jetzt viel besser aussehen. Joe Marcus Clarke Aktualisiert von Anti-aliasing Anti-aliasing Schriftarten Anti-aliasing X11 beherrscht das Anti-aliasing-Verfahren seit &xfree86; 4.0.2. Die Konfiguration der Schriftarten war vor &xfree86; 4.3.0 ziemlich schwierig. Ab &xfree86; 4.3.0 stehen alle Schriftarten in /usr/local/lib/X11/fonts/ und ~/.fonts/ automatisch für das Anti-aliasing-Verfahren mit Anwendungen, die Xft unterstützen, zur Verfügung. Es gibt schon viele Anwendungen, die Xft unterstützen, zum Beispiel: Qt 2.3 und höhere Versionen (das KDE-Toolkit), GTK+ 2.0 und höhere Versionen (das GNOME-Toolkit) sowie Mozilla 1.2 und höhere Versionen. In der Datei /usr/local/etc/fonts/local.conf werden die Schriftarten, die mit dem Anti-aliasing-Verfahren benutzt werden sollen und die Eigenschaften des Verfahrens festgelegt. In diesem Abschnitt wird nur die grundlegende Konfiguration von Xft beschrieben. Weitere Details entnehmen Sie bitte der Hilfeseite &man.fonts-conf.5;. XML Die Datei local.conf ist ein XML-Dokument. Achten Sie beim Editieren der Datei daher auf die richtige Groß- und Kleinschreibung und darauf, dass alle Tags geschlossen sind. Die Datei beginnt mit der üblichen XML-Deklaration gefolgt von einer DOCTYPE-Definition und dem <fontconfig>-Tag: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> Wie vorher erwähnt, stehen schon alle Schriftarten in /usr/local/lib/X11/fonts/ und ~/.fonts/ für Anwendungen, die Xft unterstützen, zur Verfügung. Wenn Sie ein Verzeichnis außerhalb dieser beiden Bäume benutzen wollen, fügen Sie eine Zeile wie die nachstehende zu /usr/local/etc/fonts/local.conf hinzu: <dir>/path/to/my/fonts</dir> Wenn Sie neue Schriftarten hinzugefügt haben, müssen Sie den Schriftarten-Cache neu aufbauen: &prompt.root; fc-cache -f Das Anti-aliasing-Verfahren zeichnet Ränder leicht unscharf, dadurch werden kleine Schriften besser lesbar und der Treppenstufen-Effekt bei wird großen Schriften vermieden. Auf normale Schriftgrößen sollte das Verfahren aber nicht angewendet werden, da dies die Augen zu sehr anstrengt. Um kleinere Schriftgrößen als 14 Punkt von dem Verfahren auszunehmen, fügen Sie in local.conf die nachstehenden Zeilen ein: <match target="font"> <test name="size" compare="less"> <double>14</double> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> <match target="font"> <test name="pixelsize" compare="less" qual="any"> <double>14</double> </test> <edit mode="assign" name="antialias"> <bool>false</bool> </edit> </match> Schriftarten Abstände Das Anti-aliasing-Verfahren kann die Abstände einiger Fixschriften falsch darstellen, dies fällt besonders unter KDE auf. Sie können das Problem umgehen, indem Sie die Abstände dieser Schriften auf den Wert 100 festsetzen. Fügen Sie die nachstehenden Zeilen hinzu: <match target="pattern" name="family"> <test qual="any" name="family"> <string>fixed</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> <match target="pattern" name="family"> <test qual="any" name="family"> <string>console</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> Damit werden die Namen der gebräuchlichen Fixschriften auf "mono" abgebildet. Für diese Schriften setzen Sie dann den Abstand fest: <match target="pattern" name="family"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="spacing" mode="assign"> <int>100</int> </edit> </match> Bestimmte Schriftarten, wie Helvetica, können Probleme mit dem Anti-Aliasing-Verfahren verursachen. In der Regel erscheinen diese Schriftarten dann vertikal halbiert. Im schlimmsten Fall stürzen Anwendungen, wie Mozilla, als Folge davon ab. Sie vermeiden dies, indem Sie betroffene Schriftarten in local.conf von dem Verfahren ausnehmen: <match target="pattern" name="family"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign"> <string>sans-serif</string> </edit> </match> Wenn Sie local.conf editiert haben, stellen Sie bitte sicher, dass die Datei mit dem Tag </fontconfig> endet. Ist das nicht der Fall, werden die Änderungen nicht berücksichtigt. Die mit X11 gelieferten Schriftarten eignen sich nicht besonders für das Anti-Aliasing-Verfahren. Der Port x11-fonts/bitstream-vera enthält viel besser geeignete Schriftarten. Wenn sie noch nicht existiert, legt der Port die Datei /usr/local/etc/fonts/local.conf an. Ansonsten erzeugt der Port die Datei /usr/local/etc/fonts/local.conf-vera, deren Inhalt Sie in /usr/local/etc/fonts/local.conf aufnehmen müssen. Danach werden die X11-Schriftarten Serif, Sans Serif und Monospaced durch die entsprechenden Bitstream-Schriftarten ersetzt. Benutzer können eigene Einstellungen in der Datei ~/.fonts.conf vornehmen. Achten Sie auch hier auf die richtige XML-Syntax. LCD Schriftarten auf einem LCD Mit einem LCD können Sie sub-pixel sampling anstelle von Anti-aliasing einsetzen. Dieses Verfahren behandelt die horizontal getrennten Rot-, Grün- und Blau-Komponenten eines Pixels gesondert und verbessert damit (teilweise sehr wirksam) die horizontale Auflösung. Die nachstehende Zeile in local.conf aktiviert diese Funktion: <match target="font"> <test qual="all" name="rgba"> <const>unknown</const> </test> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> Abhängig von der Organisation Ihres Bildschirms müssen Sie anstelle von verwenden. Experimentieren Sie und schauen Sie, was besser aussieht. Mozilla ohne Anti-Aliasing Der nächste Start des X-Servers aktiviert das Anti-aliasing-Verfahren. Beachten Sie, dass die Anwendungen dieses Verfahren auch benutzen müssen. Zurzeit wird das Verfahren von Qt und damit von KDE benutzt. GTK+ und GNOME können das Verfahren mit dem Font-capplet benutzen (Details entnehmen Sie bitte ). Ab der Version 1.2 benutzt Mozilla automatisch das Anti-Aliasing Verfahren. Dies können Sie verhindern, wenn Sie beim Übersetzen von Mozilla die Option -DWITHOUT_XFT angeben. Seth Kingsley Beigetragen von Der X-Display-Manager Einführung X-Display-Manager Der X-Display-Manager (XDM), eine optionale Komponente des X-Window-Systems, verwaltet Sitzungen. Er kann mit vielen Komponenten, wie minimal ausgestatteten X-Terminals, Arbeitsplatz-Rechnern und leistungsfähigen Netzwerkservern, nutzbringend eingesetzt werden. Da das X-Window-System netzwerktransparent ist, gibt es zahlreiche Möglichkeiten, X-Clients und X-Server auf unterschiedlichen Rechnern im Netz laufen zu lassen. XDM stellt eine grafische Anmeldemaske zur Verfügung, in der Sie den Rechner, auf dem eine Sitzung laufen soll, auswählen können und in der Sie die nötigen Autorisierungs-Informationen, wie Benutzername und Passwort, eingeben können. Die Funktion des X-Display-Managers lässt sich mit der von &man.getty.8; (siehe ) vergleichen. Er meldet den Benutzer am ausgesuchten System an, startet ein Programm (meist einen Window-Manager) und wartet darauf, dass dieses Programm beendet wird, das heißt der Benutzer die Sitzung beendet hat. Nachdem die Sitzung beendet ist, zeigt XDM den grafischen Anmeldebildschirm für den nächsten Benutzer an. XDM einrichten Der XDM-Dæmon befindet sich in /usr/local/bin/xdm und kann jederzeit von root gestartet werden. Er verwaltet dann den X-Bildschirm des lokalen Rechners. XDM lässt sich bequem mit einem Eintrag in /etc/ttys (siehe ) bei jedem Start des Rechners aktivieren. In /etc/ttys sollte schon der nachstehende Eintrag vorhanden sein: ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure In der Voreinstellung ist dieser Eintrag nicht aktiv. Um den Eintrag zu aktivieren, ändern Sie den Wert in Feld 5 von off zu on und starten Sie &man.init.8; entsprechend der Anleitung in neu. Das erste Feld gibt den Namen des Terminals an, auf dem das Programm läuft. Im Beispiel wird ttyv8 verwendet, das heißt XDM läuft auf dem neunten virtuellen Terminal. XDM konfigurieren Das Verhalten und Aussehen von XDM steuern Sie mit Konfigurationsdateien, die im Verzeichnis /usr/local/lib/X11/xdm stehen. Üblicherweise finden Sie dort die folgenden Dateien vor: Datei Beschreibung Xaccess Regelsatz, der zur Autorisierung von Clients benutzt wird. Xresources Vorgabewerte für X-Ressourcen. Xservers Liste mit lokalen und entfernten Bildschirmen, die verwaltet werden. Xsession Vorgabe für das Startskript der Sitzung. Xsetup_* Skript, das dazu dient, Anwendungen vor der Anmeldung zu starten. xdm-config Konfiguration für alle auf der Maschine verwalteten Bildschirme. xdm-errors Fehlermeldungen des Servers. xdm-pid Die Prozess-ID des gerade laufenden XDM-Prozesses. Im Verzeichnis /usr/local/lib/X11/xdm befinden sich auch noch Skripten und Programme, die zum Einrichten der XDM-Oberfläche dienen. Der Zweck dieser Dateien und der Umgang mit ihnen wird in der Hilfeseite &man.xdm.1; erklärt. Wir gehen im Folgenden nur kurz auf ein paar der Dateien ein. Die vorgegebene Einstellung zeigt ein rechteckiges Anmeldefenster, in dem der Rechnername in großer Schrift steht. Darunter befinden sich die Eingabeaufforderungen Login: und Password:. Mit dieser Maske können Sie anfangen, wenn Sie das Erscheinungsbild von XDM verändern wollen. Xaccess Verbindungen zu XDM werden über das X Display Manager Connection Protocol (XDMCP) hergestellt. XDMCP-Verbindungen von entfernten Maschinen werden über den Regelsatz in Xaccess kontrolliert. Diese Datei wird allerdings ignoriert, wenn in xdm-config keine Verbindungen entfernter Maschinen erlaubt sind (dies ist auch die Voreinstellung). Xresources In dieser Datei kann das Erscheinungsbild der Bildschirmauswahl und der Anmeldemasken festgelegt werden. Das Format entspricht den Dateien im Verzeichnis app-defaults, die in der X11-Dokumentation beschrieben sind. Xservers Diese Datei enthält eine Liste entfernter Maschinen, die in der Bildschirmauswahl angeboten werden. Xsession Dieses Skript wird vom XDM aufgerufen, nachdem sich ein Benutzer erfolgreich angemeldet hat. Üblicherweise besitzt jeder Benutzer eine angepasste Version dieses Skripts in ~/.xsession, das dann anstelle von Xsession ausgeführt wird. Xsetup_* Diese Skripten werden automatisch ausgeführt bevor die Bildschirmauswahl oder die Anmeldemasken angezeigt werden. Für jeden lokalen Bildschirm gibt es ein Skript, dessen Namen aus Xsetup_ gefolgt von der Bildschirmnummer gebildet wird (zum Beispiel Xsetup_0). Normalerweise werden damit ein oder zwei Programme, wie xconsole, im Hintergrund gestartet. xdm-config Diese Datei enthält Einstellungen, die für jeden verwalteten Bildschirm zutreffen. Das Format entspricht dem der Dateien aus app-defaults. xdm-errors Die Ausgaben jedes X-Servers, den XDM versucht zu starten, werden in dieser Datei gesammelt. Wenn ein von XDM verwalteter Bildschirm aus unbekannten Gründen hängen bleibt, sollten Sie in dieser Datei nach Fehlermeldungen suchen. Für jede Sitzung werden die Meldungen auch in die Datei ~/.xsession-errors des Benutzers geschrieben. Einrichten eines Bildschirm-Servers auf dem Netzwerk Damit sich Clients mit dem Bildschirm-Server verbinden können, muss der Zugriffsregelsatz editiert werden und der Listener aktiviert werden. Die Vorgabewerte sind sehr restriktiv eingestellt. Damit XDM Verbindungen annimmt, kommentieren Sie eine Zeile in der xdm-config Datei aus: ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 Starten Sie danach XDM neu. Beachten Sie, dass Kommentare in den Ressourcen-Konfigurationsdateien mit einem ! anstelle des sonst üblichen Zeichens # beginnen. Wenn Sie strengere Zugriffskontrollen einrichten wollen, sehen Sie sich die Beispiele in Xaccess und die Hilfeseite &man.xdm.1; an. XDM ersetzen Es gibt mehrere Anwendungen, die XDM ersetzen können, zum Beispiel kdm, der Teil von KDE ist und später in diesem Kapitel besprochen wird. kdm ist ansprechender gestaltet und bietet neben einigen Schnörkeln die Möglichkeit, den zu verwendenden Window-Manager bei der Anmeldung auszuwählen. Valentino Vaschetto Beigetragen von Grafische Oberflächen Dieser Abschnitt beschreibt verschiedene grafische Oberflächen, die es für X unter FreeBSD gibt. Eine Oberfläche (desktop environment) kann alles von einem einfachen Window-Manager bis hin zu kompletten Anwendungen wie KDE oder GNOME sein. GNOME Über GNOME GNOME GNOME ist eine benutzerfreundliche Oberfläche, mit der Rechner leicht benutzt und konfiguriert werden können. GNOME besitzt eine Leiste, mit der Anwendungen gestartet werden und die Statusinformationen anzeigen kann. Programme und Daten können auf der Oberfläche abgelegt werden und Standardwerkzeuge stehen zur Verfügung. Es gibt Konventionen, die es Anwendungen leicht machen, zusammenzuarbeiten und ein konsistentes Erscheinungsbild garantieren. Benutzer anderer Betriebssysteme oder anderer Arbeitsumgebungen sollten mit der leistungsfähigen grafischen Oberfläche von GNOME sehr gut zurechtkommen. Auf der Webseite FreeBSD GNOME Project finden Sie weitere Informationen über GNOME auf FreeBSD. Zusätzlich finden Sie dort umfassende FAQs zur Installation, Konfiguration und zum Betrieb von GNOME. GNOME installieren Am einfachsten installieren Sie GNOME als Paket oder über die Ports-Sammlung. Wenn Sie das GNOME-Paket über das Netz installieren wollen, setzen Sie den nachstehenden Befehl ab: &prompt.root; pkg_add -r gnome2 Wenn Sie den Quellcode von GNOME übersetzen wollen, benutzen Sie die Ports-Sammlung: &prompt.root; cd /usr/ports/x11/gnome2 &prompt.root; make install clean Nachdem GNOME installiert ist, muss der X-Server GNOME anstelle eines Window-Managers starten. Der einfachste Weg, GNOME zu starten, ist GDM, der GNOME Display Manager. GDM, das als Teil des GNOME-Desktops installiert (aber in der Voreinstellung deaktiviert) wird, kann durch das Einfügen von gdm_enable="YES" in /etc/rc.conf beim Systemstart aktiviert werden. Nach einem Systemneustart wird GNOME nach dem Anmelden automatisch gestartet. GNOME kann auch von der Kommandozeile gestartet werden, wenn Sie eine entsprechend konfigurierte .xinitrc in Ihrem Heimatverzeichnis besitzen. Existiert eine solche Version, ersetzen Sie den Aufruf des Window-Managers durch /usr/local/bin/gnome-session. Wenn .xinitrc nicht gesondert angepasst wurde, reicht es, den nachstehenden Befehl abzusetzen: &prompt.user; echo "/usr/local/bin/gnome-session" > ~/.xinitrc Rufen Sie danach startx auf, um die GNOME Oberfläche zu starten. Wenn Sie einen älteren Display-Manager wie XDM verwenden, müssen Sie anders vorgehen. Legen Sie eine ausführbare .xsession an, die das Kommando zum Start von GNOME enthält. Ersetzen Sie dazu den Start des Window-Managers durch /usr/local/bin/gnome-session: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/local/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession Sie können den Display-Manager auch so konfigurieren, dass der Window-Manager beim Anmelden gewählt werden kann. Im Abschnitt Details zu KDE wird das für kdm, den Display-Manager von KDE erklärt. Anti-aliasing-Verfahren mit GNOME GNOME Anti-Aliasing-Verfahren Die RENDER-Erweiterung von X11 setzt das Anti-Aliasing-Verfahren um. GTK+ 2.0 (das GNOME-Toolkit) und spätere Versionen benutzen dieses Verfahren. Die Konfiguration des Verfahrens ist in beschrieben. Aktivieren Sie Anti-Aliasing im Menü Applications Desktop Preferences Font . Dort wählen Sie dann eine der Möglichkeiten Best shapes, Best contrast oder Subpixel smoothing (LCDs). Für GTK+-Anwendungen, die nicht Teil von GNOME sind, setzen Sie die Umgebungsvariable GDK_USE_XFT vor dem Start der Anwendung auf den Wert 1. KDE Über KDE KDE KDE ist eine moderne, leicht zu benutzende Oberfläche, die unter anderem Folgendes bietet: eine schöne und moderne Oberfläche, eine Oberfläche, die völlig netzwerktransparent ist, ein integriertes Hilfesystem, das bequem und konsistent Hilfestellungen bezüglich der Bedienung der KDE-Oberfläche und ihrer Anwendungen gibt, ein konstantes Erscheinungsbild (look and feel) aller KDE-Anwendungen, einheitliche Menüs, Werkzeugleisten, Tastenkombinationen und Farbschemata, Internationalisierung: KDE ist in mehr als 40 Sprachen erhältlich, durch Dialoge gesteuerte zentrale Konfiguration der Oberfläche, viele nützliche KDE-Anwendungen. In KDE ist mit Konqueror auch ein Webbrowser enthalten, der sich durchaus mit anderen Webbrowsern auf &unix;-Systemen messen kann. Weitere Informationen über KDE erhalten Sie auf den KDE-Webseiten. Auf der Webseite KDE on FreeBSD finden Sie weitere FreeBSD-spezifische Informationen über KDE. KDE installieren Am einfachsten installieren Sie KDE, wie jede andere grafische Oberfläche auch als Paket oder über die Ports-Sammlung. Um KDE über das Netz zu installieren, setzen Sie den nachstehenden Befehl ab: &prompt.root; pkg_add -r kde &man.pkg.add.1; installiert automatisch die neuste Version einer Anwendung. Benutzen Sie die Ports-Sammlung, wenn Sie den Quellcode von KDE übersetzen wollen: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean Nachdem KDE installiert ist, muss der X-Server KDE anstelle eines Window-Managers starten. Legen Sie dazu die Datei .xinitrc an: &prompt.user; echo "exec startkde" > ~/.xinitrc Wenn das X-Window-System danach mit startx gestartet wird, erscheint die KDE-Oberfläche. Wird ein Display-Manager wie XDM benutzt, muss .xsession angepasst werden. Eine Anleitung für kdm folgt gleich in diesem Kapitel. Details zu KDE Wenn KDE erst einmal installiert ist, erschließen sich die meisten Sachen durch das Hilfesystem oder durch Ausprobieren. Benutzer von Windows oder &macos; werden sich sehr schnell zurecht finden. Die beste Referenz für KDE ist die Online-Dokumentation. KDE besitzt einen eigenen Webbrowser, sehr viele nützliche Anwendungen und ausführliche Dokumentation. Der Rest dieses Abschnitts beschäftigt sich daher mit Dingen, die schlecht durch einfaches Ausprobieren erlernbar sind. Der KDE-Display-Manager KDE Display-Manager Der Administrator eines Mehrbenutzersystems will den Benutzern vielleicht eine grafische Anmeldung wie mit XDM ermöglichen. KDE besitzt einen eigenen Display-Manager, der schöner aussieht und auch über mehr Optionen verfügt. Insbesondere können sich die Benutzer die Oberfläche für die Sitzung (beispielsweise KDE oder GNOME) aussuchen. Um kdm zu aktivieren, müssen Sie den Eintrag ttyv8 in der Datei /etc/ttys anpassen. Die von Ihnen angepasste Zeile sollte ähnlich der folgenden aussehen: ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure XFce Über XFce XFce ist eine grafische Oberfläche, die auf den GTK+-Bibliotheken, die auch von GNOME benutzt werden, beruht. Die Oberfläche ist allerdings weniger aufwändig und für diejenigen gedacht, die eine schlichte und effiziente Oberfläche wollen, die dennoch einfach zu benutzen und zu konfigurieren ist. Die Oberfläche sieht ähnlich wie CDE aus, das in kommerziellen &unix; Systemen verwendet wird. Einige Merkmale von XFce sind: eine schlichte einfach zu benutzende Oberfläche, vollständig mit Mausoperationen konfigurierbar, Unterstützung von drag and drop, ähnliche Hauptleiste wie CDE, die Menüs enthält und über die Anwendungen gestartet werden können, integrierter Window-Manager, Datei-Manager und Sound-Manager, GNOME-compliance-Modul, mit Themes anpassbar (da GTK+ benutzt wird), schnell, leicht und effizient: ideal für ältere oder langsamere Maschinen oder Maschinen mit wenig Speicher. Weitere Information über XFce erhalten Sie auf der XFce-Webseite. XFce installieren Das XFce-Paket installieren Sie mit dem nachstehenden Kommando: &prompt.root; pkg_add -r xfce4 Mit der Ports-Sammlung können Sie auch den Quellcode übersetzen: &prompt.root; cd /usr/ports/x11-wm/xfce4 &prompt.root; make install clean Damit beim nächsten Start des X-Servers XFce benutzt wird, setzen Sie das folgende Kommando ab: &prompt.user; echo "/usr/local/bin/startxfce4" > ~/.xinitrc Wenn Sie einen Display-Manager benutzen, erstellen Sie die Datei .xsession, wie im GNOME Abschnitt beschrieben. Verwenden Sie jetzt allerdings das Kommando /usr/local/bin/startxfce4. Sie können auch den Display-Manager wie im kdm Abschnitt beschrieben, so konfigurieren, dass die Oberfläche für die Sitzung ausgewählt werden kann. diff --git a/de_DE.ISO8859-1/books/porters-handbook/book.sgml b/de_DE.ISO8859-1/books/porters-handbook/book.sgml index da51e54aa5..a567a0f62c 100644 --- a/de_DE.ISO8859-1/books/porters-handbook/book.sgml +++ b/de_DE.ISO8859-1/books/porters-handbook/book.sgml @@ -1,14060 +1,14079 @@ %books.ent; ]> Das FreeBSD Porter-Handbuch The FreeBSD German Documentation Project April 2000 2000 2001 2002 2003 2004 2005 2006 2007 + 2008 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. 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 + 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 + + 6.3-STABLE, nachdem der Support für den + Multibyte-Datentyp im Bit-Makro gefixt wurde. + 603101 + 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-CURRENT, nach der Trennung in "wide und single byte ctype". 700054 - 7.0-CURRENT, nachdem die + 7.0-RELEASE sowie 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 + + 7.0-STABLE nach 7.0-RELEASE. + 700100 + 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 + + 8.0-CURRENT, nach dem Hinzufügen der + callgraph capture Funktionalität zu &man.hwpmc.4;. + 800006 + + + 8.0-CURRENT nach dem Hinzufügen von "why" + als Argument in kdb_enter(). + 800007 +
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.
diff --git a/de_DE.ISO8859-1/flyer/flyer.tex b/de_DE.ISO8859-1/flyer/flyer.tex index 74acf26b4b..39bedabbdc 100644 --- a/de_DE.ISO8859-1/flyer/flyer.tex +++ b/de_DE.ISO8859-1/flyer/flyer.tex @@ -1,218 +1,218 @@ -% Copyright (c) 2004-2006 Marc Fonvieille +% Copyright (c) 2004-2008 Marc Fonvieille % All rights reserved. % % Redistribution and use in source and binary forms, with or without % modification, are permitted provided that the following conditions % are met: % 1. Redistributions of source code must retain the above copyright % notice, this list of conditions and the following disclaimer. % 2. Redistributions in binary form must reproduce the above copyright % notice, this list of conditions and the following disclaimer in the % documentation and/or other materials provided with the distribution. % % THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND % ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE % IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE % ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE % FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL % DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS % OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) % HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT % LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY % OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF % SUCH DAMAGE. % % $FreeBSD$ -% $FreeBSDde: de-docproj/flyer/flyer.tex,v 1.7 2007/01/14 14:00:27 jkois Exp $ -% basiert auf: 1.14 +% $FreeBSDde: de-docproj/flyer/flyer.tex,v 1.9 2008/01/13 23:17:45 miwi Exp $ +% basiert auf: 1.16 % % FreeBSD Flyer % Use make FORMAT (with FORMAT: pdf, ps or dvi) to build the flyer. % Two layouts are available: one using Beastie the other one using the % FreeBSD Logo. The layout selection is done below via the value of % the \logo variable. By default the Beastie layout is enabled. % \documentclass[11pt]{article} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} % Use the right language \usepackage[german]{babel} \usepackage{pslatex} \usepackage{graphicx} \usepackage{fancybox} \usepackage{url} % Use the right papersize, do not forget to change also the Makefile \usepackage[verbose,a4paper,noheadfoot,margin=1cm]{geometry} \usepackage{ifthen} % Use of the Logo (set the \logo variable below to true) or Beastie % (\logo variable set to false). \newcommand{\logo}{false} % Colors settings \usepackage{color} \ifthenelse{\equal{\logo}{true}}{ \definecolor{bkgrdtitle}{rgb}{.69,0,0} \definecolor{redtitle}{rgb}{.65,.16,.22} \definecolor{ovalboxcolor}{rgb}{.69,0,0} } { \definecolor{bkgrdtitle}{rgb}{1,.84,.22} \definecolor{redtitle}{rgb}{.65,.16,.22} \definecolor{ovalboxcolor}{rgb}{.65,.16,.22} } % Some macros \ifthenelse{\equal{\logo}{true}}{ \newcommand{\titledframe}[3]{% \boxput*(0,1){\colorbox{bkgrdtitle}{\color{white} \large{\textbf{\textsf{#1}}}}} {\setlength {\fboxsep}{12pt} \color{ovalboxcolor}\Ovalbox {\color{black}\begin{minipage}{#3}#2\end{minipage}}} }} { \newcommand{\titledframe}[3]{% \boxput*(0,1){\colorbox{bkgrdtitle}{\color{black} \large{\textbf{\textsf{#1}}}}} {\setlength {\fboxsep}{12pt} \color{ovalboxcolor}\Ovalbox {\color{black}\begin{minipage}{#3}#2\end{minipage}}} }} \newcommand{\reg}{$^{\mbox{\tiny \textregistered}}$} \newcommand{\tm}{$^{\mbox{\tiny TM}}$} \newenvironment{itemizeflyer}% { \begin{list}% {\textendash}% { \setlength{\leftmargin}{5pt}% \setlength{\itemsep}{0pt}% \setlength{\parskip}{0pt}% \setlength{\parsep}{0pt}}} { \end{list}} \pagestyle{empty} \begin{document} \begin{center} \ifthenelse{\equal{\logo}{true}}{ \includegraphics[scale=0.4]{logo-full.eps} \vspace{1mm} } { \fontsize{40}{36}\selectfont {\color{redtitle} \textrm{\textbf{FreeBSD}}}\medskip} \end{center} %\vspace{2mm} % Main part \begin{center} \ifthenelse{\equal{\logo}{true}}{ \newcommand{\size}{17.3cm} } {\newcommand{\size}{12.7cm}} \titledframe{Was ist FreeBSD?}{ FreeBSD ist ein modernes Betriebssystem für x86-kompatible (einschließlich Pentium\reg und Athlon\tm), amd64-kompatible (einschließlich Opteron\tm, Athlon\tm 64 und EM64T), UltraSPARC\reg-, IA-64- (Intel\reg Itanium\reg Prozessor-Familie), PC-98- sowie ARM-Architekturen. FreeBSD stammt von BSD, dem UNIX\reg-Betriebssystem der University of California, Berkeley, ab. }{\size} \ifthenelse{\equal{\logo}{false}}{ \begin{minipage}{4cm} \includegraphics[scale=0.3]{../../share/images/flyer/beastie.eps} \end{minipage} } \ifthenelse{\equal{\logo}{true}}{ \vspace{5mm}}{\vspace{3mm}} \titledframe{Herausragende Funktionen}{ In den Bereichen Netzwerk, Leistungsfähigkeit, Sicherheit und Kompatibilität besitzt FreeBSD heute schon Funktionen, die in anderen Betriebssystemen, selbst in den besten kommerziellen, fehlen. }{5cm} \titledframe{\textsf{\textbf{Leistungsfähige Internet-Dienste}}}{ FreeBSD enthält eine von vielen Leuten als Referenzimplementierung betrachtete TCP/IP-Software, den 4.4BSD TCP/IP-Protokoll-Stack. Es ist daher ideal für Netzwerkanwendungen und das Internet. FreeBSD ist bestens geeignet für Internet- oder Intranet-Server. Auch unter höchsten Lasten arbeiten die Netzwerkdienste zuverlässig. Der effiziente Umgang mit dem Speicher garantiert schnelle Antwortzeiten für tausende gleichzeitig laufende Benutzerprozesse. }{11.12cm} \vspace{5mm} \titledframe{Wählen Sie aus einer Vielzahl von Anwendungen!}{ -FreeBSD wird mit mehr als 14.000 installationsfertigen Softwarepaketen +FreeBSD wird mit mehr als 17.000 installationsfertigen Softwarepaketen ausgeliefert, unter anderem: Apache, Samba, MySQL\reg, OpenOffice.org, KDE, GNOME, MPlayer, etc. \medskip FreeBSD bietet die Ports-Sammlung, ein System, das Quellcode aus dem Internet oder von einer CD-ROM herunterlädt und daraus Binärdateien kompiliert, inklusive dem Bau und der Installation von abhängigen Paketen. Alle Operationen sind dabei für den Benutzer transparent. \medskip Die meisten GNU/Linux-Applikationen sind auch unter FreeBSD lauffähig. So laufen etwa Acrobat Reader\reg, Oracle\reg, SAP/R3\reg, Mathematica\reg, Quake3, etc. ohne merkliche Geschwindigkeitsverluste. }{17.3cm} \vspace{5mm} \titledframe{FreeBSD ist einfach zu installieren}{ FreeBSD kann von verschiedenen Medien, wie CD-ROM, DVD-ROM, Disketten, Bandlaufwerken, MS-DOS\reg Partitionen, oder auch über eine Netzwerkverbindung (per anonymem FTP oder NFS) installiert werden. }{17.3cm} \vspace{5mm} \titledframe{FreeBSD ist frei}{ FreeBSD ist kostenlos verfügbar und wird mit vollständigem Quellcode ausgeliefert. Der Großteil dieses Quellcodes steht unter der BSD-Lizenz. Im Gegensatz zur GPL-Lizenz des Linux Kernels erlaubt es die BSD-Lizenz, veränderte Versionen des Originalquellcodes als Binärdateien zu verbreiten, ohne den Quellcode mitliefern zu müssen. Dies führt dazu, dass Firmen den FreeBSD-Quellcode als Basis für ihre Produkte nutzen. Oft fließen dabei Teile des weiterentwickelten Codes zurück an die Gemeinschaft. }{17.3cm} \vspace{5mm} \titledframe{Für nahezu jede Aufgabe geeignet}{ FreeBSD ist für eine große Anzahl von Desktop-, Server-, Embedded- und Applianceanwendungen gut geeignet. Heutzutage ist FreeBSD nicht nur ein Betriebssystem für Server, sondern bietet sich auch für Endnutzer, vor allem Umsteiger von Windows\reg und GNU/Linux, an. }{17.3cm} \vspace{5mm} \titledframe{Kontakt}{ \begin{itemizeflyer} \item Webseite: \url{http://www.FreeBSD.org/de/} \item FreeBSD-Handbuch: \url{http://www.FreeBSD.org/de/handbook/} \end {itemizeflyer} }{17.3cm} \end{center} % % Copyrights \begin{center} -\tiny \copyright 2004-2006 The FreeBSD Project\\ +\tiny \copyright 2004-2008 The FreeBSD Project\\ \ifthenelse{\equal{\logo}{true}}{ FreeBSD und das FreeBSD-Logo sind registrierte Markenzeichen der FreeBSD Foundation.\\} {FreeBSD ist ein registriertes Markenzeichen der FreeBSD Foundation.\\} Alle anderen Firmen- und Produktnamen können Markenzeichen der jeweiligen Firmen sein.\\ \ifthenelse{\equal{\logo}{false}}{ BSD Daemon, \copyright 1988 von Marshall Kirk McKusick. Alle Rechte vorbehalten.}{} \end{center} \end{document}