Das FreeBSD-Handbuch

The FreeBSD German Documentation Project

Willkommen bei FreeBSD! Dieses Handbuch beschreibt die Installation und den täglichen Umgang mit FreeBSD 8.3-RELEASE und FreeBSD 9.0-RELEASE. Das Handbuch ist jederzeit unter Bearbeitung und das Ergebnis der Arbeit vieler Einzelpersonen. Dies kann dazu führen, dass bestimmte Bereiche nicht mehr aktuell sind und auf den neuesten Stand gebracht werden müssen. Bei Unklarheiten empfiehlt es sich daher stets, die englische Originalversion des Handbuchs zu lesen.

Wenn Sie bei der Übersetzung des Handbuchs mithelfen möchten, senden Sie bitte eine E-Mail an die Mailingliste 'FreeBSD German Documentation Project' .

Die aktuelle Version des Handbuchs ist immer auf dem FreeBSD-Webserver verfügbar und kann in verschiedenen Formaten und in komprimierter Form vom FreeBSD-FTP-Server oder einem der vielen Spiegel herunter geladen werden (ältere Versionen finden Sie hingegen unter http://docs.FreeBSD.org/doc/). Vielleicht möchten Sie das Handbuch aber auch durchsuchen.

Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.

  2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Wichtig: THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

FreeBSD ist ein eingetragenes Warenzeichen der FreeBSD Foundation.

3Com und HomeConnect sind eingetragene Warenzeichen der 3Com Corporation.

3ware und Escalade sind eingetragene Warenzeichen von 3ware Inc.

ARM ist ein eingetragenes Warenzeichen von ARM Limited.

Adaptec ist ein eingetragenes Warenzeichen von Adaptec, Inc.

Adobe, Acrobat, Acrobat Reader und PostScript sind entweder eingetragene Warenzeichen oder Warenzeichen von Adobe Systems Incorporated in den Vereinigten Staaten und/oder in anderen Ländern.

Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime und TrueType sind eingetragene Warenzeichen von Apple Computer, Inc., in den Vereinigten Staaten und anderen Ländern.

Corel und WordPerfect sind Warenzeichen oder eingetragene Warenzeichen der Corel Corporation und/oder ihren Gesellschaften in den Vereinigten Staaten und/oder anderen Ländern.

Sound Blaster ist ein Warenzeichen von Creative Technology Ltd. in den Vereinigten Staaten und/oder in anderen Ländern.

CVSup ist ein eingetragenes Warenzeichen von John D. Polstra.

Heidelberg, Helvetica, Palatino und Times Roman sind Marken der Heidelberger Druckmaschinen AG in Deutschland und anderen Ländern.

IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390 und ThinkPad sind Warenzeichen der International Business Machines Corporation in den Vereinigten Staaten, anderen Ländern oder beiden.

IEEE, POSIX und 802 sind eingetragene Warenzeichen vom Institute of Electrical and Electronics Engineers, Inc. in den Vereinigten Staaten.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium und Xeon sind Warenzeichen oder eingetragene Warenzeichen der Intel Corporation oder ihrer Gesellschaften in den Vereinigten Staaten und in anderen Ländern.

Intuit und Quicken sind eingetragene Warenzeichen und/oder Dienstleistungsmarken von Intuit Inc. oder einer ihrer Geselllschaften in den Vereinigten Staaten und in anderen Ländern.

Linux ist ein eingetragenes Warenzeichen von Linus Torvalds.

LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID und Mylex sind Warenzeichen oder eingetragene Warenzeichen der LSI Logic Corp.

M-Systems und DiskOnChip sind Warenzeichen oder eingetragene Warenzeichen von M-Systems Flash Disk Pioneers, Ltd.

Macromedia, Flash und Shockwave sind Warenzeichen oder eingetragene Warenzeichen von Macromedia, Inc. in den Vereinigten Staaten und/oder in anderen Ländern.

Microsoft, MS-DOS, Outlook, Windows, Windows Media und Windows NT sind entweder eingetragene Warenzeichen oder Warenzeichen der Microsoft Corporation in den Vereinigten Staaten und/oder in anderen Ländern.

Netscape und Netscape Navigator sind eingetragene Warenzeichen der Netscape Communications Corporation in den Vereinigten Staaten und in anderen Ländern.

GateD und NextHop sind eingetragene Warenzeichen und Warenzeichen von NextHop in den Vereinigten Staaten und in anderen Ländern.

Motif, OSF/1 und UNIX sind eingetragene Warenzeichen und IT DialTone und The Open Group sind Warenzeichen der The Open Group in den Vereinigten Staaten und in anderen Ländern.

Oracle ist ein eingetragenes Warenzeichen der Oracle Corporation.

PowerQuest und PartitionMagic sind eingetragene Warenzeichender PowerQuest Corporation in den Vereinigten Staaten und/oder anderen Ländern.

RealNetworks, RealPlayer und RealAudio sind eingetragene Warenzeichen von RealNetworks, Inc.

Red Hat, RPM, sind Warenzeichen oder eingetragene Warenzeichen von Red Hat, Inc. in den Vereinigten Staaten und in anderen Ländern.

SAP, R/3 und mySAP sind Warenzeichen oder eingetragene Warenzeichen der SAP AG in Deutschland und in anderen Ländern der Welt.

Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JSP, JVM, Netra, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS und Ultra sind Warenzeichen oder eingetragene Warenzeichen von Sun Microsystems, Inc. in den Vereinigten Staaten und in anderen Ländern.

Symantec und Ghost sind eingetragene Warenzeichen der Symantec Corporation in den Vereinigten Staaten und in anderen Ländern.

MATLAB ist ein eingetragenes Warenzeichen von The MathWorks, Inc.

SpeedTouch ist ein Warenzeichen von Thomson

U.S. Robotics und Sportster sind eingetragene Warenzeichen der U.S. Robotics Corporation.

VMware ist ein Warenzeichen von VMware, Inc

Waterloo Maple und Maple sind Warenzeichen oder eingetragene Warenzeichen von Waterloo Maple Inc.

Mathematica ist ein eingetragenes Warenzeichen von Wolfram Research, Inc.

XFree86 ist ein Warenzeichen von The XFree86 Project, Inc.

Ogg Vorbis und Xiph.Org sind Warenzeichen von Xiph.Org.

Viele Produktbezeichnungen von Herstellern und Verkäufern sind Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist, werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol “™” oder dem Symbol “®” gekennzeichnet.


Inhaltsverzeichnis
Vorwort
I. Erste Schritte
1. Einführung
1.1. Übersicht
1.2. Willkommen bei FreeBSD!
1.3. Das FreeBSD Project
2. FreeBSD 8.X (und älter) installieren
2.1. Übersicht
2.2. Hardware-Anforderungen
2.3. Vor der Installation
2.4. Die Installation starten
2.5. Das Werkzeug sysinstall
2.6. Plattenplatz für FreeBSD bereitstellen
2.7. Den Installationsumfang bestimmen
2.8. Das Installationsmedium auswählen
2.9. Die Installation festschreiben
2.10. Arbeiten nach der Installation
2.11. Fehlersuche
2.12. Anspruchsvollere Installationen
2.13. Eigene Installationsmedien herstellen
3. FreeBSD 9.x (und neuer) installieren
3.1. Übersicht
3.2. Hardware-Anforderungen
3.3. Vor der Installation
3.4. Die Installation starten
3.5. Das bsdinstall-Werkzeug
3.6. Installation aus dem Netzwerk
3.7. Plattenplatz bereitstellen
3.8. Die Installation festschreiben
3.9. Arbeiten nach der Installation
3.10. Fehlerbehebung
4. Grundlagen des UNIX Betriebssystems
4.1. Übersicht
4.2. Virtuelle Konsolen und Terminals
4.3. Zugriffsrechte
4.4. Verzeichnis-Strukturen
4.5. Festplatten, Slices und Partitionen
4.6. Anhängen und Abhängen von Dateisystemen
4.7. Prozesse
4.8. Dämonen, Signale und Stoppen von Prozessen
4.9. Shells
4.10. Text-Editoren
4.11. Geräte und Gerätedateien
4.12. Binärformate
4.13. Weitere Informationen
5. Installieren von Anwendungen: Pakete und Ports
5.1. Übersicht
5.2. Installation von Software
5.3. Suchen einer Anwendung
5.4. Benutzen des Paketsystems
5.5. Benutzen der Ports-Sammlung
5.6. Nach der Installation
5.7. Kaputte Ports
6. Das X-Window-System
6.1. Übersicht
6.2. X-Grundlagen
6.3. X11 installieren
6.4. X11 konfigurieren
6.5. Schriftarten in X11 benutzen
6.6. Der X-Display-Manager
6.7. Grafische Oberflächen
II. Oft benutzte Funktionen
7. Desktop-Anwendungen
7.1. Übersicht
7.2. Browser
7.3. Büroanwendungen
7.4. Anzeigen von Dokumenten
7.5. Finanzsoftware
7.6. Zusammenfassung
8. Multimedia
8.1. Übersicht
8.2. Soundkarten einrichten
8.3. MP3-Audio
8.4. Videos wiedergeben
8.5. TV-Karten einrichten
8.6. MythTV
8.7. Scanner
9. Konfiguration des FreeBSD-Kernels
9.1. Übersicht
9.2. Wieso einen eigenen Kernel bauen?
9.3. Informationen über die vorhandene Hardware beschaffen
9.4. Kerneltreiber, Subsysteme und Module
9.5. Erstellen und Installation eines angepassten Kernels
9.6. Die Kernelkonfigurationsdatei
9.7. Wenn etwas schiefgeht
10. Drucken
10.1. Übersicht
10.2. Einführung
10.3. Grund-Konfiguration
10.4. Erweiterte Drucker-Konfiguration
10.5. Drucker verwenden
10.6. Alternativen zum LPD-Drucksystem
10.7. Problembehandlung
11. Linux-Binärkompatibilität
11.1. Übersicht
11.2. Installation
11.3. Mathematica® installieren
11.4. Maple™ installieren
11.5. MATLAB® installieren
11.6. Oracle® installieren
11.7. Weiterführende Themen
III. Systemadministration
12. Konfiguration und Tuning
12.1. Übersicht
12.2. Vorbereitende Konfiguration
12.3. Basiskonfiguration
12.4. Konfiguration von Anwendungen
12.5. Start von Diensten
12.6. Programme mit cron starten
12.7. Das rc-System für Systemdienste
12.8. Einrichten von Netzwerkkarten
12.9. Virtual Hosts
12.10. Konfigurationsdateien
12.11. Einstellungen mit sysctl
12.12. Tuning von Laufwerken
12.13. Einstellungen von Kernel Limits
12.14. Hinzufügen von Swap-Bereichen
12.15. Energie- und Ressourcenverwaltung
12.16. ACPI-Fehlersuche
13. FreeBSDs Bootvorgang
13.1. Übersicht
13.2. Das Problem des Bootens
13.3. Boot-Manager und Boot-Phasen
13.4. Kernel Interaktion während des Bootprozesses
13.5. Konfiguration von Geräten
13.6. Init: Initialisierung der Prozess-Kontrolle
13.7. Der Shutdown-Vorgang
14. Benutzer und grundlegende Account-Verwaltung
14.1. Übersicht
14.2. Einführung
14.3. Der Superuser-Account
14.4. System-Accounts
14.5. Benutzer-Accounts
14.6. Accounts verändern
14.7. Benutzer einschränken
14.8. Gruppen
15. Sicherheit
15.1. Übersicht
15.2. Einführung
15.3. Absichern von FreeBSD
15.4. DES, Blowfish, MD5, und Crypt
15.5. Einmalpasswörter
15.6. TCP-Wrapper
15.7. Kerberos5
15.8. OpenSSL
15.9. VPNs mit IPsec
15.10. OpenSSH
15.11. Zugriffskontrolllisten für Dateisysteme
15.12. Sicherheitsprobleme in Software Dritter überwachen
15.13. FreeBSD Sicherheitshinweise
15.14. Prozess-Überwachung
16. Jails
16.1. Übersicht
16.2. Jails - Definitionen
16.3. Einführung
16.4. Einrichtung und Verwaltung von Jails
16.5. Feinabstimmung und Administration
16.6. Anwendung von Jails
17. Verbindliche Zugriffskontrolle
17.1. Übersicht
17.2. Schlüsselbegriffe
17.3. Erläuterung
17.4. MAC Labels verstehen
17.5. Planung eines Sicherheitsmodells
17.6. Modulkonfiguration
17.7. Das MAC Modul seeotheruids
17.8. Das MAC Modul bsdextended
17.9. Das MAC Modul ifoff
17.10. Das MAC Modul portacl
17.11. Das MAC Modul partition
17.12. Das MAC Modul Multi-Level Security
17.13. Das MAC Modul Biba
17.14. Das MAC Modul LOMAC
17.15. Beispiel 1: Nagios in einer MAC Jail
17.16. Beispiel 2: User Lock Down
17.17. Fehler im MAC beheben
18. Security Event Auditing
18.1. Einleitung
18.2. Schlüsselbegriffe
18.3. Installation der Audit-Unterstützung
18.4. Die Konfiguration des Audit
18.5. Administration des Audit-Subsystems
19. Speichermedien
19.1. Übersicht
19.2. Gerätenamen
19.3. Hinzufügen von Laufwerken
19.4. RAID
19.5. USB Speichermedien
19.6. CDs benutzen
19.7. DVDs benutzen
19.8. Disketten benutzen
19.9. Bandmedien benutzen
19.10. Was ist mit Backups auf Disketten?
19.11. Backup-Strategien
19.12. Datensicherung
19.13. Netzwerk-, speicher- und dateibasierte Dateisysteme
19.14. Schnappschüsse von Dateisystemen
19.15. Dateisystem-Quotas
19.16. Partitionen verschlüsseln
19.17. Den Auslagerungsspeicher verschlüsseln
19.18. Highly Available Storage (HAST)
20. GEOM: Modulares Framework zur Plattentransformation
20.1. Übersicht
20.2. Einführung in GEOM
20.3. RAID0 - Striping
20.4. RAID1 - Spiegelung
20.5. GEOM Gate Netzwerkgeräte
20.6. Das Labeln von Laufwerken
20.7. UFS Journaling in GEOM
21. Dateisystemunterstützung
21.1. Übersicht
21.2. Das Z-Dateisystem (ZFS)
22. Der Vinum Volume Manager
22.1. Übersicht
22.2. Ihre Platten sind zu klein.
22.3. Mögliche Engpässe
22.4. Datenintegrität
22.5. Vinum-Objekte
22.6. Einige Beispiele
22.7. Objektbenennung
22.8. Vinum konfigurieren
22.9. Vinum für das Root-Dateisystem benutzen
23. Virtualisierung
23.1. Übersicht
23.2. FreeBSD als Gast-Betriebssystem
23.3. FreeBSD als Host-Betriebssystem
24. Lokalisierung - I18N/L10N einrichten und benutzen
24.1. Übersicht
24.2. Grundlagen
24.3. Lokale Anpassungen benutzen
24.4. I18N-Programme übersetzen
24.5. Lokalisierung für einzelne Sprachen
25. FreeBSD aktualisieren
25.1. Übersicht
25.2. FreeBSD-Update
25.3. Portsnap: Ein Werkzeug zur Aktualisierung der Ports-Sammlung
25.4. Aktualisieren der Dokumentationssammlung
25.5. Einem Entwicklungszweig folgen
25.6. Synchronisation der Quellen
25.7. Das komplette Basissystem neu bauen
25.8. Veraltete Dateien, Verzeichnisse und Bibliotheken löschen
25.9. Installation mehrerer Maschinen
26. DTrace
26.1. Überblick
26.2. Unterschiede in der Implementierung
26.3. Die DTrace Unterstützung aktivieren
26.4. DTrace verwenden
26.5. Die Sprache D
IV. Netzwerke
27. Serielle Datenübertragung
27.1. Übersicht
27.2. Einführung
27.3. Terminals
27.4. Einwählverbindungen
27.5. Verbindungen nach Außen
27.6. Einrichten der seriellen Konsole
28. PPP und SLIP
28.1. Übersicht
28.2. User-PPP
28.3. Kernel-PPP
28.4. Probleme bei PPP-Verbindungen
28.5. PPP over Ethernet (PPPoE)
28.6. PPP over ATM (PPPoA)
28.7. SLIP
29. Elektronische Post (E-Mail)
29.1. Terminologie
29.2. Übersicht
29.3. Elektronische Post benutzen
29.4. sendmail-Konfiguration
29.5. Wechseln des Mailübertragungs-Agenten
29.6. Fehlerbehebung
29.7. Weiterführende Themen
29.8. SMTP über UUCP
29.9. Ausgehende E-Mail über einen Relay versenden
29.10. E-Mail über Einwahl-Verbindungen
29.11. SMTP-Authentifizierung
29.12. E-Mail-Programme
29.13. E-Mails mit fetchmail abholen
29.14. E-Mails mit procmail filtern
30. Netzwerkserver
30.1. Übersicht
30.2. Der inetd “Super-Server”
30.3. NFS - Network File System
30.4. NIS/YP - Network Information Service
30.5. Automatische Netzwerkkonfiguration mit DHCP
30.6. DNS - Domain Name Service
30.7. Der Apache HTTP-Server
30.8. FTP - File Transfer Protocol
30.9. Mit Samba einen Datei- und Druckserver für Microsoft Windows-Clients einrichten
30.10. Die Uhrzeit mit NTP synchronisieren
30.11. Protokollierung von anderen Hosts mittels syslogd
31. Firewalls
31.1. Einführung
31.2. Firewallkonzepte
31.3. Firewallpakete
31.4. Paket Filter (PF) von OpenBSD und ALTQ
31.5. Die IPFILTER-Firewall (IPF)
31.6. IPFW
32. Weiterführende Netzwerkthemen
32.1. Übersicht
32.2. Gateways und Routen
32.3. Drahtlose Netzwerke
32.4. Bluetooth
32.5. LAN-Kopplung mit einer Bridge
32.6. Link-Aggregation und Failover
32.7. Start und Betrieb von FreeBSD über ein Netzwerk
32.8. ISDN - diensteintegrierendes digitales Netzwerk
32.9. NAT - Network Address Translation
32.10. PLIP - Parallel Line IP
32.11. IPv6 - Internet Protocol Version 6
32.12. ATM - Asynchronous Transfer Mode
32.13. CARP - Common Address Redundancy Protocol
V. Anhang
A. Bezugsquellen für FreeBSD
A.1. CD-ROM und DVD Verleger
A.2. FTP-Server
A.3. BitTorrent
A.4. Anonymous CVS
A.5. CTM
A.6. Benutzen von CVSup
A.7. CVS-Tags
A.8. AFS-Server
A.9. rsync-Server
B. Bibliografie
B.1. Bücher und Magazine speziell für FreeBSD
B.2. Handbücher
B.3. Administrations-Anleitungen
B.4. Programmierhandbücher
B.5. Betriebssystem-Interna
B.6. Sicherheits-Anleitung
B.7. Hardware-Anleitung
B.8. UNIX® Geschichte
B.9. Magazine und Journale
C. Ressourcen im Internet
C.1. Mailinglisten
C.2. Usenet-News
C.3. World Wide Web Server
C.4. E-Mail Adressen
D. PGP Schlüssel
D.1. Ansprechpartner
D.2. Mitglieder des Core Teams
D.3. Entwickler
FreeBSD Glossar
Stichwortverzeichnis
Kolophon
Tabellenverzeichnis
2-1. Gerätekonfiguration
2-2. Partitionen auf dem ersten Laufwerk
2-3. Partitionen auf weiteren Laufwerken
2-4. FreeBSD 7.X und 8.X ISO-Abbilder
3-1. Partitionierungsschemas
4-1. Laufwerk-Codes
19-1. Namenskonventionen von physikalischen Laufwerken
22-1. Vinum-Plexus - Aufbau
27-1. Nullmodemkabel vom Typ DB-25-zu-DB-25
27-2. Nullmodemkabel vom Typ DB-9-zu-DB-9
27-3. Nullmodemkabel vom Typ DB-9-zu-DB-25
27-4. Signalnamen
32-1. Die Netzwerk-Verdrahtung eines parallelen Kabels
32-2. Reservierte IPv6-Adressen
Abbildungsverzeichnis
2-1. FreeBSD Boot Loader Menu
2-2. Ausgabe der Geräteerkennung
2-3. Ihr Land auswählen
2-4. Die Tastaturbelegung auswählen
2-5. Die Gebrauchsanweisung von sysinstall auswählen
2-6. Die Dokumentation abrufen
2-7. Das Dokumentationsmenü von sysinstall
2-8. Das Hauptmenü von sysinstall
2-9. Sysinstall Keymap Menu
2-10. Das Hauptmenü von sysinstall
2-11. Optionen von sysinstall
2-12. Die Standard-Installation starten
2-13. Ein Laufwerk für Fdisk aussuchen
2-14. Typischer Fdisk-Bildschirm vor dem Editieren
2-15. Eine Partition über die gesamte Platte
2-16. Sysinstall Boot-Manager-Menü
2-17. Die Laufwerksauswahl verlassen
2-18. Sysinstall Disklabel-Editor
2-19. Sysinstall Disklabel-Editor mit automatischen Vorgaben
2-20. Die Größe einer Partition festlegen
2-21. Die Größe einer Partition ändern
2-22. Den Partitionstyp festlegen
2-23. Den Mountpoint festlegen
2-24. Sysinstall Disklabel-Editor
2-25. Die Distribution auswählen
2-26. Die Distributionen bestätigen
2-27. Das Installationsmedium auswählen
2-28. Eine Netzwerkkarte auswählen
2-29. Die Netzwerkkarte ed0 konfigurieren
2-30. inetd.conf editieren
2-31. Anonymous-FTP konfigurieren
2-32. Begrüßungsmeldung des FTP-Servers editieren
2-33. exports editieren
2-34. Merkmale der Systemkonsole
2-35. Bildschirmschoner auswählen
2-36. Den Bildschirmschoner einstellen
2-37. Die Konfiguration der Systemkonsole verlassen
2-38. Das Gebiet auswählen
2-39. Das Land auswählen
2-40. Die Zeitzone auswählen
2-41. Das Mausprotokoll festlegen
2-42. Das Mausprotokoll festlegen
2-43. Den Mausport einstellen
2-44. Den Mausport einstellen
2-45. Den Mouse-Daemon aktivieren
2-46. Den Mouse-Daemon testen
2-47. Die Paketkategorie aussuchen
2-48. Pakete auswählen
2-49. Pakete installieren
2-50. Paketinstallation bestätigen
2-51. Benutzerkonto auswählen
2-52. Benutzerkonto anlegen
2-53. Benutzermenü verlassen
2-54. Die Installation beenden
2-55. Netzwerkdienste - obere Hälfte
2-56. Den MTA festlegen
2-57. Ntpdate konfigurieren
2-58. Netzwerkdienste - untere Hälfte
3-1. Das FreeBSD-Bootloader Menü
3-2. Typical Device Probe Results
3-3. Auswahl der Verwendung des Installationsmediums
3-4. Tastaturbelegung festlegen
3-5. Tastaturauswahlbildschirm
3-6. Festlegen des Rechnernamens
3-7. Komponenten für die Installation auswählen
3-8. Installation über das Netzwerk
3-9. Einen Spiegelserver wählen
3-10. Geführte oder manuelle Partitionierung auswählen
3-11. Aus mehreren Platten eine auswählen
3-12. Auswahl der gesamten Platte oder einer Partition
3-13. Überprüfen der erstellen Partitionen
3-14. Partitionen manuell erstellen
3-15. Partitionen manuell anlegen
3-16. Partitionen manuell erzeugen
3-17. Letzte Bestätigung
3-18. Herunterladen der Distributionsdateien
3-19. Überprüfen der Distributionsdateien
3-20. Entpacken der Distributionsdateien
3-21. Das root-Passwort setzen
3-22. Eine zu konfigurierende Netzwerkschnittstelle auswählen
3-23. Nach drahtlosen Access Points scannen
3-24. Ein drahtloses Netzwerk auswählen
3-25. Verbindungsaufbau mit WPA2
3-26. Auswahl von IPv4
3-27. Auswählen der IPv4-Konfiguration über DHCP
3-28. Statische IPv4-Konfiguration
3-29. Auswahl von IPv6
3-30. Auswahl der IPv6 SLAAC-Konfiguration
3-31. Statische IPv6-Konfiguration
3-32. DNS-Konfiguration
3-33. Lokale oder UTC-Zeit
3-34. Das Gebiet auswählen
3-35. Das Land auswählen
3-36. Wählen einer Zeitzone
3-37. Bestätigen der Zeitzone
3-38. Auswahl zusätzlicher Dienste
3-39. Aktivierung der Absturzaufzeichnung
3-40. Benutzerkonten hinzufügen
3-41. Benutzerinformationen eingeben
3-42. Verlassen der Benutzer- und Gruppenverwaltung
3-43. Letzte Schritte der Konfiguration
3-44. Manuelle Konfiguration
3-45. Die Installation vervollständigen
22-1. Konkatenierte Anordnung
22-2. Striped-Anordnung
22-3. RAID-5 Aufbau
22-4. Ein einfaches Vinum-Volume
22-5. Ein gespiegeltes Vinum Volume
22-6. Ein Striped Vinum Volume
22-7. Ein gespiegeltes, Striped Vinum Volume
Beispiele
2-1. Eine bestehende Partition verwenden
2-2. Eine bestehende Partition verkleinern
3-1. Eine existierende Partition verändern
3-2. Verkleinern einer bestehenden Partition
3-3. Ein traditionelles, partitioniertes Dateisystem erstellen
4-1. Namen von Platten, Slices und Partitionen
4-2. Aufteilung einer Festplatte
5-1. Download vor Installation eines Pakets
12-1. Erstellen einer Swap-Datei
13-1. boot0-Screenshot
13-2. boot2-Screenshot
13-3. Auf insecure gesetzte Konsole in /etc/ttys
14-1. Einen Benutzer unter FreeBSD anlegen
14-2. Interaktives Löschen von Account mit rmuser
14-3. Interaktives chpass des Superusers
14-4. Interaktives chpass eines normalen Benutzers
14-5. Wechseln des Passworts
14-6. Als Superuser das Passwort eines anderen Accounts verändern
14-7. Setzen der Mitgliederliste einer Gruppe mit pw(8)
14-8. Ein Gruppenmitglied mit pw hinzufügen
14-9. Hinzufügen eines neuen Gruppenmitglieds mittels pw(8)
14-10. Mit id die Gruppenzugehörigkeit bestimmen
15-1. Mit SSH einen sicheren Tunnel für SMTP erstellen
19-1. dump mit ssh benutzen
19-2. dump über ssh mit gesetzter RSH benutzen
19-3. Einhängen eines existierenden Abbildes unter FreeBSD
19-4. Erstellen eines dateibasierten Laufwerks mit mdconfig
19-5. Mit mdmfs ein dateibasiertes Dateisystem erstellen
19-6. Erstellen eines speicherbasierten Laufwerks mit mdconfig
19-7. Erstellen eines speicherbasierten Laufwerks mit mdmfs
20-1. Die Partitionen einer Bootplatte labeln
27-1. Einträge in /etc/ttys hinzufügen
29-1. Konfigurieren der sendmail Zugriffsdatenbank
29-2. E-Mail Aliases
29-3. Beispiel einer virtuellen Domänen Zuordnung
30-1. Die inetd-Konfiguration neu einlesen
30-2. Ein exportiertes Dateisystem mit amd in den Verzeichnisbaum einhängen
30-3. Django mit Apache2, mod_python3, und PostgreSQL installieren
30-4. Apache-Konfiguration für Django/mod_python
32-1. LACP Aggregation mit einem Switch von Cisco®
32-2. Ausfallsicherer Modus
32-3. Failover Modus zwischen drahtgebundenen und drahtlosen Schnittstellen
32-4. Kleines Netzwerk (Privatnetz)
32-5. Großes Netzwerk (Firmennetz)
A-1. ls(1) von -CURRENT auschecken
A-2. Den src/-Baum über SSH auschecken
A-3. ls(1) aus dem 8-STABLE-Zweig auschecken
A-4. Änderungen in ls(1) zwischen 5.3 RELEASE und 5.4 RELEASE (als unified diff)
A-5. Gültige Modulnamen herausfinden

Vorwort

Über dieses Buch

Der erste Teil dieses Buchs führt FreeBSD-Einsteiger durch den Installationsprozess und stellt leicht verständlich Konzepte und Konventionen vor, die UNIX® zu Grunde liegen. Sie müssen nur neugierig sein und bereitwillig neue Konzepte aufnehmen, wenn diese vorgestellt werden, um diesen Teil durchzuarbeiten.

Wenn Sie den ersten Teil bewältigt haben, bietet der umfangreichere zweite Teil eine verständliche Darstellung vieler Themen, die für FreeBSD-Administratoren relevant sind. Wenn Kapitel auf anderen Kapiteln aufbauen, wird das in der Übersicht am Anfang eines Kapitels erläutert.

Weitere Informationsquellen entnehmen Sie bitte Anhang B.

Änderungen gegenüber der dritten Auflage

Die aktuelle Auflage des Handbuchs ist das Ergebnis der engagierten Arbeit Hunderter Mitarbeiter des FreeBSD Documentation Projects in den vergangenen 10 Jahren. Die wichtigsten Änderungen dieser Auflage gegenüber der dritten Auflage von 2004 sind:

Änderungen gegenüber der zweiten Auflage (2004)

Die dritte Auflage des Handbuchs war das Ergebnis der über zwei Jahre dauernden engagierten Arbeit des FreeBSD Documentation Projects. Die gedruckte Ausgabe war derart umfangreich, dass es notwendig wurde, sie in zwei Bände aufzuteilen. Die wichtigsten Änderungen dieser Auflage waren:

Änderungen gegenüber der ersten Auflage (2001)

Die zweite Auflage ist das Ergebnis der engagierten Arbeit der Mitglieder des FreeBSD Documentation Projects über zwei Jahre. Die wichtigsten Änderungen gegenüber der ersten Auflage sind:

Gliederung

Dieses Buch ist in fünf Abschnitte unterteilt. Der erste Abschnitt, Erste Schritte, behandelt die Installation und die Grundlagen von FreeBSD. Dieser Abschnitt sollte in der vorgegebenen Reihenfolge durchgearbeitet werden, schon Bekanntes darf aber übersprungen werden. Der zweite Abschnitt, Oft benutzte Funktionen, behandelt häufig benutzte Funktionen von FreeBSD. Dieser Abschnitt sowie alle nachfolgenden Abschnitte können in beliebiger Reihenfolge gelesen werden. Jeder Abschnitt beginnt mit einer kurzen Übersicht, die das Thema des Abschnitts und das nötige Vorwissen erläutert. Die Übersichten helfen dem Leser, interessante Kapitel zu finden und erleichtern das Stöbern im Handbuch. Der dritte Abschnitt, Systemadministration, behandelt die Administration eines FreeBSD-Systems. Der vierte Abschnitt, Netzwerke, bespricht Netzwerke und Netzwerkdienste. Der fünfte Abschnitt enthält Anhänge und Verweise auf weitere Informationen.

Kapitel 1, Einführung

Dieses Kapitel macht Einsteiger mit FreeBSD vertraut. Es behandelt die Geschichte, die Ziele und das Entwicklungsmodell des FreeBSD-Projekts.

Kapitel 2, FreeBSD 8.x (und älter) installieren

Beschreibt den Ablauf der Installation von FreeBSD 8.x und früher mittels sysinstall. Spezielle Installationsmethoden, wie die Installation mit einer seriellen Konsole, werden ebenfalls behandelt.

Kapitel 3, FreeBSD 9.x (und neuer) installieren

Beschreibt den Ablauf der Installation von FreeBSD 9.x und neuere mittels bsdinstall.

Kapitel 4, Grundlagen des UNIX Betriebssystems

Erläutert die elementaren Kommandos und Funktionen von FreeBSD. Wenn Sie schon mit Linux oder einem anderen UNIX System vertraut sind, können Sie dieses Kapitel überspringen.

Kapitel 5, Installieren von Anwendungen

Zeigt wie mit der innovativen Ports-Sammlung oder mit Paketen Software von Fremdherstellern installiert wird.

Kapitel 6, Das X Window System

Beschreibt allgemein das X Window System und geht speziell auf X11 unter FreeBSD ein. Weiterhin werden grafische Benutzeroberflächen wie KDE und GNOME behandelt.

Kapitel 7, Desktop-Anwendungen

Enthält eine Aufstellung verbreiteter Anwendungen wie Browser, Büroanwendungen und Office-Pakete und beschreibt wie diese Anwendungen installiert werden.

Kapitel 8, Multimedia

Erklärt, wie Sie auf Ihrem System Musik und Videos abspielen können. Beispielhaft werden auch Anwendungen aus dem Multimedia-Bereich beleuchtet.

Kapitel 9, Konfiguration des FreeBSD-Kernels

Erklärt, warum Sie einen angepassten Kernel erzeugen sollten und gibt ausführliche Anweisungen wie Sie einen angepassten Kernel konfigurieren, bauen und installieren.

Kapitel 10, Drucken

Beschreibt, wie Sie Drucker unter FreeBSD verwalten. Diskutiert werden Deckblätter, das Einrichten eines Druckers und ein Abrechnungssystem für ausgedruckte Seiten.

Kapitel 11, Linux-Binärkompatibilität

Beschreibt die binäre Kompatibilität zu Linux. Weiterhin werden ausführliche Installationsanleitungen für Oracle, SAP® R/3® und Mathematica gegeben.

Kapitel 12, Konfiguration und Tuning

Beschreibt die Einstellungen, die ein Systemadministrator vornehmen kann, um die Leistungsfähigkeit eines FreeBSD Systems zu verbessern. In diesem Kapitel werden auch verschiedene Konfigurationsdateien besprochen.

Kapitel 13, FreeBSDs Bootvorgang

Erklärt den Bootprozess von FreeBSD und beschreibt die Optionen, mit denen sich der Bootprozess beeinflussen lässt.

Kapitel 14, Benutzer und grundlegende Account-Verwaltung

Beschreibt, wie Benutzer-Accounts angelegt, verändert und verwaltet werden. Weiterhin wird beschrieben, wie dem Benutzer zur Verfügung stehende Ressourcen beschränkt werden können.

Kapitel 15, Sicherheit

Beschreibt die Werkzeuge mit denen Sie Ihr FreeBSD-System absichern. Unter Anderem werden Kerberos, IPsec und OpenSSH besprochen.

Kapitel 16, Jails

Dieses Kapitel beschreibt das Jails-Framework sowie die Vorteile von Jails gegenüber der traditionellen chroot-Unterstützung von FreeBSD.

Kapitel 17, Mandatory Access Control

Erklärt vorgeschriebene Zugriffskontrollen (MACs) und wie mit ihrer Hilfe FreeBSD-Systeme gesichert werden.

Kapitel 18, Security Event Auditing

Beschreibt, was FreeBSD Event Auditing ist, wie Sie diese Funktion installieren und konfigurieren und die damit erzeugten Audit-Trails überwachen und auswerten können.

Kapitel 19, Speichermedien

Erläutert den Umgang mit Speichermedien und Dateisystemen. Behandelt werden Plattenlaufwerke, RAID-Systeme, optische Medien, Bandlaufwerke, RAM-Laufwerke und verteilte Dateisysteme.

Kapitel 20, GEOM

Beschreibt das GEOM-Framework von FreeBSD sowie die Konfiguration der verschiedenen unterstützten RAID-Level.

Kapitel 21, File Systems Support

Beschreibt die Unterstützung nicht-nativer Dateisysteme (beispielsweise des Z-Dateisystems (zfs) von Sun) durch FreeBSD.

Kapitel 22, Vinum

Beschreibt den Vinum Volume Manager, der virtuelle Laufwerke, RAID-0, RAID-1 und RAID-5 auf Software-Ebene bereitstellt.

Kapitel 23, Virtualisierung

Dieses Kapitel beschreibt verschiedene Virtualisierungslösungen und wie diese mit FreeBSD zusammenarbeiten.

Kapitel 24, Lokalisierung

Zeigt wie Sie FreeBSD mit anderen Sprachen als Englisch einsetzen. Es wird sowohl die Lokalisierung auf der System-Ebene wie auch auf der Anwendungs-Ebene betrachtet.

Kapitel 25, FreeBSD aktualisieren

Erklärt die Unterschiede zwischen FreeBSD-STABLE, FreeBSD-CURRENT und FreeBSD-Releases. Das Kapitel enthält Kriterien anhand derer Sie entscheiden können, ob es sich lohnt, ein Entwickler-System zu installieren und aktuell zu halten. Außerdem wird beschrieben, wie Sie Ihr System durch das Einspielen neuer Sicherheits-Patches absichern.

Kapitel 26, DTrace

Beschreibt, wie das von Sun entwickelte DTrace-Werkzeug unter FreeBSD konfiguriert und eingesetzt werden kann. Dynamisches Tracing kann Ihnen beim Aufspüren von Leistungsproblemen helfen, indem Sie Echtzeit-Systemanalysen durchführen.

Kapitel 27, Serielle Datenübertragung

Erläutert, wie Sie Terminals und Modems an Ihr FreeBSD-System anschließen und sich so ein- und auswählen können.

Kapitel 28, PPP und SLIP

Erklärt wie Sie mit PPP, SLIP oder PPP über Ethernet ein FreeBSD-System mit einem entfernten System verbinden.

Kapitel 29, Elektronische Post (E-Mail)

Erläutert die verschiedenen Bestandteile eines E-Mail Servers und zeigt einfache Konfigurationen für sendmail, dem meist genutzten E-Mail-Server.

Kapitel 30, Netzwerkserver

Bietet ausführliche Informationen und Beispielkonfigurationen, die es Ihnen ermöglichen, Ihren FreeBSD-Rechner als Network File System Server, Domain Name Server, Network Information Server, oder als Zeitsynchronisationsserver einzurichten.

Kapitel 31, Firewalls

Erklärt die Philosophie hinter softwarebasierten Firewalls und bietet ausführliche Informationen zur Konfiguration der verschiedenen, für FreeBSD verfügbaren Firewalls.

Kapitel 32, Weiterführende Netzwerkthemen

Behandelt viele Netzwerkthemen, beispielsweise das Verfügbarmachen einer Internetverbindung für andere Rechner eines LANs, Routing, drahtlose Netzwerke, Bluetooth, IPv6, ATM und andere mehr.

Anhang A, Bezugsquellen für FreeBSD

Enthält eine Aufstellung der Quellen von denen Sie FreeBSD beziehen können: CD-ROM, DVD sowie Internet-Sites.

Anhang B, Bibliografie

Dieses Buch behandelt viele Themen und kann nicht alle Fragen erschöpfend beantworten. Die Bibliografie enthält weiterführende Bücher, die im Text zitiert werden.

Anhang C, Ressourcen im Internet

Enthält eine Aufstellung der Foren, die FreeBSD Benutzern für Fragen und Diskussionen zur Verfügung stehen.

Anhang D, PGP Schlüssel

Enthält PGP-Fingerabdrücke von etlichen FreeBSD Entwicklern.

Konventionen in diesem Buch

Damit der Text einheitlich erscheint und leicht zu lesen ist, werden im ganzen Buch die nachstehenden Konventionen beachtet:

Typographie

Kursiv

Für Dateinamen, URLs, betonte Teile eines Satzes und das erste Vorkommen eines Fachbegriffs wird ein kursiver Zeichensatz benutzt.

Fixschrift

Fehlermeldungen, Kommandos, Umgebungsvariablen, Namen von Ports, Hostnamen, Benutzernamen, Gruppennamen, Gerätenamen, Variablen und Code-Ausschnitte werden in einer Fixschrift dargestellt.

Fett

Fett kennzeichnet Anwendungen, Kommandozeilen und Tastensymbole.

Benutzereingaben

Tasten werden fett dargestellt, um sie von dem umgebenden Text abzuheben. Tasten, die gleichzeitig gedrückt werden müssen, werden durch ein + zwischen den einzelnen Tasten dargestellt:

Ctrl+Alt+Del

Im gezeigten Beispiel soll der Benutzer die Tasten Ctrl, Alt und Del gleichzeitig drücken.

Tasten, die nacheinander gedrückt werden müssen, sind durch Kommas getrennt:

Ctrl+X, Ctrl+S

Das letzte Beispiel bedeutet, dass die Tasten Ctrl und X gleichzeitig betätigt werden und danach die Tasten Ctrl und S gleichzeitig gedrückt werden müssen.

Beispiele

Beispiele, die durch E:\> eingeleitet werden, zeigen ein MS-DOS® Kommando. Wenn nichts Anderes angezeigt wird, können diese Kommandos unter neuen Versionen von Microsoft Windows auch in einem DOS-Fenster ausgeführt werden.

E:\> tools\fdimage floppies\kern.flp A:

Beispiele, die mit # beginnen, müssen unter FreeBSD mit Superuser-Rechten ausgeführt werden. Dazu melden Sie sich entweder als root an oder Sie wechseln von Ihrem normalen Account mit su(1) zu dem Benutzer root.

# dd if=kern.flp of=/dev/fd0

Beispiele, die mit % anfangen, werden unter einem normalen Benutzer-Account ausgeführt. Sofern nichts Anderes angezeigt wird, verwenden die Beispiele die Syntax der C-Shell.

% top

Danksagung

Dieses Buch ist aus Beiträgen von vielen Leuten aus allen Teilen der Welt entstanden. Alle eingegangen Beiträge, zum Beispiel Korrekturen oder vollständige Kapitel, waren wertvoll.

Einige Firmen haben dieses Buch dadurch unterstützt, dass Sie Autoren in Vollzeit beschäftigt und die Veröffentlichung des Buchs finanziert haben. Besonders BSDi (das später von Wind River Systems übernommen wurde) beschäftigte Mitglieder des FreeBSD Documentation Projects, um dieses Buch zu erstellen. Dadurch wurde die erste (englische) gedruckte Auflage im März 2000 möglich (ISBN 1-57176-241-8). Wind River Systems bezahlte dann weitere Autoren, die die zum Drucken nötige Infrastruktur verbesserten und zusätzliche Kapitel beisteuerten. Das Ergebnis dieser Arbeit ist die zweite (englische) Auflage vom November 2001 (ISBN 1-57176-303-1). Zwischen 2003 und 2004 bezahlte FreeBSD Mall, Inc mehrere Mitarbeiter für die Vorbereitung der gedruckten dritten Auflage.

I. Erste Schritte

Dieser Teil des FreeBSD-Handbuchs richtet sich an Benutzer und Administratoren für die FreeBSD neu ist. Diese Kapitel

  • geben Ihnen eine Einführung in FreeBSD,

  • geleiten Sie durch den Installationsprozess,

  • erklären Ihnen die Grundlagen von UNIX Systemen,

  • zeigen Ihnen, wie Sie die Fülle der erhältlichen Anwendungen Dritter installieren und

  • führen Sie in X, der Benutzeroberfläche von UNIX Systemen ein. Es wird gezeigt, wie Sie den Desktop konfigurieren, um effektiver arbeiten zu können.

Wir haben uns bemüht, Referenzen auf weiter vorne liegende Textteile auf ein Minimum zu beschränken, so dass Sie diesen Teil des Handbuchs ohne viel Blättern durcharbeiten können.


Kapitel 1. Einführung

Neu zusammengestellt, umstrukturiert und um Abschnitte erweitert durch Jim Mock. Übersetzt von Sascha Edelburg.

1.1. Übersicht

Herzlichen Dank für Ihr Interesse an FreeBSD! Das folgende Kapitel behandelt verschiedene Aspekte des FreeBSD Projects wie dessen geschichtliche Entwicklung, dessen Ziele oder dessen Entwicklungsmodell.

Nach dem Durcharbeiten des Kapitels wissen Sie über folgende Punkte Bescheid:

  • Wo FreeBSD im Vergleich zu anderen Betriebssystemen steht

  • Die Geschichte des FreeBSD Projects

  • Die Ziele des FreeBSD Projects

  • Die Grundlagen des FreeBSD-Open-Source-Entwicklungsmodells

  • Und natürlich wo der Name “FreeBSD” herrührt


1.2. Willkommen bei FreeBSD!

FreeBSD ist ein auf 4.4BSD-Lite basierendes Betriebssystem für Intel (x86 und Itanium®), AMD64 und Sun UltraSPARC® Rechner. An Portierungen zu anderen Architekturen wird derzeit gearbeitet. Mehr zu Geschichte von FreeBSD können Sie im kurzen geschichtlichen Abriss zu FreeBSD oder im Abschnitt Das aktuelle FreeBSD-Release nachlesen. Falls Sie das FreeBSD Project unterstützen wollen (mit Quellcode, Hardware- oder Geldspenden), sollten Sie den Artikel FreeBSD unterstützen lesen.


1.2.1. Was kann FreeBSD?

FreeBSD hat zahlreiche bemerkenswerte Eigenschaften. Um nur einige zu nennen:

  • Präemptives Multitasking mit dynamischer Prioritätsanpassung zum reibungslosen und ausgeglichenen Teilen der Systemressourcen zwischen Anwendungen und Anwendern, selbst unter schwerster Last.

  • Der Mehrbenutzerbetrieb von FreeBSD erlaubt es, viele Anwender gleichzeitig am System mit verschiedenen Aufgaben arbeiten zu lassen. Beispielsweise Geräte wie Drucker oder Bandlaufwerke, die sich nur schwerlich unter allen Anwendern des Systems oder im Netzwerk teilen lassen, können durch Setzen von Verwendungsbeschränkungen auf Benutzer oder Benutzergruppen wichtige Systemressourcen vor Überbeanspruchung schützen.

  • Hervorragende TCP/IP-Netzwerkfähigkeit mit Unterstützung von Industriestandards wie SCTP, DHCP, NFS, NIS, PPP, SLIP, IPsec und IPv6. Das heißt, Ihr FreeBSD-System kann in einfachster Weise mit anderen Systemen interagieren. Zudem kann es als Server-System im Unternehmen wichtige Aufgaben übernehmen, beispielsweise als NFS- oder E-Mail-Server oder es kann Ihren Betrieb durch HTTP- und FTP-Server beziehungsweise durch Routing und Firewalling Internet-fähig machen.

  • Der Speicherschutz stellt sicher, dass Anwendungen (oder Anwender) sich nicht gegenseitig stören. Stürzt eine Anwendung ab, hat das keine Auswirkung auf andere Prozesse.

  • FreeBSD ist ein 32-Bit-Betriebssystem (64-Bit auf Itanium, AMD64, und UltraSPARC) und wurde als solches von Grund auf neu entworfen.

  • Das X-Window-System (X11R7) als Industriestandard bietet eine grafische Benutzeroberfläche (GUI). Minimale Voraussetzung zur Verwendung ist lediglich eine Grafikkarte und ein Bildschirm, die beide den VGA-Modus unterstützen.

  • Binärkompatibilität mit vielen unter verschiedenen Betriebssystemen erstellten Programmen wie Linux, SCO, SVR4, BSDI und NetBSD.

  • Tausende von sofort lauffähigen Anwendungen sind aus den Ports- und Packages-Sammlungen für FreeBSD verfügbar. Warum mühselig im Netz Software suchen, wenn sie bereits hier vorhanden ist?

  • Tausende zusätzliche leicht zu portierende Anwendungen sind über das Internet zu beziehen. FreeBSD ist Quellcode-kompatibel mit den meisten kommerziellen UNIX Systemen. Daher bedürfen Anwendungen häufig nur geringer oder gar keiner Anpassung, um auf einem FreeBSD-System zu kompilieren.

  • Seitenweise anforderbarer Virtueller Speicher und der “merged VM/buffer cache”-Entwurf bedient effektiv den großen Speicherhunger mancher Anwendungen bei gleichzeitigem Aufrechterhalten der Bedienbarkeit des Systems für weitere Benutzer.

  • SMP-Unterstützung für Mehrprozessorsysteme

  • Ein voller Satz von C, C++ und Fortran- Entwicklungswerkzeugen. Viele zusätzliche Programmiersprachen für Wissenschaft und Entwicklung sind aus der Ports- und Packages-Sammlung zu haben.

  • Quellcode für das gesamte System bedeutet größtmögliche Kontrolle über Ihre Umgebung. Warum sollte man sich durch proprietäre Lösungen knebeln und sich auf Gedeih und Verderb der Gnade eines Herstellers ausliefern, wenn man doch ein wahrhaft offenes System haben kann?

  • Umfangreiche Online-Dokumentation.

FreeBSD basiert auf dem 4.4BSD-Lite-Release der Computer Systems Research Group (CSRG) der Universität von Kalifornien in Berkeley und führt die namhafte Tradition der Entwicklung von BSD-Systemen fort. Zusätzlich zu der herausragenden Arbeit der CSRG hat das FreeBSD Project tausende weitere Arbeitsstunden investiert, um das System zu verfeinern und maximale Leistung und Zuverlässigkeit bei Alltagslast zu bieten. Während viele kommerzielle Riesen Probleme haben PC-Betriebssysteme mit derartigen Funktionen, Leistungpotential und Zuverlässigkeit anzubieten, kann FreeBSD damit schon jetzt aufwarten!

Die Anwendungsmöglichkeiten von FreeBSD werden nur durch Ihre Vorstellungskraft begrenzt. Von Software-Entwicklung bis zu Produktionsautomatisierung, von Lagerverwaltung über Abweichungskorrektur bei Satelliten; Falls etwas mit kommerziellen UNIX Produkten machbar ist, dann ist es höchstwahrscheinlich auch mit FreeBSD möglich. FreeBSD profitiert stark von tausenden hochwertigen Anwendungen aus wissenschaftlichen Instituten und Universitäten in aller Welt. Häufig sind diese für wenig Geld oder sogar kostenlos zu bekommen. Kommerzielle Anwendungen sind ebenso verfügbar und es werden täglich mehr.

Durch den freien Zugang zum Quellcode von FreeBSD ist es in unvergleichbarer Weise möglich, das System für spezielle Anwendungen oder Projekte anzupassen. Dies ist mit den meisten kommerziellen Betriebssystemen einfach nicht möglich. Beispiele für Anwendungen, die unter FreeBSD laufen, sind:

  • Internet-Dienste: Die robuste TCP/IP-Implementierung in FreeBSD macht es zu einer idealen Plattform für verschiedenste Internet-Dienste, wie zum Beispiel:

    • FTP-Server

    • HTTP-Server (Standard-Web-Server oder mit SSL-Verschlüsselung)

    • IPv4- und IPv6-Routing

    • Firewalls und NAT-Gateways (“IP-Masquerading”)

    • E-Mail-Server

    • Usenet-News und Foren (BBS)

    Zum Betreiben von FreeBSD reicht schon ein günstiger 386-PC. Wenn es das Wachstum Ihres Unternehmens verlangt, kann FreeBSD aber auch auf einem hochgerüsteten 4-Wege-System mit Xeon-Prozessoren und RAID-Plattenspeicher Verwendung finden.

  • Bildung: Sind Sie Informatikstudent oder Student eines verwandten Studiengangs? Die praktischen Einblicke in FreeBSD sind die beste Möglichkeit etwas über Betriebssysteme, Rechnerarchitektur und Netzwerke zu lernen. Einige frei erhältliche CAD-, mathematische und grafische Anwendungen sind sehr nützlich, gerade für diejenigen, die FreeBSD nicht zum Selbstzweck, sondern als Arbeitsmittel einsetzen.

  • Wissenschaft: Mit dem frei verfügbaren Quellcode für das gesamte System bildet FreeBSD ein exzellentes Studienobjekt in der Disziplin der Betriebssysteme, wie auch in anderen Zweigen der Informatik. Es ist beispielsweise denkbar, das räumlich getrennte Gruppen gemeinsam an einer Idee oder Entwicklung arbeiten. Das Konzept der freien Verfügbarkeit und -nutzung von FreeBSD ermöglicht so einen Gebrauch, auch ohne sich groß Gedanken über Lizenzbedingungen oder -beschränkungen machen zu müssen.

  • Netzwerkfähigkeit: Brauchen Sie einen neuen Router? Oder einen Name-Server (DNS)? Eine Firewall zum Schutze Ihres Intranets vor Fremdzugriff? FreeBSD macht aus dem in der Ecke verstaubenden 386- oder 486-PC im Handumdrehen einen leistungsfähigen Router mit anspruchsvollen Packet-Filter-Fähigkeiten.

  • X-Window-Workstation: FreeBSD ist eine gute Wahl für kostengünstige X-Terminals mit dem frei verfügbaren X11-Server. Im Gegensatz zu einem X-Terminal erlaubt es FreeBSD, viele Anwendungen lokal laufen zu lassen, was die Last eines zentralen Servers erleichtern kann. FreeBSD kann selbst “plattenlos” starten, was einzelne Workstations noch günstiger macht und die Wartung erleichtert.

  • Software-Entwicklung: Das Standard-System von FreeBSD wird mit einem kompletten Satz an Entwicklungswerkzeugen bereitgestellt, unter anderem mit dem bekannten GNU C/C++-Kompiler und -Debugger.

FreeBSD ist sowohl in Form von Quellcode als auch in Binärform auf CD-ROM, DVD und über anonymous FTP erhältlich. Näheres zum Bezug von FreeBSD enthält Anhang A.


1.2.2. Wer benutzt FreeBSD?

FreeBSD dient als Plattform für Geräte und Produkte einiger der weltgrößten IT-Firmen, darunter:

Außerdem laufen einige der größten Internet-Auftritte unter FreeBSD, beispielsweise:

und viele andere.


1.3. Das FreeBSD Project

Der folgende Abschnitt bietet einige Hintergrundinformationen zum FreeBSD Project, einschließlich einem kurzen geschichtlichen Abriss, den Projektzielen und dem Entwicklungsmodell.


1.3.1. Kurzer geschichtlicher Abriss zu FreeBSD

Beigesteuert von Jordan Hubbard.

Das FreeBSD Project erblickte das Licht der Welt Anfang 1993 teils als Auswuchs des “Unofficial 386BSD Patchkit” unter der Regie der letzten drei Koordinatoren des Patchkits: Nate Williams, Rod Grimes und mir.

Unser eigentliches Ziel war es, einen zwischenzeitlichen Abzug von 386BSD zu erstellen, um ein paar Probleme zu beseitigen, die das Patchkit-Verfahren nicht lösen konnte. Einige von Ihnen werden sich in dem Zusammenhang noch an die frühen Arbeitstitel “386BSD 0.5” oder “386BSD Interim” erinnern.

386BSD war das Betriebssystem von Bill Jolitz. Dieses litt bis zu diesem Zeitpunkt heftig unter fast einjähriger Vernachlässigung. Als das Patchkit mit jedem Tag anschwoll und unhandlicher wurde, waren wir einhellig der Meinung, es müsse etwas geschehen. Wir entschieden uns Bill Jolitz zu helfen, indem wir den übergangsweise “bereinigten” Abzug zur Verfügung stellten. Diese Pläne wurden unschön durchkreuzt als Bill Jolitz plötzlich seine Zustimmung zu diesem Projekt zurückzog, ohne einen Hinweis darauf, was stattdessen geschehen sollte.

Es hat nicht lange gedauert zu entscheiden, dass das Ziel es wert war, weiterverfolgt zu werden, selbst ohne Bills Unterstützung. Also haben wir den von David Greenman geprägten Namen “FreeBSD” angenommen. Unsere anfänglichen Ziele setzten wir nach Rücksprache mit den damaligen Benutzern des Systems fest. Und als deutlich wurde, das Projekt würde möglicherweise Realität, nahm ich Kontakt mit Walnut Creek CDROM auf, mit einem Auge darauf, den Vertriebsweg für die vielen Missbegünstigten zu verbessern, die keinen einfachen Zugang zum Internet hatten. Walnut Creek CDROM unterstützte nicht nur die Idee des CD-ROM-Vertriebs, sondern stellte sogar dem Projekt einen Arbeitsrechner und eine schnelle Internetverbindung zur Verfügung. Ohne den beispiellosen Glauben von Walnut Creek CDROM in ein zu der Zeit absolut unbekanntes Projekt, gäbe es FreeBSD in der heutigen Form wohl nicht.

Die erste auf CD-ROM (und netzweit) verfügbare Veröffentlichung war FreeBSD 1.0 im Dezember 1993. Diese basierte auf dem Band der 4.3BSD-Lite (“Net/2”) der Universität von Kalifornien in Berkeley. Viele Teile stammten aus 386BSD und von der Free Software Foundation. Gemessen am ersten Angebot, war das ein ziemlicher Erfolg und wir ließen dem das extrem erfolgreiche FreeBSD 1.1 im Mai 1994 folgen.

Zu dieser Zeit formierten sich unerwartete Gewitterwolken am Horizont, als Novell und die Universität von Kalifornien in Berkeley (UCB) ihren langen Rechtsstreit über den rechtlichen Status des Berkeley Net/2-Bandes mit einem Vergleich beilegten. Eine Bedingung dieser Einigung war es, dass die UCB große Teile des Net/2-Quellcodes als “belastet” zugestehen musste, und dass diese Besitz von Novell sind, welches den Code selbst einige Zeit vorher von AT&T bezogen hatte. Im Gegenzug bekam die UCB den “Segen” von Novell, dass sich das 4.4BSD-Lite-Release bei seiner endgültigen Veröffentlichung als unbelastet bezeichnen darf. Alle Net/2-Benutzer sollten auf das neue Release wechseln. Das betraf auch FreeBSD. Dem Projekt wurde eine Frist bis Ende Juli 1994 eingeräumt, das auf Net/2-basierende Produkt nicht mehr zu vertreiben. Unter den Bedingungen dieser Übereinkunft war es dem Projekt noch erlaubt ein letztes Release vor diesem festgesetzten Zeitpunkt herauszugeben. Das war FreeBSD 1.1.5.1.

FreeBSD machte sich dann an die beschwerliche Aufgabe, sich Stück für Stück, aus einem neuen und ziemlich unvollständigen Satz von 4.4BSD-Lite-Teilen, wieder aufzubauen. Die “Lite”-Veröffentlichungen waren deswegen leicht, weil Berkeleys CSRG große Code-Teile, die für ein start- und lauffähiges System gebraucht wurden, aufgrund diverser rechtlicher Anforderungen entfernen musste und weil die 4.4-Portierung für Intel-Rechner extrem unvollständig war. Das Projekt hat bis November 1994 gebraucht diesen Übergang zu vollziehen, was dann zu dem im Netz veröffentlichten FreeBSD 2.0 und zur CD-ROM-Version (im späten Dezember) führte. Obwohl FreeBSD gerade die ersten Hürden genommen hatte, war dieses Release ein maßgeblicher Erfolg. Diesem folgte im Juni 1995 das robustere und einfacher zu installierende FreeBSD 2.0.5.

Im August 1996 veröffentlichten wir FreeBSD 2.1.5. Es schien unter ISPs und der Wirtschaft beliebt genug zu sein, ein weiteres Release aus dem 2.1-STABLE-Zweig zu rechtfertigen. Das war FreeBSD 2.1.7.1. Es wurde im Februar 1997 veröffentlicht und bildete das Ende des Hauptentwicklungszweiges 2.1-STABLE. Derzeit unterliegt dieser Zweig dem Wartungsmodus, das heißt, es werden nur noch Sicherheitsverbesserungen und die Beseitigung von kritischen Fehlern vorgenommen (RELENG_2_1_0).

FreeBSD 2.2 entsprang dem Hauptentwicklungszweig (“-CURRENT”) im November 1996 als RELENG_2_2-Zweig und das erste komplette Release (2.2.1) wurde im April 1997 herausgegeben. Weitere Veröffentlichungen des 2.2-Zweiges gab es im Sommer und Herbst 1997. Das letzte Release des 2.2-Zweiges bildete die Version 2.2.8, die im November 1998 erschien. Das erste offizielle 3.0-Release erschien im Oktober 1998 und läutete das Endes des 2.2-Zweiges ein.

Am 20. Januar 1999 teilte sich der Quellbaum in die Zweige 4.0-CURRENT und 3.X-STABLE. Auf dem 3.X-STABLE-Zweig wurden folgende Releases erstellt: 3.1 am 15. Februar 1999, 3.2 am 15. Mai 1999, 3.3 am 16. September 1999, 3.4 am 20. Dezember 1999 und 3.5 am 24. Juni 2000. Letzterem folgte ein paar Tage später das Release 3.5.1, welches einige akute Sicherheitslöcher von Kerberos stopfte und die letzte Veröffentlichung des 3.X-Zweiges darstellte.

Eine weitere Aufspaltung, aus dem der 4.X-STABLE-Zweig hervorging, erfolgte am 13. März 2000. Bisher gab es mehrere Veröffentlichungen aus diesem Zweig: 4.0-RELEASE erschien im März 2000. Das letzte Release, 4.11-RELEASE, erschien im Januar 2005.

Das lang erwartete 5.0-RELEASE wurde am 19. Januar 2003 veröffentlicht. Nach nahezu drei Jahren Entwicklungszeit brachte dieses Release die Unterstützung für Mehrprozessor-Systeme sowie für Multithreading. Mit diesem Release lief FreeBSD erstmalig auf den Plattformen UltraSPARC und ia64. Im Juni 2003 folgte 5.1-RELEASE. Das letzte 5.X-Release aus dem CURRENT-Zweig war 5.2.1-RELEASE, das im Februar 2004 veröffentlicht wurde.

Der Zweig RELENG_5 wurde im August 2004 erzeugt. Als erstes Release dieses Zweiges wurde 5.3-RELEASE veröffentlicht, bei dem es sich gleichzeitig auch um das erste 5-STABLE-Release handelte. Das aktuelle 5.5-RELEASE (dem keine RELENG_5-Versionen mehr folgen werden) erschien im Mai 2006.

Der Zweig RELENG_6 wurde im Juli 2005 erzeugt. 6.0-RELEASE, das erste Release des 6.X-Zweiges, wurde im November 2005 veröffentlicht. Das aktuelle 6.4-RELEASE (erschienen im November 2008) ist das letzte Release aus RELENG_6-Zweig. RELENG_6 ist der letzte Zweig, der die Alpha-Architektur noch unterstützt.

Der Zweig RELENG_7 wurde im Oktober 2007 erzeugt. 7.0-RELEASE, das erste Release des 7.X-Zweiges, wurde im Februar 2008 veröffentlicht. Das aktuelle 8.3-RELEASE (dem keine weiteren RELENG_7-Versionen folgen werden) erschien im Februar 2011.

Im August 2009 wurde der RELENG_8-Zweig angelegt. 8.0-RELEASE, das erste Release des 8.X-Zweiges, erschien im November 2009. Das aktuelle 9.0-RELEASE (dem weitere RELENG_8-Versionen folgen werden) wurde im Juli 2010 veröffentlicht.

Zurzeit werden Projekte mit langem Entwicklungshorizont im Zweig 9.X-CURRENT verfolgt, Schnappschüsse von 9.X auf CD-ROM (und natürlich im Netz) werden bei fortlaufender Entwicklung auf dem Snapshot-Server zur Verfügung gestellt.


1.3.2. Ziele des FreeBSD Projects

Beigesteuert von Jordan Hubbard.

Das FreeBSD Project stellt Software her, die ohne Einschränkungen für beliebige Zwecke eingesetzt werden kann. Viele von uns haben beträchtlich in Quellcode und Projekt investiert und hätten sicher nichts dagegen, hin und wieder ein wenig finanziellen Ausgleich dafür zu bekommen. Aber in keinem Fall bestehen wir darauf. Wir glauben unsere erste und wichtigste “Mission” ist es, Software für jeden Interessierten und zu jedem Zweck zur Verfügung zu stellen, damit die Software größtmögliche Verbreitung erlangt und größtmöglichen Nutzen stiftet. Das ist, glaube ich, eines der grundlegenden Ziele freier Software, welche wir mit größter Begeisterung unterstützen.

Der Code in unserem Quellbaum, der unter die General Public License (GPL) oder die Library General Public License (LGPL) fällt, stellt geringfügig mehr Bedingungen. Das aber vielmehr im Sinne von eingefordertem Zugriff, als das übliche Gegenteil der Beschränkungen. Aufgrund zusätzlicher Abhängigkeiten, die sich durch die Verwendung von GPL-Software bei kommerziellem Gebrauch ergeben, bevorzugen wir daher Software unter dem transparenteren BSD-Copyright, wo immer es angebracht ist.


1.3.3. Das Entwicklungsmodell von FreeBSD

Beigesteuert von Satoshi Asami.

Die Entwicklung von FreeBSD ist ein offener und vielseitiger Prozess. FreeBSD besteht aus Beisteuerungen von Hunderten Leuten rund um die Welt, wie Sie aus der Liste der Beitragenden ersehen können. Die vielen Entwickler können aufgrund der Entwicklungs-Infrastruktur von FreeBSD über das Internet zusammenarbeiten. Wir suchen ständig nach neuen Entwicklern, Ideen und jenen, die sich in das Projekt tiefer einbringen wollen. Nehmen Sie einfach auf der Mailingliste FreeBSD technical discussions Kontakt mit uns auf. Die Mailingliste FreeBSD announcements steht für wichtige Ankündigungen, die alle FreeBSD-Benutzer betreffen, zur Verfügung.

Unabhängig davon ob Sie alleine oder mit anderen eng zusammen arbeiten, enthält die folgende Aufstellung nützliche Informationen über das FreeBSD Project und dessen Entwicklungsabläufe.

CVS- und SVN-Repositories

Der Hauptquellbaum von FreeBSD wurde über viele Jahre ausschließlich mit CVS gepflegt, einem frei erhältlichen Versionskontrollsystem, welches mit FreeBSD geliefert wird. Im Juni 2008 begann das FreeBSD Project mit dem Umstieg auf SVN (Subversion). Dieser Schritt wurde notwendig, weil CVS aufgrund des rapide wachsenden Quellcodebaumes und dem Umfang der bereits gespeichterten Revisisionsinformationen an seine Grenzen zu stoßen begann. Während das Hauptrepository nun SVN verwendet, hat sich auf der Client-Seite nichts geändert. Werkzeuge wie CVSup und csup, die auf der alten CVS-Infrastruktur aufbauen, funktionieren weiterhin, weil alle Änderungen, die im SVN-Repository erfolgen, in das CVS-Repository portiert werden. Im Moment wird nur src-Quellcodebaum über SVN verwaltet. Die Dokumentation, die Webseiten sowie die Ports befinden sich weiterhin in einem CVS-Repository. Das Haupt-CVS-Repository läuft auf einer Maschine in Santa Clara, Kalifornien, USA. Von dort wird es auf zahlreiche Server in aller Welt gespiegelt. Der SVN-Quellbaum, der die Zweige -CURRENT und -STABLE enthält, kann so einfach auf Ihr eigenes System gespiegelt werden. Näheres dazu können Sie im Handbuch unter Synchronisation der Quellen in Erfahrung bringen.

Die Committer-Liste

Die Committer sind Personen mit Schreibzugriff auf den CVS-Quellbaum (der Begriff “Committer” stammt vom cvs(1)-Befehl commit, der zum Einspeisen von Änderungen ins Repository gebraucht wird). Der beste Weg, Vorschläge zur Prüfung durch die Mitglieder der Committer-Liste einzureichen, bietet der Befehl send-pr(1). Sollte es unerwartete Probleme mit diesem Verfahren geben, besteht immer noch die Möglichkeit eine E-Mail an die Liste “FreeBSD committers” zu schicken.

Das FreeeBSD-Core-Team

Würde man das FreeBSD Project mit einem Unternehmen vergleichen, so wäre das FreeBSD-Core-Team das Gegenstück zum Vorstand. Die Hauptaufgabe des Core-Teams ist es, das Projekt als Ganzes in gesunder Verfassung zu halten und die weitere Entwicklung in die richtige Bahn zu lenken. Das Anwerben leidenschaftlicher und verantwortungsbewusster Entwickler ist eine Aufgabe des Core-Team, genauso wie die Rekrutierung neuer Mitglieder für das Core-Team, im Falle, dass Altmitglieder aus dem Projekt aussteigen. Das derzeitige Core-Team wurde im Juli 2010 aus einem Kreis kandidierender Committer gewählt. Wahlen werden alle zwei Jahre abgehalten.

Einige Core-Team-Mitglieder haben auch spezielle Verantwortungsbereiche. Das bedeutet, sie haben sich darauf festgelegt, sicherzustellen, dass ein größerer Teil des Systems so funktioniert wie ausgewiesen. Eine vollständige Liste an FreeBSD beteiligter Entwickler und ihrer Verantwortungsbereiche kann in der Liste der Beitragenden eingesehen werden.

Anmerkung: Die Mehrzahl der Mitglieder des Core-Teams sind Freiwillige in Bezug auf die FreeBSD-Entwicklung und profitieren nicht finanziell vom Projekt. Daher sollte “Verpflichtung” nicht als “garantierter Support” fehlinterpretiert werden. Der oben angeführte Vergleich mit einem Vorstand hinkt und es wäre angebrachter zu erwähnen, dass diese Leute - wider besseres Wissen - ihr eigenes Leben für FreeBSD aufgegeben haben!

Weitere Beitragende

Die größte Entwicklergruppe sind nicht zuletzt die Anwender selbst, die Rückmeldungen und Fehlerbehebungen in einem anhaltend hohen Maße an uns senden. Der bevorzugte Weg an dem weniger zentralisierten Bereich der FreeBSD-Entwicklung teilzuhaben, ist die Möglichkeit sich bei der Liste FreeBSD technical discussions anzumelden. Weitere Informationen über die verschiedenen FreeBSD-Mailinglisten erhalten Sie in Anhang C.

Die Liste der zu FreeBSD Beitragenden ist eine lange und wachsende. Also warum nicht selbst dort stehen, indem Sie gleich persönlich etwas zu FreeBSD beitragen?

Quellcode ist nicht der einzige Weg, etwas zum Projekt beizusteuern. Eine genauere Übersicht über offene Aufgaben finden Sie auf der FreeBSD-Web-Site.

Zusammengefasst bildet unser Entwicklungsmodell einen losen Verbund konzentrischer Kreise. Das zentralisierte Modell ist auf die Bedürfnisse der Anwender zugeschnitten, mit der einfachen Möglichkeit eine zentrale Code-Basis zu verfolgen und möglichen neuen Beitragenden nicht das Leben zu erschweren! Unser Ziel ist es, ein stabiles Betriebssystem mit einer großen Zahl passender Programme zu bieten, die der Anwender leicht installieren und anwenden kann. Und dieses Modell funktioniert für diese Aufgabe ziemlich gut.

Das Einzige was wir von möglichen neuen Mitgliedern fordern, ist die gleiche Hingabe, mit der die jetzigen Mitglieder am dauerhaften Erfolg arbeiten!


1.3.4. Das aktuelle FreeBSD-Release

FreeBSD ist ein (mit vollem Quellcode und ein frei erhältliches) auf 4.4BSD-Lite-basierendes Release für Intel i386™, i486™, Pentium®, Pentium Pro, Celeron®, Pentium II, Pentium III, Pentium 4 (oder ein dazu kompatibler Prozessor), Xeon™, und Sun UltraSPARC Systeme. Es stützt sich zum größten Teil auf Software der Computer Systems Research Group (CSRG) der Universität von Kalifornien in Berkeley mit einigen Verbesserungen aus NetBSD, OpenBSD, 386BSD und der Free Software Foundation.

Seit unserem FreeBSD 2.0 von Ende 1994 haben sich Leistung, Funktionsvielfalt und Stabilität dramatisch verbessert. Die größte Änderung erfuhr das virtuelle Speichermanagement durch eine Kopplung von virtuellem Speicher und dem Buffer-Cache, das nicht nur die Leistung steigert, sondern auch den Hauptspeicherverbrauch reduziert und ein 5 MB-System zu einem nutzbaren Minimal-System verhilft. Weitere Verbesserungen sind volle NIS-Client- und Server-Unterstützung, T/TCP, Dial-On-Demand-PPP, integriertes DHCP, ein verbessertes SCSI-Subsystem, ISDN-Support, Unterstützung für ATM-, FDDI-, Fast- und Gigabit-Ethernet-Karten (1000 Mbit), verbesserter Support der neusten Adaptec-Controller und tausende Fehlerkorrekturen.

Zusätzlich zur Standard-Distribution bietet FreeBSD eine Sammlung von portierter Software mit tausenden begehrten Programmen. Zum Verfassungszeitpunkt waren über 23,000 Anwendungen in der Ports-Sammlung! Das Spektrum der Ports-Sammlung reicht von HTTP-Servern über Spiele, Programmiersprachen, Editoren und so ziemlich allem dazwischen. Die gesamte Ports-Sammlung benötigt 500 MB an Speicherplatz, wobei jeder Port anhand eines “Deltas” zu den Quellen angegeben wird. Das macht es für uns erheblich leichter, Ports zu aktualisieren und es verringert den Plattenbedarf im Vergleich zur älteren 1.0-Port-Sammlung. Um ein Port zu übersetzen, müssen Sie einfach ins Verzeichnis des Programms wechseln und ein make install absetzen. Den Rest erledigt das System. Die originalen Quellen jedes zu installierenden Port werden dynamisch von CD-ROM oder einem FTP-Server bezogen. Es reicht also für genügend Plattenplatz zu sorgen, um die gewünschten Ports zu erstellen. Allen, die Ports nicht selbst kompilieren wollen: Es gibt zu fast jedem Port ein vorkompiliertes Paket, das einfach mit dem Befehl (pkg_add) installiert wird. Pakete und Ports werden in Kapitel 5 beschrieben.

Eine Reihe von weiteren Dokumenten, die sich als hilfreich bei der Installation oder dem Arbeiten mit FreeBSD erweisen könnten, liegen auf neueren FreeBSD-Systemen im Verzeichnis /usr/share/doc. Die lokal installierten Anleitungen lassen sich mit jedem HTML-fähigen Browser unter folgenden Adressen betrachten:

Es besteht auch die Möglichkeit, sich die jeweils aktuellste Version der Referenzdokumente auf der FreeBSD-Homepage anzusehen.


Kapitel 2. FreeBSD 8.X (und älter) installieren

Überarbeitet und teilweise neu geschrieben von Jim Mock. Der Gang durch sysinstall und alle Bildschirmabzüge von Randy Pratt. Übersetzt von Martin Heinen und Johann Kois.

2.1. Übersicht

FreeBSD wird mit dem textorientierten und einfach zu benutzendem Installationsprogramm installiert. Beginnend mit FreeBSD 9.0-RELEASE handelt es sich dabei um das Programm bsdinstall. Ältere FreeBSD-Versionen verwenden hingegen nach wie vor sysinstall für die Installation. Dieses Kapitel beschreibt die Installation von FreeBSD über sysinstall. Der Einsatz von bsdinstall wird hingegen in Kapitel 3 besprochen.

Dieses Kapitel behandelt folgende Punkte:

  • Das Erzeugen von FreeBSD-Startdisketten.

  • Wie FreeBSD Platten anspricht und aufteilt.

  • Wie sysinstall ausgeführt wird.

  • Die Menüs von sysinstall und die erforderlichen Eingaben in den Menüs.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • Die Hardware-Notes der FreeBSD-Release, die Sie installieren wollen, lesen und sicherstellen, dass Ihre Hardware unterstützt wird.

Anmerkung: Diese Installationsanleitung gilt für Rechner mit i386-Architektur (PC-kompatible Rechner). Abweichende Anweisungen für andere Plattformen werden, falls notwendig, gegeben. Obwohl diese Anleitung so aktuell wie möglich ist, kann das Installationsverfahren von dem hier gezeigten geringfügig abweichen. Legen Sie bitte daher diese Anleitung nicht wortwörtlich aus, sondern lassen Sie sich von diesem Kapitel durch den Installationsprozess leiten.


2.2. Hardware-Anforderungen

2.2.1. Minimalkonfiguration

Die zur Installation von FreeBSD erforderliche Minimalkonfiguration hängt von der zu installierenden FreeBSD-Version sowie von der Hardware-Architektur ab.

Informationen zur jeweiligen Minimalkonfiguration finden Sie in den folgenden Abschnitten dieses Kapitels. Je nachdem, wie Sie FreeBSD installieren, benötigen Sie eventuell auch ein Diskettenlaufwerk, ein unterstütztes CD-ROM-Laufwerk, oder auch eine Netzwerkkarte. Abschnitt 2.3.7 des Handbuchs enthält weitere Informationen zu den verschiedenen Installationsarten.


2.2.1.1. Die FreeBSD/i386- und FreeBSD/pc98-Architekturen

Sowohl FreeBSD/i386 als auch FreeBSD/pc98 benötigen jeweils mindestens einen 486-Prozessor sowie mindestens 24 MB RAM. Außerdem benötigen Sie für eine Minimalinstallation mindestens 150 MB freien Platz auf Ihrer Festplatte.

Anmerkung: In den meisten derartigen Konfigurationen ist es besser, für mehr RAM und mehr Plattenplatz zu sorgen, statt einen schnelleren Prozessor einzubauen.


2.2.1.2. Die FreeBSD/amd64-Architektur

Es gibt zwei Klassen von Prozessoren, auf denen Sie FreeBSD/amd64 ausführen können. Die erste Klasse bilden die AMD64-Prozessoren (zu denen AMD Athlon 64-, AMD Athlon 64-FX-, oder AMD Opteron-Prozessoren gehören).

Die zweite Klasse von Prozessoren, auf denen Sie diese FreeBSD/amd64 einsetzen können, ist die Intel® EM64T-Architektur. Prozessoren dieser Klasse sind beispielsweise Intel Core™ 2 Duo-, Quad-, und Extreme-Prozessoren sowie die Intel Xeon-Prozessorreihen 3000, 5000, und 7000.

Wenn Sie einen auf dem Chipsatz nVidia nForce3 Pro-150 basierenden Rechner haben, müssen Sie im BIOS das IO-APIC deaktivieren. Erlaubt ihr BIOS dies nicht, müssen Sie stattdessen ACPI deaktivieren. Der Grund dafür sind Fehler im Pro-150-Chipsatz, die bis jetzt nicht behoben werden konnten.


2.2.1.3. Die FreeBSD/sparc64-Architektur

Um FreeBSD/sparc64 zu installieren, benötigen Sie eine unterstützte Plattform (lesen Sie dazu auch Abschnitt 2.2.2 des Handbuchs).

Sie benötigen außerdem eine seperate Festplatte, wenn Sie FreeBSD/sparc64 installieren wollen, da es derzeit leider noch nicht möglich ist, die Platte mit einem weiteren Betriebssystem zu teilen.


2.2.2. Unterstützte Hardware

Die Hardware-Notes, die mit jedem FreeBSD-Release ausgeliefert werden, enthalten eine Liste lauffähiger Hardware. Die Hardware-Notes befinden sich üblicherweise in der Datei HARDWARE.TXT im Wurzelverzeichnis der Distribution (CD-ROM oder FTP). Sie können die Hardware-Notes außerdem im Dokumentationsmenü von sysinstall oder auf der Webseite Release Information lesen.


2.3. Vor der Installation

2.3.1. Erstellen Sie eine Geräteliste

Bevor Sie FreeBSD installieren, erfassen Sie die Komponenten Ihres Rechners. Die FreeBSD-Installation wird die Komponenten (Festplatten, Netzwerkkarten, CD-ROM-Laufwerke) zusammen mit der Modellbezeichnung und des Herstellers anzeigen. FreeBSD wird auch versuchen, die richtige Konfiguration der Geräte zu ermitteln. Dazu gehören die benutzten Interrupts (IRQ) und IO-Ports. Wegen der Unwägbarkeiten von PC-Hardware kann die Konfiguration der Geräte allerdings fehlschlagen. In diesem Fall müssen Sie die von FreeBSD ermittelte Konfiguration korrigieren.

Wenn Sie schon ein anderes Betriebssystem, wie Windows oder Linux installiert haben, können Sie die Hardware-Konfiguration mit den Mitteln dieses Betriebssystems bestimmen. Wenn Sie nicht sicher sind, welche Einstellungen eine Erweiterungskarte besitzt, sehen Sie auf der Karte selbst nach. Manchmal sind die Einstellungen dort aufgedruckt. Gebräuchliche IRQs sind 3, 5 und 7. Die Adressen von IO-Ports werden normalerweise hexadezimal, zum Beispiel 0x330, angegeben.

Halten Sie die Gerätekonfiguration vor der Installation in einer Tabelle wie der nachstehenden fest:

Tabelle 2-1. Gerätekonfiguration

Gerät IRQ IO-Ports Anmerkung
erste Festplatte - - 40 GB, Seagate, erster IDE-Master
CD-ROM - - erster IDE-Slave
zweite Festplatte - - 20 GB, IBM, zweiter IDE-Master
erster IDE-Controller 14 0x1f0  
Netzwerkkarte - - Intel 10/100
Modem - - 3Com® 56K Faxmodem, an COM1
...      

Nachdem Sie wissen, über welche Hardware Ihr Rechner verfügt, müssen Sie diese Informationen mit den Hardwareanforderungen der zu installierenden FreeBSD-Version abgleichen.


2.3.2. Sichern Sie Ihre Daten

Wenn der Rechner, auf dem Sie FreeBSD installieren wollen, wichtige Daten enthält, sichern Sie bitte diese Daten. Prüfen Sie auch, dass Sie die Daten aus der Sicherung wiederherstellen können, bevor Sie FreeBSD installieren. Die FreeBSD-Installation fragt zwar nach, bevor Sie Daten auf Ihre Festplatte schreibt, Ihre Daten sind allerdings unwiderruflich verloren, wenn der Installationsvorgang einmal angelaufen ist.


2.3.3. Den Installationsort von FreeBSD festlegen

Wenn Sie die gesamte Festplatte für FreeBSD verwenden wollen, müssen Sie sich an dieser Stelle keine weiteren Gedanken machen - lesen Sie bitte im nächsten Abschnitt weiter.

Wenn Sie allerdings FreeBSD neben anderen Betriebssystemen betreiben wollen, müssen Sie wissen, wie Daten auf einer Festplatte abgelegt werden und welche Auswirkungen dies hat.


2.3.3.1. Platteneinteilung von FreeBSD/i386-Systemen

Eine PC-Festplatte wird in einzelne Bereiche unterteilt, die Partitionen heißen. FreeBSD verwendet intern ebenfalls Partitionen. Um Verwechslungen und Unklarheiten zu vermeiden, werden diese Plattenbereiche unter FreeBSD als Slices bezeichnet. So verwendet beispielsweise das Werkzeug fdisk den Begriff Slices, um sich auf PC-Partitionen zu beziehen. Auf einer PC-Festplatte können maximal vier Partitionen, die primäre Partitionen genannt werden, angelegt werden. Eine erweiterte Partition hebt diese Beschränkung auf. Eine Festplatte kann nur eine erweiterte Partition enthalten, die wiederum weitere so genannte logische Partitionen enthalten kann.

Jede Partition besitzt eine Partitions-ID - eine Zahl, die den Typ der Partition festlegt. FreeBSD-Partitionen tragen die Partitions-ID 165.

Üblicherweise kennzeichnen Betriebssysteme Partitionen in einer besonderen Art und Weise. Beispielsweise werden jeder primären und logischen Partition unter MS-DOS und dem verwandten Windows Laufwerksbuchstaben beginnend mit C: zugewiesen.

FreeBSD muss auf einer primären Partition installiert werden. In dieser Partition hält FreeBSD alle Daten einschließlich der Dateien, die Sie anlegen. Verfügt das System über mehrere Festplatten, können Sie auf allen oder einigen Platten eine FreeBSD-Partition einrichten. Zur Installation von FreeBSD benötigen Sie eine freie Partition: Dies kann eine extra für die Installation eingerichtete Partition sein oder eine existierende Partition, die nicht mehr benötigte Daten enthält.

Wenn auf allen Platten bereits sämtliche Partitionen benutzt werden, müssen Sie eine der Partitionen für FreeBSD frei machen. Benutzen Sie dazu die Werkzeuge des eingesetzten Betriebssystems (fdisk unter MS-DOS oder Windows).

Verfügt das System über eine freie Partition, benutzen Sie diese Partition. Es kann allerdings sein, dass Sie eine oder mehrere der vorhandenen Partitionen vorher verkleinern müssen.

Eine minimale FreeBSD-Installation benötigt nur 100 MB Plattenplatz. Diese Installation ist allerdings sehr begrenzt und lässt wenig Platz für Ihre eigenen Dateien. Realistischer sind 250 MB für FreeBSD ohne graphische Benutzeroberfläche und 350 MB für FreeBSD mit einer graphischen Benutzeroberfläche. Sie benötigen weiteren Platz für die Installation zusätzlicher Software.

Um die Partitionen zu verkleinern, können Sie beispielsweise das kommerzielle PartitionMagic® oder das freie GParted benutzen. Sowohl GParted als auch PartitionMagic können auch NTFS-Partitionen verändern. GParted ist auf vielen Linux-Live-CDs, beispielsweise der SystemRescueCD, verfügbar.

Bei der Veränderung von Microsoft Vista-Partionen kommt es manchmal zu Problemen. In einem solchen Fall ist es von Vorteil, wenn Sie eine Vista-Installations-CD zur Verfügung haben. Wie bei jeder Änderung an Ihrer Festplatte sollten Sie auch hier zuerst ein aktuelles Backup anlegen.

Warnung: Der falsche Gebrauch dieser Werkzeuge kann Daten auf der Festplatte löschen. Vor dem Einsatz dieser Werkzeuge stellen Sie bitte sicher, dass Sie frische, funktionierende Datensicherungen besitzen.

Beispiel 2-1. Eine bestehende Partition verwenden

Nehmen wir an, Sie haben einen Rechner mit einer 4 GB Festplatte, auf der schon eine Version von Windows installiert ist. Weiterhin haben Sie die Platte in zwei Laufwerke C: und D: unterteilt, die jeweils 2 GB groß sind. Auf C: wird 1 GB benutzt und 0,5 GB von Laufwerk D: werden benutzt.

Sie haben also eine Festplatte mit zwei Partitionen und könnten alle Daten von Laufwerk D: auf das Laufwerk C: kopieren. Damit wäre die zweite Partition für FreeBSD frei.

Beispiel 2-2. Eine bestehende Partition verkleinern

Nehmen wir an, Sie haben einen Rechner mit einer 4 GB Festplatte auf der schon eine Version von Windows installiert ist. Während der Installation von Windows haben sie eine große Partition C: angelegt, die 4 GB groß ist. Von den 4 GB werden 1,5 GB benutzt und Sie wollen 2 GB für FreeBSD verwenden.

Sie haben zwei Möglichkeiten, FreeBSD zu installieren:

  1. Sichern Sie die Daten der Windows-Partition und installieren Sie Windows erneut auf einer 2 GB großen Partition.

  2. Verkleinern Sie die Windows-Partition mit einem der oben aufgeführten Werkzeuge.


2.3.4. Netzwerkparameter ermitteln

Wird während der Installation ein Netzwerk benötigt (weil Sie über FTP oder von einem NFS-Server installieren wollen), müssen Sie die Konfiguration des Netzwerks kennen. Während der Installation werden Netzwerkparameter abgefragt, damit sich FreeBSD mit dem Netzwerk verbinden und die Installation abschließen kann.


2.3.4.1. Verbindung über Ethernet oder ein Kabel/DSL-Modem

Wenn Sie sich mit einem Ethernet verbinden oder eine Internet-Verbindung mit einem Ethernet-Adapter über Kabel oder DSL herstellen, benötigen Sie die nachstehenden Daten:

  1. IP-Adresse

  2. IP-Adresse des Default-Gateways

  3. Hostname

  4. IP-Adressen der DNS-Server

  5. Subnetzmaske

Wenn Sie die Daten nicht besitzen, fragen Sie bitte Ihren Systemadministrator oder Ihren Service-Provider. Können die Daten über DHCP bezogen werden, merken Sie sich diese Tatsache.


2.3.4.2. Verbindung über ein Modem

Auch wenn Sie sich mit einem normalen Modem bei einem ISP einwählen, können Sie FreeBSD aus dem Internet installieren. Die Installation über ein Modem dauert nur sehr lange.

Sie benötigen die nachstehenden Daten:

  1. Die Telefonnummer des ISPs.

  2. Die COM-Schnittstelle, an der das Modem angeschlossen ist.

  3. Den Benutzernamen und das Passwort für Ihr Konto.


2.3.5. Lesen Sie die FreeBSD-Errata

Auch wenn das FreeBSD-Project bemüht ist, ein Release so stabil wie möglich herzustellen, treten ab und an Fehler auf. In seltenen Fällen betrifft ein Fehler die Installations-Prozedur. Die Fehler und deren Behebungen werden in den FreeBSD-Errata festgehalten. Lesen Sie bitte die Errata, bevor Sie FreeBSD installieren, damit Sie nicht in frisch entdeckte Probleme laufen.

Dokumentation zu jedem Release, inklusive der Errata zu jedem Release, finden Sie im Release-Bereich des FreeBSD Webauftritts.


2.3.6. Die Installationsdateien beschaffen

FreeBSD kann von Dateien aus irgendeiner der nachstehenden Quellen installiert werden:

Lokale Medien

  • von einer CD-ROM oder einer DVD

  • von einem USB-Stick

  • von einer MS-DOS-Partition auf demselben Rechner

  • von einem SCSI- oder QIC-Bandlaufwerk

  • von Disketten

Netzwerk

  • von einem FTP-Server, wenn erforderlich auch durch eine Firewall oder durch einen HTTP-Proxy

  • von einem NFS-Server

  • über eine feste serielle oder eine feste parallele Verbindung

Wenn Sie eine FreeBSD-CD oder FreeBSD-DVD gekauft haben, besitzen Sie schon alles, was Sie zur Installation benötigen. Lesen Sie bitte im nächsten Abschnitt (Abschnitt 2.3.7) weiter.

Wenn Sie sich die FreeBSD-Installationsdateien noch nicht besorgt haben, lesen Sie bitte zuerst den Abschnitt 2.13. Dort werden die notwendigen Vorbereitungen für eine Installation von den eben genannten Medien beschrieben. Wenn Sie den Abschnitt durchgearbeitet haben, lesen Sie bitte in Abschnitt 2.3.7 weiter.


2.3.7. Das Startmedium vorbereiten

Um FreeBSD zu installieren, müssen Sie Ihren Rechner mit einem speziellen Startmedium hochfahren, das die Installationsroutine startet. Sie können das Installationsprogramm nicht unter einem anderen Betriebssystem ausführen. Ein Rechner startet normalerweise das auf der Festplatte installierte Betriebssystem, er kann aber auch von Disketten gestartet werden. Aktuelle Rechner können in der Regel auch von einer CD-ROM oder von einem USB-Stick starten.

Tipp: Wenn Sie eine FreeBSD CD-ROM oder DVD besitzen (gekauft oder selbst erstellt) und Ihr Rechner von CD-ROM oder DVD starten kann (üblicherweise können Sie das mit der BIOS-Option Boot Order einstellen), können Sie diesen Abschnitt überspringen. Eine FreeBSD CD-ROM oder DVD lässt sich direkt starten; Sie können damit FreeBSD ohne weitere Vorbereitungen installieren.

Um einen bootbaren USB-Stick zu erstellen, gehen Sie wie folgt vor:

  1. Das Speicherabbild für den USB-Stick herunterladen

    Das Speicherabbild finden Sie auf dem FreeBSD-FTP-Server ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.img (oder einem Spiegelserver) im Verzeichnis ISO-IMAGES/. Ersetzen Sie arch und version durch die von Ihnen verwendete Architektur und die FreeBSD-Version, die Sie einsetzen wollen. Für FreeBSD/i386 9.0-RELEASE finden Sie das Speicherabbild für den USB-Stick beispielsweise unter folgenden Link: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-i386-memstick.img.

    Das benötigte Speicherabbild hat den Dateityp .img. Das Verzeichnis ISO-IMAGES/ enthält verschiedene Speicherabbilder. Sie müssen also (basierend auf der zu installierenden FreeBSD-Version und/oder Ihrer Hardware) das für Sie passende Speicherabbild herunterladen.

    Wichtig: Sichern Sie Ihre Daten, bevor Sie fortfahren, da im nächsten Schritt alle auf dem USB-Stick befindlichen Daten gelöscht werden.

  2. Den USB-Stick vorbereiten

    Den USB-Stick unter FreeBSD vorbereiten

    Warnung: Das Beispiel im nächsten Schritt verwendet /dev/da0 als die Gerätedatei, über die Sie den USB-Stick ansprechen. Achten Sie besonders darauf, dass Sie die richtige Gerätedatei verwenden, da Sie ansonsten unbeabsichtigt Daten löschen könnten.

    1. Das Image mit dd(1) auf den Stick schreiben

      Bei der .img-Datei handelt es sich nicht um eine normale Datei, die Sie einfach auf den Stick kopieren können. Vielmehr handelt es sich dabei um ein Image des kompletten Dateisystems, das Sie mit dd(1) direkt auf den USB-Stick schreiben müssen:

      # dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=64k
      

      Wird dabei die Fehlermeldung Operation not permitted angezeigt, stellen Sie bitte sicher, dass das Zielgerät nicht verwendet, manuell eingehängt oder von einem Systemprogramm automatisch eingehängt wurde. Dann versuchen Sie es erneut.

    Den USB-Stick unter Windows® vorbereiten

    Warnung: Stellen Sie unbedingt sicher, dass Sie im folgenden Schritt den korrekten Laufwerkbuchstaben für Ihren USB-Stick angeben, da Sie ansonsten unbeabsichtigt Daten löschen könnten.

    1. Image Writer für Windows herunterladen

      Image Writer für Windows ist ein frei verfügbares Programm, mit dem Sie ein Image auf einen USB-Stick schreiben können. Laden Sie das Programm von https://launchpad.net/win32-image-writer/ herunter und entpacken Sie es in einen Ordner auf Ihrer Festplatte.

    2. Das Image mit Image Writer auf den Stick schreiben

      Klicken Sie doppelt auf das Symbol Win32DiskImager, um das Programm zu starten. Vergewissern Sie sich, dass es sich bei dem unter Device angezeigten Laufwerk um Ihren USB-Stick handelt. Danach klicken Sie auf das Ordnersymbol und wählen die zuvor heruntergeladene Image-Datei aus. Klicken Sie auf Save, um die Image-Datei zu laden. Nachdem Sie alle Eingaben nochmals geprüft haben, müssen Sie noch sicherstellen, dass kein anderes Programm auf den USB-Stick zugreift. Danach klicken Sie auf den Button Write, um das Image auf den USB-Stick zu schreiben.

Um Startdisketten zu erzeugen, benutzen Sie die nachstehende Anleitung:

  1. Abbilder der Startdisketten besorgen

    Wichtig: Beachten Sie, dass ab FreeBSD 8.X Startdisketten nicht mehr unterstützt werden. Lesen Sie bitte weiter oben in diesem Kapitel, wie Sie FreeBSD von einer CD-ROM, einer DVD oder einem USB-Stick installieren können.

    Die Abbilder der Startdisketten befinden sich auf dem Installationsmedium im Verzeichnis floppies/; sie können auch aus dem Internet heruntergeladen werden: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/version-RELEASE/floppies/. Ersetzen Sie arch und version durch die passende Architektur und die passende Version. Beispielsweise stehen die Startdisketten von FreeBSD/i386 8.3-RELEASE unter ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/8.3-RELEASE/floppies/.

    Die Abbilder besitzen die Dateinamenerweiterung .flp. Im Verzeichnis floppies/ befinden sich verschiedene Abbilder; welches Sie benutzen, hängt von der zu installierenden FreeBSD-Version und in einigen Fällen vom Zielrechner ab. In den meisten Fällen werden Sie vier Disketten benötigen: boot.flp, kern1.flp, kern2.flp sowie kern3.flp. Lesen Sie bitte die Datei README.TXT im Verzeichnis floppies/, sie enthält aktuelle Informationen zu den Abbildern.

    Wichtig: Wenn Sie die Abbilder aus dem Internet herunterladen, benutzen Sie bitte den Binärmodus des FTP-Programms. Einige Web-Browser verwenden den Textmodus (oder ASCII-Modus), was dazu führt, dass sich die erstellten Disketten nicht starten lassen.

  2. Die Disketten vorbereiten

    Pro Abbild benötigen Sie eine Diskette. Es ist wichtig, dass die verwendeten Disketten fehlerfrei sind. Sie können dies sicherstellen, indem Sie die Disketten selbst formatieren, verlassen Sie sich bitte nicht auf vorformatierte Disketten. Das Formatierprogramm von Windows zeigt fehlerhafte Blöcke nicht an, es markiert die Blöcke einfach als fehlerhaft und ignoriert sie dann. Benutzen Sie neue Disketten, wenn Sie diese Installationsart verwenden.

    Wichtig: Wenn Sie FreeBSD installieren und das Installationsprogramm abstürzt, einfriert oder sich merkwürdig verhält, sind oft fehlerbehaftete Disketten die Ursache. Schreiben Sie die Abbilder auf neue Disketten und versuchen Sie, noch mal zu installieren.

  3. Die Abbilder auf Disketten schreiben

    Die .flp-Dateien sind keine normalen Dateien, die Sie auf eine Diskette kopieren. Sie können die Abbilder nicht von einem Laufwerk auf ein anderes Laufwerk kopieren. Die Abbilder werden mit einem speziellen Werkzeug direkt auf die Diskette geschrieben.

    Wenn Sie die Startdisketten unter MS-DOS oder Windows erstellen, können Sie das mitgelieferte Werkzeug fdimage verwenden.

    Wenn Sie die Abbilder auf der CD-ROM verwenden und das CD-ROM-Laufwerk den Laufwerksbuchstaben E: besitzt, führen Sie den nachstehenden Befehl aus:

    E:\> tools\fdimage floppies\boot.flp A:
    

    Führen Sie das Kommando für jede .flp-Datei aus. Wechseln Sie bitte jedes Mal die Diskette und beschriften Sie die Diskette mit dem Namen der kopierten Datei. Falls Sie die Abbilder an anderer Stelle liegen haben, passen Sie bitte die Kommandozeile an. Wenn Sie keine CD-ROM besitzen, können Sie fdimage aus dem Verzeichnis tools des FreeBSD-FTP-Servers herunterladen.

    Wenn Sie Startdisketten auf einem UNIX System (zum Beispiel einem anderen FreeBSD System) erstellen, schreiben Sie die Abbilder mit dem Befehl dd(1) direkt auf die Disketten. Auf einem FreeBSD-System lautet die Kommandozeile:

    # dd if=boot.flp of=/dev/fd0
    

    Unter FreeBSD spricht /dev/fd0 das erste Diskettenlaufwerk an (das Laufwerk A:), /dev/fd1 spricht das Laufwerk B: an. Andere UNIX Varianten verwenden unter Umständen andere Gerätenamen, die in der Dokumentation des jeweiligen Systems beschrieben sind.

Nun ist alles für die FreeBSD-Installation vorbereitet.


2.4. Die Installation starten

Wichtig: Die Installationsprozedur lässt die Daten auf Ihren Laufwerken solange unverändert bis die nachstehende Meldung erscheint:

Last Chance: Are you SURE you want continue the installation?

If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!

We can take no responsibility for lost disk contents!

Vor dieser Meldung kann die Installationsprozedur jederzeit abgebrochen werden, ohne die Daten auf der Festplatte zu verändern. Wenn Sie meinen, etwas falsch konfiguriert zu haben, können Sie vor diesem Zeitpunkt einfach den Rechner ausschalten.


2.4.1. Der Systemstart

2.4.1.1. Systemstart von i386™-Systemen

  1. Schalten Sie zunächst Ihren Rechner aus.

  2. Schalten Sie den Rechner ein. Während des Starts sollte angezeigt werden, wie Sie das Systemeinstellungsmenü (oder BIOS) erreichen. Meist drücken Sie dazu die Tasten F2, F10, Del oder Alt+S. Benutzen Sie die angezeigte Tastenkombination. Viele Rechner zeigen beim Systemstart eine Grafik an. Typischerweise können Sie die Grafik mit der Taste Esc entfernen und so die angezeigten Meldungen lesen.

  3. Suchen Sie Option, die einstellt von welchem Gerät der Rechner startet. Normalerweise wird die Option Boot Order genannt und zeigt eine Geräteliste, beispielsweise Floppy, CD-ROM, First Hard Disk an.

    Wenn Sie von einer CD-ROM starten, stellen Sie sicher, das das CD-ROM-Laufwerk ausgewählt ist. Starten Sie hingegen von einem USB-Stick oder von einer Startdiskette, wählen Sie ebenfalls den entsprechenden Eintrag aus. Wenn Sie nicht sicher sind, lesen Sie bitte im Handbuch des Rechners oder im Handbuch der Systemplatine nach.

    Stellen Sie das gewünschte Startmedium ein und sichern Sie die Einstellungen. Der Rechner sollte dann neu starten.

  4. Wenn Sie (wie in Abschnitt 2.3.7 beschrieben) ein bootbaren USB-Stick vorbereitet haben, stöpseln Sie diesen bitte ein, bevor Sie Ihren Rechner einschalten.

    Wenn Sie den Rechner von einer CD-ROM starten, legen Sie die CD-ROM so früh wie möglich in das Laufwerk ein.

    Anmerkung: Bis einschließlich FreeBSD 7.3 kann FreeBSD auch von einer Startdiskette aus installiert werden. Eine Anleitung hierzu finden Sie in Abschnitt 2.3.7). Legen Sie die erste Diskette (diese enthält das Abbild boot.flp) in das Diskettenlaufwerk ein und starten Sie den Rechner.

    Wenn Ihr Rechner wieder normal startet und das existierende Betriebssystem lädt, kann das folgende Ursachen haben:

    1. Das Startmedium (Diskette, CD-ROM) ist nicht schnell genug eingelegt worden. Belassen Sie das Startmedium im Laufwerk und starten Sie Ihren Rechner neu.

    2. Die BIOS-Einstellungen sind falsch vorgenommen worden. Wiederholen Sie diesen Schritt, bis Sie die richtige Einstellung gefunden haben.

    3. Das verwendete BIOS kann nicht von dem gewünschten Medium starten.

  5. FreeBSD startet jetzt. Wenn Sie von einer CD-ROM starten, sehen Sie die folgenden Meldungen (Versionsangaben entfernt):

    Booting from CD-Rom...
    645MB medium detected
    CD Loader 1.2
    
    Building the boot loader arguments
    Looking up /BOOT/LOADER... Found
    Relocating the loader and the BTX
    Starting the BTX loader
    
    BTX loader 1.00 BTX version is 1.02
    Consoles: internal video/keyboard
    BIOS CD is cd0
    BIOS drive C: is disk0
    BIOS drive D: is disk1
    BIOS 636kB/261056kB available memory
    
    FreeBSD/i386 bootstrap loader, Revision 1.1
    
    Loading /boot/defaults/loader.conf
    /boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d]
    \          
    

    Wenn Sie mit Startdisketten hochfahren, sehen Sie folgende Meldungen (Versionsangaben entfernt):

    Booting from Floppy...
    Uncompressing ... done
    
    BTX loader 1.00  BTX version is 1.01
    Console: internal video/keyboard
    BIOS drive A: is disk0
    BIOS drive C: is disk1
    BIOS 639kB/261120kB available memory
    
    FreeBSD/i386 bootstrap loader, Revision 1.1
    
    Loading /boot/defaults/loader.conf
    /kernel text=0x277391 data=0x3268c+0x332a8 |
    
    Insert disk labelled "Kernel floppy 1" and press any key...
    

    Folgen Sie der Anweisung und entfernen Sie die boot.flp-Diskette, anschließend legen Sie die kern1.flp-Diskette ein und drücken Enter. Starten Sie das System mit der ersten Diskette und legen Sie, wenn Sie dazu aufgefordert werden, die anderen Disketten ein.

  6. Unabhängig davon, ob Sie von Disketten oder von CD-ROM gestartet haben, erscheint danach das FreeBSD Bootloader-Menü:

    Abbildung 2-1. FreeBSD Boot Loader Menu

    Warten Sie entweder zehn Sekunden oder drücken Sie Enter.


2.4.1.2. Systemstart bei SPARC64®-Systemen

Die meisten SPARC64®-Systeme sind so konfiguriert, dass sie automatisch von der Festplatte starten. Um FreeBSD auf einem solchen System zu installieren, müssen Sie das System aber über das Netzwerk oder von einer CD-ROM starten. Daher müssen Sie den Bootprozess unterbrechen und das System über das PROM (OpenFirmware) starten.

Dazu starten Sie Ihr System neu und warten, bis die Startmeldung erscheint. Der genaue Wortlaut hängt vom eingesetzten Modell ab, die Nachricht sollte aber ähnlich der folgenden aussehen:

Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.

Um den Startvorgang zu unterbrechen, drücken Sie nun die Tastenkombination L1+A oder Stop+A. Verwenden Sie eine serielle Verbindung, senden Sie das Signal BREAK über die serielle Konsole (etwa durch die Eingabe von ~# in den Programmen tip(1) oder cu(1)). In beiden Fällen landen Sie anschließend am PROM-Prompt:

ok         (1)
ok {0}     (2)
(1)
Der auf Einprozessorsystemen verwendete Prompt.
(2)
Der Prompt auf Mehrprozessorsystemen. Die Zahl steht dabei für die Anzahl der vorhandenen Prozessoren.

Nun legen Sie Ihre CD-ROM in das Laufwerk ein und geben am PROM-Prompt boot cdrom ein. Danach startet Ihr System von der eingelegten CD-ROM.


2.4.2. Die Geräteerkennung prüfen

Die letzten paar Hundert Zeilen der Bildschirmausgabe werden gesichert und können geprüft werden.

Um sich den Bildschirmpuffer anzusehen, drücken Sie die Taste Scroll-Lock. Im Puffer können Sie mit den Pfeiltasten oder den Tasten PageUp und PageDown blättern. Um zur normalen Bildschirmausgabe zurückzukehren, drücken Sie nochmals die Taste Scroll-Lock.

Prüfen Sie mit diesem Verfahren nun die Ausgaben der Geräteerkennung. Sie werden einen Text ähnlich wie in Abbildung 2-2 sehen. Die genauen Ausgaben sind abhängig von den in Ihrem System installierten Geräten.

Abbildung 2-2. Ausgabe der Geräteerkennung

avail memory = 253050880 (247120K bytes)
Preloaded elf kernel "kernel" at 0xc0817000.
Preloaded mfs_root "/mfsroot" at 0xc0817084.
md0: Preloaded image </mfsroot> 4423680 bytes at 0xc03ddcd4

md1: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1:<VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <iSA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0 <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci
0
usb0: <VIA 83572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr1
uhub0: 2 ports with 2 removable, self powered
pci0: <unknown card> (vendor=0x1106, dev=0x3040) at 7.3
dc0: <ADMtek AN985 10/100BaseTX> port 0xe800-0xe8ff mem 0xdb000000-0xeb0003ff ir
q 11 at device 8.0 on pci0
dc0: Ethernet address: 00:04:5a:74:6b:b5
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xec00-0xec1f irq 9 at device 10.
0 on pci0
ed0 address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
orm0: <Option ROM> at iomem 0xc0000-0xc7fff on isa0
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5'' drive> on fdc0 drive 0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/@ mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
pppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
plip0: <PLIP network interface> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master UDMA33
acd0: CD-RW <LITE-ON LTR-1210B> at ata1-slave PIO4
Mounting root from ufs:/dev/md0c
/stand/sysinstall running as init on vty0

Prüfen Sie die Ausgabe der Geräteerkennung sorgfältig und stellen Sie sicher, dass FreeBSD alle erwarteten Geräte gefunden hat. Wenn ein Gerät nicht gefunden wurde, wird es nicht angezeigt. Ist dies bei Ihnen der Fall, müssen Sie einen angepassten Kernel erstellen, da das betroffene Gerät (beispielsweise eine Soundkarte) in diesem Fall vom GENERIC-Kernel nicht unterstützt wird.

Sie gelangen im nächsten Schritt in ein Menü, in dem Sie über die Cursortasten das Land, in dem Sie sich befinden, auswählen können (Abbildung 2-3). Durch die Bestätigung mit der Enter-Taste wird automatisch das von Ihnen gewählte Land sowie die dazu passende Tastaturbelegung gewählt.

Abbildung 2-3. Ihr Land auswählen

Haben Sie als Land United States gewählt, wird automatisch die amerikanische Standardtastatur verwendet. Haben Sie hingegen ein anderes Land angegeben, erscheint das folgende Menü, in dem Sie Ihre Tastaturbelegung auswählen können (bestätigen Sie Ihre Auswahl mit der Enter-Taste).

Abbildung 2-4. Die Tastaturbelegung auswählen

Nachdem Sie das Land ausgewählt haben, erscheint das Hauptmenü von sysinstall.


2.5. Das Werkzeug sysinstall

Zum Installieren von FreeBSD stellt das FreeBSD-Project das Werkzeug sysinstall zur Verfügung. Das Werkzeug arbeitet textorientiert und bietet eine Reihe von Menüs und Bildschirmen, um den Installationsprozess zu konfigurieren und zu steuern.

Die Menüs von sysinstall werden mit Tasten wie den Pfeiltasten, Enter, Tab oder Space bedient. Eine ausführliche Beschreibung der Tastenbelegung ist in der Gebrauchsanweisung von sysinstall enthalten.

Die Gebrauchsanweisung können Sie lesen, indem Sie den Menüpunkt Usage auswählen. Stellen Sie sicher, dass die Schaltfläche [Select], wie in Abbildung 2-5 gezeigt, aktiviert ist und drücken Sie die Taste Enter.

Es erscheinen Anweisungen wie das Menüsystem zu bedienen ist. Wenn Sie diese gelesen haben, drücken Sie Enter, um in das Hauptmenü zurückzukehren.

Abbildung 2-5. Die Gebrauchsanweisung von sysinstall auswählen


2.5.1. Die Dokumentation abrufen

Aus dem Hauptmenü wählen Sie mit den Pfeiltasten Doc aus und drücken Enter.

Abbildung 2-6. Die Dokumentation abrufen

Es wird das Dokumentationsmenü angezeigt.

Abbildung 2-7. Das Dokumentationsmenü von sysinstall

Lesen Sie bitte unbedingt die mitgelieferte Dokumentation.

Um ein Dokument zu lesen, wählen Sie das Dokument mit den Pfeiltasten aus und drücken Enter. Wenn Sie das Dokument gelesen haben, kommen Sie mit der Taste Enter in das Dokumentationsmenü zurück.

Um in das Hauptmenü zurückzukommen, wählen Sie mit den Pfeiltasten Exit aus und drücken die Taste Enter.


2.5.2. Die Tastaturbelegung ändern

Um die Tastaturbelegung zu ändern, wählen Sie den Menüpunkt Keymap und drücken Enter. Dies ist nur erforderlich wenn Sie eine nicht standard-konforme Tastatur oder eine andere als eine amerikanische Tastatur einsetzen.

Abbildung 2-8. Das Hauptmenü von sysinstall

Eine andere Tastaturbelegung können Sie mit den Pfeiltasten markieren und der Taste Space auswählen. Wenn Sie die Taste Space nochmals drücken wird die Auswahl aufgehoben. Haben Sie eine Tastaturbelegung ausgewählt, markieren Sie mit den Pfeiltasten [ OK ] und drücken Sie Enter.

Der Bildschirmabzug zeigt nur einen der verfügbaren Belegungen an. Mit der Taste Tab markieren Sie die Schaltfläche [ Cancel ], die mit der Vorgabe-Belegung wieder in das Hauptmenü zurückführt.

Abbildung 2-9. Sysinstall Keymap Menu


2.5.3. Installationsoptionen einstellen

Wählen Sie Options aus und rücken die Taste Enter.

Abbildung 2-10. Das Hauptmenü von sysinstall

Abbildung 2-11. Optionen von sysinstall

Für die meisten Benutzer sind die voreingestellten Werte völlig ausreichend und brauchen daher nicht geändert werden. Der Name des Releases variiert mit der zu installierenden Version von FreeBSD.

Eine Beschreibung der ausgewählten Option erscheint blau hervorgehoben am unteren Ende des Bildschirms. Mit der Option Use Defaults können Sie alle Optionen auf die Vorgabewerte zurückstellen.

Wenn Sie die Hilfeseite zu den verschiedenen Optionen lesen wollen, drücken Sie die Taste F1.

Die Taste Q führt in das Hauptmenü zurück.


2.5.4. Eine Standard-Installation starten

Die Standard-Installation sollte von allen UNIX- oder FreeBSD-Anfängern benutzt werden. Markieren Sie mit den Pfeiltasten Standard und drücken Sie Enter, um die Installation zu starten.

Abbildung 2-12. Die Standard-Installation starten


2.6. Plattenplatz für FreeBSD bereitstellen

Ihre erste Aufgabe ist, FreeBSD Plattenplatz bereitzustellen und den Plattenplatz für sysinstall kenntlich zu machen (label). Sie müssen daher wissen, wie FreeBSD mit Platten umgeht.


2.6.1. Nummerierung der Laufwerke im BIOS

Bevor Sie FreeBSD installieren und konfigurieren, sollten Sie Sie einen wichtigen Punkt beachten. Dies gilt insbesondere dann, wenn Sie mehrere Festplatten besitzen.

In einem PC, der unter einem vom BIOS abhängigen Betriebssystem, wie MS-DOS oder Microsoft Windows läuft, kann das BIOS die normale Reihenfolge der Laufwerke verändern und das Betriebssystem beachtet diese Änderung. Mit dieser Funktion kann der Rechner von einem anderen Laufwerk als dem so genannten “primären Laufwerk” gestartet werden. Die Funktion ist sehr zweckmäßig für Benutzer, die Datensicherungen auf einer zweiten Platte erstellen und dafür Werkzeuge wie Ghost® oder xcopy einsetzen. Wenn die erste Platte ausfällt, von einem Virus befallen wird oder durch einen Fehler des Betriebssystems verunstaltet wird, können die Platten im BIOS logisch getauscht werden. Es sieht so aus, als wären die Laufwerke, ohne Öffnen des Gehäuses getauscht worden.

Teurere Systeme mit SCSI-Controllern haben oft BIOS-Erweiterungen, mit denen die Reihenfolge von bis zu sieben SCSI-Platten in ähnlicher Weise verändert werden kann.

Ein Benutzer, der es gewohnt ist, diese BIOS-Funktionen zu benutzen, mag überrascht sein, dass FreeBSD sich nicht wie erwartet verhält. FreeBSD verwendet das BIOS nicht und weiß daher nichts von der logischen Plattenordnung im BIOS. Dies kann zu sehr verwirrenden Situationen führen, insbesondere wenn die Platten identische Geometrien besitzen und Kopien voneinander sind.

Vor der Installation von FreeBSD sollte im BIOS die normale Nummerierung der Laufwerke eingestellt und so belassen werden. Ist es nötig, die Reihenfolge der Laufwerke zu verändern, so sollte das immer auf dem schweren Weg, also durch Öffnen des Gehäuses und Verändern der Jumper und Kabel, erfolgen.


2.6.2. Slices mit Fdisk erstellen

Anmerkung: Zu diesem Zeitpunkt werden noch keine Änderungen auf die Festplatte ausgeschrieben. Sie können daher sysinstall jederzeit verlassen, und erneut beginnen, wenn Sie denken, einen Fehler gemacht zu haben. Sie können sysinstall über die Menüs verlassen, die Taste U drücken oder die Option Undo wählen. Wenn Sie einmal nicht wissen, wie Sie ein Menü verlassen, können Sie den Rechner auch einfach ausschalten.

Nachdem Sie in sysinstall die Standard-Installation ausgewählt haben, werden Sie folgende Meldung sehen:

                                 Message
 In the next menu, you will need to set up a DOS-style ("fdisk")
 partitioning scheme for your hard disk. If you simply wish to devote
 all disk space to FreeBSD (overwriting anything else that might be on
 the disk(s) selected) then use the (A)ll command to select the default
 partitioning scheme followed by a (Q)uit. If you wish to allocate only
 free space to FreeBSD, move to a partition marked "unused" and use the
 (C)reate command.
                                [  OK  ]

                      [ Press enter or space ]

Drücken Sie, wie angegeben, Enter. Im nächsten Bildschirm werden alle Festplatten angezeigt, die der Kernel während der Geräteerkennung gefunden hat. Abbildung 2-13 zeigt ein Beispiel von einem System mit zwei IDE-Platten, die als ad0 und ad2 erkannt wurden.

Abbildung 2-13. Ein Laufwerk für Fdisk aussuchen

Sie fragen sich vielleicht, warum ad1 nicht angezeigt wird. Wurde die Platte vielleicht nicht erkannt?

Stellen Sie sich ein System mit zwei IDE-Platten vor. Eine Platte ist als Master am ersten Controller, die andere als Master am zweiten Controller angeschlossen. Wenn FreeBSD die Platten in der Reihenfolge, in der sie gefunden werden, nummerieren würde, hießen die Platten ad0 und ad1 und alles würde funktionieren.

Wenn Sie nun am ersten IDE-Controller eine dritte Platte als Slave anschließen würden, wäre diese Platte ad1. Die vorher ad1 genannte Platte würde nun ad2 heißen. Dateisysteme werden auf Geräten wie ad1s1a angelegt. Daher könnte es passieren, dass auf einmal Dateisysteme nicht mehr gefunden werden und Sie FreeBSD umkonfigurieren müssten.

Um diese Probleme zu umgehen, kann der Kernel so eingestellt werden, dass er Platten nach ihrem Anschlussort anstelle der gefundenen Reihenfolge benennt. Nach diesem Schema ist die Master-Platte am zweiten IDE-Controller immer ad2, auch wenn es die Geräte ad0 oder ad1 gar nicht gibt.

Dieses Verhalten ist in FreeBSD voreingestellt und der Grund warum im Beispiel die Geräte ad0 und ad2 angezeigt werden. Der Rechner, von dem die gezeigte Ausgabe stammt, hatte zwei IDE-Platten, die beide als Master konfiguriert waren, und keine Slave-Platten.

Wählen Sie die Platte aus, auf die Sie FreeBSD installieren wollen und drücken Sie [ OK ]. Anschließend startet Fdisk und zeigt einen Bildschirm wie den in Abbildung 2-14.

Der Bildschirm von Fdisk ist in drei Abschnitte unterteilt.

Der erste Abschnitt umfasst die ersten beiden Zeilen der Anzeige. Er enthält Einzelheiten über die aktuell ausgewählte Platte, unter anderem den FreeBSD-Gerätenamen, die Plattengeometrie und die Kapazität der Platte.

Der zweite Abschnitt zeigt die auf der Platte befindlichen Slices. Angezeigt wird der Anfang und das Ende der Slice, die Größe der Slice, der FreeBSD-Gerätename, eine Beschreibung und der Subtyp. Im Beispiel sehen Sie zwei unbenutzte Slices, die durch die Plattenbelegung auf PCs entstehen. Weiterhin sehen Sie eine große FAT-Slice, die ziemlich sicher unter MS-DOS/Windows als Laufwerk C: auftaucht und eine erweiterte Slice, die unter MS-DOS/Windows weitere Laufwerke enthalten kann.

Im dritten Abschnitt sind die Kommandos von Fdisk zusammengefasst.

Abbildung 2-14. Typischer Fdisk-Bildschirm vor dem Editieren

Die nächsten Schritte hängen von der beabsichtigten Einteilung der Festplatte ab.

Wenn Sie die gesamte Festplatte für FreeBSD verwenden wollen, drücken Sie die Taste A (entspricht dem Menüpunkt Use Entire Disk). Später im Installationsverlauf müssen Sie diese Auswahl bestätigen, danach werden alle bisherigen Daten von der Festplatte gelöscht. Diese Auswahl löscht vorher vorhandene Slices und ersetzt sie durch einen kleinen unbenutzten Bereich (der wieder durch das PC-Design bedingt ist) und eine große Slice für FreeBSD. Wählen Sie dann die neu erstellte Slice mit den Pfeiltasten aus und drücken Sie die Taste S, um die Slice als startfähig (bootbar) zu markieren. Abbildung 2-15 zeigt den Bildschirm zu diesem Zeitpunkt. Beachten Sie das A in der Spalte Flags. Dies zeigt an, dass die Slice aktiv ist und das System von dieser Slice starten wird.

Um Platz für FreeBSD zu schaffen, können Sie auch bestehende Slices löschen. Markieren Sie dazu die Slice mit den Pfeiltasten und drücken Sie die Taste D. Danach legen Sie eine neue Slice mit der Taste C an. Sie werden nach der Größe der zu erstellenden Slice gefragt; der Vorgabewert entspricht der größten Slice, die angelegt werden kann (entspricht entweder dem größten freien Bereich auf der Festplatte oder der ganzen Festplatte).

Wenn Sie schon Platz für FreeBSD geschaffen haben (beispielsweise mit PartitionMagic), können Sie eine neue Slice direkt mit der Taste C anlegen. Sie werden wieder nach der Größe der anzulegenden Slice gefragt.

Abbildung 2-15. Eine Partition über die gesamte Platte

Drücken Sie die Taste Q, wenn Sie fertig sind. Sysinstall merkt sich die Änderungen, schreibt sie aber noch nicht auf die Festplatte.


2.6.3. Einen Boot-Manager installieren

Sie können nun einen Boot-Manager installieren. Unter folgenden Umständen sollten Sie den FreeBSD-Boot-Manager installieren:

  • Das System besitzt mehr als ein Laufwerk und FreeBSD ist auf einem anderen Laufwerk als dem ersten Laufwerk installiert.

  • FreeBSD teilt sich das Laufwerk mit einem anderen Betriebssystem. Beim Systemstart wollen Sie auswählen, welches Betriebssystem gestartet wird.

Wird der Rechner ausschließlich mit FreeBSD betrieben und FreeBSD ist auf dem ersten Laufwerk installiert, dann genügt der Standard-Boot-Manager. Wenn Sie einen anderen Boot-Manager benutzen, der FreeBSD starten kann, wählen Sie bitte None aus.

Nachdem Sie die Auswahl getroffen haben, drücken Sie die Taste Enter.

Abbildung 2-16. Sysinstall Boot-Manager-Menü

In der Hilfe, die Sie mit der Taste F1 aufrufen, werden Probleme beschrieben, die entstehen können, wenn sich zwei Betriebssysteme ein Laufwerk teilen.


2.6.4. Slices auf einem anderen Laufwerk anlegen

Wenn das System mehr als ein Laufwerk besitzt, kehrt die Installationsprozedur nach der Auswahl des Boot-Managers zum Bildschirm Select Drives zurück. Sie können hier ein anderes Laufwerk auswählen und auf diesem Laufwerk mit Fdisk weitere Slices anlegen.

Wichtig: Wenn Sie FreeBSD auf einem anderen Laufwerk als dem ersten Laufwerk installieren, müssen Sie den FreeBSD-Boot-Manager auf beiden Laufwerken installieren.

Abbildung 2-17. Die Laufwerksauswahl verlassen

Die Taste Tab wechselt zwischen dem zuletzt ausgewählten Laufwerk und den Schaltflächen [ OK ] und [ Cancel ].

Drücken Sie einmal die Taste Tab, um [ OK ] auszuwählen und drücken Sie anschließend Enter um die Installation weiterzuführen.


2.6.5. Partitionen mit Bsdlabel anlegen

In jeder angelegten Slice müssen Sie Partitionen anlegen. Die Partitionen werden mit Buchstaben von a bis h gekennzeichnet. Die Buchstaben b, c und d haben eine besondere Bedeutung, die Sie beachten sollten.

Einige Anwendungen profitieren von einer besonderen Aufteilung der Partitionen, insbesondere wenn das System mehr als ein Laufwerk besitzt. Bei der ersten FreeBSD-Installation sollten Sie sich allerdings nicht zu viele Gedanken über die Partitionen machen. Wichtiger ist, dass Sie FreeBSD installieren und benutzen. Wenn Sie mehr Erfahrung mit FreeBSD gesammelt haben, können Sie FreeBSD jederzeit mit anderen Partitionen installieren.

Das folgende Schema legt vier Partitionen an: Eine Partition für den Auslagerungsbereich (swap space) und drei Partitionen für Dateisysteme.

Tabelle 2-2. Partitionen auf dem ersten Laufwerk

Partition Dateisystem Größe Beschreibung
a / 1 GB Das Root-Dateisystem. Jedes andere Dateisystem wird irgendwo unterhalb von diesem Dateisystem eingehangen. 1 GB ist eine vernünftige Größe für dieses Dateisystem. Sie werden hier wenig Daten speichern und FreeBSD benötigt ungefähr 128 MB Platz auf diesem Dateisystem. Der Rest ist für temporäre Daten und die Reserve, falls künftige Versionen von FreeBSD mehr Platz in / benötigen.
b N/A 2-3 x RAM

Der Auslagerungsbereich befindet sich auf der b-Partition. Es ist schon fast eine Kunst, die Größe des Auslagerungsbereichs richtig zu bestimmen. Eine gute Daumenregel ist, den Auslagerungsbereich zwei bis dreimal größer als den Hauptspeicher (RAM) anzulegen. Sie sollten mindestens 64 MB für den Auslagerungsbereich vorsehen. Wenn das System also weniger als 32 MB Hauptspeicher besitzt, richten Sie einen 64 MB großen Auslagerungsbereich ein.

Besitzt das System mehr als ein Laufwerk, können Sie auf jedem Laufwerk Auslagerungsbereiche anlegen. Da FreeBSD alle Auslagerungsbereiche benutzt, wird der Vorgang des Auslagerns durch mehrere Bereiche beschleunigt. Berechnen Sie in diesem Fall die Größe des benötigten Auslagerungsbereichs, beispielsweise 128 MB, und teilen Sie die Größe durch die Anzahl der Laufwerke. Dies gibt die Größe des Auslagerungsbereichs auf jedem Laufwerk. Mit zwei Platten ergibt das in diesem Beispiel 64 MB Auslagerungsbereich pro Platte.

e /var 512 MB bis 4096 MB Das Verzeichnis /var enthält Dateien, die sich dauernd ändern (Protokolldateien und Dateien für Verwaltungszwecke) und auf die im Normalbetrieb oft zugegriffen wird. Liegen diese Dateien in einem gesonderten Dateisystem, kann FreeBSD den Zugriff auf die Dateien optimieren, ohne den Zugriff auf Dateien mit einem anderen Zugriffmuster zu stören.
f /usr Der Rest des Laufwerks (mindestens 8 GB) Alle anderen Dateien werden normalerweise im Verzeichnis /usr oder einem Unterverzeichnis von /usr abgelegt.

Warnung: Die eben genannten Werte dienen nur als Beispiel und sollten nur von erfahrenen Benutzern editiert werden. Wir empfehlen Ihnen, die vom Partitionseditor vorgeschlagene Aufteilung (Auto Defaults) zu verwenden.

Wenn Sie FreeBSD auf mehr als einem Laufwerk installieren, müssen Sie noch weitere Partitionen in den Slices auf den anderen Laufwerken anlegen. Am einfachsten legen Sie pro Laufwerk zwei Partitionen an: eine für den Auslagerungsbereich und eine andere für ein Dateisystem.

Tabelle 2-3. Partitionen auf weiteren Laufwerken

Partition Dateisystem Größe Beschreibung
b - - Wie schon besprochen, können Sie den Auslagerungsbereich auf mehrere Platten verteilen. Auch wenn die a-Partition frei ist, sollte der Auslagerungsbereich entsprechend der Konvention auf der b-Partition angelegt werden.
e /diskn Der Rest des Laufwerks Der Rest der Platte wird von einer großen Partition eingenommen. Sie könnten für diese Partition die a-Partition anstelle der e-Partition benutzen. Allerdings ist die a-Partition per Konvention für das Root-Dateisystem (/) reserviert. Sie brauchen die Konvention nicht zu beachten, da aber sysinstall die Konvention beachtet, ist die Installation sauberer, wenn Sie das auch tun. Sie können das Dateisystem irgendwo einhängen. Das Beispiel schlägt die Verzeichnisse /diskn vor, wobei n die Laufwerke nummeriert. Sie können ein anderes Schema verwenden, wenn Sie möchten.

Wenn Sie die Aufteilung der Partitionen festgelegt haben, können Sie die Partitionen mit sysinstall anlegen. Es erscheint die nachstehende Meldung:

                                 Message
 Now, you need to create BSD partitions inside of the fdisk
 partition(s) just created. If you have a reasonable amount of disk
 space (1GB or more) and don't have any special requirements, simply
 use the (A)uto command to allocate space automatically. If you have
 more specific needs or just don't care for the layout chosen by
 (A)uto, press F1 for more information on manual layout.

                                [  OK  ]
                          [ Press enter or space ]

Drücken Sie Enter, um den FreeBSD-Partitionseditor, der Disklabel heißt, zu starten.

Abbildung 2-18 zeigt den Einstiegsbildschirm von Disklabel. Der Bildschirm ist in drei Bereiche geteilt.

Die ersten Zeilen zeigen den Namen des Laufwerks, das Sie gerade bearbeiten und die Slice, die die erstellten Partitionen enthält (Disklabel spricht hier von Partitionen anstatt von Slices). Der freie Platz einer Slice, der noch keiner Partition zugeordnet ist, wird ebenfalls angezeigt.

In der Mitte des Bildschirms werden die angelegten Partitionen, der Name des Dateisystems, das sich in der Partition befindet, dessen Größe und die Optionen zum Erstellen des Dateisystems angezeigt.

Das untere Drittel des Bildschirms zeigt die in Disklabel gültigen Tastenkombinationen.

Abbildung 2-18. Sysinstall Disklabel-Editor

Disklabel kann für Sie automatisch Partitionen mit vorgegebenen Größen erstellen (diese Standardgrößen werden durch einen internen Partitionierungsalgorithmus ermittelt, der auf der Plattengröße beruht). Probieren Sie das bitte jetzt aus und drücken Sie die Taste A. Der Bildschirm sieht danach ähnlich wie in Abbildung 2-19 aus. Abhängig von der Größe des Laufwerks können die Vorgabewerte richtig oder falsch sein. Da Sie die Vorgaben nicht akzeptieren müssen, spielt das keine Rolle.

Anmerkung: FreeBSD legt das Verzeichnis /tmp in einer eigenen Partition an. Dies verhindert, dass sich die Root-Partition mit temporären Dateien füllt.

Abbildung 2-19. Sysinstall Disklabel-Editor mit automatischen Vorgaben

Wollen Sie die vorgegebenen Partitionen nicht verwenden und durch eigene ersetzen, markieren Sie mit den Pfeiltasten die erste Partition und drücken Sie die Taste D, um die Partition zu löschen. Wiederholen Sie dies für alle vorgegebenen Partitionen.

Um die erste Partition (a), die als / eingehangen wird, zu erstellen, drücken Sie die Taste C. Stellen Sie dabei sicher, dass die richtige Slice im oberen Teil des Bildschirms markiert ist. Wie in Abbildung 2-20, erscheint ein Fenster, in dem Sie die Größe der Partition angeben müssen. Sie können die Größe in Blöcken oder einer Zahl gefolgt von M für Megabyte, G für Gigabyte oder C für Zylinder angeben.

Abbildung 2-20. Die Größe einer Partition festlegen

Die vorgegebene Größe erstellt eine Partition, die den Rest der Slice ausfüllt. Wenn Sie die Größen aus dem früheren Beispiel verwenden, löschen Sie die vorgeschlagene Größe mit der Taste Backspace und tragen Sie 512M ein, wie in Abbildung 2-21 gezeigt. Drücken Sie anschließend [ OK ].

Abbildung 2-21. Die Größe einer Partition ändern

Nachdem Sie die Größe der Partition festgelegt haben, werden Sie gefragt, ob die Partition ein Dateisystem oder einen Auslagerungsbereich enthalten soll (siehe Abbildung 2-22). Die erste Partition enthält ein Dateisystem, wählen Sie FS aus und drücken Sie die Taste Enter.

Abbildung 2-22. Den Partitionstyp festlegen

Abschließend müssen Sie, weil Sie ein Dateisystem erstellen, angeben, wo das Dateisystem eingehangen wird. Die Eingabe ist in Abbildung 2-23 dargestellt. Das Root-Dateisystem wird in / eingehangen, geben Sie daher / ein und drücken Sie die Taste Enter.

Abbildung 2-23. Den Mountpoint festlegen

Auf dem Bildschirm wird jetzt die neu angelegte Partition angezeigt. Wiederholen Sie diese Prozedur für die restlichen Partitionen. Beim Anlegen des Auslagerungsbereichs werden Sie nicht nach einem Mountpoint gefragt, da ein Auslagerungsbereich nie eingehangen wird. Wenn Sie die letzte Partition anlegen, /usr, können Sie die vorgeschlagene Größe stehen lassen. Das Dateisystem wird dann den Rest der Slice einnehmen.

Der letzte Bildschirm von Disklabel sieht wie in Abbildung 2-24 aus (Ihre Werte werden von den gezeigten Werten abweichen). Drücken Sie die Taste Q, um Disklabel zu verlassen.

Abbildung 2-24. Sysinstall Disklabel-Editor


2.7. Den Installationsumfang bestimmen

2.7.1. Die Distribution auswählen

Welche Software Sie installieren, hängt hauptsächlich vom Zweck des Rechners und dem zur Verfügung stehenden Plattenplatz ab. Die vorgegebenen Distributionen reichen von der minimalen Installation bis hin zu einer kompletten Installation. Anfänger sollten eine der vorgegebenen Distributionen auswählen, erfahrene Benutzer können die zu installierende Distribution anpassen.

Die Taste F1 führt zu einem Hilfebildschirm, der die Distributionen und deren Inhalte beschreibt. Drücken Sie Enter, um die Hilfe zu verlassen und zur Auswahl der Distribution zurückzukehren.

Wenn Sie eine graphische Benutzeroberfläche installieren wollen, müssen Sie die Konfiguration des X-Servers und die Auswahl der Benutzeroberfläche nach erfolgreicher Installation durchführen. Die Installation und Konfiguration des X-Servers wird in Kapitel 6 besprochen.

Wenn Sie einen angepassten Kernel erstellen wollen, wählen Sie eine Distribution aus, die den Quellcode (source code) enthält. Warum und wie Sie einen angepassten Kernel erstellen, erfahren Sie in Kapitel 9.

Natürlich ist das flexibelste System das, auf dem alles installiert ist. Wenn das System über ausreichend Plattenplatz verfügt, wählen Sie mit den Pfeiltasten die Option All aus (siehe Abbildung 2-25) und drücken die Taste Enter. Wenn Sie Bedenken haben, dass der Plattenplatz nicht ausreicht, wählen Sie eine Distribution, die weniger Software enthält. Machen Sie sich keine unnötigen Sorgen um die richtige Distribution, ausgelassene Distribution können später nachinstalliert werden.

Abbildung 2-25. Die Distribution auswählen


2.7.2. Die Ports-Sammlung installieren

Nach der Auswahl der Distribution haben Sie Gelegenheit, die FreeBSD-Ports-Sammlung zu installieren. Mit der Ports-Sammlung lässt sich Software Dritter auf einfache Art und Weise installieren. Der Quellcode der zu installierenden Software ist nicht in der Ports-Sammlung enthalten. Stattdessen enthält die Ports-Sammlung Dateien, die den Installationsprozess (herunterladen, übersetzen und installieren) automatisieren. Die Ports-Sammlung wird in Kapitel 5 besprochen.

Der Installationsprozess prüft nicht, ob ausreichend Platz für die Ports-Sammlung vorhanden ist. Wählen Sie die Ports-Sammlung bitte nur aus, wenn das System über ausreichenden Platz verfügt. In FreeBSD 9.0 nimmt die Ports-Sammlung ungefähr 500 MB Plattenplatz in Anspruch. Neuere Versionen von FreeBSD benötigen mit Sicherheit noch mehr Platz.

                         User Confirmation Requested
 Would you like to install the FreeBSD ports collection?

 This will give you ready access to over 23,000 ported software packages,
 at a cost of around 500 MB of disk space when "clean" and possibly much
 more than that if a lot of the distribution tarballs are loaded
 (unless you have the extra CDs from a FreeBSD CD/DVD distribution
 available and can mount it on /cdrom, in which case this is far less
 of a problem).

 The ports collection is a very valuable resource and well worth having
 on your /usr partition, so it is advisable to say Yes to this option.

 For more information on the ports collection & the latest ports,
 visit:
     http://www.FreeBSD.org/ports

                              [ Yes ]     No

Wählen Sie mit den Pfeiltasten [ Yes ] aus, um die Ports-Sammlung zu installieren. Wählen Sie [ No ] aus, um die Ports-Sammlung auszulassen. Drücken Sie danach die Taste Enter, es erscheint wieder das Distributionsmenü.

Abbildung 2-26. Die Distributionen bestätigen

Wenn Sie mit den ausgewählten Optionen zufrieden sind, wählen Sie mit den Pfeiltasten Exit aus (stellen Sie sicher, dass [ OK ] aktiv ist) und drücken Sie die Taste Enter.


2.8. Das Installationsmedium auswählen

Wenn Sie von einer CD-ROM oder einer DVD installieren, wählen Sie bitte Install from a FreeBSD CD/DVD aus. Stellen Sie sicher, dass [ OK ] aktiv ist und drücken Sie dann die Taste Enter, um mit der Installation fortzufahren.

Wenn Sie ein anderes Installationsmedium benutzen, wählen Sie die passende Option aus und folgen den angezeigten Anweisungen.

Die Hilfeseiten über Installationsmedien erreichen Sie mit der Taste F1. Drücken Sie Enter, um zur Auswahl des Installationsmediums zurückzukehren.

Abbildung 2-27. Das Installationsmedium auswählen

FTP-Installationsmodi: Sie können zwischen drei FTP-Installationsmodi wählen: Active-FTP, Passive-FTP oder über einen HTTP-Proxy.

FTP Active: Install from an FTP server

Diese Option führt alle FTP-Operationen im Active-Mode aus. Dieser Modus funktioniert nicht durch Firewalls, er funktioniert aber mit alten FTP-Servern, die den Passive-Mode nicht beherrschen. Wenn die Verbindung im Passive-Mode (das ist die Vorgabe) hängt, versuchen Sie den Active-Mode.

FTP Passive: Install from an FTP server through a firewall

Mit dieser Option benutzt sysinstall den Passive-Mode für alle FTP-Operationen. In diesem Modus funktionieren Verbindungen durch Firewalls, die einkommende Pakete auf beliebigen TCP-Ports blockieren.

FTP via a HTTP proxy: Install from an FTP server through a http proxy

Diese Option weist sysinstall an, alle FTP-Operationen mit HTTP über einen Proxy (wie ein Web-Browser) durchzuführen. Der Proxy leitet die Anfragen an den richtigen FTP-Server weiter. Mit dieser Option passieren Sie eine Firewall, die FTP-Verbindungen verbietet, aber einen HTTP-Proxy anbietet. Neben dem FTP-Server müssen Sie in diesem Fall den Proxy-Server angeben.

Bei einem FTP-Proxy-Server müssen Sie normalerweise den Ziel-FTP-Server als Teil des Benutzernamens hinter dem Klammeraffen (“@”) angeben. Der Proxy-Server übernimmt die Kommunikation mit dem Ziel-FTP-Server. Nehmen wir an, Sie wollen von ftp.FreeBSD.org über den FTP-Proxy foo.example.com auf Port 1234 installieren.

Wählen Sie das Menü Options aus und setzen Sie dort den FTP-Benutzernamen (username) auf ftp@ftp.FreeBSD.org. Als Passwort geben Sie bitte Ihre E-Mail-Adresse an. Setzen Sie das Installationsmedium auf Active-FTP oder Passive-FTP, je nachdem welchen Modus der Proxy-Server unterstützt. Für die URL geben Sie ftp://foo.example.com:1234/pub/FreeBSD an.

Der Proxy-Server foo.example.com leitet Zugriffe auf das Verzeichnis /pub/FreeBSD an den Server ftp.FreeBSD.org weiter. Daher können foo.example.com als FTP-Server angeben.


2.9. Die Installation festschreiben

Wenn Sie wünschen, kann die Installation nun beginnen. Dies ist die letzte Gelegenheit, die Installation abzubrechen und Änderungen auf der Festplatte zu vermeiden.

                       User Confirmation Requested
 Last Chance! Are you SURE you want to continue the installation?

 If you're running this on a disk with data you wish to save then WE
 STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!

 We can take no responsibility for lost disk contents!

                             [ Yes ]    No

Wählen Sie [ Yes ] aus und drücken Sie Enter, um weiter zu machen.

Die Installationsdauer hängt von den ausgewählten Distributionen, dem Installationsmedium und der Geschwindigkeit des Rechners ab. Während der Installation wird der Fortgang mit Statusmeldungen angezeigt.

Die Installation ist beendet, wenn die folgende Meldung erscheint:

                               Message

Congratulations! You now have FreeBSD installed on your system.

We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.

If you wish to re-enter this utility after the system is up, you may
do so by typing: /usr/sbin/sysinstall.

                                 [ OK ]

                      [  Press enter or space  ]

Drücken Sie die Taste Enter, um die Nacharbeiten durchzuführen.

Wenn Sie [ No ] auswählen und Enter drücken wird die Installation abgebrochen und das System wird nicht verändert. Die nachstehende Meldung wird angezeigt:

                                Message
Installation complete with some errors.  You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.

                                 [ OK ]

Die Meldung wird angezeigt, weil nichts installiert wurde. Drücken Sie Enter, um in das Hauptmenü zurückzukehren. Dort können Sie die Installationsprozedur verlassen.


2.10. Arbeiten nach der Installation

Nach einer erfolgreichen Installation wird das System konfiguriert. Sie können das System direkt konfigurieren oder nach einem Neustart. Nach einem Neustart rufen Sie sysinstall auf und wählen den Menüpunkt Configure.


2.10.1. Netzwerkkonfiguration

Wenn Sie schon PPP für eine FTP-Installation konfiguriert haben, erscheint dieser Bildschirm nicht. Sie können die Konfiguration später in sysinstall vornehmen.

Netzwerke und die Konfiguration von FreeBSD als Gateway oder Router werden eingehend im Kapitel Weiterführende Netzwerkthemen behandelt.

                      User Confirmation Requested
   Would you like to configure any Ethernet or PPP network devices?

                             [ Yes ]   No

Wenn Sie eine Netzwerkkarte konfigurieren wollen, wählen Sie [ Yes ] aus und drücken Sie die Taste Enter. Wählen Sie [ No ], um die Netzwerkkonfiguration zu überspringen.

Abbildung 2-28. Eine Netzwerkkarte auswählen

Wählen Sie die zu konfigurierende Karte mit den Pfeiltasten aus und drücken Sie die Taste Enter.

                      User Confirmation Requested
       Do you want to try IPv6 configuration of the interface?

                              Yes   [ No ]

Für das gezeigte Installationsbeispiel genügte das momentan verwendete Internet-Protokoll (IPv4). Daher wurde mit den Pfeiltasten [ No ] ausgewählt und mit der Taste Enter bestätigt.

Wenn Sie durch einen RA-Server mit einem IPv6-Netzwerk verbunden sind, wählen Sie bitte [ Yes ] und drücken die Taste Enter. Die Suche nach den RA-Servern dauert einige Sekunden.

                             User Confirmation Requested
        Do you want to try DHCP configuration of the interface?

                              Yes   [ No ]

Falls Sie das Dynamic Host Configuration Protocol (DHCP) nicht verwenden, wählen Sie [ No ] aus und drücken Sie Enter.

Wenn Sie [ Yes ] auswählen, wird das Programm dhclient ausgeführt und bei Erfolg die Netzwerkkarte konfiguriert. Mehr über DHCP können Sie in Abschnitt 30.5 nachlesen.

Der nächste Bildschirmabzug zeigt die Netzwerkkonfiguration eines Systems, das Gateway für das lokale Netz ist.

Abbildung 2-29. Die Netzwerkkarte ed0 konfigurieren

Tragen Sie in die Felder, die Sie mit der Taste Tab auswählen können, die richtige Konfiguration ein.

Host

Der vollständige Rechnername (fully-qualified hostname), wie in diesem Beispiel k6-2.example.com.

Domain

Der Domain-Name, in dem sich der Rechner befindet. Im Beispiel ist das example.com.

IPv4 Gateway

Die IP-Adresse des Rechners, der Pakete an entfernte Netze weiterleitet. Sie müssen dieses Feld ausfüllen, wenn der sich der Rechner in einem Netzwerk befindet. Lassen Sie das Feld leer, wenn der Rechner der Gateway in das Internet ist. Der IPv4-Gateway wird auch default gateway oder default route genannt.

Name server

Die IP-Adresse des lokalen DNS-Servers. Im Beispiel gibt es keinen lokalen DNS-Server, daher wurde der DNS-Server des Providers (208.163.10.2) benutzt.

IPv4 address

Die IP-Adresse der Netzwerkkarte (192.168.0.1).

Netmask (Netzmaske)

Im Beispiel werden Adressen aus einem Klasse C Netz (192.168.0.0 bis 192.168.0.255) benutzt. Standardmäßig besitzt ein Klasse C Netz die Netzmaske 255.255.255.0.

Extra options to ifconfig (Optionen für ifconfig)

Zusätzliche Optionen für den Befehl ifconfig, die spezifisch für die verwendete Netzwerkkarte sind. Im Beispiel sind keine Optionen angegeben.

Wenn Sie alle Werte eingegeben haben, wählen Sie mit Tab [ OK ] aus und drücken Sie Enter.

                      User Confirmation Requested
        Would you like to bring the ed0 interface up right now?

                             [ Yes ]   No

Wenn Sie [ Yes ] auswählen und Enter drücken, wird die Netzwerkkonfiguration aktiviert. Allerdings bringt dies zu diesem Zeitpunkt nicht viel, da der Rechner noch neu gestartet werden muss.


2.10.2. Gateway einrichten

                       User Confirmation Requested
       Do you want this machine to function as a network gateway?

                              [ Yes ]    No

Wählen Sie [ Yes ], wenn der Rechner ein Gateway für ein lokales Netz ist und Pakete an andere Netze weiterleitet. Wenn der Rechner ein normaler Netzknoten ist, wählen Sie [ No ] aus. Bestätigen Sie die auswahl mit der Taste Enter.


2.10.3. IP-Dienste einrichten

                      User Confirmation Requested
Do you want to configure inetd and the network services that it provides?

                               Yes   [ No ]

Wenn [ No ] ausgewählt wird, werden Dienste wie telnetd nicht aktiviert. Benutzer können sich dann von entfernten Rechnern nicht mit telnet an dieser Maschine anmelden. Lokale Benutzer können aber auf entfernte Rechner mit telnet zugreifen.

Die Dienste können Sie nach der Installation aktivieren, indem Sie die Datei /etc/inetd.conf editieren. Dies wird in Abschnitt 30.2.1 beschrieben.

Wenn Sie jetzt weitere Dienste aktivieren möchten, wählen Sie [ Yes ] aus. Es erscheint die nachstehende Rückfrage:

                      User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd.  Enabling
these services may increase risk of security problems by increasing
the exposure of your system.

With this in mind, do you wish to enable inetd?

                             [ Yes ]   No

Bestätigen Sie die Rückfrage mit [ Yes ].

                      User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available.  The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled.  Note that services for
IPv6 must be separately enabled from IPv4 services.

Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.

                             [ Yes ]   No

Wenn Sie [ Yes ] auswählen, können Sie Dienste aktivieren, in dem Sie das Zeichen # am Zeilenanfang entfernen.

Abbildung 2-30. inetd.conf editieren

Wenn Sie die gewünschten Dienste aktiviert haben, drücken Sie die Taste Esc. Es erscheint ein Menü, in dem Sie die Änderungen abspeichern und den Editor verlassen können.


2.10.4. SSH aktivieren

                      User Confirmation Requested
                  Would you like to enable SSH login?
                           Yes        [  No  ]

Durch die Auswahl von [ Yes ], wird sshd(8), der OpenSSH-Daemon aktiviert. Danach ist es möglich, sich über eine verschlüsselte Verbindung auf Ihrem System anzumelden. Weitere Informationen über OpenSSH finden Sie in Abschnitt 15.10 des FreeBSD-Handbuchs.


2.10.5. Anonymous-FTP

                      User Confirmation Requested
 Do you want to have anonymous FTP access to this machine?

                              Yes    [ No ]

2.10.5.1. Anonymous-FTP verbieten

Wenn Sie die vorgegebene Auswahl [ No ] mit der Taste Enter bestätigen, können Benutzer, die ein Konto und ein Passwort auf dem System besitzen, immer noch mit FTP auf das System zugreifen.


2.10.5.2. Anonymous-FTP erlauben

Wenn Sie Anonymous-FTP erlauben, darf jeder auf Ihr System zugreifen. Bedenken Sie die Folgen für die Systemsicherheit (siehe Kapitel 15) bevor Sie diese Option aktivieren.

Um Anonymous-FTP zu aktivieren, wählen Sie mit den Pfeiltasten [ Yes ] aus und drücken Sie die Taste Enter. Es erscheint folgende Meldung:

                       User Confirmation Requested
 Anonymous FTP permits un-authenticated users to connect to the system
 FTP server, if FTP service is enabled.  Anonymous users are
 restricted to a specific subset of the file system, and the default
 configuration provides a drop-box incoming directory to which uploads
 are permitted.  You must separately enable both inetd(8), and enable
 ftpd(8) in inetd.conf(5) for FTP services to be available.  If you
 did not do so earlier, you will have the opportunity to enable inetd(8)
 again later.

 If you want the server to be read-only you should leave the upload
 directory option empty and add the -r command-line option to ftpd(8)
 in inetd.conf(5)

 Do you wish to continue configuring anonymous FTP?

                          [ Yes ]         No

Diese Nachricht informiert Sie darüber, dass der FTP-Dienst auch in der Datei /etc/inetd.conf aktiviert werden muss, wenn Sie anonyme FTP-Verbindungen erlauben wollen (lesen Sie dazu auch Abschnitt 2.10.3 des FreeBSD-Handbuchs). Wählen Sie [ Yes ] und drücken Sie Enter, um fortzufahren. Danach erscheint der folgende Bildschirm:

Abbildung 2-31. Anonymous-FTP konfigurieren

Mit der Taste Tab wechseln Sie zwischen den Feldern, in die Sie die benötigten Informationen eingeben.

UID

Die User-ID, die dem anonymen FTP-Benutzer zugewiesen werden soll. Alle hochgeladenen Dateien werden diesem User-ID gehören.

Group

Die Gruppe, zu der der anonyme FTP-Benutzer gehören soll.

Comment

Eine Beschreibung dieses Benutzers in der Datei /etc/passwd.

FTP Root Directory

Ort, an dem Dateien für anonymen FTP-Zugang bereitgestellt werden sollen.

Upload Subdirectory

Das Verzeichnis, in dem von einem anonymen FTP-Benutzer hochgeladene Dateien gespeichert werden.

Das FTP-Wurzelverzeichnis wird per Voreinstellung in /var angelegt. Wenn in /var zu wenig Platz vorhanden ist, können Sie das FTP-Wurzelverzeichnis beispielsweise nach /usr/ftp verlegen.

Wenn Sie mit den Einstellungen zufrieden sind, drücken Sie die Taste Enter.

                          User Confirmation Requested
         Create a welcome message file for anonymous FTP users?

                              [ Yes ]    No

Wenn Sie [ Yes ] auswählen und mit Enter bestätigen, können Sie die Begrüßungsmeldung des FTP-Servers in einem Editor ändern.

Abbildung 2-32. Begrüßungsmeldung des FTP-Servers editieren

Der Editor, in dem Sie sich befinden, heißt ee. Folgen Sie den Anweisungen, um die Meldung zu editieren. Sie können die Meldung auch später in einem Editor Ihrer Wahl editieren. Merken Sie sich dazu den Dateinamen, der im Editor unten angezeigt wird.

Wenn Sie die Taste Esc drücken, erscheint ein Menü, in dem a) leave editor vorgewählt ist. Drücken Sie die Taste Enter, um den Editor zu verlassen. Falls Sie Änderungen vorgenommen haben, bestätigen Sie die Änderungen nochmals mit Enter.


2.10.6. Network-File-System einrichten

Mit dem Network-File-System (NFS) können Sie über ein Netzwerk auf Dateien zugreifen. Ein Rechner kann NFS-Server, NFS-Client oder beides sein. NFS wird in Abschnitt 30.3 besprochen.


2.10.6.1. NFS-Server einrichten

                       User Confirmation Requested
 Do you want to configure this machine as an NFS server?

                              Yes    [ No ]

Wenn Sie keinen NFS-Server benötigen, wählen Sie [ No ] aus und bestätigen Sie mit Enter.

Wenn Sie [ Yes ] auswählen, erscheint der Hinweis, dass die Datei exports angelegt werden muss.

                               Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
                               [ OK ]

Drücken Sie Enter und es wird ein Editor gestartet, in dem Sie die Datei exports editieren können.

Abbildung 2-33. exports editieren

Folgen Sie den Anweisungen, um Dateisysteme zu exportieren. Sie können die Datei auch später in einem Editor Ihrer Wahl editieren. Merken Sie sich dazu den Dateinamen, der im Editor unten angezeigt wird.

Drücken Sie die Taste Esc und es erscheint ein Menü, in dem a) leave editor vorgewählt ist. Drücken Sie die Taste Enter, um den Editor zu verlassen.


2.10.6.2. NFS-Client einrichten

Mit einem NFS-Client können Sie auf NFS-Server zugreifen.

                       User Confirmation Requested
 Do you want to configure this machine as an NFS client?

                              Yes   [ No ]

Wählen Sie entweder [ Yes ] oder [ No ] aus und drücken Sie Enter.


2.10.7. Die Systemkonsole einrichten

Sie können verschiedene Merkmale der Systemkonsole anpassen.

                      User Confirmation Requested
       Would you like to customize your system console settings?

                              [ Yes ]  No

Wenn Sie die Merkmale der Systemkonsole anpassen wollen, wählen Sie [ Yes ] aus und drücken Sie die Taste Enter.

Abbildung 2-34. Merkmale der Systemkonsole

Oft wird ein Bildschirmschoner auf der Konsole aktiviert. Wälen Sie mit den Pfeiltasten Saver aus und drücken Sie die Taste Enter.

Abbildung 2-35. Bildschirmschoner auswählen

Wählen Sie den gewünschten Bildschirmschoner mit den Pfeiltasten aus und drücken Sie Enter. Das Konfigurationsmenü der Systemkonsole erscheint wieder.

In der Voreinstellung wird der Bildschirmschoner nach 300 Sekunden aktiviert. Um diese Zeitspanne zu ändern, wählen Sie wieder Saver aus. Mit den Pfeiltasten wählen Sie dann Timeout aus und drücken Enter. Es erscheint ein Eingabefenster:

Abbildung 2-36. Den Bildschirmschoner einstellen

Ändern Sie die Zeitspanne und wählen Sie [ OK ] aus. Mit Enter kehren Sie in das Konfigurationsmenü der Systemkonsole zurück.

Abbildung 2-37. Die Konfiguration der Systemkonsole verlassen

Um die Nacharbeiten fortzuführen, wählen Sie Exit aus und drücken Sie Enter.


2.10.8. Die Zeitzone einstellen

Wenn Sie die Zeitzone richtig einstellen, kann Ihr Rechner automatisch regional bedingte Zeitumstellungen ausführen und andere von der Zeitzone abhängige Funktionen handhaben.

Das folgende Beispiel gilt für den Osten der USA. Ihre Auswahl hängt vom geographischen Standort Ihres Rechners ab.

                      User Confirmation Requested
          Would you like to set this machine's time zone now?

                            [ Yes ]   No

Um die Zeitzone einzustellen, wählen Sie [ Yes ] und drücken Enter.

                       User Confirmation Requested
 Is this machine's CMOS clock set to UTC? If it is set to local time
 or you don't know, please choose NO here!

                              Yes   [ No ]

Je nachdem ob die Systemzeit die Zeitzone UTC verwendet, wählen Sie [ Yes ] oder [ No ] aus. Bestätigen Sie die Auswahl mit der Taste Enter.

Abbildung 2-38. Das Gebiet auswählen

Wählen Sie mit den Pfeiltasten das richtige Gebiet aus und drücken Sie Enter.

Abbildung 2-39. Das Land auswählen

Wählen Sie mit den Pfeiltasten das richtige Land aus und drücken Sie Enter.

Abbildung 2-40. Die Zeitzone auswählen

Wählen Sie mit den Pfeiltasten die richtige Zeitzone aus drücken Sie Enter.

                            Confirmation
            Does the abbreviation 'EDT' look reasonable?

                            [ Yes ]   No

Wenn die angezeigte Abkürzung der Zeitzone richtig ist, bestätigen Sie diese mit der Taste Enter.


2.10.9. Linux-Kompatibilität

Anmerkung: Die folgenden Anweisungen sind nur für FreeBSD 7.X gültig. Installieren Sie eine FreeBSD 8.X-Version, wird der folgende Bildschirm nicht angezeigt.

                      User Confirmation Requested
          Would you like to enable Linux binary compatibility?

                            [ Yes ]   No

Wenn Sie [ Yes ] auswählen und Enter drücken, können Sie Linux-Software auf FreeBSD laufen lassen. Später wird dazu die notwendige Software installiert.

Wenn Sie über FTP installieren, müssen Sie mit dem Internet verbunden sein. Einige FTP-Server bieten nicht alle verfügbare Software an. Es kann sein, dass die nötige Software für die Linux-Kompatibilität nicht installiert werden kann, dies können Sie später jedoch nachholen.


2.10.10. Die Maus konfigurieren

Mit einer 3-Tasten-Maus können Sie Texte auf der Konsole und in Programmen markieren und einfügen (cut and paste). Wenn Sie eine 2-Tasten-Maus besitzen, können Sie eine 3-Tasten-Maus emulieren. Lesen Sie dazu nach der Installation die Hilfeseite moused(8). Das folgende Beispiel zeigt die Konfiguration einer nicht-USB-Maus (PS/2 oder serielle Maus):

                      User Confirmation Requested
         Does this system have a PS/2, serial, or bus mouse?

                            [ Yes ]    No

Wählen Sie [ Yes ] für eine PS/2-, eine serielle oder eine Bus-Maus. Haben Sie hingegen eine USB-Maus, wählen Sie [ No ]. Danach drücken Sie Enter.

Abbildung 2-41. Das Mausprotokoll festlegen

Markieren Sie mit den Pfeiltasten Type und drücken Sie press Enter.

Abbildung 2-42. Das Mausprotokoll festlegen

Im Beispiel wurde eine PS/2-Maus verwendet, sodass die Vorgabe Auto passend war. Sie können das Protokoll mit den Pfeiltasten ändern. Stellen Sie sicher, dass [ OK ] aktiviert ist und verlassen Sie das Menü mit der Taste Enter.

Abbildung 2-43. Den Mausport einstellen

Wählen Sie mit den Pfeiltasten Port und drücken Sie die Taste Enter.

Abbildung 2-44. Den Mausport einstellen

Im Beispiel wurde eine PS/2-Maus verwendet, sodass die Vorgabe PS/2 richtig war. Sie können den Port mit den Pfeiltasten ändern. Bestätigen Sie die Auswahl mit der Taste Enter.

Abbildung 2-45. Den Mouse-Daemon aktivieren

Wählen Sie nun mit den Pfeiltasten Enable aus und drücken Sie die Taste Enter, um den Mouse-Daemon zu aktivieren und zu testen.

Abbildung 2-46. Den Mouse-Daemon testen

Bewegen Sie die Maus hin und her und prüfen Sie, dass sich der Mauszeiger entsprechend bewegt. Wenn alles in Ordnung ist, wählen Sie [ Yes ] aus und drücken Sie Enter. Wenn sich die Maus nicht richtig verhält, wurde sie nicht korrekt konfiguriert. Wählen Sie in diesem Fall [ No ] und versuchen Sie, die Einstellungen zu korrigieren.

Um mit den Nacharbeiten fortzufahren, wählen Sie mit den Pfeiltasten Exit aus und drücken Sie Enter.


2.10.11. Pakete installieren

Pakete (packages) sind schon übersetzte Programme und sind ein zweckmäßiger Weg, Programme zu installieren.

Beispielhaft wird im Folgenden die Installation eines Paketes gezeigt. In diesem Schritt können auch weitere Pakete installiert werden. Nach der Installation können Sie mit sysinstall zusätzliche Pakete installieren.

                     User Confirmation Requested
 The FreeBSD package collection is a collection of hundreds of
 ready-to-run applications, from text editors to games to WEB servers
 and more. Would you like to browse the collection now?

                            [ Yes ]   No

Nachdem Sie [ Yes ] ausgewählt und Enter gedrückt haben, gelangen Sie in die Paketauswahl:

Abbildung 2-47. Die Paketkategorie aussuchen

Es stehen nur die Pakete zur Auswahl, die sich auf dem momentanen Installationsmedium befinden.

Wenn Sie All auswählen, werden alle Pakete angezeigt. Sie können die Anzeige auf die Pakete einer Kategorie beschränken. Wählen Sie mit den Pfeiltasten die Kategorie aus und drücken Sie die Taste Enter.

Ein Menü mit allen Paketen der ausgewählten Kategorie erscheint:

Abbildung 2-48. Pakete auswählen

Im gezeigten Bildschirm ist das Paket bash ausgewählt. Sie können weitere Pakete auswählen, indem Sie die Pakete mit den Pfeiltasten markieren und die Taste Space drücken. In der unteren linken Ecke des Bildschirms wird eine Kurzbeschreibung des ausgewählten Pakets angezeigt.

Die Taste Tab wechselt zwischen dem zuletzt ausgesuchten Paket, [ OK ] und [ Cancel ].

Wenn Sie die zu installierenden Pakete ausgewählt haben, drücken Sie einmal Tab, um [ OK ] zu markieren. Drücken Sie dann Enter, um wieder in die Paketauswahl zu gelangen.

Die rechte und die linke Pfeiltaste wechseln ebenfalls zwischen [ OK ] und [ Cancel ]. Mit diesen Tasten können Sie auch [ OK ] auswählen und dann mit Enter zur Paketauswahl zurückkehren.

Abbildung 2-49. Pakete installieren

Benutzen Sie die Taste Tab und die Pfeiltasten um [ Install ] auszuwählen. Drücken Sie anschließend die Taste Enter. Sie müssen jetzt die Installation der Pakete bestätigen:

Abbildung 2-50. Paketinstallation bestätigen

Die Paketinstallation wird gestartet, wenn Sie [ OK ] auswählen und Enter drücken. Den Verlauf der Installation können Sie anhand der angezeigten Meldungen verfolgen; achten Sie dabei auf Fehlermeldungen.

Nach der Paketinstallation können Sie die Nacharbeiten fortsetzen. Wenn Sie keine Pakete ausgewählt haben und die Nacharbeiten fortsetzen möchten, wählen Sie trotzdem [ Install ] aus.


2.10.12. Benutzer und Gruppen anlegen

Während der Installation sollten Sie mindestens ein Benutzerkonto anlegen, sodass Sie das System ohne das Konto root benutzen können. Normalerweise ist die Root-Partition recht klein und läuft schnell voll, wenn Sie Anwendungen unter dem root-Konto laufen lassen. Vor der größten Gefahr warnt der nachstehende Hinweis:

                     User Confirmation Requested
 Would you like to add any initial user accounts to the system? Adding
 at least one account for yourself at this stage is suggested since
 working as the "root" user is dangerous (it is easy to do things which
 adversely affect the entire system).

                            [ Yes ]   No

Der Bildschirm auf Deutsch:

                      Bestätigung erforderlich
 Wollen Sie Benutzerkonten anlegen?  Wir empfehlen, mindestens
 ein Konto für sich selbst anzulegen, da es gefährlich
 ist, unter "root" zu arbeiten (es ist leicht, Befehle einzugeben,
 die das System nachhaltig beeinträchtigen).

                            [ Yes ]   No

Um ein Benutzerkonto anzulegen, wählen Sie [ Yes ] aus und drücken Enter.

Abbildung 2-51. Benutzerkonto auswählen

Markieren Sie User mit den Pfeiltasten und drücken Sie die Taste Enter.

Abbildung 2-52. Benutzerkonto anlegen

Wählen Sie die Felder zum Ausfüllen mit der Taste Tab aus. Zur Hilfe werden die nachstehenden Beschreibungen werden im unteren Teil des Bildschirms angezeigt:

Login ID

Der Name des Benutzerkontos (verpflichtend).

UID

Die numerische ID dieses Kontos. Wenn Sie das Feld leer lassen, wird eine ID automatisch zugeteilt.

Group

Die diesem Konto zugeordnete Login-Gruppe. Wenn Sie das Feld leer lassen, wird automatisch eine Gruppe zugeteilt.

Password

Das Passwort des Benutzerkontos. Füllen Sie dieses Feld sehr sorgfätig aus.

Full name

Der vollständige Name des Benutzers (Kommentarfeld).

Member groups

Die Gruppen, in denen dieses Konto Mitglied ist (das Konto erhält Zugriffsrechte auf Dateien dieser Gruppe).

Home directory

Das Heimatverzeichnis des Benutzerkontos. Wenn Sie das Feld leer lassen, wird das Verzeichnis automatisch festgelegt.

Login shell

Die Login-Shell des Kontos. Wenn Sie das Feld leer lassen, wird /bin/sh als Login-Shell festgesetzt.

Im Beispiel wurde die Login-Shell von /bin/sh zu der vorher installierten /usr/local/bin/bash geändert. Tragen Sie keine Shell ein, die nicht existiert, da sich sonst nicht anmelden können. In der BSD-Welt wird häufig die C-Shell benutzt, die Sie mit /bin/tcsh angeben können.

Damit ein Wechsel auf den Superuser root möglich ist, wurde dem Benutzerkonto die Gruppe wheel zugeordnet.

Wenn Sie zufrieden sind, drücken Sie [ OK ]. Es erscheint wieder das Benutzer-Menü:

Abbildung 2-53. Benutzermenü verlassen

Weitere Gruppen können, wenn Sie die Anforderungen schon kennen, zu diesem Zeitpunkt angelegt werden. Nach der Installation können Sie Gruppen mit dem Werkzeug sysinstall anlegen.

Wenn Sie alle Benutzer angelegt haben, wählen Sie mit den Pfeiltasten Exit aus und drücken Sie die Taste Enter.


2.10.13. Das root-Passwort festlegen

                        Message
 Now you must set the system manager's password.
 This is the password you'll use to log in as "root".

                         [ OK ]

               [ Press enter or space ]

Um das root-Passwort festzulegen, drücken Sie die Taste Enter.

Sie müssen das Passwort zweimal eingeben. Stellen Sie sicher, dass Sie das Passwort nicht vergessen. Beachten Sie, dass bei der Eingabe das Passwort weder ausgegeben wird noch Sterne angezeigt werden.

New password :
Retype new password :

Nach der erfolgreichen Eingabe des Passworts kann die Installation fortgesetzt werden.


2.10.14. Die Installation beenden

Wenn Sie noch weitere Netzwerkkarten konfigurieren oder weitere Einstellungen vornehmen wollen, können Sie das jetzt tun. Sie können die Einstellungen auch nach der Installation mit sysinstall vornehmen.

                     User Confirmation Requested
 Visit the general configuration menu for a chance to set any last
 options?

                              Yes   [ No ]

Um in das Hauptmenü zurückzukehren, wählen Sie mit den Pfeiltasten [ No ] aus und drücken Sie Enter.

Abbildung 2-54. Die Installation beenden

Wählen Sie mit den Pfeiltasten [X Exit Install] aus und drücken Sie die Taste Enter. Sie müssen das Beenden der Installation bestätigen:

                     User Confirmation Requested
 Are you sure you wish to exit? The system will reboot.

                            [ Yes ]   No

Wählen Sie [ Yes ]. Wenn Sie von einer CD-ROM gestartet haben, erhalten Sie die folgende Meldung, die Sie daran erinnert, die CD-ROM aus dem Laufwerk zu entfernen:

                    Message
Be sure to remove the media from the drive.

                    [ OK ]
           [ Press enter or space ]

Das CD-Laufwerk ist bis zum Neustart des Systems verriegelt. Entfernen Sie die CD zügig, wenn der Rechner startet.

Achten Sie beim Neustart des Systems auf eventuell auftauchende Fehlermeldungen (lesen Sie Abschnitt 2.10.16 für weitere Informationen).


2.10.15. Weitere Netzwerkdienste einrichten

Beigetragen von Tom Rhodes.

Anfänger ohne Vorwissen finden das Einrichten von Netzwerkdiensten oft deprimierend. Netzwerke und das Internet sind für moderne Betriebssysteme von entscheidender Bedeutung. Es ist daher wichtig, die Netzwerkfunktionen von FreeBSD zu kennen. Die von FreeBSD angebotenen Netzwerkdienste können Sie während der Installation kennen lernen.

Netzwerkdienste sind Programme, die Eingaben aus dem Netzwerk entgegennehmen. Es wird große Mühe darauf verwendet, dass diese Programme keinen Schaden verursachen. Leider können auch Programmierern Fehler unterlaufen und es gibt Fälle, in denen Fehler in Netzwerkdiensten von Angreifern ausgenutzt wurden. Es ist daher wichtig, dass Sie nur Dienste aktivieren, die Sie benötigen. Im Zweifallsfall sollten Sie einen Dienst solange nicht aktivieren, bis Sie herausfinden, dass Sie den Dienst benötigen. Einen Dienst können Sie später immer noch mit sysinstall oder in der Datei /etc/rc.conf aktivieren.

Wählen Sie den Menüpunkt Networking und es erscheint ein Menü wie das nachstehende:

Abbildung 2-55. Netzwerkdienste - obere Hälfte

Die erste Option, Interfaces, wurde schon in Abschnitt 2.10.1 konfiguriert. Sie können daher diesen Punkt überspringen.

Der Punkt AMD aktiviert einen Dienst, der automatisch Dateisysteme einhängt. Normalerweise wird der Dienst zusammen mit dem NFS-Protokoll (siehe unten) verwendet, um automatisch entfernte Dateisysteme einzuhängen. Dieser Menüpunkt erfordert keine weitere Konfiguration.

Der nächste Menüpunkt ist AMD Flags. Wenn Sie den Punkt auswählen, erscheint ein Fenster, in dem Sie AMD-spezifische Optionen eingeben können. Die nachstehenden Optionen sind schon vorgegeben:

-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map

Die Option -a legt das Verzeichnis fest (hier /.amd_mnt), unter dem Dateisysteme eingehangen werden. Die Option -l legt die Protokolldatei fest. Wenn syslogd verwendet wird, werden alle Meldungen an den Daemon syslogd gesendet. Das Verzeichnis /host dient zum Zugriff auf exportierte Verzeichnisse von entfernten Rechnern, das Verzeichnis /net dient zum Zugriff auf exportierte Verzeichnisse von entfernten IP-Adressen. Die Datei /etc/amd.map enthält die Einstellungen für von AMD verwaltete Dateisysteme.

Die Auswahl Anon FTP erlaubt Anonymous-FTP-Verbindungen. Wählen Sie diese Option, wenn Sie einen Anonymous-FTP-Server einrichten wollen. Seien Sie sich über die Sicherheitsrisiken bewusst, wenn Sie Anonymous-FTP erlauben. Die Sicherheitsrisiken und die Konfiguration von Anonymous-FTP werden in einem gesonderten Fenster erklärt, das aufgeht, wenn Sie diese Option auswählen.

Der Menüpunkt Gateway konfiguriert das System, wie vorher erläutert, als Gateway. Wenn Sie während der Installation den Rechner aus Versehen als Gateway konfiguriert haben, können Sie dies hier wieder rückgängig machen.

Der Menüpunkt Inetd konfiguriert, wie schon oben besprochen, den Daemon inetd(8).

Die Auswahl Mail konfiguriert den Mail Transfer Agent (MTA) des Systems. Wenn Sie diesen Punkt auswählen, erscheint das folgende Menü:

Abbildung 2-56. Den MTA festlegen

In diesem Menü wählen Sie aus, welcher MTA installiert und benutzt wird. Ein MTA ist ein Mail-Server, der E-Mails an lokale Empfänger oder an Empfänger im Internet ausliefert.

Die Auswahl Sendmail installiert das verbreitete sendmail (in FreeBSD die Voreinstellung). Die Auswahl Sendmail local verwendet sendmail als MTA, deaktiviert aber den Empfang von E-Mails aus dem Internet. Postfix und Exim sind ähnlich wie Sendmail. Beide Programme liefern E-Mails aus und einige Anwender verwenden lieber eines der beiden Programme als MTA.

Nachdem Sie einen MTA ausgewählt haben (oder beschlossen haben, keinen MTA zu benutzen), erscheint wieder das Menü Netzwerkdienste. Der nächste Menüpunkt ist NFS client.

Die Auswahl NFS client erlaubt es dem System, mit einem NFS-Server zu kommunizieren. Ein NFS-Server stellt mithilfe des NFS-Protokolls Dateisysteme für andere Systeme auf dem Netzwerk bereit. Wenn der Rechner alleine für sich steht, können Sie diesen Menüpunkt auslassen. Wahrscheinlich müssen Sie noch weitere Einstellungen vornehmen; der Abschnitt 30.3 beschreibt die Einstellungen für NFS-Server und NFS-Clients.

Der Menüpunkt NFS server richtet einen NFS-Server auf dem Rechner ein. Durch die Auswahl dieses Punktes werden die für Remote-Procedure-Call (RPC) benötigten Dienste gestartet. Mit RPC werden Routinen auf entfernten Rechnern aufgerufen.

Der nächste Punkt, Ntpdate, konfiguriert die Zeitsynchronisation. Wenn Sie diesen Punkt auswählen, erscheint das folgende Menü:

Abbildung 2-57. Ntpdate konfigurieren

Wählen Sie aus diesem Menü einen nahe liegenden Server aus. Die Zeitsynchronisation mit einem nahe liegenden Server ist, wegen der geringeren Latenzzeit, genauer als die Synchronisation mit einem weiter entfernten Server.

Der nächste Menüpunkt ist PCNFSD. Wenn Sie diesen Punkt auswählen, wird net/pcnfsd aus der Ports-Sammlung installiert. Dieses nützliche Werkzeug stellt NFS-Authentifizierungsdienste für Systeme bereit, die diese Dienste nicht anbieten (beispielsweise Microsofts MS-DOS).

Um die nächsten Menüpunkte zu sehen, müssen Sie herunterblättern:

Abbildung 2-58. Netzwerkdienste - untere Hälfte

Die Programme rpcbind(8), rpc.statd(8) und rpc.lockd(8) werden für Remote-Procedure-Calls (RPC) benutzt. Das Programm rpcbind verwaltet die Kommunikation zwischen NFS-Servern und NFS-Clients und ist für den Betrieb eines NFS-Servers erforderlich. Der Daemon rpc.statd hält zusammen mit dem Daemon rpc.statd des entfernten Rechners den Status der Verbindung. Der Status einer Verbindung wird normalerweise in der Datei /var/db/statd.status festgehalten. Der nächste Menüpunkt ist rpc.lockd, der Dateisperren (file locks) bereitstellt. rpc.lockd wird normalerweise zusammen mit dem Daemon rpc.statd benutzt, der festhält welche Rechner Sperren anfordern und wie oft Sperren angefordert werden. Beide Dienste sind wunderbar zur Fehlersuche geeignet, doch werden Sie zum Betrieb von NFS-Servern und NFS-Clients nicht benötigt.

Der nächste Punkt in der Auswahl ist Routed, der Routing-Daemon. Das Programm routed(8) verwaltet die Routing-Tabelle, entdeckt Multicast-Router und stellt die Routing-Tabelle auf Anfrage jedem mit dem Netz verbundenen Rechner zur Verfügung. Der Daemon wird hauptsächlich auf Gateways eines lokalen Netzes eingesetzt. Wenn Sie den Punkt auswählen müssen Sie den Ort des Programms angeben. Die Vorgabe können Sie mit der Taste Enter übernehmen. Anschließend werden Sie nach den Kommandozeilenoptionen für routed gefragt. Vorgegeben ist die Option -q.

Der nächste Menüpunkt ist Rwhod. Wenn Sie diesen Punkt auswählen, wird während des Systemstarts der Daemon rwhod(8) gestartet. Das Kommando rwhod schickt Broadcast-Meldungen in das Netz oder empfängt diese im Consumer-Mode. Die Funktion der Werkzeuge wird in den Hilfeseiten ruptime(1) und rwho(1) beschrieben.

Der vorletzte Menüpunkt aktiviert den Daemon sshd(8), den OpenSSH Secure-Shell-Server. Wo möglich sollte SSH anstelle von telnet und FTP eingesetzt werden. Der Secure-Shell-Server erstellt verschlüsselte und daher sichere Verbindungen zwischen zwei Rechnern.

TCP Extensions ist der letzte Menüpunkt. Diese Auswahl aktiviert die TCP-Erweiterungen aus RFC 1323 und RFC 1644. Obwohl dies auf vielen Rechnern die Verbindungsgeschwindigkeit erhöht, können durch diese Option auch Verbindungsabbrüche auftreten. Auf Servern sollte diese Option nicht aktiviert werden, auf Einzelmaschinen kann diese Option nützlich sein.

Wenn Sie die Netzwerkdienste eingerichtet haben, blättern Sie zum Menüpunkt Exit hoch, um die Nacharbeiten fortzusetzen oder verlassen Sie sysinstall, indem Sie zweimal X Exit und danach [X Exit Install] wählen.


2.10.16. FreeBSD starten

2.10.16.1. Start von FreeBSD auf FreeBSD/i386

Wenn alles funktioniert hat, laufen viele Meldungen über den Bildschirm und schließlich erscheint ein Anmeldeprompt. Um sich die Meldungen anzusehen. drücken Sie die Taste Scroll-Lock. Sie können dann mit den Tasten PgUp und PgDn blättern. Wenn Sie erneut Scroll-Lock drücken, kehren Sie zum Anmeldeprompt zurück.

Es kann sein, dass der Puffer zu klein ist, um alle Meldungen anzuzeigen. Nachdem Sie sich angemeldet haben, können Sie sich mit dem Kommando dmesg alle Meldungen ansehen.

Melden Sie sich bitte mit dem Benutzerkonto an (rpratt im Beispiel), das Sie während der Installation eingerichtet haben. Arbeiten Sie mit root nur dann wenn es erforderlich ist.

Die nachfolgende Abbildung zeigt typische Startmeldungen (Versionsangaben entfernt):

Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.

Timecounter "i8254"  frequency 1193182 Hz
CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU)
  Origin = "AuthenticAMD"  Id = 0x580  Stepping = 0
  Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
  AMD Features=0x80000800<SYSCALL,3DNow!>
real memory  = 268435456 (262144K bytes)
config> di sn0
config> di lnc0
config> di le0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 256311296 (250304K bytes)
Preloaded elf kernel "kernel" at 0xc0491000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c.
md0: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at
device 10.0 on pci0
ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5'' drive> on fdc0 drive 0
atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x1 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
ppbus0: IEEE1284 device found /NIBBLE
Probing for PnP devices on ppbus0:
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33
ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33
acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4
Mounting root from ufs:/dev/ad0s1a
swapon: adding /dev/ad0s1b as swap device
Automatic boot in progress...
/dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation)
/dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation)
/dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation)
/dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS
/dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation)
Doing initial network setup: hostname.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1
        ether 52:54:05:de:73:1b
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
Additional routing options: IP gateway=YES TCP keepalive=YES
routing daemons:.
additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons: creating ssh RSA host key
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com
 creating ssh DSA host key
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com.
setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib
/usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
starting standard daemons: inetd cron sshd usbd sendmail.
Initial rc.i386 initialization:.
rc.i386 configuring syscons: blank_time screensaver moused.
Additional ABI support: linux.
Local package initialization:.
Additional TCP options:.

FreeBSD/i386 (k6-2.example.com) (ttyv0)

login: rpratt
Password:

Das Erzeugen der RSA- und DSA-Schlüssel kann auf langsamen Maschinen lange dauern. Die Schlüssel werden nur beim ersten Neustart erzeugt, spätere Neustarts sind schneller.

Wenn der X-Server konfiguriert ist und eine Oberfläche ausgewählt wurde, können Sie X mit dem Kommando startx starten.


2.10.17. FreeBSD herunterfahren

Es ist wichtig, dass Sie das Betriebssystem richtig herunterfahren. Wechseln Sie zunächst mit dem Befehl su zum Superuser; Sie müssen dazu das root-Passwort eingeben. Der Wechsel auf den Superuser gelingt nur, wenn der Benutzer ein Mitglied der Gruppe wheel ist. Ansonsten melden Sie sich direkt als Benutzer root an. Der Befehl shutdown -h now hält das System an.

The operating system has halted.
Please press any key to reboot.

Sie können den Rechner ausschalten, nachdem die Meldung Please press any key to reboot erschienen ist. Wenn Sie stattdessen eine Taste drücken, startet das System erneut.

Sie können das System auch mit der Tastenkombination Ctrl+Alt+Del neu starten. Sie sollten diese Tastenkombination allerdings nicht gewohnheitsmäßig benutzen.


2.11. Fehlersuche

Dieser Abschnitt behandelt häufig auftretende Installationsprobleme. Weiterhin enthält er Hinweise, wie FreeBSD parallel mit MS-DOS oder Windows betrieben wird.


2.11.1. Wenn etwas schief geht

Aufgrund der Beschränkungen der PC-Architektur ist eine zuverlässige Geräteerkennung nicht möglich. Falls die Geräteerkennung fehlschlägt, können Sie einige Dinge versuchen.

Sehen Sie in den Hardware Notes Ihrer FreeBSD-Version nach, ob Ihre Hardware unterstützt wird.

Wenn Ihre Hardware unterstützt wird und sich der Installationsprozess aufhängt oder sonstige Probleme auftauchen, müssen Sie einen angepassten Kernel erstellen, da Ihre Hardware in diesem Fall nicht vom GENERIC-Kernel unterstützt wird. Der Kernel auf den Startdisketten verwendet die Werkseinstellungen für IRQs, IO-Adressen und DMA-Kanäle. Geänderte Einstellungen müssen Sie daher in der Kernelkonfigurationsdatei angeben, damit FreeBSD diese Geräte korrekt erkennt.

Es ist auch möglich, dass die Suche nach einem nicht vorhandenen Gerät dazu führt, dass die Erkennung eines vorhandenen Geräts fehlschlägt. In diesem Fall sollten Sie nicht vorhandene Geräte, deren Einstellungen sich mit vorhandenen Geräten überschneiden, deaktivieren.

Anmerkung: Einige Installationsprobleme können Sie vermeiden oder umgehen, indem Sie die Firmware der Hardware, insbesondere die Firmware der Systemplatine, aktualisieren. Die Firmware der Systemplatine ist das BIOS. Die meisten Hardware-Hersteller bieten aktuelle Firmware und Anleitungen zur Aktualisierung der Firmware auf dem Internet an.

Viele Hersteller raten davon ab, ohne guten Grund das BIOS zu aktualisieren. Die Aktualisierung kann fehlschlagen und den BIOS-Chip dauerhaft beschädigen.


2.11.2. MS-DOS®- und Windows-Dateisysteme benutzen

Mit Double Space™ komprimierte Dateisysteme werden zurzeit von FreeBSD nicht unterstützt. Damit FreeBSD auf die Daten zugreifen kann, müssen Sie das Dateisystem daher dekomprimieren. Rufen Sie dazu den Compression Agent aus dem Menü Start > Programs > System Tools auf.

FreeBSD unterstützt MS-DOS-Dateisysteme (manchmal auch als FAT-Dateisysteme bezeichnet). Der Befehl mount_msdosfs(8) bindet diese Dateisysteme in den FreeBSD-Verzeichnisbaum ein und erlaubt dadurch den Zugriff auf die darin enthaltenen Daten. mount_msdosfs(8) wird normalerweise nicht direkt, sondern über einen Eintrag in der Datei /etc/fstab oder durch den Aufruf des Befehls mount(8) (in Kombination mit den korrekten Parametern).

Ein typischer Eintrag in /etc/fstab sieht so aus:

/dev/ad0sN  /dos  msdosfs rw  0   0

Anmerkung: Das Verzeichnis /dos muss bereits vorhanden sein, damit dieser Eintrag funktioniert. Weitere Informationen zu den Einstellungen in der Datei /etc/fstab finden sich in der Manualpage fstab(5).

Ein typischer Aufruf von mount(8) zum Einhängen eines MS-DOS-Dateisystems sieht so aus:

# mount -t msdosfs /dev/ad0s1 /mnt

Das MS-DOS-Dateisystem befindet sich hier auf der ersten Partition der primären Platte. Dies kann bei Ihnen anders sein. Die Anordnung der Partitionen entnehmen Sie den Ausgaben von dmesg und mount.

Anmerkung: FreeBSD numeriert Platten (genauer MS-DOS-Partitionen) anders als andere Betriebssysteme. Die Nummern von erweiterten Partitionen sind in der Regel höher als die Nummern von primären Partitionen. Das Werkzeug fdisk(8) kann Ihnen dabei helfen, festzustellen, welche Partitionen zu FreeBSD und welche zu einem anderen Betriebssystem gehören.

Analog werden NTFS-Partitionen mit dem Kommando mount_ntfs(8) eingehangen.


2.11.3. Fragen und Antworten zu häufig auftretenden Problemen

2.11.3.1. Mein System hängt sich beim Testen der Hardware auf, oder es verhält sich seltsam während der Installation oder das Diskettenlaufwerk wird nicht getestet.
2.11.3.2. Direkt nach der Installation beginnt das System zwar zu booten, der Kernel wird geladen und meine Hardware getestet. Dann bricht der Bootvorgang aber mit der folgenden (oder einer ähnlichen) Fehlermeldung ab:
2.11.3.3. Nach der Installation beginnt das System zu booten, der Bootmanager zeigt im Bootmenü aber immer nur F? an und das System startet nicht.
2.11.3.4. FreeBSD erkennt meine ed(4)-Netzwerkkarte. Trotzdem erhalte ich weiterhein Timeout-Meldungen für dieses Gerät.
2.11.3.5. Wenn ich sysinstall aus einen X-Terminal starte, ist die gelbe Schritt auf dem grauen Hintergrund nur schwer zu erkennen. Gibt es eine Möglichkeit, den Kontrast für dieses Programm zu erhöhen?

2.11.3.1. Mein System hängt sich beim Testen der Hardware auf, oder es verhält sich seltsam während der Installation oder das Diskettenlaufwerk wird nicht getestet.

FreeBSD 5.0 und neuer machen ausgiebig Gebrauch von den ACPI-Systemdiensten zur Systemkonfiguration der i386-, amd64- und ia64-Plattformen, falls diese während des Bootvorgangs gefunden werden. Leider enthalten sowohl der ACPI-Treiber als auch manche Motherboard- und BIOS-Implementierungen für ACPI noch einige Fehler. Kommt es auf Ihrem System zu Problemen, können Sie ACPI daher deaktivieren, indem während des Bootvorganges den “Hint” hint.acpi.0.disabled aktivieren:

set hint.acpi.0.disabled="1"

Da diese Einstellung bei jedem Neustart verloren geht, aktivieren Sie sie dauerhaft, indem Sie die Zeile hint.acpi.0.disabled="1" in die Datei /boot/loader.conf. Weitere Informationen über den Bootloader finden Sie in Abschnitt 13.1 des FreeBSD-Handbuchs.

2.11.3.2. Direkt nach der Installation beginnt das System zwar zu booten, der Kernel wird geladen und meine Hardware getestet. Dann bricht der Bootvorgang aber mit der folgenden (oder einer ähnlichen) Fehlermeldung ab:

changing root device to ad1s1a panic: cannot mount root

Was läuft hier falsch? Was kann/muss ich tun?

Was soll ich mit diesem bios_drive:interface(unit,partition)kernel_name anfangen, das mir die Hilfefunktion ausgibt?

Dabei handelt es sich um ein lange bekanntes Problem, das nur dann auftritt, wenn es sich bei der Bootplatte nicht um die erste Platte im System handelt. Das BIOS numeriert die Festplatten anders als FreeBSD, daher ist das System manchmal nicht in der Lage, diese Numerierungen selbst automatisch in Einklang zu bringen.

Sollte Ihre Bootplatte nicht die erste Platte im System sein, können Sie FreeBSD dabei helfen, diese Platte zu finden. Es gibt zwei Situationen, in denen Sie FreeBSD mitteilen müssen, wo sich das root-Dateisystem befindet. Dazu müssen Sie die Nummer der Platte im BIOS, den Plattentyp sowie die Nummer der Platte unter FreeBSD angeben.

Im ersten Fall verfügen Sie über zwei IDE-Platten, die beide als Master an ihrem jeweiligen IDE-Controller konfiguriert sind. FreeBSD soll dabei von der zweiten Platte booten. Ihr BIOS erkennt die beiden Platten als “Platte 1” und “Platte 2”, während FreeBSD die Platten als ad0 und ad2 erkennt.

Für das BIOS befindet sich FreeBSD auf der Platte Nummer 1, der Typ ist ad, und FreeBSD erkennt die Platte als Platte Nummer 2. Daher geben Sie Folgendes ein:

1:ad(2,a)kernel

Beachten Sie, dass dieser Eintrag nicht notwendig ist, wenn die zweite Platte als Slave am primären IDE-Controller konfiguriert ist (sondern sogar falsch wäre).

Die zweite Situation entsteht, wenn Sie von einer SCSI-Platte booten und zusätzlich eine oder mehrere IDE-Platten installiert haben. In diesem Fall ist die Plattennummer unter FreeBSD kleiner als die Plattennummer im BIOS. Verfügen Sie über zwei IDE-Platten und eine SCSI-Platte, hat die SCSI-Platte im BIOS die Nummer 2, den Typ da, und wird von FreeBSD als Platte Nummer 0 erkannt. In diesem Fall geben Sie daher Folgendes ein:

2:da(0,a)kernel

Durch diese Zeile teilen Sie FreeBSD mit, dass Sie von der BIOS-Platte Nummer 2 booten wollen (bei der es sich um die erste SCSI-Platte Ihres Systems handelt). Verfügen Sie nur über eine IDE-Platte, geben Sie hingegen 1: ein.

Nachdem Sie die korrekten Werte ermittelt haben, können Sie die entsprechende Zeile in exakt der gleichen Form in die Datei /boot.config aufnehmen. In der Voreinstellung verwendet FreeBSD den Inhalt dieser Datei als Standardantwort am boot:-Prompt.

2.11.3.3. Nach der Installation beginnt das System zu booten, der Bootmanager zeigt im Bootmenü aber immer nur F? an und das System startet nicht.

Sie haben bei der FreeBSD-Installation eine falsche Plattengeometrie angegeben. Starten Sie den Partitionseditor neu und geben Sie die korrekte Plattengeometrie an. Danach installieren Sie FreeBSD erneut (diesmal mit der korrekten Plattengeometrie).

Ist es Ihnen nicht möglich, die korrekte Plattengeometrie herauszufinden, hilft Ihnen vielleicht der folgende Tipp weiter: Legen Sie eine kleine MS-DOS-Partition am Beginn Ihrer Bootplatte an und installieren Sie anschließend FreeBSD auf diese Platte. Das FreeBSD-Installationsprogramm wird die MS-DOS-Partition erkennen und ist dadurch normalerweise in der Lage, die korrekte Plattenkonfiguration automatisch zu erkennen.

Die Vorgangsweise im folgenden Tipp wird zwar nicht länger empfohlen, soll aber trotzdem dokumentiert werden:

Wenn Sie ein reines FreeBSD-System aufsetzen wollen (als Server oder als Workstation) und daher nie auf Kompatibilitält zu MS-DOS, Linux oder anderen Betriebssystemen angewiesen sein werden, haben Sie auch die Möglichkeit, die komplette Platte (durch die Wahl von A im Partitionseditor) für FreeBSD zu verwenden. Danach wird FreeBSD die komplette Platte vom ersten bis zum letzten Sektor verwenden und die tatsächliche Plattengeometrie ignorieren. Danach ist es allerdings nicht mehr möglich, ein anderes Betriebssystem auf die gleiche Platte zu installieren (ohne auch FreeBSD neu zu installieren).

2.11.3.4. FreeBSD erkennt meine ed(4)-Netzwerkkarte. Trotzdem erhalte ich weiterhein Timeout-Meldungen für dieses Gerät.

Ihre Karte verwendet wahrscheinlich einen anderen IRQ als den, der in der Datei /boot/device.hints angegeben wurde. Der ed(4)-Treiber verwendet in der Voreinstellung keine “Soft”-Konfiguration (also Werte, die durch EZSETUP unter MS-DOS eingeben wurden). Sie können dies allerdings erzwingen, indem Sie die Option -1 in den “Hints” für dieses Gerät angeben.

Entweder verändern Sie die Jumper-Konfiguration der Karte (und, falls notwendig, die Kerneleinstellungen). Oder Sie geben den IRQ als -1 an, indem Sie hint.ed.0.irq="-1" eingeben. Dadurch wird der Kernel angewiesen, die “Soft”-Konfiguration zu verwenden.

Prüfen Sie auch, ob Ihre Karte nicht etwa IRQ 9 verwendet, da dieser mit IRQ 2 geteilt wird. Diese Einstellung verursacht häufig Probleme (insbesondere dann, wenn IRQ 2 durch eine VGA-Grafikkarte belegt ist!). Wenn irgend möglich, sollten Sie daher IRQ 2 oder 9 nicht verwenden.

2.11.3.5. Wenn ich sysinstall aus einen X-Terminal starte, ist die gelbe Schritt auf dem grauen Hintergrund nur schwer zu erkennen. Gibt es eine Möglichkeit, den Kontrast für dieses Programm zu erhöhen?

Haben Sie X11 bereits installiert und die von sysinstall verwendeten Farben bereiten Ihnen beim Lesen von Text Probleme (wenn Sie ein X-Terminal verwenden), sollten Sie die Zeile XTerm*color7: #c0c0c0 in die Datei ~/.Xdefaults aufnehmen. Dadurch wird der Hintergrund in einem dunkleren Grauton dargestellt.


2.12. Anspruchsvollere Installationen

Beigetragen von Valentino Vaschetto. Aktualisiert von Marc Fonvieille.

Dieser Abschnitt beschreibt die Installation von FreeBSD in besonderen Situationen.


2.12.1. FreeBSD auf einem System ohne Monitor oder Tastatur installieren

Diese Methode wird als “headless install” (kopflose Installation) bezeichnet, da die Maschine, auf die FreeBSD installiert werden soll, entweder keinen Monitor angeschlossen hat oder über keine VGA-Karte verfügt. Wie kann FreeBSD dennoch installiert werden? Eben mithilfe einer seriellen Konsole. Im Wesentlichen ist eine serielle Konsole eine andere Maschine, die Ein- und Ausgaben für eine andere Maschine bereitstellt. Um über eine serielle Konsole zu installieren, erstellen Sie zunächst (wie in Abschnitt 2.3.7 beschrieben) einen bootbaren USB-Stick oder laden Sie das passende CD-ISO-Abbild herunter.

Um von diesen Medien in eine serielle Konsole booten zu können, müssen Sie die folgenden Schritte durchführen (bei Verwendung einer Boot-CD kann der erste Schritt entfallen):

  1. Den USB-Stick für eine serielle Konsole anpassen

    Wenn Sie ein System mit den frisch erstellten USB-Stick starten, läuft der normale FreeBSD-Installationsprozess an. Diese Installation soll aber über die serielle Konsole gesteuert werden. Daher müssen Sie den USB-Stick mit dem Befehl mount(8) in den Verzeichnisbaum einhängen:

    # mount /dev/da0a /mnt
    

    Anmerkung: Passen Sie den Mountpunkt und die Gerätedatei falls nötig an Ihre Gegebenheiten an.

    Nachdem Sie den USB-Stick eingehängt haben, müssen Sie ihn rekonfigurieren, damit er in eine serielle Konsole startet. Dazu nehmen Sie in die Datei loader.conf des USB-Sticks eine Zeile auf, die die serielle Konsole als Systemkonsole festlegt:

    # echo 'console="comconsole"' >> /mnt/boot/loader.conf
    

    Damit ist Ihr USB-Stick für die Installation vorbereitet. Sie können ihn daher wieder aus dem Dateisystem aushängen:

    # umount /mnt
    

    Entfernen Sie nun den USB-Stick und machen Sie direkt mit Schritt 3 weiter.

  2. Die Installations-CD für eine serielle Konsole anpassen

    Wenn Sie von dem soeben heruntergeladenen CD-ISO-Abbild (siehe Abschnitt 2.13.1) starten, gelangen Sie in den normalen Installationsmodus von FreeBSD. Da wir aber in eine serielle Konsole booten wollen, muss das CD-Image extrahiert, modifiziert und neu erzeugt werden, bevor Sie es auf eine CD-R brennen.

    Entpacken Sie alle Dateien des CD-ISO-Abbilds (beispielsweise FreeBSD-9.0-RELEASE-i386-disc1.iso) auf dem System, auf das Sie das Abbild heruntergeladen haben unter Verwendung von tar(1):

    # mkdir /path/to/headless-iso
    # tar -C /path/to/headless-iso -pxvf FreeBSD-9.0-RELEASE-i386-disc1.iso
    

    Nun müssen Sie das entpackte ISO-Abbild rekonfigurieren, damit es künftig in eine serielle Konsole startet. Dazu nehmen Sie in die Datei loader.conf des entpackten ISO-Abbild eine Zeile auf, die die serielle Konsole als Systemkonsole festlegt:

    # echo 'console="comconsole"' >> /path/to/headless-iso/boot/loader.conf
    

    Damit ist der Dateibaum des entpackten ISO-Abbilds für die Installation vorbereitet und Sie können über den Befehl mkisofs(8) (das Sie über den Port sysutils/cdrtools installieren können) ein neues CD-ISO-Abbild erzeugen:

    # mkisofs -v -b boot/cdboot -no-emul-boot -r -J -V "Headless_install" \
    	    -o Headless-FreeBSD-9.0-RELEASE-i386-disc1.iso /path/to/headless-iso
    

    Dieses rekonfigurierte ISO-Abbild brennen Sie nun mit dem Brennprogramm Ihrer Wahl auf eine CD-R.

  3. Das Nullmodemkabel anschließen

    Sie müssen beide Maschinen mit einem Nullmodemkabel verbinden. Schließen Sie das Nullmodemkabel an die seriellen Schnittstellen beider Maschinen an. Sie können kein direktes serielles Kabel verwenden, Nullmodemkabel besitzen gekreuzte Leitungen.

  4. Die Installation starten

    Sie können die Installation jetzt starten. Stöpseln Sie den vorbereiteten USB-Stick ein und starten Sie Ihren Computer. Alternativ starten Sie Ihren Computer und legen die vorbereitete Installations-CD ein.

  5. Die Verbindung mit der zur installierenden Maschine herstellen

    Mit dem Kommando cu(1) verbinden Sie sich mit der zu installierenden Maschine:

    # cu -l /dev/cuau0
    

    Unter FreeBSD 7.X verwenden Sie hingegen den folgenden Befehl:

    # cu -l /dev/cuad0
    

Fertig! Über die cu-Sitzung können Sie nun die zu installierende Maschine steuern. Der Kernel wird automatisch geladen und Sie können anschließend den Terminaltyp festlegen. Wählen Sie die FreeBSD color console aus und fahren wie gewohnt mit der Installation fort.


2.13. Eigene Installationsmedien herstellen

Anmerkung: Im Folgenden ist mit “Installations-CD” eine CD-ROM oder DVD gemeint, die Sie gekauft oder selbst hergestellt haben.

Oft müssen Sie eigene Installationsmedien erzeugen. Dies können physische Medien wie Bänder sein oder Installationsquellen sein, aus denen sysinstall Dateien herunterlädt, beispielsweise ein lokaler FTP-Server oder eine MS-DOS-Partition.

Beispiele:

  • Im lokalen Netzwerk befinden sich viele Maschinen, Sie besitzen allerdings nur eine Installations-CD. Den Inhalt der Installations-CD wollen Sie auf einem lokalem FTP-Server bereitstellen. Zur Installation wird der lokale FTP-Server anstelle eines Internet-Servers benutzt.

  • Sie haben eine Installations-CD, allerdings erkennt FreeBSD im Gegensatz zu MS-DOS/Windows das CD- oder DVD-Laufwerk nicht. Sie können die Installationsdateien auf eine MS-DOS-Partition desselben Rechners kopieren und FreeBSD von der MS-DOS-Partition installieren.

  • Der Rechner, auf dem Sie FreeBSD installieren wollen, besitzt kein CD- oder DVD-Laufwerk. Ein anderer Rechner, zu dem eine serielle oder parallele Verbindung besteht, besitzt allerdings ein CD- oder DVD-Laufwerk.

  • Sie wollen ein Band erzeugen, mit dem Sie FreeBSD installieren können.


2.13.1. Eine Installations-CD-ROM erzeugen

Mit jeder Release stellt das FreeBSD-Project für jede unterstützte Architektur mindestens zwei CD-Abbilder (“ISO-Images”) zur Verfügung. Wenn Sie einen CD-Brenner besitzen, können Sie diese Abbilder brennen und damit FreeBSD installieren. Wenn Sie einen CD-Brenner besitzen und über eine gute Internet-Verbindung verfügen, ist das die preiswerteste Art, FreeBSD zu installieren.

  1. Das richtige Abbild herunterladen

    Die ISO-Abbilder für jedes Releases können Sie von ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version oder einem nahe gelegenen Spiegel herunterladen. Ersetzen Sie arch und version durch passende Werte.

    Das Verzeichnis enthält die folgenden Abbilder:

    Tabelle 2-4. FreeBSD 7.X und 8.X ISO-Abbilder

    Dateiname Inhalt
    FreeBSD-version-RELEASE-arch-bootonly.iso Enthält alles, was Sie benötigen, um um den FreeBSD-Kernel zu laden und das Installationsprogramm zu starten. Die zu installierenden Dateien müssen allerdings über FTP oder eine andere geeignete Quelle bezogen werden, da sie in diesem Abbild nicht enthalten sind.
    FreeBSD-version-RELEASE-arch-dvd1.iso.gz Dieses DVD-Abbild enthält alle zur Installation von FreeBSD nötigen Dateien, eine Auswahl an Paketen Dritter sowie die Dokumentation. Zusätzlich ermöglicht es Ihnen dieses Abbild, einen “livefs”-basierten Rettungsmodus zu starten.
    FreeBSD-version-RELEASE-arch-memstick.img Dieses Abbild kann auf einen USB-Stick geschrieben werden. Dieser kann danach als Installationsmedium verwendet werden (wenn Ihr System dies unterstützt). Zusätzlich ermöglicht es Ihnen dieses Abbild, einen “livefs”-basierten Rettungsmodus zu starten. Die FreeBSD-Dokumentation ist ebenfalls enthalten, aber keine Pakete Dritter. Dieses Abbild ist erst ab FreeBSD 8.0 verfügbar.
    FreeBSD-version-RELEASE-arch-disc1.iso Dieses CD-Abbild enthält alle für die Installation von FreeBSD nötigen Dateien sowie die Dokumentation. Es sind allerdings keine Pakete Dritter enthalten.
    FreeBSD-version-RELEASE-arch-disc2.iso So viele Pakete Dritter, wie auf dem Installationsmedium Platz hatten. Dieses Abbild ist für FreeBSD 8.X nicht mehr verfügbar.
    FreeBSD-version-RELEASE-arch-disc3.iso Ein weiteres Abbild mit so vielen Paketen Dritter, wie auf dem Installationsmedium Platz hatten. Dieses Abbild ist für FreeBSD 8.X nicht mehr verfügbar.
    version-RELEASE-arch-docs.iso Die FreeBSD-Dokumentation.
    FreeBSD-version-RELEASE-arch-livefs.iso Dieses Abbild enthät einen “livefs”-basierten Rettungsmodus. Eine Installation von FreeBSD ist mit diesem Abbild allerdings nicht möglich.

    Anmerkung: Die Abbilder für FreeBSD 7.X-Releases vor FreeBSD 7.3 sowie für FreeBSD 8.0 wurden noch unterschiedlich benannt. Bei Ihnen fehlt die Bezeichnung FreeBSD- am Anfang des Abbildnamens.

    Sie benötigen nur eines der beiden Abbilder bootonly oder disc1. Laden Sie bitte nicht beide Abbilder herunter, das disc1-Abbild enthält alles, was das bootonly-Abbild enthält.

    Benutzen Sie das bootonly-Abbild, wenn Sie eine preiswerte Internet-Anbindung besitzen. Mit diesem Abbild können Sie FreeBSD installieren. Software Dritter können Sie anschließend mithilfe des Ports-Systems (Kapitel 5) herunterladen.

    Benutzen Sie das dvd1-Abbild, wenn Sie FreeBSD installieren wollen und das Installationsmedium eine angemessene Auswahl an Software Dritter enthalten soll.

    Die zusätzlichen Abbilder sind nützlich, aber nicht notwendig, insbesondere wenn Sie eine schnelle Internet-Verbindung besitzen.

  2. Die CDs brennen

    Sie müssen die Abbilder auf eine CD brennen. Das Brennen von CDs unter FreeBSD wird in Abschnitt 19.6 erläutert (sehen Sie sich insbesondere Abschnitt 19.6.3 und Abschnitt 19.6.4 an).

    Wenn Sie die CDs unter einem anderen Betriebssystem erstellen, benutzen Sie die entsprechenden Werkzeuge des Betriebssystems. Die Abbilder sind Standard-ISO-Abbilder und können von vielen Brennprogrammen verarbeitet werden.

Anmerkung: Wenn Sie eine angepasste Version von FreeBSD erstellen wollen, sollten Sie den Release Engineering Article lesen.


2.13.2. Einen lokalen FTP-Server einrichten

Die Dateien auf der Installations-CD sind genauso angeordnet wie auf den FreeBSD-FTP-Servern. Daher ist es einfach, einen lokalen FTP-Server für die FreeBSD-Installation über ein Netzwerk einzurichten.

  1. Hängen Sie auf dem FTP-Server die CD-ROM in das Verzeichnis /cdrom ein:

    # mount /cdrom
    
  2. Legen Sie ein Konto für Anonymous-FTP an. Dazu editieren Sie die Datei /etc/passwd mit dem Kommando vipw(8) und fügen die nachstehende Zeile hinzu:

    ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent
    
  3. Stellen Sie sicher, dass der FTP-Dienst in der Datei /etc/inetd.conf aktiviert ist.

Jeder, der Ihren Rechner über das Netzwerk erreicht, kann nun FreeBSD über FTP installieren. In sysinstall wird dazu FTP als Installationsmedium wählt. Der FTP-Server wird durch die Auswahl Other (andere als die vorgegebenen Server) und anschließende Eingabe von ftp://Ihr Rechner festgelegt.

Anmerkung: Wenn die Version der für die FTP-Installation Ihrer Clients verwendeten Bootmedien (normalerweise Disketten) nicht exakt der von Ihnen auf Ihrem lokalen FTP-Server angebotenen Version entspricht, ist sysinstall nicht in der Lage, die Installation abzuschließen. Sind die Versionsnummern unterschiedlich, können Sie durch das Aufrufen des Punktes Options sysinstall dazu zwingen, die Installation dennoch abzuschließen. Dazu setzen Sie den Namen der Distribution auf any.

Warnung: Diese Vorgehensweise ist in Ihrem lokalen Netzwerk, das durch eine Firewall geschützt ist, völlig in Ordnung. Wenn Sie FTP für Rechner auf dem Internet (und nicht für lokale Rechner) anbieten, zieht Ihr Server die Aufmerksamkeit von Crackern und andere Unannehmlichkeiten auf sich. Achten Sie in diesem Fall darauf, dass Sie gute Sicherheitsverfahren anwenden.


2.13.3. Installationsdisketten erstellen

Wenn Sie, was wir nicht empfehlen, von Disketten installieren müssen, weil Disketten das einzig unterstützte Installationsmedium sind oder Sie es sich einfach schwer machen wollen, müssen Sie zunächst einige Disketten vorbereiten.

Sie müssen mindestens den Inhalt des Verzeichnisses base auf 1.44 MB Disketten kopieren. Wenn Sie die Disketten unter MS-DOS erstellen, müssen Sie die Disketten mit dem MS-DOS-Kommando FORMAT formatieren. Unter Windows können Sie Disketten mithilfe des Explorers formatieren (klicken Sie mit der rechten Maustaste auf das A:-Laufwerk und wählen Sie Format aus).

Vertrauen Sie vorformatierten Disketten nicht; formatieren Sie die Disketten zur Sicherheit immer selbst. In der Vergangenheit waren vorformatierte Disketten der Verursacher vieler Probleme.

Falls Sie die Disketten auf einer FreeBSD-Maschine erstellen, sollten Sie immer noch formatieren. Allerdings brauchen Sie kein MS-DOS-Dateisystem auf den Disketten anzulegen. Mit den Kommandos bsdlabel und newfs können Sie das Dateisystem UFS verwenden, wie im nachstehenden Beispiel für 3.5" 1.44 MB Disketten gezeigt:

# fdformat -f 1440 fd0.1440
# bsdlabel -w fd0.1440 floppy3
# newfs -t 2 -u 18 -l 1 -i 65536 /dev/fd0

Anschließend können Sie die Disketten wie ein normales Dateisystem einhängen und beschreiben.

Nachdem Sie die Disketten formatiert haben, kopieren Sie die Dateien der Distribution auf die Disketten. Die Dateien der Distribution sind in Stücke geteilt, sodass fünf Dateien auf eine 1.44 MB Diskette passen. Kopieren Sie die gewünschten Distribution auf Disketten, wobei Sie so viele Dateien wie möglich auf eine Diskette kopieren. Jede Distribution wird auf der Diskette in einem eigenen Verzeichnis abgelegt, beispielsweise a:\base\base.aa, a:\base\base.ab und so weiter.

Wichtig: Die Datei base.inf muss unbedingt auf die erste Diskette des base-Diskettensatzes kopiert werden, damit das Installationsprogramm feststellen kann, wie viele Disketten geladen werden müssen, um die Distribution wieder zusammenzusetzen.

Im Installationsprozess wählen Sie als Installationsmedium Floppy aus. Folgen Sie dann den gegebenen Anweisungen.


2.13.4. Von einer MS-DOS-Partition installieren

Um eine Installation von einer MS-DOS-Partition vorzubereiten, kopieren Sie Dateien der Distributionen in das Verzeichnis freebsd direkt unterhalb des Wurzelverzeichnisses (zum Beispiel c:\freebsd). In diesem Verzeichnis muss sich dieselbe Verzeichnisstruktur wie auf dem Installationsmedium befinden. Wenn Sie die Dateien von einer Installations-CD kopieren, empfehlen wir den MS-DOS-Befehl xcopy. Das nachstehende Beispiel bereitet eine minimale Installation von FreeBSD vor:

C:\> md c:\freebsd
C:\> xcopy e:\bin c:\freebsd\bin\ /s
C:\> xcopy e:\manpages c:\freebsd\manpages\ /s

Im Beispiel wurde angenommen, dass auf Laufwerk C: ausreichend Platz vorhanden ist und die CD-ROM Laufwerk E: ist.

Wenn Sie kein CD-Laufwerk besitzen, können Sie die Distributionen von ftp.FreeBSD.org herunterladen. Jede Distribution liegt in einem eigenen Verzeichnis. Beispielsweise liegt die Base-Distribution im Verzeichnis 9.0/base/.

Kopieren Sie jede Distribution, die Sie von einer MS-DOS-Partition installieren wollen (und für die Platz ist) in das Verzeichnis c:\freebsd. Für eine minimale Installation benötigen Sie nur die Base-Distribution.


2.13.5. Ein Installationsband erstellen

Falls Sie nicht über FTP oder von einer CD-ROM installieren können, ist die Installation von Band wahrscheinlich die einfachste Methode. Das Installationsprogramm erwartet, dass sich die Distributionen im tar-Format auf dem Band befinden. Von den Distributions-Dateien erstellen Sie das Installationsband einfach mit dem Kommando tar:

# cd /freebsd/distdir
# tar cvf /dev/rwt0 dist1 ... dist2

Stellen Sie während der Installation sicher, dass Sie über genügend freien Platz in einem temporären Verzeichnis (das Sie festlegen können) verfügen. Das temporäre Verzeichnis muss den gesamten Inhalt des Bands aufnehmen können. Da auf Bänder nicht wahlfrei zugegriffen werden kann, benötigt diese Installationsmethode temporär sehr viel Platz.

Anmerkung: Das Band muss sich vor dem Neustart mit der Startdiskette im Laufwerk befinden. Ansonsten wird das Band während der Geräteerkennung vielleicht nicht erkannt.


2.13.6. Eine Netzwerkinstallation vorbereiten

Sie können drei Verbindungsarten für eine Netzwerkinstallation benutzen: Eine Ethernet-Verbindung, eine serielle Verbindung (PPP), oder eine parallele Verbindung (PLIP, Laplink-Kabel).

Die schnellste Netzwerkinstallation ist natürlich mit einer Netzwerkkarte möglich. FreeBSD unterstützt die meisten der üblichen Netzwerkkarten. Eine Liste der unterstützten Netzwerkkarten ist in den Hardware-Notes jedes Releases enthalten. Wenn Sie eine unterstützte PCMCIA-Netzwerkkarte benutzen, stellen Sie sicher, dass die Karte eingesteckt ist, bevor der Laptop eingeschaltet wird. Leider unterstützt FreeBSD das Einstecken von PCMCIA-Karten während der Installation noch nicht.

Für eine Netzwerkinstallation müssen Sie Ihre IP-Adresse, die Netzwerkmaske und den Namen Ihres Rechner kennen. Wenn Sie über eine PPP-Verbindung installieren und keine feste IP-Adresse besitzen, braucht Sie der vorgehende Satz nicht zu beunruhigen. Sie können eine IP-Adresse dynamisch von Ihrem ISP beziehen. Fragen Sie Ihren Systemadministrator nach den richtigen Netzwerkeinstellungen. Wenn Sie andere Rechner über Namen anstatt über IP-Adressen erreichen wollen, brauchen Sie zudem einen Nameserver und möglicherweise die Adresse eines Gateways (mit PPP ist das die Adresse des ISPs), über den Sie den Nameserver erreichen. Wenn Sie von einem FTP-Server über einen HTTP-Proxy installieren wollen, benötigen Sie außerdem noch die Adresse des Proxy-Servers. Wenn Sie nicht alle oder zumindest die meisten der benötigten Daten kennen, sollten Sie wirklich vor der Installation mit Ihrem Systemadministrator oder ISP reden!

Wenn Sie ein Modem benutzen, ist PPP ziemlich sicher die einzige Wahl. Stellen Sie sicher, dass Sie die Daten Ihres Service Providers bereitliegen haben, da Sie während der Installation die Daten früh benötigen.

Wenn Sie PAP oder CHAP benutzen, um sich mit Ihrem ISP zu verbinden (wenn Sie unter Windows kein Skript benötigen, um die Verbindung herzustellen), brauchen Sie an der ppp-Eingabeaufforderung nur das Kommando dial abzusetzen. Ansonsten müssen Sie sich mit Modem-spezifischen AT-Kommandos bei Ihrem ISP einwählen (PPP stellt nur einen einfachen Terminal-Emulator zur Verfügung). Weiteres über PPP erfahren Sie im Abschnitt User-PPP des Handbuchs und im PPP-Abschnitt der FAQ. Bei Problemen können Sie mit dem Kommando set log local Meldungen auf den Bildschirm umleiten.

Wenn eine feste Verbindung zu einer anderen FreeBSD-Maschine besteht, sollten Sie ein paralleles Laplink-Kabel in Betracht ziehen. Über eine parallele Verbindung sind höhrere Geschwindigkeiten als über eine serielle Verbindung (typischerweise bis zu 50 kByte/s) möglich. Daher ist die Installation über eine parallele Verbindung schneller als eine Installation über eine serielle Verbindung.


2.13.6.1. Eine NFS-Installation vorbereiten

Eine NFS-Installation ist unkompliziert. Kopieren Sie einfach die Distributionen auf einen NFS-Server und wählen Sie NFS als Installationsmedium aus.

Wenn der NFS-Server nur Verbindungen über privilegierte Ports (Ports kleiner 1024) annimmt, setzen Sie vor der Installation die Option NFS Secure im Menü Options.

Wenn Sie eine schlechte Netzwerkkarte besitzen, die sehr langsam ist, wählen Sie die Option NFS Slow.

Damit die NFS-Installation funktioniert, muss der NFS-Server auch Unterverzeichnisse von exportierten Verzeichnissen zum Einhängen freigeben. Wenn beispielsweise die Distribution von FreeBSD 9.0 unter ziggy:/usr/archive/stuff/FreeBSD liegt, muss der Rechner ziggy erlauben, das Verzeichnis /usr/archive/stuff/FreeBSD einzuhängen. Es reicht nicht, dass ziggy erlaubt das Verzeichnis /usr oder /usr/archive/stuff einzuhängen.

Unter FreeBSD werden diese Freigaben in der Datei /etc/exports mit der Option -alldirs eingestellt. Die nötigen Einstellungen können auf einem anderen NFS-Server unterschiedlich sein. Wenn Sie vom NFS-Server die Fehlermeldung “permission denied” erhalten, dann haben Sie wahrscheinlich die Freigaben nicht richtig konfiguriert.


Kapitel 3. FreeBSD 9.x (und neuer) installieren

Restructured, reorganized, and parts rewritten by Jim Mock. The sysinstall walkthrough, screenshots, and general copy by Randy Pratt. Updated for bsdinstall by Gavin Atkinson und Warren Block. Übersetzt von Benedict Reuschling.

3.1. Übersicht

FreeBSD enthält ein text-basiertes, einfach zu verwendendes Installationsprogramm. FreeBSD 9.0-RELEASE und neuer verwendet ein Installationsprogramm genannt bsdinstall, während Versionen vor FreeBSD 9.0-RELEASE stattdessen sysinstall zur Installation einsetzten. Dieses Kapitel beschreibt die Verwendung von bsdinstall. Der Einsatz von sysinstall wird in Kapitel 2 behandelt.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

  • wie man FreeBSD Installationsmedien erstellt.

  • wie FreeBSD Festplatten unterteilt und darauf verweist.

  • wie man bsdinstall startet.

  • welche Fragen Sie von bsdinstall gestellt bekommen, was sie bedeuten und und wie man diese beantwortet.

Bevor Sie dieses Kapitel lesen, sollten Sie:

  • Die Liste von unterstützter Hardware lesen, die mit Ihrer zu installierenden Version von FreeBSD ausgeliefert wird, um sicherzustellen, dass Ihre Hardware auch unterstützt wird.

Anmerkung: Generell wurden diese Installationsanweisungen für Rechner der i386 (“PC-kompatibel”) Architektur verfasst. An Stellen, an denen sich die Anweisungen speziell auf eine andere Plattform beziehen, wird darauf hingewiesen. Es mag kleinere Unterschiede geben zwischen dem Installationsprogramm und dem, was hier beschrieben steht. Sie sollten daher dieses Kapitel als eine Art Wegweiser und keine exakte Anleitung betrachten.


3.2. Hardware-Anforderungen

3.2.1. Minimalkonfiguration

Die Minimalkonfiguration zur Installation von FreeBSD variiert mit der Version von FreeBSD und der Hardwarearchitektur.

Eine Zusammenfassung dieser Informationen wird in den folgenden Abschnitten gegeben. Abhängig von der Installationsmethode, die Sie verwenden, um FreeBSD zu installieren, werden Sie unter Umständen ein unterstütztes CD-ROM-Laufwerk benötigen und in manchen Fällen eine Netzwerkkarte. Dies wird im Abschnitt Abschnitt 3.3.5 genauer betrachtet.


3.2.1.1. FreeBSD/i386

FreeBSD/i386 benötigt einen 486er oder einen schnelleren Prozessor und mindestens 64 MB RAM. Es sollte mindestens 1.1 GB freier Festplattenspeicher für die Installation zur Verfügung stehen.

Anmerkung: Auf alten Rechnern hat die Aufrüstung von RAM und dem Festplattenplatz normalerweise einen höheren geschwindigkeitssteigernden Effekt als einen schnelleren Prozessor einzubauen.


3.2.1.2. FreeBSD/amd64

Es gibt zwei Klassen von Prozessoren, die in der Lage sind, auf FreeBSD/amd64 zu laufen. Die erste Klasse sind AMD64-Prozessoren, was sowohl AMD Athlon™64, AMD Athlon64-FX, AMD Opteron™ oder bessere Prozessoren beinhaltet.

Die zweite Klasse von Prozessoren, die FreeBSD/amd64 benutzen kann, besteht aus der Intel EM64T-Architektur. Beispiele dieser Prozessoren beinhalten die Intel Core 2 Duo, Quad, Extreme Prozessorfamilien, die Intel Xeon 3000, 5000, und 7000 Reihe von Prozessoren, sowie die Intel Core i3, i5 and i7 Prozessoren.

Sollten Sie einen Rechner basierend auf der nVidia nForce3 Pro-150 besitzen, müssen Sie im BIOS das IO APIC deaktivieren. Falls Sie keine solche Option zum deaktivieren besitzen, werden Sie wahrscheinlich ACPI deaktivieren müssen. Der Pro-150 Chipsatz enthält Fehler, für die wir noch keine Abhilfe gefunden haben.


3.2.1.3. FreeBSD/powerpc Apple® Macintosh®

Alle neuen Apple® Macintosh® Systeme mit eingebautem USB werden unterstützt. SMP wird auf Maschinen mit mehreren CPUs unterstützt.

Ein 32-bit Kernel kann nur die ersten 2 GB des Hauptspeichers verwenden. FireWire® wird auf den blauen und weissen PowerMac G3s nicht unterstützt.


3.2.1.4. FreeBSD/sparc64

Systeme, die von FreeBSD/sparc64 unterstützt werden, sind auf der FreeBSD/sparc64-Projektseite aufgelistet.

Eine dedizierte Platte wird für FreeBSD/sparc64 benötigt. Es ist nicht möglich, eine Platte mit einem anderen Betriebssystem zur gleichen Zeit zu teilen.


3.2.2. Unterstützte Hardware

Hardwarearchitekturen und von FreeBSD unterstützte Geräte werden in der Datei mit Hardware Notes aufgelistet. Normalerweise heisst diese Datei HARDWARE.TXT und befindet sich im Wurzelverzeichnis des Veröffentlichungsmediums. Kopien dieser unterstützten Hardwareliste ist ebenfalls auf der Seite Release Information der FreeBSD Webseite abrufbar.


3.3. Vor der Installation

3.3.1. Sichern Sie Ihre Daten

Sichern Sie alle wichtigen Daten auf dem Zielcomputer, auf dem FreeBSD installiert werden soll. überprüfen Sie diese Sicherungen, bevor Sie fortfahren. Die FreeBSD Installation wird Sie vor Änderungen an den Platten danach fragen, jedoch kann dies nicht mehr rückgängig gemacht werden, sobald der Prozess gestartet wurde.


3.3.2. Den Installationsort von FreeBSD festlegen

Falls FreeBSD das einzige installierte Betriebssystem sein wird und die gesamte Platte dazu verwenden kann, kann der Rest dieses Abschnitts übersprungen werden. Sollten Sie allerdings die Platte mit anderen Betriebssystemen teilen, ist ein Verständnis des Plattenlayouts hilfreich für die Installation.


3.3.2.1. Festplattenlayout für FreeBSD/i386 und FreeBSD/amd64

Festplatten können in mehrere verschiedene Bereiche aufgeteilt werden. Diese Bereiche werden Partitionen genannt.

Es gibt zwei Arten, eine Festplatte in mehrere Partitionen einzuteilen. Traditionell enthält ein Master Boot Record (MBR) eine Partitionstabelle, welche bis zu vier primäre Partitionen aufnehmen kann (aus historischen Gründen werden diese primären Partitionen in FreeBSD slices genannt). Eine Begrenzung von nur vier Partitionen ist für grosse Platten sehr beschränkt, so dass eine dieser primären Partitionen als erweiterte Partition eingesetzt wird. Mehrere logische Partitionen können dann innerhalb der erweiterten Partition angelegt werden. Dies mag etwas unhandlich erscheinen und das ist auch der Fall.

Die GUID-Partitionstabelle (GPT) ist eine neuere und einfachere Methode zur Partition einer Festplatte. GPT ist weitaus flexibler als die traditionelle MBR-Partitionstabelle. Geläufige GPT-Implementierungen erlauben bis zu 128 Partitionen pro Platte, was die Notwendigkeit von umständlichen Behelfen wie logische Partitionen eliminiert.

Warnung: Manche älteren Betriebssysteme wie Windows XP sind mit dem GPT-Partitionsschema nicht kompatibel. Wenn sich FreeBSD die Platte mit einem solchen Betriebssystem teilen soll, werden MBR Partitionen benötigt.

FreeBSDs Standard-Bootloader benötigt entweder eine primäre oder eine GPT-Partition (lesen Sie dazu Kapitel 13 für weitere Informationen zum FreeBSD Bootvorgang). Wenn alle der primären oder GPT-Partitionen bereits in Verwendung sind, muss eine davon für FreeBSD zur Verfügung gestellt werden.

Eine Minimalinstallation von FreeBSD braucht ungefähr 1 GB Plattenplatz. Dies ist jedoch eine sehr minimale Installation, die fast gar keinen freien Speicherplatz übrig lässt. Eine etwas realistischere Minimalangabe sind 3 GB ohne eine graphische Umgebung und 5 GB oder mehr, falls eine graphische Benutzeroberfläche verwendet werden soll. Anwendungen von Drittanbietern benötigt sogar noch mehr Platz.

Eine Vielzahl freier und kommerzieller Werkzeuge zur Veränderung der Partitionsgrössen sind verfügbar. GParted Live ist eine freie Live-CD, die den GParted-Partitionseditor enthält. GParted ist auch in einer Vielzahl von anderen Linux Live-CD Distributionen enthalten.

Warnung: Anwendungen zur Festplattenpartition kann Daten zerstören. Erstellen Sie eine Vollsicherung und überprüfen Sie deren Integrität bevor Sie die Partitionen auf der Platte verändern.

Die Veränderung der Grösse von Microsoft Vista-Partitionen kann schwierig sein. Eine Vista Installations-CD-ROM kann hilfreich sein, wenn eine solche Aktion versucht wird.

Beispiel 3-1. Eine existierende Partition verändern

Ein Windows-Computer besitzt eine einzelne 40 GB Platte, die in zwei 20 GB Partitionen aufgeteilt wurde. Windows nennt diese C: und D:. Die C: Partition enthält 10 GB und the D: Partition 5 GB an Daten.

Durch kopieren der Daten von D: nach C: macht die zweite Partition frei, so dass FreeBSD sie benutzen kann.

Beispiel 3-2. Verkleinern einer bestehenden Partition

Ein Windows-Computer besitzt eine einzelne 40 GB Platte und eine grosse Partition, welche die gesamte Platte einnimmt. Windows zeigt diese 40 GB Partition als einzelne C: Partition. 15 GB Plattenplatz wird verwendet. Das Ziel ist, für Windows eine 20 GB Partition einzurichten und eine weitere 20 GB-Partition für FreeBSD bereitzustellen.

Es gibt zwei Wege, dieses Ziel zu erreichen.

  1. Sichern Sie Ihre Windows-Daten. Installieren Sie dann Windows neu, indem Sie eine 20 GB-Partition während der Installation anlegen.

  2. Verwenden Sie ein Werkzeug zur Veränderung einer Partition wie GParted, um die Windows-Partition zu verkleinern und eine neue Partition im freigewordenen Plattenplatz für FreeBSD anzulegen.

Festplattenpartitionen, die unterschiedliche Betriebssysteme enthalten, ermöglichen es, jeweils eines dieser Systeme zu verwenden. Eine andere Methode, die es erlaubt, mehrere Betriebssysteme gleichzeitig einzusetzen, wird in Kapitel 23 behandelt.


3.3.3. Netzwerkparameter ermitteln

Manche FreeBSD Installationsarten benötigen eine Netzwerkverbindung, um Dateien herunter zu laden. Um zu einem Ethernet-Netzwerk (bzw. Kabel oder DSL-Modem mit einem Ethernet-Anschluss) eine Verbindung herzustellen, wird das Installationsprogramm bestimmte Information zum Netzwerk abfragen.

DHCP wird allgemein verwendet, um automatisch Netzwerkeinstellungen vorzunehmen. Falls DHCP nicht verfügbar ist, müssen diese Netzwerkeinstellungen vom lokalen Netzwerkadministrator oder Provider erfragt werden:

Informationen zum Netzwerk

  1. IP-Adresse

  2. Subnetz-Maske

  3. Default-Router IP-Adresse

  4. Domänenname des lokalen Netzwerks

  5. DNS-Server IP-Adresse(n)


3.3.4. Lesen Sie die FreeBSD-Errata

Obwohl das FreeBSD Projekt sich bemüht, jede veröffentlichte Version von FreeBSD so stabil wie möglich zu machen, können sich doch gelegentlich Fehler in den Veröffentlichungsprozess einschleichen. In sehr seltenen Fällen betreffen diese Fehler den Installationsvorgang. Wenn diese Probleme entdeckt und behoben sind, werden dazu Hinweise in der FreeBSD Errata auf der FreeBSD Webseite veröffentlicht. Prüfen Sie die Errata vor der Installation, um sicherzustellen, dass es keine Probleme gibt, welche die Installation betreffen.

Informationen und Errata für all diese Veröffentlichungen können über den Abschnitt release information der FreeBSD Webseite abgerufen werden.


3.3.5. Die Installationsmedien beschaffen

Eine FreeBSD-Installation wird durch das starten des Computers mit einer eingelegten FreeBSD-Installations-CD/DVD oder eines USB-Sticks begonnen. Das Installationsprogramm ist kein Programm das aus einem anderen Betriebssystem heraus gestartet werden kann.

Zusätzlich zum Standardinstallationsmedium, welches Kopien von allen FreeBSD-Installationsdateien enthält, gibt es auch eine bootonly-Variante. Ein solches Installationsmedium besitzt keine Kopien der Installationsdateien, jedoch kann es diese während der Installation aus dem Netzwerk nachladen. Die bootonly Installations-CD ist dadurch viel kleiner und reduziert die benötigte Bandbreite während der Installation durch herunterladen der allernötigsten Dateien.

Kopien der FreeBSD-Installationsmedien sind auf der FreeBSD Webseite verfügbar.

Tipp: Falls Sie bereits eine Kopie von FreeBSD auf CD-ROM, DVD oder USB-Stick besitzen, kann dieser Abschnitt übersprungen werden.

CD und DVD-Images von FreeBSD sind startfähige ISO-Dateien. Nur eine CD oder DVD wird für eine Installation benötigt. Brennen Sie ein ISO-Image auf eine startfähige CD oder DVD mit Hilfe eines CD-Brennprogramms, das für Ihr aktuelles Betriebssystem zur Verfügung steht.

Um einen startfähigen USB-Stick zu erstellen, führen Sie die folgenden Schritte durch:

  1. Das Image für den USB-Stick herunterladen

    Das Image für FreeBSD 9.0-RELEASE und höhere kann von dem ISO-IMAGES/-Verzeichnis unter ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.img bezogen werden. Ersetzen Sie jeweils arch und version mit der Architektur und der Versionsnummer, die Sie installieren möchten. Beispielsweise sind die USB-Stick Images für FreeBSD/i386 9.0-RELEASE verfügbar unter ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-i386-memstick.img.

    Tipp: Für FreeBSD 8.X und frühere Versionen wird ein anderer Pfad verwendet. Details für das Herunterladen und Installieren von FreeBSD 8.X und frühere werden in Kapitel 2 behandelt.

    Das USB-Stick Image hat die Endung .img. Das ISO-IMAGES/-Verzeichnis enthält eine Vielzahl von verschiedenen Installations-Images und die jeweils benötigte Version von FreeBSD, sowie in manchen Fällen die Zielhardware.

    Wichtig: Bevor Sie fortfahren, machen Sie Sicherungskopien der Daten auf dem USB-Stick, da die folgende Prozedur alle Daten löscht.

  2. Das Image auf den USB-Stick schreiben

    Den USB-Stick unter FreeBSD vorbereiten

    Warnung: Das Beispiel unten verwendet /dev/da0 als das Zielgerät, auf welches das Image geschrieben werden soll. Seien Sie vorsichtig, dass das richtige Gerät als das Ausgabe benutzt wird oder Sie zerstören wichtige Daten.

    1. Das Image mit dd(1) schreiben

      Die .img-Datei ist keine gewöhnliche Datei. Es ist ein Image des kompletten späteren Inhalts des USB-Sticks. Es kann nicht einfach wie eine gewöhnliche Datei kopiert werden, sondern muss direkt auf das Zielgerät mit dd(1) geschrieben werden:

      # dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=64k
      

    Das Image unter Windows schreiben

    Warnung: Versichern Sie sich, dass Sie den korrekten Laufwerksbuchstaben als Ausgabe angeben oder Sie überschreiben und zerstören bestehende Daten.

    1. Image Writer für Windows herunterladen

      Image Writer für Windows ist eine frei verfügbare Anwendung, welche eine Imagedatei korrekt auf einen SB-Stick schreiben kann. Laden Sie diese von https://launchpad.net/win32-image-writer/ herunter und entpacken Sie sie in einen Ordner.

    2. Das Image mit Image Writer auf den USB-Stick schreiben

      Klicken Sie doppelt auf das Win32DiskImager-Icon, um das Programm zu starten. Prüfen Sie dabei, dass der Laufwerksbuchstabe unter Device dem Gerät entspricht, in dem sich der USB-Stick befindet. Klicken Sie auf das Ordnersymbol und wählen Sie das Image aus, welches auf den USB-Stick geschrieben werden soll. Um den Image-Dateinamen zu akzeptieren, klicken Sie auf [ Save ]. Überprüfen Sie erneut, ob alles stimmt und dass keine Ordner auf dem USB-Stick in anderen Fenstern geöffnet sind. Sobald alles bereit ist, klicken Sie auf [ Write ], um die Imagedatei auf den USB-Stick zu schreiben.

Anmerkung: Die Installation von Disketten wird nicht mehr unterstützt.

Sie sind jetzt dazu bereit, mit der Installation von FreeBSD zu beginnen.


3.4. Die Installation starten

Wichtig: Es werden durch die Installation keine Änderungen an Ihren Festplatten durchgeführt, so lange Sie nicht die folgende Meldung sehen:

Your changes will now be written to disk.  If you
have chosen to overwrite existing data, it will
be PERMANENTLY ERASED. Are you sure you want to
commit your changes?

Die Installation kann vor dieser Warnung zu jeder Zeit abgebrochen werden, ohne dass die Inhalte der Festplatte geändert davon betroffen sind. Falls Sie besorgt sind, dass etwas falsch konfiguriert wurde, schalten Sie einfach den Computer vor diesem Punkt aus und es wird kein Schaden angerichtet.


3.4.1. Der Systemstart

3.4.1.1. Systemstart von i386 und amd64

  1. Falls Sie einen “startfähigen” USB-Stick einsetzen, wie in Abschnitt 3.3.5 beschrieben ist, dann stecken Sie diesen vor dem Anschalten des Computers hinein.

    Falls Sie von einer CD-ROM starten, müssen Sie den Computer anschalten und die CD-ROM so bald wie möglich einlegen.

  2. Konfigurieren Sie Ihren Rechner so, dass er entweder von der CD-ROM oder dem USB-Stick startet, abhängig davon, welches Installationsmedium Sie verwenden. Die Konfiguration im BIOS erlaubt es, das Gerät, von dem gestartet werden soll, auszuwählen. Die meisten Systeme erlauben es auch, das Startgerät während des Startvorgangs zu wählen, typischerweise durch drücken von entweder F10, F11, F12 oder Escape.

  3. Falls Ihr Computer wie normal startet und Ihr bestehendes Betriebssystem lädt, befolgen Sie einen der hier aufgeführten Schritte:

    1. Die Medien wurden während des Startvorgangs nicht früh genug eingelegt. Lassen Sie diese wo sie sind und versuchen Sie, den Rechner davon neu zu starten.

    2. Die Änderungen am BIOS haben nicht richtig funktioniert. Sie sollten diese erneut durchführen, um die richtige Option auszuwälen.

    3. Das von Ihnen verwendete BIOS unterstützt das starten vom gewählten Medium nicht. Der Plop Boot Manager kann in diesem Fall verwendet werden, um ältere Computer von CD or USB-Medien zu starten.

  4. FreeBSD wird anfangen zu starten. Falls Sie von CD-ROM starten, werden Sie eine Anzeige ähnlich wie die folgende zu sehen bekommen (Versionsinformationen wurden hier entfernt):

    Booting from CD-ROM...
    645MB medium detected
    CD Loader 1.2
    
    Building the boot loader arguments
    Looking up /BOOT/LOADER... Found
    Relocating the loader and the BTX
    Starting the BTX loader
    
    BTX loader 1.00 BTX version is 1.02
    Consoles: internal video/keyboard
    BIOS CD is cd0
    BIOS drive C: is disk0
    BIOS drive D: is disk1
    BIOS 636kB/261056kB available memory
    
    FreeBSD/i386 bootstrap loader, Revision 1.1
    
    Loading /boot/defaults/loader.conf
    /boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d]
    \
    
  5. Der FreeBSD-Bootloader wird angezeigt:

    Abbildung 3-1. Das FreeBSD-Bootloader Menü

    Warten Sie entweder zehn Sekunden oder drücken Sie Enter.


3.4.1.2. Systemstart beim Macintosh PowerPC®

Auf den meisten Maschinen können Sie C auf der Tastatur gedrückt halten, um von der CD zu starten. Andernfalls, halten Sie Command+Option+O+F, oder Windows+Alt+O+F auf nicht-Apple Tastaturen gedrückt. Geben Sie an der 0 >-Eingabeaufforderung folgendes ein:

boot cd:,\ppc\loader cd:0

Für Xserves ohne Tastatur, lesen Sie Apples Support Webseite über das starten in die Open Firmware.


3.4.1.3. Systemstart für SPARC64

Die meisten SPARC64-Systeme sind so eingerichtet, dass diese automatisch von CD starten. Um FreeBSD zu installieren, müssen Sie über das Netzwerk oder von einer CD-ROM starten, was es nötig macht, in die PROM OpenFirmware einzubrechen.

Um dies zu tun, starten Sie das System neu und warten Sie bis die Startmeldungen erscheinen. Abhängig vom Modell sollte dies in etwa folgendermaßen aussehen:

Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.

Falls Ihr System damit fortfährt, von diesem Zeitpunkt an von Platte zu starten, müssen Sie L1+A oder Stop+A auf der Tastatur eingeben oder ein BREAK-Kommando (indem Sie z.B. ~# in tip(1) oder cu(1) absetzen) über die serielle Konsole senden, um zur PROM Befehlszeile zu gelangen. Es sieht dann so aus:

ok         (1)
ok {0}     (2)
(1)
Dies ist die Eingabeaufforderung, welche auf Systemen mit nur einer CPU verwendet wird.
(2)
Dies ist die Eingabeaufforderung auf SMP-Systemen. Die Zahl gibt die Nummer der aktiven CPU an.

An dieser Eingabeaufforderung angekommen, legen Sie nun die CD-ROM in Ihr Laufwerk und geben Sie boot cdrom ein.


3.4.2. Die Geräteerkennung prüfen

Die letzten hundert Zeilen, die am Bildschirm angezeigt wurden, sind gespeichert worden und können erneut abgerufen werden.

Um diesen Puffer anzusehen, drücken Sie Scroll Lock. Das bewirkt, dass Sie die Bildschirmanzeige hoch und runter bewegen (scrollen) können. Sie können dann die Pfeiltasten oder PageUp und PageDown benutzen, um die Meldungen zu sehen. Drücken Sie Scroll Lock erneut, um das scrollen zu stoppen.

Tun Sie dies jetzt, um den Text, der aus den Bildschirm gelaufen ist, als der Kernel die Geräteerkennung durchgeführt hat, erneut zu prüfen. Sie werden einen Text ähnlich zu Abbildung 3-2 sehen, obwohl sich der genaue Text, abhängig von den Geräten in Ihrem Computer, unterscheiden wird.

Abbildung 3-2. Typical Device Probe Results

Copyright (c) 1992-2011 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-RELEASE #0 r225473M: Sun Sep 11 16:07:30 BST 2011
    root@psi:/usr/obj/usr/src/sys/GENERIC amd64
CPU: Intel(R) Core(TM)2 Duo CPU     T9400  @ 2.53GHz (2527.05-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x10676  Family = 6  Model = 17  Stepping = 6
  Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x8e3fd<SSE3,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1>
  AMD Features=0x20100800<SYSCALL,NX,LM>
  AMD Features2=0x1<LAHF>
  TSC: P-state invariant, performance statistics
real memory  = 3221225472 (3072 MB)
avail memory = 2926649344 (2791 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <TOSHIB A0064   >
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s)
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP): APIC ID:  1
ioapic0: Changing APIC ID to 1
ioapic0 <Version 2.0> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <TOSHIB A0064> on motherboard
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, b6690000 (3) failed
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0: <24-bit timer at 3.579545MHz> port 0xd808-0xd80b on acpi0
cpu0: <ACPI CPU> on acpi0
ACPI Warning: Incorrect checksum in table [ASF!] - 0xFE, should be 0x9A (20110527/tbutils-282)
cpu1: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0xcff8-0xcfff mem 0xff400000-0xff7fffff,0xe0000000-0xefffffff irq 16 at device 2.0 on pci0
agp0: <Intel GM45 SVGA controller> on vgapci0
agp0: aperture size is 256M, detected 131068k stolen memory
vgapci1: <VGA-compatible display> mem 0xffc00000-0xffcfffff at device 2.1 on pci0
pci0: <simple comms> at device 3.0 (no driver attached)
em0: <Intel(R) PRO/1000 Network Connection 7.2.3> port 0xcf80-0xcf9f mem 0xff9c0000-0xff9dffff,0xff9fe000-0xff9fefff irq 20 at device 25.0 on pci0
em0: Using an MSI interrupt
em0: Ethernet address: 00:1c:7e:6a:ca:b0
uhci0: <Intel 82801I (ICH9) USB controller> port 0xcf60-0xcf7f irq 16 at device 26.0 on pci0
usbus0: <Intel 82801I (ICH9) USB controller> on uhci0
uhci1: <Intel 82801I (ICH9) USB controller> port 0xcf40-0xcf5f irq 21 at device 26.1 on pci0
usbus1: <Intel 82801I (ICH9) USB controller> on uhci1
uhci2: <Intel 82801I (ICH9) USB controller> port 0xcf20-0xcf3f irq 19 at device 26.2 on pci0
usbus2: <Intel 82801I (ICH9) USB controller> on uhci2
ehci0: <Intel 82801I (ICH9) USB 2.0 controller> mem 0xff9ff800-0xff9ffbff irq 19 at device 26.7 on pci0
usbus3: EHCI version 1.0
usbus3: <Intel 82801I (ICH9) USB 2.0 controller> on ehci0
hdac0: <Intel 82801I High Definition Audio Controller> mem 0xff9f8000-0xff9fbfff irq 22 at device 27.0 on pci0
pcib1: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0
pci1: <ACPI PCI bus> on pcib1
iwn0: <Intel(R) WiFi Link 5100> mem 0xff8fe000-0xff8fffff irq 16 at device 0.0 on pci1
pcib2: <ACPI PCI-PCI bridge> irq 16 at device 28.1 on pci0
pci2: <ACPI PCI bus> on pcib2
pcib3: <ACPI PCI-PCI bridge> irq 18 at device 28.2 on pci0
pci4: <ACPI PCI bus> on pcib3
pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
pci5: <ACPI PCI bus> on pcib4
cbb0: <RF5C476 PCI-CardBus Bridge> at device 11.0 on pci5
cardbus0: <CardBus bus> on cbb0
pccard0: <16-bit PCCard bus> on cbb0
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
ahci0: <Intel ICH9M AHCI SATA controller> port 0x8f58-0x8f5f,0x8f54-0x8f57,0x8f48-0x8f4f,0x8f44-0x8f47,0x8f20-0x8f3f mem 0xff9fd800-0xff9fdfff irq 19 at device 31.2 on pci0
ahci0: AHCI v1.20 with 4 3Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ahcich1: <AHCI channel> at channel 1 on ahci0
ahcich2: <AHCI channel> at channel 4 on ahci0
acpi_lid0: <Control Method Lid Switch> on acpi0
battery0: <ACPI Control Method Battery> on acpi0
acpi_button0: <Power Button> on acpi0
acpi_acad0: <AC Adapter> on acpi0
acpi_toshiba0: <Toshiba HCI Extras> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
attimer0: <AT timer> port 0x40-0x43 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model GlidePoint, device ID 0
atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0
Event timer "RTC" frequency 32768 Hz quality 0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 950
Event timer "HPET" frequency 14318180 Hz quality 450
Event timer "HPET1" frequency 14318180 Hz quality 440
Event timer "HPET2" frequency 14318180 Hz quality 440
Event timer "HPET3" frequency 14318180 Hz quality 440
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
ppc0: cannot reserve I/O port range
est0: <Enhanced SpeedStep Frequency Control> on cpu0
p4tcc0: <CPU Frequency Thermal Control> on cpu0
est1: <Enhanced SpeedStep Frequency Control> on cpu1
p4tcc1: <CPU Frequency Thermal Control> on cpu1
Timecounters tick every 1.000 msec
hdac0: HDA Codec #0: Realtek ALC268
hdac0: HDA Codec #1: Lucent/Agere Systems (Unknown)
pcm0: <HDA Realtek ALC268 PCM #0 Analog> at cad 0 nid 1 on hdac0
pcm1: <HDA Realtek ALC268 PCM #1 Analog> at cad 0 nid 1 on hdac0
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
usbus2: 12Mbps Full Speed USB v1.0
usbus3: 480Mbps High Speed USB v2.0
ugen0.1: <Intel> at usbus0
uhub0: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ugen2.1: <Intel> at usbus2
uhub2: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus2
ugen3.1: <Intel> at usbus3
uhub3: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus3
uhub0: 2 ports with 2 removable, self powered
uhub1: 2 ports with 2 removable, self powered
uhub2: 2 ports with 2 removable, self powered
uhub3: 6 ports with 6 removable, self powered
ugen2.2: <vendor 0x0b97> at usbus2
uhub8: <vendor 0x0b97 product 0x7761, class 9/0, rev 1.10/1.10, addr 2> on usbus2
ugen1.2: <Microsoft> at usbus1
ada0 at ahcich0 bus 0 scbus1 target 0 lun 0
ada0: <Hitachi HTS543225L9SA00 FBEOC43C> ATA-8 SATA 1.x device
ada0: 150.000MB/s transfers (SATA 1.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad4
ums0: <Microsoft Microsoft 3-Button Mouse with IntelliEyeTM, class 0/0, rev 1.10/3.00, addr 2> on usbus1
SMP: AP CPU #1 Launched!
cd0 at ahcich1 bus 0 scbus2 target 0 lun 0
cd0: <TEAC DV-W28S-RT 7.0C> Removable CD-ROM SCSI-0 device
cd0: 150.000MB/s transfers (SATA 1.x, ums0: 3 buttons and [XYZ] coordinates ID=0
UDMA2, ATAPI 12bytes, PIO 8192bytes)
cd0: cd present [1 x 2048 byte records]
ugen0.2: <Microsoft> at usbus0
ukbd0: <Microsoft Natural Ergonomic Keyboard 4000, class 0/0, rev 2.00/1.73, addr 2> on usbus0
kbd2 at ukbd0
uhid0: <Microsoft Natural Ergonomic Keyboard 4000, class 0/0, rev 2.00/1.73, addr 2> on usbus0
Trying to mount root from cd9660:/dev/iso9660/FREEBSD_INSTALL [ro]...

Prüfen Sie die Ergebnisse der Geräteerkennung genau, um sicher zu stellen, dass FreeBSD alle Geräte, die Sie erwarten, auch gefunden hat. Falls ein Gerät nicht gefunden wurde, wird es auch nicht aufgelistet. Kernelmodule erlauben es, Unterstützung für Geräte, die nicht im GENERIC-Kernel vorhanden sind, hinzuzufügen.

Nach der Geräteerkennungsprozedur, werden Sie Abbildung 3-3 sehen. Das Installationsmedium kann auf drei Arten verwendet werden: um FreeBSD zu installieren, als eine "live CD" oder um einfach eine FreeBSD-Shell zu öffnen. Benutzen Sie die Pfeiltasten, um eine Option auszuwählen und druücken Sie Enter zum bestätigen.

Abbildung 3-3. Auswahl der Verwendung des Installationsmediums

Wählen Sie hier [ Install ], gelangen Sie in das Installationsprogramm.


3.5. Das bsdinstall-Werkzeug

bsdinstall ist ein textbasiertes FreeBSD Installationsprogramm, geschrieben von Nathan Whitehorn und im Jahr 2011 für FreeBSD 9.0 vorgestellt wurde.

Anmerkung: Kris Moore s pc-sysinstall ist in PC-BSD enthalten und kann ebenfalls verwendet werden, um FreeBSD zu installieren. Obwohl es manchmal mit bsdinstall verwechselt wird, sind die beiden Programme nicht miteinander verwandt.

Das bsdinstall Menüsystem wird durch die Pfeiltasten gesteuert, Enter, Tab, Space und andere Tasten.


3.5.1. Die Tastaturbelegung auswählen

Abhängig davon, welche Systemkonsole verwendet wird, fragt bsdinstall am Anfang ab, ob eine nicht-Standard Tastaturbelegung festgelegt werden soll.

Abbildung 3-4. Tastaturbelegung festlegen

Wenn [ YES ] ausgewählt wird, wird der folgende Tastaturauswahlbildschirm angezeigt. Andernfalls wird dieser Auswahlbildschirm nicht gezeigt und eine Standardtastaturbelegung genutzt.

Abbildung 3-5. Tastaturauswahlbildschirm

Wählen Sie die Tastenbelegung, die Ihrer am System angeschlossenen Tastatur am nächsten kommt, indem Sie die Pfeiltasten Hoch/Runter verwenden und anschliessend Enter drücken.

Anmerkung: Durch drücken von Esc wird die Standardbelegung eingestellt. United States of America ISO-8859-1 ist eine sichere Option, falls Sie sich unsicher sind, welche Auswahl Sie treffen sollen.


3.5.2. Den Rechnernamen festlegen

Als nächstes fragt Sie bsdinstall nach dem Rechnernamen, der in dem neu zu installierenden System verwendet werden soll.

Abbildung 3-6. Festlegen des Rechnernamens

Der eingegebene Rechnername sollte ein voll-qualifizierter Rechnername sein, so wie z.B. machine3.example.com


3.5.3. Auswahl der zu installierenden Komponenten

Im nächsten Schritt fragt Sie bsdinstall, die optionalen Komponenten für die Installation auszuwählen.

Abbildung 3-7. Komponenten für die Installation auswählen

Die Entscheidung, welche Komponenten auszuwählen sind, hängt grösstenteils davon ab, für was das System künftig eingesetzt werden soll und der zur Verfügung stehende Plattenplatz. Der FreeBSD-Kernel und die Systemprogramme (zusammengenommen auch als “Basissystem” bezeichnet) werden immer installiert.

Abhängig vom Typ der Installation, werden manche dieser Komponenten nicht erscheinen.

Optionale Komponenten

  • doc - Zusätzliche Dokumentation, meistens eher von historischem Interesse. Dokumentation, wie Sie vom FreeBSD Dokumentationsprojekt bereitgestellt wird, kann zu einem späteren Zeitpunkt noch installiert werden.

  • games - Mehrere traditionelle BSD-Spiele, sowohl fortune, rot13 und andere.

  • lib32 - Kompatibilitäts-Bibliotheken, um 32-bit Anwendungen auf der 64-bit Version von FreeBSD laufen zu lassen.

  • ports - Die FreeBSD Ports-Sammlung.

    Die Ports-Sammlung stellt eine einfache und praktische Art dar, Software zu installieren. Die Ports-Sammlung enthält nicht den nötigen Quellcode, um die Software zu erstellen. Stattdessen handelt es sich um einen Sammlung von Dateien, die das herunterladen, erstellen und installieren von Drittanbietersoftware automatisiert. Kapitel 5 behandelt die Verwendung der Ports-Sammlung.

    Warnung: Das Installationsprogramm prüft nicht, ob genügend Plattenplatz zur Verfügung steht. Wählen Sie diese Option nur, wenn Sie über ausreichend Festplattenspeicher verfügen. Seit FreeBSD 9.0, nimmt die Ports-Sammlung etwa ports.size; Plattenplatz ein. Sie können für neuere Versionen von FreeBSD einen grösseren Wert annehmen.

  • src - Quellcode für das System.

    FreeBSD wird mit allen Quellen für den Kernel und die Systemprogramme ausgeliefert. Obwohl dies für die meisten Anwendungen nicht benötigt wird, kann es doch für manche Software, die als Quellcode verbreitet wird (beispielsweise Gerätetreiber oder Kernelmodule), oder um an FreeBSD selbst mitzuentwickeln, notwendig sein.

    Der komplette Quellcodebaum benötigt 1 GB Plattenplatz und um das gesamte Betriebssystem neu zu erstellen, werden zusätzliche 5 GB Platz benötigt.


3.6. Installation aus dem Netzwerk

Die bootonly-Installationsmedien enthält keine Kopien der Installationsdateien. Wenn eine bootonly-Installationsmethode verwendet wird, müssen die Dateien über eine Netzwerkverbindung übertragen werden, sobald diese benötigt werden.

Abbildung 3-8. Installation über das Netzwerk

Nachdem die Netzwerkverbindung wie in Abschnitt 3.9.2 konfiguriert wurde, kann ein Spiegelserver ausgewählt werden. Spiegelserver dienen zur Zwischenspeicherung von Kopien der FreeBSD-Dateien. Wählen Sie einen Spiegelserver, welcher in der gleichen Region auf der Welt beheimatet ist, wie der Computer, auf dem FreeBSD installiert werden soll. Dateien können so viel schneller übertragen werden, wenn der Spiegelserver sich n¨her am Zielcomputer befindet und die Installationszeit wird somit reduziert.

Abbildung 3-9. Einen Spiegelserver wählen

Die Installation wird auf die gleiche Weise fortfahren, als würden die Installationsdateien auf einem lokalen Medium vorliegen.


3.7. Plattenplatz bereitstellen

Es gibt drei Arten, Plattenplatz für FreeBSD zur Verfügung zu stellen. Geführte Partitionierung richtet Partitionen automatisch ein, während manuelle Partitionierung es fortgeschrittenen Anwendern erlaubt, selbstgewählte Partitionen zu erzeugen. Schliesslich gbt es noch die Option eine Shell zu starten, auf der Kommandozeilenprogramme wie gpart(8), fdisk(8) und bsdlabel(8) direkt ausgeführt werden können.

Abbildung 3-10. Geführte oder manuelle Partitionierung auswählen


3.7.1. Geführte Partitionierung

Sollten mehrere Platten angeschlossen sein, wählen Sie diejenige aus, auf der FreeBSD installiert werden soll.

Abbildung 3-11. Aus mehreren Platten eine auswählen

Die gesamte Festplatte oder nur ein Teil davon kann für FreeBSD verwendet werden. Ein allgemeines Partitionslayout, das die gesamte Platte einnimmt wird erstellt, wenn [ Entire Disk ] ausgewählt wird. Durch die Wahl von [ Partition ] wird ein Partitionslayout im unbenutzten Speicherplatz der Platte eingerichtet.

Abbildung 3-12. Auswahl der gesamten Platte oder einer Partition

Nachdem das Partitionslayout nun erstellt wurde, sollten Sie es danach noch einmal auf Korrektheit prüfen. Sollten Sie einen Fehler gemacht haben, können Sie durch Auswahl von [ Revert ] wieder die ursprünglichen Partitionen setzen oder durch [ Auto ] die automatischen FreeBSD Partitionen wiederherstellen. Partitionen können manuell erstellt, geändert oder gelöscht werden. Sollte die Partitionierung richtig sein, wählen Sie [ Finish ] aus, um mit der Installation fortzufahren.

Abbildung 3-13. Überprüfen der erstellen Partitionen


3.7.2. Manuelle Partitionierung

Manuelle Partitionierung führt Sie direkt zum Partitionseditor.

Abbildung 3-14. Partitionen manuell erstellen

Durch hervorheben einer Platte (in diesem Fall ada0) und die Auswahl von [ Create ], wird ein Menü zur Wahl des Partitionierungsschemas angezeigt.

Abbildung 3-15. Partitionen manuell anlegen

GPT-Partitionierung ist normalerweise die passendste Auswahl für PC-kompatible Rechner. Ältere PC Betriebssysteme, die nicht mit GPT kompatibel und benötigen stattdessen MBR-Partitionen. Die anderen Partitionsschemata werden für gewöhnlich für ältere Computersysteme benutzt.

Tabelle 3-1. Partitionierungsschemas

Abkürzung Beschreibung
APM Apple Partition Map, von PowerPC® Macintosh verwendet.
BSD BSD-Labels ohne einen MBR, manchmal auch "dangerously dedicated mode" genannt. Lesen Sie dazu bsdlabel(8).
GPT GUID Partition Table.
MBR Master Boot Record.
PC98 MBR-Variante, verwendet von NEC PC-98 Computern.
VTOC8 Volume Table Of Contents, von Sun SPARC64 und UltraSPARC Computern verwendet.

Nachdem das Partitionierungsschema ausgewählt und erstellt wurde, werden durch erneute Auswahl von [ Create ] neue Partitionen erzeugt.

Abbildung 3-16. Partitionen manuell erzeugen

Eine FreeBSD-Standardinstallation mit GPT legt mindestens die folgenden drei Partitionen an:

Standard-FreeBSD GPT-Partitionen

  • freebsd-boot - FreeBSD-Bootcode. Diese Partition muss die erste auf der Festplatte sein.

  • freebsd-ufs - Ein FreeBSD UFS-Dateisystem.

  • freebsd-swap - FreeBSD Auslagerungsbereich (swap space).

Mehere Dateisystempartitionen können benutzt werden und manche Leute ziehen es vor, ein traditionelles Layout mit getrennten Partitionen für die Dateisysteme /, /var, /tmp und /usr zu erstellen. Lesen Sie dazu Beispiel 3-3, um ein Beispiel zu erhalten.

Lesen Sie gpart(8) für eine vollständige Liste von verfügbaren GPT-Partitionstypen.

Grössenangaben können mit gängigen Abkürzungen eingegeben werden: K für Kilobytes, M für Megabytes oder G für Gigabytes.

Tipp: Korrekte Sektorausrichtung ermöglicht grösstmögliche Geschwindigkeit und das Anlegen von Partitionsgrössen als vielfaches von 4K-Bytes hilft, die passende Ausrichtung auf Platten mit entweder 512-Bytes oder 4K-Bytes Sektorgrössen, festzulegen. Generell sollte die Verwendung von Partitionsgrössen, die sogar vielfache von 1M oder 1G sind, den einfachsten Weg darstellen, um sicher zu stellen, dass jede Partition an einem vielfachen von 4K beginnt. Eine Ausnahme gibt es: momentan sollte die freebsd-boot-Partition aufgrund von Beschränkungen im Bootcode nicht grösser sein als 512K.

Ein Einhägepunkt wird benötigt, falls diese Partition ein Dateisystem enthält. Falls nur eine einzelne UFS-Partition erstellt wird, sollte der Einhängepunkt / lauten.

Ein label wird ebenfalls benötigt. Ein Label ist ein Name, durch den diese Partition angesprochen wird. Festplattennamen oder -nummern können sich ändern, falls die Platte einmal an einem anderen Controller oder Port angeschlossen sein sollte, doch das Partitionslabel ändert sich dadurch nicht. Anstatt auf Plattennamen und Partitionsnummern in Dateien wie /etc/fstab zu verweisen, sorgen Labels dafür, dass das System Hardwäreänderungen eher toleriert. GPT-Labels erscheinen in /dev/gpt/, wenn eine Platte angeschlossen wird. Andere Partitionierungsschemas besitzen unterschiedliche Fähigkeiten, Labels zu verwenden und diese erscheinen in anderen /dev/-Verzeichnissen.

Tipp: Vergeben Sie ein einzigartiges Label auf jedem Dateisystem um Konflikte mit identischen Labels zu verhindern. Ein paar Buchstaben des Computernamens, dessen Verwendungszweck oder Ortes kann dem Label hinzugefügt werden. Beispielsweise "labroot" oder "rootfs-lab" für die UFS root-Partition auf einem Laborrechner.

Beispiel 3-3. Ein traditionelles, partitioniertes Dateisystem erstellen

Für ein traditionelles Partitionslayout, in dem sich /, /var, /tmp und /usr in getrennten Partitionen befinden sollen, erstellen Sie ein GPT-Partitionsschema und anschliessend die Partitionen selbst. Die gezeigten Partitionsgrössen sind typisch für eine Festplatte von 20 G. Falls mehr Platz verfügbar ist, sind grössere Swap oder /var-Partitionen nützlich. Den hier gezeigten Beschreibungen sind bsp für "Beispiel" vorangestellt, jedoch sollten Sie andere, einzigartige Beschreibungen verwenden, wie oben beschrieben.

Partitionstyp Grösse Eingehängt als Beschreibung
freebsd-boot 512K    
freebsd-ufs 2G / bsprootfs
freebsd-swap 4G   bspswap
freebsd-ufs 2G /var bspvarfs
freebsd-ufs 1G /tmp bsptmpfs
freebsd-ufs Akzeptieren Sie die Standardeinstellungen (Rest der Platte) /usr bspusrfs

Nachdem die selbstgewählten Partitionen erzeugt wurden, wählen Sie [ Finish ], um mit der Installation fortzusetzen.


3.8. Die Installation festschreiben

Dies ist die letzte Chance, die Installation abzubrechen, ohne Änderungen an den Festplatten vorzunehmen.

Abbildung 3-17. Letzte Bestätigung

Wählen Sie [ Commit ] und drücken Sie Enter, um fortzufahren. Fall noch Änderungen zu machen sind, wählen Sie [ Back ], um zum Partitionseditor zurück zu gelangen. Mittels [ Revert & Exit ] wird das Installationsprogramm beendet, ohne Änderungen an den Festplatten durchzuführen.

Die Installationsdauer hängt von den gewählten Distributionen, dem Installationsmedium und der Geschwindigkeit des Computers ab. Eine Reihe von Nachrichten werden angezeigt, um den Fortschritt darzustellen.

Zuerst wird das Installationsprogramm die Partitionen auf die Platte schreiben und den Befehl newfs ausführen, um die Partitionen zu initialisieren.

Falls Sie eine Netzwerkinstallation vornehmen, wird bsdinstall dann mit dem herunterladen der benötigten Distributionsdateien fortfahren.

Abbildung 3-18. Herunterladen der Distributionsdateien

Als nächstes wird die Integrität der Distributionsdateien überprüft, um sicherzustellen, dass diese während des Ladevorgangs nicht beschädigt oder unsauber vom Installationsmedium gelesen wurden.

Abbildung 3-19. Überprüfen der Distributionsdateien

Zum Schluss werden die überprüften Distributionsdateien auf die Festplatte entpackt.

Abbildung 3-20. Entpacken der Distributionsdateien

Sobald alle benötigten Distributionsdateien entpackt wurden, wird bsdinstall direkt mit den Arbeiten nach der Installation fortsetzen (siehe Abschnitt 3.9).


3.9. Arbeiten nach der Installation

Die Konfiguration von verschiedenen Optionen folgt auf eine erfolgreiche FreeBSD-Installation. Eine solche Option kann durch das erneute betreten der Konfigurationsoptionen aus dem letzten Menü vor dem Neustart in das gerade installierte FreeBSD-System angepasst werden.


3.9.1. Setzen des root-Passworts

Das root-Password muss gesetzt werden. Wichtig ist dabei zu wissen, dass die eingegebenen Zeichen nicht auf dem Bildschirm angezeigt werden. Nachdem das Passwort eingegeben wurde, muss es zur Bestätigung erneut eingetippt werden. Damit werden auch Tippfehler verhindert.

Abbildung 3-21. Das root-Passwort setzen

Nachdem das Passwort erfolgreich gesetzt wurde, wird die Installation nun fortgesetzt.


3.9.2. Die Netzwerkschnittstelle konfigurieren

Anmerkung: Die Netzwerkkonfiguration wird übersprungen, falls dies bereits als Teil der bootonly durchgeführt worden ist.

Eine Liste aller gefundenen Netzwerkschnittstellen, die auf diesem Computer gefunden wurden, wird als nächstes angezeigt. Wählen Sie davon eine aus, um diese zu konfigurieren.

Abbildung 3-22. Eine zu konfigurierende Netzwerkschnittstelle auswählen


3.9.2.1. Eine drahtlose Netzwerkverbindung einrichten

Sollte eine drahtlose Netzwerkverbindung ausgewählt worden sein, müssen WLAN-Identifikation und Sicherheitsparameter nun eingegeben werden, um die Verbindung mit dem Netzwerk herzustellen.

Drahtlose Netzwerke werden durch einen Service Set Identifier oder auch SSID genannt, identifiziert. Der SSID ist ein kurzer, eindeutiger Namen, der für jedes Netzwerk vergeben wird.

Die meisten drahtlosen Netzwerke verschlüsseln die übertragenen Daten, um die Information darin vor unautorisiertem Zugriff zu schützen. Die Verwendung von WPA2-Verschlüsselung wird empfohlen. Ältere Verschlüsselungstypen, wie WEP, bieten nur sehr wenig Sicherheit.

Der erste Schritt des Verbindungsaufbaus ist das drahtlose Netzwerk nach drahtlosen Zugriffspunkten (access points) zu scannen.

Abbildung 3-23. Nach drahtlosen Access Points scannen

SSIDs, die während des scannens gefunden wurden, werden aufgelistet, gefolgt von einer Beschreibung der Verschlüsselungsarten, die für dieses Netzwerk verfügbar sind. Falls die gewünschte SSID nicht in der Liste auftaucht, wählen Sie [ Rescan ], um erneut einen Scanvorgang durchzuführen. Falls dann das gewünschte Netzwerk immer noch nicht erscheint, überprüfen Sie Ihre Antenne auf Verbindungsprobleme oder versuchen Sie, näher an den Access point zu gelangen. Scannen Sie erneut nach jeder vorgenommenen Änderung.

Abbildung 3-24. Ein drahtloses Netzwerk auswählen

Die Verschlüsselungsinformationen, um sich mit dem Netzwerk zu verbinden, werden nach der Auswahl des Netzwerks eingegeben. Mit WPA2 wird nur ein Passwort (auch bekannt als Pre-Shared Key oder PSK) benötigt. Zeichen, die in die Eingabebox getippt werden, erscheinen aus Sicherheitsgründen als Sternchen.

Abbildung 3-25. Verbindungsaufbau mit WPA2

Die Netzwerkkonfiguration wird fortgesetzt, nachdem das drahtlose Netzwerk und die Verbindungsinformationen eingegeben wurden.


3.9.2.2. Konfiguration des IPv4-Netzwerks

Wählen Sie, ob Sie ein IPv4-Netzwerk verwenden möchten. Dies ist der am häufigsten vorkommende Typ einer Netzwerkverbindung.

Abbildung 3-26. Auswahl von IPv4

Es gibt zwei Arten, ein IPv4-Netzwerk zu konfigurieren. DHCP wird automatisch die Netzwerkschnittstelle richtig konfigurieren und sollte als bevorzugte Methode verwendet werden. Statische Konfiguration erfordert die manuelle Eingabe von Netzwerkinformationen.

Anmerkung: Geben Sie keine zufällig gewählten Netzwerkinformationen ein, da dies nicht funktionieren wird. Holen Sie sich die in Abschnitt 3.3.3 gezeigten Informationen von Ihrem Netzwerkadministrator oder Serviceprovider.


3.9.2.2.1. Netzwerkkonfiguration von IPv4 mittels DHCP

Falls ein DHCP-Server zur Verfügung steht, wählen Sie [ Yes ], um die Netzwerkschnittstelle automatisch einrichten zu lassen.

Abbildung 3-27. Auswählen der IPv4-Konfiguration über DHCP


3.9.2.2.2. Statische IPv4-Netzwerkkonfiguration

Statische Konfiguration der Netzwerkschnittstelle erfordert die die Eingabe einiger IPv4-Informationen.

Abbildung 3-28. Statische IPv4-Konfiguration

  • IP-Adresse - Die manuell festgelegte IPv4-Adresse, welche diesem Computer zugewiesen werden soll. Diese Adresse muss eindeutig sein und darf von keinem anderen Gerät im lokalen Netzwerk bereits verwendet werden.

  • Subnetzmaske - Die Subnetzmaske, die im lokalen Netzwerk Verwendung findet. Typischerweise ist dies 255.255.255.0.

  • Defaultrouter - Die IP-Adresse des Defaultrouters in diesem Netzwerk. Normalerweise ist das die Adresse des Routers oder einer anderen Netzwerkkomponente, die das lokale Netzwerk mit dem Internet verbindet. Auch bekannt als das Default Gateway.


3.9.2.3. Konfiguration des IPv6-Netzwerks

IPv6 ist eine neuere Methode der Netzwerkkonfiguration. Falls IPv6 verfügbar ist und verwendet werden soll, wählen Sie [ Yes ] aus.

Abbildung 3-29. Auswahl von IPv6

IPv6 besitzt ebenfalls zwei Arten der Konfiguration. SLAAC, oder StateLess Address AutoConfiguration, wird die Netzwerkschnittstelle automatisch richtig konfigurieren. Statische Konfiguration verlangt die manuelle Eingabe von Netzwerkinformationen.


3.9.2.3.1. IPv6 Stateless Address Autoconfiguration

SLAAC erlaubt es einer IPv6-Netzwerkkomponente, die Information zur automatischen Konfiguration von einem lokalen Router abzufragen. Lesen Sie RFC4862 für weitere Informationen.

Abbildung 3-30. Auswahl der IPv6 SLAAC-Konfiguration


3.9.2.3.2. Statische IPv6-Netzwerkkonfiguration

Statische Konfiguration der Netzwerkschnittstelle benötigt die Eingabe von IPv6-Konfigurationsinformationen.

Abbildung 3-31. Statische IPv6-Konfiguration

  • IPv6-Adresse - The manuell zugewiesene IP-Adresse, welche dem Computer zugeteilt werden soll. Diese Adresse muss eindeutig sein und nicht bereits von einer anderen Netzwerkkomponente im lokalen Netzwerk verwendet werden.

  • Defaultrouter - Die IPv6-Adresse des Defaultrouters in diesem Netzwerk. Normalerweise ist dies die Adresse des Routers oder einer anderen Netzwerkkomponente, welche das lokale Netz mit dem Internet verbindet. Auch bekannt als Default Gateway.


3.9.2.4. DNS-Konfiguration

Der Domain Name System (oder auch DNS) Auflöser wandelt Hostnamen von und zu Netzwerkadressen um. Falls DHCP oder SLAAC verwendet wurde, um die Netzwerkschnittstelle zu konfigurieren, ist die Konfiguration für den Auflöser möglicherweise bereits vorhanden. Andernfalls geben Sie den lokalen Netzwerkdomänennamen in das Suchfeld ein. DNS #1 und DNS #2 sind die IP-Adressen der lokalen DNS-Server. Zumindest ein DNS-Server wird benötigt.

Abbildung 3-32. DNS-Konfiguration


3.9.3. Setzen der Zeitzone

Das Setzen der Zeitzone für Ihre Maschine erlaubt es, diese auf regionale Zeitveränderungen hin anzupassen und um andere zeitzonenbezogene Funktionen richtig durchzuführen.

Das hier Beispiel gezeigte Beispiel bezieht sich auf einen Rechner in der östlichen Zeitzone der Vereinigten Staaten. Ihre Auswahl wird von Ihrer geographischen Position davon abweichen.

Abbildung 3-33. Lokale oder UTC-Zeit

Wählen Sie [ Yes ] oder [ No ], abhängig davon, wie die Rechneruhr konfiguriert ist und drücken Sie dann Enter. Wenn Sie nicht wissen, ob Ihr System UTC oder lokale Zeit verwendet, wählen Sie [ No ], um die am häufigsten verwendete lokale Zeit zu setzen.

Abbildung 3-34. Das Gebiet auswählen

Das passende Gebiet wird durch die Pfeiltasten und das anschliessende druücken von Enter gewählt.

Abbildung 3-35. Das Land auswählen

Wählen Sie das zutreffende Land mit den Pfeiltasten und durch anschliessendes drücken von Enter aus.

Abbildung 3-36. Wählen einer Zeitzone

Die passende Zeitzone wird durch die Pfeiltasten und anschliessendes drücken von Enter ausgewählt.

Abbildung 3-37. Bestätigen der Zeitzone

Bestätigen Sie, dass die Abkürzung für die Zeitzone richtig ist. Wenn Ihnen diese richtig erscheint, drücken Sie Enter, um mit dem Rest der Konfiguration nach der Installation fortzufahren.


3.9.4. Zu aktivierende Dienste auswählen

Zusätzliche Systemdienste, die zur Startzeit aktiviert werden sollen, können eingeschaltet werden. All diese Dienste sind optional.

Abbildung 3-38. Auswahl zusätzlicher Dienste

Zusätzliche Dienste

  • sshd - Secure Shell (SSH)-Dienst für sicheren Fernzugriff.

  • moused - Sorgt für Mausunterstützung innerhalb der Systemkonsole.

  • ntpd - Network Time Protocol (NTP)-Dienst zur automatischen Uhrzeitsynchronisation.

  • powerd - Systemleistungskontrollwerkzeug zur Leistungsregelung und für Stromsparfunktionen.


3.9.5. Absturzaufzeichnung aktivieren

bsdinstall wird Sie fragen, ob die Absturzaufzeichnung auf dem Zielsystem aktiviert werden soll. Die Aktivierung von Absturzaufzeichnungen kann sehr nützlich sein, um Systemfehler aufzuspüren, deswegen wird Anwendern empfohlen, diese so oft wie möglich einzusetzen. Wählen Sie [ Yes ], um Absturzaufzeichnungen zu aktivieren oder [ No ], um ohne die Aufzeichnung von Abstürzen fortzufahren.

Abbildung 3-39. Aktivierung der Absturzaufzeichnung


3.9.6. Benutzer hinzufügen

Das hinzufügen von mindestens einem Benutzer während der Installaton erlaubt das Benutzen des Systems ohne als root-Benutzer angemeldet zu sein. Wenn man als root angemeldet ist, gibt es so gut wie keine Beschränkungen oder Schutz vor dem, was man tun kann. Anmeldenals normaler Benutzer ist daher sicherer und bietet mehr Schutz.

Wählen Sie [ Yes ], um neue Benutzer hinzuzufügen.

Abbildung 3-40. Benutzerkonten hinzufügen

Geben Sie die nötigen Informationen für den Benutzer ein, der dem System hinzugefügt werden soll.

Abbildung 3-41. Benutzerinformationen eingeben

Benutzerinformationen

  • Username - Der Name des Benutzers, den man zur Anmeldung eingeben muss. Typischerweise der erste Buchstabe des Vornamens, gefolgt vom Nachnamen.

  • Full name - Der volle Name des Benutzers.

  • Uid - User ID. Normalerweise wird dieses Feld leer gelassen, so dass das System einen Wert vergibt.

  • Login group - Die Benutzergruppe. Normalerweise bleibt dieses Feld leer, um die Standardgruppe zu akzeptieren.

  • Invite user into other groups? - Zusätzliche Gruppen zu denen der Benutzer als Mitglied hinzugefügt werden soll.

  • Login class - In der Regel bleibt dieses Feld leer.

  • Shell - Die interaktive Shell für diesen Benutzer. In diesem Beispiel wurde csh(1) ausgewält.

  • Home directory - Das Heimatverzeichnis des Benutzers. Die Vorgabe ist für gewöhnlich richtig.

  • Home directory permissions - Zugriffsrechte auf das Heimatverzeichnis des Benutzers. Die Vorgabe ist normalerweise die passende.

  • Use password-based authentication? Normalerweise "yes".

  • Use an empty password? - Normalerweise "no".

  • Use a random password? - Normalerweise "no".

  • Enter password - Das Passwort f¨r diesem Benutzer. Eingegebene Zeichen werden nicht am Bildschirm angezeigt.

  • Enter password again - Das Passwort muss zur Überprüfung erneut eingegeben werden.

  • Lock out the account after creation? - Normalerweise "no".

Nachdem alles eingegeben wurde, wird eine Zusammenfassung angezeigt und das System fragt Sie, dies so korrekt ist. Falls ein Eingabefehler gemacht wurde, geben Sie no ein und versuchen es erneut. Falls alles in Ordnung ist, drücken Sie yes, um den neuen Benutzer anzulegen.

Abbildung 3-42. Verlassen der Benutzer- und Gruppenverwaltung

Falls es mehr Benutzer hinzuzufügen gibt, beantworten Sie die Frage "Add another user?" mit yes. Geben Sie no ein, wird das hinzufügen von Benutzern beendet und die Installation fortgesetzt.

Für weitere Informationen zum hinzufügen von Benutzern und deren Verwaltung, lesen Sie Kapitel 14.


3.9.7. Letzte Konfigurationsschritte

Nachdem alles installiert und konfiguriert wurde, bekommen Sie noch eine letzte Chance, um Einstellungen zu verändern.

Abbildung 3-43. Letzte Schritte der Konfiguration

Verwenden Sie dieses Menü, um noch letzte Änderungen oder zusätzliche Konfigurationen vor dem Abschliessen der Installation zu tätigen.

Letzte Konfigurationsoptionen

Nachdem die lezten Konfigurationsschritte beendet sind, wählen Sie Exit, um die Installation zu verlassen.

Abbildung 3-44. Manuelle Konfiguration

bsdinstall wird nach zusätzlichen Konfigurationen, die noch zu tätigen sind, fragen, bevor in das neue System gebootet wird. Wählen Sie [ Yes ], um in eine Shell innerhalb des neuen Systems zu wechseln oder [ No ], um mit dem letzten Schritt der Installation zu beginnen.

Abbildung 3-45. Die Installation vervollständigen

Wenn weitere Konfigurationen oder besondere Einstellungen benötigt werden, kann durch auswählen von [ Live CD ] das Installationsmedium im Live CD Modus gestartet werden.

Wenn die Installation vollständig ist, wählen Sie [ Reboot ], um den Computer neu zu starten und das neu installierte FreeBSD-System zu booten. Vergessen Sie nicht, die FreeBSD Installations-CD, -DVD oder den USB-Stick zu entfernen, oder der Computer wird erneut davon starten.


3.9.8. FreeBSD starten und herunterfahren

3.9.8.1. FreeBSD/i386 starten

Wenn FreeBSD startet, werden viele Informationsmeldungen ausgegeben. Die meisten davon werden aus dem Bildschirm verschwinden, das ist normal. Nachdem das System den Startvorgang abgeschlossen hat, wird eine Anmeldeaufforderungen angezeigt. Um Nachrichten, die aus dem Bildschirm gelaufen sind, zu sehen, aktivieren Sie durch drücken von Scroll-Lock den scroll-back buffer. Die Tasten PgUp, PgDn und die Pfeiltasten dienen zur Navigation durch die Nachrichten. Durch erneutes drücken von Scroll-Lock wird der Bildschirm wieder entsperrt und kehrt zur normalen Anzeige zurück.

Am login:-Bildschirm geben Sie den Benutzernamen ein, den Sie während der Installation angelegt haben, in diesem Fall ist das asample. Vermeiden Sie die Anmeldung als root, ausser wenn es wirklich notwendig ist.

Der oben beschriebene scroll-back buffer ist in der Grösse beschränkt, somit werden vielleicht nicht alle Nachrichten sichtbar sein. Nach dem Anmelden können die meisten davon aus der Kommandozeile aus durch eingabe von dmesg | less betrachtet werden. Durch drücken von q kehren Sie wieder zur Kommandozeile zurück.

Typische Startmeldungen (Versionsinformationen wurden hier weggelassen):

Copyright (c) 1992-2011 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.

    root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
CPU: Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz (3007.77-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x10676  Family = 6  Model = 17  Stepping = 6
  Features=0x783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2>
  Features2=0x209<SSE3,MON,SSSE3>
  AMD Features=0x20100800<SYSCALL,NX,LM>
  AMD Features2=0x1<LAHF>
real memory  = 536805376 (511 MB)
avail memory = 491819008 (469 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <VBOX   VBOXAPIC>
ioapic0: Changing APIC ID to 1
ioapic0 <Version 1.1> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <VBOX VBOXXSDT> on motherboard
acpi0: Power Button (fixed)
acpi0: Sleep Button (fixed)
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <32-bit timer at 3.579545MHz> port 0x4008-0x400b on acpi0
cpu0: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX4 UDMA33 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xd000-0xd00f at device 1.1 on pci0
ata0: <ATA channel 0> on atapci0
ata1: <ATA channel 1> on atapci0
vgapci0: <VGA-compatible display> mem 0xe0000000-0xe0ffffff irq 18 at device 2.0 on pci0
em0: <Intel(R) PRO/1000 Legacy Network Connection 1.0.3> port 0xd010-0xd017 mem 0xf0000000-0xf001ffff irq 19 at device 3.0 on pci0
em0: Ethernet address: 08:00:27:9f:e0:92
pci0: <base peripheral> at device 4.0 (no driver attached)
pcm0: <Intel ICH (82801AA)> port 0xd100-0xd1ff,0xd200-0xd23f irq 21 at device 5.0 on pci0
pcm0: <SigmaTel STAC9700/83/84 AC97 Codec>
ohci0: <OHCI (generic) USB controller> mem 0xf0804000-0xf0804fff irq 22 at device 6.0 on pci0
usbus0: <OHCI (generic) USB controller> on ohci0
pci0: <bridge> at device 7.0 (no driver attached)
acpi_acad0: <AC Adapter> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model IntelliMouse Explorer, device ID 4
attimer0: <AT timer> port 0x40-0x43,0x50-0x53 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
atrtc0: <AT realtime clock> at port 0x70 irq 8 on isa0
Event timer "RTC" frequency 32768 Hz quality 0
ppc0: cannot reserve I/O port range
Timecounters tick every 10.000 msec
pcm0: measured ac97 link rate at 485193 Hz
em0: link state changed to UP
usbus0: 12Mbps Full Speed USB v1.0
ugen0.1: <Apple> at usbus0
uhub0: <Apple OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
cd0 at ata1 bus 0 scbus1 target 0 lun 0
cd0: <VBOX CD-ROM 1.0> Removable CD-ROM SCSI-0 device
cd0: 33.300MB/s transfers (UDMA2, ATAPI 12bytes, PIO 65534bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present
ada0 at ata0 bus 0 scbus0 target 0 lun 0
ada0: <VBOX HARDDISK 1.0> ATA-6 device
ada0: 33.300MB/s transfers (UDMA2, PIO 65536bytes)
ada0: 12546MB (25694208 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad0
Timecounter "TSC" frequency 3007772192 Hz quality 800
Root mount waiting for: usbus0
uhub0: 8 ports with 8 removable, self powered
Trying to mount root from ufs:/dev/ada0p2 [rw]...
Setting hostuuid: 1848d7bf-e6a4-4ed4-b782-bd3f1685d551.
Setting hostid: 0xa03479b2.
Entropy harvesting: interrupts ethernet point_to_point kickstart.
Starting file system checks:
/dev/ada0p2: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/ada0p2: clean, 2620402 free (714 frags, 327461 blocks, 0.0% fragmentation)
Mounting local file systems:.
vboxguest0 port 0xd020-0xd03f mem 0xf0400000-0xf07fffff,0xf0800000-0xf0803fff irq 20 at device 4.0 on pci0
vboxguest: loaded successfully
Setting hostname: machine3.example.com.
Starting Network: lo0 em0.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 08:00:27:9f:e0:92
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
Starting devd.
Starting Network: usbus0.
DHCPREQUEST on em0 to 255.255.255.255 port 67
DHCPACK from 10.0.2.2
bound to 192.168.1.142 -- renewal in 43200 seconds.
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
add net fe80::: gateway ::1
add net ff02::: gateway ::1
ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib
32-bit compatibility ldconfig path: /usr/lib32
Creating and/or trimming log files.
Starting syslogd.
No core dumps found.
Clearing /tmp (X related).
Updating motd:.
Configuring syscons: blanktime.
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com
The key's randomart image is:
+--[RSA1 1024]----+
|    o..          |
|   o . .         |
|  .   o          |
|       o         |
|    o   S        |
|   + + o         |
|o . + *          |
|o+ ..+ .         |
|==o..o+E         |
+-----------------+
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com
The key's randomart image is:
+--[ DSA 1024]----+
|       ..     . .|
|      o  .   . + |
|     . ..   . E .|
|    . .  o o . . |
|     +  S = .    |
|    +  . = o     |
|     +  . * .    |
|    . .  o .     |
|      .o. .      |
+-----------------+
Starting sshd.
Starting cron.
Starting background file system checks in 60 seconds.

Thu Oct  6 19:15:31 MDT 2011

FreeBSD/amd64 (machine3.example.com) (ttyv0)

login:

Das Generieren der RSA- und DSA-Schlüssel kann auf langsameren Rechnern einige Zeit benötigen. Dies geschieht nur während der Startphase einer neuen Installation und auch nur, wenn sshd zum automatischen Start gesetzt ist. Die nachfolgenden Startvorgänge werden schneller sein.

FreeBSD installiert standardmässig keine graphische Umgebung, jedoch stehen viele zur Verfügung. Lesen Sie Kapitel 6 für weitere Informationen.


3.9.9. FreeBSD herunterfahren

Das korrekte herunterfahren eines FreeBSD-Computers hilft, beugt dem Datenverlust vor und schützt sogar die Hardware vor Schäden. Schalten Sie nicht einfach den Strom ab. Wenn der Benutzer ein Mitglied der wheel-Gruppe ist, können Sie zum Superuser durch die Eingabe von su und der anschliessenden Eingabe des Passworts von root werden. Andernfalls melden Sie sich mit root an und verwenden den Befehl shutdown -p now. Das System wird jetzt sauber heruntergefahren und den Rechner ausschalten.

Die Ctrl+Alt+Del Kombination kann verwendet werden, um das System neu zu starten, jedoch wird dies nicht während des normalen Betriebs empfohlen.


3.10. Fehlerbehebung

Der folgende Abschnitt behandelt einfache Fehlerbehebungen für die Installation, wie beispielsweise häufig auftretende Fehler, die von Anwendern berichtet wurden.


3.10.1. Was man tun sollte, wenn etwas schiefgeht

Wegen verschiedener Limitierungen der PC-Architektur ist es unmöglich dass die Geräteerkennung 100% verlässlich funktioniert. Jedoch gibt es ein paar Dinge, die man tun kann, wenn es fehlschlägt.

Überprüfen Sie das Dokument Hardware Notes nach Ihrer Version von FreeBSD, um sicher zu stellen, dass Ihre Hardware auch unterstützt wird.

Wenn Ihre Hardware unterstützt wird und Sie immer noch Abstürze oder andere Probleme erleben, müssen Sie einen eigenen Kernel bauen. Das wird Ihnen erlauben, Unterstützung für Geräte, die im GENERIC-Kernel nicht vorhanden sind, hinzuzufügen. Der Kernel auf den Bootmedien ist mit der Annahme konfiguriert, dass die Hardwaregeräte sich in Ihren Fabrikeinstellungen in Bezug auf IRQs, I/O-Adressen und DMA-Kanälen befinden. Wenn Ihre Hardware neu konfiguriert wurde, werden Sie möglicherweise die Konfiguration des Kernels bearbeiten und diesen neu erstellen müssen, um FreeBSD mitzuteilen, wo es gewisse Dinge zu finden hat.

Es ist auch möglich, dass ein fehlerhaft erkanntes Gerät die Erkennung eines vorhandenen, späteren Geräts ebenfalls fehlschlagen lässt. In diesem Fall sollte die Erkennung des fehlerhaften Gerätetreibers deaktiviert werden.

Anmerkung: Manche Installationsprobleme können Aktualisierung der Firmware auf verschiedenen Hardwarekomponenten verhindert oder verringert werden, meistens am Mainboard. Mit Mainboard-Firmware ist für gewöhnlich das BIOS gemeint. Die meisten Mainboard- und Computerhersteller haben eine Webseite mit Aktualisierungen und Informationen zur Durchführung.

Hersteller raten meist von einer Aktualisierung des Mainboard-BIOS ab, ausser es gibt einen guten Grund dafür, wie beispielsweise eine kritische Aktualisierung. Der Aktualisierungsvorgang kann schiefgehen, was das BIOS unvollständig macht und den Computer nicht mehr starten lässt.


3.10.2. Fragen und Antworten zur Fehlerbehebung

3.10.2.1. Mein System hängt während die Geräteerkennung beim Starten durchgeführt wird oder verhält sich merkwürdig während der Installation.

3.10.2.1. Mein System hängt während die Geräteerkennung beim Starten durchgeführt wird oder verhält sich merkwürdig während der Installation.

FreeBSD macht starken Gebrauch vom ACPI-Dienst des Systems auf den i386-, amd64-, and ia64-Platformen, um den System bei der Konfiguration während des Startvorgangs zu helfen. Leider existieren immer noch Fehler im ACPI-Treiber, in den Mainboards und der BIOS-Firmware. ACPI kann durch setzen der Einstellung hint.acpi.0.disabled im dritten Teil des Bootloaders deaktiviert werden:

set hint.acpi.0.disabled="1"

Dies wird nach jedem Neustart des Systems wieder zurückgesetzt, also ist es notwendig, die Zeile hint.acpi.0.disabled="1" zu der Datei /boot/loader.conf hinzuzufügen. Weitere Informationen über den Bootloader lassen sich in Abschnitt 13.1 nachlesen.


Kapitel 4. Grundlagen des UNIX Betriebssystems

Umgeschrieben von Chris Shumway. Übersetzt von Uwe Pierau.

4.1. Übersicht

Das folgende Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden Material gilt auch für jedes andere UNIX-artige System. Falls Sie mit dem Material schon vertraut sind, können Sie dieses Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall aufmerksam lesen.

Dieser Abschnitt behandelt die folgenden Themen:

  • virtuelle Konsolen,

  • Zugriffsrechte unter UNIX sowie Datei-Flags unter FreeBSD,

  • Zugriffskontrolllisten für Dateisysteme,

  • die Verzeichnisstruktur von FreeBSD,

  • Organisation von Dateisystemen unter FreeBSD,

  • Ein- und Abhängen von Dateisystemen,

  • Prozesse, Dämonen und Signale,

  • Shells und die Login-Umgebung,

  • Texteditoren,

  • Geräte und Gerätedateien,

  • Binärformate unter FreeBSD und

  • wie Sie in den Manualpages nach weiteren Informationen suchen können.


4.2. Virtuelle Konsolen und Terminals

Sie können FreeBSD mit einem Terminal benutzen, der nur Text darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen Ihnen alle Möglichkeiten eines UNIX Betriebssystems zur Verfügung. Dieser Abschnitt beschreibt was Terminals und Konsolen sind und wie sie unter FreeBSD eingesetzt werden.


4.2.1. Die Konsole

Wenn Ihr FreeBSD-System ohne eine graphische Benutzeroberfläche startet, wird am Ende des Systemstarts, nachdem die Startskripten gelaufen sind, ein Anmeldeprompt ausgegeben. Die letzten Startmeldungen sollten ähnlich wie die Folgenden aussehen:

Additional ABI support:.
Local package initialization:.
Additional TCP options:.

Fri Sep 20 13:01:06 EEST 2002

FreeBSD/i386 (pc3.example.org) (ttyv0)

login:

Beachten Sie die letzten beiden Zeilen der Ausgabe, die vorletzte lautet:

FreeBSD/i386 (pc3.example.org) (ttyv0)

Diese Zeile enthält einige Informationen über das gerade gestartete System. Die Ausgabe stammt von der FreeBSD-Konsole einer Maschine mit einem Intel oder Intel-kompatiblen Prozessor der x86-Architektur[1]. Der Name des Systems (jedes UNIX System besitzt einen Namen) ist pc3.example.org und die Ausgabe stammt von der Systemkonsole, dem Terminal ttyv0.

Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe eines Benutzernamens:

login:

Der Anmeldevorgang wird im nächsten Abschnitt erläutert.


4.2.2. Der Anmeldevorgang

FreeBSD ist ein Mehrbenutzersystem, das Multitasking unterstützt. Das heißt mehrere Benutzer können gleichzeitig viele Programme auf einem System laufen lassen.

Jedes Mehrbenutzersystem muss die Benutzer voneinander unterscheiden können. Bei FreeBSD und allen anderen UNIX-artigen Betriebssystemen wird dies dadurch erreicht, dass sich die Benutzer anmelden müssen, bevor sie Programme laufen lassen können. Jeder Benutzer besitzt einen eindeutigen Namen (den Account) und ein dazugehörendes Passwort, die beide bei der Anmeldung abgefragt werden.

Nachdem FreeBSD gestartet ist und die Startskripten[2], gelaufen sind, erscheint eine Aufforderung zur Eingabe des Benutzernamens:

login:

Wenn Ihr Benutzername beispielsweise john ist, geben Sie jetzt john gefolgt von Enter ein. Sie sollten dann eine Aufforderung zur Eingabe des Passworts erhalten:

login: john
Password:

Geben Sie jetzt das Passwort von john gefolgt von Enter ein. Das Passwort wird aus Sicherheitsgründen nicht auf dem Bildschirm angezeigt.

Wenn Sie das richtige Passwort eingegeben haben, sind Sie am System angemeldet und können nun alle verfügbaren Kommandos absetzen.

Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen (message of today) gefolgt von einer Eingabeaufforderung (dem Zeichen #, $ oder %) gesehen haben.


4.2.3. Virtuelle Konsolen

Da FreeBSD mehrere Programme gleichzeitig laufen lassen kann, ist eine einzige Konsole, an der Kommandos abgesetzt werden können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die mehrere Konsolen zur Verfügung stellen.

Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie einstellen. Zwischen den einzelnen Konsolen können Sie mit speziellen Tastenkombinationen wechseln. Jede Konsole verfügt über einen eigenen Ausgabekanal und FreeBSD ordnet die Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn Sie zwischen den Konsolen wechseln.

Zum Umschalten der Konsolen stellt FreeBSD spezielle Tastenkombinationen bereit[3]. Benutzen Sie Alt-F1, Alt-F2 bis Alt-F8, um zwischen den verschiedenen Konsolen umzuschalten.

Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole aus. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole gewechselt haben, laufen die dort abgesetzten Kommandos weiter.


4.2.4. /etc/ttys

In der Voreinstellung stehen unter FreeBSD acht virtuelle Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen oder verringern können. Die Anzahl und Art der Konsolen wird in /etc/ttys eingestellt.

Jede Zeile in /etc/ttys, die nicht mit # anfängt, konfiguriert einen Terminal oder eine virtuelle Konsole. In der Voreinstellung werden in dieser Datei neun virtuelle Konsolen definiert, von denen acht aktiviert sind. Die Konsolen sind in den Zeilen, die mit ttyv beginnen, definiert:

# name  getty                           type    status          comments
#
ttyv0   "/usr/libexec/getty Pc"         cons25  on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv2   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv3   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv4   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv5   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv6   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv7   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

Die Hilfeseite ttys(5) enthält eine ausführliche Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum Konfigurieren der virtuellen Konsolen benutzen können.


4.2.5. Die Konsole im Single-User-Modus

Eine eingehende Beschreibung des Single-User-Modus finden Sie in Abschnitt 13.6.2. Im Single-User-Modus steht Ihnen nur eine Konsole zur Verfügung. Die Definition dieser Konsole befindet sich ebenfalls in /etc/ttys. Suchen Sie nach einer Zeile, die mit console beginnt:

# name  getty                           type    status          comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown off secure

Anmerkung: In der Zeile, die mit console beginnt, können Sie secure durch insecure ersetzen. Wenn Sie danach in den Single-User-Modus booten, verlangt das System ebenfalls die Eingabe des root-Passworts.

Setzen Sie insecure nicht leichtfertig ein. Wenn Sie das Passwort von root vergessen, wird es schwierig, in den Single-User-Modus zu gelangen, wenn Sie den FreeBSD-Boot-Prozess nicht genau verstehen.


4.2.6. Den Videomodus der Konsole anpassen

Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden Modus eingestellt werden, der von Ihrer Grafikkarte und Ihrem Monitor unterstützt wird (beispielsweise 1024x768 oder 1280x1024). Wollen Sie eine andere Einstellung verwenden, müssen Sie Ihren Kernel neu kompilieren, nachdem Sie die zwei folgenden Zeilen in Ihre Kernelkonfigurationsdatei aufgenommen haben:

OPTIONS VESA
options SC_PIXEL_MODE

Nachdem Sie den Kernel mit diesen zwei Optionen neu kompiliert haben, bestimmen Sie die möglichen Videomodi mit dem Werkzeug vidcontrol(1). Um beispielsweise einer Liste aller unterstützten Modi zu erhalten, verwenden Sie den folgenden Befehl:

# vidcontrol -i mode

Als Ergebnis erhalten Sie eine Liste aller Videomodi, die von Ihrer Hardware unterstützt werden. Sie wählen einen neuen Modus aus, indem Sie den entsprechenden Wert (wiederum als Benutzer root) an vidcontrol(1) übergeben:

# vidcontrol MODE_279

Um diese Einstellung dauerhaft zu speichern, müssen Sie die folgende Zeile in die Datei /etc/rc.conf aufnehmen:

allscreens_flags="MODE_279"

4.3. Zugriffsrechte

FreeBSD, das ein direkter Abkömmling von BSD UNIX ist, stützt sich auf mehrere Grundkonzepte von UNIX Systemen. Das erste und ausgeprägteste: FreeBSD ist ein Mehrbenutzer-Betriebssystem. Das System ermöglicht, dass mehrere Benutzer gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU-Zeit unter den Benutzern.

Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus:

Wert Zugriffsrechte Auflistung im Verzeichnis
0 Kein Lesen, Kein Schreiben, Kein Ausführen ---
1 Kein Lesen, Kein Schreiben, Ausführen --x
2 Kein Lesen, Schreiben, Kein Ausführen -w-
3 Kein Lesen, Schreiben, Ausführen -wx
4 Lesen, Kein Schreiben, Kein Ausführen r--
5 Lesen, Kein Schreiben, Ausführen r-x
6 Lesen, Schreiben, Kein Ausführen rw-
7 Lesen, Schreiben, Ausführen rwx

Sie können -l auf der Kommandozeile von ls(1) angeben, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die Ausgabe von ls -l könnte wie folgt aussehen:

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
...

Die erste Spalte der Ausgabe enthält die Zugriffsrechte:

-rw-r--r--

Das erste Zeichen von links ist ein Symbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein zeichenorientiertes Gerät, ein Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel zeigt - eine normale Datei an. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, dass das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert.

Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware-Geräten? FreeBSD behandelt die meisten Hardware-Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /dev gespeichert.

Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis zum Beispiel mit cd gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu.

Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in einem Verzeichnis zu löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein.

Es gibt noch mehr Rechte, aber die werden vor allem in speziellen Umständen benutzt, wie zum Beispiel bei SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit. Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden, finden Sie in chmod(1).


4.3.1. Symbolische Zugriffsrechte

Beigesteuert von Tom Rhodes.

Die Zugriffsrechte lassen sich auch über Symbole anstelle von oktalen Werten festlegen. Symbolische Zugriffsrechte werden in der Reihenfolge Wer, Aktion und Berechtigung angegeben. Die folgenden Symbole stehen zur Auswahl:

Option Symbol Bedeutung
Wer u Benutzer (user)
Wer g Gruppe (group)
Wer o Andere (other)
Wer a Alle
Aktion + Berechtigungen hinzufügen
Aktion - Berechtigungen entziehen
Aktion = Berechtigungen explizit setzen
Berechtigung r lesen (read)
Berechtigung w schreiben (write)
Berechtigung x ausführen (execute)
Berechtigung t Sticky-Bit
Berechtigung s Set-UID oder Set-GID

Symbolische Zugriffsrechte werden wie die numerischen mit dem Kommando chmod(1) vergeben. Wenn Sie beispielsweise allen anderen Benutzern den Zugriff auf die Datei FILE verbieten wollen, benutzen Sie den nachstehenden Befehl:

% chmod go= FILE

Wenn Sie mehr als eine Änderung der Rechte einer Datei vornehmen wollen, können Sie eine durch Kommata getrennte Liste der Rechte angeben. Das folgende Beispiel entzieht der Gruppe und der Welt (den anderen) die Schreibberechtigung auf die Datei FILE und fügt dann für alle Ausführungsrechte hinzu:

% chmod go-w,a+x FILE

4.3.2. FreeBSD Datei-Flags

Beigetragen von Tom Rhodes.

Zusätzlich zu den vorhin diskutierten Zugriffsrechten unterstützt FreeBSD auch die sogenannten “Datei-Flags”. Diese erhöhen die Sicherheit Ihres Systems, indem sie eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden allerdings nicht unterstützt.

Diese verbesserte Sicherheit führt dazu, dass manche Dateien nicht einmal von root gelöscht oder bearbeitet werden können.

Datei-Flags können über chflags(1) gesetzt oder gelöscht werden. Um beispielsweise die Datei file1 mit dem “unlöschbar”-Flag zu sichern, geben Sie folgenden Befehl ein:

# chflags sunlink file1

Um dieses Flag wieder zu löschen, geben Sie den Befehl erneut ein. Allerdings setzen Sie ein “no” vor sunlink:

# chflags nosunlink file1

Um die Flags dieser Datei anzuzeigen, verwenden Sie ls(1) zusammen mit der Option -lo:

# ls -lo file1

Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden:

-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

Viele Flags können nur von root gesetzt oder gelöscht werden. Andere wiederum können auch vom Eigentümer der Datei gesetzt werden. Weitere Informationen zu Datei-Flags finden sich in den Manualpages chflags(1) und chflags(2).


4.3.3. Die Berechtigungen setuid, setgid, und sticky

Beigetragen von Tom Rhodes.

Anders als die Berechtigungen, die bereits angesprochen wurden, existieren drei weitere Einstellungen, über die alle Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen setuid, setgid und sticky.

Diese Einstellungen sind wichtig für manche UNIX-Operationen, da sie Funktionalitäten zur Verfügung stellen, die normalerweise nicht an gewöhnliche Anwender vergeben wird. Um diese zu verstehen, muss der Unterschied zwischen der realen und der effektiven Benutzer-ID erwähnt werden.

Die reale Benutzer-ID ist die UID, welche den Prozess besitzt oder gestartet hat. Die effektive UID ist diejenige, als die der Prozess läuft. Beispielsweise wird passwd(1) mit der realen ID des Benutzers ausgeführt, der sein Passwort ändert. Um jedoch die Passwortdatenbank zu bearbeiten, wird es effektiv als root-Benutzer ausgeführt. Das ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne einen “Permission Denied”-Fehler angezeigt zu bekommen.

Anmerkung: Die nosuid mount(8)-Option wird dafür sorgen, dass diese Anwendungen stillschweigend scheitern. Genauer gesagt, sie werden nicht ausgeführt und der Anwender wird darüber auch nicht informiert. Auf diese Option kann man sich nicht vollständig verlassen, da ein nosuid-Wrapper in der Lage wäre, dies zu umgehen, wie in der mount(8) Manualpage zu lesen ist.

Die setuid-Berechtigung kann durch das Voranstellen bei einer Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im folgenden Beispiel gezeigt wird:

# chmod 4755 suidexample.sh

Die Berechtigungen auf der suidexample.sh-Datei sollten jetzt wie folgt aussehen:

-rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

In dem Beispiel sollte auffallen, dass ein s jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen mit erhöhten Berechtigungen zu laufen, wie z.B. passwd.

Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals. Starten Sie auf einem den passwd-Prozess als normaler Benutzer. Während es auf die Passworteingabe wartet, überprüfen Sie die Prozesstabelle und sehen Sie sich die Informationen des passwd-Kommandos an.

Im Terminal A:

Changing local password for trhodes
Old Password:

Im Terminal B:

# ps aux | grep passwd
trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
  	 root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

Wie oben erwähnt, wird passwd von einem normalen Benutzer ausgeführt, benutzt aber die effektive UID von root.

Die setgid-Berechtigung führt die gleiche Aktion wie die setuid-Berechtigung durch, allerdings verändert sie die Gruppenberechtigungen. Wenn eine Anwendung oder ein Werkzeug mit dieser Berechtigung ausgeführt wird, erhält es die Berechtigungen basierend auf der Gruppe, welche die Datei besitzt und nicht die des Benutzers, der den Prozess gestartet hat.

Um die setgid-Berechtigung auf einer Datei zu setzen, geben Sie dem chmod-Befehl eine führende Zwei (2) mit, wie im folgenden gezeigt:

# chmod 2755 sgidexample.sh

Die neue Einstellung kann wie zuvor betrachtet werden. Beachten Sie, dass das s sich jetzt in dem Feld befindet, das für die Berechtigungen der Gruppe bestimmt ist:

-rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

Anmerkung: Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript um eine ausführbare Datei handelt, wird es nicht mit einer anderen EUID oder effektiven Benutzer-ID ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf setuid(2)-Systemaufrufe erhalten.



Diese beiden ersten angesprochenen Spezialberechtigungen (die setuid und setgid Berechtigungs-Bits) können die Systemsicherheit verringern, da sie erhöhte Rechte ermöglichen. Es gibt noch ein drittes Berechtigungs-Bit, das die Sicherheit eines Systems erhöhen kann: das sticky bit.

Das sticky bit erlaubt, wenn es auf ein Verzeichnis angewendet wird, nur dem Besitzer der Datei diese Dateien auch zu löschen. Dieses Recht ist nützlich, um die Löschung von Dateien in öffentlichen Verzeichnissen durch Benutzer, denen diese Dateien nicht gehören, zu verhindern, wie z.B. in /tmp. Um diese Berechtigung anzuwenden, stellen Sie der Berechtigung eine Eins (1) voran, beispielsweise so:

# chmod 1777 /tmp

Den Effekt können Sie sich ansehen, indem Sie das Kommando ls ausführen:

# ls -al / | grep tmp
drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

Das sticky bit kann anhand des t ganz am Ende der Berechtigungen abgelesen werden.


4.4. Verzeichnis-Strukturen

Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Konzept, das Sie verstehen sollten, ist das Root-Verzeichnis “/”. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das System in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte für Dateisysteme, die beim Wechsel in den Multiuser-Modus eingehängt werden.

Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses) eingehängt werden können. Dieser Vorgang wird in Abschnitt 4.5 ausführlich beschrieben. Standard-Mountpunkte sind /usr, /var, /tmp, /mnt sowie /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript rc(8) gemountet, wenn die zugehörigen Einträge nicht mit der Option noauto versehen sind. Weitere Informationen zu diesem Thema finden Sie im Abschnitt 4.6.1.

Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in hier(7). Als Beispiel sei eine kurze Übersicht über die am häufigsten verwendeten Verzeichnisse gegeben:

Verzeichnis Beschreibung
/ Wurzelverzeichnis des Dateisystems.
/bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb.
/boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden.
/boot/defaults/ Vorgaben für die Boot-Konfiguration, siehe loader.conf(5).
/dev/ Gerätedateien, siehe intro(4).
/etc/ Konfigurationsdateien und Skripten des Systems.
/etc/defaults/ Vorgaben für die System Konfigurationsdateien, siehe rc(8).
/etc/mail/ Konfigurationsdateien von MTAs wie sendmail(8).
/etc/namedb/ Konfigurationsdateien von named, siehe named(8).
/etc/periodic/ Täglich, wöchentlich oder monatlich ablaufende Skripte, die von cron(8) gestartet werden. Siehe periodic(8).
/etc/ppp/ Konfigurationsdateien von ppp, siehe ppp(8).
/mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird.
/proc/ Prozess Dateisystem, siehe procfs(5) und mount_procfs(8).
/rescue/ Statisch gelinkte Programme zur Wiederherstellung des Systems, lesen Sie dazu auch rescue(8).
/root/ Home Verzeichnis von root.
/sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind.
/tmp/ Temporäre Dateien, die für gewöhnlich bei einem Neustart des Systems verloren gehen. Häufig wird ein speicherbasiertes Dateisystem unter /tmp eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die tmpmfs-bezogenen Variablen von rc.conf(5) verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in mdmfs(8).
/usr/ Der Großteil der Benutzerprogramme und Anwendungen.
/usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen.
/usr/include/ Standard C include-Dateien.
/usr/lib/ Bibliotheken.
/usr/libdata/ Daten verschiedener Werkzeuge.
/usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden.
/usr/local/ Lokale Programme, Bibliotheken usw. Die Ports-Sammlung benutzt dieses Verzeichnis als Zielverzeichnis für zu installierende Anwendungen. Innerhalb von /usr/local sollte das von hier(7) beschriebene Layout für /usr benutzt werden. Das man Verzeichnis wird direkt unter /usr/local anstelle unter /usr/local/share angelegt. Die Dokumentation der Ports findet sich in share/doc/port.
/usr/obj/ Von der Architektur abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht.
/usr/ports/ Die FreeBSD-Ports-Sammlung (optional).
/usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden.
/usr/share/ Von der Architektur unabhängige Dateien.
/usr/src/ Quelldateien von BSD und/oder lokalen Ergänzungen.
/usr/X11R6/ Optionale X11R6-Programme und Bibliotheken.
/var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien. Manchmal wird ein speicherbasiertes Dateisystem unter /var eingehängt. Dieser Vorgang kann automatisiert werden, wenn Sie die varmfs-bezogenen Variablen von rc.conf(5) verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in /etc/fstab aufnehmen. Weitere Informationen finden Sie in mdmfs(8).
/var/log/ Verschiedene Logdateien des Systems.
/var/mail/ Postfächer der Benutzer.
/var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme.
/var/tmp/ Temporäre Dateien. Dateien in diesem Verzeichnis bleiben in der Regel auch bei einem Neustart des Systems erhalten, es sei denn, bei /var handelt es sich um ein speicherbasiertes Dateisystem.
/var/yp/ NIS maps.



4.5. Festplatten, Slices und Partitionen

FreeBSD identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: readme.txt und README.TXT bezeichnen daher zwei verschiedene Dateien. FreeBSD benutzt keine Dateiendungen wie .txt, um den Typ der Datei (ein Programm, ein Dokument oder andere Daten) zu bestimmen.

Dateien werden in Verzeichnissen gespeichert. In einem Verzeichnis können sich keine oder hunderte Dateien befinden. Ein Verzeichnis kann auch andere Verzeichnisse enthalten und so eine Hierarchie von Verzeichnissen aufbauen, die Ihnen die Ablage von Daten erleichtert.

In Dateinamen werden Verzeichnisse durch einen Schrägstrich (/, Slash) getrennt. Wenn das Verzeichnis foo ein Verzeichnis bar enthält, in dem sich die Datei readme.txt befindet, lautet der vollständige Name der Datei (oder der Pfad zur Datei) foo/bar/readme.txt.

Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt ein Wurzelverzeichnis (Root-Directory), das weitere Verzeichnisse enthalten kann.

Dieses Konzept kennen Sie vielleicht von anderen Betriebssystemen, aber es gibt einige Unterschiede: In MS-DOS werden Datei- und Verzeichnisnamen mit dem Zeichen \ getrennt, Mac OS® benutzt dazu das Zeichen :.

FreeBSD kennt keine Laufwerksbuchstaben und in Pfaden werden keine Bezeichnungen für Laufwerke benutzt. Die Pfadangabe c:/foo/bar/readme.txt gibt es in FreeBSD nicht.

Stattdessen wird ein Dateisystem als Wurzeldateisystem (root file system) ausgewählt. Das Wurzelverzeichnis dieses Dateisystems wird / genannt. Jedes andere Dateisystem wird unter dem Wurzeldateisystem eingehangen (mount). Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf derselben Platte zu liegen.

Betrachten wir drei Dateisysteme A, B und C. Jedes Dateisystem besitzt ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse enthält: A1, A2, B1, B2, C1 und C2.

Das Wurzeldateisystem soll A sein. Das Kommando ls zeigt darin die beiden Verzeichnisse A1 und A2 an. Der Verzeichnisbaum sieht wie folgt aus:

Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems eingehangen. Wir hängen nun das Dateisystem B in das Verzeichnis A1 ein. Das Wurzelverzeichnis von B ersetzt nun das Verzeichnis A1 und die Verzeichnisse des Dateisystems B werden sichtbar:

Jede Datei in den Verzeichnissen B1 oder B2 kann über den Pfad /A1/B1 oder /A1/B2 erreicht werden. Dateien aus dem Verzeichnis /A1 sind jetzt verborgen. Wenn das Dateisystem B wieder abgehangen wird (umount), erscheinen die verborgenen Dateien wieder.

Wenn das Dateisystem B unter dem Verzeichnis A2 eingehangen würde, sähe der Verzeichnisbaum so aus:

Die Dateien des Dateisystems B wären unter den Pfaden /A2/B1 und /A2/B2 erreichbar.

Dateisysteme können übereinander eingehangen werden. Der folgende Baum entsteht, wenn im letzten Beispiel das Dateisystem C in das Verzeichnis B1 des Dateisystems B eingehangen wird:

C könnte auch im Verzeichnis A1 eingehangen werden:

Der MS-DOS-Befehl join kann Ähnliches bewirken.

Normalerweise müssen Sie sich nicht mit Dateisystemen beschäftigen. Während der Installation werden die Dateisysteme und die Stellen, in der sie eingehangen werden, festgelegt. Dateisysteme müssen Sie erst wieder anlegen, wenn Sie eine neue Platte hinzufügen.

Sie können sogar mit nur einem großen Dateisystem auskommen. Dies hat mehrere Nachteile und einen Vorteil.

Vorteile mehrerer Dateisysteme

  • Die Dateisysteme können mit unterschiedlichen Optionen (mount options) eingehangen werden. Bei sorgfältiger Planung können Sie beispielsweise das Wurzeldateisystem nur lesbar einhängen. Damit schützen Sie sich vor dem unabsichtlichen Löschen oder Editieren kritischer Dateien. Von Benutzern beschreibbare Dateisysteme wie /home können Sie mit der Option nosuid einhängen, wenn sie von anderen Dateisystemen getrennt sind. Die SUID- und GUID-Bits verlieren auf solchen Dateisystemen ihre Wirkung und die Sicherheit des Systems kann dadurch erhöht werden.

  • Die Lage von Dateien im Dateisystem wird, abhängig vom Gebrauch des Dateisystems, automatisch von FreeBSD optimiert. Ein Dateisystem mit vielen kleinen Dateien, die häufig geschrieben werden, wird anders behandelt als ein Dateisystem mit wenigen großen Dateien. Mit nur einem Dateisystem ist diese Optimierung unmöglich.

  • In der Regel übersteht ein FreeBSD-Dateisystem auch einen Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen Zeitpunkt das Dateisystem beschädigen. Wenn die Daten über mehrere Dateisysteme verteilt sind, lässt sich das System mit hoher Wahrscheinlichkeit noch starten. Dies erleichtert das Zurückspielen von Datensicherungen.

Vorteil eines einzelnen Dateisystems

  • Die Größe von Dateisystemen liegt fest. Es kann passieren, dass Sie eine Partition vergrößern müssen. Dies ist nicht leicht: Sie müssen die Daten sichern, das Dateisystem vergrößert anlegen und die gesicherten Daten zurückspielen.

    Wichtig: FreeBSD kennt den Befehl growfs(8), mit dem man Dateisysteme im laufenden Betrieb vergrößern kann.

Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen MS-DOS-Partitionen gemeint). Jede Partition wird mit einem Buchstaben von a bis h bezeichnet und kann nur ein Dateisystem enthalten. Dateisysteme können daher über ihren Mount-Point, den Punkt an dem sie eingehangen sind, oder den Buchstaben der Partition, in der sie liegen, identifiziert werden.

FreeBSD benutzt einen Teil der Platte für den Swap-Bereich, der dem Rechner virtuellen Speicher zur Verfügung stellt. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann FreeBSD nicht benutzte Daten in den Swap-Bereich auslagern. Die ausgelagerten Daten können später wieder in den Speicher geholt werden (dafür werden dann andere Daten ausgelagert).

Für einige Partitionen gelten besondere Konventionen:

Partition Konvention
a Enthält normalerweise das Wurzeldateisystem
b Enthält normalerweise den Swap-Bereich
c Ist normalerweise genauso groß wie die Slice in der die Partition liegt. Werkzeuge, die auf der kompletten Slice arbeiten, wie ein Bad-Block-Scanner, können so die c-Partition benutzen. Für gewöhnlich legen Sie in dieser Partition kein Dateisystem an.
d Früher hatte die d-Partition eine besondere Bedeutung. Heute ist dies nicht mehr der Fall und die Partition d kann wie jede andere Partition auch verwendet werden.

Jede Partition, die ein Dateisystem enthält, wird in einer Slice angelegt. Slice ist der Begriff, den FreeBSD für MS-DOS-Partitionen verwendet. Slices werden von eins bis vier durchnummeriert.

Die Slice-Nummern werden mit vorgestelltem s hinter den Gerätenamen gestellt: “da0s1” ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer Festplatte gibt es höchstens vier Slices. In einer Slice des passenden Typs kann es weitere logische Slices geben. Diese erweiterten Slices werden ab fünf durchnummeriert: “ad0s5” ist die erste erweiterte Slice auf einer IDE-Platte. Diese Geräte werden von Dateisystemen benutzt, die sich in einer kompletten Slice befinden müssen.

Slices, “dangerously dedicated”-Festplatten und andere Platten enthalten Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der Buchstabe wird an den Gerätenamen gehangen: “da0a” ist die a-Partition des ersten da-Laufwerks. Dieses Laufwerk ist “dangerously dedicated”. “ad1s3e” ist die fünfte Partition in der dritten Slice der zweiten IDE-Platte.

Schließlich wird noch jede Festplatte des Systems eindeutig bezeichnet. Der Name einer Festplatte beginnt mit einem Code, der den Typ der Platte bezeichnet. Es folgt eine Nummer, die angibt, um welche Festplatte es sich handelt. Anders als bei Slices werden Festplatten von Null beginnend durchnummeriert. Gängige Festplatten-Namen sind in Tabelle 4-1 zusammengestellt.

Wenn Sie eine Partition angeben, erwartet FreeBSD, dass Sie auch die Slice und die Platte angeben, in denen sich die Partition befindet. Wenn Sie eine Slice angeben, müssen Sie auch die Platte der Slice angeben. Setzen Sie den Namen aus dem Plattennamen gefolgt von einem s, der Slice-Nummer und dem Buchstaben der Partition zusammen. Einige Beispiele finden Sie in Beispiel 4-1.

Der Aufbau einer Festplatte wird in Beispiel 4-2 dargestellt.

Um FreeBSD zu installieren, müssen Sie zuerst Slices auf den Festplatten anlegen. Innerhalb der Slices, die Sie für FreeBSD verwenden wollen, müssen Sie dann Partitionen anlegen. In den Partitionen wiederum werden die Dateisysteme (oder der Auslagerungsbereich) angelegt. Für Dateisysteme müssen Sie schließlich noch festlegen, wo diese eingehangen werden (Mount-Point).

Tabelle 4-1. Laufwerk-Codes

Code Bedeutung
ad ATAPI (IDE) Festplatte
da SCSI-Festplatte
acd ATAPI (IDE) CD-ROM
cd SCSI-CD-ROM
fd Disketten-Laufwerk

Beispiel 4-1. Namen von Platten, Slices und Partitionen

Name Bedeutung
ad0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten IDE-Festplatte (ad0).
da1s2e Die fünfte Partition (e) der zweiten Slice (s2) auf der zweiten SCSI-Festplatte (da1).

Beispiel 4-2. Aufteilung einer Festplatte

Das folgende Diagramm zeigt die Sicht von FreeBSD auf die erste IDE-Festplatte eines Rechners. Die Platte soll 4 GB groß sein und zwei Slices (MS-DOS-Partitionen) mit je 2 GB besitzen. Die erste Slice enthält ein MS-DOS-Laufwerk (C:), die zweite Slice wird von FreeBSD benutzt. Im Beispiel verwendet die FreeBSD-Installationen drei Datenpartitionen und einen Auslagerungsbereich.

Jede der drei Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die a-Partition. In der e-Partition befindet sich der /var-Verzeichnisbaum und in der f-Partition befindet sich der Verzeichnisbaum unterhalb von /usr.


4.6. Anhängen und Abhängen von Dateisystemen

Ein Dateisystem wird am besten als ein Baum mit der Wurzel / veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local haben können.

Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft.

Ein weiterer Grund bestimmte Verzeichnisbäume auf andere Dateisysteme zu legen, ist gegeben, wenn sich die Verzeichnisbäume auf gesonderten physikalischen oder virtuellen Platten, wie Network File System oder CD-ROM-Laufwerken, befinden.


4.6.1. Die fstab Datei

Während des Boot-Prozesses werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option noauto versehen sind, automatisch angehangen.

Die Zeilen in /etc/fstab haben das folgende Format:

device	/mount-point	fstype	options	dumpfreq	passno
device

Ein existierender Gerätename wie in Abschnitt 19.2 beschrieben.

mount-point

Ein existierendes Verzeichnis, an das das Dateisystem angehangen wird.

fstype

Der Typ des Dateisystems, der an mount(8) weitergegeben wird. FreeBSDs Standarddateisystem ist ufs.

options

Entweder rw für beschreibbare Dateisysteme oder ro für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist noauto für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in mount(8).

dumpfreq

Gibt die Anzahl der Tage an, nachdem das Dateisystem gesichert werden soll. Fehlt der Wert, wird 0 angenommen.

passno

Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf null zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von passno eins betragen. Allen anderen Dateisystemen sollten Werte größer eins zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird fsck(8) versuchen, diese parallel zu überprüfen.


4.6.2. Das mount Kommando

mount(8) hängt schließlich Dateisysteme an.

In der grundlegenden Form wird es wie folgt benutzt:

# mount device mountpoint

Viele Optionen werden in mount(8) beschrieben, die am häufigsten verwendeten sind:

Optionen von mount

-a

Hängt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind Dateisysteme, die mit “noauto” markiert sind, die mit der Option -t ausgeschlossen wurden und Dateisysteme, die schon angehangen sind.

-d

Führt alles bis auf den mount-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit -v. Damit wird angezeigt, was mount(8) tatsächlich versuchen würde, um das Dateisystem anzuhängen.

-f

Erzwingt das Anhängen eines unsauberen Dateisystems oder erzwingt die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird.

-r

Hängt das Dateisystem schreibgeschützt ein. Das kann auch durch Angabe von ro als Argument der Option -o erreicht werden.

-t fstype

Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn auch -a angegeben wurde.

Die Voreinstellung für den Typ des Dateisystems ist “ufs”.

-u

Aktualisiert die Mountoptionen des Dateisystems.

-v

Geschwätzig sein.

-w

Hängt das Dateisystem beschreibbar an.

-o erwartet eine durch Kommata separierte Liste von Optionen, unter anderem die folgenden:

noexec

Verbietet das Ausführen von binären Dateien auf dem Dateisystem. Dies ist eine nützliche Sicherheitsfunktion.

nosuid

SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet. Dies ist eine nützliche Sicherheitsfunktion.


4.6.3. Das umount Kommando

umount(8) akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder die Optionen -a oder -A.

Jede Form akzeptiert -f, um das Abhängen zu erzwingen, und -v, um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit -f: Ihr Computer kann abstürzen oder es können Daten auf dem Dateisystem beschädigt werden, wenn Sie das Abhängen erzwingen.

-a und -A werden benutzt um alle Dateisysteme, deren Typ durch -t modifiziert werden kann, abzuhängen. -A hängt das Rootdateisystem nicht ab.


4.7. Prozesse

Da FreeBSD ein Multitasking-Betriebssystem ist, sieht es so aus, als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, das zu irgendeiner Zeit läuft, wird Prozess genannt. Jedes Kommando startet mindestens einen Prozess. Einige Systemprozesse laufen ständig und stellen die Funktion des Systems sicher.

Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die Prozess-ID oder PID genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Dabei finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein Prozess und jedes Kommando, das Sie starten, ist auch ein Prozess. Jeder Prozess, den Sie auf diese Weise starten, besitzt den Shell-Prozess als Elternprozess. Die Ausnahme hiervon ist ein spezieller Prozess, der init(8) heißt. init ist immer der erste Prozess und hat somit die PID 1. init wird vom Kernel beim Booten von FreeBSD gestartet.

Die Kommandos ps(1) und top(1) sind besonders nützlich, um sich die Prozesse auf einem System anzusehen. ps zeigt eine statische Liste der laufenden Prozesse und kann deren PID, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden und vieles mehr anzeigen. top zeigt alle laufenden Prozesse an und aktualisiert die Anzeige, so dass Sie Ihrem Computer bei der Arbeit zuschauen können.

Normal zeigt Ihnen ps nur die laufenden Prozesse, die Ihnen gehören. Zum Beispiel:

% ps
  PID  TT  STAT      TIME COMMAND
  298  p0  Ss     0:01.10 tcsh
 7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)
72210  p0  R+     0:00.00 ps
  390  p1  Is     0:01.14 tcsh
 7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y
 6688  p3  IWs    0:00.00 tcsh
10735  p4  IWs    0:00.00 tcsh
20256  p5  IWs    0:00.00 tcsh
  262  v0  IWs    0:00.00 -tcsh (tcsh)
  270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
  280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
  284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc
  285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

Wie Sie sehen, gibt ps(1) mehrere Spalten aus. In der PID Spalte findet sich die vorher besprochene Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an, wenn die Grenze überschritten wird. Ist eine PID bereits vergeben, wird diese allerdings nicht erneut vergeben. Die Spalte TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt den Status des Programms an und kann für die Zwecke dieser Diskussion ebenso wie TT ignoriert werden. TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist - dies ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen ist, da die meisten Programme hauptsächlich auf bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND finden Sie schließlich die Kommandozeile, mit der das Programm gestartet wurde.

ps(1) besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. Mit a werden Information über alle laufenden Prozesse und nicht nur Ihrer eigenen angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit u angezeigt. x zeigt auch Dämonen-Prozesse an, und ww veranlasst ps(1) die komplette Kommandozeile für jeden Befehl anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird.

Die Ausgabe von top(1) sieht ähnlich aus:

% top
last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10
47 processes:  1 running, 46 sleeping
CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
72257 nik       28   0  1960K  1044K RUN      0:00 14.86%  1.42% top
 7078 nik        2   0 15280K 10960K select   2:54  0.88%  0.88% xemacs-21.1.14
  281 nik        2   0 18636K  7112K select   5:36  0.73%  0.73% XF86_SVGA
  296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm
48630 nik        2   0 29816K  9148K select   3:18  0.00%  0.00% navigator-linu
  175 root       2   0   924K   252K select   1:41  0.00%  0.00% syslogd
 7059 nik        2   0  7260K  4644K poll     1:38  0.00%  0.00% mutt
...

Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die Systemauslastung (engl. load average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele Prozesse momentan laufen (im Beispiel 47), wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt.

Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von ps(1). Wie im vorigen Beispiel können Sie die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando erkennen. top(1) zeigt auch den Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt ist. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. Netscape® hat im gezeigten Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt es allerdings nur 9 MB.

Die Anzeige wird von top(1) automatisch alle zwei Sekunden aktualisiert. Der Zeitraum kann mit -s eingestellt werden.


4.8. Dämonen, Signale und Stoppen von Prozessen

Wenn Sie einen Editor starten, können Sie ihn leicht bedienen und Dateien laden. Sie können das, weil der Editor dafür Vorsorge getroffen hat und auf einem Terminal läuft. Manche Programme erwarten keine Eingaben von einem Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren sind ein weiteres Beispiel für diesen Typ von Anwendungen.

Wir nennen diese Programme Dämonen. Dämonen stammen aus der griechischen Mythologie und waren weder gut noch böse. Sie waren kleine dienstbare Geister, die meistens nützliche Sachen für die Menschheit vollbrachten. Ähnlich wie heutzutage Web-Server und Mail-Server nützliche Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack.

Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem “d” am Ende benannt. BIND steht beispielsweise für Berkeley Internet Name Domain, das tatsächlich laufende Programm heißt aber named. Der Apache Webserver wird httpd genannt, der Druckerspool-Dämon heißt lpd usw. Dies ist allerdings eine Konvention und keine unumstößliche Regel: Der Dämon der Anwendung sendmail heißt sendmail und nicht maild, wie Sie vielleicht gedacht hatten.

Manchmal müssen Sie mit einem Dämon kommunizieren. Dazu verwenden Sie Signale. Sie können mit einem Dämonen oder jedem anderen laufenden Prozess kommunizieren, indem Sie diesem ein Signal schicken. Sie können verschiedene Signale verschicken - manche haben eine festgelegte Bedeutung, andere werden von der Anwendung interpretiert. Die Dokumentation zur fraglichen Anwendung wird erklären, wie die Anwendung Signale interpretiert. Sie können nur Signale zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben nicht die Berechtigung, Prozessen anderer Benutzer mit kill(1) oder kill(2) Signale zu schicken. Der Benutzer root darf jedem Prozess Signale schicken.

In manchen Fällen wird FreeBSD Signale senden. Wenn eine Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht zugreifen soll, so sendet FreeBSD dem Prozess das Segmentation Violation Signal (SIGSEGV). Wenn eine Anwendung den alarm(3) Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm Signal (SIGALRM) gesendet.

Zwei Signale können benutzt werden, um Prozesse zu stoppen: SIGTERM und SIGKILL. Mit SIGTERM fordern Sie den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und merken, dass er sich beenden soll. Er hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er vor der Aufforderung sich zu beenden durchführte, abzuschließen. Er kann sogar SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf.

SIGKILL kann von keinem Prozess ignoriert werden. Das Signal lässt sich mit “Mich interessiert nicht, was du gerade machst, hör sofort auf damit!” umschreiben. Wenn Sie einem Prozess SIGKILL schicken, dann wird FreeBSD diesen sofort beenden[4].

Andere Signale, die Sie vielleicht verschicken wollen, sind SIGHUP, SIGUSR1 und SIGUSR2. Diese Signale sind für allgemeine Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich auf diese Signale reagieren.

Nehmen wir an, Sie haben die Konfiguration Ihres Webservers verändert und möchten dies dem Server mitteilen. Sie könnten den Server natürlich stoppen und httpd wieder starten. Die Folge wäre eine kurze Zeit, in der der Server nicht erreichbar ist. Die meisten Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines SIGHUP neu ein. Da es keinen Standard gibt, der vorschreibt, wie auf diese Signale zu reagieren ist, lesen Sie bitte die Dokumentation zu dem in Frage kommenden Dämon.

Mit kill(1) können Sie, wie unten gezeigt, Signale verschicken.

Verschicken von Signalen

Das folgende Beispiel zeigt, wie Sie inetd(8) ein Signal schicken. Die Konfigurationsdatei von inetd ist /etc/inetd.conf. Diese Konfigurationsdatei liest inetd ein, wenn er ein SIGHUP empfängt.

  1. Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal schicken wollen. Benutzen Sie dazu ps(1) und grep(1). Mit grep(1) können Sie in einer Ausgabe nach einem String suchen. Da inetd(8) unter dem Benutzer root läuft und Sie das Kommando als normaler Benutzer absetzen, müssen Sie ps(1) mit ax aufrufen:

    % ps -ax | grep inetd
      198  ??  IWs    0:00.00 inetd -wW
    

    Die Prozess-ID von inetd(8) ist 198. In einigen Fällen werden Sie auch das grep inetd Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie ps(1) die Liste der laufenden Prozesse untersucht.

  2. Senden Sie das Signal mit kill(1). Da inetd(8) unter dem Benutzer root läuft, müssen Sie zuerst mit su(1) root werden:

    % su
    Password:
    # /bin/kill -s HUP 198
    

    kill(1) wird, wie andere Kommandos von UNIX Systemen auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, einem Prozess, der nicht Ihnen gehört, ein Signal zu senden, dann werden Sie die Meldung “kill: PID: Operation not permitted” sehen. Wenn Sie sich bei der Eingabe der PID vertippen, werden Sie das Signal dem falschen Prozess schicken, was schlecht sein kann. Wenn Sie Glück haben, existiert der Prozess nicht und Sie werden mit der Ausgabe “kill: PID: No such process” belohnt.

    Warum soll ich /bin/kill benutzen?: Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Das kann nützlich sein, aber die unterschiedlichen Shells benutzen eine verschiedene Syntax, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill ... direkt aufzurufen.

Andere Signale senden Sie auf die gleiche Weise, ersetzen Sie nur TERM oder KILL entsprechend.

Wichtig: Es kann gravierende Auswirkungen haben, wenn Sie zufällig Prozesse beenden. Insbesondere init(8) mit der Prozess-ID ist ein Spezialfall. Mit /bin/kill -s KILL 1 können Sie Ihr System schnell herunterfahren. Überprüfen Sie die Argumente von kill(1) immer zweimal bevor Sie Return drücken.


4.9. Shells

Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), einen Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und tcsh (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung.

Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit UNIX Systemen neu, so könnten Sie die bash probieren. Der Punkt ist, dass jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen.

Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien foobar und foo.bar. Die Datei foo.bar möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: rm fo[Tab]. [Tab].

Die Shell würde dann rm foo[BEEP].bar ausgeben.

[BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, dass es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem Sie . eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen.

Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. Die folgende Liste zeigt verbreitete Umgebungsvariablen und was sie bedeuten:

Variable Beschreibung
USER Name des angemeldeten Benutzers.
PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen.
DISPLAY Der Name des X11-Bildschirms, auf dem Ausgaben erfolgen sollen.
SHELL Die aktuelle Shell.
TERM Name des Terminaltyps des Benutzers. Benutzt, um die Fähigkeiten des Terminals zu bestimmen.
TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen.
OSTYPE Typ des Betriebsystems, beispielsweise FreeBSD.
MACHTYPE Die CPU Architektur auf dem das System läuft.
EDITOR Vom Benutzer bevorzugter Text-Editor.
PAGER Vom Benutzer bevorzugter Text-Betrachter.
MANPATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages.

Das Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash benutzen Sie zum Setzen von Umgebungsvariablen export. Um beispielsweise die Variable EDITOR mit csh oder tcsh auf /usr/local/bin/emacs zu setzen, setzen Sie das folgende Kommando ab:

% setenv EDITOR /usr/local/bin/emacs

Unter Bourne-Shells:

% export EDITOR="/usr/local/bin/emacs"

Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt.

Shells behandeln viele Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Diese Metazeichen können zum Vervollständigen von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert das Kommando echo * nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen, an echo weitergibt.

Um zu verhindern, dass die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht.


4.9.1. Ändern der Shell

Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit “Shell:” entsprechend Ihren Wünschen.

Sie können auch chsh mit der Option -s aufrufen, dann wird Ihre Shell gesetzt, ohne dass Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein:

% chsh -s /usr/local/bin/bash

Anmerkung: Die von Ihnen gewünschte Shell muss in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports-Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen.

Haben Sie beispielsweise die bash nach /usr/local/bin installiert, geben Sie Folgendes ein:

# echo "/usr/local/bin/bash" >> /etc/shells

Danach können Sie chsh aufrufen.


4.10. Text-Editoren

Eine großer Teil der Konfiguration wird bei FreeBSD durch das Editieren von Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr viel mehr in der Ports-Sammlung.

Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, wobei filename den Namen der zu editierenden Datei darstellt. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf ein. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ steht für die Ctrl (oder Strg) Taste, mit ^e ist also die Tastenkombination Ctrl+e gemeint. Um ee zu verlassen, drücken Sie Esc und wählen dann leave editor aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde.

FreeBSD verfügt über leistungsfähigere Editoren wie vi als Teil des Basissystems, andere Editoren wie emacs oder vim sind Teil der Ports-Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit, jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Wenn Sie viele Textdateien editieren, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen von Editoren wie vim oder emacs ein.

Viele Anwendungen, die Dateien verändern oder Texteingabe erwarten, werden automatisch einen Texteditor öffnen. Um den Standardeditor zu ändern, setzen Sie die Umgebungsvariable EDITOR. Um mehr darüber zu erfahren, lesen Sie den Abschnitt Shells.


4.11. Geräte und Gerätedateien

Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf gefundene Geräte. Sie können sich die Bootmeldungen später in /var/run/dmesg.boot ansehen.

Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen werden, sind zum Beispiel acd0, das erste IDE CD-ROM oder kbd0, die Tastatur.

Auf die meisten Geräte wird unter UNIX Systemen über spezielle Gerätedateien im /dev Verzeichnis zugegriffen.


4.11.1. Anlegen von Gerätedateien

Wenn sie ein neues Gerät zu Ihrem System hinzufügen, oder die Unterstützung für zusätzliche Geräte kompilieren, müssen ein oder mehrere Gerätedateien erstellt werden.


4.11.1.1. DEVFS (Gerätedateisystem)

Das Gerätedateisystem DEVFS ermöglicht durch den Namensraum des Dateisystems Zugriff auf den Namensraum der Geräte im Kernel. Damit müssen Gerätedateien nicht mehr extra angelegt werden, sondern werden von DEVFS verwaltet.

Weitere Informationen finden Sie in devfs(5).


4.12. Binärformate

Um zu verstehen, warum FreeBSD das Format elf(5) benutzt, müssen Sie zunächst etwas über die drei gegenwärtig “dominanten” ausführbaren Formate für UNIX Systeme wissen:

  • a.out(5)

    Das älteste und “klassische” Objektformat von UNIX Systemen. Es benutzt einen kurzen, kompakten Header mit einer magischen Nummer am Anfang, die oft benutzt wird, um das Format zu charakterisieren (weitere Details finden Sie unter a.out(5)). Es enthält drei geladene Segmente: .text, .data und .bss, sowie eine Symboltabelle und eine Stringtabelle.

  • COFF

    Das Objektformat von SVR3. Der Header enthält nun eine “Sectiontable”. Man kann also mit mehr als nur den Sections .text, .data und .bss arbeiten.

  • elf(5)

    Der Nachfolger von COFF. Kennzeichnend sind mehrere Sections und mögliche 32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil: ELF wurde auch unter der Annahme entworfen, dass es nur eine ABI (Application Binary Interface) pro Systemarchitektur geben wird. Tatsächlich ist diese Annahme falsch - nicht einmal für die kommerzielle SYSV-Welt (in der es mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft sie zu.

    FreeBSD versucht, dieses Problem zu umgehen, indem ein Werkzeug bereitgestellt wird, um ausführbare Dateien im ELF-Format mit Informationen über die ABI zu versehen, zu der sie passen. Weitere Informationen finden Sie in der Manualpage brandelf(1).

FreeBSD kommt aus dem “klassischen” Lager und verwendete traditionell das Format a.out(5), eine Technik, die bereits über viele BSD-Releases hinweg eingesetzt und geprüft worden ist. Obwohl es bereits seit einiger Zeit möglich war, auf einem FreeBSD-System auch Binaries (und Kernel) im ELF-Format zu erstellen und auszuführen, widersetzte FreeBSD sich anfangs dem “Druck”, auf ELF als Standardformat umzusteigen. Warum? Nun, als das Linux-Lager die schmerzhafte Umstellung auf ELF durchführte, ging es nicht so sehr darum, dem ausführbaren Format a.out zu entkommen, als dem unflexiblen, auf Sprungtabellen basierten Mechanismus für “Shared-Libraries” der die Konstruktion von Shared-Libraries für Hersteller und Entwickler gleichermaßen sehr kompliziert machte. Da die verfügbaren ELF-Werkzeuge eine Lösung für das Problem mit den Shared-Libraries anboten und ohnehin generell als “ein Schritt vorwärts” angesehen wurden, wurde der Aufwand für die Umstellung als notwendig akzeptiert und die Umstellung wurde durchgeführt. Unter FreeBSD ist der Mechanismus von Shared-Libraries enger an den Stil des Shared-Library-Mechanismus von Suns SunOS™ angelehnt und von daher sehr einfach zu verwenden.

Ja, aber warum gibt es so viele unterschiedliche Formate?

In alter, grauer Vorzeit gab es simple Hardware. Diese simple Hardware unterstützte ein einfaches, kleines System. a.out war absolut passend für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11) darzustellen. Als UNIX von diesem simplen System portiert wurde, wurde auch das a.out-Format beibehalten, weil es für die frühen Portierungen auf Architekturen wie den Motorola 68000 und VAX ausreichte.

Dann dachte sich ein schlauer Hardware-Ingenieur, dass, wenn er Software zwingen könnte, einige Tricks anzustellen, es ihm möglich wäre, ein paar Gatter im Design zu sparen, und seinen CPU-Kern schneller zu machen. Obgleich es dazu gebracht wurde, mit dieser neuen Art von Hardware (heute als RISC bekannt) zu arbeiten, war a.out für diese Hardware schlecht geeignet. Deshalb wurden viele neue Formate entwickelt, um eine bessere Leistung auf dieser Hardware zu erreichen, als mit dem begrenzten, simplen a.out-Format. Dinge wie COFF, ECOFF und einige andere obskure wurden erdacht und ihre Grenzen untersucht, bevor die Dinge sich in Richtung ELF entwickelten.

Hinzu kam, dass die Größe von Programmen gewaltig wurde und Festplatten sowie physikalischer Speicher immer noch relativ klein waren. Also wurde das Konzept von Shared-Libraries geboren. Das VM-System wurde auch immer fortgeschrittener. Obwohl bei jedem dieser Fortschritte das a.out-Format benutzt worden ist, wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr gedehnt. Zusätzlich wollte man Dinge dynamisch zur Ausführungszeit laden, oder Teile ihres Programms nach der Initialisierung wegwerfen, um Hauptspeicher oder Swap-Speicher zu sparen. Programmiersprachen wurden immer fortschrittlicher und man wollte, dass Code automatisch vor der main-Funktion aufgerufen wird. Das a.out-Format wurde oft überarbeitet, um alle diese Dinge zu ermöglichen und sie funktionierten auch für einige Zeit. a.out konnte diese Probleme nicht ohne ein ständiges Ansteigen eines Overheads im Code und in der Komplexität handhaben. Obwohl ELF viele dieser Probleme löste, wäre es sehr aufwändig, ein System umzustellen, das im Grunde genommen funktionierte. Also musste ELF warten, bis es aufwändiger war, bei a.out zu bleiben, als zu ELF überzugehen.

Im Laufe der Zeit haben sich die Erstellungswerkzeuge, von denen FreeBSD seine Erstellungswerkzeuge abgeleitet hat (speziell der Assembler und der Loader), in zwei parallele Zweige entwickelt. Im FreeBSD-Zweig wurden Shared-Libraries hinzugefügt und einige Fehler behoben. Das GNU-Team, das diese Programme ursprünglich geschrieben hat, hat sie umgeschrieben und eine simplere Unterstützung zur Erstellung von Cross-Compilern durch beliebiges Einschalten verschiedener Formate usw. hinzugefügt. Viele Leute wollten Cross-Compiler für FreeBSD erstellen, aber sie hatten kein Glück, denn FreeBSD's ältere Sourcen für as und ld waren hierzu nicht geeignet. Die neuen GNU-Werkzeuge (binutils) unterstützen Cross-Compilierung, ELF, Shared-Libraries, C++-Erweiterungen und mehr. Weiterhin geben viele Hersteller ELF-Binaries heraus und es ist gut, wenn FreeBSD sie ausführen kann.

ELF ist ausdrucksfähiger als a.out und gestattet eine bessere Erweiterbarkeit des Basissystems. Die ELF-Werkzeuge werden besser gewartet und bieten Unterstützung von Cross-Compilierung, was für viele Leute wichtig ist. ELF mag etwas langsamer sein, als a.out, aber zu versuchen, das zu messen, könnte schwierig werden. Es gibt unzählige Details, in denen sich die beiden Formate unterscheiden, wie sie Pages abbilden, Initialisierungscode handhaben usw. Keins davon ist sehr wichtig, aber es sind Unterschiede. Irgendwann wird die Unterstützung für Programme im a.out-Format aus dem GENERIC-Kernel entfernt werden. Wenn es dann keinen oder kaum noch Bedarf für die Unterstützung dieses Formates gibt, werden die entsprechenden Routinen ganz entfernt werden.


4.13. Weitere Informationen

4.13.1. Manualpages

Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Manualpages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach:

% man Kommando

Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein:

% man ls

Die Online-Dokumentation ist in nummerierte Sektionen unterteilt:

  1. Benutzerkommandos.

  2. Systemaufrufe und Fehlernummern.

  3. Funktionen der C Bibliothek.

  4. Gerätetreiber.

  5. Dateiformate.

  6. Spiele und andere Unterhaltung.

  7. Verschiedene Informationen.

  8. Systemverwaltung und -Kommandos.

  9. Kernel Entwickler.

In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben:

% man 1 chmod

Dies wird Ihnen die Manualpage für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich chmod(1) auf das Benutzerkommando chmod und mit chmod(2) ist der Systemaufruf gemeint.

Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können mit man nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter -k benutzen:

% man -k mail

Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort “mail” enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen.

Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann rufen Sie doch das folgende Kommando auf:

% cd /usr/bin
% man -f *

Dasselbe erreichen Sie durch Eingabe von:

% cd /usr/bin
% whatis *

4.13.2. GNU Info Dateien

FreeBSD enthält viele Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen.

Um das Kommando info(1) zu benutzen, geben Sie ein:

% info

Eine kurze Einführung gibt es mit h; eine Befehlsreferenz erhalten Sie durch Eingabe von: ?.


Kapitel 5. Installieren von Anwendungen: Pakete und Ports

Übersetzt von Uwe Pierau.

5.1. Übersicht

FreeBSD enthält sehr viele Systemwerkzeuge, die Teil des Basissystems sind. Allerdings sind Sie früher oder später auf Software Dritter angewiesen, damit Sie bestimmte Arbeiten durchführen können. Um diese Software zu installieren, stellt FreeBSD zwei sich ergänzende Methoden zur Verfügung: Die Ports-Sammlung (zur Installation aus dem Quellcode) sowie Pakete (auch als Packages bezeichnet, zur Installation von vorkompilierten binären Softwarepaketen). Sie können beide Methoden benutzen, um Ihre Lieblingsanwendungen von lokalen Medien oder über das Netzwerk zu installieren.

Dieses Kapitel behandelt die folgenden Themen:

  • Die Installation binärer Softwarepakete.

  • Der Bau Software Dritter aus dem Quellcode mithilfe der Ports-Sammlung.

  • Wie zuvor installierte Pakete oder Ports entfernt werden.

  • Wie Sie die Voreinstellungen der Ports-Sammlung überschreiben.

  • Die Suche nach geeigneter Software.

  • Wie Sie Ihre Anwendungen aktualisieren.


5.2. Installation von Software

Wenn Sie schon einmal ein UNIX System benutzt haben, werden Sie wissen, dass zusätzliche Software meist wie folgt installiert wird:

  1. Download der Software, die als Quelltext oder im Binärformat vorliegen kann.

  2. Auspacken der Software, die typischerweise ein mit compress(1), gzip(1) oder bzip2(1) komprimiertes Tar-Archiv enthält.

  3. Durchsuchen der Dokumentation, die sich meist in Dateien wie INSTALL, README oder mehreren Dateien im Verzeichnis doc/ befindet, nach Anweisungen, wie die Software zu installieren ist.

  4. Kompilieren der Software wenn sie als Quelltext vorliegt. Dazu müssen Sie vielleicht das Makefile anpassen, oder configure laufen lassen, oder andere Arbeiten durchführen.

  5. Testen und installieren der Software.

Das beschreibt aber nur den optimalen Fall. Wenn Sie Software installieren, die nicht speziell für FreeBSD geschrieben wurde, müssen Sie vielleicht sogar den Quelltext anpassen, damit die Software funktioniert.

Wenn Sie unbedingt wollen, können Sie mit FreeBSD Software nach der “althergebrachten” Methode installieren. Mit Paketen oder Ports bietet Ihnen FreeBSD allerdings zwei Methoden an, die Ihnen sehr viel Zeit sparen können. Zurzeit werden über 23,000 Anwendungen Dritter über diese Methoden zur Verfügung gestellt.

Das FreeBSD-Paket einer Anwendung besteht aus einer einzigen Datei, die Sie sich herunterladen müssen. Das Paket enthält schon übersetzte Kommandos der Anwendung, sowie zusätzliche Konfigurationsdateien oder Dokumentation. Zur Handhabung der Pakete stellt FreeBSD-Kommandos wie pkg_add(1), pkg_delete(1) oder pkg_info(1) zur Verfügung. Mit diesem System können neue Anwendungen mit einem Kommando, pkg_add, installiert werden.

Der FreeBSD-Port einer Anwendung ist eine Sammlung von Dateien, die das Kompilieren der Quelltexte einer Anwendung automatisieren.

Die Dateien eines Ports führen für Sie alle oben aufgeführten Schritte zum Installieren einer Anwendung durch. Mit einigen wenigen Kommandos wird der Quellcode der Anwendung automatisch heruntergeladen, ausgepackt, gepatcht, übersetzt und installiert.

Tatsächlich kann das Portsystem auch dazu benutzt werden, Pakete zu generieren, die Sie mit den gleich beschriebenen Kommandos, wie pkg_add, manipulieren können.

Pakete und Ports beachten Abhängigkeiten zwischen Anwendungen. Angenommen, Sie wollen eine Anwendung installieren, die von einer Bibliothek abhängt und die Anwendung wie die Bibliothek sind als Paket oder Port für FreeBSD verfügbar. Wenn Sie pkg_add oder das Portsystem benutzen, um die Anwendung zu installieren, werden Sie bemerken, dass die Bibliothek zuerst installiert wird, wenn sie nicht schon vorher installiert war.

Sie werden sich fragen, warum FreeBSD-Pakete und -Ports unterstützt, wo doch beide Methoden fast gleiches leisten. Beide Methoden haben ihre Stärken und welche Sie einsetzen, hängt letztlich von Ihren Vorlieben ab.

Vorteile von Paketen

  • Das komprimierte Paket einer Anwendung ist normalerweise kleiner als das komprimierte Archiv der Quelltexte.

  • Pakete müssen nicht mehr kompiliert werden. Dies ist ein Vorteil, wenn Sie große Pakete, wie Mozilla, KDE oder GNOME auf langsamen Maschinen installieren.

  • Wenn Sie Pakete verwenden, brauchen Sie nicht zu verstehen, wie Sie Software unter FreeBSD kompilieren.

Vorteile von Ports

  • Da die Pakete auf möglichst vielen System laufen sollen, werden Optionen beim Übersetzen zurückhaltend gesetzt. Wenn Sie eine Anwendung über die Ports installieren, können Sie die Angabe der Optionen optimieren. Zum Beispiel können Sie spezifischen Code für Pentium 4 oder Athlon Prozessoren erzeugen.

  • Die Eigenschaften einiger Anwendungen werden über Optionen zum Zeitpunkt des Übersetzens festgelegt. Apache kann zum Beispiel über viele eingebaute Optionen konfiguriert werden. Wenn Sie das Portsystem benutzen, können Sie die Vorgaben für die Optionen überschreiben.

    Für einige Fälle existieren verschiedene Pakete einer Anwendung, die beim Übersetzen unterschiedlich konfiguriert wurden. Für Ghostscript gibt es ein ghostscript-Paket und ein ghostscript-nox11-Paket, die sich durch die X11 Unterstützung unterscheiden. Diese grobe Unterscheidung ist mit dem Paketsystem möglich, wird aber schnell unhandlich, wenn eine Anwendung mehr als ein oder zwei Optionen zum Zeitpunkt des Übersetzens besitzt.

  • Die Lizenzbestimmungen mancher Software verbietet ein Verbreiten in binärer Form. Diese Software muss als Quelltext ausgeliefert werden.

  • Einige Leute trauen binären Distributionen nicht. Wenn Sie den Quelltext besitzen, können Sie sich diesen (zumindest theoretisch) durchlesen und nach möglichen Problemen durchsuchen.

  • Wenn Sie eigene Anpassungen besitzen, benötigen Sie den Quelltext, um diese anzuwenden.

  • Manch einer besitzt gerne den Quelltext, um ihn zu lesen, wenn es einmal langweilig ist, ihn zu hacken, oder sich einfach ein paar Sachen abzugucken (natürlich nur, wenn es die Lizenzbestimmungen erlauben).

Wenn Sie über aktualisierte Ports informiert sein wollen, lesen Sie bitte die Mailinglisten FreeBSD ports und FreeBSD ports bugs.

Warnung: Bevor Sie eine Anwendung installieren, sollten Sie auf der Seite http://vuxml.FreeBSD.org/ über mögliche Sicherheitsprobleme mit der Anwendung informieren.

Die Anwendung ports-mgmt/portaudit prüft automatisch alle installierten Anwendungen auf bekannte Sicherheitslöcher. Vor dem Bau eines Ports findet ebenfalls eine Prüfung statt. Installierte Pakete prüfen Sie mit dem Kommando portaudit -F -a.

Der Rest dieses Kapitels beschreibt, wie Sie Software Dritter mit Paketen oder Ports auf einem FreeBSD-System installieren und verwalten.


5.3. Suchen einer Anwendung

Bevor Sie eine Anwendung installieren, müssen Sie deren Art und Namen kennen.

Die Anzahl der nach FreeBSD portierten Anwendungen steigt ständig. Zum Glück gibt es einige Wege, die richtige zu finden.

  • Eine aktuelle Liste verfügbarer Anwendungen, die sich auch durchsuchen lässt, finden Sie unter http://www.FreeBSD.org/ports/. Die Anwendungen sind in Kategorien unterteilt und Sie können sich alle Anwendungen einer Kategorie anzeigen lassen. Wenn Sie den Namen der Anwendung kennen, können Sie natürlich auch direkt nach dem Namen suchen.

  • FreshPorts, das von Dan Langille gepflegt wird, erreichen Sie unter http://www.FreshPorts.org/. FreshPorts verfolgt Änderungen an Anwendungen aus den Ports. Mit FreshPorts können Sie ein oder mehrere Ports beobachten und sich eine E-Mail schicken lassen, wenn ein Port aktualisiert wird.

  • Wenn Sie den Namen einer Anwendung nicht kennen, versuchen Sie eine Webseite wie FreshMeat (http://www.freshmeat.net/), um eine passende Anwendung zu finden. Schauen Sie dann auf der FreeBSD-Webseite nach, ob die Anwendung schon portiert wurde.

  • Wenn Sie den Portnamen kennen und nur nach der Kategorie suchen wollen, verwenden Sie das Kommando whereis(1). Geben Sie einfach whereis Datei ein. Datei ist der Name des Programms, das Sie suchen:

    # whereis lsof
    lsof: /usr/ports/sysutils/lsof
    

    Damit haben wir herausgefunden, dass sich lsof, ein Systemwerkzeug, im Verzeichnis /usr/ports/sysutils/lsof befindet.

  • Auch mit einem einfachen echo(1)-Befehl können Sie herausfinden, wo Sie einen bestimmten Port finden. Dazu ein Beispiel:

    # echo /usr/ports/*/*lsof*
              /usr/ports/sysutils/lsof
    

    Beachten Sie aber, dass dieser Befehl auch alle Dateien im Verzeichnis /usr/ports/distfiles findet, auf die der angegebene Suchbegriff passt.

  • Ein weiterer Weg, einen bestimmten Port zu finden, ist es, die eingebaute Suchfunktion der Ports-Sammlung zu benutzen. Dazu muss Ihr Arbeitsverzeichnis /usr/ports sein. In diesem Verzeichnis rufen Sie make search name=Anwendungsname auf, wobei Anwendungsname der Name der gesuchten Anwendung ist. Wenn Sie zum Beispiel nach lsof suchen:

    # cd /usr/ports
    # make search name=lsof
    Port:   lsof-4.56.4
    Path:   /usr/ports/sysutils/lsof
    Info:   Lists information about open files (similar to fstat(1))
    Maint:  obrien@FreeBSD.org
    Index:  sysutils
    B-deps:
    R-deps:
    

    Der Teil der Ausgabe der Sie interessiert ist die Zeile, die mit “Path:” beginnt, weil sie Ihnen sagt, wo der Port zu finden ist. Die anderen Informationen werden zum Installieren des Ports nicht direkt benötigt, Sie brauchen sich darum jetzt nicht weiter zu kümmern.

    Erweiterte Suchen führen Sie mit dem Kommando make search key=Text aus. Damit werden Portnamen, Kommentare, Beschreibungen und Abhängigkeiten nach Text durchsucht. Dies kann sehr nützlich sein, wenn Sie den Namen des Programms, nach dem Sie suchen, nicht kennen.

    In beiden Fällen wird Groß- und Kleinschreibung bei der Suche ignoriert. Die Suche nach “LSOF” wird dieselben Ergebnisse wie die Suche nach “lsof” liefern.


5.4. Benutzen des Paketsystems

Beigesteuert von Chern Lee.

Es gibt viele unterschiedliche Werkzeuge um Pakete in FreeBSD zu verwalten:

  • Auf einem laufenden System kann sysinstall benutzt werden, um Pakete zu installieren, zu löschen und verfügbare und installierte anzuzeigen. Weitere Informationen finden Sie unter Abschnitt 2.10.11.

  • Die Paketverwaltungswerkzeuge der Kommandozeile sind die Themen von diesem Kapitel.


5.4.1. Installieren eines Pakets

Mit pkg_add(1) können Sie ein FreeBSD-Paket von einer lokalen Datei oder über das Netzwerk installieren.

Beispiel 5-1. Download vor Installation eines Pakets

# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz

Wenn Sie die Pakete nicht lokal vorliegen haben (zum Beispiel auf den FreeBSD-CD-ROMs), ist es wahrscheinlich einfacher den Schalter -r von pkg_add(1) zu verwenden. Das Werkzeug bestimmt dann automatisch das nötige Objektformat und die richtige Version des Pakets, lädt dieses dann von einem FTP-Server und installiert das Paket.

# pkg_add -r lsof

Das obige Beispiel würde ohne weitere Interaktion das richtige Paket herunterladen und installieren. Pakete werden vom FreeBSD-Hauptserver heruntergeladen. Wenn Sie anderen Server verwenden möchten, geben Sie den Server in der Umgebungsvariablen PACKAGESITE an. Die Dateien werden mit fetch(3), das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt, heruntergeladen. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in fetch(3). Beachten Sie, dass im obigen Beispiel lsof anstelle von lsof-4.56.4 verwendet wird. Wenn Sie pkg_add(1) zum Herunterladen eines Pakets verwenden, darf die Versionsnummer des Pakets nicht angegeben werden, da automatisch die neuste Version der Anwendung geholt wird.

Anmerkung: Unter FreeBSD-CURRENT oder FreeBSD-STABLE holt pkg_add(1) die neuste Version einer Anwendung, unter einer Release holt pkg_add(1) die Version der Anwendung, die im Release enthalten ist. Sie können dies ändern, indem Sie die Umgebungsvariable PACKAGESITE überschreiben. Wenn Sie bespielsweise FreeBSD 8.1-RELEASE installiert haben, versucht pkg_add(1) in der Voreinstellung die Pakete von ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/ zu laden. Wollen Sie pkg_add(1) dazu zwingen, nur FreeBSD 8-STABLE-Pakete herunterzuladen, setzen Sie die Umgebungsvariable PACKAGESITE auf ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/.

Pakete werden im .tgz- und .tbz-Format ausgeliefert. Sie finden Sie unter ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ oder auf der FreeBSD-CD-ROM-Distribution. Jede CD der FreeBSD Distribution (oder des PowerPaks) enthält Pakete im Verzeichnis /packages. Die Struktur des Paketbaums entspricht dem /usr/ports Baum. Jede Kategorie besitzt ein eigenes Verzeichnis und alle Pakete befinden sich im Verzeichnis All.

Die Verzeichnisstruktur des Paketbaums ist ein Abbild der Ports, da beide Systeme eng zusammenarbeiten.


5.4.2. Verwalten von Paketen

pkg_info(1) zeigt alle installierten Pakete und deren Beschreibung an.

# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...

pkg_version(1) vergleicht die Version installierter Pakete mit der Version aus der Ports-Sammlung.

# pkg_version
cvsup                       =
docbook                     =
...

Die Symbole in der zweiten Spalte zeigen das Alter des Pakets im Vergleich zu der lokalen Version aus der Ports-Sammlung an.

Symbol Bedeutung
= Die Version des installierten Paketes stimmt mit der Version aus der lokalen Ports-Sammlung überein.
< Die installierte Version ist älter als die der verfügbaren Version aus der Ports-Sammlung.
> Die installierte Version ist neuer als die aus der Ports-Sammlung (Eventuell ist die lokale Ports-Sammlung veraltet).
? Das installierte Paket konnte in der Ports-Sammlung nicht gefunden werden. Das kann dadurch hervorgerufen werden, dass ein installierter Port aus der Ports-Sammlung entfernt wurde oder einen neuen Namen erhalten hat.
* In der Ports-Sammlung befinden sich mehrere Versionen der Anwendung.
! Das installierte Paket ist zwar im Index enthalten, aus irgendeinem Grund war pkg_version aber dennoch nicht in der Lage, die Versionsnummer des installierten Pakets mit der Versionsnummer des entsprechenden Eintrags im Index zu vergleichen.

5.4.3. Entfernen eines Pakets

Um ein zuvor installiertes Paket zu entfernen, benutzen Sie das Werkzeug pkg_delete(1).

# pkg_delete xchat-1.7.1

Beachten Sie, dass pkg_delete(1) die vollständige Bezeichnung des Pakets benötigt (also Paketname und Versionsnummer). Die Eingabe von xchat (anstelle von xchat-1.7.1) ist daher nicht ausreichend. Zwar können Sie die Versionsnummer eines installierten Pakets mit pkg_version(1) herausfinden, es ist aber auch möglich, ein Paket zu deinstallieren, ohne die exakte Versionsnummer zu kennen, wenn Sie Wildcards einsetzen:

# pkg_delete xchat\*

In diesem Beispiel werden alle Pakete gelöscht, deren Name mit xchat beginnt.


5.4.4. Verschiedenes

Informationen über alle installierte Pakete werden in /var/db/pkg abgelegt. Das Verzeichnis enthält Dateien, in denen sich die Beschreibungen der Pakete und Listen von Dateien, die zu einem Paket gehören, befinden.


5.5. Benutzen der Ports-Sammlung

Die folgenden Abschnitte stellen die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung auf Ihren Rechner zu installieren oder zu löschen. ports(7) enthält eine Auflistung aller verfügbaren make-Targets und Umgebungsvariablen.


5.5.1. Installation der Ports-Sammlung

Bevor Sie einen Port installieren können, müssen Sie zuerst die Ports-Sammlung installieren, die aus Makefiles, Patches und Beschreibungen besteht. Die Ports-Sammlung wird für gewöhnlich unter /usr/ports installiert.

Bei der FreeBSD-Installation hatten Sie in sysinstall die Möglichkeit, die Ports-Sammlung zu installieren. Wenn Sie die Sammlung damals nicht installiert haben, können Sie das mit den folgenden Anweisungen nachholen:

Installieren mit CVSup

Dies ist eine schnelle Methode, um die Ports-Sammlung zu installieren und zu aktualisieren. CVSup wird im Abschnitt Benutzen von CVSup des Handbuchs beschrieben.

Anmerkung: Die im Basissystem enthaltene Variante des CVSup-Protokolls heißt csup.

Achten Sie darauf, dass das Verzeichnis /usr/ports leer ist, bevor Sie csup das erste Mal ausführen! Haben Sie die Ports-Sammlung zuvor schon aus einer anderen Quelle installiert, wird csup bereits aus dem Repository entfernte Patches nicht aus der lokalen Kopie der Ports-Sammlung löschen.

  1. Rufen Sie csup auf:

    # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
    

    Ersetzen Sie cvsup.FreeBSD.org durch einen CVSup-Server in Ihrer Nähe. Eine vollständige Liste der CVSup-Spiegel finden Sie im Abschnitt CVSup-Server des Handbuchs.

    Anmerkung: Sie sollten sich eine an Ihre Bedürfnisse angepasste ports-supfile erstellen, um so beispielsweise zu vermeiden, dass Sie bei jedem Aufruf von CVSup wieder die Parameterliste übergeben müssen.

    1. Dazu kopieren Sie zuerst als root die Datei /usr/share/examples/cvsup/ports-supfile nach /root oder in Ihr Heimatverzeichnis.

    2. Danach müssen Sie die Datei ports-supfile anpassen.

    3. Dazu ersetzen Sie cvsup.FreeBSD.org durch einen CVSup-Server in Ihrer Nähe. Eine vollständige Liste der CVSup-Spiegel finden Sie im Abschnitt CVSup-Server des Handbuchs.

    4. Nun können Sie csup mit folgender Syntax starten:

      # csup -L 2 /root/ports-supfile
      
  2. Mit csup(1) können Sie später auch die Ports-Sammlung aktualisieren. Die installierten Ports werden mit diesem Kommando allerdings nicht aktualisiert.

Installieren mit Portsnap

Bei Portsnap handelt es sich um ein alternatives System zur Distribution der Ports-Sammlung. Eine detaillierte Beschreibung von Portsnap finden Sie im Abschnitt Portsnap: Ein Werkzeug zur Aktualisierung der Ports-Sammlung des Handbuchs.

  1. Laden Sie einen komprimierten Snapshot der Ports-Sammlung in das Verzeichnis /var/db/portsnap herunter. Danach können Sie die Internetverbindung trennen, wenn Sie dies wünschen.

    # portsnap fetch
    
  2. Wenn Sie Portsnap das erste Mal verwenden, müssen Sie den Snapshot nach /usr/ports extrahieren:

    # portsnap extract
    

    Ist die Ports-Sammlung bereits installiert, und Sie wollen diese nur aktualisieren, führen Sie stattdessen folgenden Befehl aus:

    # portsnap update
    

Installieren mit sysinstall

Nicht zuletzt ist es auch möglich, die Ports-Sammlung über sysinstall zu installieren. Beachten Sie dabei aber, dass bei dieser Methode nicht die aktuellste Version der Ports-Sammlung, sondern die Version, die zum Zeitpunkt der Veröffentlichung der installierten FreeBSD-Version aktuell war, installiert wird. Haben Sie Zugriff auf das Internet, so sollten Sie daher stets eine der weiter oben beschriebenen Methoden verwenden, um die Ports-Sammlung zu installieren.

  1. Führen Sie als root sysinstall aus:

    # sysinstall
    
  2. Wählen Sie den Punkt Configure aus und drücken Sie Enter.

  3. Wählen Sie dann Distributions aus und drücken Sie Enter.

  4. In diesem Menü wählen Sie ports aus und drücken die Leertaste.

  5. Danach wählen Sie Exit aus und drücken Enter.

  6. Legen Sie nun ein geeignetes Installationsmedium, wie CD-ROM oder FTP, fest.

  7. Wählen Sie nun Exit aus und drücken Enter.

  8. Verlassen Sie sysinstall mit X.


5.5.2. Ports installieren

Was ist mit einem “Gerüst” im Zusammenhang mit der Ports-Sammlung gemeint? In aller Kürze: ein Gerüst eines Ports ist ein minimaler Satz von Dateien, mit denen das FreeBSD-System eine Anwendung sauber übersetzen und installieren kann. Ein jeder Port beinhaltet:

  • Eine Datei Makefile. Das Makefile enthält verschiedene Anweisungen, die spezifizieren, wie eine Anwendung kompiliert wird und wo sie auf Ihrem System installiert werden sollte.

  • Eine Datei distinfo. Diese enthält Informationen, welche Dateien heruntergeladen werden müssen sowie deren MD5-Prüfsummen (die Sie mit sha256(1) überprüfen können, um sicher zu gehen, dass diese Dateien während des Herunterladens nicht beschädigt wurden).

  • Ein files Verzeichnis. Hierin liegen Patches, welche das Übersetzen und Installieren der Anwendung ermöglichen. Patches sind im Wesentlichen kleine Dateien, die Änderungen an speziellen Dateien spezifizieren. Sie liegen als reiner Text vor und sagen ungefähr: “Lösche Zeile 10” oder “Ändere Zeile 26 zu ...”. Patches sind auch bekannt unter dem Namen “diffs”, weil Sie mit dem Programm diff(1) erstellt werden.

    Dieses Verzeichnis kann auch noch andere Dateien enthalten, welche zum Bauen des Ports benutzt werden.

  • Eine Datei pkg-descr. Eine ausführlichere, oft mehrzeilige Beschreibung der Anwendung.

  • Eine Datei pkg-plist. Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die zum Entfernen des Ports benötigt werden.

Einige Ports besitzen noch andere Dateien, wie pkg-message, die vom Portsystem benutzt werden, um spezielle Situationen zu handhaben. Wenn Sie mehr über diese Dateien oder das Port-System erfahren sollen, lesen Sie bitte das FreeBSD Porter's Handbook.

Ein Port enthält lediglich Anweisungen, wie der Quelltext zu bauen ist, nicht aber den eigentlichen Quelltext. Den Quelltext erhalten Sie von einer CD-ROM oder aus dem Internet. Quelltexte werden in einem Format nach Wahl des jeweiligen Software-Autors ausgeliefert. Häufig ist dies ein gezipptes Tar-Archiv, aber es kann auch mit einem anderen Tool komprimiert oder gar nicht komprimiert sein. Der Quelltext, in welcher Form er auch immer vorliegen mag, wird “Distfile” genannt. Die zwei Methoden, mit denen ein Port installiert wird, werden unten besprochen.

Anmerkung: Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein.

Warnung: Stellen Sie sicher, dass die Ports-Sammlung aktuell ist, bevor Sie einen Port installieren. Informieren Sie sich vorher zusätzlich unter http://vuxml.FreeBSD.org/ über mögliche Sicherheitsprobleme des zu installierenden Ports.

Vor der Installation kann portaudit eine neue Anwendung automatisch auf Sicherheitslöcher prüfen. Das Werkzeug befindet sich in der Ports-Sammlung (ports-mgmt/portaudit). Vor der Installation einer neuen Anwendung sollten Sie mit portaudit -F die Sicherheitsdatenbank aktualisieren. Die täglich laufende Sicherheitsprüfung des Systems aktualisiert die Datenbank und prüft installierte Anwendungen auf vorhandene Sicherheitslöcher. Weiteres erfahren Sie in den Hilfeseiten portaudit(1) und periodic(8).

Die Ports-Sammlung geht davon, dass Ihr System über eine funktionierende Internetverbindung verfügt. Ist dies nicht der Fall, müssen Sie eine Kopie des zu installierenden Distfiles manuell nach /usr/ports/distfiles kopieren.

Dazu wechseln Sie als erstes in das Verzeichnis des Ports, den Sie installieren wollen:

# cd /usr/ports/sysutils/lsof

Im Verzeichnis lsof kann man das Gerüst erkennen. Der nächste Schritt ist das Übersetzen (auch Bauen genannt) des Ports durch die Eingabe des Befehls make:

# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.57
...
[Ausgabe des Auspackens weggelassen]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure-Ausgabe weggelassen]
...
===>  Building for lsof-4.57
...
[Ausgabe der Übersetzung weggelassen]
...
#

Ist die Übersetzungsprozedur beendet, landen Sie wiederum in der Kommandozeile und können das Programm im nächsten Schritt installieren. Dazu verwenden Sie den Befehl make install:

# make install
===>  Installing for lsof-4.57
...
[Ausgabe der Installation weggelassen]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#

Nachdem die Installation abgeschlossen ist, können Sie die gerade installierte Anwendung starten. Da lsof eine Anwendung ist, die mit erhöhten Rechten läuft, wird eine Sicherheitswarnung angezeigt. Sie sollten alle Warnungen während des Baus und der Installation eines Ports beachten.

Es ist eine gute Idee, das Unterverzeichnis work nach erfolgter Installation wieder zu löschen. Einerseits gewinnen Sie dadurch Speicherplatz, andererseits könnte es sonst zu Problemen bei der Aktualisierung des Ports auf eine neuere Version kommen.

# make clean
===>  Cleaning for lsof-4.57
#

Anmerkung: Sie können zwei Schritte sparen, wenn Sie gleich make install clean anstelle von make, make install und make clean eingeben.

Anmerkung: Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine Liste der verfügbaren Kommandos in den durch die Umgebungsvariable PATH gegebenen Verzeichnissen. Nach der Installation eines Ports müssen Sie in einer solchen Shell vielleicht das Kommando rehash absetzen, um die neu installierten Kommandos benutzen zu können. Das Kommando rehash gibt es in Shells wie der tcsh. Unter Shells wie der sh benutzen Sie das Kommando hash -r. Weiteres entnehmen Sie bitte der Dokumentation Ihrer Shell.

Einige von Dritten angebotenen DVD-ROM-Produkte wie das FreeBSD Toolkit von der FreeBSD Mall enthalten auch Distfiles (komprimierte Quellcodepakete). Diese lassen sich über die Ports-Sammlung installieren. Dazu hängen Sie die DVD-ROM unter /cdrom in den Verzeichnisbaum ein. Wenn Sie einen anderen Mountpunkt verwenden, sollten Sie die make-Variable CD_MOUNTPTS setzen, damit die auf der DVD-ROM enthaltenen Distfiles automatisch verwendet werden.

Anmerkung: Beachten Sie bitte, dass die Lizenzen einiger Ports die Einbeziehung auf der CD-ROM verbieten. Das kann verschiedene Gründe haben. Beispielsweise eine Registrierung vor dem Herunterladen erforderlich oder die Weiterverteilung ist verboten. Wenn Sie einen Port installieren wollen, der nicht auf der CD-ROM enthalten ist, müssen Sie online sein.

Die Ports-Sammlung benutzt zum Herunterladen von Dateien fetch(3), das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen, oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in fetch(3).

Benutzer ohne eine ständige Internet-Verbindung werden das Kommando make fetch zu schätzen wissen. Das Kommando lädt alle benötigten Dateien eines Ports herunter. Sie können das Kommando im Verzeichnis /usr/ports laufen lassen. In diesem Fall werden alle Dateien heruntergeladen. Es ist auch möglich, make fetch nur in einem Teil des Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abhängigen Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn Sie diese Dateien ebenfalls herunterladen wollen, ersetzen Sie im Kommando fetch durch fetch-recursive.

Anmerkung: Abhängig davon, in welchem Verzeichnis Sie make aufrufen, können Sie analog zu make fetch die Ports einer Kategorie oder alle Ports bauen. Beachten Sie allerdings, dass manche Ports nicht zusammen installiert werden können. Weiterhin gibt es Fälle, in denen zwei Ports unterschiedliche Inhalte in derselben Datei speichern wollen.

Manchmal ist es erforderlich, die benötigten Dateien von einem anderen Ort als den im Port vorgesehenen herunterzuladen. Der Ort wird durch die Variable MASTER_SITES vorgegeben, die Sie wie folgt überschreiben können:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

Im Beispiel wurde MASTER_SITES mit dem Wert ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ überschrieben.

Anmerkung: Einige Ports besitzen Optionen, mit denen Sie zusätzliche Funktionen oder Sicherheitsoptionen einstellen können (oder manchmal auch müssen). Zusätzliche Optionen können beispielsweise für www/firefox, security/gpgme und mail/sylpheed-claws angegeben werden. Wenn ein Port über zusätzliche Optionen verfügt, werden diese beim Bau des Ports auf der Konsole ausgegeben.


5.5.2.1. Vorgabe-Verzeichnisse ändern

Manchmal ist es nützlich (oder erforderlich), in anderen Verzeichnissen zu arbeiten. Die Verzeichnisse können Sie mit den Variablen WRKDIRPREFIX und PREFIX einstellen. Die Variable WRKDIRPREFIX gibt das Bauverzeichnis an:

# make WRKDIRPREFIX=/usr/home/example/ports install

Dieses Kommando baut den Port in /usr/home/example/ports und installiert ihn unter /usr/local.

Die Variable PREFIX legt das Installations-Verzeichnis fest:

# make PREFIX=/usr/home/example/local install

In diesem Beispiel wird der Port unter /usr/ports gebaut und nach /usr/home/example/local installiert.

Sie können beide Variablen auch zusammen benutzen:

# make WRKDIRPREFIX=../ports PREFIX=../local install

Die Kommandozeile ist zu lang, um sie hier komplett wiederzugeben, aber Sie sollten die zugrunde liegende Idee erkennen.


5.5.2.2. Probleme mit imake

Einige Ports, welche imake(1) (Teil des X-Window-Systems) benutzen, funktionieren nicht gut mit PREFIX und bestehen darauf, unter /usr/X11R6 installiert zu werden. In ähnlicher Weise verhalten sich einige Perl-Ports, die PREFIX ignorieren und sich in den Perl-Verzeichnisbaum installieren. Zu erreichen, dass solche Ports PREFIX beachten, ist schwierig oder sogar unmöglich.


5.5.2.3. Ports rekonfigurieren

Beim Bau einiger Ports erhalten Sie ein ncurses-basiertes Menü, über dessen Optionen Sie den Bau dieser Ports beeinflussen können. Es gibt diverse Möglichkeiten, dieses Menü nach dem Bau eines Ports erneut aufzurufen, um beispielsweise Optionen zu entfernen, hinzuzufügen oder anzupassen. Sie können beispielsweise in das Verzeichnis des Ports wechseln und dort den Befehl make config eingeben, wodurch das Menü mit den ursprünglichen gewählten Optionen erneut aufgerufen wird. Eine andere Möglichkeit bietet der Befehl make showconfig, mit dem Sie eine Liste aller Konfigurationsoptionen dieses Ports aufrufen. Eine weitere Alternative bietet der Befehl make rmconfig, der die von Ihnen ursprünglich gewählten Optionen zurücksetzt und es Ihnen dadurch ermöglicht, die Konfiguration erneut zu beginnen. Die eben erwähnten Optionen (und viele andere) werden ausführlich in der Manualpage ports(7) beschrieben.


5.5.3. Entfernen installierter Ports

Da Sie nun wissen, wie man einen Port installiert, wollen Sie sicher auch wissen, wie man ein über einen Port installiertes Programm wieder deinstallieren kann. Ports werden analog zu Paketen mit pkg_delete(1) deinstalliert (Lesen Sie sich den Abschnitt Benutzen des Paketsystems des Handbuchs durch, wenn Sie weitere Informationen benötigen.). Für das vorhin installierte Programm lsof würden Sie dazu wie folgt vorgehen:

# pkg_delete lsof-4.57

5.5.4. Ports aktualisieren

Als erstes sollten sie sich alle installierten Ports anzeigen lassen, von denen eine aktuellere Version in der Ports-Sammlung existiert. Dazu verwenden Sie den Befehl pkg_version(1):

# pkg_version -v

5.5.4.1. /usr/ports/UPDATING

Nachdem Sie die Ports-Sammlung auf den neusten Stand gebracht haben, lesen Sie bitte zuerst die Datei /usr/ports/UPDATING, bevor Sie einen Port aktualisieren. In dieser Datei werden Probleme und zusätzlich durchzuführende Schritte bei der Aktualisierung einzelner Ports beschrieben. Dazu gehören solche Dinge wie geänderte Dateiformate, verschobene Konfigurationsdateien, aber auch Inkompatibilitäten zu einer Vorgängerversion.

Sollte UPDATING etwas hier Gesagtem widersprechen, so gilt das in UPDATING Gesagte.


5.5.4.2. Ports mit Portupgrade aktualisieren

portupgrade wurde entwickelt, um die Aktualisierung von Ports zu vereinfachen. Sie können portupgrade über den Port ports-mgmt/portupgrade wie jeden anderen Port mit make install clean installieren:

# cd /usr/ports/ports-mgmt/portupgrade/
# make install clean

Durchsuchen Sie regelmäßig (am besten vor jeder Aktualisierung) die Liste der installierten Ports mit pkgdb -F und beheben Sie alle gefundenen Probleme.

Wenn Sie portupgrade -a eingeben, beginnt portupgrade automatisch mit der Aktualisierung aller veralteter Ports Ihres Systems. Verwenden Sie den Schalter -i, wenn Sie individuell entscheiden wollen, ob ein Port aktualisiert werden soll:

# portupgrade -ai

Wenn Sie nur eine einzelne Anwendung anstelle aller Anwendungen aktualisieren wollen, verwenden Sie das Kommando portupgrade pkgname. Geben Sie den Schalter -R an, wenn portupgrade zuvor alle Ports aktualisieren soll, die von dem gegebenen Paket abhängen.

Der Schalter -P verwendet zur Installation Pakete anstelle von Ports. Mit dieser Option durchsucht portupgrade die in der Umgebungsvariablen PKG_PATH aufgeführten Verzeichnisse nach Paketen. Sind lokal keine Pakete vorhanden, versucht portupgrade die Pakete über das Netz herunterzuladen. Gibt es die Pakete weder lokal noch auf entfernten Rechnern, werden die Ports verwendet. Um dies zu verhindern, benutzen Sie die Option -PP.

# portupgrade -PP gnome2

Wenn Sie nur die Quelldateien des Ports (oder die Pakete mit -P) herunterladen möchten, ohne die Anwendung zu bauen oder zu installieren, geben Sie die Option -F an. Weitere Möglichkeiten lesen Sie bitte in der Hilfeseite portupgrade(1) nach.


5.5.4.3. Ports mit Portmanager aktualisieren

Portmanager ist ein weiteres Werkzeug, das die Aktualisierung installierter Ports erleichtert. Es kann über den Port ports-mgmt/portmanager installiert werden:

# cd /usr/ports/ports-mgmt/portmanager
# make install clean

Alle installierten Ports können danach durch folgende Eingabe aktualisiert werden:

# portmanager -u

Wenn Sie zusätzlich die Optionen -ui an Portmanager übergeben, werden Sie bei jedem Schritt um eine Bestätigung gefragt. Portmanager ist außerdem in der Lage, neue Ports auf Ihrem System zu installieren. Im Gegensatz zum bekannten make install clean aktualisiert es aber vor dem Bau und der Installation eines Ports alle abhängigen Ports.

# portmanager x11/gnome2

Treten bei den Abhängigkeiten des zu installierenden Ports Probleme auf, ist Portmanager in der Lage, alle Abhängigkeiten in der korrekten Reihenfolge neu zu bauen. Nachdem dieser Schritt abgeschlossen ist, wird der problematische Port ebenfalls neu gebaut.

# portmanager graphics/gimp -f

Weitere Informationen finden Sie in der Manualpage portmanager(1).


5.5.4.4. Ports mit Portmaster aktualisieren

Bei Portmaster handelt es sich um ein weiteres Werkzeug zum Aktualisieren von Ports. Portmaster nutzt nur Werkzeuge, die bereits im Basissystem vorhanden sind (ist also nicht von weiteren Ports abhängig). Es verwendet Informationen in /var/db/pkg/, um festzustellen, welche Ports aktualisiert werden sollen. Sie können dieses Program über den Port ports-mgmt/portmaster installieren:

# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Portmaster teilt Ports in vier Kategorien ein:

  • Root ports (no dependencies, not depended on)

  • Trunk ports (no dependencies, are depended on)

  • Branch ports (have dependencies, are depended on)

  • Leaf ports (have dependencies, not depended on)

Um eine Liste aller installierter Ports anzuzeigen (und nach neueren Versionen zu suchen), verwenden Sie die Option -L:

# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.2.3
        ===>>> New version available: apache-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available
	

Um alle derzeit installierten Ports zu aktualisieren, verwenden Sie einfach den folgenden Befehl:

# portmaster -a

Anmerkung: In der Voreinstellung erzeugt Portmaster eine Sicherheitskopie, bevor ein installierter Port gelöscht wird. Ist die Installation der neuen Version erfolgreich, wird dieses Backup wieder gelöscht. Wollen Sie das Backup lieber manuell löschen, verwenden Sie die Option -b beim Aufruf von Portmaster. Durch die Verwendung der Option -i wird Portmaster im interaktiven Modus gestartet und fragt bei jedem zu aktualisierenden Port nach, wie Sie vorgehen wollen.

Treten während der Aktualisierung Fehler auf, können Sie die Option -f verwenden, um alle Ports zu aktualisieren beziehungsweise neu zu bauen:

# portmaster -af

Portmaster ist auch in der Lage, neue Ports zu installieren, wobei zuvor alle abhängigen Ports aktualisiert werden:

# portmaster shells/bash

Weiterführende Informationen finden Sie in der Manualpage portmaster(8).


5.5.5. Platzbedarf von Ports

Die Ports-Sammlung kann sehr viel Plattenplatz verschlingen. Führen Sie nach dem Bau und der Installation eines Ports make clean aus, um die Arbeitsverzeichnisse zu löschen. Dieser Befehl entfernt das Verzeichnis work des gebauten Ports. Wollen Sie die gesamte Ports-Sammlung aufräumen, verwenden Sie folgenden Befehl:

# portsclean -C

Im Laufe der Zeit werden sich zahlreiche Distfiles im Verzeichnis distfiles ansammeln. Sie können diese entweder händisch löschen, oder Sie verwenden den folgenden Befehl, um alle Distfiles zu löschen, die nicht länger benötigt werden:

# portsclean -D

Falls Sie nur alle Distfiles löschen wollen, die von keinem derzeit installierten Port referenziert werden:

# portsclean -DD

Anmerkung: Das Werkzeug portsclean wird automatisch bei der Installation von portupgrade mit installiert.

Denken Sie daran, installierte Ports wieder zu entfernen, wenn Sie diese nicht mehr benötigen. Um diese Arbeit zu erleichtern, können Sie den Port ports-mgmt/pkg_cutleaves installieren.


5.6. Nach der Installation

Nach der Installation einer neuen Anwendung wollen Sie wahrscheinlich die mitgelieferte Dokumentation lesen und die Konfigurationsdateien der Anwendung anpassen. Wenn die Anwendung ein Dæmon ist, sollten Sie sicherstellen, dass die Anwendung beim Booten startet.

Die einzelnen Schritte sind natürlich von Anwendung zu Anwendung verschieden. Wenn Sie sich allerdings nach der Installation einer Anwendung die Frage “Was nun?” stellen, helfen die folgenden Hinweise vielleicht weiter.

  • Finden Sie mit pkg_info(1) heraus, welche Dateien die Anwendung wo installiert hat. Wenn Sie beispielsweise gerade die Version 1.0.0 von FooPackage installiert haben, zeigt Ihnen das folgende Kommando alle installierten Dateien des Pakets:

    # pkg_info -L foopackage-1.0.0 | less
    

    Achten Sie besonders auf die Manualpages, die Sie in man/ Verzeichnissen finden und auf Konfigurationsdateien, die in etc/ abgelegt werden. Manche Pakete enthalten in doc/ zusätzliche Dokumentation.

    Wenn Sie sich nicht sicher sind, welche Version einer Anwendung Sie gerade installiert haben, können Sie mit dem folgenden Kommando nach der Anwendung suchen:

    # pkg_info | grep -i foopackage
    

    Das Kommando zeigt alle installierten Pakete, deren Paketname foopackage enthält. Ersetzen Sie foopackage durch den Namen der Anwendung, die Sie suchen.

  • Nachdem Sie die Manualpages der Anwendung gefunden haben, lesen Sie diese bitte mit man(1). Schauen Sie sich auch die Beispiele für Konfigurationsdateien und die zusätzliche Dokumentation, wenn es welche gibt, an.

  • Wenn es für die Anwendung eine Webseite gibt, suchen Sie dort nach zusätzlicher Dokumentation wie FAQs (häufig gestellte Fragen). Wenn Sie die Adresse der Webseite nicht kennen, versuchen Sie das folgende Kommando:

    # pkg_info foopackage-1.0.0
    

    Die Ausgabe enthält oft eine Zeile, die mit WWW: beginnt und die URL der Webseite enthält.

  • Ports, die während des Systemstarts gestartet werden sollen, installieren meist ein Beispielskript im Verzeichnis /usr/local/etc/rc.d. Überprüfen Sie dieses Skript. Wenn nötig, passen Sie das Skript an und benennen Sie es um. Weitere Informationen finden Sie in Abschnitt 12.5.


5.7. Kaputte Ports

Stolpern Sie einmal über einen Port, der bei Ihnen nicht funktioniert, könnten Sie zum Beispiel Folgendes tun:

  1. Stellen Sie fest, ob die Datenbank mit den Problemberichten bereits einen Lösungsvorschlag enthält. Ist dies der Fall, können Sie die vorgeschlagene Lösung testen.

  2. Bitten Sie den Betreuer des Ports um Hilfe. Geben Sie dazu make maintainer ein oder lesen Sie das Makefile im Verzeichnis des Ports, um an die E-Mail-Adresse zu kommen. Vergessen Sie nicht den Namen und die Version des Ports (schicken Sie die Zeile mit $FreeBSD: aus dem Makefile) und die Ausgabe bis zur Fehlermeldung mitzuschicken.

    Anmerkung: Einige Ports werden nicht von einer Einzelperson, sondern von einer Mailingliste betreut. Viele (aber nicht alle) dieser Adressen haben die Form . Denken Sie daran, wenn Sie Ihre Fragen formulieren.

    Dies gilt insbesondere für Ports, die als als Betreuer den Eintrag aufweisen. Derartige Ports haben überhaupt keinen Betreuer. Korrekturen und Unterstützung kommen daher nur von Personen, die diese Mailingliste abonniert haben. Gerade in diesem Bereich werden jederzeit zusätzliche freiwillige Helfer benötigt!

    Erhalten Sie auf Ihre Anfrage keine Antwort, können Sie über send-pr(1) einen Problembericht erstellen. Bevor Sie einen solchen Bericht erstellen, sollten Sie den Artikel Writing FreeBSD Problem Reports lesen.

  3. Reparieren Sie ihn! Das FreeBSD Porter's Handbook enthält eine detaillierte Beschreibung des Portsystems. Damit sind Sie in der Lage, einen gelegentlich kaputten Port zu reparieren oder einen eigenen Port zu erstellen.

  4. Holen Sie sich das Paket von einem FTP-Server in Ihrer Nähe. Die “Basis”-Sammlung aller Pakete liegt auf ftp.de.FreeBSD.org im Verzeichnis packages. Aber versuchen Sie zuerst einen Spiegel in Ihrer Nähe! Benutzen Sie das Programm pkg_add(1), um Pakete auf Ihrem Rechner zu installieren. Dies hat zudem den Vorteil, dass es schneller geht.


Kapitel 6. Das X-Window-System

Erweitert um X.Orgs X11-Server von Ken Tom und Marc Fonvieille. Übersetzt von Martin Heinen.

6.1. Übersicht

Mit X11 steht unter FreeBSD eine leistungsfähige frei verfügbare grafische Benutzeroberfläche zur Verfügung, die in Xorg (sowie in weiteren, hier nicht diskutierten Varianten) implementiert wurde. Xorg von der X.Org Foundation ist der voreingestellte Standard-X11-Server, der unter einer Lizenz ähnlich der von FreeBSD steht. Zusätzlich sind einige kommerzielle X-Server für FreeBSD verfügbar.

Auskunft über von X11 unterstützte Video-Hardware gibt die Webseite Xorg.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie

  • die Komponenten des X-Window-Systems und ihr Zusammenspiel kennen.

  • Wissen, wie X11 installiert und konfiguriert wird.

  • Wissen, wie Sie verschiedene Window-Manager installieren und benutzen.

  • Wissen, wie TrueType®-Schriftarten mit X11 benutzt werden.

  • Wissen, wie Sie die grafische Anmeldung (XDM) einrichten.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • wissen, wie Sie Software Dritter installieren (Kapitel 5).


6.2. X-Grundlagen

Anwendern anderer grafischer Benutzeroberflächen, wie Microsoft Windows oder Mac OS, kommt X beim ersten Mal oft befremdlich vor.

Man braucht kein weitreichendes Verständnis der X-Komponenten und Ihres Zusammenspiels, um X anzuwenden. Um die Stärken von X auszunutzen, sollten Sie allerdings die Grundlagen verstehen.


6.2.1. Warum heißt es X?

X ist nicht die erste grafische Benutzeroberfläche, die für UNIX geschrieben wurde. Die Entwickler von X arbeiteten vorher an einem anderen System, das W (von engl. window: Fenster) hieß. X ist schlicht der nächste Buchstabe im Alphabet.

X wird “X”, “X-Window-System” oder “X11” genannt. Sagen Sie bitte nicht “X-Windows”: das kommt bei einigen Leuten schlecht an (die Hilfeseite X(7) führt dies näher aus).


6.2.2. Das Client/Server-Modell von X

X wurde von Anfang an netzwerktransparent entworfen und verwendet ein Client-Server-Modell. In diesem Modell läuft der Server auf dem Rechner, an dem die Tastatur, der Bildschirm und die Maus angeschlossen ist. Der Server ist für Dinge wie die Verwaltung des Bildschirms und die Verarbeitung von Tastatur- und Maus-Eingaben sowie anderer Ein- und Ausgabegeräte (beispielsweise könnte ein “Tablet” zur Eingabe oder ein Videoprojektor zur Ausgabe verwendet werden) verantwortlich. Jede X-Anwendung, beispielsweise ein XTerm oder Netscape ist ein Client. Der Client sendet dem Server Nachrichten wie “Zeichne an diesen Koordinaten ein Fenster” und der Server sendet dem Client Nachrichten der Art “Der Benutzer hat gerade den Ok-Knopf gedrückt”.

In kleinen Umgebungen laufen der X-Server und die X-Clients auf demselben Rechner. Es ist aber durchaus möglich, den X-Server auf einem weniger leistungsfähigen Arbeitsplatzrechner laufen zu lassen und die X-Anwendungen (die Clients) auf dem leistungsfähigen und teuren Server der Arbeitsgruppe zu betreiben. In diesem Fall kommunizieren der X-Server und die X-Clients über das Netz.

Dieses Modell verwirrt viele Leute, die erwarten, dass der X-Server der dicke Rechner im Maschinenraum und der X-Client ihr Arbeitsplatzrechner ist.

Merken Sie sich einfach, dass der X-Server der Rechner mit dem Bildschirm und der Maus ist und die X-Clients Programme sind, die in den Fenstern laufen.

Das X-Protokoll ist unabhängig vom verwendeten Betriebssystem und Rechnertyp. Ein X-Server kann durchaus auch unter Microsoft Windows oder Apples Mac OS betrieben werden, wie viele kostenlose und kommerzielle Anwendungen zeigen.


6.2.3. Der Window-Manager

Die X-Philosophie “Werkzeuge statt Richtlinien” ist wie die UNIX-Philosophie. Es wird nicht vorgeschrieben, wie eine Aufgabe zu lösen ist, stattdessen erhält der Benutzer Werkzeuge, über die er frei verfügen kann.

Dies geht so weit, dass X nicht bestimmt, wie Fenster auf dem Bildschirm auszusehen haben, wie sie mit der Maus zu verschieben sind, welche Tastenkombination benutzt werden muss, um zwischen den Fenstern zu wechseln (z.B. Alt+Tab unter Microsoft Windows), oder ob die Fensterrahmen Schaltflächen zum Schließen haben.

X gibt die Verantwortung für all diese Sachen an eine Anwendung ab, die Window-Manager genannt wird. Unter X gibt es zahlreiche Window-Manager: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker um nur einige zu nennen. Jeder dieser Window-Manager sieht anders aus: Manche stellen virtuelle Bildschirme zur Verfügung, in anderen lassen sich die Tastenkombinationen zur Verwaltung des Bildschirms anpassen, einige besitzen eine Startleiste oder etwas Ähnliches und in manchen lässt sich das Aussehen und Verhalten über die Anwendung von Themes beliebig einstellen. Die eben genannten Window-Manager und viele weitere finden Sie in der Kategorie x11-wm der Ports-Sammlung.

Die grafischen Benutzeroberflächen KDE und GNOME besitzen eigene Window-Manager, die in den grafischen Arbeitsplatz integriert sind.

Die Window-Manager werden unterschiedlich konfiguriert. Einige erwarten eine manuell erstellte Konfigurationsdatei, andere bieten grafische Werkzeuge für die meisten Konfigurationsarbeiten an. Die Konfigurationsdatei von Sawfish ist sogar in einem Lisp-Dialekt geschrieben.

Fokus: Der Window-Manager ist für die Methode, mit der ein Fenster den Fokus bekommt, verantwortlich. Jedes System, das Fenster verwendet, muss entscheiden, wie ein Fenster aktiviert wird, damit es Eingaben empfangen kann. Das aktive Fenster sollte zudem sichtbar gekennzeichnet werden.

Eine geläufige Methode, den Fokus zu wechseln, wird “click-to-focus” genannt. Die Methode wird in Microsoft Windows benutzt: Ein Fenster wird aktiv, wenn es mit der Maus angeklickt wird.

X legt nicht fest, wie der Fokus einzustellen ist, stattdessen bestimmt der Window-Manager welches Fenster den Fokus zu einem gegebenen Zeitpunkt erhält. Alle Window-Manager stellen die Methode “click-to-focus” bereit, die meisten stellen auch noch andere Methoden bereit.

Verbreitete Methoden, den Fokus einzustellen, sind:

focus-follows-mouse

Den Fokus hat das Fenster, unter dem sich der Mauszeiger befindet. Das muss nicht unbedingt das Fenster, sein, das sich vorne befindet. Wird der Mauszeiger in ein anderes Fenster bewegt, so erhält dieses Fenster den Fokus, ohne das es angeklickt werden muss.

sloppy-focus

Diese Methode erweitert die Methode “focus-follows-mouse”. Wenn die Maus mit “focus-follows-mouse” aus dem Fenster auf die Oberfläche bewegt wird, verliert das aktive Fenster den Fokus. Da dann kein Fenster mehr den Fokus hat, gehen alle Eingaben verloren. Die Methode “sloppy-focus” wechselt den Fokus nur, wenn sich der Mauszeiger in ein neues Fenster bewegt und nicht, wenn er das aktive Fenster verlässt.

click-to-focus

Das aktive Fenster wird durch einen Mausklick festgelegt (dabei kann das Fenster vor alle anderen Fenster gesetzt werden). Alle Eingaben werden dann, unabhängig von der Position des Mauszeigers, dem aktiven Fenster zugeordnet.

Viele Window-Manager unterstützen noch andere Methoden, so wie Abwandlungen der hier vorgestellten Methoden. Schauen Sie sich dazu bitte die Hilfeseiten Ihres Window-Managers an.


6.2.4. Widgets

Die X-Philosophie dehnt sich auch auf die Widgets aus, die von den Anwendungen benutzt werden.

Ein Widget bezeichnet Objekte, die manipuliert werden können, wie buttons (Schaltflächen), check buttons (Mehrfachauswahlknopf), radio buttons (Einfachauswahlknopf), Icons und Auswahllisten. Unter Microsoft Windows werden Widgets Controls genannt.

Microsoft Windows und Apples Mac OS geben strenge Richtlinien für Widgets vor: Von den Entwicklern wird erwartet, dass Sie Anwendungen mit einheitlichem Aussehen und einheitlicher Bedienung (look and feel) entwickeln. X gibt weder einen Stil noch Widgets vor, die benutzt werden müssen.

Erwarten Sie daher nicht, dass alle X-Anwendungen gleich aussehen oder sich gleich bedienen lassen. Es gibt mehrere verbreitete Widget-Sammlungen, beispielsweise die Athena-Widgets vom MIT, Motif® (abgeschrägte Ecken und drei Grautöne, danach wurden die Widgets von Microsoft Windows entworfen) oder OpenLook.

Die meisten neuen X-Anwendungen benutzen heute modern aussehende Widgets, wie Qt, das von KDE benutzt wird oder GTK+, das von GNOME benutzt wird. Damit wird eine gewisse Einheitlichkeit in Bedienung und Aussehen erreicht, die sicher neuen Benutzern die Arbeit erleichtert.


6.3. X11 installieren

Xorg ist der Standard-X-Server unter FreeBSD. Xorg ist der von der X.Org Foundation herausgegebene X-Server des Open-Source X Window Systems. Xorg beruht auf XFree86 4.4RC2 und X11R6.6. Derzeit ist die Version 7.5.2 von Xorg in der Ports-Sammlung vorhanden.

Die nachstehenden Kommandos bauen und installieren Xorg aus der Ports-Sammlung:

# cd /usr/ports/x11/xorg
# make install clean

Anmerkung: Der komplette Bau von Xorg benötigt mindestens 4 GB freien Plattenplatz.

Mit pkg_add(1) können Sie X11 direkt von fertigen Paketen installieren. Wenn pkg_add(1) die Pakete herunterlädt, lassen Sie die Versionsnummer aus. pkg_add(1) holt automatisch die aktuelle Version eines Pakets.

Das Xorg-Paket holen und installieren Sie wie folgt:

# pkg_add -r xorg

Anmerkung: Die obigen Beispiele installieren die vollständige X11-Distribution, die unter anderem Server, Clients und Fonts enthält. Für die einzelnen Teile der Distribution gibt es ebenfalls separate Pakete.

Alternativ können Sie x11/xorg-minimal verwenden, um eine minimale X11-Distribution zu installieren.

Der Rest dieses Kapitels erklärt, wie Sie X11 konfigurieren und sich eine Arbeitsumgebung einrichten.


6.4. X11 konfigurieren

Beigetragen von Christopher Shumway.

6.4.1. Vorarbeiten

Bevor Sie X11 konfigurieren, benötigen Sie folgende Informationen:

  • die Spezifikationen des Monitors

  • den Chipset des Grafikadapters

  • die Speichergröße des Grafikadapters

Aus den Spezifikationen des Monitors ermittelt X11 die Auflösung und die Wiederholrate für den Betrieb des X-Servers. Die Spezifikationen entnehmen Sie der Dokumentation des Monitors oder der Webseite des Herstellers. Sie benötigen die horizontale und die vertikale Synchronisationsfrequenz.

Der Chipsatz der Grafikkarte bestimmt den Treiber, den X11 verwendet. Die meisten Chipsätze werden automatisch erkannt, Sie brauchen die Information jedoch, wenn die Erkennung fehlschlägt.

Die Speichergröße der Grafikkarte bestimmt die maximal mögliche Auflösung und Farbtiefe.


6.4.2. X11 konfigurieren

Xorg verwendet HAL, um Tastaturen und Mäuse automatisch zu erkennen. Die Ports sysutils/hal und devel/dbus werden als Abhängigkeiten von x11/xorg installiert, müssen aber durch die folgenden Einträge in /etc/rc.conf aktiviert werden:

hald_enable="YES"
dbus_enable="YES"

Diese Dienste sollten (entweder manuell oder durch einen Neustart) gestartet werden, bevor mit der weiteren Konfiguration oder Verwendung von Xorg begonnen wird.

Xorg kann oft schon ohne weitere Konfigurationsschritte laufen, indem am Prompt folgendes eingegeben wird:

% startx

Die automatische Konfiguration kann mit bestimmter Hardware fehlschlagen oder gewisse Dinge nicht so einrichten, wie gewünscht. In diesen Fällen ist eine manuelle Konfiguration notwendig.

Anmerkung: Grafische Oberflächen wie GNOME, KDE oder Xfce besitzen eigene Werkzeuge, die es dem Benutzer erlauben, auf einfache Art und Weise die Bildschirmparameter wie die Auflösung zu ändern. Falls die Standardkonfiguration für Sie nicht akzeptabel ist und die Installation einer grafischen Oberfläche geplant ist, fahren Sie damit fort und benutzen Sie dann das entsprechende Werkzeug für die Bildschirmeinstellungen.

Die X11 Konfiguration spielt sich in mehreren Schritten ab. Dazu erstellen Sie als erstes eine Vorgabe für die Konfigurationsdatei. Setzen Sie dazu als root den folgenden Befehl ab:

# Xorg -configure

Die Vorgabe-Konfiguration wird dann unter dem Namen xorg.conf.new im Verzeichnis /root gespeichert (das verwendete Verzeichnis wird durch die Umgebungsvariable $HOME bestimmt und hängt davon ab, wie Sie zu root gewechselt sind). X11 hat in diesem Schritt versucht, die Grafik-Hardware des Systems zu erkennen und eine Konfigurationsdatei ausgeschrieben, die zur Hardware passende Treiber lädt.

Im nächsten Schritt wird geprüft, ob Xorg die Grafik-Hardware des Systems verwenden kann. Setzen Sie dazu den folgenden Befehl ab:

# Xorg -config xorg.conf.new -retro

Wenn jetzt ein graues Raster und der X-Mauszeiger erscheinen, war die Konfiguration erfolgreich. Beenden Sie den Test, indem Sie auf die virtuelle Konsole wechseln, die Sie verwendet haben, um den Test zu starten, durch gleichzeitiges drücken von Ctrl+Alt+Fn (F1 für die erste virtuelle Konsole) und drücken anschliessend Ctrl+C.

Anmerkung: Die Tastenkombination Ctrl+Alt+Backspace kann verwendet werden, um Xorg zu beenden. Um diese zu aktivieren, fügen geben Sie entweder den folgenden Befehl von einem X-Terminalemulator ein:

% setxkbmap -option terminate:ctrl_alt_bksp

oder erstellen Sie eine Tastaturkonfigurationsdatei für hald, x11-input.fdi genannt, und legen Sie diese im Verzeichnis /usr/local/etc/hal/fdi/policy ab. Diese Datei sollte die folgenden Zeilen enthalten:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
   <device>
     <match key="info.capabilities" contains="input.keyboard">
           <merge key="input.x11_XkbOptions" type="string">terminate:ctrl_alt_bksp</merge>
     </match>
   </device>
</deviceinfo>

Sie müssen anschliessend ihren Computer neu starten, um hald zu zwingen, diese Datei einzulesen.

Die folgende Zeile muss ebenfalls zu xorg.conf.new hinzugefügt werden, entweder in den Abschnitt ServerLayout oder ServerFlags:

Option  "DontZap"       "off"

Wenn die Maus nicht funktioniert, prüfen Sie, ob die Maus konfiguriert wurde. Die Mauskonfiguration wird in Abschnitt 2.10.10 im FreeBSD-Installationskapitel beschrieben. In neueren Xorg-Versionen werden die InputDevice-Abschnitte in xorg.conf ignoriert, um stattdessen die automatisch erkannten Geräte zu verwenden. Um das alte Verhalten wiederherzustellen, fügen Sie die folgende Zeile zum ServerLayout- oder dem ServerFlags-Abschnitt dieser Datei hinzu:

Option "AutoAddDevices" "false"

Eingabegeräte können dann wie in den vorherigen Versionen konfiguriert werden, zusammen mit anderen benötigen Optionen (z.B. wechseln des Tastaturlayouts).

Anmerkung: Wie zuvor erwähnt, wird standardmässig der hald-Dienst automatisch Ihre Tastatur erkennen. Es kann passieren, dass ihr Tastaturlayout oder das Modell nicht korrekt erkannt wird. Grafische Oberflächen wie GNOME, KDE oder Xfce stellen Werkzeuge für die Konfiguration der Tastatur bereit. Es ist allerdings auch möglich, die Tastatureigenschaften direkt zu setzen, entweder mit Hilfe von setxkbmap(1) oder mit einer Konfigurationsregel von hald.

Wenn Sie zum Beispiel eine PC 102-Tasten Tastatur mit französischem Layout verwenden möchten, mössen Sie eine Tastaturkonfigurationsdatei für hald, genannt x11-input.fdi, im Verzeichnis /usr/local/etc/hal/fdi/policy ablegen. Diese Datei sollte die folgenden Zeilen enthalten:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
   <device>
     <match key="info.capabilities" contains="input.keyboard">
           <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
           <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
     </match>
   </device>
</deviceinfo>

Wenn diese Datei bereits existiert, kopieren Sie nur die Zeilen in diese Datei, welche die Tastaturkonfiguration betreffen.

Sie mössen Ihren Computer neu starten, um hald zu zwingen, diese Datei einzulesen.

Es ist möglich, die gleiche Konfiguration von einem X-Terminal oder einem Skript über den folgenden Befehl heraus zu tätigen:

% setxkbmap -model pc102 -layout fr

Die Datei /usr/local/share/X11/xkb/rules/base.lst listet die verschiedenen Tastatur- und Layoutoptionen auf, die Ihnen zur Verfügung stehen.

Als Nächstes passen Sie xorg.conf.new an. Öffnen Sie die Datei in einem Editor, wie emacs(1) oder ee(1) und fügen Sie die Synchronisationsfrequenzen des Monitors ein. Die Frequenzen werden im Abschnitt "Monitor" eingetragen:

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        HorizSync    30-107
        VertRefresh  48-120
EndSection

Unter Umständen fehlen die Schlüsselwörter HorizSync und VertRefresh, die Sie dann nachtragen müssen. Geben Sie, wie im Beispiel gezeigt, die horizontale Synchronisationsfrequenz hinter HorizSync und die vertikale Synchronisationsfrequenz hinter VertRefresh an.

X unterstützt die Energiesparfunktionen (DPMS, Energy Star) Ihres Monitors. Mit xset(1) können Sie Zeitschranken für die DPMS-Modi “standby”, “suspend”, “off” vorgeben, oder diese zwingend aktivieren. Die DPMS-Funktionen können Sie mit der nachstehenden Zeile im "Monitor"-Abschnitt aktivieren:

Option       "DPMS"

Die gewünschte Auflösung und Farbtiefe stellen Sie im Abschnitt "Screen" ein:

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth 24
        SubSection "Display"
                Viewport  0 0
                Depth     24
                Modes     "1024x768"
        EndSubSection
EndSection

Mit DefaultDepth wird die Farbtiefe des X-Servers vorgegeben. Mit der Option -depth von Xorg(1) lässt sich die vorgegebene Farbtiefe überschreiben. Modes gibt die Auflösung für die angegebene Farbtiefe an. Die Farbtiefe im Beispiel beträgt 24 Bits pro Pixel, die zugehörige Auflösung ist 1024x768 Pixel. Beachten Sie, dass in der Voreinstellung nur Standard-VESA-Modi der Grafikkarte angegeben werden können.

Sichern Sie die Konfigurationsdatei und testen Sie die Konfiguration wie oben beschrieben.

Anmerkung: Bei der Fehlersuche sind Ihnen die Protokolle des X11-Servers behilflich. In den Protokollen wird die gefundene Graphik-Hardware protokolliert. Die Protokolle von Xorg heißen /var/log/Xorg.0.log. Die Dateinamen enthalten eine laufende Nummer, der Name variiert daher von Xorg.0.log zu Xorg.8.log.

Wenn alles funktioniert hat, installieren Sie die Datei an einen Ort, an dem Xorg(1) sie findet. Normalerweise wird die Konfigurationsdatei unter /etc/X11/xorg.conf oder /usr/local/etc/X11/xorg.conf gespeichert:

# cp xorg.conf.new /etc/X11/xorg.conf

Damit ist die X11-Konfiguration beendet und Xorg kann nun mithilfe von startx(1) gestartet werden. Alternativ können Sie X11 auch mit xdm(1) starten.


6.4.3. Spezielle Konfigurationen

6.4.3.1. Konfiguration des Intel® i810 Graphics Chipsets

Der Intel i810-Chipset benötigt den Treiber agpgart, die AGP-Schnittstelle von X11. Weitere Informationen finden sich in agp(4).

Ab jetzt kann die Hardware wie jede andere Grafikkarte auch konfiguriert werden. Der Treiber agp(4) kann nicht nachträglich mit kldload(8) in einen laufenden Kernel geladen werden. Er muss entweder fest im Kernel eingebunden sein oder beim Systemstart über /boot/loader.conf geladen werden.


6.4.3.2. Einen Widescreen-Monitor einsetzen

Dieser Abschnitt geht über die normalen Konfigurationsarbeiten hinaus und setzt einiges an Vorwissen voraus. Selbst wenn die Standardwerkzeuge zur X-Konfiguration bei diesen Geräten nicht zum Erfolg führen, sollten sich in den Logdateien genug Informationen finden, mit denen Sie letztlich doch einen funktionierenden X-Server konfigurieren können. Alles, was Sie dazu noch benötigen, ist ein Texteditor.

Aktuelle Widescreen-Formate (wie WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, und andere mehr) unterstützen Seitenverhältnisse wie 16:10 oder 10:9, die unter X Probleme verursachen können. Bei einem Seitenverhältnis von 16:10 sind beispielsweise folgende Auflösungen möglich:

  • 2560x1600

  • 1920x1200

  • 1680x1050

  • 1440x900

  • 1280x800

Diese Konfiguration könnte so einfach sein wie das zusätzliche Anlegen eines Eintrags einer dieser Auflösungen als ein möglicher Mode in Section "Screen":

Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
DefaultDepth 24
SubSection "Display"
	Viewport  0 0
	Depth     24
	Modes     "1680x1050"
EndSubSection
EndSection

Xorg ist normalerweise intelligent genug, um die Informationen zu den erlaubten Auflösungen über I2C/DDC zu beziehen, und weiß daher, welche Auflösungen und Frequenzen Ihr Widescreen-Monitor unterstützt.

Wenn diese ModeLines in den Treiberdateien nicht vorhanden sind, kann es sein, dass Sie Xorg beim Finden der korrekten Werte unterstützen müssen. Dazu extrahieren Sie die benötigten Informationen aus der Datei /var/log/Xorg.0.log und erzeugen daraus eine funktionierende ModeLine. Dazu suchen Sie in dieser Datei nach Zeilen ähnlich den folgenden:

(II) MGA(0): Supported additional Video Mode:
(II) MGA(0): clock: 146.2 MHz   Image Size:  433 x 271 mm
(II) MGA(0): h_active: 1680  h_sync: 1784  h_sync_end 1960 h_blank_end 2240 h_border: 0
(II) MGA(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1089 v_border: 0
(II) MGA(0): Ranges: V min: 48  V max: 85 Hz, H min: 30  H max: 94 kHz, PixClock max 170 MHz

Diese Informationen werden auch als EDID-Informationen bezeichnet. Um daraus eine funktionierende ModeLine zu erzeugen, müssen Sie lediglich die Zahlen in die korrekte Reihenfolge bringen:

ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>

Die korrekte ModeLine in Section "Monitor" würde für dieses Beispiel folgendermaßen aussehen:

Section "Monitor"
Identifier      "Monitor1"
VendorName      "Bigname"
ModelName       "BestModel"
ModeLine        "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
Option          "DPMS"
EndSection

Nachdem diese Äderungen durchgeführt sind, sollte X auch auf Ihrem neuen Widescreen-Monitor starten.


6.5. Schriftarten in X11 benutzen

Beigetragen von Murray Stokely.

6.5.1. Type 1 Schriftarten

Die Schriftarten, die mit X11 geliefert werden, eignen sich ganz und gar nicht für Desktop-Publishing-Anwendungen. Große Schriftarten zeigen bei Präsentationen deutliche Treppenstufen und die kleinen Schriftarten in Netscape sind fast unleserlich. Es gibt allerdings mehrere hochwertige Type 1 Schriftarten (PostScript®), die mit X11 benutzt werden können. Beispielsweise enthalten die URW-Schriftarten (x11-fonts/urwfonts) hochwertige Versionen gängiger Type 1 Schriftarten (zum Beispiel Times Roman®, Helvetica®, Palatino®). Die Sammlung Freefonts (x11-fonts/freefonts) enthält noch mehr Schriftarten, doch sind diese für den Einsatz in Grafik-Programmen wie The Gimp gedacht. Es fehlen auch einige Schriftarten, sodass sich die Sammlung nicht für den alltäglichen Gebrauch eignet. Weiterhin kann X11 leicht so konfiguriert werden, dass es TrueType-Schriftarten verwendet. Mehr dazu erfahren Sie in der Hilfeseite X(7) und im Abschnitt TrueType Schriftarten.

Die Type 1 Schriftarten lassen sich aus der Ports-Sammlung wie folgt installieren:

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

Analog lassen sich Freefont und andere Sammlungen installieren. Die neuen Schriftarten müssen Sie in die Konfigurationsdatei des X-Servers im Verzeichnis /etc/X11 eintragen. Die Konfigurationsdatei von Xorg heißt xorg.conf. Fügen Sie die folgende Zeile hinzu:

FontPath "/usr/local/lib/X11/fonts/URW/"

Sie können aber auch in der X-Sitzung das folgende Kommando absetzen:

% xset fp+ /usr/local/lib/X11/fonts/URW
% xset fp rehash

Dann kennt der X-Server die neuen Schriftarten nur bis zum Ende der Sitzung. Wenn die Änderung dauerhaft sein soll, müssen Sie die Kommandos in ~/.xinitrc eintragen, wenn Sie X mit startx starten, oder in ~/.xsession, wenn Sie XDM benutzen. Sie können die Schriftarten auch in die neue Datei /usr/local/etc/fonts/local.conf, die im Abschnitt Anti-aliasing beschrieben wird, eintragen.


6.5.2. TrueType®-Schriftarten

Xorg kann TrueType-Schriftarten mithilfe von zwei Modulen darstellen. Im folgenden Beispiel wird das Freetype-Modul benutzt, da es besser mit anderen Werkzeugen, die TrueType-Schriftarten darstellen, übereinstimmt. Das Freetype-Modul aktivieren Sie im Abschnitt "Module" von /etc/X11/xorg.conf durch Einfügen der Zeile:

Load  "freetype"

Erstellen Sie ein Verzeichnis für die TrueType-Schriftarten (z.B. /usr/local/lib/X11/fonts/TrueType) und kopieren Sie alle Schriftarten dorthin. Die Schriftarten müssen im UNIX/MS-DOS/Windows-Format vorliegen, Schriftarten von einem Macintosh können Sie nicht direkt übernehmen. Die Schriftarten müssen noch im Katalog fonts.dir erfasst werden. Den Katalog erzeugen Sie mit dem Kommando ttmkfdir aus dem Port x11-fonts/ttmkfdir:

# cd /usr/local/lib/X11/fonts/TrueType
# ttmkfdir -o fonts.dir

Geben Sie dem System das TrueType-Verzeichnis, wie im Abschnitt Type 1 Schriftarten beschrieben, bekannt:

% xset fp+ /usr/local/lib/X11/fonts/TrueType
% xset fp rehash

Oder fügen Sie eine FontPath-Zeile in die Datei xorg.conf ein.

Das war's. Jetzt sollten Netscape, Gimp, StarOffice und alle anderen X-Anwendungen die TrueType-Schriftarten benutzen. Extrem kleine Schriftarten (Webseiten, die mit hoher Auflösung betrachtet werden) und sehr große Schriftarten (in StarOffice) sollten jetzt viel besser aussehen.


6.5.3. Anti-aliasing

Aktualisiert von Joe Marcus Clarke.

Alle Schriftarten in X11, die in den Verzeichnissen /usr/local/lib/X11/fonts/ und ~/.fonts/ gefunden werden, werden automatisch für Anti-aliasing an Anwendungen zur Verfügung gestellt, die Xft beherrschen. Die meisten aktuellen Anwendungen beherrschen Xft, dazu gehören auch KDE, GNOME und Firefox.

In der Datei /usr/local/etc/fonts/local.conf werden die Schriftarten, die mit dem Anti-aliasing-Verfahren benutzt werden sollen und die Eigenschaften des Verfahrens festgelegt. In diesem Abschnitt wird nur die grundlegende Konfiguration von Xft beschrieben. Weitere Details entnehmen Sie bitte der Hilfeseite fonts-conf(5).

Die Datei local.conf ist ein XML-Dokument. Achten Sie beim Editieren der Datei daher auf die richtige Groß- und Kleinschreibung und darauf, dass alle Tags geschlossen sind. Die Datei beginnt mit der üblichen XML-Deklaration gefolgt von einer DOCTYPE-Definition und dem <fontconfig>-Tag:

        <?xml version="1.0"?>
        <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
        <fontconfig>
     

Wie vorher erwähnt, stehen schon alle Schriftarten in /usr/local/lib/X11/fonts/ und ~/.fonts/ für Anwendungen, die Xft unterstützen, zur Verfügung. Wenn Sie ein Verzeichnis außerhalb dieser beiden Bäume benutzen wollen, fügen Sie eine Zeile wie die nachstehende zu /usr/local/etc/fonts/local.conf hinzu:

<dir>/path/to/my/fonts</dir>

Wenn Sie neue Schriftarten hinzugefügt haben, müssen Sie den Schriftarten-Cache neu aufbauen:

# fc-cache -f

Das Anti-aliasing-Verfahren zeichnet Ränder leicht unscharf, dadurch werden kleine Schriften besser lesbar und der Treppenstufen-Effekt bei wird großen Schriften vermieden. Auf normale Schriftgrößen sollte das Verfahren aber nicht angewendet werden, da dies die Augen zu sehr anstrengt. Um kleinere Schriftgrößen als 14 Punkt von dem Verfahren auszunehmen, fügen Sie in local.conf die nachstehenden Zeilen ein:

        <match target="font">
            <test name="size" compare="less">
                <double>14</double>
            </test>
            <edit name="antialias" mode="assign">
                <bool>false</bool>
            </edit>
        </match>
        <match target="font">
            <test name="pixelsize" compare="less" qual="any">
                <double>14</double>
            </test>
            <edit mode="assign" name="antialias">
                <bool>false</bool>
            </edit>
        </match>

Das Anti-aliasing-Verfahren kann die Abstände einiger Fixschriften falsch darstellen, dies fällt besonders unter KDE auf. Sie können das Problem umgehen, indem Sie die Abstände dieser Schriften auf den Wert 100 festsetzen. Fügen Sie die nachstehenden Zeilen hinzu:

       <match target="pattern" name="family">
           <test qual="any" name="family">
               <string>fixed</string>
           </test>
           <edit name="family" mode="assign">
               <string>mono</string>
           </edit>
        </match>
        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>console</string>
            </test>
            <edit name="family" mode="assign">
                <string>mono</string>
            </edit>
        </match>

Damit werden die Namen der gebräuchlichen Fixschriften auf "mono" abgebildet. Für diese Schriften setzen Sie dann den Abstand fest:

         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>mono</string>
             </test>
             <edit name="spacing" mode="assign">
                 <int>100</int>
             </edit>
         </match>     

Bestimmte Schriftarten, wie Helvetica, können Probleme mit dem Anti-Aliasing-Verfahren verursachen. In der Regel erscheinen diese Schriftarten dann vertikal halbiert. Im schlimmsten Fall stürzen Anwendungen als Folge davon ab. Sie vermeiden dies, indem Sie betroffene Schriftarten in local.conf von dem Verfahren ausnehmen:

         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>Helvetica</string>
             </test>
             <edit name="family" mode="assign">
                 <string>sans-serif</string>
             </edit>
         </match>       

Wenn Sie local.conf editiert haben, stellen Sie bitte sicher, dass die Datei mit dem Tag </fontconfig> endet. Ist das nicht der Fall, werden die Änderungen nicht berücksichtigt.

Benutzer können eigene Einstellungen in der Datei ~/.fonts.conf vornehmen. Achten Sie auch hier auf die richtige XML-Syntax.

Mit einem LCD können Sie sub-pixel sampling anstelle von Anti-aliasing einsetzen. Dieses Verfahren behandelt die horizontal getrennten Rot-, Grün- und Blau-Komponenten eines Pixels gesondert und verbessert damit (teilweise sehr wirksam) die horizontale Auflösung. Die nachstehende Zeile in local.conf aktiviert diese Funktion:

         <match target="font">
             <test qual="all" name="rgba">
                 <const>unknown</const>
             </test>
             <edit name="rgba" mode="assign">
                 <const>rgb</const>
             </edit>
         </match>

Anmerkung: Abhängig von der Art Ihres Bildschirms müssen Sie anstelle von rgb eines der folgenden verwenden: bgr, vrgb oder vbgr. Experimentieren Sie und vergleichen, was besser aussieht.


6.6. Der X-Display-Manager

Beigetragen von Seth Kingsley.

6.6.1. Einführung

Der X-Display-Manager (XDM), eine optionale Komponente des X-Window-Systems, verwaltet Sitzungen. Er kann mit vielen Komponenten, wie minimal ausgestatteten X-Terminals, Arbeitsplatz-Rechnern und leistungsfähigen Netzwerkservern, nutzbringend eingesetzt werden. Da das X-Window-System netzwerktransparent ist, gibt es zahlreiche Möglichkeiten, X-Clients und X-Server auf unterschiedlichen Rechnern im Netz laufen zu lassen. XDM stellt eine grafische Anmeldemaske zur Verfügung, in der Sie den Rechner, auf dem eine Sitzung laufen soll, auswählen können und in der Sie die nötigen Autorisierungs-Informationen, wie Benutzername und Passwort, eingeben können.

Die Funktion des X-Display-Managers lässt sich mit der von getty(8) (siehe Abschnitt 27.3.2) vergleichen. Er meldet den Benutzer am ausgesuchten System an, startet ein Programm (meist einen Window-Manager) und wartet darauf, dass dieses Programm beendet wird, das heißt der Benutzer die Sitzung beendet hat. Nachdem die Sitzung beendet ist, zeigt XDM den grafischen Anmeldebildschirm für den nächsten Benutzer an.


6.6.2. XDM einrichten

Um XDM verwenden zu können, installieren Sie den Port x11/xdm (dieser wird standardmässig nicht in aktuellen Xorg-Versionen mitinstalliert). Der XDM-Dæmon befindet sich dann in /usr/local/bin/xdm und kann jederzeit von root gestartet werden. Er verwaltet dann den X-Bildschirm des lokalen Rechners. XDM lässt sich bequem mit einem Eintrag in /etc/ttys (siehe Abschnitt 27.3.2.1) bei jedem Start des Rechners aktivieren. In /etc/ttys sollte schon der nachstehende Eintrag vorhanden sein:

ttyv8   "/usr/local/bin/xdm -nodaemon"  xterm   off secure

In der Voreinstellung ist dieser Eintrag nicht aktiv. Um den Eintrag zu aktivieren, ändern Sie den Wert in Feld 5 von off zu on und starten Sie init(8) entsprechend der Anleitung in Abschnitt 27.3.2.2 neu. Das erste Feld gibt den Namen des Terminals an, auf dem das Programm läuft. Im Beispiel wird ttyv8 verwendet, das heißt XDM läuft auf dem neunten virtuellen Terminal.


6.6.3. XDM konfigurieren

Das Verhalten und Aussehen von XDM steuern Sie mit Konfigurationsdateien, die im Verzeichnis /usr/local/lib/X11/xdm stehen. Üblicherweise finden Sie dort die folgenden Dateien vor:

Datei Beschreibung
Xaccess Regelsatz, der zur Autorisierung von Clients benutzt wird.
Xresources Vorgabewerte für X-Ressourcen.
Xservers Liste mit lokalen und entfernten Bildschirmen, die verwaltet werden.
Xsession Vorgabe für das Startskript der Sitzung.
Xsetup_* Skript, das dazu dient, Anwendungen vor der Anmeldung zu starten.
xdm-config Konfiguration für alle auf der Maschine verwalteten Bildschirme.
xdm-errors Fehlermeldungen des Servers.
xdm-pid Die Prozess-ID des gerade laufenden XDM-Prozesses.

Im Verzeichnis /usr/local/lib/X11/xdm befinden sich auch noch Skripten und Programme, die zum Einrichten der XDM-Oberfläche dienen. Der Zweck dieser Dateien und der Umgang mit ihnen wird in der Hilfeseite xdm(1) erklärt. Wir gehen im Folgenden nur kurz auf ein paar der Dateien ein.

Die vorgegebene Einstellung zeigt ein rechteckiges Anmeldefenster, in dem der Rechnername in großer Schrift steht. Darunter befinden sich die Eingabeaufforderungen Login: und Password:. Mit dieser Maske können Sie anfangen, wenn Sie das Erscheinungsbild von XDM verändern wollen.


6.6.3.1. Xaccess

Verbindungen zu XDM werden über das “X Display Manager Connection Protocol” (XDMCP) hergestellt. XDMCP-Verbindungen von entfernten Maschinen werden über den Regelsatz in Xaccess kontrolliert. Diese Datei wird allerdings ignoriert, wenn in xdm-config keine Verbindungen entfernter Maschinen erlaubt sind (dies ist auch die Voreinstellung).


6.6.3.2. Xresources

In dieser Datei kann das Erscheinungsbild der Bildschirmauswahl und der Anmeldemasken festgelegt werden. Das Format entspricht den Dateien im Verzeichnis app-defaults, die in der X11-Dokumentation beschrieben sind.


6.6.3.3. Xservers

Diese Datei enthält eine Liste entfernter Maschinen, die in der Bildschirmauswahl angeboten werden.


6.6.3.4. Xsession

Dieses Skript wird vom XDM aufgerufen, nachdem sich ein Benutzer erfolgreich angemeldet hat. Üblicherweise besitzt jeder Benutzer eine angepasste Version dieses Skripts in ~/.xsession, das dann anstelle von Xsession ausgeführt wird.


6.6.3.5. Xsetup_*

Diese Skripten werden automatisch ausgeführt bevor die Bildschirmauswahl oder die Anmeldemasken angezeigt werden. Für jeden lokalen Bildschirm gibt es ein Skript, dessen Namen aus Xsetup_ gefolgt von der Bildschirmnummer gebildet wird (zum Beispiel Xsetup_0). Normalerweise werden damit ein oder zwei Programme, wie xconsole, im Hintergrund gestartet.


6.6.3.6. xdm-config

Diese Datei enthält Einstellungen, die für jeden verwalteten Bildschirm zutreffen. Das Format entspricht dem der Dateien aus app-defaults.


6.6.3.7. xdm-errors

Die Ausgaben jedes X-Servers, den XDM versucht zu starten, werden in dieser Datei gesammelt. Wenn ein von XDM verwalteter Bildschirm aus unbekannten Gründen hängen bleibt, sollten Sie in dieser Datei nach Fehlermeldungen suchen. Für jede Sitzung werden die Meldungen auch in die Datei ~/.xsession-errors des Benutzers geschrieben.


6.6.4. Einrichten eines Bildschirm-Servers auf dem Netzwerk

Damit sich Clients mit dem Bildschirm-Server verbinden können, muss der Zugriffsregelsatz editiert und der Listener aktiviert werden. Die Vorgabewerte sind sehr restriktiv eingestellt. Damit XDM Verbindungen annimmt, kommentieren Sie eine Zeile in der xdm-config Datei aus:

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort:     0

Starten Sie danach XDM neu. Beachten Sie, dass Kommentare in den Ressourcen-Konfigurationsdateien mit einem ! anstelle des sonst üblichen Zeichens # beginnen. Wenn Sie strengere Zugriffskontrollen einrichten wollen, sehen Sie sich die Beispiele in Xaccess und die Hilfeseite xdm(1) an.


6.6.5. XDM ersetzen

Es gibt mehrere Anwendungen, die XDM ersetzen können, zum Beispiel kdm, der Teil von KDE ist und später in diesem Kapitel besprochen wird. kdm ist ansprechender gestaltet und bietet neben einigen Schnörkeln die Möglichkeit, den zu verwendenden Window-Manager bei der Anmeldung auszuwählen.


6.7. Grafische Oberflächen

Beigetragen von Valentino Vaschetto.

Dieser Abschnitt beschreibt verschiedene grafische Oberflächen, die es für X unter FreeBSD gibt. Eine Oberfläche (desktop environment) kann alles von einem einfachen Window-Manager bis hin zu kompletten Anwendungen wie KDE oder GNOME sein.


6.7.1. GNOME

6.7.1.1. Über GNOME

GNOME ist eine benutzerfreundliche Oberfläche, mit der Rechner leicht benutzt und konfiguriert werden können. GNOME besitzt eine Leiste, mit der Anwendungen gestartet werden und die Statusinformationen anzeigen kann. Programme und Daten können auf der Oberfläche abgelegt werden und Standardwerkzeuge stehen zur Verfügung. Es gibt Konventionen, die es Anwendungen leicht machen, zusammenzuarbeiten und ein konsistentes Erscheinungsbild garantieren. Benutzer anderer Betriebssysteme oder anderer Arbeitsumgebungen sollten mit der leistungsfähigen grafischen Oberfläche von GNOME sehr gut zurechtkommen. Auf der Webseite FreeBSD GNOME Project finden Sie weitere Informationen über GNOME auf FreeBSD. Zusätzlich finden Sie dort umfassende FAQs zur Installation, Konfiguration und zum Betrieb von GNOME.


6.7.1.2. GNOME installieren

Am einfachsten installieren Sie GNOME als Paket oder über die Ports-Sammlung.

Wenn Sie das GNOME-Paket über das Netz installieren wollen, setzen Sie den nachstehenden Befehl ab:

# pkg_add -r gnome2

Wenn Sie den Quellcode von GNOME übersetzen wollen, benutzen Sie die Ports-Sammlung:

# cd /usr/ports/x11/gnome2
# make install clean

Damit GNOME korrekt funktioniert, muss das /proc-Dateisystem eingehängt sein. Fügen Sie daher die folgende Zeile in /etc/fstab ein, damit procfs(5) beim Systemstart automatisch eingehängt wird:

proc           /proc       procfs  rw  0   0

Nachdem GNOME installiert ist, muss der X-Server GNOME anstelle eines Window-Managers starten.

Der einfachste Weg, GNOME zu starten, ist GDM, der GNOME Display Manager. GDM wird zwar als Teil des GNOME-Desktops installiert, ist aber in der Voreinstellung deaktiviert. Um GDM zu aktivieren, fügen Sie folgende Zeile in /etc/rc.conf ein:

gdm_enable="YES"

Nach einem Systemneustart wird GDM ab sofort automatisch gestartet.

In der Regel ist es ratsam, alle GNOME-Dienste beim Start von GDM zu aktivieren. Um dies zu erreichen, fügen Sie die folgende Zeile in /etc/rc.conf ein:

gnome_enable="YES"

GNOME kann auch von der Kommandozeile gestartet werden, wenn Sie eine entsprechend konfigurierte .xinitrc in Ihrem Heimatverzeichnis besitzen. Existiert eine solche Version, ersetzen Sie den Aufruf des Window-Managers durch /usr/local/bin/gnome-session. Wenn .xinitrc nicht gesondert angepasst wurde, reicht es, den nachstehenden Befehl abzusetzen:

% echo "/usr/local/bin/gnome-session" > ~/.xinitrc

Rufen Sie danach startx auf, um die GNOME Oberfläche zu starten.

Anmerkung: Wenn Sie einen älteren Display-Manager wie XDM verwenden, müssen Sie anders vorgehen. Legen Sie eine ausführbare .xsession an, die das Kommando zum Start von GNOME enthält. Ersetzen Sie dazu den Start des Window-Managers durch /usr/local/bin/gnome-session:

% echo "#!/bin/sh" > ~/.xsession
% echo "/usr/local/bin/gnome-session" >> ~/.xsession
% chmod +x ~/.xsession

Sie können den Display-Manager auch so konfigurieren, dass der Window-Manager beim Anmelden gewählt werden kann. Im Abschnitt Details zu KDE wird das für kdm, den Display-Manager von KDE erklärt.


6.7.2. KDE

6.7.2.1. Über KDE

KDE ist eine moderne, leicht zu benutzende Oberfläche, die unter anderem Folgendes bietet:

  • eine schöne und moderne Oberfläche,

  • eine Oberfläche, die völlig netzwerktransparent ist,

  • ein integriertes Hilfesystem, das bequem und konsistent Hilfestellungen bezüglich der Bedienung der KDE-Oberfläche und ihrer Anwendungen gibt,

  • ein konstantes Erscheinungsbild (look and feel) aller KDE-Anwendungen,

  • einheitliche Menüs, Werkzeugleisten, Tastenkombinationen und Farbschemata,

  • Internationalisierung: KDE ist in mehr als 40 Sprachen erhältlich,

  • durch Dialoge gesteuerte zentrale Konfiguration der Oberfläche,

  • viele nützliche KDE-Anwendungen.

In KDE ist mit Konqueror auch ein Webbrowser enthalten, der sich durchaus mit anderen Webbrowsern auf UNIX-Systemen messen kann. Weitere Informationen über KDE erhalten Sie auf den KDE-Webseiten. Auf der Webseite KDE on FreeBSD finden Sie weitere FreeBSD-spezifische Informationen über KDE.

Es sind zwei Versionen von KDE unter FreeBSD verfügbar. Version 3 ist schon seit einiger Zeit erhältlich und ist sehr ausgereift. Version 4, die nächste Generation, ist ebenfalls über die Ports-Sammlung verfügbar. Beide Versionen können sogar gleichzeitig installiert werden.


6.7.2.2. KDE installieren

Am einfachsten installieren Sie KDE, wie jede andere grafische Oberfläche auch, als Paket oder über die Ports-Sammlung.

Um KDE3 über das Netz zu installieren, setzen Sie den nachstehenden Befehl ab:

# pkg_add -r kde

Um KDE4 über das Netzwerk zu installieren, geben Sie folgendes ein:

# pkg_add -r kde4

pkg_add(1) installiert automatisch die neuste Version einer Anwendung.

Benutzen Sie die Ports-Sammlung, wenn Sie den Quellcode von KDE3 übersetzen wollen:

# cd /usr/ports/x11/kde3
# make install clean

Um KDE4 aus dem Quellcode zu übersetzen, geben Sie folgendes ein:

# cd /usr/ports/x11/kde4
# make install clean

Nachdem KDE installiert ist, muss der X-Server KDE anstelle eines Window-Managers starten. Legen Sie dazu die Datei .xinitrc an:

Für KDE3:

% echo "exec startkde" > ~/.xinitrc

Für KDE4:

% echo "exec /usr/local/kde4/bin/startkde" > ~/.xinitrc

Wenn das X-Window-System danach mit startx gestartet wird, erscheint die KDE-Oberfläche.

Wird ein Display-Manager wie XDM benutzt, muss .xsession angepasst werden. Eine Anleitung für kdm folgt gleich in diesem Kapitel.


6.7.3. Details zu KDE

Wenn KDE erst einmal installiert ist, erschließen sich die meisten Sachen durch das Hilfesystem oder durch Ausprobieren. Benutzer von Windows oder Mac OS werden sich sehr schnell zurecht finden.

Die beste Referenz für KDE ist die Online-Dokumentation. KDE besitzt einen eigenen Webbrowser, sehr viele nützliche Anwendungen und ausführliche Dokumentation. Der Rest dieses Abschnitts beschäftigt sich daher mit Dingen, die schlecht durch einfaches Ausprobieren erlernbar sind.


6.7.3.1. Der KDE-Display-Manager

Der Administrator eines Mehrbenutzersystems will den Benutzern vielleicht eine grafische Anmeldung wie mit XDM ermöglichen. KDE besitzt einen eigenen Display-Manager, der schöner aussieht und auch über mehr Optionen verfügt. Insbesondere können sich die Benutzer die Oberfläche für die Sitzung (beispielsweise KDE oder GNOME) aussuchen.

Die Art und Weise, wie kdm aktiviert wird, hängt dabei von der von Ihnen eingesetzten KDE-Version ab.

Für KDE3 müssen die ttyv8-Zeile wie folgt anpassen:

ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure

Verwenden Sie hingegen KDE4, müssen Sie folgende Zeilen in die Datei /etc/rc.conf aufnehmen:

local_startup="${local_startup} /usr/local/kde4/etc/rc.d"
kdm4_enable="YES"

6.7.4. Xfce

6.7.4.1. Über Xfce

Xfce ist eine grafische Oberfläche, die auf den GTK+-Bibliotheken, die auch von GNOME benutzt werden, beruht. Die Oberfläche ist allerdings weniger aufwändig und für diejenigen gedacht, die eine schlichte und effiziente Oberfläche wollen, die dennoch einfach zu benutzen und zu konfigurieren ist. Die Oberfläche sieht ähnlich wie CDE aus, das in kommerziellen UNIX Systemen verwendet wird. Einige Merkmale von Xfce sind:

  • eine schlichte einfach zu benutzende Oberfläche,

  • vollständig mit Mausoperationen konfigurierbar, Unterstützung von drag and drop,

  • ähnliche Hauptleiste wie CDE, die Menüs enthält und über die Anwendungen gestartet werden können,

  • integrierter Window-Manager, Datei-Manager und Sound-Manager, GNOME-compliance-Modul,

  • mit Themes anpassbar (da GTK+ benutzt wird),

  • schnell, leicht und effizient: ideal für ältere oder langsamere Maschinen oder Maschinen mit wenig Speicher.

Weitere Information über Xfce erhalten Sie auf der Xfce-Webseite.


6.7.4.2. Xfce installieren

Das Xfce-Paket installieren Sie mit dem nachstehenden Kommando:

# pkg_add -r xfce4

Mit der Ports-Sammlung können Sie auch den Quellcode übersetzen:

# cd /usr/ports/x11-wm/xfce4
# make install clean

Damit beim nächsten Start des X-Servers Xfce benutzt wird, setzen Sie das folgende Kommando ab:

% echo "/usr/local/bin/startxfce4" > ~/.xinitrc

Wenn Sie einen Display-Manager benutzen, erstellen Sie die Datei .xsession, wie im GNOME Abschnitt beschrieben. Verwenden Sie jetzt allerdings das Kommando /usr/local/bin/startxfce4. Sie können auch den Display-Manager wie im kdm Abschnitt beschrieben, so konfigurieren, dass die Oberfläche für die Sitzung ausgewählt werden kann.

II. Oft benutzte Funktionen

Nach den Grundlagen beschäftigt sich das FreeBSD-Handbuch mit oft benutzten Funktionen von FreeBSD. Die Kapitel behandeln die nachstehenden Themen:

  • Zeigen Ihnen beliebte und nützliche Werkzeuge wie Browser, Büroanwendungen und Programme zum Anzeigen von Dokumenten.

  • Zeigen Ihnen Multimedia-Werkzeuge für FreeBSD.

  • Erklären den Bau eines angepassten FreeBSD-Kernels, der die Systemfunktionen erweitert.

  • Beschreiben ausführlich das Drucksystem, sowohl für direkt angeschlossene Drucker als auch für Netzwerkdrucker.

  • Erläutern, wie Sie Linux-Anwendungen auf einem FreeBSD-System laufen lassen.

Damit Sie einige Kapitel verstehen, sollten Sie vorher andere Kapitel gelesen haben. Die Übersicht zu jedem Kapitel zählt die Voraussetzungen für das erolgreiche Durcharbeiten des Kapitels auf.


Kapitel 7. Desktop-Anwendungen

Beigetragen von Christophe Juniet. Übersetzt von Martin Heinen.

7.1. Übersicht

FreeBSD bietet eine reiche Auswahl an Desktop-Anwendungen, wie Browser und Textverarbeitungen, die als Pakete oder mit der Ports-Sammlung installiert werden. Gerade neue Benutzer erwarten Anwendungen mit einer grafischen Benutzeroberfläche an ihrem Arbeitsplatz. Dieses Kapitel zeigt Ihnen, wie Sie einige der beliebtesten Desktop-Anwendungen mühelos installieren.

Wenn Sie Ports installieren, beachten Sie, dass dabei die Quelltexte der Programme übersetzt werden. Abhängig von dem Programm und der Geschwindigkeit Ihrer Maschinen kann das sehr lange dauern. Wenn Ihnen das Übersetzen zu lange dauert, können Sie die meisten Programme der Ports-Sammlung auch als fertige Pakete installieren.

Da FreeBSD binär kompatibel zu Linux ist, können Sie zahlreiche für Linux entwickelte Desktop-Anwendungen einsetzen. Bevor Sie allerdings Linux-Anwendungen installieren, sollten Sie das Kapitel 11 lesen. Wenn Sie nach einem bestimmten Port suchen, zum Beispiel mit whereis(1), beachten Sie, dass die Namen vieler Programme, die die Linux-Binärkompatibilität benutzen, mit linux- anfangen. Wir gehen im Folgenden davon aus, dass Sie die Linux-Binärkompatibilität aktiviert haben, bevor Sie Linux-Anwendungen installieren.

Dieses Kapitel behandelt Anwendungen aus den Bereichen:

  • Browser (Firefox, Opera, Konqueror), Chromium)

  • Büroanwendungen (KOffice, AbiWord, The GIMP, OpenOffice.org, LibreOffice)

  • Dokumentformate(Acrobat Reader®, gv, Xpdf, GQview)

  • Finanzsoftware ( GnuCash, Gnumeric, Abacus)

Bevor Sie dieses Kapitel lesen, sollten Sie

  • Software Dritter installieren können (Kapitel 5) und

  • Linux-Anwendungen installieren können (Kapitel 11).

Wie Sie Multimedia-Anwendungen einrichten, wird in einem gesonderten Kapitel erklärt. Wie Sie E-Mail einrichten und benutzen, wird in Kapitel 29 beschrieben.


7.2. Browser

FreeBSD besitzt keinen vorinstallierten Browser, stattdessen enthält das www-Verzeichnis der Ports-Sammlung Browser, die Sie installieren können. Wenn Ihnen das Übersetzen der Browser zu lange dauert, bei einigen Browsern dauert das wirklich lange, installieren Sie die Pakete, die es für viele Browser gibt.

KDE und GNOME enthalten schon HTML-Browser. Das Einrichten dieser grafischen Benutzeroberflächen ist in Abschnitt 6.7 beschrieben.

Wenn Sie besonders schlanke Browser benötigen, suchen Sie in der Ports-Sammlung nach www/dillo2, www/links oder www/w3m.

Dieser Abschnitt behandelt die nachstehenden Anwendungen:

Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten
Firefox mittel hoch Gtk+
Opera niedrig niedrig Es gibt eine FreeBSD- und eine Linux-Version. Die Linux-Version hängt von der Linux-Kompatibilität (Linux Binary Compatibility) und linux-openmotif ab.
Konqueror mittel hoch KDE-Biliotheken
Chromium mittel mittel Gtk+

7.2.1. Firefox

Firefox ist ein moderner, freier und stabiler Open-Source Browser, der vollständig auf FreeBSD portiert wurde. Er bietet eine dem HTML-Standard konforme Anzeige, Browserfenster als Tabs, Blockierung von Werbefenstern, Erweiterungen, verbesserte Sicherheit und mehr. Firefox basiert auf der Mozilla Codebasis.

Das Paket können Sie mit dem nachstehenden Befehl installieren:

# pkg_add -r firefox

Damit installieren Sie Firefox 10.0, wenn Sie stattdessen Firefox 3.6 einsetzen möchten, geben Sie folgenden Befehl ein:

# pkg_add -r firefox36

Alternativ können Sie auch die Ports-Sammlung verwenden, um das Programm aus dem Quellcode zu installieren:

# cd /usr/ports/www/firefox
# make install clean

Ersetzen Sie im vorherigen Kommando firefox durch firefox36, falls Sie Firefox 3.6 verwenden wollen.


7.2.2. Firefox und das Java™-Plugin

Anmerkung: Dieser und die beiden nächsten Abschnitte gehen davon aus, dass Sie Firefox bereits installiert haben.

Die Schritte zur Installation des Plugins hängen davon, welche Firefox Sie installiert haben.

Installieren Sie das OpenJDK 6 über die Ports-Sammlung:

# cd /usr/ports/java/openjdk6
# make install clean

Danach installieren Sie den Port java/icedtea-web:

# cd /usr/ports/java/icedtea-web
# make install clean

Stellen Sie dabei sicher, dass Sie jeweils die Standardoptionen verwenden.

Starten Sie nun Ihren Browser, geben Sie in der Adresszeile about:plugins ein und bestätigen Sie diese Eingabe mit der Enter-Taste. Dadurch wird eine Seite geöffnet, die alle installierten Plugins auflistet. In dieser Liste sollte sich nun auch das Java-Plugin befinden.

Wird das Plugin nicht gefunden, muss für jeden Benutzer der folgende Befel ausgeführt werden:

% ln -s /usr/local/lib/IcedTeaPlugin.so \
  $HOME/.mozilla/plugins/

7.2.3. Firefox und das Adobe® Flash™-Plugin

Das Adobe® Flash™-Plugin ist für FreeBSD nicht verfügbar. Es existiert jedoch ein Software-Layer (ein sogenannter Wrapper), der es erlaubt, die Linux-Version des Plugins unter FreeBSD einzusetzen. Dieser Wrapper unterstützt außerdem das Adobe Acrobat®-Plugin, das RealPlayer®-Plugin und andere mehr.

Je nachdem, welche Version von FreeBSD Sie verwenden, sind unterschiedliche Schritte notwendig:

  1. Für FreeBSD 7.X

    Installieren Sie den Port www/nspluginwrapper. Dieser Port setzt voraus, dass Sie den Port emulators/linux_base-fc4 bereits installiert haben, der sehr gross ist.

    Anschließend installieren Sie den Port www/linux-flashplugin9. Dadurch wird Flash 9.X installiert, denn diese Version läuft zuverlässig auf FreeBSD 7.X.

  2. Für FreeBSD 8.X oder Neuere

    Installieren Sie den Port www/nspluginwrapper. Dieser Port benötigt den emulators/linux_base-f10 Port, der sehr gross ist.

    Als nächstes installieren Sie Flash 11.X aus dem Port www/linux-f10-flashplugin11.

    Für diese Version muss der folgende symbolische Link angelegt werden:

    # ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \
      /usr/local/lib/browser_plugins/
    

    Falls das Verzeichnis /usr/local/lib/browser_plugins auf Ihrem System nicht existiert, müssen Sie es manuell anlegen.

Sobald der richtige Flash-Port passend zu ihrer FreeBSD Version installiert ist, muss das Plugin von jedem Benutzer mittels nspluginwrapper installiert werden:

% nspluginwrapper -v -a -i

Das Linux Prozessdateisystem, linprocfs(5), muss unter /compat/linux/proc eingehängt werden, wenn Sie Flash-Animationen abspielen möchten. Dies kann mittels des folgenden Kommandos geschehen:

# mount -t linprocfs linproc /compat/linux/proc

Dieser Schritt kann automatisiert zur Bootzeit ablaufen, indem Sie die passende Zeile in /etc/fstab eintragen:

linproc   /compat/linux/proc  linprocfs       rw      0       0

Rufen Sie dann Ihren Browser auf und geben in der Adresszeile about:plugins ein. Diese Eingabe muss mit der Enter-Taste bestätigt werden. Danach wird eine Seite geladen, auf der alle installierten Plugins aufgelistet werden.


7.2.4. Firefox und das Swfdec Flash-Plugin

Swfdec ist die Bibliothek zum Dekodieren und Rendern von Flash Animationen. Swfdec-Mozilla ist ein Plugin für Firefox-Browser, welches die Swfdec-Bibliothek zum Abspielen von SWF-Dateien benutzt. Momentan befindet sie sich noch in der Entwicklung.

Wenn Sie diese nicht übersetzen können oder wollen, dann installieren Sie einfach das Paket aus dem Netz:

# pkg_add -r swfdec-plugin

Wenn das Paket nicht verfügbar ist, können Sie es auch über die Ports-Sammlung bauen und installieren:

# cd /usr/ports/www/swfdec-plugin
# make install clean

Starten Sie anschliessend ihren Browser neu, damit dieses Plugin aktiviert wird.


7.2.5. Opera

Opera ist ein schneller, vollwertiger und standardkonformer Browser, der wie Mozilla über einen eingebauten E-Mail- und Newsreader verfügt. Zusätzlich sind ein IRC-Client, ein RSS/Atom-Feeds-Reader sowie weitere Programme enthalten. Dennoch handelt es sich bei Opera weiterhin um ein relativ kleines und sehr schnelles Programmpaket. Sie haben die Wahl zwei Versionen dieses Browsers: Der “nativen” FreeBSD-Version und der Linux-Version.

Wenn Sie das Web mit der FreeBSD-Version von Opera erkunden wollen, installieren Sie das Paket:

# pkg_add -r opera

Einige FTP-Server haben nicht alle Pakete, Sie können Opera aber über die Ports-Sammlung installieren:

# cd /usr/ports/www/opera
# make install clean

Wenn Sie die Linux-Version des Browsers verwenden wollen, ersetzen Sie in den Beispielen opera durch linux-opera.

Das Adobe Flash-Plugin ist für FreeBSD nicht verfügbar. Es gibt aber eine Linux-Version des Plugins, die auch unter FreeBSD installiert werden kann. Dazu installieren Sie zuerst den Port www/linux-f10-flashplugin11, danach den Port www/opera-linuxplugins:

# cd /usr/ports/www/linux-f10-flashplugin11
# make install clean
# cd /usr/ports/www/opera-linuxplugins
# make install clean

Danach sollte das Plugin installiert sein. Um dies zu überprüfen, starten Sie den Browser und geben in die Adresszeile opera:plugins ein und bestätigen diese Eingabe mit der Return-Taste. Dadurch erhalten Sie eine Liste aller derzeit installierter Plugins.

Um das Java-Plugin zu installieren, folgen Sie bitte den entsprechenden Anweisungen für Firefox.


7.2.6. Konqueror

Konqueror ist Teil von KDE, kann aber außerhalb von KDE benutzt werden, wenn der Port x11/kdebase3 installiert ist. Konqueror ist mehr als nur ein Browser. Sie können das Programm weiters zur Dateiverwaltung und zum Abspielen von Multimedia-Dateien benutzen.

Der Port misc/konq-plugins installiert verschiedene Plugins für Konqueror.

Konqueror kann Flash-Seiten darstellen. Wie Sie die Flash-Unterstützung aktiviern, können Sie unter http://freebsd.kde.org/howtos/konqueror-flash.php nachlesen.


7.2.7. Chromium

Chromium ist ein quelloffenes Browserprojekt mit dem Ziel ein sicheres, schnelleres und stabileres Surferlebnis im Web zu ermöglichen. Chromium ermöglicht surfen mit Tabs, Blockieren von Pop-Ups, Erweiterungen und vieles mehr. Chromium ist das Open Source Projekt, welches auf dem Google Chrome Webbrowser basiert.

Chromium kann als Paket durch die Eingabe des folgenden Befehls installiert werden:

# pkg_add -r chromium

Als Alternative kann Chromium aus dem Quellcode durch die Ports Collection übersetzt werden:

# cd /usr/ports/www/chromium
# make install clean

Anmerkung: Chromium wird als /usr/local/bin/chrome installiert und nicht als /usr/local/bin/chromium.


7.2.8. Chromium und das Java-Plug-In

Anmerkung: Dieser Abschnitt setzt voraus, dass Chromium bereits installiert ist.

Installieren Sie OpenJDK 6 mit Hilfe der Ports Collection durch Eingabe von:

# cd /usr/ports/java/openjdk6
# make install clean

Als nächstes installieren Sie java/icedtea-web aus der Ports Collection:

# cd /usr/ports/java/icedtea-web
# make install clean

Starten Sie Chromium und geben Sie about:plugins in die Addresszeile ein. IcedTea-Web sollte dort als eines der installierten Plug-Ins aufgelistet sein.

Falls Chromium das IcedTea-Web Plug-In nicht anzeigt, geben Sie das folgende Kommando ein und starten Sie den Webbrowser anschliessend neu:

# mkdir -p /usr/local/share/chromium/plugins
# ln -s /usr/local/lib/IcedTeaPlugin.so \
   /usr/local/share/chromium/plugins/

7.2.9. Chromium und das Adobe Flash-Plug-In

Anmerkung: Dieser Abschnitt setzt voraus, dass Chromium bereits installiert ist.

Die Konfiguration von Chromium und Adobe Flash ist ähnlich zur Anleitung für Firefox. Für genauere Hinweise zur Installation von Adobe Flash auf FreeBSD, wenden Sie sich bitte an diesen Abschnitt. Es sollte keine weitere Konfiguration notwendig sein, da Chromium in der Lage ist, Plug-Ins von anderen Browsern mit zu benutzen.


7.3. Büroanwendungen

Neue Benutzer suchen oft ein komplettes Office-Paket oder eine leicht zu bedienende Textverarbeitung. Einige Benutzeroberflächen wie KDE enthalten zwar ein Office-Paket, diese werden in der Standardeinstellung unter FreeBSD aber nicht installiert. Unabhängig von der verwendeten Benutzeroberfläche können Sie diverse Office-Pakete aber jederzeit über die Ports-Sammlung installlieren.

Dieser Abschnitt behandelt die nachstehenden Anwendungen:

Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten
KOffice niedrig hoch KDE
AbiWord niedrig niedrig Gtk+ oder GNOME
The Gimp niedrig hoch Gtk+
OpenOffice.org hoch enorm JDK, Mozilla
LibreOffice etwas hoch enorm Gtk+, KDE/ GNOME oder JDK

7.3.1. KOffice

Die KDE-Gemeinschaft stellt ein Office-Paket bereit, das auch außerhalb von KDE eingesetzt werden kann. Es besteht aus vier, von anderen Office-Paketen bekannten, Komponenten: KWord ist die Textverarbeitung, KSpread die Tabellenkalkulation, mit KPresenter werden Präsentationen erstellt und Kontour ist ein Zeichenprogramm.

Stellen Sie vor der Installation des neusten KOffice sicher, dass Sie eine aktuelle Version von KDE besitzen.

Mit dem folgenden Kommando installieren Sie das KOffice-Paket für KDE4:

# pkg_add -r koffice-kde4

Wenn das Paket nicht zur Verfügung steht, benutzen Sie bitte die Ports-Sammlung. Wenn Sie beispielsweise KOffice für KDE4 installieren wollen, setzen Sie die nachstehendenen Befehle ab:

# cd /usr/ports/editors/koffice-kde4
# make install clean

7.3.2. AbiWord

AbiWord ist eine freie Textverarbeitung, die ähnlich wie Microsoft Word ist. Sie können damit Artikel, Briefe, Berichte, Notizen usw. verfassen. Das Programm ist sehr schnell, besitzt viele Funktionen und ist sehr benutzerfreundlich.

AbiWord kann viele Dateiformate, unter anderem nicht offene wie .doc von Microsoft, importieren und exportieren.

Das AbiWord-Paket installieren Sie wie folgt:

# pkg_add -r AbiWord

Sollte das Paket nicht zur Verfügung stehen, können Sie das Programm mit der Ports-Sammlung, die zudem aktueller als die Pakete ist, übersetzen. Gehen Sie dazu folgendermaßen vor:

# cd /usr/ports/editors/AbiWord
# make install clean

7.3.3. The GIMP

The GIMP ist ein sehr ausgereiftes Bildverarbeitungsprogramm mit dem Sie Bilder erstellen oder retuschieren können. Sie können es sowohl als einfaches Zeichenprogramm als auch zum retuschieren von Fotografien benutzen. Das Programm besitzt eine eingebaute Skriptsprache und es existieren sehr viele Plug-Ins. The GIMP kann Bilder in zahlreichen Formaten lesen und speichern und stellt Schnittstellen zu Scannern und grafischen Tabletts zur Verfügung.

Sie installieren das Paket mit dem nachstehenden Befehl:

# pkg_add -r gimp

Benutzen Sie die Ports-Sammlung, wenn Ihr FTP-Server das Paket nicht bereitstellt. Im Verzeichnis graphics finden Sie das Handbuch The Gimp Manual. Sie können alles mit den folgenden Befehlen installieren:

# cd /usr/ports/graphics/gimp
# make install clean
# cd /usr/ports/graphics/gimp-manual-pdf
# make install clean

Anmerkung: Die Entwickler-Version von The GIMP finden Sie im Verzeichnis graphics der Ports-Sammlung. Das Handbuch ist im HTML-Format (graphics/gimp-manual-html) erhältlich.


7.3.4. OpenOffice.org

OpenOffice.org enthält alles, was von einem Office-Paket erwartet wird: Textverarbeitung, Tabellenkalkulation, Präsentation und ein Zeichenprogramm. Die Bedienung gleicht anderen Office-Paketen und das Programm kann zahlreiche Dateiformate importieren und exportieren. Es gibt lokalisierte Versionen mit angepassten Menüs, Rechtschreibkontrollen und Wörterbüchern.

Die Textverarbeitung von OpenOffice.org speichert Dateien im XML-Format. Dadurch wird die Verwendbarkeit der Dateien auf anderen Systemen erhöht und die Handhabung der Daten vereinfacht. Die Tabellenkalkulation besitzt eine Makrosprache und eine Schnittstelle zu Datenbanken. OpenOffice.org läuft auf Windows, Solaris™, Linux, FreeBSD und Mac OS X. Weitere Informationen über OpenOffice.org finden Sie auf der OpenOffice.org Website. Spezifische Informationen für FreeBSD finden Sie auf der Webseite FreeBSD OpenOffice.org Porting Team. Von dort können Sie auch direkt das OpenOffice-Paket herunterladen.

OpenOffice.org installieren Sie wie folgt:

# pkg_add -r openoffice.org

Anmerkung: Diese Art der Installation sollte mit einer -RELEASE-Version funktionieren. Verwenden Sie eine andere Version, sollten Sie die Internetseite des FreeBSD OpenOffice.org Porting Teams besuchen und das entsprechende Paket herunterladen und über pkg_add(1) installieren, wobei Sie zwischen der aktuellen Version und der Entwicklerversion wählen können.

Nachdem das Paket installiert ist, müssen Sie lediglich folgenden Befehl eingeben, um OpenOffice.org zu starten:

% openoffice.org

Anmerkung: Nach dem ersten Start werden Ihnen einige Fragen gestellt. Außerdem wird in Ihrem Heimatverzeichnis der neue Unterordner .openoffice.org angelegt.

Falls die OpenOffice.org-Pakete nicht zur Verfügung stehen, können Sie immer noch die Ports-Sammlung benutzen. Beachten Sie aber bitte, dass Sie sehr viel Plattenplatz und Zeit benötigen, um die Quellen zu übersetzen.

# cd /usr/ports/editors/openoffice-3
# make install clean

Anmerkung: Wenn Sie ein lokalisierte Version bauen wollen, ersetzen Sie den letzten Befehl durch die folgende Zeile:

# make LOCALIZED_LANG=Ihre_Sprache install clean

Dabei ersetzen Sie Ihre_Sprache durch den korrekten ISO-Code. Eine Liste der unterstützten Codes enthält die Datei files/Makefile.localized, die sich im Portsverzeichnis befindet.

Nachdem die Installation abgeschlossen ist, können Sie OpenOffice.org durch folgenden Befehl starten:

% openoffice.org

7.3.5. LibreOffice

LibreOffice ist ein als freie Software verfügbares Office-Paket, welches von The Document Foundation entwickelt wird, das mit anderen grossen Office-Paketen kompatibel ist und auf einer Vielzahl von Plattformen lauffähig ist. Es ist ein Fork von OpenOffice.org unter neuem Namen, der alle notwendigen Anwendungen in einem kompletten Büroanwendungspaket enthält: eine Textverarbeitung, eine Tabellenkalkulation, ein Präsentationsmanager, ein Zeichenprogramm, ein Datenbankmanagementprogramm und ein Werkzeug zum Erstellen und Bearbeiten von mathematischen Formeln. Es steht in einer Reihe von Sprachen zur Verfügung; die Internationalisierung wurde auf die Oberfläche, Rechtschreibkorrektur und die Wörterbücher ausgeweitet.

Das Textverarbeitungsprogramm von LibreOffice benutzt ein natives XML-Dateiformat für erhöhte Portabilität und Flexibilität. Die Tabellenkalkulation enthält eine Makrosprache und kann mit externen Datenbanken Verbindungen herstellen. LibreOffice ist bereits stabil genug und läuft nativ auf Windows, Linux, FreeBSD und Mac OS X. Weitere Informationen zu LibreOffice können auf der LibreOffice Webseite abgerufen werden.

Um LibreOffice als Paket zu installieren, geben Sie folgenden Befehl ein:

# pkg_add -r libreoffice

Anmerkung: Dies sollte funktionieren, wenn Sie eine -RELEASE-Version von FreeBSD einsetzen.

Sobald das Paket installiert ist, geben Sie das folgende Kommando ein, um LibreOffice zu starten:

% libreoffice

Anmerkung: Während des ersten Starts werden Sie ein paar Fragen gestellt bekommen und es wird ein Verzeichnis .libreoffice in Ihrem Heimatverzeichnis erstellt.

Wenn die LibreOffice-Pakete nicht verfügbar sind, haben Sie immer noch die Möglichkeit, den Port zu verwenden. Jedoch müssen Sie bedenken, dass dies eine Menge Speicherplatz benötigt und viel Zeit in Anspruch nimmt, bis der Port fertig gebaut ist.

# cd /usr/ports/editors/libreoffice
# make install clean

Anmerkung: Wenn Sie eine Version in Ihrer Sprache bauen möchten, ersetzen Sie das vorhergehende Kommando mit dem folgenden:

# make LOCALIZED_LANG=ihre_Sprache install clean

Sie müssen ihre_Sprache mit dem richtigen ISO-Code für ihre Sprache ersetzen. Eine Liste von unterstützten Sprachcodes sind im Makefile des Ports als pre-fetch-Target verfügbar.

Sobald dies abgeschlossen ist, kann LibreOffice mit dem folgenden Befehl gestartet werden:

% libreoffice

7.4. Anzeigen von Dokumenten

Einige neuere Dokumentformate, die sich aktuell großer Beliebtheit erfreuen, können Sie sich mit den im Basissystem enthaltenen Programmen und Werkzeugen nicht ansehen. Dieser Abschnitt behandelt Programme, mit denen Sie sich Dokumente in unterschiedlichsten Formaten ansehen können.

Die nachstehenden Anwendungen werden behandelt:

Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten
Acrobat Reader niedrig niedrig Linux Binary Compatibility
gv niedrig niedrig Xaw3d
Xpdf niedrig niedrig FreeType
GQview niedrig niedrig Gtk+ oder GNOME

7.4.1. Acrobat Reader®

Viele Dokumente werden heute im “Portable Document Format” (PDF) zur Verfügung gestellt. PDF-Dokumente schauen Sie sich am Besten mit dem Programm Acrobat Reader an, das von Adobe für Linux freigegeben wurde. Da Linux-Programme unter FreeBSD laufen, steht Ihnen das Programm auch hier zur Verfügung.

Um Acrobat Reader 8 über die Ports-Sammlung zu installieren, geben Sie Folgendes ein:

# cd /usr/ports/print/acroread8
# make install clean

Aufgrund der Lizenzbedinungen ist eine Paketversion leider nicht verfügbar.


7.4.2. gv

gv kann PostScript- und PDF-Dokumente anzeigen. Es stammt von ghostview ab, besitzt aber wegen der Xaw3d-Bibliothek eine schönere Benutzeroberfläche. In gv können Sie viele Operationen durchführen: Sie können die Ausrichtung und die Papiergröße eines Dokuments ändern, das Dokument skalieren oder die Kantenglättung (Anti-Aliasing) aktivieren. Fast jede Operation kann sowohl mit der Tastatur als auch mit der Maus durchgeführt werden.

Installieren Sie das gv-Paket wie folgt:

# pkg_add -r gv

Benutzen Sie die Ports-Sammlung, wenn das Paket nicht zur Verfügung steht:

# cd /usr/ports/print/gv
# make install clean

7.4.3. Xpdf

Ein schlankes und effizientes Programm zum Betrachten von PDF-Dateien ist Xpdf. Es benötigt wenige Ressourcen und ist sehr stabil. Da das Programm die Standard X-Zeichensätze benutzt, ist es nicht auf Motif oder ein anderes X-Toolkit angewiesen.

Das Xpdf-Paket können Sie mit dem folgenden Kommando installieren:

# pkg_add -r xpdf

Wenn das Paket nicht verfügbar ist, oder Sie lieber die Ports-Sammlung benutzen möchten, gehen Sie wie folgt vor:

# cd /usr/ports/graphics/xpdf
# make install clean

Wenn Sie nach Abschluss der Installation Xpdf starten, öffnen Sie das Menü mit der rechten Maustaste.


7.4.4. GQview

Mit GQview lassen sich Bilder verwalten. Unter anderem können Sie sich Bilder (auch auf dem ganzen Bildschirm) anschauen, ein externes Werkzeug aufrufen und eine Vorschau (thumbnail) erzeugen. Weiterhin können Sie automatisch ablaufende Präsentationen erstellen und grundlegende Dateioperationen durchführen, Bildersammlungen verwalten und doppelte Bilder aufspüren. GQview ist internationalisiert, das heißt es berücksichtigt die Spracheinstellungen des Systems.

Wenn Sie das GQview-Paket installieren wollen, geben Sie das folgende Kommando ein:

# pkg_add -r gqview

Ist das Paket nicht erhältlich, oder wenn Sie die Ports-Sammlung bevorzugen, setzen Sie die folgenden Kommandos ab:

# cd /usr/ports/graphics/gqview
# make install clean

7.5. Finanzsoftware

Wenn Sie, warum auch immer, Ihre Finanzen mit einem FreeBSD Arbeitsplatz verwalten wollen, stehen Ihnen verschiedene Anwendungen zur Verfügung. Einige von ihnen unterstützen verbreitete Formate, darunter Dateiformate, die von Quicken® oder Excel verwendet werden.

Dieser Abschnitt behandelt die folgenden Anwendungen:

Anwendung Ressourcenbedarf Installationsaufwand aus den Ports wichtige Abhängigkeiten
GnuCash niedrig hoch GNOME
Gnumeric niedrig hoch GNOME
Abacus niedrig niedrig Tcl/Tk
KMyMoney niedrig hoch KDE

7.5.1. GnuCash

GnuCash ist Teil des GNOME-Projekts, dessen Ziel es ist, leicht zu bedienende und doch leistungsfähige Anwendungen zu erstellen. Mit GnuCash können Sie Ihre Einnahmen und Ausgaben, Ihre Bankkonten und Wertpapiere verwalten. Das Programm ist leicht zu bedienen und genügt dennoch hohen Ansprüchen.

GnuCash stellt ein Register, ähnlich dem in einem Scheckheft und ein hierarchisches System von Konten zur Verfügung. Eine Transaktion kann in einzelne Teile aufgespaltet werden. GnuCash kann Quicken-Dateien (QIF) importieren und einbinden. Weiterhin unterstützt das Programm die meisten internationalen Formate für Zeitangaben und Währungen. Die Bedienung des Programms kann durch zahlreiche Tastenkombinationen und dem automatischen Vervollständigen von Eingaben beschleunigt werden.

Das GnuCash-Paket installieren Sie wie folgt:

# pkg_add -r gnucash

Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung:

# cd /usr/ports/finance/gnucash
# make install clean

7.5.2. Gnumeric

Gnumeric ist eine Tabellenkalkulation, die Teil der GNOME Benutzeroberfläche ist. Das Programm kann Eingaben anhand des Zellenformats oder einer Folge von Eingaben vervollständigen. Dateien verbreiteter Formate, wie die von Excel, Lotus 1-2-3 oder Quattro Pro lassen sich importieren. Grafiken erstellt Gnumeric mit dem Programm math/guppi. Gnumeric besitzt viele eingebaute Funktionen und Zellenformate (zum Beispiel die üblich verwendeten, wie Zahl, Währung, Datum oder Zeit).

Installieren Sie das Gnumeric-Paket mit dem folgenden Kommando:

# pkg_add -r gnumeric

Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung:

# cd /usr/ports/math/gnumeric
# make install clean

7.5.3. Abacus

Abacus ist eine kleine und leicht zu bedienende Tabellenkalkulation. Die vordefinierten Funktionen stammen aus verschiedenen Bereichen wie der Statistik, der Wirtschaft und der Mathematik. Das Programm kann Dateien im Excel Dateiformat importieren und exportieren sowie Ausgaben in PostScript erzeugen.

Installieren Sie das Abacus-Paket mit dem folgenden Kommando:

# pkg_add -r abacus

Wenn das Paket nicht zur Verfügung steht, benutzen Sie die Ports-Sammlung:

# cd /usr/ports/deskutils/abacus
# make install clean

7.5.4. KMyMoney

Bei KMyMoney handelt es sich ein Programm zur Verwaltung der persönlichen Finanzen, das unter KDE entwickelt wird. KMyMoney hat das Ziel, alle wichtigen Funktionen zu bieten, die auch von kommerziellen Programmen zur Verwaltung der persönlichen Finanzen unterstützt werden. Weiters zählen einfache Benutzung sowie korrekte doppelte Buchführung zu den herausragenden Fähigkeiten dieses Programms. KMyMoney unterstützt den Import von Datendateien im Format Quicken Interchange Format (QIF), kann Investionen verfolgen, unterstützt verschiedene Währungen und bietet umfangreiche Reportmöglichkeiten. OFX-Import wird über ein separates Plugin realisiert.

Um KMyMoney über das FreeBSD-Paketsystem zu installieren, geben Sie Folgendes ein:

# pkg_add -r kmymoney2

Sollte das Paket nicht verfügbar sein, können Sie das Programm auch über die Ports-Sammlung installieren:

# cd /usr/ports/finance/kmymoney2
# make install clean

7.6. Zusammenfassung

FreeBSD wird von Internet Service Providern wegen seiner Schnelligkeit und Stabilität eingesetzt, es ist aber auch zum Einrichten eines Arbeitsplatzes geeignet. Mit tausenden Anwendungen, die als Pakete oder Ports zur Verfügung stehen, können Sie sich einen Arbeitsplatz nach Ihren Wünschen einrichten.

Die folgende Aufstellung fasst die in diesem Kapitel besprochenen Anwendungen zusammen:

Anwendung Paket-Name Port-Name
Opera opera www/opera
Firefox firefox www/firefox
Chromium chromium www/chromium
KOffice koffice-kde4 editors/koffice-kde4
AbiWord abiword editors/abiword
The GIMP gimp graphics/gimp
OpenOffice.org openoffice editors/openoffice.org-3
LibreOffice libreoffice editors/libreoffice
Acrobat Reader acroread print/acroread8
gv gv print/gv
Xpdf xpdf graphics/xpdf
GQview gqview graphics/gqview
GnuCash gnucash finance/gnucash
Gnumeric gnumeric math/gnumeric
Abacus abacus deskutils/abacus
KMyMoney kmymoney2 finance/kmymoney2

Kapitel 8. Multimedia

Überarbeitet von Ross Lippert.

8.1. Übersicht

FreeBSD unterstützt viele unterschiedliche Soundkarten, die Ihnen den Genuss von Highfidelity-Klängen auf Ihrem Computer ermöglichen. Dazu gehört unter anderem die Möglichkeit, Tonquellen in den Formaten MPEG Audio Layer 3 (MP3), WAV, Ogg Vorbis und vielen weiteren Formaten aufzunehmen und wiederzugeben. Darüber hinaus enthält die FreeBSD Ports-Sammlung Anwendungen, die Ihnen das Bearbeiten Ihrer aufgenommenen Tonspuren, das Hinzufügen von Klangeffekten und die Kontrolle der angeschlossenen MIDI-Geräte erlauben.

Wenn Sie etwas Zeit investieren, können Sie mit FreeBSD auch Videos und DVDs abspielen. Im Vergleich zu Audio-Anwendungen gibt es weniger Anwendungen zum Kodieren, Konvertieren und Abspielen von Video-Formaten. Es gab, als dieses Kapitel geschrieben wurde, keine Anwendung, die einzelne Video-Formate ähnlich wie audio/sox konvertieren konnte. Allerdings ändert sich die Software in diesem Umfeld sehr schnell.

In diesem Kapitel wird das Einrichten von Soundkarten besprochen. Kapitel 6 beschreibt die Installation und Konfiguration von X11 und das Einrichten von Videokarten. Hinweise zur Verbesserung der Wiedergabe finden sich in diesem Kapitel.

Dieses Kapitel behandelt die folgenden Punkte:

  • Die Konfiguration des Systems damit Ihre Soundkarte erkannt wird.

  • Wie Sie die Funktion einer Soundkarte testen können.

  • Wie Sie Fehler in den Einstellungen von Soundkarten finden.

  • Wie Sie MP3s und andere Audio-Formate wiedergeben und erzeugen.

  • Die Video-Unterstützung des X-Servers.

  • Gute Anwendungen, die Videos abspielen und kodieren.

  • Die Wiedergabe von DVDs, .mpg- und .avi-Dateien.

  • Wie Sie CDs und DVDs in Dateien rippen.

  • Die Konfiguration von TV-Karten.

  • Das Einrichten von Scannern.

Bevor Sie dieses Kapitel lesen, sollten Sie:

  • Wissen, wie Sie einen neuen Kernel konfigurieren und installieren (Kapitel 9).

Warnung: Der Versuch eine Audio-CD mit mount(8) einzuhängen erzeugt mindestens einen Fehler; schlimmstenfalls kann es zu einer Kernel-Panic kommen. Die Medien besitzen eine andere Kodierung als normale ISO-Dateisysteme.


8.2. Soundkarten einrichten

Von Moses Moore. Aktualisiert von Marc Fonvieille. Übersetzt von Benedikt Köhler und Uwe Pierau.

8.2.1. Den Soundtreiber einrichten

Zunächst sollten Sie in Erfahrung bringen, welches Soundkartenmodell Sie besitzen, welchen Chip die Karte benutzt und ob es sich um eine PCI- oder ISA-Karte handelt. FreeBSD unterstützt eine Reihe von PCI- als auch von ISA-Karten. Die Hardware-Notes zählen alle unterstützten Karten und deren Treiber auf.

Um Ihre Soundkarte benutzen zu können, müssen Sie den richtigen Gerätetreiber laden. Sie haben zwei Möglichkeiten, den Treiber zu laden: Am einfachsten ist es, das Modul mit kldload(8) zu laden. Sie können dazu die Kommandozeile verwenden:

# kldload snd_emu10k1

Alternativ können Sie auch einen Eintrag in der Datei /boot/loader.conf erstellen:

snd_emu10k1_load="YES"

Beide Beispiele gelten für eine Creative SoundBlaster® Live! Soundkarte. Weitere ladbare Soundmodule sind in der Datei /boot/defaults/loader.conf aufgeführt. Wenn Sie nicht sicher sind, welchen Gerätetreiber Sie laden müssen, laden Sie den Treiber snd_driver:

# kldload snd_driver

Der Treiber snd_driver ist ein Meta-Treiber, der alle gebräuchlichen Treiber lädt und die Suche nach dem richtigen Treiber vereinfacht. Weiterhin können alle Treiber über /boot/loader.conf geladen werden.

Wollen Sie feststellen, welcher Treiber für Ihre Soundkarte vom Metatreiber snd_driver geladen wurde, sollten Sie sich mit cat /dev/sndstat den Inhalt der Datei /dev/sndstat ansehen.

Alternativ können Sie die Unterstützung für die Soundkarte direkt in den Kernel einkompilieren. Diese Methode im nächsten Abschnitt beschrieben. Weiteres über den Bau eines Kernels erfahren Sie im Kapitel Kernelkonfiguration.


8.2.1.1. Soundkarten in der Kernelkonfiguration einrichten

Zuerst müssen Sie sound(4), den Treiber für das Audio-Framework in die Kernelkonfiguration aufnehmen. Fügen Sie dazu die folgende Zeile in die Kernelkonfigurationsdatei ein:

device sound

Als Nächstes müssen Sie den richtigen Treiber in die Kernelkonfiguration einfügen. Den Treiber entnehmen Sie bitte der Liste der unterstützen Soundkarten aus den Hardware-Notes. Zum Beispiel wird die Creative SoundBlaster Live! Soundkarte vom Treiber snd_emu10k1(4) unterstützt. Für diese Karte verwenden Sie die nachstehende Zeile:

device snd_emu10k1

Die richtige Syntax für die Zeile lesen Sie bitte in der Hilfeseite des entsprechenden Treibers nach. Die korrekte Syntax für alle unterstützten Treiber finden Sie außerdem in der Datei /usr/src/sys/conf/NOTES.

Nicht PnP-fähige ISA-Soundkarten benötigen (wie alle anderen ISA-Karten auch) weiterhin Angaben zu den Karteneinstellungen (wie IRQ und I/O-Port). Die Karteneinstellungen tragen Sie in die Datei /boot/device.hints ein. Während des Systemstarts liest der loader(8) diese Datei und reicht die Einstellungen an den Kernel weiter. Für eine alte Creative SoundBlaster 16 ISA-Karte, die sowohl den snd_sbc(4)- als auch den snd_sb16-Treiber benötigt, fügen Sie folgende Zeilen in die Kernelkonfigurationsdatei ein:

device snd_sbc
device snd_sb16

In die Datei /boot/device.hints tragen Sie für diese Karte zusätzlich die folgenden Einstellungen ein:

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"

In diesem Beispiel benutzt die Karte den I/O-Port 0x220 und den IRQ 5.

Die Manualpage sound(4) sowie des jeweiligen Treibers beschreiben die Syntax der Einträge in der Datei /boot/device.hints.

Das Beispiel verwendet die vorgegebenen Werte. Falls Ihre Karteneinstellungen andere Werte vorgeben, müssen Sie die Werte in der Kernelkonfiguration anpassen. Weitere Informationen zu dieser Soundkarte entnehmen Sie bitte der Manualpage snd_sbc(4).


8.2.2. Die Soundkarte testen

Nachdem Sie den neuen Kernel gestartet oder das erforderliche Modul geladen haben, sollte Ihre Soundkarte in den Systemmeldungen (dmesg(8)) auftauchen. Zum Beispiel:

pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
pcm0: [GIANT-LOCKED]
pcm0: <Cirrus Logic CS4205 AC97 Codec>

Den Status der Karte können Sie über die Datei /dev/sndstat prüfen:

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz
16384
kld snd_ich (1p/2r/0v channels duplex default)

Die Ausgaben können auf Ihrem System anders aussehen. Wenn das Gerät pcm nicht erscheint, prüfen Sie bitte Ihre Konfiguration. Stellen sie sicher, dass Sie den richtigen Treiber gewählt haben. Abschnitt 8.2.2.1 beschreibt häufig auftretende Probleme.

Wenn alles glatt lief, haben Sie nun eine funktionierende Soundkarte. Wenn ein CD-ROM oder DVD-ROM-Laufwerk an Ihrer Soundkarte angeschlossen ist, können Sie jetzt mit cdcontrol(1) eine CD abspielen:

% cdcontrol -f /dev/acd0 play 1

Es gibt viele Anwendungen, wie audio/workman, die eine bessere Benutzerschnittstelle besitzen. Um sich MP3-Audiodateien anzuhören, können Sie eine Anwendung wie audio/mpg123 installieren.

Eine weitere schnelle Möglichkeit die Karte zu prüfen, ist es, Daten an das Gerät /dev/dsp zu senden:

% cat Datei > /dev/dsp

Für Datei können Sie eine beliebige Datei verwenden. Wenn Sie einige Geräusche hören, funktioniert die Soundkarte.

Anmerkung: Die Gerätedateien /dev/dsp* werden automatisch erzeugt, wenn sie das erste Mal benötigt werden. Werden sie nicht verwendet, sind sie hingegen nicht vorhanden und tauchen daher auch nicht in der Ausgabe von ls(1) auf.

Die Einstellungen des Mixers können Sie mit dem Kommando mixer(8) verändern. Weiteres lesen Sie bitte in der Hilfeseite mixer(8) nach.


8.2.2.1. Häufige Probleme

Fehler Lösung
sb_dspwr(XX) timed out

Der I/O Port ist nicht korrekt angegeben.

bad irq XX

Der IRQ ist falsch angegeben. Stellen Sie sicher, dass der angegebene IRQ mit dem Sound IRQ übereinstimmt.

xxx: gus pcm not attached, out of memory

Es ist nicht genug Speicher verfügbar, um das Gerät zu betreiben.

xxx: can't open /dev/dsp!

Überprüfen Sie mit fstat | grep dsp ob eine andere Anwendung das Gerät geöffnet hat. Häufige Störenfriede sind esound oder die Sound-Unterstützung von KDE.

Ein weiterer Fall ist der, dass moderne Graphikkarten oft auch ihre eigenen Soundtreiber mit sich führen, um HDMI oder ähnliches zu verwenden. Diese Audiogeräte werden manchmal vor der eigentlichen, separaten Soundkarte aufgeführt und dadurch nicht als das Standardgerät zum Abspielen von Tönen benutzt. Um zu prüfen, ob das bei Ihnen der Fall ist, führen Sie dmesg aus und suchen Sie nach der Zeichenfolge pcm. Die Ausgabe sieht in etwa so aus wie folgt:

...
hdac0: HDA Driver Revision: 20100226_0142
hdac1: HDA Driver Revision: 20100226_0142
hdac0: HDA Codec #0: NVidia (Unknown)
hdac0: HDA Codec #1: NVidia (Unknown)
hdac0: HDA Codec #2: NVidia (Unknown)
hdac0: HDA Codec #3: NVidia (Unknown)
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
...

Hier wurde die Graphikkarte (NVidia) vor der Soundkarte (Realtek ALC889) aufgeführt. Um die Soundkarte als Standardabspielgerät einzusetzen, ändern Sie hw.snd.default_unit auf die Einheit, welche für das Abspielen benutzt werden soll, wie folgt:

# sysctl hw.snd.default_unit=n

Hier repräsentiert n die Nummer der Soundkarte, die verwendet werden soll, in diesem Beispiel also 4. Sie können diese Änderung dauerhaft machen, indem Sie die folgende Zeile zu der /etc/sysctl.conf Datei hinzufügen:

hw.snd.default_unit=4

8.2.3. Mehrere Tonquellen abspielen

Beigetragen von Munish Chopra.

Oft sollen mehrere Tonquellen gleichzeitig abgespielt werden, auch wenn beispielsweise esound oder artsd das Audiogerät nicht mit einer anderen Anwendung teilen können.

Unter FreeBSD können mit sysctl(8) virtuelle Tonkanäle eingerichtet werden. Virtuelle Kanäle mischen die Tonquellen im Kernel (so können mehr Kanäle als von der Hardware unterstützt benutzt werden).

Die Anzahl der virtuellen Kanäle können Sie als Benutzer root wie folgt einstellen:

# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4

Im Beispiel werden vier virtuelle Kanäle eingerichtet, eine im Normalfall ausreichende Anzahl. Sowohl dev.pcm.0.play.vchans=4 und dev.pcm.0.rec.vchans=4 sind die Anzahl der virtuellen Kanäle des Geräts pcm0, die fürs Abspielen und Aufnehmen verwendet werden und sie können konfiguriert werden, sobald das Gerät existiert. hw.snd.maxautovchans ist die Anzahl der virtuellen Kanäle, die einem Gerät zugewiesen werden, wenn es durch kldload(8) eingerichtet wird. Da das Modul pcm unabhängig von den Hardware-Treibern geladen werden kann, gibt hw.snd.maxautovchans die Anzahl der virtuellen Kanäle an, die später eingerichtete Geräte erhalten. Lesen Sie dazu pcm(4) für weitere Informationen.

Anmerkung: Sie können die Anzahl der virtuellen Kanäle nur ändern, wenn das Gerät nicht genutzt wird. Schließen Sie daher zuerst alle Programme (etwa Musikabspielprogramme oder Sound-Daemonen), die auf dieses Gerät zugreifen.

Die korrekte pcm-Gerätedatei wird automatisch zugeteilt, wenn ein Programm das Gerät /dev/dsp0 anfordert.


8.2.4. Den Mixer einstellen

Beigetragen von Josef El-Rayes.

Die Voreinstellungen des Mixers sind im Treiber pcm(4) fest kodiert. Es gibt zwar viele Anwendungen und Dienste, die den Mixer einstellen können und die eingestellten Werte bei jedem Start wieder setzen, am einfachsten ist es allerdings, die Standardwerte für den Mixer direkt im Treiber einzustellen. Der Mixer kann in der Datei /boot/device.hints eingestellt werden:

hint.pcm.0.vol="50"

Die Zeile setzt die Lautstärke des Mixers beim Laden des Moduls pcm(4) auf den Wert 50.


8.3. MP3-Audio

Ein Beitrag von Chern Lee. Übersetzt von Benedikt Köhler.

MP3 (MPEG Layer 3 Audio) ermöglicht eine Klangwiedergabe in CD-ähnlicher Qualität, was Sie sich auf Ihrem FreeBSD-Rechner nicht entgehen lassen sollten.


8.3.1. MP3-Player

XMMS (X Multimedia System) ist bei weitem der beliebteste MP3-Player für X11. WinAmp-Skins können auch mit XMMS genutzt werden, da die Benutzerschnittstelle fast identisch mit der von Nullsofts WinAmp ist. Daneben unterstützt XMMS auch eigene Plugins.

XMMS kann als multimedia/xmms Port oder Package installiert werden.

Die Benutzerschnittstelle von XMMS ist leicht zu erlernen und enthält eine Playlist, einen graphischen Equalizer und vieles mehr. Diejenigen, die mit WinAmp vertraut sind, werden XMMS sehr leicht zu benutzen finden.

Der Port audio/mpg123 ist ein alternativer, kommandozeilenorientierter MP3-Player.

mpg123 kann ausgeführt werden, indem man das zu benutzende Sound Device und die abzuspielende MP3-Datei auf der Kommandozeile angibt. Wenn ihr Sound Device beispielsweise /dev/dsp1.0 lautet und Sie die MP3-Datei Foobar-GreatestHits.mp3 hören wollen, geben Sie Folgendes ein:

# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3.
Version 0.59r (1999/Jun/15).  Written and copyrights by Michael Hipp.
Uses code from various people.  See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!





Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

8.3.2. CD-Audio Tracks rippen

Bevor man eine ganze CD oder einen CD-Track in das MP3-Format umwandeln kann, müssen die Audiodaten von der CD auf die Festplatte gerippt werden. Dabei werden die CDDA (CD Digital Audio) Rohdaten in WAV-Dateien kopiert.

Die Anwendung cdda2wav die im sysutils/cdrtools Paket enthalten ist, kann zum Rippen der Audiodaten und anderen Informationen von CDs genutzt werden.

Wenn die Audio CD in dem Laufwerk liegt, können Sie mit folgendem Befehl (als root) eine ganze CD in einzelne WAV-Dateien (eine Datei für jeden Track) rippen:

# cdda2wav -D 0,1,0 -B

cdda2wav unterstützt auch ATAPI (IDE) CD-ROM-Laufwerke. Um von einem IDE-Laufwerk zu rippen, übergeben Sie auf der Kommandozeile statt der SCSI-IDs den Gerätenamen. Das folgende Kommando rippt den 7. Track:

# cdda2wav -D /dev/acd0 -t 7

Der Schalter -D 0,1,0 bezieht sich auf das SCSI Device 0,1,0, das sich aus dem Ergebnis des Befehls cdrecord -scanbus ergibt.

Um einzelne Tracks zu rippen, benutzen Sie den -t Schalter wie folgt:

# cdda2wav -D 0,1,0 -t 7

Dieses Beispiel rippt den siebten Track der Audio CD-ROM. Um mehrere Tracks zu rippen, zum Beispiel die Tracks eins bis sieben, können Sie wie folgt einen Bereich angeben:

# cdda2wav -D 0,1,0 -t 1+7

Mit dd(1) können Sie ebenfalls Audio-Stücke von ATAPI-Laufwerken kopieren. Dies wird in Abschnitt 19.6.5 erläutert.


8.3.3. MP3-Dateien kodieren

Gegenwärtig ist Lame der meistbenutzte MP3-Encoder. Lame finden Sie unter audio/lame im Ports-Verzeichnis.

Benutzen Sie die WAV-Dateien, die sie von CD gerippt haben, und wandeln sie mit dem folgenden Befehl die Datei audio01.wav in audio01.mp3 um:

# lame -h -b 128 \
--tt "Foo Liedtitel" \
--ta "FooBar Künstler" \
--tl "FooBar Album" \
--ty "2001" \
--tc "Geripped und kodiert von Foo" \
--tg "Musikrichtung" \
audio01.wav audio01.mp3

128 kbits ist die gewöhnliche MP3-Bitrate. Viele bevorzugen mit 160 oder 192 kbits eine höhere Qualität. Je höher die Bitrate ist, desto mehr Speicherplatz benötigt die resultierende MP3-Datei, allerdings wird die Qualität dadurch auch besser. Der Schalter -h verwendet den “higher quality but a little slower” (höhere Qualität, aber etwas langsamer) Modus. Die Schalter, die mit --t beginnen, sind ID3-Tags, die in der Regel Informationen über das Lied enthalten und in die MP3-Datei eingebettet sind. Weitere Optionen können in der Manualpage von Lame nachgelesen werden.


8.3.4. MP3-Dateien dekodieren

Um aus MP3-Dateien eine Audio CD zu erstellen, müssen diese in ein nicht komprimiertes WAV-Format umgewandelt werden. Sowohl XMMS als auch mpg123 unterstützen die Ausgabe der MP3-Dateien in unkomprimierte Dateiformate.

Dekodieren mit XMMS:

  1. Starten Sie XMMS.

  2. Klicken Sie mit der rechten Maustaste, um das XMMS-Menu zu öffnen.

  3. Wählen Sie Preference im Untermenü Options.

  4. Ändern Sie das Output-Plugin in “Disk Writer Plugin”.

  5. Drücken Sie Configure.

  6. Geben Sie ein Verzeichnis ein (oder wählen Sie browse), in das Sie die unkomprimierte Datei schreiben wollen.

  7. Laden Sie die MP3-Datei wie gewohnt in XMMS mit einer Lautstärke von 100% und einem abgeschalteten EQ.

  8. Drücken Sie Play und es wird so aussehen, als spiele XMMS die MP3-Datei ab, aber keine Musik ist zu hören. Der Player überspielt die MP3-Datei in eine Datei.

  9. Vergessen Sie nicht, das Output-Plugin wieder in den Ausgangszustand zurückzusetzen um wieder MP3-Dateien anhören zu können.

Mit mpg123 nach stdout schreiben:

  1. Geben Sie mpg123 -s audio01.mp3 > audio01.pcm ein.

XMMS schreibt die Datei im WAV-Format aus während mpg123 die MP3-Datei in rohe PCM-Audiodaten umwandelt. cdrecord kann mit beiden Formaten Audio-CDs erstellen, burncd(8) kann nur rohe PCM-Audiodaten verarbeiten. Der Dateikopf von WAV-Dateien erzeugt am Anfang des Stücks ein Knacken. Sie können den Dateikopf mit dem Werkzeug SoX, das sich als Paket oder aus dem Port audio/sox installieren lässt, entfernen:

% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw

Lesen Sie Abschnitt 19.6 in diesem Handbuch, um mehr Informationen zur Benutzung von CD-Brennern mit FreeBSD zu erhalten.


8.4. Videos wiedergeben

Beigetragen von Ross Lippert.

Die Wiedergabe von Videos ist ein neues, sich schnell entwickelndes, Anwendungsgebiet. Seien Sie geduldig, es wird nicht alles so glatt laufen, wie bei den Audio-Anwendungen.

Bevor Sie beginnen, sollten Sie das Modell Ihrer Videokarte und den benutzten Chip kennen. Obwohl Xorg viele Videokarten unterstützt, können nur einige Karten Videos schnell genug wiedergeben. Eine Liste der Erweiterungen, die der X-Server für eine Videokarte unterstützt, erhalten Sie unter laufendem X11 mit dem Befehl xdpyinfo(1).

Halten Sie eine kurze MPEG-Datei bereit, mit der Sie Wiedergabeprogramme und deren Optionen testen können. Da einige DVD-Spieler in der Voreinstellung das DVD-Gerät mit /dev/dvd ansprechen oder diesen Namen fest einkodiert haben, wollen Sie vielleicht symbolische Links auf die richtigen Geräte anlegen:

# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvd

Wegen devfs(5) gehen gesondert angelegte Links wie diese bei einem Neustart des Systems verloren. Damit die symbolischen Links automatisch beim Neustart des Systems angelegt werden, fügen Sie die folgenden Zeilen in /etc/devfs.conf ein:

link acd0 dvd
link acd0 rdvd

Zum Entschlüsseln von DVDs müssen bestimmte DVD-ROM-Funktionen aufgerufen werden und schreibender Zugriff auf das DVD-Gerät erlaubt sein.

X11 benutzt Shared-Memory und Sie sollten die nachstehenden sysctl(8)-Variablen auf die gezeigten Werte erhöhen:

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

8.4.1. Video-Schnittstellen

Es gibt einige Möglichkeiten, Videos unter X11 abzuspielen. Welche Möglichkeit funktioniert, hängt stark von der verwendeten Hardware ab. Ebenso hängt die erzielte Qualität von der Hardware ab. Die Videowiedergabe unter X11 ist ein aktuelles Thema, sodass jede neue Version von Xorg wahrscheinlich erhebliche Verbesserungen enthält.

Gebräuchliche Video-Schnittstellen sind:

  1. X11: normale X11-Ausgabe über Shared-Memory.

  2. XVideo: Eine Erweiterung der X11-Schnittstelle, die Videos in jedem X11-Drawable anzeigen kann.

  3. SDL: Simple Directmedia Layer.

  4. DGA: Direct Graphics Access.

  5. SVGAlib: Eine Schnittstelle zur Grafikausgabe auf der Konsole.


8.4.1.1. XVideo

Die Erweiterung XVideo (auch Xvideo, Xv oder xv) von Xorg erlaubt die beschleunigte Wiedergabe von Videos in jedem Drawable. Diese Erweiterung liefert auch auf weniger leistungsfähigen Systemen (beispielsweise einem PIII 400 MHz Laptop) eine gute Wiedergabe.

Ob die Erweiterung läuft, entnehmen Sie der Ausgabe von xvinfo:

% xvinfo

XVideo wird untertsützt, wenn die Ausgabe wie folgt aussieht:

X-Video Extension version 2.2
screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

Einige der aufgeführten Formate (wie YUV2 oder YUV12) existieren in machen XVideo-Implementierungen nicht. Dies kann zu Problemen mit einigen Spielern führen.

XVideo wird wahrscheinlich von Ihrer Karte nicht unterstützt, wenn die die Ausgabe wie folgt aussieht:

X-Video Extension version 2.2
screen #0
no adaptors present

Wenn die XVideo-Erweiterung auf Ihrer Karte nicht läuft, wird es nur etwas schwieriger, die Anforderungen für die Wiedergabe von Videos zu erfüllen. Abhängig von Ihrer Videokarte und Ihrem Prozessor können Sie dennoch zufriedenstellende Ergebnisse erzielen. Sie sollten vielleicht die weiterführenden Quellen in Abschnitt 8.4.3 zu Rate ziehen, um die Geschwindigkeit Ihres Systems zu steigern.


8.4.1.2. Simple Directmedia Layer

Die Simple Directmedia Layer, SDL, ist eine zwischen Microsoft Windows, BeOS und UNIX portable Schnittstelle. Mit dieser Schnittstelle können Anwendungen plattformunabhängig und effizient Ton und Grafik benutzen. SDL bietet eine hardwarenahe Schnittstelle, die manchmal schneller als die X11-Schnittstelle sein kann.

SDL finden Sie in den Ports im Verzeichnis devel/sdl12.


8.4.1.3. Direct Graphics Access

Die X11-Erweiterung Direct Graphics Access (DGA) erlaubt es Anwendungen, am X-Server vorbei direkt in den Framebuffer zu schreiben. Da die Anwendung und der X-Server auf gemeinsame Speicherbereiche zugreifen, müssen die Anwendungen unter dem Benutzer root laufen.

Die DGA-Erweiterung kann mit dga(1) getestet werden. Das Kommando dga wechselt, jedes Mal wenn eine Taste gedrückt wird, die Farben der Anzeige. Sie können das Programm mit der Taste q verlassen.


8.4.2. Video-Anwendungen

Dieser Abschnitt behandelt Anwendungen aus der FreeBSD-Ports-Sammlung, die Videos abspielen. An der Videowiedergabe wird derzeit aktiv gearbeitet, sodass der Funktionsumfang der Anwendungen von dem hier beschriebenen abweichen kann.

Viele unter FreeBSD laufende Videoanwendungen wurden unter Linux entwickelt und befinden sich noch im Beta-Status. Der Betrieb dieser Anwendungen unter FreeBSD stößt vielleicht auf einige der nachstehenden Probleme:

  1. Eine Anwendung kann eine Datei einer anderen Anwendung nicht abspielen.

  2. Eine Anwendung kann eine selbst produzierte Datei nicht abspielen.

  3. Wenn dieselbe Anwendung auf unterschiedlichen Maschinen gebaut wird, wird ein Video unterschiedlich wiedergegeben.

  4. Ein vergleichsweise einfacher Filter, wie die Skalierung eines Bildes, führt zu deutlichen Artefakten in der Darstellung.

  5. Eine Anwendung stürzt häufig ab.

  6. Die Dokumentation wird bei der Installation des Ports nicht installiert. Sie befindet sich entweder auf dem Internet oder im Verzeichnis work des Ports.

Viele Anwendungen sind zudem sehr “Linux-lastig”. Probleme entstehen durch die Implementierung von Standard-Bibliotheken in Linux-Distributionen oder dadurch, dass die Anwendung bestimmte Linux-Kernelfunktionen voraussetzt. Diese Probleme werden nicht immer vom Betreuer eines Ports bemerkt und umgangen. In der Praxis entstehen dadurch folgende Probleme:

  1. Eigenschaften des Prozessors werden über /proc/cpuinfo ermittelt.

  2. Die falsche Anwendung von Threads führt dazu, dass sich ein Programm aufhängt statt sich zu beenden.

  3. Die Anwendung hängt von anderen Anwendungen ab, die sich noch nicht in der FreeBSD-Ports-Sammlung befinden.

Allerdings arbeiten die Anwendungsentwickler bislang mit den Betreuern der Ports zusammen, sodass zusätzlicher Portierungsaufwand minimiert wird.


8.4.2.1. MPlayer

MPlayer ist ein kürzlich entstandener und sich stark weiterentwickelnder Video-Spieler. Das Hauptaugenmerk des MPlayer-Teams liegt auf Geschwindigkeit und Flexibilität auf Linux und anderen UNIX Systemen. Das Projekt entstand weil der Gründer des Teams unzufrieden mit der Geschwindigkeit bestehender Video-Spieler war. Kritiker behaupten, dass die Benutzeroberfläche der einfachen Gestaltung zum Opfer fiel. Wenn Sie sich allerdings erstmal an die Kommandozeilenoptionen und die Tastensteuerung gewöhnt haben, funktioniert die Anwendung sehr gut.


8.4.2.1.1. MPlayer bauen

MPlayer finden Sie in der Ports-Sammlung unter multimedia/mplayer. Der Bau von MPlayer berücksichtigt die vorhandene Harware und erzeugt ein Programm, das nicht auf ein anderes System übertragbar ist. Es ist daher wichtig, dass Sie das Programm aus den Ports bauen und nicht das fertige Paket installieren. Zusätzlich können Sie auf der Kommandozeile von make noch einige Optionen angeben, die im Makefile beschrieben sind und am die Anfang des Baus ausgegeben werden:

# cd /usr/ports/multimedia/mplayer
# make
N - O - T - E

Take a careful look into the Makefile in order
to learn how to tune mplayer towards you personal preferences!
For example,
make WITH_GTK1
builds MPlayer with GTK1-GUI support.
If you want to use the GUI, you can either install
/usr/ports/multimedia/mplayer-skins
or download official skin collections from
http://www.mplayerhq.hu/homepage/dload.html

Für die meisten Benutzer sind die voreingestellten Option in Ordnung. Wenn Sie den XviD-Codec benötigen, müssen Sie auf der Kommandozeile die Option WITH_XVID angeben. Das DVD-Gerät können Sie mit der Option WITH_DVD_DEVICE angeben. Wenn Sie die Option nicht angeben, wird /dev/acd0 benutzt.

Als dieser Abschnitt verfasst wurde, baute der MPlayer-Port die HTML-Dokumentation sowie die beiden Programme mplayer und mencoder. Mit mencoder können Sie Videodateien umwandeln.

Die HTML-Dokumentation von MPlayer ist sehr lehrreich. Wenn Sie in diesem Kapitel Informationen über Video-Hardware oder Schnittstellen vermissen, ist die MPlayer-Dokumentation eine ausgezeichnete Quelle. Wenn Sie Informationen über die Video-Unterstützung unter UNIX benötigen, sollten Sie die MPlayer-Dokumentation auf jeden Fall lesen.


8.4.2.1.2. MPlayer benutzen

Jeder Benutzer von MPlayer muss in seinem Heimatverzeichnis das Verzeichnis .mplayer anlegen. Dieses Verzeichnis können Sie wie folgt anlegen:

% cd /usr/ports/multimedia/mplayer
% make install-user

Die Kommandozeilenoptionen von mplayer sind in der Hilfeseite aufgeführt. Eine genaue Beschreibung befindet sich in der HTML-Dokumentation. In diesem Abschnitt wird nur der normale Gebrauch von mplayer beschrieben.

Um eine Datei, wie testfile.avi, unter verschiedenen Video-Schnittstellen abzuspielen, benutzen Sie die Option -vo:

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

Es lohnt sich, alle Option zu testen. Die erzielte Geschwindigkeit hängt von vielen Faktoren ab und variiert beträchtlich je nach eingesetzter Hardware.

Wenn Sie eine DVD abspielen wollen, ersetzen Sie testfile.avi durch -dvd://N Gerät. N ist die Nummer des Stücks, das Sie abspielen wollen und Gerät gibt den Gerätenamen des DVD-ROMs an. Das nachstehende Kommando spielt das dritte Stück von /dev/dvd:

# mplayer -vo dga -dvd://3 /dev/dvd

Anmerkung: Das standardmäßig verwendete DVD-Laufwerk kann beim Bau des MPlayer-Ports mit der Option WITH_DVD_DEVICE festgelegt werden. Die Voreinstellung verwendet das Gerät /dev/acd0. Genaueres finden Sie im Makefile des Ports.

Die Tastenkombinationen zum Abbrechen, Anhalten und Weiterführen der Wiedergabe entnehmen Sie bitte der Ausgabe von mplayer -h oder der Hilfeseite.

Weitere nützliche Optionen für die Wiedergabe sind -fs -zoom zur Wiedergabe im Vollbild-Modus und -framedrop zur Steigerung der Geschwindigkeit.

Damit die Kommandozeile von mplayer kurz bleibt, kann ein Benutzer Vorgaben in der Datei .mplayer/config hinterlegen:

vo=xv
fs=yes
zoom=yes

Schließlich kann mplayer noch DVD-Stücke in .vob-Dateien rippen. Das zweite Stück einer DVD wandeln Sie wie folgt in eine Datei um:

# mplayer -dumpstream -dumpfile out.vob -dvd://2 /dev/dvd

Die Ausgabedatei out.vob wird im MPEG-Format abgespeichert und kann mit anderen Werkzeugen aus diesem Abschnitt bearbeitet werden.


8.4.2.1.3. mencoder

Sie sollten die HTML-Dokumentation lesen, bevor Sie mencoder benutzen. Es gibt zwar eine Hilfeseite, die aber ohne die HTML-Dokumentation nur eingeschräkt nützlich ist. Es gibt viele Möglichkeiten die Qualität zu verbessern, die Bitrate zu verringern und Formate zu konvertieren. Einige davon haben erhebliche Auswirkungen auf die Geschwindigkeit der Wiedergabe. Zum Start finden Sie im Folgenden einige Kommandozeilen. Die erste kopiert einfach eine Datei:

% mencoder input.avi -oac copy -ovc copy -o output.avi

Falsche Kombinationen von Kommandozeilenparametern ergeben eventuell Dateien, die selbst mplayer nicht mehr abspielen kann. Wenn Sie in eine Datei rippen, sollten Sie daher auf jeden Fall die Option -dumpfile von mplayer verwenden.

Die nachstehende Kommandozeile wandelt die Datei input.avi nach MPEG4 mit MPEG3 für den Ton um (hierfür wird der Ports audio/lame benötigt):

% mencoder input.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

Die Ausgabedatei lässt sowohl mit mplayer als auch xine abspielen.

Wenn Sie input.avi durch -dvd://1 /dev/dvd ersetzen und das Kommando unter root laufen lassen, können Sie ein DVD-Stück direkt konvertieren. Da Sie wahrscheinlich beim ersten Mal unzufrieden mit den Ergebnissen sind, sollten Sie das Stück zuerst in eine Datei schreiben und anschließend die Datei weiterverarbeiten.


8.4.2.2. Der Video-Spieler xine

Der Video-Spieler xine ist ein Projekt mit großem Umfang. Das Projekt will nicht nur ein Programm für alle Video-Anwendungen bieten, sondern auch eine wiederverwendbare Bibliothek und ein Programm, das durch Plugins erweiterbar ist. Das Programm steht als fertiges Paket oder als Port unter multimedia/xine zur Verfügung.

Der multimedia/xine-Spieler hat noch ein paar Ecken und Kanten, macht aber insgesamt einen guten Eindruck. Für einen reibungslosen Betrieb benötigt xine entweder eine schnelle CPU oder die XVideo-Erweiterung. Das GUI ist etwas schwerfällig.

Zurzeit gibt es kein xine-Modul, das CSS-kodierte DVDs abspielen kann und sich in der FreeBSD Ports-Sammlung befindet.

xine ist benutzerfreundlicher als MPlayer, bietet allerdings nicht soviele Möglichkeiten. Am schnellsten läuft xine mit der XVideo-Erweiterung.

In der Voreinstellung startet xine eine grafische Benutzeroberfläche. Über Menüs können Sie Dateien öffnen:

% xine

Alternativ können Sie das Programm auch ohne GUI aufrufen und Dateien direkt abspielen:

% xine -g -p mymovie.avi

8.4.2.3. Die transcode-Werkzeuge

transcode ist kein Spieler, sondern eine Sammlung von Werkzeugen zur Umwandlung von Video- und Sounddateien. transcode mischt Video-Dateien und kann kaputte Video-Dateien reparieren. Die Werkzeuge werden als Filter verwendet, das heißt die Ein- und Ausgaben verwenden stdin/stdout.

Beim Bau von transcode über den Port multimedia/transcode können zwar zahreiche Optionen angegeben werden. Empfehlenswert ist es aber, den Bau mit folgendem Befehl zu starten:

# make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \
WITH_MJPEG=yes -DWITH_XVID=yes

Diese Einstellungen sollen für die meisten Anwender ausreichend sein.

Um die Fähigkeiten von transcode zu illustrieren, wird im folgenden Beispiel eine DivX-Datei in eine PAL MPEG-1-Datei konvertiert:

% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

Die daraus resultierende MPEG-Datei, output_vcd.mpg, kann beispielsweise mit MPlayer abgespielt werden. Sie können sie sogar als Video-CD auf eine CD-R brennen. Wenn Sie diese Funktion benötigen, müssen Sie zusätzlich die beiden Programme multimedia/vcdimager und sysutils/cdrdao installieren.

Zwar gibt es eine Manualpage zu transcode, Sie sollen aber auf jeden Fall auch die Informationen und Beispiele im transcode-Wiki lesen.


8.4.3. Weiterführende Quellen

Die Video-Software für FreeBSD entwickelt sich sehr schnell. Es ist wahrscheinlich, dass die hier angesprochenen Probleme bald gelöst sind. Bis dahin müssen Anwender, die das meiste aus den Audio- und Video-Fähigkeiten von FreeBSD machen wollen, Informationen aus mehreren FAQs und Tutorien zusammensuchen und verschiedene Anwendungen nebeneinander betreiben. Dieser Abschnitt weist auf weitere Informationsquellen hin.

Die MPlayer-Dokumentation ist sehr aufschlussreich. Die Dokumente sollten wahrscheinlich von jedem gelesen werden, der hohe Fachkenntnisse über Video auf UNIX Systemen erlangen will. Die MPlayer-Mailinglisten reagiert feindselig auf Personen, die es nicht für nötig halten, die Dokumentation zu lesen. Wenn Sie Fehlerberichte an die Liste schicken wollen, lesen Sie bitte vorher die ausgezeichnete Dokumentation (RTFM).

Das xine HOWTO enthält allgemein gültige Hinweise zur Verbesserung der Wiedergabegeschwindigkeit.

Schließlich gibt es noch weitere vielversprechende Anwendungen, die Sie vielleicht ausprobieren wollen:


8.5. TV-Karten einrichten

Beigetragen von Josef El-Rayes. Überarbeitet von Marc Fonvieille.

8.5.1. Einführung

Mit TV-Karten können Sie mit Ihrem Rechner über Kabel oder Antenne fernsehen. Die meisten Karten besitzen einen RCA- oder S-Video-Eingang. Einige Karten haben auch einen FM-Radio-Empfänger.

Der bktr(4)-Treiber von FreeBSD unterstützt PCI-TV-Karten mit einem Brooktree Bt848/849/878/879 oder einem Conexant CN-878/Fusion 878a Chip. Die Karte sollte einen der unterstützten Empfänger besitzen, die in der Hilfeseite bktr(4) aufgeführt sind.


8.5.2. Den Treiber einrichten

Um Ihre Karte zu benutzen, müssen Sie den bktr(4)-Treiber laden. Fügen Sie die nachstehende Zeile in die Datei /boot/loader.conf ein:

bktr_load="YES"

Sie können den Treiber für die TV-Karte auch fest in den Kernel compilieren. Erweitern Sie dazu Ihre Kernelkonfiguration um die folgenden Zeilen:

device	 bktr
device	iicbus
device	iicbb
device	smbus

Die zusätzlichen Treiber werden benötigt, da die Komponenten der Karte über einen I2C-Bus verbunden sind. Bauen und installieren Sie dann den neuen Kernel.

Anschließend müssen Sie Ihr System neu starten. Während des Neustarts sollte Ihre TV-Karte erkannt werden:

bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
iicbb0: <I2C bit-banging driver> on bti2c0
iicbus0: <Philips I2C bus> on iicbb0 master-only
iicbus1: <Philips I2C bus> on iicbb0 master-only
smbus0: <System Management Bus> on bti2c0
bktr0: Pinnacle/Miro TV, Philips SECAM tuner.

Abhängig von Ihrer Hardware können die Meldungen natürlich anders aussehen. Sie sollten aber prüfen, dass der Empfänger richtig erkannt wird. Die entdeckten Geräte lassen sich mit sysctl(8) oder in der Kernelkonfigurationsdatei überschreiben. Wenn Sie beispielsweise einen Philips-SECAM-Empfänger erzwingen wollen, fügen Sie die folgende Zeile zur Kernelkonfigurationsdatei hinzu:

options OVERRIDE_TUNER=6

Alternativ können Sie direkt sysctl(8) benutzen:

# sysctl hw.bt848.tuner=6

Weitere Informationen zu den verschiedenen Optionen finden Sie in bktr(4) sowie in der Datei /usr/src/sys/conf/NOTES.


8.5.3. Nützliche Anwendungen

Um die TV-Karte zu benutzen, müssen Sie eine der nachstehenden Anwendungen installieren:

  • multimedia/fxtv lässt das Fernsehprogramm in einem Fenster laufen und kann Bilder, Audio und Video aufzeichnen.

  • multimedia/xawtv eine weitere TV-Anwendung, mit den gleichen Funktionen wie fxtv.

  • misc/alevt dekodiert und zeigt Videotext/Teletext an.

  • Mit audio/xmradio lässt sich der FM-Radio-Empfänger, der sich auf einigen TV-Karten befindet, benutzen.

  • audio/wmtune ein leicht zu bedienender Radio-Empfänger.

Weitere Anwendungen finden Sie in der FreeBSD Ports-Sammlung.


8.5.4. Fehlersuche

Wenn Sie Probleme mit Ihrer TV-Karte haben, prüfen Sie zuerst, ob der Video-Capture-Chip und der Empfänger auch wirklich vom bktr(4)-Treiber unterstützt werden. Prüfen Sie dann, ob Sie die richtigen Optionen verwenden. Weitere Hilfe erhalten Sie auf der Mailingliste freebsd-multimedia und in deren Archiven.


8.6. MythTV

MythTV ist ein Open Source PVR-Softwareprojekt.

Es ist in der Linux-Welt als komplexe Anwendung mit vielen Abhängigkeiten bekannt und deshalb schwierig zu installieren. Das FreeBSD Portssystem vereinfacht diesen Prozess sehr stark, jedoch müssen manche Komponenten manuell eingerichtet werden. Dieser Abschnitt soll dazu dienen, bei der Einrichtung von MythTV zu helfen.


8.6.1. Hardware

MythTV wurde entwickelt, um V4L zu verwenden, so dass auf Videoeingabegeräte wie Kodierer und Empfänger zugegriffen werden kann. Aktuell funktioniert MythTV am besten mit USB DVB-S/C/T Karten, die von multimedia/webcamd unterstützt werden, weil webcamd eine V4L-Anwendung zur Verfügung stellt, die als Benutzerprogramm läft. Jede DVB-Karte, welche von webcamd unterstützt wird, sollte mit MythTV funktionieren, jedoch gibt es eine Liste von Karten, die hier abgerufen werden kann. Es existieren auch Treiber für Hauppauge-Karten in den folgenden Paketen: multimedia/pvr250 und multimedia/pvrxxx, allerdings liefern diese nur eine Treiberschnittstelle, die nicht dem Standard entspricht und die nicht mit MythTV-Versionen grösser als 0.23 funktionieren.

HTPC enthält eine Liste von allen verfügbaren DVB-Treibern.


8.6.2. Abhängigkeiten

Da MythTV flexibel und modular aufgebaut ist, ist der Benutzer in der Lage, das Frontend und Backend auf unterschiedlichen Rechnern laufen zu lassen.

Für das Frontend wird multimedia/mythtv-frontend, sowie ein X-Server benötigt, welcher in x11/xorg zu finden ist. Idealerweise besitzt der Frontend-Computer auch eine Videokarte, die XvMC unterstützt, sowie optional eine LIRC-kompatible Fernbedienung.

Für das Backend wird multimedia/mythtv benötigt, ebenso wie eine MySQL™-Datenbank, sowie zusätzlich einen Empfänger und Speicherplatz für Aufzeichnungen. Das MySQL-Paket sollte automatisch als Abhängigkeit mitinstalliert werden, wenn multimedia/mythtv gebaut wird.


8.6.3. MythTV einrichten

Um MythTV zu installieren, befolgen Sie die hier aufgeführten Schritte. Zuerst installieren Sie MythTV aus der Ports-Sammlung:

# cd /usr/ports/multimedia/mythtv
# make install

Richten Sie anschliessend die MythTV-Datenbank ein:

# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql

Konfigurieren Sie dann das Backend:

# mythtv-setup

Zum Schluss starten Sie das Backend:

# echo 'mythbackend_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/mythbackend start

8.7. Scanner

Beigetragen von Marc Fonvieille.

8.7.1. Einführung

Unter FreeBSD stellt SANE (Scanner Access Now Easy) aus der Ports-Sammlung eine einheitliche Schnittstelle (API) für den Zugriff auf Scanner bereit. SANE wiederum greift auf Scanner mithilfe einiger FreeBSD-Treiber zu.

FreeBSD unterstützt sowohl SCSI- als auch USB-Scanner. Prüfen Sie vor der Konfiguration mithilfe der Liste der unterstützten Geräte ob Ihr Scanner von SANE unterstützt wird. Bei Systemen vor FreeBSD 8.X zählt die Hilfeseite uscanner(4) ebenfalls die unterstützten USB-Scanner auf.


8.7.2. Den Kernel für Scanner einrichten

Da sowohl SCSI- als auch USB-Scanner unterstützt werden, werden abhängig von der Schnittstelle unterschiedliche Treiber benötigt.


8.7.2.1. USB-Scanner

Im GENERIC-Kernel sind schon alle, für einen USB-Scanner notwendigen, Treiber enthalten. Wenn Sie einen angepassten Kernel benutzen, prüfen Sie, dass die Kernelkonfiguration die nachstehenden Zeilen enthält:

device usb
device uhci
device ohci
device ehci

Bei Systemen vor FreeBSD 8.X wird ausserdem noch die folgende Zeile benötigt:

device uscanner

Bei diesen FreeBSD-Versionen liefert das uscanner(4)-Gerät die Unterstützung für USB-Scanner. Seit FreeBSD 8.0 ist diese Unterstützung direkt in der libusb(3)-Bibliothek enthalten.

Nachdem Sie das System mit dem richtigen Kernel neu gestartet haben, stecken Sie den USB-Scanner ein. Danach sollte in den Systemmeldungen (die Sie mit dmesg(8) betrachten können) eine Zeile ähnlich der folgenden erscheinen:

ugen0.2: <EPSON> at usbus0

bzw. auf einem FreeBSD 7.X System:

uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2

Diese Meldung besagt, dass der Scanner entweder die Gerätedatei /dev/ugen0.2 oder /dev/uscanner0 benutzt, je nachdem, welche FreeBSD-Version eingesetzt wird. In diesem Beispiel wurde ein EPSON Perfection® 1650 USB-Scanner verwendet.


8.7.2.2. SCSI-Scanner

Wenn Ihr Scanner eine SCSI-Schnittstelle besitzt, ist die Kernelkonfiguration abhängig vom verwendeten SCSI-Controller. Der GENERIC-Kernel unterstützt die gebräuchlichen SCSI-Controller. Den richtigen Treiber finden Sie in der Datei NOTES. Neben dem Treiber muss Ihre Kernelkonfiguration noch die nachstehenden Zeilen enthalten:

device scbus
device pass

Nachdem Sie einen Kernel gebaut und installiert haben, sollte der Scanner beim Neustart in den Systemmeldungen erscheinen:

pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfers

Wenn der Scanner während des Systemstarts ausgeschaltet war, können Sie die Geräteerkennung erzwingen, indem Sie den SCSI-Bus erneut absuchen. Verwenden Sie dazu das Kommando camcontrol(8):

# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful

Der Scanner wird anschließend in der SCSI-Geräteliste angezeigt:

# camcontrol devlist
<IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)

Weiteres über SCSI-Geräte lesen Sie bitte in den Hilfeseiten scsi(4) und camcontrol(8) nach.


8.7.3. SANE konfigurieren

SANE besteht aus zwei Teilen, den Backends (graphics/sane-backends) und den Frontends (graphics/sane-frontends). Das Backend greift auf den Scanner zu. Welches Backend welchen Scanner unterstützt, entnehmen Sie der Liste der unterstützten Geräte. Der Betrieb eines Scanners ist nur mit dem richtigen Backend möglich. Die Frontends sind die Anwendungen, mit denen gescannt wird (xscanimage).

Installieren Sie zuerst den Port oder das Paket graphics/sane-backends. Anschließend können Sie mit dem Befehl sane-find-scanner prüfen, ob SANE Ihren Scanner erkennt:

# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3

Die Ausgabe zeigt die Schnittstelle und die verwendete Gerätedatei des Scanners. Der Hersteller und das Modell können in der Ausgabe fehlen.

Anmerkung: Bei einigen USB-Scannern müssen Sie die Firmware aktualisieren, dies wird in der Hilfeseite des Backends erklärt. Lesen Sie bitte auch die Hilfeseiten sane-find-scanner(1) und sane(7).

Als nächstes müssen Sie prüfen, ob der Scanner vom Frontend erkannt wird. Die SANE-Backends werden mit dem Kommandozeilenwerkzeug scanimage(1) geliefert. Mit diesem Werkzeug können Sie sich Scanner anzeigen lassen und den Scan-Prozess von der Kommandozeile starten. Die Option -L zeigt die Scanner an:

# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner

Oder, für das Beispiel mit dem USB-Scanner in Abschnitt 8.7.2.1:

# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

Diese Ausgabe stammt von einem FreeBSD 8.X System, die Zeile 'epson2:libusb:/dev/usb:/dev/ugen0.2' nennt das Backend (epson2) und die Gerätedatei (/dev/ugen0.2), die der Scanner verwendet.

Anmerkung: Erscheint die Meldung, dass kein Scanner gefunden wurde oder wird gar keine Ausgabe erzeugt, konnte scanimage(1) keinen Scanner erkennen. In diesem Fall müssen Sie in der Konfigurationsdatei des Backends das zu benutzende Gerät eintragen. Die Konfigurationsdateien der Backends befinden sich im Verzeichnis /usr/local/etc/sane.d/. Erkennungsprobleme treten bei bestimmten USB-Scannern auf.

Mit dem USB-Scanner aus Abschnitt 8.7.2.1 zeigt sane-find-scanner unter FreeBSD 8.X die folgende Ausgabe:

# sane-find-scanner -q
found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0

Der Scanner wurde richtig erkennt, er benutzt eine USB-Schnittstelle und verwendet die Gerätedatei /dev/uscanner0. Ob der Scanner vom Frontend erkannt wird, zeigt das nachstehende Kommando:

# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

Da der Scanner nicht erkannt wurde, muss die Datei /usr/local/etc/sane.d/epson2.conf editiert werden. Der verwendete Scanner war ein EPSON Perfection 1650, daher wird das epson2-Backend benutzt. Lesen Sie bitte alle Kommentare in der Konfigurationsdatei des Backends. Die durchzuführenden Änderungen sind einfach. Kommentieren Sie zunächst alle Zeilen mit der falschen Schnittstelle aus. Da der Scanner eine USB-Schnittstelle besitzt, wurden im Beispiel alle Zeilen, die mit scsi anfingen, auskommentiert. Fügen Sie dann die Schnittstelle und den Gerätenamen am Ende der Datei ein. In diesem Beispiel wurde die nachstehende Zeile eingefügt:

usb /dev/uscanner0

Weitere Hinweise entnehmen Sie bitte der Hilfeseite des Backends. Jetzt können Sie prüfen, ob der Scanner richtig erkannt wird:

# scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner

Der Scanner wurde nun erkannt. Es ist nicht wichtig, ob der Hersteller oder das Modell Ihres Scanners korrekt angezeigt werden. Wichtig ist nur die Ausgabe `epson:/dev/uscanner0', die das richtige Backend und den richtigen Gerätenamen anzeigt.

Wenn scanimage -L den Scanner erkannt hat, ist der Scanner eingerichtet und bereit, zu scannen.

Obwohl wir mit scanimage(1) von der Kommandozeile scannen können, ist eine graphische Anwendung zum Scannen besser geeignet. SANE bietet ein einfaches und effizientes Werkzeug: xscanimage (graphics/sane-frontends).

Xsane (graphics/xsane) ist eine weitere beliebte graphische Anwendung. Dieses Frontend besitzt erweiterte Funktionen wie den Scan-Modus (beispielsweise Photo, Fax), eine Farbkorrektur und Batch-Scans. Beide Anwendungen lassen sich als GIMP-Plugin verwenden.


8.7.4. Den Scanner für Benutzerkonten freigeben

Zuvor wurden alle Tätigkeiten mit root-Rechten ausgeführt. Wenn andere Benutzer den Scanner benutzen sollen, müssen sie Lese- und Schreibrechte auf die Gerätedatei des Scanners besitzen. Im Beispiel wird die Datei /dev/ugen0.2 verwendet, die faktisch nur ein Symlink auf die echte Gerätedatei, /dev/usb/0.2.0 genannt, darstellt (ein kurzer Blick auf das /dev-Verzeichnis bestätigt dies). Sowohl der Symlink als auch die Gerätedatei sind jeweils im Besitz der Gruppen wheel und operator. Damit der Benutzer joe auf den Scanner zugreifen kann, muss das Konto in die Gruppe operator aufgenommen werden. Allerdings sollten Sie, aus Sicherheitsgründen, genau überlegen, welche Benutzer Sie zu welcher Gruppe hinzufügen, besonders bei der Gruppe wheel. Eine bessere Lösung ist es, eine spezielle Gruppe für den Zugriff auf USB-Geräte anzulegen und den Scanner für Mitglieder dieser Gruppe zugänglich zu machen.

Beispielsweise kann man eine usb-Gruppe verwenden. Der erste Schritt dazu ist das erstellen der Gruppe mit Hilfe des pw(8)-Kommandos:

# pw groupadd usb

Anschliessend muss der /dev/ugen0.2-Symlink und der Gerätename /dev/usb/0.2.0 für die usb-Gruppe mit den richtigen Schreibrechten (0660 oder 0664) ausgestattet werden, denn standardmässig kann nur der Besitzer dieser Dateien (root) darauf schreiben. All dies kann durch das Hinzufügen der folgenden Zeile in die /etc/devfs.rules-Datei erreicht werden:

[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0660 group usb

FreeBSD 7.X-Anwender benötigen unter Umständen die folgenden Zeilen mit der korrekten Gerätedatei /dev/uscanner0:

[system=5]
add path uscanner0 mode 660 group usb

In die Datei /etc/rc.conf fügen Sie noch die folgende Zeile ein:

devfs_system_ruleset="system"

Starten Sie anschließend Ihr System neu.

Weitere Informationen finden Sie in devfs(8).

Jetzt braucht man nur noch Benutzer der Gruppe usb hinzufügen, um ihnen Zugriff auf den Scanner zu erlauben:

#pw groupmod usb -m joe

Weitere Details können Sie in der pw(8)-Manualpage nachlesen.


Kapitel 9. Konfiguration des FreeBSD-Kernels

Erweitert und neu strukturiert von Jim Mock. Ursprünglich veröffentlicht von Jake Hamby. Übersetzt von Robert Altschaffel.

9.1. Übersicht

Der Kernel ist das Herz des FreeBSD Betriebssystems. Er ist verantwortlich für die Speicherverwaltung, das Durchsetzen von Sicherheitsdirektiven, Netzwerkfähigkeit, Festplattenzugriffen und vieles mehr. Obwohl FreeBSD es immer mehr ermöglicht, dynamisch konfiguriert zu werden, ist es ab und an notwendig, den Kernel neu zu konfigurieren und zu kompilieren.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

  • Wieso Sie Ihren Kernel neu konfigurieren sollten.

  • Wie Sie eine Kernelkonfigurationsdatei erstellen oder verändern.

  • Wie Sie mit der Konfigurationsdatei einen neuen Kernel kompilieren.

  • Wie Sie den neuen Kernel installieren.

  • Was zu tun ist, falls etwas schiefgeht.

Alle Kommandos, aus den Beispielen dieses Kapitels, müssen mit root-Rechten ausgeführt werden.


9.2. Wieso einen eigenen Kernel bauen?

Traditionell besaß FreeBSD einen monolithischen Kernel. Das bedeutet, dass der Kernel ein einziges großes Programm war, das eine bestimmte Auswahl an Hardware unterstützte. Also musste man immer, wenn man das Kernelverhalten verändern wollte, zum Beispiel wenn man neue Hardware hinzufügen wollte, einen neuen Kernel kompilieren, installieren und das System neu starten.

Heutzutage vertritt FreeBSD immer mehr die Idee eines modularen Kernels, bei dem bestimmte Funktionen, je nach Bedarf, als Module geladen werden können. Ein bekanntes Beispiel dafür sind die Module für die PCMCIA-Karten in Laptops, die zum Starten nicht zwingend benötigt und erst bei Bedarf geladen werden.

Trotzdem ist es noch immer nötig, einige statische Kernelkonfigurationen durchzuführen. In einigen Fällen ist die Funktion zu systemnah, um durch ein Modul zu realisiert werden. In anderen Fällen hat eventuell noch niemand ein ladbares Kernelmodul für diese Funktion geschrieben.

Das Erstellen eines angepaßten Kernels ist eines der wichtigsten Rituale für erfahrene BSD-Benutzer. Obwohl dieser Prozess recht viel Zeit in Anspruch nimmt, bringt er doch viele Vorteile für Ihr FreeBSD System. Der GENERIC-Kernel muss eine Vielzahl unterschiedlicher Hardware unterstützen, im Gegensatz dazu unterstützt ein angepasster Kernel nur Ihre Hardware. Dies hat einige Vorteile:

  • Schnellerer Bootvorgang. Da der Kernel nur nach der Hardware des Systems sucht, kann sich die Zeit für einen Systemstart erheblich verkürzen.

  • Geringerer Speicherbedarf. Ein eigener Kernel benötigt in der Regel weniger Speicher als ein GENERIC-Kernel durch das Entfernen von Funktionen und Gerätetreibern. Das ist vorteilhaft, denn der Kernel verweilt immer im RAM und verhindert dadurch, dass dieser Speicher von Anwendungen genutzt wird. Insbesondere profitieren Systeme mit wenig RAM davon.

  • Zusätzliche Hardwareunterstützung. Ein angepasster Kernel kann Unterstützung für Geräte wie Soundkarten bieten, die im GENERIC-Kernel nicht enthalten sind.


9.3. Informationen über die vorhandene Hardware beschaffen

Geschrieben von Tom Rhodes.

Bevor Sie mit der Kernelkonfiguration beginnen, sollten Sie wissen, über welche Hardware Ihr System verfügt. Verwenden Sie derzeit noch ein anderes Betriebssystem, ist es meist sehr einfach, eine Liste der installierten Hardware zu erzeugen. Verwenden Sie beispielsweise Microsoft Windows, können Sie dafür den Gerätemanager verwenden, den Sie in der “Systemsteuerung” finden.

Anmerkung: Einige Versionen von Microsoft Windows verfügen über ein System-Icon auf dem Desktop, über das Sie den Gerätemanager direkt aufrufen können.

Haben Sie außer FreeBSD kein weiteres Betriebssystem, müssen Sie diese Informationen manuell zusammentragen. Eine Möglichkeit, an Informationen über die vorhandene Hardware zu gelangen, ist der Einsatz von dmesg(8) in Kombination mit man(1). Die meisten FreeBSD-Gerätetreiber haben eine eigene Manualpage, die Informationen über die unterstützte Hardware enthält. Während des Systemstarts werden Informationen über die vorhandene Hardware ausgegeben. Die folgenden Zeilen zeigen beispielsweise an, dass der psm-Treiber eine angeschlossene Maus gefunden hat:

psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0

Dieser Treiber muss in Ihrer Kernelkonfigurationsdatei vorhanden sein oder durch das Werkzeug loader.conf(5) geladen werden.

Manchmal zeigt dmesg während des Systemstarts nur Systemmeldungen, aber keine Informationen zur gefundenen Hardware an. In diesem Fall können Sie diese Informationen durch das Studium der Datei /var/run/dmesg.boot herausfinden.

Eine weitere Möglichkeit bietet das Werkzeug pciconf(8), das ausführliche Informationen bereitstellt. Dazu ein Beispiel:

ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
    vendor     = 'Atheros Communications Inc.'
    device     = 'AR5212 Atheros AR5212 802.11abg wireless'
    class      = network
    subclass   = ethernet

Diese Zeilen, die Sie durch den Aufruf des Befehls pciconf -lv erhalten, zeigen, dass der Treiber ath eine drahtlose Ethernetkarte gefunden hat. Durch Eingabe des Befehls man ath öffnet sich die Manualpage ath(4).

Rufen Sie man(1) mit der Option -k auf, können Sie die Datenbank der Manualpages auch durchsuchen. Für das angegebene Beispiel würde dieser Befehl beispielsweise so aussehen:

# man -k Atheros

Dadurch erhalten Sie eine Liste aller Manualpages, die das angegebene Suchkriterium enthalten:

ath(4)                   - Atheros IEEE 802.11 wireless network driver
ath_hal(4)               - Atheros Hardware Access Layer (HAL)

Mit diesen Informationen ausgestattet, sollte der Bau eines angepassten Kernel keine allzugroßen Probleme mehr bereiten.


9.4. Kerneltreiber, Subsysteme und Module

Bevor Sie einen angepassten Kernel erstellen, überlegen Sie sich bitte, warum Sie dies tun wollen. Wenn Sie lediglich eine bestimmte Hardwareunterstützung benötigen, existiert diese vielleicht schon als Kernelmodul.

Kernelmodule existieren im Verzeichnis /boot/kernel und können dynamisch in den laufenden Kernel über kldload(8) geladen werden. Die meisten, wenn nicht sogar alle, Kerneltreiber besitzen ein spezifisches Modul und eine Manualpage. Beispielsweise erwähnte der letzte Abschnitt den drahtlosen Ethernettreiber ath. Dieses Gerät hat die folgende Information in seiner Manualpage:

Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

    if_ath_load="YES"

Wie dort angegeben, wird das Modul durch die Zeile if_ath_load="YES" in der Datei /boot/loader.conf dynamisch beim Systemstart geladen.

Allerdings gibt es in manchen Fällen kein dazugehöriges Modul. Das gilt insbesondere für bestimmte Teilsysteme und sehr wichtige Treiber. Beispielsweise ist das Fast File System (FFS) eine notwendige Kerneloption, genauso wie die Netzwerkunterstützung (INET). Die einzige Möglichkeit, herauszufinden, ob ein Treiber benötigt ist, ist die Überprüfung des jeweiligen Moduls.

Warnung: Es ist erstaunlich einfach, einen defekten Kernel zu erhalten (beispielsweise durch das Entfernen der eingebauten Unterstützung für ein Gerät oder einer Kerneloption). Wenn beispielsweise der ata(4)-Treiber aus der Kernelkonfigurationsdatei entfernt wird, kann ein System, das den ATA-Festplattentreiber benötigt, nicht mehr starten, ohne dass Sie das entsprechende Kernelmodul durch einen Eintrag in loader.conf aufnehmen. Wenn Sie nicht sicher sind, wie Sie vorgehen sollen, überprüfen Sie zuerst das Modul. Im Zweifelsfall belassen Sie die Unterstützung für ein bestimmtes Gerät besser im Kernel.


9.5. Erstellen und Installation eines angepassten Kernels

Anmerkung: Sie benötigen den kompletten Quellcodebaum, um den Kernel zu bauen.

Zuerst erläutern wir die Verzeichnisstruktur, in der der Kernel gebaut wird. Die im Folgenden genannten Verzeichnisse sind relativ zum Verzeichnis /usr/src/sys angegeben, das Sie auch über den Pfad /sys erreichen können. Es existieren mehrere Unterverzeichnisse, die bestimmte Teile des Kernels darstellen, aber die für uns wichtigsten sind arch/conf, in dem Sie die Konfigurationsdatei für den angepassten Kernel erstellen werden, und compile, in dem der Kernel gebaut wird. arch kann entweder i386, amd64, ia64, powerpc, sparc64 oder pc98 (eine in Japan beliebte Architektur) sein. Alles in diesen Verzeichnissen ist nur für die jeweilige Architektur relevant. Der Rest des Codes ist maschinenunabhängig und für alle Plattformen, auf die FreeBSD portiert werden kann, gleich. Beachten Sie die Verzeichnisstruktur, die jedem unterstützten Gerät, jedem Dateisystem und jeder Option ein eigenes Verzeichnis zuordnet.

Die Beispiele in diesem Kapitel verwenden ein i386-System. Wenn Sie ein anderes System benutzen, passen Sie bitte die Pfade entsprechend der Architektur des Systems an.

Anmerkung: Falls Sie kein /usr/src/-Verzeichnis vorfinden (oder dieses leer ist), so sind die Quellen nicht installiert. Der einfachste Weg, dies nachzuholen, ist sysinstall als root auszuführen. Dort wählen Sie Configure, dann Distributions, dann src, und schließlich All. Falls nicht vorhanden, sollten Sie auch noch einen symbolischen Link auf /usr/src/sys/ anlegen:

# ln -s /usr/src/sys /sys

Als nächstes wechseln sie in das Verzeichnis arch/conf und kopieren die Konfigurationsdatei GENERIC in eine Datei, die den Namen Ihres Kernels trägt. Zum Beispiel:

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

Traditionell ist der Name des Kernels immer in Großbuchstaben. Wenn Sie mehrere FreeBSD mit unterschiedlicher Hardware warten, ist es nützlich, wenn Sie Konfigurationsdatei nach dem Hostnamen der Maschinen benennen. Im Beispiel verwenden wir den Namen MYKERNEL.

Tipp: Es ist nicht zu empfehlen die Konfigurationsdatei direkt unterhalb von /usr/src abzuspeichern. Wenn Sie Probleme haben, könnten Sie der Versuchung erliegen, /usr/src einfach zu löschen und wieder von vorne anzufangen. Wenn Sie so vorgehen, werden Sie kurz darauf merken, dass Sie soeben Ihre Kernelkonfigurationsdatei gelöscht haben.

Editieren Sie immer eine Kopie von GENERIC. Änderungen an GENERIC können verloren gehen, wenn der Quellbaum aktualisiert wird.

Sie sollten die Konfigurationsdatei an anderer Stelle aufheben und im Verzeichnis i386 einen Link auf die Datei erstellen.

Beispiel:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Jetzt editieren Sie MYKERNEL mit einem Texteditor Ihres Vertrauens. Wenn Sie gerade neu anfangen, ist Ihnen vielleicht nur der vi Editor bekannt, der allerdings zu komplex ist, um hier erklärt zu werden. Er wird aber in vielen Büchern aus der Bibliographie gut erklärt. FreeBSD bietet aber auch einen leichter zu benutzenden Editor, den ee an, den Sie, wenn Sie Anfänger sind, benutzen sollten. Sie können die Kommentare am Anfang der Konfigurationsdatei ändern, um die Änderungen gegenüber GENERIC zu dokumentieren.

Falls Sie schon einmal einen Kernel unter SunOS oder einem anderen BSD kompiliert haben, werden Sie diese Konfigurationsdatei bereits kennen. Wenn Sie mit einem anderen Betriebssystem wie DOS vertraut sind, könnte die GENERIC Konfigurationsdatei Sie verschrecken. In diesen Fall sollten Sie den Beschreibungen im Abschnitt über die Konfigurationsdatei langsam und vorsichtig folgen.

Anmerkung: Wenn Sie die FreeBSD Quellen synchronisieren, sollten Sie immer, bevor Sie etwas verändern, /usr/src/UPDATING durchlesen. Diese Datei enthält alle wichtigen Informationen, die Sie beim Aktualisieren beachten müssen. Da /usr/src/UPDATING immer zu Ihrer Version der FreeBSD Quellen passt, sind die Informationen dort genauer, als in diesem Handbuch.

Nun müssen Sie die Kernelquellen kompilieren.

Den Kernel bauen

Anmerkung: Sie benötigen den kompletten Quellcodebaum, um den Kernel zu bauen.

  1. Wechseln Sie in das Verzeichnis /usr/src:

    # cd /usr/src
    
  2. Kompilieren Sie den neuen Kernel:

    # make buildkernel KERNCONF=MYKERNEL
    
  3. Installieren Sie den neuen Kernel:

    # make installkernel KERNCONF=MYKERNEL
    

Tipp: In der Voreinstellung werden beim Bau eines angepassten Kernels stets alle Kernelmodule neu gebaut. Wollen Sie Ihren Kernel schneller bauen oder nur bestimmte Module bauen, sollten Sie /etc/make.conf anpassen, bevor Sie Ihren Kernel bauen:

MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs

Wenn Sie diese Variable setzen, werden ausschließlich die hier angegebenen Module gebaut (und keine anderen).

WITHOUT_MODULES = linux acpi sound ntfs

Durch das Setzen dieser Variable werden werden alle Module auf oberster Ebene bis auf die angegebenen gebaut. Weitere Variablen, die beim Bau eines Kernels von Interesse sein könnten, finden Sie in make.conf(5).

Der neue Kernel wird im Verzeichnis /boot/kernel, genauer unter /boot/kernel/kernel abgelegt, während der alte Kernel nach /boot/kernel.old/kernel verschoben wird. Um den neuen Kernel zu benutzen, sollten Sie Ihren Rechner jetzt neu starten. Falls etwas schief geht, sehen Sie bitte in dem Abschnitt zur Fehlersuche am Ende dieses Kapitels nach. Dort sollten Sie auch unbedingt den Abschnitt lesen, der erklärt, was zu tun ist, wenn der neue Kernel nicht startet.

Anmerkung: Im Verzeichnis /boot werden andere Dateien, die zum Systemstart benötigt werden, wie der Boot-Loader (loader(8)) und dessen Konfiguration, abgelegt. Module von Fremdherstellern oder angepasste Module werden in /boot/kernel abgelegt. Beachten Sie bitte, dass diese Module immer zu dem verwendeten Kernel passen müssen. Module, die nicht zu dem verwendeten Kernel passen, gefährden die Stabilität des Systems.


9.6. Die Kernelkonfigurationsdatei

Aktualisiert von Joel Dahl.

Das Format der Konfigurationsdatei ist recht einfach. Jede Zeile enthält ein Schlüsselwort und ein oder mehrere Argumente. Eine Zeile, die von einen # eingeleitet wird, gilt als Kommentar und wird ignoriert. Die folgenden Abschnitte beschreiben jedes Schlüsselwort in der Reihenfolge, in der es in GENERIC auftaucht. Eine ausführliche Liste aller Optionen mit detaillierten Erklärungen finden Sie in der Konfigurationsdatei NOTES, die sich in demselben Verzeichnis wie die Datei GENERIC befindet. Von der Architektur unabhängige Optionen sind in der Datei /usr/src/sys/conf/NOTES aufgeführt.

Es ist möglich, eine include-Anweisung in die Kernelkonfigurationsdatei aufzunehmen. Diese erlaubt das lokale Einfügen von anderen Konfigurationsdateien in die aktuelle, was es einfacher macht, kleinere Änderungen an einer existierenden Datei zu vollziehen. Wenn Sie beispielsweise einen GENERIC-Kernel mit nur einer kleinen Anzahl von zusätzlichen Optionen und Treibern benötigen, brauchen Sie mit den folgenden Zeilen nur ein kleines Delta im Vergleich zu GENERIC anpassen:

include GENERIC
ident MYKERNEL

options         IPFIREWALL
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPDIVERT

Für viele Administratoren bietet dieses Modell entscheidende Vorteile über das bisherige Erstellen von Konfigurationsdateien von Grund auf: die lokalen Konfigurationdateien enthalten auch nur die lokalen Unterschiede zu einem GENERIC-Kernel und sobald Aktulaisierungen durchgeführt werden, können neue Eigenschaften, die zu GENERIC hinzugefügt werden, auch dem lokalen Kernel angehängt werden, es sei denn, es wird durch nooptions oder nodevice verhindert. Der übrige Teil dieses Kapitels behandelt die Inhalte einer typischen Konfigurationsdatei und die Rolle, die unterschiedliche Optionen und Geräte dabei spielen.

Anmerkung: Um einen Kernel mit allen möglichen Optionen zu bauen beispielsweise für Testzwecke), führen Sie als root die folgenden Befehle aus:

# cd /usr/src/sys/i386/conf && make LINT

Das folgende Beispiel zeigt eine GENERIC Konfigurationsdatei, die, wo notwendig, zusätzliche Kommentare enthält. Sie sollte der Datei /usr/src/sys/i386/conf/GENERIC auf Ihrem System sehr ähnlich sein.

machine		i386

Gibt die Architektur der Maschine an und muss entweder amd64, i386, ia64, pc98, powerpc oder sparc64 sein.

cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU

Die vorigen Zeilen geben den Typ der CPU Ihres Systems an. Sie können mehrere CPU Typen angeben, wenn Sie sich zum Beispiel nicht sicher sind, ob Sie I586_CPU oder I686_CPU benutzen sollen. Für einen angepassten Kernel ist es aber am besten, wenn Sie nur die CPU angeben, die sich in der Maschine befindet. Der CPU-Typ wird in den Boot-Meldungen ausgegeben, die in der Datei /var/run/dmesg.boot gespeichert sind.

ident          GENERIC

Gibt den Namen Ihres Kernels an. Hier sollten Sie den Namen einsetzen, den Sie Ihrer Konfigurationsdatei gegeben haben. In unserem Beispiel ist das MYKERNEL. Der Wert, den Sie ident zuweisen, wird beim Booten des neuen Kernels ausgegeben. Wenn Sie den Kernel von Ihrem normal verwendeten Kernel unterscheiden wollen, weil Sie zum Beispiel einen Kernel zum Testen bauen, ist es nützlich, hier einen anderen Namen anzugeben.

#To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         # Default places to look for devices.

Unter FreeBSD werden Geräte mit device.hints(5) konfiguriert. In der Voreinstellung überprüft loader(8) beim Systemstart die Datei /boot/device.hints. Die Option hints erlaubt es, die Gerätekonfiguration statisch in den Kernel einzubinden, sodass die Datei device.hints in /boot nicht benötigt wird.

makeoptions     DEBUG=-g          # Build kernel with gdb(1) debug symbols

Der normale Bauprozess von FreeBSD erstellt nur dann einen Kernel, der Debugging-Informationen enthält, wenn Sie die Option -g von gcc(1) aktivieren.

options          SCHED_ULE        # ULE scheduler

Der voreingestellte Scheduler von FreeBSD. Ändern Sie diesen Wert nicht!

options          PREEMPTION        # Enable kernel thread preemption

Erlaubt es Kernelthreads, vor Threads eigentlich höherer Prioritält ausgeführt zu werden. Die Interaktivitält des Systems wird dadurch erhölt. Interrupt-Threads werden dabei bevorzugt ausgeführt.

options          INET              # InterNETworking

Netzwerkunterstützung. Auch wenn Sie nicht planen, den Rechner mit einem Netzwerk zu verbinden, sollten Sie diese Option aktiviert lassen. Die meisten Programme sind mindestens auf die Loopback Unterstützung (Verbindungen mit sich selbst) angewiesen. Damit ist diese Option im Endeffekt notwendig.

options          INET6             # IPv6 communications protocols

Aktiviert die Unterstützung für das IPv6 Protokoll.

options          FFS               # Berkeley Fast Filesystem

Das Dateisystem für Festplatten. Wenn Sie von einer Festplatte booten wollen, lassen Sie diese Option aktiviert.

options          SOFTUPDATES       # Enable FFS Soft Updates support

Mit dieser Option wird die Unterstützung für Soft Updates, die Schreibzugriffe beschleunigen, in den Kernel eingebunden. Auch wenn die Funktion im Kernel ist, muss sie für einzelne Dateisysteme explizit aktiviert werden. Überprüfen Sie mit mount(8), ob die Dateisysteme Soft Updates benutzen. Wenn die Option soft-updates nicht aktiviert ist, können Sie die Option nachträglich mit tunefs(8) aktivieren. Für neue Dateisysteme können Sie Option beim Anlegen mit newfs(8) aktivieren.

options          UFS_ACL           # Support for access control lists

Diese Option aktiviert die Unterstützung für Zugriffskontrolllisten (ACL). Die ACLs hängen von erweiterten Attributen und UFS2 ab, eine genaue Beschreibung finden Sie in Abschnitt 15.11. Die Zugriffskontrolllisten sind in der Voreinstellung aktiviert und sollten auch nicht deaktiviert werden, wenn Sie schon einmal auf einem Dateisystem verwendet wurden, da dies die Zugriffsrechte auf Dateien in unvorhersehbarer Art und Weise ändern kann.

options          UFS_DIRHASH       # Improve performance on big directories

Diese Option steigert die Geschwindigkeit von Plattenzugriffen auf großen Verzeichnissen. Dadurch verbraucht das System etwas mehr Speicher als vorher. Für stark beschäftigte Server oder Arbeitsplatzrechner sollten Sie diese Option aktiviert lassen. Auf kleineren Systemen, bei denen Speicher eine kostbare Ressource darstellt oder Systemen, auf denen die Geschwindigkeit der Plattenzugriffe nicht wichtig ist, wie Firewalls, können Sie diese Option abstellen.

options          MD_ROOT           # MD is a potential root device

Diese Option aktiviert die Unterstüztung für ein Root-Dateisystem auf einem speicherbasierten Laufwerk (RAM-Disk).

options          NFSCLIENT         # Network Filesystem Client
options          NFSSERVER         # Network Filesystem Server
options          NFS_ROOT          # NFS usable as /, requires NFSCLIENT

Das Network Filesystem. Wenn Sie keine Partitionen von einem UNIX File-Server über TCP/IP einhängen wollen, können Sie diese Zeile auskommentieren.

options          MSDOSFS           # MSDOS Filesystem

Das MS-DOS Dateisystem. Sie können diese Zeile auskommentieren, wenn Sie nicht vorhaben, eine DOS-Partition beim Booten einzuhängen. Das nötige Modul wird ansonsten automatisch geladen, wenn Sie das erste Mal eine DOS-Partition einhängen. Außerdem können Sie mit den ausgezeichneten emulators/mtools aus der Ports-Sammlung auf DOS-Floppies zugreifen, ohne diese an- und abhängen zu müssen (MSDOSFS wird in diesem Fall nicht benötigt).

options          CD9660            # ISO 9660 Filesystem

Das ISO 9660 Dateisystem für CD-ROMs. Sie können diese Zeile auskommentieren, wenn Sie kein CD-ROM-Laufwerk besitzen oder nur ab und an CDs einhängen. Das Modul wird automatisch geladen, sobald Sie das erste Mal eine CD einhängen. Für Audio-CDs benötigen Sie dieses Dateisystem nicht.

options          PROCFS            # Process filesystem (requires PSEUDOFS)

Das Prozessdateisystem. Dies ist ein Pseudo-Dateisystem, das auf /proc eingehangen wird und es Programmen wie ps(1) erlaubt, mehr Informationen über laufende Prozesse auszugeben. PROCFS sollte von FreeBSD nicht mehr benötigt werden, da die meisten Debug- und Überwachungs-Werkzeuge nicht mehr darauf angewiesen sind. Daher wird das Prozessdateisystem auch nicht mehr automatisch in das System eingebunden.

options          PSEUDOFS          # Pseudo-filesystem framework

Kernel, die PROCFS verwenden, müssen auch die Option PSEUDOFS verwenden.

options          GEOM_PART_GPT          # GUID Partition Tables.

Diese Option ermöglicht eine große Anzahl Partitionen auf einem einzelnen Laufwerk.

options          COMPAT_43         # Compatible with BSD 4.3 [KEEP THIS!]

Stellt die Kompatibilität zu 4.3BSD sicher. Belassen Sie diese Option, da sich manche Programme recht sonderbar verhalten werden, wenn Sie diese auskommentieren.

options          COMPAT_FREEBSD4   # Compatible with FreeBSD4

Diese Option stellt sicher, dass Anwendungen, die auf älteren FreeBSD Versionen übersetzt wurden und alte Systemaufrufe verwenden, noch lauffähig sind. Wir empfehlen, diese Option auf allen i386-Systemen zu verwenden, auf denen vielleicht noch ältere Anwendungen laufen sollen. Auf Plattformen, die erst ab FreeBSD 5.0 unterstützt werden (wie ia64 und SPARC®), wird diese Option nicht benötigt.

options          COMPAT_FREEBSD5   # Compatible with FreeBSD5

Diese Option wird ab FreeBSD 6.X benötigt, um Programme, die unter FreeBSD 5.X-Versionen mit FreeBSD 5.X-Systemaufrufen kompiliert wurden, unter FreeBSD 6.X ausführen zu können.

options          COMPAT_FREEBSD6   # Compatible with FreeBSD6

Diese Option wird ab FreeBSD 7.X benötigt, um Programme, die unter FreeBSD 6.X-Versionen mit FreeBSD 6.X-Systemaufrufen kompiliert wurden, unter FreeBSD 7.X ausführen zu können.

options          COMPAT_FREEBSD7   # Compatible with FreeBSD7

Diese Option wird ab FreeBSD 8.X benötigt, um Programme, die unter FreeBSD 7.X-Versionen mit FreeBSD 7.X-Systemaufrufen kompiliert wurden, unter FreeBSD 8.X ausführen zu können.

options          SCSI_DELAY=5000  # Delay (in ms) before probing SCSI

Dies weist den Kernel an, 5 Sekunden zu warten, bevor er anfängt nach SCSI-Geräten auf dem System zu suchen. Wenn Sie nur IDE-Geräte besitzen, können Sie die Anweisung ignorieren. Sie können versuchen, den Wert zu senken, um den Startvorgang zu beschleunigen. Wenn FreeBSD dann Schwierigkeiten hat, Ihre SCSI-Geräte zu erkennen, sollten Sie den Wert natürlich wieder erhöhen.

options          KTRACE            # ktrace(1) support

Dies schaltet die Kernel-Prozessverfolgung (engl. kernel process tracing) ein, die sehr nützlich bei der Fehlersuche ist.

options          SYSVSHM           # SYSV-style shared memory

Diese Option aktiviert die Unterstützung für System V Shared-Memory. Die XSHM-Erweiterung von X benötigt diese Option und viele Graphik-Programme werden die Erweiterung automatisch benutzen und schneller laufen. Wenn Sie X benutzen, sollten Sie diese Option auf jeden Fall aktivieren.

options          SYSVMSG           # SYSV-style message queues

Unterstützung für System V Messages. Diese Option vergrößert den Kernel nur um einige hundert Bytes.

options          SYSVSEM           # SYSV-style semaphores

Unterstützung für System V Semaphoren. Dies wird selten gebraucht, vergrößert aber den Kernel nur um einige hundert Bytes.

Anmerkung: Die Option -p des Kommandos ipcs(1) zeigt Programme an, die diese System V Erweiterungen benutzen.

options 	     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions

Echtzeit-Erweiterungen, die 1993 zu POSIX® hinzugefügt wurden. Bestimmte Programme wie StarOffice benutzen diese Erweiterungen.

options          KBD_INSTALL_CDEV  # install a CDEV entry in /dev

Diese Option erstellt für die Tastatur einen Eintrag im Verzeichnis /dev.

options          ADAPTIVE_GIANT    # Giant mutex is adaptive.

Giant ist der Name einer Sperre (Mutex) die viele Kernel-Ressourcen schützt. Heutzutage ist Giant ein unannehmbarer Engpass, der die Leistung eines Systems beeinträchtigt. Daher wird Giant durch Sperren ersetzt, die einzelne Ressourcen schützen. Die Option ADAPTIVE_GIANT fügt Giant zu den Sperren hinzu, auf die gewartet werden kann. Ein Thread, der die Sperre Giant von einem anderen Thread benutzt vorfindet, kann nun weiterlaufen und auf die Sperre Giant warten. Früher wäre der Prozess in den schlafenden Zustand (sleep) gewechselt und hätte darauf warten müssen, dass er wieder laufen kann. Wenn Sie sich nicht sicher sind, belassen Sie diese Option.

Anmerkung: Beachten Sie, dass ab FreeBSD 8.0-RELEASE und neuer alle Mutexe in der Voreinstellung adaptiv sein werden, es sei denn, Sie werden durch das Setzen der Option NO_ADAPTIVE_MUTEXES explizit als nichtadaptiv deklariert. Als Folge dessen ist Giant nun in in der Voreinstellung ebenfalls adaptiv, daher ist in diesen Versionen die Kerneloption ADAPTIVE_GIANT nicht mehr in der Kernelkonfigurationsdatei enthalten.

device          apic               # I/O APIC

Das apic-Gerält ermöglicht die Benutzung des I/O APIC für die Interrupt-Auslieferung. Das apic-Gerält kann mit Kerneln für Einprozessorsysteme und Mehrprozessorsysteme benutzt werden. Kernel für Mehrprozessorsysteme benötigen diese Option zwingend. Die Unterstützung für Mehrprozessorsysteme aktivieren Sie mit der Option options SMP.

Anmerkung: Das apic-Gerät existiert nur unter der i386-Architektur, daher ist es sinnlos, diese Zeile unter einer anderen Architektur in Ihre Kernelkonfigurationsdatei aufzunehmen.

device          eisa

Fügen Sie diese Zeile ein, wenn Sie ein EISA-Motherboard besitzen. Dies aktiviert die Erkennung und Konfiguration von allen Geräten auf dem EISA Bus.

device          pci

Wenn Sie ein PCI-Motherboard besitzen, fügen Sie diese Zeile ein. Dies aktiviert die Erkennung von PCI-Karten und die PCI-ISA bridge.

# Floppy drives
device          fdc

Der Floppy-Controller.

# ATA and ATAPI devices
device          ata

Dieser Treiber unterstützt alle ATA und ATAPI Geräte. Eine device ata Zeile reicht aus und der Kernel wird auf modernen Maschinen alle PCI ATA/ATAPI Geräte entdecken.

device          atadisk                 # ATA disk drives

Für ATA-Plattenlaufwerke brauchen Sie diese Zeile zusammen mit device ata.

device          ataraid                 # ATA RAID drives

Für ATA-RAID brauchen Sie diese Zeile zusammen mit device ata.


device          atapicd                 # ATAPI CDROM drives

Zusammen mit device ata wird dies für ATAPI CD-ROM Laufwerke benötigt.

device          atapifd                 # ATAPI floppy drives

Zusammen mit device ata wird dies für ATAPI Floppy Laufwerke benötigt.

device          atapist                 # ATAPI tape drives

Zusammen mit device ata wird dies für ATAPI Bandlaufwerke benötigt.

options         ATA_STATIC_ID           # Static device numbering

Erzwingt eine statische Gerätenummer für den Controller; ohne diese Option werden die Nummern dynamisch zugeteilt.

# SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
options         AHC_REG_PRETTY_PRINT     # Print register bitfields in debug
                                         # output.  Adds ~128k to driver.
device          ahd        # AHA39320/29320 and onboard AIC79xx devices
options         AHD_REG_PRETTY_PRINT     # Print register bitfields in debug
                                         # output.  Adds ~215k to driver.
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          isp        # Qlogic family
#device         ispfw      # Firmware for QLogic HBAs- normally a module
device          mpt        # LSI-Logic MPT-Fusion
#device         ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets + those of `ncr'))
device          trm        # Tekram DC395U/UW/F DC315U adapters

device          adv        # Advansys SCSI adapters
device          adw        # Advansys wide SCSI adapters
device          aha        # Adaptec 154x SCSI adapters
device          aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device          bt         # Buslogic/Mylex MultiMaster SCSI adapters

device          ncv        # NCR 53C500
device          nsp        # Workbit Ninja SCSI-3
device          stg        # TMC 18C30/18C50

SCSI-Controller. Kommentieren Sie alle Controller aus, die sich nicht in Ihrem System befinden. Wenn Sie ein IDE-System besitzen, können Sie alle Einträge entfernen. Die Zeilen mit den *_REG_PRETTY_PRINT-Einträgen aktivieren Debugging-Optionen für die jeweiligen Treiber.

# SCSI peripherals
device          scbus      # SCSI bus (required for SCSI)
device          ch         # SCSI media changers
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI access)
device          ses        # SCSI Environmental Services (and SAF-TE)

SCSI Peripheriegeräte. Kommentieren Sie wieder alle Geräte aus, die Sie nicht besitzen. Besitzer von IDE-Systemen können alle Einträge entfernen.

Anmerkung: Der USB-umass(4)-Treiber und einige andere Treiber benutzen das SCSI-Subsystem obwohl sie keine SCSI-Geräte sind. Belassen Sie die SCSI-Unterstützung im Kernel, wenn Sie solche Treiber verwenden.

# RAID controllers interfaced to the SCSI subsystem
device          amr        # AMI MegaRAID
device          arcmsr     # Areca SATA II RAID
device          asr        # DPT SmartRAID V, VI and Adaptec SCSI RAID
device          ciss       # Compaq Smart RAID 5*
device          dpt        # DPT Smartcache III, IV - See NOTES for options
device          hptmv      # Highpoint RocketRAID 182x
device          hptrr      # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
device          iir        # Intel Integrated RAID
device          ips        # IBM (Adaptec) ServeRAID
device          mly        # Mylex AcceleRAID/eXtremeRAID
device          twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac        # Adaptec FSA RAID
device          aacp       # SCSI passthrough for aac (requires CAM)
device          ida        # Compaq Smart RAID
device          mfi        # LSI MegaRAID SAS
device          mlx        # Mylex DAC960 family
device          pst        # Promise Supertrak SX6000
device          twe        # 3ware ATA RAID

Unterstützte RAID Controller. Wenn Sie keinen der aufgeführten Controller besitzen, kommentieren Sie die Einträge aus oder entfernen sie.

# atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc     # AT keyboard controller

Der Tastatur-Controller (atkbdc) ist für die Ein- und Ausgabe von AT-Tastaturen und PS/2 Zeigegeräten (z.B. einer Maus) verantwortlich. Dieser Controller wird vom Tastaturtreiber (atkbd) und dem PS/2 Gerätetreiber (psm) benötigt.

device          atkbd      # AT keyboard

Zusammen mit dem atkbdc Controller bietet der atkbd Treiber Zugriff auf AT-Tastaturen.

device          psm        # PS/2 mouse

Benutzen Sie dieses Gerät, wenn Sie eine Maus mit PS/2 Anschluss besitzen.

device          kbdmux        # keyboard multiplexer

Basisunterstützung für Tastaturmultiplexer. Verwenden Sie nur eine einzige Tastatur, können Sie diese Zeile aus Ihrer Kernelkonfigurationsdatei entfernen.

device          vga        # VGA video card driver

Der Grafikkartentreiber.

device          splash     # Splash screen and screen saver support

Zeigt einen “Splash Screen” beim Booten. Diese Zeile wird auch von den Bildschirmschonern benötigt.

# syscons is the default console driver, resembling an SCO console
device          sc

sc ist in der Voreinstellung der Treiber für die Konsole, die der SCO-Konsole ähnelt. Da die meisten bildschirmorientierten Programme auf die Konsole mit Hilfe einer Datenbank wie termcap zugreifen, sollte es keine Rolle spielen, ob Sie diesen Treiber oder vt, den VT220 kompatiblen Konsolentreiber einsetzen. Wenn Sie Probleme mit bildschirmorientierten Anwendungen unter dieser Konsole haben, setzen Sie beim Anmelden die Variable TERM auf den Wert VT220.

# Enable this for the pcvt (VT220 compatible) console driver
#device          vt
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor

Der VT220 kompatible Konsolentreiber ist kompatibel zu VT100/102. Auf einigen Laptops, die aufgrund der Hardware inkompatibel zum sc Treiber sind, funktioniert dieser Treiber gut. Beim Anmelden sollten Sie die Variable TERM auf den Wert vt100 setzen. Dieser Treiber kann sich als nützlich erweisen, wenn Sie sich über das Netzwerk auf vielen verschiedenen Maschinen anmelden, da dort oft Einträge in termcap oder terminfo für das sc Gerät fehlen. Dagegen sollte vt100 auf jeder Plattform unterstützt werden.

device          agp

Fügen Sie diese Zeile ein, wenn Sie eine AGP-Karte besitzen. Damit werden Motherboards mit AGP und AGP GART unterstützt.

# Power management support (see NOTES for more options)
#device          apm

Unterstützung zur Energieverwaltung. Diese Option ist nützlich für Laptops, allerdings ist sie in GENERIC deaktiviert.

# Add suspend/resume support for the i8254.
device           pmtimer

Zeitgeber für Ereignisse der Energieverwaltung (APM und ACPI).

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device          cbb               # cardbus (yenta) bridge
device          pccard            # PC Card (16-bit) bus
device          cardbus           # CardBus (32-bit) bus

PCMCIA Unterstützung. Wenn Sie einen Laptop benutzen, brauchen Sie diese Zeile.

# Serial (COM) ports
device          sio               # 8250, 16[45]50 based serial ports

Die seriellen Schnittstellen, die in der MS-DOS- und Windows-Welt COM genannt werden.

Anmerkung: Wenn Sie ein internes Modem, das COM4 benutzt, besitzen und eine serielle Schnittstelle haben, die auf COM2 liegt, müssen Sie den IRQ des Modems auf 2 setzen (wegen undurchsichtigen technischen Gründen ist IRQ2 gleich IRQ9). Wenn Sie eine serielle Multiport-Karte besitzen, entnehmen Sie bitte die Werte, die Sie in die Datei /boot/device.hints einfügen müssen, der Hilfeseite sio(4). Einige Graphikkarten, besonders die auf S3-Chips basierten, benutzen IO-Adressen der Form 0x*2e8 und manche billige serielle Karten dekodieren den 16-Bit IO-Adressraum nicht sauber. Dies führt zu Konflikten und blockiert dann die COM4-Schnittstelle.

Jeder seriellen Schnittstelle muss ein eigener IRQ zugewiesen werden (wenn Sie eine Multiport-Karte verwenden, bei der das Teilen von Interrupts unterstützt wird, muss das nicht der Fall sein), daher können in der Voreinstellung COM3 und COM4 nicht benutzt werden.

# Parallel port
device          ppc

Die parallele Schnittstelle auf dem ISA Bus.

device          ppbus      # Parallel port bus (required)

Unterstützung für den Bus auf der parallelen Schnittstelle.

device          lpt        # Printer

Unterstützung für Drucker über die parallele Schnittstelle.

Anmerkung: Sie brauchen jede der drei Zeilen, um die Unterstützung für einen Drucker an der parallelen Schnittstelle zu aktivieren.

device          plip       # TCP/IP over parallel

Der Treiber für das Netzwerkinterface über die parallele Schnittstelle.

device          ppi        # Parallel port interface device

Allgemeine I/O (“geek port”) und IEEE1284 I/O Unterstützung.

#device         vpo        # Requires scbus and da

Dies aktiviert den Treiber für ein Iomega Zip Laufwerk. Zusätzlich benötigen Sie noch die Unterstützung für scbus und da. Die beste Performance erzielen Sie, wenn Sie die Schnittstelle im EPP 1.9 Modus betreiben.

#device         puc

Aktivieren Sie diesen Treiber, wenn Sie eine serielle oder parallele PCI-Karte besitzen, die vom Treiber puc(4) unterstützt wird.

# PCI Ethernet NICs.
device          de         # DEC/Intel DC21x4x (“Tulip”)
device          em         # Intel PRO/1000 adapter Gigabit Ethernet Card
device          ixgb       # Intel PRO/10GbE Ethernet Card
device          txp        # 3Com 3cR990 (“Typhoon”)
device          vx         # 3Com 3c590, 3c595 (“Vortex”)

Verschiedene Treiber für PCI-Netzwerkkarten. Geräte, die sich nicht in Ihrem System befinden, können Sie entfernen oder auskommentieren.

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus     # MII bus support

Einige PCI 10/100 Ethernet Netzwerkkarten, besonders die, die MII-fähige Transceiver verwenden oder Transceiver-Steuerungen implementieren, die ähnlich wie MII funktionieren, benötigen die Unterstützung für den MII-Bus. Die Zeile device miibus fügt dem Kernel die Unterstützung für das allgemeine miibus API und allen PHY-Treibern hinzu.

device          bce        # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device          bfe        # Broadcom BCM440x 10/100 Ethernet
device          bge        # Broadcom BCM570xx Gigabit Ethernet
device          dc         # DEC/Intel 21143 and various workalikes
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          lge        # Level 1 LXT1001 gigabit ethernet
device          msk        # Marvell/SysKonnect Yukon II Gigabit Ethernet
device          nge        # NatSemi DP83820 gigabit ethernet
device          nve        # nVidia nForce MCP on-board Ethernet Networking
device          pcn        # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device          re         # RealTek 8139C+/8169/8169S/8110S
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (“Starfire”)
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          sk         # SysKonnect SK-984x & SK-982x gigabit Ethernet
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          stge       # Sundance/Tamarack TC9021 gigabit Ethernet
device          ti         # Alteon Networks Tigon I/II gigabit Ethernet
device          tl         # Texas Instruments ThunderLAN
device          tx         # SMC EtherPower II (83c170 “EPIC”)
device          vge        # VIA VT612x gigabit ethernet
device          vr         # VIA Rhine, Rhine II
device          wb         # Winbond W89C840F
device          xl         # 3Com 3c90x (“Boomerang”, “Cyclone”)

Treiber, die den MII Bus Controller Code benutzen.

# ISA Ethernet NICs.  pccard NICs included.
device          cs         # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device          ed         # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device          ex         # Intel EtherExpress Pro/10 and Pro/10+
device          ep         # Etherlink III based cards
device          fe         # Fujitsu MB8696x based cards
device          ie         # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device          lnc        # NE2100, NE32-VL Lance Ethernet cards
device          sn         # SMC's 9000 series of Ethernet chips
device          xe         # Xircom pccard Ethernet

# ISA devices that use the old ISA shims
#device         le

Treiber für ISA Ethernet Karten. Schauen Sie in /usr/src/sys/i386/conf/NOTES nach, um zu sehen, welche Karte von welchem Treiber unterstützt wird.

# Wireless NIC cards
device          wlan       # 802.11 support

Generische 802.11-Unterstützung. Diese Zeile wird unbedingt benötigt, wenn Sie WLAN nutzen wollen.

device          wlan_wep        # 802.11 WEP support
device          wlan_ccmp       # 802.11 CCMP support
device          wlan_tkip       # 802.11 TKIP support

Krypto-Unterstützung für 802.11-Geräte. Sie benötigen diese Zeilen, wenn Sie Ihr drahtloses Netzwerk verschlüsseln und die 802.11-Sicherheitsprotokolle einsetzen wollen.

device          an              # Aironet 4500/4800 802.11 wireless NICs
device          ath             # Atheros pci/cardbus NIC's
device          ath_hal         # Atheros HAL (Hardware Access Layer)
device          ath_rate_sample # SampleRate tx rate control for ath
device          awi        # BayStack 660 and others
device          ral        # Ralink Technology RT2500 wireless NICs.
device          wi         # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl         # Older non 802.11 Wavelan wireless NIC.

Treiber für drahtlose Netzwerkkarten (WLAN).

# Pseudo devices
device   loop          # Network loopback

Das TCP/IP Loopback Device. Wenn Sie eine Telnet oder FTP Verbindung zu localhost (alias 127.0.0.1) aufbauen, erstellen Sie eine Verbindung zu sich selbst durch dieses Device. Die Angabe dieser Option ist verpflichtend.

device   random        # Entropy device

Kryptographisch sicherer Zufallszahlengenerator.

device   ether         # Ethernet support

ether brauchen Sie nur, wenn Sie eine Ethernet-Karte besitzen. Der Treiber unterstützt das Ethernet-Protokoll.

device   sl            # Kernel SLIP

sl aktiviert die SLIP-Unterstützung. SLIP ist fast vollständig von PPP verdrängt worden, da letzteres leichter zu konfigurieren, besser geeignet für Modem zu Modem Kommunikation und mächtiger ist.

device   ppp           # Kernel PPP

Dies ist Kernel Unterstützung für PPP-Wählverbindungen. Es existiert auch eine PPP-Version im Userland, die den tun Treiber benutzt. Die Userland-Version ist flexibler und bietet mehr Option wie die Wahl auf Anforderung.

device   tun           # Packet tunnel.

Dies wird vom der Userland PPP benutzt. Die Zahl hinter tun gibt die Anzahl der unterstützten gleichzeitigen Verbindungen an. Weitere Informationen erhalten Sie im Abschnitt PPP dieses Handbuchs.


device   pty           # Pseudo-ttys (telnet etc)

Dies ist ein “Pseudo-Terminal” oder simulierter Login-Terminal. Er wird von einkommenden telnet und rlogin Verbindungen, xterm und anderen Anwendungen wie Emacs benutzt.

device   md            # Memory “disks”

Pseudo-Gerät für Speicher-Laufwerke.

device   gif           # IPv6 and IPv4 tunneling

Dieses Gerät tunnelt IPv6 über IPv4, IPv4 über IPv6, IPv4 über IPv4 oder IPv6 über IPv6. Das Gerät gif kann die Anzahl der benötigten Geräte automatisch bestimmen (“auto-cloning”).

device   faith         # IPv6-to-IPv4 relaying (translation)

Dieses Pseudo-Gerät fängt zu ihm gesendete Pakete ab und leitet Sie zu einem Dæmon weiter, der Verkehr zwischen IPv4 und IPv6 vermittelt.

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device   bpf           # Berkeley packet filter

Das ist der Berkeley Paketfilter. Dieses Pseudo-Gerät kann Netzwerkkarten in den “promiscuous” Modus setzen und erlaubt es damit, Pakete auf einem Broadcast Netzwerk (z.B. einem Ethernet) einzufangen. Die Pakete können auf der Festplatte gespeichert und mit tcpdump(1) untersucht werden.

Anmerkung: Das bpf(4)-Gerät wird von dhclient(8) genutzt, um die IP-Adresse des Default-Routers zu bekommen. Wenn Sie DHCP benutzen, lassen Sie diese Option bitte aktiviert.

# USB support
device          uhci          # UHCI PCI->USB interface
device          ohci          # OHCI PCI->USB interface
device          ehci          # EHCI PCI->USB interface (USB 2.0)
device          usb           # USB Bus (required)
#device         udbp          # USB Double Bulk Pipe devices
device          ugen          # Generic
device          uhid          # “Human Interface Devices”
device          ukbd          # Keyboard
device          ulpt          # Printer
device          umass         # Disks/Mass storage - Requires scbus and da
device          ums           # Mouse
device          ural          # Ralink Technology RT2500USB wireless NICs
device          urio          # Diamond Rio 500 MP3 player
device          uscanner      # Scanners
# USB Ethernet, requires mii
device          aue           # ADMtek USB Ethernet
device          axe           # ASIX Electronics USB Ethernet
device          cdce          # Generic USB over Ethernet
device          cue           # CATC USB Ethernet
device          kue           # Kawasaki LSI USB Ethernet
device          rue           # RealTek RTL8150 USB Ethernet

Unterstützung für verschiedene USB Geräte.

# FireWire support
device          firewire      # FireWire bus code
device          sbp           # SCSI over FireWire (Requires scbus and da)
device          fwe           # Ethernet over FireWire (non-standard!)

Verschiedene Firewire-Geräte.

Mehr Informationen und weitere von FreeBSD unterstützte Geräte entnehmen Sie bitte /usr/src/sys/i386/conf/NOTES.


9.6.1. Hohe Speicheranforderungen (PAE)

Systeme mit hohen Speicheranforderungen benötigen mehr Speicher als den auf 4 Gigabyte beschränkten User- und Kernel-Adressraum (KVA). Mit dem Pentium Pro und neueren CPUs hat Intel den Adressraum auf 36-Bit erweitert.

Die Physical-Address-Extension (PAE) von Intels Pentium Pro und neueren Prozessoren unterstützt bis zu 64 Gigabyte Speicher. FreeBSD kann diesen Speicher mit der Option PAE in der Kernelkonfiguration nutzen. Die Option gibt es in allen aktuellen FreeBSD-Versionen. Wegen Beschräkungen der Intel-Speicherarchitektur wird keine Unterscheidung zwischen Speicher oberhalb oder unterhalb von 4 Gigabyte getroffen. Speicher über 4 Gigabyte wird einfach dem zur Verfügung stehenden Speicher zugeschlagen.

Sie aktivieren PAE im Kernel, indem Sie die folgende Zeile in die Kernelkonfigurationsdatei einfügen:

options		    PAE

Anmerkung: FreeBSD unterstützt PAE nur auf IA-32 Prozessoren. Die PAE-Unterstützung wurde zudem noch nicht hinreichend getestet und befindet sich im Vergleich zu anderen Komponenten von FreeBSD noch im Beta-Stadium.

Die PAE-Unterstützung in FreeBSD ist mit den nachstehenden Einschränkungen verbunden:

  • Ein Prozess kann nicht mehr als 4 Gigabyte virtuellen Speicher benutzen.

  • Gerätetreiber, die nicht die bus_dma(9)-Schnittstelle benutzen, führen zusammen mit einem PAE-Kernel zu Datenverlusten. Diese Treiber sollen nicht mit einem PAE-Kernel verwendet werden. Daher gibt es unter FreeBSD eine zusätzliche PAE-Kernelkonfigurationsdatei, die alle Treiber enthält, die mit einem PAE-Kernel funktionieren.

  • Einige Systemvariablen werden abhängig von der Speichergröße eingestellt. In einem PAE-System mit viel Speicher können die Werte daher zu hoch eingestellt sein. Ein Beispiel ist die sysctl-Variable kern.maxvnodes, die die maximale Anzahl von vnodes im Kernel bestimmt. Solche Variablen sollten auf einen angemessenen Wert eingestellt werden.

  • Es kann erforderlich sein, den virtuellen Adressraum des Kernels (KVA) zu vergrößern oder, wie oben beschrieben, den Wert einer häufig gebrauchten Kernelvariablen zu verringern. Dies verhindert einen Überlauf des KVAs. Der Adressraum des Kernels kann mit der Kerneloption KVA_PAGES vergrößert werden.

Hinweise zur Leistungssteigerung und Stabilität entnehmen Sie bitte der Hilfeseite tuning(7). Die PAE-Unterstützung von FreeBSD wird in der Hilfeseite pae(4) beschrieben.


9.7. Wenn etwas schiefgeht

Es gibt vier Hauptfehlerquellen beim Erstellen eines angepassten Kernels:

config verursacht Fehler:

Wenn config(8) misslingt, liegen Fehler in der Kernelkonfigurationsdatei vor. Zum Glück gibt config(8) die die Zeilennummer der Fehlerstelle an, sodass Sie den Fehler schnell finden können. Beispielsweise könnten Sie folgende Fehlermeldung sehen:

config: line 17: syntax error

Vergleichen Sie die angegebene Zeile mit GENERIC und stellen Sie sicher, dass das Schlüsselwort richtig geschrieben ist.

make verursacht Fehler:

Wenn make misslingt, liegen meistens Fehler in der Konfigurationsdatei vor, die aber nicht schwerwiegend genug für config(8) waren. Überprüfen Sie wiederum Ihre Konfiguration und wenn Sie keinen Fehler entdecken können, schicken Sie eine E-Mail mit Ihrer Kernelkonfiguration an die Mailingliste 'Fragen und Antworten zu FreeBSD' . Sie sollten dann schnell Hilfe erhalten.

Der Kernel bootet nicht:

Wenn der Kernel nicht booten will, ist das noch lange kein Grund zur Panik. Denn FreeBSD besitzt exzellente Mechanismen zur Wiederherstellung nach dem Einsatz inkompatibler Kernel. Den Kernel, mit dem Sie booten wollen, können Sie sich im FreeBSD Boot-Loader aussuchen. Dazu wählen Sie im Bootmenü die Option “Escape to a loader prompt”. Danach geben Sie den Befehl boot kernel.old oder den Namen eines anderen Kernels ein, der sauber bootet. Für alle Fälle sollten Sie immer einen Kernel, der garantiert bootet, bereit halten.

Nun können Sie die Konfiguration noch einmal überprüfen und den Kernel neu kompilieren. Dazu ist /var/log/messages sehr nützlich, da hier sämtliche Kernelmeldungen von jedem erfolgreichen Bootvorgang gespeichert werden. dmesg(8) gibt Ihnen die Kernelmeldungen vom letzten Bootvorgang aus.

Anmerkung: Für den Fall, dass Sie Probleme bei dem Kernelbau bekommen, heben Sie sich immer einen GENERIC oder einen anderen Kernel, der garantiert bootet, auf. Der Name dieses Kernels sollte so gewählt sein, dass er beim nächsten Bau nicht überschrieben wird. Sie können sich nicht auf kernel.old verlassen, da dieser Kernel durch den zuletzt installierten Kernel, der vielleicht schon kaputt war, während der Installation ersetzt wird. Kopieren Sie den funktionierenden Kernel so schnell wie möglich in das richtige Verzeichnis (/boot/kernel). Ansonsten funktionieren Kommandos wie ps(1) nicht. Benennen Sie dazu einfach das Verzeichnis des funktionierenden Kernels um:

# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
Der Kernel ist in Ordnung, aber ps geht nicht mehr:

Wenn Sie eine andere Version des Kernels installiert haben als die, mit der Ihre Systemwerkzeuge gebaut wurden (beispielsweise einen -CURRENT-Kernel auf einem -RELEASE-System), werden Programme wie ps(1) und vmstat(8) nicht mehr funktionieren. Sie sollten nun das komplette System neu bauen und installieren. Achten Sie darauf, dass die Quellen, aus denen Sie das System bauen, zum installierten Kernel passen. Das ist ein Grund dafür, warum man nie einen Kernel, der nicht zur Systemversion passt, benutzen sollten.


Kapitel 10. Drucken

Beigetragen von Sean Kelly. Restrukturiert und aktualisiert durch Jim Mock. Übersetzt von Stefan Bethke.

10.1. Übersicht

Mit FreeBSD können Sie viele unterschiedliche Drucker benutzen, von den ältesten Nadeldruckern bis zu den neuesten Laserdruckern, und allen möglichen Geräten dazwischen. Auf diese Weise können Sie hochwertige Ausdrucke mit Ihren Programmen erzeugen.

Sie können FreeBSD auch so konfigurieren, dass es Druckaufträge von anderen Computern über Ihr lokales Netzwerk entgegennimmt, seien es Windows-, Mac OS- oder andere FreeBSD-Computer. FreeBSD stellt sicher, dass die Druckaufträge in der richtigen Reihenfolge bearbeitet werden und kann optional ein Deckblatt mit dem Namen des Auftraggebers eines Druckauftrags aufgeben. FreeBSD kann auch Statistiken über die Computer und Benutzer führen, die Ausdrucke in Auftrag geben.

In diesem Kapitel erfahren Sie, wie Sie:

  • FreeBSD-Druckerwarteschlangen einrichten.

  • Druckfilter installieren, die Druckaufträge je nach Bedarf besonders behandeln und z.B. Dokumente automatisch in eine Form umwandeln, die Ihr Drucker versteht.

  • Druckaufträge mit einem Deckblatt versehen können.

  • Mit einem Drucker drucken können, der an einen anderen Computer angeschlossen ist.

  • Mit einem Drucker drucken können, der direkt an das Netzwerk angeschlossen ist.

  • die Größe von Druckaufträgen beschränken können, oder bestimmte Benutzer von den Benutzung des Drucksystems ausschließen können.

  • Statistiken aufzeichnen und die Benutzung des Drucksystems nach Benutzern und Computern aufschlüsseln können.

  • Probleme beim Drucken diagnostizieren und beheben können.

Bevor Sie dieses Kapitel lesen:

  • Machen Sie sich mit der Konfiguration und Installation eines neuen Kernels vertraut (Kapitel 9).


10.2. Einführung

Um einen Drucker mit FreeBSD zu benutzen, können Sie das Berkeley Line Printer Spooling System, das auch als LPD-Drucksystem oder nur als LPD bekannt ist, verwenden. Dieses System zur Verwaltung von Druckaufträgen ist das Standardsystem in FreeBSD. Dieses Kapitel führt Sie in LPD und dessen Konfiguration ein.

Wenn Sie bereits mit LPD oder einem anderen Drucksystem vertraut sind, können Sie direkt im Abschnitt Einfache Drucker-Konfiguration weiterlesen.

LPD steuert alle Aspekte rund um die Drucker, die an den Computer angeschlossen sind. Es ist verantwortlich für:

  • Die Zugriffskontrolle für direkt und über das Netzwerk angeschlossene Drucker.

  • Die Entgegennahme von Dateien, die gedruckt werden sollen; eine so an das Drucksystem übergebene Datei wird als Druckauftrag bezeichnet.

  • Den gleichzeitigen Zugriff von mehreren Benutzern auf einen Drucker. Alle Druckaufträge werden in einer Druckerwarteschlange gesammelt, und nacheinander abgearbeitet.

  • Den Druck von Deckblättern (auch als Banner- oder Burst-Seiten bezeichnet), damit Benutzer ihre Druckaufträge schnell innerhalb eines Stapels von ausgedruckten Dokumenten finden können.

  • Das Einstellen der korrekten Kommunikations-Parameter für Drucker, die seriell angeschlossen sind.

  • Das Senden von Druckaufträgen an ein LPD-System auf einem anderen Computer.

  • Das Ausführen von speziellen Filtern, um Druckaufträge in die unterschiedlichen Seitenbeschreibungssprachen umzusetzen oder an die Fähigkeiten eines Druckers anzupassen.

  • Das Erfassen von Verrechnungsdaten für Druckaufträge.

Sie können LPD alle diese Funktionen, oder auch nur einen Teil davon, ausführen lassen, indem Sie die Konfigurationsdatei (/etc/printcap) anpassen, und indem Sie spezielle Filterprogramme bereitstellen.


10.2.1. Vorteile des Drucksystems

Wenn Sie der einzige Benutzer sind, der mit Ihrem Computer arbeitet, fragen Sie sich vielleicht, warum Sie die Konfigurationsarbeit für das Drucksystem auf sich nehmen sollten, wenn Sie Deckblätter, Abrechnungsdaten oder Zugriffskontrolle nicht benötigen. Obwohl Sie direkt auf den Drucker zugreifen können, bietet LPD eine Reihe von Vorteilen:

  • LPD druckt im Hintergrund; Sie müssen nicht erst darauf warten, dass Ihr Druckauftrag an den Drucker übermittelt worden ist.

  • LPD kann Druckaufträge mit Kopf- oder Fußzeilen versehen, oder ein spezielles Dateiformat, wie DVI von TeX, automatisch in ein für den Drucker verständliches Format umwandeln; Sie müssen diese Schritte nicht manuell ausführen.

  • Viele freie und kommerzielle Programme, mit denen Sie drucken können, erwarten, mithilfe des LPD-Drucksystems zu drucken. Wenn Sie das Drucksystem konfiguriert haben, können Sie einfacher mit neuer oder auch vorhandener Software drucken.


10.3. Grund-Konfiguration

Warnung: Mit FreeBSD 8.0 wurden die Gerätedateien für serielle Ports von /dev/ttydN in /dev/ttyuN umbenannt. Setzen Sie noch FreeBSD 7.X ein, müssen Sie die Befehle in den folgenden Abschnitten entsprechend anpassen.

Um einen Drucker mit dem LPD-Drucksystem benutzen zu können, müssen Sie sowohl Ihren Drucker und die Drucker-Schnittstelle als auch das LPD-Drucksystem konfigurieren. Dieser Abschnitt beschreibt zwei Konfigurationen:

  • Abschnitt Einfache Drucker-Konfiguration beschreibt, wie Sie einen Drucker an Ihren Computer anschließen und LPD so konfigurieren, dass Sie Textdateien zum Drucker senden können.

  • Abschnitt Erweiterte Drucker-Konfiguration beschreibt, wie Sie mit speziellen Dateiformaten umgehen können, wie Sie Deckblätter drucken können, wie Sie den Zugriff auf Drucker einschränken können, und wie Sie Verrechnungsdaten aufzeichnen können.


10.3.1. Einfache Drucker-Konfiguration

Dieser Abschnitt beschreibt, wie Sie die LPD-Software konfigurieren, um Ihren Drucker zu benutzen. Diese Grundlagen werden erklärt:

Wenn Sie einen Drucker einrichten möchten, der über das Netzwerk angeschlossen ist (anstatt über die serielle oder parallele Schnittstelle), lesen Sie bitte Abschnitt Drucker mit direkter TCP-Schnittstelle.

Obwohl dieser Abschnitt “Grund-Konfiguration” heißt, ist die Konfiguration relativ komplex. Es ist vergleichsweise schwierig, einen Drucker mit Ihrem Computer und dem LPD-Drucksystem zu verbinden. Die weiteren Optionen, wie Kopfzeilen oder Deckblätter, sind einfach zu konfigurieren, sobald die Grund-Konfiguration erfolgreich abgeschlossen ist.


10.3.1.1. Hardware-Konfiguration

Dieser Abschnitt beschreibt, über welche Schnittstellen Sie einen Drucker mit Ihrem Computer verbinden können. Er behandelt sowohl die Schnittstellen und Kabel, als auch die Kerneloptionen, die Sie benötigen, um FreeBSD mit Ihrem Drucker kommunizieren zu lassen.

Wenn Sie Ihren Drucker bereits erfolgreich mit einem anderen Betriebssystem auf Ihrem PC eingesetzt haben, können Sie wahrscheinlich mit dem Abschnitt Software-Konfiguration fortfahren.


10.3.1.1.1. Schnittstellen und Kabel

Praktisch alle Drucker unterstützen mindestens eine dieser Schnittstellen:

  • Seriell angeschlossene Drucker werden über eine serielle Schnittstelle (auch RS-232 oder COM-Schnittstelle genannt) mit Ihrem Computer verbunden. Diese Schnittstelle wird von vielen unterschiedlichen Systemen verwendet. Serielle Kabel sind leicht erhältlich und können auch einfach selbst hergestellt werden. Einige Drucker erfordern möglicherweise ein spezielles Kabel oder besondere Kommunikationseinstellungen. Die meisten seriellen Schnittstellen von PCs besitzen eine maximale Datenübertragungsrate von 115200 bps; zum Ausdruck großer Grafiken sind serielle Drucker daher ungeeignet.

  • Parallel angeschlossene Drucker werden über eine parallele Schnittstelle mit Ihrem Computer verbunden. Diese Schnittstelle wird hauptsächlich von PCs und Workstations benutzt. Die Schnittstelle bietet eine höhere Datenübertragungsrate als serielle Schnittstellen. Kabel sind leicht erhältlich, sind aber vergleichsweise schwer selbst herzustellen. Üblicherweise brauchen keine Kommunikationsparameter festgelegt zu werden; dies macht die Einrichtung sehr einfach.

    Die parallele Schnittstelle wird auch als “Centronics”-Schnittstelle bezeichnet, nach dem Namen des Steckverbinders, der hier häufig zum Einsatz kommt.

  • USB-Schnittstelle (Universal Serial Bus) bieten noch höhere Geschwindigkeiten als parallele Schnittstellen oder serielle RS-232-Schnittstellen. USB-Kabel sind einfach und billig. Zum Drucken ist die USB-Schnittstelle besser geeignet als serielle oder parallele Schnittstellen, auf vielen UNIX Systemen werden USB-Schnittstellen jedoch nur unzureichend unterstützt. Um Probleme zu vermeiden, sollten Sie sich einen Drucker anschaffen, der sowohl eine USB-Schnittstelle als auch eine parallele Schnittstelle besitzt (viele Drucker besitzen heute beide Schnittstellen).

Im Allgemeinen versenden parallele Schnittstellen Daten nur in eine Richtung (vom Computer zum Drucker), serielle Schnittstellen und USB-Schnittstellen versenden Daten in beide Richtungen. Moderne parallele Schnittstellen (EPP and ECP) übertragen Daten bi-direktional nach dem Standard IEEE 1284.

Ein Drucker kann auf zwei Arten bi-direktional angesprochen werden. Die erste Methode benutzt einen Druckertreiber, der die herstellerspezifische Sprache des Druckers beherrscht. Diese Methode wird oft mit Tintenstrahl-Druckern eingesetzt und dazu benutzt, den Füllstand der Tintenpatronen und andere Status-Informationen auszugeben. Die zweite Methode wird benutzt, wenn der Drucker PostScript beherrscht.

Da ein PostScript-Druckauftrag ein komplettes Programm ist, kann es auch Daten an den Computer zurückliefern, ohne überhaupt eine Seite Papier zu bedrucken. Auf diesem Wege werden auch Probleme wie z.B. ein Papierstau vom Drucker an den Computer übermittelt. Darüberhinaus ist dies die effektivste Methode, um die tatsächlich gedruckte Anzahl an Seiten vom Drucker abzufragen: ein PostScript-Programm ermittelt jeweils vor und direkt nach einem Druckauftrag den Seitenzähler des Druckers, und vergleicht die beiden Zählerwerte.


10.3.1.1.2. Parallele Schnittstellen

Um einen Drucker mit paralleler Schnittstelle an Ihren Computer anzuschließen, verbinden Sie den Drucker mit einer parallelen Schnittstelle Ihres Computers. Die Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen hier weiterhelfen.

Notieren Sie sich, mit welcher parallelen Schnittstelle des Computers Sie den Drucker verbunden haben. Die meisten Computer haben lediglich eine parallele Schnittstelle. Der FreeBSD-Gerätename der ersten Schnittstelle lautet ppc0, der der zweiten ppc1, und so weiter. Der Gerätename für den Drucker an der ersten parallelen Schnittstelle folgt dem selben Schema und lautet /dev/lpt0, usw.


10.3.1.1.3. Serielle Schnittstellen

Um einen Drucker mit serieller Schnittstelle an Ihren Computer anzuschließen, verbinden Sie den Drucker mit einer seriellen Schnittstelle Ihres Computers. Die Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen hier weiterhelfen.

Sollten Sie sich nicht sicher sein, welches das “richtige Kabel” ist, können Sie eine dieser Alternativen ausprobieren:

  • Ein Modemkabel verbindet alle Anschlüsse an einem Ende des Kabels eins-zu-eins mit den Anschlüssen am anderen Ende des Kabels. Ein solches Kabel wird auch als (engl.) “DTE-to-DCE-” oder “DEE-zu-DÜE-”Kabel bezeichnet.

  • Ein Nullmodemkabel verbindet einige Signale eins-zu-eins, andere über Kreuz (z.B. Sende- und Empfangsleitung), und verbindet einige weitere direkt im Stecker miteinander. Ein solches Kabel wird auch als (engl.) “DTE-to-DTE-” oder “DEE-zu-DEE-”Kabel bezeichnet.

  • Ein Serielles Druckerkabel schließlich, das für einige spezielle Drucker benötigt wird, verbindet zusätzliche Signale miteinander, anstatt sie im Stecker zurückzuführen.

Sie sollten auch die Kommunikationsparameter am Drucker einstellen; üblicherweise gibt es dazu DIP-Schalter, oder eine Option in der Menüführung am Drucker. Wählen Sie die höchste Bitrate (auch als bps Bits pro Sekunde oder Baudrate bezeichnet), die sowohl Ihr Drucker als auch Ihr Computer unterstützen. Wählen Sie 7 oder 8 Bits, gerade, ungerade oder keine Parität, und ein oder zwei Stoppbits. Wählen Sie die Art der Flusssteuerung: keine, XON/XOFF (auch als “in-band-” oder “Software”-Flusssteuerung bezeichnet), oder Hardware. Notieren Sie sich diese Einstellungen, damit Sie sie später bei der Software-Konfiguration zur Verfügung haben.


10.3.1.2. Software-Konfiguration

Dieser Abschnitt beschreibt die notwendigen Konfigurationsschritte, damit Sie mit dem FreeBSD-LPD-System drucken können.

Diese Schritte müssen Sie ausführen:

  1. Konfigurieren Sie Ihren Kernel, soweit notwendig, um die Schnittstelle benutzen zu können, an die Ihr Drucker angeschlossen ist. Abschnitt Kernel-Konfiguration erklärt, welche Optionen Sie benötigen.

  2. Konfigurieren Sie die Kommunikationseinstellungen für die parallele Schnittstelle, sofern Sie sie benutzen. Abschnitt Kommunikationseinstellungen für die parallele Schnittstelle enthält die Details.

  3. Prüfen Sie, ob Sie Daten an den Drucker senden können. Abschnitt Prüfen der Drucker-Kommunikation führt eine Reihe von Möglichkeiten auf.

  4. Konfigurieren Sie LPD für Ihren Drucker, indem Sie die Konfigurationsdatei /etc/printcap anpassen. Details dazu finden Sie im Abschnitt LPD aktivieren: die /etc/printcap-Datei.


10.3.1.2.1. Kernel-Konfiguration

Der Betriebssystem-Kernel ist für eine bestimmte Kombination aus Geräten kompiliert. Dies schließt Ihre seriellen oder parallelen Schnittstellen mit ein. Dementsprechend kann es notwendig sein, die Kernelkonfiguration um weitere Schnittstellen zu erweitern.

So können Sie prüfen, ob Ihr Kernel die serielle Schnittstelle unterstützt, an die Sie den Drucker angeschlossen haben:

# grep sioN /var/run/dmesg.boot

Ersetzen Sie N durch die Nummer der seriellen Schnittstelle, beginnend bei Null. Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, unterstützt ihr Kernel diese Schnittstelle:

sio2 at port 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A

Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, wird die Schnittstelle nicht korrekt unterstützt.

So können Sie prüfen, ob Ihr Kernel die parallele Schnittstelle unterstützt, an die Sie den Drucker angeschlossen haben:

# grep ppcN /var/run/dmesg.boot

Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, beginnend bei Null. Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, unterstützt ihr Kernel diese Schnittstelle:

ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/8 bytes threshold

Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, wird die Schnittstelle nicht korrekt unterstützt.

Gegebenenfalls müssen Sie Ihren Kernel umkonfigurieren und neu kompilieren, damit die von Ihnen gewählte Schnittstelle unterstützt wird.

Um Unterstützung für eine serielle Schnittstelle hinzuzufügen, lesen Sie bitte Kapitel Konfiguration des FreeBSD Kernels. Um eine parallele Schnittstelle hinzuzufügen, lesen Sie bitte ebenfalls jenes Kapitel als auch den folgenden Abschnitt Kommunikationseinstellungen für die parallele Schnittstelle.


10.3.1.3. Kommunikationseinstellungen für die parallele Schnittstelle

Wenn Sie die parallele Schnittstelle zur Kommunikation mit Ihrem Drucker benutzen, haben Sie die Wahl zwischen Interrupt-gesteuerter oder Polling-Datenübertragung. Der generische Druckergerätetreiber lpt(4) in FreeBSD benutzt das ppbus(4)-System, das die parallele Schnittstelle mithilfe des ppc(4)-Treibers steuert.

  • Die Interrupt-gesteuerte Datenübertragung ist die Voreinstellung im GENERIC-Kernel. Der Treiber benutzt eine IRQ-Leitung, um zu erfahren, wann der Drucker weitere Daten empfangen kann.

  • Bei der Polling-Methode prüft der Treiber in regelmäßigen Abständen, ob weitere Daten übertragen werden können.

Die Interrupt-gesteuerte Methode ist überlicherweise schneller und verbraucht weniger Rechenzeit als die Polling-Methode, es wird jedoch eine eigene IRQ-Leitung für die Schnittstelle benötigt. Darüberhinaus kann es mit einigen Druckermodellen zu Problemen kommen, wenn die Interrupt-gesteuerte Übertragung zum Einsatz kommt.

Die können die Kommunikationseinstellung entweder in der Kernel-Konfiguration wählen, oder mittels des lptcontrol(8)-Programms zur Laufzeit einstellen.

So legen Sie die Kommunikationseinstellung in der Kernel-Konfiguration fest:

  1. Ändern Sie Ihre Kernel-Konfigurationsdatei. Finden Sie die Zeile, die mit device ppc0 beginnt. Wenn Sie die zweite parallele Schnittstelle konfigurieren möchten, suchen Sie nach device ppc1, für die dritte Schnittstelle ppc2, usw.

    • Um die Interrupt-Steuerung zu aktivieren, passen Sie die folgende Zeile an:

      hint.ppc.0.irq="N"
      

      Ersetzen Sie N durch die Nummer der IRQ-Leitung, die dieser parallelen Schnittstelle zugewiesen ist. Stellen Sie sicher, dass Ihre Kernel-Konfigurationsdatei den ppc(4)-Treiber enthält:

      device ppc
      
    • Wenn Sie den Polling-Modus verwenden möchten, entfernen Sie die folgende Zeile aus /boot/device.hints:

      hint.ppc.0.irq="N"
      

      Sollte der Treiber die Schnittstelle dennoch im Interrupt-Modus betreiben, könnte dies an der Aktivierung durch das acpi(4)-System in FreeBSD liegen. Bitte prüfen Sie die ACPI- und die BIOS-Konfiguration.

  2. Wenn Sie Ihre Kernel-Konfigurationsdatei angepasst haben, kompilieren und installieren Sie nun einen neuen Kernel. Das Kapitel Konfiguration des FreeBSD-Kernels enthält weitere Details dazu.

So können Sie die Kommunikationseinstellung mitlptcontrol(8) ändern:

  1. Um die Interrupt-Steuerung für die Schnittstelle N zu aktivieren, geben Sie ein:

    # lptcontrol -i -d /dev/lptN
    
  2. Um den Polling-Modus für die Schnittstelle N zu aktivieren, geben Sie ein:

    # lptcontrol -p -d /dev/lptN
    

Sie können diesen Befehl in /etc/rc.local aufnehmen, damit er bei jedem Systemstart automatisch ausgeführt wird. lptcontrol(8) enthält weitere Informationen.


10.3.1.4. Kommunikation mit den Drucker prüfen

Bevor Sie mit der Konfiguration des LPD-Drucksystems fortfahren, sollten Sie sicherstellen, das Sie erfolgreich Daten an Ihren Drucker senden können. Es ist deutlich einfacher, Kommunikations- und Konfigurationsprobleme unabhängig voneinander zu lösen.

Der Drucker kann mit einem Probeausdruck getestet werden. Für alle Drucker, die normalen Text unmittelbar drucken können, bietet sich das Programm lptest(1) an: es produziert alle 96 druckbaren ASCII-Zeichen auf 96 Zeilen.

Für einen PostScript-Drucker (oder andere Drucker, die eine Seitenbeschreibungssprache verwenden) muss ein passendes Programm an den Drucker gesendet werden, z.B. dieses:

%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto /Helvetica findfont 12 scalefont setfont
(Funktioniert dieser Drucker?) show
showpage

Sie können dieses ProstScript-Programm in einer Datei speichern, und mit den Beispielen in den folgenden Abschnitt verwenden.

Anmerkung: Nicht alle Drucker, die eine Seitenbeschreibungssprache verwenden, benötigen ein Test-Programm: z.B. HPs PCL (das auch in vielen kompatiblen Druckern zum Einsatz zu kommt), versteht normalen Text. Besondere Escape-Sequenzen werden benutzt, um die erweiterten Möglichkeiten aufzurufen. PostScript-Drucker können in der Regel keinen normalen Text direkt verarbeiten, weil sie ein PostScript-Programm erwarten, das eine Seite produziert.


10.3.1.4.1. Einen Paralleldrucker prüfen

Dieser Abschnitt führt vor, wie Sie die Kommunikation mit Ihrem Drucker über die parallele Schnittstelle prüfen können.

So testen Sie einen Drucker an einer parallelen Schnittstelle:

  1. Werden Sie root mithilfe des su(1)-Befehls.

  2. Senden Sie Testdaten an den Drucker.

    • Wenn Ihr Drucker reinen Text direkt drucken kann, verwenden Sie lptest(1):

      # lptest > /dev/lptN
      

      Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, an die der Drucker angeschlossen ist (angefangen bei Null).

    • Wenn Ihr Drucker PostScript (oder eine andere Seitenbeschreibungssprache) versteht, senden Sie ein passendes Testprogramm an den Drucker. Geben Sie folgenden Befehl ein:

      # cat file > /dev/lptN
      

      Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, an die der Drucker angeschlossen ist (angefangen bei Null). Geben Sie nun das Testprogramm ein, Zeile für Zeile. Kontrollieren Sie jede Zeile, bevor Sie die Eingabetaste drücken: Sie können die Zeile später nicht mehr ändern. Zum Schluss tippen Sie Ctrl+D. Wenn Sie ein anderes Zeichen nutzen, um das Ende der Datei anzuzeigen, müssen Sie natürlich die entsprechende Tastenkombination für dieses Zeichen betätigen.

      Sie können das Testprogramm auch in einer Datei speichern, und dann diesen Befehl aufrufen:

      # cat Testprogramm > /dev/lptN
      

      Ersetzen Sie Testprogramm durch den Dateinamen, unter dem Sie das Testprogramm gespeichert haben.

Der Drucker sollte einige Zeilen oder eine Seite drucken. Machen Sie sich keine Sorgen über falsche Formatierungen: die Software-Konfiguration enthält Informationen zum Umformatieren von Druckaufträgen.


10.3.1.4.2. Einen seriellen Drucker prüfen

Dieser Abschnitt führt vor, wie Sie die Kommunikation mit Ihrem Drucker über die parallele Schnittstelle prüfen können.

So testen Sie einen Drucker an einer seriellen Schnittstelle:

  1. Werden Sie root mithilfe des su(1)-Befehls.

  2. Ändern Sie die Datei /etc/remote. Fügen Sie den folgenden Eintrag hinzu:

    printer:dv=/dev/port:br#bps-rate:pa=parity
    

    Ersetzen Sie Gerät durch den Gerätenamen der seriellen Schnittstelle (ttyu0 für die erste, ttyu1 für die zweite, usw.), Baudrate ist die Geschwindigkeit und Parität die Parität (even für gerade, odd für ungerade oder none für keine), die Sie am Drucker eingestellt haben.

    Hier ein Beispieleintrag für einen Drucker, der über die dritte serielle Schnittstelle angeschlossen ist, mit 19.200 Baud kommuniziert und keine Parität verwendet:

    printer:dv=/dev/ttyu2:br#19200:pa=none
    
  3. Verbinden Sie sich mit dem Drucker über den Befehl tip(1):

    # tip printer
    

    Kommt es hierbei zu einer Fehlermeldung, ändern Sie den Eintrag in /dev/cuaaN und verwenden Sie /dev/cuaaN statt /dev/ttyuN.

  4. Senden Sie Testdaten an den Drucker.

    • Wenn Ihr Drucker reinen Text direkt drucken kann, verwenden Sie lptest(1):

      % $lptest
      
    • Wenn Ihr Drucker PostScript (oder eine andere Seitenbeschreibungssprache) versteht, senden Sie ein passendes Testprogramm an den Drucker. Geben Sie das Testprogramm ein, Zeile für Zeile. Kontrollieren Sie jede Zeile, bevor Sie die Eingabetaste drücken: Sie können die Zeile später nicht mehr ändern. Zum Schluss tippen Sie Control-D.

      Sie können das Testprogramm auch in einer Datei speichern, und dann diesen Befehl aufrufen:

      % >Testprogramm
      

      Ersetzen Sie Testprogramm durch den Dateinamen, unter dem Sie das Testprogramm gespeichert haben. Nachdem tip(1) die Datei gesendet hat, tippen Sie Control-D.

Der Drucker sollte einige Zeilen oder eine Seite drucken. Machen Sie sich keine Sorgen über falsche Formatierungen: die Software-Konfiguration enthält Informationen zum Umformatieren von Druckaufträgen.


10.3.1.5. LPD aktivieren: die /etc/printcap-Datei

Nachdem Sie Ihren Drucker angeschlossen haben, Ihren Kernel richtig konfiguriert haben und erfolgreich einen Testausdruck produziert haben, können Sie nun das LPD-System konfigurieren.

Sie konfigurieren LPD, indem Sie die Datei /etc/printcap anpassen. Da LPD die Datei jedes Mal liest, wenn eine Aktion durchgeführt wird, werden Änderungen an der Konfiguration sofort aktiv.

Die printcap(5)-Datei ist einfach aufgebaut. Sie können /etc/printcap mit Ihrem bevorzugten Texteditor bearbeiten. Sie verwendet dasselbe Format wie auch /usr/share/misc/termcap oder /etc/remote. Informationen zum Format finden Sie in cgetent(3).

Die Grund-Konfiguration des LPD-Systems beinhaltet diese Schritte:

  1. Wählen Sie einen Namen (und einige praktische Abkürzungen) für die Druckerwarteschlage, und tragen Sie ihn in die /etc/printcap-Datei ein. Abschnitt Einen Namen wählen enthält weitere Informationen.

  2. Schalten Sie den Druck von Deckblättern aus (dies ist standardmäßig eingeschaltet), indem Sie das Attribut sh setzen. Abschnitt Den Druck von Deckblättern ausschalten erklärt, wie Sie dies tun können.

  3. Legen Sie ein Pufferverzeichnis für die Warteschlange an, und geben Sie den Pfad mittels des sd-Attributs an: siehe Abschnitt Das Pufferverzeichnis anlegen.

  4. Geben Sie den Gerätenamen für Ihren Drucker mittels des lp-Attributs an: siehe Abschnitt Festlegen der Drucker-Gerätedatei. Ist Ihr Drucker über eine serielle Schnittstelle angeschlossen, benutzen Sie das Attribut ms#, wie dies in Abschnitt Festlegen der Kommunikationsparameter beschrieben ist.

  5. Installieren Sie einen Filter für reinen Text: siehe Abschnitt Den Textfilter installieren.

  6. Testen Sie die Konfiguration, indem Sie etwas mit dem lpr(1)-Befehl drucken. Die Abschnitte Die Konfiguration testen und Fehlersuche und Problembehebung enthalten weitere Informationen.

Anmerkung: Drucker, die eine Seitenbeschreibungssprache wie PostScript verwenden, können keinen reinen Text drucken. Es wird deshalb angenommen, dass Sie nur solche Dateien drucken, die Ihr Drucker verarbeiten kann.

Viele Anwender erwarten, dass sie normalen Text auf allen Druckern drucken können. Viele Programme, die mit LPD zusammenarbeiten, gehen ebenfalls von dieser Annahme aus. Wenn Sie einen PostScript-Drucker installieren, und Sie sowohl PostScript- als auch Textdateien drucken möchten, sollten Sie einen weiteren Konfigurationsschritt ausführen und einen Text-zu-PostScript-Filter installieren. Der Abschnitt Drucken von reinen Textdateien auf einem PostScript-Drucker erklärt, wie Sie dies tun können.


10.3.1.5.1. Einen Namen wählen

Der erste einfache Schritt ist, einen Namen für Ihren Drucker zu wählen. Sie können diesen Namen frei wählen, Sie sollten allerdings keine Sonderzeichen oder Umlaute verwenden. Sie können mehrere Alias-Namen vergeben.

Ein Drucker in /etc/printcap sollte den Alias lp haben. Dieser Name wird standardmäßig von allen Druckbefehlen verwendet, wenn auf der Befehlszeile oder in der PRINTER-Umgebungsvariablen kein anderer Drucker angegeben ist.

Ebenso ist es üblich, eine ausführliche Beschreibung des Druckermodells als letzten Alias-Namen zu verwenden.

Sobald Sie einen Namen und einige einfache Alias-Namen ausgewählt haben, tragen Sie sie in die Datei /etc/printcap ein. Beginnen Sie die Zeile mit dem Namen des Druckers und fügen Sie alle Alias-Namen an. Trennen Sie die Namen durch den senkrechten Strich |. Fügen Sie an das Ende der Zeile einen Doppelpunkt : an.

Das folgende Beispiel definiert zwei Drucker, einen Diablo 630 Zeilendrucker, und einen Panasonic KX-P4455 PostScript-Laserdrucker:

#
#  /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:

Der erste Drucker hat den Namen rattan, und hat die Alias-Namen line, diablo, lp und Diablo 630 Line Printer. Da er den Alias-Namen lp trägt, wird er standardmäßig von den Druckprogrammen verwendet. Der zweite Drucker heißt bamboo, und hat die Alias-Namen ps, PS, S, panasonic und Panasonic KX-P4455 PostScript v51.4.


10.3.1.5.2. Keine Deckblätter drucken

Standardmäßig druckt das LPD-System ein Deckblatt vor jedem Druckauftrag, die den Namen des Druckauftrags, den Benutzer und den Computer angibt. Während der Einrichtung des Systems und beim Testen stört das Deckblatt allerdings, weshalb Sie sie zunächst deaktivieren sollten.

Um den Druck von Deckblättern zu deaktivieren, fügen Sie das Attribut sh zur Druckerdefinition in /etc/printcap hinzu. Hier ein Beispiel:

#
#  /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:

Beachten Sie die korrekte Formatierung: die beiden Definitionen beginnen auf einer Zeile; weitere Zeilen der Definition sind mit einem Tab-Zeichen eingerückt, und alle Zeilen einer Definition, bis auf die letzte, enden mit dem Backslash \.


10.3.1.5.3. Das Pufferverzeichnis anlegen

Der nächste Schritt ist, das Pufferverzeichnis anzulegen. In diesem Verzeichnis werden Druckaufträge zwischengespeichert, während sie gedruckt werden. Gleichzeitig werden hier auch einige Verwaltungsdateien des Systems abgelegt.

Da sich die Dateien in diesem Verzeichnis häufig ändern, ist es üblich, das Verzeichnis unter /var/spool anzulegen. Es ist nicht notwendig, Sicherungskopien der Dateien herzustellen; das Verzeichnis kann nötigenfalls leicht mit mkdir(1) wieder angelegt werden.

Es ist auch üblich, dem Verzeichnis denselben Namen wie dem Drucker zu geben:

# mkdir /var/spool/printer-name

Wenn Sie viele Drucker verwenden, ist es am besten, wenn Sie für die Pufferverzeichnisse ein eigenes Unterverzeichnis in /var/spool anlegen, wie dies hier für die beiden Beispieldrucker rattan und bamboo gezeigt wird:

# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bamboo

Anmerkung: Um zu verhindern, dass alle Benutzer den Inhalt aller Druckaufträge einsehen können, sollten Sie die Rechte auf den Pufferverzeichnissen einschränken. Die Verzeichnisse sollten dem Benutzer daemon und der Gruppe daemon gehören, und auch nur vom Benutzer und der Gruppe les-, schreib- und durchsuchbar sein. Für unsere Beispieldrucker:

# chown daemon:daemon /var/spool/lpd/rattan
# chown daemon:daemon /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan
# chmod 770 /var/spool/lpd/bamboo

Schließlich müssen Sie dem LPD-System noch mitteilen, wo Sie die Pufferverzeichnisse angelegt haben. Dazu geben Sie in der Definition das Attribut sd an:

#
#  /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:

Beachten Sie, dass der Druckername in der ersten Spalte beginnt, und dass alle Folgezeilen mit einem Tab eingerückt sind.

Wenn Sie das sd-Attribut nicht angeben, verwendet das System /var/spool/lpd als Verzeichnis.


10.3.1.5.4. Festlegen der Drucker-Gerätedatei

Nachdem Sie die korrekte Gerätedatei für die Schnittstelle im Abschnitt Hardware-Konfiguration identifiziert und angelegt haben, müssen Sie dem LPD-System mitteilen, welche Gerätedatei im Verzeichnis /dev es für die Datenübertragung zum Drucker verwenden soll.

Geben Sie die Gerätedatei durch das Attribut lp in /etc/printcap an.

Wenn rattan an die erste parallele Schnittstelle angeschlossen ist, und bamboo an die sechste serielle, dann sieht /etc/printcap so aus:

#
#  /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:

Wenn Sie lp nicht angeben, versucht LPD die Gerätedatei /dev/lp zu verwenden. /dev/lp ist zurzeit in FreeBSD nicht definiert.

Wenn Ihr Drucker über eine parallele Schnittstelle angeschlossen ist, können Sie mit dem Abschnitt Den Textfilter installieren fortfahren. Verwenden Sie eine serielle Schnittstelle, beachten Sie bitte den folgenden Abschnitt.


10.3.1.5.5. Kommunikationsparameter festlegen

Für seriell angeschlossene Drucker kann LPD die Geschwindigkeit, Parität und weitere Kommunikationsparameter einstellen. Dies hat folgende Vorteile:

  • Sie können die Parameter einfach in /etc/printcap ändern, ohne das Ausgabe-Filterprogramm anpassen zu müssen.

  • Dasselbe Ausgabe-Filterprogramm kann für unterschiedliche Drucker verwendet werden, auch wenn diese unterschiedliche Kommunikationseinstellungen benötigen.

Die folgenden Attribute legen die seriellen Kommunikationsparameter fest:

br#Baudrate

Setzt die Übertragungsgeschwindigkeit auf Baudrate. Baudrate kann üblicherweise 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, oder 115200 Bit pro Sekunde betragen.

ms#stty-Modi

Setzt die Eigenschaften für das Gerät, nachdem es geöffnet wurde. Die verfügbaren Eigenschaften sind in stty(1) aufgeführt.

Wenn LPD das mit lp angegebene Gerät öffnet, setzt es die mit ms# angegebenen Eigenschaften. Von besonderem Interesse sind hier die Modi parenb, parodd, cs5, cs6, cs7, cs8, cstopb, crtscts und ixon, die in der stty(1)-Handbuchseite erläutert werden.

Für den über die sechste serielle Schnittstelle angeschlossenen Laserdrucker beträgt die Geschwindigkeit 38.400 Baud, und es werden diese Kommunikationseinstellungen verwendet: keine Parität (-parenb), 8-Bit-Zeichen (cs8), keine Modemsteuerung (clocal) und Hardware-Flusssteuerung (crtscts):

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:

10.3.1.5.6. Den Textfilter installieren

Ein Textfilter, auch als Eingangsfilter bezeichnet, ist ein Programm, das von LPD aufgerufen wird, wenn ein Druckauftrag verarbeitet wird. Dabei wird die Standardeingabe des Programms mit der zu druckenden Datei verbunden, und die Standardausgabe mit dem im lp-Attribut angegebenen Gerät. Das Programm sollte nun die Datei einlesen, alle Übersetzungen durchführen, die für den Drucker notwendig sind, und das Ergebnis über die Standardausgabe an den Drucker senden. Textfilter werden im Abschnitt Filter genauer erläutert.

Um einen einfachen Test durchzuführen, reicht ein kleines Filterprogramm, dass schlicht /bin/cat aufruft, um die Daten unverändert und den Drucker zu schicken. FreeBSD verfügt über das Programm lpf, das Unterstreichung und Fettdruck für solche Drucker ermöglicht, die ansonsten dazu nicht in der Lage wären. Darüberhinaus gibt es viele andere Filter, die Sie einsetzen können. lpf wird im Abschnitt lpf: ein Textfilter ausführlich beschrieben.

Legen Sie zunächst das folgende Shell-Skript als /usr/local/libexec/if-simple mit Ihrem bevorzugten Texteditor an:

#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.

/bin/cat && exit 0
exit 2

Machen Sie die Datei ausführbar:

# chmod 555 /usr/local/libexec/if-simple

Konfigurieren Sie nun den Textfilter für Ihren Drucker in /etc/printcap, indem Sie das if-Attribut hinzufügen. Hier die Konfiguration unserer beiden Beispieldrucker:

#
#  /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\
        :if=/usr/local/libexec/if-simple:

Anmerkung: Das Shell-Skript if-simple steht im Verzeichnis /usr/share/examples/printing.


10.3.1.5.7. LPD aktivieren

lpd(8) wird von /etc/rc gestartet, wenn die rc.conf(5)-Variable lpd_enable auf YES gesetzt ist. Fügen Sie dazu diese Zeile in /etc/rc.conf hinzu:

lpd_enable="YES"

Starten Sie Ihren Computer neu, oder starten Sie lpd(8) von Hand:

# lpd

10.3.1.5.8. Die Konfiguration testen

Damit ist die einfache Konfiguration abgeschlossen. Noch muss die Konfiguration aber getestet werden und etwaige Probleme müssen behoben werden. Um die Konfiguration zu testen, sollten Sie einen Probeausdruck mithilfe des Programms lpr(1) produzieren. lpr(1) übergibt Druckaufträge an das LPD-System.

Sie können lpr(1) mit lptest(1) kombinieren, um Testdaten zu drucken. lptest(1) wurde im Abschnitt Kommunikation mit den Drucker prüfen vorgestellt.

So testen Sie die einfache LPD-Konfiguration:

# lptest 20 5 | lpr -PDruckername

Ersetzen Sie Druckername durch den Namen des Druckers, den Sie testen möchten. Wenn Sie den Standard-Drucker testen möchten, rufen Sie lpr(1) ohne die Option -P auf. Wenn Sie einen Drucker testen möchten, der nur PostScript versteht, müssen Sie ein PostScript-Testprogramm an lpr(1) übergeben. Ein Testprogramm, das Sie in einer Datei gespeichert haben, können Sie mit dem Befehl lpr Dateiname an das LPD-System übergeben.

Bei einem PostScript-Drucker hängt das Ergebnis naturgemäß vom Testprogramm ab. Wenn Sie lptest(1) verwenden, sollte das Ergebnis ungefähr so aussehen:

!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
%&'()*+,-./012345678

Um sicherzustellen, dass alles richtig funktioniert, sollten Sie jetzt ein größeres PostScript-Programm senden. Mit lptest(1) können Sie größere Datenmengen z.B. mit dem Befehl lptest 80 60 erzeugen: lptest(1) produziert 60 Zeilen mit je 80 Zeichen.

Wenn Sie nicht erfolgreich drucken können, finden Sie im Abschnitt Fehlersuche und Problembehebung weitere Informationen.


10.4. Erweiterte Drucker-Konfiguration

Übersetzt von Johann Kois.

Warnung: Mit FreeBSD 8.0 wurden die Gerätedateien für serielle Ports von /dev/ttydN in /dev/ttyuN umbenannt. Setzen Sie noch FreeBSD 7.X ein, müssen Sie die Befehle in den folgenden Abschnitten entsprechend anpassen.

Dieser Abschnitt beschreibt den Einsatz von Filtern für das Drucken speziell formatierter Seiten oder von Deckblättern, das Drucken über ein Netzwerk sowie die Beschränkung und Verrechnung der Druckernutzung.


10.4.1. Filter

Obwohl LPD Netzwerkprotokolle, Warteschlangen, Zugriffskontrollen und andere für das Drucken wichtige Aspekte prinzipiell unterstützt, passiert ein Großteil der wirklichen Arbeit in den sogenannten Filtern. Dabei handelt es sich um Programme, die direkt mit einem Drucker kommunizieren und deren Gerätespezifika und spezielle Anforderungen erfüllen. Im einfachsten Fall installiert man nur einen reinen Textfilter, der mit beinahe allen Druckern funktionieren sollte. (Lesen Sie dazu auch den Abschnitt Den Text-Filter installieren.)

Um die erweiterten Fähigkeiten von Druckern auch einsetzen zu können, sollten Sie verstehen, wie Filter arbeiten, da diese für die Bereitstellung dieser Funktionen zuständig sind. Die schlechte Nachricht ist, dass Sie diese Filter bereitstellen müssen. Die gute Nachricht ist allerdings, dass diese in der Regel bereits vorhanden sind. Ist dies nicht der Fall, können Sie einen Filter meist relativ einfach selbst erstellen.

Der Filter /usr/libexec/lpr/lpf wird bereits mit FreeBSD geliefert. Er kümmert sich um die korrekte Behandlung von gelöschten Zeichen (das sogenannte Backspacing), um im Text enthaltene Tabulatoren, sowie um die Verrechnung von Druckaufträgen. Das ist aber auch alles, was dieser Filter kann. Zusätzliche Filter und für die Funktion von Filtern nötige Komponenten finden sich aber in der FreeBSD Ports-Sammlung.

Dieser Abschnitt behandelt folgende Themen:

  • Der Abschnitt Die Funktionsweise von Filtern versucht, einen Überblick über die Rolle von Filtern innerhalb des Druckprozesses zu geben. Sie sollten diesen Abschnitt lesen, damit Sie verstehen, was “unter der Haube” passiert, wenn LPD einen Filter verwendet. Dieses Wissen wird Ihnen dabei helfen, Probleme, die bei Installation von Filtern für verschiedene Drucker entstehen können, vorauszusehen und zu beheben.

  • LPD geht davon aus, dass jeder Drucker in der Lage ist, normalen Text zu drucken. Für PostScript- (oder andere sprachbasierte) Drucker stellt dies allerdings ein Problem dar, da diese nicht in der Lage sind, normalen Text direkt zu drucken. Der Abschnitt Normalen Text auf PostScript-Druckern drucken beschreibt, wie Sie dieses Problem lösen können. Besitzen Sie einen PostScript-Drucker, sollten Sie diesen Abschnitt lesen.

  • PostScript ist ein populäres Ausgabeformat, das von vielen Programmen unterstützt wird. Es ist sogar möglich, PostScript-Code direkt zu schreiben. Leider sind PostScript-Drucker in der Regel relativ teuer. Der Abschnitt PostScript auf Nicht-PostScript-Druckern emulieren beschreibt, wie Sie einen Textfilter anpassen müssen, um PostScript-Daten auf einem nicht-PostScript-fähigen Drucker auszugeben. Haben Sie keinen PostScript-Drucker, sollten Sie insbesondere diesen Abschnitt lesen.

  • Der Abschnitt Konvertierungsfilter beschreibt eine Möglichkeit zur automatischen Konvertierung verschiedener Dateiformate in ein von Ihrem Drucker unterstütztes Format. Nachdem Sie diesen Abschnitt gelesen haben, werden Sie in der Lage sein, Ihren Drucker so zu konfigurieren, dass Sie durch die Eingabe von lpr -t troff-Daten, von lpr -d TeX-DVI-Daten, oder von lpr -v Rasterbilddaten drucken können. Daher sollten Sie diesen Abschnitt auf jeden Fall lesen.

  • Im Abschnitt Ausgabefilter wird eine nur selten genutzte Eigenschaft von LPD, die sogenannten Ausgabefilter, beschrieben. Wenn Sie keine Deckblätter drucken müssen, können Sie diesen Abschnitt überspringen.

  • Der Abschnitt lpf: Ein Textfilter beschreibt lpf, einen kompletten, wenn auch einfachen Textfilter für Zeilendrucker (oder auch Laserdrucker, die sich analog verhalten), der bereits mit FreeBSD geliefert wird. Wenn Sie nur am Ausdruck von reinem Text interessiert sind, oder wenn Ihr Drucker nur “Schrott” produziert, wenn er auf Backspace-Zeichen trifft, sollten Sie sich lpf näher ansehen.

Anmerkung: Eine Kopie der verschiedenen Skripte finden Sie im Verzeichnis /usr/share/examples/printing.


10.4.1.1. Die Funktionsweise von Filtern

Bei einem Filter handelt es sich um ein ausführbares Programm, das von LPD gestartet wird, um den geräteabhängigen Teil der Kommunikation mit einem Drucker zu übernehmen.

Wenn LPD eine Datei über einen Druckauftrag drucken will, startet es ein Filterprogramm. Danach setzt es die Standardeingabe des Filters auf die zu druckende Datei, die Standardausgabe auf den Drucker und die Standardfehlerausgabe auf /dev/console (Voreinstellung) oder auf die über die Option lf in /etc/printcap festgelegte Datei.

Welcher Filter von LPD mit welchen Argumenten geladen wird, wird in der Datei /etc/printcap oder durch die Argumente, die der Anwender lpr(1) auf der Kommandozeile übergibt, festgelegt. Gibt der Anwender beispielsweise lpr -t ein, startet LPD über die tf-Fähigkeit den troff-Filter für den gewünschten Drucker. Wollen Sie hingegen normalen Text drucken, wird der if-Filter gestartet. (Für Ausnahmen von diesem Vorgehen lesen Sie bitte den Abschnitt Ausgabefilter.)

Es gibt drei Arten von Filtern, die Sie in /etc/printcap angeben können:

  • Textfilter (die in der LPD-Dokumentation als input filter bezeichnet werden) sind für den Druck von normalem Text zuständig. Es handelt sich dabei um eine Art Standardfilter, da LPD von jedem Drucker erwartet, dass er normalen Text drucken kann. Aufgabe des Textfilters ist es, sicherzustellen, dass gelöschte Zeichen (Backspaces), Tabulatoren und andere Sonderzeichen Ihren Drucker nicht verwirren. Falls Sie für die Nutzung eines Druckers bezahlen müssen, kann der Textfilter über die Anzahl der gedruckten Zeilen auch die Anzahl der von Ihnen gedruckten Seiten ermitteln. Der Textfilter wird mit folgenden Argumenten gestartet:

    filter-name [-c] -w width -l length -i indent -n login -h host acct-file

    Die einzelnen Argumente haben folgende Bedeutung:

    -c

    Notwendig, wenn lpr -l verwendet wird.

    width

    Der Wert der in /etc/printcap festgelegten Option pw (page width). In der Voreinstellung ist dieser Wert auf 132 gesetzt.

    length

    Der Wert der pl-Fähigkeit (page length), Voreinstellung 66.

    indent

    Der durch lpr -i festgelegte Einzug, Voreinstellung 0.

    login

    Der Name des Benutzers, der die Datei druckt.

    host

    Der Rechner, auf dem der Druckauftrag gestartet wurde.

    acct-file

    Der Name der Verrechnungsdatei, in der die Ergebnisse der af-Fähigkeit gespeichert werden.

  • Ein Konvertierungsfilter konvertiert verschiedene Dateiformate in ein Format, das Ihr Drucker auf Papier ausgeben kann. So kann etwa der ditroff-Schriftsatz nicht direkt gedruckt werden, daher müssen Sie einen Konvertierungsfilter installieren, um diese Daten in ein Format zu bringen, das Ihr Drucker verarbeiten und drucken kann. Der Abschnitt Konvertierungsfilter enthält ausführliche Informationen zu diesen Filtern. Konvertierungsfilter können auch zur Verrechnung verwendet werden. Sie werden mit folgenden Argumenten gestartet:

    filter-name -x pixel-width -y pixel-height -n login -h host acct-file

    pixel-width ist der Wert der px-Fähigkeit (Voreinstellung 0), während pixel-height dem Wert der py-Fähigkeit (Voreinstellung ebenfalls 0) entspricht.

  • Ausgabefilter werden nur verwendet, wenn keine Textfilter vorhanden sind oder wenn Deckblätter benötigt werden. Der Abschnitt Ausgabefilter enthält weitere Informationen. Ausgabefilter unterstützen nur zwei Argumente:

    filter-name -w width -l length

    Beide Argumente entsprechen den Optionen -w und -l der Textfilter.

Alle Filter sollten mit folgenden Rückgabewerten (Exitcodes) beendet werden:

exit 0

Der Filter hat die Datei erfolgreich gedruckt.

exit 1

Der Filter war nicht in der Lage, die Datei zu drucken und meldet diesen Exitcode an LPD, um die Datei erneut zu drucken. LPD startet daraufhin den Filter erneut.

exit 2

Der Filter war nicht in der Lage, die Datei zu drucken. Bei diesem Exitcode soll LPD aber nicht versuchen, die Datei erneut zu drucken, sondern den Druckauftrag verwerfen.

/usr/libexec/lpr/lpf, der mit FreeBSD gelieferte Textfilter, nutzt die Argumente page width und page length, um festzulegen, wann ein Seitenumbruch (form feed) gesendet werden soll sowie zur Verrechnung von Druckaufträgen. Dazu werden der Benutzername, der für den Druckauftrag verwendete Rechner sowie die Verrechnungsdatei ausgewertet, um die entsprechenden Einträge zu erstellen.

Wenn Sie auf der Suche nach Filtern sind, achten Sie darauf, dass diese LPD-kompatibel sind. Dazu müssen diese die oben beschriebenen Argumente unterstützen. Wenn Sie planen, Ihre Filter selbst zu erstellen, müssen diese ebenfalls die gleichen Argumente und Exitcodes unterstützen.


10.4.1.2. Normalen Text auf PostScript®-Druckern drucken

Sie sind der alleinige Benutzer Ihres Computers und Ihres PostScript-Druckers und Sie sind sich sicher, dass Sie niemals normalen Text an Ihren Drucker senden werden? Außerdem werden Sie niemals ein Programm verwenden, um normalen Text auszudrucken? Nur wenn dies alles zutrifft, können Sie diesen Abschnitt überspringen.

Wollen Sie allerdings sowohl PostScript als auch normalen Text drucken, müssen Sie Ihren Drucker zuvor entsprechend konfigurieren. Dazu muss Ihr Textfilter in der Lage sein, zu unterscheiden, ob es sich bei einem ankommenden Druckauftrag um normalen Text oder um PostScript-Daten handelt. Jeder PostScript-Druckauftrag muss mit den Zeichen %! beginnen (sehen Sie in Ihrem Druckerhandbuch nach, ob Ihr Drucker weitere Sprachen unterstützt). Sind dies die beiden ersten Zeichen eines Druckauftrages, so handelt es sich um PostScript-Daten, die direkt gedruckt werden können. Fehlen diese Zeichen allerdings, muss der Textfilter den Inhalt der Datei nach PostScript konvertieren, bevor die Datei gedruckt werden kann.

Wie funktioniert diese Unterscheidung?

Haben Sie einen seriellen Drucker, können Sie lprps installieren. lprps ist ein PostScript-Druckerfilter, der eine Zweiwegekommunikation mit einem Drucker ermöglicht. Er aktualisiert die Druckerstatusdatei mit Protokollinformationen des Druckers. Dadurch sind Anwender und Administratoren in der Lage, den genauen Zustand des Druckers zu prüfen (durch Meldungen wie “toner low” oder “paper jam”). Wichtiger ist allerdings, dass lprps psif enthält, ein Programm, das feststellen kann, ob ein ankommender Druckauftrag normalen Text enthält. Ist dies der Fall, wird textps (das ebenfalls mit lprps geliefert wird) aufgerufen und die Datei nach PostScript konvertiert. Danach kann lprps die Datei an den Drucker senden.

lprps ist in der FreeBSD Ports-Sammlung enthalten. Je nach der von Ihnen verwendeten Papiergröße installieren Sie dazu den Port print/lprps-a4 oder print/lprps-letter. Nach der Installation müssen Sie nur noch den Pfad zum Programm psif angeben, das als Teil von lprps installiert wird. Haben Sie lprps über die Ports-Sammlung installiert, fügen Sie folgende Zeile in den Eintrag Ihres PostScript-Druckers in /etc/printcap ein:

:if=/usr/local/libexec/psif:

Zusätzlich sollten Sie die rw-Fähigkeit aktivieren, um LPD im Schreib- und Lesemodus zu öffnen.

Haben Sie hingegen einen parallelen PostScript-Drucker, was eine Zweiwegekommunikation mit Ihrem Drucker (auf die lprps angewiesen ist) unmöglich macht, können Sie das folgende Shell-Skript verwenden:

#!/bin/sh
#
#  psif - Drucke PostScript oder normalen Text auf einem PostScript-Drucker
#  Script-Version; das ist NICHT die mit lprps gelieferte Version!
#  Installiert unter:  /usr/local/libexec/psif
#

IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  PostScript - einfach drucken.
    #
    echo "$first_line" && cat && printf "\004" && exit 0
    exit 2
else
    #
    #  Normaler Text - zuerst konvertieren, dann drucken.
    #
    ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0
    exit 2
fi     

Für dieses Skript wurde textps als seperates Programm installiert, um normalen Text nach PostScript zu konvertieren. Sie können aber auch jeden anderen Text-nach-PostScript-Konverter verwenden. Die FreeBSD Ports-Sammlung enthält mit a2ps ein umfangreiches Programm zur Konvertierung von normalem Text nach PostScript.


10.4.1.3. PostScript auf Nicht-PostScript-Druckern emulieren

Bei PostScript handelt es sich um den de facto-Standard für hochwertigen Schriftsatz und Druck. Leider ist PostScript aber auch ein teurer Standard. Glücklicherweise hat Aladdin Enterprises daher eine freie PostScript-ähnliche Implementierung namens Ghostscript entwickelt, die auch unter FreeBSD lauffähig ist. Ghostscript kann fast jede PostScript-Datei lesen und auf den verschiedensten Geräten ausgeben, darunter auch auf vielen Nicht-PostScript-Druckern. Durch die Installation von Ghostscript und die Nutzung eines speziellen Textfilters erreichen Sie, dass sich Ihr Nicht-PostScript-Drucker wie ein echter PostScript-Drucker verhält.

Ghostscript ist in verschiedenen Versionen in der FreeBSD Ports-Sammlung enhalten, die am häfigsten verwendete Version ist print/ghostscript-gpl.

Um PostScript zu emulieren, muss der Textfilter erkennen, ob er eine PostScript-Datei drucken soll. Ist dies nicht der Fall, wird die Datei direkt an den Drucker geschickt. Anderenfalls wird die Datei an Ghostscript übergeben, das die Datei in ein Format konvertiert, das Ihr Drucker versteht.

Dazu ein Beispiel. Das folgende Skript ist ein Textfilter für den Drucker DeskJet 500 von Hewlett Packard. Nutzen Sie einen anderen Drucker, müssen Sie die Option -sDEVICE beim Aufruf von gs (Ghostscript) entsprechend anpassen. Eine Liste der von Ghostscript unterstützten Geräte erhalten Sie durch die Eingabe von gs -h auf der Kommandozeile.

#!/bin/sh
#
#  ifhp - Ghostscript-emuliertes PostScript auf einem HP DeskJet 500 drucken
#  Installiert unter:  /usr/local/libexec/ifhp

#
#  LF als CR+LF behandeln (um einen "Treppeneffekt" auf HP/PCL-Drucker
#  zu vermeiden)
#
printf "\033&k2G" || exit 2

#
#  Lies die ersten zwei Zeichen der Datei
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  Oh.  Es ist PostScript; mit Ghostscript konvertieren, danach drucken.
    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
      -sOutputFile=- - && exit 0
else
    #
    #  Normaler Text oder HP/PCL, einfach direkt drucken.  Ans Ende setzen wir
    #  einen Seitenumbruch (also ein Form Feed), damit auch die letzte Seite
    #  ausgeworfen wird.
    #
    echo "$first_line" && cat && printf "\033&l0H" &&
exit 0
fi

exit 2

Zuletzt müssen Sie LPD noch durch die if-Fähigkeit über den neuen Filter informieren:

:if=/usr/local/libexec/ifhp:

Das ist alles. Ab sofort sollte sowohl ein lpr normaler.text als auch ein lpr wasauchimmer.ps funktionieren und beide Dateien sollten problemlos gedruckt werden.


10.4.1.4. Konvertierungsfilter

Nachdem Sie Ihren Drucker wie unter Einfache Drucker-Konfiguration eingerichtet haben, wollen Sie wahrscheinlich einige Konvertierungsfilter installieren, damit Sie (abgesehen von ASCII-Text) auch Ihre Lieblings-Dateiformate drucken können.


10.4.1.4.1. Warum sollte ich einen Konvertierungsfilter installieren?

Konvertierungsfilter erleichtern das Drucken von verschiedenen Dateiformaten. Nehmen wir beispielsweise an, dass Sie sehr viel mit dem TeX-Satzsystem arbeiten und über einen PostScript-Drucker verfügen. Eine vom TeX-System erzeugte DVI-Datei kann erst dann gedruckt werden, nachdem diese nach PostScript konvertiert wurde. Dazu geben Sie Folgendes ein:

% dvips seaweed-analysis.dvi
% lpr seaweed-analysis.ps

Haben Sie einen Konvertierungsfilter für DVI-Dateien installiert, können Sie die manuelle Konvertierung überspringen, da dies nun LPD für Sie erledigt. Wollen Sie eine DVI-Datei drucken, geben Sie nur noch den folgenden Befehl ein:

% lpr -d seaweed-analysis.dvi

Durch die Verwendung der Option -d wurde LPD angewiesen, unsere DVI-Datei vor dem Druck zu konvertieren. Der Abschnitt Formatierungs- und Konvertierungsoptionen beschreibt die dabei möglichen Optionen.

Für jede Konvertierungsoption, die Ihr Drucker unterstützen soll, müssen Sie einen eigenen Konvertierungsfilter installieren und dessen Pfad in der Datei /etc/printcap angeben. Ein Konvertierungsfilter verhält sich im Prinzip wie ein Textfilter bei einer einfachen Druckerkonfiguration (lesen Sie dazu auch den Abschnitt Den Textfilter installieren), allerdings konvertiert er die Datei in ein Format, das Ihr Drucker versteht, anstatt normalen Text zu drucken.


10.4.1.4.2. Welche Konvertierungsfilter sollte ich installieren?

Sie sollten nur Filter installieren, die Sie auch benötigen. Wenn Sie sehr viele DVI-Dateien drucken, sollten Sie auch einen DVI-Konvertierungsfilter installieren. Müssen Sie viele troff-Daten drucken, ist ein troff-Filter hilfreich.

Die folgende Tabelle listet die von LPD unterstützten Filter sowie die Einträge in /etc/printcap auf, mit denen Sie diese Fähigkeiten aktivieren. Zusätzlich wird angegeben, wie Sie lpr jeweils aufrufen müssen:

Dateityp /etc/printcap-Fähigkeit lpr-Option
cifplot cf -c
DVI df -d
plot gf -g
ditroff nf -n
FORTRAN-Text rf -f
troff tf -f
Rasterdaten vf -v
Normaler Text if keine, -p, or -l

Wollen Sie also lpr -d verwenden, muss die df-Fähigkeit in /etc/printcap aktiviert sein.

Obwohl manche Leute etwas anderes behaupten, sind Formate wie FORTRAN-Text und -Plot inzwischen nahezu obsolet. Wenn Sie diese Formate dennoch benötigen, installieren Sie einfach einen angepassten Filter. Wollen Sie beispielsweise zwar Printerleaf-Dateien (also Dateien des Desktop Publishing-Programms von Interleaf), aber keine Plotdateien drucken, so können Sie einen Printerleaf-Konvertierungsfilter installieren, der es durch die Aktivierung der gf-Fähigkeit erlaubt, diese Dateien direkt zu drucken. Nun müssen Sie Ihren Mitarbeitern nur noch mitteilen, dass lpr -g nun für “drucke Printerleaf-Dateien” steht.


10.4.1.4.3. Konvertierungsfilter installieren

Da Konvertierungsfilter nicht zum Basissystem von FreeBSD gehören, sollten diese unter /usr/local installiert werden. Häufig wird das Verzeichnis /usr/local/libexec verwendet, da es sich bei Konvertierungsfiltern um spezielle Programme handelt, die nur von LPD, aber nicht von einem normalen Benutzer gestartet werden.

Um einen Konvertierungsfilter zu aktivieren, müssen Sie dessen Pfad zusätzlich zur benötigten Fähigkeit in der Datei /etc/printcap eintragen.

In unserem Beispiel wollen wir einen DVI-Konvertierungsfilter für den Drucker bamboo installieren. Unsere bereits bekannte /etc/printcap wurde allerdings um die df-Fähigkeit für den Drucker bamboo erweitert:

#
#  /etc/printcap des Rechners rose - neuer df-Filter für bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

Beim DVI-Filter handelt es sich um ein Shell-Skript namens /usr/local/libexec/psdf:

#!/bin/sh
#
#  psdf - DVI-nach-PostScript Druckerfilter
#  Installiert unter:  /usr/local/libexec/psdf
#
#  Wird von lpd aktiviert, wenn der Nutzer lpr -d eingibt.
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"

Dieses Skript startet dvips im Filtermodus (durch das Argument -f wird der Druckauftrag über die Standardeingabe entgegengenommen). Danach wird der PostScript-Druckerfilter lprps (lesen Sie dazu auch den Abschnitt Drucken von reinen Textdateien auf einem PostScript-Drucker) mit den von LPD übergebenen Argumenten gestartet. Das lprps-Werkzeug wiederum nutzt diese Argumente, um die gedruckten Seiten zu verrechnen.


10.4.1.4.4. Beispiele für Konvertierungsfilter

Da es keine verbindliche Prozedur zur Installation eines Druckerfilters gibt, folgen nun weitere Beispiele in diesem Abschnitt. Verwenden Sie diese, um Ihre eigenen Filter zu erstellen. Falls ein Filter Ihren Anforderungen bereits entspricht, können Sie ihn auch direkt verwenden.

Das erste Beispiel beschreibt einen Konvertierungsfilter für GIF-Dateien für den Drucker LaserJet III-Si von Hewlett Packard:

#!/bin/sh
#
#  hpvf - Konvertiert GIF-Dateien nach HP/PCL, danach wird gedruckt.
#  Installiert unter:  /usr/local/libexec/hpvf

PATH=/usr/X11R6/bin:$PATH; export PATH
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
    && exit 0 \
    || exit 2

Dieser Filter konvertiert eine GIF-Datei in eine portable Anymap, diese in ein portables Graustufenbild, dieses wiederum in eine portable Bitmap, die schließlich in ein LaserJet/PCL-kompatibles Format umgewandelt wird.

/etc/printcap muss für einen Drucker, der diesen Filter nutzen will, folgenden Eintrag enthalten:

#
#  /etc/printcap des Rechners orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:

Das folgende Skript ist ein Konvertierungsfilter, der das Drucken von troff-Daten des groff-Textsatzsystems auf dem PostScript-Drucker bamboo ermöglicht:

#!/bin/sh
#
#  pstf - Konvertiert groff's troff-Daten nach PS, dann wird gedruckt.
#  Installiert unter:  /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"

Dieses Skript nutzt wiederum lprps, um mit dem Drucker zu kommunizieren. Wäre der Drucker an einem parallelen Port angeschlossen, würde das Skript so aussehen:

#!/bin/sh
#
#  pstf - Konvertiert groff's troff-Daten nach PS, danach wird gedruckt.
#  Installiert unter:  /usr/local/libexec/pstf
#
exec grops

Das ist alles. Um den Filter verwenden zu können, müssen Sie ihn allerdings noch in /etc/printcap aktivieren:

:tf=/usr/local/libexec/pstf:

Das nächste Skript ist ein FORTRAN-Textfilter für jeden Drucker, der normalen Text direkt drucken kann und der hier für den Drucker teak installiert wird:

#!/bin/sh
#
# hprf - FORTRAN-Textfilter für den Drucker LaserJet 3si:
# Installiert unter:  /usr/local/libexec/hprf
#

printf "\033&k2G" && fpr && printf "\033&l0H" &&
 exit 0
exit 2   

Zusätzlich benötigen wir wiederum einen Eintrag in /etc/printcap, um diesen Filter für den Drucker teak zu aktivieren:

:rf=/usr/local/libexec/hprf:

Das letzte Beispiel ist etwas komplexer. Es soll ein DVI-Filter für den bereits erwähnten LaserJet-Drucker teak installiert werden. Der erste Teil ist einfach: Sie müssen den Pfad des DVI-Filters in /etc/printcap eintragen:

:df=/usr/local/libexec/hpdf:

Nun kommt der schwierige Teil: Sie müssen den Filter funktionsfähig machen. Dazu benötigen Sie einen DVI-nach-LaserJet/PCL-Konverter. Glücklicherweise enthält die FreeBSD Ports-Sammlung mit print/dvi2xx ein solches Programm. Nach der Installation des Pakets verfügen wir über das Programm dvilj2p, das zur Konvertierung von DVI-Daten in zu den Druckern LaserJet IIp, LaserJet III, sowie LaserJet 2000 kompatible Codes benötigt wird.

Durch den Einsatz von dvilj2p wird der Filter hpdf relativ komplex, da dvilj2p nicht von der Standardeingabe lesen kann, sondern als Eingabe einen Dateinamen erwartet. Zusätzlich muss der Dateiname auf .dvi enden, daher ist die Verwendung von /dev/fd/0 als Standardeingabe problematisch. Wir können diese Problem aber umgehen, indem wir einen temporären Dateinamen symbolisch nach /dev/fd/0 linken. Dadurch wird dvilj2p gezwungen, dennoch von der Standardeingabe zu lesen.

Das letzte Problem, das wir noch lösen müssen, ist, dass wir /tmp nicht als temporären Link verwenden können. Symbolische Links gehören dem User sowie der Gruppe bin. Der Filter läuft aber als User daemon. Außerdem ist /tmp durch ein Sticky-Bit gesichert. Daher kann der Filter den Link zwar erzeugen, ein Aufräumen ist aber nicht mehr möglich, weil sich die Eigentümer des Filters und des temporären Verzeichnisses unterscheiden.

Daher legt der Filter den symbolischen Link im Arbeitsverzeichnis an, das gleichzeitig als Spooling-Verzeichnis dient (festgelegt durch die Aktivierung der sd-Fähigkeit in /etc/printcap). Das Arbeitsverzeichnis ist ein idealer Ort für den Filter, insbesondere da dieses (manchmal) sogar über mehr freien Speicherplatz als /tmp verfügt.

Mit diesen Informationen sind wir nun in der Lage, den Filter zu entwickeln:

#!/bin/sh
#
#  hpdf - DVI-Daten auf einen HP/PCL-Drucker drucken
#  Installiert unter:  /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

#
#  Eine Funktion zum Aufräumen unserer temporären Dateien.
#  Diese finden sich im Arbeitsverzeichnis, das wir auch als
#  Spooling-Verzeichnis für unseren Drucker verwenden werden.
#
cleanup() {
   rm -f hpdf$$.dvi
}

#
#  Eine Funktion, um fatale Fehler zu behandeln.  Dazu die Meldung
#  ausgeben, danach ein exit 2.  Dadurch weiß LPD, dass es
#  den Auftrag nicht noch einmal drucken soll.
#
fatal() {
    echo "$@" 1>&2
    cleanup
    exit 2
}

#
#  Wenn ein Anwender den Auftrag entfernt, sendet LPD ein SIGINT, daher
#  wollen wir SIGINT und einige andere Signale abfangen (trappen), um
#  nach der Konvertierung aufräumen zu können.
#
trap cleanup 1 2 15

#
#  Bevor wir anfangen, räumen wir noch auf.  Sicher ist sicher.
#
cleanup

#
#  Die DVI-Eingabedatei auf die Standardeingabe linken (die zu druckende
#  Datei).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Konnte Symlink nicht anlegen!"

#
#  Umwandeln: LF = CR+LF
#
printf "\033&k2G" || fatal "Konnte Drucker nicht initialisieren!"

#
#  Konvertieren und drucken.  Da der Rückgabewert von dvilj2p
#  unzuverlässig ist, ignorieren wir ihn einfach.
#
dvilj2p -M1 -q -e- dfhp$$.dvi

#
#  Aufräumen und beenden.
#
cleanup
exit 0   

10.4.1.4.5. Automatische Konvertierung: Eine Alternative zu Konvertierungsfiltern

Alle in diesem Abschnitt besprochenen Konvertierungsfilter sind zwar sehr hilfreich, allerdings müssen Sie nach wie vor bei jedem Aufruf von lpr(1) angeben, welchen Filter sie verwenden wollen, was mit der Zeit sicher nervend wird. Schlimmer ist allerdings, dass die Auswahl eines unpassenden Filters dazu führen kann, dass Sie Hunderte Seiten Papier ausdrucken.

Statt also Konvertierungsfilter zu installieren, könnten Sie den Textfilter (der ohnehin der Standardfilter ist) verwenden, um den zu druckenden Dateityp zu erkennen und anschließend den korrekten Konvertierungsfilter auszuwählen. Um den Dateityp zu bestimmen, können Sie beispielsweise file verwenden. Leider ist es bei einigen Dateitypen problematisch, diese zu unterscheiden. Daher könnten Sie für diese Dateitypen dennoch einen Konvertierungsfilter installieren.

Die FreeBSD Ports-Sammlung enthält mit apsfilter (print/apsfilter) einen Textfilter, der diese automatische Konvertierung durchführen kann. Er ist in der Lage, normalen Text, PostScript, DVI und beinahe jede Art von Datei zu erkennen, diese zu konvertieren und auf Ihren Drucker auszugeben.


10.4.1.5. Ausgabefilter

LPD unterstützt noch eine weitere Filterart, die sogenannten Ausgabefilter. Diese sind - analog zu einem Textfilter -  für den Druck von normalem Text ausgelegt, allerdings verfügen sie im Vergleich zu diesen nur über sehr eingeschränkte Fähigkeiten. Wenn Sie einen Ausgabefilter (aber keinen Textfilter) verwenden, dann

  • startet LPD nur einen Ausgabefilter für den kompletten Druckauftrag, statt für jede Datei des Auftrags einen eigenen Filter zu starten.

  • kümmert sich LPD nicht darum, den Beginn oder das Ende einer Datei innerhalb des Druckauftrages zu finden.

  • übergibt LPD weder den Benutzer- noch den Rechnernamen desjenigen, der den Druckauftrag erteilt hat, an den Ausgabefilter, was eine Verrechnung von Druckaufträgen unmöglich macht. Ausgabefilter unterstützen insgesamt nur zwei Argumente:

    filter-name -w width -l length

    width basiert auf der pw-Fähigkeit, length hingegen auf der pl-Fähigkeit des gewählten Druckers.

Lassen Sie sich von dieser angeblichen Einfachheit eines Ausgabefilters nicht täuschen. Ausgabefilter sind beispielsweise nicht dazu in der Lage, jede Datei eines Druckauftrages auf einer neuen Seite zu drucken. Dazu benötigen Sie einen Textfilter (die im Abschnitt Den Textfilter installieren beschrieben werden). Außerdem sind Ausgabefilter in Wirklichkeit komplexer, da sie den gesendeten Bytestrom nicht nur auf Sonderzeichen hin untersuchen müssen, sondern auch die Übertragung von Signalen für LPD übernehmen müssen.

Sie benötigen Ausgabefilter aber dann, wenn Sie Deckblätter drucken wollen, da dazu Escape-Sequenzen und Initialisierungsstrings erforderlich sind. (Es ist allerdings nicht möglich, den Druck dieser Deckblätter zu verrechnen, da LPD keine Benutzer- oder Rechnerinformationen an den Ausgabefilter übergibt.)

LPD kann für den gleichen Drucker sowohl Ausgabefilter als auch Textfilter verwenden. In solchen Fällen verwendet LPD den Ausgabefilter nur für den Druck von Deckblättern (die im Abschnitt Deckblätter näher beschrieben werden). Nach dem Druck des Deckblattes erwartet LPD, dass sich der Ausgabefilter selbst beendet. Dazu werden zwei Bytes an den Ausgabefilter gesendet: ASCII 031, gefolgt von ASCII 001. Wenn ein Ausgabefilter diese zwei Bytes (031, 001) empfängt, sendet er das Signal SIGSTOP an sich selbst. Nachdem LPD den Rest des Druckauftrages erledigt hat, wird der Ausgabefilter erneut gestartet, indem ein SIGCONT an den Ausgabefilter gesendet wird.

Haben Sie nur einen Ausgabefilter, aber keinen Textfilter installiert, dann verwendet LPD den Ausgabefilter auch für den Druck von normalem Text. Wie bereits erwähnt, werden dabei allerdings alle Dateien des Druckauftrags unmittelbar hintereinander gedruckt, Seitenumbrüche oder ein zusätzlicher Papiervorschub sind also nicht möglich. Da dieses Verhalten von Ihnen wahrscheinlich nicht gewünscht wird, werden Sie in fast allen Fällen einen zusätzlichen Textfilter benötigen.

Der weiter oben beschriebene Textfilter lpf kann auch als Ausgabefilter verwendet werden. Wenn Sie nur einen funktionierenden Ausgabefilter benötigen, aber nicht den dafür benötigten Code (zur Zeichenerkennung und zum Senden von Signalen) schreiben wollen, sollten Sie sich lpf näher ansehen. Sie können lpf auch in ein Shell-Skript einbinden, um von Ihrem Drucker benötigte Initialisierungscodes zu verarbeiten.


10.4.1.6. lpf: Ein Textfilter

Der Textfilter (Eingabefilter) /usr/libexec/lpr/lpf wird bereits mit FreeBSD geliefert. Er erlaubt das Einrücken der Ausgabe (über lpr -i), die Übergabe von Zeichen-Literalen (über lpr -l), das Anpassen der Druckposition bei gelöschten Zeichen (Backspaces) oder Tabulatoren, sowie die Verrechnung gedruckter Seiten. Zusätzlich kann dieser Textfilter auch als Ausgabefilter arbeiten.

lpf ist für viele verschiedene Druckumgebungen geeignet. Zwar ist dieser Textfilter nicht in der Lage, Initialisierungssequenzen an einen Drucker zu senden, dieses Problem kann allerdings durch das Schreiben und Ausführen eines Shell-Skripts (das diese Funktion übernimmt) und das anschließende Aufrufen von lpf gelöst werden.

Damit Sie lpf für die Verrechnung von Druckaufträgen einsetzen können, müssen Sie die korrekten Werte für die pw- und pl-Fähigkeiten in /etc/printcap eintragen. lpf verwendet diese Werte, um festzustellen, wieviel Text auf eine Seite passt und wieviele Seiten im Druckauftrag enthalten sind. Weitere Informationen zur Verrechnung der Druckernutzung enthält der Abschnitt Die Druckernutzung verrechnen.


10.4.2. Deckblätter

Wenn Sie viele Benutzer mit verschiedenen Druckern verwalten müssen, sollten Sie Deckblätter als notwendiges Übel akzeptieren.

Deckblätter (manchmal auch als Bannerseiten oder burst pages bezeichnet) geben an, wem die Ausgabe eines Druckauftrags gehört. Sie werden normalerweise in großen fetten Buchstaben gedruckt, manchmal sogar mit zusätzlicher Umrandung, damit man sie leichter von den tatsächlichen Seiten eines Druckauftrages unterscheiden kann. Der Nachteil von Deckblättern ist allerdings, dass es sich dabei um eine zusätzliche zu druckende Seite handelt, die in der Regel bereits nach wenigen Minuten wieder im Papierkorb landet. Da aber für jeden Druckauftrag nur ein einziges Deckblatt gedruckt wird, ist der Papierverbrauch in den meisten Fällen tolerierbar.

Das LPD-System kann Deckblätter automatisch erzeugen, wenn Ihr Drucker normalen Text direkt drucken kann. Haben Sie hingegen einen PostScript-Drucker, benötigen Sie ein externes Programm, um die Deckblätter zu generieren (Lesen Sie dazu auch den Abschnitt Deckblätter auf PostScript-Druckern erzeugen.).


10.4.2.1. Deckblätter aktivieren

Im Abschnitt Einfache Drucker-Konfiguration haben wir die Ausgabe von Deckblättern durch die die Angabe der Option sh (suppress header) in /etc/printcap deaktiviert. Um die Ausgabe von Deckblättern wieder zu aktivieren, müssen Sie daher die sh-Fähigkeit wieder entfernen.

Das klingt zu einfach? Wo ist der Haken?

Sie haben recht. Es ist möglich, dass Sie einen Ausgabefilter verwenden müssen, um die nötigen Initialisierungsstrings an den Drucker zu senden. Das folgende Beispiel beschreibt einen Ausgabefilter für PCL-kompatible Drucker von Hewlett Packard:

#!/bin/sh
#
#  hpof - Ausgabefilter für PCL-kompatible Drucker von Hewlett Packard
#  Installiert unter:  /usr/local/libexec/hpof

printf "\033&k2G" || exit 2
exec /usr/libexec/lpr/lpf

Geben Sie den Pfad des Ausgabefilters über die of-Fähigkeit an. Weitere Informationen finden Sie im Abschnitt Ausgabefilter.

Das nächste Beispiel beschreibt die Datei /etc/printcap des bereits erwähnten Druckers teak. Allerdings sind nun die Ausgabe von Deckblättern sowie der vorhin beschriebene Ausgabefilter enthalten:

#
#  /etc/printcap für den Rechner orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:\
        :of=/usr/local/libexec/hpof:

Wenn ein Anwender nun einen Druckauftrag an den Drucker teak schickt, wird für jeden Druckauftrag ein Deckblatt erstellt. Benötigt ein Anwender keine Deckblätter, kann er die Ausgabe dieser Seiten durch die Verwendung von lpr -h unterdrücken. Weitere, für die Ausgabe von Deckblättern interessante lpr(1)-Optionen finden Sie im Abschnitt Deckblattoptionen.

Anmerkung: LPD verwendet ein Form Feed, um das Deckblatt abzuschließen. Wenn Ihr Drucker ein anderes Zeichen verwendet, um eine Seite auszuwerfen, geben Sie dieses über die ff-Fähigkeit in /etc/printcap an.


10.4.2.2. Deckblätter kontrollieren

Haben Sie die Ausgabe von Deckblättern aktiviert, gibt LPD eine ganze Seite in großen Buchstaben aus, die den Anwender, den verwendeten Rechner sowie den Druckauftrag beschreiben. Das folgende Beispiel ist ein Deckblatt für den Druckauftrag “outline”, der von kelly auf dem Rechner rose erstellt wurde:

      k                   ll       ll
      k                    l        l
      k                    l        l
      k   k     eeee       l        l     y    y
      k  k     e    e      l        l     y    y
      k k      eeeeee      l        l     y    y
      kk k     e           l        l     y    y
      k   k    e    e      l        l     y   yy
      k    k    eeee      lll      lll     yyy y
                                               y
                                          y    y
                                           yyyy


                                   ll
                          t         l        i
                          t         l
       oooo    u    u   ttttt       l       ii     n nnn     eeee
      o    o   u    u     t         l        i     nn   n   e    e
      o    o   u    u     t         l        i     n    n   eeeeee
      o    o   u    u     t         l        i     n    n   e
      o    o   u   uu     t  t      l        i     n    n   e    e
       oooo     uuu u      tt      lll      iii    n    n    eeee









      r rrr     oooo     ssss     eeee
      rr   r   o    o   s    s   e    e
      r        o    o    ss      eeeeee
      r        o    o      ss    e
      r        o    o   s    s   e    e
      r         oooo     ssss     eeee







                                              Job:  outline
                                              Date: Sun Sep 17 11:04:58 1995

LPD fügt ein Form Feed an diesen Text an, damit der eigentliche Druckauftrag auf einer neuen Seite gestartet wird (es sei denn, Sie haben die sf-Fähigkeit (suppress form feeds) des jeweiligen Druckers in /etc/printcap aktiviert).

Wenn Sie dies wüschen, kann LPD auch nur ein kurzes Deckblatt ausgeben. Dazu verwenden Sie die Option sb (short banner) in /etc/printcap. Dadurch erhalten Sie ein Deckblatt ähnlich dem folgenden:

rose:kelly  Job: outline  Date: Sun Sep 17 11:07:51 1995

In der Voreinstellung druckt LPD zuerst das Deckblatt und danach den eigentlichen Druckauftrag. Um diese Reihenfolge umzukehren, geben Sie die Option hl (header last) in /etc/printcap ans.


10.4.2.3. Deckblätter verrechnen

Wenn Sie die in LPD eingebaute Funktion zur Erstellung von Deckblättern verwenden, werden Sie auf folgendes Paradigma stoßen: Deckblätter müssen kostenlos sein.

Warum ist das so?

Weil der Ausgabefilter das einzige externe Programm ist, das zum Zeitpunkt der Erstellung des Deckblatts eine Verrechnung durchführen könnte. Da Ausgabefilter aber weder über Benutzer- noch über Rechnerinformationen verfügen, ist es nicht möglich, einen Druckauftrag einem bestimmten Benutzer zuzuordnen. Da ein Benutzer die Ausgabe von Deckblättern über lpr -h unterdrücken kann, ist es auch nicht möglich, die Vorgabe “verrechne eine zusätzliche Seite” in den Text- oder Konvertierungsfilter (die über die zur Verrechnung nötigen Benutzer- und Rechnerinformationen verfügen) aufzunehmen, weil Benutzer sonst für Deckblätter bezahlen müssten, die sie nicht gedruckt haben.

Es ist ebenfalls nicht ausreichend, jeden Filter eigene Deckblätter erzeugen zu lassen (und sie dadurch verrechnen zu können). Wollte ein Benutzer durch ein lpr -h die Ausgabe eines Deckblattes unterdrücken, würde dieses nun trotzdem verrechnet werden, da LPD keine Informationen über die Verwendung der Option -h an einen Filter weitergibt.

Welche Möglichkeiten habe ich nun?

Sie können:

  • Das Paradigma von LPD einfach akzeptieren und die Deckblätter gratis abgeben.

  • Eine alternatives Drucksystem wie LPRng installieren. Der Abschnitt Alternativen zum Standard-Drucksystem beschreibt verschiedene Drucksysteme, die LPD ersetzen können.

  • Schreiben Sie einen intelligenten Ausgabefilter. Normalerweise kümmert sich ein Ausgabefilter nur um die Initialisierung des Druckers oder um eine einfache Zeichenkonvertierung. Außerdem eignet er sich für die Ausgabe von Deckblättern und normalem Text, wenn Sie keinen Text- oder Eingabefilter installiert haben. Haben Sie allerdings einen Textfilter installiert, verwendet LPD Ausgabefilter nur für die Ausgabe von Deckblättern. Ein Ausgabefilter kann den Text des von LPD erzeugten Deckblattes untersuchen, um festzustellen, welcher Benutzer und welcher Rechner den Druckauftrag gestartet hat. Leider weiß der Ausgabefilter auch mit dieser Methode nicht, welche Datei er zur Verrechnung verwenden soll (da der Name dieser Datei durch die af-Fähigkeit übergeben wird). Wenn Sie eine Standard-Verrechnungsdatei verwenden, können Sie diese in den Ausgabefilter einbauen. Um den Text des Deckblattes zu untersuchen, verwenden Sie die sh-Fähigkeit (short header) in /etc/printcap. Falls Ihnen das zuviel Aufwand ist, freuen sich Ihre Benutzer sicher darüber, wenn Sie ihnen den kostenlosen Druck von Deckblättern erlauben.


10.4.2.4. Deckblätter auf PostScript-Druckern ausgeben

In der Regel erzeugt LPD ein Deckblatt mit normalem Text, das für viele verschiedene Drucker geeignet ist. Da PostScript-Drucker normalen Text aber nicht drucken können, ist die LPD-Funktion zur Erstellung von Deckblättern auf diesen Drucker relativ sinnlos.

Es sei denn, jeder Text- und Konvertierungsfilter erzeugt über den Benutzer- und Rechnernamen sein eigenes, für den jeweiligen Drucker geeignetes Deckblatt. Das Problem dieser Methode ist allerdings, dass ein Anwender auch dann ein Deckblatt erhält, wenn er dies über lpr -h verhindern wollte.

Das folgende Skript benötigt drei Argumente (den Loginnamen des Benutzers, den Rechnernamen und den Namen des Druckauftrages), um daraus ein einfaches PostScript-Deckblatt zu erzeugen:

#!/bin/sh
#
#  make-ps-header - ein PostScript-Deckblatt auf stdout ausgeben
#  Installiert unter:  /sr/local/libexec/make-ps-header
#

#
#  Die folgenden Werte sind PostScript-Einheiten (72 pro Zoll).
#  Passen Sie diese Werte für A4 oder die von Ihnen verwendete
#  Papiergröße an:
#
page_width=612
page_height=792
border=72

#
#  Argumente prüfen
#
if [ $# -ne 3 ]; then
    echo "Usage: `basename $0` <user> <host> <job>" 1>&2
    exit 1
fi

#
#  Diese Werte in Variablen speichern, damit der PostScript-Code
#  übersichtlicher wird.
#
user=$1
host=$2
job=$3
date=`date`

#
#  Sende den PostScript-Code an stdout.
#
exec cat <<EOF
%!PS

%
%  Sicherstellen, dass es keine unerwünschten Wechselwirkungen mit
%  dem folgenden Druckauftrag gibt.
%
save

%
%  Ziehe eine fette Umrandung.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray

%
%  Zeige den Benutzernamen groß und fett an.
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show

%
%  Und nun zeige noch die Einzelheiten an.
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def }
forall

/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
        270 y moveto show /y y 18 sub def
} forall

%
% Das wars.
%
restore
showpage
EOF    

Nun kann jeder Konvertierungs- oder Textfilter dieses Skript aufrufen, um zuerst das Deckblatt zu erzeugen und danach den Druckauftrag zu drucken. Das nächste Beispiel enthält den bereits beschriebenen DVI-Konvertierungsfilter, der hier um die Funktion zur Erzeugung eines Deckblatts erweitert wurde:

#!/bin/sh
#
#  psdf - DVI-nach-PostScript - Druckerfilter
#  Installiert unter:  /usr/local/libexec/psdf
#
#  Wird von lpd aufgerufen, wenn der Benutzer lpr -d verwendet.
#

orig_args="$@"

fail() {
    echo "$@" 1>&2
    exit 2
}

while getopts "x:y:n:h:" option; do
    case $option in
        x|y)  ;; # Ignore
        n)    login=$OPTARG ;;
        h)    host=$OPTARG ;;
        *)    echo "LPD started `basename $0` wrong." 1>&2
              exit 2
              ;;
    esac
done

[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"

( /usr/local/libexec/make-ps-header $login $host "DVI File"
  /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args

Beachten Sie, dass der Filter die Liste der Argumente überprüft, um den Benutzer- und den Rechnernamen zu ermitteln. Dieser Vorgang ist prinzipiell für alle Filter identisch. Der Textfilter benötigt allerdings etwas andere Argumente, die im Abschnitt Die Funktionsweise von Filtern beschrieben werden.

Wie bereits erwähnt, deaktiviert diese Methode leider die “suppress header page”-Option (also die Option -h) von lpr. Benutzer können danach den Ausdruck eines Deckblattes nicht mehr verhindern, da der angepasste Filter zu jedem Druckauftrag automatisch ein Deckblatt erstellt.

Damit ein Benutzer bei Bedarf den Ausdruck eines Deckblatts dennoch unterbinden kann, müssen Sie auch hier den im Abschnitt Deckblätter verrechnen beschriebenen Trick einsetzen: Schreiben Sie einen Ausgabefilter, der das von LPD erzeugte Deckblatt untersucht und daraus eine PostScript-Version erzeugt. Wenn der Benutzer den Druckauftrag mit lpr -h verschickt, erzeugt LPD kein Deckblatt, was in weiterer Folge auch für Ihren Ausgabefilter gilt. Soll hingegen ein Deckblatt erzeugt werden, liest der Ausgabefilter den von LPD übergebenen Text und erzeugt daraus ein für Ihren PostScript-Drucker geeignetes Deckblatt.

Haben Sie Ihren PostScript-Drucker über eine serielle Verbindung angeschlossen, können Sie auch lprps verwenden. In diesem Paket ist mit psof auch ein Ausgabefilter enthalten, der die eben beschriebenen Funktionen übernehmen kann. Beachten Sie aber, dass Sie mit psof keine Deckblätter verrechnen können.


10.4.3. Drucken über ein Netzwerk

FreeBSD unterstützt das Drucken über ein Netzwerk, also den Versand von Druckaufträgen an einen entfernten Drucker. Man unterscheidet dabei zwei Möglichkeiten:

  • Den Zugriff auf einen an einem entfernten Rechner angeschlossenen Drucker. Sie konfigurieren dabei auf Ihrem System einen Drucker, der über eine konventionelle serielle oder parallele Verbindung an einem anderen Rechner angeschlossen ist. Danach richten Sie LPD auf dem entfernten System so ein, dass andere Drucker über das Netzwerk auf diesen Drucker zugreifen können. Der Abschnitt Auf entfernten Rechnern installierte Drucker beschreibt, wie Sie dazu vorgehen müssen.

  • Den Zugriff auf einen direkt an ein Netzwerk angeschlossenen Drucker. Ein solcher Drucker verfügt anstelle (oder zusätzlich zu) einer parallelen oder seriellen Schnittstelle über eine Netzwerkschnittstelle. Ein solcher Drucker kann sich auf zwei Arten verhalten:

    • Er kann das LPD-Protokoll direkt unterstützen und sogar Druckjobs von entfernten Rechner verwalten. In diesem Fall verhält sich der Drucker wie ein normaler Rechner, auf dem LPD läuft. Lesen Sie den Abschnitt Auf entfernten Rechnern installierte Drucker, um einen solchen Drucker einzurichten.

    • Er könnte Verbindungen über ein Netzwerk unterstützen. In diesem Fall “verbinden” Sie den Drucker mit einem Rechner Ihres Netzwerks, der danach für die Verwaltung von Druckaufträgen sowie den tatsächlichen Druck verantwortlich ist. Der Abschnitt Drucker mit direkter TCP-Schnittstelle enthält Hinweise zur Installation derartiger Drucker.


10.4.3.1. Auf entfernten Rechnern installierte Drucker

Das LPD-Drucksystem unterstützt den Versand von Druckaufträgen an andere Rechner, auf denen entweder LPD läuft oder die zu LPD kompatibel sind. Dadurch können Sie einen Drucker auf einem Rechner installieren und von anderen Rechnern des Netzwerks darauf zugreifen. Außerdem werden Drucker mit direkter TCP-Schnittstelle unterstützt, wenn diese das LPD-Protokoll unterstützen.

Um diese Art des Druckens über ein Netzwerk zu aktivieren, installieren Sie zuerst Ihren Drucker auf einem Rechner Ihres Netzwerks, dem sogenannten printer host. Die dazu nötigen Schritte werden im Abschnitt Einfache Drucker-Konfiguration beschrieben. Falls Sie eine erweiterte Druckerkonfiguration benötigen, sollten Sie auch den Abschnitt Erweiterte Drucker-Konfiguration lesen. Danach testen Sie, ob der Drucker alle von Ihnen aktivierten LPD-Fähigkeiten unterstützt. Stellen Sie auch sicher, dass Ihr lokales System berechtigt ist, den LPD-Dienst auf dem entfernten System zu nutzen (lesen Sie dazu den Abschnitt Druckaufträge auf entfernten Druckern beschränken).

Wenn Sie einen Drucker mit einer zu LPD kompatiblen Netzwerkschnittstelle verwenden, handelt es sich beim printer host um den Drucker selbst, und der Druckername ist der von Ihnen für diesen Drucker vorgegebene Name. Lesen Sie die Dokumentation Ihres Druckers und/oder der Netzwerkschnittstelle Ihres Druckers, um dies zu klären.

Tipp: Wenn Sie einen Hewlett Packard Laserjet-Drucker verwenden, sorgt der Druckername text für eine automatische LF-zu-CRLF-Konvertierung. In diesem Fall wird das hpif-Skript nicht benötigt.

Danach müssen Sie auf jedem Rechner, der auf diesen Drucker zugreifen soll, einen entsprechenden Eintrag in deren /etc/printcap aufnehmen. Dazu werden folgende Informationen benötigt:

  1. Der Name des Eintrags. Entspricht in der Regel dem Eintrag auf dem printer host.

  2. Lassen Sie den Eintrag für die lp-Fähigkeit leer, schreiben Sie also :lp=:.

  3. Erzeugen Sie ein Spooling-Verzeichnis und geben Sie dessen Pfad über die sd-Fähigkeit an. LPD speichert Ihre Druckaufträge in diesem Verzeichnis, bevor sie an den Drucker geschickt werden.

  4. Geben Sie den Namen des printer hosts über die rm-Fähigkeit an.

  5. Geben Sie den Namen des Druckers (auf dem printer host) über die rp-Fähigkeit an.

Das ist alles. Sie benötigen weder Konvertierungsfilter, noch Seitengrößen oder sonstige Angaben in Ihrer lokalen /etc/printcap.

Dazu ein Beispiel. Der Rechner rose verfügt über zwei Drucker, bamboo und rattan. Wir wollen nun allen Benutzern des Rechners orchid erlauben, diese Drucker zu verwenden. Es folgt nun wieder die bereits aus dem Abschnitt Deckblätter verwenden bekannte /etc/printcap für den Rechner orchid. Diese enthielt bereits einen Eintrag für den Drucker teak. Zusätzlich tragen wir nun die zwei Drucker des Rechners rose ein:

#
#  /etc/printcap für den Rechner orchid - mit zusätzlichen
#  Einträgen für die (entfernten) Drucker auf dem Rechner rose
#

#
#  teak ist ein lokaler Drucker und direkt mit orchid verbunden:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

#
#  rattan ist mit rose verbunden, Druckaufträge für rattan gehen daher
#  an den Rechner rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

#
#  bamboo ist ebenfalls mit rose verbunden:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:

Nun müssen wir nur noch die Spooling-Verzeichnisse auf dem Rechner orchid erzeugen:

# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo

Damit können Benutzer des Rechners orchid die Drucker rattan und bamboo verwenden. Ein Benutzer gibt auf orchid beispielsweise ein:

% lpr -P bamboo -d sushi-review.dvi

Die Anwendung LPD auf dem Rechner orchid kopiert daraufhin den Druckauftrag in das Spooling-Verzeichnis /var/spool/lpd/bamboo und stellt fest, dass es sich um einen DVI-Auftrag handelt. Sobald rose über genug freien Platz im bamboo-Spooling-Verzeichnis verfügt, würden die beiden LPD die Datei auf den Rechner rose transferieren. Diese Datei verbleibt danach in der Druckerwarteschlange des Rechners rose, bis der Ausdruck der Datei abgeschlossen ist. Vor dem Ausdruck würde die Datei noch von DVI nach PostScript konvertiert werden, da es sich bei bamboo um einen an den Rechner rose angeschlossenen PostScript-Drucker handelt.


10.4.3.2. Drucker mit direkter TCP-Schnittstelle

Wenn Sie eine Netzwerkkarte für Ihren Drucker kaufen, können Sie zwei verschiedene Versionen wählen: Eine Version, die ein Drucksystem emuliert (die teure Version), oder eine Version, die sich verhält, als wäre der Drucker an eine serielle oder parallele Schnittstelle angeschlossen (die billige Version). Dieser Abschnitt beschreibt die billige Variante. Bevorzugen Sie die teure Variante, sollten Sie den Abschnitt Auf entfernten Rechnern installierte Drucker nochmals lesen.

Das Format der Datei /etc/printcap erlaubt es Ihnen, anzugeben, welche serielle oder parallele Schnittstelle verwendet werden soll und (falls Sie eine serielle Schnittstelle verwenden) welche Parameter (Baudrate, Flußkontrolle, Behandlung von Tabulatoren, Konvertierung von neuen Zeilen und andere mehr) Sie verwenden wollen. Es gibt allerdings keine Möglichkeit, eine Verbindung zu einem Drucker zu definieren, der einen TCP/IP- oder einem anderem Netzwerkport auf Druckaufträge hin abfragt.

Um Daten an einen Netzwerkdrucker zu schicken, müssen Sie daher ein Kommunikationsprogramm entwickeln, das von Text- und Konvertierungsfiltern aufgerufen werden kann. Dazu ein Beispiel. Das Skript netprint übernimmt alle Daten von der Standardeingabe und schickt sie an einen Netzwerkdrucker. netprint erwartet zwei Argumente: Als erstes Argument wird der Hostname des Druckers und als zweites Argument der Port, über den die Verbindung erfolgen soll, übergeben. Dabei handelt sich allerdings um eine Ein-Wege-Kommunikation (von FreeBSD zum Drucker). Viele Netzwerkdrucker unterstützen aber auch eine Zwei-Wege-Kommunikation, deren Vorteile (Abfrage des Druckerstatus, die Verrechnung von Druckaufträgen und andere mehr) Sie vielleicht nutzen wollen.

#!/usr/bin/perl
#
#  netprint - Textfilter für einen Netzwerkdrucker
#  Installiert unter:  /usr/local/libexec/netprint
#
$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

$printer_host = $ARGV[0];
$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
    = gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);

socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
    || die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;

Dieses Skript kann für verschiedene Filter eingesetzt werden. Das folgende Beispiel verwendet den an ein Netzwerk angeschlossenen Zeilendrucker Diablo 750-N. Dieser Drucker empfängt zu druckende Daten auf dem Port 5100. Der Hostname des Druckers lautet scrivener. Daher sieht der Textfilter für diesen Drucker wie folgt aus:

#!/bin/sh
#
#  diablo-if-net - Textfilter für den Diablo-Drucker `scrivener'.
#  Drucker lauscht auf Port 5100.
#  Installiert unter:  /usr/local/libexec/diablo-if-net
#
exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100

10.4.4. Den Druckerzugriff beschränken

Dieser Abschnitt beschreibt, wie Sie den Druckerzugriff beschränken können. Das LPD-Drucksystem erlaubt Ihnen die Kontrolle darüber, wer lokal oder über ein Netzwerk auf einen Drucker zugreifen darf, ob mehrere Kopien erstellt werden dürfen und wie groß Druckaufträge und Druckerwarteschlangen werden dürfen.


10.4.4.1. Den Ausdruck von mehreren Kopien verhindern

Das LPD-System macht es dem einzelnen Benutzer einfach, mehrere Kopien einer Datei zu drucken. So werden mit lpr -#5 beispielsweise fünf Kopien jeder Datei des Druckauftrags erstellt. Ob dies gut oder schlecht ist, müssen Sie selbst entscheiden.

Wenn Sie der Meinung sind, dass multiple Kopien eine unnötige Beanspruchung Ihres Druckers darstellen, sollten Sie die -#-Opion von lpr(1) deaktivieren, indem Sie die sc-Fähigkeit in Ihre /etc/printcap aufnehmen. Verwendet ein Benutzer dennoch die Option -#, erhält er daraufhin folgende Meldung:

lpr: multiple copies are not allowed

Wenn Sie den Zugriff auf einen entfernten Drucker (wie in Abschnitt Auf entfernten Rechnern installierte Drucker beschrieben) konfiguriert haben, müssen Sie die sc-Fähigkeit auch auf den entfernten Rechnern, die auf Ihren Drucker zugreifen dürfen, in /etc/printcap eintragen, damit Benutzer diese Vorgabe nicht durch den Wechsel auf einen anderen Rechner umgehen können.

Dazu ein Beispiel. Es handelt sich dabei um die Datei /etc/printcap auf dem Rechner rose. Der Drucker rattan soll multiple Kopien zulassen, auf dem Laserdrucker bamboo sollen multiple Kopien hingegen nicht erlaubt sein, daher müssen wir für diesen Drucker die sc-Fähigkeit aktivieren:

#
#  /etc/printcap für den Rechner rose - multiple Kopien auf bamboo verbieten
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

Außerdem müssen wir noch die sc-Fähigkeit in der Datei /etc/printcap des Rechners orchid aktivieren. Parallel dazu untersagen wir das Erstellen von multiplen Kopien auf dem Drucker teak:

#
#  /etc/printcap für den Rechner orchid - lokal machen wir keine multiplen Kopien
#  Lokaler Drucker teak oder entfernter Drucker bamboo:
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:

Durch die Verwendung der sc-Fähigkeit ist zwar die Verwendung von lpr -# nicht mehr möglich, ein Benutzer kann aber weiterhin lpr(1) mehrmals hintereinander aufrufen oder eine Datei mehrfach in den gleichen Druckauftrag aufnehmen:

% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign

Auch dieser Mißbrauch Ihres Druckers kann verhindert werden, falls Sie dies wünschen. Diese Maßnahmen werden in diesem Abschnitt allerdings nicht behandelt.


10.4.4.2. Den Zugriff auf bestimmte Drucker beschränken

Sie können angeben, wer auf welchem Drucker drucken darf, wenn Sie den Gruppenmechanismus von UNIX in Kombination mit der rg-Fähigkeit von /etc/printcap einsetzen. Weisen Sie dazu alle Benutzer, die auf einen Drucker zugreifen dürfen, einer gemeinsamen Gruppe zu und geben Sie diese Gruppe über die rg-Fähigkeit an.

Wenn Benutzer, die dieser Gruppe nicht angehören (dies gilt auch für root), werden diese durch die Meldung begrüsst, wenn Sie diesen Drucker verwenden wollen.

lpr: Not a member of the restricted group

Analog zur sc-Fähigkeit (suppress multiple copies) müssen Sie die rg-Fähigkeit auch auf allen entfernten Rechnern aktivieren, die auf Ihren Drucker zugreifen dürfen (lesen Sie dazu auch den Abschnitt Auf entfernten Rechnern installierte Drucker).

Wollen wir beispielsweise allen Benutzern die Verwendung des Druckers rattan, aber nur Mitgliedern der Gruppe artists die Verwendung des Druckers bamboo erlauben, passen wir die bereits bekannte /etc/printcap des Rechners rose entsprechend an:

#
#  /etc/printcap des Rechners rose - Zugriffsbeschränkung für bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

Die Datei /etc/printcap des Rechners orchid wird dadurch nicht beeinflusst. Jeder Benutzer des Rechners orchid kann also weiterhin den Drucker bamboo verwenden.

Anmerkung: Für jeden Drucker kann nur eine einzige priviligierte Gruppe erstellt werden.


10.4.4.3. Die Größe von Druckaufträgen kontrollieren

Wenn Sie viele Benutzer haben, die Ihre Drucker verwenden dürfen, werden Sie wahrscheinlich eine Obergrenze für Dateien angeben wollen, die Benutzer an Ihren Drucker senden dürfen. Dies ist sinnvoll, weil Speicherplatz für Spooling-Verzeichnisse nur begrenzt verfügbar ist und Sie stets sicherstellen müssen, dass auch die Druckaufträge anderer Benutzer verarbeitet werden können.

LPD verwendet die mx-Fähigkeit, um die maximal erlaubte Größe von Dateien eines Druckauftrags anzugeben. Dieser Wert wird in 1.024 Bytes großen BUFSIZ-Blöcken angegeben. Setzen Sie diesen Wert auf Null, gibt es keine Größenbeschränkung. Existiert die mx-Fähigkeit hingegen überhaupt nicht, so gilt ein Limit von 1.000 Blöcken.

Anmerkung: Diese Limits gelten nur für die Größe von Dateien innerhalb eines Druckauftrages, nicht aber für die Gesamtgröße des Druckauftrags.

LPD lehnt eine Datei auch dann nicht ab, wenn sie das Limit des Druckers überschreitet. Vielmehr wird die Datei bis zum Erreichen des Limits in die Warteschlange geladen, danach wird der Druck gestartet. Der das Limit überschreitende Rest wird hingegen verworfen und nicht gedruckt!

Mit diesem Wissen können wir nun Limits für die Drucker rattan und bamboo definieren. Da PostScript-Dateien der Gruppe artists in der Regel sehr groß sind, setzen wir ein Limit von fünf Megabytes. Für den Druck von normalen Text (auf dem Drucker rattan) setzen wir hingegen kein Limit:

#
#  /etc/printcap für den Rechner rose
#

#
#  Kein Größenlimit:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:mx#0:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

#
#  Ein Limit von 5 Megabyte:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

Auch diese Limits gelten nur für lokale Benutzer. Wenn Sie den Zugriff auf Ihren Drucker auch über ein Netzwerk erlauben wollen, unterliegen die Benutzer dieser Rechner diesen Limits nicht. Daher müssen Sie diese Limits über die mx-Fähigkeit auch in der /etc/printcap jedes Rechners definieren, der Ihren Drucker verwenden darf. Der Abschnitt Auf entfernten Rechnern installierte Drucker enthält weitere Informationen zum Drucken über ein Netzwerk.

Es gibt eine weitere Möglichkeit, um die Größe von Druckaufträgen von entfernten Rechnern zu beschränken. Lesen Sie dazu den Abschnitt Druckaufträge von entfernten Rechnern beschränken.


10.4.4.4. Druckaufträge von entfernten Rechnern beschränken

Das LPD-System bietet mehrere Möglichkeiten, um Druckaufträge zu beschränken, die auf entfernten Rechnern gestartet wurden:

Rechner beschränken

Sie können festlegen, von welchen entfernten Rechnern ein lokaler LPD Druckaufträge annimmt, indem Sie die Dateien /etc/hosts.equiv sowie /etc/hosts.lpd entsprechend anpassen. LPD überprüft diese Dateien, um festzustellen, ob ein Druckauftrag von einem Rechner stammt, der in einer dieser Dateien aufgeführt ist. Ist dies nicht der Fall, lehnt LPD den Druckauftrag ab.

Der Aufbau dieser Datei ist sehr einfach: Jede Zeile enthält einen einzigen Rechnernamen. Beachten Sie aber, dass /etc/hosts.equiv auch vom ruserok(3)-Protokoll benötigt wird und Änderungen dieser Datei auch Programme wie rsh(1) und rcp(1) beeinflussen können.

Das folgende Beispiel beschreibt die Datei /etc/hosts.lpd auf dem Rechner rose:

orchid
violet
madrigal.fishbaum.de

Durch diese Vorgaben akzeptiert rose nur noch Druckaufträge von den Rechnern orchid, violet, und madrigal.fishbaum.de. Versucht ein anderer Rechner, auf den LPD von rose zuzugreifen, wird dieser Druckauftrag abgelehnt werden.

Größenbeschränkungen

Sie können festlegen, wieviel Speicherplatz auf dem Dateisystem, in dem das Spooling-Verzeichnis liegt, mindestens frei sein muss. Dazu erzeugen Sie im Spooling-Verzeichnis Ihres lokalen Druckers die Datei minfree. In dieser Datei geben Sie an, wieviele 512 Byte große Blöcke auf Ihrer Platte frei sein müssen, damit ein Druckauftrag von einem entfernten Rechner akzeptiert wird.

Durch diese Vorgabe können Sie sicherstellen, dass Benutzer von entfernten Rechnern Ihr Dateisystem nicht “zumüllen”. Außerdem können Sie damit lokale Benutzer bevorzugen, da diese auch dann noch Druckaufträge erteilen dürfen, wenn der verfügbare Plattenplatz unter das in der Datei minfree definierte Limit gefallen ist.

Legen wir nun die Datei minfree für den Drucker bamboo an. Zuerst untersuchen wir /etc/printcap, um das Spooling-Verzeichnis für diesen Drucker zu finden. Das folgende Beispiel zeigt den Eintrag für den Drucker bamboo:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

Das Spooling-Verzeichnis wird über die sd-Fähigkeit festgelegt. Wir wollen, dass mindestens drei Megabyte (also 6144 Blöcke) freier Plattenplatz vorhanden sein müssen, damit LPD einen Druckauftrag von einem entfernten Rechner akzeptiert:

# echo 6144 > /var/spool/lpd/bamboo/minfree
Benutzer beschränken

Sie können auch festlegen, welche entfernten Benutzer Ihren lokalen Drucker verwenden dürfen, indem Sie die rs-Fähigkeit in /etc/printcap definieren. Wenn für den Eintrag eines lokalen Druckers die rs-Fähigkeit definiert ist, akzeptiert LPD Druckaufträge von entfernten Rechnern nur dann, wenn der Benutzer, der den Druckauftrag gesendet hat, auch über ein gleichnamiges Benutzerkonto auf dem lokalen Rechner verfügt. Ist dies nicht der Fall, lehnt LPD den Druckauftrag ab.

Diese Fähigkeit ist besonders in Umgebungen nützlich, in denen beispielsweise verschiedene Abteilungen ein gemeinsames Netzwerk teilen, wobei einige Benutzer zu mehreren Abteilungen gehören. Haben diese Benutzer auch ein Benutzerkonto auf Ihrem System, so können sie Ihren Drucker auch von ihrer eigenen Abteilung aus nutzen. Wollen Sie zwar den Zugriff auf Ihren Drucker, nicht aber den Zugriff auf Ihre übrigen Ressourcen erlauben, können Sie für diese Benutzer einen sogenannten “Token-Account” ohne Heimatverzeichnis und mit einer nutzlosen Shell wie /usr/bin/false erstellen.


10.4.5. Die Druckernutzung verrechnen

Sie wollen die Nutzung Ihrer Drucker kostenpflichtig machen? Warum auch nicht? Papier und Tinte kosten Geld. Auch eine regelmäßige Wartung muss bezahlt werden. Nachdem Sie einen Preis festgelegt haben, den Sie für jede gedruckte Seite verrechnen wollen, stellt sich die Frage, wie Sie die Verrechnung der Druckkosten technisch umsetzen können.

Die schlechte Nachricht ist, dass das LPD-System dabei wenig hilfreich ist. Die Verrechnung von Druckaufträgen hängt stark vom verwendeten Drucker, den zu druckenden Dateiformaten und Ihren Anforderungen an die Verrechnung der Druckernutzung ab.

Um die Verrechnung der Druckernutzung zu implementieren, müssen Sie sowohl Ihre Textfilter (um den Druck von normalem Text abzurechnen) als auch Ihre Konvertierungsfilter (um den Druck sonstiger Formate abzurechnen) entsprechend anpassen, damit diese die Zahl der gedruckten Seiten ermitteln können. Leider können Sie dazu nicht einen einfachen Ausgabefilter verwenden, da diese die Verrechnung von Druckaufträgen nicht unterstützen. Weitere Informationen zu den verschiedenen Filterarten finden Sie im Abschnitt Filter.

Prinzipiell gibt es zwei Möglichkeiten, wie Sie diese Verrechnung umsetzen können:

  • Die periodische Verrechnung wird häufiger verwendet, da sie einfacher zu implementieren ist. Wenn ein Druckauftrag ausgeführt wird, schreibt der Filter den Benutzer, den verwendeten Rechner sowie die Anzahl der gedruckten Seiten in eine Verrechnungsdatei. Nach einem zu definierenden Zeitraum werden diese Dateien ausgewertet, die Gesamtzahl der von einem Benutzer gedruckten Seiten bestimmt und dem jeweiligen Benutzer verrechnet. Danach werden alle Protokolldateien zurückgesetzt, und die Protokollierung beginnt von Neuem.

  • Die unmittelbare Verrechnung wird nur selten eingesetzt, das sie schwieriger zu implementieren ist. Bei dieser Methode wird der Druckauftrag verrechnet, sobald der Drucker verwendet wird. Dadurch können Sie beispielsweise verhindern, dass ein Benutzer seine erlaubte “Druckquote” überschreitet. Zusätzlich können Sie es Ihren Benutzern erlauben, deren Druckquote abzufragen oder anzupassen. Allerdings benötigen Sie eine Datenbank, um Benutzer und deren Quoten verwalten zu können.

Das LPD-Drucksystem unterstützt beide Methoden. Allerdings müssen Sie die benötigen Filter sowie den zur Verrechnung nötigen Code selbst bereitstellen. Der Vorteil dabei ist allerdings, dass Sie in der Wahl Ihrer Verrechnungsmethode äußerst flexibel sind. So können Sie sich etwa für die periodische oder die unmittelbare Verrechnung entscheiden. Sie können festlegen, welche Informationen Sie erfassen wollen: Benutzernamen, Rechnernamen, die Art der Druckaufträge, die Anzahl der gedruckten Seiten, den Papierverbrauch, den Zeitaufwand für die Bearbeitung eines Druckauftrages und viele andere mehr. Dazu müssen Sie Ihre Filter entsprechend anpassen, damit diese Informationen erfassst und gespeichert werden.


10.4.5.1. Kurzanleitung für die Implementierung der Druckerverrechnung

FreeBSD bietet Ihnen zwei Programme, um eine periodische Verrechnung rasch zu implementieren. Dabei handelt es sich um den im Abschnitt lpf: Ein Textfilter behandelten Textfilter sowie um pac(8), ein Programm, mit dem Sie Einträge aus Verrechnungsdateien auslesen und aufsummieren können.

Wie bereits im Abschnitt Filter erwähnt, startet LPD den Text- oder Konvertierungsfilter mit dem Namen der Verrechnungsdatei als Argument. Dadurch weiß der Filter, in welche Datei er einen Verrechnungseintrag schreiben soll. Der Name dieser Datei wird über die af-Fähigkeit in /etc/printcap festgelegt. Falls die Datei nicht über einen absoluten Pfad angegeben wird, handelt es sich um einen Pfad relativ zum Spooling-Verzeichnis.

LPD startet lpf mit den Argumenten page width und page length, die über die pw- und pl-Fähigkeit definiert werden. Das Kommando lpf verwendet diese Argumente danach, um den Papierverbrauch zu bestimmen. Nachdem die Datei an den Drucker geschickt wurde, wird ein Verrechnungseintrag in die Verrechnungsdatei geschrieben. Ein solcher Eintrag sieht dabei ähnlich den folgenden aus:

2.00 rose:andy
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang

Sie sollten für jeden Drucker eine eigene Verrechnungsdatei verwenden, da lpf die Verrechnungsdatei nicht sperren kann. Sind also gleichzeitig zwei lpf-Instanzen aktiv, kann es dazu kommen, dass Ihre Verrechnungsdatei zerstört wird, wenn beide Instanzen gleichzeitig in die gleiche Datei schreiben. Damit für jeden Drucker eine eigene Verrechnungsdatei angelegt wird, fügen Sie den Eintrag af=acct in /etc/printcap ein. Dadurch wird für jeden Drucker eine separate Verrechnungsdatei mit dem Namen acct im Spooling-Verzeichnis des jeweiligen Druckers erzeugt.

Wenn Sie Ihre Daten erfasst haben und die entstandenen Kosten Ihren Benutzern verrechnen wollen, starten Sie pac(8). Dazu wechseln Sie in das Spooling-Verzeichnis des auszuwertenden Druckers und geben pac ein. Dadurch erhalten Sie eine Ausgabe ähnlich der folgenden:

  Login               pages/feet   runs    price
orchid:kelly                5.00    1   $  0.10
orchid:mary                31.00    3   $  0.62
orchid:zhang                9.00    1   $  0.18
rose:andy                   2.00    1   $  0.04
rose:kelly                177.00  104   $  3.54
rose:mary                  87.00   32   $  1.74
rose:root                  26.00   12   $  0.52

total                     337.00  154   $  6.74

Folgende Argumente können an pac(8) übergeben werden:

-PDrucker

Gibt an, welcher Drucker ausgewertet werden soll. Diese Option setzt voraus, dass für die af-Fähigkeit in /etc/printcap ein absoluter Pfad angegeben wurde.

-c

Sortiert die Ausgabe nach den verursachten Kosten anstelle einer alphabetischen Sortierung der Benutzernamen.

-m

Ignoriert den Rechnernamen in Verrechnungsdateien. Ist diese Option gesetzt, ist der Benutzer smith auf dem Rechner alpha mit dem Benutzer smith auf dem Rechner gamma identisch. Ist diese Option nicht gesetzt, handelt es sich um unterschiedliche Benutzer.

-pPreis

Berechnet die entstandenen Kosten aus dem Preis in Dollar pro Seite statt aus dem über die pc-Fähigkeit in /etc/printcap definierten Preis. In der Voreinstellung sind dies zwei Cent pro Seite. Sie können aber auch einen eigenen Preis in Form einer Gleitkommazahl angeben.

-r

Die Sortierreihenfolge umkehren.

-s

Die Verrechnungsdatei in einer neuen Datei aufsummieren und die originale Verrechnungsdatei zurücksetzen.

name ...

Verrechnungsinformationen nur für die angegebenen Benutzernamen ausgeben.

In der Voreinstellung gibt pac(8) aus, wieviele Seiten von welchem Benutzer auf welchem Rechner gedruckt wurden. Wenn Rechnernamen für Sie uninteressant sind (weil sich Benutzer beispielsweise auf jedem Rechner anmelden können), sollten Sie pac -m verwenden, um die folgende Ausgabe zu erhalten:

  Login               pages/feet   runs    price
andy                        2.00    1   $  0.04
kelly                     182.00  105   $  3.64
mary                      118.00   35   $  2.36
root                       26.00   12   $  0.52
zhang                       9.00    1   $  0.18

total                     337.00  154   $  6.74

Um den zu verrechnenden Betrag zu ermitteln, verwendet pac(8) die pc-Fähigkeit von /etc/printcap (Voreinstellung 200, dieser Wert entspricht 2 Cents). Geben Sie hier (als Hundertfaches des tatsächlichen Wertes) den Preis pro Seite an, den Sie verrechnen wollen. Sie können diesen Wert überschreiben, wenn Sie pac(8) mit der Option -p ausführen. Beachten Sie dabei aber, dass Sie in diesem Fall die Einheiten in Dollar angeben, und nicht als Hundertfaches des tatsächlichen Cent-Betrages. So steht

# pac -p1.50

beispielsweise für einen Preis von einem Dollar und fünfzig Cent pro Seite.

Der Aufruf von pac -s führt schließlich dazu, dass die aufsummierten Informationen in einer eigenen Auswertedatei gespeichert werden. Diese hat den gleichen Namen wie die Verrechnungsdatei, es wird lediglich ein _sum an den Dateinamen angehängt. Danach wird die Verrechnungsdatei zurückgesetzt. Wenn Sie pac(8) erneut aufrufen, wird die Auswertedatei eingelesen, um die Startbeträge zu erhalten, alle weiteren Informationen stammen danach aus der normalen Verrechnungsdatei.


10.4.5.2. Wie kann man die Anzahl der gedruckten Seiten ermitteln?

Um die Druckernutzung auch nur annähernd genau verrechnen zu können, müssen Sie ermitteln, wieviel Papier ein Druckauftrag verbraucht. Die Bestimmung dieses Wertes ist das zentrale Problem, das Sie lösen müssen, wenn Sie Druckaufträge kostenpflichtig machen wollen.

Normaler Text stellt in der Regel kein Problem dar: Sie zählen dazu nur die Zeilen des Druckauftrages und dividieren diesen Wert durch die Anzahl der Zeilen pro Seite, die Ihr Drucker bietet. Allerdings dürfen Sie dabei nicht vergessen, dass gelöschte Zeichen (Backspaces) Zeilen überschreiben. Außerdem können sich lange logische Zeilen (im Druckauftrag) über mehrere physikalische Zeilen (am Ausdruck) erstrecken.

Der im Abschnitt lpf: Ein Textfilter vorgestellte Textfilter lpf berücksichtigt diese Besonderheiten. Wenn Sie einen eigenen Textfilter für die Verrechnung der Druckernutzung schreiben wollen, sollten Sie sich daher den Quellcode von lpf näher ansehen.

Aber was ist mit anderen Dateiformaten?

Für die DVI-nach-LaserJet- oder für die DVI-nach-PostScript-Konvertierung können Sie die Protokolldateien von dvilj oder dvips auslesen, um festzustellen, wieviele Seiten konvertiert wurden. Die gleiche Methode könnte auch mit anderen Dateitypen funktionieren.

Alle diese Methoden haben aber das Problem, dass ein Drucker möglicherweise nicht alle Seiten des Druckauftrages drucken kann. So könnte es etwa zu einem Papierstau kommen, der Toner könnte zu Ende gehen oder es könnte ein Druckerdefekt auftreten - trotzdem würden alle Seiten des Druckauftrages verrechnet werden.

Was kann man dagegen tun?

Es gibt nur eine einzige sichere Methode, um die Druckernutzung exakt zu bestimmen. Besorgen Sie sich einen Drucker, der das verbrauchte Papier protokolliert und verbinden Sie ihn über eine serielle oder eine Netzwerkverbindung. Nahezu alle PostScript-Drucker, aber auch viele andere Modelle und Druckertypen (beispielsweise Laserdrucker von Imagen) sind dazu in der Lage. Passen Sie die Filter für diese Drucker entsprechend an, damit diese nach jedem Druckauftrag die Anzahl der gedruckten Seiten ermitteln und verrechnen Sie Druckaufträge ausschließlich über diesen Wert. Danach müssen Sie sich um die Anzahl der gedruckten Zeilen oder um mögliche Druckerprobleme nie mehr kümmern.

Sie können aber auch großzügig sein und alle Ausdrucke kostenlos abgeben.


10.5. Drucker verwenden

Übersetzt von Johann Kois.

Dieser Abschnitt beschreibt, wie Sie einen unter FreeBSD konfigurierten Drucker verwenden können. Die folgende Liste bietet einen Überblick über wichtige Anwenderbefehle:

lpr(1)

Einen Druckauftrag drucken

lpq(1)

Eine Druckerwarteschlange prüfen

lprm(1)

Einen Druckauftrag aus einer Warteschlange entfernen (stornieren)

Zusätzlich existiert mit lpc(8) ein Befehl zur zur Steuerung von Druckern und Druckerwarteschlangen, der im Abschnitt Drucker verwalten näher beschrieben wird.

Jeder der drei Befehle lpr(1), lprm(1), sowie lpq(1) akzeptiert die Option -P printer-name, mit der Sie den zu verwendenden Drucker (der dazu in /etc/printcap definiert sein muss) festlegen. Dadurch sind Sie in der Lage, Druckaufträge zu erstellen, zu stornieren, oder den Status Ihrer Druckaufträge zu überprüfen. Verwenden Sie die Option -P nicht, wird der in der Umgebungsvariable PRINTER definierte Drucker verwendet. Existiert diese Variable nicht, greifen diese Befehle auf den Drucker lp zurück.

Im Folgenden steht der Begriff Standarddrucker daher für den über die Umgebungsvariable PRINTER definierten Drucker, oder, falls diese Variable nicht existiert, für den Drucker lp.


10.5.1. Druckaufträge erstellen

Um eine Datei zu drucken, geben Sie folgenden Befehl ein:

% lpr filename ...

Dadurch wird jede angegebene Datei an den Standarddrucker geschickt. Wenn Sie keine Datei angeben, liest lpr(1) die zu druckenden Daten von der Standardeingabe. Um beispielsweise einige wichtige Systemdateien zu drucken, geben Sie folgenden Befehl ein:

% lpr /etc/host.conf /etc/hosts.equiv

Um einen bestimmten Drucker auszuwählen, verwenden Sie:

% lpr -P printer-name filename ...

Das folgende Beispiel gibt eine ausführliche Liste aller im Arbeitsverzeichnis enthaltenen Dateien auf den Drucker rattan aus:

% ls -l | lpr -P rattan

Da keine Dateien an lpr(1) übergeben werden, liest lpr die zu druckenden Daten von der Standardeingabe, in unserem Fall also die Ausgabe des Befehls ls -l.

lpr(1) akzeptiert auch verschiedene Optionen zur Formatierung und Konvertierung von Dateien, zur Erzeugung von multiplen Ausdrucken und so weiter. Lesen Sie dazu den Abschnitt Druckoptionen.


10.5.2. Druckaufträge verwalten

Wenn Sie lpr(1) verwenden, werden alle zu druckenden Daten in ein Paket, den sogenannten “Druckauftrag”, gepackt und an LPD geschickt. Jeder Drucker verfügt über eine Druckerwarteschlange, in der Ihre Druckaufträge gemeinsam mit denen anderer Benutzer verbleiben, bis sie gedruckt werden können. Zuerst eintreffende Druckaufträge werden dabei auch zuerst gedruckt.

Um die Druckerwarteschlange des Standarddruckers anzuzeigen, verwenden Sie lpq(1). Wollen Sie einen anderen Drucker abfragen, müssen Sie die Option -P verwenden. Der Befehl

% lpq -P bamboo
zeigt so die Druckerwarteschlange des Druckers bamboo an. Dieser Befehl liefert eine Ausgabe ähnlich der folgenden:

bamboo is ready and printing
Rank   Owner    Job  Files                              Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes

Derzeit enthält die Warteschlange von bamboo drei Druckaufträge. Dem ersten Auftrag, der vom Benutzer kelly erstellt wurde, wurde die “Auftragsnummer (job number)” 9 zugewiesen. Analog erhält jeder Druckerauftrag eine eindeutige Nummer zugewiesen. Diese Nummern sind nur dann von Bedeutung, wenn Sie einen Druckauftrag stornieren wollen. Der Abschnitt Druckaufträge stornieren beschreibt, wie Sie dazu vorgehen.

Der Auftrag mit der Nummer 9 besteht aus zwei Dateien, mehrere an lpr(1) übergebene Dateien werden also als Teil eines (gemeinsamen) Druckauftrags betrachtet. Dieser Druckauftrag ist derzeit aktiv (beachten Sie den Status active in der Spalte “Rank”), wird also gerade gedruckt. Der zweite Auftrag besteht aus Daten, die von der Standardeingabe an lpr(1) übergeben wurden. Der dritte Auftrag wurde vom Benutzer mary erstellt. Er ist sehr viel größer als die anderen Aufträge. Da der Pfad der zu druckenden Datei aufgrund seiner Länge nicht in der Spalte “Files” Platz hat, werden von lpq(1) nur drei Punkte angezeigt.

Die erste Zeile der Ausgabe von lpq(1) ist ebenfalls sehr nützlich: Sie beschreibt den momentanen Druckerstatus (oder zumindest, was LPD denkt, dass der Drucker gerade macht).

lpq(1) unterstützt auch die Option -l zur Erstellung einer ausführlicheren Ausgabe. Die Eingabe von lpq -l erzeugt für unser obiges Beispiel die folgende Ausgabe:

waiting for bamboo to become ready (offline ?)
kelly: 1st				 [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd				 [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes

10.5.3. Druckaufträge stornieren

Mit lprm(1) können Sie einen Druckauftrag stornieren. Häufig ist lprm(1) auch noch in der Lage, einen bereits aktiven Auftrag abzubrechen, allerdings wird dabei in der Regel trotzdem ein Teil des Auftrages oder der gesamte Auftrag gedruckt.

Um einen Druckauftrag auf dem Standarddrucker zu stornieren, müssen Sie zuerst die Auftragsnummer über lpq(1) ermitteln. Danach geben Sie Folgendes ein:

% lprm Job-Nummer

Um einen Druckauftrag eines anderen Druckers zu stornieren, benötigen Sie wiederum die Option -P. Der folgende Befehl entfernt den Druckauftrag mit der Nummer 10 aus der Warteschlange des Druckers bamboo:

% lprm -P bamboo 10

lprm(1) unterstützt verschiedene Kurzbefehle:

lprm -

Entfernt alle Druckaufträge (des Standarddruckers), die von Ihnen erstellt wurden.

lprm user

Entfernt alle Druckaufträge (des Standarddruckers), die vom Benutzer user erstellt wurden. Der Superuser kann im Gegensatz zu einem normalen Benutzer auch Aufträge anderer Benutzer entfernen.

lprm

Wenn Sie weder eine Auftragsnummer, einen Benutzernamen, noch die Option - angeben, entfernt lprm(1) den aktiven Druckauftrag auf dem Standarddrucker, falls dieser Auftrag von Ihnen erstellt wurde. Der Superuser kann hingegen jeden aktiven Druckauftrag abbrechen.

Verwenden Sie zusätzlich die Option -P zu den eben beschriebenen Kurzbefehlen, wenn Sie diese auf einen anderen Drucker als den Standarddrucker anwenden wollen. So entfernt der folgende Befehl beispielsweise alle Druckaufträge des aktuellen Benutzers aus der Druckerwarteschlange des Druckers rattan:

% lprm -P rattan -

Anmerkung: Wenn Sie in einer Netzwerkumgebung arbeiten, erlaubt es lprm(1) Ihnen nur, Druckaufträge auf dem Rechner zu stornieren, auf dem sie erstellt wurden. Dies gilt selbst dann, wenn der gleiche Drucker auch auf anderen Rechnern des Netzwerks verfügbar ist. Die folgende Befehlsfolge veranschaulicht diesen Umstand:

% lpr -P rattan myfile
% rlogin orchid
% lpq -P rattan
Rank   Owner	  Job  Files                          Total Size
active seeyan	  12	...                           49123 bytes
2nd    kelly      13   myfile                         12 bytes
% lprm -P rattan 13
rose: Permission denied
% logout
% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
	

10.5.4. Abseits von normalem Text: Druckoptionen

lpr(1) unterstützt verschiedene Optionen zur Formatierung von Text, zur Konvertierung von Grafik- und anderen Dateiformaten, zur Erzeugung von multiplen Kopien, zur Verwaltung von Druckaufträgen und andere mehr. Dieser Abschnitt beschreibt einige dieser Optionen.


10.5.4.1. Formatierungs- und Konvertierungsoptionen

Die folgenden lpr(1)-Optionen kontrollieren die Formatierung von in einem Druckauftrag enthaltenen Dateien. Verwenden Sie diese Optionen, wenn Ihr Druckauftrag keinen normalen Text enthält, oder wenn Sie normalen Text mit pr(1) formatieren wollen.

Der folgende Befehl druckt so beispielsweise eine DVI-Datei (des TeX-Satzsystems) namens fish-report.dvi auf dem Drucker bamboo:

% lpr -P bamboo -d fish-report.dvi

Diese Optionen gelten für jede Datei des Druckauftrags, daher ist es nicht möglich beispielsweise DVI- und ditroff-Dateien über den gleichen Druckauftrag zu drucken. Sie müssen diese Dateien vielmehr über getrennte Druckaufträge drucken, wobei Sie jeweils geeignete Konvertierungsoptionen verwenden.

Anmerkung: Alle Optionen mit Ausnahme von -p und -T setzen einen installierten und für den jeweiligen Drucker konfigurierten Konvertierungsfilter voraus. So benötigt die Option -d den DVI-Konvertierungsfilter. Diese Filter werden im Abschnitt Konvertierungsfilter ausführlich beschrieben.

-c

Druckt cifplot-Dateien.

-d

Druckt DVI-Dateien.

-f

Druckt FORTRAN-Textdateien.

-g

Druckt Plot-Daten.

-i anzahl

Rückt die Ausgabe um anzahl Spalten ein, lassen Sie anzahl weg, wird der Text um 8 Spalten eingerückt. Beachten Sie aber, dass diese Option nicht mit allen Konvertierungsfiltern funktioniert.

Anmerkung: Zwischen der Option -i und der der Zahl darf dabei kein Leerzeichen stehen.

-l

Druckt Text inklusive vorhandener Steuerzeichen.

-n

Druckt ditroff-Dateien (geräteunabhängiges troff).

-p

Formatiert normalen Text mit pr(1), bevor der Ausdruck erfolgt.

-T titel

Verwende titel auf dem pr(1)-Deckblatt anstelle des Dateinamens. Diese Option ist nur wirksam, wenn sie gemeinsam mit der Option -p verwendet.

-t

Druckt troff-Daten.

-v

Druckt Rasterdaten.

Dazu ein Beispiel. Der folgende Befehl druckt eine formatierte Version der Manualpage zu ls(1) auf den Standarddrucker:

% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t

zcat(1) dekomprimiert den Quellcode der Manualpage ls(1) und reicht ihn an troff(1) weiter, das ihn formatiert und daraus GNU troff-Daten erzeugt. Diese werden wiederum an lpr(1) weitergereicht, das den Druckauftrag schließlich an LPD übergibt. Da die Option -t von lpr(1) verwendet wurde, konvertiert das Drucksystem die GNU troff-Daten zuvor in ein Format, das der Standarddrucker verstehen und ausgeben kann.


10.5.4.2. Druckaufträge verwalten

Die folgenden Optionen von lpr(1) weisen LPD an, den Druckauftrag auf verschiedene Art und Weise zu behandeln:

-# anzahl

Erzeugt anzahl Ausdrucke jeder im Druckauftrag enthaltenen Datei anstelle eines einzigen Exemplars. Diese Option kann von einem Administrator deaktiviert werden, um die Beanspruchung des Druckers zu verringern. Lesen Sie den Abschnitt Den Ausdruck von mehreren Kopien verhindern, wenn Sie diese Funktion benötigen.

Das folgende Beispiel druckt drei Kopien der Datei parser.c, gefolgt von drei Kopien von parser.h auf den Standarddrucker:

% lpr -#3 parser.c parser.h
-m

Verschickt eine E-Mail, nachdem der Druckauftrag beendet wurde. Verwenden Sie diese Option, sendet LPD Ihnen eine E-Mail, wenn es die Bearbeitung Ihres Druckauftrages abgeschlossen hat. Diese Nachricht enthält Informationen darüber, ob Ihr Auftrag erfolgreich erledigt wurde oder ob ein Fehler auftrat. Ist dies der Fall, wird meist noch angegeben, welcher Fehler auftrat.

-s

Kopiert die Dateien nicht in das Spooling-Verzeichnis, sondern verlinkt stattdessen symbolisch auf diese Dateien.

Wenn Sie einen umfangreichen Druckauftrag erstellen, werden Sie diese Option wahrscheinlich verwenden wollen. Einerseits sparen Sie dadurch Speicherplatz im Spooling-Verzeichnis (im schlimmsten Fall könnte Ihr Druckauftrag ansonsten das Dateisystem des Spooling-Verzeichnis zum Überlaufen bringen), andererseits sparen Sie dadurch auch Zeit, weil LPD die in Ihrem Druckauftrag enthaltenen Dateien nicht in das Spooling-Verzeichnis kopieren muss.

Da LPD in diesem Fall die Originaldateien verwendet, muss sichergestellt sein, dass diese nicht verändert werden, bevor der Ausdruck abgeschlossen ist.

Anmerkung: Wenn Sie auf einen entfernten Drucker drucken, muss LPD die Dateien dennoch vom lokalen auf den entfernten Rechner kopieren. In diesem Fall spart die Option -s Speicherplatz lediglich im lokalen Spooling-Verzeichnis, nicht aber im entfernten. Dennoch ist diese Option auch in diesem Fall nützlich.

-r

Löscht die im Druckauftrag enthaltenen Dateien, nachdem sie in das Spooling-Verzeichnis kopiert oder unter Verwendung der Option -s gedruckt werden. Verwenden Sie diese Option daher nur mit äußerster Vorsicht!


10.5.4.3. Deckblatt-Optionen

Die folgenden lpr(1)-Optionen passen den Text an, der auf einem Deckblatt eines Druckauftrages ausgegeben wird. Wird die Ausgabe von Deckblättern auf dem Zieldrucker unterdrückt, bleiben diese Optionen wirkungslos. Lesen Sie den Abschnitt Deckblätter, wenn Sie diese Funktion benötigen.

-C text

Ersetzt den Rechnernamen auf dem Deckblatt durch text. Der Rechnername ist dabei in der Regel der Name des Rechners, auf dem der Druckauftrag erstellt wurde.

-J text

Ersetzt den Namen des Druckauftrages auf dem Deckblatt durch text. Der Name des Druckauftrages entspricht in der Regel dem Namen der ersten Datei des Druckauftrages oder stdin, wenn Sie die Standardeingabe an den Drucker weiterleiten.

-h

Verhindert den Ausdruck von Deckblättern.

Anmerkung: Ob diese Option funktioniert, hängt von der Art und Weise ab, wie Deckblätter auf Ihrem System erzeugt werden. Lesen Sie den Abschnitt Deckblätter für weitere Informationen.


10.5.5. Drucker verwalten

Als Administrator Ihres Systems ist es Ihre Aufgabe, Drucker zu installieren, zu konfigurieren und zu testen. Um mit Ihrem Drucker zu kommunizieren, können Sie lpc(8) verwenden. Dadurch sind Sie in der Lage,

  • Ihre Drucker zu starten und zu beenden.

  • Die Warteschlangen Ihrer Drucker zu aktivieren und zu deaktivieren.

  • Die Reihenfolge der Druckaufträge zu ändern.

Am Anfang dieses Abschnitts steht die Erklärung einiger Begriffe. Wenn ein Drucker beendet ist, wird der Inhalt seiner Warteschlange nicht gedruckt. Druckaufträge können zwar weiterhin erstellt werden, diese verbleiben aber solange in der Warteschlange, bis der Drucker wieder gestartet oder die Warteschlange gelöscht wird.

Ist eine Warteschlange deaktiviert, kann (mit Ausnahme von root) kein Benutzer mehr einen Druckauftrag erteilen. Ist die Warteschlange hingegen aktiviert, können Druckaufträge erteilt werden. Ist ein Drucker zwar gestartet, die Warteschlange hingegen deaktiviert, werden dennoch alle noch in der Warteschlange vorhandenen Druckaufträge gedruckt.

Im Allgemeinen benötigen Sie root-Rechte, um lpc(8) einsetzen zu können. Als normaler Benutzer erlaubt es Ihnen lpc(8) lediglich, den Druckstatus abzufragen und einen hängenden Drucker neu zu starten.

Es folgt nun eine Zusammenfassung der Befehle von lpc(8). Die meisten dieser Befehle benötigen das Argument printer-name, mit dem Sie angeben, auf welchen Drucker der Befehl angewendet werden soll. Wenn Sie für printer-name all angeben, wird der Befehl auf alle in /etc/printcap definierten Drucker angewendet.

abort printer-name

Bricht den aktuellen Druckauftrag ab und beendet den Drucker. Solange die Warteschlange aktiviert ist, können allerdings weiterhin Druckaufträge erteilt werden.

clean printer-name

Entfernt veraltete Dateien aus dem Spooling-Verzeichnis des Druckers, da diese manchmal nicht vollständig von LPD entfernt werden können. Dies ist insbesondere dann der Fall, wenn während der Bearbeitung des Druckauftrages Fehler auftraten. Dieser Befehl sucht dabei nach Dateien, die nicht in das Spooling-Verzeichnis gehören und entfernt diese.

disable printer-name

Deaktiviert die Annahme neuer Druckaufträge. Solange der Drucker nicht beendet wird, werden weiterhin alle in der Warteschlange enthaltenen Auftrage bearbeitet und gedruckt. root kann jederzeit Druckaufträge erstellen, selbst dann, wenn die Druckerwarteschlange deaktiviert ist.

Dieser Befehl ist besonders nützlich, wenn Sie einen neuen Drucker testen müssen oder einen neuen Filter installiert haben. Dazu deaktivieren Sie die Warteschlange des Druckers und erstellen Ihre Druckaufträge als root. Andere Benutzer können erst dann einen Druckauftrag erstellen, wenn Sie Ihre Tests abgeschlossen haben und die Druckerwarteschlange mit enable wieder reaktivieren.

down printer-name nachricht

Beendet einen Drucker. Äquivalent zu disable, gefolgt von stop. Die von Ihnen definierte nachricht wird als Druckerstatus angezeigt, wenn ein Benutzer die Warteschlange des Druckers mit lpq(1) oder mit lpc status abfragt.

enable printer-name

Aktiviert die Warteschlange eines Druckers. Erteilte Druckaufträge können zwar erteilt werden, diese werden aber nur dann gedruckt, wenn der Drucker auch gestartet ist.

help command-name

Ausgaben von hilfreichen Informationen zu command-name. Wird kein command-name angegeben, wird die Liste der verfügbaren Befehle ausgegeben.

restart printer-name

Startet den Drucker. Normale Benutzer können diesen Befehl verwenden, um einen hängenden LPD zu reaktivieren, sie sind allerdings nicht berechtigt, einen Drucker zu starten, der mit stop oder down beendet wurde. Dieser Befehl ist äquivalent zu abort, gefolgt von start.

start printer-name

Startet den Drucker, um die in der Warteschlange enthaltenen Aufträge zu drucken.

stop printer-name

Beendet den Drucker. Der Drucker beendet den aktiven Druckauftrag noch, danach wird kein weiterer in der Warteschlange enthaltener Auftrag gedruckt. Obwohl der Drucker beendet wurde, können weiterhin Druckaufträge erteilt werden, solange die Warteschlange nicht deaktiviert wurde.

topq printer-name job-or-username

Sortiert die Druckerwarteschlange des Druckers printer-name um, wobei der Auftrag mit der angegebenen Auftragsnummer, oder Druckaufträge, die von username erstellt wurden, an den Beginn der Warteschlange gesetzt werden. Für diesen Befehl kann die Option all nicht als printer-name verwendet werden.

up printer-name

Startet einen Drucker. Das Gegenstück zu down. Äquivalent zu start, gefolgt von enable.

lpc(8) akzeptiert diese Befehle direkt auf der Kommandozeile. Geben Sie keinen Befehl ein, wird lpc(8) im interaktiven Modus gestartet. In diesem Modus können Sie solange Befehle eingeben, bis Sie exit oder quit eingeben.


10.6. Alternativen zum LPD-Drucksystem

Wenn Sie dieses Kapitel bis hierher gelesen haben, wissen Sie so gut wie alles über LPD, das Standarddrucksystem von FreeBSD. Wahrscheinlich sind Ihnen bereits einige Unzulänglichkeiten dieses Systems aufgefallen, und Sie fragen sich nun, welche anderen Drucksysteme es für FreeBSD gibt.

LPRng

LPRng steht für “LPR: the Next Generation”. Dabei handelt es sich um eine von Grund auf neu geschriebene Version von PLP. LPRng wurde von Patrick Powell und Justin Mason, dem Hauptmaintainer von PLP, entwickelt. Die offizielle Webseite von LPRng ist unter http://www.lprng.org/ zu finden.

CUPS

CUPS, das Common UNIX Printing System, stellt eine portable Abstraktionsschicht dar, die das Drucken auf allen UNIX-artigen Betriebsystemen ermöglicht. CUPS wurde von Easy Software entwickelt, um UNIX-Herstellern und -Benutzern eine einheitliche Standardlösung für den Druck von Dokumenten zu bieten.

CUPS verwendet das Internet Printing Protocol (IPP), um Druckaufträge und -warteschlangen zu verwalten. Zusätzlich werden die Protokolle Line Printer Daemon (LPD), Server Message Block (SMB), und AppSocket/JetDirect), unterstützt, wenn auch nur mit eingeschränkter Funktionalität. Ausserdem ermöglicht CUPS das Auffinden von Netzwerkdruckern sowie die Verwendung auf PostScript Printer Description (PPD) basierender Druckoptionen.

Die offizielle Webseite von CUPS ist http://www.cups.org/.

HPLIP

HPLIP, das HP Linux Imaging and Printing System, ist eine von HP entwickelte Sammlung von Programmen, die Unterstützung für das drucken, scannen und faxen bei HP-Geräten bieten. Diese Programm-Sammlung verwendet CUPS als Grundlage für einige seiner Druck-Eigenschaften.

Die Hauptseite für HPLIP ist http://hplipopensource.com/hplip-web/index.html.


10.7. Problembehandlung

Wenn Sie eine einfache Testseite mit lptest(1) gedruckt haben, könnte eines der folgenden Probleme aufgetreten sein:

Der Druck hat erst mit einer gewissen Verzögerung geklappt oder das bedruckte Blatt verblieb im Drucker, so als wäre der Druckvorgang noch nicht abgeschlossen.

Die Testseite wurde zwar gedruckt, danach tat sich allerdings nichts mehr. Vielleicht mussten Sie sogar eine Taste Ihres Druckers, etwa PRINT REMAINING oder FORM FEED drücken, damit der Druckvorgang fortgesetzt wurde.

Wenn das der Fall ist, hat der Drucker vermutlich vor dem eigentlichen Drucken gewartet, ob noch weitere Daten für Ihren Druckauftrag gesendet werden. Um dieses Problem zu beheben, können Sie den Textfilter anweisen, ein Form Feed -Zeichen (oder ein anderes entsprechendes Zeichen) an den Drucker zu senden. Dies reicht für gewöhnlich aus, um den Drucker zum Druck des noch im internen Puffer verbliebenen Textes zu bewegen. Dadurch kann auch sichergestellt werden, dass jeder neue Druckauftrag auf einer neuen Seite beginnt.

Der folgende Ersatz für das Shell-Skript /usr/local/libexec/if-simple gibt ein “Form Feed” aus, nachdem der Auftrag an den Drucker geschickt wurde:

#!/bin/sh
#
# if-simple - Einfacher Eingabefilter für lpd
# Installiert unter /usr/local/libexec/if-simple
#
# Kopiert stdin einfach nach stdout. Ignoriert alle Filter-Argumente.
# Schreibt ein Form-Feed-Zeichen (\f) nach dem Ende des Druckauftrages.

/bin/cat && printf "\f" && exit 0
exit 2
Der Drucker erzeugte einen “Treppeneffekt” (staircase effect).

Sie haben einen Ausdruck ähnlich dem folgenden erhalten:

!"#$%&'()*+,-./01234
                "#$%&'()*+,-./012345
                                 #$%&'()*+,-./0123456

Sie sind zu einem weiteren Opfer des Treppeneffekts geworden. Verursacht wird dieser Effekt durch unterschiedliche Ansichten darüber, welche Zeichen den Beginn einer neuen Zeile anzeigen sollen. UNIX-ähnliche Betriebssysteme verwenden dafür ein einzelnes Zeichen: ASCII-Code 10, auch als Line Feed (LF) bekannt. MS-DOS, OS/2® und andere Betriebssysteme verwenden stattdessen ein Zeichenpaar: ASCII-Code 10 und ASCII-Code 13, Carriage Return (CR). Viele Drucker verwenden in der Voreinstellung die Konvention von MS-DOS, um Zeilenumbrüche darzustellen.

Wenn Sie unter FreeBSD drucken, wird nur das Zeichen Line Feed verwendet. Der Drucker erkennt dieses Zeichen und erweitert den Druckbereich um eine Zeile, verbleibt zum Druck des nächsten Zeichens aber in derselben horizontalen Position. Das ist der Grund für die Verwendung des Carriage Return: Es setzt die Position für das folgende Zeichen auf den linken Rand der Seite.

FreeBSD erwartet von einem Drucker das folgende Verhalten:

Drucker empfängt CR Drucker druckt CR
Drucker empfängt LF Drucker druckt CR + LF

Es gibt mehrere Möglichkeiten, dieses Verhalten zu erreichen:

  • Verändern Sie die Konfiguration Ihres Druckers, um die Interpretation dieser Zeichen zu verändern. Lesen Sie Ihr Druckerhandbuch, wenn Sie nicht wissen, was Sie dazu tun müssen.

    Anmerkung: Wenn Sie auf Ihrem Rechner neben FreeBSD noch andere Betriebssysteme verwenden, müssen Sie Ihren Drucker möglicherweise anschließend erneut konfigurieren, damit die Zeichen CR und LF unter diesen Systemen korrekt interpretiert werden. Ist dies bei Ihnen der Fall, werden Sie wohl eine der folgenden Lösungen bevorzugen.

  • Lassen Sie LF durch den Treiber der seriellen Schnittstelle automatisch in CR+LF konvertieren. Selbstverständlich funktioniert dies nur mit Druckern, die an einer seriellen Schnittstelle angeschlossen sind. Um diese Möglichkeit zu nutzen, müssen Sie die ms#-Fähigkeit verwenden und in /etc/printcap den onlcr-Modus für den Drucker aktivieren.

  • Senden Sie eine Escape-Sequenz an den Drucker, damit das Zeichen LF zeitweilig anders behandelt wird. Suchen Sie im Handbuch Ihres Druckers nach den von Ihrem Drucker unterstützten Escape-Sequenzen. Wenn Sie eine entsprechenden Escape-Sequenz finden, müssen Sie den Textfilter so anpassen, dass zuerst die Escape-Sequenz und anschließend der Druckauftrag gesendet wird.

    Es folgt nun ein Bespieltextfilter für einen Drucker, der die Hewlett Packard PCL Escape-Sequenzen versteht. Dieser Filter veranlasst den Drucker, LF-Zeichen als Folgen von LF+CR aufzufassen. Anschließend wird der Druckauftrag gesendet. Als Abschluss wird ein Form Feed gesendet, um die letzte Seite des Druckauftrags auszuwerfen. Dieses Beispiel sollte mit nahezu allen Druckern von Hewlett Packard funktionieren.

    #!/bin/sh
    #
    # hpif - Einfacher Text-Eingabefilter für lpd für auf HP-PCL basierende Drucker
    # Installiert unter /usr/local/libexec/hpif
    #
    # Kopiert stdin einfach nach stdout.  Ignoriert alle Filterargumente.
    # Weist den Drucker an LF als CR+LF zu interpretieren.
    # Wirft die Seite nach dem Drucken aus.
    
    printf "\033&k2G" && cat && printf "\033&l0H" && exit 0
    exit 2
    

    Das nächste Beispiel aus /etc/printcap beschreibt den Rechner orchid, an dessen Parallelport ein Drucker angeschlossen ist. Es handelt sich dabei um einen Hewlett Packard LaserJet 3Si, der den Namen teak verwendet. Als Textfilter wird das Skript aus dem letzten Beispiel verwendet:

    #
    #  /etc/printcap für den Rechner orchid
    #
    teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
            :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
            :if=/usr/local/libexec/hpif:
    
Alle Zeilen wurden in die gleiche Zeile gedruckt.

Der Drucker hat niemals eine neue Zeile begonnen. Alle Zeilen des Textes wurden in eine einzige Zeile gedruckt.

Dieses Problem ist das “Gegenteil” des oben beschriebenen Treppeneffekts und kommt wesentlich seltener vor. Die von FreeBSD zum Abschluss einer Zeile benutzten LF-Zeichen werden als CR-Zeichen interpretiert. Dadurch wird die Druckposition zwar auf den linken Rand der Seite, aber nicht um eine Zeile nach unten gesetzt.

Konfigurieren Sie Ihren Drucker, um die folgende Interpretation der Zeichen LF und CR zu erzwingen:

Drucker empfängt Drucker druckt
CR CR
LF CR + LF
Manche Zeichen wurden nicht gedruckt.

Der Drucker hat in jeder Zeile einige Zeichen nicht gedruckt. Vielleicht ist das Problem auch während des Druckens schlimmer geworden, und der Drucker hat immer mehr Zeichen nicht gedruckt.

Dieses Problem entsteht, weil der Drucker mit der Geschwindigkeit, mit der die Daten über die serielle Schnittstelle (an einer parallelen Schnittstelle sollte das Problem nicht auftreten) eintreffen, nicht mithalten kann. Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  • Wenn der Drucker die Flusskontrolle mit XON/XOFF unterstützt, können Sie in der ms#-Fähigkeit den ixon-Modus aktivieren.

  • Unterstützt der Drucker die Anfrage zum Senden/Löschen des Sende-Hardware-Handshakes (allgemein bekannt als RTS/CTS, dann sollten Sie den crtscts-Modus in der ms#-Fähigkeit aktivieren. Stellen Sie aber sicher, dass das verwendete Druckerkabel auch für die Hardware-Flusskontrolle geeignet ist.

Es wurden nur wirre Zeichen gedruckt.

Anstelle des gewünschten Textes wurden nur zufällige Zeichen gedruckt.

Dieses Problem wird ebenfalls durch falsche Konfigurationsparameter im Zusammenhang mit einem seriellen Drucker verursacht. Kontrollieren Sie die bps-Rate in der br-Fähigkeit und die Paritätseinstellung (Parity) in der ms#-Fähigkeit. Überprüfen Sie außerdem, ob der Drucker auch tatsächlich die gleichen Einstellungen verwendet, die in /etc/printcap definiert wurden.

Der Drucker hat überhaupt nicht reagiert.

Wenn gar nichts passiert ist, dann liegt das vermutlich an FreeBSD und nicht am Drucker. Aktivieren Sie die Protokollierung (lf-Fähigkeit) für den entsprechenden Drucker in der Datei /etc/printcap. Es folgt nun ein Beispieleintrag für den Drucker rattan, bei dem die lf-Fähigkeit aktiviert wurde.

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:\
        :lf=/var/log/rattan.log

Versuchen Sie jetzt noch einmal zu drucken. Überprüfen Sie die Protokolldatei (in unserem Beispiel /var/log/rattan.log) auf etwaige Fehlermeldungen. Versuchen Sie aufgrund dieser Meldungen, das Problem zu beheben.

Wenn Sie keine Protokolldatei festlegen, verwendet LPD in der Voreinstellung /dev/console für die Ausgabe der Fehlermeldungen.


Kapitel 11. Linux-Binärkompatibilität

Restrukturiert und teilweise aktualisiert von Jim Mock. Beigetragen von Brian N. Handy und Rich Murphey. Übersetzt von Johann Kois.

11.1. Übersicht

FreeBSD bietet Binärkompatibilität zu verschiedenen anderen UNIX Betriebssystemen, darunter auch Linux. Nun könnten Sie sich fragen, warum FreeBSD in der Lage sein muss, Linux-Binärprogramme auszuführen? Die Antwort auf diese Frage ist sehr einfach. Viele Unternehmen und Entwickler programmieren bzw. entwickeln nur für Linux, da es “das Neueste und Beste” in der Computerwelt ist. Für uns FreeBSD-Anwender heißt dies, genau diese Unternehmen und Entwickler zu bitten, FreeBSD-Versionen ihrer Programme herauszubringen. Das Problem dabei ist nur, dass die meisten dieser Firmen trotzdem nicht erkennen, wie viele zusätzliche Anwender ihre Produkte benutzen würden, wenn es auch FreeBSD-Versionen gäbe, und daher weiterhin ausschließlich für Linux entwickeln. Was also kann ein FreeBSD-Anwender tun? Genau an diesem Punkt kommt die Linux- Binärkompatibilität ins Spiel.

Um es auf den Punkt zu bringen, genau diese Kompatibilität erlaubt es FreeBSD-Anwendern, etwa 90 % aller Linux-Anwendungen ohne Code-Änderungen zu verwenden. Dies schließt solche Anwendungen wie StarOffice, Open Office, die Linux-Versionen von Netscape, Adobe Acrobat, RealPlayer, Oracle, WordPerfect®, Doom, Quake und viele andere ein. Es wird sogar berichtet, dass diese Linux-Anwendungen in manchen Fällen unter FreeBSD eine bessere Leistung als unter Linux aufweisen.

Allerdings gibt es nach wie vor einige Linux-spezifische Betriebssystem-Eigenschaften, die unter FreeBSD nicht unterstützt werden. Linux-Anwendungen, die i386-spezifische Aufrufe (wie die Aktivierung des virtuellen 8086-Modus) verwenden, funktionieren unter FreeBSD leider nicht.

Nach dem Lesen dieses Kapitels werden Sie

  • wissen, wie Sie die Linux-Binärkompatibilität installieren bzw. aktivieren.

  • Wissen, wie man zusätzliche Linux-Systembibliotheken unter FreeBSD installiert.

  • Linux-Anwendungen unter FreeBSD installieren können.

  • Wissen, wie die Linux-Binärkompatibilität unter FreeBSD verwirklicht wurde.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • wissen, wie man Software Dritter installiert (Kapitel 5).


11.2. Installation

Die Linux-Binärkompatibilität ist per Voreinstellung nicht aktiviert. Der einfachste Weg, dies zu tun, ist das Linux KLD (“Kernel LoaDable object”) zu laden. Dies erreichen Sie durch die Eingabe des folgenden Befehls:

# kldload linux

Wollen Sie die Linux-Binärkompatibilität dauerhaft aktivieren, sollten Sie die folgende Zeile in /etc/rc.conf einfügen:

linux_enable="YES"

Der kldstat(8)-Befehl kann benutzt werden, um festzustellen, ob KLD geladen wurde:

% kldstat
Id Refs Address    Size     Name
 1    2 0xc0100000 16bdb8   kernel
 7    1 0xc24db000 d000     linux.ko

Wenn Sie das KLD nicht laden können oder wollen, besteht auch die Möglichkeit, die Linux-Binärkompatibiltät statisch in den Kernel einzubinden. Dazu fügen Sie Ihrer Kernelkonfigurationsdatei den Eintrag options COMPAT_LINUX hinzu. Anschließend installieren Sie Ihren neuen Kernel wie in Kapitel 9 beschrieben.


11.2.1. Linux-Laufzeitbibliotheken installieren

Dies kann auf zwei Arten geschehen, entweder über den linux_base-Port oder durch manuelle Installation der Bibliotheken.


11.2.1.1. Installation unter Verwendung des linux_base-Ports

Dies ist die einfachste Methode, um die Laufzeitbibliotheken zu installieren. Sie funktioniert genauso wie die Installation eines beliebigen anderen Ports aus der Ports-Sammlung. Dazu machen Sie einfach folgendes:

# cd /usr/ports/emulators/linux_base-f10
# make install distclean

Anmerkung: Bei FreeBSD-Systemen vor FreeBSD 8.0 müssen Sie den Port emulators/linux_base-fc4 anstatt emulators/linux_base-f10 installieren.

Sie sollten nun über eine funktionierende Linux-Binärkompatibilität verfügen. Einige Programme könnten sich zwar über falsche Unterversionsnummern der Systembibliotheken beschweren, dies ist im Allgemeinen aber kein Problem.

Anmerkung: Unter Umständen gibt es mehrere Versionen des Ports emulators/linux_base. Die Ports entsprechen unterschiedlichen Versionen verschiedener Linux-Distributionen Sie sollten den Port installieren, der am besten die Anforderungen der Linux-Anwendung erfüllt.


11.2.1.2. Manuelle Installation der Bibliotheken

Wenn Sie die “Ports”-Sammlung nicht installiert haben, können Sie die Bibliotheken auch manuell installieren. Dazu brauchen Sie die jeweiligen Linux-Systembibliotheken, die das zu installierende Programm verwendet sowie den Laufzeit-Linker. Zusätzlich müssen Sie auf Ihrem FreeBSD-System einen “virtuellen” Verzeichnisbaum für die Linux-Bibliotheken einrichten. Alle unter FreeBSD gestarteten Linux-Programme suchen zuerst in diesem Verzeichnisbaum nach Systembibliotheken. Wenn also ein Linuxprogramm beispielsweise /lib/libc.so lädt, versucht FreeBSD zuerst, /compat/linux/lib/libc.so laden. Ist diese Datei nicht vorhanden, wird /lib/libc.so geladen. Systembibliotheken sollten daher besser in den “virtuellen” Verzeichnisbaum /compat/linux/lib als in den vom Linux-ld.so vorgeschlagenen installiert werden.

Im Allgemeinen müssen Sie nur zu Beginn nach den Systembibliotheken suchen, die von Linuxprogrammen benötigt werden. Nach den ersten Installationen von Linuxprogrammen auf Ihrem FreeBSD-System verfügen Sie über eine Sammlung von Linux-Systembibliotheken, die es Ihnen ermöglichen wird, neue Linuxprogramme ohne Zusatzarbeit zu installieren.


11.2.1.3. Installation zusätzlicher Systembibliotheken

Was passiert, wenn Sie den linux_base-Port installieren, und Ihr Programm beschwert sich trotzdem über fehlende Systembibliotheken? Woher wissen Sie, welche Systembibliotheken von Linux-Binärprogrammen benötigt werden, und wo Sie diese finden? Grundsätzlich gibt es dafür zwei Möglichkeiten (um dieser Anleitung zu folgen, müssen Sie unter FreeBSD als Benutzer root angemeldet sein):

Wenn Sie Zugriff auf ein Linux-System haben, können Sie dort nachsehen, welche Systembibliotheken eine Anwendung benötigt, und diese auf Ihr FreeBSD-System kopieren. Dazu folgendes Beispiel:

Nehmen wir an, Sie haben FTP verwendet, um die Linux-Binärversion von Doom zu bekommen und haben sie auf Ihrem Linux-System installiert. Nun können Sie überprüfen, welche Systembibliotheken das Programm benötigt, indem Sie ldd linuxdoom eingeben. Das Resultat sieht dann so aus:

% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Sie müssten nun alle Dateien aus der letzten Spalte kopieren und sie unter /compat/linux speichern, wobei die Namen der ersten Spalte als symbolische Links auf diese Dateien zeigen. Damit haben Sie schließlich folgende Dateien auf Ihrem FreeBSD-System:

/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Anmerkung: Beachten Sie, dass wenn Sie bereits eine Linux-Systembibliothek einer zur ersten Spalte passenden Hauptversionsnummer (laut ldd-Ausgabe) besitzen, Sie die Datei aus der zweiten Spalte nicht mehr kopieren müssen, da die bereits vorhandene Version funktionieren sollte. Hat die Systembibliothek jedoch eine neuere Versionsnummer, sollten Sie sie dennoch kopieren. Sie können die alte Version löschen, solange Sie einen symbolischen Link auf die neue Version anlegen. Wenn Sie also folgende Bibliotheken auf Ihrem System installiert haben:

/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27

und Sie haben eine neue Binärdatei, die laut ldd eine neuere Bibliothek benötigt:

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

Wenn diese sich nur um ein oder zwei Stellen in der Unterversionsnummer unterscheiden, müssen Sie /lib/libc.so.4.6.29 nicht auf Ihr System kopieren, da das Programm auch mit der etwas älteren Version ohne Probleme funktionieren sollte. Wenn Sie wollen, können Sie libc.so aber dennoch ersetzen (das heißt aktualisieren), was dann zu folgender Ausgabe führt:

/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Anmerkung: Der Mechanismus der symbolischen Links wird nur für Linux-Binärdateien benötigt. Der FreeBSD-Laufzeitlinker sucht sich die passenden Hauptversionsnummern selbst, das heißt Sie müssen sich nicht darum kümmern.


11.2.2. Linux ELF-Binärdateien installieren

ELF-Binärdateien benötigen manchmal eine zusätzliche “Kennzeichnung”. Wenn Sie versuchen, eine nicht gekennzeichnete ELF-Binärdatei auszuführen, werden Sie eine Fehlermeldung ähnlich der folgenden erhalten:

% ./my-linux-elf-binary
ELF binary type not known
Abort

Damit der FreeBSD-Kernel eine Linux-ELF-Datei von einer FreeBSD-ELF-Datei unterscheiden kann, gibt es das Werkzeug brandelf(1).

% brandelf -t Linux my-linux-elf-binary

Die GNU Werkzeuge schreiben nun automatisch die passende Kennzeichnungsinformation in die ELF-Binärdateien, so dass Sie diesen Schritt in Zukunft nur noch selten benötigen werden.


11.2.3. Installieren einer beliebigen RPM-basierten Linuxanwendung

FreeBSD besitzt seine eigene Paketdatenbank und diese wird dazu verwendet, um alle Ports (auch Linux-Ports) zu verfolgen. Deshalb wird die Linux RPM-Datenbank nicht benutzt (fehlende Unterstützung).

Falls Sie jedoch eine beliebige RPM-basierte Linux-Anwendung installieren wollen, erreichen Sie das mittels:

# cd /compat/linux
# rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id

Benutzen Sie dann brandelf auf die installierten ELF-Binärdateien (nicht die Bibliotheken!). Sie werden keine saubere Deinstallation hinbekommen, aber evtl. helfen ein paar Tests weiter.


11.2.4. Namensauflösung konfigurieren

Wenn DNS nicht funktioniert, oder Sie folgende Fehlermeldung erhalten:

resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword

müssen sie /compat/linux/etc/host.conf wie folgt anlegen:

order hosts, bind
multi on

Diese Reihenfolge legt fest, dass zuerst /etc/hosts und anschließend DNS durchsucht werden. Wenn /compat/linux/etc/host.conf nicht vorhanden ist, finden Linux-Anwendungen FreeBSD's /etc/host.conf und beschweren sich über die inkompatible FreeBSD-Syntax. Wenn Sie keinen Nameserver (in /etc/resolv.conf) konfiguriert haben, sollten Sie den Eintrag bind entfernen.


11.3. Mathematica® installieren

Für Mathematica 5.x aktualisiert von Boris Hollas.

Dieses Dokument beschreibt die Installation der Linux-Version von Mathematica 5.x auf einem FreeBSD-System.

Die Linux-Version von Mathematica oder Mathematica für Studenten kann direkt von Wolfram unter http://www.wolfram.com/ bestellt werden.


11.3.1. Den Mathematica-Installer starten

Zuerst müssen Sie FreeBSD mitteilen, dass die Linux-Binärversion von Mathematica die Linux-ABI verwendet. Dies erreichen Sie am einfachsten, indem Sie die Standard-ELF-Kennzeichnung für alle ungekennzeichneten Binärdateien auf Linux festlegen:

# sysctl kern.fallback_elf_brand=3

Danach wird FreeBSD annehmen, dass alle ungekennzeichneten ELF-Binärdateien die Linux-ABI verwenden und es wäre nun möglich, das Installationsprogramm direkt von der CD-ROM zu starten.

Unter FreeBSD müssen allerdings die Datei MathInstaller in ein lokales Verzeichnis Ihrer Festplatte kopieren:

# mount /cdrom
# cp /cdrom/Unix/Installers/Linux/MathInstaller /LokalesVerzeichnis/

In dieser Datei ersetzen Sie in der ersten Zeile den Wert /bin/sh durch /compat/linux/bin/sh. Dadurch wird sichergestellt, dass der Installer von der Linux-Version von sh(1) aufgerufen wird. Danach ersetzen Sie durch das im nächsten Abschnitt zu findende Skript oder über einen Texteditor alle Vorkommen von Linux) durch FreeBSD). Dadurch ist es dem Mathematica-Installer möglich, durch den Einsatz von uname -s das Betriebssystem zu bestimmen. FreeBSD wird dabei als Linux-artiges Betriebssystem behandelt. Durch den Aufruf von MathInstaller kann Mathematica anschließend installiert werden.


11.3.2. Die Mathematica-Programmdateien anpassen

Das von Mathematica während der Installation erzeugte Shell-Skript muss angepasst werden, bevor Sie es einsetzen können. Wenn Sie die Mathematica-Programmdateien unter /usr/local/bin installieren, finden Sie in diesem Verzeichnis die symbolische Links math, mathematica, Mathematica, sowie MathKernel. In jeder dieser Dateien müssen Sie jedes Vorkommen von Linux) durch FreeBSD) ersetzen (entweder über einen Texteditor oder durch das folgende Shellskript):

#!/bin/sh
cd /usr/local/bin
for i in math mathematica Mathematica MathKernel
  do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp
  sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i
  rm $i.tmp
  chmod a+x $i
done

11.3.3. Ihr Mathematica-Passwort anfordern

Wenn Sie Mathematica das erste Mal starten, werden Sie nach einem Passwort gefragt. Haben Sie noch kein Passwort von Wolfram erhalten, müssen Sie zuerst im Installationsverzeichnis mathinfo aufrufen, um Ihre “Rechner-ID” zu bestimmen. Diese Rechner-ID basiert ausschließlich auf der MAC-Adresse Ihrer ersten Netzwerkkarte. Daher ist es nicht möglich, Ihre Mathematica-Kopie auf verschiedenen Rechnern zu installieren.

Wenn Sie sich bei Wolfram registrieren (durch E-Mail, Telefon oder Fax), teilen Sie Ihre “Rechner-ID” mit und erhalten dafür ein aus Zahlengruppen bestehendes Passwort.


11.3.4. Das Mathematica-Frontend über ein Netzwerk ausführen

Mathematica verwendet einige spezielle Schriftarten, um Zeichen anzuzeigen, die in den Standardzeichensätzen nicht vorhanden sind (z.B. Integrale, Summen, griechische Buchstaben). Das X-Protokoll verlangt allerdings, dass diese Schriftarten lokal installiert sind. Das bedeutet, dass Sie diese Schriftarten von der CD-ROM oder von einem Rechner, auf dem Mathematica installiert ist, auf Ihren Rechner kopieren müssen. Diese Schriftarten befinden sich normalerweise in /cdrom/Unix/Files/SystemFiles/Fonts (Mathematica-CD) oder in /usr/local/mathematica/SystemFiles/Fonts (Festplatte). Die aktuellen Schriftarten befinden sich dabei in den Unterverzeichnissen Type1 und X. Um diese Schriftarten zu verwenden, gibt es mehrere Möglichkeiten, die nun beschrieben werden:

Die erste Möglichkeit besteht darin, die Schriftarten in eins der bereits existierenden Schriftartenverzeichnisse unter /usr/X11R6/lib/X11/fonts zu kopieren. Dies bedeutet, dass Sie fonts.dir editieren müssen, indem Sie die Schriftnamen hinzufügen und die Anzahl der Schriftarten in der ersten Zeile ändern. Alternativ ist es auch möglich, im Verzeichnis, in das Sie die Schriftarten kopiert haben, das Kommando mkfontdir(1) auszuführen.

Die zweite Möglichkeit, besteht darin, die Verzeichnisse nach /usr/X11R6/lib/X11/fonts zu kopieren:

# cd /usr/X11R6/lib/X11/fonts
# mkdir X
# mkdir MathType1
# cd /cdrom/Unix/Files/SystemFiles/Fonts
# cp X/* /usr/X11R6/lib/X11/fonts/X
# cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
# cd /usr/X11R6/lib/X11/fonts/X
# mkfontdir
# cd ../MathType1
# mkfontdir

Nun fügen Sie die neuen Schriftartenverzeichnisse in Ihren Pfad ein:

# xset fp+ /usr/X11R6/lib/X11/fonts/X
# xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
# xset fp rehash

Wenn Sie den Xorg-Server verwenden, können Sie die Schriftarten-Verzeichnisse automatisch laden lassen, wenn Sie sie in Ihrer xorg.conf angeben.

Wenn Sie noch kein /usr/X11R6/lib/X11/fonts/Type1-Verzeichnis haben, können Sie das MathType1-Verzeichnis im vorherigen Beispiel in Type1 umbenennen.


11.4. Maple™ installieren

Beigetragen von Aaron Kaplan. Mit Unterstützung durch Robert Getschmann.

Maple ist ein mit Mathematica vergleichbares kommerzielles Mathematikprogramm. Sie können dieses Programm unter http://www.maplesoft.com/ kaufen und sich anschließend registrieren, um eine Lizenz zu erhalten. Um dieses Programm unter FreeBSD zu installieren, gehen Sie wie folgt vor:

  1. Führen Sie das INSTALL-Shell-Skript der Softwaredistribution aus. Wählen Sie die “RedHat”-Option aus, wenn Sie das Installationsprogramm danach fragt. Ein typisches Installationsverzeichnis wäre z.B. /usr/local/maple.

  2. Wenn Sie dies noch nicht gemacht haben, besorgen Sie sich nun eine Maple-Lizenz von Maple Waterloo Software (http://register.maplesoft.com) und kopieren Sie diese nach /usr/local/maple/license/license.dat.

  3. Installieren Sie den FLEXlm-Lizenz-Manager, indem Sie das INSTALL_LIC-Installations-Shellskript ausführen, das mit Maple ausgeliefert wird. Geben Sie Ihren primären Rechnernamen für den Lizenz-Server an.

  4. Verändern Sie /usr/local/maple/bin/maple.system.type wie folgt:

       ----- snip ------------------
    *** maple.system.type.orig      Sun Jul  8 16:35:33 2001
    --- maple.system.type   Sun Jul  8 16:35:51 2001
    ***************
    *** 72,77 ****
    --- 72,78 ----
              # the IBM RS/6000 AIX case
              MAPLE_BIN="bin.IBM_RISC_UNIX"
              ;;
    +     "FreeBSD"|\
          "Linux")
              # the Linux/x86 case
            # We have two Linux implementations, one for Red Hat and
       ----- snip end of patch -----
    

    Bitte beachten Sie, dass nach "FreeBSD"|\ kein anderes Zeichen eingefügt werden darf.

    Dieser Patch weist Maple an, FreeBSD als “eine Art von Linux-System” zu erkennen. Das Shell-Skript bin/maple ruft das Shell-Skript bin/maple.system.type auf, welches wiederum uname -a verwendet, um den Namen des Betriebssystems herauszufinden. Abhängig vom Betriebssystem weiß das System nun, welche Binärdateien verwendet werden sollen.

  5. Starten Sie den Lizenz-Server.

    Das folgende, als /usr/local/etc/rc.d/lmgrd.sh installierte Shell-Skript ist ein komfortabler Weg, um lmgrd zu starten:

       ----- snip ------------
    
    #! /bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
    PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX
    export PATH
    
    LICENSE_FILE=/usr/local/maple/license/license.dat
    LOG=/var/log/lmgrd.log
    
    case "$1" in
    start)
    	lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2
    	echo -n " lmgrd"
    	;;
    stop)
    	lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2
    	;;
    *)
    	echo "Usage: `basename $0` {start|stop}" 1>&2
    	exit 64
    	;;
    esac
    
    exit 0
       ----- snip ------------
    
  6. Versuchen Sie, Maple zu starten:

    % cd /usr/local/maple/bin
    % ./xmaple
    

    Nun sollte das Programm laufen und alles funktionieren. Falls ja, vergessen Sie nicht, an Maplesoft zu schreiben und sie wissen zu lassen, dass Sie gerne eine native FreeBSD-Version hätten.


11.4.1. Häufige Fehlerquellen

  • Der FLEXlm-Lizenzmanager kann schwierig zu bedienen sein. Zusätzliche Dokumentation zu diesem Thema finden Sie unter http://www.globetrotter.com/.

  • Es ist bekannt, dass lmgrd sehr pingelig ist, wenn es um die Lizenzdatei geht. Gibt es Probleme, führt dies zu einem Speicherauszug (core dump). Ein korrekte Lizenzdatei sollte ähnlich der folgenden aussehen:

    # =======================================================
    # License File for UNIX Installations ("Pointer File")
    # =======================================================
    SERVER chillig ANY
    #USE_SERVER
    VENDOR maplelmg
    
    FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
             PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \
             ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \
             SN=XXXXXXXXX
    

    Anmerkung: Seriennummer und Schlüssel wurden durch mehrere X unkenntlich gemacht. chillig ist ein Rechnername.

    Veränderungen an der Lizenzdatei sind möglich, solange Sie die FEATURE-Zeile nicht verändern (diese ist durch den Lizenzschlüssel geschützt).


11.5. MATLAB® installieren

Beigesteuert von Dan Pelleg.

Im Folgenden wird die Installation der Linux-Anwendung MATLAB® Version 6.5 auf FreeBSD beschrieben. Mit Ausnahme der Java Virtual Machine (siehe Abschnitt 11.5.3) läuft die Anwendung auch ganz gut.

Die Linux-Version von MATLAB können Sie direkt bei The MathWorks bestellen. Vergewissern Sie sich, dass Sie die Lizenz-Datei oder eine Anleitung zum Erstellen der Lizenz-Datei erhalten haben. Wenn Sie mit MathWorks in Kontakt stehen, weisen Sie bitte auf die fehlende FreeBSD-Version der Software hin.


11.5.1. Das MATLAB-Installationsskript

Um MATLAB zu installieren, gehen Sie wie folgt vor:

  1. Hängen Sie die Installations-CD ein und wechseln Sie zu root, wie im Installations-Skript gefordert. Starten Sie die Installation mit dem folgenden Kommando:

    # /compat/linux/bin/sh /cdrom/install
    

    Tipp: Die Installation erfordert eine graphische Benutzeroberfläche. Wenn Sie die Fehlermeldung erhalten, dass das Display nicht geöffnet werden konnte, führen Sie das folgende Kommando aus:

    # setenv HOME ~USER
    

    Für USER setzen Sie den Benutzer ein, von dem aus Sie root geworden sind.

  2. Beantworten Sie die Frage nach dem MATLAB-Root-Verzeichnis mit: /compat/linux/usr/local/matlab.

    Tipp: Den langen Pfad werden Sie noch öfter brauchen. Die Tipparbeit können Sie sich mit dem folgenden Befehl erleichtern:

    # set MATLAB=/compat/linux/usr/local/matlab
    
  3. Editieren Sie die Lizenz-Datei entsprechend der Anweisung, die Sie beim Erwerb der Lizenz erhalten haben.

    Tipp: Sie können die Datei schon vorher mit Ihrem Lieblingseditor bearbeiten. Kopieren Sie die Lizenz-Datei nach $MATLAB/license.dat bevor das Installationsprogramm Sie auffordert, die Datei zu editieren.

  4. Schließen Sie die Installation ab.

Die MATLAB-Installation ist jetzt abgeschlossen. Die folgenden Schritte passen MATLAB an FreeBSD an.


11.5.2. Den Lizenzmanager starten

  1. Erstellen Sie symbolische Links zu den Startskripten des Lizenzmanagers:

    # ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW
    # ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW
    
  2. Erstellen Sie das Startskript /usr/local/etc/rc.d/flexlm.sh. Das folgende Beispiel ist eine geänderte Version des mitgelieferten Skripts $MATLAB/etc/rc.lm.glnx86. Angepasst wurden die Pfade zu den Dateien und der Start des Lizenzmanagers unter der Linux-Emulation.

    #!/bin/sh
    case "$1" in
      start)
            if [ -f /usr/local/etc/lmboot_TMW ]; then
                  /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd'
            fi
            ;;
      stop)
    	if [ -f /usr/local/etc/lmdown_TMW ]; then
                /compat/linux/bin/sh /usr/local/etc/lmdown_TMW  > /dev/null 2>&1
    	fi
            ;;
      *)
    	echo "Usage: $0 {start|stop}"
    	exit 1
    	;;
    esac
    
    exit 0
    

    Wichtig: Machen Sie Datei ausführbar:

    # chmod +x /usr/local/etc/rc.d/flexlm.sh
    

    Ersetzen Sie im Skript username durch einen existierenden Benutzer Ihres Systems (bitte keinesfalls root).

  3. Starten Sie den Lizenzmanager:

    # /usr/local/etc/rc.d/flexlm.sh start
    

11.5.3. Einrichten der Java-Laufzeitumgebung

Erstellen Sie einen symbolischen Link auf eine unter FreeBSD laufende Java-Laufzeitumgebung (JRE):

# cd $MATLAB/sys/java/jre/glnx86/
# unlink jre; ln -s ./jre1.1.8 ./jre

11.5.4. Ein MATLAB-Startskript erstellen

  1. Kopieren Sie das folgende Skript nach /usr/local/bin/matlab:

    #!/bin/sh
    /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"
    
  2. Machen Sie das Skript ausführbar:

    # chmod +x /usr/local/bin/matlab
    

Tipp: Abhängig von der Version des Ports emulators/linux_base kann das Skript auf Fehler laufen. Die Fehler können Sie vermeiden, indem Sie die Datei /compat/linux/usr/local/matlab/bin/matlab editieren. Ändern Sie die nachstehende Zeile

if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then

(mit Version 13.0.1 in der Zeile 410) in die folgende um:

if test -L $newbase; then

11.5.5. Stopp-Skript für MATLAB erstellen

Das nachstehende Skript beendet MATLAB ordnungsgemäß.

  1. Erstellen Sie die Datei $MATLAB/toolbox/local/finish.m mit dem nachstehenden Inhalt:

    ! $MATLAB/bin/finish.sh
    

    Anmerkung: Übernehmen Sie die Zeichenkette $MATLAB unverändert.

    Tipp: Im selben Verzeichnis befinden sich die Dateien finishsav.m und finishdlg.m. Die Dateien sichern die Einstellungen der Arbeitsfläche bevor MATLAB beendet wird. Wenn Sie eine der beiden Dateien benutzen, fügen Sie die obige Zeile unmittelbar nach dem save-Kommando ein.

  2. Erstellen Sie die Datei $MATLAB/bin/finish.sh mit nachstehendem Inhalt:

    #!/compat/linux/bin/sh
    (sleep 5; killall -1 matlab_helper) &
    exit 0
    
  3. Machen Sie die Datei ausführbar:

    # chmod +x $MATLAB/bin/finish.sh
    

11.5.6. MATLAB benutzen

Jetzt können Sie MATLAB mit dem matlab starten.


11.6. Oracle® installieren

Beigetragen von Marcel Moolenaar.

11.6.1. Übersicht

Dieses Dokument beschreibt die Installation von Oracle 8.0.5 und Oracle 8.0.5.1 Enterprise Edition für Linux auf einem FreeBSD-Rechner.


11.6.2. Installation der Linux-Umgebung

Stellen Sie sicher, dass Sie sowohl emulators/linux_base und devel/linux_devtools aus der Ports-Sammlung installiert haben. Wenn Sie mit diesen Ports Schwierigkeiten haben, müssen Sie vielleicht ältere Versionen der Linux-Umgebung aus der Ports-Sammlung installieren.

Wenn Sie den Intelligent-Agent verwenden wollen, müssen Sie zusätzlich das RedHat Tcl-Paket installieren: tcl-8.0.3-20.i386.rpm. Zur Installation von RPM-Paketen wir der Port archivers/rpm benötigt. Ist der Port installiert, lassen sich RPM-Pakete anschließend mit dem nachstehenden Befehl installieren:

# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package

Die Installation der RPM-Pakete sollte ohne Fehlermeldung ablaufen.


11.6.3. Die Oracle-Umgebung erzeugen

Bevor Sie Oracle installieren können, müssen Sie eine entsprechende Umgebung erzeugen. Dieses Dokument beschreibt nur, was Sie im Speziellen tun müssen, um die Linux-Version von Oracle unter FreeBSD zu installieren, nicht aber, was bereits in der Installationsanleitung von Oracle beschrieben wird.


11.6.3.1. Kernel-Tuning

Wie in der Installationsanleitung von Oracle beschrieben, müssen Sie die maximale Shared-Memory Größe festlegen. Verwenden Sie SHMMAX nicht unter FreeBSD. SHMMAX wird lediglich aus SHMMAXPGS und PGSIZE berechnet. Definieren Sie stattdessen SHMMAXPGS. Alle anderen Optionen können wie in der Anleitung beschrieben verwendet werden. Zum Beispiel:

options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61

Passen Sie diese Optionen entsprechend dem von Ihnen gewünschten Einsatzzweck von Oracle an.

Stellen Sie außerdem sicher, dass Sie folgende Optionen in Ihren Kernel kompilieren:

options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication

11.6.3.2. Oracle-Benutzer anlegen

Legen Sie den Account oracle an. Der Account unterschiedet sich von normalen Accounts dadurch, dass er eine Linux-Shell zugeordnet bekommen muss. Fügen Sie /compat/linux/bin/bash in die Datei /etc/shells ein und setzen Sie die Shell für den oracle-Account auf /compat/linux/bin/bash.


11.6.3.3. Umgebung

Neben den normalen Oracle-Variablen, wie z.B. ORACLE_HOME und ORACLE_SID müssen Sie die folgenden Variablen setzen:

Variable Wert
LD_LIBRARY_PATH $ORACLE_HOME/lib
CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip
PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin

Es ist empfehlenswert, alle Variablen in der Datei .profile zu setzen. Ein komplettes Beispiel sieht folgendermaßen aus:

ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH
PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin
PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin
PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin
export PATH

11.6.4. Oracle installieren

Auf Grund einer kleinen Unregelmäßigkeit im Linux-Emulator müssen Sie das Verzeichnis .oracle unter /var/tmp erzeugen, bevor Sie das Installationsprogramm starten. Das Verzeichnis muss dem Account oracle gehören. Sie sollten Oracle nun ohne Probleme installieren können. Treten dennoch Probleme auf, überprüfen Sie zuerst Ihre Oracle-Distribution und Ihre Konfiguration. Nachdem Sie Oracle erfolgreich installiert haben, installieren Sie die Patches wie in den zwei folgenden Abschnitten beschrieben:

Ein häufiges Problem ist, dass der TCP Protokoll-Adapter nicht korrekt installiert wird. Daraus folgt, dass Sie keine TCP-Listener starten können. Dieses Problem kann durch folgende Schritte behoben werden:

# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk ntcontab.o
# cd $ORACLE_HOME/lib
# ar r libnetwork.a ntcontab.o
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk install

Vergessen Sie nicht, root.sh nochmals auszuführen!


11.6.4.1. root.sh patchen

Während der Oracle-Installation werden einige Aktionen, die als root ausgeführt werden müssen, in ein Shell-Skript mit dem Namen root.sh gespeichert. Dieses Skript befindet sich im Verzeichnis orainst. Verwenden Sie folgenden Patch für root.sh, damit es das richtige chown Kommando verwendet, oder lassen Sie das Skript alternativ unter einer Linux-Shell ablaufen:

*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this script

Wenn Sie Oracle nicht von CD-ROM installieren, können Sie Quelldatei für root.sh verändern. Sie heißt rthd.sh und befindet sich im orainst-Verzeichnis des Quellcodebaums.


11.6.4.2. genclntsh patchen

Das Skript genclntsh wird verwendet, um eine Shared-Library für Clients zu erzeugen. Diese wird bei der Erzeugung der Demos verwendet. Verwenden Sie folgenden Patch, um die Definition von PATH auszukommentieren:

*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst

11.6.5. Oracle starten

Wenn Sie den Anweisungen gefolgt sind, sollten Sie nun in der Lage sein, Oracle zu starten, genau so, wie Sie dies auch unter Linux tun würden.


11.7. Weiterführende Themen

Wenn Sie sich fragen, wie die Linux-Binärkompatibilität unter FreeBSD realisiert wurde, sollten Sie diesen Abschnitt lesen. Der Großteil der folgenden Informationen stammt aus einer E-Mail, die von Terry Lambert () an die FreeBSD-Chat-Mailingliste () geschrieben wurde (Message ID: <199906020108.SAA07001@usr09.primenet.com>).


11.7.1. Wie funktioniert es?

FreeBSD verfügt über eine “execution class loader” genannte Abstraktion. Dabei handelt es sich um einen Eingriff in den execve(2) Systemaufruf.

FreeBSD verfügt über eine Liste von Ladern, anstelle eines einzigen, auf #! zurückgreifenden Laders, um Shell-Interpreter oder Shell-Skripte auszuführen.

Historisch gesehen untersuchte der einzige, auf UNIX-Plattformen vorhandene Lader die "magische Zahl" (in der Regel die ersten 4 oder 8 Bytes der Datei), um festzustellen, ob der Binärtyp dem System bekannt war. War dies der Fall, wurde der Binärlader aufgerufen.

Wenn es sich nicht um den zum System gehörigen Binärtyp handelte, gab execve(2) einen Fehler zurück, und die Shell versuchte stattdessen, die Datei als Shell-Befehl auszuführen.

Dabei wurde als Standardeinstellung “was auch immer die aktuelle Shell ist” festgelegt.

Später wurde ein Hack in sh(1) eingefügt, der die zwei ersten Zeichen untersuchte. Wenn diese :\n entsprachen, wurde stattdessen die csh(1)-Shell aufgerufen (wir glauben, dass dies zuerst von SCO umgesetzt wurde).

FreeBSD versucht heute eine Liste von Ladern, unter denen sich ein allgemeiner Lader für Interpreter befindet. Der auszuführende Interpreter wird im ersten, durch Leerzeichen getrennten Feld, der #!-Zeile angegeben. Lässt sich der Interpreter nicht ermitteln, wird auf /bin/sh zurückgegriffen.

Für die Linux ABI-Unterstützung erkennt FreeBSD die magische Zahl als ELF-Binärdatei (Zu diesem Zeitpunkt wird nicht zwischen FreeBSD, Solaris, Linux oder anderen Systemen unterschieden, die über ELF-Binärdateien verfügen.).

Der ELF-Lader sucht nach einer speziellen Kennzeichnung, die aus einem Kommentarabschnitt in der ELF-Datei besteht, und die in SVR4/Solaris ELF Binärdateien nicht vorhanden ist.

Damit Linux-Binärdateien (unter FreeBSD) funktionieren, müssen sie als Linux gekennzeichnet werden, und zwar durch brandelf(1):

# brandelf -t Linux file

Nachdem dies geschehen ist, erkennt der ELF-Lader die Linux-Kennzeichnung der Datei.

Wenn der ELF-Lader die Linux-Kennzeichnung sieht, wird ein Zeiger in der proc-Struktur ersetzt. Alle Systemaufrufe werden durch diesen Zeiger indiziert (in einem traditionellen UNIX System wäre das ein sysent[]-Strukturfeld, das die Systemaufrufe enthält). Der Prozess wird weiterhin speziell gekennzeichnet, so dass der Trap-vector im Signal-trampoline-code eine spezielle Behandlung erfährt und das Linux-Kernelmodul verschiedene kleinere Korrekturen vornehmen kann.

Der Linux-Systemaufrufvektor enthält neben anderen Dingen eine Liste der sysent[]-Einträge, deren Adressen sich im Kernelmodul befinden.

Wenn ein Linux-Programm einen Systemaufruf ausführt, dereferenziert die Trap-Behandlungsroutine den Zeiger auf die Eintrittspunkte für die Systemaufrufe und erhält damit die Linux-Eintrittspunkte und nicht die FreeBSD-Eintrittspunkte.

Zusätzlich verändert der Linuxmodus die Systempfade dynamisch; genauso, wie dies die Option union beim Einbinden von Dateisystemen macht (Achtung: nicht das Dateisystem unionfs!). Zuerst wird die Datei im Verzeichnis /compat/linux/Originalpfad gesucht, danach, wenn sie dort nicht gefunden wurde, wird sie im FreeBSD-Verzeichnis /Originalpfad gesucht. Dadurch wird sichergestellt, dass Binärdateien, die zur Ausführung andere Binärdateien benötigen, ausgeführt werden können (so dass alle Linux-Werkzeuge unter der ABI laufen). Dies bedeutet auch, dass Linux-Binärdateien FreeBSD-Binärdateien laden und ausführen können, wenn keine passenden Linux-Binärdateien vorhanden sind. Ein in /compat/linux plaziertes uname(1) kann damit Linux-Programmen vorgaukeln, dass sie auf einem Linux-System laufen.

Im Endeffekt gibt es einen Linux-Kernel innerhalb des FreeBSD-Kernels. Die Sprungtabellen für Linux- beziehungsweise FreeBSD-Systemaufrufe verweisen allerdings auf dieselben Funktionen, die Kerneldienste wie Dateisystemoperationen, Operationen für den virtuellen Speicher, Signalübermittlung und System V IPC bereitstellen, Der einzige Unterschied ist, dass Binärdateien unter FreeBSD FreeBSD-glue-Funktionen verwenden. Linux-Binärdateien hingegen verwenden die Linux-glue-Funktionen. Die meisten älteren Betriebssysteme hatten ihre eigenen glue-Funktionen: Funktionsadressen in einem globalen, statischen sysent[] Strukturfeld an Stelle von Funktionsadressen, die durch einen dynamisch initialisierten Zeiger aus der proc Struktur, die den Aufruf gemacht hatte, dereferenziert wurden.

Welche ist die echte FreeBSD-ABI? Das spielt keine Rolle. Grundsätzlich ist der einzige Unterschied (zurzeit ist das so; dies könnte sich in zukünftigen Versionen leicht ändern und wird sich wahrscheinlich auch ändern), dass die FreeBSD-glue-Funktionen statisch in den Kernel gelinkt sind, und dass die Linux-glue-Funktionen statisch gelinkt oder über ein Modul eingebunden werden können.

Ja, aber ist das wirkliche eine Emulation? Nein. Es ist eine Implementierung eines ABIs, keine Emulation. Es ist kein Emulator (oder Simulator, um der nächsten Frage zuvorzukommen) beteiligt.

Warum wird es manchmal “Linux-Emulation” genannt? Um es schwerer zu machen, FreeBSD zu verkaufen. Wirklich, das kommt daher, weil dies zu einer Zeit implemtiert wurde, in der es kein anderes Wort (als Emulation) gab, das beschrieb, was vor sich ging. Wenn der Kernel nicht entsprechend konfiguriert wurde oder das Modul geladen wurde, war es falsch zu behaupten, FreeBSD würde Linux-Binärprogramme ausführen. Man benötigte ein Wort, das beschrieb, was da geladen wurde - daher “Der Linux-Emulator”.

III. Systemadministration

Die restlichen Kapitel behandeln alle Aspekte der FreeBSD Systemadministration. Am Anfang jedes Kapitels finden Sie eine Zusammenfassung, die beschreibt, was Sie nach dem Durcharbeiten des Kapitels gelernt haben. Weiterhin werden die Voraussetzungen beschrieben, die für das Durcharbeiten des Kapitels erforderlich sind.

Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin benötigen. Sie brauchen Sie nicht in einer bestimmten Reihenfolge zu lesen, noch müssen Sie die Kapitel lesen, bevor Sie anfangen, FreeBSD zu benutzen.


Kapitel 12. Konfiguration und Tuning

Geschrieben von Chern Lee. Nach einem Tutorium von Mike Smith. Basiert ebenfalls auf tuning(7) von Matt Dillon. Übersetzt von Martin Heinen.

12.1. Übersicht

Ein korrekt konfiguriertes System kann die Arbeit, die bei der zukünftigen Pflege und bei Migrationen des Systems entsteht, erheblich reduzieren. Dieses Kapitel beschreibt die Konfiguration von FreeBSD sowie Maßnahmen zur Leistungssteigerung von FreeBSD-Systemen.

Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen:

  • Wie Sie effizient Dateisysteme und Swap-Partitionen auf Ihrer Festplatte einrichten.

  • Die Grundlagen der Konfiguration mit rc.conf und des Systems zum Starten von Anwendungen in /usr/local/etc/rc.d.

  • Wie Sie Netzwerkkarten konfigurieren und testen.

  • Wie Sie virtuelle Hosts und Netzwerkgeräte konfigurieren.

  • Wie Sie die verschiedenen Konfigurationsdateien in /etc benutzen.

  • Wie Sie mit sysctl-Variablen FreeBSD einstellen können.

  • Wie Sie die Platten-Performance einstellen und Kernel-Parameter modifizieren können.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • die Grundlagen von UNIX und FreeBSD (Kapitel 4) verstehen.

  • Damit vertraut sein, wie Sie einen Kernel konfigurieren und kompilieren (Kapitel 9).


12.2. Vorbereitende Konfiguration

12.2.1. Layout von Partitionen


12.2.1.1. Partitionen

Wenn Sie Dateisysteme mit bsdlabel(8) oder sysinstall(8) anlegen, sollten Sie beachten, dass Festplatten auf Daten in den äußeren Spuren schneller zugreifen können als auf Daten in den inneren Spuren. Daher sollten die kleineren oft benutzten Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition, an den äußeren Rand der Platte gelegt werden. Die größeren Partitionen wie /usr sollten in die inneren Bereiche gelegt werden. Es empfiehlt sich, die Partitionen in einer ähnlichen Reihenfolge wie Root-Partition, Swap, /var und /usr anzulegen.

Die Größe der /var-Partition ist abhängig vom Zweck der Maschine. Das /var-Dateisystem enthält hauptsächlich Postfächer, den Spoolbereich zum Drucken und Logdateien. Abhängig von der Anzahl der Systembenutzer und der Aufbewahrungszeit für Logdateien, können gerade die Postfächer und Logdateien zu ungeahnten Größen wachsen. Die meisten Benutzer werden selten mehr als etwa ein Gigabyte in /var benötigen.

Anmerkung: Ein paar Mal wird es vorkommen, dass viel Festplattenspeicher in /var/tmp gebraucht wird. Wenn neue Software mit pkg_add(1) installiert wird, extrahieren die Paketwerkzeuge eine vorübergehende Kopie der Pakete unter /var/tmp. Die Installation grosser Softwarepakete wie Firefox, Openoffice oder LibreOffice kann sich wegen zu wenig Speicherplatz in /var/tmp als trickreich herausstellen.

Die /usr-Partition enthält viele der Hauptbestandteile des Systems, dazu gehöhren die ports(7)-Sammlung (empfohlen) und die Quellen (optional). Sowohl die Ports als auch die Quellen des Basissystems sind zum Zeitpunkt der Installation optional, trotzdem sollten Sie mindestens zwei Gigabyte für diese Partition vorsehen.

Wenn Sie die Größe der Partitionen festlegen, beachten Sie bitte das Wachstum Ihres Systems. Wenn Sie den Platz auf einer Partition vollständig aufgebraucht haben, eine andere Partition aber kaum benutzen, kann die Handhabung des Systems schwierig werden.

Anmerkung: Die automatische Partitionierung von sysinstall(8) mit Auto-defaults legt manchmal zu kleine / und /var-Partition an. Partitionieren Sie weise und großzügig.


12.2.1.2. Swap Partition

Als Daumenregel sollten Sie doppelt soviel Speicher für die Swap-Partition vorsehen, als Sie Hauptspeicher haben. Verfügt die Maschine beispielsweise über 128 Megabyte Hauptspeicher, sollten Sie 256 Megabyte für den Swap-Bereich vorsehen. Systeme mit weniger Speicher werden wahrscheinlich mit viel mehr Swap mehr leisten. Es wird nicht empfohlen, weniger als 256 Megabyte Swap einzurichten. Außerdem sollten Sie künftige Speichererweiterungen beachten, wenn Sie die Swap-Partition einrichten. Die VM-Paging-Algorithmen im Kernel sind so eingestellt, dass Sie am besten laufen, wenn die Swap-Partition mindestens doppelt so groß wie der Hauptspeicher ist. Zu wenig Swap kann zu einer Leistungsverminderung im VM page scanning Code führen, sowie Probleme verursachen, wenn Sie später mehr Speicher in Ihre Maschine bauen.

Auf größeren Systemen mit mehreren SCSI-Laufwerken (oder mehreren IDE-Laufwerken an unterschiedlichen Controllern) empfehlen wir Ihnen, Swap-Bereiche auf bis zu vier Laufwerken einzurichten. Diese Swap-Partitionen sollten ungefähr dieselbe Größe haben. Der Kernel kann zwar mit beliebigen Größen umgehen, aber die internen Datenstrukturen skalieren bis zur vierfachen Größe der größten Partition. Ungefähr gleich große Swap-Partitionen erlauben es dem Kernel, den Swap-Bereich optimal über die Laufwerke zu verteilen. Große Swap-Bereiche, auch wenn sie nicht oft gebraucht werden, sind nützlich, da sich ein speicherfressendes Programm unter Umständen auch ohne einen Neustart des Systems beenden lässt.


12.2.1.3. Warum partitionieren?

Gegen eine einzelne Partition sprechen mehrere Gründe. Jede Partition hat im Betrieb unterschiedliche Eigenschaften und die Trennung der Partitionen erlaubt es, die Dateisysteme an diese Eigenschaften anzupassen. Die Root- und /usr-Partitionen weisen meist nur lesende Zugriffe auf, während /var und /var/tmp hauptsächlich beschrieben werden.

Indem Sie ein System richtig partitionieren, verhindern Sie, dass eine Fragmentierung in den häufig beschriebenen Partitionen auf die meist nur gelesenen Partitionen übergreift. Wenn Sie die häufig beschriebenen Partitionen an den Rand der Platte, legen, dann wird die I/O-Leistung diesen Partitionen steigen. Die I/O-Leistung ist natürlich auch für große Partitionen wichtig, doch erzielen Sie eine größere Leistungssteigerung, wenn Sie /var an den Rand der Platte legen. Schließlich sollten Sie noch die Stabilität des Systems beachten. Eine kleine Root-Partition, auf die meist nur lesend zugegriffen wird, überlebt einen schlimmen Absturz wahrscheinlich eher als eine große Partition.


12.3. Basiskonfiguration

Informationen zur Systemkonfiguration sind hauptsächlich in /etc/rc.conf, die meist beim Start des Systems verwendet wird, abgelegt. Der Name der Datei zeigt ihren Zweck an: Sie enthält die Konfigurationen für die rc* Dateien.

In rc.conf werden die Vorgabewerte aus /etc/defaults/rc.conf überschrieben. Die Vorgabedatei sollte nicht nach /etc kopiert werden, da sie die Vorgabewerte und keine Beispiele enthält. Jede systemspezifische Änderung wird in rc.conf vorgenommen.

Um den administrativen Aufwand gering zu halten, existieren in geclusterten Anwendungen mehrere Strategien, globale Konfigurationen von systemspezifischen Konfigurationen zu trennen. Der empfohlene Weg hält die globale Konfiguration in einer separaten Datei z.B. /etc/rc.conf.local. Zum Beispiel so:

  • /etc/rc.conf:

    sshd_enable="YES"
    keyrate="fast"
    defaultrouter="10.1.1.254"
    
  • /etc/rc.conf.local:

    hostname="node1.example.org"
    ifconfig_fxp0="inet 10.1.1.1/8"
    

Die rc.conf Datei kann dann auf jedes System mit rsync oder einem ähnlichen Programm verteilt werden, während die rc.conf.local Datei dabei systemspezifisch bleibt.

Bei einem Upgrade des Systems mit sysinstall(8) oder make world wird rc.conf nicht überschrieben, so dass die Systemkonfiguration erhalten bleibt.

Tipp: Die Konfigurationsdatei /etc/rc.conf wird von sh(1) gelesen. Dies erlaubt es dem Systemadministrator, eine bestimmte Menge an Logik dieser Datei hinzuzufügen, was dabei helfen kann, komplexe Konfigurationsszenarien zu erstellen. Lesen Sie dazu rc.conf(5), um weitere Informationen zu diesem Thema zu erhalten.


12.4. Konfiguration von Anwendungen

Installierte Anwendungen haben typischerweise eigene Konfigurationsdateien, die eine eigene Syntax verwenden. Damit diese Dateien leicht von der Paketverwaltung gefunden und verwaltet werden können, ist es wichtig, sie vom Basissystem zu trennen.

Für gewöhnlich werden diese Dateien in /usr/local/etc installiert. Besitzt eine Anwendung viele Konfigurationsdateien, werden diese in einem separaten Unterverzeichnis abgelegt.

Wenn ein Port oder ein Paket installiert wird, werden normalerweise auch Beispiele für die Konfigurationsdateien installiert. Diese erkennt man gewöhnlich an dem Suffix .default. Wenn keine Konfigurationsdateien für eine Anwendung existieren, werden sie durch Kopieren der .default Dateien erstellt.

Als Beispiel sei /usr/local/etc/apache gezeigt:

-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf
-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf.default
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf.default
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic.default
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types.default
-rw-r--r--  1 root  wheel   7980 May 20  1998 srm.conf
-rw-r--r--  1 root  wheel   7933 May 20  1998 srm.conf.default

Anhand der Dateigröße erkennen Sie, dass sich nur srm.conf geändert hat. Eine spätere Aktualisierung des Apache-Ports überschreibt diese Datei nicht.


12.5. Start von Diensten

Beigetragen von Tom Rhodes.

Viele Benutzer installieren Software Dritter auf FreeBSD mithilfe der Ports-Sammlung. Häufig soll die Software bei einem Systemstart mitgestartet werden. Beispielsweise sollen die Dienste mail/postfix oder www/apache13 nach einem Systemstart laufen. Dieser Abschnitt stellt die Startprozeduren für Software Dritter vor.

Unter FreeBSD werden die meisten der im System enthaltenen Dienste wie cron(8) mithilfe von Systemskripten gestartet. Diese Skripten sind abhängig von der FreeBSD- oder Hersteller-Version. Allerdings kann ein Dienst mit einfachen Skripten gestartet werden.


12.5.1. Dienste über das rc.d-System starten

Mit rc.d lässt sich der Start von Anwendungen besser steuern als mit den vorher besprochenen Startskripten. Mit den im Abschnitt rc.d besprochenen Schlüsselwörtern können Anwendungen in einer bestimmten Reihenfolge (zum Beispiel nach DNS) gestartet werden und Optionen können in rc.conf statt fest im Startskript der Anwendung festgelegt werden. Ein einfaches Startskript sieht wie folgt aus:

#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=utility
rcvar=utility_enable

command="/usr/local/sbin/utility"

load_rc_config $name

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}

run_rc_command "$1"

Dieses Skript stellt sicher, dass utility nach den DAEMON-Pseudodiensten gestartet wird. Es stellt auch eine Methode bereit, die Prozess-ID (PID) der Anwendung in einer Datei zu speichern.

In /etc/rc.conf könnte für diese Anwendung die folgende Zeile stehen:

utility_enable="YES"

Die Methode erleichtert den Umgang mit Kommandozeilenargumenten, bindet Funktionen aus /etc/rc.subr ein, ist kompatibel zum Werkzeug rcorder(8) und lässt sich über rc.conf leichter konfigurieren.


12.5.2. Andere Arten, um Dienste zu starten

Dienste wie POP3 oder IMAP können über inetd(8) gestartet werden. Nach der Installation der Anwendung aus der Ports-Sammlung muss eine Konfigurationszeile in der Datei /etc/inetd.conf hinzugefügt oder in der aktuellen Konfiguration durch Entfernen der Kommentare aktiviert werden. Der Abschnitt Abschnitt 30.2 beschreibt den inetd und dessen Konfiguration.

Systemdienste können auch mit cron(8) gestartet werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil cron(8) die Prozesse unter dem Eigentümer der crontab startet, ist es möglich, dass Dienste von nicht-root Benutzern gestartet und gepflegt werden können.

Dies nutzt eine Eigenschaft von cron(8): Für die Zeitangabe kann @reboot eingesetzt werden. Damit wird das Kommando gestartet, wenn cron(8) kurz nach dem Systemboot gestartet wird.


12.6. Programme mit cron starten

Beigetragen von Tom Rhodes.

Ein sehr nützliches Werkzeug von FreeBSD ist cron(8). cron läuft im Hintergrund und überprüft fortlaufend die Datei /etc/crontab. Beim Start sucht cron neue crontab-Dateien im Verzeichnis /var/cron/tabs. In den crontab-Dateien wird festgelegt, welche Programme zu welchem Zeitpunkt laufen sollen.

Das Werkzeug cron verwendet zwei verschiedene Konfigurationsdateien: Die System-crontab und die Benutzer-crontab. Der einzige Unterschied zwischen beiden Formaten ist das sechste Feld. In der System-crontab gibt das sechste Feld das Konto an, unter dem ein Kommando läuft. Aus der System-crontab können daher Kommandos unter beliebigen Konten gestartet werden. In der Benutzer-crontab gibt das sechste Feld das auszuführende Kommando an. Alle Kommandos laufen unter dem Konto, unter dem die crontab erstellt wurde (ein wichtiges Sicherheitsmerkmal).

Anmerkung: Benutzer können mit Benutzer-crontabs ohne root-Rechte Befehle terminieren. Die Kommandos in Benutzer-crontabs laufen unter dem Benutzer, der die crontab erstellt hat.

Der Benutzer root kann, wie jeder andere Benutzer, eine Benutzer-crontab besitzen. Die Benutzer-crontab von root ist nicht mit der Datei /etc/crontab, der System-crontab, zu verwechseln. Normalerweise besitzt root, wegen der Existenz der System-crontab, keine eigene Benutzer-crontab.

Der folgende Auszug aus der System-crontab /etc/crontab zeigt den Aufbau einer crontab-Datei:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
# (1)
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin (2)
HOME=/var/log
#
#
#minute	hour	mday	month	wday	who	command (3)
#
#
*/5	*	*	*	*	root	/usr/libexec/atrun (4)
(1)
Das Zeichen # leitet, wie in den meisten Konfigurationsdateien, einen Kommentar ein. Benutzen Sie Kommentare, um die Funktion eines Eintrags zu erläutern. Kommentare müssen in einer extra Zeile stehen. Sie können nicht in derselben Zeile wie ein Kommando stehen, da sie sonst Teil des Kommandos wären. Leerzeilen in dieser Datei werden ignoriert.
(2)
Umgebungsvariablen werden mit dem Gleichheits-Zeichen (=) festgelegt. Im Beispiel werden die Variablen SHELL, PATH und HOME definiert. Wenn die Variable SHELL nicht definiert wird, benutzt cron die Shell sh. Wird die Variable PATH nicht gesetzt, müssen alle Pfadangaben absolut sein, da es keinen Vorgabewert für PATH gibt. Der Vorgabewert für HOME ist das Heimatverzeichnis des Accounts, dem die crontab gehört.
(3)
In dieser Zeile werden sieben Felder beschrieben: minute, hour, mday, month, wday, who und command. Die ersten Felder legen den Zeitpunkt fest, an dem ein Kommando laufen soll. Das Feld minute legt die Minute fest, das Feld hour die Stunde, das Feld mday den Tag des Monats. Im Feld month wird der Monat und im Feld wday der Wochentag festgelegt. Alle Felder müssen numerische Werte enthalten und die Zeitangaben sind im 24-Stunden-Format. Das Feld who gibt es nur in der Datei /etc/crontab und gibt den Account an, unter dem das Kommando laufen soll. In den crontab-Dateien einzelner Accounts existiert dieses Feld nicht. Im letzten Feld wird schließlich das auszuführende Kommando angegeben.
(4)
Diese Zeile definiert die Zeitpunkte an denen das Kommando atrun laufen soll. Beachten Sie die Zeichenfolge */5 gefolgt von mehreren *-Zeichen. Das Zeichen * ist ein Platzhalter und steht für jede mögliche Zeit. Diese Zeile führt das Kommando atrun unter dem root-Account alle fünf Minuten aus. Mehr über das Kommando atrun erfahren Sie in der Hilfeseite atrun(8).

Bei den Kommandos können beliebige Optionen angegeben werden. Wenn das Kommando zu lang ist und auf der nächsten Zeile fortgesetzt werden soll, muss am Ende der Zeile das Fortsetzungszeichen (\) angegeben werden.

Bis auf das sechste Feld, das den Account angibt, sieht jede crontab-Datei so wie das Beispiel aus. Das sechste Feld existiert nur in der Systemdatei /etc/crontab. In den restlichen crontab-Dateien fehlt dieses Feld.


12.6.1. crontab installieren

Wichtig: Die nachstehende Prozedur gilt nur für Benutzer-crontabs. Die System-crontab können Sie einfach mit Ihrem Lieblingseditor editieren. Das Werkzeug cron bemerkt, dass sich die Datei geändert hat und wird die neue Version benutzen. Lesen Sie bitte auch die FAQ zur Meldung root: not found.

Eine Benutzer-crontab, beispielsweise die Datei crontab, können Sie mit jedem Editor erstellen. Die Benutzer-crontab installieren Sie mit dem nachstehenden Befehl:

# crontab crontab

Das Argument zum Befehl crontab ist die vorher erstellte Datei crontab.

Der Befehl crontab -l zeigt die installierte crontab-Datei an.

Benutzer, die eine eigene crontab-Datei ohne Vorlage erstellen wollen, können den Befehl crontab -e verwenden. Dieser Befehl ruft einen Editor auf und installiert beim Verlassen des Editors die crontab-Datei.

Wollen Sie die installierte Benutzer-crontab entfernen, rufen Sie den Befehl crontab mit der Option -r auf.


12.7. Das rc-System für Systemdienste

Beigetragen von Tom Rhodes.

2002 wurde das rc.d-System von NetBSD zum Start von Systemdiensten in FreeBSD integriert. Die zu diesem System gehörenden Dateien sind im Verzeichnis /etc/rc.d abgelegt. Die Skripten in diesem Verzeichnis akzeptieren die Optionen start, stop und restart. Beispielsweise kann sshd(8) mit dem nachstehenden Kommando neu gestartet werden:

# /etc/rc.d/sshd restart

Analog können Sie andere Dienste starten und stoppen. Normalerweise werden die Dienste beim Systemstart über Einträge in der Datei rc.conf(5) automatisch gestartet. Der Network Address Translation Dæmon wird zum Beispiel mit dem folgenden Eintrag in /etc/rc.conf aktiviert:

natd_enable="YES"

Wenn dort bereits die Zeile natd_enable="NO" existiert, ändern Sie einfach NO in YES. Die rc-Skripten starten, wie unten beschrieben, auch abhängige Dienste.

Da das rcNG-System primär zum automatischen Starten und Stoppen von Systemdiensten dient, funktionieren die Optionen start, stop und restart nur, wenn die entsprechenden Variablen in /etc/rc.conf gesetzt sind. Beispielsweise funktioniert das Kommando sshd restart nur dann, wenn in /etc/rc.conf die Variable sshd_enable auf YES gesetzt wurde. Wenn Sie die Optionen start, stop oder restart unabhängig von den Einstellungen in /etc/rc.conf benutzen wollen, müssen Sie den Optionen mit dem Präfix “one” verwenden. Um beispielsweise sshd unabhängig von den Einstellungen in /etc/rc.conf neu zu starten, benutzen Sie das nachstehende Kommando:

# /etc/rc.d/sshd onerestart

Ob ein Dienst in /etc/rc.conf aktiviert ist, können Sie leicht herausfinden, indem Sie das entsprechende rc.d-Skript mit der Option rcvar aufrufen. Ein Administrator kann beispielsweise wie folgt prüfen, ob der sshd-Dienst in /etc/rc.conf aktiviert ist:

# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES

Anmerkung: Die zweite Zeile (# sshd) wird vom Kommando sshd ausgegeben; sie kennzeichnet nicht die Eingabeaufforderung von root.

Ob ein Dienst läuft, kann mit der Option status abgefragt werden. Das folgende Kommando überprüft, ob der sshd auch wirklich gestartet wurde:

# /etc/rc.d/sshd status
sshd is running as pid 433.

Einige Dienste können über die Option reload neu initialisiert werden. Dazu wird dem Dienst über ein Signal mitgeteilt, dass er seine Konfigurationsdateien neu einlesen soll. Oft wird dazu das Signal SIGHUP verwendet. Beachten Sie aber, dass nicht alle Dienste diese Option unterstützen.

Die meisten Systemdienste werden beim Systemstart vom rc.d-System gestartet. Zum Beispiel aktiviert das Skript bgfsck die Prüfung von Dateisystemen im Hintergrund. Das Skript gibt die folgende Meldung aus, wenn es gestartet wird:

Starting background file system checks in 60 seconds.

Viele Systemdienste hängen von anderen Diensten ab. NIS und andere RPC-basierende Systeme hängen beispielsweise von dem rpcbind-Dienst (portmapper) ab. Im Kopf der Startskripten befinden sich die Informationen über Abhängigkeiten von anderen Diensten und weitere Metadaten.Mithilfe dieser Daten bestimmt das Programm rcorder(8) beim Systemstart die Startreihenfolge der Dienste.

Folgende Schlüsselwörter müssen im Kopf aller Startskripten verwendet werden (da sie von rc.subr(8) zum “Aktivieren” des Startskripts benötigt werden:

  • PROVIDE: Gibt die Namen der Dienste an, die mit dieser Datei zur Verfügung gestellt werden.

Die folgenden Schlüsselwörter können im Kopf des Startskripts angegeben werden. Sie sind zwar nicht unbedingt notwendig, sind aber hilfreich beim Umgang mit rcorder(8):

  • REQUIRE: Gibt die Namen der Dienste an, von denen dieser Dienst abhängt. Diese Datei wird nach den angegebenen Diensten ausgeführt.

  • BEFORE: Zählt Dienste auf, die auf diesen Dienst angewiesen sind. Diese Datei wird vor den angegebenen Diensten ausgeführt.

Durch das Verwenden dieser Schlüsselwörter kann ein Administrator die Startreihenfolge von Systemdiensten feingranuliert steuern, ohne mit den Schwierigkeiten des “runlevel”-Systems anderer UNIX Systeme kämpfen zu müssen.

Weitere Informationen über das rc.d-System finden sich in den Manualpages zu rc(8) sowie rc.subr(8). Wenn Sie Ihre eigenen rc.d-Skripte schreiben wollen, sollten Sie den Artikel Practical rc.d scripting in BSD lesen.


12.8. Einrichten von Netzwerkkarten

Beigetragen von Marc Fonvieille.

Ein Rechner ohne Netzanschluss ist heute nicht mehr vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu den alltäglichen Aufgaben eines FreeBSD Administrators.


12.8.1. Bestimmen des richtigen Treibers

Bevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen, wissen welchen Chip die Karte benutzt und bestimmen, ob es sich um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der unterstützten PCI- und ISA-Karten finden Sie in der Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre Karte dort aufgeführt ist.

Wenn Sie wissen, dass Ihre Karte unterstützt wird, müssen Sie den Treiber für Ihre Karte bestimmen. /usr/src/sys/conf/NOTES und /usr/src/sys/arch/conf/NOTES enthalten eine Liste der verfügbaren Treiber mit Informationen zu den unterstützten Chipsätzen und Karten. Wenn Sie sich nicht sicher sind, ob Sie den richtigen Treiber ausgewählt haben, lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält weitere Informationen über die unterstützten Geräte und macht auch auf mögliche Probleme aufmerksam.

Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie meistens nicht lange nach dem passenden Treiber zu suchen. Die Treiber zu diesen Karten sind schon im GENERIC-Kernel enthalten und die Karte sollte während des Systemstarts erkannt werden:

dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
miibus0: <MII bus> on dc0
bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
bmtphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc0: Ethernet address: 00:a0:cc:da:da:da
dc0: [ITHREAD]
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
miibus1: <MII bus> on dc1
bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
bmtphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: Ethernet address: 00:a0:cc:da:da:db
dc1: [ITHREAD]

Im Beispiel erkennt das System zwei Karten, die den dc(4) Treiber benutzen.

Ist der Treiber für Ihre Netzwerkkarte nicht in GENERIC enthalten, müssen Sie den Treiber laden, um die Karte zu benutzen. Sie können den Treiber auf zwei Arten laden:

  • Am einfachsten ist es, das Kernelmodul für Ihre Karte mit kldload(8) zu laden. Allerdings gibt es nicht für alle Karten Kernelmodule; zum Beispiel gibt es keine Kernelmodule für ISA-Karten.

  • Alternativ können Sie den Treiber für die Karte fest in den Kernel einbinden. Schauen Sie sich dazu /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES und die Hilfeseite des Treibers, den Sie in den Kernel einbinden möchten, an. Die Übersetzung des Kernels wird in Kapitel 9 beschrieben. Wenn Ihre Karte während des Systemstarts vom Kernel (GENERIC) erkannt wurde, müssen Sie den Kernel nicht neu übersetzen.


12.8.1.1. Windows-NDIS-Treiber einsetzen

Leider stellen nach wie vor viele Unternehmen die Spezifikationen ihrer Treiber der Open Source Gemeinde nicht zur Verfügung, weil sie diese Informationen als Geschäftsgeheimnisse betrachten. Daher haben die Entwickler von FreeBSD und anderen Betriebssystemen nur zwei Möglichkeiten. Entweder versuchen sie in einem aufwändigen Prozess den Treiber durch Reverse Engineering nachzubauen, oder sie versuchen, die vorhandenen Binärtreiber der Microsoft Windows-Plattform zu verwenden. Die meisten Entwickler, darunter auch die an FreeBSD beteiligten, haben sich für den zweiten Ansatz entschieden.

Bill Paul (wpaul) ist es zu verdanken, dass es seit eine “native” Unterstützung der Network Driver Interface Specification (NDIS) gibt. Der FreeBSD NDISulator (auch als Project Evil bekannt) nutzt den binären Windows-Treiber, indem er diesem vorgibt, unter Windows zu laufen. Da der ndis(4)-Treiber eine Windows-Binärdatei nutzt, kann er nur auf i386- und amd64-Systemen verwendet werden.

Anmerkung: Der ndis(4)-Treiber unterstützt primär PCI-, CardBus- sowie PCMCIA-Geräte, USB-Geräte werden hingegen noch nicht unterstützt.

Um den NDISulator zu verwenden, benötigen Sie drei Dinge:

  1. Die Kernelquellen

  2. Den Windows XP-Binärtreiber (mit der Erweiterung .SYS)

  3. Die Konfigurationsdatei des Windows XP-Treibers (mit der Erweiterung .INF)

Suchen Sie die Dateien für Ihre Karte. Diese befinden sich meistens auf einer beigelegten CD-ROM, oder können von der Internetseite des Herstellers heruntergeladen werden. In den folgenden Beispielen werden die Dateien W32DRIVER.SYS und W32DRIVER.INF verwendet.

Anmerkung: Sie können einen Windows/i386-Treiber nicht unter FreeBSD/amd64 einsetzen, vielmehr benötigen Sie dafür einen Windows/amd64-Treiber.

Als Nächstes kompilieren Sie den binären Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als root ndisgen(8) auf:

# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

ndisgen(8) arbeitet interaktiv, benötigt es weitere Informationen, so fragt es Sie danach. Als Ergebnis erhalten Sie ein Kernelmodul im Arbeitsverzeichnis, das Sie wie folgt laden können:

# kldload ./W32DRIVER.ko

Neben dem vorhin erzeugten Kernelmodul müssen Sie auch die Kernelmodule ndis.ko und if_ndis.ko laden. Diese Module sollten automatisch geladen werden, wenn Sie ein von ndis(4) abhängiges Modul laden. Wollen Sie die Module hingegen manuell laden, geben Sie die folgenden Befehle ein:

# kldload ndis
# kldload if_ndis

Der erste Befehl lädt dabei den NDIS-Miniport-Treiber, der zweite das tatsächliche Netzwerkgerät.

Überprüfen Sie nun die Ausgabe von dmesg(8) auf eventuelle Fehler während des Ladevorgangs. Gab es dabei keine Probleme, sollten Sie eine Ausgabe ähnlich der folgenden erhalten:

ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

Ab jetzt können Sie mit dem Gerät ndis0 wie mit jeder anderen Gerätedatei (etwa dc0) arbeiten.

Wie jedes Kernelmodul können auch die NDIS-Module beim Systemstart automatisch geladen werden. Dazu kopieren Sie das erzeugte Modul (W32DRIVER_SYS.ko) in das Verzeichnis /boot/modules. Danach fügen Sie die folgende Zeile in /boot/loader.conf ein:

W32DRIVER_SYS_load="YES"

12.8.2. Konfiguration von Netzwerkkarten

Nachdem der richtige Treiber für die Karte geladen ist, muss die Karte konfiguriert werden. Unter Umständen ist die Karte schon während der Installation mit sysinstall konfiguriert worden.

Das nachstehende Kommando zeigt die Konfiguration der Karten eines Systems an:

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 00:a0:cc:da:da:da
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 00:a0:cc:da:da:db
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet 10baseT/UTP
        status: no carrier
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

Im Beispiel werden Informationen zu den folgenden Geräten angezeigt:

  • dc0: Der erste Ethernet-Adapter

  • dc1: Der zweite Ethernet-Adapter

  • plip0: Die parallele Schnittstelle (falls Ihr System über eine derartige Schnittstelle verfügt)

  • lo0: Das Loopback-Gerät

Der Name der Netzwerkkarte wird aus dem Namen des Treibers und einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in der die Geräte beim Systemstart erkannt wurden. Die dritte Karte, die den sis(4) Treiber benutzt, würde beispielsweise sis2 heißen.

Der Adapter dc0 aus dem Beispiel ist aktiv. Sie erkennen das an den folgenden Hinweisen:

  1. UP bedeutet, dass die Karte konfiguriert und aktiv ist.

  2. Der Karte wurde die Internet-Adresse (inet) 192.168.1.3 zugewiesen.

  3. Die Subnetzmaske ist richtig (0xffffff00 entspricht 255.255.255.0).

  4. Die Broadcast-Adresse 192.168.1.255 ist richtig.

  5. Die MAC-Adresse der Karte (ether) lautet 00:a0:cc:da:da:da.

  6. Die automatische Medienerkennung ist aktiviert (media: Ethernet autoselect (100baseTX <full-duplex>)). Der Adapter dc1 benutzt das Medium 10baseT/UTP. Weitere Informationen über die einstellbaren Medien entnehmen Sie bitte der Hilfeseite des Treibers.

  7. Der Verbindungsstatus (status) ist active, das heißt es wurde ein Trägersignal entdeckt. Für dc1 wird status: no carrier angezeigt. Das ist normal, wenn kein Kabel an der Karte angeschlossen ist.

Wäre die Karte nicht konfiguriert, würde die Ausgabe von ifconfig(8) so aussehen:

dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 00:a0:cc:da:da:da
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active

Sie brauchen die Berechtigungen von root, um Ihre Karte zu konfigurieren. Die Konfiguration kann auf der Kommandozeile mit ifconfig(8) erfolgen, allerdings müsste sie dann nach jedem Neustart wiederholt werden. Dauerhaft wird die Karte in /etc/rc.conf konfiguriert.

Öffnen Sie /etc/rc.conf mit Ihrem Lieblingseditor und fügen Sie für jede Karte Ihres Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden die nachstehenden Zeilen eingefügt:

ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

Ersetzen Sie dc0, dc1 usw. durch die Gerätenamen Ihrer Karten und setzen Sie die richtigen IP-Adressen ein. Die Hilfeseiten des Treibers und ifconfig(8) enthalten weitere Einzelheiten über verfügbare Optionen. Die Syntax von /etc/rc.conf wird in rc.conf(5) erklärt.

Wenn Sie das Netz während der Installation konfiguriert haben, existieren vielleicht schon Einträge für Ihre Karten. Überprüfen Sie /etc/rc.conf bevor Sie weitere Zeilen hinzufügen.

In /etc/hosts können Sie die Namen und IP-Adressen der Rechner Ihres LANs eintragen. Weitere Informationen entnehmen Sie bitte hosts(5) und /usr/share/examples/etc/hosts.

Anmerkung: Soll Ihr System sich auch mit dem Internet verbinden können, müssen Sie Default-Gateway und Nameserver manuell konfigurieren:

# echo 'defaultrouter="Ihr_Default_Gateway"' >> /etc/rc.conf
# echo 'nameserver Ihr_DNS_Server' >> /etc/resolv.conf

12.8.3. Test und Fehlersuche

Nachdem Sie die notwendigen Änderungen in /etc/rc.conf vorgenommen haben, führen Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter konfiguriert und Sie stellen sicher, dass der Start ohne Konfigurationsfehler erfolgt. Alternativ können Sie auch lediglich die Netzwerkeinstellungen neu initialisieren:

# /etc/rc.d/netif restart

Anmerkung: Haben Sie ein Default-Gateway definiert (in der Datei /etc/rc.conf), müssen Sie auch den folgenden Befehl ausführen:

# /etc/rc.d/routing restart

Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen.


12.8.3.1. Test der Ethernet-Karte

Mit zwei Tests können Sie prüfen, ob die Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit ping den Adapter selbst und sprechen Sie dann eine andere Maschine im LAN an.

Zuerst, der Test des Adapters:

% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms

Jetzt versuchen wir, eine andere Maschine im LAN zu erreichen:

% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

Sie können auch den Namen der Maschine anstelle von 192.168.1.2 benutzen, wenn Sie /etc/hosts entsprechend eingerichtet haben.


12.8.3.2. Fehlersuche

Fehler zu beheben, ist immer sehr mühsam. Indem Sie die einfachen Sachen zuerst prüfen, erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert die Firewall? Wird die Netwerkkarte von FreeBSD unterstützt? Lesen Sie immer die Hardware-Informationen des Releases, bevor Sie einen Fehlerbericht einsenden. Aktualisieren Sie Ihre FreeBSD-Version auf -STABLE. Suchen Sie in den Archiven der Mailinglisten oder auf dem Internet nach bekannten Lösungen.

Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind, lesen Sie bitte die Hilfeseite tuning(7). Prüfen Sie auch die Netzwerkkonfiguration, da falsche Einstellungen die Ursache für langsame Verbindungen sein können.

Wenn Sie viele “device timeout” Meldungen in den Systemprotokollen finden, prüfen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und anderen Geräten Ihres Systems gibt. Überprüfen Sie nochmals die Verkabelung. Unter Umständen benötigen Sie eine neue Netzwerkkarte.

Wenn Sie in den Systemprotokollen “watchdog timeout” Fehlermeldungen finden, kontrollieren Sie zuerst die Verkabelung. Überprüfen Sie dann, ob der PCI-Steckplatz der Karte Bus Mastering unterstützt. Auf einigen älteren Motherboards ist das nur für einen Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie in der Dokumentation Ihrer Karte und Ihres Motherboards nach, ob das vielleicht die Ursache des Problems sein könnte.

Die Meldung “No route to host” erscheint, wenn Ihr System ein Paket nicht zustellen kann. Das kann vorkommen weil beispielsweise keine Default-Route gesetzt wurde oder das Netzwerkkabel nicht richtig steckt. Schauen Sie in der Ausgabe von netstat -rn nach, ob eine Route zu dem Zielsystem existiert. Wenn nicht, lesen Sie bitte das Kapitel 32.

Die Meldung “ping: sendto: Permission denied” wird oft von einer falsch konfigurierten Firewall verursacht. Wenn keine Regeln definiert wurden, blockiert eine aktivierte Firewall alle Pakete, selbst einfache ping-Pakete. Weitere Informationen erhalten Sie in Kapitel 31.

Falls die Leistung der Karte schlecht ist, setzen Sie die Medienerkennung von autoselect (automatisch) auf das richtige Medium. In vielen Fällen löst diese Maßnahme Leistungsprobleme. Wenn nicht, prüfen Sie nochmal die Netzwerkeinstellungen und lesen Sie die Hilfeseite tuning(7).


12.9. Virtual Hosts

Ein gebräuchlicher Zweck von FreeBSD ist das virtuelle Hosting, bei dem ein Server im Netzwerk wie mehrere Server aussieht. Dies wird dadurch erreicht, dass einem Netzwerkinterface mehrere Netzwerk-Adressen zugewiesen werden.

Ein Netzwerkinterface hat eine “echte” Adresse und kann beliebig viele “alias” Adressen haben. Die Aliase werden durch entsprechende alias Einträge in /etc/rc.conf festgelegt.

Ein alias Eintrag für das Interface fxp0 sieht wie folgt aus:

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

Beachten Sie, dass die Alias-Einträge mit alias0 anfangen müssen und weiter hochgezählt werden, das heißt _alias1, _alias2, und so weiter. Die Konfiguration der Aliase hört bei der ersten fehlenden Zahl auf.

Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch zum Glück einfach. Für jedes Interface muss es eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann eine Netzwerkmaske, die mit 1 gefüllt ist (also 255.255.255.255 oder hexadezimal 0xffffffff).

Als Beispiel betrachten wir den Fall, in dem fxp0 mit zwei Netzwerken verbunden ist: dem Netzwerk 10.1.1.0 mit der Netzwerkmaske 255.255.255.0 und dem Netzwerk 202.0.75.16 mit der Netzwerkmaske 255.255.255.240. Das System soll die Adressen 10.1.1.1 bis 10.1.1.5 und 202.0.75.17 bis 202.0.75.20 belegen. Wie eben beschrieben, hat nur die erste Adresse in einem Netzwerk (hier 10.0.1.1 und 202.0.75.17) die richtige Netzwerkmaske. Alle anderen Adressen (10.1.1.2 bis 10.1.1.5 und 202.0.75.18 bis 202.0.75.20) erhalten die Maske 255.255.255.255.

Die folgenden Einträge in /etc/rc.conf konfigurieren den Adapter entsprechend dem Beispiel:

ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"

12.10. Konfigurationsdateien

12.10.1. /etc Layout

Konfigurationsdateien finden sich in einigen Verzeichnissen unter anderem in:

/etc Enthält generelle Konfigurationsinformationen, die Daten hier sind systemspezifisch.
/etc/defaults Default Versionen der Konfigurationsdateien.
/etc/mail Enthält die sendmail(8) Konfiguration und weitere MTA Konfigurationsdateien.
/etc/ppp Hier findet sich die Konfiguration für die User- und Kernel-ppp Programme.
/etc/namedb Das Vorgabeverzeichnis, in dem Daten von named(8) gehalten werden. Normalerweise werden hier named.conf und Zonendaten abgelegt.
/usr/local/etc Installierte Anwendungen legen hier ihre Konfigurationsdateien ab. Dieses Verzeichnis kann Unterverzeichnisse für bestimmte Anwendungen enthalten.
/usr/local/etc/rc.d Ort für Start- und Stopskripten installierter Anwendungen.
/var/db Automatisch generierte systemspezifische Datenbanken, wie die Paket-Datenbank oder die locate-Datenbank.

12.10.2. Hostnamen


12.10.2.1. /etc/resolv.conf

Wie der FreeBSD-Resolver auf das Internet Domain Name System (DNS) zugreift, wird in /etc/resolv.conf festgelegt.

Die gebräuchlichsten Einträge in /etc/resolv.conf sind:

nameserver Die IP-Adresse eines Nameservers, den der Resolver abfragen soll. Bis zu drei Server werden in der Reihenfolge, in der sie aufgezählt sind, abgefragt.
search Suchliste mit Domain-Namen zum Auflösen von Hostnamen. Die Liste wird normalerweise durch den Domain-Teil des lokalen Hostnamens festgelegt.
domain Der lokale Domain-Name.

Beispiel für eine typische resolv.conf:

search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30

Anmerkung: Nur eine der Anweisungen search oder domain sollte benutzt werden.

Wenn Sie DHCP benutzen, überschreibt dhclient(8) für gewöhnlich resolv.conf mit den Informationen vom DHCP-Server.


12.10.2.2. /etc/hosts

/etc/hosts ist eine einfache textbasierte Datenbank, die aus alten Internetzeiten stammt. Zusammen mit DNS und NIS stellt sie eine Abbildung zwischen Namen und IP-Adressen zur Verfügung. Anstatt named(8) zu konfigurieren, können hier lokale Rechner, die über ein LAN verbunden sind, eingetragen werden. Lokale Einträge für gebräuchliche Internet-Adressen in /etc/hosts verhindern die Abfrage eines externen Servers und beschleunigen die Namensauflösung.

# $FreeBSD$
#
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file.  Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1         localhost localhost.my.domain
127.0.0.1       localhost localhost.my.domain
#
# Imaginary network.
#10.0.0.2       myname.my.domain myname
#10.0.0.3       myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
#   10.0.0.0    -   10.255.255.255
#   172.16.0.0  -   172.31.255.255
#   192.168.0.0 -   192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers.  Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#

/etc/hosts hat ein einfaches Format:

[Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ...

Zum Beispiel:

10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2

Weitere Informationen entnehmen Sie bitte hosts(5).


12.10.3. Konfiguration von Logdateien


12.10.3.1. syslog.conf

syslog.conf ist die Konfigurationsdatei von syslogd(8). Sie legt fest, welche syslog Meldungen in welche Logdateien geschrieben werden.

# $FreeBSD$
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manpage.
*.err;kern.debug;auth.notice;mail.crit          /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.*                                      /var/log/security
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
cron.*                                          /var/log/cron
*.err                                           root
*.notice;news.err                               root
*.alert                                         root
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote log host named loghost
#*.*                                            @loghost
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log

Weitere Informationen enthält syslog.conf(5).


12.10.3.2. newsyslog.conf

Die Konfigurationsdatei für newsyslog(8), das normalerweise von cron(8) aufgerufen wird, ist newsyslog.conf. newsyslog(8) stellt fest, ob Logdateien archiviert oder verschoben werden müssen. So wird logfile nach logfile.0 geschoben und logfile.0 nach logfile.1 usw. Zudem können Logdateien mit gzip(1) komprimiert werden. Die Namen der Logdateien sind dann logfile.0.gz, logfile.1.gz usw.

newsyslog.conf legt fest, welche Logdateien wann bearbeitet und wie viele Dateien behalten werden. Logdateien können auf Basis ihrer Größe oder zu einem gewissen Zeitpunkt archiviert bzw. umbenannt werden.

# configuration file for newsyslog
# $FreeBSD$
#
# filename          [owner:group]    mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron                           600  3     100  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   644  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    640  5     100  *     Z

Um mehr zu erfahren, lesen Sie bitte newsyslog(8).


12.10.4. sysctl.conf

sysctl.conf sieht ähnlich wie rc.conf aus. Werte werden in der Form Variable=Wert gesetzt. Die angegebenen Werte werden gesetzt, nachdem sich das System bereits im Mehrbenutzermodus befindet. Allerdings lassen sich im Mehrbenutzermodus nicht alle Werte setzen.

Um das Protokollieren von fatalen Signalen abzustellen und Benutzer daran zu hindern, von anderen Benutzern gestartete Prozesse zu sehen, können Sie in der Datei sysctl.conf die folgenden Variablen setzen:

# Do not log fatal signal exits (e.g. sig 11)
kern.logsigexit=0

# Prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0

12.11. Einstellungen mit sysctl

Mit sysctl(8) können Sie Änderungen an einem laufenden FreeBSD-System vornehmen. Unter anderem können Optionen des TCP/IP-Stacks oder des virtuellen Speichermanagements verändert werden. Unter der Hand eines erfahrenen Systemadministrators kann dies die Systemperformance erheblich verbessern. Über 500 Variablen können mit sysctl(8) gelesen und gesetzt werden.

Der Hauptzweck von sysctl(8) besteht darin, Systemeinstellungen zu lesen und zu verändern.

Alle auslesbaren Variablen werden wie folgt angezeigt:

% sysctl -a

Sie können auch eine spezielle Variable, z.B. kern.maxproc lesen:

% sysctl kern.maxproc
kern.maxproc: 1044

Um eine Variable zu setzen, benutzen Sie die Syntax Variable= Wert:

# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000

Mit sysctl können Sie Strings, Zahlen oder Boolean-Werte setzen. Bei Boolean-Werten setzen sie 1 für wahr und 0 für falsch.

Wenn Sie Variablen automatisch während des Systemstarts setzen wollen, fügen Sie die Variablen in die Datei /etc/sysctl.conf ein. Weiteres entnehmen Sie bitte der Hilfeseite sysctl.conf(5) und dem Abschnitt 12.10.4.


12.11.1. Schreibgeschützte Variablen

Contributed by Tom Rhodes.

Schreibgeschützte sysctl-Variablen können nur während des Systemstarts verändert werden.

Beispielsweise hat cardbus(4) auf einigen Laptops Schwierigkeiten, Speicherbereiche zu erkennen. Es treten dann Fehlermeldungen wie die folgende auf:

cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12

Um dieses Problem zu lösen, muss eine schreibgeschützte sysctl-Variable verändert werden. Eine OID kann in der Datei /boot/loader.conf überschrieben werden. Die Datei /boot/defaults/loader.conf enthält Vorgabewwerte für sysctl-Variablen.

Das oben erwähnte Problem wird durch die Angabe von hw.pci.allow_unsupported_io_range=1 in /boot/loader.conf gelöst. Danach sollte cardbus(4) fehlerfrei funktionieren.


12.12. Tuning von Laufwerken

12.12.1. Sysctl Variablen

12.12.1.1. vfs.vmiodirenable

Die Variable vfs.vmiodirenable besitzt in der Voreinstellung den Wert 1. Die Variable kann auf den Wert 0 (ausgeschaltet) oder 1 (angeschaltet) gesetzt werden. Sie steuert, wie Verzeichnisse vom System zwischengespeichert werden. Die meisten Verzeichnisse sind klein und benutzen nur ein einzelnes Fragment, typischerweise 1 kB, im Dateisystem. Im Buffer-Cache verbrauchen sie mit 512 Bytes noch weniger Platz. Ist die Variable ausgeschaltet (auf 0) wird der Buffer-Cache nur eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch wenn das System über sehr viel Speicher verfügt. Ist die Variable aktiviert (auf 1), kann der Buffer-Cache den VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern. Der ganze Speicher steht damit zum Zwischenspeichern von Verzeichnissen zur Verfügung. Der Nachteil bei dieser Vorgehensweise ist, dass zum Zwischenspeichern eines Verzeichnisses mindestens eine physikalische Seite im Speicher, die normalerweise 4 kB groß ist, anstelle von 512 Bytes gebraucht wird. Wir empfehlen, diese Option aktiviert zu lassen, wenn Sie Dienste zur Verfügung stellen, die viele Dateien manipulieren. Beispiele für solche Dienste sind Web-Caches, große Mail-Systeme oder Netnews. Die aktivierte Variable vermindert, trotz des verschwendeten Speichers, in aller Regel nicht die Leistung des Systems, obwohl Sie das nachprüfen sollten.


12.12.1.2. vfs.write_behind

In der Voreinstellung besitzt die Variable vfs.write_behind den Wert 1 (aktiviert). Mit dieser Einstellung schreibt das Dateisystem anfallende vollständige Cluster, die besonders beim sequentiellen Schreiben großer Dateien auftreten, direkt auf das Medium aus. Dies verhindert, dass sich im Buffer-Cache veränderte Puffer (dirty buffers) ansammeln, die die I/O-Verarbeitung nicht mehr beschleunigen würden. Unter bestimmten Umständen blockiert diese Funktion allerdings Prozesse. Setzen Sie in diesem Fall die Variable vfs.write_behind auf den Wert 0.


12.12.1.3. vfs.hirunningspace

Die Variable vfs.hirunningspace bestimmt systemweit die Menge ausstehender Schreiboperationen, die dem Platten-Controller zu jedem beliebigen Zeitpunkt übergeben werden können. Normalerweise können Sie den Vorgabewert verwenden. Auf Systemen mit vielen Platten kann der Wert aber auf 4 bis 5 Megabyte erhöht werden. Beachten Sie, dass ein zu hoher Wert (größer als der Schreib-Schwellwert des Buffer-Caches) zu Leistungverlusten führen kann. Setzen Sie den Wert daher nicht zu hoch! Hohe Werte können auch Leseoperationen verzögern, die gleichzeitig mit Schreiboperationen ausgeführt werden.

Es gibt weitere Variablen, mit denen Sie den Buffer-Cache und den VM-Page-Cache beeinflussen können. Wir raten Ihnen allerdings davon ab, diese Variablen zu verändern, da das VM-System den virtuellen Speicher selbst sehr gut verwaltet.


12.12.1.4. vm.swap_idle_enabled

Die Variable vm.swap_idle_enabled ist für große Mehrbenutzer-Systeme gedacht, auf denen sich viele Benutzer an- und abmelden und auf denen es viele Prozesse im Leerlauf (idle) gibt. Solche Systeme fragen kontinuierlich freien Speicher an. Wenn Sie die Variable vm.swap_idle_enabled aktivieren, können Sie die Auslagerungs-Hysterese von Seiten mit den Variablen vm.swap_idle_threshold1 und vm.swap_idle_threshold2 einstellen. Die Schwellwerte beider Variablen geben die Zeit in Sekunden an, in denen sich ein Prozess im Leerlauf befinden muss. Wenn die Werte so eingestellt sind, dass Seiten früher als nach dem normalen Algorithmus ausgelagert werden, verschafft das dem Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion nur, wenn Sie sie wirklich benötigen: Die Speicherseiten werden eher früher als später ausgelagert. Der Platz im Swap-Bereich wird dadurch schneller verbraucht und die Plattenaktivitäten steigen an. Auf kleine Systeme hat diese Funktion spürbare Auswirkungen. Auf großen Systemen, die sowieso schon Seiten auslagern müssen, können ganze Prozesse leichter in den Speicher geladen oder ausgelagert werden.


12.12.1.5. hw.ata.wc

In FreeBSD 4.3 wurde versucht, den IDE-Schreib-Zwischenspeicher abzustellen. Obwohl dies die Bandbreite zum Schreiben auf IDE-Platten verringerte, wurde es aus Gründen der Datenkonsistenz als notwenig angesehen. Der Kern des Problems ist, dass IDE-Platten keine zuverlässige Aussage über das Ende eines Schreibvorgangs treffen. Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann sogar passieren, dass das Schreiben mancher Blöcke im Fall von starker Plattenaktivität auf unbefristete Zeit verzögert wird. Ein Absturz oder Stromausfall zu dieser Zeit kann die Dateisysteme erheblich beschädigen. Wir entschieden uns daher für die sichere Variante und stellten den Schreib-Zwischenspeicher ab. Leider war damit auch ein großer Leistungsverlust verbunden, so dass wir die Variable nach dem Release wieder aktiviert haben. Sie sollten den Wert der Variable hw.ata.wc auf Ihrem System überprüfen. Wenn der Schreib-Zwischenspeicher abgestellt ist, können Sie ihn aktivieren, indem Sie die Variable auf den Wert 1 setzen. Dies muss zum Zeitpunkt des Systemstarts im Boot-Loader geschehen. Eine Änderung der Variable, nachdem der Kernel gestartet ist, hat keine Auswirkungen.

Weitere Informationen finden Sie in ata(4).


12.12.1.6. SCSI_DELAY (kern.cam.scsi_delay)

Mit der Kerneloption SCSI_DELAY kann die Dauer des Systemstarts verringert werden. Der Vorgabewert ist recht hoch und er verzögert den Systemstart um 15 oder mehr Sekunden. Normalerweise kann dieser Wert, insbesondere mit modernen Laufwerken, auf 5 Sekunden heruntergesetzt werden (durch Setzen der sysctl-Variable kern.cam.scsi_delay). Die Variable sowie die Kerneloption verwenden für die Zeitangabe Millisekunden und nicht Sekunden.


12.12.2. Soft Updates

Mit tunefs(8) lassen sich Feineinstellungen an Dateisystemen vornehmen. Das Programm hat verschiedene Optionen, von denen hier nur Soft Updates betrachtet werden. Soft Updates werden wie folgt ein- und ausgeschaltet:

# tunefs -n enable /filesystem
# tunefs -n disable /filesystem

Ein eingehängtes Dateisystem kann nicht mit tunefs(8) modifiziert werden. Soft Updates werden am besten im Single-User Modus aktiviert, bevor Partitionen eingehangen sind.

Durch Einsatz eines Zwischenspeichers wird die Performance im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen Dateisystemen zu aktivieren. Allerdings sollten Sie sich über die zwei Nachteile von Soft Updates bewusst sein: Erstens garantieren Soft Updates zwar die Konsistenz der Daten im Fall eines Absturzes, aber es kann leicht passieren, dass das Dateisystem über mehrere Sekunden oder gar eine Minute nicht synchronisiert wurde. Im Fall eines Absturzes verlieren Sie mit Soft Updates unter Umständen mehr Daten als ohne. Zweitens verzögern Soft Updates die Freigabe von Datenblöcken. Eine größere Aktualisierung eines fast vollen Dateisystems, wie dem Root-Dateisystem, z.B. während eines make installworld, kann das Dateisystem vollaufen lassen. Dadurch würde die Aktualisierung fehlschlagen.


12.12.2.1. Details über Soft Updates

Es gibt zwei klassische Herangehensweisen, wie man die Metadaten des Dateisystems (also Daten über Dateien, wie inode Bereiche oder Verzeichniseinträge) aktualisiert auf die Platte zurückschreibt:

Das historisch übliche Verfahren waren synchrone Updates der Metadaten, d. h. wenn eine Änderung an einem Verzeichnis nötig war, wurde anschließend gewartet, bis diese Änderung tatsächlich auf die Platte zurückgeschrieben worden war. Der Inhalt der Dateien wurde im “Buffer Cache” zwischengespeichert und asynchron irgendwann später auf die Platte geschrieben. Der Vorteil dieser Implementierung ist, dass sie sicher funktioniert. Wenn während eines Updates ein Ausfall erfolgt, haben die Metadaten immer einen konsistenten Zustand. Eine Datei ist entweder komplett angelegt oder gar nicht. Wenn die Datenblöcke einer Datei im Fall eines Absturzes noch nicht den Weg aus dem “Buffer Cache” auf die Platte gefunden haben, kann fsck(8) das Dateisystem reparieren, indem es die Dateilänge einfach auf 0 setzt. Außerdem ist die Implementierung einfach und überschaubar. Der Nachteil ist, dass Änderungen der Metadaten sehr langsam vor sich gehen. Ein rm -r beispielsweise fasst alle Dateien eines Verzeichnisses der Reihe nach an, aber jede dieser Änderungen am Verzeichnis (Löschen einer Datei) wird einzeln synchron auf die Platte geschrieben. Gleiches beim Auspacken großer Hierarchien (tar -x).

Der zweite Fall sind asynchrone Metadaten-Updates. Das ist z. B. der Standard bei Linux/ext2fs oder die Variante mount -o async für *BSD UFS. Man schickt die Updates der Metadaten einfach auch noch über den “Buffer Cache”, sie werden also zwischen die Updates der normalen Daten eingeschoben. Vorteil ist, dass man nun nicht mehr auf jeden Update warten muss, Operationen, die zahlreiche Metadaten ändern, werden also viel schneller. Auch hier ist die Implementierung sehr einfach und wenig anfällig für Fehler. Nachteil ist, dass keinerlei Konsistenz des Dateisystems mehr gesichert ist. Wenn mitten in einer Operation, die viele Metadaten ändert, ein Ausfall erfolgt (Stromausfall, drücken des Reset-Tasters), dann ist das Dateisystem anschließend in einem unbestimmten Zustand. Niemand kann genau sagen, was noch geschrieben worden ist und was nicht mehr; die Datenblöcke einer Datei können schon auf der Platte stehen, während die inode Tabelle oder das zugehörige Verzeichnis nicht mehr aktualisiert worden ist. Man kann praktisch kein fsck mehr implementieren, das diesen Zustand wieder reparieren kann, da die dazu nötigen Informationen einfach auf der Platte fehlen. Wenn ein Dateisystem derart beschädigt worden ist, kann man es nur neu erzeugen (newfs(8)) und die Daten vom Backup zurückspielen.

Der historische Ausweg aus diesem Dilemma war ein dirty region logging (auch als Journalling bezeichnet, wenngleich dieser Begriff nicht immer gleich benutzt und manchmal auch für andere Formen von Transaktionsprotokollen gebraucht wird). Man schreibt die Metadaten-Updates zwar synchron, aber nur in einen kleinen Plattenbereich, die logging area. Von da aus werden sie dann asynchron auf ihre eigentlichen Bereiche verteilt. Da die logging area ein kleines zusammenhängendes Stückchen ist, haben die Schreibköpfe der Platte bei massiven Operationen auf Metadaten keine allzu großen Wege zurückzulegen, so dass alles ein ganzes Stück schneller geht als bei klassischen synchronen Updates. Die Komplexität der Implementierung hält sich ebenfalls in Grenzen, somit auch die Anfälligkeit für Fehler. Als Nachteil ergibt sich, dass Metadaten zweimal auf die Platte geschrieben werden müssen (einmal in die logging area, einmal an die richtige Stelle), so dass das im Falle regulärer Arbeit (also keine gehäuften Metadatenoperationen) eine “Pessimisierung” des Falls der synchronen Updates eintritt, es wird alles langsamer. Dafür hat man als Vorteil, dass im Falle eines Crashes der konsistente Zustand dadurch erzielbar ist, dass die angefangenen Operationen aus dem dirty region log entweder zu Ende ausgeführt oder komplett verworfen werden, wodurch das Dateisystem schnell wieder zur Verfügung steht.

Die Lösung von Kirk McKusick, dem Schöpfer von Berkeley FFS, waren Soft Updates: die notwendigen Updates der Metadaten werden im Speicher gehalten und dann sortiert auf die Platte geschrieben (“ordered metadata updates”). Dadurch hat man den Effekt, dass im Falle massiver Metadaten-Änderungen spätere Operationen die vorhergehenden, noch nicht auf die Platte geschriebenen Updates desselben Elements im Speicher “einholen”. Alle Operationen, auf ein Verzeichnis beispielsweise, werden also in der Regel noch im Speicher abgewickelt, bevor der Update überhaupt auf die Platte geschrieben wird (die dazugehörigen Datenblöcke werden natürlich auch so sortiert, dass sie nicht vor ihren Metadaten auf der Platte sind). Im Fall eines Absturzes hat man ein implizites “log rewind”: alle Operationen, die noch nicht den Weg auf die Platte gefunden haben, sehen danach so aus, als hätten sie nie stattgefunden. Man hat so also den konsistenten Zustand von ca. 30 bis 60 Sekunden früher sichergestellt. Der verwendete Algorithmus garantiert dabei, dass alle tatsächlich benutzten Ressourcen auch in den entsprechenden Bitmaps (Block- und inode Tabellen) als belegt markiert sind. Der einzige Fehler, der auftreten kann, ist, dass Ressourcen noch als “belegt” markiert sind, die tatsächlich “frei” sind. fsck(8) erkennt dies und korrigiert diese nicht mehr belegten Ressourcen. Die Notwendigkeit eines Dateisystem-Checks darf aus diesem Grunde auch ignoriert und das Dateisystem mittels mount -f zwangsweise eingebunden werden. Um noch allozierte Ressourcen freizugeben muss später ein fsck(8) nachgeholt werden. Das ist dann auch die Idee des background fsck: beim Starten des Systems wird lediglich ein Schnappschuss des Filesystems gemacht, mit dem fsck(8) dann später arbeiten kann. Alle Dateisysteme dürfen “unsauber” eingebunden werden und das System kann sofort in den Multiuser-Modus gehen. Danach wird ein Hintergrund-fsck für die Dateisysteme gestartet, die dies benötigen, um möglicherweise irrtümlich belegte Ressourcen freizugeben. (Dateisysteme ohne Soft Updates benötigen natürlich immer noch den üblichen (Vordergrund-)fsck, bevor sie eingebunden werden können.)

Der Vorteil ist, dass die Metadaten-Operationen beinahe so schnell ablaufen wie im asynchronen Fall (also durchaus auch schneller als beim “logging”, das ja die Metadaten immer zweimal schreiben muss). Als Nachteil stehen dem die Komplexität des Codes (mit einer erhöhten Fehlerwahrscheinlichkeit in einem bezüglich Datenverlust hoch sensiblen Bereich) und ein erhöhter Speicherverbrauch entgegen. Außerdem muss man sich an einige Eigenheiten gewöhnen: Nach einem Absturz ist ein etwas älterer Stand auf der Platte - statt einer leeren, aber bereits angelegten Datei (wie nach einem herkömmlichen fsck Lauf) ist auf einem Dateisystem mit Soft Updates keine Spur der entsprechenden Datei mehr zu sehen, da weder die Metadaten noch der Dateiinhalt je auf die Platte geschrieben wurden. Weiterhin kann der Platz nach einem rm -r nicht sofort wieder als verfügbar markiert werden, sondern erst dann, wenn der Update auch auf die Platte vermittelt worden ist. Dies kann besonders dann Probleme bereiten, wenn große Datenmengen in einem Dateisystem ersetzt werden, das nicht genügend Platz hat, um alle Dateien zweimal unterzubringen.


12.13. Einstellungen von Kernel Limits


12.13.1. Datei und Prozeß Limits

12.13.1.1. kern.maxfiles

Abhängig von den Anforderungen Ihres Systems kann kern.maxfiles erhöht oder erniedrigt werden. Die Variable legt die maximale Anzahl von Dateideskriptoren auf Ihrem System fest. Wenn die Dateideskriptoren aufgebraucht sind, werden Sie die Meldung “file: table is full” wiederholt im Puffer für Systemmeldungen sehen. Den Inhalt des Puffers können Sie sich mit dmesg anzeigen lassen.

Jede offene Datei, jedes Socket und jede FIFO verbraucht einen Dateideskriptor. Auf “dicken” Produktionsservern können leicht Tausende Dateideskriptoren benötigt werden, abhängig von der Art und Anzahl der gleichzeitig laufenden Dienste.

In älteren FreeBSD-Versionen wurde die Voreinstellung von kern.maxfile aus der Kernelkonfigurationsoption maxusers bestimmt. kern.maxfiles wächst proportional mit dem Wert von maxusers. Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich diese Option entsprechend der maximalen Benutzerzahl Ihres Systems einzustellen. Obwohl auf einer Produktionsmaschine vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind, können die benötigten Ressourcen ähnlich denen eines großen Webservers sein.

Die Variable kern.maxusers wird beim Systemstart automatisch aus dem zur Verfügung stehenden Hauptspeicher bestimmt. Im laufenden Betrieb kann dieser Wert aus der (nur lesbaren) sysctl-Variable kern.maxusers ermittelt werden. Falls ein System für diese Variable einen anderen Wert benötigt, kann der Wert über den Loader angepasst werden. Häufig verwendete Werte sind dabei 64, 128, sowie 256. Es ist empfehlenswert, die Anzahl der Dateideskriptoren nicht auf einen Wert größer 256 zu setzen, es sei denn, Sie benötigen wirklich eine riesige Anzahl von ihnen. Viele der von kern.maxusers auf einen Standardwert gesetzten Parameter können beim Systemstart oder im laufenden Betrieb in der Datei /boot/loader.conf (sehen Sie sich dazu auch loader.conf(5) sowie die Datei /boot/defaults/loader.conf an) an Ihre Bedürfnisse angepasst werden, so wie es bereits an anderer Stelle dieses Dokuments beschrieben ist.

Ältere FreeBSD-Versionen setzen diesen Wert selbst, wenn Sie in der Konfigurationsdatei den Wert 0 [5] angeben. Wenn Sie den Wert selbst bestimmen wollen, sollten Sie maxusers mindestens auf 4 setzen. Dies gilt insbesondere dann, wenn Sie beabsichtigen, das X Window-System zu benutzen oder Software zu kompilieren. Der Grund dafür ist, dass der wichtigste Wert, der durch maxusers bestimmt wird, die maximale Anzahl an Prozessen ist, die auf 20 + 16 * maxusers gesetzt wird. Wenn Sie also maxusers auf 1 setzen, können gleichzeitig nur 36 Prozesse laufen, von denen ungefähr 18 schon beim Booten des Systems gestartet werden. Dazu kommen nochmals etwa 15 Prozesse beim Start des X Window-Systems. Selbst eine einfache Aufgabe wie das Lesen einer Manualpage benötigt neun Prozesse zum Filtern, Dekomprimieren und Betrachten der Datei. Für die meisten Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044 gleichzeitige Prozesse zur Verfügung stehen. Wenn Sie allerdings den gefürchteten Fehler proc table full beim Start eines Programms oder auf einem Server mit einer großen Benutzerzahl (wie ftp.FreeBSD.org) sehen, dann sollten Sie den Wert nochmals erhöhen und den Kernel neu bauen.

Anmerkung: Die Anzahl der Benutzer, die sich auf einem Rechner anmelden kann, wird durch maxusers nicht begrenzt. Der Wert dieser Variablen legt neben der möglichen Anzahl der Prozesse eines Benutzers weitere sinnvolle Größen für bestimmte Systemtabellen fest.


12.13.1.2. kern.ipc.somaxconn

Die Variable kern.ipc.somaxconn beschränkt die Größe der Warteschlange (Listen-Queue) für neue TCP-Verbindungen. Der Vorgabewert von 128 ist normalerweise zu klein, um neue Verbindungen auf einem stark ausgelasteten Webserver zuverlässig zu handhaben. Auf solchen Servern sollte der Wert auf 1024 oder höher gesetzt werden. Ein Dienst (z.B. sendmail(8), oder Apache) kann die Größe der Queue selbst einschränken. Oft gibt es die Möglichkeit, die Größe der Listen-Queue in einer Konfigurationsdatei einzustellen. Eine große Listen-Queue übersteht vielleicht auch einen Denial of Service Angriff (DoS).


12.13.2. Netzwerk Limits

Die Kerneloption NMBCLUSTERS schreibt die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System besitzt. Eine zu geringe Anzahl Mbufs auf einem Server mit viel Netzwerkverkehr verringert die Leistung von FreeBSD. Jeder Mbuf-Cluster nimmt ungefähr 2 kB Speicher in Anspruch, so dass ein Wert von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer im System reserviert. Wie viele Cluster benötigt werden, lässt sich durch eine einfache Berechnung herausfinden. Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige Verbindungen servieren soll und jede der Verbindungen je einen 16 kB großen Puffer zum Senden und Empfangen braucht, brauchen Sie ungefähr 32 MB Speicher für Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl, so dass sich für NMBCLUSTERS der Wert 2x32 MB / 2 kB = 32768 ergibt. Für Maschinen mit viel Speicher sollten Werte zwischen 4096 und 32768 genommen werden. Sie können diesen Wert nicht willkürlich erhöhen, da dies bereits zu einem Absturz beim Systemstart führen kann. Mit der Option -m von netstat(1) können Sie den Gebrauch der Netzwerkpuffer kontrollieren.

Die Netzwerkpuffer können beim Systemstart mit der Loader-Variablen kern.ipc.nmbclusters eingestellt werden. Nur auf älteren FreeBSD-Systemen müssen Sie die Kerneloption NMBCLUSTERS verwenden.

Die Anzahl der sendfile(2) Puffer muss auf ausgelasteten Servern, die den Systemaufruf sendfile(2) oft verwenden, vielleicht erhöht werden. Dazu können Sie die Kerneloption NSFBUFS verwenden oder die Anzahl der Puffer in /boot/loader.conf (siehe loader(8)) setzen. Die Puffer sollten erhöht werden, wenn Sie Prozesse im Zustand sfbufa sehen. Die schreibgeschützte sysctl-Variable kern.ipc.nsfbufs zeigt die Anzahl eingerichteten Puffer im Kernel. Der Wert dieser Variablen wird normalerweise von kern.maxusers bestimmt. Manchmal muss die Pufferanzahl jedoch manuell eingestellt werden.

Wichtig: Auch wenn ein Socket nicht blockierend angelegt wurde, kann der Aufruf von sendfile(2) blockieren, um auf freie struct sf_buf Puffer zu warten.


12.13.2.1. net.inet.ip.portrange.*

Die sysctl-Variable net.inet.ip.portrange.* legt die Portnummern für TCP- und UDP-Sockets fest. Es gibt drei Bereiche: den niedrigen Bereich, den normalen Bereich und den hohen Bereich. Die meisten Netzprogramme benutzen den normalen Bereich. Dieser Bereich umfasst in der Voreinstellung die Portnummern 500 bis 5000 und wird durch die Variablen net.inet.ip.portrange.first und net.inet.ip.portrange.last festgelegt. Die festgelegten Bereiche für Portnummern werden von ausgehenden Verbindungen benutzt. Unter bestimmten Umständen, beispielsweise auf stark ausgelasteten Proxy-Servern, sind alle Portnummern für ausgehende Verbindungen belegt. Bereiche für Portnummern spielen auf Servern keine Rolle, die hauptsächlich eingehende Verbindungen verarbeiten (wie ein normaler Webserver) oder nur eine begrenzte Anzahl ausgehender Verbindungen öffnen (beispielsweise ein Mail-Relay). Wenn Sie keine freien Portnummern mehr haben, sollten Sie die Variable net.inet.ip.portrange.last langsam erhöhen. Ein Wert von 10000, 20000 oder 30000 ist angemessen. Beachten Sie auch eine vorhandene Firewall, wenn Sie die Bereiche für Portnummern ändern. Einige Firewalls sperren große Bereiche (normalerweise aus den kleinen Portnummern) und erwarten, dass hohe Portnummern für ausgehende Verbindungen verwendet werden. Daher kann es erforderlich sein, den Wert von net.inet.ip.portrange.first zu erhöhen.


12.13.2.2. TCP Bandwidth Delay Product Begrenzung

Die TCP Bandwidth Delay Product Begrenzung gleicht TCP/Vegas von NetBSD. Die Begrenzung wird aktiviert, indem Sie die sysctl-Variable net.inet.tcp.inflight.enable auf den Wert 1 setzen. Das System wird dann versuchen, für jede Verbindung, das Produkt aus der Übertragungsrate und der Verzögerungszeit zu bestimmen. Dieses Produkt begrenzt die Datenmenge, die für einen optimales Durchsatz zwischengespeichert werden muss.

Diese Begrenzung ist nützlich, wenn Sie Daten über Verbindungen mit einem hohen Produkt aus Übertragungsrate und Verzögerungszeit wie Modems, Gigabit-Ethernet oder schnellen WANs, zur Verfügung stellen. Insbesondere wirkt sich die Begrenzung aus, wenn die Verbindung die TCP-Option Window-scaling verwendet oder große Sende-Fenster (send window) benutzt. Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung aktiviert haben. Dazu setzen Sie die Variable net.inet.tcp.inflight.debug auf 0. Auf Produktions-Systemen sollten Sie zudem die Variable net.inet.tcp.inflight.min mindestens auf den Wert 6144 setzen. Allerdings kann ein zu hoher Wert, abhängig von der Verbindung, die Begrenzungsfunktion unwirksam machen. Die Begrenzung reduziert die Datenmenge in den Queues von Routern und Switches, sowie die Datenmenge in der Queue der lokalen Netzwerkkarte. Die Verzögerungszeit (Round Trip Time) für interaktive Anwendungen sinkt, da weniger Pakete zwischengespeichert werden. Dies gilt besonders für Verbindungen über langsame Modems. Die Begrenzung wirkt sich allerdings nur auf das Versenden von Daten aus (Uploads, Server). Auf den Empfang von Daten (Downloads) hat die Begrenzung keine Auswirkungen.

Die Variable net.inet.tcp.inflight.stab sollte nicht angepasst werden. Der Vorgabewert der Variablen beträgt 20, das heißt es werden maximal zwei Pakete zu dem Produkt aus Übertragungsrate und Verzögerungszeit addiert. Dies stabilisiert den Algorithmus und verbessert die Reaktionszeit auf Veränderungen. Bei langsamen Verbindungen können sich aber die Laufzeiten der Pakete erhöhen (ohne diesen Algorithmus wären sie allerdings noch höher). In solchen Fällen können Sie versuchen, den Wert der Variablen auf 15, 10 oder 5 zu erniedrigen. Gleichzeitig müssen Sie vielleicht auch net.inet.tcp.inflight.min auf einen kleineren Wert (beispielsweise 3500) setzen. Ändern Sie diese Variablen nur ab, wenn Sie keine anderen Möglichkeiten mehr haben.


12.13.3. Virtueller Speicher (Virtual Memory)

12.13.3.1. kern.maxvnodes

Ein vnode ist die interne Darstellung einer Datei oder eines Verzeichnisses. Die Erhöhung der Anzahl der für das Betriebssystem verfügbaren vnodes verringert also die Schreib- und Lesezugriffe auf Ihre Festplatte. vnodes werden im Normalfall vom Betriebssystem automatisch vergeben und müssen nicht von Ihnen angepasst werden. In einigen Fällen stellt der Zugriff auf eine Platte allerdings einen Flaschenhals dar, daher sollten Sie in diesem Fall die Anzahl der möglichen vnodes erhöhen, um dieses Problem zu beheben. Beachten Sie dabei aber die Größe des inaktiven und freien Hauptspeichers.

Um die Anzahl der derzeit verwendeten vnodes zu sehen, geben Sie Folgendes ein:

# sysctl vfs.numvnodes
vfs.numvnodes: 91349

Die maximal mögliche Anzahl der vnodes erhalten Sie durch die Eingabe von:

# sysctl kern.maxvnodes
kern.maxvnodes: 100000

Wenn sich die Anzahl der genutzten vnodes dem maximal möglichen Wert nähert, sollten Sie den Wert kern.maxvnodes zuerst um etwa 1.000 erhöhen. Beobachten Sie danach die Anzahl der vom System genutzten vfs.numvnodes. Nähert sich der Wert wiederum dem definierten Maximum, müssen Sie kern.maxvnodes nochmals erhöhen. Sie sollten nun eine Änderung Ihres Speicherverbrauches (etwa über top(1)) registrieren können und über mehr aktiven Speicher verfügen.


12.14. Hinzufügen von Swap-Bereichen

Egal wie vorausschauend Sie planen, manchmal entspricht ein System einfach nicht Ihren Erwartungen. Es ist leicht, mehr Swap-Bereiche hinzuzufügen. Dazu stehen Ihnen drei Wege offen: Sie können eine neue Platte einbauen, den Swap-Bereich über NFS ansprechen oder eine Swap-Datei auf einer existierenden Partition einrichten.

Für Informationen zur Verschlüsselung von Swap-Partitionen, zu den dabei möglichen Optionen sowie zu den Gründen für eine Verschlüsselung des Auslagerungsspeichers lesen Sie bitte Abschnitt 19.17 des Handbuchs.


12.14.1. Swap auf einer neuen Festplatte

Der einfachste Weg, zusätzlich einen Swap-Bereich einzurichten, ist der Einbau einer neuen Platte, die Sie sowieso gebrauchen können. Die Anordnung von Swap-Bereichen wird in Abschnitt 12.2 des Handbuchs besprochen.


12.14.2. Swap-Bereiche über NFS

Swap-Bereiche über NFS sollten Sie nur dann einsetzen, wenn Sie über keine lokale Platte verfügen, da es durch die zur Verfügung stehende Bandbreite limitiert wird und außerdem den NFS-Server zusätzlich belastet.


12.14.3. Swap-Dateien

Sie können eine Datei festgelegter Größe als Swap-Bereich nutzen. Im folgenden Beispiel werden wir eine 64 MB große Datei mit Namen /usr/swap0 benutzen, Sie können natürlich einen beliebigen Namen für den Swap-Bereich benutzen.

Beispiel 12-1. Erstellen einer Swap-Datei

  1. Der GENERIC-Kernel unterstützt bereits RAM-Disks (md(4)), welche für diese Aktion benötigt werden. Wenn Sie einen eigenen Kernel erstellen, vergewissern Sie sicher, dass die folgende Zeile in ihrer Kernel-Konfigurationsdatei enthalten ist:

    device   md
    

    Informationen, wie man einen eigenen Kernel erstellen kann, erhalten Sie in Kapitel 9.

  2. Legen Sie die Swap-Datei /usr/swap0 an:

    # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
    
  3. Setzen Sie die richtigen Berechtigungen für /usr/swap0:

    # chmod 0600 /usr/swap0
    
  4. Aktivieren Sie die Swap-Datei /etc/rc.conf:

    swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
    
  5. Um die Swap-Datei zu aktivieren, führen Sie entweder einen Neustart durch oder geben das folgende Kommando ein:

    # mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0
    

12.15. Energie- und Ressourcenverwaltung

Verfasst von Hiten Pandya und Tom Rhodes.

Es ist wichtig, Hardware effizient einzusetzen. Vor der Einführung des Advanced Configuration and Power Interface (ACPI) konnten Stromverbrauch und Wärmeabgabe eines Systems nur schlecht von Betriebssystemen gesteuert werden. Die Hardware wurde vom BIOS gesteuert, was die Kontrolle der Energieverwaltung für den Anwender erschwerte. Das Advanced Power Management (APM) erlaubte es lediglich, einige wenige Funktionen zu steuern, obwohl die Überwachung von Energie- und Ressourcenverbrauch zu den wichtigsten Aufgaben eines Betriebssystems gehört, um auf verschiedene Ereignisse, beispielsweise einen unerwarteten Temperaturanstieg, reagieren können.

Dieser Abschnitt erklärt das Advanced Configuration and Power Interface (ACPI).


12.15.1. Was ist ACPI?

Advanced Configuration and Power Interface (ACPI) ist ein Standard verschiedener Hersteller, der die Verwaltung von Hardware und Energiesparfunktionen festlegt. Die ACPI-Funktionen können von einem Betriebssystem gesteuert werden. Der Vorgänger des ACPI, “Advanced Power Management” (APM), erwies sich in modernen Systemen als unzureichend.


12.15.2. Mängel des Advanced Power Managements (APM)

Das Advanced Power Management (APM) steuert den Energieverbrauch eines Systems auf Basis der Systemaktivität. Das APM-BIOS wird von dem Hersteller des Systems zur Verfügung gestellt und ist auf die spezielle Hardware angepasst. Der APM-Treiber des Betriebssystems greift auf das APM Software Interface zu, das den Energieverbrauch regelt. APM findet sich in der Regel nur noch in Systemen, die vor 2001 produziert wurden.

Das APM hat hauptsächlich vier Probleme. Erstens läuft die Energieverwaltung unabhängig vom Betriebssystem in einem (herstellerspezifischen) BIOS. Beispielsweise kann das APM-BIOS die Festplatten nach einer konfigurierbaren Zeit ohne die Zustimmung des Betriebssystems herunterfahren. Zweitens befindet sich die ganze APM-Logik im BIOS; das Betriebssystem hat gar keine APM-Komponenten. Bei Problemen mit dem APM-BIOS muss das Flash-ROM aktualisiert werden. Diese Prozedur ist gefährlich, da sie im Fehlerfall das System unbrauchbar machen kann. Zum Dritten ist APM eine Technik, die herstellerspezifisch ist und nicht koordiniert wird. Fehler im BIOS eines Herstellers werden nicht unbedingt im BIOS anderer Hersteller korrigiert. Das letzte Problem ist, dass im APM-BIOS nicht genügend Platz vorhanden ist, um eine durchdachte oder eine auf den Zweck der Maschine zugeschnittene Energieverwaltung zu implementieren.

Das Plug and Play BIOS (PNPBIOS) war ebenfalls unzureichend. Das PNPBIOS verwendet eine 16-Bit-Technik. Damit das Betriebssystem das PNPBIOS ansprechen kann, muss es in einer 16-Bit-Emulation laufen.

Der APM-Treiber von FreeBSD ist in der Hilfeseite apm(4) beschrieben.


12.15.3. Konfiguration des ACPI

Das Modul acpi.ko wird standardmäßig beim Systemstart vom loader(8) geladen und sollte daher nicht fest in den Kernel eingebunden werden. Dadurch kann acpi.ko ohne einen Neubau des Kernels ersetzt werden und das Modul ist leichter zu testen. Wenn Sie in der Ausgabe von dmesg(8) das Wort ACPI sehen, ist das Modul geladen worden. Das ACPI-Modul im laufenden Betrieb zu laden, führt oft nicht zum gewünschten Ergebnis. Treten bei Ihrem System Probleme auf, können Sie ACPI auch komplett deaktivieren. Dazu definieren Sie die Variable hint.acpi.0.disabled="1" in der Datei /boot/loader.conf. Alternativ können Sie die Variable auch am loader(8)-Prompt eingeben. Das Modul kann im laufenden Betrieb nicht entfernt werden, da es zur Kommunikation mit der Hardware verwendet wird.

Anmerkung: ACPI und APM können nicht zusammen verwendet werden. Das zuletzt geladene Modul beendet sich, sobald es bemerkt, dass das andere Modul geladen ist.

Mit acpiconf(8) können Sie das System in einen Ruhemodus (sleep mode) versetzen. Es gibt verschiedene Modi (von 1 bis 5), die Sie auf der Kommandozeile mit -s angeben können. Für die meisten Anwender sind die Modi 1 und 3 völlig ausreichend. Der Modus 5 schaltet das System aus (Soft-off) und entspricht dem folgenden Befehl:

# halt -p

Verschiedene Optionen können als sysctl(8)-Variablen gesetzt werden. Lesen Sie dazu die Manualpages zu acpi(4) sowie acpiconf(8).


12.16. ACPI-Fehlersuche

Verfasst von Nate Lawson. Mit Beiträgen von Peter Schultz und Tom Rhodes.

ACPI ist ein gänzlich neuer Weg, um Geräte aufzufinden und deren Stromverbrauch zu regulieren. Weiterhin bietet ACPI einen einheitlichen Zugriff auf Geräte, die vorher vom BIOS verwaltet wurden. Es werden zwar Fortschritte gemacht, dass ACPI auf allen Systemen läuft, doch tauchen immer wieder Fehler auf: fehlerhafter Bytecode der ACPI-Machine-Language (AML) einiger Systemplatinen, ein unvollständiges FreeBSD-Kernel-Subsystem oder Fehler im ACPI-CA-Interpreter von Intel.

Dieser Abschnitt hilft Ihnen, zusammen mit den Betreuern des FreeBSD-ACPI-Subsystems, Fehlerquellen zu finden und Fehler zu beseitigen. Danke, dass Sie diesen Abschnitt lesen; hoffentlich hilft er, Ihre Systemprobleme zu lösen.


12.16.1. Fehlerberichte einreichen

Anmerkung: Bevor Sie einen Fehlerbericht einreichen, stellen Sie bitte sicher, dass Ihr BIOS und die Firmware Ihres Controllers aktuell sind.

Wenn Sie sofort einen Fehlerbericht einsenden wollen, schicken Sie bitte die folgenden Informationen an die Mailingliste freebsd-acpi:

  • Beschreiben Sie den Fehler und alle Umstände, unter denen der Fehler auftritt. Geben Sie ebenfalls den Typ und das Modell Ihres Systems an. Wenn Sie einen neuen Fehler entdeckt haben, versuchen Sie möglichst genau zu beschreiben, wann der Fehler das erste Mal aufgetreten ist.

  • Die Ausgabe von dmesg(8) nach der Eingabe von boot -v. Geben Sie auch alle Fehlermeldungen an, die erscheinen, wenn Sie den Fehler provozieren.

  • Die Ausgabe von dmesg(8) nach der Eingabe von boot -v und mit deaktiviertem ACPI, wenn das Problem ohne ACPI nicht auftritt.

  • Die Ausgabe von sysctl hw.acpi. Dieses Kommando zeigt die vom System unterstützten ACPI-Funktionen an.

  • Die URL, unter der die ACPI-Source-Language (ASL) liegt. Schicken Sie bitte nicht die ASL an die Mailingliste, da die ASL sehr groß sein kann. Eine Kopie der ASL erstellen Sie mit dem nachstehenden Befehl:

    # acpidump -td > name-system.asl
    

    Setzen Sie bitte für name den Namen Ihres Kontos und für system den Hersteller und das Modell Ihres Systems ein. Zum Beispiel: njl-FooCo6000.asl.

Obwohl die meisten Entwickler die Mailingliste freebsd-current lesen, sollten Sie Fehlerberichte an die Liste freebsd-acpi schicken. Seien Sie bitte geduldig; wir haben alle Arbeit außerhalb des Projekts. Wenn der Fehler nicht offensichtlich ist, bitten wir Sie vielleicht, einen offiziellen Fehlerbericht (PR) mit send-pr(1) einzusenden. Geben Sie im Fehlerbericht bitte dieselben Informationen wie oben an. Mithilfe der PRs verfolgen und lösen wir Probleme. Senden Sie bitte keinen PR ein, ohne vorher den Fehlerbericht an die Liste freebsd-acpi zu senden. Wir benutzen die PRs als Erinnerung an bestehende Probleme und nicht zum Sammeln aller Probleme. Es kann sein, dass der Fehler schon von jemand anderem gemeldet wurde.


12.16.2. ACPI-Grundlagen

ACPI gibt es in allen modernen Rechnern der ia32- (x86), ia64- (Itanium) und amd64- (AMD) Architektur. Der vollständige Standard bietet Funktionen zur Steuerung und Verwaltung der CPU-Leistung, der Stromversorgung, von Wärmebereichen, Batterien, eingebetteten Controllern und Bussen. Auf den meisten Systemen wird nicht der vollständige Standard implementiert. Arbeitsplatzrechner besitzen meist nur Funktionen zur Verwaltung der Busse, während Notebooks Funktionen zur Temperaturkontrolle und Ruhezustände besitzen.

Ein ACPI konformes System besitzt verschiedene Komponenten. Die BIOS- und Chipsatz-Hersteller stellen mehrere statische Tabellen bereit (zum Beispiel die Fixed-ACPI-Description-Table, FADT). Die Tabellen enthalten beispielsweise die mit SMP-Systemen benutzte APIC-Map, Konfigurationsregister und einfache Konfigurationen. Zusätzlich gibt es die Differentiated-System-Description-Table (DSDT), die Bytecode enthält. Die Tabelle ordnet Geräte und Methoden in einem baumartigen Namensraum an.

Ein ACPI-Treiber muss die statischen Tabellen einlesen, einen Interpreter für den Bytecode bereitstellen und die Gerätetreiber im Kernel so modifizieren, dass sie mit dem ACPI-Subsystem kommunizieren. Für FreeBSD, Linux und NetBSD hat Intel den Interpreter ACPI-CA, zur Verfügung gestellt. Der Quelltext zu ACPI-CA befindet sich im Verzeichnis src/sys/contrib/dev/acpica. Die Schnittstelle von ACPI-CA zu FreeBSD befindet sich unter src/sys/dev/acpica/Osd. Treiber, die verschiedene ACPI-Geräte implementieren, befinden sich im Verzeichnis src/sys/dev/acpica.


12.16.3. Häufige Probleme

Damit ACPI richtig funktioniert, müssen alle Teile funktionieren. Im Folgenden finden Sie eine Liste mit Problemen und möglichen Umgehungen oder Fehlerbehebungen. Die Liste ist nach der Häufigkeit, mit der die Probleme auftreten, sortiert.


12.16.3.1. Mausprobleme

Es kann vorkommen, dass die Maus nicht mehr funktioniert, wenn Sie nach einem Suspend weiterarbeiten wollen. Ist dies bei Ihnen der Fall, reicht es meistens aus, den Eintrag hint.psm.0.flags="0x3000" in Ihre /boot/loader.conf aufzunehmen. Besteht das Problem weiterhin, sollten Sie einen Fehlerbericht an das FreeBSD Project senden.


12.16.3.2. Suspend/Resume

ACPI kennt drei Suspend-to-RAM-Zustände (STR): S1-S3. Es gibt einen Suspend-to-Disk-Zustand: S4. Der Zustand S5 wird Soft-Off genannt. In diesem Zustand befindet sich ein Rechner, wenn die Stromversorgung angeschlossen ist, der Rechner aber nicht hochgefahren ist. Der Zustand S4 kann auf zwei Arten implementiert werden: S4BIOS und S4OS. Im ersten Fall wird der Suspend-to-Disk-Zustand durch das BIOS hergestellt im zweiten Fall alleine durch das Betriebssystem.

Anmerkung: Die Suspend-Zustände sind Ruhezustände, in denen der Rechner weniger Energie als im Normalbetrieb benötigt. Resume bezeichnet die Rückkehr zum Normalbetrieb.

Die Suspend-Zustände können Sie mit dem Kommando sysctl hw.acpi ermitteln. Das Folgende könnte beispielsweise ausgegeben werden:

hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0

Diese Ausgabe besagt, dass mit dem Befehl acpiconf -s die Zustände S3, S4OS und S5 eingestellt werden können. Hätte s4bios den Wert 1, gäbe es den Zustand S4BIOS anstelle von S4OS.

Wenn Sie die Suspend- und Resume-Funktionen testen, fangen Sie mit dem S1-Zustand an, wenn er angeboten wird. Dieser Zustand wird am ehesten funktionieren, da der Zustand wenig Treiber-Unterstützung benötigt. Der Zustand S2 ist ähnlich wie S1, allerdings hat ihn noch niemand implementiert. Als nächstes sollten Sie den Zustand S3 ausprobieren. Dies ist der tiefste STR-Schlafzustand. Dieser Zustand ist auf massive Treiber-Unterstützung angewiesen, um die Geräte wieder richtig zu initialisieren. Wenn Sie Probleme mit diesem Zustand haben, können Sie die Mailingliste freebsd-acpi anschreiben. Erwarten Sie allerdings nicht zu viel: Es gibt viele Treiber und Geräte, an denen noch gearbeitet und getestet wird.

Ein häufiges Problem mit Suspend/Resume ist, dass viele Gerätetreiber ihre Firmware, Register und Gerätespeicher nicht korrekt speichern, wiederherstellen und/oder reinitialisieren. Um dieses Problem zu lösen, sollten Sie zuerst die folgenden Befehle ausführen:

# sysctl debug.bootverbose=1
# sysctl debug.acpi.suspend_bounce=1
# acpiconf -s 3

Dieser Test emuliert einen Suspend/Resume-Zyklus für alle Geräte (ohne dass diese dabei wirklich in den Status S3 wechseln). In vielen Fällen reicht dies bereits aus, um Probleme (beispielsweise verlorener Firmware-Status, Timeouts, hängende Geräte) zu entdecken. Beachten Sie dabei, dass das Gerät bei diesem Test nicht wirklich in den Status S3 wechseln. Es kann also vorkommen, dass manche Geräte weiterhin mit Strom versorgt werden (dies wäre bei einem wirklichen Wechsel in den Status S3 NICHT möglich. Andere Geräte werden normal weiterarbeiten, weil sie über keine Suspend/Resume-Funktionen verfügen.

Schwierigere Fälle können den Einsatz zusätzlicher Hardware (beispielsweise serielle Ports/Kabel für die Verbindung über eine serielle Konsole oder Firewire-Ports/Kabel für dcons(4)) sowie Kenntnisse im Bereich Kerneldebugging erforderlich machen.

Um das Problem einzugrenzen, entfernen Sie soviele Treiber wie möglich aus dem Kernel. Sie können das Problem isolieren, indem Sie einen Treiber nach dem anderen laden, bis der Fehler wieder auftritt. Typischerweise verursachen binäre Treiber wie nvidia.ko, X11-Grafiktreiber und USB-Treiber die meisten Fehler, hingegen laufen Ethernet-Treiber für gewöhnlich sehr zuverlässig. Wenn ein Treiber zuverlässig geladen und entfernt werden kann, können Sie den Vorgang automatisieren, indem Sie die entsprechenden Kommandos in die Dateien /etc/rc.suspend und /etc/rc.resume einfügen. In den Dateien finden Sie ein deaktiviertes Beispiel, das einen Treiber lädt und wieder entfernt. Ist die Bildschirmanzeige bei der Wiederaufnahme des Betriebs gestört, setzen Sie bitte die Variable hw.acpi.reset_video auf 0. Versuchen Sie auch, die Variable hw.acpi.sleep_delay auf kürzere Zeitspannen zu setzen.

Die Suspend- und Resume-Funktionen können Sie auch auf einer neuen Linux-Distribution mit ACPI testen. Wenn es mit Linux funktioniert, liegt das Problem wahrscheinlich bei einem FreeBSD-Treiber. Es hilft uns, das Problem zu lösen, wenn Sie feststellen können, welcher Treiber das Problem verursacht. Beachten Sie bitte, dass die ACPI-Entwickler normalerweise keine anderen Treiber pflegen (beispielsweise Sound- oder ATA-Treiber). Es ist wohl das beste, die Ergebnisse der Fehlersuche an die Mailingliste freebsd-current und den Entwickler des Treibers zu schicken. Wenn Ihnen danach ist, versuchen Sie, den Fehler in der Resume-Funktion zu finden, indem Sie einige printf(3)-Anweisungen in den Code des fehlerhaften Treibers einfügen.

Schließlich können Sie ACPI noch abschalten und stattdessen APM verwenden. Wenn die Suspend- und Resume-Funktionen mit APM funktionieren, sollten Sie vielleicht besser APM verwenden (insbesondere mit alter Hardware von vor dem Jahr 2000). Die Hersteller benötigten einige Zeit, um ACPI korrekt zu implementieren, daher gibt es mit älterer Hardware oft ACPI-Probleme.


12.16.3.3. Temporäre oder permanente Systemhänger

Die meisten Systemhänger entstehen durch verlorene Interrupts oder einen Interrupt-Sturm. Probleme werden verursacht durch die Art, in der das BIOS Interrupts vor dem Systemstart konfiguriert, durch eine fehlerhafte APIC-Tabelle und durch die Zustellung des System-Control-Interrupts (SCI).

Anhand der Ausgabe des Befehls vmstat -i können Sie verlorene Interrupts von einem Interrupt-Sturm unterscheiden. Untersuchen Sie die Ausgabezeile, die acpi0 enthält. Ein Interrupt-Sturm liegt vor, wenn der Zähler öfter als ein paar Mal pro Sekunde hochgezählt wird. Wenn sich das System aufgehangen hat, versuchen Sie mit der Tastenkombination Ctrl+Alt+Esc in den Debugger DDB zu gelangen. Geben Sie dort den Befehl show interrupts ein.

Wenn Sie Interrupt-Probleme haben, ist es vorerst wohl am besten, APIC zu deaktivieren. Tragen Sie dazu die Zeile hint.apic.0.disabled="1" in loader.conf ein.


12.16.3.4. Abstürze (Panics)

Panics werden so schnell wie möglich behoben; mit ACPI kommt es aber selten dazu. Zuerst sollten Sie die Panic reproduzieren und dann versuchen einen backtrace (eine Rückverfolgung der Funktionsaufrufe) zu erstellen. Richten Sie dazu den DDB über die serielle Schnittstelle (siehe Abschnitt 27.6.5.3) oder eine gesonderte dump(8)-Partition ein. In DDB können Sie den backtrace mit dem Kommando tr erstellen. Falls Sie den backtrace vom Bildschirm abschreiben müssen, schreiben Sie bitte mindestens die fünf ersten und die fünf letzten Zeile der Ausgabe auf.

Versuchen Sie anschließend, das Problem durch einen Neustart ohne ACPI zu beseitigen. Wenn das funktioniert hat, können Sie versuchen, das verantwortliche ACPI-Subsystem durch Setzen der Variablen debug.acpi.disable herauszufinden. Die Hilfeseite acpi(4) enthält dazu einige Beispiele.


12.16.3.5. Nach einem Suspend oder einem Stopp startet das System wieder

Setzen Sie zuerst in loader.conf(5) die Variable hw.acpi.disable_on_poweroff auf 0. Damit wird verhindert, dass ACPI während des Systemabschlusses die Bearbeitung verschiedener Ereignisse deaktiviert. Auf manchen Systemen muss die Variable den Wert 1 besitzen (die Voreinstellung). Normalerweise wird der unerwünschte Neustart des Systems durch Setzen dieser Variablen behoben.


12.16.3.6. Andere Probleme

Wenn Sie weitere Probleme mit ACPI haben (Umgang mit einer Docking-Station, nicht erkannte Geräte), schicken Sie bitte eine Beschreibung an die Mailingliste. Allerdings kann es sein, dass einige Probleme von noch unvollständigen Teilen des ACPI-Subsystems abhängen und es etwas dauern kann bis diese Teile fertig sind. Seien Sie geduldig und rechnen Sie damit, dass wir Ihnen Fehlerbehebungen zum Testen senden.


12.16.4. ASL, acpidump und IASL

Ein häufiges Problem ist fehlerhafter Bytecode des BIOS-Herstellers. Dies erkennen Sie an Kernelmeldungen auf der Konsole wie die folgende:

ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUND

Oft können Sie das Problem dadurch lösen, dass Sie eine aktuelle BIOS-Version einspielen. Die meisten Meldungen auf der Konsole sind harmlos, wenn aber beispielsweise der Batteriestatus falsch angezeigt wird, können Sie in den Meldungen nach Problemen mit der AML-Machine-Language (AML) suchen. Der Bytecode der AML wird aus der ACPI-Source-Language (ASL) übersetzt und in einer Tabelle, der DSDT, abgelegt. Eine Kopie der ASL können Sie mit dem Befehl acpidump(8) erstellen. Verwenden Sie mit diesem Befehl sowohl die Option -t (die Inhalte der statischen Tabellen anzeigen) als auch die Option -d (die AML in ASL zurückübersetzen). Ein Beispiel für die Syntax finden Sie im Abschnitt Fehlerberichte einreichen.

Sie können einfach prüfen, ob sich die ASL übersetzen lässt. Für gewöhnlich können Sie Warnungen während des Übersetzens ignorieren. Fehlermeldungen führen normal dazu, dass ACPI fehlerhaft arbeitet. Ihre ASL übersetzen Sie mit dem nachstehenden Kommando:

# iasl ihre.asl

12.16.5. Die ASL reparieren

Auf lange Sicht ist es unser Ziel, dass ACPI ohne Eingriffe des Benutzers läuft. Zurzeit entwickeln wir allerdings noch Umgehungen für Fehler der BIOS-Hersteller. Der Microsoft-Interpreter (acpi.sys und acpiec.sys) prüft die ASL nicht streng gegen den Standard. Daher reparieren BIOS-Hersteller, die ACPI nur unter Windows testen, ihre ASL nicht. Wir hoffen, dass wir das vom Standard abweichende Verhalten des Microsoft-Interpreters dokumentieren und in FreeBSD replizieren können. Dadurch müssen Benutzer ihre ASL nicht selbst reparieren. Sie können Ihre ASL selbst reparieren, wenn Sie ein Problem umgehen und uns helfen möchten. Senden Sie uns bitte die mit diff(1) erstellte Differenz zwischen alter und neuer ASL. Wir werden versuchen, den Interpreter ACPI-CA zu korrigieren, damit die Fehlerbehebung nicht mehr erforderlich ist.

Die nachfolgende Liste enthält häufige Fehlermeldungen, deren Ursache und eine Beschreibung, wie die Fehler korrigiert werden:


12.16.5.1. Abhängigkeiten vom Betriebssystem

Einige AMLs gehen davon aus, dass die Welt ausschließlich aus verschiedenen Windows-Versionen besteht. FreeBSD kann vorgeben, irgendein Betriebssystem zu sein. Versuchen Sie das Betriebssystem, das Sie in der ASL finden, in der Datei /boot/loader.conf anzugeben: hw.acpi.osname="Windows 2001".


12.16.5.2. Fehlende Return-Anweisungen

Einige Methoden verzichten auf die vom Standard vorgeschriebene Rückgabe eines Wertes. Obwohl der Interpreter ACPI-CA dies nicht beheben kann, besitzt FreeBSD die Möglichkeit, den Rückgabewert implizit zu setzen. Wenn Sie wissen, welcher Wert zurückgegeben werden muss, können Sie die fehlenden Return-Anweisungen selbst einsetzen. Die Option -f zwingt iasl, die ASL zu übersetzen.


12.16.5.3. Überschreiben der vorgegebenen AML

Nachdem Sie Ihre ASL in der Datei ihre.asl angepasst haben, übersetzen Sie die ASL wie folgt:

# iasl ihre.asl

Mit der Option -f erzwingen Sie das Erstellen der AML auch wenn während der Übersetzung Fehler auftreten. Beachten Sie, dass einige Fehler, wie fehlende Return-Anweisungen, automatisch vom Interpreter umgangen werden.

In der Voreinstellung erstellt der Befehl iasl die Ausgabedatei DSDT.aml. Wenn Sie diese Datei anstelle der fehlerhaften Kopie des BIOS laden wollen, editieren Sie /boot/loader.conf wie folgt:

acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"

Stellen Sie bitte sicher, dass sich die Datei DSDT.aml im Verzeichnis /boot befindet.


12.16.6. ACPI-Meldungen zur Fehlersuche erzeugen

Der ACPI-Treiber besitzt flexible Möglichkeiten zur Fehlersuche. Sie können sowohl die zu untersuchenden Subsysteme als auch die zu erzeugenden Ausgaben festlegen. Die zu untersuchenden Subsysteme werden als so genannte “layers” angegeben. Die Subsysteme sind in ACPI-CA-Komponenten (ACPI_ALL_COMPONENTS) und ACPI-Hardware (ACPI_ALL_DRIVERS) aufgeteilt. Welche Meldungen ausgegeben werden, wird über “level” gesteuert. “level” reicht von ACPI_LV_ERROR (es werden nur Fehler ausgegeben) bis zu ACPI_LV_VERBOSE (alles wird ausgegeben). “level” ist eine Bitmaske, sodass verschiedene Stufen auf einmal (durch Leerzeichen getrennt) angegeben werden können. Die erzeugte Ausgabemenge passt vielleicht nicht in den Konsolenpuffer. In diesem Fall sollten Sie die Ausgaben mithilfe einer seriellen Konsole sichern. Die möglichen Werte für “layers” und “level” werden in der Hilfeseite acpi(4) beschrieben.

Die Ausgaben zur Fehlersuche sind in der Voreinstellung nicht aktiviert. Wenn ACPI im Kernel enthalten ist, fügen Sie options ACPI_DEBUG zur Kernelkonfigurationsdatei hinzu. Sie können die Ausgaben zur Fehlersuche global aktivieren, indem Sie in der Datei /etc/make.conf die Zeile ACPI_DEBUG=1 einfügen. Das Modul acpi.ko können Sie wie folgt neu übersetzen:

# cd /sys/modules/acpi/acpi
&& make clean &&
make ACPI_DEBUG=1

Installieren Sie anschließend acpi.ko im Verzeichnis /boot/kernel. In der Datei loader.conf stellen Sie “level” und “layer” ein. Das folgende Beispiel aktiviert die Ausgabe von Fehlern für alle ACPI-CA-Komponenten und alle ACPI-Hardwaretreiber (wie CPU, LID):

debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"

Wenn ein Problem durch ein bestimmtes Ereignis, beispielsweise den Start nach einem Ruhezustand, hervorgerufen wird, können Sie die Einstellungen für “level” und “layer” auch mit dem Kommando sysctl vornehmen. In diesem Fall müssen Sie die Datei loader.conf nicht editieren. Auf der sysctl-Kommandozeile geben Sie dieselben Variablennamen wie in loader.conf an.


12.16.7. ACPI-Informationsquellen

Weitere Informationen zu ACPI erhalten Sie an den folgenden Stellen:


Kapitel 13. FreeBSDs Bootvorgang

Übersetzt von Hans-Christian Ebke.

13.1. Übersicht

Das Starten des Computers und das Laden des Betriebssystems wird im Allgemeinen als “Bootstrap-Vorgang” bezeichnet, oder einfach als “Booten”. FreeBSDs Bootvorgang ermöglicht große Flexibilität, was das Anpassen dessen anbelangt, was passiert, wenn das System gestartet wird. Es kann zwischen verschiedenen Betriebssystemen, die auf demselben Computer installiert sind oder verschiedenen Versionen desselben Betriebssystems oder installierten Kernels gewählt werden.

Dieses Kapitel zeigt die zur Verfügung stehenden Konfigurationsmöglichkeiten und wie man den Bootvorgang anpasst. Dies schließt alles ein, bis der Kernel gestartet worden ist, der dann alle Geräte gefunden hat und init(8) gestartet hat. Falls Sie sich nicht ganz sicher sind, wann dies passiert: Es passiert, wenn die Farbe des Textes während des Bootvorgangs von weiß zu Hellgrau wechselt.

Dieses Kapitel informiert über folgende Punkte:

  • Die Komponenten des FreeBSD-Bootvorgangs und deren Interaktion.

  • Die Optionen, mit denen Sie den FreeBSD-Bootvorgang steuern können.

  • Wie Geräte mit device.hints(5) konfiguriert werden.

nur x86: Dieses Kapitel erklärt den Bootvorgang von FreeBSD auf Intel X86 Plattformen.


13.2. Das Problem des Bootens

Wenn der Computer eingeschaltet wird und das Betriebssystem gestartet werden soll, entsteht ein interessantes Dilemma, denn der Computer weiß per Definition nicht, wie er irgendetwas tut, bis das Betriebssystem gestartet wurde. Das schließt das Starten von Programmen, die sich auf der Festplatte befinden, ein. Wenn nun der Computer kein Programm von der Festplatte starten kann, sich das Betriebssystem aber dummerweise genau dort befindet, wie wird es dann gestartet?

Dieses Problem ähnelt einer Geschichte des Barons von Münchhausen. Dort war eine Person in einen Sumpf gefallen und hat sich selbst an den Riemen seiner Stiefel (engl. bootstrap) herausgezogen. In den jungen Jahren des Computerzeitalters wurde mit dem Begriff Bootstrap dann die Technik das Betriebssystem zu laden bezeichnet und wurde hinterher mit booten abgekürzt.

Auf x86-Plattformen ist das BIOS (Basic Input/Output System) dafür verantwortlich, das Betriebssystem zu laden. Dazu liest das BIOS den Master Bootsektor (MBR; Master Boot Record) aus, der sich an einer bestimmten Stelle auf der Festplatte/Diskette befinden muss. Das BIOS kann den MBR selbstständig laden und ausführen und geht davon aus, dass dieser die restlichen Dinge, die für das Laden des Betriebssystems notwendig sind, selbst oder mit Hilfe des BIOS erledigen kann.

Der Code innerhalb des MBRs wird für gewöhnlich als Boot-Manager bezeichnet, insbesondere, wenn eine Interaktion mit dem Anwender stattfindet. Ist dies der Fall, verwaltet der Boot-Manager zusätzlichen Code im ersten Track der Platte oder in Dateisystemen anderer Betriebssysteme. (Boot-Manager werden manchmal auch als Boot Loader bezeichnet, unter FreeBSD wird dieser Begriff aber für eine spätere Phase des Systemstarts verwendet.) Zu den bekanntesten Boot-Managern gehören boot0 (der auch als Boot Easy bekannte Standard-Boot-Manager von FreeBSD), Grub, GAG, sowie LILO. (Von diesen Boot-Managern hat nur boot0 innerhalb des MBRs Platz.)

Falls nur ein Betriebssystem installiert ist, ist der Standard MBR ausreichend. Dieser MBR sucht nach dem ersten bootbaren Slice (das dabei als active gekennzeichnet ist) auf dem Laufwerk und führt den dort vorhandenen Code aus, um das restliche Betriebssystem zu laden. Der von fdisk(8) in der Voreinstellung installierte MBR ist ein solcher MBR und basiert auf /boot/mbr.

Falls mehrere Betriebssysteme installiert sind, sollte man einen anderen Boot-Manager installieren, der eine Liste der verfügbaren Betriebssysteme anzeigt und einen wählen lässt, welches man booten möchte. Der nächste Abschnitt beschreibt zwei Boot-Manager mit diesen Fähigkeiten.

Das restliche FreeBSD-Bootstrap-System ist in drei Phasen unterteilt. Die erste Phase wird vom MBR durchgeführt, der gerade genug Funktionalität besitzt um den Computer in einen bestimmten Status zu verhelfen und die zweite Phase zu starten. Die zweite Phase führt ein wenig mehr Operationen durch und startet schließlich die dritte Phase, die das Laden des Betriebssystems abschließt. Der ganze Prozess wird in drei Phasen durchgeführt, weil der PC Standard die Größe der Programme, die in Phase eins und zwei ausgeführt werden, limitiert. Durch das Verketten der durchzuführenden Aufgaben wird es FreeBSD möglich, ein sehr flexibles Ladeprogramm zu besitzen.

Als nächstes wird der Kernel gestartet, der zunächst nach Geräten sucht und sie für den Gebrauch initialisiert. Nach dem Booten des Kernels übergibt dieser die Kontrolle an den Benutzer Prozess init(8), der erst sicherstellt, dass alle Laufwerke benutzbar sind und die Ressourcen Konfiguration auf Benutzer Ebene startet. Diese wiederum mountet Dateisysteme, macht die Netzwerkkarten für die Kommunikation mit dem Netzwerk bereit und startet generell alle Prozesse, die auf einem FreeBSD-System normalerweise beim Hochfahren gestartet werden.


13.3. Boot-Manager und Boot-Phasen


13.3.1. Der Boot-Manager

Der Code im MBR oder im Boot-Manager wird manchmal auch als stage zero des Boot-Prozesses bezeichnet. Dieser Abschnitt beschreibt zwei der weiter oben erwähnten Boot-Manager: boot0 sowie LILO.

Der boot0 Boot-Manager: Der vom FreeBSD-Installationsprogramm oder boot0cfg(8) in der Voreinstelung installierte Master Boot Record (MBR) basiert auf /boot/boot0. Bei boot0 handelt es sich um ein sehr einfaches Programm, da im MBR lediglich 446 Bytes verfügbar sind, weil der restliche Platz für die Partitionstabelle sowie den 0x55AA-Identifier am Ende des MBRs benötigt wird. Falls Sie boot0 verwenden und mehrere Betriebssysteme auf Ihrer Festplatte installiert haben, werden Sie beim Starten des Computers eine Anzeige ähnlich der folgenden sehen:

Beispiel 13-1. boot0-Screenshot

F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

Diverse Betriebssysteme, insbesondere Windows, überschreiben den MBR ungefragt mit ihrem eigenen. Falls einem dies passiert sein sollte, kann man mit folgendem Kommando den momentanen MBR durch den FreeBSD-MBR ersetzen:

# fdisk -B -b /boot/boot0 Gerät

Bei Gerät handelt es sich um das Gerät, von dem gebootet wird, also beispielsweise ad0 für die erste IDE-Festplatte, ad2 für die erste IDE-Festplatte am zweiten IDE-Controller, da0 für die erste SCSI-Festplatte, usw. Diese Einstellungen können aber über boot0cfg(8) angepasst werden.

Der LILO-Boot-Manager: Damit dieser Boot-Manager auch FreeBSD booten kann, starten Sie zuerst Linux und fügen danach folgende Zeilen in die Konfigurationsdatei /etc/lilo.conf ein:

other=/dev/hdXY
table=/dev/hdX
loader=/boot/chain.b
label=FreeBSD

Dabei müssen Sie die primäre Partition von FreeBSD sowie dessen Platte im Linux-Format angeben. Dazu ersetzen Sie X durch die Linux-Bezeichnung der Platte und Y durch die von Linux verwendete Partitionsnummer. Wenn Sie ein SCSI-Laufwerk verwenden, müssen Sie /dev/sd anstelle von /dev/hd verwenden. Die Zeile loader=/boot/chain.b kann weggelassen werden, wenn beide Betriebssysteme auf der gleichen Platte installiert sind. Geben Sie danach /sbin/lilo -v ein, um Ihre Änderungen zu übernehmen. Achtung Sie dabei besonders auf etwaige Fehlermeldungen.


13.3.2. Phase Eins, /boot/boot1 und Phase Zwei, /boot/boot2

Im Prinzip sind die erste und die zweite Phase Teile desselben Programms, im selben Bereich auf der Festplatte. Aufgrund von Speicherplatz-Beschränkungen wurden sie aufgeteilt, aber man installiert sie eigentlich generell zusammen. Beide werden entweder vom Installer oder von bsdlabel aus der kombinierten Datei /boot/boot kopiert.

Beide Phasen befinden sich außerhalb des Dateisystems im Bootsektor des Boot-Slices, wo boot0 oder ein anderer Boot-Manager ein Programm erwarten, das den weiteren Bootvorgang durchführen kann. Die Anzahl der dabei verwendeten Sektoren wird durch die Größe von /boot/boot bestimmt.

boot1 ist ein sehr einfaches Programm, da es nur 512 Bytes groß sein darf, und es besitzt gerade genug Funktionalität, um FreeBSDs bsdlabel, das Informationen über den Slice enthält, auszulesen, und um boot2 zu finden und auszuführen.

boot2 ist schon ein wenig umfangreicher und besitzt genügend Funktionalität, um Dateien in FreeBSDs Dateisystem zu finden. Außerdem hat es eine einfache Schnittstelle, die es ermöglicht, den zu ladenden Kernel oder Loader auszuwählen.

Da der Loader einen weitaus größeren Funktionsumfang hat und eine schöne und einfach zu bedienende Boot-Konfigurations-Schnittstelle zur Verfügung stellt, wird er gewöhnlich von boot2 anstatt des Kernels gestartet. Früher war es jedoch dazu da den Kernel direkt zu starten.

Beispiel 13-2. boot2-Screenshot

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

Um das installierte boot1 und boot2 zu ersetzen, benutzt man bsdlabel(8):

# bsdlabel -B diskslice

Wobei Slice das Laufwerk und die Slice darstellt, von dem gebootet wird, beispielsweise ad0s1 für die erste Slice auf der ersten IDE-Festplatte.

Dangerously Dedicated Mode: Wenn man nur den Festplatten-Namen, also z.B. ad0, in bsdlabel(8) benutzt wird eine "dangerously dedicated disk" erstellt, ohne Slices. Das ist ein Zustand, den man meistens nicht hervorrufen möchte. Aus diesem Grund sollte man ein bsdlabel(8)-Kommando noch einmal prüfen, bevor man Return betätigt.


13.3.3. Phase drei, /boot/loader

Der boot-loader ist der letzte von drei Schritten im Bootstrap-Prozess und kann im Dateisystem normalerweise unter /boot/loader gefunden werden.

Der Loader soll eine benutzerfreundliche Konfigurations-Schnittstelle sein mit einem einfach zu bedienenden eingebauten Befehlssatz, ergänzt durch einen umfangreichen Interpreter mit einem komplexeren Befehlssatz.


13.3.3.1. Loader Ablauf

Der Loader sucht während seiner Initialisierung nach Konsolen und Laufwerken, findet heraus, von welchem Laufwerk er gerade bootet, und setzt dementsprechend bestimmte Variablen. Dann wird ein Interpreter gestartet, der Befehle interaktiv oder von einem Skript empfangen kann.

Danach liest der Loader die Datei /boot/loader.rc aus, welche ihn standardmäßig anweist /boot/defaults/loader.conf zu lesen, wo sinnvolle Standardeinstellungen für diverse Variablen festgelegt werden und wiederum /boot/loader.conf für lokale Änderungen an diesen Variablen ausgelesen wird. Anschließend arbeitet dann loader.rc entsprechend dieser Variablen und lädt die ausgewählten Module und den gewünschten Kernel.

In der Voreinstellung wartet der Loader 10 Sekunden lang auf eine Tastatureingabe und bootet den Kernel, falls keine Taste betätigt wurde. Falls doch eine Taste betätigt wurde wird dem Benutzer eine Eingabeaufforderung angezeigt. Sie nimmt einen einfach zu bedienenden Befehlssatz entgegen, der es dem Benutzer erlaubt, Änderungen an Variablen vorzunehmen, Module zu laden, alle Module zu entladen oder schließlich zu booten bzw. neu zu booten.


13.3.3.2. Die eingebauten Befehle des Loaders

Hier werden nur die gebräuchlichsten Befehle bearbeitet. Für eine erschöpfende Diskussion aller verfügbaren Befehle konsultieren Sie bitte loader(8).

autoboot Sekunden

Es wird mit dem Booten des Kernels fortgefahren, falls keine Taste in der gegebenen Zeitspanne betätigt wurde. In der gegebenen Zeitspanne, Vorgabe sind 10 Sekunden, wird ein Countdown angezeigt.

boot [-options] [Kernelname]

Bewirkt das sofortige Booten des Kernels mit den gegebenen Optionen, falls welche angegeben wurden, und mit den angegebenen Kernel, falls denn einer angegeben wurde. Das übergeben eines Kernelnamens ist nur nach einem unload-Befehl anwendbar, andernfalls wird der zuvor verwendete Kernel benutzt.

boot-conf

Bewirkt die automatische Konfiguration der Module, abhängig von den entsprechenden Variablen. Dieser Vorgang ist identisch zu dem Vorgang, den der Bootloader ausführt und daher nur sinnvoll, wenn zuvor unload benutzt wurde und Variablen (gewöhnlich kernel) verändert wurden.

help [Thema]

Zeigt die Hilfe an, die zuvor aus der Datei /boot/loader.help gelesen wird. Falls index als Thema angegeben wird, wird die Liste der zur Verfügung stehenden Hilfe-Themen angezeigt.

include Dateiname ...

Verarbeitet die angegebene Datei. Das Einlesen und Interpretieren geschieht Zeile für Zeile und wird im Falle eines Fehlers umgehend unterbrochen.

load [-t Typ] Dateiname

Lädt den Kernel, das Kernel-Modul, oder die Datei des angegebenen Typs. Optionen, die auf den Dateinamen folgen, werden der Datei übergeben.

ls [-l] [Pfad]

Listet die Dateien im angegebenen Pfad auf, oder das root-Verzeichnis(/), falls kein Pfad angegeben wurde. Die Option -l bewirkt, dass die Dateigrössen ebenfalls angezeigt werden.

lsdev [-v]

Listet alle Geräte auf, für die Module geladen werden können. Die Option -v bewirkt eine detailreichere Ausgabe.

lsmod [-v]

Listet alle geladenen Module auf. Die Option -v bewirkt eine detailreichere Ausgabe.

more Dateiname

Zeigt den Dateinhalt der angegebenen Datei an, wobei eine Pause alle LINES Zeilen gemacht wird.

reboot

Bewirkt einen umgehenden Neustart des Systems.

set Variable, set Variable=Wert

Setzt die Umgebungsvariablen des Loaders.

unload

Entlädt sämtliche geladenen Module.


13.3.3.3. Beispiele für die Loader Bedienung

Hier ein paar praktische Beispiele für die Bedienung des Loaders.

  • Um den gewöhnlichen Kernel im Single-User Modus zu starten:

    boot -s
    
  • Um alle gewöhnlichen Kernelmodule zu entladen und dann nur den alten (oder jeden beliebigen anderen) Kernel zu laden:

    unload
    load kernel.old
    

    Es kann kernel.GENERIC verwendet werden, um den allgemeinen Kernel zu bezeichnen, der vorinstalliert wird. kernel.old bezeichnet den Kernel, der vor dem aktuellen installiert war (falls man einen neuen Kernel kompiliert und installiert hat zum Beispiel).

    Anmerkung: Der folgende Befehl lädt die gewöhnlichen Module mit einem anderen Kernel:

    unload
    set kernel="kernel.old"
    boot-conf
    
  • Folgendes lädt ein Kernelkonfigurations-Skript (ein automatisiertes Skript, dass dasselbe tut, was der Benutzer normalerweise von Hand an der Eingabeaufforderung durchführen würde):

    load -t userconfig_script /boot/kernel.conf
    

13.3.3.4. Willkommmensbildschirme während des Bootvorgangs

Contributed by Joseph J. Barbish. Übersetzt von Benedict Reuschling.

Die Willkommmensbildschirme erzeugen einen visuell viel ansprechenderen Bootvorgang im Vergleich zu den herkömmlichen Bootmeldungen. Diese Bildschirme werden entweder bis zu einem Konsolen-Login-Prompt oder dem eines X-Display Managers angezeigt.

Es existieren zwei grundlegende Umgebungen in FreeBSD. Die erste ist die altbekannte, auf virtuellen Konsolen basierte Kommandozeile. Nachdem das System den Bootvorgang abgeschlossen hat, wird ein Anmeldebildschirm auf der Konsole anzeigt. Die zweite Umgebung ist die graphische X11-Desktop Umgebung. Nachdem X11 und eine der Graphischen Oberflächen, wie GNOME, KDE, oder XFce installiert wurden, kann der X11-Desktop über das Kommando startx gestartet werden.

Manche Benutzer ziehen den graphischen Anmeldebildschirm von X11 dem traditionellen, textbasierten Anmeldeprompt vor. Display-Manager wie XDM für Xorg, gdm für GNOME und kdm für KDE (und viele weitere aus der Ports-Sammlung) bieten einen graphischen statt dem konsolenbasierten Anmeldebildschirm. Nach einer erfolgreichen Anmeldung kann der Benutzer die graphische Oberfläche verwenden.

In der Kommandozeilen-Umgebung würde der Willkommensbildschirm alle Erkennungsmeldungen des Bootvorgangs und die Startmeldungen von Diensten verstecken, bevor der Anmeldebildschirm erscheint. In der X11-Umgebung erhalten die Anwender einen klareren visuellen Eindruck des Startvorgangs, ähnlich zu dem, den Microsoft Windows (oder ein nicht-Unix-artiger Systemtyp) zur Verfügung stellt.


13.3.3.4.1. Willkommensbildschirm-Funktionalität

Die Willkommensbildschirm-Funktionalität unterstützt nur 256-Farben Bitmaps (.bmp), ZSoft PCX (.pcx) oder TheDraw (.bin) Dateien. Zusätzlich muss die Willkommensbildschirm-Datei eine Auflösung von 320 mal 200 Pixeln oder weniger besitzen, damit Standard-VGA Geräte damit arbeiten können.

Um grössere Bilder bis zu einer maximalen Auflösung von 1024 mal 768 Pixeln zu verwenden, muss Unterstützung für VESA in FreeBSD enthalten sein. Dies kann durch das Laden des VESA-Moduls während des Systemstarts geschehen, oder durch Hinzufügen der VESA-Kernelkonfigurationsoption und anschliessendem Bau des Kernels (Lesen Sie dazu Kapitel 9). Die VESA-Unterstützung ermöglicht es den Benutzern, Willkommensbildschirme als Vollbild anzuzeigen, die den gesamten Bildschirm ausfüllen.

Wenn der Willkommensbildschirm beim Bootvorgang angezeigt wird, kann dieser jederzeit mit einem beliebigen Tastendruck ausgeschaltet werden.

Der Willkommensbildschirm ist standardmässig so eingestellt, dass er als Bildschirmschoner ausserhalb von X11 verwendet wird. Nach einer bestimmten Zeit der Untätigkeit wird der Willkommensbildschirm angezeigt und wechselt durch verschiedene Stufen der Intensität von hell zu einem sehr dunklen Bild und wieder zurück. Dieses Verhalten des Standard-Willkommensbildschirms (Screen-Saver) kann durch hinzufügen einer saver=-Zeile in /etc/rc.conf geändert werden. Die Option saver= besitzt mehrere eingebaute Screen-Saver, aus denen man wählen kann, und deren komplette Liste in der splash(4)-Manualpage enthalten ist. Der Standard-Screen-Saver ist “warp”. Beachten Sie, dass sich die saver=-Option in /etc/rc.conf nur auf virtuelle Konsolen bezieht. Sie hat keinen Effekt auf X11-Display-Manager.

Ein paar Nachrichten des Bootloaders und ganz besonders das Menü mit den Bootoptionen und dem Warte-Countdown werden zur Bootzeit angezeigt, selbst wenn der Willkommensbildschirm aktiviert ist.

Dateien mit Beispiel-Willkommensbildschirmen können von der Galerie auf http://artwork.freebsdgr.orgb heruntergeladen werden. Durch die Installation des Ports sysutils/bsd-splash-changer können Willkommensbildschirme von einer zufällig ausgewählten Sammlung von Bildern bei jedem Neustart angezeigt werden.


13.3.3.4.2. Aktivieren der Willkommensbildschirm-Funktionalität

Die Willkommensbildschirm-Datei (.bmp, .pcx oder .bin) muss im Wurzelverzeichnis, z.B. /boot abgelegt werden.

Für die Standard-Auflösung (256-Farben, 320 mal 200 Pixel oder weniger) beim Booten bearbeiten Sie die Datei /boot/loader.conf, so dass diese die folgenden Zeilen enthält:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Für grössere Video-Auflösungen bis zum Maximum von 1024 mal 768 Pixeln ändern Sie die Datei /boot/loader.conf, damit diese die folgenden Zeilen enthält:

vesa_load="YES"
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Das Beispiel oben nimmt an, dass /boot/splash.bmp als Willkommensbildschirm verwendet wird. Wenn eine PCX-Datei verwendet werden soll, benutzen Sie die folgenden Zeilen, inklusive der vesa_load="YES"-Zeile, abhängig von der Auflösung.

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"

In der Version 8.3 kann als weitere Option ascii-Kunst im TheDraw Format verwendet werden.

splash_txt="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bin"

Wie das Beispiel oben demonstriert, ist der Dateiname nicht auf “splash” beschränkt. Es ist beliebig, so lange es den Dateityp BMP oder PCX besitzt, z.B. splash_640x400.bmp oder blue_wave.pcx.

Weitere interessante Optionen für loader.conf sind:

beastie_disable="YES"

Diese Option verhindert die Anzeige des Menüs mit den Bootoptionen, aber der Countdown ist immer noch aktiv. Selbst wenn das Bootmenü deaktiviert ist, kann während des Countdowns eine der korrespondierenden Optionen ausgewählt werden.

loader_logo="beastie"

Dies ersetzt die Standardanzeige des Wortes “FreeBSD”. Stattdessen wird wie in der Vergangenheit auf der rechten Seite des Bootmenüs das bunte Beastie-Logo angezeigt.

Für weitere Informationen lesen Sie die Manualpages splash(4), loader.conf(5) und vga(4).


13.4. Kernel Interaktion während des Bootprozesses

Wenn der Kernel einmal geladen ist, entweder durch den Loader (die Standardmethode) oder durch boot2 (den Loader umgehend), verhält sich gemäß seiner Boot-Flags, falls es welche gibt.


13.4.1. Kernel Boot-Flags

Es folgt eine Auflistung der gebräuchlichsten Boot-Flags:

-a

Bewirkt, dass der Benutzer während der Kernel-Initialisierung gefragt wird, welches Gerät als Root-Dateisystem gemounted werden soll.

-C

Es wird von CD-ROM gebootet.

-c

UserConfig, das Boot-Zeit Konfigurationsprogramm, wird gestartet.

-s

Bewirkt den Start des Single-User Modus.

-v

Zeigt mehr Informationen während des Starten des Kernels an.

Anmerkung: Andere Boot-Flags sind in der Hilfeseite boot(8) erläutert.


13.5. Konfiguration von Geräten

Beigetragen von Tom Rhodes.

Der Boot-Loader liest während des Systemstarts die Datei device.hints(5), die Variablen, auch “device hints” genannt, zur Konfiguration von Geräten enthält.

Die Variablen können auch mit Kommandos in der Phase 3 des Boot-Loaders bearbeitet werden. Neue Variablen werden mit set gesetzt, unset löscht schon definierte Variablen und show zeigt Variablen an. Variablen aus /boot/device.hints können zu diesem Zeitpunkt überschrieben werden. Die hier durchgeführten Änderungen sind nicht permanent und beim nächsten Systemstart nicht mehr gültig.

Nach dem Systemstart können alle Variablen mit kenv(1) angezeigt werden.

Pro Zeile enthält /boot/device.hints eine Variable. Kommentare werden, wie üblich, durch # eingeleitet. Die verwendete Syntax lautet:

hint.driver.unit.keyword="value"

Der Boot-Loader verwendet die nachstehende Syntax:

set hint.driver.unit.keyword=value

Der Gerätetreiber wird mit driver, die Nummer des Geräts mit unit angegeben. keyword ist eine Option aus der folgenden Liste:

  • at: Gibt den Bus, auf dem sich das Gerät befindet, an.

  • port: Die Startadresse des I/O-Bereichs.

  • irq: Gibt die zu verwendende Unterbrechungsanforderung (IRQ) an.

  • drq: Die Nummer des DMA Kanals.

  • maddr: Die physikalische Speicheradresse des Geräts.

  • flags: Setzt verschiedene gerätespezifische Optionen.

  • disabled: Deaktiviert das Gerät, wenn der Wert auf 1 gesetzt wird.

Ein Gerätetreiber kann mehr Optionen, als die hier beschriebenen, besitzen oder benötigen. Schlagen Sie die Optionen bitte in der Online-Hilfe des Treibers nach. Weitere Informationen erhalten Sie in device.hints(5), kenv(1), loader.conf(5) und loader(8).


13.6. Init: Initialisierung der Prozess-Kontrolle

Nachdem der Kernel den Bootprozess abgeschlossen hat, übergibt er die Kontrolle an den Benutzer-Prozess init(8). Dieses Programm befindet sich in /sbin/init, oder dem Pfad, der durch die Variable init_path im Loader spezifiziert wird.


13.6.1. Der automatische Reboot-Vorgang

Der automatische Reboot-Vorgang stellt sicher, dass alle Dateisysteme des Systems konsistent sind. Falls dies nicht der Fall ist und die Inkonsistenz nicht durch fsck(8) behebbar ist, schaltet init(8) das System in den Single-User Modus, damit der Systemadministrator sich des Problems annehmen kann.


13.6.2. Der Single-User Modus

Das Schalten in diesen Modus kann erreicht werden durch den automatischen Reboot-Vorgang, durch das Booten mit der Option -s oder das Setzen der boot_single Variable in Loader.

Weiterhin kann der Single-User Modus aus dem Mehrbenutzermodus heraus durch den Befehl shutdown(8) ohne die reboot (-r) oder halt (-h) Option erreicht werden.

Falls die System-Konsole (console) in /etc/ttys auf insecure (dt.: unsicher) gesetzt ist, fordert das System allerdings zur Eingabe des Passworts von root auf, bevor es den Single-User Modus aktiviert.

Beispiel 13-3. Auf insecure gesetzte Konsole in /etc/ttys

# name  getty                           type    status          comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown off insecure

Anmerkung: Eine Konsole sollte auf insecure gesetzt sein, wenn die physikalische Sicherheit der Konsole nicht gegeben ist und sichergestellt werden soll, dass nur Personen, die das Passwort von root kennen, den Single-User Modus benutzen können. Es bedeutet nicht, dass die Konsole "unsicher" laufen wird. Daher sollte man insecure wählen, wenn man auf Sicherheit bedacht ist, nicht secure.


13.6.3. Mehrbenutzermodus

Stellt init(8) fest, dass das Dateisystem in Ordnung ist, oder der Benutzer den Single-User Modus beendet, schaltet das System in den Mehrbenutzermodus, in dem dann die Ressourcen Konfiguration des Systems gestartet wird.


13.6.3.1. Ressourcen Konfiguration, rc-Dateien

Das Ressourcen Konfigurationssystem (engl. resource configuration, rc) liest seine Standardkonfiguration von /etc/defaults/rc.conf und System-spezifische Details von /etc/rc.conf. Dann mountet es die Dateisysteme gemäß /etc/fstab, startet die Netzwerkdienste, diverse System Daemons und führt schließlich die Start-Skripten der lokal installierten Anwendungen aus.

Die rc(8) Handbuch Seite ist eine gute Quelle für Informationen über das Ressourcen Konfigurationssystem und ebenso über die Skripte an sich.


13.7. Der Shutdown-Vorgang

Im Falle eines regulären Herunterfahrens durch shutdown(8) führt init(8) /etc/rc.shutdown aus, sendet dann sämtlichen Prozessen ein TERM Signal und schließlich ein KILL Signal an alle Prozesse, die sich nicht schnell genug beendet haben.

FreeBSD-Systeme, die Energieverwaltungsfunktionen unterstützen, können Sie mit dem Kommando shutdown -p now ausschalten. Zum Neustart des Systems benutzen Sie shutdown -r now. Das Kommando shutdown(8) kann nur von root oder Mitgliedern der Gruppe operator benutzt werden. Sie können auch die Kommandos halt(8) und reboot(8) verwenden. Weitere Informationen finden Sie in den Hilfeseiten der drei Kommandos.

Anmerkung: Unter FreeBSD müssen Sie die acpi(4)-Unterstützung im Kernel aktivieren oder das Modul geladen haben, damit Sie die Energieverwaltungsfunktionen benutzen können.


Kapitel 14. Benutzer und grundlegende Account-Verwaltung

Beigetragen von Neil Blakey-Milner. Übersetzt von Robert Drehmel.

14.1. Übersicht

Einen FreeBSD-Computer können mehrere Benutzer zur selben Zeit benutzen, allerdings kann immer nur einer vor der Konsole sitzen [6], über das Netzwerk können beliebig viele Benutzer angemeldet sein. Jeder Benutzer muss einen Account haben, um das System benutzen zu können.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie

  • die verschiedenen Account-Typen von FreeBSD kennen,

  • wissen, wie Accounts angelegt werden,

  • wissen, wie Sie Accounts löschen,

  • wie Sie Attribute eines Accounts, wie den Loginnamen oder die Login-Shell ändern,

  • wissen, wie Sie Limits für einen Account setzen, um beispielsweise Ressourcen, wie Speicher oder CPU-Zeit, einzuschränken,

  • wie Sie mit Gruppen die Verwaltung der Accounts vereinfachen.

Vor dem Lesen dieses Kapitels sollten Sie

  • die Grundlagen von UNIX und FreeBSD (Kapitel 4) verstanden haben.


14.2. Einführung

Jeder Zugriff auf das System geschieht über Accounts und alle Prozesse werden von Benutzern gestartet, also sind Benutzer- und Account-Verwaltung von wesentlicher Bedeutung in FreeBSD-Systemen.

Mit jedem Account eines FreeBSD-Systems sind bestimmte Informationen verknüpft, die diesen Account identifizieren.

Loginnamen

Den Loginnamen geben Sie bei der Anmeldung ein, wenn Sie dazu mit login: aufgefordert werden. Loginnamen müssen auf dem System eindeutig sein, das heißt auf einem System kann es nicht zwei Accounts mit demselben Loginnamen geben. In passwd(5) wird beschrieben, wie ein gültiger Loginname gebildet wird. Normalerweise sollten Sie Namen verwenden, die aus Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind.

Passwort

Mit jedem Account ist ein Passwort verknüpft. Wenn das Passwort leer ist, wird es bei der Anmeldung nicht abgefragt. Das ist allerdings nicht zu empfehlen, daher sollte jeder Account ein Passwort besitzen.

User ID (UID)

Die UID ist üblicherweise eine Zahl zwischen 0 und 65535[7], die einen Account eindeutig identifiziert. Intern verwendet FreeBSD nur die UID, Loginnamen werden zuerst in eine UID umgewandelt, mit der das System dann weiter arbeitet. Das bedeutet, dass Sie Accounts mit unterschiedlichen Loginnamen aber gleicher UID einrichten können. Vom Standpunkt des Systems handelt es sich dabei um denselben Account. In der Praxis werden Sie diese Eigenschaft des Systems wahrscheinlich nicht benutzen.

Group ID (GID)

Die GID ist üblicherweise eine Zahl zwischen 0 und 65536[7], die eine Gruppe eindeutig identifiziert. Mit Gruppen kann der Zugriff auf Ressourcen über die GID anstelle der UID geregelt werden. Einige Konfigurationsdateien werden durch diesen Mechanismus deutlich kleiner. Ein Account kann mehreren Gruppen zugehören.

Login-Klasse

Login-Klassen erweitern das Gruppenkonzept. Sie erhöhen die Flexibilität des Systems in der Handhabung der verschiedenen Accounts.

Gültigkeit von Passwörtern

Ein regelmäßiges Ändern des Passworts wird in der Voreinstellung von FreeBSD nicht erzwungen. Sie können allerdings einen Passwortwechsel nach einer gewissen Zeit auf Basis einzelner Accounts erzwingen.

Verfallszeit eines Accounts

In der Voreinstellung verfallen unter FreeBSD keine Accounts. Wenn Sie Accounts einrichten, die nur für eine bestimmte Zeit gültig sein sollen, beispielsweise Accounts für Teilnehmer eines Praktikums, können Sie angeben, wie lange der Account gültig sein soll. Nachdem die angegebene Zeitspanne verstrichen ist, kann dieser Account nicht mehr zum Anmelden verwendet werden, obwohl alle Verzeichnisse und Dateien, die diesem Account gehören, noch vorhanden sind.

vollständiger Benutzername

FreeBSD identifiziert einen Account eindeutig über den Loginnamen, der aber keine Ähnlichkeit mit dem richtigen Namen des Benutzers haben muss. Der vollständige Benutzername kann daher beim Einrichten eines Accounts angegeben werden.

Heimatverzeichnis

Das Heimatverzeichnis gibt den vollständigen Pfad zu dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher Anmeldung befindet. Es ist üblich, alle Heimatverzeichnisse unter /home/Loginname oder /usr/home/Loginname anzulegen. Im Heimatverzeichnis oder in dort angelegten Verzeichnissen werden die Dateien eines Benutzers gespeichert.

Login-Shell

Grundsätzlich ist die Schnittstelle zum System eine Shell, von denen es viele unterschiedliche gibt. Die bevorzugte Shell eines Benutzers kann seinem Account zugeordnet werden.

Es gibt drei Haupttypen von Accounts: Der Superuser, Systembenutzer und Benutzer-Accounts. Der Superuser-Account, normalerweise root genannt, wird benutzt, um das System ohne Beschränkungen auf Privilegien zu verwalten. Systembenutzer starten Dienste. Abschließend werden Benutzer-Accounts von echten Menschen genutzt, die sich einloggen, Mails lesen und so weiter.


14.3. Der Superuser-Account

Der Superuser-Account, normalerweise root genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte aber nicht für alltägliche Aufgaben wie das Verschicken und Empfangen von Mails, Entdecken des Systems oder Programmierung benutzt werden.

Das ist so, da der Superuser im Gegensatz zu normalen Benutzer-Accounts ohne Beschränkungen operiert und falsche Anwendung des Superuser-Accounts in spektakulären Katastrophen resultieren kann. Benutzer-Accounts sind nicht in der Lage, das System versehentlich zu zerstören, deswegen ist es generell am besten normale Benutzer-Accounts zu verwenden, solange man nicht hauptsächlich die extra Privilegien benötigt.

Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und dreifach überprüfen, da ein zusätzliches Leerzeichen oder ein fehlender Buchstabe irreparablen Datenverlust bedeuten kann.

Das erste, das Sie tun sollten, nachdem Sie dieses Kapitel gelesen haben, ist einen unprivilegierten Benutzer für Ihre eigene normale Benutzung zu erstellen, wenn Sie das nicht bereits getan haben. Das trifft immer zu, egal ob Sie ein Mehrbenutzersystem oder ein System laufen haben, welches Sie alleine benutzen. Später in diesem Kapitel besprechen wir, wie man zusätzliche Accounts erstellt und wie man zwischen dem normalen Benutzer und dem Superuser wechselt.


14.4. System-Accounts

Systembenutzer starten Dienste wie DNS, Mail-Server, Web-Server und so weiter. Der Grund dafür ist die Sicherheit; wenn die Programme von dem Superuser gestartet werden, können Sie ohne Einschränkungen handeln.

Beispiele von Systembenutzern sind daemon, operator, bind (für den Domain Name Service) und news und www.

nobody ist der generische unprivilegierte Systembenutzer. Bedenken Sie aber, dass je mehr Dienste nobody benutzen, desto mehr Dateien und Prozesse diesem Benutzer gehören und dieser Benutzer damit umso privilegierter wird.


14.5. Benutzer-Accounts

Benutzer-Accounts sind das primäre Mittel des Zugriffs für Menschen auf das System und isolieren Benutzer und Umgebung, schützen die Benutzer davor, das System oder Daten anderer Benutzer zu beschädigen und erlauben Benutzern ihre Umgebung selbst einzurichten, ohne das sich dies auf andere auswirkt.

Jede Person, die auf Ihr System zugreift, sollte ihren eigenen Account besitzen. Das erlaubt Ihnen herauszufinden, wer was macht und hält Leute davon ab, die Einstellungen der anderen zu verändern oder Mails zu lesen, die nicht für sie bestimmt waren.

Jeder Benutzer kann sich eine eigene Umgebung mit alternativen Shells, Editoren, Tastaturbelegungen und Sprachen einrichten.


14.6. Accounts verändern

Unter UNIX gibt es verschiedene Kommandos, um Accounts zu verändern. Die gebräuchlichsten Kommandos sind unten, gefolgt von einer detaillierten Beschreibung, zusammengefasst.

Kommando Zusammenfassung
adduser(8) Das empfohlene Werkzeug, um neue Accounts zu erstellen.
rmuser(8) Das empfohlene Werkzeug, um Accounts zu löschen.
chpass(1) Ein flexibles Werkzeug, um Informationen in der Account-Datenbank zu verändern.
passwd(1) Ein einfaches Werkzeug, um Passwörter von Accounts zu ändern.
pw(8) Ein mächtiges und flexibles Werkzeug um alle Informationen über Accounts zu ändern.

14.6.1. adduser

adduser(8) ist ein einfaches Programm um neue Benutzer hinzuzufügen. Es erstellt passwd und group Einträge für den Benutzer, genauso wie ein home Verzeichnis, kopiert ein paar vorgegebene Dotfiles aus /usr/share/skel und kann optional dem Benutzer eine ,,Willkommen``-Nachricht zuschicken.

Beispiel 14-1. Einen Benutzer unter FreeBSD anlegen

# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#

Anmerkung: Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen angezeigt. Passen Sie auf, dass Sie das Passwort korrekt eingeben.


14.6.2. rmuser

Benutzen Sie rmuser(8), um einen Account vollständig aus dem System zu entfernen. rmuser(8) führt die folgenden Schritte durch:

  1. Entfernt den crontab(1) Eintrag des Benutzers (wenn dieser existiert).

  2. Entfernt alle at(1) jobs, die dem Benutzer gehören.

  3. Schließt alle Prozesse des Benutzers.

  4. Entfernt den Benutzer aus der lokalen Passwort-Datei des Systems.

  5. Entfernt das Heimatverzeichnis des Benutzers (falls es dem Benutzer gehört).

  6. Entfernt eingegange E-Mails des Benutzers aus /var/mail.

  7. Entfernt alle Dateien des Benutzers aus temporären Dateispeicherbereichen wie /tmp.

  8. Entfernt den Loginnamen von allen Gruppen, zu denen er gehört, aus /etc/group.

    Anmerkung: Wenn eine Gruppe leer wird und der Gruppenname mit dem Loginnamen identisch ist, wird die Gruppe entfernt; das ergänzt sich mit den einzelnen Benutzer-Gruppen, die von adduser(8) für jeden neuen Benutzer erstellt werden.

Der Superuser-Account kann nicht mit rmuser(8) entfernt werden, da dies in den meisten Fällen das System unbrauchbar macht.

Als Vorgabe wird ein interaktiver Modus benutzt, der sicherzustellen versucht, dass Sie wissen, was Sie tun.

Beispiel 14-2. Interaktives Löschen von Account mit rmuser

# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#

14.6.3. chpass

chpass(1) ändert Informationen der Benutzerdatenbank wie Passwörter, Shells und persönliche Informationen.

Nur Systemadministratoren, mit Superuser-Rechten, können die Informationen und Passwörter der anderen Benutzer mit chpass(1) verändern.

Werden keine Optionen neben dem optionalen Loginnamen angegeben, zeigt chpass(1) einen Editor mit Account-Informationen an und aktualisiert die Account-Datenbank, wenn dieser verlassen wird.

Anmerkung: Unter FreeBSD wird nach dem Verlassen des Editors nach dem Passwort gefragt, es sei denn, man ist als Superuser angemeldet.

Beispiel 14-3. Interaktives chpass des Superusers

#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Der normale Benutzer kann nur einen kleinen Teil dieser Informationen verändern und natürlich nur die Daten des eigenen Accounts.

Beispiel 14-4. Interaktives chpass eines normalen Benutzers

#Changing user database information for jru.
Shell: /usr/local/bin/tcsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Anmerkung: chfn(1) und chsh(1) sind nur Verweise auf chpass(1) genauso wie ypchpass(1), ypchfn(1) und ypchsh(1). NIS wird automatisch unterstützt, deswegen ist es nicht notwendig das yp vor dem Kommando einzugeben. NIS wird später in Kapitel 30 besprochen.


14.6.4. passwd

passwd(1) ist der übliche Weg, Ihr eigenes Passwort als Benutzer zu ändern oder das Passwort eines anderen Benutzers als Superuser.

Anmerkung: Um unberechtigte Änderungen zu verhindern, muss bei einem Passwortwechsel zuerst das ursprüngliche Passwort eingegeben werden.

Beispiel 14-5. Wechseln des Passworts

% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done

# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done

Beispiel 14-6. Als Superuser das Passwort eines anderen Accounts verändern

# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done

Anmerkung: Wie bei chpass(1) ist yppasswd(1) nur ein Verweis auf passwd(1). NIS wird von jedem dieser Kommandos unterstützt.


14.6.5. pw

pw(8) ist ein Kommandozeilenprogramm, mit dem man Accounts und Gruppen erstellen, entfernen, verändern und anzeigen kann. Dieses Kommando dient als Schnittstelle zu den Benutzer- und Gruppendateien des Systems. pw(8) besitzt eine Reihe mächtiger Kommandozeilenschalter, die es für die Benutzung in Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung des Kommandos komplizierter, als die der anderen hier vorgestellten Kommandos.


14.7. Benutzer einschränken

Wenn ein System von mehreren Benutzern verwendet wird, ist es vielleicht notwendig, den Gebrauch des Systems zu beschränken. FreeBSD bietet dem Systemadministrator mehrere Möglichkeiten die System-Ressourcen, die ein einzelner Benutzer verwenden kann, einzuschränken. Diese Limitierungen sind in zwei Kategorien eingeteilt: Festplattenkontingente und andere Ressourcenbeschränkungen.

Festplatten-Kontingente schränken den Plattenplatz, der einem Benutzer zur Verfügung steht, ein. Sie bieten zudem, ohne aufwändige Berechnung, einen schnellen Überblick über den verbrauchten Plattenplatz. Kontingente werden in Abschnitt 19.15 diskutiert.

Die Login-Klassen werden in /etc/login.conf definiert. Auf die präzisen Semantiken gehen wir hier nicht weiter ein, sie können jedoch in login.conf(5) nachgelesen werden. Es ist ausreichend zu sagen, dass jeder Benutzer einer Login-Klasse zugewiesen wird (standardmäßig default) und dass jede Login-Klasse mit einem Satz von Login-Fähigkeiten verbunden ist. Eine Login-Fähigkeit ist ein Name=Wert Paar, in dem Name die Fähigkeit bezeichnet und Wert ein willkürlicher Text ist, der je nach Name entsprechend verarbeitet wird. Login-Klassen und -Fähigkeiten zu definieren, ist fast schon selbsterklärend und wird auch in login.conf(5) beschrieben.

Anmerkung: Das System verwendet die Datei /etc/login.conf normalerweise nicht direkt, sondern nur über die Datenbank /etc/login.conf.db, da diese eine schnellere Abfrage erlaubt. Der nachstehende Befehl erzeugt die Datenbank /etc/login.conf.db aus der Datei /etc/login.conf:

# cap_mkdb /etc/login.conf

Ressourcenbeschränkungen unterscheiden sich von normalen Login-Fähigkeiten zweifach. Erstens gibt es für jede Beschränkung ein aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig bis zum maximalen Limit verändert werden. Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die meisten Ressourcenbeschränkungen für jeden vom Benutzer gestarteten Prozess, nicht für den Benutzer selbst. Beachten Sie jedoch, dass diese Unterschiede durch das spezifische Einlesen der Limits und nicht durch das System der Login-Fähigkeiten entstehen (das heißt, Ressourcenbeschränkungen sind keine Login-Fähigkeiten).

Hier befinden sich die am häufigsten benutzten Ressourcenbeschränkungen (der Rest kann zusammen mit den anderen Login-Fähigkeiten in login.conf(5) gefunden werden):

coredumpsize

Das Limit der Größe einer core-Datei, die von einem Programm generiert wird, unterliegt aus offensichtlichen Gründen anderen Limits der Festplattenbenutzung (zum Beispiel filesize oder Festplattenkontingenten). Es wird aber trotzdem oft als weniger harte Methode zur Kontrolle des Festplattenplatz-Verbrauchs verwendet: Da Benutzer die core-Dateien nicht selbst erstellen, und sie oft nicht löschen, kann sie diese Option davor retten, dass ihnen kein Festplattenspeicher mehr zur Verfügung steht, sollte ein großes Programm, wie emacs, abstürzen.

cputime

Die maximale Rechenzeit, die ein Prozess eines Benutzers verbrauchen darf. Überschreitet der Prozess diesen Wert, wird er vom Kernel beendet.

Anmerkung: Die Rechenzeit wird limitiert, nicht die prozentuale Prozessorenbenutzung, wie es in einigen Feldern in top(1) und ps(1) dargestellt wird. Letzteres war zu der Zeit, als dies hier geschrieben wurde nicht möglich und würde eher nutzlos sein: Ein Compiler - ein wahrscheinlich legitimer Vorgang - kann leicht fast 100% des Prozessors in Anspruch nehmen.

filesize

Hiermit lässt sich die maximale Größe einer Datei bestimmen, die der Benutzer besitzen darf. Im Gegensatz zu Festplattenkontingenten ist diese Beschränkung nur für jede einzelne Datei gültig und nicht für den Platz, den alle Dateien eines Benutzers verwenden.

maxproc

Das ist die maximale Anzahl von Prozessen, die ein Benutzer starten darf, und beinhaltet sowohl Vordergrund- als auch Hintergrundprozesse. Natürlich darf dieser Wert nicht höher sein als das System-Limit, das in kern.maxproc angegeben ist. Vergessen Sie auch nicht, dass ein zu kleiner Wert den Benutzer in seiner Produktivität einschränken könnte; es ist oft nützlich, mehrfach eingeloggt zu sein, oder Pipelines [8] zu verwenden. Ein paar Aufgaben, wie die Kompilierung eines großen Programms, starten mehrere Prozesse (zum Beispiel make(1), cc(1) und andere).

memorylocked

Dieses Limit gibt an, wie viel virtueller Speicher von einem Prozess maximal im Arbeitsspeicher festgesetzt werden kann. (siehe auch mlock(2)). Ein paar systemkritische Programme, wie amd(8), verhindern damit einen Systemzusammenbruch, der auftreten könnte, wenn sie aus dem Speicher genommen werden.

memoryuse

Bezeichnet den maximalen Speicher, den ein Prozess benutzen darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap- Benutzung. Es ist kein allübergreifendes Limit für den Speicherverbrauch, aber ein guter Anfang.

openfiles

Mit diesem Limit lässt sich die maximale Anzahl der von einem Prozess des Benutzers geöffneten Dateien festlegen. In FreeBSD werden Dateien auch verwendet, um Sockets und IPC-Kanäle [9] darzustellen. Setzen Sie es deshalb nicht zu niedrig. Das System-Limit ist im kern.maxfiles sysctl(8) definiert.

sbsize

Dieses Limit beschränkt den Netzwerk-Speicher, und damit die mbufs, die ein Benutzer verbrauchen darf. Es stammt aus einer Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets geöffnet wurden, kann aber generell dazu benutzt werden Netzwerk-Verbindungen zu beschränken.

stacksize

Das ist die maximale Größe, auf die der Stack eines Prozesses heranwachsen darf. Das allein ist natürlich nicht genug, um den Speicher zu beschränken, den ein Programm verwenden darf. Es sollte deshalb in Verbindung mit anderen Limits gesetzt werden.

Beim Setzen von Ressourcenbeschränkungen sind noch andere Dinge zu beachten. Nachfolgend ein paar generelle Tipps, Empfehlungen und verschiedene Kommentare.

  • Von /etc/rc beim Hochfahren des Systems gestartete Prozesse werden der daemon Login-Klasse zugewiesen.

  • Obwohl das mitgelieferte /etc/login.conf eine Quelle von vernünftigen Limits darstellt, können nur Sie, der Administrator, wissen, was für Ihr System angebracht ist. Ein Limit zu hoch anzusetzen könnte Ihr System für Missbrauch öffnen, und ein zu niedriges Limit der Produktivität einen Riegel vorschieben.

  • Benutzer des X-Window Systems (X11) sollten wahrscheinlich mehr Ressourcen zugeteilt bekommen als andere Benutzer. X11 beansprucht selbst schon eine Menge Ressourcen, verleitet die Benutzer aber auch, mehrere Programme gleichzeitig laufen zu lassen.

  • Bedenken Sie, dass viele Limits für einzelne Prozesse gelten und nicht für den Benutzer selbst. Setzt man zum Beispiel openfiles auf 50, kann jeder Prozess des Benutzers bis zu 50 Dateien öffnen. Dadurch ist die maximale Anzahl von Dateien, die von einem Benutzer geöffnet werden können, openfiles mal maxproc. Das gilt auch für den Speicherverbrauch.

Weitere Informationen über Ressourcenbeschränkungen, Login-Klassen und -Fähigkeiten enthalten die Hilfeseiten cap_mkdb(1), getrlimit(2) und login.conf(5).


14.8. Gruppen

Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden durch den Gruppennamen und die GID (group ID) identifiziert. Der Kernel von FreeBSD (und den meisten anderen UNIX Systemen) entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht. Im Unterschied zur UID kann ein Prozess zu einer Reihe von Gruppen gehören. Wenn jemand von der GID eines Benutzers oder Prozesses spricht, meint er damit meistens die erste Gruppe der Gruppenliste.

Die Zuordnung von Gruppennamen zur GID steht in /etc/group, einer Textdatei mit vier durch Doppelpunkte getrennten Feldern. Im ersten Feld steht der Gruppenname, das zweite enthält ein verschlüsseltes Passwort, das dritte gibt die GID an und das vierte besteht aus einer Komma separierten Liste der Mitglieder der Gruppe. Diese Datei kann einfach editiert werden (natürlich nur, wenn Sie dabei keine Syntaxfehler machen). Eine ausführliche Beschreibung der Syntax dieser Datei finden Sie in group(5).

Wenn Sie /etc/group nicht händisch editieren möchten, können Sie pw(8) zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufügen einer Gruppe mit dem Namen teamtwo:

Beispiel 14-7. Setzen der Mitgliederliste einer Gruppe mit pw(8)

# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:

Die Zahl 1100 ist die GID der Gruppe teamtwo. Momentan hat teamtwo noch keine Mitglieder und ist daher ziemlich nutzlos. Um das zu ändern, nehmen wir nun jru in teamtwo auf.

Beispiel 14-8. Ein Gruppenmitglied mit pw hinzufügen

# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru

Als Argument von -M geben Sie eine Komma separierte Liste von Mitgliedern an, die in die Gruppe aufgenommen werden sollen. Aus den vorherigen Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für jeden Benutzer enthält. Das System teilt dem Benutzer automatisch eine Gruppe zu, die aber vom groupshow Kommando von pw(8) nicht angezeigt wird. Diese Information wird allerdings von id(1) und ähnlichen Werkzeugen angezeigt. Das heißt, dass pw(8) nur /etc/group manipuliert, es wird nicht versuchen, zusätzliche Informationen aus /etc/passwd zu lesen.

Beispiel 14-9. Hinzufügen eines neuen Gruppenmitglieds mittels pw(8)

# pw groupmod teamtwo -m db
# pw groupshow teamtwo
teamtwo:*:1100:jru,db

Die Argumente zur Option -m ist eine durch Komma getrennte Liste von Benutzern, die der Gruppe hinzugefügt werden sollen. Anders als im vorherigen Beispiel werden diese Benutzer in die Gruppe aufgenommen und ersetzen nicht die Liste der bereits bestehenden Benutzer in der Gruppe.

Beispiel 14-10. Mit id die Gruppenzugehörigkeit bestimmen

% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

Wie Sie sehen, ist jru Mitglied von jru und teamtwo.

Weitere Informationen entnehmen Sie bitte pw(8).


Kapitel 15. Sicherheit

Viel von diesem Kapitel stammt aus der security(7) Manualpage von Matthew Dillon. Übersetzt von Martin Heinen.

15.1. Übersicht

Dieses Kapitel bietet eine Einführung in die Konzepte der Systemsicherheit. Neben einigen Daumenregeln werden weiterführende Themen wie S/Key, OpenSSL und Kerberos diskutiert. Die meisten der hier besprochenen Punkte treffen sowohl auf die Systemsicherheit sowie die Internetsicherheit zu. Das Internet hat aufgehört ein “friedlicher” Ort zu sein, an dem Sie nur nette Leute finden werden. Es ist unumgänglich, dass Sie Ihre Daten, Ihr geistiges Eigentum, Ihre Zeit und vieles mehr vor dem Zugriff von Hackern schützen.

FreeBSD besitzt eine Reihe von Werkzeugen und Mechanismen, um die Integrität und die Sicherheit Ihrer Systeme und Netzwerke zu gewährleisten.

Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie:

  • Grundlegende auf FreeBSD bezogene Sicherheitsaspekte kennen.

  • Die verschiedenen Verschlüsselungsmechanismen von FreeBSD, wie DES oder MD5, kennen.

  • Wissen, wie Sie ein Einmalpasswörter zur Authentifizierung verwenden.

  • TCP-Wrapper für inetd einrichten können.

  • Wissen, wie Sie Kerberos5 unter FreeBSD einrichten.

  • Firewalls mit IPFW erstellen können.

  • Wissen, wie Sie IPsec konfigurieren und ein VPN zwischen FreeBSD/Windows Systemen einrichten,

  • OpenSSH, FreeBSDs Implementierung von SSH, konfigurieren und benutzen können.

  • Portaudit anwenden können, um Softwarepakete Dritter, die Sie über die Ports-Sammlung installieren, auf bekannte Sicherheitslücken hin zu überprüfen.

  • Mit FreeBSD-Sicherheitshinweisen umgehen können.

  • Eine Vorstellung davon haben, was Prozessüberwachung (Process Accounting) ist und wie Sie diese Funktion unter FreeBSD aktivieren können.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • Grundlegende Konzepte von FreeBSD und dem Internet verstehen.

Dieses Buch behandelt weitere Sicherheitsthemen. Beispielsweise werden vorgeschriebene Zugriffskontrollen in Kapitel 17 und Firewalls in Kapitel 31 besprochen.


15.2. Einführung

Sicherheit ist ein Konzept, das beim Systemadministrator anfängt und aufhört. Obwohl alle BSD UNIX Mehrbenutzersysteme über Sicherheitsfunktionen verfügen, ist es wohl eine der größten Aufgaben eines Systemadministrators zusätzliche Sicherheitsmechanismen zu erstellen und zu pflegen. Maschinen sind nur so sicher wie sie gemacht werden und Sicherheitsanforderungen stehen oft der Benutzerfreundlichkeit entgegen. Auf UNIX Systemen können sehr viele Prozesse gleichzeitig laufen und viele dieser Prozesse sind Server, das heißt von außen kann auf sie zugegriffen werden. In einer Zeit, in der die Minicomputer und Mainframes von gestern die Desktops von heute sind und Rechner immer mehr vernetzt werden, kommt der Sicherheit eine große Bedeutung zu.

Zur Systemsicherheit gehört auch die Beschäftigung mit verschiedenen Arten von Angriffen, auch solchen, die versuchen, ein System still zu legen, oder sonst unbrauchbar zu machen ohne root zu kompromittieren. Sicherheitsaspekte lassen sich in mehrere Kategorien unterteilen:

  1. Denial-of-Service Angriffe.

  2. Kompromittierte Accounts.

  3. Kompromittierter root-Account durch zugreifbare Server.

  4. Kompromittierter root-Account durch kompromittierte Accounts.

  5. Einrichten von Hintertüren.

Ein Denial-of-Service (Verhinderung von Diensten, DoS) Angriff entzieht einer Maschine Ressourcen, die sie zur Bereitstellung von Diensten benötigt. Meist versuchen Denial-of-Service Angriffe die Dienste oder den Netzwerkstack einer Maschine zu überlasten, um so die Maschine auszuschalten oder nicht nutzbar zu machen. Einige Angriffe versuchen, Fehler im Netzwerkstack auszunutzen, und die Maschine mit einem einzigen Paket auszuschalten. Diese Art des Angriffs kann nur verhindert werden, indem der entsprechende Fehler im Kernel behoben wird. Oft können Angriffe auf Dienste durch die Angabe von Optionen verhindert werden, die die Last, die ein Dienst auf das System unter widrigen Umständen ausüben kann, begrenzt. Angriffen auf das Netzwerk ist schwerer zu begegnen. Außer durch Trennen der Internetverbindung ist zum Beispiel einem Angriff mit gefälschten Paketen nicht zu begegnen. Diese Art von Angriff wird Ihr System zwar nicht unbrauchbar machen, kann aber die Internetverbindung sättigen.

Kompromittierte Accounts kommen noch häufiger als DoS Angriffe vor. Viele Systemadministratoren lassen auf ihren Maschinen noch die Dienste telnetd, rlogind, rshd und ftpd laufen. Verbindungen zu diesen Servern werden nicht verschlüsselt. Wenn Sie eine größere Benutzerzahl auf Ihrem System haben, die sich von einem entfernten System anmelden, ist die Folge davon, dass das Passwort eines oder mehrerer Benutzer ausgespäht wurde. Ein aufmerksamer Systemadministrator wird die Logs über Anmeldungen von entfernten Systemen auf verdächtige Quelladressen, auch für erfolgreiche Anmeldungen, untersuchen.

Es ist immer davon auszugehen, dass ein Angreifer, der Zugriff auf einen Account hat, Zugang zum root-Account erlangt. Allerdings gibt der Zugriff auf einen Account auf einem gut gesicherten und gepflegten System nicht notwendig Zugriff auf den root-Account. Diese Unterscheidung ist wichtig, da ein Angreifer, der keinen Zugang zu root besitzt, seine Spuren nicht verwischen kann. Er kann höchstens die Dateien des betreffenden Benutzers verändern oder die Maschine stilllegen. Kompromittierte Accounts sind sehr häufig, da Benutzer meist nicht dieselben Vorsichtsmaßnahmen wie Administratoren treffen.

Es gibt viele Wege, Zugang zum root-Account eines Systems zu bekommen: Ein Angreifer kann das Passwort von root kennen, er kann einen Fehler in einem Server entdecken, der unter root läuft und dann über eine Netzwerkverbindung zu diesem Server einbrechen. Oder er kennt einen Fehler in einem SUID-root Programm, der es ihm erlaubt, root zu werden, wenn er einmal einen Account kompromittiert hat. Wenn ein Angreifer einen Weg gefunden hat, root zu werden, braucht er vielleicht keine Hintertür auf dem System installieren. Viele der heute bekannten und geschlossenen Sicherheitslöcher, die zu einem root Zugriff führen, verlangen vom Angreifer einen erheblichen Aufwand, um seine Spuren zu verwischen. Aus diesem Grund wird er sich wahrscheinlich entschließen, eine Hintertür (engl. Backdoor) zu installieren. Eine Hintertür erlaubt es dem Angreifer leicht auf den root-Account zuzugreifen. Einem klugen Systemadministrator erlaubt sie allerdings auch, den Einbruch zu entdecken. Wenn Sie es einem Angreifer verwehren, Hintertüren zu installieren, kann das schädlich für Ihre Sicherheit sein, da es vielleicht verhindert, dass die Lücke, die der Angreifer für den Einbruch ausgenutzt hat, entdeckt wird.

Sicherheitsmaßnahmen sollten immer in mehreren Schichten angelegt werden. Die Schichten können wie folgt eingeteilt werden:

  1. Absichern von root und Accounts.

  2. Absichern von unter root laufenden Servern und SUID/SGID Programmen.

  3. Absichern von Accounts.

  4. Absichern der Passwort-Datei.

  5. Absichern des Kernels, der Geräte und von Dateisystemen.

  6. Schnelles Aufdecken von unbefugten Veränderungen des Systems.

  7. Paranoia.

Die einzelnen Punkte der obigen Liste werden im nächsten Abschnitt genauer behandelt.


15.3. Absichern von FreeBSD

Kommandos und Protokolle: In diesem Abschnitt werden Anwendungen fett gekennzeichnet, spezifische Kommandos werden in einer Fixschrift dargestellt und Protokolle verwenden die normale Schriftart. Diese typographische Konvention hilft, Begriffe wie ssh zu unterscheiden, die sowohl Protokoll als auch Kommando sein können.

Die folgenden Abschnitte behandeln die im letzten Abschnitt erwähnten Methoden Ihr FreeBSD-System zu sichern.


15.3.1. Absichern von root und Accounts

Zuallererst, kümmern Sie sich nicht um die Absicherung von Accounts, wenn Sie root noch nicht abgesichert haben. Auf den meisten Systemen ist root ein Passwort zugewiesen. Sie sollten immer davon ausgehen, dass dieses Passwort kompromittiert ist. Das heißt nicht, dass Sie das Passwort entfernen sollten, da es meist für den Konsolenzugriff notwendig ist. Vielmehr heißt es, dass Sie das Passwort nicht außerhalb der Konsole, auch nicht zusammen mit su(1), verwenden sollten. Stellen Sie sicher, dass Ihre PTYs in ttys als unsicher markiert sind und damit Anmeldungen von root mit telnet oder rlogin verboten sind. Wenn Sie andere Anwendungen wie SSH zum Anmelden benutzen, vergewissern Sie sich, dass dort ebenfalls Anmeldungen als root verboten sind. Für SSH editieren Sie /etc/ssh/sshd_config und überprüfen, dass PermitRootLogin auf no gesetzt ist. Beachten Sie jede Zugriffsmethode - Dienste wie FTP werden oft vergessen. Nur an der Systemkonsole sollte ein direktes Anmelden als root möglich sein.

Natürlich müssen Sie als Systemadministrator root-Zugriff erlangen können. Dieser sollte aber durch zusätzliche Passwörter geschützt sein. Ein Weg, Zugang zu root zu ermöglichen, ist es, berechtigte Mitarbeiter in /etc/group in die Gruppe wheel aufzunehmen. Die Personen, die Mitglieder in der Gruppe wheel sind, können mit su zu root wechseln. Ihre Mitarbeiter sollten niemals die Gruppe wheel als primäre Gruppe in /etc/passwd besitzen. Mitarbeiter sollten der Gruppe staff angehören und über /etc/group in wheel aufgenommen werden. Es sollten auch nur die Mitarbeiter, die wirklich root Zugriff benötigen in wheel aufgenommen werden. Mit anderen Authentifizierungsmethoden müssen Sie niemanden in wheel aufnehmen. Wenn Sie z.B. Kerberos benutzen, wechseln Sie mit ksu(1) zu root und der Zugriff wird mit der Datei .k5login geregelt. Dies ist vielleicht eine bessere Lösung, da es der wheel-Mechanismus einem Angreifer immer noch möglich macht, den root-Account zu knacken, nachdem er einen Mitarbeiter-Account geknackt hat. Obwohl der wheel-Mechanismus besser als gar nichts ist, ist er nicht unbedingt die sicherste Lösung.

Um ein Konto komplett zu sperren, verwenden Sie den Befehl pw(8):

#pw lock staff

Danach ist es diesem Benutzer nicht mehr möglich (auch nicht mit ssh(1)), sich anzumelden.

Eine weitere Möglichkeit, bestimmte Benutzer zu sperren, ist es, das verschlüsselte Passwort durch das Zeichen “*” zu ersetzen. Da ein verschlüsseltes Passwort niemals diesem Zeichen entsprechen kann, kann sich der betroffene Benutzer ebenfalls nicht mehr anmelden. Beispielsweise müsste dazu das Konto

foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh

wie folgt abgeändert werden:

foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh

Durch diese Änderung wird der Benutzer foobar daran gehindert, sich auf konventionellem Wege am System anzumelden. Diese Maßnahmen greifen allerdings nicht, wenn das betroffene System auch eine Anmeldung über Kerberos oder ssh(1) erlaubt.

Diese Sicherheitsmechanismen setzen voraus, dass Sie sich von einer restriktiven Maschine auf einer weniger restriktiven Maschine anmelden. Wenn zum Beispiel auf Ihrem Hauptrechner alle möglichen Arten von Servern laufen, so sollten auf Ihrer Workstation keine Server laufen. Um Ihre Workstation vernünftig abzusichern, sollten auf Ihr so wenig Server wie möglich bis hin zu keinem Server laufen. Sie sollten zudem über einen Bildschirmschoner verfügen, der mit einem Passwort gesichert ist. Natürlich kann ein Angreifer, der physikalischen Zugang zu einer Maschine hat, jede Art von Sicherheitsmechanismen umgehen. Dieses Problem sollten Sie daher auch in Ihren Überlegungen berücksichtigen. Beachten Sie dabei aber, dass der Großteil der Einbrüche über das Netzwerk erfolgt und die Einbrecher keinen Zugang zu der Maschine besitzen.

Mit Kerberos können Sie das Passwort eines Mitarbeiters an einer Stelle ändern und alle Maschinen, auf denen der Mitarbeiter einen Account hat, beachten die Änderung sofort. Wird der Account eines Mitarbeiters einmal kompromittiert, so sollte die Fähigkeit, das Passwort mit einem Schlag auf allen Maschinen zu ändern, nicht unterschätzt werden. Mit einzelnen Passwörtern wird es schwierig, das Passwort auf N Maschinen zu ändern. Mit Kerberos können Sie auch Beschränkungen für Passwörter festlegen: Nicht nur das Ticket kann nach einiger Zeit ungültig werden, Sie können auch festlegen, dass ein Benutzer nach einer bestimmten Zeit, z.B. nach einem Monat, das Passwort wechseln muss.


15.3.2. Absichern von unter root laufenden Servern und SUID/SGID Programmen

Ein kluger Systemadministrator lässt nur die Dienste, die er wirklich braucht, laufen; nicht mehr und auch nicht weniger. Beachten Sie, dass Server von Dritten die fehleranfälligsten sind. Wenn Sie z.B. eine alte Version von imapd oder popper laufen lassen, ist das so, als würden Sie der ganzen Welt freien Zugang zu root geben. Lassen Sie keine Server laufen, die Sie vorher nicht genau überprüft haben. Viele Server müssen nicht unter root laufen, zum Beispiel können ntalk, comsat und finger in speziellen Sandkästen unter einem Benutzer laufen. Ein Sandkasten ist keine perfekte Lösung, wenn Sie nicht eine Menge Arbeit in die Konfiguration investieren, doch bewährt sich hier das Prinzip, die Sicherheit in Schichten aufzubauen. Wenn es einem Angreifer gelingt, in einen Server, der in einem Sandkasten läuft, einzubrechen, dann muss er immer noch aus dem Sandkasten selber ausbrechen. Je mehr Schichten der Angreifer zu durchbrechen hat, desto kleiner sind seine Aussichten auf Erfolg. In der Vergangenheit wurden praktisch in jedem Server, der unter root läuft, Lücken gefunden, die zu einem root Zugriff führten. Dies betrifft selbst die grundlegenden Systemdienste. Wenn Sie eine Maschine betreiben, auf der man sich nur mit SSH anmelden kann, dann stellen Sie die Dienste telnetd, rshd oder rlogind ab!

In der Voreinstellung laufen unter FreeBSD ntalkd, comsat und finger nun in einem Sandkasten. Ein weiteres Programm, das in einem Sandkasten laufen sollte, ist named(8). In /etc/defaults/rc.conf sind die notwendigen Argumente, um named in einem Sandkasten laufen zu lassen, in kommentierter Form schon enthalten. Abhängig davon, ob Sie ein neues System installieren oder ein altes System aktualisieren, sind die hierfür benötigten Benutzer noch nicht installiert. Ein kluger Systemadministrator sollte immer nach Möglichkeiten suchen, Server in einem Sandkasten laufen zu lassen.

Einige Server wie sendmail, popper, imapd und ftpd werden normalerweise nicht in Sandkästen betrieben. Zu einigen Servern gibt es Alternativen, aber diese wollen Sie vielleicht wegen der zusätzlich nötigen Arbeit nicht installieren (ein weiteres Beispiel für den Widerspruch zwischen Sicherheit und Benutzerfreundlichkeit). In diesem Fall müssen Sie die Server unter root laufen lassen und auf die eingebauten Mechanismen vertrauen, Einbrüche zu entdecken.

Weitere potentielle Löcher, die zu einem root-Zugriff führen können, sind die auf dem System installierten SUID- und SGID-Programme. Die meisten dieser Programme wie rlogin stehen in /bin, /sbin, /usr/bin, oder /usr/sbin. Obwohl nichts 100% sicher ist, können Sie davon ausgehen, dass die SUID- und SGID-Programme des Basissystems ausreichend sicher sind. Allerdings werden ab und an in diesen Programmen Löcher gefunden. 1998 wurde in Xlib ein Loch gefunden, das xterm, der normal mit SUID installiert wird, verwundbar machte. Es ist besser auf der sicheren Seite zu sein, als sich später zu beklagen, darum wird ein kluger Systemadministrator den Zugriff auf SUID-Programme mit einer Gruppe, auf die nur Mitarbeiter zugreifen können, beschränken. SUID-Programme, die niemand benutzt, sollten mit chmod 000 deaktiviert werden. Zum Beispiel braucht ein Server ohne Bildschirm kein xterm Programm. SGID-Programme sind vergleichbar gefährlich. Wenn ein Einbrecher Zugriff auf SGID-kmem Programm erhält, kann er vielleicht /dev/kmem und damit die verschlüsselte Passwortdatei lesen. Dies kompromittiert unter Umständen jeden Account, der mit einem Passwort geschützt ist. Alternativ kann ein Einbrecher, der in die Gruppe kmem eingebrochen ist, die Tastendrücke auf PTYs verfolgen. Dies schließt auch PTYs mit ein, auf denen sich ein Benutzer mit sicheren Methoden anmeldet. Ein Einbrecher, der Zugriff auf die tty Gruppe hat, kann auf fast jeden Terminal anderer Benutzer schreiben. Wenn der Benutzer einen Terminal-Emulator benutzt, der über eine Tastatur-Simulation verfügt, könnte der Angreifer Daten generieren, die den Terminal veranlassen, ein Kommando unter diesem Benutzer laufen zu lassen.


15.3.3. Absichern von Accounts

Accounts sind für gewöhnlich sehr schwierig abzusichern. Während Sie drakonische Beschränkungen für Ihre Mitarbeiter einrichten und deren Passwörter als ungültig markieren können, werden Sie das vielleicht bei den normalen Accounts nicht durchsetzen. Wenn Sie über ausreichend Macht verfügen, gelingt es Ihnen vielleicht doch, ansonsten müssen Sie diese Accounts aufmerksam überwachen. Wegen der zusätzlichen Administrationsarbeit und der nötigen technischen Unterstützung ist die Verwendung von SSH und Kerberos mit normalen Accounts erschwert, obwohl das natürlich sicherer als die Verwendung von verschlüsselten Passwörtern ist.


15.3.4. Absichern der Passwort-Datei

Der einzig sichere Weg ist, so viele Accounts wie möglich als ungültig zu markieren und SSH oder Kerberos zu benutzen, um auf sie zuzugreifen. Obwohl die Datei /etc/spwd.db, die die verschlüsselten Passwörter enthält, nur von root gelesen werden kann, mag ein Angreifer lesenden Zugriff auf diese Datei erlangen, ohne die Fähigkeit sie auch zu beschreiben.

Ihre Überwachungsskripten sollten Änderungen an der Passwort-Datei melden (siehe Überprüfen der Integrität von Dateien weiter unten).


15.3.5. Absichern des Kernels, der Geräte und von Dateisystemen

Wenn ein Angreifer root-Zugriff erlangt, kann er so ziemlich alles mit Ihrem System anstellen, doch sollten Sie es ihm nicht zu leicht machen. Die meisten modernen Kernel haben zum Beispiel einen Gerätetreiber, der es erlaubt, Pakete abzuhören. Unter FreeBSD wird das Gerät bpf genannt. Für gewöhnlich wird ein Angreifer versuchen, dieses Gerät zu nutzen, um Pakete abzuhören. Sie sollten ihm diese Gelegenheit nicht geben und auf den meisten Systemen ist das Gerät bpf nicht nötig.

Auch wenn Sie bpf nicht verwenden, müssen Sie sich immer noch um /dev/mem und /dev/kmem sorgen. Außerdem kann der Angreifer immer noch auf die rohen Geräte (raw devices) schreiben. Weiterhin gibt es ein Programm zum Nachladen von Modulen in den Kernel: kldload(8). Ein unternehmungslustiger Angreifer kann dies benutzen, um sein eigenes bpf oder ein anderes zum Abhören geeignetes Gerät in den laufenden Kernel einzubringen. Um dieses Problem zu vermeiden, müssen Sie den Kernel auf einem höheren Sicherheitslevel laufen lassen, mindestens auf securelevel 1.

Das Securelevel des Kernels kann auf verschiedene Wege gesetzt werden. Der einfachste Weg ist das erhöhen des Securelevel des laufenden Kernels durch ein sysctl der kern.securelevel Kernel Variablen:

# sysctl kern.securelevel=1

Standardmässig bootet der FreeBSD Kernel mit einem Securelevel von -1. Der Securelevel wird solange bei -1 bleiben, bis er entweder durch den Administrator oder von init(8) durch einen Eintrag im Startup Script verändert wird. Der Securelevel kann während des Systemstarts durch das Setzen der Variable kern_securelevel_enable auf YES und der Wert der Variable kern_securelevel auf den gewünschten Securelevel in der /etc/rc.conf erhöht werden.

Der Standard Securelevel von einem FreeBSD-System direkt nach dem Start ist -1. Dies wird “insecure mode” genannt, da zum Beispiel unverändeliche Dateiflags abgeschaltet werden könnten, von allen Geräten gelesen und auf alle geschrieben werden kann.

Sobald der Securelevel auf den Wert 1 oder höher gesetzt ist, werden die append-only und die unveränderlichen Dateien geschützt, die Flags können nicht abgeschaltet werden und der Zugriff auf raw Devices ist verboten. Höhere Levels verbieten mehr Aktionen. Für einen vollständige Liste aller Securelevels, lesen Sie bitte die security(7) Manual Seite (oder die Manual Seite von init(8) für ältere Releases als FreeBSD 7.0).

Anmerkung: Das Erhöhen des Securelevels auf 1 oder höher kann einige Probleme mit X11 verursachen (Zugriff auf /dev/io wird geblockt), ebenso die Installation von FreeBSD aus den Quellen (der installworld Teil muss zeitweilig die append-only und die unveränderlichen Flags einiger Dateien zurücksetzen), und auch noch in einigen anderen Fällen. Manchmal kann es, wie bei X11, durch das sehr frühe Starten von xdm(1) im Boot Prozess möglich sein, dies zu umgehen, wenn der Securelevel noch niedrig genug ist. Workarounds wie dieser sind nicht f¨r alle Securelevels und für alle Einschränkungen, die sie schaffen, möglich. Ein bisschen Vorausplanung ist eine gute Idee. Das Verständnis für die Beschränkungen, die durch jedes Securelevel verursacht werden, ist wichtig, da sie die einfache Benutzung des Systems verschlechtern. Es vereinfacht auch die Wahl einer Standardeinstellung und schützt vor Überraschungen.

Wenn das Securelevel des Kernel auf einen Wert von 1 oder höher gesetzt ist, kann es sinnvoll sein das schg Flag auf kritische Startdateien, Verzeichnisse und Scripte (z.B. alles was läuft bis zu dem Punkt auf dem das Securelevel gesetzt ist) zu setzen. Dies könnte etwas ü,bertrieben sein, und auch das Upgrade des Systems ist sehr viel schwerer, wenn es auf einem hohen Securelevel läuft. Ein strengerer Kompromiss ist es, das System auf einem höheren Securelevel laufen zu lassen, aber keine schg Flags für alle Systemdateien und Verzeichnisse zu setzen. Eine andere Möglichkeit ist es, einfach die Verzeichnisse / und /usr read-only zu mounten. Es sei darauf hingewiesen, dass Sie nicht vor lauter Überlegen das Wichtigste, nämlich die Entdeckung eines Eindringens, vergessen.


15.3.6. Überprüfen der Integrität von Dateien

Sie können die Systemkonfiguration und die Dateien nur so weit schützen, wie es die Benutzbarkeit des Systems nicht einschränkt. Wenn Sie zum Beispiel mit chflags die Option schg auf die meisten Dateien in / und /usr setzen, kann das Ihre Arbeit mehr behindern als nützen. Die Maßnahme schützt zwar die Dateien, schließt aber auch eine Möglichkeit, Veränderungen zu entdecken, aus. Die letzte Schicht des Sicherheitsmodells - das Aufdecken von Einbrüchen - ist sicherlich die wichtigste. Alle Sicherheitsmaßnahmen sind nichts wert, oder wiegen Sie in falscher Sicherheit, wenn Sie nicht in der Lage sind, einen möglichen Einbruch zu entdecken. Die Hälfte der Sicherheitsmaßnahmen hat die Aufgabe, einen Einbruch zu verlangsamen, um es zu ermöglichen, den Einbrecher auf frischer Tat zu ertappen.

Der beste Weg, einen Einbruch zu entdecken, ist es, nach veränderten, fehlenden oder unerwarteten Dateien zu suchen. Der wiederum beste Weg, nach veränderten Dateien zu suchen, ist es, die Suche von einem anderen (oft zentralen) besonders geschützten System durchzuführen. Es ist wichtig, dass Ihre Sicherheitsüberprüfungen vor einem Angreifer verborgen bleiben und daher sind sie auf einem besonders geschützten System gut aufgehoben. Um dies optimal auszunutzen, müssen Sie dem besonders geschützten System Zugriffsrechte auf die zu schützenden Systeme geben. Sie können die Dateisysteme der zu schützenden Systeme schreibgeschützt für das besonders geschützte System exportieren, oder Sie können der besonders geschützten Maschine SSH auf die anderen Maschinen erlauben, indem Sie SSH-Schlüsselpaare installieren. Mit Ausnahme des verursachten Netzwerkverkehrs ist die NFS-Methode die am wenigsten sichtbare. Sie erlaubt es Ihnen, nahezu unentdeckt die Dateisysteme der Clients zu beobachten. Wenn Ihr besonders geschütztes System mit den Clients über einen Switch verbunden ist, ist die NFS-Methode oft das Mittel der Wahl. Wenn das besonders geschützte System allerdings mit einem Hub verbunden ist, oder der Zugriff über mehrere Router geschieht, ist die NFS-Methode aus der Netzwerksicht zu unsicher. In einem solchen Fall ist SSH besser geeignet, auch wenn es deutliche Spuren hinterlässt.

Wenn das besonders geschützte System lesenden Zugriff auf die Clients hat, müssen Sie Skripten schreiben, die die Überwachung durchführen. Wenn Sie die NFS-Methode verwenden, können Sie dazu einfache Systemwerkzeuge wie find(1) und md5(1) benutzen. Am besten berechnen Sie einmal am Tag MD5-Prüfsummen der Dateien, Konfigurationsdateien in /etc und /usr/local/etc sollten öfter überprüft werden. Wenn Unstimmigkeiten zwischen den auf der besonders geschützten Maschine gehaltenen MD5-Prüfsummen und den ermittelten Prüfsummen festgestellt werden, sollte Ihr System einen Systemadministrator benachrichtigen, der den Unstimmigkeiten dann nachgehen sollte. Ein gutes Skript überprüft das System auch auf verdächtige SUID-Programme sowie gelöschte oder neue Dateien in / und /usr.

Wenn Sie SSH anstelle von NFS benutzen, wird das Erstellen der Skripten schwieriger. Sie müssen die Skripten und die Programme wie find mit scp auf den Client kopieren. Damit machen Sie die Überprüfung für einen Angreifer sichtbar. Außerdem kann der SSH-Client auf dem Zielsystem schon kompromittiert sein. Zusammenfassend kann der Einsatz von SSH nötig sein, wenn Sie über ungesicherte Verbindungen arbeiten, aber der Umgang mit dieser Methode ist auch sehr viel schwieriger.

Ein gutes Sicherheitsskript wird auch Dateien von Benutzern, die den Zugriff auf ein System ermöglichen, wie .rhosts, .shosts, .ssh/authorized_keys usw., auf Veränderungen untersuchen, die über die Möglichkeiten einer Überprüfung mit MD5 (die ja nur Veränderungen erkennen kann) hinausgehen.

Wenn Sie über große Partitionen verfügen, kann es zu lange dauern, jede Datei zu überprüfen. In diesem Fall sollten Sie beim Einhängen des Dateisystems Optionen setzen, die das Ausführen von SUID-Programmen verbieten. mount(8) stellt dazu nosuid zur Verfügung. Sie sollten diese Dateien aber trotzdem mindestens einmal die Woche überprüfen, da das Ziel dieser Schicht das Aufdecken eines Einbruchs, auch wenn er nicht erfolgreich war, ist.

Die Prozessüberwachung (siehe accton(8)) des Betriebssystems steht ein günstiges Werkzeug zur Verfügung, dass sich bei der Analyse eines Einbruchs als nützlich erweisen kann. Insbesondere können Sie damit herausfinden, wie der Einbrecher in das System eingedrungen ist, vorausgesetzt die Dateien der Prozessüberwachung sind noch alle intakt.

Schließlich sollten die Sicherheitsskripten die Logdateien analysieren. Dies sollte so sicher wie möglich durchgeführt werden, nützlich ist das Schreiben von Logdateien auf entfernte Systeme mit syslog. Ein Einbrecher wird versuchen, seine Spuren zu verwischen. Die Logdateien sind wichtig für den Systemadministrator, da er aus ihnen den Zeitpunkt und die Art des Einbruchs bestimmen kann. Eine Möglichkeit, die Logdateien unverändert aufzuheben, ist es, die Systemkonsole auf einen seriellen Port zu legen und die Informationen dort von einer gesicherten Maschine auszulesen.


15.3.7. Paranoia

Es schadet nicht, ein bisschen paranoid zu sein. Grundsätzlich darf ein Systemadministrator jede Sicherheitsmaßnahme treffen, die die Bedienbarkeit des Systems nicht einschränkt. Er kann auch Maßnahmen treffen, die die Bedienbarkeit einschränken, wenn er diese vorher genau durchdacht hat. Was noch wichtiger ist: Halten Sie sich nicht sklavisch an dieses Dokument, sondern führen Sie eigene Maßnahmen ein, um nicht einem künftigen Angreifer, der auch Zugriff auf dieses Dokument hat, alle Ihre Methoden zu verraten.


15.3.8. Denial-of-Service Angriffe

Dieser Abschnitt behandelt Denial-of-Service Angriffe (DoS). Ein DoS-Angriff findet typischerweise auf der Paketebene statt. Während Sie nicht viel gegen moderne Angriffe mit falschen Paketen, die das Netzwerk sättigen, ausrichten können, können Sie sehr wohl den Schaden begrenzen, den solche Angriffe verursachen können und insbesondere einen kompletten Serverausfall verhindern, indem Sie beispielsweise folgende Vorkehrungen treffen:

  1. Begrenzen von fork() Aufrufen.

  2. Begrenzen von Sprungbrett-Angriffen (ICMP response Angriffen, ping zu Broadcast-Adressen usw.).

  3. Kernel-Cache für Routen.

Ein häufiger DoS-Angriff gegen forkende Server versucht den Server dazu zu bringen, solange neue Prozesse zu starten, bis das System den ganzen Speicher und alle Dateideskriptoren verbraucht hat, was dann zu einem Ausfall des Servers führt. inetd(8) besitzt einige Optionen, um diese Art von Angriffen zu begrenzen. Beachten Sie bitte, dass es möglich ist, einen Ausfall einer Maschine zu verhindern, doch ist es generell nicht möglich, den Ausfall eines Dienstes bei dieser Art von Angriffen zu verhindern. Lesen Sie sich bitte die Manualpages von inetd gut durch und achten Sie speziell auf die Optionen -c, -C und -R. Angriffe mit gefälschten IP-Adressen umgehen -C, so dass normalerweise eine Kombination der Optionen benutzt werden muss. Manche Server, die nicht von inetd gestartet werden, besitzen Optionen, um den Start über fork() einzuschränken.

Sendmail besitzt die Option -OMaxDaemonChildren, die besser als die eingebauten Optionen zur Begrenzung der Systemauslastung funktioniert. Sie sollten beim Start von sendmail MaxDaemonChildren so hoch setzen, dass Sie die erwartete Auslastung gut abfangen können. Allerdings sollten Sie den Wert nicht so hoch setzen, dass der Rechner über seine eigenen Füße fällt. Es ist auch klug, Sendmail im Queue-Modus (-ODeliveryMode=queued) laufen zu lassen. Der Dæmon (sendmail -bd) sollte getrennt von den Queue-Läufen (sendmail -q15m) laufen. Wenn Sie trotzdem eine sofortige Auslieferung der Post wünschen, können Sie die Queue in einem geringeren Intervall, etwa -q1m, abarbeiten. Geben Sie für dieses Sendmail aber einen vernünftigen Wert für MaxDaemonChildren an, um Fehler zu verhindern.

Syslogd kann direkt angegriffen werden. Daher empfehlen wir Ihnen unbedingt die Option -s zu benutzen. Sollte das nicht möglich sein, benutzen Sie bitte -a.

Vorsicht ist auch mit Diensten geboten, die automatisch eine Rückverbindung eröffnen, wie der reverse-identd der TCP-Wrapper. Diese Funktion der TCP-Wrapper sollten Sie normalerweise nicht benutzen.

Es empfiehlt sich sehr, interne Dienste vor externen Zugriffen durch eine Firewall an der Grenze Ihres Netzwerks zu schützen. Dahinter steckt mehr die Idee, das Netzwerk vor Überlastung durch Angriffe von außen zu schützen, als interne Dienste vor einem root-Zugriff aus dem Netz zu schützen. Konfigurieren Sie immer eine Firewall, die alle Zugriffe blockiert, das heißt blockieren Sie alles außer den Ports A, B, C, D und M-Z. Damit können Sie Zugriffe auf alle niedrigen Ports blockieren und Zugriffe auf spezielle Dienste wie named, wenn Sie den primären Namensdienst für eine Zone anbieten, ntalkd oder sendmail erlauben. Wenn Sie die Firewall so konfigurieren, das sie in der Voreinstellung alle Zugriffe erlaubt, ist es sehr wahrscheinlich, dass Sie vergessen, eine Reihe von Diensten zu blockieren bzw. einen internen Dienst einführen und dann vergessen die Firewall zu aktualisieren. Sie können immer die höheren Portnummern öffnen, ohne die niedrigen Portnummern, die nur von root benutzt werden dürfen, zu kompromittieren. Beachten Sie bitte auch, dass es FreeBSD erlaubt, die Portnummern, die für dynamische Verbindungen zur Verfügung stehen, zu konfigurieren. Mit sysctl lassen sich verschiedene Bereiche der net.inet.ip.portrange Variablen setzen (eine Liste erhalten Sie mit sysctl -a | fgrep portrange). So können Sie zum Beispiel die Portnummern 4000 bis 5000 für den normalen Bereich und die Nummern 49152 bis 65535 für den hohen Bereich vorsehen. Dies erleichtert Ihnen die Konfiguration der Firewall, da Sie nun Zugriffe auf Ports unterhalb von 4000, mit Ausnahme der Dienste, die von außen erreichbar sein sollen, blockieren können.

Eine andere Form eines DoS-Angriffs nutzt einen Server als Sprungbrett, der Server wird dabei so angegriffen, dass seine Antworten ihn selber, das lokale Netzwerk oder einen anderen Server überlasten. Der am häufigsten verwendete Angriff dieser Art ist der ICMP ping broadcast Angriff. Der Angreifer fälscht dazu ping-Pakete, die zu der Broadcast-Adresse Ihres LANs gesendet werden, indem er darin als Quelladresse die Adresse des Opfers einsetzt. Wenn die Router an der Grenze Ihres Netzwerks ping-Pakete auf Broadcast-Adressen nicht abwehren, wird Ihr LAN genügend Netzwerkverkehr generieren, um das Ziel des Angriffs zu überlasten. Dies kann besonders effektiv sein, wenn der Angreifer diese Methode mit mehreren Dutzend Broadcast-Adressen über mehrere Netzwerke einsetzt. Es wurden schon Broadcast-Angriffe mit über 120 Megabit pro Sekunde gemessen. Ein zweiter Sprungbrett-Angriff wird gegen das Fehlerbehandlungssystem von ICMP eingesetzt. Indem ein Angreifer Pakete konstruiert, die eine ICMP-Fehlermeldung hervorrufen, kann er das einkommende Netzwerk des Servers sättigen und diesen wiederum veranlassen sein ausgehendes Netzwerk mit ICMP-Antworten zu sättigen. Diese Art des Angriffs kann den kompletten Speicher des Servers aufbrauchen und damit den Server stilllegen, insbesondere wenn der Server nicht in der Lage ist, die generierten ICMP-Antworten schnell genug abzuführen. Verwenden Sie die sysctl-Variable net.inet.icmp.icmplim, um die Auswirkungen solcher Angriffe zu begrenzen. Die letzte weit verbreitete Form von Sprungbrett-Angriffen verwendet interne inetd-Dienste wie den UDP echo-Dienst. Der Angreifer fälscht dazu einfach ein UDP-Paket, indem er als Quellport den echo-Port von Server A und als Zielport den echo-Port von Server B angibt, wobei beide Server in Ihrem LAN stehen. Die beiden Server werden nun dieses Paket zwischen sich hin und her schicken. Der Angreifer kann die beiden Server und das LAN einfach damit überlasten, dass er mehrere Pakete dieser Art generiert. Ähnliche Probleme gibt es mit dem internen chargen-Port, daher sollten Sie die internen inetd-Testdienste abstellen.

Gefälschte IP-Pakete können dazu benutzt werden, den Kernel-Cache für Routen zu überlasten. Schauen Sie sich bitte die sysctl-Parameter net.inet.ip.rtexpire, rtminexpire und rtmaxcache an. Ein Angriff der gefälschte Pakete mit zufälligen Quelladressen einsetzt, bewirkt, dass der Kernel eine Route im Route-Cache anlegt, die Sie sich mit netstat -rna | fgrep W3 ansehen können. Diese Routen verfallen für gewöhnlich nach 1600 Sekunden. Wenn der Kernel feststellt, dass die Routingtabelle im Cache zu groß geworden ist, wird er dynamisch den Wert von rtexpire verringern. Dieser Wert wird aber nie kleiner werden als rtminexpire. Daraus ergeben sich zwei Probleme:

  1. Der Kernel reagiert nicht schnell genug, wenn ein Server mit einer niedrigen Grundlast plötzlich angegriffen wird.

  2. rtminexpire ist nicht klein genug, um einen anhaltenden Angriff zu überstehen.

Wenn Ihre Server über eine T3 oder eine noch schnellere Leitung mit dem Internet verbunden sind, ist es klug, mit sysctl(8) die Werte für rtexpire und rtminexpire händisch zu setzen. Setzen Sie bitte keinen der Werte auf Null, außer Sie wollen die Maschine zum Erliegen bringen. Ein Wert von 2 Sekunden für beide Parameter sollte ausreichen, um die Routingtabelle vor einem Angriff zu schützen.


15.3.9. Anmerkungen zum Zugriff mit Kerberos und SSH

Es gibt ein paar Punkte, die Sie beachten sollten, wenn Sie Kerberos oder SSH einsetzen wollen. Kerberos 5 ist ein ausgezeichnetes Authentifizierungsprotokoll. Leider gibt es Fehler in den für Kerberos angepassten Versionen von telnet und rlogin, die sie ungeeignet für den Umgang mit binären Datenströmen machen. Weiterhin verschlüsselt Kerberos Ihre Sitzung nicht, wenn Sie nicht die -x Option verwenden, mit SSH wird dagegen alles verschlüsselt.

Ein Problem mit SSH sind Weiterleitungen von Verbindungen. Wenn Sie von einer sicheren Maschine, auf der sich Ihre Schlüssel befinden, eine Verbindung zu einer ungesicherten Maschine aufmachen, wird für die Dauer der Sitzung ein Port für Weiterleitungen geöffnet. Ein Angreifer, der auf der unsicheren Maschine Zugang zu root hat, kann diesen Port benutzen, um Zugriff auf andere Maschinen zu erlangen, die mit Ihren Schlüsseln zugänglich sind.

Wir empfehlen Ihnen, für die Logins Ihrer Mitarbeiter immer SSH zusammen mit Kerberos einzusetzen. Damit reduzieren Sie die Abhängigkeit von potentiell gefährdeten Schlüsseln und schützen gleichzeitig die Passwörter mit Kerberos. SSH-Schlüsselpaare sollten nur für automatisierte Aufgaben von einem besonders gesicherten Server eingesetzt werden (Kerberos kann für diese Art von Aufgaben nicht eingesetzt werden). Weiterhin empfehlen wir Ihnen, das Weiterreichen von Schlüsseln in der SSH-Konfiguration abzustellen bzw. die from=IP/DOMAIN Option in authorized_keys zu verwenden, die den Schlüssel nur von bestimmten Maschinen aus nutzbar macht.


15.4. DES, Blowfish, MD5, und Crypt

Teile umgeschrieben und aktualisiert von Bill Swingle.

Jedem Benutzer eines UNIX Systems ist ein Passwort zugeordnet. Es scheint offensichtlich, dass das Passwort nur dem Benutzer und dem System bekannt sein muss. Um die Passwörter geheim zu halten, werden sie mit einer nicht umkehrbaren Hash-Funktion verschlüsselt, das heißt sie können leicht verschlüsselt aber nicht entschlüsselt werden. Was wir gerade als offensichtlich dargestellt haben, ist also nicht wahr: Das Betriebssystem kennt das Passwort wirklich nicht, es kennt nur das verschlüsselte Passwort. Die einzige Möglichkeit, das originale Passwort herauszufinden, besteht darin, alle möglichen Passwörter auszuprobieren (brute force Suche).

Zu der Zeit als UNIX entstanden ist, war die einzig sichere Möglichkeit Passwörter zu verschlüsseln, leider DES (Data Encryption Standard). Für die Einwohner der USA stellte das kein Problem dar, aber da der Quellcode von DES nicht aus den USA exportiert werden durfte, musste ein Weg gefunden werden, der die Gesetze der USA nicht verletzte und gleichzeitig die Kompatibilität mit anderen UNIX Systemen, die immer noch DES benutzten, wahrte.

Die Lösung bestand darin, die Verschlüsselungsbibliotheken aufzuspalten. Benutzer in den USA konnten die DES-Bibliotheken installieren und nutzen. In der Grundeinstellung benutzt FreeBSD MD5 als Verschlüsselungsmethode, das exportiert werden durfte und damit von jedem genutzt werden konnte. Es wird davon ausgegangen, dass MD5 sicherer als DES ist, so dass DES nur aus Kompatibilitätsgründen installiert werden sollte.


15.4.1. Erkennen der Verschlüsselungsmethode

Derzeit werden DES-, MD5- und Blowfish-Hash-Funktionen unterstützt. In der Voreinstellung benutzt FreeBSD die MD5-Hash-Funktion.

Sie können leicht herausfinden, welche Verschlüsselungsmethode von FreeBSD verwendet wird. Ein Weg besteht darin, die verschlüsselten Passwörter in /etc/master.passwd zu untersuchen. Passwörter, die mit MD5 verschlüsselt wurden, sind länger als die mit DES verschlüsselten und beginnen mit den Zeichen $1$. Passwörter, die mit $2a$ anfangen, wurden mit der Blowfish-Funktion verschlüsselt. DES Passwörter besitzen keine offensichtlichen Merkmale, an denen sie identifiziert werden könnten. Sie sind aber kürzer als MD5-Passwörter und sind in einem 64 Zeichen umfassenden Alphabet kodiert, das das $-Zeichen nicht enthält. Ein relativ kurzes Passwort, das nicht mit einem $-Zeichen anfängt, ist wahrscheinlich ein DES-Passwort.

Die Verschlüsselungsmethode für neue Passwörter wird durch passwd_format in /etc/login.conf bestimmt. Der Wert dieser Variablen kann entweder des, md5 oder blf sein. Näheres schlagen Sie bitte in login.conf(5) nach.


15.5. Einmalpasswörter

In der Voreinstellung unterstützt FreeBSD OPIE (One-time Passwords in Everything), das in der Regel MD5-Hash-Funktionen einsetzt.

Im Folgenden werden drei verschiedene Passwörter verwendet. Das erste ist Ihr normales System- oder Kerberos-Passwort und wird im Folgenden “System-Passwort” genannt. Das zweite ist das Einmalpasswort, das bei OPIE von opiekey generiert und von opiepasswd und dem Login-Programm akzeptiert wird. Im Folgenden wird es “Einmalpasswort” genannt. Das dritte Passwort ist das geheime Passwort, das Sie mit opiekey (manchmal auch mit opiepasswd) zum Erstellen der Einmalpasswörter verwenden. Dieses Passwort werden wir im Folgenden “geheimes Passwort” oder schlicht “Passwort” nennen.

Das geheime Passwort steht in keiner Beziehung zu Ihrem System-Passwort, beide können gleich sein, obwohl das nicht empfohlen wird. Die geheimen Passwörter von OPIE sind nicht auf eine Länge von 8 Zeichen, wie alte UNIX Passwörter[10], beschränkt. Sie können so lang sein, wie Sie wollen. Gebräuchlich sind Passwörter, die sich aus sechs bis sieben Wörtern zusammensetzen. Das OPIE-System arbeitet größtenteils unabhängig von den auf UNIX-Systemen verwendeten Passwort-Mechanismen.

Neben dem Passwort gibt es noch zwei Werte, die für OPIE wichtig sind. Der erste ist der “Initialwert” (engl. seed oder key), der aus zwei Buchstaben und fünf Ziffern besteht. Der zweite Wert ist der “Iterationszähler”, eine Zahl zwischen 1 und 100. OPIE generiert das Einmalpasswort, indem es den Initialwert und das geheime Passwort aneinander hängt und dann die MD5-Hash-Funktion so oft, wie durch den Iterationszähler gegeben, anwendet. Das Ergebnis wird in sechs englische Wörter umgewandelt, die Ihr Einmalpasswort sind. Das Authentifizierungssystem (meistens PAM) merkt sich das zuletzt benutzte Einmalpasswort und Sie sind authentisiert, wenn die Hash-Funktion des Passworts dem vorigen Passwort entspricht. Da nicht umkehrbare Hash-Funktionen benutzt werden, ist es unmöglich, aus einem bekannten Passwort weitere gültige Einmalpasswörter zu berechnen. Der Iterationszähler wird nach jeder erfolgreichen Anmeldung um eins verringert und stellt so die Synchronisation zwischen Benutzer und Login-Programm sicher. Wenn der Iterationszähler den Wert 1 erreicht, muss OPIE neu initialisiert werden.

In jedem System werden mehrere Programme verwendet, die weiter unten beschrieben werden. opiekey verlangt einen Iterationszähler, einen Initialwert und ein geheimes Passwort. Daraus generiert es ein Einmalpasswort oder eine Liste von Einmalpasswörtern. opiepasswd wird dazu benutzt, um OPIE zu initialisieren. Mit diesem Programm können Passwörter, Iterationszähler oder Initialwerte geändert werden. Als Parameter verlangt es entweder ein geheimes Passwort oder einen Iterationszähler oder einen Initialwert und ein Einmalpasswort. opieinfo hingegen gibt den momentanen Iterationszähler und Initialwert eines Benutzers aus. Diese werden aus der Datei /etc/opiekeys ermittelt.

Im Folgenden werden vier verschiedene Tätigkeiten beschrieben. Zuerst wird erläutert, wie opiepasswd über eine gesicherte Verbindung eingesetzt werden, um Einmalpasswörter das erste Mal zu konfigurieren oder das Passwort oder den Initialwert zu ändern. Als nächstes wird erklärt, wie opiepasswd über eine nicht gesicherte Verbindung, oder zusammen mit opiekey über eine gesicherte Verbindung eingesetzt werden, um dasselbe zu erreichen. Als drittes wird beschrieben, wie opiekey genutzt wird, um sich über eine nicht gesicherte Verbindung anzumelden. Die vierte Tätigkeit beschreibt, wie mit opiekey eine Reihe von Schlüsseln generiert wird, die Sie sich aufschreiben oder ausdrucken können, um sich von Orten anzumelden, die über keine gesicherten Verbindungen verfügen.


15.5.1. Einrichten über eine gesicherte Verbindung

Um OPIE erstmals zu initalisieren, rufen Sie opiepasswd auf:

% opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:

ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED
     

Nach der Aufforderung Enter new secret pass phrase: oder Enter secret password: geben Sie bitte Ihr Passwort ein. Dies ist nicht das Passwort, mit dem Sie sich anmelden, sondern es wird genutzt, um das Einmalpasswort zu generieren. Die Zeile, die mit “ID” anfängt, enthält Ihren Login-Namen, den Iterationszähler und den Initialwert. Diese Werte müssen Sie sich nicht behalten, da das System sie zeigen wird, wenn Sie sich anmelden. In der letzten Zeile steht das Einmalpasswort, das aus diesen Parametern und Ihrem geheimen Passwort ermittelt wurde. Wenn sie sich jetzt wieder anmelden wollten, dann müssten Sie dieses Passwort benutzen.


15.5.2. Einrichten über eine nicht gesicherte Verbindung

Um Einmalpasswörter über eine nicht gesicherte Verbindung einzurichten, oder das geheime Passwort zu ändern, müssen Sie über eine gesicherte Verbindung zu einer Stelle verfügen, an der Sie opiekey ausführen. Dies kann etwa die Eingabeaufforderung auf einer Maschine, der Sie vertrauen, sein. Zudem müssen Sie einen Iterationszähler vorgeben (100 ist ein guter Wert) und einen Initialwert wählen, wobei Sie auch einen zufällig generierten benutzen können. Benutzen Sie opiepasswd über die ungesicherte Verbindung zu der Maschine, die Sie einrichten wollen:

% opiepasswd

Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
        otp-md5 498 to4268 ext
        Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
        otp-md5 499 to4269
        Response: LINE PAP MILK NELL BUOY TROY

ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY

Drücken Sie Return, um die Vorgabe für den Initialwert zu akzeptieren. Bevor Sie nun das Zugriffspasswort (engl. access password) eingeben, rufen Sie über die gesicherte Verbindung opikey mit denselben Parametern auf:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Gehen Sie nun zurück zu der nicht gesicherten Verbindung und geben dort das eben generierte Einmalpasswort ein.


15.5.3. Erzeugen eines einzelnen Einmalpasswortes

Nachdem Sie OPIE eingerichtet haben, werden Sie beim nächsten Anmelden wie folgt begrüßt:

% telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.

FreeBSD/i386 (example.com) (ttypa)

login: <username>
otp-md5 498 gr4269 ext
Password:

Anmerkung: OPIE besitzt eine nützliche Eigenschaft, die hier nicht gezeigt ist. Wenn Sie an der Eingabeaufforderung Return eingeben, wird die echo-Funktion eingeschaltet, das heißt Sie sehen, was Sie tippen. Dies ist besonders nützlich, wenn Sie ein generiertes Passwort von einem Ausdruck abtippen müssen.

Jetzt müssen Sie Ihr Einmalpasswort generieren, um der Anmeldeaufforderung nachzukommen. Dies muss auf einem gesicherten System geschehen, auf dem Sie oder opiekey ausführen können. Dieses Programm gibt es übrigens auch für DOS, Windows und Mac OS. Es benötigt den Iterationszähler sowie den Initialwert als Parameter, die Sie mittels “cut-and-paste” direkt von der Login-Aufforderung nehmen können.

Auf dem sicheren System:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Mit dem jetzt generierten Einmalpasswort können Sie die Anmeldeprozedur fortsetzen.


15.5.4. Erzeugen von mehreren Einmalpasswörtern

Manchmal müssen Sie sich an Orte begeben, an denen Sie keinen Zugriff auf eine sichere Maschine oder eine sichere Verbindung haben. In diesem Fall können Sie vorher mit opiekey einige Einmalpasswörter generieren, die Sie sich ausdrucken und mitnehmen können. Zum Beispiel:

% opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHI

Mit -n 5 fordern Sie fünf Passwörter der Reihe nach an. Der letzte Iterationszähler wird durch 30 gegeben. Beachten Sie bitte, dass die Passwörter in der umgekehrten Reihenfolge, in der sie zu benutzen sind, ausgeben werden. Wenn Sie wirklich paranoid sind, schreiben Sie sich jetzt die Passwörter auf, ansonsten drucken Sie sie mit lpr aus. Beachten Sie, dass jede Zeile den Iterationszähler und das Einmalpasswort zeigt, trotzdem finden Sie es vielleicht hilfreich, eine Zeile nach Gebrauch durchzustreichen.


15.5.5. Einschränken der Benutzung von System-Passwörtern

OPIE kann die Verwendung von System-Passwörtern abhängig von der Quell-IP-Adresse einschränken. Die dazu nötigen Einstellungen werden in der Datei /etc/opieaccess vorgenommen, die bei der Installation des Systems automatisch erzeugt wird. Weitere Informationen über diese Datei und Sicherheitshinweise zu ihrer Verwendung entnehmen Sie bitte der Hilfeseite opieaccess(5).

Die Datei opieaccess könnte beispielsweise die folgende Zeile enthalten:

permit 192.168.0.0 255.255.0.0

Diese Zeile erlaubt es Benutzern, die sich von einer der angegebenen Quell-IP-Adressen anmelden, ihr System-Passwort zu verwenden. Beachten Sie bitte, dass eine Quell-IP-Adresse leicht gefälscht werden kann.

Findet sich in opieaccess kein passender Eintrag, muss die Anmeldung mit OPIE erfolgen.


15.6. TCP-Wrapper

Beigetragen von Tom Rhodes.

Wahrscheinlich hat jeder, der inetd(8) kennt, schon mal von den TCP-Wrappern gehört. Die wenigsten erkennen den vollen Nutzen der TCP-Wrapper in einer Netzumgebung. Es scheint, dass die meisten Leute Netzverbindungen mit einer Firewall absichern wollen. Auch wenn eine Firewall ein mächtiges Instrument ist, gibt es Sachen, die eine Firewall nicht kann. Eine Firewall kann beispielsweise keine Nachricht an den Verbindungsursprung senden. Genau das und mehr können aber die TCP-Wrapper. Im Folgenden werden die Funktionen der TCP-Wrapper und Beispiele für deren Konfiguration vorgestellt.

Die TCP-Wrapper erweitern die Steuerungsmöglichkeiten, die inetd über die Dienste unter seiner Kontrolle hat. Beispielsweise können Verbindungen protokolliert, Nachrichten zurückgesandt oder nur interne Verbindungen angenommen werden. Die TCP-Wrapper bieten nicht nur eine weitere Sicherheitsschicht, die teilweise auch von Firewalls geboten wird, sie bieten darüber hinaus Funktionen zur Steuerung von Verbindungen, die eine Firewall nicht bietet.

Die erweiterten Funktionen der TCP-Wrapper sind kein Firewall-Ersatz. Sie sollten zusammen mit einer Firewall und anderen Sicherheitsvorkehrungen eingesetzt werden. Die TCP-Wrapper sind eine weitere Sicherheitsschicht zum Schutz eines Systems.

Da die Wrapper die Funktion von inetd erweitern, wird im Folgenden vorausgesetzt, dass Sie den Abschnitt über die inetd-Konfiguration schon gelesen haben.

Anmerkung: Streng genommen handelt es sich bei den von inetd(8) gestarteten Programmen nicht um “Daemonen”. Da sich diese Bezeichnung aber eingebürgert hat, wird sie auch in diesem Abschnitt verwendet.


15.6.1. TCP-Wrapper einrichten

Um die TCP-Wrapper unter FreeBSD zu benutzen, muss nur der inetd aus rc.conf mit den voreingestellten Optionen -Ww gestartet werden. Die Konfigurationsdatei /etc/hosts.allow darf keine Fehler enthalten; falls doch, werden die Fehler mit syslogd(8) protokolliert.

Anmerkung: Im Gegensatz zu anderen Implementationen der TCP-Wrapper wird vom Gebrauch der Datei hosts.deny abgeraten. Die Konfiguration sollte sich vollständig in der Datei /etc/hosts.allow befinden.

In der einfachsten Konfiguration werden Dienste abhängig vom Inhalt der Datei /etc/hosts.allow erlaubt oder gesperrt. Unter FreeBSD wird in der Voreinstellung jeder von inetd gestartete Dienst erlaubt. Sehen wir uns zunächst die Grundkonfiguration an.

Eine Konfigurationszeile ist wie folgt aufgebaut: Dienst : Adresse : Aktion. Dienst ist der von inetd gestartete Dienst (auch Daemon genannt). Die Adresse kann ein gültiger Rechnername, eine IP-Adresse oder eine IPv6-Adresse in Klammern ([ ]) sein. Der Wert allow im Feld Aktion erlaubt Zugriffe, der Wert deny verbietet Zugriffe. Die Zeilen in hosts.allow werden für jede Verbindung der Reihe nach abgearbeitet. Trifft eine Zeile auf eine Verbindung zu, wird die entsprechende Aktion ausgeführt und die Abarbeitung ist beendet.

Es gibt noch weitere Konfigurationsoptionen, die gleich erläutert werden. Das bisher Gesagte reicht, um eine einfache Regel aufzustellen. Wenn Sie einkommende POP3-Verbindungen für den Dienst mail/qpopper erlauben wollen, erweitern Sie hosts.allow um die nachstehende Zeile:

# This line is required for POP3 connections:
qpopper : ALL : allow

Nachdem Sie die Zeile hinzugefügt haben, muss der inetd neu gestartet werden. Sie können dazu das Kommando kill(1) verwenden oder /etc/rc.d/inetd restart ausführen.


15.6.2. Erweiterte Konfiguration der TCP-Wrapper

Die TCP-Wrapper besitzen weitere Optionen, die bestimmen, wie Verbindungen behandelt werden. In einigen Fällen ist es gut, wenn bestimmten Rechnern oder Diensten eine Nachricht geschickt wird. In anderen Fällen soll vielleicht der Verbindungsaufbau protokolliert oder eine E-Mail an einen Administrator versandt werden. Oder ein Dienst soll nur für das lokale Netz bereitstehen. Dies alles ist mit so genannten Wildcards, Metazeichen und der Ausführung externer Programme möglich und wird in den nächsten zwei Abschnitten erläutert.


15.6.2.1. Externe Kommandos ausführen

Stellen Sie sich vor, eine Verbindung soll verhindert werden und gleichzeitig soll demjenigen, der die Verbindung aufgebaut hat, eine Nachricht geschickt werden. Auf welche Art müssen die TCP-Wrapper konfiguriert werden? Die Option twist führt beim Verbindungsaufbau ein Kommando aus. In der Datei hosts.allow ist ein Beispiel für diese Option enthalten:

# Alle anderen Dienste sind geschützt
ALL : ALL \
        : severity auth.info \
        : twist /bin/echo "You are not welcome to use %d from %h."

Für jeden Dienst, der nicht vorher in der Datei hosts.allow konfiguriert wurde, wird die Meldung “You are not allowed to use daemon from hostname.” zurückgegegeben. Dies ist besonders nützlich, wenn Sie die Gegenstelle sofort benachrichtigen wollen, nachdem die Verbindung getrennt wurde. Beachten Sie, dass der Text der Meldung in Anführungszeichen (") stehen muss, es gibt keine Ausnahmen zu dieser Regel.

Warnung: Ein so konfigurierter Server ist anfällig für Denial-of-Service-Angriffe. Ein Angreifer kann die gesperrten Dienste mit Verbindungsanfragen überfluten.

Um einem Denial-of-Service-Angriff zu entgehen, benutzen Sie die Option spawn. Wie die Option twist verbietet die Option spawn die Verbindung und führt externe Kommandos aus. Allerdings sendet die Option spawn der Gegenstelle keine Rückmeldung. Sehen Sie sich die nachstehende Konfigurationsdatei an:

# Verbindungen von example.com sind gesperrt:
ALL : .example.com \
	: spawn (/bin/echo %a from %h attempted to access %d >> \
	  /var/log/connections.log) \
	: deny

Damit sind Verbindungen von der Domain *.example.com gesperrt. Jeder Verbindungsaufbau wird zudem in der Datei /var/log/connections.log protokolliert. Das Protokoll enthält den Rechnernamen, die IP-Adresse und den Dienst, der angesprochen wurde.

In der Konfigurationsdatei wurde beispielsweise das Metazeichen %a verwendet. Es gibt weitere Metazeichen, die in der Hilfeseite hosts_access(5) beschrieben werden.


15.6.2.2. Wildcards

Bisher verwendeten die Beispiele immer die Wildcard ALL. Es gibt andere Wildcards, welche die Funktionalität ein bisschen erweitern. Die Wildcard ALL passt beispielsweise auf jeden Dienst, jede Domain oder jede IP-Adresse. Eine andere Wildcard ist PARANOID. Sie passt auf jeden Rechner, dessen IP-Adresse möglicherweise gefälscht ist. Dies ist dann der Fall, wenn der Verbindungsaufbau von einer IP-Adresse erfolgt, die nicht zu dem übermittelten Rechnernamen passt. Das folgende Beispiel sollte das ganze etwas klarer werden lassen:

# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny

In diesem Beispiel werden alle Verbindungen zu sendmail verboten, die von einer IP-Adresse ausgehen, die nicht zum Rechnernamen passt.

Achtung: Die Wildcard PARANOID kann einen Dienst unbrauchbar machen, wenn der Client oder der Server eine fehlerhafte DNS-Konfiguration besitzt. Seien Sie daher besonders vorsichtig, wenn Sie diese Wildcard in Ihre Konfiguration aufnehmen wollen.

Weiteres über Wildcards und deren Funktion lesen Sie bitte in der Hilfeseite hosts_access(5) nach.

Damit die gezeigten Beispiele funktionieren, müssen Sie die erste Konfigurationszeile in der Datei hosts.allow auskommentieren.


15.7. Kerberos5

Beigetragen von Tillman Hodgson. Beruht auf einem Beitrag von Mark Murray.

Kerberos ist ein Netzwerk-Protokoll, das Benutzer mithilfe eines sicheren Servers authentifiziert. Mit Risiken behaftete Dienste, wie das Anmelden an entfernten Systemen oder das Kopieren von Daten auf entfernte Systeme, werden durch Kerberos erheblich sicherer und lassen sich leichter steuern.

Kerberos hat eine Aufgabe: Die sichere Prüfung der Identität eines Benutzers (Authentifizierung) über das Netzwerk. Das System überprüft weder die Berechtigungen der Benutzer (Autorisierung), noch verfolgt es die durchgeführten Aktionen (Audit). Daher sollte Kerberos zusammen mit anderen Sicherheits-Systemen eingesetzt werden, die diese Funktionen bereitstellen. Die Daten einer Kommunikation können verschlüsselt werden, nachdem die Kommunikationspartner mit Kerberos ihre Identität geprüft haben.

Die folgenden Anweisungen beschreiben, wie Sie das mit FreeBSD gelieferte Kerberos einrichten. Eine vollständige Beschreibung des Systems entnehmen Sie bitte den entsprechenden Hilfeseiten.

Die Beschreibung der Kerberos-Installation benutzt folgende Namensräume:

  • Die DNS-Domain (Zone) heißt example.org.

  • Das Kerberos-Realm heißt EXAMPLE.ORG.

Anmerkung: Benutzen Sie echte Domain-Namen, wenn Sie Kerberos einrichten. Damit vermeiden Sie DNS-Probleme und stellen die Zusammenarbeit mit anderen Kerberos-Realms sicher.


15.7.1. Geschichte

Das MIT entwickelte Kerberos, um Sicherheitsprobleme auf dem Netzwerk zu lösen. Das Kerberos-Protokoll verwendet starke Kryptographie, sodass ein Server die Identität eines Clients (der umgekehrte Vorgang ist auch möglich) über ein unsicheres Netzwerk feststellen kann.

Der Begriff Kerberos wird sowohl für das Protokoll als auch für Programme verwendet, die Kerberos benutzen (wie Kerberos-Telnet). Die aktuelle Protokollversion ist 5 und wird in RFC 1510 beschrieben.

Mehrere Implementierungen des Protokolls stehen frei zur Verfügung und decken viele Betriebssysteme ab. Das Massachusetts Institute of Technology (MIT), an dem Kerberos ursprünglich entwickelt wurde, entwickelt seine Kerberos-Version weiter. In den USA wird diese Version häufig eingesetzt, unterlag aber Export-Beschränkungen, da sie in den USA entwickelt wurde. Die MIT-Version von Kerberos befindet sich im Port security/krb5. Heimdal ist eine weitere Implementierung der Protokollversion 5. Sie wurde außerhalb der USA entwickelt und unterliegt daher keinen Export-Beschränkungen. Heimdal-Kerberos befindet sich im Port security/heimdal und das Basissystem von FreeBSD enthält eine minimale Installation von Heimdal.

Um möglichst viele Benutzer anzusprechen, verwenden die folgenden Beispiele die in FreeBSD enthaltene Heimdal-Distribution.


15.7.2. Das Heimdal KDC einrichten

Kerberos authentifiziert Benutzer an einer zentralen Stelle: dem Key Distribution Center (KDC). Das KDC verteilt Tickets, mit denen ein Dienst die Identität eines Benutzers feststellen kann. Alle Mitglieder eines Kerberos-Realms vertrauen dem KDC, daher gelten für das KDC erhöhte Sicherheitsanforderungen.

Obwohl das KDC wenig Ressourcen eines Rechners benötigt, sollte es wegen der Sicherheitsanforderungen auf einem separaten Rechner installiert werden.

Das KDC wird in /etc/rc.conf wie folgt aktiviert:

kerberos5_server_enable="YES"
kadmind5_server_enable="YES"

Danach wird die Konfigurationsdatei von Kerberos, /etc/krb5.conf, erstellt:

[libdefaults]
    default_realm = EXAMPLE.ORG
[realms]
    EXAMPLE.ORG = {
        kdc = kerberos.example.org
	admin_server = kerberos.example.org
    }
[domain_realm]
    .example.org = EXAMPLE.ORG

Diese Einstellungen setzen voraus, dass der voll qualifizierte Name des KDCs kerberos.example.org ist. Wenn Ihr KDC einen anderen Namen hat, müssen Sie in der DNS-Zone einen Alias-Eintrag (CNAME-Record) für das KDC hinzufügen.

Anmerkung: Auf großen Netzwerken mit einem ordentlich konfigurierten BIND DNS-Server kann die Datei verkürzt werden:

[libdefaults]
      default_realm = EXAMPLE.ORG

Die Zonendatei von example.org muss dann die folgenden Zeilen enthalten:

_kerberos._udp      IN  SRV     01 00 88 kerberos.example.org.
_kerberos._tcp      IN  SRV     01 00 88 kerberos.example.org.
_kpasswd._udp       IN  SRV     01 00 464 kerberos.example.org.
_kerberos-adm._tcp  IN  SRV     01 00 749 kerberos.example.org.
_kerberos           IN  TXT     EXAMPLE.ORG

Anmerkung: Damit Klienten die Kerberos-Dienste benutzen können, muss die Datei /etc/krb5.conf entweder die vollständige Konfiguration enthalten oder eine minimale Konfiguration enthalten und zusätzlich ein DNS-Server richtig eingerichtet sein.

Im nächsten Schritt wird die Kerberos-Datenbank eingerichtet. Die Datenbank enthält die Schlüssel aller Prinzipale und ist mit einem Passwort geschützt. Dieses Passwort brauchen Sie nicht zu behalten, da ein davon abgeleiteter Schlüssel in der Datei /var/heimdal/m-key gespeichert wird. Den Schlüssel erstellen Sie, indem Sie das Programm kstash aufrufen und ein Passwort eingeben.

Nachdem Sie den Schlüssel in /var/heimdal/m-key erstellt haben, können Sie die Datenbank mit dem Kommando kadmin initialisieren. Verwenden Sie hierbei die Option -l (lokal). Mit dieser Option wird die Datenbank lokal modifiziert. Normal würde der kadmind-Dienst benutzt, der aber zu diesem Zeitpunkt noch nicht läuft. An der Eingabeaufforderung von kadmin können Sie mit dem Kommando init die Datenbank des Realms einrichten.

Zuletzt erstellen Sie mit dem Kommando add Ihren ersten Prinzipal. Benutzen Sie die voreingestellten Optionen; Sie können die Einstellungen später mit dem Kommando modify ändern. An der Eingabeaufforderung zeigt das Kommando ? Hilfetexte an.

Zusammengefasst wird die Datenbank wie folgt eingerichtet:

# kstash
Master key: xxxxxxxx
Verifying password - Master key: xxxxxxxx

# kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:
kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxx

Jetzt kann das KDC gestartet werden. Führen Sie zum Start der Dienste die Kommandos /etc/rc.d/kerberos start und /etc/rc.d/kadmind start aus. Obwohl zu diesem Zeitpunkt noch keine kerberisierten Dienste laufen, können Sie die Funktion des KDCs schon überprüfen. Für den eben angelegten Benutzer können Sie sich vom KDC Tickets holen und diese Tickets anzeigen:

% kinit tillman
tillman@EXAMPLE.ORG's Password:

% klist
Credentials cache: FILE: /tmp/krb5cc_500
        Principal: tillman@EXAMPLE.ORG

  Issued           Expires          Principal
Aug 27 15:37:58  Aug 28 01:37:58  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG

Dieses Ticket kann, nachdem Sie Ihre Arbeit beendet haben, zurückgezogen werden:

% kdestroy

15.7.3. Kerberos-Dienste einrichten

Alle Rechner, die kerberisierte Dienste anbieten, müssen eine Kopie der Kerberos-Konfigurationsdatei /etc/krb5.conf besitzen. Sie können die Datei einfach vom KDC kopieren.

Anschließend müssen Sie die Datei /etc/krb5.keytab erzeugen. Im Gegensatz zu normalen Workstations benötigt jeder Server eine keytab. Diese Datei enthält den Schlüssel des Servers, mit dem sich der Server und das KDC gegenseitig authentifizieren können. Die Datei muss sicher auf den Server transportiert werden (beispielsweise mit scp(1) oder einer Diskette). Unter keinen Umständen darf die Datei im Klartext, zum Beispiel mit FTP, übertragen werden, da sonst die Sicherheit des Servers gefährdet ist.

Sie können die keytab auch mit dem Programm kadmin übertragen. Da Sie mit kadmin sowieso einen Host-Prinzipal für den Server einrichten müssen, ist das ganz praktisch.

Sie müssen allerdings schon ein Ticket besitzen und berechtigt sein, kadmin auszuführen. Die Berechtigung erhalten Sie durch einen Eintrag in der Zugriffskontrollliste kadmind.acl. Weitere Informationen über Zugriffskontrolllisten erhalten Sie in den Heimdal-Info-Seiten (info heimdal) im Abschnitt “Remote administration”. Wenn der Zugriff auf kadmin von entfernten Maschinen verboten ist, müssen Sie sich sicher auf dem KDC anmelden (lokale Konsole, ssh(1) oder kerberisiertes Telnet) und die keytab lokal mit kadmin -l erzeugen.

Nachdem Sie die Datei /etc/krb5.conf installiert haben, können Sie das Kommando kadmin benutzen. An der Eingabeaufforderung von kadmin erstellt das Kommando add --random-key den Host-Prinzipal und das Kommando ext extrahiert den Schlüssel des Prinzipals in eine Datei:

# kadmin
kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
kadmin> ext host/myserver.example.org
kadmin> exit

Das Kommando ext (von extract) speichert den extrahierten Schlüssel in der Datei /etc/krb5.keytab.

Wenn auf dem KDC, vielleicht aus Sicherheitsgründen, kadmind nicht läuft, können Sie das Kommando kadmin von entfernten Rechnern nicht benutzen. In diesem Fall legen Sie den Host-Prinzipal host/myserver.EXAMPLE.ORG direkt auf dem KDC an. Den Schlüssel extrahieren Sie in eine temporäre Datei (damit die Datei /etc/krb5.keytab nicht überschrieben wird):

# kadmin
kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit

Anschließend müssen Sie die erzeugte example.keytab sicher auf den Server kopieren (mit scp oder mithilfe einer Diskette). Geben Sie auf jeden Fall einen anderen Namen für die keytab an, weil sonst die keytab des KDCs überschrieben würde.

Wegen der Datei krb5.conf kann der Server nun mit dem KDC kommunizieren und seine Identität mithilfe der Datei krb5.keytab nachweisen. Jetzt können wir kerberisierte Dienste aktivieren. Für telnet muss die folgende Zeile in /etc/inetd.conf eingefügt werden:

telnet    stream  tcp     nowait  root    /usr/libexec/telnetd  telnetd -a user

Ausschlaggebend ist, dass die Authentifizierungs-Methode mit -a auf user gesetzt wird. Weitere Details entnehmen Sie bitte der Hilfeseite telnetd(8).

Nachdem sie die Zeile in /etc/inetd.conf eingefügt haben, starten Sie inetd(8) mit dem Kommando /etc/rc.d/inetd restart durch.


15.7.4. Kerberos-Clients einrichten

Ein Client lässt sich leicht einrichten. Sie benötigen nur die Kerberos-Konfigurationsdatei /etc/krb5.conf. Kopieren Sie die Konfigurationsdatei einfach vom KDC auf den Client.

Sie können jetzt mit kinit Tickets anfordern, mit klist Tickets anzeigen und mit kdestroy Tickets löschen. Sie können mit Kerberos-Anwendungen kerberisierte Server ansprechen. Wenn das nicht funktioniert, Sie aber Tickets anfordern können, hat wahrscheinlich der kerberisierte Server ein Problem und nicht der Client oder das KDC.

Wenn Sie eine Anwendung wie telnet testen, können Sie mit einem Paket-Sniffer (beispielsweise tcpdump(1)) überprüfen, dass Passwörter verschlüsselt übertragen werden. Probieren Sie auch die Option -x von telnet, die den gesamten Datenverkehr verschlüsselt (analog zu ssh).

Zu Heimdal gehören noch weitere Anwendungen. Allerdings enthält das FreeBSD-Basissystem nur eine minimale Heimdal-Installation mit nur einer kerberisierten Anwendung: telnet.

Der Heimdal-Port enthält noch mehr kerberisierte Anwendungen wie ftp, rsh, rcp und rlogin. Der MIT-Port enthält ebenfalls weitere kerberisierte Anwendungen.


15.7.5. .k5login und .k5users

Normalerweise wird ein Kerberos-Prinzipal wie tillman@EXAMPLE.ORG auf ein lokales Benutzerkonto, beispielsweise tillman, abgebildet. Daher benötigen Client-Anwendungen (zum Beispiel telnet) keinen Benutzernamen.

Manchmal wird aber Zugriff auf ein lokales Benutzerkonto benötigt, zu dem es keinen passenden Kerberos-Prinzipal gibt. Der Prinzipal tillman@EXAMPLE.ORG bräuchte beispielsweise Zugriff auf das Konto webdevelopers. Ebenso könnten andere Prinzipale auf dieses Konto zugreifen wollen.

Die Dateien .k5login und .k5users im Heimatverzeichnis eines Benutzerkontos gewähren Zugriffe ähnlich wie die Dateien .hosts und .rhosts. Um den Prinzipalen tillman@example.org und jdoe@example.org auf das Konto webdevelopers zu geben, wird im Heimatverzeichnis von webdevelopers die Datei .k5login mit folgendem Inhalt angelegt:

tillman@example.org
jdoe@example.org

Die angegebenen Prinzipale haben nun ohne ein gemeinsames Passwort Zugriff auf das Konto.

Einzelheiten entnehmen Sie bitte den Hilfeseiten zu diesen Dateien. Die Datei .k5users wird in der Hilfeseite des Kommandos ksu beschrieben.


15.7.6. Tipps und Fehlersuche

  • Wenn Sie den Heimdal-Port oder den MIT-Port benutzen, muss in der Umgebungsvariable PATH der Pfad zu den Programmen des Ports vor dem Pfad zu den Kerberos-Programmen des Systems stehen.

  • Sind die Uhrzeiten der Systeme synchronisiert? Wenn nicht, schlägt vielleicht die Authentifizierung fehl. Abschnitt 30.10 beschreibt, wie Sie mithilfe von NTP die Uhrzeiten synchronisieren.

  • Die MIT- und Heimdal-Systeme arbeiten bis auf kadmin gut zusammen. Für kadmin wurde das Protokoll nicht normiert.

  • Wenn Sie den Namen eines Rechners ändern, müssen Sie auch den host/-Prinzipal ändern und die Datei keytab aktualisieren. Dies betrifft auch spezielle Einträge wie den Prinzipal für Apaches www/mod_auth_kerb.

  • Die Rechnernamen müssen vor- und rückwärts aufgelöst werden (im DNS oder in /etc/hosts). CNAME-Einträge im DNS funktionieren, aber die entsprechenden A- und PTR-Einträge müssen vorhanden und richtig sein. Wenn sich Namen nicht auflösen lassen, ist die Fehlermeldung nicht gerade selbstsprechend: “Kerberos5 refuses authentication because Read req failed: Key table entry not found”.

  • Einige Betriebssysteme installieren ksu mit falschen Zugriffsrechten; es fehlt das Set-UID-Bit für root. Das mag aus Sicherheitsgründen richtig sein, doch funktioniert ksu dann nicht. Dies ist kein Fehler des KDCs.

  • Wenn Sie für einen Prinzipal unter MIT-Kerberos Tickets mit einer längeren Gültigkeit als der vorgegebenen zehn Stunden einrichten wollen, müssen Sie zwei Sachen ändern. Benutzen Sie das modify_principal von kadmin, um die maximale Gültigkeitsdauer für den Prinzipal selbst und den Prinzipal krbtgt zu erhöhen.

  • Mit einem Packet-Sniffer können Sie feststellen, dass Sie sofort nach dem Aufruf von kinit eine Antwort vom KDC bekommen - noch bevor Sie überhaupt ein Passwort eingegeben haben! Das ist in Ordnung: Das KDC händigt ein Ticket-Granting-Ticket (TGT) auf Anfrage aus, da es durch einen vom Passwort des Benutzers abgeleiteten Schlüssel geschützt ist. Wenn das Passwort eingegeben wird, wird es nicht zum KDC gesendet, sondern zum Entschlüsseln der Antwort des KDCs benutzt, die kinit schon erhalten hat. Wird die Antwort erfolgreich entschlüsselt, erhält der Benutzer einen Sitzungs-Schlüssel für die künftige verschlüsselte Kommunikation mit dem KDC und das Ticket-Granting-Ticket. Das Ticket-Granting-Ticket wiederum ist mit dem Schlüssel des KDCs verschlüsselt. Diese Verschlüsselung ist für den Benutzer völlig transparent und erlaubt dem KDC, die Echtheit jedes einzelnen TGT zu prüfen.

  • Wenn Sie OpenSSH verwenden und Tickets mir einer langen Gültigkeit (beispielsweise einer Woche) benutzen, setzen Sie die Option TicketCleanup in der Datei sshd_config auf no. Ansonsten werden Ihre Tickets gelöscht, wenn Sie sich abmelden.

  • Host-Prinzipale können ebenfalls Tickets mit längerer Gültigkeit besitzen. Wenn der Prinzipal eines Benutzers über ein Ticket verfügt, das eine Woche gültig ist, das Ticket des Host-Prinzipals aber nur neun Stunden gültig ist, funktioniert der Ticket-Cache nicht wie erwartet. Im Cache befindet sich dann ein abgelaufenes Ticket des Host-Prinzipals.

  • Wenn Sie mit krb5.dict die Verwendung schlechter Passwörter verhindern wollen, geht das nur mit Prinzipalen, denen eine Passwort-Policy zugewiesen wurde. Die Hilfeseite von kadmind beschreibt kurz, wie krb5.dict verwendet wird. Das Format von krb5.dict ist einfach: Die Datei enthält pro Zeile ein Wort. Sie können daher einen symbolischen Link auf /usr/share/dict/words erstellen.


15.7.7. Unterschiede zum MIT-Port

Der Hauptunterschied zwischen MIT-Kerberos und Heimdal-Kerberos ist das Kommando kadmin. Die Befehlssätze des Kommandos (obwohl funktional gleichwertig) und das verwendete Protokoll unterscheiden sich in beiden Varianten. Das KDC lässt sich nur mit dem kadmin Kommando der passenden Kerberos-Variante verwalten.

Für dieselbe Funktion können auch die Client-Anwendungen leicht geänderte Kommandozeilenoptionen besitzen. Folgen Sie bitte der Anleitung auf der Kerberos-Seite (http://web.mit.edu/Kerberos/www/) des MITs. Achten Sie besonders auf den Suchpfad für Anwendungen. Der MIT-Port wird standardmäßig in /usr/local/ installiert. Wenn die Umgebungsvariable PATH zuerst die Systemverzeichnisse enthält, werden die Systemprogramme anstelle der MIT-Programme ausgeführt.

Anmerkung: Wenn Sie den MIT-Port security/krb5 verwenden, erscheint bei der Anmeldung mit telnetd und klogind die Fehlermeldung “incorrect permissions on cache file”. Lesen Sie dazu bitte die im Port enthaltene Datei /usr/local/share/doc/krb5/README.FreeBSD. Wichtig ist, dass zur Authentifizierung die Binärdatei login.krb5 verwendet wird, die für durchgereichte Berechtigungen die Eigentümer korrekt ändert.

In der Datei rc.conf müssen folgende Zeilen aufgenommen werden:

kerberos5_server="/usr/local/sbin/krb5kdc"
kadmind5_server="/usr/local/sbin/kadmind"
kerberos5_server_enable="YES"
kadmind5_server_enable="YES"

Diese Zeilen sind notwendig, weil die Anwendungen von MIT-Kerberos Binärdateien unterhalb von /usr/local installieren.


15.7.8. Beschränkungen von Kerberos


15.7.8.1. Kerberos muss ganzheitlich verwendet werden

Jeder über das Netzwerk angebotetene Dienst muss mit Kerberos zusammenarbeiten oder auf anderen Wegen gegen Angriffe aus dem Netzwerk geschützt sein. Andernfalls können Berechtigungen gestohlen und wiederverwendet werden. Es ist beispielsweise nicht sinnvoll, für Anmeldungen mit rsh und telnet Kerberos zu benutzen, dagegen aber POP3-Zugriff auf einen Mail-Server zu erlauben, da POP3 Passwörter im Klartext versendet.


15.7.8.2. Kerberos ist für Einbenutzer-Systeme gedacht

In Mehrbenutzer-Umgebungen ist Kerberos unsicherer als in Einbenutzer-Umgebungen, da die Tickets im für alle lesbaren Verzeichnis /tmp gespeichert werden. Wenn ein Rechner von mehreren Benutzern verwendet wird, ist es möglich, dass Tickets gestohlen werden.

Dieses Problem können Sie lösen, indem Sie mit der Kommandozeilenoption -c oder besser mit der Umgebungsvariablen KRB5CCNAME einen Ort für die Tickets vorgeben. Diese Vorgehensweise wird leider selten benutzt. Es reicht, die Tickets im Heimatverzeichnis eines Benutzers zu speichern und mit Zugriffsrechten zu schützen.


15.7.8.3. Das KDC ist verwundbar

Das KDC muss genauso abgesichert werden wie die auf ihm befindliche Passwort-Datenbank. Auf dem KDC dürfen keine anderen Dienste laufen und der Rechner sollte physikalisch gesichert sein. Die Gefahr ist groß, da Kerberos alle Passwörter mit einem Schlüssel, dem Haupt-Schlüssel, verschlüsselt. Der Haupt-Schlüssel wiederum wird in einer Datei auf dem KDC gespeichert.

Ein kompromittierter Haupt-Schlüssel ist nicht ganz so schlimm wie allgemein angenommen. Der Haupt-Schlüssel wird nur zum Verschlüsseln der Passwort-Datenbank und zum Initialisieren des Zufallsgenerators verwendet. Solange der Zugriff auf das KDC abgesichert ist, kann ein Angreifer wenig mit dem Haupt-Schlüssel anfangen.

Wenn das KDC nicht zur Verfügung steht, vielleicht wegen eines Denial-of-Service Angriffs oder wegen eines Netzwerkproblems, ist eine Authentifizierung unmöglich. Damit können die Netzwerk-Dienste nicht benutzt werden; das KDC ist also ein optimales Ziel für einen Denial-of-Service Angriff. Sie können diesem Angriff ausweichen, indem Sie mehrere KDCs (einen Master und einen oder mehrere Slaves) verwenden. Der Rückfall auf ein sekundäres KDC oder eine andere Authentifizierungs-Methode (dazu ist PAM bestens geeignet) muss sorgfältig eingerichtet werden.


15.7.8.4. Mängel von Kerberos

Mit Kerberos können sich Benutzer, Rechner und Dienste gegenseitig authentifizieren. Allerdings existiert kein Mechanismus, der das KDC gegenüber Benutzern, Rechnern oder Diensten authentifiziert. Ein verändertes kinit könnte beispielsweise alle Benutzernamen und Passwörter abfangen. Die von veränderten Programmen ausgehende Gefahr können Sie lindern, indem Sie die Integrität von Dateien mit Werkzeugen wie security/tripwire prüfen.


15.8. OpenSSL

Beigetragen von Tom Rhodes.

Es wird oft übersehen, dass OpenSSL Teil des FreeBSD-Basissystems ist. OpenSSL bietet eine verschlüsselte Transportschicht oberhalb der normalen Kommunikationsschicht und kann daher zusammen mit vielen Netzdiensten benutzt werden.

Anwendungsbeispiele für OpenSSL sind die verschlüsselte Authentifizierung von E-Mail-Clients oder Web-Transaktionen wie das Bezahlen mit einer Kreditkarte. OpenSSL kann während des Baus in viele Ports, wie www/apache22 und mail/claws-mail, integriert werden.

Anmerkung: Ist beim Aufruf von make die Variable WITH_OPENSSL_BASE nicht explizit auf yes gesetzt, baut die Ports-Sammlung meist den Port security/openssl.

Das OpenSSL von FreeBSD stellt die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur Verfügung. Die OpenSSL-Bibliotheken stellen kryptographische Funktionen bereit.

Anmerkung: Mit OpenSSL kann der IDEA-Algorithmus verwendet werden, wegen Patenten in den USA ist der Algorithmus in der Voreinstellung allerdings deaktiviert. Wenn Sie die IDEA-Lizenz akzeptieren, können Sie den IDEA-Algorithmus aktivieren, indem Sie die Variable MAKE_IDEA in make.conf setzen.

Meist wird OpenSSL eingesetzt, um Zertifikate für Anwendungen bereitzustellen. Die Zertifikate stellen die Identität einer Firma oder eines Einzelnen sicher. Wenn ein Zertifikat nicht von einer Zertifizierungsstelle (Certificate Authority, CA) gegengezeichnet wurde, erhalten Sie normalerweise eine Warnung. Eine Zertifizierungsstelle ist eine Firma wie VeriSign, die Zertifikate von Personen oder Firmen gegenzeichnet und damit die Korrektheit der Zertifikate bestätigt. Diese Prozedur kostet Geld, ist aber keine Voraussetzung für den Einsatz von Zertifikaten, beruhigt aber sicherheitsbewusste Benutzer.


15.8.1. Zertifikate erzeugen

Ein Zertifikat erzeugen Sie mit dem nachstehenden Kommando:

# openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SOME PASSWORD
An optional company name []:Another Name

Beachten Sie bitte, dass die Eingabe bei “Common Name” ein gültiger Domain-Name sein muss. Eine andere Eingabe erzeugt ein unbrauchbares Zertifikat. Das Zertifikat kann mit einer Gültigkeitsdauer und anderen Verschlüsselungsalgorithmen erzeugt werden. Die Hilfeseite openssl(1) beschreibt die zur Verfügung stehenden Optionen.

Das Verzeichnis, in dem Sie den letzten Befehl ausgeführt haben, enthält nun zwei Dateien: Die Anforderung für ein neues Zertifikat wurde in req.pem gespeichert. Diese Datei können Sie an eine Zertifizierungsstelle senden, wo Ihre Angaben geprüft werden. Nach erfolgreicher Prüfung wird das Zertifikat an Sie zurückgesandt. Die zweite Datei, cert.pem, enthält den privaten Schlüssel für Ihr Zertifikat und darf auch keine Fall in fremde Hände geraten, da ein Angreifer sonst in der Lage ist, anderen Personen oder Rechnern vorzugaukeln, dass es sich bei ihm um Sie handelt.

Wenn Sie keine Signatur einer Zertifizierungsstelle benötigen, können Sie ein selbst-signiertes Zertifikat erstellen. Erzeugen Sie dazu zuerst einen RSA-Schlüssel:

# openssl dsaparam -rand -genkey -out myRSA.key 1024

Erzeugen Sie dann den CA-Schlüssel:

# openssl gendsa -des3 -out myca.key myRSA.key

Erstellen Sie mit diesem Schlüssel das Zertifikat:

# openssl req -new -x509 -days 365 -key myca.key -out new.crt

Zwei neue Dateien befinden sich nun im Verzeichnis: Der Schlüssel der Zertifizierungsstelle myca.key und das Zertifikat selbst, new.crt. Sie sollten in einem Verzeichnis, vorzugsweise unterhalb von /etc abgelegt werden, das nur von root lesbar ist. Setzen Sie die Zugriffsrechte der Dateien mit chmod auf 0700.


15.8.2. Beispiel für Zertifikate

Was fangen Sie mit einem Zertifikat an? Sie könnten damit beispielsweise die Verbindungen zu Sendmail verschlüsseln. Dies würde die Klartext-Authentifizierung für Benutzer des lokalen MTA überflüssig machen.

Anmerkung: Das ist nicht unbedingt die beste Lösung, da einige MUAs Warnungen ausgeben, wenn ein Zertifikat nicht lokal installiert ist. Die Installation von Zertifikaten wird in der Dokumentation der MUAs beschrieben.

Ergänzen Sie die Konfigurationsdatei von sendmail (.mc) um die nachstehenden Zeilen:

dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl

Im Verzeichnis /etc/certs befindet sich der Schlüssel und das Zertifikat. Bauen Sie danach im Verzeichnis /etc/mail mit dem Kommando make install die .cf-Datei und starten Sie anschließend sendmail mit make restart neu.

Wenn alles gut ging, erscheinen keine Fehlermeldungen in der Datei /var/log/maillog und Sie sehen sendmail in der Prozessliste.

Testen Sie nun den Mailserver mit dem Kommando telnet(1):

# telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.

Wenn in einer Zeile STARTTLS erscheint, hat alles funktioniert.


15.9. VPNs mit IPsec

Geschrieben von Nik Clayton.

Dieser Abschnitt beschreibt, wie Sie mit FreeBSD-Gateways ein Virtual-Private-Network (VPN) einrichten. Als Beispiel wird ein VPN zwischen zwei Netzen verwendet, die über das Internet miteinander verbunden sind.


15.9.1. IPsec Grundlagen

Geschrieben von Hiten M. Pandya.

Dieser Abschnitt zeigt Ihnen, wie Sie IPsec einrichten. Um IPsec einzurichten, sollten Sie einen neuen Kernel bauen können (siehe Kapitel 9).

IPsec ist ein Protokoll, das auf dem Internet-Protokoll (IP) aufbaut. Mit IPsec können mehrere Systeme geschützt miteinander kommunizieren. Das in FreeBSD realisierte IPsec-Protokoll baut auf der KAME-Implementierung auf und unterstützt sowohl IPv4 als auch IPv6.

IPsec besteht wiederum aus zwei Protokollen:

  • Encapsulated Security Payload (ESP) verschlüsselt IP-Pakete mit einem symmetrischen Verfahren (beispielsweise Blowfish oder 3DES). Damit werden die Pakete vor Manipulationen Dritter geschützt.

  • Der Authentication Header (AH) enthät eine kryptographische Prüfsumme, die sicher stellt, dass ein IP-Paket nicht verändert wurde. Der Authentication-Header folgt nach dem normalen IP-Header und erlaubt dem Empfänger eines IP-Paketes, dessen Integrität zu prüfen.

ESP und AH können, je nach Situation, zusammen oder einzeln verwendet werden.

IPsec kann in zwei Modi betrieben werden: Der Transport-Modus verschlüsselt die Daten zwischen zwei Systemen. Der Tunnel-Modus verbindet zwei Subnetze miteinander. Durch einen Tunnel können dann beispielsweise verschlüsselte Daten übertragen werden. Ein Tunnel wird auch als Virtual-Private-Network (VPN) bezeichnet. Detaillierte Informationen über das IPsec-Subsystem von FreeBSD enthält die Hilfeseite ipsec(4).

Die folgenden Optionen in der Kernelkonfiguration aktivieren IPsec:

options   IPSEC        #IP security
device    crypto

Wenn Sie zur Fehlersuche im IPsec-Subsystem Unterstützung wünschen, sollten Sie die folgende Option ebenfalls aktivieren:

options   IPSEC_DEBUG  #debug for IP security

15.9.2. Was ist ein VPN?

Es gibt keinen Standard, der festlegt, was ein Virtual-Private-Network ist. VPNs können mit verschiedenen Techniken, die jeweils eigene Vor- und Nachteile besitzen, implementiert werden. Dieser Abschnitt stellt eine Möglichkeit vor, ein VPN aufzubauen.


15.9.3. Das Szenario: Zwei Netzwerke, ein Heim- und ein Firmennetzwerk. Beide sind mit dem Internet verbunden und verhalten sich dank VPN wie ein Netzwerk.

Dieses Szenario hat die folgenden Vorausetzungen:

  • Es müssen zwei Netzwerke vorhanden sein.

  • Beide Netzwerke müssen intern IP benutzen.

  • Beide Netzwerke sind über ein FreeBSD-Gateway mit dem Internet verbunden.

  • Der Gateway jedes Netzwerks besitzt mindestens eine öffentliche IP-Adresse.

  • Die intern verwendeten IP-Adressen können private oder öffentliche Adressen sein. Sie dürfen sich nicht überlappen; zum Beispiel: nicht beide sollten 192.168.1.x benutzen.


15.9.4. Konfiguration von IPsec in FreeBSD

Geschrieben von Tom Rhodes.

Als erstes muss security/ipsec-tools aus der Ports-Sammlung installiert werden. Dieses Softwarepaket Dritter enthält einige Anwendungen, die ihnen bei der Konfiguration von IPsec helfen.

Als nächstes müssen zwei gif(4)-Pseudogeräte angelegt werden, um die Pakete zu tunneln und dafür zu sorgen, dass beide Netzwerke richtig miteinander kommunizieren können. Geben Sie als Benutzer root die folgenden Befehle ein: Austausch der internen und externen Werte durch die realen internen und externen Gateways:

# ifconfig gif0 create
# ifconfig gif0 internal1 internal2
# ifconfig gif0 tunnel external1 external2

Beispiel: Die öffentliche IP-Adresse des Firmennetzwerkes (LAN) ist: 172.16.5.4 mit einer internen IP-Adresse von 10.246.38.1. Das Heimnetzwerk (LAN) hat die öffentliche IP-Adresse 192.168.1.12 mit der internen privaten IP-Adresse 10.0.0.5.

Dies mag verwirrend erscheinen, schauen Sie sich deshalb das folgende Beispiel aus dem ifconfig(8)-Befehl an:

Gateway 1:

gif0: flags=8051 mtu 1280
tunnel inet 172.16.5.4 --> 192.168.1.12
inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00

Gateway 2:

gif0: flags=8051 mtu 1280
tunnel inet 192.168.1.12 --> 172.16.5.4
inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4

Wenn Sie fertig sind, sollten beide privaten IPs mit dem ping(8) Befehl, wie die folgende Darstellung zeigt, erreichbar sein:

priv-net# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms

corp-net# ping 10.246.38.1
PING 10.246.38.1 (10.246.38.1): 56 data bytes
64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
--- 10.246.38.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms

Wie erwartet, können nun beiden Seiten ICMP-Pakete von ihren privaten Adressen senden und empfangen. Als nächstes müssen beide Gateways so konfiguriert werden, dass sie die Pakete des anderen Netzwerkes richtig routen. Mit dem folgenden Befehl erreicht man das Ziel:

# corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
# corp-net# route add net 10.0.0.0: gateway 10.0.0.5
# priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
# priv-net# route add host 10.246.38.0: gateway 10.246.38.1

Ab jetzt sollten die Rechner von den Gateways sowie von den Rechnern hinter den Gateways erreichbar sein. Dies wird an dem folgendem Beispiel deutlich:

corp-net# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8): 56 data bytes
64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
--- 10.0.0.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms

priv-net# ping 10.246.38.107
PING 10.246.38.1 (10.246.38.107): 56 data bytes
64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
--- 10.246.38.107 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms

Das Konfigurieren der Tunnel ist der einfache Teil. Die Konfiguration einer sicheren Verbindung geht sehr viel mehr in die Tiefe. Die folgende Konfiguration benutzt pre-shared (PSK) RSA-Schlüssel. Abgesehen von den IP-Adressen, sind beide /usr/local/etc/racoon/racoon.conf identisch und sehen ähnlich aus wie:

path    pre_shared_key  "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
log     debug;  #log verbosity setting: set to 'notify' when testing and debugging is complete

padding # options are not to be changed
{
        maximum_length  20;
        randomize       off;
        strict_check    off;
        exclusive_tail  off;
}

timer   # timing options. change as needed
{
        counter         5;
        interval        20 sec;
        persend         1;
#       natt_keepalive  15 sec;
        phase1          30 sec;
        phase2          15 sec;
}

listen  # address [port] that racoon will listening on
{
        isakmp          172.16.5.4 [500];
        isakmp_natt     172.16.5.4 [4500];
}

remote  192.168.1.12 [500]
{
        exchange_mode   main,aggressive;
        doi             ipsec_doi;
        situation       identity_only;
        my_identifier   address 172.16.5.4;
        peers_identifier        address 192.168.1.12;
        lifetime        time 8 hour;
        passive         off;
        proposal_check  obey;
#       nat_traversal   off;
        generate_policy off;

                        proposal {
                                encryption_algorithm    blowfish;
                                hash_algorithm          md5;
                                authentication_method   pre_shared_key;
                                lifetime time           30 sec;
                                dh_group                1;
                        }
}

sainfo  (address 10.246.38.0/24 any address 10.0.0.0/24 any)    # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
{                                                               # $network must be the two internal networks you are joining.
        pfs_group       1;
        lifetime        time    36000 sec;
        encryption_algorithm    blowfish,3des,des;
        authentication_algorithm        hmac_md5,hmac_sha1;
        compression_algorithm   deflate;
}

Die Erklärung einer jeden verfügbaren Option würde den Rahmen dieses Textes sprengen. Es gibt sehr viele relevante Informationen in der racoon-Konfigurationsanleitung.

Die SPD-Methoden müssn noch konfiguriert werden so dass, FreeBSD und racoon in der Lage sind den Netzwerkverkehr zwischen den Hosts zu ver- und entschlüsseln.

Dies wird durch ein einfaches Shellscript ähnlich wie das folgende, das auf dem Firmennetzwerk-Gateway liegt, ausgeführt. Diese Datei wird während der Systeminitialisierung ausgeführt und sollte unter /usr/local/etc/racoon/setkey.conf abgespeichert werden.

flush;
spdflush;

# To the home network
spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;

Einmal abgespeichert, kann racoon durch das folgende Kommando auf beiden Gateways gestartet werden:

# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log

Die Ausgabe sollte so ähnlich aussehen:

corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
Foreground mode.
2006-01-30 01:35:47: INFO: begin Identity Protection mode.
2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)

Um sicherzustellen, dass der Tunnel richtig funktioniert, wechseln Sie auf eine andere Konsole und benutzen Sie tcpdump(1) mit dem folgenden Befehl, um sich den Netzwerkverkehr anzusehen. Tauschen Sie em0 durch die richtige Netzwerkkarte aus.

# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12

Die Ausgabe der Konsole sollte dem hier ähneln. Wenn nicht, gibt es ein Problem und ein Debuggen der ausgegebenen Daten ist notwendig.

01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)

An diesem Punkt sollten beide Netzwerke verfügbar sein und den Anschein haben, dass sie zum selben Netzwerk gehören. Meistens sind beide Netzwerke durch eine Firewall geschützt. Um den Netzwerkverkehr zwischen den beiden Netzwerken zu erlauben, ist es notwendig Regeln zu erstellen. Für die ipfw(8) Firewall fügen Sie folgende Zeilen in ihre Firewall-Konfigurationsdatei ein:

ipfw add 00201 allow log esp from any to any
ipfw add 00202 allow log ah from any to any
ipfw add 00203 allow log ipencap from any to any
ipfw add 00204 allow log udp from any 500 to any

Anmerkung: Die Regelnummern müssen eventuell, je nach ihrer Hostkonfiguration, angepasst werden.

Für Benutzer der pf(4)- oder ipf(8)-Firewall sollte folgendes funktionieren:

pass in quick proto esp from any to any
pass in quick proto ah from any to any
pass in quick proto ipencap from any to any
pass in quick proto udp from any port = 500 to any port = 500
pass in quick on gif0 from any to any
pass out quick proto esp from any to any
pass out quick proto ah from any to any
pass out quick proto ipencap from any to any
pass out quick proto udp from any port = 500 to any port = 500
pass out quick on gif0 from any to any

Zum Ende, um dem Computer den Start vom VPN während der Systeminitialisierung zu erlauben, fügen Sie folgende Zeilen in ihre /etc/rc.conf: ein

ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
racoon_enable="yes"

15.10. OpenSSH

Beigetragen von Chern Lee.

OpenSSH stellt Werkzeuge bereit, um sicher auf entfernte Maschinen zuzugreifen. Die Kommandos rlogin, rsh, rcp und telnet können durch OpenSSH ersetzt werden. Zusätzlich können TCP/IP-Verbindungen sicher durch SSH weitergeleitet (getunnelt) werden. Mit SSH werden alle Verbindungen verschlüsselt, dadurch wird verhindert, dass die Verbindung zum Beispiel abgehört oder übernommen (Hijacking) werden kann.

OpenSSH wird vom OpenBSD-Projekt gepflegt und basiert auf SSH v1.2.12 mit allen aktuellen Fixen und Aktualisierungen. OpenSSH ist mit den SSH-Protokollen der Versionen 1 und 2 kompatibel.


15.10.1. Vorteile von OpenSSH

Mit telnet(1) oder rlogin(1) werden Daten in einer unverschlüsselten Form über das Netzwerk gesendet. Daher besteht die Gefahr, das Benutzer/Passwort Kombinationen oder alle Daten an beliebiger Stelle zwischen dem Client und dem Server abgehört werden. Mit OpenSSH stehen eine Reihe von Authentifizierungs- und Verschlüsselungsmethoden zur Verfügung, um das zu verhindern.


15.10.2. Aktivieren von sshd

Unter FreeBSD entscheidet der Anwender bei einer Standard-Installation, ob der sshd-Daemon aktiviert werden soll. Um zu überprüfen, ob sshd auf Ihrem System aktiviert ist, suchen Sie in rc.conf nach der folgenden Zeile:

sshd_enable="YES"

Ist diese Zeile vorhanden, wird sshd(8), der OpenSSH-Dæmon, beim Systemstart automatisch aktiviert. Alternativ können Sie OpenSSH auch über das rc(8)-Skript /etc/rc.d/sshd starten:

# /etc/rc.d/sshd start

15.10.3. SSH Client

ssh(1) arbeitet ähnlich wie rlogin(1):

# ssh user@example.com
Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)? yes
Host 'example.com' added to the list of known hosts.
user@example.com's password: *******

Der Anmeldevorgang wird danach, wie von rlogin oder telnet gewohnt, weiterlaufen. SSH speichert einen Fingerabdruck des Serverschlüssels. Die Aufforderung, yes einzugeben, erscheint nur bei der ersten Verbindung zu einem Server. Weitere Verbindungen zu dem Server werden gegen den gespeicherten Fingerabdruck des Schlüssels geprüft und der Client gibt eine Warnung aus, wenn sich der empfangene Fingerabdruck von dem gespeicherten unterscheidet. Die Fingerabdrücke der Version 1 werden in ~/.ssh/known_hosts, die der Version 2 in ~/.ssh/known_hosts2 gespeichert.

In der Voreinstellung akzeptieren aktuelle OpenSSH-Server nur SSH v2 Verbindungen. Wenn möglich, wird Version 2 verwendet, ist dies nicht möglich, fällt der Server auf Version 1 zurück. Der Client kann gezwungen werden, nur eine der beiden Versionen zu verwenden, indem die Option -1 (für die Version 1) oder -2 (für die Version 2) übergeben wird. Die Unterstützung für Version 1 ist nur noch aus Kompatibilitätsgründen zu älteren Versionen enthalten.


15.10.4. Secure Copy

Mit scp(1) lassen sich Dateien analog wie mit rcp(1) auf entfernte Maschinen kopieren. Mit scp werden die Dateien allerdings in einer sicheren Weise übertragen.

# scp user@example.com:/COPYRIGHT COPYRIGHT
user@example.com's password:
COPYRIGHT            100% |*****************************|  4735
00:00
#

Da der Fingerabdruck schon im vorigen Beispiel abgespeichert wurde, wird er bei der Verwendung von scp in diesem Beispiel überprüft. Da die Fingerabdrücke übereinstimmen, wird keine Warnung ausgegeben.

Die Argumente, die scp übergeben werden, gleichen denen von cp in der Beziehung, dass die ersten Argumente die zu kopierenden Dateien sind und das letzte Argument den Bestimmungsort angibt. Da die Dateien über das Netzwerk kopiert werden, können ein oder mehrere Argumente die Form user@host:<path_to_remote_file> besitzen.


15.10.5. Konfiguration

Die für das ganze System gültigen Konfigurationsdateien des OpenSSH-Dæmons und des Clients finden sich in dem Verzeichnis /etc/ssh.

Die Client-Konfiguration befindet sich in ssh_config, die des Servers befindet sich in sshd_config.

Das SSH-System lässt sich weiterhin über die Anweisungen sshd_program (Vorgabe ist /usr/sbin/sshd) und sshd_flags in /etc/rc.conf konfigurieren.


15.10.6. ssh-keygen

Mit ssh-keygen(1) können DSA- oder RSA-Schlüssel für einen Benutzer erzeugt werden, die anstelle von Passwörtern verwendet werden können:

% ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com

ssh-keygen(1) erzeugt einen öffentlichen und einen privaten Schlüssel für die Authentifizierung. Der private Schlüssel wird in ~/.ssh/id_dsa oder ~/.ssh/id_rsa gespeichert, während sich der öffentliche Schlüssel in ~/.ssh/id_dsa.pub oder ~/.ssh/id_rsa.pub befindet, je nachdem, ob es sich um einen DSA- oder einen RSA-Schlüssel handelt. Der öffentliche Schlüssel muss sowohl für RSA- als auch für DSA-Schlüssel in die Datei ~/.ssh/authorized_keys auf dem entfernten Rechner aufgenommen werden, damit der Schlüssel funktioniert.

Damit werden Verbindungen zu der entfernten Maschine über SSH-Schlüsseln anstelle von Passwörtern authentifiziert.

Wenn bei der Erstellung der Schlüssel mit ssh-keygen(1) ein Passwort angegeben wurde, wird der Benutzer bei jeder Anmeldung zur Eingabe des Passworts aufgefordert. Um den Umgang mit SSH-Schlüsseln zu erleichtern, kann ssh-agent(1) die Verwaltung dieser Schlüssel für Sie übernehmen. Lesen Sie dazu den Abschnitt 15.10.7 weiter unten.

Warnung: Die Kommandozeilenoptionen und Dateinamen sind abhängig von der OpenSSH-Version. Die für Ihr System gültigen Optionen finden Sie in der Hilfeseite ssh-keygen(1).


15.10.7. ssh-agent und ssh-add

Mit ssh-agent(1) und ssh-add(1) ist es möglich, SSH-Schlüssel in den Speicher zu laden, damit die Passphrase nicht jedesmal eingegeben werden muss.

ssh-agent(1) übernimmt die Authentifizierung von ihm geladener privater Schlüssel. ssh-agent(1) sollte nur dazu verwendet werden, ein anderes Programm zu starten, beispielsweise eine Shell oder einen Window-Manager.

Um ssh-agent(1) in einer Shell zu verwenden, muss es mit einer Shell als Argument aufgerufen werden. Zusätzlich müssen die zu verwaltende Identität (durch ssh-add(1)) sowie deren Passphrase für den privaten Schlüssel übergeben werden. Nachdem dies erledigt ist, kann sich ein Benutzer über ssh(1) auf jedem Rechner anmelden, der einen entsprechenden öffentlichen Schlüssel besitzt. Dazu ein Beispiel:

% ssh-agent csh
% ssh-add
Enter passphrase for /home/user/.ssh/id_dsa:
Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
%

Um ssh-agent(1) unter X11 zu verwenden, müssen Sie ssh-agent(1) in Ihre ~/.xinitrc aufnehmen. Dadurch können alle unter X11 gestarteten Programme die Dienste von ssh-agent(1) nutzen. Ihre ~/.xinitrc könnte dazu etwas so aussehen:

exec ssh-agent startxfce4

Dadurch wird bei jedem Start von X11 zuerst ssh-agent(1) aufgerufen, das wiederum XFCE startet. Nachdem Sie diese Änderung durchgeführt haben, müssen Sie X11 neu starten. Danach können Sie mit ssh-add(1) Ihre SSH-Schlüssel laden.


15.10.8. SSH-Tunnel

Mit OpenSSH ist es möglich, einen Tunnel zu erstellen, in dem ein anderes Protokoll verschlüsselt übertragen wird.

Das folgende Kommando erzeugt einen Tunnel für telnet:

% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
%

Dabei wurden die folgenden Optionen von ssh verwendet:

-2

Erzwingt die Version 2 des Protokolls (Benutzen Sie die Option nicht mit langsamen SSH-Servern).

-N

Zeigt an, dass ein Tunnel erstellt werden soll. Ohne diese Option würde ssh eine normale Sitzung öffnen.

-f

Zwingt ssh im Hintergrund zu laufen.

-L

Ein lokaler Tunnel wird in der Form localport:remotehost:remoteport angegeben. Die Verbindung wird dabei von dem lokalen Port localport auf einen entfernten Rechner weitergeleitet.

user@foo.example.com

Gibt den entfernten SSH-Server an.

Ein SSH-Tunnel erzeugt ein Socket auf localhost und dem angegebenen Port. Jede Verbindung, die auf dem angegebenen Socket aufgemacht wird, wird dann auf den spezifizierten entfernten Rechner und Port weitergeleitet.

Im Beispiel wird der Port 5023 auf die entfernte Maschine und dort auf localhost Port 23 weitergeleitet. Da der Port 23 für Telnet reserviert ist, erzeugt das eine sichere Telnet-Verbindung durch einen SSH-Tunnel.

Diese Vorgehensweise kann genutzt werden, um jedes unsichere TCP-Protokoll wie SMTP, POP3, FTP, usw. weiterzuleiten.

Beispiel 15-1. Mit SSH einen sicheren Tunnel für SMTP erstellen

% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password: *****
% telnet localhost 5025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.example.com ESMTP

Zusammen mit ssh-keygen(1) und zusätzlichen Benutzer-Accounts können Sie leicht benutzbare SSH-Tunnel aufbauen. Anstelle von Passwörtern können Sie Schlüssel benutzen und jeder Tunnel kann unter einem eigenen Benutzer laufen.


15.10.8.1. Beispiel für SSH-Tunnel

15.10.8.1.1. Sicherer Zugriff auf einen POP3-Server

Nehmen wir an, an Ihrer Arbeitsstelle gibt es einen SSH-Server, der Verbindungen von außen akzeptiert. Auf dem Netzwerk Ihrer Arbeitsstelle soll sich zudem noch ein Mail-Server befinden, der POP3 spricht. Das Netzwerk oder die Verbindung von Ihrem Haus zu Ihrer Arbeitsstelle ist unsicher und daher müssen Sie Ihre E-Mail über eine gesicherte Verbindung abholen können. Die Lösung zu diesem Problem besteht darin, eine SSH-Verbindung von Ihrem Haus zu dem SSH-Server an Ihrer Arbeitsstelle aufzubauen, und von dort weiter zum Mail-Server zu tunneln.

% ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password: ******

Wenn Sie den Tunnel eingerichtet haben, konfigurieren Sie Ihren Mail-Client so, dass er POP3 Anfragen zu localhost Port 2110 sendet. Die Verbindung wird dann sicher zu mail.example.com weitergeleitet.


15.10.8.1.2. Umgehen einer strengen Firewall

Einige Netzwerkadministratoren stellen sehr drakonische Firewall-Regeln auf, die nicht nur einkommende Verbindungen filtern, sondern auch ausgehende. Es kann sein, dass Sie externe Maschinen nur über die Ports 22 und 80 (SSH und Web) erreichen.

Sie wollen auf einen Dienst, der vielleicht nichts mit Ihrer Arbeit zu tun hat, wie einen Ogg Vorbis Musik-Server, zugreifen. Wenn der Ogg Vorbis Server nicht auf den Ports 22 oder 80 läuft, können Sie aber nicht auf ihn zugreifen.

Die Lösung hier ist es, eine SSH-Verbindung zu einer Maschine außerhalb der Firewall aufzumachen und durch diese zum Ogg Vorbis Server zu tunneln.

% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password: *******

Konfigurieren Sie Ihren Client so, dass er localhost und Port 8888 benutzt. Die Verbindung wird dann zu music.example.com Port 8000 weitergeleitet und Sie haben die Firewall erfolgreich umgangen.


15.10.9. Die Option AllowUsers

Es ist in der Regel ein gute Idee, festzulegen, welche Benutzer sich von welchem Rechner aus anmelden können. Dies lässt sich beispielsweise über die Option AllowUsers festlegen. Soll sich etwa nur root vom Rechner mit der IP-Adresse 192.168.1.32 aus einwählen dürfen, würden Sie folgenden Eintrag in /etc/ssh/sshd_config aufnehmen:

AllowUsers root@192.168.1.32

Damit sich admin von jedem Rechner aus anmelden kann, geben Sie nur den Benutzernamen an:

AllowUsers admin

Sie können auch mehrere Benutzer in einer Zeile aufführen:

AllowUsers root@192.168.1.32 admin

Anmerkung: Nur ein Benutzer, der in dieser Liste aufgeführt ist, darf sich auf diesem Rechner anmelden.

Nachdem Sie /etc/ssh/sshd_config angepasst haben, muss sshd(8) seine Konfigurationsdateien neu einlesen. Dazu geben Sie Folgendes ein:

# /etc/rc.d/sshd reload

15.11. Zugriffskontrolllisten für Dateisysteme

Beigetragen von Tom Rhodes.

Zusammen mit anderen Verbesserungen des Dateisystems wie Schnappschüsse bietet FreeBSD auch Zugriffskontrolllisten (access control list, ACL).

Zugriffskontrolllisten erweitern die normalen Zugriffsrechte von UNIX Systemen auf eine kompatible (POSIX.1e) Weise und bieten feiner granulierte Sicherheitsmechanismen.

Zugriffskontrolllisten für Dateisysteme werden mit der nachstehenden Zeile in der Kernelkonfiguration aktiviert:

options UFS_ACL

Diese Option ist in der GENERIC-Konfiguration aktiviert. Das System gibt eine Warnung aus, wenn ein Dateisystem mit ACLs eingehangen werden soll und die Unterstützung für ACLs nicht im Kernel aktiviert ist. Das Dateisystem muss weiterhin erweiterte Attribute zur Verfügung stellen, damit ACLs verwendet werden können. Das neue UNIX-Dateisystem UFS2 stellt diese Attribute standardmäßig zur Verfügung.

Anmerkung: Die Konfiguration erweiterter Attribute auf UFS1 ist mit einem höheren Aufwand als die Konfiguration erweiterter Attribute auf UFS2 verbunden. Zudem ist UFS2 mit erweiterten Attributen leistungsfähiger als UFS1. Zugriffskontrolllisten sollten daher mit UFS2 verwendet werden.

Die Angabe der Option acl in /etc/fstab aktiviert Zugriffskontrolllisten für ein Dateisystem. Die bevorzugte Möglichkeit ist die Verwendung von Zugriffskontrolllisten mit tunefs(8) (Option -a), im Superblock des Dateisystems festzuschreiben. Diese Möglichkeit hat mehrere Vorteile:

  • Nochmaliges Einhängen eines Dateisystems (Option -u von mount(8)) verändert den Status der Zugriffskontrolllisten nicht. Die Verwendung von Zugriffskontrolllisten kann nur durch Abhängen und erneutes Einhängen eines Dateisystems verändert werden. Das heißt auch, dass Zugriffskontrolllisten nicht nachträglich auf dem Root-Dateisystem aktiviert werden können.

  • Die Zugriffskontrolllisten auf den Dateisystemen sind, unabhängig von den Option in /etc/fstab oder Namensänderungen der Geräte, immer aktiv. Dies verhindert auch, dass Zugriffskontrolllisten aus Versehen auf Dateisystem ohne Zugriffskontrolllisten aktiviert werden und durch falsche Zugriffsrechte Sicherheitsprobleme entstehen.

Anmerkung: Es kann sein, dass sich der Status von Zugriffskontrolllisten später durch nochmaliges Einhängen des Dateisystems (Option -u von mount(8)) ändern lässt. Die momentane Variante ist aber sicherer, da der Status der Zugriffskontrolllisten nicht versehentlich geändert werden kann. Allgemein sollten Zugriffskontrolllisten auf einem Dateisystem, auf dem sie einmal verwendet wurden, nicht deaktiviert werden, da danach die Zugriffsrechte falsch sein können. Werden Zugriffskontrolllisten auf einem solchen Dateisystem wieder aktiviert, werden die Zugriffsrechte von Dateien, die sich zwischenzeitlich geändert haben, überschrieben, was zu erneuten Problemen führt.

Die Zugriffsrechte einer Datei werden durch ein + (Plus) gekennzeichnet, wenn die Datei durch Zugriffskontrolllisten geschützt ist:

drwx------  2 robert  robert  512 Dec 27 11:54 private
drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3
drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html

Die Verzeichnisse directory1, directory2 und directory3 sind durch Zugriffskontrolllisten geschützt, das Verzeichnis public_html nicht.


15.11.1. Zugriffskontrolllisten benutzen

Das Werkzeug getfacl(1) zeigt Zugriffskontrolllisten an. Das folgende Kommando zeigt die ACLs auf der Datei test:

% getfacl test
	#file:test
	#owner:1001
	#group:1001
	user::rw-
	group::r--
	other::r--

Das Werkzeug setfacl(1) ändert oder entfernt ACLs auf Dateien. Zum Beispiel:

% setfacl -k test

Die Option -k entfernt alle ACLs einer Datei oder eines Dateisystems. Besser wäre es, die Option -b zu verwenden, da sie die erforderlichen Felder beibehält.

% setfacl -m u:trhodes:rwx,g:web:r--,o::--- test

Mit dem vorstehenden Kommando werden die eben entfernten Zugriffskontrolllisten wiederhergestellt. Der Befehl gibt die Fehlermeldung “Invalid argument” aus, wenn Sie nicht existierende Benutzer oder Gruppen als Parameter angeben.


15.12. Sicherheitsprobleme in Software Dritter überwachen

Beigetragen von Tom Rhodes.

In den letzten Jahren wurden zahlreiche Verbesserungen in der Einschätzung und dem Umgang mit Sicherheitsproblemen erzielt. Die Gefahr von Einbrüchen in ein System wird aber immer größer, da Softwarepakete von Dritten auf nahezu jedem Betriebssystem installiert und konfiguriert werden.

Die Einschätzung der Verletzlichkeit eines Systems ist ein Schlüsselfaktor für dessen Sicherheit. FreeBSD veröffentlicht zwar Sicherheitshinweise (security advisories) für das Basissystem, das Projekt ist allerdings nicht dazu in der Lage, dies auch für die zahlreichen Softwarepakete von Dritten zu tun. Dennoch gibt es einen Weg, auch diese Programmpakete zu überwachen. Das in der Ports-Sammlung enthaltene Programm Portaudit wurde gezielt dafür entwickelt.

Der Port ports-mgmt/portaudit fragt dazu eine Datenbank, die vom FreeBSD Security Team sowie den Ports-Entwicklern aktualisiert und gewartet wird, auf bekannte Sicherheitsprobleme ab.

Bevor Sie Portaudit verwenden können, müssen Sie es über die Ports-Sammlung installieren:

# cd /usr/ports/security/portaudit && make install clean

Während der Installation werden die Konfigurationsdateien für periodic(8) aktualisiert, was es Portaudit erlaubt, seine Ausgabe in den täglichen Sicherheitsbericht einzufügen. Stellen Sie auf jeden Fall sicher, dass diese (an das E-Mail-Konto von root gesendeten) Sicherheitsberichte auch gelesen werden. An dieser Stelle ist keine weitere Konfiguration nötig.

Nach der Installation kann ein Administrator die unter /var/db/portaudit lokal gespeicherte Datenbank aktualisieren und sich danach durch folgenden Befehl über mögliche Sicherheitslücken der von ihm installierten Softwarepakete informieren:

# portaudit -Fda

Anmerkung: Die Datenbank wird automatisch aktualisiert, wenn periodic(8) ausgeführt wird. Der eben genannte Befehl ist daher optional, er wird aber für das folgende Beispiel benötigt.

Nach erfolgter Installation der Datenbank kann ein Administrator über die Ports-Sammlung installierte Softwarepakete Dritter jederzeit überprüfen. Dazu muss er lediglich folgenden Befehl eingeben:

# portaudit -a

Existiert in Ihren installierten Softwarepaketen eine Sicherheitslücke, wird Portaudit eine Ausgabe ähnlich der folgenden produzieren:

Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>

1 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.

Wenn Sie die angegebene URL über einen Internetbrowser aufrufen, erhalten Sie weitere Informationen über die bestehende Sicherheitslücke, wie die betroffenen Versionen, die Version des FreeBSD-Ports sowie Hinweise auf weitere Seiten, die ebenfalls Sicherheitshinweise zu diesem Problem bieten.

Portaudit ist ein mächtiges Werkzeug und insbesondere in Zusammenarbeit mit dem Port Portupgrade äußerst hilfreich.


15.13. FreeBSD Sicherheitshinweise

Beigesteuert von Tom Rhodes.

Wie für andere hochwertige Betriebssysteme auch werden für FreeBSD Sicherheitshinweise herausgegeben. Die Hinweise werden gewöhnlich auf den Sicherheits-Mailinglisten und in den Errata veröffentlicht, nachdem das Sicherheitsproblem behoben ist. Dieser Abschnitt beschreibt den Umgang mit den Sicherheitshinweisen.


15.13.1. Wie sieht ein Sicherheitshinweis aus?

Der nachstehende Sicherheitshinweis stammt von der Mailingliste freebsd-security-notifications:

=============================================================================
FreeBSD-SA-XX:XX.UTIL                                     Security Advisory
                                                          The FreeBSD Project

Topic:          denial of service due to some problem(1)

Category:       core(2)
Module:         sys(3)
Announced:      2003-09-23(4)
Credits:        Person(5)
Affects:        All releases of FreeBSD(6)
                FreeBSD 4-STABLE prior to the correction date
Corrected:      2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE)
                2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6)
                2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15)
                2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8)
                2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18)
                2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21)
                2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33)
                2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43)
                2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)(7)
CVE Name:       CVE-XXXX-XXXX(8)

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit
http://www.FreeBSD.org/security/.

I.   Background(9)


II.  Problem Description(10)


III. Impact(11)


IV.  Workaround(12)


V.   Solution(13)


VI.  Correction details(14)


VII. References(15)
(1)
Das Feld Topic enthält eine Beschreibung des Sicherheitsproblems und benennt das betroffene Programm.
(2)
Das Feld Category beschreibt den betroffenen Systemteil. Mögliche Werte für dieses Feld sind core, contrib oder ports. Die Kategorie core gilt für Kernkomponenten des FreeBSD-Betriebssystems, die Kategorie contrib beschreibt zum Basissystem gehörende Software Dritter beispielsweise sendmail. Die Kategorie ports beschreibt Software, die Teil der Ports-Sammlung ist.
(3)
Das Feld Module beschreibt die betroffene Komponente. Im Beispiel ist sys angegeben, das heißt dieses Problem betrifft eine Komponente, die vom Kernel benutzt wird.
(4)
Das Feld Announced gibt den Zeitpunkt der Bekanntgabe des Sicherheitshinweises an. Damit existiert das Sicherheitsproblem, ist vom Sicherheits-Team bestätigt worden und eine entsprechende Korrektur wurde in das Quellcode-Repository von FreeBSD gestellt.
(5)
Das Feld Credits gibt die Person oder Organisation an, die das Sicherheitsproblem bemerkte und gemeldet hat.
(6)
Welche FreeBSD-Releases betroffen sind, ist im Feld Affects angegeben. Die Version einer Datei, die zum Kernel gehört, können Sie schnell mit ident ermitteln. Bei Ports ist die Versionsnummer angegeben, die Sie im Verzeichnis /var/db/pkg finden. Wenn Sie Ihr System nicht täglich aktualisieren, ist Ihr System wahrscheinlich betroffen.
(7)
Wann das Problem in welchem Release behoben wurde, steht im Feld Corrected.
(8)
Reserviert für Informationen, über die in der Common Vulnerabilities Database nach Sicherheitslücken gesucht werden kann.
(9)
Im Feld Background wird das betroffene Werkzeug beschrieben. Meist finden Sie hier warum das Werkzeug Bestandteil von FreeBSD ist, wofür es benutzt wird und eine kurze Darstellung der Herkunft des Werkzeugs.
(10)
Im Feld Problem Description befindet sich eine genaue Darstellung des Sicherheitsproblems. Hier wird fehlerhafter Code beschrieben oder geschildert, wie ein Werkzeug ausgenutzt wird.
(11)
Das Feld Impact beschreibt die Auswirkungen des Sicherheitsproblems auf ein System, beispielsweise erweiterte Rechte oder gar Superuser-Rechte für normale Benutzer.
(12)
Im Feld Workaround wird eine Umgehung des Sicherheitsproblems beschrieben. Die Umgehung ist für Administratoren gedacht, die ihr System aus Zeitnot, Netzwerk-technischen oder anderen Gründen nicht aktualisieren können. Nehmen Sie Sicherheitsprobleme ernst: Auf einem betroffenen System sollte das Problem entweder behoben oder, wie hier beschrieben, umgangen werden.
(13)
Im Feld Solution enthält eine getestete Schritt-für-Schritt Anleitung, die das Sicherheitsproblem behebt.
(14)
Das Feld Correction Details enthält die CVS-Tags der betroffenen Dateien zusammen mit zugehörigen Revisionsnummern.
(15)
Im Feld References finden sich Verweise auf weitere Informationsquellen. Dies können URLs zu Webseiten, Bücher, Mailinglisten und Newsgroups sein.

15.14. Prozess-Überwachung

Beigetragen von Tom Rhodes.

Prozess-Überwachung (Process accounting) ist ein Sicherheitsverfahren, bei dem ein Administrator verfolgt, welche Systemressourcen verwendet werden und wie sich diese auf die einzelnen Anwender verteilen. Dadurch kann das System überwacht werden und es ist sogar möglich, zu kontrollieren, welche Befehle ein Anwender eingibt.

Diese Fähigkeiten haben sowohl Vor- als auch Nachteile. Positiv ist, dass man einen Einbruchsversuch bis an den Anfang zurückverfolgen kann. Von Nachteil ist allerdings, dass durch diesen Prozess Unmengen an Protokolldateien erzeugt werden, die auch dementsprechenden Plattenplatz benötigen. Dieser Abschnitt beschreibt die Grundlagen der Prozess-Überwachung.


15.14.1. Die Prozess-Überwachung aktivieren und konfigurieren

Bevor Sie die Prozess-Überwachung verwenden können, müssen Sie diese aktivieren. Dazu führen Sie als root die folgenden Befehle aus:

# touch /var/account/acct
# accton /var/account/acct
# echo 'accounting_enable="YES"' >> /etc/rc.conf

Einmal aktiviert, wird sofort mit der Überwachung von CPU-Statistiken, Befehlen und anderen Vorgängen begonnen. Protokolldateien werden in einem nur von Maschinen lesbaren Format gespeichert, daher müssen Sie diese über sa(8) aufrufen. Geben Sie keine Optionen an, gibt sa Informationen wie die Anzahl der Aufrufe pro Anwender, die abgelaufene Zeit in Minuten, die gesamte CPU- und Anwenderzeit in Minuten, die durchschnittliche Anzahl der Ein- und Ausgabeoperationen und viel andere mehr aus.

Um Informationen über ausgeführte Befehle zu erhalten, verwenden Sie lastcomm(1). So können Sie etwa ermittlen, welche Befehle von wem auf welchem ttys(5) ausgeführt wurden:

# lastcomm ls
	trhodes ttyp1

Das Ergebnis sind alle bekannten Einsätze von ls durch trhodes auf dem Terminal ttyp1.

Zahlreiche weitere nützliche Optionen finden Sie in den Manualpages zu lastcomm(1), acct(5) sowie sa(8).


Kapitel 16. Jails

Beigetragen von Matteo Riondato. Übersetzt von Oliver Peter, Dirk Arlt und Johann Kois.

16.1. Übersicht

Dieses Kapitel erklärt, was FreeBSD-Jails sind und wie man sie einsetzt. Jails, manchmal als Ersatz für chroot-Umgebungen bezeichnet, sind ein sehr mächtiges Werkzeug für Systemadministratoren, jedoch kann deren grundlegende Verwendung auch für fortgeschrittene Anwender nützlich sein.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie

  • Wissen, was eine Jail ist und welche Verwendungszwecke es dafür unter FreeBSD gibt.

  • Wissen, wie man eine Jail erstellt, startet und und anhält.

  • Die Grundlagen der Jail-Administration (sowohl innerhalb als auch ausserhalb des Jails) kennen.

Weitere nützliche Informationen über Jails sind beispielsweise in folgenden Quellen zu finden:

  • Der jail(8) Manualpage. Diese umfassende Referenz beschreibt, wie man unter FreeBSD eine Jail startet, anhält und kontrolliert.

  • Den Mailinglisten und deren Archive. Die Archive der Mailingliste FreeBSD general questions und anderen Mailinglisten, welche vom FreeBSD list server bereitgestellt werden, beinhalten bereits umfangreiche Informationen zu Jails. Daher ist es sinnvoll, bei Problemen mit Jails zuerst die Archive der Mailinglisten zu durchsuchen, bevor Sie eine neue Anfrage auf der Mailingliste freebsd-questions stellen.


16.2. Jails - Definitionen

Um die für den Einsatz von Jails benötigten FreeBSD-Funktionen, deren Interna sowie die Art und Weise, mit der diese mit anderen Teilen des Betriebssystems interagieren, zu erläutern, werden in diesem Kapitel folgende Definitionen verwendet:

chroot(8) (-Befehl)

Ein Werkzeug, das den FreeBSD-Systemaufruf chroot(2) verwendet, um das Wurzelverzeichnis eines Prozesses und all seiner Nachkömmlinge zu ändern.

chroot(2) (-Umgebung)

Die Umgebung eines Prozesses, der in einem “chroot” läuft. Diese beinhaltet Ressourcen, wie zum Beispiel sichtbare Abschnitte des Dateisystems, verfügbare Benutzer- und Gruppenkennungen, Netzwerkschnittstellen und weitere IPC-Mechanismen und so weiter.

jail(8) (-Befehl)

Das Systemadministrationswerkzeug, welches es erlaubt, Prozesse innerhalb der Jail-Umgebung zu starten.

Host (-Benutzer, -Prozess, -System)

Das verwaltende System einer Jail-Umgebung. Das Host-System hat Zugriff auf alle verfügbaren Hardwareressourcen und kann sowohl innerhalb als auch ausserhalb der Jail-Umgebung Prozesse steuern. Einer der wichtigsten Unterschiede des Host-System einer Jails ist, dass die Einschränkungen, welche für die Superuser-Prozesse innerhalb eines Jails gelten, nicht für die Prozesse des Host-Systems gelten.

Gast (-Benutzer, -Prozess, -System)

Ein Prozess, ein Benutzer oder eine andere Instanz, deren Zugriff durch eine FreeBSD-Jail eingeschränkt ist.


16.3. Einführung

Da die Systemadministration oft eine schwierige Aufgabe ist, wurden viele mächtige Werkzeuge entwickelt, die Administratoren bei Installation, Konfiguration und Wartung ihrer Systeme unterstützen sollen. Eine wichtige Aufgabe eines Administrators ist es, Systeme so abzusichern, dass es im regulären Betrieb zu keinen Sicherheitsverstößen kommt.

Eines der Werkzeuge, mit dem die Sicherheit eines FreeBSD-Systems verbessert werden kann, sind Jails. Jails wurden schon in FreeBSD 4.X von Poul-Henning Kamp eingeführt, wurden jedoch mit FreeBSD 5.X stark verbessert, sodass sie inzwischen zu einem mächtigen und flexiblen Subsystem herangereift sind. Trotzdem geht die Entwicklung nach wie vor weiter. Wichtige Ziele sind derzeit: Bessere Zweckmäßigkeit, Leistung, Ausfallsicherheit und allgemeine Sicherheit.


16.3.1. Was ist eine Jail?

BSD-ähnliche Betriebssysteme besitzen seit den Zeiten von 4.2BSD chroot(2). Das Werkzeug chroot(2) kann dazu benutzt werden, das root-Verzeichnis einer Reihe von Prozessen zu ändern, um so eine seperate sichere Umgebung (abgeschnitten vom Rest des Systems) zu schaffen. Prozesse, die in einer chroot-Umgebung erstellt wurden, können nicht auf Dateien oder Ressourcen zugreifen, die sich ausserhalb der Umgebung befinden. Dadurch ist es einem kompromittierten Dienst nicht möglich, das gesamte System zu kompromittieren. chroot(8) eignet sich für einfache Aufgaben, die keine flexiblen, komplexen oder fortgeschrittenen Funktionen benötigen. Obwohl seit der Entwicklung des chroot-Konzepts zahlreiche Sicherheitslöcher geschlossen wurden, die es einem Prozess erlauben konnten, aus einer Jail auszubrechen, war seit langer Zeit klar, dass chroot(2) nicht die ideale Lösung ist, einen Dienst sicher zu machen.

Dies ist einer der Hauptgründe, warum Jails entwickelt wurden.

Jails setzen auf dem traditionellen chroot(2)-Konzept auf und verbessern es auf unterschiedlichste Art und Weise. In einer traditionellen chroot(2)-Umgebung sind Prozesse auf den Bereich des Dateisystems beschränkt, auf den sie zugreifen können. Der Rest der Systemressourcen (wie zum Beispiel eine Reihe von Systembenutzern, die laufenden Prozesse oder das Netzwerk-Subsystem) teilen sich die chroot-Prozesse mit dem Host-System. Jails dehnen dieses Modell nicht nur auf die Virtualisierung des Zugriffs auf das Dateisystem, sondern auch auf eine Reihe von Benutzern, das Netzwerk-Subsystem des FreeBSD-Kernels und weitere Bereiche aus. Eine ausführlichere Übersicht der ausgefeilten Bedienelemente zur Konfiguration einer Jail-Umgebung finden Sie im Abschnitt Abschnitt 16.5 des Handbuchs.

Eine Jail zeichnet sich durch folgende Merkmale aus:

  • Einen Unterverzeichnisbaum, der die Jail enthält. Einem Prozess, der innerhalb der Jail läuft, ist es nicht mehr möglich, aus diesem auszubrechen. Von der traditionellen chroot(2)-Umgebung bekannte Sicherheitsprobleme existieren bei FreeBSD-Jails nicht mehr.

  • Einen Hostname, der innerhalb der Jail verwendet wird. Jails werden vor allem dazu verwendet, Netzwerkdienste anzubieten, daher ist es für Systemadministratoren von großem Nutzen, dass jede Jail einen beschreibenden Hostname haben kann.

  • Eine IP Adresse, die der Jail zugewiesen wird und nicht verändert werden kann, solange das Jail läuft. Die IP-Adresse einer Jails ist üblicherweise ein Adress-Alias auf eine existierende Netzwerkschnittstelle. Dies ist jedoch nicht zwingend erforderlich.

  • Einen Befehl (genauer den Pfad einer ausführbaren Datei) der innerhalb der Jail ausgeführt werden soll. Dieser Pfad wird relativ zum root-Verzeichnis einer Jail-Umgebung angegeben und kann sehr unterschiedlich aussehen (je nachdem, wie die Jail-Umgebung konfiguriert wurde).

Unabhängig davon können Jails eine Reihe eigener Benutzer und einen eigenen Benutzer root haben. Selbstverständlich sind die Rechte des Benutzers root nur auf die Jail-Umgebung beschränkt. Aus der Sicht des Host-Systems ist der Benutzer root der Jail-Umgebung kein allmächtiger Benutzer, da der Benutzer root der Jail-Umgebung nicht dazu berechtigt ist, kritische Operationen am System ausserhalb der angebundenen jail(8)-Umgebung durchzuführen. Weitere Informationen über die Einsatzmöglichkeiten und Beschränkungen des Benutzers root werden im Abschnitt Abschnitt 16.5 des Handbuchs besprochen.


16.4. Einrichtung und Verwaltung von Jails

Einige Administratoren unterscheiden zwei verschiedene Jail-Arten: “Komplette” Jails, die ein echtes FreeBSD darstellen und Jails für einen bestimmten “Dienst”, die nur einer bestimmten Anwendung oder einem Dienst (der möglicherweise mit besonderen Privilegien laufen soll) gewidmet sind. Dies ist aber nur eine konzeptuelle Unterscheidung, die Einrichtung einer Jail bleibt davon gänzlich unberührt.

# setenv D /hier/ist/die/jail
# mkdir -p $D (1)
# cd /usr/src
# make buildworld (2)
# make installworld DESTDIR=$D (3)
# make distribution DESTDIR=$D (4)
# mount -t devfs devfs $D/dev (5)
(1)
Das Festlegen des Installationsorts für das Jail eignet sich am besten als Startpunkt. Hier wird sich die Jail innerhalb des Host-Dateisystems befinden. Eine gute Möglichkeit wäre etwa /usr/jail/name_der_jail, wobei name_der_jail den Hostname darstellt, über den die Jail identifiziert werden soll. Das Dateisystem unterhalb von /usr/ stellt normalerweise aussreichend Platz für eine Jail zur Verfügung (bedenken Sie, dass eine “komplette” Jail ein Replikat einer jeden Datei der Standardinstallation des FreeBSD-Basissystems enthält.
(2)
Wenn Sie bereits ihre Systemanwendungen mittels make world oder make buildworld neu erstellt haben, können Sie diesen Schritt überspringen und die Systemanwendungen in die neue Jail installieren.
(3)
Dieser Befehl wird den Verzeichnisbaum mit allen notwendigen Binärdateien, Bibliotheken, Manualpages usw. erstellen.
(4)
Der distribution-Befehl lässt make alle benötigten Konfigurationsdateien installieren, es werden also alle installierbaren Dateien aus /usr/src/etc/ in das Verzeichnis /etc der Jail installiert (also nach $D/etc/).
(5)
Das Einhängen des devfs(8)-Dateisystems innerhalb der Jail ist nicht unbedingt notwendig. Allerdings benötigt fast jede Anwendung Zugriff auf wenigstens ein Gerät. Es ist daher sehr wichtig, den Zugriff auf Devices aus der Jail heraus zu kontrollieren, da unsaubere Einstellungen es einem Angreifer erlauben könnten, in das System einzudringen. Die Kontrolle über devfs(8) erfolgt durch die in den Manualpages devfs(8) und devfs.conf(5) beschriebenen Regeln.

Ist eine Jail einmal erst erstellt, kann sie durch jail(8) gestartet werden. jail(8) benötigt zwingend mindestens vier Argumente, die im Abschnitt Abschnitt 16.3.1 des Handbuchs beschrieben sind. Weitere Argumente sind möglich, um beispielsweise die Jail mit den Berechtigungen eines bestimmten Benutzers laufen zu lassen. Das Argument command hängt vom Typ der Jail ab; für ein virtuelles System ist /etc/rc eine gute Wahl, da dies dem Startvorgang eines echten FreeBSD-Systems entspricht. Bei einer Service-Jail hängt dieses von der Art des Dienstes ab, der in der Jail laufen soll.

Jails werden häufig mit dem Betriebssystem gestartet, da der rc-Mechanismus von FreeBSD dafür eine einfach zu realisierende Möglichkeit bietet.

  1. Eine Liste der Jails, die mit dem Betriebssystem gestartet werden sollen, wird in die Datei rc.conf(5) geschrieben:

    jail_enable="YES"   # Set to NO to disable starting of any jails
    jail_list="www"     # Space separated list of names of jails
    

    Anmerkung: Die Namen der Jails in der jail_list sollten nur alphanumerische Zeichen enthalten.

  2. Für jede Jail in der jail_list sollten in rc.conf(5) einige Einstellungen vorgenommen werden:

    jail_www_rootdir="/usr/jail/www"     # jail's root directory
    jail_www_hostname="www.example.org"  # jail's hostname
    jail_www_ip="192.168.0.10"           # jail's IP address
    jail_www_devfs_enable="YES"          # mount devfs in the jail
    jail_www_devfs_ruleset="www_ruleset" # devfs ruleset to apply to jail
    

    Beim Start einer in rc.conf(5) konfigurierten Jail wird das /etc/rc-Skript der Jail (das "annimmt", dass es sich in einem kompletten System befindet) aufgerufen. Für Service-Jails sollten die Startskripte der Jail durch das Setzen der Option jail_jailname_exec_start entsprechend angepasst werden.

    Anmerkung: Eine vollständige Liste der Optionen findet sich in der Manualpage zu rc.conf(5).

Das /etc/rc.d/jail-Skript kann zum manuellen Starten und Stoppen der Jail genutzt werden, wenn ein Eintrag in rc.conf angelegt wurde:

# /etc/rc.d/jail start www
# /etc/rc.d/jail stop www

Es gibt momentan keinen sauberen Weg, eine jail(8) zu stoppen. Dies liegt daran, dass die Kommandos zum sauberen Herunterfahren eines Systems innerhalb einer Jail nicht ausgeführt werden können. Der beste Weg eine Jail zu beenden ist es daher, innerhalb der Jail den folgenden Befehl auszuführen (alternativ können Sie auch jexec(8) von außerhalb der Jail aufrufen):

# sh /etc/rc.shutdown

Weitere Informationen zu diesem Thema finden Sie in der Manualpage jail(8).


16.5. Feinabstimmung und Administration

Es gibt verschiedene Optionen, die für jede Jail gesetzt werden können und verschiedene Wege, ein FreeBSD-Host-System mit Jails zu kombinieren. Dieser Abschnitt zeigt Ihnen:

  • Einige zur Verfügung stehende Optionen zur Abstimmung des Verhaltens und der Sicherheitseinstellungen, die mit einer Jail-Installation ausgeführt werden können.

  • Einige der Anwendungsprogramme für das Jail-Management, die über die FreeBSD Ports-Sammlung verfügbar sind und genutzt werden können, um Jail-basierte Lösungen allumfassend umzusetzen.


16.5.1. Systemwerkzeuge zur Feinabstimmung von Jails in FreeBSD

Die Feinabstimmung einer Jail-Konfiguration erfolgt zum Großteil durch das Setzen von sysctl(8)-Variablen. Es gibt einen speziellen sysctl-Zweig, der als Basis für die Organisation aller relevanten Optionen dient: Die security.jail.*-Hierarchie der FreeBSD-Kerneloptionen. Die folgende Liste enthält alle jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen). Die Namen sollten selbsterklärend sein, für weitergehende Informationen lesen Sie bitte die Manualpages jail(8) und sysctl(8).

  • security.jail.set_hostname_allowed: 1

  • security.jail.socket_unixiproute_only: 1

  • security.jail.sysvipc_allowed: 0

  • security.jail.enforce_statfs: 2

  • security.jail.allow_raw_sockets: 0

  • security.jail.chflags_allowed: 0

  • security.jail.jailed: 0

Diese Variablen können vom Administrator des Host-Systems genutzt werden, um Beschränkungen hinzuzufügen oder aufzuheben, die dem Benutzer root als Vorgabe auferlegt sind. Beachten Sie, dass es einige Beschränkungen gibt, die nicht verändert werden können. Der Benutzer root darf innheralb der jail(8) keine Dateisysteme mounten und unmounten. Ebenso ist es ihm untersagt, das devfs(8)-Regelwerk zu laden oder zu entladen. Er darf weder Firewallregeln setzen, noch administrative Aufgaben erledigen, die Modifikationen am Kernel selbst erfordern (wie bespielsweise das Setzen des Securelevels des Kernel.

Das FreeBSD-Basissystem enthält einen Basissatz an Werkzeugen, um Informationen über aktive Jails zu erlangen und einer Jail administrative Befehle zuzuordnen. Die Befehle jls(8) und jexec(8) sind Teil des FreeBSD-Basissystems und können für folgende Aufgaben verwendet werden:

  • Das Anzeigen einer Liste der aktiven Jails und ihrer zugehörigen Jail Identifier (JID), ihrer IP-Addresse, ihres Hostnames und ihres Pfades.

  • Das Herstellen einer Verbindung mit einer laufenden Jail, das Starten eines Befehls aus dem gastgebenen System heraus oder das Ausführen einer administrativen Aufgabe innerhalb der Jail selbst. Dies ist insbesondere dann nützlich, wenn der Benutzer root die Jail sauber herunterfahren möchte. jexec(8) kann auch zum Starten einer Shell innerhalb der Jail genutzt werden, um adminstrative Aufgaben durchzuführen:

    # jexec 1 tcsh
    

16.5.2. High-Level-Werkzeuge zur Jail-Administration in der FreeBSD Ports-Sammlung

Unter den zahlreichen Fremdwerkzeugen für die Administration von Jails sind die sysutils/jailutils die vollständigsten und brauchbarsten. Dabei handelt es sich um eine Sammlung kleiner Anwendungen, die das jail(8)-Management vereinfachen. Weitere Informationen zu diesen Werkzeugen finden Sie auf den entsprechenden Internetseiten.


16.6. Anwendung von Jails

16.6.1. Service-Jails

Beigetragen von Daniel Gerzo.

Dieser Abschnitt basiert auf einer von Simon L. Nielsen auf http://simon.nitro.dk/service-jails.html präsentierten Idee und einem aktualisierten Artikel von Ken Tom (). Er beschreibt, wie ein FreeBSD-System durch Benutzung der jail(8)-Funktion mit zusätzlichen Sicherheitsebenen ausgestattet werden kann. Es wird dabei angenommen, dass auf Ihrem FreeBSD-System RELENG_6_0 oder neuer installiert ist und dass Sie die Informationen aus den vorangehenden Abschnitten gelesen und verstanden haben.


16.6.1.1. Design

Eines der Hauptprobleme bei Jails ist das Management ihres Upgrade-Prozesses. Dieser neigt dazu, problematisch zu sein, da jede Jail bei jedem Upgrade komplett neu gebaut werden muss. Das stellt normalerweise kein Problem dar, wenn es sich um eine einzelne Jail handelt, da der Upgrade-Prozess recht einfach ist. Verwenden Sie aber eine größere Anzahl von Jails, kann dieser Prozess sehr zeitaufwendig werden.

Warnung: Diese Konfiguration erfordert fortgeschrittene Kenntnisse im Umgang mit FreeBSD sowie der Benutzung seiner Funktionen. Sollten die unten vorgestellten Schritte zu kompliziert wirken, wird empfohlen, sich einfachere Verfahren wie sysutils/ezjail anzusehen, da diese einfachere Methoden zur Administration von Jails verwenden und daher nicht so anspruchsvoll sind wie der hier beschriebene Aufbau.

Diese Konfiguration basiert darauf, Jails so weit als möglich gemeinsam zu verwalten. Dies passiert auf sichere Art und Weise durch den Einsatz von mount_nullfs(8)-Mounts (read-only). Dadurch werden Aktualisierungen erleichtert und das Verteilen von verschiedenen Diensten auf verschiedene Jails wird attraktiver. Außerdem bietet dieses Verfahren einen einfachen Weg, Jails hinzuzufügen, zu entfernen und zu aktualisieren.

Anmerkung: Beispiele für Dienste sind in diesem Zusammenhang: Ein HTTP-Server, ein DNS-Server, ein SMTP-Server und so weiter.

Die Ziele des in diesem Abschnitt beschriebenen Aufbaus sind:

  • Das Erstellen einer einfachen und gut verständlichen Struktur von Jails. Dies beinhaltet, nicht für jede Jail ein vollständiges installworld laufen lassen zu müssen.

  • Es einfach zu machen, neue Jails zu erstellen oder alte zu entfernen.

  • Es einfach zu machen, bestehende Jails zu aktualisieren.

  • Es einfach zu machen, einen angepassten FreeBSD-Zweig zu nutzen.

  • Paranoid bezüglich Sicherheit zu sein und Angriffsmöglickeiten weitgehend zu reduzieren.

  • Soviel Platz und Inodes wie möglich einzusparen.

Wie bereits erwähnt, ist dieses Design stark darauf angewiesen, dass eine read-only-Hauptvorlage in jede Jail hinein gemountet wird (bekannt als nullfs), und dass jede Jail über wenigstens ein beschreibbares Gerät verfügt. Das Gerät kann hierbei eine separate physikalische Platte oder ein vnode unterstütztes md(4)-Gerät sein. Im folgenden Beispiel wird ein nullfs-Mount genutzt, auf den nur Lesezugriff erlaubt ist.

Das Layout des Dateisystems wird in der folgenden Liste beschrieben:

  • Jede Jail wird unterhalb des /home/j-Verzeichnisses gemountet.

  • /home/j/mroot ist die Vorlage für jede Jail und die nur lesbare Partition für alle Jails.

  • Unterhalb von /home/j wird für jede Jail ein leeres Verzeichnis angelegt.

  • Jede Jail bekommt ein /s-Verzeichnis, das zum read/write-Teilbereich des Systems verlinkt wird.

  • Jede Jail bekommt ihr eigenes read/write-System, das auf /home/j/skel basiert.

  • Jeder Jailbereich (genauer der read/write-Teilbereich jeder Jail) wird in /home/js erstellt.

Anmerkung: Es wird angenommen, dass die Jails sich unterhalb des /home Verzeichnisses befinden. Dieser Ort kann von Ihnen natürlich geändert werden. Allerdings müssen die Pfade in den folgenden Beispielen dann entsprechend angepasst werden.


16.6.1.2. Erstellen der Vorlage

Dieser Abschnitt beschreibt die Schritte, die zum Erstellen der Hauptvorlage (die den nur lesbaren Bereich für alle weiteren Jails darstellt) notwendig sind.

Es ist immer eine gute Idee, FreeBSD auf den aktuellen -RELEASE-Zweig zu aktualisieren. Lesen Sie das entsprechende Kapitel des Handbuchs für Informationen zu diesem Thema. Selbst wenn Sie auf eine Aktualisierung des Betriebssystems verzichten, müssen Sie dennoch ein buildworld durchführen, um fortfahren zu können. Außerdem müssen Sie das Paket sysutils/cpdup installiert sein. In diesem Beispiel wird portsnap(8) verwendet, um die aktuelle FreeBSD Ports-Sammlung herunterzuladen. Der Abschnitt Portsnap des Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv einsetzen.

  1. Zuerst erstellen wir eine Verzeichnissstruktur für das read-only-Dateisystem, das die FreeBSD-Binärdateien für unsere Jails enthalten wird. Anschließend wechseln wir in den FreeBSD-Quellcodebaum und installieren das read-only-Dateisystem in die (Vorlage-)Jail.

    # mkdir /home/j /home/j/mroot
    # cd /usr/src
    # make installworld DESTDIR=/home/j/mroot
    
  2. Als nächstes bereiten wir die Ports-Sammlung fü die Jails vor und kopieren den FreeBSD Quellcodebaum in die Jail, da dieser für mergemaster benötigt wird:

    # cd /home/j/mroot
    # mkdir usr/ports
    # portsnap -p /home/j/mroot/usr/ports fetch extract
    # cpdup /usr/src /home/j/mroot/usr/src
    
  3. Danach wird die Struktur für den read/write-Bereich des Systems erstellt:

    # mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
    # mv etc /home/j/skel
    # mv usr/local /home/j/skel/usr-local
    # mv tmp /home/j/skel
    # mv var /home/j/skel
    # mv root /home/j/skel
    
  4. Nutzen Sie mergemaster, um fehlende Konfigurationsdateien zu installieren. Anschließend werden die von mergemaster erstellten Extra-Verzeichnisse entfernt:

    # mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
    # cd /home/j/skel
    # rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev
    
  5. Nun wird das read/write-Dateisystem mit dem read-only-Dateisystem verlinkt. Bitte vergewissern Sie sich, dass die symbolischen Links an den korrekten s/ Positionen erstellt werden. Echte Verzeichnisse oder an falschen Positionen erstellte Verzeichnisse lassen die Installation fehlschlagen.

    # cd /home/j/mroot
    # mkdir s
    # ln -s s/etc etc
    # ln -s s/home home
    # ln -s s/root root
    # ln -s ../s/usr-local usr/local
    # ln -s ../s/usr-X11R6 usr/X11R6
    # ln -s ../../s/distfiles usr/ports/distfiles
    # ln -s s/tmp tmp
    # ln -s s/var var
    
  6. Zuletzt erstellen Sie eine allgemeine /home/j/skel/etc/make.conf mit folgendem Inhalt:

    WRKDIRPREFIX?=  /s/portbuild
    

    Ein gesetztes WRKDIRPREFIX erlaubt es, die FreeBSD-Ports innerhalb jeder Jail zu kompilieren. Das Ports-Verzeichnis ist Teil des read-only System. Der angepasste Pfad des WRKDIRPREFIX macht es möglich, innerhalb des read/write-Bereichs der Jail Ports zu bauen.


16.6.1.3. Jails erstellen

Da nun eine komplette FreeBSD-Jailvorlage vorliegt, sind wir nun in der Lage, Jails einrichten und in /etc/rc.conf zu konfigurieren. Dieses Beispiel zeigt das Erstellen von drei Jails: “NS”, “MAIL” und “WWW”.

  1. Fügen Sie die folgenden Zeilen in /etc/fstab ein, damit die read-only-Vorlage und der read/write-Bereich für alle Jails verfügbar sind:

    /home/j/mroot   /home/j/ns     nullfs  ro  0   0
    /home/j/mroot   /home/j/mail   nullfs  ro  0   0
    /home/j/mroot   /home/j/www    nullfs  ro  0   0
    /home/js/ns     /home/j/ns/s   nullfs  rw  0   0
    /home/js/mail   /home/j/mail/s nullfs  rw  0   0
    /home/js/www    /home/j/www/s  nullfs  rw  0   0
    

    Anmerkung: Mit der Pass-Nummer 0 markierte Partitionen werden beim Booten des Systems nicht von fsck(8) geprüft, mit 0 als Dump-Nummer markierte Partitonen werden von dump(8) nicht gesichert. Wir wollen nicht, dass fsck unsere nullfs-Mounts prüft oder dass dump die nur lesbaren nullfs-Mounts unserer Jails sichert. Deshalb werden diese Bereiche in den letzten beiden Spalten der obenstehenden fstab mit “0 0” markiert.

  2. Konfigurieren Sie die Jails in /etc/rc.conf:

    jail_enable="YES"
    jail_set_hostname_allow="NO"
    jail_list="ns mail www"
    jail_ns_hostname="ns.example.org"
    jail_ns_ip="192.168.3.17"
    jail_ns_rootdir="/usr/home/j/ns"
    jail_ns_devfs_enable="YES"
    jail_mail_hostname="mail.example.org"
    jail_mail_ip="192.168.3.18"
    jail_mail_rootdir="/usr/home/j/mail"
    jail_mail_devfs_enable="YES"
    jail_www_hostname="www.example.org"
    jail_www_ip="62.123.43.14"
    jail_www_rootdir="/usr/home/j/www"
    jail_www_devfs_enable="YES"
    

    Warnung: Der Grund dafür, dass die Variablen jail_name_rootdir nach /usr/home statt nach /home zeigen, liegt darin, dass der physikalische Pfad des /home-Verzeichnisses unter FreeBSD /usr/home lautet. Die Variable jail_name_rootdir darf im Pfad aber keinen symbolischen Link enthalten, weil das Jail ansonsten nicht gestartet werden kann. Verwenden Sie realpath(1), um den korrekten Wert für diese Variable zu bestimmen. Weitere Informationen finden Sie im Security Advisory FreeBSD-SA-07:01.jail.

  3. Erstellen Sie die notwendigen Mountpunkte für die nur lesbaren Bereiche jeder Jail:

    # mkdir /home/j/ns /home/j/mail /home/j/www
    
  4. Installieren Sie die read/write-Vorlage in jede Jail. Benutzen Sie hierfür sysutils/cpdup, welches es erleichtert, eine korrekte Kopie jedes Verzeichnisses zu erstellen:

    # mkdir /home/js
    # cpdup /home/j/skel /home/js/ns
    # cpdup /home/j/skel /home/js/mail
    # cpdup /home/j/skel /home/js/www
    
  5. An dieser Stelle werden die Jails erstellt und fü den Betrieb vorbereitet. Zuerst mounten Sie die notwendigen Dateisysteme für jede Jail und starten diese dann mit dem Skript /etc/rc.d/jail:

    # mount -a
    # /etc/rc.d/jail start
    

Die Jails sollten nun laufen. Um zu prüfen, ob sie korrekt gestartet wurden, verwenden Sie jls(8). Nach dem Aufruf dieses Befehls sollten Sie eine Ausgabe ähnlich der folgenden erhalten:

# jls
   JID  IP Address      Hostname                      Path
     3  192.168.3.17    ns.example.org                /home/j/ns
     2  192.168.3.18    mail.example.org              /home/j/mail
     1  62.123.43.14    www.example.org               /home/j/www

An diesem Punkt sollte es möglich sein, sich an jeder Jail anzumelden, Benutzer anzulegen und Dienste zu konfigurieren. Die Spalte JID gibt die Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie den folgenden Befehl, um administrative Aufgaben in der Jail mit der JID 3 durchzuführen:

# jexec 3 tcsh

16.6.1.4. Jails aktualisieren

Mit der Zeit wird es notwendig sein, das System auf eine neuere Version von FreeBSD zu aktualisieren. Zum einen aus Sicherheitsgründen, zum anderen, um neu eingeführte Funktionen nutzen zu können, die für die bestehenden Jails sinnvoll sind. Das Design dieses Aufbaus bietet einen einfachen Weg, bestehende Jails zu aktualisieren. Zudem reduziert es die Downtime, da die Jails erst im allerletzten Schritt gestoppt werden müssen. Außerdem bietet es die Möglichkeit, zu älteren Versionen zurückzukehren, falls irgendwelche Probleme auftreten.

  1. Im ersten Schritt wird das Host-System aktualisiert. Anschließend wird eine temporäre neue read-only Vorlage /home/j/mroot2 erstellt.

    # mkdir /home/j/mroot2
    # cd /usr/src
    # make installworld DESTDIR=/home/j/mroot2
    # cd /home/j/mroot2
    # cpdup /usr/src usr/src
    # mkdir s
    

    Der installworld-Durchlauf erzeugt einige unnötige Verzeichnisse, die nun entfernt werden sollten:

    # chflags -R 0 var
    # rm -R etc var root usr/local tmp
    
  2. Erzeugen Sie neue symbolische Links für das Hauptdateisystem:

    # ln -s s/etc etc
    # ln -s s/root root
    # ln -s s/home home
    # ln -s ../s/usr-local usr/local
    # ln -s ../s/usr-X11R6 usr/X11R6
    # ln -s s/tmp tmp
    # ln -s s/var var
    
  3. Nun ist es an der Zeit, die Jails zu stoppen:

    # /etc/rc.d/jail stop
    
  4. Unmounten des originalen Dateisystems:

    # umount /home/j/ns/s
    # umount /home/j/ns
    # umount /home/j/mail/s
    # umount /home/j/mail
    # umount /home/j/www/s
    # umount /home/j/www
    

    Anmerkung: Die read/write-Systeme sind an das read-only System angehängt (/s), das daher zuerst ausgehängt werden muss.

  5. Verschieben Sie das alte read-only-Dateisystem und ersetzen Sie es durch das neue Dateisystem. Das alte Dateisystem kann so als Backup dienen, falls etwas schief geht. Die Namensgebung entspricht hier derjenigen bei der Erstellung eines neuen read-only-Dateisystems. Verschieben Sie die originale FreeBSD Ports-Sammlung in das neue Dateisystem, um Platz und Inodes zu sparen:

    # cd /home/j
    # mv mroot mroot.20060601
    # mv mroot2 mroot
    # mv mroot.20060601/usr/ports mroot/usr
    
  6. Nun ist die neue read-only-Vorlage fertig. Sie müssen daher nur noch die Dateisysteme erneut mounten und die Jails starten:

    # mount -a
    # /etc/rc.d/jail start
    

Nutzen Sie jls(8) um zu prüfen, ob die Jails korrekt gestartet wurden. Vergessen Sie nicht, innerhalb jeder Jail mergemaster laufen zu lassen. Die Konfigurationsdateien müssen (ebenso wie die rc.d-Skripten) aktualisiert werden.


Kapitel 17. Verbindliche Zugriffskontrolle

Written by Tom Rhodes. Übersetzt von Benjamin Lukas.

17.1. Übersicht

In FreeBSD 5.X wurden neue Sicherheits-Erweiterungen verfügbar, die aus dem TrustedBSD-Projekt übernommen wurden und auf dem Entwurf POSIX.1e basieren. Die beiden bedeutendsten neuen Sicherheits-Mechanismen sind Berechtigungslisten (Access Control Lists, ACL) und die verbindliche Zugriffskontrolle (Mandatory Access Control, MAC). Durch die MAC können Module geladen werden, die neue Sicherheitsrichtlinien bereitstellen. Mit Hilfe einiger Module kann beispielsweise ein eng umgrenzter Bereich des Betriebssystems gesichert werden, indem die Sicherheitsfunktionen spezieller Dienste unterstützt bzw. verstärkt werden. Andere Module wiederum betreffen in ihrer Funktion das gesamte System - alle vorhandenen Subjekte und Objekte. Das "Verbindliche" in der Namensgebung erwächst aus dem Fakt, dass die Kontrolle allein Administratoren und dem System obliegt und nicht dem Ermessen der Nutzer, wie es mit Hilfe der benutzerbestimmbaren Zugriffskontrolle (Discrectionary Access Control / DAC), dem Zugriffstandard für Dateien, gar der System V IPC in FreeBSD, normalerweise umgesetzt wird.

Dieses Kapitel wird sich auf die Grundstruktur der Verbindlichen Zugriffskontrolle und eine Auswahl der Module, die verschiedenste Sicherheitsfunktionen zur Verfügung stellen, konzentrieren.

Beim Durcharbeiten dieses Kapitels erfahren Sie:

  • Welche MAC Module für Sicherheitsrichtlinien derzeit in FreeBSD eingebettet sind und wie die entsprechenden Mechanismen funktionieren.

  • Was die einzelnen MAC Module an Funktionen realisieren und auch, was der Unterschied zwischen einer Richtlinie, die mit Labels arbeitet, und einer, die ohne Labels arbeitet, ist.

  • Wie Sie die MAC in ein System einbetten und effizient einrichten.

  • Wie die verschiedenen Richtlinienmodule einer MAC konfiguriert werden.

  • Wie mit einer MAC und den gezeigten Beispielen eine sicherere Umgebung erstellt werden kann.

  • Wie die Konfiguration einer MAC auf korrekte Einrichtung getestet wird.

Vor dem Lesen dieses Kapitels sollten Sie bereits:

  • Grundzüge von UNIX und FreeBSD verstanden haben. (Kapitel 4).

  • Mit den Grundzügen der Kernelkonfiguration und -kompilierung vertraut sein (Kapitel 9).

  • Einige Vorkenntnisse über Sicherheitskonzepte im Allgemeinen und deren Umsetzung in FreeBSD im Besonderen mitbringen (Kapitel 15).

Warnung: Der unsachgemäße Gebrauch der in diesem Kapitel enthaltenen Informationen kann den Verlust des Systemzugriffs, Ärger mit Nutzern oder die Unfähigkeit, grundlegende Funktionen des X-Windows-Systems zu nutzen, verursachen. Wichtiger noch ist, dass man sich nicht allein auf die MAC verlassen sollte, um ein System zu sichern. Die MAC verbessert und ergänzt lediglich die schon existierenden Sicherheits-Richtlinien - ohne eine gründliche und fundierte Sicherheitspraxis und regelmäßige Sicherheitsprüfungen wird Ihr System nie vollständig sicher sein.

Außerdem sollte angemerkt werden, dass die Beispiele in diesem Kapitel auch genau dasselbe sein sollen, nämlich Beispiele. Es wird nicht empfohlen, diese bestimmten Beispiele auf einem Arbeitssystem umzusetzen. Das Einarbeiten der verschiedenen Sicherheitsmodule erfordert eine Menge Denkarbeit und viele Tests. Jemand, der nicht versteht, wie diese Module funktionieren, kann sich schnell darin wiederfinden, dass er (oder sie) das ganze System durchforsten und viele Dateien und Verzeichnisse neu konfigurieren muß.


17.1.1. Was in diesem Kapitel nicht behandelt wird

Dieses Kapitel behandelt einen großen Teil sicherheitsrelevanter Themen, bezogen auf die Verbindliche Zugriffskontrolle (MAC). Die gegenwärtige Entwicklung neuer MAC Module ist nicht abgedeckt. Einige weitere Module, die im MAC Framework enthalten sind, haben besondere Charakteristika, die zum Testen und Entwickeln neuer Module gedacht sind. Dies sind unter anderem mac_test(4), mac_stub(4) und mac_none(4). Für weitere Informationen zu diesen Modulen und den entsprechend angebotenen Funktionen lesen Sie bitte die Manpages.


17.2. Schlüsselbegriffe

Bevor Sie weiterlesen, müssen noch einige Schlüsselbegriffe geklärt werden. Dadurch soll jegliche auftretende Verwirrung von vornherein beseitigt und die plötzliche Einführung neuer Begriffe und Informationen vermieden werden.

  • Verbund: Ein Verbund ist ist ein Satz von Programmen und Daten, die speziell und zusammen abgeschottet wurden, um Nutzern Zugriff auf diese ausgewiesenen Systembereiche zu gewähren. Man kann sagen, ein solcher Verbund ist eine Gruppierung, ähnlich einer Arbeitsgruppe, einer Abteilung, einem Projekt oder einem Thema. Durch die Nutzung von Verbünden (compartments) kann man Sicherheitsrichtlinien erstellen, die alles notwendige Wissen und alle Werkzeuge zusammenfassen.

  • Hochwassermarkierung: Eine solche Richtlinie erlaubt die Erhöhung der Sicherheitsstufe in Abhängigkeit der Klassifikation der gesuchten bzw. bereitzustellenden Information. Normalerweise wird nach Abschluss des Prozesses die ursprüngliche Sicherheitsstufe wieder hergestellt. Derzeit enthält die MAC Grundstruktur keine Möglichkeit, eine solche Richtlinie umzusetzen, der Vollständigkeit halber ist die Definition hier jedoch aufgeführt.

  • Integrität: Das Schlüsselkonzept zur Klassifizierung der Vertraulichkeit von Daten nennt man Integrität. Je weiter die Integrität erhöht wird, umso mehr kann man den entsprechenden Daten vertrauen.

  • Label: Ein Label ist ein Sicherheitsmerkmal, welches mit Dateien, Verzeichnissen oder anderen Elementen im System verbunden wird. Man sollte es wie einen Vertraulichkeitsstempel auffassen, der Dateien angehört wie beispielsweise die Zugriffszeit, das Erstellungsdatum oder auch der Name; sobald Dateien derart gekennzeichnet werden, bezeichnen diese Label die sicherheitsrelevanten Eigenschaften. Zugriff ist nur noch dann möglich, wenn das zugreifende Subjekt eine korrespondierende Kennzeichnung trägt. Die Bedeutung und Verarbeitung der Label-Werte ist von der Einrichtung der Richtlinie abhängig: Während einige Richtlinien das Label zum Kennzeichnen der Vertraulichkeit oder Geheimhaltungsstufe eines Objekts nutzen, können andere Richtlinien an derselben Stelle Zugriffsregeln festschreiben.

  • Level: Eine erhöhte oder verminderte Einstellung eines Sicherheitsmerkmals. Wenn das Level erhöht wird, wird auch die ensprechende Sicherheitsstufe angehoben.

  • Niedrigwassermarkierung: Eine solche Richtlinie erlaubt das Herabstufen des Sicherheitslevels, um weniger sensible Daten verfügbar zu machen. In die meisten Fällen wird das ursprüngliche Sicherheitslevel des Nutzers wiederhergestellt, sobald der Vorgang abgeschlossen ist. Das einzige Modul in FreeBSD, welches von dieser Richtlinie Gebrauch macht, ist mac_lomac(4).

  • Multilabel: Die Eigenschaft multilabel ist eine Dateisystemoption, die entweder im Einzelbenutzermodus mit Hilfe des Werkzeugs tunefs(8), während des Bootvorgangs in der Datei fstab(5) oder aber beim Erstellen einen neues Dateisystems aktiviert werden kann. Diese Option erlaubt einem Administrator, verschiedenen Objekten unterschiedliche Labels zuzuordnen - kann jedoch nur zusammen mit Modulen angewendet werden, die auch tatsächlich mit Labels arbeiten.

  • Objekt: Ein Objekt oder auch Systemobjekt ist theoretisch eine Einheit, durch welche Information fließt, und zwar unter der Lenkung eines Subjektes. Praktisch schliesst diese Definition Verzeichnisse, Dateien, Felder, Bildschirme, Tastaturen, Speicher, Bandlaufwerke, Drucker und jegliche anderen Datenspeicher- oder -verarbeitungsgeräte ein. Im Prinzip ist ein Objekt ein Datenkontainer oder eine Systemressource - Zugriff auf ein Objekt bedeutet, auf Daten zuzugreifen.

  • Richtlinie: Eine Sammlung von Regeln, die definiert, wie Zielvorgaben umgesetzt werden, nennt man Richtlinie. Eine Richtlinie dokumentiert normalerweise, wie mit bestimmten Elementen umgegangen wird. Dieses Kapitel faßt den Begriff in diesem Kontext als Sicherheitsrichtlinie auf; als eine Sammlung von Regeln, die den Fluß von Daten und Informationen kontrolliert und die gleichzeitig definiert, wer auf diese Daten und Informationen zugreifen darf.

  • Anfälligkeit: Dieser Begriff wird normalerweise verwendet, wenn man über MLS (Multi Level Security) spricht. Das Anfälligkeits-Level beschreibt, wie wichtig oder geheim die Daten sein sollen. Um so höher das Anfälligkeits-Level, um so wichtiger die Geheimhaltung bzw. Vertraulichkeit der Daten.

  • Einzel-Label: Von einem Einzel-Label spricht man, wenn für ein ganzes Dateisystem lediglich ein einziges Label verwendet wird, um Zugriffskontrolle über den gesamten Datenfluss zu erzwingen. Sobald diese Option verwendet wird - und das ist zu jeder Zeit, wenn die Option multilabel nicht explizit gesetzt wurde - sind alle Dateien und Verzeichnisse mit dem gleichen Label gekennzeichnet.

  • Subjekt: Ein Subjekt ist jedwede Einheit, die Information in Fluss zwischen Objekten bringt: Zum Beispiel ein Nutzer, ein Nutzerprozessor, ein Systemprozeß usw. In FreeBSD handelt es sich meistens um einen Thread, der als Prozeß im Namen eines Nutzers arbeitet.


17.3. Erläuterung

Mit all diesen neuen Begriffen im Kopf können wir nun überlegen, wie die Möglichkeiten der verbindlichen Zugriffskontrolle (MAC) die Sicherheit eines Betriebssystems als Ganzes erweitern. Die verschiedenen Module, die durch die MAC bereitgestellt werden, können verwendet werden, um das Netzwerk oder Dateisysteme zu schützen, Nutzern den Zugang zu bestimmten Ports oder Sockets zu verbieten und vieles mehr. Die vielleicht beste Weise, die Module zu verwenden, ist, sie miteinander zu kombinieren, indem mehrere Sicherheitsrichtlinienmodule gleichzeitig eine mehrschichtige Sicherheitsumgebung schaffen. Das ist etwas anderes als singuläre Richtlinien wie zum Beispiel die Firewall, die typischerweise Elemente eines Systems stabilisiert, das nur für einen speziellen Zweck verwendet wird. Der Verwaltungsmehraufwand ist jedoch von Nachteil, zum Beispiel durch die Verwendung von mehreren Labels oder dem eigenhändigen Erlauben von Netzwerkzugriffen für jeden einzelnen Nutzer.

Solche Nachteile sind allerdings gering im Vergleich zum bleibenden Effekt der erstellten Struktur. Die Möglichkeit zum Beispiel, für konkrete Anwendungen genau die passenden Richtlinien auszuwählen und einzurichten, senkt gleichzeitig die Arbeitskosten. Wenn man unnötige Richtlinien aussortiert, kann man die Gesamtleistung des Systems genauso steigern wie auch eine höhere Anpassungsfähigkeit gewährleisten. Eine gute Umsetzung der MAC beinhaltet eine Prüfung der gesamten Sicherheitsanforderungen und einen wirksamen Einsatz der verschiedenen Module.

Ein System, auf dem eine MAC verwendet wird, muß zumindest garantieren, dass einem Nutzer nicht gestattet wird, Sicherheitsmerkmale nach eigenem Ermessen zu verändern; dass Arbeitswerkzeuge, Programme und Skripte, innerhalb der Beschränkungen arbeiten können, welche die Zugriffsregeln der ausgewählten Module dem System auferlegen; und dass die volle Kontrolle über die Regeln der MAC beim Administrator ist und bleibt.

Es ist die einsame Pflicht des zuständigen Administrators, die richtigen Module sorgfältig auszuwählen. Einige Umgebungen könnten eine Beschränkung der Zugriffe über die Netzwerkschnittstellen benötigen - hier wären die Module mac_portacl(4), mac_ifoff(4) und sogar mac_biba(4) ein guter Anfang. In anderen Fällen muß man sehr strenge Vertraulichkeit von Dateisystemobjekten gewährleisten - dafür könnte man mac_bsdextended(4) oder mac_mls(4) einsetzen.

Die Entscheidung, welche Richtlinien angewandt werden, kann auch anhand der Netzwerk-Konfiguration getroffen werden. Nur bestimmten Benutzern soll erlaubt werden, via ssh(1) auf das Netzwerk oder Internet zuzugreifen - mac_portacl(4) wäre eine gute Wahl. Aber für was entscheidet man sich im Falle eines Dateisystems? Soll der Zugriff auf bestimmte Verzeichnisse von spezifischen Nutzern oder Nutzergruppen separiert werden? Oder wollen wir den Zugriff durch Nutzer oder Programme auf spezielle Dateien einschränken, indem wir gewisse Objekte als geheim einstufen?

Der Zugriff auf Objekte kann einigen vertraulichen Nutzern gestattet werden, anderen wiederum verwehrt. Als Beispiel sei hierzu ein großes Entwicklerteam angeführt, das in kleine Gruppen von Mitarbeitern aufgeteilt wurde. Die Entwickler von Projekt A dürfen nicht auf Objekte zugreifen, die von den Entwicklern von Projekt B geschrieben wurden. Sie müssen aber trotzdem auf Objekte zugreifen können, die von einem dritten Entwicklerteam geschaffen wurden - alles in allem eine verzwickte Situation. Wenn man die verschiedenen Module der MAC richtig verwendet, können Anwender in solche Gruppen getrennt und ihnen der Zugriff zu den gewünschten Systemobjekten gestattet werden - ohne Angst haben zu müssen, dass Informationen in die falschen Hände geraten.

So hat jedes Modul, das eine Sicherheitsrichtlinie verfügbar macht, einen eigenen Weg, die Sicherheit des Systems zu verstärken. Die Auswahl der Module sollte auf einem gut durchdachten Sicherheitskonzept gründen. In vielen Fällen muß das gesamte Konzept eines Systems überarbeitet und neu eingepflegt werden. Ein guter Überblick über die Möglichkeiten der verschiedenen von der MAC angebotenen Module hilft einem Administrator, die besten Richtlinien für seine spezielle Situation auszuwählen.

Im FreeBSD-Standardkernel ist die Option zur Verwendung der MAC nicht enthalten. Daher muß die Zeile

options      MAC

der Kernelkonfiguration hinzugefügt und der Kernel neu übersetzt und installiert werden.

Achtung: Verschiedenen Anleitungen für die MAC empfehlen, die einzelnen Module direkt in den Kernel einzuarbeiten. Dabei ist es jedoch möglich, das System aus dem Netzwerk auszusperren oder gar schlimmeres. Die Arbeit mit der MAC ist ähnlich der Arbeit mit einer Firewall - man muß, wenn man sich nicht selbst aus dem System aussperren will, genau aufpassen. Man sollte sich eine Möglichkeit zurechtlegen, wie man eine Implementation einer MAC rückgängig machen kann - genauso wie eine Ferninstallation über das Netzwerk nur mit äußerster Vorsicht vorgenommen werden sollte. Es wird daher empfohlen, die Module nicht in den Kernel einzubinden, sondern sie beim Systemstart via /boot/loader.conf zu laden.


17.4. MAC Labels verstehen

MAC Label sind Sicherheitsmerkmale, die, wenn sie zum Einsatz kommen, allen Subjekten und Objekten im System zugeordnet werden.

Wenn ein Administrator ein solches Merkmal bzw. Attribut setzen will, muß er/sie verstehen können, was da genau passiert. Die Attribute, die im speziellen Fall zu vergeben sind, hängen vom geladenen Modul und den darin jeweils implementierten Richtlinien ab. Jedes dieser Richtlinienmodule setzt die Arbeit mit seinen entsprechenden Attributen in individueller Weise um. Falls der Nutzer nicht versteht, was er da konfiguriert, oder auch, was seine Konfiguration für Begleiterscheinungen mit sich bringt, ergibt sich meist als Resultat ein unerwartetes, ja sogar unerwünschtes Verhalten des gesamten Systems.

Ein Label, einem Objekt verliehen, wird verwendet, um anhand einer Richtlinie eine sicherheitsrelevante Entscheidung über Zugriffsrechte zu fällen. In einigen Richtlinien enthält bereits das Label selbst alle dafür nötigen Informationen. Andere Richtlinien verwenden diese Informationen, um zunächst ein komplexes Regelwerk abzuarbeiten.

Wenn man zum Beispiel einer Datei das Attribut biba/low zuordnet, wird dieses durch das Biba Sicherheitsrichtlinienmodul, und zwar mit dem Wert “low”, verarbeitet.

Einige der Richtlinienmodule, die die Möglichkeit zum Vergeben von Labels unter FreeBSD unterstützen, bieten drei vordefinierte Labels an. Dieses nennen sich “high”, “low” und “equal”. Obwohl die verschiedenen Module die Zugriffskontrolle auf verschiedene Weisen regeln, kann man sich sicher sein, das das “low”-Label der untersten, unsichersten Einstellung entspricht, das “equal”-Label die Verwendung des Moduls für das jeweilige Objekt oder Subjekt deaktiviert - und das “high”-Label die höchstmögliche Einstellung erzwingt. Im Speziellen gilt diese Aussage für die Richtlinien(-module) MLS und Biba.

In den meisten Umgebungen, sogenannten Single Label Environments, wird Objekten nur ein einzelnes Label zugewiesen. Dadurch wird nur ein Regelsatz für die Zugriffskontrolle auf das gesamte System verwendet - und das ist meistens auch tatsächlich ausreichend. Es gibt wenige Fälle, in denen mehrere Labels auf Dateisystemobjekte oder -subjekte verwendet werden. In einem solchen Fall muß das Dateisystem mit der tunefs(8)-Option multilabel angepaßt werden, da single label die Standardeinstellung ist.

Bei der Verwendung von Biba oder MLS kann man numerische Labels vergeben, die genau das Level angeben, an welcher Stelle in der Hierarchie das Subjekt oder Objekt einzuordnen ist. Dieses numerische Level wird verwendet, um Informationen in verschiedene Gruppen aufzuteilen oder zu sortieren - damit zum Beispiel nur Subjekte, die zu einer gewissen Vertraulichkeitsstufe gehören, Zugang zu einer Gruppe von Objekten erhalten.

In den meisten Fällen wird ein Administrator nur ein einzelnes Label für das gesamte Dateisystem verwenden.

Moment mal, dass ist doch dasselbe wie DAC! Ich dachte, MAC würde die Kontrolle strengstens an den Administrator binden! Diese Aussage hält immer noch stand  - root ist derjenige, der die Kontrolle ausübt und die Richtlinie konfiguriert, so dass Nutzer in die entsprechenden, angemessenen Kategorien / Zugriffsklassen eingeordnet werden. Nunja, einige Module schränken root selbst ein. Die Kontrolle über Objekte wird dann einer Gruppe zugewiesen, jedoch hat root die Möglichkeit, die Einstellungen jederzeit zu widerrufen oder zu ändern. Dies ist das Hierarchie/Freigabe-Modell, das durch Richtlinien wie MLS oder Biba bereitgestellt wird.


17.4.1. Konfigurieren der Labels

Gewissermaßen alle Aspekte der Labelkonfiguration werden durch Werkzeuge das Basissystems umgesetzt. Die entsprechenden Kommandos bieten eine einfache Schnittstelle zum Konfigurieren, Manipulieren und auch Verifizieren der gekennzeichneten Objekte.

Mit den beiden Kommandos setfmac(8) und setpmac(8) kann man eigentlich schon alles machen. Das Kommando setfmac wird verwendet, um ein MAC-Label auf einem Systemobjekt zu setzen, setpmac hingegen zum Setzen von Labels auf Systemsubjekte. Als Beispiel soll hier dienen:

# setfmac biba/high test

Wenn bei der Ausführung dieses Kommandos keine Fehler aufgetreten sind, gelangt man zur Eingabeaufforderung zurück. Nur wenn ein Fehler auftritt, verhalten sich diese Kommandos nicht still, ganz wie auch die Kommandos chmod(1) und chown(8). In einigen Fällen wird dieser Fehler “Permission denied” lauten und gewöhnlich dann auftreten, wenn ein Label an einem Objekt angebracht oder verändert werden soll, das bereits (Zugriffs-)Beschränkungen unterliegt.[11] Der Systemadministrator kann so eine Situation mit Hilfe der folgenden Kommandos überwinden:

# setfmac biba/high testPermission denied# setpmac biba/low setfmac biba/high test
# getfmac test
test: biba/high

Wie wir hier sehen, kann setpmac verwendet werden, um die vorhandene Einstellungen zu umgehen, indem dem gestarteten Prozeß ein anderes, valides Label zugeordnet wird. Das Werkzeug getpmac wird normalerweise auf gerade laufende Prozesse angewendet. Ähnlich sendmail: Als Argument wird statt eines Kommandos eine eine Prozeß-ID übergeben, es verbirgt sich doch dieselbe Logik dahinter. Wenn ein Nutzer versucht, eine Datei zu verändern, auf die er keinen Zugriff hat, entsprechend der Regeln eines geladenen Richtlinienmoduls, wird der Fehler “Operation not permitted” durch die Funktion mac_set_link angezeigt.


17.4.1.1. Übliche Typen von Labeln

Wenn man die Module mac_biba(4), mac_mls(4) und mac_lomac(4) verwendet, hat man die Möglichkeit, einfache Label zu vergeben. Diese nennen sich high, low und equal. Es folgt eine kurze Beschreibung, was diese Labels bedeuten:

  • Das Label low ist definitionsgemäß das niedrigeste Label, das einem Objekt oder Subjekt verliehen werden kann. Wird es gesetzt, kann die entsprechende Entität nicht mehr auf Entitäten zugreifen, die das Label high tragen.

  • Das Label equal wird Entitäten verliehen, die von der Richtlinie ausgenommen sein sollen.

  • Das Label high verleiht einer Entität die höchstmögliche Einstellung.

Unter Beachtung jedes einzelnen Richtlinienmoduls moduliert und beschränkt jede dieser Einstellungen den Informationsfluß unterschiedlich. Genaue Erklärungen zu den Charakteristika der einfachen Labels in den verschiedenen Modulen finden sich im entsprechenden Unterabschnitt dieses Kapitels oder in den Manpages.


17.4.1.1.1. Fortgeschrittene Label-Konfiguration

Numerische klassifizierte Labels werden verwendet in der Form Klasse:Verbund+Verbund. Demnach ist das Label

biba/10:2+3+6(5:2+3-15:2+3+4+5+6)

folgendermaßen zu lesen:

“Biba Policy Label”/“effektive Klasse 10” :“Verbund 2,3 und 6”: (“Low-Klasse 5:...”- “High-Klasse 15:...”)

In diesem Beispiel ist die erstgenannte Klasse als “effektive Klasse” zu bezeichnen. Ihr werden die “effektiven Verbünde” zugeordnet. Die zweite Klasse ist die “Low”-Klasse und die letzte die “high”-Klasse. Die allermeisten Konfigurationen kommen ohne die Verwendungen von solchen Klassen aus, nichtsdestotrotz kann man sie für erweiterte Konfigurationen verwenden.

Sobald sie auf Systemsubjekte angewendet werden, haben diese eine gegenwärtige Klasse/Verbund- Konfiguration und diese muß im definierten Rahmen gegebenenfalls angepaßt (erhöht oder gesenkt) werden. Im Gegensatz dazu haben Systemobjekte alle eingestellten (effektive, High- und Low-Klasse) gleichzeitig. Dies ist notwendig, damit auf Sie von den Systemsubjekten in den verschiedenen Klassen gleichzeitig zugegriffen werden kann.

Die Klasse und und die Verbünde in einem Subjekt-Objekt-Paar werden zum Erstellen einer sogenannten Dominanz-Relation verwendet, in welcher entweder das Subjekt das Objekt, das Objekt das Subjekt, keines das andere dominiert oder sich beide gegenseitig dominieren. Der Fall, dass sich beide dominieren, tritt dann ein, wenn die beiden Labels gleich sind. Wegen der Natur des Informationsflusses in Biba kann man einem Nutzer Rechte für einen Reihe von Abteilungen zuordnen, die zum Beispiel mit entsprechenden Projekten korrespondieren. Genauso können aber auch Objekten mehrere Abteilungen zugeordnet sein. Die Nutzer müssen eventuell ihre gegenwärtigen Rechte mithilfe von su or setpmac anpassen um auf Objekte in einer Abteilung zuzugreifen, zu der sie laut ihrer effektiven Klasse nicht berechtigt sind.


17.4.1.2. Nutzer- und Label-Einstellungen

Nutzer selbst brauchen Labels damit ihre Dateien und Prozesse korrekt mit der Sicherheitsrichtlinie zusammenarbeitet, die für das System definiert wurde. Diese werden in der Datei login.conf durch die Verwendung von Login- Klassen zugeordnet. Jedes Richtlinienmodul, das Label verwendet, arbeitet mit diesen Login-Klassen.

Beispielhaft wird der folgende Eintrag, der für jede Richtlinie eine Einstellung enthält, gezeigt:

default:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:

Die Label-Option in der letzten Zeile legt fest, welches Standard-Label für einen Nutzer erzwungen wird. Nutzern darf niemals gestattet werden, diese Werte selbst zu verändern, demnach haben Nutzer in dieser Beziehung auch keine Wahlfreiheit. In einer richtigen Konfiguration jedoch wird kein Administrator alle Richtlinienmodule aktivieren wollen. Es wird an dieser Stelle ausdrücklich empfohlen, dieses Kapitel zu Ende zu lesen, bevor irgendein Teil dieser Konfiguration ausprobiert wird.

Anmerkung: Nutzer können ihr eigenes Label nach dem Loginvorgang durchaus ändern. Jedoch kann diese Änderung nur unter den Auflagen der gerade gültigen Richtlinie geschehen. Im Beispiel oben wird für die Biba-Richtlinie eine minimale Prozeßintegrität von 5, eine maximale von 15 angegeben, aber die Voreinstellung des tatsächlichen Labels ist 10. Der Nutzerprozeß läuft also mit einer Integrität von 10 bis das Label verändert wird, zum Beispiel durch eine Anwendung des Kommandos setpmac, welches jedoch auf den Bereich eingeschränkt wird, der zum Zeitpunkt des Logins angegeben wurde, in diesem Fall von 5 bis 15.

Nach einer Änderung der Datei login.conf muß in jedem Fall die Befähigungsdatenbank mit dem Kommando cap_mkdb neu erstellt werden - und das gilt für alle im weiteren Verlauf gezeigten Beispiele und Diskussionspunkte.

Es ist nützlich anzumerken, dass viele Einsatzorte eine große Anzahl von Nutzern haben, die wiederum viele verschiedenen Nutzerklassen angehören sollen. Hier ist eine Menge Planungsarbeit notwendig, da die Verwaltung sehr unübersichtlich und schwierig ist.


17.4.1.3. Netzwerkschnittstellen und die zugehörigen Label

Labels können auch, wenn man sie an Netzwerkschittstellen vergibt, helfen, den Datenfluß durch das Netzwerk zu kontrollieren. Das funktioniert in allen Fällen genau so wie mit Objekten. Nutzer, die in der Biba-Richtlinie das Label high tragen, dürfen nicht auf Schnittstellen zugreifen, die low markiert sind usw.

Die Option maclabel wird via ifconfig übergeben. Zum Beispiel

# ifconfig bge0 maclabel biba/equal

belegt die Schnittstelle bge(4) mit dem MAC Label biba/equal. Wenn eine komplexe Einstellung wie biba/high(low-high) verwendet wird, muß das gesamte Label in Anführungszeichen geschrieben werden, da sonst eine Fehlermeldung zurückgegeben wird.

Jedes Richtlinienmodul, das die Vergabe von Labels unterstützt, stellt einen Parameter bereit, mit dem das MAC Label für Netzwerkschnittstellen deaktiviert werden kann. Das Label der Netzwerkschnittstelle auf equal zu setzen, führt zum selben Ergebnis. Beachten Sie die Ausgabe von sysctl, die Manpages der verschiedenen Richtlinien oder eben die Informationen, die im weiteren Verlauf dieses Kapitels angeboten werden, um mehr zu diesen Parametern zu erfahren.


17.4.2. Single- oder Multilabel?

Als Standardeinstellung verwendet das System die Option single label. Was bedeutet das für den Administrator? Es gibt einige Unterschiede zwischen single label und multilabel. In ihrer ureigenen Weise bieten beide Vor- und Nachteile bezogen auf die Flexibilität bei der Modellierung der Systemsicherheit.

Die Option single label gibt jedem Subjekt oder Objekt genau ein einziges Label, zum Beispiel biba/high. Mit dieser Option hat man einen geringeren Verwaltungsaufwand, aber die Flexibilität beim Einsatzes von Richtlinien ist ebenso gering. Viele Administratoren wählen daher auch die Option multilabel im Sicherheitsmodell, wenn die Umstände es erfordern.

Die Option multilabel gestattet, jedem einzelnen Subjekt oder Objekt seine eigenen unabhängigen Label zu zuzuordnen. Die Optionen multilabel und singlelabel betreffen jedoch nur die Richtlinien, die Labels als Leistungsmerkmal verwenden, einschließlich der Richtlinien Biba, Lomac, MLS und SEBSD.

Wenn Richtlinien benutzt werden sollen, die ohne Labels auskommen, wird die Option multilabel nicht benötigt. Dies betrifft die Richtlinien seeotheruids, portacl und partition.

Man sollte sich dessen bewußt sein, dass die Verwendung der Option multilabel auf einer Partition und die Erstellung eines Sicherheitsmodells auf der Basis der FreeBSD multilevel Funktionalität einen hohen Verwaltungsaufwand bedeutet, da alles im Dateisystem ein Label bekommt. Jedes Verzeichnis, jede Datei und genauso jede Schnittstelle.

Das folgende Kommando aktiviert multilabel für ein Dateisystem. Dies funktioniert nur im Einzelbenutzermodus:

# tunefs -l enable /

In einer Swap-Partition wird dies nicht benötigt.

Anmerkung: Falls Sie Probleme beim Setzen der Option multilabel auf der Root-Partition bemerken, lesen Sie bitte Abschnitt 17.17 dieses Kapitels.


17.5. Planung eines Sicherheitsmodells

Wann immer eine neue Technologie eingepflegt werden soll, ist es wichtig, vorher einen Plan zu erstellen. In den verschiedenen Etappen der Planung sollte der Administrator nie das “Große Ganze” aus den Augen verlieren und mindestens die folgenden Punkte beachten:

  • Die Anforderungen

  • Die Ziele

Wenn Sie MAC verwenden möchten, sind das im Besonderen folgende Punkte:

  • Wie werden Informationen und Ressourcen auf den Zielsystemen klassifiziert?

  • Welche Arten von Informationen bzw. Ressourcen sollen im Zugang beschränkt sein und welche Art Einschränkung soll verwendet werden?

  • Welche(s) MAC Modul(e) wählt man, um sein Ziel zu erreichen?

Es ist immer möglich, die Einstellungen des Systems und der Systemressourcen im Nachhinein zu “optimieren”. Es ist aber wirklich lästig, das gesamte Dateisystem zu durchsuchen, um Dateien oder Benutzerkonten zu reparieren. Eine gute Planung hilft dem Administrator, sich einer sorgenfreien und effizienten Umsetzung eines Sicherheitsmodells zu versichern. Testlauf des Sicherheitsmodells vor dem Einsatz in seiner richtigen Arbeitsumgebung ist auf jeden Fall empfehlenswert. Die Idee, ein System mit einer MAC einfach loslaufen zu lassen, ist wie direkt auf einen Fehlschlag hinzuarbeiten.

Jede Umgebung hat ihre eigenen Anforderungen. Ein tiefgreifendes und vollständiges Sicherheitsprofil zu erstellen spart weitere Änderungen, nachdem das System in Betrieb genommen wurde. Also werden die folgenden Abschnitte die verschiedenen Module vorstellen, die den Administratoren zur Verfügung gestellt werden, die Nutzung und Konfiguration der einzelnen Module beschreiben; und in einigen Fällen Einblicke gewähren, für welche Situationen welche Module besonders geeignet sind. Zum Beispiel ein Webserver kann von der Verwendung der mac_biba(4) oder der mac_bsdextended(4) Richtlinie profitieren. In anderen Fällen, an einem Rechner mit nur wenigen lokalen Benutzern, ist die mac_partition(4) die Richtlinie der Wahl.


17.6. Modulkonfiguration

Jedes Modul, das in der MAC enthalten ist, kann entweder direkt in den Kernel eingefügt werden oder als Kernelmodul in der Laufzeit des Systems geladen werden. Empfohlen wird, den Modulnamen in der Datei /boot/loader.conf anzufügen, so dass das Modul am Anfang des Bootvorgangs eingebunden wird.

Die folgenden Abschnitte werden verschiedene MAC Module und ihre jeweiligen Vor- und Nachteile vorstellen. Außerdem wird erklärt, wie sie in bestimmte Umgebungen eingearbeitet werden können. Einige Module unterstützen die Verwendung von Labels, das heißt Zugriffskontrolle durch hinzufügen einer Kennzeichnung in der Art von “dieses ist erlaubt, jenes aber nicht”. Eine Label-Konfigurationdatei kontrolliert unter anderem, wie auf Dateien zugegriffen oder wie über das Netzwerk kommuniziert werden darf. Im vorangehenden Abschnitt wurde bereits erläutert, wie die Option multilabel auf Dateisysteme angewendet wird, um eine Zugriffskontrolle auf einzelne Dateien oder ganze Dateisysteme zu konfigurieren.

Eine single label Konfiguration erzwingt ein einzelnes Label für das gesamte System. Daher wird die tunefs-Option multilabel genannt.


17.7. Das MAC Modul seeotheruids

Modulename: mac_seeotheruids.ko

Parameter in der Kernelkonfiguration: options MAC_SEEOTHERUIDS

Bootparameter: mac_seeotheruids_load="YES"

Das Modul mac_seeotheruids(4) erweitert die sysctl-Variablen security.bsd.see_other_uids und security.bsd.see_other_gids. Diese Optionen benötigen keine im Vorhinein zu setzenden Labels und können leicht durchschaubar mit den anderen MAC-Modulen zusammenarbeiten.

Nachdem das Modul geladen wurde, können die folgenden sysctl Variablen verwendet werden.

  • security.mac.seeotheruids.enabled dient zur Aktivierung des Moduls, zunächst mit den Standardeinstellungen. Diese verhindern, dass Nutzer Prozesse und Sockets sehen können, die ihnen nicht selbst gehöen.

  • security.mac.seeotheruids.specificgid_enabled kann eine spezifizierte Nutzergruppe von dieser Richtlinie ausnehmen. Die entsprechende Gruppe muß an den Parameter security.mac.seeotheruids.specificgid=XXX übergeben werden, wobei XXX die ID der Gruppe ist, die von der Richtlinie ausgenommen werden soll.

  • security.mac.seeotheruids.primarygroup_enabled kann verwendet werden, um eine spezifische, primäre Nutzergruppe von der Richtlinie auszuschliessen. Dieser Parameter und security.mac.seeotheruids.specificgid_enabled schließen einander aus.




17.8. Das MAC Modul bsdextended

Modulname: mac_bsdextended.ko

Parameter in der Kernelkonfiguration: options MAC_BSDEXTENDED

Bootparameter: mac_bsdextended_load="YES"

Das Modul mac_bsdextended(4) erstellt eine Firewall für das Dateisystem und ist eine Erweiterung des sonst üblichen Rechtemodells. Es erlaubt einem Administrator einen Regelsatz zum Schutz von Dateien, Werkzeugen und Verzeichnissen in der Dateisystemhierarchie zu erstellen, der einer Firewall ähnelt. Sobald auf ein Objekt im Dateisystem zugegriffen werden soll, wird eine Liste von Regel abgearbeitet, bis eine passende Regel gefunden wird oder die Liste zu Ende ist. Das Verhalten kann durch die Änderung des sysctl(8) Parameters security.mac.bsdextended.firstmatch_enabled eingestellt werden. Ähnlich wie bei den anderen Firewallmodulen in FreeBSD wird eine Datei erstellt, welche die Zugriffsregeln enthält. Diese wird beim Systemstart durch eine Variable in rc.conf(5) eingebunden.

Der Regelsatz kann mit dem Programm ugidfw(8) eingepflegt werden, welches eine Syntax bereitstellt, die der von ipfw(8) gleicht. Weitere Werkzeuge können auch selbst erstellt werden, indem die Funktionen der Bibliothek libugidfw(3) verwendet werden.

Bei der Arbeit mit diesem Modul ist äußerste Vorsicht geboten - falscher Gebrauch kann den Zugriff auf Teile des Dateisystems komplett unterbinden.


17.8.1. Beispiele

Nachdem das Modul mac_bsdextended(4) erfolgreich geladen wurde, zeigt das folgende Kommando die gegenwärtig aktiven Regeln an:

# ugidfw list 0 slots, 0 rules

Wie erwartet, sind keine Regeln definiert. Das bedeutet, das auf alle Teile des Dateisystems zugegriffen werden kann. Um eine Regel zu definieren, die jeden Zugriff durch Nutzer blockiert und nur die Rechte von root unangetastet läßt, muß lediglich dieses Kommando ausgeführt werden:

# ugidfw add subject not uid root new object not uid root mode n

Das ist allerdings keine gute Idee, da nun allen Nutzern der Zugriff auf selbst die einfachsten Programme wie ls untersagt wird. Angemessener wäre etwas wie:

# ugidfw set 2 subject uid user1 object uid user2 mode n
# ugidfw set 3 subject uid user1 object gid user2 mode n

Diese Befehle bewirken, dass user1 keinen Zugriff mehr auf Dateien und Programme hat, die user2 gehören. Dies schließt das Auslesen von Verzeichniseinträgen ein.

Anstelle uid user1 könnte auch not uid user2 als Parameter übergeben werden. Dies würde diesselben Einschränkungen für alle Nutzer bewirken anstatt nur einen einzigen.

Anmerkung: root ist von diesen Einstellungen nicht betroffen.

Dies sollte als Überblick ausreichen, um zu verstehen, wie das Modul mac_bsdextended(4) helfen kann, das Dateisystem abzuschotten. Weitere Informationen bieten die Manpages mac_bsdextended(4) und ugidfw(8).


17.9. Das MAC Modul ifoff

Modulname: mac_ifoff.ko

Parameter für die Kernelkonfiguration: options MAC_IFOFF

Bootparameter: mac_ifoff_load="YES"

Das Modul mac_ifoff(4) ist einzig dazu da, Netzwerkschnittstellen im laufenden Betrieb zu deaktivieren oder zu verhindern, das Netzwerkschnittstellen während der Bootphase gestartet werden. Dieses Modul benötigt für seinen Betrieb weder Labels, die auf dem System eingerichtet werden müssen, noch hat es Abhängigkeiten zu anderen MAC Modulen.

Der größte Teil der Kontrolle geschieht über die im folgenden aufgelisteten sysctl-Parameter:

  • security.mac.ifoff.lo_enabled schaltet den gesamten Netzwerkverkehr auf der Loopback-Schnittstelle lo(4) an bzw. aus.

  • security.mac.ifoff.bpfrecv_enabled macht das Gleiche für den Berkeley Paket Filter bpf(4).

  • security.mac.ifoff.other_enabled schaltet den Verkehr für alle anderen Netzwerkschnittstellen.

Die wahrscheinlich häufigste Nutzung von mac_ifoff(4) ist die Überwachung des Netzwerks in einer Umgebung, in der kein Netzwerkverkehr während des Bootvorgangs erlaubt werden soll. Eine andere mögliche Anwendung wäre ein Script, das mit Hilfe von security/aide automatisch alle Schnittstellen blockiert, sobald Dateien in geschützten Verzeichnissen angelegt oder verändert werden.


17.10. Das MAC Modul portacl

Modulname: mac_portacl.ko

Parameter für die Kernelkonfiguration: options MAC_PORTACL

Bootparameter: mac_portacl_load="YES"

Mit Hilfe des Moduls mac_portacl(4) können die Anbindungen an die lokalen TCP und UDP Ports durch eine Vielzahl von sysctl Variablen beschränkt werden. Genauer gesagt ermöglicht mac_portacl(4) Nutzern ohne root-Rechten den Zugriff auf zu bestimmende privilegierte Ports, also denen innerhalb der ersten 1024.

Sobald das Modul geladen wurde, ist die Richtlinie für alle Sockets verfügbar. Die folgenden Variablen können für die Konfiguration verwendet werden:

  • security.mac.portacl.enabled schaltet die Anwendung der Richtlinie ein oder aus.

  • security.mac.portacl.port_high gibt den höchsten Port an, der von der Richtlinie mac_portacl(4) betroffen sein soll.

  • security.mac.portacl.suser_exempt nimmt, wenn es einen Wert ungleich Null zugewiesen bekommt, root von der Richtlinie aus.

  • security.mac.portacl.rules enthält als Wert die eigentliche mac_portacl Richtlinie.

Die eigentliche Konfiguration der mac_portacl Richtlinie wird der sysctl-Variablen security.mac.portacl.rules als Zeichenkette der Form rule[,rule,...] übergeben. Jede einzelne Regel hat die Form idtype:id:protocol:port. Der Parameter idtype ist entweder uid oder gid und wird verwendet, um den Parameter id als Nutzer-ID oder Gruppen-ID zu kennzeichnen. Der Parameter protocol gibt an, ob die Regel ür TCP oder UDP gelten soll (indem man den Wert auf tcp oder udp setzt). Und der letzte Parameter, port, enthält die Nummer des Ports, auf den der angegebene Nutzer bzw. die angegebene Gruppe Zugriff erhalten soll.

Anmerkung: Da der Regelsatz direkt vom Kernel ausgewertet wird, können nur Zahlenwerte übergeben werden. Das heißt, Namen von Nutzern, Gruppen oder Dienstnamen aus der Datei /etc/services funktionieren nicht.

Auf UNIX-artigen Betriebssystemen sind die Ports kleiner 1024 privilegierten Prozessen vorbehalten, müssen also mit als/von root gestartet werden und weiterhin laufen. Damit mac_portacl(4) die Vergabe von Ports kleiner als 1024 an nicht privilegierte Prozesse übernehmen kann, muß die UNIX Standardeinstellung deaktiviert werden. Dazu ändert man die sysctl(8) Variablen net.inet.ip.portrange.reservedlow und net.inet.ip.portrange.reservedhigh auf den Wert “0”.

Weiterführende Informationen entnehmen Sie bitte den unten aufgeführten Beispielen oder der Man-Page mac_portacl(4)!


17.10.1. Beispiele

Die folgenden Beispiele sollten ein wenig Licht in die obige Diskussion bringen:

# sysctl security.mac.portacl.port_high=1023
# sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0

Zunächst bestimmen wir, dass mac_portacl(4) für alle privilegierten Ports gelten soll und deaktivieren die normale UNIX-Beschränkung.

# sysctl security.mac.portacl.suser_exempt=1

Da root von dieser Richtlinie nicht beeinträchtigt werden soll, setzen wir hier security.mac.portacl.suser_exempt auf einen Wert ungleich Null. Das Modul mac_portacl(4) ist nun so eingerichtet, wie es UNIX-artige Betriebssysteme normal ebenfalls tun.

# sysctl security.mac.portacl.rules=uid:80:tcp:80

Nun erlauben wir dem Nutzer mit der UID 80, normalerweise dem Nutzer www, den Port 80 zu verwenden. Dadurch kann der Nutzer www einen Webserver betreiben, ohne dafür mit root-Privilegien ausgestattet zu sein.

# sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995

Hier wird dem Nutzer mit der UID 1001 erlaubt, die TCP Ports 110 (“pop3”) und 995 (“pop3s”) zu verwenden. Dadurch kann dieser Nutzer einen Server starten, der Verbindungen an diesen beiden Ports annehmen kann.


17.11. Das MAC Modul partition

Modulname: mac_partition.ko

Parameter für die Kernelkonfiguration: options MAC_PARTITION

Bootparameter mac_partition_load="YES"

Die Richtlinie mac_partition(4) setzt Prozesse in spezielle “Partitionen”, entsprechend dem zugewiesenen MAC Label. Man kann sich das vorstellen wie eine spezielle Art jail(8), auch wenn das noch kein wirklich guter Vergleich ist.

Es wird empfohlen, dieses Modul durch einen Eintrag in loader.conf(5) zu aktivieren, so dass die Richtlinie während des Bootvorganges eingebunden wird.

Der Großteil der Konfiguration geschieht mit dem Kommando setpmac(8), wie gleich erklärt wird. Außerdem gibt es folgenden sysctl Parameter für diese Richtlinie.

  • security.mac.partition.enabled erzwingt die Verwendung von MAC Prozeß-Partitionen.

Sobald diese Richtlinie aktiv ist, sehen Nutzer nur noch ihre eigenen Prozesse, und alle anderen Prozesse, die ebenfalls derselben Prozeß-Partition zugeordnet sind. Sie können jedoch nicht auf Prozesse oder Werkzeuge außerhalb des Anwendungsbereich dieser Partition zugreifen. Das bedeutet unter anderem, das ein Nutzer, der einer Klasse insecure zugeordnet ist, nicht auf das Kommando top zugreifen kann - wie auch auf viele anderen Befehle, die einen eigenen Prozeß erzeugen.

Um einen Befehl einer Prozeß-Partition zuzuordnen, muß dieser durch das Kommando setpmac mit einem Label versehen werden:

# setpmac partition/13 top

Diese Zeile fügt das Kommando top dem Labelsatz für Nutzer der Klasse insecure hinzu, sofern die Partition 13 mit der Klasse insecure übereinstimmt. Beachten Sie, dass alle Prozesse, die von Nutzern dieser Klasse erzeugt werden, das Label partition/13 erhalten, und dieses auch nicht durch den Nutzer geändert werden kann.


17.11.1. Beispiele

Der folgende Befehl listet die vergebenen Label für Prozeß-Partitionen und die laufenden Prozesse auf.

# ps Zax

Das nächste Kommando liefert das Label der Prozeß-Partition eines anderen Nutzers trhodes und dessen gegenwärtig laufenden Prozesse zurück.

# ps -ZU trhodes

Anmerkung: Jeder Nutzer kann die Prozesse in der Prozeß-Partition von root betrachten, solange nicht die Richtlinie mac_seeotheruids(4) geladen wurde.

Eine ausgefeilte Umsetzung dieser Richtlinie deaktiviert alle Dienste in /etc/rc.conf und startet diese dann später durch ein Skript, das jedem Dienst das passende Label zuordnet.

Anmerkung: Die folgenden Richtlinien verwenden Zahlenwerte anstatt der drei Standardlabels. Diese Optionen, und ihre Grenzen, werden in den zugehörigen Manpages genauer erklärt.


17.12. Das MAC Modul Multi-Level Security

Modulname: mac_mls.ko

Parameter für die Kernelkonfiguration: options MAC_MLS

Bootparameter: mac_mls_load="YES"

Die Richtlinie mac_mls(4) kontrolliert die Zugriffe zwischen Subjekten und Objekten, indem sie den Informationsfluß strengen Regeln unterwirft.

In MLS Umgebungen wird jedem Subjekt oder Objekt ein “Freigabe”-Level zugeordnet, und diese werden wiederum zu einzelnen Verbünden zusammengefaßt. Da diese Freigabe- oder Anfälligkeits-Level Zahlen größer 6000 erreichen können, ist es für jeden Systemadministrator eine undankbare Aufgabe, jede Entität von Grund auf zu konfigurieren. Zum Glück gibt es 3 “instant” Labels, die in der Richtlinie zur Anwendung bereit stehen.

Diese drei Labels heißen mls/low, mls/equal und mls/high. Da sie in den Manpages mac_mls(4) ausführlich beschrieben werden, gibt es hier nur einen kurzen Abriß:

  • Das Label mls/low ist eine niedrige Einstellung, die von allen anderen dominiert werden darf. Alles, was mit mls/low versehen wird, hat ein niedriges Freigabe-Level und darf auf keine Informationen zugreifen, denen ein höheres Freigabe-Level zugeordnet wurde. Einem Objekt mit diesem Label kann außerdem keine Information durch ein Objekt höherer Freigabe übergeben werden, es kann also auch nicht durch solche Objekte editiert oder überschrieben werden.

  • Das Label mls/equal wird an Objekte vergeben, die von dieser Richtlinie ausgenommen werden sollen.

  • Das Label mls/high verkörpert das höchstmögliche Freigabe-Level. Objekte, denen dieses Label zugeordnet wird, dominieren alle anderen Objekte des Systems. Trotzdem können sie Objekten mit einem niedrigeren Freigabe-Level keine Informationen zuspielen.

MLS bietet:

  • Eine hierarchische Sicherheitsschicht und Zuordnung nichthierarchischer Kategorien;

  • Feste Regeln: kein “Read-Up”, kein “Write-Down” (ein Subjekt kann nur Objekte gleicher oder niedrigerer Stufe lesen, und es kann nur Objekte gleicher oder höherer Stufe schreiben);

  • Geheimhaltung (indem unangemessene Offenlegung von Daten verhindert wird);

  • Eine Basis zum Entwerfen von Systemen, die Daten verschiedener Vertraulichkeitsebenen gleichzeitig handhaben sollen (ohne das geheime und vertrauliche Informationen untereinander ausgetauscht werden können).

Nachfolgend werden die sysctl-Variablen vorgestellt, die für die Einrichtung spezieller Dienste und Schnittstellen vorhanden sind.

  • security.mac.mls.enabled schaltet die Richtlinie MLS ein (oder aus).

  • security.mac.mls.ptys_equal sorgt dafür, dass während der Initialisierung alle pty(4)-Geräte als mls/equal gekennzeichnet werden.

  • security.mac.mls.revocation_enabled sorgt dafür, dass die Zugriffsrechte von Objekten wieder zurückgesetzt werden, nachdem deren Label vorübergehend auf ein niedrigeres Freigabe-Level geändert wurde.

  • security.mac.mls.max_compartments gibt die maximale Anzahl von Verbünden an. Im Prinzip ist es die höchste Nummer eines Verbundes auf dem System.

Um die Labels der MLS Richtlinie zu bearbeiten verwendet man setfmac(8). Um ein Objekt zu kennzeichnen, benutzen Sie folgendes Kommando:

# setfmac mls/5 test

Um das MLS-Label der Datei test auszulesen, verwenden Sie dieses Kommando:

# getfmac test

Dies ist eine Zusammenstellung der Merkmale von test. Ein anderer Ansatz ist, für diese Richtlinie eine Konfigurationsdatei in /etc abzulegen, die alle Informationen enthält und mit der dann das Kommando setfmac gefüttert wird. Diese Vorgehensweise wird erklärt, nachdem alle Richtlinien vorgestellt wurden.


17.12.1. Verbindlicher Vertraulichkeit in der Planungsphase

Mit dem Richtlinienmodul Multi-Level Security bereitet sich ein Administrator darauf vor, den Fluß vertraulicher Informationen zu kontrollieren. Beim Starten der Richtlinie ist immer mls/low voreingestellt - alles kann auf alles zugreifen. Der Administrator ändert dies während der eigentlichen Konfiguration, indem er die Vertraulichkeit bestimmter Objekte erhöht.

Jenseits der drei Grundeinstellungen des Labels kann der Administrator einzelne Nutzer oder Nutzergruppen nach Bedarf zusammenschließen und den Informationsaustausch zwischen diesen gestatten oder unterbinden. Es ist sicher eine Vereinfachung, die Freigabe-Level mit Begriffen wie vertraulich, geheim oder streng geheim zu bezeichnen. Einige Administratoren erstellen einfach verschiedene Gruppen auf der Ebene von gegenwärtigen Projekten. Ungeachtet der Herangehensweise bei der Klassifizierung muß ein gut durchdachter Plan existieren, bevor eine derart einengende Richtlinie umgesetzt wird.

Exemplarisch für die Anwendung dieses Moduls bzw. dieser Richtlinie seien angeführt:

  • Ein E-Commerce Webserver

  • Ein Dateiserver, der vertrauliche Informationen einer Firma oder eines Konzerns speichert

  • Umgebungen in Finanzeinrichtungen

Der unsinnigste Einsatzort für diese Richtlinie wäre ein Arbeitsplatzrechner mit nur zwei oder drei Benutzern.


17.13. Das MAC Modul Biba

Modulname: mac_biba.ko

Parameter für die Kernelkonfiguration: options MAC_BIBA

Bootparameter: mac_biba_load="YES"

Das Modul mac_biba(4) lädt die MAC Biba Richtlinie. Diese ähnelt stark der MLS Richtlinie, nur das die Regeln für den Informationsfluß ein wenig vertauscht sind. Es wird in diesem Fall der absteigende Fluß sicherheitskritischer Information geregelt, während die MLS Richtlinie den aufsteigenden Fluß regelt. In gewissen Sinne treffen dieses und das vorangegangene Unterkapitel also auf beide Richtlinien zu.

In einer Biba-Umgebung wird jedem Subjekt und jedem Objekt ein “Integritäts”-Label zugeordnet. Diese Labels sind in hierarchischen Klassen und nicht-hierarchischen Komponenten geordnet. Je höher die Klasse, um so höher die Integrität.

Die unterstützten Labels heißen biba/low, biba/equal und biba/high. Sie werden im Folgenden erklärt:

  • biba/low ist die niedrigste Stufe der Integrität, die einem Objekt verliehen werden kann. Wenn sie einem Objekt oder Subjekt zugeordnet wird, kann dieses auf Objekte oder Subjekte, die biba/high markiert wurden, zwar lesend zugreifen, nicht jedoch schreibend.

  • Das Label biba/equal ist, wie der aufmerksame Leser sicherlich schon ahnt, für die Ausnahmen dieser Richtlinie gedacht und sollte nur diesen Ausnahmen entsprechenden Objekten verliehen werden.

  • biba/high markierte Subjekte und Objekte können Objekte niedrigerer Stufe schreiben , nicht jedoch lesen. Es wird empfohlen, dass dieses Label an Objekte vergeben wird, die sich auf Integrität des gesamten Systems auswirken.

Biba stellt bereit:

  • Hierarchische Integritätsstufen mit einem Satz nichthierarchischer Integritätskategorien;

  • Festgeschriebene Regeln: kein “Write-Up”, kein “Read-Down” (der Gegensatz zu MLS - ein Subjekt erhält schreibenden Zugriff auf Objekte gleicher oder geringerer Stufe, aber nicht bei höherer, und lesenden Zugriff bei gleicher Stufe oder höerer, aber nicht bei niedrigerer);

  • Integrität (es wird die Echtheit der Daten gewährleistet, indem unangemessene Veränderungen verhindert werden);

  • Eine Abstufung der Gewährleistung (im Gegensatz zu MLS, bei der eine Abstufung der Vertraulichkeit vorgenommen wird).



Folgende sysctl Parameter werden zur Nutzung der Biba-Richtlinie angeboten:

  • security.mac.biba.enabled zum Aktivieren/Deaktivieren der Richtlinie auf dem Zielsystem.

  • security.mac.biba.ptys_equal wird verwendet, um die Biba-Richtlinie auf der pty(4)-Schnittstelle zu deaktivieren.

  • security.mac.biba.revocation_enabled erzwingt das Zurücksetzen des Labels, falls dieses zeitweise geändert wurde um ein Subjekt zu dominieren.

Um Einstellungen der Biba Richtlinie für Systemobjekte zu verändern werden die Befehle setfmac und getfmac verwendet:

# setfmac biba/low test
# getfmac test
test: biba/low

17.13.1. Verbindliche Integrität in der Planungsphase

Integrität garantiert, im Unterschied zu Sensitivität, dass Informationen nur durch vertraute Parteien verändert werden können. Dies schließt Informationen ein, die zwischen Subjekten ausgetauscht werden, zwischen Objekt, oder auch zwischen den beiden. Durch Integrität wird gesichert, das Nutzer nur Informationen verändern, oder gar nur lesen können, die sie explizit benötigen.

Das Modul mac_biba(4) eröffnet einem Administrator die Möglichkeit zu bestimmen, welche Dateien oder Programme ein Nutzer oder eine Nutzergruppe sehen bzw. aufrufen darf. Gleichzeitig kann er zusichern, dass dieselben Programme und Dateien frei von Bedrohungen sind und das System die Echtheit gewährleistet - für diesen Nutzer oder die Nutzergruppe.

Während der anfänglichen Phase der Planung muß der Administrator vorbereitet sein, Nutzer in Klassen, Stufen und Bereiche einzuteilen. Der Zugriff auf Dateien und insbesondere auch Programme wird verhindert sowohl vor als auch nachdem sie gestartet wurden. Das System selbst erhält als Voreinstellung das Label biba/high sobald das Modul aktiviert wird - und es liegt allein am Administrator, die verschiedenen Klassen und Stufen für die einzelnen Nutzer zu konfigurieren. Anstatt mit Freigaben zu arbeiten, wie weiter oben gezeigt wurde, könnte man auch Überbegriffe für Projekte oder Systemkomponenten entwerfen. Zum Beispiel, ausschließlich Entwicklern den Vollzugriff auf Quellcode, Compiler und Entwicklungswerkzeuge gewähren, während man andere Nutzer in Kategorien wie Tester, Designer oder einfach nur “allgemeiner Nutzer” zusammenfaßt, die für diese Bereiche lediglich lesenden Zugriff erhalten sollen.

Mit seinem ursprünglichen Sicherheits-Standpunkt ist ein Subjekt niedrigerer Integrität unfähig, ein Subjekt höherer Integrität zu verändern. Ein Subjekt höherer Integrität kann ein Subjekt niedrigerer Integrität weder beobachten noch lesen. Wenn man ein Label für die niedrigstmögliche Klasse erstellt, kann man diese allen Subjekten verwehren. Einige weitsichtig eingerichtete Umgebungen, die diese Richtlinie verwenden, sind eingeschränkte Webserver, Entwicklungs- oder Test-Rechner oder Quellcode-Sammlungen. Wenig sinnvoll ist diese Richtlinie auf einer Arbeitsstation, oder auf Rechnern die als Router oder Firewall verwendet werden.


17.14. Das MAC Modul LOMAC

Modulname: mac_lomac.ko

Parameter für die Kernelkonfiguration: options MAC_LOMAC

Bootparameter: mac_lomac_load="YES"

Anders als die Biba Richtlinie erlaubt die mac_lomac(4) Richtlinie den Zugriff auf Objekte niedrigerer Integrität nur, nachdem das Integritätslevel gesenkt wurde. Dadurch wird eine Störung derIntegritätsregeln verhindert.

Die MAC Version der “Low-Watermark” Richtlinie, die nicht mit der älteren lomac(4)-Implementierung verwechselt werden darf, arbeitet fast genauso wie Biba. Anders ist, dass hier “schwebende” Label verwendet werden, die ein Herunterstufen von Subjekten durch Hilfsverbünde ermöglichen. Dieser zweite Verbund wird in der Form [auxgrade] angegeben und sollte in etwa aussehen wie lomac/10[2], wobei die Ziffer zwei (2) hier den Hilfsverbund abbildet.

Die MAC Richtlinie LOMAC beruht auf einer durchgängigen Etikettierung aller Systemobjekte mit Integritätslabeln, die Subjekten das Lesen von Objekten niedriger Integrität gestatten und dann das Label des Subjektes herunterstufen - um zukünftige Schreibvorgänge auf Objekte hoher Integrität zu unterbinden. Dies ist die Funktion der Option [auxgrade], die eben vorgestellt wurde. Durch sie erhält diese Richtlinie eine bessere Kompatibilität und die Initialisierung ist weniger aufwändig als bei der Richtlinie Biba.


17.14.1. Beispiele

Wie schon bei den Richtlinien Biba und MLS werden die Befehle setfmac und setpmac verwendet, um die Labels an den Systemobjekten zu setzen:

# setfmac /usr/home/trhodes lomac/high[low]
# getfmac /usr/home/trhodes lomac/high[low]

Beachten Sie, dass hier der Hilfswert auf low gesetzt wurde - dieses Leistungsmerkmal ist nur in der MAC LOMAC Richtlinie enthalten.


17.15. Beispiel 1: Nagios in einer MAC Jail

Die folgende Demonstration setzt eine sichere Umgebung mithilfe verschiedener MAC Module und sorgfältig konfigurierter Richtlinien um. Es handelt sich jedoch nur um einen Test und sollte nicht als Antwort auf jedes Problem in Fragen Sicherheit gesehen werden. Eine Richtlinie nur umzusetzen und dann einfach laufen zu lassen, funktioniert nie und kann eine echte Arbeitsumgebung in eine Katastrophe stürzen.

Bevor es losgeht, muß jedes Dateisystem mit der Option multilabel, wie weiter oben beschrieben, markiert werden. Dies nicht zu tun, führt zu Fehlern. Außerdem müssen die Ports net-mngt/nagios-plugins, net-mngt/nagios und www/apache13 installiert und konfiguriert sein, so dass sie ordentlich laufen.


17.15.1. Erstellen einer Nutzerklasse insecure

Beginnen wir die Prozedur mit dem Hinzufügen einer Nutzerklasse in der Datei /etc/login.conf:

insecure:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin--
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=biba/10(10-10):


Zusätzlich fügen wir beim Standardnutzer folgende Zeile hinzu:

:label=biba/high:

Anschließend muß die Datenbank neu erstellt werden:

# cap_mkdb /etc/login.conf

17.15.2. Boot-Konfiguration

Starten Sie den Rechner noch nicht neu. Fügen Sie zunächst noch die folgenden Zeilen in die Datei /boot/loader.conf ein, damit die benötigten Module während des Systemstarts geladen werden:

mac_biba_load="YES"
mac_seeotheruids_load="YES"

17.15.3. Nutzer einrichten

Ordnen Sie den Superuser root der Klasse default zu:

# pw usermod root -L default

Alle Nutzerkonten, die weder root noch Systemkonten sind, brauchen nun eine Loginklasse, da sie sonst keinen Zugriff auf sonst übliche Befehle erhalten, wie bspw. vi(1). Das folgende sh Skript wird diese Aufgabe erledigen:

# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \
      /etc/passwd`; do pw usermod $x -L default; done;

Verschieben Sie die Nutzer nagios und www in die insecure Klasse:

# pw usermod nagios -L insecure
# pw usermod www -L insecure

17.15.4. Die Kontextdatei erstellen

Nun muß eine Kontextdatei erstellt werden. Die folgende Beispieldatei soll dazu in /etc/policy.contexts gespeichert werden:

# This is the default BIBA policy for this system.

# System:
/var/run                        biba/equal
/var/run/*                      biba/equal

/dev                            biba/equal
/dev/*                          biba/equal

/var      			biba/equal
/var/spool                      biba/equal
/var/spool/*                    biba/equal

/var/log                        biba/equal
/var/log/*                      biba/equal

/tmp      			biba/equal
/tmp/*      			biba/equal
/var/tmp   	    		biba/equal
/var/tmp/*      		biba/equal

/var/spool/mqueue      	        biba/equal
/var/spool/clientmqueue     	biba/equal

# For Nagios:
/usr/local/etc/nagios
/usr/local/etc/nagios/*         biba/10

/var/spool/nagios               biba/10
/var/spool/nagios/*             biba/10

# For apache
/usr/local/etc/apache           biba/10
/usr/local/etc/apache/*         biba/10

Die Richtlinie erzwingt Sicherheit, indem der Informationsfluß Einschränkungen unterworfen wird. In der vorliegenden Konfiguration kann kein Nutzer, weder root noch andere, auf Nagios zugreifen. Konfigurationsdateien und die Prozesse, die Teil von Nagios sind, werden durch unsere MAC vollständig abgegrenzt.

Die Kontextdatei kann nun vom System eingelesen werden, indem folgender Befehl ausgeführt wird:

# setfmac -ef /etc/policy.contexts /
# setfmac -ef /etc/policy.contexts /

Anmerkung: Das obenstehende Dateisystem-Layout kann, je nach Umgebung, sehr unterschiedlich aussehen. Außerdem muß es auf jedem einzelnen Dateisystem ausgeführt werden.

In die Datei /etc/mac.conf müssen nun noch diese Änderungen eingetragen werden:

default_labels file ?biba
default_labels ifnet ?biba
default_labels process ?biba
default_labels socket ?biba

17.15.5. Netzwerke einbinden

Tragen Sie die folgende Zeile in die Datei /boot/loader.conf ein:

security.mac.biba.trust_all_interfaces=1

Und das Folgende gehört in Datei rc.conf zu den Optionen für die Netzwerkkarte. Falls die Netzwerkverbindung(-en) via DHCP konfiguriert werden, muß man dies nach jedem Systemstart eigenhändig nachtragen:

maclabel biba/equal

17.15.6. Testen der Konfiguration

Versichern Sie sich, dass der Webserver und Nagios nicht automatisch geladen werden und starten Sie den Rechner neu. Prüfen Sie nun, ob root wirklich keinen Zugriff auf die Dateien im Konfigurationsverzeichnis von Nagios hat. Wenn root den Befehl ls(1) auf /var/spool/nagios ausführen kann, ist irgendwas schief gelaufen. Es sollte ein “permission denied” Fehler ausgegeben werden.

Wenn alles gut aussieht, können Nagios, Apache und Sendmail gestartet werden - allerdings auf eine Weise, die unserer Richtlinie gerecht wird. Zum Beispiel durch die folgenden Kommandos:

# cd /etc/mail && make stop && \
setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \
setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart

Versichern Sie sich lieber doppelt, dass alles ordentlich läuft. Wenn nicht, prüfen Sie die Logs und Fehlermeldungen. Verwenden Sie das sysctl(8) Werkzeug um die Sicherheitsrichtlinie sysctl(8) zu deaktivieren und versuchen Sie dann alles noch einmal zu starten.

Anmerkung: Der Superuser kann den Vollzug der Richtlinie schalten und die Konfiguration ohne Furcht verändern. Folgender Befehl stuft eine neu gestartete Shell herunter:

# setpmac biba/10 csh

Um dies zu vermeiden, werden die Nutzer durch login.conf(5) eingeschränkt. Wenn setpmac(8) einen Befehl außerhalb der definierten Schranken ausführen soll, wird ein Fehler zurückgeliefert. In so einem Fall muß root auf biba/high(high-high) gesetzt werden.


17.16. Beispiel 2: User Lock Down

Grundlage dieses Beispiels ist ein relativ kleines System zur Datenspeicherung mit weniger als 50 Benutzern. Diese haben die Möglichkeit, sich einzuloggen und dürfen nicht nur Daten speichern, sondern auch auf andere Ressourcen zugreifen.

Die Richtlinien mac_bsdextended(4) und mac_seeotheruids(4) können gleichzeitig eingesetzt werden. Zusammen kann man mit ihnen nicht nur den Zugriff auf Systemobjekte einschränken, sondern auch Nutzerprozesse verstecken.

Beginnen Sie, indem Sie die folgende Zeile in die Datei /boot/loader.conf eintragen:

mac_seeotheruids_load="YES"


Die Richtlinie mac_bsdextended(4) wird durch den anschließenden Eintrag in /etc/rc.conf hinzugefügt:

ugidfw_enable="YES"

Die Standardregeln, welche in /etc/rc.bsdextended gespeichert sind, werden zum Systemstart geladen. Sie müssen aber noch angepaßt werden. Da dieser Computer nur Nutzern dienen soll und weitere Dienste gestartet werden, kann alles bis auf die beiden letzten Zeilen auskommentiert werden. Das sorgt dafür dass jeder Nutzer seine eigenen Systemobjekte erhält.

Nun fügen wir alle benötigten Nutzer auf der Maschine hinzu und starten neu. Zum Testen der Einstellungen loggen Sie sich parallel zwei mal mit unterschiedlichen Nutzernamen ein und starten Sie das Kommando ps aux. Dort sehen Sie, dass Sie die Prozesse des anderen Nutzers nicht sehen können. Versuchen Sie, ls(1) auf das Heimatverzeichnis eines anderen Nutzers auszuführen. Auch dieser Versuch wird fehlschlagen.

Solange nicht die speziellen sysctl-Variablen geändert wurden, hat der Superuser noch vollen Zugriff. Sobald auch diese Einstellungen angepaßt wurden, führen Sie ruhig auch den obigen Test als root aus.

Anmerkung: Wenn ein neuer Benutzer hinzugefügt wird, ist für diesen zunächst keine mac_bsdextended(4) Regel im Regelsatz vorhanden. Schnelle Abhilfe schafft hier, einfach das Kernelmodul mit kldunload(8) zu entladen und mit kldload(8) erneut einzubinden.


17.17. Fehler im MAC beheben

Während der Entwicklung des Frameworks haben einige Nutzer auf Probleme hingewiesen. Einige davon werden hier aufgeführt:


17.17.1. Die Option multilabel greift nicht auf der /-Partition

Es scheint, dass etwa jedem fünfzigsten Nutzer dieses Problem widerfährt. Und in der Tat - auch wir kennen es aus der Entwicklung. Genauere Untersuchungen dieses “Bugs” machten uns glauben, dass es sich entweder um einen Fehler in oder eine fehlerhafte Interpretation der Dokumentation handelt. Warum auch immer dieser Fehler auftritt - er kann mit folgender Prozedur behoben werden:

  1. Öffnen Sie die Datei /etc/fstab und setzen Sie die Rootpartition auf ro wie “read-only”.

  2. Starten Sie in den Einzelnutzermodus.

  3. Rufen Sie tunefs -l enable für / auf.

  4. Starten Sie in den Mehrbenutzermodus.

  5. Führen Sie mount -urw / aus und ändern Sie anschließend in der Datei /etc/fstab die Option ro zurück in rw. Starten Sie das System noch einmal neu.

  6. Achten Sie besonders auf die Ausgabe von mount um sich zu versichern, dass die multilabel korrekt für das root-Dateisystem gesetzt wurde.


17.17.2. Mit der aktivierten MAC kann ich keinen X11 Server starten

Dies kann durch die Richtlinie partition oder einer fehlerhaften Verwendung einer Richtlinie, die mit Labels arbeitet, auftreten. Zum debuggen versuchen Sie folgendes:

  1. Schauen Sie sich die Fehlermeldungen genau an. Wenn der Nutzer einer insecure Klasse angehört, ist wahrscheinlich die Richtlinie partition die Ursache. Versuchen Sie, die Nutzerklasse auf default zu stellen und danach die Datenbank mit cap_mkdb zu erneuern. Wenn das Problem dadurch nicht gelöst wird, gehen Sie weiter zu Schritt 2.

  2. Gehen Sie die Label-Richtlinien Schritt für Schritt nocheinmal durch. Achten Sie darauf, dass für den Nutzer, bei dem das Problem auftritt, für X11 und das Verzeichnis /dev alle Einstellungen korrekt sind.

  3. Falls all dies nicht helfen sollte, senden Sie die Fehlermeldung und eine Beschreibung ihrer Arbeitsumgebung an die (englisch-sprachige) TrustedBSD Diskussionsliste auf der TrustedBSD Webseite oder an die FreeBSD general questions Mailingliste./para>


17.17.3. Error: _secure_path(3) cannot stat .login_conf

Wenn ich versuche, von root zu einem anderen Nutzer des Systems zu wechseln, erhalte ich die Fehlermeldung “_secure_path: unable to state .login_conf”.

Diese Meldung wird gewöhnlich ausgegeben, wenn der Nutzer ein höhere Label-Einstellung hat als der, dessen Identität man annehmen möchte. Ausführlich: Wenn ein Nutzer joe als biba/low gelabelt wurde, kann root, der biba/high als Voreinstellung trägt, das Heimatverzeichnis von joe nicht einsehen. Das passiert unabhänig davon, ob root vorher mit su die Identität von joe angenommen hat oder nicht, da das Label sich nicht ändert. Hier haben wir also einen Fall, in dem das Gewährleistungsmodell von Biba verhindert, das der Superuser Objekte einer niedrigeren Integrität betrachten kann.


17.17.4. Der Nutzer root ist kaputt!

Im normalen oder sogar im Einzelbenutzermodus wird root nicht anerkannt. Das Kommando whoami liefert 0 (null) und su liefert “who are you?” zurück. Was geht da vor?

Das kann passieren, wenn eine Label-Richtlinie ausgeschaltet wird - entweder durch sysctl(8) oder wenn das Richtlinienmodul entladen wurde. Wenn eine Richtlinie deaktiviert oder auch nur vorübergehen deaktiviert wird, muß die Befähigungsdatenbank neu konfiguriert werden, d.h. die label Option muß entfernt werden. Überprüfen Sie, ob alle label Einträge aus der Datei /etc/login.conf entfernt wurden und bauen Sie die Datenbank mit cap_mkdb neu.

Dieser Fehler kann auch auftreten, wenn eine Richtlinie den Zugriff auf die Datei master.passwd einschränkt. Normalerweise passiert das nur, wenn ein Administrator ein Label an diese Datei vergibt, das mit der allgemeingültigen Richtlinie, die das System verwendet, in Konflikt steht. In solchen Fällen werden die Nutzerinformationen vom System ausgelesen und jeder weitere Zugriff wird blockiert, sobald das neue Label greift. Wenn man die Richtlinie via sysctl(8) ausschaltet, sollte es erstmal wieder gehen.


Kapitel 18. Security Event Auditing

Geschrieben von Tom Rhodes und Robert Watson. Übersetzt von Daniel Seuffert.

18.1. Einleitung

Das FreeBSD-Betriebssystem unterstützt ein feingranuliertes Sicherheits-Auditing. Ereignis-Auditing erlaubt die 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. FreeBSD implementiert Suns öffentlich zugängliche BSM API und Dateiformat. Die FreeBSD-Implementierung kann mit den Audit-Implementierungen von Sun Solaris und Apple Mac OS 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 arbeitet.

  • Wie man Ereignis-Auditing in FreeBSD 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 FreeBSD-Basismechanismen beherrschen (Kapitel 4).

  • Mit den grundlegenden Mechanismen der Kernel-Konfiguration und -Kompilierung vertraut sein (Kapitel 9).

  • Mit den Maßnahmen zur Sicherung von FreeBSD vertraut sein (Kapitel 15).

Warnung: Die Audit-Funktionalität in FreeBSD besitzt die Einschränkungen, dass zur Zeit nicht alle sicherheitsrelevanten System-Ereignisse auditierbar sind und dass einige Anmelde-Mechanismen, wie z.B. X11-basierte Bildschirm-Manager und Daemonen von Drittanbietern, das Auditing für Benutzeranmeldungen nicht korrekt konfigurieren.

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.


18.2. Schlüsselbegriffe

Vor dem Lesen dieses Kapitels müssen einige Audit-bezogene Schlüsselbegriffe erläutert werden:

  • event: Ein auditierbares Ereignis ist ein 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”, falls dies nicht möglich ist. Nicht-attributierbare Ereignisse erfolgen daher vor der Authentifizierung im Anmeldeprozess (beispielsweise die Eingabe eines falschen Passworts).

  • class: Ereignisklassen sind benannte Zusammenstellungen von zusammengehörenden Ereignissen und werden in Auswahl-Ausdrücken benutzt. 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 Datensatz ist ein Audit-Logeintrag, welcher 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: Ein Audit-Pfad (audit trail) oder eine Log-Datei besteht aus einer Reihe von Audit-Datensätzen, die Sicherheitsereignisse beschreiben. Normalerweise sind die Pfade 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: Ein Auswahlausdruck ist eine Zeichenkette, welche eine Liste von Präfixen und Audit-Ereignisklassennamen enthält, um Ereignisse abzugleichen.

  • preselection: Die Vorauswahl ist 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.


18.3. Installation der Audit-Unterstützung

Die Unterstützung des Ereignis-Auditings für den Benutzerbereich wird bereits als Teil des Basissystems installiert. Die Audit-Unterstützung ist bereits im FreeBSD-Standardkernel enthalten, jedoch müssen Sie die folgende Zeile explizit in Ihre Kernelkonfigurationsdatei aufnehmen und den Kernel neu bauen:

options	AUDIT

Bauen und installieren Sie den Kernel wie in Kapitel 9 beschrieben ist.

Nachdem der Kernel mit Audit-Unterstützung gebaut und installiert ist und das System neu gestartet wurde, aktivieren Sie den Audit-Daemon durch das Einfügen der folgenden Zeile in die Datei rc.conf(5):

auditd_enable="YES"

Die Audit-Unterstützung kann nun durch einen Neustart des Systems oder durch das manuelle Starten des Audit-Daemon aktiviert werden:

/etc/rc.d/auditd start

18.4. Die Konfiguration des Audit

Alle Konfigurationsdateien für das Sicherheits-Audit finden sich unter /etc/security. Die folgenden Dateien müssen vorhanden sein, bevor der Audit-Daemon gestartet wird:

  • audit_class - Enthält die Definitionen der Audit-Klassen.

  • audit_control - Steuert Teile des Audit-Subsystems wie Audit-Klassen, minimaler Plattenplatz auf dem Audit-Log-Datenträger, maximale Größe des Audit-Pfades usw.

  • audit_event - Wörtliche Namen und Beschreibungen von System-Audit-Ereignissen sowie eine Liste, welche Klassen welches Ereignis aufzeichnen.

  • audit_user - Benutzerspezifische Audit-Erfordernisse, welche mit den globalen Vorgaben bei der Anmeldung kombiniert werden.

  • audit_warn - Ein anpassbares Shell-Skript, welches von auditd benutzt wird, um Warnhinweise in aussergewöhnlichen Situationen zu erzeugen, z.B. wenn der Platz für die Audit-Datensätze knapp wird oder wenn die Datei des Audit-Pfades rotiert wurde.

Warnung: Audit-Konfigurationsdateien sollten vorsichtig gewartet und bearbeitet werden, da Fehler in der Konfiguration zu falscher Aufzeichnung von Ereignissen führen könnten.


18.4.1. 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.

Die folgende Liste enthält die Standard-Ereignisklassen für das Audit und ist in audit_class festgehalten:

  • all - all - Vergleiche alle Ereignisklassen.

  • 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 audit_control(5) mittels der argv und envv-Parametergemäss der Richtlinien-Einstellungen.

  • fa - file attribute access - Auditierung des Zugriffs auf Objektattribute wie stat(1), pathconf(2) und ähnlichen Ereignissen.

  • 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 welchen Dateiattribute geändert werden, wie chown(8), chflags(1), flock(2) etc.

  • fr - file read - Audit-Ereignisse, bei denen Daten gelesen oder Dateien zum lesen geöffnet werden usw.

  • fw - file write - Audit-Ereignisse, bei welchen Daten geschrieben oder Dateien geschrieben oder verändert werden usw.

  • io - ioctl - Nutzung des Systemaufrufes ioctl(2) durch Audit.

  • ip - ipc - Auditierung verschiedener Formen von Inter-Prozess-Kommunikation einschliesslich POSIX-Pipes und System V IPC-Operationen.

  • lo - login_logout - Audit-Ereignisse betreffend login(1) und logout(1), welche auf dem System auftreten.

  • na - non attributable - Auditierung nicht-attributierbarer Ereignisse (Ereignisse, die nicht auf einen bestimmten Benutzer zurückgeführt werden können).

  • no - invalid class - Kein Abgleich von Audit-Ereignissen.

  • nt - network - Audit-Ereignisse in Zusammenhang mit Netzwerkaktivitäten wie z.B. connect(2) und accept(2).

  • ot - other - Auditierung verschiedener Ereignisse.

  • pc - process - Auditierung von Prozess-Operationen wie exec(3) und exit(3).

Diese Ereignisklassen können angepasst werden durch Modifizierung der Konfigurationsdateien audit_class und audit_event.

Jede Audit-Klasse in dieser Liste 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.

  • (none) Kein Präfix, sowohl erfolgreiche als auch gescheiterte Vorkommen eines Ereignisses werden auditiert.

  • + Auditiere nur erfolgreiche Ereignisse in dieser Klasse.

  • - Auditiere nur gescheiterte Operationen in dieser Klasse.

  • ^ Auditiere weder erfolgreiche noch gescheiterte Ereignisse in dieser Klasse.

  • ^+ Auditiere keine erfolgreichen Ereignisse in dieser Klasse.

  • ^- Auditiere keine gescheiterten Ereignisse in dieser Klasse.

Das folgende Beispiel einer Auswahl-Zeichenkette wählt erfolgreiche und gescheiterte Anmelde/Abmelde-Ereignisse aus, aber nur erfolgreich beendete Ausführungs-Ereignisse:

lo,+ex

18.4.2. Konfigurationsdateien

In den meisten Fällen müssen Administratoren nur zwei Dateien ändern, wenn sie das Audit-System konfigurieren: audit_control und audit_user. Die erste Datei steuert systemweite Audit-Eigenschaften und -Richtlinien; die zweite Datei kann für die Feinanpassung der Auditierung von Benutzern verwendet werden.


18.4.2.1. Die audit_control-Datei

Die audit_control-Datei legt eine Anzahl Vorgabewerte fest. Beim Betrachten des Inhaltes der Datei sehen wir Folgendes:

dir:/var/audit
flags:lo
minfree:20
naflags:lo
policy:cnt
filesz:0

Die Option dir 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 flags-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 minfree 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 naflags-Option bestimmt diejenigen Audit-Klassen, für die nicht-attributierbare Ereignisse aufgezeichnet werden sollen (beispielsweise Anmeldeprozesse und System-Daemonen.

Die Option policy 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 execve(2) als Teil der Befehlsausführung aufgezeichnet werden.

Die filesz-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.


18.4.2.2. Die Datei audit_user

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 Benutzer root überflüssig und Anmelde/Abmelde-Ereignisse werden für den Benutzer www ebenfalls aufgezeichnet.

root:lo,+ex:no
www:fc,+ex:no

18.5. Administration des Audit-Subsystems

18.5.1. 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 praudit(1) wandelt alle Pfad-Dateien in ein einfaches Textformat um. Der Befehl auditreduce(1) kann genutzt werden, um die Pfad-Dateien für Analyse, Ausdruck, Archivierung oder andere Zwecke zu reduzieren. auditreduce unterstützt eine Reihe von Auswahl-Parametern einschliesslich Ereignistyp, Ereignisklasse, Benutzer, Datum oder Uhrzeit des Ereignisses und den Dateipfad oder das Objekt, mit dem gearbeitet wurde.

Das Dienstprogramm praudit schreibt zum Beispiel den gesamten Inhalt einer angegebenen Audit-Protokolldatei in eine simple Textdatei:

# 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 praudit 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.

praudit unterstützt auch die Ausgabe im XML-Format (die sie über die Option -x auswählen können).


18.5.2. 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:

# auditreduce -u trhodes /var/audit/AUDITFILE | praudit

Dies wird alle Audit-Datensätze des Benutzers trhodes auswählen, die in der Datei AUDITFILE gespeichert sind.


18.5.3. Delegation von Rechten für Audit-Reviews

Mitglieder der Gruppe audit haben die Erlaubnis, 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.


18.5.4. 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:

# 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 devfs.rules(5) für weitere Informationen, wie das devfs-Dateisystem konfiguriert wird.

Warnung: 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 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, praudit an einem Audit-Pipe-Gerät nur von Sitzungen anzuwenden (ohne feingranuliertes I/O-Auditing), um dies zu vermeiden.


18.5.5. Rotation von Audit-Pfad-Dateien

Audit-Pfade werden nur vom Kernel geschrieben und nur vom Audit-Daemon auditd verwaltet. Administratoren sollten nicht versuchen, newsyslog.conf(5) oder andere Werkzeuge zu benutzen, um Audit-Protokolldateien direkt zu rotieren. Stattdessen sollte das audit 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.

# audit -n

Warnung: Falls der auditd-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 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 filesz in audit_control(5). Dieser Vorgang ist im Abschnitt Konfigurationsdateien dieses Kapitels beschrieben.


18.5.6. 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.


Kapitel 19. Speichermedien

Übersetzt von Bernd Warken und Martin Heinen.

19.1. Übersicht

Dieses Kapitel behandelt die Benutzung von Laufwerken unter FreeBSD. Laufwerke können speichergestützte Laufwerke, Netzwerklaufwerke oder normale SCSI/IDE-Geräte sein.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

  • Die Begriffe, die FreeBSD verwendet, um die Organisation der Daten auf einem physikalischen Laufwerk zu beschreiben (Partitionen und Slices).

  • Wie Sie ein weiteres Laufwerk zu Ihrem System hinzufügen.

  • Wie virtuelle Dateisysteme, zum Beispiel RAM-Disks, eingerichtet werden.

  • Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können.

  • Wie Sie Partitionen verschlüsseln, um Ihre Daten zu schützen.

  • Wie unter FreeBSD CDs und DVDs gebrannt werden.

  • Sie werden die Speichermedien, die Sie für Backups einsetzen können, kennen.

  • Wie Sie die unter FreeBSD erhältlichen Backup Programme benutzen.

  • Wie Sie ein Backup mit Disketten erstellen.

  • Was Dateisystem-Schnappschüsse sind und wie sie eingesetzt werden.

Bevor Sie dieses Kapitel lesen,

  • sollten Sie einen einen FreeBSD-Kernel installieren können (Kapitel 9).


19.2. Gerätenamen

Die folgende Tabelle zeigt die von FreeBSD unterstützten Speichergeräte und deren Gerätenamen.

Tabelle 19-1. Namenskonventionen von physikalischen Laufwerken

Laufwerkstyp Gerätename
IDE-Festplatten ad
IDE-CD-ROM Laufwerke acd
SCSI-Festplatten und USB-Speichermedien da
SCSI-CD-ROM Laufwerke cd
Verschiedene proprietäre CD-ROM-Laufwerke mcd Mitsumi CD-ROM und scd Sony CD-ROM
Diskettenlaufwerke fd
SCSI-Bandlaufwerke sa
IDE-Bandlaufwerke ast
Flash-Laufwerke fla für DiskOnChip® Flash-Device
RAID-Laufwerke aacd für Adaptec® AdvancedRAID, mlxd und mlyd für Mylex®, amrd für AMI MegaRAID®, idad für Compaq Smart RAID, twed für 3ware® RAID.

19.3. Hinzufügen von Laufwerken

Im Original von David O'Brian.

Der folgende Abschnitt beschreibt, wie Sie ein neues SCSI-Laufwerk zu einer Maschine hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend der Anleitungen Ihres Rechners, Ihres Controllers und des Laufwerkherstellers. Den genauen Ablauf können wir wegen der großen Abweichungen leider nicht beschreiben.

Nachdem Sie das Laufwerk installiert haben, melden Sie sich als Benutzer root an und kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue Laufwerk gefunden wurde. Das neue Laufwerk wird, um das Beispiel fortzuführen, da1 heißen und soll unter /1 eingehängt werden. Fügen Sie eine IDE-Platte hinzu, wird diese den Namen ad1 erhalten.

Da FreeBSD auf IBM-PC kompatiblen Rechnern läuft, muss es die PC BIOS-Partitionen, die verschieden von den traditionellen BSD-Partitionen sind, berücksichtigen. Eine PC Platte kann bis zu vier BIOS-Partitionen enthalten. Wenn die Platte ausschließlich für FreeBSD verwendet wird, können Sie den dedicated Modus benutzen, ansonsten muss FreeBSD in eine der BIOS-Partitionen installiert werden. In FreeBSD heißen die PC BIOS-Partitionen Slices, um sie nicht mit den traditionellen BSD-Partitionen zu verwechseln. Sie können auch Slices auf einer Platte verwenden, die ausschließlich von FreeBSD benutzt wird, sich aber in einem Rechner befindet, der noch ein anderes Betriebssystem installiert hat. Dadurch stellen Sie sicher, dass Sie fdisk des anderen Betriebssystems noch benutzen können.

Im Fall von Slices wird die Platte als /dev/da1s1e hinzugefügt. Das heißt: SCSI-Platte, Einheit 1 (die zweite SCSI-Platte), Slice 1 (PC BIOS-Partition 1) und die e BSD-Partition. Wird die Platte ausschließlich für FreeBSD verwendet (“dangerously dedicated”), wird sie einfach als /dev/da1e hinzugefügt.

Anmerkung: Da bsdlabel(8) zum Speichern von Sektoren 32-Bit Integer verwendet, ist das Werkzeug in den meisten Fällen auf 2^32-1 Sektoren pro Laufwerk oder 2 TB beschränkt. In fdisk(8) darf der Startsektor nicht größer als 2^32-1 sein und Partitionen sind auf eine Länge von 2^32-1 beschränkt. In den meisten Fällen beschränkt dies die Größe einer Partition auf 2 TB und die maximale Größe eines Laufwerks auf 4 TB. Das sunlabel(8)-Format ist mit 2^32-1 Sektoren pro Partition und 8 Partitionen auf 16 TB beschränkt. Mit größeren Laufwerken können gpt(8)-Partitionen benutzt werden, um GPT-Partitionen zu erstellen. GPT hat den zusätzlichen Vorteil, dass es nicht auf 4 Slices beschränkt ist.


19.3.1. Verwenden von sysinstall(8)

  1. Das sysinstall Menü

    Um ein Laufwerk zu partitionieren und zu labeln, kann das menügestützte sysinstall benutzt werden. Dazu melden Sie sich als root an oder benutzen su, um root zu werden. Starten Sie sysinstall und wählen das Configure Menü, wählen Sie dort den Punkt Fdisk aus.

  2. Partitionieren mit fdisk

    Innerhalb von fdisk geben Sie A ein, um die ganze Platte für FreeBSD zu benutzen. Beantworten Sie die Frage “remain cooperative with any future possible operating systems” mit YES. W schreibt die Änderung auf die Platte, danach können Sie fdisk mit Q verlassen. Da Sie eine Platte zu einem schon laufenden System hinzugefügt haben, beantworten Sie die Frage nach dem Master Boot Record mit None.

  3. Disk-Label-Editor

    Als nächstes müssen Sie sysinstall verlassen und es erneut starten. Folgen Sie dazu bitte den Anweisungen von oben, aber wählen Sie dieses Mal die Option Label, um in den Disk Label Editor zu gelangen. Hier werden die traditionellen BSD-Partitionen erstellt. Ein Laufwerk kann acht Partitionen, die mit den Buchstaben a-h gekennzeichnet werden, besitzen. Einige Partitionen sind für spezielle Zwecke reserviert. Die a Partition ist für die Root-Partition (/) reserviert. Deshalb sollte nur das Laufwerk, von dem gebootet wird, eine a Partition besitzen. Die b Partition wird für Swap-Partitionen benutzt, wobei Sie diese auf mehreren Platten benutzen dürfen. Im “dangerously dedicated” Modus spricht die c Partition die gesamte Platte an, werden Slices verwendet, wird damit die ganze Slice angesprochen. Die anderen Partitionen sind für allgemeine Zwecke verwendbar.

    Der Label Editor von sysinstall bevorzugt die e Partition für Partitionen, die weder Root-Partitionen noch Swap-Partitionen sind. Im Label Editor können Sie ein einzelnes Dateisystem mit C erstellen. Wählen Sie FS, wenn Sie gefragt werden, ob Sie ein FS (Dateisystem) oder Swap erstellen wollen, und geben Sie einen Mountpoint z.B. /mnt an. Wenn Sie nach einer FreeBSD-Installation ein Dateisystem mit sysinstall erzeugen, so werden die Einträge in /etc/fstab nicht erzeugt, so dass die Angabe des Mountpoints nicht wichtig ist.

    Sie können nun das Label auf das Laufwerk schreiben und das Dateisystem erstellen, indem Sie W drücken. Ignorieren Sie die Meldung von sysinstall, dass die neue Partition nicht angehangen werden konnte, und verlassen Sie den Label Editor sowie sysinstall.

  4. Ende

    Im letzten Schritt fügen Sie noch in /etc/fstab den Eintrag für das neue Laufwerk ein.


19.3.2. Die Kommandozeile

19.3.2.1. Anlegen von Slices

Mit der folgenden Vorgehensweise wird eine Platte mit anderen Betriebssystemen, die vielleicht auf Ihrem Rechner installiert sind, zusammenarbeiten und nicht das fdisk Programm anderer Betriebssysteme stören. Bitte benutzen Sie den dedicated Modus nur dann, wenn Sie dazu einen guten Grund haben!

# dd if=/dev/zero of=/dev/da1 bs=1k count=1
# fdisk -BI da1 # Initialisieren der neuen Platte
# bsdlabel -B -w da1s1 auto #Labeln.
# bsdlabel -e da1s1 # Editieren des Disklabels und Hinzufügen von Partitionen
# mkdir -p /1
# newfs /dev/da1s1e # Wiederholen Sie diesen Schritt für jede Partition
# mount /dev/da1s1e /1 # Anhängen der Partitionen
# vi /etc/fstab # Ändern Sie /etc/fstab entsprechend

Wenn Sie ein IDE-Laufwerk besitzen, ändern Sie da in ad.


19.3.2.2. Dedicated

Wenn das neue Laufwerk nicht von anderen Betriebssystemen benutzt werden soll, können Sie es im dedicated Modus betreiben. Beachten Sie bitte, dass Microsoft-Betriebssysteme mit diesem Modus eventuell nicht zurechtkommen, aber es entsteht kein Schaden am Laufwerk. Im Gegensatz dazu wird IBMs OS/2 versuchen, jede ihm nicht bekannte Partition zu reparieren.

# dd if=/dev/zero of=/dev/da1 bs=1k count=1
# bsdlabel -Bw da1 auto
# bsdlabel -e da1  # Erstellen der `e' Partition
# newfs /dev/da1e
# mkdir -p /1
# vi /etc/fstab # /dev/da1e hinzufügen
# mount /1

Eine alternative Methode:

# dd if=/dev/zero of=/dev/da1 count=2
# bsdlabel /dev/da1 | bsdlabel -BR da1 /dev/stdin
# newfs /dev/da1e
# mkdir -p /1
# vi /etc/fstab # /dev/da1e hinzufügen
# mount /1

19.4. RAID

19.4.1. Software-RAID

19.4.1.1. Concatenated-Disk (CCD) konfigurieren

Original von Christopher Shumway. Überarbeitet von Jim Brown.

Die wichtigsten Faktoren bei der Auswahl von Massenspeichern sind Geschwindigkeit, Zuverlässigkeit und Preis. Selten findet sich eine ausgewogene Mischung aller drei Faktoren. Schnelle und zuverlässige Massenspeicher sind für gewöhnlich teuer. Um die Kosten zu senken, muss entweder an der Geschwindigkeit oder an der Zuverlässigkeit gespart werden.

Das unten beschriebene System sollte vor allem preiswert sein. Der nächst wichtige Faktor war die Geschwindigkeit gefolgt von der Zuverlässigkeit. Die Geschwindigkeit war nicht so wichtig, da über das Netzwerk auf das System zugegriffen wird. Da alle Daten schon auf CD-Rs gesichert sind, war die Zuverlässigkeit, obwohl wichtig, ebenfalls nicht von entscheidender Bedeutung.

Die Bewertung der einzelnen Faktoren ist der erste Schritt bei der Auswahl von Massenspeichern. Wenn Sie vor allem ein schnelles und zuverlässiges Medium benötigen und der Preis nicht wichtig ist, werden Sie ein anderes System als das hier beschriebene zusammenstellen.


19.4.1.1.1. Installation der Hardware

Neben der IDE-Systemplatte besteht das System aus drei Western Digital IDE-Festplatten mit 5400 RPM und einer Kapazität von je 30 GB. Insgesamt stehen also 90 GB Speicherplatz zur Verfügung. Im Idealfall sollte jede Festplatte an einen eigenen Controller angeschlossen werden. Um Kosten zu sparen, wurde bei diesem System darauf verzichtet und an jeden IDE-Controller eine Master- und eine Slave-Platte angeschlossen.

Beim Reboot wurde das BIOS so konfiguriert, dass es die angeschlossenen Platten automatisch erkennt und FreeBSD erkannte die Platten ebenfalls:

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

Anmerkung: Wenn FreeBSD die Platten nicht erkennt, überprüfen Sie, ob die Jumper korrekt konfiguriert sind. Die meisten IDE-Festplatten verfügen über einen “Cable Select”-Jumper. Die Master- und Slave-Platten werden mit einem anderen Jumper konfiguriert. Bestimmen Sie den richtigen Jumper mithilfe der Dokumentation Ihrer Festplatte.

Als nächstes sollten Sie überlegen, auf welche Art der Speicher zur Verfügung gestellt werden soll. Schauen Sie sich dazu vinum(4) (Kapitel 22) und ccd(4) an. Im hier beschriebenen System wird ccd(4) eingesetzt.


19.4.1.1.2. Konfiguration von CCD

Mit ccd(4) können mehrere gleiche Platten zu einem logischen Dateisystem zusammengefasst werden. Um ccd(4) zu benutzen, muss der Kernel mit der entsprechenden Unterstützung übersetzt werden. Ergänzen Sie die Kernelkonfiguration um die nachstehende Zeile. Anschließend müssen Sie den Kernel neu übersetzen und installieren.

pseudo-device   ccd

Alternativ kann ccd(4) auch als Kernelmodul geladen werden.

Um ccd(4) zu benutzen, müssen die Laufwerke zuerst mit einem Label versehen werden. Die Label werden mit bsdlabel(8) erstellt:

bsdlabel -w ad1 auto
bsdlabel -w ad2 auto
bsdlabel -w ad3 auto

Damit wurden die Label ad1c, ad2c und ad3c erstellt, die jeweils das gesamte Laufwerk umfassen.

Im nächsten Schritt muss der Typ des Labels geändert werden. Die Labels können Sie mit bsdlabel(8) editieren:

bsdlabel -e ad1
bsdlabel -e ad2
bsdlabel -e ad3

Für jedes Label startet dies den durch EDITOR gegebenen Editor, typischerweise vi(1).

Ein unverändertes Label sieht zum Beispiel wie folgt aus:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

Erstellen Sie eine e-Partition für ccd(4). Dazu können Sie normalerweise die Zeile der c-Partition kopieren, allerdings muss fstype auf 4.2BSD gesetzt werden. Das Ergebnis sollte wie folgt aussehen:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
  e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

19.4.1.1.3. Erstellen des Dateisystems

Nachdem alle Platten ein Label haben, kann das ccd(4)-RAID aufgebaut werden. Dies geschieht mit ccdconfig(8):

ccdconfig ccd0(1) 32(2) 0(3) /dev/ad1e(4) /dev/ad2e /dev/ad3e

Die folgende Aufstellung erklärt die verwendeten Kommandozeilenargumente:

(1)
Das erste Argument gibt das zu konfigurierende Gerät, hier /dev/ccd0c, an. Die Angabe von /dev/ ist dabei optional.
(2)
Der Interleave für das Dateisystem. Der Interleave definiert die Größe eines Streifens in Blöcken, die normal 512 Bytes groß sind. Ein Interleave von 32 ist demnach 16384 Bytes groß.
(3)
Weitere Argumente für ccdconfig(8). Wenn Sie spiegeln wollen, können Sie das hier angeben. Die gezeigte Konfiguration verwendet keine Spiegel, sodass der Wert 0 angegeben ist.
(4)
Das letzte Argument gibt die Geräte des Plattenverbundes an. Benutzen Sie für jedes Gerät den kompletten Pfadnamen.

Nach Abschluß von ccdconfig(8) ist der Plattenverbund konfiguriert und es können Dateisysteme auf dem Plattenverbund angelegt werden. Das Anlegen von Dateisystemen wird in der Hilfeseite newfs(8) beschrieben. Für das Beispiel genügt der folgende Befehl:

newfs /dev/ccd0c

19.4.1.1.4. Automatisierung

Damit ccd(4) beim Start automatisch aktiviert wird, ist die Datei /etc/ccd.conf mit dem folgenden Kommando zu erstellen:

ccdconfig -g > /etc/ccd.conf

Wenn /etc/ccd.conf existiert, wird beim Reboot ccdconfig -C von /etc/rc aufgerufen. Damit wird ccd(4) eingerichtet und die darauf befindlichen Dateisysteme können angehängt werden.

Anmerkung: Wenn Sie in den Single-User Modus booten, müssen Sie den Verbund erst konfigurieren, bevor Sie darauf befindliche Dateisysteme anhängen können:

ccdconfig -C

In /etc/fstab ist noch ein Eintrag für das auf dem Verbund befindliche Dateisystem zu erstellen, damit dieses beim Start des Systems immer angehängt wird:

/dev/ccd0c              /media       ufs     rw      2       2

19.4.1.2. Der Vinum-Volume-Manager

Der Vinum Volume Manager ist ein Block-Gerätetreiber, der virtuelle Platten zur Verfügung stellt. Er trennt die Verbindung zwischen der Festplatte und dem zugehörigen Block-Gerät auf. Im Gegensatz zur konventionellen Aufteilung einer Platte in Slices lassen sich dadurch Daten flexibler, leistungsfähiger und zuverlässiger verwalten. vinum(4) stellt RAID-0, RAID-1 und RAID-5 sowohl einzeln wie auch in Kombination zur Verfügung.

Mehr Informationen über vinum(4) erhalten Sie in Kapitel 22.


19.4.2. Hardware-RAID

FreeBSD unterstützt eine Reihe von RAID-Controllern. Diese Geräte verwalten einen Plattenverbund; zusätzliche Software wird nicht benötigt.

Der Controller steuert mithilfe eines BIOS auf der Karte die Plattenoperationen. Wie ein RAID System eingerichtet wird, sei kurz am Beispiel des Promise IDE RAID-Controllers gezeigt. Nachdem die Karte eingebaut ist und der Rechner neu gestartet wurde, erscheint eine Eingabeaufforderung. Wenn Sie den Anweisungen auf dem Bildschirm folgen, gelangen Sie in eine Maske, in der Sie mit den vorhandenen Festplatten ein RAID-System aufbauen können. FreeBSD behandelt das RAID-System wie eine einzelne Festplatte.


19.4.3. Wiederherstellen eines ATA-RAID-1 Verbunds

Mit FreeBSD können Sie eine ausgefallene Platte in einem RAID-Verbund während des Betriebs auswechseln, vorausgesetzt Sie bemerken den Ausfall vor einem Neustart.

Einen Ausfall erkennen Sie, wenn in der Datei /var/log/messages oder in der Ausgabe von dmesg(8) Meldungen wie die folgenden auftauchen:

ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\
status=59 error=40
ar0: WARNING - mirror lost

Überprüfen Sie den RAID-Verbund mit atacontrol(8):

# atacontrol list
ATA channel 0:
	Master:      no device present
	Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

ATA channel 1:
	Master:      no device present
	Slave:       no device present

ATA channel 2:
	Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
	Slave:       no device present

ATA channel 3:
	Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
	Slave:       no device present

# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. Damit Sie die Platte ausbauen können, muss zuerst der ATA-Channel der ausgefallenen Platte aus dem Verbund entfernt werden:

    # atacontrol detach ata3
    
  2. Ersetzen Sie dann die Platte.

  3. Nun aktivieren Sie den ATA-Channel wieder:

    # atacontrol attach ata3
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:   no device present
    
  4. Nehmen Sie die neue Platte in den Verbund auf:

    # atacontrol addspare ar0 ad6
    
  5. Stellen Sie die Organisation des Verbunds wieder her:

    # atacontrol rebuild ar0
    
  6. Sie können den Fortschritt des Prozesses durch folgende Befehle kontrollieren:

    # dmesg | tail -10
    [output removed]
    ad6: removed from configuration
    ad6: deleted from ar0 disk1
    ad6: inserted into ar0 disk1 as spare
    
    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
    
  7. Warten Sie bis die Wiederherstellung beendet ist.


19.5. USB Speichermedien

Beigetragen von Marc Fonvieille.

Der Universal Serial Bus (USB) wird heutzutage von vielen externen Speichern benutzt: Festplatten, USB-Thumbdrives oder CD-Brennern, die alle von FreeBSD unterstützt werden.


19.5.1. USB-Konfiguration

USB-Massenspeicher werden vom Treiber umass(4) betrieben. Wenn Sie den GENERIC-Kernel benutzen, brauchen Sie keine Anpassungen vorzunehmen. Benutzen Sie einen angepassten Kernel, müssen die nachstehenden Zeilen in der Kernelkonfigurationsdatei enthalten sein:

device scbus
device da
device pass
device uhci
device ohci
device ehci
device usb
device umass

Der Treiber umass(4) greift über das SCSI-Subsystem auf die USB-Geräte zu. Ihre USB-Geräte werden daher vom System als SCSI-Geräte erkannt. Abhängig vom Chipsatz Ihrer Systemplatine benötigen Sie in der Kernelkonfiguration entweder die Option device uhci oder die Option device ohci für die Unterstützung von USB 1.1. Die Kernelkonfiguration kann allerdings auch beide Optionen enthalten. Unterstützung für USB 2.0 Controller wird durch den ehci(4)-Treiber geleistet (die device ehci Zeile). Vergessen Sie bitte nicht, einen neuen Kernel zu bauen und zu installieren, wenn Sie die Kernelkonfiguration verändert haben.

Anmerkung: Wenn es sich bei Ihrem USB-Gerät um einen CD-R- oder DVD-Brenner handelt, müssen Sie den Treiber cd(4) für SCSI-CD-ROMs in die Kernelkonfiguration aufnehmen:

device cd

Da der Brenner als SCSI-Laufwerk erkannt wird, sollten Sie den Treiber atapicam(4) nicht benutzen.


19.5.2. Die USB-Konfiguration testen

Sie können das USB-Gerät nun testen. Schließen Sie das Gerät an und untersuchen Sie die Systemmeldungen (dmesg(8)), Sie sehen Ausgaben wie die folgende:

umass0: USB Solid state disk, rev 1.10/1.00, addr 2
GEOM: create disk da0 dp=0xc2d74850
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device
da0: 1.000MB/s transfers
da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C)

Die Ausgaben, wie das erkannte Gerät oder der Gerätename (da0) hängen natürlich von Ihrer Konfiguration ab.

Da ein USB-Gerät als SCSI-Gerät erkannt wird, können Sie USB-Massenspeicher mit dem Befehl camcontrol anzeigen:

# camcontrol devlist
<Generic Traveling Disk 1.11>      at scbus0 target 0 lun 0 (da0,pass0)

Wenn auf dem Laufwerk ein Dateisystem eingerichtet ist, sollten Sie das Dateisystem einhängen können. Abschnitt 19.3 beschreibt, wie Sie USB-Laufwerke formatieren und Partitionen einrichten.

Warnung: 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 in FreeBSD wurden nicht entwickelt, um sich vor böswilligen Geräten zu schützen.

Damit auch normale Anwender (ohne root-Rechte) USB-Laufwerke einhängen können, müssen Sie Ihr System erst entsprechend konfigurieren. Als erstes müssen Sie sicherstellen, dass diese Anwender auf die beim Einhängen eines USB-Laufwerks dynamisch erzeugten Gerätedateien zugreifen dürfen. Dazu können Sie beispielsweise mit pw(8) alle potentiellen Benutzer dieser Gerätedateien in die Gruppe operator aufnehmen. Außerdem muss sichergestellt werden, dass Mitglieder der Gruppe operator Schreib- und Lesezugriff auf diese Gerätedateien haben. Dazu fügen Sie die folgenden Zeilen in die Konfigurationsdatei /etc/devfs.rules ein:

[localrules=5]
add path 'da*' mode 0660 group operator

Anmerkung: Verfügt Ihr System auch über SCSI-Laufwerke, gibt es eine Besonderheit. Haben Sie beispielsweise die SCSI-Laufwerke da0 bis da2 installiert, so sieht die zweite Zeile wie folgt aus:

add path 'da[3-9]*' mode 0660 group operator

Dadurch werden die bereits vorhandenen SCSI-Laufwerke nicht in die Gruppe operator aufgenommen.

Vergessen Sie nicht, die devfs.rules(5)-Regeln in der Datei /etc/rc.conf zu aktivieren:

devfs_system_ruleset="localrules"

Als nächstes müssen Sie Ihre Kernelkonfiguration anpassen, damit auch normale Benutzer Dateisysteme mounten dürfen. Dazu fügen Sie am besten folgende Zeile in die Konfigurationsdatei /etc/sysctl.conf ein:

vfs.usermount=1

Damit diese Einstellung wirksam wird, müssen Sie Ihr System neu starten. Alternativ können Sie diese Variable auch mit sysctl(8) setzen.

Zuletzt müssen Sie noch ein Verzeichnis anlegen, in das das USB-Laufwerk eingehängt werden soll. Dieses Verzeichnis muss dem Benutzer gehören, der das USB-Laufwerk in den Verzeichnisbaum einhängen will. Dazu legen Sie als root ein Unterverzeichnis /mnt/username an (wobei Sie username durch den Login des jeweiligen Benutzers sowie usergroup durch die primäre Gruppe des Benutzers ersetzen):

# mkdir /mnt/username
 # chown username:usergroup /mnt/username

Wenn Sie nun beispielsweise einen USB-Stick anschließen, wird automatisch die Gerätedatei /dev/da0s1 erzeugt. Da derartige Geräte in der Regel mit dem FAT-Dateisystem formatiert sind, können Sie sie beispielsweise mit dem folgenden Befehl in den Verzeichnisbaum einhängen:

% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username

Wenn Sie das Gerät entfernen (das Dateisystem müssen Sie vorher abhängen), sehen Sie in den Systemmeldungen Einträge wie die folgenden:

umass0: at uhub0 port 1 (addr 2) disconnected
(da0:umass-sim0:0:0:0): lost device
(da0:umass-sim0:0:0:0): removing device entry
GEOM: destroy disk da0 dp=0xc2d74850
umass0: detached

19.5.3. Weiteres zu USB

Neben den Abschnitten Hinzufügen von Laufwerken und Anhängen und Abhängen von Dateisystemen lesen Sie bitte die Hilfeseiten umass(4), camcontrol(8) für FreeBSD 8.X oder usbdevs(8) bei vorherigen Versionen.


19.6. CDs benutzen

Beigesteuert von Mike Meyer.

19.6.1. Einführung

CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Zuerst konnten sie nicht beschrieben werden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. Sie konnten früher auch leichter als vergleichbar große Medien zwischen Systemen bewegt werden.

CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Um eine CD mit FreeBSD zu erstellen, werden die Daten jeder Spur der CD in Dateien vorbereitet und dann die Spuren auf die CD geschrieben.

Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. Leider hat es auch damals übliche Grenzen für Dateisysteme implementiert. Glücklicherweise existiert ein Erweiterungsmechanismus, der es korrekt geschriebenen CDs erlaubt, diese Grenzen zu überschreiten und dennoch auf Systemen zu funktionieren, die diese Erweiterungen nicht unterstützen.

Der Port sysutils/cdrtools enthält das Programm mkisofs(8), das eine Datei erstellt, die ein ISO 9660-Dateisystem enthält. Das Programm hat Optionen, um verschiedene Erweiterungen zu unterstützen, und wird unten beschrieben.

Welches Tool Sie zum Brennen von CDs benutzen, hängt davon ab, ob Ihr CD-Brenner ein ATAPI-Gerät ist oder nicht. Mit ATAPI-CD-Brennern wird burncd benutzt, das Teil des Basissystems ist. SCSI- und USB-CD-Brenner werden mit cdrecord aus sysutils/cdrtools benutzt. Zusätzlich ist es möglich, über das Modul ATAPI/CAM SCSI-Werkzeuge wie cdrecord auch für ATAPI-Geräte einzusetzen.

Wenn Sie eine Brennsoftware mit grafischer Benutzeroberfläche benötigen, sollten Sie sich X-CD-Roast oder K3b näher ansehen. Diese Werkzeuge können als Paket oder aus den Ports (sysutils/xcdroast und sysutils/k3b) installiert werden. Mit ATAPI-Hardware benötigt K3b das ATAPI/CAM-Modul.


19.6.2. mkisofs

Das Programm mkisofs(8) aus dem Port sysutils/cdrtools erstellt ein ISO 9660-Dateisystem, das ein Abbild eines Verzeichnisbaumes ist. Die einfachste Anwendung ist wie folgt:

# mkisofs -o Imagedatei /path/to/tree

Dieses Kommando erstellt eine Imagedatei, die ein ISO 9660-Dateisystem enthält, das eine Kopie des Baumes unter /path/to/tree ist. Dabei werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien mit Namen, die im ISO 9660-Dateisystem nicht gültig sind, bleiben unberücksichtigt.

Es einige Optionen, um diese Beschränkungen zu überwinden. Die unter UNIX Systemen üblichen Rock-Ridge-Erweiterungen werden durch -R aktiviert, -J aktiviert die von Microsoft Systemen benutzten Joliet-Erweiterungen und -hfs dient dazu, um das von Mac OS benutzte HFS zu erstellen.

Für CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann -U genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit -R wird ein Abbild des Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum, erstellt, obwohl dies den ISO 9660 Standard verletzen kann.

Die letzte übliche Option ist -b. 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(8) ein ISO-Image im “Diskettenemulations”-Modus. Dabei muss das Image genau 1200, 1440 oder 2880 KB groß sein. Einige Bootloader, darunter der auf den FreeBSD-Disks verwendete, kennen keinen Emulationsmodus. Daher sollten Sie in diesen Fällen die Option -no-emul-boot verwenden. Wenn /tmp/myboot ein bootbares FreeBSD-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, können Sie ein Abbild eines ISO 9660-Dateisystems in /tmp/bootable.iso wie folgt erstellen:

# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

Wenn Sie md in Ihrem Kernel konfiguriert haben, können Sie danach das Dateisystem einhängen:

# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# 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(8) mit einer Vielzahl von Optionen beeinflussen. Insbesondere können Sie das ISO 9660-Dateisystem modifizieren und Joliet- oder HFS-Dateisysteme brennen. Details dazu entnehmen Sie bitte der Hilfeseite mkisofs(8).


19.6.3. burncd

Wenn Sie einen ATAPI-CD-Brenner besitzen, können Sie burncd benutzen, um ein ISO-Image auf CD zu brennen. burncd ist Teil des Basissystems und unter /usr/sbin/burncd installiert. Da es nicht viele Optionen hat, ist es leicht zu benutzen:

# burncd -f cddevice data imagefile.iso fixate

Dieses Kommando brennt eine Kopie von imagefile.iso auf das Gerät cddevice. In der Grundeinstellung wird das Gerät /dev/acd0 benutzt. burncd(8) beschreibt, wie die Schreibgeschwindigkeit gesetzt wird, die CD ausgeworfen wird und Audiodaten geschrieben werden.


19.6.4. cdrecord

Wenn Sie keinen ATAPI-CD-Brenner besitzen, benutzen Sie cdrecord, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems. Sie müssen es entweder aus den Ports in sysutils/cdrtools oder dem passenden Paket installieren. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, dass Sie einen “Untersetzer” brennen. Sie sollten daher den Port aktualisieren, wenn Sie Ihr System aktualisieren bzw. wenn Sie STABLE verfolgen, den Port aktualisieren, wenn es eine neue Version gibt.

Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfacher als burncd. Ein ISO 9660-Image erstellen Sie mit:

# cdrecord dev=device imagefile.iso

Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu dev zu finden. Benutzen Sie dazu den Schalter -scanbus von cdrecord, der eine ähnliche Ausgabe wie die folgende produziert:

# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
        0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
        0,2,0     2) *
        0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
        0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) *
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
        1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
        1,7,0   107) *

Für die aufgeführten Geräte in der Liste wird das passende Argument zu dev gegeben. Benutzen Sie die drei durch Kommas separierten Zahlen, die zu Ihrem CD-Brenner angegeben sind, als Argument für dev. Im Beispiel ist das CDRW-Gerät 1,5,0, so dass die passende Eingabe dev=1,5,0 wäre. Einfachere Wege das Argument anzugeben, sind in cdrecord(1) beschrieben. Dort sollten Sie auch nach Informationen über Audiospuren, das Einstellen der Geschwindigkeit und ähnlichem suchen.


19.6.5. Kopieren von Audio-CDs

Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. Das genaue Verfahren hängt davon ab, ob Sie ATAPI- oder SCSI-Laufwerke verwenden.

SCSI-Laufwerke

  1. Kopieren Sie die Audiodaten mit cdda2wav:

    % cdda2wav -vall -D2,0 -B -Owav
    
  2. Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere CD:

    % cdrecord -v dev=2,0 -dao -useinfo  *.wav
    

    Das Argument von dev gibt das verwendete Gerät an, das Sie, wie in Abschnitt 19.6.4 beschrieben, ermitteln können.

ATAPI-Laufwerke

Anmerkung: Über das Modul ATAPI/CAM kann cdda2wav auch mit ATAPI-Laufwerken verwendet werden. Diese Methode ist für die meisten Anwender besser geeignet als die im folgenden beschriebenen Methoden (Jitter-Korrektur, Big-/Little-Endian-Probleme und anderes mehr spielen hierbei eine Rolle).

  1. Der ATAPI-CD-Treiber stellt die einzelnen Stücke der CD über die Dateien /dev/acddtnn, zur Verfügung. d bezeichnet die Laufwerksnummer und nn ist die Nummer des Stücks. Die Nummer ist immer zweistellig, das heißt es wird, wenn nötig, eine führende Null ausgegeben. Die Datei /dev/acd0t01 ist also das erste Stück des ersten CD-Laufwerks. /dev/acd0t02 ist das zweite Stück und /dev/acd0t03 das dritte.

    Überprüfen Sie stets, ob die entsprechenden Dateien im Verzeichnis /dev auch angelegt werden. Sind die Einträge nicht vorhanden, weisen Sie Ihr System an, das Medium erneut zu testen:

    # dd if=/dev/acd0 of=/dev/null count=1
    

    Anmerkung: Unter FreeBSD 4.X werden diese Einträge nicht mit dem Wert Null vordefiniert. Falls die entsprechenden Einträge unter /dev nicht vorhanden sind, müssen Sie diese hier von MAKEDEV anlegen lassen:

    # cd /dev
    # sh MAKEDEV acd0t99
    
  2. Die einzelnen Stücke kopieren Sie mit dd(1). Sie müssen dazu eine spezielle Blockgröße angeben:

    # dd if=/dev/acd0t01 of=track1.cdr bs=2352
    # dd if=/dev/acd0t02 of=track2.cdr bs=2352
    ...
    
  3. Die kopierten Dateien können Sie dann mit burncd brennen. Auf der Kommandozeile müssen Sie angeben, dass Sie Audio-Daten brennen wollen und dass das Medium fixiert werden soll:

    # burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate
    

19.6.6. Kopieren von Daten-CDs

Sie können eine Daten-CD in eine Datei kopieren, die einem Image entspricht, das mit mkisofs(8) erstellt wurde. Mit Hilfe dieses Images können Sie jede Daten-CD kopieren. Das folgende Beispiel verwendet acd0 für das CD-ROM-Gerät. Wenn Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen Namen ein.

# dd if=/dev/acd0 of=file.iso bs=2048

Danach haben Sie ein Image, das Sie wie oben beschrieben, auf eine CD brennen können.


19.6.7. Einhängen von Daten-CDs

Nachdem Sie eine Daten-CD gebrannt haben, wollen Sie wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen Sie die CD in den Dateibaum einhängen. Die Voreinstellung für den Typ des Dateisystems von mount(8) ist UFS. Das System wird die Fehlermeldung “Incorrect super block” ausgeben, wenn Sie versuchen, die CD mit dem folgenden Kommando einzuhängen:

# mount /dev/cd0 /mnt

Auf der CD befindet sich ja kein UFS Dateisystem, so dass der Versuch, die CD einzuhängen fehlschlägt. Sie müssen mount(8) sagen, dass es ein Dateisystem vom Typ ISO9660 verwenden soll. Dies erreichen Sie durch die Angabe von -t cd9660 auf der Kommandozeile. Wenn Sie also die CD-ROM /dev/cd0 in /mnt einhängen wollen, führen Sie folgenden Befehl aus:

# mount -t cd9660 /dev/cd0c /mnt

Abhängig vom verwendeten CD-ROM kann der Gerätename von dem im Beispiel (/dev/cd0) abweichen. Die Angabe von -t cd9660 führt mount_cd9660(8) aus, so dass das Beispiel verkürzt werden kann:

# mount_cd9660 /dev/cd0 /mnt

Auf diese Weise können Sie Daten-CDs von jedem Hersteller verwenden. Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung von zwei Byte langen Unicode-Zeichen. Zwar unterstützt der FreeBSD-Kernel derzeit noch kein Unicode, der CD9660-Treiber erlaubt es aber, zur Laufzeit eine Konvertierungstabelle zu laden. Tauchen bei Ihnen also statt bestimmter Zeichen nur Fragezeichen auf, so müssen Sie über die Option -C den benötigten Zeichensatz angeben. Weitere Informationen zu diesem Problem finden Sie in der Manualpage mount_cd9660(8).

Anmerkung: Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option -C) erkennt, müssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu fügen Sie folgende Zeile in die Datei loader.conf ein:

cd9660_iconv_load="YES"

Danach müssen Sie allerdings Ihr System neu starten. Alternativ können Sie das Kernelmodul auch direkt über kldload(8) laden.

Manchmal werden Sie die Meldung “Device not configured” erhalten, wenn Sie versuchen, eine CD-ROM einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig.

Manchmal wird ein SCSI-CD-ROM nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie ein SCSI-CD-ROM besitzen, sollten Sie die folgende Zeile in Ihre Kernelkonfiguration aufnehmen und einen neuen Kernel bauen:

options SCSI_DELAY=15000

Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-ROM-Laufwerk genügend Zeit zu geben, darauf zu antworten.


19.6.8. Brennen von rohen CDs

Sie können eine Datei auch direkt auf eine CD brennen, ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Diese Vorgehensweise hat den Vorteil, dass Sie schneller als das Brennen einer normalen CD ist.

# burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate

Wenn Sie die Daten von einer solchen CD wieder zurückbekommen wollen, müssen Sie sie direkt von dem rohen Gerät lesen:

# tar xzvf /dev/acd1

Eine auf diese Weise gefertigte CD können Sie nicht in das Dateisystem einhängen. Sie können Sie auch nicht auf einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in das Dateisystem einhängen oder mit anderen Betriebssystemen austauschen wollen, müssen Sie mkisofs(8) wie oben beschrieben benutzen.


19.6.9. Der ATAPI/CAM Treiber

Beigetragen von Marc Fonvieille.

Mit diesem Treiber kann auf ATAPI-Geräte (wie CD-ROM-, CD-RW- oder DVD-Laufwerke) mithilfe des SCSI-Subsystems zugegriffen werden. Damit können Sie SCSI-Werkzeuge, wie sysutils/cdrdao oder cdrecord(1), zusammen mit einem ATAPI-Gerät benutzen.

Wenn Sie den Treiber benutzen wollen, fügen Sie die folgende Zeile in /boot/loader.conf ein:

atapicam_load="YES"

Danach müssen Sie Ihr System neu starten, um den Treiber zu aktivieren.

Anmerkung: Alternativ können Sie die Unterstützung für atapicam(4) auch in Ihren Kernel kompilieren. Dazu fügen Sie die folgende Zeile in Ihre Kernelkonfigurationsdatei ein:

device atapicam

Die folgenden Zeilen werden ebenfalls benötigt, sollten aber schon Teil der Kernelkonfiguration sein:

device ata
device scbus
device cd
device pass

Übersetzen und installieren Sie den neuen Kernel. Der CD-Brenner sollte nun beim Neustart des Systems erkannt werden:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Über den Gerätenamen /dev/cd0 können Sie nun auf das Laufwerk zugreifen. Wenn Sie beispielsweise eine CD-ROM in /mnt einhängen wollen, benutzen Sie das nachstehende Kommando:

# mount -t cd9660 /dev/cd0 /mnt

Die SCSI-Adresse des Brenners können Sie als root wie folgt ermitteln:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)

Die SCSI-Adresse 1,0,0 können Sie mit den SCSI-Werkzeugen, zum Beispiel cdrecord(1), verwenden.

Weitere Informationen über das ATAPI/CAM- und das SCSI-System erhalten Sie in den Hilfeseiten atapicam(4) und cam(4).


19.7. DVDs benutzen

Beigetragen von Marc Fonvieille. Mit Beiträgen von Andy Polyakov.

19.7.1. Einführung

Nach der CD ist die DVD die nächste Generation optischer Speichermedien. Auf einer DVD können mehr Daten als auf einer CD gespeichert werden. DVDs werden heutzutage als Standardmedium für Videos verwendet.

Für beschreibbare DVDs existieren fünf Medienformate:

  • DVD-R: Dies war das erste verfügbare Format. Das Format wurde vom DVD-Forum festgelegt. Die Medien sind nur einmal beschreibbar.

  • DVD-RW: Dies ist die wiederbeschreibbare Version des DVD-R Standards. Eine DVD-RW kann ungefähr 1000 Mal beschrieben werden.

  • DVD-RAM: Dies ist ebenfalls ein wiederbeschreibbares Format, das vom DVD-Forum unterstützt wird. Eine DVD-RAM verhält sich wie eine Wechselplatte. Allerdings sind die Medien nicht kompatibel zu den meisten DVD-ROM-Laufwerken und DVD-Video-Spielern. DVD-RAM wird nur von wenigen Brennern unterstützt. Wollen Sie DVD-RAM einsetzen, sollten Sie Abschnitt 19.7.9 lesen.

  • DVD+RW: Ist ein wiederbeschreibbares Format, das von der DVD+RW Alliance festgelegt wurde. Eine DVD+RW kann ungefähr 1000 Mal beschrieben werden.

  • DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des DVD+RW Formats.

Auf einer einfach beschichteten DVD können 4.700.000.000 Bytes gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind 1024 Bytes).

Anmerkung: Die physischen Medien sind unabhängig von der Anwendung. Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf irgendein Medium (zum Beispiel DVD-R, DVD+R oder DVD-RW) geschrieben werden kann. Bevor Sie ein Medium auswählen, müssen Sie sicherstellen, dass der Brenner und der DVD-Spieler (ein Einzelgerät oder ein DVD-ROM-Laufwerk eines Rechners) mit dem Medium umgehen können.


19.7.2. Konfiguration

Das Programm growisofs(1) beschreibt DVDs. Das Kommando ist Teil der Anwendung dvd+rw-tools (sysutils/dvd+rw-tools). dvd+rw-tools kann mit allen DVD-Medien umgehen.

Um die Geräte anzusprechen, brauchen die Werkzeuge das SCSI-Subsystem. Daher muss der Kernel den ATAPI/CAM-Treiber zur Verfügung stellen. Der Treiber ist mit USB-Brennern nutzlos; die Konfiguration von USB-Geräten behandelt Abschnitt 19.5.

Für ATAPI-Geräte müssen Sie ebenfalls DMA-Zugriffe aktivieren. Fügen Sie dazu die nachstehende Zeile in die Datei /boot/loader.conf ein:

hw.ata.atapi_dma="1"

Bevor Sie dvd+rw-tools mit Ihrem DVD-Brenner benutzen, lesen Sie bitte die Hardware-Informationen auf der Seite dvd+rw-tools' hardware compatibility notes.

Anmerkung: Wenn Sie eine grafische Oberfläche bevorzugen, schauen Sie sich bitte den Port sysutils/k3b an. Der Port bietet eine leicht zu bedienende Schnittstelle zu growisofs(1) und vielen anderen Werkzeugen.


19.7.3. Daten-DVDs brennen

growisofs(1) erstellt mit dem Programm mkisofs das Dateisystem und brennt anschließend die DVD. Vor dem Brennen brauchen Sie daher kein Abbild der Daten zu erstellen.

Wenn Sie von den Daten im Verzeichnis /path/to/data eine DVD+R oder eine DVD-R brennen wollen, benutzen Sie das nachstehende Kommando:

# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data

Die Optionen -J -R werden an mkisofs(8) durchgereicht und dienen zum Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite mkisofs(8).

Die Option -Z wird für die erste Aufnahme einer Session benötigt, egal ob Sie eine Multi-Session-DVD brennen oder nicht. Für /dev/cd0 müssen Sie den Gerätenamen Ihres Brenners einsetzen. Die Option -dvd-compat schließt das Medium, weitere Daten können danach nicht mehr angehängt werden. Durch die Angabe dieser Option kann das Medium von mehr DVD-ROM-Laufwerken gelesen werden.

Sie können auch ein vorher erstelltes Abbild der Daten brennen. Die nachstehende Kommandozeile brennt das Abbild in der Datei imagefile.iso:

# growisofs -dvd-compat -Z /dev/cd0=imagefile.iso

Die Schreibgeschwindigkeit hängt von den verwendeten Medium sowie dem verwendeten Gerät ab und sollte automatisch gesetzt werden. Falls Sie die Schreibgeschwindigkeit vorgeben möchten, verwenden Sie den Parameter -speed=. Weiteres erfahren Sie in der Hilfeseite growisofs(1).

Anmerkung: Um grössere Dateien als 4.38GB in ihre Sammlung aufzunehmen, ist es notwendig ein UDF/ISO-9660 Hybrid-Dateisystem zu erstellen. Dieses Dateisystem muss mit zusätzlichen Parametern -udf -iso-level 3 bei mkisofs(8) und allen relevanten Programmen (z.B. 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 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 so eine ISO Datei zu bauen, geben Sie den folgenden Befehl ein:

% 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:

# growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data

Wenn Sie ein ISO-Image haben das bereits grosse Dateien enthält, sind keine weiteren zusätzlichen Optionen für growisofs(1) notwendig, um das Image auf die DVD zu brennen.

Beachten Sie noch, dass Sie die aktuelle Version von sysutils/cdrtools haben (welche mkisofs(8) enthält), da die älteren Versionen nicht den Support für grosse Dateien enthalten. Wenn Sie Probleme haben sollten, können Sie auch das Entwicklerpaket von sysutils/cdrtools-devel einsetzen und lesen Sie die mkisofs(8) Manualpage.


19.7.4. DVD-Videos brennen

Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Ein DVD-Video ist auf eine bestimmte Datei-Hierarchie angewiesen. Daher müssen Sie DVDs mit speziellen Programmen wie multimedia/dvdauthor erstellen.

Wenn Sie schon ein Abbild des Dateisystems eines DVD-Videos haben, brennen Sie das Abbild wie jedes andere auch. Eine passende Kommandozeile finden Sie im vorigen Abschnitt. Wenn Sie die DVD im Verzeichnis /path/to/video zusammengestellt haben, erstellen Sie das DVD-Video mit dem nachstehenden Kommando:

# growisofs -Z /dev/cd0 -dvd-video /path/to/video

Die Option -dvd-video wird an mkisofs(8) weitergereicht. Dadurch erstellt mkisofs(8) die Datei-Hierarchie für ein DVD-Video. Weiterhin bewirkt die Angabe von -dvd-video, dass growisofs(1) mit der Option -dvd-compat aufgerufen wird.


19.7.5. DVD+RW-Medien benutzen

Im Gegensatz zu CD-RW-Medien müssen Sie DVD+RW-Medien erst formatieren, bevor Sie die Medien benutzen. Sie sollten growisofs(1) einzetzen, da das Programm Medien automatisch formatiert, wenn es erforderlich ist. Sie können eine DVD+RW aber auch mit dem Kommando dvd+rw-format formatieren:

# dvd+rw-format /dev/cd0

Sie müssen das Kommando nur einmal mit neuen Medien laufen lassen. Anschließend können Sie DVD+RWs, wie in den vorigen Abschnitten beschrieben, brennen.

Wenn Sie auf einer DVD+RW ein neues Dateisystem erstellen wollen, brauchen Sie die DVD+RW vorher nicht zu löschen. Überschreiben Sie einfach das vorige Dateisystem indem Sie eine neue Session anlegen:

# growisofs -Z /dev/cd0 -J -R /path/to/newdata

Mit dem DVD+RW-Format ist es leicht, Daten an eine vorherige Aufnahme anzuhängen. Dazu wird eine neue Session mit der schon bestehenden zusammengeführt. Es wird keine Multi-Session geschrieben, sondern 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:

# growisofs -M /dev/cd0 -J -R /path/to/nextdata

Wenn Sie eine DVD+RW erweitern, verwenden Sie dieselben mkisofs(8)-Optionen wie beim Erstellen der DVD+RW.

Anmerkung: Um die Kompatibilität mit DVD-ROM-Laufwerken zu gewährleisten, wollen Sie vielleicht die Option -dvd-compat einsetzen. Zu einem DVD+RW-Medium können Sie mit dieser Option auch weiterhin Daten hinzufügen.

Wenn Sie das Medium aus irgendwelchen Gründen doch löschen müssen, verwenden Sie den nachstehenden Befehl:

# growisofs -Z /dev/cd0=/dev/zero

19.7.6. DVD-RW-Medien benutzen

Eine DVD-RW kann mit zwei Methoden beschrieben werden: Sequential-Recording oder Restricted-Overwrite. Voreingestellt ist Sequential-Recording.

Eine neue DVD-RW kann direkt beschrieben werden; sie muss nicht vorher formatiert werden. Allerdings muss eine DVD-RW, die mit Sequential-Recording aufgenommen wurde, zuerst gelöscht werden, bevor eine neue Session aufgenommen werden kann.

Der folgende Befehl löscht eine DVD-RW im Sequential-Recording-Modus:

# dvd+rw-format -blank=full /dev/cd0

Anmerkung: Das vollständige Löschen (-blank=full) dauert mit einem 1x Medium ungefähr eine Stunde. Wenn die DVD-RW im Disk-At-Once-Modus (DAO) aufgenommen wurde, kann Sie mit der Option -blank schneller gelöscht werden. Um eine DVD-RW im DAO-Modus zu brennen, benutzen Sie das folgende Kommando:

# growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso

Die Option -use-the-force-luke=dao sollte nicht erforderlich sein, da growisofs(1) den DAO-Modus erkennt.

Der Restricted-Overwrite-Modus sollte mit jeder DVD-RW verwendet werden, da er flexibler als der voreingestellte Sequential-Recording-Modus ist.

Um Daten auf eine DVD-RW im Sequential-Recording-Modus zu schreiben, benutzen Sie dasselbe Kommando wie für die anderen DVD-Formate:

# growisofs -Z /dev/cd0 -J -R /path/to/data

Wenn Sie weitere Daten zu einer Aufnahme hinzufügen wollen, benutzen Sie die Option -M von growisofs(1). Werden die Daten im Sequential-Recording-Modus hinzugefügt, wird eine neue Session erstellt. Das Ergebnis ist ein Multi-Session-Medium.

Eine DVD-RW im Restricted-Overwrite-Modus muss nicht gelöscht werden, um eine neue Session aufzunehmen. Sie können das Medium einfach mit der Option -Z überschreiben, ähnlich wie bei DVD+RW. Mit der Option -M können Sie das ISO-9660-Dateisystem, wie mit einer DVD+RW, vergrößern. Die DVD enthält danach eine Session.

Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus einzustellen:

# dvd+rw-format /dev/cd0

Das folgende Kommando stellt den Modus wieder auf Sequential-Recording zurück:

# dvd+rw-format -blank=full /dev/cd0

19.7.7. Multi-Session

Nur wenige DVD-ROM-Laufwerke können Multi-Session-DVDs lesen. Meist lesen die Spieler nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und DVD-RW im Sequential-Recording-Modus unterstützt. Im Modus Restricted-Overwrite gibt es nur eine Session.

Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende Kommando eine neue Session auf einer DVD+R, DVD-R oder DVD-RW im Sequential-Recording-Modus:

# growisofs -M /dev/cd0 -J -R /path/to/nextdata

Wird diese Kommandozeile mit DVD+RW- oder DVD-RW-Medien im Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten der bestehenden Session zusammengeführt. Das Medium enthält danach eine Session. Auf diesem Weg werden neue Daten zu einer bestehenden Session hinzugefügt.

Anmerkung: 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.


19.7.8. Weiterführendes

Das Kommando dvd+rw-mediainfo /dev/cd0 zeigt Informationen über eine im Laufwerk liegende DVD an.

Weiteres zu den dvd+rw-tools lesen Sie bitte in der Hilfeseite growisofs(1), auf der dvd+rw-tools Web-Seite oder in den Archiven der cdwrite-Mailingliste.


19.7.9. DVD-RAM


19.7.9.1. Konfiguration

DVD-RAM-fähige Brenner werden sowohl mit SCSI- als auch mit ATAPI-Schnittstelle angeboten. Verwenden Sie ein ATAPI-Gerät, müssen Sie den DMA-Modus aktivieren. Dazu fügen Sie die folgende Zeile in /boot/loader.conf ein:

hw.ata.atapi_dma="1"

19.7.9.2. Das Medium vorbereiten

Wie weiter oben in diesem Kapitel bereits erwähnt, kann man eine DVD-RAM mit einer Wechselplatte vergleichen. Wie diese muss auch eine DVD-RAM vor dem ersten Einsatz “vorbereitet” werden. In unserem Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem formatiert.

Dazu geben Sie als root bei eingelegter DVD-RAM die folgenden Befehle ein:

# dd if=/dev/zero of=/dev/acd0 bs=2k count=1
# bsdlabel -Bw acd0
# newfs /dev/acd0

Denken Sie dabei daran, dass Sie gegebenenfalls die Gerätedatei (hier acd0) an Ihre Konfiguration anpassen müssen.


19.7.9.3. Das Medium einsetzen

Nachdem Sie das Medium vorbereitet haben, können Sie das DVD-RAM-Medium in Ihren Verzeichnisbaum einhängen:

# mount /dev/acd0 /mnt

Danach können Sie schreibend und lesend auf das Medium zugreifen.


19.8. Disketten benutzen

Original von Julio Merino. Umgeschrieben von Martin Karlsson.

Disketten sind nützlich, wenn kein anderes bewegliches Speichermedium vorhanden ist oder wenn nur kleine Datenmengen transferiert werden sollen.

Dieser Abschnitt beschreibt die Handhabung von Disketten unter FreeBSD. Hauptsächlich geht es um die Formatierung und Benutzung von 3,5 Zoll Disketten, doch lassen sich die Konzepte leicht auf Disketten anderer Formate übertragen.


19.8.1. Disketten formatieren

19.8.1.1. Die Gerätedateien

Wie auf jedes andere Gerät auch, greifen Sie auf Disketten über Einträge im Verzeichnis /dev zu. Verwenden Sie dazu die Einträge /dev/fdN.


19.8.1.2. Formatierung

Bevor eine Diskette benutzt werden kann, muss Sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Es ist möglich, die Kapazität der Diskette zu verändern, allerdings sind die meisten Disketten auf 1440 kB ausgelegt.

Mit fdformat(1) formatieren Sie eine Diskette. Das Kommando erwartet die Angabe eines Gerätenamens.

Achten Sie bei der Formatierung auf Fehlermeldungen, die schlechte Speichermedien anzeigen.


19.8.1.2.1. Disketten formatieren

Die Disketten werden mithilfe der Gerätedatei /dev/fdN formatiert. Legen Sie eine 3,5 Zoll Diskette in Ihr Laufwerk ein und führen das folgende Kommando aus:

# /usr/sbin/fdformat -f 1440 /dev/fd0

19.8.2. Das Disklabel

Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden. Das Disklabel wird später zerstört, ist aber notwendig, um die Größe und Geometrie der Diskette zu erkennen.

Das Disklabel gilt für die ganze Diskette und enthält alle Informationen über die Geometrie der Diskette. Eine Liste der möglichen Geometrien finden Sie in /etc/disktab.

Erstellen Sie nun das Label mit bsdlabel(8):

# /sbin/bsdlabel -B -w /dev/fd0 fd1440

19.8.3. Das Dateisystem

Auf der Diskette muss nun ein Dateisystem erstellt werden (high-level Formatierung), damit FreeBSD von der Diskette lesen und auf sie schreiben kann. Das Disklabel wird durch das Anlegen eines Dateisystems zerstört. Falls Sie die Diskette später erneut formatieren wollen, müssen Sie dann auch ein neues Disklabel anlegen.

Sie können entweder UFS oder FAT als Dateisystem verwenden. Für Disketten ist FAT das beste Dateisystem.

Das folgende Kommando legt ein Dateisystem auf der Diskette an:

# /sbin/newfs_msdos /dev/fd0

Die Diskette kann nun benutzt werden.


19.8.4. Verwenden der Diskette

Zum Einhängen der Diskette in das Dateisystem verwenden Sie den Befehl mount_msdosfs(8). Sie können auch den Port emulators/mtools verwenden, um mit der Diskette zu arbeiten.


19.9. Bandmedien benutzen

Die wichtigsten Bandmedien sind 4mm, 8mm, QIC, Mini-Cartridge und DLT.


19.9.1. 4mm (DDS: Digital Data Storage)

Die 4mm-Bänder ersetzen mehr und mehr das QIC-Format als Backupmedium der Wahl für Workstations. Dieser Trend nahm stark zu, als Conner die Firma Archive, einen führenden Hersteller von QIC-Laufwerken, aufkaufte und die Produktion von QIC-Laufwerken stoppte. 4mm-Laufwerke sind klein und ruhig, haben aber nicht den gleichen Ruf der Zuverlässigkeit, den die 8mm-Laufwerke genießen. Die 4mm-Kassetten sind preiswerter und mit den Maßen 76,2 x 50,8 x 12,7 mm (3 x 2 x 0,5 Inch) kleiner als die 8mm-Kassetten. Sowohl die 4mm- als auch die 8mm-Magnetköpfe haben eine relativ kurze Lebensdauer, weil beide die gleiche Helical-Scan-Technik benutzen.

Der Datendurchsatz dieser Laufwerke beginnt bei etwa 150 kByte/s, Spitzenwerte liegen bei etwa 500 kByte/s. Die Datenkapazität liegt zwischen 1,3 GB und 2 GB. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Es gibt Multi-Drive-Einheiten für Bandbibliotheken mit bis zu 6 Laufwerken in einem Gehäuse und automatischem Bandwechsel. Die Kapazität einer solchen Bibliothek liegt bei 240 GB.

Der Standard DDS-3 unterstützt nun Bandkapazitäten bis zu 12 GB (oder komprimiert 24 GB).

4mm-Laufwerke, ebenso wie 8mm-Laufwerke, verwenden Helical-Scan. Alle Vor- und Nachteile von Helical-Scan gelten sowohl für 4mm- als auch für 8mm-Laufwerke.

Bänder sollten nach 2.000 Banddurchläufen oder 100 vollen Backups ersetzt werden.


19.9.2. 8mm (Exabyte)

8mm-Bänder sind die verbreitetsten SCSI-Bandlaufwerke; sie sind das geeignetste Bandformat zum Austausch von Bändern. Fast an jedem Standort gibt es ein 8mm-Bandlaufwerk mit 2 GB. 8mm-Bänder sind zuverlässig, gut zu handhaben und arbeiten leise. Bandkassetten sind preiswert und klein mit 122 x 84 x 15 mm (4,8 x 3,3 x 0,6 Inch). Ein Nachteil der 8mm-Technik ist die relativ kurze Lebensdauer des Schreib-/Lesekopfs und der Bänder auf Grund der hohen Relativgeschwindigkeit des Bandes über die Köpfe hinweg.

Der Datendurchsatz liegt ungefähr zwischen 250 kByte/s und 500 kByte/s. Die Datenkapazität beginnt bei 300 MB und erreicht bis zu 7 GB bei den Spitzengeräten. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Diese Laufwerke sind erhältlich in Form von Einzelgeräten oder als Multi-Drive-Bandbibliotheken mit 6 Laufwerken und 120 Bändern in einem Gehäuse. Die Bänder werden von der Geräteeinheit automatisch gewechselt. Die Kapazität einer solchen Bibliothek liegt bei 840 GB und mehr.

Das Exabyte-Modell “Mammoth” unterstützt 12 GB auf einem Band (24 GB mit Kompression) und kostet etwa doppelt so viel wie ein konventionelles Bandlaufwerk.

Die Daten werden mittels Helical-Scan auf das Band aufgezeichnet, die Köpfe sind leicht schräg zum Medium angebracht (mit einem Winkel von etwa 6 Grad). Das Band wickelt sich 270 Grad um die Spule, die die Köpfe trägt. Die Spule dreht sich, während das Band darüber läuft. Das Resultat ist eine hohe Datendichte und eng gepackte Spuren, die von einem Rand des Bands zum gegenüberliegenden quer über das Band abgewinkelt verlaufen.


19.9.3. QIC

QIC-150-Bänder und -Laufwerke sind wohl der am weitesten verbreitete Bandtyp überhaupt. QIC-Bandlaufwerke sind die preiswertesten “seriösen” Backupgeräte, die angeboten werden. Der Nachteil dabei ist der hohe Preis der Bänder. QIC-Bänder sind im Vergleich zu 8mm- oder 4mm-Bändern bis zu fünf Mal teurer, wenn man den Preis auf 1 GB Datenkapazität umrechnet. Aber wenn Ihr Bedarf mit einem halben Dutzend Bänder abgedeckt werden kann, mag QIC die richtige Wahl sein.

QIC ist der gängigste Bandlaufwerkstyp. Jeder Standort hat ein QIC-Laufwerk der einen oder anderen Dichte. Aber gerade das ist der Haken an der Sache, QIC bietet eine große Anzahl verschiedener Datendichten auf physikalisch ähnlichen (manchmal gleichen) Bändern. QIC-Laufwerke sind nicht leise. Diese Laufwerke suchen lautstark die richtige Bandstelle, bevor sie mit der Datenaufzeichnung beginnen. Sie sind während des Lesens, Schreibens und Suchens deutlich hörbar.

Die Abmessungen der QIC-Kassetten betragen 152 x 102 x 17 mm (6 x 4 x 0,7 Inch).

Der Datendurchsatz liegt ungefähr zwischen 150 kByte/s und 500 kByte/s. Die Datenkapazität reicht von 40 MB bis zu 15 GB. Hardwarekompression ist in vielen der neueren QIC-Laufwerke eingebaut. QIC-Laufwerke werden heute seltener eingesetzt; sie werden von den DAT-Laufwerken abgelöst.

Die Daten werden auf dem Band in Spuren aufgezeichnet. Die Spuren verlaufen entlang der Längsachse des Bandmediums von einem Ende zum anderen. Die Anzahl der Spuren, und damit auch die Breite einer Spur, variiert mit der Kapazität des Laufwerks. Die meisten, wenn nicht alle neueren Laufwerke sind rückwärtskompatibel, zumindest zum Lesen (aber oft auch zum Schreiben). QIC hat einen guten Ruf bezüglich der Datensicherheit (die Mechanik ist einfacher und robuster als diejenige der Helical-Scan-Laufwerke).

Bänder sollten nach 5,000 Backups ersetzt werden.


19.9.4. DLT

DLT hat die schnellste Datentransferrate von allen hier aufgelisteten Gerätetypen. Das 1/2-Inch-Band (12,7 mm) befindet sich in einer Spulkassette mit den Abmessungen 101,6 x 101,6 x 25,4 mm (4 x 4 x 1 Inch). Die eine Seite der Kassette hat eine bewegliche Abdeckung. Der Laufwerksmechanismus öffnet diese Abdeckung und zieht die Bandführung heraus. Die Bandführung trägt ein ovales Loch, die das Laufwerk zum “Einhängen” des Bandes benutzt. Die Aufwickelspule befindet sich im Innern des Bandlaufwerks. Bei allen anderen hier besprochenen Bandkassetten (9-Spur-Bänder sind die einzige Ausnahme) befinden sich sowohl die Auf- als auch die Abwickelspule im Inneren der Bandkassette.

Der Datendurchsatz liegt bei etwa 1,5 MBytes/s, der dreifache Durchsatz der 4mm-, 8mm- oder QIC-Bandlaufwerke. Die Datenkapazität reicht von 10 GB bis 20 GB für Einfachlaufwerke. Auch Mehrfachbandgeräte sind erhältlich, sowohl als Bandwechsler wie auch als Multi-Drive-Bandbibliotheken, die Platz für 5 bis 900 Bänder verteilt auf 1 bis 20 Laufwerke enthalten, mit einer Speicherkapazität von 50 GB bis 9 TB.

Mit Kompression unterstützt das Format DLT Type IV bis zu 70 GB Kapazität.

Die Daten werden auf dem Band in Spuren aufgezeichnet, die parallel zur Bewegungsrichtung verlaufen (gerade so wie bei den QIC-Bändern). Zwei Spuren werden dabei gleichzeitig beschrieben. Die Lebenszeit der Lese- und Schreibköpfe sind relativ lang; denn sobald das Band anhält, gibt es keine Relativbewegung mehr zwischen den Köpfen und dem Band.


19.9.5. AIT

AIT ist ein neues Format von Sony, das (mit Kompression) bis zu 50 GB pro Band speichern kann. Die Bänder haben einen Speicherchip, der einen Index mit dem Inhalt des Bandes anlegt. Dieser Index kann vom Bandlaufwerk zur schnellen Bestimmung der Lage von Dateien auf dem Band benutzt werden, während andere Bänder einige Minuten zur Lokalisierung benötigen.

Entsprechende Software wie etwa SAMS:Alexandria können 40 oder mehr AIT-Bandbibliotheken verarbeiten, indem sie direkt mit dem Speicherchip des Bandes kommunizieren, wenn der Bandinhalt am Bildschirm dargestellt werden soll oder bestimmt werden soll, welche Dateien auf welchem Band gespeichert sind, oder um das richtige Band zu lokalisieren, zu laden und Daten vom Band zurückzuspielen. Bibliotheken dieser Art liegen in der Preiskategorie von $20,000, womit sie etwas aus dem Hobbymarkt herausfallen.


19.9.6. Die erste Benutzung eines neuen Bands

Der Versuch ein neues, vollkommen leeres Band ohne weiteres zu lesen oder zu beschreiben wird schief gehen. Auf der Konsole werden dann Meldungen ähnlich wie folgt ausgegeben:

sa0(ncr1:4:0): NOT READY asc:4,1
0(ncr1:4:0): Logical unit is in process of becoming ready

Das Band enthält nämlich keinen Identifier-Block (Blocknummer 0). Alle QIC-Bandlaufwerke seit der Einführung des QIC-525-Standards schreiben einen Identifier-Block auf das Band. Es gibt zwei Lösungen:

  • mt fsf 1 veranlasst das Bandlaufwerk einen Identifier-Block auf das Band zu schreiben.

  • Das Band durch Drücken des Bandauswurfknopfs an der Vorderseite des Bandgeräts auswerfen.

    Danach das Band wieder einlegen und mit dump Daten auf das Band übertragen.

    Das Kommando dump gibt die Meldung “DUMP: End of tape detected” zurück und die Konsole zeigt: “HARDWARE FAILURE info:280 asc:80,96”.

    Das Band zurückspulen mit dem Kommando: mt rewind.

    Nachfolgende Bandoperationen werden dann erfolgreich ausgeführt.


19.10. Was ist mit Backups auf Disketten?

19.10.1. Kann ich Disketten zum Backup meiner Daten verwenden?

Disketten sind kein wirklich geeignetes Medium für Backups aus folgenden Gründen:

  • Disketten sind unzuverlässig, besonders langfristig.

  • Speichern und Wiederherstellen ist sehr langsam.

  • Sie haben eine sehr eingeschränkte Kapazität (Die Zeiten sind längst vorbei, wo eine ganze Festplatte auf ein Dutzend Disketten oder so gespeichert werden konnte).

Wenn jedoch keine andere Möglichkeit zum Datenbackup vorhanden ist, dann sind Disketten immer noch besser als gar kein Backup.

Wenn man gezwungen ist Disketten zu verwenden, dann sollte man auf eine gute Qualität achten. Disketten, die schon einige Jahre im Büro herumgelegen haben, sind eine schlechte Wahl. Ideal sind neue Disketten von einem renommierten Hersteller.


19.10.2. Wie mache ich ein Backup auf Disketten?

Die beste Art eines Diskettenbackups ist der Befehl tar(1) mit der Mehrfachband-Option -M, die es ermöglicht ein Backup über mehrere Disketten zu verteilen.

Ein Backup aller Dateien im aktuellen Verzeichnis einschließlich aller Unterverzeichnisse wird durch den folgenden Befehl veranlasst (als root):

# tar Mcvf /dev/fd0 *

Wenn die erste Diskette voll ist, meldet sich tar(1) und verlangt einen Diskettenwechsel (weil tar(1) unabhängig vom Medium arbeitet, wird das nächste Band (Volume) verlangt, was in diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt:

Prepare volume #2 for /dev/fd0 and hit return:

Dies wird mit steigender Volumenzahl wiederholt, bis alle angegebenen Dateien archiviert sind.


19.10.3. Können Diskettenbackups komprimiert werden?

Leider erlaubt es tar(1) nicht, die Option -z für Multi-Volume-Archive zu verwenden. Man kann natürlich alle Dateien mit gzip(1) komprimieren, sie mit tar(1) auf die Disketten aufspielen, und dann die Dateien wieder gunzip(1) dekomprimieren!


19.10.4. Wie werden Diskettenbackups wieder hergestellt?

Zur Wiederherstellung des gesamten Archivs verwendet man:

# tar Mxvf /dev/fd0

Eine Methode um nur bestimmte Dateien wieder her zu stellen ist mit der ersten Diskette den folgenden Befehl auszuführen:

# tar Mxvf /dev/fd0 filename

tar(1) wird dann die folgenden Disketten anfordern, bis die benötigte Datei gefunden ist.

Wenn man die Diskette kennt, auf der sich die Datei befindet, kann man alternativ diese Diskette auch direkt einlegen und den gleichen Befehl wie oben verwenden. Man beachte, dass, falls die erste Datei eine Fortsetzung einer Datei von einer der vorigen Disketten ist, tar(1) die Warnung ausgibt, dass diese Datei nicht wiederhergestellt werden kann, selbst dann, wenn dies gar nicht verlangt wurde!


19.11. Backup-Strategien

Beigetragen von Lowell Gilbert.

Wenn Sie eine eigene Backup-Strategie planen, müssen Sie darauf achten, dass jedes der folgenden Probleme von Ihrer Strategie abgedeckt wird:

  • Plattendefekte.

  • Versehentliches Löschen von Dateien.

  • Eine nicht vorhersehbare Korrumpierung von Dateien.

  • Die vollständige Zerstörung Ihres Systems, etwa durch ein Feuer. Dazu gehört auch die Zerstörung von Backups, die am gleichen Ort aufbewahrt werden.

Es ist nicht nur möglich, dass ein System für jedes dieser Probleme eine eigene (oft völlig unterschiedliche) Strategie benötigt. Es ist vielmehr unwahrscheinlich (sieht man von Systemen ab, die keine wichtigen Daten enthalten), dass eine Technik alle Problembereiche abdecken kann.

Häufig verwendeten Techniken sind unter anderen:

  • Die Archivierung des kompletten Systems auf externen Datenträgern, die an einem gesonderten Ort aufbewahrt werden. Dieser Ansatz schützt zwar vor allen oben angeführten Problemen, ist aber zeitaufwändig. Auch eine Wiederherstellung des Systems ist nicht ohne weiteres möglich. Zwar können Sie Kopien Ihrer Backups auch vor Ort und/oder auf online zugängigen Systemen aufbewahren, was aber nichts daran ändert, dass eine Wiederherstellung, insbesondere für nicht privilegierte Benutzer, nach wie vor nicht ohne weiteres möglich ist.

  • Dateisystem-Snapshots. Diese Technik hilft zwar nur gegen das versehentliche Löschen von Dateien, in einem solchen Fall ist sie aber äußerst hilfreich. Vorteile dieser Technik sind außerdem die leichte und schnelle Implementierung und Handhabung.

  • Das Erstellen von Kopien ganzer Dateisysteme und/oder Platten (etwa durch einen periodischen rsync(1)-Transfer des kompletten Systems). Diese Technik ist insbesondere in Netzwerken mit besonderen Anforderungen nützlich. Der Schutz vor Plattendefekten ist allerdings schlechter als beim Einsatz von RAID. Die Fähigkeiten zur Wiederherstellung gelöschter Dateien sind mit denen von UFS-Snapshots vergleichbar. Ob diese Technik für Sie geeignet ist, hängt also letztlich von Ihren Anforderungen ab.

  • RAID. Minimiert oder vermeidet Ausfallzeiten, die durch einen Plattendefekt verursacht werden könnten. Zwar können Plattendefekte (aufgrund der höheren Anzahl verwendeter Platten) häufiger auftreten, sie stellen aber dann kein so akutes Problem dar.

  • Das Überprüfen von Datei-Fingerprints durch mtree(8). Dabei handelt es sich zwar um keine Backup-Technik im eigentlichen Sinne, Sie werden durch den Einsatz dieses Werkzeugs aber informiert, dass Sie auf Ihre Backups zurückgreifen müssen. Dies ist insbesondere beim Einsatz von Offline-Backups von großer Bedeutung. Daher sollte diese Technik regelmäßig eingesetzt werden.

Es gibt noch zahlreiche weitere Techniken, von denen aber viele nur Variationen der eben beschriebenen Techniken sind. Spezielle Anforderungen erfordern dabei in der Regel auch spezielle Backup-Techniken (so erfordert das Backup einer aktiven Datenbank in der Regel ein auf die eingesetzte Datenbank-Software abgestimmtes Verfahren). Entscheidend ist daher immer, gegen welche Gefahren Sie sich schützen und wie Sie diesen Schutz realisieren wollen.


19.12. Datensicherung

Die drei wichtigsten Programme zur Sicherung von Daten sind dump(8), tar(1) und cpio(1).


19.12.1. Sichern und Wiederherstellen

dump und restore sind die traditionellen Backup-Programme in UNIX Systemen. Sie betrachten das Laufwerk als eine Ansammlung von Blöcken, operieren 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 auf einem Gerät. Es ist nicht möglich nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst, zu sichern. Das dump-Kommando schreibt keine Dateien oder Verzeichnisse auf das Band, sondern die Blöcke, aus denen Dateien und Verzeichnisse bestehen. Wenn restore für das 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, müssen Sie möglicherweise die Umgebungsvariable TMPDIR auf ein Verzeichnis mit mehr freiem Speicherplatz setzen, damit die Wiederherstellung gelingt.

Anmerkung: Wenn Sie mit dump das Root-Verzeichnis sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind.

dump hat einige Eigenarten, die noch aus den frühen Tagen der Version 6 von AT&T UNIX (ca. 1975) stammen. Die Parameter sind für 9-Spur-Bänder (6250 bpi) voreingestellt, nicht auf die heute üblichen Medien hoher Dichte (bis zu 62.182 ftpi). Bei der Verwendung der Kapazitäten moderner Bandlaufwerke muss diese Voreinstellung auf der Kommandozeile überschrieben werden.

rdump und rrestore können Daten über Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen Computers befindet, überspielen. Beide Programme benutzen die Funktionen rcmd(3) und ruserok(3) zum Zugriff auf das entfernte Bandlaufwerk. Daher muss der Anwender, der das Backup durchführt, auf dem entfernten Rechner in .rhosts eingetragen sein.

Die Argumente zu rdump und rrestore müssen zur Verwendung auf dem entfernten Computer geeignet sein. Wenn Sie zum Beispiel mit rdump von einem FreeBSD-Rechner aus auf ein Exabyte-Bandlaufwerk einer Sun mit Namen komodo zugreifen möchten, setzen Sie das folgende Kommando ab:

# /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1

Zum Ausführen dieses Kommandos müssen Sie auf dem entfernten Rechner in .rhosts eingetragen sein. Die r-Kommandos sind ein großes Sicherheitsrisiko, daher sollten Sie deren Verwendung sorgfältig abwägen.

Es ist auch möglich, dump und restore über eine gesicherte Verbindung mit ssh einzusetzen:

Beispiel 19-1. dump mit ssh benutzen

# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
	  targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

Sie können ebenfalls mit der internen Methode von dump auf entfernte Rechner zugreifen, indem Sie die Umgebungsvariable RSH setzen:

Beispiel 19-2. dump über ssh mit gesetzter RSH benutzen

# RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr

19.12.2. tar

tar(1) stammt ebenfalls aus Version 6 von AT&T UNIX (ca. 1975). tar arbeitet mit dem Dateisystem, denn es schreibt Dateien und Verzeichnisse auf das Band. tar unterstützt zwar nicht alle Optionen, die bei cpio(1) zur Verfügung stehen, aber dafür erfordert es auch nicht die ungewöhnliche Kommando-Pipeline, die von cpio verwendet wird.

Um Daten mit tar auf ein an einer Sun-Workstation (namens komodo) angeschlossenes Exabyte-Bandlaufwerk zu archivieren, geben Sie Folgendes ein:

# tar cf - . | rsh komodo dd of=tape-device obs=20b

Wenn Sie Bedenken bezüglich der Sicherheit beim Backup über das Netz haben, sollten Sie ssh anstatt rsh benutzen.


19.12.3. Cpio

cpio(1) ist das ursprüngliche Programm von UNIX Systemen zum Dateitransfer mit magnetischen Medien. cpio hat (neben vielen anderen Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben einer Anzahl verschiedener Archivformate und zum Weiterleiten von Daten an andere Programme über eine Pipeline. Dieses letzte Leistungsmerkmal macht cpio zu einer ausgezeichneten Wahl für Installationsmedien. Leider kann cpio keine Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden Dateien über stdin angegeben werden muss.

cpio unterstützt keine Backups über das Netzwerk. Man kann aber eine Pipeline und rsh verwenden, um Daten an ein entferntes Bandlaufwerk zu senden.

# for f in directory_list; do
find $f >> backup.list
done
# cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"

Dabei steht directory_list für eine Aufzählung der Verzeichnisse, die Sie sichern wollen. user@host gibt den Benutzer auf dem Zielrechner an, der die Sicherung laufen lässt. Der Ort der Sicherung wird durch backup_device angegeben (z.B. /dev/nsa0).


19.12.4. pax

pax(1) ist die Antwort von IEEE/POSIX auf tar und cpio. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat POSIX, statt eine Standardisierung zwischen diesen auszufechten, ein neues Archivprogramm geschaffen. pax versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Die Kommandostruktur ähnelt eher cpio als tar.


19.12.5. Amanda

Amanda (Advanced Maryland Network Disk Archiver) ist ein Client/Server-Backupsystem, nicht nur ein einzelnes Programm. Ein Amanda-Server kann auf einem einzigen Bandlaufwerk Datensicherungen von jeder beliebigen Anzahl von Computern speichern, sofern auf diesen jeweils ein Amanda-Client läuft und sie über Netzwerk mit dem Amanda-Server verbunden sind.

Ein häufiges Problem bei Standorten mit einer Anzahl großer Festplatten ist, dass das Kopieren der Daten auf Band langsamer vor sich geht als solche Daten anfallen. Amanda löst dieses Problem durch Verwendung einer “Holding Disk”, einer Festplatte zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme.

Für Datensicherungen über einen längeren Zeitraum erzeugt Amanda “Archivsets” von allen Dateisystemen, die in Amandas Konfigurationsdatei genannt werden. Ein Archivset ist eine Gruppe von Bändern mit vollen Backups und Reihen von inkrementellen (oder differentiellen) Backups, die jeweils nur die Unterschiede zum vorigen Backup enthalten. Zur Wiederherstellung von beschädigten Dateisystemen benötigt man Das Letzte volle Backup und alle darauf folgenden inkrementellen Backups.

Die Konfigurationsdatei ermöglicht die Feineinstellung der Backups und des Netzwerkverkehrs von Amanda. Amanda kann zum Schreiben der Daten auf das Band jedes der oben beschriebenen Backuprogramme verwenden. Amanda ist nicht Teil des Basissystems, Sie müssen Amanda über die Ports-Sammlung oder als Paket installieren.


19.12.6. Tue nichts

“Tue nichts” ist kein Computerprogramm, sondern die am häufigsten angewendete Backupstrategie. Diese kostet nichts, man muss keinen Backup Plan befolgen, einfach nur nein sagen. Wenn etwas passiert, einfach grinsen und ertragen!

Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist die Strategie “Tue nichts” das geeignetste Backup-Programm für Ihren Computer. Aber UNIX ist ein nützliches Werkzeug, Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten eine Sammlung von Dateien haben, die für Sie wertvoll geworden sind.

“Tue nichts” ist die richtige Backupmethode für /usr/obj und andere Verzeichnisbäume, die vom Computer exakt wiedererzeugt werden können. Ein Beispiel sind die Dateien, die diese Handbuchseiten darstellen - sie wurden aus Quelldateien im Format SGML erzeugt. Es ist nicht nötig, Sicherheitskopien der Dateien in den sekundären Formaten wie etwa HTML zu erstellen. Die Quelldateien in SGML sollten jedoch in die regelmäßigen Backups mit einbezogen werden.


19.12.7. Welches Backup-Programm ist am Besten?

dump, Punkt und Schluss. Elizabeth D. Zwicky hat alle hier genannten Backup-Programme bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur Sicherung aller Daten mit Berücksichtigung aller Besonderheiten von UNIX Dateisystemen ist dump.

Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt ungewöhnlicher Bedingungen (und einiger gar nicht so ungewöhnlicher) und testete jedes Programm durch ein Backup und eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten waren Dateien mit Löchern, Dateien mit Löchern und einem Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im Dateinamen, unlesbare und nichtschreibbare Dateien, Gerätedateien, Dateien, deren Länge sich während des Backups ändert, Dateien, die während des Backups erzeugt und gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse in LISA V im Oktober 1991, s. Torture-testing Backup and Archive Programs.


19.12.8. Die Wiederherstellung in einem Notfall

19.12.8.1. Vor dem Unglück

Es sind nur vier Vorkehrungen zu treffen, um auf jedes erdenkliche Unglück vorbereitet zu sein.

Als erstes drucken Sie das bsdlabel jeder Ihrer Festplatten (z.B. mittels bsdlabel da0 | lpr), die Partitions- und Dateisystemtabelle jeder Festplatte (mit /etc/fstab) sowie alle Bootmeldungen, jeweils in zweifacher Ausfertigung.

Zweitens brennen Sie eine “livefs”-CD. Diese CD-ROM enthält alle nötigen Programme, um in einen Reperaturmodus zu starten, aus dem heraus Sie unter anderem dump(8), restore(8), fdisk(8), bsdlabel(8), newfs(8) sowie mount(8) starten können. ISO-Abbilder für das “livefs”-System finden Sie unter ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-i386-livefs.iso.

Drittens, machen Sie oft Backups auf Band. Jede Änderung seit Ihrem letzten Backup kann unwiederbringlich verloren gehen. Versehen Sie die Backup-Bänder mit Schreibschutz.

Viertens, testen Sie das in Schritt 2 erstellte “livefs”-System sowie die für das Backup notwendigen Bänder. Dokumentieren Sie diesen Test und bewahren Sie diese Notizen zusammen mit der “livefs”-CD und den Bändern auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt sein, dass Sie ohne Ihre Notizen vielleicht das Backup auf Ihren Bändern zerstören. (Wie das geht? Man braucht nur unglücklicherweise den Befehl tar cvf /dev/sa0 einzugeben um ein Band zu überschreiben).

Als zusätzliche Sicherheitsvorkehrung, kann man jeweils die “livefs”-CD und Bänder doppelt erstellen. Eine der Kopien sollte an einem entfernten Standort aufbewahrt werden. Ein entfernter Standort ist NICHT der Keller im gleichen Bürogebäude. Eine Anzahl von Firmen im World Trade Center musste diese Lektion auf die harte Tour lernen. Ein entfernter Standort sollte von Ihrem Computer und Ihren Festplatten physikalisch durch eine erhebliche Entfernung getrennt sein.


19.12.8.2. Nach dem Unglück

Die Schlüsselfrage ist, ob Ihre Hardware überlebt hat. Denn da Sie ja regelmäßig Backups angefertigt haben, brauchen Sie sich um die Software keine Sorgen zu machen.

Falls die Hardware beschädigt wurde, ersetzen Sie zuerst die defekten Teile bevor Sie den Computer benutzen.

Falls die Hardware funktioniert, legen Sie die “livefs”-CD in das Laufwerk ein und starten den Rechner, wodurch das originale Installationsprogramm von FreeBSD gestartet wird. Legen Sie zuerst Ihr Land fest. Danach öffnen Sie das Menü Fixit -- Repair mode with CDROM/DVD/floppy or start a shell. und wählen den Eintrag CDROM/DVD -- Use the live filesystem CDROM/DVD aus. restore und die anderen Programme, die Sie benötigen, befinden sich dann im Verzeichnis /mnt2/rescue.

Stellen Sie die Dateisysteme nacheinander wieder her.

Versuchen Sie die Root-Partition Ihrer ersten Festplatte einzuhängen (z.B. mit mount /dev/sd0a /mnt). Wenn das Bsdlabel beschädigt wurde, benutzen Sie bsdlabel um die Platte neu zu partitionieren und zu benennen und zwar so, dass die Festplatte mit dem Label übereinstimmt, das Sie ausgedruckt und aufbewahrt haben.

Verwenden Sie newfs um neue Dateisysteme auf den Partitionen anzulegen. Hängen Sie nun die Root-Partition der Festplatte mit Schreibzugriff ein (mit mount -u -o rw /mnt). Benutzen Sie Ihr Backup-Programm um die Daten für das jeweilige Dateisystem aus den Backup-Bändern wieder her zu stellen (z.B. durch restore vrf /dev/sta). Hängen Sie das Dateisystem wieder aus (z.B. durch umount /mnt). Wiederholen Sie diesen Ablauf für jedes betroffene Dateisystem.

Sobald Ihr System wieder läuft, machen Sie gleich wieder ein vollständiges Backup auf neue Bänder. Denn die Ursache für den Absturz oder den Datenverlust kann wieder zuschlagen. Eine weitere Stunde, die Sie jetzt noch dranhängen, kann Ihnen später ein weiteres Missgeschick ersparen.


19.13. Netzwerk-, speicher- und dateibasierte Dateisysteme

Verbessert und neu strukturiert von Marc Fonvieille.

Neben Laufwerken, die sich physikalisch im Rechner befinden wie Diskettenlaufwerke, CDs, Festplatten usw., kann FreeBSD auch mit anderen Laufwerken, den virtuellen Laufwerken, umgehen.

Dazu zählen Netzwerkdateisysteme wie Network Filesystem und Coda, speicher- und dateibasierte Dateisysteme.

Abhängig von der verwendeten FreeBSD Version werden speicher- und dateibasierte Dateisysteme mit unterschiedlichen Werkzeugen angelegt.

Anmerkung: Gerätedateien werden unter FreeBSD automatisch von devfs(5) angelegt.


19.13.1. Dateibasierte Laufwerke unter FreeBSD

Unter FreeBSD werden virtuelle Laufwerke (md(4)) mit mdconfig(8) erzeugt. Dazu muss das Modul md(4) geladen sein oder das entsprechende Gerät in der Kernelkonfiguration aktiviert sein:

device md

Mit mdconfig(8) können drei verschiedene virtuelle Laufwerke angelegt werden: speicherbasierte Laufwerke, deren Speicher von malloc(9) zur Verfügung gestellt wird, oder dateibasierte Laufwerke, deren Speicher von einer Datei oder dem Swap-Bereich zur Verfügung gestellt wird. Eine mögliche Anwendung ist das Einhängen von Dateien, die Abbilder von CD-ROMs oder Disketten enthalten.

Das Abbild eines Dateisystems wird wie folgt eingehangen:

Beispiel 19-3. Einhängen eines existierenden Abbildes unter FreeBSD

# mdconfig -a -t vnode -f diskimage -u 0
# mount /dev/md0 /mnt

Ein neues Dateisystem-Abbild erstellen Sie mit mdconfig(8) wie folgt:

Beispiel 19-4. Erstellen eines dateibasierten Laufwerks mit mdconfig

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdconfig -a -t vnode -f newimage -u 0
# bsdlabel -w md0 auto
# 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
# mount /dev/md0a /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md0a       4710    4  4330     0%    /mnt

Wenn Sie keine Gerätenummer mit dem Schalter -u angeben, wird von md(4) automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen entnehmen Sie bitte der Hilfeseite mdconfig(8).

Das Werkzeug mdconfig(8) ist sehr nützlich, doch muss man viele Kommandos absetzen, um ein dateibasiertes Dateisystem zu erstellen. FreeBSD enthält das Werkzeug mdmfs(8), das die notwendigen Schritte in einem Befehl zusammenfasst. Es konfiguriert mit mdconfig(8) ein md(4)-Laufwerk, erstellt darauf mit newfs(8) ein Dateisystem und hängt es anschließend mit mount(8) ein. Das virtuelle Laufwerk aus dem obigen Beispiel kann somit einfach mit den nachstehenden Befehlen erstellt werden:

Beispiel 19-5. Mit mdmfs ein dateibasiertes Dateisystem erstellen

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdmfs -F newimage -s 5m md0 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md0        4718    4  4338     0%    /mnt

Wenn sie die Option md ohne Gerätenummer verwenden, wählt md(4) automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten entnehmen Sie bitte der Hilfeseite mdmfs(8).


19.13.2. Speicherbasierte Laufwerke unter FreeBSD

Verwenden Sie ein speicherbasiertes Dateisystem, sollten Sie die Option “swap backing” aktivieren. Setzen Sie diese Option, heißt dies allerdings nicht, dass das speicherbasierte Laufwerk automatisch auf ihre Festplatte ausgelagert wird, vielmehr wird der Speicherplatz danach aus einem Speicherpool angefordert, der bei Bedarf auf die Platte ausgelagert werden kann. Zusätzlich ist es möglich, malloc(9)-gestützte speicherbasierte Laufwerke zu erstellen. Das Anlegen solcher Laufwerke kann allerdings zu einer System-Panic führen, wenn der Kernel danach über zu wenig Speicher verfügt.

Beispiel 19-6. Erstellen eines speicherbasierten Laufwerks mit mdconfig

# mdconfig -a -t swap -s 5m -u 1
# 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
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md1        4718    4  4338     0%    /mnt

Beispiel 19-7. Erstellen eines speicherbasierten Laufwerks mit mdmfs

# mdmfs -s 5m md2 /mnt
# df /mnt

# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md2        4846    2  4458     0%    /mnt

19.13.3. Virtuelle Laufwerke freigeben

Wenn ein virtuelles Laufwerk nicht mehr gebraucht wird, sollten Sie dem System die belegten Ressourcen zurückgeben. Hängen Sie dazu zuerst das Dateisystem ab und geben Sie dann die benutzten Ressourcen mit mdconfig(8) frei.

Alle von /dev/md4 belegten Ressourcen werden mit dem nachstehenden Kommando freigegeben:

# mdconfig -d -u 4

Eingerichtete md(4)-Geräte werden mit dem Befehl mdconfig -l angezeigt.


19.14. Schnappschüsse von Dateisystemen

Beigetragen von Tom Rhodes.

Zusammen mit Soft Updates bietet FreeBSD eine neue Funktion: Schnappschüsse von Dateisystemen.

Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn Sie einen Schnappschuss nicht mehr benötigen, können Sie ihn mit rm(1) löschen. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann.

Das unveränderliche Snapshot-Dateiflag wird nach der Erstellung des Snaphshots von mksnap_ffs(8) gesetzt. Durch die Verwendung von unlink(1) ist es allerdings möglich, einen Schnappschuss zu löschen.

Schnappschüsse werden mit mount(8) erstellt. Das folgende Kommando legt einen Schnappschuss von /var in /var/snapshot/snap ab:

# mount -u -o snapshot /var/snapshot/snap /var

Den Schnappschuss können Sie auch mit mksnap_ffs(8) erstellen:

# mksnap_ffs /var /var/snapshot/snap

Um einen Schnappschuss auf Ihrem System zu finden, verwenden Sie find(1):

# find /var -flags snapshot

Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen:

  • Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine CD oder ein Band schreiben.

  • Sie können den Schnappschuss mit fsck(8) manuell prüfen. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte fsck(8) immer erfolgreich durchlaufen. Der Hintergrund-Prozess fsck(8) hat im Übrigen genau diese Aufgabe.

  • Sie können den Schnappschuss mit dump(8) sichern. Sie erhalten dann eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter -L von 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:

    # mdconfig -a -t vnode -f /var/snapshot/snap -u 4
    # mount -r /dev/md4 /mnt
    

Sie können sich nun den eingefrorenen Stand des /var Dateisystems unterhalb von /mnt ansehen. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des Schnappschusses. Wenn Sie den Schnappschuss nicht mehr benötigen, können Sie ihn, wie nachfolgend gezeigt, abhängen:

# umount /mnt
# 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.


19.15. Dateisystem-Quotas

Quotas sind eine optionale Funktion des Betriebssystems, die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Oft wird dies auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da es dort erwünscht ist, die Ressourcen, die ein Benutzer oder eine Gruppe von Benutzern belegen können, zu limitieren. Das verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt.


19.15.1. Konfiguration des Systems, um Quotas zu aktivieren

Bevor Quotas benutzt werden können, müssen sie im Kernel konfiguriert werden, wozu die folgende Zeile der Kernelkonfiguration hinzugefügt wird:

options QUOTA

Im gewöhnlichen GENERIC Kernel sind Quotas nicht aktiviert, so dass Sie einen angepassten Kernel konfigurieren und bauen müssen, um Quotas zu benutzen. Weitere Informationen finden Sie in Kapitel 9.

Durch Hinzufügen der folgenden Zeile in /etc/rc.conf wird das Quota-System in FreeBSD 7.X und ältere aktiviert:

enable_quotas="YES"

Seit FreeBSD 8.0-RELEASE und dessen Nachfolger fügen Sie stattdessen die folgende Zeile hinzu:

quota_enable="YES"

Um den Start des Quota-Systems zu beeinflussen, steht eine weitere Variable zur Verfügung. Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit quotacheck(8) überprüft. quotacheck(8) stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein sehr zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es Ihnen, diesen Schritt zu überspringen:

check_quotas="NO"

Schließlich müssen Sie noch in /etc/fstab die Plattenquotas auf Dateisystemebene aktivieren. Dort können Sie für alle Dateisysteme Quotas für Benutzer, Gruppen oder für beide aktivieren.

Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem die Option userquota im Feld Optionen von /etc/fstab an. Beispiel:

/dev/da1s2g   /home    ufs rw,userquota 1 2

Um Quotas für Gruppen einzurichten, verwenden Sie groupquota anstelle von userquota. Um Quotas für Benutzer und Gruppen einzurichten, ändern Sie den Eintrag wie folgt ab:

/dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

Die Quotas werden jeweils im Rootverzeichnis des Dateisystems unter dem Namen quota.user für Benutzer-Quotas und quota.group für Gruppen-Quotas abgelegt. Obwohl fstab(5) beschreibt, dass diese Dateien an anderer Stelle gespeichert werden können, wird das nicht empfohlen, da es den Anschein hat, dass die verschiedenen Quota-Utilities das nicht richtig unterstützen.

Jetzt sollten Sie Ihr System mit dem neuen Kernel booten. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, die die Quota-Dateien für alle Quotas, die Sie in /etc/fstab definiert haben, anlegen. Deshalb müssen vorher auch keine leeren Quota-Dateien angelegt werden.

Normalerweise brauchen Sie die Kommandos quotacheck(8), quotaon(8) oder quotaoff(8) nicht händisch aufzurufen, obwohl Sie vielleicht die entsprechenden Seiten im Manual lesen sollten, um sich mit ihnen vertraut zu machen.


19.15.2. Setzen von Quota-Limits

Nachdem Sie Quotas in Ihrem System aktiviert haben, sollten Sie überprüfen, dass Sie auch tatsächlich aktiviert sind. Führen Sie dazu einfach den folgenden Befehl aus:

# quota -v

Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollten Sie eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits sehen.

Mit edquota(8) können Sie nun Quota-Limits setzen.

Sie haben mehrere Möglichkeiten, die Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits.

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.

Im Gegensatz dazu können Softlimits für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus überschritten, so wird das Softlimit in ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist wieder zurückgesetzt.

Das folgende Beispiel zeigt die Benutzung von edquota(8). Wenn edquota(8) aufgerufen wird, wird der Editor gestartet, der durch EDITOR gegeben ist oder vi falls EDITOR nicht gesetzt ist. In dem Editor können Sie die Limits eingeben.

# edquota -u test
Quotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
        inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
        inodes in use: 0, limits (soft = 50, hard = 60)

Für jedes Dateisystem, auf dem Quotas aktiv sind, sehen Sie zwei Zeilen, eine für die Block-Quotas und die andere für die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit dieses Benutzers von einem Softlimit von 50 und einem Hardlimit von 75 auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile

/usr: kbytes in use: 65, limits (soft = 50, hard = 75)

zu:

/usr: kbytes in use: 65, limits (soft = 500, hard = 600)

Die neuen Limits sind wirksam, wenn Sie den Editor verlassen.

Manchmal ist es erwünscht, die Limits für einen Bereich von UIDs zu setzen. Dies kann mit der -p Option von edquota(8) bewerkstelligt werden. Weisen Sie dazu die Limits einem Benutzer zu und rufen danach edquota -p protouser startuid-enduid auf. Besitzt beispielsweise der Benutzer test die gewünschten Limits, können diese mit dem folgenden Kommando für die UIDs 10.000 bis 19.999 dupliziert werden:

# edquota -p test 10000-19999

Weitere Informationen erhalten Sie in edquota(8).


19.15.3. Überprüfen von Quota-Limits und Plattennutzung

Sie können quota(1) oder repquota(8) benutzen, um Quota-Limits und Plattennutzung zu überprüfen. Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann 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 repquota(8) erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind.

Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt:

Disk quotas for user test (uid 1002):
     Filesystem  usage   quota   limit   grace   files   quota   limit   grace
           /usr      65*     50      75   5days       7      50      60
       /usr/var       0      50      75               0      50      60

Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes über dem Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat.

In der Ausgabe von quota(1) werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Mit -v werden diese Dateisysteme, wie /usr/var im obigen Beispiel, angezeigt.


19.15.4. Quotas über NFS

Quotas werden von dem Quota-Subsystem auf dem NFS Server erzwungen. Der rpc.rquotad(8) Dæmon stellt quota(1) die Quota Informationen auf dem NFS Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können.

Aktivieren Sie rpc.rquotad in /etc/inetd.conf wie folgt:

rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

Anschließend starten Sie inetd neu:

# /etc/rc.d/inetd restart

19.16. Partitionen verschlüsseln

Beigetragen von Lucky Green.

FreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe Kapitel 17) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte einfach in ein anderes System einbauen und dort die Daten analysieren.

Die für FreeBSD verfügbaren kryptografischen Subsysteme GEOM Based Disk Encryption (gbde) und geli sind in der Lage, Daten auf Dateisystemen auch vor hoch motivierten Angreifern zu schützen, die über erhebliche Mittel verfügen. Dieser Schutz ist unabhängig von der Art und Weise, durch die ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu schwerfälligen Systemen, die einzelne Dateien verschlüsseln, verschlüsseln gbde und geli transparent ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im Klartext gespeichert.


19.16.1. Plattenverschlüsselung mit gbde

  1. Wechseln sie zu root

    Sie benötigen Superuser-Rechte, um gbde einzurichten.

    % su -
    Password:
    
  2. Aktivieren Sie gbde(4) in der Kernelkonfigurationsdatei

    Fügen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei ein:

    options GEOM_BDE

    Übersetzen und installieren Sie den FreeBSD-Kernel wie in Kapitel 9 beschrieben.

    Starten sie das System neu, um den neuen Kernel zu benutzen.

  3. Alternativ zur Neukompilierung des Kernels können Sie auch kldload verwenden, um das Kernelmodul gbde(4) zu laden:

    # kldload geom_bde
    

19.16.1.1. Einrichten eines verschlüsselten Dateisystems

Das folgende Beispiel beschreibt, wie ein Dateisystem auf einer neuen Festplatte verschlüsselt wird. Das Dateisystem wird in /private eingehangen. Mit gbde könnten auch /home und /var/mail verschlüsselt werden. Die dazu nötigen Schritte können allerdings in dieser Einführung nicht behandelt werden.

  1. Installieren der Festplatte

    Installieren Sie die Festplatte wie in Abschnitt 19.3 beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. Die Gerätedateien /dev/ad0s1* sind Standard-Partitionen des FreeBSD-Systems.

    # 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
    
  2. Verzeichnis für gbde-Lock-Dateien anlegen

    # 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.

  3. Vorbereiten der gbde-Partition

    Eine von gbde benutzte Partition muss einmalig vorbereitet werden:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
    

    gbde(8) öffnet eine Vorlage in Ihrem Editor, in der Sie verschiedene Optionen einstellen können. Setzen Sie sector_size auf 2048, wenn Sie UFS1 oder UFS2 benutzen.

    # $FreeBSD: src/sbin/gbde/template.txt,v 1.1.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
    [...]
    

    gbde(8) fragt dann zweimal eine Passphrase zum Schutz der Daten ab. Die Passphrase muss beides Mal gleich eingegeben werden. Die Sicherheit der Daten hängt alleine von der Qualität der gewählten Passphrase ab. [12]

    Mit gbde init wurde im Beispiel auch die Lock-Datei /etc/gbde/ad4s1c.lock angelegt. gbde-Lockdateien müssen die Dateiendung “.lock” aufweisen, damit sie von /etc/rc.d/gbde, dem Startskript von gbde, erkannt werden.

    Achtung: Sichern Sie die Lock-Dateien von gbde immer zusammen mit den verschlüsselten Dateisystemen. Ein entschlossener Angreifer kann die Daten vielleicht auch ohne die Lock-Datei entschlüsseln. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Dies ist nur noch mit erheblichem manuellen Aufwand möglich, der weder von gbde(8) noch seinem Entwickler unterstützt wird.

  4. Einbinden der verschlüsselten Partition in den Kernel

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
    

    Das Kommando fragt die Passphrase ab, die Sie beim Vorbereiten der Partition eingegeben haben. Das neue Gerät erscheint danach als /dev/device_name.bde im Verzeichnis /dev:

    # 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
    
  5. Dateisystem auf dem verschlüsselten Gerät anlegen

    Wenn der Kernel die verschlüsselte Partition kennt, können Sie ein Dateisystem auf ihr anlegen. Benutzen Sie dazu den Befehl newfs(8). Da ein Dateisystem vom Typ UFS2 sehr viel sc