diff --git a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml b/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
index dada9dd02f..5807a46954 100644
--- a/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/config/chapter.sgml
@@ -1,3491 +1,3492 @@
ChernLeeGeschrieben von MikeSmithNach einem Tutorium von MattDillonBasiert ebenfalls auf tuning(7) von MartinHeinenÜbersetzt von Konfiguration und TuningÜbersichtSystem-KonfigurationSystem-OptimierungEin korrekt konfiguriertes System kann die Arbeit,
die bei der zukünftigen Pflege und bei Migrationen des Systems
entsteht, erheblich reduzieren. Dieses Kapitel beschreibt die
Konfiguration von &os; sowie Maßnahmen zur Leistungssteigerung
von &os;-Systemen.Nachdem Sie dieses Kapitel durchgearbeitet haben,
werden Sie Folgendes wissen:Wie Sie effizient Dateisysteme und
Swap-Partitionen auf Ihrer Festplatte einrichten.Die Grundlagen der Konfiguration mit
rc.conf und des Systems zum Starten
von Anwendungen in /usr/local/etc/rc.d.Wie Sie Netzwerkkarten konfigurieren und testen.Wie Sie virtuelle Hosts und Netzwerkgeräte
konfigurieren.Wie Sie die verschiedenen Konfigurationsdateien
in /etc benutzen.Wie Sie mit sysctl-Variablen &os;
einstellen können.Wie Sie die Platten-Performance einstellen und Kernel-Parameter
modifizieren können.Bevor Sie dieses Kapitel lesen, sollten Siedie Grundlagen von &unix; und &os; ()
verstehen.Damit vertraut sein, wie Sie einen Kernel konfigurieren
und kompilieren ().Vorbereitende KonfigurationLayout von PartitionenLayout von Partitionen/etc/var/usrPartitionenWenn Sie Dateisysteme mit &man.bsdlabel.8; oder
&man.sysinstall.8; anlegen, sollten Sie beachten, dass
Festplatten auf Daten in den äußeren Spuren
schneller zugreifen können als auf Daten in den
inneren Spuren. Daher sollten die kleineren oft benutzten
Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition,
an den äußeren Rand der Platte gelegt werden.
Die größeren Partitionen wie /usr sollten in die inneren Bereiche
gelegt werden. Es empfiehlt sich, die Partitionen in einer
ähnlichen Reihenfolge wie Root-Partition, Swap, /var und /usr anzulegen.Die Größe 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.Ein paar Mal wird es vorkommen, dass viel Festplattenspeicher
in /var/tmp gebraucht
wird. Wenn neue Software mit &man.pkg.add.1; installiert wird,
extrahieren die Paketwerkzeuge eine vorübergehende Kopie der
Pakete unter /var/tmp. Die
Installation grosser Softwarepakete wie
Firefox oder
Openoffice 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 &man.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.Die automatische Partitionierung von &man.sysinstall.8;
mit Auto-defaults legt manchmal zu kleine
/ und /var-Partition an. Partitionieren Sie
weise und großzügig.Swap PartitionSwap-PartitionGrößeSwap-PartitionAls Daumenregel sollten Sie doppelt soviel Speicher
für die Swap-Partition vorsehen, als Sie Hauptspeicher
haben. Verfügt die Maschine beispielsweise über
128 Megabyte Hauptspeicher, sollten Sie 256 Megabyte
für den Swap-Bereich vorsehen. Systeme mit weniger Speicher
werden wahrscheinlich mit viel mehr Swap mehr leisten. Es
wird nicht empfohlen, weniger als 256 Megabyte Swap einzurichten.
Außerdem sollten Sie künftige Speichererweiterungen
beachten, wenn Sie die Swap-Partition einrichten. Die
VM-Paging-Algorithmen im Kernel sind so eingestellt, dass
Sie am besten laufen, wenn die Swap-Partition mindestens
doppelt so groß wie der Hauptspeicher ist. Zu wenig
Swap kann zu einer Leistungsverminderung im
VM page scanning
Code führen, sowie Probleme verursachen, wenn Sie später
mehr Speicher in Ihre Maschine bauen.Auf größeren Systemen mit mehreren SCSI-Laufwerken
(oder mehreren IDE-Laufwerken an unterschiedlichen Controllern)
empfehlen wir Ihnen, Swap-Bereiche auf bis zu
vier Laufwerken einzurichten. Diese Swap-Partitionen sollten
ungefähr dieselbe Größe haben. Der Kernel
kann zwar mit beliebigen Größen umgehen, aber
die internen Datenstrukturen skalieren bis zur vierfachen
Größe der größten Partition. Ungefähr
gleich große Swap-Partitionen erlauben es dem Kernel,
den Swap-Bereich optimal über die Laufwerke zu verteilen.
Große Swap-Bereiche, auch wenn sie nicht oft gebraucht
werden, sind nützlich, da sich ein speicherfressendes
Programm unter Umständen auch ohne einen Neustart des Systems
beenden lässt.Warum partitionieren?Gegen eine einzelne Partition sprechen mehrere Gründe.
Jede Partition hat im Betrieb unterschiedliche Eigenschaften
und die Trennung der Partitionen erlaubt es, die Dateisysteme
an diese Eigenschaften anzupassen. Die Root- und /usr-Partitionen weisen meist nur
lesende Zugriffe auf, während /var und /var/tmp hauptsächlich
beschrieben werden.Indem Sie ein System richtig partitionieren, verhindern
Sie, dass eine Fragmentierung in den häufig beschriebenen
Partitionen auf die meist nur gelesenen Partitionen
übergreift. Wenn Sie die häufig beschriebenen
Partitionen an den Rand der Platte, legen, dann wird die
I/O-Leistung diesen Partitionen steigen.
Die I/O-Leistung ist natürlich auch für große
Partitionen wichtig, doch erzielen Sie eine größere
Leistungssteigerung, wenn Sie /var an den Rand der Platte legen.
Schließlich sollten Sie noch die Stabilität des Systems
beachten. Eine kleine Root-Partition, auf die meist nur lesend
zugegriffen wird, überlebt einen schlimmen Absturz
wahrscheinlich eher als eine große Partition.Basiskonfigurationrc-Dateienrc.confInformationen zur Systemkonfiguration sind hauptsächlich
in /etc/rc.conf, die meist beim Start
des Systems verwendet wird, abgelegt. Der Name der Datei zeigt
ihren Zweck an: Sie enthält die Konfigurationen für
die rc* Dateien.In rc.conf werden die Vorgabewerte aus
/etc/defaults/rc.conf überschrieben.
Die Vorgabedatei sollte nicht nach /etc kopiert werden, da sie die
Vorgabewerte und keine Beispiele enthält. Jede systemspezifische
Änderung wird in rc.conf vorgenommen.Um den administrativen Aufwand gering zu halten, existieren
in geclusterten Anwendungen mehrere Strategien,
globale Konfigurationen von systemspezifischen Konfigurationen
zu trennen. Der empfohlene Weg hält die globale Konfiguration
in einer separaten Datei z.B. rc.conf.site.
Diese Datei wird dann in /etc/rc.conf,
die nur systemspezifische Informationen enthält, eingebunden.Da rc.conf von &man.sh.1; gelesen
wird, ist das einfach zu erreichen:rc.conf: . /etc/rc.conf.site
hostname="node15.example.com"
network_interfaces="fxp0 lo0"
ifconfig_fxp0="inet 10.1.1.1"rc.conf.site: defaultrouter="10.1.1.254"
saver="daemon"
blanktime="100"rc.conf.site kann dann auf jedes
System mit rsync verteilt werden,
rc.conf bleibt dabei systemspezifisch.Bei einem Upgrade des Systems mit &man.sysinstall.8; oder
make world wird rc.conf
nicht überschrieben, so dass die Systemkonfiguration
erhalten bleibt.Konfiguration von AnwendungenInstallierte Anwendungen haben typischerweise
eigene Konfigurationsdateien, die eine eigene Syntax
verwenden. Damit diese Dateien leicht von der
Paketverwaltung gefunden und verwaltet werden können,
ist es wichtig, sie vom Basissystem zu trennen./usr/local/etcFü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.defaultAnhand der Dateigröße erkennen Sie, dass sich
nur srm.conf geändert hat. Eine
spätere Aktualisierung des Apache-Ports
überschreibt diese Datei nicht.TomRhodesBeigetragen von Start von DienstenDiensteViele Benutzer installieren Software Dritter auf &os;
mithilfe der Ports-Sammlung. Häufig soll die
Software bei einem Systemstart mitgestartet werden.
Beispielsweise sollen die Dienste
mail/postfix oder
www/apache13 nach
einem Systemstart laufen. Dieser Abschnitt stellt
die Startprozeduren für Software Dritter vor.Unter &os; werden die meisten der im System enthaltenen
Dienste wie &man.cron.8; mithilfe von Systemskripten gestartet.
Diese Skripten sind abhängig von der &os;- oder
Hersteller-Version. Allerdings kann ein Dienst mit
einfachen Skripten gestartet werden.Dienste über das
rc.d-System startenMit 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=`set_rcvar`
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"}
utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}
pidfile="${utility_pidfile}"
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 &man.rcorder.8; und lässt sich
über rc.conf leichter
konfigurieren.Andere Arten, um Dienste zu startenDienste wie POP3 oder
IMAP können über
&man.inetd.8; gestartet werden. Nach der Installation
der Anwendung aus der Ports-Sammlung muss eine
Konfigurationszeile in der Datei
/etc/inetd.conf hinzugefügt oder
in der aktuellen Konfiguration durch Entfernen der Kommentare
aktiviert werden. Der Abschnitt beschreibt den
inetd und dessen Konfiguration.Systemdienste können auch mit &man.cron.8; gestartet
werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil
&man.cron.8; die Prozesse unter dem Eigentümer der
crontab startet, ist es möglich, dass
Dienste von nicht-root Benutzern gestartet
und gepflegt werden können.Dies nutzt eine Eigenschaft von &man.cron.8;:
Für die Zeitangabe kann @reboot
eingesetzt werden. Damit wird das Kommando gestartet, wenn
&man.cron.8; kurz nach dem Systemboot gestartet wird.TomRhodesBeigetragen von Programme mit cron startencronEin sehr nützliches Werkzeug von &os; ist &man.cron.8;.
cron läuft im Hintergrund und
überprüft fortlaufend die Datei
/etc/crontab. Beim Start sucht
cron neue crontab-Dateien
im Verzeichnis /var/cron/tabs.
In den crontab-Dateien wird
festgelegt, welche Programme zu welchem Zeitpunkt laufen sollen.Das Werkzeug cron verwendet
zwei verschiedene Konfigurationsdateien: Die
System-crontab und die
Benutzer-crontab. Der einzige Unterschied
zwischen beiden Formaten ist das sechste Feld. In der
System-crontab gibt das sechste Feld das
Konto an, unter dem ein Kommando läuft. Aus der
System-crontab können daher
Kommandos unter beliebigen Konten gestartet werden.
In der Benutzer-crontab gibt das
sechste Feld das auszuführende Kommando an. Alle
Kommandos laufen unter dem Konto, unter dem die
crontab erstellt wurde (ein
wichtiges Sicherheitsmerkmal).Benutzer können mit Benutzer-crontabs
ohne root-Rechte Befehle terminieren.
Die Kommandos in Benutzer-crontabs laufen
unter dem Benutzer, der die crontab
erstellt hat.Der Benutzer root kann, wie
jeder andere Benutzer, eine Benutzer-crontab
besitzen. Die Benutzer-crontab von
root ist nicht mit der Datei
/etc/crontab, der
System-crontab, zu verwechseln.
Normalerweise besitzt root, wegen
der Existenz der System-crontab, keine
eigene Benutzer-crontab.Der folgende Auszug aus der System-crontab/etc/crontab zeigt den Aufbau
einer crontab-Datei:# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#
#minute hour mday month wday who command
#
#
*/5 * * * * root /usr/libexec/atrun Das Zeichen # leitet, wie in
den meisten Konfigurationsdateien, einen Kommentar ein.
Benutzen Sie Kommentare, um die Funktion eines Eintrags
zu erläutern. Kommentare müssen in einer
extra Zeile stehen. Sie können nicht in derselben
Zeile wie ein Kommando stehen, da sie sonst Teil des
Kommandos wären. Leerzeilen in dieser Datei
werden ignoriert.Umgebungsvariablen werden mit dem Gleichheits-Zeichen
(=) festgelegt. Im Beispiel werden
die Variablen SHELL, PATH
und HOME definiert. Wenn die Variable
SHELL nicht definiert wird, benutzt
cron die Shell sh.
Wird die Variable PATH nicht gesetzt,
müssen alle Pfadangaben absolut sein, da es keinen
Vorgabewert für PATH gibt. Der
Vorgabewert für HOME ist das
Heimatverzeichnis des Accounts, dem die
crontab gehört.In dieser Zeile werden sieben Felder beschrieben:
minute, hour,
mday, month,
wday, who
und command. Die ersten Felder
legen den Zeitpunkt fest, an dem ein Kommando laufen
soll. Das Feld minute legt die
Minute fest, das Feld hour die
Stunde, das Feld mday den Tag
des Monats. Im Feld month
wird der Monat und im Feld wday
der Wochentag festgelegt. Alle Felder müssen
numerische Werte enthalten und die Zeitangaben sind
im 24-Stunden-Format. Das Feld who
gibt es nur in der Datei /etc/crontab
und gibt den Account an, unter dem das Kommando laufen
soll. In den crontab-Dateien
einzelner Accounts existiert dieses Feld nicht. Im
letzten Feld wird schließlich das auszuführende
Kommando angegeben.Diese Zeile definiert die Zeitpunkte an denen das
Kommando atrun laufen soll. Beachten
Sie die Zeichenfolge */5 gefolgt von
mehreren *-Zeichen. Das Zeichen
* ist ein Platzhalter und steht
für jede mögliche Zeit.
Diese Zeile führt das Kommando atrun
unter dem root-Account alle fünf
Minuten aus. Mehr über das Kommando
atrun erfahren Sie in der
Hilfeseite &man.atrun.8;.Bei den Kommandos können beliebige Optionen
angegeben werden. Wenn das Kommando zu lang ist und
auf der nächsten Zeile fortgesetzt werden soll,
muss am Ende der Zeile das Fortsetzungszeichen
(\) angegeben werden.Bis auf das sechste Feld, das den Account angibt, sieht
jede crontab-Datei so wie das Beispiel
aus. Das sechste Feld existiert nur in der Systemdatei
/etc/crontab. In den restlichen
crontab-Dateien fehlt dieses Feld.crontab installierenDie nachstehende Prozedur gilt nur für
Benutzer-crontabs. Die
System-crontab können
Sie einfach mit Ihrem Lieblingseditor editieren.
Das Werkzeug cron bemerkt, dass
sich die Datei geändert hat und wird die neue
Version benutzen. Lesen Sie bitte auch die FAQ
zur Meldung root: not found.Eine Benutzer-crontab, beispielsweise
die Datei crontab, können Sie mit
jedem Editor erstellen. Die Benutzer-crontab
installieren Sie mit dem nachstehenden Befehl:&prompt.root; crontab crontabDas Argument zum Befehl crontab
ist die vorher erstellte Datei crontab.Der Befehl crontab -l zeigt
die installierte crontab-Datei an.Benutzer, die eine eigene crontab-Datei
ohne Vorlage erstellen wollen, können den Befehl
crontab -e verwenden. Dieser Befehl
ruft einen Editor auf und installiert beim Verlassen des
Editors die crontab-Datei.Wollen Sie die installierte
Benutzer-crontab entfernen, rufen Sie den
Befehl crontab mit der Option
auf.TomRhodesBeigetragen von Das rc-System für Systemdienste2002 wurde das rc.d-System von
NetBSD zum Start von Systemdiensten in &os; integriert.
Die zu diesem System gehörenden Dateien sind im
Verzeichnis /etc/rc.d abgelegt.
Die Skripten in diesem Verzeichnis akzeptieren die
Optionen ,
und . Beispielsweise kann
&man.sshd.8; mit dem nachstehenden Kommando neu gestartet
werden:&prompt.root; /etc/rc.d/sshd restartAnalog können Sie andere Dienste starten und stoppen.
Normalerweise werden die Dienste beim Systemstart über
Einträge in der Datei &man.rc.conf.5; automatisch gestartet.
Der Network Address
Translation Dæmon wird zum Beispiel mit dem folgenden
Eintrag in /etc/rc.conf aktiviert:natd_enable="YES"Wenn dort bereits die Zeile
existiert, ändern Sie einfach in
. Die rc-Skripten starten, wie unten
beschrieben, auch abhängige Dienste.Da das rcNG-System primär
zum automatischen Starten und Stoppen von Systemdiensten
dient, funktionieren die Optionen ,
und nur,
wenn die entsprechenden Variablen in
/etc/rc.conf gesetzt sind. Beispielsweise
funktioniert das Kommando sshd restart
nur dann, wenn in /etc/rc.conf die
Variable sshd_enable auf
gesetzt wurde. Wenn Sie die Optionen ,
oder
unabhängig von den Einstellungen in
/etc/rc.conf benutzen wollen,
müssen Sie den Optionen mit dem Präfix
one verwenden. Um beispielsweise
sshd unabhängig von den
Einstellungen in /etc/rc.conf neu
zu starten, benutzen Sie das nachstehende Kommando:&prompt.root; /etc/rc.d/sshd onerestartOb ein Dienst in /etc/rc.conf
aktiviert ist, können Sie leicht herausfinden, indem
Sie das entsprechende rc.d-Skript
mit der Option aufrufen. Ein
Administrator kann beispielsweise wie folgt prüfen, ob
der sshd-Dienst in
/etc/rc.conf aktiviert ist:&prompt.root; /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YESDie zweite Zeile (# sshd) wird
vom Kommando sshd ausgegeben; sie
kennzeichnet nicht die Eingabeaufforderung von
root.Ob ein Dienst läuft, kann mit der Option
abgefragt werden. Das folgende
Kommando überprüft, ob der sshd
auch wirklich gestartet wurde:&prompt.root; /etc/rc.d/sshd status
sshd is running as pid 433.Einige Dienste können über die Option
neu initialisiert werden. Dazu wird
dem Dienst über ein Signal mitgeteilt,
dass er seine Konfigurationsdateien neu einlesen soll.
Oft wird dazu das Signal SIGHUP
verwendet. Beachten Sie aber, dass nicht alle Dienste diese
Option unterstützen.Die meisten Systemdienste werden beim Systemstart vom
rc.d-System gestartet. Zum Beispiel
aktiviert das Skript bgfsck die Prüfung
von Dateisystemen im Hintergrund. Das Skript gibt die folgende
Meldung aus, wenn es gestartet wird:Starting background file system checks in 60 seconds.Viele Systemdienste hängen von anderen Diensten
ab. NIS und andere RPC-basierende Systeme hängen
beispielsweise von dem rpcbind-Dienst
(portmapper) ab. Im Kopf der Startskripten befinden sich
die Informationen über Abhängigkeiten von anderen
Diensten und weitere Metadaten.Mithilfe dieser Daten
bestimmt das Programm &man.rcorder.8; beim Systemstart die
Startreihenfolge der Dienste.Folgende Schlüsselwörter müssen im Kopf aller
Startskripten verwendet werden (da sie von &man.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
&man.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 &man.rc.8; sowie &man.rc.subr.8;. Wenn Sie
Ihre eigenen rc.d-Skripte schreiben
wollen, sollten Sie den Artikel
Practical rc.d
scripting in BSD lesen.MarcFonvieilleBeigetragen von Einrichten von NetzwerkkartenNetzwerkkarteneinrichtenEin Rechner ohne Netzanschluss ist heute nicht mehr
vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu
den alltäglichen Aufgaben eines &os; Administrators.Bestimmen des richtigen TreibersNetzwerkkartenTreiberBevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen,
wissen welchen Chip die Karte benutzt und bestimmen, ob es sich
um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der
unterstützten PCI- und ISA-Karten finden Sie in der
Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre
Karte dort aufgeführt ist.Wenn Sie wissen, dass Ihre Karte unterstützt wird,
müssen Sie den Treiber für Ihre Karte bestimmen.
/usr/src/sys/conf/NOTES und
/usr/src/sys/arch/conf/NOTES
enthalten eine
Liste der verfügbaren Treiber mit Informationen zu den
unterstützten Chipsätzen und Karten. Wenn Sie sich nicht
sicher sind, ob Sie den richtigen Treiber ausgewählt haben,
lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält
weitere Informationen über die unterstützten Geräte
und macht auch auf mögliche Probleme aufmerksam.Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie
meistens nicht lange nach dem passenden Treiber zu suchen. Die
Treiber zu diesen Karten sind schon im
GENERIC-Kernel enthalten und die Karte sollte
während des Systemstarts erkannt werden:dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, autoIm Beispiel erkennt das System zwei Karten, die den
&man.dc.4; Treiber benutzen.Ist der Treiber für Ihre Netzwerkkarte nicht
in GENERIC enthalten, müssen
Sie den Treiber laden, um die Karte zu benutzen.
Sie können den Treiber auf zwei Arten laden:Am einfachsten ist es, das Kernelmodul für
Ihre Karte mit &man.kldload.8; zu laden. Allerdings
gibt es nicht für alle Karten Kernelmodule;
zum Beispiel gibt es keine Kernelmodule für
ISA-Karten.Alternativ können Sie den Treiber für die
Karte fest in den Kernel einbinden. Schauen Sie sich dazu
/usr/src/sys/conf/NOTES,
/usr/src/sys/arch/conf/NOTES
und die Hilfeseite des Treibers, den Sie in den Kernel
einbinden möchten, an. Die Übersetzung des Kernels
wird in beschrieben. Wenn
Ihre Karte während des Systemstarts vom Kernel
(GENERIC) erkannt wurde, müssen
Sie den Kernel nicht neu übersetzen.&windows;-NDIS-Treiber einsetzenNDISNDISulator&windows;-TreiberMicrosoft WindowsMicrosoft WindowsGerätetreiberKLD (kernel loadable object)Leider stellen nach wie vor viele Unternehmen die
Spezifikationen ihrer Treiber der Open Source Gemeinde
nicht zur Verfügung, weil sie diese Informationen
als Geschäftsgeheimnisse betrachten. Daher haben die
Entwickler von FreeBSD und anderen Betriebssystemen nur
zwei Möglichkeiten. Entweder versuchen sie in einem
aufwändigen Prozess den Treiber durch
Reverse Engineering
nachzubauen, oder sie versuchen, die vorhandenen
Binärtreiber der µsoft.windows;-Plattform zu
verwenden. Die meisten Entwickler, darunter auch die an
FreeBSD beteiligten, haben sich für den zweiten Ansatz
entschieden.Bill Paul (wpaul) ist es zu verdanken, dass es seit
FreeBSD 5.3-RELEASE eine
native Unterstützung der
Network Driver Interface
Specification (NDIS) gibt. Der
FreeBSD NDISulator (auch als Project Evil bekannt) nutzt
den binären &windows;-Treiber, indem er diesem vorgibt,
unter &windows; zu laufen. Da der &man.ndis.4;-Treiber
eine &windows;-Binärdatei nutzt, kann er nur auf
&i386;- und amd64-Systemen verwendet werden.Der &man.ndis.4;-Treiber unterstützt primär
PCI-, CardBus- sowie PCMCIA-Geräte, USB-Geräte
werden hingegen noch nicht unterstützt.Um den NDISulator zu verwenden, benötigen Sie drei
Dinge:Die KernelquellenDen &windowsxp;-Binärtreiber
(mit der Erweiterung .SYS)Die Konfigurationsdatei des &windowsxp;-Treibers
(mit der Erweiterung .INF)Suchen Sie die Dateien für Ihre Karte. Diese
befinden sich meistens auf einer beigelegten CD-ROM, oder
können von der Internetseite des Herstellers
heruntergeladen werden. In den folgenden Beispielen werden
die Dateien W32DRIVER.SYS und
W32DRIVER.INF verwendet.Sie können einen &windows;/i386-Treiber nicht
unter &os;/amd64 einsetzen, vielmehr benötigen Sie
dafür einen &windows;/amd64-Treiber.Als Nächstes kompilieren Sie den binären
Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als
root &man.ndisgen.8; auf:&prompt.root; ndisgen /path/to/W32DRIVER.INF/path/to/W32DRIVER.SYS&man.ndisgen.8; arbeitet interaktiv, benötigt es
weitere Informationen, so fragt es Sie danach. Als Ergebnis
erhalten Sie ein Kernelmodul im Arbeitsverzeichnis, das Sie
wie folgt laden können:&prompt.root; kldload ./W32DRIVER.koNeben dem vorhin erzeugten Kernelmodul müssen Sie
auch die Kernelmodule ndis.ko und
if_ndis.ko laden. Diese Module sollten
automatisch geladen werden, wenn Sie ein von &man.ndis.4;
abhängiges Modul laden. Wollen Sie die Module hingegen
manuell laden, geben Sie die folgenden Befehle ein:&prompt.root; kldload ndis
&prompt.root; kldload if_ndisDer erste Befehl lädt dabei den NDIS-Miniport-Treiber,
der zweite das tatsächliche Netzwerkgerät.Überprüfen Sie nun die Ausgabe von &man.dmesg.8;
auf eventuelle Fehler während des Ladevorgangs. Gab es
dabei keine Probleme, sollten Sie eine Ausgabe ähnlich
der folgenden erhalten:ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54MbpsAb jetzt können Sie mit dem Gerät
ndis0 wie mit jeder anderen
Gerätedatei (etwa dc0)
arbeiten.Wie jedes Kernelmodul können auch die NDIS-Module
beim Systemstart automatisch geladen werden. Dazu kopieren
Sie das erzeugte Modul (W32DRIVER.ko)
in das Verzeichnis /boot/modules. Danach
fügen Sie die folgende Zeile in
/boot/loader.conf ein:W32DRIVER_load="YES"Konfiguration von NetzwerkkartenNetzwerkkarteneinrichtenNachdem der richtige Treiber für die Karte geladen ist,
muss die Karte konfiguriert werden. Unter Umständen ist
die Karte schon während der Installation mit
sysinstall konfiguriert worden.Das nachstehende Kommando zeigt die Konfiguration der Karten
eines Systems an:&prompt.user; ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:a0:cc:da:da:db
media: Ethernet 10baseT/UTP
status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500In alten Versionen von &os; müssen Sie vielleicht
noch auf der Kommandozeile von &man.ifconfig.8;
angeben. Hinweise zum Gebrauch von &man.ifconfig.8; entnehmen
Sie bitte der Hilfeseite. Beachten Sie, dass in diesem
Beispiel die IPv6-Ausgaben (inet6 etc.)
ausgelassen wurden.Im Beispiel werden Informationen zu den folgenden Geräten
angezeigt:dc0: Der erste
Ethernet-Adapterdc1: Der zweite
Ethernet-Adapterlp0: Die parallele
Schnittstellelo0: Das Loopback-Gerättun0: Das von
ppp benutzte Tunnel-GerätDer Name der Netzwerkkarte wird aus dem Namen des Treibers und
einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in
der die Geräte beim Systemstart erkannt wurden. Die dritte
Karte, die den &man.sis.4; Treiber benutzt, würde
beispielsweise sis2 heißen.Der Adapter dc0 aus dem Beispiel ist
aktiv. Sie erkennen das an den folgenden Hinweisen:UP bedeutet, dass die Karte
konfiguriert und aktiv ist.Der Karte wurde die Internet-Adresse (inet)
192.168.1.3 zugewiesen.Die Subnetzmaske ist richtig
(0xffffff00 entspricht
255.255.255.0).Die Broadcast-Adresse 192.168.1.255 ist richtig.Die MAC-Adresse der Karte (ether)
lautet 00:a0:cc:da:da:da.Die automatische Medienerkennung ist aktiviert
(media: Ethernet autoselect (100baseTX
<full-duplex>)). Der Adapter
dc1 benutzt das Medium
10baseT/UTP. Weitere Informationen
über die einstellbaren Medien entnehmen
Sie bitte der Hilfeseite des Treibers.Der Verbindungsstatus (status) ist
active, das heißt es wurde ein
Trägersignal entdeckt. Für
dc1 wird status: no
carrier angezeigt. Das ist normal, wenn kein Kabel
an der Karte angeschlossen ist.Wäre die Karte nicht konfiguriert, würde die Ausgabe
von &man.ifconfig.8; so aussehen:dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
ether 00:a0:cc:da:da:daSie brauchen die Berechtigungen von root, um
Ihre Karte zu konfigurieren. Die Konfiguration kann auf der
Kommandozeile mit &man.ifconfig.8; erfolgen, allerdings
müsste sie dann nach jedem Neustart wiederholt werden.
Dauerhaft wird die Karte in /etc/rc.conf
konfiguriert.Öffnen Sie /etc/rc.conf mit Ihrem
Lieblingseditor und fügen Sie für jede Karte Ihres
Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden
die nachstehenden Zeilen eingefügt:ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"Ersetzen Sie dc0,
dc1 usw. durch die Gerätenamen Ihrer
Karten und setzen Sie die richtigen IP-Adressen ein. Die
Hilfeseiten des Treibers und &man.ifconfig.8; enthalten weitere
Einzelheiten über verfügbare Optionen. Die Syntax von
/etc/rc.conf wird in &man.rc.conf.5;
erklärt.Wenn Sie das Netz während der Installation
konfiguriert haben, existieren vielleicht schon Einträge
für Ihre Karten. Überprüfen Sie
/etc/rc.conf bevor Sie weitere Zeilen
hinzufügen.In /etc/hosts können Sie die Namen
und IP-Adressen der Rechner Ihres LANs eintragen. Weitere
Informationen entnehmen Sie bitte &man.hosts.5; und
/usr/share/examples/etc/hosts.Test und FehlersucheNachdem Sie die notwendigen Änderungen in
/etc/rc.conf vorgenommen haben, führen
Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter
konfiguriert und Sie stellen sicher, dass der Start ohne
Konfigurationsfehler erfolgt.Wenn das System gestartet ist, sollten Sie die Netzwerkkarten
testen.Test der Ethernet-KarteNetzwerkkartentestenMit zwei Tests können Sie prüfen, ob die
Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit
ping den Adapter selbst und sprechen Sie dann
eine andere Maschine im LAN an.Zuerst, der Test des Adapters:&prompt.user; ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 msJetzt versuchen wir, eine andere Maschine im LAN zu
erreichen:&prompt.user; ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 msSie können auch den Namen der Maschine anstelle von
192.168.1.2 benutzen, wenn Sie
/etc/hosts entsprechend eingerichtet
haben.FehlersucheNetzwerkkartenFehlersucheFehler zu beheben, ist immer sehr mühsam.
Indem Sie die einfachen Sachen zuerst prüfen,
erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel?
Sind die Netzwerkdienste richtig konfiguriert? Funktioniert
die Firewall? Wird die Netwerkkarte von &os;
unterstützt? Lesen Sie immer die Hardware-Informationen
des Releases, bevor Sie einen Fehlerbericht einsenden.
Aktualisieren Sie Ihre &os;-Version
auf -STABLE. Suchen Sie in den Archiven der Mailinglisten
oder auf dem Internet nach bekannten Lösungen.Wenn die Karte funktioniert, die Verbindungen aber
zu langsam sind, lesen Sie bitte die Hilfeseite
&man.tuning.7;. Prüfen Sie auch die
Netzwerkkonfiguration, da falsche Einstellungen die
Ursache für langsame Verbindungen sein können.Wenn Sie viele device timeout
Meldungen in den Systemprotokollen finden, prüfen
Sie, dass es keinen Konflikt zwischen der Netzwerkkarte
und anderen Geräten Ihres Systems gibt.
Überprüfen Sie nochmals die Verkabelung.
Unter Umständen benötigen Sie eine neue
Netzwerkkarte.Wenn Sie in den Systemprotokollen
watchdog timeout Fehlermeldungen
finden, kontrollieren Sie zuerst die Verkabelung.
Überprüfen Sie dann, ob der PCI-Steckplatz der
Karte Bus Mastering unterstützt. Auf einigen
älteren Motherboards ist das nur für einen
Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie
in der Dokumentation Ihrer Karte und Ihres Motherboards
nach, ob das vielleicht die Ursache des Problems sein
könnte.Die Meldung No route to host
erscheint, wenn Ihr System ein Paket nicht zustellen
kann. Das kann vorkommen weil beispielsweise keine
Default-Route gesetzt wurde oder das Netzwerkkabel
nicht richtig steckt. Schauen Sie in der Ausgabe
von netstat -rn nach, ob eine
Route zu dem Zielsystem existiert. Wenn nicht, lesen
Sie bitte das .Die Meldung ping: sendto: Permission
denied wird oft von einer falsch konfigurierten
Firewall verursacht. Wenn keine Regeln definiert wurden,
blockiert eine aktivierte Firewall alle Pakete, selbst
einfache ping-Pakete. Weitere
Informationen erhalten Sie in .Falls die Leistung der Karte schlecht ist, setzen
Sie die Medienerkennung von autoselect
(automatisch) auf das richtige Medium. In vielen Fällen
löst diese Maßnahme Leistungsprobleme. Wenn
nicht, prüfen Sie nochmal die Netzwerkeinstellungen
und lesen Sie die Hilfeseite &man.tuning.7;.Virtual Hostsvirtual hostsIP-AliaseEin gebräuchlicher Zweck von &os; ist das
virtuelle Hosting, bei dem ein Server im Netzwerk wie
mehrere Server aussieht. Dies wird dadurch erreicht,
dass einem Netzwerkinterface mehrere Netzwerk-Adressen
zugewiesen werden.Ein Netzwerkinterface hat eine echte
Adresse und kann beliebig viele alias Adressen
haben. Die Aliase werden durch entsprechende alias Einträge
in /etc/rc.conf festgelegt.Ein alias Eintrag für das Interface
fxp0 sieht wie folgt aus:ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"Beachten Sie, dass die Alias-Einträge mit
alias0 anfangen müssen und
weiter hochgezählt werden, das heißt
_alias1, _alias2,
und so weiter. Die Konfiguration der Aliase hört
bei der ersten fehlenden Zahl auf.Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch
zum Glück einfach. Für jedes Interface muss es
eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig
beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann
eine Netzwerkmaske, die mit 1 gefüllt
ist (also 255.255.255.255
oder hexadezimal
0xffffffff).Als Beispiel betrachten wir den Fall, in dem
fxp0 mit zwei Netzwerken verbunden
ist: dem Netzwerk 10.1.1.0 mit der
Netzwerkmaske 255.255.255.0
und dem Netzwerk 202.0.75.16 mit der
Netzwerkmaske 255.255.255.240.
Das System soll die Adressen 10.1.1.1
bis 10.1.1.5 und
202.0.75.17 bis
202.0.75.20 belegen.
Wie eben beschrieben, hat nur die erste Adresse in einem
Netzwerk (hier 10.0.1.1
und 202.0.75.17) die
richtige Netzwerkmaske. Alle anderen Adressen
(10.1.1.2 bis 10.1.1.5 und 202.0.75.18 bis 202.0.75.20) erhalten die Maske
255.255.255.255.Die folgenden Einträge in
/etc/rc.conf konfigurieren den Adapter
entsprechend dem Beispiel:ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"Konfigurationsdateien/etc LayoutKonfigurationsdateien finden sich in einigen Verzeichnissen
unter anderem in:/etcEnthält generelle Konfigurationsinformationen,
die Daten hier sind systemspezifisch./etc/defaultsDefault Versionen der Konfigurationsdateien./etc/mailEnthält die &man.sendmail.8; Konfiguration
und weitere MTA Konfigurationsdateien./etc/pppHier findet sich die Konfiguration für
die User- und Kernel-ppp Programme./etc/namedbDas Vorgabeverzeichnis, in dem Daten von
&man.named.8; gehalten werden. Normalerweise
werden hier named.conf und Zonendaten
abgelegt./usr/local/etcInstallierte Anwendungen legen hier ihre
Konfigurationsdateien ab. Dieses Verzeichnis kann
Unterverzeichnisse für bestimmte Anwendungen
enthalten./usr/local/etc/rc.dOrt für Start- und Stopskripten installierter
Anwendungen./var/dbAutomatisch generierte systemspezifische Datenbanken,
wie die Paket-Datenbank oder die
locate-Datenbank.HostnamenhostnameDNS/etc/resolv.confresolv.confWie der &os;-Resolver auf das Internet Domain Name
System (DNS) zugreift, wird in /etc/resolv.conf
festgelegt.Die gebräuchlichsten Einträge in
/etc/resolv.conf sind:nameserverDie IP-Adresse eines Nameservers, den
der Resolver abfragen soll. Bis zu drei Server werden
in der Reihenfolge, in der sie aufgezählt
sind, abgefragt.searchSuchliste mit Domain-Namen zum Auflösen von
Hostnamen. Die Liste wird normalerweise durch den
Domain-Teil des lokalen Hostnamens festgelegt.domainDer lokale Domain-Name.Beispiel für eine typische
resolv.conf:search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30Nur eine der Anweisungen search
oder domain sollte benutzt werden.Wenn Sie DHCP benutzen, überschreibt &man.dhclient.8;
für gewöhnlich resolv.conf
mit den Informationen vom DHCP-Server./etc/hostshosts/etc/hosts ist eine einfache textbasierte
Datenbank, die aus alten Internetzeiten stammt. Zusammen
mit DNS und NIS stellt sie eine Abbildung zwischen Namen und
IP-Adressen zur Verfügung. Anstatt &man.named.8;
zu konfigurieren, können hier lokale Rechner, die über
ein LAN verbunden sind, eingetragen werden. Lokale Einträge
für gebräuchliche Internet-Adressen in
/etc/hosts verhindern die Abfrage eines
externen Servers und beschleunigen die Namensauflösung.# $FreeBSD$
#
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file. 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 foobar2Weitere Informationen entnehmen Sie bitte &man.hosts.5;.Konfiguration von LogdateienLogdateiensyslog.confsyslog.confsyslog.conf ist die Konfigurationsdatei
von &man.syslogd.8;. Sie legt fest, welche
syslog Meldungen in welche
Logdateien geschrieben werden.# $FreeBSD$
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.* /var/log/all.log
# uncomment this to enable logging to a remote log host named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.logWeitere Informationen enthält &man.syslog.conf.5;.newsyslog.confnewsyslog.confDie Konfigurationsdatei für &man.newsyslog.8;, das
normalerweise von &man.cron.8; aufgerufen wird, ist
newsyslog.conf. &man.newsyslog.8;
stellt fest, ob Logdateien archiviert oder verschoben
werden müssen. So wird logfile
nach logfile.0 geschoben und
logfile.0 nach logfile.1
usw. Zudem können Logdateien mit &man.gzip.1;
komprimiert werden. Die Namen der Logdateien sind dann
logfile.0.gz, logfile.1.gz
usw.newsyslog.conf legt fest, welche
Logdateien wann bearbeitet und wie viele Dateien behalten werden.
Logdateien können auf Basis ihrer Größe oder zu
einem gewissen Zeitpunkt archiviert bzw. umbenannt werden.# configuration file for newsyslog
# $FreeBSD$
#
# filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron 600 3 100 * Z
/var/log/amd.log 644 7 100 * Z
/var/log/kerberos.log 644 7 100 * Z
/var/log/lpd-errs 644 7 100 * Z
/var/log/maillog 644 7 * @T00 Z
/var/log/sendmail.st 644 10 * 168 B
/var/log/messages 644 5 100 * Z
/var/log/all.log 600 7 * @T00 Z
/var/log/slip.log 600 3 100 * Z
/var/log/ppp.log 600 3 100 * Z
/var/log/security 600 10 100 * Z
/var/log/wtmp 644 3 * @01T05 B
/var/log/daily.log 640 7 * @T00 Z
/var/log/weekly.log 640 5 1 $W6D0 Z
/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 640 5 100 * ZUm mehr zu erfahren, lesen Sie bitte &man.newsyslog.8;.sysctl.confsysctl.confsysctlsysctl.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=0Einstellungen mit sysctlsysctlEinstellungenmit sysctlMit &man.sysctl.8; können Sie Änderungen an
einem laufenden &os;-System vornehmen. Unter anderem
können Optionen des TCP/IP-Stacks oder des
virtuellen Speichermanagements verändert werden. Unter
der Hand eines erfahrenen Systemadministrators kann dies
die Systemperformance erheblich verbessern. Über 500
Variablen können mit &man.sysctl.8; gelesen und gesetzt
werden.Der Hauptzweck von &man.sysctl.8; besteht darin, Systemeinstellungen
zu lesen und zu verändern.Alle auslesbaren Variablen werden wie folgt angezeigt:&prompt.user; sysctl -aSie können auch eine spezielle Variable, z.B.
kern.maxproc lesen:&prompt.user; sysctl kern.maxproc
kern.maxproc: 1044Um eine Variable zu setzen, benutzen Sie die Syntax
Variable=
Wert:&prompt.root; sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000Mit sysctl können Sie Strings, Zahlen oder
Boolean-Werte setzen. Bei Boolean-Werten setzen sie 1
für wahr und 0 für falsch.Wenn Sie Variablen automatisch während des Systemstarts
setzen wollen, fügen Sie die Variablen in die Datei
/etc/sysctl.conf ein. Weiteres
entnehmen Sie bitte der Hilfeseite &man.sysctl.conf.5;
und dem .TomRhodesContributed by Schreibgeschützte VariablenSchreibgeschützte sysctl-Variablen können nur
während des Systemstarts verändert werden.Beispielsweise hat &man.cardbus.4; auf einigen Laptops
Schwierigkeiten, Speicherbereiche zu erkennen. Es treten
dann Fehlermeldungen wie die folgende auf:cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12Um dieses Problem zu lösen, muss eine
schreibgeschützte sysctl-Variable verändert
werden. Eine OID kann in der Datei
/boot/loader.conf überschrieben
werden. Die Datei /boot/defaults/loader.conf
enthält Vorgabewwerte für sysctl-Variablen.Das oben erwähnte Problem wird durch die Angabe von
in
/boot/loader.conf gelöst.
Danach sollte &man.cardbus.4; fehlerfrei funktionieren.Tuning von LaufwerkenSysctl Variablenvfs.vmiodirenablevfs.vmiodirenableDie 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.vfs.write_behindvfs.write_behindIn 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.vfs.hirunningspacevfs.hirunningspaceDie 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.vm.swap_idle_enabledvm.swap_idle_enabledDie 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.hw.ata.wchw.ata.wcIn &os; 4.3 wurde versucht, den IDE-Schreib-Zwischenspeicher
abzustellen. Obwohl dies die Bandbreite zum Schreiben auf
IDE-Platten verringerte, wurde es aus Gründen der
Datenkonsistenz als notwenig angesehen. Der Kern des
Problems ist, dass IDE-Platten keine zuverlässige
Aussage über das Ende eines Schreibvorgangs treffen.
Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten
nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann
sogar passieren, dass das Schreiben mancher Blöcke
im Fall von starker Plattenaktivität auf unbefristete
Zeit verzögert wird. Ein Absturz oder Stromausfall
zu dieser Zeit kann die Dateisysteme erheblich beschädigen.
Wir entschieden uns daher für die sichere Variante
und stellten den Schreib-Zwischenspeicher ab. Leider war
damit auch ein großer Leistungsverlust verbunden, so
dass wir die Variable
nach dem Release wieder aktiviert haben. Sie sollten den
Wert der Variable hw.ata.wc auf Ihrem
System überprüfen. Wenn der Schreib-Zwischenspeicher
abgestellt ist, können Sie ihn aktivieren, indem Sie die
Variable auf den Wert 1 setzen. Dies muss zum Zeitpunkt
des Systemstarts im Boot-Loader geschehen. Eine Änderung
der Variable, nachdem der Kernel gestartet ist, hat keine
Auswirkungen.Weitere Informationen finden Sie in &man.ata.4;.SCSI_DELAY
(kern.cam.scsi_delay)kern.cam.scsi_delayKerneloptionenSCSI_DELAYMit der Kerneloption SCSI_DELAY kann
die Dauer des Systemstarts verringert werden. Der Vorgabewert
ist recht hoch und er verzögert den Systemstart um 15 oder
mehr Sekunden. Normalerweise kann dieser Wert, insbesondere
mit modernen Laufwerken, auf 5 Sekunden heruntergesetzt
werden. Ab &os; 5.0 wird dazu die
sysctl-Variable
kern.cam.scsi_delay benutzt. Die Variable
sowie die Kerneloption verwenden für die Zeitangabe
Millisekunden und nicht Sekunden.Soft UpdatesSoft UpdatestunefsMit &man.tunefs.8; lassen sich Feineinstellungen an
Dateisystemen vornehmen. Das Programm hat verschiedene Optionen,
von denen hier nur Soft Updates betrachtet werden. Soft Updates
werden wie folgt ein- und ausgeschaltet:&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystemEin eingehängtes Dateisystem kann nicht mit &man.tunefs.8;
modifiziert werden. Soft Updates werden am besten im Single-User
Modus aktiviert, bevor Partitionen eingehangen sind.Durch Einsatz eines Zwischenspeichers wird die Performance
im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen
von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen
Dateisystemen zu aktivieren. Allerdings sollten Sie sich über
die zwei Nachteile von Soft Updates bewusst sein:
Erstens garantieren Soft Updates zwar die Konsistenz der Daten
im Fall eines Absturzes, aber es kann leicht passieren, dass
das Dateisystem über mehrere Sekunden oder gar eine Minute
nicht synchronisiert wurde. Im Fall eines Absturzes verlieren
Sie mit Soft Updates unter Umständen mehr Daten als ohne.
Zweitens verzögern Soft Updates die Freigabe von
Datenblöcken. Eine größere Aktualisierung
eines fast vollen Dateisystems, wie dem Root-Dateisystem,
z.B. während eines make installworld,
kann das Dateisystem vollaufen lassen. Dadurch würde
die Aktualisierung fehlschlagen.Details über Soft UpdatesSoft UpdatesDetailsEs gibt zwei klassische Herangehensweisen, wie
man die Metadaten des Dateisystems (also Daten
über Dateien, wie inode Bereiche oder Verzeichniseinträge)
aktualisiert auf die Platte zurückschreibt:Das historisch übliche Verfahren waren synchrone
Updates der Metadaten, d. h. wenn eine Änderung an
einem Verzeichnis nötig war, wurde anschließend
gewartet, bis diese Änderung tatsächlich auf die
Platte zurückgeschrieben worden war. Der
Inhalt der Dateien wurde im
Buffer Cache zwischengespeichert und
asynchron irgendwann später auf die Platte geschrieben.
Der Vorteil dieser Implementierung ist, dass sie
sicher funktioniert. Wenn während eines Updates ein
Ausfall erfolgt, haben die Metadaten immer einen
konsistenten Zustand. Eine Datei ist entweder komplett
angelegt oder gar nicht. Wenn die Datenblöcke einer
Datei im Fall eines Absturzes noch nicht den Weg aus dem
Buffer Cache auf die Platte gefunden haben,
kann &man.fsck.8; das Dateisystem reparieren, indem es die
Dateilänge einfach auf 0 setzt. Außerdem
ist die Implementierung einfach und überschaubar. Der
Nachteil ist, dass Änderungen der Metadaten sehr
langsam vor sich gehen. Ein rm -r
beispielsweise fasst alle Dateien eines Verzeichnisses
der Reihe nach an, aber jede dieser Änderungen am
Verzeichnis (Löschen einer Datei) wird einzeln synchron
auf die Platte geschrieben. Gleiches beim Auspacken
großer Hierarchien (tar -x).Der zweite Fall sind asynchrone Metadaten-Updates. Das
ist z. B. der Standard bei Linux/ext2fs oder die Variante
mount -o async für *BSD UFS. Man
schickt die Updates der Metadaten einfach auch noch
über den Buffer Cache, sie werden also
zwischen die Updates der normalen Daten eingeschoben.
Vorteil ist, dass man nun nicht mehr auf jeden Update
warten muss, Operationen, die zahlreiche Metadaten
ändern, werden also viel schneller. Auch
hier ist die Implementierung sehr einfach und wenig
anfällig für Fehler. Nachteil ist, dass
keinerlei Konsistenz des Dateisystems mehr gesichert ist.
Wenn mitten in einer Operation, die viele Metadaten
ändert, ein Ausfall erfolgt (Stromausfall, drücken
des Reset-Tasters), dann ist das Dateisystem
anschließend in einem unbestimmten Zustand. Niemand
kann genau sagen, was noch geschrieben worden ist und was
nicht mehr; die Datenblöcke einer Datei können
schon auf der Platte stehen, während die inode Tabelle
oder das zugehörige Verzeichnis nicht mehr aktualisiert
worden ist. Man kann praktisch kein fsck
mehr implementieren, das diesen Zustand
wieder reparieren kann, da die dazu nötigen
Informationen einfach auf der Platte fehlen. Wenn ein
Dateisystem derart beschädigt worden ist, kann man es
nur neu erzeugen (&man.newfs.8;) und die Daten
vom Backup zurückspielen.
Der historische Ausweg aus diesem Dilemma war ein
dirty region logging (auch als
Journalling bezeichnet, wenngleich
dieser Begriff nicht immer gleich benutzt und manchmal auch
für andere Formen von Transaktionsprotokollen gebraucht
wird). Man schreibt die Metadaten-Updates zwar synchron,
aber nur in einen kleinen Plattenbereich, die
logging area. Von da aus werden sie
dann asynchron auf ihre eigentlichen Bereiche verteilt. Da
die logging area ein kleines
zusammenhängendes Stückchen ist, haben die
Schreibköpfe der Platte bei massiven Operationen auf
Metadaten keine allzu großen Wege zurückzulegen,
so dass alles ein ganzes Stück schneller geht als
bei klassischen synchronen Updates. Die Komplexität
der Implementierung hält sich ebenfalls in Grenzen,
somit auch die Anfälligkeit für Fehler. Als
Nachteil ergibt sich, dass Metadaten zweimal auf die
Platte geschrieben werden müssen (einmal in die
logging area, einmal an die richtige
Stelle), so dass das im Falle regulärer
Arbeit (also keine gehäuften Metadatenoperationen) eine
Pessimisierung des Falls der synchronen
Updates eintritt, es wird alles langsamer. Dafür hat man
als Vorteil, dass im Falle eines Crashes der
konsistente Zustand dadurch erzielbar ist, dass die
angefangenen Operationen aus dem dirty region
log entweder zu Ende ausgeführt oder
komplett verworfen werden, wodurch das Dateisystem schnell
wieder zur Verfügung steht.Die Lösung von Kirk McKusick, dem Schöpfer von
Berkeley FFS, waren Soft Updates: die
notwendigen Updates der Metadaten werden im Speicher
gehalten und dann sortiert auf die Platte geschrieben
(ordered metadata updates). Dadurch hat man
den Effekt, dass im Falle massiver
Metadaten-Änderungen spätere Operationen die
vorhergehenden, noch nicht auf die Platte geschriebenen
Updates desselben Elements im Speicher
einholen. Alle Operationen, auf ein
Verzeichnis beispielsweise, werden also in der Regel noch im
Speicher abgewickelt, bevor der Update überhaupt auf
die Platte geschrieben wird (die dazugehörigen
Datenblöcke werden natürlich auch so sortiert,
dass sie nicht vor ihren Metadaten auf der Platte
sind). Im Fall eines Absturzes hat man ein implizites log
rewind: alle Operationen, die noch nicht den Weg auf
die Platte gefunden haben, sehen danach so aus, als
hätten sie nie stattgefunden. Man hat so also den
konsistenten Zustand von ca. 30 bis 60 Sekunden früher
sichergestellt. Der verwendete Algorithmus garantiert
dabei, dass alle tatsächlich benutzten Ressourcen
auch in den entsprechenden Bitmaps (Block- und inode
Tabellen) als belegt markiert sind. Der einzige Fehler, der
auftreten kann, ist, dass Ressourcen noch als
belegt markiert sind, die tatsächlich
frei sind. &man.fsck.8; erkennt dies und
korrigiert diese nicht mehr belegten Ressourcen. Die
Notwendigkeit eines Dateisystem-Checks darf aus diesem
Grunde auch ignoriert und das Dateisystem mittels
mount -f zwangsweise eingebunden werden.
Um noch allozierte Ressourcen freizugeben muss
später ein &man.fsck.8; nachgeholt werden. Das ist
dann auch die Idee des background fsck:
beim Starten des Systems wird lediglich ein
Schnappschuss des Filesystems
gemacht, mit dem &man.fsck.8; dann später arbeiten
kann. Alle Dateisysteme dürfen unsauber
eingebunden werden und das System kann sofort in den
Multiuser-Modus gehen. Danach wird ein
Hintergrund-fsck für die
Dateisysteme gestartet, die dies benötigen, um
möglicherweise irrtümlich belegte Ressourcen
freizugeben. (Dateisysteme ohne Soft
Updates benötigen natürlich immer noch
den üblichen (Vordergrund-)fsck,
bevor sie eingebunden werden können.)Der Vorteil ist, dass die Metadaten-Operationen
beinahe so schnell ablaufen wie im asynchronen Fall (also
durchaus auch schneller als beim logging, das
ja die Metadaten immer zweimal schreiben muss). Als
Nachteil stehen dem die Komplexität des Codes (mit
einer erhöhten Fehlerwahrscheinlichkeit in einem
bezüglich Datenverlust hoch sensiblen Bereich) und ein
erhöhter Speicherverbrauch entgegen. Außerdem
muss man sich an einige Eigenheiten
gewöhnen: Nach einem Absturz ist ein etwas älterer
Stand auf der Platte – statt einer leeren, aber bereits
angelegten Datei (wie nach einem herkömmlichen
fsck Lauf) ist auf einem Dateisystem mit
Soft Updates keine Spur der
entsprechenden Datei mehr zu sehen, da weder die Metadaten
noch der Dateiinhalt je auf die Platte geschrieben wurden.
Weiterhin kann der Platz nach einem rm -r
nicht sofort wieder als verfügbar markiert werden,
sondern erst dann, wenn der Update auch auf die Platte
vermittelt worden ist. Dies kann besonders dann Probleme
bereiten, wenn große Datenmengen in einem Dateisystem
ersetzt werden, das nicht genügend Platz hat, um alle
Dateien zweimal unterzubringen.Einstellungen von Kernel LimitsEinstellungenvon Kernel LimitsDatei und Prozeß Limitskern.maxfileskern.maxfilesAbhängig von den Anforderungen Ihres Systems
kann kern.maxfiles erhöht oder
erniedrigt werden. Die Variable legt die maximale
Anzahl von Dateideskriptoren auf Ihrem System fest. Wenn
die Dateideskriptoren aufgebraucht sind, werden Sie
die Meldung file: table is full
wiederholt im Puffer für Systemmeldungen sehen. Den
Inhalt des Puffers können Sie sich mit dmesg
anzeigen lassen.Jede offene Datei, jedes Socket und jede FIFO verbraucht
einen Dateideskriptor. Auf dicken Produktionsservern
können leicht Tausende Dateideskriptoren benötigt
werden, abhängig von der Art und Anzahl der gleichzeitig
laufenden Dienste.In älteren &os;-Versionen wurde die Voreinstellung
von kern.maxfile aus der
Kernelkonfigurationsoption maxusers
bestimmt. kern.maxfiles wächst
proportional mit dem Wert von maxusers.
Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich
diese Option entsprechend der maximalen Benutzerzahl Ihres
Systems einzustellen. Obwohl auf einer Produktionsmaschine
vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind,
können die benötigten Ressourcen ähnlich denen
eines großen Webservers sein.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 &man.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 &os;-Versionen setzen diesen Wert selbst,
wenn Sie in der Konfigurationsdatei den Wert 0Der verwendete Algorithmus setzt
maxusers auf die Speichergröße
des Systems. Der minimale Wert beträgt dabei
32, das Maximum ist
384.
angeben. Wenn Sie den Wert selbst bestimmen wollen,
sollten Sie maxusers mindestens auf
4 setzen. Dies gilt insbesondere dann,
wenn Sie beabsichtigen, das X Window-System zu benutzen
oder Software zu kompilieren. Der Grund dafür ist, dass
der wichtigste Wert, der durch maxusers
bestimmt wird, die maximale Anzahl an Prozessen ist, die auf
20 + 16 * maxusers gesetzt wird. Wenn Sie
also maxusers auf 1 setzen, können
gleichzeitig nur 36 Prozesse laufen, von denen ungefähr
18 schon beim Booten des Systems gestartet werden. Dazu
kommen nochmals etwa 15 Prozesse beim Start des
X Window-Systems. Selbst eine einfache Aufgabe wie das
Lesen einer Manualpage benötigt neun Prozesse zum Filtern,
Dekomprimieren und Betrachten der Datei. Für die meisten
Benutzer sollte es ausreichen, maxusers auf
64 zu setzen, womit 1044 gleichzeitige Prozesse zur
Verfügung stehen. Wenn Sie allerdings den
gefürchteten Fehler proc table full
beim Start eines Programms oder auf einem Server mit einer
großen Benutzerzahl (wie
ftp.FreeBSD.org) sehen, dann
sollten Sie den Wert nochmals erhöhen und den Kernel
neu bauen.Die Anzahl der Benutzer, die sich auf einem Rechner
anmelden kann, wird durch maxusersnicht begrenzt. Der Wert dieser
Variablen legt neben der möglichen Anzahl der Prozesse
eines Benutzers weitere sinnvolle Größen für
bestimmte Systemtabellen fest.kern.ipc.somaxconnkern.ipc.somaxconnDie Variable kern.ipc.somaxconn
beschränkt die Größe der Warteschlange
(Listen-Queue) für
neue TCP-Verbindungen. Der Vorgabewert von
128 ist normalerweise zu klein, um neue
Verbindungen auf einem stark ausgelasteten Webserver
zuverlässig zu handhaben. Auf solchen Servern sollte
der Wert auf 1024 oder höher gesetzt
werden. Ein Dienst (z.B. &man.sendmail.8;, oder
Apache) kann die Größe
der Queue selbst einschränken. Oft gibt es die
Möglichkeit, die Größe der Listen-Queue in
einer Konfigurationsdatei einzustellen. Eine große
Listen-Queue übersteht vielleicht auch einen
Denial of Service Angriff (DoS).Netzwerk LimitsDie Kerneloption NMBCLUSTERS schreibt
die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System besitzt.
Eine zu geringe Anzahl Mbufs auf einem Server mit viel Netzwerkverkehr
verringert die Leistung von &os;. Jeder Mbuf-Cluster nimmt
ungefähr 2 kB Speicher in Anspruch, so dass ein Wert
von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer
im System reserviert. Wie viele Cluster benötigt werden,
lässt sich durch eine einfache Berechnung herausfinden.
Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige
Verbindungen servieren soll und jede der Verbindungen je einen
16 kB großen Puffer zum Senden und Empfangen braucht,
brauchen Sie ungefähr 32 MB Speicher für
Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl,
so dass sich für NMBCLUSTERS der Wert
2x32 MB / 2 kB = 32768 ergibt.
Für Maschinen mit viel Speicher sollten Werte zwischen
4096 und 32768 genommen werden. Sie können diesen Wert
nicht willkürlich erhöhen, da dies bereits zu einem
Absturz beim Systemstart führen kann. Mit der Option
von &man.netstat.1; können Sie den
Gebrauch der Netzwerkpuffer kontrollieren.Die Netzwerkpuffer können beim Systemstart mit der
Loader-Variablen kern.ipc.nmbclusters
eingestellt werden. Nur auf älteren &os;-Systemen
müssen Sie die Kerneloption NMBCLUSTERS
verwenden.Die Anzahl der &man.sendfile.2; Puffer muss auf ausgelasteten
Servern, die den Systemaufruf &man.sendfile.2; oft verwenden,
vielleicht erhöht werden. Dazu können Sie die
Kerneloption NSFBUFS verwenden oder die
Anzahl der Puffer in /boot/loader.conf
(siehe &man.loader.8;) setzen. Die Puffer sollten erhöht
werden, wenn Sie Prozesse im Zustand sfbufa
sehen. Die schreibgeschützte sysctl-Variable
kern.ipc.nsfbufs zeigt die Anzahl
eingerichteten Puffer im Kernel. Der Wert dieser Variablen
wird normalerweise von kern.maxusers bestimmt.
Manchmal muss die Pufferanzahl jedoch manuell eingestellt
werden.Auch wenn ein Socket nicht blockierend angelegt wurde,
kann der Aufruf von &man.sendfile.2; blockieren, um auf
freie struct sf_buf Puffer zu warten.net.inet.ip.portrange.*net.inet.ip.portrange.*Die sysctl-Variable net.inet.ip.portrange.*
legt die Portnummern für TCP- und UDP-Sockets fest.
Es gibt drei Bereiche: den niedrigen Bereich, den
normalen Bereich und den hohen Bereich. Die meisten
Netzprogramme benutzen den normalen Bereich. Dieser Bereich
umfasst in der Voreinstellung die Portnummern 500 bis 5000
und wird durch die Variablen
net.inet.ip.portrange.first und
net.inet.ip.portrange.last festgelegt.
Die festgelegten Bereiche für Portnummern werden von
ausgehenden Verbindungen benutzt. Unter bestimmten
Umständen, beispielsweise auf stark ausgelasteten
Proxy-Servern, sind alle Portnummern für ausgehende
Verbindungen belegt. Bereiche
für Portnummern spielen auf Servern keine Rolle, die
hauptsächlich eingehende Verbindungen verarbeiten (wie ein
normaler Webserver) oder nur eine begrenzte Anzahl ausgehender
Verbindungen öffnen (beispielsweise ein Mail-Relay).
Wenn Sie keine freien Portnummern mehr haben, sollten Sie
die Variable net.inet.ip.portrange.last
langsam erhöhen. Ein Wert von 10000,
20000 oder 30000 ist
angemessen. Beachten Sie auch eine vorhandene
Firewall, wenn Sie die Bereiche für Portnummern
ändern. Einige Firewalls sperren große Bereiche
(normalerweise aus den kleinen Portnummern) und erwarten,
dass hohe Portnummern für ausgehende Verbindungen
verwendet werden. Daher kann es erforderlich sein, den
Wert von net.inet.ip.portrange.first
zu erhöhen.TCP Bandwidth Delay Product BegrenzungTCP Bandwidth Delay Product Begrenzungnet.inet.tcp.inflight.enableDie TCP Bandwidth Delay Product Begrenzung gleicht
TCP/Vegas von NetBSD. Die
Begrenzung wird aktiviert, indem Sie die sysctl-Variable
net.inet.tcp.inflight.enable auf den
Wert 1 setzen. Das System wird dann
versuchen, für jede Verbindung, das Produkt aus der
Übertragungsrate und der Verzögerungszeit zu
bestimmen. Dieses Produkt begrenzt die Datenmenge, die
für einen optimales Durchsatz zwischengespeichert
werden muss.Diese Begrenzung ist nützlich, wenn Sie Daten
über Verbindungen mit einem hohen Produkt aus
Übertragungsrate und Verzögerungszeit wie Modems,
Gigabit-Ethernet oder schnellen WANs, zur Verfügung
stellen. Insbesondere wirkt sich die Begrenzung aus, wenn
die Verbindung die TCP-Option
Window-scaling verwendet oder
große Sende-Fenster
(send window) benutzt.
Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung
aktiviert haben. Dazu setzen Sie die Variable
net.inet.tcp.inflight.debug auf
0. Auf Produktions-Systemen sollten Sie
zudem die Variable net.inet.tcp.inflight.min
mindestens auf den Wert 6144 setzen.
Allerdings kann ein zu hoher Wert, abhängig von der
Verbindung, die Begrenzungsfunktion unwirksam machen.
Die Begrenzung reduziert die Datenmenge in den Queues von Routern
und Switches, sowie die Datenmenge in der Queue der lokalen
Netzwerkkarte. Die Verzögerungszeit
(Round Trip Time) für
interaktive Anwendungen sinkt, da weniger Pakete
zwischengespeichert werden. Dies gilt besonders für
Verbindungen über langsame Modems. Die Begrenzung
wirkt sich allerdings nur auf das Versenden von Daten aus
(Uploads, Server). Auf den Empfang von Daten (Downloads)
hat die Begrenzung keine Auswirkungen.Die Variable net.inet.tcp.inflight.stab
sollte nicht angepasst werden. Der
Vorgabewert der Variablen beträgt 20,
das heißt es werden maximal zwei Pakete zu dem Produkt
aus Übertragungsrate und Verzögerungszeit addiert.
Dies stabilisiert den Algorithmus und verbessert die
Reaktionszeit auf Veränderungen. Bei langsamen
Verbindungen können sich aber die Laufzeiten der Pakete
erhöhen (ohne diesen Algorithmus wären sie
allerdings noch höher). In solchen Fällen
können Sie versuchen, den Wert der Variablen auf
15, 10 oder
5 zu erniedrigen. Gleichzeitig müssen
Sie vielleicht auch net.inet.tcp.inflight.min
auf einen kleineren Wert (beispielsweise 3500)
setzen. Ändern Sie diese Variablen nur ab, wenn Sie
keine anderen Möglichkeiten mehr haben.Virtueller Speicher (Virtual
Memory)kern.maxvnodesEin vnode ist die interne Darstellung einer Datei oder
eines Verzeichnisses. Die Erhöhung der Anzahl der
für das Betriebssystem verfügbaren vnodes
verringert also die Schreib- und Lesezugriffe auf
Ihre Festplatte. vnodes werden im Normalfall vom
Betriebssystem automatisch vergeben und müssen
nicht von Ihnen angepasst werden. In einigen Fällen
stellt der Zugriff auf eine Platte allerdings einen
Flaschenhals dar, daher sollten Sie in diesem Fall die Anzahl
der möglichen vnodes erhöhen, um dieses Problem zu
beheben. Beachten Sie dabei aber die Größe
des inaktiven und freien Hauptspeichers.Um die Anzahl der derzeit verwendeten vnodes zu sehen,
geben Sie Folgendes ein:&prompt.root; sysctl vfs.numvnodes
vfs.numvnodes: 91349Die maximal mögliche Anzahl der vnodes erhalten
Sie durch die Eingabe von:&prompt.root; sysctl kern.maxvnodes
kern.maxvnodes: 100000Wenn sich die Anzahl der genutzten vnodes dem maximal
möglichen Wert nähert, sollten Sie den Wert
kern.maxvnodes zuerst um etwa 1.000
erhöhen. Beobachten Sie danach die Anzahl der vom
System genutzten vfs.numvnodes.
Nähert sich der Wert wiederum dem definierten
Maximum, müssen Sie kern.maxvnodes
nochmals erhöhen. Sie sollten nun eine Änderung
Ihres Speicherverbrauches (etwa über &man.top.1;)
registrieren können und über mehr aktiven
Speicher verfügen.Hinzufügen von Swap-BereichenEgal wie vorausschauend Sie planen, manchmal entspricht ein System
einfach nicht Ihren Erwartungen. Es ist leicht, mehr Swap-Bereiche
hinzuzufügen. Dazu stehen Ihnen drei Wege offen: Sie
können eine neue Platte einbauen, den Swap-Bereich über NFS
ansprechen oder eine Swap-Datei auf einer existierenden Partition
einrichten.Für Informationen zur Verschlüsselung von
Swap-Partitionen, zu den dabei möglichen Optionen sowie
zu den Gründen für eine Verschlüsselung des
Auslagerungsspeichers lesen Sie bitte
des Handbuchs.Swap auf einer neuen FestplatteDer einfachste Weg, zusätzlich einen Swap-Bereich
einzurichten, ist der Einbau einer neuen Platte, die Sie
sowieso gebrauchen können. Die Anordnung von
Swap-Bereichen wird in
des Handbuchs besprochen.Swap-Bereiche über NFSSwap-Bereiche über NFS sollten Sie nur dann einsetzen,
wenn Sie über keine lokale Platte verfügen, da es durch
die zur Verfügung stehende Bandbreite limitiert wird und
außerdem den NFS-Server zusätzlich belastet.Swap-DateienSie können eine Datei festgelegter Größe als
Swap-Bereich nutzen. Im folgenden Beispiel werden wir eine 64 MB
große Datei mit Namen /usr/swap0
benutzen, Sie können natürlich einen beliebigen Namen
für den Swap-Bereich benutzen.Erstellen einer Swap-DateiStellen Sie sicher, dass der Kernel RAM-Disks
(&man.md.4;) unterstützt. Dies ist in der
GENERIC-Konfiguration
voreingestellt.device md # Memory "disks"Legen Sie die Swap-Datei
/usr/swap0 an:&prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64Setzen Sie die richtigen Berechtigungen für
/usr/swap0:&prompt.root; chmod 0600 /usr/swap0Aktivieren Sie die Swap-Datei
/etc/rc.conf:swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.Um die Swap-Datei zu aktivieren, führen Sie
entweder einen Neustart durch oder geben das folgende Kommando
ein:&prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0HitenPandyaVerfasst von TomRhodesEnergie- und RessourcenverwaltungEs ist wichtig, Hardware effizient einzusetzen. Vor der
Einführung des Advanced Configuration and Power
Interface (ACPI) konnten
Stromverbrauch und Wärmeabgabe eines Systems nur
schlecht von Betriebssystemen gesteuert werden. Die Hardware
wurde vom BIOS gesteuert, was die Kontrolle
der Energieverwaltung für den Anwender erschwerte. Das
Advanced Power Management (APM) erlaubte
es lediglich, einige wenige Funktionen zu steuern, obwohl die
Überwachung von Energie- und Ressourcenverbrauch zu den
wichtigsten Aufgaben eines Betriebssystems gehört, um auf
verschiedene Ereignisse, beispielsweise einen unerwarteten
Temperaturanstieg, reagieren können.Dieser Abschnitt erklärt das Advanced Configuration and
Power Interface (ACPI).Was ist ACPI?ACPIAPMAdvanced Configuration and Power Interface
(ACPI) ist ein Standard verschiedener
Hersteller, der die Verwaltung von Hardware und
Energiesparfunktionen festlegt. Die
ACPI-Funktionen können von einem
Betriebssystem gesteuert werden. Der Vorgänger des
ACPI, Advanced Power Management
(APM), erwies sich in modernen Systemen
als unzureichend.Mängel des Advanced Power Managements (APM)Das Advanced Power Management (APM)
steuert den Energieverbrauch eines Systems auf Basis
der Systemaktivität. Das APM-BIOS wird von dem
Hersteller des Systems zur Verfügung gestellt
und ist auf die spezielle Hardware angepasst. Der
APM-Treiber des Betriebssystems greift auf das
APM Software Interface zu, das den
Energieverbrauch regelt. APM findet sich in der Regel
nur noch in Systemen, die vor 2001 produziert
wurden.Das APM hat hauptsächlich
vier Probleme. Erstens läuft die Energieverwaltung
unabhängig vom Betriebssystem in einem
(herstellerspezifischen) BIOS. Beispielsweise kann
das APM-BIOS die Festplatten nach einer konfigurierbaren
Zeit ohne die Zustimmung des Betriebssystems herunterfahren.
Zweitens befindet sich die ganze APM-Logik im BIOS; das
Betriebssystem hat gar keine APM-Komponenten. Bei Problemen
mit dem APM-BIOS muss das Flash-ROM aktualisiert werden.
Diese Prozedur ist gefährlich, da sie im Fehlerfall
das System unbrauchbar machen kann. Zum Dritten ist APM
eine Technik, die herstellerspezifisch ist und nicht
koordiniert wird. Fehler im BIOS eines Herstellers werden
nicht unbedingt im BIOS anderer Hersteller korrigiert.
Das letzte Problem ist, dass im APM-BIOS nicht genügend
Platz vorhanden ist, um eine durchdachte oder eine auf den
Zweck der Maschine zugeschnittene Energieverwaltung
zu implementieren.Das Plug and Play BIOS (PNPBIOS)
war ebenfalls unzureichend. Das PNPBIOS verwendet eine
16-Bit-Technik. Damit das Betriebssystem das PNPBIOS
ansprechen kann, muss es in einer 16-Bit-Emulation laufen.Der APM-Treiber von &os; ist in
der Hilfeseite &man.apm.4; beschrieben.Konfiguration des ACPIDas Modul acpi.ko wird
standardmäßig beim Systemstart vom &man.loader.8;
geladen und sollte daher nicht
fest in den Kernel eingebunden werden. Dadurch kann
acpi.ko ohne einen Neubau des Kernels ersetzt
werden und das Modul ist leichter zu testen. Wenn Sie in der
Ausgabe von &man.dmesg.8; das Wort ACPI sehen,
ist das Modul geladen worden. Das ACPI-Modul im laufenden
Betrieb zu laden, führt oft nicht zum gewünschten
Ergebnis. Treten bei Ihrem System Probleme auf, können
Sie ACPI auch komplett deaktivieren.
Dazu definieren Sie die Variable
hint.acpi.0.disabled="1" in der Datei
/boot/loader.conf. Alternativ können
Sie die Variable auch am &man.loader.8;-Prompt eingeben.
Das Modul kann im laufenden Betrieb nicht entfernt werden,
da es zur Kommunikation mit der Hardware verwendet wird.ACPI und APM
können nicht zusammen verwendet werden. Das zuletzt
geladene Modul beendet sich, sobald es bemerkt, dass das andere
Modul geladen ist.Mit &man.acpiconf.8; können Sie das System in einen
Ruhemodus (sleep mode) versetzen.
Es gibt verschiedene Modi (von 1 bis
5), die Sie auf der Kommandozeile mit
angeben können. Für die meisten
Anwender sind die Modi 1 und
3 völlig ausreichend. Der Modus
5 schaltet das System
aus (Soft-off) und entspricht
dem folgenden Befehl:&prompt.root; halt -pVerschiedene Optionen können als
&man.sysctl.8;-Variablen gesetzt werden. Lesen Sie dazu
die Manualpages zu &man.acpi.4; sowie &man.acpiconf.8;.NateLawsonVerfasst von PeterSchultzMit Beiträgen von TomRhodesACPI-FehlersucheACPIProbleme mitACPI ist ein gänzlich neuer
Weg, um Geräte aufzufinden und deren Stromverbrauch
zu regulieren. Weiterhin bietet ACPI
einen einheitlichen Zugriff auf Geräte, die vorher
vom BIOS verwaltet wurden. Es werden
zwar Fortschritte gemacht, dass ACPI
auf allen Systemen läuft, doch tauchen immer wieder
Fehler auf: fehlerhafter Bytecode der
ACPI-Machine-Language
(AML) einiger Systemplatinen,
ein unvollständiges &os;-Kernel-Subsystem oder
Fehler im ACPI-CA-Interpreter von &intel;.Dieser Abschnitt hilft Ihnen, zusammen mit den Betreuern
des &os;-ACPI-Subsystems, Fehlerquellen
zu finden und Fehler zu beseitigen. Danke, dass Sie diesen
Abschnitt lesen; hoffentlich hilft er, Ihre Systemprobleme
zu lösen.Fehlerberichte einreichenBevor Sie einen Fehlerbericht einreichen, stellen
Sie bitte sicher, dass Ihr BIOS
und die Firmware Ihres Controllers aktuell sind.Wenn Sie sofort einen Fehlerbericht einsenden wollen,
schicken Sie bitte die folgenden Informationen an
die Mailingliste freebsd-acpi:Beschreiben Sie den Fehler und alle Umstände,
unter denen der Fehler auftritt. Geben Sie
ebenfalls den Typ und das Modell Ihres Systems
an. Wenn Sie einen neuen Fehler entdeckt haben,
versuchen Sie möglichst genau zu beschreiben,
wann der Fehler das erste Mal aufgetreten ist.Die Ausgabe von &man.dmesg.8; nach der Eingabe
von boot -v.
Geben Sie auch alle Fehlermeldungen an, die erscheinen,
wenn Sie den Fehler provozieren.Die Ausgabe von &man.dmesg.8; nach der Eingabe
von boot -v und mit deaktiviertem
ACPI, wenn das Problem ohne
ACPI nicht auftritt.Die Ausgabe von sysctl hw.acpi.
Dieses Kommando zeigt die vom System unterstützten
ACPI-Funktionen an.Die URL, unter der die
ACPI-Source-Language
(ASL) liegt. Schicken Sie
bitte nicht die ASL
an die Mailingliste, da die ASL
sehr groß sein kann. Eine Kopie der
ASL erstellen Sie mit dem
nachstehenden Befehl:&prompt.root; acpidump -td > name-system.aslSetzen Sie bitte für name
den Namen Ihres Kontos und für
system den Hersteller und
das Modell Ihres Systems ein. Zum Beispiel:
njl-FooCo6000.asl.Obwohl die meisten Entwickler die Mailingliste
&a.current.name; lesen, sollten Sie Fehlerberichte an
die Liste &a.acpi.name; schicken. Seien Sie bitte
geduldig; wir haben alle Arbeit außerhalb des Projekts.
Wenn der Fehler nicht offensichtlich ist, bitten
wir Sie vielleicht, einen offiziellen Fehlerbericht
(PR) mit &man.send-pr.1; einzusenden.
Geben Sie im Fehlerbericht bitte dieselben Informationen
wie oben an. Mithilfe der PRs
verfolgen und lösen wir Probleme. Senden Sie
bitte keinen PR ein, ohne vorher
den Fehlerbericht an die Liste &a.acpi.name; zu senden.
Wir benutzen die PRs als Erinnerung
an bestehende Probleme und nicht zum Sammeln aller
Probleme. Es kann sein, dass der Fehler schon von
jemand anderem gemeldet wurde.ACPI-GrundlagenACPIACPI gibt es in allen modernen Rechnern
der ia32- (x86), ia64- (Itanium) und amd64- (AMD) Architektur.
Der vollständige Standard bietet Funktionen
zur Steuerung und Verwaltung der CPU-Leistung,
der Stromversorgung, von Wärmebereichen, Batterien,
eingebetteten Controllern und Bussen. Auf den meisten
Systemen wird nicht der vollständige Standard implementiert.
Arbeitsplatzrechner besitzen meist nur Funktionen zur
Verwaltung der Busse, während Notebooks Funktionen
zur Temperaturkontrolle und Ruhezustände besitzen.Ein ACPI konformes System
besitzt verschiedene Komponenten. Die BIOS-
und Chipsatz-Hersteller stellen mehrere statische
Tabellen bereit (zum Beispiel die
Fixed-ACPI-Description-Table,
FADT). Die Tabellen enthalten beispielsweise
die mit SMP-Systemen benutzte
APIC-Map, Konfigurationsregister und
einfache Konfigurationen. Zusätzlich gibt es die
Differentiated-System-Description-Table (DSDT),
die Bytecode enthält. Die Tabelle ordnet Geräte
und Methoden in einem baumartigen Namensraum an.Ein ACPI-Treiber muss die statischen
Tabellen einlesen, einen Interpreter für den Bytecode
bereitstellen und die Gerätetreiber im Kernel so
modifizieren, dass sie mit dem ACPI-Subsystem
kommunizieren. Für &os;, Linux und NetBSD hat &intel;
den Interpreter ACPI-CA, zur Verfügung
gestellt. Der Quelltext zu ACPI-CA
befindet sich im Verzeichnis
src/sys/contrib/dev/acpica.
Die Schnittstelle von ACPI-CA zu &os;
- befindet sich unter src/sys/dev/acpica/Osd.
+ befindet sich unter src/sys/dev/acpica/Osd.
Treiber, die verschiedene ACPI-Geräte
implementieren, befinden sich im Verzeichnis
src/sys/dev/acpica.Häufige ProblemeACPIProbleme mitDamit 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.MausproblemeEs kann vorkommen, dass die Maus nicht mehr funktioniert,
wenn Sie nach einem Suspend weiterarbeiten wollen. Ist dies
bei Ihnen der Fall, reicht es meistens aus, den Eintrag
hint.psm.0.flags="0x3000" in Ihre
/boot/loader.conf aufzunehmen. Besteht
das Problem weiterhin, sollten Sie einen Fehlerbericht
an das FreeBSD Project senden.Suspend/ResumeACPI kennt drei
Suspend-to-RAM-Zustände
(STR):
S1-S3.
Es gibt einen Suspend-to-Disk-Zustand:
S4. Der Zustand S5
wird Soft-Off genannt. In diesem Zustand befindet
sich ein Rechner, wenn die Stromversorgung angeschlossen
ist, der Rechner aber nicht hochgefahren ist. Der
Zustand S4 kann auf zwei Arten
implementiert werden:
S4BIOS und
S4OS.
Im ersten Fall wird der Suspend-to-Disk-Zustand durch
das BIOS hergestellt im zweiten
Fall alleine durch das Betriebssystem.Die Suspend-Zustände sind Ruhezustände,
in denen der Rechner weniger Energie als im
Normalbetrieb benötigt. Resume bezeichnet
die Rückkehr zum Normalbetrieb.Die Suspend-Zustände können Sie mit
dem Kommando sysctl hw.acpi
ermitteln. Das Folgende könnte beispielsweise
ausgegeben werden:hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0Diese Ausgabe besagt, dass mit dem Befehl
acpiconf -s die Zustände
S3, S4OS
und S5 eingestellt werden können.
Hätte den Wert
1, gäbe es den Zustand
S4BIOS anstelle
von S4OS.Wenn Sie die Suspend- und Resume-Funktionen
testen, fangen Sie mit dem S1-Zustand
an, wenn er angeboten wird. Dieser Zustand wird
am ehesten funktionieren, da der Zustand wenig
Treiber-Unterstützung benötigt. Der Zustand
S2 ist ähnlich wie
S1, allerdings hat ihn noch niemand
implementiert. Als nächstes sollten Sie den
Zustand S3 ausprobieren. Dies
ist der tiefste STR-Schlafzustand.
Dieser Zustand ist auf massive Treiber-Unterstützung
angewiesen, um die Geräte wieder richtig zu
initialisieren. Wenn Sie Probleme mit diesem Zustand
haben, können Sie die Mailingliste
&a.acpi.name; anschreiben. Erwarten Sie allerdings
nicht zu viel: Es gibt viele Treiber und Geräte,
an denen noch gearbeitet und getestet wird.Um das Problem einzugrenzen, entfernen Sie soviele
Treiber wie möglich aus dem Kernel. Sie können
das Problem isolieren, indem Sie einen Treiber nach
dem anderen laden, bis der Fehler wieder auftritt.
Typischerweise verursachen binäre Treiber wie
nvidia.ko, X11-Grafiktreiber und
USB-Treiber die meisten Fehler,
hingegen laufen Ethernet-Treiber für gewöhnlich
sehr zuverlässig. Wenn ein Treiber
zuverlässig geladen und entfernt werden kann,
können Sie den Vorgang automatisieren, indem
Sie die entsprechenden Kommandos in die Dateien
/etc/rc.suspend und
/etc/rc.resume einfügen.
In den Dateien finden Sie ein deaktiviertes Beispiel,
das einen Treiber lädt und wieder entfernt.
Ist die Bildschirmanzeige bei der Wiederaufnahme
des Betriebs gestört, setzen Sie bitte die
Variable auf
0. Versuchen Sie auch, die Variable
auf kürzere
Zeitspannen zu setzen.Die Suspend- und Resume-Funktionen können
Sie auch auf einer neuen Linux-Distribution
mit ACPI testen. Wenn es mit
Linux funktioniert, liegt das Problem wahrscheinlich
bei einem &os;-Treiber. Es hilft uns, das Problem
zu lösen, wenn Sie feststellen können, welcher
Treiber das Problem verursacht. Beachten Sie bitte,
dass die ACPI-Entwickler normalerweise
keine anderen Treiber pflegen (beispielsweise Sound- oder
ATA-Treiber). Es ist wohl das beste,
die Ergebnisse der Fehlersuche an die Mailingliste
&a.current.name; und den Entwickler des Treibers
zu schicken. Wenn Ihnen danach ist, versuchen Sie,
den Fehler in der Resume-Funktion zu finden, indem
Sie einige &man.printf.3;-Anweisungen in den Code
des fehlerhaften Treibers einfügen.Schließlich können Sie ACPI
noch abschalten und stattdessen APM
verwenden. Wenn die Suspend- und Resume-Funktionen mit
APM funktionieren, sollten Sie
vielleicht besser APM verwenden
(insbesondere mit alter Hardware von vor dem Jahr 2000).
Die Hersteller benötigten einige Zeit, um
ACPI korrekt zu implementieren, daher
gibt es mit älterer Hardware oft
ACPI-Probleme.Temporäre oder permanente SystemhängerDie meisten Systemhänger entstehen durch verlorene
Interrupts oder einen Interrupt-Sturm.
Probleme werden verursacht durch die Art, in der das
BIOS Interrupts vor dem Systemstart
konfiguriert, durch eine fehlerhafte
APIC-Tabelle und durch die
Zustellung des System-Control-Interrupts
(SCI).Interrupt-SturmAnhand 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
CtrlAltEsc in den Debugger DDB
zu gelangen. Geben Sie dort den Befehl
show interrupts ein.APICdeaktivierenWenn Sie Interrupt-Probleme haben, ist es vorerst
wohl am besten, APIC zu deaktivieren.
Tragen Sie dazu die Zeile
hint.apic.0.disabled="1" in
loader.conf ein.Abstürze (Panics)Panics werden so
schnell wie möglich behoben; mit ACPI
kommt es aber selten dazu. Zuerst sollten Sie
die Panic reproduzieren und dann versuchen einen
backtrace (eine
Rückverfolgung der Funktionsaufrufe) zu erstellen.
Richten Sie dazu den DDB über
die serielle Schnittstelle (siehe
) oder eine gesonderte
&man.dump.8;-Partition ein. In DDB
können Sie den backtrace
mit dem Kommando tr erstellen.
Falls Sie den backtrace
vom Bildschirm abschreiben müssen, schreiben
Sie bitte mindestens die fünf ersten und die
fünf letzten Zeile der Ausgabe auf.Versuchen Sie anschließend, das Problem
durch einen Neustart ohne ACPI
zu beseitigen. Wenn das funktioniert hat, können
Sie versuchen, das verantwortliche
ACPI-Subsystem durch Setzen der
Variablen
herauszufinden. Die Hilfeseite &man.acpi.4; enthält
dazu einige Beispiele.Nach einem Suspend oder einem Stopp startet
das System wiederSetzen Sie zuerst in &man.loader.conf.5; die Variable
auf
0. Damit wird verhindert, dass
ACPI während des Systemabschlusses
die Bearbeitung verschiedener Ereignisse deaktiviert.
Auf manchen Systemen muss die Variable den Wert
1 besitzen (die Voreinstellung).
Normalerweise wird der unerwünschte Neustart
des Systems durch Setzen dieser Variablen behoben.Andere ProblemeWenn 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.ASL, acpidump und
IASLACPIASLEin 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_FOUNDOft können Sie das Problem dadurch lösen,
dass Sie eine aktuelle BIOS-Version
einspielen. Die meisten Meldungen auf der Konsole sind
harmlos, wenn aber beispielsweise der Batteriestatus
falsch angezeigt wird, können Sie in den
Meldungen nach Problemen mit der
AML-Machine-Language
(AML) suchen. Der Bytecode der
AML wird aus der
ACPI-Source-Language (ASL)
übersetzt und in einer Tabelle, der DSDT,
abgelegt. Eine Kopie der ASL
können Sie mit dem Befehl &man.acpidump.8; erstellen.
Verwenden Sie mit diesem Befehl sowohl die Option
(die Inhalte der statischen
Tabellen anzeigen) als auch die Option
(die AML in ASL
zurückübersetzen). Ein Beispiel für
die Syntax finden Sie im Abschnitt Fehlerberichte einreichen.Sie können einfach prüfen, ob sich die
ASL übersetzen lässt.
Für gewöhnlich können Sie Warnungen
während des Übersetzens ignorieren.
Fehlermeldungen führen normal dazu, dass
ACPI fehlerhaft arbeitet. Ihre
ASL übersetzen Sie mit dem
nachstehenden Kommando:&prompt.root; iasl ihre.aslDie ASL reparierenACPIASLAuf lange Sicht ist es unser Ziel, dass
ACPI ohne Eingriffe des Benutzers
läuft. Zurzeit entwickeln wir allerdings noch
Umgehungen für Fehler der BIOS-Hersteller.
Der µsoft;-Interpreter (acpi.sys
und acpiec.sys) prüft die
ASL nicht streng gegen den Standard.
Daher reparieren BIOS-Hersteller,
die ACPI nur unter &windows; testen,
ihre ASL nicht. Wir hoffen, dass
wir das vom Standard abweichende Verhalten des
µsoft;-Interpreters dokumentieren und in &os; replizieren
können. Dadurch müssen Benutzer ihre
ASL nicht selbst reparieren.
Sie können Ihre ASL selbst reparieren,
wenn Sie ein Problem umgehen und uns helfen möchten.
Senden Sie uns bitte die mit &man.diff.1; erstellte Differenz
zwischen alter und neuer ASL. Wir
werden versuchen, den Interpreter ACPI-CA
zu korrigieren, damit die Fehlerbehebung nicht mehr
erforderlich ist.ACPIFehlermeldungenDie nachfolgende Liste enthält häufige
Fehlermeldungen, deren Ursache und eine Beschreibung,
wie die Fehler korrigiert werden:Abhängigkeiten vom BetriebssystemEinige AMLs gehen davon aus, dass
die Welt ausschließlich aus verschiedenen
&windows;-Versionen besteht. &os; kann vorgeben, irgendein
Betriebssystem zu sein. Versuchen Sie das Betriebssystem,
das Sie in der ASL finden, in der
Datei /boot/loader.conf anzugeben:
hw.acpi.osname="Windows 2001".Fehlende Return-AnweisungenEinige Methoden verzichten auf die vom Standard
vorgeschriebene Rückgabe eines Wertes. Obwohl
der Interpreter ACPI-CA dies nicht
beheben kann, besitzt &os; die Möglichkeit, den
Rückgabewert implizit zu setzen. Wenn Sie
wissen, welcher Wert zurückgegeben werden muss,
können Sie die fehlenden Return-Anweisungen
selbst einsetzen. Die Option
zwingt iasl, die ASL
zu übersetzen.Überschreiben der vorgegebenen
AMLNachdem Sie Ihre ASL in der
Datei ihre.asl angepasst haben,
übersetzen Sie die ASL wie folgt:&prompt.root; iasl ihre.aslMit der Option erzwingen Sie das
Erstellen der AML auch wenn während
der Übersetzung Fehler auftreten. Beachten Sie,
dass einige Fehler, wie fehlende Return-Anweisungen,
automatisch vom Interpreter umgangen werden.In der Voreinstellung erstellt der Befehl
iasl die Ausgabedatei
DSDT.aml. Wenn Sie diese Datei
anstelle der fehlerhaften Kopie des BIOS
laden wollen, editieren Sie /boot/loader.conf
wie folgt:acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"Stellen Sie bitte sicher, dass sich die Datei
DSDT.aml im Verzeichnis
/boot befindet.ACPI-Meldungen zur
Fehlersuche erzeugenACPIProbleme mitACPIFehlersucheDer ACPI-Treiber besitzt
flexible Möglichkeiten zur Fehlersuche. Sie
können sowohl die zu untersuchenden Subsysteme
als auch die zu erzeugenden Ausgaben festlegen. Die zu
untersuchenden Subsysteme werden als so genannte
layers angegeben. Die Subsysteme sind in
ACPI-CA-Komponenten
(ACPI_ALL_COMPONENTS) und
ACPI-Hardware (ACPI_ALL_DRIVERS)
aufgeteilt. Welche Meldungen ausgegeben werden, wird über
level gesteuert. level reicht
von ACPI_LV_ERROR (es werden nur Fehler
ausgegeben) bis zu ACPI_LV_VERBOSE (alles
wird ausgegeben). level ist eine Bitmaske,
sodass verschiedene Stufen auf einmal (durch Leerzeichen
getrennt) angegeben werden können. Die erzeugte
Ausgabemenge passt vielleicht nicht in den Konsolenpuffer.
In diesem Fall sollten Sie die Ausgaben mithilfe einer
seriellen Konsole sichern. Die möglichen Werte
für layers und level
werden in der Hilfeseite &man.acpi.4; beschrieben.Die Ausgaben zur Fehlersuche sind in der Voreinstellung
nicht aktiviert. Wenn ACPI im Kernel
enthalten ist, fügen Sie options ACPI_DEBUG
zur Kernelkonfigurationsdatei hinzu. Sie können die
Ausgaben zur Fehlersuche global aktivieren, indem Sie in der
Datei /etc/make.conf die Zeile
ACPI_DEBUG=1 einfügen. Das Modul
acpi.ko können Sie wie folgt
neu übersetzen:&prompt.root; cd /sys/modules/acpi/acpi
&& make clean &&
make ACPI_DEBUG=1Installieren Sie anschließend
acpi.ko im Verzeichnis
/boot/kernel.
In der Datei loader.conf stellen Sie
level und layer ein. Das
folgende Beispiel aktiviert die Ausgabe von Fehlern für
alle ACPI-CA-Komponenten und alle
ACPI-Hardwaretreiber (wie
CPU, LID):debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"Wenn ein Problem durch ein bestimmtes Ereignis,
beispielsweise den Start nach einem Ruhezustand, hervorgerufen
wird, können Sie die Einstellungen für
level und layer auch mit dem
Kommando sysctl vornehmen. In diesem
Fall müssen Sie die Datei loader.conf
nicht editieren. Auf der sysctl-Kommandozeile
geben Sie dieselben Variablennamen wie in
loader.conf an.ACPI-InformationsquellenWeitere Informationen zu ACPI
erhalten Sie an den folgenden Stellen:die &a.acpi; Mailingliste,die Archive der ACPI-Mailingliste:
,die alten Archive der ACPI-Mailingliste:
,die ACPI-Spezifikation (Version 2.0):
,in den nachstehenden &os;-Hilfeseiten:
&man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;,
&man.iasl.8; und &man.acpidb.8;,
DSDT debugging resource
(als Beispiel wird Compaq erläutert, die
Ressource ist aber dennoch nützlich).
diff --git a/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.sgml b/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
index 185c202ec5..5882efa15d 100644
--- a/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
@@ -1,2552 +1,3379 @@
JimMockUmstrukturiert und aktualisiert von
+
JordanHubbardIm Original von Poul-HenningKampJohnPolstraNikClayton
+
MartinHeinenÜbersetzt von &os; aktualisierenÜbersicht
- &os; wird zwischen einzelnen Releases konstant weiter entwickelt.
- Es gibt mehrere einfache Möglichkeiten, ein System auf dem
- aktuellen Stand der Entwicklung zu halten. Seien Sie jedoch gewarnt:
- Die neueste Version ist nicht für jeden geeignet! Dieses
- Kapitel hilft Ihnen bei der Entscheidung, ob Sie mit dem
- Entwicklungssystem Schritt halten oder ein Release verwenden
- wollen.
+ &os; wird zwischen einzelnen Releases ständig weiter
+ entwickelt. Manche Leute bevorzugen die offiziellen Release-Versionen,
+ während andere wiederum lieber auf dem aktuellen Stand der
+ Entwicklung bleiben möchten. Wie dem auch sei, sogar offizielle
+ Release-Versionen werden oft mit Sicherheitsaktualisierungen und
+ anderen kritischen Fehlerbereinigungen versorgt. Unabhängig von
+ der eingesetzten Version bringt &os; alle nötigen Werkzeuge mit,
+ um ihr System aktuell zu halten und es innerhalb verschiedener
+ Versionen zu aktualisieren. Dieses Kapitel hilft Ihnen bei der
+ Entscheidung, ob Sie mit dem Entwicklungssystem Schritt halten oder
+ ein Release verwenden wollen. Die zugrundeliegenden Werkzeuge um
+ Ihr System aktuell zu halten werden ebenfalls vorgestellt.Nachdem Sie dieses Kapitel gelesen haben, werden Sie
- den Unterschied der beiden Entwicklerversionen
- &os.stable; und &os.current; kennen,
+ wissen, welche Werkzeuge verwendet werden können, um das
+ System und die Port-Sammlung zu aktualisieren.wissen, wie Sie Ihr System mit
- CVSup, CVS
- oder CTM aktualisieren.
+ freebsd-update,
+ CVSup,
+ CVS oder
+ CTM
+ aktualisieren.
- Wissen, wie Sie das komplette Basissystem
- mit make buildworld neu bauen und
- installieren.
+ wissen, wie man das aktuell installierte System mit einer
+ ursprünglichen Version vergleicht.
+
+
+
+ wissen, wie Sie ihre Dokumentation mit
+ CVSup oder Dokumentations-Ports
+
+ aktuell halten können.
+
+
+
+ den Unterschied zwischen den beiden Entwicklungszweigen
+ &os.stable; und &os.current; kennen.
+
+
+
+ Wissen, wie Sie das komplette Basissystem mit make
+ buildworld neu bauen und installieren.Bevor Sie dieses Kapitel lesen, sollten SieIhr Netzwerk richtig konfiguriert haben
() undwissen, wie Sie Software Dritter installieren
().
+
+
+ Im gesamten Kapitel wird der Befehl cvsup
+ verwendet, um die &os; Quellen zu beziehen und zu aktualisieren. Um es
+ zu verwenden, benötigen Sie einen Port oder ein Paket wie
+ net/cvsup-without-gui. Wenn Sie
+ &os; 6.2-RELEASE oder eine spätere Version einsetzen,
+ können Sie dieses Programm durch &man.csup.1; ersetzen, das
+ nun Teil des Basissystems ist.
+
- FreeBSD Update (noch nicht übersetzt)
-
- Dieser Abschnitt ist noch nicht übersetzt.
- Lesen Sie bitte
- das Original in englischer Sprache. Wenn Sie helfen
- wollen, dieses Kapitel zu übersetzen, senden Sie bitte
- eine E-Mail an die Mailingliste &a.de.translators;.
+
+
+
+ Tom
+ Rhodes
+ Geschrieben von
+
+
+
+
+
+ Colin
+ Percival
+ Basierend auf bereitgestellten Mitschriften von
+
+
+
+
+
+ Benedict
+ Reuschling
+ Übersetzt von
+
+
+
+ &os;-Update
+
+ Updating and Upgrading
+
+ freebsd-update
+ updating-upgrading
+
+
+ Das Einspielen von Sicherheitsaktualisierungen ist ein wichtiger
+ Bestandteil bei der Wartung von Computersoftware, besonders wenn es um
+ das Betriebssystem geht. Für lange Zeit war dieser Prozess unter
+ &os; nicht einfach. Fehlerbehebungen mussten auf den Quellcode
+ angewendet werden, danach wurde der Code zu neuen Binärdateien
+ übersetzt und schliesslich mussten diese Dateien neu installiert
+ werden.
+
+ Das ist seit längerem nicht mehr der Fall, da &os; jetzt ein
+ Werkzeug namens freebsd-update enthält. Dieses
+ Werkzeug bringt zwei getrennte Funktionen mit sich. Die erste Funktion
+ ermöglicht die Anwendung von Sicherheitsaktualisierungen im
+ Binärformat auf das &os; Basissystem, ohne dieses neu zu
+ übersetzen und zu installieren. Die zweite Funktion
+ unterstützt Aktualisierungen zwischen Haupt- und
+ Unterversionen.
+
+
+ Binäre Aktualisierungen sind für alle Architekturen und
+ Releases verfügbar, die aktuell vom &os; Security Team betreut
+ werden. Allerdings benötigen manche Eigenschaften, wie die &os;
+ Betriebssystemaktualisierungen, die zu dieser Zeit aktuellste Version
+ von &man.freebsd-update.8; sowie &os; 6.3 oder höher. Vor
+ der Aktualisierung auf eine neue Release-Version sollten die aktuellen
+ Ankündigungen zu dem Release gelesen werden, da diese wichtige
+ Informationen zu der gewünschten Version enthalten. Diese
+ Ankündigungen finden Sie unter dem folgenden Link: .
+
+
+ Wenn eine crontab existiert, welche die
+ Eigenschaften von freebsd-update verwendet, muss diese
+ deaktiviert werden, bevor die folgende Aktion gestartet wird.
+
+
+ Die Konfigurationsdatei
+
+ Manche Anwender möchten sicherlich Einstellungen in der
+ Konfigurationsdatei vornehmen, um bessere Kontrolle über den
+ gesamten Prozess zu besitzen. Die Optionen sind sehr gut dokumentiert,
+ jedoch benötigen die folgenden ein paar zusätzliche
+ Erklärungen:
+
+ # Components of the base system which should be kept updated.
+Components src world kernel
+
+ Dieser Parameter kontrolliert, welche Teile von &os; auf dem
+ aktuellen Stand gehalten werden sollen. Die Voreinstellung ist es, den
+ Quellcode zu aktualisieren, das gesamte Basissystem sowie den Kernel.
+ Die Komponenten sind die gleichen wie während der Installation,
+ also würde beispielsweise das hinzufügen von "world/games" an
+ dieser Stelle es erlauben, Aktualisierungen für Spiele anzuwenden.
+ Die Verwendung von "src/bin" erlaubt es, den Quellcode in src/bin aktuell zu halten.
+
+ Die beste Einstellung ist, diese Option so zu belassen, da eine
+ Änderung es bedingt, dass man als Benutzer jede Komponente
+ auflisten muss, die aktualisiert werden soll. Dies könnte
+ katastrophale Folgen nach sich ziehen, da der Quellcode und die
+ Binärdateien dadurch nicht mehr synchron wären.
+
+ # Paths which start with anything matching an entry in an IgnorePaths
+# statement will be ignored.
+IgnorePaths
+
+ Fügen Sie Pfade wie /bin oder /sbin hinzu, um diese speziellen
+ Verzeichnisse während des Aktualisierungsprozesses unberührt
+ zu lassen. Diese Option kann verwendet werden, um zu verhindern, dass
+ freebsd-update lokale Änderungen
+ überschreibt.
+
+ # Paths which start with anything matching an entry in an UpdateIfUnmodified
+# statement will only be updated if the contents of the file have not been
+# modified by the user (unless changes are merged; see below).
+UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
+
+ Aktualisieren Sie Konfigurationsdateien in den angegebenen
+ Verzeichnissen nur, wenn diese nicht geändert wurden. Jegliche
+ Äderung, die der Benutzer daran vorgenommen hat, wird die
+ automatische Aktualisierung dieser Dateien ungültig machen.
+ Es gibt eine weitere Option KeepModifiedMetadata,
+ die freebsd-update instruiert, die Änderungen
+ während der Zusammenführung zu speichern.
+
+ # When upgrading to a new &os; release, files which match MergeChanges
+# will have any local changes merged into the version from the new release.
+MergeChanges /etc/ /var/named/etc/
+
+ Eine Liste von Verzeichnissen mit Konfigurationsdateien, in denen
+ freebsd-update Zusammenführungen versuchen
+ soll. Dieser Verschmelzungsprozess von Dateien ist eine Serie von
+ &man.diff.1;-Korrekturen, ähnlich wie &man.mergemaster.8; mit
+ weniger Optionen. Die Änderungen werden entweder akzeptiert,
+ öffnen einen Editor oder freebsd-update bricht
+ ab. Wenn Sie im Zweifel sind, sichern Sie das /etc Verzeichnis und akzeptieren einfach
+ die Änderungen. Lesen Sie , um
+ Informationen über das mergemaster-Kommando
+ zu erhalten.
+
+ # Directory in which to store downloaded updates and temporary
+# files used by &os; Update.
+# WorkDir /var/db/freebsd-update
+
+ In diesem Verzeichnis werden alle Korrekturen und temporären
+ Dateien abgelegt. Für Fälle in denen der Anwender eine
+ Versionsaktualisierung vornimmt, sollte diesem Verzeichnis mindestens
+ ein Gigabyte Festplattenspeicher zur Verfügung stehen.
+
+ # When upgrading between releases, should the list of Components be
+# read strictly (StrictComponents yes) or merely as a list of components
+# which *might* be installed of which &os; Update should figure out
+# which actually are installed and upgrade those (StrictComponents no)?
+# StrictComponents no
+
+ Wenn dies auf yes gesetzt ist, wird
+ freebsd-update annehmen, dass die
+ Components-Liste vollständig ist und nicht
+ versuchen, Änderungen ausserhalb dieser Liste zu tätigen.
+ Tatsächlich wird freebsd-update versuchen, jede
+ Datei zu aktualisieren, die zu der Components-Liste
+ gehöhrt.
+
+
+
+ Sicherheitsaktualisierungen
+
+ Sicherheitsaktualisierungen sind auf einer entfernten Maschine
+ abgelegt und können durch das folgende Kommando heruntergeladen
+ und installiert werden:
+
+ &prompt.root; freebsd-update fetch
+&prompt.root; freebsd-update install
+
+ Wenn irgendeine Änderung auf den Kernel angewendet wurde
+ benötigt das System einen Neustart. Wenn alles gut verlaufen ist,
+ sollte das System aktualisiert sein und
+ freebsd-update kann als nächtlicher
+ &man.cron.8;-Job ablaufen. Ein Eintrag in der Datei
+ /etc/crontab ist für diese Aufgabe
+ ausreichend:
+
+ @daily root freebsd-update cron
+
+ Dieser Eintrag besagt, dass einmal am Tag
+ freebsd-update ausgeführt wird. Auf diese
+ Weise kann freebsd-update nur durch die Verwendung
+ des -Arguments prüfen, ob Aktualisierungen
+ vorliegen. Wenn Korrekturen existieren, werden diese automatisch auf
+ die lokale Festplatte heruntergeladen, aber nicht eingespielt. Der
+ root-Benutzer bekommt eine Nachricht, damit dieser
+ die Korrekturen manuell installiert.
+
+ Sollte irgendetwas schief gelaufen sein, kann
+ freebsd-update den letzten Satz von Änderungen
+ mit dem folgenden Befehl zurückrollen:
+
+ &prompt.root; freebsd-update rollback
+
+ Sobald dieser Vorgang abgeschlossen ist, sollte das System neu
+ gestartet werden, wenn der Kernel oder ein beliebiges Kernelmodul
+ geändert wurde. Dies ermöglicht es &os;, die neuen
+ Binärdateien in den Hauptspeicher zu laden.
+
+ Das freebsd-update-Werkzeug kann nur den
+ GENERIC-Kernel automatisch aktualisieren. Wenn ein
+ selbstkonfigurierter Kernel verwendet wird, muss dieser neu erstellt
+ und installiert werden, nachdem freebsd-update den
+ Rest der Aktualisierungen durchgeführt hat. Allerdings wird
+ freebsd-update den GENERIC-Kernel
+ in /boot/GENERIC erkennen und
+ aktualisieren (falls dieser existiert), sogar dann, wenn dies nicht der
+ aktuell verwendete Kernel des Systems ist.
+
+
+ Es ist eine gute Idee, immer eine Kopie des
+ GENERIC-Kernels in /boot/GENERIC aufzubewahren. Das wird
+ bei der Diagnose von verschiedenen Problemen eine grosse Hilfe sein,
+ sowie bei der Durchführung von Versionsaktualisierungen mit
+ freebsd-update, wie in beschrieben ist.
+
+
+ Solange die Standardkonfiguration in
+ /etc/freebsd-update.conf nicht geändert
+ wurde, wird freebsd-update die aktualisierten
+ Quellcodedateien des Kernels zusammen mit dem Rest der Neuerungen
+ installieren. Die erneute Übersetzung und Installation ihres
+ neuen, selbstkonfigurierten Kernels kann dann auf die übliche
+ Art und Weise durchgeführt werden.
+
+
+ Die Aktualisierungen, die über
+ freebsd-update verteilt werden, betreffen nicht
+ immer den Kernel. Es ist nicht notwendig, den selbstkonfigurierten
+ Kernel neu zu erstellen, wenn die Kernelquellen nicht durch die
+ Ausführung von freebsd-update install
+ geändert wurden. Allerdings wird
+ freebsd-update auf alle Fälle die Datei
+ /usr/src/sys/conf/newvers.sh aktualisieren.
+ Der aktuelle Patch-Level (angegeben durch die
+ -p-Nummer, die von dem Kommando uname
+ -r ausgegeben wird) wird aus dieser Datei ausgelesen.
+ Die Neuinstallation des selbstkonfigurierten Kernels, selbst wenn
+ sich daran nichts geädert hat, erlaubt es &man.uname.1;, den
+ aktuellen Patch-Level des Systems korrekt wiederzugeben. Dies ist
+ besonders hilfreich, wenn mehrere Systeme gewartet werden, da es
+ eine schnelle Einschätzung der installierten Aktualisierungen in
+ jedem einzelnen System ermöglicht.
+
+
+
+
+ Aktualisierungen an Haupt- und Unterversionen
+
+ Dieser Prozess entfernt alte Objekt-Dateien und Bibliotheken, was
+ dazu führt, dass die meisten Anwendungen von Drittherstellern
+ nicht mehr funktionieren. Es wird empfohlen, dass alle installierten
+ Ports entweder entfernt und neu installiert oder zu einem späteren
+ Zeitpunkt mittels ports-mgmt/portupgrade aktualisiert werden.
+ Die meisten Anwender werden wahrscheinlich einen Testlauf mittels des
+ folgenden Kommandos durchführen wollen:
+
+ &prompt.root; portupgrade -af
+
+ Dies sorgt dafür, dass alles korrekt neu installiert wird.
+ Beachten Sie, dass das Setzen der
+ BATCH-Umgebungsvariable auf yes
+ während dieses Prozesses auf jede Eingabe mit
+ ja antwortet, was es nicht mehr notwendig macht,
+ manuell eingreifen zu müssen.
+
+ Wenn ein selbstkonfigurierter Kernel verwendet wird, ist der
+ Aktualisierungsprozess ein kleines bisschen aufwändiger. Eine
+ Kopie des GENERIC-Kernels wir benötigt und
+ sollte in /boot/GENERIC abgelegt
+ sein. Wenn der GENERIC-Kernel nicht bereits im
+ System vorhanden ist, kann dieser über eine der folgenden Methoden
+ bezogen werden:
+
+
+
+ Wenn ein eigener Kernel genau einmal gebaut wurde, ist der
+ Kernel im Verzeichnis /boot/kernel.old in Wirklichkeit der
+ GENERIC-Kernel. Benennen Sie einfach dieses
+ Verzeichnis in /boot/GENERIC um.
+
+
+
+ Angenommen, direkter Zugriff auf die Maschine ist möglich,
+ so kann eine Kopie des GENERIC-Kernels von den
+ CD-ROM-Medien installiert werden. Legen Sie die Installations-CD
+ ein und benutzen Sie die folgenden Befehle:
+
+ &prompt.root; mount /cdrom
+&prompt.root; cd /cdrom/X.Y-RELEASE/kernels
+&prompt.root; ./install.sh GENERIC
+
+ Ersetzen Sie X.Y-RELEASE
+ mit der richtigen Version der Veröffentlichung, die Sie
+ verwenden. Der GENERIC-Kernel wird
+ standardmässig in /boot/GENERIC installiert.
+
+
+
+ Falls alle obigen Schritte fehlschlagen, kann der
+ GENERIC-Kernel folgendermassen aus den Quellen
+ neu gebaut und installiert werden:
+
+ &prompt.root; cd /usr/src
+&prompt.root; env DESTDIR=/boot/GENERIC make kernel
+&prompt.root; mv /boot/GENERIC/boot/kernel/* /boot/GENERIC
+&prompt.root; rm -rf /boot/GENERIC/boot
+
+ Damit dieser Kernel als GENERIC-Kernel von
+ freebsd-update erkannt wird, darf die
+ GENERIC-Konfigurationsdatei in keinster Weise
+ geändert worden sein. Es wird ebenfalls empfohlen, dass
+ dieser ohne irgendwelche speziellen Optionen erstellt wird
+ (bevorzugt mit einer leeren
+ /etc/make.conf).
+
+
+
+ Der Neustart in den GENERIC-Kernel ist zu diesem
+ Zeitpunkt nicht notwendig.
+
+ Aktualisierungen an Haupt- und Unterversionen können
+ durchgeführt werden, wenn man freebsd-update
+ eine Release-Version als Ziel übergibt. Beispielsweise wird das
+ folgende Kommando das System auf &os; 6.4 aktualisieren:
+
+ &prompt.root; freebsd-update -r 6.4-RELEASE upgrade
+
+ Nachdem das Kommando empfangen wurde, überprüft
+ freebsd-update die Konfigurationsdatei und das
+ aktuelle System, um die nötigen Informationen für die
+ Systemaktualisierung zu sammeln. Eine Bildschirmausgabe wird anzeigen,
+ welche Komponenten erkannt und welche nicht erkannt wurden.
+ Zum Beispiel:
+
+ Looking up update.FreeBSD.org mirrors... 1 mirrors found.
+Fetching metadata signature for 6.3-RELEASE from update1.FreeBSD.org... done.
+Fetching metadata index... done.
+Inspecting system... done.
+
+The following components of FreeBSD seem to be installed:
+kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
+src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
+src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
+world/base world/info world/lib32 world/manpages
+
+The following components of FreeBSD do not seem to be installed:
+kernel/generic world/catpages world/dict world/doc world/games
+world/proflibs
+
+Does this look reasonable (y/n)? y
+
+ An diesem Punkt wird freebsd-update versuchen,
+ alle notwendigen Dateien für die Aktualisierung herunter zu laden.
+ In manchen Fällen wird der Benutzer mit Fragen konfrontiert, um
+ festzustellen, was installiert werden soll oder auf welche Art und
+ Weise fortgesetzt werden soll.
+
+ Wenn ein selbstkonfigurierter Kernel benutzt wird, produziert der
+ vorherige Schritt eine Warnung ähnlich zu der folgenden:
+
+ WARNING: This system is running a "MYKERNEL" kernel, which is not a
+kernel configuration distributed as part of FreeBSD 6.3-RELEASE.
+This kernel will not be updated: you MUST update the kernel manually
+before running "/usr/sbin/freebsd-update install"
+
+ Diese Warnung kann an dieser Stelle problemlos ignoriert
+ werden. Der aktualisierte GENERIC-Kernel wird als
+ ein Zwischenschritt im Aktualisierungsprozess verwendet.
+
+ Nachdem alle Korrekturen auf das lokale System heruntergeladen
+ wurden, werden diese nun eingespielt. Dieser Prozess kann eine gewisse
+ Zeit in Anspruch nehmen, abhängig von der Geschwindigkeit und
+ Auslastung der Maschine. Konfigurationsdateien werden ebenfalls
+ zusammengefügt - dieser Teil der Prozedur benötigt einige
+ Benutzereingaben, da eine Datei möglicherweise von Hand
+ zusammengefasst werden muss oder ein Editor erscheint auf dem
+ Bildschirm zum manuellen bearbeiten. Die Ergebnisse von jeder
+ erfolgreichen Zusammenfassung werden dem Benutzer angezeigt,
+ während der Prozess weiterläuft. Eine fehlgeschlagene oder
+ ignorierte Zusammenfassung wird den Prozess sofort beenden. Benutzer
+ sollten eine Sicherung von /etc
+ anlegen und wichtige Dateien später manuell vereinen,
+ beispielsweise master.passwd oder
+ group.
+
+
+ Das System ist noch nicht verändert worden, alle Korrekturen
+ und Vereinigungen sind in einem anderen Verzeichnis vorgenommen
+ worden. Wenn alle Korrekturen erfolgreich eingespielt, alle
+ Konfigurationsdateien zusammengefügt wurden und es den Anschein
+ hat, dass der Prozess problemlos verlaufen wird, müssen die
+ Änderungen vom Anwender noch angewendet werden.
+
+
+ Sobald dieser Prozess abgeschlossen ist, können die
+ Aktualisierungen über das folgende Kommando auf die Platte
+ geschrieben werden:
+
+ &prompt.root; freebsd-update install
+
+ Der Kernel und die Module werden zuerst aktualisiert. Zu diesem
+ Zeitpunkt muss die Maschine neu gestartet werden. Wenn das System
+ einen selbstkonfigurierten Kernel verwendet, benutzen Sie das
+ &man.nextboot.8;-Kommando, um den Kernel für den nächsten
+ Neustart auf /boot/GENERIC zu
+ setzen (welcher aktualisiert wurde):
+
+ &prompt.root; nextboot -k GENERIC
+
+
+ Bevor mit dem GENERIC-Kernel das System neu
+ gestartet wird, vergewissern Sie sich, dass alle notwendigen Treiber
+ für ihr System enthalten sind, um korrekt zu starten (und
+ schliessen Sie ihn ans Netzwerk an, falls auf die Maschine, die
+ aktualisiert wird, von der Ferne aus zugegriffen wird). Achten Sie
+ besonders darauf, dass wenn der vorherige selbstkonfigurierte Kernel
+ Funktionalität beinhaltet, die von Kernelmodulen zur
+ Verfügung gestellt wurde, dass diese temporär in den
+ GENERIC-Kernel über die Datei
+ /boot/loader.conf übernommen werden.
+ Sie sollten ebenfalls nicht benötigte Dienste, eingehängte
+ Platten, verbundene Netzlaufwerke, usw. deaktivieren, bis der
+ Aktualisierungsprozess abgeschlossen ist.
+
+
+ Die Maschine sollte nun mit dem aktualisierten Kernel neu
+ gestartet werden:
+
+ &prompt.root; shutdown -r now
+
+ Sobald das System wieder hochgefahren wurde, muss
+ freebsd-update erneut gestartet werden. Der Zustand
+ des Prozesses wurde zuvor gesichert und deshalb wird
+ freebsd-update nicht von vorne beginnen, jedoch alle
+ alten Shared-Libraries und Objektdateien löschen. Um zu diesem
+ Zustand zu gelangen, setzen Sie das folgende Kommando ab:
+
+ &prompt.root; freebsd-update install
+
+
+ Abhängig davon, ob irgendwelche Bibliotheksversionen
+ erhöht wurden, kann es sein, dass nur zwei Installationsphasen
+ anstatt drei durchlaufen werden.
+
+
+ Nun muss alle Drittanbieter-Software neu erstellt und neu
+ installiert werden. Dies ist notwendig, da die installierte Software
+ möglicherweise Abhängigkeiten zu Bibliotheken enthält,
+ die während der Aktualisierung entfernt wurden. Der ports-mgmt/portupgrade-Befehl kann verwendet
+ werden, um diesen Vorgang zu automatisieren. Die folgenden Kommandos
+ können verwendet werden, um diesen Prozess zu starten:
+
+ &prompt.root; portupgrade -f ruby
+&prompt.root; rm /var/db/pkg/pkgdb.db
+&prompt.root; portupgrade -f ruby18-bdb
+&prompt.root; rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db
+&prompt.root; portupgrade -af
+
+ Sobald dies abgeschlossen ist, beenden Sie den
+ Aktualisierungsprozess mit einem letzten Aufruf von
+ freebsd-update. Geben Sie den folgenden Befehl ein,
+ um alle losen Enden des Aktualisierungsprozesses miteinander zu
+ verknüpfen:
+
+ &prompt.root; freebsd-update install
+
+ Wenn der GENERIC-Kernel temporär Verwendung
+ fand, ist dies der richtige Zeitpunkt, einen neuen,
+ selbstkonfigurierten Kernel zu bauen und über die übliche
+ Methode zu installieren.
+
+ Booten Sie anschliessend die Maschine in die neue &os;-Version.
+ Der Prozess ist damit abgeschlossen.
+
+
+
+ Vergleich des Systemzustands
+
+ Das freebsd-update-Werkzeug kann verwendet
+ werden, um den Zustand der installierten &os;-Version gegenüber
+ einer bekannten und funktionierenden Kopie zu vergleichen. Diese
+ Option vergleicht die aktuelle Version von Systemwerkzeugen,
+ Bibliotheken und Konfigurationsdateien. Um diesen Vergleich zu
+ starten, geben Sie den folgenden Befehl ein:
+
+ &prompt.root; freebsd-update IDS >> outfile.ids
+
+
+ Obwohl der Befehlsname IDS lautet, sollte er
+ in keiner Weise als Ersatz für ein Intrusion Detection System
+ wie security/snort angesehen
+ werden. Da freebsd-update seine Daten auf Platte
+ ablegt, ist die Möglichkeit von Verfälschungen
+ offensichtlich. Obwohl diese Möglichkeit durch die Verwendung
+ von kern.securelevel oder die Ablage von
+ freebsd-update auf einem Nur-Lese Dateisystem,
+ wenn es gerade nicht gebraucht wird, eingedämmt werden kann,
+ besteht eine bessere Lösung darin, das System gegen ein
+ gesichertes Medium, wie eine DVD oder einen
+ externen, separat aufbewahrten
+ USB-Plattenspeicher, zu vergleichen.
+
+
+ Das System wird jetzt untersucht und eine Liste von Dateien
+ ausgegeben, zusammen mit deren &man.sha256.1;-Hashwerten, sowohl der
+ von der Release-Version bekannte Wert als auch der des aktuell
+ installierten Systems. Das ist der Grund dafür, warum die Ausgabe
+ an die Datei outfile.ids geschickt wurde. Es
+ scrollt zu schnell vorbei, um diese mit den Augen zu vergleichen und
+ bald wird auch der Konsolenpuffer damit überfüllt.
+
+ Diese Zeilen sind dazu noch extrem lang, aber das Ausgabeformat
+ kann sehr einfach verarbeitet werden. Um beispielsweise eine Liste von
+ allen Dateien zu erhalten, die sich vom aktuellen Release
+ unterscheiden, geben Sie das folgende Kommando ein:
+
+ &prompt.root; cat outfile.ids | awk '{ print $1 }' | more
+/etc/master.passwd
+/etc/motd
+/etc/passwd
+/etc/pf.conf
+
+ Diese Ausgabe wurde abgeschnitten, es existieren noch viel mehr
+ Dateien dazu. Manche dieser Dateien besitzen ganz
+ selbstverständliche Veränderungen,
+ /etc/passwd wurde beispielsweise geändert,
+ um Benutzer zum System hinzuzufügen. In manchen Fällen kann
+ es anderen Dateien wie Kernelmodule geben, welche sich geändert
+ haben, weil freebsd-update diese aktualisiert hat.
+ Um bestimmte Dateien oder Verzeichnisse auszuschliessen, hängen
+ Sie diese an die IDSIgnorePaths-Option in
+ /etc/freebsd-update.conf an.
+
+ Diese Vorgehensweise kann als Teil einer ausgeklügelten
+ Aktualisierungsmethode benutzt werden, unabhängig von der zuvor
+ angesprochenen Variante.
+ TomRhodesGeschrieben von ColinPercivalBasierend auf bereitgestellten Mitschriften von BenedictReuschlingÜbersetzt von Portsnap: Ein Werkzeug zur Aktualisierung der Ports-SammlungUpdating and UpgradingPortsnapUpdating and UpgradingDas Basissystem von &os; enthält auch ein Programm zum
Aktualisieren der Ports-Sammlung: das &man.portsnap.8; Werkzeug. Wenn
es ausgeführt wird, verbindet es sich mit einem entfernten Rechner,
überprüft den Sicherungsschlüssel und lädt eine neue
Kopie der Ports-Sammlung herunter. Der Schlüssel wird dazu
verwendet, um die Integrität aller heruntergeladenen Dateien zu
prüfen und um sicherzustellen, dass diese unterwegs nicht
verändert wurden. Um die aktuellsten Dateien der Ports-Sammlung
herunter zu laden, geben Sie das folgende Kommando ein:&prompt.root; portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found.
Fetching snapshot tag from portsnap1.FreeBSD.org... done.
Fetching snapshot metadata... done.
Updating from Wed Aug 6 18:00:22 EDT 2008 to Sat Aug 30 20:24:11 EDT 2008.
Fetching 3 metadata patches.. done.
Applying metadata patches... done.
Fetching 3 metadata files... done.
Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done.
Applying patches... done.
Fetching 133 new ports or files... done.Dieses Beispiel zeigt, dass &man.portsnap.8; mehrere Korrekturen
für die aktuellen Ports-Daten gefunden und verifiziert hat. Es
zeigt auch, dass das Programm zuvor schon einmal gestartet wurde.
Wäre es das erste Mal, würde nur die Ports-Sammlung
heruntergeladen werden.Wenn &man.portsnap.8; erfolgreich die
fetch-Operation abgeschlossen hat, befinden sich die
Ports-Sammlung und die dazugehörigen Korrekturen auf dem lokalen
- System, welches die Überprüfung bestanden hat. Die
- aktualisierten Dateien können nun installiert werden durch die
- Eingabe von:
+ System, welches die Überprüfung bestanden hat. Wenn
+ portsnap das erste Mal ausgeführt wird,
+ verwenden Sie extract, um die aktualisierten Dateien
+ zu installieren:
&prompt.root; portsnap extract
/usr/ports/.cvsignore
/usr/ports/CHANGES
/usr/ports/COPYRIGHT
/usr/ports/GIDs
/usr/ports/KNOBS
/usr/ports/LEGAL
/usr/ports/MOVED
/usr/ports/Makefile
/usr/ports/Mk/bsd.apache.mk
/usr/ports/Mk/bsd.autotools.mk
/usr/ports/Mk/bsd.cmake.mk
...
+ Für weitere Aufrufe von portsnap fetch
+ sollte stattdessen update verwendet werden:
+
+ &prompt.root; portsnap update
+
Der Prozess ist jetzt abgeschlossen und Anwendungen können
mittels der aktuellen Ports-Sammlung installiert oder aktualisiert
werden.
- Um beide Prozesse nacheinander auszuführen, geben Sie das
- folgende Kommando ein:
+ Die Operationen fetch und
+ extract oder update können
+ auch nacheinander ausgeführt werden, wie im folgenden Beispiel
+ gezeigt:&prompt.root; portsnap fetch updateBenedictReuschlingÜbersetzt von Aktualisieren der DokumentationssammlungUpdating and UpgradingDocumentationUpdating and UpgradingNeben dem Basissystem und der Ports-Sammlung ist die Dokumentation
ein wichtiger Bestandteil des &os; Betriebssystems. Obwohl eine aktuelle
Version der &os; Dokumentation jederzeit auf der &os; Webseite verfügbar
ist, verfügen manche Benutzer nur über eine langsame oder
überhaupt keine Netzwerkverbindung. Glücklicherweise gibt es
mehrere Möglichkeiten, die Dokumentation, welche mit jeder Version
ausgeliefert wird, zu aktualisieren, indem eine lokale Kopie der
aktuellen &os;-Dokumentationssammlung verwendet wird.Verwenden von CVSup um die Dokumentation zu aktualisierenDie Quellen und die installierte Kopie der &os; Dokumentation
kann mittels CVSup aktualisiert werden,
indem ein ähnlicher Mechanismus angewendet wird, wie derjenige
für die Betriebssystemquellen (vergleichen Sie mit ). Dieser Abschnitt beschreibt:Wie die Dokumentations-Werkzeugsammlung installiert wird,
welche die Werkzeuge enthält, die nötig sind, um die
&os; Dokumentation aus den Quellen neu zu erstellen.Wie man eine Kopie der Dokumentationsquellen nach /usr/doc herunterlädt, unter
Verwendung von CVSup.Wie man die &os; Dokumentation aus den Quellen baut und unter
/usr/share/doc
installiert.Manche der Optionen zum Erstellen, die vom System zum Bauen der
Dokumentation unterstützt werden, z.B. die Optionen welche nur
ein paar der unterschiedlichen Sprachübersetzungen der
Dokumentation erstellen oder die Optionen, die ein bestimmtes
Ausgabeformat auswählen.CVSup und die Werkzeugsammlung der Dokumentation
installierenDie &os; Dokumentation aus dem Quellen zu erstellen benötigt
eine ziemlich grosse Anzahl an Werkzeugen. Diese Werkzeuge sind nicht
Teil des &os; Basissystems, da sie eine grosse Menge an Plattenplatz
verbrauchen und nicht von allen &os;-Anwendern benötigt werden.
Sie sind nur für diejenigen Benutzer notwendig, die aktiv an neuer
Dokumentation fü &os; schreiben oder häufig ihre
Dokumentation aus den Quellen bauen lassen.Alle benötigten Werkzeuge sind als Teil der Ports-Sammlung
verfügbar. Der Port textproc/docproj dient als Masterport, der
vom &os; Documentation Project entwickelt wurde, um die initiale
Installation und zukünftige Aktualisierungen dieser Werkzeuge zu
vereinfachen.Wenn Sie die Dokumentation nicht als &postscript; oder PDF
benötigen, können Sie alternativ die Installation des
textproc/docproj-nojadetex-Ports
in Erwägung ziehen. Diese Version der
Dokumentations-Werkzeugsammlung enthält alles ausser das
teTeX-Textsatzsystem.
teTeX ist eine sehr grosse Sammlung an
Werkzeugen, deshalb ist es vernünftig, deren Installation
auszulassen, wenn die Ausgabe von PDF nicht unbedingt gebraucht
wird.Für weitere Informationen über das Installieren und
Verwenden von CVSup, lesen Sie CVSup verwenden.Die Dokumentationsquellen aktualisierenDas Programm CVSup kann eine saubere
Kopie der Dokumentationsquellen holen, indem es die Datei
/usr/share/examples/cvsup/doc-supfile als
Konfigurationsvorlage verwendet. Der Standard-Host zum Aktualisieren
ist auf einen Platzhalterwert im doc-supfile
gesetzt, aber &man.cvsup.1; akzeptiert auch einen Hostnamen über
die Kommandozeile. Somit können die Dokumentationsquellen von
einem der CVSup-Server geholt werden, indem
man eingibt:&prompt.root; cvsup -h cvsup.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/doc-supfileÄndern Sie cvsup.FreeBSD.org auf
den Ihnen am nächsten gelegenen
CVSup-Server. Eine vollständige Liste
von Spiegelservern finden Sie unter .Es dauert eine Weile, wenn die Dokumentationsquellen das allererste
Mal heruntergeladen werden. Lassen Sie es laufen, bis es fertig
ist.Zukünftige Aktualisierungen der Dokumentationsquellen
können Sie über den gleichen Befehl bekommen. Das Programm
CVSup lädt und kopiert nur diejenigen
Aktualisierungen herunter, die seit seinem letzten Aufruf hinzugekommen
sind. Deshalb sollte jeder weitere Aufruf von
CVSup nach dem Ersten wesentlich schneller
abgeschlossen sein.Nachdem die Quellen einmal ausgecheckt wurden, besteht ein anderer
Weg, die Dokumentation zu aktualisieren, darin, das
Makefile im Verzeichnis /usr/doc anzupassen. Durch setzen von
SUP_UPDATE, SUPHOST und
DOCSUPFILE in der Datei
/etc/make.conf ist es jetzt möglich,
folgendes zu tun:&prompt.root; cd /usr/doc
&prompt.root; make updateEin typischer Satz dieser &man.make.1;-Optionen für
/etc/make.conf ist:SUP_UPDATE= yes
SUPHOST?= cvsup.freebsd.org
DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfileDas Setzen des Werts von SUPHOST und
DOCSUPFILE auf ?= erlaubt es,
diese in der Kommandozeile von make zu überschreiben. Diese
Methode wird empfohlen, um Optionen zu make.conf
hinzuzufügen, um zu verhinden, dass man die Datei jedes Mal
bearbeiten muss, um einen anderen Wert für die Option
auszuprobieren.Einstellbare Optionen der DokumentationsquellenDas System zum aktualisieren und erstellen der &os;-Dokumentation
unterstützt ein paar Optionen, welche den Prozess der
Aktualisierung von Teilen der Dokumentation oder einer bestimmten
Übersetzung erleichtert. Diese Optionen lassen sich entweder
systemweit in der Datei /etc/make.conf setzen,
oder als Kommandozeilenoptionen, die dem &man.make.1;-Werkzeug
übergeben werden.Die folgenden Optionen sind ein paar davon:DOC_LANGEine Liste von Sprachen und Kodierungen, die gebaut und
installiert werden sollen, z.B.
en_US.ISO8859-1, um nur die englische
Dokumentation zu erhalten.FORMATSEin einzelnes Format oder eine Liste von Ausgabeformaten, das
gebaut werden soll. Momentan werden html,
html-split, txt,
ps, pdf,
und rtf unterstützt.SUPHOSTDer Hostname des CVSup-Servers,
der verwendet werden soll, um Aktualisierungen zu holen.DOCDIRWohin die Dokumentation installiert werden soll. Der
Standardpfad ist /usr/share/doc.Für weitere make-Variablen, die als systemweite Optionen
in &os; unterstützt werden, lesen Sie &man.make.conf.5;.Für weitere make-Variablen, die vom System zum Erstellen der
&os;-Dokumentation unterstützt werden, lesen Sie die Fibel für neue
Mitarbeiter des &os;-Dokumentationsprojekts.Die &os;-Dokumentation aus den Quellen installierenWenn ein aktueller Schnappschuss der Dokumentationsquellen nach
/usr/doc heruntergeladen wurde,
ist alles bereit für eine Aktualisierung der bestehenden
Dokumentation.Eine komplette Aktualisierung aller Sprachoptionen, definiert durch
die DOC_LANG Makefile-Option, kann durch folgende
Eingabe erreicht werden:&prompt.root; cd /usr/doc
&prompt.root; make install cleanWenn make.conf mit den richtigen Optionen
DOCSUPFILE, SUPHOST und
SUP_UPDATE eingerichtet wurde, kann der
Installationsschritt mit einer Aktualisierung der Dokumentationsquellen
kombiniert werden, indem man eingibt:&prompt.root; cd /usr/doc
&prompt.root; make update install cleanWenn nur eine Aktualisierung einer bestimmten Sprache
gewünscht wird, kann &man.make.1; in einem sprachspezifischen
Unterverzeichnis von /usr/doc
aufgerufen werden, z.B.:&prompt.root; cd /usr/doc/en_US.ISO8859-1
&prompt.root; make update install cleanDie zu installierenden Ausgabeformate können durch das Setzen
der make-Variablen FORMATS angegeben werden,
z.B.:&prompt.root; cd /usr/doc
&prompt.root; make FORMATS='html html-split' install cleanMarcFonvieilleBasierend auf der Arbeit von Verwendung von Dokumentations-PortsUpdating and Upgradingdocumentation packageUpdating and UpgradingIm vorherigen Abschnitt wurde eine Methode gezeigt, wie die
&os;-Dokumentation aus den Quellen gebaut werden kann. Allerdings sind
quellbasierte Aktualisierungen möglicherweise nicht für alle
&os;-Systeme geeignet oder praktikabel. Das Erstellen der
Dokumentationsquellen benötigt eine grosse Anzahl an Werkzeugen,
Programmen und Hilfsmitteln, die documentation
toolchain, ein gewisser Grad an Vertrautheit mit
CVS und ausgecheckte Quellen von einem
Repository, sowie ein paar manuelle Schritte, um diese ausgecheckten
Quellen zu bauen. In diesem Abschnitt wird eine alternative Art und
Weise vorgestellt, wie man die installierte Kopie der
&os;-Dokumentation aktualisieren kann. Diese Methode verwendet die
Ports-Sammlung und erlaubt es:vorgefertige Schnappschüsse der Dokumentation herunter zu
laden und zu installieren, ohne vorher irgendetwas lokal zu
erstellen (dadurch ist es nicht mehr notwenig, den kompletten
Werkzeugkasten der Dokumentation zu installieren).die Dokumentationsquellen herunterzuladen und durch das
Ports-System erstellen zu lassen (was die Schritte zum Auschecken
und Erstellen etwas erleichtert).Diese beiden Methoden der Aktualisierung der &os;-Dokumentation
werden durch eine Menge von Dokumentations-Ports
unterstützt, die von &a.doceng; monatlich aktualisiert wird.
Diese sind in der Ports-Sammlung unter der virtuellen Kategorie, docs genannt,
gelistet.Erstellen und Installieren von Dokumentations-PortsDie Dokumentations-Ports nutzen das Ports-System, um das
Erstellen von Dokumentation wesentlich einfacher zu machen. Es
automatisiert den Prozess des Auscheckens der Dokumentationsquellen,
aufrufen von &man.make.1; mit den passenden Umgebungsvariablen und
Kommandozeilenoptionen und macht die Installation und Deinstallation
von Dokumentation so einfach wie die Installation von jedem anderen
Port oder Paket.Als zusätzliche Eigenschaft zeichnen sie eine
Abhängigkeit zum
Dokumentations-Werkzeugsatz auf, wenn die
Dokumentations-Ports lokal erstellt werden, weshalb dieser auch
automatisch mitinstalliert wird.Die Dokumentations-Ports sind wie folgt organisiert:Es existiert ein Master-Port, misc/freebsd-doc-en, in dem alle
Dateien zu den Dokumentations-Ports abgelegt sind. Es dient als
Basis für alle Dokumentations-Ports. Als Voreinstellung
wird nur die englische Dokumentation gebaut.Es gibt einen Alles-in-Einem-Port, misc/freebsd-doc-all, welcher die
komplette Dokumentation in allen verfügbaren Sprachen
erstellt und installiert.Schliesslich gibt es noch einen sogenannten slave
port f&¨r jede Übersetzung, z.B.: misc/freebsd-doc-hu für
Dokumentation in ungarischer Sprache. All diese benötigen
den Master-Port und installieren die übersetzte
Dokumentation in der entsprechenden Sprache.Um einen Dokumentations-Port aus den Quellen zu installieren,
geben Sie das folgende Kommando (als root)
ein:&prompt.root; cd /usr/ports/misc/freebsd-doc-en
&prompt.root; make install cleanAuf diese Weise wird die englische Dokumentation gebaut und als
getrenntes HTML-Format im Verzeichnis /usr/local/share/doc/freebsd installiert
(genau wie unter zu
finden).Gebräuchliche Schalter und OptionenEs gibt viele Optionen, um das Standarderhalten der
Dokumentations-Ports zu verändern. Im Folgenden sind nur ein
paar davon aufgeführt:WITH_HTMLErlaubt das Erstellen im HTML-Format: eine einzige
HTML-Datei pro Dokument. Die formatierte Dokumentation wird
als Datei mit dem Namen article.html
gespeichert, oder, je nachdem, als
book.html, zuzuüglich der
Bilder.WITH_PDFErlaubt das Erstellen von &adobe; Portable Document
Format, für die Verwendung mit &adobe; &acrobat.reader;,
Ghostscript oder anderen
PDF-Betrachtern. Die formatierte Dokumentation wird als Datei
mit dem Namen article.pdf oder, soweit
angemessen, als book.pdf
gespeichert.DOCBASEWohin die Dokumentation installiert werden soll. Der
Standardpfad ist /usr/local/share/doc/freebsd.Beachten Sie, dass sich der Standardpfad von dem
Verzeichnis unterscheidet, das von der
CVSup-Methode verwendet wird.
Das liegt daran, dass ein Port installiert wird und diese
überlicherweise im Verzeichnis /usr/local abgelegt werden.
Durch setzen der PREFIX-Variablen kann
dieses Verhalten geändert werden.Es folgt ein kurzes Beispiel, wie die Variablen verwendet
werden, um die oben erwähnte ungarische Dokumentation als
Portable Document Format zu installieren:&prompt.root; cd /usr/ports/misc/freebsd-doc-hu
&prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install cleanVerwendung von Dokumentations-PaketenDas Erstellen der Dokumentations-Ports aus den Quellen, wie im
vorherigen Abschnitt beschrieben, benötigt die lokale
Installation der Dokumentations-Werkzeugsammlung und ein wenig
Festplattenspeicher für das Bauen der Ports. Sollten die
Ressourcen zum Bauen der Dokumentations-Werkzeugsammlung nicht zur
Verfügung stehen, oder weil das erstellen zuviel Plattenplatz
benötigen würde, ist es trotzdem möglich, bereits
zuvor gebaute Schnappschüsse der Dokumentations-Ports zu
installieren.&a.doceng; erstellt monatliche Schnappschüsse der
Dokumentations-Pakete von &os;. Diese Binärpakete können
mit jedem der mitgelieferten Paketwerkzeuge installiert werden,
beispielsweise &man.pkg.add.1;, &man.pkg.delete.1; und so
weiter.Wenn Binärpakete zu Einsatz kommen, wird die
&os;-Dokumentation in allen verfügbaren
Formaten in der gegebenen Sprache installiert.Zum Beispiel installiert das folgende Kommando das aktuelle,
vorgefertigte Paket der ungarischen Dokumentation:&prompt.root; pkg_add -r hu-freebsd-docPakete haben das folgende Namensformat, welches sich von dem
Namen des dazugehörigen Ports unterscheidet:
lang-freebsd-doc.
lang entspricht hier der Kurzform des
Sprachcodes, z.B. hu für Ungarisch, oder
zh_cn für vereinfachtes Chinesisch.Dokumentations-Ports aktualisierenUm einen zuvor installierten Dokumentations-Port zu aktualisieren,
kann jedes Werkzeug, das auch zum Aktualisieren von Ports verwendet
wird, eingesetzt werden. Beispielsweise aktualisiert das folgende
Kommando die installierte ungarische Dokumentation mittels des
Programms ports-mgmt/portupgrade indem nur Pakete
verwendet werden sollen:&prompt.root; portupgrade -PP hu-freebsd-docPavLucistnikBased on information provided by Using DocsnapUpdating and UpgradingDocsnapUpdating and UpgradingDocsnap is an &man.rsync.1;
repository for updating installed &os; Documentation in a
relatively easy and fast way. A
Docsnap server tracks
the documentation sources, and builds them in HTML format every
hour. The textproc/docproj
is unneeded with Docsnap as only
patches to the built documentation exist.The only requirement for using this technique is
the net/rsync port or
package. To add it, use the following command:&prompt.root; pkg_add -r rsyncDocsnap has been originally
developed for updating documentation installed
to /usr/share/doc, but
the following examples could be adapted for other directories
as well. For user directories, it does not require
root privileges.To update the documentation set, issue the following
command:&prompt.root; rsync -rltvz docsnap.sk.FreeBSD.org::docsnap /usr/share/docThere is only one Docsnap
server at the moment;
the docsnap.sk.FreeBSD.org shown
above.Do not use the flag here as there
are some items installed
into /usr/share/doc
during make installworld, which would
accidentally be removed. To clean up, use this command
instead:&prompt.root; rsync -rltvz --delete docsnap.sk.FreeBSD.org::docsnap/??_??\.\* /usr/share/docIf a subset of documentation needs to be updated, for
example, the English documentation only, the following command
should be used:&prompt.root; rsync -rltvz docsnap.sk.FreeBSD.org::docsnap/en_US.ISO8859-1 /usr/share/doc
]]>
Einem Entwicklungszweig folgen-CURRENT-STABLEFreeBSD besitzt zwei Entwicklungszweige: &os.current; und
&os.stable;. Dieser Abschnitt beschreibt beide Zweige und
erläutert, wie Sie Ihr System auf dem aktuellen Stand
eines Zweiges halten. Zuerst wird &os.current; vorgestellt, dann
&os.stable;.&os.current;Beachten Sie im Folgenden, dass &os.current; die Spitze
der Entwicklung von &os; ist. Benutzer von &os.current; sollten
über sehr gute technische Fähigkeiten verfügen und
in der Lage sein, schwierige Probleme alleine zu lösen. Wenn
&os; neu für Sie ist, überlegen Sie sich genau, ob Sie
&os.current; benutzen wollen.Was ist &os.current;?Snapshot&os.current; besteht aus den neuesten Quellen des
FreeBSD-Systems. Es enthält Sachen, an denen gerade
gearbeitet wird, experimentelle Änderungen und
Übergangsmechanismen, die im nächsten offiziellen
Release der Software enthalten sein können oder nicht.
Obwohl &os.current; täglich von vielen Entwicklern gebaut
wird, gibt es Zeiträume, in denen sich das System nicht
bauen lässt. Diese Probleme werden so schnell wie
möglich gelöst, aber ob Sie mit &os.current;
Schiffbruch erleiden oder die gewünschten Verbesserungen
erhalten, kann von dem Zeitpunkt abhängen, an dem Sie sich
den Quelltext besorgt haben!Wer braucht &os.current;?&os.current; wird hauptsächlich für 3
Interessengruppen zur Verfügung gestellt:Entwickler, die an einem Teil des Quellbaums arbeiten und
daher über die aktuellen Quellen verfügen
müssen.Tester, die bereit sind, Zeit in das Lösen von
Problemen zu investieren und sicherstellen, dass
&os.current; so stabil wie möglich bleibt. Weiterhin
Leute, die Vorschläge zu Änderungen oder der
generellen Entwicklung von &os; machen und Patches
bereitstellen, um diese Vorschläge zu realisieren.Für Leute, die die Entwicklung im Auge behalten
wollen, oder die Quellen zu Referenzzwecken (zum Beispiel
darin lesen, aber nicht verwenden) benutzen wollen. Auch diese
Gruppe macht Vorschläge oder steuert Quellcode
bei.Was &os.current; nicht ist!Der schnellste Weg, neue Sachen vor dem offiziellen
Release auszuprobieren. Bedenken Sie, dass der erste,
der die neuen Sachen ausprobiert, auch der erste ist, der die
neuen Fehler findet.Ein schneller Weg, um an Fehlerbehebungen (engl.
bug fixes) zu kommen. Jede
Version von &os.current; führt mit gleicher
Wahrscheinlichkeit neue Fehler ein, mit der sie alte
behebt.In irgendeiner Form offiziell
unterstützt. Wir tun unser Bestes, um Leuten
aus den drei legitimen Benutzergruppen von
&os.current; zu helfen, aber wir haben einfach nicht
die Zeit, technische Unterstützung zu
erbringen. Das kommt nicht daher, dass wir kleinliche,
gemeine Leute sind, die anderen nicht helfen wollen (wenn
wir das wären, würden wir &os; nicht machen), wir
können einfach nicht jeden Tag Hunderte Nachrichten
beantworten und an &os; arbeiten! Vor
die Wahl gestellt, &os; zu verbessern oder jede Menge Fragen
zu experimentellem Code zu beantworten, haben sich die
Entwickler für ersteres entschieden.Benutzen von &os.current;-CURRENTbenutzenEs ist essentiell, die Mailinglisten
- &a.current.name; und &a.cvsall.name; zu lesen. Wenn Sie
- &a.current.name; nicht lesen, verpassen Sie die Kommentare
- anderer über den momentanen Zustand des Systems und rennen
- demzufolge in viele bekannte Probleme, die schon gelöst
- sind. Noch kritischer ist, dass Sie wichtige
+ &a.current.name; und &a.svn-src-head.name; zu lesen. Wenn Sie
+ &a.current.name; nicht lesen, verpassen Sie
+ die Kommentare anderer über den momentanen Zustand des
+ Systems und rennen demzufolge in viele bekannte Probleme, die
+ schon gelöst sind. Noch kritischer ist, dass Sie wichtige
Bekanntmachungen verpassen, die erhebliche Auswirkungen
auf die Stabilität Ihres Systems haben können.
- In der &a.cvsall.name; Mailingliste sehen Sie zu jeder
+ In der &a.svn-src-head.name; Mailingliste sehen Sie zu jeder
Änderung das Commit-Log, das Informationen zu
möglichen Seiteneffekten enthält.Um diese Listen zu abonnieren (oder zu lesen)
besuchen Sie bitte die Seite &a.mailman.lists.link;.
Weitere Informationen erhalten Sie, wenn Sie dort
- auf die gewünschte Liste klicken.
+ auf die gewünschte Liste klicken. Wenn Sie daran
+ interessiert sind, die Änderungen am gesamten Quellbaum
+ mit zu verfolgen, schlagen wir vor, die Liste
+ &a.svn-src-all.name; zu abonnieren.Beschaffen Sie sich die Quellen von einem
&os;-Spiegel. Sie haben
dazu zwei Möglichkeiten:cvsupcron-CURRENTmit CVSup
synchronisierenBenutzen Sie das Programm
cvsup
mit der Datei standard-supfile
aus dem Verzeichnis
/usr/share/examples/cvsup.
Dies ist die empfohlene Methode, da Sie die ganzen
Quellen nur einmal herunterladen und danach nur noch
Änderungen beziehen. Viele lassen
cvsup aus cron
heraus laufen, um ihre Quellen automatisch auf Stand
zu bringen. Sie müssen die obige Sup-Datei
anpassen und cvsup
in Ihrer Umgebung konfigurieren.
+
+
+ Die standard-supfile-Beispieldatei
+ ist dafür vorgesehen, einen bestimmten
+ Sicherheitszweig zu verfolgen und nicht &os.current;. Sie
+ müssen diese Datei bearbeiten und die folgende
+ Zeile:
+
+ *default release=cvs tag=RELENG_X_Y
+
+ durch diese ersetzen:
+
+ *default release=cvs tag=.
+
+ Lesen Sie den Abschnitt über CVS Tags im Handbuch, um eine
+ genaue Beschreibung von verwendbaren Tags zu
+ erhalten.
+ -CURRENTmit CTM synchronisierenCTM
kommt in Frage, wenn Sie
über eine schlechte Internet-Anbindung (hoher Preis
oder nur E-Mail Zugriff) verfügen. Der Umgang mit
CTM ist allerdings recht
mühsam und Sie können beschädigte Dateien
erhalten. Daher wird es selten benutzt, was wiederum
dazu führt, dass es über längere Zeit
nicht funktioniert. Wir empfehlen jedem mit einem
9600 bps oder schnellerem Modem,
CVSup
zu benutzen.Wenn Sie die Quellen einsetzen und nicht nur darin
lesen wollen, besorgen Sie sich bitte die
kompletten Quellen von &os.current; und
nicht nur ausgesuchte Teile. Der Grund hierfür ist,
dass die verschiedenen Teile der Quellen voneinander
abhängen. Es ist ziemlich sicher, dass Sie in
Schwierigkeiten geraten, wenn Sie versuchen, nur einen Teil
der Quellen zu übersetzen.-CURRENTübersetzenSehen Sie sich das Makefile in
/usr/src genau an, bevor Sie
&os.current; übersetzen. Wenn Sie
&os; das erste Mal aktualisieren, sollten Sie sowohl
einen Kernel als auch das
System neu installieren.
Lesen Sie bitte die Mailingliste &a.current;
und /usr/src/UPDATING, um über
Änderungen im Installationsverfahren, die manchmal
vor der Einführung eines neuen Releases notwendig sind,
informiert zu sein.Seien Sie aktiv! Wenn Sie &os.current; laufen lassen,
wollen wir wissen, was Sie darüber denken, besonders
wenn Sie Verbesserungsvorschläge oder Fehlerbehebungen
haben. Verbesserungsvorschläge, die Code enthalten,
werden übrigens begeistert entgegengenommen.&os.stable;Was ist &os.stable;?-STABLE&os.stable; ist der Entwicklungszweig, auf dem Releases
erstellt werden. Dieser Zweig ändert sich langsamer als
&os.current; und alle Änderungen hier sollten zuvor in
&os.current; ausgetestet sein. Beachten Sie, dass dies
immer noch ein Entwicklungszweig ist und
daher zu jedem Zeitpunkt die Quellen von &os.stable; verwendbar
sein können oder nicht. &os.stable; ist Teil des
Entwicklungsprozesses und nicht für Endanwender
gedacht.Wer braucht &os.stable;?Wenn Sie den FreeBSD-Entwicklungsprozess, besonders im
Hinblick auf das nächste Release, verfolgen oder
dazu beitragen wollen, sollten Sie erwägen, &os.stable; zu
benutzen.Auch wenn sicherheitsrelevante Fehlerbehebungen in den
&os.stable; Zweig einfließen, müssen Sie deswegen
noch lange nicht &os.stable; verfolgen. Jeder der FreeBSD
Sicherheitshinweise beschreibt für jedes betroffene Release,
Das stimmt nicht ganz. Obwohl wir alte FreeBSD
Releases für einige Jahre unterstützen, können
wir sie nicht ewig unterstützen. Eine vollständige
Beschreibung der Sicherheitspolitik für alte FreeBSD
Releases entnehmen Sie bitte http://www.FreeBSD.org/security/.
wie sie einen sicherheitsrelevanten Fehler beheben.
Wenn Sie den Entwicklungszweig aus Sicherheitsgründen
verfolgen wollen, bedenken Sie, dass Sie neben
Fehlerbehebungen auch eine Vielzahl unerwünschter
Änderungen erhalten werden.Obwohl wir versuchen sicherzustellen, dass der
&os.stable; Zweig sich jederzeit übersetzen lässt
und läuft, können wir dafür keine Garantie
übernehmen. Auch wenn Neuentwicklungen in &os.current;
stattfinden, ist es jedoch so, dass mehr Leute
&os.stable; benutzen als &os.current; und es daher unvermeidlich
ist, dass Fehler und Grenzfälle erst in &os.stable;
auffallen.Aus diesen Gründen empfehlen wir Ihnen
nicht, blindlings &os.stable; zu benutzen.
Es ist wichtig, dass Sie &os.stable; zuerst sorgfältig
in einer Testumgebung austesten, bevor Sie Ihre Produktion
auf &os.stable; migrieren.Wenn Sie dies nicht leisten können, empfehlen wir Ihnen,
das aktuelle FreeBSD-Release zu verwenden. Benutzen Sie dann den
binären Update-Mechanismus, um auf neue Releases
zu migrieren.Benutzen von &os.stable;-STABLEbenutzenLesen Sie Mailingliste &a.stable.name;, damit Sie über
Abhängigkeiten beim Bau von &os.stable; und Sachen, die
besondere Aufmerksamkeit erfordern, informiert sind.
Umstrittene Fehlerbehebungen oder Änderungen werden von
den Entwicklern auf dieser Liste bekannt gegeben. Dies
erlaubt es den Benutzern, Einwände gegen die
vorgeschlagenen Änderungen vorzubringen.
- In der &a.cvsall.name; Mailingliste sehen Sie zu jeder
- Änderung das Commit-Log, das Informationen zu
- möglichen Seiteneffekten enthält.
+ Abonnieren Sie die passende
+ SVN-Liste für den jeweiligen
+ Branch, den Sie verfolgen. Wenn Sie beispielsweise den Zweig
+ 7-STABLE verfolgen, lesen Sie die &a.svn-src-stable-7.name;.
+ Dort sehen Sie zu jeder Änderung das Commit-Log, das
+ Informationen zu möglichen Seiteneffekten
+ enthält.Um diese Listen oder andere Listen zu abonnieren
besuchen Sie bitte die Seite &a.mailman.lists.link;.
Weitere Informationen erhalten Sie, wenn Sie dort
- auf die gewünschte Liste klicken.
+ auf die gewünschte Liste klicken. Wenn Sie daran
+ interessiert sind, Änderungen am gesamten Quellbaum zu
+ verfolgen, dann empfehlen wir, dass Sie &a.svn-src-all.name;
+ abonnieren.
Wenn Sie ein neues System installieren und dazu einen
der monatlich aus &os.stable; erzeugten Snapshots verwenden
wollen, sollten Sie zuerst die Snapshot Website auf
aktuelle Informationen überprüfen. Alternativ
können Sie auch das neueste &os.stable;-Release von
den Spiegeln beziehen
und Ihr System nach den folgenden Anweisungen
aktualisieren.Wenn Sie schon ein älteres Release von &os;
und das System mit dem Quellcode aktualisieren wollen,
benutzen Sie einen der &os;-Spiegel. Sie haben
dazu zwei Möglichkeiten:cvsupcron-STABLEmit CVSup
synchronisierenBenutzen Sie das Programm
cvsup
mit der Datei stable-supfile
aus dem Verzeichnis
/usr/share/examples/cvsup.
Dies ist die empfohlene Methode, da Sie die ganzen
Quellen nur einmal herunterladen und danach nur noch
Änderungen beziehen. Viele lassen
cvsup aus cron
heraus laufen, um ihre Quellen automatisch auf Stand
zu bringen. Sie müssen das oben erwähnte
supfile anpassen und cvsup konfigurieren.-STABLEmit CTM synchronisierenBenutzen Sie
CTM. Wenn Sie über
keine schnelle und billige Internet-Anbindung
verfügen, sollten Sie diese Methode in Betracht
ziehen.Benutzen Sie cvsup oder
ftp, wenn Sie schnellen Zugriff auf die
Quellen brauchen und die Bandbreite keine Rolle spielt,
andernfalls benutzen Sie
CTM.-STABLEübersetzenBevor Sie &os.stable; übersetzen, sollten Sie sich
das Makefile in
/usr/src genau anschauen. Wenn Sie
&os; das erste Mal aktualisieren, sollten Sie sowohl
einen Kernel als auch das
System neu installieren.
Lesen Sie bitte die Mailingliste &a.stable;
und /usr/src/UPDATING, um über
Änderungen im Installationsverfahren, die manchmal
vor der Einführung eines neuen Releases notwendig sind,
informiert zu sein.Synchronisation der QuellenSie können eine Internet-Verbindung (oder E-Mail) dazu
nutzen, Teile von &os;, wie die Quellen zu einzelnen Projekten, oder
das Gesamtsystem, aktuell zu halten. Dazu bieten wir die Dienste
AnonymousCVS,
CVSup und
CTM an.Obwohl es möglich ist, nur Teile des Quellbaums zu
aktualisieren, ist die einzige unterstütze Migrationsprozedur,
den kompletten Quellbaum zu aktualisieren und alles, das
heißt das Userland (z.B. alle Programme in
/bin und /sbin) und die
Kernelquellen, neu zu übersetzen. Wenn Sie nur einen Teil der
Quellen, zum Beispiel nur den Kernel oder nur die Programme aus dem
Userland, aktualisieren, werden Sie oft Probleme haben, die von
Übersetzungsfehlern über Kernel-Panics bis hin zu
Beschädigungen Ihrer Daten reichen können.CVSanonymousAnonymous CVS und
CVSup benutzen die
Pull-Methode
Von engl. to pull =
ziehen. Der Client holt sich bei dieser
Methode die Dateien ab., um die Quellen zu aktualisieren. Im Fall von
CVSup ruft der Benutzer oder ein
cron-Skript cvsup auf, das
wiederum mit einem cvsupd Server interagiert, um
Ihre Quellen zu aktualisieren. Mit beiden Methoden erhalten Sie
aktuelle Updates zu einem genau von Ihnen bestimmten Zeitpunkt. Sie
können die Prozedur auf bestimmte Dateien oder Verzeichnisse
einschränken, so dass Sie nur die Updates bekommen, die
für Sie von Interesse sind. Die Updates werden zur Laufzeit,
abhängig von den Sachen, die Sie schon haben und den Sachen, die
Sie haben wollen, auf dem Server generiert. Anonymous
CVS ist eine Erweiterung von
CVS, die es Ihnen erlaubt, Änderungen
direkt aus einem entfernten CVS-Repository zu ziehen.
Anonymous CVS ist leichter zu handhaben
als CVSup, doch ist letzteres sehr viel
effizienter.CTMIm Gegensatz dazu vergleicht CTM Ihre
Quellen nicht mit denen auf einem Server. Stattdessen läuft auf
dem Server ein Skript, das Änderungen an Dateien gegenüber
seinem vorigen Lauf bemerkt, die Änderungen komprimiert, mit
einer Sequenznummer versieht und für das Verschicken per E-Mail
kodiert (es werden nur druckbare ASCII-Zeichen verwendet). Wenn Sie
diese CTM-Deltas erhalten haben, können Sie sie
mit &man.ctm.rmail.1; benutzen, welches die Deltas dekodiert,
verifiziert und dann die Änderungen an Ihren Quellen vornimmt.
Dieses Verfahren ist viel effizienter als
CVSup und erzeugt auch weniger Last auf
unseren Servern, da es die
Push-Methode
Von engl. to push =
schieben. Der Server schickt dem Client die
Dateien. verwendet.Es gibt natürlich noch weitere Unterschiede, die Sie
beachten sollten. Wenn Sie unabsichtlich Teile Ihres Archivs
löschen, wird das von CVSup
wie Anonymous CVS erkannt
und repariert. Wenn sich fehlerhafte Dateien in Ihrem Quellbaum
befinden, löschen Sie diese einfach und synchronisieren erneut.
CTM leistet das nicht,
wenn Sie Teile des Quellbaums gelöscht haben und keine Sicherung
besitzen, müssen Sie von neuem, das heißt vom letzten
Basis-Delta, starten und die Änderungen wieder
mit CTM nachziehen.Das komplette Basissystem neu bauenBau des BasissystemsWenn Sie Ihren lokalen Quellbaum mit einer bestimmten FreeBSD
Version (&os.stable;, &os.current;, usw.) synchronisiert haben,
können Sie diesen benutzen, um das System neu zu
bauen.Erstellen Sie eine Sicherungskopie!Es kann nicht oft genug betont werden, wie wichtig es ist, Ihr
System zu sichern, bevor Sie die nachfolgenden
Schritte ausführen. Obwohl der Neubau des Systems eine
einfache Aufgabe ist, wenn Sie sich an die folgende Anleitung
halten, kann es dennoch vorkommen, dass Sie einen Fehler machen,
oder dass Ihr System nicht mehr bootet, weil andere Entwickler
Fehler in den Quellbaum eingeführt haben.Stellen Sie sicher, dass Sie eine Sicherung erstellt haben
und über eine Fixit-Floppy oder eine startfähige CD
verfügen. Wahrscheinlich werden Sie die Startmedien
nicht benötigen, aber gehen Sie auf Nummer Sicher!Abonnieren Sie die richtige MailinglisteMailinglisteDie &os.stable; und &os.current; Zweige befinden sich in
ständiger Entwicklung. Die Leute, die zu
&os; beitragen, sind Menschen und ab und zu machen sie
Fehler.Manchmal sind diese Fehler harmlos und lassen Ihr System eine
Warnung ausgeben. Die Fehler können allerdings auch
katastrophal sein und dazu führen, dass Sie Ihr System
nicht mehr booten können, Dateisysteme beschädigt
werden oder Schlimmeres passiert.Wenn solche Probleme auftauchen, wird ein
heads up an die passende Mailingliste geschickt, welches
das Problem erklärt und die betroffenen Systeme benennt. Eine
all clear Meldung wird versendet, wenn das
Problem gelöst ist.Wenn Sie &os.stable; oder &os.current; benutzen und nicht die
Mailinglisten &a.stable; beziehungsweise &a.current; lesen, bringen
Sie sich nur unnötig in Schwierigkeiten.Finger weg von make worldÄltere Dokumentationen empfehlen, das Kommando
make world für den Neubau.
Das Kommando überspringt wichtige Schritte. Setzen
Sie es nur ein, wenn Sie wissen was Sie tun. In fast
allen Fällen ist make world
falsch, benutzen Sie stattdessen die nachstehende
Anleitung.
-
+ Richtig aktualisierenUm Ihr System zu aktualisieren, sollten Sie zuerst
/usr/src/UPDATING lesen, und
eventuelle, für Ihre Quellcodeversion nötigen
Aufgaben erledigen, bevor Sie das System bauen. Danach
aktualisieren Sie Ihr System mit den folgenden
- Schritten:
+ Schritten.
+
+ Bei den hier dargestellten Aktualisierungsschritten wird davon
+ ausgegangen, dass Sie momentan eine alte &os;-Version verwenden, die
+ aus einem alten Compiler, Kernel, sowie einem alten Basissystem und
+ veralteten Konfigurationsdateien besteht. Mit
+ Basissystem sind hier die zentralen Binärdateien,
+ Bibliotheken und Entwicklerdateien gemeint. Der Compiler ist Teil
+ des Basissystems, beinhaltet aber ein paar
+ Besonderheiten.
+
+ Es wird ausserdem davon ausgegangen, dass Sie bereits die Quellen
+ für ein neues System bezogen haben. Falls die Quellen in dem
+ vorliegenden System zu alt sind, lesen Sie ,
+ um detaillierte Hilfe über die Aktualisierung der Quellen zu
+ erhalten.
+
+ Die Aktualisierung des Systems aus den Quellen ist ein wenig
+ ausgetüftelter als es zunächst den Anschein hat. Die
+ Entwickler von &os; haben es über die Jahre für Nötig
+ befunden, den vorgeschlagenen Ablauf ziemlich stark zu
+ verändern, da neue Arten von unvermeidlichen Abhängigkeiten
+ mit der Zeit ans Licht kamen. Der übrige Teil dieses Abschnitts
+ beschreibt die Überlegungen hinter der aktuell empfohlenen
+ Aktualisierungsreihenfolge.
+
+ Jede erfolgreiche Aktualisierung muss sich mit den folgenden
+ Sachverhalten auseinandersetzen:
- &prompt.root; make buildworld
+
+
+ Der alte Compiler ist möglicherweise nicht in der Lage,
+ den neuen Kernel zu übersetzen (alte Compiler besitzen
+ manchmal Fehler). Deshalb sollte der neue Kernel mit dem neuen
+ Compiler übersetzt werden. Ganz besonders muss darauf
+ geachtet werden, dass der neue Compiler vor dem neuen Kernel
+ gebaut wird. Das bedeutet nicht unbedingt, dass der neue
+ Compiler auch installiert werden muss, bevor
+ der neue Kernel gebaut wird.
+
+
+
+ Das neue Basissystem benötigt eventuell neue
+ Eigenschaften des Kernels. Also muss der neue Kernel installiert
+ sein, bevor das neue Basissystem installiert wird.
+
+
+
+ Diese ersten beiden Sachverhalte sind die Grundlage für die
+ zentrale Sequenz von buildworld,
+ buildkernel,
+ installkernel und
+ installworld, die in den folgenden
+ Abschnitten beschrieben wird. Dies ist keine vollständige Liste
+ all der Gründe, warum Sie den aktuell empfohlenen Prozess der
+ Aktualisierung bevorzugen sollten. Ein paar der weniger
+ naheliegenden Gründe sind im folgenden aufgezählt:
+
+
+
+ Das alte Basissystem wird möglicherweise nicht korrekt
+ mit dem neuen Kernel funktionieren, weshalb Sie das neue
+ Basissystem sofort nach der Installation des neuen Kernels
+ installieren müssen.
+
+
+
+ Manche Änderungen an der Konfiguration müssen
+ erledigt worden sein, bevor das neue Basissystem installiert wird,
+ jedoch können andere die Funktionalität des alten
+ Basissystems beeinträchtigen. Aus diesem Grund sind zwei
+ verschiedene Schritte notwendig, um eine Aktualisierung der
+ Konfiguration durchzuführen.
+
+
+
+ Der Aktualisierungsprozess ersetzt zum Grossteil Dateien oder
+ fügt neue hinzu, bestehende Dateien werden nicht
+ gelöscht. In wenigen Ausnahmefällen kann dies Probleme
+ verursachen. Aus diesem Grund wird der Aktualisierungsprozess
+ manchmal bestimmte Dateien zum manuellen Löschen vorschlagen.
+ Dies wird eventuell in der Zukunft automatisch
+ durchgeführt.
+
+
+
+ Diese Bedenken haben zu der folgenden Reihenfolge geführt.
+ Beachten Sie, dass der genaue Ablauf für bestimmte
+ Aktualisierungen zusätzliche Schritte nach sich zieht, jedoch
+ sollte der Kernprozess davon nicht beeinträchtigt werden:
+
+
+
+ make
+ buildworld
+
+ Dieser Schritt übersetzt zuerst den neuen Compiler und
+ ein paar damit zusammenhängende Werkzeuge und verwendet dann
+ den neuen Compiler, um den Rest des Basissystems zu erstellen.
+ Das Ergebnis landet dann in /usr/obj.
+
+
+
+ make
+ buildkernel
+
+ Statt dem alten Ansatz, &man.config.8; und
+ &man.make.1; zu verwenden, nutzt dieser den
+ neuen Compiler, der in /usr/obj abgelegt ist.
+ Das schützt Sie vor falschen
+ Compiler-Kernel-Kombinationen.
+
+
+
+ make
+ installkernel
+
+ Platziert den neuen Kernel und Kernelmodule auf der Platte,
+ was es erlaubt, mit dem frisch aktualisierten Kernel zu
+ starten.
+
+
+
+ Starten Sie das System neu in den Single-User-Modus.
+
+ Der Single-User-Modus minimiert Probleme mit der
+ Aktualisierung von Programmen, die bereits gestartet sind. Ebenso
+ minimiert es Probleme, die mit der Verwendung des alten
+ Basissystems und des neuen Kernels zu tun haben
+ könnten.
+
+
+
+ mergemaster
+
+ Dieser Schritt aktualisiert ein paar initiale
+ Konfigurationsdateien als Vorbereitung für das neue
+ Basissystem. Beispielsweise fügt es neue Benutzergruppen
+ zum System oder neue Benutzernamen in die Passwortdatenbank hinzu.
+ Dies wird oftmals benötigt, wenn neue Gruppen oder bestimmte
+ Systembenutzerkonten seit der letzten Aktualisierung hinzu gekommen
+ sind, so dass der installworld-Schritt
+ in der Lage ist, auf dem neu installierten System die Benutzer
+ oder Systemgruppennamen ohne Probleme zu verwenden.
+
+
+
+ make
+ installworld
+
+ Kopiert das Basissystem aus /usr/obj. Sie haben jetzt den
+ neuen Kernel und das neue Basissystem auf der Festplatte.
+
+
+
+ mergemaster
+
+ Sie können nun die verbleibenden Konfigurationsdateien
+ aktualisieren, da Sie nun das neue Basissystem auf der Platte
+ haben.
+
+
+
+ Starten Sie das System neu.
+
+ Ein kompletter Systemneustart ist notwendig, um den neuen
+ Kernel und das neue Basissystem mit den neuen
+ Konfigurationsdateien zu laden.
+
+
+
+ Beachten Sie, dass wenn Sie von einem Release des gleichen
+ &os;-Zweigs auf ein aktuelleres Release des gleichen Zweigs, z.B.
+ von 7.0 auf 7.1, aktualisieren, dann ist diese Vorgehensweise nicht
+ unbedingt notwendig, da Sie nur sehr unwahrscheinlich in
+ ungünstige Kombinationen zwischen Compiler, Kernel, Basissystem
+ und den Konfigurationsdateien geraten werden. Die ältere
+ Vorgehensweise von make
+ world, gefolgt von der Erstellung
+ und Installation des neuen Kernels funktioniert möglicherweise
+ gut genug, um kleinere Aktualisierungen vorzunehmen.
+
+ Wenn Sie allerdings zwischen Hauptversionen aktualisieren wollen
+ und befolgen diese Schritte nicht, sollten Sie sich auf Probleme
+ gefasst machen.
+
+ Es ist auch wichtig zu wissen, dass viele Aktualisierungen, z.B.
+ von 4.X auf 5.0, viele spezielle und
+ zusätzliche Schritte benötigt, wie beispielsweise das
+ umbennen oder löschen von speziellen Dateien vor installworld.
+ Lesen Sie die Datei /usr/src/UPDATING
+ gründlich, besonders am Ende, wo die aktuell vorgeschlagene
+ Aktualisierungssequenz explizit aufgelistet ist.
+
+ Diese Prozedur hat sich mit der Zeit weiterentwickelt, da die
+ Entwickler es für unmöglich erachtet haben, bestimmte
+ Arten von Kombinationsproblemen vollständig auszuschliessen.
+ Hoffentlich wird die aktuelle Aktualisierungsprozedur für lange
+ Zeit stabil bleiben.
+
+
+ Aktualisierungen von&os; 3.X
+ oder noch früheren Releases ist ein wenig trickreicher. Lesen
+ Sie dazu UPDATING sorgfältig, wenn Sie
+ diese Art von Aktualisierung durchführen müssen.
+
+
+ Als Zusammenfassung ist hier nochmal die aktuell vorgeschlagene
+ Vorgehensweise für die Aktualisierung von &os; aus den Quellen
+ aufgelistet:
+
+ &prompt.root; cd /usr/src
+&prompt.root; make buildworld
&prompt.root; make buildkernel
&prompt.root; make installkernel
-&prompt.root; reboot
+&prompt.root; shutdown -r nowEs gibt einige, sehr seltene Situationen, in denen Sie
mergemaster -p zusätzlich
ausführen müssen, bevor Sie das System mit
buildworld bauen. Diese Situationen
werden in UPDATING beschrieben. Solche
Situationen treten aber in der Regel nur dann auf, wenn Sie
Ihr &os;-System um eine oder mehrere Hauptversionen
aktualisieren.Nachdem installkernel erfolgreich
abgeschlossen wurde, starten Sie das System im Single-User-Modus
(etwa durch die Eingabe von boot -s am
Loaderprompt). Danach führen Sie die folgenden Anweisungen
aus:
- &prompt.root; mergemaster -p
-&prompt.root; make installworld
+ &prompt.root; adjkerntz -i
+&prompt.root; mount -a -t ufs
+&prompt.root; mergemaster -p
+&prompt.root; cd /usr/src
&prompt.root; mergemaster
&prompt.root; rebootLesen Sie bitte weiterDie obige Vorschrift ist nur eine
Gedächtnisstütze. Um die einzelnen
Schritte zu verstehen, lesen Sie bitte die
folgenden Abschnitte, insbesondere wenn Sie
einen angepassten Kernel erstellen.
-
+ Lesen Sie /usr/src/UPDATINGBevor Sie etwas anderes tun, lesen Sie bitte
/usr/src/UPDATING (oder die entsprechende
Datei, wenn Sie den Quellcode woanders installiert haben). Die
Datei enthält wichtige Informationen zu Problemen, auf die Sie
stoßen könnten oder gibt die Reihenfolge vor, in der Sie
bestimmte Kommandos laufen lassen müssen. Die Anweisungen in
UPDATING sind aktueller als die in diesem
Handbuch. Im Zweifelsfall folgen Sie bitte den Anweisungen aus
UPDATING.Das Lesen von UPDATING ersetzt nicht das
Abonnieren der richtigen Mailingliste. Die beiden Voraussetzungen
ergänzen sich, es reicht nicht aus, nur eine zu
erfüllen.
-
+ Überprüfen Sie
/etc/make.confmake.confÜberprüfen Sie die Dateien
/usr/share/examples/etc/make.conf
und /etc/make.conf. Die erste enthält
Vorgabewerte, von denen die meisten auskommentiert sind. Um diese
während des Neubaus des Systems zu nutzen, tragen Sie die
Werte in /etc/make.conf ein. Beachten Sie,
dass alles, was Sie in /etc/make.conf
eintragen, bei jedem Aufruf von make angezogen
wird. Es ist also klug, hier etwas Sinnvolles einzutragen.Typischerweise wollen Sie die Zeilen, die
CFLAGS und NO_PROFILE
enthalten, aus
/usr/share/examples/etc/make.conf
nach /etc/make.conf übertragen und dort
aktivieren.Sehen Sie sich auch die anderen Definitionen, wie
COPTFLAGS oder NOPORTDOCS an
und entscheiden Sie, ob Sie diese aktivieren wollen.
-
+ Aktualisieren Sie die Dateien in /etcDas Verzeichnis /etc enthält den
Großteil der Konfigurationsdateien des Systems und Skripten,
die beim Start des Systems ausgeführt werden. Einige dieser
Skripten ändern sich bei einer Migration auf eine neue
FreeBSD-Version.Einige der Konfigurationsdateien, besonders
/etc/group, werden für den Normalbetrieb
des Systems gebraucht.Es gab Fälle, in denen das Kommando
make installworld auf bestimmte
Accounts oder Gruppen angewiesen war, die aber während
der Aktualisierung fehlten. Demzufolge kam es zu Problemen
bei der Aktualisierung. In einigen Fällen prüft
make buildworld ob die Accounts oder
Gruppen vorhanden sind.Ein Beispiel dafür trat beim Anlegen des Benutzers
smmsp auf. Die Installationsprozedur
schlug an der Stelle fehl, an der &man.mtree.8;
versuchte, /var/spool/clientmqueue
anzulegen.Um dieses Problem zu umgehen,rufen Sie &man.mergemaster.8;
prä-buildworld-Modus auf, der mit aktiviert
wird. In diesem Modus werden nur Dateien verglichen, die für
den Erfolg von buildworld oder
installworld essentiell sind. Wenn Ihre
alte Version von mergemaster die Option
noch nicht unterstützt, nehmen Sie beim
ersten Lauf die neue Version aus dem Quellbaum:&prompt.root; cd /usr/src/usr.sbin/mergemaster
&prompt.root; ./mergemaster.sh -pWenn Sie besonders paranoid sind, sollten Sie Ihr System nach
Dateien absuchen, die der Gruppe, die Sie umbenennen oder
löschen, gehören:&prompt.root; find / -group GID -printDas obige Kommando zeigt alle Dateien an, die der Gruppe
GID (dies kann entweder ein
Gruppenname oder eine numerische ID sein) gehören.Wechseln Sie in den Single-User-ModusSingle-User-ModusSie können das System im Single-User-Modus
übersetzen. Abgesehen davon, dass dies etwas schneller
ist, werden bei der Installation des Systems viele wichtige Dateien,
wie die Standard-Systemprogramme, die Bibliotheken und
Include-Dateien, verändert. Sie bringen sich in
Schwierigkeiten, wenn Sie diese Dateien auf einem laufenden System
verändern, besonders dann, wenn zu dieser Zeit Benutzer auf
dem System aktiv sind.MehrbenutzermodusEine andere Methode übersetzt das System im
Mehrbenutzermodus und wechselt für die Installation in den
Single-User-Modus. Wenn Sie diese Methode benutzen wollen, warten
Sie mit den folgenden Schritten, bis der Bau des Systems fertig
ist und Sie mit installkernel oder
installworld installieren wollen.Als Superuser können Sie mit dem folgenden Kommando ein
laufendes System in den Single-User-Modus bringen:&prompt.root; shutdown nowAlternativ können Sie das System mit der Option
single user in den Single-User-Modus booten.
Danach geben Sie die folgenden Befehle ein:&prompt.root; fsck -p
&prompt.root; mount -u /
&prompt.root; mount -a -t ufs
&prompt.root; swapon -aDie Kommandos überprüfen die Dateisysteme,
hängen / wieder beschreibbar ein,
hängen dann alle anderen UFS Dateisysteme aus
/etc/fstab ein und aktivieren den
Swap-Bereich.Zeigt Ihre CMOS-Uhr die lokale Zeit und nicht GMT an, dies
erkennen Sie daran, dass &man.date.1; die
falsche Zeit und eine flasche Zeitzone anzeigt, setzen Sie das
folgende Kommando ab:&prompt.root; adjkerntz -iDies stellt sicher, dass Ihre Zeitzone richtig
eingestellt ist. Ohne dieses Kommando werden Sie
vielleicht später Probleme bekommen.
-
+ Entfernen Sie /usr/objDie neugebauten Teile des Systems werden in der Voreinstellung
unter /usr/obj gespeichert. Die Verzeichnisse
dort spiegeln die Struktur unter
/usr/src.Sie können den make buildworld Prozess
beschleunigen, indem Sie dieses Verzeichnis entfernen. Dies
erspart Ihnen zudem einigen Ärger aufgrund von
Abhängigkeiten.Einige Dateien unter /usr/obj sind
vielleicht durch die -Option
(siehe &man.chflags.1;) schreibgeschützt, die vor dem
Löschen entfernt werden muss.&prompt.root; cd /usr/obj
&prompt.root; chflags -R noschg *
&prompt.root; rm -rf *Übersetzen der Quellen des BasissystemsSichern der AusgabenFür den Fall, dass etwas schief geht, sollten Sie
die Ausgaben von &man.make.1; in einer Datei sichern, damit Sie
eine Kopie der Fehlermeldung besitzen. Das mag Ihnen nicht
helfen, den Fehler zu finden, kann aber anderen helfen, wenn Sie
Ihr Problem in einer der &os;-Mailinglisten schildern.Dazu können Sie einfach das Kommando &man.script.1;
benutzen, dem Sie beim Aufruf als Parameter den Dateinamen
für die Ausgaben mitgeben. Setzen Sie das Kommando
unmittelbar vor dem Neubau ab und geben Sie
exit ein, wenn der Bau abgeschlossen
ist:&prompt.root; script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
&prompt.root; make TARGET… Ausgaben des Kommandos …
&prompt.root; exit
Script done, …Sichern Sie die Ausgaben nicht in /tmp,
da dieses Verzeichnis beim nächsten Boot aufgeräumt
werden kann. Ein geeigneteres Verzeichnis ist
/var/tmp, wie im vorigen Beispiel gezeigt,
oder das Heimatverzeichnis von root.Übersetzen des BasissystemsWechseln Sie in das Verzeichnis, in dem die Quellen liegen
(in der Voreinstellung ist das
/usr/src):&prompt.root; cd /usr/srcmakeZum Neubau der Welt benutzen Sie &man.make.1;. Dieses
Kommando liest ein Makefile, das Anweisungen
enthält, wie die Programme, aus denen &os; besteht, zu bauen
sind und in welcher Reihenfolge diese zu bauen sind.Ein typischer Aufruf von make sieht wie
folgt aus:&prompt.root; make -x -DVARIABLEtargetIn diesem Beispiel ist
eine Option, die
Sie an &man.make.1; weitergeben wollen. Eine Liste gültiger
Optionen finden Sie in der &man.make.1; Manualpage.Das Verhalten eines Makefiles wird von
Variablen bestimmt. Mit
setzen Sie
eine Variable. Diese Variablen sind dieselben, die auch in
/etc/make.conf gesetzt werden, dies ist nur
ein alternativer Weg, Variablen zu setzen.Um zu verhindern, dass die profiled
Bibliotheken gebaut werden, rufen Sie make wie
folgt auf:&prompt.root; make -DNO_PROFILE targetDieser Aufruf entspricht dem folgenden Eintrag in
/etc/make.conf:NO_PROFILE= true # Avoid compiling profiled librariesJedes Makefile definiert einige
Ziele, die festlegen, was genau zu tun ist. Mit
target wählen Sie eins dieser
Ziele aus.Einige Ziele im Makefile sind nicht
für den Endanwender gedacht, sondern unterteilen den
Bauprozess in eine Reihe von Einzelschritten.Im Regelfall müssen Sie &man.make.1; keine Parameter
mitgeben, so dass Ihre Kommandozeile wie folgt aussehen
wird:&prompt.root; make targettarget steht dabei für
die verschiedenen Ziele. Das erste Ziel sollte immer
buildworld sein.Mit buildworld wird ein kompletter
Baum unterhalb von /usr/obj gebaut, der mit
installworld, einem weiteren Ziel, auf
dem System installiert werden kann.Über seperate Optionen zu verfügen, ist aus
mehreren Gründen nützlich. Erstens
können Sie das System auf einem laufenden System bauen, da die
Bauprozedur abgekapselt vom Rest des Systems ist. Das System
lässt sich im Mehrbenutzermodus ohne negative
Seiteneffekte bauen. Die Installation mit
installworld sollte aber immer noch im
Single-User-Modus erfolgen.Zweitens können Sie NFS benutzen, um mehrere Maschinen
in Ihrem Netzwerk zu aktualisieren. Wenn Sie die Maschinen
A, B und C
aktualisieren wollen, lassen sie make
buildworld und make installworld auf
A laufen. Auf den Maschinen B
und C können Sie die
Verzeichnisse /usr/src und
/usr/obj von A einhängen
und brauchen dort nur noch make installworld
auszuführen, um die Bauresultate zu installieren.Obwohl das Ziel world noch
existiert, sollten Sie es wirklich nicht mehr benutzen.Um das System zu bauen, setzen Sie das folgende Kommando
ab:&prompt.root; make buildworldMit können Sie
make anweisen, mehrere Prozesse zu starten.
Besonders effektiv ist das auf Mehrprozessor-Systemen. Da aber
der Übersetzungsprozess hauptsächlich von IO statt
der CPU bestimmt wird, ist diese Option auch auf
Einprozessor-Systemen nützlich.Auf einem typischen Einprozessor-System können Sie den
folgenden Befehl absetzen:&prompt.root; make -j4 buildworld&man.make.1; wird dann bis zu vier Prozesse gleichzeitig
laufen lassen. Erfahrungsberichte aus den Mailinglisten zeigen,
dass dieser Aufruf typischerweise den besten
Geschwindigkeitsgewinn bringt.Wenn Sie ein Mehrprozessor-System besitzen und SMP in Ihrem
Kernel konfiguriert ist, probieren Sie Werte zwischen 6 und 10
aus.LaufzeitenBau des BasissystemsLaufzeitenDie Laufzeit eines Baus wird von vielen Faktoren
beeinflusst, ein aktuelles System benötigt aber etwa
zwei Stunden um &os.stable; zu bauen. Der Bau von
&os.current; dauert etwas länger.
-
+ Übersetzen und Installation des KernelsKernelÜbersetzenUm das Beste aus Ihrem System zu holen, sollten Sie einen neuen
Kernel kompilieren. Praktisch gesehen ist das sogar notwendig, da
sich einige Datenstrukturen geändert haben und Programme wie
&man.ps.1; oder &man.top.1; nur mit einem Kernel zusammen arbeiten,
der auch zu dem entsprechenden Quellcode passt.Am einfachsten und sichersten bauen Sie dazu den
GENERIC Kernel. Obwohl der
GENERIC Kernel vielleicht nicht alle
Ihre Geräte unterstützt, sollte er alles enthalten,
um das System in den Single-User-Modus zu booten. Dies ist auch
ein guter Test, um zu sehen, dass das System
ordnungsgemäß funktioniert. Nachdem Sie mit
GENERIC gebootet und sichergestellt haben,
dass Ihr System funktioniert, können Sie einen neuen
Kernel mit Ihrer Konfigurationsdatei bauen.In aktuellen &os;-Versionen müssen Sie das
Basissystem neu bauen,
bevor Sie einen neuen Kernel erstellen.Wenn Sie einen angepassten Kernel erstellen wollen und
bereits über eine Konfigurationsdatei verfügen,
geben Sie diese, wie im folgenden Beispiel gezeigt, auf der
Kommandozeile an:&prompt.root; cd /usr/src
&prompt.root; make buildkernel KERNCONF=MYKERNEL
&prompt.root; make installkernel KERNCONF=MYKERNELWenn kern.securelevel einen Wert
größer als 1 besitzt
und der Kernel mit noschg
oder ähnlichen Optionen geschützt ist, müssen Sie
installkernel im Einbenutzermodus
ausführen. Wenn das nicht der Fall ist, sollten die beiden
Kommandos problemlos im Mehrbenutzermodus laufen. Weitere
Informationen über kern.securelevel finden
Sie in &man.init.8; und &man.chflags.1; erläutert Optionen, die
Sie auf Dateien setzen können.
-
+ Booten Sie in den Single-User-ModusSingle-User-ModusUm zu prüfen, ob der neue Kernel funktioniert, sollten Sie
in den Single-User-Modus booten. Folgen Sie dazu der Anleitung aus
.Installation des SystemsWenn Sie make buildworld benutzt haben, um
das System zu bauen, sollten Sie jetzt
installworld benutzen, um es zu
installieren. Rufen Sie dazu das folgende Kommando auf:&prompt.root; cd /usr/src
&prompt.root; make installworldWenn Sie mit dem make buildworld Kommando
Variablen verwenden haben, müssen Sie dieselben Variablen
auch bei dem make installworld Kommando
angeben. Auf die anderen Optionen trifft das nur bedingt zu:
darf mit installworld
nicht benutzt werden.Sie haben zum Bauen die folgende Kommandozeile
verwendet:&prompt.root; make -DNO_PROFILE buildworldBei der Installation setzen Sie dann das folgende Kommando
ab:&prompt.root; make -DNO_PROFILE installworldWürden Sie die Variable bei der Installation weglassen,
so würde das System versuchen, die profiled
Bibliotheken, die aber gar nicht gebaut wurden, zu
installieren.
-
+ Aktualisieren der von make installworld
ausgelassenen DateienNeue oder geänderte Konfigurationsdateien aus einigen
Verzeichnissen, besonders /etc,
/var und /usr werden bei
der Installationsprozedur nicht berücksichtigt.Sie können diese Dateien mit &man.mergemaster.8;
aktualisieren. Alternativ können Sie das auch manuell
durchführen, obwohl wir diesen Weg nicht empfehlen. Egal
welchen Weg Sie beschreiten, sichern Sie vorher den Inhalt von
/etc für den Fall, dass etwas schief
geht.TomRhodesBeigetragen von mergemastermergemasterDas Bourne-Shell Skript &man.mergemaster.8; hilft Ihnen dabei,
die Unterschiede zwischen den Konfigurationsdateien in
/etc und denen im Quellbaum unter
/usr/src/etc zu finden.
mergemaster ist der empfohlene Weg, Ihre
Systemkonfiguration mit dem Quellbaum abzugleichen.Rufen Sie mergemaster einfach auf und
schauen Sie zu. Ausgehend von / wird
mergemaster einen virtuellen Root-Baum
aufbauen und darin die neuen Konfigurationsdateien ablegen.
Diese Dateien werden dann mit den auf Ihrem System installierten
verglichen. Unterschiede zwischen den Dateien werden im
&man.diff.1;-Format dargestellt. Neue oder geänderte Zeilen
werden mit gekennzeichnet. Zeilen die
gelöscht oder ersetzt werden, sind mit einem
gekennzeichnet. Das Anzeigeformat wird in
&man.diff.1; genauer erklärt.&man.mergemaster.8; zeigt Ihnen jede geänderte Datei an
und Sie haben die Wahl, die neue Datei (in
mergemaster wird sie temporäre Datei
genannt) zu löschen, sie unverändert zu installieren,
den Inhalt der neuen Datei mit dem Inhalt der alten Datei
abzugleichen, oder die &man.diff.1; Ausgabe noch einmal zu
sehen. Sie können die aktuelle Datei auch
überspringen, sie wird dann noch einmal angezeigt, nachdem
alle anderen Dateien abgearbeitet wurden. Sie erhalten Hilfe,
wenn Sie bei der Eingabeaufforderung von
mergemaster ein ?
eingeben.Wenn Sie die temporäre Datei löschen, geht
mergemaster davon aus, dass Sie Ihre
aktuelle Datei behalten möchten. Wählen Sie die Option
bitte nur dann, wenn Sie keinen Grund sehen, die aktuelle Datei
zu ändern.Wenn Sie die temporäre Datei installieren, wird Ihre
aktuelle Datei mit der neuen Datei überschrieben. Sie
sollten alle unveränderten Konfigurationsdateien auf diese
Weise aktualisieren.Wenn Sie sich entschließen den Inhalt beider Dateien
abzugleichen, wird ein Texteditor aufgerufen, indem Sie beide
Dateien nebeneinander betrachten können. Mit der Taste
l übernehmen Sie die aktuelle Zeile der
links dargestellten Datei, mit der Taste r
übernehmen Sie die Zeile der rechts dargestellten Datei.
Das Ergebnis ist eine Datei, die aus Teilen der beiden
ursprünglichen Dateien besteht und installiert werden kann.
Dieses Verfahren wird gewöhnlich bei veränderten
Dateien genutzt.Haben Sie sich entschieden die Differenzen noch einmal
anzuzeigen, zeigt Ihnen &man.mergemaster.8; dieselbe Ausgabe, die
Sie gesehen haben, bevor die Eingabeaufforderung ausgegeben
wurde.Wenn &man.mergemaster.8; alle Systemdateien abgearbeitet hat,
werden weitere Optionen abgefragt. Sie werden unter
Umständen gefragt, ob Sie die Passwort-Datei neu bauen
lassen wollen. Am Ende haben Sie die Möglichkeit, den Rest
der temporären Dateien zu löschen.Manueller Abgleich der KonfigurationsdateienWenn Sie den Abgleich lieber selbst ausführen wollen,
beachten Sie bitte, dass Sie nicht einfach die Dateien aus
/usr/src/etc nach /etc
kopieren können. Einige dieser Dateien müssen zuerst
installiert werden, bevor sie benutzt werden
können. Das liegt daran, dass
/usr/src/etc keine exakte Kopie von
/etc ist. Zudem gibt es Dateien, die sich
in /etc befinden aber nicht in
/usr/src/etc.Wenn Sie, wie empfohlen, mergemaster
benutzen, können Sie direkt in den nächsten
Abschnitt
wechseln.Am einfachsten ist es, wenn Sie die neuen Dateien in ein
temporäres Verzeichnis installieren und sie nacheinander auf
Differenzen zu den bestehenden Dateien durchsehen.Sichern Sie die Inhalte von /etcObwohl bei dieser Prozedur keine Dateien in
/etc automatisch verändert werden,
sollten Sie dessen Inhalt an einen sicheren Ort
kopieren:&prompt.root; cp -Rp /etc /etc.oldMit wird rekursiv kopiert und
erhält die Attribute der kopierten
Dateien, wie Zugriffszeiten und Eigentümer.Sie müssen die neuen Dateien in einem temporären
Verzeichnis installieren. /var/tmp/root ist
eine gute Wahl für das temporäre Verzeichnis, in dem
auch noch einige Unterverzeichnisse angelegt werden
müssen.&prompt.root; mkdir /var/tmp/root
&prompt.root; cd /usr/src/etc
&prompt.root; make DESTDIR=/var/tmp/root distrib-dirs distributionDie obigen Kommandos bauen die nötige
Verzeichnisstruktur auf und installieren die neuen Dateien in
diese Struktur. Unterhalb von /var/tmp/root
wurden einige leere Verzeichnisse angelegt, die Sie am besten wie
folgt entfernen:&prompt.root; cd /var/tmp/root
&prompt.root; find -d . -type d | xargs rmdir 2>/dev/nullIm obigen Beispiel wurde die Fehlerausgabe nach
/dev/null umgeleitet, um die Warnungen
über nicht leere Verzeichnisse zu unterdrücken./var/tmp/root enthält nun alle
Dateien, die unterhalb von / installiert
werden müssen. Sie müssen nun jede dieser Dateien mit
den schon existierenden Dateien vergleichen.Einige der installierten Dateien unter
/var/tmp/root beginnen mit einem
..
Als dieses Kapitel verfasst wurde, waren das nur die
Startdateien für die Shells in
/var/tmp/root/ und
/var/tmp/root/root/. Abhängig davon,
wann Sie dieses Handbuch lesen, können mehr Dateien dieser
Art existieren. Verwenden Sie ls -a um
sicherzustellen, dass Sie alle derartigen Dateien
finden.Benutzen Sie &man.diff.1; um Unterschiede zwischen zwei
Dateien festzustellen:&prompt.root; diff /etc/shells /var/tmp/root/etc/shellsDas obige Kommando zeigt Ihnen die Unterschiede zwischen der
installierten Version von /etc/shells und
der neuen Version in /var/tmp/root/etc/shells.
Entscheiden Sie anhand der Unterschiede, ob
Sie beide Dateien abgleichen oder die neue Version über die
alte kopieren wollen.Versehen Sie das temporäre Verzeichnis mit einem
ZeitstempelWenn Sie das System oft neu bauen, müssen Sie
/etc genauso oft aktualisieren. Dies kann
mit der Zeit sehr lästig werden.Sie können das Verfahren beschleunigen, wenn Sie sich
eine Kopie der Dateien behalten, die Sie zuletzt nach
/etc installiert haben. Das folgende
Verfahren zeigt Ihnen, wie das geht.Folgen Sie der normalen Prozedur um das System zu
bauen. Wenn Sie /etc und die anderen
Verzeichnisse aktualisieren wollen, geben Sie dem
temporären Verzeichnis einen Namen, der das aktuelle
Datum enthält. Wenn Sie dies zum Beispiel am
14. Februar 1998 durchführten, hätten Sie die
folgenden Kommandos abgesetzt:&prompt.root; mkdir /var/tmp/root-19980214
&prompt.root; cd /usr/src/etc
&prompt.root; make DESTDIR=/var/tmp/root-19980214 \
distrib-dirs distributionGleichen Sie die Änderungen entsprechend der
Anleitung von oben ab.Wenn Sie fertig sind, entfernen Sie das Verzeichnis
/var/tmp/root-19980214nicht.Wenn Sie nun neue Quellen heruntergeladen und gebaut
haben, folgen Sie bitte Schritt 1. Wenn Sie zwischen den
Updates eine Woche gewartet haben, haben Sie nun ein
Verzeichnis mit dem Namen
/var/tmp/root-19980221.Sie können nun die Unterschiede, die sich in einer
Woche ergeben haben, sehen, indem Sie &man.diff.1; rekursiv
anwenden:&prompt.root; cd /var/tmp
&prompt.root; diff -r root-19980214 root-19980221Üblicherweise sind die Differenzen, die Sie jetzt
sehen, kleiner als die Differenzen zwischen
/var/tmp/root-19980221/etc und
/etc. Da die angezeigten Differenzen
kleiner sind, ist es jetzt einfacher den Abgleich der
Dateien durchzuführen.Sie können nun das älteste der beiden
/var/tmp/root-* Verzeichnisse
entfernen:&prompt.root; rm -rf /var/tmp/root-19980214Wiederholen Sie diesen Prozess jedes Mal wenn Sie
Dateien in /etc abgleichen
müssen.Mit &man.date.1; können Sie den Verzeichnisnamen
automatisch erzeugen:&prompt.root; mkdir /var/tmp/root-`date "+%Y%m%d"`Das System neu startenSie sind nun am Ende der Prozedur angelangt. Nachdem Sie sich
davon überzeugt haben, dass Ihr System funktioniert,
starten Sie Ihr System mit &man.shutdown.8; neu:&prompt.root; shutdown -r nowEndeHerzlichen Glückwunsch! Sie haben gerade erfolgreich Ihr
&os; System aktualisiert.Es ist übrigens leicht einen Teil des Systems
wiederherzustellen, für den Fall, dass Ihnen ein kleiner
Fehler unterlaufen ist. Wenn Sie beispielsweise während des
Updates oder Abgleichs /etc/magic aus Versehen
gelöscht haben, wird &man.file.1; nicht mehr funktionieren.
In diesem Fall können Sie das Problem mit dem folgenden
Kommando beheben:&prompt.root; cd /usr/src/usr.bin/file
&prompt.root; make all install
-
+ FragenMuss ich wirklich immer alles neu bauen, wenn sich
etwas geändert hat?Darauf gibt es keine einfache Antwort. Was zu tun ist,
hängt von den Änderungen ab. Es lohnt
wahrscheinlich nicht, alles neu zu bauen, wenn sich bei einem
CVSup-Lauf nur die folgenden
Dateien geändert haben:src/games/cribbage/instr.csrc/games/sail/pl_main.csrc/release/sysinstall/config.csrc/release/sysinstall/media.csrc/share/mk/bsd.port.mkIn diesem Fall können Sie in die entsprechenden
Unterverzeichnisse wechseln und dort make all
install ausführen. Wenn sich allerdings etwas
Wichtiges, wie src/lib/libc/stdlib,
geändert hat, sollten Sie die Welt oder
mindestens die statisch gelinkten Teile des Systems (sowie
Ihre statisch gelinkten Ergänzungen) neu bauen.Letztendlich ist das Ihre Entscheidung. Sie sind
vielleicht damit zufrieden, das System alle zwei Wochen neu
zu bauen und in der Zwischenzeit die anfallenden
Änderungen zu sammeln. Wenn Sie sich zutrauen, alle
Abhängigkeiten zu erkennen, bauen Sie vielleicht auch
nur die geänderten Sachen neu.Das hängt natürlich auch noch davon ab, wie oft
Sie ein Update durchführen wollen und ob Sie &os.stable;
oder &os.current; benutzen.Der Bau bricht mit vielen
Signal 11-Fehlern (oder anderen
Signalnummern) ab. Was ist da passiert?Signal 11Normalerweise zeigen diese Meldungen Hardwarefehler an.
Ein Neubau der Welt ist ein guter Belastungstest für
Ihre Hardware und zeigt oft Probleme mit dem Speicher auf.
Dies äußert sich darin, dass der Kompiler
mit dem Erhalt von seltsamen Signalen abbricht.Es liegt garantiert ein Hardwarefehler vor, wenn ein
neuer Übersetzungslauf an einer anderen Stelle
abbricht.In diesem Fall können Sie nur einzelne Komponenten
Ihres Systems tauschen, um zu bestimmen, welche Komponente den
Fehler verursacht.Kann ich /usr/obj löschen, wenn
ich fertig bin?Kurze Antwort: Ja.In /usr/obj werden alle Dateien
abgelegt, die während der Übersetzungsphase erstellt
wurden. Dieses Verzeichnis wird in einem der ersten Schritte
der Bauprozedur entfernt. Es macht daher
wenig Sinn, dieses Verzeichnis zu behalten und Sie setzen
eine Menge Plattenplatz, momentan ungefähr 340 MB,
frei, wenn Sie es löschen.Wenn Sie allerdings genau wissen, was Sie tun, können
Sie diesen Schritt bei make buildworld
auslassen. Nachfolgende Bauprozeduren werden dadurch erheblich
schneller, da die meisten Quelldateien nicht mehr neu
übersetzt werden. Dafür können aber subtile
Abhängigkeitsprobleme entstehen, die dazu führen,
dass der Bau auf merkwürdige Weise abbrechen kann.
Dies führt häufig zu unnötigen Diskussionen auf
den &os; Mailinglisten, wenn sich jemand über einen
kaputten Bau beschwert, aber nicht sieht, dass er
Probleme hat, weil er eine Abkürzung genommen hat.Kann ein abgebrochener Bau weitergeführt
werden?Das hängt davon ab, wieweit der Bauprozess
fortgeschritten ist.Üblicherweise werden
essentielle Werkzeuge, wie &man.gcc.1; und &man.make.1;,
und die Systembibliotheken während des Bauprozesses
neu erstellt (dies ist aber keine allgemein gültige
Regel). Die neu erstellen Werkzeuge und Bibliotheken werden
dann benutzt, um sich selbst noch einmal zu bauen, und wieder
installiert. Anschließend wird das Gesamtsystem mit
den neu erstellten Systemdateien gebaut.Wenn Sie sich im letzten Schritt befinden und Sie wissen,
dass Sie dort sind, weil Sie durch die Ausgaben, die Sie
ja sichern, der Bauprozedur gesehen haben, können Sie
mit ziemlicher Sicherheit den Bau weiterführen:… Fehler beheben …
&prompt.root; cd /usr/src
&prompt.root; make -DNO_CLEAN allDiese Variablen verhindern,
dass make buildworld die vorher erstellten
Dateien löscht.Das Sie sich im letzten Schritt der Bauprozedur
befinden, erkennen Sie daran, dass Sie in der Ausgabe die
folgenden Zeilen finden:--------------------------------------------------------------
Building everything..
--------------------------------------------------------------Wenn Sie diese Meldung nicht finden, oder sich nicht sicher
sind, dann ist es besser, noch einmal ganz von Vorne
anzufangen.Wie kann ich den Bauprozesss beschleunigen?Bauen Sie im Single-User-Modus.Legen Sie /usr/src und
/usr/obj in getrennte Dateisysteme auf
unterschiedliche Festplatten. Benutzen Sie nach
Möglichkeit auch getrennte Platten-Controller.Noch besser ist es, diese Dateisysteme auf mehrere
Festplatten mit &man.ccd.4; zu verteilen.Bauen Sie die profiled-Bibliotheken,
die Sie wahrscheinlich sowieso nicht brauchen, nicht.
/etc/make.conf sollte dazu
NO_PROFILE=true enthalten.Setzen Sie die CFLAGS in
/etc/make.conf auf . Die Optimierungsstufe
ist deutlich langsamer und die
Performance-Unterschiede zwischen und
sind vernachlässigbar klein.
veranlasst den Kompiler Pipes
anstelle von Dateien für die Kommunikation zu
benutzen. Dies spart einige Plattenzugriffe, geht aber
auf Kosten des Speichers.Benutzen Sie
, um
mehrere Prozesse parallel laufen zu lassen.
Normalerweise beschleunigt dies den Bauprozess
unabhängig davon, ob Sie ein Einprozessor oder
Mehrprozessor System einsetzen.Sie können das Dateisystem
/usr/src mit der Option
einhängen. Dies
verhindert, dass die Zugriffszeiten der Dateien
aktualisiert werden (eine Information, die Sie vielleicht
gar nicht brauchen).&prompt.root; mount -u -o noatime /usr/srcDas Beispiel geht davon aus, dass sich
/usr/src auf einem separaten
Dateisystem befindet. Wenn das nicht der Fall ist,
weil das Verzeichnis beispielsweise Teil des
/usr Dateisystems ist,
müssen Sie anstelle von
/usr/src den Mountpoint des
Dateisystems angeben.Das Dateisystem, in dem sich
/usr/obj befindet, kann mit der
Option eingehangen werden. Dies
bewirkt, dass Schreibzugriffe auf die Platte
asynchron stattfinden, das heißt ein Schreibzugriff
ist sofort beendet, die Daten werden allerdings erst einige
Sekunden später geschrieben. Dadurch können
Schreibzugriffe zusammengefasst werden, was einen
erheblichen Geschwindigkeitszuwachs mit sich bringen
kann.Beachten Sie, dass dies Ihr Dateisystem
anfälliger für Fehler macht. Im Fall eines
Stromausfalls besteht eine erhöhte
Wahrscheinlichkeit, dass das Dateisystem beim
Start der Maschine zerstört ist.Wenn sich /usr/obj auf einem
extra Dateisystem befindet, ist das kein Problem. Wenn
sich allerdings auf diesem Dateisystem noch andere
wertvolle Daten befinden, stellen Sie sicher, dass
Sie aktuelle Sicherungen besitzen.&prompt.root; mount -u -o async /usr/objErsetzen Sie /usr/obj durch
den Mountpoint des entsprechenden Dateisystems, wenn es
sich nicht auf einem eigenen Dateisystem
befindet.Was mache ich, wenn etwas nicht funktioniert?Stellen Sie sicher, dass sich in Ihrer Umgebung
keine Reste eines vorherigen Baus befinden. Das geht ganz
einfach:&prompt.root; chflags -R noschg /usr/obj/usr
&prompt.root; rm -rf /usr/obj/usr
&prompt.root; cd /usr/src
&prompt.root; make cleandir
&prompt.root; make cleandirJa, make cleandir muss wirklich
zweimal aufgerufen werden.Nachdem Sie aufgeräumt haben, starten Sie den
Bauprozess wieder mit make
buildworld.Wenn Sie immer noch Probleme haben, schicken Sie die
Fehlermeldungen und die Ausgabe von uname
-a an die Mailingliste &a.de.questions;. Bereiten
Sie sich darauf vor, weitere Fragen zu Ihrer Umgebung zu
beantworten.MikeMeyerBeigetragen von Installation mehrerer MaschinenWenn Sie mehrere Maschinen besitzen, die Sie alle auf dem
gleichen Stand halten wollen, ist es eine Verschwendung von
Ressourcen, die Quellen auf jeder Maschine vorzuhalten und zu
übersetzen. Die Lösung dazu ist, eine Maschine den
Großteil der Arbeit durchführen zu lassen und den anderen
Maschinen das Ergebnis mit NFS zur Verfügung zu stellen. Dieser
Abschnitt zeigt Ihnen wie das geht.VoraussetzungenStellen Sie zuerst eine Liste der Maschinen zusammen, die auf
demselben Stand sein sollen. Wir nennen diese Maschinen die
Baugruppe. Jede dieser Maschinen kann mit
einem eigenen Kernel laufen, doch sind die Programme des Userlands
auf allen Maschinen gleich. Wählen Sie aus der Baugruppe eine
Maschine aus, auf der der Bau durchgeführt wird, den
Bau-Master. Dies sollte eine Maschine sein,
die über die nötigen Ressourcen für
make buildworld und
make installworld verfügt.
Sie brauchen auch eine
Testmaschine, auf der Sie die Updates testen,
bevor Sie sie in Produktion installieren. Dies sollte eine
Maschine, eventuell der Bau-Master, sein, die über einen
längeren Zeitraum nicht zur Verfügung stehen kann.Alle Maschinen der Baugruppe müssen
/usr/obj und /usr/src von
derselben Maschine an gleichem Ort einhängen. Idealerweise
befinden sich die beiden Verzeichnisse auf dem Bau-Master auf
verschiedenen Festplatten, sie können allerdings auch auf dem
Bau-Master über NFS zur Verfügung gestellt werden. Wenn
Sie mehrere Baugruppen haben, sollte sich
/usr/src auf einem Bau-Master befinden und
über NFS für den Rest der Maschinen zur Verfügung
gestellt werden.Stellen Sie sicher, dass
- /etc/make.conf auf allen Maschinen einer
+ /etc/make.conf und
+ /etc/src.conf auf allen Maschinen einer
Baugruppe mit der Datei des Bau-Masters übereinstimmt. Der
Bau-Master muss jeden Teil des Systems bauen, den irgendeine
Maschine der Baugruppe benötigt. Auf dem Bau-Master
müssen in /etc/make.conf alle zu bauenden
Kernel mit der Variablen KERNCONF bekannt gegeben
werden. Geben Sie dabei den Kernel des Bau-Masters zuerst an.
Für jeden zu bauenden Kernel muss auf dem Bau-Master die
entsprechende Konfigurationsdatei unter
/usr/src/sys/arch/conf
abgelegt werden.
-
+ Installation des BasissystemsNach diesen Vorbereitungen können Sie mit dem Bau
beginnen. Bauen Sie auf dem Bau-Master, wie in beschrieben, den Kernel und die Welt,
installieren Sie aber nichts. Wechseln Sie auf die Testmaschine
und installieren Sie den gerade gebauten Kernel. Wenn diese
Maschine /usr/src und
/usr/obj über NFS bekommt, müssen
Sie das Netzwerk im Single-User-Modus aktivieren und die beiden
Dateisysteme einhängen. Am einfachsten ist dies, wenn Sie
auf der Testmaschine ausgehend vom Mehrbenutzermodus mit
shutdown now in den Single-User-Modus wechseln.
Sie können dann mit der normalen Prozedur den neuen Kernel
und das System installieren und anschließend
mergemaster laufen lassen. Wenn Sie damit
fertig sind, können Sie die Maschine wieder in den
Mehrbenutzermodus booten.Nachdem Sie sichergestellt haben, dass die Testmaschine
einwandfrei funktioniert, wiederholen Sie diese Prozedur für
jede Maschine in der Baugruppe.
-
+ Die Ports-SammlungDasselbe Verfahren können Sie auch für die
Ports-Sammlung anwenden. Zuerst müssen alle Maschinen einer
Baugruppe /usr/ports von derselben Maschine
über NFS zur Verfügung gestellt bekommen. Setzen Sie
dann ein Verzeichnis für die Quellen auf, das sich alle
Maschinen teilen. Dieses Verzeichnis können Sie in
/etc/make.conf mit der Variablen
DISTDIR angeben. Das Verzeichnis sollte
für den Benutzer beschreibbar sein, auf den der Benutzer
root vom NFS Subsystem abgebildet wird. Jede
Maschine sollte noch WRKDIRPREFIX auf ein
lokales Bauverzeichnis setzen. Wenn Sie vorhaben, Pakete zu bauen
und zu verteilen, sollten Sie PACKAGES auf ein
Verzeichnis mit den gleichen Eigenschaften wie
DISTDIR setzen.
diff --git a/de_DE.ISO8859-1/books/handbook/printing/chapter.sgml b/de_DE.ISO8859-1/books/handbook/printing/chapter.sgml
index 1424b9433f..7b3ee815e3 100644
--- a/de_DE.ISO8859-1/books/handbook/printing/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/printing/chapter.sgml
@@ -1,5635 +1,5595 @@
SeanKellyBeigetragen von JimMockRestrukturiert und aktualisiert durch StefanBethkeÜbersetzt von DruckenÜbersichtLPD spooling systemdrucken
- Mit FreeBSD können Sie viele unterschiedliche Drucker
+ Mit &os; 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
+ Sie können &os; auch so konfigurieren, dass es
Druckaufträge von anderen Computern über Ihr lokales
Netzwerk entgegennimmt, seien es &windows;-, &macos;- 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.
+ &os;-Computer. &os; 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.
+ &os; 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.
+ &os;-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 ().Einführung
- Um einen Drucker mit FreeBSD zu benutzen, können Sie
+ Um einen Drucker mit &os; 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.
+ LPD bekannt ist, verwenden.
+ Dieses System zur Verwaltung von Druckaufträgen ist das
+ Standardsystem in &os;. 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.DruckaufträgeDie 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.
+ 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.Vorteile des DrucksystemsWenn 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:
+ 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.&tex;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;
+ 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.Grund-KonfigurationUm 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.Einfache Drucker-KonfigurationDieser Abschnitt beschreibt, wie Sie die
LPD-Software konfigurieren, um
Ihren Drucker zu benutzen. Diese Grundlagen werden
erklärt:Abschnitt Hardware-Konfiguration
erläutert, wie Sie Ihren Drucker an Ihren Computer
anschließen können.Abschnitt Software-Konfiguration
erklärt, wie Sie die
LPD-Konfigurationsdatei
(/etc/printcap) anpassen.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.Hardware-KonfigurationDieser 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
+ Sie benötigen, um &os; 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.Schnittstellen und KabelPraktisch alle Drucker unterstützen mindestens
eine dieser Schnittstellen:DruckerserielleSeriell 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.DruckerparalleleParallel 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.
+ Üblicherweise brauchen keine Kommunikationsparameter
+ festgelegt zu werden; dies macht die Einrichtung sehr
+ einfach.
CentronicsDrucker, paralleleDie parallele Schnittstelle wird auch als
Centronics-Schnittstelle bezeichnet,
nach dem Namen des Steckverbinders, der hier
häufig zum Einsatz kommt.DruckerUSB
- 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
+ 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.
+ 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.PostScriptEin 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
+ 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.
+ 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.Parallele SchnittstellenUm 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.
+ Notieren Sie sich, mit welcher parallelen Schnittstelle des
+ Computers Sie den Drucker verbunden haben. Die meisten Computer
+ haben lediglich eine parallele Schnittstelle.
+ Der &os;-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.Serielle SchnittstellenUm 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.NullmodemkabelEin 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.BaudrateParitätFlusssteuerungSie 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.
+ 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.
+ oder Hardware. Notieren Sie sich diese Einstellungen, damit Sie
+ sie später bei der Software-Konfiguration zur Verfügung
+ haben.
Software-KonfigurationDieser Abschnitt beschreibt die notwendigen
Konfigurationsschritte, damit Sie mit dem
- FreeBSD-LPD-System drucken
+ &os;-LPD-System drucken
können.Diese Schritte müssen Sie ausführen: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.Konfigurieren Sie die Kommunikationseinstellungen
für die parallele Schnittstelle, sofern Sie sie
benutzen. Abschnitt Kommunikationseinstellungen
für die parallele Schnittstelle enthält
die Details.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.Konfigurieren Sie LPD
- für Ihren Drucker, indem Sie die
- Konfigurationsdatei /etc/printcap
- anpassen. Details dazu finden Sie im Abschnitt /etc/printcap anpassen. Details dazu finden
+ Sie im Abschnitt LPD
aktivieren: die
/etc/printcap-Datei.Kernel-KonfigurationDer 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.
+ 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:
- &prompt.root; grep sioN /var/run/dmesg.boot
+ &prompt.root; grep sioN/var/run/dmesg.bootErsetzen 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.
+ 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:&prompt.root; grep ppcN /var/run/dmesg.bootErsetzen 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.
+ 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 Um Unterstützung für eine serielle Schnittstelle
+ hinzuzufügen, lesen Sie bitte Kapitel Konfiguration des &os; Kernels.
+ Um eine parallele Schnittstelle hinzuzufügen, lesen Sie bitte
+ ebenfalls jenes Kapitel als auch den folgenden Abschnitt Kommunikationseinstellungen
für die parallele Schnittstelle.Kommunikationseinstellungen für die parallele
SchnittstelleWenn 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 &man.lpt.4; in
- FreeBSD benutzt das &man.ppbus.4;-System,
- das die parallele Schnittstelle mithilfe des
- &man.ppc.4;-Treibers steuert.
+ &os; benutzt das &man.ppbus.4;-System, das die parallele
+ Schnittstelle mithilfe des &man.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
+ 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
&man.lptcontrol.8;-Programms zur Laufzeit
einstellen.So legen Sie die Kommunikationseinstellung
in der Kernel-Konfiguration fest:Ä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 &man.ppc.4;-Treiber
- enthält:
+ Sie sicher, dass Ihre Kernel-Konfigurationsdatei den
+ &man.ppc.4;-Treiber enthält:
device ppcWenn 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 &man.acpi.4;-System in
- FreeBSD liegen. Bitte prüfen Sie die
+ &os; liegen. Bitte prüfen Sie die
ACPI- und die BIOS-Konfiguration.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.
+ &os;-Kernels enthält weitere Details dazu.
- So können Sie die
- Kommunikationseinstellung mit
- &man.lptcontrol.8;
+ So können Sie die Kommunikationseinstellung
+ mit&man.lptcontrol.8;
ändern:Um die Interrupt-Steuerung für die
Schnittstelle N zu
aktivieren, geben Sie ein:
- &prompt.root; lptcontrol -i -d /dev/lptN
+ &prompt.root; lptcontrol /dev/lptNUm den Polling-Modus für die Schnittstelle
N zu aktivieren, geben Sie
ein:
- &prompt.root; lptcontrol -p -d /dev/lptN
+ &prompt.root; lptcontrol /dev/lptNSie können diesen Befehl in
/etc/rc.local aufnehmen, damit er bei
jedem Systemstart automatisch ausgeführt wird.
- &man.lptcontrol.8; enthält weitere
- Informationen.
+ &man.lptcontrol.8; enthält weitere Informationen.Kommunikation mit den Drucker prüfenBevor 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
- &man.lptest.1; an: es produziert alle 96 druckbaren
- ASCII-Zeichen auf 96 Zeilen.
+ Der Drucker kann mit einem Probeausdruck getestet werden.
+ Für alle Drucker, die normalen Text unmittelbar drucken
+ können, bietet sich das Programm &man.lptest.1; an: es
+ produziert alle 96 druckbaren ASCII-Zeichen auf 96 Zeilen.PostScriptFü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
showpageSie können dieses ProstScript-Programm in einer
Datei speichern, und mit den Beispielen in den folgenden
Abschnitt verwenden.PCL
- 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.
+ 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.Einen Paralleldrucker prüfenDruckerparalleleDieser 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:Werden Sie root mithilfe
des &man.su.1;-Befehls.Senden Sie Testdaten an den Drucker.Wenn Ihr Drucker reinen Text direkt drucken
kann, verwenden Sie &man.lptest.1;:&prompt.root; lptest > /dev/lptNErsetzen 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:
- &prompt.root; cat > /dev/lptN
+ &prompt.root; cat file > /dev/lptNErsetzen 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
+ ändern. Zum Schluss tippen Sie
CtrlD.
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:&prompt.root; cat Testprogramm > /dev/lptN
- Ersetzen Sie
- Testprogramm durch
- den Dateinamen, unter dem Sie das Testprogramm
+ 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.
+ Informationen zum Umformatieren von Druckaufträgen.
Einen seriellen Drucker prüfenDruckerserielle
- Dieser Abschnitt führt vor, wie Sie die
- Kommunikation mit Ihrem Drucker über die parallele
- Schnittstelle prüfen können.
+ 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:Werden Sie root mithilfe
des &man.su.1;-Befehls.Ändern Sie die Datei
/etc/remote. Fügen Sie
den folgenden Eintrag hinzu:
- printer:dv=/dev/Gerät:br#Baudrate:pa=Parität
+ printer:dv=/dev/port:br#bps-rate:pa=parityBaudrateserieller AnschlussParitätErsetzen Sie
Gerät durch den
Gerätenamen der seriellen Schnittstelle
(ttyd0 für die erste,
ttyd1 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/ttyd2:br#19200:pa=none
+ printer:dv=/dev/ttyd2:br#19200:pa=noneVerbinden Sie sich mit dem Drucker über den
Befehl &man.tip.1;:
- &prompt.root; tip printer
+ &prompt.root; tip printerKommt es hierbei zu einer Fehlermeldung,
ändern Sie den Eintrag in
- /etc/remote und verwenden Sie
- /dev/cuaaN
- statt
- /dev/ttydN.
+ /dev/cuaaN und verwenden Sie /dev/cuaaN
+ statt /dev/ttydN.
Senden Sie Testdaten an den Drucker.Wenn Ihr Drucker reinen Text direkt drucken
kann, verwenden Sie &man.lptest.1;:&prompt.user; $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
+ 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:
+ Sie können das Testprogramm auch in einer Datei
+ speichern, und dann diesen Befehl aufrufen:&prompt.user; >Testprogramm
- Ersetzen Sie
- Testprogramm durch
- den Dateinamen, unter dem Sie das Testprogramm
+ Ersetzen Sie Testprogramm
+ durch den Dateinamen, unter dem Sie das Testprogramm
gespeichert haben. Nachdem &man.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.LPD aktivieren: die
/etc/printcap-DateiNachdem 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.DruckerEigenschaftenDie &man.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 &man.cgetent.3;.Die Grund-Konfiguration des
LPD-Systems beinhaltet diese
Schritte: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.
+ tragen Sie ihn in die /etc/printcap-Datei
+ ein. Abschnitt Einen Namen
+ wählen enthält weitere Informationen.
DeckblätterSchalten 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.Legen Sie ein Pufferverzeichnis für die
Warteschlange an, und geben Sie den Pfad mittels des
- sd-Attributs an: siehe Abschnitt
- Das Pufferverzeichnis
+ sd-Attributs an: siehe Abschnitt Das Pufferverzeichnis
anlegen.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.
+ linkend="printing-commparam">Festlegen der
+ Kommunikationsparameter beschrieben ist.
Installieren Sie einen Filter für reinen Text:
siehe Abschnitt Den
Textfilter installieren.Testen Sie die Konfiguration, indem Sie etwas mit
dem &man.lpr.1;-Befehl drucken. Die Abschnitte Die Konfiguration
- testen und Fehlersuche und
- Problembehebung enthalten weitere
- Informationen.
+ linkend="printing-trying">Die Konfiguration testen und
+ Fehlersuche und
+ Problembehebung enthalten weitere Informationen.
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 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.Einen Namen wählenDer 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.
+ 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.Keine Deckblätter druckendruckenDeckblattStandardmäß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.
+ 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
- \.
+ die letzte, enden mit dem Backslash \.
Das Pufferverzeichnis anlegenPufferverzeichnisDruckaufträgeDer 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.
+ 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
+ /var/spool anzulegen.
+ Es ist nicht notwendig, Sicherungskopien der Dateien
herzustellen; das Verzeichnis kann nötigenfalls
leicht mit &man.mkdir.1; wieder angelegt werden.Es ist auch üblich, dem Verzeichnis denselben
Namen wie dem Drucker zu geben:
- &prompt.root; mkdir /var/spool/Druckername
+ &prompt.root; mkdir /var/spool/printer-nameWenn 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:
- &prompt.root; mkdir /var/spool/lpd
-&prompt.root; mkdir /var/spool/lpd/rattan
-&prompt.root; mkdir /var/spool/lpd/bamboo
+ &prompt.root; mkdir /var/spool/lpd
+&prompt.root; mkdir /var/spool/lpd/rattan
+&prompt.root; mkdir /var/spool/lpd/bambooUm 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
+ 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:
- &prompt.root; chown daemon:daemon /var/spool/lpd/rattan
-&prompt.root; chown daemon:daemon /var/spool/lpd/bamboo
-&prompt.root; chmod 770 /var/spool/lpd/rattan
-&prompt.root; chmod 770 /var/spool/lpd/bamboo
+ &prompt.root; chown daemon:daemon /var/spool/lpd/rattan
+&prompt.root; chown daemon:daemon /var/spool/lpd/bamboo
+&prompt.root; chmod 770 /var/spool/lpd/rattan
+&prompt.root; chmod 770 /var/spool/lpd/bambooSchließ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:
+ 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:
+ :sh:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=/var/spool/lpd/bamboo:
+ :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.
+ angeben, verwendet das System /var/spool/lpd als Verzeichnis.
Festlegen der Drucker-Gerätedatei
- Nachdem Sie die die korrekten Gerätedatei
- für die Schnittstelle identifiziert und angelegt
- haben, müssen Sie dem
+ 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 es für die Datenübertragung
- zum Drucker verwenden soll.
+ 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:
+ 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:
+ :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/ttyd5:
+ sh:sd=/var/spool/lpd/bamboo:\
+ :lp=/dev/ttyd5:
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.
+ LPD die Gerätedatei /dev/lp zu verwenden. /dev/lp ist zurzeit in &os;
+ 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.Kommunikationsparameter festlegenDruckerserielleFü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#BaudrateSetzt 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-ModiSetzt die Eigenschaften für das Gerät,
nachdem es geöffnet wurde. Die verfügbaren
- Eigenschaften sind in &man.stty.1;
- aufgeführt.
+ Eigenschaften sind in &man.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
&man.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
+ (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:
+ :sh:sd=/var/spool/lpd/bamboo:\
+ :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:
Den Textfilter installierenDruckfilterEin 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 /bin/cat
+ aufruft, um die Daten unverändert und den Drucker zu schicken.
+ &os; 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 2Machen Sie die Datei ausführbar:
- &prompt.root; chmod 555 /usr/local/libexec/if-simple
+ &prompt.root; chmod 555 /usr/local/libexec/if-simpleKonfigurieren 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:
+ :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/ttyd5:ms#-parenb cs8 clocal crtscts:\
- :if=/usr/local/libexec/if-simple:
+ :sh:sd=/var/spool/lpd/bamboo:\
+ :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:\
+ :if=/usr/local/libexec/if-simple:
Das Shell-Skript if-simple
steht im Verzeichnis /usr/share/examples/printing.LPD aktivieren&man.lpd.8; wird von /etc/rc
gestartet, wenn die &man.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
- &man.lpd.8; von Hand:
+ &man.lpd.8; von Hand:
- &prompt.root; lpd
+ &prompt.root; lpdDie Konfiguration testenDamit 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 &man.lpr.1; produzieren.
- &man.lpr.1; übergibt Druckaufträge an das
+ 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
+ &man.lpr.1; produzieren. &man.lpr.1; übergibt
+ Druckaufträge an das
LPD-System.Sie können &man.lpr.1; mit &man.lptest.1;
kombinieren, um Testdaten zu drucken. &man.lptest.1; wurde
im Abschnitt Kommunikation mit den Drucker
prüfen vorgestellt.So testen Sie die einfache
LPD-Konfiguration:
- &prompt.root; lptest 20 5 | lpr -PDruckername
+ &prompt.root; lptest 20 5 | lpr DruckernameErsetzen Sie Druckername
durch den Namen des Druckers, den Sie testen möchten.
Wenn Sie den Standard-Drucker testen möchten, rufen
Sie &man.lpr.1; ohne die Option auf.
Wenn Sie einen Drucker testen möchten, der nur
&postscript; versteht, müssen Sie ein
&postscript;-Testprogramm an &man.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.
+ an das LPD-System übergeben.
Bei einem &postscript;-Drucker hängt das Ergebnis
naturgemäß vom Testprogramm ab. Wenn Sie
&man.lptest.1; verwenden, sollte das Ergebnis
ungefähr so aussehen:
- !"#$%&'()*+,-./01234
+ !"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
-%&'()*+,-./012345678
+%&'()*+,-./012345678
Um sicherzustellen, dass alles richtig
funktioniert, sollten Sie jetzt ein größeres
&postscript;-Programm senden. Mit &man.lptest.1; können
Sie größere Datenmengen z.B. mit dem Befehl
lptest 80 60 erzeugen: &man.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.JohannKoisÜbersetzt von Erweiterte Drucker-KonfigurationDieser 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.FilterDruckenFilterObwohl 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
+ 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
+ bereits mit &os; 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.
+ &os; 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;-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.
+ Eingabe von lpr troff-Daten,
+ von lpr &tex;-DVI-Daten,
+ oder von lpr 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
+ verhalten), der bereits mit &os; 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.Eine Kopie der verschiedenen Skripte finden Sie im
Verzeichnis /usr/share/examples/printing.Die Funktionsweise von FilternBei 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.
+ Standardfehlerausgabe auf /dev/console (Voreinstellung) oder auf
+ die über die Option lf in
+ /etc/printcap festgelegte Datei.
troffWelcher Filter von LPD mit
welchen Argumenten geladen wird, wird in der Datei
/etc/printcap oder durch die Argumente,
die der Anwender &man.lpr.1; auf der Kommandozeile
übergibt, festgelegt. Gibt der Anwender beispielsweise
- lpr -t ein, startet
+ lpr 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 hostacct-fileDie einzelnen Argumente haben folgende Bedeutung:
- Notwendig, wenn lpr -l
- verwendet wird.
+ Notwendig, wenn lpr
+ verwendet wird.widthDer Wert der in
/etc/printcap festgelegten
Option pw (page
width). In der Voreinstellung
ist dieser Wert auf 132 gesetzt.lengthDer Wert der
pl-Fähigkeit
(page length),
Voreinstellung 66.indent
- Der durch lpr -i
- festgelegte Einzug, Voreinstellung 0.
+ Der durch lpr
+ festgelegte Einzug,
+ Voreinstellung 0.loginDer Name des Benutzers, der die Datei
druckt.hostDer Rechner, auf dem der Druckauftrag
gestartet wurde.acct-fileDer Name der Verrechnungsdatei, in der die
Ergebnisse der
af-Fähigkeit gespeichert
werden.DruckenFilterEin 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 hostacct-filepixel-width ist der Wert
- der px-Fähigkeit
- (Voreinstellung 0), während
- pixel-height dem Wert der
- py-Fähigkeit (Voreinstellung
+ 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
+ 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 lengthBeide Argumente entsprechen den Optionen
und der
Textfilter.Alle Filter sollten mit folgenden Rückgabewerten
(Exitcodes) beendet werden:exit 0Der Filter hat die Datei erfolgreich gedruckt.exit 1Der 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 2Der 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
+ /usr/libexec/lpr/lpf, der mit &os;
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.Normalen Text auf &postscript;-Druckern druckenDruckjobSie 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.
+ 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?DruckerseriellHaben 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 lprpspsif 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
+ lprps ist in der &os;
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
+ 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:
+ :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
+ &os; Ports-Sammlung
enthält mit a2ps ein umfangreiches
Programm zur Konvertierung von normalem Text nach
&postscript;.&postscript; auf Nicht-&postscript;-Druckern emulierenPostScriptEmulationGhostscriptBei &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.
+ unter &os; 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.
+ 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,
+ verschiedenen Versionen in der &os; 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.
+ 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
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.
+ gs 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 2Zuletzt müssen Sie LPD
noch durch die if-Fähigkeit über
den neuen Filter informieren:
- :if=/usr/local/libexec/ifhp:
+ :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.
+ 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.KonvertierungsfilterNachdem 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.Warum sollte ich einen Konvertierungsfilter
installieren?&tex;DVI-Dateien druckenKonvertierungsfilter 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:
- &prompt.user; dvips seaweed-analysis.dvi
-&prompt.user; lpr seaweed-analysis.ps
+ &prompt.user; dvips seaweed-analysis.dvi
+&prompt.user; 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:
+ 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:
- &prompt.user; lpr -d seaweed-analysis.dvi
+ &prompt.user; lpr seaweed-analysis.dviDurch die Verwendung der Option
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.
+ 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.
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.
+ 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
+ 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ähigkeitlpr-OptioncifplotcfDVIdfplotgfditroffnfFORTRAN-TextrftrofftfRasterdatenvfNormaler Textifkeine, , or
- Wollen Sie also lpr -d verwenden,
- muss die df-Fähigkeit in
+ Wollen Sie also lpr
+ verwenden, muss die df-Fähigkeit in
/etc/printcap aktiviert sein.FORTRANObwohl 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.
+ lpr nun für
+ drucke Printerleaf-Dateien steht.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
+ Da Konvertierungsfilter nicht zum Basissystem von &os;
+ 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.
+ 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.
+ 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:
+ :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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
- :if=/usr/local/libexec/psif:\
- :df=/usr/local/libexec/psdf:
+ :sh:sd=/var/spool/lpd/bamboo:\
+ :lp=/dev/ttyd5: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 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. lprps wiederum
- nutzt diese Argumente, um die gedruckten Seiten zu
- verrechnen.
+ 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.
Beispiele für KonvertierungsfilterDa es keine verbindliche Prozedur zur Installation eines
- Druckerfilters gibt, folgen nun weitere Beispiele.
- Verwenden Sie diese, um Ihre eigenen Filter zu erstellen.
- Falls ein Filter Ihren Anforderungen bereits entspricht,
- können Sie ihn auch direkt verwenden.
+ 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:
+ 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.
+ 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 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:
+ :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 gropsDas ist alles. Um den Filter verwenden zu können,
müssen Sie ihn allerdings noch in
/etc/printcap aktivieren:
- :tf=/usr/local/libexec/pstf:
+ :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:
+ 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:
+ :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:
+ DVI-Filters in /etc/printcap eintragen:
- :df=/usr/local/libexec/hpdf:
+ :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
- dvi2xx ein solches Programm. Nach der
- Installation des Ports verfügen wir über das
+ Glücklicherweise enthält die &os; 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
+ 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
+ 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
+ /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
+ 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.
+ 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 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
- &man.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.
+ Alle in diesem Abschnitt besprochenen Konvertierungsfilter sind
+ zwar sehr hilfreich, allerdings müssen Sie nach wie vor bei
+ jedem Aufruf von &man.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.
+ file verwenden. Leider ist es bei
+ einigen Dateitypen problematisch, diese zu
+ unterscheiden. Daher könnten Sie für diese Dateitypen
+ dennoch einen Konvertierungsfilter installieren.
apsfilterDruckenFilterapsfilter
- Die FreeBSD Ports-Sammlung enthält mit
- apsfilter einen Textfilter, der diese
- automatische Konvertierung durchführen kann. Er ist
- in der Lage, normalen Text sowie &postscript;- und
- DVI-Dateien zu erkennen, diese zu konvertieren und auf
+ Die &os; 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.AusgabefilterLPD 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, dannstartet 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 lengthwidth 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.)
+ 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.lpf: Ein TextfilterDer Textfilter (Eingabefilter)
/usr/libexec/lpr/lpf wird bereits mit
- FreeBSD geliefert. Er erlaubt das Einrücken der
- Ausgabe (über lpr -i), die
+ &os; geliefert. Er erlaubt das Einrücken der
+ Ausgabe (über lpr ), die
Übergabe von Zeichen-Literalen
- (über lpr -l), das Anpassen der
- Druckposition bei gelöschten Zeichen
+ (über lpr ), 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.Seiten verrechnenverrechnenDruckernutzungDamit 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.Deckblätter
- Wenn Sie viele Benutzer mit
- verschiedenen Druckern verwalten müssen, sollten Sie
- Deckblätter als notwendiges
- Übel akzeptieren.
+ Wenn Sie viele Benutzer mit verschiedenen
+ Druckern verwalten müssen, sollten Sie
+ Deckblätter als notwendiges Übel
+ akzeptieren.BannerseitenDeckblätterDeckblätterDeckblä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.).Deckblätter aktivierenIm 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/lpfGeben 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:
+ :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 &man.lpr.1;-Optionen finden
- Sie im Abschnitt lpr
+ unterdrücken. Weitere, für
+ die Ausgabe von Deckblättern interessante &man.lpr.1;-Optionen
+ finden Sie im Abschnitt Deckblattoptionen.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.Deckblätter kontrollierenHaben 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:
+ Druckauftrag outline, der von
+ kelly auf dem Rechner rose
+ erstellt wurde:
- k ll ll
+ 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
+ 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
+ rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995In 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.Deckblätter verrechnenWenn 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
+ über lpr
+ 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
+ durch ein lpr die Ausgabe
+ eines Deckblattes unterdrücken, würde dieses nun trotzdem
verrechnet werden, da LPD keine
Informationen über die Verwendung der Option
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.
+ 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.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
+ 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.
+ lpr 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_argsBeachten 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 ) 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.
+ den Druckauftrag mit lpr
+ 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.Drucken über ein NetzwerkDruckerNetzwerkNetzwerkdruck
- FreeBSD unterstützt das Drucken über ein
- Netzwerk, also den Versand von Druckaufträgen an einen
- entfernten Drucker. Man unterscheidet dabei zwei
- Möglichkeiten:
+ &os; 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.Auf entfernten Rechnern installierte DruckerDas 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).DruckerNetzwerkNetzwerkdruckerWenn 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.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:Der Name des Eintrags. Entspricht in der Regel dem
Eintrag auf dem printer host.Lassen Sie den Eintrag für die
lp-Fähigkeit leer, schreiben Sie
also :lp=:.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.Geben Sie den Namen des printer
hosts über die
rm-Fähigkeit an.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:
+ :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:
+ :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:
+ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:
Nun müssen wir nur noch die Spooling-Verzeichnisse
auf dem Rechner orchid erzeugen:
- &prompt.root; mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
-&prompt.root; chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
-&prompt.root; chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
+ &prompt.root; mkdir /var/spool/lpd/rattan/var/spool/lpd/bamboo
+&prompt.root; chmod 770 /var/spool/lpd/rattan/var/spool/lpd/bamboo
+&prompt.root; chown daemon:daemon /var/spool/lpd/rattan/var/spool/lpd/bambooDamit können Benutzer des Rechners
orchid die Drucker rattan
- und bamboo verwenden. Gibt ein Benutzer
- auf orchid beispielsweise
-
- &prompt.user; lpr -P bamboo -d sushi-review.dvi
-
- ein, würde LPD auf dem Rechner
- orchid den Druckauftrag in das
- Spooling-Verzeichnis /var/spool/lpd/bamboo
- kopieren und feststellen, dass es sich um einen DVI-Auftrag
- handelt. Sobald rose über genug freien
- Platz im bamboo-Spooling-Verzeichnis
- verfügt, würden die beiden
- LPDs 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.
+ und bamboo verwenden. Ein Benutzer gibt
+ auf orchid beispielsweise ein:
+
+ &prompt.user; lpr bamboo 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.Drucker mit direkter TCP-SchnittstelleWenn 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
+ sich allerdings um eine Ein-Wege-Kommunikation (von &os; 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 5100Den Druckerzugriff beschränkenDruckerden Zugriff beschränkenDieser 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.Den Ausdruck von mehreren Kopien verhindernDas LPD-System macht es dem
einzelnen Benutzer einfach, mehrere Kopien einer Datei zu
- drucken. So werden mit lpr -#5
+ drucken. So werden mit lpr
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 &man.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 allowedWenn 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:
+ :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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
- :if=/usr/local/libexec/psif:\
- :df=/usr/local/libexec/psdf:
+ :sh:sd=/var/spool/lpd/bamboo:sc:\
+ :lp=/dev/ttyd5: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:
+ :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:
+ :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:
+ :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 &man.lpr.1; mehrmals hintereinander
- aufrufen oder eine Datei mehrfach in den gleichen Druckauftrag
- aufnehmen:
+ von lpr nicht mehr
+ möglich, ein Benutzer kann aber weiterhin &man.lpr.1; mehrmals
+ hintereinander aufrufen oder eine Datei mehrfach in den gleichen
+ Druckauftrag aufnehmen:
- &prompt.user; lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
+ &prompt.user; lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.signAuch dieser Mißbrauch Ihres Druckers kann verhindert
werden, falls Sie dies wünschen. Diese Maßnahmen
werden in diesem Abschnitt allerdings nicht behandelt.Den Zugriff auf bestimmte Drucker beschränkenSie 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.
- Benutzer, die dieser Gruppe nicht angehören (dies
- gilt auch für root), erhalten die
- Meldung
-
- lpr: Not a member of the restricted group
+ 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.
- wenn Sie diesen Drucker verwenden wollen.
+ lpr: Not a member of the restricted groupAnalog 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:
+ :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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
- :if=/usr/local/libexec/psif:\
- :df=/usr/local/libexec/psdf:
+ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
+ :lp=/dev/ttyd5: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.Für jeden Drucker kann nur eine einzige
priviligierte Gruppe erstellt werden.Die Größe von Druckaufträgen kontrollierenDruckaufträgeWenn 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.
+ 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.
DruckauftragkontrollierenLPD 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.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:
+ :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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
- :if=/usr/local/libexec/psif:\
- :df=/usr/local/libexec/psdf:
+ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
+ :lp=/dev/ttyd5: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.Druckaufträge von entfernten Rechnern
beschränkenDas LPD-System bietet mehrere
Möglichkeiten, um Druckaufträge zu beschränken,
die auf entfernten Rechnern gestartet wurden:Rechner beschränkenSie 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
&man.ruserok.3;-Protokoll benötigt wird und
Änderungen dieser Datei auch Programme wie
&man.rsh.1; und &man.rcp.1; beeinflussen
können.Das folgende Beispiel beschreibt die Datei
/etc/hosts.lpd auf dem Rechner
rose:orchid
violet
madrigal.fishbaum.deDurch 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änkungenSie 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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
- :if=/usr/local/libexec/psif:\
- :df=/usr/local/libexec/psdf:
+ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
+ :lp=/dev/ttyd5: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:
- &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfree
+ &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfreeBenutzer beschränkenSie 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.Die Druckernutzung verrechnenDruckerverrechnenSie 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.Kurzanleitung für die Implementierung der
Druckerverrechnung
- FreeBSD bietet Ihnen zwei Programme, um eine periodische
+ &os; 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 &man.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. lpf verwendet diese
- Argumente danach, um den Papierverbrauch zu bestimmen. Nachdem
+ 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:zhangSie 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
&man.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.74Folgende Argumente können an &man.pac.8;
übergeben werden: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.Sortiert die Ausgabe nach den verursachten Kosten
anstelle einer alphabetischen Sortierung der
Benutzernamen.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.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.Die Sortierreihenfolge umkehren.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 &man.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:
+ anmelden können), sollten Sie pac
+ 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.74Um den zu verrechnenden Betrag zu ermitteln, verwendet
&man.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 &man.pac.8; mit der Option
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
+ So steht
- &prompt.root; pac -p1.50
+ &prompt.root; pac
- beispielsweise für einen Preis von einem Dollar und
+ 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
+ Der Aufruf von pac
+ 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 &man.pac.8; erneut aufrufen,
wird die Auswertedatei eingelesen, um die Startbeträge
zu erhalten, alle weiteren Informationen stammen danach
aus der normalen Verrechnungsdatei.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.JohannKoisÜbersetzt von Drucker verwendenDruckerverwenden
- Dieser Abschnitt beschreibt, wie Sie einen unter FreeBSD
+ Dieser Abschnitt beschreibt, wie Sie einen unter &os;
konfigurierten Drucker verwenden können. Die folgende
Liste bietet einen Überblick über wichtige
Anwenderbefehle:&man.lpr.1;Einen Druckauftrag drucken&man.lpq.1;Eine Druckerwarteschlange prüfen&man.lprm.1;Einen Druckauftrag aus einer Warteschlange entfernen
(stornieren)Zusätzlich existiert mit &man.lpc.8; ein Befehl zur
zur Steuerung von Druckern und Druckerwarteschlangen, der im
Abschnitt Drucker verwalten
näher beschrieben wird.Jeder der drei Befehle &man.lpr.1;, &man.lprm.1;, sowie
&man.lpq.1; akzeptiert die Option
,
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 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.Druckaufträge erstellenUm eine Datei zu drucken, geben Sie folgenden Befehl ein:
- &prompt.user; lpr filename...
+ &prompt.user; lpr filename...printingDadurch wird jede angegebene Datei an den Standarddrucker
geschickt. Wenn Sie keine Datei angeben, liest &man.lpr.1;
die zu druckenden Daten von der Standardeingabe. Um
beispielsweise einige wichtige Systemdateien zu drucken, geben
Sie folgenden Befehl ein:
- &prompt.user; lpr /etc/host.conf /etc/hosts.equiv
+ &prompt.user; lpr /etc/host.conf/etc/hosts.equivUm einen bestimmten Drucker auszuwählen, verwenden Sie:
- &prompt.user; lpr -P printer-namefilename...
+ &prompt.user; lpr printer-namefilename...Das folgende Beispiel gibt eine ausführliche Liste aller
im Arbeitsverzeichnis enthaltenen Dateien auf den Drucker
rattan aus:
- &prompt.user; ls -l | lpr -P rattan
+ &prompt.user; ls | lpr rattanDa keine Dateien an &man.lpr.1; übergeben werden, liest
lpr die zu druckenden Daten von der
Standardeingabe, in unserem Fall also die Ausgabe des Befehls
- ls -l.
+ ls .&man.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.Druckaufträge verwaltenDruckauftragWenn Sie &man.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.
+ 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 &man.lpq.1;. Wollen Sie einen anderen Drucker
abfragen, müssen Sie die Option
verwenden. Der Befehl
- &prompt.user; lpq -P bamboo
+ &prompt.user; lpq 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 bytesDerzeit 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 &man.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 &man.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
&man.lpq.1; nur drei Punkte angezeigt.Die erste Zeile der Ausgabe von &man.lpq.1; ist ebenfalls
sehr nützlich: Sie beschreibt den momentanen Druckerstatus
(oder zumindest, was LPD denkt,
dass der Drucker gerade macht).&man.lpq.1; unterstützt auch die Option
zur Erstellung einer ausführlicheren
- Ausgabe. Die Eingabe von lpq -l erzeugt
- für unser obiges Beispiel die folgende Ausgabe:
+ Ausgabe. Die Eingabe von lpq
+ 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 bytesDruckaufträge stornierenMit &man.lprm.1; können Sie einen Druckauftrag
stornieren. Häufig ist &man.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 &man.lpq.1; ermitteln. Danach geben Sie
Folgendes ein:
- &prompt.user; lprm job-number
+ &prompt.user; lprm Job-NummerUm einen Druckauftrag eines anderen Druckers zu stornieren,
benötigen Sie wiederum die Option . Der
folgende Befehl entfernt den Druckauftrag mit der Nummer 10
aus der Warteschlange des Druckers
bamboo:
- &prompt.user; lprm -P bamboo 10
+ &prompt.user; lprm bamboo 10&man.lprm.1; unterstützt verschiedene Kurzbefehle:lprm -Entfernt alle Druckaufträge (des Standarddruckers),
die von Ihnen erstellt wurden.lprm userEntfernt 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.lprmWenn Sie weder eine Auftragsnummer, einen Benutzernamen,
noch die Option angeben, entfernt
&man.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
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:
- &prompt.user; lprm -P rattan -
+ &prompt.user; lprm rattan -Wenn Sie in einer Netzwerkumgebung arbeiten, erlaubt es
&man.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:
- &prompt.user; lpr -P rattan myfile
-&prompt.user; rlogin orchid
-&prompt.user; lpq -P rattan
+ &prompt.user; lpr rattan myfile
+&prompt.user; rlogin orchid
+&prompt.user; lpq rattan
Rank Owner Job Files Total Size
active seeyan 12 ... 49123 bytes
2nd kelly 13 myfile 12 bytes
-&prompt.user; lprm -P rattan 13
+&prompt.user; lprm rattan 13
rose: Permission denied
-&prompt.user; logout
-&prompt.user; lprm -P rattan 13
+&prompt.user; logout
+&prompt.user; lprm rattan 13
dfA013rose dequeued
cfA013rose dequeued
Abseits von normalem Text: Druckoptionen&man.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.Formatierungs- und KonvertierungsoptionenDie folgenden &man.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 &man.pr.1; formatieren wollen.&tex;Der folgende Befehl druckt so beispielsweise eine
DVI-Datei (des &tex;-Satzsystems) namens
- fish-report.dvi auf dem Drucker
- bamboo:
+ fish-report.dvi auf
+ dem Drucker bamboo:
- &prompt.user; lpr -P bamboo -d fish-report.dvi
+ &prompt.user; lpr bamboo -d fish-report.dviDiese 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.Alle Optionen mit Ausnahme von und
setzen einen installierten und
für den jeweiligen Drucker konfigurierten
Konvertierungsfilter voraus. So benötigt die Option
den DVI-Konvertierungsfilter. Diese
Filter werden im Abschnitt
Konvertierungsfilter ausführlich
beschrieben.Druckt cifplot-Dateien.Druckt DVI-Dateien.Druckt FORTRAN-Textdateien.Druckt Plot-Daten.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.Zwischen der Option und der
der Zahl darf dabei kein Leerzeichen stehen.Druckt Text inklusive vorhandener Steuerzeichen.Druckt ditroff-Dateien (geräteunabhängiges
troff).-pFormatiert normalen Text mit &man.pr.1;, bevor der
Ausdruck erfolgt.Verwende titel auf dem
&man.pr.1;-Deckblatt anstelle des Dateinamens. Diese
Option ist nur wirksam, wenn sie gemeinsam mit der
Option verwendet.Druckt troff-Daten.Druckt Rasterdaten.Dazu ein Beispiel. Der folgende Befehl druckt eine
formatierte Version der Manualpage zu &man.ls.1; auf den
Standarddrucker:
- &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t
+ &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -man | lpr &man.zcat.1; dekomprimiert den Quellcode der Manualpage
&man.ls.1; und reicht ihn an &man.troff.1; weiter, das
ihn formatiert und daraus GNU troff-Daten erzeugt. Diese
werden wiederum an &man.lpr.1; weitergereicht, das den
Druckauftrag schließlich an
LPD übergibt. Da die Option
von &man.lpr.1; verwendet wurde,
konvertiert das Drucksystem die GNU troff-Daten zuvor in
ein Format, das der Standarddrucker verstehen und ausgeben
kann.Druckaufträge verwaltenDie folgenden Optionen von &man.lpr.1; weisen
LPD an, den Druckauftrag auf
verschiedene Art und Weise zu behandeln:-# anzahlErzeugt 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:
+ parser.c,
+ gefolgt von drei Kopien von
+ parser.h auf
+ den Standarddrucker:
- &prompt.user; lpr -#3 parser.c parser.h
+ &prompt.user; lpr parser.c parser.h-mVerschickt 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.-sKopiert 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.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
- Speicherplatz lediglich im lokalen
- Spooling-Verzeichnis, nicht aber im entfernten. Dennoch
- ist diese Option auch in diesem Fall nützlich.
+ Speicherplatz lediglich im lokalen Spooling-Verzeichnis,
+ nicht aber im entfernten. Dennoch ist diese Option auch in
+ diesem Fall nützlich.
-rLöscht die im Druckauftrag enthaltenen Dateien,
nachdem sie in das Spooling-Verzeichnis kopiert oder
unter Verwendung der Option
gedruckt werden. Verwenden Sie diese Option daher
nur mit äußerster Vorsicht!Deckblatt-OptionenDie folgenden &man.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 textErsetzt 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 textErsetzt 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.-hVerhindert den Ausdruck von Deckblättern.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.Drucker verwaltenAls Administrator Ihres Systems ist es Ihre Aufgabe, Drucker
zu installieren, zu konfigurieren und zu testen. Um mit Ihrem
Drucker zu kommunizieren, können Sie &man.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 &man.lpc.8; einsetzen zu
können. Als normaler Benutzer erlaubt es Ihnen &man.lpc.8;
lediglich, den Druckstatus abzufragen und einen hängenden
Drucker neu zu starten.Es folgt nun eine Zusammenfassung der Befehle von
&man.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-nameall angeben, wird der Befehl auf alle in
/etc/printcap definierten Drucker
angewendet.abort
printer-nameBricht den aktuellen Druckauftrag ab und beendet den
Drucker. Solange die Warteschlange aktiviert ist,
können allerdings weiterhin Druckaufträge
erteilt werden.clean
printer-nameEntfernt 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-nameDeaktiviert 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-namenachrichtBeendet 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 &man.lpq.1; oder
mit lpc status abfragt.enable
printer-nameAktiviert 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-nameAusgaben 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
+ 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
+ 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-nameStartet den Drucker, um die in der Warteschlange
enthaltenen Aufträge zu drucken.stop
printer-nameBeendet 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-namejob-or-usernameSortiert 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-nameStartet einen Drucker. Das Gegenstück zu
down. Äquivalent zu
start, gefolgt von
enable.&man.lpc.8; akzeptiert diese Befehle direkt auf der
Kommandozeile. Geben Sie keinen Befehl ein, wird
&man.lpc.8; im interaktiven Modus gestartet. In diesem
Modus können Sie solange Befehle eingeben, bis Sie
exit oder quit
eingeben.Alternativen zum
LPD-DrucksystemWenn Sie dieses Kapitel bis hierher gelesen haben, wissen
Sie so gut wie alles über
LPD, das Standarddrucksystem von
- FreeBSD. Wahrscheinlich sind Ihnen bereits einige
+ &os;. Wahrscheinlich sind Ihnen bereits einige
Unzulänglichkeiten dieses Systems aufgefallen, und Sie
- fragen sich nun, welche anderen Drucksysteme es für FreeBSD
+ fragen sich nun, welche anderen Drucksysteme es für &os;
gibt.LPRngLPRngLPRng 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
+ Hauptmaintainer von PLP, entwickelt. Die offizielle
Webseite von LPRng ist unter
zu finden.CUPSCUPSCUPS, 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 .
+
+
+ HPLIP
+
+ 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
+ .
+
+ ProblembehandlungWenn Sie eine einfache Testseite mit &man.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 2Der Drucker erzeugte einen Treppeneffekt
(staircase effect).Sie haben einen Ausdruck ähnlich dem folgenden
erhalten:
- !"#$%&'()*+,-./01234
+ !"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
- #$%&'()*+,-./0123456
+ #$%&'()*+,-./0123456
MS-DOSOS/2ASCIISie 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;, &os2; 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
+ Wenn Sie unter &os; 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
+ &os; erwartet von einem Drucker das folgende
Verhalten:Drucker empfängt CRDrucker druckt CRDrucker empfängt LFDrucker druckt CR + LFEs 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.
- Wenn Sie auf Ihrem Rechner neben FreeBSD noch
+ Wenn Sie auf Ihrem Rechner neben &os; noch
andere Betriebssysteme verwenden, müssen Sie
Ihren Drucker möglicherweise anschließend
- erneut konfigurieren, damit die
+ 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.PCLEs 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 2Das 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:
+ :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
+ seltener vor. Die von &os; 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ängtDrucker drucktCRCRLFCR + LFManche 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
- Carrier-Flusskontrolle, dann sollten Sie den
+ 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 Carrier-Flusskontrolle
+ 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
+ an &os; 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
+ :sh:sd=/var/spool/lpd/rattan:\
+ :lp=/dev/lpt0:\
+ :if=/usr/local/libexec/if-simple:\
+ :lf=/var/log/rattan.logVersuchen 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
+ LPD in der Voreinstellung /dev/console für die Ausgabe
der Fehlermeldungen.
diff --git a/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml b/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
index 387f29d306..001863f9bd 100644
--- a/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
@@ -1,1183 +1,1183 @@
MurrayStokelyBeigetragen von OliverPeterÜbersetzt von VirtualisierungÜbersichtVirtualisierungssoftware erlaubt es, mehrere Betriebssysteme
gleichzeitig auf dem selben Computer laufen zu lassen. Derartige
Softwaresysteme für PCs setzen in der Regel ein
Host-Betriebssystem voraus, auf dem die
Virtualisierungssoftware läuft und unterstützen eine
nahezu beliebige Anzahl von Gast-Betriebssystemen.Nachdem Sie dieses Kapitel gelesen haben,Kennen Sie den Unterscheid zwischen einem
Host-Betriebssystem und einem Gast-Betriebssystem.Können Sie FreeBSD auf einem &intel;-basierenden
&apple; &macintosh; installieren.Wissen Sie, wie man FreeBSD unter Linux mit
&xen; installiert.Können Sie FreeBSD unter µsoft.windows;
und Virtual PC installieren.Wissen Sie, wie man ein virtualisiertes FreeBSD-System
für optimale Leistung konfiguriert.Bevor Sie dieses Kapitel lesen, sollten SieDie Grundlagen von &unix; und FreeBSD verstehen
().FreeBSD installieren können
().Wissen, wie man seine Netzwerkverbindung
konfiguriert ().Software Dritter installieren können
().FreeBSD als Gast-BetriebssystemParallels unter MacOS XParallels Desktop für &mac;
ist ein kommerzielles Softwareprodukt, welches für
&intel;-basierende &apple; &mac;-Computer mit
&macos; X 10.4.6
oder höher verfügbar ist. FreeBSD wird von diesem
Softwarepaket als Gast-Betriebssystem vollständig
unterstützt. Nach der Installation von
Parallels auf &macos; X
konfigurieren Sie als erstes eine virtuelle Maschine,
in der Sie danach das gewünschte Gast-Betriebssystem (in
unserem Fall FreeBSD) installieren.Installation von FreeBSD unter
Parallels/&macos; XDer erste Schritt bei der Installation von FreeBSD unter
Parallels/&macos; X ist es,
eine virtuelle Maschine zu konfigurieren, in der Sie
FreeBSD installieren können. Dazu wählen Sie bei
der Frage nach dem Guest OS TypeFreeBSD aus:Danach legen Sie geeignete Größen für
Festplatten- und Arbeitsspeicher für die zu erstellende
FreeBSD-Instanz fest. 4 GB Plattenplatz sowie
512 MB RAM sind in der Regel für die Arbeit unter
Parallels ausreichend:Wählen Sie den gewünschten Netzwerktyp
aus und konfigurieren Sie Ihre Netzwerkverbindung:Speichern Sie Ihre Eingaben, um die Konfiguration
abzuschließen:Nachdem Sie die virtuelle Maschine erstellt haben,
installieren Sie im nächsten Schritt FreeBSD in dieser
virtuellen Maschine. Dazu verwenden Sie am besten eine
offizielle FreeBSD-CDROM oder Sie laden von einem offiziellen
FTP-Server ein ISO-Abbild auf Ihren &mac; herunter. Danach
klicken Sie auf das Laufwerksymbol in der rechten unteren
Ecke des Parallels-Fensters, um
ihr virtuelles Laufwerk mit dem ISO-Abbild oder mit dem
physikalischen CD-ROM-Laufwerk ihres Computers zu
verknüpfen.Nachdem Sie diese Verknüpfung hergestellt haben,
starten sie die virtuelle FreeBSD-Maschine neu, indem Sie
wie gewohnt auf das Symbol "Neustarten" klicken.
Parallels startet nun ein
Spezial-BIOS, das zuerst prüft, ob Sie eine CD-ROM
eingelegt haben (genau so, wie es auch ein echtes BIOS
machen würde).In unserem Fall findet das BIOS ein
FreeBSD-Installationsmedium und beginnt daher eine normale
Installation mit sysinstall
(wie in des Handbuchs
beschreiben).Nachdem die Installation abgeschlossen ist, können
Sie die virtuelle Maschine starten.FreeBSD für den Einsatz unter
Parallels/&macos; X optimierenNachdem Sie FreeBSD erfolgreich unter &macos; X mit
Parallels installiert haben, sollten
Sie ihr virtuelles FreeBSD-System für virtualisierte
Operationen optimieren:Setzen der Bootloader-VariablenDie wichtigste Änderung ist es, die Variable
zu verkleinern, um so die
CPU-Auslastung in der
Parallels-Umgebung zu
verringern.kern.hz=100Ohne diese Einstellung kann ein unbeschäftigtes
FreeBSD unter Parallels trotzdem
rund 15 Prozent der CPU-Leistung eines Single Prozessor
&imac;'s verbrauchen. Nach dieser Änderung reduziert
sich dieser Wert auf etwa 5 Prozent.Erstellen einer neuen KernelkonfigurationsdateiSie können alle SCSI-, FireWire- und
USB-Laufwerks-Treiber entfernen.
Parallels stellt einen
virtuellen Netzwerkadapter bereit, der den
&man.ed.4;-Treiber verwendet. Daher können alle
Netzwerkgeräte bis auf &man.ed.4; und
&man.miibus.4; aus dem Kernel entfernt werden.Netzwerkbetrieb einrichtenDie einfachste Netzwerkkonfiguration ist der Einsatz
von DHCP, um Ihre virtuelle Maschine mit dem gleichen
lokalen Netzwerk, in dem sich der Host-&mac; befindet, zu
verbinden. Dazu fügen Sie die Zeile
ifconfig_ed0="DHCP" in die Datei
/etc/rc.conf ein. Weitere
Informationen zur Konfiguration des Netzwerks unter
FreeBSD finden Sie im des Handbuchs.FukangChen (Loader)Beigetragen von FreeBSD mit &xen; unter Linux einsetzenDer &xen; Hypervisor ist ein
als Open Source verfügbares Para-Virtualisierungsprodukt,
das von der kommerziellen Firma XenSource unterstützt wird.
Gast-Betriebssysteme werden dabei als domU-Domains,
Host-Betriebssysteme hingegen als dom0 bezeichnet. Um eine
virtuelle FreeBSD-Instanz unter Linux auszuführen,
müssen Sie zuerst &xen;
für Linux dom0 installieren. Als Host-Betriebssystem
wird im folgenden Beispiel die Distribution Slackware
verwendet.&xen; 3 unter Linux dom0&xen; 3.0 von XenSource herunterladenLaden Sie die Datei xen-3.0.4_1-src.tgz
von
herunter.Den Tarball entpacken&prompt.root; cd xen-3.0.4_1-src
&prompt.root; KERNELS="linux-2.6-xen0 linux-2.6-xenU" make world
&prompt.root; make installDen dom0-Kernel neu kompilieren:&prompt.root; cd xen-3.0.4_1-src/linux-2.6.16.33-xen0
&prompt.root; make menuconfig
&prompt.root; make
&prompt.root; make installÄltere Versionen von
&xen; müssen
gegebenenfalls mit
make ARCH=xen menuconfig näher
spezifiziert werden.Einen Menü-Eintrag in die menu.lst von Grub
aufnehmenEditieren Sie /boot/grub/menu.lst
und fügen Sie die folgenden Zeilen hinzu:title Xen-3.0.4
root (hd0,0)
kernel /boot/xen-3.0.4-1.gz dom0_mem=262144
module /boot/vmlinuz-2.6.16.33-xen0 root=/dev/hda1 roStarten Sie Ihren Computer neu, um &xen; zu
aktivierenAnschließend editieren Sie
/etc/xen/xend-config.sxp und
fügen die folgenden Zeilen hinzu:(network-script 'network-bridge netdev=eth0')Danach kann &xen;
gestartet werden:&prompt.root; /etc/init.d/xend start
&prompt.root; /etc/init.d/xendomains startDamit ist dom0 gestartet:&prompt.root; xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 256 1 r----- 54452.9FreeBSD 7-CURRENT als domU verwendenLaden Sie den FreeBSD-dumU-Kernel für
&xen; 3.0 sowie
das Festplattenabbild von http://www.fsmware.com/
herunter:kernel-currentmdroot-7.0.bz2xmexample1.bsdKopieren Sie xmexample1.bsd
nach /etc/xen/ und passen Sie
die Einträge für Kernel und Festplattenabbild an
Ihre Konfiguration an. Ihre Konfiguration sollte
ähnlich dem folgenden Beispiel aussehen:kernel = "/opt/kernel-current"
memory = 256
name = "freebsd"
vif = [ '' ]
disk = [ 'file:/opt/mdroot-7.0,hda1,w' ]
#on_crash = 'preserve'
extra = "boot_verbose"
extra += ",boot_single"
extra += ",kern.hz=100"
extra += ",vfs.root.mountfrom=ufs:/dev/xbd769a"Die Datei mdroot-7.0.bz2 sollte
unkomprimiert sein.Als Nächstes muss der __xen_guest-Abschnitt in
kernel-current verändert und das
von &xen; 3.0.3 benötigte
VIRT_BASE hinzugefügt werden:&prompt.root; objcopy kernel-current -R __xen_guest
&prompt.root; perl -e 'print "LOADER=generic,GUEST_OS=freebsd,GUEST_VER=7.0,XEN_VER=xen-3.0,BSD_SYMTAB,VIRT_BASE=0xC0000000\x00"' > tmp
&prompt.root; objcopy kernel-current --add-section __xen_guest=tmp&prompt.root; objdump -j __xen_guest -s kernel-current
kernel-current: file format elf32-i386
Contents of section __xen_guest:
0000 4c4f4144 45523d67 656e6572 69632c47 LOADER=generic,G
0010 55455354 5f4f533d 66726565 6273642c UEST_OS=freebsd,
0020 47554553 545f5645 523d372e 302c5845 GUEST_VER=7.0,XE
0030 4e5f5645 523d7865 6e2d332e 302c4253 N_VER=xen-3.0,BS
0040 445f5359 4d544142 2c564952 545f4241 D_SYMTAB,VIRT_BA
0050 53453d30 78433030 30303030 3000 SE=0xC0000000. Nun kann die domU erstellt und gestartet werden:&prompt.root; xm create /etc/xen/xmexample1.bsd -c
Using config file "/etc/xen/xmexample1.bsd".
Started domain freebsd
WARNING: loader(8) metadata is missing!
Copyright (c) 1992-2006 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 7.0-CURRENT #113: Wed Jan 4 06:25:43 UTC 2006
kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF
WARNING: DIAGNOSTIC option enabled, expect reduced performance.
Xen reported: 1796.927 MHz processor.
Timecounter "ixen" frequency 1796927000 Hz quality 0
CPU: Intel(R) Pentium(R) 4 CPU 1.80GHz (1796.93-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf29 Stepping = 9
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=0x4400<CNTX-ID,<b14>>
real memory = 265244672 (252 MB)
avail memory = 255963136 (244 MB)
xc0: <Xen Console> on motherboard
cpu0 on motherboard
Timecounters tick every 10.000 msec
[XEN] Initialising virtual ethernet driver.
xn0: Ethernet address: 00:16:3e:6b:de:3a
[XEN]
Trying to mount root from ufs:/dev/xbd769a
WARNING: / was not properly dismounted
Loading configuration files.
No suitable dump device was found.
Entropy harvesting: interrupts ethernet point_to_point kickstart.
Starting file system checks:
/dev/xbd769a: 18859 files, 140370 used, 113473 free (10769 frags, 12838 blocks, 4.2% fragmentation)
Setting hostname: demo.freebsd.org.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
Additional routing options:.
Mounting NFS file systems:.
Starting syslogd.
/etc/rc: WARNING: Dump device does not exist. Savecore not run.
ELF ldconfig path: /lib /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 usbd.
usb: Kernel module not available: No such file or directory
Starting local daemons:.
Updating motd.
Starting sshd.
Initial i386 initialization:.
Additional ABI support: linux.
Starting cron.
Local package initialization:.
Additional TCP options:.
Starting background file system checks in 60 seconds.
Sun Apr 1 02:11:43 UTC 2007
FreeBSD/i386 (demo.freebsd.org) (xc0)
login: Die domU sollte nun den
&os; 7.0-CURRENT-Kernel ausführen:&prompt.root; uname -a
FreeBSD demo.freebsd.org 7.0-CURRENT FreeBSD 7.0-CURRENT #113: Wed Jan 4 06:25:43 UTC 2006
kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF i386Das Netzwerk kann nun unter der domU konfiguriert werden.
Die &os;-domU wird ein spezielles Gerät namens
xn0 verwenden:&prompt.root; ifconfig xn0 10.10.10.200 netmask 255.0.0.0
&prompt.root; ifconfig
xn0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
inet 10.10.10.200 netmask 0xff000000 broadcast 10.255.255.255
ether 00:16:3e:6b:de:3a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000 Unter der Slackware-dom0 sollten einige
&xen;-spezifische
Netzwerkgeräte erscheinen:&prompt.root; ifconfig
eth0 Link encap:Ethernet HWaddr 00:07:E9:A0:02:C2
inet addr:10.10.10.130 Bcast:0.0.0.0 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:815 errors:0 dropped:0 overruns:0 frame:0
TX packets:1400 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:204857 (200.0 KiB) TX bytes:129915 (126.8 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:99 errors:0 dropped:0 overruns:0 frame:0
TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9744 (9.5 KiB) TX bytes:9744 (9.5 KiB)
peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:1853349 errors:0 dropped:0 overruns:0 frame:0
TX packets:952923 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2432115831 (2.2 GiB) TX bytes:86528526 (82.5 MiB)
Base address:0xc000 Memory:ef020000-ef040000
vif0.1 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:1400 errors:0 dropped:0 overruns:0 frame:0
TX packets:815 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:129915 (126.8 KiB) TX bytes:204857 (200.0 KiB)
vif1.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:157 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:140 (140.0 b) TX bytes:158 (158.0 b)
xenbr1 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:112 (112.0 b) TX bytes:0 (0.0 b)&prompt.root; brctl show
bridge name bridge id STP enabled interfaces
xenbr1 8000.feffffffffff no vif0.1
peth0
vif1.0JohannKoisÜbersetzt von Virtual PC unter &windows;Virtual PC für &windows; wird
von µsoft; kostenlos zum Download angeboten. Die
Systemanforderungen für dieses Programm finden Sie
hier. Nachdem Sie Virtual PC
unter µsoft.windows; installiert haben, müssen Sie eine
virtuelle Maschine konfigurieren und das gewünschte
Betriebssystem installieren.FreeBSD in Virtual PC/µsoft.windows; installierenDer erste Schritt zur Installation von FreeBSD in
µsoft.windows;/Virtual PC ist
es, eine neue virtuelle Maschine zu erstellen, in die Sie
FreeBSD installieren können. Dazu wählen Sie die
Option Create a virtual machine,
wenn Sie danach gefragt werden:Bei der Frage nach dem
Operating system wählen Sie
Other:Danach müssen Sie den von Ihnen gewüschten
Plattenplatz sowie die Größe des Hauptspeichers
angeben. 4 GB Plattenplatz sowie 512 MB RAM sollten
für die Installation von FreeBSD in
Virtual PC ausreichend sein:Speichern Sie Ihre Eingaben und beenden Sie die
Konfiguration:Wählen Sie nun die für FreeBSD erstellte
virtuelle Maschine aus und klicken Sie auf
Settings, um das Netzwerk zu
konfigurieren:Nun können Sie FreeBSD installieren. Dazu
verwenden Sie am besten eine offizielle FreeBSD-CD-ROM
oder ein ISO-Image, das Sie von einem offiziellen
FreeBSD-FTP-Server heruntergeladen haben. Wenn Sie ein
ISO-Image auf Ihrer Festplatte gespeichert haben, oder
eine FreeBSD-CD-ROM in Ihr CD-Laufwerk eingelegt haben,
doppelklicken Sie auf die virtuelle Maschine, die Sie
für FreeBSD angelegt haben. Danach klicken Sie
auf CD und wählen die Option
Capture ISO Image... im
Virtual PC-Fenster. Danach
können Sie im folgenden Fenster das CD-Laufwerk
mit Ihrem physikalischen CD-Laufwerk oder mit dem
ISO-Image verknüpfen.Danach starten Sie die virtuelle Maschine neu, indem
Sie zuerst auf Action und danach auf
Reset klicken.
Virtual PC startet Ihre
virtuelle Maschine nun neu und prüft zuerst, ob
die virtuelle Maschine über ein CD-Laufwerk
verfügt.Da dies hier der Fall ist, beginnt nun eine normale,
auf sysinstall basierende
Installation, die in beschrieben
wird. Sie können FreeBSD nun installieren.
Verzichten Sie an dieser Stelle aber unbedingt auf die
X11-Konfiguration.Nachdem die Installation abgeschlossen ist, entfernen
Sie die CD-ROM aus dem Laufwerk (oder lösen die
Verknüpfung zum ISO-Image). Danach starten Sie die
virtuelle Maschine neu, um FreeBSD zu starten.FreeBSD in µsoft.windows;/Virtual PC konfigurierenNachdem Sie FreeBSD auf Ihrem µsoft.windows;-System
erfolgreich unter Virtual PC
installiert haben, sollten Sie ihr virtuelles FreeBSD noch
anpassen, um eine optimale Funktion zu
gewährleisten.Setzen der Bootloader-VariablenDie wichtigste Änderung ist es, die Variable
zu verkleinern, um so die
CPU-Auslastung in der
Virtual PC-Umgebung zu
verringern. Dazu fügen Sie die folgende Zeile
in die Datei /boot/loader.conf
ein:kern.hz=100Ohne diese Einstellung kann ein unbeschäftigtes
FreeBSD unter Virutal PC
trotzdem rund 40 Prozent der CPU-Leistung eines
Ein-Prozessor-Systems verbrauchen. Nach dieser
Änderung reduziert sich dieser Wert auf etwa
5 Prozent.Erstellen einer neuen KernelkonfigurationsdateiSie können alle SCSI-, FireWire- und
USB-Laufwerks-Treiber entfernen.
Virtual PC stellt einen
virtuellen Netzwerkadapter bereit, der den
&man.de.4;-Treiber verwendet. Daher können alle
Netzwerkgeräte bis auf &man.de.4; und
&man.miibus.4; aus dem Kernel entfernt werden.Das Netzwerk einrichtenDie einfachste Netzwerkkonfiguration ist der Einsatz
von DHCP, um Ihre virtuelle Maschine mit dem gleichen
lokalen Netzwerk, in dem sich Ihr
Host-µsoft.windows; befindet, zu verbinden. Dazu
fügen Sie die Zeile
ifconfig_de0="DHCP" in die Datei
/etc/rc.conf ein. Weitere
Informationen zur Konfiguration des Netzwerks unter
FreeBSD finden Sie im des Handbuchs.JohannKoisÜbersetzt von
- VMWare unter MacOS
+ VMware unter MacOS
- VMWare Fusion für &mac;
+ VMware Fusion für &mac;
ist ein kommerzielles Programm, das für
&intel; basierte &apple; &mac;-Computer mit
&macos; 10.4.9 oder neuer erhältlich ist. FreeBSD wird
von diesem Produkt vollständig als Gast-Betriebssystem
unterstützt. Nachdem Sie
- VMWare Fusion unter &macos; X
+ VMware Fusion unter &macos; X
installiert haben, können Sie das gewünschte
Gastbetriebssystem (in unserem Fall FreeBSD) installieren.
- FreeBSD in VMWare/&macos; X installieren
+ FreeBSD in VMware/&macos; X installieren
- Zuerst müssen Sie VMWare Fusion starten, um eine
+ Zuerst müssen Sie VMware Fusion starten, um eine
virtuelle Maschine zu erstellen. Dazu wählen Sie die
Option "New":Dadurch wird ein Assistent gestartet, der Ihnen bei der
Erzeugung einer neuen virtuellen Maschine behilflich ist.
Clicken Sie auf "Continue", um den Prozess zu starten:Wählen Sie Other als das
Operating System, danach
FreeBSD oder
FreeBSD 64-bit, je nach dem,
welche Version Sie installieren wollen, wenn Sie nach
der zu installierenden Version
gefragt werden:Vergeben Sie einen Namen für virtuelle Maschine an
und legen Sie den Speicherort fest:Legen Sie die Größe Ihrer virtuellen Festplatte
fest:Nachdem Sie auf "Finish" geklickt haben, wird die virtuelle
Maschine gestartet:Nun können Sie &os; wie gewohnt installieren (lesen Sie
dazu auch des Handbuchs):Nachdem die Installation abgeschlossen ist, können Sie
noch verschiedene Parameter der virtuellen Maschine, etwa den
Speicherverbrauch, konfigurieren:Die Hardware der virtuellen Maschine kann nicht
geändert werden, solange die virtuelle Maschine
läuft.Die Anzahl der CPUs der virtuellen Maschine:Den Status des CD-Laufwerks. Sie können das
CD-Laufwerk von der virtuellen Maschine lösen, wenn
Sie es nicht benötigen.Zuletzt sollten Sie noch festlegen, wie sich die
virtuelle Maschine mit dem Netzwerk verbinden soll. Sollen
neben dem Gastsystem auch andere Rechner auf Ihre virtuelle
Maschine zugreifen können, müssen Sie die Option
Connect directly to the physical network
(Bridged) wählen. Ist dies nicht der
Fall, sollten Sie die Option Share the
host's internet connection (NAT) wählen.
In dieser Einstellung kann die virtuelle Maschine zwar auf
auf das Internet zugreifen, andere Rechner dürfen
aber nicht auf die virtuelle Maschine zugreifen.Nachdem Sie die Konfiguration abgeschlossen haben,
können Sie FreeBSD starten.
- FreeBSD unter &macos; X/VMWare konfigurieren
+ FreeBSD unter &macos; X/VMware konfigurierenNachdem Sie FreeeBSD erfolgreich unter
- VMWare für &macos; X
+ VMware für &macos; X
installiert haben, sollten Sie ihr virtuelles FreeBSD noch
anpassen, um eine optimale Funktion zu gewährleisten.Die wichtigste Änderung ist es, die Variable
zu verkleinern, um so die
CPU-Auslastung in der
- VMWare-Umgebung zu
+ VMware-Umgebung zu
verringern.kern.hz=100Ohne diese Einstellung kann ein unbeschäftigtes
- FreeBSD unter VMWare trotzdem
+ FreeBSD unter VMware trotzdem
rund 15 Prozent der CPU-Leistung eines Single Prozessor
&imac;'s verbrauchen. Nach dieser Änderung reduziert
sich dieser Wert auf etwa 5 Prozent.Erstellen einer neuen KernelkonfigurationsdateiSie können alle FireWire- und
USB-Laufwerks-Treiber entfernen.
- VMWare stellt einen
+ VMware stellt einen
virtuellen Netzwerkadapter bereit, der den
&man.em.4;-Treiber verwendet. Daher können alle
Netzwerkgeräte bis auf &man.em.4; und
&man.miibus.4; aus dem Kernel entfernt werden.Netzwerkbetrieb einrichtenDie einfachste Netzwerkkonfiguration ist der Einsatz
von DHCP, um Ihre virtuelle Maschine mit dem gleichen
lokalen Netzwerk, in dem sich der Host-&mac; befindet, zu
verbinden. Dazu fügen Sie die Zeile
ifconfig_em0="DHCP" in die Datei
/etc/rc.conf ein. Weitere
Informationen zur Konfiguration des Netzwerks unter
FreeBSD finden Sie im des Handbuchs.BenedictReuschlingÜbersetzt von ChristophSoldFreeBSD als Host-BetriebssystemSeit einigen Jahren wurde &os; nicht offiziell von irgendeiner der
verfügbaren Virtualisierungslösungen als Host-Betriebssystem
unterstützt. Viele Anwender verwenden aber noch
ältere VMware-Versionen (z.B. emulators/vmware3), welches die
&linux;-Kompatibilitätsschicht nutzt. Kurz nach der
Veröffentlichung von &os; 7.2 erschien
&virtualbox; als Open-Source Edition
(OSE) von &sun; in der Ports-Sammlung als ein direkt
auf &os; lauffähiges Programm.&virtualbox; ist ein vollständiges
Virtualisierungspaket, das aktiv weiterentwickelt wird und für die
meisten Betriebssysteme einschliesslich &windows;, &macos;, &linux; und
&os; zur Verfügung steht. Es kann sowohl &windows; als auch
&unix;-ähnliche Gastsysteme betreiben. Es ist als Open Source und
als proprietäre Edition erhältlich. Die wichtigste
Einschränkung der OSE aus Anwendersicht ist
die fehlende USB-Unterstützung. Weitere Unterschiede können
von der Editions-Seite des
&virtualbox;-Wikis, das unter zu finden ist,
entnommen werden. Momentan steht nur OSE unter &os; zur
Verfügung.&virtualbox; installieren&virtualbox; steht als &os;-Port in
emulators/virtualbox bereit und
kann über den folgenden Befehl installiert werden:&prompt.root; cd /usr/ports/emulators/virtualbox
&prompt.root; make install cleanEine nützliche Option im Konfigurationsdialog ist die
GuestAdditions-Programmsammlung. Diese stellen
eine Reihe von nützlichen Eigenschaften in den
Gastbetriebssystemen zur Verfügung, wie beispielsweise
Mauszeigerintegration (was es ermöglicht, die Maus zwischen
dem Host und dem Gast zu teilen ohne eine spezielle Tastenkombination
für diesen Wechsel zu drücken), sowie schnelleres Rendern
von Videos, besonders in &windows; Gästen. Diese Gastzusätze
sind im Devices-Menü zu finden, nachdem die
Installation des Gastbetriebssystem abgeschlossen ist.Ein paar Konfigurationsänderungen sind notwendig, bevor
&virtualbox; das erste Mal gestartet wird.
Der Port installiert ein Kernelmodul in /boot/modules, das in den laufenden
Kernel geladen werden muss:&prompt.root; kldload vboxdrvUm sicherzustellen, dass das Modul immer nach einem Neustart
geladen wird, fügen Sie die folgende Zeile in die Datei
/boot/loader.conf ein:vboxdrv_load="YES"&virtualbox; benötigt auch das
eingehängte proc-Dateisystem:&prompt.root; mount -t procfs proc /procUm auch diese Einstellung nach einem Neustart zu erhalten, wird die
folgende Zeile in /etc/fstab
eingefügt:proc /proc procfs rw 0 0Möglicherweise erscheint eine Fehlermeldung ähnlich der
Folgenden, wenn &virtualbox; von einem
Terminal aus gestartet wird:VirtualBox: supR3HardenedExecDir: couldn't read "", errno=2 cchLink=-1Wahrscheinlich ist der Übeltäter das proc-Dateisystem. Verwenden Sie bitte
das mount-Kommando um zu überprüfen, ob
es korrekt eingehängt ist.Die Gruppe vboxusers wird während der
Installation von &virtualbox; angelegt.
Alle Benutzer, die Zugriff auf &virtualbox;
haben sollen, müssen in diese Gruppe aufgenommen werden. Der
pw-Befehl kann benutzt werden, um neue Mitglieder
hinzuzufügen:&prompt.root; pw groupmod vboxusers -m yourusernameUm &virtualbox; zu starten, wählen
Sie entweder den Eintrag Sun VirtualBox aus
dem Menü Ihrer graphischen Benutzeroberfläche, oder geben
Sie den folgenden Befehl in ein Terminal ein:&prompt.user; VirtualBoxBesuchen Sie die offizielle Webseite von
&virtualbox; unter , um weitere Informationen zur
Konfiguration und Verwendung zu erhalten. Da der &os;-Port noch recht
neu ist, befindet er sich noch unter ständiger Entwicklung. Um
die aktuellen Nachrichten und Anleitungen zur Fehlerbehebung zu
erhalten, besuchen Sie die entsprechende Seite im &os;-Wiki unter
.Andere VirtualisierungsmöglichkeitenZusätzlich wird
daran gearbeitet, &xen; als
funktionierende Host-Umgebung (dom0) für &os;
verfügbar zu machen.