Index: head/de_DE.ISO8859-1/books/handbook/audit/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/audit/chapter.xml (revision 48791) +++ head/de_DE.ISO8859-1/books/handbook/audit/chapter.xml (revision 48792) @@ -1,854 +1,853 @@ Security Event Auditing TomRhodesGeschrieben von RobertWatson DanielSeuffertÜbersetzt von Einleitung AUDIT Security Event Auditing MAC &os; bietet Unterstützung für Sicherheits-Auditing. Ereignis-Auditing bietet zuverlässige, feingranulierte und konfigurierbare Aufzeichnung einer Vielzahl von sicherheitsrelevanten Systemereignissen einschliesslich Benutzereingaben, Konfigurationsänderungen sowie Datei- und Netzwerkzugriffen. Diese Log-Datensätze können unschätzbar wertvoll sein für direkte Systemüberwachung, Einbruchserkennung und Post-Mortem-Analyse. &os; implementiert &sun;s öffentlich zugängliches Basic Security Module (BSM) Application Programming Interface (API) und Dateiformat, und kann mit den Audit-Implementierungen von &sun; &solaris; und &apple; &macos; X zusammenarbeiten. Dieses Kapitel konzentriert sich auf die Installation und Konfiguration des Ereignis-Auditings. Es erklärt Audit-Richtlinien und stellt ein Beispiel einer Audit-Konfiguration vor. Nach dem Lesen dieses Kapitels werden Sie Folgendes wissen: Was Ereignis-Auditing ist und wie es funktioniert. Wie man Ereignis-Auditing in &os; für Benutzer und Prozesse konfiguriert. Wie man den Audit-Pfad mittels Audit-Reduktion und Revisionswerkzeugen überprüft. Vor dem Lesen dieses Kapitels sollten Sie: Sowohl &unix; als auch &os;-Basismechanismen beherrschen (). Mit den grundlegenden Mechanismen der Kernel-Konfiguration und -Kompilierung vertraut sein (). Mit den Maßnahmen zur Sicherung von &os; vertraut sein (). Die Audit-Funktionalität in &os; hat einige bekannte Einschränkungen. Nicht alle sicherheitsrelevanten System-Ereignisse sind auditierbar, und einige Anmelde-Mechanismen, wie beispielsweise Xorg-basierte Bildschirm-Manager und Dienste von Drittanbietern, konfigurieren das Auditing für Benutzeranmeldungen nicht korrekt. Das Sicherheits-Auditing ist in der Lage, sehr detaillierte Log-Dateien von Systemaktivitäten zu erzeugen. Auf einem ausgelasteten System kann die Pfad-Datei sehr groß werden, wenn sie für hohe Auflösung konfiguriert ist, und im Extremfall pro Woche um mehrere Gigabyte anwachsen. Administratoren sollten daher den benötigten Plattenplatz in Verbindung mit umfangreichen Audit-Konfigurationen berücksichtigen. So kann es wünschenswert sein, ein eigenes Dateisystem für /var/audit einzusetzen, damit andere Dateisysteme nicht betoffen sind, wenn das Dateisystem des Audit voll läuft. Schlüsselbegriffe Die folgenden Begriffe stehen im Zusammenhang mit Ereignis-Auditing: event: ein auditierbares Ereignis ist jedes Ereignis, das mit dem Audit-Subsystem aufgezeichnet werden kann. Beispiele für sicherheitsrelevante Systemereignisse sind etwa das Anlegen von Dateien, das Erstellen einer Netzwerkverbindung oder eine Benutzeranmeldung. Ereignisse sind entweder attributierbar, können also zu einen authentifizierten Benutzer zurückverfolgt werden, oder sind nicht-attributierbar. Nicht-attributierbare Ereignisse erfolgen daher vor der Authentifizierung im Anmeldeprozess (beispielsweise die Eingabe eines falschen Passworts). class: benannte Zusammenstellungen von zusammengehörenden Ereignissen, die in Auswahl-Ausdrücken benutzt werden. Häufig genutzte Klassen von Ereignissen schließen file creation (fc, Anlegen von Dateien), exec (ex, Ausführung) und login_logout (lo, Anmeldung-Abmeldung) ein. record: ein Audit-Logeintrag, der ein Sicherheitsereignis enthält. Jeder Datensatz enthält einen Ereignistyp, Informationen über den Gegenstand (Benutzer), welcher die Aktion durchführt, Datums- und Zeitinformationen, Informationen über jedes Objekt oder Argument sowie den Zustand hinsichtlich Erfolg oder Scheitern der Operation. trail: eine Log-Datei bestehend aus einer Reihe von Audit-Datensätzen, die Sicherheitsereignisse beschreiben. Pfade sind in grober zeitlicher Reihenfolge bezüglich des Zeitpunktes, an welchem ein Ereignis beendet wurde. Nur authorisierte Prozesse dürfen Datensätze zum Audit-Pfad hinzufügen. selection expression: eine Zeichenkette, welche eine Liste von Präfixen und Audit-Ereignisklassennamen enthält, um Ereignisse abzugleichen. preselection: der Prozess, durch den das System erkennt, welche Ereignisse von Interesse für den Administrator sind, um die Erzeugung von Datensätze zu verhindern, welche nicht von Belang sind. Die Konfiguration der Vorauswahl benutzt eine Reihe von Auswahl-Ausdrücken, um zu erkennen, welche Klassen von Ereignissen für welche Benutzer aufgezeichnet werden sollen sowie globale Einstellungen, welche sowohl auf authorisierte als auch unauthorisierte Prozesse angewendet werden. reduction: Die Reduzierung ist der Prozess, durch den Datensätze von bestehenden Audit-Pfaden ausgewählt werden für Speicherung, Ausdruck oder Analyse. Ebenso der Prozess, durch den unerwünschte Datensätze aus dem Audit-Pfad entfernt werden. Mittels Reduzierung können Administratoren Richtlinien für die Speicherung von Audit-Daten vorgeben. Zum Beispiel können ausführliche Audit-Pfade für einen Monat gespeichert werden, um danach den Pfad für archivarische Zwecke auf die Anmeldeinformationen zu reduzieren. Audit Konfiguration Userspace-Untersützung für Ereignis-Auditing ist Bestandteil des &os;-Betriebssystems. Kernel-Unterstützung kann durch Hinzufügen der folgenden Zeile in /etc/rc.conf aktiviert werden: auditd_enable="YES" Starten Sie anschließend den Audit-Daemon: &prompt.root; service auditd start Benutzer, die es bevorzugen einen angepassten Kernel zu kompilieren, müssen folgende Zeile in die Kernelkonfigurationsdatei aufnehmen: options AUDIT Ereignis-Auswahlausdrücke Auswahlausdrücke werden an einigen Stellen der Audit-Konfiguration benützt, um zu bestimmen, welche Ereignisse auditiert werden sollen. Die Ausdrücke enthalten eine Liste der Ereignisklassen, welche verglichen werden sollen, jede mit einem Präfix, welches anzeigt, ob verglichene Datensätze akzeptiert oder ignoriert werden sollen und optional, um anzuzeigen, ob der Eintrag beabsichtigt, erfolgreiche oder fehlgeschlagene Operationen zu vergleichen. Auswahlausdrücke werden von links nach rechts ausgewertet und zwei Ausdrücke werden durch Aneinanderhängen miteinander kombiniert. fasst die Audit-Ereignisklassen zusammen: Audit-Ereignisklassen Name der Klasse Beschreibung Aktion all all Vergleicht alle Ereisnisklassen. ad administrative Administrative Aktionen, ausgeführt auf dem System als Ganzes. ap application Aktionen definiert für Applikationen. cl file close Audit-Aufrufe für den Systemaufruf close. ex exec Ausführung des Audit-Programms. Auditierung von Befehlszeilen-Argumenten und Umgebungsvariablen wird gesteuert durch &man.audit.control.5; mittels der argv und envv-Parameter gemäß der Richtlinien-Einstellungen. fa file attribute access Auditierung des Zugriffs auf Objektattribute wie &man.stat.1; und &man.pathconf.2;. fc file create Audit-Ereignisse, bei denen eine Datei als Ergebnis angelegt wird. fd file delete Audit-Ereignisse, bei denen Dateilöschungen vorkommen. fm file attribute modify Audit-Ereignisse, bei denen Dateiattribute geändert werden, wie &man.chown.8;, &man.chflags.1; und &man.flock.2;. fr file read Audit-Ereignisse, bei denen Daten gelesen oder Dateien zum lesen geöffnet werden. fw file write Audit-Ereignisse, bei denen Daten geschrieben oder Dateien geschrieben oder verändert werden. io ioctl Nutzung des Systemaufrufes ioctl durch Audit. ip ipc Auditierung verschiedener Formen von Inter-Prozess-Kommunikation einschließlich POSIX-Pipes und System V IPC-Operationen. lo login_logout Audit-Ereignisse von &man.login.1; und &man.logout.1;. na non attributable Auditierung nicht-attributierbarer Ereignisse. no invalid class Kein Abgleich von Audit-Ereignissen. nt network Audit-Ereignisse in Zusammenhang mit Netzwerkaktivitäten wie &man.connect.2; und &man.accept.2; ot other Auditierung verschiedener Ereignisse. pc process Auditierung von Prozess-Operationen wie &man.exec.3; und &man.exit.3;.
Diese Ereignisklassen können angepasst werden durch Modifizierung der Konfigurationsdateien audit_class und audit_event. Jede Audit-Klasse ist kombiniert mit einem Präfix, welches anzeigt, ob erfolgreiche/gescheiterte Operationen abgebildet werden, und ob der Eintrag den Abgleich hinzufügt oder entfernt für die Klasse und den Typ. fasst die verfügbaren Präfixe zusammen. Präfixe für Audit-Ereignisklassen Präfix Aktion + Auditiert erfolgreiche Ereignisse in dieser Klasse. - Auditiert fehlgeschlagene Ereignisse in dieser Klasse. ^ Auditiert weder erfolgreiche noch fehlgeschlagene Ereignisse. ^+ Auditiert keine erfolgreichen Ereignisse in dieser Klasse. ^- Auditiert keine fehlgeschlagenen Ereignisse in dieser Klasse.
Wenn kein Präfix vorhanden ist, werden sowohl erfolgreiche als auch fehlgeschlagene Ereignisse auditiert. Das folgende Beispiel einer Auswahl-Zeichenkette wählt erfolgreiche und gescheiterte Anmelde/Abmelde-Ereignisse aus, aber nur erfolgreich beendete Ausführungs-Ereignisse: lo,+ex
Konfigurationsdateien Die folgenden Konfigurationsdateien für Sicherheits-Auditing befinden sich in /etc/security. audit_class: enthält die Definitionen der Audit-Klassen. audit_control: steuert die Eigenschaften des Audit-Subsystems, wie Standard-Audit-Klassen, Mindestfestplattenspeicher auf dem Audit-Log-Volume und die maximale Größe des Audit-Trails. audit_event: Namen und Beschreibungen der Audit-Ereignisse, und eine Liste von Klassen mit den dazugehörigen Ereignissen. audit_user: benutzerspezifische Audit-Anforderungen, kombinierbar mit den globalen Standardeinstellungen bei der Anmeldung. audit_warn: ein anpassbares Skript, das von &man.auditd.8; verwendet wird, um in bestimmten Situationen Warnmeldungen zu generieren, z.B. wenn der Platz für Audit-Protokolle knapp wird, oder wenn die Datei des Audit-Trails rotiert wurde. Konfigurationsdateien von Audit sollten sorgfältig bearbeitet und gepflegt werden, da Fehler in der Konfiguration zu einer fehlerhaften Protokollierung der Ereignisse führen können. In den meisten Fällen werden Administratoren nur audit_control und audit_user änpassen müssen. Die erste Datei steuert systemweite Audit-Eigenschaften, sowie Richtlinien. Die zweite Datei kann für die Feinabstimmung bei der Auditierung von Benutzern verwendet werden. Die <filename>audit_control</filename>-Datei Die audit_control-Datei legt eine Anzahl Vorgabewerte fest: dir:/var/audit dist:off flags:lo,aa minfree:5 naflags:lo,aa policy:cnt,argv filesz:2M expire-after:10M Die Option wird genutzt, um eines oder mehrere Verzeichnisse festzulegen, in welchen Audit-Protokolle gespeichert werden. Gibt es mehrere Verzeichniseinträge, werden diese in der angegebenen Reihenfolge genutzt, bis sie jeweils gefüllt sind. Es ist üblich, Audit so zu konfigurieren, dass die Audit-Logs auf einem dedizierten Dateisystem abgelegt werden, um Wechselwirkungen zwischen dem Audit-Subsystem und anderen Subsystemen zu verhindern, falls das Dateisystem voll läuft. Das -Feld legt die systemweite Standard-Vorauswahl-Maske für attributierbare (direkt einem Benutzer zuordenbare) Ereignisse fest. Im obigen Beispiel werden alle gescheiterten und erfolgreichen Anmelde- und Abmelde-Ereignisse für alle Benutzer aufgezeichnet. Die Option definiert den minimalen Prozentsatz an freiem Plattenplatz für das Dateisystem, in welchem der Audit-Pfad abgespeichert wird. Wenn diese Schwelle überschritten ist, wird ein Warnhinweis erzeugt. Das obige Beispiel legt den minimalen freien Platz auf zwanzig Prozent fest. Die -Option bestimmt diejenigen Audit-Klassen, für die nicht-attributierbare Ereignisse aufgezeichnet werden sollen (beispielsweise Anmeldeprozesse und System-Daemonen. Die Option legt eine durch Kommata getrennte Liste von policy-Flags fest, welche verschiedene Aspekte des Audit-Verhaltens steuern. Der vorgegebene Flag cnt zeigt an, dass das System trotz eines Audit-Fehlers weiterlaufen soll (dieses Flag wird dringend angeraten). Ein anderes, häufig genutztes Flag ist argv, welches dazu führt, dass Befehlszeilen-Argumente für den Systemauruf &man.execve.2; als Teil der Befehlsausführung aufgezeichnet werden. Die -Option spezifiziert die maximale Größe in Bytes, welche eine Audit-Pfad-Datei wachsen darf, bevor sie automatisch beendet und rotiert wird. Die Standardvorgabe 0 setzt die automatische Log-Rotation ausser Kraft. Falls die angeforderte Dateigröße größer Null und gleichzeitig unterhalb des Minimums von 512K ist, dann wird die Angabe verworfen und ein Log-Hinweis wird erzeugt. Die Datei <filename>audit_user</filename> Die audit_user-Datei erlaubt es dem Administrator, weitere Audit-Erfordernisse für bestimmte Benutzer festzulegen. Jede Zeile konfiguriert das Auditing für einen Benutzer über zwei Felder: Das erste Feld ist alwaysaudit, welches eine Ansammlung von Ereignissen vorgibt, welche immer für diesen Benutzer aufgezeichnet werden. Das zweite Feld neveraudit legt eine Menge an Ereignissen fest, die niemals für diesen Benutzer auditiert werden sollen. Das folgende Beispiel einer audit_user-Datei zeichnet Anmelde/Abmelde-Ereignisse, erfolgreiche Befehlsausführungen für den Benutzer root, Anlegen von Dateien und erfolgreiche Befehlsausführungen für den Benutzer www auf. Falls das Beispiel zusammen mit der vorstehend als Beispiel gezeigten Datei audit_control benutzt wird, dann ist der Eintrag lo für root überflüssig und Anmelde/Abmelde-Ereignisse werden für www ebenfalls aufgezeichnet. root:lo,+ex:no www:fc,+ex:no
Administration des Audit-Subsystems Audit-Pfade betrachten Audit-Pfade werden im binären BSM-Format gespeichert, daher benötigen Sie spezielle Werkzeuge, um derartige Dateien zu ändern oder Sie in Textdateien zu konvertieren. Der Befehl &man.praudit.1; wandelt alle Pfad-Dateien in ein einfaches Textformat um. Der Befehl &man.auditreduce.1; kann genutzt werden, um die Pfad-Dateien für Analyse, Ausdruck, Archivierung oder andere Zwecke zu reduzieren. Eine Reihe von Auswahl-Parametern werden von &man.auditreduce.1; unterstützt, einschliesslich Ereignistyp, Ereignisklasse, Benutzer, Datum oder Uhrzeit des Ereignisses und den Dateipfad oder das Objekt, mit dem gearbeitet wurde. Das Dienstprogramm &man.praudit.1; schreibt zum Beispiel den gesamten Inhalt einer angegebenen Audit-Protokolldatei in eine simple Textdatei: &prompt.root; praudit /var/audit/AUDITFILE AUDITFILE ist hier die zu schreibende Protokolldatei. Audit-Pfade bestehen aus einer Reihe von Datensätzen, die wiederum aus Kürzeln (token) gebildet werden, die von &man.praudit.1; fortlaufend zeilenweise ausgegeben werden. Jedes Kürzel ist von einem bestimmten Typ, z.B. enthält header einen audit-Datensatz-Header oder path enthält einen Dateipfad von einer Suche. Hier ein Beispiel eines execve-Ereignisses: header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec exec arg,finger,doug path,/usr/bin/finger attribute,555,root,wheel,90,24918,104944 subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100 return,success,0 trailer,133 Dieser Audit stellt einen erfolgreichen execve-Aufruf dar, in welchem der Befehl finger doug ausgeführt wurde. Das Kürzel des Argumentes enthält die Befehlszeile, welche die Shell an den Kernel weiterleitet. Das Kürzel path enthält den Pfad zur ausführbaren Datei (wie vom Kernel wahrgenommen). Das Kürzel attribute beschreibt die Binärdatei (insbesondere den Datei-Modus, der genutzt werden kann, um zu bestimmen, ob setuid auf die Applikation angewendet wurde). Das Kürzel subject beschreibt den untergeordneten Prozess und speichert daher in Aufeinanderfolge Audit-Benutzer-ID, effektive Benutzer-ID und Gruppen-ID, wirkliche Benutzer-ID und Grppen-ID, Process-ID, Session- ID, Port-ID und Anmelde-Adresse. Beachten Sie, dass Audit-Benutzer-ID und wirkliche Benutzer-ID abweichen: Der Benutzer robert wurde zum Benutzer root, bevor er diesen Befehl ausführte, aber er wird auditiert mit dem ursprünglich authentifizierten Benutzer. Schließlich zeigt das Kürzel return die erfolgreiche Ausführung an und trailer schließt den Datensatz ab. &man.praudit.1; unterstützt auch die Ausgabe im XML-Format (die sie über die Option auswählen können). Audit-Pfade reduzieren Da Audit-Protokolldateien sehr groß sein können, wird ein Administrator höchstwahrscheinlich eine Auswahl an Datensätzen verwenden, wie z.B. alle Datensätze zu einem bestimmten Benutzer: &prompt.root; auditreduce -u trhodes /var/audit/AUDITFILE | praudit Dies wird alle Audit-Datensätze des Benutzers trhodes auswählen, die in AUDITFILE gespeichert sind. Delegation von Rechten für Audit-Reviews Mitglieder der Gruppe audit haben die Erlaubnis, - Audit-Pfade in /var/audit zu lesen; + Audit-Pfade in /var/audit zu lesen; standardmässig ist diese Gruppe leer, daher kann nur der Benutzer root die Audit-Pfade lesen. Benutzer können der Gruppe audit hinzugefügt werden, um Rechte für Audit-Reviews zu gewähren. Da die Fähigkeit, Inhalte von Audit-Protokolldateien zu verfolgen, tiefgreifende Einblicke in das Verhalten von Benutzern und Prozessen erlaubt, wird empfohlen, dass die Gewährung von Rechten für Audit-Reviews mit Bedacht erfolgt. Aktive Überwachung mittles Audit-Pipes Audit-Pipes sind nachgebildete (geklonte) Pseudo-Geräte im Dateisystem des Gerätes, welche es Applikationen erlauben, die laufenden Audit-Datensätze anzuzapfen. Dies ist vorrangig für Autoren von Intrusion Detection Software und Systemüberwachungsprogrammen von Bedeutung. Allerdings ist für den Administrator das Audit-Pipe-Gerät ein angenehmer Weg, aktive Überwachung zu gestatten, ohne Gefahr von Problemen durch Besitzerrechte der Audit-Pfad-Datei oder Unterbrechung des Stroms von Ereignissen durch Log-Rotation. Um den laufenden Audit-Ereignisstrom zu verfolgen, geben Sie bitte folgende Befehlszeile ein: &prompt.root; praudit /dev/auditpipe In der Voreinstellung kann nur der Benutzer root auf die Audit-Pipe-Geräte-Knotenpunkte zugreifen. Um sie allen Mitgliedern der Gruppe audit zugänglich zu machen, fügen Sie eine devfs-Regel in devfs.rules hinzu: add path 'auditpipe*' mode 0440 group audit Lesen Sie &man.devfs.rules.5; für weitere Informationen, wie das devfs-Dateisystem konfiguriert wird. Es ist sehr leicht, Rückmeldungszyklen von Audit-Ereignissen hervorzurufen, in welcher das Betrachten des Resultates eines Audit-Ereignisses in die Erzeugung von mehr Audit-Ereignissen mündet. Wenn zum Beispiel der gesamte Netzwerk-I/O auditiert wird, während &man.praudit.1; in einer SSH-Sitzung gestartet wurde, dann wird ein kontinuierlicher, mächtiger Strom von Audit-Ereignissen erzeugt, da jedes ausgegebene Ereignis wiederum neue Ereignisse erzeugt. Es ist anzuraten, &man.praudit.1; an einem Audit-Pipe-Gerät nur von Sitzungen anzuwenden (ohne feingranuliertes I/O-Auditing), um dies zu vermeiden. Rotation von Audit-Pfad-Dateien Audit-Pfade werden nur vom Kernel geschrieben und nur vom Audit-Daemon &man.auditd.8; verwaltet. Administratoren sollten nicht versuchen, &man.newsyslog.conf.5; oder andere Werkzeuge zu benutzen, um Audit-Protokolldateien direkt zu rotieren. Stattdessen sollte das &man.audit.8; Management-Werkzeug benutzt werden, um die Auditierung zu beenden, das Audit-System neu zu konfigurieren und eine Log-Rotation durchzuführen. Der folgende Befehl veranlasst den Audit-Daemon, eine neue Protokolldatei anzulegen und dem Kernel zu signalisieren, die neue Datei zu nutzen. Die alte Datei wird beendet und umbenannt. Ab diesem Zeitpunkt kann sie vom Administrator bearbeitet werden. &prompt.root; audit -n Falls der &man.auditd.8;-Daemon gegenwärtig nicht läuft, wird dieser Befehl scheitern und eine Fehlermeldung wird ausgegeben. Das Hinzufügen der folgenden Zeile in /etc/crontab wird die Log-Rotation alle zwölf Stunden durch &man.cron.8; erzwingen: 0 */12 * * * root /usr/sbin/audit -n Die Änderung wird wirksam, sobald Sie die neue /etc/crontab gespeichert haben. Die automatische Rotation der Audit-Pfad-Datei in Abhängigkeit von der Dateigröße ist möglich durch die Angabe der Option in &man.audit.control.5;. Dieser Vorgang ist im Abschnitt Konfigurationsdateien dieses Kapitels beschrieben. Komprimierung von Audit-Pfaden Da Audit-Pfad-Dateien sehr groß werden können, ist es oft wünschenswert, Pfade zu komprimieren oder anderweitig zu archivieren, sobald sie vom Audit-Daemon geschlossen wurden. Das Skript audit_warn kann genutzt werden, um angepasste Aktionen für eine Vielzahl von audit-bezogenen Ereignissen auszuführen, einschliesslich der sauberen Beendigung von Audit-Pfaden, wenn diese geschlossen werden. Zum Beispiel kann man die folgenden Zeilen in das audit_warn-Skript aufnehmen, um Audit-Pfade beim Beenden zu komprimieren: # # Compress audit trail files on close. # if [ "$1" = closefile ]; then gzip -9 $2 fi Andere Archivierungsaktivitäten können das Kopieren zu einem zentralen Server, die Löschung der alten Pfad-Dateien oder die Reduzierung des alten Audit-Pfades durch Entfernung nicht benötigter Datensätze einschliessen. Das Skript wird nur dann ausgeführt, wenn die Audit-Pfad-Dateien sauber beendet wurden, daher wird es nicht auf Pfaden laufen, welche durch ein unsauberes Herunterfahren des Systems nicht beendet wurden.
Index: head/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.xml (revision 48791) +++ head/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.xml (revision 48792) @@ -1,3296 +1,3296 @@ &os; aktualisieren JimMockUmstrukturiert und aktualisiert von JordanHubbardIm Original von Poul-HenningKamp JohnPolstra NikClayton MartinHeinenÜbersetzt von Übersicht &os; wird zwischen einzelnen Releases ständig weiter entwickelt. Manche Leute bevorzugen die offiziellen Release-Versionen, während andere wiederum lieber auf dem aktuellen Stand der Entwicklung bleiben möchten. Wie dem auch sei, sogar offizielle Release-Versionen werden oft mit Sicherheitsaktualisierungen und anderen kritischen Fehlerbereinigungen versorgt. Unabhängig von der eingesetzten Version bringt &os; alle nötigen Werkzeuge mit, um das System aktuell zu halten und es innerhalb verschiedener Versionen zu aktualisieren. Dieses Kapitel beschreibt, wie man einem Entwicklungssystem folgen kann, sowie die grundlegenden Werkzeuge um &os; zu aktualisieren. Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen, welche Werkzeuge verwendet werden können, um das System und die Port-Sammlung zu aktualisieren. wissen, wie das System mit freebsd-update, Subversion oder CTM aktualisiert wird. wissen, wie man das aktuell installierte System mit einer ursprünglichen Version vergleicht. wissen, wie die installierte Dokumentation mit Subversion oder Dokumentations-Ports aktualisiert wird. den Unterschied zwischen den beiden Entwicklungszweigen &os.stable; und &os.current; kennen. wissen, wie das komplette Basissystem neu gebaut und installiert wird. Bevor Sie dieses Kapitel lesen, sollten Sie das Netzwerk richtig konfiguriert haben (). wissen, wie Software Dritter installiert wird (). In diesem Kapitel wird svn verwendet, um die &os; Quellen zu beziehen und zu aktualisieren. Um es zu verwenden, muss zuerst der Port oder das Paket devel/subversion installiert werden. &os;-Update TomRhodesGeschrieben von ColinPercivalBasierend auf bereitgestellten Mitschriften von BenedictReuschlingÜbersetzt von Updating and Upgrading freebsd-update updating-upgrading Das Einspielen von Sicherheitsaktualisierungen ist ein wichtiger Bestandteil bei der Wartung von Computersoftware, besonders wenn es um das Betriebssystem geht. Für lange Zeit war dieser Prozess unter &os; nicht einfach. Fehlerbehebungen mussten auf den Quellcode angewendet werden, danach wurde der Code zu neuen Binärdateien übersetzt und schliesslich mussten diese Dateien neu installiert werden. Das ist seit längerem nicht mehr der Fall, da &os; jetzt ein Werkzeug namens freebsd-update enthält. Dieses Werkzeug bringt zwei getrennte Funktionen mit sich. Die erste Funktion ermöglicht die Anwendung von Sicherheitsaktualisierungen im Binärformat auf das &os; Basissystem, ohne dieses neu zu übersetzen und zu installieren. Die zweite Funktion unterstützt Aktualisierungen zwischen Haupt- und Unterversionen. Binäre Aktualisierungen sind für alle Architekturen und Releases verfügbar, die aktuell vom &os; Security Team betreut werden. Vor der Aktualisierung auf eine neue Release-Version sollten die aktuellen Ankündigungen zu dem Release gelesen werden, da diese wichtige Informationen zu der gewünschten Version enthalten. Release Ankündigungen finden Sie unter http://www.FreeBSD.org/releases/. Wenn eine crontab existiert, welche die Eigenschaften von &man.freebsd-update.8; verwendet, muss diese deaktiviert werden, bevor die folgende Aktion gestartet wird. Die Konfigurationsdatei Manche Anwender möchten sicherlich Einstellungen in der Standard-Konfigurationsdatei unter /etc/freebsd-update.conf vornehmen, um bessere Kontrolle über den gesamten Prozess zu besitzen. Die Optionen sind gut dokumentiert, jedoch benötigen die folgenden ein paar zusätzliche Erklärungen: # Components of the base system which should be kept updated. Components src world kernel Dieser Parameter kontrolliert, welche Teile von &os; auf dem aktuellen Stand gehalten werden sollen. In der Voreinstellung wird der Quellcode, das gesamte Basissystem sowie der Kernel aktualisiert. Die Komponenten sind die gleichen wie während der Installation. Das hinzufügen von world/games erlaubt es, Aktualisierungen für Spiele anzuwenden. Die Verwendung von src/bin erlaubt es, den Quellcode in src/bin aktuell zu halten. Die beste Einstellung ist, diese Option so zu belassen, da eine Änderung es bedingt, dass man als Benutzer jede Komponente auflisten muss, die aktualisiert werden soll. Dies könnte katastrophale Folgen nach sich ziehen, da der Quellcode und die Binärdateien dadurch nicht mehr synchron wären. # Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths Fügen Sie Pfade wie /bin oder /sbin hinzu, um diese speziellen Verzeichnisse während des Aktualisierungsprozesses unberührt zu lassen. Diese Option kann verwendet werden, um zu verhindern, dass freebsd-update lokale Änderungen überschreibt. # Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile Aktualisiert nur unmodifizierte Konfigurationsdateien in den angegebenen Verzeichnissen. Jede Änderung, die der Benutzer daran vorgenommen hat, wird die automatische Aktualisierung dieser Dateien ungültig machen. Es gibt eine weitere Option KeepModifiedMetadata, die freebsd-update instruiert, die Änderungen während der Zusammenführung zu speichern. # When upgrading to a new &os; release, files which match MergeChanges # will have any local changes merged into the version from the new release. MergeChanges /etc/ /var/named/etc/ Eine Liste von Verzeichnissen mit Konfigurationsdateien, in denen freebsd-update Zusammenführungen versuchen soll. Dieser Verschmelzungsprozess von Dateien ist eine Serie von &man.diff.1;-Korrekturen, ähnlich wie &man.mergemaster.8;, aber mit weniger Optionen. Die Änderungen werden entweder akzeptiert, oder öffnen einen Editor, oder freebsd-update bricht ab. Im Zweifelsfall sichern Sie /etc und akzeptieren einfach die Änderungen. Lesen Sie , um Informationen über mergemaster zu erhalten. # Directory in which to store downloaded updates and temporary # files used by &os; Update. # WorkDir /var/db/freebsd-update In diesem Verzeichnis werden alle Korrekturen und temporären Dateien abgelegt. Im Falle einer Versionsaktualisierung sollte diesem Verzeichnis mindestens ein Gigabyte Festplattenspeicher zur Verfügung stehen. # When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components # which *might* be installed of which &os; Update should figure out # which actually are installed and upgrade those (StrictComponents no)? # StrictComponents no Wenn diese Option auf yes gesetzt ist, wird freebsd-update annehmen, dass die Components-Liste vollständig ist und nicht versuchen, Änderungen ausserhalb dieser Liste zu tätigen. Tatsächlich wird freebsd-update versuchen, jede Datei zu aktualisieren, die zu der Components-Liste gehört. Sicherheitsaktualisierungen Sicherheitsaktualisierungen für &os; können wie folgt heruntergeladen und installiert werden: &prompt.root; freebsd-update fetch &prompt.root; freebsd-update install Wenn während Aktualisierung Korrekturen am Kernel angewendet werden, muss das System neu gestartet werden, damit der korrigierte Kernel gebootet wird. Andernfalls sollte das System aktualisiert sein und freebsd-update kann als nächtlicher &man.cron.8;-Job laufen, indem folgender Eintrag in /etc/crontab hinzugefügt wird: @daily root freebsd-update cron Dieser Eintrag besagt, dass freebsd-update einmal am Tag ausgeführt wird. Wenn es über ausgeführt wird, prüft freebsd-update lediglich, ob Aktualisierungen vorliegen. Wenn Korrekturen existieren, werden diese automatisch auf die lokale Festplatte heruntergeladen, aber nicht eingespielt. Der root-Benutzer bekommt eine Nachricht, damit die Korrekturen überprüft und manuell installiert werden können. Wenn etwas schief geht, kann freebsd-update den letzten Satz von Änderungen mit folgendem Befehl rückgängig machen: &prompt.root; freebsd-update rollback Sobald dieser Vorgang abgeschlossen ist, sollte das System neu gestartet werden, wenn der Kernel oder ein beliebiges Kernelmodul geändert wurde. Dies ermöglicht es &os;, die neuen Binärdateien in den Hauptspeicher zu laden. Das freebsd-update-Werkzeug kann nur den GENERIC-Kernel automatisch aktualisieren. Wenn ein angepasster Kernel verwendet wird, muss dieser neu erstellt und installiert werden, nachdem freebsd-update den Rest der Aktualisierungen durchgeführt hat. Allerdings wird freebsd-update den GENERIC-Kernel in /boot/GENERIC erkennen und aktualisieren, selbst wenn dies nicht der aktuell verwendete Kernel des Systems ist. Es ist eine gute Idee, immer eine Kopie des GENERIC-Kernels in /boot/GENERIC aufzubewahren. Das wird bei der Diagnose von verschiedenen Problemen eine grosse Hilfe sein, sowie bei der Durchführung von Versionsaktualisierungen mit freebsd-update, wie in beschrieben ist. Solange die Standardkonfiguration in /etc/freebsd-update.conf nicht geändert wurde, wird freebsd-update die aktualisierten Quellcodedateien des Kernels zusammen mit dem Rest der Neuerungen installieren. Die erneute Übersetzung und Installation eines neuen, angepassten Kernels kann dann auf die übliche Art und Weise durchgeführt werden. Die Aktualisierungen, die über freebsd-update verteilt werden, betreffen nicht immer den Kernel. Es ist nicht notwendig, den angepassten Kernel neu zu erstellen, wenn die Kernelquellen nicht durch die Ausführung von freebsd-update install geändert wurden. Allerdings wird freebsd-update immer /usr/src/sys/conf/newvers.sh aktualisieren. Der aktuelle Patch-Level, der mit der -p-Nummer bei uname -r ausgegeben wird, wird aus dieser Datei ausgelesen. Die Neuinstallation des angepassten Kernels, selbst wenn sich daran nichts geändert hat, erlaubt es &man.uname.1;, den aktuellen Patch-Level des Systems korrekt wiederzugeben. Dies ist besonders hilfreich, wenn mehrere Systeme gewartet werden, da es eine schnelle Einschätzung der installierten Aktualisierungen in jedem einzelnen System ermöglicht. Aktualisierungen an Haupt- und Unterversionen Aktualisierungen einer Unterversion zur nächsten in &os; ist beispielsweise die Aktualisierung von &os; 9.0 auf &os; 9.1. In der Regel funktionieren die installierten Anwendungen weiterhin problemlos nach der Aktualisierung einer Unterversion. Eine Aktualisierung der Hauptversion ist besipielsweise die Aktualisierung von &os; 8.X auf &os; 9.X. Dieser Prozess entfernt alte Objekt-Dateien und Bibliotheken, was dazu führt, dass die meisten Anwendungen von Drittherstellern nicht mehr funktionieren. Nach der Aktualisierung auf eine neue Hauptversion wird empfohlen, dass alle installierten Ports entweder entfernt und neu installiert werden, oder mit einem Werkzeug wie ports-mgmt/portmaster aktualisiert werden. Um die Neuerstellung aller installierten Anwendungen zu erwzingen, benutzen Sie folgenden Befehl: &prompt.root; portmaster -f Dies sorgt dafür, dass alles korrekt neu installiert wird. Beachten Sie, dass das Setzen der BATCH-Umgebungsvariable auf yes während dieses Prozesses auf jede Eingabe mit ja antwortet, was es nicht mehr notwendig macht, manuell eingreifen zu müssen. Umgang mit angepassten Kerneln Wenn ein angepasster Kernel verwendet wird, ist der Aktualisierungsprozess ein wenig aufwändiger und das Vorgehen variiert je nach Version von &os;. Angepasste Kernel unter &os; 8.X und früher Eine Kopie des GENERIC-Kernel wird benötigt und sollte in /boot/GENERIC abgelegt sein. Wenn der GENERIC-Kernel nicht im System vorhanden ist, kann er über eine der folgenden Methoden bezogen werden: Wenn ein angepasster Kernel erstmalig gebaut wurde, ist der Kernel in /boot/kernel.old in Wirklichkeit der GENERIC-Kernel. Benennen Sie dieses Verzeichnis in /boot/GENERIC um. Angenommen, ein direkter Zugriff auf die Maschine ist möglich, so kann eine Kopie des GENERIC-Kernels von den Installationsmedien installiert werden. Benutzen Sie dazu folgende Befehle: &prompt.root; mount /cdrom &prompt.root; cd /cdrom/X.Y-RELEASE/kernels &prompt.root; ./install.sh GENERIC Ersetzen Sie X.Y-RELEASE durch die aktuelle Version des verwendeten Releases. Der GENERIC-Kernel wird standardmäßig in /boot/GENERIC installiert. Falls alle obigen Schritte fehlschlagen, kann der GENERIC-Kernel folgendermaßen aus den Quellen neu gebaut und installiert werden: &prompt.root; cd /usr/src &prompt.root; env DESTDIR=/boot/GENERIC make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null &prompt.root; mv /boot/GENERIC/boot/kernel/* /boot/GENERIC &prompt.root; rm -rf /boot/GENERIC/boot Damit dieser Kernel als GENERIC-Kernel von freebsd-update erkannt wird, darf die GENERIC-Konfigurationsdatei in keiner Weise geändert worden sein. Es wird ebenfalls empfohlen, dass dieser ohne irgendwelche speziellen Optionen erstellt wird. Der Neustart in den GENERIC-Kernel ist zu diesem Zeitpunkt nicht notwendig. Angepasste Kernel unter &os; 9.X und später Wenn ein angepasster Kernel erstmalig gebaut wurde, ist der Kernel in /boot/kernel.old in Wirklichkeit der GENERIC-Kernel. Benennen Sie einfach dieses Verzeichnis in /boot/GENERIC um. Angenommen, ein direkter Zugriff auf die Maschine ist möglich, so kann eine Kopie des GENERIC-Kernels von den Installationsmedien installiert werden. Benutzen Sie dazu folgende Befehle: &prompt.root; mount /cdrom &prompt.root; cd /cdrom/usr/freebsd-dist &prompt.root; tar -C/ -xvf kernel.txz boot/kernel/kernel Wenn die oben genannten Optionen nicht verwendet werden können, kann der GENERIC-Kernel aus den Quellen neu gebaut und installiert werden: &prompt.root; cd /usr/src &prompt.root; make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null Damit dieser Kernel als GENERIC-Kernel von freebsd-update erkannt wird, darf die GENERIC-Konfigurationsdatei in keiner Weise geändert worden sein. Es wird ebenfalls empfohlen, dass dieser ohne irgendwelche speziellen Optionen erstellt wird. Der Neustart in den GENERIC-Kernel ist zu diesem Zeitpunkt nicht notwendig. Die Aktualisierung durchführen Aktualisierungen an Haupt- und Unterversionen können durchgeführt werden, wenn man freebsd-update eine Release-Version als Ziel übergibt. Beispielsweise wird das folgende Kommando das System auf &os; 9.1 aktualisieren: &prompt.root; freebsd-update -r 9.1-RELEASE upgrade Nachdem das Kommando empfangen wurde, überprüft freebsd-update die Konfigurationsdatei und das aktuelle System, um die nötigen Informationen für die Systemaktualisierung zu sammeln. Eine Bildschirmausgabe wird anzeigen, welche Komponenten erkannt und welche nicht erkannt wurden. Zum Beispiel: Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin world/base world/info world/lib32 world/manpages The following components of FreeBSD do not seem to be installed: kernel/generic world/catpages world/dict world/doc world/games world/proflibs Does this look reasonable (y/n)? y An diesem Punkt wird freebsd-update versuchen, alle notwendigen Dateien für die Aktualisierung herunter zu laden. In manchen Fällen wird der Benutzer mit Fragen konfrontiert, um festzustellen, was installiert werden soll oder auf welche Art und Weise fortgesetzt werden soll. Wenn ein angepasster Kernel benutzt wird, produziert der vorherige Schritt eine Warnung ähnlich zu der folgenden: WARNING: This system is running a " MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install" Diese Warnung kann an dieser Stelle problemlos ignoriert werden. Der aktualisierte GENERIC-Kernel wird als ein Zwischenschritt im Aktualisierungsprozess verwendet. Nachdem alle Korrekturen auf das lokale System heruntergeladen wurden, werden diese eingespielt. Dieser Prozess kann eine gewisse Zeit in Anspruch nehmen, abhängig von der Geschwindigkeit und Auslastung der Maschine. Konfigurationsdateien werden ebenfalls zusammengefügt. Dieser Teil der Prozedur verlangt einige Benutzereingaben, da eine Datei möglicherweise von Hand zusammengefasst werden muss oder ein Editor erscheint auf dem Bildschirm zum manuellen bearbeiten. Die Ergebnisse von jeder erfolgreichen Zusammenfassung werden dem Benutzer angezeigt, während der Prozess weiter läuft. Eine fehlgeschlagene oder ignorierte Zusammenfassung wird den Prozess sofort beenden. Benutzer sollten eine Sicherung von /etc anlegen und wichtige Dateien später manuell vereinen, beispielsweise master.passwd oder group. Das System ist zu diesem Zeitpunkt noch nicht verändert worden, da alle Korrekturen und Vereinigungen in einem anderen Verzeichnis vorgenommen wurden. Wenn alle Korrekturen erfolgreich eingespielt, alle Konfigurationsdateien zusammengefügt wurden und es den Anschein hat, dass der Prozess problemlos verlaufen wird, müssen die Änderungen vom Anwender noch angewendet und auf die Platte geschrieben werden: &prompt.root; freebsd-update install Der Kernel und die Module werden zuerst aktualisiert. Zu diesem Zeitpunkt muss die Maschine neu gestartet werden. Wenn das System einen angepassten Kernel verwendet, benutzen Sie &man.nextboot.8;, um den Kernel für den nächsten Neustart auf /boot/GENERIC zu setzen: &prompt.root; nextboot -k GENERIC Bevor das System mit dem GENERIC-Kernel neu gestartet wird, vergewissern Sie sich, dass für den Neustart alle benötigten Treiber enthalten sind. Falls auf die Maschine aus der Ferne zugegriffen wird, stellen Sie sicher, dass das System ordnungsgemäß an das Netzwerk angeschlossen ist. Achten Sie besonders darauf, dass wenn der angepasste Kernel Funktionalität beinhaltet, die normalerweise von Kernelmodulen zur Verfügung gestellt werden, dass diese temporär über /boot/loader.conf in den GENERIC-Kernel übernommen werden. Zudem wird empfohlen, nicht benötigte Dienste, eingehängte Platten und verbundene Netzlaufwerke zu deaktivieren, bis der Aktualisierungsprozess abgeschlossen ist. Die Maschine sollte nun mit dem aktualisierten Kernel neu gestartet werden: &prompt.root; shutdown -r now Sobald das System wieder online ist, muss freebsd-update erneut gestartet werden. Der Zustand des Prozesses wurde zuvor gesichert und deshalb wird freebsd-update nicht von vorne beginnen, jedoch alle alten gemeinsam genutzten Bibliotheken und Objektdateien löschen. &prompt.root; freebsd-update install Abhängig davon, ob irgendwelche Bibliotheksversionen erhöht wurden, kann es sein, dass nur zwei Installationsphasen anstatt drei durchlaufen werden. Neubau der Ports nach einer Aktualisierung auf eine Hauptversion Nach der Aktualisierung auf eine Hauptversion, muss jegliche Drittanbieter-Software neu erstellt und installiert werden. Dies ist notwendig, da die installierte Software möglicherweise Abhängigkeiten zu Bibliotheken enthält, die während der Aktualisierung entfernt wurden. Dieser Prozess kann mit einem Werkzeug wie ports-mgmt/portmaster automatisiert werden: &prompt.root; portmaster -f Sobald dies abgeschlossen ist, beenden Sie den Aktualisierungsprozess mit einem letzten Aufruf von freebsd-update. Geben Sie den folgenden Befehl ein, um alle losen Enden des Aktualisierungsprozesses miteinander zu verknüpfen: &prompt.root; freebsd-update install Wenn der GENERIC-Kernel temporär Verwendung fand, ist dies der richtige Zeitpunkt, einen neuen, angepassten Kernel zu bauen und über die übliche Methode zu installieren. Booten Sie anschließend die Maschine in die neue &os;-Version. Der Prozess ist damit abgeschlossen. Vergleich des Systemzustands freebsd-update kann verwendet werden, um den Zustand der installierten &os;-Version gegenüber einer bekannten und funktionierenden Kopie zu vergleichen. Diese Option vergleicht die aktuelle Version von Systemwerkzeugen, Bibliotheken und Konfigurationsdateien. Um diesen Vergleich zu starten, geben Sie den folgenden Befehl ein: &prompt.root; freebsd-update IDS >> outfile.ids Obwohl der Befehlsname IDS lautet, ist dies kein Ersatz für ein echtes Intrusion Detection System wie security/snort. Da freebsd-update seine Daten auf Platte ablegt, ist die Möglichkeit von Verfälschungen offensichtlich. Obwohl diese Möglichkeit durch die Verwendung von kern.securelevel oder die Ablage von Daten auf einem Nur-Lese Dateisystem eingedämmt werden kann, besteht eine bessere Lösung darin, das System gegen ein gesichertes Medium, wie eine DVD oder einen externen, separat aufbewahrten USB-Plattenspeicher, zu vergleichen. Das System wird nun überprüft, und eine lange Liste von Dateien zusammen mit den &man.sha256.1;-Hashwerten, sowohl der von der Release-Version bekannte Wert als auch der des aktuell installierten Systems, in outfile.ids geschrieben. Die Zeilen in der Ausgabe sind extrem lang, aber das Ausgabeformat kann einfach verarbeitet werden. Um beispielsweise eine Liste von allen Dateien zu erhalten, die sich vom aktuellen Release unterscheiden, geben Sie das folgende Kommando ein: &prompt.root; cat outfile.ids | awk '{ print $1 }' | more /etc/master.passwd /etc/motd /etc/passwd /etc/pf.conf Diese Beispielausgabe wurde abgeschnitten, da noch viele weitere Dateien vorhanden sind. Einige Dateien wurden auf natürliche Art verändert. /etc/passwd wurde beispielsweise geändert, um Benutzer zum System hinzuzufügen. Andere Dateien, wie Kernelmodule, unterscheiden sich, weil freebsd-update diese aktualisiert hat. Um bestimmte Dateien oder Verzeichnisse auszuschließen, fügen Sie diese an die IDSIgnorePaths-Option in /etc/freebsd-update.conf an. Diese Vorgehensweise kann als Teil einer ausgeklügelten Aktualisierungsmethode benutzt werden, unabhängig von der zuvor angesprochenen Variante. Portsnap: Ein Werkzeug zur Aktualisierung der Ports-Sammlung TomRhodesGeschrieben von ColinPercivalBasierend auf bereitgestellten Mitschriften von BenedictReuschlingÜbersetzt von Updating and Upgrading Portsnap Updating and Upgrading Das Basissystem von &os; enthält &man.portsnap.8; zum Aktualisieren der Ports-Sammlung. Dieses Programm verbindet sich mit einem entfernten Rechner, überprüft den Sicherungsschlüssel und lädt eine neue Kopie der Ports-Sammlung herunter. Der Schlüssel wird verwendet, um die Integrität aller heruntergeladenen Dateien zu prüfen. Um die aktuellsten Dateien der Ports-Sammlung herunter zu laden, geben Sie das folgende Kommando ein: &prompt.root; portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 9 mirrors found. Fetching snapshot tag from geodns-1.portsnap.freebsd.org... done. Fetching snapshot metadata... done. Updating from Tue May 22 02:12:15 CEST 2012 to Wed May 23 16:28:31 CEST 2012. Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 3 metadata files... done. Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done. Applying patches... done. Fetching 133 new ports or files... done. Dieses Beispiel zeigt, dass &man.portsnap.8; mehrere Korrekturen für die aktuellen Ports-Daten gefunden und verifiziert hat. Es zeigt auch, dass das Programm zuvor schon einmal gestartet wurde. Wäre es das erste Mal, würde nur die Ports-Sammlung heruntergeladen werden. Wenn &man.portsnap.8; die fetch-Operation erfolgreich abgeschlossen hat, befinden sich die Ports-Sammlung und die dazugehörigen Korrekturen, welche die Überprüfung bestanden haben, auf dem lokalen System. Wenn portsnap das erste Mal ausgeführt wird, muss portsnap extract aufgerufen werden, um die Ports-Sammlung zu installieren: &prompt.root; portsnap extract /usr/ports/.cvsignore /usr/ports/CHANGES /usr/ports/COPYRIGHT /usr/ports/GIDs /usr/ports/KNOBS /usr/ports/LEGAL /usr/ports/MOVED /usr/ports/Makefile /usr/ports/Mk/bsd.apache.mk /usr/ports/Mk/bsd.autotools.mk /usr/ports/Mk/bsd.cmake.mk ... Um eine bereits installierte Ports-Sammlung zu aktualisieren, verwenden Sie portsnap update: &prompt.root; portsnap update Der Prozess ist jetzt abgeschlossen und Anwendungen können mittels der aktuellen Ports-Sammlung installiert oder aktualisiert werden. Die Operationen fetch und extract oder update können auch nacheinander ausgeführt werden: &prompt.root; portsnap fetch update Dieser Befehl lädt die aktuelle Version der Ports-Sammlung herunter und aktualisiert anschließend die lokale Version unter /usr/ports. Aktualisieren der Dokumentationssammlung BenedictReuschlingÜbersetzt von Updating and Upgrading Documentation Updating and Upgrading Dokumentation ein wichtiger Bestandteil des &os; Betriebssystems. Obwohl eine aktuelle Version der &os; Dokumentation jederzeit auf der &os; Webseite verfügbar ist, verfügen manche Benutzer nur über eine langsame oder überhaupt keine Netzwerkverbindung. Es gibt mehrere Möglichkeiten, die lokale Kopie der Dokumentation durch die aktuelle &os;-Dokumentationssammlung zu aktualisieren. Verwenden von <application>Subversion</application> um die Dokumentation zu aktualisieren Die Dokumentationsquellen von &os; können mittels svn aktualisiert werden. Dieser Abschnitt beschreibt: Die Installation der Dokumentations-Werkzeugsammlung, welche die Werkzeuge enthält, die nötig sind, um die &os; Dokumentation aus den Quellen neu zu erstellen. Das Herunterladen einer Kopie der Dokumentationsquellen nach /usr/doc, unter Verwendung von svn. Den Bau der &os; Dokumentation aus den Quellen und die Installation unter /usr/share/doc. Manche der Optionen zum Erstellen, die vom System zum Bauen der Dokumentation unterstützt werden, z.B. die Optionen welche nur ein paar der unterschiedlichen Sprachübersetzungen der Dokumentation erstellen oder die Optionen, die ein bestimmtes Ausgabeformat auswählen. <application>svn</application> und die Werkzeugsammlung der Dokumentation installieren Die Erstellung der &os; Dokumentation aus den Quellen benötigt eine große Anzahl an Werkzeugen, die nicht Teil des &os; Basissystems sind, da sie eine große Menge Plattenplatz verbrauchen und nicht von allen &os;-Anwendern benötigt werden. Sie sind daher nur für diejenigen Benutzer sinnvoll, die aktiv neue Dokumentation für &os; schreiben oder häufig die Dokumentation aus den Quellen aktualisieren. Alle benötigten Werkzeuge, einschließlich svn sind im Meta-Port textproc/docproj vorhanden, der vom &os; Documentation Project entwickelt wurde. Wenn Sie die Dokumentation nicht als &postscript; oder PDF benötigen, können Sie alternativ die Installation des textproc/docproj-nojadetex-Ports in Erwägung ziehen. Diese Version der Dokumentations-Werkzeugsammlung enthält alles ausser das teTeX-Textsatzsystem. teTeX ist eine sehr grosse Sammlung an Werkzeugen, deshalb ist es vernünftig, deren Installation auszulassen, wenn die Ausgabe von PDF nicht unbedingt gebraucht wird. Die Dokumentationsquellen aktualisieren In diesem Beispiel wird svn verwendet, um eine saubere Kopie der Dokumentationsquellen über das HTTPS-Protokoll zu holen: &prompt.root; svn checkout https://svn.freebsd.org/doc/head/doc/head /usr/doc Benutzen Sie dazu einen der Spiegel aus Subversion Mirror Sites. Es dauert eine Weile, wenn die Dokumentationsquellen das allererste Mal heruntergeladen werden. Lassen Sie es laufen, bis es fertig ist. Zukünftige Aktualisierungen der Dokumentationsquellen können wie folgt durchgeführt werden: &prompt.root; svn update /usr/doc Nachdem die Quellen einmal ausgecheckt wurden, wird durch /usr/doc/Makefile ein alternativer Weg unterstützt, die Dokumentation zu aktualisieren. Geben Sie dazu die folgenden Befehle ein: &prompt.root; cd /usr/doc &prompt.root; make update Einstellbare Optionen der Dokumentationsquellen Das System zum aktualisieren und erstellen der &os;-Dokumentationssammlung unterstützt ein paar Optionen, welche den Prozess der Aktualisierung von Teilen der Dokumentation oder einer bestimmten Übersetzung erleichtert. Diese Optionen können entweder systemweit in /etc/make.conf gesetzt, oder als Kommandozeilenoptionen an &man.make.1; übergeben werden. Zu den Optionen gehören: DOC_LANG Eine Liste von Sprachen und Kodierungen, die gebaut und installiert werden sollen, z.B. en_US.ISO8859-1, um nur die englische Dokumentation zu erhalten. FORMATS Ein einzelnes Format oder eine Liste von Ausgabeformaten, das gebaut werden soll. Momentan werden html, html-split, txt, ps, pdf, und rtf unterstützt. DOCDIR Wohin die Dokumentation installiert werden soll. Der Standardpfad ist /usr/share/doc. Für weitere make-Variablen, die als systemweite Optionen in &os; unterstützt werden, lesen Sie &man.make.conf.5;. Für weitere make-Variablen, die vom System zum Erstellen der &os;-Dokumentation unterstützt werden, lesen Sie die Fibel für neue Mitarbeiter des &os;-Dokumentationsprojekts. Die &os;-Dokumentation aus den Quellen installieren Sobald ein aktueller Schnappschuss der Dokumentationsquellen nach /usr/doc heruntergeladen wurde, ist alles bereit für eine Aktualisierung der bestehenden Dokumentation. Eine komplette Aktualisierung aller Sprachen, definiert in DOC_LANG, kann durch folgende Eingabe erreicht werden: &prompt.root; cd /usr/doc &prompt.root; make install clean Wenn nur eine Aktualisierung einer bestimmten Sprache gewünscht wird, kann &man.make.1; in einem sprachspezifischen Unterverzeichnis von /usr/doc aufgerufen werden: &prompt.root; cd /usr/doc/en_US.ISO8859-1 &prompt.root; make update install clean Die zu installierenden Ausgabeformate können durch das Setzen von FORMATS angegeben werden: &prompt.root; cd /usr/doc &prompt.root; make FORMATS='html html-split' install clean Informationen zum Bearbeiten und Einreichen von Korrekturen finden Sie in der Fibel für neue Mitarbeiter des &os;-Dokumentationsprojekts. Verwendung von Dokumentations-Ports MarcFonvieilleBasierend auf der Arbeit von Updating and Upgrading documentation package Updating and Upgrading Im vorherigen Abschnitt wurde eine Methode gezeigt, wie die &os;-Dokumentation aus den Quellen gebaut werden kann. Allerdings sind quellbasierte Aktualisierungen möglicherweise nicht für alle &os;-Systeme geeignet oder praktikabel. Das Erstellen der Dokumentationsquellen benötigt eine große Anzahl an Werkzeugen, Programmen und Hilfsmitteln, die documentation toolchain, einen gewissen Grad an Vertrautheit mit svn, ausgecheckte Quellen von einem Repository, sowie ein paar manuelle Schritte, um diese ausgecheckten Quellen zu bauen. Dieser Abschnitt beschreibt eine alternative Methode, in der die Ports-Sammlung verwendet wird und die es ermöglicht: vorgefertigte Schnappschüsse der Dokumentation herunterzuladen und zu installieren, ohne vorher die Werkzeugsammlung der Dokumentation installieren zu müssen. die Dokumentationsquellen herunterzuladen und durch das Ports-System erstellen zu lassen, was die Schritte zum Auschecken und Erstellen etwas erleichtert. Diese beiden Methoden der Aktualisierung der &os;-Dokumentation werden durch eine Menge von Dokumentations-Ports unterstützt, die von &a.doceng; monatlich aktualisiert wird. Diese sind in der &os; Ports-Sammlung unter der Kategorie docs gelistet (http://www.freshports.org/docs/). Erstellen und Installieren von Dokumentations-Ports Die Dokumentations-Ports nutzen das Ports-System, um das Erstellen von Dokumentation wesentlich einfacher zu machen. Es automatisiert den Prozess des Auscheckens der Dokumentationsquellen, aufrufen von &man.make.1; mit den passenden Umgebungsvariablen und Kommandozeilenoptionen und macht die Installation und Deinstallation von Dokumentation so einfach wie die Installation von jedem anderen Port oder Paket. Als zusätzliche Eigenschaft zeichnen sie eine Abhängigkeit zur Dokumentations-Werkzeugsammlung auf, wenn die Dokumentations-Ports lokal erstellt werden, weshalb diese auch automatisch mitinstalliert wird. Die Dokumentations-Ports sind wie folgt organisiert: Der Master-Port, misc/freebsd-doc-en, der alle englischen Dokumentations-Ports installiert. Der Alles-in-Einem-Port, misc/freebsd-doc-all, welcher die komplette Dokumentation in allen verfügbaren Sprachen erstellt und installiert. Es gibt noch einen Slave-Port für jede Übersetzung, beispielsweise misc/freebsd-doc-hu für Dokumentation in ungarischer Sprache. Um die englische Dokumentation zu bauen im getrennten HTML-Format in /usr/local/share/doc/freebsd zu installieren, installieren Sie den folgenden Port: &prompt.root; cd /usr/ports/misc/freebsd-doc-en &prompt.root; make install clean Gebräuchliche Schalter und Optionen Es gibt viele Optionen, die das Standardverhalten der Dokumentations-Ports verändern. Dazu gehören: WITH_HTML Erstellt das HTML-Format mit einer einzigen HTML-Datei pro Dokument. Die formatierte Dokumentation wird als Datei mit dem Namen article.html, oder gegebenenfalls book.html, zuzüglich der Bilder gespeichert. WITH_PDF Erstellt das &adobe; Portable Document Format (PDF). Die formatierte Dokumentation wird als Datei mit dem Namen article.pdf, oder gegebenenfalls als book.pdf gespeichert. DOCBASE Legt den Pfad fest, wohin die Dokumentation installiert werden soll. Die Voreinstellung ist /usr/local/share/doc/freebsd. Der Standardpfad zum Verzeichnis unterscheidet sich von dem Verzeichnis, das von svn verwendet wird. Das liegt daran, dass Ports üblicherweise in /usr/local installiert werden. Dies kann durch die Verwendung von PREFIX überschrieben werden. Dieses Beispiel verwendet Variablen, um die ungarische Dokumentation als PDF zu installieren: &prompt.root; cd /usr/ports/misc/freebsd-doc-hu &prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean Verwendung von Dokumentations-Paketen Das Erstellen der Dokumentations-Ports aus den Quellen, wie im vorherigen Abschnitt beschrieben, benötigt die lokale Installation der Dokumentations-Werkzeugsammlung und ein wenig Festplattenspeicher für das Bauen der Ports. Sollten die Ressourcen zum Bauen der Dokumentations-Werkzeugsammlung nicht zur Verfügung stehen, oder weil das erstellen zuviel Plattenplatz benötigen würde, ist es trotzdem möglich, bereits zuvor gebaute Schnappschüsse der Dokumentations-Ports zu installieren. &a.doceng; erstellt monatliche Schnappschüsse der Dokumentations-Pakete von &os;. Diese Binärpakete können mit jedem der mitgelieferten Paketwerkzeuge installiert werden, beispielsweise &man.pkg.add.1;, &man.pkg.delete.1; und so weiter. Wenn Binärpakete zu Einsatz kommen, wird die &os;-Dokumentation in allen verfügbaren Formaten in der gegebenen Sprache installiert. Zum Beispiel installiert das folgende Kommando das aktuelle, vorgefertigte Paket der ungarischen Dokumentation: &prompt.root; pkg_add -r hu-freebsd-doc Pakete verwenden ein Format, welches sich von dem Namen des dazugehörigen Ports unterscheidet: lang-freebsd-doc. lang entspricht hier der Kurzform des Sprachcodes, z.B. hu für Ungarisch, oder zh_cn für vereinfachtes Chinesisch. Dokumentations-Ports aktualisieren Dokumentations-Ports können wie jeder andere Port aktualisiert werden. Beispielsweise aktualisiert das folgende Kommando die installierte ungarische Dokumentation mittels ports-mgmt/portmaster unter Verwendung von Paketen: &prompt.root; portmaster -PP hu-freebsd-doc Einem Entwicklungszweig folgen -CURRENT -STABLE &os; besitzt zwei Entwicklungszweige: &os.current; und &os.stable;. Dieser Abschnitt beschreibt beide Zweige und erläutert, wie Sie ein System auf dem aktuellen Stand eines Zweiges halten. Zuerst wird &os.current; vorgestellt, dann &os.stable;. &os.current; &os.current; ist die Spitze der Entwicklung von &os;. Benutzer von &os.current; sollten über sehr gute technische Fähigkeiten verfügen und in der Lage sein, schwierige Probleme alleine zu lösen. Wenn &os; neu für Sie ist, verwenden Sie besser &os.stable;. Was ist &os.current;? Snapshot &os.current; besteht aus den neuesten Quellen des &os;-Systems. Es enthält Sachen, an denen gerade gearbeitet wird, experimentelle Änderungen und Übergangsmechanismen, die im nächsten offiziellen Release der Software enthalten sein können oder nicht. Obwohl &os.current; täglich von vielen Entwicklern gebaut wird, gibt es Zeiträume, in denen sich das System nicht bauen lässt. Diese Probleme werden so schnell wie möglich behoben, aber ob Sie mit &os.current; Schiffbruch erleiden oder die gewünschten Verbesserungen erhalten, kann von dem Zeitpunkt abhängen, an dem der Quelltext synchronisiert wurde. Wer braucht &os.current;? &os.current; wird hauptsächlich für drei Interessengruppen zur Verfügung gestellt: Entwickler, die an einem Teil des Quellbaums arbeiten und daher über die aktuellen Quellen verfügen müssen. Tester, die bereit sind, Zeit in das Lösen von Problemen zu investieren und sicherstellen, dass &os.current; so stabil wie möglich bleibt. Diese Tester machen Vorschläge zu Änderungen oder der generellen Entwicklung von &os; und stellen Patches bereit, um diese Vorschläge zu realisieren. Für Leute, die die Entwicklung im Auge behalten wollen, oder die Quellen zu Referenzzwecken benutzen wollen. Auch diese Gruppe macht Vorschläge oder steuert Quellcode bei. Was &os.current; <emphasis>nicht</emphasis> ist! Der schnellste Weg, neue Funktionen vor dem offiziellen Release auszuprobieren. Bedenken Sie, dass neue Funktionen noch nicht im vollen Umfang getestet wurden und daher höchstwahrscheinlich Fehler enthalten. Ein schneller Weg, um an Fehlerbehebungen (engl. bug fixes) zu kommen. Jede Fehlerbehebung führt mit gleicher Wahrscheinlichkeit neue Fehler ein, mit der sie alte behebt. In keiner Weise offiziell unterstützt. Benutzen von &os.current; Lesen Sie die Mailinglisten &a.current.name; und &a.svn-src-head.name;. Dies ist notwendig, um die Kommentare über den akutellen Status des Systems und wichtige Mitteilungen zum aktuellen Zustand von &os.current; zu erfahren. Die &a.svn-src-head.name; Mailingliste erfasst die Commit-Logs für jede Änderung und enthält alle relevanten Informationen zu möglichen Seiteneffekten. Um diese Listen zu abonnieren, besuchen Sie &a.mailman.lists.link;, klicken Sie auf die gewünschte Liste und folgen Sie den Anweisungen. Wenn Sie die Änderungen am gesamten Quellbaum verfolgen möchten, abonnieren Sie die &a.svn-src-all.name; Liste. Beschaffen Sie sich die Quellen von einem &os;-Spiegel, mit einer der folgenden Methoden: Benutzen Sie svn, um den gewünschten Entwicklungs- oder Release-Zweig auszuchecken. Dies ist die empfohlene Methode für den Zugang zur Entwicklung von &os;. Checken Sie den -CURRENT Quelltext aus dem head-Zweig von einem der Subversion Mirror Sites aus. Aufgrund der Größe des Repositories ist es empfehlenswert, nur die gewünschten Teilbäume auszuchecken. Benutzen Sie CTM, wenn Sie über eine schlechte Internet-Anbindung verfügen. CTM ist eine Option, aber es ist nicht so zuverlässig wie Subversion. Aus diesem Grund ist Subversion die empfohlene Methode für jedes System mit Internet-Anbindung. Wenn Sie die Quellen einsetzen und nicht nur darin lesen wollen, besorgen Sie sich die kompletten Quellen von &os.current; und nicht nur ausgesuchte Teile. Der Grund hierfür ist, dass die verschiedenen Teile der Quellen voneinander abhängen. Es ist ziemlich sicher, dass Sie in Schwierigkeiten geraten, wenn Sie versuchen, nur einen Teil der Quellen zu übersetzen. Lesen Sie /usr/src/Makefile sehr aufmerksam, bevor Sie -CURRENTübersetzen &os.current; übersetzen. Wenn Sie &os; das erste Mal aktualisieren, sollten Sie sowohl einen Kernel als auch das System neu installieren. Lesen Sie die Mailingliste &a.current; und /usr/src/UPDATING, um über Änderungen im Installationsverfahren, die manchmal vor der Einführung eines neuen Releases notwendig sind, informiert zu sein. Seien Sie aktiv! Benutzer von &os.current; werden aufgefordert ihre Verbesserungsvorschläge oder Fehlerbehebungen einzureichen. Verbesserungsvorschläge, die Code enthalten, werden übrigens begeistert entgegengenommen! &os.stable; Was ist &os.stable;? -STABLE &os.stable; ist der Entwicklungszweig, auf dem Releases erstellt werden. Dieser Zweig ändert sich langsamer als &os.current; und alle Änderungen hier sollten zuvor in &os.current; ausgetestet sein. Beachten Sie, dass dies immer noch ein Entwicklungszweig ist und daher zu jedem Zeitpunkt die Quellen von &os.stable; verwendbar sein können oder nicht. &os.stable; ist Teil des Entwicklungsprozesses und nicht für Endanwender gedacht. Wer braucht &os.stable;? Wer daran interessiert ist den &os;-Entwicklungsprozess zu verfolgen oder dazu beizutragen, insbesondere im Hinblick auf das nächste Hauptversion, der sollte es in Erwägung ziehen, &os.stable; zu benutzen. Auch wenn sicherheitsrelevante Fehlerbehebungen in den &os.stable; Zweig einfließen, müssen Sie deswegen noch lange nicht &os.stable; verfolgen. Jeder &os; Sicherheitshinweis beschreibt für jedes betroffene Release, wie der sicherheitsrelevante Fehler behoben wird. Eine vollständige Beschreibung der Sicherheitspolitik für alte &os; Releases entnehmen Sie http://www.FreeBSD.org/security/. Obwohl wir versuchen sicherzustellen, dass der &os.stable; Zweig sich jederzeit übersetzen lässt und lauffähig ist, können wir dafür keine Garantie übernehmen. Auch wenn Neuentwicklungen in &os.current; stattfinden, ist es jedoch so, dass mehr Leute &os.stable; anstelle von &os.current; benutzen und es daher unvermeidlich ist, dass Fehler und Grenzfälle erst in &os.stable; auffallen. Aus diesen Gründen empfehlen wir Ihnen nicht blindlings &os.stable; zu benutzen. Es ist besonders wichtig, dass &os.stable; zuerst sorgfältig in einer Testumgebung getestet wird, bevor die Produktion auf &os.stable; migriert. Benutzer, die keine Ressourcen haben, um diese Tests durchzuführen wird empfohlen, das aktuelle &os;-Release zu verwenden und den binären Update-Mechanismus zu nutzen, um auf neue Releases zu migrieren. Benutzen von &os.stable; -STABLE benutzen Lesen Sie Mailingliste &a.stable.name;, damit Sie über Abhängigkeiten beim Bau von &os.stable; und Sachen, die besondere Aufmerksamkeit erfordern, informiert sind. Umstrittene Fehlerbehebungen oder Änderungen werden von den Entwicklern auf dieser Liste bekannt gegeben. Dies erlaubt es den Benutzern, Einwände gegen die vorgeschlagenen Änderungen vorzubringen. Abonnieren Sie die passende SVN-Liste für den jeweiligen Branch, den Sie verfolgen. Wenn Sie beispielsweise den Zweig 9-STABLE verfolgen, lesen Sie die &a.svn-src-stable-9.name;. Diese Liste enthält zu jeder Änderung das Commit-Log, das Informationen zu möglichen Seiteneffekten enthält. Um diese Listen zu abonnieren, besuchen Sie die Seite &a.mailman.lists.link;. Klicken Sie auf die gewünschte Liste und folgenden Sie den Anweisungen. Wenn Sie daran interessiert sind, Änderungen am gesamten Quellbaum zu verfolgen, abonnieren Sie &a.svn-src-all.name;. Wenn Sie ein neues System installieren und dazu einen der monatlich aus &os.stable; erzeugten Snapshots verwenden wollen, sollten Sie zuerst die Snapshot Website auf aktuelle Informationen überprüfen. Alternativ können Sie auch das neueste &os.stable;-Release von den Spiegeln beziehen und das System nach den folgenden Anweisungen aktualisieren. Es stehen mehrere Methoden zur Verfügung, um ein System mit einem älteren Release von einem der &os;-Spiegel zu aktualisieren. Benutzen Sie svn, um den gewünschten Entwicklungs- oder Release-Zweig auszuchecken. Dies ist die empfohlene Methode für den Zugang zur Entwicklung von &os;. Die Zweige umfassen head, für den aktuellen Entwicklungszweig, sowie weitere Zweige die auf der Release Engineering Seite beschrieben sind, wie beispielsweise stable/9 oder releng/9.0. Das bevorzugte URL-Präfix für Subversion zum Auschecken des Basissystems ist http://svn.freebsd.org/base/. Aufgrund der Größe des Repositories ist es empfehlenswert, nur die gewünschten Teilbäume auszuchecken. -STABLE mit CTM synchronisieren Wenn Sie über keine schnelle Internet-Anbindung verfügen, sollten Sie die Nutzung von CTM in Betracht ziehen. Benutzen Sie Subversion, wenn Sie schnellen Zugriff auf die Quellen brauchen und die Bandbreite keine Rolle spielt, andernfalls benutzen Sie CTM. Lesen Sie /usr/src/Makefile sehr aufmerksam, bevor Sie &os.stable; übersetzen. Wenn Sie &os; das erste Mal aktualisieren, sollten Sie sowohl einen Kernel als auch das System neu installieren. Lesen Sie die Mailingliste &a.stable; und /usr/src/UPDATING, um über Änderungen im Installationsverfahren, die manchmal vor der Einführung eines neuen Releases notwendig sind, informiert zu sein. Synchronisation der Quellen Sie können eine Internet-Verbindung (oder E-Mail) dazu nutzen, Teile von &os;, wie die Quellen zu einzelnen Projekten, oder das Gesamtsystem, aktuell zu halten. Die primären Dienste dafür sind Subversion und CTM. Obwohl es möglich ist, nur Teile des Quellbaums zu aktualisieren, ist die einzige unterstütze Migrationsprozedur, den kompletten Quellbaum zu aktualisieren und alles neu zu übersetzen. Dazu zählen alle Userland-Programme in /bin und /sbin, sowie die Kernelquellen. Wird hingegen nur ein Teil der Quellen, zum Beispiel nur der Kernel oder nur die Programme aus dem Userland aktualisiert, treten Probleme auf, die von Übersetzungsfehlern über Kernel-Panics bis hin zu Beschädigung von Daten reichen können. Subversion Subversion benutzt die Pull-Methode Von engl. to pull = ziehen. Der Client holt sich bei dieser Methode die Dateien ab. , um die Quellen zu aktualisieren. Der Benutzer, oder ein cron-Skript, ruft das Programm svn auf, das die Quellen aktualisiert. Subversion ist die empfohlene Methode, um die lokalen Quellen zu aktualisieren. Mit beiden Methoden erhalten Sie aktuelle Updates zu einem genau von Ihnen bestimmten Zeitpunkt. Es ist einfach, die Prozedur auf bestimmte Dateien oder Verzeichnisse einschränken. Die Updates werden zur Laufzeit generiert. CTM CTM vergleicht die Quellen nicht mit denen auf einem Server. Stattdessen läuft auf dem Server ein Skript, das Änderungen an Dateien gegenüber seinem vorigen Lauf bemerkt, die Änderungen komprimiert, mit einer Sequenznummer versieht und für das Verschicken per E-Mail kodiert. Dabei werden nur druckbare ASCII-Zeichen verwendet. Wenn Sie diese CTM-Deltas erhalten haben, können Sie sie mit &man.ctm.rmail.1; benutzen, welches die Deltas dekodiert, verifiziert und dann die Änderungen an den Quellen vornimmt. Dieses Verfahren ist viel effizienter als Subversion und erzeugt auch weniger Last auf den Servern, da es die Push-Methode Von engl. to push = schieben. Der Server schickt dem Client die Dateien. verwendet. Es gibt noch weitere Unterschiede. Wenn ein Benutzer unabsichtlich Teile des Archivs löschen, wird das von Subversion erkannt und repariert. CTM leistet das nicht. Wenn ein Benutzer Teile des Quellbaums gelöscht hat und keine Sicherung besitzt, muss er von neuem, das heißt vom letzten Basis-Delta, starten und die Änderungen wieder mit CTM nachziehen. Das komplette Basissystem neu bauen Bau des Basissystems Sobald der lokalen Quellbaum mit einer bestimmten &os; Version, z.B. &os.stable; oder &os.current; synchronisiert wurde, kann dieser dazu benutzt werden das System neu zu bauen. Erstellen Sie eine Sicherungskopie! Es kann nicht oft genug betont werden, wie wichtig es ist, das System zu sichern, bevor die nachfolgenden Schritte ausgeführt werden. Obwohl der Neubau des Systems eine einfache Aufgabe ist, kann dennoch vorkommen, dass Fehler im Quellbaum dazu führen, dass das System nicht mehr bootet. Stellen Sie sicher, dass Sie eine Sicherung erstellt haben und über ein startfähiges Installationsmedium verfügen. Wahrscheinlich werden die Medien nicht benötigt, aber gehen Sie auf Nummer sicher! Abonnieren Sie die richtige Mailingliste Mailingliste Die &os.stable; und &os.current; Zweige befinden sich in ständiger Entwicklung. Die Leute, die zu &os; beitragen, sind Menschen und ab und zu machen sie Fehler. Manchmal sind diese Fehler harmlos und lassen das System eine Warnung ausgeben. Die Fehler können allerdings auch katastrophal sein und dazu führen, dass das System nicht mehr booten kann, oder Dateisysteme beschädigt werden. Wenn Probleme auftauchen, wird ein heads up an die passende Mailingliste geschickt, welches das Problem erklärt und die betroffenen Systeme benennt. Eine all clear Meldung wird versendet, wenn das Problem gelöst ist. Benutzer, die &os.stable; oder &os.current; benutzen und nicht die Mailinglisten &a.stable; beziehungsweise &a.current; lesen, bringen sich nur unnötig in Schwierigkeiten. Verwenden Sie nicht <command>make world</command> Einige ältere Dokumentationen empfehlen make world für den Neubau. Das Kommando überspringt jedoch wichtige Schritte und sollte nur von Experten verwendet werden. In fast allen Fällen ist make world falsch. Benutzen Sie stattdessen die nachstehende Anleitung. Richtig aktualisieren Bevor das System aktualisiert wird, lesen Sie /usr/src/UPDATING, um die für die Quellcodeversion nötigen Aufgaben zu erledigen, bevor das System neu gebaut wird. Danach kann das System mit den folgenden Schritten aktualisiert werden. Bei den hier dargestellten Aktualisierungsschritten wird davon ausgegangen, dass momentan eine alte &os;-Version verwendet wird, die aus einem alten Compiler, Kernel, sowie einem alten Basissystem und veralteten Konfigurationsdateien besteht. Mit Basissystem sind hier die zentralen Binärdateien, Bibliotheken und Entwicklerdateien gemeint. Der Compiler ist Teil des Basissystems, beinhaltet aber ein paar Besonderheiten. Es wird außerdem davon ausgegangen, dass bereits die Quellen für ein neues System bezogen wurden. Falls die Quellen nicht auf dem aktuellen Stand sind, lesen Sie , um detaillierte Hilfe über die Aktualisierung der Quellen zu erhalten. Die Aktualisierung des Systems aus den Quellen ist ein wenig ausgetüftelter als es zunächst den Anschein hat. Die Entwickler von &os; haben es über die Jahre für Nötig befunden, den vorgeschlagenen Ablauf ziemlich stark zu verändern, da neue Arten von unvermeidlichen Abhängigkeiten mit der Zeit ans Licht kamen. Der übrige Teil dieses Abschnitts beschreibt die Überlegungen hinter der aktuell empfohlenen Aktualisierungsreihenfolge. Jede erfolgreiche Aktualisierung muss sich mit den folgenden Sachverhalten auseinandersetzen: Der alte Compiler ist aufgrund von Fehlern möglicherweise nicht in der Lage, den neuen Kernel zu übersetzen. Deshalb sollte der neue Kernel mit dem neuen Compiler übersetzt werden, was bedeutet, dass der neue Compiler vor dem neuen Kernel gebaut werden muss. Das bedeutet nicht unbedingt, dass der neue Compiler auch installiert werden muss, bevor der neue Kernel gebaut wird. Das neue Basissystem benötigt eventuell neue Eigenschaften des Kernels. Also muss der neue Kernel installiert sein, bevor das neue Basissystem installiert wird. Diese ersten beiden Sachverhalte sind die Grundlage für die zentrale Sequenz von buildworld, buildkernel, installkernel und installworld, die in den folgenden Abschnitten beschrieben wird. Weitere Gründe für diese Vorgehensweise sind hier aufgeführt: Das alte Basissystem wird möglicherweise nicht korrekt mit dem neuen Kernel funktionieren, weshalb das neue Basissystem sofort nach der Installation des neuen Kernels installiert werden muss. Manche Änderungen an der Konfiguration müssen erledigt worden sein, bevor das neue Basissystem installiert wird, jedoch können andere die Funktionalität des alten Basissystems beeinträchtigen. Aus diesem Grund sind zwei verschiedene Schritte notwendig, um eine Aktualisierung der Konfiguration durchzuführen. Der Aktualisierungsprozess ersetzt zum Grossteil Dateien oder fügt neue hinzu, bestehende Dateien werden nicht gelöscht. In wenigen Ausnahmefällen kann dies Probleme verursachen. Aus diesem Grund wird der Aktualisierungsprozess manchmal bestimmte Dateien zum manuellen Löschen vorschlagen. Dies wird eventuell in der Zukunft automatisch durchgeführt. Diese Bedenken haben zu der folgenden Reihenfolge geführt. Beachten Sie, dass der genaue Ablauf für bestimmte Aktualisierungen zusätzliche Schritte nach sich zieht, jedoch sollte der Kernprozess davon nicht beeinträchtigt werden: make buildworld Dieser Schritt übersetzt zuerst den neuen Compiler und ein paar damit zusammenhängende Werkzeuge und verwendet dann den neuen Compiler, um den Rest des Basissystems zu erstellen. Das Ergebnis landet dann in /usr/obj. make buildkernel Dieser Ansatz nutzt den neuen Compiler, der in /usr/obj abgelegt ist, um vor falschen Compiler-Kernel-Kombinationen zu schützen. make installkernel Platziert den neuen Kernel und Kernelmodule auf der Platte, was es erlaubt, mit dem frisch aktualisierten Kernel zu starten. Starten Sie das System neu in den Single-User-Modus. Der Single-User-Modus minimiert Probleme mit der Aktualisierung von Programmen, die bereits gestartet sind. Ebenso minimiert es Probleme, die mit der Verwendung des alten Basissystems und des neuen Kernels zu tun haben könnten. mergemaster -p Dieser Schritt aktualisiert ein paar initiale Konfigurationsdateien als Vorbereitung für das neue Basissystem. Beispielsweise fügt es neue Benutzergruppen zum System oder neue Benutzernamen in die Passwortdatenbank hinzu. Dies wird oftmals benötigt, wenn neue Gruppen oder bestimmte Systembenutzerkonten seit der letzten Aktualisierung hinzu gekommen sind, so dass der installworld-Schritt in der Lage ist, auf dem neu installierten System die Benutzer oder Systemgruppennamen ohne Probleme zu verwenden. make installworld Kopiert das Basissystem aus /usr/obj. Der neue Kernel und das neue Basissystem sind jetzt auf der Platte installiert. mergemaster Aktualisiert die verbleibenden Konfigurationsdateien, da nun das neue Basissystem auf der Platte ist. Starten Sie das System neu. Ein kompletter Systemneustart ist notwendig, um den neuen Kernel und das neue Basissystem mit den neuen Konfigurationsdateien zu laden. Beachten Sie, dass wenn Sie von einem Release des gleichen &os;-Zweigs auf ein aktuelleres Release des gleichen Zweigs, z.B. von 9.0 auf 9.1, aktualisieren, dann ist diese Vorgehensweise nicht unbedingt notwendig, da Sie nur sehr unwahrscheinlich in ungünstige Kombinationen zwischen Compiler, Kernel, Basissystem und den Konfigurationsdateien geraten werden. Die ältere Vorgehensweise von make world, gefolgt von der Erstellung und Installation des neuen Kernels funktioniert möglicherweise gut genug, um kleinere Aktualisierungen vorzunehmen. Wenn Sie allerdings zwischen Hauptversionen aktualisieren wollen und befolgen diese Schritte nicht, sollten Sie sich auf Probleme gefasst machen. Es ist auch wichtig zu wissen, dass viele Aktualisierungen spezielle und zusätzliche Schritte benötigen, wie beispielsweise das umbenennen oder löschen von bestimmten Dateien vor installworld. Lesen Sie /usr/src/UPDATING gründlich, besonders am Ende, wo die aktuell vorgeschlagene Aktualisierungssequenz explizit aufgelistet ist. Diese Prozedur hat sich mit der Zeit weiterentwickelt, da die Entwickler es für unmöglich erachtet haben, bestimmte Arten von Kombinationsproblemen vollständig auszuschliessen. Hoffentlich wird die aktuelle Aktualisierungsprozedur für lange Zeit stabil bleiben. Als Zusammenfassung ist hier nochmal die aktuell vorgeschlagene Vorgehensweise für die Aktualisierung von &os; aus den Quellen aufgelistet: &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; make buildkernel &prompt.root; make installkernel &prompt.root; shutdown -r now Es gibt einige, sehr seltene Situationen, in denen Sie mergemaster -p zusätzlich ausführen müssen, bevor Sie das System mit buildworld bauen. Diese Situationen werden in UPDATING beschrieben. Solche Situationen treten aber in der Regel nur dann auf, wenn das &os;-System um eine oder mehrere Hauptversionen aktualisiert wird. Nachdem installkernel erfolgreich abgeschlossen wurde, starten Sie das System durch die Eingabe von boot -s am Loaderprompt im Single-User-Modus. Danach führen Sie die folgenden Kommandos aus: &prompt.root; mount -u / &prompt.root; mount -a -t ufs &prompt.root; adjkerntz -i &prompt.root; mergemaster -p &prompt.root; cd /usr/src &prompt.root; make installworld &prompt.root; mergemaster &prompt.root; reboot Lesen Sie bitte weiter Die folgenden Abschnitte beschreiben detailliert die einzelnen Schritte, insbesondere wenn eine angepasste Kernelkonfiguration verwendet wird. Lesen Sie <filename>/usr/src/UPDATING</filename> Lesen Sie vor der Aktualisierung /usr/src/UPDATING. Die Datei enthält wichtige Informationen zu potentiellen Problemen, und gibt die Reihenfolge vor, in der bestimmte Kommandos gestartet werden müssen. Die Anweisungen in UPDATING sind aktueller als die in diesem Handbuch. Im Zweifelsfall folgen Sie bitte den Anweisungen aus UPDATING. Das Lesen von UPDATING ersetzt nicht das Abonnieren der richtigen Mailingliste. Die beiden Voraussetzungen ergänzen sich, es reicht nicht aus, nur eine zu erfüllen. Überprüfen Sie <filename>/etc/make.conf</filename> make.conf Die verfügbaren &man.make.1;-Optionen werden in &man.make.conf.5; und /usr/share/examples/etc/make.conf dargestellt. Diese Einstellungen können in /etc/make.conf hinzugefügt werden, um das Verhalten von &man.make.1; beim Übersetzen von Programmen zu beeinflussen. Änderungen an einigen Einstellungen können weitreichende und unerwartete Auswirkungen nach sich ziehen. Lesen Sie die Kommentare in diesen beiden Ressourcen und beachten Sie, dass die Standardwerte aus einer Kombination von Leistung und Sicherheit gewählt wurden. Die in /etc/make.conf gesetzten Optionen wirken sich bei jedem Aufruf von &man.make.1; aus, einschließlich der Übersetzung von Programmen aus der Ports-Sammlung, vom Benutzer geschriebene C-Programme oder beim Bau des &os;-Betriebssystems. <filename>/etc/src.conf</filename> überprüfen /etc/src.conf /etc/src.conf kontrolliert den Bau des Betriebssystems aus dem Quellcode. Im Gegensatz zu /etc/make.conf greifen die Optionen in /etc/src.conf nur dann, wenn das &os; Betriebssystem selbst gebaut wird. Die vielen Optionen für diese Datei werden in &man.src.conf.5; beschrieben. Seien Sie vorsichtig mit dem Entfernen von scheinbar nicht mehr benötigten Kernelmodulen und Optionen. Manchmal gibt es unerwartete oder subtile Wechselwirkungen. Aktualisieren Sie die Dateien in <filename>/etc</filename> /etc enthält den Großteil der Konfigurationsdateien des Systems und Skripten, die beim Start des Systems ausgeführt werden. Einige dieser Skripten ändern sich bei einer Migration auf eine neue &os;-Version. Einige der Konfigurationsdateien, wie beispielsweise /etc/group, werden für den Normalbetrieb des Systems gebraucht. Es gab Fälle, in denen die Installationsroutine von make installworld auf bestimmte Accounts oder Gruppen angewiesen war. Bei einer Aktualisierung ist es jedoch wahrscheinlich, dass diese Accounts oder Gruppen noch nicht existieren. In einigen Fällen prüft make buildworld ob die Accounts oder Gruppen vorhanden sind. Um dieses Problem zu umgehen, rufen Sie &man.mergemaster.8; im prä-buildworld-Modus auf, der mit aktiviert wird. In diesem Modus werden nur Dateien verglichen, die für den Erfolg von buildworld oder installworld essentiell sind. Um im System nach Dateien zu suchen die der Gruppe gehören, die umbenannt oder gelöscht werden soll: &prompt.root; find / -group GID -print Dieses Kommando zeigt alle Dateien an, die der Gruppe GID gehören. Dies kann entweder ein Gruppenname oder eine numerische ID sein. Wechseln Sie in den Single-User-Modus Single-User-Modus Sie können das System im Single-User-Modus übersetzen. Bei der Installation des Systems werden viele wichtige Dateien, wie die Standard-Systemprogramme, die Bibliotheken und Include-Dateien, verändert. Sie bringen sich in Schwierigkeiten, wenn Sie diese Dateien auf einem laufenden System verändern, besonders dann, wenn zu dieser Zeit Benutzer auf dem System aktiv sind. Mehrbenutzermodus Bei dieser Methode übersetzen Sie das System im Mehrbenutzermodus und wechseln anschließend für die Installation in den Single-User-Modus. Wenn Sie diese Methode benutzen wollen, warten Sie mit den folgenden Schritten, bis der Bau des Systems abgeschlossen ist. Wechseln Sie dann in den Single-User-Modus, um installkernel oder installworld auszuführen. Mit dem folgenden Kommando kann ein laufendes System in den Single-User-Modus gebracht werden: &prompt.root; shutdown now Alternativ können Sie das System mit der Option single user in den Single-User-Modus booten. Geben Sie dann die folgenden Befehle am Single-User-Modus Shell-Prompt ein: &prompt.root; fsck -p &prompt.root; mount -u / &prompt.root; mount -a -t ufs &prompt.root; swapon -a Die Kommandos überprüfen die Dateisysteme, hängen / wieder beschreibbar ein, hängen dann alle anderen UFS Dateisysteme aus /etc/fstab ein und aktivieren den Swap-Bereich. Zeigt die CMOS-Uhr die lokale Zeit und nicht GMT an (dies erkennen Sie daran, dass &man.date.1; die falsche Zeit und eine falsche Zeitzone anzeigt), setzen Sie das folgende Kommando ab: &prompt.root; adjkerntz -i Dies stellt sicher, dass die Zeitzone richtig eingestellt ist. Entfernen Sie <filename>/usr/obj</filename> Die neu gebauten Teile des Systems werden in der Voreinstellung unter /usr/obj gespeichert. Die Verzeichnisse dort spiegeln die Struktur unter /usr/src. Um den make buildworld Prozess zu beschleunigen und Ärger aufgrund von Abhängigkeiten zu vermeiden, können Sie dieses Verzeichnis entfernen. Einige Dateien unter /usr/obj haben vielleicht die -Option gesetzt, die zuvor mit &man.chflags.1; entfernt werden muss: &prompt.root; cd /usr/obj &prompt.root; chflags -R noschg * &prompt.root; rm -rf * Übersetzen der Quellen des Basissystems Sichern der Ausgaben Es ist ratsam, die Ausgaben von &man.make.1; in einer Datei zu sichern. Wenn etwas schief geht, kann eine Kopie der Fehlermeldung zu einer der &os;-Mailinglisten gesendet werden. Dazu können Sie einfach das Kommando &man.script.1; benutzen, dem Sie beim Aufruf als Parameter den Dateinamen für die Ausgaben mitgeben. Setzen Sie das Kommando unmittelbar vor dem Neubau ab und geben Sie exit ein, wenn der Bau abgeschlossen ist: &prompt.root; script /var/tmp/mw.out Script started, output file is /var/tmp/mw.out &prompt.root; make TARGET … Ausgaben des Kommandos … &prompt.root; exit Script done, … Sichern Sie die Ausgaben nicht in /tmp, da dieses Verzeichnis beim nächsten Reboot aufgeräumt werden kann. Ein geeigneteres Verzeichnis ist /var/tmp, oder das Heimatverzeichnis von root. Übersetzen des Basissystems Wechseln Sie in das Verzeichnis, in dem die Quellen liegen (in der Voreinstellung ist das /usr/src): &prompt.root; cd /usr/src make Benutzen Sie &man.make.1;, um das Basissystem neu zu bauen. Dieses Kommando liest Anweisungen aus einem Makefile, wechles beschreibt, wie die Programme, aus denen &os; besteht, zu bauen sind und in welcher Reihenfolge diese zu bauen sind. Ein typischer Aufruf von make sieht wie folgt aus: &prompt.root; make -x -DVARIABLE target In diesem Beispiel ist eine Option, die an &man.make.1; weitergegeben wird. Eine Liste gültiger Optionen finden Sie in &man.make.1;. Das Verhalten eines Makefiles wird von Variablen bestimmt. Mit setzen Sie eine Variable. Diese Variablen sind dieselben, die auch in /etc/make.conf gesetzt werden, dies ist nur ein alternativer Weg, Variablen zu setzen. Um zu verhindern, dass die profiled Bibliotheken gebaut werden, rufen Sie make wie folgt auf: &prompt.root; make -DNO_PROFILE target Dieser Aufruf entspricht dem folgenden Eintrag in /etc/make.conf: NO_PROFILE= true # Avoid compiling profiled libraries Jedes Makefile definiert einige Ziele, die festlegen, was genau zu tun ist. Mit target wählen Sie eins dieser Ziele aus. Einige Ziele im Makefile werden verwendet, um den Bauprozess in eine Reihe von Einzelschritten zu unterteilen. Im Regelfall müssen &man.make.1; keine Parameter mitgegeben werden, so dass die Kommandozeile wie folgt aussehen wird: &prompt.root; make target target steht dabei für die verschiedenen Ziele. Das erste Ziel sollte immer buildworld sein. Mit buildworld wird ein kompletter Baum unterhalb von /usr/obj gebaut, der mit installworld auf dem System installiert werden kann. Über separate Optionen zu verfügen, ist aus mehreren Gründen nützlich. Erstens können Sie das System gefahrlos auf einem laufenden System bauen, da die Bauprozedur vom Rest des Systems isoliert ist. Das System lässt sich im Mehrbenutzermodus ohne negative Seiteneffekte bauen. Die Installation mit installworld sollte aber immer noch im Single-User-Modus erfolgen. Zweitens kann NFS benutzt werden, um mehrere Maschinen in einem Netzwerk zu aktualisieren. Um die Maschinen A, B und C zu aktualisieren, lassen Sie make buildworld und make installworld auf A laufen. Auf den Maschinen B und C können Sie die Verzeichnisse /usr/src und /usr/obj von A einhängen und brauchen dort nur noch make installworld auszuführen, um die Bauresultate zu installieren. Obwohl das Ziel world noch existiert, sollte es wirklich nicht mehr benutzt werden. Benutzen Sie stattdessen: &prompt.root; make buildworld Mit können Sie make anweisen, mehrere Prozesse zu starten. Besonders effektiv ist das auf Mehrprozessor-Systemen. Da aber der Übersetzungsprozess hauptsächlich von I/O statt der CPU bestimmt wird, ist diese Option auch auf Einprozessor-Systemen nützlich. Auf einem typischen Einprozessor-System können Sie den folgenden Befehl eingeben: &prompt.root; make -j4 buildworld &man.make.1; wird dann bis zu vier Prozesse gleichzeitig laufen lassen. Erfahrungsberichte aus den Mailinglisten zeigen, dass dieser Aufruf typischerweise den besten Geschwindigkeitsgewinn bringt. Wenn Sie ein Mehrprozessor-System besitzen und SMP im Kernel konfiguriert ist, probieren Sie Werte zwischen 6 und 10 aus. Laufzeiten Bau des Basissystems Laufzeiten Die Laufzeit eines Baus wird von vielen Faktoren beeinflusst, ein aktuelles System benötigt aber etwa zwei Stunden um &os.stable; zu bauen. Der Bau von &os.current; dauert etwas länger. Übersetzen und Installation des Kernels Kernel Übersetzen Kompilieren Sie einen neuen Kernel, um den vollen Nutzen aus dem System zu ziehen. Praktisch gesehen ist das sogar notwendig, da sich einige Datenstrukturen geändert haben und Programme wie &man.ps.1; und &man.top.1; nur mit einem Kernel zusammen arbeiten, der auch zu dem entsprechenden Quellcode passt. Am einfachsten und sichersten bauen Sie dazu den GENERIC Kernel. Obwohl der GENERIC Kernel vielleicht nicht alle Geräte unterstützt, sollte er alles enthalten, um das System in den Single-User-Modus zu booten. Dies ist auch ein guter Test, um zu sehen, dass das System ordnungsgemäß funktioniert. Nachdem das System mit GENERIC gebootet wurde und sichergestellt ist, dass das System funktioniert, kann ein neuer Kernel basierend auf einer angepassten Konfigurationsdatei erstellt werden. In &os; müssen Sie das Basissystem neu bauen, bevor Sie einen neuen Kernel erstellen. Verwenden Sie KERNCONF=MYKERNEL, um einen Kernel mit einer vorhandenen, angepassten Konfigurationsdatei zu erstellen: &prompt.root; cd /usr/src &prompt.root; make buildkernel KERNCONF=MYKERNEL &prompt.root; make installkernel KERNCONF=MYKERNEL Wenn kern.securelevel einen Wert größer als 1 besitzt und der Kernel mit noschg oder ähnlichen Optionen geschützt ist, müssen Sie installkernel im Single-User-Modus ausführen. Andernfalls laufen diese beiden Kommandos problemlos im Mehrbenutzermodus. Weitere Informationen über kern.securelevel finden Sie in &man.init.8;. Optionen, die auf Dateien gesetzt werden können, werden in &man.chflags.1; detailliert erläutert. Booten Sie in den Single-User-Modus Single-User-Modus Booten Sie in den Single-User-Modus, um zu prüfen ob der neue Kernel funktioniert. Folgen Sie dazu den Anweisungen aus . Installation des Systems Nun kann das neue System mit installworld installiert werden: &prompt.root; cd /usr/src &prompt.root; make installworld Wenn mit make buildworld Variablen verwendet werden, müssen dieselben Variablen auch bei make installworld angegeben werden. Auf die anderen Optionen trifft das nur bedingt zu: darf mit installworld nicht benutzt werden. Haben Sie zum Bauen die folgende Kommandozeile verwendet: &prompt.root; make -DNO_PROFILE buildworld dann installieren Sie das Ergebnis mit: &prompt.root; make -DNO_PROFILE installworld Andernfalls würde das System bei der Installation versuchen, die profiled Bibliotheken, die aber gar nicht gebaut wurden, zu installieren. Aktualisieren der von <command>make installworld</command> ausgelassenen Dateien Neue oder geänderte Konfigurationsdateien aus einigen Verzeichnissen, besonders /etc, /var und /usr werden bei der Installationsprozedur nicht berücksichtigt. Diese Dateien können einfach mit &man.mergemaster.8; aktualisiert werden. Sichern Sie /etc für den Fall, dass während der Aktualisierung etwas schief geht. <command>mergemaster</command> TomRhodesBeigetragen von mergemaster &man.mergemaster.8; ist ein Bourne-Shell Skript, das dabei behilflich ist die Unterschiede zwischen den Konfigurationsdateien in /etc und denen im Quellbaum unter /usr/src/etc zu finden. mergemaster ist der empfohlene Weg, die Systemkonfiguration mit dem Quellbaum abzugleichen. Um zu beginnen, rufen Sie mergemaster auf. Ausgehend von / wird mergemaster einen virtuellen Root-Baum aufbauen und darin die neuen Konfigurationsdateien ablegen. Diese Dateien werden dann mit den auf dem System installierten Dateien verglichen. Unterschiede zwischen den Dateien werden im &man.diff.1;-Format dargestellt. Neue oder geänderte Zeilen werden mit gekennzeichnet. Zeilen die gelöscht oder ersetzt werden, sind mit gekennzeichnet. Das Anzeigeformat wird in &man.diff.1; genauer erklärt. &man.mergemaster.8; zeigt Ihnen jede geänderte Datei an und Sie haben die Wahl, die neue Datei (in mergemaster wird sie temporäre Datei genannt) zu löschen, sie unverändert zu installieren, den Inhalt der neuen Datei mit dem Inhalt der alten Datei abzugleichen, oder die &man.diff.1; Ausgabe noch einmal zu sehen. Wenn Sie die temporäre Datei löschen, geht mergemaster davon aus, dass Sie die aktuelle Datei unverändert behalten möchten. Wählen Sie die Option nur dann, wenn Sie keinen Grund sehen, die aktuelle Datei zu ändern. Wenn Sie die temporäre Datei installieren, wird Ihre aktuelle Datei mit der neuen Datei überschrieben. Sie sollten alle unveränderten Konfigurationsdateien auf diese Weise aktualisieren. Wenn Sie sich entschließen den Inhalt beider Dateien abzugleichen, wird ein Texteditor aufgerufen, in dem Sie beide Dateien nebeneinander betrachten können. Mit der Taste l übernehmen Sie die aktuelle Zeile der links dargestellten Datei, mit der Taste r übernehmen Sie die Zeile der rechts dargestellten Datei. Das Ergebnis ist eine Datei, die aus Teilen der beiden ursprünglichen Dateien besteht und installiert werden kann. Dieses Verfahren wird gewöhnlich bei veränderten Dateien genutzt. Haben Sie sich entschieden die Differenzen noch einmal anzuzeigen, zeigt &man.mergemaster.8; dieselbe Ausgabe, die bereits vor der Eingabeaufforderung ausgegeben wurde. Wenn &man.mergemaster.8; alle Systemdateien abgearbeitet hat, werden weitere Optionen abgefragt. Sie werden unter Umständen gefragt, ob die Passwort-Datei neu gebaut werden soll. Am Ende haben Sie die Möglichkeit, die restlichen temporären Dateien zu löschen. Manueller Abgleich der Konfigurationsdateien Wenn Sie den Abgleich lieber selbst ausführen wollen, beachten Sie bitte, dass Sie nicht einfach die Dateien aus /usr/src/etc nach /etc kopieren können. Einige dieser Dateien müssen zuerst installiert werden, bevor sie benutzt werden können. Das liegt daran, dass /usr/src/etc keine exakte Kopie von /etc ist. Zudem gibt es Dateien, die sich in /etc befinden aber nicht in /usr/src/etc. Wenn Sie, wie empfohlen, mergemaster benutzen, können Sie direkt in den nächsten Abschnitt wechseln. Am einfachsten ist es, wenn Sie die neuen Dateien in ein temporäres Verzeichnis installieren und sie nacheinander auf Differenzen zu den bestehenden Dateien durchsehen. Sichern Sie die Inhalte von <filename>/etc</filename> Es wird empfohlen, zuerst das bestehende /etc an einen sicheren Ort zu kopieren: &prompt.root; cp -Rp /etc /etc.old Mit wird rekursiv kopiert und erhält die Attribute der kopierten Dateien, wie Zugriffszeiten und Eigentümer. Erstellen Sie ein temporäres Verzeichnis für die Installation der neuen Dateien in /etc. &prompt.root; mkdir /var/tmp/root &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root distrib-dirs distribution Die obigen Kommandos bauen die nötige Verzeichnisstruktur auf und installieren die neuen Dateien in diese Struktur. Unterhalb von /var/tmp/root wurden einige leere Verzeichnisse angelegt, die Sie am besten wie folgt entfernen: &prompt.root; cd /var/tmp/root &prompt.root; find -d . -type d | xargs rmdir 2>/dev/null Dadurch werden alle leeren Verzeichnisse entfernt. Um die Warnungen über nicht leere Verzeichnisse zu unterdrücken, wurde die Standardfehlerausgabe nach /dev/null umgeleitet. /var/tmp/root enthält nun alle Dateien, die unterhalb von / installiert werden sollten. Sie müssen nun jede dieser Dateien mit den schon existierenden Dateien des Systems vergleichen. Einige der installierten Dateien unter /var/tmp/root beginnen mit einem .. Verwenden Sie ls -a um sicherzustellen, dass Sie alle derartigen Dateien finden. Benutzen Sie &man.diff.1;, um zwei Dateien zu vergleichen: &prompt.root; diff /etc/shells /var/tmp/root/etc/shells Dieses Kommando zeigt die Unterschiede zwischen der installierten Version von /etc/shells und der neuen Version in /var/tmp/root/etc/shells. Entscheiden Sie anhand der Unterschiede, ob Sie beide Dateien abgleichen, oder die alte Version durch die neue Version ersetzen wollen. Versehen Sie das temporäre Verzeichnis <filename>/var/tmp/root</filename> mit einem Zeitstempel Wenn das System oft neu gebaut wird, muss auch /etc genauso oft aktualisiert werden. Dies kann mit der Zeit ein bisschen mühsam werden. Um diesen Prozess zu beschleunigen, behalten Sie eine Kopie der Dateien, die zuletzt nach /etc installiert wurden. Folgen Sie der normalen Prozedur um das System zu bauen. Wenn Sie /etc und die anderen Verzeichnisse aktualisieren wollen, geben Sie dem temporären Verzeichnis einen Namen, der das aktuelle Datum enthält. &prompt.root; mkdir /var/tmp/root-20130214 &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root-20130214 \ distrib-dirs distribution Gleichen Sie die Änderungen entsprechend der Anleitung von oben ab. Wenn Sie fertig sind, entfernen Sie das Verzeichnis /var/tmp/root-20130214 nicht. Nachdem die neuen Quellen heruntergeladen und gebaut haben, folgen Sie Schritt 1. Erstellen Sie ein neues Verzeichnis mit einem aktuellen Datum. Dieses Beispiel verwendet /var/tmp/root-20130221. Vergleichen Sie die Unterschiede, die sich in einer Woche ergeben haben, indem Sie &man.diff.1; rekursiv anwenden: &prompt.root; cd /var/tmp &prompt.root; diff -r root-20130214 root-20130221 Üblicherweise sind diese Differenzen kleiner, als die Differenzen zwischen /var/tmp/root-20130221/etc und /etc. Da die angezeigten Differenzen kleiner sind, ist es jetzt einfacher den Abgleich der Dateien in /etc durchzuführen. Wenn Sie fertig sind, können Sie das ältere der beiden /var/tmp/root-* Verzeichnisse entfernen: &prompt.root; rm -rf /var/tmp/root-20130214 Wiederholen Sie diesen Prozess jedes Mal wenn Sie Dateien in /etc abgleichen müssen. Benutzen Sie &man.date.1;, um die Verzeichnisnamen automatisch zu erzeugen: &prompt.root; mkdir /var/tmp/root-`date "+%Y%m%d"` Das System neu starten Nachdem Sie sich davon überzeugt haben, dass alle Dateien an der richtigen Stelle sind, starten Sie das System mit &man.shutdown.8; neu: &prompt.root; shutdown -r now Herzlichen Glückwunsch! Sie haben gerade erfolgreich ein &os; System aktualisiert. Es ist leicht einen Teil des Systems wiederherzustellen, für den Fall, dass Ihnen ein kleiner Fehler unterlaufen ist. Wenn beispielsweise während des Updates oder Abgleichs /etc/magic aus Versehen gelöscht wurde, wird &man.file.1; nicht mehr funktionieren. In diesem Fall kann das Problem mit dem folgenden Kommando behoben werden: &prompt.root; cd /usr/src/usr.bin/file &prompt.root; make all install Fragen Muss ich wirklich immer alles neu bauen, wenn sich etwas geändert hat? Darauf gibt es keine einfache Antwort. Was zu tun ist, hängt von den Änderungen ab. Es lohnt wahrscheinlich nicht, alles neu zu bauen, wenn sich bei einem svn-Lauf nur die folgenden Dateien geändert haben: src/games/cribbage/instr.c src/games/sail/pl_main.c src/release/sysinstall/config.c src/release/sysinstall/media.c src/share/mk/bsd.port.mk In diesem Fall können Sie in die entsprechenden Unterverzeichnisse wechseln und dort make all install ausführen. Wenn sich allerdings etwas Wichtiges, wie src/lib/libc/stdlib, geändert hat, sollten Sie die Welt oder mindestens die statisch gelinkten Teile des Systems neu bauen. Letztendlich ist das Ihre Entscheidung. Sie sind vielleicht damit zufrieden, das System alle zwei Wochen neu zu bauen und in der Zwischenzeit die anfallenden Änderungen zu sammeln. Wenn Sie sich zutrauen, alle Abhängigkeiten zu erkennen, bauen Sie vielleicht auch nur die geänderten Sachen neu. Das hängt auch noch davon ab, wie oft Sie ein Update durchführen wollen und ob Sie &os.stable; oder &os.current; benutzen. Der Bau bricht mit vielen Signal 11-Fehlern (oder anderen Signalnummern) ab. Was ist da passiert? Signal 11 Normalerweise zeigen diese Meldungen Hardwarefehler an. Ein Neubau der Welt ist ein guter Belastungstest für die Hardware und zeigt oft Probleme mit dem Speicher auf. Dies äußert sich darin, dass der Compiler mit seltsamen Signalen abbricht. Es liegt garantiert ein Hardwarefehler vor, wenn make neu gestartet wird und an einer anderen Stelle abbricht. In diesem Fall können nur einzelne Komponenten des Systems getauscht werden, um zu bestimmen, welche Komponente den Fehler verursacht. Kann /usr/obj entfernt werden, wenn ich fertig bin? Kurze Antwort: Ja. In /usr/obj werden alle Dateien abgelegt, die während der Übersetzungsphase erstellt wurden. Dieses Verzeichnis wird in einem der ersten Schritte von make buildworld entfernt. Es macht daher wenig Sinn, dieses Verzeichnis zu behalten. Zudem wird ungefähr 2 GB Plattenspeicher freigegeben, wenn dieses Verzeichnis gelöscht wird. Erfahrene Benutzer können make buildworld anweisen, diesen Schritt zu überspringen. Nachfolgende Bauprozeduren werden dadurch erheblich schneller, da die meisten Quelldateien nicht mehr neu übersetzt werden müssen. Dafür können aber subtile Abhängigkeitsprobleme entstehen, die dazu führen, dass der Bau auf merkwürdige Weise abbrechen kann. Dies führt häufig zu unnötigen Diskussionen auf den &os; Mailinglisten, wenn sich jemand über einen kaputten Bau beschwert, aber nicht sieht, dass er Probleme hat, weil er eine Abkürzung genommen hat. Kann ein abgebrochener Bau weitergeführt werden? Das hängt davon ab, wieweit der Bauprozess fortgeschritten ist. Üblicherweise werden durch make buildworld essentielle Werkzeuge, wie &man.gcc.1; und &man.make.1;, und die Systembibliotheken neu erstellt. Die neu erstellten Werkzeuge und Bibliotheken werden dann benutzt, um sich selbst noch einmal zu bauen, und wieder installiert. Anschließend wird das Gesamtsystem, einschließlich der normalen Benutzerprogramme wie &man.ls.1; und &man.grep.1;, mit den neu erstellten Systemdateien gebaut. Während der letzten Phase können Sie relativ gefahrlos folgende Kommandos ausführen: … Fehler beheben … &prompt.root; cd /usr/src &prompt.root; make -DNO_CLEAN all Diese Variablen verhindern, dass make buildworld die vorher erstellten Dateien löscht. Das Sie sich im letzten Schritt der Bauprozedur befinden, erkennen Sie daran, dass Sie in der Ausgabe von make buildworld die folgenden Zeilen finden: -------------------------------------------------------------- Building everything.. -------------------------------------------------------------- Wenn diese Meldung nicht angezeigt wird, oder Sie sich nicht sicher sind, dann ist es besser, noch einmal ganz von Vorne anzufangen. Wie kann ich den Bauprozess beschleunigen? Bauen Sie im Single-User-Modus. Legen Sie /usr/src und /usr/obj in getrennte Dateisysteme auf unterschiedliche Festplatten. Benutzen Sie nach Möglichkeit auch getrennte Platten-Controller. Alternativ können diese Dateisysteme mit &man.ccd.4; auf mehrere Festplatten verteilt werden. Deaktivieren Sie den Bau der profiled-Bibliotheken, indem Sie NO_PROFILE=true in /etc/make.conf aufnehmen. Benutzen Sie make zusammen mit , um mehrere Prozesse parallel laufen zu lassen. Normalerweise beschleunigt dies den Bauprozess auf Einprozessor- und Mehrprozessorsystemen. Das Dateisystem /usr/src kann mit der Option eingehangen werden. Dies verhindert, dass die Zugriffszeiten der Dateien aktualisiert werden. &prompt.root; mount -u -o noatime /usr/src Das Beispiel geht davon aus, dass sich /usr/src auf einem separaten Dateisystem befindet. Wenn es Teil des /usr Dateisystems ist, muss dieses Dateisystem als Mountpoint angegeben werden. Das Dateisystem, in dem sich /usr/obj befindet, kann mit eingehangen werden, so dass Schreibzugriffe auf die Platte asynchron stattfinden. Das heißt ein Schreibzugriff ist sofort beendet, die Daten werden allerdings erst einige Sekunden später geschrieben. Dadurch können Schreibzugriffe zusammengefasst werden, was einen erheblichen Geschwindigkeitszuwachs mit sich bringen kann. Beachten Sie, dass dies das Dateisystem anfälliger für Fehler macht. Im Fall eines Stromausfalls besteht eine erhöhte Wahrscheinlichkeit, dass das Dateisystem beim Start der Maschine zerstört ist. Wenn /usr/obj das einzige Verzeichnis auf auf diesem Dateisystem ist, stellt das kein Problem dar. Wenn sich allerdings auf diesem Dateisystem noch andere wertvolle Daten befinden, stellen Sie sicher, dass Sie über aktuelle Sicherungen verfügen. &prompt.root; mount -u -o async /usr/obj Ersetzen Sie /usr/obj durch den Mountpoint des entsprechenden Dateisystems, wenn es sich nicht auf einem eigenen Dateisystem befindet. Was mache ich, wenn etwas nicht funktioniert? Stellen Sie sicher, dass sich in Ihrer Umgebung keine Reste eines vorherigen Baus befinden: &prompt.root; chflags -R noschg /usr/obj/usr &prompt.root; rm -rf /usr/obj/usr &prompt.root; cd /usr/src &prompt.root; make cleandir &prompt.root; make cleandir Ja, make cleandir muss wirklich zweimal aufgerufen werden. Danach starten Sie den Bauprozess wieder mit make buildworld. Wenn Sie immer noch Probleme haben, schicken Sie die Fehlermeldungen und die Ausgabe von uname -a an die Mailingliste &a.de.questions;. Bereiten Sie sich darauf vor, weitere Fragen zu Ihrer Umgebung zu beantworten. Veraltete Dateien, Verzeichnisse und Bibliotheken löschen AntonShterenlikhtBasiert auf Notizen von Veraltete Dateien, Verzeichnisse und Bibliotheken löschen Aufgrund der ständigen Weiterentwicklung von &os; kann es dazu kommen, dass Dateien und deren Inhalte obsolet werden, weil deren Funktionalität entweder in anderen Dateien implementiert wurde, sich die Versionsnummer der Bibliothek geändert hat oder deren Funktion nicht mehr benötigt wird. Dies kann sowohl Dateien und Verzeichnisse, aber auch Bibliotheken betreffen. Diese veralteten Dateien sollten daher entfernt werden, wenn das System aktualisiert wird. Der Vorteil besteht darin, dass das System von nicht mehr benötigten Dateien befreit wird. Falls die obsolete Bibliothek Sicherheits- oder Stabilitätsprobleme aufweist, sollte das System ebenfalls aktualisiert werden, um das System sicher zu halten und/oder durch die fehlerhafte Bibliothek verursachte Systemabstürze zu vermeiden. Veraltete Dateien, Verzeichnisse und Bibliotheken sind in der Datei /usr/src/ObsoleteFiles.inc aufgelistet. Verwenden Sie die folgenden Anweisungen, um diese Dateien während der Systemaktualisierung zu entfernen. Folgen Sie den Anweisungen von . Nachdem Sie make installworld sowie mergemaster erfolgreich ausgeführt haben, überprüfen Sie das System auf veraltete Dateien und Bibliotheken: &prompt.root; cd /usr/src &prompt.root; make check-old Werden dabei veraltete Dateien gefunden, können diese mit dem folgenden Kommando entfernt werden: &prompt.root; make delete-old Weitere interessante targets finden Sie in /usr/src/Makefile. Bei jeder Datei wird nachgefragt, ob Sie diese wirklich löschen wollen. Es ist aber auch möglich, alle Dateien automatisch löschen zu lassen. Dies erreichen Sie, indem Sie die Umgebungsvariable BATCH_DELETE_OLD_FILES setzen: &prompt.root; make -DBATCH_DELETE_OLD_FILES delete-old Alternativ können Sie auch yes einsetzen und somit die Antwort yes an die einzelnen Abfragen weiterreichen: &prompt.root; yes | make delete-old Warnung Das Löschen veralteter Dateien kann dazu führen, dass Programme, die auf diese Dateien angewiesen sind, nicht mehr funktionieren. Dies gilt insbesondere für veraltete Bibliotheken. In den meisten Fällen ist es dann notwendig, Programme, Ports und Bibliotheken, welche die veraltete Bibliothek verwenden, neu zu bauen, bevor Sie den Befehl make delete-old-libs ausführen. Die Ports-Sammlung enthält Werkzeuge, die Ihnen beim Prüfen von Bibliothek-Abhängigkeiten helfen können: sysutils/libchk sowie sysutils/bsdadminscripts. Veraltete Bibliotheken können zu Konflikten mit neueren Bibliotheken führen und beispielsweise folgende Meldungen verursachen: /usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5 /usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5 Um diese Probleme zu lösen, müssen Sie zuerst herausfinden, welcher Port die Bibliothek installiert hat: &prompt.root; pkg_info -W /usr/local/lib/libtiff.so /usr/local/lib/libtiff.so was installed by package tiff-3.9.4 &prompt.root; pkg_info -W /usr/local/lib/libXext.so /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1 Danach deinstallieren Sie den Port und bauen ihn neu, um ihn danach erneut zu installieren. Dieser Vorgang kann durch den Einsatz von ports-mgmt/portmaster automatisiert werden. Nachdem alle Ports neu gebaut wurden und keine alten alten Bibliotheken mehr verwenden werden, können Sie die alten Bibliotheken endgültig entfernen: &prompt.root; make delete-old-libs Installation mehrerer Maschinen MikeMeyerBeigetragen von Wenn Sie mehrere Maschinen alle auf dem gleichen Stand halten wollen, ist es eine Verschwendung von Ressourcen, die Quellen auf jeder Maschine vorzuhalten und zu übersetzen. Die Lösung dazu ist, eine Maschine den Großteil der Arbeit durchführen zu lassen und den anderen Maschinen das Ergebnis mit NFS zur Verfügung zu stellen. Dieser Abschnitt zeigt Ihnen wie das geht. Voraussetzungen Stellen Sie zuerst eine Liste der Maschinen zusammen, die auf demselben Stand sein sollen. Wir nennen diese Maschinen die Baugruppe. Jede dieser Maschinen kann mit einem eigenen Kernel laufen, doch sind die Programme des Userlands auf allen Maschinen gleich. Wählen Sie aus der Baugruppe eine Maschine aus, auf der der Bau durchgeführt wird, den Bau-Master. Dies sollte eine Maschine sein, die über die nötigen Ressourcen für make buildworld und make installworld verfügt. Sie brauchen auch eine Testmaschine, auf der Sie die Updates testen, bevor Sie sie in Produktion installieren. Dies sollte eine Maschine, eventuell der Bau-Master, sein, die über einen längeren Zeitraum nicht zur Verfügung stehen kann. Alle Maschinen der Baugruppe müssen /usr/obj und /usr/src von derselben Maschine an gleichem Ort einhängen. Idealerweise befinden sich die beiden Verzeichnisse auf dem Bau-Master auf verschiedenen Festplatten, sie können allerdings auch auf dem Bau-Master über NFS zur Verfügung gestellt werden. Wenn Sie mehrere Baugruppen haben, sollte sich /usr/src auf einem Bau-Master befinden und über NFS für den Rest der Maschinen zur Verfügung gestellt werden. Stellen Sie sicher, dass /etc/make.conf und /etc/src.conf auf allen Maschinen einer Baugruppe mit der Datei des Bau-Masters übereinstimmt. Der Bau-Master muss jeden Teil des Systems bauen, den irgendeine Maschine der Baugruppe benötigt. Auf dem Bau-Master müssen in /etc/make.conf alle zu bauenden Kernel mit der Variablen KERNCONF bekannt gegeben werden. Geben Sie dabei den Kernel des Bau-Masters zuerst an. Für jeden zu bauenden Kernel muss auf dem Bau-Master die entsprechende Konfigurationsdatei unter /usr/src/sys/arch/conf abgelegt werden. Installation des Basissystems Bauen Sie auf dem Bau-Master, wie in beschrieben, den Kernel und die Welt, installieren Sie aber nichts. Wechseln Sie auf die Testmaschine und installieren Sie den gerade gebauten Kernel. Wenn diese Maschine /usr/src und /usr/obj über NFS bekommt, müssen Sie das Netzwerk im Single-User-Modus aktivieren und die beiden Dateisysteme einhängen. Am einfachsten ist dies, wenn Sie auf der Testmaschine vom Mehrbenutzermodus mit shutdown now in den Single-User-Modus wechseln. Sie können dann mit der normalen Prozedur den neuen Kernel und das System installieren und anschließend mergemaster laufen lassen. Wenn Sie damit fertig sind, können Sie die Maschine wieder in den Mehrbenutzermodus booten. Nachdem Sie sichergestellt haben, dass die Testmaschine einwandfrei funktioniert, wiederholen Sie diese Prozedur für jede Maschine in der Baugruppe. Die Ports-Sammlung Dasselbe Verfahren können Sie auch für die Ports-Sammlung anwenden. Zuerst müssen alle Maschinen einer Baugruppe /usr/ports von derselben Maschine über NFS zur Verfügung gestellt bekommen. Setzen Sie dann ein Verzeichnis für die Quellen auf, das sich alle Maschinen teilen. Dieses Verzeichnis können Sie in /etc/make.conf mit der Variablen DISTDIR angeben. Das Verzeichnis sollte für den Benutzer beschreibbar sein, auf den der Benutzer root vom NFS Subsystem abgebildet wird. Jede Maschine sollte noch WRKDIRPREFIX auf ein lokales Bauverzeichnis setzen. Wenn Sie vorhaben, Pakete zu bauen und zu verteilen, sollten Sie PACKAGES auf ein Verzeichnis mit den gleichen Eigenschaften wie DISTDIR setzen. Index: head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml (revision 48791) +++ head/de_DE.ISO8859-1/books/handbook/disks/chapter.xml (revision 48792) @@ -1,3695 +1,3694 @@ Speichermedien BerndWarkenÜbersetzt von MartinHeinen Übersicht Dieses Kapitel behandelt die Benutzung von Laufwerken unter &os;. Hierzu zählen SCSI- und IDE-Geräte, CD- und DVD-Medien, speicherbasierte Laufwerke und USB-Geräte. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen: Wie Sie zusätzliche Laufwerke zu einem &os;-System hinzufügen. Wie Sie unter &os; die Partition einer Festplatte vergrößern. Wie Sie &os; zur Verwendung von USB-Speichermedien konfigurieren. Wie Sie CD- und DVD-Medien unter &os; benutzen. Wie Sie die unter &os; erhältlichen Backup-Programme benutzen. Wie Sie RAM-Disks einrichten. Was Dateisystem-Schnappschüsse sind und wie sie effizient eingesetzt werden. Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können. Wie Sie Festplatten und Swap verschlüsseln, um Daten vor Angreifern zu schützen. Wie Sie ein hochverfügbares Speichernetzwerk konfigurieren. Bevor Sie dieses Kapitel lesen, sollten Sie wissen, wie Sie einen neuen &os;-Kernel konfigurieren und installieren können. Hinzufügen von Laufwerken DavidO'BrianIm Original von Laufwerke hinzufügen Dieser Abschnitt beschreibt, wie Sie ein neues SATA-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und des Laufwerkherstellers. Starten Sie das System neu und melden Sie sich als Benutzer root an. Kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue Laufwerk gefunden wurde. In diesem Beispiel erscheint das neu hinzugefügte SATA-Laufwerk als ada1. Partitionen gpart In diesem Beispiel wird eine einzige große Partition auf der Festplatte erstellt. Verwendet wird das GPT-Partionsschema, welches gegenüber dem älteren und weniger vielseitigen MBR-Schema bevorzug wird. Wenn die hinzugefügte Festplatte nicht leer ist, können alte Partitionsinformationen mit gpart delete entfernt werden. Details finden Sie in &man.gpart.8;. Zuerst wird das Partitionsschema erstellt und dann eine einzelne Partition angefügt: &prompt.root; gpart create -s GPT ada1 &prompt.root; gpart add -t freebsd-ufs ada1 Je nach Anwendung kann es wünschenswert sein, mehrere kleinere Partitionen zu haben. In &man.gpart.8; finden Sie Optionen zum Erstellen von kleineren Partitionen. Ein Dateisystem wird auf der neuen, leeren Festplatte erstellt: &prompt.root; newfs -U /dev/ada1p1 Ein leeres Verzeichnis wird als Mountpunkt erstellt, also ein Speicherort für die Montage der neuen Festplatte im originalen Dateisystem: &prompt.root; mkdir /newdisk Abschließend wird ein Eintrag in /etc/fstab hinzugefügt, damit die neue Festplatte automatisch beim Start eingehängt wird: /dev/ada1p1 /newdisk ufs rw 2 2 Die neue Festplatte kann manuell montiert werden, ohne das System neu zu starten: &prompt.root; mount /newdisk Partitionen vergrößern Allan Jude Beigetragen von Björn Heidotting Übersetzt von Partitionen vergrößern Die Kapazität einer Festplatte kann sich ohne Änderungen an bereits vorhandenen Daten erhöhen. Dies geschieht üblicherweise mit virtuellen Maschinen, wenn sich herausstellt, dass die virtuelle Festplatte zu klein ist und vergrößert werden soll. Zuweilen wird auch ein Abbild einer Platte auf einen USB-Stick geschrieben, ohne dabei die volle Kapazität zu nutzen. Dieser Abschnitt beschreibt, wie man Platten vergrößert, bzw. erweitert, um die Vorteile der erhöhten Kapazität zu nutzen. Überprüfen Sie /var/run/dmesg.boot, um den Gerätenamen der Festplatte zu bestimmen, die vergrößert werden soll. In diesem Beispiel gibt es nur eine SATA-Festplatte im System, so dass die Platte als ada0 angezeigt wird. Partitionen gpart Um die aktuelle Konfiguration der Partitionen auf der Festplatte anzuzeigen: &prompt.root; gpart show ada0 => 34 83886013 ada0 GPT (48G) [CORRUPT] 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 1 - free - (512B) Wenn die Festplatte mit dem GPT-Partitionsschema formatiert wurde kann es vorkommen, dass sie als corrupted angezeigt wird, weil sich die Sicherung der GPT-Partitionstabellen nicht mehr am Ende des Laufwerks befinden. Reparieren Sie in so einem Fall die Partitionstabelle mit gpart: &prompt.root; gpart recover ada0 ada0 recovered Nun steht der zusätzliche Speicherplatz zur Verfügung und kann verwendet werden, um eine neue Partition anzulegen oder eine bestehende Partition zu erweitern: &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 4194236 3 freebsd-swap (2G) 83886046 18513921 - free - (8.8G) Partitionen können nur auf zusammenhängenden, freien Speicherplatz vergrößert werden. In diesem Beispiel wird die letzte Partition der Platte als Swap-Speicher genutzt, aber die zweite Partition ist die, dessen Größe verändert werden soll. Weil der Swap-Speicher nur temporäre Daten enthält, kann er gefahrlos ausgehangen, gelöscht und nachdem die Partition vergrößert wurde, neu erstellt werden. &prompt.root; swapoff /dev/ada0p3 &prompt.root; gpart delete -i 3 ada0 ada0p3 deleted &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 79691648 2 freebsd-ufs (38G) 79691810 22708157 - free - (10G) Es besteht die Gefahr von Datenverlust, wenn die Partitionstabelle eines eingehangenen Dateisystems verändert wird. Es empfiehlt sich daher, die folgenden Schritte auf einem ausgehangenen Dateisystem durchzuführen, während die Umsetzung über eine Live-CD-ROM oder von einem USB-Gerät erfolgt. Wenn es jedoch absolut notwendig ist, kann ein eingehangenes Dateisystem auch vergrößert werden, nachdem die Sicherheitsfunktionen von GEOM deaktiviert wurden: &prompt.root; sysctl kern.geom.debugflags=16 Vergrößern Sie die Partition und lassen Sie Platz, um die Swap-Partition in der gewünschten Größe neu erstellen zu können. Dies ändert nur die Größe der Partition. Das Dateisystem innerhalb der Partition wird in einem separaten Schritt erweitert. &prompt.root; gpart resize -i 2 -a 4k -s 47G ada0 ada0p2 resized &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 - free - (1.8G) Erstellen Sie die Swap-Partition neu: &prompt.root; gpart add -t freebsd-swap -a 4k ada0 ada0p3 added &prompt.root; gpart show ada0 => 34 102399933 ada0 GPT (48G) 34 128 1 freebsd-boot (64k) 162 98566144 2 freebsd-ufs (47G) 98566306 3833661 3 freebsd-swap (1.8G) &prompt.root; swapon /dev/ada0p3 Erweitern Sie das UFS-Dateisystem, um die Kapazität der vergrößerten Partition zu nutzen: Ab &os; 10.0-RELEASE ist es möglich, ein eingehangenes Dateisystem zu erweitern. Bei älteren Versionen muss das Dateisystem zuvor ausgehangen werden. &prompt.root; growfs /dev/ada0p2 Device is mounted read-write; resizing will result in temporary write suspension for /. It's strongly recommended to make a backup before growing the file system. OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes super-block backups (for fsck -b #) at: 80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752, 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432 Sowohl die Partition als auch das Dateisystem wurden jetzt vergrößert, um den neu zur Verfügung stehenden Speicherplatz zu nutzen. <acronym>USB</acronym> Speichermedien MarcFonvieilleBeigetragen von USB Speichermedien Der Universal Serial Bus (USB) wird von vielen externen Speichern benutzt: Festplatten, USB-Thumbdrives sowie von CD- und DVD-Brennern. &os; bietet Unterstützung für Geräte mit USB 1.x, 2.0 und 3.0. Die Unterstützung fürUSB 3.0 ist mit einiger Hardware, einschließlich Haswell (Lynx Point) Chipsätzen, nicht kompatibel. Wenn &os; beim Booten mit dem Fehler failed with error 19 abbricht, müssen Sie xHCI/USB3 im BIOS deaktivieren. Unterstützung für USB-Massenspeicher ist im GENERIC-Kernel enthalten. Für einen angepassten Kernel müssen die nachstehenden Zeilen in der Kernelkonfigurationsdatei enthalten sein: device scbus>>>>>>># SCSI bus (required for ATA/SCSI) device da>>>>>>># Direct Access (disks) device pass>>>>># Passthrough device (direct ATA/SCSI access) device uhci>>>>># provides USB 1.x support device ohci>>>>># provides USB 1.x support device ehci>>>>># provides USB 2.0 support device xhci>>>>># provides USB 3.0 support device usb>>>>>># USB Bus (required) device umass>>>># Disks/Mass storage - Requires scbus and da device cd>>>>>>># needed for CD and DVD burners &os; benutzt den &man.umass.4;-Treiber, der das SCSI-Subsystem verwendet um auf USB-Geräte zuzugreifen. Da alle USB-Geräte vom System als SCSI-Geräte erkannt werden, dürfen Sie nicht in die Kernelkonfigurationsdatei aufnehmen, wenn es sich bei dem Gerät um einen CD- oder DVD-Brenner handelt. Der übrige Abschnitt beschreibt, wie Sie überprüfen können ob ein USB-Gerät von &os; erkannt wird und wie Sie das Gerät so konfigurieren, dass es verwendet werden kann. Konfiguration von Geräten Um die USB-Konfiguration zu testen, schließen Sie das USB-Gerät an. Verwenden Sie dmesg um zu überprüfen, ob das Gerät in den Systemmeldungen erscheint. Dies sollte in etwa so aussehen: umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0x0100 umass0:4:0:-1: Attached to scbus4 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device da0: Serial Number WD-WXE508CAN263 da0: 40.000MB/s transfers da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C) da0: quirks=0x2<NO_6_BYTE> Fabrikat, Gerätedatei (da0), Geschwindigkeit und Kapazität werden je nach Gerät unterschiedlich sein. Da ein USB-Gerät als SCSI-Gerät erkannt wird, kann camcontrol benutzt werden, um die mit dem System verbundenen USB-Massenspeicher anzuzeigen: &prompt.root; camcontrol devlist <STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0) Alternativ kann usbconfig benutzt werden, um die Geräte aufzulisten. Weitere Informationen zu diesem Kommando finden Sie in &man.usbconfig.8;. &prompt.root; usbconfig ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA) Wenn das Gerät noch nicht formatiert ist, finden Sie in Informationen, wie Sie USB-Laufwerke formatieren und Partitionen einrichten. Wenn das Laufwerk bereits ein Dateisystem enthält, kann es von root nach den Anweisungen in eingehängt werden. Aus Sicherheitsgründen sollten Sie Benutzern, denen Sie nicht vertrauen, das Einhängen (z.B. durch die unten beschriebene Aktivierung von vfs.usermount) beliebiger Medien verbieten. Die meisten Dateisysteme wurden nicht entwickelt, um sich vor böswilligen Geräten zu schützen. Um auch normalen Anwendern das Einhängen des Laufwerks zu gestatten, könnten Sie beispielsweise mit &man.pw.8; alle potentiellen Benutzer dieser Gerätedateien in die Gruppe operator aufnehmen. Außerdem muss sichergestellt werden, dass operator Schreib- und Lesezugriff auf diese Gerätedateien haben. Hierfür werden die folgenden Zeilen in /etc/devfs.rules hinzugefügt: [localrules=5] add path 'da*' mode 0660 group operator Verfügt das System über interne SCSI-Laufwerke, so verändern Sie die zweite Zeile wie folgt: add path 'da[3-9]*' mode 0660 group operator Dies wird die ersten drei SCSI-Laufwerke (da0 bis da2) davon ausschließen, in die Gruppe operator aufgenommen zu werden. Ersetzen Sie 3 durch die Anzahl der SCSI-Laufwerke. Weitere Informationen zu dieser Datei finden Sie in &man.devfs.rules.5;. Aktivieren Sie nun die Regeln in /etc/rc.conf: devfs_system_ruleset="localrules" Als nächstes müssen Sie das System anweisen, auch normalen Benutzern das mounten von Dateisystemen zu erlauben, indem Sie die folgende Zeile in /etc/sysctl.conf hinzufügen: vfs.usermount=1 Da diese Einstellung erst nach einem Neustart wirksam wird, können Sie diese Variable mit sysctl auch direkt setzen: &prompt.root; sysctl vfs.usermount=1 vfs.usermount: 0 -> 1 Zuletzt müssen Sie noch ein Verzeichnis anlegen, in das das USB-Laufwerk eingehängt werden soll. Dieses Verzeichnis muss dem Benutzer gehören, der das USB-Laufwerk in den Verzeichnisbaum einhängen will. Dazu legen Sie als root ein Unterverzeichnis - /mnt/username + /mnt/username an, wobei Sie username durch den Login des jeweiligen Benutzers sowie usergroup durch die primäre Gruppe des Benutzers ersetzen: &prompt.root; mkdir /mnt/username &prompt.root; chown username:usergroup /mnt/username Wenn Sie nun beispielsweise einen USB-Stick anschließen, wird automatisch die Gerätedatei /dev/da0s1 erzeugt. Ist das Gerät mit einem FAT-Dateisystem formatiert, kann es der Benutzer mit dem folgenden Befehl in den Verzeichnisbaum einhängen: &prompt.user; mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username Bevor das Gerät entfernt werden kann, muss es abgehängt werden: &prompt.root; umount /mnt/username Nach Entfernen des Geräts stehen in den Systemmeldungen Einträge, ähnlich der folgenden: umass0: at uhub3, port 2, addr 3 (disconnected) da0 at umass-sim0 bus 0 scbus4 target 0 lun 0 da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached (da0:umass-sim0:0:0:0): Periph destroyed Erstellen und Verwenden von <acronym>CD</acronym>s Mike Meyer Beigesteuert von CD-ROMs brennen CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. ISO 9660 Dateisysteme ISO 9660 CD-Brenner ATAPI Die &os; Ports-Sammlung bietet einige Werkzeuge zum Brennen und Kopieren von Audio- und Daten-CDs. Dieses Kapitel beschreibt die Verwendung von mehreren Kommandozeilen-Werkzeugen. Wenn Sie eine graphische Oberfläche zum Brennen von CDs benutzen, können Sie sysutils/xcdroast oder sysutils/k3b installieren. Unterstützte Geräte Marc Fonvielle Beigetragen von CD-Brenner ATAPI/CAM Treiber Der GENERIC-Kernel enthält Unterstützung für SCSI, USB und ATAPI CD Lesegeräte und Brenner. Wird ein angepasster Kernel erstellt, unterscheiden sich die Optionen für die Kernelkonfigurationsdatei je nach Art des Geräts. Für einen SCSI-Brenner müssen folgende Optionen vorhanden sein: device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners Für einen USB-Brenner müssen folgende Optionen vorhanden sein: device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd> # needed for CD and DVD burners device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da Für einen ATAPI-Brenner müssen folgende Optionen vorhanden sein: device ata # Legacy ATA/SATA controllers device scbus # SCSI bus (required for ATA/SCSI) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners Unter &os; Versionen kleiner 10.x wird auch diese Option in der Kernelkonfigurationsdatei benötigt, falls der Brenner ein ATAPI-Gerät ist: device atapicam Alternativ kann folgende Zeile in /boot/loader.conf hinzugefügt werden, um den Treiber beim Booten automatisch zu laden: atapicam_load="YES" Hierzu ist ein Neustart des Systems erforderlich, da dieser Treiber nur beim Booten geladen werden kann. Mit dmesg können Sie prüfen, ob das Gerät von &os; erkannt wurde. Unter &os; Versionen kleiner 10.x lautet der Gerätename acd0 anstelle von cd0. &prompt.user; dmesg | grep cd cd0 at ahcich1 bus 0 scbus1 target 0 lun 0 cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device cd0: Serial Number M3OD3S34152 cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes) cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed Eine <acronym>CD</acronym> brennen Unter &os; kann cdrecord zum Brennen von CDs benutzt werden. Dieses Programm wird aus dem Port oder Paket sysutils/cdrecordinstalliert. Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Benutzung sehr einfach. Geben Sie den Namen der zu brennenden ISO-Datei an. Wenn das System über mehrere Brenner verfügt, müssen Sie auch den Namen des Gerätes angeben: &prompt.root; cdrecord dev=device imagefile.iso Benutzen Sie um den Gerätenamen des Brenners zu bestimmen. Die Ausgabe könnte wie folgt aussehen: CD-ROM brennen &prompt.root; cdrecord -scanbus ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling Using libscg version 'schily-0.9' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Benutzen Sie die drei durch Kommas separierten Zahlen, die für den CD-Brenner angegeben sind, als Argument für . Im Beispiel ist das Yamaha-Gerät 1,5,0, so dass die passende Eingabe ist. Einfachere Wege das Argument anzugeben, sowie Informationen über Audiospuren und das Einstellen der Geschwindigkeit, sind in der Manualpage von cdrecord beschrieben. Alternativ können Sie den folgenden Befehl ausführen, um die Geräteadresse des Brenners zu ermitteln: &prompt.root; camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (cd0,pass0) Verwenden Sie die numerischen Werte für scbus, target und lun. Für dieses Beispiel wäre 1,0,0 als Gerätename zu verwenden. Daten auf <acronym>ISO</acronym>-Dateisystem schreiben Die Datendateien müssen vorbereitet sein, bevor sie auf eine CD gebrannt werden. In &os; wird mkisofs vom Paket oder Port sysutils/cdrtools installiert. Dieses Programm kann aus einem &unix; Verzeichnisbaum ein ISO 9660-Dateisystem erzeugen. Im einfachsten Fall müssen Sie lediglich den Namen der zu erzeugenden ISO-Datei und den Pfad zu den Dateien angeben, die auf dem ISO 9660-Dateisystem platziert werden: &prompt.root; mkisofs -o imagefile.iso /path/to/tree Dateisysteme ISO 9660 Bei diesem Kommando werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystem entsprechen. Dateien, die diesem Standard nicht entsprechen bleiben unberücksichtigt. Dateisysteme Joliet Es gibt einige Optionen, um die Beschränkungen dieses Standards zu überwinden. Die unter &unix; Systemen üblichen Rock-Ridge-Erweiterungen werden durch aktiviert und aktiviert die von µsoft; Systemen benutzten Joliet-Erweiterungen. Für CDs, die nur auf &os;-Systemen verwendet werden sollen, kann genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit wird ein Abbild des Dateisystems, identisch zu angegebenen &os;-Dateibaum erstellt, selbst wenn dies den ISO 9660 Standard verletzt. CD-ROM bootbare erstellen Die letzte übliche Option ist . Sie wird benutzt, um den Ort eines Bootimages einer El Torito bootbaren CD anzugeben. Das Argument zu dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des Baumes, der auf die CD geschrieben werden soll. In der Voreinstellung erzeugt mkisofs ein ISO-Image im Diskettenemulations-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den &os; Installationsmedien verwendete, kennen keinen Emulationsmodus. Daher sollte in diesen Fällen verwendet werden. Wenn /tmp/myboot ein bootbares &os;-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, dann würde folgendes Kommando /tmp/bootable.iso erstellen: &prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot Das resultierende ISO-Abbild kann als speicherbasiertes Laufwerk eingehängt werden: &prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 &prompt.root; mount -t cd9660 /dev/md0 /mnt Jetzt können Sie überprüfen, dass /mnt und /tmp/myboot identisch sind. Sie können das Verhalten von mkisofs mit einer Vielzahl von Optionen beeinflussen. Details dazu entnehmen Sie bitte &man.mkisofs.8;. Es ist möglich eine Daten-CD in eine Datei zu kopieren, die einem Image entspricht, das mit mkisofs erstellt wurde. Verwenden Sie dazu dd mit dem Gerätenamen als Eingabedatei und den Namen der ISO als Ausgabedatei: &prompt.root; dd if=/dev/cd0 of=file.iso bs=2048 Das resultierende Abbild kann auf eine CD gebrannt werden, wie in beschrieben. Einhängen von Daten-<acronym>CD</acronym>s Sobald ein Abbild auf eine CD gebrannt wurde, kann es durch Angabe des Dateisystemtyp, des CD-Laufwerks und des Mountpunktes eingehangen werden: &prompt.root; mount -t cd9660 /dev/cd0 /mnt Da mount davon ausgeht, dass ein Dateisystem vom Typ ufs ist, würde die Fehlermeldung Incorrect super block erscheinen, wenn Sie beim Einhängen einer Daten-CD auf die Angabe -t cd9660 verzichten. Auf diese Weise können Daten-CDs von jedem Hersteller verwendet werden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO 9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Tauchen statt bestimmter Zeichen nur Fragezeichen auf, so muss über die Option der benötigte Zeichensatz angegeben werden. Weitere Informationen zu diesem Problem finden Sie in &man.mount.cd9660.8;. Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option ) erkennt, müssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu fügen Sie folgende Zeile in loader.conf ein: cd9660_iconv_load="YES" Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über kldload laden. Manchmal werden Sie die Meldung Device not configured erhalten, wenn Sie versuchen, eine DatenCD einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig. Manchmal wird ein SCSI-CD nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Um dieses Problem zu lösen, fügen Sie die folgende Zeile in die Kernelkonfiguration ein und erstellen Sie einen angepassten Kernel nach den Anweisungen in : options SCSI_DELAY=15000 Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-Laufwerk genügend Zeit zu geben, darauf zu antworten. Es ist möglich eine Datei auch direkt auf eine CD zu brennen, ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten. Man sagt auch, Daten werden roh auf die CD gebrannt. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Eine auf diese Weise gefertigte Daten-CD kann nicht in das Dateisystem eingehangen werden. Um auf die Daten einer solchen CD zuzugreifen, müssen die Daten vom rohen Gerät gelesen werden. Beispielsweise würde dieser Befehl eine komprimierte tar-Datei auf dem zweiten CD-Laufwerk in das aktuelle Verzeichnis extrahieren: &prompt.root; tar xzvf /dev/cd1 Um eine Daten-CD in das System einzuhängen, müssen die Daten mit mkisofs geschrieben werden. Kopieren von Audio-<acronym>CD</acronym>s Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. beschreibt, wie eine Audio-CD kopiert und gebrannt wird. Wenn die Version älter als &os; 10.0 ist und ein ATAPI-Gerät verwendet wird, muss zunächst das Modul nach den Anweisungen in geladen werden. Eine Audio-<acronym>CD</acronym> kopieren Der Port oder das Paket sysutils/cdrtools installiert cdda2wav. Mit diesem Kommando können Audiodaten in das aktuelle Verzeichnis extrahiert werden, wobei jede Datei in eine separate WAV-Datei geschrieben wird: &prompt.user; cdda2wav -vall -B -Owav Wenn das System nur über ein CD-Laufwerk verfügt, muss der Gerätename nicht angegeben werden. Lesen Sie die Manualpage von cdda2wav für Anweisungen, wie ein Gerät spezifiziert wird und weitere verfügbare Optionen für dieses Kommando. Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere CD: &prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav Das Argument von gibt das verwendete Gerät an, das wie in ermittelt werden kann. <acronym>DVD</acronym>s benutzen MarcFonvieilleBeigetragen von AndyPolyakovMit Beiträgen von DVD brennen Nach der CD ist die DVD die nächste Generation optischer Speichermedien. Auf einer DVD können mehr Daten als auf einer CD gespeichert werden. DVDs werden als Standardmedium für Videos verwendet. Für beschreibbare DVDs existieren fünf Medienformate: DVD-R: Dies war das erste verfügbare Format. Das Format wurde vom DVD-Forum festgelegt. Die Medien sind nur einmal beschreibbar. DVD-RW: Dies ist die wiederbeschreibbare Version des DVD-R Standards. Eine DVD-RW kann ungefähr 1000 Mal beschrieben werden. DVD-RAM: Dies ist ein wiederbeschreibbares Format, das wie ein Wechsellaufwerk betrachtet werden kann. Allerdings sind die Medien nicht kompatibel zu den meisten DVD-ROM-Laufwerken und DVD-Video-Spielern, da das DVD-RAM-Format nur von wenigen Brennern unterstützt wird. Informationen zur Nutzung von DVD-RAM finden Sie in . DVD+RW: Ist ein wiederbeschreibbares Format, das von der DVD+RW Alliance festgelegt wurde. Eine DVD+RW kann ungefähr 1000 Mal beschrieben werden. DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des DVD+RW Formats. Auf einer einfach beschichteten DVD können 4.700.000.000 Bytes gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind 1024 Bytes). Die physischen Medien sind unabhängig von der Anwendung. Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf irgendein Medium, beispielsweise DVD-R, DVD+R oder DVD-RW geschrieben werden kann. Bevor Sie ein Medium auswählen, müssen Sie sicherstellen, dass der Brenner und der DVD-Spieler mit dem Medium umgehen können. Konfiguration Benutzen Sie &man.growisofs.1;, um DVDs zu beschreiben. Das Kommando ist Bestandteil von sysutils/dvd+rw-tools, und kann mit allen DVD-Medien umgehen. Diese Werkzeuge verwenden das SCSI-Subsystem, um auf die Geräte zuzugreifen. Daher muss ATAPI/CAM-Unterstützung geladen, oder statisch in den Kernel kompiliert werden. Sollte der Brenner jedoch die USB-Schnittstelle nutzen, wird diese Unterstützung nicht benötigt. Weitere Informationen zur Konfiguration von USB-Geräten finden Sie in . Für ATAPI-Geräte müssen ebenfalls DMA-Zugriffe aktiviert werden. Dazu wird die folgende Zeile in /boot/loader.conf eingefügt: hw.ata.atapi_dma="1" Bevor Sie dvd+rw-tools benutzen, lesen Sie bitte die Hardware-Informationen auf der Seite Hardware Compatibility Notes. Für eine grafische Oberfläche sollten Sie sich sysutils/k3b ansehen, das eine benutzerfreundliche Schnittstelle zu &man.growisofs.1; und vielen anderen Werkzeugen bietet. Daten-<acronym>DVD</acronym>s brennen &man.growisofs.1; erstellt mit dem Programm mkisofs das Dateisystem und brennt anschließend die DVD. Vor dem Brennen braucht daher kein Abbild der Daten erstellt zu werden. Wenn Sie von den Daten im Verzeichnis /path/to/data eine DVD+R oder eine DVD-R brennen wollen, benutzen Sie das nachstehende Kommando: &prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data In diesem Beispiel wird an &man.mkisofs.8; durchgereicht und dient zum Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;. Die Option wird für die erste Aufnahme einer Single- oder Multisession benötigt. Ersetzen Sie /dev/cd0 mit dem Gerätenamen des DVD-Gerätes. Die Nutzung von schließt das Medium, weitere Daten können danach nicht mehr angehängt werden. Dies sollte auch eine eine bessere Kompatibilität mit anderen DVD-ROM-Laufwerken bieten. Um ein vorher erstelltes Abbild der Daten zu brennen, beispielsweise imagefile.iso, verwenden Sie: &prompt.root; growisofs -dvd-compat -Z /dev/cd0=imagefile.iso Die Schreibgeschwindigkeit hängt von den verwendeten Medium sowie dem verwendeten Gerät ab und sollte automatisch gesetzt werden. Um die Schreibgeschwindigkeit vorzugeben, verwenden Sie . Beispiele finden Sie in &man.growisofs.1;. Um größere Dateien als 4.38GB zu unterstützen, ist es notwendig ein UDF/ISO-9660 Hybrid-Dateisystem zu erstellen. Dieses Dateisystem muss mit zusätzlichen Parametern bei &man.mkisofs.8; und allen relevanten Programmen, wie beispielsweise &man.growisofs.1;) erzeugt werden. Dies ist nur notwendig, wenn Sie ein ISO-Image erstellen oder direkt auf eine DVD schreiben wollen. DVDs, die in dieser Weise hergestellt worden sind, müssen als UDF-Dateisystem mit &man.mount.udf.8; eingehangen werden. Sie sind nur auf Betriebssystemen, die UDF unterstützen brauchbar, ansonsten sieht es so aus, als ob sie kaputte Dateien enthalten würden. Um diese Art von ISO-Datei zu erstellen: &prompt.user; mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data Um Daten direkt auf eine DVD zu brennen, geben Sie den folgenden Befehl ein: &prompt.root; growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data Wenn ein ISO-Abbild bereits große Dateien enthält, sind keine weiteren Optionen für &man.growisofs.1; notwendig, um das Abbild auf die DVD zu brennen. Achten Sie darauf, eine aktuelle Version von sysutils/cdrtools zu verwenden, welche &man.mkisofs.8; enthält, da ältere Versionen keinen Support für große Dateien enthalten. Falls die neueste Version nicht funktioniert, installieren Sie sysutils/cdrtools-devel und lesen Sie &man.mkisofs.8;. <acronym>DVD</acronym>-Videos brennen DVD DVD-Video Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Da DVD-Video auf eine bestimmte Datei-Hierarchie angewiesen ist, müssen DVDs mit speziellen Programmen wie multimedia/dvdauthor erstellt werden. Ist bereits ein Abbild des Dateisystems eines DVD-Videos vorhanden, kann es auf die gleiche Weise wie jedes andere Abbild gebrannt werden. Wenn dvdauthor verwendet wurde, um die DVD zu erstellen und die Resultate in /path/to/video liegen, kann das folgende Kommando verwendet werden, um ein DVD-Video zu brennen: &prompt.root; growisofs -Z /dev/cd0 -dvd-video /path/to/video wird an &man.mkisofs.8; weitergereicht, um die Datei-Hierarchie für ein DVD-Video zu erstellen. Weiterhin bewirkt diese Option, dass &man.growisofs.1; mit aufgerufen wird. <acronym>DVD+RW</acronym>-Medien benutzen DVD DVD+RW Im Gegensatz zu CD-RW-Medien müssen DVD+RW-Medien erst formatiert werden, bevor sie benutzt werden können. Es wird empfohlen &man.growisofs.1; einzusetzen, da das Programm Medien automatisch formatiert, wenn es erforderlich ist. Es ist jedoch möglich, auch dvd+rw-format zu nutzen, um die DVD+RW zu formatieren: &prompt.root; dvd+rw-format /dev/cd0 Dieser Vorgang muss nur einmal durchgeführt werden. Denken Sie daran, dass nur neue DVD+RWs formatiert werden müssen. Anschließend können DVD+RWs, wie gewohnt gebrannt werden. Wenn Sie auf einer DVD+RW ein neues Dateisystem erstellen wollen, brauchen Sie die DVD+RW vorher nicht zu löschen. Überschreiben Sie einfach das vorige Dateisystem indem Sie eine neue Session anlegen: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/newdata Das DVD+RW-Format erlaubt es, Daten an eine vorherige Aufnahme anzuhängen. Dazu wird eine neue Session mit der schon bestehenden zusammengeführt. Es wird keine Multi-Session geschrieben, sondern &man.growisofs.1; vergrößert das ISO-9660-Dateisystem auf dem Medium. Das folgende Kommando fügt weitere Daten zu einer vorher erstellten DVD+RW hinzu: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wenn Sie eine DVD+RW erweitern, verwenden Sie dieselben &man.mkisofs.8;-Optionen wie beim Erstellen der DVD+RW. Verwenden Sie , um bessere Kompatibilität mit DVD-ROM-Laufwerken zu gewährleisten. Zu einem DVD+RW-Medium können Sie mit dieser Option auch weiterhin Daten hinzufügen. Um das Medium zu löschen, verwenden Sie: &prompt.root; growisofs -Z /dev/cd0=/dev/zero <acronym>DVD-RW</acronym>-Medien benutzen DVD DVD-RW Eine DVD-RW kann mit zwei Methoden beschrieben werden: Sequential-Recording oder Restricted-Overwrite. Voreingestellt ist Sequential-Recording. Eine neue DVD-RW kann direkt beschrieben werden; sie muss nicht vorher formatiert werden. Allerdings muss eine DVD-RW, die mit Sequential-Recording aufgenommen wurde, zuerst gelöscht werden, bevor eine neue Session aufgenommen werden kann. Der folgende Befehl löscht eine DVD-RW im Sequential-Recording-Modus: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Das vollständige Löschen mit dauert mit einem 1x Medium ungefähr eine Stunde. Wenn die DVD-RW im Disk-At-Once-Modus (DAO) aufgenommen wurde, kann sie mit schneller gelöscht werden. Um eine DVD-RW im DAO-Modus zu brennen, benutzen Sie das folgende Kommando: &prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso Die Option sollte nicht erforderlich sein, da &man.growisofs.1; den DAO-Modus automatisch erkennt. Der Restricted-Overwrite-Modus sollte mit jeder DVD-RW verwendet werden, da er flexibler als der voreingestellte Sequential-Recording-Modus ist. Um Daten auf eine DVD-RW im Sequential-Recording-Modus zu schreiben, benutzen Sie dasselbe Kommando wiefür die anderen DVD-Formate: &prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/data Um weitere Daten zu einer Aufnahme hinzuzufügen, benutzen Sie mit &man.growisofs.1;. Werden die Daten im Sequential-Recording-Modus hinzugefügt, wird eine neue Session erstellt. Das Ergebnis ist ein Multi-Session-Medium. Eine DVD-RW im Restricted-Overwrite-Modus muss nicht gelöscht werden, um eine neue Session aufzunehmen. Das Medium kann einfach mit überschrieben werden. Mit kann das ISO-9660-Dateisystem, wie mit einer DVD+RW, vergrößert werden. Die DVD enthält danach eine Session. Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus einzustellen: &prompt.root; dvd+rw-format /dev/cd0 Das folgende Kommando stellt den Modus wieder auf Sequential-Recording zurück: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Multi-Session Nur wenige DVD-ROM-Laufwerke unterstützen Multi-Session-DVDs und lesen meist nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und DVD-RW im Sequential-Recording-Modus unterstützt. Im Modus Restricted-Overwrite gibt nur eine Session. Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende Kommando eine neue Session auf einer DVD+R, DVD-R oder DVD-RW im Sequential-Recording-Modus: &prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata Wird dieses Kommando mit DVD+RW- oder DVD-RW-Medien im Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten der bestehenden Session zusammengeführt. Das Medium enthält danach eine Session. Nutzen Sie diese Methode, um neue Daten zu einer bestehenden Session hinzuzufügen. Für den Anfang und das Ende einer Session wird auf dem Medium zusätzlicher Platz verbraucht. Um den Speicherplatz auf dem Medium optimal auszunutzen, sollten Sie daher Sessions mit vielen Daten hinzufügen. Auf ein DVD+R-Medium passen maximal 154 Sessions, 2000 Sessions auf ein DVD-R-Medium und 127 Sessions auf eine DVD+R Double Layer. Weiterführendes dvd+rw-mediainfo /dev/cd0 zeigt Informationen über eine im Laufwerk liegende DVD an. Weiteres zu dvd+rw-tools finden Sie in &man.growisofs.1;, auf der dvd+rw-tools Web-Seite und in den Archiven der cdwrite-Mailingliste. Wenn Sie einen Problembericht zur Nutzung der dvd+rw-tools erstellen, fügen Sie immer die Ausgabe von dvd+rw-mediainfo hinzu. <acronym>DVD-RAM</acronym> DVD DVD-RAM DVD-RAM-fähige Brenner nutzten die SCSI- oder ATAPI-Schnittstelle. Für ATAPI-Geräte muss der DMA-Modus aktiviert werden, indem die folgende Zeile in /boot/loader.conf hinzugefügt wird: hw.ata.atapi_dma="1" Eine DVD-RAM kann mit einer Wechselplatte verglichen werden. Wie diese, muss auch eine DVD-RAM vor dem ersten Einsatz formatiert werden. In diesem Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem formatiert: &prompt.root; dd if=/dev/zero of=/dev/acd0 bs=2k count=1 &prompt.root; bsdlabel -Bw acd0 &prompt.root; newfs /dev/acd0 Denken Sie dabei daran, dass Sie gegebenenfalls die Gerätedatei (hier acd0) an Ihre Konfiguration anpassen müssen. Nachdem die DVD-RAM formatiert ist, kann sie wie eine normale Festplatte gemountet werden: &prompt.root; mount /dev/acd0 /mnt Danach kann schreibend und lesend auf das DVD-RAM Medium zugegriffen werden. Disketten benutzen Dieser Abschnitt beschreibt die Formatierung von 3,5 Zoll Disketten in &os;. Disketten formatieren Bevor eine Diskette benutzt werden kann, muss sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Benutzen Sie &man.fdformat.1;, um Disketten unter &os; zu formatieren. Achten Sie dabei auf Fehlermeldungen, die schlechte Speichermedien anzeigen. Um eine Diskette zu formatieren, legen Sie eine 3,5 Zoll Diskette in das erste Diskettenlaufwerk ein und führen das folgende Kommando aus: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden, um die Größe und Geometrie der Diskette zu erkennen. Eine Liste der unterstützten Geometrien finden Sie in /etc/disktab. Erstellen Sie nun das Label mit &man.bsdlabel.8;: &prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440 Auf der Diskette kann nun ein Dateisystem erstellt werden (high-level Formatierung). Das Dateisystem der Diskette kann entweder UFS oder FAT sein, wobei FAT für Disketten in der Regel die bessere Wahl ist. Um die Diskette mit FAT zu formatieren, geben Sie folgendes Kommando ein: &prompt.root; /sbin/newfs_msdos /dev/fd0 Die Diskette kann nun benutzt werden. Um die Diskette zu verwenden, kann sie mit &man.mount.msdosfs.8; eingehängt werden. Man kann auch emulators/mtools aus der Ports-Sammlung installieren, um mit der Diskette zu arbeiten. Datensicherung Die Planung und Umsetzung einer Backup-Strategie ist unerlässlich, um Daten in bestimmten Situationen wiederherstellen zu können, zum Beispiel bei Plattendefekten, versehentlichem Löschen von Dateien, willkürlicher Korrumpierung von Dateien oder der vollständigen Zerstörung des Systems und der Backups, die am gleichen Ort aufbewahrt werden. Die Art und der Zeitplan des Backups kann variieren, abhängig von der Wichtigkeit der Daten, der benötigten Granularität zur Wiederherstellung von Dateien und der Dauer einer akzeptablen Ausfallzeit. Zu den möglichen Backup-Strategien gehören unter anderem: Die Archivierung des kompletten Systems auf externen Datenträgern. Dieser Ansatz schützt zwar vor allen oben aufgeführten Problemen, ist aber zeitaufwändig und unbequem bei der Wiederherstellung, insbesondere für nicht privilegierte Benutzer. Dateisystem-Snapshots sind nützlich bei der Wiederherstellung von gelöschten Dateien, bzw. früheren Versionen von Dateien. Kopien ganzer Dateisysteme oder Festplatten, die mit einem anderen System im Netzwerk mittels net/rsync synchronisiert werden. Hardware oder Software RAID, was im Falle von Plattendefekten die Ausfallzeit minimiert oder vermeidet. Üblicherweise wird eine Mischung aus verschiedenen Strategien verwendet. Es kann zum Beispiel ein Sicherungsplan erstellt und automatisiert werden, um eine wöchentliche, vollständige Systemsicherung, ergänzt mit stündlichen ZFS-Snapshots, zu erstellen. Darüber hinaus könnte man eine manuelle Sicherung einzelner Verzeichnisse oder Dateien machen, bevor diese bearbeitet oder gelöscht werden. Dieser Abschnitt beschreibt einige Programme, die zur Erstellung und Verwaltung von Sicherungen unter &os; verwendet werden können. Sicherung von Dateisystemen Backup-Software dump / restore dump restore Die traditionellen &unix;-Programme zum Sichern und Wiederherstellen von Dateisystemen sind &man.dump.8; und &man.restore.8;. Diese Programme arbeiten auf der Block-Ebene der Festplatte, also unterhalb des Abstraktionslevels von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. Im Gegensatz zu anderen Backup-Programmen sichert dump ein ganzes Dateisystem und nicht nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst. Anstatt Dateien oder Verzeichnisse zu schreiben, schreibt dump die Blöcke, aus denen die Dateien und Verzeichnisse bestehen. Wird dump benutzt, um das Root-Verzeichnis zu sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind. Wenn restore zum Extrahieren von Daten verwendet wird, werden temporäre Dateien standardmäßig in /tmp abgelegt. Wenn Sie von einer Platte mit einem kleinen /tmp-Verzeichnis zurücksichern, setzen Sie die Umgebungsvariable TMPDIR auf ein Verzeichnis mit mehr freiem Speicherplatz, damit die Wiederherstellung gelingt. Beachten Sie bei der Verwendung von dump, dass es einige Eigenarten aus den frühen Tagen der Version 6 von AT&T &unix; (ca. 1975) beibehalten hat. Die Standardparameter gehen davon aus, dass auf einem 9-Spur-Band gesichert wird, und nicht auf ein anderes Medium oder auf Sicherungsbänder mit hoher Dichte. Diese Standardwerte müssen auf der Kommandozeile überschrieben werden. .rhosts Es ist möglich, das Dateisystem über das Netzwerk auf einem anderen Rechner zu sichern, oder auf einem Bandlaufwerk eines anderen Rechners. Obwohl die Programme &man.rdump.8; und &man.rrestore.8; für diese Zwecke benutzt werden können, gelten sie als nicht sicher. Verwenden Sie stattdessen dump und restore in einer sichereren Weise über eine SSH-Verbindung. In diesem Beispiel wird eine vollständige, komprimierte Sicherung von /usr erstellt, das anschließend an einen bestimmten Host über eine SSH-Verbindung gesendet wird. <command>dump</command> mit <application>ssh</application> benutzen &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz In diesem Beispiel wird RSH gesetzt, um über eine SSH-Verbindung eine Sicherung auf ein Bandlaufwerk eines entfernten Systems zu schreiben: <command>dump</command> über <application>ssh</application> mit gesetzter <envar>RSH</envar> benutzen &prompt.root; env RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr Sicherung von Verzeichnissen Backup-Software tar Einige integrierte Werkzeuge stehen zur Sicherung und Wiederherstellung von bestimmten Dateien und Verzeichnissen bei Bedarf zur Verfügung. Wenn es um die Sicherung von Dateien in einem Verzeichnis geht, ist &man.tar.1; eine gute Wahl. Dieses Werkzeug stammt aus Version 6 von AT&T &unix; und erwartet standardmäßig eine rekursive Sicherung auf ein lokales Band. Es können jedoch Optionen angegeben werden, um den Namen einer Sicherungsdatei zu bestimmen. tar In diesem Beispiel wird eine komprimierte Sicherung des aktuellen Verzeichnisses nach /tmp/mybackup.tgz gespeichert. Achten Sie bei der Sicherungsdatei darauf, dass sie nicht in dem Verzeichnis gepeichert wird, welches gesichert werden soll. Das aktuelle Verzeichnis mit <command>tar</command> sichern &prompt.root; tar czvf /tmp/mybackup.tgz . Um eine komplette Sicherung wiederherzustellen, wechseln Sie mit cd in das Verzeichnis, in dem Sie die Daten wiederherstellen möchten und geben Sie den Namen der Sicherungsdatei an. Beachten Sie, dass dabei alle Dateien in dem Verzeichnis überschrieben werden. Im Zweifel sichern Sie besser in einem temporären Verzeichnis, oder geben Sie den Verzeichnisnamen bei der Wiederherstellung an. Wiederherstellung mit <command>tar</command> in das aktuelle Verzeichnis &prompt.root; tar xzvf /tmp/mybackup.tgz Es gibt dutzende Optionen, die in &man.tar.1; beschrieben werden. Das Programm unterstützt auch die Verwendung von Ausschlußmustern, um bestimmte Dateien von der Sicherung oder Wiederherstellung von Verzeichnissen auszuschließen. Backup-Software cpio Um bestimmte, aufgelistete Dateien und Verzeichnisse zu sichern, ist &man.cpio.1; eine gute Wahl. Im Gegensatz zu tar weiß cpio nicht wie ein Verzeichnisbaum durchlaufen wird. Daher ist es auf eine Liste von zu sichernden Dateien angewiesen. So kann beispielsweise eine Liste von Dateien mit ls oder find erzeugt werden. Dieses Beispiel erstellt eine rekursive Liste des aktuellen Verzeichnisses, die dann über eine Pipe an cpio übergeben wird, um eine Sicherung namens /tmp/mybackup.cpio zu erstellen. Rekursive Sicherung des aktuellen Verzeichnisses mit <command>ls</command> und <command>cpio</command> &prompt.root; ls -R | cpio -ovF /tmp/mybackup.cpio Backup-Software pax pax POSIX IEEE &man.pax.1; ist ein Programm, welches versucht die Funktionen von tar und cpio zu kombinieren. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat &posix; pax geschaffen, welches versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Für die vorangegangenen Beispiele wäre ein äquivalenter Aufruf von pax: Das aktuelle Verzeichnis mit <command>pax</command> sichern &prompt.root; pax -wf /tmp/mybackup.pax . Bandmedien benutzen Bandmedien Obwohl sich Bandmedien mit der Zeit weiterentwickelt haben, verwenden moderne Backup-Systeme in der Regel Offsite-Backups in Verbindung mit lokalen Wechseldatenträgern. &os; unterstützt alle SCSI-Bandlaufwerke, wie etwa LTO und DAT. Zusätzlich gibt es begrenzte Unterstützung für SATA- und USB-Bandlaufwerke. Für SCSI-Bandlaufwerke nutzt &os; den &man.sa.4; Treiber, der die Schnittstellen /dev/sa0, /dev/nsa0 und /dev/esa0 bereitstellt. Der Name des physikalischen Geräts ist /dev/sa0. Wird /dev/nsa0 benutzt, dann wird die Backup-Anwendung nach dem Schreibvorgang das Band nicht zurückspulen, was es ermöglicht, mehr als eine Datei auf das Band zu schreiben. Die Verwendung von /dev/esa0 wirft das Band aus, nachdem das Gerät geschlossen wurde. &os; nutzt mt für die Steuerung der Operationen des Bandlaufwerks, wie die Suche nach Dateien auf einem Band, oder um Kontrollmarkierungen auf ein Band zu schreiben. Beispielsweise können die ersten drei Dateien auf einem Band erhalten bleiben, indem sie übersprungen werden, bevor eine neue Datei auf das Band geschrieben wird &prompt.root; mt -f /dev/nsa0 fsf 3 Dieses Werkzeug unterstützt viele Operationen. Weitere Einzelheiten finden Sie in &man.mt.1;. Um eine Datei mit tar auf ein Band zu schreiben, geben Sie den Namen des Bandlaufwerks und den Dateinamen an: &prompt.root; tar cvf /dev/sa0 file Wiederherstellung von Dateien aus dem tar-Archiv von Band in das aktuelle Verzeichnis: &prompt.root; tar xvf /dev/sa0 Benutzen Sie dump, um ein UFSDateisystem zu sichern. Dieses Beispiel sichert /usr, ohne danach das Band zurückzuspulen: &prompt.root; dump -0aL -b64 -f /dev/nsa0 /usr Interaktive Wiederherstellung von Dateien aus einer &man.dump.8;-Datei von Band in das aktuelle Verzeichnis: &prompt.root; restore -i -f /dev/nsa0 Backup-Software von Drittanbietern Backup-Software Die &os; Ports-Sammlung enthält viele Programme von Drittanbietern, die verwendet werden können um die zeitliche Erstellung von Sicherungen zu planen, zu vereinfachen und bequemer zu machen. Viele dieser Programme basieren auf dem Client-Server-Modell und können benutzt werden, um die Sicherung von einzelnen Systemen oder allen Rechnern in einem Netzwerk zu automatisieren. Zu den bekannten Programmen gehören Amanda, Bacula, rsync und duplicity. Die Wiederherstellung in einem Notfall Zusätzlich zu den regelmäßigen Sicherungen empfiehlt es sich, die folgenden Schritte im Rahmen eines Notfallplans durchzuführen. bsdlabel Erstellen Sie einen Ausdruck der Ausgabe der folgenden Kommandos: gpart show more /etc/fstab dmesg Live-CD Bewahren Sie diesen Ausdruck und eine Kopie des Installationsmediums an einem sicheren Ort auf. Im Falle einer Wiederherstellung im Notfall, starten Sie von dem Installationsmedium und wählen Sie Live CD, um eine Rettungs-Shell zu starten. Dieser Rettungmodus kann verwendet werden, um den aktuellen Stand des Systems anzuzeigen, und wenn nötig, Festplatten zu formatieren und Daten aus den Sicherungen wiederherzustellen. Das Installationsmedium für &os;/&arch.i386; &rel2.current;-RELEASE enthält keine Rettungs-Shell. Laden Sie für diese Version ein Abbild der Livefs CD von ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-livefs.iso. Als nächstes testen Sie die Rettungs-Shell und die Sicherungen. Dokumentieren Sie diesen Ablauf. Bewahren Sie diese Notizen zusammen mit den Medien, den Ausdrucken und den Sicherungen auf. Diese Notizen können Ihnen im Notfall helfen eine versehentliche Zerstörung der Sicherungen zu verhindern, während Sie unter Stress eine Wiederherstellung durchführen. Als zusätzliche Sicherheitsvorkehrung kann jeweils die letzte Sicherung an einem entfernten Standort aufbewahrt werden. Dieser Standort sollte räumlich von den Computern und Festplatten durch eine erhebliche Entfernung getrennt sein. Speicherbasierte Laufwerke MarcFonvieilleVerbessert und neu strukturiert von Neben physikalischen Laufwerken unterstützt &os; auch speicherbasierte Laufwerke. Eine mögliche Verwendung für ein speicherbarsiertes Laufwerk ist der Zugriff auf ein ISO-Dateisystem, jedoch ohne vorher die Daten auf eine CD oder DVD zu brennen und dann das Medium einzuhängen. &os; verwendet den &man.md.4; Treiber um Unterstützung für speicherbasierte Laufwerke bereitzustellen. Dieser Treiber ist bereits im GENERIC-Kernel enthalten. Wenn Sie eine angepasste Kernelkonfigurationsdatei verwenden, stellen Sie sicher, dass folgende Zeile enthalten ist: device md Ein- und Aushängen von bestehenden Abbildern Laufwerke speicherbasierte Um ein bestehendes Abbild eines Dateisystems einzuhängen, verwenden Sie mdconfig zusammen mit dem Namen der ISO-Datei und einer freien Gerätenummer. Benutzen Sie dann diese Gerätenummer, um das Abbild in einen existierenden Mountpunkt einzuhängen. Sobald dies erledigt ist, erscheinen die Dateien des Abbildes unterhalb des Mountpunktes. Dieses Beispiel wird diskimage.iso an das speicherbasierte Laufwerk /dev/md0 binden und dann in /mnt einhängen: &prompt.root; mdconfig -f diskimage.iso -u 0 &prompt.root; mount /dev/md0 /mnt Wenn keine Gerätenummer mit angegeben ist, wird von &man.md.4; automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen zu diesem Kommando und dessen Optionen finden Sie in &man.mdconfig.8;. Laufwerke speicherbasiertes Laufwerk aushängen Wenn ein speicherbasiertes Laufwerk nicht mehr in Gebrauch ist, sollten seine belegten Ressourcen wieder an das System zurückgegeben werden. Hängen Sie zuerst das Dateisystem aus, dann verwenden Sie mdconfig, um die Platte vom System zu trennen und die Ressourcen freizugeben. &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 0 Um festzustellen, ob noch irgendwelche speicherbasierten Laufwerke am System angeschlossen sind, benutzen Sie mdconfig -l. Ein datei- oder speicherbasiertes Laufwerk erzeugen Laufwerke speicherbasierte &os; unterstützt auch speicherbasierte Laufwerke, bei denen der verwendete Speicher entweder einer Festplatte, oder einem Bereich im Arbeitsspeicher zugewiesen wird. Die erste Methode ist gemeinhin als dateibasiertes Dateisystem, die zweite als speicherbasiertes Dateisystem bekannt. Beide Typen können mit mdconfig erzeugt werden. Um ein speicherbasiertes Dateisystem zu erstellen, geben Sie den Typ swap sowie die gewünschte Größe des Laufwerks an. Dieses Beispiel erzeugt ein 5 MB großes Laufwerk an der Gerätenummer 1. Das Laufwerk wird mit dem UFS-Dateisystem formatiert, bevor es eingehängt wird: &prompt.root; mdconfig -a -t swap -s 5m -u 1 &prompt.root; newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes. with soft updates super-block backups (for fsck -b #) at: 160, 2752, 5344, 7936 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt Um ein dateibasiertes Dateisystem zu erstellen, muss zunächst ein Stück Speicher auf der Festplatte reserviert werden. Dieses Beispiel erzeugt eine 5 KB große Datei namens newimage: &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out Als nächstes muss diese Datei an ein speicherbasiertes Laufwerk gebunden, gelabelt und mit dem UFS-Dateisystem formatiert werden. Danach können Sie das Laufwerk einhängen und die Größe überprüfen: &prompt.root; mdconfig -f newimage -u 0 &prompt.root; bsdlabel -w md0 auto &prompt.root; newfs md0a /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. super-block backups (for fsck -b #) at: 160, 2720, 5280, 7840 &prompt.root; mount /dev/md0a /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt Es benötigt mehrere Befehle, um ein datei- oder speicherbasiertes Dateisystem mit mdconfig zu erstellen. &os; enthält auch mdmfs, das ein speicherbasiertes Laufwerk automatisch konfigurieren, formatieren und einhängen kann. Nachdem beispielsweise newimage mit dd erstellt wurde, hätte auch der folgende Befehl benutzt werden können, anstelle der oben verwendeten Kommandos bsdlabel, newfs und mount: &prompt.root; mdmfs -F newimage -s 5m md0 /mnt Um hingegen ein speicherbasiertes Laufwerk mit mdmfs zu erstellen, wird dieser Befehl benutzt: &prompt.root; mdmfs -s 5m md1 /mnt Wenn die Gerätenummer nicht angegeben wird, wählt mdmfs automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten über mdmfs finden Sie in &man.mdmfs.8;. Schnappschüsse von Dateisystemen TomRhodesBeigetragen von Schnappschüsse von Dateisystemen Zusammen mit Soft Updates bietet &os; eine weitere Funktion: Schnappschüsse von Dateisystemen. UFS-Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn ein Schnappschuss nicht mehr benötigt wird, kann er mit &man.rm.1; gelöscht werden. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann. Das unveränderliche -Dateiflag wird nach der Erstellung des Snaphshots von &man.mksnap.ffs.8; gesetzt. Durch die Verwendung von &man.unlink.1; ist es allerdings möglich, einen Schnappschuss zu löschen. Schnappschüsse werden mit &man.mount.8; erstellt. Das folgende Kommando legt einen Schnappschuss von /var in /var/snapshot/snap ab: &prompt.root; mount -u -o snapshot /var/snapshot/snap /var Alternativ kann der Schnappschuss auch mit &man.mksnap.ffs.8; erstellt werden. &prompt.root; mksnap_ffs /var /var/snapshot/snap Um Schnappschüsse auf einem Dateisystem, beispielsweise /var zu finden, kann man &man.find.1; verwenden: &prompt.root; find /var -flags snapshot Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen: Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine CD oder ein Band schreiben. Die Intigrität des Schnappschusses kann mit &man.fsck.8; geprüft werden. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte &man.fsck.8; immer erfolgreich durchlaufen. Sie können den Schnappschuss mit &man.dump.8; sichern. Sie erhalten dann eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter von &man.dump.8; erstellt für die Sicherung einen Schnappschuss und entfernt diesen am Ende der Sicherung wieder. Sie können einen Schnappschuss in den Verzeichnisbaum einhängen und sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an dem der Schnappschuss erstellt wurde. Der folgende Befehl hängt den Schnappschuss /var/snapshot/snap ein: &prompt.root; mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4 &prompt.root; mount -r /dev/md4 /mnt Der eingefrorene Stand des /var-Dateisystems ist nun unterhalb von /mnt verfügbar. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des Schnappschusses. Der Schnappschuss kann wie folgt abgehängt werden: &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 4 Weitere Informationen über Soft Updates und Schnappschüsse von Dateisystemen sowie technische Artikel finden Sie auf der Webseite von Marshall Kirk McKusick. Disk Quotas Accounting Plattenplatz Disk Quotas Disk Quotas erlauben dem Administrator, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Dadurch wird verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt. Dieser Abschnitt beschreibt die Konfiguration von Disk Quotas für UFS-Dateisysteme. Lesen Sie , wenn Sie Disk Quotas auf einem ZFS-Dateisystem einrichten möchten. Disk Quotas aktivieren Prüfen Sie zunächst, ob der &os;-Kernel Disk Quotas unterstützt: &prompt.user; sysctl kern.features.ufs_quota kern.features.ufs_quota: 1 In diesem Beispiel zeigt die 1 an, das Quotas unterstützt werden. Falls 0 ausgegeben wird, fügen Sie folgende Zeile in die Kernelkonfigurationsdatei ein, und folgen Sie den Anweisungen in um den Kernel zu aktualisieren: options QUOTA Als nächstes aktivieren Sie Disk Quotas in /etc/rc.conf: quota_enable="YES" Disk Quotas überprüfen Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit &man.quotacheck.8; überprüft. Dieses Programm stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es, diesen Schritt zu überspringen: check_quotas="NO" Zuletzt muss noch /etc/fstab bearbeitet werden, um die Plattenquotas auf Dateisystemebene zu aktivieren. Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem im Feld Optionen von /etc/fstab an. Zum Beispiel: /dev/da1s2g /home ufs rw,userquota 1 2 Um Quotas für Gruppen einzurichten, verwenden Sie . Um Quotas für Benutzer und Gruppen einzurichten, trennen Sie die Optionen durch Kommata: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 Quota-Dateien werden standardmäßig im Rootverzeichnis des Dateisystems unter quota.user und quota.group abgelegt. Weitere Informationen finden Sie in &man.fstab.5;. Es wird nicht empfohlen, Quota-Dateien an anderen Stellen zu speichern. Sobald die Konfiguration abgeschlossen ist, starten Sie das System neu. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, um die Quota-Dateien für alle in /etc/rc.conf definierten Quotas anzulegen. Normalerweise brauchen die Kommandos &man.quotacheck.8;, &man.quotaon.8; oder &man.quotaoff.8; nicht händisch aufgerufen werden, obwohl man die entsprechenden Seiten im Manual lesen sollte, um sich mit ihnen vertraut zu machen. Setzen von Quota-Limits Disk Quotas Limits Stellen Sie sicher, dass Quotas auch tatsächlich aktiviert sind: &prompt.root; quota -v Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollte eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits zu sehen sein. Mit edquota können nun Quota-Limits zugewiesen werden. Mehrere Möglichkeiten stehen zur Verfügung, um Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas), der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes Limit wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits. Hardlimit Ein Hardlimit kann nicht überschritten werden. Hat der Benutzer einmal ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490 Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen. Softlimit Softlimits können für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt. Im folgenden Beispiel wird das Quota des Benutzerkonto test bearbeitet. Wenn edquota aufgerufen wird, wird der in EDITOR definierte Editor aufgerufen, um die Quota-Limts zu konfigurieren. Der Standard-Editor ist vi. &prompt.root; edquota -u test Quotas for user test: /usr: kbytes in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) Für jedes Dateisystem, auf dem Quotas aktiv sind, sind zwei Zeilen zu sehen. Eine repräsentiert die Block-Quotas und die andere die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit von /usr auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile wie folgt: /usr: kbytes in use: 65, limits (soft = 500, hard = 600) Die neuen Limits sind wirksam, sobald der Editor verlassen wird. Manchmal ist es wünschenswert, die Limits für eine Reihe von Benutzern zu setzen. Dazu weisen Sie zunächst einem Benutzer das gewünschte Quota-Limit zu. Anschließend benutzen Sie , um das Quota auf einen bestimmten Bereich von Benutzer-IDs (UID) zu duplizieren. Der folgende Befehl dupliziert die Quota-Limits auf die UIDs 10000 bis 19999: &prompt.root; edquota -p test 10000-19999 Weitere Informationen finden Sie in &man.edquota.8;. Überprüfen von Quota-Limits und Plattennutzung Disk Quotas überprüfen Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann &man.quota.1; benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit &man.repquota.8; erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind. In der Ausgabe von &man.quota.1; werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Benutzen Sie um solche Dateisysteme ebenfalls anzuzeigen. Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt: Disk quotas for user test (uid 1002): Filesystem usage quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 grace period Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat. Quotas über NFS NFS Quotas werden von dem Quota-Subsystem auf dem NFS-Server erzwungen. Der &man.rpc.rquotad.8; Daemon stellt quota die Quota Informationen auf dem NFS-Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können. Sie aktivieren rpc.rquotad auf dem NFS-Server, indem Sie das Zeichen # auf folgender Zeile in /etc/inetd.conf entfernen: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Anschließend starten Sie inetd neu: &prompt.root; service inetd restart Partitionen verschlüsseln LuckyGreenBeigetragen von
shamrock@cypherpunks.to
Partitionen verschlüsseln &os; bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe ) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte in ein anderes System einbauen und dort die Daten analysieren. Die für &os; verfügbaren kryptografischen Subsysteme, GEOM Based Disk Encryption (gbde) und geli sind in der Lage, Daten auf Dateisystemen auch vor hoch motivierten Angreifern zu schützen, die über erhebliche Mittel verfügen. Dieser Schutz ist unabhängig von der Art und Weise, durch die ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu anderen Verschlüsselungsmethoden, bei denen einzelne Dateien verschlüsselt werden, verschlüsseln gbde und geli transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert. Dieses Kapitel zeigt, wie ein verschlüsseltes Dateisystem unter &os; erstellt wird. Zunächst wird der Ablauf für gbde beschrieben und anschließend das gleiche Beispiel für geli. Plattenverschlüsselung mit <application>gbde</application> Das Ziel von &man.gbde.4; ist es, einen Angreifer vor eine große Herausforderung zu stellen, um an die Daten einer Festplatte zu gelangen. Falls jedoch der Rechner kompromittiert wurde, während er im Betrieb war und das Speichergerät aktiv verbunden war, oder wenn der Angreifer eine gültige Passphrase kennt, bietet dieses System keinen Schutz für die Daten der Festplatte. Daher ist es wichtig, für die physische Sicherheit zu sorgen, während das System im Betrieb ist. Außerdem muss die Passphrase für den Verschlüsselungsmechanismus geschützt werden. &man.gbde.4; besitzt einige Funktionen um die Daten, die in einem Sektor gespeichert sind, zu schützen. Es benutzt 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem anderen AES-Schlüssel verschlüsselt. Weitere Informationen zum kryptographischen Design und wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in &man.gbde.4;. &os; enthält ein Kernelmodul für gbde, das wie folgt geladen werden kann: &prompt.root; kldload geom_bde Wenn Sie einen angepassten Kernel verwenden, stellen Sie sicher, dass folgende Zeile in der Kernelkonfigurationsdatei enthalten ist: options GEOM_BDE Das folgende Beispiel beschreibt, wie eine Partition auf einer neuen Festplatte verschlüsselt wird. Die Partition wird in /private eingehangen. Eine Partition mit <application>gbde</application> verschlüsseln Installieren der Festplatte Installieren Sie die Festplatte wie in beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. Die Gerätedateien /dev/ad0s1* sind Standard-Partitionen des &os;-Systems. &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 Verzeichnis für gbde-Lock-Dateien anlegen &prompt.root; mkdir /etc/gbde Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei. Vorbereiten der gbde-Partition Eine von gbde benutzte Partition muss einmalig initialisiert werden, bevor sie benutzt werden kann. Das Programm öffnet eine Vorlage im Standard-Editor, um verschiedene Optionen zu konfigurieren. Setzen Sie sector_size auf 2048, wenn Sie UFS benutzen: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock# $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...] Sobald die Änderungen gespeichert werden, wird der Benutzer zweimal aufgefordert, die zum Schutz der Daten verwendete Passphrase einzugeben. Die Passphrase muss beide Mal gleich eingegeben werden. Die Sicherheit der Daten hängt allein von der Qualität der gewählten Passphrase ab. Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite http://world.std.com/~reinhold/diceware.html beschrieben. Bei der Initialisierung wird eine Lock-Datei für die gbde-Partition erstellt. In diesem Beispiel /etc/gbde/ad4s1c.lock. Lock-Dateien müssen die Dateiendung .lock aufweisen, damit sie von /etc/rc.d/gbde, dem Startskript von gbde, erkannt werden. Lock-Dateien müssen immer zusammen mit den verschlüsselten Dateisystemen gesichert werden. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Einbinden der verschlüsselten Partition in den Kernel &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock Dieses Kommando fragt die Passphrase ab, die bei der Initialisierung der verschlüsselten Partition eingegeben wurde. Das neue verschlüsselte Gerät erscheint danach in /dev als /dev/device_name.bde: &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde Dateisystem auf dem verschlüsselten Gerät anlegen Nachdem die verschlüsselte Partition im Kernel eingebunden ist, kann ein Dateisystem erstellt werden. Dieses Beispiel erstellt ein UFS-Dateisystem mit aktivierten Soft Updates. Achten Sie darauf, die Partition mit der Erweiterung *.bde zu benutzen: &prompt.root; newfs -U -O2 /dev/ad4s1c.bde Einhängen der verschlüsselten Partition Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an. Hängen Sie anschließend das Dateisystem ein: &prompt.root; mkdir /private &prompt.root; mount /dev/ad4s1c.bde /private Überprüfen des verschlüsselten Dateisystems Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können: &prompt.user; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Für die dazu nötigen Schritte fügen Sie folgende Zeilen in /etc/rc.conf hinzu: gbde_autoattach_all="YES" gbde_devices="ad4s1c" gbde_lockdir="/etc/gbde" Durch diese Argumente muss beim Systemstart auf der Konsole die Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Weitere Bootoptionen von gbde finden Sie in &man.rc.conf.5;. sysinstall ist nicht kompatibel mit gbde-verschlüsselten Geräten. Bevor sysinstall gestartet wird, müssen alle *.bde Geräte vom Kernel getrennt werden, da sonst der Kernel bei der ersten Suche nach Geräten abstürzt. Um das verschlüsselte Gerät aus dem Beispiel zu trennen, benutzen Sie das folgende Kommando: &prompt.root; gbde detach /dev/ad4s1c Plattenverschlüsselung mit <command>geli</command> DanielGerzoBeigetragen von Mit geli steht eine alternative kryptografische GEOM-Klasse zur Verfügung. Dieses Werkzeug unterstützt unterschiedliche Fähigkeiten und verfolgt einen anderen Ansatz für die Verschlüsselung. geli bietet die folgenden Funktionen: Die Nutzung des &man.crypto.9;-Frameworks. Wenn das System über kryptografische Hardware verfügt, wird diese von geli automatisch verwendet. Die Unterstützung verschiedener kryptografischer Algorithmen, wie AES, Blowfish, und 3DES. Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden. Erlaubt den Einsatz von zwei voneinander unabhängigen Schlüsseln. Es ist durch einfache Sektor-zu-Sektor-Verschlüsselung sehr schnell. Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen. geli erlaubt es, Platten mit einem zufälligen Einmal-Schlüssel einzusetzen, was für Swap-Partitionen und temporäre Dateisysteme interessant ist. Weitere Funktionen und Anwendungsbeispiele finden Sie in &man.geli.8;. Das folgende Beispiel beschreibt, wie eine Schlüsseldatei erzeugt wird, die als Teil des Master-Keys für den Verschlüsselungs-Provider verwendet wird, der unter /private in den Verzeichnisbaum eingehängt wird. Die Schlüsseldatei liefert zufällige Daten, die für die Verschlüsselung des Master-Keys benutzt werden. Zusätzlich wird der Master-Key durch eine Passphrase geschützt. Die Sektorgröße des Providers beträgt 4 KB. Das Beispiel beschreibt, wie Sie einen geli-Provider aktivieren, ein vom ihm verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten und wie Sie es schließlich wieder unmounten und den Provider deaktivieren. Eine Partition mit <command>geli</command> verschlüsseln Laden der <command>geli</command>-Unterstützung Die Unterstützung für geli wird über ein ladbares Kernelmodul zur Verfügung gestellt. Damit das Modul automatisch beim Booten geladen wird, fügen Sie folgende Zeile in /boot/loader.conf ein: geom_eli_load="YES" Um das Modul direkt zu laden: &prompt.root; kldload geom_eli Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher, dass diese Zeilen enthalten sind: options GEOM_ELI device crypto Erzeugen des Master-Keys Die folgenden Befehle erzeugen einen Master-Key (/root/da2.key), der durch eine Passphrase geschützt ist. Die Datenquelle für die Schlüsseldatei ist /dev/random. Um eine bessere Leistung zu erzielen beträgt die Sektorgröße des Providers (/dev/da2.eli) 4 KB: &prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1 &prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2 Enter new passphrase: Reenter new passphrase: Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden. Wird für die Schlüsseldatei - angegeben, wird dafür die Standardeingabe verwendet. Das folgende Kommando erzeugt beispielsweise drei Schlüsseldateien: &prompt.root; cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2 Aktivieren des Providers mit dem erzeugten Schlüssel Um den Provider zu aktivieren, geben Sie die Schlüsseldatei, den Namen des Laufwerks und die Passphrase an: &prompt.root; geli attach -k /root/da2.key /dev/da2 Enter passphrase: Dadurch wird ein neues Gerät mit der Erweiterung .eli angelegt: &prompt.root; ls /dev/da2* /dev/da2 /dev/da2.eli Das neue Dateisystem erzeugen Als nächstes muss das Gerät mit dem UFS-Dateisystem formatiert und an einen vorhandenen Mountpunkt eingehängt werden: &prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m &prompt.root; newfs /dev/da2.eli &prompt.root; mount /dev/da2.eli /private Das verschlüsselte Dateisystem sollte jetzt erkannt und benutzt werden können: &prompt.root; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private Wenn Sie nicht mehr mit dem verschlüsselten Dateisystem arbeiten und die unter /private eingehängte Partition daher nicht mehr benötigen, sollten Sie diese unmounten und den geli-Verschlüsselungs-Provider wieder deaktivieren: &prompt.root; umount /private &prompt.root; geli detach da2.eli &os; verfügt über ein rc.d-Skript, das dass Einhängen von verschlüsselten Geräten beim Booten deutlich vereinfacht. Für dieses Beispiel, fügen Sie folgende Zeilen in /etc/rc.conf hinzu: geli_devices="da2" geli_da2_flags="-k /root/da2.key" Dies konfiguriert /dev/da2 als geli-Provider mit dem Master-Key /root/da2.key. Das System wird den Provider automatisch deaktivieren, bevor es heruntergefahren wird. Während des Startvorgangs fordert das Skript die Passphrase an, bevor der Provider aktiviert wird. Vor und nach der Eingabeaufforderung für die Passphrase werden noch weitere Kernelmeldungen angezeigt. Achten Sie sorgfältig auf die Eingabeaufforderung zwischen den anderen Meldungen, falls es zu Problemen beim Startvorgang kommt. Sobald die richtige Passphrase eingegeben wurde, wird der Provider aktiviert. Anschließend werden die Dateisysteme gemäß /etc/fstab eingehängt. Lesen Sie wenn Sie wissen möchten, wie Sie ein Dateisystem konfigurieren, sodass es beim booten automatisch gestartet wird.
Den Auslagerungsspeicher verschlüsseln ChristianBrüfferGeschrieben von Auslagerungsspeicher verschlüsseln Wie die Verschlüsselung von Partitionen, wird auch der Auslagerungsspeicher verschlüsselt, um sensible Informationen zu schützen. Stellen Sie sich eine Anwendung vor, die mit Passwörtern umgeht. Solange sich diese Passwörter im Arbeitsspeicher befinden, werden sie nicht auf die Festplatte geschrieben und nach einem Neustart gelöscht. Falls &os; jedoch damit beginnt Speicher auszulagern, um Platz für andere Anwendungen zu schaffen, können die Passwörter unverschlüsselt auf die Festplatte geschrieben werden. Die Verschlüsselung des Auslagerungsspeichers kann in solchen Situationen Abhilfe schaffen. Dieser Abschnitt zeigt die Konfiguration eines verschlüsselten Auslagerungsspeichers mittels &man.gbde.8; oder &man.geli.8;. In den Beispielen repräsentiert /dev/ada0s1b die Swap-Partition. Konfiguration eines verschlüsselten Auslagerungsspeichers Swap-Partitionen werden standardmäßig nicht verschlüsselt. Sie sollten daher alle sensiblen Daten im Auslagerungsspeicher löschen, bevor Sie fortfahren. Führen Sie folgenden Befehl aus, um die Swap-Partition mit Zufallsdaten zu überschreiben: &prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1m Um den Auslagerungsspeicher mit &man.gbde.8; zu verschlüsseln, fügen Sie in /etc/fstab das Suffix .bde an den Gerätenamen der Swap-Partition hinzu: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.bde none swap sw 0 0 Wenn Sie &man.geli.8; benutzen, verwenden Sie stattdessen das Suffix .eli, um den Auslagerungsspeicher zu verschlüsseln: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.eli none swap sw 0 0 In der Voreinstellung verschlüsselt &man.geli.8; mit dem AES-Algorithmus und einer Schlüssellänge von 128 Bit. Diese Voreinstellungen können mittels geli_swap_flags in /etc/rc.conf angepasst werden. Die folgende Zeile weist das rc.d-Skript encswap an, &man.geli.8;-Swap-Partitionen mit dem Blowfish-Algorithmus und einer Schlüssellänge von 128 Bit zu verschlüsseln. Zusätzlich wird die Sektorgröße auf 4 Kilobyte gesetzt und detach on last close aktiviert: geli_swap_flags="-e blowfish -l 128 -s 4096 -d" Eine Auflistung möglicher Optionen für onetime finden Sie in der Manualpage von &man.geli.8;. Überprüfung des verschlüsselten Auslagerungsspeichers Nachdem das System neu gestartet wurde, kann die korrekte Funktion des verschlüsselten Auslagerungsspeichers mit swapinfo geprüft werden. Wenn Sie &man.gbde.8; einsetzen, erhalten Sie eine Meldung ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.bde 542720 0 542720 0% Wenn Sie &man.geli.8; einsetzen, erhalten Sie hingegen eine Ausgabe ähnlich der folgenden: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.eli 542720 0 542720 0% Highly Available Storage (<acronym>HAST</acronym>) DanielGerzoBeigetragen von FreddieCashMit Beiträgen von Pawel JakubDawidek Michael W.Lucas ViktorPetersson BenedictReuschlingÜbersetzt von HAST high availability Hochverfügbarkeit ist eine der Hauptanforderungen von ernsthaften Geschäftsanwendungen und hochverfügbarer Speicher ist eine Schlüsselkomponente in solchen Umgebungen. Highly Available STorage (HAST) ist ein Framework in &os;, welches die transparente Speicherung der gleichen Daten über mehrere physikalisch getrennte Maschinen ermöglicht, die über ein TCP/IP-Netzwerk verbunden sind. HAST kann als ein netzbasiertes RAID1 (Spiegel) verstanden werden und ist dem DRBD®-Speichersystem der GNU/&linux;-Plattform ähnlich. In Kombination mit anderen Hochverfügbarkeitseigenschaften von &os; wie CARP, ermöglicht es HAST, hochverfügbare Speichercluster zu bauen, die in der Lage sind, Hardwareausfällen zu widerstehen. Die Hauptmerkmale von HAST sind: Es kann zur Maskierung von I/O-Fehlern auf lokalen Festplatten eingesetzt werden. Dateisystem-unabhängig, was es erlaubt, jedes von &os; unterstützte Dateisystem zu verwenden. Effiziente und schnelle Resynchronisation: es werden nur die Blöcke synchronisiert, die während der Ausfallzeit eines Knotens geändert wurden. Es kann in einer bereits bestehenden Umgebung eingesetzt werden, um zusätzliche Redundanz zu erreichen. Zusammen mit CARP, Heartbeat, oder anderen Werkzeugen, ist es möglich, ein robustes und dauerhaftes Speichersystem zu bauen. Nachdem Sie diesen Abschnitt gelesen haben, werden Sie folgendes wissen: Was HAST ist, wie es funktioniert und welche Eigenschaften es besitzt. Wie man HAST unter &os; aufsetzt und verwendet. Wie man CARP und &man.devd.8; kombiniert, um ein robustes Speichersystem zu bauen. Bevor Sie diesen Abschnitt lesen, sollten Sie: die Grundlagen von &unix; und &os; verstanden haben (). wissen, wie man Netzwerkschnittstellen und andere Kernsysteme von &os; konfiguriert (). ein gutes Verständnis der &os;-Netzwerkfunktionalität besitzen (). Das HAST-Projekt wurde von der &os; Foundation mit Unterstützung der OMCnet Internet Service GmbH und TransIP BV gesponsert. HAST im Einsatz HAST bietet eine synchrone Replikation auf Blockebene zwischen zwei Maschinen: einem primary, auch bekannt als master Knoten, sowie dem secondary, oder slave Knoten. Diese beiden Maschinen zusammen werden als Cluster bezeichnet. Da HAST in einer primär-sekundär-Konfiguration funktioniert, ist immer nur ein Knoten des Clusters zu jeder Zeit aktiv. Der primäre Knoten, auch active genannt, ist derjenige, der alle I/O-Anfragen verarbeitet, die an die HAST-Schnittstelle gesendet werden. Der sekundäre Knoten wird automatisch vom primären Knoten aus synchronisiert. Die physischen Komponenten des HAST-Systems sind die lokale Platte am Primärknoten und die entfernte Platte am Sekundärknoten. HAST arbeitet synchron auf Blockebene, was es für Dateisysteme und Anwendungen transparent macht. HAST stellt gewöhnliche GEOM-Provider in /dev/hast/ für die Verwendung durch andere Werkzeuge oder Anwendungen zur Verfügung. Es gibt keinen Unterschied zwischen dem Einsatz von HAST bereitgestellten Geräten und herkömmlichen Platten oder Partitionen. Jede Schreib-, Lösch- oder Entleerungsoperation wird an die lokale und über TCP/IP zu der entfernt liegenden Platte gesendet. Jede Leseoperation wird von der lokalen Platte durchgeführt, es sei denn, die lokale Platte ist nicht aktuell oder es tritt ein I/O-Fehler auf. In solchen Fällen wird die Leseoperation an den Sekundärknoten geschickt. HAST versucht, eine schnelle Fehlerbereinigung zu gewährleisten. Aus diesem Grund ist es wichtig, die Synchronisationszeit nach dem Ausfall eines Knotens zu reduzieren. Um eine schnelle Synchronisation zu ermöglichen, verwaltet HAST eine Bitmap von unsauberen Bereichen auf der Platte und synchronisiert nur diese während einer regulären Synchronisation (mit Ausnahme der initialen Synchronisation). Es gibt viele Wege, diese Synchronisation zu behandeln. HAST implementiert mehrere Replikationsarten, um unterschiedliche Methoden der Synchronisation zu realisieren: memsync: Dieser Modus meldet Schreiboperationen als vollständig, wenn die lokale Schreiboperation beendet ist und der entfernt liegende Knoten die Ankunft der Daten bestätigt hat, jedoch bevor die Daten wirklich gespeichert wurden. Die Daten werden auf dem entfernt liegenden Knoten direkt nach dem Senden der Bestätigung gespeichert. Dieser Modus ist dafür gedacht, Latenzen zu verringern und zusätzlich eine gute Verlässlichkeit zu bieten. fullsync: Dieser Modus meldet Schreiboperationen als vollständig, wenn sowohl die lokale, als auch die entfernte Schreiboperation abgeschlossen wurde. Dies ist der sicherste und zugleich der langsamste Replikationsmodus. Er stellt den momentanen Standardmodus dar. async: Dieser Modus meldet Schreiboperationen als vollständig, wenn lokale Schreibvorgänge abgeschlossen wurden. Dies ist der schnellste und gefährlichste Replikationsmodus. Er sollte nur verwendet werden, wenn die Latenz zu einem entfernten Knoten bei einer Replikation zu hoch ist für andere Modi. HAST-Konfiguration Das HAST-Framework besteht aus mehreren Komponenten: Dem &man.hastd.8;-Daemon, welcher für Datensynchronisation verantwortlich ist. Wenn dieser Daemon gestartet wird, wird automatisch geom_gate.ko geladen. Dem &man.hastctl.8; Management-Werkzeug. Der Konfigurationsdatei &man.hast.conf.5;. Diese Datei muss vorhanden sein, bevor hastd gestartet wird. Alternativ lässt sich die GEOM_GATE-Unterstützung in den Kernel statisch einbauen, indem folgende Zeile zur Kernelkonfigurationsdatei hinzugefügt wird. Anschließend muss der Kernel, wie in beschrieben, neu gebaut werden: options GEOM_GATE Das folgende Beispiel beschreibt, wie man zwei Knoten als master-slave / primary-secondary mittels HAST konfiguriert, um Daten zwischen diesen beiden auszutauschen. Die Knoten werden als hasta mit der IP-Adresse 172.16.0.1 und hastb mit der IP-Adresse 172.16.0.2 bezeichnet. Beide Knoten besitzen eine dedizierte Festplatte /dev/ad6 mit der gleichen Größe für den HAST-Betrieb. Der HAST-Pool, manchmal auch Ressource genannt, oder der GEOM-Provider in /dev/hast/ wird als test bezeichnet. Die Konfiguration von HAST wird in /etc/hast.conf vorgenommen. Diese Datei sollte auf beiden Knoten gleich sein. Die einfachste Konfiguration ist folgende: resource test { on hasta { local /dev/ad6 remote 172.16.0.2 } on hastb { local /dev/ad6 remote 172.16.0.1 } } Fortgeschrittene Konfigurationsmöglichkeiten finden Sie in &man.hast.conf.5;. Es ist ebenfalls möglich, den Hostnamen in den remote-Anweisungen zu verwenden, falls die Rechner aufgelöst werden können und in /etc/hosts, oder im lokalen DNS definiert sind. Sobald die Konfiguration auf beiden Rechnern vorhanden ist, kann ein HAST-Pool erstellt werden. Lassen Sie diese Kommandos auf beiden Knoten ablaufen, um die initialen Metadaten auf die lokale Platte zu schreiben und starten Sie anschliessend &man.hastd.8;: &prompt.root; hastctl create test &prompt.root; service hastd onestart Es ist nicht möglich, GEOM-Provider mit einem bereits bestehenden Dateisystem zu verwenden, um beispielsweise einen bestehenden Speicher in einen von HAST verwalteten Pool zu konvertieren. Dieses Verfahren muss einige Metadaten auf den Provider schreiben und dafür würde nicht genug freier Platz zur Verfügung stehen. Die Rolle eines HAST Knotens, primary oder secondary, wird vom einem Administrator, oder einer Software wie Heartbeat, mittels &man.hastctl.8; festgelegt. Auf dem primären Knoten hasta geben Sie diesen Befehl ein: &prompt.root; hastctl role primary test Geben Sie folgendes Kommando auf dem sekundären Knoten hastb ein: &prompt.root; hastctl role secondary test Überprüfen Sie das Ergebnis mit hastctl auf beiden Knoten: &prompt.root; hastctl status test Überprüfen Sie die status-Zeile. Wird hier degraded angezeigt, dann ist etwas mit der Konfigurationsdatei nicht in Ordnung. Auf jedem Konten sollte complete angezeit werden, was bedeutet, dass die Synchronisation zwischen den beiden Knoten gestartet wurde. Die Synchronisierung ist abgeschlossen, wenn hastctl status meldet, dass die dirty-Bereiche 0 Bytes betragen. Der nächste Schritt ist, ein Dateisystem auf dem GEOM-Provider anzulegen und dieses ins System einzuhängen. Dies muss auf dem primary-Knoten durchgeführt werden. Die Erstellung des Dateisystems kann ein paar Minuten dauern, abhängig von der Größe der Festplatte. Dieses Beispiel erstellt ein UFS-Dateisystem auf /dev/hast/test: &prompt.root; newfs -U /dev/hast/test &prompt.root; mkdir /hast/test &prompt.root; mount /dev/hast/test /hast/test Sobald das HAST-Framework richtig konfiguriert wurde, besteht der letzte Schritt nun darin, sicherzustellen, dass HAST während des Systemstarts automatisch gestartet wird. Fügen Sie diese Zeile in /etc/rc.conf hinzu: hastd_enable="YES" Failover-Konfiguration Das Ziel dieses Beispiels ist, ein robustes Speichersystem zu bauen, welches Fehlern auf einem beliebigen Knoten widerstehen kann. Wenn der primary-Knoten ausfällt, ist der secondary-Knoten da, um nahtlos einzuspringen, das Dateisystem zu prüfen, einzuhängen und mit der Arbeit fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren geht. Um diese Aufgabe zu bewerkstelligen, wird das Common Address Redundancy Protocol (CARP) benutzt, welches ein automatisches Failover auf der IP-Schicht ermöglicht. CARP erlaubt es mehreren Rechnern im gleichen Netzsegment, die gleiche IP-Adresse zu verwenden. Setzen Sie CARP auf beiden Knoten des Clusters anhand der Dokumentation in auf. In diesem Beispiel hat jeder Knoten seine eigene Management IP-Adresse und die geteilte IP-Adresse 172.16.0.254. Der primäre HAST-Knoten des Clusters muss der CARP-Masterknoten sein. Der HAST-Pool, welcher im vorherigen Abschnitt erstellt wurde, ist nun bereit für den Export über das Netzwerk auf den anderen Rechner. Dies kann durch den Export über NFS oder Samba erreicht werden, indem die geteilte IP-Addresse 172.16.0.254 verwendet wird. Das einzige ungelöste Problem ist der automatische Failover, sollte der primäre Knoten einmal ausfallen. Falls die CARP-Schnittstelle aktiviert oder deaktiviert wird, generiert das &os;-Betriebssystem ein &man.devd.8;-Ereignis, was es ermöglicht, Zustandsänderungen auf den CARP-Schnittstellen zu überwachen. Eine Zustandsänderung auf der CARP-Schnittstelle ist ein Indiz dafür, dass einer der Knoten gerade ausgefallen oder wieder verfügbar ist. Diese Zustandsänderungen machen es möglich, ein Skript zu starten, welches automatisch den HAST-Failover durchführt. Um Zustandsänderungen auf der CARP-Schnittstelle abzufangen, müssen diese Zeilen in /etc/devd.conf auf jedem Knoten hinzugefügt werden: notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_UP"; action "/usr/local/sbin/carp-hast-switch master"; }; notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_DOWN"; action "/usr/local/sbin/carp-hast-switch slave"; }; Wenn auf dem System &os; 10 oder höher eingesetzt wird, ersetzen Sie carp0 durch den Namen der konfigurierten Schnittstelle für CARP. Starten Sie &man.devd.8; auf beiden Knoten neu, um die neue Konfiguration wirksam werden zu lassen: &prompt.root; service devd restart Wenn die Schnittstelle aktiviert oder deaktiviert wird, erzeugt das System eine Meldung, was es dem &man.devd.8;-Subsystem ermöglicht, ein automatisches Failover-Skript zu starten, /usr/local/sbin/carp-hast-switch. Weitere Informationen zu dieser Konfiguration finden Sie in &man.devd.conf.5;. Es folgt ein Beispiel für ein automatisches Failover-Skript: #!/bin/sh # Original script by Freddie Cash <fjwcash@gmail.com> # Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org> # and Viktor Petersson <vpetersson@wireload.net> # The names of the HAST resources, as listed in /etc/hast.conf resources="test" # delay in mounting HAST resource after becoming master # make your best guess delay=3 # logging log="local0.debug" name="carp-hast" # end of user configurable stuff case "$1" in master) logger -p $log -t $name "Switching to primary provider for ${resources}." sleep ${delay} # Wait for any "hastd secondary" processes to stop for disk in ${resources}; do while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do sleep 1 done # Switch role for each disk hastctl role primary ${disk} if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to change role to primary for resource ${disk}." exit 1 fi done # Wait for the /dev/hast/* devices to appear for disk in ${resources}; do for I in $( jot 60 ); do [ -c "/dev/hast/${disk}" ] && break sleep 0.5 done if [ ! -c "/dev/hast/${disk}" ]; then logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear." exit 1 fi done logger -p $log -t $name "Role for HAST resources ${resources} switched to primary." logger -p $log -t $name "Mounting disks." for disk in ${resources}; do mkdir -p /hast/${disk} fsck -p -y -t ufs /dev/hast/${disk} mount /dev/hast/${disk} /hast/${disk} done ;; slave) logger -p $log -t $name "Switching to secondary provider for ${resources}." # Switch roles for the HAST resources for disk in ${resources}; do if ! mount | grep -q "^/dev/hast/${disk} on " then else umount -f /hast/${disk} fi sleep $delay hastctl role secondary ${disk} 2>&1 if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}." exit 1 fi logger -p $log -t $name "Role switched to secondary for resource ${disk}." done ;; esac Im Kern führt das Skript die folgenden Aktionen durch, sobald ein Knoten zum Master wird: Es ernennt den HAST-Pool als den primären für einen gegebenen Knoten. Es prüft das Dateisystem, dass auf dem HAST-Pool erstellt wurde. Es hängt den Pool ins System ein. Wenn ein Knoten zum Sekundären ernannt wird: Hängt es den HAST-Pool aus dem Dateisystem aus. Degradiert es den HAST-Pool zum sekundären. Dieses Skript ist nur ein Beispiel für eine mögliche Lösung. Es behandelt nicht alle möglichen Szenarien, die auftreten können und sollte erweitert bzw. abgeändert werden, so dass z.B. benötigte Dienste gestartet oder gestoppt werden. Für dieses Beispiel wurde ein UFS-Dateisystem verwendet. Um die Zeit für die Wiederherstellung zu verringern, kann ein UFS mit Journal oder ein ZFS-Dateisystem benutzt werden. Weitere detaillierte Informationen mit zusätzlichen Beispielen können unter http://wiki.FreeBSD.org/HAST abgerufen werden. Fehlerbehebung HAST sollte generell ohne Probleme funktionieren. Jedoch kann es, wie bei jeder anderen Software auch, zu gewissen Zeiten sein, dass sie sich nicht so verhält wie angegeben. Die Quelle dieser Probleme kann unterschiedlich sein, jedoch sollte als Faustregel gewährleistet werden, dass die Zeit für alle Knoten im Cluster synchron läuft. Für die Fehlersuche bei HAST sollte die Anzahl an Debugging-Meldungen von &man.hastd.8; erhöht werden. Dies kann durch das Starten von hastd mit -d erreicht werden. Diese Option kann mehrfach angegeben werden, um die Anzahl an Meldungen weiter zu erhöhen. Sie sollten ebenfalls die Verwendung von -F in Erwägung ziehen, was hastd im Vordergrund startet. Auflösung des Split-brain-Zustands split-brain bezeichnet eine Situation, in der beide Knoten des Clusters nicht in der Lage sind, miteinander zu kommunizieren und dadurch beide als primäre Knoten fungieren. Dies ist ein gefährlicher Zustand, weil es beiden Knoten erlaubt ist, Änderungen an den Daten vorzunehmen, die miteinander nicht in Einklang gebracht werden können. Diese Situation muss vom Systemadministrator händisch bereinigt werden. Der Administrator muss entscheiden, welcher Knoten die wichtigeren Änderungen besitzt, oder die Zusammenführung manuell durchführen. Anschließend kann HAST die volle Synchronisation mit dem Knoten durchführen, der die beschädigten Daten enthält. Um dies zu tun, geben Sie folgende Befehle auf dem Knoten ein, der neu synchronisiert werden muss: &prompt.root; hastctl role init test &prompt.root; hastctl create test &prompt.root; hastctl role secondary test
Index: head/de_DE.ISO8859-1/books/handbook/mirrors/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 48791) +++ head/de_DE.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 48792) @@ -1,2660 +1,2660 @@ Bezugsquellen für &os; CD-ROM und DVD Verleger &os;-CDs und -DVDs Die &os;-CDs und -DVDs werden von vielen Online-Händlern angeboten:
&os; Mall, Inc. 2420 Sand Creek Rd C-1 #347 Brentwood, CA 94513 USA Telefon: +1 925 240-6652 Fax: +1 925 674-0821 E-Mail: info@freebsdmall.com WWW: http://www.freebsdmall.com/
Dr. Hinner EDV Kochelseestr. 11 D-81371 München Germany Telefon: (0177) 428 419 0 WWW: http://www.hinner.de/linux/freebsd.html
Linux Distro UK 42 Wharfedale Road Margate CT9 2TB United Kingdom WWW: https://linux-distro.co.uk
The Linux Emporium The Techno Centre, Puma Way Parkside CV1 2TT United Kingdom Telefon: +44 (0)247 615 8121 Fax: +44 1491 837016 WWW: http://linuxemporium.co.uk
LinuxCenter.Ru Galernaya Street, 55 Saint-Petersburg 190000 Russia Telefon: +7-812-3125208 E-Mail: info@linuxcenter.ru WWW: http://linuxcenter.ru/shop/freebsd
FTP-Server Die offiziellen Quellen von &os; sind mit anonymous FTP über ein weltweites Netz von FTP-Spiegeln erhältlich. Obwohl ftp://ftp.FreeBSD.org/pub/FreeBSD/ über eine gute Anbindung verfügt, sollten Sie einen Spiegel in Ihrer Nähe verwenden (insbesondere, wenn Sie selber einen Spiegel einrichten wollen). Sie können &os; auch über anonymous FTP von den folgenden Spiegeln beziehen. Wenn Sie &os; über anonymous FTP beziehen wollen, wählen Sie bitte einen Spiegel in Ihrer Nähe. Die unter Haupt-Spiegel aufgeführten Spiegel stellen normalerweise das komplette &os;-Archiv (alle momentan erhältlichen Versionen für jede unterstützte Architektur) zur Verfügung. Wahrscheinlich geht es aber schneller, wenn Sie einen Spiegel in Ihrer Nähe benutzen. Die Länder-Spiegel stellen die neusten Versionen für die beliebtesten Architekturen bereit, sie stellen aber unter Umständen nicht das komplette &os;-Archiv bereit. Auf alle Server kann mit anonymous FTP zugegriffen werden, einige Server bieten auch andere Zugriffsmethoden an. Die zur Verfügung stehenden Zugriffsmethoden sind bei jedem Server in Klammern angegeben. &chap.mirrors.ftp.index.inc; &chap.mirrors.lastmod.inc; &chap.mirrors.ftp.inc; Anonymous CVS (veraltet) Warnung CVS wurde vom Projekt als veraltet eingestuft. Die Benutzung wird nicht weiter empfohlen. Nutzen Sie stattdessen Subversion. CTM CTM Mit CTM Abkürzung für CVS Through eMail können Sie einen entfernten Verzeichnisbaum mit einem zentralen Baum synchronisieren. Es wurde extra zum Synchronisieren der &os; Quellen entwickelt, obwohl es mit der Zeit vielleicht auch andere Anwendungen geben wird. Zurzeit existiert leider so gut wie keine Dokumentation zum Erstellen der Deltas. Wenn Sie Hilfe benötigen oder CTM für andere Zwecke einsetzen wollen, wenden Sie sich bitte an die Mailingliste &a.ctm-users.name;. Warum soll ich <application>CTM</application> benutzen? Mit CTM erhalten Sie eine lokale Kopie des &os;-Quellbaums, den es in mehreren Varianten gibt. Sie können das ganze Repository oder nur einen Zweig spiegeln. Wenn Sie ein aktiver &os;-Entwickler mit einer schlechten oder gar keiner TCP/IP Verbindung sind, oder die Änderungen einfach automatisch zugesandt bekommen wollen, dann ist CTM das Richtige für Sie. Für die Zweige mit der meisten Aktivität müssen Sie sich täglich bis zu drei Deltas beschaffen, Sie sollten allerdings erwägen, die Deltas automatisch über E-Mail zu beziehen. Die Größe der Updates wird so klein wie möglich gehalten. Normalerweise sind sie kleiner als 5 kB, manchmal sind sie 10-50 kB groß (etwa jedes 10. Update) und ab und an werden Sie auch einmal ein Update mit 100 kB oder mehr erhalten. Sie sollten sich über die Vorbehalte gegen die Verwendung der Quellen anstelle eines offiziellen Releases bewusst sein. Das trifft besonders auf &os.current; zu, lesen Sie dazu bitte den Abschnitt &os.current;. Was brauche ich, um <application>CTM</application> zu benutzen? Zwei Sachen: Das CTM Programm und die initialen Deltas, von denen aus Sie auf die aktuellen Stände kommen. CTM ist schon seit der Version 2.0 Teil des &os;-Basissystems. Sie finden es in /usr/src/usr.sbin/ctm, wenn Sie eine Kopie der Quellen besitzen. Die Deltas, die CTM verarbeitet, können Sie über FTP oder E-Mail beziehen. Wenn Sie über einen FTP Zugang zum Internet verfügen, erhalten Sie die Deltas unter der folgenden URL: ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/ Die Deltas werden auch von CTM Spiegeln bereitgehalten. Wechseln Sie in das passende Verzeichnisse zum Beispiel src-cur für &os.current; und laden Sie sich von dort die Deltas herunter. Sie können die Deltas auch über E-Mail beziehen. Abonnieren Sie dazu eine der CTM-Verteilerlisten. Über &a.ctm-src-cur.name; erhalten Sie den kompletten Subversion-Baum, über &a.ctm-src-cur.name; erhalten Sie &os.current; und über &a.ctm-src-9.name; erhalten Sie den &os; 9.X-Zweig. Wenn Sie nicht wissen, wie Sie eine der Mailinglisten abonnieren, folgen Sie einem der Verweise von oben oder besuchen Sie die Seite &a.mailman.lists.link;. Weitere Informationen erhalten Sie, wenn Sie dort auf die gewünschte Liste klicken. Benutzen Sie ctm_rmail, um die CTM Updates, die Sie per E-Mail empfangen, auszupacken und anzuwenden. Wenn Sie diesen Prozess automatisiert ablaufen lassen möchten, können Sie dazu einen Eintrag in /etc/aliases verwenden. Genauere Informationen finden Sie in der Manualpage von ctm_rmail. Sie sollten die Mailingliste &a.ctm-announce.name; abonnieren, egal wie Sie die CTM-Deltas erhalten. Ankündigungen, die den Betrieb des CTM-Systems betreffen, werden nur auf dieser Liste bekannt gegeben. Klicken Sie auf den Namen der Liste oder besuchen Sie die Seite &a.mailman.lists.link;, um diese Liste zu abonnieren. Initialisieren von <application>CTM</application> Bevor Sie die CTM Deltas benutzen können, brauchen Sie einen Startpunkt, auf den die nachfolgenden Deltas angewendet werden. Sie können natürlich mit einem leeren Verzeichnis beginnen. In diesem Fall benötigen Sie ein XEmpty-Delta, mit dem Sie den CTM-Verzeichnisbaum initialisieren. Wenn Sie Glück haben, finden Sie ein XEmpty-Delta, mit dem sie beginnen können, auf einer der CDs Ihrer Distribution. Da die Verzeichnisbäume mehrere Megabyte groß sind, sollten Sie nach Möglichkeit etwas schon vorhandenes benutzen. Wenn Sie eine -RELEASE CD besitzen, können Sie die Quellen von dieser CD benutzen. Sie ersparen sich damit das Übertragen großer Datenmengen. Die Deltas, mit denen Sie beginnen können, enthalten ein X in ihrem Namen, wie in src-cur.3210XEmpty.gz. Hinter dem X wird der Startpunkt der Deltas angegeben, in diesem Fall steht Empty für ein leeres Verzeichnis. Nach etwa 100 Deltas wird ein neues XEmpty-Delta erstellt. Mit ungefähr 75 Megabyte komprimierter Daten sind diese XEmpty-Deltas übrigens sehr groß. Nachdem Sie Ihren Startpunkt festgelegt haben, benötigen Sie alle Deltas mit einer höheren Nummer. Benutzen von <application>CTM</application> Um ein Delta einzuspielen, benutzen Sie das folgende Kommando: &prompt.root; cd /Pfad/zu/den/Quellen &prompt.root; ctm -v -v /Pfad/zu/den/Deltas/src-xxx.* CTM kann mit Deltas arbeiten, die mit gzip komprimiert wurden. Sie brauchen die Deltas vorher nicht mit gunzip zu dekomprimieren und sparen damit Plattenplatz. Ihr Quellbaum wird erst dann verändert, wenn CTM die Deltas sauber verarbeiten kann. Die Integrität der Deltas und ihre Anwendbarkeit auf den Quellbaum lassen sich durch die Angabe des Schalters -c überprüfen, CTM ändert in diesem Fall Ihren Quellbaum nicht. CTM verfügt über weitere Kommandozeilenoptionen, Informationen dazu finden Sie in der Manualpage oder dem Quellcode. Das war schon alles. Um Ihre Quellen aktuell zu halten, verwenden Sie CTM jedes Mal, wenn Sie neue Deltas bekommen. Löschen Sie die Deltas nicht, wenn Sie diese nur schwer wieder beschaffen können. Behalten Sie sie für den Fall, das etwas passiert. Auch wenn Sie nur Disketten besitzen, sollten Sie erwägen, die Deltas mit fdwrite zu sichern. Umgang mit lokalen Änderungen Entwickler wollen mit den Dateien im Quellbaum experimentieren und diese verändern. In beschränkter Weise werden lokale Änderungen von CTM unterstützt. Wenn CTM die Datei foo bearbeiten will, überprüft es zuerst ob die Datei foo.ctm existiert. Wenn diese Datei existiert, werden Änderungen in ihr anstatt in foo vorgenommen. Mit diesem Verfahren ist eine leichte Handhabung lokaler Änderungen möglich. Kopieren Sie die Dateien, die Sie ändern möchten, in Dateien, die das Suffix .ctm tragen. Sie können dann ungestört mit dem Quellcode arbeiten, während CTM die .ctm Dateien aktualisiert. Weitere <application>CTM</application>-Optionen Was wird aktualisiert? Eine Liste der Änderungen, die CTM an Ihrem Quellbaum vornehmen wird, erhalten Sie, wenn Sie die Option angeben. Das ist nützlich, wenn Sie Logs über die Änderungen führen wollen, geänderte Dateien vor- oder nachbearbeiten wollen, oder einfach ein bisschen paranoid sind. Sicherungen vor einer Aktualisierung erstellen Sie wollen vielleicht die Dateien, die durch eine CTM Aktualisierung verändert werden, sichern. Mit weisen Sie CTM an, alle Dateien, die durch ein CTM Delta verändert würden, nach backup-file zu sichern. Dateien ausschließen Manchmal wollen Sie nur bestimmte Teile aktualisieren oder nur bestimmte Dateien aus einer Folge von Deltas extrahieren. Sie können die Liste der Dateien, mit denen CTM arbeitet, einschränken, indem Sie reguläre Ausdrücke mit den Optionen und angeben. Wenn Sie eine aktuelle Kopie von lib/libc/Makefile aus den gesicherten CTM Deltas erhalten wollen, setzen Sie das folgende Kommando ab: &prompt.root; cd /wo/Sie/es/auspacken/wollen/ &prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.* Die Optionen und werden in der Reihenfolge angewandt, in der sie auf der Kommandozeile angegeben wurden. Eine Datei wird nur dann von CTM verarbeitet, wenn dies nach der Anwendung der Optionen und noch erlaubt ist. Pläne für <application>CTM</application> Mehrere: Hinzufügen eines Authentifizierungsmechanismus, damit gefälschte CTM-Deltas erkannt werden können. Aufräumen der CTM-Optionen, die mit der Zeit unübersichtlich und irreführend wurden. Verschiedenes Es gibt Deltas für die Ports-Sammlung, die aber nicht intensiv genutzt werden. CTM-Spiegel Die CTM-Deltas können Sie mit anonymous FTP von den folgenden Spiegeln beziehen. Versuchen Sie bitte einen Spiegel in Ihrer Nähe zu benutzen. Bei Problemen wenden Sie sich bitte an die Mailingliste &a.ctm-users.name;. Kalifornien, Bay Area, Offizieller Server ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/ Südafrika, Backup-Server für alte Deltas ftp://ftp.za.FreeBSD.org/pub/FreeBSD/CTM/ Taiwan/R.O.C. ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ ftp://ctm3.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ Wenn die Liste keinen Spiegel in Ihrer Nähe enthält oder Sie Probleme mit dem ausgewählten Spiegel haben, versuchen Sie einen Spiegel mit einer Suchmaschine, wie alltheweb, zu finden. Benutzen von <application>Subversion</application> Subversion Einführung Seit Juli 2012 nutzt &os; Subversion (svn) als primäres Versionskontrollsystem zur Speicherung des gesamten &os; Quellcodes, der Dokumentation und der Ports-Sammlung. Subversion ist hauptsächlich ein Werkzeug für Entwickler. Die meisten Benutzer sollten FreeBSD Update benutzen um ihr &os; zu aktualisieren, und Portsnap um ihre Ports-Sammlung aktuell zu halten. In Subversion werden URLs in der Form von protocol://hostname/path verwendet, um ein Repository zu kennzeichnen. Die Spiegel können, wie unten angegeben, verschiedene Protokolle unterstützen. Die erste Komponente des Pfades ist das &os; Repository auf welches zugegriffen wird. Es gibt drei verschiedene Repositories. base für den Quellcode des &os; Basissystems, ports für die Ports-Sammlung und doc für die Dokumentation. Als Beispiel spezifiziert die URL svn://svn0.us-east.FreeBSD.org/ports/head/ den Hauptzweig des Port-Repositories auf dem Mirror svn0.us-east.FreeBSD.org, über das svn-Protokoll. Installation Subversion muss installiert werden, bevor Sie damit die Inhalte eines der Repositories auschecken können. Wenn eine Kopie der Ports-Sammlung bereits vorhanden ist, kann Subversion wie folgt installiert werden: &prompt.root; cd /usr/ports/devel/subversion &prompt.root;make install clean Ist die Ports-Sammlung nicht vorhanden, kann Subversion als Paket installiert werden: &prompt.root; pkg_add -r subversion Wenn Sie pkgng verwenden, um Pakete zu verwalten, können Sie Subversion stattdessen so installieren: &prompt.root; pkg install devel/subversion Ausführen von <application>Subversion</application> Der svn Befehl wird verwendet, eine Kopie der Quellen in ein lokales Verzeichnis zu holen. Die Dateien in diesem Verzeichnis werden lokale Arbeitskopie genannt. Wenn das lokale Verzeichnis bereits vorhanden ist, aber nicht von svn erstellt wurde, benennen Sie das Verzeichnis um oder löschen Sie es, bevor Sie Inhalte auschecken. In ein bestehendes nicht-svn Verzeichnis auszuchecken kann zu Konflikten zwischen den vorhandenen Dateien und denen aus dem Respository führen. Das Auschecken aus einem bestimmten Repository kann wie folgt durchgeführt werden: &prompt.root; svn checkout svn-mirror/repository/branch lcwdir wobei: svn-mirror eine URL für einen Mirror aus Subversion Mirror Sites ist. repository eines der Projekt-Repositories ist, z. B. base, ports oder doc. branch vom verwendeten Repository abhängt. ports und doc werden meist im head Zweig aktualisiert, während base die neueste Version von -CURRENT unter head und die jeweilige neueste Version des -STABLE Zweiges unter stable/8 (für 8.x), stable/9 (9.x) und stable/10 (10.x) verwaltet wird. lcwdir das Zielverzeichnis ist, in dem die Inhalte des angegebenen Zweiges plaziert - werden sollen. Dies ist üblicherweise /usr/ports für - ports, /usr/src für - base, und /usr/doc für - doc. + werden sollen. Dies ist üblicherweise + /usr/ports für + ports, /usr/src + für base, und + /usr/doc für + doc. + Dieses Beispiel checkt die Ports-Sammlung aus dem Repositroy im Westen der USA über das HTTPS - Protokoll aus, und speichert die Arbeitskopie unter /usr/ports. Wenn /usr/ports bereits vorhanden ist, + Protokoll aus, und speichert die Arbeitskopie unter + /usr/ports. Wenn + /usr/ports bereits vorhanden ist, aber nicht von svn erstellt wurde, denken Sie vor dem Auschecken daran, das Verzeichnis umzubenennen oder zu löschen. &prompt.root; svn checkout https://svn0.us-west.FreeBSD.org/ports/head /usr/ports Dies kann eine Weile dauern, da beim ersten Auschecken der komplette Zweig vom entfernten Repository heruntergeladen werden muss. Bitte haben Sie Geduld. Nach dem ersten Auschecken können Sie Ihre lokale Arbeitskopie wie folgt aktualisieren: &prompt.root; svn update lcwdir - Um /usr/ports + Um /usr/ports aus dem oben erstellten Beispiel zu aktualisieren, benutzen Sie: &prompt.root; svn update /usr/ports Das Update ist viel schneller als ein Auschecken, da nur die Dateien übertragen werden müssen, die sich auch geändert haben. Eine alternative Möglichkeit zur Aktualisierung Ihrer Arbeitskopie nach dem Auschecken ist es, das bestehende - Makefile in den Verzeichnissen /usr/ports, /usr/src, und /usr/doc zu nutzen. Setzen Sie + Makefile in den Verzeichnissen + /usr/ports, + /usr/src, und + /usr/doc zu nutzen. Setzen Sie dazu SVN_UPDATE und benutzen Sie das update Ziel. Zum Beispiel, um - /usr/src zu + /usr/src zu aktualisieren: &prompt.root; cd /usr/src &prompt.root; make update SVN_UPDATE=yes Weiterführende Informationen Weitere Informationen über die Verwendung von Subversion finden Sie im Subversion Buch mit dem Namen Versionskontrolle mit Subversion, oder in der Subversion Dokumentation. <application>Subversion</application> Mirror Sites Subversion Repository Mirror Sites Alle Spiegel führen alle Repositories. Der Master &os; Subversion Server, svn.FreeBSD.org ist öffentlich zugänglich. Auf ihn kann allerdings nur lesend zugegriffen werden. Dies kann sich in Zukunft ändern, solange jedoch werden die Nutzer dazu aufgefordert, einen der offiziellen Spiegel zu verwenden. Um das &os; Subversion Repository über einen Browser anzuzeigen, verwenden Sie http://svnweb.FreeBSD.org/. Das &os; svn Mirror Netzwerk befindet sich noch in den Anfängen, und Veränderungen werden stattfinden. Verlassen Sie sich also nicht darauf, dass diese Liste statisch ist. Insbesondere werden sich die SSL-Zertifikate irgendwann ändern. Name Protokolle Standort SSL-Fingerabdruck svn.us-west.FreeBSD.org svn, http, https USA, Kalifornien SHA1 1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61 svn0.us-east.FreeBSD.org svn, http, https, rsync USA, New Jersey SHA1 1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61 svn0.eu.FreeBSD.org svn, http https, rsync Europa, UK SHA1 39:B0:53:35:CE:60:C7:BB:00:54:96:96:71:10:94:BB:CE:1C:07:A7 HTTPS ist das bevorzugte Protokoll, es schützt Sie vor anderen Computern, die vortäuschen, der &os;-Mirror zu sein (gemeinhin bekannt als man in the middle-Angriff), oder anderweitig versuchen schlechte Daten an den Endnutzer zu senden. Bei der ersten Verbindung zu einem HTTPS Mirror, wird der Benutzer aufgefordert, den Fingerabdruck des Servers zu überprüfen: Error validating server certificate for 'https://svn0.us-west.freebsd.org:443': - The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually! - The certificate hostname does not match. Certificate information: - Hostname: svnmir.ysv.FreeBSD.org - Valid: from Jul 29 22:01:21 2013 GMT until Dec 13 22:01:21 2040 GMT - Issuer: clusteradm, FreeBSD.org, (null), CA, US (clusteradm@FreeBSD.org) - Fingerprint: 1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61 (R)eject, accept (t)emporarily or accept (p)ermanently? Vergleichen Sie den Fingerabdruck mit dem in der obigen Tabelle. Wenn der Fingerabdruck übereinstimmt, kann das Sicherheitszertifikat des Server zeitweise oder dauerhaft akzeptiert werden. Ein temporäres Zertifikat wird nach einer einzigen Sitzung mit dem Server ablaufen, und die Überprüfung wird bei der nächsten Verbindung wiederholt werden. Akzeptieren Sie das Zertifikat dauerhaft, werden die - Authentifizierungsinformationen in ~/.subversion/auth gespeichert, und + Authentifizierungsinformationen in + ~/.subversion/auth gespeichert, und der Benutzer wird nicht wieder gefragt den Fingerabdruck zu prüfen, solange bis das Zertifikat abgelaufen ist. Wenn HTTPS aufgrund von Firewall- oder anderen Problemen nicht verwendet werden kann, dann ist SVN die nächste Wahl. Sollte beides nicht verfügbar sein, nutzen Sie HTTP Benutzen von CVSup (veraltet) Einführung CVSup ist eine Anwendung, die Verzeichnisbäume von einem entfernten CVS-Server bereitstellt und aktualisiert. Die Quellen von &os; werden in einem CVS-Repository auf einer Entwicklungsmaschine in Kalifornien gepflegt. Mit CVSup können sich &os;-Benutzer den eigenen Quellbaum auf aktuellem Stand halten. Zum Aktualisieren benutzt CVSup die Pull-Methode, bei der die Aktualisierungen vom Client angefragt werden. Der Server wartet dabei passiv auf Anfragen von Clients, das heißt er verschickt nicht unaufgefordert Aktualisierungen. Somit gehen alle Anfragen vom Client aus und die Benutzer müssen CVSup entweder manuell starten oder einen cron Job einrichten, um regelmäßig Aktualisierungen zu erhalten. CVSup in genau dieser Schreibweise bezeichnet die Anwendung, die aus dem Client cvsup und dem Server cvsupd besteht. cvsup läuft auf den Maschinen der Benutzer, cvsupd läuft auf jedem der &os;-Spiegel. Mit csup gibt es in inzwischen auch eine in C geschriebene Neuimplementierung von CVSup. Der größte Vorteil dieser neuen Version ist neben einer höheren Geschwindigkeit der, dass dieses Programm nicht von der Sprache Modula-3 abhängig ist und Sie daher dieses Paket nicht mitinstallieren müssen. csup ist bereits im Basissystem enthalten und kann sofort verwendet werden. Wollen Sie künftig csup einsetzen, überspringen Sie in den folgenden Ausführungen einfach den Abschnitt zur Installation von CVSup und ersetzen alle Vorkommen von CVSup durch csup. Installation von <application>CVSup</application> CVSup können Sie leicht installieren, wenn Sie das vorkompilierte Paket net/cvsup aus der Ports-Sammlung benutzen. Alternativ können Sie net/cvsup auch ausgehend von den Quellen bauen, doch seien Sie gewarnt: net/cvsup hängt vom Modula-3 System ab, das viel Zeit und Platz zum Herunterladen und Bauen braucht. Wenn Sie CVSup auf einer Maschine ohne &xorg; (also beispielsweise auf einem Server), benutzen, stellen Sie bitte sicher, dass Sie den Port ohne das CVSup-GUI, (net/cvsup-without-gui) verwenden. Konfiguration von CVSup Das Verhalten von CVSup wird mit einer Konfigurationsdatei gesteuert, die supfile genannt wird. Beispiele für Konfigurationsdateien finden Sie in dem Verzeichnis . Ein supfile enthält die folgenden Informationen: Welche Dateien Sie erhalten wollen. Welche Versionen der Dateien Sie benötigen. Woher Sie die Dateien beziehen wollen. Wo Sie die erhaltenen Dateien speichern. Wo Sie die Status-Dateien aufbewahren wollen. In den folgenden Abschnitten erstellen wir ein typisches supfile indem wir nach und nach diese Punkte klären. Zuerst beschreiben wir aber den Aufbau dieser Konfigurationsdatei. Ein supfile ist eine Textdatei. Kommentare beginnen mit einem # und gelten bis zum Zeilenende. Leerzeilen und Zeilen, die nur Kommentare enthalten, werden ignoriert. Die anderen Zeilen legen die Dateien fest, die ein Benutzer erhalten will. Der Server organisiert verschiedene Dateien in einer Sammlung, deren Name auf einer Zeile angegeben wird. Nach dem Namen der Sammlung können mehrere durch Leerzeichen getrennte Felder folgen, die die oben angesprochenen Informationen festlegen. Es gibt zwei Arten von Feldern: Felder, die Optionen festlegen und Felder mit Parametern. Optionen bestehen aus einem Schlüsselwort, wie oder und stehen alleine. Ein Parameterfeld beginnt mit einem Schlüsselwort, dem = und ein Parameter, wie in , folgt. Dieses Feld darf keine Leerzeichen enthalten. In einem supfile werden normalerweise mehrere Sammlungen angefordert. Die erforderlichen Felder können explizit für jede Sammlung angegeben werden, dann werden jedoch die Zeilen ziemlich lang. Außerdem ist dieses Vorgehen sehr unhandlich, da die meisten Felder für alle Sammlungen gleich sind. CVSup bietet die Möglichkeit, Vorgaben für die Felder der Sammlungen festzulegen. Zeilen, die mit der Pseudo-Sammlung *default beginnen, legen Optionen und Parameter für nachfolgende Sammlungen im supfile fest. Der Vorgabewert kann in der Zeile einer bestimmten Sammlung überschrieben werden. Durch Hinzufügen weiterer *default Zeilen können die Vorgaben auch mitten im supfile überschrieben oder erweitert werden. Mit diesem Wissen können wir nun ein supfile erstellen, das den Quellbaum von &os;-CURRENT anfordert und aktualisiert. Welche Dateien wollen Sie empfangen? Dateien werden von CVSup in Sammlungen organisiert. Die erhältlichen Sammlungen werden später beschrieben. Wir wollen den Quellbaum von &os; empfangen, der in der Sammlung src-all enthalten ist. Das supfile enthält pro Zeile eine Sammlung, in diesem Fall also nur eine einzige Zeile: src-all Welche Versionen der Dateien werden benötigt? Mit CVSup können Sie jede Version der Quellen bekommen, da der cvsupd-Server seine Daten direkt aus dem CVS-Repository bezieht. Sie können die benötigten Versionen in den Parameterfeldern tag= und angeben. Achten Sie darauf, dass Sie das richtige tag=-Feld angeben. Einige Tags sind nur für spezielle Sammlungen gültig. Wenn Sie ein falsches Tag angeben oder sich verschreiben, wird CVSup Dateien löschen, die Sie wahrscheinlich gar nicht löschen wollten. Achten Sie insbesondere bei den ports-*-Sammlungen darauf, ausschließlich tag=. zu verwenden. Mit tag= wird ein symbolischer Name aus dem Repository angegeben. Es gibt zwei verschiedene Tags: Tags, die Revisionen bezeichnen und Tags, die Zweige bezeichnen. Die ersteren sind statisch und fest an eine Revision gebunden. Ein Tag, das einen Zweig bezeichnet, bezieht sich dagegen zu einem gegebenen Zeitpunkt immer auf die aktuellste Revision. Da ein Tag eines Zweiges nicht an eine bestimmte Revision gebunden ist, kann sich dessen Bedeutung von heute auf morgen ändern. zählt für Benutzer relevante Tags auf. Wenn Sie in der Konfigurationsdatei ein Tag, wie RELENG_8, angeben, müssen Sie diesem tag= vorstellen: tag=RELENG_8. Denken Sie daran, dass es für die Ports-Sammlung nur tag=. gibt. Achten Sie darauf, dass Sie den Namen eines Tags richtig angeben. CVSup kann nicht zwischen richtigen und falschen Tags unterscheiden. Wenn Sie sich bei der Angabe eines Tags vertippen, nimmt CVSup an, Sie hätten ein gültiges Tag angegeben, dem nur keine Dateien zugeordnet sind. Die Folge davon ist, dass Ihre vorhandenen Quellen gelöscht werden. Wenn Sie ein Tag angeben, das sich auf einen Zweig bezieht, erhalten Sie die aktuellsten Revisionen der Dateien auf diesem Zweig. Wenn Sie eine frühere Revision erhalten möchten, können Sie diese im Feld angeben. Einzelheiten dazu finden Sie in der Manualpage von cvsup. Wir möchten gerne &os;-CURRENT beziehen und fügen die folgende Zeile am Anfang der Konfigurationsdatei ein: *default tag=. Eine wichtige Ausnahme ist wenn Sie weder ein tag=-Feld noch ein date=-Feld angeben. In diesem Fall erhalten Sie anstelle einer speziellen Revision die wirklichen RCS-Dateien aus dem CVS-Repository des Servers. Diese Vorgehensweise wird von Entwicklern bevorzugt, da sie mit einem eigenen Repository leicht die Entwicklungsgeschichte und Veränderungen von Dateien verfolgen können. Dieser Vorteil muss allerdings mit sehr viel Plattenplatz bezahlt werden. Woher sollen die Dateien bezogen werden? Im host=-Feld wird angegeben, woher cvsup die Dateien holen soll. Sie können hier jeden der CVSup-Spiegel angeben, doch sollten Sie einen Server in Ihrer Nähe auswählen. Für dieses Beispiel wollen wir den erfundenen Server cvsup99.FreeBSD.org verwenden: *default host=cvsup99.FreeBSD.org Bevor Sie CVSup laufen lassen, sollten Sie hier einen existierenden Server einsetzen. Den zu verwendenden Server können Sie auf der Kommandozeile mit überschreiben. Wo sollen die Dateien gespeichert werden? Im prefix=-Feld teilen Sie cvsup mit, wo die Dateien gespeichert werden sollen. In diesem Beispiel werden wir die Quelldateien direkt im Verzeichnisbaum für Quellen /usr/src ablegen. Das Verzeichnis src ist schon in der Sammlung, die wir beziehen enthalten, so dass wir die folgende Zeile angeben: *default prefix=/usr Wo sollen die Statusinformationen von cvsup gespeichert werden? cvsup legt in einem Verzeichnis Statusinformationen ab, die festhalten, welche Versionen schon empfangen wurden. Wir verwenden das Verzeichnis /var/db: *default base=/var/db Wenn das Verzeichnis für die Statusinformationen nicht existiert, sollten Sie es jetzt anlegen, da cvsup ohne dieses Verzeichnis nicht startet. Verschiedene Einstellungen: Eine weitere Zeile sollte normalerweise in jedem supfile sein: *default release=cvs delete use-rel-suffix compress Mit release=cvs wird angegeben, dass der Server das &os;-Haupt-Repository abfragen soll, was praktisch immer der Fall ist (die Ausnahmen werden in diesem Text nicht diskutiert). delete erlaubt es CVSup, Dateien zu löschen. Diese Option sollten Sie immer angeben, damit CVSup Ihren Quellbaum auch wirklich aktuell halten kann. CVSup löscht nur Dateien für die es auch verantwortlich ist. Andere Dateien, die sich in einem Baum unter Kontrolle von CVSup befinden, werden nicht verändert. Wenn Sie wirklich etwas über das obskure use-rel-suffix erfahren wollen, lesen Sie bitte in der Manualpage nach, ansonsten geben Sie es einfach an und vergessen es. Wenn Sie compress angeben, werden Daten auf dem Kommunikationskanal komprimiert. Wenn Sie über eine T1-Leitung oder eine schnellere Netzanbindung verfügen, brauchen Sie diese Option vielleicht nicht. In allen anderen Fällen beschleunigt sie aber den Ablauf. Zusammenfassung: Das vollständige supfile unseres Beispiels sieht nun so aus: *default tag=. *default host=cvsup99.FreeBSD.org *default prefix=/usr *default base=/var/db *default release=cvs delete use-rel-suffix compress src-all Die <filename>refuse</filename> Datei CVSup benutzt die Pull-Methode, das heißt wenn sich ein Client mit einem Server verbindet, erhält er eine Liste der verfügbaren Sammlungen und wählt aus diesen die herunterzuladenden Dateien aus. In der Voreinstellung wählt der Client alle Dateien aus, die zu einer gegebenen Sammlung und zu einem gegebenen Tag passen. Um nur einen Teil des Baumes herunterzuladen, benutzen Sie die refuse Datei. Mit einer refuse Datei können Sie bestimmte Dateien einer Sammlung von der Übertragung ausschließen. Der Ort der refuse ist base/sup/refuse, wobei base in Ihrem supfile festgelegt wurde. Wir verwenden das Verzeichnis /var/db, der Ort der refuse Datei ist daher /var/db/sup/refuse. Das Format der refuse Datei ist einfach: Sie enthält eine Liste der Dateien und Verzeichnisse, die Sie nicht herunterladen wollen. Zum Beispiel: bin/ usr.bin/ Die refuse Datei spart Anwendern von CVSup, die über eine langsame Internetanbindung verfügen oder deren Internetverbindung zeitlich abgerechnet wird, Zeit, da sie Dateien, die sie nicht benötigen, nicht mehr herunterladen müssen. Weitere Informationen zu refuse Dateien und anderen Eigenschaften von CVSup entnehmen Sie bitte der Manualpage. Ausführen von <application>CVSup</application> Wir können nun eine Aktualisierung mit der folgenden Kommandozeile starten: &prompt.root; cvsup supfile supfile gibt dabei das eben erstelle supfile an. Wenn Sie X11 benutzen, wird cvsup ein GUI starten. Drücken Sie go und schauen Sie zu. Das Beispiel aktualisiert die Dateien im Verzeichnisbaum /usr/src. Sie müssen cvsup als root starten, damit Sie die nötigen Rechte haben, die Dateien zu aktualisieren. Sie sind vielleicht ein bisschen nervös weil Sie das Programm zum ersten Mal anwenden und möchten zuerst einmal einen Testlauf durchführen. Legen Sie dazu ein temporäres Verzeichnis an und übergeben es auf der Kommandozeile von cvsup: &prompt.root; mkdir /var/tmp/dest &prompt.root; cvsup supfile /var/tmp/dest Aktualisierungen werden dann nur in dem angegebenen Verzeichnis vorgenommen. CVSup untersucht die Dateien in /usr/src, wird aber keine dieser Dateien verändern. Die veränderten Dateien finden Sie stattdessen in /var/tmp/dest/usr/src. Die Statusdateien von CVSup werden ebenfalls nicht geändert, sondern in dem angegebenen Verzeichnis abgelegt. Wenn Sie Leseberechtigung in /usr/src haben, brauchen Sie das Programm noch nicht einmal unter root laufen zu lassen. Wenn Sie X11 nicht benutzen wollen oder keine GUIs mögen, sollten Sie cvsup wie folgt aufrufen: &prompt.root; cvsup -g -L 2 supfile verhindert den Start des GUIs. Wenn Sie kein X11 laufen haben, passiert das automatisch, ansonsten müssen Sie diesen Schalter angeben. Mit gibt CVSup Einzelheiten zu jeder Aktualisierung aus. Die Wortfülle der Meldungen können Sie von bis einstellen. In der Voreinstellung werden nur Fehlermeldungen ausgegeben. Eine Zusammenfassung der Optionen von CVSup erhalten Sie mit cvsup -H. Genauere Informationen finden Sie in der Manualpage von CVSup. Wenn Sie mit dem Ablauf der Aktualisierung zufrieden sind, können Sie CVSup regelmäßig aus &man.cron.8; ausführen. In diesem Fall sollten Sie natürlich nicht das GUI benutzen. <application>CVSup</application> Sammlungen Die CVSup Sammlungen sind hierarchisch organisiert. Es gibt wenige große Sammlungen, die in kleinere Teilsammlungen unterteilt sind. Wenn Sie eine große Sammlung beziehen, entspricht das dem Beziehen aller Teilsammlungen. Der Hierarchie der Sammlung wird in der folgenden Aufzählung durch Einrückungen dargestellt. Die am häufigsten benutzte Sammlung ist src-all. cvs-all release=cvs Das &os;-Haupt-Repository einschließlich der Kryptographie-Module. distrib release=cvs Dateien, die zum Verteilen und Spiegeln von &os; benötigt werden. projects-all release=cvs Quelltexte der verschiedenen &os;-Projekte. src-all release=cvs Die &os;-Quellen einschließlich der Kryptographie-Module. src-base release=cvs Verschiedene Dateien unter /usr/src. src-bin release=cvs Benutzer-Werkzeuge die im Einzelbenutzermodus gebraucht werden (/usr/src/bin). src-cddl release=cvs Werkzeuge und Bibliotheken, die der CDDL-Lizenz unterliegen (/usr/src/cddl). src-contrib release=cvs Werkzeuge und Bibliotheken, die nicht aus dem &os; Project stammen und wenig verändert übernommen werden. (/usr/src/contrib). src-crypto release=cvs Kryptographische Werkzeuge und Bibliotheken, die nicht aus dem &os; Project stammen und wenig verändert übernommen werden. (/usr/src/crypto). src-eBones release=cvs Kerberos und DES (/usr/src/eBones). Wird in aktuellen Releases von &os; nicht benutzt. src-etc release=cvs Konfigurationsdateien des Systems (/usr/src/etc). src-games release=cvs Spiele (/usr/src/games). src-gnu release=cvs Werkzeuge, die unter der GNU Public License stehen (/usr/src/gnu). src-include release=cvs Header Dateien (/usr/src/include). src-kerberos5 release=cvs Kerberos5 (/usr/src/kerberos5). src-kerberosIV release=cvs KerberosIV (/usr/src/kerberosIV). src-lib release=cvs Bibliotheken (/usr/src/lib). src-libexec release=cvs Systemprogramme, die von anderen Programmen ausgeführt werden (/usr/src/libexec). src-release release=cvs Dateien, die zum Erstellen eines &os; Releases notwendig sind (/usr/src/release). src-rescue release=cvs Statisch gelinkte Programme zur Wiederherstellung eines defekten Systems. Lesen Sie dazu auch die Manualpage &man.rescue.8; (/usr/src/rescue). src-sbin release=cvs Werkzeuge für den Einzelbenutzermodus (/usr/src/sbin). src-secure release=cvs Kryptographische Bibliotheken und Befehle (/usr/src/secure). src-share release=cvs Dateien, die von mehreren Systemen gemeinsam benutzt werden können (/usr/src/share). src-sys release=cvs Der Kernel (/usr/src/sys). src-sys-crypto release=cvs Kryptographie Quellen des Kernels (/usr/src/sys/crypto). src-tools release=cvs Verschiedene Werkzeuge zur Pflege von &os; (/usr/src/tools). src-usrbin release=cvs Benutzer-Werkzeuge (/usr/src/usr.bin). src-usrsbin release=cvs System-Werkzeuge (/usr/src/usr.sbin). distrib release=self Die Konfigurationsdateien des CVSup Servers. Diese werden von den CVSup benutzt. gnats release=current Die GNATS Datenbank, in der Problemberichte verwaltet werden. mail-archive release=current Das Archiv der &os;-Mailinglisten. Weiterführende Informationen Die CVSup FAQ und weitere Informationen über CVSup finden Sie auf The CVSup Home Page. &os; spezifische Diskussionen über CVSup finden auf der Mailingliste &a.hackers; statt. Dort und auf der Liste &a.announce; werden neue Versionen von CVSup angekündigt. Bei Fragen und Problemberichten zu CVSup lesen Sie bitte die CVSup FAQ. CVSup-Server Die folgende Aufzählung enthält CVSup Server für &os;: &chap.mirrors.cvsup.index.inc; &chap.mirrors.lastmod.inc; &chap.mirrors.cvsup.inc; CVS-Tags Wenn Sie Quellen mit CVS oder CVSup erhalten oder aktualisieren wollen, müssen Sie ein Tag angeben. Ein Tag kann einen bestimmten &os;-Zweig oder einen bestimmten Zeitpunkt (Release-Tag) bestimmen. Tags für Zweige Mit Ausnahme von HEAD (das immer ein gültiges Tag ist), können die folgenden Tags nur im src/-Quellbaum verwendet werden. Die Quellbäume ports/, doc/ und www/ sind nicht verzweigt. HEAD Symbolischer Name für den Hauptzweig, auch &os.current; genannt. Dies ist die Vorgabe, wenn keine Revision angegeben wird. In CVSup wird dieses Tag mit einem . (Punkt) bezeichnet. In CVS ist das die Vorgabe, wenn Sie kein Tag oder eine Revision angeben. Außer Sie wollen einen -STABLE Rechner auf -CURRENT aktualisieren, ist es nicht ratsam, die -CURRENT Quellen auf einem -STABLE Rechner einzuspielen. RELENG_9 Der Entwicklungszweig für &os;-9.X, auch bekannt als &os; 9-STABLE. RELENG_9_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 9.1 durchgeführt werden. RELENG_9_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 9.0 durchgeführt werden. RELENG_8 Der Entwicklungszweig für &os;-8.X, auch bekannt als &os; 8-STABLE. RELENG_8_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 8.3 durchgeführt werden. RELENG_8_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 8.2 durchgeführt werden. RELENG_8_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 8.1 durchgeführt werden. RELENG_8_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 8.0 durchgeführt werden. RELENG_7 Der Entwicklungszweig für &os;-7.X, auch als &os; 7-STABLE bekannt. RELENG_7_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 7.4 durchgeführt werden. RELENG_7_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 7.3 durchgeführt werden. RELENG_7_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 7.2 durchgeführt werden. RELENG_7_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 7.1 durchgeführt werden. RELENG_7_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 7.0 durchgeführt werden. RELENG_6 Der Entwicklungszweig für &os;-6.X, auch als &os; 6-STABLE bekannt. RELENG_6_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 6.4 durchgeführt werden. RELENG_6_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 6.3 durchgeführt werden. RELENG_6_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 6.2 durchgeführt werden. RELENG_6_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 6.1 durchgeführt werden. RELENG_6_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 6.0 durchgeführt werden. RELENG_5 Der &os; 5.X Entwicklungszweig, der auch &os; 5-STABLE genannt wird. RELENG_5_5 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.5 durchgeführt werden. RELENG_5_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.4 durchgeführt werden. RELENG_5_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.3 durchgeführt werden. RELENG_5_2 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.2 und &os; 5.2.1 durchgeführt werden. RELENG_5_1 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.1 durchgeführt werden. RELENG_5_0 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 5.0 durchgeführt werden. RELENG_4 Der &os; 4.X Entwicklungszweig, der auch &os; 4-STABLE genannt wird. RELENG_4_11 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.11 durchgeführt werden. RELENG_4_10 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.10 durchgeführt werden. RELENG_4_9 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.9 durchgeführt werden. RELENG_4_8 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.8 durchgeführt werden. RELENG_4_7 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.7 durchgeführt werden. RELENG_4_6 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.6 und &os; 4.6.2 durchgeführt werden. RELENG_4_5 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.5 durchgeführt werden. RELENG_4_4 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.4 durchgeführt werden. RELENG_4_3 Der Zweig, auf dem sicherheitsrelevante oder kritische Fehlerbehebungen für &os; 4.3 durchgeführt werden. RELENG_3 Der &os;-3.X Entwicklungszweig, der auch 3.X-STABLE genannt wird. RELENG_2_2 Der &os;-2.2.X Entwicklungszweig, der auch 2.2-STABLE genannt wird. Release-Tags Diese Tags geben den Zeitpunkt an, an dem eine bestimme &os;-Version veröffentlicht wurde. Das Erstellen einer Release ist in den Dokumenten Release Engineering Information und Release Process beschrieben. Der src-Baum benutzt Tags, deren Namen mit RELENG_ anfangen. Die Bäume ports und doc benutzen Tags, deren Namen mit RELEASE anfangen. - Im Baum www werden + Im Baum www werden keine Release-Tags verwendet. RELENG_9_2_0_RELEASE &os; 9.2 RELENG_9_1_0_RELEASE &os; 9.1 RELENG_9_0_0_RELEASE &os; 9.0 RELENG_8_3_0_RELEASE &os; 8.3 RELENG_8_2_0_RELEASE &os; 8.2 RELENG_8_1_0_RELEASE &os; 8.1 RELENG_8_0_0_RELEASE &os; 8.0 RELENG_7_4_0_RELEASE &os; 7.4 RELENG_7_3_0_RELEASE &os; 7.3 RELENG_7_2_0_RELEASE &os; 7.2 RELENG_7_1_0_RELEASE &os; 7.1 RELENG_7_0_0_RELEASE &os; 7.0 RELENG_6_4_0_RELEASE &os; 6.4 RELENG_6_3_0_RELEASE &os; 6.3 RELENG_6_2_0_RELEASE &os; 6.2 RELENG_6_1_0_RELEASE &os; 6.1 RELENG_6_0_0_RELEASE &os; 6.0 RELENG_5_5_0_RELEASE &os; 5.5 RELENG_5_4_0_RELEASE &os; 5.4 RELENG_4_11_0_RELEASE &os; 4.11 RELENG_5_3_0_RELEASE &os; 5.3 RELENG_4_10_0_RELEASE &os; 4.10 RELENG_5_2_1_RELEASE &os; 5.2.1 RELENG_5_2_0_RELEASE &os; 5.2 RELENG_4_9_0_RELEASE &os; 4.9 RELENG_5_1_0_RELEASE &os; 5.1 RELENG_4_8_0_RELEASE &os; 4.8 RELENG_5_0_0_RELEASE &os; 5.0 RELENG_4_7_0_RELEASE &os; 4.7 RELENG_4_6_2_RELEASE &os; 4.6.2 RELENG_4_6_1_RELEASE &os; 4.6.1 RELENG_4_6_0_RELEASE &os; 4.6 RELENG_4_5_0_RELEASE &os; 4.5 RELENG_4_4_0_RELEASE &os; 4.4 RELENG_4_3_0_RELEASE &os; 4.3 RELENG_4_2_0_RELEASE &os; 4.2 RELENG_4_1_1_RELEASE &os; 4.1.1 RELENG_4_1_0_RELEASE &os; 4.1 RELENG_4_0_0_RELEASE &os; 4.0 RELENG_3_5_0_RELEASE &os;-3.5 RELENG_3_4_0_RELEASE &os;-3.4 RELENG_3_3_0_RELEASE &os;-3.3 RELENG_3_2_0_RELEASE &os;-3.2 RELENG_3_1_0_RELEASE &os;-3.1 RELENG_3_0_0_RELEASE &os;-3.0 RELENG_2_2_8_RELEASE &os;-2.2.8 RELENG_2_2_7_RELEASE &os;-2.2.7 RELENG_2_2_6_RELEASE &os;-2.2.6 RELENG_2_2_5_RELEASE &os;-2.2.5 RELENG_2_2_2_RELEASE &os;-2.2.2 RELENG_2_2_1_RELEASE &os;-2.2.1 RELENG_2_2_0_RELEASE &os;-2.2.0 <application>rsync</application>-Server rsync wird ähnlich wie &man.rcp.1; verwendet, besitzt aber mehr Optionen und verwendet das rsync remote-update Protokoll, das nur geänderte Dateien überträgt und damit viel schneller als ein normaler Kopiervorgang ist. rsync ist sehr nützlich, wenn Sie einen &os;-FTP-Spiegel oder einen CVS-Spiegel betreiben. Das Programm ist für viele Betriebssysteme erhältlich, mit &os; können Sie den Port net/rsync oder das fertige Paket benutzen. Die folgenden Server stellen &os; über das rsync Protokoll zur Verfügung: Großbritannien rsync://rsync.mirrorservice.org/ Verfügbare Sammlungen: ftp.freebsd.org: Kompletter Spiegel des &os;-FTP-Servers. Niederlande rsync://ftp.nl.FreeBSD.org/ Verfügbare Sammlungen: &os;: Kompletter Spiegel des &os;-FTP-Servers. Russland rsync://ftp.mtu.ru/ Verfügbare Sammlungen: &os;: Kompletter Spiegel des &os;-FTP-Servers. &os;-gnats: Die GNATS-Datenbank zur Verwaltung von Problemberichten. &os;-Archive: Ein Spiegel des &os;-Archive-FTP-Servers. Schweden rsync://ftp4.se.freebsd.org/ Verfügbare Sammlungen: &os;: Kompletter Spiegel des &os;-FTP-Servers. Taiwan rsync://ftp.tw.FreeBSD.org/ rsync://ftp2.tw.FreeBSD.org/ rsync://ftp6.tw.FreeBSD.org/ Verfügbare Sammlungen: &os;: Kompletter Spiegel des &os;-FTP-Servers. Tschechische Republik rsync://ftp.cz.FreeBSD.org/ Verfügbare Sammlungen: ftp: Unvollständiger Spiegel des &os;-FTP-Servers. &os;: Vollständiger Spiegel des &os;-FTP-Servers. USA rsync://ftp-master.FreeBSD.org/ Dieser Server darf nur von primären Spiegeln benutzt werden. Verfügbare Sammlungen: &os;: Das Hauptarchiv des &os; FTP Servers. acl: Die primäre ACL-Liste. rsync://ftp13.FreeBSD.org/ Verfügbare Sammlungen: &os;: Kompletter Spiegel des &os;-FTP-Servers.