Falls erfolgreich, gibt
open() einen nicht negativen Integerwert,
als Dateideskriptor bezeichnet, zurück. Es gibt
-1 im Fehlerfall zurück und setzt
errno um den Fehler
anzuzeigen.
Ein Assembler-Programmierer, der neu bei &unix; und
FreeBSD ist, wird sich sofort fragen: Wo finde ich
errno und wie erreiche ich es?Die Information der Manualpage bezieht sich auf
C-Programme. Der Assembler-Programmierer benötigt
zusätzliche Informationen.Wo sind die Rückgabewerdet?Leider gilt: Es kommt darauf an... Für die meisten
Systemaufrufe liegt er in EAX, aber nicht für alle. Eine
gute Daumenregel, wenn man zum ersten Mal mit einem
Systemaufruf arbeitet, ist in EAX nach dem Rückgabewert zu
suchen. Wenn er nicht dort ist, sind weitere Untersuchungen
nötig.Mir ist ein Systemaufruf bekannt, der den
Rückgabewert in EDX
ablegt: SYS_fork Alle
anderen mit denen ich bisher gearbeitet habe verwenden
EAX. Alelrdings habe ich
noch nicht mit allen gearbeitet.Wenn Sie die Antwort weder hier, noch irgendwo anders
finden, studieren Sie den Qualltext von
libc und sehen sich an, wie es mit
dem Kernel zusammenarbeitet.Wo ist errno?Tatsächlich, nirgendwo...errno ist ein Teil der Sprache C, nicht
des &unix;-Kernels. Wenn man direkt auf Kernel-Dienste
zugreift, wird der Fehlercode in EAX zurückgegeben, das selbe
Register in dem der Rückgabewert, bei einem erfolgreichen
Aufruf landet.Das macht auch Sinn. Wenn kein Fehler auftritt, gibt es
keinen Fehlercode. Wenn ein Fehler auftritt, gibt es keinen
Rückgabewert. Ein einziges Register kann also beides
enthalten.Feststellen, dass ein Fehler aufgetreten istWenn Sie die Standard FreeBSD-Aufrufkonvention verwenden
wird das carry flag
gelöscht wenn der Aufruf erfolgreich ist und gesetzt wenn
ein Fehler auftritt.Wenn Sie den Linux-Emulationsmodus verwenden ist der
vorzeichenbehaftete Wert in EAX nicht negativ, bei einem
erfolgreichen Aufruf. Wenn ein Fehler auftritt ist der Wert
negativ, also -errno.HagenKühlÜbersetzt von Portablen Code erzeugenPortabilität ist im Allgemeinen keine Stärke der
Assembler-Programmierung. Dennoch ist es, besonders mit
nasm, möglich
Assembler-Programme für verschiedene Plattformen zu
schreiben. Ich selbst habe bereits Assembler-Bibliotheken
geschriebenm die auf so unterschiedlichen Systemen wie &windows;
und FreeBSD übersetzt werden können.Das ist um so besser möglich, wenn Ihr Code auf zwei
Plattformen laufen soll , die, obwohl sie verschieden sind, auf
ähnlichen Architekturen basieren.Beispielsweise ist FreeBSD ein &unix;, während Linux
&unix;-artig ist. Ich habe bisher nur drei Unterschiede zwischen
beiden (aus Sicht eines Assembler-Programmierers) erwähnt:
Die Aufruf-Konvention, die Funktionsnummern und die Art der
Übergabe von Rückgabewerten.Mit Funktionsnummern umgehenIn vielen Fällen sind die Funktionsnummern die
selben. Allerdings kann man auch wenn sie es nicht sind
leicht mit diesem Problem umgehen: Anstatt die Nummern in
Ihrem Code zu verwenden, benutzen Sie Konstanten, die Sie
abhängig von der Zielarchitektur unterschiedlich
definieren:%ifdef LINUX
%define SYS_execve 11
%else
%define SYS_execve 59
%endifUmgang mit KonventionenSowohl die Aufrufkonventiion, als auch die
Rückgabewerte (das errno Problem) kann
man mit Hilfe von Makros lösen:%ifdef LINUX
%macro system 0
call kernel
%endmacro
align 4
kernel:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx, [esp+32]
mov ecx, [esp+36]
mov edx, [esp+40]
mov esi, [esp+44]
mov ebp, [esp+48]
int 80h
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
or eax, eax
js .errno
clc
ret
.errno:
neg eax
stc
ret
%else
%macro system 0
int 80h
%endmacro
%endifUmgang mit anderen
PortabilitätsangelegeneheitenDie oben genannte Lösung funktioniert in den meisten
Fällen, wenn man Code schreibt, der zwischen FreeBSD und
Linux portierbar sein soll. Allerdings sind die Unterschiede
bei einigen Kernel-Diensten tiefgreifender.In diesem Fällen müssen Sie zwei verschiedene
Handler für diese Systemaufrufe schreiben und bedingte
Assemblierung benutzen, um diese zu übersetzen.
Glücklicherweise wird der größte Teil Ihres
Codes nicht den Kernel aufrufen und Sie werden deshalb nur
wenige solcher bedingten Abschnitte benötigen.Eine Bibliothek benutzenSie können Portabilitätsprobleme im Hauptteil
ihres Codes komplett vermeiden, indem Sie eine Bibliothek
für Systemaufrufe schreiben. Erstellen Sie eine
Bibliothek für FreeBSD, eine für Linux und weitere
für andere Betriebssysteme.Schreiben Sie in ihrer Bibliothek eine gesonderte Funktion
(oder Prozedur, falls Sie die traditionelle
Assembler-Terminologie bevorzugen) für jeden
Systemaufruf. Verwenden Sie dabei die C-Aufrufkonvention um
Parameter zu übergeben, aber verwenden Sie weiterhin
EAX, für die
Aufrufnummer. In diesem Fall kann ihre FreeBSD-Bibliothek sehr
einfach sein, da viele scheinbar unterschiedliche Funktionen
als Label für den selben Code implementiert sein
können:sys.open:
sys.close:
[etc...]
int 80h
retIhre Linux-Bibliothek wird mehr verschiedene Funktionen
benötigen, aber auch hier können Sie Systemaufrufe,
welche die Anzahl an Parametern akzeptieren
zusammenfassen:sys.exit:
sys.close:
[etc... one-parameter functions]
push ebx
mov ebx, [esp+12]
int 80h
pop ebx
jmp sys.return
...
sys.return:
or eax, eax
js sys.err
clc
ret
sys.err:
neg eax
stc
retDer Bibliotheks-Ansatz mag auf den ersten Blick unbequem
aussehen, weil Sie eine weitere Datei erzeugen müssen von
der Ihr Code abhängt. Aber er hat viele Vorteile: Zum
einen müssen Sie die Bibliothek nur einmal schreiben und
können sie dann in allen Ihren Programmen verwenden. Sie
können sie sogar von anderen Assembler-Programmierern
verwenden lassen, oder eine die von jemand anderem geschrieben
wurde verwenden. Aber der vielleicht größte Vorteil
ist, dass Ihr Code sogar von anderen Programmierer auf andere
Systeme portiert werden kann, einfach indem man eine neue
Bibliothek schreibt, völlig ohne Änderungen an Ihrem
Code.Falls Ihnen der Gedanke eine Bibliothek zu nutzen nicht
gefällt, können Sie zumindest all ihre Systemaufrufe
in einer gesonderten Assembler-Datei ablegen und diese mit
Ihrem Hauptprogramm zusammen binden. Auch hier müssen
alle, die ihr Programm portieren, nur eine neue Objekt-Datei
erzeugen und an Ihr Hauptprogramm binden.Eine Include-Datei verwendenWenn Sie ihre Software als (oder mit dem) Quelltext
ausliefern, können Sie Makros definieren und in einer
getrennten Datei ablegen, die Sie ihrem Code beilegen.Porter Ihrer Software schreiben dann einfach eine neue
Include-Datei. Es ist keine Bibliothek oder eine externe
Objekt-Datei nötig und Ihr Code ist portabel, ohne dass
man ihn editieren muss.Das ist der Ansatz den wir in diesem Kapitel verwenden
werden. Wir werden unsere Include-Datei
system.inc nennen und jedesmal, wenn
wir einen neuen Systemaufruf verwenden, den entsprechenden
Code dort einfügen.Wir können unsere system.inc
beginnen indem wir die Standard-Dateideskriptoren
deklarieren:%define stdin 0
%define stdout 1
%define stderr 2Als Nächstes erzeugen wir einen symbolischen Namen
für jeden Systemaufruf:%define SYS_nosys 0
%define SYS_exit 1
%define SYS_fork 2
%define SYS_read 3
%define SYS_write 4
; [etc...]Wir fügen eine kleine, nicht globale Prozedur mit
langem Namen ein, damit wir den Namen nicht aus Versehen in
unserem Code wiederverwenden:section .text
align 4
access.the.bsd.kernel:
int 80h
retWir erzeugen ein Makro, das ein Argument erwartet, die
Systemaufruf-Nummer:%macro system 1
mov eax, %1
call access.the.bsd.kernel
%endmacroLetztlich erzeugen wir Makros für jeden Systemaufruf.
Diese Argumente erwarten keine Argumente.%macro sys.exit 0
system SYS_exit
%endmacro
%macro sys.fork 0
system SYS_fork
%endmacro
%macro sys.read 0
system SYS_read
%endmacro
%macro sys.write 0
system SYS_write
%endmacro
; [etc...]Fahren Sie fort, geben das in Ihren Editor ein und
speichern es als system.inc. Wenn wir
Systemaufrufe besprechen, werden wir noch Ergänzungen in
dieser Datei vornehmen.HagenKühlÜbersetzt von Unser erstes ProgrammJetzt sind wir bereit für unser erstes Programm, das
übliche Hello, World! 1: %include 'system.inc'
2:
3: section .data
4: hello db 'Hello, World!', 0Ah
5: hbytes equ $-hello
6:
7: section .text
8: global _start
9: _start:
10: push dword hbytes
11: push dword hello
12: push dword stdout
13: sys.write
14:
15: push dword 0
16: sys.exitHier folgt die Erklärung des Programms: Zeile 1
fügt die Definitionen ein, die Makros und den Code aus
system.inc.Die Zeilen 3 bis 5 enthalten die Daten: Zeile 3 beginnt den
Datenabschnitt/das Datensegment. Zeile 4 enthält die
Zeichenkette "Hello, World!", gefolgt von einem Zeilenumbruch
(0Ah). Zeile 5 erstellt eine Konstante, die
die Länge der Zeichenkette aus Zeile 4 in Bytes
enthält.Die Zeilen 7 bis 16 enthälten den Code. Beachten Sie
bitte, dass FreeBSD das Dateiformat elf
für diese ausführbare Datei verwendet, bei dem jedes
Programm mit dem Label _start beginnt (oder,
um genau zu sein, wird dies vom Linker erwartet). Diese Label
muss global sein.Die Zeilen 10 bis 13 weisen das System an
hbytes Bytes der Zeichenkette
hello nach stdout zu
schreiben.Die Zeilen 15 und 16 weisen das System an das Programm mit
dem Rückgabewert 0 zu beenden. Der
Systemaufruf SYS_exit kehrt
niemals zurück, somit endet das Programm hier.Wenn Sie von &ms-dos;-Assembler zu
&unix; gekommen sind, sind Sie es vielleicht gewohnt direktauf
die Video-Hardware zu schreiben. Unter FreeBSD müssen Sie
sich darum keine Gedanken machen, ebenso bei jeder anderen Art
von &unix;. Soweit es Sie betrifft schreiben Sie in eine Datei
namens stdout. Das kann der Bildschirm,
oder ein telnet-Terminal, eine
wirkliche Datei, oder die Eingabe eines anderen Programms
sein. Es liegt beim System herauszufinden, welches davon es
tatsächlich ist.Den Code assemblierenGeben Sie den Code (außer den Zeilennummern) in
einen Editor ein und speichern Sie ihn in einer Datei namens
hello.asm. Um es zu assemblieren
benötigen Sie nasm.nasm installierenWemm Sie nasm nocht nicht
installiert haben geben Sie folgendes ein:&prompt.user; su
Password:your root password
&prompt.root; cd /usr/ports/devel/nasm
&prompt.root; make install
&prompt.root; exit
&prompt.user;Sie können auch make install
clean anstatt make
install eingeben, wenn Sie den Quelltext von
nasm nicht behalten
möchten.Auf jeden Fall wird FreeBSD
nasm automatisch aus dem Internet
herunterladen, es kompilieren und auf Ihrem System
installieren.Wenn es sich bei Ihrem System nicht um FreeBSD
handelt, müssen Sie nasm
von dessen Homepage
herunterladen. Sie können es aber dannoch verwenden
um FreeBSD code zu assemblieren.Nun können Sie den Code assemblieren, binden und
ausführen:&prompt.user; nasm -f elf hello.asm
&prompt.user; ld -s -o hello hello.o
&prompt.user; ./hello
Hello, World!
&prompt.user;HagenKühlÜbersetzt von &unix;-Filter schreibenEin häufiger Typ von &unix;-Anwendungen ist ein Filter
— ein Programm, das Eingaben von
stdin liest, sie verarbeitet und das
Ergebnis nach stdout schreibt.In diesem Kapitel möchten wir einen einfachen Filter
entwickeln und lernen, wie wir von stdin
lesen und nach stdout schreiben. Dieser
Filter soll jedes Byte seiner Eingabe in eine hexadezimale Zahl
gefolgt von einem Leerzeichen umwandeln.%include 'system.inc'
section .data
hex db '0123456789ABCDEF'
buffer db 0, 0, ' '
section .text
global _start
_start:
; read a byte from stdin
push dword 1
push dword buffer
push dword stdin
sys.read
add esp, byte 12
or eax, eax
je .done
; convert it to hex
movzx eax, byte [buffer]
mov edx, eax
shr dl, 4
mov dl, [hex+edx]
mov [buffer], dl
and al, 0Fh
mov al, [hex+eax]
mov [buffer+1], al
; print it
push dword 3
push dword buffer
push dword stdout
sys.write
add esp, byte 12
jmp short _start
.done:
push dword 0
sys.exitIm Datenabschnitt erzeugen wir ein Array mit Namen
hex. Es enthält die 16 hexadezimalen
Ziffern in aufsteigender Reihenfolge. Diesem Array folgt ein
Puffer, den wir sowohl für die Ein- als auch für die
Ausgabe verwenden. Die ersten beiden Bytes dieses Puffers werden
am Anfang auf 0 gesetzt. Dorthin schreiben
wir die beiden hexadezimalen Ziffern (das erste Byte ist auch
die Stelle an die wir die Eingabe lesen). Das dritte Byte ist
ein Leerzeichen.Der Code-Abschnitt besteht aus vier Teilen: Das Byte lesen,
es in eine hexadezimale Zahl umwandeln, das Ergebnis schreiben
und letztendlich das Programm verlassen.Um das Byte zu lesen, bitten wir das System ein Byte von
stdin zu lesen und speichern es im ersten
Byte von buffer. Das System gibt die Anzahl
an Bytes, die gelesen wurden, in EAX zurück. Diese wird
1 sein, wenn eine Eingabe empfangen wird
und 0, wenn keine Eingabedaten mehr
verfügbar sind. Deshalb überprüfen wir den Wert
von EAX. Wenn dieser
0 ist, springen wir zu
.done, ansonsten fahren wir fort.Zu Gunsten der Einfachheit ignorieren wir hier die
Möglichkeit eines Fehlers.Die Umwandlungsroutine in eine Hexadezimalzahl liest das
Byte aus buffer in EAX, oder genaugenommen nur in
AL, wobei die übrigen
Bits von EAX auf null gesetzt
werden. Außerdem kopieren wir das Byte nach EDX, da wir die oberen vier Bits
(Nibble) getrennt von den unteren vier Bits umwandeln
müssen. Das Ergebnis speichern wir in den ersten beiden
Bytes des Puffers.Als Nächstes bitten wir das System die drei Bytes in
den Puffer zu schreiben, also die zwei hexadezimalen Ziffern und
das Leerzeichen nach stdout. Danach
springen wir wieder an den Anfang des Programms und verarbeiten
das nächste Byte.Wenn die gesamte Eingabe verarbeitet ist, bitten wie das
System unser Programm zu beenden und null zurückzuliefern,
welches traditionell die Bedeutung hat, dass unser Programm
erfolgreich war.Fahren Sie fort und speichern Sie den Code in eine Datei
namens hex.asm. Geben Sie danach folgendes
ein (^D bedeutet, dass Sie die
Steuerungstaste drücken und dann D
eingeben, während Sie Steuerung gedrückt
halten):&prompt.user; nasm -f elf hex.asm
&prompt.user; ld -s -o hex hex.o
&prompt.user; ./hexHello, World!
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A Here I come!
48 65 72 65 20 49 20 63 6F 6D 65 21 0A ^D &prompt.user;Wenn Sie von &ms-dos; zu &unix;
wechseln, wundern Sie sich vielleicht, warum jede Zeile mit
0A an Stelle von 0D
0A endet. Das liegt daran, dass &unix; nicht die
CR/LF-Konvention, sondern die "new line"-Konvention verwendet,
welches hexadezimal als 0A dargestellt
wird.Können wir das Programm verbessern? Nun, einerseits ist
es etwas verwirrend, dass die Eingabe, nachdem wir eine Zeile
verarbeitet haben, nicht wieder am Anfang der Zeile beginnt.
Deshalb können wir unser Programm anpassen um einen
Zeilenumbruch an Stelle eines Leerzeichens nach jedem
0A auszugeben:%include 'system.inc'
section .data
hex db '0123456789ABCDEF'
buffer db 0, 0, ' '
section .text
global _start
_start:
mov cl, ' '
.loop:
; read a byte from stdin
push dword 1
push dword buffer
push dword stdin
sys.read
add esp, byte 12
or eax, eax
je .done
; convert it to hex
movzx eax, byte [buffer]
mov [buffer+2], cl
cmp al, 0Ah
jne .hex
mov [buffer+2], al
.hex:
mov edx, eax
shr dl, 4
mov dl, [hex+edx]
mov [buffer], dl
and al, 0Fh
mov al, [hex+eax]
mov [buffer+1], al
; print it
push dword 3
push dword buffer
push dword stdout
sys.write
add esp, byte 12
jmp short .loop
.done:
push dword 0
sys.exitWir haben das Leerzeichen im Register CL abgelegt. Das können wir
bedenkenlos tun, da &unix;-Systemaufrufe im Gegensatz zu denen
von µsoft.windows; keine Werte von Registern ändern in
denen sie keine Werte zurückliefern.Das bedeutet, dass wir CL
nur einmal setzen müssen. Dafür haben wir ein neues
Label .loop eingügt, zu dem wir an
Stelle von _start springen, um das
nächste Byte einzulesen. Außerdem haben wir das Label
.hex eingefügt, somit können wir
wahlweise ein Leerzeichen oder einen Zeilenumbruch im dritten
Byte von buffer ablegen.Nachdem Sie hex.asm entsprechend der
Neuerungen geändert haben, geben Sie Folgendes ein:&prompt.user; nasm -f elf hex.asm
&prompt.user; ld -s -o hex hex.o
&prompt.user; ./hexHello, World!
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A
Here I come!
48 65 72 65 20 49 20 63 6F 6D 65 21 0A
^D &prompt.user;Das sieht doch schon besser aus. Aber der Code ist ziemlich
ineffizient! Wir führen für jeden einzelne Byte
zweimal einen Systemaufruf aus (einen zum Lesen und einen um es
in die Ausgabe zu schreiben).HagenKühlÜbersetzt von Gepufferte Eingabe und AusgabeWir können die Effizienz unseres Codes erhöhen,
indem wir die Ein- und Ausgabe puffern. Wir erzeugen einen
Eingabepuffer und lesen dann eine Folge von Bytes auf einmal.
Danach holen wir sie Byte für Byte aus dem Puffer.Wir erzeugen ebenfalls einen Ausgabepuffer. Darin speichern
wir unsere Ausgabe bis er voll ist. Dann bitten wir den Kernel
den Inhalt des Puffers nach stdout zu
schreiben.Diese Programm endet, wenn es keine weitere Eingaben gibt.
Aber wir müssen den Kernel immernoch bitten den Inhalt des
Ausgabepuffers ein letztes Mal nach stdout
zu schreiben, denn sonst würde ein Teil der Ausgabe zwar im
Ausgabepuffer landen, aber niemals ausgegeben werden. Bitte
vergessen Sie das nicht, sonst fragen Sie sich später warum
ein Teil Ihrer Ausgabe verschwunden ist.%include 'system.inc'
%define BUFSIZE 2048
section .data
hex db '0123456789ABCDEF'
section .bss
ibuffer resb BUFSIZE
obuffer resb BUFSIZE
section .text
global _start
_start:
sub eax, eax
sub ebx, ebx
sub ecx, ecx
mov edi, obuffer
.loop:
; read a byte from stdin
call getchar
; convert it to hex
mov dl, al
shr al, 4
mov al, [hex+eax]
call putchar
mov al, dl
and al, 0Fh
mov al, [hex+eax]
call putchar
mov al, ' '
cmp dl, 0Ah
jne .put
mov al, dl
.put:
call putchar
jmp short .loop
align 4
getchar:
or ebx, ebx
jne .fetch
call read
.fetch:
lodsb
dec ebx
ret
read:
push dword BUFSIZE
mov esi, ibuffer
push esi
push dword stdin
sys.read
add esp, byte 12
mov ebx, eax
or eax, eax
je .done
sub eax, eax
ret
align 4
.done:
call write ; flush output buffer
push dword 0
sys.exit
align 4
putchar:
stosb
inc ecx
cmp ecx, BUFSIZE
je write
ret
align 4
write:
sub edi, ecx ; start of buffer
push ecx
push edi
push dword stdout
sys.write
add esp, byte 12
sub eax, eax
sub ecx, ecx ; buffer is empty now
retAls dritten Abschnitt im Quelltext haben wir
.bss. Dieser Abschnitt wird nicht in unsere
ausführbare Datei eingebunden und kann daher nicht
initialisiert werden. Wir verwenden resb anstelle von db. Dieses reserviert einfach die
angeforderte Menge an uninitialisiertem Speicher zu unserer
Verwendung.Wir nutzen, die Tatsache, dass das System die Register nicht
verändert: Wir benutzen Register, wo wir anderenfalls
globale Variablen im Abschnitt .data
verwenden müssten. Das ist auch der Grund, warum die
&unix;-Konvention, Parameter auf dem Stack zu übergeben,
der von Microsoft, hierfür Register zu verwenden,
überlegen ist: Wir können Register für unsere
eigenen Zwecke verwenden.Wir verwenden EDI und
ESI als Zeiger auf das
nächste zu lesende oder schreibende Byte. Wir verwenden
EBX und ECX, um die Anzahl der Bytes in den
beiden Puffern zu zählen, damit wir wissen, wann wir die
Ausgabe an das System übergeben, oder neue Eingabe vom
System entgegen nehmen müssen.Lassen Sie uns sehen, wie es funktioniert:&prompt.user; nasm -f elf hex.asm
&prompt.user; ld -s -o hex hex.o
&prompt.user; ./hexHello, World!Here I come!
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A
48 65 72 65 20 49 20 63 6F 6D 65 21 0A
^D &prompt.user;Nicht was Sie erwartet haben? Das Programm hat die Ausgabe
nicht auf dem Bildschirm ausgegeben bis sie
^D gedrückt haben. Das kann man
leicht zu beheben indem man drei Zeilen Code einfügt,
welche die Ausgabe jedesmal schreiben, wenn wir einen
Zeilenumbruch in 0A umgewandelt haben. Ich
habe die betreffenden Zeilen mit > markiert (kopieren Sie die
> bitte nicht mit in Ihre
hex.asm).%include 'system.inc'
%define BUFSIZE 2048
section .data
hex db '0123456789ABCDEF'
section .bss
ibuffer resb BUFSIZE
obuffer resb BUFSIZE
section .text
global _start
_start:
sub eax, eax
sub ebx, ebx
sub ecx, ecx
mov edi, obuffer
.loop:
; read a byte from stdin
call getchar
; convert it to hex
mov dl, al
shr al, 4
mov al, [hex+eax]
call putchar
mov al, dl
and al, 0Fh
mov al, [hex+eax]
call putchar
mov al, ' '
cmp dl, 0Ah
jne .put
mov al, dl
.put:
call putchar
> cmp al, 0Ah
> jne .loop
> call write
jmp short .loop
align 4
getchar:
or ebx, ebx
jne .fetch
call read
.fetch:
lodsb
dec ebx
ret
read:
push dword BUFSIZE
mov esi, ibuffer
push esi
push dword stdin
sys.read
add esp, byte 12
mov ebx, eax
or eax, eax
je .done
sub eax, eax
ret
align 4
.done:
call write ; flush output buffer
push dword 0
sys.exit
align 4
putchar:
stosb
inc ecx
cmp ecx, BUFSIZE
je write
ret
align 4
write:
sub edi, ecx ; start of buffer
push ecx
push edi
push dword stdout
sys.write
add esp, byte 12
sub eax, eax
sub ecx, ecx ; buffer is empty now
retLassen Sie uns jetzt einen Blick darauf werfen, wie es
funktioniert.&prompt.user; nasm -f elf hex.asm
&prompt.user; ld -s -o hex hex.o
&prompt.user; ./hexHello, World!
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A
Here I come!
48 65 72 65 20 49 20 63 6F 6D 65 21 0A
^D &prompt.user;Nicht schlecht für eine 644 Byte große
Binärdatei, oder?Dieser Ansatz für gepufferte Ein- und Ausgabe
enthält eine Gefahr, auf die ich im Abschnitt Die dunkle Seite des
Buffering eingehen werde.Ein Zeichen ungelesen machenDas ist vielleicht ein etwas fortgeschrittenes Thema,
das vor allem für Programmierer interessant ist, die
mit der Theorie von Compilern vertraut sind. Wenn Sie
wollen, können Sie zum
nächsten Abschnitt springen und das hier
vielleicht später lesen.Unser Beispielprogramm benötigt es zwar nicht, aber
etwas anspruchsvollere Filter müssen häufig
vorrausschauen. Mit anderen Worten, sie müssen wissen was
das nächste Zeichen ist (oder sogar mehrere Zeichen).
Wenn das nächste Zeichen einen bestimmten Wert hat, ist
es Teil des aktuellen Tokens, ansonsten nicht.Zum Beispiel könnten Sie den Eingabestrom für
eine Text-Zeichenfolge parsen (z.B. wenn Sie einen Compiler
einer Sprache implementieren): Wenn einem Buchstaben ein
anderer Buchstabe oder vielleicht eine Ziffer folgt, ist er
ein Teil des Tokens, das Sie verarbeiten. Wenn ihm ein
Leerzeichen folgt, oder ein anderer Wert, ist er nicht Teil
des aktuellen Tokens.Das führt usn zu einem interessanten Problem: Wie
kann man ein Zeichen zurück in den Eingabestrom geben,
damit es später noch einmal geleseni werden kann?Eine mögliche Lösung ist, das Zeichen in einer
Variable zu speichern und ein Flag zu setzen. Wir können
getchar so anpassen, dass es das Flag
überprüft und, wenn es gesetzt ist, das Byte aus der
Variable anstatt dem Eingabepuffer liest und das Flag
zurück setzt. Aber natürlich macht uns das
langsamer.Die Sprache C hat eine Funktion
ungetc() für genau diesen Zweck.
Gibt es einen schnellen Weg, diese in unserem Code zu
implementieren? Ich möchte Sie bitten nach oben zu
scrollen und sich die Prozedur getchar
anzusehen und zu versuchen eine schöne und schnelle
Lösung zu finden, bevor Sie den nächsten Absatz
lesen. Kommen Sie danach hierher zurück und schauen sich
meine Lösung an.Der Schlüssel dazu ein Zeichen an den Eingabestrom
zurückzugeben, liegt darin, wie wir das Zeichen
bekommen:Als erstes überprüfen wir, ob der Puffer leer
ist, indem wir den Wert von EBX testen. Wenn er null ist, rufen
wir die Prozedur read auf.Wenn ein Zeichen bereit ist verwenden wir lodsb, dann verringern wir den Wert
von EBX. Die Anweisung
lodsb ist letztendlich
identisch mit: mov al, [esi]
inc esiDas Byte, welches wir abgerufen haben, verbleibt im Puffer
bis read zum nächsten Mal aufgerufen
wird. Wir wissen nicht wann das passiert, aber wir wissen,
dass es nicht vor dem nächsten Aufruf von
getchar passiert. Daher ist alles was wir
tun müssen um das Byte in den Strom "zurückzugeben"
ist den Wert von ESI zu
verringern und den von EBX
zu erhöhen:ungetc:
dec esi
inc ebx
retAber seien Sie vorsichtig! Wir sind auf der sicheren Seite,
solange wir immer nur ein Zeichen im Voraus lesen. Wenn wir
mehrere kommende Zeichen betrachten und
ungetc mehrmals hintereinander aufrufen,
wird es meistens funktionieren, aber nicht immer (und es wird
ein schwieriger Debug). Warum?Solange getcharread nicht aufrufen muss, befinden sich
alle im Voraus gelesenen Bytes noch im Puffer und
ungetc arbeitet fehlerfrei. Aber sobald
getcharread aufruft
verändert sich der Inhalt des Puffers.Wir können uns immer darauf verlassen, dass
ungetc auf dem zuletzt mit
getchar gelesenen Zeichen korrekt
arbeitet, aber nicht auf irgendetwas, das davor gelesen
wurde.Wenn Ihr Programm mehr als ein Byte im Voraus lesen soll,
haben Sie mindestens zwei Möglichkeiten:Die einfachste Lösung ist, Ihr Programm so zu
ändern, dass es immer nur ein Byte im Voraus liest, wenn
das möglich ist.Wenn Sie diese Möglichkeit nicht haben, bestimmen Sie
zuerst die maximale Anzahl an Zeichen, die Ihr Programm auf
einmal an den Eingabestrom zurückgeben muss. Erhöhen
Sie diesen Wert leicht, nur um sicherzugehen, vorzugsweise auf
ein Vielfaches von 16—damit er sich schön
ausrichtet. Dann passen Sie den .bss
Abschnitt Ihres Codes an und erzeugen einen kleinen
Reserver-Puffer, direkt vor ihrem Eingabepuffer, in etwa
so:section .bss
resb 16 ; or whatever the value you came up with
ibuffer resb BUFSIZE
obuffer resb BUFSIZEAußerdem müssen Sie ungetc
anpassen, sodass es den Wert des Bytes, das zurückgegeben
werden soll, in AL
übergibt:ungetc:
dec esi
inc ebx
mov [esi], al
retMit dieser Änderung können Sie sicher
ungetc bis zu 17 Mal hintereinander
gqapaufrufen (der erste Aufruf erfolgt noch im Puffer, die
anderen 16 entweder im Puffer oder in der Reserve).FabianRuchÜbersetzt von KommandozeilenparameterUnser hex-Programm wird
nützlicher, wenn es die Dateinamen der Ein- und Ausgabedatei
über die Kommandozeile einlesen kann, d.h., wenn es
Kommandozeilenparameter verarbeiten kann. Aber... Wo sind
die?Bevor ein &unix;-System ein Programm ausführt, legt es
einige Daten auf dem Stack ab (push) und springt dann an das
_start-Label des Programms. Ja, ich sagte
springen, nicht aufrufen. Das bedeutet, dass auf die Daten
zugegriffen werden kann, indem [esp+offset]
ausgelesen wird oder die Daten einfach vom Stack genommen werden
(pop).Der Wert ganz oben auf dem Stack enthält die Zahl der
Kommandozeilenparameter. Er wird traditionell
argc wie "argument count" genannt.Die Kommandozeilenparameter folgen einander, alle
argc. Von diesen wird üblicherweise als
argv wie "argument value(s)" gesprochen. So
erhalten wir argv[0],
argv[1], ... und
argv[argc-1]. Dies sind nicht die eigentlichen
Parameter, sondern Zeiger (Pointer) auf diese, d.h.,
Speicheradressen der tatsächlichen Parameter. Die Parameter
selbst sind durch NULL beendete Zeichenketten.Der argv-Liste folgt ein NULL-Zeiger, was
einfach eine 0 ist. Es gibt noch mehr, aber
dies ist erst einmal genug für unsere Zwecke.Falls Sie von der
&ms-dos;-Programmierumgebung kommen, ist
der größte Unterschied die Tatsache, dass jeder
Parameter eine separate Zeichenkette ist. Der zweite
Unterschied ist, dass es praktisch keine Grenze gibt, wie
viele Parameter vorhanden sein können.Ausgerüstet mit diesen Kenntnissen, sind wir beinahe
bereit für eine weitere Version von
hex.asm. Zuerst müssen wir jedoch
noch ein paar Zeilen zu system.inc
hinzufügen:Erstens benötigen wir zwei neue Einträge in unserer
Liste mit den Systemaufrufnummern:%define SYS_open 5
%define SYS_close 6Zweitens fügen wir zwei neue Makros am Ende der Datei
ein:%macro sys.open 0
system SYS_open
%endmacro
%macro sys.close 0
system SYS_close
%endmacroUnd hier ist schließlich unser veränderter
Quelltext:%include 'system.inc'
%define BUFSIZE 2048
section .data
fd.in dd stdin
fd.out dd stdout
hex db '0123456789ABCDEF'
section .bss
ibuffer resb BUFSIZE
obuffer resb BUFSIZE
section .text
align 4
err:
push dword 1 ; return failure
sys.exit
align 4
global _start
_start:
add esp, byte 8 ; discard argc and argv[0]
pop ecx
jecxz .init ; no more arguments
; ECX contains the path to input file
push dword 0 ; O_RDONLY
push ecx
sys.open
jc err ; open failed
add esp, byte 8
mov [fd.in], eax
pop ecx
jecxz .init ; no more arguments
; ECX contains the path to output file
push dword 420 ; file mode (644 octal)
push dword 0200h | 0400h | 01h
; O_CREAT | O_TRUNC | O_WRONLY
push ecx
sys.open
jc err
add esp, byte 12
mov [fd.out], eax
.init:
sub eax, eax
sub ebx, ebx
sub ecx, ecx
mov edi, obuffer
.loop:
; read a byte from input file or stdin
call getchar
; convert it to hex
mov dl, al
shr al, 4
mov al, [hex+eax]
call putchar
mov al, dl
and al, 0Fh
mov al, [hex+eax]
call putchar
mov al, ' '
cmp dl, 0Ah
jne .put
mov al, dl
.put:
call putchar
cmp al, dl
jne .loop
call write
jmp short .loop
align 4
getchar:
or ebx, ebx
jne .fetch
call read
.fetch:
lodsb
dec ebx
ret
read:
push dword BUFSIZE
mov esi, ibuffer
push esi
push dword [fd.in]
sys.read
add esp, byte 12
mov ebx, eax
or eax, eax
je .done
sub eax, eax
ret
align 4
.done:
call write ; flush output buffer
; close files
push dword [fd.in]
sys.close
push dword [fd.out]
sys.close
; return success
push dword 0
sys.exit
align 4
putchar:
stosb
inc ecx
cmp ecx, BUFSIZE
je write
ret
align 4
write:
sub edi, ecx ; start of buffer
push ecx
push edi
push dword [fd.out]
sys.write
add esp, byte 12
sub eax, eax
sub ecx, ecx ; buffer is empty now
retIn unserem .data-Abschnitt befinden
sich nun die zwei neuen Variablen fd.in und
fd.out. Hier legen wir die Dateideskriptoren
der Ein- und Ausgabedatei ab.Im .text-Abschnitt haben wir die
Verweise auf stdin und
stdout durch [fd.in] und
[fd.out] ersetzt.Der .text-Abschnitt beginnt nun mit
einer einfachen Fehlerbehandlung, welche nur das Programm mit
einem Rückgabewert von 1 beendet. Die
Fehlerbehandlung befindet sich vor _start,
sodass wir in geringer Entfernung von der Stelle sind, an der
der Fehler auftritt.Selbstverständlich beginnt die
Programmausführung immer noch bei
_start. Zuerst entfernen wir
argc und argv[0] vom
Stack: Sie sind für uns nicht von Interesse (sprich, in
diesem Programm).Wir nehmen argv[1] vom Stack und legen
es in ECX ab. Dieses Register
ist besonders für Zeiger geeignet, da wir mit jecxz NULL-Zeiger verarbeiten
können. Falls argv[1] nicht NULL ist,
versuchen wir, die Datei zu öffnen, die der erste Parameter
festlegt. Andernfalls fahren wir mit dem Programm fort wie
vorher: Lesen von stdin und Schreiben nach
stdout. Falls wir die Eingabedatei nicht
öffnen können (z.B. sie ist nicht vorhanden), springen
wir zur Fehlerbehandlung und beenden das Programm.Falls es keine Probleme gibt, sehen wir nun nach dem
zweiten Parameter. Falls er vorhanden ist, öffnen wir die
Ausgabedatei. Andernfalls schreiben wir die Ausgabe nach
stdout. Falls wir die Ausgabedatei nicht
öffnen können (z.B. sie ist zwar vorhanden, aber wir
haben keine Schreibberechtigung), springen wir auch wieder in
die Fehlerbehandlung.Der Rest des Codes ist derselbe wie vorher, außer
dem Schließen der Ein- und Ausgabedatei vor dem Verlassen
des Programms und, wie bereits erwähnt, die Benutzung von
[fd.in] und
[fd.out].Unsere Binärdatei ist nun kolossale 768 Bytes
groß.Können wir das Programm immer noch verbessern?
Natürlich! Jedes Programm kann verbessert werden. Hier
finden sich einige Ideen, was wir tun könnten:Die Fehlerbehandlung eine Warnung auf
stderr ausgeben lassen.Den Lese- und
Schreibfunkionen eine Fehlerbehandlung
hinzufügen.Schließen von stdin, sobald wir
eine Eingabedatei öffnen, von stdout,
sobald wir eine Ausgabedatei öffnen.Hinzufügen von Kommandozeilenschaltern wie zum
Beispiel -i und
-o, sodass wir die Ein- und
Ausgabedatei in irgendeiner Reihenfolge angeben oder
vielleicht von stdin lesen und in eine
Datei schreiben können.Ausgeben einer Gebrauchsanweisung, falls die
Kommandozeilenparameter fehlerhaft sind.Ich beabsichtige, diese Verbesserungen dem Leser als
Übung zu hinterlassen: Sie wissen bereits alles, das Sie
wissen müssen, um die Verbesserungen
durchzuführen.FabianRuchÜbersetzt von Die &unix;-UmgebungEin entscheidendes Konzept hinter &unix; ist die Umgebung,
die durch Umgebungsvariablen festgelegt
wird. Manche werden vom System gesetzt, andere von Ihnen und
wieder andere von der shell oder
irgendeinem Programm, das ein anderes lädt.Umgebungsvariablen herausfindenIch sagte vorher, dass wenn ein Programm mit der
Ausführung beginnt, der Stack argc
gefolgt vom durch NULL beendeten argv-Array
und etwas Anderem enthält. Das "etwas Andere" ist die
Umgebung oder, um genauer zu sein, ein
durch NULL beendetes Array von Zeigern auf
Umgebungsvariablen. Davon wird oft als
env gesprochen.Der Aufbau von env entspricht dem von
argv, eine Liste von Speicheradressen gefolgt
von NULL (0). In diesem Fall gibt es kein
"envc"—wir finden das Ende heraus,
indem wir nach dem letzten NULL suchen.Die Variablen liegen normalerweise in der Form
name=value vor, aber manchmal kann der
=value-Teil fehlen. Wir müssen diese
Möglichkeit in Betracht ziehen.webvarsIch könnte Ihnen einfach etwas Code zeigen, der die
Umgebung in der Art vom &unix;-Befehl
env ausgibt. Aber ich dachte, dass es
interessanter sei, ein einfaches CGI-Werkzeug in Assembler zu
schreiben.CGI: Ein kurzer ÜberblickIch habe eine detaillierte
CGI-Anleitung auf meiner Webseite,
aber hier ist ein sehr kurzer Überblick über
CGI:Der Webserver kommuniziert mit dem
CGI-Programm, indem er
Umgebungsvariablen setzt.Das CGI-Programm schreibt seine
Ausgabe auf stdout. Der Webserver
liest von da.Die Ausgabe muss mit einem
HTTP-Kopfteil gefolgt von zwei
Leerzeilen beginnen.Das Programm gibt dann den
HTML-Code oder was für einen
Datentyp es auch immer verarbeitet
aus.Während bestimmte
Umgebungsvariablen Standardnamen
benutzen, unterscheiden sich andere, abhägngig vom
Webserver. Dies macht webvars
zu einem recht nützlichen Werkzeug.Der CodeUnser webvars-Programm muss
also den HTTP-Kopfteil gefolgt von etwas
HTML-Auszeichnung versenden. Dann muss es
die Umgebungsvariablen eine nach der
anderen auslesen und sie als Teil der
HTML-Seite versenden.Nun der Code. Ich habe Kommentare und Erklärungen
direkt in den Code eingefügt:
;;;;;;; webvars.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Copyright (c) 2000 G. Adam Stanislav
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions
; are met:
; 1. Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
; 2. Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
;
; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
; SUCH DAMAGE.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Version 1.0
;
; Started: 8-Dec-2000
; Updated: 8-Dec-2000
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%include 'system.inc'
section .data
http db 'Content-type: text/html', 0Ah, 0Ah
db '<?xml version="1.0" encoding="UTF-8"?>', 0Ah
db '<!DOCTYPE html PUBLIC "-//W3C/DTD XHTML Strict//EN" '
db '"DTD/xhtml1-strict.dtd">', 0Ah
db '<html xmlns="http://www.w3.org/1999/xhtml" '
db 'xml.lang="en" lang="en">', 0Ah
db '<head>', 0Ah
db '<title>Web Environment</title>', 0Ah
db '<meta name="author" content="G. Adam Stanislav" />', 0Ah
db '</head>', 0Ah, 0Ah
db '<body bgcolor="#ffffff" text="#000000" link="#0000ff" '
db 'vlink="#840084" alink="#0000ff">', 0Ah
db '<div class="webvars">', 0Ah
db '<h1>Web Environment</h1>', 0Ah
db '<p>The following <b>environment variables</b> are defined '
db 'on this web server:</p>', 0Ah, 0Ah
db '<table align="center" width="80" border="0" cellpadding="10" '
db 'cellspacing="0" class="webvars">', 0Ah
httplen equ $-http
left db '<tr>', 0Ah
db '<td class="name"><tt>'
leftlen equ $-left
middle db '</tt></td>', 0Ah
db '<td class="value"><tt><b>'
midlen equ $-middle
undef db '<i>(undefined)</i>'
undeflen equ $-undef
right db '</b></tt></td>', 0Ah
db '</tr>', 0Ah
rightlen equ $-right
wrap db '</table>', 0Ah
db '</div>', 0Ah
db '</body>', 0Ah
db '</html>', 0Ah, 0Ah
wraplen equ $-wrap
section .text
global _start
_start:
; First, send out all the http and xhtml stuff that is
; needed before we start showing the environment
push dword httplen
push dword http
push dword stdout
sys.write
; Now find how far on the stack the environment pointers
; are. We have 12 bytes we have pushed before "argc"
mov eax, [esp+12]
; We need to remove the following from the stack:
;
; The 12 bytes we pushed for sys.write
; The 4 bytes of argc
; The EAX*4 bytes of argv
; The 4 bytes of the NULL after argv
;
; Total:
; 20 + eax * 4
;
; Because stack grows down, we need to ADD that many bytes
; to ESP.
lea esp, [esp+20+eax*4]
cld ; This should already be the case, but let's be sure.
; Loop through the environment, printing it out
.loop:
pop edi
or edi, edi ; Done yet?
je near .wrap
; Print the left part of HTML
push dword leftlen
push dword left
push dword stdout
sys.write
; It may be tempting to search for the '=' in the env string next.
; But it is possible there is no '=', so we search for the
; terminating NUL first.
mov esi, edi ; Save start of string
sub ecx, ecx
not ecx ; ECX = FFFFFFFF
sub eax, eax
repne scasb
not ecx ; ECX = string length + 1
mov ebx, ecx ; Save it in EBX
; Now is the time to find '='
mov edi, esi ; Start of string
mov al, '='
repne scasb
not ecx
add ecx, ebx ; Length of name
push ecx
push esi
push dword stdout
sys.write
; Print the middle part of HTML table code
push dword midlen
push dword middle
push dword stdout
sys.write
; Find the length of the value
not ecx
lea ebx, [ebx+ecx-1]
; Print "undefined" if 0
or ebx, ebx
jne .value
mov ebx, undeflen
mov edi, undef
.value:
push ebx
push edi
push dword stdout
sys.write
; Print the right part of the table row
push dword rightlen
push dword right
push dword stdout
sys.write
; Get rid of the 60 bytes we have pushed
add esp, byte 60
; Get the next variable
jmp .loop
.wrap:
; Print the rest of HTML
push dword wraplen
push dword wrap
push dword stdout
sys.write
; Return success
push dword 0
sys.exitDieser Code erzeugt eine 1.396-Byte große
Binärdatei. Das meiste davon sind Daten, d.h., die
HTML-Auszeichnung, die wir versenden
müssen.Assemblieren Sie es wie immer:&prompt.user; nasm -f elf webvars.asm
&prompt.user; ld -s -o webvars webvars.oUm es zu benutzen, müssen Sie
webvars auf Ihren Webserver hochladen.
Abhängig von Ihrer Webserver-Konfiguration, müssen
Sie es vielleicht in einem speziellen
cgi-bin-Verzeichnis ablegen oder es mit
einer .cgi-Dateierweiterung
versehen.Schließlich benötigen Sie Ihren Webbrowser,
um sich die Ausgabe anzusehen. Um die Ausgabe auf meinem
Webserver zu sehen, gehen Sie bitte auf http://www.int80h.org/webvars/.
Falls Sie neugierig sind, welche zusätzlichen Variablen
in einem passwortgeschützten Webverzeichnis vorhanden
sind, gehen Sie auf http://www.int80h.org/private/
unter Benutzung des Benutzernamens asm
und des Passworts programmer.PaulKellerÜbersetzt von FabianBorschelArbeiten mit DateienWir haben bereits einfache Arbeiten mit Dateien gemacht:
Wir wissen wie wir sie öffnen und schliessen, oder wie
man sie mit Hilfe von Buffern liest und schreibt. Aber &unix;
bietet viel mehr Funktionalität wenn es um Dateien geht.
Wir werden einige von ihnen in dieser Sektion untersuchen und
dann mit einem netten Datei Konvertierungs Werkzeug
abschliessen.In der Tat, Lasst uns am Ende beginnen, also mit dem Datei
Konvertierungs Werkzeug. Es macht Programmieren immer einfacher,
wenn wir bereits am Anfang wissen was das End Produkt bezwecken
soll.Eines der ersten Programme die ich für &unix; schrieb
war
tuc, ein Text-Zu-&unix; Datei Konvertierer.
Es konvertiert eine Text Datei von einem anderen Betriebssystem
zu einer &unix; Text Datei. Mit anderen Worten, es ändert
die verschiedenen Arten von Zeilen Begrenzungen zu der Zeilen
Begrenzungs Konvention von &unix;. Es speichert die Ausgabe in
einer anderen Datei. Optional konvertiert es eine &unix; Text
Datei zu einer DOS Text Datei.Ich habe tuc sehr oft benutzt,
aber nur von irgendeinem anderen OS nach
&unix; zu konvertieren, niemals anders herum. Ich habe mir immer
gewünscht das die Datei einfach überschrieben wird
anstatt das ich die Ausgabe in eine andere Datei senden muss.
Meistens, habe ich diesen Befehl verwendet:&prompt.user; tuc myfile tempfile
&prompt.user; mv tempfile myfileEs wäre schö ein ftuc
zu haben, also, fast tuc, und es so zu
benutzen:&prompt.user; ftuc myfileIn diesem Kapitel werden wir dann, ftuc
in Assembler schreiben (das Original
tuc ist in C), und verschiedene
Datei-Orientierte Kernel Dienste in dem Prozess studieren.Auf erste Sicht, ist so eine Datei Konvertierung sehr
simpel: Alles was du zu tun hast, ist die Wagen
Rückläfe zu entfernen, richtig?Wenn du mit ja geantwortet hast, denk nochmal darüber
nach: Dieses Herrangehen wird die meiste Zeit funktionieren
(zumindest mit MSDOS Text Dateien), aber
gelegentlich fehlschlagen.Das Problem ist das nicht alle &unix; Text Dateien ihre
Zeilen mit einer Wagen Rücklauf / Zeilenvorschub Sequenz
beenden. Manche benutzen Wagenrücklauf ohne Zeilenvorschub.
Andere kombinieren mehrere leere Zeilen in einen einzigen
Wagenrücklauf gefolgt von mehreren Zeilenvorschüben.
Und so weiter.Ein Text Datei Konvertierer muss dann also in der Lage sein
mit allen möglichen Zeilenenden umzugehen:Wagenrücklauf / ZeilenvorschubWagenrücklaufZeilenvorschub / WagenrücklaufZeilenvorschubEs sollte außerdem in der Lage sein mit Dateien
umzugehen die irgendeine Art von Kombination der oben stehenden
Möglichkeiten verwendet. (z.B., Wagenrücklauf gefolgt
von mehreren Zeilenvorschüben).Endlicher ZustandsautomatDas Problem wird einfach gelöst in dem man eine
Technik benutzt die sich Endlicher
Zustandsautomat nennt, ursprünglich wurde sie
von den Designern digitaler elektronischer Schaltkreise
entwickelt. Eine Endlicher Zustandsautomat
ist ein digitaler Schaltkreis dessen Ausgabe nicht nur von der
Eingabe abhängig ist sondern auch von der vorherigen
Eingabe, d.h., von seinem Status. Der Mikroprozessor ist ein
Beispiel für einen Endlichen Zustandsautomaten
: Unser Assembler Sprach Code wird zu
Maschinensprache übersetzt in der manche Assembler Sprach
Codes ein einzelnes Byte produzieren, während andere
mehrere Bytes produzieren. Da der Microprozessor die Bytes
einzeln aus dem Speicher liest, ändern manche nur seinen
Status anstatt eine Ausgabe zu produzieren. Wenn alle Bytes
eines OP Codes gelesen wurden, produziert der Mikroprozessor
eine Ausgabe, oder ändert den Wert eines Registers,
etc.Aus diesem Grund, ist jede Software eigentlich nur eine
Sequenz von Status Anweisungen für den Mikroprozessor.
Dennoch, ist das Konzept eines Endlichen
Zustandsautomaten auch im Software Design sehr
hilfreich.Unser Text Datei Konvertierer kann als
Endlicher Zustandsautomat mit 3
möglichen Stati desgined werden. Wir könnten diese
von 0-2 benennen, aber es wird uns das Leben leichter machen
wenn wir ihnen symbolische Namen geben:ordinarycrlfUnser Programm wird in dem ordinary Status
starten. Während dieses Status, hängt die Aktion des
Programms von seiner Eingabe wie folgt ab:Wenn die Eingabe etwas anderes als ein
Wagenrücklauf oder einem Zeilenvorschub ist, wird die
Eingabe einfach nur an die Ausgabe geschickt. Der Status
bleibt unverändert.Wenn die Eingabe ein Wagenrücklauf ist, wird der
Status auf cr gesetzt. Die Eingabe wird
dann verworfen, d.h., es entsteht keine Ausgabe.Wenn die Eingabe ein Zeilenvorschub ist, wird der
Status auf lf gesetzt. Die Eingabe wird
dann verworfen.Wann immer wir in dem cr Status sind,
ist das weil die letzte Eingabe ein Wagenrücklauf war,
welcher nicht verarbeitet wurde. Was unsere Software in
diesem Status macht hängt von der aktuellen Eingabe
ab:Wenn die Eingabe irgendetwas anderes als ein
Wagenrücklauf oder ein Zeilenvorschub ist, dann gib
einen Zeilenvorschub aus, dann gib die Eingabe aus und
dann ändere den Status zu
ordinary.Wenn die Eingabe ein Wagenrücklauf ist, haben
wir zwei (oder mehr) Wagenrückläufe in einer
Reihe. Wir verwerfen die Eingabe, wir geben einen
Zeilenvorschub aus und lassen den Status
unverändert.Wenn die Eingabe ein Zeilenvorschub ist, geben wir
den Zeilenvorschub aus und ändern den Status zu
ordinary. Achte darauf das, dass nicht
das gleiche wie in dem Fall oben drüber ist –
würden wir versuchen beide zu kombinieren,
würden wir zwei Zeilenvorschübe anstatt einen
ausgeben.Letztendlich, sind wir in dem lf Status
nachdem wir einen Zeilenvorschub empfangen haben der nicht
nach einem Wagenrücklauf kam. Das wird passieren wenn
unsere Datei bereits im &unix; Format ist, oder jedesmal wenn
mehrere Zeilen in einer Reihe durch einen einzigen
Wagenrücklauf gefolgt von mehreren Zeilenvorschüben
ausgedrückt wird, oder wenn die Zeile mit einer
Zeilenvorschub / Wagenrücklauf Sequenz endet. Wir
sollten mit unserer Eingabe in diesem Status folgendermasen
umgehen:Wenn die Eingabe irgendetwas anderes als ein
Wagenrücklauf oder ein Zeilenvorschub ist, geben wir
einen Zeilenvorschub aus, geben dann die Eingabe aus und
ändern dann den Status zu ordinary.
Das ist exakt die gleiche Aktion wie in dem
cr Status nach dem Empfangen der selben
Eingabe.Wenn die Eingabe ein Wagenrücklauf ist, verwerfen
wir die Eingabe, geben einen Zeilenvorschub aus und
ändern dann den Status zu ordinary.
Wenn die Eingabe ein Zeilenvorschub ist, geben wir den
Zeilenvorschub aus und lassen den Status unverändert.
Der Endgültige StatusDer obige Endliche Zustandsautomat
funktioniert für die gesamte Datei, aber lässt die
Möglichkeit das die letzte Zeile ignoriert wird. Das
wird jedesmal passieren wenn die Datei mit einem einzigen
Wagenrücklauf oder einem einzigen Zeilenvorschub endet.
Daran habe ich nicht gedacht als ich
tuc schrieb, nur um festzustellen
das,dass letzte Zeilenende gelegentlich weggelassen
wird.Das Problem wird einfach dadurch gelöst, indem man
den Status überprüft nachdem die gesamte Datei
verarbeitet wurde. Wenn der Status nicht
ordinary ist, müssen wir nur den
letzten Zeilenvorschub ausgeben.Nachdem wir unseren Algorithmus nun als einen
Endlichen Zustandsautomaten formuliert
haben, könnten wir einfach einen festgeschalteten
digitalen elektronischen Schaltkreis (einen "Chip")
designen, der die Umwandlung für uns übernimmt.
Natürlich wäre das sehr viel teurer, als ein
Assembler Programm zu schreiben.Der Ausgabe ZählerWeil unser Datei Konvertierungs Programm
möglicherweise zwei Zeichen zu einem kombiniert,
müssen wir einen Ausgabe Zähler verwenden. Wir
initialisieren den Zähler zu 0
und erhöhen ihn jedes mal wenn wir ein Zeichen an die
Ausgabe schicken. Am Ende des Programms, wird der
Zähler uns sagen auf welche Grösse wir die Datei
setzen müssen.Implementieren von EZ als SoftwareDer schwerste Teil beim arbeiten mit einer
Endlichen Zustandsmaschine ist das
analysieren des Problems und dem ausdrücken als eine
Endliche Zustandsmaschine. That geschafft,
schreibt sich die Software fast wie von selbst.In eine höheren Sprache, wie etwa C, gibt es mehrere
Hauptansätze. Einer wäre ein switch Angabe zu verwenden die
auswählt welche Funktion genutzt werden soll. Zum
Beispiel,
switch (state) {
default:
case REGULAR:
regular(inputchar);
break;
case CR:
cr(inputchar);
break;
case LF:
lf(inputchar);
break;
}
Ein anderer Ansatz ist es ein Array von Funktions Zeigern
zu benutzen, etwa wie folgt:
(output[state])(inputchar);
Noch ein anderer ist es aus state einen
Funktions Zeiger zu machen und ihn zu der entsprechenden
Funktion zeigen zu lassen:
(*state)(inputchar);
Das ist der Ansatz den wir in unserem Programm verwenden
werden, weil es in Assembler sehr einfach und schnell geht.
Wir werden einfach die Adresse der Prozedur in EBX speichern und dann einfach das
ausgeben:
call ebx
Das ist wahrscheinlich schneller als die Adresse im Code
zu hardcoden weil der Mikroprozessor die Adresse nicht aus dem
Speicher lesen muss—es ist bereits in einer der Register
gespeichert. Ich sagte wahrscheinlich
weil durch das Cachen neuerer Mikroprozessoren beide Varianten
in etwa gleich schnell sind.Speicher abgebildete DateienWeil unser Programm nur mit einzelnen Dateien
funktioniert, können wir nicht den Ansatz verwedenden der
zuvor funktioniert hat, d.h., von einer Eingabe Datei zu lesen
und in eine Ausgabe Datei zu schreiben.&unix; erlaubt es uns eine Datei, oder einen Bereich einer
Datei, in den Speicher abzubilden. Um das zu tun, müssen
wir zuerst eine Datei mit den entsprechenden Lese/Schreib
Flags öffnen. Dann benutzen wir den mmap system call um sie in den
Speicher abzubilden. Ein Vorteil von mmap ist, das es automatisch mit
virtuellem Speicher arbeitet: Wir können mehr von der
Datei im Speicher abbilden als wir überhaupt
physikalischen Speicher zur Verfügung haben, noch immer
haben wir aber durch normale OP Codes wie mov, lods, und stos Zugriff darauf. Egal welche
Änderungen wir an dem Speicherabbild der Datei vornehmen,
sie werden vom System in die Datei geschrieben. Wir
müssen die Datei nicht offen lassen: So lange sie
abgebildet bleibt, können wir von ihr lesen und in sie
schreiben.Ein 32-bit Intel Mikroprozessor kann auf bis zu vier
Gigabyte Speicher zugreifen – physisch oder virtuell.
Das FreeBSD System erlaubt es uns bis zu der Hälfte
für die Datei Abbildung zu verwenden.Zur Vereinfachung, werden wir in diesem Tutorial nur
Dateien konvertieren die in ihrere Gesamtheit im Speicher
abgebildet werden können. Es gibt wahrscheinlich nicht
all zu viele Text Dateien die eine Grösse von zwei
Gigabyte überschreiben. Falls unser Programm doch auf
eine trifft, wird es einfach eine Meldung anzeigen mit dem
Vorschlag das originale tuc statt
dessen zu verwenden.Wenn du deine Kopie von
syscalls.master überprüfst,
wirst du zwei verschiedene Systemaufrufe
finden die sich mmap
nennen. Das kommt von der Entwicklung von &unix;: Es gab das
traditionelle BSD mmap, Systemaufruf 71. Dieses wurde
durch das &posix; mmap ersetzt, Systemaufruf 197. Das
FreeBSD System unterstützt beide, weil ältere
Programme mit der originalen BSD Version
geschrieben wurden. Da neue Software die
&posix; Version nutzt, werden wir diese
auch verwenden.Die syscalls.master Datei zeigt die
&posix; Version wie folgt:
197 STD BSD { caddr_t mmap(caddr_t addr, size_t len, int prot, \
int flags, int fd, long pad, off_t pos); }
Das weicht etwas von dem ab was
mmap2 sagt. Das ist weil
mmap2 die C Version
beschreibt.Der Unterschiede liegt in dem long pad
Argument, welches in der C Version nicht vorhanden ist. Wie
auch immer, der FreeBSD Systemaufruf fügt einen 32-bit
Block ein nachdem es ein 64-Bit Argument auf den Stack
gepusht hat. In diesem
Fall, ist off_t ein 64-Bit Wert.Wenn wir fertig sind mit dem Arbeiten einer im Speicher
abgebildeten Datei, entfernen wir das Speicherabbild mit dem
munmap Systemaufruf:Für eine detailiert Behandlung von mmap, sieh in W. Richard Stevens'
Unix Network Programming, Volume 2, Chapter 12
nach.Feststellen der Datei GrösseWeil wir mmap sagen
müssen wie viele Bytes von Datei wir im Speicher abbilden
wollen und wir außerdem die gesamte Datei abbilden wollen,
müssen wir die Grösse der Datei feststellen.Wir können den fstat Systemaufruf verwenden um alle
Informationen über eine geöffnete Datei zu erhalten
die uns das System geben kann. Das beinhaltet die Datei
Grösse.Und wieder, zeigt uns syscalls.master
zwei Versionen von fstat,
eine traditionelle (Systemaufruf 62), und eine
&posix; (Systemaufruf 189) Variante.
Natürlich, verwenden wir die &posix;
Version:
189 STD POSIX { int fstat(int fd, struct stat *sb); }
Das ist ein sehr unkomplizierter Aufruf: Wir
übergeben ihm die Adresse einer
stat Structure und den Deskriptor
einer geöffneten Datei. Es wird den Inhalt der
stat Struktur ausfüllen.Ich muss allerdings sagen, das ich versucht habe die
stat Struktur in dem
.bss Bereich zu deklarieren, und
fstat mochte es nicht:
Es setzte das Carry Flag welches einen Fehler anzeigt.
Nachdem ich den Code veränderte so dass er die Struktur
auf dem Stack anlegt, hat alles gut funktioniert.Ändern der DateigrösseDadurch das unser Programm
Wagenrücklauf/Zeilenvorschub-Sequenzen in einfache
Zeilenvorschübe zusammenfassen könnte, könnte
unsere Ausgabe kleiner sein als unsere Eingabe. Und da wir die
Ausgabe in dieselbe Datei um, aus der wir unsere Eingabe
erhalten, müssen wir eventuell die Dateigrösse
anpassen.Der Systemaufruf ftruncate erlaubt uns, dies zu tun.
Abgesehen von dem etwas unglücklich gewählten Namen
ftruncate können wir
mit dieser Funktion eine Datei vergrössern, oder
verkleinern.Und ja, wir werden zwei Versionen von ftruncate in
syscalls.master finden, eine ältere
(130) und eine neuere (201). Wir werden die neuere Version
verwenden:
201 STD BSD { int ftruncate(int fd, int pad, off_t length); }
Beachten Sie bitte, dass hier wieder int
pad verwendet wird.ftucWir wissen jetzt alles nötige, um
ftuc zu schreiben. Wir beginnen,
indem wir ein paar neue Zeilen der Datei
system.inc hinzufügen. Als erstes
definieren wir irgendwo am Anfang der Datei einige Konstanten
und Strukturen:
;;;;;;; open flags
%define O_RDONLY 0
%define O_WRONLY 1
%define O_RDWR 2
;;;;;;; mmap flags
%define PROT_NONE 0
%define PROT_READ 1
%define PROT_WRITE 2
%define PROT_EXEC 4
;;
%define MAP_SHARED 0001h
%define MAP_PRIVATE 0002h
;;;;;;; stat structure
struc stat
st_dev resd 1 ; = 0
st_ino resd 1 ; = 4
st_mode resw 1 ; = 8, size is 16 bits
st_nlink resw 1 ; = 10, ditto
st_uid resd 1 ; = 12
st_gid resd 1 ; = 16
st_rdev resd 1 ; = 20
st_atime resd 1 ; = 24
st_atimensec resd 1 ; = 28
st_mtime resd 1 ; = 32
st_mtimensec resd 1 ; = 36
st_ctime resd 1 ; = 40
st_ctimensec resd 1 ; = 44
st_size resd 2 ; = 48, size is 64 bits
st_blocks resd 2 ; = 56, ditto
st_blksize resd 1 ; = 64
st_flags resd 1 ; = 68
st_gen resd 1 ; = 72
st_lspare resd 1 ; = 76
st_qspare resd 4 ; = 80
endstruc
Wir definieren die neuen Systemaufrufe:
%define SYS_mmap 197
%define SYS_munmap 73
%define SYS_fstat 189
%define SYS_ftruncate 201
Wir fügen die Makros hinzu:
%macro sys.mmap 0
system SYS_mmap
%endmacro
%macro sys.munmap 0
system SYS_munmap
%endmacro
%macro sys.ftruncate 0
system SYS_ftruncate
%endmacro
%macro sys.fstat 0
system SYS_fstat
%endmacro
Und hier ist unser Code:
;;;;;;; Fast Text-to-Unix Conversion (ftuc.asm) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Started: 21-Dec-2000
;; Updated: 22-Dec-2000
;;
;; Copyright 2000 G. Adam Stanislav.
;; All rights reserved.
;;
;;;;;;; v.1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%include 'system.inc'
section .data
db 'Copyright 2000 G. Adam Stanislav.', 0Ah
db 'All rights reserved.', 0Ah
usg db 'Usage: ftuc filename', 0Ah
usglen equ $-usg
co db "ftuc: Can't open file.", 0Ah
colen equ $-co
fae db 'ftuc: File access error.', 0Ah
faelen equ $-fae
ftl db 'ftuc: File too long, use regular tuc instead.', 0Ah
ftllen equ $-ftl
mae db 'ftuc: Memory allocation error.', 0Ah
maelen equ $-mae
section .text
align 4
memerr:
push dword maelen
push dword mae
jmp short error
align 4
toolong:
push dword ftllen
push dword ftl
jmp short error
align 4
facerr:
push dword faelen
push dword fae
jmp short error
align 4
cantopen:
push dword colen
push dword co
jmp short error
align 4
usage:
push dword usglen
push dword usg
error:
push dword stderr
sys.write
push dword 1
sys.exit
align 4
global _start
_start:
pop eax ; argc
pop eax ; program name
pop ecx ; file to convert
jecxz usage
pop eax
or eax, eax ; Too many arguments?
jne usage
; Open the file
push dword O_RDWR
push ecx
sys.open
jc cantopen
mov ebp, eax ; Save fd
sub esp, byte stat_size
mov ebx, esp
; Find file size
push ebx
push ebp ; fd
sys.fstat
jc facerr
mov edx, [ebx + st_size + 4]
; File is too long if EDX != 0 ...
or edx, edx
jne near toolong
mov ecx, [ebx + st_size]
; ... or if it is above 2 GB
or ecx, ecx
js near toolong
; Do nothing if the file is 0 bytes in size
jecxz .quit
; Map the entire file in memory
push edx
push edx ; starting at offset 0
push edx ; pad
push ebp ; fd
push dword MAP_SHARED
push dword PROT_READ | PROT_WRITE
push ecx ; entire file size
push edx ; let system decide on the address
sys.mmap
jc near memerr
mov edi, eax
mov esi, eax
push ecx ; for SYS_munmap
push edi
; Use EBX for state machine
mov ebx, ordinary
mov ah, 0Ah
cld
.loop:
lodsb
call ebx
loop .loop
cmp ebx, ordinary
je .filesize
; Output final lf
mov al, ah
stosb
inc edx
.filesize:
; truncate file to new size
push dword 0 ; high dword
push edx ; low dword
push eax ; pad
push ebp
sys.ftruncate
; close it (ebp still pushed)
sys.close
add esp, byte 16
sys.munmap
.quit:
push dword 0
sys.exit
align 4
ordinary:
cmp al, 0Dh
je .cr
cmp al, ah
je .lf
stosb
inc edx
ret
align 4
.cr:
mov ebx, cr
ret
align 4
.lf:
mov ebx, lf
ret
align 4
cr:
cmp al, 0Dh
je .cr
cmp al, ah
je .lf
xchg al, ah
stosb
inc edx
xchg al, ah
; fall through
.lf:
stosb
inc edx
mov ebx, ordinary
ret
align 4
.cr:
mov al, ah
stosb
inc edx
ret
align 4
lf:
cmp al, ah
je .lf
cmp al, 0Dh
je .cr
xchg al, ah
stosb
inc edx
xchg al, ah
stosb
inc edx
mov ebx, ordinary
ret
align 4
.cr:
mov ebx, ordinary
mov al, ah
; fall through
.lf:
stosb
inc edx
ret
Verwenden Sie dieses Programm nicht mit Dateien, die
sich auf Datenträgern befinden, welche mit
&ms-dos; oder &windows; formatiert
wurden. Anscheinend gibt es im Code von FreeBSD einen
subtilen Bug, wenn mmap
auf solchen Datenträgern verwendet wird: Wenn die Datei
eine bestimmte Grösse überschreitet, füllt
mmap den Speicher mit
lauter Nullen, und überschreibt damit anschliessend den
Dateiinhalt.DanielSeuffertÜbersetzt von One-Pointed MindAls ein Zen-Schüler liebe ich die Idee eines
fokussierten Bewußtseins: Tu nur ein Ding zur gleichen
Zeit, aber mache es richtig.Das ist ziemlich genau die gleiche Idee, welche &unix;
richtig funktionieren lässt. Während eine typische
&windows;-Applikation versucht alles Vorstellbare zu tun (und
daher mit Fehler durchsetzt ist), versucht eine
&unix;-Applikation nur eine Funktion zu erfüllen und das
gut.Der typische &unix;-Nutzer stellt sich sein eigenes System
durch Shell-Skripte zusammen, die er selbst schreibt, und welche
die Vorteile bestehender Applikationen dadurch kombinieren,
indem sie die Ausgabe eines Programmes als Eingabe in ein
anderes Programm durch eine Pipe übergeben.Wenn Sie ihre eigene &unix;-Software schreiben, ist es
generell eine gute Idee zu betrachten, welcher Teil der
Problemlösung durch bestehende Programme bewerkstelligt
werden kann. Man schreibt nur die Programme selbst, für die
keine vorhandene Lösung existiert.CSVIch will dieses Prinzip an einem besonderen Beispiel
aus der realen Welt demonstrieren, mit dem ich kürzlich
konfrontiert wurde:Ich mußte jeweils das elfte Feld von jedem
Datensatz aus einer Datenbank extrahieren, die ich von einer
Webseite heruntergeladen hatte. Die Datenbank war eine
CSV-Datei, d.h. eine Liste von
Komma-getrennten Werten. Dies ist ein
ziemlich gewöhnliches Format für den Code-Austausch
zwischen Menschen, die eine unterschiedliche
Datenbank-Software nutzen.Die erste zeile der Datei enthält eine Liste der
Felder durch Kommata getrennt. Der Rest der Datei enthält
die einzelnen Datensätze mit durch Kommata getrennten
Werten in jeder Zeile.Ich versuchte awk unter
Nutzung des Kommas als Trenner. Da aber einige Zeilen durch in
Bindestriche gesetzte Kommata getrennt waren, extrahierte
awk das falsche Feld aus diesen
Zeilen.Daher mußte ich meine eigene Software schreiben,
um das elfte Feld aus der CSV-Datei
auszulesen. Aber durch Anwendung der &unix;-Philosophie
mußte ich nur einen einfachen Filter schreiben, das
Folgende tat:Entferne die erste Zeile aus der Datei.Ändere alle Kommata ohne Anführungszeichen
in einen anderen Buchstaben.Entferne alle Anführungszeichen.Streng genommen könnte ich
sed benutzen, um die erste Zeile
der Datei zu entfernen, aber das zu Bewerkstelligen war in
meinem Programm sehr einfach, also entschloss ich mich dazu
und reduzierte dadurch die Größe der
Pipeline.Unter Berücksichtigung aller Faktoren kostete mich
das Schreiben dieses Progammes ca. 20 Minuten. Das Schreiben
eines Programmes, welches jeweils das elfte Feld aus einer
CSV-Datei extrahiert hätte wesentlich
länger gedauert und ich hätte es nicht
wiederverwenden können, um ein anderes Feld zu
extrahieren aus irgendeiner anderen Datenbank.Diesmal entschied ich mich dazu, etwas mehr Arbeit zu
investieren, als man normalerweise für ein typisches
Tutorial verwenden würde:Es parst die Kommandozeilen nach Optionen.Es zeigt die richtige Nutzung an, falls es ein
falsches Argument findet.Es gibt vernünftige Fehlermeldungen aus.Hier ist ein Beispiel für seine Nutzung:Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]Alle Parameter sind optional und können in beliebiger
Reihenfolge auftauchen.Der -t-Parameter legt fest, was
zu die Kommata zu ersetzen sind. Der tab
ist die Vorgabe hierfür. Zum Beispiel wird
-t; alle unquotierten Kommata mit
Semikolon ersetzen.Ich brauche die -c-Option nicht,
aber sie könnte zukünftig nützlich sein. Sie
ermöglicht mir festzulegen, daß ich einen anderen
Buchstaben als das Kommata mit etwas anderem ersetzen
möchte. Zum Beispiel wird der Parameter
-c@ alle @-Zeichen ersetzen
(nützlich, falls man eine Liste von EmAil-Adressen in
Nutzername und Domain aufsplitten will).Die -p-Option erhält die
erste Zeile, d.h. die erste Zeile der Datei wird nicht
gelöscht. Als Vorgabe löschen wir die erste Zeile,
weil die CSV-Datei in der ersten Zeile
keine Daten, sondern Feldbeschreibungen enthält.Die Parameter -i- und
-o-Optionen erlauben es mir, die
Ausgabe- und Eingabedateien festzulegen. Vorgabe sind
stdin und stdout,
also ist es ein regulärer &unix;-Filter.Ich habe sichergestellt, daß sowohl -i
filename und -ifilename
akzeptiert werden. Genauso habe ich dafür Sorge getragen,
daß sowohl Eingabe- als auch Ausgabedateien festgelegt
werden können.Um das elfte Feld jeden Datensatzes zu erhalten kann ich
nun folgendes eingeben:&prompt.user; csv '-t;' data.csv | awk '-F;' '{print $11}'Der Code speichert die Optionen (bis auf die
Dateideskriptoren) in EDX:
Das Kommata in DH, den
neuen Feldtrenner in DL und
das Flag für die -p-Option in dem
höchsten Bit von EDX.
Ein kurzer Abgleich des Zeichens wird uns also eine schnelle
Entscheidung darüber erlauben, was zu tun ist.Hier ist der Code:
;;;;;;; csv.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Convert a comma-separated file to a something-else separated file.
;
; Started: 31-May-2001
; Updated: 1-Jun-2001
;
; Copyright (c) 2001 G. Adam Stanislav
; All rights reserved.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%include 'system.inc'
%define BUFSIZE 2048
section .data
fd.in dd stdin
fd.out dd stdout
usg db 'Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]', 0Ah
usglen equ $-usg
iemsg db "csv: Can't open input file", 0Ah
iemlen equ $-iemsg
oemsg db "csv: Can't create output file", 0Ah
oemlen equ $-oemsg
section .bss
ibuffer resb BUFSIZE
obuffer resb BUFSIZE
section .text
align 4
ierr:
push dword iemlen
push dword iemsg
push dword stderr
sys.write
push dword 1 ; return failure
sys.exit
align 4
oerr:
push dword oemlen
push dword oemsg
push dword stderr
sys.write
push dword 2
sys.exit
align 4
usage:
push dword usglen
push dword usg
push dword stderr
sys.write
push dword 3
sys.exit
align 4
global _start
_start:
add esp, byte 8 ; discard argc and argv[0]
mov edx, (',' << 8) | 9
.arg:
pop ecx
or ecx, ecx
je near .init ; no more arguments
; ECX contains the pointer to an argument
cmp byte [ecx], '-'
jne usage
inc ecx
mov ax, [ecx]
.o:
cmp al, 'o'
jne .i
; Make sure we are not asked for the output file twice
cmp dword [fd.out], stdout
jne usage
; Find the path to output file - it is either at [ECX+1],
; i.e., -ofile --
; or in the next argument,
; i.e., -o file
inc ecx
or ah, ah
jne .openoutput
pop ecx
jecxz usage
.openoutput:
push dword 420 ; file mode (644 octal)
push dword 0200h | 0400h | 01h
; O_CREAT | O_TRUNC | O_WRONLY
push ecx
sys.open
jc near oerr
add esp, byte 12
mov [fd.out], eax
jmp short .arg
.i:
cmp al, 'i'
jne .p
; Make sure we are not asked twice
cmp dword [fd.in], stdin
jne near usage
; Find the path to the input file
inc ecx
or ah, ah
jne .openinput
pop ecx
or ecx, ecx
je near usage
.openinput:
push dword 0 ; O_RDONLY
push ecx
sys.open
jc near ierr ; open failed
add esp, byte 8
mov [fd.in], eax
jmp .arg
.p:
cmp al, 'p'
jne .t
or ah, ah
jne near usage
or edx, 1 << 31
jmp .arg
.t:
cmp al, 't' ; redefine output delimiter
jne .c
or ah, ah
je near usage
mov dl, ah
jmp .arg
.c:
cmp al, 'c'
jne near usage
or ah, ah
je near usage
mov dh, ah
jmp .arg
align 4
.init:
sub eax, eax
sub ebx, ebx
sub ecx, ecx
mov edi, obuffer
; See if we are to preserve the first line
or edx, edx
js .loop
.firstline:
; get rid of the first line
call getchar
cmp al, 0Ah
jne .firstline
.loop:
; read a byte from stdin
call getchar
; is it a comma (or whatever the user asked for)?
cmp al, dh
jne .quote
; Replace the comma with a tab (or whatever the user wants)
mov al, dl
.put:
call putchar
jmp short .loop
.quote:
cmp al, '"'
jne .put
; Print everything until you get another quote or EOL. If it
; is a quote, skip it. If it is EOL, print it.
.qloop:
call getchar
cmp al, '"'
je .loop
cmp al, 0Ah
je .put
call putchar
jmp short .qloop
align 4
getchar:
or ebx, ebx
jne .fetch
call read
.fetch:
lodsb
dec ebx
ret
read:
jecxz .read
call write
.read:
push dword BUFSIZE
mov esi, ibuffer
push esi
push dword [fd.in]
sys.read
add esp, byte 12
mov ebx, eax
or eax, eax
je .done
sub eax, eax
ret
align 4
.done:
call write ; flush output buffer
; close files
push dword [fd.in]
sys.close
push dword [fd.out]
sys.close
; return success
push dword 0
sys.exit
align 4
putchar:
stosb
inc ecx
cmp ecx, BUFSIZE
je write
ret
align 4
write:
jecxz .ret ; nothing to write
sub edi, ecx ; start of buffer
push ecx
push edi
push dword [fd.out]
sys.write
add esp, byte 12
sub eax, eax
sub ecx, ecx ; buffer is empty now
.ret:
retVieles daraus ist aus hex.asm
entnommen worden. Aber es gibt einen wichtigen Unterschied:
Ich rufe nicht länger write auf,
wann immer ich eine Zeilenvorschub ausgebe. Nun kann der Code
sogar interaktiv genutzt werden.Ich habe eine bessere Lösung gefunden für das
Interaktivitätsproblem seit ich mit dem Schreiben dieses
Kapitels begonnen habe. Ich wollte sichergehen, daß jede
Zeile einzeln ausgegeben werden kann, falls erforderlich. Aber
schlussendlich gibt es keinen Bedarf jede Zeile einzeln
auszugeben, falls nicht-interaktiv genutzt.Die neue Lösung besteht darin, die Funktion
write jedesmal aufzurufen, wenn ich den
Eingabepuffer leer vorfinde. Auf diesem Wege liest das
Programm im interaktiven Modus eine Zeile aus der Tastatur des
Nutzers, verarbeitet sie und stellt fest, ob deren
Eingabepuffer leer ist, dann leert es seine Ausgabe und liest
die nächste Zeile.Die dunkle Seite des BufferingDiese Änderung verhindert einen mysteriösen
Aufhänger in einem speziellen Fall. Ich bezeichne dies
als die dunkle Seite des Buffering,
hauptsächlich, weil es eine nicht offensichtliche
Gefahr darstellt.Es ist unwahrscheinlich, daß dies mit dem
csv-Programm oben geschieht aber
lassen Sie uns einen weiteren Filter betrachten: Nehmen wir
an ihre Eingabe sind rohe Daten, die Farbwerte darstellen,
wie z.B. die Intensität eines Pixel mit den Farben
rot, grün und
blau. Unsere Ausgabe wird der negative
Wert unserer Eingabe sein.Solch ein Filter würde sehr einfach zu schreiben
sein. Der größte Teil davon würde so
aussehen wie all die anderen Filter, die wir bsiher
geschrieben haben, daher beziehe ich mich nur auf den Kern
der Prozedur:.loop:
call getchar
not al ; Create a negative
call putchar
jmp short .loopDa dieser Filter mit rohen Daten arbeitet ist es
unwahrscheinlich, daß er interaktiv genutzt werden
wird.Aber das Programm könnte als
Bildbearbeitssoftware tituliert werden. Wenn es nicht
write vor jedem Aufruf von
read durchführt, ist die
Möglichkeit gegeben, das es sich aufhängt.Dies könnte passieren:Der Bildeditor wird unseren Filter laden mittels der
C-Funktion popen().Er wird die erste Zeile von Pixeln laden aus einer
Bitmap oder Pixmap.Er wird die erste Zeile von Pixeln geschrieben in
die Pipe, welche zur Variable
fd.in unseres Filters
führt.Unser Filter wird jeden Pixel auslesen von der
Eingabe, in in seinen negativen Wert umkehren und ihn in
den Ausgabepuffer schreiben.Unser Filter wird die Funktion
getchar aufrufen, um das
nächste Pixel abzurufen.Die Funktion getchar wird einen
leeren Eingabepuffer vorfinden und daher die Funktion
read aufrufen.read wird den Systemaufruf
SYS_read
starten.Der Kernel wird unseren Filter
unterbrechen, bis der Bildeditor mehr Daten zur Pipe
sendet.Der Bildedior wird aus der anderen Pipe lesen,
welche verbunden ist mit fd.out
unseres Filters, damit er die erste Zeile des
auszugebenden Bildes setzen kann
bevor er uns die zweite Zeile der
Eingabe einliest.Der Kernel unterbricht den
Bildeditor, bis er eine Ausgabe unseres Filters
erhält, um ihn an den Bildeditor
weiterzureichen.An diesem Punkt wartet unser Filter auf den
Bildeditor, daß er ihm mehr Daten zur Verarbeitung
schicken möge. Gleichzeitig wartet der Bildeditor
darauf, daß unser Filter das Resultat der Berechnung
ersten Zeile sendet. Aber das Ergebnis sitzt in unserem
Ausgabepuffer.Der Filter und der Bildeditor werden fortfahren bis in
die Ewigkeit aufeinander zu warten (oder zumindest bis sie
per kill entsorgt werden). Unsere Software hat den eine
Race Condition
erreicht.Das Problem tritt nicht auf, wenn unser Filter seinen
Ausgabepuffer leert bevor er vom
Kernel mehr Eingabedaten
anfordert.FabianBorschelÜbersetzt von Die FPU verwendenSeltsamerweise erwähnt die meiste Literatur zu
Assemblersprachen nicht einmal die Existenz der
FPU, oder
floating point unit
(Fließkomma-Recheneinheit), geschweige denn, daß
auf die Programmierung mit dieser eingeganen wird.Dabei kann die Assemblerprogrammierung gerade bei
hoch optimiertem FPU-Code, der
nur mit einer Assemblersprache realisiert
werden kann, ihre große Stärke ausspielen.Organisation der FPUDie FPU besteht aus 8 80–bit
Fließkomma-Registern. Diese sind in Form eines
Stacks organisiert—Sie können einen Wert durch
den Befehl push auf dem
TOS (top of stack)
ablegen, oder durch pop von diesem
holen.Da also die Befehle push
und pop schon verwendet
werden, kann es keine op-Codes in Assemblersprache mit diesen
Namen geben.Sie können mit einen Wert auf dem
TOS ablegen, indem Sie
fld, fild, und fbld verwenden. Mit weiteren op-Codes
lassen sich Konstanten—wie z.B.
Pi—auf dem TOS
ablegen.Analog dazu können Sie einen Wert
holen, indem Sie fst,
fstp, fist, fistp, und fbstp verwenden. Eigentlich
holen (pop) nur die op-Codes, die auf
p enden, einen Wert, während die
anderen den Wert irgendwo speichern (store)
ohne ihn vom TOS zu entfernen.Daten können zwischen dem TOS
und dem Hauptspeicher als 32–bit, 64–bit oder
80–bit real, oder als 16–bit,
32–bit oder 64–bit Integer,
oder als 80–bit packed decimal
übertragen werden.Das 80–bit packed decimal-Format
ist ein Spezialfall des
binary coded decimal-Formates,
welches üblicherweise bei der Konvertierung zwischen der
ASCII- und
FPU-Darstellung von Daten verwendet wird.
Dieses erlaubt die Verwendung von 18 signifikanten
Stellen.Unabhängig davon, wie Daten im Speicher dargestellt
werden, speichert die FPU ihre Daten immer
im 80–bit real-Format in den
Registern.Ihre interne Genauigkeit beträgt mindestens 19
Dezimalstellen. Selbst wenn wir also Ergebnisse im
ASCII-Format mit voller 18–stelliger
Genauigkeit darstellen lassen, werden immer noch korrekte
Werte angezeigt.Des weiteren können mathematische Operationen auf
dem TOS ausgeführt werden: Wir
können dessen Sinus berechnen, wir
können ihn skalieren (z.B.
können wir ihn mit dem Faktor 2 Multiplizieren oder
Dividieren), wir können dessen
Logarithmus zur Basis 2 nehmen, und viele
weitere Dinge.Wir können auch FPU-Register
multiplizieren,
dividieren, addieren
und subtrahieren, sogar einzelne
Register mit sich selbst.Der offizielle Intel op-Code für den
TOS ist st und für die
Registerst(0)– st(7). st und st(0) beziehen sich dabei auf das
gleiche Register.Aus welchen Gründen auch immer hat sich der
Originalautor von nasm dafür
entschieden, andere op-Codes zu verwenden, nämlich
st0– st7. Mit anderen Worten, es gibt
keine Klammern, und der TOS ist immer
st0, niemals einfach nur
st.Das Packed Decimal-FormatDas packed decimal-Format verwendet
10 Bytes (80 Bits) zur Darstellung von 18 Ziffern. Die so
dargestellte Zahl ist immer ein
Integer.Sie können durch Multiplikation des
TOS mit Potenzen von 10 die einzelnen
Dezimalstellen verschieben.Das höchste Bit des höchsten Bytes (Byte 9)
ist das Vorzeichenbit:
Wenn es gesetzt ist, ist die Zahl
negativ, ansonsten
positiv. Die restlichen Bits dieses
Bytes werden nicht verwendet bzw. ignoriert.Die restlichen 9 Bytes enthalten die 18 Ziffern der
gepeicherten Zahl: 2 Ziffern pro Byte.Die signifikantere Ziffer wird in
der oberen Hälftes (4 Bits) eines
Bytes gespeichert, die andere in der
unteren Hälfte.Vielleicht würden Sie jetzt annehmen, das
-1234567 auf die folgende Art im
Speicher abgelegt wird (in hexadezimaler Notation):80 00 00 00 00 00 01 23 45 67Dem ist aber nicht so! Bei Intel werden alle Daten im
little–endian-Format gespeichert,
auch das packed decimal-Format.Dies bedeutet, daß -1234567
wie folgt gespeichert wird:67 45 23 01 00 00 00 00 00 80Erinnern Sie sich an diesen Umstand, bevor Sie sich
aus lauter Verzweiflung die Haare
ausreißen.Das lesenswerte Buch—falls Sie es finden
können—ist Richard Startz'
8087/80287/80387 for the IBM PC & Compatibles.
Obwohl es anscheinend die Speicherung der packed
decimal im little–endian-Format für
gegeben annimmt. Ich mache keine Witze über meine
Verzweifelung, als ich den Fehler im unten stehenden Filter
gesucht habe, bevor mir einfiel,
daß ich einfach mal versuchen sollte, das
little–endian-Format, selbst für diesen Typ von
Daten, anzuwenden.Ausflug in die LochblendenphotographieUm sinvolle Programme zu schreiben, müssen wir nicht
nur unsere Programmierwerkzeuge beherrschen, sondern auch das
Umfeld, für das die Programme gedacht sind.Unser nächster Filter wird uns dabei helfen, wann
immer wir wollen, eine Lochkammera zu
bauen. Wir brauchen also etwas Hintergrundwissen über
die Lochblendenphotographie, bevor wir
weiter machen können.Die KameraDie einfachste Form, eine Kamera zu beschreiben, ist
die eines abgeschlossenen, lichtundurchlässigen
Raumes, in dessen Abdeckung sich ein kleines Loch
befindet.Die Abdeckung ist normalerweise fest (z.B. eine
Schachtel), manchmal jedoch auch flexibel (z.B. ein Balgen).
Innerhalb der Kamera ist es sehr dunkel. Nur durch ein
kleines Loch kann Licht von einem einzigen Punkt aus in den
Raum eindringen (in manchen Fällen sind es mehrere
Löcher). Diese Lichtstrahlen kommen von einem Bild,
einer Darstellung von dem was sich außerhalb der
Kamera, vor dem kleinen Loch, befindet.Wenn ein lichtempfindliches Material (wie z.B. ein Film)
in der Kamera angebracht wird, so kann dieses das Bild
einfangen.Das Loch enthält häufig eine
Linse, oder etwas linsenartiges,
häufig auch einfach Objektiv
genannt.Die LochblendeStreng genommen ist die Linse nicht notwendig: Die
ursprünglichen Kameras verwendeten keine Linse, sondern
eine Lochblende. Selbst heutzutage
werden noch Lochblenden verwendet,
zum einen, um die Funktionsweise einer Kamera zu erlernen,
und zum anderen, um eine spezielle Art von Bildern zu
erzeugen.Das Bild, das von einer Lochblende
erzeugt wird, ist überall scharf. Oder unscharf. Es
gibt eine ideale Größe für eine Lochblende:
Wenn sie größer oder kleiner ist, verliert das
Bild seine Schärfe.BrennweiteDieser ideale Lochblendendurchmesser ist eine Funktion
der Quadratwurzel der Brennweite,
welche dem Abstand der Lochblende von dem Film
entspricht. D = PC * sqrt(FL)Hier ist D der ideale Durchmesser der
Lochblende, FL die Brennweite und
PC eine Konstante der Brennweite. Nach
Jay Bender hat die Konstante den Wert
0.04, nach Kenneth Connors
0.037. Andere Leute
haben andere Werte vorgeschlagen. Des weiteren gelten diese
Werte nur für Tageslicht: Andere Arten von
Licht benötigen andere konstante Werte, welche nur
durch Experimente bestimmt werden können.Der f–WertDer f–Wert ist eine sehr nützliche
Größe, die angibt, wieviel Licht den Film erreicht.
Ein Belichtungsmesser kann dies messen, um z.B. für
einen Film mit einer Empfindlichkeit von f5.6 eine
Belichtungsdauer von 1/1000 Sekunden auszurechnen.Es spielt keine Rolle, ob es eine 35–mm- oder
eine 6x9cm-Kamera ist, usw. Solange wir den f–Wert
kennen, können wir die benötigte Belichtungszeit
berechnen.Der f–Wert läßt sich einfach wie folgt
berechnen: F = FL / DMit anderen Worten, der f–Wert ergibt sich aus
der Brennweite (FL), dividiert durch den Durchmesser (D) der
Lochblende. Ein großer f–Wert impliziert also
entweder eine kleine Lochblende, oder eine große
Brennweite, oder beides. Je größer also der
f–Wert ist, um so länger muß die
Belichtungszeit sein.Des weiteren sind der Lochblendendurchmesser und die
Brennweite eindimensionale Meßgrößen,
während der Film und die Lochblende an sich
zweidimensionale Objekte darstellen. Das bedeutet, wenn
man für einen f–Wert A
eine Belichtungsdauer t bestimmt hat,
dann ergibt sich daraus für einen f–Wert
B eine Belichtungszeit von: t * (B / A)²Normalisierte f–WerteWährend heutige moderne Kameras den Durchmesser
der Lochblende, und damit deren f–Wert, weich und
schrittweise verändern können, war dies
früher nicht der Fall.Um unterschiedliche f–Werte einstellen zu
können, besaßen Kameras typischerweise eine
Metallplatte mit Löchern unterschiedlichen
Durchmessers als Lochblende.Die Durchmesser wurden entsprechend obiger Formel
gewählt, daß der resultierende f–Wert
ein fester Standardwert war, der für alle Kameras
verwendet wurde. Z.B. hat eine sehr alte Kodak Duaflex
IV Kamera in meinem Besitz drei solche Löcher
für die f–Werte 8, 11 und 16.Eine neuere Kamera könnte f–Werte wie 2.8,
4, 5.6, 8, 11, 16, 22, und 32 (und weitere) besitzen.
Diese Werte wurden nicht zufällig ausgewählt:
Sie sind alle vielfache der Quadratwurzel aus 2, wobei
manche Werte gerundet wurden.Der f–StoppEine typische Kamera ist so konzipiert, daß die
Nummernscheibe bei den normalisierten f–Werten
einrastet. Die Nummernscheibe stoppt
an diesen Positionen. Daher werden diese Positionen auch
f–Stopps genannt.Da die f–Werte bei jedem Stopp vielfache der
Quadratwurzel aus 2 sind, verdoppelt die Drehung der
Nummernscheibe um einen Stopp die für die gleiche
Belichtung benötigte Lichtmenge. Eine Drehung
um 2 Stopps vervierfacht die benötigte Belichtungszeit.
Eine Drehung um 3 Stopps verachtfacht sie, etc.Entwurf der Lochblenden-SoftwareWir können jetzt festlegen, was genau unsere
Lochblenden-Software tun soll.Verarbeitung der ProgrammeingabenDa der Hauptzweck des Programms darin besteht, uns
beim Entwurf einer funktionierenden Lochkamera zu
helfen, wird die Brennweite
die Programmeingabe sein. Dies ist etwas, das wir ohne
zusätzliche Programme feststellen können:
Die geeignete Brennweite ergibt sich aus der
Größe des Films und der Art des Fotos, ob
dieses ein "normales" Bild, ein Weitwinkelbild oder
ein Telebild sein soll.Die meisten bisher geschriebenen Programme arbeiteten
mit einzelnen Zeichen, oder Bytes, als Eingabe: Das
hex-Programm konvertierte
einzelne Bytes in hexadezimale Werte, das
csv-Programm ließ entweder
einzelne Zeichen unverändert, löschte oder
veränderte sie, etc.Das Programm ftuc verwendete
einen Zustandsautomateni, um höchstens zwei gleichzeitig
eingegebene Bytes zu verarbeiten.Das pinhole-Programm dagegen
kann nicht nur mit einzelnen Zeichen arbeiten, sondern
muß mit größeren syntaktischen Einheiten
zurrecht kommen.Wenn wir z.B. möchten, daß unser Programm den
Lochblendendurchmesser (und weitere Werte, die wir
später noch diskutieren werden) für die Brennweiten
100 mm, 150 mm und
210 mm berechnet, wollen wir etwa
folgendes eingeben:100, 150, 210Unser Programm muß mit der gleichzeitigen Eingabe
von mehr als nur einem einzelnen Byte zurecht kommen. Wenn
es eine 1 erkennt, muß es wissen,
daß dies die erste Stelle einer dezimalen Zahl ist.
Wenn es eine 0, gefolgt von einer
weiteren 0 sieht, muß es wissen,
daß dies zwei unterschiedliche Stellen mit der
gleichen Zahl sind.Wenn es auf das erste Komma trifft, muß es wissen,
daß die folgenden Stellen nicht mehr zur ersten
Zahl gehören. Es muß die Stellen der ersten
Zahl in den Wert 100 konvertieren
können. Und die Stellen der zweiten Zahl müssen
in den Wert 150 konvertiert werden.
Und die Stellen der dritten Zahl müssen in den Wert
210 konvertiert werden.Wir müssen festlegen, welche Trennsymbole
zulässig sind: Sollen die Eingabewerte durch Kommas
voneinander getrennt werden? Wenn ja, wie sollen zwei
Zahlen behandelt werden, die durch ein anderes Zeichen
getrennt sind?Ich persönlich mag es einfach. Entweder etwas ist
eine Zahl, dann wird es verarbeitet, oder es ist keine
Zahl, dann wird es verworfen. Ich mag es nicht, wenn sich der
Computer bei der offensichtlichen
Eingabe eines zusätzlichen Zeichens beschwert.
Duh!Zusätzlich erlaubt es mir, die Monotonie des
Tippens zu durchbrechen, und eine Anfrage anstelle einer
simplen Zahl zu stellen:Was ist der beste Lochblendendurchmesser
bei einer Brennweite von 150?Es gibt keinen Grund dafür, die Ausgabe mehrerer
Fehlermeldungen aufzuteilen:Syntax error: Was
Syntax error: ist
Syntax error: der
Syntax error: besteEt cetera, et cetera, et cetera.Zweitens mag ich das #-Zeichen, um
Kommentare zu markieren, die ab dem Zeichen bis zum Ende der
jeweiligen Zeile gehen. Dies verlangt nicht viel
Programmieraufwand, und ermöglicht es mir, Eingabedateien
für meine Programme als ausführbare Skripte zu
handhaben.In unserem Fall müssen wir auch entscheiden, in
welchen Einheiten die Dateneingabe erfolgen soll: Wir
wählen Millimeter, da die meisten
Photographen die Brennweite in dieser Einheit messen.Letztendlich müssen wir noch entscheiden, ob wir die
Verwendung des dezimalen Punktes erlauben (in diesem Fall
müssen wir berücksichtigen, daß in vielen
Ländern der Welt das dezimale Komma
verwendet wird).In unserem Fall würde das Zulassen eines dezimalen
Punktes/Kommas zu einer fälschlicherweise angenommenen,
höheren Genauigkeit führen: Der Unterschied
zwischen den Brennweiten 50 und
51 ist fast nicht wahrnehmbar. Die
Zulassung von Eingaben wie 50.5 ist
also keine gute Idee. Beachten Sie bitte, das dies meine
Meinung ist. In diesem Fall bin ich der Autor des Programmes.
Bei Ihren eigenen Programmen müssen Sie selbst solche
Entscheidungen treffen.Optionen anbietenDas wichtigste, was wir zum Bau einer Lochkamera
wissen müssen, ist der Durchmesser der Lochblende. Da
wir scharfe Bilder schießen wollen, werden wir obige
Formel für die Berechnung des korrekten Durchmessers zu
gegebener Brennweite verwenden. Da Experten mehrere
Werte für die PC-Konstante
anbieten, müssen wir uns hier für einen Wert
entscheiden.In der Programmierung unter &unix; ist es üblich,
zwei Hauptvarianten anzubieten, um Parameter an Programme zu
übergeben, und des weiteren eine Standardeinstellung
für den Fall zu haben, das der Benutzer gar keine
Parameter angibt.Warum zwei Varianten, Parameter anzugeben?Ein Grund ist, eine (relativ) feste
Einstellung anzubieten, die automatisch bei jedem
Programmaufruf verwendet wird, ohne das wir diese
Einstellung immer und immer wieder mit angeben
müssen.Die feste Einstellung kann in einer Konfigurationsdatei
gespeichert sein, typischerweise im Heimatverzeichnis des
Benutzers. Die Datei hat üblicherweise denselben Namen
wie das zugehörige Programm, beginnt jedoch mit einem
Punkt. Häufig wird "rc" dem
Dateinamen hinzugefügt. Unsere Konfigurationsdatei
könnte also ~/.pinhole oder
~/.pinholerc heißen. (Die
Zeichenfolge ~/ steht für das
Heimatverzeichnis des aktuellen Benutzers.)Konfigurationsdateien werden häfig von Programmen
verwendet, die viele konfigurierbare Parameter besitzen.
Programme, die nur eine (oder wenige) Parameter anbieten,
verwenden häufig eine andere Methode: Sie erwarten die
Parameter in einer Umgebungsvariablen.
In unserem Fall könnten wir eine Umgebungsvariable mit
dem Namen PINHOLE benutzen.Normalerweise verwendet ein Programm entweder die eine,
oder die andere der beiden obigen Methoden. Ansonsten
könnte ein Programm verwirrt werden, wenn eine
Konfigurationsdatei das eine sagt, die Umgebungsvariable
jedoch etwas anderes.Da wir nur einen Parameter
unterstützen müssen, verwenden wir die zweite
Methode, und benutzen eine Umgebungsvariable mit dem
Namen PINHOLE.Der andere Weg erlaubt uns, ad hoc
Entscheidungen zu treffen: "Obwohl ich
normalerweise einen Wert von 0.039 verwende, will ich dieses
eine Mal einen Wert von 0.03872 anwenden."
Mit anderen Worten, dies erlaubt uns, die Standardeinstellung
außer Kraft zu setzen.Diese Art der Auswahl wird häufig über
Kommandozeilenparameter gemacht.Schließlich braucht ein Programm
immer eine
Standardeinstellung. Der Benutzer
könnte keine Parameter angeben. Vielleicht weiß
er auch gar nicht, was er einstellen sollte. Vielleicht will
er es "einfach nur ausprobieren". Vorzugsweise wird die
Standardeinstellung eine sein, die die meisten Benutzer
sowieso wählen würden. Somit müssen diese
keine zusätzlichen Parameter angeben, bzw. können
die Standardeinstellung ohne zusätzlichen Aufwand
benutzen.Bei diesem System könnte das Programm
widersprüchliche Optionen vorfinden, und auf die
folgende Weise reagieren:Wenn es eine ad
hoc-Einstellung vorfindet (z.B. ein
Kommandozeilenparameter), dann sollte es diese
Einstellung annehmen. Es muß alle vorher
festgelegten sowie die standardmäßige
Einstellung ignorieren.Andererseits, wenn es eine
festgelegte Option (z.B. eine Umgebungsvariable)
vorfindet, dann sollte es diese akzeptieren und die
Standardeinstellung ignorieren.Ansonsten sollte es die
Standardeinstellung verwenden.Wir müssen auch entscheiden, welches
Format unsere
PC-Option haben soll.Auf den ersten Blick scheint es einleuchtend, das
Format PINHOLE=0.04 für die
Umgebungsvariable, und -p0.04
für die Kommandozeile zu verwenden.Dies zuzulassen wäre eigentlich eine
Sicherheitslücke. Die PC-Konstante
ist eine sehr kleine Zahl. Daher würden wir unsere
Anwendung mit verschiedenen, kleinen Werten für
PC testen. Aber was würde
passieren, wenn jemand das Programm mit einem sehr
großen Wert aufrufen würde?Es könnte abstürzen, weil wir das Programm
nicht für den Umgang mit großen Werten
entworfen haben.Oder wir investieren noch weiter Zeit in das Programm,
so daß dieses dann auch mit großen Zahlen
umgehen kann. Wir könnten dies machen, wenn wir
kommerzielle Software für computertechnisch
unerfahrene Benutzer schreiben würden.Oder wir könnten auch sagen "Pech gehabt!
Der Benutzer sollte es besser wissen."Oder wir könnten es für den Benutzer
unmöglich machen, große Zahlen einzugeben. Dies
ist die Variante, die wir verwenden werden: Wir nehmen einen
impliziten 0.-Präfix an.Mit anderen Worten, wenn der Benutzer den Wert
0.04 angeben will, so muß er
entweder -p04 als Parameter angeben,
oder PINHOLE=04 als Variable in seiner
Umgebung definieren. Falls der Benutzer
-p9999999 angibt, so wird dies als
0.9999999 interpretiert—zwar
immer noch sinnlos, aber zumindest sicher.Zweitens werden viele Benutzer einfach die Konstanten
von Bender oder Connors benutzen wollen. Um es diesen
Benutzern einfacher zu machen, werden wir
-b als -p04,
und -c als
-p037 interpretieren.Die AusgabeWir müssen festlegen, was und in welchem Format
unsere Anwendung Daten ausgeben soll.Da wir als Eingabe beliebig viele Brennweiten
erlauben, macht es Sinn, die Ergebnisse in Form
einer traditionellen Datenbank–Ausgabe darzustellen,
bei der zeilenweise zu jeder Brennweite der
zugehörige berechnete Wert, getrennt durch ein
tab-Zeichen, ausgegeben wird.Optional sollten wir dem Benutzer die Möglichkeit
geben, die Ausgabe in dem schon beschriebenen
CSV-Format festzulegen. In diesem Fall
werden wir zu Beginn der Ausgabe eine Zeile einfügen,
in der die Beschreibungen der einzelnen Felder, durch
Kommas getrennt, aufgelistet werden, gefolgt von der Ausgabe
der Daten wie schon beschrieben, wobei das
tab-Zeichen durch ein
Komma ersetzt wird.Wir brauchen eine Kommandozeilenoption für das
CSV-Format. Wir können nicht
-c verwenden, da diese Option bereits
für verwende Connors Konstante
steht. Aus irgendeinem seltsamen Grund bezeichnen
viele Webseiten CSV-Dateien als
"Excel Kalkulationstabelle" (obwohl das
CSV-Format älter ist als Excel). Wir
werden daher -e als Schalter für
die Ausgabe im CSV-Format
verwenden.Jede Zeile der Ausgabe wird mit einer Brennweite
beginnen. Dies mag auf den ersten Blick überflüssig
erscheinen, besonders im interaktiven Modus: Der Benutzer
gibt einen Wert für die Brennweite ein, und das Programm
wiederholt diesen.Der Benutzer kann jedoch auch mehrere Brennweiten
in einer Zeile angeben. Die Eingabe kann auch aus einer Datei,
oder aus der Ausgabe eines anderen Programmes, kommen. In
diesen Fällen sieht der Benutzer die Eingabewerte
überhaupt nicht.Ebenso kann die Ausgabe in eine Datei umgelenkt werden,
was wir später noch untersuchen werden, oder sie
könnte an einen Drucker geschickt werden, oder auch
als Eingabe für ein weiteres Programm dienen.Es macht also wohl Sinn, jede Zeile mit einer durch den
Benutzer eingegebenen Brennweite beginnen zu lassen.Halt! Nicht, wie der Benutzer die Daten eingegeben hat.
Was passiert, wenn der Benutzer etwas wie folgt
eingibt:00000000150Offensichtlich müssen wir die führenden Nullen
vorher abschneiden.Wir müssen also die Eingabe des Benutzers
sorgfältig prüfen, diese dann in der
FPU in die binäre Form konvertieren,
und dann von dort aus ausgeben.Aber...Was ist, wenn der Benutzer etwas wie folgt eingibt:17459765723452353453534535353530530534563507309676764423Ha! Das packed decimal-Format der FPU
erlaubt uns die Eingabe einer 18–stelligen
Zahl. Aber der Benutzer hat mehr als 18 Stellen eingegeben.
Wie gehen wir damit um?Wir könnten unser Programm
so modifizieren, daß es die ersten 18 Stellen liest,
der FPU übergibt, dann weitere
18 Stellen liest, den Inhalt des TOS
mit einem Vielfachen von 10, entsprechend der Anzahl der
zusätzlichen Stellen multipliziert, und dann beide
Werte mittels add zusammen
addiert.Ja, wir könnten das machen. Aber in
diesem Programm wäre es
unnötig (in einem anderen wäre es vielleicht
der richtige Weg): Selbst der Erdumfang in Millimetern ergibt
nur eine Zahl mit 11 Stellen. Offensichtlich können wir
keine Kamera dieser Größe bauen (jedenfalls jetzt
noch nicht).Wenn der Benutzer also eine so große Zahl eingibt,
ist er entweder gelangweilt, oder er testet uns, oder er
versucht, in das System einzudringen, oder er spielt—
indem er irgendetwas anderes macht als eine Lochkamera
zu entwerfen.Was werden wir tun?Wir werden ihn ohrfeigen, gewissermaßen:17459765723452353453534535353530530534563507309676764423 ??? ??? ??? ??? ???Um dies zu erreichen, werden wir einfach alle
führenden Nullen ignorieren. Sobald wir eine Ziffer
gefunden haben, die nicht Null ist, initialisieren wir
einen Zähler mit 0 und
beginnen mit drei Schritten:Sende die Ziffer an die Ausgabe.Füge die Ziffer einem Puffer hinzu, welchen wir
später benutzen werden, um den packed decimal-Wert
zu erzeugen, den wir an die
FPU schicken können.Erhöhe den Zähler um eins.Während wir diese drei Schritte wiederholen,
müssen wir auf zwei Bedingungen achten:Wenn der Zähler den Wert 18 übersteigt,
hören wir auf, Ziffern dem Puffer hinzuzufügen.
Wir lesen weiterhin Ziffern und senden sie an die
Ausgabe.Wenn, bzw. falls, das
nächste Eingabezeichen keine Zahl ist, sind wir mit
der Bearbeitung der Eingabe erst einmal fertig.Übrigends können wir einfach Zeichen, die
keine Ziffern sind, verwerfen, solange sie kein
#-Zeichen sind, welches wir an den
Eingabestrom zurückgeben müssen. Dieses Zeichen
markiert den Beginn eines Kommentars. An dieser Stelle
muß die Erzeugung der Ausgabe fertig sein, und wir
müssen mit der Suche nach weiteren Eingabedaten
fortfahren.Es bleibt immer noch eine Möglichkeit
unberücksichtigt: Wenn der Benutzer eine Null (oder
mehrere) eingibt, werden wir niemals eine von Null
verschiedene Zahl vorfinden.Wir können solch einen Fall immer anhand des
Zählerstandes feststellen, welcher dann
immer bei 0 bleibt. In diesem Fall
müssen wir einfach eine 0 an
die Ausgabe senden, und anschließend dem Benutzer
erneut eine "Ohrfeige" verpassen:0 ??? ??? ??? ??? ???Sobald wir die Brennweite ausgegeben, und die
Gültigkeit dieser Eingabe verifiziert haben,
(größer als 0 und kleiner
als 18 Zahlen) können wir den Durchmesser der
Lochblende berechnen.Es ist kein Zufall, daß
Lochblende das Wort
Loch enthält. In der Tat ist eine
Lochblende buchstäblich eine
Loch Blende, also eine Blende, in die
mit einer Nadel vorsichtig ein kleines Loch gestochen
wird.Daher ist eine typische Lochblende sehr klein. Unsere
Formel liefert uns das Ergebnis in Millimetern. Wir werden
dieses mit 1000 multiplizieren, so
daß die Ausgabe in Mikrometern
erfolgt.An dieser Stelle müssen wir auf eine weitere Falle
achten: Zu hohe Genauigkeit.Ja, die FPU wurde für
mathematische Berechnungen mit hoher Genauigkeit entworfen.
Unsere Berechnungen hier erfordern jedoch keine solche
mathematische Genauigkeit. Wir haben es hier mit Physik zu
tun (Optik, um genau zu sein).Angenommen, wir wollten aus eine Lastkraftwagen eine
Lochkamera bauen (wir wären dabei nicht die
ersten, die das versuchen würden!). Angenommen, die
Länge des Laderaumes beträgt 12
Meter lang, so daß wir eine Brennweite von
12000 hätten. Verwenden wir
Benders Konstante, so erhalten wir durch Multiplizieren
von 0.04 mit der Quadratwurzel aus
12000 einen Wert von
4.381780460 Millimetern, oder
4381.780460 Micrometern.So oder so ist das Rechenergebnis absurd präzise.
Unser Lastkraftwagen ist nicht genau12000 Millimeter lang. Wir haben
diese Länge nicht mit einer so hohen Genauigkeit
gemessen, weswegen es falsch wäre zu behaupten,
unser Lochblendendurchmesser müsse exakt
4.381780460 Millimeter sein. Es
reicht vollkommen aus, wenn der Durchmesser
4.4 Millimeter beträgt.Ich habe in obigem Beispiel das Rechenergebnis "nur"
auf 10 Stellen genau angegeben. Stellen Sie sich vor,
wie absurd es wäre, die vollen uns zur Verfügung
stehenden, 18 Stellen anzugeben!Wir müssen also die Anzahl der signifikanten Stellen
beschränken. Eine Möglichkeit wäre, die
Mikrometer durch eine ganze Zahl darzustellen. Unser
Lastkraftwaren würde dann eine Lochblende mit einem
Durchmesser von 4382 Mikrometern
benötigen. Betrachten wir diesen Wert, dann stellen wir
fest, das 4400 Mikrometer, oder
4.4 Millimeter, immer noch genau
genug ist.Zusätzlich können wir noch, unabhägig von
der Größe eines Rechenergebnisses, festlegen,
daß wir nur vier signifikante Stellen anzeigen wollen
(oder weniger). Leider bietet uns die FPU
nicht die Möglichkeit, das Ergebnis automatisch bis
auf eine bestimmte Stelle zu runden (sie sieht die Daten ja
nicht als Zahlen, sondern als binäre Daten an).Wir müssen also selber einen Algorithmus entwerfen,
um die Anzahl der signifikanten Stellen zu reduzieren.Hier ist meiner (ich denke er ist peinlich—wenn
Ihnen ein besserer Algorithmus einfällt, verraten sie
ihn mir bitte):Initialisiere einen Zähler mit
0.Solange die Zahl größer oder gleich
10000 ist, dividiere die Zahl durch
10, und erhöhe den Zähler
um eins.Gebe das Ergebnis aus.Solange der Zähler größer als
0 ist, gebe eine
0 aus, und reduziere den Zähler
um eins.Der Wert 10000 ist nur für
den Fall, daß Sie vier
signifikante Stellen haben wollen. Für eine andere
Anzahl signifikanter Stellen müssen Sie den Wert
10000 mit 10,
hoch der Anzahl der gewünschten signifikanten Stellen,
ersetzen.Wir können so den Lochblendendurchmesser, auf vier
signifikante Stellen gerundet, ausgeben.An dieser Stellen kennen wir nun die Brennweite
und den
Lochblendendurchmesser. Wir haben also
jetzt genug Informationen, um den
f–Wert zu bestimmen.Wir werden den f–Wert, auf vier signifikante
Stellen gerundet, ausgeben. Es könnte passieren,
daß diese vier Stellen recht wenig aussagen. Um die
Aussagekraft des f–Wertes zu erhöhen, könnten
wir den nächstliegenden, normalisierten
f–Wert bestimmen, also z.B. das
nächstliegende Vielfache der Quadratwurzel aus 2.Wir erreichen dies, indem wir den aktuellen f–Wert
mit sich selbst multiplizieren, so daß wir dessen
Quadrat (square) erhalten.
Anschließend berechnen wir den Logarithmus zur Basis 2
von dieser Zahl. Dies ist sehr viel einfacher, als direkt den
Logarithmus zur Basis der Quadratwurzel aus 2 zu berechnen!
Wir runden dann das Ergebnis auf die nächstliegende
ganze Zahl. Genau genommen können wir mit Hilfe der
FPU diese Berechnung beschleunigen: Wir
können den op-Code
fscale verwenden, um eine
Zahl um 1 zu "skalieren", was dasselbe ist, wie eine Zahl
mittels shift um eine
Stelle nach links zu verschieben. Am Ende berechnen wir noch
die Quadratwurzel aus allem, und erhalten dann den
nächstliegenden, normalisierten f–Wert.Wenn das alles jetzt viel zu kompliziert wirkt—oder
viel zu aufwendig—wird es vielleicht klarer, wenn man
den Code selber betrachtet. Wir benötigen insgesamt
9 op-Codes:fmul st0, st0
fld1
fld st1
fyl2x
frndint
fld1
fscale
fsqrt
fstp st1Die erste Zeile,
fmul st0, st0, quadriert
den Inhalt des TOS (Top Of Stack, was
dasselbe ist wie st, von
nasm auch
st0 genannt). Die Funktion
fld1 fügt eine
1 dem TOS
hinzu.Die nächste Zeile, fld
st1, legt das Quadrat auf dem
TOS ab. An diesem Punkt befindet sich das
Quadrat sowohl in st als
auch in st(2) (es wird
sich gleich zeigen, warum wir eine zweite Kopie auf dem
Stack lassen.) st(1)
enthält die 1.Im nächsten Schritt, fyl2x, wird der Logarithmus von
st zur Basis 2 berechnet,
und anschließend mit st(1) multipliziert. Deshalb haben
wir vorher die 1 in st(1) abgelegt.An dieser Stelle enthält
st den gerade berechneten
Logarithmus, und st(1)
das Quadrat des aktuellen f–Wertes, den wir für
später gespeichert haben.frndint rundet den
TOS zur nächstliegenden ganzen Zahl.
fld1 legt eine
1 auf dem Stack ab.
fscale shiftet die
1 auf dem TOS um
st(1) Stellen, wodurch im
Endeffekt eine 2 in st(1)
steht.Schließlich berechnet
fsqrt die Quadratwurzel
des Rechenergebnisses, also des nächstliegenden,
normalisierten f–Wertes.Wir haben nun den nächstliegenden, normalisierten
f–Wert auf dem TOS liegen, den auf
den Logarithmus zur Basis 2 gerundeten, nächstliegenden
ganzzahligen Wert in st(1), und das Quadrat des
aktuellen f–Wertes in st(2). Wir speichern den Wert
für eine spätere Verwendung in st(2).Aber wir brauchen den Inhalt von
st(1) gar nicht mehr. Die
letzte Zeile, fstp st1,
plaziert den Inhalt von st
in st(1), und erniedrigt
den Stackpointer um eins. Dadurch ist der Inhalt von
st(1) jetzt
st, der Inhalt von
st(2) jetzt
st(1) usw. Der neue
st speichert jetzt den
normalisierten f–Wert. Der neue
st(1) speichert das
Quadrat des aktuellen f–Wertes für die
Nachwelt.Jetzt können wir den normalisierten f–Wert
ausgeben. Da er normalisiert ist, werden wir ihn nicht auf
vier signifikante Stellen runden, sondern stattdessen
mit voller Genauigkeit ausgeben.Der normalisierte f–Wert ist nützlich, solange
er so klein ist, daß wir ihn auf einem Photometer
wiederfinden können. Ansonsten brauchen wir eine andere
Methode, um die benötigten Belichtungsdaten zu
bestimmen.Wir haben weiter oben eine Formel aufgestellt, über
die wir einen f–Wert mit Hilfe eines anderen
f–Wertes und den zugehörigen Belichtungsdaten
bestimmen können.Jedes Photometer, das ich jemals gesehen habe, konnte
die benötigte Belichtungszeit für f5.6 berechnen.
Wir werden daher einen
"f5.6 Multiplizierer" berechnen, der
uns den Faktor angibt, mit dem wir die bei f5.6 gemessene
Belichtungszeit für unsere Lochkamera multiplizieren
müssen.Durch die Formel wissen wir, daß dieser Faktor
durch Dividieren unseres f–Wertes (der aktuelle Wert,
nicht der normalisierte) durch 5.6
und anschließendes Quadrieren, berechnen
können.Mathematisch äquivalent dazu wäre, wenn wir
das Quadrat unseres f–Wertes durch das Quadrat von
5.6 dividieren würden.Numerisch betrachtet wollen wir nicht zwei Zahlen
quadrieren, wenn es möglich ist, nur
eine Zahl zu quadrieren. Daher wirkt die erste Variante
auf den ersten Blick besser.Aber...5.6 ist eine
Konstante. Wir müssen nicht
wertvolle Rechenzeit der FPU verschwenden.
Es reicht aus, daß wir die Quadrate der einzelnen
f–Werte durch den konstanten Wert
5.6² dividieren. Oder wir
können den jeweiligen f–Wert durch
5.6 dividieren, und dann das Ergebnis
quadrieren. Zwei Möglichkeiten, die gleich
erscheinen.Aber das sind sie nicht!Erinnern wir uns an die Grundlagen der Photographie
weiter oben, dann wissen wir, daß sich die
Konstante 5.6 aus dem 5-fachen der
Quadratwurzel aus 2 ergibt. Eine
irrationale Zahl. Das Quadrat dieser
Zahl ist exakt32.32 ist nicht nur eine ganze Zahl,
sondern auch ein Vielfaches von 2. Wir brauchen also
gar nicht das Quadrat eines f–Wertes durch
32 zu teilen. Wir müssen lediglich
mittels fscale den
f–Wert um fünf Stellen nach rechts shiften.
Aus Sicht der FPU müssen wir also
fscale mit
st(1), welcher gleich
-5 ist, auf den f–Wert anwenden.
Dies ist sehr viel schneller als die
Division.Jetzt wird es auch klar, warum wir das Quadrat des
f–Wertes ganz oben auf dem Stack der
FPU gespeichert haben. Die Berechnung
des f5.6 Multiplizierers ist die einfachste Berechnung
des gesamten Programmes! Wir werden das Ergebnis auf vier
signifikante Stellen gerundet ausgeben.Es gibt noch eine weitere nützliche Zahl, die wir
berechnen können: Die Anzahl der Stopps, die unser
f–Wert von f5.6 entfernt ist. Dies könnte
hilfreich sein, wenn unser f–Wert außerhalb des
Meßbereiches unseres Photometers liegt, wir aber eine
Blende haben, bei der wir unterschiedliche Geschwindigkeiten
einstellen können, und diese Blende Stopps
benutzt.Angenommen, unser f–Wert ist 5 Stopps von f5.6
entfernt, und unser Photometer sagt uns, daß wir eine
Belichtungszeit von 1/1000 Sek. einstellen sollen. Dann
können wir unsere Blende auf die Geschwindigkeit 1/1000
einstellen, und unsere Skala um 5 Stopps verschieben.Diese Rechnung ist ebenfalls sehr einfach. Alles, was
wir tun müssen, ist, den Logarithmus des f5.6
Multiplizierers, den wir schon berechnet haben (wobei wir
dessen Wert vor der Rundung nehmen müssen) zur Basis 2
zu nehmen. Wir runden dann das Ergebnis zur nächsten
ganzen Zahl hin, und geben dies aus. Wir müssen uns
nicht darum kümmern, ob wir mehr als vier signifikante
Stellen haben: Das Ergebnis besteht
höchstwahrscheinlich nur aus einer oder zwei
Stellen.FPU OptimierungenIn Assemblersprache können wir den Code für die
FPU besser optimieren, als in einer der
Hochsprachen, inklusive C.Sobald eine C-Funktion die Berechnung einer
Fließkommazahl durchführen will, lädt sie erst
einmal alle benötigten Variablen und Konstanten in die
Register der FPU. Dann werden die
Berechnungen durchgeführt, um das korrekte Ergebnis zu
erhalten. Gute C-Compiler können diesen Teil des Codes
sehr gut optimieren.Das Ergebnis wird "zurückgegeben", indem dieses auf
dem TOS abgelegt wird. Vorher wird
aufgeräumt. Sämtliche Variablen und Konstanten, die
während der Berechnung verwendet wurden, werden dabei
aus der FPU entfernt.Was wir im vorherigen Abschnitt selber getan haben, kann so
nicht durchgeführt werden: Wir haben das Quadrat des
f–Wertes berechnet, und das Ergebnis für eine
weitere Berechnung mit einer anderen Funktion auf dem Stack
behalten.Wir wußten, daß wir
diesen Wert später noch einmal brauchen würden. Wir
wußten auch, daß auf dem Stack genügend Platz
war (welcher nur Platz für 8 Zahlen bietet), um den Wert
dort zu speichern.Ein C-Compiler kann nicht wissen, ob ein Wert auf dem
Stack in naher Zukunft noch einmal gebraucht wird.Natürlich könnte der C-Programmierer dies wissen.
Aber die einzige Möglichkeit, die er hat, ist, den Wert
im verfügbaren Speicher zu halten.Das bedeutet zum einen, daß der Wert mit der
FPU-internen, 80-stelligen
Genauigkeit in einer normalen C-Variable vom Typ
double (64 Bit) oder vom Typ
single (32 Bit) gespeichert wird.Dies bedeutet außerdem, daß der Wert aus dem
TOS in den Speicher verschoben werden
muß, und später wieder zurück. Von allen
Operationen mit der FPU ist der Zugriff
auf den Speicher die langsamste.Wann immer also mit der FPU in einer
Assemblersprache programmiert wird, sollte nach
Möglichkeiten gesucht werden, Zwischenergebnisse auf dem
Stack der FPU zu lassen.Wir können mit dieser Idee noch einen Schritt weiter
gehen! In unserem Programm verwenden wir eine
Konstante (die wir PC
genannt haben).Es ist unwichtig, wieviele Lochblendendurchmesser wir
berechnen: 1, 10, 20, 1000, wir verwenden immer dieselbe
Konstante. Daher können wir unser Programm so optimieren,
daß diese Konstante immer auf dem Stack belassen
wird.Am Anfang unseres Programmes berechnen wir die oben
erwähnte Konstante. Wir müssen die Eingabe für
jede Dezimalstelle der Konstanten durch 10
dividieren.Multiplizieren geht sehr viel schneller als Dividieren.
Wir teilen also zu Beginn unseres Programmes
1 durch 10, um
0.1 zu erhalten, was wir auf dem Stack
speichern: Anstatt daß wir nun für jede einzelne
Dezimalstelle die Eingabe wieder durch 10
teilen, multiplizieren wir sie stattdessen mit
0.1.Auf diese Weise geben wir 0.1 nicht
direkt ein, obwohl wir dies könnten. Dies hat einen Grund:
Während 0.1 durch nur eine einzige
Dezimalstelle dargestellt werden kann, wissen wir nicht,
wieviele binäre Stellen benötigt
werden. Wir überlassen die Berechnung des binären
Wertes daher der FPU, mit dessen eigener,
hoher Genauigkeit.Wir verwenden noch weitere Konstanten: Wir multiplizieren
den Lochblendendurchmesser mit 1000, um
den Wert von Millimeter in Micrometer zu konvertieren. Wir
vergleichen Werte mit 10000, wenn wir
diese auf vier signifikante Stellen runden wollen. Wir
behalten also beide Konstanten, 1000
und 10000, auf dem Stack. Und
selbstverständlich verwenden wir erneut die gespeicherte
0.1, um Werte auf vier signifikante
Stellen zu runden.Zu guter letzt behalten wir -5 noch
auf dem Stack. Wir brauchen diesen Wert, um das Quadrat des
f–Wertes zu skalieren, anstatt diesen durch
32 zu teilen. Es ist kein Zufall, daß
wir diese Konstante als letztes laden. Dadurch wird diese
Zahl die oberste Konstante auf dem Stack. Wenn später
das Quadrat des f–Wertes skaliert werden muß,
befindet sich die -5 in
st(1), also genau da, wo
die Funktion fscale diesen
Wert erwartet.Es ist üblich, einige Konstanten per Hand zu erzeugen,
anstatt sie aus dem Speicher zu laden. Genau das machen wir
mit der -5:
fld1 ; TOS = 1
fadd st0, st0 ; TOS = 2
fadd st0, st0 ; TOS = 4
fld1 ; TOS = 1
faddp st1, st0 ; TOS = 5
fchs ; TOS = -5Wir können all diese Optimierungen in einer Regel
zusammenfassen: Behalte wiederverwendbare Werte auf
dem Stack!&postscript; ist eine
Stack-orientierte Programmiersprache. Es gibt weit mehr
Bücher über &postscript;, als über die
Assemblersprache der FPU: Werden Sie
in &postscript; besser, dann werden Sie auch automatisch
in der Programmierung der FPU
besser.pinhole—Der Code
;;;;;;; pinhole.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Find various parameters of a pinhole camera construction and use
;
; Started: 9-Jun-2001
; Updated: 10-Jun-2001
;
; Copyright (c) 2001 G. Adam Stanislav
; All rights reserved.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%include 'system.inc'
%define BUFSIZE 2048
section .data
align 4
ten dd 10
thousand dd 1000
tthou dd 10000
fd.in dd stdin
fd.out dd stdout
envar db 'PINHOLE=' ; Exactly 8 bytes, or 2 dwords long
pinhole db '04,', ; Bender's constant (0.04)
connors db '037', 0Ah ; Connors' constant
usg db 'Usage: pinhole [-b] [-c] [-e] [-p <value>] [-o <outfile>] [-i <infile>]', 0Ah
usglen equ $-usg
iemsg db "pinhole: Can't open input file", 0Ah
iemlen equ $-iemsg
oemsg db "pinhole: Can't create output file", 0Ah
oemlen equ $-oemsg
pinmsg db "pinhole: The PINHOLE constant must not be 0", 0Ah
pinlen equ $-pinmsg
toobig db "pinhole: The PINHOLE constant may not exceed 18 decimal places", 0Ah
biglen equ $-toobig
huhmsg db 9, '???'
separ db 9, '???'
sep2 db 9, '???'
sep3 db 9, '???'
sep4 db 9, '???', 0Ah
huhlen equ $-huhmsg
header db 'focal length in millimeters,pinhole diameter in microns,'
db 'F-number,normalized F-number,F-5.6 multiplier,stops '
db 'from F-5.6', 0Ah
headlen equ $-header
section .bss
ibuffer resb BUFSIZE
obuffer resb BUFSIZE
dbuffer resb 20 ; decimal input buffer
bbuffer resb 10 ; BCD buffer
section .text
align 4
huh:
call write
push dword huhlen
push dword huhmsg
push dword [fd.out]
sys.write
add esp, byte 12
ret
align 4
perr:
push dword pinlen
push dword pinmsg
push dword stderr
sys.write
push dword 4 ; return failure
sys.exit
align 4
consttoobig:
push dword biglen
push dword toobig
push dword stderr
sys.write
push dword 5 ; return failure
sys.exit
align 4
ierr:
push dword iemlen
push dword iemsg
push dword stderr
sys.write
push dword 1 ; return failure
sys.exit
align 4
oerr:
push dword oemlen
push dword oemsg
push dword stderr
sys.write
push dword 2
sys.exit
align 4
usage:
push dword usglen
push dword usg
push dword stderr
sys.write
push dword 3
sys.exit
align 4
global _start
_start:
add esp, byte 8 ; discard argc and argv[0]
sub esi, esi
.arg:
pop ecx
or ecx, ecx
je near .getenv ; no more arguments
; ECX contains the pointer to an argument
cmp byte [ecx], '-'
jne usage
inc ecx
mov ax, [ecx]
inc ecx
.o:
cmp al, 'o'
jne .i
; Make sure we are not asked for the output file twice
cmp dword [fd.out], stdout
jne usage
; Find the path to output file - it is either at [ECX+1],
; i.e., -ofile --
; or in the next argument,
; i.e., -o file
or ah, ah
jne .openoutput
pop ecx
jecxz usage
.openoutput:
push dword 420 ; file mode (644 octal)
push dword 0200h | 0400h | 01h
; O_CREAT | O_TRUNC | O_WRONLY
push ecx
sys.open
jc near oerr
add esp, byte 12
mov [fd.out], eax
jmp short .arg
.i:
cmp al, 'i'
jne .p
; Make sure we are not asked twice
cmp dword [fd.in], stdin
jne near usage
; Find the path to the input file
or ah, ah
jne .openinput
pop ecx
or ecx, ecx
je near usage
.openinput:
push dword 0 ; O_RDONLY
push ecx
sys.open
jc near ierr ; open failed
add esp, byte 8
mov [fd.in], eax
jmp .arg
.p:
cmp al, 'p'
jne .c
or ah, ah
jne .pcheck
pop ecx
or ecx, ecx
je near usage
mov ah, [ecx]
.pcheck:
cmp ah, '0'
jl near usage
cmp ah, '9'
ja near usage
mov esi, ecx
jmp .arg
.c:
cmp al, 'c'
jne .b
or ah, ah
jne near usage
mov esi, connors
jmp .arg
.b:
cmp al, 'b'
jne .e
or ah, ah
jne near usage
mov esi, pinhole
jmp .arg
.e:
cmp al, 'e'
jne near usage
or ah, ah
jne near usage
mov al, ','
mov [huhmsg], al
mov [separ], al
mov [sep2], al
mov [sep3], al
mov [sep4], al
jmp .arg
align 4
.getenv:
; If ESI = 0, we did not have a -p argument,
; and need to check the environment for "PINHOLE="
or esi, esi
jne .init
sub ecx, ecx
.nextenv:
pop esi
or esi, esi
je .default ; no PINHOLE envar found
; check if this envar starts with 'PINHOLE='
mov edi, envar
mov cl, 2 ; 'PINHOLE=' is 2 dwords long
rep cmpsd
jne .nextenv
; Check if it is followed by a digit
mov al, [esi]
cmp al, '0'
jl .default
cmp al, '9'
jbe .init
; fall through
align 4
.default:
; We got here because we had no -p argument,
; and did not find the PINHOLE envar.
mov esi, pinhole
; fall through
align 4
.init:
sub eax, eax
sub ebx, ebx
sub ecx, ecx
sub edx, edx
mov edi, dbuffer+1
mov byte [dbuffer], '0'
; Convert the pinhole constant to real
.constloop:
lodsb
cmp al, '9'
ja .setconst
cmp al, '0'
je .processconst
jb .setconst
inc dl
.processconst:
inc cl
cmp cl, 18
ja near consttoobig
stosb
jmp short .constloop
align 4
.setconst:
or dl, dl
je near perr
finit
fild dword [tthou]
fld1
fild dword [ten]
fdivp st1, st0
fild dword [thousand]
mov edi, obuffer
mov ebp, ecx
call bcdload
.constdiv:
fmul st0, st2
loop .constdiv
fld1
fadd st0, st0
fadd st0, st0
fld1
faddp st1, st0
fchs
; If we are creating a CSV file,
; print header
cmp byte [separ], ','
jne .bigloop
push dword headlen
push dword header
push dword [fd.out]
sys.write
.bigloop:
call getchar
jc near done
; Skip to the end of the line if you got '#'
cmp al, '#'
jne .num
call skiptoeol
jmp short .bigloop
.num:
; See if you got a number
cmp al, '0'
jl .bigloop
cmp al, '9'
ja .bigloop
; Yes, we have a number
sub ebp, ebp
sub edx, edx
.number:
cmp al, '0'
je .number0
mov dl, 1
.number0:
or dl, dl ; Skip leading 0's
je .nextnumber
push eax
call putchar
pop eax
inc ebp
cmp ebp, 19
jae .nextnumber
mov [dbuffer+ebp], al
.nextnumber:
call getchar
jc .work
cmp al, '#'
je .ungetc
cmp al, '0'
jl .work
cmp al, '9'
ja .work
jmp short .number
.ungetc:
dec esi
inc ebx
.work:
; Now, do all the work
or dl, dl
je near .work0
cmp ebp, 19
jae near .toobig
call bcdload
; Calculate pinhole diameter
fld st0 ; save it
fsqrt
fmul st0, st3
fld st0
fmul st5
sub ebp, ebp
; Round off to 4 significant digits
.diameter:
fcom st0, st7
fstsw ax
sahf
jb .printdiameter
fmul st0, st6
inc ebp
jmp short .diameter
.printdiameter:
call printnumber ; pinhole diameter
; Calculate F-number
fdivp st1, st0
fld st0
sub ebp, ebp
.fnumber:
fcom st0, st6
fstsw ax
sahf
jb .printfnumber
fmul st0, st5
inc ebp
jmp short .fnumber
.printfnumber:
call printnumber ; F number
; Calculate normalized F-number
fmul st0, st0
fld1
fld st1
fyl2x
frndint
fld1
fscale
fsqrt
fstp st1
sub ebp, ebp
call printnumber
; Calculate time multiplier from F-5.6
fscale
fld st0
; Round off to 4 significant digits
.fmul:
fcom st0, st6
fstsw ax
sahf
jb .printfmul
inc ebp
fmul st0, st5
jmp short .fmul
.printfmul:
call printnumber ; F multiplier
; Calculate F-stops from 5.6
fld1
fxch st1
fyl2x
sub ebp, ebp
call printnumber
mov al, 0Ah
call putchar
jmp .bigloop
.work0:
mov al, '0'
call putchar
align 4
.toobig:
call huh
jmp .bigloop
align 4
done:
call write ; flush output buffer
; close files
push dword [fd.in]
sys.close
push dword [fd.out]
sys.close
finit
; return success
push dword 0
sys.exit
align 4
skiptoeol:
; Keep reading until you come to cr, lf, or eof
call getchar
jc done
cmp al, 0Ah
jne .cr
ret
.cr:
cmp al, 0Dh
jne skiptoeol
ret
align 4
getchar:
or ebx, ebx
jne .fetch
call read
.fetch:
lodsb
dec ebx
clc
ret
read:
jecxz .read
call write
.read:
push dword BUFSIZE
mov esi, ibuffer
push esi
push dword [fd.in]
sys.read
add esp, byte 12
mov ebx, eax
or eax, eax
je .empty
sub eax, eax
ret
align 4
.empty:
add esp, byte 4
stc
ret
align 4
putchar:
stosb
inc ecx
cmp ecx, BUFSIZE
je write
ret
align 4
write:
jecxz .ret ; nothing to write
sub edi, ecx ; start of buffer
push ecx
push edi
push dword [fd.out]
sys.write
add esp, byte 12
sub eax, eax
sub ecx, ecx ; buffer is empty now
.ret:
ret
align 4
bcdload:
; EBP contains the number of chars in dbuffer
push ecx
push esi
push edi
lea ecx, [ebp+1]
lea esi, [dbuffer+ebp-1]
shr ecx, 1
std
mov edi, bbuffer
sub eax, eax
mov [edi], eax
mov [edi+4], eax
mov [edi+2], ax
.loop:
lodsw
sub ax, 3030h
shl al, 4
or al, ah
mov [edi], al
inc edi
loop .loop
fbld [bbuffer]
cld
pop edi
pop esi
pop ecx
sub eax, eax
ret
align 4
printnumber:
push ebp
mov al, [separ]
call putchar
; Print the integer at the TOS
mov ebp, bbuffer+9
fbstp [bbuffer]
; Check the sign
mov al, [ebp]
dec ebp
or al, al
jns .leading
; We got a negative number (should never happen)
mov al, '-'
call putchar
.leading:
; Skip leading zeros
mov al, [ebp]
dec ebp
or al, al
jne .first
cmp ebp, bbuffer
jae .leading
; We are here because the result was 0.
; Print '0' and return
mov al, '0'
jmp putchar
.first:
; We have found the first non-zero.
; But it is still packed
test al, 0F0h
jz .second
push eax
shr al, 4
add al, '0'
call putchar
pop eax
and al, 0Fh
.second:
add al, '0'
call putchar
.next:
cmp ebp, bbuffer
jb .done
mov al, [ebp]
push eax
shr al, 4
add al, '0'
call putchar
pop eax
and al, 0Fh
add al, '0'
call putchar
dec ebp
jmp short .next
.done:
pop ebp
or ebp, ebp
je .ret
.zeros:
mov al, '0'
call putchar
dec ebp
jne .zeros
.ret:
retDer Code folgt demselben Aufbau wie alle anderen Filter,
die wir bisher gesehen haben, bis auf eine Kleinigkeit:
Wir nehmen nun nicht mehr an, daß das Ende
der Eingabe auch das Ende der nötigen Arbeit bedeutet,
etwas, das wir für zeichenbasierte
Filter automatisch angenommen haben.Dieser Filter verarbeitet keine Zeichen. Er verarbeitet
eine Sprache (obgleich eine sehr
einfache, die nur aus Zahlen besteht).Wenn keine weiteren Eingaben vorliegen, kann das zwei
Ursachen haben:Wir sind fertig und können aufhören. Dies
ist dasselbe wie vorher.Das Zeichen, das wir eingelesen haben, war eine Zahl.
Wir haben diese am Ende unseres ASCII
–zu–float Kovertierungspuffers gespeichert.
Wir müssen nun den gesamten Pufferinhalt in eine
Zahl konvertieren, und die letzte Zeile unserer Ausgabe
ausgeben.Aus diesem Grund haben wir unsere getchar
- und read-Routinen
so angepaßt, daß sie das
carry flagclear immer dann zurückgeben, wenn
wir ein weiteres Zeichen aus der Eingabe lesen, und das
carry flagset immer dann zurückgeben, wenn
es keine weiteren Eingabedaten gibt.Selbstverständlich verwenden wir auch hier die
Magie der Assemblersprache! Schauen Sie sich
getchar näher an. Dieses gibt
immer das
carry flagclear zurück.Dennoch basiert der Hauptteil unseres Programmes auf dem
carry flag, um diesem eine
Beendigung mitzuteilen—und es funktioniert.Die Magie passiert in read. Wann
immer weitere Eingaben durch das System zur Verfügung
stehen, ruft diese Funktion getchar
auf, welche ein weiteres Zeichen aus dem Eingabepuffer
einliest, und anschließend das
carry flagcleart.Wenn aber read keine weiteren
Eingaben von dem System bekommt, ruft dieses
nichtgetchar
auf. Stattdessen addiert der op-Code
add esp, byte 44 zu
ESP hinzu,
setzt das
carry flag, und
springt zurück.Wo springt diese Funktion hin? Wann immer ein Programm
den op-Code call
verwendet, pusht der
Mikroprozessor die Rücksprungandresse, d.h. er
speichert diese ganz oben auf dem Stack (nicht auf dem
Stack der FPU, sondern auf dem Systemstack,
der sich im Hauptspeicher befindet). Wenn ein Programm den
op-Code ret verwendet,
popt der
Mikroprozessor den Rückgabewert von dem Stack, und
springt zu der Adresse, die dort gespeichert wurde.Da wir aber 4 zu
ESP hinzuaddiert haben
(welches das Register der Stackzeiger ist), haben wir
effektiv dem Mikroprzessor eine kleine
Amnesie verpaßt: Dieser erinnert
sich nun nicht mehr daran, daß
getchar durch
read aufgerufen wurde.Und da getchar nichts vor dem
Aufruf von read auf dem Stack abgelegt
hat, enthält der Anfang des Stacks nun die
Rücksprungadresse von der Funktion, die
getchar aufgerufen hat. Soweit es den
Aufrufer betrifft, hat dieser getchar
gecallt, welche mit
einem gesetzten
carry flagreturned.
PLIP einrichtenAls Erstes benötigen Sie ein Laplink-Kabel. Danach
müssen Sie sicherstellen, dass beide Computerkernel den
&man.lpt.4;-Treiber unterstützen:&prompt.root; grep lp /var/run/dmesg.boot
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven portDer Parallelport muss Interrupt-gesteuert sein, daher
sollte die Datei /boot/device.hints
zwei Zeilen ähnlich den folgenden enthalten:hint.ppc.0.at="isa"
hint.ppc.0.irq="7"Danach überprüfen Sie, ob die
Kernelkonfigurationsdatei die Zeile
device plip enthält, oder ob das
Kernelmodul plip.ko geladen wurde. In
beiden Fällen sollte die parallele Schnittstelle
von &man.ifconfig.8; angezeigt werden:&prompt.root; ifconfig plip0
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500Verbinden Sie die parallelen Schnittstellen der beiden
Computer über das (Laplink-)Kabel.Konfigurieren Sie die Netzwerkparameter auf beiden Rechnern
als root. Wenn Sie beispielsweise den Rechner
host1 mit dem Rechner host2
verbinden wollen, gehen Sie folgendermaßen vor: host1 <-----> host2
IP Address 10.0.0.1 10.0.0.2Richten Sie die parallele Schnittstelle von
host1 ein, indem Sie Folgendes eingeben:&prompt.root; ifconfig plip0 10.0.0.1 10.0.0.2Danach richten Sie die parallele Schnittstelle von
host2 ein:&prompt.root; ifconfig plip0 10.0.0.2 10.0.0.1Sie sollten nun über eine funktionierende Verbindung
verfügen. Bei Problemen lesen Sie bitte die Hilfeseiten
&man.lp.4; sowie &man.lpt.4;.Zusätzlich sollten beide Rechner in
/etc/hosts eingetragen werden:127.0.0.1 localhost.my.domain localhost
10.0.0.1 host1.my.domain host1
-10.0.0.2 host2.my.domain
+10.0.0.2 host2.my.domain host2
Um die Verbindung zu überprüfen, pingen Sie jeden
Rechner vom anderen Rechner aus an. Auf host1
gehen Sie dazu folgendermaßen vor:&prompt.root; ifconfig plip0
plip0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000
&prompt.root; netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
host2 host1 UH 0 0 plip0
&prompt.root; ping -c 4 host2
PING host2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms
--- host2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 msAaronKaplanBeigetragen von TomRhodesÜberarbeitet und erweitert von BradDavisErweitert von IPv6 – Internet Protocol Version 6Bei IPv6 (auch als IPng oder
IP next generation
bekannt) handelt es sich um die neueste Version des bekannten
IP-Protokolls (das auch als IPv4 bezeichnet
wird). FreeBSD enthält, genauso wie die anderen frei
erhältlichen BSD-Systeme, die IPv6-Referenzimplementation
von KAME. FreeBSD erfüllt damit bereits
alle für die Nutzung von IPv6 nötigen Voraussetzungen.
Dieser Abschnitt konzentriert sich daher auf die Konfiguration
und den Betrieb von IPv6.Anfang der 90er Jahre wurde man auf den stark steigenden
Verbrauch von IPv4-Adressen aufmerksam. Im Hinblick auf das
Wachstums des Internets gab es zwei Hauptsorgen:Die drohende Knappheit von IPv4-Adressen. Dieses Problem
konnte durch die Einführung von privaten
Adressräumen gemäß RFC1918 (mit Adressen wie
10.0.0.0/8,
172.16.0.0/12, oder
192.168.0.0/16) sowie der
Entwicklung von Network Address
Translation (NAT)
weitestgehend entschärft werden.Die immer größer werdenden Einträge in
Router-Tabellen. Dieses Problem ist auch heute noch
aktuell.IPv6 ist in der Lage, diese, aber auch viele andere Probleme
zu lösen:IPv6 hat einen 128 Bit großen Adressraum. Es sind
also theoretisch
340.282.366.920.938.463.463.374.607.431.768.211.456 Adressen
verfügbar. In anderen Worten: Für jeden
Quadratmeter der Erdoberfläche sind etwa
6,67 * 10^27 IPv6-Adressen verfügbar.Router speichern nur noch Netzwerk-Aggregationsadressen in
Ihren Routingtabellen. Dadurch reduziert sich die
durchschnittliche Größe einer Routingtabelle auf
8192 Einträge.Weitere nützliche Eigenschaften von IPv6 sind:Die automatische Konfiguration von Adressen, die im
RFC2462
beschrieben wird.Anycast-Adressen (eine-von-vielen)Verpflichtende Multicast-AdressenDie Unterstützung von IPsec (IP-Security)Eine vereinfachte HeaderstrukturMobile IP-AdressenDie Umwandlung von IPv4- in IPv6-AdressenWeitere Informationsquellen:Beschreibung von IPv6 auf
playground.sun.comKAME.netHintergrundinformationen zu IPv6-AdressenEs gibt verschiedene Arten von IPv6-Adressen: Unicast-,
Anycast- und Multicast-Adressen.Unicast-Adressen sind die herkömlichen Adressen. Ein
Paket, das an eine Unicast-Adresse gesendet wird, kommt nur an
der Schnittstelle an, die dieser Adresse zugeordnet ist.Anycast-Adressen unterscheiden sich in ihrer Syntax nicht
von Unicast-Adressen, sie wählen allerdings aus
mehreren Schnittstellen eine Schnittstelle aus.
Ein für eine Anycast-Adresse
bestimmtes Paket kommt an der nächstgelegenen
(entsprechend der Router-Metrik) Schnittstelle
an. Anycast-Adressen werden nur von Routern verwendet.Multicast-Adressen bestimmen Gruppen, denen mehrere
Schnittstellen angehören. Ein
Paket, das an eine Multicast-Adresse geschickt wird, kommt an
allen Schnittstellen an, die zur Multicast-Gruppe gehören.Die von IPv4 bekannte Broadcast-Adresse
(normalerweise
xxx.xxx.xxx.255) wird bei IPv6
durch Multicast-Adressen verwirklicht.
Reservierte IPv6-AdressenIPv6-AdressePräfixlängeBeschreibungAnmerkungen::128 Bitnicht festgelegtentspricht 0.0.0.0
bei IPv4::1128 BitLoopback-Adresseentspricht 127.0.0.1
bei IPv4::00:xx:xx:xx:xx96 BitEingebettete IPv4-AdresseDie niedrigen 32 Bit entsprechen der IPv4-Adresse.
Wird auch als IPv4-kompatible IPv6-Adresse
bezeichnet.::ff:xx:xx:xx:xx96 BitEine auf IPv6 abgebildete IPv4-AdresseDie niedrigen 32 Bit entsprechen der IPv4-Adresse.
Notwendig für Rechner, die IPv6 nicht
unterstützen.fe80:: - feb::10 Bitlink-localEntspricht der Loopback-Adresse bei IPv4fec0:: - fef::10 Bitsite-localff::8 BitMulticast001
(im Dualsystem)3 BitGlobaler UnicastAlle globalen Unicastadressen stammen aus diesem
Pool. Die ersten 3 Bit lauten 001.
IPv6-Adressen verstehenDie kanonische Form von IPv6-Adressen lautet
x:x:x:x:x:x:x:x, jedes
x steht dabei für einen
16-Bit-Hexadezimalwert. Ein Beispiel für eine IPv6-Adresse
wäre etwa
FEBC:A574:382B:23C1:AA49:4592:4EFE:9982.Eine IPv6-Adresse enthält oft Teilzeichenfolgen aus lauter
Nullen. Eine solche Zeichenfolge kann zu ::
verkürzt werden. Bis zu drei führende Nullen eines
Hexquads können ebenfalls weggelassen werden.
fe80::1 entspricht also der Adresse
fe80:0000:0000:0000:0000:0000:0000:0001.
Eine weitere Möglichkeit ist die Darstellung der
letzten 32 Bit in der bekannten (dezimalen) IPv4-Darstellung,
bei der Punkte (.) zur Trennung verwendet werden.
2002::10.0.0.1 ist also nur eine
andere Schreibweise für die (hexadezimale) kanonische Form
2002:0000:0000:0000:0000:0000:0a00:0001,
die wiederum der Adresse
2002::a00:1 entspricht.Sie sollten nun in der Lage sein, die folgende Ausgabe zu
verstehen:&prompt.root; ifconfig
rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
ether 00:00:21:03:08:e1
media: Ethernet autoselect (100baseTX )
status: activeBei
fe80::200:21ff:fe03:8e1%rl0
handelt es sich um eine automatisch konfigurierte
link-local-Adresse. Sie
wird im Rahmen der automatischen Konfiguration aus der
MAC-Adresse erzeugt.Weitere Informationen zum Aufbau von IPv6-Adressen finden
Sie im
RFC3513.Eine IPv6-Verbindung herstellenEs gibt derzeit vier Möglichkeiten, sich mit anderen
IPv6-Rechnern oder Netzwerken zu verbinden:Fragen Sie Ihren Internetprovider, ob er IPv6
bereits unterstützt.SixXS
bietet weltweit IPv6-Tunnelverbindungen an.Die Verwendung eines 6-nach-4-Tunnels
(RFC3068).Die Verwendung des Ports
/usr/ports/net/freenet6 bei der Einwahl
ins Internet.DNS in der IPv6-WeltUrsprünglich gab es zwei verschiedene DNS-Einträge
für IPv6. Da A6-Einträge von der IETF für
obsolet erklärt wurden, sind AAAA-Einträge nun
Standard.Weisen Sie die erhaltene IPv6-Adresse Ihrem Rechnernamen zu,
indem Sie den EintragMYHOSTNAME AAAA MYIPv6ADDRin Ihre primäre DNS-Zonendatei einfügen. Falls
Sie nicht für Ihre DNS-Zone
verantwortlich sind, bitten Sie den dafür
Zuständigen, diese Änderung durchzuführen.
Die aktuellen Versionen von bind
(Version 8.3 oder 9) sowie
dns/djbdns (bei Verwendung
des IPv6-Patches) unterstützen AAAA-Einträge./etc/rc.conf für die Nutzung von
IPv6 anpassenEinen Client unter IPv6 einrichtenDieser Abschnitt beschreibt die Konfiguration eines
Rechners, der in Ihrem LAN als Client, aber nicht als Router
verwendet wird. Um die Schnittstelle während des
Systemstarts mit &man.rtsol.8; automatisch einzurichten,
fügen Sie folgende Zeile in
/etc/rc.conf ein:ipv6_enable="YES"Durch die folgende Zeile weisen Sie Ihrer Schnittstelle
fxp0 die statische IP-Adresse 2001:471:1f11:251:290:27ff:fee0:2093
zu:ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"Um 2001:471:1f11:251::1
als Standardrouter festzulegen, fügen Sie folgende Zeile
in /etc/rc.conf ein:ipv6_defaultrouter="2001:471:1f11:251::1"Gateways und Router unter IPv6 einrichtenDieser Abschnitt beschreibt, wie Sie Ihren Rechner mit
Hilfe der von Ihrem Tunnel-Anbieter erhaltenen
Anweisungen dauerhaft für die Nutzung von IPv6
einrichten. Um den Tunnel beim Systemstart
wiederherzustellen, passen Sie
/etc/rc.conf wie folgt an:Listen Sie die einzurichtenden Tunnelschnittstellen
(hier gif0) auf:gif_interfaces="gif0"Um den lokalen Endpunkt
MY_IPv4_ADDR über diese
Schnittstelle mit dem entfernten Endpunkt
REMOTE_IPv4_ADDR zu
verbinden, verwenden Sie folgende Zeile:gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"Um die Ihnen zugewiesene IPv6-Adresse als Endpunkt Ihres
IPv6-Tunnels zu verwenden, fügen Sie folgende Zeile
ein:ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"Nun müssen Sie nur noch die IPv6-Standardroute
angeben. Diese legt das andere Ende des IPv6-Tunnels
fest.ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"Einen IPv6-Tunnel einrichtenWenn Ihr Server IPv6-Verkehr zwischen Ihrem Netzwerk und
der Außenwelt routen muss, benötigen Sie
zusätzlich die folgenden Zeilen in Ihrer
/etc/rc.conf:ipv6_gateway_enable="YES"Bekanntmachung von Routen und automatische
RechnerkonfigurationDieser Abschnitt beschreibt die Einrichtung von
&man.rtadvd.8;, das Sie bei der Bekanntmachung der
IPv6-Standardroute unterstützt.Um &man.rtadvd.8; zu aktivieren, fügen Sie folgende
Zeile in /etc/rc.conf ein:rtadvd_enable="YES"Es ist wichtig, die Schnittstelle anzugeben, über die
IPv6-Routen bekanntgemacht werden sollen. Soll &man.rtadvd.8;
fxp0 verwenden, ist folgender Eintrag
nötig:rtadvd_interfaces="fxp0"Danach erzeugen Sie die Konfigurationsdatei
/etc/rtadvd.conf. Dazu ein Beispiel:fxp0:\
:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:Ersetzen Sie dabei fxp0 durch die
zu verwendende Schnittstelle.Anschließend ersetzen Sie
2001:471:1f11:246:: durch das
Präfix der Ihnen zugewiesenen Verbindung.Wenn Sie eine /64-Netzmaske
verwenden, müssen Sie keine weiteren Anpassungen vornehmen.
Anderenfalls müssen Sie prefixlen#
auf den korrekten Wert setzen.HartiBrandtBeigetragen von ATM - Asynchronous Transfer ModeClassical IP over ATM
als PVC-Verbindung einrichtenClassical IP over ATM
(CLIP) ist die einfachste Möglichkeit,
um IP-Verkehr über ATM (Asynchronous
Transfer Mode-Verbindungen zu übertragen.
CLIP kann sowohl mit geschalteten Verbindungen (SVCs) als auch
mit permanenten Verbindungen (PVCs) verwendet werden. Dieser
Abschnitt beschreibt die Einrichtung eines PVC-basierten
Netzwerks.Ein vollständig vermaschtes Netzwerk aufbauenBei einem vollständig vermaschten
(fully meshed) Netzwerk ist
jeder Rechner über eine dezidierte Verbindung mit jedem
anderen Rechner des Netzwerks verbunden. Die Konfiguration
ist - vor allem für kleinere Netzwerke - relativ einfach.
Unser Beispielnetzwerk besteht aus vier Rechnern, die jeweils
über eine
ATM-Adapterkarte
mit dem
ATM-Netzwerk
verbunden sind. Als ersten Konfigurationsschritt planen wir
die Vergabe von IP-Adressen sowie die anzulegenden
ATM-Verbindungen:
RechnerIP-AdressehostA192.168.173.1hostB192.168.173.2hostC192.168.173.3hostD192.168.173.4Um ein vollständiges Netz aufzubauen, benötigen
wir für jedes Rechnerpaar eine eigene ATM-Verbindung:RechnerpaarVPI.VCI-PaarhostA - hostB0.100hostA - hostC0.101hostA - hostD0.102hostB - hostC0.103hostB - hostD0.104hostC - hostD0.105Die Werte VPI und VCI an den Verbindungsenden können
natürlich unterschiedlich sein. Wir nehmen hier aber an,
dass sie gleich sind. Nun müssen wir die
ATM-Schnittstellen auf jedem Rechner einrichten:hostA&prompt.root; ifconfig hatm0 192.168.173.1 up
hostB&prompt.root; ifconfig hatm0 192.168.173.2 up
hostC&prompt.root; ifconfig hatm0 192.168.173.3 up
hostD&prompt.root; ifconfig hatm0 192.168.173.4 upDabei setzen wir voraus, dass
hatm0 auf allen Rechnern die
ATM-Schnittstelle darstellt. Danach werden, beginnend mit
hostA, die PVCs auf den einzelnen Rechnern
eingerichtet (Wir nehmen an, dass die PVCs auf den
ATM-Switches bereits eingerichet sind. Lesen Sie die
entsprechenden Handbücher, wenn Sie einen Switch
einrichten müssen.):hostA&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr
hostA&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr
hostA&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr
hostB&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr
hostC&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr
hostD&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubrStatt UBR können auch andere
traffic contracts verwendet
werden. Voraussetzung ist allerdings, dass diese von Ihrem
ATM-Adapter unterstützt werden. Ist dies der Fall,
folgen auf den Namen des
traffic contracts die
entsprechenden Konfigurationsparameter. Weitere Informationen
zur Konfiguration von ATM-Adapterkarten erhalten Sie über
den Befehl&prompt.root; atmconfig help natm addoder durch das Lesen von &man.atmconfig.8;.Die Konfiguration von ATM-Adaptern kann auch über die
Datei /etc/rc.conf erfolgen. Für
hostA sähe die Konfiguration so
aus:network_interfaces="lo0 hatm0"
ifconfig_hatm0="inet 192.168.173.1 up"
natm_static_routes="hostB hostC hostD"
route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"Mit dem folgenden Befehl lässt sich der derzeitige
Status aller CLIP-Routen anzeigen:hostA&prompt.root; atmconfig natm showTomRhodesBeigetragen von
- CARP - Common Access Redundancy Protocol
+ CARP - Common Address Redundancy ProtocolCARP
- Common Access Redundancy Protocol (CARP)
+ Common Address Redundancy Protocol (CARP)
- Das Common Access Redundancy
+ Das Common Address Redundancy
Protocol (CARP) erlaubt es,
mehreren Rechnern die gleiche IP-Adresse
zuzuweisen. Durch ein solches Vorgehen läßt sich
beispielsweise die Verfügbarkeit bestimmter Dienste
verbessern oder die Last zwischen einzelnen Systemen besser
verteilen. Den auf diese Art und Weise konfigurierten Systemen
kann zusätzlich eine eigene (im Netzwerk eindeutige)
IP-Adresse zugewiesen werden (wie dies auch
im folgenden Beispiel erfolgt).Um CARP zu aktivieren, müssen Sie die
&os;-Kernelkonfigurationsdatei um die folgende Option erweitern
und danach den &os;-Kernel neu bauen:device carpDanach ist CARP auf Ihrem System
verfügbar und kann über verschiedene
sysctl-Optionen (OIDs)
gesteuert werden.OIDBeschreibungnet.inet.carp.allowAkzeptiert ankommende CARP-Pakete.
In der Voreinstellung aktiviert.net.inet.carp.preemptDiese Option deaktiviert alle
CARP-Geräte, sobald eines von
ihnen ausfällt. In der Voreinstellung
deaktiviert.net.inet.carp.logHat diese Variable den Wert 0, wird
kein Protokoll generiert, während mit dem Wert
1 nur inkorrekte
CARP-Pakete protokolliert werden. Hat
die Variable einen Wert größer
1, werden nur die Statuswechsel von
CARP-Geräten protokolliert. In der
Voreinstellung hat diese Variable den Wert
1.net.inet.carp.arpbalanceGleicht die Netzwerklast im lokalen Netzwerk durch
den Einsatz von ARP aus. In der
Voreinstellung deaktiviert.net.inet.carp.suppress_preemptEine nur lesbare OID, die
den Preemption Suppression-Status
anzeigt. Preemption kann verhindert werden. Dies auch dann,
wenn ein Gerät ausfällt. Hat die Variable
den Wert 0, bedeutet dies, dass Preemption
nicht verhindert wird. Tritt ein Problem auf, wird der Wert
dieser OID um 1
erhöht.Das CARP-Gerät selbst erzeugen Sie mit dem
ifconfig-Befehl:&prompt.root; ifconfig carp0 createDamit Sie dieses Protokoll in Ihrem Netzwerk einsetzen
können, muss jede Netzkarte eine eindeutige
Identifikationsnummer, die sogenannte VHID
(Virtual Host Identification),
besitzen, da sich ansonsten die Rechner Ihres Netzwerks nicht
voneinander unterscheiden lassen.Die Serververfügbarkeit mit CARP
verbessernWie bereits weiter oben erwähnt wurde, können Sie
CARP dazu verwenden, die Verfübarkeit
Ihrer Server zu verbessern. Im folgenden Bespiel werden
insgesamt drei Server (mit jeweils eigener, eindeutiger
IP-Adresse), die alle den gleichen Inhalt
anbieten, in einer Round Robin
DNS-Konfiguration eingerichtet.
Der Backup-Server verfügt über zwei
CARP-Schnittstellen (für die beiden
IP-Adressen der Content-Server). Tritt bei
einem Content-Server ein Problem auf, übernimmt der
Backup-Server die IP-Adresse des
ausgefallenen Servers. Dadurch sollte die Auswahl eines Servers
vom Anwender nicht bemerkt werden. Der Backup-Server muss
identisch konfiguriert sein und die gleichen Daten und Dienste
anbieten wie das System, das er ersetzen soll.Die beiden Content-Server werden (abgesehen von ihren
jeweiligen Hostnamen und VHIDs) identisch
konfiguriert und heißen in unserem Beispiel
hosta.example.org beziehungsweise
hostb.example.org. Damit Sie
CARP einsetzen können, müssen
Sie als Erstes die Datei rc.conf auf
beiden Systemen anpassen. Für das System
hosta.example.org nehmen Sie dazu folgende
Zeilen in rc.conf auf:hostname="hosta.example.org"
ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"Für das System hostb.example.org
benötigen Sie zusätzlich folgende Zeilen in
rc.conf:hostname="hostb.example.org"
ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"Achten Sie unbedingt darauf, dass die durch die Option
an ifconfig
übergebenen Passwörter auf beiden Systemen
identisch sind, da
carp-Geräte nur mit Systemen
kommunizieren können, die über ein korrektes Passwort
verfügen. Beachten Sie weiters, dass sich die
VHIDs der beiden Systeme unterscheiden
müssen.Nun richten Sie noch das dritte System,
provider.example.org, ein, das aktiviert
wird, wenn eines der beiden zuvor konfigurierten Systeme
ausfällt. Dieses dritte System benötigt zwei
carp-Geräte, um bei Bedarf
eines der beiden anderen
Systeme ersetzen zu können. Dazu konfigurieren Sie
rc.conf analog zur folgenden
Beispielkonfiguration:hostname="provider.example.org"
ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"Durch die beiden carp-Geräte
ist es provider.example.org möglich,
festzustellen, ob eines der beiden anderen Systeme nicht mehr
reagiert. In diesem Fall übernimmt
provider.example.org die
IP-Adresse des betroffenen Systems.Ist im installierten &os;-Kernel die Option
"preemption" aktiviert, kann es sein, dass
provider.example.org die übernommene
IP-Adresse nicht mehr an den
Content-Server zurückgibt (wenn dieser wieder
funktioniert). In diesem Fall muss ein Administrator die
entsprechende Schnittstelle dazu zwingen, dies zu tun.
Dazu gibt er auf dem Rechner
provider.example.org den folgenden
Befehl ein:&prompt.root; ifconfig carp0 down && ifconfig carp0 upDieser Befehl muss auf das
carp-Gerät ausgeführt
werden, das dem betroffenen System zugeordnet ist.Damit ist CARP vollständig
konfiguriert und der Testbetrieb kann beginnen. Zuvor
müssen Sie allerdings noch alle Systeme neu starten
(beziehungsweise die Netzwerkkonfiguration auf allen
Systemen neu einlesen), um die Einstelllungen zu
übernehmen.Für weitere Informtionen lesen Sie bitte die Manualpage
&man.carp.4;.
diff --git a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml
index 73e5542b93..44e7a0aff4 100644
--- a/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/basics/chapter.sgml
@@ -1,2922 +1,2922 @@
ChrisShumwayUmgeschrieben von UwePierauÜbersetzt von Grundlagen des UNIX BetriebssystemsÜbersichtDas folgende Kapitel umfasst die grundlegenden Kommandos
und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden
Material gilt auch für jedes andere &unix;-artige System.
Falls Sie mit dem Material schon vertraut sind, können Sie dieses
Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten
Sie dieses Kapitel auf jeden Fall aufmerksam lesen.Dieser Abschnitt behandelt die folgenden Themen:virtuelle Konsolen,Zugriffsrechte unter &unix; sowie Datei-Flags unter &os;,Zugriffskontrolllisten für Dateisysteme,die Verzeichnisstruktur von &os;,Organisation von Dateisystemen unter &os;,Ein- und Abhängen von Dateisystemen,Prozesse, Dämonen und Signale,Shells und die Login-Umgebung,Texteditoren,Geräte und Gerätedateien,Binärformate unter &os; undwie Sie in den Manualpages nach weiteren Informationen
suchen können.Virtuelle Konsolen und Terminalsvirtuelle KonsoleTerminalsSie können FreeBSD mit einem Terminal benutzen, der nur Text
darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen
Ihnen alle Möglichkeiten eines &unix; Betriebssystems zur
Verfügung. Dieser Abschnitt beschreibt was Terminals und
Konsolen sind und wie sie unter FreeBSD eingesetzt werden.Die KonsoleKonsoleWenn Ihr FreeBSD-System ohne eine graphische
Benutzeroberfläche startet, wird am Ende des Systemstarts,
nachdem die Startskripten gelaufen sind, ein Anmeldeprompt
ausgegeben. Die letzten Startmeldungen sollten ähnlich wie
die Folgenden aussehen:Additional ABI support:.
Local package initialization:.
Additional TCP options:.
Fri Sep 20 13:01:06 EEST 2002
FreeBSD/i386 (pc3.example.org) (ttyv0)
login:Beachten Sie die letzten beiden Zeilen der Ausgabe, die
vorletzte lautet:FreeBSD/i386 (pc3.example.org) (ttyv0)Diese Zeile enthält einige Informationen über das
gerade gestartete System. Die Ausgabe stammt von der
FreeBSD-Konsole einer Maschine mit einem Intel oder
Intel-kompatiblen Prozessor der x86-ArchitekturGenau das ist mit i386 gemeint. Auch
wenn Ihr System keine Intel 386 CPU besitzt, wird
i386 ausgegeben. Es wird immer die
Architektur und nicht der Typ des Prozessors ausgegeben.. Der Name des Systems (jedes &unix; System besitzt
einen Namen) ist pc3.example.org und die Ausgabe
stammt von der Systemkonsole, dem Terminal
ttyv0.Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe
eines Benutzernamens:login:Der Anmeldevorgang wird im nächsten Abschnitt
erläutert.Der AnmeldevorgangFreeBSD ist ein Mehrbenutzersystem, das Multitasking
unterstützt. Das heißt mehrere Benutzer können
gleichzeitig viele Programme auf einem System laufen lassen.Jedes Mehrbenutzersystem muss die Benutzer voneinander
unterscheiden können. Bei FreeBSD und allen anderen
&unix;-artigen
Betriebssystemen wird dies dadurch erreicht, dass sich die
Benutzer anmelden müssen, bevor sie Programme laufen lassen
können. Jeder Benutzer besitzt einen eindeutigen Namen (den
Account) und ein dazugehörendes Passwort, die beide bei
der Anmeldung abgefragt werden.StartskriptenNachdem FreeBSD gestartet ist und die StartskriptenStartskripten sind Programme, die FreeBSD automatisch bei
jedem Startvorgang ausführt. Der Zweck der Skripte
besteht darin, das System zu konfigurieren und nützliche
Dienste im Hintergrund zu starten., gelaufen sind, erscheint eine Aufforderung zur Eingabe
des Benutzernamens:login:Wenn Ihr Benutzername beispielsweise john
ist, geben Sie jetzt john gefolgt von
Enter ein. Sie sollten dann eine Aufforderung zur
Eingabe des Passworts erhalten:login: john
Password:Geben Sie jetzt das Passwort von john
gefolgt von Enter ein. Das Passwort wird aus
Sicherheitsgründen nicht auf dem Bildschirm angezeigt.Wenn Sie das richtige Passwort eingegeben haben, sind Sie
am System angemeldet und können nun alle verfügbaren
Kommandos absetzen.Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen
(message of today) gefolgt
von einer Eingabeaufforderung (dem Zeichen #,
$ oder %) gesehen
haben.Virtuelle KonsolenDa FreeBSD mehrere Programme gleichzeitig laufen lassen kann,
ist eine einzige Konsole, an der Kommandos abgesetzt werden
können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die
mehrere Konsolen zur Verfügung stellen.Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie
einstellen. Zwischen den einzelnen Konsolen können Sie mit
speziellen Tastenkombinationen wechseln. Jede Konsole verfügt
über einen eigenen Ausgabekanal und FreeBSD ordnet die
Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn
Sie zwischen den Konsolen wechseln.Zum Umschalten der Konsolen stellt FreeBSD spezielle
Tastenkombinationen bereitEine recht technische und genaue Beschreibung der FreeBSD-Konsole
und der Tastatur-Treiber finden Sie in den Hilfeseiten
&man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; und
&man.kbdcontrol.1;. Lesen Sie diese Seiten, wenn Sie an den
Einzelheiten interessiert sind.. Benutzen Sie
AltF1,
AltF2 bis
AltF8,
um zwischen den verschiedenen Konsolen umzuschalten.Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den
Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole
aus. Dies erzeugt die Illusion mehrerer Bildschirme und
Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine
Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole
gewechselt haben, laufen die dort abgesetzten Kommandos
weiter./etc/ttysIn der Voreinstellung stehen unter FreeBSD acht virtuelle
Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen
oder verringern können. Die Anzahl und Art der Konsolen wird
in /etc/ttys eingestellt.Jede Zeile in /etc/ttys, die nicht mit
# anfängt, konfiguriert einen Terminal oder
eine virtuelle Konsole. In der Voreinstellung werden in dieser
Datei neun virtuelle Konsolen definiert, von denen acht aktiviert
sind. Die Konsolen sind in den Zeilen, die mit
ttyv beginnen, definiert:# name getty type status comments
#
ttyv0 "/usr/libexec/getty Pc" cons25 on secure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" cons25 on secure
ttyv2 "/usr/libexec/getty Pc" cons25 on secure
ttyv3 "/usr/libexec/getty Pc" cons25 on secure
ttyv4 "/usr/libexec/getty Pc" cons25 on secure
ttyv5 "/usr/libexec/getty Pc" cons25 on secure
ttyv6 "/usr/libexec/getty Pc" cons25 on secure
ttyv7 "/usr/libexec/getty Pc" cons25 on secure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secureDie Hilfeseite &man.ttys.5; enthält eine ausführliche
Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum
Konfigurieren der virtuellen Konsolen benutzen können.Die Konsole im Single-User-ModusEine eingehende Beschreibung des Single-User-Modus finden Sie
in . Im Single-User-Modus steht
Ihnen nur eine Konsole zur Verfügung.
Die Definition dieser Konsole befindet sich ebenfalls in
/etc/ttys. Suchen Sie nach einer Zeile, die
mit console beginnt:# name getty type status comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none unknown off secureIn der Zeile, die mit console beginnt,
können Sie secure durch
insecure ersetzen. Wenn Sie danach in den
Single-User-Modus booten, verlangt das System ebenfalls die
Eingabe des root-Passworts.Setzen Sie insecure nicht
leichtfertig ein. Wenn Sie das Passwort von
root vergessen, wird es schwierig, in den
Single-User-Modus zu gelangen, wenn Sie den
FreeBSD-Boot-Prozess nicht genau verstehen.Den Videomodus der Konsole anpassenDer Standard-Videomodus der FreeBSD-Konsole kann auf jeden
Modus eingestellt werden, der von Ihrer Grafikkarte und Ihrem
Monitor unterstützt wird (beispielsweise 1024x768 oder
1280x1024). Wollen Sie eine andere Einstellung verwenden,
müssen Sie Ihren Kernel neu kompilieren, nachdem Sie die
zwei folgenden Zeilen in Ihre Kernelkonfigurationsdatei
aufgenommen haben:OPTIONS VESA
options SC_PIXEL_MODENachdem Sie den Kernel mit diesen zwei Optionen neu
kompiliert haben, bestimmen Sie die möglichen
Videomodi mit dem Werkzeug &man.vidcontrol.1;. Um
beispielsweise einer Liste aller unterstützten
Modi zu erhalten, verwenden Sie den folgenden Befehl:&prompt.root; vidcontrol -i modeAls Ergebnis erhalten Sie eine Liste aller Videomodi,
die von Ihrer Hardware unterstützt werden. Sie wählen
einen neuen Modus aus, indem Sie den entsprechenden Wert
(wiederum als Benutzer root) an
&man.vidcontrol.1; übergeben:&prompt.root; vidcontrol MODE_279Um diese Einstellung dauerhaft zu speichern, müssen Sie
die folgende Zeile in die Datei
/etc/rc.conf aufnehmen:allscreens_flags="MODE_279"ZugriffsrechteUNIXFreeBSD, das ein direkter Abkömmling von BSD &unix; ist,
stützt sich auf mehrere Grundkonzepte von &unix; Systemen.
Das erste und ausgeprägteste: FreeBSD ist
ein Mehrbenutzer-Betriebssystem. Das System ermöglicht,
dass mehrere Benutzer gleichzeitig an völlig verschiedenen
und unabhängigen Aufgaben arbeiten können. Es ist
verantwortlich für eine gerechte Auf- und Zuteilung von
Nachfragen nach Hardware- und Peripheriegeräten, Speicher
und CPU-Zeit unter den Benutzern.Da das System mehrere Benutzer unterstützt, hat alles,
was das System verwaltet, einen Satz von Rechten, die bestimmen,
wer die jeweilige Ressource lesen, schreiben oder ausführen
darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in
drei Teile unterteilt sind: einen für den Besitzer der
Datei, einen für die Gruppe, zu der die Datei gehört
und einen für alle anderen. Die numerische Darstellung
sieht wie folgt aus:ZugriffsrechteDateizugriffsrechteWertZugriffsrechteAuflistung im Verzeichnis0Kein Lesen, Kein Schreiben, Kein Ausführen---1Kein Lesen, Kein Schreiben, Ausführen--x2Kein Lesen, Schreiben, Kein Ausführen-w-3Kein Lesen, Schreiben, Ausführen-wx4Lesen, Kein Schreiben, Kein Ausführenr--5Lesen, Kein Schreiben, Ausführenr-x6Lesen, Schreiben, Kein Ausführenrw-7Lesen, Schreiben, AusführenrwxlsVerzeichnisseSie können auf der Kommandozeile
von &man.ls.1; angeben, um eine ausführliche Verzeichnisauflistung
zu sehen, die in einer Spalte die Zugriffsrechte für den
Besitzer, die Gruppe und alle anderen enthält.
Die Ausgabe von ls -l könnte
wie folgt aussehen:&prompt.user; ls -l
total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile
-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt
...Die erste Spalte der Ausgabe enthält die
Zugriffsrechte:-rw-r--r--Das erste Zeichen von links ist ein Symbol, welches angibt,
ob es sich um eine normale Datei, ein Verzeichnis, ein
zeichenorientiertes Gerät, ein Socket oder irgendeine andere
Pseudo-Datei handelt. In diesem Beispiel zeigt - eine
normale Datei an. Die nächsten drei Zeichen,
dargestellt als rw-, ergeben die Rechte
für den Datei-Besitzer. Die drei Zeichen danach
r-- die Rechte der Gruppe, zu der die Datei
gehört. Die letzten drei Zeichen, r--,
geben die Rechte für den Rest der Welt an. Ein Minus
bedeutet, dass das Recht nicht gegeben ist. In diesem Fall
sind die Zugriffsrechte also: der Eigentümer kann die Datei
lesen und schreiben, die Gruppe kann lesen und alle anderen
können auch nur lesen. Entsprechend obiger Tabelle
wären die Zugriffsrechte für diese Datei
644, worin jede Ziffer die drei Teile der
Zugriffsrechte dieser Datei verkörpert.Das ist alles schön und gut, aber wie kontrolliert das
System die Rechte von Hardware-Geräten? FreeBSD behandelt
die meisten Hardware-Geräte als Dateien, welche Programme
öffnen, lesen und mit Daten beschreiben können wie
alle anderen Dateien auch. Diese Spezial-Dateien sind im
Verzeichnis /dev gespeichert.Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie
haben Lese-, Schreib- und Ausführ-Rechte. Das
Ausführungs-Bit hat eine etwas andere Bedeutung für
ein Verzeichnis als für eine Datei. Die Ausführbarkeit
eines Verzeichnisses bedeutet, dass in das Verzeichnis
zum Beispiel mit cd gewechselt werden kann.
Das bedeutet auch, dass in dem Verzeichnis auf Dateien, deren
Namen bekannt sind, zugegriffen werden kann, vorausgesetzt die
Zugriffsrechte der Dateien lassen dies zu.Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt
des Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem
Namen in einem Verzeichnis zu löschen, müssen auf dem
Verzeichnis Schreib- und Ausführ-Rechte
gesetzt sein.Es gibt noch mehr Rechte, aber die werden vor allem in
speziellen Umständen benutzt, wie zum Beispiel bei
SetUID-Binaries und Verzeichnissen mit gesetztem Sticky-Bit.
Mehr über Zugriffsrechte von Dateien und wie sie gesetzt werden,
finden Sie in &man.chmod.1;.TomRhodesBeigesteuert von Symbolische ZugriffsrechteZugriffsrechtesymbolischeDie Zugriffsrechte lassen sich auch über Symbole
anstelle von oktalen Werten festlegen. Symbolische
Zugriffsrechte werden in der Reihenfolge
Wer, Aktion
und Berechtigung angegeben.
Die folgenden Symbole stehen zur Auswahl:OptionSymbolBedeutungWeruBenutzer (user)WergGruppe (group)WeroAndere (other)WeraAlleAktion+Berechtigungen hinzufügenAktion-Berechtigungen entziehenAktion=Berechtigungen explizit setzenBerechtigungrlesen (read)Berechtigungwschreiben (write)Berechtigungxausführen
(execute)BerechtigungtSticky-BitBerechtigungsSet-UID oder Set-GIDSymbolische Zugriffsrechte werden wie die numerischen
mit dem Kommando &man.chmod.1; vergeben. Wenn
Sie beispielsweise allen anderen Benutzern den Zugriff auf
die Datei FILE verbieten wollen,
benutzen Sie den nachstehenden Befehl:&prompt.user; chmod go= FILEWenn Sie mehr als eine Änderung der Rechte einer
Datei vornehmen wollen, können Sie eine durch Kommata
getrennte Liste der Rechte angeben. Das folgende Beispiel
entzieht der Gruppe und der Welt (den anderen) die
Schreibberechtigung auf die Datei FILE
und fügt dann für alle Ausführungsrechte
hinzu:&prompt.user; chmod go-w,a+x FILETomRhodesBeigetragen von &os; Datei-FlagsZusätzlich zu den vorhin diskutierten Zugriffsrechten
unterstützt &os; auch die sogenannten
Datei-Flags. Diese erhöhen die Sicherheit
Ihres Systems, indem sie eine verbesserte Kontrolle von
Dateien erlauben. Verzeichnisse werden allerdings nicht
unterstützt.Diese verbesserte Sicherheit führt dazu, dass manche
Dateien nicht einmal von root gelöscht
oder bearbeitet werden können.Datei-Flags können über &man.chflags.1; gesetzt
oder gelöscht werden. Um beispielsweise die Datei
file1 mit dem
unlöschbar-Flag zu sichern, geben Sie
folgenden Befehl ein:&prompt.root; chflags sunlink file1Um dieses Flag wieder zu löschen, geben Sie den
Befehl erneut ein. Allerdings setzen Sie ein
no vor :&prompt.root; chflags nosunlink file1Um die Flags dieser Datei anzuzeigen, verwenden Sie
&man.ls.1; zusammen mit der Option :&prompt.root; ls -lo file1Dadurch erhalten Sie eine Ausgabe ähnlich der
folgenden:-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1Viele Flags können nur von root
gesetzt oder gelöscht werden. Andere wiederum können
auch vom Eigentümer der Datei gesetzt werden. Weitere
Informationen zu Datei-Flags finden sich in den Manualpages
&man.chflags.1; und &man.chflags.2;.TomRhodesBeigetragen von Die Berechtigungen setuid, setgid, und stickyAnders als die Berechtigungen, die bereits angesprochen wurden,
existieren drei weitere Einstellungen, über die alle
Administratoren Bescheid wissen sollten. Dies sind die Berechtigungen
setuid, setgid und
sticky.Diese Einstellungen sind wichtig für manche &unix;-Operationen,
da sie Funktionalitäten zur Verfügung stellen, die
normalerweise nicht an gewöhnliche Anwender vergeben wird.
Um diese zu verstehen, muss der Unterschied zwischen der realen
und der effektiven Benutzer-ID erwähnt werden.Die reale Benutzer-ID ist die UID, welche den
Prozess besitzt oder gestartet hat. Die effektive
UID ist diejenige, als die der Prozess läuft.
Beispielsweise wird &man.passwd.1; mit der realen ID des Benutzers
ausgeführt, der sein Passwort ändert. Um jedoch die
Passwortdatenbank zu bearbeiten, wird es effektiv als
root-Benutzer ausgeführt. Das
ermöglicht es normalen Benutzern, ihr Passwort zu ändern, ohne
einen Permission Denied-Fehler angezeigt zu
bekommen.Die nosuid &man.mount.8;-Option wird dafür
sorgen, dass diese Anwendungen stillschweigend scheitern. Genauer
gesagt, sie werden nicht ausgeführt und der Anwender wird
darüber auch nicht informiert. Auf diese Option kann man sich
nicht vollständig verlassen, da ein
nosuid-Wrapper in der Lage wäre, dies zu
umgehen, wie in der &man.mount.8; Manualpage zu lesen ist.Die setuid-Berechtigung kann durch das Voranstellen bei einer
Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im
folgenden Beispiel gezeigt wird:&prompt.root; chmod 4755 suidexample.shDie Berechtigungen auf der
suidexample.sh-Datei
sollten jetzt wie folgt aussehen:-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.shIn dem Beispiel sollte auffallen, dass ein s
jetzt Teil der Berechtigungen des Dateibesitzers geworden ist, welches
das Ausführen-Bit ersetzt. Dies ermöglicht es Werkzeugen
mit erhöhten Berechtigungen zu laufen, wie z.B.
passwd.Um dies in Echtzeit zu beobachten, öffnen Sie zwei Terminals.
Starten Sie auf einem den passwd-Prozess als normaler
Benutzer. Während es auf die Passworteingabe wartet,
überprüfen Sie die Prozesstabelle und sehen Sie sich die
Informationen des passwd-Kommandos an.Im Terminal A:Changing local password for trhodes
Old Password:Im Terminal B:&prompt.root; ps aux | grep passwdtrhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd
root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwdWie oben erwähnt, wird passwd von einem
normalen Benutzer ausgeführt, benutzt aber die effektive
UID von root.Die setgid-Berechtigung führt die gleiche
Aktion wie die setuid-Berechtigung durch, allerdings
verändert sie die Gruppenberechtigungen. Wenn eine Anwendung
oder ein Werkzeug mit dieser Berechtigung ausgeführt wird,
erhält es die Berechtigungen basierend auf der Gruppe, welche die
Datei besitzt und nicht die des Benutzers, der den Prozess gestartet
hat.Um die setgid-Berechtigung auf einer Datei zu
setzen, geben Sie dem chmod-Befehl eine
führende Zwei (2) mit, wie im folgenden gezeigt:&prompt.root; chmod 2755 sgidexample.shDie neue Einstellung kann wie zuvor betrachtet werden. Beachten Sie,
dass das s sich jetzt in dem Feld befindet, das
für die Berechtigungen der Gruppe bestimmt ist:-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.shObwohl es sich bei dem in diesen Beispielen gezeigten Shellskript
um eine ausführbare Datei handelt, wird es nicht mit einer
anderen EUID oder effektiven Benutzer-ID
ausgeführt. Das ist so, weil Shellskripte keinen Zugriff auf
&man.setuid.2;-Systemaufrufe erhalten.Diese beiden ersten angesprochenen Spezialberechtigungen (die
setuid und setgid
Berechtigungs-Bits) können die Systemsicherheit verringern, da
sie erhöhte Rechte ermöglichen. Es gibt noch ein drittes
Berechtigungs-Bit, das die Sicherheit eines Systems erhöhen kann:
das sticky bit.Das sticky bit erlaubt, wenn es auf ein
Verzeichnis angewendet wird, nur dem Besitzer der Datei diese Dateien
auch zu löschen. Dieses Recht ist nützlich, um die
Löschung von Dateien in öffentlichen Verzeichnissen durch
Benutzer, denen diese Dateien nicht gehören, zu verhindern, wie
z.B. in /tmp. Um diese Berechtigung anzuwenden,
stellen Sie der Berechtigung eine Eins (1) voran, beispielsweise
so:&prompt.root; chmod 1777 /tmpDen Effekt können Sie sich ansehen, indem Sie
das Kommando ls ausführen:&prompt.root; ls -al / | grep tmpdrwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmpDas sticky bit kann anhand des
t ganz am Ende der Berechtigungen abgelesen
werden.Verzeichnis-StrukturenVerzeichnis HierarchienDie FreeBSD-Verzeichnishierarchie ist die Grundlage, um
ein umfassendes Verständnis des Systems zu erlangen.
Das wichtigste Konzept, das Sie verstehen sollten, ist das
Root-Verzeichnis /. Dieses Verzeichnis ist das
erste, das während des Bootens eingehangen wird. Es
enthält das notwendige Basissystem, um das System in den
Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält
auch die Mountpunkte für Dateisysteme, die beim Wechsel in
den Multiuser-Modus eingehängt werden.Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche
Dateisysteme (in der Regel unterhalb des Wurzelverzeichnisses)
eingehängt werden können. Dieser Vorgang wird in
ausführlich beschrieben.
Standard-Mountpunkte sind /usr,
/var, /tmp,
/mnt sowie /cdrom.
Auf diese Verzeichnisse verweisen üblicherweise Einträge
in der Datei /etc/fstab.
/etc/fstab ist
eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten
als Referenz des Systems. Die meisten der Dateisysteme in
/etc/fstab werden beim Booten automatisch
durch das Skript &man.rc.8; gemountet, wenn die zugehörigen
Einträge nicht mit der Option
versehen sind. Weitere Informationen zu diesem Thema finden Sie
im .Eine vollständige Beschreibung der Dateisystem-Hierarchie
finden Sie in &man.hier.7;. Als Beispiel sei eine kurze
Übersicht über die am häufigsten verwendeten
Verzeichnisse gegeben:VerzeichnisBeschreibung/Wurzelverzeichnis des Dateisystems./bin/Grundlegende Werkzeuge für den Single-User-Modus
sowie den Mehrbenutzerbetrieb./boot/Programme und Konfigurationsdateien, die während
des Bootens benutzt werden./boot/defaults/Vorgaben für die Boot-Konfiguration, siehe
&man.loader.conf.5;./dev/Gerätedateien, siehe &man.intro.4;./etc/Konfigurationsdateien und Skripten des Systems./etc/defaults/Vorgaben für die System Konfigurationsdateien,
siehe &man.rc.8;./etc/mail/Konfigurationsdateien von MTAs wie
&man.sendmail.8;./etc/namedb/Konfigurationsdateien von named,
siehe &man.named.8;./etc/periodic/Täglich, wöchentlich oder monatlich
ablaufende Skripte, die von &man.cron.8; gestartet werden.
Siehe &man.periodic.8;./etc/ppp/Konfigurationsdateien von ppp,
siehe &man.ppp.8;./mnt/Ein leeres Verzeichnis, das von Systemadministratoren
häufig als temporärer Mountpunkt genutzt wird./proc/Prozess Dateisystem, siehe &man.procfs.5;
und &man.mount.procfs.8;./rescue/Statisch gelinkte Programme zur Wiederherstellung
des Systems, lesen Sie dazu auch &man.rescue.8;./root/Home Verzeichnis von root./sbin/Systemprogramme und administrative Werkzeuge, die
grundlegend für den Single-User-Modus und den
Mehrbenutzerbetrieb sind./tmp/Temporäre Dateien, die für gewöhnlich
bei einem Neustart des Systems verloren gehen.
Häufig wird ein speicherbasiertes Dateisystem unter
/tmp
eingehängt. Dieser Vorgang kann automatisiert werden,
wenn Sie die tmpmfs-bezogenen Variablen von
&man.rc.conf.5; verwenden. Alternativ können Sie
auch einen entsprechenden Eintrag in
/etc/fstab aufnehmen. Weitere
Informationen finden Sie in &man.mdmfs.8;./usr/Der Großteil der Benutzerprogramme und
Anwendungen./usr/bin/Gebräuchliche Werkzeuge, Programmierhilfen und
Anwendungen./usr/include/Standard C include-Dateien./usr/lib/Bibliotheken./usr/libdata/Daten verschiedener Werkzeuge./usr/libexec/System-Dämonen und System-Werkzeuge, die von
anderen Programmen ausgeführt werden./usr/local/Lokale Programme, Bibliotheken usw. Die Ports-Sammlung
benutzt dieses Verzeichnis als Zielverzeichnis für zu
installierende Anwendungen. Innerhalb von
/usr/local sollte das von
&man.hier.7; beschriebene Layout für
/usr benutzt werden. Das
man Verzeichnis wird direkt unter
/usr/local anstelle unter
/usr/local/share angelegt. Die
Dokumentation der Ports findet sich in
share/doc/port.
/usr/obj/Von der Architektur abhängiger Verzeichnisbaum,
der durch das Bauen von /usr/src
entsteht.
- /usr/ports
+ /usr/ports/Die FreeBSD-Ports-Sammlung (optional)./usr/sbin/System-Dämonen und System-Werkzeuge, die von
Benutzern ausgeführt werden./usr/share/Von der Architektur unabhängige Dateien./usr/src/Quelldateien von BSD und/oder lokalen
Ergänzungen./usr/X11R6/Optionale X11R6-Programme und Bibliotheken./var/Wird für mehrere Zwecke genutzt und enthält
Logdateien, temporäre Daten und Spooldateien.
Manchmal wird ein speicherbasiertes Dateisystem unter
/var
eingehängt. Dieser Vorgang kann automatisiert werden,
wenn Sie die varmfs-bezogenen Variablen von
&man.rc.conf.5; verwenden. Alternativ können Sie
auch einen entsprechenden Eintrag in
/etc/fstab aufnehmen. Weitere
Informationen finden Sie in &man.mdmfs.8;./var/log/Verschiedene Logdateien des Systems./var/mail/Postfächer der Benutzer./var/spool/Verschiedene Spool-Verzeichnisse der Drucker- und
Mailsysteme./var/tmp/Temporäre Dateien. Dateien in diesem
Verzeichnis bleiben in der Regel auch bei einem Neustart
des Systems erhalten, es sei denn, bei
/var handelt es
sich um ein speicherbasiertes Dateisystem.
- /var/yp
+ /var/yp/NIS maps.Festplatten, Slices und Partitionen&os; identifiziert Dateien anhand eines Dateinamens.
In Dateinamen wird zwischen Groß- und Kleinschreibung
unterschieden: readme.txt und
README.TXT bezeichnen daher zwei
verschiedene Dateien. &os; benutzt keine Dateiendungen wie
.txt, um den Typ der Datei
(ein Programm, ein Dokument oder andere Daten) zu
bestimmen.Dateien werden in Verzeichnissen gespeichert. In einem
Verzeichnis können sich keine oder hunderte Dateien
befinden. Ein Verzeichnis kann auch andere Verzeichnisse
enthalten und so eine Hierarchie von Verzeichnissen aufbauen,
die Ihnen die Ablage von Daten erleichtert.In Dateinamen werden Verzeichnisse durch einen
Schrägstrich (/,
Slash) getrennt. Wenn
das Verzeichnis foo
ein Verzeichnis bar
enthält, in dem sich die Datei readme.txt
befindet, lautet der vollständige Name der Datei
(oder der Pfad zur Datei)
foo/bar/readme.txt.Verzeichnisse und Dateien werden in einem Dateisystem
gespeichert. Jedes Dateisystem besitzt ein
Wurzelverzeichnis
(Root-Directory),
das weitere Verzeichnisse enthalten kann.Dieses Konzept kennen Sie vielleicht von anderen
Betriebssystemen, aber es gibt einige Unterschiede:
In &ms-dos; werden Datei- und Verzeichnisnamen mit dem
Zeichen \ getrennt, &macos; benutzt
dazu das Zeichen :.&os; kennt keine Laufwerksbuchstaben und in Pfaden
werden keine Bezeichnungen für Laufwerke benutzt.
Die Pfadangabe c:/foo/bar/readme.txt
gibt es in &os; nicht.Stattdessen wird ein Dateisystem als Wurzeldateisystem
(root file system)
ausgewählt. Das Wurzelverzeichnis dieses Dateisystems
wird / genannt.
Jedes andere Dateisystem wird unter dem Wurzeldateisystem
eingehangen
(mount). Daher scheint
jedes Verzeichnis, unabhängig von der Anzahl der
Platten, auf derselben Platte zu liegen.Betrachten wir drei Dateisysteme A,
B und C. Jedes
Dateisystem besitzt ein eigenes Wurzelverzeichnis, das
zwei andere Verzeichnisse enthält:
A1,
A2,
B1,
B2,
C1 und
C2.Das Wurzeldateisystem soll A sein.
Das Kommando ls zeigt darin
die beiden Verzeichnisse A1
und A2 an.
Der Verzeichnisbaum sieht wie folgt aus: /
|
+--- A1
|
`--- A2Ein Dateisystem wird in einem Verzeichnis eines anderen
Dateisystems eingehangen. Wir hängen nun das Dateisystem
B in das Verzeichnis
A1 ein. Das
Wurzelverzeichnis von B ersetzt nun
das Verzeichnis A1 und
die Verzeichnisse des Dateisystems B
werden sichtbar: /
|
+--- A1
| |
| +--- B1
| |
| `--- B2
|
`--- A2Jede Datei in den Verzeichnissen
B1 oder
B2 kann
über den Pfad /A1/B1
oder /A1/B2
erreicht werden. Dateien aus dem Verzeichnis
/A1 sind jetzt
verborgen. Wenn das Dateisystem B
wieder abgehangen wird
(umount), erscheinen
die verborgenen Dateien wieder.Wenn das Dateisystem B unter dem
Verzeichnis A2
eingehangen würde, sähe der Verzeichnisbaum
so aus: /
|
+--- A1
|
`--- A2
|
+--- B1
|
`--- B2Die Dateien des Dateisystems B wären
unter den Pfaden /A2/B1 und
/A2/B2 erreichbar.Dateisysteme können übereinander eingehangen
werden. Der folgende Baum entsteht, wenn im letzten
Beispiel das Dateisystem C in das Verzeichnis
B1 des Dateisystems
B eingehangen wird: /
|
+--- A1
|
`--- A2
|
+--- B1
| |
| +--- C1
| |
| `--- C2
|
`--- B2C könnte auch im Verzeichnis
A1 eingehangen
werden: /
|
+--- A1
| |
| +--- C1
| |
| `--- C2
|
`--- A2
|
+--- B1
|
`--- B2Der &ms-dos;-Befehl join kann Ähnliches
bewirken.Normalerweise müssen Sie sich nicht mit Dateisystemen
beschäftigen. Während der Installation werden
die Dateisysteme und die Stellen, in der sie eingehangen werden,
festgelegt. Dateisysteme müssen Sie erst wieder anlegen,
wenn Sie eine neue Platte hinzufügen.Sie können sogar mit nur einem großen
Dateisystem auskommen. Dies hat mehrere Nachteile
und einen Vorteil.Vorteile mehrerer DateisystemeDie Dateisysteme können mit unterschiedlichen
Optionen (mount options)
eingehangen werden. Bei sorgfältiger Planung können
Sie beispielsweise das Wurzeldateisystem nur lesbar
einhängen. Damit schützen Sie sich vor dem
unabsichtlichen Löschen oder Editieren kritischer
Dateien. Von Benutzern beschreibbare Dateisysteme
wie /home
können Sie mit der Option nosuid
einhängen, wenn sie von anderen Dateisystemen getrennt
sind. Die SUID- und
GUID-Bits verlieren auf solchen
Dateisystemen ihre Wirkung und die Sicherheit des
Systems kann dadurch erhöht werden.Die Lage von Dateien im Dateisystem wird, abhängig
vom Gebrauch des Dateisystems, automatisch von &os;
optimiert. Ein Dateisystem mit vielen kleinen Dateien,
die häufig geschrieben werden, wird anders behandelt
als ein Dateisystem mit wenigen großen Dateien.
Mit nur einem Dateisystem ist diese Optimierung
unmöglich.In der Regel übersteht ein &os;-Dateisystem auch
einen Stromausfall. Allerdings kann ein Stromausfall zu
einem kritischen Zeitpunkt das Dateisystem beschädigen.
Wenn die Daten über mehrere Dateisysteme verteilt
sind, lässt sich das System mit hoher
Wahrscheinlichkeit noch starten. Dies erleichtert
das Zurückspielen von Datensicherungen.Vorteil eines einzelnen DateisystemsDie Größe von Dateisystemen liegt fest.
Es kann passieren, dass Sie eine Partition
vergrößern müssen. Dies ist nicht leicht:
Sie müssen die Daten sichern, das Dateisystem
vergrößert anlegen und die gesicherten
Daten zurückspielen.&os; kennt den Befehl &man.growfs.8;, mit dem man
Dateisysteme im laufenden Betrieb
vergrößern kann.Dateisysteme befinden sich in Partitionen (damit sind
nicht die normalen &ms-dos;-Partitionen gemeint). Jede Partition
wird mit einem Buchstaben von a bis
h bezeichnet und kann nur ein Dateisystem
enthalten. Dateisysteme können daher über ihren
Mount-Point, den Punkt an dem sie eingehangen sind, oder
den Buchstaben der Partition, in der sie liegen, identifiziert
werden.&os; benutzt einen Teil der Platte für den
Swap-Bereich, der dem Rechner
virtuellen Speicher zur Verfügung
stellt. Dadurch kann der Rechner Anwendungen mehr Speicher
zur Verfügung stellen als tatsächlich eingebaut
ist. Wenn der Speicher knapp wird, kann &os; nicht benutzte
Daten in den Swap-Bereich auslagern. Die ausgelagerten
Daten können später wieder in den Speicher
geholt werden (dafür werden dann andere Daten
ausgelagert).Für einige Partitionen gelten besondere
Konventionen:PartitionKonventionaEnthält normalerweise
das WurzeldateisystembEnthält normalerweise
den Swap-BereichcIst normalerweise genauso groß wie
die Slice in der die Partition liegt. Werkzeuge,
die auf der kompletten Slice arbeiten, wie ein
Bad-Block-Scanner, können so die
c-Partition benutzen.
Für gewöhnlich legen Sie in dieser
Partition kein Dateisystem an.dFrüher hatte die d-Partition
eine besondere Bedeutung. Heute ist dies nicht mehr der
Fall und die Partition d kann wie
jede andere Partition auch verwendet werden.Jede Partition, die ein Dateisystem enthält,
wird in einer Slice angelegt.
Slice ist der Begriff, den &os; für &ms-dos;-Partitionen
verwendet. Slices werden von eins bis vier durchnummeriert.SlicesPartitionendangerously dedicatedDie Slice-Nummern werden mit vorgestelltem
s hinter den Gerätenamen gestellt:
da0s1
ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer
Festplatte gibt es höchstens vier Slices. In einer
Slice des passenden Typs kann es weitere logische Slices
geben. Diese erweiterten Slices werden ab fünf durchnummeriert:
ad0s5 ist
die erste erweiterte Slice auf einer IDE-Platte. Diese
Geräte werden von Dateisystemen benutzt, die sich in
einer kompletten Slice befinden müssen.Slices, dangerously dedicated-Festplatten
und andere Platten enthalten Partitionen, die mit Buchstaben
von a bis h bezeichnet
werden. Der Buchstabe wird an den Gerätenamen
gehangen: da0a
ist die a-Partition des ersten
da-Laufwerks. Dieses Laufwerk ist
dangerously dedicated.
ad1s3e ist
die fünfte Partition in der dritten Slice der zweiten
IDE-Platte.Schließlich wird noch jede Festplatte des Systems
eindeutig bezeichnet. Der Name einer Festplatte beginnt mit
einem Code, der den Typ der Platte bezeichnet. Es folgt eine
Nummer, die angibt, um welche Festplatte es sich handelt.
Anders als bei Slices werden Festplatten von Null beginnend
durchnummeriert. Gängige Festplatten-Namen sind in
zusammengestellt.Wenn Sie eine Partition angeben, erwartet &os;, dass Sie
auch die Slice und die Platte angeben, in denen sich die
Partition befindet. Wenn Sie eine Slice angeben, müssen
Sie auch die Platte der Slice angeben. Setzen Sie den Namen
aus dem Plattennamen gefolgt von einem s,
der Slice-Nummer und dem Buchstaben der Partition zusammen.
Einige Beispiele finden Sie in
.Der Aufbau einer Festplatte wird in
dargestellt.Um &os; zu installieren, müssen Sie zuerst Slices
auf den Festplatten anlegen. Innerhalb der Slices, die Sie
für &os; verwenden wollen, müssen Sie dann
Partitionen anlegen. In den Partitionen wiederum werden
die Dateisysteme (oder der Auslagerungsbereich) angelegt.
Für Dateisysteme müssen Sie schließlich
noch festlegen, wo diese eingehangen werden (Mount-Point).
Namen von Platten, Slices und PartitionenNameBedeutungad0s1aDie erste Partition (a)
in der ersten Slice (s1) der
ersten IDE-Festplatte (ad0).da1s2eDie fünfte Partition (e)
der zweiten Slice (s2) auf
der zweiten SCSI-Festplatte
(da1).Aufteilung einer FestplatteDas folgende Diagramm zeigt die Sicht von &os; auf die
erste IDE-Festplatte eines Rechners. Die Platte soll
4 GB groß sein und zwei Slices (&ms-dos;-Partitionen)
mit je 2 GB besitzen. Die erste Slice enthält
ein &ms-dos;-Laufwerk (C:), die zweite
Slice wird von &os; benutzt. Im Beispiel verwendet die
&os;-Installationen drei Datenpartitionen und einen
Auslagerungsbereich.Jede der drei Partitionen enthält ein Dateisystem.
Das Wurzeldateisystem ist die a-Partition.
In der e-Partition befindet sich
der /var-Verzeichnisbaum
und in der f-Partition befindet sich
der Verzeichnisbaum unterhalb von
/usr..-----------------. --.
| | |
| DOS / Windows | |
: : > First slice, ad0s1
: : |
| | |
:=================: ==: --.
| | | Partition a, mounted as / |
| | > referred to as ad0s2a |
| | | |
:-----------------: ==: |
| | | Partition b, used as swap |
| | > referred to as ad0s2b |
| | | |
:-----------------: ==: | Partition c, no
| | | Partition e, used as /var > file system, all
| | > referred to as ad0s2e | of FreeBSD slice,
| | | | ad0s2c
:-----------------: ==: |
| | | |
: : | Partition f, used as /usr |
: : > referred to as ad0s2f |
: : | |
| | | |
| | --' |
`-----------------' --'Anhängen und Abhängen von DateisystemenEin Dateisystem wird am besten als ein Baum mit der
Wurzel / veranschaulicht.
/dev, /usr, und
die anderen Verzeichnisse im Rootverzeichnis sind Zweige,
die wiederum eigene Zweige wie /usr/local
haben können.Root-DateisystemEs gibt verschiedene Gründe, bestimmte dieser Verzeichnisse
auf eigenen Dateisystemen anzulegen. /var
enthält log/, spool/
sowie verschiedene andere temporäre
Dateien und kann sich daher schnell füllen. Es empfiehlt sich,
/var von / zu trennen,
da es schlecht ist, wenn das Root-Dateisystem voll
läuft.Ein weiterer Grund bestimmte Verzeichnisbäume auf
andere Dateisysteme zu legen, ist gegeben, wenn sich die
Verzeichnisbäume auf gesonderten physikalischen oder
virtuellen Platten, wie
Network File System
oder CD-ROM-Laufwerken, befinden.Die fstab DateiDateisystemefstabWährend des Boot-Prozesses
werden in /etc/fstab aufgeführte
Verzeichnisse, sofern sie nicht mit der Option
versehen sind, automatisch angehangen.Die Zeilen in /etc/fstab haben das
folgende Format:device/mount-pointfstypeoptionsdumpfreqpassnodeviceEin existierender Gerätename
wie in beschrieben.mount-pointEin existierendes Verzeichnis,
an das das Dateisystem angehangen wird.fstypeDer Typ des Dateisystems,
der an &man.mount.8; weitergegeben wird. FreeBSDs
Standarddateisystem ist ufs.optionsEntweder
für beschreibbare Dateisysteme oder
für schreibgeschützte Dateisysteme, gefolgt von
weiteren benötigten Optionen. Eine häufig verwendete
Option ist für Dateisysteme,
die während der normalen Bootsequenz nicht angehangen
werden sollen. Weitere Optionen finden sich
in &man.mount.8;.dumpfreqGibt die Anzahl der Tage an, nachdem das
Dateisystem gesichert werden soll. Fehlt der Wert, wird
0 angenommen.passnoBestimmt die Reihenfolge, in der die Dateisysteme
überprüft werden sollen. Für Dateisysteme,
die übersprungen werden sollen, ist
passno auf null zu setzen. Für das
Root-Dateisystem, das vor allen anderen überprüft
werden muss, sollte der Wert von
passno eins betragen. Allen anderen
Dateisystemen sollten Werte größer eins zugewiesen
werden. Wenn mehrere Dateisysteme den gleichen Wert
besitzen, wird &man.fsck.8; versuchen, diese parallel zu
überprüfen.Das mount KommandoDateisystemeanhängen&man.mount.8; hängt schließlich Dateisysteme
an.In der grundlegenden Form wird es wie folgt benutzt:&prompt.root; mount devicemountpointViele Optionen werden in &man.mount.8; beschrieben,
die am häufigsten verwendeten sind:Optionen von mountHängt alle Dateisysteme aus
/etc/fstab an. Davon ausgenommen
sind Dateisysteme, die mit noauto markiert
sind, die mit der Option ausgeschlossen
wurden und Dateisysteme, die schon angehangen sind.Führt alles bis auf den
mount-Systemaufruf aus.
Nützlich ist diese Option in Verbindung
mit . Damit wird angezeigt, was
&man.mount.8; tatsächlich versuchen
würde, um das Dateisystem anzuhängen.Erzwingt das Anhängen eines unsauberen Dateisystems
oder erzwingt die Rücknahme des Schreibzugriffs, wenn
der Status des Dateisystems von beschreibbar auf
schreibgeschützt geändert wird.Hängt das Dateisystem schreibgeschützt ein. Das
kann auch durch Angabe von als Argument
( vor FreeBSD 5.2) der Option
erreicht werden.fstypeHängt das Dateisystem mit dem angegebenen Typ an,
oder hängt nur Dateisysteme mit dem angegebenen Typ
an, wenn auch angegeben
wurde.Die Voreinstellung für den Typ des Dateisystems
ist ufs.Aktualisiert die Mountoptionen des Dateisystems.Geschwätzig sein.Hängt das Dateisystem beschreibbar an. erwartet eine durch Kommata separierte Liste
von Optionen, unter anderem die folgenden:noexecVerbietet das Ausführen von binären
Dateien auf dem Dateisystem. Dies ist eine
nützliche Sicherheitsfunktion.nosuidSetUID und SetGID Bits werden auf dem Dateisystem
nicht beachtet. Dies ist eine nützliche
Sicherheitsfunktion.Das umount KommandoDateisystemeabhängen&man.umount.8; akzeptiert als Parameter entweder
einen Mountpoint, einen Gerätenamen, oder die
Optionen oder .Jede Form akzeptiert , um das
Abhängen zu erzwingen, und , um
etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit
: Ihr Computer kann abstürzen oder es
können Daten auf dem Dateisystem beschädigt werden, wenn
Sie das Abhängen erzwingen. und werden benutzt
um alle Dateisysteme, deren Typ durch
modifiziert werden kann, abzuhängen.
hängt das Rootdateisystem nicht ab.ProzesseDa FreeBSD ein Multitasking-Betriebssystem ist, sieht es so aus,
als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm,
das zu irgendeiner Zeit läuft, wird
Prozess genannt. Jedes Kommando
startet mindestens einen Prozess. Einige Systemprozesse
laufen ständig und stellen die Funktion des Systems sicher.Jeder Prozess wird durch eine eindeutige Nummer identifiziert,
die Prozess-ID oder
PID genannt wird. Prozesse haben ebenso
wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche
Dateien und Geräte der Prozess benutzen kann. Dabei
finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten
Prozesse haben auch einen Elternprozess, der sie gestartet hat.
Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein
Prozess und jedes Kommando, das Sie starten, ist auch ein
Prozess. Jeder Prozess, den Sie auf diese Weise starten,
besitzt den Shell-Prozess als Elternprozess. Die Ausnahme
hiervon ist ein spezieller Prozess, der &man.init.8;
heißt. init ist immer der erste Prozess
und hat somit die PID 1. init wird vom Kernel
beim Booten von FreeBSD gestartet.Die Kommandos &man.ps.1; und &man.top.1; sind besonders
nützlich, um sich die Prozesse auf einem System anzusehen.
ps zeigt eine statische Liste der laufenden
Prozesse und kann deren PID, Speicherverbrauch und die
Kommandozeile, mit der sie gestartet wurden und vieles mehr
anzeigen. top zeigt alle laufenden Prozesse
an und aktualisiert die Anzeige, so dass Sie Ihrem Computer
bei der Arbeit zuschauen können.Normal zeigt Ihnen ps nur die laufenden
Prozesse, die Ihnen gehören. Zum Beispiel:&prompt.user; ps
PID TT STAT TIME COMMAND
298 p0 Ss 0:01.10 tcsh
7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730 p0 IW 0:00.00 (dns helper) (navigator-linux-)
72210 p0 R+ 0:00.00 ps
390 p1 Is 0:01.14 tcsh
7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y
6688 p3 IWs 0:00.00 tcsh
10735 p4 IWs 0:00.00 tcsh
20256 p5 IWs 0:00.00 tcsh
262 v0 IWs 0:00.00 -tcsh (tcsh)
270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc
285 v0 S 0:38.45 /usr/X11R6/bin/sawfishWie Sie sehen, gibt &man.ps.1; mehrere Spalten aus. In der
PID Spalte findet sich die vorher besprochene
Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen
und fangen wieder von vorne an, wenn die Grenze überschritten
wird. Ist eine PID bereits vergeben, wird diese allerdings nicht
erneut vergeben.
Die Spalte TT zeigt den Terminal, auf dem das
Programm läuft. STAT zeigt den Status
des Programms an und kann für die Zwecke dieser Diskussion ebenso
wie TT ignoriert werden. TIME
gibt die Zeit an, die das Programm auf der CPU gelaufen ist –
dies ist nicht unbedingt die Zeit, die seit dem Start des Programms
vergangen ist, da die meisten Programme hauptsächlich auf
bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen.
Unter der Spalte COMMAND finden Sie schließlich
die Kommandozeile, mit der das Programm gestartet wurde.&man.ps.1; besitzt viele Optionen, um die angezeigten Informationen
zu beeinflussen. Eine nützliche Kombination ist
auxww. Mit werden Information
über alle laufenden Prozesse und nicht nur Ihrer eigenen
angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen
über den Speicherverbrauch werden mit
angezeigt. zeigt auch Dämonen-Prozesse an,
und veranlasst &man.ps.1; die komplette
Kommandozeile für jeden Befehl anzuzeigen, anstatt sie
abzuschneiden, wenn sie zu lang für die Bildschirmausgabe
wird.Die Ausgabe von &man.top.1; sieht ähnlich aus:&prompt.user; top
last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10
47 processes: 1 running, 46 sleeping
CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top
7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14
281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA
296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm
48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu
175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd
7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt
...Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten
fünf Kopfzeilen finden sich die zuletzt zugeteilte PID, die
Systemauslastung (engl. load average),
die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die
momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele
Prozesse momentan laufen (im Beispiel 47), wie viel Speicher
und Swap verbraucht wurde und wie viel Zeit das System in den
verschiedenen CPU-Modi verbringt.Darunter befinden sich einige Spalten mit ähnlichen
Informationen wie in der Ausgabe von &man.ps.1;. Wie im vorigen
Beispiel können Sie die PID, den Besitzer, die verbrauchte
CPU-Zeit und das Kommando erkennen. &man.top.1; zeigt auch den
Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt
ist. Die erste Spalte gibt den gesamten Speicherverbrauch des
Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch
angegeben. &netscape; hat im gezeigten
Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt
es allerdings nur 9 MB.Die Anzeige wird von &man.top.1; automatisch alle zwei Sekunden
aktualisiert. Der Zeitraum kann mit eingestellt
werden.Dämonen, Signale und Stoppen von ProzessenWenn Sie einen Editor starten, können Sie ihn leicht bedienen
und Dateien laden. Sie können das, weil der Editor dafür
Vorsorge getroffen hat und auf einem Terminal
läuft. Manche Programme erwarten keine Eingaben von einem
Benutzer und lösen sich bei erster Gelegenheit von ihrem
Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag
damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen.
Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren
sind ein weiteres Beispiel für diesen Typ von Anwendungen.Wir nennen diese Programme Dämonen.
Dämonen stammen aus der griechischen Mythologie und waren
weder gut noch böse. Sie waren kleine dienstbare Geister,
die meistens nützliche Sachen für die Menschheit vollbrachten.
Ähnlich wie heutzutage Web-Server und Mail-Server nützliche
Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen
dieser fröhlich aussehende Dämon mit Turnschuhen
und Dreizack.Programme, die als Dämon laufen, werden entsprechend einer
Konvention mit einem d am Ende benannt.
BIND steht beispielsweise für
Berkeley Internet Name Domain, das tatsächlich laufende Programm
heißt aber
named. Der Apache Webserver wird
httpd genannt, der Druckerspool-Dämon heißt
lpd usw. Dies ist allerdings eine Konvention
und keine unumstößliche Regel: Der Dämon der
Anwendung sendmail heißt
sendmail und nicht maild, wie
Sie vielleicht gedacht hatten.Manchmal müssen Sie mit einem Dämon kommunizieren. Dazu
verwenden Sie Signale. Sie können
mit einem Dämonen oder jedem anderen laufenden Prozess
kommunizieren, indem Sie diesem ein Signal schicken. Sie können
verschiedene Signale verschicken – manche haben eine festgelegte
Bedeutung, andere werden von der Anwendung interpretiert. Die
Dokumentation zur fraglichen Anwendung wird erklären, wie
die Anwendung Signale interpretiert. Sie können nur Signale
zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben
nicht die Berechtigung, Prozessen anderer Benutzer mit &man.kill.1;
oder &man.kill.2; Signale zu schicken. Der Benutzer
root darf jedem Prozess Signale schicken.In manchen Fällen wird FreeBSD Signale senden. Wenn eine
Anwendung schlecht geschrieben ist und auf Speicher zugreift, auf
den sie nicht zugreifen soll, so sendet FreeBSD dem Prozess
das Segmentation Violation Signal
(SIGSEGV). Wenn eine Anwendung den &man.alarm.3;
Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu
werden, bekommt sie das Alarm Signal (SIGALRM)
gesendet.Zwei Signale können benutzt werden, um Prozesse zu stoppen:
SIGTERM und SIGKILL. Mit
SIGTERM fordern Sie den Prozess höflich zum
Beenden auf. Der Prozess kann das Signal abfangen und merken,
dass er sich beenden soll. Er hat dann Gelegenheit Logdateien
zu schließen und die Aktion, die er vor der Aufforderung
sich zu beenden durchführte, abzuschließen. Er kann
sogar SIGTERM ignorieren, wenn er eine Aktion
durchführt, die nicht unterbrochen werden darf.SIGKILL kann von keinem Prozess ignoriert
werden. Das Signal lässt sich mit Mich interessiert
nicht, was du gerade machst, hör sofort auf damit!
umschreiben. Wenn Sie einem Prozess SIGKILL
schicken, dann wird FreeBSD diesen sofort beenden
Das stimmt nicht ganz: Es gibt Fälle, in denen ein Prozess
nicht unterbrochen werden kann. Wenn der Prozesss zum Beispiel
eine Datei von einem anderen Rechner auf dem Netzwerk liest und dieser
Rechner aus irgendwelchen Gründen nicht erreichbar ist
(ausgeschaltet, oder ein Netzwerkfehler), dann ist der Prozess
nicht zu unterbrechen. Wenn der Prozess den Lesezugriff
nach einem Timeout von typischerweise zwei Minuten aufgibt,
dann wir er beendet..Andere Signale, die Sie vielleicht verschicken wollen, sind
SIGHUP, SIGUSR1 und
SIGUSR2. Diese Signale sind für allgemeine
Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich
auf diese Signale reagieren.Nehmen wir an, Sie haben die Konfiguration Ihres Webservers
verändert und möchten dies dem Server mitteilen. Sie
könnten den Server natürlich stoppen und
httpd wieder starten. Die Folge wäre eine
kurze Zeit, in der der Server nicht erreichbar ist. Die meisten
Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines
SIGHUP neu ein. Da es keinen Standard gibt, der
vorschreibt, wie auf diese Signale zu reagieren ist, lesen
Sie bitte die Dokumentation zu dem in Frage kommenden Dämon.Mit &man.kill.1; können Sie, wie unten gezeigt, Signale
verschicken.Verschicken von SignalenDas folgende Beispiel zeigt, wie Sie &man.inetd.8; ein
Signal schicken. Die Konfigurationsdatei von
inetd ist /etc/inetd.conf.
Diese Konfigurationsdatei liest inetd ein,
wenn er ein SIGHUP empfängt.Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal
schicken wollen. Benutzen Sie dazu &man.ps.1; und &man.grep.1;.
Mit &man.grep.1; können Sie in einer Ausgabe nach einem
String suchen. Da &man.inetd.8; unter dem Benutzer
root läuft und Sie das Kommando als
normaler Benutzer absetzen, müssen Sie &man.ps.1; mit
aufrufen:&prompt.user; ps -ax | grep inetd
198 ?? IWs 0:00.00 inetd -wWDie Prozess-ID von &man.inetd.8; ist 198. In einigen
Fällen werden Sie auch das grep inetd
Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie
&man.ps.1; die Liste der laufenden Prozesse untersucht.Senden Sie das Signal mit &man.kill.1;. Da &man.inetd.8;
unter dem Benutzer root läuft, müssen
Sie zuerst mit &man.su.1; root werden:&prompt.user; suPassword:
&prompt.root; /bin/kill -s HUP 198&man.kill.1; wird, wie andere Kommandos von &unix; Systemen auch, keine Ausgabe
erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen,
einem Prozess, der nicht Ihnen gehört, ein Signal zu
senden, dann werden Sie die Meldung
kill: PID: Operation not
permitted sehen. Wenn Sie sich bei der Eingabe der
PID vertippen, werden Sie das Signal dem falschen Prozess
schicken, was schlecht sein kann. Wenn Sie Glück haben,
existiert der Prozess nicht und Sie werden mit der Ausgabe
kill: PID: No such
process belohnt.Warum soll ich /bin/kill benutzen?Viele Shells stellen kill als internes
Kommando zur Verfügung, das heißt die Shell sendet
das Signal direkt, anstatt /bin/kill
zu starten. Das kann nützlich sein, aber die
unterschiedlichen Shells benutzen eine verschiedene Syntax,
um die Namen der Signale anzugeben. Anstatt jede Syntax zu
lernen, kann es einfacher sein, /bin/kill
... direkt aufzurufen.Andere Signale senden Sie auf die gleiche Weise, ersetzen
Sie nur TERM oder KILL
entsprechend.Es kann gravierende Auswirkungen haben, wenn Sie zufällig
Prozesse beenden. Insbesondere &man.init.8; mit der Prozess-ID
ist ein Spezialfall. Mit /bin/kill -s KILL 1
können Sie Ihr System schnell herunterfahren.
Überprüfen Sie die Argumente von &man.kill.1;
immer zweimal bevor
Sie Return drücken.ShellsShellsKommandozeileVon der tagtäglichen Arbeit mit FreeBSD wird eine Menge
mit der Kommandozeilen Schnittstelle der Shell erledigt. Die
Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe
anzunehmen und diese auszuführen. Viele Shells haben
außerdem eingebaute Funktionen, die die tägliche
Arbeit erleichtern, beispielsweise eine Dateiverwaltung,
die Vervollständigung von Dateinamen (Globbing), einen
Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD
enthält die Shells sh (die Bourne Shell) und
tcsh (die verbesserte C-Shell) im Basissystem.
Viele andere Shells, wie zsh oder
bash, befinden sich in der Ports-Sammlung.Welche Shell soll ich benutzen? Das ist wirklich eine
Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie
vielleicht eine C-artige Shell wie die tcsh
angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit &unix; Systemen
neu, so könnten Sie die bash probieren.
Der Punkt ist, dass
jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer
bevorzugten Arbeitsumgebung harmonieren können oder nicht.
Sie müssen sich eine Shell aussuchen.Ein verbreitetes Merkmal in Shells ist die
Dateinamen-Vervollständigung. Sie müssen nur einige
Buchstaben eines Kommandos oder eines Dateinamen eingeben und
die Shell vervollständigt den Rest automatisch durch
drücken der Tab-Taste. Hier ist ein Beispiel.
Angenommen, Sie
haben zwei Dateien foobar und
foo.bar. Die Datei
foo.bar möchten Sie löschen. Nun
würden Sie an der Tastatur eingeben:
rm fo[Tab].
[Tab].Die Shell würde dann rm
foo[BEEP].bar ausgeben.[BEEP] meint den Rechner-Piepser. Diesen gibt die Shell
aus, um anzuzeigen, dass es den Dateinamen nicht
vervollständigen konnte, da es mehrere Möglichkeiten
gibt. Beide Dateien foobar und
foo.bar beginnen mit fo,
so konnte nur bis foo ergänzt werden.
Nachdem Sie . eingaben und dann die
Tab-Taste
drückten, konnte die Shell den Rest für Sie
ausfüllen.UmgebungsvariablenEin weiteres Merkmal der Shell ist der Gebrauch von
Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare
im Umgebungsraum der Shell, die jedes von der Shell aufgerufene
Programm lesen kann. Daher enthält der Umgebungsraum viele
Konfigurationsdaten für Programme. Die folgende Liste zeigt
verbreitete Umgebungsvariablen und was sie bedeuten:UmgebungsvariablenVariableBeschreibungUSERName des angemeldeten Benutzers.PATHListe mit Verzeichnissen (getrennt durch Doppelpunkt)
zum Suchen nach Programmen.DISPLAYDer Name des X11-Bildschirms, auf dem
Ausgaben erfolgen sollen.SHELLDie aktuelle Shell.TERMName des Terminaltyps des Benutzers. Benutzt, um die
Fähigkeiten des Terminals zu bestimmen.TERMCAPDatenbankeintrag der Terminal Escape Codes,
benötigt um verschieden Terminalfunktionen
auszuführen.OSTYPETyp des Betriebsystems, beispielsweise FreeBSD.MACHTYPEDie CPU Architektur auf dem das System
läuft.EDITORVom Benutzer bevorzugter Text-Editor.PAGERVom Benutzer bevorzugter Text-Betrachter.MANPATHListe mit Verzeichnissen (getrennt durch Doppelpunkt)
zum Suchen nach Manualpages.ShellsBourne ShellDas Setzen von Umgebungsvariablen funktioniert
von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man
in C-artigen Shells wie der tcsh dazu
setenv. Unter Bourne-Shells wie sh
oder bash benutzen Sie zum Setzen von
Umgebungsvariablen export. Um
beispielsweise die Variable EDITOR mit
csh oder tcsh auf
/usr/local/bin/emacs zu setzen, setzen Sie das
folgende Kommando ab:&prompt.user; setenv EDITOR /usr/local/bin/emacsUnter Bourne-Shells:&prompt.user; export EDITOR="/usr/local/bin/emacs"Sie können die meisten Shells Umgebungsvariablen
expandieren lassen, in dem Sie in der Kommandozeile ein
$ davor eingeben. Zum Beispiel gibt
echo $TERM aus, worauf $TERM
gesetzt ist, weil die Shell $TERM expandiert
und das Ergebnis an echo gibt.Shells behandeln viele Spezialzeichen, so genannte
Metazeichen, als besondere Darstellungen für Daten.
Das allgemeinste ist das Zeichen *, das eine
beliebige Anzahl Zeichen in einem Dateinamen repräsentiert.
Diese Metazeichen können zum Vervollständigen von
Dateinamen (Globbing) benutzt werden. Beispielsweise liefert
das Kommando echo * nahezu das gleiche
wie die Eingabe von ls, da die Shell alle
Dateinamen die mit * übereinstimmen, an
echo weitergibt.Um zu verhindern, dass die Shell diese Sonderzeichen
interpretiert, kann man sie schützen, indem man ihnen einen
Backslash (\) voranstellt. echo
$TERM gibt aus, auf was auch immer Ihr Terminal
gesetzt ist. echo \$TERM gibt
$TERM genauso aus, wie es hier steht.Ändern der ShellDer einfachste Weg Ihre Shell zu ändern, ist das
Kommando chsh zu benutzen.
chsh platziert Sie im Editor, welcher durch
Ihre Umgebungsvariable EDITOR gesetzt ist,
im vi wenn die Variable nicht gesetzt ist.
Ändern Sie die Zeile mit Shell:
entsprechend Ihren Wünschen.Sie können auch chsh mit der Option
aufrufen, dann wird Ihre Shell gesetzt,
ohne dass Sie in einen Editor gelangen. Um Ihre Shell
zum Beispiel auf die bash zu ändern,
geben Sie das folgende Kommando ein:&prompt.user; chsh -s /usr/local/bin/bashDie von Ihnen gewünschte Shell
muss in /etc/shells
aufgeführt sein. Haben Sie eine Shell aus der
Ports-Sammlung installiert,
sollte das schon automatisch erledigt werden. Installierten
Sie die Shell von Hand, so müssen Sie sie dort
eintragen.Haben Sie beispielsweise die bash nach
/usr/local/bin installiert, geben Sie
Folgendes ein:&prompt.root; echo "/usr/local/bin/bash" >> /etc/shellsDanach können Sie chsh aufrufen.Text-EditorenText EditorenEditorenEine großer Teil der Konfiguration wird bei FreeBSD durch
das Editieren von Textdateien erledigt. Deshalb ist es eine
gute Idee, mit einem Texteditor vertraut zu werden. FreeBSD hat
ein paar davon im Basissystem und sehr viel mehr in der
Ports-Sammlung.eeText EditoreneeDer am leichtesten und einfachsten zu erlernende Editor nennt
sich ee, was für
easy editor steht.
Um ee zu starten, gibt man in der
Kommandozeile ee filename ein, wobei
filename den Namen der zu editierenden
Datei darstellt. Um zum Beispiel /etc/rc.conf
zu editieren, tippen Sie ee /etc/rc.conf ein.
Einmal im Editor, finden Sie alle Editor-Funktionen oben im
Display aufgelistet. Das Einschaltungszeichen
^ steht für die Ctrl (oder
Strg) Taste, mit ^e ist also die
Tastenkombination Ctrle
gemeint. Um ee zu verlassen, drücken
Sie Esc und wählen dann aus. Der Editor fragt nach, ob Sie speichern
möchten, wenn die Datei verändert wurde.viText EditorenviemacsText EditorenemacsFreeBSD verfügt über leistungsfähigere
Editoren wie vi als Teil des
Basissystems, andere Editoren wie emacs
oder vim sind Teil der Ports-Sammlung.
Diese Editoren bieten höhere Funktionalität und
Leistungsfähigkeit, jedoch auf Kosten einer etwas
schwierigeren Erlernbarkeit. Wenn Sie viele Textdateien
editieren, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen
von Editoren wie vim oder
emacs ein.Viele Anwendungen, die Dateien verändern oder Texteingabe
erwarten, werden automatisch einen Texteditor öffnen. Um den
Standardeditor zu ändern, setzen Sie die Umgebungsvariable
EDITOR. Um mehr darüber zu erfahren, lesen Sie den
Abschnitt Shells.Geräte und GerätedateienDer Begriff Gerät wird meist in Verbindung mit Hardware
wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht.
Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt
werden, beziehen sich auf gefundene Geräte. Sie können sich
die Bootmeldungen später in /var/run/dmesg.boot
ansehen.Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen
werden, sind zum Beispiel acd0, das erste
IDE CD-ROM oder kbd0, die Tastatur.Auf die meisten Geräte wird unter &unix; Systemen über spezielle
Gerätedateien im /dev Verzeichnis
zugegriffen.Anlegen von GerätedateienWenn sie ein neues Gerät zu Ihrem System hinzufügen,
oder die Unterstützung für zusätzliche Geräte
kompilieren, müssen ein oder mehrere Gerätedateien
erstellt werden.DEVFS (Gerätedateisystem)Das Gerätedateisystem DEVFS
ermöglicht durch den
Namensraum des Dateisystems Zugriff auf den Namensraum der
Geräte im Kernel. Damit müssen Gerätedateien
nicht mehr extra angelegt werden, sondern werden von
DEVFS verwaltet.Weitere Informationen finden Sie in &man.devfs.5;.BinärformateUm zu verstehen, warum &os; das Format
&man.elf.5; benutzt, müssen Sie
zunächst etwas über die drei gegenwärtig
dominanten ausführbaren Formate
für &unix; Systeme wissen:&man.a.out.5;Das älteste und klassische
Objektformat von &unix; Systemen. Es benutzt einen kurzen,
kompakten Header mit einer magischen Nummer am Anfang, die oft
benutzt wird, um das Format zu charakterisieren
(weitere Details finden Sie unter &man.a.out.5;). Es
enthält drei geladene Segmente: .text, .data und
.bss, sowie eine Symboltabelle und eine
Stringtabelle.COFFDas Objektformat von SVR3. Der Header
enthält nun eine Sectiontable. Man kann
also mit mehr als nur den Sections .text, .data und .bss
arbeiten.&man.elf.5;Der Nachfolger von COFF.
Kennzeichnend sind mehrere Sections und mögliche
32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil:
ELF wurde auch unter der Annahme
entworfen, dass es nur eine ABI (Application
Binary Interface) pro Systemarchitektur geben wird.
Tatsächlich ist diese Annahme falsch – nicht
einmal für die kommerzielle SYSV-Welt (in der es
mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft
sie zu.FreeBSD versucht, dieses Problem zu umgehen, indem
ein Werkzeug bereitgestellt wird, um ausführbare
Dateien im ELF-Format mit
Informationen über die ABI zu versehen, zu der
sie passen. Weitere Informationen finden Sie in der
Manualpage &man.brandelf.1;.FreeBSD kommt aus dem klassischen Lager
und verwendete traditionell das Format &man.a.out.5;, eine
Technik, die bereits über viele BSD-Releases
hinweg eingesetzt und geprüft worden ist. Obwohl es
bereits seit einiger Zeit möglich war, auf einem
FreeBSD-System auch Binaries (und Kernel) im
ELF-Format zu erstellen und
auszuführen, widersetzte FreeBSD sich anfangs dem
Druck, auf ELF als
Standardformat umzusteigen. Warum? Nun, als das
Linux-Lager die schmerzhafte Umstellung auf
ELF durchführte, ging es nicht so
sehr darum, dem ausführbaren Format
a.out zu entkommen, als dem
unflexiblen, auf Sprungtabellen basierten Mechanismus
für Shared-Libraries der die Konstruktion von
Shared-Libraries für Hersteller und Entwickler
gleichermaßen sehr kompliziert machte. Da die
verfügbaren ELF-Werkzeuge eine
Lösung für das Problem mit den Shared-Libraries
anboten und ohnehin generell als ein Schritt
vorwärts angesehen wurden, wurde der Aufwand
für die Umstellung als notwendig akzeptiert und die
Umstellung wurde durchgeführt. Unter FreeBSD ist der
Mechanismus von Shared-Libraries enger an den Stil des
Shared-Library-Mechanismus von Suns &sunos;
angelehnt und von daher sehr einfach zu verwenden.Ja, aber warum gibt es so viele unterschiedliche Formate?In alter, grauer Vorzeit gab es simple Hardware.
Diese simple Hardware unterstützte ein einfaches,
kleines System. a.out war absolut passend
für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11)
darzustellen. Als &unix; von diesem simplen System portiert
wurde, wurde auch das a.out-Format beibehalten,
weil es für die frühen Portierungen auf Architekturen
wie den Motorola 68000 und VAX ausreichte.Dann dachte sich ein schlauer Hardware-Ingenieur,
dass, wenn er Software zwingen könnte, einige
Tricks anzustellen, es ihm möglich wäre, ein
paar Gatter im Design zu sparen, und seinen CPU-Kern
schneller zu machen. Obgleich es dazu gebracht wurde, mit
dieser neuen Art von Hardware (heute als RISC
bekannt) zu arbeiten, war a.out für
diese Hardware schlecht geeignet. Deshalb wurden viele neue
Formate entwickelt, um eine bessere Leistung auf dieser
Hardware zu erreichen, als mit dem begrenzten, simplen
a.out-Format. Dinge wie
COFF, ECOFF und
einige andere obskure wurden erdacht und ihre Grenzen
untersucht, bevor die Dinge sich in Richtung
ELF entwickelten.Hinzu kam, dass die Größe von
Programmen gewaltig wurde und Festplatten sowie
physikalischer Speicher immer noch relativ klein waren.
Also wurde das Konzept von Shared-Libraries geboren. Das
VM-System wurde auch immer fortgeschrittener. Obwohl bei
jedem dieser Fortschritte das
a.out-Format benutzt worden ist,
wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr
gedehnt. Zusätzlich wollte man Dinge dynamisch zur
Ausführungszeit laden, oder Teile ihres Programms
nach der Initialisierung wegwerfen, um Hauptspeicher
oder Swap-Speicher zu sparen. Programmiersprachen
wurden immer fortschrittlicher und man wollte, dass
Code automatisch vor der main-Funktion aufgerufen wird.
Das a.out-Format wurde oft
überarbeitet, um alle diese Dinge zu ermöglichen
und sie funktionierten auch für einige Zeit.
a.out konnte diese Probleme nicht
ohne ein ständiges Ansteigen eines Overheads im Code
und in der Komplexität handhaben. Obwohl
ELF viele dieser Probleme löste,
wäre es sehr aufwändig, ein System umzustellen, das
im Grunde genommen funktionierte. Also musste
ELF warten, bis es aufwändiger war, bei
a.out zu bleiben, als zu
ELF überzugehen.Im Laufe der Zeit haben sich die Erstellungswerkzeuge,
von denen FreeBSD seine Erstellungswerkzeuge abgeleitet
hat (speziell der Assembler und der Loader), in zwei
parallele Zweige entwickelt. Im FreeBSD-Zweig wurden
Shared-Libraries hinzugefügt und einige Fehler
behoben. Das GNU-Team, das diese Programme
ursprünglich geschrieben hat, hat sie umgeschrieben
und eine simplere Unterstützung zur Erstellung von
Cross-Compilern durch beliebiges Einschalten verschiedener
Formate usw. hinzugefügt. Viele Leute wollten
Cross-Compiler für FreeBSD erstellen, aber sie hatten
kein Glück, denn FreeBSD's ältere Sourcen
für as und ld
waren hierzu nicht geeignet. Die neuen
GNU-Werkzeuge (binutils) unterstützen
Cross-Compilierung, ELF, Shared-Libraries,
C++-Erweiterungen und mehr. Weiterhin geben viele
Hersteller ELF-Binaries heraus und es
ist gut, wenn FreeBSD sie ausführen kann.ELF ist ausdrucksfähiger als
a.out und gestattet eine bessere Erweiterbarkeit
des Basissystems. Die ELF-Werkzeuge werden
besser gewartet und bieten Unterstützung von
Cross-Compilierung, was für viele Leute wichtig ist.
ELF mag etwas langsamer sein, als
a.out, aber zu versuchen, das zu messen,
könnte schwierig werden. Es gibt unzählige Details, in
denen sich die beiden Formate unterscheiden, wie sie Pages
abbilden, Initialisierungscode handhaben usw. Keins davon
ist sehr wichtig, aber es sind Unterschiede. Irgendwann
wird die Unterstützung für Programme im
a.out-Format aus dem
GENERIC-Kernel entfernt werden.
Wenn es dann keinen oder kaum noch
Bedarf für die Unterstützung dieses Formates
gibt, werden die entsprechenden Routinen ganz entfernt
werden.Weitere InformationenManualpagesManualpagesDie umfassendste Dokumentation rund um FreeBSD gibt es in
Form von Manualpages. Annähernd jedes Programm im System
bringt eine kurze Referenzdokumentation mit, die die
grundsätzliche Funktion und verschiedene Parameter
erklärt. Diese Dokumentationen kann man mit dem
man Kommando benutzen. Die Benutzung des
man Kommandos ist einfach:&prompt.user; man KommandoKommando ist der Name des Kommandos,
über das Sie etwas erfahren wollen. Um beispielsweise
mehr über das Kommando ls zu lernen,
geben Sie ein:&prompt.user; man lsDie Online-Dokumentation ist in nummerierte Sektionen
unterteilt:Benutzerkommandos.Systemaufrufe und Fehlernummern.Funktionen der C Bibliothek.Gerätetreiber.Dateiformate.Spiele und andere Unterhaltung.Verschiedene Informationen.Systemverwaltung und -Kommandos.Kernel Entwickler.In einigen Fällen kann dasselbe Thema in mehreren
Sektionen auftauchen. Es gibt zum Beispiel ein chmod
Benutzerkommando und einen chmod()
Systemaufruf. In diesem Fall können Sie dem
man Kommando
sagen, aus welcher Sektion Sie die Information erhalten
möchten, indem Sie die Sektion mit angeben:&prompt.user; man 1 chmodDies wird Ihnen die Manualpage für das Benutzerkommando
chmod zeigen. Verweise auf eine Sektion
der Manualpages werden traditionell in Klammern
gesetzt. So bezieht sich &man.chmod.1; auf das
Benutzerkommando chmod und mit
&man.chmod.2; ist der Systemaufruf gemeint.Das ist nett, wenn Sie den Namen eines Kommandos wissen,
und lediglich wissen wollen, wie es zu benutzen ist. Aber was
tun Sie, wenn Sie Sich nicht an den Namen des Kommandos
erinnern können? Sie können mit man
nach Schlüsselbegriffen in den
Kommandobeschreibungen zu suchen, indem Sie den Parameter
benutzen:&prompt.user; man -k mailMit diesem Kommando bekommen Sie eine Liste der
Kommandos, deren Beschreibung das Schlüsselwort
mail enthält. Diese Funktionalität
erhalten Sie auch, wenn Sie das Kommando apropos
benutzen.Nun, Sie schauen Sich alle die geheimnisvollen Kommandos
in /usr/bin an, haben aber nicht den
blassesten Schimmer, wozu die meisten davon gut sind? Dann
rufen Sie doch einfach das folgende Kommando auf:&prompt.user; cd /usr/bin
&prompt.user; man -f *Dasselbe erreichen Sie durch Eingabe von:&prompt.user; cd /usr/bin
&prompt.user; whatis *GNU Info DateienFreeBSD enthält viele Anwendungen und Utilities
der Free Software Foundation (FSF). Zusätzlich zu den
Manualpages bringen diese Programme ausführlichere
Hypertext-Dokumente (info genannt) mit,
welche man sich mit dem Kommando info
ansehen kann. Wenn Sie emacs
installiert haben, können Sie auch dessen info-Modus
benutzen.Um das Kommando &man.info.1; zu benutzen, geben Sie
einfach ein:&prompt.user; infoEine kurze Einführung gibt es mit
h; eine Befehlsreferenz erhalten Sie durch
Eingabe von: ?.
diff --git a/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml b/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml
index 096a247aac..df7e974048 100644
--- a/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/bibliography/chapter.sgml
@@ -1,701 +1,696 @@
BibliografieÜbersetzt von &a.de.gruender;Während die Manualpages die endgültige Auskunft
über bestimmte Teile des FreeBSD-Betriebssystems geben, so
können sie jedoch nicht darstellen, wie man die einzelnen Teile
zusammenfügt, um ein vollständig laufendes Betriebssystem
herzustellen. Daher gibt es keinen Ersatz für ein gutes Buch
über die Administration von &unix; Systemen und ein gutes
Benutzerhandbuch.In der Regel handelt es sich im folgenden Kapitel um englische
Ausgaben der genannten Werke. Übersetzungen oder Ausgaben in
anderen Sprachen sind mit entsprechenden Hinweisen versehen.Bücher und Magazine speziell für FreeBSDInternationale Bücher und
Magazine:
Using FreeBSD, herausgegeben von Drmaster, 1997
(in traditionellem Chinesisch). ISBN 9-578-39435-7.FreeBSD Unleashed (in vereinfachtem Chinesisch),
herausgegeben von China
Press. ISBN 7-111-10201-0.FreeBSD From Scratch First Edition (in vereinfachtem Chinesisch),
herausgegeben von China
Press. ISBN 7-111-07482-3.FreeBSD From Scratch Second Edition (in vereinfachtem Chinesisch),
herausgegeben von China
Press. ISBN 7-111-10286-X.FreeBSD Handbook Second Edition (in vereinfachtem Chinesisch),
herausgegeben von Posts
& Telecom Press. ISBN 7-115-10541-3.FreeBSD 3.x Internet (in vereinfachtem Chinesisch),
herausgegeben von Tsinghua
University Press. ISBN 7-900625-66-6.FreeBSD & Windows (in vereinfachtem Chinesisch),
herausgegeben von China Railway Publishing
House. ISBN 7-113-03845-X.FreeBSD Internet Services HOWTO (in vereinfachtem Chinesisch),
herausgegeben von China Railway Publishing House.
ISBN 7-113-03423-3.FreeBSD for PC 98'ers (in japanischer Sprache), herausgegeben von
SHUWA System Co, LTD. ISBN 4-87966-468-5 C3055 P2900E.FreeBSD (in japanischer Sprache), herausgegeben von CUTT. ISBN
4-906391-22-2 C3055 P2400E.Complete Introduction to FreeBSD (in Japanese), published by Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.
Personal UNIX Starter Kit FreeBSD (in japanischer Sprache),
herausgegeben von ASCII.
ISBN 4-7561-1733-3 P3000E.FreeBSD Handbook (japanische Übersetzung), herausgegeben
von ASCII.
ISBN 4-7561-1580-2 P3800E.FreeBSD mit Methode (in deutscher Sprache), herausgegeben von
Computer und Literatur Verlag
/Vertrieb Hanser, 1998.
ISBN 3-932311-31-0.FreeBSD 4 -
Installieren, Konfigurieren, Administrieren (in
deutscher Sprache), herausgegeben von Computer und Literatur Verlag, 2001.
ISBN 3-932311-88-4.FreeBSD 5 –
Installieren, Konfigurieren, Administrieren (in
deutscher Sprache), herausgegeben von Computer und Literatur Verlag,
2001. ISBN 3-936546-06-1.FreeBSD
de Luxe (in German), published by
Verlag Modere Industrie,
2003. ISBN 3-8266-1343-0.
FreeBSD Install and Utilization Manual (in japanischer Sprache),
herausgegeben von
Mainichi Communications Inc., 1998.
ISBN 4-8399-0112-0.Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo
Building Internet Server with FreeBSD
(in indonesischer Sprache), herausgegeben von Elex Media Komputindo.Absolute BSD: The Ultimate Guide to FreeBSD (in traditionellem
Chinesisch), herausgegeben von GrandTech Press, 2003.
ISBN 986-7944-92-5.The
FreeBSD 6.0 Book (in traditionellem Chinesisch,
herausgegeben von Drmaster, 2006. ISBN 9-575-27878-X.Englischsprachige Bücher und
Magazine:Absolute BSD: The
Ultimate Guide to FreeBSD, herausgegeben von
No Starch Press,
2002. ISBN: 1886411743
The Complete FreeBSD, herausgegeben von
O'Reilly, 2003.
ISBN: 0596005164The
FreeBSD Corporate Networker's Guide, herausgegeben von
Addison-Wesley,
2002. ISBN: 0201704811
FreeBSD: An Open-Source Operating System for Your Personal
Computer, herausgegeben von The Bit Tree Press, 2001.
ISBN: 0971204500Teach Yourself FreeBSD in 24 Hours, herausgegeben von
Sams, 2002.
ISBN: 0672324245FreeBSD6 Unleashed, herausgegeben von
Sams, 2006.
ISBN: 0672328755FreeBSD: The Complete Reference, herausgegeben von
McGrawHill, 2003.
ISBN: 0072224096 HandbücherComputer Systems Research Group, UC Berkeley. 4.4BSD
User's Reference Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-075-9Computer Systems Research Group, UC Berkeley. 4.4BSD
User's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-076-7UNIX in a Nutshell. O'Reilly &
Associates, Inc., 1990. ISBN 093717520XMui, Linda. What You Need To Know When You Can't Find
Your UNIX System Administrator. O'Reilly &
Associates, Inc., 1995. ISBN 1-56592-104-6Die Ohio State
University hat ein UNIX
Introductory Course veröffentlicht, welcher auch
online im HTML- und PostScriptformat verfügbar ist.Eine italienische Übersetzung
ist Teil des &os; Italian Documentation Projects.Jpman Project, Japan
FreeBSD Users Group. FreeBSD User's
Reference Manual (japanische Übersetzung). Mainichi Communications
Inc., 1998. ISBN4-8399-0088-4 P3800E.Edinburgh
University hat einen Online Guide für
Anfänger in Sachen UNIX geschrieben.Administrations-AnleitungenAlbitz, Paul and Liu, Cricket. DNS and
BIND, 4th Ed. O'Reilly & Associates, Inc., 2001.
ISBN 1-59600-158-4Computer Systems Research Group, UC Berkeley. 4.4BSD
System Manager's Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-080-5Costales, Brian, et al. Sendmail, 2nd Ed.
O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0Frisch, Æleen. Essential System
Administration, 2nd Ed. O'Reilly & Associates,
Inc., 1995. ISBN 1-56592-127-5Hunt, Craig. TCP/IP Network
Administration, 2nd Ed. O'Reilly & Associates, Inc., 1997.
ISBN 1-56592-322-7Nemeth, Evi. UNIX System Administration
Handbook. 3rd Ed. Prentice Hall, 2000. ISBN
0-13-020601-6Stern, Hal Managing NFS and NIS O'Reilly
& Associates, Inc., 1991. ISBN 0-937175-75-7Jpman Project, Japan
FreeBSD Users Group. FreeBSD System
Administrator's Manual (japanische Übersetzung). Mainichi Communications
Inc., 1998. ISBN4-8399-0109-0 P3300E.Dreyfus, Emmanuel. Cahiers
de l'Admin: BSD 2nd Ed. (in French), Eyrolles, 2004.
ISBN 2-212-11463-X.ProgrammierhandbücherAsente, Paul, Paul, Converse, Diana, and Swick, Ralph.
X Window System Toolkit. Digital Press,
1998. ISBN 1-55558-178-1Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Reference Manual. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-078-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-079-1Harbison, Samuel P. and Steele, Guy L. Jr. C: A
Reference Manual. 4th ed. Prentice Hall, 1995.
ISBN 0-13-326224-3Kernighan, Brian and Dennis M. Ritchie. The C
Programming Language. 2nd Ed., PTR Prentice Hall,
1988. ISBN 0-13-110362-9Lehey, Greg. Porting UNIX Software.
O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7Plauger, P. J. The Standard C Library.
Prentice Hall, 1992. ISBN 0-13-131509-9Spinellis, Diomidis.
Code
Reading: The Open Source Perspective.
Addison-Wesley, 2003. ISBN 0-201-79940-5Spinellis, Diomidis. Code
Quality: The Open Source Perspective.
Addison-Wesley, 2006. ISBN 0-321-16607-8Stevens, W. Richard and Stephen A. Rago.
Advanced Programming in the UNIX
Environment. 2nd Ed.
Reading, Mass. : Addison-Wesley, 2005.
ISBN 0-201-43307-9Stevens, W. Richard. UNIX Network
Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN
0-13-490012-XWells, Bill. Writing Serial Drivers for UNIX.
Dr. Dobb's Journal. 19(15), December 1994.
pp68-71, 97-99.Betriebssystem-InternaAndleigh, Prabhat K. UNIX System
Architecture. Prentice-Hall, Inc., 1990. ISBN
0-13-949843-5Jolitz, William. Porting UNIX to the 386.
Dr. Dobb's Journal. January 1991-July
1992.Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and
John Quarterman The Design and Implementation of the
4.3BSD UNIX Operating System. Reading, Mass. :
Addison-Wesley, 1989. ISBN 0-201-06196-1Kapitel 2 dieses Buchs ist Teil des FreeBSD Documentation
Projects und online
erhältlich. Kapitel 9 findet sich
hier.Leffler, Samuel J., Marshall Kirk McKusick, The Design
and Implementation of the 4.3BSD UNIX Operating System: Answer
Book. Reading, Mass. : Addison-Wesley, 1991. ISBN
0-201-54629-9McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and
John Quarterman. The Design and Implementation of the
4.4BSD Operating System. Reading, Mass. :
Addison-Wesley, 1996. ISBN 0-201-54979-4Marshall Kirk McKusick, George V. Neville-Neil.
The Design and Implementation of the
&os; Operating System.
Boston, Mass. : Addison-Wesley, 2004.
ISBN 0-201-70245-2Stevens, W. Richard. TCP/IP Illustrated, Volume 1:
The Protocols. Reading, Mass. : Addison-Wesley,
1996. ISBN 0-201-63346-9Schimmel, Curt. Unix Systems for Modern
Architectures. Reading, Mass. : Addison-Wesley, 1994.
ISBN 0-201-63338-8Stevens, W. Richard. TCP/IP Illustrated, Volume 3:
TCP for Transactions, HTTP, NNTP and the UNIX Domain
Protocols. Reading, Mass. : Addison-Wesley, 1996.
ISBN 0-201-63495-3Vahalia, Uresh. UNIX Internals -- The New
Frontiers. Prentice Hall, 1996. ISBN
0-13-101908-2Wright, Gary R. and W. Richard Stevens. TCP/IP
Illustrated, Volume 2: The Implementation. Reading,
Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-XSicherheits-AnleitungCheswick, William R. and Steven M. Bellovin. Firewalls
and Internet Security: Repelling the Wily Hacker.
Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-63357-4Garfinkel, Simson and Gene Spafford.
Practical UNIX & Internet Security.
2nd Ed. O'Reilly & Associates, Inc., 1996. ISBN
1-56592-148-8Garfinkel, Simson. PGP Pretty Good
Privacy O'Reilly & Associates, Inc., 1995. ISBN
1-56592-098-8Hardware-AnleitungAnderson, Don and Tom Shanley. Pentium Processor
System Architecture. 2nd Ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-40992-5Ferraro, Richard F. Programmer's Guide to the EGA,
VGA, and Super VGA Cards. 3rd ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-62490-7Die Intel Corporation veröffentlicht Dokumentationen
Ihrer CPUs, Chipsets und Standards auf ihrer developer web site,
normalerweise als PDF-Dateien.Shanley, Tom. 80486 System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40994-1Shanley, Tom. ISA System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40996-8Shanley, Tom. PCI System Architecture.
4th ed. Reading, Mass. : Addison-Wesley, 1999. ISBN
0-201-30974-2Van Gilluwe, Frank. The Undocumented PC,
2nd Ed.
Reading, Mass: Addison-Wesley Pub. Co., 1996. ISBN
0-201-47950-8Messmer, Hans-Peter. The Indispensable PC Hardware
Book, 4th Ed.
Reading, Mass: Addison-Wesley Pub. Co., 2002. ISBN
0-201-59616-4&unix; GeschichteLion, John Lion's Commentary on UNIX, 6th Ed. With
Source Code. ITP Media Group, 1996. ISBN
1573980137Raymond, Eric S. The New Hacker's Dictionary, 3rd
edition. MIT Press, 1996. ISBN
0-262-68092-0. Auch bekannt als das Jargon
FileSalus, Peter H. A quarter century of UNIX.
Addison-Wesley Publishing Company, Inc., 1994. ISBN
0-201-54777-5Simon Garfinkel, Daniel Weise, Steven Strassmann. The
UNIX-HATERS Handbook. IDG Books Worldwide, Inc.,
1994. ISBN 1-56884-203-1.
Online verfügbar.Don Libes, Sandy Ressler Life with UNIX
— special edition. Prentice-Hall, Inc., 1989. ISBN
0-13-536657-7The BSD family tree.
oder unter /usr/share/misc/bsd-family-tree
auf einem FreeBSD-System.
-
- The BSD Release Announcements collection.
- 1997.
-
-
Networked Computer Science Technical Reports
Library.
Old BSD releases from the Computer Systems Research
group (CSRG).
:
Das Paket mit 4 CD-ROMs enthält alle BSD-Versionen von 1BSD
bis 4.4BSD und 4.4BSD-Lite2 (nicht aber 2.11BSD). Die letzte CD
beinhaltet auch die finalen Sourcen inklusive den
SCCS Dateien.Magazine und JournaleThe C/C++ Users Journal. R&D
Publications Inc. ISSN 1075-2838Sys Admin — The Journal for UNIX System
Administrators Miller Freeman, Inc., ISSN
1061-2688freeX – Das Magazin für Linux –
BSD – UNIX (in deutscher Sprache),
Computer- und Literaturverlag GmbH,
ISSN 1436-7033
diff --git a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml
index e8099662f4..899c15f5c0 100644
--- a/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/desktop/chapter.sgml
@@ -1,1216 +1,1213 @@
ChristopheJunietBeigetragen von MartinHeinenÜbersetzt von Desktop-AnwendungenÜbersichtFreeBSD bietet eine reiche Auswahl an Desktop-Anwendungen,
wie Browser und Textverarbeitungen, die als Pakete oder mit der
Ports-Sammlung installiert werden. Gerade neue Benutzer erwarten
Anwendungen mit einer grafischen Benutzeroberfläche an ihrem
Arbeitsplatz. Dieses Kapitel zeigt Ihnen,
wie Sie einige der beliebtesten Desktop-Anwendungen mühelos
installieren.Wenn Sie Ports installieren, beachten Sie, dass dabei die
Quelltexte der Programme übersetzt werden. Abhängig
von dem Programm und der Geschwindigkeit Ihrer Maschinen kann das
sehr lange dauern. Wenn Ihnen das Übersetzen zu lange dauert,
können Sie die meisten Programme der Ports-Sammlung auch als
fertige Pakete installieren.Da FreeBSD binär kompatibel zu Linux ist, können Sie
zahlreiche für Linux entwickelte Desktop-Anwendungen einsetzen.
Bevor Sie allerdings Linux-Anwendungen installieren, sollten Sie das
lesen. Wenn Sie nach einem bestimmten Port
suchen, zum Beispiel mit &man.whereis.1;, beachten Sie, dass die
Namen vieler Programme, die die Linux-Binärkompatibilität
benutzen, mit linux- anfangen. Wir gehen im
Folgenden davon aus, dass Sie die Linux-Binärkompatibilität
aktiviert haben, bevor Sie Linux-Anwendungen installieren.Dieses Kapitel behandelt Anwendungen aus den Bereichen:
- Browser (Mozilla,
+ Browser (Firefox,
Opera,
- Firefox,
Konqueror)Büroanwendungen (KOffice,
AbiWord,
The GIMP,
OpenOffice.org)Dokumentformate(&acrobat.reader;,
gv,
Xpdf,
GQview)Finanzsoftware (
GnuCash,
Gnumeric,
Abacus)Bevor Sie dieses Kapitel lesen, sollten SieSoftware Dritter installieren können
() undLinux-Anwendungen installieren können
().Wie Sie Multimedia-Anwendungen einrichten, wird in einem
gesonderten Kapitel erklärt.
Wie Sie E-Mail einrichten und benutzen, wird in
beschrieben.BrowserBrowserWebFreeBSD besitzt keinen vorinstallierten Browser, stattdessen
enthält das www-Verzeichnis
der Ports-Sammlung Browser, die Sie installieren können.
Wenn Ihnen das Übersetzen der Browser zu lange dauert, bei
einigen Browsern dauert das wirklich lange, installieren Sie die
Pakete, die es für viele Browser gibt.KDE und
GNOME enthalten schon HTML-Browser.
Das Einrichten dieser grafischen Benutzeroberflächen ist
in beschrieben.Wenn Sie besonders schlanke Browser benötigen, suchen Sie in
der Ports-Sammlung nach
- www/dillo,
+ www/dillo2,
www/links oder
www/w3m.Dieser Abschnitt behandelt die nachstehenden Anwendungen:AnwendungRessourcenbedarfInstallationsaufwand aus den Portswichtige Abhängigkeiten
- Mozilla
- hoch
+ Firefox
+ mittelhochGtk+OperaniedrigniedrigEs gibt eine &os;- und eine Linux-Version.
Die Linux-Version hängt von der
Linux-Kompatibilität (Linux
Binary Compatibility) und
linux-openmotif ab.
-
- Firefox
- mittel
- hoch
- Gtk+
-
-
KonquerormittelhochKDE-Biliotheken
-
- Mozilla
-
- Mozilla
-
-
- Mozilla ist ein moderner, stabiler
- und kompletter Browser, der nach FreeBSD portiert wurde. Er
- entspricht dem HTML-Standard und verfügt über einen
- E-Mail-Client und einen Newsreader. Für den Fall, dass Sie
- einige HTML-Seiten selbst verfassen wollen, enthält der
- Browser auch einen HTML-Editor. Wenn Sie
- &netscape; kennen, wird Ihnen
- vielleicht die Ähnlichkeit mit dem
- Communicator auffallen. Dies liegt
- daran, dass die beiden Programme eine gemeinsame
- Entwicklungsgeschichte haben (und auf der gleichen
- ursprünglichen Codebasis aufbauen).
-
- Auf langsamen Maschinen, deren CPU-Taktfrequenz weniger als
- 233 MHz beträgt, oder die weniger als 64 MB Speicher
- besitzen, können Sie Mozilla wegen
- dessen Ressourcenbedarfs nur eingeschränkt benutzen. Weniger
- Ressourcen verbraucht der Opera-Browser,
- der gleich in diesem Kapitel behandelt wird.
-
- Für den Fall, dass Sie Mozilla
- nicht selbst übersetzen wollen, hat das FreeBSD-GNOME-Team
- schon ein Paket für Sie erstellt, das Sie über das Netz
- installieren können:
-
- &prompt.root; pkg_add -r mozilla
-
- Wenn das Paket nicht zur Verfügung steht und Sie
- genügend Zeit und Plattenplatz haben, können Sie
- Mozilla mit den nachstehenden Befehlen
- selbst übersetzen und installieren:
-
- &prompt.root; cd /usr/ports/www/mozilla
-&prompt.root; make install clean
-
- Das Erscheinungsbild von Mozilla
- können Sie mit so genannten
- Themes oder
- Gestures beeinflussen. Der
- Mozilla-Port sorgt für die richtige
- Installation des Chrome-Themes. Die Installation weiterer
- Zusatzkomponenten erfordert allerdings
- root-Rechte.
-
- Nachdem Sie die Installation von
- Mozilla abgeschlossen haben,
- benötigen Sie die root-Rechte nicht mehr.
- Starten Sie den Browser dann einfach mit dem Kommando:
-
- &prompt.user; mozilla
-
- Sie können auch den E-Mail-Client oder den Newsreader
- direkt starten:
-
- &prompt.user; mozilla -mail
-
-
FirefoxFirefox
- Firefox ist ein auf dem
- Mozilla-Code basierender
- Browser. Während es sich bei
- Mozilla um ein komplettes
- Anwendungspaket (bestehend aus Browser, E-Mail-Programm,
- Chatclient und anderem mehr) handelt, konzentriert sich
- Firefox auf die Aufgabe als
- Browser, was das Programm kleiner und schneller macht.
+ Firefox ist ein moderner, freier und
+ stabiler Open-Source Browser, der vollständig auf &os; portiert
+ wurde. Er bietet eine dem HTML-Standard konforme Anzeige,
+ Browserfenster als Tabs, Blockierung von Werbefenstern, Erweiterungen,
+ verbesserte Sicherheit und mehr. Firefox
+ basiert auf der Mozilla Codebasis.Das Paket können Sie mit dem nachstehenden
Befehl installieren:&prompt.root; pkg_add -r firefox
+ Damit installieren Sie Firefox 2.X, wenn
+ Sie stattdessen Firefox 3.X einsetzen
+ möchten, geben Sie folgenden Befehl ein:
+
+ &prompt.root; pkg_add -r firefox3
+
+
Alternativ können Sie auch die Ports-Sammlung verwenden,
um das Programm aus dem Quellcode zu installieren:&prompt.root; cd /usr/ports/www/firefox
&prompt.root; make install clean
+
+ Ersetzen Sie im vorherigen Kommando firefox
+ durch firefox3 für
+ Firefox 3.X.
- Firefox, Mozilla und das &java;-Plugin
+ Firefox und das &java;-PluginDieser und der nächste Abschnitt gehen davon aus,
- dass Sie Firefox oder
- Mozilla bereits installiert
+ dass Sie Firefox bereits installiert
haben.Die &os; Foundation hat von Sun Microsystems eine Lizenz
erworben, die es erlaubt, &os;-Binärpakete des
Java Runtime Environment (&jre;) und des Java Development Kit
(&jdk;) zu verteilen. Diese Binärpakete sind auf der
Webseite der &os;
Foundation erhältlich.
- Damit Firefox oder
- Mozilla &java; unterstützen,
+ Damit Firefox &java; unterstützt,
müssen Sie zuerst den Port java/javavmwrapper installieren.
Anschließend laden Sie das
- Diablo &jre;-Paket
- von Diablo &jre;-Paket von
herunter und installieren es mit &man.pkg.add.1;.Danach starten Sie Ihren Browser und geben in der
Adresszeile about:plugins ein
und bestätigen die Eingabe mit der
Enter-Taste. Dadurch wird eine Seite
geladen, auf der alle installierten Plugins aufgelistet werden.
Auch das &java;-Plugin sollte nun
in dieser Liste aufgeführt sein. Sollte dies bei Ihnen
- nicht der Fall sein, müssen Sie als
- root noch den folgenden Befehl
+ nicht der Fall sein, muss jeder Benutzer noch das folgende Kommando
ausführen:
- &prompt.root; ln -s /usr/local/diablo-jre1.5.0/plugin/i386/ns7/libjavaplugin_oji.so \
- /usr/local/lib/browser_plugins/
+ &prompt.user; ln -s /usr/local/diablo-jre1.6.0/plugin/i386/ns7/libjavaplugin_oji.so \
+ $HOME/.mozilla/plugins/
+
+ Oder, falls Sie das Diablo &jdk;-Paket
+ installiert haben:
+
+ &prompt.user; ln -s /usr/local/diablo-jdk1.6.0/jre/plugin/i386/ns7/libjavaplugin_oji.so \
+ $HOME/.mozilla/plugins/Danach starten Sie Ihren Browser neu, um das Plugin zu
aktivieren.
- Firefox, Mozilla und das ¯omedia; &flash;-Plugin
+ Firefox und das ¯omedia; &flash;-Plugin
+
+ Flash
+ Das ¯omedia; &flash;-Plugin ist für &os; nicht
verfügbar. Es existiert jedoch ein Software-Layer (ein
sogenannter Wrapper), der es erlaubt, die Linux-Version des
Plugins unter &os; einzusetzen. Dieser Wrapper
unterstützt außerdem das &adobe; &acrobat;-Plugin,
das &realplayer;-Plugin und andere mehr.
- Als erstes installieren Sie den Port www/linuxpluginwrapper. Dieser Port
- setzt voraus, dass Sie den Port emulators/linux_base bereits
- installiert haben. Folgen Sie exakt den bei der Installation
- des Ports gegebenen Anweisungen, um die Datei
- /etc/libmap.conf korrekt zu konfigurieren,
- da ansonsten das Plugin später nicht erkannt wird.
- Beispielkonfigurationen finden Sie im Verzeichnis
- /usr/local/share/examples/linuxpluginwrapper/.
-
- Anschließend installieren Sie den Port www/linux-flashplugin7. Nachdem Sie
- das Plugin installiert haben, rufen Sie Ihren Browser auf und
- geben in der Adresszeile about:plugins
- ein. Diese Eingabe muss mit der Enter-Taste
- bestätigt werden. Danach wird eine Seite geladen, auf der
- alle installierten Plugins aufgelistet werden.
-
- Sollte das &flash;-Plugin bei Ihnen nicht aufgelistet sein,
- liegt dies in der Regel an einem fehlenden symbolischen Link.
- In diesem Fall führen Sie als root
- die folgenden Befehle aus:
-
- &prompt.root; ln -s /usr/local/lib/npapi/linux-flashplugin/libflashplayer.so \
- /usr/local/lib/browser_plugins/
-&prompt.root; ln -s /usr/local/lib/npapi/linux-flashplugin/flashplayer.xpt \
- /usr/local/lib/browser_plugins/
-
- Nach einem Neustart sollte das Plugin nun in der Liste
- der installierten Plugins auftauchen.
+ Je nachdem, welche Version von &os; Sie verwenden, sind
+ unterschiedliche Schritte notwendig:
+
+
+
+ Für &os; 7.X
+
+ Installieren Sie den Port www/nspluginwrapper. Dieser Port
+ setzt voraus, dass Sie den Port emulators/linux_base-fc4 bereits
+ installiert haben, der sehr gross ist.
+
+ Anschließend installieren Sie den Port www/linux-flashplugin9. Dadurch wird
+ &flash; 9.X installiert, denn diese Version läuft
+ zuverlässig auf &os; 7.X.
+
+
+ Bei &os; Versionen, die älter sind als &os; 7.1-RELEASE
+ müssen Sie www/linux-flashplugin7 installieren und
+ den &man.linprocfs.5; Abschnitt übergehen.
+
+
+
+
+ Für &os; 8.X
+
+ Installieren Sie den Port www/nspluginwrapper. Dieser Port
+ benötigt den emulators/linux_base-f10 Port, der sehr
+ gross ist.
+
+ Als nächstes installieren Sie den Port www/linux-f10-flashplugin10. Dadurch
+ wird &flash; 10.X installiert, das in dieser Version unter
+ &os; 8.X stabil läuft.
+
+ Für diese Version muss der folgende symbolische Link
+ angelegt werden:
+
+ &prompt.root; ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \
+ /usr/local/lib/browser_plugins/
+
+
+
+ Sobald der richtige &flash;-Port passend zu ihrer &os; Version
+ installiert ist, muss das Plugin von jedem Benutzer mittels
+ nspluginwrapper installiert werden:
+
+ &prompt.user; nspluginwrapper -v -a -i
+
+ Das &linux; Prozessdateisystem, &man.linprocfs.5;, muss unter
+ /usr/compat/linux/proc eingehängt
+ werden, wenn Sie &flash;-Animationen abspielen möchten. Dies
+ kann mittels des folgenden Kommandos geschehen:
+
+ &prompt.root; mount -t linprocfs linproc /usr/compat/linux/proc
+
+ Dieser Schritt kann automatisiert zur Bootzeit ablaufen, indem Sie
+ die passende Zeile in /etc/fstab eintragen:
+
+ linproc /usr/compat/linux/proc linprocfs rw 0 0
+
+ Rufen Sie dann Ihren Browser auf und geben in der Adresszeile
+ about:plugins ein. Diese Eingabe muss mit der
+ Enter-Taste bestätigt werden. Danach wird eine
+ Seite geladen, auf der alle installierten Plugins aufgelistet
+ werden.
+
-
- Der linuxpluginwrapper
- funktioniert nur unter der &i386;-Architektur.
-
+
+ Firefox und das Swfdec &flash;-Plugin
+
+ Swfdec ist die Bibliothek zum Dekodieren und Rendern von &flash;
+ Animationen. Swfdec-Mozilla ist ein Plugin für
+ Firefox-Browser, welches die
+ Swfdec-Bibliothek zum Abspielen von SWF-Dateien benutzt. Momentan
+ befindet sie sich noch in der Entwicklung.
+
+ Wenn Sie diese nicht übersetzen können oder wollen,
+ dann installieren Sie einfach das Paket aus dem Netz:
+
+ &prompt.root; pkg_add -r swfdec-plugin
+
+ Wenn das Paket nicht verfügbar ist, können Sie es auch
+ über die Ports-Sammlung bauen und installieren:
+
+ &prompt.root; cd /usr/ports/www/swfdec-plugin
+&prompt.root; make install clean
+
+ Starten Sie anschliessend ihren Browser neu, damit dieses Plugin
+ aktiviert wird.OperaOperaOpera ist ein schneller,
vollwertiger und standardkonformer Browser, der wie Mozilla
über einen eingebauten E-Mail- und Newsreader verfügt.
Zusätzlich sind ein IRC-Client, ein RSS/Atom-Feeds-Reader
sowie weitere Programme enthalten. Dennoch handelt es sich bei
Opera weiterhin um ein relativ
kleines und sehr schnelles Programmpaket. Sie haben
die Wahl zwei Versionen dieses Browsers: Der
nativen FreeBSD-Version und der Linux-Version.Wenn Sie das Web mit der FreeBSD-Version von
Opera erkunden
wollen, installieren Sie das Paket:&prompt.root; pkg_add -r operaEinige FTP-Server haben nicht alle Pakete, Sie können
Opera aber über die Ports-Sammlung
installieren:&prompt.root; cd /usr/ports/www/opera
&prompt.root; make install cleanWenn Sie die Linux-Version des Browsers verwenden wollen,
ersetzen Sie in den Beispielen opera durch
linux-opera. Wenn Sie Plugins einsetzen
wollen, die nur für Linux erhältlich sind, wie
das Adobe &acrobat.reader; Plugin,
benötigen Sie die Linux-Version. Ansonsten sind die
FreeBSD- und Linux-Versionen des Browsers äquivalent.KonquerorKonquerorKonqueror ist Teil von
KDE, kann aber außerhalb
von KDE benutzt werden,
wenn der Port x11/kdebase3
installiert ist. Konqueror
ist mehr als nur ein Browser. Sie können das
Programm weiters zur Dateiverwaltung und zum Abspielen
von Multimedia-Dateien benutzen.Der Port misc/konq-plugins
installiert verschiedene Plugins für
Konqueror.Konqueror kann
&flash;-Seiten darstellen. Wie Sie
die &flash;-Unterstützung
- aktiviern, können Sie unter
-
+ aktiviern, können Sie unter
nachlesen.BüroanwendungenNeue Benutzer suchen oft ein komplettes Office-Paket oder eine
leicht zu bedienende Textverarbeitung. Einige
Benutzeroberflächen
wie KDE enthalten zwar ein Office-Paket,
diese werden in der Standardeinstellung unter FreeBSD aber nicht
installiert. Unabhängig von der verwendeten
Benutzeroberfläche können Sie diverse Office-Pakete aber
jederzeit über die Ports-Sammlung installlieren.Dieser Abschnitt behandelt die nachstehenden Anwendungen:AnwendungRessourcenbedarfInstallationsaufwand aus den Portswichtige AbhängigkeitenKOfficeniedrighochKDEAbiWordniedrigniedrigGtk+ oder
GNOMEThe GimpniedrighochGtk+OpenOffice.orghochenorm&jdk; 1.4,
MozillaKOfficeKOfficeOffice-PaketeKOfficeDie KDE-Gemeinschaft stellt ein Office-Paket bereit, das auch
außerhalb von KDE eingesetzt
werden kann. Es besteht aus vier, von anderen Office-Paketen
bekannten, Komponenten: KWord ist die
Textverarbeitung, KSpread die
Tabellenkalkulation, mit KPresenter
werden Präsentationen erstellt und
Kontour ist ein Zeichenprogramm.Stellen Sie vor der Installation des neusten
KOffice sicher, dass Sie eine aktuelle
Version von KDE besitzen.Mit dem folgenden Kommando installieren Sie das
KOffice-Paket:&prompt.root; pkg_add -r kofficeWenn das Paket nicht zur Verfügung steht, benutzen Sie
bitte die Ports-Sammlung. Wenn Sie beispielsweise
KOffice für
KDE3 installieren wollen, setzen Sie die
nachstehendenen Befehle ab:&prompt.root; cd /usr/ports/editors/koffice-kde3
&prompt.root; make install cleanAbiWordAbiWordAbiWord ist eine freie
Textverarbeitung, die ähnlich wie
µsoft; Word
ist. Sie können damit Artikel, Briefe, Berichte,
Notizen usw. verfassen. Das Programm ist
sehr schnell, besitzt viele Funktionen und ist sehr
benutzerfreundlich.AbiWord kann viele Dateiformate,
unter anderem nicht offene wie .doc von
µsoft;, importieren und exportieren.Das AbiWord-Paket installieren Sie
wie folgt:&prompt.root; pkg_add -r AbiWordSollte das Paket nicht zur Verfügung stehen, können
Sie das Programm mit der Ports-Sammlung, die zudem aktueller als
die Pakete ist, übersetzen. Gehen Sie dazu
folgendermaßen vor:&prompt.root; cd /usr/ports/editors/AbiWord
&prompt.root; make install cleanThe GIMPThe GIMPThe GIMP ist ein sehr ausgereiftes
Bildverarbeitungsprogramm mit dem Sie Bilder erstellen oder
retuschieren können. Sie können es sowohl als einfaches
Zeichenprogramm als auch zum retuschieren von Fotografien benutzen.
Das Programm besitzt eine eingebaute Skriptsprache und es existieren
sehr viele Plug-Ins. The GIMP kann
Bilder in zahlreichen Formaten lesen und speichern und stellt
Schnittstellen zu Scannern und grafischen Tabletts zur
Verfügung.Sie installieren das Paket mit dem nachstehenden Befehl:&prompt.root; pkg_add -r gimpBenutzen Sie die Ports-Sammlung, wenn Ihr FTP-Server das Paket
nicht bereitstellt. Im Verzeichnis graphics
finden Sie das Handbuch The Gimp Manual.
Sie können alles mit den folgenden Befehlen
installieren:&prompt.root; cd /usr/ports/graphics/gimp
&prompt.root; make install clean
&prompt.root; cd /usr/ports/graphics/gimp-manual-pdf
&prompt.root; make install cleanDie Entwickler-Version von The GIMP
finden Sie im Verzeichnis graphics
der Ports-Sammlung. Das Handbuch ist im HTML-Format
(graphics/gimp-manual-html)
erhältlich.OpenOffice.orgOpenOffice.orgOffice-PaketeOpenOffice.orgOpenOffice.org enthält alles,
was von einem Office-Paket erwartet wird: Textverarbeitung,
Tabellenkalkulation, Präsentation und ein Zeichenprogramm.
Die Bedienung gleicht anderen Office-Paketen und das Programm
kann zahlreiche Dateiformate importieren und exportieren. Es gibt
lokalisierte Versionen mit angepassten Menüs,
Rechtschreibkontrollen und Wörterbüchern.Die Textverarbeitung von
OpenOffice.org speichert Dateien im
XML-Format. Dadurch wird die Verwendbarkeit der Dateien auf
anderen Systemen erhöht und die Handhabung der Daten
vereinfacht. Die Tabellenkalkulation besitzt eine Makrosprache
und eine Schnittstelle zu Datenbanken.
OpenOffice.org läuft auf
&windows;, &solaris;, Linux, FreeBSD und &macos; X. Weitere
Informationen über OpenOffice.org
finden Sie auf der OpenOffice.org Website.
Spezifische Informationen für FreeBSD finden Sie auf
der Webseite FreeBSD OpenOffice.org
Porting Team. Von dort können Sie auch direkt
das OpenOffice-Paket herunterladen.OpenOffice.org installieren Sie wie
folgt:&prompt.root; pkg_add -r openoffice.orgDiese Art der Installation sollte mit einer -RELEASE-Version
funktionieren. Verwenden Sie eine andere Version, sollten Sie
die Internetseite des &os; OpenOffice.org
Porting Teams besuchen und
das entsprechende Paket herunterladen und über
&man.pkg.add.1; installieren, wobei Sie zwischen der aktuellen
Version und der Entwicklerversion wählen können.Nachdem das Paket installiert ist, müssen Sie
lediglich folgenden Befehl eingeben, um
OpenOffice.org zu starten:&prompt.user; openoffice.orgNach dem ersten Start werden Ihnen einige Fragen gestellt.
Außerdem wird in Ihrem Heimatverzeichnis der neue
Unterordner .openoffice.org2
angelegt.Falls die OpenOffice.org-Pakete
nicht zur Verfügung stehen, können Sie immer noch die
Ports-Sammlung benutzen. Beachten Sie aber bitte, dass Sie sehr
viel Plattenplatz und Zeit benötigen, um die Quellen zu
übersetzen.&prompt.root; cd /usr/ports/editors/openoffice-2
&prompt.root; make install cleanWenn Sie ein lokalisierte Version bauen wollen, ersetzen
Sie den letzten Befehl durch die folgende Zeile:&prompt.root; make LOCALIZED_LANG=Ihre_Sprache install cleanDabei ersetzen Sie Ihre_Sprache
durch den korrekten ISO-Code. Eine Liste der
unterstützten Codes enthält die Datei
files/Makefile.localized, die sich im
Portsverzeichnis befindet.Nachdem die Installation abgeschlossen ist, können Sie
OpenOffice.org durch folgenden
Befehl starten:&prompt.user; openoffice.orgAnzeigen von DokumentenEinige neuere Dokumentformate, die sich aktuell großer
Beliebtheit erfreuen, können Sie sich mit den im Basissystem
enthaltenen Programmen und Werkzeugen nicht ansehen.
Dieser Abschnitt behandelt Programme, mit denen Sie sich Dokumente in
unterschiedlichsten Formaten ansehen können.Die nachstehenden Anwendungen werden behandelt:AnwendungRessourcenbedarfInstallationsaufwand aus den Portswichtige Abhängigkeiten&acrobat.reader;niedrigniedrigLinux Binary CompatibilitygvniedrigniedrigXaw3dXpdfniedrigniedrigFreeTypeGQviewniedrigniedrigGtk+ oder
GNOME&acrobat.reader;Acrobat ReaderPDFanzeigenViele Dokumente werden heute im Portable Document
Format (PDF) zur Verfügung gestellt. PDF-Dokumente
schauen Sie sich am Besten mit dem Programm
&acrobat.reader; an, das von
Adobe für Linux freigegeben
wurde. Da Linux-Programme unter FreeBSD laufen, steht Ihnen das
Programm auch hier zur Verfügung.Um &acrobat.reader; 7 über
die Ports-Sammlung zu installieren, geben Sie Folgendes ein:&prompt.root; cd /usr/ports/print/acroread7
&prompt.root; make install cleanAufgrund der Lizenzbedinungen ist eine Paketversion leider
nicht verfügbar.gvgvPDFanzeigenPostScriptanzeigengv kann &postscript;- und
PDF-Dokumente anzeigen. Es stammt von
ghostview ab, besitzt aber wegen der
Xaw3d-Bibliothek eine
schönere Benutzeroberfläche.
In gv können Sie viele Operationen
durchführen: Sie können die Ausrichtung
und die Papiergröße eines Dokuments ändern,
das Dokument skalieren oder die Kantenglättung
(Anti-Aliasing) aktivieren. Fast
jede Operation kann sowohl mit der Tastatur als auch mit der Maus
durchgeführt werden.Installieren Sie das gv-Paket wie
folgt:&prompt.root; pkg_add -r gvBenutzen Sie die Ports-Sammlung, wenn das Paket nicht zur
Verfügung steht:&prompt.root; cd /usr/ports/print/gv
&prompt.root; make install cleanXpdfXpdfPDFanzeigenEin schlankes und effizientes Programm zum Betrachten von
PDF-Dateien ist Xpdf. Es benötigt
wenige Ressourcen und ist sehr stabil. Da das Programm die Standard
X-Zeichensätze benutzt, ist es nicht auf &motif; oder ein
anderes X-Toolkit angewiesen.Das Xpdf-Paket können Sie mit
dem folgenden Kommando installieren:&prompt.root; pkg_add -r xpdfWenn das Paket nicht verfügbar ist, oder Sie lieber die
Ports-Sammlung benutzen möchten, gehen Sie wie folgt vor:&prompt.root; cd /usr/ports/graphics/xpdf
&prompt.root; make install cleanWenn Sie nach Abschluss der Installation
Xpdf starten, öffnen Sie
das Menü mit der rechten Maustaste.GQviewGQviewMit GQview lassen sich Bilder
verwalten. Unter anderem können Sie sich Bilder (auch auf dem
ganzen Bildschirm) anschauen, ein externes Werkzeug aufrufen und
eine Vorschau (thumbnail) erzeugen.
Weiterhin können Sie automatisch ablaufende
Präsentationen erstellen und grundlegende Dateioperationen
durchführen, Bildersammlungen verwalten und doppelte Bilder
aufspüren. GQview ist
internationalisiert, das heißt es berücksichtigt die
Spracheinstellungen des Systems.Wenn Sie das GQview-Paket
installieren wollen, geben Sie das folgende Kommando ein:&prompt.root; pkg_add -r gqviewIst das Paket nicht erhältlich, oder wenn Sie die
Ports-Sammlung bevorzugen, setzen Sie die folgenden Kommandos
ab:&prompt.root; cd /usr/ports/graphics/gqview
&prompt.root; make install cleanFinanzsoftwareWenn Sie, warum auch immer, Ihre Finanzen mit einem FreeBSD
Arbeitsplatz verwalten wollen, stehen Ihnen verschiedene Anwendungen
zur Verfügung. Einige von ihnen unterstützen verbreitete
Formate, darunter Dateiformate, die von
Quicken
oder Excel verwendet werden.Dieser Abschnitt behandelt die folgenden Anwendungen:AnwendungRessourcenbedarfInstallationsaufwand aus den Portswichtige AbhängigkeitenGnuCashniedrighochGNOMEGnumericniedrighochGNOMEAbacusniedrigniedrigTcl/TkKMyMoneyniedrighochKDEGnuCashGnuCashGnuCash ist Teil des
GNOME-Projekts, dessen Ziel es ist,
leicht zu bedienende und doch leistungsfähige Anwendungen zu
erstellen. Mit GnuCash können Sie
Ihre Einnahmen und Ausgaben, Ihre Bankkonten und Wertpapiere
verwalten. Das Programm ist leicht zu bedienen und genügt
dennoch hohen Ansprüchen.GnuCash stellt ein Register,
ähnlich dem in einem Scheckheft und ein hierarchisches System
von Konten zur Verfügung. Eine Transaktion kann in einzelne
Teile aufgespaltet werden. GnuCash kann
Quicken-Dateien (QIF) importieren und einbinden. Weiterhin
unterstützt das Programm die meisten internationalen Formate
für Zeitangaben und Währungen. Die Bedienung des
Programms kann durch zahlreiche Tastenkombinationen und dem
automatischen Vervollständigen von Eingaben beschleunigt
werden.Das GnuCash-Paket installieren Sie
wie folgt:&prompt.root; pkg_add -r gnucashWenn das Paket nicht zur Verfügung steht, benutzen Sie die
Ports-Sammlung:&prompt.root; cd /usr/ports/finance/gnucash
&prompt.root; make install cleanGnumericGnumericTabellenkalkulationGnumericGnumeric ist eine
Tabellenkalkulation, die Teil der GNOME
Benutzeroberfläche ist. Das Programm kann Eingaben anhand des
Zellenformats oder einer Folge von Eingaben vervollständigen.
Dateien verbreiteter Formate, wie die von
Excel,
Lotus 1-2-3 oder
Quattro Pro lassen sich importieren.
Grafiken erstellt Gnumeric mit dem
Programm math/guppi.
Gnumeric besitzt viele eingebaute
Funktionen und Zellenformate (zum Beispiel die üblich
verwendeten, wie Zahl, Währung, Datum oder Zeit).Installieren Sie das Gnumeric-Paket
mit dem folgenden Kommando:&prompt.root; pkg_add -r gnumericWenn das Paket nicht zur Verfügung steht, benutzen Sie die
Ports-Sammlung:&prompt.root; cd /usr/ports/math/gnumeric
&prompt.root; make install cleanAbacusAbacusTabellenkalkulationAbacusAbacus ist eine kleine und leicht zu
bedienende Tabellenkalkulation. Die vordefinierten Funktionen
stammen aus verschiedenen Bereichen wie der Statistik, der
Wirtschaft und der Mathematik. Das Programm kann Dateien im
Excel Dateiformat importieren und
exportieren sowie Ausgaben in &postscript; erzeugen.Installieren Sie das Abacus-Paket
mit dem folgenden Kommando:&prompt.root; pkg_add -r abacusWenn das Paket nicht zur Verfügung steht, benutzen Sie die
Ports-Sammlung:&prompt.root; cd /usr/ports/deskutils/abacus
&prompt.root; make install cleanKMyMoneyKMyMoneyTabellenkalkulationKMyMoneyBei KMyMoney handelt es sich
ein Programm zur Verwaltung der persönlichen Finanzen, das
unter KDE entwickelt wird.
KMyMoney hat das Ziel, alle
wichtigen Funktionen zu bieten, die auch von kommerziellen
Programmen zur Verwaltung der persönlichen Finanzen
unterstützt werden. Weiters zählen einfache
Benutzung sowie korrekte doppelte Buchführung zu den
herausragenden Fähigkeiten dieses Programms.
KMyMoney
unterstützt den Import von Datendateien im Format
Quicken Interchange Format (QIF),
kann Investionen verfolgen, unterstützt verschiedene
Währungen und bietet umfangreiche Reportmöglichkeiten.
OFX-Import wird über ein separates Plugin realisiert.Um KMyMoney über das
&os;-Paketsystem zu installieren, geben Sie Folgendes ein:&prompt.root; pkg_add -r kmymoney2Sollte das Paket nicht verfügbar sein, können Sie
das Programm auch über die Ports-Sammlung
installieren:&prompt.root; cd /usr/ports/finance/kmymoney2
&prompt.root; make install cleanZusammenfassungFreeBSD wird von Internet Service Providern wegen seiner
Schnelligkeit und Stabilität eingesetzt, es ist aber auch
zum Einrichten eines Arbeitsplatzes geeignet. Mit tausenden
Anwendungen, die als
Pakete oder
Ports
zur Verfügung stehen, können Sie sich einen
Arbeitsplatz nach Ihren Wünschen einrichten.Die folgende Aufstellung fasst die in diesem Kapitel besprochenen
Anwendungen zusammen:AnwendungPaket-NamePort-Name
-
- Mozilla
- mozilla
- www/mozilla
-
-
-
- &netscape;
- linux-netscape7
- www/netscape7
-
-
Operaoperawww/operaFirefoxfirefoxwww/firefoxKOfficekoffice-kde3editors/koffice-kde3AbiWordabiwordeditors/abiwordThe GIMPgimpgraphics/gimpOpenOffice.orgopenofficeeditors/openoffice-1.1&acrobat.reader;acroreadprint/acroread7gvgvprint/gvXpdfxpdfgraphics/xpdfGQviewgqviewgraphics/gqviewGnuCashgnucashfinance/gnucashGnumericgnumericmath/gnumericAbacusabacusdeskutils/abacus
+
+
+ KMyMoney
+ kmymoney2
+ finance/kmymoney2
+
diff --git a/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml
index d0f491b6d6..bd810ead81 100644
--- a/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml
@@ -1,4638 +1,4633 @@
BerndWarkenÜbersetzt von MartinHeinenSpeichermedienÜbersichtDieses Kapitel behandelt die Benutzung von Laufwerken unter
FreeBSD. Laufwerke können speichergestützte Laufwerke,
Netzwerklaufwerke oder normale SCSI/IDE-Geräte sein.Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes
wissen:Die Begriffe, die FreeBSD verwendet, um die
Organisation der Daten auf einem physikalischen Laufwerk
zu beschreiben (Partitionen und Slices).Wie Sie ein weiteres Laufwerk zu Ihrem System
hinzufügen.Wie virtuelle Dateisysteme, zum Beispiel RAM-Disks,
eingerichtet werden.Wie Sie mit Quotas die Benutzung von Laufwerken
einschränken können.Wie Sie Partitionen verschlüsseln, um Ihre Daten
zu schützen.Wie unter FreeBSD CDs und DVDs gebrannt werden.Sie werden die Speichermedien, die Sie für
Backups einsetzen können, kennen.Wie Sie die unter FreeBSD erhältlichen Backup
Programme benutzen.Wie Sie ein Backup mit Disketten erstellen.Was Dateisystem-Schnappschüsse sind und wie sie
eingesetzt werden.Bevor Sie dieses Kapitel lesen,sollten Sie einen einen &os;-Kernel installieren
können ().GerätenamenDie folgende Tabelle zeigt die von FreeBSD unterstützten
Speichergeräte und deren Gerätenamen.
Namenskonventionen von physikalischen LaufwerkenLaufwerkstypGerätenameIDE-FestplattenadIDE-CD-ROM LaufwerkeacdSCSI-Festplatten und USB-SpeichermediendaSCSI-CD-ROM LaufwerkecdVerschiedene proprietäre CD-ROM-Laufwerkemcd Mitsumi CD-ROM und
scd Sony CD-ROMDiskettenlaufwerkefdSCSI-BandlaufwerkesaIDE-BandlaufwerkeastFlash-Laufwerkefla für &diskonchip;
Flash-DeviceRAID-Laufwerkeaacd für &adaptec; AdvancedRAID,
mlxd und mlyd
für &mylex;,
amrd für AMI &megaraid;,
idad für Compaq Smart RAID,
twed für &tm.3ware; RAID.
DavidO'BrianIm Original von Hinzufügen von LaufwerkenLaufwerkehinzufügenAngenommen, Sie wollen ein neues SCSI-Laufwerk zu einer Maschine
hinzufügen, die momentan nur ein Laufwerk hat. Dazu schalten
Sie zuerst den Rechner aus und installieren das Laufwerk entsprechend
der Anleitungen Ihres Rechners, Ihres Controllers und Laufwerk
Herstellers. Den genauen Ablauf können wir wegen der
großen Abweichungen leider nicht beschreiben.Nachdem Sie das Laufwerk installiert haben, melden Sie sich als
Benutzer root an und kontrollieren Sie
/var/run/dmesg.boot, um sicherzustellen,
dass das neue Laufwerk gefunden wurde. Das neue Laufwerk
wird, um das Beispiel fortzuführen, da1
heißen und soll unter /1 angehangen
werden. Fügen Sie eine IDE-Platte hinzu, wird diese den
Namen ad1 erhalten.sPartitionenSlicesfdiskDa FreeBSD auf IBM-PC kompatiblen Rechnern läuft, muss
es die PC BIOS-Partitionen, die verschieden von den traditionellen
BSD-Partitionen sind, berücksichtigen. Eine PC Platte kann
bis zu vier BIOS-Partitionen enthalten. Wenn die Platte
ausschließlich für FreeBSD verwendet wird, können
Sie den dedicated Modus benutzen, ansonsten
muss FreeBSD in eine der BIOS-Partitionen installiert werden.
In FreeBSD heißen die PC BIOS-Partitionen
Slices, um sie nicht mit den traditionellen
BSD-Partitionen zu verwechseln. Sie können auch Slices auf
einer Platte verwenden, die ausschließlich von FreeBSD
benutzt wird, sich aber in einem Rechner befindet, der noch ein
anderes Betriebssystem installiert hat. Dadurch stellen Sie sicher,
dass Sie fdisk des anderen Betriebssystems noch
benutzen können.Im Fall von Slices wird die Platte als
/dev/da1s1e hinzugefügt. Das heißt:
SCSI-Platte, Einheit 1 (die zweite SCSI-Platte), Slice 1
(PC BIOS-Partition 1) und die e BSD-Partition.
Wird die Platte ausschließlich für FreeBSD verwendet
(dangerously dedicated), wird sie einfach als
/dev/da1e hinzugefügt.Da &man.bsdlabel.8; zum Speichern von Sektoren 32-Bit
Integer verwendet, ist das Werkzeug in den meisten Fällen
auf 2^32-1 Sektoren pro Laufwerk oder 2 TB
beschränkt. In &man.fdisk.8; darf der Startsektor
nicht größer als 2^32-1 sein und Partitionen
sind auf eine Länge von 2^32-1 beschränkt.
In den meisten Fällen beschränkt dies die
Größe einer Partition auf 2 TB
und die maximale Größe eines Laufwerks
auf 4 TB. Das &man.sunlabel.8;-Format ist
mit 2^32-1 Sektoren pro Partition und 8 Partitionen
auf 16 TB beschränkt. Mit größeren
Laufwerken können &man.gpt.8;-Partitionen benutzt
werden.Verwenden von &man.sysinstall.8;sysinstallhinzufügen von LaufwerkensuDas sysinstall MenüUm ein Laufwerk zu partitionieren und zu labeln, kann das
menügestützte sysinstall
benutzt werden. Dazu melden Sie sich als root
an oder benutzen su, um
root zu werden. Starten Sie
sysinstall und wählen das
Configure Menü, wählen Sie dort
den Punkt Fdisk aus.Partitionieren mit fdiskInnerhalb von fdisk geben Sie
A ein, um die ganze Platte für
FreeBSD zu benutzen. Beantworten Sie die Frage remain
cooperative with any future possible operating systems mit
YES. W schreibt die
Änderung auf die Platte, danach können Sie
fdisk mit Q
verlassen. Da Sie eine Platte zu einem schon laufenden System
hinzugefügt haben, beantworten Sie die Frage nach dem
Master Boot Record mit None.Disk-Label-EditorBSD PartitionenAls nächstes müssen Sie
sysinstall verlassen und es erneut
starten. Folgen Sie dazu bitte den Anweisungen von oben, aber
wählen Sie dieses Mal die Option Label,
um in den Disk Label Editor zu gelangen.
Hier werden die traditionellen BSD-Partitionen erstellt.
Ein Laufwerk kann acht Partitionen, die mit den Buchstaben
a-h gekennzeichnet werden,
besitzen. Einige Partitionen sind für spezielle Zwecke
reserviert. Die a Partition ist für die
Root-Partition (/) reserviert. Deshalb
sollte nur das Laufwerk, von dem gebootet wird, eine
a Partition besitzen. Die b
Partition wird für Swap-Partitionen benutzt, wobei Sie
diese auf mehreren Platten benutzen dürfen.
Im dangerously dedicated Modus spricht
die c Partition die gesamte Platte an,
werden Slices verwendet, wird damit die ganze Slice angesprochen.
Die anderen Partitionen sind für allgemeine Zwecke
verwendbar.Der Label Editor von sysinstall
bevorzugt die e
Partition für Partitionen, die weder Root-Partitionen noch
Swap-Partitionen sind. Im Label
Editor können Sie ein einzelnes Dateisystem
mit C erstellen. Wählen Sie
FS, wenn Sie gefragt werden, ob Sie ein
FS (Dateisystem) oder Swap erstellen wollen, und geben Sie einen
Mountpoint z.B. /mnt an. Wenn Sie nach einer
FreeBSD-Installation ein Dateisystem mit
sysinstall erzeugen,
so werden die Einträge in /etc/fstab
nicht erzeugt, so dass die Angabe des Mountpoints nicht
wichtig ist.Sie können nun das Label auf das Laufwerk schreiben und
das Dateisystem erstellen, indem Sie W
drücken. Ignorieren Sie die Meldung von
sysinstall, dass die neue Partition
nicht angehangen werden konnte, und verlassen Sie den Label Editor
sowie sysinstall.EndeIm letzten Schritt fügen Sie noch in
/etc/fstab den Eintrag für das neue
Laufwerk ein.Die KommandozeileAnlegen von SlicesMit der folgenden Vorgehensweise wird eine Platte mit
anderen Betriebssystemen, die vielleicht auf Ihrem Rechner
installiert sind, zusammenarbeiten und nicht das
fdisk Programm anderer Betriebssysteme
stören. Bitte benutzen
Sie den dedicated Modus nur dann, wenn
Sie dazu einen guten Grund haben!&prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1
&prompt.root; fdisk -BI da1 # Initialisieren der neuen Platte
&prompt.root; bsdlabel -B -w da1s1 auto #Labeln.
&prompt.root; bsdlabel -e da1s1 # Editieren des Disklabels und Hinzufügen von Partitionen
&prompt.root; mkdir -p /1
&prompt.root; newfs /dev/da1s1e # Wiederholen Sie diesen Schritt für jede Partition
&prompt.root; mount /dev/da1s1e /1 # Anhängen der Partitionen
&prompt.root; vi /etc/fstab # Ändern Sie /etc/fstab entsprechendWenn Sie ein IDE-Laufwerk besitzen, ändern Sie
da in ad.DedicatedOS/2Wenn das neue Laufwerk nicht von anderen Betriebssystemen
benutzt werden soll, können Sie es im
dedicated Modus betreiben. Beachten Sie bitte,
dass Microsoft-Betriebssysteme mit diesem Modus eventuell nicht
zurechtkommen, aber es entsteht kein Schaden am Laufwerk. Im
Gegensatz dazu wird IBMs &os2; versuchen, jede ihm nicht bekannte
Partition zu reparieren.&prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1
&prompt.root; bsdlabel -Bw da1 auto
&prompt.root; bsdlabel -e da1 # Erstellen der `e' Partition
&prompt.root; newfs /dev/da1e
&prompt.root; mkdir -p /1
&prompt.root; vi /etc/fstab # /dev/da1e hinzufügen
&prompt.root; mount /1Eine alternative Methode:&prompt.root; dd if=/dev/zero of=/dev/da1 count=2
&prompt.root; bsdlabel /dev/da1 | bsdlabel -BR da1 /dev/stdin
&prompt.root; newfs /dev/da1e
&prompt.root; mkdir -p /1
&prompt.root; vi /etc/fstab # /dev/da1e hinzufügen
&prompt.root; mount /1RAIDSoftware-RAIDChristopherShumwayOriginal von JimBrownÜberarbeitet von Concatenated-Disk (CCD) konfigurierenRAIDSoftwareRAIDCCDDie wichtigsten Faktoren bei der Auswahl von Massenspeichern
sind Geschwindigkeit, Zuverlässigkeit und Preis.
Selten findet sich eine ausgewogene Mischung aller drei Faktoren.
Schnelle und zuverlässige Massenspeicher sind für
gewöhnlich teuer. Um die Kosten zu senken, muss
entweder an der Geschwindigkeit oder an der Zuverlässigkeit
gespart werden.Das unten beschriebene System sollte vor allem
preiswert sein. Der nächst wichtige Faktor war
die Geschwindigkeit gefolgt von der Zuverlässigkeit.
Die Geschwindigkeit war nicht so wichtig, da über
das Netzwerk auf das System zugegriffen wird. Da alle
Daten schon auf CD-Rs gesichert sind, war die
Zuverlässigkeit, obwohl wichtig, ebenfalls nicht
von entscheidender Bedeutung.Die Bewertung der einzelnen Faktoren ist der erste
Schritt bei der Auswahl von Massenspeichern. Wenn Sie
vor allem ein schnelles und zuverlässiges Medium
benötigen und der Preis nicht wichtig ist, werden
Sie ein anderes System als das hier beschriebene
zusammenstellen.Installation der HardwareNeben der IDE-Systemplatte besteht das System
aus drei Western Digital IDE-Festplatten mit
5400 RPM und einer Kapazität von je
30 GB. Insgesamt stehen also 90 GB
Speicherplatz zur Verfügung. Im Idealfall sollte
jede Festplatte an einen eigenen Controller angeschlossen
werden. Um Kosten zu sparen, wurde bei diesem System
darauf verzichtet und an jeden IDE-Controller eine
Master- und eine Slave-Platte angeschlossen.Beim Reboot wurde das BIOS so konfiguriert, dass es
die angeschlossenen Platten automatisch erkennt und FreeBSD
erkannte die Platten ebenfalls:ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33Wenn FreeBSD die Platten nicht erkennt,
überprüfen Sie, ob die Jumper korrekt
konfiguriert sind. Die meisten IDE-Festplatten
verfügen über einen
Cable Select-Jumper. Die Master-
und Slave-Platten werden mit einem anderen
Jumper konfiguriert. Bestimmen Sie den richtigen
Jumper mithilfe der Dokumentation Ihrer
Festplatte.Als nächstes sollten Sie überlegen,
auf welche Art der Speicher zur Verfügung
gestellt werden soll. Schauen Sie sich dazu
&man.vinum.8; ()
und &man.ccd.4; an. Im hier beschriebenen
System wird &man.ccd.4; eingesetzt.Konfiguration von CCDMit &man.ccd.4; können mehrere
gleiche Platten zu einem logischen Dateisystem
zusammengefasst werden. Um &man.ccd.4;
zu benutzen, muss der Kernel mit der entsprechenden
Unterstützung übersetzt werden.
Ergänzen Sie die Kernelkonfiguration um die
nachstehende Zeile. Anschließend müssen
Sie den Kernel neu übersetzen und installieren.pseudo-device ccdAlternativ kann &man.ccd.4; auch als
Kernelmodul geladen werden.Um &man.ccd.4; zu benutzen, müssen
die Laufwerke zuerst mit einem Label versehen werden.
Die Label werden mit &man.bsdlabel.8; erstellt:bsdlabel -w ad1 auto
bsdlabel -w ad2 auto
bsdlabel -w ad3 autoDamit wurden die Label ad1c,
ad2c und ad3c
erstellt, die jeweils das gesamte Laufwerk umfassen.Im nächsten Schritt muss der Typ des Labels
geändert werden. Die Labels können Sie
mit &man.bsdlabel.8; editieren:bsdlabel -e ad1
bsdlabel -e ad2
bsdlabel -e ad3Für jedes Label startet dies den durch
EDITOR gegebenen Editor, typischerweise
&man.vi.1;.Ein unverändertes Label sieht zum Beispiel
wie folgt aus:8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)Erstellen Sie eine e-Partition
für &man.ccd.4;. Dazu können Sie normalerweise
die Zeile der c-Partition kopieren,
allerdings muss auf
4.2BSD gesetzt werden.
Das Ergebnis sollte wie folgt aussehen:8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)Erstellen des DateisystemsNachdem alle Platten ein Label haben, kann das
&man.ccd.4;-RAID aufgebaut werden. Dies geschieht
mit &man.ccdconfig.8;:ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3eDie folgende Aufstellung erklärt die
verwendeten Kommandozeilenargumente:Das erste Argument gibt das zu konfigurierende
Gerät, hier /dev/ccd0c,
an. Die Angabe von /dev/ ist
dabei optional.Der Interleave für das Dateisystem. Der
Interleave definiert die Größe eines
Streifens in Blöcken, die normal 512 Bytes
groß sind. Ein Interleave von 32 ist
demnach 16384 Bytes groß.Weitere Argumente für &man.ccdconfig.8;.
Wenn Sie spiegeln wollen, können Sie das
hier angeben. Die gezeigte Konfiguration
verwendet keine Spiegel, sodass der Wert
0 angegeben ist.Das letzte Argument gibt die Geräte des
Plattenverbundes an. Benutzen Sie für jedes
Gerät den kompletten Pfadnamen.Nach Abschluß von &man.ccdconfig.8; ist der
Plattenverbund konfiguriert und es können Dateisysteme
auf dem Plattenverbund angelegt werden. Das Anlegen
von Dateisystemen wird in der Hilfeseite &man.newfs.8;
beschrieben. Für das Beispiel genügt
der folgende Befehl:newfs /dev/ccd0cAutomatisierungDamit &man.ccd.4; beim Start automatisch
aktiviert wird, ist die Datei /etc/ccd.conf
mit dem folgenden Kommando zu erstellen:ccdconfig -g > /etc/ccd.confWenn /etc/ccd.conf existiert, wird beim
Reboot ccdconfig -C von
/etc/rc aufgerufen. Damit wird
&man.ccd.4; eingerichtet und die darauf
befindlichen Dateisysteme können angehängt
werden.Wenn Sie in den Single-User Modus booten, müssen Sie
den Verbund erst konfigurieren, bevor Sie darauf befindliche
Dateisysteme anhängen können:ccdconfig -CIn /etc/fstab ist noch ein Eintrag
für das auf dem Verbund befindliche Dateisystem zu
erstellen, damit dieses beim Start des Systems immer
angehängt wird:/dev/ccd0c /media ufs rw 2 2Der Vinum-Volume-ManagerRAIDSoftwareRAIDVinumDer Vinum Volume Manager ist ein Block-Gerätetreiber,
der virtuelle Platten zur Verfügung stellt. Er trennt die
Verbindung zwischen der Festplatte und dem zugehörigen
Block-Gerät auf. Im Gegensatz zur konventionellen
Aufteilung einer Platte in Slices lassen sich dadurch Daten
flexibler, leistungsfähiger und zuverlässiger verwalten.
&man.vinum.8; stellt RAID-0, RAID-1 und RAID-5 sowohl einzeln wie
auch in Kombination zur Verfügung.Mehr Informationen über &man.vinum.8; erhalten Sie in
.Hardware-RAIDRAIDHardwareFreeBSD unterstützt eine Reihe von
RAID-Controllern. Diese Geräte
verwalten einen Plattenverbund; zusätzliche Software
wird nicht benötigt.Der Controller steuert mithilfe eines
BIOS auf der Karte die Plattenoperationen.
Wie ein RAID System eingerichtet wird,
sei kurz am Beispiel des Promise IDE
RAID-Controllers gezeigt. Nachdem
die Karte eingebaut ist und der Rechner neu gestartet wurde,
erscheint eine Eingabeaufforderung. Wenn Sie den Anweisungen
auf dem Bildschirm folgen, gelangen Sie in eine Maske, in der
Sie mit den vorhandenen Festplatten ein
RAID-System aufbauen können.
FreeBSD behandelt das RAID-System wie
eine einzelne Festplatte.Wiederherstellen eines ATA-RAID-1 VerbundsMit FreeBSD können Sie eine ausgefallene Platte in
einem RAID-Verbund während des Betriebs auswechseln,
vorausgesetzt Sie bemerken den Ausfall vor einem Neustart.Einen Ausfall erkennen Sie, wenn in der Datei
/var/log/messages oder in der
Ausgabe von &man.dmesg.8; Meldungen wie die folgenden
auftauchen:ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\
status=59 error=40
ar0: WARNING - mirror lostÜberprüfen Sie den RAID-Verbund mit
&man.atacontrol.8;:&prompt.root; atacontrol list
ATA channel 0:
Master: no device present
Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0
ATA channel 1:
Master: no device present
Slave: no device present
ATA channel 2:
Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
ATA channel 3:
Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
&prompt.root; atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADEDDamit Sie die Platte ausbauen können, muss zuerst
der ATA-Channel der ausgefallenen Platte aus dem Verbund entfernt
werden:&prompt.root; atacontrol detach ata3Ersetzen Sie dann die Platte.Nun aktivieren Sie den ATA-Channel wieder:&prompt.root; atacontrol attach ata3
Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device presentNehmen Sie die neue Platte in den Verbund auf:&prompt.root; atacontrol addspare ar0 ad6Stellen Sie die Organisation des Verbunds wieder her:&prompt.root; atacontrol rebuild ar0Sie können den Fortschritt des Prozesses durch
folgende Befehle kontrollieren:&prompt.root; dmesg | tail -10
[output removed]
ad6: removed from configuration
ad6: deleted from ar0 disk1
ad6: inserted into ar0 disk1 as spare
&prompt.root; atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completedWarten Sie bis die Wiederherstellung beendet ist.MarcFonvieilleBeigetragen von USB SpeichermedienUSBSpeichermedienDer Universal Serial Bus (USB) wird heutzutage von
vielen externen Speichern benutzt: Festplatten,
USB-Thumbdrives oder CD-Brennern, die alle von
&os; unterstützt werden.USB-KonfigurationUSB-Massenspeicher werden vom Treiber &man.umass.4;
betrieben. Wenn Sie den GENERIC-Kernel
benutzen, brauchen Sie keine Anpassungen vorzunehmen.
Benutzen Sie einen angepassten Kernel, müssen die
nachstehenden Zeilen in der Kernelkonfigurationsdatei
enthalten sein:device scbus
device da
device pass
device uhci
device ohci
+device ehci
device usb
device umassDer Treiber &man.umass.4; greift über das
SCSI-Subsystem auf die USB-Geräte zu. Ihre
USB-Geräte werden daher vom System als SCSI-Geräte
erkannt. Abhängig vom Chipsatz Ihrer Systemplatine
benötigen Sie in der Kernelkonfiguration entweder
die Option device uhci oder die
- Option device ohci. Die
+ Option device ohci für die
+ Unterstützung von USB 1.1. Die
Kernelkonfiguration kann allerdings auch beide Optionen
- enthalten. Vergessen Sie bitte nicht, einen neuen
- Kernel zu bauen und zu installieren, wenn Sie die
+ enthalten. Unterstützung für USB 2.0 Controller
+ wird durch den &man.ehci.4;-Treiber geleistet (die
+ device ehci Zeile). Vergessen Sie bitte nicht,
+ einen neuen Kernel zu bauen und zu installieren, wenn Sie die
Kernelkonfiguration verändert haben.Wenn es sich bei Ihrem USB-Gerät um einen
CD-R- oder DVD-Brenner handelt, müssen Sie den
Treiber &man.cd.4; für SCSI-CD-ROMs in die
Kernelkonfiguration aufnehmen:device cdDa der Brenner als SCSI-Laufwerk erkannt wird,
sollten Sie den Treiber &man.atapicam.4; nicht
benutzen.
-
- USB 2.0-Controller werden von &os;
- unterstützt, wenn Sie die folgende Zeile in Ihre
- Kernelkonfigurationsdatei aufnehmen:
-
- device ehci
-
- Die Treiber &man.uhci.4; und &man.ohci.4; werden
- immer noch für USB 1.X benötigt.Die USB-Konfiguration testenSie können das USB-Gerät nun testen.
Schließen Sie das Gerät an und untersuchen
Sie die Systemmeldungen (&man.dmesg.8;), Sie sehen
Ausgaben wie die folgende:umass0: USB Solid state disk, rev 1.10/1.00, addr 2
GEOM: create disk da0 dp=0xc2d74850
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device
da0: 1.000MB/s transfers
da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C)Die Ausgaben, wie das erkannte Gerät oder
der Gerätename (da0)
hängen natürlich von Ihrer Konfiguration ab.Da ein USB-Gerät als SCSI-Gerät erkannt
wird, können Sie USB-Massenspeicher mit dem
Befehl camcontrol anzeigen:&prompt.root; camcontrol devlist
<Generic Traveling Disk 1.11> at scbus0 target 0 lun 0 (da0,pass0)Wenn auf dem Laufwerk ein Dateisystem eingerichtet
ist, sollten Sie das Dateisystem einhängen können.
beschreibt, wie Sie
USB-Laufwerke formatieren und Partitionen einrichten.Damit auch normale Anwender (ohne
root-Rechte) USB-Laufwerke einhängen
können, müssen Sie Ihr System erst entsprechend
konfigurieren. Als erstes müssen Sie sicherstellen, dass
diese Anwender auf die beim Einhängen eines USB-Laufwerks
dynamisch erzeugten Gerätedateien zugreifen dürfen.
Dazu können Sie beispielsweise mit &man.pw.8; alle
potentiellen Benutzer dieser Gerätedateien in die Gruppe
operator aufnehmen. Außerdem
muss sichergestellt werden, dass Mitglieder der Gruppe
operator Schreib- und Lesezugriff
auf diese Gerätedateien haben. Dazu fügen Sie die
folgenden Zeilen in die Konfigurationsdatei
/etc/devfs.rules ein:[localrules=5]
add path 'da*' mode 0660 group operatorVerfügt Ihr System auch über SCSI-Laufwerke,
gibt es eine Besonderheit. Haben Sie beispielsweise
die SCSI-Laufwerke da0 bis
da2 installiert, so sieht die
zweite Zeile wie folgt aus:add path 'da[3-9]*' mode 0660 group operatorDadurch werden die bereits vorhandenen
SCSI-Laufwerke nicht in die Gruppe
operator aufgenommen.Vergessen Sie nicht, die &man.devfs.rules.5;-Regeln
in der Datei /etc/rc.conf zu
aktivieren:devfs_system_ruleset="localrules"Als nächstes müssen Sie Ihre Kernelkonfiguration
anpassen, damit auch normale Benutzer Dateisysteme mounten
dürfen. Dazu fügen Sie am besten folgende Zeile
in die Konfigurationsdatei
/etc/sysctl.conf ein:vfs.usermount=1Damit diese Einstellung wirksam wird, müssen Sie Ihr
System neu starten. Alternativ können Sie diese Variable
auch mit &man.sysctl.8; setzen.Zuletzt müssen Sie noch ein Verzeichnis anlegen, in
das das USB-Laufwerk eingehängt werden soll. Dieses
Verzeichnis muss dem Benutzer gehören, der das
USB-Laufwerk in den Verzeichnisbaum einhängen will.
Dazu legen Sie als root ein
Unterverzeichnis
/mnt/username
an (wobei Sie username
durch den Login des jeweiligen Benutzers sowie
usergroup durch die primäre
Gruppe des Benutzers ersetzen):&prompt.root; mkdir /mnt/username
&prompt.root; chown username:usergroup /mnt/usernameWenn Sie nun beispielsweise einen USB-Stick
anschließen, wird automatisch die Gerätedatei
/dev/da0s1 erzeugt. Da derartige
Geräte in der Regel mit dem FAT-Dateisystem
formatiert sind, können Sie sie beispielsweise mit
dem folgenden Befehl in den Verzeichnisbaum
einhängen:&prompt.user; mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/usernameWenn Sie das Gerät entfernen (das Dateisystem
müssen Sie vorher abhängen), sehen Sie
in den Systemmeldungen Einträge wie die folgenden:umass0: at uhub0 port 1 (addr 2) disconnected
(da0:umass-sim0:0:0:0): lost device
(da0:umass-sim0:0:0:0): removing device entry
GEOM: destroy disk da0 dp=0xc2d74850
umass0: detachedWeiteres zu USBNeben den Abschnitten
Hinzufügen von Laufwerken
und Anhängen und
Abhängen von Dateisystemen lesen Sie bitte
- die Hilfeseiten &man.umass.4;, &man.camcontrol.8; und
- &man.usbdevs.8;.
+ die Hilfeseiten &man.umass.4;, &man.camcontrol.8; für
+ &os; 8.X oder &man.usbdevs.8; bei vorherigen Versionen.
MikeMeyerBeigesteuert von CDs benutzenCD-ROMbrennenEinführungCDs besitzen einige Eigenschaften, die sie von
konventionellen Laufwerken unterscheiden. Zuerst konnten
sie nicht beschrieben werden. Sie wurden so entworfen, dass
sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen
zwischen den Spuren, gelesen werden können. Sie konnten
früher auch leichter als vergleichbar große Medien zwischen
Systemen bewegt werden.CDs besitzen Spuren, aber damit ist der Teil Daten
gemeint, der ununterbrochen gelesen wird, und nicht eine
physikalische Eigenschaft der CD. Um eine CD mit FreeBSD
zu erstellen, werden die Daten jeder Spur der CD in
Dateien vorbereitet und dann die Spuren auf die CD
geschrieben.ISO 9660DateisystemeISO 9660Das ISO 9660-Dateisystem wurde entworfen, um mit diesen
Unterschieden umzugehen. Leider hat es auch damals übliche
Grenzen für Dateisysteme implementiert. Glücklicherweise
existiert ein Erweiterungsmechanismus, der es korrekt
geschriebenen CDs erlaubt, diese Grenzen zu überschreiten
und dennoch auf Systemen zu funktionieren, die diese
Erweiterungen nicht unterstützen.sysutils/cdrtoolsDer Port sysutils/cdrtools
enthält das Programm &man.mkisofs.8;, das eine Datei
erstellt, die ein ISO 9660-Dateisystem enthält.
Das Programm hat Optionen, um verschiedene Erweiterungen
zu unterstützen, und wird unten beschrieben.CD-BrennerATAPIWelches Tool Sie zum Brennen von CDs benutzen, hängt davon
ab, ob Ihr CD-Brenner ein ATAPI-Gerät ist oder nicht.
Mit ATAPI-CD-Brennern wird
burncd benutzt, das Teil des Basissystems ist.
SCSI- und USB-CD-Brenner werden mit
cdrecord aus sysutils/cdrtools benutzt.
Zusätzlich ist es möglich, über das Modul
ATAPI/CAM SCSI-Werkzeuge wie
cdrecord
auch für ATAPI-Geräte einzusetzen.Wenn Sie eine Brennsoftware mit grafischer
Benutzeroberfläche benötigen, sollten Sie sich
X-CD-Roast oder
K3b näher ansehen. Diese
Werkzeuge können als Paket oder aus den
Ports (sysutils/xcdroast
und sysutils/k3b)
installiert werden. Mit ATAPI-Hardware benötigt
K3b das
ATAPI/CAM-Modul.mkisofsDas Programm &man.mkisofs.8; aus dem Port
sysutils/cdrtools
erstellt ein ISO 9660-Dateisystem,
das ein Abbild eines Verzeichnisbaumes ist.
Die einfachste Anwendung ist wie folgt:&prompt.root; mkisofs -o Imagedatei/path/to/treeDateisystemeISO 9660Dieses Kommando erstellt eine Imagedatei,
die ein ISO 9660-Dateisystem enthält, das eine Kopie des
Baumes unter /path/to/tree ist.
Dabei werden die Dateinamen auf Namen abgebildet, die den
Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien
mit Namen, die im ISO 9660-Dateisystem nicht gültig sind,
bleiben unberücksichtigt.DateisystemeHFSDateisystemeJolietEs einige Optionen, um diese Beschränkungen
zu überwinden. Die unter &unix; Systemen üblichen
Rock-Ridge-Erweiterungen werden durch
aktiviert, aktiviert die von Microsoft
Systemen benutzten Joliet-Erweiterungen und
dient dazu, um das von &macos; benutzte HFS zu erstellen.Für CDs, die nur auf FreeBSD-Systemen verwendet werden
sollen, kann genutzt werden, um alle
Beschränkungen für Dateinamen aufzuheben. Zusammen
mit wird ein Abbild des
Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum,
erstellt, obwohl dies den ISO 9660 Standard
verletzen kann.CD-ROMbootbare erstellenDie letzte übliche Option ist .
Sie wird benutzt, um den Ort eines Bootimages einer
El Torito bootbaren CD anzugeben. Das Argument
zu dieser Option ist der Pfad zu einem Bootimage ausgehend
von der Wurzel des Baumes, der auf die CD geschrieben werden
soll. In der Voreinstellung erzeugt &man.mkisofs.8; ein
ISO-Image im Diskettenemulations-Modus. Dabei
muss das Image genau 1200, 1440 oder 2880 KB groß
sein. Einige Bootloader, darunter der auf den FreeBSD-Disks
verwendete, kennen keinen Emulationsmodus. Daher sollten Sie
in diesen Fällen die Option
verwenden. Wenn /tmp/myboot ein bootbares
FreeBSD-System enthält, dessen Bootimage sich in
/tmp/myboot/boot/cdboot befindet, können
Sie ein Abbild eines ISO 9660-Dateisystems in
/tmp/bootable.iso wie folgt
erstellen:&prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/mybootWenn Sie md in Ihrem
Kernel konfiguriert haben, können Sie danach das Dateisystem
einhängen:&prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
&prompt.root; mount -t cd9660 /dev/md0 /mntJetzt können Sie überprüfen, dass
/mnt und /tmp/myboot
identisch sind.Sie können das Verhalten von &man.mkisofs.8;
mit einer Vielzahl von Optionen beeinflussen. Insbesondere
können Sie das ISO 9660-Dateisystem modifizieren und
Joliet- oder HFS-Dateisysteme brennen. Details dazu
entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;.burncdCD-ROMbrennenWenn Sie einen ATAPI-CD-Brenner besitzen, können
Sie burncd benutzen, um ein ISO-Image
auf CD zu brennen. burncd ist Teil
des Basissystems und unter /usr/sbin/burncd
installiert. Da es nicht viele Optionen hat, ist es leicht
zu benutzen:&prompt.root; burncd -f cddevice data imagefile.iso fixateDieses Kommando brennt eine Kopie von
imagefile.iso auf das Gerät
cddevice. In der Grundeinstellung
wird das Gerät /dev/acd0 benutzt.
&man.burncd.8; beschreibt, wie die Schreibgeschwindigkeit
gesetzt wird, die CD ausgeworfen wird und Audiodaten
geschrieben werden.cdrecordWenn Sie keinen ATAPI-CD-Brenner besitzen, benutzen Sie
cdrecord, um CDs zu brennen.
cdrecord ist nicht Bestandteil des Basissystems.
Sie müssen es entweder aus den Ports in
sysutils/cdrtools oder dem
passenden Paket installieren. Änderungen im Basissystem
können Fehler im binären Programm verursachen und
führen möglicherweise dazu, dass Sie einen
Untersetzer brennen. Sie sollten
daher den Port aktualisieren, wenn Sie Ihr System aktualisieren
bzw. wenn Sie
STABLE verfolgen,
den Port aktualisieren, wenn es eine neue Version gibt.Obwohl cdrecord viele Optionen besitzt,
ist die grundlegende Anwendung einfacher als burncd.
Ein ISO 9660-Image erstellen Sie mit:&prompt.root; cdrecord dev=deviceimagefile.isoDer Knackpunkt in der Benutzung von cdrecord
besteht darin, das richtige Argument zu zu
finden. Benutzen Sie dazu den Schalter
von cdrecord, der eine ähnliche Ausgabe
wie die folgende produziert:CD-ROMbrennen&prompt.root; cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk
0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk
0,2,0 2) *
0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk
0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM
1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner
1,7,0 107) *Für die aufgeführten Geräte in der Liste
wird das passende Argument zu gegeben.
Benutzen Sie die drei durch Kommas separierten Zahlen, die zu
Ihrem CD-Brenner angegeben sind, als Argument für
. Im Beispiel ist das CDRW-Gerät
1,5,0, so dass die passende Eingabe
dev=1,5,0 wäre.
Einfachere Wege das Argument anzugeben, sind in &man.cdrecord.1;
beschrieben. Dort sollten Sie auch nach
Informationen über Audiospuren, das Einstellen der
Geschwindigkeit und ähnlichem suchen.Kopieren von Audio-CDsUm eine Kopie einer Audio-CD zu erstellen, kopieren Sie die
Stücke der CD in einzelne Dateien und brennen diese Dateien
dann auf eine leere CD. Das genaue Verfahren hängt davon ab,
ob Sie ATAPI- oder SCSI-Laufwerke verwenden.SCSI-LaufwerkeKopieren Sie die Audiodaten mit
cdda2wav:&prompt.user; cdda2wav -v255 -D2,0 -B -OwavDie erzeugten .wav Dateien schreiben
Sie mit cdrecord auf eine leere CD:&prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wavDas Argument von gibt das verwendete
Gerät an, das Sie, wie in
beschrieben, ermitteln können.ATAPI-LaufwerkeDer ATAPI-CD-Treiber stellt die einzelnen Stücke der
CD über die Dateien
/dev/acddtnn,
zur Verfügung. d bezeichnet
die Laufwerksnummer und nn ist die
Nummer des Stücks. Die Nummer ist immer zweistellig,
das heißt es wird, wenn nötig, eine führende
Null ausgegeben. Die Datei /dev/acd0t01
ist also das erste Stück des ersten CD-Laufwerks.
/dev/acd0t02 ist das zweite Stück
und /dev/acd0t03 das dritte.Überprüfen Sie stets, ob die entsprechenden
Dateien im Verzeichnis /dev auch
angelegt werden. Sind die Einträge nicht vorhanden,
weisen Sie Ihr System an, das Medium erneut zu testen:&prompt.root; dd if=/dev/acd0 of=/dev/null count=1Unter &os; 4.X werden diese Einträge nicht
mit dem Wert Null vordefiniert. Falls die entsprechenden
Einträge unter /dev nicht
vorhanden sind, müssen Sie diese hier von
MAKEDEV anlegen lassen:&prompt.root; cd /dev
&prompt.root; sh MAKEDEV acd0t99Die einzelnen Stücke kopieren Sie mit &man.dd.1;. Sie
müssen dazu eine spezielle Blockgröße
angeben:&prompt.root; dd if=/dev/acd0t01 of=track1.cdr bs=2352
&prompt.root; dd if=/dev/acd0t02 of=track2.cdr bs=2352
...
Die kopierten Dateien können Sie dann mit
burncd brennen. Auf der Kommandozeile
müssen Sie angeben, dass Sie Audio-Daten brennen
wollen und dass das Medium fixiert werden soll:&prompt.root; burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixateKopieren von Daten-CDsSie können eine Daten-CD in eine Datei kopieren, die einem
Image entspricht, das mit &man.mkisofs.8; erstellt
wurde. Mit Hilfe dieses Images können Sie jede Daten-CD
kopieren. Das folgende Beispiel verwendet
acd0 für das CD-ROM-Gerät. Wenn
Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen
Namen ein.&prompt.root; dd if=/dev/acd0 of=file.iso bs=2048Danach haben Sie ein Image, das Sie wie oben beschrieben, auf
eine CD brennen können.Einhängen von Daten-CDsNachdem Sie eine Daten-CD gebrannt haben, wollen Sie
wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen
Sie die CD in den Dateibaum einhängen. Die Voreinstellung
für den Typ des Dateisystems von &man.mount.8; ist
UFS. Das System wird die Fehlermeldung
Incorrect super block ausgeben, wenn Sie
versuchen, die CD mit dem folgenden Kommando
einzuhängen:&prompt.root; mount /dev/cd0 /mntAuf der CD befindet sich ja kein UFS
Dateisystem, so dass der Versuch, die CD einzuhängen
fehlschlägt. Sie müssen &man.mount.8; sagen, dass
es ein Dateisystem vom Typ ISO9660 verwenden
soll. Dies erreichen Sie durch die Angabe von auf der Kommandozeile. Wenn Sie also die CD-ROM
/dev/cd0 in /mnt
einhängen wollen, führen Sie folgenden Befehl aus:&prompt.root; mount -t cd9660 /dev/cd0c /mntAbhängig vom verwendeten CD-ROM kann der Gerätename
von dem im Beispiel (/dev/cd0)
abweichen. Die Angabe von führt
&man.mount.cd9660.8; aus, so dass das Beispiel verkürzt
werden kann:&prompt.root; mount_cd9660 /dev/cd0 /mntAuf diese Weise können Sie
Daten-CDs von jedem Hersteller verwenden. Es kann allerdings zu
Problemen mit CDs kommen, die verschiedene ISO9660-Erweiterungen
benutzen. So speichern Joliet-CDs alle Dateinamen unter Verwendung
von zwei Byte langen Unicode-Zeichen. Zwar unterstützt der
&os;-Kernel derzeit noch kein Unicode, der CD9660-Treiber erlaubt
es aber, zur Laufzeit eine Konvertierungstabelle zu laden. Tauchen
bei Ihnen also statt bestimmter Zeichen nur Fragezeichen auf, so
müssen Sie über die Option den
benötigten Zeichensatz angeben. Weitere Informationen zu
diesem Problem finden Sie in der Manualpage
&man.mount.cd9660.8;.Damit der Kernel diese Zeichenkonvertierung (festgelegt
durch die Option ) erkennt, müssen Sie
das Kernelmodul cd9660_iconv.ko laden.
Dazu fügen Sie entweder folgende Zeile in die Datei
loader.conf ein:cd9660_iconv_load="YES"Danach müssen Sie allerdings Ihr System neu starten.
Alternativ können Sie das Kernelmodul auch direkt
über &man.kldload.8; laden.Manchmal werden Sie die Meldung Device
not configured erhalten, wenn Sie versuchen, eine
CD-ROM einzuhängen. Für gewöhnlich liegt das daran,
dass das Laufwerk meint es sei keine CD eingelegt, oder
dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann
einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD
eingelegt wurde. Seien Sie also geduldig.Manchmal wird ein SCSI-CD-ROM nicht erkannt, weil es keine Zeit
hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie
ein SCSI-CD-ROM besitzen, sollten Sie die folgende Zeile in Ihre
Kernelkonfiguration aufnehmen und einen neuen Kernel bauen:options SCSI_DELAY=15000Die Zeile bewirkt, dass nach dem Zurücksetzen des
SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem
CD-ROM-Laufwerk genügend Zeit zu geben, darauf zu
antworten.Brennen von rohen CDsSie können eine Datei auch direkt auf eine CD brennen,
ohne vorher auf ihr ein ISO 9660-Dateisystem einzurichten.
Einige Leute nutzen dies, um Datensicherungen durchzuführen.
Diese Vorgehensweise hat den Vorteil, dass Sie schneller als
das Brennen einer normalen CD ist.&prompt.root; burncd -f /dev/acd1 -s 12 data archive.tar.gz fixateWenn Sie die Daten von einer solchen CD wieder
zurückbekommen wollen, müssen Sie sie direkt von dem
rohen Gerät lesen:&prompt.root; tar xzvf /dev/acd1Eine auf diese Weise gefertigte CD können Sie nicht in das
Dateisystem einhängen. Sie können Sie auch nicht auf
einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in
das Dateisystem einhängen oder mit anderen Betriebssystemen
austauschen wollen, müssen Sie &man.mkisofs.8;
wie oben beschrieben benutzen.MarcFonvieilleBeigetragen von CD-BrennerATAPI/CAM TreiberDer ATAPI/CAM TreiberMit diesem Treiber kann auf ATAPI-Geräte (wie
CD-ROM-, CD-RW- oder DVD-Laufwerke) mithilfe des
SCSI-Subsystems zugegriffen werden. Damit können
Sie SCSI-Werkzeuge, wie sysutils/cdrdao oder &man.cdrecord.1;,
zusammen mit einem ATAPI-Gerät benutzen.Wenn Sie den Treiber benutzen wollen, fügen Sie
die folgende Zeile in
/boot/loader.conf ein:atapicam_load="YES"Danach müssen Sie Ihr System neu starten, um
den Treiber zu aktivieren.Alternativ können Sie die Unterstützung
für &man.atapicam.4; auch in Ihren Kernel kompilieren.
Dazu fügen Sie die folgende Zeile in Ihre
Kernelkonfigurationsdatei ein:device atapicamDie folgenden Zeilen werden ebenfalls benötigt,
sollten aber schon Teil der Kernelkonfiguration sein:device ata
device scbus
device cd
device passÜbersetzen und installieren Sie den neuen
Kernel. Der CD-Brenner sollte nun beim Neustart des Systems
erkannt werden:acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closedÜber den Gerätenamen /dev/cd0
können Sie nun auf das Laufwerk zugreifen. Wenn Sie
beispielsweise eine CD-ROM in /mnt
einhängen wollen, benutzen Sie das nachstehende
Kommando:&prompt.root; mount -t cd9660 /dev/cd0 /mntDie SCSI-Adresse des Brenners können Sie als
root wie folgt ermitteln:&prompt.root; camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)Die SCSI-Adresse 1,0,0 können
Sie mit den SCSI-Werkzeugen, zum Beispiel &man.cdrecord.1;,
verwenden.Weitere Informationen über das ATAPI/CAM- und
das SCSI-System erhalten Sie in den Hilfeseiten
&man.atapicam.4; und &man.cam.4;.MarcFonvieilleBeigetragen von AndyPolyakovMit Beiträgen von DVDs benutzenDVDbrennenEinführungNach der CD ist die DVD die nächste Generation
optischer Speichermedien. Auf einer DVD können
mehr Daten als auf einer CD gespeichert werden.
DVDs werden heutzutage als Standardmedium für
Videos verwendet.Für beschreibbare DVDs existieren fünf
Medienformate:DVD-R: Dies war das erste verfügbare Format.
Das Format wurde vom DVD-Forum
festgelegt. Die Medien sind nur einmal beschreibbar.DVD-RW: Dies ist die wiederbeschreibbare Version
des DVD-R Standards. Eine DVD-RW kann ungefähr
1000 Mal beschrieben werden.DVD-RAM: Dies ist ebenfalls ein wiederbeschreibbares
Format, das vom DVD-Forum unterstützt wird.
Eine DVD-RAM verhält sich wie eine Wechselplatte.
Allerdings sind die Medien nicht kompatibel zu den
meisten DVD-ROM-Laufwerken und DVD-Video-Spielern.
DVD-RAM wird nur von wenigen Brennern unterstützt.
Wollen Sie DVD-RAM einsetzen, sollten Sie
lesen.DVD+RW: Ist ein wiederbeschreibbares Format, das
von der DVD+RW
Alliance festgelegt wurde. Eine DVD+RW
kann ungefähr 1000 Mal beschrieben werden.DVD+R: Dieses Format ist die nur einmal beschreibbare
Variante des DVD+RW Formats.Auf einer einfach beschichteten DVD können
4.700.000.000 Bytes gespeichert werden. Das
sind 4,38 GB oder 4485 MB (1 Kilobyte
sind 1024 Bytes).Die physischen Medien sind unabhängig von
der Anwendung. Ein DVD-Video ist eine spezielle
Anordnung von Dateien, die auf irgendein Medium (zum Beispiel
DVD-R, DVD+R oder DVD-RW) geschrieben werden kann.
Bevor Sie ein Medium auswählen, müssen
Sie sicherstellen, dass der Brenner und der DVD-Spieler
(ein Einzelgerät oder ein DVD-ROM-Laufwerk
eines Rechners) mit dem Medium umgehen können.KonfigurationDas Programm &man.growisofs.1; beschreibt DVDs.
Das Kommando ist Teil der Anwendung
dvd+rw-tools
(sysutils/dvd+rw-tools).
dvd+rw-tools kann mit allen
DVD-Medien umgehen.Um die Geräte anzusprechen, brauchen die
Werkzeuge das SCSI-Subsystem. Daher muss der
Kernel den ATAPI/CAM-Treiber
zur Verfügung stellen. Der Treiber ist mit
USB-Brennern nutzlos; die Konfiguration von
USB-Geräten behandelt .Für ATAPI-Geräte müssen Sie ebenfalls
DMA-Zugriffe aktivieren. Fügen Sie dazu die nachstehende
Zeile in die Datei /boot/loader.conf
ein:hw.ata.atapi_dma="1"Bevor Sie dvd+rw-tools
mit Ihrem DVD-Brenner benutzen, lesen Sie bitte die
Hardware-Informationen auf der Seite dvd+rw-tools'
hardware compatibility notes.Wenn Sie eine grafische Oberfläche bevorzugen,
schauen Sie sich bitte den Port
sysutils/k3b
an. Der Port bietet eine leicht zu bedienende
Schnittstelle zu &man.growisofs.1; und vielen
anderen Werkzeugen.Daten-DVDs brennen&man.growisofs.1; erstellt mit dem Programm
mkisofs das Dateisystem
und brennt anschließend die DVD. Vor dem Brennen
brauchen Sie daher kein Abbild der Daten zu erstellen.Wenn Sie von den Daten im Verzeichnis
/path/to/data eine
DVD+R oder eine DVD-R brennen wollen, benutzen Sie
das nachstehende Kommando:&prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/dataDie Optionen werden an
&man.mkisofs.8; durchgereicht und dienen zum Erstellen
des Dateisystems (hier: ein ISO-9660-Dateisystem mit
Joliet- und Rock-Ridge-Erweiterungen). Weiteres
entnehmen Sie bitte der Hilfeseite &man.mkisofs.8;.Die Option wird für die erste
Aufnahme einer Session benötigt, egal ob Sie eine
Multi-Session-DVD brennen oder nicht. Für
/dev/cd0 müssen Sie
den Gerätenamen Ihres Brenners einsetzen. Die
Option schließt das
Medium, weitere Daten können danach nicht mehr
angehängt werden. Durch die Angabe dieser Option
kann das Medium von mehr DVD-ROM-Laufwerken gelesen
werden.Sie können auch ein vorher erstelltes Abbild
der Daten brennen. Die nachstehende Kommandozeile
brennt das Abbild in der Datei
imagefile.iso:&prompt.root; growisofs -dvd-compat -Z /dev/cd0=imagefile.isoDie Schreibgeschwindigkeit hängt von den
verwendeten Medium sowie dem verwendeten Gerät ab
und sollte automatisch gesetzt werden. Falls Sie die
Schreibgeschwindigkeit vorgeben möchten, verwenden
Sie den Parameter . Weiteres
erfahren Sie in der Hilfeseite &man.growisofs.1;.DVDDVD-VideoDVD-Videos brennenEin DVD-Video ist eine spezielle Anordnung von Dateien, die
auf den ISO-9660 und den micro-UDF (M-UDF) Spezifikationen
beruht. Ein DVD-Video ist auf eine bestimmte Datei-Hierarchie
angewiesen. Daher müssen Sie DVDs mit speziellen
Programmen wie multimedia/dvdauthor
erstellen.Wenn Sie schon ein Abbild des Dateisystems eines
DVD-Videos haben, brennen Sie das Abbild wie jedes
andere auch. Eine passende Kommandozeile finden Sie
im vorigen Abschnitt. Wenn Sie die DVD im Verzeichnis
/path/to/video
zusammengestellt haben, erstellen Sie das DVD-Video
mit dem nachstehenden Kommando:&prompt.root; growisofs -Z /dev/cd0 -dvd-video /path/to/videoDie Option wird an
&man.mkisofs.8; weitergereicht. Dadurch erstellt
&man.mkisofs.8; die Datei-Hierarchie für ein
DVD-Video. Weiterhin bewirkt die Angabe von
, dass &man.growisofs.1;
mit der Option aufgerufen wird.DVDDVD+RWDVD+RW-Medien benutzenIm Gegensatz zu CD-RW-Medien müssen Sie DVD+RW-Medien
erst formatieren, bevor Sie die Medien benutzen.
Sie sollten &man.growisofs.1; einzetzen, da das Programm
Medien automatisch formatiert, wenn es erforderlich
ist. Sie können eine DVD+RW aber auch mit dem
Kommando dvd+rw-format formatieren:&prompt.root; dvd+rw-format /dev/cd0Sie müssen das Kommando nur einmal mit
neuen Medien laufen lassen. Anschließend
können Sie DVD+RWs, wie in den vorigen
Abschnitten beschrieben, brennen.Wenn Sie auf einer DVD+RW ein neues Dateisystem
erstellen wollen, brauchen Sie die DVD+RW vorher
nicht zu löschen. Überschreiben Sie
einfach das vorige Dateisystem indem Sie eine neue
Session anlegen:&prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/newdataMit dem DVD+RW-Format ist es leicht, Daten an eine
vorherige Aufnahme anzuhängen. Dazu wird eine neue
Session mit der schon bestehenden zusammengeführt.
Es wird keine Multi-Session geschrieben, sondern
&man.growisofs.1; vergrößert
das ISO-9660-Dateisystem auf dem Medium.Das folgende Kommando fügt weitere Daten zu
einer vorher erstellten DVD+RW hinzu:&prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdataWenn Sie eine DVD+RW erweitern, verwenden Sie
dieselben &man.mkisofs.8;-Optionen wie beim Erstellen
der DVD+RW.Um die Kompatibilität mit DVD-ROM-Laufwerken
zu gewährleisten, wollen Sie vielleicht die
Option einsetzen.
Zu einem DVD+RW-Medium können Sie mit dieser
Option auch weiterhin Daten hinzufügen.Wenn Sie das Medium aus irgendwelchen Gründen
doch löschen müssen, verwenden Sie den
nachstehenden Befehl:&prompt.root; growisofs -Z /dev/cd0=/dev/zeroDVDDVD-RWDVD-RW-Medien benutzenEine DVD-RW kann mit zwei Methoden beschrieben werden:
Sequential-Recording oder
Restricted-Overwrite. Voreingestellt
ist Sequential-Recording.Eine neue DVD-RW kann direkt beschrieben werden; sie
muss nicht vorher formatiert werden. Allerdings muss
eine DVD-RW, die mit Sequential-Recording aufgenommen
wurde, zuerst gelöscht werden, bevor eine neue Session
aufgenommen werden kann.Der folgende Befehl löscht eine DVD-RW im
Sequential-Recording-Modus:&prompt.root; dvd+rw-format -blank=full /dev/cd0Das vollständige Löschen
() dauert mit einem
1x Medium ungefähr eine Stunde. Wenn die
DVD-RW im Disk-At-Once-Modus (DAO) aufgenommen wurde,
kann Sie mit der Option schneller
gelöscht werden. Um eine DVD-RW im DAO-Modus zu
brennen, benutzen Sie das folgende Kommando:&prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.isoDie Option
sollte nicht erforderlich sein, da &man.growisofs.1;
den DAO-Modus erkennt.Der Restricted-Overwrite-Modus sollte mit jeder
DVD-RW verwendet werden, da er flexibler als der
voreingestellte Sequential-Recording-Modus ist.Um Daten auf eine DVD-RW im Sequential-Recording-Modus
zu schreiben, benutzen Sie dasselbe Kommando wie
für die anderen DVD-Formate:&prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/dataWenn Sie weitere Daten zu einer Aufnahme hinzufügen
wollen, benutzen Sie die Option von
&man.growisofs.1;. Werden die Daten im Sequential-Recording-Modus
hinzugefügt, wird eine neue Session erstellt.
Das Ergebnis ist ein Multi-Session-Medium.Eine DVD-RW im Restricted-Overwrite-Modus muss nicht
gelöscht werden, um eine neue Session aufzunehmen.
Sie können das Medium einfach mit der Option
überschreiben, ähnlich wie
bei DVD+RW. Mit der Option können
Sie das ISO-9660-Dateisystem, wie mit einer DVD+RW,
vergrößern. Die DVD enthält danach eine
Session.Benutzen sie das nachstehende Kommando, um den
Restricted-Overwrite-Modus einzustellen:&prompt.root; dvd+rw-format /dev/cd0Das folgende Kommando stellt den Modus wieder auf
Sequential-Recording zurück:&prompt.root; dvd+rw-format -blank=full /dev/cd0Multi-SessionNur wenige DVD-ROM-Laufwerke können
Multi-Session-DVDs lesen. Meist lesen die Spieler nur
die erste Session. Mehrere Sessions werden von
DVD+R, DVD-R und DVD-RW im Sequential-Recording-Modus
unterstützt. Im Modus Restricted-Overwrite gibt
es nur eine Session.Wenn das Medium noch nicht geschlossen ist, erstellt
das nachstehende Kommando eine neue Session auf einer
DVD+R, DVD-R oder DVD-RW im Sequential-Recording-Modus:&prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdataWird diese Kommandozeile mit DVD+RW- oder DVD-RW-Medien
im Restricted-Overwrite-Modus benutzt, werden die
neuen Daten mit den Daten der bestehenden Session
zusammengeführt. Das Medium enthält danach
eine Session. Auf diesem Weg werden neue Daten zu
einer bestehenden Session hinzugefügt.Für den Anfang und das Ende einer Session
wird auf dem Medium zusätzlicher Platz verbraucht.
Um den Speicherplatz auf dem Medium optimal auszunutzen,
sollten Sie daher Sessions mit vielen Daten hinzufügen.
Auf ein DVD+R-Medium passen maximal 154 Sessions,
2000 Sessions auf ein DVD-R-Medium und
127 Sessions auf eine DVD+R Double Layer.WeiterführendesDas Kommando dvd+rw-mediainfo
/dev/cd0 zeigt
Informationen über eine im Laufwerk liegende
DVD an.Weiteres zu den dvd+rw-tools
lesen Sie bitte in der Hilfeseite &man.growisofs.1;,
auf der dvd+rw-tools
Web-Seite oder in den Archiven der cdwrite-Mailingliste.DVD-RAMDVDDVD-RAMKonfigurationDVD-RAM-fähige Brenner werden sowohl mit SCSI-
als auch mit ATAPI-Schnittstelle angeboten. Verwenden Sie
ein ATAPI-Gerät, müssen Sie den DMA-Modus
aktivieren. Dazu fügen Sie die folgende Zeile in
/boot/loader.conf ein:hw.ata.atapi_dma="1"Das Medium vorbereitenWie weiter oben in diesem Kapitel bereits erwähnt,
kann man eine DVD-RAM mit einer Wechselplatte vergleichen.
Wie diese muss auch eine DVD-RAM vor dem ersten Einsatz
vorbereitet werden. In unserem Beispiel
wird das gesamte Medium mit dem Standard-UFS2-Dateisystem
formatiert.Dazu geben Sie als root bei
eingelegter DVD-RAM die folgenden Befehle ein:&prompt.root; dd if=/dev/zero of=/dev/acd0 bs=2k count=1
&prompt.root; bsdlabel -Bw acd0
&prompt.root; newfs /dev/acd0Denken Sie dabei daran, dass Sie gegebenenfalls die
Gerätedatei (hier acd0) an
Ihre Konfiguration anpassen müssen.Das Medium einsetzenNachdem Sie das Medium vorbereitet haben, können
Sie das DVD-RAM-Medium in Ihren Verzeichnisbaum
einhängen:&prompt.root; mount /dev/acd0/mntDanach können Sie schreibend und lesend auf das
Medium zugreifen.JulioMerinoOriginal von MartinKarlssonUmgeschrieben von Disketten benutzenDisketten sind nützlich, wenn kein anderes
bewegliches Speichermedium vorhanden ist oder wenn
nur kleine Datenmengen transferiert werden sollen.Dieser Abschnitt beschreibt die Handhabung von Disketten
unter FreeBSD. Hauptsächlich geht es um die
Formatierung und Benutzung von 3,5 Zoll Disketten,
doch lassen sich die Konzepte leicht auf Disketten anderer
Formate übertragen.Disketten formatierenDie GerätedateienWie auf jedes andere Gerät auch, greifen Sie
auf Disketten über Einträge im Verzeichnis
/dev zu. Verwenden Sie dazu die
Einträge
/dev/fdN.FormatierungBevor eine Diskette benutzt werden kann, muss Sie
(low-level) formatiert werden, was normalerweise der
Hersteller schon gemacht hat. Sie können die
Diskette allerdings noch einmal formatieren, um das Medium zu
überprüfen. Es ist möglich, die
Kapazität der Diskette zu verändern,
allerdings sind die meisten Disketten auf 1440 kB
ausgelegt.Mit &man.fdformat.1; formatieren Sie eine
Diskette. Das Kommando erwartet die Angabe eines
Gerätenamens.Achten Sie bei der Formatierung
auf Fehlermeldungen, die schlechte Speichermedien
anzeigen.Disketten formatierenDie Disketten werden mithilfe der Gerätedatei
/dev/fdN
formatiert. Legen Sie eine 3,5 Zoll Diskette in
Ihr Laufwerk ein und führen das folgende Kommando
aus:&prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0Das DisklabelNach dem Formatieren muss auf der Diskette ein Disklabel
erstellt werden. Das Disklabel wird später zerstört, ist
aber notwendig, um die Größe und Geometrie der Diskette
zu erkennen.Das Disklabel gilt für die ganze Diskette und enthält
alle Informationen über die Geometrie der Diskette. Eine
Liste der möglichen Geometrien finden Sie in
/etc/disktab.Erstellen Sie nun das Label mit &man.bsdlabel.8;:&prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440Das DateisystemAuf der Diskette muss nun ein Dateisystem erstellt werden
(high-level Formatierung), damit FreeBSD von der Diskette lesen und
auf sie schreiben kann. Das Disklabel wird durch das Anlegen eines
Dateisystems zerstört. Falls Sie die Diskette später erneut
formatieren wollen, müssen Sie dann auch ein neues Disklabel
anlegen.Sie können entweder UFS oder FAT als Dateisystem
verwenden. Für Floppies ist FAT das beste Dateisystem.Das folgende Kommando legt ein Dateisystem auf der Diskette
an:&prompt.root; /sbin/newfs_msdos /dev/fd0Die Diskette kann nun benutzt werden.Verwenden der DisketteZum Einhägen der Diskette in das Dateisystem
verwenden Sie den Befehl &man.mount.msdosfs.8;. Sie
können auch den
Port emulators/mtools
verwenden, um mit der Diskette zu arbeiten.Bandmedien benutzenBandmedienDie wichtigsten Bandmedien sind 4mm, 8mm, QIC,
Mini-Cartridge und DLT.4mm (DDS: Digital Data Storage)BandmedienDDS (4mm) BänderBandmedienQIC BänderDie 4mm-Bänder ersetzen mehr und mehr das QIC-Format als
Backupmedium der Wahl für Workstations. Dieser Trend nahm stark
zu, als Conner die Firma Archive, einen führenden Hersteller von
QIC-Laufwerken, aufkaufte und die Produktion von QIC-Laufwerken
stoppte. 4mm-Laufwerke sind klein und ruhig, haben aber nicht den
gleichen Ruf der Zuverlässigkeit, den die 8mm-Laufwerke
genießen. Die 4mm-Kassetten sind preiswerter und mit den
Maßen 76,2 x 50,8 x 12,7 mm
(3 x 2 x 0,5 Inch) kleiner als die
8mm-Kassetten. Sowohl die 4mm- als auch die 8mm-Magnetköpfe
haben eine relativ kurze Lebensdauer, weil beide die gleiche
Helical-Scan-Technik benutzen.Der Datendurchsatz dieser Laufwerke beginnt bei etwa
150 kByte/s, Spitzenwerte liegen bei etwa 500 kByte/s.
Die Datenkapazität liegt zwischen 1,3 GB und 2 GB.
Die meisten Geräte haben eine Hardwarekompression eingebaut,
die die Kapazität ungefähr verdoppelt. Es gibt
Multi-Drive-Einheiten für Bandbibliotheken mit bis zu 6
Laufwerken in einem Gehäuse und automatischem Bandwechsel. Die
Kapazität einer solchen Bibliothek liegt bei 240 GB.Der Standard DDS-3 unterstützt nun Bandkapazitäten bis
zu 12 GB (oder komprimiert 24 GB).4mm-Laufwerke, ebenso wie 8mm-Laufwerke, verwenden Helical-Scan.
Alle Vor- und Nachteile von Helical-Scan gelten sowohl für 4mm-
als auch für 8mm-Laufwerke.Bänder sollten nach 2.000 Banddurchläufen oder 100
vollen Backups ersetzt werden.8mm (Exabyte)BandmedienExabyte (8mm) Bänder8mm-Bänder sind die verbreitetsten SCSI-Bandlaufwerke; sie
sind das geeignetste Bandformat zum Austausch von Bändern.
Fast an jedem Standort gibt es ein 8mm-Bandlaufwerk mit 2 GB.
8mm-Bänder sind zuverlässig, gut zu handhaben und
arbeiten leise. Bandkassetten sind preiswert und klein mit
122 x 84 x 15 mm
(4,8 x 3,3 x 0,6 Inch). Ein Nachteil
der 8mm-Technik ist die relativ kurze Lebensdauer des
Schreib-/Lesekopfs und der Bänder auf Grund der hohen
Relativgeschwindigkeit des Bandes über die Köpfe
hinweg.Der Datendurchsatz liegt ungefähr zwischen
250 kByte/s und 500 kByte/s. Die Datenkapazität
beginnt bei 300 MB und erreicht bis zu 7 GB bei den
Spitzengeräten. Die meisten Geräte
haben eine Hardwarekompression eingebaut, die die Kapazität
ungefähr verdoppelt. Diese Laufwerke sind erhältlich in
Form von Einzelgeräten oder als Multi-Drive-Bandbibliotheken mit
6 Laufwerken und 120 Bändern in einem Gehäuse. Die
Bänder werden von der Geräteeinheit automatisch gewechselt.
Die Kapazität einer solchen Bibliothek liegt bei 840 GB und
mehr.Das Exabyte-Modell Mammoth unterstützt
12 GB auf einem Band (24 GB mit Kompression) und kostet
etwa doppelt so viel wie ein konventionelles Bandlaufwerk.Die Daten werden mittels Helical-Scan auf das Band
aufgezeichnet, die Köpfe sind leicht schräg zum Medium
angebracht (mit einem Winkel von etwa 6 Grad). Das Band wickelt
sich 270 Grad um die Spule, die die Köpfe trägt.
Die Spule dreht sich, während das Band darüberläuft.
Das Resultat ist eine hohe Datendichte und eng gepackte Spuren,
die von einem Rand des Bands zum gegenüberliegenden quer
über das Band abgewinkelt verlaufen.QICBandmedienQIC-150QIC-150-Bänder und -Laufwerke sind wohl der am weitesten
verbreitete Bandtyp überhaupt. QIC-Bandlaufwerke sind die
preiswertesten seriösen Backupgeräte,
die angeboten werden. Der Nachteil dabei ist der hohe Preis
der Bänder. QIC-Bänder sind im Vergleich zu 8mm- oder
4mm-Bändern bis zu fünf Mal teurer, wenn man den Preis
auf 1 GB Datenkapazität umrechnet. Aber wenn Ihr Bedarf
mit einem halben Dutzend Bänder abgedeckt werden kann,
mag QIC die richtige Wahl sein.QIC ist der gängigste
Bandlaufwerkstyp. Jeder Standort hat ein QIC-Laufwerk der einen oder
anderen Dichte. Aber gerade das ist der Haken an der Sache, QIC
bietet eine große Anzahl verschiedener Datendichten auf
physikalisch ähnlichen (manchmal gleichen) Bändern.
QIC-Laufwerke sind nicht leise. Diese Laufwerke suchen lautstark die
richtige Bandstelle, bevor sie mit der Datenaufzeichnung beginnen.
Sie sind während des Lesens, Schreibens und Suchens deutlich
hörbar.Die Abmessungen der QIC-Kassetten betragen
152 x 102 x 17 mm
(6 x 4 x 0,7 Inch).Der Datendurchsatz liegt ungefähr zwischen
150 kByte/s und 500 kByte/s. Die Datenkapazität
reicht von 40 MB bis zu 15 GB.
Hardwarekompression ist in vielen der neueren QIC-Laufwerke eingebaut.
QIC-Laufwerke werden heute seltener eingesetzt; sie werden von den
DAT-Laufwerken abgelöst.Die Daten werden auf dem Band in Spuren aufgezeichnet. Die
Spuren verlaufen entlang der Längsachse des Bandmediums von einem
Ende zum anderen. Die Anzahl der Spuren, und damit auch die Breite
einer Spur, variiert mit der Kapazität des Laufwerks. Die
meisten, wenn nicht alle neueren Laufwerke sind
rückwärtskompatibel, zumindest zum Lesen (aber oft auch zum
Schreiben). QIC hat einen guten Ruf bezüglich der
Datensicherheit (die Mechanik ist einfacher und robuster als diejenige
der Helical-Scan-Laufwerke).Bänder sollten nach 5,000 Backups ersetzt werden.DLTBandmedienDLTDLT hat die schnellste Datentransferrate von allen hier
aufgelisteten Gerätetypen. Das 1/2-Inch-Band (12,7 mm)
befindet sich in einer Spulkassette mit den Abmessungen
101,6 x 101,6 x 25,4 mm
(4 x 4 x 1 Inch). Die eine Seite
der Kassette hat eine bewegliche Abdeckung. Der Laufwerksmechanismus
öffnet diese Abdeckung und zieht die Bandführung heraus.
Die Bandführung trägt ein ovales Loch, die das Laufwerk
zum Einhängen des Bandes benutzt. Die
Aufwickelspule befindet sich im Innern des Bandlaufwerks. Bei allen
anderen hier besprochenen Bandkassetten (9-Spur-Bänder
sind die einzige Ausnahme) befinden sich sowohl die Auf- als auch
die Abwickelspule im Inneren der Bandkassette.Der Datendurchsatz liegt bei etwa 1,5 MBytes/s, der dreifache
Durchsatz der 4mm-, 8mm- oder QIC-Bandlaufwerke. Die
Datenkapazität reicht von 10 GB bis 20 GB für
Einfachlaufwerke. Auch Mehrfachbandgeräte sind erhältlich,
sowohl als Bandwechsler wie auch als Multi-Drive-Bandbibliotheken, die
Platz für 5 bis 900 Bänder verteilt auf 1 bis 20 Laufwerke
enthalten, mit einer Speicherkapazität von 50 GB bis
9 TB.Mit Kompression unterstützt das Format DLT Type IV bis zu
70 GB Kapazität.Die Daten werden auf dem Band in Spuren aufgezeichnet, die
parallel zur Bewegungsrichtung verlaufen (gerade so wie bei den
QIC-Bändern). Zwei Spuren werden dabei gleichzeitig beschrieben.
Die Lebenszeit der Lese- und Schreibköpfe sind relativ lang; denn
sobald das Band anhält, gibt es keine Relativbewegung mehr
zwischen den Köpfen und dem Band.AITBandmedienAITAIT ist ein neues Format von Sony, das (mit Kompression) bis zu
50 GB pro Band speichern kann. Die Bänder haben einen
Speicherchip, der einen Index mit dem Inhalt des Bandes anlegt.
Dieser Index kann vom Bandlaufwerk zur schnellen Bestimmung der Lage
von Dateien auf dem Band benutzt werden, während andere
Bänder einige Minuten zur Lokalisierung benötigen.Entsprechende Software wie etwa
SAMS:Alexandria können 40
oder mehr AIT-Bandbibliotheken verarbeiten, indem sie
direkt mit dem Speicherchip des Bandes kommunizieren, wenn der
Bandinhalt am Bildschirm dargestellt werden soll oder bestimmt werden
soll, welche Dateien auf welchem Band gespeichert sind, oder um das
richtige Band zu lokalisieren, zu laden und Daten vom Band
zurückzuspielen. Bibliotheken dieser Art liegen in der
Preiskategorie von $20,000, womit sie etwas aus dem Hobbymarkt
herausfallen.Die erste Benutzung eines neuen BandsDer Versuch ein neues, vollkommen leeres Band ohne weiteres zu
lesen oder zu beschreiben wird schief gehen. Auf der Konsole werden
dann Meldungen ähnlich wie folgt ausgegeben:sa0(ncr1:4:0): NOT READY asc:4,1
0(ncr1:4:0): Logical unit is in process of becoming readyDas Band enthält nämlich keinen Identifier-Block
(Blocknummer 0). Alle QIC-Bandlaufwerke seit der Einführung des
QIC-525-Standards schreiben einen Identifier-Block auf das Band. Es
gibt zwei Lösungen:mt fsf 1 veranlasst das Bandlaufwerk
einen Identifier-Block auf das Band zu schreiben.Das Band durch Drücken des Bandauswurfknopfs an der
Vorderseite des Bandgeräts auswerfen.Danach das Band wieder einlegen und mit
dump Daten auf das Band
übertragen.Das Kommando dump gibt die Meldung
DUMP: End of tape detected zurück
und die Konsole zeigt:
HARDWARE FAILURE info:280 asc:80,96.Das Band zurückspulen mit dem Kommando:
mt rewind.Nachfolgende Bandoperationen werden dann erfolgreich
ausgeführt.Was ist mit Backups auf Disketten?Kann ich Disketten zum Backup meiner Daten verwenden?Backup DiskettenDiskettenDisketten sind kein wirklich geeignetes Medium für Backups
aus folgenden Gründen:Disketten sind unzuverlässig, besonders
langfristig.Speichern und Wiederherstellen ist sehr langsam.Sie haben eine sehr eingeschränkte Kapazität (Die
Zeiten sind längst vorbei, wo eine ganze Festplatte auf ein
Dutzend Floppies oder so gespeichert werden konnte).Wenn jedoch keine andere Möglichkeit zum Datenbackup
vorhanden ist, dann sind Disketten immer noch besser als gar kein
Backup.Wenn man gezwungen ist Disketten zu verwenden, dann sollte man
auf eine gute Qualität achten. Floppies, die schon einige Jahre
im Büro herumgelegen haben, sind eine schlechte Wahl. Ideal sind
neue Disketten von einem renommierten Hersteller.Wie mache ich ein Backup auf Disketten?Die beste Art eines Diskettenbackups ist der Befehl
&man.tar.1; mit der Mehrfachband-Option ,
die es ermöglicht ein Backup über mehrere
Floppies zu verteilen.Ein Backup aller Dateien im aktuellen Verzeichnis
einschließlich aller Unterverzeichnisse wird durch den folgenden
Befehl veranlasst (als root):&prompt.root; tar Mcvf /dev/fd0 *Wenn die erste Floppy voll ist, meldet sich &man.tar.1;
und verlangt einen Diskettenwechsel (weil &man.tar.1;
unabhängig vom
Medium arbeitet, wird das nächste Band (Volume) verlangt, was in
diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt:Prepare volume #2 for /dev/fd0 and hit return:Dies wird mit steigender Volumenzahl wiederholt, bis alle
angegebenen Dateien archiviert sind.Können Diskettenbackups komprimiert werden?targzipKompressionLeider erlaubt es &man.tar.1; nicht, die Option
für Multi-Volume-Archive zu verwenden.
Man kann natürlich alle Dateien mit &man.gzip.1;
komprimieren, sie mit &man.tar.1; auf die Floppies
aufspielen, und dann die Dateien wieder &man.gunzip.1;
entkomprimieren!Wie werden Diskettenbackups wieder hergestellt?Zur Wiederherstellung des gesamten Archivs verwendet man:&prompt.root; tar Mxvf /dev/fd0Eine Methode um nur bestimmte Dateien wieder her zu stellen ist
mit der ersten Diskette den folgenden Befehl auszuführen:&prompt.root; tar Mxvf /dev/fd0 filename&man.tar.1; wird dann die folgenden Disketten anfordern,
bis die benötigte Datei gefunden ist.Wenn man die Diskette kennt, auf der sich die Datei befindet,
kann man alternativ diese Diskette auch direkt einlegen und den
gleichen Befehl wie oben verwenden. Man beachte, dass, falls die
erste Datei eine Fortsetzung einer Datei von einer
der vorigen Disketten ist, &man.tar.1; die Warnung ausgibt,
dass diese Datei nicht wiederhergestellt werden kann, selbst dann,
wenn dies gar nicht verlangt wurde!LowellGilbertBeigetragen von Backup-StrategienWenn Sie eine eigene Backup-Strategie planen, müssen Sie
darauf achten, dass jedes der folgenden Probleme von Ihrer
Strategie abgedeckt wird:Plattendefekte.Versehentliches Löschen von Dateien.Eine nicht vorhersehbare Korrumpierung von Dateien.Die vollständige Zerstörung Ihres Systems, etwa
durch ein Feuer. Dazu gehört auch die Zerstörung
von Backups, die am gleichen Ort aufbewahrt werden.Es ist nicht nur möglich, dass ein System
für jedes dieser Probleme eine eigene (oft völlig
unterschiedliche) Strategie benötigt. Es ist vielmehr
unwahrscheinlich (sieht man von Systemen ab, die keine
wichtigen Daten enthalten), dass eine Technik alle
Problembereiche abdecken kann.Häufig verwendeten Techniken sind unter anderen:Die Archivierung des kompletten Systems auf externen
Datenträgern, die an einem gesonderten Ort aufbewahrt
werden. Dieser Ansatz schützt zwar vor allen oben
angeführten Problemen, ist aber zeitaufwändig.
Auch eine Wiederherstellung des Systems ist nicht ohne
weiteres möglich. Zwar können Sie Kopien Ihrer
Backups auch vor Ort und/oder auf online zugängigen
Systemen aufbewahren, was aber nichts daran ändert,
dass eine Wiederherstellung, insbesondere für nicht
privilegierte Benutzer, nach wie vor nicht ohne weiteres
möglich ist.Dateisystem-Snapshots. Diese Technik hilft zwar nur
gegen das versehentliche Löschen von Dateien, in einem
solchen Fall ist sie aber äußerst
hilfreich. Vorteile dieser Technik sind außerdem die
leichte und schnelle Implementierung und Handhabung.Das Erstellen von Kopien ganzer Dateisysteme und/oder
Platten (etwa durch einen periodischen &man.rsync.1;-Transfer des
kompletten Systems). Diese Technik ist insbesondere in
Netzwerken mit besonderen Anforderungen nützlich. Der
Schutz vor Plattendefekten ist allerdings schlechter als beim
Einsatz von RAID. Die
Fähigkeiten zur Wiederherstellung gelöschter
Dateien sind mit denen von UFS-Snapshots
vergleichbar. Ob diese Technik für Sie geeignet ist,
hängt also letztlich von Ihren Anforderungen ab.RAID. Minimiert oder vermeidet
Ausfallzeiten, die durch einen Plattendefekt verursacht werden
könnten. Zwar können Plattendefekte (aufgrund
der höheren Anzahl verwendeter Platten) häufiger
auftreten, sie stellen aber dann kein so akutes Problem
dar.Das Überprüfen von Datei-Fingerprints durch
&man.mtree.8;. Dabei handelt es sich zwar um keine
Backup-Technik im eigentlichen Sinne, Sie werden durch den
Einsatz dieser Werkzeugs aber informiert, dass Sie auf Ihre
Backups zurückgreifen müssen. Dies ist insbesondere
beim Einsatz von Offline-Backups von großer Bedeutung.
Daher sollte diese Technik regelmäßig eingesetzt
werden.Es gibt noch zahlreiche weitere Techniken, von denen aber viele
nur Variationen der eben beschriebenen Techniken sind. Spezielle
Anforderungen erfordern dabei in der Regel auch spezielle
Backup-Techniken (so erfordert das Backup einer aktiven Datenbank
in der Regel ein auf die eingesetzte Datenbank-Software abgestimmtes
Verfahren). Entscheidend ist daher immer, gegen welche Gefahren
Sie sich schützen und wie Sie diesen Schutz realisieren
wollen.DatensicherungDie drei wichtigsten Programme zur Sicherung von Daten sind
&man.dump.8;, &man.tar.1; und &man.cpio.1;.Sichern und WiederherstellenDatensicherungBackupBackup-SoftwaredumpBackup-Softwarerestoredumprestoredump und restore sind die
traditionellen Backupprogramme in &unix; Systemen. Sie betrachten das
Laufwerk als eine Ansammlung von Blöcken, operieren also unterhalb
des Abstraktionslevels von Dateien, Links und Verzeichnissen, die die
Grundlage des Dateisystemkonzepts bilden. Im Gegensatz zu anderen
Backupprogrammen sichert dump ein ganzes Dateisystem
auf einem Gerät. Es ist nicht möglich nur einen Teil des
Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem
umfasst, zu sichern. Das dump-Kommando schreibt
keine Dateien oder Verzeichnise auf das Band, sondern die Blöcke,
aus denen Dateien und Verzeichnisse bestehen. Wenn
restore für das Extrahieren von Daten verwendet
wird, werden temporäre Dateien standardmässig in
/tmp/ abgelegt - wenn Sie von einer Platte mit
einem kleinen /tmp-Verzeichnis zurücksichern,
müssen Sie möglicherweise die Umgebungsvariable
TMPDIR auf ein Verzeichnis mit mehr freiem Speicherplatz
setzen, damit die Wiederherstellung gelingt.Wenn Sie mit dump das Root-Verzeichnis
sichern, werden /home, /usr
und viele andere Verzeichnisse nicht gesichert, da dies normalerweise
Mountpunkte für andere Dateisysteme oder symbolische Links
zu diesen Dateisystemen sind.dump hat einige Eigenarten, die noch aus den
frühen Tagen der Version 6 von AT&T UNIX (ca. 1975)
stammen. Die Parameter
sind für 9-Spur-Bänder (6250 bpi) voreingestellt,
nicht auf die heute üblichen Medien hoher Dichte (bis zu
62.182 ftpi). Bei der Verwendung der Kapazitäten
moderner Bandlaufwerke muss diese Voreinstellung auf der
Kommandozeile überschrieben werden..rhostsrdump und rrestore
können Daten über
Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen
Computers befindet, überspielen. Beide Programme benutzen die
Funktionen &man.rcmd.3; und &man.ruserok.3; zum
Zugriff auf das entfernte
Bandlaufwerk. Daher muss der Anwender, der das Backup
durchführt, auf dem entfernten Rechner in
.rhosts eingetragen sein.Die Argumente zu rdump und
rrestore müssen
zur Verwendung auf dem entfernten Computer geeignet sein.
Wenn Sie zum Beispiel mit rdump von einem
FreeBSD-Rechner aus auf ein Exabyte-Bandlaufwerk einer Sun mit
Namen komodo zugreifen möchten, setzen Sie
das folgende Kommando ab:&prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1Zum Ausführen dieses Kommandos müssen Sie auf dem
entfernten Rechner in .rhosts eingetragen
sein. Die r-Kommandos sind ein großes Sicherheitsrisiko,
daher sollten Sie deren Verwendung sorgfältig
abwägen.Es ist auch möglich, dump und
restore über eine gesicherte Verbindung
mit ssh einzusetzen:dump mit ssh
benutzen&prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gzSie können ebenfalls mit der internen Methode
von dump auf entfernte Rechner zugreifen,
indem Sie die Umgebungsvariable RSH
setzen:dump über ssh
mit gesetzter RSH benutzen&prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usrtarBackup-Softwaretar&man.tar.1; stammt ebenfalls aus Version 6 von AT&T UNIX
(ca. 1975). tar arbeitet mit dem Dateisystem,
denn es schreibt Dateien und Verzeichnisse auf das Band.
tar unterstützt zwar nicht alle Optionen,
die bei &man.cpio.1; zur Verfügung stehen, aber dafür
erfordert es auch nicht die ungewöhnliche Kommando-Pipeline,
die von cpio verwendet wird.tarSeit FreeBSD 5.3 sind sowohl GNU tar
als auch bsdtar verfügbar. Die
GNU-Version starten Sie über gtar. Sie
unterstützt auch entfernte Geräte, wobei die von
rdump benutzte Syntax übernommen wurde.
Um Daten mit tar auf ein an einer
Sun-Workstation (namens komodo) angeschlossenes
Exabyte-Bandlaufwerk zu archivieren, geben Sie Folgendes ein:&prompt.root; /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1Alternativ können Sie für diese Sicherung auch
bsdtar verwenden, indem Sie die Daten
über eine Pipeline und rsh an das
entfernte Laufwerk senden:&prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20bWenn Sie Bedenken bezüglich der Sicherheit beim Backup
über das Netz haben, sollten Sie ssh anstatt
rsh benutzen.CpioBackup-Softwarecpiocpio&man.cpio.1; ist das ursprüngliche Programm von
&unix; Systemen zum Dateitransfer mit magnetischen Medien.
cpio hat (neben vielen anderen
Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben
einer Anzahl verschiedener Archivformate und zum Weiterleiten von
Daten an andere Programme über eine Pipeline. Dieses letzte
Leistungsmerkmal macht cpio zu einer
ausgezeichneten Wahl für Installationsmedien. Leider kann
cpio keine
Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden
Dateien über stdin angegeben werden
muss.cpio unterstützt keine Backups
über das Netzwerk. Man kann aber eine Pipeline und
rsh verwenden, um
Daten an ein entferntes Bandlaufwerk zu senden.&prompt.root; for f in directory_list; dofind $f >> backup.listdone
&prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"Dabei steht directory_list für
eine Aufzählung der Verzeichnisse, die Sie sichern wollen.
user@host
gibt den Benutzer auf dem Zielrechner an, der die Sicherung
laufen lässt. Der Ort der Sicherung wird durch
backup_device angegeben
(z.B. /dev/nsa0).paxBackup-SoftwarepaxpaxPOSIXIEEE&man.pax.1; ist die Antwort von IEEE/&posix; auf
tar und cpio.
Über die Jahre hinweg sind die verschiedenen
Versionen von tar und cpio leicht
inkompatibel geworden. Daher hat &posix;, statt eine Standardisierung
zwischen diesen auszufechten, ein neues Archivprogramm geschaffen.
pax versucht viele der unterschiedlichen
cpio- und tar-Formate zu lesen
und zu schreiben, außerdem einige neue, eigene Formate. Die
Kommandostruktur ähnelt eher cpio als
tar.AmandaBackup-SoftwareAmandaAmandaAmanda
(Advanced Maryland Network Disk Archiver) ist ein
Client/Server-Backupsystem, nicht nur ein einzelnes Programm.
Ein Amanda-Server kann auf einem
einzigen Bandlaufwerk Datensicherungen von jeder beliebigen
Anzahl von Computern speichern, sofern auf diesen jeweils ein
Amanda-Client läuft und sie
über Netzwerk mit dem Amanda-Server
verbunden sind.Ein häufiges Problem bei Standorten mit einer Anzahl
großer Festplatten ist, dass das Kopieren der Daten auf
Band langsamer vor sich geht als solche Daten anfallen.
Amanda löst dieses Problem
durch Verwendung einer Holding Disk, einer Festplatte
zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme.Für Datensicherungen über einen längeren
Zeitraum erzeugt AmandaArchivsets von allen Dateisystemen, die in
Amandas Konfigurationsdatei genannt
werden. Ein Archivset ist eine Gruppe von Bändern mit
vollen Backups und Reihen von inkrementellen (oder differentiellen)
Backups, die jeweils nur die Unterschiede zum vorigen
Backup enthalten. Zur Wiederherstellung von beschädigten
Dateisystemen benötigt man Das Letzte volle Backup und alle
darauf folgenden inkrementellen Backups.Die Konfigurationsdatei ermöglicht die Feineinstellung
der Backups und des Netzwerkverkehrs von
Amanda. Amanda
kann zum Schreiben der Daten auf das Band jedes der oben
beschriebenen Backuprogramme verwenden.
Amanda ist nicht Teil des Basissystems,
Sie müssen Amanda über
die Ports-Sammlung oder als Paket installieren.Tue nichtsTue nichts ist kein Computerprogramm, sondern die
am häufigsten angewendete Backupstrategie. Diese kostet nichts,
man muss keinen Backupplan befolgen, einfach nur nein sagen. Wenn
etwas passiert, einfach grinsen und ertragen!Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist
die Strategie Tue nichts das geeignetste Backupprogramm
für Ihren Computer. Aber &unix; ist ein nützliches Werkzeug,
Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten
eine Sammlung von Dateien haben, die für Sie wertvoll geworden
sind.Tue nichts ist die richtige Backupmethode für
/usr/obj und andere Verzeichnisbäume, die
vom Computer exakt wiedererzeugt werden können. Ein Beispiel
sind die Dateien, die diese Handbuchseiten darstellen – sie
wurden aus Quelldateien im Format SGML erzeugt.
Es ist nicht nötig, Sicherheitskopien der Dateien in den
sekundären Formaten wie etwa HTML zu
erstellen. Die Quelldateien in SGML sollten jedoch
in die regelmäßigen Backups mit einbezogen werden.Welches Backup-Programm ist am Besten?LISAdump, Punkt und Schluss.
Elizabeth D. Zwicky hat alle hier genannten Backup-Programme
bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur
Sicherung aller Daten mit Berücksichtigung aller Besonderheiten
von &unix; Dateisystemen ist dump.Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt
ungewöhnlicher Bedingungen (und einiger gar nicht so
ungewöhnlicher) und testete jedes Programm durch ein Backup und
eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten
waren Dateien mit Löchern, Dateien mit Löchern und einem
Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im
Dateinamen, unlesbare und nichtschreibbare Dateien,
Gerätedateien, Dateien, deren Länge sich während des
Backups ändert, Dateien, die während des Backups erzeugt und
gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse
in LISA V im Oktober 1991, s. Torture-testing
Backup and Archive Programs.Die Wiederherstellung in einem NotfallVor dem UnglückEs sind nur vier Vorkehrungen zu treffen, um auf jedes
erdenkliche Unglück vorbereitet zu sein.bsdlabelAls erstes drucken Sie das bsdlabel jeder Ihrer Festplatten
(z.B. mittels bsdlabel da0 | lpr), die
Partitions- und Dateisystemtabelle jeder Festplatte (mit
/etc/fstab) sowie alle Bootmeldungen, jeweils
in zweifacher Ausfertigung.fix-it floppiesZweitens, überzeugen Sie sich, dass sowohl die
Bootdiskette als auch die Reparaturdiskette
(boot.flp bzw. fixit.flp)
all Ihre Geräte ansprechen können. Die einfachste Methode
dies nachzuprüfen ist, Ihren Rechner mit der Boot-Diskette im
Floppylaufwerk neu zu starten und die Bootmeldungen zu durchzusehen.
Wenn all Ihre Geräte aufgelistet sind und funktionieren,
können Sie weiter zu Schritt drei gehen.Ist das nicht der Fall, müssen Sie sich eine eigene
Version der beiden zum Booten benötigten Disketten erstellen.
Diese müssen einen Kernel enthalten, der all Ihre Platten
mounten kann und Zugriff auf Ihr Bandlaufwerk gestattet. Diese
Disketten müssen ferner folgende Programme enthalten:
fdisk, bsdlabel,
newfs, mount sowie
jedes Backup-Programm, das Sie verwenden. Diese Programme
müssen statisch gelinkt sein. Falls Sie dump
verwenden, muss die Diskette auch restore
enthalten.Drittens, machen Sie oft Backups auf Band. Jede Änderung
seit Ihrem letzten Backup kann unwiederbringlich verloren gehen.
Versehen Sie die Backup-Bänder mit Schreibschutz.Viertens, testen Sie aus, wie die Disketten (entweder
boot.flp und fixit.flp
oder Ihre beiden eigenen Disketten aus Schritt zwei) und die
Bänder mit den Backups zu behandeln sind. Machen Sie sich
Notizen zu diesem Test. Bewahren Sie diese Notizen zusammen mit den
Bootdisketten, den Ausdrucken und den Bändern mit den Backups
auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt
sein, dass Sie ohne Ihre Notizen vielleicht das Backup auf Ihren
Bändern zerstören. (Wie das geht? Man braucht nur
unglücklicherweise den Befehl tar cvf
/dev/sa0 einzugeben um ein Band zu
überschreiben).Als zusätzliche Sicherheitsvorkehrung, kann man jeweils
die Disketten und Bänder zweifach erstellen. Eine der Kopien
sollte an einem entfernten Standort aufbewahrt werden. Ein
entfernter Standort ist NICHT der Keller im gleichen
Bürogebäude. Eine Anzahl von Firmen im World Trade Center
musste diese Lektion auf die harte Tour lernen. Ein entfernter
Standort sollte von Ihrem Computer und Ihren Festplatten
physikalisch durch eine erhebliche Entfernung getrennt sein.Ein Beispielskript zum Erstellen eigener Bootdisketten /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore
gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync
cp /root/.profile /mnt/root
chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore
#
# Minimale Dateisystemtabelle erstellen
#
cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd <Nach dem UnglückDie Schlüsselfrage ist, ob Ihre Hardware überlebt
hat. Denn da Sie ja regelmäßig Backups angefertigt
haben, brauchen Sie sich um die Software keine Sorgen zu
machen.Falls die Hardware beschädigt wurde, ersetzen Sie zuerst
die defekten Teile bevor Sie den Computer benutzen.Falls die Hardware funktioniert, überprüfen Sie die
Disketten. Wenn Sie eigene Bootdisketten verwenden, booten Sie im
Single-User-Modus (geben dazu Sie -s am
Boot-Prompt boot: ein). Überspringen Sie den
folgenden Paragrafen.Wenn Sie die Standarddisketten boot.flp
und fixit.flp verwenden, lesen Sie hier weiter.
Legen Sie die Bootdiskette boot.flp in das
erste Floppylaufwerk ein und starten Sie den Computer. Wie
üblich wird dann das originale Installationsmenü von
FreeBSD gestartet. Wählen Sie die Option
Fixit--Repair mode with CD-ROM or floppy. Legen
Sie die Diskette fixit.flp ein, wenn danach
gefragt wird. restore und die anderen Programme,
die Sie benötigen, befinden sich dann in
/mnt2/rescue
(/mnt2/stand vor
&os; 5.2).Stellen Sie die Dateisysteme nacheinander, getrennt von
einander, wieder her.mountRoot-PartitionbsdlabelnewfsVersuchen Sie die Root-Partition Ihrer ersten Festplatte
einzuhängen (z.B. mit mount /dev/sd0a
/mnt). Wenn das Bsdlabel beschädigt wurde,
benutzen Sie bsdlabel um die Platte
neu zu partitionieren und zu benennen und zwar so, dass die
Festplatte mit dem Label übereinstimmt, das Sie
ausgedruckt und aufbewahrt haben.Verwenden Sie newfs um neue Dateisysteme
auf den
Partitionen anzulegen. Hängen Sie nun die Root-Partition der
Festplatte mit Schreibzugriff ein (mit mount -u -o rw
/mnt). Benutzen Sie Ihr Backup-Programm um die Daten
für das jeweilige Dateisystem aus den Backup-Bändern
wieder her zu stellen (z.B. durch restore vrf
/dev/sta). Hängen Sie das Dateisystem wieder aus
(z.B. durch umount /mnt). Wiederholen Sie diesen
Ablauf für jedes betroffene Dateisystem.Sobald Ihr System wieder läuft, machen Sie gleich wieder
ein vollständiges Backup auf neue Bänder. Denn die
Ursache für den Absturz oder den Datenverlust kann wieder
zuschlagen. Eine weitere Stunde, die Sie jetzt noch
dranhängen, kann Ihnen später ein weiteres Missgeschick
ersparen.* Ich habe mich nicht auf Missgeschicke vorbereitet - was
nun?
]]>
MarcFonvieilleVerbessert und neu strukturiert von Netzwerk-, speicher- und dateibasierte DateisystemeLaufwerkevirtuelleNeben Laufwerken, die sich physikalisch im Rechner befinden
wie Floppylaufwerke, CDs, Festplatten usw., kann FreeBSD auch
mit anderen Laufwerken, den virtuellen Laufwerken,
umgehen.NFSCodaLaufwerkespeicherbasierteLaufwerkeRAM-DisksDazu zählen Netzwerkdateisysteme wie
Network Filesystem und Coda,
speicher- und dateibasierte Dateisysteme.Abhängig von der verwendeten FreeBSD Version werden
speicher- und dateibasierte Dateisysteme mit unterschiedlichen
Werkzeugen angelegt.Gerätedateien werden unter &os; automatisch
von &man.devfs.5; angelegt.Dateibasierte Laufwerke unter FreeBSDLaufwerkedateibasierteUnter FreeBSD werden virtuelle Laufwerke
(&man.md.4;) mit &man.mdconfig.8; erzeugt. Dazu muss das Modul
&man.md.4; geladen sein oder das entsprechende Gerät in der
Kernelkonfiguration aktiviert sein:device mdMit &man.mdconfig.8; können drei verschiedene virtuelle
Laufwerke angelegt werden: speicherbasierte Laufwerke, deren
Speicher von &man.malloc.9; zur Verfügung gestellt wird, oder
dateibasierte Laufwerke, deren Speicher von einer Datei oder dem
Swap-Bereich zur Verfügung gestellt wird. Eine mögliche
Anwendung ist das Einhängen von Dateien, die Abbilder von
CD-ROMs oder Floppies enthalten.Das Abbild eines Dateisystems wird wie folgt
eingehangen:Einhängen eines existierenden Abbildes unter
FreeBSD&prompt.root; mdconfig -a -t vnode -f diskimage -u 0
&prompt.root; mount /dev/md0/mntEin neues Dateisystem-Abbild erstellen Sie mit
&man.mdconfig.8; wie folgt:Erstellen eines dateibasierten Laufwerks mit
mdconfig&prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
&prompt.root; mdconfig -a -t vnode -f newimage -u 0
&prompt.root; bsdlabel -w md0 auto
&prompt.root; newfs md0a
/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.
super-block backups (for fsck -b #) at:
160, 2720, 5280, 7840
&prompt.root; mount /dev/md0a /mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0a 4710 4 4330 0% /mntWenn Sie keine Gerätenummer mit dem Schalter
angeben, wird von &man.md.4; automatisch eine
ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät
wird auf der Standardausgabe ausgegeben (zum Beispiel
md4). Weitere Informationen entnehmen Sie
bitte der Hilfeseite &man.mdconfig.8;.Das Werkzeug &man.mdconfig.8; ist sehr nützlich, doch muss
man viele Kommandos absetzen, um ein dateibasiertes Dateisystem zu
erstellen. FreeBSD enthält das Werkzeug &man.mdmfs.8;, das
die notwendigen Schritte in einem Befehl zusammenfasst. Es
konfiguriert mit &man.mdconfig.8; ein &man.md.4;-Laufwerk, erstellt
darauf mit &man.newfs.8; ein Dateisystem und hängt es
anschließend mit &man.mount.8; ein. Das virtuelle Laufwerk
aus dem obigen Beispiel kann somit einfach mit den nachstehenden
Befehlen erstellt werden:Mit mdmfs ein dateibasiertes
Dateisystem erstellen&prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
&prompt.root; mdmfs -F newimage -s 5m md0/mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0 4718 4 4338 0% /mntWenn sie die Option ohne Gerätenummer
verwenden, wählt &man.md.4; automatisch ein ungenutztes
Gerät aus. Weitere Einzelheiten entnehmen Sie bitte der
Hilfeseite &man.mdmfs.8;.Speicherbasierte Laufwerke unter FreeBSDLaufwerkespeicherbasierteVerwenden Sie ein
speicherbasiertes Dateisystem, sollten Sie die Option
swap backing aktivieren. Setzen Sie diese
Option, heißt dies allerdings nicht, dass das
speicherbasierte Laufwerk automatisch auf ihre Festplatte
ausgelagert wird, vielmehr wird der Speicherplatz danach
aus einem Speicherpool angefordert, der bei Bedarf auf
die Platte ausgelagert werden kann. Zusätzlich ist
es möglich, &man.malloc.9;-gestützte
speicherbasierte Laufwerke zu erstellen. Das Anlegen solcher
Laufwerke kann allerdings zu einer System-Panic führen,
wenn der Kernel danach über zu wenig Speicher
verfügt.Erstellen eines speicherbasierten Laufwerks mit
mdconfig&prompt.root; mdconfig -a -t swap -s 5m -u 1
&prompt.root; newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 2752, 5344, 7936
&prompt.root; mount /dev/md1/mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md1 4718 4 4338 0% /mntErstellen eines speicherbasierten Laufwerks mit
mdmfs&prompt.root; mdmfs -s 5m md2/mnt
&prompt.root; df /mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md2 4846 2 4458 0% /mntVirtuelle Laufwerke freigebenLaufwerkeFreigabe von virtuellen LaufwerkenWenn ein virtuelles Laufwerk nicht mehr gebraucht wird, sollten
Sie dem System die belegten Ressourcen zurückgeben.
Hängen Sie dazu zuerst das Dateisystem ab und geben Sie dann
die benutzten Ressourcen mit &man.mdconfig.8; frei.Alle von /dev/md4 belegten Ressourcen
werden mit dem nachstehenden Kommando freigegeben:&prompt.root; mdconfig -d -u 4Eingerichtete &man.md.4;-Geräte werden mit dem Befehl
mdconfig -l angezeigt.TomRhodesBeigetragen von Schnappschüsse von DateisystemenSchnappschüssevon DateisystemenZusammen mit Soft Updates
bietet FreeBSD eine neue Funktion: Schnappschüsse von
Dateisystemen.Schnappschüsse sind Dateien, die ein Abbild eines
Dateisystems enthalten und müssen auf dem jeweiligen
Dateisystem erstellt werden. Pro Dateisystem darf es maximal
20 Schnappschüsse, die im Superblock vermerkt werden, geben.
Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen,
neu eingehangen oder das System neu gestartet wird. Wenn Sie einen
Schnappschuss nicht mehr benötigen, können Sie ihn
mit &man.rm.1; löschen. Es ist egal, in welcher Reihenfolge
Schnappschüsse gelöscht werden. Es kann allerdings
vorkommen, dass nicht der gesamte Speicherplatz
wieder freigegeben wird, da ein anderer
Schnappschuss einen Teil der entfernten Blöcke für sich
beanspruchen kann.Das unveränderliche -Dateiflag
wird nach der Erstellung des Snaphshots von &man.mksnap.ffs.8;
gesetzt. Durch die Verwendung von &man.unlink.1; ist es allerdings
möglich, einen Schnappschuss zu löschen.Schnappschüsse werden mit &man.mount.8; erstellt. Das
folgende Kommando legt einen Schnappschuss von
/var in /var/snapshot/snap
ab:&prompt.root; mount -u -o snapshot /var/snapshot/snap /varDen Schnappschuss können Sie auch mit &man.mksnap.ffs.8;
erstellen:&prompt.root; mksnap_ffs /var /var/snapshot/snapUm einen Schnappschuss auf Ihrem System zu finden, verwenden
Sie &man.find.1;:&prompt.root; find /var -flags snapshotNachdem ein Schnappschuss erstellt wurde, können Sie
ihn für verschiedene Zwecke benutzen:Sie können den Schnappschuss für die
Datensicherung benutzen und ihn auf eine CD oder ein Band
schreiben.Sie können den Schnappschuss mit &man.fsck.8;
manuell prüfen. Wenn das Dateisystem zum Zeitpunkt der
Erstellung des Schnappschusses in Ordnung war, sollte
&man.fsck.8; immer erfolgreich durchlaufen. Der
Hintergrund-Prozess &man.fsck.8; hat im Übrigen genau
diese Aufgabe.Sie können den Schnappschuss mit &man.dump.8;
sichern. Sie erhalten dann eine konsistente Sicherung des
Dateisystems zu dem Zeitpunkt, der durch den Zeitstempel des
Schnappschusses gegeben ist. Der Schalter
von &man.dump.8; erstellt für die Sicherung einen
Schnappschuss und entfernt diesen am Ende der Sicherung
wieder.Sie können einen Schnappschuss in den
Verzeichnisbaum einhängen und sich dann den Zustand des
Dateisystems zu dem Zeitpunkt ansehen, an dem der
Schnappschuss erstellt wurde. Der folgende Befehl
hängt den Schnappschuss
/var/snapshot/snap ein:&prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4
&prompt.root; mount -r /dev/md4 /mntSie können sich nun den eingefrorenen Stand des
/var Dateisystems unterhalb von
/mnt ansehen. Mit Ausnahme der früheren
Schnappschüsse, die als leere Dateien auftauchen, wird zu
Beginn alles so aussehen, wie zum Zeitpunkt der Erstellung des
Schnappschusses. Wenn Sie den Schnappschuss nicht mehr
benötigen, können Sie ihn, wie nachfolgend gezeigt,
abhängen:&prompt.root; umount /mnt
&prompt.root; mdconfig -d -u 4Weitere Informationen über Soft Updates und
Schnappschüsse von Dateisystemen sowie technische Artikel finden
Sie auf der Webseite
von Marshall Kirk McKusick.Dateisystem-QuotasAccountingPlattenplatzDisk QuotasQuotas sind eine optionale Funktion des Betriebssystems,
die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl
der Dateien eines Benutzers oder der Mitglieder einer Gruppe,
auf Dateisystemebene zu beschränken. Oft wird dies
auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da
es dort erwünscht ist, die Ressourcen, die ein Benutzer oder
eine Gruppe von Benutzern belegen können, zu limitieren. Das
verhindert, dass ein Benutzer oder eine Gruppe von Benutzern
den ganzen verfügbaren Plattenplatz belegt.Konfiguration des Systems, um Quotas zu
aktivierenBevor Quotas benutzt werden können, müssen
sie im Kernel konfiguriert werden, wozu die folgende Zeile
der Kernelkonfiguration hinzugefügt wird:options QUOTAIm gewöhnlichen GENERIC Kernel
sind Quotas nicht aktiviert, so dass Sie einen angepassten
Kernel konfigurieren und bauen müssen, um Quotas zu
benutzen. Weitere Informationen
finden Sie in .Durch Hinzufügen der folgenden Zeile in
/etc/rc.conf wird das Quota-System
aktiviert:enable_quotas="YES"Disk QuotasüberprüfenUm den Start des Quota-Systems zu beeinflussen, steht
eine weitere Variable zur Verfügung. Normalerweise
wird beim Booten die Integrität der Quotas auf
allen Dateisystemen mit &man.quotacheck.8;
überprüft. &man.quotacheck.8; stellt
sicher, dass die Quota-Datenbank mit den Daten auf
einem Dateisystem übereinstimmt. Dies ist allerdings
ein sehr zeitraubender Prozess, der die Zeit, die
das System zum Booten braucht, signifikant beeinflusst.
Eine Variable in /etc/rc.config erlaubt es Ihnen,
diesen Schritt zu überspringen:check_quotas="NO"Schließlich müssen Sie noch in
/etc/fstab die Plattenquotas auf
Dateisystemebene aktivieren. Dort können Sie
für alle Dateisysteme Quotas für Benutzer, Gruppen
oder für beide aktivieren.Um Quotas pro Benutzer für ein Dateisystem zu
aktivieren, geben Sie für dieses Dateisystem die
Option im Feld Optionen von
/etc/fstab an. Beispiel:/dev/da1s2g /home ufs rw,userquota 1 2Um Quotas für Gruppen einzurichten, verwenden
Sie anstelle von
. Um Quotas für Benutzer
und Gruppen einzurichten, ändern Sie den Eintrag
wie folgt ab:/dev/da1s2g /home ufs rw,userquota,groupquota 1 2Die Quotas werden jeweils im Rootverzeichnis des Dateisystems
unter dem Namen quota.user für
Benutzer-Quotas und quota.group für
Gruppen-Quotas abgelegt. Obwohl &man.fstab.5; beschreibt,
dass diese Dateien an anderer Stelle gespeichert werden
können, wird das nicht empfohlen, da es den Anschein hat,
dass die verschiedenen Quota-Utilities das nicht richtig
unterstützen.Jetzt sollten Sie Ihr System mit dem neuen Kernel booten.
/etc/rc wird dann automatisch die
richtigen Kommandos aufrufen, die die Quota-Dateien für
alle Quotas, die Sie in /etc/fstab
definiert haben, anlegen. Deshalb müssen vorher auch keine
leeren Quota-Dateien angelegt werden.Normalerweise brauchen Sie die Kommandos
&man.quotacheck.8;, &man.quotaon.8; oder
&man.quotaoff.8; nicht händisch aufzurufen,
obwohl Sie vielleicht die entsprechenden Seiten im
Manual lesen sollten, um sich mit ihnen vertraut
zu machen.Setzen von Quota-LimitsDisk QuotasLimitsNachdem Sie Quotas in Ihrem System aktiviert haben, sollten
Sie überprüfen, dass Sie auch tatsächlich
aktiviert sind. Führen Sie dazu einfach den folgenden
Befehl aus:&prompt.root; quota -vFür jedes Dateisystem, auf dem Quotas aktiviert sind,
sollten Sie eine Zeile mit der Plattenauslastung und den
aktuellen Quota-Limits sehen.Mit &man.edquota.8; können Sie nun
Quota-Limits setzen.Sie haben mehrere Möglichkeiten, die Limits für
den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen
kann, oder die Anzahl der Dateien, die angelegt werden dürfen,
festzulegen. Die Limits können auf dem Plattenplatz
(Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder
einer Kombination von beiden basieren.
Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt:
Hardlimits und Softlimits.HardlimitEin Hardlimit kann nicht überschritten werden.
Hat der Benutzer einmal ein Hardlimit erreicht, so kann er
auf dem betreffenden Dateisystem keinen weiteren Platz mehr
beanspruchen. Hat ein Benutzer beispielsweise ein Hardlimit
von 500 Kilobytes auf einem Dateisystem und benutzt davon
490 Kilobyte, so kann er nur noch 10 weitere Kilobytes
beanspruchen. Der Versuch, weitere 11 Kilobytes zu beanspruchen,
wird fehlschlagen.SoftlimitIm Gegensatz dazu können Softlimits für eine
befristete Zeit überschritten werden. Diese Frist
beträgt in der Grundeinstellung
eine Woche. Hat der Benutzer das Softlimit über die
Frist hinaus überschritten, so wird das Softlimit in
ein Hardlimit umgewandelt und der Benutzer kann
keinen weiteren Platz mehr beanspruchen. Wenn er einmal
das Softlimit unterschreitet, wird die Frist wieder
zurückgesetzt.Das folgende Beispiel zeigt die Benutzung von
&man.edquota.8;. Wenn &man.edquota.8; aufgerufen wird,
wird der Editor gestartet, der durch EDITOR
gegeben ist oder vi falls
EDITOR nicht gesetzt ist. In dem Editor
können Sie die Limits eingeben.&prompt.root; edquota -u testQuotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)Für jedes Dateisystem, auf dem Quotas aktiv sind,
sehen Sie zwei Zeilen, eine für die Block-Quotas und die
andere für die Inode-Quotas. Um ein Limit zu modifizieren,
ändern Sie einfach den angezeigten Wert. Um beispielsweise
das Blocklimit dieses Benutzers von einem Softlimit von 50
und einem Hardlimit von 75 auf ein Softlimit von 500 und
ein Hardlimit von 600 zu erhöhen, ändern Sie
die Zeile/usr: kbytes in use: 65, limits (soft = 50, hard = 75)zu:/usr: kbytes in use: 65, limits (soft = 500, hard = 600)Die neuen Limits sind wirksam, wenn Sie den
Editor verlassen.Manchmal ist es erwünscht, die Limits für einen
Bereich von UIDs zu setzen. Dies kann mit der
Option von &man.edquota.8; bewerkstelligt werden.
Weisen Sie dazu die Limits einem Benutzer zu und rufen danach
edquota -p protouser startuid-enduid auf.
Besitzt beispielsweise der Benutzer test
die gewünschten Limits, können diese mit
dem folgenden Kommando für die UIDs 10.000 bis 19.999
dupliziert werden:&prompt.root; edquota -p test 10000-19999Weitere Informationen erhalten Sie in &man.edquota.8;.Überprüfen von Quota-Limits und PlattennutzungDisk QuotasüberprüfenSie können &man.quota.1; oder
&man.repquota.8; benutzen, um Quota-Limits
und Plattennutzung zu überprüfen. Um die Limits
oder die Plattennutzung individueller Benutzer und Gruppen
zu überprüfen, kann &man.quota.1;
benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die
Quotas der Gruppe, der er angehört untersuchen. Nur der
Superuser darf sich alle Limits ansehen.
Mit &man.repquota.8; erhalten Sie eine Zusammenfassung
von allen Limits und der Plattenausnutzung für alle
Dateisysteme, auf denen Quotas aktiv sind.Das folgende Beispiel zeigt die Ausgabe von
quota -v für einen Benutzer, der
Quota-Limits auf zwei Dateisystemen besitzt:Disk quotas for user test (uid 1002):
Filesystem usage quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60Disk QuotasFristIm Dateisystem /usr liegt der Benutzer
momentan 15 Kilobytes über dem Softlimit von
50 Kilobytes und hat noch 5 Tage seiner Frist übrig.
Der Stern * zeigt an, dass der
Benutzer sein Limit überschritten hat.In der Ausgabe von &man.quota.1; werden Dateisysteme,
auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt,
auch wenn diesem Quotas zugewiesen wurden. Mit
werden diese Dateisysteme, wie /usr/var
im obigen Beispiel, angezeigt.Quotas über NFSNFSQuotas werden von dem Quota-Subsystem auf dem NFS Server
erzwungen. Der &man.rpc.rquotad.8; Dæmon stellt
&man.quota.1; die Quota Informationen auf dem NFS Client
zur Verfügung, so dass Benutzer auf diesen
Systemen ihre Quotas abfragen können.Aktivieren Sie rpc.rquotad in
/etc/inetd.conf wie folgt:rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotadAnschließend starten Sie inetd
neu:&prompt.root; /etc/rc.d/inetd restartLuckyGreenBeigetragen von shamrock@cypherpunks.toPartitionen verschlüsselnPartitionenverschlüsselnFreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor
unberechtigten Zugriffen zu schützen. Wenn das
Betriebssystem läuft, schützen Zugriffsrechte und
vorgeschriebene Zugriffskontrollen (MAC) (siehe )
die Daten. Die Zugriffskontrollen des Betriebssystems
schützen allerdings nicht vor einem Angreifer, der
Zugriff auf den Rechner hat. Der Angreifer
kann eine Festplatte einfach in ein anderes System einbauen
und dort die Daten analysieren.Die für &os; verfügbaren kryptografischen
Subsysteme GEOM Based Disk Encryption (gbde)
und geli sind in der Lage, Daten auf
Dateisystemen auch vor hoch motivierten Angreifern zu
schützen, die über erhebliche Mittel verfügen.
Dieser Schutz ist unabhängig von der Art und Weise, durch
die ein Angreifer Zugang zu einer Festplatte oder zu einem
Rechner erlangt hat. Im Gegensatz zu schwerfälligen
Systemen, die einzelne Dateien verschlüsseln,
verschlüsseln gbde und
geli transparent ganze Dateisysteme. Auf der
Festplatte werden dabei keine Daten im Klartext gespeichert.Plattenverschlüsselung mit
gbdeWechseln sie zu rootSie benötigen Superuser-Rechte, um
gbde einzurichten.&prompt.user; su -
Password:Aktivieren Sie &man.gbde.4; in
der KernelkonfigurationsdateiFügen Sie folgende Zeile in Ihre
Kernelkonfigurationsdatei ein:options GEOM_BDEÜbersetzen und installieren Sie den FreeBSD-Kernel
wie in beschrieben.Starten sie das System neu, um den neuen Kernel
zu benutzen.Alternativ zur Neukompilierung des Kernels können
Sie auch kldload verwenden, um das
Kernelmodul &man.gbde.4; zu laden:&prompt.root; kldload geom_bdeEinrichten eines verschlüsselten DateisystemsDas folgende Beispiel beschreibt, wie ein Dateisystem
auf einer neuen Festplatte verschlüsselt wird. Das
Dateisystem wird in /private eingehangen.
Mit gbde könnten auch
/home und /var/mail
verschlüsselt werden. Die dazu nötigen Schritte
können allerdings in dieser Einführung
nicht behandelt werden.Installieren der FestplatteInstallieren Sie die Festplatte wie in
beschrieben. Im Beispiel
verwenden wir die Partition /dev/ad4s1c.
Die Gerätedateien
/dev/ad0s1*
sind Standard-Partitionen des FreeBSD-Systems.&prompt.root; ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4Verzeichnis für gbde-Lock-Dateien anlegen&prompt.root; mkdir /etc/gbdeDie Lock-Dateien sind für den Zugriff von
gbde auf verschlüsselte
Partitionen notwendig. Ohne die Lock-Dateien können
die Daten nur mit erheblichem manuellen Aufwand wieder
entschlüsselt werden (dies wird auch von der Software
nicht unterstützt). Jede verschlüsselte
Partition benötigt eine gesonderte Lock-Datei.Vorbereiten der gbde-PartitionEine von gbde benutzte
Partition muss einmalig vorbereitet werden:&prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock&man.gbde.8; öffnet eine Vorlage in Ihrem Editor,
in der Sie verschiedene Optionen einstellen können.
Setzen Sie sector_size auf
2048, wenn Sie
UFS1 oder UFS2 benutzen.$FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
#
# Sector size is the smallest unit of data which can be read or written.
# Making it too small decreases performance and decreases available space.
# Making it too large may prevent filesystems from working. 512 is the
# minimum and always safe. For UFS, use the fragment size
#
sector_size = 2048
[...]
&man.gbde.8; fragt dann zweimal eine Passphrase
zum Schutz der Daten ab. Die Passphrase muss beides
Mal gleich eingegeben werden. Die Sicherheit der
Daten hängt alleine von der Qualität der
gewählten Passphrase ab.
Die Auswahl einer sicheren und leicht zu merkenden
Passphrase wird auf der Webseite Diceware
Passphrase beschrieben.Mit gbde init wurde im Beispiel
auch die Lock-Datei /etc/gbde/ad4s1c.lock
angelegt. gbde-Lockdateien
müssen die Dateiendung .lock aufweisen,
damit sie von /etc/rc.d/gbde, dem
Startskript von gbde, erkannt
werden.Sichern Sie die Lock-Dateien von
gbde immer zusammen mit den
verschlüsselten Dateisystemen. Ein entschlossener
Angreifer kann die Daten vielleicht auch ohne die
Lock-Datei entschlüsseln. Ohne die Lock-Datei
können Sie allerdings nicht auf die
verschlüsselten Daten zugreifen. Dies ist nur noch
mit erheblichem manuellen Aufwand möglich, der
weder von &man.gbde.8; noch seinem Entwickler
unterstützt wird.Einbinden der verschlüsselten Partition
in den Kernel&prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lockDas Kommando fragt die Passphrase ab, die Sie
beim Vorbereiten der Partition eingegeben haben. Das
neue Gerät erscheint danach als
/dev/device_name.bde im
Verzeichnis /dev:&prompt.root; ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bdeDateisystem auf dem verschlüsselten Gerät
anlegenWenn der Kernel die verschlüsselte Partition
kennt, können Sie ein Dateisystem auf ihr anlegen.
Benutzen Sie dazu den Befehl &man.newfs.8;. Da ein
Dateisystem vom Typ UFS2 sehr viel schneller als eins
vom Typ UFS1 angelegt wird, empfehlen wir Ihnen, die
Option zu benutzen.&prompt.root; newfs -U -O2 /dev/ad4s1c.bde&man.newfs.8; muss auf einer dem Kernel bekannten
gbde-Partition (einem
Gerät mit dem Namen
*.bde
laufen.Einhängen der verschlüsselten PartitionLegen Sie einen Mountpunkt für das
verschlüsselte Dateisystem an:&prompt.root; mkdir /privateHängen Sie das verschlüsselte Dateisystem
ein:&prompt.root; mount /dev/ad4s1c.bde /privateÜberprüfen des verschlüsselten
DateisystemDas verschlüsselte Dateisystem sollte jetzt
von &man.df.1; erkannt werden und benutzt werden
können.&prompt.user; df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 1037M 72M 883M 8% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 8.1G 55K 7.5G 0% /home
/dev/ad0s1e 1037M 1.1M 953M 0% /tmp
/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr
/dev/ad4s1c.bde 150G 4.1K 138G 0% /privateEinhängen eines existierenden verschlüsselten
DateisystemsNach jedem Neustart müssen verschlüsselte
Dateisysteme dem Kernel wieder bekannt gemacht werden,
auf Fehler überprüft werden und eingehangen
werden. Die dazu nötigen Befehle müssen als
root durchgeführt werden.gbde-Partition im Kernel bekannt geben&prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lockDas Kommando fragt nach der Passphrase, die Sie
beim Vorbereiten der verschlüsselten
gbde-Partition festgelegt
haben.Prüfen des DateisystemsDas verschlüsselte Dateisystem kann noch nicht
automatisch über /etc/fstab
eingehangen werden. Daher muss es vor dem Einhängen
mit &man.fsck.8; geprüft werden:&prompt.root; fsck -p -t ffs /dev/ad4s1c.bdeEinhängen des verschlüsselten
Dateisystems&prompt.root; mount /dev/ad4s1c.bde /privateDas verschlüsselte Dateisystem steht danach
zur Verfügung.Verschlüsselte Dateisysteme automatisch
einhängenMit einem Skript können verschlüsselte
Dateisysteme automatisch bekannt gegeben, geprüft
und eingehangen werden. Wir raten Ihnen allerdings
aus Sicherheitsgründen davon ab. Starten Sie das
Skript manuell an der Konsole oder in einer
&man.ssh.1;-Sitzung.Zu diesem Zweck existiert ein
rc.d-Skript, an das über
Einträge in der Datei &man.rc.conf.5;
Argumente übergeben werden können. Dazu ein
Beispiel:gbde_autoattach_all="YES"
gbde_devices="ad4s1c"
gbde_lockdir="/etc/gbde"Durch diese Argumente muss beim Systemstart die
gbde-Passphrase eingegeben werden.
Erst nach Eingabe der korrekten Passphrase wird die
gbde-verschlüsselte
Partition automatisch in den Verzeichnisbaum
eingehängt. Dieses Vorgehen ist insbesondere dann
nützlich, wenn Sie gbde auf
einem Notebook einsetzen wollen.Kryptografische Methoden von gbde&man.gbde.8; benutzt den 128-Bit AES im CBC-Modus,
um die Daten eines Sektors zu verschlüsseln. Jeder
Sektor einer Festplatte wird mit einem unterschiedlichen
AES-Schlüssel verschlüsselt. Mehr Informationen,
unter anderem wie die Schlüssel für einen Sektor
aus der gegebenen Passphrase ermittelt werden, erhalten
Sie in &man.gbde.4;.Kompatibilität&man.sysinstall.8; kann nicht mit verschlüsselten
gbde-Geräten umgehen. Vor
dem Start von &man.sysinstall.8; sind alle
*.bde-Geräte
zu deaktivieren, da &man.sysinstall.8; sonst bei der
Gerätesuche abstürzt. Das im Beispiel verwendete
Gerät wird mit dem folgenden Befehl deaktiviert:&prompt.root; gbde detach /dev/ad4s1cSie können gbde
nicht zusammen mit vinum
benutzen, da &man.vinum.4; das &man.geom.4;-Subsystem
nicht benutzt.DanielGerzoBeigetragen von Plattenverschlüsselung mit geliMit &os; 6.0 wurde eine neue kryptografische GEOM-Klasse
eingeführt - geli. Diese wird derzeit
von &a.pjd; weiterentwickelt. geli
unterscheidet sich von gbde durch
unterschiedliche Fähigkeiten und einen unterschiedlichen
Ansatz für die Verschlüsselung von Festplatten.Die wichtigsten Merkmale von &man.geli.8; sind:Der Einsatz des &man.crypto.9;-Frameworks –
verfügt das System über kryptografische Hardware,
wird diese von geli automatisch
verwendet.Die Unterstützung verschiedener kryptografischer
Algorithmen (derzeit AES, Blowfish, sowie 3DES).Die Möglichkeit, die root-Partition zu
verschlüsseln. Um auf die verschlüsselte
root-Partition zugreifen zu können, muss beim
Systemstart die Passphrase eingegeben werden.geli erlaubt den Einsatz von zwei
voneinander unabhängigen Schlüsseln (etwa einem
privaten Schlüssel und einem
Unternehmens-Schlüssel).geli ist durch einfache
Sektor-zu-Sektor-Verschlüsselung sehr schnell.Die Möglichkeit, Master-Keys zu sichern und
wiederherzustellen. Wenn ein Benutzer seinen Schlüssel
zerstört, kann er über seinen zuvor gesicherten
Schlüssel wieder auf seine Daten zugreifen.geli erlaubt es, Platten mit
einem zufälligen Einmal-Schlüssel einzusetzen,
was insbesondere für Swap-Partitionen und
temporäre Dateisysteme interessant ist.Weitere Informationen zu den Fähigkeiten von
geli finden Sie in &man.geli.8;.Die folgenden Schritte beschreiben, wie Sie
geli im &os;-Kernel aktivieren und einen
geli-Verschlüsselungs-Provider
anlegen können.Voraussetzung für die Nutzung von
geli ist der Einsatz von &os; 6.0-RELEASE
oder neuer. Da Sie Ihren Kernel anpassen müssen,
benötigen Sie außerdem
root-Privilegien.Aufnahme der geli-Unterstützung
in Ihre KernelkonfigurationsdateiFügen Sie die folgenden Zeilen in Ihre
Kernelkonfigurationsdatei ein:options GEOM_ELI
device cryptoBauen und installieren Sie Ihren neuen Kernel wie in
beschrieben.Alternativ können Sie aber auch das
geli-Kernelmodul beim Systemstart laden.
Dazu fügen Sie die folgende Zeile in
/boot/loader.conf ein:geom_eli_load="YES"Ab sofort wird &man.geli.8; vom Kernel
unterstützt.Erzeugen des Master-KeysDas folgende Beispiel beschreibt, wie Sie eine
Schlüsseldatei erzeugen, die als Teil des
Master-Keys für den Verschlüsselungs-Provider
verwendet wird, der unter /private in den
Verzeichnisbaum eingehängt (gemountet)
wird. Diese Schlüsseldatei liefert zufällige
Daten, die für die Verschlüsselung des
Master-Keys benötigt werden. Zusätzlich wird
der Master-Key durch eine Passphrase geschützt. Die
Sektorgröße des Providers beträgt 4 KB.
Außerdem wird beschrieben, wie Sie einen
geli-Provider aktivieren, ein vom ihm
verwaltetes Dateisystem erzeugen, es mounten, mit ihm
arbeiten und wie Sie es schließlich wieder unmounten
und den Provider deaktivieren.Um eine bessere Leistung zu erzielen, sollten Sie eine
größere Sektorgröße (beispielsweise
4 KB) verwenden.Der Master-Key wird durch eine Passphrase sowie die
Daten der Schlüsseldatei (die von
/dev/random stammen) geschützt.
Die Sektorgröße von
/dev/da2.eli (das als Provider
bezeichnet wird) beträgt 4 KB.&prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1
&prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2
Enter new passphrase:
Reenter new passphrase:Es ist nicht zwingend nötig, sowohl eine Passphrase
als auch eine Schlüsseldatei zu verwenden. Die
einzelnen Methoden können auch unabhängig
voneinander eingesetzt werden.Wird für die Schlüsseldatei der Wert
- angegeben, wird dafür die
Standardeingabe verwendet. Das folgende Beispiel zeigt,
dass Sie auch mehr als eine Schlüsseldatei verwenden
können.&prompt.root; cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2Aktivieren des Providers mit dem erzeugten
Schlüssel&prompt.root; geli attach -k /root/da2.key /dev/da2
Enter passphrase:Dadurch wird die (Normaltext-)Gerätedatei
/dev/da2.eli
angelegt.&prompt.root; ls /dev/da2*
/dev/da2 /dev/da2.eliDas neue Dateisystem erzeugen&prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m
&prompt.root; newfs /dev/da2.eli
&prompt.root; mount /dev/da2.eli /privateDas verschlüsselte Dateisystem wird nun von
&man.df.1; angezeigt und kann ab sofort eingesetzt werden.&prompt.root; df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 248M 89M 139M 38% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr
/dev/ad0s1d 989M 1.5M 909M 0% /tmp
/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var
/dev/da2.eli 150G 4.1K 138G 0% /privateDas Dateisystem unmounten und den Provider deaktivierenWenn Sie nicht mehr mit dem verschlüsselten
Dateisystem arbeiten und die unter /private eingehängte
Partition daher nicht mehr benötigen, sollten
Sie diese unmounten und den
geli-Verschlüsselungs-Provider
wieder deaktivieren.&prompt.root; umount /private
&prompt.root; geli detach da2.eliWeitere Informationen zum Einsatz von geli
finden Sie in &man.geli.8;.Der Einsatz des geli-
rc.d-Skriptsgeli verfügt über ein
rc.d-Skript,
das den Einsatz von geli
deutlich vereinfacht. Es folgt nun ein Beispiel, in dem
geli über die Datei
&man.rc.conf.5; konfiguriert wird:geli_devices="da2"
geli_da2_flags="-p -k /root/da2.key"Durch diese Einträge wird
/dev/da2 als
geli-Provider festgelegt. Der Master-Key
befindet sich in /root/da2.key. Beim
Aktivieren des geli-Providers wird keine
Passphrase abgefragt (beachten Sie, dass dies nur dann
möglich ist, wenn Sie geli mit dem
Parameter initialisieren). Wird das
System heruntergefahren, wird der
geli-Provider zuvor deaktiviert.Weitere Informationen zur Konfiguration der
rc.d-Skripten
finden Sie im Abschnitt rc.d des Handbuchs.ChristianBrüfferGeschrieben von Den Auslagerungsspeicher verschlüsselnAuslagerungsspeicherverschlüsselnDie Verschlüsselung des Auslagerungsspeichers ist unter &os;
einfach einzurichten und seit &os; 5.3-RELEASE verfügbar.
Je nach dem, welche &os;-Version Sie einsetzen, können
Konfiguration und mögliche Optionen allerdings unterschiedlich
sein. Seit &os; 6.0-RELEASE können Sie entweder das
&man.gbde.8;- oder das &man.geli.8;-Verschlüsselungs-Subsystem
einsetzen. Verwenden Sie eine ältere &os;-Version, sind Sie
hingegen auf &man.gbde.8; beschränkt. Beide Subsysteme
werden über das rc.d-Skript
encswap gestartet.Der letzte Abschnitt,
Partitionen verschlüsseln, enthält eine kurze
Beschreibung der verschiedenen
Verschlüsselungs-Subsysteme.Warum sollte der Auslagerungsspeicher verschlüsselt
werden?Wie die Verschlüsselung von Plattenpartitionen dient
auch die Verschlüsselung des Auslagerungsspeichers dem
Schutz sensitiver Informationen. Stellen Sie sich etwa eine
Anwendung vor, die ein Passwort erfordert. Solange dieses
Passwort im Hauptspeicher verbleibt, ist alles in
Ordnung. Beginnt Ihr Betriebssystem allerdings, Daten auf
die Festplatte auszulagern, um im Hauptspeicher Platz für
andere Anwendungen zu schaffen, kann es passieren, dass Ihr
Passwort im Klartext in den Auslagerungsspeicher
geschrieben wird, was es einem potentiellen Angreifer leicht
macht, Ihr Passwort herauszufinden. Die Verschlüsselung
Ihres Auslagerungsspeichers kann dieses Problem lösen.VorbereitungenFür die weiteren Ausführungen dieses Abschnitts
stellt ad0s1b die Swap-Partition
dar.Noch ist Ihr Auslagerungsspeicher nicht verschlüsselt.
Es könnte allerdings sein, dass bereits Passwörter
oder andere sensitive Daten als Klartext im Auslagerungsspeicher
vorhanden sind. Daher sollten Sie den Auslagerungsspeicher
komplett mit zufällig generierten Zeichen
überschreiben, bevor Sie ihn verschlüsseln:&prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1mDen Auslagerungsspeicher mit &man.gbde.8;
verschlüsselnVerwenden Sie &os; 6.0-RELEASE oder neuer, sollten Sie
in /etc/fstab das Suffix
.bde an den Gerätenamen der
Swap-Partition anhängen:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.bde none swap sw 0 0
Für &os;-Versionen vor 6.0-RELEASE benötigen Sie
zusätzlich folgende Zeile in
/etc/rc.conf:gbde_swap_enable="YES"Den Auslagerungsspeicher mit &man.geli.8;
verschlüsselnAlternativ können Sie Ihren Auslagerungsspeicher auch
mit &man.geli.8; verschlüsseln. Die Vorgehensweise ist
dabei ähnlich. Allerdings hängen Sie bei der Verwendung
von &man.geli.8; in /etc/fstab das Suffix
.eli an den Gerätenamen der
Swap-Partition an:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.eli none swap sw 0 0
In der Voreinstellung verschlüsselt &man.geli.8; den
Auslagerungsspeicher mit dem AES-Algorithmus
und einer Schlüssellänge von 256 Bit.Es ist möglich, diese Optionen durch das Setzen der
geli_swap_flags-Option in
/etc/rc.conf anzupassen. Die folgende
Zeile weist das rc.d-Skript encswap an,
&man.geli.8;-Swap-Partitionen mit dem Blowfish-Algorithmus und
einer Schlüssellänge von 128 Bit zu
verschlüsseln. Zusätzlich wird die
Sektorgröße auf 4 Kilobyte gesetzt und die Option
detach on last close aktiviert:geli_swap_flags="-e blowfish -l 128 -s 4096 -d"Auf Systemen vor &os; 6.2-RELEASE verwenden Sie hingegen
die folgende Zeile:geli_swap_flags="-a blowfish -l 128 -s 4096 -d"Eine Auflistung möglicher Optionen für den Befehl
onetime finden Sie in der Manualpage zu
&man.geli.8;.Die korrekte Funktion testenNachdem Sie Ihr System neu gestartet haben, können Sie
die korrekte Funktion Ihres verschlüsselten
Auslagerungsspeichers prüfen, indem Sie sich die Ausgabe
von swapinfo ansehen.Wenn Sie &man.gbde.8; einsetzen, erhalten Sie eine
Meldung ähnlich der folgenden:&prompt.user; swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.bde 542720 0 542720 0%
Wenn Sie &man.geli.8; einsetzen, erhalten Sie hingegen
ein Ausgabe ähnlich der folgenden:&prompt.user; swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.eli 542720 0 542720 0%
diff --git a/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml b/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
index 6a2c42c1a5..5859cca712 100644
--- a/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/dtrace/chapter.sgml
@@ -1,31 +1,417 @@
+
+
+
+
+ Tom
+ Rhodes
+ Written by
+
+
+
+
+
+ Benedict
+ Reuschling
+ Übersetzt von
+
+
+ Christoph
+ Sold
+
+
+
+
+ &dtrace;
+
+
+ Überblick
+
+ &dtrace;
+
+ &dtrace; support
+ &dtrace;
+
+
+ &dtrace;, auch bekannt als Dynamic Tracing, wurde von &sun; als ein
+ Werkzeug zur Analyse von Performance-Problemen in Produktiv- und
+ Entwicklungssystemen entwickelt. Es ist kein Debugging-Werkzeug, sondern
+ ein Hilfsmittel für Echtzeit-Systemanalysen.
+
+ &dtrace; ist ein bemerkenswertes Werkzeug zur Profilerstellung, mit
+ einer beeindruckenden Palette von Eigenschaften zur Diagnose von
+ Systemereignissen. Es kann auch dazu verwendet werden, bestehende
+ Skripte ablaufen zu lassen, um einen Nutzen aus deren Möglichkeiten
+ zu ziehen. Nutzer können mittels der Programmiersprache D von
+ &dtrace; ihre eigenen Hilfsmittel schreiben, was es ermöglicht, die
+ eigenen Profile nach Ihren Bedürfnissen anzupassen.
+
+ Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:
+
+
+
+ Was &dtrace; ist und welche Funktionen es zur Verfügung
+ stellt.
+
+
+
+ Unterschiede zwischen der &solaris; &dtrace; Implementierung und
+ derjenigen, die &os; bereitstellt.
+
+
+
+ Wie man &dtrace; auf &os; aktiviert und verwendet.
+
+
+
+ Bevor Sie dieses Kapitel lesen, sollten Sie:
+
+
+
+ &unix; und &os; Grundlagen verstehen ().
+
+
+
+ Einen Kernel konfigurieren und kompilieren können ().
+
+
+
+ Vertraut sein mit Sicherheitsaspekten und wie diese
+ &os; betreffen ().
+
+
+
+ Verstehen, wie man den Quellcode von &os; beziehen und das
+ Betriebssystem neu erstellen kann ().
+
+
+
+
+
+ Diese Funktion ist als experimentell anzusehen. Manche
+ Einstellungen enthalten möglicherweise nicht alle
+ Funktionalitäten, andere Teile könnten gar nicht laufen. Mit
+ der Zeit, wenn diese Funktion als für den Produktivbetrieb
+ geeignet erscheint, wird auch diese Dokumentation geändert, um
+ diesem Umstand gerecht zu werden.
+
+
+
+
+ Unterschiede in der Implementierung
+
+ Obwohl &dtrace; in &os; sehr ähnlich zu dem in &solaris; ist,
+ existieren doch Unterschiede, die vorher erklärt werden müssen.
+ Der Hauptunterschied für die Anwender besteht darin, dass in &os;
+ &dtrace; explizit aktiviert werden muss. Es existieren Kerneloptionen
+ und Module, die aktiviert sein müssen, damit &dtrace; korrekt
+ arbeitet. Diese werden später genauer erlätert.
+
+ Die Kerneloption DDB_CTF wird dafür
+ verwendet, um die Unterstützung im Kernel für das Laden von
+ CTF-Daten aus Kernelmodulen und dem Kernel selbst zu
+ ermöglichen. CTF ist das Compact C Type Format
+ von &solaris;, welches eine reduzierte Form von Debug-Informationen
+ kapselt, ähnlich zu DWARF und den antiken Stabs.
+ Diese CTF-Daten werden dem Binärcode von den
+ ctfconvert und ctfmerge Befehlen
+ den Werkzeugen zum Bauen des Systems hinzugefügt. Das
+ ctfconvert-Dienstprogramm parst die vom Compiler
+ erstellten DWARF ELF
+ Debug-Abschnitte und ctfmerge vereint
+ CTF ELF-Abschnitte aus Objekten,
+ entweder in ausführbare Dateien oder Shared-Libraries. In
+ Kürze erfahren Sie, wie Sie dies für den Kernel und den Bau von
+ &os; aktivieren.
+
+ Einige Provider in &os; unterscheiden sich von der
+ &solaris;-Implementierung. Am deutlichsten wird das beim
+ dtmalloc-Provider, welcher das Aufzeichnen von
+ malloc() nach Typen im &os;-Kernel
+ ermöglicht.
+
+ In &os; darf &dtrace; wegen unterschiedlicher Sicherheitskonzepte
+ nur von root verwendet werden. &solaris;
+ besitzt ein paar Audit-Funktionen auf den unteren Ebenen, die noch nicht
+ in &os; implementiert sind. Deshalb kann nur root
+ auf /dev/dtrace/dtrace zugreifen.
+
+ Zum Schluss muss noch erwähnt werden, dass die &dtrace;-Software
+ unter &sun;s CDDL Lizenz fällt. Die
+ Common Development and Distribution License wird von
+ &os; mitgeliefert, sehen Sie sich dazu
+ /usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE
+ an, oder lesen Sie die Online-Version unter .
+
+ Diese Lizenz bedeutet, dass ein &os;-Kernel mit den &dtrace;-Optionen
+ immer noch BSD-lizenziert ist; allerdings tritt die
+ CDDL in Kraft, wenn Module in Binärform
+ vertrieben werden oder die Binärdateien geladen werden.
+
+
+
+ Die &dtrace; Unterstützung aktivieren
+
+ Um Unterstützung für &dtrace; zu aktivieren, fügen Sie
+ die folgenden Zeilen zu Ihrer Kernelkonfigurationsdatei hinzu:
+
+ options KDTRACE_HOOKS
+options DDB_CTF
+
+
+ Besitzer der AMD-Architektur werden wahrscheinlich noch die
+ folgende Zeile zur Kernelkonfigurationsdatei hinzufügen:
+
+ options KDTRACE_FRAME
+
+ Diese Option liefert die Unterstützung für die
+ FBT-Eigenschaft. &dtrace; wird auch ohne diese
+ Option funktionieren; jedoch wird dann Function Boundary Tracing nur
+ eingeschränkt unterstützt.
+
- DTrace (noch nicht übersetzt)
+ Der gesamte Quellcode muss neu gebaut und mit der
+ CTF-Option installiert werden. Um das zu erreichen,
+ bauen Sie &os; aus dem Quellcode mittels:
- Dieses Kapitel ist noch nicht übersetzt.
- Lesen Sie bitte
- das Original in englischer Sprache. Wenn Sie helfen
- wollen, dieses Kapitel zu übersetzen, senden Sie bitte
- eine E-Mail an die Mailingliste &a.de.translators;.
+
+
+ &prompt.root; cd /usr/src
+
+&prompt.root; make WITH_CTF=1 kernel
+
+
+ Das System muss im Anschluss daran neu gestartet werden.
+
+ Nachdem das System neu gestartet und der neue Kernel in den
+ Hauptspeicher geladen wurde, sollte die Unterstützung für die
+ Korn-Shell hinzugefügt werden. Dies wird benötigt, da die
+ Sammlung von &dtrace;-Werkzeugen mehrere Dienstprogramme enthält,
+ die in ksh implementiert sind. Installieren Sie
+ shells/ksh93. Es ist auch
+ möglich, diese Werkzeuge unter shells/pdksh oder shells/mksh laufen zu lassen.
+
+ Zum Schluss sollten Sie noch den aktuellen &dtrace;-Werkzeugsatz
+ beschaffen. Die aktuelle Version ist unter
+ verfügbar. Ein Mechanismus zur Installation ist enthalten,
+ allerdings ist eine Installation nicht unbedingt nötig, um die darin
+ enthaltenen Dienstprogramme einzusetzen.
+
+
+
+ &dtrace; verwenden
+
+ Bevor die &dtrace;-Funktionaltät benutzt werden kann, muss das
+ &dtrace;-Gerät existieren. Um das Gerät zu laden, geben Sie
+ das folgende Kommando ein:
+
+ &prompt.root; kldload dtraceall
+
+ Die &dtrace;-Unterstützung sollte jetzt verfügbar sein. Um
+ alle Sonden anzuzeigen, kann der Administrator nun den folgenden Befehl
+ eingeben:
+
+ &prompt.root; dtrace -l | more
+
+ Alle Ausgaben werden an das more-Programm
+ übergeben, da der Bildschirmpuffer sehr schnell überlaufen
+ wird. Ab diesem Punkt kann &dtrace; als einsatzbereit angesehen werden.
+ Jetzt ist es an der Zeit, sich näher mit dem Satz von Werkzeugen zu
+ beschäftigen.
+
+ Der Werkzeugsatz ist eine Sammlung von vorgefertigten Skripten, die
+ von &dtrace; ausgeführt werden können, um Systeminformationen
+ zu sammeln. Es gibt Skripte, die offene Dateien überprüfen,
+ den Speicher, CPU-Verbrauch und noch viel mehr.
+ Entpacken Sie die Skripte mit dem folgenden Befehl:
+
+ &prompt.root; gunzip -c DTraceToolkit* | tar xvf -
+
+ Wechseln Sie mit dem cd-Kommando in dieses
+ Verzeichnis und ändern Sie die Berechtigung zum Ausführen von
+ allen Dateien, deren Name klein geschrieben ist, auf
+ 755.
+
+ All diese Skripte müssen inhaltlich verändert werden.
+ Diejenigen, die auf /usr/bin/ksh verweisen,
+ müssen in /usr/local/bin/ksh geändert
+ werden und die Anderen, welche /usr/bin/sh
+ verwenden, müssen so angepasst werden, dass sie
+ /bin/sh verwenden. Schliesslich müssen noch
+ diejenigen, die /usr/bin/perl enthalten, auf
+ /usr/local/bin/perl umgeschrieben werden.
+
+
+ Zu diesem Zeitpunkt ist es klug, den Leser noch einmal daran zu
+ erinnern, dass die Unterstützung von &dtrace; in &os; noch
+ unvollständig und
+ experimentell ist. Viele dieser Skripte werden
+ nicht funktionieren, da diese entweder zu sehr &solaris;-spezifisch
+ sind oder Sonden verwenden, die zur Zeit noch nicht unterstützt
+ werden.
+
+
+ Zum Zeitpunkt, an dem dieses Dokument geschrieben wurde, existieren
+ nur zwei Skripte im &dtrace;-Werkzeugsatz, die von &os; komplett
+ unterstützt werden: die Skripte hotkernel und
+ procsystime. Diese beiden werden in den folgenden
+ Teilen dieses Abschnitts genauer untersucht.
+
+ hotkernel wurde entworfen, um zu identifizieren,
+ welche Funktion die meiste Kernelzeit beansprucht. Normal
+ ausgeführt, wird es Ausgaben ähnlich der Folgenden
+ produzieren:
+
+ &prompt.root; ./hotkernel
+Sampling... Hit Ctrl-C to end.
+
+ Der Systemadministrator muss die Tastenkombination CtrlC
+ drücken, um den Prozess zu stoppen. Nach dem Abbruch wird das
+ Skript eine Liste von Kernelfunktionen und Zeitmessungen ausgeben,
+ aufsteigend sortiert nach den Zeiten:
+
+ kernel`_thread_lock_flags 2 0.0%
+0xc1097063 2 0.0%
+kernel`sched_userret 2 0.0%
+kernel`kern_select 2 0.0%
+kernel`generic_copyin 3 0.0%
+kernel`_mtx_assert 3 0.0%
+kernel`vm_fault 3 0.0%
+kernel`sopoll_generic 3 0.0%
+kernel`fixup_filename 4 0.0%
+kernel`_isitmyx 4 0.0%
+kernel`find_instance 4 0.0%
+kernel`_mtx_unlock_flags 5 0.0%
+kernel`syscall 5 0.0%
+kernel`DELAY 5 0.0%
+0xc108a253 6 0.0%
+kernel`witness_lock 7 0.0%
+kernel`read_aux_data_no_wait 7 0.0%
+kernel`Xint0x80_syscall 7 0.0%
+kernel`witness_checkorder 7 0.0%
+kernel`sse2_pagezero 8 0.0%
+kernel`strncmp 9 0.0%
+kernel`spinlock_exit 10 0.0%
+kernel`_mtx_lock_flags 11 0.0%
+kernel`witness_unlock 15 0.0%
+kernel`sched_idletd 137 0.3%
+0xc10981a5 42139 99.3%
+
+
+
+ Dieses Skript funktioniert auch mit Kernelmodulen. Um diese
+ Eigenschaft zu verwenden, starten Sie das Skript mit dem Parameter
+ :
+
+ &prompt.root; ./hotkernel -m
+Sampling... Hit Ctrl-C to end.
+^C
+MODULE COUNT PCNT
+0xc107882e 1 0.0%
+0xc10e6aa4 1 0.0%
+0xc1076983 1 0.0%
+0xc109708a 1 0.0%
+0xc1075a5d 1 0.0%
+0xc1077325 1 0.0%
+0xc108a245 1 0.0%
+0xc107730d 1 0.0%
+0xc1097063 2 0.0%
+0xc108a253 73 0.0%
+kernel 874 0.4%
+0xc10981a5 213781 99.6%
+
+
+
+ Das procsystime Skript fängt die
+ Systemaufruf-Zeiten ab und zeigt diese für eine gegebene
+ PID oder einen Prozessnamen an. Im folgenden Beispiel
+ wurde eine neue Instanz von /bin/csh erzeugt.
+ procsystime wurde ausgeführt und verbleibt so,
+ während ein paar Befehle in die andere Instanz von
+ csh eingegeben werden. Dies sind die Ergebnisse
+ dieses Versuchs:
+
+ &prompt.root; ./procsystime -n csh
+Tracing... Hit Ctrl-C to end...
+^C
+
+Elapsed Times for processes csh,
+
+ SYSCALL TIME (ns)
+ getpid 6131
+ sigreturn 8121
+ close 19127
+ fcntl 19959
+ dup 26955
+ setpgid 28070
+ stat 31899
+ setitimer 40938
+ wait4 62717
+ sigaction 67372
+ sigprocmask 119091
+ gettimeofday 183710
+ write 263242
+ execve 492547
+ ioctl 770073
+ vfork 3258923
+ sigsuspend 6985124
+ read 3988049784
+
+ Wie aus der Ausgabe ersichtlich ist, verbraucht der
+ read()-Systemaufruf die meiste Zeit in Nanosekunden,
+ während der Systemaufruf getpid() hingegen am
+ schnellsten läft.
+
+
+
+ Die Sprache D
+
+ Der &dtrace; Werkzeugsatz enthält viele Skripte in der
+ speziellen Sprache von &dtrace;. Diese Sprache wird als die D
+ Sprache in der Dokumentation von &sun; bezeichnet und ist C++
+ sehr ähnlich. Eine tiefergehende Betrachtung dieser Sprache
+ würde den Rahmen dieses Dokuments sprengen. Ausführlich wird
+ diese Sprache unter
+ behandelt.
+
-
+
diff --git a/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml b/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml
index 921264646b..2c4deda11c 100644
--- a/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/filesystems/chapter.sgml
@@ -1,662 +1,681 @@
TomRhodesGeschrieben von BenedictReuschlingÜbersetzt von DanielSeuffertDateisystemunterstützungÜbersichtFile SystemsFile Systems SupportFile SystemsDateisysteme sind ein wesentlicher Bestandteil von Betriebssystemen.
Sie erlauben es den Benutzern Dateien zu laden und zu speichern,
ermöglichen den Zugriff auf die Daten und machen Festplatten
überhaupt erst nützlich. Unterschiedliche Betriebssysteme
besitzen normalerweise eine Gemeinsamkeit, nämlich deren
mitgeliefertes Dateisystem. Bei &os; ist dieses Dateisystem bekannt
unter dem Namen Fast File System FFS, das direkt auf
dem Original-Unix™ Dateisystem, UFS genannt,
basiert. Dieses ist das von &os; mitgelieferte Dateisystem, das auf
Festplatten für den Dateizugriff verwendet wird.&os; unterstützt auch eine Vielzahl von anderen Dateisystemen,
um auf Daten von anderen Betriebssystemen lokal zuzugreifen, wie z.B.
Daten auf USB-Speichermedien, Flash-Speichern und
Festplatten. Es gibt auch Unterstützung für fremde
Dateisysteme. Dabei handelt es sich um Dateisysteme, die auf anderen
Betriebssystemen entwickelt wurden, wie beispielsweise das &linux;
Extended File System (EXT) und das Z-Dateisystem
(ZFS) von &sun;.Es gibt verschiedene Stufen der Unterstützung in &os;
für diese unterschiedlichen Dateisysteme. Manche benötigen ein
geladenes Kernelmodul, andere die Installation bestimmter Werkzeuge.
Dieses Kapitel dient dazu, den Benutzern von &os; dazu helfen, auf andere
Dateisysteme zuzugreifen, beginnend mit &sun;s Z-Dateisystem (ZFS).Nachdem Sie dieses Kapitel gelesen haben, werden Sie die folgenden
Dinge wissen:Den Unterschied zwischen eingebauten und unterstützten
Dateisystemen.Welche Dateisysteme von &os; unterstützt werden.Wie man fremde Dateisysteme aktiviert, konfiguriert, darauf
zugreift und diese verwendet.Bevor Sie dieses Kapitel lesen, sollten Sie:Grundlagen von &unix; und &os; verstehen
().Mit den Grundlagen der Konfiguration und dem Bauen des Kernels
vertraut sein ().Problemlos Software von Drittherstellern in &os; installieren
können ().sich ein wenig mit Festplatten, Speicher und Gerätenamen
in &os; auskennen ().Die ZFS-Funktionen sind als experimentell
zu betrachten. Manchen Optionen werden möglicherweise bestimmte
Funktionalitäten fehlen, andere funktionieren eventuell gar
nicht. Mit der Zeit werden diese Eigenschaften als für den
Produktivbetrieb geeignet erachtet werden und dann wird diese
Dokumentation entsprechend geändert, um diesem Zustand
gerecht zu werden.Das Z-Dateisystem (ZFS)Das Z-Dateisystem ist eine neue von &sun; entwickelte Technologie,
mit dem Konzept einer gepoolten Speichermethodik. Das bedeutet, dass
Speicher nur verwendet wird, wenn dieser als Datenspeicher benutzt wird.
ZFS wurde auch für maximale Datenintegrität entwickelt und
unterstützt dabei mehrfache Kopien, Schnappschüsse und
Prüfsummen für Daten. Ein neues Datenreplikationsmodell,
bekannt als RAID-Z, wurde ebenfalls hinzugefügt.
Das RAID-Z-Modell ist ähnlich zu
RAID5, wurde aber mit dem Ziel entworfen,
Datenverfälschung beim Schreiben zu verhindern.ZFS EinstellungenDas ZFS-Teilsystem benötigt viele
Systemressourcen, weshalb gewisse Einstellungen notwendig sind, um
maximale Effizienz während des täglichen Gebrauchs zu
gewährleisten. Da es sich um eine experimentelle Funktion in &os;
handelt, wird sich das in naher Zukunft ändern. Wie dem auch sei,
zum gegenwärtigen Zeitpunkt wird die Anwendung der folgenden
Schritte empfohlen.HauptspeicherDer verfügbare Hauptspeicher im System sollte mindestens
1 Gigabyte betragen, jedoch werden 2 Gigabyte oder mehr
empfohlen. In allen gezeigten Beispielen in diesem Abschnitt
verwendet das System 1 Gigabyte Hauptspeicher mit mehreren
anderen Einstellungen.Manche Nutzer hatten Erfolg bei der Verwendung von weniger
als 1 GB Hauptspeicher, aber mit dieser begrenzten Menge an RAM
ist es sehr wahrscheinlich, dass &os; eine Panic wegen
erschöpftem Hauptspeicher erleiden wird, wenn es hohen
Belastungen ausgesetzt ist.KernelkonfigurationEs wird vorgeschlagen, nicht benötigte Treiber und Optionen
aus der Kernelkonfigurationsdatei zu entfernen. Da die meisten
Geräte als Module verfügbar sind, können diese einfach
mittels der Datei /boot/loader.conf geladen
werden.Nutzer der &i386;-Architektur sollten die folgende Option in
ihrer Kernelkonfigurationsdatei hinzufügen, den Kernel neu
erstellen und anschliessend das System neustarten:options KVA_PAGES=512Diese Option wird den Adressraum des Kernels vergrössern,
was es ermöglicht, die Einstellung vm.kvm_size
über die momentan verhängte Grenze von 1 GB
(2 GB für PAE) zu erhöhen. Um den
passenden Wert dieser Option zu ermitteln, teilen Sie den
gewünschten Adressraum in Megabyte durch vier. In diesem Fall
beträgt er 512 für 2 GB.Einstellungen des LoadersDer kmem-Addressraum sollte auf allen
&os;-Architekturen erhöht werden. Die folgende Option, die dem
Testsystem mit einem Gigabyte Hauptspeicher der Datei
/boot/loader.conf hinzugefügt und welches
anschliessend neu gestartet wurde, war erfolgreich:vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"Eine detailliertere Liste von Vorschlägen zu ZFS-verwandten
Einstellungen finden Sie unter .Verwenden von ZFSEs existiert ein Startmechanismus, der es &os; erlaubt,
ZFS als Pool während des Systemstarts
zu initialisieren. Um das zu tun, geben Sie die folgenden Befehle
ein:&prompt.root; echo 'zfs_enable="YES"' >> /etc/rc.conf
&prompt.root; /etc/rc.d/zfs start
- Für den Rest dieses Dokuments wird angenommen, dass zwei
+ Für den Rest dieses Dokuments wird angenommen, dass drei
SCSI-Platten im System verfügbar sind und
dass deren Gerätenamen
- da0 und
- da1 lauten.
+ da0,
+ da1 und
+ da2 lauten.
Benutzer von IDE-Hardware können
ad-Geräte
an Stelle von SCSI-Hardware einsetzen.Pool mit nur einer Platte
- Um ein ZFS auf einer einzelnen Festplatte
- zu erstellen, benutzen Sie das
+ Um ein einfaches, nicht-redundantes ZFS auf
+ einer einzelnen Festplatte zu erstellen, benutzen Sie das
zpool-Kommando:&prompt.root; zpool create example /dev/da0Um den neuen Pool anzusehen, überprüfen Sie die
Ausgabe von df:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235230 1628718 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032846 48737598 2% /usr
example 17547136 0 17547136 0% /exampleDiese Ausgabe zeigt deutlich, dass der
example-Pool nicht nur erstellt, sondern auch
gemountet wurde. Er ist genau wie andere
Dateisysteme verfügbar, Dateien können darin erstellt und
von den Benutzern aufgelistet werden, wie im folgenden Beispiel
gezeigt wird:&prompt.root cd /example
&prompt.root; ls
&prompt.root; touch testfile
&prompt.root; ls -al
total 4
drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .
drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..
-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfileLeider verwendet dieser Pool keine der Vorteile der
ZFS-Eigenschaften. Erstellen Sie ein Dateisystem
auf diesem Pool und aktivieren Sie die Komprimierung darauf:&prompt.root; zfs create example/compressed
&prompt.root; zfs set compression=gzip example/compressedJetzt ist example/compressed ein von
ZFS komprimiertes Dateisystem. Versuchen Sie, ein
paar grosse Dateien in das Verzeichnis /example/compressed zu kopieren.Die Komprimierung kann jetzt deaktiviert werden mittels:&prompt.root; zfs set compression=off example/compressedUm das Dateisystem aus dem Verzeichnisbaum abzuhängen, geben
Sie den folgenden Befehl ein und vergewissern Sie sich über
df vom Erfolg dieser Aktion:&prompt.root; zfs umount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235232 1628716 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /exampleMounten Sie das Dateisystem erneut, um es wieder verfügbar
zu machen und bestätigen Sie mit df:&prompt.root; zfs mount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressedDer Pool und das Dateisystem können genausogut über die
Ausgabe von mount überwacht werden:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
example on /example (zfs, local)
example/data on /example/data (zfs, local)
example/compressed on /example/compressed (zfs, local)Wie zu beobachten ist, können
ZFS-Dateisysteme nach deren Erstellung genauso
wie normale Dateisysteme verwendet werden, jedoch sind auch noch viele
andere Eigenschaften verfügbar. Im folgenden Beispiel wird ein
neues Dateisystem, data, erstellt. Wichtige
Dateien sollen hier gespeichert werden, weshalb das Dateisystem
angewiesen wird, jeweils zwei Kopien jedes Datenblocks zu
unterhalten:&prompt.root; zfs create example/data
&prompt.root; zfs set copies=2 example/dataEs ist nun möglich, den Speicherplatzverbrauch der Daten
mittels df erneut zu betrachten:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressed
example/data 17547008 0 17547008 0% /example/dataBeachten Sie, dass jedem Dateisystem des Pools die gleiche Menge
an Speicher zur Verfügung steht. Das ist der Grund für die
Verwendung von df in all diesen Beispielen, da es
zeigt, dass das Dateisystem nur den Speicher belegt, den es auch
benötigt und alles wird von dem gleichen Pool abgezogen.
ZFS macht Konzepte wie Volumen und Partitionen
überflüssig und erlaubt mehrere Dateisysteme auf demselben
Pool. Zerstören Sie die Datensysteme und anschliessend den Pool,
da sie nicht länger gebraucht werden:&prompt.root; zfs destroy example/compressed
&prompt.root; zfs destroy example/data
&prompt.root; zpool destroy exampleFestplatten werden mit der Zeit schlechter und fallen aus, eine
unvermeidliche Tatsache. Wenn diese Platte ausfällt, sind die
Daten verloren. Eine Möglichkeit, diesen Datenverlust beim
Plattenausfall zu vermeiden, ist die Verwendung von
RAID. ZFS unterstützt
diese Eigenschaft im Entwurf seiner Pools und wird im nächsten
Abschnitt behandelt.ZFS RAID-ZWie zuvor bereits erwähnt, wird in diesem Abschnitt
- angenommen, dass zwei SCSI-Geräte vorhanden
- sind (da0 und da1).
- Um einen RAID-Z Pool zu erstellen, geben Sie das
+ angenommen, dass drei SCSI-Geräte vorhanden
+ sind (da0, da1
+ und da1 bzw. ad0
+ und so weiter, falls IDE-Platten verwendet werden). Um einen
+ RAID-Z Pool zu erstellen, geben Sie das
folgende Kommando ein:
- &prompt.root; zpool create storage raidz da0 da1
+ &prompt.root; zpool create storage raidz da0 da1 da2
+
+
+ &sun; empfiehlt, dass die Anzahl von Geräten in einer
+ RAID-Z Konfiguration drei bis neun beträgt.
+ Falls Ihre Anforderungen unbedingt einen einzelnen Pool, bestehend
+ aus zehn oder mehr Platten, erfordern, sollten Sie überlegen,
+ diesen in kleinere RAID-Z Gruppen aufzuteilen.
+ Sollten Sie nur zwei Platten zur Verfügung haben und trotzdem
+ Redundanz benötigen, ziehen Sie den Einsatz der
+ ZFS-Mirror (Spiegel) Fähigkeiten in
+ Betracht. Lesen Sie die &man.zpool.8; Manualpage, um mehr
+ darüber zu erfahren.
+ Der storage-zPool sollte jetzt erstellt worden
sein. Sie können das überprüfen, indem Sie die Befehle
&man.mount.8; und &man.df.1; wie zuvor verwenden. Weitere
Plattenspeicher können an das Ende der oben stehenden Liste
hinzugefügt werden. Erstellen Sie ein neues Dateisystem in dem
Pool, home genannt, in dem später Dateien von
Benutzern platziert werden:&prompt.root; zfs create storage/homeNun kann die Komprimierung aktiviert und zusätzliche
Kopien der Benutzerverzeichnisse und der darin enthaltenen Dateien
angelegt werden. Dies geschieht über die gleichen Befehle
wie bereits zuvor:&prompt.root; zfs set copies=2 storage/home
&prompt.root; zfs set compression=gzip storage/homeUm dieses Verzeichnis als neues Benutzerverzeichnis zu verwenden,
kopieren Sie die Nutzerdaten dort hin und erstellen Sie die
entsprechenden Symlinks:&prompt.root; cp -rp /home/* /storage/home
&prompt.root; rm -rf /home /usr/home
&prompt.root; ln -s /storage/home /home
&prompt.root; ln -s /storage/home /usr/homeAnwender sollten jetzt ihre Daten in dem neu angelegten /storage/home Dateisystem auffinden.
Prüfen Sie das, indem Sie einen neuen Benutzer hinzufügen
und sich als dieser Benutzer am System anmelden.Versuchen Sie, einen Schnappschuss anzulegen, der später
wieder zurückgerollt werden kann:&prompt.root; zfs snapshot storage/home@08-30-08Beachten Sie, dass die Schnappschuss-Option nur auf echte
Dateisysteme, jedoch nicht auf Verzeichnisse oder eine Datei
angewendet werden kann. Das @-Zeichen dient als
Begrenzer zwischen dem Dateisystem- oder Volumenamen. Wenn ein
Benutzerverzeichnis zerstört wird, können Sie es über
den folgenden Befehl wieder herstellen:&prompt.root; zfs rollback storage/home@08-30-08Um eine Liste von allen verfügbaren Schnappschüssen zu
erhalten, starten Sie das ls-Kommando in
Verzeichnis .zfs/snapshot des entsprechenden
Dateisystems. Beispielsweise können Sie den vorhin angelegten
Schnappschuss mit dem folgenden Befehl auflisten:&prompt.root; ls /storage/home/.zfs/snapshotEs ist möglich ein Skript zu schreiben, dass monatliche
Schnappschüsse der Nutzerdaten anlegt. Allerdings werden die
Schnappschüsse mit der Zeit eine grosse Menge an Speicherplatz
einnehmen. Den vorherigen Schnappschuss können Sie über
das folgende Kommando löschen:&prompt.root; zfs destroy storage/home@08-30-08Nach all diesen Tests gibt es keinen Grund, das Verzeichnis
/storage/home noch länger in seinem
momentanen Zustand zu belassen. Ernennen Sie es zum echten /home-Dateisystem:&prompt.root; zfs set mountpoint=/home storage/homeDie Eingabe der Befehle df und
mount zeigt, dass das System das Dateisystem nun
als das echte /home
behandelt:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
storage on /storage (zfs, local)
storage/home on /home (zfs, local)
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235240 1628708 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032826 48737618 2% /usr
-storage 17547008 0 17547008 0% /storage
-storage/home 17547008 0 17547008 0% /home
+storage 26320512 0 26320512 0% /storage
+storage/home 26320512 0 26320512 0% /home
Damit ist die RAID-Z-Konfiguration
abgeschlossen. Um über den Status des Dateisystems mittels des
nächtlichen &man.periodic.8;-Skripts auf dem Laufenden gehalten
zu werden, geben Sie das folgende Kommando ein:&prompt.root; echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.confWiederherstellung von RAID-ZJedes Software-RAID besitzt Verfahren, um
dessen Zustand zu überwachen.
ZFS ist da keine Ausnahme. Der Status von
RAID-Z Geräten kann mittels des folgenden
Kommandos betrachtet werden:&prompt.root; zpool status -xWenn alle Pools gesund sind und alles normal ist, wird die
folgende Nachricht zurückgegeben:all pools are healthyWenn ein Problem existiert (möglicherweise ist eine Platte
ausgefallen), wird der Zustand des Pools ähnlich dem Folgenden
ausgegeben: pool: storage
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
storage DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
da0 ONLINE 0 0 0
da1 OFFLINE 0 0 0
+ da2 ONLINE 0 0 0
errors: No known data errorsDas bedeutet, dass das Gerät vom Systemadministrator
abgeschaltet wurde. In diesem Fall trifft das zu. Um eine Platte
abzuschalten, wurde das folgende Kommando eingegeben:&prompt.root; zpool offline storage da1Es ist jetzt möglich, da1 zu
ersetzen, nachdem das System ausgeschaltet wurde. Wenn das System
wieder läuft, kann der folgende Befehl benutzt werden, um die
Platte zu ersetzen:&prompt.root; zpool replace storage da1Von da an kann der Status erneut überprüft werden,
jedoch dieses Mal ohne die Option , um die
Zustandsinformation zu bekommen:&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
+ da2 ONLINE 0 0 0
errors: No known data errorsWie in diesem Beispiel gezeigt, scheint alles wieder normal zu
sein.DatenüberprüfungWie bereits erwähnt, verwendet ZFS
Prüfsummen, um die Integrität der
gespeicherten Daten zu verifizieren. Die Prüfsummen werden
automatisch beim Erstellen des Dateisystem aktiviert und können
über den folgenden Befehl deaktiviert werden:&prompt.root; zfs set checksum=off storage/homeDas ist jedoch kein schlauer Einfall, da die Prüfsummen nur
ganz wenig Speicherplatz einnehmen und viel nützlicher sind,
wenn Sie aktiviert bleiben. Es scheint auch kein nennenswerter
Ressourcenverbrauch mit deren Aktivierung verbunden zu sein. Wenn die
Prüfsummen aktiv sind, kann ZFS die
Datenintegrität über den Vergleich der Prüfsummen
gewährleisten. Dieser Prozess wird als reinigen
bezeichnet. Um die Datenintegrität des
storage-Pools zu überprüfen, geben Sie
den folgenden Befehl ein:&prompt.root; zpool scrub storageDieser Prozess kann einige Zeit in Anspruch nehmen, abhängig
davon, wieviele Daten gespeichert sind. Es handelt sich dabei auch
um eine I/O-intensive Aktion, weshalb auch jeweils
nur eine dieser Operationen durchgeführt werden darf. Nachdem
die Reinigung abgeschlossen ist, wird der Status aktualisiert und
kann über eine Statusabfrage eingesehen werden:&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
+ da2 ONLINE 0 0 0
errors: No known data errorsDie Zeit des Abschlusses der Aktion kann in diesem Beispiel direkt
abgelesen werden. Die Prüfsummen helfen dabei, sicherzustellen,
dass die Datenintegrität über einen langen Zeitraum hinaus
erhalten bleibt.Es gibt viele weitere Optionen für das Z-Dateisystem, lesen
Sie dazu die Manualpage &man.zfs.8; und &man.zpool.8;.
diff --git a/de_DE.ISO8859-1/books/handbook/introduction/chapter.sgml b/de_DE.ISO8859-1/books/handbook/introduction/chapter.sgml
index 205ccb7ab3..673974d115 100644
--- a/de_DE.ISO8859-1/books/handbook/introduction/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/introduction/chapter.sgml
@@ -1,1283 +1,1291 @@
JimMockNeu zusammengestellt, umstrukturiert und um
Abschnitte erweitert durch SaschaEdelburgÜbersetzt von EinführungÜbersichtHerzlichen Dank für Ihr Interesse an &os;! Das
folgende Kapitel behandelt verschiedene Aspekte des
&os; Projects wie dessen geschichtliche Entwicklung,
dessen Ziele oder dessen Entwicklungsmodell.Nach dem Durcharbeiten des Kapitels wissen Sie über
folgende Punkte Bescheid:Wo &os; im Vergleich zu anderen Betriebssystemen
stehtDie Geschichte des &os; ProjectsDie Ziele des &os; ProjectsDie Grundlagen des
&os;-Open-Source-EntwicklungsmodellsUnd natürlich wo der Name &os;
herrührtWillkommen bei &os;!4.4BSD-Lite&os; ist ein auf 4.4BSD-Lite basierendes Betriebssystem
für Intel (x86 und &itanium;), AMD64, Alpha
und Sun &ultrasparc; Rechner. An
Portierungen zu anderen Architekturen wird derzeit gearbeitet.
Mehr zu Geschichte von &os; können Sie im kurzen geschichtlichen Abriss zu &os;
oder im Abschnitt Das aktuelle
&os;-Release nachlesen.
Falls Sie das &os; Project unterstützen wollen
(mit Quellcode, Hardware- oder Geldspenden), sollten Sie den
Artikel
&os; unterstützen lesen.Was kann &os;?&os; hat zahlreiche bemerkenswerte Eigenschaften.
Um nur einige zu nennen:Präemptives MultitaskingPräemptives Multitasking mit
dynamischer Prioritätsanpassung zum reibungslosen und
ausgeglichenen Teilen der Systemressourcen zwischen
Anwendungen und Anwendern, selbst unter schwerster
Last.MehrbenutzerbetriebDer Mehrbenutzerbetrieb von
&os; erlaubt es, viele Anwender gleichzeitig am System
mit verschiedenen Aufgaben arbeiten zu lassen.
Beispielsweise Geräte wie Drucker oder Bandlaufwerke,
die sich nur schwerlich unter allen Anwendern des Systems
oder im Netzwerk teilen lassen, können durch Setzen
von Verwendungsbeschränkungen auf Benutzer oder
Benutzergruppen wichtige Systemressourcen vor
Überbeanspruchung schützen.TCP/IP-NetzwerkfähigkeitHervorragende
TCP/IP-Netzwerkfähigkeit mit
Unterstützung von Industriestandards wie SCTP, DHCP,
NFS, NIS, PPP, SLIP, IPsec und IPv6. Das heißt,
Ihr &os;-System kann in einfachster Weise mit anderen
Systemen interagieren. Zudem kann es als Server-System im
Unternehmen wichtige Aufgaben übernehmen,
beispielsweise als NFS- oder E-Mail-Server oder es kann
Ihren Betrieb durch HTTP- und FTP-Server beziehungsweise
durch Routing und Firewalling Internet-fähig machen.SpeicherschutzDer Speicherschutz stellt sicher,
dass Anwendungen (oder Anwender) sich nicht gegenseitig
stören. Stürzt eine Anwendung ab, hat das
keine Auswirkung auf andere Prozesse.&os; ist ein
32-Bit-Betriebssystem
(64-Bit auf Alpha, &itanium;, AMD64,
und &ultrasparc;) und wurde als solches von Grund auf
neu entworfen.X-Window-SystemXFree86Das X-Window-System (X11R7) als
Industriestandard bietet eine grafische Benutzeroberfläche
(GUI). Minimale Voraussetzung zur Verwendung ist
lediglich eine Grafikkarte und ein Bildschirm, die beide
den VGA-Modus unterstützen.BinärkompatibilitätLinuxBinärkompatibilitätSCOBinärkompatibilitätSVR4BinärkompatibilitätBSD/OSBinärkompatibilitätNetBSDBinärkompatibilität mit
vielen unter verschiedenen Betriebssystemen erstellten
Programmen wie Linux, SCO, SVR4, BSDI und NetBSD.Tausende von sofort
lauffähigen Anwendungen sind aus den
Ports- und
Packages-Sammlungen für &os;
verfügbar. Warum mühselig im Netz Software
suchen, wenn sie bereits hier vorhanden ist?Tausende zusätzliche leicht zu
portierende Anwendungen sind über das
Internet zu beziehen. &os; ist Quellcode-kompatibel
mit den meisten kommerziellen &unix; Systemen. Daher
bedürfen Anwendungen häufig nur geringer oder
gar keiner Anpassung, um auf einem &os;-System zu
kompilieren.virtueller SpeicherSeitenweise anforderbarer Virtueller
Speicher und der merged VM/buffer
cache-Entwurf bedient effektiv den großen
Speicherhunger mancher Anwendungen bei gleichzeitigem
Aufrechterhalten der Bedienbarkeit des Systems für
weitere Benutzer.Symmetrisches Multi-Processing (SMP)SMP-Unterstützung für
MehrprozessorsystemeKompilerCKompilerC++KompilerFORTRANEin voller Satz von C,
C++ und Fortran-
Entwicklungswerkzeugen. Viele
zusätzliche Programmiersprachen für Wissenschaft
und Entwicklung sind aus der Ports- und Packages-Sammlung
zu haben.QuellcodeQuellcode für das gesamte
System bedeutet größtmögliche Kontrolle
über Ihre Umgebung. Warum sollte man sich durch
proprietäre Lösungen knebeln und sich auf Gedeih
und Verderb der Gnade eines Herstellers ausliefern, wenn
man doch ein wahrhaft offenes System haben kann?Umfangreiche
Online-Dokumentation.4.4BSD-LiteComputer Systems Research Group (CSRG)U.C. Berkeley&os; basiert auf dem 4.4BSD-Lite-Release der Computer
Systems Research Group (CSRG) der Universität von
Kalifornien in Berkeley und führt die namhafte
Tradition der Entwicklung von BSD-Systemen fort.
Zusätzlich zu der herausragenden Arbeit der CSRG hat das
&os; Project tausende weitere Arbeitsstunden investiert,
um das System zu verfeinern und maximale Leistung und
Zuverlässigkeit bei Alltagslast zu bieten. Während
viele kommerzielle Riesen Probleme haben PC-Betriebssysteme
mit derartigen Funktionen, Leistungpotential und
Zuverlässigkeit anzubieten, kann &os; damit schon
jetzt aufwarten! Die Anwendungsmöglichkeiten von &os; werden nur
durch Ihre Vorstellungskraft begrenzt. Von
Software-Entwicklung bis zu Produktionsautomatisierung, von
Lagerverwaltung über Abweichungskorrektur bei Satelliten;
Falls etwas mit kommerziellen &unix; Produkten machbar ist, dann
ist es höchstwahrscheinlich auch mit &os;
möglich. &os; profitiert stark von tausenden
hochwertigen Anwendungen aus wissenschaftlichen Instituten und
Universitäten in aller Welt. Häufig sind diese
für wenig Geld oder sogar kostenlos zu bekommen.
Kommerzielle Anwendungen sind ebenso verfügbar und es
werden täglich mehr.Durch den freien Zugang zum Quellcode von &os; ist es
in unvergleichbarer Weise möglich, das System für
spezielle Anwendungen oder Projekte anzupassen. Dies ist
mit den meisten kommerziellen Betriebssystemen einfach nicht
möglich. Beispiele für Anwendungen, die unter
&os; laufen, sind:Internet-Dienste: Die robuste
TCP/IP-Implementierung in &os; macht es zu einer
idealen Plattform für verschiedenste
Internet-Dienste, wie zum Beispiel:FTP-ServerFTP-ServerHTTP-ServerHTTP-Server (Standard-Web-Server oder mit
SSL-Verschlüsselung)IPv4- und IPv6-RoutingFirewallNATFirewalls und NAT-Gateways
(IP-Masquerading)E-MailE-Mail-ServerUsenetUsenet-News und Foren (BBS)Zum Betreiben von &os; reicht schon ein
günstiger 386-PC. Wenn es das Wachstum Ihres
Unternehmens verlangt, kann &os; aber auch auf einem
hochgerüsteten 4-Wege-System mit Xeon-Prozessoren
und RAID-Plattenspeicher Verwendung finden.Bildung: Sind Sie
Informatikstudent oder Student eines verwandten
Studiengangs? Die praktischen Einblicke in &os; sind
die beste Möglichkeit etwas über Betriebssysteme,
Rechnerarchitektur und Netzwerke zu lernen. Einige frei
erhältliche CAD-, mathematische und grafische Anwendungen
sind sehr nützlich, gerade für diejenigen, die
&os; nicht zum Selbstzweck, sondern als
Arbeitsmittel einsetzen.Wissenschaft: Mit dem frei
verfügbaren Quellcode für das gesamte System
bildet &os; ein exzellentes Studienobjekt in der
Disziplin der Betriebssysteme, wie auch in anderen Zweigen
der Informatik. Es ist beispielsweise denkbar, das
räumlich getrennte Gruppen gemeinsam an einer Idee
oder Entwicklung arbeiten. Das Konzept der freien
Verfügbarkeit und -nutzung von &os;
ermöglicht so einen Gebrauch, auch ohne sich
groß Gedanken über Lizenzbedingungen oder
-beschränkungen machen zu müssen.RouterDNS-ServerNetzwerkfähigkeit: Brauchen
Sie einen neuen Router? Oder einen Name-Server (DNS)? Eine
Firewall zum Schutze Ihres Intranets vor Fremdzugriff?
&os; macht aus dem in der Ecke verstaubenden 386- oder
486-PC im Handumdrehen einen leistungsfähigen Router
mit anspruchsvollen Packet-Filter-Fähigkeiten.X-Window-SystemXFree86X-Window-SystemAccelerated-XX-Window-Workstation: &os; ist
eine gute Wahl für kostengünstige X-Terminals
mit dem frei verfügbaren X11-Server.
Im Gegensatz zu einem X-Terminal erlaubt es &os;, viele
Anwendungen lokal laufen zu lassen, was die Last eines
zentralen Servers erleichtern kann. &os; kann selbst
plattenlos starten, was einzelne
Workstations noch günstiger macht und die Wartung
erleichtert.GNU-Compiler-CollectionSoftware-Entwicklung: Das
Standard-System von &os; wird mit einem kompletten Satz
an Entwicklungswerkzeugen bereitgestellt, unter anderem
mit dem bekannten GNU C/C++-Kompiler und -Debugger.&os; ist sowohl in Form von Quellcode als auch in
Binärform auf CD-ROM, DVD und über anonymous FTP
erhältlich. Näheres zum Bezug von &os;
enthält .Wer benutzt &os;?AnwenderBekannte &os;-Anwender&os; dient als Plattform für Geräte und Produkte
einiger der weltgrößten IT-Firmen, darunter:AppleAppleCiscoCiscoJuniperJuniperNetAppNetAppAußerdem laufen einige der größten
Internet-Auftritte unter &os;, beispielsweise:Yahoo!Yahoo!Yandex/primary>YandexApacheApacheRamblerRamblerSinaSinaPair NetworksPair
NetworksSony JapanSony
JapanNetcraftNetcraft
+
+ NetEase
+
+
+
+ NetEase
+
+
WeathernewsWeathernewsTELEHOUSE AmericaTELEHOUSE
AmericaDas &os; ProjectDer folgende Abschnitt bietet einige
Hintergrundinformationen zum &os; Project,
einschließlich einem kurzen geschichtlichen Abriss,
den Projektzielen und dem Entwicklungsmodell.JordanHubbardBeigesteuert von Kurzer geschichtlicher Abriss zu &os;386BSD PatchkitHubbard, JordanWilliams, NateGrimes, Rod&os; ProjectGeschichteDas &os; Project erblickte das Licht der Welt Anfang
1993 teils als Auswuchs des Unofficial 386BSD
Patchkit unter der Regie der letzten drei
Koordinatoren des Patchkits: Nate Williams, Rod Grimes und
mir.386BSDUnser eigentliches Ziel war es, einen zwischenzeitlichen
Abzug von 386BSD zu erstellen, um ein paar Probleme zu
beseitigen, die das Patchkit-Verfahren nicht lösen
konnte. Einige von Ihnen werden sich in dem Zusammenhang noch
an die frühen Arbeitstitel 386BSD 0.5 oder
386BSD Interim erinnern.Jolitz, Bill386BSD war das Betriebssystem von Bill Jolitz. Dieses
litt bis zu diesem Zeitpunkt heftig unter fast
einjähriger Vernachlässigung. Als das Patchkit mit
jedem Tag anschwoll und unhandlicher wurde, waren wir
einhellig der Meinung, es müsse etwas geschehen. Wir
entschieden uns Bill Jolitz zu helfen, indem wir den
übergangsweise bereinigten Abzug zur
Verfügung stellten. Diese Pläne wurden unschön
durchkreuzt als Bill Jolitz plötzlich seine Zustimmung
zu diesem Projekt zurückzog, ohne einen Hinweis darauf,
was stattdessen geschehen sollte.Greenman, DavidWalnut Creek CDROMEs hat nicht lange gedauert zu entscheiden, dass das Ziel
es wert war, weiterverfolgt zu werden, selbst ohne Bills
Unterstützung. Also haben wir den von David Greenman
geprägten Namen &os; angenommen.
Unsere anfänglichen Ziele setzten wir nach
Rücksprache mit den damaligen Benutzern des Systems fest.
Und als deutlich wurde, das Projekt würde
möglicherweise Realität, nahm ich Kontakt mit Walnut
Creek CDROM auf, mit einem Auge darauf, den Vertriebsweg
für die vielen Missbegünstigten zu verbessern,
die keinen einfachen Zugang zum Internet hatten. Walnut Creek
CDROM unterstützte nicht nur die Idee des
CD-ROM-Vertriebs, sondern stellte sogar dem Projekt einen
Arbeitsrechner und eine schnelle Internetverbindung zur
Verfügung. Ohne den beispiellosen Glauben von Walnut
Creek CDROM in ein zu der Zeit absolut unbekanntes Projekt,
gäbe es &os; in der heutigen Form wohl nicht.4.3BSD-LiteNet/2U.C. Berkeley386BSDFree Software FoundationDie erste auf CD-ROM (und netzweit) verfügbare
Veröffentlichung war &os; 1.0 im Dezember
1993. Diese basierte auf dem Band der 4.3BSD-Lite
(Net/2) der Universität von Kalifornien in
Berkeley. Viele Teile stammten aus 386BSD und von der Free
Software Foundation. Gemessen am ersten Angebot, war
das ein ziemlicher Erfolg und wir ließen dem das extrem
erfolgreiche &os; 1.1 im Mai 1994 folgen.NovellU.C. BerkeleyNet/2AT&TZu dieser Zeit formierten sich unerwartete Gewitterwolken am
Horizont, als Novell und die Universität von Kalifornien
in Berkeley (UCB) ihren langen Rechtsstreit über den
rechtlichen Status des Berkeley Net/2-Bandes mit einem
Vergleich beilegten. Eine Bedingung dieser Einigung war es,
dass die UCB große Teile des Net/2-Quellcodes als
belastet zugestehen musste, und dass diese
Besitz von Novell sind, welches den Code selbst einige Zeit vorher
von AT&T bezogen hatte. Im Gegenzug bekam die UCB den
Segen von Novell, dass sich das 4.4BSD-Lite-Release
bei seiner endgültigen Veröffentlichung als
unbelastet bezeichnen darf. Alle Net/2-Benutzer sollten
auf das neue Release wechseln. Das betraf auch &os;. Dem
Projekt wurde eine Frist bis Ende Juli 1994 eingeräumt,
das auf Net/2-basierende Produkt nicht mehr zu vertreiben.
Unter den Bedingungen dieser Übereinkunft war es dem
Projekt noch erlaubt ein letztes Release vor diesem
festgesetzten Zeitpunkt herauszugeben. Das war
&os; 1.1.5.1.&os; machte sich dann an die beschwerliche Aufgabe,
sich Stück für Stück, aus einem neuen und
ziemlich unvollständigen Satz von 4.4BSD-Lite-Teilen,
wieder aufzubauen. Die
Lite-Veröffentlichungen waren deswegen
leicht, weil Berkeleys CSRG große Code-Teile,
die für ein start- und lauffähiges System gebraucht
wurden, aufgrund diverser rechtlicher Anforderungen entfernen
musste und weil die 4.4-Portierung für Intel-Rechner extrem
unvollständig war. Das Projekt hat bis November 1994
gebraucht diesen Übergang zu vollziehen, was dann zu dem
im Netz veröffentlichten &os; 2.0 und zur
CD-ROM-Version (im späten Dezember) führte. Obwohl
&os; gerade die ersten Hürden genommen hatte, war
dieses Release ein maßgeblicher Erfolg. Diesem folgte
im Juni 1995 das robustere und einfacher zu installierende
&os; 2.0.5.Im August 1996 veröffentlichten wir
&os; 2.1.5. Es schien unter ISPs und der Wirtschaft
beliebt genug zu sein, ein weiteres Release aus dem
2.1-STABLE-Zweig zu rechtfertigen. Das war
&os; 2.1.7.1. Es wurde im Februar 1997
veröffentlicht und bildete das Ende des
Hauptentwicklungszweiges 2.1-STABLE. Derzeit unterliegt
dieser Zweig dem Wartungsmodus, das heißt, es werden nur
noch Sicherheitsverbesserungen und die Beseitigung von
kritischen Fehlern vorgenommen (RELENG_2_1_0).&os; 2.2 entsprang dem Hauptentwicklungszweig
(-CURRENT) im November 1996 als
RELENG_2_2-Zweig und das erste komplette Release (2.2.1) wurde
im April 1997 herausgegeben. Weitere Veröffentlichungen
des 2.2-Zweiges gab es im Sommer und Herbst 1997. Das letzte
Release des 2.2-Zweiges bildete die Version 2.2.8, die im
November 1998 erschien. Das erste offizielle 3.0-Release
erschien im Oktober 1998 und läutete das Endes des
2.2-Zweiges ein.Am 20. Januar 1999 teilte sich der Quellbaum
in die Zweige 4.0-CURRENT und 3.X-STABLE. Auf dem
3.X-STABLE-Zweig wurden folgende
Releases erstellt: 3.1 am 15. Februar 1999,
3.2 am 15. Mai 1999,
3.3 am 16. September 1999,
3.4 am 20. Dezember 1999 und
3.5 am 24. Juni 2000. Letzterem
folgte ein paar Tage später das Release 3.5.1, welches
einige akute Sicherheitslöcher von Kerberos stopfte und
die letzte Veröffentlichung des 3.X-Zweiges
darstellte.Eine weitere Aufspaltung, aus dem der 4.X-STABLE-Zweig
hervorging, erfolgte am 13. März 2000.
Bisher gab es mehrere Veröffentlichungen
aus diesem Zweig: 4.0-RELEASE erschien im März 2000.
Das letzte Release, 4.11-RELEASE, erschien im Januar 2005.Das lang erwartete 5.0-RELEASE wurde am
19. Januar 2003 veröffentlicht. Nach nahezu
drei Jahren Entwicklungszeit brachte dieses Release die
Unterstützung für Mehrprozessor-Systeme sowie
für Multithreading. Mit diesem Release lief &os;
erstmalig auf den Plattformen &ultrasparc;
und ia64. Im Juni 2003 folgte
5.1-RELEASE. Das letzte 5.X-Release aus dem CURRENT-Zweig war
5.2.1-RELEASE, das im Februar 2004 veröffentlicht
wurde.Der Zweig RELENG_5 wurde im August 2004 erzeugt. Als
erstes Release dieses Zweiges wurde 5.3-RELEASE
veröffentlicht, bei dem es sich gleichzeitig auch um
das erste 5-STABLE-Release handelte. Das aktuelle
5.5-RELEASE (dem keine RELENG_5-Versionen mehr
folgen werden) erschien im
Mai 2006.Der Zweig RELENG_6 wurde im Juli 2005 erzeugt. 6.0-RELEASE,
das erste Release des 6.X-Zweiges, wurde im November 2005
veröffentlicht. Das aktuelle &rel2.current;-RELEASE (dem
keine weiteren RELENG_6-Versionen folgen werden)
erschien im November 2008.Der Zweig RELENG_7 wurde im Oktober 2007 erzeugt.
7.0-RELEASE, das erste Release des 7.X-Zweiges, wurde im
Februar 2008 veröffentlicht. Das aktuelle
&rel.current;-RELEASE (dem weitere RELENG_7-Versionen folgen
werden) erschien im
Januar 2009.Zurzeit werden Projekte mit langem Entwicklungshorizont
im Zweig 8.X-CURRENT verfolgt, Schnappschüsse
von 8.X auf CD-ROM (und natürlich im Netz) werden bei
fortlaufender Entwicklung auf dem
Snapshot-Server zur Verfügung gestellt.JordanHubbardBeigesteuert von Ziele des &os; Projects&os; ProjectZieleDas &os; Project stellt Software her, die ohne
Einschränkungen für beliebige Zwecke eingesetzt
werden kann. Viele
von uns haben beträchtlich in Quellcode und Projekt
investiert und hätten sicher nichts dagegen, hin und
wieder ein wenig finanziellen Ausgleich dafür zu
bekommen. Aber in keinem Fall bestehen wir darauf. Wir
glauben unsere erste und wichtigste Mission ist
es, Software für jeden Interessierten und zu jedem Zweck
zur Verfügung zu stellen, damit die Software
größtmögliche Verbreitung erlangt und
größtmöglichen Nutzen stiftet. Das ist,
glaube ich, eines der grundlegenden Ziele freier Software,
welche wir mit größter Begeisterung
unterstützen.GNU General Public License (GPL)GNU Lesser General Public License (LGPL)BSD CopyrightDer Code in unserem Quellbaum, der unter die General
Public License (GPL) oder die Library General Public License
(LGPL) fällt, stellt geringfügig mehr Bedingungen.
Das aber vielmehr im Sinne von eingefordertem Zugriff, als das
übliche Gegenteil der Beschränkungen. Aufgrund
zusätzlicher Abhängigkeiten, die sich durch die
Verwendung von GPL-Software bei kommerziellem Gebrauch
ergeben, bevorzugen wir daher Software unter dem
transparenteren BSD-Copyright, wo immer es angebracht ist.SatoshiAsamiBeigesteuert von Das Entwicklungsmodell von &os;&os; ProjectEntwicklungsmodellDie Entwicklung von &os; ist ein offener und
vielseitiger Prozess. &os; besteht aus Beisteuerungen
von Hunderten Leuten rund um die Welt, wie Sie aus der
Liste
der Beitragenden ersehen können. Die vielen
Entwickler können aufgrund der Entwicklungs-Infrastruktur
von &os; über das Internet zusammenarbeiten. Wir suchen
ständig nach neuen Entwicklern, Ideen und jenen, die sich
in das Projekt tiefer einbringen wollen. Nehmen Sie einfach
auf der Mailingliste &a.hackers; Kontakt mit uns auf.
Die Mailingliste &a.announce; steht für wichtige
Ankündigungen, die alle &os;-Benutzer betreffen,
zur Verfügung.Unabhängig davon ob Sie alleine oder mit
anderen eng zusammen arbeiten, enthält die folgende
Aufstellung nützliche Informationen über das
&os; Project und dessen Entwicklungsabläufe.CVS- und SVN-RepositoriesCVSRepositoryConcurrent-Versions-SystemCVSSVNRepositorySubversionSVNDer Hauptquellbaum von &os; wurde über viele
Jahre ausschließlich mit CVS gepflegt, einem
frei erhältlichen Versionskontrollsystem, welches
mit &os; geliefert wird. Im Juni 2008 begann das
&os; Project mit dem Umstieg auf SVN (Subversion).
Dieser Schritt wurde notwendig, weil
CVS aufgrund des rapide
wachsenden Quellcodebaumes und dem Umfang der bereits
gespeichterten Revisisionsinformationen an seine Grenzen
zu stoßen begann. Während das
Hauptrepository nun SVN
verwendet, hat sich auf der Client-Seite nichts
geändert. Werkzeuge wie
CVSup und
csup, die auf der alten
CVS-Infrastruktur aufbauen,
funktionieren weiterhin, weil alle Änderungen,
die im SVN-Repository
erfolgen, in das
CVS-Repository portiert
werden. Im Moment wird nur src-Quellcodebaum
über SVN verwaltet.
Die Dokumentation, die Webseiten sowie die Ports
befinden sich weiterhin in einem
CVS-Repository. Das
Haupt-CVS-Repository
läuft auf einer Maschine in
Santa Clara, Kalifornien, USA. Von dort wird es auf
zahlreiche Server in aller Welt gespiegelt. Der
SVN-Quellbaum, der die Zweige
-CURRENT und
-STABLE enthält,
kann so einfach auf Ihr eigenes System gespiegelt
werden. Näheres dazu können Sie im Handbuch unter
Synchronisation der Quellen
in Erfahrung bringen.Die Committer-ListeCommitterDie Committer sind Personen
mit Schreibzugriff auf den
CVS-Quellbaum (der Begriff Committer
stammt vom &man.cvs.1;-Befehl commit,
der zum Einspeisen von Änderungen ins Repository
gebraucht wird). Der beste Weg, Vorschläge zur
Prüfung durch die Mitglieder der Committer-Liste
einzureichen, bietet der Befehl &man.send-pr.1;. Sollte es
unerwartete Probleme mit diesem Verfahren geben, besteht
immer noch die Möglichkeit eine E-Mail an die Liste
&a.committers; zu schicken.Das FreeeBSD-Core-TeamCore-TeamWürde man das &os; Project mit einem
Unternehmen vergleichen, so wäre das
&os;-Core-Team das
Gegenstück zum Vorstand. Die Hauptaufgabe des
Core-Teams ist es, das Projekt als Ganzes in gesunder
Verfassung zu halten und die weitere Entwicklung in die
richtige Bahn zu lenken. Das Anwerben leidenschaftlicher
und verantwortungsbewusster Entwickler ist eine
Aufgabe des Core-Team, genauso wie die Rekrutierung
neuer Mitglieder für das Core-Team, im Falle, dass
Altmitglieder aus dem Projekt aussteigen. Das
derzeitige Core-Team wurde im Juli 2008 aus einem Kreis
kandidierender Committer gewählt. Wahlen
werden alle zwei Jahre abgehalten.Einige Core-Team-Mitglieder haben auch spezielle
Verantwortungsbereiche. Das bedeutet, sie haben sich
darauf festgelegt, sicherzustellen, dass ein
größerer Teil des Systems so funktioniert wie
ausgewiesen. Eine vollständige Liste an &os;
beteiligter Entwickler und ihrer Verantwortungsbereiche
kann in der Liste der
Beitragenden eingesehen werden.Die Mehrzahl der Mitglieder des Core-Teams sind
Freiwillige in Bezug auf die &os;-Entwicklung und
profitieren nicht finanziell vom Projekt. Daher
sollte Verpflichtung nicht als
garantierter Support fehlinterpretiert
werden. Der oben angeführte Vergleich mit einem
Vorstand hinkt und es wäre angebrachter zu
erwähnen, dass diese Leute – wider besseres
Wissen – ihr eigenes Leben für &os;
aufgegeben haben!Weitere BeitragendeBeitragendeDie größte Entwicklergruppe sind
nicht zuletzt die Anwender selbst, die
Rückmeldungen und Fehlerbehebungen in einem anhaltend
hohen Maße an uns senden. Der bevorzugte Weg an
dem weniger zentralisierten Bereich der
&os;-Entwicklung teilzuhaben, ist die
Möglichkeit sich bei der Liste &a.hackers;
anzumelden. Weitere Informationen über die
verschiedenen &os;-Mailinglisten erhalten Sie in
.Die Liste
der zu &os; Beitragenden ist eine
lange und wachsende. Also warum nicht selbst dort
stehen, indem Sie gleich persönlich etwas zu
&os; beitragen?Quellcode ist nicht der einzige Weg, etwas zum
Projekt beizusteuern. Eine genauere Übersicht
über offene Aufgaben finden Sie auf der &os;-Web-Site.Zusammengefasst bildet unser Entwicklungsmodell einen
losen Verbund konzentrischer Kreise. Das zentralisierte
Modell ist auf die Bedürfnisse der
Anwender zugeschnitten, mit der einfachen
Möglichkeit eine zentrale Code-Basis zu verfolgen und
möglichen neuen Beitragenden nicht das Leben zu
erschweren! Unser Ziel ist es, ein stabiles Betriebssystem mit
einer großen Zahl passender
Programme zu bieten, die der Anwender
leicht installieren und anwenden kann. Und dieses Modell
funktioniert für diese Aufgabe ziemlich gut.Das Einzige was wir von möglichen neuen Mitgliedern
fordern, ist die gleiche Hingabe, mit der die jetzigen
Mitglieder am dauerhaften Erfolg arbeiten!Das aktuelle &os;-ReleaseNetBSDOpenBSD386BSDFree Software FoundationU.C. BerkeleyComputer Systems Research Group (CSRG)&os; ist ein (mit vollem Quellcode und ein frei
erhältliches) auf 4.4BSD-Lite-basierendes Release
für Intel &i386;, &i486;, &pentium;,
&pentium; Pro,
&celeron;,
&pentium; II,
&pentium; III,
&pentium; 4 (oder ein dazu kompatibler Prozessor),
&xeon;, DEC Alpha und
Sun &ultrasparc; Systeme.
Es stützt sich zum größten
Teil auf Software der Computer Systems Research Group (CSRG)
der Universität von Kalifornien in Berkeley mit einigen
Verbesserungen aus NetBSD, OpenBSD, 386BSD und der Free
Software Foundation.Seit unserem &os; 2.0 von Ende 1994 hat sich
Leistung, Funktionsvielfalt und Stabilität dramatisch
verbessert.
Die größte Änderung erfuhr das virtuelle
Speichermanagement durch eine Kopplung von virtuellem Speicher
und dem Buffer-Cache, das nicht nur die Leistung
steigert, sondern auch den Hauptspeicherverbrauch reduziert
und ein 5 MB-System zu einem nutzbaren Minimal-System
verhilft. Weitere Verbesserungen sind volle NIS-Client- und
Server-Unterstützung, T/TCP, Dial-On-Demand-PPP,
integriertes DHCP, ein verbessertes SCSI-Subsystem,
ISDN-Support, Unterstützung für ATM-, FDDI-, Fast-
und Gigabit-Ethernet-Karten (1000 Mbit), verbesserter
Support der neusten Adaptec-Controller und tausende
Fehlerkorrekturen.Zusätzlich zur Standard-Distribution bietet &os;
eine Sammlung von portierter Software mit tausenden begehrten
Programmen. Zum Verfassungszeitpunkt waren über
&os.numports; Anwendungen in der Ports-Sammlung! Das Spektrum
der Ports-Sammlung reicht von HTTP-Servern über Spiele,
Programmiersprachen, Editoren und so ziemlich allem
dazwischen. Die gesamte Ports-Sammlung benötigt
&ports.size; an Speicherplatz, wobei jeder Port anhand eines
Deltas zu den Quellen angegeben wird. Das
macht es für uns erheblich leichter, Ports zu
aktualisieren und es verringert den Plattenbedarf im Vergleich
zur älteren 1.0-Port-Sammlung. Um ein Port zu
übersetzen, müssen Sie einfach ins Verzeichnis des
Programms wechseln und ein make install
absetzen. Den Rest erledigt das System. Die originalen
Quellen jedes zu installierenden Port werden dynamisch von
CD-ROM oder einem FTP-Server bezogen. Es reicht also für
genügend Plattenplatz zu sorgen, um die gewünschten
Ports zu erstellen. Allen, die Ports nicht selbst kompilieren
wollen: Es gibt zu fast jedem Port ein vorkompiliertes
Paket, das einfach mit dem Befehl (pkg_add)
installiert wird. Pakete und Ports werden in
beschrieben.Eine Reihe von weiteren Dokumenten, die sich als hilfreich
bei der Installation oder dem Arbeiten mit &os; erweisen
könnten, liegen auf neueren &os;-Systemen im Verzeichnis
/usr/share/doc. Die lokal installierten
Anleitungen lassen sich mit jedem HTML-fähigen Browser
unter folgenden Adressen betrachten:Das &os;-Handbuch/usr/share/doc/handbook/index.htmlDie &os;-FAQ/usr/share/doc/faq/index.htmlEs besteht auch die Möglichkeit, sich die jeweils
aktuellste Version der Referenzdokumente unter anzusehen.
diff --git a/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml b/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
index fe3a888dcb..676926dd75 100644
--- a/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/jails/chapter.sgml
@@ -1,1085 +1,1090 @@
MatteoRiondatoBeigetragen von OliverPeterÜbersetzt von DirkArltJohannKoisJailsjailsÜbersichtDieses Kapitel erklärt, was &os;-Jails sind und wie man sie
einsetzt. Jails, manchmal als Ersatz für
chroot-Umgebungen bezeichnet, sind ein sehr
mächtiges Werkzeug für Systemadministratoren, jedoch kann
deren grundlegende Verwendung auch für fortgeschrittene Anwender
nützlich sein.Nachdem Sie dieses Kapitel gelesen haben, werden SieWissen, was eine Jail ist und welche Verwendungszwecke
es dafür unter &os; gibt.Wissen, wie man eine Jail erstellt, startet und
und anhält.Die Grundlagen der Jail-Administration (sowohl
innerhalb als auch ausserhalb des Jails) kennen.Weitere nützliche Informationen über Jails
sind beispielsweise in folgenden Quellen zu finden:Der &man.jail.8; Manualpage. Diese umfassende Referenz
beschreibt, wie man unter &os; eine Jail startet, anhält
und kontrolliert.Den Mailinglisten und deren Archive. Die Archive der
Mailingliste &a.questions; und anderen Mailinglisten, welche
vom &a.mailman.lists; bereitgestellt werden, beinhalten bereits
umfangreiche Informationen zu Jails. Daher ist es sinnvoll,
bei Problemen mit Jails zuerst die Archive der Mailinglisten
zu durchsuchen, bevor Sie eine neue Anfrage auf der
Mailingliste &a.questions.name; stellen.Jails - DefinitionenUm die für den Einsatz von Jails benötigten
FreeBSD-Funktionen, deren Interna sowie die Art und Weise, mit der
diese mit anderen Teilen des Betriebssystems interagieren, zu
erläutern, werden in diesem Kapitel folgende Definitionen
verwendet:&man.chroot.2; (-Befehl)Ein &os;-Systemaufruf, der das root-Verzeichnis eines
Prozesses und dessen Abkömmlinge verändert.&man.chroot.2; (-Umgebung)Die Umgebung eines Prozesses, der in einem
chroot läuft. Diese beinhaltet
Ressourcen, wie zum Beispiel sichtbare Abschnitte
des Dateisystems, verfügbare Benutzer- und
Gruppenkennungen, Netzwerkschnittstellen und weitere
IPC-Mechanismen und so weiter.&man.jail.8; (-Befehl)Das Systemadministrationswerkzeug, welches es erlaubt,
Prozesse innerhalb der Jail-Umgebung zu starten.Host (-Benutzer, -Prozess, -System)Das verwaltende System einer Jail-Umgebung. Das
Host-System hat Zugriff auf alle verfügbaren
Hardwareressourcen und kann sowohl innerhalb als auch
ausserhalb der Jail-Umgebung Prozesse steuern. Einer der
wichtigsten Unterschiede des Host-System einer Jails ist,
dass die Einschränkungen, welche für die
Superuser-Prozesse innerhalb eines Jails gelten, nicht
für die Prozesse des Host-Systems gelten.Gast (-Benutzer, -Prozess, -System)Ein Prozess, ein Benutzer oder eine andere Instanz,
deren Zugriff durch eine &os;-Jail eingeschränkt
ist.EinführungDa die Systemadministration oft eine schwierige Aufgabe ist,
wurden viele mächtige Werkzeuge entwickelt, die
Administratoren bei Installation, Konfiguration und Wartung ihrer
Systeme unterstützen sollen. Eine wichtige Aufgabe eines
Administrators ist es, Systeme so abzusichern, dass es im
regulären Betrieb zu keinen Sicherheitsverstößen
kommt.Eines der Werkzeuge, mit dem die Sicherheit eines &os;-Systems
verbessert werden kann, sind Jails. Jails wurden schon in
&os; 4.X von &a.phk; eingeführt, wurden jedoch mit
&os; 5.X stark verbessert, sodass sie inzwischen zu einem
mächtigen und flexiblen Subsystem herangereift sind. Trotzdem
geht die Entwicklung nach wie vor weiter. Wichtige Ziele sind
derzeit: Bessere Zweckmäßigkeit, Leistung,
Ausfallsicherheit und allgemeine Sicherheit.Was ist eine Jail?BSD-ähnliche Betriebssysteme besitzen seit den Zeiten
von 4.2BSD &man.chroot.2;. Das Werkzeug &man.chroot.2; kann dazu
benutzt werden, das root-Verzeichnis einer Reihe von Prozessen
zu ändern, um so eine seperate sichere Umgebung (abgeschnitten
vom Rest des Systems) zu schaffen. Prozesse, die in einer
chroot-Umgebung erstellt wurden, können nicht auf Dateien
oder Ressourcen zugreifen, die sich ausserhalb der Umgebung
befinden. Dadurch ist es einem kompromittierten Dienst nicht
möglich, das gesamte System zu kompromittieren.
&man.chroot.8; eignet sich für einfache Aufgaben, die keine
flexiblen, komplexen oder fortgeschrittenen Funktionen
benötigen. Obwohl seit der Entwicklung des chroot-Konzepts
zahlreiche Sicherheitslöcher geschlossen wurden, die es
einem Prozess erlauben konnten, aus einer Jail auszubrechen,
war seit langer Zeit klar, dass &man.chroot.2; nicht die ideale
Lösung ist, einen Dienst sicher zu machen.Dies ist einer der Hauptgründe, warum
Jails entwickelt wurden.Jails setzen auf dem traditionellen &man.chroot.2;-Konzept
auf und verbessern es auf unterschiedlichste Art und Weise. In
einer traditionellen &man.chroot.2;-Umgebung sind Prozesse auf
den Bereich des Dateisystems beschränkt, auf den sie
zugreifen können. Der Rest der Systemressourcen (wie zum
Beispiel eine Reihe von Systembenutzern, die laufenden Prozesse
oder das Netzwerk-Subsystem) teilen sich die chroot-Prozesse mit
dem Host-System. Jails dehnen dieses Modell nicht nur auf die
Virtualisierung des Zugriffs auf das Dateisystem, sondern auch
auf eine Reihe von Benutzern, das Netzwerk-Subsystem des
&os;-Kernels und weitere Bereiche aus. Eine ausführlichere
Übersicht der ausgefeilten Bedienelemente zur Konfiguration
einer Jail-Umgebung finden Sie im Abschnitt des Handbuchs.Eine Jail zeichnet sich durch folgende Merkmale aus:Einen Unterverzeichnisbaum, der die Jail enthält.
Einem Prozess, der innerhalb der Jail läft, ist es
nicht mehr möglich, aus diesem auszubrechen. Von
der traditionellen &man.chroot.2;-Umgebung bekannte
Sicherheitsprobleme existieren bei &os;-Jails nicht
mehr.Einen Hostname, der innerhalb der Jail verwendet wird.
Jails werden vor allem dazu verwendet, Netzwerkdienste
anzubieten, daher ist es für Systemadministratoren
von großem Nutzen, dass jede Jail einen beschreibenden
Hostname haben kann.Eine IP Adresse, die der Jail
zugewiesen wird und nicht verändert werden kann,
solange das Jail läft. Die IP-Adresse einer Jails
ist üblicherweise ein Adress-Alias auf eine
existierende Netzwerkschnittstelle. Dies ist jedoch
nicht zwingend erforderlich.Einen Befehl (genauer den Pfad einer ausführbaren
Datei) der innerhalb der Jail ausgefürht werden soll.
Dieser Pfad wird relativ zum root-Verzeichnis einer
Jail-Umgebung angegeben und kann sehr unterschiedlich
aussehen (je nachdem, wie die Jail-Umgebung konfiguriert
wurde).Unabhängig davon können Jails eine Reihe eigener
Benutzer und einen eigenen Benutzer root
haben. Selbstverständlich sind die Rechte des Benutzers
root nur auf die Jail-Umgebung
beschränkt. Aus der Sicht des Host-Systems ist der
Benutzer root der Jail-Umgebung kein
allmächtiger Benutzer, da der Benutzer
root der Jail-Umgebung nicht dazu
berechtigt ist, kritische Operationen am System ausserhalb der
angebundenen &man.jail.8;-Umgebung durchzuführen.
Weitere Informationen über die Einsatzmöglichkeiten
und Beschränkungen des Benutzers root
werden im Abschnitt des
Handbuchs besprochen.Einrichtung und Verwaltung von JailsEinige Administratoren unterscheiden zwei verschiedene
Jail-Arten: Komplette Jails, die ein echtes
&os; darstellen und Jails für einen bestimmten
Dienst, die nur einer bestimmten Anwendung
oder einem Dienst (der möglicherweise mit besonderen
Privilegien laufen soll) gewidmet sind. Dies ist aber nur
eine konzeptuelle Unterscheidung, die Einrichtung einer
Jail bleibt davon gänzlich unberührt.&prompt.root; setenv D /hier/ist/die/jail
&prompt.root; mkdir -p $D
&prompt.root; cd /usr/src
-&prompt.root; make world DESTDIR=$D
+&prompt.root; make buildworld
+&prompt.root; make installworld DESTDIR=$D
&prompt.root; cd etc/Dieser
Schritt ist seit &os; 6.0 nicht mehr notwendig.
&prompt.root; make distribution DESTDIR=$D
&prompt.root; mount -t devfs devfs $D/devDas Festlegen des Installationsorts für das Jail
eignet sich am besten als Startpunkt. Hier wird sich die
Jail innerhalb des Host-Dateisystems befinden. Eine gute
Möglichkeit wäre etwa /usr/jail/name_der_jail,
wobei name_der_jail den Hostname
darstellt, über den die Jail identifiziert werden
soll. Das Dateisystem unterhalb von /usr/ stellt normalerweise
aussreichend Platz für eine Jail zur Verfügung
(bedenken Sie, dass eine komplette Jail
ein Replikat einer jeden Datei der Standardinstallation des
&os;-Basissystems enthält.
-
+
+ Wenn Sie bereits ihre Systemanwendungen mittels
+ make world oder make buildworld
+ neu erstellt haben, können Sie diesen Schritt überspringen
+ und die Systemanwendungen in die neue Jail installieren.
+
+
+ Dieser Befehl wird den Verzeichnisbaum mit allen
notwendigen Binärdateien, Bibliotheken, Manualpages
- usw. an dem für die Jail gewählten physikalischen
- Ort erstellen. Dies geschieht im typischen &os;-Stil —
- Zuerst wird alles gebaut/kompiliert und anschließend
- in das Zielverzeichnis installiert.
+ usw. erstellen.
Der distribution-Befehl
lässt make alle
benötigten Konfigurationsdateien installieren, es
werden also alle installierbaren Dateien aus
/usr/src/etc/ in
das Verzeichnis /etc
der Jail installiert (also nach $D/etc/).Das Einhängen des &man.devfs.8;-Dateisystems
innerhalb der Jail ist nicht unbedingt notwendig.
Allerdings benötigt fast jede Anwendung Zugriff auf
wenigstens ein Gerät. Es ist daher sehr wichtig,
den Zugriff auf Devices aus der Jail heraus zu
kontrollieren, da unsaubere Einstellungen es einem
Angreifer erlauben könnten, in das System einzudringen.
Die Kontrolle über &man.devfs.8; erfolgt durch die in
den Manualpages &man.devfs.8; und &man.devfs.conf.5;
beschriebenen Regeln.Ist eine Jail einmal erst erstellt, kann sie durch
&man.jail.8; gestartet werden. &man.jail.8; benötigt
zwingend mindestens vier Argumente, die im Abschnitt des Handbuchs beschrieben sind. Weitere
Argumente sind möglich, um beispielsweise die Jail mit den
Berechtigungen eines bestimmten Benutzers laufen zu lassen. Das
Argument
hängt vom Typ der Jail ab; für ein virtuelles
System ist /etc/rc eine gute
Wahl, da dies dem Startvorgang eines echten &os;-Systems
entspricht. Bei einer Service-Jail
hängt dieses von der Art des Dienstes ab, der in der Jail
laufen soll.Jails werden häufig mit dem Betriebssystem gestartet,
da der rc-Mechanismus von &os; dafür
eine einfach zu realisierende Möglichkeit bietet.Eine Liste der Jails, die mit dem Betriebssystem
gestartet werden sollen, wird in die Datei &man.rc.conf.5;
geschrieben:jail_enable="YES" # Set to NO to disable starting of any jails
jail_list="www" # Space separated list of names of jailsFür jede Jail in der jail_list
sollten in &man.rc.conf.5; einige Einstellungen
vorgenommen werden:jail_www_rootdir="/usr/jail/www" # jail's root directory
jail_www_hostname="www.example.org" # jail's hostname
jail_www_ip="192.168.0.10" # jail's IP address
jail_www_devfs_enable="YES" # mount devfs in the jail
jail_www_devfs_ruleset="www_ruleset" # devfs ruleset to apply to jailBeim Start einer in &man.rc.conf.5; konfigurierten Jail
wird das /etc/rc-Skript der Jail (das
"annimmt", dass es sich in einem kompletten System befindet)
aufgerufen. Für Service-Jails sollten die Startskripte
der Jail durch das Setzen der Option
jail_jailname_exec_start
entsprechend angepasst werden.Eine vollständige Liste der Optionen findet sich
in der Manualpage zu &man.rc.conf.5;.Das /etc/rc.d/jail-Skript kann
zum manuellen Starten und Stoppen der Jail genutzt werden,
wenn ein Eintrag in rc.conf angelegt
wurde:&prompt.root; /etc/rc.d/jail start www
&prompt.root; /etc/rc.d/jail stop wwwEs gibt momentan keinen sauberen Weg, eine &man.jail.8; zu
stoppen. Dies liegt daran, dass die Kommandos zum sauberen
Herunterfahren eines Systems innerhalb einer Jail nicht
ausgeführt werden können. Der beste Weg eine Jail zu
beenden ist es daher, innerhalb der Jail den folgenden Befehl
auszuführen (alternativ können Sie auch &man.jexec.8;
von außerhalb der Jail aufrufen):&prompt.root; sh /etc/rc.shutdownWeitere Informationen zu diesem Thema finden Sie in der
Manualpage &man.jail.8;.Feinabstimmung und AdministrationEs gibt verschiedene Optionen, die für jede Jail
gesetzt werden können und verschiedene Wege, ein
&os;-Host-System mit Jails zu kombinieren. Dieser Abschnitt
zeigt Ihnen:Einige zur Verfügung stehende Optionen zur
Abstimmung des Verhaltens und der Sicherheitseinstellungen,
die mit einer Jail-Installation ausgeführt werden
können.Einige der Anwendungsprogramme für das
Jail-Management, die über die &os; Ports-Sammlung
verfügbar sind und genutzt werden können, um
Jail-basierte Lösungen allumfassend umzusetzen.Systemwerkzeuge zur Feinabstimmung von Jails in &os;Die Feinabstimmung einer Jail-Konfiguration erfolgt zum
Großteil durch das Setzen von &man.sysctl.8;-Variablen.
Es gibt einen speziellen sysctl-Zweig, der als Basis für
die Organisation aller relevanten Optionen dient: Die
security.jail.*-Hierarchie der
&os;-Kerneloptionen. Die folgende Liste enthält alle
jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen).
Die Namen sollten selbsterklärend sein, für
weitergehende Informationen lesen Sie bitte die Manualpages
&man.jail.8; und &man.sysctl.8;.security.jail.set_hostname_allowed:
1security.jail.socket_unixiproute_only:
1security.jail.sysvipc_allowed:
0security.jail.enforce_statfs:
2security.jail.allow_raw_sockets:
0security.jail.chflags_allowed:
0security.jail.jailed: 0Diese Variablen können vom Administrator des
Host-Systems genutzt werden, um
Beschränkungen hinzuzufügen oder aufzuheben, die dem
Benutzer root als Vorgabe auferlegt sind.
Beachten Sie, dass es einige Beschränkungen gibt, die nicht
verändert werden können. Der Benutzer
root darf innheralb der &man.jail.8; keine
Dateisysteme mounten und unmounten. Ebenso ist es ihm untersagt,
das &man.devfs.8;-Regelwerk zu laden oder zu entladen. Er darf
weder Firewallregeln setzen, noch administrative Aufgaben
erledigen, die Modifikationen am Kernel selbst erfordern
(wie bespielsweise das Setzen des Securelevels
des Kernel.Das &os;-Basissystem enthält einen Basissatz an
Werkzeugen, um Informationen über aktive Jails zu erlangen
und einer Jail administrative Befehle zuzuordnen. Die Befehle
&man.jls.8; und &man.jexec.8; sind Teil des &os;-Basissystems
und können für folgende Aufgaben verwendet werden:Das Anzeigen einer Liste der aktiven Jails und ihrer
zugehörigen Jail Identifier (JID),
ihrer IP-Addresse, ihres Hostnames und
ihres Pfades.Das Herstellen einer Verbindung mit einer laufenden
Jail, das Starten eines Befehls aus dem gastgebenen
System heraus oder das Ausführen einer administrativen
Aufgabe innerhalb der Jail selbst. Dies ist insbesondere
dann nützlich, wenn der Benutzer
root die Jail sauber herunterfahren
möchte. &man.jexec.8; kann auch zum Starten einer
Shell innerhalb der Jail genutzt werden, um adminstrative
Aufgaben durchzuführen:&prompt.root; jexec 1 tcshHigh-Level-Werkzeuge zur Jail-Administration in der &os;
Ports-SammlungUnter den zahlreichen Fremdwerkzeugen für die Administration
von Jails sind die sysutils/jailutils die
vollständigsten und brauchbarsten. Dabei handelt es sich um
eine Sammlung kleiner Anwendungen, die das &man.jail.8;-Management
vereinfachen. Weitere Informationen zu diesen Werkzeugen finden
Sie auf den entsprechenden Internetseiten.Anwendung von JailsDanielGerzoBeigetragen von Service-JailsDieser Abschnitt basiert auf einer von &a.simon; auf
präsentierten Idee und einem aktualisierten
Artikel von Ken Tom (locals@gmail.com). Er
beschreibt, wie ein &os;-System durch Benutzung der
&man.jail.8;-Funktion mit zusätzlichen
Sicherheitsebenen ausgestattet werden kann. Es wird dabei
angenommen, dass auf Ihrem &os;-System RELENG_6_0 oder neuer
installiert ist und dass Sie die Informationen aus den
vorangehenden Abschnitten gelesen und verstanden haben.DesignEines der Hauptprobleme bei Jails ist das Management
ihres Upgrade-Prozesses. Dieser neigt dazu, problematisch zu
sein, da jede Jail bei jedem Upgrade komplett neu gebaut
werden muss. Das stellt normalerweise kein Problem dar, wenn
es sich um eine einzelne Jail handelt, da der Upgrade-Prozess
recht einfach ist. Verwenden Sie aber eine größere
Anzahl von Jails, kann dieser Prozess sehr zeitaufwendig
werden.Diese Konfiguration erfordert fortgeschrittene
Kenntnisse im Umgang mit &os; sowie der Benutzung seiner
Funktionen. Sollten die unten vorgestellten Schritte zu
kompliziert wirken, wird empfohlen, sich einfachere Verfahren
wie sysutils/ezjail
anzusehen, da diese einfachere Methoden zur Administration
von Jails verwenden und daher nicht so anspruchsvoll sind
wie der hier beschriebene Aufbau.Diese Konfiguration basiert darauf, Jails so weit als
möglich gemeinsam zu verwalten. Dies passiert auf sichere
Art und Weise durch den Einsatz von &man.mount.nullfs.8;-Mounts
(read-only). Dadurch werden Aktualisierungen erleichtert und
das Verteilen von verschiedenen Diensten auf verschiedene
Jails wird attraktiver. Außerdem bietet dieses Verfahren
einen einfachen Weg, Jails hinzuzufügen, zu entfernen und
zu aktualisieren.Beispiele für Dienste sind in diesem
Zusammenhang: Ein HTTP-Server, ein
DNS-Server, ein
SMTP-Server und so weiter.Die Ziele des in diesem Abschnitt beschriebenen Aufbaus
sind:Das Erstellen einer einfachen und gut
verständlichen Struktur von Jails. Dies beinhaltet,
nicht für jede Jail ein
vollständiges installworld laufen lassen zu
müssen.Es einfach zu machen, neue Jails zu erstellen oder
alte zu entfernen.Es einfach zu machen, bestehende Jails zu
aktualisieren.Es einfach zu machen, einen angepassten &os;-Zweig zu
nutzen.Paranoid bezüglich Sicherheit zu sein und
Angriffsmöglickeiten weitgehend zu reduzieren.Soviel Platz und Inodes wie möglich
einzusparen.Wie bereits erwähnt, ist dieses Design stark darauf
angewiesen, dass eine read-only-Hauptvorlage in jede Jail
hinein gemountet wird (bekannt als
nullfs), und dass jede Jail
über wenigstens ein beschreibbares Gerät
verfügt. Das Gerät kann hierbei eine separate
physikalische Platte oder ein vnode unterstütztes
&man.md.4;-Gerät sein. Im folgenden Beispiel wird ein
nullfs-Mount genutzt, auf den
nur Lesezugriff erlaubt ist.Das Layout des Dateisystems wird in der folgenden Liste
beschrieben:Jede Jail wird unterhalb des /home/j-Verzeichnisses
gemountet./home/j/mroot
ist die Vorlage für jede Jail und die nur lesbare
Partition für alle Jails.Unterhalb von /home/j wird für jede
Jail ein leeres Verzeichnis angelegt.Jede Jail bekommt ein /s-Verzeichnis, das zum
read/write-Teilbereich des Systems verlinkt wird.Jede Jail bekommt ihr eigenes read/write-System,
das auf /home/j/skel basiert.Jeder Jailbereich (genauer der read/write-Teilbereich
jeder Jail) wird in /home/js erstellt.Es wird angenommen, dass die Jails sich unterhalb des
/home Verzeichnisses
befinden. Dieser Ort kann von Ihnen natürlich
geändert werden. Allerdings müssen die Pfade
in den folgenden Beispielen dann entsprechend angepasst
werden.Erstellen der VorlageDieser Abschnitt beschreibt die Schritte, die zum
Erstellen der Hauptvorlage (die den nur lesbaren Bereich
für alle weiteren Jails darstellt) notwendig sind.Es ist immer eine gute Idee, &os; auf den aktuellen
-RELEASE-Zweig zu aktualisieren. Lesen Sie das entsprechende
Kapitel des
Handbuchs für Informationen zu diesem Thema. Selbst wenn
Sie auf eine Aktualisierung des Betriebssystems verzichten,
müssen Sie dennoch ein buildworld durchführen, um
fortfahren zu können. Außerdem müssen Sie
das Paket sysutils/cpdup
installiert sein. In diesem Beispiel wird &man.portsnap.8;
verwendet, um die aktuelle &os; Ports-Sammlung herunterzuladen.
Der Abschnitt Portsnap des
Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv
einsetzen.Zuerst erstellen wir eine Verzeichnissstruktur
für das read-only-Dateisystem, das die
&os;-Binärdateien für unsere Jails enthalten
wird. Anschließend wechseln wir in den
&os;-Quellcodebaum und installieren das
read-only-Dateisystem in die (Vorlage-)Jail.&prompt.root; mkdir /home/j /home/j/mroot
&prompt.root; cd /usr/src
&prompt.root; make installworld DESTDIR=/home/j/mrootAls nächstes bereiten wir die Ports-Sammlung
fü die Jails vor und kopieren den &os; Quellcodebaum
in die Jail, da dieser für
mergemaster benötigt wird:&prompt.root; cd /home/j/mroot
&prompt.root; mkdir usr/ports
&prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract
&prompt.root; cpdup /usr/src /home/j/mroot/usr/srcDanach wird die Struktur für den
read/write-Bereich des Systems erstellt:&prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
&prompt.root; mv etc /home/j/skel
&prompt.root; mv usr/local /home/j/skel/usr-local
&prompt.root; mv tmp /home/j/skel
&prompt.root; mv var /home/j/skel
&prompt.root; mv root /home/j/skelNutzen Sie mergemaster, um
fehlende Konfigurationsdateien zu installieren.
Anschließend werden die von
mergemaster erstellten
Extra-Verzeichnisse entfernt:&prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
&prompt.root; cd /home/j/skel
&prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr devNun wird das read/write-Dateisystem mit dem
read-only-Dateisystem verlinkt. Bitte vergewissern Sie
sich, dass die symbolischen Links an den korrekten
s/ Positionen
erstellt werden. Echte Verzeichnisse oder an falschen
Positionen erstellte Verzeichnisse lassen die Installation
fehlschlagen.&prompt.root; cd /home/j/mroot
&prompt.root; mkdir s
&prompt.root; ln -s s/etc etc
&prompt.root; ln -s s/home home
&prompt.root; ln -s s/root root
&prompt.root; ln -s ../s/usr-local usr/local
&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6
&prompt.root; ln -s ../../s/distfiles usr/ports/distfiles
&prompt.root; ln -s s/tmp tmp
&prompt.root; ln -s s/var varZuletzt erstellen Sie eine allgemeine
/home/j/skel/etc/make.conf mit
folgendem Inhalt:WRKDIRPREFIX?= /s/portbuildEin gesetztes WRKDIRPREFIX
erlaubt es, die &os;-Ports innerhalb jeder Jail
zu kompilieren. Das Ports-Verzeichnis ist Teil des
read-only System. Der angepasste Pfad des
WRKDIRPREFIX macht es möglich,
innerhalb des read/write-Bereichs der Jail Ports zu
bauen.Jails erstellenDa nun eine komplette &os;-Jailvorlage vorliegt, sind wir
nun in der Lage, Jails einrichten und in
/etc/rc.conf zu konfigurieren. Dieses
Beispiel zeigt das Erstellen von drei Jails:
NS, MAIL und
WWW.Fügen Sie die folgenden Zeilen in
/etc/fstab ein, damit die
read-only-Vorlage und der read/write-Bereich für
alle Jails verfügbar sind:/home/j/mroot /home/j/ns nullfs ro 0 0
/home/j/mroot /home/j/mail nullfs ro 0 0
/home/j/mroot /home/j/www nullfs ro 0 0
/home/js/ns /home/j/ns/s nullfs rw 0 0
/home/js/mail /home/j/mail/s nullfs rw 0 0
/home/js/www /home/j/www/s nullfs rw 0 0Mit der Pass-Nummer 0 markierte Partitionen werden
beim Booten des Systems nicht von &man.fsck.8;
geprüft, mit 0 als Dump-Nummer markierte Partitonen
werden von &man.dump.8; nicht gesichert. Wir wollen
nicht, dass fsck unsere
nullfs-Mounts prüft oder
dass dump die nur lesbaren
nullfs-Mounts unserer Jails sichert. Deshalb werden
diese Bereiche in den letzten beiden Spalten der
obenstehenden fstab mit
0 0 markiert.Konfigurieren Sie die Jails in
/etc/rc.conf:jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/j/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/j/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="62.123.43.14"
jail_www_rootdir="/usr/home/j/www"
jail_www_devfs_enable="YES"Der Grund dafür, dass die Variablen
jail_name_rootdir
nach /usr/home
statt nach /home
zeigen, liegt darin, dass der physikalische Pfad des
/home-Verzeichnisses unter
&os; /usr/home
lautet. Die Variable
jail_name_rootdir
darf im Pfad aber keinen symbolischen
Link enthalten, weil das Jail ansonsten
nicht gestartet werden kann. Verwenden Sie
&man.realpath.1;, um den korrekten Wert für diese
Variable zu bestimmen. Weitere Informationen finden
Sie im Security Advisory &os;-SA-07:01.jail.Erstellen Sie die notwendigen Mountpunkte für
die nur lesbaren Bereiche jeder Jail:&prompt.root; mkdir /home/j/ns /home/j/mail /home/j/wwwInstallieren Sie die read/write-Vorlage in jede
Jail. Benutzen Sie hierfür sysutils/cpdup, welches es
erleichtert, eine korrekte Kopie jedes Verzeichnisses
zu erstellen:&prompt.root; mkdir /home/js
&prompt.root; cpdup /home/j/skel /home/js/ns
&prompt.root; cpdup /home/j/skel /home/js/mail
&prompt.root; cpdup /home/j/skel /home/js/wwwAn dieser Stelle werden die Jails erstellt und
fü den Betrieb vorbereitet. Zuerst mounten Sie die
notwendigen Dateisysteme für jede Jail und starten
diese dann mit dem Skript
/etc/rc.d/jail:&prompt.root; mount -a
&prompt.root; /etc/rc.d/jail startDie Jails sollten nun laufen. Um zu prüfen, ob sie
korrekt gestartet wurden, verwenden Sie &man.jls.8;. Nach
dem Aufruf dieses Befehls sollten Sie eine Ausgabe
ähnlich der folgenden erhalten:&prompt.root; jls
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/j/ns
2 192.168.3.18 mail.example.org /home/j/mail
1 62.123.43.14 www.example.org /home/j/wwwAn diesem Punkt sollte es möglich sein, sich an
jeder Jail anzumelden, Benutzer anzulegen und Dienste zu
konfigurieren. Die Spalte JID gibt die
Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie
den folgenden Befehl, um administrative Aufgaben in der Jail
mit der JID 3 durchzuführen:&prompt.root; jexec 3 tcshJails aktualisierenMit der Zeit wird es notwendig sein, das System auf
eine neuere Version von &os; zu aktualisieren. Zum einen aus
Sicherheitsgründen, zum anderen, um neu eingeführte
Funktionen nutzen zu können, die für die bestehenden
Jails sinnvoll sind. Das Design dieses Aufbaus bietet einen
einfachen Weg, bestehende Jails zu aktualisieren. Zudem
reduziert es die Downtime, da die Jails erst im allerletzten
Schritt gestoppt werden müssen. Außerdem bietet
es die Möglichkeit, zu älteren Versionen
zurückzukehren, falls irgendwelche Probleme auftreten.Im ersten Schritt wird das Host-System aktualisiert.
Anschließend wird eine temporäre neue
read-only Vorlage /home/j/mroot2 erstellt.&prompt.root; mkdir /home/j/mroot2
&prompt.root; cd /usr/src
&prompt.root; make installworld DESTDIR=/home/j/mroot2
&prompt.root; cd /home/j/mroot2
&prompt.root; cpdup /usr/src usr/src
&prompt.root; mkdir sDer installworld-Durchlauf
erzeugt einige unnötige Verzeichnisse, die nun entfernt
werden sollten:&prompt.root; chflags -R 0 var
&prompt.root; rm -R etc var root usr/local tmpErzeugen Sie neue symbolische Links für das
Hauptdateisystem:&prompt.root; ln -s s/etc etc
&prompt.root; ln -s s/root root
&prompt.root; ln -s s/home home
&prompt.root; ln -s ../s/usr-local usr/local
&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6
&prompt.root; ln -s s/tmp tmp
&prompt.root; ln -s s/var varNun ist es an der Zeit, die Jails zu stoppen:&prompt.root; /etc/rc.d/jail stopUnmounten des originalen Dateisystems:&prompt.root; umount /home/j/ns/s
&prompt.root; umount /home/j/ns
&prompt.root; umount /home/j/mail/s
&prompt.root; umount /home/j/mail
&prompt.root; umount /home/j/www/s
&prompt.root; umount /home/j/wwwDie read/write-Systeme sind an das read-only
System angehängt (/s), das daher zuerst
ausgehängt werden muss.Verschieben Sie das alte read-only-Dateisystem und
ersetzen Sie es durch das neue Dateisystem. Das alte
Dateisystem kann so als Backup dienen, falls etwas schief
geht. Die Namensgebung entspricht hier derjenigen bei der
Erstellung eines neuen read-only-Dateisystems. Verschieben
Sie die originale &os; Ports-Sammlung in das neue
Dateisystem, um Platz und Inodes zu sparen:&prompt.root; cd /home/j
&prompt.root; mv mroot mroot.20060601
&prompt.root; mv mroot2 mroot
&prompt.root; mv mroot.20060601/usr/ports mroot/usrNun ist die neue read-only-Vorlage fertig. Sie
müssen daher nur noch die Dateisysteme erneut mounten
und die Jails starten:&prompt.root; mount -a
&prompt.root; /etc/rc.d/jail startNutzen Sie &man.jls.8; um zu prüfen, ob die Jails
korrekt gestartet wurden. Vergessen Sie nicht, innerhalb jeder
Jail mergemaster laufen zu lassen. Die
Konfigurationsdateien müssen (ebenso wie die
rc.d-Skripten) aktualisiert werden.
diff --git a/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml b/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
index 40b576ed53..97a9cd29d4 100644
--- a/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
@@ -1,3725 +1,3725 @@
JimMockRestrukturiert und teilweise aktualisiert von Brian N.HandyBeigetragen von RichMurpheyJohannKoisÜbersetzt von Linux-BinärkompatibilitätÜbersichtLinux-BinärkompatibilitätBinärkompatibilitätLinuxFreeBSD bietet Binärkompatibilität zu verschiedenen
anderen &unix; Betriebssystemen, darunter auch Linux. Nun
könnten Sie sich fragen, warum FreeBSD in der Lage sein
muss, Linux-Binärprogramme auszuführen? Die Antwort
auf diese Frage ist sehr einfach. Viele Unternehmen und Entwickler
programmieren bzw. entwickeln nur für Linux, da es
das Neueste und Beste in der Computerwelt ist.
Für uns FreeBSD-Anwender heißt dies, genau diese Unternehmen
und Entwickler zu bitten, FreeBSD-Versionen ihrer Programme
herauszubringen. Das Problem dabei ist nur, dass die meisten dieser
Firmen trotzdem nicht erkennen, wie viele zusätzliche
Anwender ihre Produkte benutzen würden, wenn es auch
FreeBSD-Versionen gäbe, und daher weiterhin
ausschließlich für Linux entwickeln. Was also kann ein
FreeBSD-Anwender tun? Genau an diesem Punkt kommt die Linux-
Binärkompatibilität ins Spiel.Um es auf den Punkt zu bringen, genau diese Kompatibilität
erlaubt es FreeBSD-Anwendern, etwa 90 % aller Linux-Anwendungen
ohne Code-Änderungen zu verwenden. Dies schließt
solche Anwendungen wie &staroffice;,
Open Office, die Linux-Versionen von
&netscape;,
&adobe; &acrobat;,
&realplayer;,
VMWare, &oracle;,
&wordperfect;,
Doom,
Quake und viele andere ein. Es wird
sogar berichtet, dass diese Linux-Anwendungen in manchen
Fällen unter FreeBSD eine bessere Leistung als unter
Linux aufweisen.Allerdings gibt es nach wie vor einige Linux-spezifische
Betriebssystem-Eigenschaften, die unter FreeBSD nicht
unterstützt werden. Linux-Anwendungen, die
&i386;-spezifische Aufrufe (wie die Aktivierung des
virtuellen 8086-Modus) verwenden, funktionieren
unter FreeBSD leider nicht.Nach dem Lesen dieses Kapitels werden Siewissen, wie Sie die Linux-Binärkompatibilität
installieren bzw. aktivieren.Wissen, wie man zusätzliche Linux-Systembibliotheken
unter FreeBSD installiert.Linux-Anwendungen unter FreeBSD installieren können.Wissen, wie die Linux-Binärkompatibilität
unter FreeBSD verwirklicht wurde.Bevor Sie dieses Kapitel lesen, sollten Siewissen, wie man Software Dritter installiert
().InstallationKLD (kernel loadable object)Die Linux-Binärkompatibilität ist per Voreinstellung
nicht aktiviert. Der einfachste Weg, dies zu tun, ist das
Linux KLD (Kernel LoaDable object)
zu laden. Dies erreichen Sie durch die Eingabe des folgenden
Befehls:&prompt.root; kldload linuxWollen Sie die Linux-Binärkompatibilität dauerhaft
aktivieren, sollten Sie die folgende Zeile in
/etc/rc.conf einfügen:linux_enable="YES"Der &man.kldstat.8;-Befehl kann benutzt werden, um
festzustellen, ob KLD geladen wurde:&prompt.user; kldstat
Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.koKerneloptionenCOMPAT_LINUXWenn Sie das KLD nicht laden können oder wollen, besteht
auch die Möglichkeit, die Linux-Binärkompatibiltät
statisch in den Kernel einzubinden. Dazu fügen Sie Ihrer
Kernelkonfigurationsdatei den Eintrag
options COMPAT_LINUX
hinzu. Anschließend installieren Sie Ihren neuen Kernel
wie in beschrieben.Linux-Laufzeitbibliotheken installierenLinuxLinux-Laufzeitbibliotheken installierenDies kann auf zwei Arten geschehen, entweder über den
linux_base-Port,
- oder durch manuelle Installation der Bibliotheken
- .
+ oder durch manuelle Installation der Bibliotheken .
Installation unter Verwendung des linux_base-PortsPorts-SammlungDies ist die einfachste Methode, um die Laufzeitbibliotheken
zu installieren. Sie funktioniert genauso wie die
Installation eines beliebigen anderen Ports aus der
Ports-Sammlung.
Dazu machen Sie einfach folgendes:&prompt.root; cd /usr/ports/emulators/linux_base-fc4
&prompt.root; make install distcleanSie sollten nun über eine funktionierende
Linux-Binärkompatibilität verfügen. Einige
Programme könnten sich zwar über falsche
Unterversionsnummern der Systembibliotheken beschweren, dies ist
im Allgemeinen aber kein Problem.Unter Umständen gibt es mehrere Versionen des
Ports emulators/linux_base.
Die Ports entsprechen unterschiedlichen Versionen
verschiedener Linux-Distributionen Sie sollten den
Port installieren, der am besten die Anforderungen
der Linux-Anwendung erfüllt.Manuelle Installation der BibliothekenWenn Sie die Ports-Sammlung nicht installiert
haben, können Sie die Bibliotheken auch manuell
installieren. Dazu brauchen Sie die jeweiligen
Linux-Systembibliotheken, die das zu installierende Programm
verwendet sowie den Laufzeit-Linker. Zusätzlich müssen
Sie auf Ihrem FreeBSD-System einen
virtuellen Verzeichnisbaum für die
Linux-Bibliotheken einrichten. Alle unter FreeBSD gestarteten
Linux-Programme suchen zuerst in diesem Verzeichnisbaum
nach Systembibliotheken. Wenn also ein Linuxprogramm beispielsweise
/lib/libc.so lädt, versucht FreeBSD
zuerst, /compat/linux/lib/libc.so laden.
Ist diese Datei nicht vorhanden, wird
/lib/libc.so geladen. Systembibliotheken
sollten daher besser in den virtuellen Verzeichnisbaum
/compat/linux/lib als in den vom
Linux-ld.so vorgeschlagenen installiert
werden.Im Allgemeinen müssen Sie nur zu Beginn nach den
Systembibliotheken suchen, die von Linuxprogrammen
benötigt werden. Nach den ersten Installationen von
Linuxprogrammen auf Ihrem FreeBSD-System verfügen Sie
über eine Sammlung von Linux-Systembibliotheken,
die es Ihnen ermöglichen wird, neue Linuxprogramme
ohne Zusatzarbeit zu installieren.Installation zusätzlicher SystembibliothekenShared-LibrariesWas passiert, wenn Sie den linux_base-Port
installieren, und Ihr Programm beschwert sich trotzdem
über fehlende Systembibliotheken? Woher wissen Sie,
welche Systembibliotheken von Linux-Binärprogrammen
benötigt werden, und wo Sie diese finden? Grundsätzlich
gibt es dafür zwei Möglichkeiten (um dieser
Anleitung zu folgen, müssen Sie unter
FreeBSD als Benutzer root angemeldet
sein):Wenn Sie Zugriff auf ein Linux-System haben, können
Sie dort nachsehen, welche Systembibliotheken eine Anwendung
benötigt, und diese auf Ihr FreeBSD-System kopieren.
Dazu folgendes Beispiel:Nehmen wir an, Sie haben FTP verwendet, um die
Linux-Binärversion von Doom
zu bekommen und haben sie auf Ihrem Linux-System installiert.
Nun können Sie überprüfen, welche
Systembibliotheken das Programm benötigt, indem Sie
ldd linuxdoom eingeben. Das Resultat
sieht dann so aus:&prompt.user; ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29symbolische LinksSie müssten nun alle Dateien aus der
letzten Spalte kopieren und sie unter
/compat/linux speichern, wobei
die Namen der ersten Spalte als symbolische Links auf
diese Dateien zeigen. Damit haben Sie schließlich
folgende Dateien auf Ihrem FreeBSD-System:/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Beachten Sie, dass wenn Sie bereits eine
Linux-Systembibliothek einer zur ersten Spalte
passenden Hauptversionsnummer (laut
ldd-Ausgabe) besitzen, Sie die Datei
aus der zweiten Spalte nicht mehr kopieren müssen,
da die bereits vorhandene Version funktionieren sollte.
Hat die Systembibliothek jedoch eine neuere
Versionsnummer, sollten Sie sie dennoch kopieren.
Sie können die alte Version löschen, solange
Sie einen symbolischen Link auf die neue
Version anlegen. Wenn Sie also folgende Bibliotheken
auf Ihrem System installiert haben:/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27und Sie haben eine neue Binärdatei, die
laut ldd
eine neuere Bibliothek benötigt:libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29Wenn diese sich nur um ein oder zwei Stellen
in der Unterversionsnummer unterscheiden, müssen
Sie /lib/libc.so.4.6.29
nicht auf Ihr System kopieren, da das Programm auch
mit der etwas älteren Version ohne Probleme
funktionieren sollte. Wenn Sie wollen,
können Sie libc.so aber
dennoch ersetzen (das heißt aktualisieren), was dann zu
folgender Ausgabe führt:/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Der Mechanismus der symbolischen Links wird
nur für Linux-Binärdateien
benötigt. Der FreeBSD-Laufzeitlinker sucht
sich die passenden Hauptversionsnummern selbst,
das heißt Sie müssen sich nicht darum
kümmern.
Linux ELF-Binärdateien installierenLinuxELF-BinärdateiELF-Binärdateien benötigen manchmal eine zusätzliche
Kennzeichnung. Wenn Sie versuchen, eine nicht
gekennzeichnete ELF-Binärdatei auszuführen,
werden Sie eine Fehlermeldung ähnlich der folgenden
erhalten:&prompt.user; ./my-linux-elf-binary
ELF binary type not known
AbortDamit der FreeBSD-Kernel eine Linux-ELF-Datei von einer
FreeBSD-ELF-Datei unterscheiden kann, gibt es das Werkzeug
&man.brandelf.1;:&prompt.user; brandelf -t Linux my-linux-elf-binaryGNU WerkzeugeDie GNU Werkzeuge schreiben nun automatisch die
passende Kennzeichnungsinformation in die ELF-Binärdateien,
so dass Sie diesen Schritt in Zukunft nur noch selten benötigen
werden.Namensauflösung konfigurierenWenn DNS nicht funktioniert, oder Sie folgende Fehlermeldung
erhalten:resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keywordmüssen sie /compat/linux/etc/host.conf
wie folgt anlegen:order hosts, bind
multi onDiese Reihenfolge legt fest, dass zuerst
/etc/hosts und anschließend DNS
durchsucht werden. Wenn
/compat/linux/etc/host.conf nicht vorhanden
ist, finden Linux-Anwendungen FreeBSD's
/etc/host.conf und
beschweren sich über die inkompatible FreeBSD-Syntax. Wenn Sie
keinen Nameserver (in /etc/resolv.conf)
konfiguriert haben, sollten Sie den Eintrag
bind entfernen.BorisHollasFür Mathematica 5.x aktualisiert von &mathematica; installierenLinux-AnwendungenMathematicaDieses Dokument beschreibt die Installation der Linux-Version von
&mathematica; 5.x auf einem
FreeBSD-System.Die Linux-Version von &mathematica;
oder &mathematica; für Studenten kann
direkt von Wolfram unter
bestellt werden.Den &mathematica;-Installer startenZuerst müssen Sie &os; mitteilen, dass die
Linux-Binärversion von
&mathematica; die Linux-ABI
verwendet. Dies erreichen Sie am einfachsten, indem Sie die
Standard-ELF-Kennzeichnung für alle ungekennzeichneten
Binärdateien auf Linux festlegen:&prompt.root; sysctl kern.fallback_elf_brand=3Danach wird FreeBSD annehmen, dass alle ungekennzeichneten
ELF-Binärdateien die Linux-ABI verwenden und es wäre
nun möglich, das Installationsprogramm direkt von der
CD-ROM zu starten.Unter &os; müssen allerdings die Datei
MathInstaller in ein lokales Verzeichnis
Ihrer Festplatte kopieren:&prompt.root; mount /cdrom
&prompt.root; cp /cdrom/Unix/Installers/Linux/MathInstaller /LokalesVerzeichnis/In dieser Datei ersetzen Sie in der ersten Zeile den Wert
/bin/sh durch
/compat/linux/bin/sh. Dadurch wird
sichergestellt, dass der Installer von der Linux-Version von
&man.sh.1; aufgerufen wird. Danach ersetzen Sie durch das
im nächsten Abschnitt zu findende Skript oder über
einen Texteditor alle Vorkommen von Linux)
durch FreeBSD). Dadurch ist es dem
&mathematica;-Installer möglich,
durch den Einsatz von uname -s das
Betriebssystem zu bestimmen. &os; wird dabei als
Linux-artiges Betriebssystem behandelt. Durch den Aufruf von
MathInstaller kann
&mathematica; anschließend
installiert werden.Die &mathematica;-Programmdateien anpassenDas von &mathematica; während
der Installation erzeugte Shell-Skript muss angepasst werden,
bevor Sie es einsetzen können. Wenn Sie die
&mathematica;-Programmdateien unter
- /usr/local/bin installieren,
+ /usr/local/bin installieren,
finden Sie in diesem Verzeichnis die symbolische Links
math, mathematica,
Mathematica, sowie
MathKernel. In jeder dieser Dateien
müssen Sie jedes Vorkommen von Linux)
durch FreeBSD) ersetzen (entweder über
einen Texteditor oder durch das folgende Shellskript):#!/bin/sh
cd /usr/local/bin
for i in math mathematica Mathematica MathKernel
do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp
sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i
rm $i.tmp
chmod a+x $i
doneIhr &mathematica;-Passwort anfordernEthernetMAC-AdresseWenn Sie &mathematica; das erste
Mal starten, werden Sie nach einem Passwort gefragt. Haben Sie
noch kein Passwort von Wolfram erhalten, müssen Sie zuerst
im Installationsverzeichnis mathinfo
aufrufen, um Ihre Rechner-ID zu bestimmen. Diese
Rechner-ID basiert ausschließlich auf der MAC-Adresse
Ihrer ersten Netzwerkkarte. Daher ist es nicht möglich,
Ihre &mathematica;-Kopie auf
verschiedenen Rechnern zu installieren.Wenn Sie sich bei Wolfram registrieren (durch E-Mail,
Telefon oder Fax), teilen Sie
Ihre Rechner-ID mit und erhalten dafür
ein aus Zahlengruppen bestehendes Passwort.Das &mathematica;-Frontend über ein Netzwerk
ausführen&mathematica; verwendet einige
spezielle Schriftarten, um Zeichen anzuzeigen, die in den
Standardzeichensätzen nicht vorhanden
sind (z.B. Integrale, Summen, griechische Buchstaben). Das
X-Protokoll verlangt allerdings, dass diese Schriftarten
lokal installiert sind.
Das bedeutet, dass Sie diese Schriftarten von der CD-ROM oder
von einem Rechner, auf dem &mathematica;
installiert ist, auf Ihren Rechner kopieren müssen.
Diese Schriftarten befinden sich normalerweise in
/cdrom/Unix/Files/SystemFiles/Fonts
(&mathematica;-CD) oder in
/usr/local/mathematica/SystemFiles/Fonts
(Festplatte). Die aktuellen Schriftarten befinden sich dabei
in den Unterverzeichnissen Type1 und
X. Um diese Schriftarten zu verwenden,
gibt es mehrere Möglichkeiten, die nun beschrieben werden:Die erste Möglichkeit besteht darin, die Schriftarten
in eins der bereits existierenden Schriftartenverzeichnisse unter
/usr/X11R6/lib/X11/fonts zu kopieren.
Dies bedeutet, dass Sie fonts.dir editieren
müssen, indem Sie die Schriftnamen hinzufügen und
die Anzahl der Schriftarten in der ersten Zeile ändern.
Alternativ ist es auch möglich, im Verzeichnis, in das
Sie die Schriftarten kopiert haben, das Kommando
&man.mkfontdir.1; auszuführen.Die zweite Möglichkeit, besteht darin,
die Verzeichnisse nach
/usr/X11R6/lib/X11/fonts zu kopieren:&prompt.root; cd /usr/X11R6/lib/X11/fonts
&prompt.root; mkdir X
&prompt.root; mkdir MathType1
&prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts
&prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X
&prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
&prompt.root; cd /usr/X11R6/lib/X11/fonts/X
&prompt.root; mkfontdir
&prompt.root; cd ../MathType1
&prompt.root; mkfontdirNun fügen Sie die neuen Schriftartenverzeichnisse in
Ihren Pfad ein:&prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/X
&prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
&prompt.root; xset fp rehashWenn Sie den &xorg;-Server verwenden, können Sie die
Schriftarten-Verzeichnisse automatisch laden lassen, wenn Sie sie
in Ihrer xorg.conf angeben.Für den &xfree86;-Server
verwenden Sie die Datei XF86Config.SchriftartenWenn Sie noch kein/usr/X11R6/lib/X11/fonts/Type1-Verzeichnis
haben, können Sie das
MathType1-Verzeichnis im vorherigen
Beispiel in Type1 umbenennen.AaronKaplanBeigetragen von RobertGetschmannMit Unterstützung durch &maple; installierenLinux-AnwendungenMaple&maple; ist ein mit
&mathematica; vergleichbares kommerzielles
Mathematikprogramm. Sie können dieses Programm unter
kaufen und sich
anschließend registrieren, um eine Lizenz zu erhalten. Um
dieses Programm unter FreeBSD zu installieren, gehen Sie wie
folgt vor:Führen Sie das
INSTALL-Shell-Skript
der Softwaredistribution aus. Wählen Sie die
RedHat-Option aus, wenn Sie das
Installationsprogramm danach fragt. Ein typisches
Installationsverzeichnis wäre z.B.
/usr/local/maple.Wenn Sie dies noch nicht gemacht haben, besorgen Sie
sich nun eine &maple;-Lizenz von
Maple Waterloo Software
()
und kopieren Sie diese nach
/usr/local/maple/license/license.dat.Installieren Sie den
FLEXlm-Lizenz-Manager, indem Sie
das INSTALL_LIC-Installations-Shellskript
ausführen, das mit &maple;
ausgeliefert wird. Geben Sie Ihren primären
Rechnernamen für den Lizenz-Server an.Verändern Sie
/usr/local/maple/bin/maple.system.type
wie folgt: ----- snip ------------------
*** maple.system.type.orig Sun Jul 8 16:35:33 2001
--- maple.system.type Sun Jul 8 16:35:51 2001
***************
*** 72,77 ****
--- 72,78 ----
# the IBM RS/6000 AIX case
MAPLE_BIN="bin.IBM_RISC_UNIX"
;;
+ "FreeBSD"|\
"Linux")
# the Linux/x86 case
# We have two Linux implementations, one for Red Hat and
----- snip end of patch -----Bitte beachten Sie, dass nach
"FreeBSD"|\ kein anderes
Zeichen eingefügt werden darf.Dieser Patch weist &maple; an,
FreeBSD als eine Art von Linux-System zu erkennen.
Das Shell-Skript bin/maple ruft das
Shell-Skript bin/maple.system.type auf,
welches wiederum uname -a verwendet,
um den Namen des Betriebssystems herauszufinden.
Abhängig vom Betriebssystem weiß das System nun,
welche Binärdateien verwendet werden sollen.Starten Sie den Lizenz-Server.Das folgende, als
/usr/local/etc/rc.d/lmgrd.sh
installierte Shell-Skript ist ein komfortabler Weg,
um lmgrd zu starten: ----- snip ------------
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX
export PATH
LICENSE_FILE=/usr/local/maple/license/license.dat
LOG=/var/log/lmgrd.log
case "$1" in
start)
lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2
echo -n " lmgrd"
;;
stop)
lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2
;;
*)
echo "Usage: `basename $0` {start|stop}" 1>&2
exit 64
;;
esac
exit 0
----- snip ------------Versuchen Sie, &maple;
zu starten:&prompt.user; cd /usr/local/maple/bin
&prompt.user; ./xmapleNun sollte das Programm laufen und alles funktionieren.
Falls ja, vergessen Sie nicht, an Maplesoft zu schreiben
und sie wissen zu lassen, dass Sie gerne eine native
FreeBSD-Version hätten.Häufige FehlerquellenDer
FLEXlm-Lizenzmanager kann schwierig
zu bedienen sein. Zusätzliche Dokumentation
zu diesem Thema finden Sie unter .Es ist bekannt, dass lmgrd
sehr pingelig ist, wenn es um die Lizenzdatei geht. Gibt
es Probleme, führt dies zu einem Speicherauszug
(core dump). Ein
korrekte Lizenzdatei sollte ähnlich der
folgenden aussehen:# =======================================================
# License File for UNIX Installations ("Pointer File")
# =======================================================
SERVER chillig ANY
#USE_SERVER
VENDOR maplelmg
FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \
ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \
SN=XXXXXXXXXSeriennummer und Schlüssel wurden durch mehrere
X unkenntlich gemacht. chillig ist ein
Rechnername.Veränderungen an der Lizenzdatei sind möglich,
solange Sie die FEATURE-Zeile nicht
verändern (diese ist durch den Lizenzschlüssel
geschützt).DanPellegBeigesteuert von &matlab; installierenLinux-AnwendungenMATLABIm Folgenden wird die Installation der Linux-Anwendung
&matlab; Version 6.5 auf
&os; beschrieben. Mit Ausnahme der
&java.virtual.machine; (siehe
) läuft die Anwendung
auch ganz gut.Die Linux-Version von &matlab;
können Sie direkt bei The MathWorks bestellen.
Vergewissern Sie sich, dass Sie die Lizenz-Datei
oder eine Anleitung zum Erstellen der Lizenz-Datei erhalten
haben. Wenn Sie mit MathWorks in Kontakt stehen, weisen
Sie bitte auf die fehlende &os;-Version der Software hin.Das &matlab;-InstallationsskriptUm &matlab; zu installieren,
gehen Sie wie folgt vor:Hängen Sie die Installations-CD ein und
wechseln Sie zu root, wie im
Installations-Skript gefordert. Starten Sie die
Installation mit dem folgenden Kommando:&prompt.root; /compat/linux/bin/sh /cdrom/installDie Installation erfordert eine graphische
Benutzeroberfläche. Wenn Sie die Fehlermeldung
erhalten, dass das Display nicht geöffnet werden
konnte, führen Sie das folgende Kommando aus:&prompt.root; setenv HOME ~USERFür USER setzen Sie
den Benutzer ein, von dem aus Sie root
geworden sind.Beantworten Sie die Frage nach dem
&matlab;-Root-Verzeichnis mit:
/compat/linux/usr/local/matlab.Den langen Pfad werden Sie noch öfter brauchen.
Die Tipparbeit können Sie sich mit dem folgenden
Befehl erleichtern:&prompt.root; set MATLAB=/compat/linux/usr/local/matlabEditieren Sie die Lizenz-Datei entsprechend der
Anweisung, die Sie beim Erwerb der Lizenz
erhalten haben.Sie können die Datei schon vorher mit Ihrem
Lieblingseditor bearbeiten. Kopieren Sie die Lizenz-Datei
nach $MATLAB/license.dat
bevor das Installationsprogramm Sie auffordert, die
Datei zu editieren.Schließen Sie die Installation ab.Die &matlab;-Installation
ist jetzt abgeschlossen. Die folgenden Schritte passen
&matlab; an &os; an.Den Lizenzmanager startenErstellen Sie symbolische Links zu den Startskripten
des Lizenzmanagers:&prompt.root; ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW
&prompt.root; ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMWErstellen Sie das Startskript
/usr/local/etc/rc.d/flexlm.sh. Das
folgende Beispiel ist eine geänderte Version des
mitgelieferten Skripts
$MATLAB/etc/rc.lm.glnx86.
Angepasst wurden die Pfade zu den Dateien und der
Start des Lizenzmanagers unter der Linux-Emulation.#!/bin/sh
case "$1" in
start)
if [ -f /usr/local/etc/lmboot_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd'
fi
;;
stop)
if [ -f /usr/local/etc/lmdown_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0Machen Sie Datei ausführbar:&prompt.root; chmod +x /usr/local/etc/rc.d/flexlm.shErsetzen Sie im Skript username
durch einen existierenden Benutzer Ihres Systems
(bitte keinesfalls root).Starten Sie den Lizenzmanager:&prompt.root; /usr/local/etc/rc.d/flexlm.sh startEinrichten der &java;-LaufzeitumgebungErstellen Sie einen symbolischen Link auf eine
unter &os; laufende &java;-Laufzeitumgebung (JRE):&prompt.root; cd $MATLAB/sys/java/jre/glnx86/
&prompt.root; unlink jre; ln -s ./jre1.1.8 ./jreEin &matlab;-Startskript erstellenKopieren Sie das folgende Skript nach
/usr/local/bin/matlab:#!/bin/sh
/compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"Machen Sie das Skript ausführbar:&prompt.root; chmod +x /usr/local/bin/matlabAbhängig von der Version des Ports
emulators/linux_base
kann das Skript auf Fehler laufen. Die Fehler können
Sie vermeiden, indem Sie die Datei
/compat/linux/usr/local/matlab/bin/matlab
editieren. Ändern Sie die nachstehende Zeileif [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then(mit Version 13.0.1 in der Zeile 410) in
die folgende um:if test -L $newbase; thenStopp-Skript für &matlab; erstellenDas nachstehende Skript beendet &matlab;
ordnungsgemäß.Erstellen Sie die Datei
$MATLAB/toolbox/local/finish.m mit
dem nachstehenden Inhalt:! $MATLAB/bin/finish.shÜbernehmen Sie die Zeichenkette
$MATLAB unverändert.Im selben Verzeichnis befinden sich die
Dateien finishsav.m und
finishdlg.m. Die Dateien
sichern die Einstellungen der Arbeitsfläche
bevor &matlab; beendet wird. Wenn Sie eine
der beiden Dateien benutzen, fügen Sie
die obige Zeile unmittelbar nach dem
save-Kommando ein.Erstellen Sie die Datei
$MATLAB/bin/finish.sh mit
nachstehendem Inhalt:#!/usr/compat/linux/bin/sh
(sleep 5; killall -1 matlab_helper) &
exit 0Machen Sie die Datei ausführbar:&prompt.root; chmod +x $MATLAB/bin/finish.sh&matlab; benutzenJetzt können Sie &matlab;
mit dem matlab starten.MarcelMoolenaarBeigetragen von &oracle; installierenLinux-AnwendungenOracleÜbersichtDieses Dokument beschreibt die Installation von
&oracle; 8.0.5
und &oracle; 8.0.5.1 Enterprise Edition
für Linux auf einem FreeBSD-Rechner.Installation der Linux-UmgebungStellen Sie sicher, dass Sie sowohl
emulators/linux_base und
devel/linux_devtools
aus der Ports-Sammlung installiert haben. Wenn Sie mit
diesen Ports Schwierigkeiten haben, müssen Sie
vielleicht ältere Versionen der Linux-Umgebung aus
der Ports-Sammlung installieren.Wenn Sie den Intelligent-Agent verwenden wollen,
müssen Sie zusätzlich das RedHat Tcl-Paket
installieren: tcl-8.0.3-20.i386.rpm.
Zur Installation von RPM-Paketen wir der Port
archivers/rpm benötigt.
Ist der Port installiert, lassen sich RPM-Pakete
anschließend mit dem nachstehenden Befehl
installieren:&prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm packageDie Installation der RPM-Pakete sollte ohne
Fehlermeldung ablaufen.Die &oracle;-Umgebung erzeugenBevor Sie &oracle; installieren
können, müssen Sie eine entsprechende Umgebung erzeugen.
Dieses Dokument beschreibt nur, was Sie
im Speziellen tun müssen, um die
Linux-Version von &oracle; unter FreeBSD
zu installieren, nicht aber, was bereits in der Installationsanleitung
von &oracle; beschrieben wird.Kernel-TuningKernel TuningWie in der Installationsanleitung von
&oracle; beschrieben,
müssen Sie die maximale Shared-Memory Größe
festlegen. Verwenden Sie
SHMMAX nicht unter FreeBSD.
SHMMAX wird lediglich aus
SHMMAXPGS und PGSIZE
berechnet. Definieren Sie stattdessen
SHMMAXPGS. Alle anderen Optionen
können wie in der Anleitung beschrieben verwendet werden.
Zum Beispiel:options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61Passen Sie diese Optionen entsprechend dem von Ihnen
gewünschten Einsatzzweck von
&oracle; an.Stellen Sie außerdem sicher, dass Sie folgende
Optionen in Ihren Kernel kompilieren:options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication&oracle;-Benutzer anlegenLegen Sie den Account oracle an.
Der Account unterschiedet sich von normalen Accounts
dadurch, dass er eine Linux-Shell zugeordnet bekommen muss.
Fügen Sie /compat/linux/bin/bash in die
Datei /etc/shells ein und setzen Sie die
Shell für den oracle-Account auf
/compat/linux/bin/bash.UmgebungNeben den normalen
&oracle;-Variablen, wie z.B.
ORACLE_HOME und ORACLE_SID
müssen Sie die folgenden Variablen setzen:VariableWertLD_LIBRARY_PATH$ORACLE_HOME/libCLASSPATH$ORACLE_HOME/jdbc/lib/classes111.zipPATH/compat/linux/bin
/compat/linux/sbin
/compat/linux/usr/bin
/compat/linux/usr/sbin
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
$ORACLE_HOME/binEs ist empfehlenswert, alle Variablen in der Datei
.profile zu setzen. Ein komplettes
Beispiel sieht folgendermaßen aus:ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH
PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin
PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin
PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin
export PATH&oracle; installierenAuf Grund einer kleinen Unregelmäßigkeit
im Linux-Emulator müssen Sie das Verzeichnis
.oracle unter /var/tmp
erzeugen, bevor Sie das Installationsprogramm starten.
Das Verzeichnis muss dem Account oracle
gehören. Sie sollten &oracle; nun
ohne Probleme installieren können. Treten dennoch Probleme
auf, überprüfen Sie zuerst Ihre
&oracle;-Distribution und Ihre
Konfiguration. Nachdem Sie &oracle;
erfolgreich installiert haben, installieren Sie die Patches
wie in den zwei folgenden Abschnitten beschrieben:Ein häufiges Problem ist, dass der
TCP Protokoll-Adapter nicht korrekt installiert wird.
Daraus folgt, dass Sie keine TCP-Listener starten können.
Dieses Problem kann durch folgende Schritte behoben werden:&prompt.root; cd $ORACLE_HOME/network/lib
&prompt.root; make -f ins_network.mk ntcontab.o
&prompt.root; cd $ORACLE_HOME/lib
&prompt.root; ar r libnetwork.a ntcontab.o
&prompt.root; cd $ORACLE_HOME/network/lib
&prompt.root; make -f ins_network.mk installVergessen Sie nicht, root.sh
nochmals auszuführen!root.sh patchenWährend der
&oracle;-Installation werden einige
Aktionen, die als root
ausgeführt werden müssen, in ein Shell-Skript
mit dem Namen root.sh gespeichert.
Dieses Skript befindet sich im Verzeichnis
orainst. Verwenden Sie folgenden
Patch für root.sh, damit es
das richtige chown Kommando
verwendet, oder lassen Sie das
Skript alternativ unter einer Linux-Shell ablaufen:*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this scriptWenn Sie &oracle; nicht
von CD-ROM installieren, können
Sie Quelldatei für root.sh
verändern. Sie heißt rthd.sh
und befindet sich im orainst-Verzeichnis
des Quellcodebaums.genclntsh patchenDas Skript genclntsh wird verwendet,
um eine Shared-Library für Clients zu erzeugen.
Diese wird bei der Erzeugung der Demos verwendet. Verwenden
Sie folgenden Patch, um die Definition von PATH
auszukommentieren:*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst&oracle; startenWenn Sie den Anweisungen gefolgt sind, sollten Sie nun
in der Lage sein, &oracle; zu starten,
genau so, wie Sie dies auch unter Linux tun würden.HolgerKippBeigetragen von ValentinoVaschettoOriginalversion nach SGML konvertiert durch: &sap.r3; installierenLinux-AnwendungenSAP R/3Installationen von &sap;
unter FreeBSD werden vom &sap; Support-Team
nicht unterstützt – und &sap; bietet Support nur
für zertifizierte Plattformen an! ÜbersichtDieses Dokument beschreibt einen möglichen Weg, um ein
&sap.r3;-System mit
&oracle; Datenbank
für Linux auf einem FreeBSD-Rechner zu installieren,
einschließlich der Installation von FreeBSD und
&oracle;. Zwei verschiedene Konfigurationen
werden beschrieben:&sap.r3; 4.6B (IDES) mit
&oracle; 8.0.5 unter
FreeBSD 4.3-STABLE&sap.r3; 4.6C mit
&oracle; 8.1.7 unter
FreeBSD 4.5-STABLEObwohl dieses Dokument versucht, alle wichtigen Schritte
ausführlich zu beschreiben, besteht nicht die Absicht,
die originalen Installationsanleitungen von
&oracle; und
&sap.r3; zu ersetzen.Benutzen Sie die mit
&sap.r3; Linux Edition
gelieferte Dokumentation für &sap;-
und &oracle;-spezifische Fragen,
sowie die Ressourcen von &oracle; und
&sap;-OSS.Software/ProgrammeFolgende CD-ROMs wurden für die Installation von
&sap; verwendet:&sap.r3; 4.6B, &oracle; 8.0.5BezeichnungNummerBeschreibungKERNEL51009113&sap; Kernel &oracle; / Installation / AIX, Linux,
&solaris;RDBMS51007558&oracle; / RDBMS 8.0.5.X / LinuxEXPORT151010208IDES / DB-Export / Disc 1 of 6EXPORT251010209IDES / DB-Export / Disc 2 of 6EXPORT351010210IDES / DB-Export / Disc 3 of 6EXPORT451010211IDES / DB-Export / Disc 4 of 6EXPORT551010212IDES / DB-Export / Disc 5 of 6EXPORT651010213IDES / DB-Export / Disc 6 of 6Zusätzlich wurde die
&oracle; 8 Server CD-ROM
(Pre-production Version 8.0.5 für Linux, Kernel Version 2.0.33)
verwendet, die allerdings nicht unbedingt nötig ist
und FreeBSD 4.3-STABLE (die Installation wurde kurz
nach dem Erscheinen von 4.3-RELEASE durchgeführt).&sap.r3; 4.6C SR2, &oracle; 8.1.7BezeichnungNummerBeschreibungKERNEL51014004&sap; Kernel &oracle; / &sap; Kernel Version 4.6D / DEC,
LinuxRDBMS51012930&oracle; 8.1.7/ RDBMS / LinuxEXPORT151013953Release 4.6C SR2 / Export / Disc 1 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 2 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 3 of 4EXPORT151013953Release 4.6C SR2 / Export / Disc 4 of 4LANG151013954Release 4.6C SR2 / Language / DE, EN, FR /
Disc 1 of 3Abhängig von den zu installierenden Sprachen kann
es sein, dass zusätzliche Sprach-CDs nötig sind.
Da hier nur Deutsch und Englisch verwendet wurden, ist die
erste Sprachen-CD ausreichend. Nebenbei bemerkt sind
die Nummern aller vier Export-CDs identisch. Das heißt alle
drei Sprachen-CDs haben diesselbe Nummer (das unterscheidet
sie von der Nummerierung der 4.6B IDES-Version).
Zum Zeitpunkt der Erstellung dieses Dokuments lief das
System unter FreeBSD 4.5-STABLE (20.03.2002).&sap;-NotesDie folgenden Anmerkungen sollten vor der Installation
von &sap.r3; gelesen werden, da sie
sich während der Installation als nützlich
erwiesen haben.&sap.r3; 4.6B, &oracle; 8.0.5NummerBezeichnung0171356&sap; Software on Linux: Essential Comments0201147INST: 4.6C R/3 Inst. on UNIX - &oracle;0373203Update / Migration &oracle; 8.0.5 --> 8.0.6/8.1.6
LINUX0072984Release of Digital UNIX 4.0B for &oracle;0130581R3SETUP step DIPGNTAB terminates0144978Your system has not been installed correctly0162266Questions and tips for R3SETUP on
Windows NT/W2K&sap.r3; 4.6C, &oracle; 8.1.7NummerBezeichnung0015023Initializing table TCPDB (RSXP0004) (EBCDIC)0045619R/3 with several languages or typefaces0171356&sap; Software on Linux: Essential Comments0195603RedHat 6.1 Enterprise version: Known problems0212876The new archiving tool SAPCAR0300900Linux: Released DELL Hardware0377187RedHat 6.2: important remarks0387074INST: R/3 4.6C SR2 Installation on UNIX0387077INST: R/3 4.6C SR2 Inst. on UNIX - &oracle;0387078&sap; Software on UNIX: OS Dependencies 4.6C SR2Hardware-AnforderungenDie folgende Ausstattung reicht für die Installation eines
&sap.r3; Systems aus. Für
Produktionszwecke benötigt man natürlich eine
exakte Bestimmung dieser Größen:Komponente4.6B4.6CProzessor2 x 800MHz &pentium; III2 x 800MHz &pentium; IIIHauptspeicher1GB ECC2GB ECCFestplattenplatz50-60GB (IDES)50-60GB (IDES)Für Produktionszwecke sind &xeon; Prozessoren mit
großem Cache, Hochgeschwindigkeitsspeicher (SCSI,
RAID Hardware Controller), USV (unterbrechungsfreie
Stromversorgung) und ECC-RAM empfehlenswert. Der große
Bedarf an Festplattenplatz ergibt sich durch das vorkonfigurierte
IDES System, welches während der Installation
27 GB Datenbankdateien erzeugt. Dieser Speicher ist
auch für neue Produktionssysteme und Anwendungsdaten
ausreichend.&sap.r3; 4.6B, &oracle; 8.0.5Folgende Standard-Hardware wurde verwendet: Ein
Doppelprozessorboard mit zwei 800 MHz &pentium; III
Prozessoren, Adaptec 29160 Ultra160 SCSI Adaptern
(zum Anschluß eines 40/80 GB DLT Bandlaufwerks und eines
CD-ROM-Laufwerks), &mylex; &acceleraid; (2 Kanäle,
Firmware 6.00-1-00 mit 32 MB RAM). An den
&mylex; RAID-Controller wurden 2 (gespiegelte) 17 GB
Festplatten sowie vier 36 GB Festplatten (RAID level 5)
angeschlossen.&sap.r3; 4.6C, &oracle; 8.1.7Für diese Installation wurde ein DELL PowerEdge 2500
verwendet: Ein Doppelprozessorboard mit zwei
1000 MHz &pentium; III Prozessoren
(256 kB Cache), 2 GB PC133 ECC SDRAM, PERC/3 DC PCI
RAID-Controller mit 128 MB, und einem EIDE DVD-ROM Laufwerk.
An den RAID-Controller sind zwei (gespiegelte) 18 GB Festplatten
sowie vier 36 GB Festplatten (RAID level 5) angeschlossen.Installation von FreeBSDAls erstes müssen Sie FreeBSD installieren.
Dazu gibt es mehrere Möglichkeiten, die in
des Handbuchs
beschrieben werden.Aufteilung der FestplatteUm das Ganze zu vereinfachen, wurde sowohl für die
&sap.r3; 46B- als auch die
&sap.r3; 46C SR2-Installation die
gleiche Platteneinteilung verwendet. Nur die Gerätenamen
änderten sich, da die Installationen auf verschiedenen
Hardwareplattformen durchgeführt wurden (Insbesondere
/dev/da sowie
/dev/amr; wenn also jemand z.B.
ein AMI &megaraid; verwendet, so wird er
/dev/amr0s1a anstelle von
/dev/da0s1a vorfinden.):DateisystemGröße (1k-blocks)HDD-Größe (GB)Gemountet nach/dev/da0s1a1.016.3031//dev/da0s1b6Swap/dev/da0s1e2.032.6232/var/dev/da0s1f8.205.3398/usr/dev/da1s1e45.734.36145/compat/linux/oracle/dev/da1s1f2.032.6232/compat/linux/sapmnt/dev/da1s1g2.032.6232/compat/linux/usr/sapKonfigurieren und initialisieren Sie die zwei
logischen Platten mit der &mylex;- oder PERC/3 RAID Software,
bevor Sie beginnen. Diese kann während der BIOS-Bootphase
gestartet werden.Beachten Sie bitte, dass sich diese Platteneinteilung
etwas von den &sap;-Empfehlungen unterscheidet, da &sap;
vorschlägt, die &oracle;-Unterverzeichnisse
(und einige andere) separat einzuhängen – es
ist jedoch einfacher, diese als reale Unterverzeichnisse
zu erzeugen.make world und ein neuer KernelLaden Sie die neuesten STABLE-Quellen herunter.
Aktualisieren Sie das System und erzeugen Sie einen
neuen Kernel, nachdem Sie die Kernelkonfigurationsdatei
angepasst haben. Zusätzlich sollten Sie
die Kernel Parameter
einfügen, die sowohl von &sap.r3;
als auch von &oracle;
benötigt werden.Installation der Linux-UmgebungDas Linux-Basissystem installierenZuerst muss der Port
linux_base
als root installiert werden:
- &prompt.root; cd /usr/ports/emulators/linux_base
-&prompt.root; make package
+ &prompt.root; cd /usr/ports/emulators/linux_base-fc4
+&prompt.root; make install distcleanDie Linux-Entwicklungsumgebung installierenDie Linux-Entwicklungsumgebung wird benötigt, wenn Sie
&oracle; auf Ihrem FreeBSD-System
installieren wollen (siehe ):&prompt.root; cd /usr/ports/devel/linux_devtools
&prompt.root; make install distcleanDie Linux-Entwicklungsumgebung wurde hier jedoch nur für
die &sap.r3; 46B IDES-Installation
verwendet. Sie wird nicht benötigt, wenn die
&oracle;-Datenbank auf dem FreeBSD
System nicht neu gebunden wird. Dies ist dann der Fall,
wenn Sie den &oracle;
Tarball eines Linux-Systems verwenden.Notwendige RPMs installierenRPMsUm das R3SETUP-Programm
zu starten, wird PAM-Unterstützung benötigt.
Während der ersten Installation von
&sap; unter
FreeBSD 4.3-STABLE wurde versucht, zuerst alle von PAM
benötigten Pakete zu installieren. Anschließend
wurde die Installation von PAM erzwungen, was auch ohne
Probleme funktionierte. Für die folgende Installation
von &sap.r3; 4.6C SR2
wurde die Installation von PAM ohne die abhängigen
Pakete direkt erzwungen und es funktionierte ebenfalls.
Es sieht so aus, als würden die abhängigen Pakete
nicht benötigt.&prompt.root; rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \
pam-0.68-7.i386.rpmUm den Intelligent-Agent von
&oracle; 8.0.5 auszuführen,
musste das RedHat Tcl-Paket
tcl-8.0.5-30.i386.rpm installiert werden,
da sonst das Binden (link)
während der &oracle;-Installation
nicht funktionierte. Es gibt noch weitere Punkte beim
Binden von &oracle;, die aber die Kombination
&oracle;-Linux
betreffen und nicht FreeBSD spezifisch sind.Zusätzliche HinweiseEine gute Idee ist es, linprocfs
in /etc/fstab einzufügen;
weitere Informationen dazu erhalten Sie in der Hilfeseite
&man.linprocfs.5;. Weiterhin sollten Sie in
der Datei /etc/sysctl.conf
die Zeile kern.fallback_elf_brand=3
einfügen.Die &sap.r3;-Umgebung erzeugenDie nötigen Dateisysteme erzeugenFür eine einfache Installation reicht es aus,
folgende Dateisysteme zu erzeugen:DateisystemeGröße in GB/compat/linux/oracle45 GB/compat/linux/sapmnt2 GB/compat/linux/usr/sap2 GBAußerdem müssen einige Links angelegt werden.
Ansonsten beschwert sich der
&sap;-Installer, wenn er die
erzeugten Links überprüft:&prompt.root; ln -s /compat/linux/oracle /oracle
&prompt.root; ln -s /compat/linux/sapmnt /sapmnt
&prompt.root; ln -s /compat/linux/usr/sap /usr/sapEine Fehlermeldung während der Installation (hier unter dem
PRD-System und
&sap.r3; 4.6C SR2 könnte
beispielsweise so aussehen:INFO 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:200
Checking existence of symbolic link /usr/sap/PRD/SYS/exe/dbg to
/sapmnt/PRD/exe. Creating if it does not exist...
WARNING 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:400
Link /usr/sap/PRD/SYS/exe/dbg exists but it points to file
/compat/linux/sapmnt/PRD/exe instead of /sapmnt/PRD/exe. The
program cannot go on as long as this link exists at this
location. Move the link to another location.
ERROR 2002-03-19 16:45:36 R3LINKS_IND_IND Ins_SetupLinks:0
can not setup link '/usr/sap/PRD/SYS/exe/dbg' with content
'/sapmnt/PRD/exe'Benutzer und Verzeichnisse anlegen&sap.r3; benötigt zwei
Benutzer und drei Benutzergruppen. Die Benutzernamen
hängen von der (aus drei Buchstaben bestehenden)
SAP-System-ID (SID) ab. Einige
dieser SIDs sind von &sap;
reserviert (z.B. SAP und
NIX. Für eine komplette
Übersicht schlagen Sie bitte in der
&sap;-Dokumentation
nach. Für die IDES-Installation wurde IDS
verwendet, für die 4.6C-SR2-Installation
PRD, da das System für
Produktionszwecke eingesetzt werden sollte. Daraus ergaben
sich folgende Gruppen (die Gruppen-IDs können variieren,
es handelt sich nur um Werte, die für diese spezielle
Installation verwendet wurden):Gruppen-IDGruppen-NameBeschreibung100dbaDatenbank-Administrator101sapsysSAP System102operDatenbank-OperatorBei einer
Standard-&oracle;-Installation
wird nur die Gruppe dba verwendet.
Für die Gruppe oper wird
ebenfalls die Gruppe dba verwendet
(weitere Informationen finden sich in der
&oracle;- und
&sap;-Dokumentation).Zusätzlich werden auch folgende Benutzer
benötigt:Benutzer-IDBenutzernameGenerischer NameGruppeZusätzliche GruppenBeschreibung1000idsadm/prdadmsidadmsapsysoperSAP Administrator1002oraids/oraprdorasiddbaoper&oracle; AdministratorFür das Anlegen des &sap;-Administrators mittels
&man.adduser.8; werden folgende Einträge
(beachten Sie bitte die Shell und das Heimatverzeichnis)
benötigt:Name: sidadm
Password: ******
Fullname: SAP Administrator SID
Uid: 1000
Gid: 101 (sapsys)
Class:
Groups: sapsys dba
HOME: /home/sidadm
Shell: bash (/compat/linux/bin/bash)und für den Datenbank-Administrator:Name: orasid
Password: ******
Fullname: Oracle Administrator SID
Uid: 1002
Gid: 100 (dba)
Class:
Groups: dba
HOME: /oracle/sid
Shell: bash (/compat/linux/bin/bash)Wenn Sie beide Gruppen (dba und
oper) verwenden, sollte auch die Gruppe
oper hinzugefügt werden.Verzeichnisse erzeugenDiese Verzeichnisse werden gewöhnlich als eigene
Dateisysteme erzeugt und gemountet. Letztlich liegt dies
aber an Ihren Anforderungen an das System. Hier wurden
sie als einfache Verzeichnisse angelegt, die sich alle im
gleichen RAID5 befinden:Zuerst werden die Eigentümer und Rechte für
einige Verzeichnisse (als Benutzer root)
gesetzt:&prompt.root; chmod 775 /oracle
&prompt.root; chmod 777 /sapmnt
&prompt.root; chown root:dba /oracle
&prompt.root; chown sidadm:sapsys /compat/linux/usr/sap
&prompt.root; chmod 775 /compat/linux/usr/sapDanach werden (als Benutzer
orasid) einige
Verzeichnisse erzeugt, die alle Unterverzeichnisse von
/oracle/SID sind:&prompt.root; su - orasid
&prompt.root; cd /oracle/SID
&prompt.root; mkdir mirrlogA mirrlogB origlogA origlogB
&prompt.root; mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6
&prompt.root; mkdir saparch sapreorg
&prompt.root; exitFür die &oracle; 8.1.7-Installation
werden ebenfalls zusätzliche Verzeichnisse benötigt:&prompt.root; su - orasid
&prompt.root; cd /oracle
&prompt.root; mkdir 805_32
&prompt.root; mkdir client stage
&prompt.root; mkdir client/80x_32
&prompt.root; mkdir stage/817_32
&prompt.root; cd /oracle/SID
&prompt.root; mkdir 817_32Das Verzeichnis client/80x_32
muss genau so genannt werden. Versuchen Sie nicht,
das x durch eine Zahl oder
einen Buchstaben zu ersetzen.Im dritten Schritt werden wiederum Verzeichnisse (als Benutzer
sidadm) erzeugt:&prompt.root; su - sidadm
&prompt.root; cd /usr/sap
&prompt.root; mkdir SID
&prompt.root; mkdir trans
&prompt.root; exitEinträge in /etc/services&sap.r3; benötigt
einige Einträge in /etc/services,
die während der Installation unter FreeBSD nicht
richtig gesetzt werden. Sie benötigen mindestens
die zur Instanzennummer, in diesem Fall 00,
passenden Einträge. Es ist auch möglich,
direkt alle Einträge für
dp, gw,
sp und ms
von 00 bis 99
einzufügen. Wenn Sie einen
SAP-Router verwenden, oder
den Zugang zu &sap;-OSS benötigen,
müssen Sie auch 99 einfügen,
da der Port 3299 normalerweise für den
SAP-Router-Prozess auf
dem Zielsystem benötigt wird:sapdp00 3200/tcp # SAP Dispatcher. 3200 + Instance-Number
sapgw00 3300/tcp # SAP Gateway. 3300 + Instance-Number
sapsp00 3400/tcp # 3400 + Instance-Number
sapms00 3500/tcp # 3500 + Instance-Number
sapmsSID 3600/tcp # SAP Message Server. 3600 + Instance-Number
sapgw00s 4800/tcp # SAP Secure Gateway 4800 + Instance-NumberNotwendige LokalisierungenLocale&sap; benötigt
mindestens zwei Lokalisierungen, die nicht Teil der
RedHat-Standardinstallation sind. &sap; bietet
diese als RPMs auf ihrem FTP-Server als Downloads
an (diese sind aber nur dann zugänglich, wenn Sie
ein Kunde mit OSS-Zugang sind). Für eine
Übersicht der notwendigen RPMs lesen Sie bitte den
&sap;-Hinweis 0171356.Es ist auch möglich, nur die passenden Links
(z.B. von de_DE und en_US)
zu erzeugen, diese Vorgehensweise wird aber nicht nicht
empfohlen (obwohl es bisher beim IDES-System ohne Probleme
funktioniert hat). Folgende Lokalisationen werden
benötigt:de_DE.ISO-8859-1
en_US.ISO-8859-1Erzeugen Sie die Links wie folgt:&prompt.root; cd /compat/linux/usr/share/locale
&prompt.root; ln -s de_DE de_DE.ISO-8859-1
&prompt.root; ln -s en_US en_US.ISO-8859-1Sind diese nicht vorhanden, wird es während
der Installation zu einigen Problemen kommen. Wenn diese
konsequent ignoriert werden (indem der fehlgeschlagene
Schritt in CENTRDB.R3S auf
OK gesetzt wird), ist es ohne
größeren Aufwand nicht mehr möglich, sich am
&sap;-System anzumelden.Kernel-TuningKernel Tuning&sap.r3;-Systeme verbrauchen
sehr viele Ressourcen. Deshalb wurden folgende Parameter
in die Kernelkonfigurationsdatei eingefügt:# Set these for memory pigs (SAP and Oracle):
options MAXDSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"
# System V options needed.
options SYSVSHM #SYSV-style shared memory
options SHMMAXPGS=262144 #max amount of shared mem. pages
#options SHMMAXPGS=393216 #use this for the 46C inst.parameters
options SHMMNI=256 #max number of shared memory ident if.
options SHMSEG=100 #max shared mem.segs per process
options SYSVMSG #SYSV-style message queues
options MSGSEG=32767 #max num. of mes.segments in system
options MSGSSZ=32 #size of msg-seg. MUST be power of 2
options MSGMNB=65535 #max char. per message queue
options MSGTQL=2046 #max amount of msgs in system
options SYSVSEM #SYSV-style semaphores
options SEMMNU=256 #number of semaphore UNDO structures
options SEMMNS=1024 #number of semaphores in system
options SEMMNI=520 #number of semaphore indentifiers
options SEMUME=100 #number of UNDO keysDie minimalen Werte sind in der von &sap; kommenden
Dokumentation festgelegt. Da es keine Beschreibung für
Linux (und daher auch nicht für FreeBSD) gibt,
entnehmen Sie weitere Informationen dem HP-UX-Abschnitt (32-Bit).
Da das System für die 4.6C SR2-Installation über
mehr Hauptspeicher verfügte, können die
Shared-Segments für &sap; und
&oracle; größer sein.
Wählen Sie daher eine größere Anzahl von
Shared-Memory-Pages.Bei einer &os;-Standardinstallation
auf &i386;-Systemen belassen Sie
MAXDSIZ und DFLDSIZ
auf dem Maximum von 1 GB. Ansonsten könnten
seltsame Fehlermeldungen, wie
ORA-27102: out of memory oder
Linux Error: 12: Cannot allocate memory
auftreten.&sap.r3; installierenDie &sap; CD-ROMs vorbereitenFür eine Installation werden viele CD-ROMs benötigt,
die gemountet und ungemountet werden müssen. Wenn
Sie genügend CD-ROM-Laufwerke haben, können Sie
alle gleichzeitig gemountet werden. Ansonsten kopiert man die
CD-ROM-Inhalte einfach in die entsprechenden Verzeichnisse,/oracle/SID/sapreorg/cd-namewobei cd-nameKERNEL,
RDBMS, EXPORT1,
EXPORT2, EXPORT3,
EXPORT4, EXPORT5 und
EXPORT6 bei einer 4.6B/IDES-Installation und
KERNEL, RDBMS,
DISK1, DISK2,
DISK3, DISK4 und
LANG bei einer 4.6C SR2-Installation
entspricht. Die Dateinamen auf den gemounteten CDs sollten
aus Großbuchstaben bestehen. Ist dies nicht der Fall,
verwenden Sie zum Mounten die Option . Für das
Kopieren der CD-Inhalte verwenden Sie folgenden Befehle:&prompt.root; mount_cd9660 -g /dev/cd0a /mnt
&prompt.root; cp -R /mnt/* /oracle/SID/sapreorg/cd-name
&prompt.root; umount /mntDas Installations-Skript ausführenAls erstes müssen Sie ein Installationsverzeichnis
anlegen:&prompt.root; cd /oracle/SID/sapreorg
&prompt.root; mkdir install
&prompt.root; cd installAnschließend wird das Installations-Skript gestartet,
das nahezu alle relevanten Daten in das Installationsverzeichnis
kopiert:&prompt.root; /oracle/SID/sapreorg/KERNEL/UNIX/INSTTOOL.SHDie IDES-Installation (4.6B) wird mit einem vollständig
angepassten &sap.r3; Demo-System geliefert, das heißt
es gibt sechs statt drei Export-CDs. Da
CENTRDB.R3S
für eine Standard-Zentralinstanz
(&r3; plus Datenbank)
ausgelegt ist, aber nicht für eine IDES-Zentralinstanz,
muss die passende CENTRDB.R3S-Datei
manuell aus dem Verzeichnis
EXPORT1 in das
Installationsverzeichnis kopiert werden, da
R3SETUP ansonsten nur nach drei
EXPORT-CDs verlangt.Die aktuellere Version &sap; 4.6C SR2
wird mit vier EXPORT-CDs geliefert. Die die Installation
überwachende Parameter-Datei heißt hier
CENTRAL.R3S. Im Gegensatz zu früheren
Versionen gibt es nun keine separaten Vorlagen für
die Installation von Zentralinstanzen mit und ohne Datenbank mehr.
&sap; verwendet eine
eigene Vorlage für die
Datenbankinstallation. Um die Installation später
erneut starten, ist es jedoch ausreichend,
die Installation mit der ursprünglichen Datei zu starten.Während und nach der Installation benötigt
&sap;hostname,
um den Rechnernamen, aber nicht den vollständigen
Domain-Namen zu erhalten. Setzen Sie also entweder den
Rechnernamen entsprechend, oder setzen Sie einen Alias mit
alias hostname='hostname -s'
für die Benutzer
orasid und
sidadm
(Und zusätzlich für root.
Dies zumindest für die Installationsschritte, die als
root ausgeführt werden müssen.).
Außerdem ist es möglich, nur die während
der &sap;-Installation erstellten
Dateien .profile und
.login beider Benutzer anzupassen.R3SETUP 4.6B startenStellen Sie sicher, dass LD_LIBRARY_PATH korrekt
gesetzt wurde:&prompt.root; export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/libGehen Sie in das Installationsverzeichnis und starten Sie
R3SETUP als root:&prompt.root; cd /oracle/IDS/sapreorg/install
&prompt.root; ./R3SETUP -f CENTRDB.R3SDas Skript stellt anschließend einige Fragen
(Vorgaben stehen dabei in Klammern, gefolgt von den
aktuellen Eingaben):FrageVorgabeEingabeEnter SAP System ID[C11]IDSEnterEnter SAP Instance Number[00]EnterEnter SAPMOUNT Directory[/sapmnt]EnterEnter name of SAP central host[troubadix.domain.de]EnterEnter name of SAP db host[troubadix]EnterSelect character set[1] (WE8DEC)EnterEnter Oracle server version (1) Oracle 8.0.5,
(2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.61EnterExtract Oracle Client archive[1] (Yes, extract)EnterEnter path to KERNEL CD[/sapcd]/oracle/IDS/sapreorg/KERNELEnter path to RDBMS CD[/sapcd]/oracle/IDS/sapreorg/RDBMSEnter path to EXPORT1 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT1Directory to copy EXPORT1 CD[/oracle/IDS/sapreorg/CD4_DIR]EnterEnter path to EXPORT2 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT2Directory to copy EXPORT2 CD[/oracle/IDS/sapreorg/CD5_DIR]EnterEnter path to EXPORT3 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT3Directory to copy EXPORT3 CD[/oracle/IDS/sapreorg/CD6_DIR]EnterEnter path to EXPORT4 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT4Directory to copy EXPORT4 CD[/oracle/IDS/sapreorg/CD7_DIR]EnterEnter path to EXPORT5 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT5Directory to copy EXPORT5 CD[/oracle/IDS/sapreorg/CD8_DIR]EnterEnter path to EXPORT6 CD[/sapcd]/oracle/IDS/sapreorg/EXPORT6Directory to copy EXPORT6 CD[/oracle/IDS/sapreorg/CD9_DIR]EnterEnter amount of RAM for SAP + DB850Enter (in Megabytes)Service Entry Message Server[3600]EnterEnter Group-ID of sapsys[101]EnterEnter Group-ID of oper[102]EnterEnter Group-ID of dba[100]EnterEnter User-ID of sidadm[1000]EnterEnter User-ID of orasid[1002]EnterNumber of parallel procs[2]EnterWenn Sie die CD-Inhalte nicht in verschiedene
Verzeichnisse kopiert haben, findet das
&sap;-Installationsprogramm
die benötigten CDs nicht (diese sind durch die Datei
LABEL.ASC gekennzeichnet) und
würde von Ihnen verlangen, entweder die CD einzulegen
und zu mounten oder den entsprechenden mount-Pfad
einzugeben.CENTRDB.R3S ist möglicherweise
nicht fehlerfrei. Im vorliegenden Fall wurde die CD EXPORT4
zwar erneut verlangt, dennoch wurde der richtige Schlüssel
(6_LOCATION, danach 7_LOCATION) vorgeschlagen.
Daher ist es problemlos möglich, durch Eingabe der
korrekten Werte fortzufahren.Abgesehen von einigen kleineren (unten angeführten)
Problemen, sollte nun bis zur Installation der
&oracle;-Datenbank alles ohne Probleme
ablaufen.R3SETUP 4.6C SR2 startenStellen Sie sicher, dass LD_LIBRARY_PATH
korrekt gesetzt ist. Dieser Wert unterscheidet sich von dem der
4.6B-&oracle; 8.0.5-Installation:&prompt.root; export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/libGehen Sie in das Installationsverzeichnis und führen
Sie R3SETUP als
root aus:&prompt.root; cd /oracle/PRD/sapreorg/install
&prompt.root; ./R3SETUP -f CENTRAL.R3SDas Skript stellt anschließend einige Fragen
(Vorgaben in Klammern, gefolgt von den aktuellen Eingaben):FrageVorgabeEingabeEnter SAP System ID[C11]PRDEnterEnter SAP Instance Number[00]EnterEnter SAPMOUNT Directory[/sapmnt]EnterEnter name of SAP central host[majestix]EnterEnter Database System ID[PRD]PRDEnterEnter name of SAP db host[majestix]EnterSelect character set[1] (WE8DEC)EnterEnter Oracle server version (2) Oracle 8.1.72EnterExtract Oracle Client archive[1] (Yes, extract)EnterEnter path to KERNEL CD[/sapcd]/oracle/PRD/sapreorg/KERNELEnter amount of RAM for SAP + DB20441800Enter (in Megabytes)Service Entry Message Server[3600]EnterEnter Group-ID of sapsys[100]EnterEnter Group-ID of oper[101]EnterEnter Group-ID of dba[102]EnterEnter User-ID of oraprd[1002]EnterEnter User-ID of prdadm[1000]EnterLDAP support3Enter (no support)Installation step completed[1] (continue)EnterChoose installation service[1] (DB inst,file)EnterBisher verursacht das Anlegen von Benutzern eine
Fehlermeldung während der Installation, und zwar
in den Stadien OSUSERDBSID_IND_ORA (beim Anlegen
des Benutzers orasid),
sowie in OSUSERSIDADM_IND_ORA (beim Anlegen des Benutzers
sidadm).Abgesehen von einigen kleineren (unten angeführten)
Problemen, sollte nun bis zur Installation der
&oracle;-Datenbank alles ohne
Probleme ablaufen.&oracle; 8.0.5 installierenLesen Sie bitte die entsprechenden
&sap;-Hinweise und
&oracle;-Readmes für Probleme,
die Linux
und die &oracle;-Datenbank betreffen.
Die meisten (wenn nicht alle) Probleme
werden durch inkompatible Bibliotheken verursacht.Weiteres zur
&oracle;-Installation
finden Sie im Kapitel Installation
von &oracle;.&oracle; 8.0.5 mit orainst installierenWenn &oracle; 8.0.5 verwendet
wird, werden einige zusätzliche Bibliotheken benötigt,
da &oracle; 8.0.5 mit einer
alten Version von glibc verlinkt wurde, RedHat 6.1 aber
bereits eine aktuellere Version verwendet. Daher müssen
Sie folgende zusätzliche Pakte installieren, um sicherzustellen,
dass die Verlinkung ordnungsgemäß erfolgt:compat-libs-5.2-2.i386.rpmcompat-glibc-5.2-2.0.7.2.i386.rpmcompat-egcs-5.2-1.0.3a.1.i386.rpmcompat-egcs-c++-5.2-1.0.3a.1.i386.rpmcompat-binutils-5.2-2.9.1.0.23.1.i386.rpmLesen Sie bitte die entsprechenden &sap;-Hinweise
und die &oracle;-Readmes.
Ist dies nicht möglich (z.B. aus Zeitmangel, oder bei
Nichtvorhandensein dieser Unterlagen), besteht auch die
Möglichkeit, die originalen Binärdateien oder die
verlinkten Binärdateien eines RedHat-Systems zu
verwenden.Um den Intelligent-Agent zu kompilieren, muss
das RedHat Tcl-Paket installiert sein. Wenn Sie
tcl-8.0.3-20.i386.rpm nicht bekommen
können, sollte es auch problemlos möglich sein,
eine neuere Version, z.B.
tcl-8.0.5-30.i386.rpm für
RedHat 6.1, zu verwenden.Vom Binden abgesehen, läuft die Installation
wie folgt ab:&prompt.root; su - oraids
&prompt.root; export TERM=xterm
&prompt.root; export ORACLE_TERM=xterm
&prompt.root; export ORACLE_HOME=/oracle/IDS
&prompt.root; cd $ORACLE_HOME/orainst_sap
&prompt.root; ./orainstBestätigen Sie alle Meldungen mit Enter,
bis die Software installiert ist. Einzige Ausnahme ist die
Frage nach der Installation des &oracle; On-Line
Text Viewers. Dieser ist unter Linux (noch)
nicht verfügbar. Daher muss diese Option deaktiviert werden.
Anschließend will sich &oracle;
unter Verwendung von i386-glibc20-linux-gcc
anstelle der verfügbaren gcc,
egcs oder
i386-redhat-linux-gcc verlinken.Auf Grund zeitlicher Einschränkungen wurden
für die Installation die Binärdateien der
&oracle; 8.0.5 PreProduction-Version
verwendet, nachdem sich der erste Versuch, die Version
von der RDBMS-CD zum Laufen zu bringen, sowie die
richtigen RPMs zu finden und zu installieren,
zum Alptraum entwickelt hatte.&oracle; 8.0.5 Pre-Production für
Linux (Kernel 2.0.33) installierenDiese Installation ist relativ einfach. Mounten Sie die
CD und starten Sie den Installer. Danach wählen Sie
das &oracle;-Heimatverzeichnis und kopieren Sie die
Binärdateien dorthin. Die Überreste der
vorherigen RDBMS-Installationsversuche werden dabei nicht
entfernt.Danach konnte die
&oracle;-Datenbank
ohne Probleme gestartet werden.Das &oracle; 8.1.7-Linux-Archiv entpackenNehmen Sie das aus dem Installationsverzeichnis eines
Linux-Systems erstellte Archiv oracle81732.tgz
und entpacken Sie es nach
/oracle/SID/817_32/.Mit der &sap.r3;-Installation fortfahrenÜberprüfen Sie als Erstes die
Umgebungseinstellungen der Benutzer
idsamd(sidadm) und
oraids (orasid).
Beide sollten nun die Dateien .profile,
.login und .cshrc
enthalten, die alle hostname benutzen.
Falls der Rechnername Ihres Systems der vollständige Rechnername
ist, müssen Sie in allen drei Dateien
hostname in hostname -s
ändern.Datenbanken ladenDanach kann R3SETUP entweder erneut
gestartet oder fortgesetzt werden (je nachdem, ob Sie das
Programm zuvor beendet hatten oder nicht).
R3SETUP erzeugt nun die Tablespaces und
lädt die Daten (für 46B IDES von EXPORT1 bis
EXPORT6, für 46C von DISK1 bis DISK4) mittels
R3load in die Datenbank.Wenn das Laden der Datenbank abgeschlossen ist
(dieser Vorgang kann einige Stunden dauern!), werden
einige Passwörter angefordert. Für
Testinstallationen können auch
Standard-Passwörter verwendet werden. Liegt
Ihnen allerdings etwas an der Sicherheit Ihres Systems,
so verwenden Sie andere Passwörter.FrageEingabeEnter Password for sapr3sapEnterConfirum Password for sapr3sapEnterEnter Password for syschange_on_installEnterConfirm Password for syschange_on_installEnterEnter Password for systemmanagerEnterConfirm Password for systemmanagerEnterAn diesem Punkt gab es während der 4.6B-Installation
einige Probleme mit dipgntab.ListenerStarten Sie den &oracle;-Listener als Benutzer
orasid
wie folgt:&prompt.user; umask 0; lsnrctl startAnsonsten könnten Sie die Meldung
ORA-12546 erhalten,
da die Sockets nicht über die korrekten Berechtigungen
verfügen werden. Lesen Sie dazu auch den
&sap;-Hinweis 072984.MNLS-Tabellen aktualisierenWenn Sie Nicht-Latin-1-Sprachen in das
&sap;-System
einbauen wollen, müssen Sie die MNLS
(Multi National Language Support)-Tabellen aktualisieren.
Dies wird in den SAP-OSS-Hinweisen 15023 und 45619 beschrieben.
Ansonsten können Sie diese Frage während der
&sap;-Installation
überspringen.Wenn Sie MNLS nicht benötigen, ist es
trotzdem nötig, die Tabelle TCPDB zu überprüfen
und zu initialisieren, falls dies nicht bereits geschehen ist.
Lesen Sie die &sap;-Hinweise 0015023 und 0045619, falls Sie
weitere Informationen benötigen.Abschließende Aufgaben&sap.r3;-Lizenzschlüssel anfordernSie müssen Ihren
&sap.r3;-Lizenzschlüssel anfordern,
da die zur Installation verwendete Lizenz nur für
vier Wochen gültig ist. Dazu ermitteln Sie zuerst Ihren
Hardwareschlüssel. Melden Sie sich als
idsadm an und rufen
Sie saplicense auf:&prompt.root; /sapmnt/IDS/exe/saplicense -getWird saplicense ohne Optionen aufgerufen,
so erhalten Sie eine Übersicht der möglichen Optionen.
Nach Erhalt des Lizenzschlüssels kann dieser
installiert werden:&prompt.root; /sapmnt/IDS/exe/saplicense -installNun müssen Sie folgende Daten eingeben:SAP SYSTEM ID = SID, 3 Zeichen
CUSTOMER KEY = Hardware-Schlüssel, 11 Zeichen
INSTALLATION NO = Installation, 10 Ziffern
EXPIRATION DATE = JJJJMMTT, normalerweise "99991231"
LICENSE KEY = Lizenzschlüssel, 24 ZeichenBenutzer anlegenErzeugen Sie einen Benutzer innerhalb von client 000
(für einige Aufgaben muss dies innerhalb von
client 000 erfolgen, aber nicht als Benutzer
sap* und ddic).
Als Benutzername empfiehlt sich beispielsweise
wartung (oder auf Englisch
service). Benötigte
Profile sind sap_new und
sap_all. Aus Sicherheitsgründen
sollten die Passwörter der Standardbenutzer in allen
Clients geändert werden (dies gilt auch für die Benutzer
sap* und ddic).Transportsystem, Profile, Betriebsarten usw.
konfigurierenInnerhalb von client 000 führen andere Benutzer als
ddic und sap*
normalerweise folgende Aufgaben durch:AufgabeTransaktionKonfiguration des Transportsystems, beispielsweise als
Stand-Alone Transport Domain EntitySTMSErstellen und Editieren von ProfilenRZ10Pflege von Betriebsarten und InstanzenRZ04Diese sowie alle anderen Post-Installationsschritte
sind ausführlich in den &sap;-Installationsanleitungen
beschrieben.initsid.sap (initIDS.sap) anpassenDie Datei /oracle/IDS/dbs/initIDS.sap
enthält das &sap;-Sicherungsprofil. Hier sind die
Größe des verwendeten Band(laufwerks),
die Kompressionsart und so weiter festgelegt. Um dieses
Profil mit sapdba oder brbackup
auszuführen, wurden folgende Werte geändert:compress = hardware
archive_function = copy_delete_save
cpio_flags = "-ov --format=newc --block-size=128 --quiet"
cpio_in_flags = "-iuv --block-size=128 --quiet"
tape_size = 38000M
tape_address = /dev/nsa0
tape_address_rew = /dev/sa0Erklärungen:compress: Das verwendete Bandlaufwerk
war ein HP DLT1. Dieses unterstützt Hardware-Kompression.archive_function: Hier wird das
Standardverhalten beim Sichern von &oracle;-Archivprotokollen
festgelegt. Neue Protokolldateien werden auf Band
gespeichert, bereits gespeicherte erneut gespeichert und
anschließend gelöscht. Dies verhindert eine Vielzahl
von Problemen, falls Sie Ihre Datenbank wiederherstellen
müssen und dabei feststellen, dass eins Ihrer
Archivbänder defekt ist.cpio_flags: Standardmäßig
wird verwendet. Dies setzt die Blockgröße
auf 5120 Bytes. Für DLT-Bänder
werden von HP mindestens 32 K Blockgröße
empfohlen, daher wurde hier
verwendet, um 64 KB-blöcke zu erzeugen.
wurde benötigt, da das
Installationssystem über mehr als 65535 Inodes
verfügt. Die letzte Option ist notwendig, weil
brbackup sich sonst beschwert, wenn
die cpio die Anzahl der gespeicherten
Blöcke ausgibt.cpio_in_flags: Flags, die zum Laden
der Daten vom Band benötigt werden. Das Format wird
dabei automatisch erkannt.tape_size: Damit wird die maximale
Speicherkapazität des Bandes angegeben. Aus
Sicherheitsgründen (das Bandlaufwerk unterstützt
Hardware-Kompression) ist dieser Wert geringfügig kleiner
als der aktuelle Wert.tape_address: Nicht zurückspulendes
Gerät für cpio.tape_address_rew: Zurückspulendes
Gerät für cpio.Konfiguration nach InstallationsendeDie folgenden &sap;-Parameter sollten nach der
Installation optimiert werden (die Beispiele gelten
für IDES 46B, 1 GB Hauptspeicher):NameWertztta/roll_extension250000000abap/heap_area_dia300000000abap/heap_area_nondia400000000em/initial_size_MB256em/blocksize_kB1024ipc/shm_psize_4070000000&sap;-Hinweis 0013026:NameWertztta/dynpro_area2500000&sap;-Hinweis 0157246:NameWertrdisp/ROLL_MAXFS16000rdisp/PG_MAXFS30000Mit obigen Parametern und einem System mit 1 Gigabyte
Hauptspeicher, könnte der Speicherverbrauch in etwa
so aussehen:Mem: 547M Active, 305M Inactive, 109M Wired, 40M Cache, 112M Buf, 3492K FreeWährend der Installation auftretende ProblemeNeustarten von R3SETUP nach Behebung eines ProblemsR3SETUP bricht ab, wenn ein Fehler auftritt. Wenn Sie
(nach Durchsicht der jeweiligen Protokolldateien) den Fehler
behoben haben, müssen Sie R3SETUP erneut aufrufen,
indem Sie für den fehlerhaften Schritt als Option
REPEAT eingeben.Um R3SETUP erneut zu starten, rufen Sie die Datei
einfach mit der entsprechenden R3S-Datei
auf:&prompt.root; ./R3SETUP -f CENTRDB.R3Sfür 4.6B, oder mit&prompt.root; ./R3SETUP -f CENTRAL.R3Sfür 4.6C, unabhängig davon, ob der Fehler mit
CENTRAL.R3S oder mit
DATABASE.R3S auftrat.Zu bestimmten Zeitpunkten nimmt R3SETUP an, dass
sowohl der Datenbank- als auch die &sap;-Prozesse vorhanden
sind und laufen (da dies Schritte sind, die es bereits
ausgeführt hat). Sollten Fehler auftreten (z.B.
wenn sich die Datenbank nicht starten lässt),
müssen Sie sowohl die Datenbank als auch &sap; manuell
neu starten, nachdem Sie die Fehler behoben haben. Erst danach
darf R3SETUP erneut gestartet werden.Achten Sie auch darauf, den &oracle;-Listener erneut
zu starten (als Benutzer orasid
mittels umask 0; lsnrctl start), wenn
dieser beendet wurde (z.B. durch einen notwendigen
Neustart des Systems).Fehler im Stadium OSUSERSIDADM_IND_ORA bei der Ausführung von R3SETUPWenn sich R3SETUP in diesem Stadium beschwert, editieren
Sie die bei der Installation verwendete Version der
Vorlage (CENTRDB.R3S (4.6B) oder
entweder CENTRAL.R3S oder
DATABASE.R3S (4.6C)). Finden Sie
[OSUSERSIDADM_IND_ORA] oder suchen Sie nach dem einzigen
STATUS=ERROR-Eintrag und ändern
Sie die folgenden Werte:HOME=/home/sidadm (war voher leer)
STATUS=OK (hatte den Status ERROR)
Danach können Sie R3SETUP erneut aufrufen.Fehler im Stadium OSUSERDBSID_IND_ORA bei der
Ausführung von R3SETUPWahrscheinlich beschwert sich R3SETUP auch in diesem Stadium.
Der hier auftretende Fehler ähnelt dem im Abschnitt
OSUSERSIDADM_IND_ORA. Editieren Sie einfach die bei
der Installation verwendete Version der Vorlage
(das heißt CENTRDB.R3S (4.6B) oder
entweder CENTRAL.R3S oder
DATABASE.R3S (4.6C)). Finden Sie
[OSUSERDBSID_IND_ORA] oder suchen Sie nach dem einzigen
STATUS=ERROR-Eintrag und ändern
Sie folgenden Eintrag:STATUS=OKDanach können Sie R3SETUP erneut aufrufen.Fehler oraview.vrf FILE NOT FOUND bei der
&oracle;-InstallationSie haben die Option
&oracle; On-Line Text Viewer nicht deaktiviert,
bevor Sie die Installation gestartet haben. Per Voreinstellung
ist diese Option aktiviert, obwohl sie unter Linux gar nicht
verfügbar ist. Deaktivieren Sie daher diese Option im
&oracle;-Installationsmenü und starten Sie die Installation
erneut.Fehler TEXTENV_INVALID bei der Ausführung von R3SETUP,
RFC oder beim Start von SAPGUITritt dieser Fehler auf, so fehlt die korrekte Lokalisierung.
&sap;-Hinweis 0171356 führt die notwendigen RPMs auf,
die installiert sein müssen (zum Beispiel
saplocales-1.0-3,
saposcheck-1.0-1 für
RedHat 6.1). Falls Sie alle damit verbundenen Fehler
ignoriert haben, und bei der Ausführung von R3SETUP
den STATUS jeweils von ERROR auf OK (in CENTRDB.R3S)
gesetzt haben, um R3SETUP anschließend neu zu starten,
wurde das &sap;-System nicht ordnungsgemäß
konfiguriert. Das bedeutet, dass Sie nicht via
SAPgui am System anmelden können,
obwohl das System trotzdem gestartet werden kann. Ein Versuch,
sich über die alte Linux-SAPgui
anzumelden, führte zu folgenden Fehlermeldungen:Sat May 5 14:23:14 2001
*** ERROR => no valid userarea given [trgmsgo. 0401]
Sat May 5 14:23:22 2001
*** ERROR => ERROR NR 24 occured [trgmsgi. 0410]
*** ERROR => Error when generating text environment. [trgmsgi. 0435]
*** ERROR => function failed [trgmsgi. 0447]
*** ERROR => no socket operation allowed [trxio.c 3363]
SpeicherzugriffsfehlerDieses Verhalten kommt daher, weil &sap.r3; nun nicht
in der Lage ist, eine korrekte Lokalisierung zuzuweisen, und
sich daher nicht ordnungsgemäß konfigurieren kann
(durch fehlende Einträge in einigen Datenbank-Tabellen).
Um sich in &sap; anmelden zu können, müssen Sie
folgende Einträge zur Datei DEFAULT.PFL
(lesen Sie dazu auch Hinweis 0043288) hinzufügen:abap/set_etct_env_at_new_mode = 0
install/collate/active = 0
rscp/TCP0B = TCP0BStarten Sie nun das &sap;-System neu. Sie sind nun in der Lage,
sich anzumelden, obwohl einige länderspezifische
Spracheinstellungen fehlerhaft sein könnten. Nachdem Sie diese
Ländereinstellungen korrigiert (und die korrekten
Lokalisierungen installiert) haben, können
Sie diese Einträge wieder aus
DEFAULT.PFL löschen und das
&sap;-System anschließend neu starten.ORA-00001Dieser Fehler trat nur bei einer Installation von
&oracle; 8.1.7 unter FreeBSD
auf. Dies geschah deshalb, weil sich die &oracle;-Datenbank nicht
initialisieren konnte und daher abstürzte. Dadurch
verblieben Semaphore und Shared-Memory
im System. Der nächste Startversuch führte dann
zur Meldung ORA-00001.Suchen Sie diese Semaphore mittels ipcs -a
und entfernen Sie sie mit ipcrm.ORA-00445 (Hintergrundprozess PMON wurde nicht gestartet)Dieser Fehler trat bei &oracle; 8.1.7
auf. Die Meldung erscheint, wenn die Datenbank mit dem
normalen startsap-Skript (zum Beispiel
startsap_majestix_00) aber als Benutzer
prdadm gestartet wird.Dies kann vermieden werden, indem die Datenbank als Benutzer
oraprd über svrmgrl
gestartet wird:&prompt.user; svrmgrl
SVRMGR> connect internal;
SVRMGR> startup;
SVRMGR> exitORA-12546 (den Listener mit den richtigen
Berechtigungen starten)Starten Sie den &oracle;-Listener als Benutzer
oraids mit folgendem Befehl:&prompt.root; umask 0; lsnrctl startAnsonsten könnten Sie die Meldung ORA-12546 erhalten,
da die Sockets nun nicht die richtigen Berechtigungen aufweisen.
Lesen Sie dazu auch den &sap;-Hinweis 0072984.ORA-27102 (kein freier Speicher mehr)Dieser Fehler trat auf, wenn versucht wurde, für
MAXDSIZ und DFLDSIZ
Werte über 1 GB (1024x1024x1024) festzulegen.
Zusätzlich führte dies zur Fehlermeldung
Linux Error 12: Cannot allocate memory.Fehler im Stadium [DIPGNTAB_IND_IND] bei der
Ausführung von R3SETUPFür allgemeine Informationen lesen Sie bitte den
&sap;-Hinweis 0130581 # (R3SETUP - Abbruch im Stadium
DIPGNTAB). Bei der IDES-spezifischen
Installation verwendete der Installationsprozess aus
irgendwelchen Gründen nicht den
korrekten &sap;-Systemnamen IDS, sondern den leeren
String "". Dies führte zu einigen kleineren Problemen
beim Zugriff auf bestimmte Verzeichnisse, da die Pfade durch
SID (in diesem Fall IDS) dynamisch
generiert werden. Das heißt anstatt auf/usr/sap/IDS/SYS/...
/usr/sap/IDS/DVMGS00zuzugreifen, wurden folgende Pfade verwendet:/usr/sap//SYS/...
/usr/sap/D00Um dennoch mit der Installation fortfahren zu können,
wurden ein Link sowie ein zusätzliches Verzeichnis
erzeugt:&prompt.root; pwd
/compat/linux/usr/sap
&prompt.root; ls -l
total 4
drwxr-xr-x 3 idsadm sapsys 512 May 5 11:20 D00
drwxr-x--x 5 idsadm sapsys 512 May 5 11:35 IDS
lrwxr-xr-x 1 root sapsys 7 May 5 11:35 SYS -> IDS/SYS
drwxrwxr-x 2 idsadm sapsys 512 May 5 13:00 tmp
drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 transDieses Verhalten wird auch in den &sap;-Hinweisen 0029227
und 0008401 beschrieben. Bei der Installtion von
&sap; 4.6C trat allerdings keines dieser
Probleme auf.Fehler im Stadium [RFCRSWBOINI_IND_IND] bei der
Ausführung von R3SETUPBei der Installation von &sap; 4.6C
trat dieser Fehler als Folge eines anderen, bereits vorher
aufgetretenen Fehlers auf. Daher müssen Sie sich
die entsprechenden Protokolldateien durchsehen, und danach das
wirkliche (bereits vorher aufgetretene) Problem beheben.Wenn Sie nach dem Durchsehen der Protokolldateien feststellen,
dass dieser Fehler wirklich der eigentliche Fehler ist
(lesen Sie dazu wiederum die &sap;-Hinweise), können
Sie den STATUS des betreffenden Schritts von ERROR auf OK
setzen (und zwar in der Datei CENTRDB.R3S).
Anschließend starten Sie R3SETUP erneut. Nach
der Installation müssen Sie den Report
RSWBOINS der Transaktion
SE38 ausführen. Lesen Sie den &sap;-Hinweis 0162266,
um weitere Informationen zu den Stadien
RFCRSWBOINI und RFCRADDBDIF
zu erhalten.Fehler im Stadium [RFCRADDBDIF_IND_IND] bei der
Ausführung von R3SETUPHier gilt das Gleiche wie für den letzten Fehler.
Stellen Sie durch Überprüfen der Protokolldateien
sicher, dass dieser Fehler nicht durch ein früheres
Problem verursacht wird.Wenn Sie sicher sind, dass &sap;-Hinweis 0162266 auf
Ihr System zutrifft, setzen Sie den STATUS des betreffenden
Stadiums von ERROR auf OK (und zwar in der Datei
CENTRDB.R3S). Anschließend starten
Sie R3SETUP erneut. Nach der Installation müssen Sie den
Report RADDBDIF der Transaktion SE38
ausführen.sigaction sig31: File size limit exceededDieser Fehler trat beim Start des &sap;-Prozesses
disp+work auf. Wird &sap; mit
startsap-Skript gestartet, werden Subprozesse gestartet,
deren Aufgabe es ist, alle anderen &sap;-Prozesse zu starten.
Als Folge davon erkennt startsap dabei auftretende
Fehler nicht.Um zu überprüfen, ob die &sap;-Prozesse korrekt
gestartet wurden, überprüfen Sie den Prozessstatus
mit ps ax | grep SID.
Sie erhalten dadurch eine Liste aller &oracle;- und &sap;-Prozesse.
Wenn einige Prozesse fehlen, oder Sie sich nicht mit dem
&sap;-System verbinden können, überprüfen Sie
wiederum die entsprechenden Protokolldateien, die sich unter
/usr/sap/SID/DVEBMGSnr/work/
befinden. Die zu durchsuchenden Dateien heißen
dev_ms und dev_disp.Wenn &oracle; und &sap; mehr Speicher anfordern als in der
Kernelkonfigurationsdatei festgelegt wurde, wird das
Signal 31 ausgeliefert. Der Fehler
kann behoben werden, indem im Kernel
ein größerer Wert verwendet wird.# larger value for 46C production systems:
options SHMMAXPGS=393216
# smaller value sufficient for 46B:
#options SHMMAXPGS=262144Der Start von saposcol schlug fehlDas Programm saposcol (Version 4.6D) kann
einige Probleme verursachen. Das
&sap;-System verwendet
saposcol,
um Daten über die Systemleistung zu sammeln.
Für die Benutzung des &sap;-Systems hingegen ist es es
nicht erforderlich. Daher handelt es sich hier auch
nur um ein kleineres Problem. Ältere Versionen
von saposcol (z.B. 4.6B) funktionieren, sammeln
allerdings nicht alle Daten (viele Aufrufe geben,
zum Beispiel die CPU-Nutzung, einfach
0 (Null) zurück.Weiterführende ThemenWenn Sie sich fragen, wie die Linux-Binärkompatibilität
unter FreeBSD realisiert wurde, sollten Sie diesen Abschnitt lesen.
Der Großteil der folgenden Informationen stammt aus einer
E-Mail, die von Terry Lambert (tlambert@primenet.com)
an die FreeBSD-Chat-Mailingliste
(freebsd-chat@FreeBSD.org) geschrieben wurde
(Message ID: <199906020108.SAA07001@usr09.primenet.com>).Wie funktioniert es?execution class loaderFreeBSD verfügt über eine execution class
loader genannte Abstraktion. Dabei handelt es sich um einen
Eingriff in den &man.execve.2; Systemaufruf.FreeBSD verfügt über eine Liste von Ladern, anstelle
eines einzigen, auf #!
zurückgreifenden Laders, um Shell-Interpreter oder Shell-Skripte
auszuführen.Historisch gesehen untersuchte der einzige, auf
UNIX-Plattformen vorhandene Lader die "magische Zahl"
(in der Regel die ersten 4 oder 8 Bytes der Datei), um
festzustellen, ob der Binärtyp dem System bekannt war.
War dies der Fall, wurde der Binärlader aufgerufen.Wenn es sich nicht um den zum System gehörigen Binärtyp
handelte, gab &man.execve.2; einen Fehler zurück,
und die Shell versuchte stattdessen, die Datei als Shell-Befehl
auszuführen.Dabei wurde als Standardeinstellung was auch immer die
aktuelle Shell ist festgelegt.Später wurde ein Hack in &man.sh.1; eingefügt,
der die zwei ersten Zeichen untersuchte. Wenn diese
:\n entsprachen,
wurde stattdessen die &man.csh.1;-Shell aufgerufen
(wir glauben, dass dies zuerst von SCO umgesetzt wurde).FreeBSD versucht heute eine Liste von Ladern, unter denen
sich ein allgemeiner Lader für Interpreter befindet. Der
auszuführende Interpreter wird im ersten, durch
Leerzeichen getrennten Feld, der #!-Zeile
angegeben. Lässt sich der Interpreter nicht ermitteln,
wird auf /bin/sh zurückgegriffen.ELFFür die Linux ABI-Unterstützung erkennt FreeBSD
die magische Zahl als ELF-Binärdatei (Zu diesem Zeitpunkt wird
nicht zwischen FreeBSD, &solaris;, Linux oder anderen Systemen
unterschieden, die über ELF-Binärdateien
verfügen.).SolarisDer ELF-Lader sucht nach einer speziellen
Kennzeichnung, die aus einem Kommentarabschnitt
in der ELF-Datei besteht, und die in SVR4/&solaris; ELF
Binärdateien nicht vorhanden ist.Damit Linux-Binärdateien (unter FreeBSD) funktionieren,
müssen sie als Linuxgekennzeichnet werden, und zwar durch
&man.brandelf.1;:&prompt.root; brandelf -t Linux fileNachdem dies geschehen ist, erkennt der ELF-Lader die
Linux-Kennzeichnung der Datei.ELFbrandelfWenn der ELF-Lader die Linux-Kennzeichnung
sieht, wird ein Zeiger in der proc-Struktur
ersetzt. Alle Systemaufrufe werden durch diesen Zeiger indiziert
(in einem traditionellen &unix; System wäre das ein
sysent[]-Strukturfeld, das die Systemaufrufe
enthält). Der Prozess wird weiterhin speziell gekennzeichnet,
so dass der Trap-vector im Signal-trampoline-code eine spezielle
Behandlung erfährt und das Linux-Kernelmodul verschiedene
kleinere Korrekturen vornehmen kann.Der Linux-Systemaufrufvektor enthält neben anderen
Dingen eine Liste der sysent[]-Einträge,
deren Adressen sich im Kernelmodul befinden.Wenn ein Linux-Programm einen Systemaufruf ausführt,
dereferenziert die Trap-Behandlungsroutine den Zeiger auf die
Eintrittspunkte für die Systemaufrufe und erhält damit die
Linux-Eintrittspunkte und nicht die FreeBSD-Eintrittspunkte.Zusätzlich verändert der
Linuxmodus die Systempfade dynamisch; genauso, wie dies die
Option beim Einbinden von Dateisystemen
macht (Achtung: nicht das Dateisystem unionfs!).
Zuerst wird die Datei im Verzeichnis /compat/linux/Originalpfad
gesucht, danach, wenn sie dort nicht gefunden
wurde, wird sie im FreeBSD-Verzeichnis
/Originalpfad
gesucht. Dadurch wird sichergestellt, dass
Binärdateien, die zur Ausführung andere
Binärdateien benötigen, ausgeführt
werden können (so dass alle Linux-Werkzeuge unter der
ABI laufen). Dies bedeutet auch,
dass Linux-Binärdateien FreeBSD-Binärdateien
laden und ausführen können, wenn keine passenden
Linux-Binärdateien vorhanden sind. Ein in
/compat/linux plaziertes &man.uname.1; kann
damit Linux-Programmen vorgaukeln, dass sie auf einem Linux-System
laufen.Im Endeffekt gibt es einen Linux-Kernel innerhalb des
FreeBSD-Kernels. Die Sprungtabellen für Linux-
beziehungsweise FreeBSD-Systemaufrufe verweisen allerdings auf
dieselben Funktionen, die Kerneldienste wie Dateisystemoperationen,
Operationen für den virtuellen Speicher,
Signalübermittlung und System V IPC bereitstellen,
Der einzige Unterschied ist, dass Binärdateien unter FreeBSD
FreeBSD-glue-Funktionen verwenden.
Linux-Binärdateien hingegen verwenden die
Linux-glue-Funktionen. Die meisten
älteren Betriebssysteme hatten ihre eigenen
glue-Funktionen: Funktionsadressen
in einem globalen, statischen sysent[]
Strukturfeld an Stelle von Funktionsadressen, die durch
einen dynamisch initialisierten Zeiger aus der
proc Struktur, die den Aufruf gemacht hatte,
dereferenziert wurden.Welche ist die echte FreeBSD-ABI? Das spielt keine Rolle.
Grundsätzlich ist der einzige Unterschied (zurzeit
ist das so; dies könnte sich in zukünftigen
Versionen leicht ändern und wird sich wahrscheinlich
auch ändern), dass die
FreeBSD-glue-Funktionen statisch in
den Kernel gelinkt sind, und dass die
Linux-glue-Funktionen statisch gelinkt
oder über ein Modul eingebunden werden können.Ja, aber ist das wirkliche eine Emulation? Nein. Es ist eine
Implementierung eines ABIs, keine Emulation. Es ist kein Emulator
(oder Simulator, um der nächsten Frage zuvorzukommen)
beteiligt.Warum wird es manchmal Linux-Emulation genannt?
Um es schwerer zu machen, FreeBSD zu verkaufen. Wirklich, das kommt
daher, weil dies zu einer Zeit implemtiert wurde,
in der es kein anderes Wort
(als Emulation) gab, das beschrieb, was vor sich ging.
Wenn der Kernel nicht entsprechend konfiguriert wurde oder das
Modul geladen wurde, war es falsch zu behaupten, FreeBSD würde
Linux-Binärprogramme ausführen. Man benötigte
ein Wort, das beschrieb, was da geladen
wurde – daher Der Linux-Emulator.
diff --git a/de_DE.ISO8859-1/books/handbook/multimedia/chapter.sgml b/de_DE.ISO8859-1/books/handbook/multimedia/chapter.sgml
index 98b80ac557..7677f232ea 100644
--- a/de_DE.ISO8859-1/books/handbook/multimedia/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/multimedia/chapter.sgml
@@ -1,1940 +1,1938 @@
RossLippertÜberarbeitet von MultimediaÜbersichtFreeBSD unterstützt viele unterschiedliche Soundkarten,
die Ihnen den Genuss von Highfidelity-Klängen auf Ihrem
Computer ermöglichen. Dazu gehört unter anderem die
Möglichkeit, Tonquellen in den Formaten MPEG Audio Layer 3
(MP3), WAV, Ogg Vorbis und vielen weiteren Formaten aufzunehmen
und wiederzugeben. Darüber hinaus enthält die FreeBSD
Ports-Sammlung Anwendungen, die Ihnen das Bearbeiten Ihrer
aufgenommenen Tonspuren, das Hinzufügen von Klangeffekten
und die Kontrolle der angeschlossenen MIDI-Geräte
erlauben.Wenn Sie etwas Zeit investieren, können Sie
mit &os; auch Videos und DVDs abspielen. Im Vergleich
zu Audio-Anwendungen gibt es weniger Anwendungen zum
Kodieren, Konvertieren und Abspielen von Video-Formaten.
Es gab, als dieses Kapitel geschrieben wurde, keine
Anwendung, die einzelne Video-Formate ähnlich wie
audio/sox konvertieren
konnte. Allerdings ändert sich die Software in
diesem Umfeld sehr schnell.In diesem Kapitel wird das Einrichten von Soundkarten
besprochen. beschreibt die Installation
und Konfiguration von X11 und das Einrichten von Videokarten.
Hinweise zur Verbesserung der Wiedergabe finden sich
in diesem Kapitel.Dieses Kapitel behandelt die folgenden Punkte:Die Konfiguration des Systems damit Ihre
Soundkarte erkannt wird.Wie Sie die Funktion einer Soundkarte testen
können.Wie Sie Fehler in den Einstellungen von
Soundkarten finden.Wie Sie MP3s und andere Audio-Formate wiedergeben
und erzeugen.Die Video-Unterstützung des X-Servers.Gute Anwendungen, die Videos abspielen und
kodieren.Die Wiedergabe von DVDs, .mpg-
und .avi-Dateien.Wie Sie CDs und DVDs in Dateien rippen.Die Konfiguration von TV-Karten.Das Einrichten von Scannern.Bevor Sie dieses Kapitel lesen, sollten Sie:Wissen, wie Sie einen neuen Kernel konfigurieren
und installieren ().Der Versuch eine Audio-CD mit &man.mount.8;
einzuhängen erzeugt mindestens einen Fehler;
schlimmstenfalls kann es zu einer Kernel-Panic
kommen. Die Medien besitzen eine andere Kodierung
als normale ISO-Dateisysteme.MosesMooreVon MarcFonvieilleAktualisiert für &os; 5.X von BenediktKöhlerÜbersetzt von UwePierauSoundkarten einrichtenDen Soundtreiber einrichtenPCIISASoundkartenZunächst sollten Sie in Erfahrung bringen,
welches Soundkartenmodell Sie besitzen, welchen Chip
die Karte benutzt und ob es sich um eine PCI- oder
ISA-Karte handelt. &os; unterstützt eine Reihe
von PCI- als auch von ISA-Karten. Die
Hardware-Notes
zählen alle unterstützten Karten und deren
Treiber auf.KernelKonfigurationUm Ihre Soundkarte benutzen zu können, müssen Sie
den richtigen Gerätetreiber laden. Sie haben zwei
Möglichkeiten, den Treiber zu laden: Am einfachsten
ist es, das Modul mit &man.kldload.8; zu laden. Sie
können dazu die Kommandozeile verwenden:&prompt.root; kldload snd_emu10k1Alternativ können Sie auch einen Eintrag
in der Datei /boot/loader.conf
erstellen:snd_emu10k1_load="YES"Beide Beispiele gelten für eine Creative &soundblaster;
Live! Soundkarte. Weitere ladbare Soundmodule sind in
der Datei /boot/defaults/loader.conf
aufgeführt. Wenn Sie nicht sicher sind, welchen
Gerätetreiber Sie laden müssen, laden Sie den
Treiber snd_driver:&prompt.root; kldload snd_driverDer Treiber snd_driver ist ein
Meta-Treiber, der alle gebräuchlichen Treiber lädt
und die Suche nach dem richtigen Treiber vereinfacht.
Weiterhin können alle Treiber über
/boot/loader.conf geladen werden.Wollen Sie feststellen, welcher Treiber für Ihre
Soundkarte vom Metatreiber snd_driver
geladen wurde, sollten Sie sich mit
cat /dev/sndstat den Inhalt der Datei
/dev/sndstat ansehen.Alternativ können Sie die Unterstützung
für die Soundkarte direkt in den Kernel einkompilieren.
Diese Methode im nächsten Abschnitt beschrieben.
Weiteres über den Bau eines Kernels
erfahren Sie im Kapitel
Kernelkonfiguration.Soundkarten in der Kernelkonfiguration
einrichtenZuerst müssen Sie &man.sound.4;, den Treiber für
das Audio-Framework in die Kernelkonfiguration aufnehmen.
Fügen Sie dazu die folgende Zeile in die
Kernelkonfigurationsdatei ein:device soundAls Nächstes müssen Sie den richtigen
Treiber in die Kernelkonfiguration einfügen.
Den Treiber entnehmen Sie bitte der Liste der
unterstützen Soundkarten aus den
Hardware-Notes.
Zum Beispiel wird die Creative &soundblaster; Live!
Soundkarte vom Treiber &man.snd.emu10k1.4;
unterstützt. Für diese Karte verwenden
Sie die nachstehende Zeile:device snd_emu10k1Die richtige Syntax für die Zeile lesen
Sie bitte in der Hilfeseite des entsprechenden
Treibers nach. Die korrekte Syntax für alle
unterstützten Treiber finden Sie außerdem
in der Datei
/usr/src/sys/conf/NOTES.Nicht PnP-fähige ISA-Soundkarten benötigen
(wie alle anderen ISA-Karten auch) weiterhin Angaben zu
den Karteneinstellungen (wie IRQ und I/O-Port).
Die Karteneinstellungen tragen
Sie in die Datei /boot/device.hints
ein. Während des Systemstarts liest der
&man.loader.8; diese Datei und reicht die Einstellungen
an den Kernel weiter. Für eine alte Creative
&soundblaster; 16 ISA-Karte, die sowohl den
&man.snd.sbc.4;- als auch den
snd_sb16-Treiber
benötigt, fügen Sie folgende Zeilen in die
Kernelkonfigurationsdatei ein:device snd_sbc
device snd_sb16In die Datei /boot/device.hints
tragen Sie für diese Karte zusätzlich die
folgenden Einstellungen ein:hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"In diesem Beispiel benutzt die Karte den
I/O-Port 0x220 und den
IRQ 5.Die Manualpage &man.sound.4; sowie des jeweiligen
Treibers beschreiben die Syntax der Einträge in der
Datei /boot/device.hints.Das Beispiel verwendet die vorgegebenen Werte.
Falls Ihre Karteneinstellungen andere Werte vorgeben,
müssen Sie die Werte in der Kernelkonfiguration
anpassen. Weitere Informationen zu dieser Soundkarte
entnehmen Sie bitte der Manualpage
&man.snd.sbc.4;.Die Soundkarte testenNachdem Sie den neuen Kernel gestartet oder das
erforderliche Modul geladen haben, sollte Ihre
Soundkarte in den Systemmeldungen (&man.dmesg.8;)
auftauchen. Zum Beispiel:pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
pcm0: [GIANT-LOCKED]
pcm0: <Cirrus Logic CS4205 AC97 Codec>Den Status der Karte können Sie über
die Datei /dev/sndstat
prüfen:&prompt.root; cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz
16384
kld snd_ich (1p/2r/0v channels duplex default)Die Ausgaben können auf Ihrem System anders
aussehen. Wenn das Gerät pcm
nicht erscheint, prüfen Sie bitte Ihre Konfiguration.
Stellen sie sicher, dass Sie den richtigen Treiber
gewählt haben.
beschreibt häufig auftretende Probleme.Wenn alles glatt lief, haben Sie nun eine
funktionierende Soundkarte. Wenn ein CD-ROM
oder DVD-ROM-Laufwerk an Ihrer Soundkarte angeschlossen
ist, können Sie jetzt mit &man.cdcontrol.1; eine
CD abspielen:&prompt.user; cdcontrol -f /dev/acd0 play 1Es gibt viele Anwendungen, wie
audio/workman, die
eine bessere Benutzerschnittstelle besitzen. Um sich
MP3-Audiodateien anzuhören, können Sie
eine Anwendung wie audio/mpg123 installieren.Eine weitere schnelle Möglichkeit die Karte zu
prüfen, ist es, Daten an das Gerät
/dev/dsp zu senden:&prompt.user; cat Datei > /dev/dspFür
Datei können
Sie eine beliebige Datei verwenden. Wenn Sie einige
Geräusche hören, funktioniert die Soundkarte.Die Einstellungen des Mixers können Sie
mit dem Kommando &man.mixer.8; verändern.
Weiteres lesen Sie bitte in der Hilfeseite
&man.mixer.8; nach.Häufige ProblemeDevice NodeGerätedateiI/O portIRQDSPFehlerLösungsb_dspwr(XX) timed outDer I/O Port ist nicht korrekt angegeben.bad irq XXDer IRQ ist falsch angegeben. Stellen Sie
sicher, dass der angegebene IRQ mit dem Sound IRQ
übereinstimmt.xxx: gus pcm not attached, out of memoryEs ist nicht genug Speicher verfügbar,
um das Gerät zu betreiben.xxx: can't open /dev/dsp!Überprüfen Sie mit fstat |
grep dsp ob eine andere Anwendung das
Gerät geöffnet hat. Häufige
Störenfriede sind esound
oder die Sound-Unterstützung von
KDE.MunishChopraBeigetragen von Mehrere Tonquellen abspielenOft sollen mehrere Tonquellen gleichzeitig
abgespielt werden, auch wenn
beispielsweise esound oder
artsd das Audiogerät
nicht mit einer anderen Anwendung teilen können.Unter FreeBSD können mit &man.sysctl.8;
virtuelle Tonkanäle
eingerichtet werden. Virtuelle Kanäle mischen
die Tonquellen im Kernel (so können mehr
Kanäle als von der Hardware unterstützt
benutzt werden).Die Anzahl der virtuellen Kanäle können
Sie als Benutzer root wie folgt
einstellen:&prompt.root; sysctl dev.pcm.0.play.vchans=4
&prompt.root; sysctl dev.pcm.0.rec.vchans=4
&prompt.root; sysctl hw.snd.maxautovchans=4Im Beispiel werden vier virtuelle Kanäle
eingerichtet, eine im Normalfall ausreichende Anzahl.
Sowohl dev.pcm.0.play.vchans=4 und
dev.pcm.0.rec.vchans=4 sind die Anzahl
der virtuellen Kanäle des Geräts
pcm0, die fürs Abspielen und Aufnehmen
verwendet werden und sie können konfiguriert werden, sobald das
Gerät existiert.
hw.snd.maxautovchans ist die Anzahl der
virtuellen Kanäle, die einem Gerät zugewiesen
werden, wenn es durch &man.kldload.8; eingerichtet
wird. Da das Modul pcm
unabhängig von den Hardware-Treibern geladen werden kann,
gibt hw.snd.maxautovchans die Anzahl
der virtuellen Kanäle an, die später eingerichtete
Geräte erhalten. Lesen Sie dazu &man.pcm.4; für weitere
Informationen.Sie können die Anzahl der virtuellen Kanäle
nur ändern, wenn das Gerät nicht genutzt wird.
Schließen Sie daher zuerst alle Programme (etwa
Musikabspielprogramme oder Sound-Daemonen), die auf
dieses Gerät zugreifen.Wenn Sie ein System ohne &man.devfs.5; einsetzen,
müssen Anwendungen die Geräte
/dev/dsp0.x
verwenden. Wenn dev.pcm.0.rec.vchans wie
oben auf 4 gesetzt wurde, läuft
x von 0 bis 3. Auf Systemen mit
&man.devfs.5; werden die Geräte automatisch
zugeteilt, wenn ein Programm das Gerät
/dev/dsp0 anfordert.JosefEl-RayesBeigetragen von Den Mixer einstellenDie Voreinstellungen des Mixers sind im Treiber
&man.pcm.4; fest kodiert. Es gibt zwar viele Anwendungen
und Dienste, die den Mixer einstellen können
und die eingestellten Werte bei jedem Start wieder
setzen, am einfachsten ist es allerdings, die
Standardwerte für den Mixer
direkt im Treiber einzustellen. Der Mixer kann in
der Datei /boot/device.hints
eingestellt werden:hint.pcm.0.vol="50"Die Zeile setzt die Lautstärke des Mixers
beim Laden des Moduls &man.pcm.4; auf den Wert
50.ChernLeeEin Beitrag von BenediktKöhlerÜbersetzt von MP3-AudioMP3 (MPEG Layer 3 Audio) ermöglicht eine
Klangwiedergabe in CD-ähnlicher Qualität, was Sie sich
auf Ihrem FreeBSD-Rechner nicht entgehen lassen sollten.MP3-PlayerXMMS (X Multimedia System) ist
bei weitem der beliebteste MP3-Player für X11.
WinAmp-Skins können auch mit
XMMS genutzt werden, da die
Benutzerschnittstelle fast identisch mit der von Nullsofts
WinAmp ist. Daneben
unterstützt XMMS auch eigene
Plugins.XMMS kann als
multimedia/xmms Port oder Package installiert
werden.Die Benutzerschnittstelle von
XMMS ist leicht zu erlernen und
enthält eine Playlist, einen graphischen Equalizer und
vieles mehr. Diejenigen, die mit WinAmp vertraut sind, werden
XMMS sehr leicht zu benutzen
finden.Der Port audio/mpg123 ist
ein alternativer, kommandozeilenorientierter MP3-Player.mpg123 kann ausgeführt
werden, indem man das zu benutzende Sound Device und die
- abzuspielende MP3-Datei auf der Kommandozeile wie unten
- angibt:
+ abzuspielende MP3-Datei auf der Kommandozeile angibt. Wenn ihr
+ Sound Device beispielsweise /dev/dsp1.0 lautet
+ und Sie die MP3-Datei Foobar-GreatestHits.mp3
+ hören wollen, geben Sie Folgendes ein:
- &prompt.root; mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
+ &prompt.root; mpg123 -a /dev/dsp1.0Foobar-GreatestHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3.
Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
-
- /dev/dsp1.0
- sollten Sie dabei mit dem dsp-Device Ihres
- Systems ersetzen.CD-Audio Tracks rippenBevor man eine ganze CD oder einen CD-Track in das
MP3-Format umwandeln kann, müssen die Audiodaten von der
CD auf die Festplatte gerippt werden. Dabei werden die CDDA
(CD Digital Audio) Rohdaten in WAV-Dateien kopiert.Die Anwendung cdda2wav die im
sysutils/cdrtools Paket enthalten
ist, kann zum Rippen der Audiodaten und anderen Informationen von CDs
genutzt werden.Wenn die Audio CD in dem Laufwerk liegt, können Sie
mit folgendem Befehl (als root) eine
ganze CD in einzelne WAV-Dateien (eine Datei für jeden
Track) rippen:&prompt.root; cdda2wav -D 0,1,0 -Bcdda2wav unterstützt
auch ATAPI (IDE) CD-ROM-Laufwerke. Um von einem IDE-Laufwerk
zu rippen, übergeben Sie auf der Kommandozeile
statt der SCSI-IDs den Gerätenamen. Das folgende
Kommando rippt den 7. Track:&prompt.root; cdda2wav -D /dev/acd0 -t 7Der Schalter bezieht sich auf
das SCSI Device 0,1,0, das sich aus
dem Ergebnis des Befehls cdrecord -scanbus
ergibt.Um einzelne Tracks zu rippen, benutzen Sie den
Schalter wie folgt:&prompt.root; cdda2wav -D 0,1,0 -t 7Dieses Beispiel rippt den siebten Track der Audio
CD-ROM. Um mehrere Tracks zu rippen, zum Beispiel die Tracks
eins bis sieben, können Sie wie folgt einen Bereich
angeben:&prompt.root; cdda2wav -D 0,1,0 -t 1+7Mit &man.dd.1; können Sie ebenfalls Audio-Stücke
von ATAPI-Laufwerken kopieren. Dies wird in
erläutert.MP3-Dateien kodierenGegenwärtig ist Lame der
meistbenutzte MP3-Encoder. Lame
finden Sie unter audio/lame im
Ports-Verzeichnis.Benutzen Sie die WAV-Dateien, die sie von CD gerippt
haben, und wandeln sie mit dem folgenden Befehl die Datei
audio01.wav in
audio01.mp3 um:&prompt.root; lame -h -b 128 \
--tt "Foo Liedtitel" \
--ta "FooBar Künstler" \
--tl "FooBar Album" \
--ty "2001" \
--tc "Geripped und kodiert von Foo" \
--tg "Musikrichtung" \
audio01.wav audio01.mp3128 kbits ist die gewöhnliche MP3-Bitrate. Viele
bevorzugen mit 160 oder 192 kbits eine höhere Qualität.
Je höher die Bitrate ist, desto mehr Speicherplatz
benötigt die resultierende MP3-Datei, allerdings wird die
Qualität dadurch auch besser. Der Schalter
verwendet den higher quality but a
little slower (höhere Qualität, aber etwas
langsamer) Modus. Die Schalter, die mit
beginnen, sind ID3-Tags, die in der Regel
Informationen über das Lied enthalten und in die
MP3-Datei eingebettet sind. Weitere Optionen können in
der Manualpage von Lame nachgelesen
werden.MP3-Dateien dekodierenUm aus MP3-Dateien eine Audio CD zu erstellen, müssen
diese in ein nicht komprimiertes WAV-Format umgewandelt
werden. Sowohl XMMS als auch
mpg123 unterstützen die Ausgabe
der MP3-Dateien in unkomprimierte Dateiformate.Dekodieren mit XMMS:Starten Sie XMMS.Klicken Sie mit der rechten Maustaste, um das
XMMS-Menu zu öffnen.Wählen Sie Preference im
Untermenü Options.Ändern Sie das Output-Plugin in Disk
Writer Plugin.Drücken Sie Configure.Geben Sie ein Verzeichnis ein (oder wählen Sie
browse), in das Sie die unkomprimierte Datei schreiben
wollen.Laden Sie die MP3-Datei wie gewohnt in
XMMS mit einer Lautstärke
von 100% und einem abgeschalteten EQ.Drücken Sie Play und es wird
so aussehen, als spiele XMMS
die MP3-Datei ab, aber keine Musik ist zu hören. Der
Player überspielt die MP3-Datei in eine Datei.Vergessen Sie nicht, das Output-Plugin wieder in den
Ausgangszustand zurückzusetzen um wieder MP3-Dateien
anhören zu können.Mit mpg123 nach stdout schreiben:Geben Sie mpg123 -s
audio01.mp3 >
audio01.pcm
ein.XMMS schreibt die Datei im
WAV-Format aus während mpg123 die
MP3-Datei in rohe PCM-Audiodaten umwandelt.
cdrecord kann mit beiden Formaten
Audio-CDs erstellen, &man.burncd.8; kann nur rohe
PCM-Audiodaten verarbeiten. Der Dateikopf von WAV-Dateien
erzeugt am Anfang des Stücks ein Knacken. Sie können
den Dateikopf mit dem Werkzeug SoX,
das sich als Paket oder aus dem Port
audio/sox installieren
lässt, entfernen:&prompt.user; sox -t wav -r 44100 -s -w -c 2 track.wav track.rawLesen Sie in diesem Handbuch,
um mehr Informationen zur Benutzung von CD-Brennern mit FreeBSD zu
erhalten.RossLippertBeigetragen von Videos wiedergebenDie Wiedergabe von Videos ist ein neues, sich schnell
entwickelndes, Anwendungsgebiet. Seien Sie geduldig, es
wird nicht alles so glatt laufen, wie bei den
Audio-Anwendungen.Bevor Sie beginnen, sollten Sie das Modell Ihrer
Videokarte und den benutzten Chip kennen. Obwohl
&xorg; und
&xfree86; viele Videokarten
unterstützt, können nur einige Karten Videos
schnell genug wiedergeben. Eine Liste der Erweiterungen,
die der X-Server für eine Videokarte unterstützt,
erhalten Sie unter laufendem X11 mit dem Befehl
&man.xdpyinfo.1;.Halten Sie eine kurze MPEG-Datei bereit, mit der
Sie Wiedergabeprogramme und deren Optionen testen
können. Da einige DVD-Spieler in der Voreinstellung
das DVD-Gerät mit /dev/dvd ansprechen
oder diesen Namen fest einkodiert haben, wollen Sie
vielleicht symbolische Links auf die richtigen
Geräte anlegen:&prompt.root; ln -sf /dev/acd0 /dev/dvd
&prompt.root; ln -sf /dev/acd0 /dev/rdvdWegen &man.devfs.5; gehen gesondert angelegte Links
wie diese bei einem Neustart des Systems verloren.
Damit die symbolischen Links automatisch beim Neustart
des Systems angelegt werden, fügen Sie die
folgenden Zeilen in /etc/devfs.conf
ein:link acd0 dvd
link acd0 rdvdZum Entschlüsseln von DVDs müssen bestimmte
DVD-ROM-Funktionen aufgerufen werden und schreibender
Zugriff auf das DVD-Gerät erlaubt sein.X11 benutzt Shared-Memory und Sie sollten die
nachstehenden &man.sysctl.8;-Variablen auf die
gezeigten Werte erhöhen:kern.ipc.shmmax=67108864
kern.ipc.shmall=32768Video-SchnittstellenXVideoSDLDGAEs gibt einige Möglichkeiten, Videos unter
X11 abzuspielen. Welche Möglichkeit funktioniert,
hängt stark von der verwendeten Hardware ab.
Ebenso hängt die erzielte Qualität von der
Hardware ab. Die Videowiedergabe unter X11 ist ein
aktuelles Thema, sodass jede neue Version von
&xorg; oder von
&xfree86; wahrscheinlich
erhebliche Verbesserung enthält.Gebräuchliche Video-Schnittstellen sind:X11: normale X11-Ausgabe über Shared-Memory.XVideo: Eine Erweiterung der X11-Schnittstelle,
die Videos in jedem X11-Drawable anzeigen kann.SDL: Simple Directmedia Layer.DGA: Direct Graphics Access.SVGAlib: Eine Schnittstelle zur Grafikausgabe auf
der Konsole.XVideoDie Erweiterung XVideo (auch Xvideo,
Xv oder xv) von &xorg; und
&xfree86; 4.X,
erlaubt die beschleunigte Wiedergabe von Videos in
jedem Drawable. Diese Erweiterung liefert auch auf
weniger leistungsfähigen Systemen
(beispielsweise einem PIII 400 MHz Laptop)
eine gute Wiedergabe.Ob die Erweiterung läuft, entnehmen Sie der
Ausgabe von xvinfo:&prompt.user; xvinfoXVideo wird untertsützt, wenn die Ausgabe wie
folgt aussieht:X-Video Extension version 2.2
screen #0
Adaptor #0: "Savage Streams Engine"
number of ports: 1
port base: 43
operations supported: PutImage
supported visuals:
depth 16, visualID 0x22
depth 16, visualID 0x23
number of attributes: 5
"XV_COLORKEY" (range 0 to 16777215)
client settable attribute
client gettable attribute (current value is 2110)
"XV_BRIGHTNESS" (range -128 to 127)
client settable attribute
client gettable attribute (current value is 0)
"XV_CONTRAST" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_SATURATION" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_HUE" (range -180 to 180)
client settable attribute
client gettable attribute (current value is 0)
maximum XvImage size: 1024 x 1024
Number of image formats: 7
id: 0x32595559 (YUY2)
guid: 59555932-0000-0010-8000-00aa00389b71
bits per pixel: 16
number of planes: 1
type: YUV (packed)
id: 0x32315659 (YV12)
guid: 59563132-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x30323449 (I420)
guid: 49343230-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x36315652 (RV16)
guid: 52563135-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x3e0, 0x7c00
id: 0x35315652 (RV15)
guid: 52563136-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x7e0, 0xf800
id: 0x31313259 (Y211)
guid: 59323131-0000-0010-8000-00aa00389b71
bits per pixel: 6
number of planes: 3
type: YUV (packed)
id: 0x0
guid: 00000000-0000-0000-0000-000000000000
bits per pixel: 0
number of planes: 0
type: RGB (packed)
depth: 1
red, green, blue masks: 0x0, 0x0, 0x0Einige der aufgeführten Formate (wie YUV2 oder YUV12)
existieren in machen XVideo-Implementierungen nicht.
Dies kann zu Problemen mit einigen Spielern führen.XVideo wird wahrscheinlich von Ihrer Karte
nicht unterstützt, wenn die die Ausgabe wie
folgt aussieht:X-Video Extension version 2.2
screen #0
no adaptors presentWenn die XVideo-Erweiterung auf Ihrer Karte nicht
läuft, wird es nur etwas schwieriger, die
Anforderungen für die Wiedergabe von Videos zu
erfüllen. Abhängig von Ihrer Videokarte
und Ihrem Prozessor können Sie dennoch zufriedenstellende
Ergebnisse erzielen. Sie sollten vielleicht die
weiterführenden Quellen in zu Rate ziehen,
um die Geschwindigkeit Ihres Systems zu steigern.Simple Directmedia LayerDie Simple Directmedia Layer, SDL,
ist eine zwischen µsoft.windows;, BeOS und &unix;
portable Schnittstelle. Mit dieser Schnittstelle
können Anwendungen plattformunabhängig und
effizient Ton und Grafik benutzen. SDL
bietet eine hardwarenahe Schnittstelle, die manchmal
schneller als die X11-Schnittstelle sein kann.SDL finden Sie in den Ports
im Verzeichnis devel/sdl12.Direct Graphics AccessDie X11-Erweiterung
Direct Graphics Access (DGA) erlaubt es
Anwendungen, am X-Server vorbei direkt in den Framebuffer
zu schreiben. Da die Anwendung und der X-Server auf gemeinsame
Speicherbereiche zugreifen, müssen die Anwendungen
unter dem Benutzer root laufen.Die DGA-Erweiterung kann mit &man.dga.1; getestet
werden. Das Kommando dga wechselt,
jedes Mal wenn eine Taste gedrückt wird, die Farben
der Anzeige. Sie können das Programm mit der
Taste q verlassen.Video-AnwendungenVideo-AnwendungenDieser Abschnitt behandelt Anwendungen aus der
&os;-Ports-Sammlung, die Videos abspielen. An der
Videowiedergabe wird derzeit aktiv gearbeitet, sodass
der Funktionsumfang der Anwendungen von dem hier beschriebenen
abweichen kann.Viele unter &os; laufende Videoanwendungen wurden
unter Linux entwickelt und befinden
sich noch im Beta-Status. Der Betrieb dieser Anwendungen
unter &os; stößt vielleicht auf einige der
nachstehenden Probleme:Eine Anwendung kann eine Datei einer anderen
Anwendung nicht abspielen.Eine Anwendung kann eine selbst produzierte
Datei nicht abspielen.Wenn dieselbe Anwendung auf unterschiedlichen
Maschinen gebaut wird, wird ein Video unterschiedlich
wiedergegeben.Ein vergleichsweise einfacher Filter, wie die
Skalierung eines Bildes, führt zu deutlichen
Artefakten in der Darstellung.Eine Anwendung stürzt häufig ab.Die Dokumentation wird bei der Installation des Ports
nicht installiert. Sie befindet sich entweder auf
dem Internet oder im Verzeichnis
work des Ports.Viele Anwendungen sind zudem sehr Linux-lastig.
Probleme entstehen durch die Implementierung von
Standard-Bibliotheken in Linux-Distributionen oder
dadurch, dass die Anwendung bestimmte Linux-Kernelfunktionen
voraussetzt. Diese Probleme werden nicht immer
vom Betreuer eines Ports bemerkt und umgangen.
In der Praxis entstehen dadurch folgende Probleme:Eigenschaften des Prozessors werden über
/proc/cpuinfo ermittelt.Die falsche Anwendung von Threads führt dazu,
dass sich ein Programm aufhängt statt sich
zu beenden.Die Anwendung hängt von anderen Anwendungen
ab, die sich noch nicht in der &os;-Ports-Sammlung
befinden.Allerdings arbeiten die Anwendungsentwickler bislang mit
den Betreuern der Ports zusammen, sodass zusätzlicher
Portierungsaufwand minimiert wird.MPlayerMPlayer ist ein kürzlich
entstandener und sich stark weiterentwickelnder Video-Spieler.
Das Hauptaugenmerk des MPlayer-Teams
liegt auf Geschwindigkeit und Flexibilität auf
Linux und anderen &unix; Systemen. Das Projekt entstand
weil der Gründer des Teams unzufrieden mit der
Geschwindigkeit bestehender Video-Spieler war. Kritiker
behaupten, dass die Benutzeroberfläche der einfachen
Gestaltung zum Opfer fiel. Wenn Sie sich allerdings erstmal
an die Kommandozeilenoptionen und die Tastensteuerung
gewöhnt haben, funktioniert die Anwendung sehr gut.MPlayer bauenMPlayerbauenMPlayer finden Sie in der
Ports-Sammlung unter
multimedia/mplayer.
Der Bau von MPlayer
berücksichtigt die vorhandene Harware und erzeugt
ein Programm, das nicht auf ein anderes System übertragbar
ist. Es ist daher wichtig, dass Sie das Programm aus
den Ports bauen und nicht das fertige Paket installieren.
Zusätzlich können Sie auf der Kommandozeile
von make noch einige Optionen angeben,
die im Makefile beschrieben sind
und am die Anfang des Baus ausgegeben werden:&prompt.root; cd /usr/ports/multimedia/mplayer
&prompt.root; make
N - O - T - E
Take a careful look into the Makefile in order
to learn how to tune mplayer towards you personal preferences!
For example,
make WITH_GTK1
builds MPlayer with GTK1-GUI support.
If you want to use the GUI, you can either install
/usr/ports/multimedia/mplayer-skins
or download official skin collections from
http://www.mplayerhq.hu/homepage/dload.htmlFür die meisten Benutzer sind die
voreingestellten Option in Ordnung. Wenn Sie
den XviD-Codec benötigen, müssen
Sie auf der Kommandozeile die Option
WITH_XVID angeben. Das
DVD-Gerät können Sie mit der
Option WITH_DVD_DEVICE
angeben. Wenn Sie die Option nicht angeben,
wird /dev/acd0 benutzt.Als dieser Abschnitt verfasst wurde, baute der
MPlayer-Port die
HTML-Dokumentation sowie die beiden Programme
mplayer und
mencoder. Mit
mencoder können Sie
Videodateien umwandeln.Die HTML-Dokumentation von
MPlayer ist sehr lehrreich.
Wenn Sie in diesem Kapitel Informationen über
Video-Hardware oder Schnittstellen vermissen, ist
die MPlayer-Dokumentation
eine ausgezeichnete Quelle. Wenn Sie Informationen
über die Video-Unterstützung unter &unix;
benötigen, sollten Sie die
MPlayer-Dokumentation
auf jeden Fall lesen.MPlayer benutzenMPlayerbenutzenJeder Benutzer von MPlayer
muss in seinem Heimatverzeichnis das Verzeichnis
.mplayer
anlegen. Dieses Verzeichnis können Sie
wie folgt anlegen:&prompt.user; cd /usr/ports/multimedia/mplayer
&prompt.user; make install-userDie Kommandozeilenoptionen von mplayer
sind in der Hilfeseite aufgeführt. Eine genaue
Beschreibung befindet sich in der HTML-Dokumentation.
In diesem Abschnitt wird nur der normale Gebrauch
von mplayer beschrieben.Um eine Datei, wie
testfile.avi,
unter verschiedenen Video-Schnittstellen abzuspielen,
benutzen Sie die Option :&prompt.user; mplayer -vo xv testfile.avi&prompt.user; mplayer -vo sdl testfile.avi&prompt.user; mplayer -vo x11 testfile.avi&prompt.root; mplayer -vo dga testfile.avi&prompt.root; mplayer -vo 'sdl:dga' testfile.aviEs lohnt sich, alle Option zu testen. Die
erzielte Geschwindigkeit hängt von vielen
Faktoren ab und variiert beträchtlich je nach
eingesetzter Hardware.Wenn Sie eine DVD abspielen wollen, ersetzen Sie
testfile.avi durch
.
N ist die Nummer des
Stücks, das Sie abspielen wollen und
Gerät gibt den
Gerätenamen des DVD-ROMs an. Das nachstehende
Kommando spielt das dritte Stück von
/dev/dvd:&prompt.root; mplayer -vo dga -dvd://3 /dev/dvdDas standardmäßig verwendete
DVD-Laufwerk kann beim Bau des
MPlayer-Ports
mit der Option WITH_DVD_DEVICE
festgelegt werden. Die Voreinstellung verwendet
das Gerät /dev/acd0.
Genaueres finden Sie im Makefile
des Ports.Die Tastenkombinationen zum Abbrechen, Anhalten
und Weiterführen der Wiedergabe entnehmen Sie
bitte der Ausgabe von mplayer -h
oder der Hilfeseite.Weitere nützliche Optionen für die
Wiedergabe sind zur Wiedergabe
im Vollbild-Modus und
zur Steigerung der Geschwindigkeit.Damit die Kommandozeile von mplayer
kurz bleibt, kann ein Benutzer Vorgaben in der Datei
.mplayer/config hinterlegen:vo=xv
fs=yes
zoom=yesSchließlich kann mplayer
noch DVD-Stücke in .vob-Dateien
rippen. Das zweite Stück einer DVD wandeln Sie
wie folgt in eine Datei um:&prompt.root; mplayer -dumpstream -dumpfile out.vob -dvd://2 /dev/dvdDie Ausgabedatei out.vob
wird im MPEG-Format abgespeichert und kann mit
anderen Werkzeugen aus diesem Abschnitt bearbeitet
werden.mencodermencoderSie sollten die HTML-Dokumentation lesen, bevor
Sie mencoder benutzen. Es gibt
zwar eine Hilfeseite, die aber ohne die HTML-Dokumentation
nur eingeschräkt nützlich ist. Es gibt
viele Möglichkeiten die Qualität zu verbessern,
die Bitrate zu verringern und Formate zu konvertieren.
Einige davon haben erhebliche Auswirkungen auf die
Geschwindigkeit der Wiedergabe. Zum Start finden
Sie im Folgenden einige Kommandozeilen. Die erste
kopiert einfach eine Datei:&prompt.user; mencoder input.avi -oac copy -ovc copy -o output.aviFalsche Kombinationen von Kommandozeilenparametern
ergeben eventuell Dateien, die selbst
mplayer nicht mehr abspielen kann.
Wenn Sie in eine Datei rippen, sollten Sie daher auf
jeden Fall die Option von
mplayer verwenden.Die nachstehende Kommandozeile wandelt die Datei
input.avi nach
MPEG4 mit MPEG3 für den Ton um (hierfür wird der Ports
audio/lame
benötigt):&prompt.user; mencoder input.avi -oac mp3lame -lameopts br=192 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.aviDie Ausgabedatei lässt sowohl mit
mplayer als auch
xine abspielen.Wenn Sie
input.avi durch
ersetzen und das
Kommando unter root laufen lassen,
können Sie ein DVD-Stück direkt konvertieren.
Da Sie wahrscheinlich beim ersten Mal unzufrieden mit
den Ergebnissen sind, sollten Sie das Stück zuerst
in eine Datei schreiben und anschließend
die Datei weiterverarbeiten.Der Video-Spieler xineDer Video-Spieler xine
ist ein Projekt mit großem Umfang. Das Projekt
will nicht nur ein Programm für alle Video-Anwendungen
bieten, sondern auch eine wiederverwendbare Bibliothek
und ein Programm, das durch Plugins erweiterbar ist.
Das Programm steht als fertiges Paket oder als Port
unter multimedia/xine
zur Verfügung.Der multimedia/xine-Spieler
hat noch ein paar Ecken und Kanten, macht aber insgesamt
einen guten Eindruck. Für einen reibungslosen
Betrieb benötigt xine
entweder eine schnelle CPU oder
die XVideo-Erweiterung. Das GUI
ist etwas schwerfällig.Zurzeit gibt es kein xine-Modul,
das CSS-kodierte DVDs abspielen kann und sich in
der &os; Ports-Sammlung befindet.xine ist benutzerfreundlicher
als MPlayer, bietet allerdings
nicht soviele Möglichkeiten. Am schnellsten läuft
xine mit der
XVideo-Erweiterung.In der Voreinstellung startet xine
eine grafische Benutzeroberfläche. Über
Menüs können Sie Dateien öffnen:&prompt.user; xineAlternativ können Sie das Programm auch ohne
GUI aufrufen und Dateien direkt abspielen:&prompt.user; xine -g -p mymovie.aviDie transcode-Werkzeugetranscode ist kein Spieler,
sondern eine Sammlung von Werkzeugen zur Umwandlung von
Video- und Sounddateien.
transcode mischt Video-Dateien
und kann kaputte Video-Dateien reparieren. Die
Werkzeuge werden als Filter verwendet, das heißt
die Ein- und Ausgaben verwenden
stdin/stdout.Beim Bau von transcode
über den Port multimedia/transcode können
zwar zahreiche Optionen angegeben werden. Empfehlenswert
ist es aber, den Bau mit folgendem Befehl zu starten:&prompt.root; make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \
WITH_MJPEG=yes -DWITH_XVID=yesDiese Einstellungen sollen für die meisten Anwender
ausreichend sein.Um die Fähigkeiten von
transcode zu illustrieren, wird im
folgenden Beispiel eine DivX-Datei in eine PAL MPEG-1-Datei
konvertiert:&prompt.user; transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
&prompt.user; mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpaDie daraus resultierende MPEG-Datei,
output_vcd.mpg,
kann beispielsweise mit MPlayer abgespielt
werden. Sie können sie sogar als Video-CD auf eine CD-R brennen.
Wenn Sie diese Funktion benötigen, müssen Sie
zusätzlich die beiden Programme multimedia/vcdimager und sysutils/cdrdao installieren.Zwar gibt es eine Manualpage zu
transcode, Sie sollen aber auf jeden Fall
auch die Informationen und Beispiele im
transcode-Wiki lesen.Weiterführende QuellenDie Video-Software für &os; entwickelt sich
sehr schnell. Es ist wahrscheinlich, dass die hier
angesprochenen Probleme bald gelöst sind. Bis dahin
müssen Anwender, die das meiste aus den Audio- und
Video-Fähigkeiten von &os; machen wollen, Informationen
aus mehreren FAQs und Tutorien zusammensuchen und
verschiedene Anwendungen nebeneinander betreiben. Dieser
Abschnitt weist auf weitere Informationsquellen hin.Die
MPlayer-Dokumentation
ist sehr aufschlussreich. Die Dokumente sollten wahrscheinlich
von jedem gelesen werden, der hohe Fachkenntnisse über
Video auf &unix; Systemen erlangen will. Die
MPlayer-Mailinglisten reagiert
feindselig auf Personen, die es nicht für nötig
halten, die Dokumentation zu lesen. Wenn Sie Fehlerberichte
an die Liste schicken wollen, lesen Sie bitte vorher die
ausgezeichnete Dokumentation (RTFM).Das
xine HOWTO
enthält allgemein gültige Hinweise zur
Verbesserung der Wiedergabegeschwindigkeit.Schließlich gibt es noch weitere vielversprechende
Anwendungen, die Sie vielleicht ausprobieren wollen:Avifile
gibt es schon als Port
multimedia/avifile.Ogle
wurde ebenfalls schon portiert:
multimedia/ogle.Xtheater.multimedia/dvdauthor,
ist ein Open-Source-Paket, mit dem Sie DVDs erstellen
können.JosefEl-RayesBeigetragen von MarcFonvieilleÜberarbeitet von TV-Karten einrichtenTV-KartenEinführungMit TV-Karten können Sie mit Ihrem Rechner
über Kabel oder Antenne fernsehen. Die meisten
Karten besitzen einen RCA- oder S-Video-Eingang.
Einige Karten haben auch einen FM-Radio-Empfänger.Der &man.bktr.4;-Treiber von &os; unterstützt
PCI-TV-Karten mit einem Brooktree Bt848/849/878/879 oder
einem Conexant CN-878/Fusion 878a Chip. Die Karte sollte
einen der unterstützten Empfänger besitzen, die in
der Hilfeseite &man.bktr.4; aufgeführt sind.Den Treiber einrichtenUm Ihre Karte zu benutzen, müssen Sie den
&man.bktr.4;-Treiber laden. Fügen Sie die
nachstehende Zeile in die Datei
/boot/loader.conf ein:bktr_load="YES"Sie können den Treiber für die TV-Karte
auch fest in den Kernel compilieren. Erweitern Sie
dazu Ihre Kernelkonfiguration um die folgenden Zeilen:device bktr
device iicbus
device iicbb
device smbusDie zusätzlichen Treiber werden benötigt,
da die Komponenten der Karte über einen I2C-Bus
verbunden sind. Bauen und installieren Sie dann den
neuen Kernel.Anschließend müssen Sie Ihr System
neu starten. Während des Neustarts sollte
Ihre TV-Karte erkannt werden:bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
iicbb0: <I2C bit-banging driver> on bti2c0
iicbus0: <Philips I2C bus> on iicbb0 master-only
iicbus1: <Philips I2C bus> on iicbb0 master-only
smbus0: <System Management Bus> on bti2c0
bktr0: Pinnacle/Miro TV, Philips SECAM tuner.Abhängig von Ihrer Hardware können die
Meldungen natürlich anders aussehen. Sie sollten
aber prüfen, dass der Empfänger richtig erkannt wird.
Die entdeckten Geräte lassen sich mit &man.sysctl.8;
oder in der Kernelkonfigurationsdatei überschreiben.
Wenn Sie beispielsweise einen Philips-SECAM-Empfänger
erzwingen wollen, fügen Sie die folgende Zeile
zur Kernelkonfigurationsdatei hinzu:options OVERRIDE_TUNER=6Alternativ können Sie direkt &man.sysctl.8; benutzen:&prompt.root; sysctl hw.bt848.tuner=6Weitere Informationen zu den verschiedenen Optionen finden
Sie in &man.bktr.4; sowie in der Datei
/usr/src/sys/conf/NOTES.Nützliche AnwendungenUm die TV-Karte zu benutzen, müssen Sie eine
der nachstehenden Anwendungen installieren:multimedia/fxtv
lässt das Fernsehprogramm in einem Fenster laufen
und kann Bilder, Audio und Video aufzeichnen.multimedia/xawtv
eine weitere TV-Anwendung, mit den gleichen Funktionen
wie fxtv.misc/alevt dekodiert
und zeigt Videotext/Teletext an.Mit audio/xmradio
lässt sich der FM-Radio-Empfänger, der sich
auf einigen TV-Karten befindet, benutzen.audio/wmtune
ein leicht zu bedienender Radio-Empfänger.Weitere Anwendungen finden Sie in der &os;
Ports-Sammlung.FehlersucheWenn Sie Probleme mit Ihrer TV-Karte haben, prüfen
Sie zuerst, ob der Video-Capture-Chip und der Empfänger
auch wirklich vom &man.bktr.4;-Treiber unterstützt
werden. Prüfen Sie dann, ob Sie die richtigen
Optionen verwenden. Weitere Hilfe erhalten Sie auf
der Mailingliste &a.multimedia.name; und in deren
Archiven.MarcFonvieilleBeigetragen von ScannerScannerEinführungUnter &os; stellt
SANE (Scanner Access Now Easy)
aus der Ports-Sammlung eine einheitliche Schnittstelle
(API)
für den Zugriff auf Scanner bereit.
SANE wiederum greift auf Scanner
mithilfe einiger &os;-Treiber zu.&os; unterstützt sowohl SCSI- als auch USB-Scanner.
Prüfen Sie vor der Konfiguration mithilfe der
Liste der unterstützten Geräte ob Ihr Scanner
von SANE unterstützt wird.
Die Hilfeseite &man.uscanner.4; zählt ebenfalls die
unterstützten USB-Scanner auf.Den Kernel für Scanner einrichtenDa sowohl SCSI- als auch USB-Scanner unterstützt
werden, werden abhängig von der Schnittstelle
unterschiedliche Treiber benötigt.USB-ScannerIm GENERIC-Kernel sind
schon alle, für einen USB-Scanner notwendigen,
Treiber enthalten. Wenn Sie einen angepassten Kernel
benutzen, prüfen Sie, dass die Kernelkonfiguration
die nachstehenden Zeilen enthält:device usb
device uhci
device ohci
device uscannerAbhängig vom Chipsatz Ihrer Systemplatine
benötigen Sie in der Kernelkonfiguration entweder
die Option device uhci oder die
Option device ohci. Die
Kernelkonfiguration kann allerdings auch beide Optionen
enthalten.Wenn Sie den Kernel nicht neu bauen wollen
und einen angepassten Kernel verwenden, können
Sie den Treiber &man.uscanner.4; direkt mit dem
Kommando &man.kldload.8; laden:&prompt.root; kldload uscannerWenn Sie das Modul bei jedem Systemstart laden
wollen, fügen Sie in der Datei
/boot/loader.conf die nachstehende
Zeile hinzu:uscanner_load="YES"Nachdem Sie das System mit dem richtigen Kernel
neu gestartet oder das Modul geladen haben, stecken
Sie den USB-Scanner ein. Danach sollte in den
Systemmeldungen (die Sie mit &man.dmesg.8; betrachten
können) eine Zeile ähnlich der folgenden
erscheinen:uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2Diese Meldung besagt, dass der Scanner die
Gerätedatei /dev/uscanner0
benutzt.SCSI-ScannerWenn Ihr Scanner eine SCSI-Schnittstelle besitzt,
ist die Kernelkonfiguration abhängig vom
verwendeten SCSI-Controller. Der
GENERIC-Kernel unterstützt
die gebräuchlichen SCSI-Controller. Den richtigen
Treiber finden Sie in der Datei NOTES.
Neben dem Treiber muss Ihre Kernelkonfiguration
noch die nachstehenden Zeilen enthalten:device scbus
device passNachdem Sie einen Kernel gebaut und installiert haben,
sollte der Scanner beim Neustart in den Systemmeldungen
erscheinen:pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfersWenn der Scanner während des Systemstarts
ausgeschaltet war, können Sie die Geräteerkennung
erzwingen, indem Sie den SCSI-Bus erneut absuchen.
Verwenden Sie dazu das Kommando &man.camcontrol.8;:&prompt.root; camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successfulDer Scanner wird anschließend in der
SCSI-Geräteliste angezeigt:&prompt.root; camcontrol devlist
<IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0)Weiteres über SCSI-Geräte lesen Sie
bitte in den Hilfeseiten &man.scsi.4; und &man.camcontrol.8;
nach.SANE konfigurierenSANE besteht aus zwei
Teilen, den Backends
(graphics/sane-backends)
und den Frontends
(graphics/sane-frontends).
Das Backend greift auf den Scanner zu. Welches Backend
welchen Scanner unterstützt, entnehmen Sie der
Liste der unterstützten Geräte..
Der Betrieb eines Scanners ist nur dem richtigen
Backend möglich. Die Frontends sind die Anwendungen,
mit denen gescannt wird (xscanimage).Installieren Sie zuerst den Port oder das Paket
graphics/sane-backends.
Anschließend können Sie mit dem Befehl
sane-find-scanner prüfen, ob
SANE Ihren Scanner erkennt:&prompt.root; sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3Die Ausgabe zeigt die Schnittstelle und die verwendete
Gerätedatei des Scanners. Der Hersteller und das
Modell können in der Ausgabe fehlen.Bei einigen USB-Scannern müssen Sie die
Firmware aktualisieren, dies wird in der Hilfeseite
des Backends erklärt. Lesen Sie bitte auch
die Hilfeseiten &man.sane-find-scanner.1; und
&man.sane.7;.Als nächstes müssen Sie prüfen, ob
der Scanner vom Frontend erkannt wird. Die
SANE-Backends werden
mit dem Kommandozeilenwerkzeug &man.scanimage.1;
geliefert. Mit diesem Werkzeug können Sie
sich Scanner anzeigen lassen und den Scan-Prozess
von der Kommandozeile starten. Die Option
zeigt die Scanner an:&prompt.root; scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scannerErscheint die Meldung, dass kein Scanner gefunden
wurde oder wird gar keine Ausgabe erzeugt, konnte
&man.scanimage.1; keinen Scanner erkennen. In diesem
Fall müssen Sie in der Konfigurationsdatei des Backends
das zu benutzende Gerät eintragen. Die
Konfigurationsdateien der Backends befinden sich
im Verzeichnis
/usr/local/etc/sane.d/.
Erkennungsprobleme treten bei bestimmten USB-Scannern
auf.Mit dem USB-Scanner aus
zeigt sane-find-scanner die
folgende Ausgabe:&prompt.root; sane-find-scanner -q
found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0Der Scanner wurde richtig erkennt, er benutzt eine
USB-Schnittstelle und verwendet die Gerätedatei
/dev/uscanner0. Ob der Scanner
vom Frontend erkannt wird, zeigt das nachstehende
Kommando:&prompt.root; scanimage -L
No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).Da der Scanner nicht erkannt wurde, muss die Datei
/usr/local/etc/sane.d/epson.conf editiert
werden. Der verwendete Scanner war ein
&epson.perfection; 1650, daher wird das
epson-Backend benutzt. Lesen Sie
bitte alle Kommentare in der Konfigurationsdatei des
Backends. Die durchzuführenden Änderungen
sind einfach. Kommentieren Sie zunächst alle
Zeilen mit der falschen Schnittstelle aus. Da der
Scanner eine USB-Schnittstelle besitzt, wurden im
Beispiel alle Zeilen, die mit scsi
anfingen, auskommentiert. Fügen Sie dann die
Schnittstelle und den Gerätenamen am Ende der
Datei ein. In diesem Beispiel wurde die nachstehende
Zeile eingefügt:usb /dev/uscanner0Weitere Hinweise entnehmen Sie bitte der Hilfeseite
des Backends. Jetzt können Sie prüfen,
ob der Scanner richtig erkannt wird:&prompt.root; scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scannerDer Scanner wurde nun erkannt. Es ist nicht wichtig,
ob der Hersteller oder das Modell Ihres Scanners korrekt
angezeigt werden. Wichtig ist nur die Ausgabe
`epson:/dev/uscanner0',
die das richtige Backend und den richtigen Gerätenamen
anzeigt.Wenn scanimage -L den Scanner erkannt
hat, ist der Scanner eingerichtet und bereit, zu
scannen.Obwohl wir mit &man.scanimage.1; von der Kommandozeile
scannen können, ist eine graphische Anwendung
zum Scannen besser geeignet. SANE
bietet ein einfaches und effizientes Werkzeug:
xscanimage (graphics/sane-frontends).Xsane
(graphics/xsane)
ist eine weitere beliebte graphische Anwendung.
Dieses Frontend besitzt erweiterte Funktionen
wie den Scan-Modus (beispielsweise Photo, Fax),
eine Farbkorrektur und Batch-Scans. Beide Anwendungen
lassen sich als
GIMP-Plugin verwenden.Den Scanner für Benutzerkonten freigebenVorher wurden alle Tätigkeiten mit
root-Rechten ausgeführt.
Wenn andere Benutzer den Scanner benutzen sollen,
müssen sie Lese- und Schreibrechte auf die
Gerätedatei des Scanners besitzen. Im
Beispiel wird die Datei /dev/uscanner0
verwendet, die der Gruppe operator
gehört. Damit der Benutzer
joe
auf den Scanner zugreifen kann, muss das Konto in
die Gruppe operator aufgenommen
werden:&prompt.root; pw groupmod operator -m joeWeiteres entnehmen Sie bitte der Hilfeseite
&man.pw.8;. Da Mitglieder der Gruppe
operator in der Voreinstellung nur
Leserechte für die Gerätedatei
/dev/uscanner0 besitzen, müssen
Sie ebenfalls die Schreibbrechtigung (0660
oder 0664) vergeben. Dazu fügen Sie
in die Datei /etc/devfs.rules
die nachstehenden Zeilen ein:[system=5]
add path uscanner0 mode 660In die Datei /etc/rc.conf
fügen Sie noch die folgende Zeile ein:devfs_system_ruleset="system"Starten Sie anschließend Ihr System neu.Weitere Informationen finden Sie in &man.devfs.8;.Aus Sicherheitsgründen sollten Sie genau darauf
achten, wen Sie in eine Gruppe aufnehmen, besonders
wenn es sich um die Gruppe operator
handelt.
diff --git a/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml b/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
index 0bd81f1dcf..5cfaab87b2 100644
--- a/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/virtualization/chapter.sgml
@@ -1,1059 +1,1184 @@
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 MacOSVMWare 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
installiert haben, können Sie das gewünschte
Gastbetriebssystem (in unserem Fall FreeBSD) installieren.FreeBSD in VMWare/&macos; X installierenZuerst 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 konfigurierenNachdem Sie FreeeBSD erfolgreich unter
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
verringern.kern.hz=100Ohne diese Einstellung kann ein unbeschäftigtes
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
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.
+
+
+
+ Benedict
+ Reuschling
+ Übersetzt von
+
+
+ Christoph
+ Sold
+
+
+
+
FreeBSD als Host-Betriebssystem
- FreeBSD wird derzeit offiziell von keiner
- Virtualisierungssoftware als Host-Betriebssystem
+ Seit 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, die
- FreeBSD noch als Host-Betriebssystem unterstützen.
- Zusätzlich wird
+ ä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 clean
+
+ Eine 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 vboxdrv
+
+ Um 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 /proc
+
+ Um auch diese Einstellung nach einem Neustart zu erhalten, wird die
+ folgende Zeile in /etc/fstab
+ eingefügt:
+
+ proc /proc procfs rw 0 0
+
+
+ Möglicherweise erscheint eine Fehlermeldung ähnlich der
+ Folgenden, wenn &virtualbox; von einem
+ Terminal aus gestartet wird:
+
+ VirtualBox: supR3HardenedExecDir: couldn't read "", errno=2 cchLink=-1
+
+ Wahrscheinlich 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 yourusername
+
+ Um &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; VirtualBox
+
+ Besuchen 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öglichkeiten
+
+ Zusätzlich wird
daran gearbeitet, &xen; als
- funktionierende Host-Umgebung (dom0) für FreeBSD
- verfügbar zu machen.
+ funktionierende Host-Umgebung (dom0) für &os;
+ verfügbar zu machen. Eine experimentelle Version davon wird in
+ &os; 8.0 erscheinen.
+