diff --git a/documentation/content/de/articles/contributing/_index.adoc b/documentation/content/de/articles/contributing/_index.adoc index 2fa43e3832..7fc45f3cd8 100644 --- a/documentation/content/de/articles/contributing/_index.adoc +++ b/documentation/content/de/articles/contributing/_index.adoc @@ -1,234 +1,246 @@ --- title: FreeBSD unterstützen authors: - author: Jordan Hubbard releaseinfo: "$FreeBSD$" trademarks: ["freebsd", "ieee", "general"] --- = FreeBSD unterstützen :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/de/mailing-lists.adoc[] include::shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/de/urls.adoc[] +include::../../../../shared/de/mailing-lists.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/de/urls.adoc[] +include::../../../../shared/de/mailing-lists.adoc[] +endif::[] [.abstract-title] Zusammenfassung Dieser Artikel beschreibt, wie Einzelpersonen oder Unternehmen das FreeBSD-Projekt unterstützen können. __Übersetzt von Johann Kois__. ''' toc::[] Sie wollen FreeBSD unterstützen? Das ist großartig! FreeBSD ist auf die Unterstützung seiner Anwender __angewiesen__, um zu überleben. Ihre Beiträge werden nicht nur begrüßt, sie sind für die Weiterentwicklung von FreeBSD von elementarer Bedeutung. Im Gegensatz zu dem, was einige Leute Ihnen einreden wollen, müssen Sie kein Spitzenprogrammierer oder persönlicher Freund eines Mitglieds des FreeBSD-Core-Teams sein, damit Ihre Beiträge akzeptiert werden. Ein große und wachsende Anzahl von internationalen Unterstützern verschiedenen Alters und mit verschiedenen technischen Fähigkeiten entwickelt FreeBSD weiter. Es gibt immer mehr zu tun, als von den beteiligten Personen bewältigt werden kann, daher freuen wir uns über jede Hilfe. Das FreeBSD-Projekt ist für ein komplettes Betriebssytem verantwortlich, nicht nur für einen Kernel oder ein paar verstreute Werkzeuge. Daher umfasst unsere [.filename]#TODO#-Liste viele verschiedene Aufgabenbereiche: Angefangen von der Dokumentation, über Betatests und Präsentationen bis zu Systeminstallationen und speziellen Weiterentwicklungen des Kernels. Da Fähigkeiten in den verschiedensten Bereichen benötigt werden, kann fast jeder etwas zu diesem Projekt beitragen. Personen, die im kommerziellen Umfeld mit FreeBSD zu tun haben, sind ebenfalls aufgefordert, sich bei uns zu melden. Brauchen Sie eine spezielle Erweiterung, damit Ihr Produkt funktioniert? Wir kommen Ihren Wünschen gerne entgegen, vorausgesetzt, sie sind nicht zu speziell. Arbeiten Sie an einem Mehrwertprodukt? Dann informieren Sie uns bitte! Wir könnten in der Lage sein, an einem Teil davon mitzuarbeiten. Die Welt der freien Software fordert viele bestehenden Annahmen über die Entwicklung, den Verkauf und die Wartung von Software heraus, und wir bitten Sie, ernsthaft darüber nachzudenken. [[contrib-what]] == Was wird gebraucht? Die folgende Liste von Aufgaben und Unterprojekten repräsentiert eine Zusammenfassung von verschiedenen [.filename]#TODO#-Listen und Benutzerwünschen. [[non-programmer-tasks]] === Aufgaben für Nicht-Programmierer Viele Menschen, die an FreeBSD beteiligt sind, sind keine Programmierer. Es sind Leute, die an der Dokumentation arbeiten, Internetseiten erstellen oder einfach Hilfe anbieten. Alles, was diese Leute mitbringen müssen, sind Zeit und die Bereitschaft, etwas zu lernen. . Lesen Sie die häufig gestellten Fragen (FAQ) und das Handbuch gelegentlich. Wenn etwas schlecht erklärt wird, veraltet oder einfach falsch ist, teilen Sie es uns mit. Oder noch besser, korrigieren Sie es (SGML ist nicht schwer zu erlernen, wir akzeptieren aber auch Vorschläge im ASCII-Format.). . Helfen Sie dabei, die Dokumentation in Ihre Muttersprache zu übersetzen. Wenn an der Übersetzung in Ihre Sprache bereits gearbeitet wird, helfen Sie, indem Sie weitere Dokumente übersetzen, oder sorgen Sie dafür, dass die Übersetzungen aktuell sind. Lesen Sie zuerst die link:{fdp-primer}#translations[Übersetzungs-FAQ] der Fibel für neue Mitarbeiter des FreeBSD-Dokumentations-Projekts. Sie verpflichten sich dabei nicht dazu, jede einzelne Seite zu übersetzen - als Freiwilliger übersetzen Sie genau so viel, wie Sie wollen. Wenn jemand mit der Übersetzung beginnt, beteiligen sich fast immer auch andere Personen daran. Wenn Sie nur Zeit und Energie für einen Teil der Dokumentation haben, dann übersetzen Sie bitte die Installationsanleitung. . Lesen Sie {freebsd-questions} sowie die news:comp.unix.bsd.freebsd.misc gelegentlich (oder sogar regelmäßig). Es kann sehr befriedigend sein, wenn Sie Ihr Wissen teilen und anderen Leuten dabei helfen können, deren Probleme zu lösen; vielleicht lernen Sie sogar noch etwas Neues! Diese Foren können auch eine Quelle für Ideen sein, an denen man arbeiten könnte. [[ongoing-programmer-tasks]] === Aufgaben für Programmierer Die meisten der hier aufgeführten Aufgaben erfordern entweder einen bedeutenden Zeitaufwand oder eine sehr gute Kenntnis des FreeBSD-Kernels, oder beides. Es gibt jedoch genug Aufgaben, die auch für "Wochenendprogrammierer" geeignet sind. . Wenn Sie FreeBSD-CURRENT installiert haben und über eine schnelle Internetanbindung verfügen, können Sie von `current.FreeBSD.org` ein täglich neu erzeugtes Release herunterladen - versuchen Sie dann hin und wieder, das neueste Release zu installieren und melden Sie dabei eventuell auftretende Fehler. . Lesen Sie {freebsd-bugs}. Es könnte ein Problem geben, an dem Sie konstruktiv mitarbeiten könnten, oder für das es Patches gibt, die Sie testen könnten. Oder Sie könnten sogar versuchen, eines dieser Probleme selbst zu beheben. . Wenn Sie von Fehlerbehebungen wissen, die zwar erfolgreich auf -CURRENT angewendet wurden, die aber nach einem bestimmten Zeitraum nicht in -STABLE eingebracht wurden (normalerweise innerhalb einiger Wochen), erinnern Sie den Committer höflich daran. . Verschieben Sie beigetragene Software im Quellcodebaum nach [.filename]#src/contrib#. . Stellen Sie sicher, dass der Code in [.filename]#src/contrib# aktuell ist. . Bauen Sie den Quellcodebaum (oder einen Teil des Baumes) mit aktivierten Compilerwarnungen und beheben Sie auftretende Fehlermeldungen. . Beheben Sie Fehlermeldungen bei der Installation von Ports, die auf unsauberen Code hinweisen (etwa die Verwendung von `gets()` oder die Einbindung von [.filename]#malloc.h#). . Wenn Sie einen Port beigetragen und dabei irgendwelche FreeBSD-spezifischen Änderungen getätigt haben, senden Sie Ihre Patches an die ursprünglichen Autoren (das wird ihr Leben einfacher machen, wenn die nächste Version des Ports erscheint). . Besorgen Sie sich Kopien von wichtigen Standards wie POSIX(R). Als Ausgangspunkt für Ihre Suche können Sie die Seite des link:https://www.FreeBSD.org/projects/c99/[FreeBSD C99 & POSIX Standards Conformance Project] verwenden. Vergleichen Sie das Verhalten von FreeBSD mit dem von dem jeweiligen Standard geforderten Verhalten. Verhält sich FreeBSD in einem Bereich unterschiedlich, sollten Sie einen Problembericht (PR) einsenden. Wenn Sie dazu in der Lage sind, können Sie sich auch eine Lösung des Problems überlegen und Ihrem PR einen Patch anfügen. Wenn Sie der Meinung sind, dass der Standard nicht korrekt ist, können Sie auch das jeweilige Standardgremium um weitere Informationen bitten. . Schlagen Sie weitere Aufgaben für diese Liste vor! === Die PR-Datenbank durchsehen Die http://www.FreeBSD.org/cgi/query-pr-summary.cgi[FreeBSD PR-Datenbank] enthält alle derzeit offenen Problemberichte und Verbesserungswüsche, die von Anwendern eingereicht wurden. Die PR-Datenbank enthält sowohl Aufgaben für Programmierer als auch für Nichtprogrammierer. Gehen Sie die Liste der offenen PRs durch, um festzustellen, ob Sie ein Problem interessiert. Bei manchen Berichten geht es nur darum, zu überprüfen, ob der bereitgestellte Patch korrekt funktioniert. Andere Problemberichte sind hingegen komplexer, oder beinhalten überhaupt keinen Lösungsvorschlag. Beginnen Sie mit den PRs, die niemandem zugewiesen sind. Ist ein PR, für den Sie eine Lösung hätten, bereits jemandem zugewiesen, nehmen Sie mit dem dafür Zuständigen Kontakt auf und fragen Sie ihn, ob Sie an der Lösung mitarbeiten können - es könnte etwa bereits ein Patch existieren, der nur noch getestet werden muss, oder Sie könnten weitere Ideen mit ihm diskutieren. === Wählen Sie einen der Einträge auf der "Ideen"-Seite aus Die link:https://www.FreeBSD.org/projects/ideas/[Liste von Projekten und Ideen] für FreeBSD ist auch für Freiwillige interessant, die etwas zum FreeBSD Projekt beitragen möchten. Diese Liste wird regelmäßig aktualisiert und enthält Einträge für Programmierer und Nicht-Programmierer sowie Informationen zu jedem Projekt. [[contrib-how]] == Was Sie tun können Mögliche Beiträge lassen sich in fünf Kategorien einteilen: [[contrib-general]] === Fehlerberichte und allgemeine Vorschläge Eine Idee oder ein Vorschlag von _allgemeinem_ technischen Interesse sollte an {freebsd-hackers} geschickt werden. Personen, die an solchen Fragen interessiert sind (und kein Problem mit einem _hohen_ Mailaufkommen haben!) können die Mailingliste {freebsd-hackers} auch abonnieren. Informationen zu dieser und anderen Mailinglisten finden Sie im link:{handbook}#eresources-mail[FreeBSD Handbuch]. Wenn Sie einen Fehler gefunden oder eine Verbesserung entwickelt haben, vergessen Sie nicht, einen Bericht über man:send-pr[1] oder dessen link:https://www.FreeBSD.org/de/send-pr/[Internetschnittstelle] zu erstellen. Versuchen Sie bitte, jedes Feld auszufüllen. Ist Ihr Patch kleiner als 65 KB, sollten Sie ihn direkt in den Bericht einbauen. Kann der Patch direkt auf den Quellcodebaum angewendet werden, fügen Sie `[PATCH]` im Synopsis-Feld ein. Wenn Sie einen Patch einfügen, verwenden Sie bitte __kein copy-and-paste__, weil dadurch Tabulatoren in Leerzeichen umgewandelt werden, was den Patch unbrauchbar macht. Sind die Patches viel größer als 20 KB, sollten Sie sie komprimieren (z.B. mit man:gzip[1] oder man:bzip2[1]) und man:uuencode[1] verwenden, um diese in ihren Problembericht einzufügen. Nachdem Sie einen Bericht versandt haben, erhalten Sie eine E-Mail, die eine Bestätigung sowie eine Identifikationsnummer enthält. Geben Sie diese Nummer im Betreff der Nachricht an (`"Re: kern/3377"`), wenn Sie neue Informationen zu diesem Problem an {bugfollowup} senden. Zusätzliche Informationen zu Problemberichten sollten immer auf diese Art und Weise verschickt werden. Sollten Sie innerhalb einer Woche keine Bestätigung erhalten, oder man:send-pr[1] nicht verwenden können, können Sie über {freebsd-bugs} jemanden bitten, dies für Sie zu erledigen. Weitere Informationen zum Verfassen von guten Problemberichten finden Sie im entsprechenden link:{problem-reports}[Artikel]. === Änderungen der Dokumentation Änderungen der Dokumentation werden vom {freebsd-doc} überwacht. Lesen Sie bitte die link:{fdp-primer}[Fibel für neue Mitarbeiter des FreeBSD-Dokumentationsprojekts] für weitere Informationen. Korrekturen und Ergänzungen (selbst kleine Änderungen sind willkommen!) werden mit man:send-pr[1] übermittelt. Lesen Sie dazu den Abschnitt <>. === Änderungen am vorhandenen Quellcode Änderungen des existierenden Quellcodes sind etwas komplizierter. Entscheidend ist hier, wie vertraut Sie mit dem aktuellen Entwicklungsstand von FreeBSD sind. Es existiert eine spezielle, ständig aktualisierte Version von FreeBSD, die als "FreeBSD-CURRENT" bekannt ist. Diese ist auf verschiedenen Wegen erhältlich und stellt den aktuellen Stand der Entwicklung dar. Lesen Sie den Abschnitt link:{handbook}#current-stable[FreeBSD-CURRENT vs. FreeBSD-STABLE] des Handbuchs für weitere Informationen zur Installation und Verwendung von FreeBSD-CURRENT. Arbeiten Sie mit älteren Quellcodeversionen, kann dies leider bedeuten, das Ihre Änderungen obsolet sind, oder sich nicht mehr in FreeBSD reintegrieren lassen. Dieses Risiko lässt sich verringern, wenn Sie die Mailinglisten {freebsd-announce} und {freebsd-current} abonnieren, auf denen aktuelle Systemänderungen diskutiert werden. Wenn Ihre Änderungen auf ausreichend aktuellen Quellen beruhen, erstellen Sie als Nächstes einen Differenzensatz, den Sie an die FreeBSD-Entwickler schicken. Eine solche Differenz erstellen Sie mit man:diff[1]. Das bevorzugte man:diff[1]-Format für das Versenden von Patches ist das sogenannte unified output-Format, das Sie mit `diff -u` erstellen. Für größere Änderungen kann allerdings das context output-Format (erzeugt mit `diff -c`) die bessere Wahl sein. Dazu ein Beispiel: [source,shell] .... % diff -c oldfile newfile .... oder [source,shell] .... % diff -c -r olddir newdir .... würde einen solchen Satz von Differenzen für die angegebene Verzeichnishierarchie erzeugen. Genauso hätte [source,shell] .... % diff -u oldfile newfile .... oder [source,shell] .... % diff -u -r olddir newdir .... den gleichen Effekt, allerdings erfolgt die Ausgabe im unified diff-Format. Lesen Sie dazu auch man:diff[1]. Nachdem Sie den Differenzensatz erstellt und mit man:patch[1] getestet haben, sollten Sie ihn an das FreeBSD-Projekt senden. Verwenden Sie dazu man:send-pr[1] (wie im Abschnitt <> beschrieben). Senden Sie die Differenzen _nicht nur_ an {freebsd-hackers}, da diese sonst verloren gehen. Wir freuen uns über Ihren Beitrag (schließlich ist FreeBSD ein Freiwilligenprojekt); wir sind aber manchmal nicht in der Lage, das Problem sofort anzugehen. Es verbleibt aber in der PR-Datenbank, bis wir dafür Zeit finden. Verwenden Sie den Begriff `[PATCH]` im Synopsis-Feld des Berichts. Sie können auch ein `tar`-Archiv erzeugen (was vor allem dann sinnvoll ist, wenn Sie Dateien hinzugefügt, gelöscht oder umbenannt haben) und man:uuencode[1] auf das Archiv anwenden. Mit man:shar[1] erzeugte Archive sind ebenfalls willkommen. Wenn Ihre Änderungen potentielle Probleme aufweisen, wie Unklarheiten im Hinblick auf das Copyright, oder Sie einfach eine genaue Überprüfung Ihrer Änderungen möchten, sollten Sie die Änderungen an das {core-name} schicken, statt sie mit man:send-pr[1] zu versenden. Die Mailingliste {core-name} erreicht nur eine kleine Gruppe von Leuten, die sich um die tägliche Arbeit an FreeBSD kümmern. Beachten Sie aber, dass diese Gruppe _sehr beschäftigt_ ist. Daher sollten Sie nur dann eine E-Mail an sie schicken, wenn es absolut notwendig ist. man:intro[9] und man:style[9] beschreiben den zu verwendenden Programmierstil. Bevor Sie also Code versenden, sollten Sie diese Informationen gelesen haben. === Neuer Code oder große Mehrwertpakete Handelt es sich um einen bedeutenden Beitrag oder um das Hinzufügen von neuen wichtigen Fähigkeiten zu FreeBSD, ist es fast immer notwendig, die Änderungen als uuencoded tar-Dateien zu versenden, oder diese auf einer Internetseite oder einem FTP-Server bereitzustellen. Haben Sie keinen eigenen Speicherplatz im Internet, sollten Sie auf einer entsprechenden Mailinglisten nachfragen, ob jemand diese Aufgabe für Sie übernehmen kann. Arbeitet man mit großen Codebeständen, kommt man unweigerlich mit den unterschiedlichen Lizenzen in Berührung. Code, der in FreeBSD enthalten ist, kann unter den folgenden Lizenzen stehen: . Der BSD-Lizenz. Diese Lizenz wird von uns bevorzugt, weil sie an "keine Bedingungen" geknüpft ist und daher für kommerzielle Unternehmen sehr attraktiv ist. Das FreeBSD-Projekt unterstützt diese kommerzielle Verwendung, die manchmal sogar in eine Förderung des FreeBSD-Projekts mündet. . Der GNU General Public License, oder "GPL". Diese Lizenz ist nicht ganz so beliebt bei uns, da sie die kommerzielle Nutzung des Quellcodes einschränkt. In Anbetracht der schieren Menge an GPL-Quellcode, den wir derzeit benötigen (wie Compiler, Assembler oder Textformatierer) wären wir aber schlecht beraten, Beiträge, die unter dieser Lizenz stehen, abzulehnen. Code, der unter der GPL steht, befindet sich in einem gesonderten Bereich des Quellcodebaums, und zwar unter [.filename]#/sys/gnu# oder [.filename]#/usr/src/gnu#, und ist daher für jeden, für den die GPL ein Problem darstellt, sofort erkennbar. Beiträge, die unter einer dieser Lizenzen stehen, müssen sorgfältig geprüft werden, bevor ihre Aufnahme in FreeBSD in Betracht gezogen wird. Beiträge, für die besonders restriktive Lizenzen gelten, werden generell abgelehnt, obwohl die Autoren ermutigt werden, ihre Veränderungen über ihre eigenen Kanäle verfügbar zu machen. Um Ihre Arbeit unter die "BSD-Lizenz" zu stellen, fügen Sie den folgenden Text am Beginn jeder von Ihnen erstellten Quellcodedatei ein, wobei Sie den Text zwischen den `%%`-Zeichen durch die entsprechenden Informationen ersetzt: [.programlisting] .... Copyright (c) %%Jahr der Veröffentlichung%% %%Ihr Name%%, %%Ihr Land%% %%Ihre Postleitzahl%%. 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 as the first lines of this file unmodified. 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 %%Ihr Name%% ``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 %%Ihr Name%% 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. $Id$ .... Eine Kopie dieses Textes finden Sie unter [.filename]#/usr/shared/examples/etc/bsd-style-copyright#. === Geld, Hardware oder Internetzugang Wir freuen uns immer, wenn jemand das FreeBSD-Projekt durch Spenden unterstützen will. Auch kleine Spenden können eine große Wirkung haben. Hardwarespenden sind ebenfalls sehr wichtig, um die Liste der von FreeBSD unterstützten Hardware erweitern zu können, da uns die Mittel zum Erwerb dieser Hardware fehlen. [[donations]] ==== Geldspenden Die FreeBSD Foundation ist eine gemeinnützige Gesellschaft, die zur Unterstützung des FreeBSD-Projekts geschaffen wurde. Sie ist nach dem Paragraphen 501(c)3 sowohl von der amerikanischen Einkommenssteuer als auch von der des Staates Colorado befreit. Spenden an solche steuerbefreiten Gesellschaften können unter gewissen Umständen steuermindernd geltend gemacht werden. Sie können Spenden in Scheckform an folgende Adresse senden: [.address] **** The FreeBSD Foundation + P.O. Box 20247, + Boulder, + CO 80308 + USA **** Die FreeBSD Foundation ist nun auch in der Lage, Spenden durch das PayPal-System entgegenzunehmen. Solche Spenden können über die http://www.freebsdfoundation.org[Homepage] der Foundation erfolgen. Für weitere Informationen zur FreeBSD Foundation sollten Sie den Artikel http://people.FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation -- an Introduction] lesen. Sie erreichen die FreeBSD Foundation über die E-Mail-Adresse mailto:bod@FreeBSDFoundation.org[bod@FreeBSDFoundation.org]. ==== Hardwarespenden Das FreeBSD-Projekt freut sich, wenn jemand benötigte Hardware spenden will. Sind Sie daran interessiert, setzen Sie sich bitte mit dem link:https://www.FreeBSD.org/donations/[Donations Liaison Office] in Verbindung. ==== Internetzugang zur Verfügung stellen Wir sind ständig auf der Suche nach neuen FTP-, WWW- oder `cvsup`-Spiegeln. Wenn Sie einen solchen Spiegel einrichten wollen, lesen Sie bitte den Artikel link:{hubs}[Mirroring FreeBSD], der weitere Informationen enthält. diff --git a/documentation/content/de/articles/freebsd-update-server/_index.adoc b/documentation/content/de/articles/freebsd-update-server/_index.adoc index b70d36587a..5b0b201a58 100644 --- a/documentation/content/de/articles/freebsd-update-server/_index.adoc +++ b/documentation/content/de/articles/freebsd-update-server/_index.adoc @@ -1,592 +1,602 @@ --- title: Einen eigenen FreeBSD Update Server bauen authors: - author: Jason Helfman email: jgh@FreeBSD.org copyright: 2009-2011, 2013 Jason Helfma releaseinfo: "$FreeBSD$" trademarks: ["freebsd", "amd", "intel", "general"] --- = Einen eigenen FreeBSD Update Server bauen :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/authors.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/authors.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/authors.adoc[] +endif::[] [.abstract-title] Zusammenfassung Dieser Artikel beschreibt den Bau eines internen FreeBSD Update Server. Die https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] Software wurde von `{cperciva}`, emeritierter Security Officer von FreeBSD, geschrieben. Benutzer, die es als vorteilhaft ansehen ihre Systeme über einen offiziellen Update-Server zu aktualisieren, können mit Hilfe eines selbst erstellten FreeBSD Update Server die Funktionalität über manuell optimierte FreeBSD Releases oder über Bereitstellung eines lokalen Mirror, welcher schnellere Updates ermöglicht, erweitern. ''' toc::[] _Übersetzt von ``{bhd}``_. [[acknowledgments]] == Danksagung Dieser Artikel wurde anschließend im http://bsdmag.org/magazine/1021-bsd-as-a-desktop[BSD Magazine] gedruckt. [[introduction]] == Einführung Erfahrene Benutzer oder Administratoren sind häufig für etliche Maschinen oder Umgebungen verantwortlich. Sie verstehen die schwierigen Anforderungen und Herausforderungen der Aufrechterhaltung einer solchen Infrastruktur. Ein FreeBSD Update Server macht es einfacher, Sicherheits- und Software-Korrekturen für ausgewählte Test-Maschinen bereitzustellen, bevor diese dann auf den Produktionssystemen ausgerollt werden. Es bedeutet auch, dass eine Reihe von Systemen über das lokale Netzwerk, anstatt über eine langsame Internet-Verbindung, aktualisiert werden können. Dieser Artikel beschreibt die Vorgehensweise zum Erstellen eines eigenen FreeBSD Update Server. [[prerequisites]] == Voraussetzungen Für den Bau eines internen FreeBSD Update Server sollten einige Anforderungen erfüllt werden. * Ein laufendes FreeBSD System. + [NOTE] ==== Als Minimum, muss das zu verteilende Ziel-Release auf einer gleichen, oder höheren FreeBSD Version gebaut werden. ==== * Ein Benutzerkonto mit mindestens 4 GB freiem Speicherplatz. Dies erlaubt die Erstellung der Updates für 7.1 und 7.2. Der genaue Platzbedarf kann sich aber von Version zu Version ändern. * Ein man:ssh[1] Konto auf einem entfernten System, um die später zu verteilenden Updates hochzuladen. * Einen Webserver, wie link:{handbook}#network-apache[Apache], wobei über die Hälfte des Platzes für den Bau benötigt wird. Als Beispiel benötigt der Bau von 7.1 und 7.2 insgesamt 4 GB. Der Speicherplatz, den der Webserver für die Verteilung dieser Updates benötigt, würde 2.6 GB betragen. * Grundlegende Kenntnisse im Shell Skripting mit der Bourne Shell, man:sh[1]. [[Configuration]] == Konfiguration: Installation & Setup Laden Sie die https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] Software durch die Installation von package:devel/subversion[] sowie package:security/ca_root_nss[], und starten Sie: [source,shell] .... % svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server .... Passen Sie [.filename]#scripts/build.conf# an Ihre Bedürfnisse an. Diese Datei wird bei jedem Bau mit einbezogen. Hier ist die Standardeinstellung für [.filename]#build.conf#, welche Sie für Ihre Umgebung anpassen sollten. [.programlisting] .... # Main configuration file for FreeBSD Update builds. The # release-specific configuration data is lower down in # the scripts tree. # Location from which to fetch releases export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.> # Host platform export HOSTPLATFORM=`uname -m` # Host name to use inside jails export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.> # Location of SSH key export SSHKEY=/root/.ssh/id_dsa <.> # SSH account into which files are uploaded MASTERACCT=builder@wadham.daemonology.net <.> # Directory into which files are uploaded MASTERDIR=update-master.freebsd.org <.> .... Parameter, die zu berücksichtigen sind: <.> Dies ist der Ort, von dem die ISO Abbilder (über die `fetchiso()` in [.filename]#scripts/build.subr#) heruntergeladen werden. Der Ort ist nicht auf FTP URIs beschränkt. Jedes URI-Schema, welches von man:fetch[1] unterstützt wird, sollte hier gut funktionieren. Anpassungen am `fetchiso()` Code können Sie vornehmen, indem Sie das Standardskript [.filename]#build.subr# in den Release- und Architektur-spezifischen Bereich in [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# kopieren und dort lokale Änderungen vornehmen. <.> Der Name des Build-Hosts. Auf aktualisierten Systemen können Sie diese Information wie folgt ausgeben: + [source,shell] .... % uname -v .... + <.> Der SSH Schlüssel für das Hochladen der Dateien auf den Update Server. Ein Schlüsselpaar kann durch die Eingabe von `ssh-keygen -t dsa` erstellt werden. Dieser Parameter ist jedoch optional; Standard Password Authentifizierung wird als Fallback-Methode benutzt wenn `SSHKEY` nicht definiert ist. Die man:ssh-keygen[1] Manualpage enthält detaillierte Informationen zu SSH und die entsprechenden Schritte zur Erstellung und Verwendung von Schlüsseln. <.> Benutzerkonto zum Hochladen von Dateien auf den Update-Server. <.> Verzeichnis auf dem Update-Server, in welches die Dateien hochgeladen werden. Die Standard [.filename]#build.conf#, die mit den `freebsd-update-server` Quellen ausgeliefert wird ist geeignet um i386 Releases von FreeBSD zu bauen. Als Beispiel für den Aufbau eines Update-Servers für andere Architekturen beschreiben die folgenden Schritte die Konfiguration für amd64: [.procedure] ==== . Erstellen Sie eine Bau-Umgebung für amd64: + [source,shell] .... % mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64 .... . Installieren Sie eine [.filename]#build.conf# in das neu erstellte Verzeichnis. Die Konfigurationsoptionen für FreeBSD 7.2-RELEASE auf amd64 sollten ähnlich wie die folgenden sein: + [.programlisting] .... # SHA256 hash of RELEASE disc1.iso image. export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 <.> # Components of the world, source, and kernels export WORLDPARTS="base catpages dict doc games info manpages proflibs lib32" export SOURCEPARTS="base bin contrib crypto etc games gnu include krb5 \ lib libexec release rescue sbin secure share sys tools \ ubin usbin cddl" export KERNELPARTS="generic" # EOL date export EOL=1275289200 <.> .... + <.> Der man:sha256[1] Fingerabdruck für die gewünschte Version wird innerhalb der jeweiligen link:https://www.FreeBSD.org/releases/[Release-Ankündigung] veröffentlicht. <.> Um die "End of Life" Nummer für die [.filename]#build.conf# zu generieren, beziehen Sie sich bitte auf "Estimated EOL" auf der link:https://www.FreeBSD.org/security/security/[FreeBSD Security Webseite]. Der Wert für `EOL` kann aus dem Datum, das auf der Webseite veröffentlicht ist, abgeleitet werden. Benutzen Sie dafür das Werkzeug man:date[1]. Dazu ein Beispiel: + [source,shell] .... % date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s' .... ==== [[build]] == Den Update Code bauen Der erste Schritt ist das Ausführen von [.filename]#scripts/make.sh#. Dieses Skript baut einige Binärdateien, erstellt Verzeichnisse und einen RSA Signaturschlüssel für die Genehmigung des Bau. In diesem Schritt müssen Sie auch eine Passphrase für die Erstellung des Signaturschlüssels angeben. [source,shell] .... # sh scripts/make.sh cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps findstamps.c: In function 'usage': findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit' cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp install findstamps ../bin install unstamp ../bin rm -f findstamps unstamp Generating RSA private key, 4096 bit long modulus ................................................................................++ ...................++ e is 65537 (0x10001) Public key fingerprint: 27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e Encrypting signing key for root enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password: .... [NOTE] ==== Notieren Sie sich den Fingerabdruck des erzeugten Schlüssels. Dieser Wert wird in [.filename]#/etc/freebsd-update.conf# für die binären Updates benötigt. ==== An dieser Stelle sind wir bereit, den Bauprozess zu starten. [source,shell] .... # cd /usr/local/freebsd-update-server # sh scripts/init.sh amd64 7.2-RELEASE .... Hier folgt ein Beispiel für einen _ersten_ Bauprozess. [source,shell] .... # sh scripts/init.sh amd64 7.2-RELEASE Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE /usr/local/freebsd-update-server/work/7.2-RELE100% of 588 MB 359 kBps 00m00s Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE Files built but not released: Files released but not built: Files which differ by more than contents: Files which differ between release and build: kernel|generic|/GENERIC/hptrr.ko kernel|generic|/GENERIC/kernel src|sys|/sys/conf/newvers.sh world|base|/boot/loader world|base|/boot/pxeboot world|base|/etc/mail/freebsd.cf world|base|/etc/mail/freebsd.submit.cf world|base|/etc/mail/sendmail.cf world|base|/etc/mail/submit.cf world|base|/lib/libcrypto.so.5 world|base|/usr/bin/ntpq world|base|/usr/lib/libalias.a world|base|/usr/lib/libalias_cuseeme.a world|base|/usr/lib/libalias_dummy.a world|base|/usr/lib/libalias_ftp.a ... .... Anschließend wird das Basissystem mit den dazugehörigen Patches erneut gebaut. Eine detaillierte Erklärung dazu finden Sie in [.filename]#scripts/build.subr#. [WARNING] ==== Während der zweiten Bauphase wird der Network Time Protocol Dienst, man:ntpd[8], ausgeschaltet. Per `{cperciva}`, emeritierter Security Officer von FreeBSD, "Der https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] Code muss Zeitstempel, welche in Dateien gespeichert sind, identifizieren, sodass festgestellt werden kann, welche Dateien aktualisiert werden müssen. Dies geschieht, indem zwei Builds erstellt werden die 400 Tage auseinander liegen und anschließend die Ergebnisse verglichen werden." ==== [source,shell] .... Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE Files found which include build stamps: kernel|generic|/GENERIC/hptrr.ko kernel|generic|/GENERIC/kernel world|base|/boot/loader world|base|/boot/pxeboot world|base|/etc/mail/freebsd.cf world|base|/etc/mail/freebsd.submit.cf world|base|/etc/mail/sendmail.cf world|base|/etc/mail/submit.cf world|base|/lib/libcrypto.so.5 world|base|/usr/bin/ntpq world|base|/usr/include/osreldate.h world|base|/usr/lib/libalias.a world|base|/usr/lib/libalias_cuseeme.a world|base|/usr/lib/libalias_dummy.a world|base|/usr/lib/libalias_ftp.a ... .... Schlussendlich wird der Bauprozess fertiggestellt. [source,shell] .... Values of build stamps, excluding library archive headers: v1.2 (Aug 25 2009 00:40:36) v1.2 (Aug 25 2009 00:38:22) @(#)FreeBSD 7.2-RELEASE #0: Tue Aug 25 00:38:29 UTC 2009 FreeBSD 7.2-RELEASE #0: Tue Aug 25 00:38:29 UTC 2009 root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC 7.2-RELEASE Mon Aug 24 23:55:25 UTC 2009 Mon Aug 24 23:55:25 UTC 2009 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009 ##### built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009 Mon Aug 24 23:46:47 UTC 2009 ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1) * Copyright (c) 1992-2009 The FreeBSD Project. Mon Aug 24 23:46:47 UTC 2009 Mon Aug 24 23:55:40 UTC 2009 Aug 25 2009 ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1) ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1) ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1) Tue Aug 25 00:21:21 UTC 2009 Tue Aug 25 00:21:21 UTC 2009 Tue Aug 25 00:21:21 UTC 2009 Mon Aug 24 23:46:47 UTC 2009 FreeBSD/amd64 7.2-RELEASE initialization build complete. Please review the list of build stamps printed above to confirm that they look sensible, then run # sh -e approve.sh amd64 7.2-RELEASE to sign the release. .... Genehmigen Sie den Bau, wenn alles korrekt ist. Weitere Informationen zur korrekten Bestimmung finden Sie in der Quelldatei namens [.filename]#USAGE#. Führen Sie, wie angegeben [.filename]#scripts/approve.sh# aus. Dieser Schritt unterschreibt das Release und verschiebt die Komponenten an einen Sammelpunkt, wo sie für den Upload verwendet werden können. [source,shell] .... # cd /usr/local/freebsd-update-server # sh scripts/mountkey.sh .... [source,shell] .... # sh -e scripts/approve.sh amd64 7.2-RELEASE Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE .... Nachdem der Genehmigungsprozess abgeschlossen ist, kann der Upload gestartet werden. [source,shell] .... # cd /usr/local/freebsd-update-server # sh scripts/upload.sh amd64 7.2-RELEASE .... [NOTE] ==== Wenn der Update-Code erneut hochgeladen werden muss, kann dies durch die Änderung des öffentlichen Distributionsverzeichnisses für das Ziel-Release und der Aktualisierung der Attribute für die _hochgeladene_ Datei geschehen. [source,shell] .... # cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64 # touch -t 200801010101.01 uploaded .... ==== Um die Updates zu verteilen, müssen die hochgeladenen Dateien im Document Root des Webservers liegen. Die genaue Konfiguration hängt von dem verwendeten Webserver ab. Für den Apache Webserver, beziehen Sie sich bitte auf das Kapitel link:{handbook}#network-apache[Konfiguration des Apache Servers] im Handbuch. Aktualisieren Sie `KeyPrint` und `ServerName` in der [.filename]#/etc/freebsd-update.conf# des Clients und führen Sie das Update, wie im Kapitel link:{handbook}#updating-upgrading-freebsdupdate[FreeBSD Update] des Handbuchs beschrieben, aus. [IMPORTANT] ==== Damit FreeBSD Update Server ordnungsgemäß funktioniert, muss sowohl das _current_ Release als auch das Release _auf welches Sie aktualisieren wollen_ neu gebaut werden. Dies ist notwendig, um die Unterschiede von Dateien zwischen den beiden Releases bestimmen zu können. Zum Beispiel beim Upgrade eines FreeBSD Systems von 7.1-RELEASE auf 7.2-RELEASE, müssen für beide Versionen Updates gebaut und auf den Webserver hochgeladen werden. ==== Als Referenz wird der gesamte Verlauf von link:../../../source/articles/freebsd-update-server/init.txt[init.sh] beigefügt. [[patch]] == Eine Fehlerkorrektur erstellen Jedes Mal, wenn ein link:https://www.FreeBSD.org/security/advisories/[Sicherheits-Hinweis] oder ein link:https://www.FreeBSD.org/security/notices/[Fehler-Hinweis] angekündigt wird, kann eine Fehlerkorrektur gebaut werden. Für dieses Beispiel wird 7.1-RELEASE benutzt. Für den Bau eines anderen Release werden ein paar Annahmen getroffen: * Richten Sie die korrekte Verzeichnisstruktur für den ersten Bau ein. * Führen Sie einen ersten Bau für 7.1-RELEASE aus. Erstellen Sie das Korrekturverzeichnis des jeweiligen Releases unter [.filename]#/usr/local/freebsd-update-server/patches/#. [source,shell] .... % mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/ % cd /usr/local/freebsd-update-server/patches/7.1-RELEASE .... Als Beispiel nehmen Sie die Korrektur für man:named[8]. Lesen Sie den Hinweis und laden Sie die erforderliche Datei von link:https://www.FreeBSD.org/security/advisories/[FreeBSD Sicherheits-Hinweise] herunter. Weitere Informationen zur Interpretation der Sicherheitshinweise finden Sie im link:{handbook}#security-advisories[FreeBSD Handbuch]. In der https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[Sicherheits Anweisung], nennt sich dieser Hinweis `SA-09:12.bind`. Nach dem Herunterladen der Datei, ist es erforderlich, die Datei auf einen geeigneten Patch-Level umzubenennen. Es steht Ihnen frei den Namen frei zu wählen, es wird jedoch nahegelegt, diesen im Einklang mit dem offiziellen FreeBSD Patch-Level zu halten. Für diesen Bau folgen wir der derzeit gängigen Praxis von FreeBSD und benennen sie `p7`. Benennen Sie die Datei um: [source,shell] .... % cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind .... [NOTE] ==== Wenn ein Patch-Level gebaut wird, wird davon ausgegangen, dass die bisherigen Korrekturen bereits vorhanden sind. Wenn der Bau läuft, werden alle Korrekturen aus dem Patchverzeichnis mit gebaut. Es können auch selbsterstellte Korrekturen zum Bau hinzugefügt werden. Benutzen Sie die Zahl Null, oder jede andere Zahl. ==== [WARNING] ==== Es liegt in der Verantwortung des Administrators des FreeBSD Update Server geeignete Maßnahmen zu treffen, um die Authentizität jeder Fehlerkorrektur zu überprüfen. ==== An dieser Stelle sind wir bereit, einen _Diff_ zu bauen. Die Software prüft zunächst, ob [.filename]#scripts/init.sh# für das jeweilige Release gelaufen ist, bevor mit dem Bau des Diff begonnen wird. [source,shell] .... # cd /usr/local/freebsd-update-server # sh scripts/diff.sh amd64 7.1-RELEASE 7 .... Es folgt ein Beispiel für einen _Diff_ Bauprozess. [source,shell] .... # sh -e scripts/diff.sh amd64 7.1-RELEASE 7 Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7 Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7 Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7 ... Files found which include build stamps: kernel|generic|/GENERIC/hptrr.ko kernel|generic|/GENERIC/kernel world|base|/boot/loader world|base|/boot/pxeboot world|base|/etc/mail/freebsd.cf world|base|/etc/mail/freebsd.submit.cf world|base|/etc/mail/sendmail.cf world|base|/etc/mail/submit.cf world|base|/lib/libcrypto.so.5 world|base|/usr/bin/ntpq world|base|/usr/include/osreldate.h world|base|/usr/lib/libalias.a world|base|/usr/lib/libalias_cuseeme.a world|base|/usr/lib/libalias_dummy.a world|base|/usr/lib/libalias_ftp.a ... Values of build stamps, excluding library archive headers: v1.2 (Aug 26 2009 18:13:46) v1.2 (Aug 26 2009 18:11:44) @()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009 FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009 root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC 7.1-RELEASE-p7 Wed Aug 26 17:29:15 UTC 2009 Wed Aug 26 17:29:15 UTC 2009 built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009 built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009 built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009 built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009 Wed Aug 26 17:20:39 UTC 2009 ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1) * Copyright (c) 1992-2009 The FreeBSD Project. Wed Aug 26 17:20:39 UTC 2009 Wed Aug 26 17:29:30 UTC 2009 Aug 26 2009 ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1) ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1) ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1) Wed Aug 26 17:55:02 UTC 2009 Wed Aug 26 17:55:02 UTC 2009 Wed Aug 26 17:55:02 UTC 2009 Wed Aug 26 17:20:39 UTC 2009 ... .... Die Updates werden angezeigt und warten auf Genehmigung. [source,shell] .... New updates: kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10| kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1| kernel|generic|/|d|0|0|0755|0|| src|base|/|d|0|0|0755|0|| src|bin|/|d|0|0|0755|0|| src|cddl|/|d|0|0|0755|0|| src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757| src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550| src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712| ... FreeBSD/amd64 7.1-RELEASE update build complete. Please review the list of build stamps printed above and the list of updated files to confirm that they look sensible, then run # sh -e approve.sh amd64 7.1-RELEASE to sign the build. .... Folgen Sie dem zuvor erwähnten Verfahren für die Genehmigung des Bauprozesses: [source,shell] .... # sh -e scripts/approve.sh amd64 7.1-RELEASE Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE The FreeBSD/amd64 7.1-RELEASE update build has been signed and is ready to be uploaded. Remember to run # sh -e umountkey.sh to unmount the decrypted key once you have finished signing all the new builds. .... Nachdem Sie den Bau genehmigt haben, starten Sie den Upload der Software: [source,shell] .... # cd /usr/local/freebsd-update-server # sh scripts/upload.sh amd64 7.1-RELEASE .... Als Referenz wird der gesamte Verlauf von link:../../../source/articles/freebsd-update-server/diff.txt[diff.sh] beigefügt. [[tips]] == Tipps * Wenn Sie ein selbst erstelltes Release über die native `make release` link:{releng}#release-build[Prozedur] bauen, wir der `freebsd-update-server` Code Ihr Release unterstützen. Als Beispiel können Sie ein Release ohne Ports oder Dokumentation bauen, indem Sie betreffende Funktionalität der Subroutinen `findextradocs ()`, `addextradocs ()` entfernen und eine Veränderung des Download-Verzeichnisses in `fetchiso ()`, in [.filename]#scripts/build.subr#. Als letzten Schritt ändern Sie den man:sha256[1] Hash in [.filename]#build.conf# für Ihr jeweiliges Release und Architektur damit Sie bereit sind, Ihr benutzerdefiniertes Release zu bauen. + [.programlisting] .... # Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts # of the world|doc subcomponent are missing from the latter, and # build a tarball out of them. findextradocs () { } # Add extra docs to ${WORKDIR}/$1 addextradocs () { } .... * Durch das Hinzufügen von `-j _NUMMER_` zu den `buildworld` und `obj` Zielen in [.filename]#scripts/build.subr# kann die Verarbeitung, abhängig von der eingesetzten Hardware, beschleunigt werden. Die Benutzung dieser Optionen auf andere Ziele wird jedoch nicht empfohlen, da sie den Bau unzuverlässig machen können. + [.programlisting] .... > # Build the world log "Building world" cd /usr/src && make -j 2 ${COMPATFLAGS} buildworld 2>&1 # Distribute the world log "Distributing world" cd /usr/src/release && make -j 2 obj && make ${COMPATFLAGS} release.1 release.2 2>&1 .... * Erstellen Sie einen geeigneten link:{handbook}#network-dns[DNS] SRV Datensatz für den Update-Server, und fügen Sie weitere Server mit verschiedenen Gewichtungen hinzu. Sie können diese Möglichkeit nutzen um Update-Mirror hinzuzufügen. Dieser Tipp ist jedoch nicht notwendig solange Sie keinen redundanten Service anbieten möchten. + [.programlisting] .... _http._tcp.update.myserver.com. IN SRV 0 2 80 host1.myserver.com. SRV 0 1 80 host2.myserver.com. SRV 0 0 80 host3.myserver.com. .... diff --git a/documentation/content/de/articles/leap-seconds/_index.adoc b/documentation/content/de/articles/leap-seconds/_index.adoc index d080b2b00d..990497a624 100644 --- a/documentation/content/de/articles/leap-seconds/_index.adoc +++ b/documentation/content/de/articles/leap-seconds/_index.adoc @@ -1,76 +1,86 @@ --- title: Unterstützung für Schaltsekunden in FreeBSD releaseinfo: "$FreeBSD$" --- = Unterstützung für Schaltsekunden in FreeBSD :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/de/urls.adoc[] +endif::[] ''' toc::[] [[leapseconds-definition]] == Einleitung Eine _Schaltsekunde_ ist eine eigens dazu eingerichtete Korrektur, um die atomaren Zeitskalen mit der Erdrotation zu synchronisieren. Dieser Artikel beschreibt wie FreeBSD mit Schaltsekunden umgeht. Zum Zeitpunkt der Erstellung dieses Dokuments wird die nächste Schaltsekunde am 30. Juni 2015 um 23:59:60 UTC auftreten. Diese Schaltsekunde wird während eines Arbeitstages für Nord- und Südamerika, sowie die Asien/Pazifik-Region stattfinden. Schaltsekunden werden durch den http://datacenter.iers.org/[IERS] im http://datacenter.iers.org/web/guest/bulletins/-/somos/5Rgv/product/16[Bulletin C] angekündigt. Das normale Verhalten für Schaltsekunden wird in https://tools.ietf.org/html/rfc7164#section-3[RFC 7164] beschrieben. Lesen Sie auch man:time2posix[3]. [[leapseconds-posix]] == Handhabung von gewöhnlichen Schaltsekunden in FreeBD Die einfachste Art, mit Schaltsekunden umzugehen, ist, die POSIX Zeitregeln, welche FreeBSD standardmässig verwendet, sowie link:{handbook}#network-ntp[NTP] zu benutzen. Wenn man:ntpd[8] läuft und die Uhrzeit mit einem vorgeschalteten NTP-Server, welcher Schaltsekunden richtig handhabt, abgeglichen wird, passt das System die Uhrzeit automatisch so an, dass die letzte Sekunde des Tages wiederholt wird. Es sind keine weiteren Anpassungen nötig. Sollte der vorgeschaltete NTP-Server Schaltsekunden nicht korrekt handhaben, wird man:ntpd[8] die Uhrzeit um eine Sekunde anpassen nachdem der fehlerhafte Server dies bemerkt hat und seine Uhr selbst neu einstellt. Wenn NTP nicht verwendet wird muss die Systemuhr manuell eingestellt werden, nachdem die Schaltsekunde vorbei ist. [[leapseconds-cautions]] == Vorsichtshinweise Schaltsekunden werden im gleichen Augenblick weltweit eingestellt: Mitternacht UTC. In Japan ist das in der Morgenmitte, im Pazifik am Mittag, in Nord-, Mittel- und Südamerika am späten Nachmittag und in Europa nachts. Wir glauben und erwarten dass FreeBSD, sofern es mit einem korrekten und stabilen NTP-Dienst versorgt wird, wie erwartet funktionieren wird, genauso wie es das während der bisherigen Schaltsekunden auch getan hat. Jedoch weisen wir darauf hin, dass praktisch keine Anwendung jemals den Kernel zu Schaltsekunden angefragt hat. Unsere Erfahrung ist, dass Schaltsekunden, so wie sie entwickelt wurden, einfach nur eine Wiederholung der Sekunde vor der Schaltsekunde sind und dies eine Überraschung für die meisten Anwendungsentwickler darstellt. Andere Betriebssysteme und andere Computer behandeln die Schaltsekunde wie FreeBSD oder auch nicht und Systeme ohne einen korrekten und stabilen NTP-Dienst werden gar nichts über Schaltsekunden wissen. Es ist kein ungewöhnlicher Zustand, wenn Computer wegen Schaltsekunden abstürzen und die Erfahrung hat gezeigt, dass eine grosse Menge von allen öffentlichen NTP-Servern die Schaltsekunde falsch behandeln oder ankündigen. Bitte stellen Sie sicher, dass nichts schreckliches wegen der Schaltsekunde passieren kann. [[leapseconds-testing]] == Überprüfen Es ist möglich, zu überprüfen, ob eine Schaltsekunde verwendet wird. Aufgrund der Art und Weise wie NTP arbeitet, funktioniert der Test möglicherweise bis zu 24 Stunden vor der Schaltsekunde. Manche Hauptreferenzuhrzeitquellen kündigen Schaltsekunden erst eine Stunde vor dem Ereignis an. Fragen Sie den NTP-Dienst ab: [source,shell] .... % ntpq -c 'rv 0 leap' .... Ausgaben, die `leap_add_sec` beinhalten zeigen die korrekte Unterstützung für Schaltsekunden an. Vor den 24 Stunden, welche vor der Schaltsekunde liegen oder wenn diese vorüber ist, wird `leap_none` angezeigt. [[leapseconds-conclusion]] == Fazit In der Praxis sind Schaltsekunden kein Problem für FreeBSD. Wir hoffen, dass dieser Überblick dabei geholfen hat, zu klären, was zu erwarten ist und wie das Ereignis der Schaltsekunde einfacher gehandhabt werden kann. diff --git a/documentation/content/de/articles/linux-users/_index.adoc b/documentation/content/de/articles/linux-users/_index.adoc index 983de0c0f3..6960975bb5 100644 --- a/documentation/content/de/articles/linux-users/_index.adoc +++ b/documentation/content/de/articles/linux-users/_index.adoc @@ -1,321 +1,331 @@ --- title: FreeBSD Anleitung für Linux®-Benutzer authors: - author: John Ferrell copyright: 2008 The FreeBSD Documentation Project releaseinfo: "$FreeBSD$" trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"] --- = FreeBSD Anleitung für Linux-Benutzer :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/de/urls.adoc[] +endif::[] [.abstract-title] Zusammenfassung Dieses Dokument soll Linux(R)-Benutzer mit den Grundlagen von FreeBSD vertraut machen. ''' toc::[] [[intro]] == Übersicht Dieses Dokument beschreibt einige der technischen Unterschiede zwischen FreeBSD und Linux(R), damit sich Linux(R)-Anwender schnell mit den Grundlagen von FreeBSD vertraut machen können. Dieses Dokument geht davon aus, dass FreeBSD bereits installiert ist. Lesen Sie das Kapitel link:{handbook}#bsdinstall[Installation von FreeBSD] des FreeBSD-Handbuch für die Hilfe bei der Installation. [[shells]] == Standard-Shell Linux(R)-Benutzer sind oft überrascht, dass Bash nicht die Standard-Shell in FreeBSD ist. Genau genommen ist Bash nicht einmal in der Standardinstallation enthalten. FreeBSD benutzt stattdessen man:tcsh[1] als Standard-Shell für root, sowie die Bourne shell-kompatible man:sh[1] als Standardshell für Benutzer. man:sh[1] ist der Bash sehr ähnlich, besitzt jedoch einen kleineren Funktionsumfang. In der Regel werden Skripte für die man:sh[1] auch mit der Bash laufen. Der umgekehrte Fall trifft jedoch meistens nicht zu. Bash und weitere Shells können unter FreeBSD mit link:{handbook}#ports[Paketen und der Ports-Sammlung] installiert werden. Nachdem Sie eine andere Shell installiert haben, benutzen Sie man:chsh[1] um die Standard-Shell für einen Benutzer zu ändern. Es wird empfohlen, die Standard-Shell des Benutzers `root` unverändert bleibt, da Shells, welche nicht im Basissystem enthalten sind, in [.filename]#/usr/local/bin# installiert werden. Im Falle eines Problems ist vielleicht das Dateisystem, auf dem sich [.filename]#/usr/local/bin# befindet, nicht eingehängt ist. In einem solchen Fall hätte der Benutzer `root` keinen Zugriff auf die Standard-Shell, was ihn daran hindern würde, sich am System anzumelden und das Problem zu beheben. [[software]] == Pakete und Ports: Installation von Software in FreeBSD FreeBSD bietet zwei Methoden zur Installation von Anwendungen: Binärpakete und kompilierte Ports. Jede Methode hat ihre eigenen Vorteile: .Binärpakete * Schnellere Installation, insbesondere bei größeren Anwendungen. * Es wird kein Verständnis darüber benötigt, wie Software kompiliert wird. * Es muss kein Compiler installiert werden. .Ports * Bieten die Möglichkeit, Installationsoptionen anzupassen. * Eigene Korrekturen können angewendet werden. Wenn für die Installation der Anwendung keine Änderungen nötig sind, kann auch das Paket installiert werden. Kompilieren Sie den Port, wenn die Anwendung eine Änderung an den voreingestellten Optionen erfordert. In diesem Fall kann ein angepasstes Paket mit make`Paket` erstellt werden. Eine vollständige Liste aller Ports und Pakete finden Sie http://www.freebsd.org/ports/[hier]. [[packages]] === Pakete Pakete sind vorkompilierte Anwendungen, sozusagen FreeBSD-Äquivalente von [.filename]#.deb#-Dateien unter Debian/Ubuntu basierten Systemen und [.filename]#.rpm#-Dateien von Red Hat/Fedora basierten Systemen. Pakete werden mit `pkg` installiert. Das folgende Kommando installiert beispielsweise Apache 2.4: [source,shell] .... # pkg install apache24 .... Weitere Informationen zu Paketen finden Sie im Abschnitt 4.4 des FreeBSD Handbuchs: link:{handbook}#pkgng-intro[Benutzen von pkg zur Verwaltung von Binärpaketen]. [[ports]] === Ports Die FreeBSD Ports-Sammlung ist ein Gerüst aus [.filename]#Makefiles# und Korrekturen, um Anwendungen aus dem Quellcode unter FreeBSD zu installieren. Wenn Sie einen Port installieren, wird das System den Quellcode herunterladen, die benötigten Korrekturen anwenden, den Quellcode kompilieren und die Anwendung und die erforderlichen Abhängigkeiten installieren. Die Ports-Sammlung, oder einfach Ports genannt, kann mit man:portsnap[8] nach [.filename]#/usr/ports# installiert werden. Um einen Port zu kompilieren, wechseln Sie in das Verzeichnis des Ports und starten Sie den Bau-Prozess. Das folgende Beispiel installiert Apache 2.4 aus der Ports-Sammlung: [source,shell] .... # cd /usr/ports/www/apache24 # make install clean .... Ein Vorteil von Ports bei der Installation von Software ist die Möglichkeit, die Installationsoptionen anzupassen. In diesem Beispiel wird spezifiziert, dass zusätzlich das Modul mod_ldap installiert werden soll: [source,shell] .... # cd /usr/ports/www/apache24 # make WITH_LDAP="YES" install clean .... Lesen Sie link:{handbook}#ports-using[Benutzen der Ports-Sammlung] für weitere Informationen. [[startup]] == Systemstart Viele Linux(R)-Distributionen verwenden das SysV init System, während FreeBSD das traditionelle BSD-man:init[8] benutzt. Unter BSD-man:init[8] gibt es keine Runlevel und [.filename]#/etc/inittab# existiert auch nicht. Stattdessen wird der Systemstart von man:rc[8] Skripten gesteuert. Beim Systemstart liest [.filename]#/etc/rc# [.filename]#/etc/rc.conf# und [.filename]#/etc/rc.conf.local# um herauszufinden welche Dienste gestartet werden müssen. Die jeweiligen Dienste werden dann gestartet, indem die entsprechenden Skripten in [.filename]#/etc/rc.d/# und [.filename]#/usr/local/etc/rc.d/# ausgeführt werden. Diese Skripte sind ähnlich wie die Skripte in [.filename]#/etc/init.d/# unter Linux(R)-Systemen. Die Skripte in [.filename]#/etc/rc.d/# sind für Anwendungen aus dem "Basissystem", wie beispielsweise man:cron[8], man:sshd[8], und man:syslog[3]. Die Skripte in [.filename]#/usr/local/etc/rc.d/# gehören zu den vom Benutzer installierten Anwendungen, wie zum Beispiel Apache und Squid. Da FreeBSD als komplettes Betriebssystem entwickelt wird, werden die vom Benutzer installierten Anwendungen nicht als Teil des "Basissystems" angesehen. Diese Anwendungen werden in der Regel als link:{handbook}#ports-using[Pakete oder Ports] installiert. Um die Anwendungen vom Basissystem zu separieren, werden diese unterhalb von [.filename]#/usr/local/# installiert. Die Binärdateien der installierten Anwendungen werden in [.filename]#/usr/local/bin/# gespeichert, die Konfigurationsdateien in [.filename]#/usr/local/etc/#, und so weiter. Dienste werden über einen Eintrag in [.filename]#/etc/rc.conf# aktiviert. Die Standardeinstellungen des Systems stehen in [.filename]#/etc/defaults/rc.conf# und werden von den Einstellungen in [.filename]#/etc/rc.conf# überschrieben. Lesen Sie man:rc.conf[5] für weitere Informationen über die verfügbaren Einträge. Wenn Sie zusätzliche Anwendungen installieren, lesen Sie die Nachrichten um zu erfahren, wie Sie alle dazugehörigen Dienste aktivieren. Die folgenden Einträge in [.filename]#/etc/rc.conf# aktivieren man:sshd[8] sowie Apache 2.4, wobei Apache mit SSL-Unterstützung gestartet werden soll. [.programlisting] .... # enable SSHD sshd_enable="YES" # enable Apache with SSL apache24_enable="YES" apache24_flags="-DSSL" .... Sobald ein Dienst in [.filename]#/etc/rc.conf# aktiviert ist, kann er ohne einen Neustart des Systems gestartet werden: [source,shell] .... # service sshd start # service apache24 start .... Wenn ein Dienst nicht aktiviert wurde, kann er auf der Kommandozeile mit `onestart` gestartet werden: [source,shell] .... # service sshd onestart .... [[network]] == Netzwerkkonfiguration Anstelle einer allgemeinen __ethX__-Kennzeichnung, die von Linux(R) benutzt wird, um Netzwerkschnittstellen zu identifizieren, verwendet FreeBSD den Treibernamen gefolgt von einer Nummer. Die folgende Ausgabe von man:ifconfig[8] zeigt zwei Intel(R)Pro 1000 Netzwerkschnittstellen ([.filename]#em0# und [.filename]#em1#): [source,shell] .... % ifconfig em0: flags=8843 mtu 1500 options=b inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255 ether 00:50:56:a7:70:b2 media: Ethernet autoselect (1000baseTX ) status: active em1: flags=8843 mtu 1500 options=b inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255 ether 00:50:56:a7:03:2b media: Ethernet autoselect (1000baseTX ) status: active .... Mit man:ifconfig[8] kann einer Schnittstelle eine IP-Adresse zugeordnet werden. Damit diese nach einem Neustart erhalten bleibt, muss die IP-Konfiguration in [.filename]#/etc/rc.conf# eingetragen werden. Die folgenden Einträge in [.filename]#/etc/rc.conf# konfigurieren den Rechnernamen, die IP-Adresse und das Standard-Gateway: [.programlisting] .... hostname="server1.example.com" ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0" defaultrouter="10.10.10.1" .... Benutzen Sie die folgenden Einträge um die Schnittstelle über DHCP zu konfigurieren: [.programlisting] .... hostname="server1.example.com" ifconfig_em0="DHCP" .... [[firewall]] == Firewall FreeBSD verwendet nicht Linux(R)IPTABLES als Firewall. Stattdessen hat der Benutzer unter FreeBSD die Wahl zwischen drei Firewalls, die auf Kernel-Ebene arbeiten: * link:{handbook}#firewalls-pf[PF] * link:{handbook}#firewalls-ipf[IPFILTER] * link:{handbook}#firewalls-ipfw[IPFW] PF wurde vom OpenBSD Projekt entwickelt und nach FreeBSD portiert. PF wurde als Ersatz für IPFILTER entwickelt und die Syntax ist der von IPFILTER sehr ähnlich. PF kann zusammen mit man:altq[4] werden um QoS-Funktionen bereitzustellen. Dieser beispielhafte PF-Eintrag erlaubt eingehende SSH-Verbindungen: [.programlisting] .... pass in on $ext_if inet proto tcp from any to ($ext_if) port 22 .... IPFILTER ist eine von Darren Reed entwickelte Firewall. Diese Firewall ist nicht FreeBSD-spezifisch und wurde bereits auf andere Betriebssysteme portiert, einschließlich NetBSD, OpenBSD, SunOS, HP/UX, und Solaris. Die Syntax für IPFILTER zum Erlauben von eingehenden SSH-Verbindungen lautet: [.programlisting] .... pass in on $ext_if proto tcp from any to any port = 22 .... Die Firewall IPFW wird von FreeBSD entwickelt und betreut. Sie kann zusammen mit man:dummynet[4] eingesetzt werden, um Traffic-Shaping zu realisieren und verschiedene Arten von Netzwerkverbindungen zu simulieren. Die Syntax für IPFW zum Erlauben von eingehenden SSH-Verbindungen ist: [.programlisting] .... ipfw add allow tcp from any to me 22 in via $ext_if .... [[updates]] == FreeBSD aktualisieren Es gibt zwei Methoden um ein FreeBSD-System zu aktualisieren: aus den Quellen oder über binäre Updates. Die Aktualisierung aus den Quellen ist etwas komplexer, bietet aber das höchste Maß an Flexibilität. Dieser Prozess beinhaltet die Synchronisation der Quellen über einen Subversion-Server von FreeBSD. Sobald die lokale Kopie aktualisiert wurde, kann eine neue Version des Kernels und des Userlands kompiliert werden. Binäre Updates funktionieren in etwa so, als wenn Sie ein Linux(R)-System mit `yum` oder `apt-get` aktualisieren. In FreeBSD können Sie man:freebsd-update[8] benutzen, um binäre Updates herunterzuladen und zu installieren. Diese Updates können mit man:cron[8] zu festgelegten Zeitpunkten durchgeführt werden. [NOTE] ==== Wenn Sie man:cron[8] verwenden um Updates zu planen, benutzen Sie `freebsd-update cron` in der man:crontab[1], um die Möglichkeit zu verringern, dass alle Maschinen die Updates zur gleichen Zeit laden: [.programlisting] .... 0 3 * * * root /usr/sbin/freebsd-update cron .... ==== Weitere Informationen über die Aktualisierung aus den Quellen und Binär-Updates finden Sie im Kapitel link:{handbook}#updating-upgrading[FreeBSD aktualisieren] des FreeBSD Handbuchs. [[procfs]] == procfs: Verschwunden, aber nicht vergessen In einigen Linux(R)-Distributionen kann man in [.filename]#/proc/sys/net/ipv4/ip_forward# feststellen, ob IP-Weiterleitung aktiviert ist. In FreeBSD wird stattdessen man:sysctl[8] verwendet, um diese und andere Systemeinstellungen anzuzeigen. Auf einem FreeBSD-System kann der folgende Befehl benutzt werden, um festzustellen ob IP-Weiterleitung aktiviert ist: [source,shell] .... % sysctl net.inet.ip.forwarding net.inet.ip.forwarding: 0 .... Benutzen Sie `-a` um alle Einstellungen des Systems anzuzeigen: [source,shell] .... % sysctl -a | more .... Wenn eine Anwendung procfs benötigt, fügen Sie den folgenden Eintrag in [.filename]#/etc/fstab# ein: [source,shell] .... proc /proc procfs rw,noauto 0 0 .... Die Option `noauto` verhindert, dass [.filename]#/proc# beim Booten automatisch eingehängt wird. Das Dateisystem kann ohne Neustart eingehängt werden: [source,shell] .... # mount /proc .... [[commands]] == Häufig verwendete Kommandos Einige Kommando-Äquivalente sind wie folgt: [.informaltable] [cols="1,1,1", frame="none", options="header"] |=== | Linux-Kommando (Red Hat/Debian) | FreeBSD Äquivalent | Aufgabe |`yum install _Paket_` / `apt-get install _Paket_` |`pkg install _Paket_` |Paket aus einem entfernten Repository installieren. |`rpm -ivh _Paket_` / `dpkg -i _Paket_` |`pkg add _Paket_` |Ein lokales Paket installieren |`rpm -qa` / `dpkg -l` |`pkg info` |Installierte Paket anzeigen |`lspci` |`pciconf` |PCI-Geräte anzeigen |`lsmod` |`kldstat` |Geladene Kernelmodule anzeigen |`modprobe` |`kldload` / `kldunload` |Kernelmodule laden/entladen |`strace` |`truss` |Systemaufrufe verfolgen |=== [[conclusion]] == Fazit Dieses Dokument hat einen Überblick über FreeBSD geboten. Lesen Sie das link:{handbook}[FreeBSD Handbuch] für eine tiefergehender Abdeckung dieses und weiterer Themen, welche nicht in diesem Dokument behandelt sind. diff --git a/documentation/content/de/articles/nanobsd/_index.adoc b/documentation/content/de/articles/nanobsd/_index.adoc index 825e00ed3e..5f3bb2bdb9 100644 --- a/documentation/content/de/articles/nanobsd/_index.adoc +++ b/documentation/content/de/articles/nanobsd/_index.adoc @@ -1,305 +1,315 @@ --- title: Einführung in NanoBSD authors: - author: Daniel Gerzo copyright: 2006 The FreeBSD Documentation Project trademarks: ["freebsd", "general"] --- = Einführung in NanoBSD :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/authors.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/authors.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/authors.adoc[] +endif::[] [.abstract-title] Zusammenfassung Dieses Dokument stellt Informationen zu den NanoBSD Werkzeugen bereit, die dazu verwendet werden können ein FreeBSD Abbild für eingebettete Systeme zu erstellen, welche auf eine Compact Flash Karte passen (oder andere Massenspeicher). __Übersetzt von Björn Heidotting__. ''' toc::[] [[intro]] == Einführung in NanoBSD NanoBSD ist ein Werkzeug welches derzeit von {phk-name} entwickelt wird. Es erstellt ein FreeBSD Systemabbild für eingebettete Systeme, die auf eine Compact Flash Karte passen (oder andere Massenspeicher). Es kann dazu benutzt werden um spezialisierte Installationsabbilder zu bauen, entworfen für die einfache Installation und Wartung von Systemen die als "Computer Appliances" bekannt sind. Computer Appliances haben ihre Hard- und Software fest verbaut, dass bedeutet alle Anwendungen sind vorinstalliert. Die Appliance wird an ein bestehendes Netzwerk angeschlossen und kann mit der Arbeit (fast) sofort beginnen. Zu den Eigenschaften von NanoBSD gehören: * Ports und Pakete funktionieren wie in FreeBSD - Jede einzelne Anwendung kann auf dem NanoBSD Abbild installiert und benutzt werden, auf die gleiche Weise wie Sie es aus FreeBSD gewohnt sind. * Keine fehlende Funktionalität - Wenn es möglich ist, etwas mit FreeBSD zu tun, ist es auch möglich, die gleiche Sache mit NanoBSD zu tun, es sei denn, eine oder mehrere Funktionen wurden ausdrücklich vor dem Bau des NanoBSD Abbilds entfernt. * Zur Laufzeit ist alles read-only - Es ist sicher den Stromstecker zu ziehen. Es besteht dann keine Notwendigkeit, einen man:fsck[8] nach einem nicht ordnungsgemäßem Herunterfahren des Systems auszuführen. * Einfach zu bauen und anzupassen - Unter Verwendung von nur einem Shell-Skript und einer Konfigurationsdatei ist es möglich, ein reduziertes und angepasstes Abbild zu bauen, welches jegliche Reihe von Anforderungen erfüllt. [[howto]] == NanoBSD Anleitung [[design]] === Das Design von NanoBSD Sobald das Abbild auf dem Medium verfügbar ist, kann NanoBSD gebootet werden. Der Massenspeicher ist standardmäßig in drei Teile unterteilt: * Zwei Abbild Partitionen: `code#1` und `code#2`. * Die Partition der Konfigurationsdatei, welche zur Laufzeit unter dem [.filename]#/cfg# Verzeichnis gemountet werden kann. Diese Partitionen sind im Allgemeinen read-only. Die [.filename]#/etc# und [.filename]#/var# Verzeichnisse sind man:md[4] (malloc) Speicher. Die Partition der Konfigurationsdatei besteht unter dem [.filename]#/cfg# Verzeichnis. Sie enthält Dateien für das [.filename]#/etc# Verzeichnis und wird direkt nach dem Botten read-only eingehangen, weshalb es erforderlich ist geänderte Dateien von [.filename]#/etc# zurück nach [.filename]#/cfg# zu kopieren falls die Änderungen nach einem Neustart bestehen bleiben sollen. .Dauerhafte Änderungen in [.filename]#/etc/resolv.conf# vornehmen [example] ==== [source,shell] .... # vi /etc/resolv.conf [...] # mount /cfg # cp /etc/resolv.conf /cfg # umount /cfg .... ==== [NOTE] ==== Die [.filename]#/cfg# Partition sollte nur während des Bootvorgangs und zu Änderungen an den Konfigurationsdateien gemountet werden. Die [.filename]#/cfg# Partition jederzeit gemountet zu haben ist keine gute Idee, besonders wenn das NanoBSD System auf einem Massenspeicher betrieben wird, der eventuell druch eine große Anzahl von Schreiboperationen nachteilig beeinträchtigt wird (z. B. wenn der Dateisystem-Syncer den Speicher mit Daten überflutet). ==== === Ein NanoBSD Abbild erstellen Ein NanoBSD Abbild wird über ein einfaches [.filename]#nanobsd.sh# Shell-Skript gebaut, das sich unter [.filename]#/usr/src/tools/tools/nanobsd# befindet. Das Skript erstellt ein Abbild, welches dann mittels man:dd[1] auf einen Massenspeicher kopiert werden kann. Die folgenden Kommandos sind notwendig um ein NanoBSD Abbild zu erstellen: [source,shell] .... # cd /usr/src/tools/tools/nanobsd <.> # sh nanobsd.sh <.> # cd /usr/obj/nanobsd.full <.> # dd if=_.disk.full of=/dev/da0 bs=64k <.> .... <.> Wechsel in das Basisverzeichnis des NanoBSD Skripts. <.> Den Bauprozess starten. <.> Wechsel in das Verzeichnis, in dem das gebaute Abbild liegt. <.> NanoBSD auf einem Massenspeicher installieren. === Ein NanoBSD Abbild anpassen Dies ist wahrscheinlich das wichtigste und interessanteste Merkmal von NanoBSD. Hierbei werden Sie auch die meiste Zeit mit der Entwicklung von NanoBSD verbringen. Der Aufruf des folgenden Kommandos wird [.filename]#nanobsd.sh# dazu zwingen, seine Konfiguration aus [.filename]#myconf.nano# aus dem aktuellen Verzeichnis zu lesen: [source,shell] .... # sh nanobsd.sh -c myconf.nano .... Die Anpassung wird auf zwei Arten geschehen: * Konfigurations-Optionen * Benutzerdefinierte Funktionen ==== Konfigurations-Optionen Durch Konfigurationseinstellungen ist es möglich Optionen zu übergeben, die sowohl die `buildworld` und `installworld` Phasen des NanoBSD Bauprozesses betreffen, sowie interne Optionen, die den Haupt-Bauprozess von NanoBSD beeinflussen. Durch diese Optionen ist es möglich, das System so zu reduzieren, dass es mit wenig Platz, etwa 64 MB auskommt. Sie können die Konfigurationsdateien dazu nutzten FreeBSD noch weiter zu trimmen, bis es nur noch aus dem Kernel und zwei oder drei Dateien im Userland besteht. Die Konfigurationsdatei besteht aus Konfigurations-Optionen, welche die Standardwerte überschreiben. * `NANO_NAME` - Name des Build (wird verwendet, um die workdir Namen zu konstruieren). * `NANO_SRC` - Pfad zum Quelltextverzeichnis, das für den Bau des Abbilds verwendet wird. * `NANO_KERNEL` - Name der Kernelkonfigurationsdatei, die für den Bau des Kernels verwendet wird. * `CONF_BUILD` - Optionen für die `buildworld` Phase des Bauprozesses. * `CONF_INSTALL` - Optionen für die `installworld` Phase des Bauprozesses. * `CONF_WORLD` - Optionen für die `buildworld` und `installworld` Phasen des Bauprozesses. * `FlashDevice` - Definiert den zu benutzenden Medientyp. Überprüfen Sie die Datei [.filename]#FlashDevice.sub# für weitere Informationen. ==== Benutzerdefinierte Funktionen Mit Hilfe von Shell-Funktionen in der Konfigurationsdatei besteht die Möglichkeit zur Feinabstimmung von NanoBSD. Das folgende Beispiel illustriert das Grundmodell von benutzerdefinierten Funktionen: [.programlisting] .... cust_foo () ( echo "bar=baz" > \ ${NANO_WORLDDIR}/etc/foo ) customize_cmd cust_foo .... Ein besseres Beispiel für eine Anpassung ist folgende, welche die Standardgröße des [.filename]#/etc# Verzeichnisses von 5 MB auf 30 MB ändert: [.programlisting] .... cust_etc_size () ( cd ${NANO_WORLDDIR}/conf echo 30000 > default/etc/md_size ) customize_cmd cust_etc_size .... Es gibt ein paar vordefinierte Standardfunktionen die Sie nutzen können: * `cust_comconsole` - Deaktiviert man:getty[8] auf den VGA Geräten (den [.filename]#/dev/ttyv*# Gerätedateien) und ermöglicht die Nutzung der seriellen Schnittstelle COM1 als Systemkonsole. * `cust_allow_ssh_root` - Erlaubt es `root` sich über man:sshd[8] anzumelden. * `cust_install_files` - Installiert Dateien aus dem [.filename]#nanobsd/Files# Verzeichnis, das einige nützliche Skripte für die Systemverwaltung enthält. ==== Pakete hinzufügen Durch benutzerdefinierte Funktionen können Pakete zum NanoBSD Abbild hinzugefügt werden. Die nachfolgende Funktion installiert alle Pakete aus [.filename]#/usr/src/tools/tools/nanobsd/packages#: [.programlisting] .... install_packages () ( mkdir -p ${NANO_WORLDDIR}/packages cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages chroot ${NANO_WORLDDIR} sh -c 'cd packages; pkg_add -v *;cd ..;' rm -rf ${NANO_WORLDDIR}/packages ) customize_cmd install_packages .... ==== Beispiel einer Konfigurationsdatei Ein komplettes Beispiel für eine Konfigurationsdatei zum Erstellen eines benutzerdefinierten NanoBSD Abbilds könnte folgende sein: [.programlisting] .... NANO_NAME=custom NANO_SRC=/usr/src NANO_KERNEL=MYKERNEL NANO_IMAGES=2 CONF_BUILD=' NO_KLDLOAD=YES NO_NETGRAPH=YES NO_PAM=YES ' CONF_INSTALL=' NO_ACPI=YES NO_BLUETOOTH=YES NO_CVS=YES NO_FORTRAN=YES NO_HTML=YES NO_LPR=YES NO_MAN=YES NO_SENDMAIL=YES NO_SHAREDOCS=YES NO_EXAMPLES=YES NO_INSTALLLIB=YES NO_CALENDAR=YES NO_MISC=YES NO_SHARE=YES ' CONF_WORLD=' NO_BIND=YES NO_MODULES=YES NO_KERBEROS=YES NO_GAMES=YES NO_RESCUE=YES NO_LOCALES=YES NO_SYSCONS=YES NO_INFO=YES ' FlashDevice SanDisk 1G cust_nobeastie() ( touch ${NANO_WORLDDIR}/boot/loader.conf echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf ) customize_cmd cust_comconsole customize_cmd cust_install_files customize_cmd cust_allow_ssh_root customize_cmd cust_nobeastie .... === NanoBSD aktualisieren The Update-Prozess von NanoBSD ist relativ einfach: [.procedure] ==== . Erstellen Sie ein neues NanoBSD Abbild. . Laden Sie das neue Abbild in eine unbenutzte Partition eines laufenden NanoBSD Systems. + Der wichtigste Unterschied dieses Schrittes zur ersten NanoBSD Installation besteht darin, das jetzt anstatt der Datei [.filename]#\_.disk.full# (enthält ein Abbild der gesamten Platte) die Datei [.filename]#_.disk.image# (enthält ein Abbild einer einzelnen System-Partition) installiert wird. . Neustart, um das System von der neu installierten Partition zu starten. . Wenn alles gut geht, ist die Aktualisierung abgeschlossen. . Wenn etwas schief läuft, starten Sie wieder in die vorherige Partition (die das alte, funktionierende Abbild enthält) um die System-Funktionalität so schnell wie möglich wieder herzustellen. Beheben Sie alle Probleme des neu gebauten Abbilds, und wiederholen Sie den Vorgang. ==== Um das neue Abbild auf das laufende NanoBSD System zu installieren, ist es möglich, entweder das [.filename]#updatep1# oder [.filename]#updatep2# Skript im [.filename]#/root# Verzeichnis zu verwenden, je nachdem, von welcher Partition das aktuelle System läuft. In Abhängigkeit davon welche Dienste der Host, der das NanoBSD Abbild anbietet, und welche Art von Transfer bevorzugt wird, bestehen eine von drei zu prüfenden Möglichkeiten: ==== Verwendung von man:ftp[1] Wenn die Übertragungsgeschwindigkeit an erster Stelle steht, verwenden Sie dieses Beispiel: [source,shell] .... # ftp myhost get _.disk.image "| sh updatep1" .... ==== Verwendung von man:ssh[1] Wenn eine sichere Übertragung bevorzugt wird, sollten Sie die Verwendung dieses Beispiels in Betracht ziehen: [source,shell] .... # ssh myhost cat _.disk.image.gz | zcat | sh updatep1 .... ==== Verwendung von man:nc[1] Verwenden Sie dieses Beispiel, wenn auf dem Remote-Host kein man:ftpd[8] oder man:sshd[8] Dienst läuft: [.procedure] ==== . Zunächst öffnen Sie eine TCP-Listener auf dem Host der das Abbild bereitstellt und zum Client sendet: + [source,shell] .... myhost# nc -l 2222 < _.disk.image .... + [NOTE] ====== Stellen Sie sicher das der benutzte Port nicht blockiert wird, um eingehende Verbindungen, vom NanoBSD Host durch die Firewall, zu ermöglichen. ====== . Verbinden Sie sich zum Host der das Abbild bereitstellt und führen Sie das [.filename]#updatep1# Skript aus: + [source,shell] .... # nc myhost 2222 | sh updatep1 .... ==== diff --git a/documentation/content/de/articles/new-users/_index.adoc b/documentation/content/de/articles/new-users/_index.adoc index cdcaf55611..46f5c10add 100644 --- a/documentation/content/de/articles/new-users/_index.adoc +++ b/documentation/content/de/articles/new-users/_index.adoc @@ -1,439 +1,451 @@ --- title: Informationen für FreeBSD- und UNIX®-Einsteiger authors: - author: Annelise Anderson email: andrsn@andrsn.stanford.edu releaseinfo: "$FreeBSD$" trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"] --- = Informationen für FreeBSD- und UNIX(R)-Einsteiger :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel -include::shared/de/urls.adoc[] +ifeval::["{backend}" == "html5"] include::shared/de/mailing-lists.adoc[] +include::shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/de/urls.adoc[] +include::../../../../shared/de/mailing-lists.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/de/urls.adoc[] +include::../../../../shared/de/mailing-lists.adoc[] +endif::[] [.abstract-title] Zusammenfassung Wir gratulieren Ihnen zur Installation von FreeBSD! Diese Einführung ist für alle Personen gedacht, die FreeBSD und UNIX(R) noch nicht kennen, und enthält daher auch einige grundlegende Informationen. Es wird davon ausgegangen, dass Sie FreeBSD 2.0.5 oder neuer in der von FreeBSD.org veröffentlichten Form installiert haben sowie über gute Kenntnisse von DOS/Windows(R) oder OS/2(R) verfügen. __Übersetzt von Fabio Tosques__. ''' toc::[] [[in-and-out]] == An- und Abmelden Melden Sie sich (wenn `login:` am Bildschirm erscheint) als derjenige Benutzer, den Sie während der Installation angelegt haben, oder als `root` an. (Die FreeBSD-Installationsroutine legt in jedem Fall einen Benutzer `root` an; dieser darf auf dem System fast alles tun, einschließlich dem Löschen von wichtigen Dateien. Seien Sie also vorsichtig, wenn Sie sich als `root` anmelden.) Die Zeichen % und # stellen im folgenden die Eingabeaufforderung dar, wobei % für den gewöhnlichen Benutzer und # für den Benutzer `root` steht. Um sich abzumelden, geben Sie [source,shell] .... # exit .... so oft wie nötig ein (und zwar bis wieder `login:` erscheint). Drücken Sie nach jedem Befehl die kbd:[enter]-Taste und beachten Sie, dass UNIX(R) zwischen Groß- und Kleinschreibung unterscheidet - `exit` und `EXIT` sind also zwei verschiedene Befehle. Um den Rechner herunterzufahren, geben Sie [source,shell] .... # /sbin/shutdown -h now .... ein. Um den Rechner neu zu starten, geben Sie [source,shell] .... # /sbin/shutdown -r now .... ein, oder Sie rufen einfach [source,shell] .... # /sbin/reboot .... auf. Sie können natürlich auch den Rechner mit kbd:[Strg+Alt+Entf] neu starten. Warten Sie danach, bis der Neustart erfolgt ist. Diese Tastenkombination ist in neueren FreeBSD-Versionen mit `/sbin/reboot` identisch und viel besser als das Drücken des Reset-Knopfes. Sie wollen das System ja sicher nicht noch einmal neu installieren, oder? [[adding-a-user]] == Einen neuen Benutzer anlegen, der `root`-Rechte erlangen kann Falls Sie während der Installation des Systems keine Benutzer angelegt haben und noch als `root` angemeldet sind, sollten Sie mit [source,shell] .... # adduser .... einen neuen Benutzer anlegen. Wenn Sie `adduser` das erste Mal ausführen, werden Sie gefragt, ob Sie einige Standardeinstellungen abspeichern möchten. Vielleicht möchten Sie man:csh[1] statt man:sh[1] als Default-Shell auswählen (falls `sh` als Default-Shell angeboten wird). Diese Standardeinstellungen sind in [.filename]#/etc/adduser.conf# gespeichert und können von Ihnen verändert werden. Angenommen, Sie möchten den Benutzer `jack` mit dem vollständigen Namen _Jack Benimble_ anlegen. Weisen Sie `jack` auf jeden Fall ein Passwort zu (auch Kinder, die auf der Tastatur spielen, können ein Problem darstellen). Wenn Sie gefragt werden, ob `jack` Mitglied in anderen Gruppen sein soll, geben Sie `wheel` ein. [source,shell] .... Login group is "jack". Invite jack into other groups: wheel .... Dadurch können Sie sich als `jack` anmelden, und mit man:su[1] `root`-Rechte erlangen. Dann werden Sie nie wieder dafür kritisiert werden, dass Sie sich als `root` am System anmelden. Das Programm `adduser` kann jederzeit mit kbd:[Strg+C] beendet werden. Am Schluß haben Sie die Möglichkeit, die Einstellungen für den neuen Benutzer nochmals zu kontrollieren oder diese mit kbd:[n] zu verwerfen. Sie sollten noch einen zweiten Benutzer anlegen, damit Sie auch dann auf Ihr System zugreifen können, wenn Sie die Anmeldedaten von `jack` bearbeitet und dabei einen Fehler gemacht haben. Haben Sie alle Benutzer angelegt, geben Sie `exit` ein, damit Sie sich als `jack` anmelden können. Es ist generell sinnvoll, wann immer möglich, als gewöhnlicher Benutzer und nicht als der allmächtige Benutzer `root` zu arbeiten. Falls Sie schon einen Benutzer angelegt haben und diesem die Möglichkeit einräumen wollen, mit `su` `root`-Rechte zu erlangen, können Sie sich als `root` anmelden und die Datei [.filename]#/etc/group# anpassen. Fügen Sie in der ersten Zeile (der Gruppe `wheel`) den Benutzer `jack` ein. Sie sollten auch den Umgang mit dem Texteditor man:vi[1] erlernen. Alternativ können Sie auch den einfacher zu bedienenden Texteditor man:ee[1] verwenden, der auf aktuellen FreeBSD-Systemen automatisch installiert wird. Mit `rmuser` können Sie einen Benutzer löschen. [[looking-around]] == Sich im System umsehen Nachdem wir uns als gewöhnlicher Benutzer angemeldet haben, sehen wir uns nun im System um und testen einige Befehle, die uns den Zugriff auf die Hilfefunktion ermöglichen sowie einige Informationen über unser System liefern. `id`:: Sagt uns, wer wir sind! `pwd`:: Zeigt uns, wo wir uns befinden, gibt also das aktuelle Verzeichnis (working directory) aus. `ls`:: Listet die Dateien im aktuellen Verzeichnis auf. `ls -F`:: Listet Dateien im aktuellen Verzeichnis auf und kennzeichnet ausführbare Dateien mit einem `\*`, Verzeichnisse mit einem `/`, sowie symbolische Links mit `@`. `ls -l`:: Listet Dateiem im Langformat auf, dabei werden Größe, Datum und Rechte angezeigt. `ls -a`:: Listet auch versteckte Dateien auf (so genannte "dot"-Dateien). Falls Sie als `root` angemeldet sind, werden die "dot"-Dateien auch ohne die Option `-a` angezeigt. `cd`:: Wechselt das Verzeichnis. `cd ..` wechselt in der Verzeichnishierarchie eine Stufe nach oben (beachten Sie das Leerzeichen nach `cd`!). `cd /usr/local` wechselt dorthin. `cd ~` wechselt wechselt in des Heimatverzeichnis des angemeldeten Benutzers, in unserem Fall nach [.filename]#/usr/home/jack#. Geben Sie `cd /cdrom`, gefolgt von `ls`, ein, um herauszufinden, ob Ihr CD-ROM-Laufwerk eingebunden ist und funktioniert. `view Dateiname`:: Zeigt den Inhalt von _Dateiname_ auf dem Bildschirm an. Falls der Inhalt der Datei zu lang ist, und Sie nur das Ende sehen, aktivieren Sie die kbd:[Rollen]-Taste und drücken dann die kbd:[Bild hoch]-Taste, um nach oben zu scrollen. Sie können die kbd:[Rollen]-Taste auch bei Manualpages verwenden. Drücken Sie die kbd:[Rollen]-Taste nochmals, um das Scrollen zu beenden. Sie sollten sich auch einige der versteckten Dateien in Ihrem Heimatverzeichnis mit `cat` ansehen: `cat .cshrc`, `cat .login`, `cat .profile`. In [.filename]#.cshrc# sind einige nützliche Aliase für den Befehl `ls` definiert. Dort können Sie auch zusätzliche Aliase definieren. Um diese Aliase allen Benutzern zur Verfügung zu stellen, müssen Sie diese in [.filename]#/etc/csh.cshrc#, der systemweiten Konfigurationsdatei von `csh`, eintragen. [[getting-help]] == Hilfe und Informationen erhalten Im folgenden Abschnitt erhalten Sie einige Tipps zur Verwendung der Hilfefunktion. _Text_ steht dabei für etwas, das Sie eingeben müssen - meistens einen Befehl oder einen Dateinamen. `apropos text`:: Jeder Eintrag, der die Zeichenkette _text_ in der `whatis`-Datenbank enthält, wird aufgelistet. `man text`:: Die Manualpage von _text_. Manualpages sind die Hauptinformationsquelle für UNIX(R)-Systeme. `man ls` zeigt alle Möglichkeiten, wie `ls` verwendet werden kann. Drücken Sie kbd:[Enter] um weiterzublättern, kbd:[Strg+B], um eine Seite zurück zu blättern, kbd:[Strg+F], um eine Seite vorwärts zu blättern oder kbd:[Strg+C] zum Beenden. `which text`:: Sagt Ihnen, in welchem Verzeichnis der Befehl _text_ im Pfad des Benutzers gefunden wird. `locate text`:: Alle Verzeichnisse, welche die Zeichenkette _text_ enthalten, werden ausgegeben. `whatis text`:: Gibt aus, wofür das Kommando _text_ steht und welche Handbuchseite(n) es dafür gibt. `whatis *` liefert Ihnen Informationen zu allen ausführbaren Dateien des aktuellen Verzeichnisses. `whereis text`:: Gibt den absoluten Pfad der Datei _text_ aus. Rufen Sie nun `whatis` mit einigen nützlichen Befehlen wie `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, und `script` auf. `more` funktioniert genau so wie unter DOS und zeigt den Inhalt der Datei seitenweise an. `ls -l | more` entspricht daher `more Dateiname`. Das `\*`-Zeichen dient als Platzhalter, `ls w*` zeigt daher alle Dateien an, die mit `w` beginnen. Funktioniert der eine oder andere Aufruf bei Ihnen nicht? Sowohl man:locate[1], als auch man:whatis[1] sind von einer Datenbank abhängig, die wöchentlich aktualisiert wird. Falls Ihr Rechner nicht ständig läuft, können Sie die täglichen, wöchentlichen und monatlichen Aktualisierungen auch manuell starten. Melden Sie sich dazu als `root` an. Warten Sie jeweils auf das Ende eines Befehls, bevor Sie den nächsten Befehl eingeben. [source,shell] .... # periodic daily output omitted # periodic weekly output omitted # periodic monthly output omitted .... Diese Befehle sind zwar Teil der Systemverwaltung, als alleiniger Benutzer eines UNIX(R)-Systems sind Sie aber auch der Administrator des Systems. Sie müssen sich nur als `root` anmelden, wenn Sie das System verwalten möchten. Eine Information, die leider in vielen dicken Büchern über UNIX(R) vergessen wird, die sich lieber den Pulldown-Menüs und Window-Managern widmen. Empfehlenswerte Bücher zur UNIX(R)-Systemadministration sind das UNIX System Administration Handbook von Evi Nemeth et.al. (Prentice-Hall, 1995, ISBN 0-13-15051-7, die zweite Ausgabe hat ein rotes Cover), oder Essential System Administration von Æleen Frisch (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). [[editing-text]] == Textdateien bearbeiten Um Ihr System konfigurieren zu können, müssen Sie häufig Textdateien bearbeiten. Die meisten Konfigurationsdateien befinden sich im Verzeichnis [.filename]#/etc#. Um diese editieren zu können, müssen Sie mit `su` zu `root` werden. Sie können den einfachen Editor `ee` verwenden, auf lange Sicht lohnt es sich aber, die Bedienung von `vi` zu erlernen. Falls Sie die Systemquellen installiert haben, befindet sich unter [.filename]#/usr/src/contrib/nvi/docs/tutorial# ein ausgezeichnetes Tutorial zu `vi`. Bevor Sie eine Datei bearbeiten, sollten Sie eine Sicherheitskopie der Datei anlegen. Wenn Sie beispielsweise [.filename]#/etc/rc.conf# bearbeiten möchten, wechseln Sie mit `cd /etc` nach [.filename]#/etc# und geben Folgendes ein: [source,shell] .... # cp rc.conf rc.conf.orig .... Dadurch wird eine Kopie von [.filename]#rc.conf# mit dem Namen [.filename]#rc.conf.orig# angelegt, mit der Sie notfalls das Original wiederherstellen können, indem Sie [.filename]#etc.conf.orig# nach [.filename]#etc.conf# kopieren. Noch besser ist es, die Datei zuerst zu verschieben (umzubenennen) und dann zu kopieren: [source,shell] .... # mv rc.conf rc.conf.orig # cp rc.conf.orig rc.conf .... weil bei der Verwendung von `mv` das Datum und der Besitzer der Datei erhalten bleiben. Danach können Sie die Datei [.filename]#rc.conf# bearbeiten. Möchten Sie die Originaldatei wiederherstellen, geben Sie `mv rc.conf rc.conf.myedit` (falls Sie die bearbeitete Version erhalten möchten), gefolgt von: [source,shell] .... # mv rc.conf.orig rc.conf .... ein, um den Originalzustand wiederherzustellen. Um eine Datei zu bearbeiten, geben Sie [source,shell] .... # vi filename .... ein. Innerhalb des Textes können Sie sich mit den Pfeiltasten bewegen. Mit der kbd:[Esc]-Taste wechselt `vi` in den Kommandomodus. Einige der wichtigsten Kommandos sind: `x`:: löscht den Buchstaben links vom Cursor `dd`:: löscht die komplette Zeile, auch wenn diese am Bildschirm umgebrochen wird. `i`:: fügt Text an der Cursorposition ein. `a`:: fügt Text rechts vom Cursor ein. Nachdem Sie `i` oder `a` eingegeben haben, können Sie also die Datei bearbeiten. Mit `Esc` kommen Sie wieder in den Kommandomodus, wo Sie beispielsweise `:w`:: eingeben, um Ihre Änderungen zu speichern und mit `vi` weiterarbeiten können. `:wq`:: Speichern und Beenden. `:q!`:: Beenden, ohne die Änderungen zu speichern. `/text`:: bewegt den Cursor an die Stelle des ersten Vorkommens von _text_; `/Enter` (die Enter-Taste) findet dann das nächste Vorkommen von _text_. `G`:: bewegt den Cursor ans Ende der Datei. `nG`:: bewegt den Cursor in die Zeile _n_ der Datei, wobei _n_ für eine Zahl steht. kbd:[Ctrl+L]:: zeichnet den Bildschirm neu. kbd:[Ctrl+b] und kbd:[Ctrl+f]:: eine Bildschirmseite zurück oder vorwärts gehen, analog zu `more` und `view`. Am besten sammeln Sie praktische Erfahrungen mit `vi` in Ihrem Heimatverzeichnis, indem Sie eine Datei anlegen und danach bearbeiten, die Datei speichern und wieder aufrufen. `vi` birgt wirklich einige Überraschungen, da es sich um ein komplexes Programm handelt. Manchmal werden Sie versehentlich ein Kommando ausführen, das etwas anderes tut, als Sie erwarten. (`vi` ist viel leistungsfähiger als der DOS-Editor EDIT. Rufen Sie doch einmal das Kommando `:r` auf.) Drücken Sie die kbd:[Esc]-Taste ruhig öfter als einmal, um sicher zu gehen, dass Sie sich im Kommandomodus befinden und arbeiten Sie in diesem Modus weiter, falls Probleme auftreten. Speichern Sie die Datei immer wieder mit `:w`, und geben Sie `:q!` ein, um von vorne zu beginnen (genauer gesagt, vom letzten `:w`-Kommando), falls dies nötig sein sollte. Danach können Sie mit `cd` nach [.filename]#/etc# wechseln, mit `su` zu `root` werden, und mit `vi` [.filename]#/etc/group# bearbeiten und einen Benutzer zur Gruppe `wheel` hinzufügen, damit dieser mit `su` `root`-Rechte erlangen kann. Fügen Sie dafür einfach ein Komma und den Login-Namen des Benutzers an das Ende der ersten Zeile an, drücken Sie kbd:[Esc] und `:wq` (um die Datei zu speichern und den `vi` zu verlassen). Sehr effizient, nicht wahr? (Sie haben hoffentlich kein Leerzeichen nach dem Komma eingefügt?) [[printing-files-from-dos]] == Dateien mit Hilfe von DOS ausdrucken Bis zu diesem Zeitpunkt haben Sie wahrscheinlich noch keinen Drucker eingerichtet, daher zeigen wir Ihnen, wie man eine Datei aus einer Manualpage erzeugt, diese auf eine Diskette kopiert und dann unter DOS ausdruckt. Möchten Sie etwa nachlesen, wie Sie Dateirechte verändern können (was sehr wichtig ist), rufen Sie mit `man chmod` die entsprechende Manualpage auf. Der Befehl [source,shell] .... % man chmod | col -b > chmod.txt .... entfernt alle Formatierungen und leitet die Ausgabe der Manualpage nach [.filename]#chmod.txt# um, statt diese auf dem Bildschirm anzuzeigen. Legen Sie danach eine DOS-formatierte Diskette in Ihr Diskettenlaufwerk [.filename]#a# ein und geben Sie `su` ein, um zu `root` zu werden. Tippen Sie nun [source,shell] .... # /sbin/mount -t msdosfs /dev/fd0 /mnt .... ein, um das Diskettenlaufwerk unter [.filename]#/mnt# einzuhängen. Da Sie ab nun keine `root`-Rechte mehr benötigen, werden Sie durch die Eingabe von `exit` wieder zu `jack` und wechseln dann in das Verzeichnis, in dem sich [.filename]#chmod.txt# befindet, und kopieren diese Datei mit [source,shell] .... % cp chmod.txt /mnt .... auf Ihre Diskette. Zeigen Sie mit `ls /mnt` den Inhalt von [.filename]#/mnt# an. Als Ergebnis sollten Sie [.filename]#chmod.txt# erhalten. Leiten Sie nun die Ausgabe von `/sbin/dmesg` in eine Datei um, indem Sie [source,shell] .... % /sbin/dmesg > dmesg.txt .... eingeben und diese Datei ebenfalls auf die Diskette kopieren. Mit `/sbin/dmesg` können Sie alle während des Systemstarts angezeigten Meldungen ausgeben. Es ist wichtig, dass Sie diese Meldungen verstehen, da hier angezeigt wird, welche Hardware von FreeBSD beim Systemstart gefunden wurde. Falls Sie Fragen auf der Mailingliste {de-questions} oder im USENET stellen (etwa "FreeBSD erkennt mein Bandlaufwerk nicht, was soll ich tun?"), wird man Sie fragen, was `dmesg` ausgibt. Anschließend können Sie das Diskettenlaufwerk wieder aus dem Verzeichnisbaum aushängen (unmounten), um die Diskette zu entfernen. Dies funktioniert natürlich nur als `root`: [source,shell] .... # /sbin/umount /mnt .... Danach starten Sie DOS (Windows(R)). Kopieren Sie die Dateien in ein Verzeichnis. Nun öffnen Sie die Dateien mit DOS EDIT, Windows(R) Notepad, Wordpad oder einem anderen Schreibprogramm, speichern die Datei, falls Sie kleinere Änderungen vornehmen wollen, und drucken die Datei unter DOS oder Windows aus. Manualpages werden unter DOS am besten mit `print` ausgedruckt. Um Ihren Drucker unter FreeBSD einzurichten, muss ein entsprechender Eintrag in [.filename]#/etc/printcap# und ein Spool-Verzeichnis unter [.filename]#/var/spool/output# angelegt werden. Falls der Drucker an `lpt0` (entspricht LPT1 unter DOS) angeschlossen ist, müssen Sie wahrscheinlich nur nach [.filename]#/var/spool/output# wechseln und (als `root`) das Verzeichnis [.filename]#lpd# mit `mkdir lpd` anlegen, falls es nicht schon vorhanden ist. Danach sollte sich der Drucker, wenn er eingeschaltet ist, beim Booten melden und `lp` oder `lpr` sollte eine Datei zum Drucker schicken und ausdrucken. Ob die Datei schließlich ausgedruckt wird, hängt von der Konfiguration des Druckers ab, die im link:{handbook}[FreeBSD Handbuch] ausführlich beschrieben ist. [[other-useful-commands]] == Weitere nützliche Befehle `df`:: zeigt den freien Speicherplatz und eingehängte (gemountete) Partitionen an. `ps aux`:: zeigt laufende Prozesse an. `ps ax` schränkt diese Ausgabe etwas ein. `rm dateiname`:: löscht _dateiname_. `rm -R dir`:: löscht das Verzeichnis _dir_ und alle Unterverzeichnisse - Vorsicht! `ls -R`:: listet Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen auf. Die Variante `ls -AFR > where.txt` kann dazu verwendet werden, um eine Liste aller Dateien unter [.filename]#/# und (separat) unter [.filename]#/usr# zu erhalten. Allerdings gibt es bessere Möglichkeiten, bestimmte Dateien zu finden. `passwd`:: zum Ändern des Passworts eines Benutzers (oder von `root`). `man hier`:: die Manualpage des UNIX(R)-Dateisystems. Nutzen Sie `find`, um unter [.filename]#/usr# oder anderen Verzeichnissen nach [.filename]#dateiname# zu suchen: [source,shell] .... % find /usr -name "dateiname>" .... Als Platzhalter können Sie bei `"_dateiname_"` einen `\*` verwenden. (_dateiname_ muss dabei in Hochkommata stehen.) Weisen Sie `find` an, in [.filename]#/# statt in [.filename]#/usr# zu suchen, werden alle eingehängten Dateisysteme durchsucht, CD-ROM und DOS-Partitionen eingeschlossen. Ein ausgezeichnetes Buch, in dem sämtliche UNIX(R)-Befehle beschrieben werden, ist Unix for the Impatient von Abrahams & Larson (2nd ed., Addison-Wesley, 1996). Auch im Internet finden Sie viele Informationen zu UNIX(R). [[next-steps]] == Die nächsten Schritte Sie sollten nun alle wichtigen Werkzeuge kennen, um sich auf Ihrem System zurechtzufinden, Dateien zu editieren und alles am Laufen zu halten. Viele nützliche Informationen finden sich im FreeBSD-Handbuch (das vielleicht schon auf Ihrer Festplatte ist) und auf der http://www.FreeBSD.org/de/[FreeBSD Webseite]. Viele Softwarepakte und Ports sind sowohl auf der FreeBSD-CD-ROM als auch auf der Webseite verfügbar. Im Handbuch finden Sie Hinweise, wie Sie mit diesen arbeiten können. Pakete installieren Sie mit `pkg_add /cdrom/packages/All/Paketname`, wobei _Paketname_ für den Dateinamen des Paketes steht. Auf der CD-ROM finden Sie auch eine Liste der Pakete und Ports inklusive einer kurzen Beschreibung. Lesen Sie dazu [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt# sowie [.filename]#cdrom/ports/index#. Eine ausführliche Beschreibung den jeweiligen Ports finden Sie in [.filename]#/cdrom/ports/\*/*/pkg-descr#, wobei die `*`-Zeichen für die Kategorie und das Unterverzeichnis des jeweiligen Programms stehen. Falls Ihnen die Beschreibung zur Installation von Ports von der CD-ROM im Handbuch zu kompliziert erscheint (mit Programmen wie `lndir` und anderen), finden Sie hier eine alternative Beschreibung, die in der Regel problemlos funktioniert: Suchen Sie zuerst den Port, den Sie installieren möchten, etwa `kermit`. Auf der CD-ROM sollte dafür ein entsprechendes Verzeichnis vorhanden sein. Kopieren Sie dieses Unterverzeichnis nach [.filename]#/usr/local# (ein guter Platz für Programme, die hinzugefügt werden und allen Benutzern zugänglich sein sollen): [source,shell] .... # cp -R /cdrom/ports/comm/kermit /usr/local .... Danach wird das Verzeichnis [.filename]#/usr/local/kermit# angelegt, in dem sich alle Dateien des Unterverzeichnisses [.filename]#kermit# der CD-ROM finden. Danach legen Sie mit `mkdir` das Verzeichnis [.filename]#/usr/ports/distfiles# an, falls dieses noch nicht existiert. Suchen Sie dann in [.filename]#/cdrom/ports/distfiles# nach der Datei, die dem Namen des Ports gleicht, den Sie installieren möchten. Kopieren Sie diese Datei nach [.filename]#/usr/ports/distfiles#. Unter neueren Versionen können Sie diesen Schritt überspringen, da FreeBSD dies automatisch erledigt. Wechseln Sie nun mit `cd` nach [.filename]#/usr/local/kermit#. In diesem Verzeichnis befindet sich bereits ein [.filename]#Makefile#. Geben Sie hier Folgendes ein: [source,shell] .... # make all install .... Während der Installation wird sich der Port alle gepackten Dateien via FTP holen, die zur Installation benötigt werden, aber nicht auf der CD-ROM oder unter [.filename]#/usr/ports/distfiles# vorhanden sind. Falls Sie noch keine Internetverbindung haben und die benötigten Dateien nicht in [.filename]#/cdrom/ports/distfiles# vorhanden sind, müssen Sie sich die Dateien über einem anderen Rechner besorgen und manuell nach [.filename]#/usr/ports/distfiles# kopieren (entweder über eine Diskette oder durch das Einhängen einer DOS-Partition. Sehen Sie im [.filename]#Makefile# (mit `cat`, `more` oder `view`) nach, wo die Dateien zu finden sind (meist auf der Hauptseite des Programms) und besorgen Sie sich die Datei. Laden Sie die Datei unter DOS herunter, wird der Dateiname möglicherweise gekürzt. In diesem Fall müssen Sie, nachdem die Datei nach [.filename]#/usr/ports/distfiles# kopiert wurde, den ursprünglichen Namen mit `mv` wiederherstellen, damit die Datei von der Installationsroutine gefunden werden kann. Laden Sie die Datei mit FTP herunter, müssen Sie den Binär-Modus verwenden. Nun wechseln Sie zurück nach [.filename]#/usr/local/kermit# (hier befindet sich ja das zur Installation nötige [.filename]#Makefile#) und installieren das Programm mit `make all install`. Beim Installieren von Ports oder Paketen kann es auch passieren, dass andere Programme benötigt werden. Falls die Installation beispielsweise mit `can't find unzip` oder einer ähnlichen Meldung abbricht, müssen Sie zuerst das unzip-Paket oder den entsprechende Port installieren, bevor Sie mit der Installation fortfahren können. Ist die Installation abgeschlossen, geben Sie `rehash` ein, damit FreeBSD den Pfad neu einliest und weiß, wo welche Programme zu finden sind. (Falls beim Ausführen von `whereis` oder `which` viele Fehlermeldungen wie `path not found` auftreten, müssen Sie die Pfad-Anweisungen in Ihrer [.filename]#.cshrc# im Heimatverzeichnis erweitern. Die Pfad-Anweisung tut unter UNIX(R) dasselbe wie unter DOS. Das aktuelle Verzeichnis ist allerdings aus Sicherheitsgründen nicht im voreingestellten Ausführungspfad enthalten. Befindet sich die auszuführende Datei im aktuellen Verzeichnis, muss [.filename]#./# vor dem Befehl eingegeben werden, (wobei nach dem Slash kein Leerzeichen stehen darf), damit die Datei ausgeführt wird.) Vielleicht möchten Sie auch die neueste Version des Netscape(R)-Browsers (zu finden auf der link:ftp://ftp.netscape.com/[FTP-Seite] von Netscape(R)) installieren, von der es auch eine FreeBSD-Version gibt. Dazu müssen Sie allerdings das X Window-System installiert haben. Nach dem Herunterladen verwenden Sie `gunzip dateiname` und `tar xvf dateiname`, um die Datei zu entpacken. Danach kopieren Sie die Binärdatei nach [.filename]#/usr/local/bin# oder ein anderes Verzeichnis Ihres Pfades, und geben abschließend `rehash` ein. Fügen Sie dann in [.filename]#/etc/csh.cshrc#, der systemweiten Konfigurationsdatei von `csh`, folgende Zeilen ein: [.programlisting] .... setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB setenv XNLSPATH /usr/X11R6/lib/X11/nls .... Dabei wird davon ausgegangen, dass [.filename]#XKeysymDB# und das Verzeichnis [.filename]#nls# sich unter [.filename]#/usr/X11R6/lib/X11# befinden. Ist dies auf Ihrem System nicht der Fall, müssen Sie diese finden und dorthin kopieren. Falls Sie Netscape(R) schon als Port von der CD-ROM oder über FTP installiert haben, achten Sie unbedingt darauf, nicht versehentlich [.filename]#/usr/local/bin/netscape# durch die neue Binärdatei zu ersetzen, da es sich bei dieser Datei nur um ein Shell-Skript handelt, das die Umgebungsvariablen für Sie setzt. Nennen Sie die neue Binärdatei stattdessen besser [.filename]#netscape.bin# und ersetzen Sie die alte Version [.filename]#/usr/local/netscape/netscape#. [[your-working-environment]] == Die Arbeitsumgebung Die Shell ist das wichtigste Programm Ihrer Arbeitsumgebung. Unter DOS heißt die Shell command.com. Die Shell interpretiert die Befehle, die Sie auf der Kommandozeile eingeben und kommuniziert so mit dem Rest des Betriebssystems. Sie können auch Shellskripte schreiben, die den DOS-Batchdateien ähnlich sind. Es handelt sich dabei um eine Folge von Befehlen, die hintereinander ausgeführt werden. Zwei Shells werden von FreeBSD automatisch installiert: `csh` und `sh`. `csh` ist für die Arbeit auf der Kommandozeile komfortabler, Skripten sollten allerdings für `sh` (oder für `bash`) geschrieben werden. Mit `echo $SHELL` können Sie herausfinden, welche Shell benutzt wird. Die `csh`-Shell ist zwar nicht schlecht, aber die `tcsh`-Shell kann alles, was die `csh` kann und einiges mehr. Sie erlaubt es Ihnen, ausgeführte Befehle mit den Pfeiltasten wieder aufzurufen und diese sogar zu verändern. Dateinamen oder Befehle können mit der Tabulator-Taste automatisch vervollständigt werden (`csh` nutzt dafür kbd:[ESC]) und mit `cd -` können Sie schnell in das zuletzt verwendete Verzeichnis wechseln. Auch der Prompt lässt sich unter der `tcsh`-Shell wesentlich einfacher anpassen. All diese Eigenschaften erleichtern den Umgang mit dem Betriebssystem. Wollen Sie eine neue Shell installieren, gehen Sie wie folgt vor: [.procedure] ==== . Installieren Sie die Shell als Port oder Paket genau so, wie Sie jedes andere Programm als Port oder Paket installieren würden. Rufen Sie dann `rehash` sowie `which tcsh` auf (wir nehmen hier an, dass Sie `tcsh` installieren wollen), um sicher zu gehen, dass alles korrekt installiert wurde. . Als `root` editieren Sie nun [.filename]#/etc/shells#, und fügen eine Zeile für die neue Shell ein, in unserem Fall also [.filename]#/usr/local/bin/tcsh#. Danach speichern Sie die Datei (Einige Ports erledigen diesen Schritt automatisch für Sie.). . Nutzen Sie `chsh`, um `tcsh` dauerhaft als Ihre Shell zu definieren. Alternativ geben Sie einfach `tcsh` ein, ohne sich neu am System anzumelden. ==== [NOTE] ==== Bei früheren Versionen von FreeBSD und einigen anderen Versionen von UNIX(R) traten Probleme auf, wenn `root` eine andere Shell als `sh` oder `csh` zugewiesen wurde; sie hatten dann keine funktionierende Shell, wenn das System im Single-User-Modus ausgeführt wurde. Die Lösung besteht darin, `su -m` einzugeben, um `root` zu werden, weil damit `root` die `tcsh` zugewiesen wird, da diese Shell Teil der Umgebung ist. Dies kann auch fest als Alias in [.filename]#.tcshrc# eingetragen werden: [.programlisting] .... alias su su -m .... ==== Wenn `tcsh` startet, werden [.filename]#/etc/csh.cshrc# und [.filename]#/etc/csh.login# eingelesen (analog zur `csh`). Ebenfalls eingelesen werden [.filename]#.login# und [.filename]#.cshrc# des Heimatverzeichnisses, falls [.filename]#.tcshrc# nicht gefunden wurde. Sie können auch einfach [.filename]#.cshrc# nach [.filename]#.tcshrc# kopieren. Da `tcsh` nun installiert ist, kann der Prompt angepasst werden. Details dazu finden Sie in man:tcsh[1]. Die hier vorgeschlagene Zeile können Sie in Ihre [.filename]#.tcshrc# eintragen. Dadurch wird angezeigt, wie viele Befehle bereits eingegeben wurden. Außerdem erhalten Sie die aktuelle Uhrzeit sowie das aktuelle Arbeitsverzeichnis. Für den gewöhnlichen Benutzer wird ein `>` und für `root` ein `#` ausgegeben. Dabei handelt es sich um die Standardeinstellung von `tcsh`: set prompt = "%h %t %~ %# " Diese Zeile sollte an derselben Stelle eingefügt werden, wie die vorhandene "set prompt" Zeile oder nach "if($?prompt) then". Kommentieren Sie die alte Zeile aus, damit diese notfalls wieder benutzt werden kann. Vergessen Sie auch auf keinen Fall die Leerzeichen und Hochkommata. [.filename]#.tcshrc# wird neu eingelesen, wenn Sie `source .tcshrc` eingeben. Eine Liste aller Umgebungsvariablen erhalten Sie, wenn Sie am Prompt `env` eingeben. Sie sehen dann den Default-Editor, -Pager, -Terminaltyp und viele andere Umgebungsvariablen. Falls Sie sich von einem entfernten Rechner anmelden und ein Programm nicht starten können, weil das Terminal dazu nicht in der Lage ist, kann die Eingabe von `setenv TERM vt100` sehr hilfreich sein. [[other]] == Einige abschließende Bemerkungen Als `root` können Sie das CD-ROM-Laufwerk mit `/sbin/umount /cdrom` abhängen, eine andere CD-ROM einlegen und mit `/sbin/mount_cd9660 /dev/cd0a /cdrom` wieder einhängen (falls `cd0a` der Devicename Ihres CD-ROM-Laufwerkes ist). Bei neueren FreeBSD-Versionen muss dafür nur `/sbin/mount /cdrom` eingegeben werden. Das Live-Filesystem (die zweite FreeBSD-CD-ROM) kann hilfreich sein, wenn auf Ihrem System nur begrenzt Speicherplatz vorhanden ist. Was genau auf dieser Live-CD enthalten ist, variiert von Ausgabe zu Ausgabe. Vielleicht können verschiedene Spiele von CD-ROM gespielt werden. Dazu muss aber auch `lndir` vorhanden sein, damit diese Programme wissen, wo sie die von ihnen benötigten Dateien finden, da sich diese unter [.filename]#/cdrom# und nicht unter [.filename]#/usr# und den entsprechenden Unterverzeichnissen befinden, wie es diese Programme erwarten. Lesen Sie dazu auch man:lndir[1]. [[comments-welcome]] == Kommentare Falls Sie diese einführende Anleitung benutzen, würde es mich interessieren, ob Dinge schlecht erklärt sind, was noch ergänzt werden sollte, und ob Ihnen diese Einführung geholfen hat. Ich danke Eugene W. Stark, Informatikprofessor am SUNY-Stony Brook, sowie John Fieber für ihre hilfreichen Kommentare. Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford.edu] diff --git a/documentation/content/de/articles/port-mentor-guidelines/_index.adoc b/documentation/content/de/articles/port-mentor-guidelines/_index.adoc index 9a4a149bf5..4ee098de90 100644 --- a/documentation/content/de/articles/port-mentor-guidelines/_index.adoc +++ b/documentation/content/de/articles/port-mentor-guidelines/_index.adoc @@ -1,101 +1,111 @@ --- title: Richtlinien für Port-Mentoren organizations: - organization: Das FreeBSD Ports-Management Team copyright: 2011 Thomas Abthorpe, Chris Rees releaseinfo: "$FreeBSD$" --- = Richtlinien für Port-Mentoren :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :toc-title: Inhaltsverzeichnis :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel +ifeval::["{backend}" == "html5"] include::shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "pdf"] +include::../../../../shared/de/urls.adoc[] +endif::[] + +ifeval::["{backend}" == "epub3"] +include::../../../../shared/de/urls.adoc[] +endif::[] ''' toc::[] [[port-mentor.guidelines]] == Richtlinien für Mentor/Mentee Beziehungen Dieser Abschnitt soll dazu dienen, den Mythos des Mentoringprozesses zu entzaubern und gleichzeitig einen offenen Dialog zu führen, um diese Richtlinien anzupassen und zu erweitern. Es gibt bereits sehr viele Regeln in unserem Leben und wir sind auch keine Regierungsorganisation, die Gesetze aufzwingt. Stattdessen verstehen wir uns als eine Gemeinschaft von gleichgesinnten Individuen, die an einem gemeinsamen Ziel arbeiten, um die Qualitätsansprüche an das Produkt, welches als Portbaum bekannt ist, zu gewährleisten. [[why.mentor]] === Warum Mentor sein? * Die meisten von uns kamen durch die Hife eines Mentors in das Projekt hinein. Also sollte man jemand anderem auch diesen Gefallen tun. * Sie haben das unwiderstehliche Bedürfnis, anderen Ihr Wissen mitzuteilen. * Die übliche Bestrafung wird angewendet, da Sie es mittlerweile Leid sind, die gute Arbeit von anderen Leuten zu committen. [[mentor.comentor]] === Mentor/Mit-Mentor Gründe für eine Mit-Mentorenschaft: * Signifikanter Zeitzonenunterschied. Verfügbare Mentoren, mit denen man interaktiv Dinge via Instant Messenger besprechen kann, sind extrem hilfreich. * Potentielle Sprachbarriere. Ja, FreeBSD ist, wie die meiste Softwareentwicklung auch, sehr Englisch-orientiert. Jedoch kann ein Mentor, der die eigene Sprache spricht, hilfreich sein. * ENOTIME! Solange es keinen 30-Stunden Tag und eine 8-Tage Woche gibt, haben manche von uns nur eine begrenzte Menge Zeit zur Verfügung. Diese Last mit jemandem zu teilen macht die Sache einfacher. * Ein Mentor-Neuling kann von den Erfahrungen eines erfahrenen Committers bzw. Mentors profitieren. * Zwei Köpfe sind besser als einer allein. Gründe für einen Einzelmentor: * Sie arbeiten nicht so gut mit anderen zusammen. * Sie bevorzugen eine 1:1-Beziehung. * Die Gründe für die Mit-Mentorenschaft treffen auf Sie nicht zu. [[mentor.expectations]] === Erwartungen Wir erwarten, dass Mentoren alle vorgeschlagenen Patche, zumindest für einen Anfangszeitraum, welcher mehr als eine oder zwei Wochen dauert, prüfen und testweise bauen sollten. Wir erwarten, dass Mentoren die Verantwortung für die Aktionen Ihres Mentees übernehmen. Ein Mentor sollte hinter den Commits des Mentees stehen, sowohl implizit als auch explizit. Wir erwarten, dass Mentoren ihre Mentees die Lektüre des link:{porters-handbook}[Handbuch für Ports Committer], die link:{pr-guidelines}[PR-Richtlinien] sowie den link:{committers-guide}[Committer's Guide] empfehlen. Obwohl es nicht notwendig ist, all diese Details im Gedächtnis zu behalten, sollte jeder Committer einen Überblick über diese Dinge haben, um ein effizienter Teil der Gemeinschaft zu sein (und um Anfängerfehler so weit wie möglich zu vermeiden). [[mentees]] === Auswahl eines Mentees Es existiert keine definierte Regel, die festlegt, dass ein Kandidat bereit ist. Es kann eine Kombination der Anzahl von PRs sein, die an GNATS geschickt wurden, die Anzahl an Ports, die von dieser Person gepflegt werden, die Häfigkeit von Ports-Aktualisierungen bzw. die Menge von Beteiligungen in einem bestimmten Bereich, z.B. GNOME, KDE, Gecko oder andere. Ein Kandidat sollte fasst keine Auszeiten haben, auf Anfragen antworten und generell sehr hilfreich in der Unterstützung seiner Ports sein. Es sollte eine Historie von Einsatzbereitschaft vorliegen, da es bekanntermassen Zeit und Aufwand benötigt, um einen Committer zu trainieren. Falls jemand schon längere Zeit dabei ist und Zeit damit verbringt, zu beobachten, wie die Dinge funktionieren, ergibt sich eine Erwartungshaltung von angehäuftem Wissen. Viel zu oft schon haben wir beobachten müssen, dass jemand viele PRs schickt, um anschliessend im IRC aufzutauchen um zu fragen, wann das Commit-Bit gewährt wird. Eine Mailingliste abonniert zu haben und dieser zu folgen ist vorteilhaft. Es gibt keine echte Erwartungshaltung, dass durch das schreiben auf einer Mailingliste jemand zum Committer wird, doch es zeigt dennoch die Bereitschaft. Manche Mails bieten Einsichten in das Wissen eines Kandidaten genauso, wie gut jemand mit anderen interagiert. Gleichfalls kann durch Teilnahme im IRC jemand ein höheres Ansehen erhalten. Fragen Sie sechs verschiedene Committer, wieviele PRs jemand vor seiner Nominierung einschicken sollte und Sie erhalten sechs verschiedene Antworten. Fragen Sie diese Individuen wie lange jemand schon etwas beigetragen haben sollte, ergibt sich das gleiche Dilemma. Wieviele Ports sollte jemand als Minimum betreuen? Jetzt haben wir wirklich eine Diskussion ausgelöst! Manche Dinge sind einfach schwer als Mengen abzubilden, also muss ein Mentor eine Einschätzung machen und hoffen, dass portmgr zustimmt. [[mentorship.duration]] === Dauer der Mentorenschaft Mit der Zeit wird das Vertrauen in jemanden wachsen und der Mentee wird "implizite" Commitrechte erhalten. Dies kann triviale Änderungen für [.filename]#Makefile#, [.filename]#pkg-descr# und andere Dateien beinhalten. Genauso kann dies Aktualisierungen der `PORTVERSION`, die keine `plist`-Änderungen sind, betreffen. Andere Umstände können nach Gutdünken des Mentors formuliert werden. Allerdings sollten Versionsänderungen bei Ports, die andere Ports betreffen, vorher von einem Mentor geprüft werden. Genauso wie wir alle verschiedene Individuen sind, besitzt jeder Mentee unterschiedliche Lernkurven, Zeitinvestitionen und andere Einflussfaktoren, die zu der Zeit beitragen, bevor jemand "allein fliegt". Empirisch sollte ein Mentee für mindestens 3 Monate beobachtet werden. 90-100 Commits ist ein weiteres Ziel, dass ein Mentor nutzen kann, bevor jemand als Mentee entlassen wird. Andere Faktoren, die man vor der Freilassung seines Mentees berücksichtigen sollte, ist die Anzahl der gemachten Fehler, die erhaltenen QATs, usw. Falls immer noch Fehler gemacht werden, ist die Betreuung durch einen Mentor weiterhin notwendig. [[mentor.comentor.debate]] === Mentor/Mit-Mentor Debatten Wenn eine Anfrage an portmgr geht, sieht dies normalerweise so aus: "I propose 'foo' for a ports commit bit, I will co-mentor with 'bar'". Anfrage wurde erhalten, abgestimmt und die Entscheidung wird getragen. Der Mentor ist die primäre Kontaktperson, oder zumindest der "erste unter gleichgestellten", der Co-Mentor dient als Absicherung. Mancher Schurke, dessen Name hier nicht genannt werden soll, machte den http://lists.freebsd.org/pipermail/cvs-ports/2007-September/134614.html[ersten aufgezeichneten Mit-Mentoren Commit]. Es wurden auch schon Mit-Mentoren commits im src-Baum beobachtet. Macht dieses Vorgehen die Sache richtig? Ist es falsch? Es scheint Teil dessen zu sein, wie die Dinge sich entwickeln. [[mentee.expectations]] === Erwartungen Wir erwarten von Mentees, dass diese für konstruktive Kritik aus der Gemeinschaft offen sind. Es gibt immer noch viel "Wissen", welches nicht geschrieben steht. Richtig auf konstruktive Kritik zu antworten ist was wir hoffen zu erkennen, wenn wir jemanden anhand seiner Beiträge im IRC und auf den Mailinglisten auswählen. Wir warnen Mentees davor, dass manche Kritik, die sie erhalten werden, weniger "konstruktiv" als andere sein wird (egal ob durch Verständigungsprobleme, die durch die Sprache bedingt sind oder durch Pingeligkeit). Mit dieser Art von Kritik kultiviert umzugehen ist auch Teil davon, einer grossen Gemeinschaft anzugehören. Bei spezifischen Problemen mit bestimmten Leuten oder falls fragen aufkommen, hoffen wir dass diese sich an ein Mitglied von portmgr wenden, entweder via IRC oder per eMail. diff --git a/documentation/content/de/books/handbook/basics/_index.adoc b/documentation/content/de/books/handbook/basics/_index.adoc index dd72d5e028..195d22a1ef 100644 --- a/documentation/content/de/books/handbook/basics/_index.adoc +++ b/documentation/content/de/books/handbook/basics/_index.adoc @@ -1,1577 +1,1577 @@ --- title: Kapitel 3. Grundlagen des FreeBSD Betriebssystems part: Teil I. Erste Schritte prev: books/handbook/bsdinstall next: books/handbook/ports --- [[basics]] = Grundlagen des FreeBSD Betriebssystems :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :table-caption: Tabelle :figure-caption: Abbildung :example-caption: Beispiel :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 3 ifeval::["{backend}" == "html5"] :imagesdir: ../../../../images/books/handbook/basics/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/basics/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/basics/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/de/mailing-lists.adoc[] include::shared/de/teams.adoc[] include::shared/de/urls.adoc[] toc::[] [[basics-synopsis]] == Übersicht Dieses Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des FreeBSD-Betriebssystems. Viel von diesem Material gilt auch für jedes andere UNIX(R)-artige System. Neue Benutzer von FreeBSD sollten dieses Kapitel aufmerksam lesen. Dieser Abschnitt behandelt die folgenden Themen: * virtuelle Konsolen, * Erstellung und Verwaltung von Benutzern und Gruppen in FreeBSD, * Zugriffsrechte unter UNIX(R) sowie Datei-Flags unter FreeBSD, * Zugriffskontrolllisten für Dateisysteme, * die Verzeichnisstruktur von FreeBSD, * Organisation von Dateisystemen unter FreeBSD, * Ein- und Abhängen von Dateisystemen, * Prozesse, Dämonen und Signale, * Shells und die Login-Umgebung, * Texteditoren, * Geräte und Gerätedateien, * wie Sie in den Manualpages nach weiteren Informationen suchen können. [[consoles]] == Virtuelle Konsolen und Terminals Wenn das FreeBSD-System so konfiguriert wurde, dass es ohne eine grafische Benutzeroberfläche startet, wird das System nach dem Start einen Anmeldeprompt ausgeben, wie in diesem Beispiel zu sehen: [source,shell] .... FreeBSD/amd64 (pc3.example.org) (ttyv0) login: .... Die erste Zeile enthält einige Informationen über das System. `amd64` zeigt an, dass auf dem System in diesem Beispiel eine 64-Bit Version von FreeBSD läuft. Der Hostname ist `pc3.example.org` und [.filename]#ttyv0# gibt an, dass dies die "Systemkonsole" ist. Die zweite Zeile zeigt den Anmeldeprompt. Da FreeBSD ein Mehrbenutzersystem ist, muss es die verschiedenen Benutzer voneinander unterscheiden können. Dies wird dadurch erreicht, dass sich jeder Benutzer zuerst am System anmelden muss, um Zugriff auf die Programme zu bekommen. Jeder Benutzer hat einen eindeutigen "Benutzernamen" und ein persönliches "Kennwort". Um sich auf der Systemkonsole anzumelden, geben Sie den Benutzernamen ein, der während der Systeminstallation, wie in crossref:bsdinstall[bsdinstall-addusers,Benutzer hinzufügen] beschrieben, konfiguriert wurde und drücken Sie kbd:[Enter]. Geben Sie dann das zum Benutzernamen zugeordnete Passwort ein und drücken kbd:[Enter]. Das Passwort wird aus Sicherheitsgründen _nicht angezeigt_. Sobald das richtige Passwort eingegeben wird, wird die Nachricht des Tages (MOTD) gefolgt von einer Eingabeaufforderung ausgegeben. In Abhängigkeit der verwendeten Shell des Benutzers wird der Prompt mit dem Zeichen `#`, `$` oder `%` dargestellt. Der Prompt zeigt an, dass der Benutzer jetzt an der FreeBSD Systemkonsole angemeldet ist und nun alle verfügbaren Befehle probieren kann. [[consoles-virtual]] === Virtuelle Konsolen Obwohl die Systemkonsole dazu verwendet werden kann, um mit dem System zu interagieren, wird sich ein Benutzer in der Regel an einer virtuellen Konsole im FreeBSD-System anmelden. Das liegt daran, dass die Systemmeldungen standardmäßig auf der Systemkonsole angezeigt werden und somit die Meldungen des Befehls oder einer Datei, die der Benutzer gerade bearbeitet, überschrieben werden. In der Voreinstellung ist FreeBSD so konfiguriert, dass viele virtuelle Konsolen zur Eingabe von Befehlen zur Verfügung stehen. Jede virtuelle Konsole verfügt über einen eigenen Anmeldeprompt und eine Shell. Sie können ganz einfach zwischen den virtuellen Konsolen umschalten. Dies ist vergleichbar mit mehreren geöffneten Fenstern in einer graphischen Umgebung. Die Tastenkombinationen kbd:[Alt+F1] bis kbd:[Alt+F8] sind in FreeBSD zum Umschalten zwischen virtuellen Konsolen reserviert. Verwenden Sie kbd:[Alt+F1] um auf die Systemkonsole ([.filename]#ttyv0#) zu wechseln, kbd:[Alt+F2] für die erste virtuelle Konsole ([.filename]#ttyv1#, kbd:[Alt+F3] für die zweite virtuelle Konsole ([.filename]#ttyv2#, und so weiter. Wenn Sie Xorg als graphische Oberfläche benutzen, können Sie mit kbd:[Strg]kbd:[Alt]kbd:[F1] zur virtuellen Konsole zurückkehren. Beim Wechsel von einer Konsole zur nächsten wird die Bildschirmausgabe von FreeBSD verwaltet. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Kommandos abgesetzt werden können. Die Programme, die in einer virtuellen Konsole gestartet werden, laufen auch dann weiter, wenn der Benutzer auf eine andere virtuelle Konsole wechselt. Lesen Sie man:kbdcontrol[1], man:vidcontrol[1], man:atkbd:[4], man:syscons[4] sowie man:vt[4] für eine recht technische Beschreibung der FreeBSD-Konsole und der Tastatur-Treiber. In FreeBSD wird die Anzahl der verfügbaren virtuellen Konsolen in diesem Abschnitt von [.filename]#/etc/ttys# konfiguriert: [.programlisting] .... # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" xterm on secure ttyv2 "/usr/libexec/getty Pc" xterm on secure ttyv3 "/usr/libexec/getty Pc" xterm on secure ttyv4 "/usr/libexec/getty Pc" xterm on secure ttyv5 "/usr/libexec/getty Pc" xterm on secure ttyv6 "/usr/libexec/getty Pc" xterm on secure ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure .... Um eine virtuelle Konsole zu deaktivieren, setzen Sie ein Kommentarzeichen (`#` an den Anfang der Zeile für die entsprechende Konsole. Um bspw. die Anzahl der verfügbaren virtuellen Konsolen von acht auf vier zu reduzieren, setzen Sie ein `#` an den Anfang der letzten vier Zeilen, den virtuellen Konsolen [.filename]#ttyv5# bis [.filename]#ttyv8#. Kommentieren Sie nicht die Zeile für die Systemkonsole [.filename]#ttyv0# aus! Beachten Sie, dass die letzte virtuelle Konsole ([.filename]#ttyv8#) zum Wechsel auf die graphische Oberfläche gedacht ist, wenn Xorg wie im crossref:x11[x11,Das X-Window-System] installiert und konfiguriert ist. man:ttys[5] enthält eine ausführliche Beschreibung der Spalten dieser Datei und der verfügbaren Optionen für virtuelle Konsolen. [[consoles-singleuser]] === Single-User-Modus Das FreeBSD Boot-Menü verfügt über eine Option "Boot Single User". Wird diese Option gewählt, bootet das System in einen speziellen Modus, der als "Single-User-Modus" bekannt ist. Dieser Modus wird normalerweise zur Reparatur des Systems verwendet, bspw. wenn das System nicht mehr startet, oder das `root`-Passwort zurückgesetzt werden muss. Im Single-User-Modus haben Sie keinen Zugriff auf das Netzwerk und es stehen Ihnen keine weiteren virtuellen Konsolen zur Verfügung. Allerdings haben Sie vollen Zugriff auf das System und in der Voreinstellung wird das `root`-Passwort nicht benötigt. Aus diesem Grund wird ein physischer Zugriff auf die Tastatur benötigt, um in diesem Modus zu booten. Zur Absicherung eines FreeBSD-Systems sollte ermittelt werden, welche Personen physischen Zugriff auf die Tastatur bekommen sollen. Die Einstellungen für den Single-User-Modus befinden sich diesem Abschnitt von [.filename]#/etc/ttys#: [.programlisting] .... # 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 Voreinstellung ist der Status auf `secure` eingestellt. Das setzt voraus, dass der physische Zugriff auf die Tastatur entweder unwichtig ist, oder über eine Sicherheitsrichtlinie geregelt wird. Wenn der Status auf `insecure` eingestellt wird, wird davon ausgegangen, dass die Umgebung selbst unsicher ist, da jeder Zugriff auf die Tastatur hat. FreeBSD wird dann nach dem `root`-Passwort fragen, wenn ein Benutzer versucht in den Single-User-Modus zu booten. [NOTE] ==== __Setzen Sie `insecure` nicht leichtfertig ein__! Wenn das `root`-Passwort vergessen wird, wird es schwierig in den Single-User-Modus zu gelangen, wenn man den Bootprozess von FreeBSD nicht genau versteht. ==== [[consoles-vidcontrol]] === Den Videomodus der Konsole anpassen Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden Modus eingestellt werden, der von der Grafikkarte und dem Monitor unterstützt wird (beispielsweise 1024x768 oder 1280x1024). Um eine andere Einstellung zu verwenden, muss das `VESA`-Modul geladen werden: [source,shell] .... # kldload vesa .... Um festzustellen, welche Video-Modi von der Hardware unterstützt werden, nutzen Sie man:vidcontrol[1]. Um eine Liste aller unterstützten Modi zu sehen, verwenden Sie diesen Befehl: [source,shell] .... # vidcontrol -i mode .... Die Ausgabe dieses Befehls listet alle Videomodi, die von der Hardware unterstützt werden. Um einen neuen Video-Modi zu wählen, wird der entsprechende Modus als `root`-Benutzer an man:vidcontrol[1] übergeben: [source,shell] .... # vidcontrol MODE_279 .... Um diese Einstellung dauerhaft zu speichern, muss folgende Zeile in [.filename]#/etc/rc.conf# hinzugefügt werden: [.programlisting] .... allscreens_flags="MODE_279" .... [[users-synopsis]] == Benutzer und grundlegende Account-Verwaltung FreeBSD ermöglicht es mehreren Benutzern, den Computer zur selben Zeit zu benutzen. Es kann immer nur ein Benutzer vor der Konsole sitzen, aber es können sich beliebig viele Benutzer über das Netzwerk am System anmelden. Jeder Benutzer muss einen Account haben, um das System benutzen zu können. Nachdem Sie dieses Kapitel gelesen haben, werden Sie * die verschiedenen Account-Typen von FreeBSD kennen, * wissen, wie Sie Accounts angelegen, verändern oder löschen, * wissen, wie Sie Limits für einen Benutzer oder eine Gruppe setzen, um beispielsweise Ressourcen, wie Speicher oder CPU-Zeit einzuschränken, * wissen, wie Sie Gruppen erstellen und Benutzer zu diesen Gruppen hinzufügen. [[users-introduction]] === Account-Typen Jeder Zugriff auf das FreeBSD-System geschieht über Accounts und alle Prozesse werden von Benutzern gestartet, also sind Benutzer- und Account-Verwaltung von wesentlicher Bedeutung. Es gibt drei Haupttypen von Accounts: Systembenutzer, Benutzer-Accounts und der Superuser-Account. [[users-system]] ==== Systembenutzer Systembenutzer starten Dienste wie DNS, Mail-Server und Web-Server. Der Grund dafür ist die Sicherheit; wenn die Programme von dem Superuser gestartet werden, können Sie ohne Einschränkungen handeln. Beispiele von Systembenutzern sind `daemon`, `operator`, `bind`, `news` und `www`. [WARNING] ==== Bei der Verwendung der Gruppe `operator` ist Vorsicht geboten, da dem Benutzer unbeabsichtigt Privilegien gewährt werden könnten, beispielsweise zum Herunterfahren oder Neustarten des Systems, oder der Zugriff auf alle Geräte in [.filename]#/dev#. ==== `nobody` ist der generische unprivilegierte Systembenutzer. Bedenken Sie aber, dass je mehr Dienste `nobody` benutzen, desto mehr Dateien und Prozesse diesem Benutzer gehören und dieser Benutzer damit umso privilegierter wird. [[users-user]] ==== Benutzer-Accounts Benutzer-Accounts sind realen Personen zugeordnet und sind das primäre Mittel des Zugriffs das System. Jede Person, die Zugriff auf das System bekommt, sollte einen eindeutigen Benutzer-Account besitzen. Dies erlaubt es dem Administrator herauszufinden, wer was macht. Gleichzeitig werden die Benutzer daran gehindert, die Einstellungen anderer Benutzer zu zerstören. Jeder Benutzer kann die eigene Umgebung anpassen, bspw. seine voreingestellte Shell, Editor, Tastenbelegungen und Spracheinstellungen. Mit jedem Account eines FreeBSD-Systems sind bestimmte Informationen verknüpft: Loginnamen:: Der Loginname wird am `login:` Prompt eingegeben. Jeder Benutzer muss einen eindeutigen Benutzernamen haben. Es gibt eine Reihe von Regeln für die Erstellung von gültigen Loginnamen, die in man:passwd[5] dokumentiert sind. Es wird aus Kompatibilitätsgründen empfohlen, Benutzernamen zu verwenden, die aus Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind. Passwort:: Jeder Account ist mit einem Passwort verknüpft. User ID (UID):: Die User ID (UID) ist eine Zahl, die verwendet wird, um die Benutzer auf dem FreeBSD-System eindeutig zu identifizieren. Programme, die einen Loginnamen akzeptieren, wandeln diesen zuerst in eine UID um. Es wird empfohlen, nur UIDs kleiner 65535 zu verwenden, da höhere Werte Kompatibilitätsprobleme mit einigen Anwendungen verursachen können. Group ID (GID):: Die Group ID (GID) ist eine Zahl, die verwendet wird, um die primäre Gruppe eines Benutzers eindeutig zu identifizieren. Gruppen sind ein Mechanismus zur Steuerung des Zugriffs auf Ressourcen über die GID eines Benutzers anstelle der UID. Dies kann die Größe einiger Konfigurationsdateien signifikant reduzieren und ermöglicht es Benutzern, Mitglied mehreren Gruppen zu sein. Es wird empfohlen, GIDs kleiner 65535 zu verwenden, da höhere Werte bei einigen Anwendungen große Probleme verursachen können. Login-Klasse:: Login-Klassen erweitern das Gruppenkonzept. Sie erhöhen die Flexibilität des Systems in der Handhabung der verschiedenen Accounts. Login-Klassen werden auch im crossref:security[users-limiting,Login-Klassen konfigurieren] diskutiert. Gültigkeit von Passwörtern:: In der Voreinstellung verfallen Passwörter nicht. Allerdings können Passwortwechsel nach einer gewissen Zeit auf Basis einzelner Accounts erzwungen werden. Verfallszeit eines Accounts:: In der Voreinstellung verfallen unter FreeBSD keine Accounts. Wenn Sie Accounts einrichten, die nur für eine bestimmte Zeit gültig sein sollen, beispielsweise Accounts für Teilnehmer eines Praktikums, können Sie mit man:pw[8] die Gültigkeitsdauer des Accounts angeben. Nachdem die angegebene Zeitspanne verstrichen ist, kann dieser Account nicht mehr zum Anmelden verwendet werden, obwohl alle Verzeichnisse und Dateien, die diesem Account gehören, noch vorhanden sind. vollständiger Benutzername:: FreeBSD identifiziert einen Account eindeutig über den Loginnamen, der aber keine Ähnlichkeit mit dem richtigen Namen des Benutzers haben muss. Ähnlich wie bei einem Kommentar, kann diese Information Leerzeichen, Großbuchstaben und mehr als 8 Zeichen enthalten. Heimatverzeichnis:: Das Heimatverzeichnis gibt den vollständigen Pfad zu dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher Anmeldung befindet. Es ist üblich, alle Heimatverzeichnisse unter [.filename]#/home/Loginname# oder [.filename]#/usr/home/Loginname# anzulegen. Im Heimatverzeichnis oder in dort angelegten Verzeichnissen werden die Dateien eines Benutzers gespeichert. Login-Shell:: Grundsätzlich ist die Shell, von denen es viele unterschiedliche gibt, eine Schnittstelle zum System. Die bevorzugte Shell eines Benutzers kann seinem Account zugeordnet werden. [[users-superuser]] ==== Der Superuser-Account Der Superuser-Account, normalerweise `root` genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte aber nicht für alltägliche Aufgaben wie das Verschicken und Empfangen von Mails, Erforschen des Systems oder Programmierung benutzt werden. Der Superuser kann, im Gegensatz zu normalen Benutzer-Accounts, ohne Beschränkungen operieren und die falsche Anwendung des Superuser-Accounts kann in spektakulären Katastrophen resultieren. Benutzer-Accounts sind nicht in der Lage, das System versehentlich zu zerstören, deswegen wird empfohlen, normale Benutzer-Accounts zu verwenden, solange nicht zusätzliche Privilegien benötigt werden. Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und dreifach überprüfen, da ein zusätzliches Leerzeichen oder ein fehlender Buchstabe irreparablen Datenverlust bedeuten kann. Es gibt mehrere Möglichkeiten Superuser-Rechte zu bekommen. Obwohl man sich direkt als `root` anmelden kann, wird von dieser Methode dringend abgeraten. Verwenden Sie stattdessen man:su[1] um zum Superuser zu werden. Wenn Sie noch ein `-` eingeben, wird der Benutzer auch die Umgebung des Root-Benutzers erben. Der Benutzer, der diesen Befehl ausführt muss Mitglied der Gruppe `wheel` sein, oder der Befehl schlägt fehl. Zudem muss der Benutzer das Kennwort für den Benutzer-Account `root` kennen. In diesem Beispiel wird der Benutzer nur zum Superuser, um `make install` auszuführen, da dieser Befehl Superuser-Rechte erfordert. Nachdem der Befehl ausgeführt wurde, kann der Benutzer `exit` eingeben, um den Superuser-Account zu verlassen und zu den Privilegien des Benutzer-Accounts zurückkehren. .Ein Programm als Superuser installieren [example] ==== [source,shell] .... % configure % make % su - Password: # make install # exit % .... ==== Das in FreeBSD enthaltene man:su[1] funktioniert gut für einzelne Systeme oder in kleineren Netzwerken, mit nur einem Administrator. Eine Alternative ist es, das Paket oder den Port package:security/sudo[] zu installieren. Diese Software bietet eine Protokollierung von Aktivitäten und ermöglicht es dem Administrator zu bestimmen, welche Benutzer welche Befehle als Superuser ausführen dürfen. [[users-modifying]] === Accounts verändern FreeBSD stellt eine Vielzahl an Programmen bereit, um Accounts zu verändern. Die gebräuchlichsten Kommandos sind in <> gefolgt von einer detaillierten Beschreibung, zusammengefasst. Weitere Informationen und Anwendungsbeispiele finden Sie in der Manualpage des jeweiligen Programms. [[users-modifying-utilities]] .Programme zur Verwaltung von Benutzer-Accounts [cols="10%,90%", frame="none", options="header"] |=== | Programm | Zusammenfassung |man:adduser[8] |Das empfohlene Werkzeug, um neue Accounts zu erstellen. |man:rmuser[8] |Das empfohlene Werkzeug, um Accounts zu löschen. |man:chpass[1] |Ein flexibles Werkzeug, um Informationen in der Account-Datenbank zu verändern. |man:passwd[1] |Ein Werkzeug, um Passwörter von Accounts zu ändern. |man:pw[8] |Ein mächtiges und flexibles Werkzeug um alle Informationen über Accounts zu ändern. |=== [[users-adduser]] ==== `adduser` Das empfohlene Programm zum Hinzufügen neuer Benutzer ist man:adduser[8]. Wenn ein neuer Benutzer hinzugefügt wird, aktualisiert das Programm automatisch [.filename]#/etc/passwd# und [.filename]#/etc/group#. Es erstellt auch das Heimatverzeichnis für den Benutzer, kopiert die Standardkonfigurationsdateien aus [.filename]#/usr/shared/skel# und kann optional eine ,,Willkommen``-Nachricht an den neuen Benutzer versenden. Das Programm muss als Superuser ausgeführt werden. Das Werkzeug man:adduser[8] arbeitet interaktiv und führt durch die einzelnen Schritte, wenn ein neues Benutzerkonto erstellt wird. Wie in <> zu sehen ist, müssen Sie entweder die benötigte Information eingeben oder kbd:[Return] drücken, um den Vorgabewert in eckigen Klammern zu akzeptieren. In diesem Beispiel wird der Benutzer in die Gruppe `wheel` aufgenommen, was es ihm erlaubt mit man:su[1] zum Superuser zu werden. Wenn Sie fertig sind, können Sie entweder einen weiteren Benutzer erstellen oder das Programm beenden. [[users-modifying-adduser]] .Einen Benutzer unter FreeBSD anlegen [example] ==== [source,shell] .... # adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! # .... ==== [NOTE] ==== Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen angezeigt. Passen Sie auf, dass Sie das Passwort korrekt eingeben. ==== [[users-rmuser]] ==== `rmuser` Benutzen Sie man:rmuser[8] als Superuser, um einen Account vollständig aus dem System zu entfernen. Dieses Programm führt die folgenden Schritte durch: [.procedure] . Entfernt den man:crontab[1] Eintrag des Benutzers, wenn dieser existiert. . Entfernt alle man:at[1] jobs, die dem Benutzer gehören. . Schließt alle Prozesse des Benutzers. . Entfernt den Benutzer aus der lokalen Passwort-Datei des Systems. . Entfernt optional das Heimatverzeichnis des Benutzers, falls es dem Benutzer gehört. . Entfernt eingegangene E-Mails des Benutzers aus [.filename]#/var/mail#. . Entfernt alle Dateien des Benutzers aus temporären Dateispeicherbereichen wie [.filename]#/tmp#. . Entfernt den Loginnamen von allen Gruppen, zu denen er gehört, aus [.filename]#/etc/group#. Wenn eine Gruppe leer wird und der Gruppenname mit dem Loginnamen identisch ist, wird die Gruppe entfernt. Das ergänzt sich mit den einzelnen Benutzer-Gruppen, die von man:adduser[8] für jeden neuen Benutzer erstellt werden. Der Superuser-Account kann nicht mit man:rmuser[8] entfernt werden, da dies in den meisten Fällen das System unbrauchbar macht. Als Vorgabe wird ein interaktiver Modus benutzt. .Interaktives Löschen von Accounts mit `rmuser` [example] ==== [source,shell] .... # rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Removing user (jru): mailspool home passwd. # .... ==== [[users-chpass]] ==== `chpass` Jeder Benutzer kann man:chpass[1] verwenden, um die Shell und persönliche Informationen des Benutzerkontos zu verändern. Der Superuser kann dieses Werkzeug benutzen, um zusätzliche Kontoinformationen für alle Benutzer zu ändern. Werden neben dem optionalen Loginnamen keine weiteren Optionen angegeben, zeigt man:chpass[1] einen Editor mit Account-Informationen an. Wenn der Benutzer den Editor verlässt, wird die Account-Datenbank mit den neuen Informationen aktualisiert. [NOTE] ==== Dieses Programm fragt nach dem Verlassen des Editors nach dem Passwort, es sei denn, man ist als Superuser angemeldet. ==== In <> hat der Superuser `chpass jru` eingegeben. Es werden die Felder ausgegeben, die für diesen Benutzer geändert werden können. Wenn stattdessen `jru` diesen Befehl aufruft, werden nur die letzten sechs Felder ausgegeben. Dies ist in <> zu sehen. [[users-modifying-chpass-su]] .`chpass` als Superuser verwenden [example] ==== [source,shell] .... #Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: .... ==== [[users-modifying-chpass-ru]] .`chpass` als normaler Benutzer verwenden [example] ==== [source,shell] .... #Changing user database information for jru. Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: .... ==== [NOTE] ==== Die Kommandos man:chfn[1] und man:chsh[1] sind nur Verweise auf man:chpass[1], genauso wie man:ypchpass[1], man:ypchfn[1] und man:ypchsh[1]. Da NIS automatisch unterstützt wird, ist es nicht notwendig das `yp` vor dem Kommando einzugeben. NIS wird später im crossref:network-servers[network-servers,Netzwerkserver] besprochen. ==== [[users-passwd]] ==== passwd Jeder Benutzer kann mit man:passwd[1] einfach sein Passwort ändern. Um eine versehentliche oder unbefugte Änderung zu verhindern, muss bei einem Passwortwechsel zunächst das ursprüngliche Passwort eingegeben werden, bevor das neue Passwort festgelegt werden kann. .Das eigene Passwort wechseln [example] ==== [source,shell] .... % passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done .... ==== Der Superuser kann jedes beliebige Passwort ändern, indem er den Benutzernamen an man:passwd[1] übergibt. Das Programm fordert den Superuser nicht dazu auf, das aktuelle Passwort des Benutzers einzugeben. Dadurch kann das Passwort geändert werden, falls der Benutzer sein ursprüngliches Passwort vergessen hat. .Als Superuser das Passwort eines anderen Accounts verändern [example] ==== [source,shell] .... # passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done .... ==== [NOTE] ==== Wie bei man:chpass[1] ist man:yppasswd[1] nur ein Verweis auf man:passwd[1]. NIS wird von jedem dieser Kommandos unterstützt. ==== [[users-pw]] ==== `pw` Mit dem Werkzeug man:pw[8] können Accounts und Gruppen erstellt, entfernt, verändert und angezeigt werden. Dieses Kommando dient als Schnittstelle zu den Benutzer- und Gruppendateien des Systems. man:pw[8] besitzt eine Reihe mächtiger Kommandozeilenschalter, die es für die Benutzung in Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung des Kommandos komplizierter, als die der anderen hier vorgestellten Kommandos. [[users-groups]] === Gruppen Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden durch den Gruppennamen und die GID identifiziert. Der Kernel von FreeBSD entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht. Wenn jemand von der GID eines Benutzers oder Prozesses spricht, meint er damit meistens die erste Gruppe der Gruppenliste. Die Zuordnung von Gruppennamen zur GID steht in [.filename]#/etc/group#, einer Textdatei mit vier durch Doppelpunkte getrennten Feldern. Im ersten Feld steht der Gruppenname, das zweite enthält ein verschlüsseltes Passwort, das dritte gibt die GID an und das vierte besteht aus einer Komma separierten Liste der Mitglieder der Gruppe. Eine ausführliche Beschreibung der Syntax dieser Datei finden Sie in man:group[5]. Wenn Sie [.filename]#/etc/group# nicht von Hand editieren möchten, können Sie man:pw[8] zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufügen einer Gruppe mit dem Namen `teamtwo`: .Setzen der Mitgliederliste einer Gruppe mit man:pw[8] [example] ==== [source,shell] .... # pw groupadd teamtwo # pw groupshow teamtwo teamtwo:*:1100: .... ==== `1100` ist die GID der Gruppe `teamtwo`. Momentan hat `teamtwo` noch keine Mitglieder. Mit dem folgenden Kommando wird der Benutzer `jru` in die Gruppe `teamtwo` aufgenommen. .Ein Gruppenmitglied mit man:pw[8] hinzufügen [example] ==== [source,shell] .... # pw groupmod teamtwo -M jru # pw groupshow teamtwo teamtwo:*:1100:jru .... ==== Als Argument von `-M` geben Sie eine Komma separierte Liste von Mitgliedern an, die in die Gruppe aufgenommen werden sollen. Aus den vorherigen Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für jeden Benutzer enthält. Das System teilt dem Benutzer automatisch eine Gruppe zu, die aber vom `groupshow` Kommando von man:pw[8] nicht angezeigt wird. Diese Information wird allerdings von man:id[1] und ähnlichen Werkzeugen angezeigt. Das heißt, dass man:pw[8] nur [.filename]#/etc/group# manipuliert, es wird nicht versuchen, zusätzliche Informationen aus [.filename]#/etc/passwd# zu lesen. .Hinzufügen eines neuen Gruppenmitglieds mittels man:pw[8] [example] ==== [source,shell] .... # pw groupmod teamtwo -m db # pw groupshow teamtwo teamtwo:*:1100:jru,db .... ==== Die Argumente zur Option `-m` ist eine durch Komma getrennte Liste von Benutzern, die der Gruppe hinzugefügt werden sollen. Anders als im vorherigen Beispiel werden diese Benutzer in die Gruppe aufgenommen und ersetzen nicht die bestehenden Benutzer in der Gruppe. .Mit `id` die Gruppenzugehörigkeit bestimmen [example] ==== [source,shell] .... % id jru uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) .... ==== In diesem Beispiel ist `jru` Mitglied von `jru` und `teamtwo`. Weitere Informationen zu diesem Befehl und dem Format von [.filename]#/etc/group# finden Sie in man:pw[8] und man:group[5]. [[permissions]] == Zugriffsrechte In FreeBSD besitzt jede Datei und jedes Verzeichnis einen Satz von Zugriffsrechten. Es stehen mehrere Programme zum Anzeigen und Bearbeiten dieser Rechte zur Verfügung. Ein Verständnis für die Funktionsweise von Zugriffsrechten ist notwendig, um sicherzustellen, dass Benutzer nur auf die von ihnen benötigten Dateien zugreifen können und nicht auf die Dateien des Betriebssystems oder von anderen Benutzern. In diesem Abschnitt werden die traditionellen Zugriffsrechte von UNIX(R) beschrieben. Informationen zu feingranularen Zugriffsrechten für Dateisysteme finden Sie im crossref:security[fs-acl,Zugriffskontrolllisten für Dateisysteme (ACL)]. In UNIX(R) werden die grundlegenden Zugriffsrechte in drei Typen unterteilt: Lesen, Schreiben und Ausführen. Diese Zugriffstypen werden verwendet, um den Dateizugriff für den Besitzer der Datei, die Gruppe und alle anderen zu bestimmen. Die Lese-, Schreib- und Ausführungsberechtigungen werden mit den Buchstaben `r`, `w` und `x` dargestellt. Alternativ können die Berechtigungen als binäre Zahlen dargestellt werden, da jede Berechtigung entweder aktiviert oder deaktiviert (`0`) ist. Wenn die Berechtigung als Zahl dargestellt wird, ist die Reihenfolge immer als `rwx` zu lesen, wobei `r` den Wert `4` hat, `w` den Wert `2` und `x` den Wert `1`. In Tabelle 4.1 sind die einzelnen nummerischen und alphabetischen Möglichkeiten zusammengefasst. Das Zeichen `-` in der Spalte "Auflistung im Verzeichnis" besagt, dass eine Berechtigung deaktiviert ist. .UNIX(R) Zugriffsrechte [cols="10%,50%,40%", frame="none", options="header"] |=== | 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` |=== Benutzen Sie das Argument `-l` mit man:ls[1], 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: [source,shell] .... % 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 .... Das erste Zeichen (ganz links) der ersten Spalte zeigt an, 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 Beispiel 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. 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. Diese speziellen Gerätedateien sind in [.filename]#/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 man:cd[1], 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]. === Symbolische Zugriffsrechte Symbolische Zugriffsrechte verwenden Zeichen anstelle von oktalen Werten, um die Berechtigungen für Dateien oder Verzeichnisse festzulegen. Zugriffsrechte verwenden die Syntax _Wer_, _Aktion_ und _Berechtigung_. Die folgenden Werte stehen zur Auswahl: [.informaltable] [cols="1,1,1", frame="none", options="header"] |=== | 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 |=== Diese symbolischen Werte werden zusammen mit man:chmod[1] verwendet. Beispielsweise würde der folgende Befehl den Zugriff auf _FILE_ für alle anderen Benutzer verbieten: [source,shell] .... % 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 die Schreibberechtigung auf _FILE_ und fügt für jeden Ausführungsrechte hinzu: [source,shell] .... % chmod go-w,a+x FILE .... === FreeBSD Datei-Flags Zusätzlich zu den Zugriffsrechten unterstützt FreeBSD auch die Nutzung von "Datei-Flags". Diese erhöhen die Sicherheit des Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt. Mit dem Einsatz von Datei-Flags kann sogar `root` daran gehindert werden, Dateien zu löschen oder zu verändern. Datei-Flags werden mit man:chflags[1] verändert. Um beispielsweise auf der Datei [.filename]#file1# das "unlöschbar"-Flag zu aktivieren, geben Sie folgenden Befehl ein: [source,shell] .... # chflags sunlink file1 .... Um dieses Flag zu deaktivieren, setzen Sie ein "no" vor `sunlink`: [source,shell] .... # chflags nosunlink file1 .... Um die Flags einer Datei anzuzeigen, verwenden Sie man:ls[1] zusammen mit `-lo`: [source,shell] .... # ls -lo file1 .... [.programlisting] .... -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 .... Einige Datei-Flags können nur vom `root`-Benutzer gesetzt oder gelöscht werden. Andere wiederum können auch vom Eigentümer der Datei gesetzt werden. Weitere Informationen hierzu finden sich in man:chflags[1] und man:chflags[2]. === Die Berechtigungen `setuid`, `setgid`, und `sticky` Anders als die Berechtigungen, die bereits angesprochen wurden, existieren drei weitere Einstellungen, über die alle Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen `setuid`, `setgid` und `sticky`. Diese Einstellungen sind wichtig für manche UNIX(R)-Operationen, da sie Funktionalitäten zur Verfügung stellen, die normalerweise nicht an gewöhnliche Anwender vergeben wird. Um diese zu verstehen, muss der Unterschied zwischen der realen und der effektiven Benutzer-ID erwähnt werden. Die reale Benutzer-ID ist die UID, welche den Prozess besitzt oder gestartet hat. Die effektive UID ist diejenige, als die der Prozess läuft. Beispielsweise wird man:passwd[1] mit der realen ID des Benutzers ausgeführt, der sein Passwort ändert. Um jedoch die Passwortdatenbank zu bearbeiten, wird es effektiv als `root`-Benutzer ausgeführt. Das ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne einen `Permission Denied`-Fehler angezeigt zu bekommen. Die setuid-Berechtigung kann durch das Voranstellen bei einer Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im folgenden Beispiel gezeigt wird: [source,shell] .... # chmod 4755 suidexample.sh .... Die Berechtigungen auf [.filename]#suidexample.sh# sehen jetzt wie folgt aus: [.programlisting] .... -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh .... Beachten Sie, dass ein `s` jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen mit erhöhten Berechtigungen zu laufen, wie beispielsweise `passwd`. [NOTE] ==== Die `nosuid` man:mount[8]-Option bewirkt, dass solche Anwendungen stillschweigend scheitern, ohne den Anwender darüber zu informieren. Diese Option ist nicht völlig zuverlässig, da ein `nosuid`-Wrapper in der Lage wäre, dies zu umgehen. ==== Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals. Starten Sie auf einem `passwd` als normaler Benutzer. Während es auf die Passworteingabe wartet, überprüfen Sie die Prozesstabelle und sehen Sie sich die Informationen für man:passwd[1] an: Im Terminal A: [source,shell] .... Changing local password for trhodes Old Password: .... Im Terminal B: [source,shell] .... # ps aux | grep passwd .... [source,shell] .... trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd .... Obwohl man:passwd[1] als normaler Benutzer ausgeführt wird, benutzt es die effektive UID von `root`. Die `setgid`-Berechtigung führt die gleiche Aktion wie die `setuid`-Berechtigung durch, allerdings verändert sie die Gruppenberechtigungen. Wenn eine Anwendung oder ein Werkzeug mit dieser Berechtigung ausgeführt wird, erhält es die Berechtigungen basierend auf der Gruppe, welche die Datei besitzt und nicht die des Benutzers, der den Prozess gestartet hat. Um die `setgid`-Berechtigung auf einer Datei zu setzen, geben Sie man:chmod[1] eine führende Zwei (2) mit: [source,shell] .... # chmod 2755 sgidexample.sh .... Beachten Sie in der folgenden Auflistung, dass das `s` sich jetzt in dem Feld befindet, das für die Berechtigungen der Gruppe bestimmt ist: [source,shell] .... -rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh .... [NOTE] ==== Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript um eine ausführbare Datei handelt, wird es nicht mit einer anderen EUID oder effektiven Benutzer-ID ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf man:setuid[2]-Systemaufrufe erhalten. ==== Die `setuid` und `setgid` Berechtigungs-Bits können die Systemsicherheit verringern, da sie erhöhte Rechte ermöglichen. Das dritte Berechtigungs-Bit, das `sticky bit` kann die Sicherheit eines Systems erhöhen. Wenn das `sticky bit` auf einem Verzeichnis angewendet wird, erlaubt es das Löschen von Dateien nur durch den Besitzer der Datei. Dies ist nützlich, um die Löschung von Dateien in öffentlichen Verzeichnissen wie [.filename]#/tmp#, durch Benutzer denen diese Dateien nicht gehören, zu verhindern. Um diese Berechtigung anzuwenden, stellen Sie der Berechtigung eine Eins (1) voran: [source,shell] .... # chmod 1777 /tmp .... Das `sticky bit` kann anhand des `t` ganz am Ende der Berechtigungen abgelesen werden. [source,shell] .... # ls -al / | grep tmp .... [source,shell] .... drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp .... [[dirstructure]] == Verzeichnis-Strukturen Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Verzeichnis ist das Root-Verzeichnis "/". Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das Betriebssystem 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 [.filename]#/usr#, [.filename]#/var#, [.filename]#/tmp#, [.filename]#/mnt# sowie [.filename]#/cdrom#. Auf diese Verzeichnisse verweisen üblicherweise Einträge in [.filename]#/etc/fstab#. Diese Datei ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten, vom System gelesen werden. Die meisten der Dateisysteme in [.filename]#/etc/fstab# werden beim Booten automatisch durch das Skript man:rc[8] gemountet, wenn die zugehörigen Einträge nicht mit `noauto` versehen sind. Weitere Informationen zu diesem Thema finden Sie im <>. Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in man:hier[7]. Die folgende Aufstellung gibt einen kurzen Überblick über die am häufigsten verwendeten Verzeichnisse: [.informaltable] [cols="20%,80%", frame="none", options="header"] |=== | Verzeichnis | Beschreibung |[.filename]#/# |Wurzelverzeichnis des Dateisystems. |[.filename]#/bin/# |Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb. |[.filename]#/boot/# |Programme und Konfigurationsdateien, die während des Bootens benutzt werden. |[.filename]#/boot/defaults/# |Vorgaben für die Boot-Konfiguration. Weitere Details finden Sie in man:loader.conf[5]. |[.filename]#/dev/# |Gerätedateien. Weitere Details finden Sie in man:intro[4]. |[.filename]#/etc/# |Konfigurationsdateien und Skripten des Systems. |[.filename]#/etc/defaults/# |Vorgaben für die System Konfigurationsdateien. Weitere Details finden Sie in man:rc[8]. |[.filename]#/etc/mail/# |Konfigurationsdateien von MTAs wie man:sendmail[8]. |[.filename]#/etc/periodic/# |Täglich, wöchentlich oder monatlich laufende Skripte, die von man:cron[8] gestartet werden. Weitere Details finden Sie in man:periodic[8]. |[.filename]#/etc/ppp/# |Konfigurationsdateien von man:ppp[8]. |[.filename]#/mnt/# |Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird. |[.filename]#/proc/# |Prozess Dateisystem. Weitere Details finden Sie in man:procfs[5] und man:mount_procfs[8]. |[.filename]#/rescue/# |Statisch gelinkte Programme zur Wiederherstellung des Systems, wie in man:rescue[8] beschrieben. |[.filename]#/root/# |Home Verzeichnis von `root`. |[.filename]#/sbin/# |Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind. |[.filename]#/tmp/# |Temporäre Dateien, die für gewöhnlich bei einem Neustart des Systems verloren gehen. Häufig wird ein speicherbasiertes Dateisystem unter [.filename]#/tmp# eingehängt. Dieser Vorgang kann automatisiert werden, wenn tmpmfs-bezogene Variablen von man:rc.conf[5] verwendet werden, oder ein entsprechender Eintrag in [.filename]#/etc/fstab# existiert. Weitere Informationen finden Sie in man:mdmfs[8]. |[.filename]#/usr/# |Der Großteil der Benutzerprogramme und Anwendungen. |[.filename]#/usr/bin/# |Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen. |[.filename]#/usr/include/# |Standard C include-Dateien. |[.filename]#/usr/lib/# |Bibliotheken. |[.filename]#/usr/libdata/# |Daten verschiedener Werkzeuge. |[.filename]#/usr/libexec/# |System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden. |[.filename]#/usr/local/# |Lokale Programme und Bibliotheken. Die Ports-Sammlung von FreeBSD benutzt dieses Verzeichnis als Zielverzeichnis für Anwendungen. Innerhalb von [.filename]#/usr/local# sollte das von man:hier[7] beschriebene Layout für [.filename]#/usr# benutzt werden. Das [.filename]#man# Verzeichnis wird direkt unter [.filename]#/usr/local# anstelle unter [.filename]#/usr/local/share# angelegt. Die Dokumentation der Ports findet sich in [.filename]#share/doc/port#. |[.filename]#/usr/obj/# |Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von [.filename]#/usr/src# entsteht. |[.filename]#/usr/ports/# |Die FreeBSD-Ports-Sammlung (optional). |[.filename]#/usr/sbin/# |System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden. |[.filename]#/usr/shared/# |Von der Architektur unabhängige Dateien. |[.filename]#/usr/src/# |Quelldateien von BSD und/oder lokalen Ergänzungen. |[.filename]#/var/# |Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien. Manchmal wird ein speicherbasiertes Dateisystem unter [.filename]#/var# eingehängt. Dieser Vorgang kann automatisiert werden, wenn die varmfs-bezogenen Variablen von man:rc.conf[5] verwendet werden, oder ein entsprechender Eintrag in [.filename]#/etc/fstab# existiert. Weitere Informationen finden Sie in man:mdmfs[8]. |[.filename]#/var/log/# |Verschiedene Logdateien des Systems. |[.filename]#/var/mail/# |Postfächer der Benutzer. |[.filename]#/var/spool/# |Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme. |[.filename]#/var/tmp/# |Temporäre Dateien, die in der Regel auch bei einem Neustart des Systems erhalten bleiben, es sei denn, bei [.filename]#/var# handelt es sich um ein speicherbasiertes Dateisystem. |[.filename]#/var/yp/# |NIS maps. |=== [[disk-organization]] == Festplatten, Slices und Partitionen FreeBSD identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: [.filename]#readme.txt# und [.filename]#README.TXT# bezeichnen daher zwei verschiedene Dateien. FreeBSD benutzt keine Dateiendungen, um den Typ der Datei zu bestimmen, egal ob es sich um ein Programm, ein Dokument oder um andere Daten handelt. 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 die Ablage von Daten erleichtert. In Dateinamen werden Verzeichnisse durch einen Schrägstrich (`/`, Slash) getrennt. Wenn z.B. das Verzeichnis [.filename]#foo# ein Verzeichnis [.filename]#bar# enthält, in dem sich die Datei [.filename]#readme.txt# befindet, lautet der vollständige Name der Datei (oder der _Pfad_ zur Datei) [.filename]#foo/bar/readme.txt#. Beachten Sie, dass sich dies von Windows(R) unterscheidet, wo der `\` (Backslash für die Trennung von Datei- und Verzeichnisnamen verwendet wird. FreeBSD benutzt keine Laufwerkbuchstaben oder Laufwerknamen im Pfad. Beispielsweise würde man unter FreeBSD nicht [.filename]#c:\foo\bar\readme.txt# eingeben. Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt genau ein _Wurzelverzeichnis_, das so genannte Root-Directory. Dieses Wurzelverzeichnis kann weitere Verzeichnisse enthalten. Ein Dateisystem wird als Wurzeldateisystem festgelegt, und jedes weitere Dateisystem wird unter dem Wurzeldateisystem _eingehangen_. Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf derselben Platte zu liegen. Betrachten wir die drei Dateisysteme `A`, `B` und `C`. Jedes Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse enthält: [.filename]#A1#, [.filename]#A2#, [.filename]#B1#, [.filename]#B2#, [.filename]#C1# und [.filename]#C2#. Das Wurzeldateisystem soll `A` sein. man:ls[1] zeigt darin die beiden Verzeichnisse [.filename]#A1# und [.filename]#A2# an. Der Verzeichnisbaum sieht wie folgt aus: -image::../../../images/handbook/basics/example-dir1.png[] +image::example-dir1.png[] Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems eingehangen. Wir hängen nun das Dateisystem `B` in das Verzeichnis [.filename]#A1# ein. Das Wurzelverzeichnis von `B` ersetzt nun das Verzeichnis [.filename]#A1# und die Verzeichnisse des Dateisystems `B` werden sichtbar: -image::../../../images/handbook/basics/example-dir2.png[] +image::example-dir2.png[] Jede Datei in den Verzeichnissen [.filename]#B1# oder [.filename]#B2# kann über den Pfad [.filename]#/A1/B1# oder [.filename]#/A1/B2# erreicht werden. Dateien aus dem Verzeichnis [.filename]#/A1# sind jetzt verborgen. Wenn das Dateisystem `B` wieder _abgehangen_ wird (umount), erscheinen die verborgenen Dateien wieder. Wenn das Dateisystem `B` unter dem Verzeichnis [.filename]#A2# eingehangen würde, sähe der Verzeichnisbaum so aus: -image::../../../images/handbook/basics/example-dir3.png[] +image::example-dir3.png[] Die Dateien des Dateisystems `B` wären unter den Pfaden [.filename]#/A2/B1# und [.filename]#/A2/B2# erreichbar. Dateisysteme können übereinander eingehangen werden. Der folgende Baum entsteht, wenn im letzten Beispiel das Dateisystem `C` in das Verzeichnis [.filename]#B1# des Dateisystems `B` eingehangen wird: -image::../../../images/handbook/basics/example-dir4.png[] +image::example-dir4.png[] `C` könnte auch im Verzeichnis [.filename]#A1# eingehangen werden: -image::../../../images/handbook/basics/example-dir5.png[] +image::example-dir5.png[] 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. Beispielsweise kann das Wurzeldateisystem schreibgeschützt eingehangen werden, sodass es für Benutzer nicht möglich ist, versehentlich kritische Dateien zu editieren oder zu löschen. Von Benutzern beschreibbare Dateisysteme wie [.filename]#/home# können mit der Option _nosuid_ eingehangen werden, 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 FreeBSD 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 FreeBSD-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 * Dateisysteme haben eine festgelegte Größe. 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. + [IMPORTANT] ==== FreeBSD 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(R)-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. FreeBSD benutzt einen Teil der Platte für den _Swap-Bereich_, um _virtuellen Speicher_ zur Verfügung zu stellen. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann FreeBSD 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: [.informaltable] [cols="30%,70%", frame="none", options="header"] |=== | 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 wird in dieser Partition kein Dateisystem angelegt. |`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. |=== In FreeBSD werden Festplatten in Slices, welche in Windows(R) als Partitionen bekannt sind, aufgeteilt und von 1 bis 4 durchnummeriert. Diese werden dann in Partitionen unterteilt, welche wiederum Dateisysteme enthalten und mit Buchstaben benannt werden. Die Slice-Nummern werden mit vorgestelltem `s` hinter den Gerätenamen gestellt: "da0__s1__" 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: "ada0__s5__" ist die erste erweiterte Slice auf einer SATA-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: "da0__a__" ist die `a`-Partition des ersten `da`-Laufwerks. Dieses Laufwerk ist "dangerously dedicated". "ada1s3__e__" ist die fünfte Partition in der dritten Slice der zweiten SATA-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 <> aufgeführt. Wenn Sie eine Partition angeben, beinhaltet das den Plattennamen, `s`, die Slice-Nummer und den Buchstaben der Partition. Einige Beispiele finden Sie in <>. Der Aufbau einer Festplatte wird in <> dargestellt. Bei der Installation von FreeBSD legen Sie Slices auf der Festplatte an, erstellen Partitionen für FreeBSD innerhalb der Slice, erstellen ein Dateisystem oder Auslagerungsbereiche und entscheiden, welche Dateisysteme wo eingehangen werden. [[disks-naming]] .Laufwerk-Codes [cols="1,1", frame="none", options="header"] |=== | Laufwerkstyp | Gerätename |SATA- und IDE-Festplatten |`ada` oder `ad` |SCSI-Festplatten und USB-Speichermedien |`da` |SATA- und IDE-CD-ROM-Laufwerke |`cd` oder `acd` |SCSI-CD-ROM-Laufwerke |`cd` |Diskettenlaufwerke |`fd` |Verschiedene proprietäre CD-ROM-Laufwerke |`mcd` für Mitsumi CD-ROM und `scd` für Sony CD-ROM |SCSI-Bandlaufwerke |`sa` |IDE-Bandlaufwerke |`ast` |RAID-Laufwerke |Beispiele sind `aacd` für Adaptec(R) AdvancedRAID, `mlxd` für Mylex(R), `amrd` für AMI MegaRAID(R), `idad` für Compaq Smart RAID, `twed` für 3ware(R) RAID. |=== [[basics-disk-slice-part]] .Namen von Platten, Slices und Partitionen [example] ==== [.informaltable] [cols="1,1", frame="none", options="header"] |=== | Name | Bedeutung |[.filename]#ada0s1a# |Die erste Partition (`a`) in der ersten Slice (`s1`) der ersten SATA-Festplatte (`ada0`). |[.filename]#da1s2e# |Die fünfte Partition (`e`) der zweiten Slice (`s2`) auf der zweiten SCSI-Festplatte (`da1`). |=== ==== [[basics-concept-disk-model]] .Aufteilung einer Festplatte [example] ==== Das folgende Diagramm zeigt die Sicht von FreeBSD auf die erste SATA-Festplatte des Systems. Die Platte soll 250 GB groß sein und eine 80 GB große Slice (MS-DOS(R)-Partitionen) sowie eine 170 GB große Slice enthalten. Die erste Slice enthält ein Windows(R) NTFS-Dateisystem ([.filename]#C:#), die zweite Slice enthält eine FreeBSD-Installation. Die FreeBSD-Installation in diesem Beispiel verwendet vier Datenpartitionen und einen Auslagerungsbereich. Jede der vier Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die `a`-Partition. In der `d`-Partition befindet sich [.filename]#/var# und in der `f`-Partition befindet sich [.filename]#/usr#. Die `c`-Partition bezieht sich auf die gesamte Slice und wird nicht für gewöhnliche Partitionen verwendet. -image::../../../images/handbook/basics/disk-layout.png[] +image::disk-layout.png[] ==== [[mount-unmount]] == Anhängen und Abhängen von Dateisystemen Ein Dateisystem wird am besten als ein Baum mit der Wurzel [.filename]#/# veranschaulicht. [.filename]#/dev#, [.filename]#/usr#, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie [.filename]#/usr/local# haben können. Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. [.filename]#/var# enthält [.filename]#log/#, [.filename]#spool/# sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, [.filename]#/var# von [.filename]#/# 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 crossref:network-servers[network-nfs,Network File System] oder CD-ROM-Laufwerken, befinden. [[disks-fstab]] === Die [.filename]#fstab# Datei Während des Boot-Prozesses (crossref:boot[boot,FreeBSDs Bootvorgang]) werden in [.filename]#/etc/fstab# aufgeführte Verzeichnisse, sofern sie nicht mit der Option `noauto` versehen sind, automatisch angehangen. Diese Datei enthält Einträge in folgendem Format: [.programlisting] .... device /mount-point fstype options dumpfreq passno .... `device`:: Ein existierender Gerätename wie in <> beschrieben. `mount-point`:: Ein existierendes Verzeichnis, auf dem das Dateisystem gemountet wird. `fstype`:: Der Typ des Dateisystems, der an man:mount[8] weitergegeben wird. FreeBSDs Standarddateisystem ist `ufs`. `options`:: Entweder `rw` für beschreibbare Dateisysteme oder `ro` für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist `noauto` für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in man:mount[8]. `dumpfreq`:: Wird von man:dump[8] benutzt, um bestimmen zu können, welche Dateisysteme gesichert werden müssen. 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 `0` zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von `passno``1` betragen. Allen anderen Dateisystemen sollten Werte größer `1` zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird man:fsck[8] versuchen, diese parallel zu überprüfen. Lesen Sie man:fstab[5] für weitere Informationen über das Format von [.filename]#/etc/fstab# und dessen Optionen. [[disks-mount]] === Verwendung von man:mount[8] Dateisysteme werden mit man:mount[8] eingehängt. In der grundlegenden Form wird es wie folgt benutzt: [example] ==== [source,shell] .... # mount device mountpoint .... ==== Dieser Befehl bietet viele Optionen, die in man:mount[8] beschrieben werden. Die am häufigsten verwendeten Optionen sind: .Optionen von `mount` `-a`:: Hängt alle Dateisysteme aus [.filename]#/etc/fstab# an. Davon ausgenommen sind Dateisysteme, die mit "noauto" markiert sind, die mit der Option `-t` ausgeschlossen wurden und Dateisysteme, die schon angehangen sind. `-d`:: Führt alles bis auf den `mount`-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit `-v`. Damit wird angezeigt, was man:mount[8] tatsächlich versuchen würde, um das Dateisystem anzuhängen. `-f`:: Erzwingt das Anhängen eines unsauberen Dateisystems (riskant) oder die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird. `-r`:: Hängt das Dateisystem schreibgeschützt ein. Dies kann auch durch Angabe von `-o ro` erreicht werden. `-t`_fstype_:: Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn `-a` angegeben wurde. "ufs" ist das Standarddateisystem. `-u`:: Aktualisiert die Mountoptionen des Dateisystems. `-v`:: Geschwätzig sein. `-w`:: Hängt das Dateisystem beschreibbar an. Die folgenden Optionen können durch eine Kommata separierte Liste an `-o` übergeben werden: nosuid:: SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist eine nützliche Sicherheitsfunktion. [[disks-umount]] === Verwendung von man:umount[8] man:umount[8] hängt ein Dateisystem ab. Dieser Befehl akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, `-a` oder `-A`. Jede Form akzeptiert `-f`, um das Abhängen zu erzwingen, und `-v`, um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit `-f`, da der Computer abstürzen kann oder es können Daten auf dem Dateisystem beschädigt werden. Um alle Dateisysteme abzuhängen, oder nur diejenigen, die mit `-t` gelistet werden, wird `-a` oder `-A` benutzt. Beachten Sie, dass `-a` das Root-Dateisystem nicht aushängt. [[basics-processes]] == Prozesse und Dämonen FreeBSD ist ein Multitasking-Betriebssystem. Jedes Programm, das zu irgendeiner Zeit läuft wird als _Prozess_ bezeichnet. Jedes laufende Kommando startet mindestens einen neuen Prozess. Dazu gibt es eine Reihe von Systemprozessen, die von FreeBSD ausgeführt werden. Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die _Prozess-ID_ (_PID_) genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Beispielsweise ist die Shell ein Prozess. Jedes in Shell gestartete Kommando ist dann ein neuer Prozess, der die Shell als Elternprozess besitzt. Die Ausnahme hiervon ist ein spezieller Prozess namens man:init[8], der beim booten immer als erstes gestartet wird und der immer die PID`1` hat. Manche Programme erwarten keine Eingaben vom Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Webserver zum Beispiel antwortet auf Web-Anfragen und nicht auf Benutzereingaben. Mail-Server sind ein weiteres Beispiel für diesen Typ von Anwendungen. Diese Programme sind als _Dämonen_ bekannt. Der Begriff Dämon stammt aus der griechischen Mythologie und bezeichnet ein Wesen, das weder gut noch böse ist und welches unsichtbar nützliche Aufgaben verrichtet. Deshalb ist 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 und der Druckerspool-Dämon heißt man:lpd[8]. Dies ist allerdings nur eine Konvention. Der Dämon der Anwendung Sendmail heißt beispielsweise `sendmail` und nicht `maild`. === Prozesse beobachten Um die Prozesse auf dem System zu sehen, benutzen Sie man:ps[1] und man:top[1]. Eine statische Liste der laufenden Prozesse, deren PIDs, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden, erhalten Sie mit man:ps[1]. Um alle laufenden Prozesse in einer Anzeige zu sehen, die alle paar Sekunden aktualisiert wird, so dass Sie interaktiv sehen können was der Computer macht, benutzen Sie man:top[1]. In der Voreinstellung zeigt man:ps[1] nur die laufenden Prozesse, die dem Benutzer gehören. Zum Beispiel: [source,shell] .... % ps PID TT STAT TIME COMMAND 8203 0 Ss 0:00.59 /bin/csh 8895 0 R+ 0:00.00 ps .... Die Ausgabe von man:ps[1] ist in einer Anzahl von Spalten organisiert. Die `PID` Spalte zeigt die Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an. 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 und `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` findet sich 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`. `a` zeigt Information über alle laufenden Prozesse aller Benutzer. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit `u` angezeigt. `x` zeigt auch Dämonen-Prozesse an, und `ww` 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 in etwa so aus: [source,shell] .... % top last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46 107 processes: 2 running, 104 sleeping, 1 zombie CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other Swap: 2048M Total, 2048M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4 .... 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, wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt. Wenn das ZFS-Kernelmodul geladen ist, dann zeigt die Zeile `ARC`, wie viele Daten aus dem Cache gelesen wurden. Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von man:ps[1], beispielsweise die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando, das den Prozess gestartet hat. man:top[1] zeigt in zwei Spalten den Speicherverbrauch des Prozesses an. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. Die Anzeige wird von man:top[1] automatisch alle zwei Sekunden aktualisiert. Ein anderer Intervall kann mit `-s` spezifiziert werden. [[basics-daemons]] === Stoppen von Prozessen Eine Möglichkeit mit einem laufenden Prozess zu kommunizieren, ist über das Versenden von _Signalen_ mittels man:kill[1]. Es gibt eine Reihe von verschiedenen Signalen. Manche haben eine feste Bedeutung, während andere in der Dokumentation der Anwendung beschrieben sind. Ein Benutzer kann ein Signal nur an einen Prozess senden, welcher ihm gehört. Wird versucht ein Signal an einen Prozess eines anderen Benutzers zu senden, resultiert dies in einem Zugriffsfehler mangels fehlender Berechtigungen. Die Ausnahme ist der `root`-Benutzer, welcher jedem Prozess Signale senden kann. FreeBSD kann auch ein Signal an einen Prozess 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 programmiert wurde, den man:alarm[3] Systemaufruf zu benutzen, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das "Alarm"-Signal (`SIGALRM`) gesendet. Zwei Signale können benutzt werden, um einen Prozess zu stoppen: `SIGTERM` und `SIGKILL`. `SIGTERM` fordert den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er durchführte, abzuschließen. In manchen Situationen kann der Prozess `SIGTERM` ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf. `SIGKILL` kann von keinem Prozess ignoriert werden. Wird einem Prozess `SIGKILL` geschickt, dann wird FreeBSD diesen sofort beenden. Andere häufig verwendete Signale sind `SIGHUP`, `SIGUSR1` und `SIGUSR2`. Da diese Signale für allgemeine Zwecke vorgesehen sind, werden verschiedene Anwendungen unterschiedlich auf diese Signale reagieren. Ändern Sie beispielsweise die Konfiguration eines Webservers, so muss dieser angewiesen werden, seine Konfiguration neu zu lesen. Ein Neustart von `httpd` würde dazu führen, dass der Server für kurze Zeit nicht erreichbar ist. Senden Sie dem Dämon stattdessen das `SIGHUP`-Signal. Es sei erwähnt, dass verschiedene Dämonen sich anders verhalten. Lesen Sie die Dokumentation des entsprechenden Dämonen um zu überprüfen, ob der Dämon bei einem `SIGHUP` die gewünschten Ergebnisse erzielt. [.procedure] **** .Procedure: Verschicken von Signalen Das folgende Beispiel zeigt, wie Sie man:inetd[8] ein Signal schicken. Die Konfigurationsdatei von man:inetd[8] ist [.filename]#/etc/inetd.conf#. Diese Konfigurationsdatei liest man:inetd[8] ein, wenn er `SIGHUP` empfängt. . Suchen Sie mit man:pgrep[1] die PID des Prozesses, dem Sie ein Signal schicken wollen. In diesem Beispiel ist die PID von man:inetd[8] 198: + [source,shell] .... % pgrep -l inetd 198 inetd -wW .... . Benutzen Sie man:kill[1], um ein Signal zu senden. Da man:inetd[8] dem Benutzer `root` gehört, müssen Sie zuerst mit man:su[1] `root` werden: + [source,shell] .... % su Password: # /bin/kill -s HUP 198 .... + man:kill[1] wird, wie andere UNIX(R) Kommandos auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wird versucht, einem Prozess der nicht dem Benutzer gehört, ein Signal zu senden, dann wird die Meldung `kill: _PID_: Operation not permitted` ausgegeben. Ein Tippfehler bei der Eingabe der PID führt dazu, dass das Signal an einen falschen Prozess gesendet wird, was zu negativen Ergebnissen führen kann, oder das Signal wird an eine PID gesendet die derzeit nicht in Gebrauch ist, was zu dem Fehler `kill: _PID_: No such process` führt. [NOTE] .Warum sollte man `/bin/kill` benutzen? ==== Viele Shells stellen `kill` als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt [.filename]#/bin/kill# zu starten. Beachten Sie, dass die unterschiedlichen Shells eine andere Syntax benutzen, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, `/bin/kill` direkt aufzurufen. ==== **** Beim Versenden von anderen Signalen, ersetzen Sie `TERM` oder `KILL` in der Kommandozeile mit dem Namen des Signals. [IMPORTANT] ==== Das zufällige Beenden eines Prozesses kann gravierende Auswirkungen haben. Insbesondere man:init[8], mit der PID 1, ist ein Spezialfall. `/bin/kill -s KILL 1` ist ein schneller, jedoch nicht empfohlener Weg, das System herunterzufahren. Überprüfen Sie die Argumente von man:kill[1] _immer_ zweimal _bevor_ Sie kbd:[Return] drücken. ==== [[shells]] == Shells Eine _Shell_ stellt eine Kommandozeilen-Schnittstelle zur Interaktion mit dem Betriebssystem zur Verfügung. Sie empfängt Befehle von einem Eingabekanal und führt diese aus. Viele Shells bieten eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), Kommandozeilen-Editor, sowie Makros und Umgebungsvariablen. FreeBSD enthält einige Shells, darunter die Bourne Shell (man:sh[1]) und die verbesserte C-Shell (man:tcsh[1]). Weitere Shells, wie `zsh` oder `bash`, befinden sich in der Ports-Sammlung. Die verwendete Shell ist letztlich eine Frage des Geschmacks. Ein C-Programmierer, findet vielleicht eine C-artige Shell wie man:tcsh[1] angenehmer. Ein Linux(R)-Benutzer bevorzugt vielleicht `bash`. Jede Shell hat ihre speziellen Eigenschaften, die mit der bevorzugten Arbeitsumgebung des Benutzers harmonieren kann oder nicht. Deshalb stehen mehrere Shells zur Auswahl. Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Nachdem der Benutzer einige Buchstaben eines Kommandos oder eines Dateinamen eingeben hat, vervollständigt die Shell den Rest durch drücken der kbd:[Tab]-Taste. Angenommen, Sie haben zwei Dateien [.filename]#foobar# und [.filename]#football#. Um [.filename]#foobar# zu löschen, kann der Benutzer `rm foo` eingeben und kbd:[Tab] drücken um den Dateinamen zu vervollständigen. Die Shell wird lediglich `rm foo` anzeigen. Sie konnte den Dateinamen nicht vervollständigen, da sowohl [.filename]#foobar# als auch [.filename]#football# mit `foo` anfangen. Einige Shells geben einen Signalton aus, oder zeigen alle Möglichkeiten an, wenn mehr als ein Name mit dem gegebenen Muster übereinstimmt. Der Benutzer muss dann weitere Zeichen eingeben, damit die Shell den gewünschten Dateinamen bestimmen kann. Durch Eingabe von `t` und erneutes Drücken von kbd:[Tab] ist die Shell in der Lage, den gewünschten Dateinamen zu vervollständigen. 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. <> zeigt verbreitete Umgebungsvariablen und deren Bedeutung. Beachten Sie, dass die Namen der Umgebungsvariablen immer in Großbuchstaben geschrieben sind: [[shell-env-vars]] .Gebräuchliche Umgebungsvariablen [cols="1,1", frame="none", options="header"] |=== | Variable | Beschreibung |`USER` |Name des angemeldeten Benutzers. |`PATH` |Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. |`DISPLAY` |Der Name des Xorg-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 Betriebssystems. |`MACHTYPE` |Die CPU-Architektur des Systems. |`EDITOR` |Vom Benutzer bevorzugter Text-Editor. |`PAGER` |Vom Benutzer bevorzugter Text-Betrachter. |`MANPATH` |Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages. |=== Das Setzen von Umgebungsvariablen unterscheidet sich von Shell zu Shell. In man:tcsh[1] und man:csh[1] wird dazu `setenv` benutzt. man:sh[1] und `bash` benutzen `export` um Umgebungsvariablen zu setzen. Dieses Beispiel für die man:tcsh[1]-Shell setzt die Variable `EDITOR` auf [.filename]#/usr/local/bin/emacs#: [source,shell] .... % setenv EDITOR /usr/local/bin/emacs .... Der entsprechende Befehl für `bash` wäre: [source,shell] .... % export EDITOR="/usr/local/bin/emacs" .... Um eine Umgebungsvariable zu expandieren, geben Sie in der Kommandozeile das Zeichen `$` vor dessen Namen ein. Zum Beispiel gibt `echo $TERM` den aktuellen Wert von`$TERM` aus. Shells behandeln Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das häufigste Zeichen ist `\*`, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Metazeichen können zur Vervollständigung von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert `echo *` nahezu das gleiche wie `ls`, da die Shell alle Dateinamen die mit `*` übereinstimmen, an `echo` weitergibt. Um zu verhindern, dass die Shell ein Sonderzeichen interpretiert, schützt man es, indem man einen Backslash (`\`) voranstellt. Zum Beispiel zeigt `echo $TERM` die Einstellung des Terminals an, wohingegen `echo \$TERM` einfach die Zeichenfolge `$TERM` ausgibt. [[changing-shells]] === Ändern der Shell Der einfachste Weg die Standard Shell zu ändern, ist `chsh` zu benutzen. `chsh` startet den Editor, welcher durch die Umgebungsvariable `EDITOR` gesetzt ist. Standardmäßig ist dies man:vi[1]. Tragen Sie in die Zeile die mit `Shell:` beginnt, den absoluten Pfad der neuen Shell ein. Alternativ setzt `chsh -s` die Shell, ohne dabei einen Editor aufzurufen. Um die Shell zum Beispiel auf `bash` zu ändern, geben Sie folgenden Befehl ein: [source,shell] .... % chsh -s /usr/local/bin/bash .... [NOTE] ==== Die neue Shell _muss_ in [.filename]#/etc/shells# aufgeführt sein. Wurde die Shell aus der FreeBSD Ports-Sammlung installiert, so wie in crossref:ports[ports,Installieren von Anwendungen: Pakete und Ports] beschrieben, sollte sie automatisch zu dieser Datei hinzugefügt worden sein. Wenn der Eintrag fehlt, nutzen Sie folgenden Befehl, und ersetzen Sie den Pfad mit dem Pfad zur gewünschten Shell: [source,shell] .... # echo /usr/local/bin/bash >> /etc/shells .... Danach kann man:chsh[1] erneut aufgerufen werden. ==== === Fortgeschrittene Shell Techniken Die UNIX(R)-Shell ist nicht nur ein Kommandozeileninterpreter, sie ist ein leistungsfähiges Werkzeug, das Benutzern die Ausführung von Befehlen ermöglicht. Es kann die Ein- und Ausgabe umleiten und Befehle miteinander verketten, um die finale Ausgabe zu verbessern. Diese Funktionalität, gepaart mit den eingebauten Befehlen, bietet dem Benutzer eine Umgebung, welche die Effizienz erheblich steigern kann. Als Redirection bezeichnet man die Umleitung der Ein- oder Ausgabe in einen anderen Befehl oder Datei. Um beispielsweise die Ausgabe des Befehls man:ls[1] in eine Datei zu schreiben, muss die Ausgabe umgeleitet werden: [source,shell] .... % ls > Verzeichnis_Ausgabe.txt .... Die Datei [.filename]#Verzeichnis_Ausgabe.txt# enthält nun den Verzeichnisinhalt. Einige Befehle, wie beispielsweise man:sort[1], können verwendet werden um von der Eingabe zu lesen. Wenn Sie die Ausgabe sortieren möchten, müssen Sie die Eingabe umleiten: [source,shell] .... % sort < Verzeichnis_Ausgabe.txt .... Die Eingabe wird sortiert und auf dem Bildschirm ausgegeben. Um diese Ausgabe wiederum in eine Datei umzuleiten, kann die Ausgabe von man:sort[1] umgeleitet werden: [source,shell] .... % sort < Verzeichnis_Ausgabe.txt > Sortierte_Ausgabe.txt .... In den bisherigen Beispielen wurden für die Umleitung Dateideskriptoren verwendet. Jedes UNIX(R)-System verfügt über drei Dateideskriptoren: Standardeingabe (stdin), Standardausgabe (stdout) und Stardardfehlerausgabe (stderr). Jeder Deskriptor hat einen bestimmten Zweck. Die Eingabe könnte von einer Tastatur, einer Maus oder einem anderen Eingabegerät stammen. Die Ausgabe könnte der Bildschirm oder ein Drucker sein. Die Standardfehlerausgabe wird zur Diagnose und für Fehlermeldungen verwendet. Alle drei Deskriptoren arbeiten I/O basiert und werden häufig als Streams bezeichnet. Die Verwendung von Deskriptoren erlaubt es der Shell, die Ein- und Ausgabe von verschiedenen Kommandos umzuleiten und zu teilen. Eine weitere Möglichkeit zur Umleitung bietet der Pipe-Operator. Der UNIX(R) Pipe-Operator "|" wird verwendet, um die Ausgabe eines Kommandos an ein anderes Programm zu übergeben. Grundsätzlich bedeutet dies, dass die Standardausgabe eines Programms als Standardeingabe für ein weiteres Programm verwendet wird. Ein Beispiel: [source,shell] .... % cat Verzeichnis_Auflistung.txt | sort | less .... In diesem Beispiel wird der Inhalt von [.filename]#Verzeichnis_Auflistung.txt# sortiert und die Ausgabe an man:less[1] übergeben. Dies erlaubt es dem Benutzer, die Ausgabe Schritt für Schritt und im eigenen Tempo zu betrachten. [[editors]] == Text-Editoren Die meiste Konfiguration unter FreeBSD wird 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. Ein einfach zu erlernender Editor ist man:ee[1], was für easy editor steht. Um diesen Editor zu starten, gibt man in der Kommandozeile `ee _filename_` ein, wobei _filename_ den Namen der zu editierenden Datei darstellt. Einmal im Editor, finden sich alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen (`^`) steht für die kbd:[Ctrl] (oder kbd:[Strg]) Taste, mit `^e` ist also die Tastenkombination kbd:[Ctrl+e] gemeint. Um man:ee[1] zu verlassen, drücken Sie kbd:[Esc] und wählen dann im Hauptmenü `leave editor` aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde. FreeBSD verfügt über leistungsfähigere Editoren wie man:vi[1] als Teil des Basissystems. Andere Editoren wie package:editors/emacs[] und package:editors/vim[] sind Teil der Ports-Sammlung. Diese Editoren bieten höhere Funktionalität, jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Das Erlernen eines leistungsfähigeren Editors, wie vim oder Emacs, kann auf lange Sicht Zeit einsparen. Viele Anwendungen, die Dateien verändern oder Texteingabe erwarten, werden automatisch einen Texteditor öffnen. Um den Standardeditor zu ändern, wird die Umgebungsvariable `EDITOR` gesetzt, wie im Abschnitt <> beschrieben. [[basics-devices]] == 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. Eine Kopie dieser Bootmeldungen wird in [.filename]#/var/run/dmesg.boot# gespeichert. Jedes Gerät verfügt über einen Gerätenamen und Gerätenummer. Zum Beispiel steht [.filename]#ada0# für die erste SATA Festplatte, während [.filename]#kbd0# die Tastatur repräsentiert. Auf die meisten Geräte wird unter FreeBSD über spezielle Gerätedateien im [.filename]#/dev# Verzeichnis zugegriffen. [[basics-more-information]] == Manualpages [[basics-man]] === 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 Manuals können mit `man` eingesehen werden: [source,shell] .... % man Kommando .... _Kommando_ ist der Name des Kommandos, über das man etwas erfahren will. Um beispielsweise mehr über das Kommando man:ls[1] zu erfahren, geben Sie ein: [source,shell] .... % man ls .... Die Manualpages sind in nummerierte Sektionen unterteilt, die jeweils ein Thema darstellen. In FreeBSD sind die folgenden Sektionen verfügbar: . Benutzerkommandos. . Systemaufrufe und Fehlernummern. . Funktionen der C Bibliothek. . Gerätetreiber. . Dateiformate. . Spiele und andere Unterhaltung. . Verschiedene Informationen. . Systemverwaltung und -Kommandos. . Kernel Schnittstellen. In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein `chmod` Benutzerkommando und einen `chmod()` Systemaufruf. Um man:man[1] mitzuteilen, aus welcher Sektion die Information angezeigt werden soll, kann die Sektionsnummer mit angeben werden: [source,shell] .... % man 1 chmod .... Dies wird Ihnen die Manualpage für das Benutzerkommando man:chmod[1] zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich man:chmod[1] auf das Benutzerkommando und man:chmod[2] auf den Systemaufruf. Wenn das Kommando nicht bekannt ist, kann `man -k` benutzt werden, um nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen: [source,shell] .... % man -k mail .... Dieser Befehl zeigt eine Liste von Kommandos, deren Beschreibung das Schlüsselwort "mail" enthält. Die gleiche Funktionalität erhalten Sie auch, wenn Sie man:apropos[1] benutzen. Um die Beschreibungen der Kommandos in [.filename]#/usr/bin# zu lesen, geben Sie ein: [source,shell] .... % cd /usr/bin % man -f * | more .... Dasselbe erreichen Sie durch Eingabe von: [source,shell] .... % cd /usr/bin % whatis * | more .... [[basics-info]] === GNU Info Dateien FreeBSD enthält verschiedene Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages können diese Programme Hypertext-Dokumente enthalten, die `info`-Seiten genannt werden. Diese Dokumente können mit man:info[1] ansehen kann. Wenn package:editors/emacs[] installiert ist, kann auch der info-Modus von emacs benutzt werden. Um man:info[1] zu benutzen, geben Sie ein: [source,shell] .... % info .... Eine kurze Einführung gibt es mit `h`; eine Befehlsreferenz erhalten Sie durch Eingabe von: `?`.