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
+ url="https://sourceforge.net/projects/nasm">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.
Wenn die im Dateisystem verwendete
Blockgröße 4 KB beträgt, wird mit dreifacher
Indirektion gearbeitet und die Limitierung sollte durch
die höchste Blocknummer erfolgen, die mit dreifacher
Indirektion dargestellt werden kann (ungefähr
10243 + 10242 + 1024).
In Wirklichkeit liegt das Limit aber bei der (falschen) Anzahl von
1 G - 1 Blocknummern im Dateisystem.
Die maximale Anzahl der Blocknummern müsste
2 G - 1 sein. Es gibt einige Fehler für
Blocknummern nahe 2 G - 1, aber solche Blocknummern
sind bei einer Blockgröße von 4 KB
unerreichbar.Bei Blocknummern von 8 KB und größer sollte
das Limit bei 2 G - 1 Blocknummern liegen,
tatsächlich liegt es aber bei 1 G - 1
Blocknummern. Die Verwendung der korrekten Grenze von
2 G - 1 verursacht Probleme.Wieso erhalte ich die Fehlermeldung
archsw.readin.failed beim Start des
Systems, nachdem ich einen neuen Kernel erstellt
habe?Ihr System und Ihr Kernel sind nicht synchron - dies
ist nicht erlaubt. Sie müssen Ihren Kernel mit
make buildworld und
make buildkernel
aktualisieren.Sie können den zu bootenden Kernel direkt im
zweiten Schritt angeben, indem Sie eine beliebige Taste
drücken, wenn das | erscheint und bevor
der Loader startet.Mein System stürzt beim Booten ab! Was kann ich
tun?Deaktivieren Sie die ACPI-Unterstützung. Dazu
drücken Sie beim Start des Bootloaders die
Leertaste. Das System zeigt folgendes an:OKGeben Sie nununset acpi_loadund danachbootein.Hardware-KompatibilitätAllgemeinesIch will mir neue Hardware für mein
FreeBSD-System zulegen, was soll ich kaufen? Diese Frage wird ständig auf den
FreeBSD-Mailinglisten diskutiert. Da sich die Hardware
ständig ändert, ist das allerdings keine
Überraschung. Trotzdem sollten
Sie unbedingt die Hardware-Informationen von &os;
(&rel.current;
oder
&rel2.current;)
und die
Archive der Mailinglisten durchsehen, bevor Sie
nach der neuesten/besten Hardware fragen. Normalerweise
gab es kurz zuvor eine Diskussion über genau die
Hardware, die Sie sich zulegen wollen.Wenn Sie sich einen Laptop zulegen wollen, sollten Sie
einen Blick in das Archiv der Mailingliste &a.mobile;
werfen. Ansonsten empfiehlt sich ein Blick in das Archiv
von &a.questions; oder auch einer spezialisierte
Mailingliste für diese Art von Hardware.Architekturen und ProzessorenUnterstützt FreeBSD neben x86 auch andere
Architekturen?Ja. FreeBSD ist zurzeit für die Intel x86 und
AMD64 Architekturen verfügbar.
Intel EM64T, IA-64, &arm;, &powerpc;, sun4v und &sparc64;
werden ebenfalls unterstützt. Die Neuzugänge
auf der Liste der in Zukunft unterstützten Plattformen
sind &mips; und &s390;. Abonnieren Sie die Mailingliste
&a.mips;, wenn Sie mehr über
den Stand der Entwicklung erfahren wollen. Schließen
Sie sich der Mailingliste &a.platforms; an, wenn Sie an
grundsätzlichen Diskussionen über neue Architekturen
interessiert sind.Falls Ihre Maschine eine andere Architektur aufweist
und Sie unbedingt sofort etwas benötigen, schlagen
wir vor, dass Sie sich einmal NetBSD oder OpenBSD
ansehen.Unterstützt FreeBSD Symmetric-Multiproccessing
(SMP)?Symmetric-Multiproccessing (SMP) Systeme werden generell
von &os; unterstützt, obwohl in manchen Fällen durch
Fehler im BIOS oder Mainboard Probleme auftreten. Lesen Sie
die Mailingliste &a.smp;, wenn Sie weitere Hinweise
benötigen.&os; nutzt die Vorteile von HyperThreading (HTT)
Unterstützung von Intel-Prozessoren, die diese Eigenschaft
besitzen. Ein Kernel mit der options SMP
Zeile wird automatisch die zusätzlichen logischen
Prozessoren erkennen. Der Standard &os;-Scheduler behandelt die
logischen Prozessoren auf die gleiche Weise wie zusätzliche
physische Prozessoren. Mit anderen Worten, es wird nicht der
Versuch unternommen, die Entscheidungen des Schedulers zu
optimieren, da sich die logischen Prozessoren innerhalb der
gleichen CPU die Ressourcen teilen. Weil diese naive Planung
in schlechterer Leistung resultieren kann, ist es unter
Umständen hilfreich, die logischen Prozessoren über die
sysctl Variable machdep.hlt_logical_cpus zu
deaktivieren. Es ist auch möglich, jede CPU in der
Warteschleife mit der sysctl Variable
machdep.hlt_cpus anzuhalten. Weitere
Informationen finden Sie in der Manualpage &man.smp.4;.Festplatten, Bandlaufwerke, sowie CD- und DVD-LaufwerkeWelche Arten von Festplatten werden von FreeBSD
unterstützt?FreeBSD unterstützt EIDE-, SATA-, SCSI- und
SAS-Laufwerke (mit
kompatiblen Controllern - siehe folgenden Abschnitt),
sowie alle Laufwerke, die die original Western
Digital-Schnittstelle (MFM, RLL, ESDI und
natürlich IDE) benutzen. Ein paar Controller mit
proprietären Schnittstellen könnten nicht
laufen: halten Sie sich an WD1002/3/6/7-Schnittstellen und
Clones.Welche SCSI- oder SAS-Controller werden
unterstützt?Sie finden eine vollständige und aktuelle Liste
in den Hardware-Informationen zu &os;
(&rel.current; oder
&rel2.current;).Welche Arten von Bandlaufwerken werden
unterstützt?FreeBSD unterstützt SCSI-, QIC-36- (mit
QIC-02-Schnittstelle) und QIC-40/80-Bandlaufwerke
(diskettenbasiert). Hierzu gehören auch 8-mm (aka
Exabyte) und DAT-Laufwerke. Die QIC-40/80-Laufwerke sind
bekanntlich sehr langsam.Einige der frühen 8-mm-Laufwerke sind nicht
besonders kompatibel zu SCSI-2 und könnten unter
FreeBSD nicht einwandfrei funktionieren.Unterstützt FreeBSD Bandwechsler?Das Gerät &man.ch.4; und das Kommando
chio unterstützen Bandwechsler.
Details zum Betrieb des Wechslers finden Sie in der
Hilfeseite &man.chio.1;.Falls Sie nicht AMANDA oder
ein anderes Produkt benutzen, das den Wechsler bereits
kennt, bedenken Sie, dass die Programme nur wissen,
wie sie ein Band von einem Punkt zu einem anderen bewegen
müssen. Sie selbst müssen sich also merken, in
welchem Einschub sich ein Band befindet und zu welchem
Einschub das Band, das sich gerade im Laufwerk befindet,
zurück muss.Welche CDROM-Laufwerke werden von FreeBSD
unterstützt?Jedes an einem unterstützten Controller
angeschlossene SCSI-Laufwerk wird
unterstützt.Die folgenden proprietären CDROM-Schnittstellen
werden ebenfalls unterstützt:Mitsumi LU002 (8bit), LU005 (16bit) und FX001D
(16bit 2x Speed).Sony CDU 31/33ASound Blaster Non-SCSI CDROMMatsushita/Panasonic CDROMATAPI compatible IDE CDROMsVon allen Nicht-SCSI-Laufwerken ist bekannt, dass
sie im Vergleich zu SCSI-Laufwerken extrem langsam sind.
Einige ATAPI-CDROMs könnten nicht
funktionieren.FreeBSD kann direkt von der offiziellen &os; CD-ROM,
sowie den CD-ROMs von Daemon News und &os; Mall,
gebootet werden.Welche CD-Brenner werden von FreeBSD
unterstützt?FreeBSD unterstützt alle ATAPI-kompatiblen IDE
CD-R und CD-RW Brenner. Lesen Sie dazu auch
&man.burncd.8;.FreeBSD unterstützt ebenfalls SCSI CD-R und CD-RW
Brenner. Installieren und benutzen Sie das Paket
cdrecord aus der Ports-Sammlung. Dazu
müssen Sie allerdings das Gerät
pass mit in Ihren Kernel
aufnehmen.Unterstützt FreeBSD &iomegazip;-Laufwerke?FreeBSD unterstützt alle
gängigen SCSI- und ATAPI-&iomegazip;-Laufwerke.
Ihr SCSI-ZIP-Laufwerk darf
nur mit den SCSI-Ziel-IDs 5 oder 6 laufen, aber Sie
können sogar davon booten, falls das BIOS Ihres
Hostadapters dies unterstützt. Es ist nicht bekannt,
welche Hostadapter das Booten von anderen Zielen als 0
oder 1 erlauben; daher werden Sie in ihren
Handbüchern nachsehen müssen, wenn Sie dieses
Merkmal benutzen möchten.FreeBSD unterstützt ZIP-Laufwerke, die an der
parallelen Schnittstelle angeschlossen sind. Der Kernel
sollte die folgenden Treiber enthalten:
scbus0,
da0,
ppbus0 und
vp0 (der GENERIC-Kernel
enthält alle, außer
vp0). Wenn diese Treiber
vorhanden sind, sollte das Laufwerk an der parallelen
Schnittstelle als /dev/da0s4
verfügbar sein. Zip-Datenträger können mit
mount /dev/da0s4 /mnt ODER
(DOS-formatierte) mount_msdos /dev/da0s4
/mnt gemountet werden.Lesen Sie auch den
FAQ-Eintrag zu Wechseldatenträgern und die Anmerkungen zum Thema
Formatierung im Kapitel
Administration.Unterstützt FreeBSD &jaz;, EZ und andere
Wechsellaufwerke?Ja. Bei den meisten dieser Geräte handelt es sich
um SCSI-Geräte, die von FreeBSD auch als solche
angesprochen werden. Lediglich das IDE-EZ-Laufwerk wird
als IDE-Laufwerk angesprochen.Schalten Sie die Laufwerke ein, bevor Sie Ihr
System booten.Müssen Sie Medien im
laufenden Betrieb wechseln, sollten Sie zuvor &man.mount.8;,
&man.umount.8;, sowie &man.camcontrol.8; (für
SCSI-Laufwerke) oder &man.atacontrol.8; (für
IDE-Laufwerke), sowie den Abschnitt zur Nutzung von Wechsellaufwerken
dieser FAQ lesen.Tastaturen und MäuseUnterstützt FreeBSD meine Tastatur mit
USB-Anschluss?Ja. FreeBSD unterstützt USB-Tastaturen.Wenn Sie die Unterstützung für USB-Tastaturen
konfiguriert haben, ist die AT-Tastatur
als /dev/kbd0 und die USB-Tastatur
als /dev/kbd1 verfügbar. Dies
gilt natürlich nur, wenn beide Tastaturen
angeschlossen sind; falls nur die USB-Tastatur
angeschlossen ist, ist diese als
/dev/ukbd0 verfügbar.Wenn Sie die USB-Tastatur an der Systemkonsole
benutzen wollen, müssen Sie dies dem System explizit
mitteilen. Dazu muss das folgende Kommando
während des Systemstarts ausgeführt
werden:&prompt.root; kbdcontrol -k /dev/kbd1 < /dev/console > /dev/nullWenn Sie nur die USB-Tastatur angeschlossen haben, ist
diese als /dev/ukbd0 verfügbar;
daher muss in diesem Fall das folgende Kommando
benutzt werden:&prompt.root; kbdcontrol -k /dev/ukbd0 < /dev/console > /dev/nullUm diese Änderung auch noch nach dem Neustarten
verfügbar zu haben, tragen Sie dieses Kommando in die Datei
/etc/rc.conf ein.Sobald Sie diese Schritte durchgeführt haben,
sollte die USB-Tastatur ohne weitere Änderungen auch
unter X benutzbar sei.Benutzen Sie dieses Kommando, wenn Sie wieder zur
Standardtastatur wechseln wollen:&prompt.root; kbdcontrol -k /dev/kbd0 > /dev/nullUm die gleichzeitige Verwendung der zweiten USB-Tastatur und
der AT-Tastatur auf der selben Konsole mittels des &man.kbdmux.4;
Treibers zu ermöglichen, geben Sie folgendes ein:&prompt.root; kbdcontrol -K < /dev/console > /dev/nullkbdcontrol -a atkbd0 < /dev/kbdmux0 > /dev/nullkbdcontrol -a ukbd1 < /dev/kbdmux0 > /dev/nullkbdcontrol -k /dev/kbdmux0 < /dev/console > /dev/nullLesen Sie die &man.ukbd.4;, &man.kbdcontrol.1; und
&man.kbdmux.4; Manualpages, um weitere Informationen zu
erhalten.Zurzeit kann es noch Probleme geben, wenn Sie eine
USB-Tastatur im laufenden Betrieb einstecken oder
abziehen. Um Probleme zu vermeiden, sollten Sie die
Tastatur anschließen, bevor Sie das System
anschalten und die Tastatur nicht abziehen, solange das
System noch läuft.Ich habe eine unübliche Busmaus. Wie muss
ich sie konfigurieren?FreeBSD unterstützt die Busmaus und
InPort-Busmaus von Herstellern wie Microsoft, Logitech und
ATI. Der Gerätetreiber ist im GENERIC-Kernel
allerdings nicht eingebunden. Wenn Sie den
Bus-Gerätetreiber benötigen, müssen Sie daher
einen angepassten Kernel erstellen. Dazu fügen Sie die
folgende Zeile in Ihre Kernelkonfigurationsdatei ein:device mse0 at isa? port 0x23c irq5Die Busmaus wird üblicherweise zusammen mit einer
speziellen Karte ausgeliefert. Sie könnte es Ihnen
ermöglichen, andere Werte für die Port-Adresse
und den Interrupt zu setzen. Weitere Informationen finden
Sie in Handbuch zu Ihrer Maus und in der &man.mse.4;
Manualpage.Wie benutze ich meine PS/2 (Mouse-Port
oder Tastatur)-Maus?PS/2 Mäuse werden von FreeBSD unterstützt.
Der notwendige Gerätetreiber,
psm, ist bereits im
GENERIC-Kernel enthalten.Wenn Sie einen angepassten Kernel ohne diesen Treiber
benutzen, müssen Sie folgende Zeile in Ihre
Kernelkonfigurationsdatei einfügen und den Kernel neu
kompilieren:device psm0 at atkbdc? irq 12Wenn der Kernel das Gerät
psm0 beim Booten korrekt erkennt,
stellen Sie sicher, dass sich im Verzeichnis
/dev ein Eintrag für
psm0 befindet.
Kann man die Maus irgendwie außerhalb des X
Window Systems benutzen?Falls Sie den normalen Konsolentreiber &man.syscons.4; benutzen,
können Sie den Mauszeiger auf Textkonsolen zum
Kopieren und Einfügen von Text verwenden. Starten
Sie den Mausdämon &man.moused.8; und schalten Sie den
Mauszeiger auf der virtuellen Konsole ein:&prompt.root; moused -p /dev/xxxx -t yyyy
&prompt.root; vidcontrol -m onxxxx ist der
Gerätename der Maus und
yyyy ist das Protokoll.
Der Mausdämon erkennt die Protokolle der meisten
Mäuse (mit Ausnahme alter serieller Mäuse)
automatisch, wenn Sie auto für
das Protokoll angeben. Falls das Protokoll nicht
automatisch erkannt wird, finden Sie die
unterstützten Protokolle in der
&man.moused.8; Manualpage.Wenn Sie eine PS/2-Maus besitzen und diese beim
Systemstart aktivieren wollen, tragen Sie die Zeile
moused_enable="YES" in die Datei
/etc/rc.conf ein. Falls Sie den
Mausdämon auf allen virtuellen Bildschirmen anstatt
nur auf der Konsole benutzen wollen, tragen Sie außerdem
allscreens_flags="-m on" in
/etc/rc.conf ein.Während der Mausdämon läuft, muss
der Zugriff auf die Maus zwischen dem Mausdämon und
anderen Programmen, wie X Windows, koordiniert werden.
Die FAQ Warum funktioniert meine
meine Maus unter X nicht? enthält weitere
Details.Wie funktioniert das Kopieren und Einfügen von
Text mit der Maus auf einer Textkonsole?Wenn Sie es geschafft haben, den Mausdämon zu
starten (wie im vorherigen
Abschnitt gezeigt), halten Sie die linke Maustaste
gedrückt und bewegen Sie die Maus, um einen
Textabschnitt zu markieren. Dann drücken Sie die
mittlere Maustaste, um den Text an der
Cursorposition einzufügen.Wenn Sie keine 3-Tasten-Maus besitzen, können
Sie die mittlere Maustaste mit einer Tastenkombination
emulieren oder die Funktion der mittleren Taste auf
eine andere Taste legen. Einzelheiten dazu enthält
die Hilfeseite &man.moused.8;.Meine Maus hat ein neumodisches Rad und mehr
Knöpfe. Kann ich sie in FreeBSD benutzen?Unglücklicherweise lautet die Antwort:
Vielleicht. Solche Mäuse mit
zusätzlichen Extras erfordern in den meisten
Fällen spezielle Treiber. Wenn der
Gerätetreiber für die Maus oder das
Anwendungsprogramm keine spezielle Unterstützung
für die Maus bietet, wird sie sich wie eine
gewöhnliche Maus mit zwei oder drei Knöpfen
verhalten.Ob und wie Sie das Rad unter X benutzen können,
können Sie im passenden
Abschnitt der FAQ erfahren.Wie benutze ich Maus/Trackball/Touchpad auf meinem
Laptop?Bitte lesen Sie die Antwort
zur vorherigen Frage.Wie kann ich die Delete-Taste in der sh und
csh einsetzen?Für die Bourne Shell
fügen Sie die folgende Zeile in die Datei
.shrc ein (lesen Sie dazu auch die
Manualpages &man.sh.1; sowie &man.editrc.5;).bind ^? ed-delete-next-char # for console
bind ^[[3~ ed-delete-next-char # for xtermFür die C Shell nehmen
Sie hingegen die folgende Zeile in die Datei
.cshrc auf (lesen Sie dazu auch die
Manualpage &man.csh.1;).bindkey ^? delete-char # for console
bindkey ^[[3~ delete-char # for xtermWeitere Informationen zu diesem Thema finden sich auch
hier.Netzkarten und serielle GeräteWelche Netzwerkkarten unterstützt
FreeBSD?In den Hardware Informationen zu jedem FreeBSD Release
werden die unterstützten Karten aufgezählt.Unterstützt FreeBSD Software Modems, wie die
Winmodems?FreeBSD unterstützt viele Software-Modems, wenn
Sie zusätzliche Software installieren. Der Port
comms/ltmdm bietet zum
Beispiel Unterstützung für Modems, die auf dem oft
verwendeten Lucent LT Chipsatz basieren.Sie können FreeBSD nicht über ein
Software-Modem installieren, diese Software kann nur
installiert werden, nachdem das Betriebssystem installiert
wurde.Gibt es einen FreeBSD-Treiber für die Karten der
Serie 43xx von Broadcom?Nein, und es wird wohl auch nie einen geben.Broadcom weigert sich, Informationen zu ihren drahtlosen
Chipsätzen zu veröffentlichen. Wahrscheinlich
liegt dies daran, dass Broadcom auch softwaregesteuerte
Radios herstellt. Damit ihre Produkte von der FCC
zugelassen werden, muss sichergestellt sein, dass Benutzer
nicht in der Lage sind, Betriebsfrequenzen,
Modulationsparameter, Ausgangsleistung und andere Werte
nach Belieben einzustellen. Ohne solche Informationen ist
es aber nahezu unmöglich, einen Treiber zu
programmieren.Welche seriellen Multi-Port-Karten werden von FreeBSD
unterstützt?Es existiert eine Liste der unterstützten Karten
im Abschnitt Serielle
Datenübertragung des Handbuchs.Von einigen NoName-Nachbauten ist ebenfalls
bekannt, dass sie funktionieren, speziell von den
AST-kompatiblen.In &man.sio.4; finden Sie weitere Informationen zur
Konfiguration solcher Karten.Wie kann ich den boot:-Prompt auf einer seriellen
Konsole erscheinen lassen?Lesen Sie
diesen Abschnitt des Handbuchs.SoundkartenWelche Soundkarten werden von FreeBSD
unterstützt?&os; unterstützt verschiedene Soundkarten.
Lesen Sie die
&os; Release Informationen sowie &man.snd.4;,
wenn Sie genauere Informationen benötigen. MPU-401
und kompatible MIDI-Karten werden begrenzt unterstützt.
Ebenso unterstützt werden Karten, die der µsoft;
Sound System-Spezifikation entsprechen.Das gilt nur für Sound! Dieser Treiber
unterstützt keine CDROMs, SCSI oder Joysticks auf
diesen Karten, außer der &soundblaster;. Die
&soundblaster;-SCSI-Schnittstelle und einige
Nicht-SCSI-CDROMs werden unterstützt, Sie
können von diesen Geräten aber nicht
booten.Abhilfen für fehlenden Sound bei Verwendung des
&man.pcm.4;-Treibers?Einige Soundkarten setzen die Lautstärke bei jedem
Systemstart auf 0. In diesem Fall müssen Sie nach jedem
Bootvorgang den folgenden Befehl ausführen:&prompt.root; mixer pcm 100 vol 100 cd 100Sonstige HardwareUnterstützt &os; Power-Management auf meinem
Laptop?&os; unterstützt APM
auf einigen Systemen. Lesen Sie dazu auch &man.apm.4;.&os; unterstützt einen Großteil der
ACPI-Funktionen moderner Hardware.
Lesen Sie dazu auch &man.acpi.4;.
Unterstützt Ihr System sowohl APM
als auch ACPI, können Sie beide
Systeme testen und sich für das System entscheiden,
das Ihren Anforderungen am besten entspricht.Wie kann ich ACPI deaktivieren?Fügen Sie die Zeile
hint.acpi.0.disabled="1" in die Datei
/boot/device.hints ein.Wieso hängt sich mein Micron-System beim Booten
auf?Lesen Sie die vorherige Antwort.Wenn ich ein System mit einem ASUS K7V Mainboard von
der Bootdiskette starte, hängt sich das System auf.
Wie kann ich dieses Problem lösen?Schalten Sie im BIOS die Option boot virus
protection aus.Warum arbeitet meine &tm.3com; PCI-Netzwerkkarte in meinem
Micron-Computer nicht?Einige Micron Motherboards besitzen eine
nicht-konforme PCI-BIOS-Implementierung, die die
PCI-Geräte nicht an den angegebenen Adressen
konfiguriert. Hierdurch entstehen Probleme, wenn FreeBSD
bootet.Deaktivieren Sie die Option Plug and Play
Operating System im BIOS, um das Problem zu
umgehen.FehlerbehebungWarum zeigt &os; eine falsche Speichergröße
an?Das liegt an den Unterschieden zwischen physikalischen
und virtuellen Speicheraddressen.Bei moderner PC-Hardware ist es üblich, den
Speicherbereich zwischen 3,5 und 4 Gigabyte für
spezielle Aufgaben (normalerweise für PCI) zu
reservieren. Dieser Adressbereich wird dabei dazu
verwendet, um auf PCI-Hardware zuzugreifen. Dadurch
kann in diesem Speicherbereich kein physikalischer
Speicher existieren.Was mit dem in diesen Bereich gehörenden
physikalischen Speicher passiert, hängt von der von
Ihnen eingesetzten Hardware ab. Unglücklicherweise
gibt es noch immer Hardware, die hier gar nichts macht.
In diesem Fall ist Ihr System nicht in der Lage, auf diese
500 Megabyte des RAMs zuzugreifen.Ein Großteil der heute existierenden Hardware
ist aber inzwischen in der Lage, diesen Speicherbereich
in einen höheren Speicherbereich umzulenken, damit
Sie weiterhin darauf zugreifen können. Allerdings
kann es durch dieses Umlenken zu verwirrende Meldungen
während des Systemstarts kommen.Unter 32 Bit-Versionen von &os; scheint dieser
Speicherbereich nicht verfügbar zu sein, da er in einen
Bereich oberhalb von 4 Gigabyte übertragen wurde, auf den
ein 32 Bit-Kernel allerdings nicht zugreifen kann. Ist dies
bei Ihnen der Fall, müssen Sie die PAE-Unterstützung
in Ihren Kernel kompilieren. Lesen Sie dazu auch den
entsprechenden FAQ-Eintrag.Verwenden Sie hingegen eine 64 Bit-Version von &os;
oder einen 32-Bit-Kernel mit aktivierter
PAE-Unterstützung, ist &os; in der Lage, diesen
Speicherbereich korrekt zu erkennen und umzulenken, damit Sie
weiterhin darauf zugreifen können. Allerdings wird in
diesem Fall beim Systemstart mehr Speicher angezeigt, als
tatsächlich auf Ihrem System vorhanden ist. Dies ist
aber normal und wird nach dem Ende des Systemstarts
automatisch korrigiert.Was sollte ich tun, wenn auf meiner Festplatte
fehlerhafte Blöcke sind?SCSI-Laufwerke sollten in der Lage sein, diese
automatisch zu verlagern. Bei einigen Laufwerken ist
diese Eigenschaft jedoch aus unerfindlichen Gründen
bei der Auslieferung ausgeschaltet...Um sie einzuschalten, müssen Sie den Page-Mode
des ersten Gerätes editieren. Unter FreeBSD
können Sie das (als root) mit
folgendem Befehl tun&prompt.root; camcontrol modepage sd0 -m 1 -e -P 3und die Werte für AWRE und ARRE von 0 auf 1
ändern:
AWRE (Auto Write Reallocation Enbld): 1
ARRE (Auto Read Reallocation Enbld): 1
Moderne IDE-Controller sind in der Lage, fehlerhafte
Blöcke automatisch zu verlagern. Diese Funktionen
sind bereits ab Werk aktiviert.Werden dennoch fehlerhafte Blöcke gemeldet (egal
auf welchem Laufwerk), sollten Sie über den Kauf einer
neuen Platte nachdenken. Zwar könnte es Ihnen mit
Diagnoseprogrammen des Plattenherstellers gelingen, diese
fehlerhaften Blöcke zu sperren. Allerdings können
Sie damit den endgültigen Ausfall der Platte bestenfalls
hinauszögern.Wieso wird der SCSI-Controller meines HP Netserver nicht
erkannt?Hierbei handelt es sich um ein bekanntes Problem. Der
auf dem Board befindliche EISA-SCSI-Controller auf dem HP
Netserver belegt die EISA-Slotnummer 11, wodurch sich alle
wirklichen EISA-Slots vor ihm befinden.
Leider kollidiert der Adressraum von EISA-Slots
>=10 mit dem Adressraum, der PCI zugeordnet ist und
die Autokonfiguration von FreeBSD kann mit dieser
Situation derzeit nicht besonders gut umgehen.Die einfachste Alternative ist, diese Kollision
einfach zu leugnen. Setzen Sie dazu die Kerneloption
EISA_SLOTS auf den Wert 12.
Konfigurieren und kompilieren Sie den Kernel, wie im
Handbucheintrag
zur Kernelkonfiguration beschrieben.Dies bringt Ihnen natürlich das klassische
Huhn-Ei-Problem, wenn Sie auf einer solchen Maschine
installieren wollen. Um dieses Problem zu umgehen,
existiert ein spezieller Hack in
UserConfig. Benutzen Sie nicht die
visuelle Schnittstelle, sondern die rohe
Kommandozeilenschnittstelle. Geben Sie einfach
eisa 12
quit
am Prompt ein und Sie können Ihr System ganz
normal installieren. Sie sollten auf jeden Fall einen
angepassten Kernel zu kompilieren und
installieren.Zukünftige Versionen werden hoffentlich eine
passende Lösung für dieses Problem
beinhalten.Sie können keine dangerously
dedicated Platte auf einem HP Netserver
verwenden. Lesen Sie weitere Informationen finden Sie
in diesem
Hinweis.Was bedeuten die ständigen Meldungen ed1:
timeout?Dies wird meistens durch einen Interruptkonflikt
verursacht (z.B., wenn zwei Karten den selben Interrupt
benutzen). Booten Sie mit der Option
und ändern Sie die Einträge zu
ed0/de0/...
(d.h. Ihrem Board entsprechend).Wenn Sie den BNC-Anschluss Ihrer Netzwerkkarte
benutzen, könnte es auch sein, dass es sich
Geräte-Timeouts aufgrund fehlerhafter Terminierung
handelt. Um dies zu überprüfen, verbinden Sie
einen Terminator direkt mit der Netzwerkkarte (ohne Kabel)
und beobachten Sie, ob die Fehlermeldungen
verschwinden.Einige NE2000 kompatible Karten melden diesen Fehler,
wenn keine Verbindung am UTP-Eingang existiert oder wenn
das Kabel nicht eingesteckt ist.Warum funktioniert meine &tm.3com; 3C509 plötzlich
nicht mehr?Diese Karte ist dafür berüchtigt, ihre
Konfiguration zu vergessen. Sie müssen die Karte mit
dem DOS-Programm 3c5x9.exe neu
konfigurieren.Mein an der parallel Schnittstelle angeschlossener
Drucker ist unglaublich langsam. Was kann ich
tun?Falls das einzige Problem ist, dass er
schrecklich langsam ist, dann sollte Sie versuchen, die
Kommunikationseinstellungen der parallelen Schnittstellen
zu ändern, wie es im Kapitel Drucken
des Handbuchs beschrieben ist.Wieso brechen meine Programme gelegentlich mit
Signal 11-Fehlern ab?Das Signal 11 wird generiert, wenn ein Prozess
versucht, auf Speicher zuzugreifen, obwohl er vom
Betriebssystem dazu nicht befugt wurde. Wenn Ihnen das
scheinbar zufällig immer wieder passiert, sollten Sie
der Sache einmal auf der Grund gehen.Das Problem hat in der Regel eine der folgenden
Ursachen:Wenn das Problem nur in einer bestimmten
Anwendung auftritt, die Sie selbst entwickeln, dann
ist es wahrscheinlich ein Fehler in Ihren
Sourcen.Wenn das Problem in einem Teil von FreeBSD
auftritt, könnte es natürlich auch ein
Fehler sein; aber in den meisten
Fällen werden diese Probleme gefunden und behoben,
bevor die typischen Leser der FAQ (wir) diese Teile
der Sourcen benutzen können (dafür gibt es
schließlich -CURRENT).Wenn der Fehler auftritt, wenn Sie ein Programm
compilieren aber dabei immer wieder an anderer Stelle
auftritt, dann ist das ein ganz eindeutiger Hinweis,
dass das Problem nicht bei
FreeBSD liegt.Nehmen wir zum Beispiel an, dass Sie make
buildworld
ausführen und die Compilierung von
ls.c in ls.o
abbricht. Wenn Sie nochmal make
buildworld
durchführen und die Compilierung an der gleichen
Stelle abbricht, handelt es sich um einen Fehler in den
Sourcen. Aktualisieren Sie Ihre Sourcen und versuchen Sie
es noch einmal. Wenn der Fehler jedoch an einer anderen
Stelle auftritt, liegt das Problem mit an Sicherheit
grenzender Wahrscheinlichkeit bei Ihrer Hardware.Was Sie tun sollten:Im ersten Fall können Sie einen Debugger wie z.B.
&man.gdb.1; benutzen, um die Stelle im Programm zu finden,
an der auf eine falsche Adresse zugegriffen wird und danach
den Fehler beheben.Im zweiten Fall müssen Sie sicherstellen,
dass das Problem nicht von Ihrer Hardware verursacht
wird.Typische Ursachen dafür sind unter
anderem:Es könnte sein, dass Ihren Festplatten
zu warm werden: Überprüfen Sie, ob die
Lüfter in Ihrem Gehäuse noch funktionieren,
damit Ihre Festplatten (und andere Hardware) nicht
heißlaufen.Der Prozessor überhitzt, weil Sie Ihn
übertaktet haben oder der CPU-Kühler
ausgefallen ist. Sie müssen sicherstellen,
dass Sie Ihre Hardware unter den Bedingungen
betreiben, für die sie spezifiziert ist,
zumindest während Sie versuchen, das Problem
zu lösen. Mit anderen Worten: Betreiben Sie
Ihre CPU mit der normalen Taktfrequenz.Wenn Sie übertakten, sollten Sie daran
denken, dass ein langsames System deutlich
billiger ist als ein defektes System. Die große
Masse hat nicht sehr häufig Mitgefühl mit
Problemen bei übertakteten System, auch wenn Sie
es für ungefährlich halten.Unzuverlässiger Speicher: Wenn Sie mehr als
ein SIMM/DIMM installiert haben, sollten Sie sie alle
ausbauen und die Maschine testweise mit jedem SIMM
oder DIMM einzeln betreiben. So können Sie
feststellen, ob die Ursache ein einzelnes SIMM/DIMM
oder auch eine Kombination von Modulen ist.Zu optimistische Einstellung des Mainboards: In
Ihrem BIOS und mit den Jumpern auf dem Mainboard
können Sie diverse Timings ändern. In den
meisten Fällen reichen die Defaults aus, aber
manchmal kann es durch zu wenig wait states, die
Einstellung RAM Speed: Turbo oder
ähnliches zu merkwürdigen Problemen kommen.
Ein möglicher Ansatz ist, die BIOS defaults zu
laden, allerdings könnte es sinnvoll sein, die
aktuellen Einstellungen vorher zu notieren.Schlechte oder fehlerhafte Stromversorgung des
Mainboards: Wenn Sie unbenutzte Steckkarten, Platten
oder CDROMs in Ihrem System haben, sollten Sie sie
testweise ausbauen oder die Stromversorgung abziehen.
Dadurch können Sie prüfen, ob Ihr Netzteil
eventuell mit einer geringeren Last besser
zurechtkommt. Sie können auch testweise ein
anderes, am besten ein leistungsfähigeres,
Netzteil ausprobieren. Wenn Sie zurzeit ein
250 W-Netzteil benutzen, sollten Sie testweise ein
300 W-Netzteil einbauen.Die sollten ebenfalls die SIG11 FAQ (unten
aufgeführt) lesen, da sie gute Erklärungen
für alle diese Probleme enthält (allerdings aus
&linux;-Sicht). Sie erklärt ebenfalls, warum sowohl
Programme als auch Geräte zur Speicherprüfung
fehlerhaften Speicher teilweise nicht erkennen.Wenn alle diese Schritte nicht helfen, ist es
möglich, dass Sie einen Fehler in FreeBSD
gefunden haben. Folgen Sie einfach den Anweisungen
für die Erstellung eines Problem Reports.Es existiert eine ausführliche FAQ hierzu unter
der
SIG11-Problem-FAQMein System stürzt mit der Meldung
Fatal trap 12: page fault in kernel
mode oder panic: ab und
gibt eine Menge zusätzlicher Informationen aus. Was
kann ich tun?Die Entwickler von FreeBSD interessieren sich für
solchen Meldungen, allerdings brauchen Sie deutlich mehr
Informationen als die, die Ihnen angezeigt werden.
Kopieren Sie die komplette Meldungen und lesen Sie nun den
FAQ-Eintrag über kernel panics.
Erzeugen sie einen Kernel mit den zusätzlichen Daten
zur Fehlersuche, und dann einen backtrace. Das hört
sich komplizierter an, als es ist. Sie brauchen keine
Programmier-Erfahrung, Sie müssen einfach nur den
Anweisungen folgen.Wieso wird beim Booten der Bildschirm schwarz und reagiert
nicht mehr?Dies ist ein bekanntes Problem mit der ATI Mach64
Videokarte. Das Problem besteht darin, dass diese
Karte die Adresse 2e8 benutzt und die
vierte serielle Schnittstelle ebenfalls. Aufgrund eines
Fehlers (einer Besonderheit?) im &man.sio.4;-Treiber wird
diese Schnittstelle angesprochen, auch wenn Sie gar keine
vierte serielle Schnittstelle besitzen und
sogar, wenn Sie
sio3 (die vierte Schnittstelle),
die normalerweise diese Adresse verwendet, deaktivieren.Bis der Fehler behoben ist, können Sie folgende
Abhilfe verwenden:Geben Sie am Bootprompt ein.
(Dies bringt den Kernel in den
Konfigurationsmodus).Deaktivieren Sie sio0,
sio1,
sio2 und
sio3 (alle). Auf diese Weise
wird der &man.sio.4;-Treiber nicht aktiviert und das
Problem tritt nicht mehr auf.Geben Sie exit ein, um den Bootvorgang
fortzusetzen.Falls sie in der Lage sein wollen Ihre seriellen
Schnittstellen zu benutzen, müssen Sie einen neuen
Kernel mit folgenden Modifikationen erstellen: suchen Sie
in /usr/src/sys/sio/sio.c (oder in
/usr/src/sys/pc98/cbus/sio.c für pc98)
nach der Zeichenkette 0x2e8 und löschen
Sie sie und das vorhergehende Komma (nicht das folgende
Komma). Nun folgen Sie der normalen Prozedur zur
Erstellung eines neuen Kernels.Wieso verwendet FreeBSD nur 64 MB Hauptspeicher,
obwohl in meinem Rechner 128 MB sind?Aufgrund der Art und Weise, wie FreeBSD die
Hauptspeichergröße vom BIOS mitgeteilt bekommt,
kann es lediglich 16-Bit Werte in kByte-Größe
(65535 kByte = 64 MB) erkennen (oder weniger... einige
BIOSe setzen die Hauptspeichergröße auf 16 MB).
Falls Sie mehr als 64 MB besitzen, wird FreeBSD versuchen,
das zu erkennen, was aber nicht immer
funktioniert.Um dieses Problem zu umgehen, müssen Sie die
untenstehende Kerneloption verwenden. Es gibt einen Weg,
vollständige Hauptspeicherinformationen vom BIOS zu
erhalten, aber in den Bootblöcken ist nicht
genügend Platz dafür vorhanden. Wenn der
Platzmangel in den Bootblöcken eins Tages behoben
ist, werden wir die erweiterten BIOS-Funktionen dazu
nutzen, die vollständigen Hauptspeicherinformationen
zu erhalten... aber zurzeit sind wir auf die Kerneloption
angewiesen.options MAXMEM=nHierbei ist n Ihre
Hauptspeichergröße in Kilobyte. Bei einer
128 MB-Maschine müßten Sie
131072 benutzen.Ich habe mehr als 1 GB RAM. Trotzdem stürzt
mein System mit der Meldung kmem_map too small
ab. Was läuft hier schief?Im Normalfall bestimmt FreeBSD einige Kernelparameter,
darunter die maximale Anzahl der Dateien, die gleichzeitig
geöffnet sein können, aus der Größe
des im System installierten Hauptspeichers. Auf Systemen
mit mindestens 1 GB Hauptspeicher kann dieser
auto sizing-Mechanismus diese Werte
fälschlicherweise zu hoch ansetzen: Beim Systemstart
fordert der Kernel dann verschiedene Tabellen und andere
Strukturen an, die den Großteil des verfügbaren
Kernelspeichers verbrauchen. Dies führt dazu, dass
der Kernel während des Betriebs keine dynamischen
Speicheranforderungen mehr ausführen kann und mit
einer Kernelpanik abstürzt.Bauen Sie in diesem Fall Ihren eigenen Kernel. Dazu
setzen Sie
in Ihrer Kernelkonfigurationsdatei auf 400 MB
().
400 MB sollten für Maschinen bis 6 GB
Hauptspeicher ausreichend sein.Ich habe weniger als 1 GB Hauptspeicher. Dennoch
stürzt mein System mit der Meldung
kmem_map too small ab!Diese Meldung zeigt an, dass der virtuelle
Speicher für Netzwerkpuffer (spezieller mbuf-Cluster)
aufgebraucht ist. Sie können die für mbuf
verfügbare Größe an VM erhöhen, indem
Sie den Anweisungen des Abschnitts
Netzwerk-Limits des Handbuchs folgen.Wieso erhalte ich die Meldung kernel:
proc: table is full?Der FreeBSD-Kernel beschränkt die Anzahl der
gleichzeitig laufenden Prozesse. Die Anzahl errechnet
sich aus dem Wert der Variablen
MAXUSERS in der Konfigurationsdatei des
Kernels. Auch andere Einstellungen wie die Anzahl der
Puffer für Netzwerkoperationen (Details dazu
finden Sie in diesem
Abschnitt). werden durch
MAXUSERS beeinflusst. Wenn Ihr
System stark belastet ist, sollten Sie den Wert von
MAXUSERS erhöhen. Dadurch werden
diverse Einstellung des Systems angepasst und die
maximale Anzahl gleichzeitig laufender Prozesse
erhöht.Um den Wert von MAXUSERS anzupassen,
folgen Sie den Anweisungen des Abschnitts
Datei- und Prozesslimits des Handbuchs. Dieser
Abschnitt spricht zwar nur von Dateien, für Prozesse
gelten aber die gleichen Beschränkungen.Wenn Ihr System nicht besonders stark ausgelastet ist
und Sie einfach nur mehr gleichzeitig laufende Prozesse
erlauben wollen, können Sie den Wert der Variable
kern.maxproc in der Datei
/boot/loader.conf anpassen. Um die
Änderung zu aktivieren, müssen Sie Ihr System
neu starten. Wollen Sie Ihr System zusätzlich
optimieren, sollten Sie &man.loader.conf.5; und
&man.sysctl.conf.5; lesen.
Wenn diese Prozesse von einem einzigen Benutzer
ausgeführt werden, müssen Sie den Wert von
kern.maxprocperuid ebenfalls
erhöhen. Dieser Wert muss immer mindestens um
eins geringer sein als der Wert von
kern.maxproc value. (Der Grund
für diese Einschränkung ist, dass ein
Systemprogramm, &man.init.8;, immer ausgeführt werden
muss.)Damit Änderungen einer sysctl-Variable dauerhaft
erhalten bleiben, nehmen Sie diese in
/etc/sysctl.conf auf. Weitere
Informationen zur Optimierung Ihres Systems finden Sie im
Abschnitt
Einstellungen mit sysctl des Handbuchs.Wieso erhalte ich die Meldung CMAP busy
panic, wenn ich mein System mit einem neuen
Kernel starte?Die Logik, die versucht, veraltete
/var/db/kvm_*.db-Dateien zu erkennen,
versagt manchmal und die Benutzung einer unpassenden Datei
kann zu Paniksituationen führen.
- Falls das passiert, rebooten Sie im Single-User-Modus
+ Falls das passiert, rebooten Sie in den Single-User-Modus
und löschen Sie die Dateien:&prompt.root; rm /var/db/kvm_*.dbWas soll mir die Meldung ahc0: brkadrint,
Illegal Host Access at seqaddr 0x0
sagen?Dies ist ein Konflikt mit einem Ultrastor SCSI
Hostadapter.Rufen Sie während des Bootprozesses das
Kernelkonfigurationsmenü auf und deaktivieren Sie
uha0, welches das Problem
verursacht.Wenn ich mein System starte, erhalte ich die Meldung
ahc0: illegal cable configuration,
obwohl die Verkabelung korrekt ist. Woran liegt
das?Auf Ihrem Mainboard fehlen ein paar Logikbausteine,
die für die Unterstützung der automatischen
Terminierung notwendig sind. Stellen Sie in Ihrem
SCSI-BIOS manuell die korrekte Terminierung für Ihr
System ein, anstatt sich auf die automatische Terminierung
zu verlassen. Der &man.ahc.4;-Treiber kann nicht
erkennen, ob die externen Logikbausteine für die
Erkennung der Kabel (und damit automatische Terminierung)
vorhanden sind. Der Treiber muss sich darauf
verlassen, dass diese vorhanden sind, wenn in der
Konfiguration automatische Terminierung
eingestellt ist. Ohne die externen Bausteine ist es sehr
wahrscheinlich, dass der Treiber die Terminierung
falsch einstellt, was die Zuverlässigkeit des
SCSI-Busses herabsetzen kann.
- Wieso meldet Sendmail mail loops back to
- myself?
+ Wieso meldet sendmail
+ mail loops back to myself?Sie finden eine detaillierte Antwort auf diese Frage im
Handbuch.Wieso funktionieren bildschirmorientierte Anwendungen beim
Zugriff über ein Netzwerk nicht richtig?Die entfernte Maschine scheint den Terminaltyp auf
etwas anderes als den Typ cons25, der
von FreeBSD verlangt wird, zu setzen.Es gibt mehrere mögliche Abhilfen für dieses
Problem:Setzen Sie die Shell-Variable TERM
nach dem Einloggen auf der entfernten Maschine auf
ansi oder sco,
sofern die entfernte Maschine diese Terminaltypen
kennt.Benutzen Sie einen VT100-Emulator wie
screen auf der
FreeBSD-Konsole. screen
bietet Ihnen die Möglichkeit, mehrere
gleichzeitige Sitzungen von einem Bildschirm aus
laufen zu lassen. Es ist ein sehr nettes Programm.
Jedes screen-Fenster
verhält sich, wie ein VT100-Terminal, weshalb die
Variable TERM am entfernten Ende auf
vt100 gesetzt werden
sollte.Installieren Sie den Eintrag
cons25 in der Bildschirmdatenbank
der entfernten Maschine. Wie das zu geschehen hat,
hängt vom Betriebssystem der entfernten Maschine
ab. Das Systemadministrationshandbuch für das
entfernte System sollte Ihnen hierbei helfen
können.Starten Sie einen X-Server auf der FreeBSD-Seite
und benutzen Sie einen X-basierten Terminalemulator
wie xterm oder
rxvt, um sich auf der entfernten
Maschine einzuloggen. Die Variable TERM
auf dem entfernten Host sollte auf xterm
oder vt100 gesetzt werden.Warum wird meine PnP-Karte nicht (oder nur noch als
unknown) erkannt?Die Gründe für dieses Verhalten werden in
der unten zitierten Mail von &a.peter;
erklärt. Diese Mail stammt von der Mailingliste
&a.questions; und war eine Antwort auf eine Frage
bezüglich eines internen Modem, das nach dem Update
auf FreeBSD 4.X nicht mehr
erkannt wurde.Die mit [] gekennzeichneten Kommentare
wurden eingefügt, um an einigen Stellen die Bezüge
klarzustellen.
Das PnP-BIOS hat es [das Modem] vorkonfiguriert und
es dann im Adressraum liegenlassen, daher haben es
die alten ISA-Erkennungsroutinen [in
3.X] gefunden.In 4.0 sind die ISA-Routinen deutlich
PnP-orientierter. Es war möglich [in
3.X], dass eine ISA-Erkennungsroutine
ein zugelaufenes Gerät fand;
während die PnP-Treiber zwar die ID erkannten, das
Gerät aber wegen des Ressourcekonfliktes nicht
benutzen konnten. Daher werden die programmierbaren
Karten zunächst einmal abgeschaltet, um diese
doppelte Erkennung vermeiden zu können. Das
bedeutet allerdings auch, dass die Treiber die
PnP-ID kennen muss, um PnP-Hardware
unterstützen zu können. Wir haben uns
vorgenommen, den Benutzern eine einfachere
Möglichkeit zur Manipulation dieser Informationen
zur Verfügung zu stellen.
Damit Ihr Gerät wieder funktioniert, müssen
Sie seine PnP-ID herausfinden und die ID in die Listen
eintragen, die zur Erkennung von PnP-Geräten
genutzten werden. Zu diesem Zweck wird das Gerät mit
&man.pnpinfo.8; analysiert. Das Beispiel zeigt die
Ausgaben von &man.pnpinfo.8; für ein internes
Modem:&prompt.root; pnpinfo
Checking for Plug-n-Play devices...
Card assigned CSN #1
Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff
PnP Version 1.0, Vendor Version 0
Device Description: Pace 56 Voice Internal Plug & Play Modem
Logical Device ID: PMC2430 0x3024a341 #0
Device supports I/O Range Check
TAG Start DF
I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8
[16-bit addr]
IRQ: 4 - only one type (true/edge)[weitere TAG Zeilen gestrichen]TAG End DF
End Tag
Successfully got 31 resources, 1 logical fdevs
-- card select # 0x0001
CSN PMC2430 (0x3024a341), Serial Number 0xffffffff
Logical device #0
IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8
IRQ 5 0
DMA 4 0
IO range check 0x00 activate 0x01Sie benötigen die Information aus der Zeile
Vendor ID ganz am Anfang. Die in Klammern
ausgegebene hexadezimale Zahl (0x3024a341 in
diesem Beispiel) ist die PnP ID und die unmittelbar davor
stehende Zeichenkette (PMC2430) ist eine
eindeutige Herstellerkennung.Benutzen Sie &man.pciconf.8; wenn &man.pnpinfo.8; die Karte
nicht anzeigt. Der Teil der Ausgabe von
pciconf -vl für eine auf dem
Motherboard integrierte Soundkarte sieht zum Beispiel so
aus:&prompt.root; pciconf -vl
chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02 hdr=0x00
vendor = 'Intel Corporation'
device = '82801AA 8xx Chipset AC'97 Audio Controller'
class = multimedia
subclass = audioSie benötigen die Chip-ID 0x24158086,
die hinter chip aufgeführt ist.Die Vendor ID oder
chip-ID müssen in die
Datei /usr/src/sys/dev/sio/sio_isa.c
eingetragen werden.Sie sollten zunächst ein Backup von
sio_isa.c anlegen, falls etwas schief
gehen sollte. Sie werden auch einen Patch erzeugen
müssen, um ihn zusammen mit Ihrem PR einzusenden.
(Sie wollten doch einen PR schreiben, oder etwa nicht?)
Öffnen Sie nun sio_isa.c mit einem
Editor und suchen Sie nach der Zeile:static struct isa_pnp_id sio_ids[] = {Blättern Sie dann nach unten, um die passende
Stelle für Ihr Gerät zu finden. Unten finden
Sie Beispiel für die Einträge, diese sind nach
der Herstellerkennung sortiert. Diese sollte in dem
Kommentar auf der rechten Seite aufgenommen werden, dazu
kommt die Gerätebeschreibung (Device
Description) aus der Ausgabe von
&man.pnpinfo.8;:
{0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */
{0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */
{0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */
{0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */
{0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */
Fügen Sie die hexadezimale Gerätekennung an
der richtigen Stelle ein, speichern Sie die Datei ab,
erzeugen Sie einen neuen Kernel und starten Sie Ihr System
neu. Ihr Gerät sollte nun als
sio Gerät erkannt werden.Warum erhalte ich die Meldung nlist
failed, wenn ich Programme wie
top oder systat
benutze?Das Programm sucht nach einem speziellen Symbol im
Kernel, kann es aber aus irgendeinem Grunde nicht finden.
Dieser Fehler wird von einem dieser Probleme
verursacht:Ihr Kernel und die sonstigen Programme (das
Userland) sind nicht mehr auf dem
gleichen Stand. Mit anderen Worten, Sie haben zwar
einen neuen Kernel erzeugt, aber kein
installworld (oder
umgekehrt); darum weicht die Symboltabelle von dem
ab, was die Anwendung erwartet. Wenn dies der Fall ist,
müssen Sie lediglich die noch fehlenden Schritte
des Upgrades durchführen. Die richtige
Vorgehensweise kann
/usr/src/UPDATING entnommen
werden.Um Ihren Kernel zu laden, benutzen Sie nicht
/boot/loader, sondern laden ihn
direkt mit boot2 (siehe
&man.boot.8;). Es ist zwar nicht immer ein Fehler,
/boot/loader zu umgehen; allerdings
ist er in der Regel besser dazu geeignet, die Symbole des
Kernels für normale Anwendungen verfügbar zu
machen.Wieso dauert es so lange, bis eine Verbindung
(&man.ssh.1; oder &man.telnet.1;) aufgebaut wird?Das Symptom: Nach dem Aufbau des TCP-Verbindung
vergeht einige Zeit, bis endlich die Abfrage des
Passwortes (bzw. der Login-Prompt bei Telnet)
erscheint.Das Problem: In den meisten Fällen versucht der
Server in der Zwischenzeit, die IP-Adresse des Clients in
einen Rechnernamen zu übersetzen. Viele Server
(darunter die Telnet- und
SSH-Server von FreeBSD) machen
das, um den Hostnamen z.B. für spätere
Verwendung durch den Systemadministrator in eine
Protokolldatei schreiben zu können.Die Lösung: wenn das Problem bei jedem Server
auftritt, den Sie von Ihrem Computer (dem Client)
ansprechen, dann wird das Problem vom Client verursacht.
Wenn das Problem aber nur auftritt, wenn jemand Ihren
Rechner (den Server) anspricht, dann liegt die Ursache
beim Server.Wenn das Problem vom Client verursacht wird,
müsssen Sie die Einträge im DNS korrigieren,
damit der Server Ihre IP-Adresse übersetzen kann.
Wenn das Problem in Ihrem lokalen Netzwerk auftritt,
sollten Sie es als Problem des Servers behandeln und
weiterlesen; wenn es allerdings im Internet auftritt,
werden Sie sich wahrscheinlich an Ihrem ISP wenden
müssen, damit dieser das Problem für Sie
korrigiert.Wenn das Problem vom Server verursacht wird und Sie
sich in einem lokalen Netzwerk befinden, dann müssen
Sie Ihren Server so konfigurieren, dass er die lokal
genutzten IP-Adressen in Rechnernamen übersetzen kann.
Weitere Informationen erhalten Sie in den Onlinehilfen zu
&man.hosts.5; und &man.named.8;. Wenn dieses Problem im
Internet auftritt, könnte die Ursache auch darin
liegen, dass die Namensauflösung auf dem Server
nicht funktioniert. Versuchen Sie, einen anderen
Hostnamen wie z.B. www.yahoo.com
aufzulösen. Wenn das nicht funktioniert, liegt das
Problem bei Ihrem System.Haben Sie &os; gerade erst installiert, kann es auch
sein, dass die Domänen- und Nameserverinformationen
noch nicht in /etc/resolv.conf
vorhanden sind. Dadurch kommt es häufig zu
Verzögerungen beim Einsatz von
SSH, weil die Option
UseDNS in der Voreinstellung auf
yes gesetzt ist (in der Datei
sshd_config im Verzeichnis
/etc/ssh). Ist dies bei Ihnen der
Fall, müssen Sie entweder die fehlenden Informationen
in /etc/resolv.conf eintragen oder
als temporäre Maßnahme UseDNS
auf no setzen.Was bedeutet stray IRQ?Stray IRQs sind ein Zeichen für Probleme bei der
Behandlung von Hardware-IRQs. Sie werden meistens von
Geräten verursacht, die ihren Interrupt Request
zurückziehen, obwohl gerade der interrupt request
acknowledge-Zyklus läuft.Sie können drei Dinge tun:Ertragen Sie die Warnungen. Sie erhalten nur die
ersten 5 für jeden IRQ, alle anderen werden
unterdrückt.Eliminieren Sie die Meldungen, indem Sie den Wert von
MAX_STRAY_LOG von 5
auf 0 in der für ihre Plattform
(z.B. &i386;) zuständigen Datei
intr_machdep.c ändern. Bauen Sie
anschliessend den Kernel neu, um alle Meldungen zu
unterdrücken.Eliminieren Sie die Meldungen, indem Sie Hardware
für den Parallelport installieren, die IRQ 7
nutzt und vom PPP Treiber verwendet wird (das passiert
auf den meisten Systemen), und installieren Sie eine
IDE-Platte oder andere Hardware sowie einen dazu
passenden Treiber, um IRQ 15 zu nutzen.Warum sehe ich in der Ausgabe von &man.dmesg.8; häufig
die Meldung file: table is full?Diese Fehlermeldung besagt, dass Sie die zur
Verfügung stehenden File-Handles des Systems
verbraucht haben. Was das genau bedeutet und wie Sie
dieses Problem lösen können, steht im Abschnitt
kern.maxfiles im Kapitel Anpassung
der Kernelkonfiguration des Handbuchs.
+
+
+ Warum werden ständig Meldungen wie
+ calcru: negative runtime oder
+ calcru: runtime went backwards auf die
+ Konsole geschrieben?
+
+
+
+ Es existiert ein bekanntes Problem wenn &intel; Enhanced
+ SpeedStep im BIOS aktiviert wird. Das führt dazu, dass der
+ Kernel calcru-Nachrichten wie die folgende
+ ausgibt:
+
+ calcru: runtime went backwards from 6 usec to 3 usec for pid 37 (pagezero)
+calcru: runtime went backwards from 6 usec to 3 usec for pid 36 (vmdaemon)
+calcru: runtime went backwards from 170 usec to 138 usec for pid 35 (pagedaemon)
+calcru: runtime went backwards from 553 usec to 291 usec for pid 15 (swi6: task queue)
+calcru: runtime went backwards from 15521 usec to 10366 usec for pid 2 (g_event)
+calcru: runtime went backwards from 25 usec to 12 usec for pid 11 (swi1: net)
+calcru: runtime went backwards from 4417 usec to 3960 usec for pid 1 (init)
+calcru: runtime went backwards from 2084385 usec to 1793542 usec for pid 1 (init)
+calcru: runtime went backwards from 408 usec to 204 usec for pid 0 (swapper)
+
+ Der Grund dafür besteht darin, dass &intel; SpeedStep
+ (EIST) in manchen Mainboards inkompatibel ist.
+
+ Abhilfe: Deaktivieren Sie die EIST-Eigenschaft im BIOS. Sie
+ können trotzdem noch ihre Prozessorfrequenz ACPI-basiert
+ mittels &man.powerd.8; drosseln.
+
+
+
Warum ist die Uhrzeit auf meinem Computer immer
falsch?Ihr Computer verfügt über mehr als eine Uhr
und FreeBSD benutzt leider die falsche.Starten Sie &man.dmesg.8; und achten Sie auf die
Zeilen, in denen das Wort Timecounter
vorkommt. Die von FreeBSD benutzte Uhr findet sich in der Zeile
mit dem höchsten quality-Wert.&prompt.root; dmesg | grep Timecounter
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
Timecounter "TSC" frequency 2998570050 Hz quality 800
Timecounters tick every 1.000 msecSie können das überprüfen, indem Sie
den Wert der Systemvariablen
kern.timecounter.hardware
abfragen.&prompt.root; sysctl kern.timecounter.hardware
kern.timecounter.hardware: ACPI-fastEs kann sich um einen defekten ACPI Timer handeln. Die
einfachste Lösung besteht darin, den ACPI Timer in
/etc/loader.conf zu deaktivieren:debug.acpi.disabled="timer"Es ist aber auch durchaus möglich, dass das BIOS die
TSC Uhr ändert, um beispielsweise den CPU-Takt zu
während des Batteriebetrieb zu ändern, oder im
Stromsparmodus; leider bemerkt FreeBSD diese
Änderungen nicht und daher scheint die Uhr falsch zu
gehen.In diesem Beispiel ist die Uhr
i8254 ebenfalls verfügbar; um sie
auszuwählen, muss ihr Name in die Systemvariable
kern.timecounter.hardware geschrieben
werden.&prompt.root; sysctl -w kern.timecounter.hardware=i8254
kern.timecounter.hardware: TSC -> i8254Die Uhrzeit Ihres Computers sollte nun genauer
funktionieren.Damit diese Änderung automatisch beim Start des
Systems durchgeführt wird, müssen Sie die
folgende Zeile in die
/etc/sysctl.conf eintragen.kern.timecounter.hardware=i8254Warum erkennt mein Laptop PC-Cards nicht?Dieses Problem tritt häufig auf Laptops mit mehreren
Betriebssystemen auf. Einige nicht-BSD Betriebssysteme lassen
die Hardware in einem inkonsistenten Zustand. Die Karte wird
dann von &man.pccardd.8; als
"(null)""(null)" anstelle des
tatsächlichen Modells gefunden.Um dies zu beheben, müssen Sie die Hardware
zurücksetzen, das heißt der PC-Card Einschub
muss stromlos sein. Gehen Sie dazu nicht in den Standby-
oder Suspend-Modus und stellen Sie sicher, dass der Laptop
wirklich ausgeschaltet ist. Warten Sie einen Moment und booten
dann, Ihre PC-Card sollte jetzt funktionieren.Einige Laptops schalten sich nicht wirklich aus. Wenn der
obige Vorschlag nichts genutzt hat, entfernen Sie bitte die
Batterie, warten einen Moment und booten erneut.Wieso hängt sich FreeBSD nach dem BIOS-Bildschirm
mit der Meldung Read error
auf?Der Bootloader von FreeBSD erkennt die Geometrie Ihrer
Festplatte nicht richtig. Sie müssen die Geometrie
manuell festlegen, wenn sie mit &man.fdisk.8; FreeBSD-Bereiche
erzeugen oder ändern.Die richtigen Werte für die Geometrie können
Sie im BIOS des Rechners ablesen. Achten Sie auf die
Anzahl der Zylinder, Köpfe und Sektoren für Ihre
Festplatte.Im fdisk von &man.sysinstall.8; müssen Sie
G eingeben, um die Geometrie zu
definieren.Sie erhalten eine Dialogbox, in der Sie die Anzahl der
Zylinder, Köpfe und Sektoren eingeben können.
Verwenden Sie die Angaben des BIOS und setzen Sie
Schrägstriche zwischen die Zahlen. 5000 Zylinder,
250 Köpfe und 60 Sektoren würden also als
5000/250/60 eingegeben.Schließen Sie die Eingabe mit Enter
ab und drücken Sie W, um die neue
Partitionstabelle auf die Festplatte schreiben zu
lassen.Ein anderes Betriebssystem hat meinen Bootmanager
zerstört. Wie kann ich ihn wiederherstellen?Starten Sie &man.sysinstall.8; und wählen Sie
Configure, dann
Fdisk. Wählen Sie die
Platte, auf der sich der Boot Manager befand, mit der
Leertaste aus. Drücken Sie
W, um die Änderungen auf die Platten
schreiben zu lassen. Nun erscheint eine Abfrage, welcher
Bootmanager installiert werden soll. Wählen Sie
diesen an und er wird wieder installiert.Was soll mir die Meldung swap_pager: indefinite
wait buffer: sagen?Ein Programm wollte Speicher auf Platte auslagern, und
dieser Vorgang konnte nicht innerhalb von 20 Sekunden
durchgeführt werden. Mögliche Gründe sind
defekte Blöcke auf der Platte, falsche oder
fehlerhafte Verkabelung sowie Probleme mit anderen
Komponenten, die am Zugriff auf die Festplatte beteiligt
sind. Wenn die Festplatte selbst fehlerhaft sind, sollten
Sie entsprechende Meldungen in
/var/log/messages und den Ausgaben
von dmesg finden. Andernfalls sollten
Sie die Kabel und Verbindungen
überprüfen.Was sind UDMA ICRC Fehler und
wie behebe ich sie?Der &man.ata.4;-Treiber meldet UDMA ICRC
Fehler wenn eine DMA-Übertragung zu oder von einem
Laufwerk fehlgeschlagen ist. Der Treiber versucht die
Übertragung mehrmals durchzuführen und schaltet,
wenn die Versuche fehlschlagen, vom DMA-Modus auf den
langsameren PIO-Modus um.Der Fehler kann viele Ursachen haben, häufig ist ein
Kabel kaputt oder die Geräte sind falsch verkabelt.
Prüfen Sie, ob die ATA-Kabel unbeschädigt sind und
für den verwendeten Ultra-DMA-Modus tauglich sind. Ebenso
müssen Wechselrahmen für den verwendeten Modus geeignet
sein. Stellen Sie sicher, dass alle Kabel fest
angeschlossen sind. Es gab auch schon Probleme, wenn ein altes
Laufwerk zusammen mit einem Ultra-DMA-66 oder einem schnelleren
Laufwerk auf einem Kanal betrieben wurde. Es kann aber auch
sein, dass das Laufwerk kaputt ist. Die meisten Hersteller
stellen Test-Programme für ihre Laufwerke zur
Verfügung. Überprüfen Sie damit Ihr Laufwerk und
wenn nötig, sichern Sie Ihre Daten und ersetzen das
Laufwerk.&man.atacontrol.8; zeigt für jedes ATA-Gerät den
verwendeten DMA- oder PIO-Modus an. Das Kommando
atacontrol mode
Kanal
zeigt die auf einem Kanal verwendeten Modi (die Kanäle
werden von 0 an nummeriert).Was ist ein lock order
reversal?Eine Antwort auf diese Frage findet sich im FreeBSD-Glossar
unter LOR.Warum erhalte ich die Meldung Called ... with
the following non-sleepable locks held?Diese Meldung erscheint, wenn eine Funktion, die sich
im Ruhemodus befindet, aufgerufen wird, während ein
Mutex oder eine andere (nicht in den Ruhemodus versetzbare)
Sperre aktiv war.Der Grund dafür ist, dass ein Mutex nicht für
längere Zeitspannen aktiv sein soll, sondern nur
für die Synchronisation von Gerätetreibern mit
dem Rest des Kernels während eines Interrupts. Unter
FreeBSD dürfen Interrupts nicht in den Ruhemodus
versetzt werden. Daher ist es von entscheidender Bedeutung,
dass während des Bestehens eines Mutex kein
Kernelsubsystem für einen längeren Zeitraum
blockiert ist.Um solche Fehler abzufangen, können Sicherungen
(Assertions) in den Kernel
eingebaut werden, die danach mit dem &man.witness.4;-Subsystem
interagieren. Dadurch wird (in Abhängigkeit von Ihrer
Systemkonfiguration) eine Warnung oder eine Fehlermeldung
ausgegeben, falls der Aufruf einer Funktion während
des Bestehens eines Mutex zu einer Blockierung führen
kann.Zusammenfassend kann man sagen, dass diese Warnungen
in der Regel zwar nicht bedrohlich sind. Unter bestimmten
Umständen kann es aber dennoch zu unerwünschten
Nebenwirkungen, angefangen von einer Erhöhung der
Reaktionszeit bis hin zu einem kompletten Einfrieren des
Systems kommen.Warum bricht
buildworld/installworld
mit der Meldung touch: not found ab?Dieser Fehler bedeutet nicht, dass &man.touch.1; nicht
auf Ihrem System vorhanden ist. Vielmehr sind Dateien die
Ursache, deren Erzeugungsdatum in der Zukunft liegt. Wenn
Ihre CMOS-Uhr auf Ihre lokale Zeit eingestellt ist,
müssen Sie adjkerntz -i
verwenden, um die Kerneluhr anzupassen, wenn Sie in den
Single-User-Modus booten.Kommerzielle AnwendungenDieser Abschnitt ist immer noch sehr dürftig, aber
wir hoffen natürlich, dass Unternehmen einen Beitrag
leisten werden! :) Die FreeBSD-Gruppe hat keinerlei
finanzielle Interessen an einem der hier aufgelisteten
Unternehmen, sondern listet sie lediglich als
öffentlichen Service auf (und ist der Meinung, dass
ein kommerzielles Interesse an FreeBSD sehr positiven
Einfluss auf ein langfristiges Bestehen von FreeBSD haben
kann). Wir möchten Anbieter kommerzieller Software dazu
aufrufen, ihren Eintrag hier aufnehmen zu lassen. Auf der
Anbieter-Seite finden Sie eine längere
Liste.Wo bekomme ich FreeBSD-Versionen der klassischen
Büro-Anwendungen?Das als Open Source verfügbare Office-Paket
OpenOffice.org
läuft nativ unter FreeBSD. Die um zusätzliche
Funktionen erweiterte kommerzielle OpenOffice.org-Version
StarOffice
läuft in der &linux;-Version ebenfalls problemlos
unter FreeBSD.In der Ports-Sammlung sind weitere
Textbearbeitungsprogramme, Tabellenkalkulationen und
Zeichenprogramme enthalten.Woher kann ich &motif; für
FreeBSD bekommen?Der Quelltext für &motif; 2.2.2
wurde von der Open Group herausgegeben. Sie können
entweder das Package x11-toolkits/open-motif
installieren oder es mit dem entsprechenden Port selbst
compilieren. Weitere Informationen über die
Benutzung der Ports erhalten Sie im Kapitel Ports des
Handbuchs.Die Open &motif; Distribution darf
nur weitergegeben werden, wenn sie auf einem Open Source
Betriebssystem benutzt wird.Weiterhin gibt es auch kommerzielle
&motif;-Pakete, die zwar nicht kostenlos
sind, aber dafür auch mit closed source Software
benutzt werden dürfen. Um die günstigste
ELF-&motif; 2.1.20 Distribution
für FreeBSD (&i386;) zu bekommen, wenden Sie sich bitte an
Apps2go.Es gibt zwei Distributionen, die development
edition und die runtime edition
(wesentlich günstiger). Diese Distributionen
enthalten:OSF/&motif; manager,
xmbind, panner,
wsm.Development-Kit mit uil, mrm, xm, xmcxx, Include-
und Imake-Dateien.Statische und dynamische ELF-Bibliotheken.Demonstrations-Applets.Achten Sie darauf, dass Sie bei der Bestellung
angeben, dass Sie die FreeBSD-Version von &motif;
möchten (vergessen Sie auch nicht, die Architektur
anzugeben)! Von Apps2go werden auch
Versionen für NetBSD und OpenBSD verkauft. Dieses
Produkt ist zurzeit nur zum Download per FTP
verfügbar.Weitere InformationenApps2go
Web-Seiteodersales@apps2go.com oder
support@apps2go.comoder
- Telefon (817) 431 8775 oder +1 817
- 431-8775
+ Telefon (817) 431 8775 oder
+ +1 817 431-8775
-
- Eine &motif; 2.0 Distribution für FreeBSD im
- a.out-Format gibt es bei Xi
- Graphics.
-
- Diese Distribution enthält:/
-
-
-
- OSF/&motif; manager, xmbind, panner, wsm.
-
-
-
- Development-Kit mit uil, mrm, xm, xmcxx, Include-
- und Imake-Dateien.
-
-
-
- Statische und dynamische Bibliotheken (zur
- Verwendung unter FreeBSD 2.2.8 und
- frühere).
-
-
-
- Demonstrations-Applets.
-
-
-
- Vorformatierte Manualpages.
-
-
-
- Achten Sie darauf, bei der Bestellung anzugeben,
- dass Sie die FreeBSD-Version von &motif; möchten!
- Xi Graphics verkauft auch Versionen
- für BSDI und &linux;. Dieses Produkt ist derzeit ein
- Satz von vier Disketten... zukünftig wird es eine
- einheitliche CD-Distribution geben, wie beim CDE.Woher kann ich CDE für
FreeBSD bekommen?
- Xi Graphics hat einmal
- CDE für FreeBSD verkauft,
+ Xi Graphics hat einmal
+ CDE für &os; verkauft,
tut es aber nicht mehr.KDE
ist ein Open-Source X11-Desktop, der CDE
in vielen Punkten ähnelt. Eventuell gefällt Ihnen auch
das "Look and Feel" von xfce.
KDE und xfce sind über die Ports-Sammlung
von FreeBSD verfügbar.
-
-
- Gibt es irgendwelche kommerzielle leistungsfähige
- X-Server?
-
-
-
- Ja, Xi
- Graphics vertreibt beschleunigte X-Produkte für
- FreeBSD und andere Intel-basierte Systeme.
-
- Das Angebot von Xi Graphics besteht aus
- einem leistungsfähigen X-Server, der einfache Konfiguration
- und Unterstützung für den parallelen Einsatz
- mehrerer Videokarten bietet. Es wird in binärer Form
- in einer einheitlichen Diskettendistribution für
- FreeBSD und &linux; vertrieben. XI Graphics
- bietet auch leistungsfähige X-Server, die auf die
- Unterstützung von Laptops zugeschnitten sind.
-
-
- Es gibt ein kostenloses
- Kompatibilitäts-Demo der Version
- 5.0.
-
- Xi Graphics vertreibt auch
- &motif; und CDE
- für FreeBSD (siehe oben).
-
-
-
- Weitere Informationen
-
-
- Xi Graphics
- Web-Seite
-
-
-
-
- oder
-
-
- sales@xig.com oder
- support@xig.com
-
-
-
-
- oder
-
-
- Telefon (800) 946 7433 oder
- +1 303 298-7478.
-
-
-
-
-
-
Gibt es irgendwelche Datenbanksysteme für
FreeBSD?Ja! Lesen Sie den Abschnitt
kommerzielle Anbieter auf der FreeBSD-Web-Seite.Schauen Sie auch im Abschnitt Datenbanken
der Ports-Sammlung nach.Kann ich &oracle; unter FreeBSD laufen lassen?Ja. Die folgenden Seiten beschreiben genau, wie sich
&linux;-&oracle; unter FreeBSD
installieren lässt:http://www.unixcities.com/oracle/index.htmlhttp://www.shadowcom.net/freebsd-oracle9i/BenutzerprogrammeNun, wo sind die ganzen Benutzerprogramme?Werfen Sie bitte einen Blick auf die Ports-Seite,
um Informationen über die nach FreeBSD
portierten Softwarepakete zu erhalten. Die Liste
enthält zurzeit &os.numports; Einträge und
wächst täglich. Informieren Sie sich daher
regelmäßig auf dieser Seite oder abonnieren
Sie die Mailingliste &a.announce;, um sich über
Änderungen zu informieren.Die meisten Ports sollten auf den 6.X,
7.X und
8.X-Systemen laufen. Jedes Mal, wenn ein
FreeBSD-Release erstellt wird, wird auch ein Snapshot des
Port-Baumes vom Zeitpunkt des Releases in das Verzeichnis
ports/ eingefügt.Wir unterstützen auch das Konzept von
Packages - im Grunde genommen nicht mehr
als komprimierte Binärdistributionen mit ein wenig
zusätzlicher Intelligenz zur Ermöglichung
angepasster Installationen. Ein Package kann leicht
installiert und wieder deinstalliert werden, ohne,
dass man etwas über wissen muss, welche
Dateien es enthält.Benutzen Sie das Packages Menü
in &man.sysinstall.8; (unter dem Menüpunkt
post-configuration) oder führen Sie
den Befehl &man.pkg.add.1; mit den speziellen
Paketdateien aus, die Sie installieren möchten.
Paketdateien können für gewöhnlich an der
Endung .tgz oder
.tbz erkannt werden und
diejenigen, die über eine CDROM-Distribution
verfügen, haben auf ihrer CD ein Verzeichnis
packages/All, das solche Dateien
enthält. Für verschiedene FreeBSD-Versionen
können sie von folgenden Adressen auch über das
Netz heruntergeladen werden:für 6.X-RELEASE/6-STABLE
ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ports/i386/packages-6-stablefür 7.X-RELEASE/7-STABLE
ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ports/i386/packages-7-stablefür 8-CURRENT
ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ports/i386/packages-8-currentoder von Ihrem nächstgelegenen Mirror.Beachten Sie, dass nicht alle Ports als Package
verfügbar sind, da ständig neue hinzugefügt
werden. Es ist immer eine gute Idee, sich
regelmäßig auf der ftp.de.FreeBSD.org
Masterseite darüber zu informieren, welche Packages
verfügbar sind.Wie konfiguriere ich INN (Internet News) für
meine Maschine?Ein idealer Startpunkt nach der Installation des
Packages oder Ports news/inn
ist Dave
Barr's INN-Seite, wo Sie die INN-FAQ
finden.Unterstützt FreeBSD &java;?Ja. Informieren Sie sich bitte unter http://www.de.FreeBSD.org/java/.Warum kann ich manche Ports auf meiner
6.X oder
7.X-STABLE-Maschine nicht erstellen?Wenn Sie eine FreeBSD-Version benutzen, die deutlich
älter als das aktuelle -CURRENT
oder -STABLE ist, könnte es sein,
dass Sie vorher Ihre Ports-Sammlung
aktualisieren müssen. Lesen Sie dazu den Abschnitt
Keeping Up des Porters-Handbuch. Ist Ihre
Ports-Sammlung aktuell, könnte es sein, dass jemand
eine Änderung am Port durchgeführt hat, die
für -CURRENT funktioniert, den Port
für -STABLE aber unbrauchbar gemacht hat.
Bitte senden Sie einen Fehlerbericht mit dem
Befehl &man.send-pr.1;. Von der Ports-Sammlung
wird nämlich erwartet, dass sie sowohl auf
-CURRENT als auch auf
-STABLE funktioniert.Ich habe gerade versucht, INDEX
mit make index zu
bauen, und es hat nicht geklappt. Woran liegt das?Stellen Sie zuerst sicher, dass Ihre Ports-Sammlung
aktuell ist. Fehler, die einen Bau von
INDEX aus einer aktuellen Ports-Sammlung
verhindern, sind sofort sichtbar und werden daher fast immer
umgehend behoben.Ist Ihre Ports-Sammlung jedoch aktuell, haben Sie
vielleicht ein anderes Problem.
make index hat einen
Bug im Umgang mit unvollständigen Kopien der Ports-Sammlung.
Es nimmt an, dass Sie über eine lokale Kopie aller Ports
verfügen, von denen jeder lokale Port abhängt.
Wenn Sie also beispielsweise eine Kopie von
foo/bar auf Ihrem System haben, und
foo/bar ist von
baz/quux abhängig, dann muss auch
eine Kopie von baz/quux auf Ihrem
System vorhanden sein, sowie eine Kopie aller Ports, von
denen baz/quux abhängt.
Anderenfalls ist make
index aufgrund
fehlender Informationen nicht in der Lage, den
Abhängigkeitsbaum zu erzeugen.Dieses Problem tritt vor allem dann auf, wenn
&os;-Benutzer &man.cvsup.1; (oder &man.csup.1;) verwenden, um die
Ports-Sammlung zu aktualisieren und dabei verschiedene Kategorien
durch die Datei refuse von der Aktualisierung
ausschließen. Theoretisch ist es zwar möglich,
Kategorien auszuschließen, in der Praxis gibt es aber
zu viele Ports, die von Ports in anderen Kategorien
abhängen. Wenn Sie also INDEX
bauen wollen, müssen Sie über
eine komplette Kopie der Ports-Sammlung verfügen.Es gibt seltene Fälle, in denen
INDEX nicht gebaut werden kann, wenn
bestimmte
WITH_* oder
WITHOUT_*
Variablen in make.conf gesetzt sind.
Wenn Sie dieses Problem haben, sollten Sie diese
make-Variablen deaktivieren und INDEX
erneut bauen, bevor Sie das Problem an &a.ports;
melden.Warum ist CVSup nicht im
FreeBSD-Basisquellbaum enthalten?Das Basissystem von FreeBSD soll
selbstverwaltend sein. Es soll also
möglich sein, das komplette Betriebssystem mit einer
beschränkten Anzahl von Werkzeugen zu starten. Daher
werden die zum Bau von FreeBSD nötigen Werkzeuge mit
dem Quelltext gekoppelt. Zu diesen Werkzeugen gehören
ein C-Compiler (&man.gcc.1;), &man.make.1;, &man.awk.1; und
andere.Da CVSup in Modula-3 geschrieben
wurde, müsste ein Modula-3-Compiler ins Basissystem
aufgenommen und auch gewartet werden. Dies würde einen
gestiegenen Speicherbedarf für die FreeBSD-Quellen sowie
einen erhöhten Wartungsaufwand verursachen. Daher ist es
sowohl für Entwickler als auch Benutzer einfacher,
CVSup bei Bedarf als Port oder als Paket von einer
Installations-CD zu installieren.Wie dem auch sei, &os;-Benutzer müssen seit
FreeBSD 6.2-RELEASE nicht mehr ohne einen kompatiblen
CVSup-Client auskommen. Dank &a.mux;
wurde CVSup als &man.csup.1; in C neu
geschrieben und ist mittlerweile Teil des Basissystems. Obwohl zur
Zeit noch nicht alle Eigenschaften von
CVSup implementiert sind, ist es gut genug
(und sehr schnell!) darin, ihre Quellen zu synchronisieren.
Für &os;-Systeme vor 6.2 kann es als Port oder Paket
(siehe net/csup) installiert
werden.Ich habe die Sourcen aktualisiert, wie aktualisiere
ich jetzt die installierten Ports?FreeBSD enthält zwar kein Programm, das die
installierten Ports aktualisiert, allerdings existieren
diverse Programme, die diesen Prozess etwas
vereinfachen. Weiterhin können Sie zusätzliche
Programme installieren, die Sie dabei
unterstützen, siehe
Ports
aktualisieren im FreeBSD Handbuch.Warum ist /bin/sh so spartanisch?
Warum benutzt FreeBSD nicht die bash
oder eine ähnliche Shell?Weil der &posix;-Standard definiert, dass es so
eine Shell geben muss.Die ausführlichere Antwort: Viele Leute
müssen Shell-Programme schreiben, die auf vielen
verschiedenen Systemen nutzbar sein müssen. Aus
diesem Grund enthält der &posix;-Standard eine sehr
detaillierte Definition der Shell und der Hilfsprogramme.
Die meisten Programme werden für die Bourne Shell
geschrieben; außerdem nutzen mehrere wichtige
Schnittstellen (&man.make.1;, &man.system.3;,
&man.popen.3; und ihre Entsprechungen in höheren
Programmiersprachen wie Perl und Tcl) die Bourne Shell, um
Befehle auszuführen. Da die Bourne Shell an so
vielen Stellen und so häufig genutzt wird, muss
sie die folgenden Anforderungen erfüllen: Schneller
Start, ein klar definiertes Verhalten und ein
möglichst geringer Speicherverbrauch.Wir haben bei der vorliegenden Implementierung
versucht, möglichst viele dieser Anforderungen zu
erfüllen. Um /bin/sh nicht zu
groß werden zu lassen, haben wir viele der
Annehmlichkeiten der anderen Shells weggelassen. Aus
diesem Grund gibt es in den Ports die luxuriöseren
Shells wie bash, scsh,
tcsh und zsh. Vergleichen Sie
einfach mal den Speicherverbrauch der verschiedenen
Shells, indem Sie ps aufrufen
und sich die Angaben in den Spalten VSZ und
RSS ansehen.Wieso dauert es so lange, bis &netscape; und Opera
starten?In den meisten Fällen liegt es daran, dass
Ihre DNS-Einstellungen fehlerhaft sind. Sowohl
&netscape; als auch
Opera stellen Anfragen an DNS,
wenn Sie gestartet werden. Das Fenster des Browsers erscheint
erst, wenn das Programm eine Antwort erhalten hat oder es
festgestellt hat, dass Ihr System nicht an ein Netzwerk
angeschlossen ist.Ich habe die Ports-Sammlung mit
CVSup aktualisiert. Viele
Ports lassen sich danach nicht mehr bauen und geben
seltsame Fehlermeldungen aus. Was ist passiert? Ist
die Ports-Sammlung kaputt?Sie sollten immer die Teilsammlung
ports-base aktualisieren, wenn Sie
nur Teile der Ports-Sammlung mit Hilfe der
CVSup-Teilsammlungen
aktualisieren. Die Erklärung dazu finden Sie im
Handbuch.Wie erzeuge ich Audio-CDs aus MIDI-Dateien?Installieren Sie zuerst den Port audio/timidity++. Danach
müssen Sie manuell die GUS-Patche von
Eric A. Welsh von
installieren. Wenn TiMidity++
richtig installiert wurde, können Sie mit dem folgenden
Kommando MIDI-Dateien in das WAV-Format konvertieren:&prompt.user; timidity -Ow -s 44100 -o /tmp/juke/01.wav01.midDie WAV-Dateien können dann in andere Formate
konvertiert werden oder (wie im
FreeBSD-Handbuch
beschrieben) auf Audio-CDs gebrannt werden.KernelkonfigurationIch möchte meinen Kernel anpassen. Ist das
schwierig?Überhaupt nicht! Lesen Sie den Abschnitt zur
Kernelkonfiguration im Handbuch.Der neue kernel wird zusammen mit seinen
Modulen im Verzeichnis /boot/kernel
installiert werden. Der alte Kernel und dessen Module wird in
das Verzeichnis /boot/kernel.old verschoben,
damit Sie, wenn Sie einen Fehler beim herumexperimentieren mit
Ihrer Konfiguration gemacht haben, die vorherige Version Ihres
Kernels starten können.Was kann ich machen, wenn meine Kernel-Kompilierungen
fehlschlagen, weil _hw_float
fehlt?Sie haben wahrscheinlich
npx0 aus Ihrer
Kernelkonfigurationsdatei entfernt, weil Sie keinen
mathematischen Co-Prozessor besitzen. Die Gerätedatei
npx0 ist allerdings
VERPFLICHTEND. Ihre Hardware
unterstützt Gleitkommaoperationen, selbst wenn dafür
kein eigenes Bauteil (wie bei den 386er-Prozessoren) mehr
verwendet wird. Daher müssen Sie
die Gerätedatei npx0 einbinden.
Selbst wenn es Ihnen gelingen sollte, einen Kernel ohne
npx0-Unterstützung zu bauen,
werden Sie diesen nicht booten können.Warum ist mein Kernel so groß (über 10 MByte)?Sie haben Ihren Kernel wahrscheinlich im
Debug Modus erstellt. Ein
Debug-Kernel enthält viele zusätzliche
Informationen für die Fehlersuche, daher ist er so
groß. Bitte beachten Sie, dass die Verwendung
eines Debug-Kernels
die Performance des Systems nicht oder nur minimal
reduziert; außerdem ist es für den Fall einer
system panic sehr praktisch, einen Debug-Kernel zur Hand
zu haben.Wenn Ihnen allerdings der Plattenplatz ausgeht oder
Sie einfach rein prinzipiell keinen Debug-Kernel benutzen
wollen, müssen die beiden folgenden Bedingungen
erfüllt sein:Die Konfigurationsdatei für Ihren Kernel darf
die folgende Zeile nicht enthalten:makeoptions DEBUG=-gSie dürfen &man.config.8; nicht mit dem
Parameter starten.Sollten Sie sich nicht an diese Einschränkungen
halten, wird Ihr Kernel im Debug-Modus erstellt. Solange
Sie sich an diese Einschränkungen halten, können
Sie Ihren Kernel ganz normal erstellen und die
Größe des Kernels sollte deutlich sinken. Ein
normaler Kernel ist nur 1.5 MByte bis 2 MByte
groß.Wieso erhalte ich Meldungen über Interrupt-Konflikte,
wenn ich eine Karte mit mehreren seriellen Schnittstellen
einsetzen will?Wenn ich einen Kernel mit Unterstützung für
serielle Multi-Port-Schnittstellen kompiliere, bekomme ich
den Hinweis, dass nur der erste Port geprüft
wird und die restlichen auf Grund von Interrupt-Konflikten
übersprungen werden. Wie kann ich das
Beheben?Das Problem besteht darin, dass in FreeBSD Code
integriert ist, um den Kernel vor Abstürzen aufgrund
von Hardware- oder Software-Konflikten zu bewahren.
Behoben wird es, indem die IRQ-Angaben für alle
Ports, bis auf einen ausgelassen werden. Hier ist ein
Beispiel:
#
# Multiport high-speed serial line - 16550 UARTS
#
device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
Wieso kann ich nicht einmal den Standard-Kernel
(GENERIC) bauen?Es gibt eine Reihe von möglichen Ursachen
für dieses Problem:Sie benutzen die neuen Kommandos make
buildkernel und
make installkernel
nicht, obwohl die Sourcen auf Ihrem System nicht zum laufenden
System passen (z.B. benutzen Sie die Sourcen von
&rel.current;-RELEASE auf einem System mit
&rel2.current;-RELEASE). Wenn Sie ein Upgrade
durchführen wollen, sollten Sie
/usr/src/UPDATING lesen, beachten
Sie insbesondere den Abschnitt COMMON
ITEMS gegen Ende des Dokuments.Sie benutzen zwar make
buildkernel und
make installkernel,
aber Sie haben nicht darauf geachtet, dass vorher ein
komplettes make
buildworld durchgelaufen
sein muss. Um seine Arbeit erledigen zu können,
benötigt make
buildkernel
Dateien, die von make
buildworld
erzeugt werden.Auch wenn Sie FreeBSD-STABLE verwenden, ist
es durchaus möglich, dass Sie die Sourcen
genau zum falschen Zeitpunkt aktualisiert haben:
Während Sie gerade modifiziert wurden oder
kurzzeitig fehlerhaft waren. Eine absolute und
vollständige Garantie, dass Sie die Sourcen
compilieren können, gibt es nur für die
Releases, bei FreeBSD-STABLE ist das nicht
immer so. Wenn Sie es noch nicht versucht haben,
sollten Sie ihre Source nochmals aktualisieren. Es
ist denkbar, dass der von Ihnen genutzte Server
zurzeit Probleme hat, benutzen Sie daher testweise
auch einmal einen anderen Server.Wie kann ich prüfen, welchen Scheduler das
System benutzt?Überprüfen Sie dazu, ob auf Ihrem System die
sysctl-Variable kern.sched.quantum
existiert. Ist dies bei Ihnen der Fall, werden Sie eine
Ausgabe ähnlich der folgenden sehen:&prompt.user; sysctl kern.sched.quantum
kern.sched.quantum: 99960Wenn die sysctl-Variable kern.sched.quantum
existiert, dann verwenden Sie den 4BSD-Scheduler
(&man.sched.4bsd.4;). Existiert sie nicht, erzeugt &man.sysctl.8;
eine Fehlermeldung (die Sie aber ignorieren können):&prompt.user; sysctl kern.sched.quantum
sysctl: unknown oid 'kern.sched.quantum'Seit &os; 5.3-RELEASE wird der Name des verwendeten
Schedulers direkt als Wert der sysctl-Variable
kern.sched.name ausgegeben:&prompt.user; sysctl kern.sched.name
kern.sched.name: 4BSDWas bedeutet kern.sched.quantum?kern.sched.quantum ist die maximale
Anzahl Ticks, die ein Prozess ununterbrochen laufen kann.
Die Variable ist charakteristisch für den
4BSD Scheduler, somit kann der verwendete Scheduler
über die Existenz dieser Variablen bestimmt werden.Platten, Dateisysteme und Boot LoaderWie kann ich meine neue Festplatte in mein
FreeBSD-System einbinden?Lesen Sie den Abschnitt Hinzufügen
von Laufwerken im Handbuch.Wie verschiebe ich mein System auf meine neue,
große Platte?Die beste Methode ist, das Betriebssystem auf der
neuen Platte neu zu installieren und danach die Daten zu
verschieben. Wenn Sie -STABLE
über eine Release hinaus genutzt haben oder eine Release
aktualisiert haben, ist das sehr empfehlenswert. Sie
können auf beiden Platten &man.boot0cfg.8; installieren
und die beiden Versionen so lange parallel betreiben, bis Ihnen
die neue Konfiguration gefällt. Wenn Sie dies tun wollen,
können Sie im übernächsten Absatz erfahren,
wie sie Ihre Daten verschieben können.Falls Sie sich entscheiden, das nicht zu tun,
müssen Sie Ihre neue Platte partitionieren und
labeln. Benutzen Sie dafür entweder
&man.sysinstall.8; oder &man.fdisk.8;
und &man.disklabel.8;. Weiterhin sollten Sie mit
&man.boot0cfg.8; auf beiden Platten booteasy installieren,
damit Sie in der Lage sind, das alte und das neue System
abwechselnd zu starten, nachdem der Kopiervorgang
abgeschlossen ist. Im Formatting-Media
Tutorial finden Sie weitere Informationen zu
diesen Schritten.Nachdem Sie die neue Platte eingerichtet haben,
können Sie Ihre Daten verschieben. Dummerweise
können Sie die Daten nicht einfach kopieren. Dinge wie
Gerätedateien (in /dev),
erweiterte Dateiattribute und symbolische Links führen
dazu, dass das in die Hose geht. Sie müssen
ein Programm benutzen, das damit umgehen kann, und das
ist &man.dump.8;. Es wird oft empfohlen, die Daten im
- Single-User Modus zu verschieben, aber das ist nicht
+ Single-User-Modus zu verschieben, aber das ist nicht
unbedingt notwendig.Sie sollten auf gar keinen Fall etwas anderes als
&man.dump.8; und &man.restore.8; benutzen, um Ihr Root-Filesystem
zu verschieben. Es könnte auch mit
&man.tar.1; funktionieren - oder auch nicht. Sie sollten
ebenfalls &man.dump.8; und &man.restore.8; benutzen, wenn
Sie eine komplette Partition auf eine andere, leere
Partition verschieben wollen. Um die Daten einer Partition mit
dump auf eine andere Partition zu verschieben,
müssen Sie die folgenden Schritte ausführen:Richten Sie in der neuen Partition mit
newfs ein Dateisystem ein.Mounten Sie die Partition temporär an einer
geeigneten Stelle.Wechseln Sie mit cd in dieses
Verzeichnis.Lesen Sie die alte Partition mit dump
aus und lenken Sie die Ausgabe auf die neue Partition um.Wenn Sie zum Beispiel root auf
/dev/ad1s1a
verschieben wollen und diese derzeit auf
/mnt gemountet
ist, bedeutet das:&prompt.root; newfs /dev/ad1s1a
&prompt.root; mount /dev/ad1s1a/mnt
&prompt.root; cd /mnt
&prompt.root; dump 0af - / | restore xf -Wenn Sie Ihre Partitionen mit &man.dump.8;
umorganisieren wollen, steht Ihnen etwas mehr Arbeit
bevor. Wenn Sie eine Partition wie
/var in die übergeordnete Partition
verschieben wollen, müssen Sie zunächst eine neue
Partition erzeugen, die die beiden alten Partitionen
aufnehmen kann. Der zweite Schritt ist, wie oben
beschrieben die übergeordnete Partition in die neue
Partition zu verschieben. Im dritten und letzten Schritt
verschieben Sie dann die untergeordnete Partition in das
leere Verzeichnis, das im zweiten Schritt entstanden
ist:&prompt.root; newfs /dev/ad1s1a
&prompt.root; mount /dev/ad1s1a/mnt
&prompt.root; cd /mnt
&prompt.root; dump 0af - / | restore xf -
&prompt.root; cd var
&prompt.root; dump 0af - /var | restore xf -Wenn Sie ein Verzeichnis aus einer Partition
herauslösen wollen, also z.B.
/var auf eine eigene Partition
verlegen wollen, dann müssen Sie zunächst beide
Partitionen anlegen. Danach müssen Sie die
untergeordnete Partition im passenden Verzeichnis
unterhalb des temporären mount points mounten und zum
Abschluß die alte Partition verschieben:&prompt.root; newfs /dev/ad1s1a
&prompt.root; newfs /dev/ad1s1d
&prompt.root; mount /dev/ad1s1a/mnt
&prompt.root; mkdir /mnt/var
&prompt.root; mount /dev/ad1s1d/mnt/var
&prompt.root; cd /mnt
&prompt.root; dump 0af - / | restore xf -Eventuell sagen Ihnen für Benutzerdaten
&man.cpio.1;, &man.pax.1; oder &man.tar.1; eher zu als
&man.dump.8;. Allerdings haben alle diese Programme den
Nachteil, dass sie die erweiterten Dateiattribute
nicht verstehen, daher sollten Sie bei ihrem Einsatz
aufpassen.Gefährdet eine dangerously
dedicated Festplatte meine Gesundheit?Die Installationsprozedur bietet
Ihnen zwei verschiedene Methoden, Ihre Festplatte(n) zu
partitionieren. Die Standardmethode macht sie kompatibel
zu anderen Betriebssystemen auf derselben Maschine, indem
&man.fdisk.8;-Tabelleneinträge (unter FreeBSD
slices genannt) mit einem FreeBSD-Eintrag,
in dem eigene Partitionen untergebracht werden, benutzt
werden. Optional kann ausgewählt werden, ob ein
Boot-Selektor installiert werden soll, um zwischen den
möglichen Betriebssystemen auf der/den Platte(n)
wechseln zu können. Bei der zweiten Methode wird die
gesamte Platte für FreeBSD genutzt und nicht
versucht, kompatibel zu anderen Betriebssystemen zu
sein.Nun, warum wird es gefährlich
genannt? Eine Platte in diesem Modus enthält nichts,
was von normalen PC-Hilfsprogrammen als gültige
&man.fdisk.8;-Tabelle betrachtet werden würde.
Abhängig von der Qualität ihres Designs werden sie
sich bei Ihnen beschweren, sobald sie mit einer solchen Platte
in Kontakt kommen, oder noch schlimmer, sie könnten den
Bootstrap von FreeBSD beschädigen, ohne Sie zu fragen
oder darauf hinzuweisen. Hinzu kommt, dass vom
Layout von dangerously dedicated Platten
bekannt ist, dass es viele BIOSe verwirrt,
einschließlich solcher von AWARD (wie es z.B. im HP
Netserver oder Micronics-Systemen, sowie vielen anderen zu
finden ist) und Symbios/NCR (für die bekannte
53C8xx-Reihe von SCSI-Controllern). Dies ist keine
vollständige Liste - es gibt weitere. Symptome
für diese Verwirrung sind read
error-Meldungen, die vom FreeBSD-Bootstrap
ausgegeben werden, wenn es sich selbst nicht finden kann,
sowie Systemabstürze beim Booten.Warum gibt es diesen Modus dann überhaupt? Es
spart ein paar kByte an Plattenplatz und kann echte
Probleme verursachen, die zu einer Neuinstallation
führen. Die Ursprünge des Dangerously
dedicated Modus liegen in der Absicht, eines der
häufigsten Probleme, das Erstinstallierer von FreeBSD
plagt, zu verhindern - die BIOS-Werte für die
Geometrie einer Festplatte auf der
Festplatte selbst anzupassen.Geometrie ist ein veraltetes Konzept,
das aber immer noch die Grundlage für die Interaktion
zwischen dem PC-BIOS und den Festplatten ist. Wenn das
Installationsprogramm von FreeBSD Slices erstellt,
muss es sich die Lage dieser Slices auf der
Festplatte in einer Art merken, die damit
übereinstimmt, wie das BIOS erwartet, sie zu finden.
Wenn das falsch geschieht, werden Sie nicht in der Lage
sein, zu booten.Durch den Dangerously dedicated Modus
wird versucht, dies zu umgehen, indem das Problem
vereinfacht wird. In einigen Fällen klappt das zwar,
aber er ist eher als allerletzter Ausweg gedacht - in 99
von 100 Fällen gibt es bessere Möglichkeiten,
das Problem zu lösen.Wie vermeiden Sie also die Notwendigkeit zum
DD Modus, wenn Sie installieren? Beginnen
Sie, indem Sie sich notieren, welche Geometrie das BIOS
für Ihre Platten benutzt. Sie können erreichen,
dass der Kernel sie beim Booten ausgibt, indem Sie
an der Eingabeaufforderung
boot: angeben, oder boot
-v im Loader verwenden. Kurz bevor das
Installationsprogramm startet, wird der Kernel eine Liste
mit den BIOS-Geometrien ausgeben. Keine Panik - warten
Sie, bis das Installationsprogramm gestartet wurde und
benutzen Sie Scrollback, um die Zahlen zu lesen.
Typischerweise befinden sich die BIOS-Platten in derselben
Reihenfolge, wie FreeBSD Ihre Platten auflistet - zuerst
IDE, dann SCSI.Wenn Sie Ihre Festplatte in Slices unterteilen,
überprüfen Sie, ob die Plattengeometrie, die im
FDISK-Menü angegeben ist, korrekt ist (das heißt
mit den Einstellungen im BIOS übereinstimmen). Falls
die Werte nicht stimmen, benutzen Sie G, um
sie zu korrigieren. Diese Schritte sind nötig, wenn
sich absolut nichts auf der Festplatte befindet, oder,
wenn die Festplatte vorher in einem anderen System benutzt
worden ist. Beachten Sie, dass dies nur für die
Festplatte nötig ist, von der Sie booten wollen. Mit
weiteren vorhandenen Platten wird FreeBSD sich problemlos
zurechtfinden.Wenn Sie es geschafft haben, dass das BIOS und
FreeBSD in der Festplattengeometrie übereinstimmen,
dann sind Ihre Probleme ziemlich sicher vorüber -
ohne, dass es nötig gewesen wäre, den
DD-Modus zu benutzen. Falls sie jedoch
immer noch mit der gefürchteten read
error-Meldung begrüßt werden sollten,
wenn Sie versuchen, zu booten, wird es Zeit, dass Sie
Ihre Finger kreuzen und es einfach versuchen - es gibt
nichts mehr zu verlieren.Um eine dangerously dedicated
Festplatte wieder für einen normalen PC brauchbar zu
machen, gibt es zwei Möglichkeiten. Die erste ist,
ausreichend viele NULL-Bytes in den MBR zu schreiben, um
irgendwelche nachfolgenden Installation glauben zu machen,
dass es sich um eine leere Festplatte handelt. Sie
können das zum Beispiel so tun:&prompt.root; dd if=/dev/zero of=/dev/rda0 count=15Alternativ installiert der undokumentierte
DOS-BefehlC:\>fdisk /mbreinen neuen Master-Boot-Record, das heißt der
BSD-Bootstrap wird zerstört.Auf welchen Partitionen kann ich problemlos
Soft Updates einsetzen? Ich habe gehört, das der
Einsatz von Soft Updates auf /
Probleme verursachen kann.Die schnelle Antwort: Sie können Soft Updates
bedenkenlos auf alle Partitionen benutzen.Die ausführliche Antwort: Es gab lange Zeit
Bedenken, was den Einsatz von Soft Updates auf der
root-Partition betrifft. Der Grund sind zwei
Charakteristika der Soft Updates: Zum einen kann es bei
einem Absturz des System auf einer Partition mit
Soft Updates zum Datenverlust kommen. Die Partition ist
zwar noch brauchbar, aber einige Daten können
verloren gehen. Weiterhin kann es durch Soft Updates zu
einem zeitweisen Mangel an Plattenplatz kommen.Bei der Benutzung von Soft Updates kann es bis zu
dreißig Sekunden dauern, bis der Kernel
Änderungen auf das physikalische Speichermedium
schreibt. Wenn Sie eine große Datei löschen,
ist diese Datei noch auf der Platte vorhanden, bis der
Kernel die Löschoperation tatsächlich
durchführt. Das kann zu einem sehr einfachen Problem
führen: Stellen Sie sich vor, Sie löschen eine
große Datei und legen gleich darauf eine andere
große Datei an. Da die erste Datei noch nicht
wirklich gelöscht wurde, ist eventuell nicht genug
Platz für die zweite große Datei. Sie erhalten
die Fehlermeldung, dass nicht genug freier Platz
vorhanden ist, obwohl Sie ganz genau wissen, dass Sie
gerade eben Platz geschaffen haben. Wenn Sie die
Operation ein paar Sekunden später wiederholen,
funktioniert alles wie von Geisterhand. Dieser Effekt hat
mehr als einen Benutzer verwirrt und Zweifel an seiner
geistigen Stabilität oder dem FreeBSD-Dateisystem
aufkommen lassen.Wenn der Kernel ein Datenpaket annimmt und das System
abstürzt, bevor er dies Daten auf die Platte
geschrieben hat, kann es zum Verlust oder zur
Zerstörung von Daten kommen. Dieses Risiko ist nur
sehr gering und normalerweise tragbar. Wenn Sie
allerdings einen IDE-Write-Cache verwenden, steigt das
Risiko; daher wird normalerweise empfohlen, auf den
Einsatz dieser Technik zu verzichten, wenn Sie Soft Updates
benutzen.Diese beiden Probleme betreffen alle Partitionen, die
Soft Updates verwenden. Was bedeutet das für die
Root-Partition?Die wichtigen Daten auf der Root-Partition ändern
sich nur sehr selten. Dateien wie
/boot/kernel/kernel und der Inhalt
/etc werden nur bei der Wartung des
Systems geändert, oder wenn Benutzer ihre
Passwörter ändern. Wenn das System in den
30 Sekunden nach einer solchen Änderung
abstürzt, ist es möglich, das Daten verloren
gehen. Dieses Risiko ist in den meisten Fällen
unerheblich, aber es ist vorhanden. Wenn das zu viel
Risiko ist, dann sollten Sie Soft Updates nicht auf der
Root-Partition einsetzen./ war schon immer eine der
kleinsten Partitionen. Wenn Sie das Verzeichnis
/tmp direkt
auf / und in Ihrem
/tmp viel Betrieb ist, kann es
gelegentlich zu den oben beschriebenen Platzproblemen
kommen. Um das Problem zu lösen, sollten sie einen
symbolischen Link von /tmp nach
/var/tmp legen.Was stimmt mit meinem &man.ccd.4; nicht?Das Symptom hierfür ist:&prompt.root; ccdconfig -C
ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or formatDas geschieht für gewöhnlich, wenn Sie
versuchen, die c Partitionen, die
standardmäßig vom Typ
unbenutzt sind, zu verbinden. Der
&man.ccd.4;-Treiber verlangt Partitionen vom Typ
FS_BSDFFS. Editieren Sie den
Plattenlabel der Platten, die Sie zu
verknüpfen versuchen und ändern Sie die Typen
der Partitionen in 4.2BSD.Warum kann ich den Plattenlabel meines &man.ccd.4; nicht
editieren?Das Symptom hierfür ist:&prompt.root; disklabel ccd0
(hier wird etwas vernünftiges ausgegeben; versuchen wir nun, es zu editieren)
&prompt.root; disklabel -e ccd0
(editieren, speichern, beenden)
disklabel: ioctl DIOCWDINFO: No disk label on disk;
use "disklabel -r" to install initial labelDer Grund ist, dass der von &man.ccd.4;
zurückgelieferte Plattenlabel ein
vorgetäuschter ist, der sich nicht
wirklich auf der Platte befindet. Sie können das
Problem beheben, indem Sie ihn explizit
zurückschreiben, wie z.B. hier:&prompt.root; disklabel ccd0 > /tmp/disklabel.tmp
&prompt.root; disklabel -Rr ccd0/tmp/disklabel.tmp
&prompt.root; disklabel -e ccd0
(nun wird es funktionieren)Kann ich andere fremde Dateisysteme unter FreeBSD
mounten?FreeBSD unterstützt verschiedene fremde
Dateisysteme.UFSUFS-CDROMs können unter FreeBSD direkt
gemountet werden. Das Mounten von Partitionen von
Digital &unix; und anderen Systemen, die UFS
unterstützen, könnte schwieriger sein,
abhängig von den Details der
Plattenpartitionierung des betreffenden
Betriebssystems.ext2/ext3FreeBSD unterstützt
ext2fs und
ext3fs-Partitionen. Unter
&man.mount.ext2fs.8; finden Sie weitere
Informationen.NTFSEin NTFS-Treiber, der nur Lesezugriffe gestattet,
ist Teil von &os;. Weitere Informationen entnehmen
Sie bitte der Hilfeseite &man.mount.ntfs.8;. Ein Port von
ntfs-3g
unterstützt Schreiboperationen auf NTFS (siehe sysutils/fusefs-ntfs).FATFreeBSD enthält ein FAT-Treiber, der Lese-
und Schreibzugriffe ermöglicht. Weitere
Informationen entnehmen Sie bitte der Hilfeseite
&man.mount.msdosfs.8;.ReiserFSFreeBSD enthält einen Treiber, der Lesezugriffe
auf ReiserFS-Partitionen erlaubt. Weitere Informationen
dazu finden Sie in der Manualpage
&man.mount.reiserfs.8;.ZFSZum jetzigen Zeitpunkt enthält &os; eine
Portierung von &sun;s ZFS Treiber. Die aktuelle Empfehlung
ist, es nur auf &arch.amd64; Plattformen mit ausreichend
Hauptspeicher zu verwenden. Mehr Informationen
finden Sie in der Manualpage &man.zfs.8;.FreeBSD unterstützt auch verschiedene
Netzwerk-Dateisysteme, wie NFS (&man.mount.nfs.8;), NetWare
(&man.mount.nwfs.8;), sowie die SMB-Dateisysteme von
Microsoft (&man.mount.smbfs.8;). In Ports die auf FUSE
(sysutils/fusefs-kmod)
basieren, können Sie viele weitere Dateisysteme finden.Wie mounte ich eine erweiterte DOS-Partition?Die erweiterten DOS-Partitionen befinden sich hinter
allen primären Partitionen. Wenn sich
zum Beispiel eine Partition E als sekundäre
DOS-Partition auf Ihrem zweiten SCSI-Laufwerk befindet,
wird eine Gerätedatei für
Slice 5 im Verzeichnis
/dev erstellt, also mounten Sie diese
einfach:&prompt.root; mount -t msdos /dev/da1s5 /dos/eGibt es ein verschlüsselndes Dateisystem
für &os;?Ja. Sie können entweder &man.gbde.8; oder &man.geli.8;
einsetzen. Lesen Sie dazu auch den Abschnitt
Partitionen
verschlüsseln des Handbuchs.Wie kann ich den &windowsnt;-Loader zum Booten von
FreeBSD verwenden?Das grundsätzliche Vorgehen besteht darin,
dass Sie den ersten Sektor Ihrer eigentlichen
FreeBSD-Rootpartition in eine Datei auf der
DOS/&windowsnt;-Partition kopieren. Angenommen, sie nennen
die Datei etwa c:\bootsect.bsd (durch
c:\bootsect.dos inspiriert), dann
können Sie die Datei c:\boot.ini
etwa wie folgt editieren:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT"
C:\BOOTSECT.BSD="FreeBSD"
C:\="DOS"
Falls FreeBSD auf derselben Platte, wie die
&windowsnt;-Bootpartition installiert ist, kopieren Sie
einfach /boot/boot1 nach
C:\BOOTSECT.BSD. Falls FreeBSD auf
einer anderen Platte installiert ist, wird
/boot/boot1 nicht funktionieren; Sie
brauchen in diesem Fall
/boot/boot0./boot/boot0 muss mit
&man.sysinstall.8; installiert werden. Wählen Sie dazu den
FreeBSD-Bootmanager aus, wenn Sie gefragt werden, ob sie
einen Bootmanager installieren wollen. Dieser Schritt ist
notwendig, weil /boot/boot0 eine
leere Partitionstabelle enthält, die von &man.sysinstall.8;
mit NULL-Zeichen ausgefüllt wird, bevor
/boot/boot0 in den MBR kopiert
wird.Sie dürfen auf gar keinen Fall einfach
/boot/boot0 statt
/boot/boot1 kopieren. Wenn Sie das
doch tun sollten, wird Ihre Partitionstabelle
überschrieben und Ihr Rechner wird nicht mehr
starten!Wenn der Bootmanager von FreeBSD gestartet wird, merkt
er sich das zuletzt gestartet Betriebssystem, indem er
dessen Partition als aktiv markiert. Danach kopiert er
sich selbst (alle 512 Bytes) in den MBR. Wenn Sie also
einfach /boot/boot0 nach
C:\BOOTSECT.BSD kopieren, würde
der Bootmanager eine leere Partitionstabelle (mit einem
als aktiv markiertem Eintrag) in den MBR kopieren.Wie boote ich FreeBSD und &linux; mit LILO?Falls sich FreeBSD und &linux; auf derselben Platte
befinden, folgen Sie einfach den Installationsanweisungen
von LILO zum Booten eines Nicht-&linux;-Betriebssystems.
Ganz knapp sind dies:Booten Sie &linux; und fügen Sie die folgenden
Zeilen in die Datei /etc/lilo.conf
ein:other=/dev/hda2
table=/dev/hda
label=FreeBSD(hierbei wird angenommen, dass Ihre
FreeBSD-Partition &linux; unter
/dev/hda2 bekannt ist; ändern
Sie dies entsprechend Ihren Einstellungen). Führen
Sie nun als root den Befehl
lilo aus und Sie sind fertig.Falls FreeBSD sich auf einer anderen Platte befindet,
müssen Sie loader=/boot/chain.b zu
den LILO-Angaben hinzufügen. Zum Beispiel:other=/dev/dab4
table=/dev/dab
loader=/boot/chain.b
label=FreeBSDIn einigen Fällen könnte es sein, dass
Sie beim FreeBSD-Bootloader die BIOS-Laufwerksnummer
angeben müssen, um von der zweiten Platte booten zu
können. Wenn Ihre FreeBSD-SCSI-Platte vom BIOS zum
Beispiel als BIOS-Platte 1 erkannt wird, müssen Sie
am Prompt des FreeBSD-Bootloaders eingeben:Boot: 1:da(0,a)/boot/kernel/kernelSie können &man.boot.8; so
konfigurieren, dass das beim Booten automatisch
geschieht.Das
&linux;+FreeBSD mini-HOWTO ist ein guter Ratgeber bei
Fragen zur Interaktion von FreeBSD und &linux;.Wie boote ich &os; und &linux; mit GRUB?Es ist sehr einfach, GRUB zum Starten von &os;
einzusetzen. Dazu müssen Sie lediglich die folgenden
Zeilen in die Konfigurationsdatei
/boot/grub/menu.lst (oder
/boot/grub/grub.conf bei manchen Systemen wie
z.B. Red Hat Linux und dessen Abkömmlinge) aufnehmen.title FreeBSD 6.1
root (hd0,a)
kernel /boot/loader
Dabei steht hd0,a für die
root-Partition Ihrer ersten Festplatte. Benötigen
Sie auch die Slice-Nummer, so verwenden Sie einen Eintrag
der Form (hd0,2,a). In der
Voreinstellung ist die Angabe der Slice-Nummer aber nicht
nötig, da GRUB automatisch das erste Slice (das die
Bezeichnung a hat) nutzt.Wie boote ich FreeBSD und &linux; mit
BootEasy?Installieren Sie LILO am Anfang Ihrer
&linux;-Bootpartition, anstatt im Master Boot Record. Sie
können LILO dann von BootEasy
aus booten.Wenn Sie &windows; und &linux; benutzen, wird das
ohnehin empfohlen, um es einfacher zu machen, &linux; wieder
zu booten, wenn es nötig werden sollte, dass Sie
&windows; neu installieren (&windows; ist ein
eifersüchtiges Betriebssystem, das kein anderes
Betriebssystem im Master Boot Sektor duldet).Wie kann ich das ??? des
Boot-Managers durch etwas Sinnvolles ersetzen?Solange Sie den Boot-Manager nicht komplett neu
schreiben, gar nicht. Allerdings gibt es in der Kategorie
sysutils der Ports diverse
Boot-Manager, die diese Funktionalität
bieten.Ich habe ein Wechsellaufwerk. Wie benutze ich
es?Ob es sich um ein Wechsellaufwerk handelt, um ein
&iomegazip; oder ein EZ-Laufwerk (oder sogar ein
Diskettenlaufwerk, wenn Sie es auf diese Weise benutzen
möchten), oder um eine neue Festplatte - wenn es
einmal installiert und vom System erkannt ist und Sie Ihre
Kassette/Diskette/was_auch_immer eingelegt haben, ist das
Vorgehen bei allen Geräten ziemlich
ähnlich.(dieser Abschnitt basiert auf Mark
Mayo's ZIP-FAQ)Wenn es sich um ein ZIP- oder Diskettenlaufwerk
handelt, und sich bereits ein DOS-Dateisystem darauf
befindet, können Sie einen Befehl wie diesen für
eine Diskette benutzen:&prompt.root; mount -t msdos /dev/fd0c /floppyoder diesen:&prompt.root; mount -t msdos /dev/da2s4 /zipfür eine ZIP-Disk mit der
Herstellerkonfiguration.Benutzen Sie bei anderen Platten &man.fdisk.8; oder
&man.sysinstall.8;, um herauszufinden, wie sie
konfiguriert sind.Die restlichen Beispiele sind für ein
ZIP-Laufwerk unter da2,
der dritten SCSI-Platte.Wenn es sich nicht um eine Diskette oder eine
Wechselplatte handelt, die Sie mit anderen Leuten
austauschen wollen, ist es wahrscheinlich besser, ein
BSD-Dateisystem darauf zu installieren. Hierdurch
bekommen Sie Unterstützung für lange Dateinamen,
eine mindestens doppelt so hohe Leistungsausnutzung und
wesentlich höhere Stabilität. Zunächst
müssen Sie die Partitionen/Dateisysteme auf DOS-Ebene
nochmals erstellen. Sie können entweder
&man.fdisk.8; oder &man.sysinstall.8;
benutzen, oder, bei einem kleinen Laufwerk, dem Sie eine
Unterstützung für mehrere Betriebssysteme nicht
zumuten wollen, entfernen Sie einfach die komplette FAT
Partitionstabelle (Slices) und benutzen Sie einfach die
BSD-Partitionierung:&prompt.root; dd if=/dev/zero of=/dev/rda2 count=2
&prompt.root; disklabel -Brw da2 autoSie können &man.disklabel.8; oder
&man.sysinstall.8; benutzen, um mehrere
BSD-Partitionen zu erstellen. Dies werden Sie sicherlich
bei einer fest eingebauten Platte wollen, aber bei einem
Wechsellaufwerk wie einem ZIP ist das wahrscheinlich
irrelevant.Zum Schluß erstellen Sie ein neues Dateisystem -
dieses befindet sich auf unserem ZIP-Laufwerk und belegt
die gesamte Platte:&prompt.root; newfs /dev/rda2canschließend mounten Sie es:&prompt.root; mount /dev/da2c /zipUnd sicherlich ist es keine schlechte Idee, eine Zeile
ähnlich der folgenden in die Datei
/etc/fstab einzufügen, damit Sie
in Zukunft nur mount /zip einzugeben
brauchen:/dev/da2c /zip ffs rw,noauto 0 0Wieso erhalte ich die Meldung Incorrect
super block beim Mounten einer CDROM?Sie müssen &man.mount.8; mitteilen, was für
ein Gerät Sie mounten wollen. Genauere Informationen
dazu finden Sie im Kapitel Optische
Speichermedien des Handbuch, genauer gesagt im
Abschnitt Benutzung
von Daten-CDs.Wieso erhalte ich die Meldung Device not
configured, wenn ich eine CDROM
mounte?Das bedeutet im allgemeinen, dass sich keine
CDROM im Laufwerk befindet, oder, dass das Laufwerk
auf dem Bus nicht sichtbar ist. Dieses Problem wird im
Kapitel Benutzung
von Daten-CDs des Handbuchs ausführlich
diskutiert.Wieso werden alle Sonderzeichen in den Dateinamen auf
meinen CDs durch ? ersetzt, wenn ich die CD
unter FreeBSD benutze?Wahrscheinlich werden auf der CDROM die
Joliet Erweiterungen für die
Speicherung von Datei- und Verzeichnisnamen benutzt.
Werfen Sie einen Blick in das Kapitel Erzeugung von
CD-ROMs im Handbuch, speziell in den Abschnitt
über Benutzung
von Daten-CDs.[Anmerkung des Übersetzers: Es geht hier nicht um
die deutschen Sonderzeichen, da diese schon im normalen
ISO8859-1 enthalten sind. Die Probleme treten auf, wenn
man z.B. russische CDs (ISO8859-5) verwendet.]Ich habe eine CD mit FreeBSD gebrannt und kann sie
nicht mit anderen Betriebssystemen lesen. Warum?Sie haben wahrscheinlichste eine Datei direkt auf CD
geschrieben, statt ein ISO 9660-Dateisystem erzeugt zu
haben. Werfen Sie einen Blick in das Kapitel Erzeugung von
CD-ROMs im Handbuch, speziell in den Abschnitt
über reine
Daten-CDs.Wie kann ich ein Image einer Daten-CD erzeugen?Diese Information finden Sie im Abschnitt Kopieren
von CD-ROMs des Handbuchs. Weitere Informationen
über die Arbeit mit CD-ROMs finden Sie im Abschnitt
Erzeugen von
CD-ROMs im Kapitel Speichermedien des
Handbuchs.Wieso kommt mount nicht meiner
Audio-CD zurecht?Wenn Sie versuchen sollten, eine Audio-CD zu mounten,
erhalten Sie die Meldung cd9660: /dev/acd0c:
Invalid argument. Der Grund dafür ist,
dass mount nur für
Dateisysteme vorgehen ist. Audio CDs habe kein
Dateisystem, sondern nur Daten. Wenn Sie eine Audio CD
auslesen wollen, brauchen Sie ein entsprechendes Programm
wie z.B. audio/xmcd
aus den Ports.Wie nutze ich mount für eine
Multi-Session CD?Standardmäßig benutzt &man.mount.8; den
letzten (aktuellsten) Daten-Track der CD. Wenn Sie eine
ältere Session benutzen wollen, müssen Sie diese
mit der Option definieren. Weitere
Informationen finden Sie in der Onlinehilfe zu
&man.mount.cd9660.8;Wie lasse ich normale Benutzer Disketten, CDROMs und
andere Wechseldatenträger mounten?Normale Benutzer können dazu berechtigt werden,
Geräte zu mounten. Das geht so:Setzen Sie als root die
sysctl-Variable vfs.usermount auf
1:&prompt.root; sysctl -w vfs.usermount=1Ordnen Sie als root den
Block-Geräten, die den Wechsellaufwerken
zugeordnet sind, die entsprechenden Zugriffsrechte
zu.Wenn Sie zum Beispiel den Benutzer den Zugriff auf
das erste Diskettenlaufwerk zu erlauben
wollen:&prompt.root; chmod 666 /dev/fd0Um den Mitgliedern der Gruppe
operator den Zugriff auf das
CDROM zu gestatten:&prompt.root; chgrp operator /dev/acd0c
&prompt.root; chmod 640 /dev/acd0cSie müssen
zusätzlich /etc/devfs.conf
anpassen, weil diese Einstellungen ansonsten beim
Systemneustart verloren gehen.Damit normale Benutzer beispielsweise das erste
Diskettenlaufwerk mounten können, fügen Sie
als root folgende Zeilen in
/etc/devfs.conf ein:# Allen Benutzern erlauben, das erste Diskettenlaufwerk zu mounten.
own /dev/fd0 root:operator
perm /dev/fd0 0666Damit alle Mitglieder der Gruppe
operator das CD-ROM-Laufwerk
mounten können, die folgenden Zeilen:# Alle Mitglieder der Gruppe operator dürfen CD-ROMs mounten.
own /dev/acd0 root:operator
perm /dev/acd0 0660Fügen Sie zum Abschluss die Zeile
vfs.usermount=1
in die Datei /etc/sysctl.conf
ein, damit die Einstellung bei einem Neustart des
Systems automatisch erhalten bleibt.Alle Benutzer können nun
/dev/fd0 auf ein Verzeichnis, das
ihnen gehört, mounten:&prompt.user; mkdir ~/my-mount-point
&prompt.user; mount -t msdos /dev/fd0 ~/my-mount-pointDie zur Gruppe operator
gehörenden Benutzer können nun
/dev/acd0c auf ein Verzeichnis, das
ihnen gehört, mounten:&prompt.user; mkdir ~/my-mount-point
&prompt.user; mount -t cd9660 /dev/acd0c ~/my-mount-pointDas Unmounten des Gerätes ist simpel:&prompt.user; umount ~/my-mount-pointDie Aktivierung von vfs.usermount
hat jedoch negative Auswirkungen auf Sicherheitsaspekte.
Ein besserer Weg, um auf &ms-dos;-formatierte
Datenträger zuzugreifen, ist die Benutzung des
Packages
emulators/mtools.Denken Sie daran, dass Sie die Gerätenamen in
diesen Beispielen an Ihre Konfiguration anpassen
müssen.Wieso geben die Befehle du und
df unterschiedliche Werte für den
freien Plattenplatz aus?Der Grund ist die Funktionsweise von
du und df.
du geht durch einen Dateibaum,
ermittelt die Größe jeder einzelnen Datei, und
gibt die Summe aus. df fragt lediglich
das Dateisystem wie viel Platz noch frei ist. Das
scheint zwar auf den ersten Blick sehr ähnlich zu
sein; allerdings wird sich ein leeres Verzeichnis auf die
Ausgabe von df auswirken, während
es auf das Ergebnis von du keinen
Einfluss hat.Wenn Sie eine Datei löschen, während sie von
einem Programm genutzt wird, wird diese Datei erst
gelöscht, wenn sie vom Programm freigegeben wird.
Allerdings wird die Datei sofort aus dem Verzeichnis
entfernt. Sie können dieses Verhalten mit einem
Programm wie more sehr einfach
nachvollziehen. Dazu brauchen Sie nur eine Datei, die
groß genug ist, um die Ausgabe von
du und df zu
beeinflussen. Bei der Größe aktueller Platten
muss diese Datei schon sehr
groß sein! Wenn Sie diese Datei löschen,
während Sie sie sich in more
anzeigen lassen, hat more kein Problem.
Der Eintrag für die Datei wird lediglich aus dem
Verzeichnis entfernt, damit kein anderes Programm mehr
darauf zugreifen kann. Laut du ist die
Datei verschwunden – es hat das Verzeichnis
untersucht und die Datei nicht gefunden. Laut
df ist die Datei aber vorhanden, da sie
im Dateisystem immer noch Platz belegt. Sobald Sie
more beenden, werden die Ergebnisse von
du und df wieder
übereinstimmen.Bitte beachten Sie, dass die Freigabe des
Plattenplatzes durch die Soft Updates um bis zu 30 Sekunden
verzögert werden kann.Die oben beschriebene Situation tritt sehr häufig
auf Web-Servern auf. Viele Anwender installieren einen
FreeBSD Web-Server und vergessen die Rotation der
Logfiles, bis irgendwann die Partition
/var überläuft. Der
Administrator löscht die Datei, aber das System
beschwert sich immer noch über fehlenden
Plattenplatz. Die Datei wird erst freigegeben, wenn der
Web-Server beendet und neu gestartet wird; dadurch kann
das System den Plattenplatz freigeben. Um solche und
ähnliche Unfälle zu verhindern, sollten Sie
&man.newsyslog.8; einsetzen.Wie kann ich den Swap-Bereich
vergrößern?Im Kapitel Konfiguration und
Tuning des Handbuches gibt es einen Abschnitt
mit einer Schritt-für-Schritt Anleitung.Warum ist meine Festplatte unter &os; kleiner, als sie
laut Hersteller sein soll?Festplattenhersteller definieren ein Gigabyte als eine
Milliarde Bytes, für &os; ist ein Gigabyte hingegen
1.073.741.824 Bytes groß. Aus diesem Grund wird
für eine Platte, die laut Herstellerangaben
80 GB groß ist, während des Bootvorgangs
eine Größe von 76.319 MB angezeigt.Beachten Sie auch, dass &os; (in der Voreinstellung)
8 % des Plattenplatzes für sich
reserviert.Warum kann eine Partition zu mehr als 100% gefüllt
sein?Ein Teil jeder UFS Partition, in der Vorgabe sind das 8%,
ist für das Betriebssystem und den Benutzer
root reserviert. &man.df.1; rechnet
diesen Teil bei der Ausgabe der Capacity
Spalte nicht ein, so dass dort Werte über 100%
angezeigt werden können. Die Anzahl der Blöcke in
der blocks Spalte ist ebenfalls um 8%
größer als die Summe der benutzten und
verfügbaren Blöcke (die Spalten
Used und Avail).Wie viel Platz reserviert wird, können Sie mit der
Option von &man.tunefs.8; einstellen.SystemadministrationWo befinden sich die Konfigurationsdateien für
den Systemstart?/etc/defaults/rc.conf (siehe
&man.rc.conf.5;) ist die primäre Konfigurationsdatei.
Die Startskripten des Systems, wie /etc/rc
und /etc/rc.d (siehe &man.rc.8;)
inkludieren diese Datei.
Ändern Sie diese Datei nicht!
Wenn Sie den Wert einer der in
/etc/defaults/rc.conf gesetzten
Variablen ändern wollen, fügen Sie die
entsprechende Zeile in die Datei
/etc/rc.conf ein und ändern
die Zeile dort.Wenn Sie zum Beispiel den mitgelieferten DNS-Server
&man.named.8 aktivieren wollen, müssen Sie lediglich
das folgende Kommando eingeben:&prompt.root; echo named_enable="YES" >> /etc/rc.confWenn Sie lokale Server starten wollen, müssen
Sie passende Shellskripten im Verzeichnis
/usr/local/etc/rc.d/ ablegen. Die
Dateien müssen als ausführbar markiert sein und
die Dateiberechtigungen 555 besitzen.Wie kann ich am Einfachsten einen Benutzer
hinzufügen?Benutzen Sie den Befehl &man.adduser.8; und für
kompliziertere Fälle den Befehl &man.pw.8;.Benutzen Sie den Befehl &man.rmuser.8;, um einen
Benutzer wieder zu löschen. Sie können, wenn
nötig. auch &man.pw.8; benutzen.Warum erhalte ich Meldungen wie root: not
found, nachdem ich meine
crontab geändert habe?Die übliche Ursache dieses Problems ist,
dass Sie die crontab des Systems
(/etc/crontab) geändert und dann
mit &man.crontab.1; installiert haben:&prompt.root; crontab /etc/crontabDiese Vorgehensweise ist falsch. Die crontab des
Systems hat ein anderes Format als die crontabs für
die einzelnen Benutzer, die mit &man.crontab.1;
aktualisiert werden (genauere Informationen über die
Unterschiede erhalten Sie in &man.crontab.5;).Wenn Sie so vorgegangen sind, ist die zweite crontab
einfach nur eine Kopie von
/etc/crontab, allerdings im falschen
Format. Löschen Sie sie mit dem folgenden
Befehl:&prompt.root; crontab -rWenn Sie /etc/crontab wieder
ändern müssen, sollten Sie einfach gar nichts
tun, um &man.cron.8; über die Änderung zu
informieren, er erkennt die Änderung
automatisch.Wenn Sie ein Kommando jeden Tag, jede Woche oder jeden
Monat ausführen lassen wollen, ist es wahrscheinlich
einfacher, wenn Sie entsprechende Shell-Scripte in
/usr/local/etc/periodic ablegen.
Diese werden dann von &man.periodic.8; zusammen mit den
anderen regelmäßigen cron
Tätigkeiten ausgeführt.Der eigentliche Grund für den Fehler ist die
Tatsache, dass die crontab des Systems ein
zusätzliches Feld enthält; dieses Feld gibt an,
mit welcher Benutzerkennung der Befehl ausgeführt
werden soll. In der mitgelieferten crontab ist das bei
allen Einträgen die Benutzerkennung
root. Wenn diese Datei als die
crontab des Benutzers username (die
nicht mit der crontab des Systems
identisch ist) verwendet wird, hält &man.cron.8; die
Zeichenkette root für den Namen
des zu startenden Programmes, aber dieses Programm gibt es
nicht.Wieso meldet mir &man.su.1; you are not in
the correct group to su root, wenn ich mit
suroot werden will?Das ist ein Sicherheits-Feature. Wenn Sie mit
su zum Account root (oder
jedem anderen Account mit Super-User-Privilegien) wechseln
wollen, müssen Sie ein Mitglied der Gruppe
wheel sein. Wenn es dieses Feature
nicht gäbe, könnte jeder, der einen Account auf
dem System hat und zufällig das Passwort
für root erfährt, mit
Super-User-Rechten auf das System zugreifen. Durch dieses
Feature ist die Lage anders, wenn Sie nicht Mitglied von
wheel sind, können Sie nicht
einmal versuchen, dass Passwort
einzugeben.Um einem Benutzer zu erlauben, mit suroot zu werden, müssen Sie ihn
nur in die Gruppe wheel
eintragen.Ich habe einen Fehler in der
rc.conf oder einer der anderen
Dateien für den Systemstart und jetzt kann ich sie
nicht ändern, weil das Dateisystem
read-only ist. Was kann ich tun?Starten Sie das System mittels boot -s
- an der Loader-Eingabeaufforderung neu, um in den Single User
- Modus zu gelangen. Wenn Sie aufgefordert werden, den Pfadnamen
+ an der Loader-Eingabeaufforderung neu, um in den Single-User-Modus
+ zu gelangen. Wenn Sie aufgefordert werden, den Pfadnamen
der Shell einzugeben, drücken Sie einfach
Enter. Geben Sie danach mount -urw
/ ein, um das Root-Dateisystem im
Schreib/Lese-Modus zu mounten. Sie werden wahrscheinlich
auch mount -a -t ufs ausführen
müssen, um das Dateisystem mit Ihrem Lieblingseditor
zu mounten. Wenn Ihr Lieblingseditor auf einem
Netzwerklaufwerk liegt, müssen Sie entweder das
Netzwerk von Hand konfigurieren oder einen Editor
benutzen, der auf einem lokalen Laufwerk vorhanden ist,
z.B. &man.ed.1;.Wenn Sie einen bildschirmorientierten Editor wie zum
Beispiel &man.vi.1; oder &man.emacs.1; benutzen wollen,
werden Sie auch den Befehl export
TERM=cons25 ausführen müssen, damit
diese Editoren die richtigen Einstellungen aus der
Datenbank &man.termcap.5; übernehmen.Sobald Sie diese Schritte ausgeführt, können
Sie den Fehler in der /etc/rc.conf
ganz normal beheben. Die Fehlermeldungen, die Ihnen
unmittelbar nach den Startmeldungen des Kernels angezeigt
wurden, sollten Ihnen die Nummer der Zeile mit dem Fehler
melden.Wieso habe ich habe Probleme, meinen Drucker
einzurichten?Lesen sie den Handbucheintrag über
Drucker. Es sollte die meisten Ihrer Probleme
behandeln.Einige Drucker benötigen einen auf dem Rechner
laufenden Treiber, um drucken zu können. Diese
so genannten WinPrinter oder
GDI-Drucker werden von &os; nicht
unterstützt und an diesem Zustand wird sich wohl auch
nichts ändern. Wenn Ihr Drucker nicht unter DOS oder
&windows; verwendet werden kann, handelt es sich um
einen WinPrinter und wird in der Regel auch
nicht unter FreeBSD funktionieren. Ihre einzige Chance,
einen dieser Drucker benutzen können, ist der Port
ports/print/pnm2ppa.Wie kann ich die Tastaturbelegung meines Systems
korrigieren?Informationen dazu finden Sie im Kapitel länderspezifische
Einstellungen des Handbuchs, insbesondere im
Abschnitt Konfiguration
der Konsole.Wieso erhalte ich beim Start des Systems Meldungen wie
unknown: <PNP0303> can't assign
resources?Die nachfolgende Erklärung stammt aus einer Mail
auf der Mailingliste &a.current;.
&a.wollman;, 24 April 2001Die Geräte, für die can't assign
resources-Meldungen ausgegeben werden, sind
Legacy ISAGeräte, für die ein nicht
PNP-fähiger Treiber in den Kernel eingebunden
wurde. Dabei handelt es sich um Geräte wie den
Tastaturkontroller, den programmierbaren
Interrupt-Kontroller und diverse andere
Standardkomponenten. Die Ressourcen können nicht
zugewiesen werden, weil es schon einen Treiber gibt, der
diese Ressourcen benutzt.
Wieso funktionieren die Benutzer-Quotas nicht
richtig?Es kann sein, dass Ihr Kernel nicht für den
Einsatz von Quotas konfiguriert ist. Damit Sie mit
Quotas arbeiten können, müssen Sie folgende
Zeile in Ihre Kernelkonfigurationsdatei aufnehmen und
den Kernel neu bauen:options QUOTAWeitere Informationen zum Einsatz von Quotas
finden Sie im entsprechenden
Abschnitt
des Handbuchs.Benutzen Sie keine Quotas für
/.Erstellen Sie die Quotas-Datei in dem Dateisystem,
für das die Quotas gelten sollen, z.B.:FilesystemQuota file/usr/usr/admin/quotas/home/home/admin/quotas……Unterstützt FreeBSD IPC-Grundfunktionen von
System V?Ja, FreeBSD unterstützt IPC im Stil von System V
einschließlich gemeinsamen Speicher, Nachrichten und
Semaphoren bereits mit dem
GENERIC-Kernel. Wenn Sie einen
angepassten Kernel verwenden, müssen Sie die folgenden
Zeilen in Ihre Kernelkonfigurationsdatei einfügen:
options SYSVSHM
options SYSVSHM # enable shared memory
options SYSVSEM # enable for semaphores
options SYSVMSG # enable for messaging
Danach kompilieren und installieren Sie den neuen
Kernel.Welchen Mail-Server kann ich an Stelle von
sendmail benutzen?sendmail
ist zwar der Mail-Server, der bei FreeBSD
standardmäßig installiert wird, aber Sie
können Ihn problemlos durch einen anderen MTA (z.B.
aus den Ports) ersetzen.In der Port-Sammlung gibt es bereits viele
verschiedene MTAs, mail/exim,
mail/postfix,
mail/qmail, sowie
mail/zmailer
sind einige der beliebteren Alternativen.Konkurrenz belebt das Geschäft und die Tatsache,
dass Sie die Qual der Wahl haben, ist ein Vorteil.
Daher sollten Sie Fragen wie Ist sendmail
besser als qmail? besser nicht
auf den Mailinglisten stellen. Wenn Sie dieses Thema interessiert,
sollten sie zunächst die Archive durchsehen. Die Vorteile und
Nachteile jedes einzelnen der verfügbaren MTAs sind
schon mehrere Male bis zur Erschöpfung diskutiert
worden.Was kann ich machen, wenn ich das Rootpasswort
vergessen habe?Keine Panik! Starten Sie Ihr System neu und
geben Sie boot -s an der
Eingabeaufforderung Boot: ein, um in den
- Einzelbenutzermodus zu gelangen. Bei der Frage danach,
+ Single-User-Modus zu gelangen. Bei der Frage danach,
welche Shell benutzt werden soll, drücken Sie einfach
Enter. Nun erscheint die Eingabeaufforderung
&prompt.root;. Geben Sie mount -urw /
ein, um Ihr Root-Dateisystem für Lese- und
Schreibzugriffe zu remounten und dann mount
-a, um alle Dateisysteme zu remounten. Mit
passwd root können Sie das
Rootpasswort ändern und mit &man.exit.1;
können Sie mit dem Booten fortfahren.Wenn Sie immer noch dazu aufgefordert werden, das
root Passwort beim Betreten des
- Einzelbenutzermodus einzugeben, bedeutet das, dass die Konsole
+ Single-User-Modus einzugeben, bedeutet das, dass die Konsole
als insecure in
/etc/ttys markiert wurde. In diesem Fall
ist es notwendig, von einem &os; Installationsmedium zu booten,
die Fixit-Shell auszuwählen und
die oben beschriebenen Befehle einzugeben.
- Wenn Sie ihre root Partition im Einzelbenutzermodus
+ Wenn Sie ihre root Partition im Single-User-Modus
nicht mounten können, liegt es möglicherweise
daran, dass die Partionen verschlüsselt sind und es
damit unmöglich ist, sie ohne die
dazugehörigen Schlüssel zu mounten. Ihre
Chancen hängen von der jeweiligen Implementierung
ab. Für weitere Informationen lesen Sie den
Abschnittt über verschlüsselte Partitionen im
&os; Handbuch.Wie verhindere ich, dass das System mit
CtrlAltDelete
rebootet werden kann?Falls Sie &man.syscons.4; (der Standard-Treiber für die
Konsole) benutzen, fügen Sie folgende Zeile in Ihre
Kernelkonfigurationsdatei ein:options SC_DISABLE_REBOOTAlternativ können Sie auch die folgende
&man.sysctl.8;-Variable setzen (die aktiviert wird, ohne dass Sie
Ihr System dazu neu starten oder einen angepassten Kernel
erstellen müssen):&prompt.root; sysctl hw.syscons.kbd_reboot=0Falls Sie den &man.pcvt.4; Konsolentreiber verwenden, fügen
Sie die folgende Zeile in die Kernelkonfigurationsdatei hinzu und
bauen Sie einen neuen Kernel:options PCVT_CTRL_ALT_DELWie kann ich Textdateien von DOS Systemen auf &unix;
Systemen verwenden?Benutzen Sie diesen Perl-Befehl:&prompt.user; perl -i.bak -npe 's/\r\n/\n/g' file(s)Wobei file(s) eine oder mehrere
zu verarbeitende(n) Datei(en) ist/sind. Die Änderungen
erfolgen in der Originaldatei, die zuvor mit der Erweiterung
.bak gesichert wird.Alternativ können Sie den Befehl &man.tr.1;
benutzen:&prompt.user; tr -d '\r' < dos-text-file > unix-filedos-text-file ist die
Datei, die den Text im DOS-Format enthält und
unix-file wird die konvertierte
Ausgabe enthalten. Diese Möglichkeit könnte
etwas schneller sein, als die Benutzung von
perl.Die Verwendung des Ports converters/dosunix aus der Ports-Sammlung
stellt eine weitere Möglichkeit dar, DOS-Textdateien neu zu
formatieren. Konsultieren Sie die Dokumentation für weitere
Informationen.Wie beende ich Prozesse namentlich?Benutzen Sie &man.killall.1;.Warum nervt &man.su.1; mich damit, dass ich nicht in der
ACL von root bin?Der Fehler stammt vom verteilten
Authentifizierungssystem Kerberos.
Das Problem ist nicht ernsthaft, aber störend. Sie
können entweder su mit der Option
benutzen, oder Kerberos deinstallieren,
wie in der nächsten Frage beschrieben.Wie deinstalliere ich
Kerberos?Um Kerberos aus dem System zu
entfernen, müssen Sie die base-Distribution
der von Ihnen benutzten RELEASE neu installieren. Wenn Sie die
CDROM besitzen, können Sie sie mounten (wir nehmen an, unter
/cdrom) und folgende Schritte
ausführen:&prompt.root; cd /cdrom/base
&prompt.root; ./install.shAlternativ können Sie mit der Option
NO_KERBEROS in der
/etc/make.conf ein make world
durchführen.Wo ist /dev/MAKEDEV hin?Ab &os; 5.X werden
Geräte automatisch von &man.devfs.8; zur Verfügung
gestellt. Die Gerätetreiber erstellen die Gerätedateien,
wenn diese benötigt werden. Das Skript
/dev/MAKEDEV wird nicht mehr
gebraucht.Wie füge ich Pseudo-Terminals zum System
hinzu?Wenn Sie viele Benutzer von telnet,
ssh, X oder screen haben,
könnte es sein, dass Ihnen die Pseudo-Terminals ausgehen.
So fügen Sie weitere hinzu:Erstellen und installieren Sie einen neuen Kernel
mit der Zeiledevice pty Nin der Konfigurationsdatei. N
steht für die Anzahl der benötigten
Pseudo-Terminals.Editieren Sie die Datei
/etc/ttys und fügen Sie
Zeilen für jeden der N
Terminals ein. Sie sollten so aussehen, wie die existierenden
Einträge, also etwa so:ttyqc none networkDie Reihenfolge der Buchstabenzuordnung lautet mit
einem regulären Ausdruck tty[pqrsPQRSlmnoLMNO][0123456789abcdefghijklmnopqrstuv].Starten Sie das System mit dem neuen Kernel
erneut, wenn Sie bereit sind.Für die Verwendung von mehr als 256 (bis zu 512)
&man.pty.4; Geräten benötigen Sie mindestens
&os; 6.3 oder neuer.Wie lade ich /etc/rc.conf und
starte /etc/rc neu, ohne zu
rebooten?
- Gehen Sie in den Einzelbenutzermodus und dann
- zurück in den Mehrbenutzermodus.
+ Gehen Sie in den Single-User-Modus und dann
+ zurück in den Multi-User-Modus.Geben Sie auf der Konsole folgendes ein:&prompt.root; shutdown now
(Hinweis: ohne -r oder -h)
&prompt.root; return
&prompt.root; exitIch wollte auf das aktuelle -STABLE
updaten, und plötzlich läuft hier ein
-BETAx,
-RC oder -PRERELEASE!
Was ist passiert?Kurze Antwort: Das ist nur ein anderer Name.
RC ist die Abkürzung für
Release Candidate. Es bedeutet, dass eine neue
Release bevorsteht. Und -PRERELEASE bedeutet
bei &os; normalerweise, dass die Sourcen zur Vorbereitung auf eine
Release eingefroren wurden (in einigen
Releases wurde -BETA anstelle von
-PRERELEASE verwendet).Ausführliche Antwort: Bei &os; gibt es zwei
Quellen für Releases. Die Major Releases wie
6.0-RELEASE und 7.0-RELEASE werden aus dem aktuellen Stand
des Hauptzweiges der Entwicklung (besser und kürzer
als -CURRENT bekannt)
erzeugt. Minor Releases wie 6.3-RELEASE oder 5.2-RELEASE
stammen aus dem aktiven -STABLE Zweig. Seit 4.3-RELEASE
gibt es es nun auch einen eigenen Zweig für jede
Release, der für die Leute gedacht ist, die ein sehr
konservativ weiterentwickeltes System benötigen (im
Normalfall also nur Updates aus dem Bereich
Sicherheit).Bevor in einem Zweig eine Release erfolgt, muss
in diesem Zweig ein bestimmter Prozess ablaufen. Ein
Teil dieses Prozesses ist der code freeze,
der Stop der Weiterentwicklung. Sobald dieser Schritt
erfolgt ist, wird der Name des Zweiges geändert, um
anzuzeigen, dass demnächst eine Release erfolgen
wird. Wenn der Zweig zum Beispiel 6.2-STABLE genannt
wurde, wird der Name in 6.3-PRERELEASE geändert, um
dies zu verdeutlichen. Weiterhin ist das ein Zeichen, dass
jetzt besonders intensiv getestet werden sollte. In
dieser Phase können Fehler im Sourcecode noch
korrigiert werden. Wenn der Sourcecode so weit
gereift ist, dass eine Release
erstellt werden kann, wird der Name in 6.3-RC
geändert, um genau dies anzuzeigen. In dieser Phase
können nur noch extrem wichtige Korrekturen
aufgenommen werden. Sobald die Release (in diesem Beispiel
6.3-RELEASE) erfolgt ist, wird der Zweig in 6.3-STABLE
umbenannt.Weitere Informationen über Versionsnummern und die
verschiedenen Entwicklungszweige enthält der Artikel
Release
Engineering.Als ich versucht habe, einen neuen Kernel zu
- installieren, ist das chflags fehlgeschlagen. Was mache
+ installieren, ist das &man.chflags.1; fehlgeschlagen. Was mache
ich jetzt?Kurze Antwort: Ihre Sicherheitseinstellung (der
- securelevel) ist wahrscheinlich größer als 0.
- Sie müssen das System neu starten und den Kernel im
- Single-User Modus installierten.
+ securelevel) ist wahrscheinlich
+ größer als 0. Sie müssen das System neu starten
+ und den Kernel im Single-User-Modus installieren.
Ausführliche Antwort: Wenn die
Sicherheitseinstellung größer als 0 ist,
erlaubt Ihnen FreeBSD nicht, die Systemflags zu
ändern. Um den aktuellen Securelevel zu ermitteln,
können Sie das folgende Kommando benutzen:&prompt.root; sysctl kern.securelevelSie können die Sicherheitseinstellung nicht
- verringern, Sie müssen das System neu starten und den
- Kernel im Single-User Mode installieren oder die
+ verringern. Sie müssen das System neu starten und den
+ Kernel im Single-User-Modus installieren oder die
Sicherheitseinstellung in
/etc/rc.conf ändern und dann das
- System neu starten. Weitere Detail zur
- Sicherheitseinstellung erhalten Sie in &man.init.8;,
+ System neu starten. Weitere Details zu
+ securelevel erhalten Sie in &man.init.8;,
weitere Informationen zur rc.conf erhalten Sie in
/etc/defaults/rc.conf und
&man.rc.conf.5;.Ich kann die Systemzeit nicht um mehr als eine Sekunde
verstellen. Was mache ich jetzt?Kurze Antwort: Ihre Sicherheitseinstellung (der
- securelevel) ist wahrscheinlich größer als 1.
- Sie müssen das System neu starten und die Systemzeit
- im Single-User Modus verstellen.
+ securelevel) ist wahrscheinlich
+ größer als 1. Sie müssen das System neu starten
+ und die Systemzeit im Single-User-Modus verstellen.
Ausführliche Antwort: Wenn die
Sicherheitseinstellung größer als 1 ist,
erlaubt Ihnen FreeBSD nicht, die Systemzeit zu
ändern. Um den aktuellen Securelevel zu ermitteln,
können Sie das folgende Kommando benutzen:&prompt.root; sysctl kern.securelevelSie können die Sicherheitseinstellung nicht
verringern, Sie müssen das System neu starten und die
- Systemzeit im Single-User Mode ändern oder die
+ Systemzeit im Single-User-Modus ändern oder die
Sicherheitseinstellung in
/etc/rc.conf ändern und dann das
- System neu starten. Weitere Detail zur
- Sicherheitseinstellung erhalten Sie in &man.init.8;,
- weitere Informationen zur rc.conf erhalten Sie in
- /etc/defaults/rc.conf und
+ System neu starten. Weitere Details zu
+ securelevel erhalten Sie in &man.init.8;,
+ weitere Informationen zur rc.conf erhalten Sie
+ in /etc/defaults/rc.conf und
&man.rc.conf.5;.
- Warum braucht &man.rpc.statd.8; 256 MByte
+ Warum braucht &man.rpc.statd.8; 256 MB
Speicher?Nein, das Programm hat keinen Fehler und es verbraucht
- auch nicht 256 MByte Speicher. rpc.statd
+ auch nicht 256 MB Speicher. rpc.statd
projiziert nur einen übertrieben großen
Speicherbereich in seinen eigenen Adressraum.
Von einem rein technischen Standpunkt aus
ist das nichts verwerfliches, allerdings verwirrt es
Programme wie &man.top.1; und &man.ps.1;.&man.rpc.statd.8; projiziert seine Statusdatei (die in
/var liegt) in seinen
Adressraum. Um die Probleme zu vermeiden, die bei
einer Vergrößerung dieser Projektion entstehen
könnten, wird gleich ein möglichst großer
Speicherbereich benutzt. Dies kann man sehr schön im
Sourcecode sehen: Die Längenangabe beim Aufruf von
&man.mmap.2; ist 0x10000000, ein
- sechzehntel des Adressraums bei IA32, oder genau 256
- MByte.
+ sechzehntel des Adressraums bei IA32, oder genau
+ 256 MByte.
Warum kann ich das Dateiattribut
schg nicht löschen?Sie betreiben Ihr System mit einer erhöhten
Sicherheitsstufe. Senken Sie die Sicherheitsstufe und
versuchen Sie es dann noch einmal. Weitere Informationen
erhalten Sie im FAQ Eintrag
über Sicherheitsstufen und in der Online-Hilfe
&man.init.8;.Warum funktioniert die .shosts
- Authentifizierung von SSH in neueren Version von FreeBSD
- nicht mehr?
+ Authentifizierung von SSH in neueren
+ Versionen von &os; nicht mehr?
Die .shosts
Authentifizierung funktioniert nicht mehr, weil
- &man.ssh.1; in neueren Versionen von FreeBSD nicht mehr
+ &man.ssh.1; in neueren Versionen von &os; nicht mehr
SUID-root installiert wird. Um dieses
Problem zu lösen, gibt es die folgenden
Möglichkeiten:Um das Problem für immer zu lösen,
müssen Sie in /etc/make.conf
die Variable ENABLE_SUID_SSH auf
- true setzen und ssh neu
- übersetzen (oder make world
- ausführen.
+ true setzen und danach &man.ssh.1; neu
+ übersetzen (oder make
+ world) ausführen.
Übergangsweise können Sie auch die
Dateirechte von /usr/bin/ssh auf
4555 setzen, indem Sie den Befehl
chmod 4555 /usr/bin/ssh als
root ausführen. Fügen
- Sie anschließend ENABLE_SUID_SSH=
- true in die Datei
- /etc/make.conf ein, damit diese
- Änderung erhalten bleibt, wenn Sie das
- nächste Mal make world
+ Sie anschließend
+ ENABLE_SUID_SSH =true in
+ die Datei /etc/make.conf ein, damit diese
+ Änderung erhalten bleibt, wenn Sie das nächste Mal
+ make world
ausführen.Was ist vnlru?vnlru schreibt vnodes auf Platte
und gibt sie wieder frei, falls das System die Grenzwert
kern.maxvnodes erreicht. Dieser Thread
des Kernel tut meistens gar nichts und wird nur aktiv,
wenn Sie extrem viel RAM haben und gleichzeitig auf viele
zehntausende kleine Dateien zugreifen.Was bedeuten die Zustände, die
top für Speicherseiten ausgibt?Speicherseiten werden vom Kernel in
verschiedenen Listen verwaltet:Active: Seiten, die vor
Kurzem benutzt wurden.Inactive: Seiten, die
länger nicht benutzt wurden.Cache: Meistens
Seiten, die vorher im Zustand Inactive
waren und noch gültige Daten enthalten. Diese
Seiten können sofort in ihrem alten Kontext oder
in einem neuen Kontext verwendet werden. Wenn eine
Seite unverändert
(clean) ist, kann
ein Zustandswechsel direkt von Active
nach Cache erfolgen.
Ob dieser Zustandswechsel möglich ist, wird durch
die Seitenersetzungsstrategie bestimmt, die der
Entwickler des VM-Systems festgelegt hat.Free: Seiten, die
keine Daten enthalten. Diese Seiten können
sofort benutzt werden, wenn Seiten im Zustand
Cache nicht benutzt werden
können. Seiten im Zustand Free
können auch während eines Interrupts
angefordert werden.Wired: Seiten, die
fest im Speicher liegen und nicht ausgelagert werden
können. Normalerweise werden solche Seiten vom
Kernel benutzt, manchmal werden Sie aber auch für
spezielle Zwecke von Prozessen verwendet.Seiten im Zustand Inactive
werden oft auf Plattenspeicher geschrieben (sozusagen
ein sync des VM-Systems). Wenn
die CPU erkennen kann, das eine Seite unmodifiziert
(clean) ist, kann
auch eine Active-Seite auf den
Plattenspeicher ausgeschrieben werden. In bestimmten
Situationen ist es von Vorteil, wenn ein Block von
VM-Seiten, unabhängig von seinem Zustand,
ausgeschrieben werden kann. Die
Inactive-Liste enthält wenig
benutzte Seiten, die ausgeschrieben werden könnten.
Seiten im Zustand Cached sind
schon ausgeschrieben und stehen Prozessen für
die Verwendung im alten oder in einem neuen Kontext
zur Verfügung. Seiten im Zustand
Cache sind nicht ausreichend
geschützt und können während Unterbrechungen
nicht benutzt werden.Die eben beschriebene Behandlung von Speicherseiten
kann durch weitere Zustände (wie das
das Busy-Flag) verändert werden.Wie viel freien Speicher hat mein System?Es gibt verschiedene Arten von freiem
Speicher. Eine Art ist die Speichermenge,
die sofort, ohne etwas auszulagern, zur Verfügung
steht. Der gesamte VM-Bereich
ist eine weitere Art des freien Speichers.
Die Betrachtung ist komplex, hängt aber von
der Größe des Swap-Bereichs und der
Größe des Arbeitsspeichers ab. Es gibt
weitere Definitionen für freien Speicher,
die aber alle relativ nutzlos sind. Wichtig ist
hingegen, dass wenig Seiten ausgelagert
werden (paging) und der
Swap-Bereich ausreichend groß ist.Ich kann /var/empty nicht
löschen!Das Verzeichnis /var/empty
wird von &man.sshd.8; benötigt, wenn es mit
Privilege Separation läuft.
Das Verzeichnis /var/empty ist
leer, gehört root und
ist durch das Dateiattribut schg
geschützt.Wir empfehlen Ihnen, das Verzeichnis zu belassen.
Sollten Sie es aber trotzdem löschen wollen,
müssen Sie zuerst das schg-Attribut
entfernen. Schauen Sie sich dazu die Hilfeseite
&man.chflags.1; an und beachten Sie die Antwort auf
die Frage wie das
schg-Attribut entfernt wird.Das X Window System und virtuelle KonsolenWas ist das X Window System?Das X Window System (oder auch nur X11)
ist das am häufigsten verwendete
Window System für &unix;- und &unix;-ähnliche Systeme,
zu denen auch &os; gehört.
Der X
Protokollstandard wird von der
X.org Foundation definiert
und liegt aktuell in Version 11 Release &xorg.version; vor und wird
häufig auch nur als X11 bezeichnet.Das X Window System wurde für viele verschiedene
Architekturen und Betriebssysteme implementiert. Eine
serverseitige Implementierung wird dabei als
X-Server bezeichnet.Welche X-Implementierungen sind für &os;
verfügbar?Früher war &xfree86;, die X-Implementierung des
XFree86
Projects, Inc., der Standard unter &os;. Dieser
X-Server wurde bis einschließlich &os;
Version 4.10 und 5.2 als Standard-X-Server installiert.
Die von &xorg; veröffentlichte Implementierung diente
nur als Referenzplattform, weil der verwendete Code
über die Jahre sehr ineffizient geworden war.Anfang 2004 verließen einige Entwickler das
XFree86 Project, um fortan &xorg; direkt zu
unterstützen. Der Grund dafür waren
Meinungsverschiedenheiten über die Geschwindigkeit
der Weiterentwicklung, die zukünftige Ausrichtung des
Projekts sowie persönliche Differenzen. Zur gleichen
Zeit aktualisierte &xorg; ihren Quellcodebaum auf die
&xfree86;-Version 4.3.99.903,
brachte viele Änderungen, die bisher getrennt verwaltet
worden waren, in das Projekt ein und veröffentlichte
das Paket als X11R6.7.0, bevor
&xfree86; die Lizenz änderte. Ein separates, aber
mit &xorg; verbundenes Projekt,
freedesktop.org
(oder fd.o), arbeitet an einer
Überarbeitung des ursprünglichen &xfree86;-Codes,
um einerseits mehr Rechenarbeit an die Grafikkarten zu
übertragen (mit dem Ziel einer deutlich erhöhten
Geschwindigkeit) und andererseits den Code zu modularisieren
(mit dem Ziel einer verbesserten Wartung, einer schnelleren
Entwicklung sowie einer vereinfachten Konfiguration). &xorg;
- plant, die Weiterentwicklungen von freedesktop.org in seine
+ plant, die Weiterentwicklungen von
+ freedesktop.org in seine
zukünftigen Versionen zu integrieren.Seit Juli 2004 ist &xorg; der Standard-X-Server für
- &os;. Die &xfree86;-Ports
- (x11/XFree86-4)
- sind aber weiterhin über die Ports-Sammlung
- verfügbar.
+ &os;. Seitdem ist &xorg; in &os; als Standard-X11
+ implementiert.
Weitere Informationen zum X Window System finden Sie im
X11-Kapitel des
FreeBSD-Handbuchs.
-
-
- Der vorletzte Absatz beschreibt nur die
- Standardeinstellung. Es ist nach wie vor möglich,
- beide Implementierungen unter &os; zu verwenden. Lesen
- Sie dazu die Anweisungen im Eintrag vom 23.07.2004 in
- der Datei /usr/ports/UPDATING.
-
-
-
- Beachten Sie, dass es derzeit nicht möglich ist,
- Teile aus beiden Implementierungen parallel zu verwenden.
- Sie müssen sich also für eine der beiden
- Implementierungen entscheiden.
-
-
-
-
-
-
-
- Funktionieren meine Programme auch mit der
- &xorg;-Implementierung noch?
-
-
-
- Der &xorg;-Server basiert auf der gleichen
- X11R6-Spezifikation, die auch &xfree86; verwendet, daher
- sollte ein Großteil der Anwendungen problemlos
- funktionieren. Einige selten verwendete Protokolle werden
- allerdings nicht mehr unterstützt
- (XIE, PEX, sowie
- lbxproxy). Die beiden ersten Protokolle
- wurden allerdings auch vom &xfree86;-Port nicht
- unterstützt.Warum hat sich das X Project überhaupt
aufgespalten?Diese Frage ist nicht &os;-spezifisch. Es gibt zu
diesem Thema umfangreiche Postings in diversen
Mailinglist-Archiven. Suchen Sie daher über eine
Suchmaschine danach, statt diese Frage auf einer
&os;-Mailingliste zu stellen.Warum hat sich &os; für &xorg; als Standard-X-Server
entschieden?
- Die Entwickler von &xorg; geben an, dass sie neue
+ Die Entwickler von &xorg; gaben an, dass sie neue
Versionen rascher veröffentlichen und neue Eigenschaften
schneller implementieren wollen. Außerdem verwenden
sie nach wie vor die traditionelle X-Lizenz, während
- &xfree86; nun eine veränderte Version benutzt.
-
-
- Diese Entscheidung wird nach wie vor heftig
- diskutiert. Nur die Zeit wird zeigen, welche
- Implementierung technisch überlegen ist. Jeder
- &os;-Benutzer hat aber die freie Wahl zwischen den
- beiden Implementierungen.
-
+ &xfree86; eine veränderte Version benutzt.Ich möchte X benutzen, was muss ich
tun?Wenn Sie X auf einem existierenden System installieren
- wollen, sollten Sie den Meta-Port
+ wollen, sollten Sie entweder den Meta-Port
x11/xorg verwenden, der
- alle benötigen Komponenten baut und installiert.
-
- Lesen Sie danach die Dokumentation zu
- &man.xorgconfig.1;, das Sie bei der Konfiguration des
- X-Servers für Ihre Grafikkarte, Maus usw.
- unterstützt. Bevorzugen Sie eine grafische
+ alle benötigen Komponenten baut und installiert, oder
+ Sie installieren die &os; &xorg;-Pakete:
+
+ &prompt.root; pkg_add -r xorg
+
+ Es ist auch möglich, &xorg; aus &man.sysinstall.8; heraus
+ zu installieren, indem Sie Configure,
+ dann Distributions und anschliessend
+ The X.Org Distribution aufrufen.
+
+ Lesen Sie nach erfolgreicher Installation von &xorg; die
+ Anweisungen in &man.xorgconfig.1;. Es wird Sie bei der
+ Konfiguration des X-Servers für Ihre Grafikkarte, Maus usw.
+ unterstützen. Bevorzugen Sie eine grafische
Konfigurationsoberfläche, sollten Sie sich
&man.xorgcfg.1; ansehen.Weitere Informationen finden sich im Abschnitt X11 des
- FreeBSD-Handbuchs.
-
- Eventuell möchten Sie sich auch den Xaccel-Server
- ansehen. Nähere Details finden Sie im
- Abschnitt über Xi
- Graphics.
+ FreeBSD-Handbuchs.
Ich habe versucht, X zu starten,
aber wenn ich startx eingebe, erhalte
ich die Fehlermeldung KDENABIO failed
(Operation not permitted). Was soll ich jetzt
machen?Das System läuft auf einer erhöhten
- Sicherheitsstufe (securelevel).
+ Sicherheitsstufe (securelevel).
X kann auf einer erhöhten Sicherheitsstufe nicht
gestartet werden, weil X dazu Schreibzugriff auf
- /dev/io benötigt. Lesen Sie dazu
+ &man.io.4; benötigt. Lesen Sie dazu
auch &man.init.8;.Die Frage ist also eigentlich, was Sie anders machen
sollten. Sie haben zwei Möglichkeiten: Setzen Sie
die Sicherheitsstufe wieder zurück auf 0 (die
Einstellung erfolgt in der Regel in
/etc/rc.conf) oder starten Sie
&man.xdm.1; während des Starts des Systems, bevor die
Sicherheitsstufe erhöht wird.Der Abschnitt enthält
Informationen darüber, wie Sie &man.xdm.1; beim Start
des Systems starten können.Warum funktioniert meine Maus unter X nicht?
- Wenn Sie syscons (den Standard-Konsolentreiber)
- benutzen, können Sie FreeBSD so konfigurieren,
+ Wenn Sie &man.syscons.4; (den Standard-Konsolentreiber)
+ benutzen, können Sie &os; so konfigurieren,
dass auf jedem virtuellen Bildschirm ein Mauszeiger
unterstützt wird. Um Konflikte mit X zu vermeiden,
- unterstützt syscons ein virtuelles Gerät mit dem
- Namen /dev/sysmouse. Über
- dieses virtuelle Gerät können andere Programme
- alle Mausbewegungen und Mausklicks im MouseSystems-Format
- mitlesen. Falls Sie Ihre Maus auf einer oder mehreren
- virtuellen Konsolen und X
+ unterstützt &man.syscons.4; ein virtuelles Gerät mit dem
+ Namen /dev/sysmouse. Alle Mausbewegungen
+ und Mausklicks werden in das &man.sysmouse.4; Gerät über
+ &man.moused.8; geschrieben. Falls Sie Ihre Maus auf einer oder
+ mehreren virtuellen Konsolen und X
benutzen wollen, sollten Sie zunächst lesen und dann
- moused installieren.
+ &man.moused.8; installieren.Die Datei /etc/X11/xorg.conf sollte
die folgenden Einträge enthalten:Section "InputDevice"
Option "Protocol" "SysMouse"
Option "Device" "/dev/sysmouse"
.....Einige Leute ziehen es vor, unter X
/dev/mouse zu benutzen. Hierzu
sollte /dev/mouse nach
- /dev/sysmouse gelinkt werden:
+ /dev/sysmouse
+ (lesen Sie &man.sysmouse.4;) gelinkt werden, indem Sie die folgende
+ Zeile in /etc/devfs.conf (siehe auch
+ &man.devfs.conf.5;) hinzufügen:
- &prompt.root; cd /dev
-&prompt.root; rm -f mouse
-&prompt.root; ln -s sysmouse mouse
+ link sysmouse mouse
+
+ Die Verknüpfung kann durch Neustart von &man.devfs.5;
+ über das folgende Kommando (als root)
+ erzeugt werden:
+
+ &prompt.root; /etc/rc.d/devfs restartKann ich meine Rad-Maus auch unter X benutzen?Ja.Dazu müssen Sie X nur mitteilen, dass Sie eine
Maus mit 5 Tasten haben. Dazu fügen Sie die Zeilen
Buttons 5 sowie
ZAxisMapping 4 5 in den Abschnitt
InputDevice der Datei
/etc/X11/xorg.conf ein. Das
Beispiel zeigt, wie ein solcher Abschnitt aussehen
könnte.Abschnitt InputDevice für
Rad-Mäuse in der Konfigurationsdatei von
&xorg;Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
Option "Buttons" "5"
Option "ZAxisMapping" "4 5"
EndSection .emacs Beispiel für
seitenweises Blättern mit einer
Rad-Maus (optional);; wheel mouse
(global-set-key [mouse-4] 'scroll-down)
(global-set-key [mouse-5] 'scroll-up)X verbietet Verbindungen von entfernten Systemen!Aus Sicherheitsgründen verbietet der X-Server
in der Voreinstellung Verbindungen von entfernten
Systemen.Starten Sie den X-Server mit der Option
, wenn Sie Verbindungen von
entfernten Systemen erlauben wollen:&prompt.user;
startx -listen_tcp
-
-
- Wieso funktionieren Menüs und Dialoge in X nicht
- richtig?
-
-
-
- Versuchen Sie, die Num Lock-Taste
- auszustellen.
-
- Falls Ihre Num Lock-Taste beim Booten
- standardmäßig eingeschaltet ist, sollten Sie
- die folgende Zeile in den Abschnitt
- Keyboard der Datei
- /etc/X11/xorg.conf einfügen:
-
-
-# Let the server do the NumLock processing. This should only be
-# required when using pre-R6 clients
- ServerNumLock
-
-
-
-
Was ist eine virtuelle Konsole und wie erstelle ich
mehr?Mit virtuellen Konsolen können Sie mehrere
simultane Sitzungen auf einer Maschine laufen lassen, ohne
so komplizierte Dinge wie die Einrichtung eines Netzwerkes
oder die Benutzung von X zu benötigen.Wenn das System startet, wird es nach der Anzeige
aller Bootmeldungen eine Eingabeaufforderung auf dem
Bildschirm anzeigen. Sie können dann auf der ersten
virtuellen Konsole Ihren Benutzernamen und das Passwort
eingeben und anfangen, zu arbeiten (oder zu
spielen!).Gelegentlich möchten Sie möglicherweise eine
weitere Sitzung starten wollen, vielleicht, um die
Dokumentation zu einem Programm, das Sie gerade benutzen,
einzusehen, oder, um Ihre Mails zu lesen, während Sie
auf das Ende einer FTP-Übertragung warten.
Drücken Sie einfach AltF2 (halten Sie die Alt-Taste
gedrückt und drücken Sie die Taste F2)
und Sie gelangen zur Anmelde-Aufforderung auf der zweiten
virtuellen Konsole! Wenn Sie zurück
zur ersten Sitzung möchten, drücken Sie
AltF1.Die Standardinstallation von FreeBSD bietet acht
aktivierte virtuelle Konsolen. Mit
AltF1,
AltF2,
AltF3
und so weiter wechseln Sie zwischen diesen
virtuellen Konsolen.Um mehr von ihnen zu aktivieren, editieren Sie
- /etc/ttys und fügen
- Einträge für ttyv4 bis
+ /etc/ttys (siehe &man.ttys.5;) und fügen
+ Einträge für ttyv8 bis
zu ttyvc nach dem Kommentar zu
virtuellen Terminals ein:
-# Edit the existing entry for ttyv3 in /etc/ttys and change
+# Edit the existing entry for ttyv8 in /etc/ttys and change
# "off" to "on".
-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/libexec/getty Pc" cons25 on secure
ttyv9 "/usr/libexec/getty Pc" cons25 on secure
ttyva "/usr/libexec/getty Pc" cons25 on secure
ttyvb "/usr/libexec/getty Pc" cons25 on secure
Benutzen Sie so wenig oder so viele, wie Sie
möchten. Je mehr virtuelle Terminals Sie benutzen,
desto mehr Ressourcen werden gebraucht; das kann wichtig
- sein, wenn Sie 8MB RAM oder weniger besitzen. Sie
+ sein, wenn Sie 8 MB RAM oder weniger besitzen. Sie
können auch secure in
insecure ändern.Wenn Sie einen X-Server benutzen möchten,
müssen Sie mindestens ein
virtuelles Terminal unbenutzt (oder ausgeschaltet)
lassen damit der Server es benutzen kann. Das
heißt, dass Sie Pech haben, wenn Sie für
jede Ihrer 12 Alt-Funktionstasten eine
Anmeldeaufforderung haben möchten - Sie können
das nur für elf von ihnen tun, wenn Sie einen
X-Server auf derselben Maschine laufen lassen
möchten.Der einfachste Weg, eine Konsole zu deaktivieren, ist,
sie auszuschalten. Wenn Sie zum Beispiel die oben
erwähnte volle Zuordnung aller 12 Terminals
hätten, müssten Sie die Einstellung
für das virtuelle Terminal 12 von:ttyvb "/usr/libexec/getty Pc" cons25 on securein:ttyvb "/usr/libexec/getty Pc" cons25 off secureändern.Wenn Ihre Tastatur nur über zehn Funktionstasten
verfügt, bedeutet das:
ttyv9 "/usr/libexec/getty Pc" cons25 off secure
ttyva "/usr/libexec/getty Pc" cons25 off secure
ttyvb "/usr/libexec/getty Pc" cons25 off secure
(Sie können diese Zeilen auch einfach
löschen.)Die einfachste (und sauberste) Möglichkeit, die
virtuellen Konsolen zu aktivieren, ist, zu rebooten. Wenn
Sie jedoch auf keinen Fall rebooten möchten,
können Sie auch einfach das X Window System
herunterfahren und als root&prompt.root; kill -HUP 1ausführen.Es ist unbedingt erforderlich, dass Sie das X
Window System vollständig herunterfahren, falls es
läuft. Falls Sie es nicht tun, könnte es sein,
dass sich ihr System nach der Eingabe des
- kill-Befehls aufhängt.
+ kill-Befehls aufhängt.
Wie greife ich von X aus auf virtuelle Konsolen
zu?Benutzen Sie
CtrlAltFn
um auf eine virtuelle Konsole umzuschalten. Mit
CtrlAltF1
würden Sie zur ersten virtuellen Konsole
umschalten.Sobald Sie auf eine virtuelle Konsole umgeschaltet
haben, können Sie ganz normal
AltFn
benutzen, um zwischen den einzelnen virtuellen Konsolen
umzuschalten.Um zu Ihrer X-Sitzung zurückzukehren, müssen
Sie auf die virtuelle Konsole umschalten, auf der X
läuft. Wenn Sie X über der Eingabeaufforderung
gestartet haben (z.B. mit startx),
benutzt X die nächste freie virtuelle Konsole und
nicht die Konsole, von der es gestartet wurde. Wenn Sie
acht aktive virtuelle Konsole haben, dann wird X die
neunte benutzen und Sie können mit AltF9
umschalten.
- Wie starte ich XDM beim Booten?
+ Wie starte ich XDM beim
+ Booten?Es gibt zwei Denkansätze, wie
&man.xdm.1; zu starten ist. Bei dem einen wird
xdm unter Nutzung des mitgelieferten
Beispiels über /etc/ttys
(&man.ttys.5;) gestartet, während beim zweiten Ansatz
rc.local (&man.rc.8;) oder das
- Skript X.sh im Verzeichnis
+ Skript X im Verzeichnis
/usr/local/etc/rc.d verwendet wird.
Beide Ansätze sind gleichwertig und der eine
wird in Situationen funktionieren, in denen der andere es
nicht tut. In beiden Fällen ist das Ergebnis das
gleiche: X liefert eine graphische
Anmeldeaufforderung.
- Die ttys-Methode hat den Vorteil, dass
+ Die &man.ttys.5;-Methode hat den Vorteil, dass
dokumentiert ist, auf welchem vty X gestartet wird und der
- Neustart des X-Servers beim Abmelden an init
- übergeben wird. Die rc.local-Methode erleichtert ein
- Killen von xdm, falls Probleme beim Start des X-Servers
- auftreten sollten.
+ Neustart des X-Servers beim Abmelden an &man.init.8;
+ übergeben wird. Die &man.rc.8;-Methode erleichtert
+ den Aufruf von killxdm,
+ falls Probleme beim Start des X-Servers auftreten sollten.
- Beim Laden von rc.local sollte xdm
+ Beim Laden von &man.rc.8; sollte xdm
ohne irgendwelche Argumente (das heißt als Daemon)
- gestartet werden. xdm muss gestartet werden NACHDEM getty
+ gestartet werden. Das Kommando xdm muss
+ gestartet werden nachdem &man.getty.8;
läuft, andernfalls entsteht ein Konflikt zwischen
- getty und xdm und die Konsole bleibt gesperrt. Der beste
- Weg, um dies zu vermeiden, ist, das Skript für etwa
- zehn Sekunden anzuhalten und dann xdm zu starten.
+ getty und xdm und die Konsole
+ bleibt gesperrt. Der beste Weg, um dies zu vermeiden, ist, das
+ Skript für etwa zehn Sekunden anzuhalten und dann
+ xdm zu starten.Wenn Sie xdm durch einen Eintrag in
/etc/ttys starten lassen, kann es zu
einem Konflikt zwischen xdm und
&man.getty.8; kommen. Um dieses Problem zu
vermeiden, sollten Sie die Nummer des
vt in die Datei
/usr/local/lib/X11/xdm/Xservers
- eintragen.
+ eintragen:
:0 local /usr/local/bin/X vt4Diese Zeile führt dazu, dass der X Server
/dev/ttyv3 nutzt. Die beiden Zahlen
weichen voneinander ab: Der X-Server beginnt die
Zählung der vty bei 1, während der
- FreeBSD-Kernel bei 0 beginnt.
+ &os;-Kernel bei 0 beginnt.
Wieso erhalte ich die Meldung Couldn't open
- console, wenn ich xconsole benutze?
+ console, wenn ich xconsole
+ benutze?
Wenn Sie X mit
startx starten, werden die
Zugriffsrechte für
/dev/console leider
nicht geändert, was dazu
führt, dass Dinge wie xterm
-C und xconsole nicht
funktionieren.Das hängt damit zusammen, wie die Zugriffsrechte
für die Konsole standardmäßig gesetzt
sind. Auf einem Mehrbenutzersystem möchte man nicht
unbedingt, dass jeder Benutzer einfach auf die
Systemkonsole schreiben kann. Für Benutzer, die sich
auf einer Maschine direkt mit einem VTY anmelden,
existiert die Datei &man.fbtab.5;, um
derartige Probleme zu lösen.In Kürze: sorgen Sie dafür, dass sich
eine nicht auskommentierte Zeile der Form/dev/ttyv0 0600 /dev/consolein der Datei /etc/fbtab befindet.
Das sorgt dafür, dass wer auch immer sich auf
/dev/ttyv0 anmeldet, auch die Konsole
besitzt.Früher konnte ich &xfree86; als normaler User
starten. Warum sagt mir das System jetzt, dass ich
root sein muss?Alle X-Server müssen mit der ID
root laufen, um direkt auf die
Videohardware zuzugreifen. Die älteren Versionen von
&xfree86; (bis einschließlich 3.3.6) installierten
alle mitgelieferten Server so, dass sie automatisch
unter ID root ausgeführt werden
(setuid to root). Dies stellt
natürlich eine Gefahrenquelle dar, da die X-Server
große, komplexe Programme sind. Alle neueren
Versionen von &xfree86; installieren die Server aus genau
diesem Grund nicht mehr "setuid
root".Es ist natürlich nicht tragbar, den X-Server
immer mit der ID root laufen zu
lassen; auch aus Gründen der Sicherheit ist es keine
gute Idee. Es gibt zwei Möglichkeiten, um X auch als
normaler Benutzer starten zu können. Die erste ist
die Verwendung von xdm oder eines
ähnlichen Programms; die zweite ist die Benutzer von
Xwrapper.xdm ist ein ständig laufendes
Programm, mit dem Logins über eine graphische
Benutzeroberfläche sind. Es wird normalerweise beim
Systemstart initialisiert und für die
Authentifizierung der Benutzer und den Start ihrer
Sitzungen verantwortlich. Es ist also die graphische
Entsprechung von &man.getty.8; und &man.login.1;.
Weitere Informationen zum Thema xdm
finden Sie in der &xfree86;
Dokumentation und dem entsprechenden FAQ-Eintrag.Xwrapper ist eine
Hülle für den X-Server. Mit
diesem kleinen Utility ist es möglich, manuell den
X-Server zu starten und weiterhin eine annehmbare
Sicherheit zu haben. Das Tools prüft, ob die per
Kommandozeile übergebenen Argumente halbwegs sinnvoll
sind. Wenn dies der Fall ist, startet es den
entsprechenden X-Server. Wenn Sie (aus welchem Grund auch
immer) keine graphische Anmeldung wollen, ist
Xwrapper die optimale Lösung.
Wenn Sie die vollständige Ports-Sammlung installiert
haben, finden Sie das Tool im Verzeichnis
- /usr/ports/x11/wrapper.
+ x11/wrapper.
Warum funktioniert meine PS/2-Maus nicht
richtig?Ihre Maus und der Maustreiber sind etwas aus der
Synchronisation geraten.In seltenen Fällen kann es jedoch sein,
dass der Treiber fälschlicherweise
Synchronisationsprobleme meldet und Sie in den
Kernelmeldungen folgendes sehen:psmintr: out of sync (xxxx != yyyy)und Ihre Maus nicht richtig zu funktionieren
scheint.Falls das passiert, deaktivieren Sie den Code zur
Überprüfung der Synchronisation, indem Sie die
- Treiberangaben für den PS/2-Maustreiber auf 0x100
- setzen. Rufen Sie UserConfig durch
- Angabe der Option am Boot-Prompt
- auf:
+ Treiberangaben für den PS/2-Maustreiber auf
+ 0x100 setzen. Rufen Sie
+ UserConfig durch Angabe der Option
+ am Boot-Prompt auf:
boot: -cGeben sie dann in der Kommandozeile von
UserConfig folgendes ein:UserConfig> flags psm0 0x100
UserConfig> quitMeine PS/2-Maus von MouseSystems scheint nicht zu
funktionieren.Es wurde berichtet, dass einige Modelle der
PS/2-Mäuse von MouseSystems nur funktionieren, wenn
sie im hochauflösenden Modus betrieben
werden. Andernfalls springt der Mauszeiger sehr oft in
die linke obere Ecke des Bildschirms.
- Das Flag 0x04 des Maustreibers bringt die Maus
- in den hochauflösenden Modus. Rufen Sie
+ Das Flag 0x04 des Maustreibers bringt die
+ Maus in den hochauflösenden Modus. Rufen Sie
UserConfig durch Angabe der Option
am Boot-Prompt auf:boot: -cGeben sie dann in der Kommandozeile von
UserConfig folgendes ein:UserConfig> flags psm0 0x04
UserConfig> quitLesen Sie den vorigen Abschnitt über eine andere
mögliche Ursache für Probleme mit der
Maus.
-
-
- Wie kann ich einen anderen X-Server installieren?
-
-
-
- &os;-Versionen vor 5.3 verwendeten
- &xfree86; 4.X als
- Standard-X-Server. Seither wird
- &xorg; als
- Standard-X-Server verwendet. Wenn Sie einen anderen
- X-Server installieren wollen,
- müssen Sie die folgende Zeile in Ihre
- /etc/make.conf einfügen. (Existiert
- die Datei nicht, müssen Sie sie zuvor anlegen.)
-
- X_WINDOW_SYSTEM= xorg
-
- Diese Variable kann die Werte xorg,
- xfree86-4, oder
- xfree86-3 annehmen.
-
-
-
Wie vertausche ich die Maustasten?Benutzen Sie den Befehl xmodmap -e "pointer =
3 2 1" in Ihrer .xinitrc
oder .xsession.Wie installiere ich einen Splash-Screen und wo finde
ich sie?&os; erlaubt die Anzeige von
Splash-Screens während des
Bootvorganges. Die Splash-Screens dürfen
Bitmaps mit 256 Farben
(*.BMP) oder ZSoft-PCX-Dateien
*.PCX) sein. Damit sie mit normalen
VGA-Karten dargestellt werden können, darf die
Größe 320x200 Bildpunkte nicht
überschreiten. Wenn Sie in ihrem Kernel die
VESA-Unterstützung eingebunden haben, beträgt
die maximale Größe 1024x768 Pixel.
Die derzeitige VESA-Unterstützung kann entweder direkt
durch die Kernelkonfigurationsoption
VESA in den Kernel eingebunden werden,
oder durch das Laden des VESA-kld-Moduls während des
Bootens.Um einen Splash-Screen zu benutzen, müssen Sie die
Startdateien, die den Bootprozess von &os; kontrollieren,
modifizieren.Dazu müssen Sie die Datei
/boot/loader.rc erstellen, die
die folgenden Zeilen enthält:include /boot/loader.4th
startAußerdem benötigen Sie die Datei
/boot/loader.conf, die die
folgenden Zeilen enthält:splash_bmp_load="YES"
bitmap_load="YES"Dies setzt voraus, dass Sie
/boot/splash.bmp als Ihren
Splash-Screen benutzen. Wenn Sie lieber eine
PCX-Datei benutzen wollen, dann kopieren Sie sie nach
/boot/splash.pcx, erstellen Sie
eine Datei /boot/loader.rc, wie
oben beschrieben und eine Datei
/boot/loader.conf, die folgendes
enthält:splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"Alles, was Sie nun brauchen, ist ein Splash-Screen.
Hierzu können Sie durch die Galerie bei
surfen.
- Kann ich die &windows;-Tasten unter X
+ Kann ich die Windows-Tasten unter X
benutzen?Ja, Sie müssen lediglich mit &man.xmodmap.1;
festlegen, welche Aktion diese Tasten auslösen
sollen.
- Unter der Annahme, dass alle &windows;
+ Unter der Annahme, dass alle Windows
Tastaturen dem Standard entsprechen, lauten die Keycodes
für die drei Tasten
- 115 - &windows;-Taste zwischen den
- Alt- und
- Strg-Tasten auf der linken Seite
+ 115 - Windows-Taste
+ zwischen den Ctrl- und
+ Alt-Tasten auf der linken Seite
- 116 - &windows;-Taste rechts von der
- AltGr-Taste
+ 116 - Windows-Taste
+ rechts von der AltGr-Taste
- 117 - Menü-Taste, links von der
- rechten Strg-Taste
+ 117 - Menü-Taste,
+ links von der rechten Strg-TasteNach der folgenden Anweisung erzeugt die linke
- &windows;-Taste ein Komma.
+ Windows-Taste ein Komma.&prompt.root; xmodmap -e "keycode 115 = comma"Sie werden Ihren Window Manager wahrscheinlich neu
starten müssen, damit diese Einstellung wirksam
wird.
- Um die neue Belegung der &windows;-Tasten automatisch
- beim Start von X zu erhalten, könnten Sie
+ Um die neue Belegung der Windows-Tasten
+ automatisch beim Start von X zu erhalten, könnten Sie
entsprechende xmodmap Anweisungen in
ihre ~/.xinitrc einfügen. Die
bevorzugte Variante ist aber, eine Datei mit dem Namen
~/.xmodmaprc zu erzeugen, die nur die
Parameter für den Aufruf von
xmodmap enthält. Wenn Sie mehrere
Tasten umdefinieren wollen, muss jede Definition in
eine eigene Zeile gesetzt werden. Weiterhin müssen
Sie in Ihrer ~/.xinitrc noch die
folgende Zeile einfügen:xmodmap $HOME/.xmodmaprcSie könnten die drei Tasten zum Beispiel mit den
Funktionen F13, F14 und
F15 belegen. Dadurch ist es sehr
einfach, diese Tasten mit nützlichen Funktionen eines
Programmes oder Desktops zu verknüpfen.Falls Sie das auch tun wollen, sollten in Ihrer
~/.xmodmaprc die folgenden
Anweisungen stehen.
keycode 115 = F13
keycode 116 = F14
keycode 117 = F15
- Falls Sie zum Beispiel fvwm2
- benutzen, können Sie ihn so einstellen, dass
- F13 das Fenster unter dem Mauszeiger
- minimiert bzw. maximiert. F14 holt das
- Fenster unter dem Mauszeiger in den Vordergrund bzw.
+ Falls Sie zum Beispiel den x11-wm/fvwm2 Port benutzen, können
+ Sie ihn so einstellen, dass F13 das Fenster unter
+ dem Mauszeiger minimiert bzw. maximiert. F14 holt
+ das Fenster unter dem Mauszeiger in den Vordergrund bzw.
ganz nach hinten, wenn es bereits im Vordergrund ist.
F15 öffnet das Arbeitsplatz
(Programme) Menü, auch wenn der Cursor nicht auf den
Hintergrund zeigt. Dies ist extrem praktisch, wenn der
gesamte Bildschirm von Fenster belegt wird; als kleiner
Bonus gibt es sogar einen Zusammenhang zwischen dem Symbol
auf der Taste und der durchgeführten Aktion.Dieses Verhalten kann man mit den folgenden
Einträgen in der Datei ~/.fvwmrc
erhalten:
Key F13 FTIWS A Iconify
Key F14 FTIWS A RaiseLower
Key F15 A A Menu Workplace Nop
Wird 3D Hardware Beschleunigung für &opengl;
unterstützt?
- Dies hängt davon ab, welche Version von &xfree86;
- oder &xorg; und welche Grafikkarte Sie verwenden.
- Wenn Sie eine Karte mit NVIDIA-Chipsatz besitzen, benutzen
- Sie die binären Treiber für FreeBSD, die Sie auf der
-
- Drivers-Seite von NVIDIA finden.
- Wenn Sie &xfree86;-4 oder &xorg; mit Grafikkarten wie
- der Matrox G200/G400, ATI Rage 128/Radeon, oder 3dfx
- Voodoo 3, 4, 5, und Banshee einsetzen, erhalten Sie
- weitere Informationen auf der Webseite &xfree86;-4
- Direct Rendering on FreeBSD.
+ Dies hängt davon ab, welche Version von &xorg; und welche
+ Grafikkarte Sie verwenden. Wenn Sie eine Karte mit NVIDIA-Chipsatz
+ besitzen, benutzen Sie die binären Treiber für &os;,
+ indem Sie einen der folgenden Ports installieren:
+
+
+
+ Die aktuelle Version von NVIDIA-Karten wird durch den Port
+ x11/nvidia-driver
+ unterstützt.
+
+
+ NVIDIA Karten wie die GeForce2 MX/3/4 Serie wird durch
+ die 96XX Treiber unterstützt, die im x11/nvidia-driver-96xx Port
+ bereitgestellt werden.
+
+
+ Sogar ältere Karten wie die GeForce und RIVA TNT
+ sind durch die 71XX Treiberserie verfügbar, die im Port
+ x11/nvidia-driver-71xx
+ enthalten ist.
+
+
+
+ Tatsächlich liefert NVIDIA detaillierte Informationen
+ darüber, welche Karte von welchem Treiber unterstützt
+ wird. Diese Information finden Sie auf der Website von NVIDIA:
+ .
+
+ Für Matrox G200/400 sehen Sie sich den Port x11-servers/mga_hal an.
+
+ Bei ATI Rage 128 und Radeon lesen Sie die
+ Anleitungen &man.ati.4x;, &man.r128.4x; und &man.radeon.4x;.
+
+ Fü 3dfx Vodoo 3, 4, 5 und Banshee Karten gibt es einen
+ x11-servers/driglide
+ Port.NetzwerkeWoher kann ich Informationen über Diskless
Booting bekommen?Diskless Booting bedeutet, dass
die FreeBSD-Maschine über ein Netzwerk gebootet wird
und die notwendigen Dateien von einem Server anstatt von
der Festplatte liest. Vollständige Details finden
Sie im Handbucheintrag
über den plattenlosen Betrieb.Kann eine FreeBSD-Maschine als Netzwerkrouter genutzt
werden?Ja. Genaue Informationen zu diesem Thema finden Sie
im Abschnitt
Gateways und Routen des Handbuchkapitels
Weiterführende Netzwerkthemen.Kann ich meine &windows;-Maschine über FreeBSD ans
Internet anbinden?Personen, die diese Frage stellen, haben
typischerweise zwei PCs zu Hause: einen mit FreeBSD und
einen mit einer &windows;-Variante. Die Idee ist, die
FreeBSD-Maschine an das Internet anzubinden, um in der
Lage zu sein, von der &windows;-Maschine über die
FreeBSD-Maschine auf das Internet zuzugreifen. Das
ist tatsächlich nur ein Spezialfall der vorherigen
Frage.Das User-Mode &man.ppp.8; von &os; kennt die Option
. Wenn Sie &man.ppp.8; mit der Option
starten, in
/etc/rc.conf die Variable
gateway_enable auf
YES setzen und Ihre &windows;-Maschine
korrekt konfigurieren, sollte das hervorragend
funktionieren. Weitere Informationen erhalten Sie
in der Hilfeseite &man.ppp.8; oder im
Abschnitt
User-PPP des Handbuchs.Wenn Sie Kernel-Mode PPP verwenden oder ihre
Verbindung zum Internet über Ethernet erstellt
wurde, müssen Sie &man.natd.8; verwenden. Weitere
Informationen dazu finden Sie im natd-Abschnitt
des Handbuchs.Unterstützt FreeBSD SLIP und PPP?Ja. Lesen Sie die Manualpages &man.slattach.8;,
&man.sliplogin.8;, &man.pppd.8; und &man.ppp.8;.
&man.ppp.8; und &man.pppd.8; liefern Unterstützung
sowohl für eingehende, als auch ausgehende
Verbindungen. &man.sliplogin.8; behandelt
ausschließlich eingehende Verbindungen und
&man.slattach.8; behandelt ausschließlich ausgehende
Verbindungen.Diese Programme werden im Abschnitt PPP und SLIP
des Handbuchs beschrieben.Falls Sie nur durch einen Shell-Account
Zugang zum Internet haben, sehen Sie sich einmal das
Package net/slirp an.
Es kann Ihnen (eingeschränkten) Zugang zu Diensten
wie ftp und http direkt von Ihrer lokalen Maschine aus
ermöglichen.Unterstützt FreeBSD NAT oder
Masquerading?Ja. Wenn Sie NAT über eine User-PPP-Verbindung
einsetzen wollen, lesen Sie bitte den User-PPP Abschnitt
des Handbuchs. Wollen Sie NAT über eine andere
Verbindung einsetzen, lesen Sie bitte den
NATD-Abschnitt
des Handbuchs.Wie verbinde ich zwei FreeBSD-Maschinen mit PLIP
über die parallele Schnittstelle?Dieses Thema wird im Handbuch-Kapitel PLIP
behandelt.
-
-
- Wieso kann ich das Gerät
- /dev/ed0 nicht erstellen?
-
-
-
- Weil das nicht notwendig ist. Bei Berkeley-basierten
- Netzwerkimplementationen kann nur vom Kernel-Code aus
- direkt auf Netzwerkkarten zugegriffen werden. Zur
- weiteren Information lesen Sie bitte die Datei
- /etc/rc.network und die Manualpages
- zu den unterschiedlichen Netzwerkprogrammen, die dort
- erwähnt werden. Falls Sie danach total verwirrt
- sind, sollten Sie sich ein Buch besorgen, das die
- Netzwerkadministration auf einem anderen
- BSD-ähnlichen Betriebssystem beschreibt; mit wenigen
- signifikanten Ausnahmen gleicht die Netzwerkadministration
- auf FreeBSD im Grunde der auf &sunos; 4.0 oder
- Ultrix.
-
-
-
Wie kann ich Ethernet-Aliase einrichten?Wenn sich die zweite Adresse im gleichen Subnetz
befindet wie eine der Adressen, die bereits auf dem
Interface konfiguriert sind, benutzen Sie netmask
0xffffffff in Ihrer &man.ifconfig.8;
Befehlszeile, wie z.B.:
- &prompt.root; ifconfig ed0 alias 204.141.95.2 netmask 0xffffffff
+ &prompt.root; ifconfig ed0 alias 192.0.2.2 netmask 0xffffffffAndernfalls geben sie die Adresse und die Netzmaske so
an, wie sie es bei einem normalen Interface auch tun
würden:
- &prompt.root; ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
+ &prompt.root; ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
+
+ Sie können mehr darüber im &os;
+ Handbuch nachlesen.Wie bringe ich meine 3C503 dazu, den anderen
Anschluss zu benutzen?Wenn Sie die anderen Anschlüsse benutzen
möchten, müssen Sie einen zusätzlichen
Parameter in der &man.ifconfig.8;-Befehlszeile
spezifizieren. Der Standard-Anschluss ist
link0. Um den AUI-Anschluss
anstelle des BNC-Anschlusses zu verwenden, benutzen Sie
link2. Diese Angaben sollten durch
Benutzung der Variablen ifconfig_* in der Datei
/etc/rc.conf spezifiziert
werden.Warum habe ich Probleme mit NFS und FreeBSD?Gewisse PC-Netzwerkkarten sind (um es gelinde
auszudrücken) besser als andere und können
manchmal Probleme mit netzwerkintensiven Anwendungen wie
NFS verursachen.Weitere Informationen zu diesem Thema finden Sie
im
Handbucheintrag zu NFS.Warum kann ich per NFS nicht von einer &linux;-Maschine
mounten?Einige Versionen des NFS-Codes von &linux; akzeptieren
Mount-Requests nur von einem privilegierten Port.
Versuchen Sie
- &prompt.root; mount -o -P linuxbox:/blah /mnt
+ &prompt.root; mount -o -P linuxbox:/blah/mnt
- Warum kann ich per NFS nicht von einer Sun-Maschine
+ Warum kann ich per NFS nicht von einer &sun;-Maschine
mounten?
- Sun Workstations mit &sunos; 4.X akzeptieren
+ Sun Workstations mit
+ &sunos; 4.X akzeptieren
Mount-Requests nur von einem privilegierten Port.
Versuchen Sie
- &prompt.root; mount -o -P sunbox:/blah /mnt
+ &prompt.root; mount -o -P sunbox:/blah/mntWarum meldet mir mountd auf meinem
FreeBSD NFS-Server ständig can't change
attributes und bad exports
list?Die häufigste Ursache für dieses Problem
ist, dass Sie den Aufbau der &man.exports.5; nicht
oder nicht richtig verstanden haben. Überprüfen
Sie Ihre &man.exports.5; und lesen das Kapitel NFS im
Handbuch, speziell den Abschnitt
Konfiguration.Warum habe ich Probleme, per PPP mit NeXTStep-Maschinen zu
kommunizieren?Versuchen Sie, die TCP-Erweiterung in
/etc/rc.conf zu deaktivieren, indem
- Sie die folgende Variable auf NO setzen:
+ Sie die folgende Variable auf NO setzen:
tcp_extensions=NOXylogic's Annex-Maschinen arbeiten hier auch
fehlerhaft und Sie müssen die obige Änderung
benutzen, um über Sie Verbindungen
herzustellen.Wie aktiviere ich die Unterstützung für
IP-Multicast?Multicast-Host-Funktionen werden standardmäßig
- unterstützt. Wenn Sie Ihre Maschine als Multicast-Router
- betreiben wollen, müssen Sie Ihren Kernel mit der Option
- MROUTING neu kompilieren und
+ von &os; unterstützt. Wenn Sie Ihre Maschine als
+ Multicast-Router betreiben wollen, müssen Sie Ihren Kernel mit
+ der Option MROUTING neu kompilieren und
&man.mrouted.8; starten. Wenn Sie die Variable
mrouted_enable in der Datei
/etc/rc.conf auf
- "YES" setzen, wird &man.mrouted.8;
- während des Systemstart automatisch gestartet.
+ YES setzen, wird &man.mrouted.8;
+ während des &os;-Systemstarts automatisch gestartet.
+
+
+ In aktuellen Versionen von &os; sind die Programme
+ &man.mrouted.8;, der Multicast Routing Dienst, &man.map-mbone.8;
+ und &man.mrinfo.8; nicht mehr im Basissystem enthalten. In der
+ &os; Ports-Sammlung sind diese Programme unter net/mrouted erhältlich.
+ MBONE-Tools sind in ihrer eigenen Ports-Kategorie
mbone
verfügbar. Schauen Sie dort nach, wenn Sie die
Konferenztools vic und
vat suchen!Welche Netzwerkkarten basieren auf dem
DEC-PCI-Chipsatz?Hier ist eine von Glen Foster
gfoster@driver.nsta.org zusammengetragene
Liste mit einigen aktuellen Ergänzungen:
Warum muss ich für Hosts auf meiner Site den
FQDN benutzen?
- Sie werden wahrscheinlich feststellen, dass der
- Host sich tatsächlich in einer anderen Domäne
- befindet; wenn Sie sich zum Beispiel in foo.example.org
- befinden und einen Host namens mumble in
- der Domäne example.org erreichen wollen,
- werden Sie den fully-qualified Domainnamen mumble.example.org, anstatt nur
- mumble benutzen müssen.
-
- Traditionell war dies bei BSD-BIND-Resolvern erlaubt.
- Die aktuelle Version von bind,
- die mit FreeBSD ausgeliefert wird, ermöglicht jedoch
- nicht mehr die standardmäßige Abkürzung
- von nicht-fully-qualified Domainnamen für andere als
- ihre eigene Domäne. Ein nicht-qualifizierter Host
- mumble muss also entweder als
- mumble.foo.example.org gefunden
- werden, oder er wird in der Hauptdomäne
- gesucht.
-
- Dies unterscheidet sich vom vorherigen Verhalten, wo
- die Suche über mumble.example.org und mumble.edu fortgesetzt wurde.
- Werfen Sie einen Blick in RFC 1535, um zu erfahren, warum
- dies als schlechter Stil oder sogar als eine
- Sicherheitslücke betrachtet wurde.
-
- Als Abhilfe können Sie die Zeile
-
- search foo.example.org example.org
-
- anstelle der vorherigen
-
- domain foo.example.org
-
- in Ihre Datei /etc/resolv.conf
- einfügen. Stellen Sie jedoch sicher, dass die
- Suchreihenfolge nicht über die Grenze zwischen
- lokaler und öffentlicher Administration, wie
- RFC 1535 sie nennt, hinausreicht.
+ Lesen Sie die Antwort im &os; Handbook.Wieso erhalte ich bei allen Netzwerkoperationen die
Meldung Permission denied?Dieses Problem kann auftreten, wenn Sie einen Kernel
mit der Option IPFIREWALL erstellt
haben. In der Voreinstellung werden alle Pakete, die
nicht explizit erlaubt wurden, blockiert.Falls sie Ihr System unbeabsichtigt als Firewall
konfiguriert haben, können Sie die
Netzwerkfunktionalität wiederherstellen, indem Sie
als root folgendes eingeben:&prompt.root; ipfw add 65534 allow all from any to anySie können in /etc/rc.conf
auch firewall_type="open"
setzen.Weitere Informationen über die Konfiguration
einer FreeBSD-Firewall finden Sie im Kapitel Firewalls
des Handbuchs.
-
-
- Wie viele Einbußen zieht IPFW nach sich?
-
-
-
- Diese Frage wird im Handbuch-Kapitel Firewalls im
- Abschnitt IPFW
- Overhead und Optimierung ausführlich
- behandelt.
-
-
-
Warum kann ich bei &man.ipfw.8; einen Dienst nicht mit
fwd auf eine andere Maschine
umlenken?Der wahrscheinlichste Grund ist, dass Sie Network
Address Translation (NAT) brauchen und nicht die einfache
Weiterleitung von Pakete. Die fwd
Anweisung macht genau das, was da steht: Sie leitet
Pakete weiter; die Daten in den Paketen werden aber nicht
verändert. Ein Beispiel:01000 fwd 10.0.0.1 from any to foo 21Wenn ein Paket mit dem Ziel
foo die Maschine mit dieser
Regel erreicht, wird das Paket an
10.0.0.1 weitergeleitet; die
Zieladresse im Paket lautet aber immer noch
foo! Die Zieladresse wird
nicht in
10.0.0.1 geändert. Die
meisten Rechner werden allerdings Pakete verwerfen, wenn
die Zieladresse des Paketes nicht mit der Adresse des
Rechners übereinstimmt. Das ist der Grund, warum
eine fwd Regel oft nicht den Effekt hat,
den der Benutzer wollte. Dieses Verhalten ist aber kein
Fehler, sondern erwünscht.Wenn Sie einen Dienst auf eine andere Maschine
umleiten wollen, sollten Sie sich den FAQ-Eintrag über die
Umleitung von Diensten oder die Online-Hilfe zu
&man.natd.8; durchlesen. Auch in der Ports Sammlung sind diverse
Hilfsprogramme für diesen Zweck enthalten.Wie kann ich Service-Requests von einer Maschine auf
eine andere umleiten?Sie können FTP-Requests (und andere Dienste) mit
- dem Package socket umleiten, das im
- Ports-Tree in der Kategorie sysutils
- verfügbar ist. Ersetzen sie die Befehlszeile
+ dem Port sysutils/socket
+ umleiten. Ersetzen sie die Befehlszeile
für den Dienst einfach so, dass stattdessen
- socket aufgerufen wird, zum Beispiel so:
+ socket aufgerufen wird, zum Beispiel so:
ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.comftpwobei ftp.example.com und
ftp entsprechend der Host und
der Port sind, wohin umgeleitet werden soll.Woher kann ich ein Bandbreiten-Managementtool
bekommen?
- Für FreeBSD gibt es drei
+ Für &os; gibt es drei
Bandbreiten-Managementtools. &man.dummynet.4; ist als
- Teil von &man.ipfw.4; in FreeBSD integriert.
+ Teil von &man.ipfw.4; in &os; integriert.
ALTQ
- ist für FreeBSD 4.X kostenlos verfügbar und
- seit FreeBSD 5.X als Bestandteil von &man.pf.4; im
- Basissystem enthalten. Bei Bandwidth Manager von Emerging Technologies
handelt es sich hingegen um ein kommerzielles Produkt.Warum erhalte ich die Meldung /dev/bpf0:
device not configured?Der Berkeley-Paket-Filter (&man.bpf.4;) muss in
den Kernel eingebunden werden, bevor er von einem
Programme aus genutzt werden kann. Fügen Sie
folgendes zu Ihrer Kernelkonfigurationsdatei hinzu und
erstellen Sie einen neuen Kernel:
- pseudo-device bpf # Berkeley Packet Filter
-
- Unter FreeBSD 4.X und früheren Versionen
- müssen Sie noch die Gerätedateien erstellen.
- Wechseln Sie dazu nach dem Neustart in das Verzeichnis
- /dev und führen Sie den folgenden
- Befehl aus:
-
- &prompt.root; sh MAKEDEV bpf0
-
- Weitere Informationen über den Umgang mit Geräten
- finden Sie im Handbucheintrag
- über Device Nodes.
+ device bpf # Berkeley Packet FilterHabe ich, analog zum smbmount von &linux;, eine
Möglichkeit, auf ein freigegebenes Laufwerk einer
&windows;-Maschine in meinem Netzwerk zuzugreifen?Benutzen Sie die Kernel-Erweiterungen und Benutzerprogramme
aus dem Programmpaket SMBFS. Das
Paket und weitergehende Informationen sind unter
- net/smbfs in den Ports
- verfügbar; ab der Version 4.5 ist
- SMBFS Bestandteil
- des Basissystems.
+ &man.mount.smbfs.8; im Basissystem verfügbar.
- Was bedeutet die Meldung icmp-response
- bandwidth limit 300/200 pps in meinen
- Logfiles?
+ Was bedeutet die Meldung
+ Limiting icmp/open port/closed port response
+ in meinen Logfiles?Mit dieser Meldung teilt Ihnen der Kernel mit,
dass irgend jemand versucht, ihn zur Generierung von
zu vielen ICMP oder TCP reset (RST) Antworten zu
provozieren. ICMP Antworten sind oft das Ergebnis von
Verbindungsversuchen zu unbenutzten UDP Ports. TCP Resets
werden generiert, wenn jemand versucht, eine Verbindung zu
einem ungenutzten TCP Port aufzubauen. Die Meldungen
können unter anderem durch die folgenden Ereignisse
ausgelöst werden:Denial of Service (DoS) Angriffe mit der
Brechstange (und nicht durch Angriffe mit einzelnen
Paketen, die gezielt eine Schwachstelle des Systems
ausnutzen sollen).Port Scans, bei denen versucht wird, Verbindungen
zu einer großen Anzahl von Ports (und nicht nur
einigen bekannten Ports) herzustellen.Die erste Zahl gibt an, wie viele Pakete vom Kernel
ohne das Limit versendet worden wären; die zweite
Zahl gibt das Limit an. Sie können das Limit mit
Hilfe der sysctl-Variable
net.inet.icmp.icmplim einstellen. Im
Beispiel wird das Limit auf 300 Pakete
pro Sekunde gesetzt:&prompt.root; sysctl -w net.inet.icmp.icmplim=300Wenn Sie zwar die Begrenzung benutzen möchten, aber
die Meldungen nicht in Ihren Logfiles sehen möchten,
können Sie die Meldungen mit der sysctl-Variable
net.inet.icmp.icmplim_output
abschalten:&prompt.root; sysctl -w net.inet.icmp.icmplim_output=0Falls Sie die Begrenzung ganz abschalten wollen,
können Sie die Sysctl-Variable
net.inet.icmp.icmplim auf
0. Wir raten Ihnen aus den oben
genannten Gründen dringend von diesem Schritt
ab.Was bedeutet die Meldung arp: unknown
hardware address format?Ein Gerät im lokalen Ethernet verwendet eine
MAC-Adresse in einem Format, das FreeBSD nicht kennt. Der
wahrscheinlichste Grund ist, dass jemand Experimente
mit einer Ethernet-Karte anstellt. Die Meldung tritt sehr
häufig in Netzwerken mit Cable Modems auf. Die
Meldung ist harmlos und sollte die Performance Ihres
Systems nicht negativ beeinflussen.
- Ich habe gerade CVSup installiert, aber das Programm bricht
- mit Fehlermeldungen ab. Was ist da schief gelaufen?
+ Ich habe gerade CVSup installiert,
+ aber das Programm bricht mit Fehlermeldungen ab. Was ist da schief
+ gelaufen?Schauen Sie bitte zuerst nach, ob Sie eine Fehlermeldung
wie die unten gezeigte erhalten./usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not foundSolche Fehlermeldungen erhalten Sie, wenn Sie den
net/cvsup Port auf einer
Maschine installieren, die kein
- &xfree86;-System besitzt. Wenn Sie
+ &xorg;-System besitzt. Wenn Sie
das GUI von CVSup
benutzen wollen, müssen Sie
- &xfree86; installieren. Wenn Sie
+ &xorg; installieren. Wenn Sie
CVSup nur auf der Kommandozeile
benutzen wollen, entfernen Sie bitte den Port, den Sie gerade
installiert haben. Installieren Sie stattdessen den Port
- net/cvsup-without-gui.
- Genauere Informationen finden Sie im
- CVSup Abschnitt
+ net/cvsup-without-gui oder
+ den net/csup Port. Falls Sie
+ ein aktuelles &os; Release besitzen, können Sie &man.csup.1;
+ verwenden. Genauere Informationen finden Sie im CVSup Abschnitt
des Handbuchs.SicherheitWas ist ein Sandkasten (sandbox)?Sandkasten (sandbox) ist ein Ausdruck
aus dem Bereich Sicherheit. Er hat zwei
Bedeutungen:Ein Programm, das innerhalb virtueller Wände
ausgeführt wird. Wenn ein Angreifer über
eine Sicherheitslücke in diesen Programm
einbricht, verhindern diese Wände ein tieferes
Vordringen in das System.Man sagt: Der Prozess kann innerhalb der
Wände spielen, das heißt nichts,
was der Prozess in Bezug auf die Ausführung von
Code tut, kann die Wände durchbrechen. Es ist
also keine detaillierte Revision des Codes
erforderlich, um gewisse Aussagen über seine
Sicherheit machen zu können.Die Wände könnten z.B. eine
Benutzerkennung sein. Dies ist die Definition, die in
den Hilfeseiten &man.security.7; und &man.named.8; benutzt
wird.Nehmen Sie zum Beispiel den Dienst
- ntalk (siehe auch /etc/inetd.conf).
+ ntalk (siehe auch &man.inetd.8;).
Dieser Dienst ist früher mit der Benutzerkennung
root gelaufen; nun läuft er mit der
- Benutzerkennung tty. Der Benutzer tty ist ein
- Sandkasten, der dazu gedacht ist, es jemandem, der
- über ntalk erfolgreich in das System eingebrochen
- ist, schwer zu machen, über diese Benutzerkennung
- hinaus vorzudringen.
+ Benutzerkennung tty. Der Benutzer
+ tty ist ein Sandkasten, der dazu gedacht
+ ist, es jemandem, der über ntalk
+ erfolgreich in das System eingebrochen ist, schwer zu machen,
+ über diese Benutzerkennung hinaus vorzudringen.
Ein Prozess, der sich innerhalb einer
simulierten Maschine befindet. Dies ist etwas
fortgeschrittener; grundsätzlich bedeutet es,
dass jemand, der in der Lage ist, in einen
Prozess einzudringen, annehmen könnte, er
könnte weiter in die Maschine eindringen,
tatsächlich aber nur in eine Simulation der
Maschine einbricht und keine echten Daten
verändert.Der gängigste Weg, dies zu erreichen, ist, in
einem Unterverzeichnis eine simulierte Umgebung zu
erstellen und den Prozess in diesem Verzeichnis
mit chroot auszuführen (für diesen
- Prozess ist / dieses
- Verzeichnis und nicht das echte /
- des Systems).
+ Prozess ist / dieses
+ Verzeichnis und nicht das echte / des Systems).
Eine weitere gebräuchliche Anwendung ist, ein
untergeordnetes Dateisystem nur mit Leserechten zu
mounten, und dann darüber eine Dateisystemebene
zu erstellen, die einem Prozess einen scheinbar
schreibberechtigten Blick in das Dateisystem gibt.
Der Prozess mag glauben, dass er in der Lage
ist, diese Dateien zu verändern, aber nur der
Prozess sieht diesen Effekt - andere Prozess
im System natürlich nicht.Es wird versucht, diese Art von Sandkasten so
transparent zu gestalten, dass der Benutzer (oder
Hacker) nicht merkt, dass er sich in ihm
befindet.Ein &unix; System implementiert zwei Arten von
Sandkästen - eine auf Prozessebene und die andere auf
der Ebene der Benutzerkennung.Jeder Prozess auf einem &unix; System ist komplett von
allen anderen Prozessen abgeschirmt. Ein Prozess
kann den Adressraum eines anderen Prozesses nicht
modifizieren. Das ist anders als bei &windows;, wo ein
Prozess leicht den Adressraum eines anderen
überschreiben kann, was zu einem Absturz
führt.Ein Prozess gehört einer bestimmten
Benutzerkennung. Falls die Benutzerkennung nicht die von
root ist, dient sie dazu, den
Prozess von Prozessen anderer Benutzer abzuschirmen.
Die Benutzerkennung wird außerdem dazu genutzt,
Daten auf der Festplatte abzuschirmen.Was sind die Sicherheitsstufen?Die Sicherheitsstufen sind ein Sicherheitsmechanismus,
der im Kernel angesiedelt ist. Wenn die Sicherheitsstufe
einen positiven Wert hat, verhindert der Kernel die
Ausführung bestimmter Tätigkeiten; nicht einmal
der Super-User (also root) darf sie
durchführen. Zurzeit können über die
Sicherheitsstufen unter anderem die folgenden
Tätigkeiten geblockt werden:Änderungen bestimmter Dateiattribute, wie zum
Beispiel schg (das "system immutable"
Attribut)Schreibender Zugriff auf die Speicherbereiche des
Kernels mittels /dev/mem und
/dev/kmem.Laden von Kernel-Modulen.Änderungen an den Firewall-Regeln.Um die eingestellte Sicherheitsstufe eines aktiven
Systems abzufragen, reicht das folgende einfache
Kommando:&prompt.root; sysctl kern.securelevelDie Ausgaben wird den Namen der
&man.sysctl.8;-Variablen (in diesem Fall
kern.securelevel) und eine Zahl
enthalten. Die Zahl ist der aktuelle Wert der
Sicherheitsstufe. Wenn die Zahl positiv
(größer als Null) ist, sind zumindest einige
der Schutzmaßnahmen aktiviert.Sie können die Sicherheitsstufe eines laufenden
Systems nicht verringern, da dies den Mechanismus wertlos
machen würden. Wenn Sie eine Tätigkeit
ausführen müssen, bei der die Sicherheitsstufe
nicht-positiv sein muss (z.B. ein
installworld oder eine
Änderung der Systemzeit), dann müssen Sie die
entsprechende Einstellung in
/etc/rc.conf ändern (suchen Sie
nach den Variablen kern_securelevel und
kern_securelevel_enable) und das System
rebooten.Weitere Informationen über die Sicherheitsstufen
und genaue Informationen, was die Einstellungen bewirken,
können Sie der Online-Hilfe &man.init.8;
entnehmen.Die Sicherheitsstufen sind kein magischer
Zauberstab, der alle Ihre Problem löst; es gibt
viele bekannte Probleme. Und in der Mehrzahl der
Fälle vermitteln sie ein falsches Gefühl der
Sicherheit.Eines der größten Probleme ist, dass
alle für den Start des Systems benötigten
Dateien geschützt sein müssen, damit die
Sicherheitsstufe effektiv sein können. Wenn es ein
Angreifer schafft, seine eigenen Programme
ausführen zu lassen, bevor die Sicherheitsstufe
gesetzt wird (was leider erst gegen Ende des
Startvorgangs erfolgen kann, da viele der notwendigen
Tätigkeiten für den Systemstart nicht mit
einer gesetzten Sicherheitsstufe möglich
wären), werden die Schutzmechanismen ausgehebelt.
Es ist zwar nicht technisch unmöglich, alle beim
Systemstart genutzten Dateien zu schützen;
allerdings würde in einem so geschützten
System die Administration zu einem Alptraum, da man das
- System neu starten oder in den Single-User Modus bringen
+ System neu starten oder in den Single-User-Modus bringen
müsste, um eine Konfigurationsdatei
ändern zu können.Dieses und andere Probleme werden häufig auf
den Mailinglisten diskutiert, speziell auf auf der
Mailingliste &a.security;. Das verfügbare Archiv
enthält ausgiebige Diskussionen. Einige Benutzer
sind guter Hoffnung, dass das System der Sicherheitsstufen
bald durch ein besser konfigurierbares System ersetzt
wird, aber es gibt noch keine definitiven Aussagen.Fühlen Sie sich gewarnt.Wieso wartet BIND (named) sowohl auf Port
53 als auch auf einem hohen Port auf Anfragen?FreeBSD benutzt eine Version von
BIND, die einen Port mit einer hohen, zufälligen
Nummer für den Versand von Anfragen nutzt. Wenn Sie
Port 53 für abgehende Anfragen benutzen wollen, um
durch eine Firewall zu kommen oder sich einfach nur besser
zu fühlen, können die folgenden Zeilen in
/etc/namedb/named.conf
eintragen.options {
query-source address * port * 53;
}; Wenn Sie möchten, können Sie statt
* auch eine einzelne IP-Adresse
eintragen, um die Dinge noch weiter
einzuschränken.Ach übrigens, herzlichen Glückwunsch. Es
ist eine sehr gute Angewohnheit, die Ausgaben von
&man.sockstat.1; durchzusehen und auf merkwürdige
Dinge zu achten.
- Wieso wartet sendmail
+ Wieso wartet der sendmail-Dienst
neuerdings sowohl auf Port 587 als auch auf dem
Standard-Port 25 auf Anfragen?Aktuelle sendmail-Versionen
unterstützen eine neue Technik zur Einlieferung von
Mails, die Port 587 nutzt. Diese Technik wird zwar noch
nicht oft angewendet, erfreut sich aber ständig steigender
Popularität.Woher kommt dieser Benutzer toor
mit UID 0? Ist mein System gehackt worden?Keine Panik. toor ist ein
alternativer Account für den
Super-User (wenn man root rückwärts schreibt,
erhält man toor). Früher wurde er nur erzeugt,
wenn die Shell &man.bash.1; installiert wurde, heute wird
er auf jeden Fall erzeugt. Dieser Account ist für
die Verwendung mit einer alternativen Shell vorgesehen;
damit ist es nicht mehr erforderlich, die Shell von
root zu ändern. Dies ist
wichtig, wenn eine Shell verwendet wird, die nicht zum
Lieferumfang von FreeBSD gehört, zum Beispiel aus
einem Port oder einem Package. Diese Shells werden in der
Regel in /usr/local/bin installiert
und dieses Verzeichnis liegt standardmäßig auf
einem anderem Filesystem. Wenn die Shell von
root in
/usr/local/bin liegt und
/usr (oder das Filesystem, auf dem
/usr/local/bin liegt) nicht gemountet
werden kann, kann sich root nicht
mehr einloggen, um das Problem zu beheben. Es ist
allerdings möglich, das System zu rebooten und das
- Problem im Single-User Modus zu lösen, da man hier
+ Problem im Single-User-Modus zu lösen, da man hier
gefragt wird, welche Shell benutzt werden soll.Einige Anwender benutzen toor mit
einer alternativen Shell für die tägliche Arbeit
und benutzen root (mit der
- Standard-Shell) für den Single-User Modus und
+ Standard-Shell) für den Single-User-Modus und
für Notfälle. Standardmäßig kann man
sich nicht als toor anmelden, da der
Account kein gültiges Passwort hat; Sie
müssen sich also als root
anmelden und ein Passwort für
toor setzen, wenn Sie diesen Account
benutzen wollen.Warum funktioniert suidperl nicht
richtig?Aus Sicherheitsgründen wird suidperl
- standardmäßig ohne das SUID-Bit installiert.
- Der Systemadministrator kann das normale Verhalten mit dem
- folgenden Befehl herstellen:
-
- &prompt.root; chmod u+s /usr/bin/suidperl
-
- Wenn Sie wollen, dass suidperl
- auch beim Update via Sourcecode das SUID-Bit erhält,
- müssen Sie in /etc/make.conf die
- Zeile ENABLE_SUIDPERL=true
+ standardmäßig nicht installiert. Wenn Sie wollen, dass
+ suidperl auch beim Update via Sourcecode das
+ SUID-Bit erhält, müssen Sie in
+ /etc/make.conf die
+ Zeile ENABLE_SUIDPERL=true
einfügen, bevor Sie perl bauen.PPPIch bekomme &man.ppp.8; nicht zum Laufen. Was mache
ich falsch?Sie sollten zuerst &man.ppp.8; (die Manualpage zu ppp)
und den Abschnitt zu
PPP im Handbuch lesen. Aktivieren Sie das Logging
mit folgendem Befehl:set log Phase Chat Connect Carrier lcp ipcp ccp commandDieser Befehl kann an der Eingabeaufforderung von
&man.ppp.8; eingegeben oder in die Konfigurationsdatei
/etc/ppp/ppp.conf eingetragen werden
(der beste Ort hierfür ist der Anfang des Abschnitts
default. Stellen Sie sicher, dass
die Datei /etc/syslog.conf die
folgenden Zeilen enthält:
!ppp
*.* /var/log/ppp.log
und, dass die Datei
/var/log/ppp.log existiert. Sie
können nun über die Logfiles eine Menge
darüber herausfinden, was geschieht. Es macht
nichts, wenn die Einträge in den Logfiles Ihnen gar
nichts sagen. Wenn Sie jemandem um Hilfe bitten
müssen, könnten sie für ihn von Nutzen
sein.Warum hängt sich ppp auf, wenn ich es
benutze?Das liegt meistens daran, dass Ihr Rechnername
nicht aufgelöst werden kann. Um dieses Problem zu
lösen, müssen Sie sicherstellen, dass die
Datei /etc/hosts von Ihrem Resolver
zuerst genutzt wird. Dazu muss in der Datei
/etc/host.conf der Eintrag
hosts an die erste Stelle gesetzt
werden. Erstellen Sie dann einfach für Ihren lokalen
Rechner einen Eintrag in der Datei
/etc/hosts. Falls Sie kein lokales
Netzwerk besitzen, ändern Sie die
localhost-Zeile:127.0.0.1 foo.example.com foo localhostAndernfalls fügen Sie einfach einen weiteren
Eintrag für Ihren lokalen Rechner hinzu. Weitere
Details finden Sie in den betreffenden
Manualpages.Wenn Sie fertig sind sollten Sie ping -c1
`hostname` erfolgreich ausführen
können.Warum wählt &man.ppp.8; im
-auto-Modus nicht?Überprüfen Sie zunächst, ob Sie einen
Standard-Gateway eingestellt haben. Wenn Sie
netstat -rn ausführen, sollten Sie
zwei Einträge ähnlich den folgenden
sehen:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.0.2 UGSc 0 0 tun0
10.0.0.2 10.0.0.1 UH 0 0 tun0
Hier wird angenommen, dass Sie die Adressen aus
dem Handbuch, der Manualpage oder aus der Datei
- ppp.conf.sample benutzt haben. Falls Sie keine
- Standardroute haben, kann es daran liegen, dass Sie
- eine alte Version von &man.ppp.8; benutzen, die das Wort
- HISADDR in der Datei ppp.conf nicht
- versteht.
+ ppp.conf.sample benutzt haben.
+ Falls Sie keine Standardroute haben, kann es daran liegen, dass Sie
+ vergessen haben, die Zeile HISADDR in der Datei
+ ppp.conf hinzuzufügen.
Ein weiterer Grund dafür, dass die Zeile
für die Standardroute fehlt, könnte der sein,
dass Sie fälschlicherweise eine Standardroute in
der Datei /etc/rc.conf eingetragen
und die folgende Zeile in ppp.conf
ausgelassen haben:delete ALLLesen Sie in diesem Fall den Abschnitt
+ url="&url.books.handbook;/userppp.html#USERPPP-FINAL">
Abschließende Systemkonfiguration des
Handbuchs.Was bedeutet No route to
host?Dieser Fehler beruht für gewöhnlich auf
einem fehlenden Abschnitt
MYADDR:
delete ALL
add 0 0 HISADDR
in Ihrer Datei
/etc/ppp/ppp.linkup. Er ist nur
notwendig, wenn Sie eine dynamische IP-Adresse besitzen
oder die Adresse Ihres Gateways nicht kennen. Wenn Sie
den interaktiven Modus benutzen, können Sie folgendes
eingeben, nachdem Sie in den packet
mode gelangt sind (den Paket Modus erkennen Sie
an PPP im Prompt):
delete ALL
add 0 0 HISADDR
Weitere Details finden Sie im Abschnitt PPP
+ url="&url.books.handbook;/userppp.html#USERPPP-DYNAMICIP">PPP
und Dynamische IP-Adressen des Handbuchs.Wieso werden meine Verbindungen nach ca. drei Minuten
beendet?Der Standardtimeout für &man.ppp.8; beträgt
drei Minuten. Er kann durch die Zeileset timeout NNNeingestellt werden, wobei
NNN die Inaktivität in
Sekunden, bevor die Verbindung geschlossen wird, angibt.
Falls NNN Null ist, wird die
Verbindung niemals aufgrund eines Timeouts geschlossen.
Es ist möglich, diesen Befehl in die Datei
ppp.conf einzubinden, oder ihn an der
Eingabeaufforderung im interaktiven Modus einzugeben.
Durch eine Verbindung zum Server-Socket von
ppp über &man.telnet.1;
oder &man.pppctl.8; ist es auch möglich, den Timeout
bei aktiver Verbindung anzupassen. Weitere Details finden
Sie in der Manualpage &man.ppp.8;.Wieso bricht meine Verbindung bei hoher Auslastung
ab?Falls Sie Link-Quality-Reporting (LQR) konfiguriert
haben, ist es möglich, dass zu viele LQR-Pakete
zwischen Ihrer Maschine und dem verbundenen Rechner
verloren gehen. ppp folgert daraus, dass die
Verbindung nicht in Ordnung ist und schließt sie.
Vor FreeBSD Version 2.2.5 war LQR standardmäßig
aktiviert; nun ist es standardmäßig
deaktiviert. Es kann durch folgende Zeile deaktiviert
werden:disable lqrWarum brechen meine Verbindungen nach unbestimmter
Zeit zusammen?Wenn die Qualität Ihrer Telefonleitung zu
schlecht oder bei Ihrem Anschluss die Option
(Telekomdeutsch: das Leistungsmerkmal) Anklopfen aktiviert
ist, kann es manchmal vorkommen, dass Ihr Modem
auflegt, weil es (fälschlicherweise) annimmt,
dass es das Trägersignal verloren hat.Bei den meisten Modems gibt es eine
Einstellmöglichkeit, um anzugeben, wie tolerant es
gegenüber vorübergehenden Verlusten des
- Trägersignals sein soll. Bei einem USR &sportster;
- wird dies zum Beispiel im Register S10 in Zehntelsekunden
- angegeben. Um Ihr Modem toleranter zu machen, können
- Sie zu Ihrem Wählbefehl die folgende
+ Trägersignals sein soll. Bei einem
+ &usrobotics; &sportster; wird dies zum Beispiel im Register
+ S10 in Zehntelsekunden angegeben. Um Ihr Modem toleranter zu
+ machen, können Sie zu Ihrem Wählbefehl die folgende
Sende-Empfangs-Sequenz hinzufügen:set dial "...... ATS10=10 OK ......"Weitere Information sollten Sie dem Handbuch Ihres
Modems entnehmen können.Warum hängen meine Verbindung nach einer
unbestimmten Zeit?Viele Leute machen Erfahrungen mit hängenden
Verbindungen ohne erkennbaren Grund. Als erstes muss
festgestellt werden, welche Seite der Verbindung
hängt.Wenn Sie ein externes Modem benutzen, können Sie
einfach versuchen, &man.ping.8; zu benutzen, um zu sehen,
ob die TD-Anzeige aufleuchtet, wenn Sie
Daten übertragen. Falls sie aufleuchtet (und die
RD-Anzeige nicht), liegt das Problem am
anderen Ende. Falls TD nicht
aufleuchtet, handelt es sich um ein lokales Problem. Bei
einem internen Modem müssen Sie den Befehl
set server in Ihrer Datei
ppp.conf benutzen. Stellen Sie
über &man.pppctl.8; eine Verbindung zu &man.ppp.8;
her, wenn die Verbindung hängt. Falls Ihre
Netzwerkverbindung plötzlich wieder funktioniert (ppp
wurde durch die Aktivität auf dem Diagnose-Socket
wiederbelebt) oder Sie keine Verbindung bekommen
(vorausgesetzt, der Befehl set socket
wurde beim Start erfolgreich ausgeführt), handelt es
sich um ein lokales Problem. Falls Sie eine Verbindung
bekommen und die externe Verbindung weiterhin hängt,
aktivieren Sie lokales asynchrones Logging mit
set log local async und benutzen Sie
&man.ping.8; von einem anderen Fenster oder Bildschirm
aus, um die externe Verbindung zu benutzen. Das
asynchrone Logging zeigt Ihnen, welche Daten über die
Verbindung gesendet und empfangen werden. Falls Daten
hinausgehen, aber nicht zurückkommen, handelt es sich
um ein externes Problem.Wenn Sie festgestellt haben, ob es sich um ein lokales
oder um ein externes Problem handelt, haben Sie zwei
Möglichkeiten:Wenn es ein externes Problem ist, lesen Sie bitte bei
weiter.Handelt es sich um ein lokales Problem, lesen Sie bitte
.Was kann ich machen, wenn die Gegenstelle nicht
antwortet?Hier können Sie wenig tun. Die meisten ISPs
werden ablehnen, Ihnen zu helfen, wenn Sie kein
- Betriebssystem von Microsoft benutzen. Sie können
+ Betriebssystem von µsoft; benutzen. Sie können
enable lqr in Ihrer Datei
ppp.conf angeben, wodurch &man.ppp.8;
ermöglicht wird, ein externes Versagen zu erkennen
und aufzulegen, aber diese Erkennung ist relativ langsam
und deshalb nicht besonders nützlich. Evtl. sagen
Sie Ihrem ISP nicht, dass Sie user-PPP
- benutzen...
+ benutzen.
Versuchen Sie zunächst, jegliche Datenkompression
auszuschalten, indem Sie folgendes zu Ihrer Konfiguration
hinzufügen:
disable pred1 deflate deflate24 protocomp acfcomp shortseq vj
deny pred1 deflate deflate24 protocomp acfcomp shortseq vj
Stellen Sie nun wieder eine Verbindung her, um
festzustellen, ob sich etwas geändert hat. Falls es
nun besser läuft oder falls das Problem
vollständig behoben ist, versuchen Sie durch
schrittweises Ändern der Einstellungen festzustellen,
welche Einstellung den Unterschied bewirkt. Hierdurch
erhalten Sie schlüssige Fakten für ein Gespräch
mit Ihrem ISP (andererseits wird hierdurch offensichtlich,
- dass Sie kein Microsoft-Produkt benutzen).
+ dass Sie kein µsoft;-Produkt benutzen).
Aktivieren Sie asynchrones Logging und warten Sie, bis
die Verbindung wieder hängt, bevor Sie sich an Ihren
ISP wenden. Hierzu kann einiges an Plattenplatz
nötig sein. Die Daten, die als letztes von dem Port
gelesen wurden, könnten von Interesse sein. Für
gewöhnlich handelt es sich um ASCII-Text, der sogar
- den Fehler beschreiben kann (Memory fault, core
- dumped).
+ den Fehler beschreiben kann (Memory fault, Core
+ dumped).
Falls Ihr ISP hilfsbereit ist, sollte er in der Lage
sein, an seinem Ende das Logging zu aktivieren und wenn
das nächste Mal die Verbindung abbricht, könnte
er Ihnen mitteilen, worin das Problem auf seiner Seite
besteht. Gerne können Sie Details auch an &a.brian;
schicken, oder Ihren ISP bitten, sich direkt an ihn zu
wenden.Was kann ich tun, wenn sich &man.ppp.8;
aufhängt?In diesem Fall erstellen Sie am besten &man.ppp.8;
neu, indem Sie CFLAGS+=-g und
- STRIP= am Ende des Makefiles
- einfügen und dann make clean && make
- && make install ausführen. Suchen
- Sie die Prozessnummer von &man.ppp.8; mit ps
- ajxww | fgrep ppp, wenn &man.ppp.8; sich
- aufhängt und führen Sie gdb ppp
- PID aus. Am
- gdb-Prompt können Sie
- bt benutzen, um einen Auszug des Stacks
- zu erhalten.
+ STRIP= am Ende von
+ /etc/make.conf
+ einfügen und dann make
+ install
+ clean in
+ /usr/src/usr.sbin/ppp ausführen. Suchen
+ Sie die Prozessnummer von &man.ppp.8; mit pgrep
+ ppp, wenn &man.ppp.8; sich
+ aufhängt und führen Sie gdb ppp
+ PID (als gdb ppp
+ `pgrep ppp`) aus. Am gdb-Prompt
+ können Sie bt benutzen, um einen Auszug des
+ Stacks zu erhalten.
Senden Sie die Ergebnisse an &a.brian;.Warum passiert nach der Nachricht Login
OK! nichts?Bei &os;-Versionen vor 2.2.5 wartete &man.ppp.8;
darauf, dass der Partner das Line Control Protocol
(LCP) initiiert. Viele ISPs starten nicht mit der
Initiierung, sondern erwarten dies vom Client. Benutzen
Sie die folgende Zeile, um &man.ppp.8; zu veranlassen, LCP
zu initiieren:set openmode activeFür gewöhnlich schadet es nicht, wenn
beide Seiten versuchen, Verhandlungen einzuleiten.
Deshalb ist openmode nun standardmäßig aktiv.
Im nächsten Abschnitt wird allerdings erklärt,
in welchen Fällen es doch
schadet.Ich sehe ständig Fehlermeldungen über
gleiche Magic Numbers Was heißt
das?Nach dem Aufbau einer Verbindung kann es sein,
dass Sie in der Logdatei gelegentlich Meldungen mit
- dem Hinweis magic is the same sehen.
+ dem Hinweis magic is the same sehen.
Manchmal sind diese Meldungen harmlos und manchmal bricht
die eine oder andere Seite die Verbindung ab. Die meisten
Implementationen von PPP können dieses Problem nicht
handhaben und Sie werden wiederholte
Konfigurationsanforderungen und -bestätigungen in der
Logdatei finden, bis &man.ppp.8; schließlich aufgibt
und die Verbindung beendet.Dies geschieht normalerweise auf Servern mit langsamen
Festplatten, bei denen ein getty auf dem Port
ausgeführt und &man.ppp.8; nach dem Einloggen von
einem Login-Skript oder einem Programm aus gestartet wird.
- Ich habe auch davon gehört, dass dies bei der
+ Es wurde auch schon berichtet, dass dies bei der
Benutzung von slirp regelmäßig auftritt. Der
- Grund hierfür ist, dass das ppp auf der
- Client-Seite in der Zeit, die benötigt wird, getty zu
- beenden und ppp zu starten, bereits beginnt, Line Control
+ Grund hierfür ist, dass das &man.ppp.8; auf der
+ Client-Seite in der Zeit, die benötigt wird, &man.getty.8; zu
+ beenden und &man.ppp.8; zu starten, bereits beginnt, Line Control
Protocol (LCP) Pakete zu senden. Da ECHO auf dem
Serverport weiterhin eingeschaltet ist, werden diese
Pakete zum &man.ppp.8; auf der Client-Seite
reflektiert.Ein Teil der LCP-Verhandlungen ist die Einrichtung
einer Magic Number für jede Seite der
Verbindung, damit Echos erkannt werden können.
Das Protokoll besagt, dass, wenn der Partner
versucht, die gleiche Magic Number auszuhandeln,
ein NAK zurückgesendet und eine neue "Magic Number"
gewählt werden soll. Während der Server das
ECHO eingeschaltet hat, sendet der Client LCP Pakete,
sieht die gleiche Magic Number im reflektierten
Paket und erzeugt ein NAK. Er sieht auch das reflektierte NAK
(was bedeutet, dass &man.ppp.8; seine "Magic Number"
ändern muss). Hierdurch wird eine Vielzahl von
Änderungen der Magic Number hervorgerufen,
die sich allesamt im tty-Puffer des Servers ansammeln. Sobald
&man.ppp.8; auf dem Server startet, wird es mit
Änderungen der Magic Number überflutet
und entscheidet, dass es sich zur Genüge mit den
LCP-Verhandlungen beschäftigt hat und gibt auf. Und
während sich der Client noch darüber freut,
dass er keine weiteren Reflexionen sieht, wird ihm
gemeldet, dass der Server auflegt.Dies kann verhindert werden, indem dem Partner durch
die folgende Zeile in der Datei
ppp.conf erlaubt wird, mit der
Verhandlung zu beginnen:set openmode passiveHierdurch wird &man.ppp.8; mitgeteilt, darauf zu
warten, dass der Server mit den LCP-Verhandlungen
beginnt. Einige Server starten jedoch nie mit der
Verhandlungen; falls dies der Fall ist, können Sie
folgendes tun:set openmode active 3Hierdurch bleibt &man.ppp.8; für drei Sekunden
passiv und fängt dann erst an, LCP-Anforderungen zu
senden. Falls der Partner während dieser Zeit
beginnt, Anforderungen zu senden, wird &man.ppp.8; direkt
antworten und nicht erst, nachdem die drei Sekunden
abgelaufen sind.Die LCP-Verhandlungen dauern an, bis die Verbindung
geschlossen wird. Was mache ich falsch?Es gibt eine Fehlfunktion in der Implementierung von
&man.ppp.8;, die darin besteht, dass LCP-, CCP- &
IPCP-Antworten nicht mit den ursprünglichen
Anforderungen assoziiert werden. Für den Fall,
dass eine Implementation von PPP mehr als sechs
Sekunden langsamer ist, als die andere Seite, resultiert
das darin, dass die andere Seite zwei weitere
LCP-Konfigurationsanforderungen sendet, was fatale
Auswirkungen hat.Stellen Sie sich vor, wir hätten es mit zwei
Implementierungen A und
B zu tun. A beginnt
unmittelbar nach der Verbindung, LCP-Anforderungen zu
senden und B benötigt sieben
Sekunden, zu starten. Wenn B startet,
hat A bereits drei LCP-Anforderungen
gesendet. Wir nehmen an, dass ECHO ausgeschaltet
ist; andernfalls würden wir Probleme mit der "Magic
Number" beobachten, wie bereits im vorherigen Abschnitt
beschrieben. B sendet eine Anforderung
und anschließend eine Bestätigung der ersten
Anforderung von A. Dies führt dazu,
dass A in den Zustand
OPENED übergeht und eine
Bestätigung (die erste) zurück an
B sendet. In der Zwischenzeit sendet
B zwei weitere Bestätigungen als
Antwort auf die zusätzlichen Anforderungen, die von
A gesendet worden sind, bevor
B gestartet ist. B
empfängt dann die erste Bestätigung von
A und geht in den Zustand
OPENED über. A
empfängt die zweite Bestätigung von
B, geht zurück in den Zustand
REQ-SENT und sendet eine
weitere (vierte) Anforderung entsprechend dem RFC.
A empfängt dann die dritte
Bestätigung und geht in den Zustand
OPENED über. In der Zwischenzeit
empfängt B die vierte Anforderung
von A, wechselt in den Zustand
ACK-SENT und sendet eine weitere
(zweite) Anforderung und (vierte) Bestätigung
entsprechend dem RFC. A erhält die
Anforderung, geht in den Zustand
REQ-SENT über, sendet eine weitere
Anforderung, erhält unverzüglich die
nächste Bestätigung und geht in
OPENED über.Das geht so weiter, bis eine Seite erkennt, dass
man zu keinem Ergebnis gelangt und aufgibt.Am besten verhindert man solche Situationen, indem man
eine Seite als passiv konfiguriert,
also dafür sorgt, dass eine Seite darauf
wartet, dass die andere mit den Verhandlungen beginnt. Das
- kann durch den Befehl
+ kann durch den folgenden Befehl geschehen:
set openmode passive
- geschehen. Diese Option sollten Sie mit Vorsicht
- genießen. Folgenden Befehl sollten Sie benutzen, um
+ Diese Option sollten Sie mit Vorsicht genießen.
+ Folgenden Befehl sollten Sie benutzen, um
die Wartezeit auf den Beginn der Verhandlungen des
Partners von &man.ppp.8; zu begrenzen:
- set stopped N
+ set stopped N
- Alternativ kann der Befehl
+ Alternativ kann der folgende Befehl (wobei
+ N die Wartezeit in Sekunden vor Beginn
+ der Verhandlungen angibt) benutzt werden:set openmode active N
- (wobei N die Wartezeit in
- Sekunden vor Beginn der Verhandlungen angibt) benutzt
- werden. Weitere Details finden Sie in den
- Manualpages.
+ Weitere Details finden Sie in den Manualpages.Warum reagiert &man.ppp.8; nicht mehr, wenn ich es mit
shell verlassen habe?Wenn Sie den Befehl shell oder
! benutzen, führt &man.ppp.8; eine
Shell aus (falls Sie Argumente übergeben haben,
- führt &man.ppp.8; diese Argumente aus). &man.ppp.8;
- wartet auf die Beendigung des Befehls, bevor es seine
- Arbeit fortsetzt. Falls Sie versuchen, die PPP-Verbindung
- während der Programmausführung zu benutzen, wird
- es so aussehen, als wäre die Verbindung eingefroren.
- Das liegt daran, dass &man.ppp.8; auf die
+ führt &man.ppp.8; diese Argumente aus). Das Programm
+ ppp wartet auf die Beendigung des
+ Befehls, bevor es seine Arbeit fortsetzt. Falls Sie versuchen,
+ die PPP-Verbindung während der Programmausführung zu
+ benutzen, wird es so aussehen, als wäre die Verbindung
+ eingefroren. Das liegt daran, dass &man.ppp.8; auf die
Beendigung des Befehls wartet.Falls Sie solche Befehle verwenden möchten,
benutzen Sie stattdessen den Befehl
!bg. Hierdurch wird der angegebene
Befehl im Hintergrund ausgeführt und &man.ppp.8; kann
fortfahren, die Verbindung zu bedienen.Warum wird &man.ppp.8; niemals beendet, wenn ich es
über ein Nullmodem-Kabel benutze?Es gibt keine Möglichkeit für &man.ppp.8;,
automatisch festzustellen, ob eine direkte Verbindung
beendet worden ist. Das liegt an den Leitungen, die bei
einem seriellen Nullmodem-Kabel benutzt werden. Wenn Sie
diese Art der Verbindung verwenden, sollte LQR immer
aktiviert werden:enable lqrLQR wird standardmäßig akzeptiert, wenn es
vom Partner ausgehandelt wird.
- Warum wählt &man.ppp.8; im Modus -auto ohne
- Grund?
+ Warum wählt &man.ppp.8; im Modus
+ ohne Grund?Falls &man.ppp.8; unerwarteterweise wählt,
müssen Sie den Grund herausfinden und Wählfilter
(dfilters) einsetzen, um dies zu verhindern.Benutzen Sie die folgende Zeile, um den Grund
herauszufinden:set log +tcp/ipDadurch wird jeglicher Verkehr über die
Verbindung geloggt. Wenn das nächste mal unerwartet
eine Verbindung hergestellt wird, werden Sie den Grund
zusammen mit einer hilfreichen Zeitangabe in der Logdatei
finden.Sie können nun das Wählen aufgrund dieser
Bedingungen verhindern. Normalerweise wird diese Art von
Problemen durch Anfragen an den DNS verursacht. Um zu
verhindern, dass DNS-Anfragen den Aufbau der
Verbindung hervorrufen (das verhindert
nicht, dass Pakete über
eine bestehende Verbindung gesendet werden), benutzen Sie
die folgenden Zeilen:
set dfilter 1 deny udp src eq 53
set dfilter 2 deny udp dst eq 53
set dfilter 3 permit 0/0 0/0
Dies ist nicht immer brauchbar, weil es effektiv Ihre
Fähigkeit, auf Anforderung wählen zu können
einschränkt - die meisten Programme müssen eine
DNS-Anfrage durchführen, bevor Sie andere, das
Netzwerk betreffenden Dinge tun können.Im Fall von DNS sollten Sie versuchen, herauszufinden,
welches Programm tatsächlich versucht, einen
Hostnamen aufzulösen. Sehr oft handelt es sich hier
um &man.sendmail.8;. Sie sollten
sicherstellen, dass Sie sendmail
in der Konfigurationsdatei sagen, dass keine DNS-Anfragen
durchführen soll. Weitere Details enthält
der Abschnitt
E-Mail
über Einwahl-Verbindungen des Handbuchs.
Sie könnten z.B. die folgende Zeile in
Ihre .mc-Datei einfügen:define(`confDELIVERY_MODE', `d')dnlDas veranlasst sendmail dazu, alles
in eine Warteschlange einzureihen, bis die Warteschlange
verarbeitet wird (normalerweise wird sendmail mit
aufgerufen, was besagt,
dass die Warteschlange alle 30 Minuten abgearbeitet
- wird) oder, bis ein sendmail -q
- ausgeführt wird (z.B. aus Ihrer Datei ppp.linkup
- heraus).
+ wird) oder, bis ein sendmail
+ ausgeführt wird (z.B. aus Ihrer Datei
+ ppp.linkup heraus).
Was bedeuten diese CCP-Fehler?Ich sehe ständig folgende Fehler in meiner
Logdatei:
CCP: CcpSendConfigReq
CCP: Received Terminate Ack (1) state = Req-Sent (6)
Das liegt daran, dass &man.ppp.8; versucht, die
Komprimierung Predictor1 auszuhandeln und der Partner
über keinerlei Komprimierung verhandeln will. Die
Meldungen sind harmlos, aber wenn Sie sie beseitigen
möchten, können Sie die Komprimierung Predictor1
auch lokal ausschalten:disable pred1Warum loggt ppp die Geschwindigkeit meiner Verbindung
nicht?Um alle Zeilen Ihrer Modemkonversation
mitzuloggen, müssen Sie folgendes einstellen:set log +connectDies veranlasst &man.ppp.8; dazu, alles bis zur
- letzten angeforderten expext-Zeile
+ letzten angeforderten expect-Zeile
mitzuloggen.Falls Sie die Geschwindigkeit Ihrer Verbindung
erfahren möchten und PAP oder CHAP (und deshalb nach
dem CONNECT im Wählskript nichts mehr zu
chatten haben - kein set
login-Skript), müssen Sie sicherstellen,
dass Sie &man.ppp.8; anweisen, die gesamte
CONNECT-Zeile zu erwarten, etwa so:set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n"Hier bekommen wir unser CONNECT, senden nichts,
erwarten dann einen Line-Feed, der &man.ppp.8; zwingt, die
gesamte CONNECT-Antwort zu lesen.Warum ignoriert &man.ppp.8; das Zeichen
\ in meinem Chat-Skript?
- ppp analysiert jede Zeile in Ihrer
- Konfigurationsdatei, damit es Zeichenketten wie z.B.
+ Das Programm ppp analysiert jede
+ Zeile in Ihrer Konfigurationsdatei, damit es Zeichenketten wie z.B.
set phone "123 456 789" korrekt
interpretieren kann (und erkennen, dass es sich bei
der Nummer tatsächlich nur um
ein Argument handelt). Um das
Zeichen " anzugeben, müssen
Sie ihm einen Backslash (\)
voranstellen.Wenn der Chat-Interpreter jedes Argument analysiert,
reinterpretiert er die Argumente, um irgendwelche
speziellen Escape-Sequenzen wie z.B. \P
oder \T (sehen Sie in die Manualpage)
zu finden. Das Ergebnis dieser Doppelanalyse ist,
dass Sie daran denken müssen, die richtige
Anzahl an Escape-Zeichen zu verwenden.Falls Sie tatsächlich das Zeichen
\ z.B. zu Ihrem Modem senden
möchten, brauchen Sie etwas ähnliches,
wie:set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK"
- woraus sich folgende Zeichen ergeben:
+ Woraus sich folgende Zeichen ergeben:
ATZ
OK
AT\X
OK
- oder
+ Oder:
set phone 1234567
set dial "\"\" ATZ OK ATDT\\T"
- was folgende Zeichen ergibt:
+ Was folgende Zeichen ergibt:
ATZ
OK
ATDT1234567
Warum gibt es die Datei ppp.core
nicht, wenn &man.ppp.8; einen Segmentation Fault erzeugt
hat?Weder &man.ppp.8; noch andere Programme sollten
Core-Dumps erzeugen. Da &man.ppp.8; mit der effektiven
Benutzerkennung 0 ausgeführt wird, wird das
Betriebssystem &man.ppp.8;'s Coreimage nicht auf die
Festplatte schreiben, bevor es &man.ppp.8; beendet hat.
Falls &man.ppp.8; jedoch tatsächlich aufgrund einer
Speicherverletzung abbricht und Sie
die aktuellste Version (siehe Anfang dieses Kapitels)
benutzen, dann sollten Sie folgendes tun:&prompt.user; tar xfz ppp-*.src.tar.gz
&prompt.user; cd ppp*/ppp
&prompt.user; echo STRIP= >>Makefile
&prompt.user; echo CFLAGS+=-g >>Makefile
&prompt.user; make clean all
&prompt.user; su
&prompt.root; make install
&prompt.root; chmod 555 /usr/sbin/pppNun ist die installierte Version von &man.ppp.8; mit
einem Debugger ausführbar. Sie können
&man.ppp.8; nun nur noch als root
ausführen, da alle vorherigen Zugriffsrechte
aufgehoben worden sind. Achten Sie darauf, in welchem
Verzeichnis Sie sich gerade befinden, wenn Sie &man.ppp.8;
starten.Wenn nun wieder eine Speicherverletzung auftreten
sollte, wird &man.ppp.8; einen Speicherauszug erzeugen,
den Sie in der Datei ppp.core finden.
Sie sollten dann folgendes tun:&prompt.user; su
&prompt.root; gdb /usr/sbin/ppp ppp.core(gdb)bt
.....
(gdb)f 0
....
(gdb)i args
....
(gdb)l
.....Mit Hilfe all dieser Informationen sollte es
möglich sein, das Problem zu diagnostizieren.Falls Sie mit &man.gdb.1; vertraut sind,
könnten Sie weitere Einzelheiten herausfinden, z.B.
wodurch der Fehler tatsächlich hervorgerufen wurde
und die Adressen & Werte der betreffenden
Variablen.Warum bekommt das Programm, das eine automatische
Anwahl ausgelöst hat, keine Verbindung?Dies war ein bekanntes Problem bei
&man.ppp.8;-Konfigurationen, bei denen automatisch
dynamische, lokale IP-Adressen mit dem Partner
ausgehandelt werden. In der aktuellsten Version ist das
Problem behoben - suchen Sie in den Manualpages nach
iface.Das Problem bestand darin, dass, wenn das erste
Programm &man.connect.2; aufruft, die IP-Adresse der
tun-Schnittstelle dem Socketendpunkt zugeordnet wird. Der
Kernel erstellt das erste ausgehende Paket und schreibt es
in das tun-Gerät. &man.ppp.8; liest dann das Paket
und baut eine Verbindung auf. Falls die
Schnittstellenadresse sich nun aufgrund &man.ppp.8;s
dynamischer Adresszuordnung ändert, wird der
originale Socketendpunkt ungültig. Alle weiteren
Pakete, die zum Partner gesendet werden, werden für
gewöhnlich verworfen. Selbst wenn sie nicht
verworfen werden würden, würden alle Antworten
nicht an den betreffenden Rechner gelangen, weil die
IP-Adresse nicht mehr zu diesem Rechner
gehört.Theoretisch gibt es mehrere Möglichkeiten, dieses
Problem anzugehen. Am schönsten wäre es, wenn
der Partner die gleiche IP-Adresse wieder zuordnen
würde, wenn möglich :-) Die
derzeitige Version von &man.ppp.8; tut das, aber die
meisten anderen Implementierungen nicht.Die einfachste Maßnahme von unserer Seite
wäre die, niemals die IP-Adresse der
tun-Schnittstelle zu ändern, sondern stattdessen alle
ausgehenden Pakete so zu ändern, dass als
Absender-IP-Adresse anstelle der IP-Adresse der
Schnittstelle die ausgehandelte IP-Adresse gesetzt wird.
Das ist im wesentlichen das, was durch die Option
iface-alias in der aktuellsten Version
von &man.ppp.8; bewirkt wird (mit Unterstützung von
&man.libalias.3; und &man.ppp.8;'s
Schalter) - alle Schnittstellenadressen werden beibehalten
und auf die letzte ausgehandelte Adresse
umgesetzt.Eine andere Alternative (und wahrscheinlich die
zuverlässigste) wäre die, einen Systemaufruf zu
implementieren der die IP-Adressen aller verbundenen
Sockets von einer Adresse in eine andere ändert.
&man.ppp.8; würde diesen Aufruf benutzen, um die
Sockets aller laufenden Programme zu ändern, nachdem
eine neue IP-Adresse ausgehandelt worden ist. Der gleiche
Systemaufruf könnte von DHCP-Clients benutzt werden,
wenn sie gezwungen werden, einen re-bind() auf ihren
Sockets auszuführen.Noch eine andere Möglichkeit wäre die, das
Aktivieren von Schnittstellen ohne IP-Adresse zu erlauben.
Ausgehende Paketen würde die IP-Adresse
255.255.255.255 gegeben, bis der erste ioctl() mit
SIOCAIFADDR erfolgt. Dies würde in der
vollständigen Verbindung des Sockets resultieren. Es
wäre die Aufgabe von &man.ppp.8;, die
Absender-IP-Adresse zu ändern, allerdings nur dann,
wenn sie 255.255.255.255 lautet und nur die IP-Adresse und
IP-Prüfsumme müssten geändert werden.
Dies wäre allerdings keine besonders elegante
Lösung, da der Kernel fehlerhafte Pakete an eine
unzureichend konfigurierte Schnittstelle senden
würde, in der Annahme, dass andere Mechanismen
in der Lage sind, diese Dinge rückwirkend zu
beheben.Warum laufen die meisten Spiele mit dem
Schalter nicht?Der Grund dafür, dass Spiele und andere
Programme nicht funktionieren, wenn libalias benutzt wird,
ist der, dass der Rechner außerhalb des lokalen
Netzes versucht, eine Verbindung aufzubauen und
(unaufgefordert) UDP-Pakete an den Rechner innerhalb des
lokalen Netzes zu senden. Die Software, die für die
NAT zuständig ist, weiß nicht, dass sie
diese Pakete an den internen Rechner weiterleiten
soll.Um dies zu beheben, stellen Sie zunächst sicher,
dass die Software, mit der Sie Probleme haben, die
einzige ist, die gerade läuft. Benutzen Sie dann
entweder tcpdump auf der tun-Schnittstelle des Gateways
oder aktivieren Sie auf dem Gateway das Logging von TCP/IP
(set log +tcp/ip) unter
&man.ppp.8;.Wenn Sie nun das betreffende Programm starten, sollten
Sie sehen, wie Pakete den Gateway-Rechner passieren. Wenn
von außen etwas zurückkommt, wird es ignoriert
(das ist das Problem). Merken Sie sich die Portnummer
dieser Pakete und beenden Sie das betreffende Programm.
Wiederholen Sie diesen Schritt einige Male, um
festzustellen, ob die Portnummern konsistent sind. Falls
dem so ist, wird die folgende Zeile im entsprechenden
Abschnitt von /etc/ppp/ppp.conf
dafür sorgen, dass das Programm
funktioniert:nat port protointernalmachine:portportwobei für proto
entweder tcp oder
udp zu setzen ist,
internalmachine den Rechner
bezeichnet, an den die Pakete geschickt werden sollen und
port die betreffende
Portnummer.Sie können das Programm nicht auf einem anderen
Rechner benutzen, ohne die obige Zeile abzuändern und
die Benutzung des Programms auf zwei internen Rechnern
steht außer Frage - schließlich sieht die
Außenwelt Ihr gesamtes internes Netz so, als
wäre es ein einzelner Rechner.Falls die Portnummern nicht konsistent sind, gibt es
drei weitere Optionen:Ermöglichen Sie die Unterstützung durch
libalias. Beispiele für spezielle
Fälle finden Sie in
/usr/src/lib/libalias/alias_*.c
(alias_ftp.c ist ein schöner
Prototyp). Hierzu gehört für
gewöhnlich das Lesen bestimmter, erkannter,
ausgehender Pakete, die Identifizierung der
Instruktion, die den entfernten Rechner dazu
veranlasst, auf einem bestimmten (wahlfreien)
Port eine Verbindung zurück zum lokalen Rechner
herzustellen, sowie das Erstellen einer
Route in der Aliastabelle, so dass
nachfolgende Pakete wissen, wohin sie
gehören.Dieses ist zwar die komplizierteste Lösung,
aber die beste, die auch dafür sorgt, dass
die Software auf mehreren Rechnern
funktioniert.Benutzen Sie einen Proxy. Die Anwendung
könnte z.B. socks5 unterstützen, oder (wie
im Fall von cvsup) eine Option
passiv besitzen, die stets verhindert,
dass verlangt wird, dass der Partner eine
Verbindung zurück zur lokalen Maschine
aufbaut.Leiten Sie mit nat addr alles
zur lokalen Maschine um. Dieses Vorgehen ähnelt
dem mit einem Vorschlaghammer.Hat jemand eine Liste mit nützlichen Portnummern
erstellt?Noch nicht, aber hieraus könnte eine solche
entstehen (falls Interesse besteht). In jedem Beispiel
sollte internal durch die
IP-Adresse der Maschine ersetzt werden, auf der das Spiel
laufen soll.Asheron's Callnat port udp
internal:65000
65000Konfigurieren Sie das Spiel manuell auf Port 65000
um. Wenn Sie von mehreren Rechner aus spielen wollen,
weisen Sie jedem eine eindeutige Portnummer zu (also
65001, 65002, u.s.w.) und fügen Sie für jede
Maschine eine eigene nat port Zeile
ein.Half Lifenat port udp
internal:27005
27015PCAnywhere 8.0nat port udp
internal:5632
5632nat port tcp
internal:5631
5631Quakenat port udp
internal:6112
6112Quake 2nat port udp
internal:27901
27910nat port udp
internal:60021
60021nat port udp
internal:60040
60040Red Alertnat port udp
internal:8675
8675nat port udp
internal:5009
5009Was sind FCS-Fehler?FCS steht für Frame
Check Sequence.
Jedes PPP-Paket besitzt eine Checksumme, um
sicherzustellen, dass die empfangenen Daten dieselben
sind, wie die versendeten. Falls die FCS eines
ankommenden Paketes fehlerhaft ist, wird das Paket
verworfen und der Zähler HDLC FCS wird erhöht.
Der HDLC-Fehlerwert kann durch den Befehl show
hdlc angezeigt werden.Falls Ihre Leitung schlecht ist (oder falls Ihr
serieller Treiber Pakete verwirft), werden sie
gelegentliche FCS-Fehler sehen. Normalerweise lohnt es
sich nicht, sich hierüber Gedanken zu machen, obwohl
das Kompressionsprotokoll hierdurch wesentlich langsamer
wird. Wenn Sie ein externes Modem besitzen, stellen Sie
sicher, dass Ihr Kabel ausreichend gegen
Interferenzen abgeschirmt ist - das könnte das
Problem beseitigen.Falls Ihre Leitung einfriert, sobald die Verbindung
steht, und viele FCS-Fehler auftreten, könnte das
daran liegen, dass Ihre Leitung nicht 8-Bit-rein ist.
Stellen Sie sicher, dass Ihr Modem keinen
Software-Flow-Control (XON/XOFF) verwendet. Falls Ihre
Datenschnittstelle Software-Flow-Control verwenden
muss, benutzen Sie den Befehl
set accmap 0x000a0000, um &man.ppp.8;
zu sagen, dass es die Zeichen ^Q
und ^S maskieren soll.Ein weiterer Grund dafür, dass zu viele
FCS-Fehler auftreten, könnte der sein, dass das
andere Ende aufgehört hat, ppp zu
sprechen. Aktivieren Sie async
Logging, um festzustellen, ob es sich bei den eingehenden
Daten tatsächlich um einen login- oder Shell-Prompt
handelt. Wenn Sie am anderen Ende einen Shell-Prompt
haben, ist es möglich, durch den Befehl
close lcp &man.ppp.8; zu beenden, ohne
die Verbindung zu beenden (ein folgender
term-Befehl wird Sie wieder mit der
Shell auf dem entfernten Rechner verbinden.Falls nichts in Ihrer Logdatei darauf hindeutet, warum
die Verbindung beendet wurde, sollten Sie den
Administrator des externen Rechners (Ihren ISP?) fragen,
warum die Sitzung beendet worden ist.Wieso hängen die Verbindungen meiner &macos;- und
&windows; 98-Maschinen (und eventuell auch andere
µsoft; Betriebssysteme), wenn auf meinem Gateway
PPPoE läuft?Vielen Dank an Michael Wozniak
mwozniak@netcom.ca für die
Erklärung und an Dan Flemming
danflemming@mac.com für die
Lösung für &macos;.Die Ursache des Problems ist ein so genannter
Black Hole Router. &macos; und &windows; 98
(und wahrscheinlich auch die anderen Betriebssysteme von
Microsoft) senden TCP Pakete, bei denen zum einen die
angeforderte Segmentgröße zu groß
für einen PPPoE-Rahmen ist (die Default-MTU für
Ethernet beträgt 1500 Byte) und
bei denen das don't fragment Bit gesetzt
ist (das ist bei TCP allerdings Standard). Außerdem
sendet der Router beim Provider nicht die eigentlich
notwendigen must fragment-Meldungen zu dem
Webserver, von dem Sie gerade eine Seite laden wollen. Es
ist auch möglich, dass diese Meldung zwar
erzeugt, aber danach von einem Firewall vor dem Webserver
abgefangen wird. Wenn Ihnen dieser Webserver nun ein
Paket schickt, das nicht in einen PPPoE-Rahmen passt,
dann verwirft der Router dieses Paket und die Seite wird
nicht geladen (einige Seiten/Grafiken werden geladen, weil
ihre Größe kleiner ist als die MSS). Dies
scheint leider der Normalfall zu sein (wenn die Leute doch
nur wüssten, wie man einen Router
konfiguriert... stöhn...)Eine der möglichen Lösungen für dieses
Problem ist die Erzeugung des folgenden Schlüssels in
der Registry des Windows-Clients:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000\MaxMTUDer Schlüssels sollte vom Typ String sein und den
Wert 1436 haben, da einige ADSL-Router
nicht mit größeren Paketen umgehen können.
Wenn Sie &windows; 2000 verwenden, müssen Sie
hingegen den Schlüssel
Tcpip\Parameters\Interfaces\ID der
Netzwerkkarte\MTU benutzen,
außerdem müssen Sie als Typ DWORD
verwenden.Die Knowledge Base von µsoft; enthält weitere
Informationen darüber, wie sie die MTU einer
&windows;-Maschine ändern, damit diese mit einem
NAT-Router korrekt zusammenarbeitet. Vom besonderen
Interesse sind die Artikel Q158474
- &windows; TCPIP Registry Entries und Q120642
- TCPIP & NBT Configuration Parameters for
&windowsnt;.Bei &windows; 2000 können Sie alternativ auch, wie
im Artikel 120642 beschrieben, mit regedit das DWORD
Tcpip\Parameters\Interfaces\ID der
Netzwerkkarte\EnablePMTUBHDetect
auf 1 setzen.Mit den Bordmitteln von &macos; ist es leider nicht
möglich, die TCP/IP-Einstellungen zu verändern.
Es gibt jedoch kommerzielle Lösungen wie zum Beispiel
OTAdvancedTuner (OT steht für OpenTransport, den
TCP/IP-Stack von &macos;) von Sustainable
Softworks, mit denen man die TCP/IP-Einstellungen
bearbeiten kann. Wenn Sie als &macos;-Anwender NAT
benutzen, sollten Sie im entsprechenden drop-down
Menü den Punkt ip_interface_MTU
auswählen und in der Dialogbox
1450 statt 1500
eingeben. Aktivieren Sie den Punkt Save as Auto
Configure und klicken Sie danach auf
Make Active.&man.ppp.8; kennt seit Version 2.3 den Befehl
enable tcpmssfixup, mit dem die MSS
automatisch korrigiert wird. Wenn Sie einen ältere
Version von &man.ppp.8; benutzen müssen, könnte
der Port tcpmssd für Sie
interessant sein.Nichts von alledem hilft - ich bin
verzweifelt! Was soll ich machen?Falls alles andere fehlschlägt, senden Sie
möglichst umfangreiche Informationen,
einschließlich Ihrer Konfigurationsdateien, wie Sie
&man.ppp.8; starten, die relevanten Teile Ihrer Logdateien
und die Ausgabe des Befehls netstat -rn
(vor und nach Aufbau der Verbindung) an die
Mailingliste &a.de.questions; oder die Newsgroup de.comp.os.unix.bsd.
Irgend jemand sollte Ihnen dann weiterhelfen.Serielle VerbindungenDieses Kapitel beantwortet häufig gestellte Fragen zu
seriellen Verbindungen mit FreeBSD. PPP und SLIP werden im
Abschnitt Netzwerke behandelt.Wie kann ich feststellen, ob FreeBSD meine seriellen
Schnittstellen gefunden hat?Wenn der FreeBSD Kernel bootet, testet er die
seriellen Schnittstellen, für die er konfiguriert
wurde. Sie können entweder Ihrem System aufmerksam
beim Booten zusehen und die angezeigten Nachrichten lesen,
oder Sie führen den Befehl&prompt.user; dmesg | grep sioaus, nachdem Ihr System hochgefahren ist und
läuft.Hier ist ein Beispiel einer Ausgabe nach dem oben
genannten Befehl:
sio0: at 0x3f8-0x3ff irq 4 on isa
sio0: type 16550A
sio1: at 0x2f8-0x2ff irq 3 on isa
sio1: type 16550A
Es zeigt zwei serielle Schnittstellen. Die erste
verwendet Port-Adresse 0x3f8, IRQ 4 und
hat einen 16550A UART Chip. Die zweite benutzt ebenfalls
einen 16550A UART, jedoch Port-Adresse
0x2f8 und IRQ 3. Modemkarten werden
wie serielle Schnittstellen behandelt. Der einzige
Unterschied ist, dass an diesen Schnittstellen immer
ein Modem angeschlossen ist.Der GENERIC Kernel beinhaltet
Unterstützung für zwei serielle Schnittstellen,
die den im Beispiel genannten Port und IRQ verwenden.
Wenn diese Einstellungen nicht richtig für Ihr System
sind, Sie Modemkarten hinzugefügt oder mehr serielle
Schnittstellen haben als Ihre Kernelkonfiguration
zulässt, konfigurieren Sie Ihren Kernel einfach
neu. In dem Kapitel über die Kernelkonfiguration finden
Sie mehr Details.Wie kann ich feststellen, ob FreeBSD meine Modemkarten
gefunden hat?Die vorherige Frage sollte darauf eine Antwort
geben.Wie kann ich auf die seriellen Schnittstellen in
FreeBSD zugreifen?Die in &man.sio.4; beschriebene serielle Schnittstelle
sio2 (COM3
unter &ms-dos;/&windows;), ist
/dev/cuaa2 für
Geräte mit abgehenden Verbindungen und
/dev/ttyd2 für Geräte mit
eingehenden Verbindungen. Was ist der Unterschied
zwischen den beiden Geräteklassen?Sie benutzen
ttydX
für eingehende Verbindungen. Wird
/dev/ttydX
im blockierenden Modus geöffnet, wartet ein
Prozess darauf, dass das entsprechende
cuaaX
Gerät inaktiv und der Empfangssignalpegel
Mit Empfangssignalpegel oder
Trägersignalerkennung wird hier
die carrier detect
Leitung bezeichnet.
aktiv ist. Wird das
cuaaX
Gerät geöffnet, vergewissert es sich, dass
die serielle Schnittstelle nicht bereits von dem
ttydX
Gerät in Gebrauch ist. Sollte die Schnittstelle
verfügbar sein, stiehlt es sie von dem
ttydX
Gerät. Das
cuaaX
Gerät kümmert sich nicht um
Trägersignalerkennung. Mit diesem Schema und einem
automatisch antwortenden Modem, können sich Benutzer
von aussen einloggen, Sie können weiterhin mit
demselben Modem wählen und das System kümmert
sich um die Konflikte.Wie kann ich die Unterstützung für eine
Karte mit mehreren seriellen Schnittstellen
aktivieren?Die Sektion über die Kernelkonfiguration bietet
Informationen darüber, wie Sie Ihren Kernel
konfigurieren. Für eine Karte mit mehreren seriellen
Schnittstellen, schreiben Sie eine &man.sio.4; Zeile
für jede serielle Schnittstelle auf der Karte in die
Kernelkonfigurationsdatei. Aber achten Sie darauf, den
IRQ und die Vektorbezeichnung nur in einem der
Einträge zu platzieren. Alle seriellen Schnittstellen
auf der Karte sollten sich einen IRQ teilen. Daher
sollten Sie den IRQ nur beim letzten Eintrag angeben.
Aktivieren Sie auch die COM_MULTIPORT
Option.Das folgende Beispiel ist geeignet für eine AST
Karte mit 4 seriellen Schnittstellen, die IRQ 7
benutzt:
options "COM_MULTIPORT"
device sio4 at isa? port 0x2a0 tty flags 0x781
device sio5 at isa? port 0x2a8 tty flags 0x781
device sio6 at isa? port 0x2b0 tty flags 0x781
device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr
Die Flags zeigen an, dass die
Master-Schnittstelle die Minor-Nummer 7
(0x700) hat, Diagnosen während des
Bootens ermöglicht sind (0x080),
und dass sich alle Schnittstellen einen IRQ teilen
(0x001).Kann FreeBSD mehrere Karten mit mehreren seriellen
Schnittstellen mit den gleichen IRQs verwalten?Noch nicht. Sie müssen für jede Karte einen
anderen IRQ verwenden.Kann ich die vorgegebenen seriellen Parameter für
eine Schnittstelle einstellen?Das
ttydX
(oder
cuaaX)
Gerät ist das reguläre Gerät, das man in
Anwendungen öffnet. Wenn ein Prozess es
öffnet, hat es die voreingestellten Terminal
Eingabe/Ausgabe-Einstellungen. Sie können diese
Einstellungen mit dem Befehl&prompt.root; stty -a -f /dev/ttyd1ansehen. Wenn Sie die Einstellungen für dieses
Gerät ändern, sind die Einstellungen
gültig, bis das Gerät geschlossen wird. Wird es
danach geöffnet, hat es wieder die vorgegebenen
Einstellungen. Um Änderungen an den vorgegebenen
Einstellungen vorzunehmen, können Sie das
Anfangsstatus-Gerät öffnen und dessen
Einstellungen anpassen. Um zum Beispiel den
CLOCAL Modus, 8 Bits und
XON/XOFF Datenflusskontrolle als
Standard für ttyd5 einzustellen, geben Sie&prompt.root; stty -f /dev/ttyid5 clocal cs8 ixon ixoffein. Eine gute Stelle um dies zu tun ist in
/etc/rc.serial. Jetzt hat eine
Anwendung diese Einstellungen als Standardwerte, wenn sie
ttyd5 öffnet. Die Anwendung
kann die Einstellungen jedoch immer noch nach Belieben
verändern.Man aber kann auch bestimme Einstellungen davor
schützen, von einer Anwendung verändert zu
werden, indem man Veränderungen am lock
state Gerät vornimmt. Um beispielsweise die
Geschwindigkeit von ttyd5 auf 57600
bps festzusetzen:&prompt.root; stty -f /dev/ttyld5 57600Wenn jetzt eine Anwendung ttyd5
öffnet und versucht die Geschwindigkeit zu
verändern, wird diese bei 57600 bps bleiben.Natürlich sollten Sie das Schreiben auf die
Anfangsstatus- und lock state-Geräte nur
root erlauben. Das &man.MAKEDEV.8;
Skript tut dies nicht, wenn es die
Geräte-Einträge erstellt.Wie kann ich Einwahl-Logins über mein Modem
aktivieren?Also Sie wollen ein Internet Service Provider werden,
ja? Als erstes brauchen Sie eines oder mehrere Modems,
die automatisches Antworten beherrschen. Ihr Modem sollte
auf Trägersignalerkennung reagieren und nicht fortlaufend
die Leitung offen halten. Es muss auflegen und sich
neu initialisieren können, wenn die Data
Terminal Ready (DTR) Leitung
ausgeschaltet wird. Es sollte wahrscheinlich
RTS/CTS oder gar keine lokale
Datenflusskontrolle benutzen. Zuletzt muss es
eine konstante Geschwindigkeit zwischen dem Computer und
sich selbst verwenden, aber es sollte (um die Anrufer
freundlich zu behandeln) eine Geschwindigkeit zwischen
sich und dem entfernten Modem aushandeln können.Für viele Modems, die mit dem Hayes Befehlssatz
kompatibel sind, erzeugt der folgende Befehl diese
Einstellungen und legt sie im nicht-flüchtigen
Speicher ab:AT &C1 &D3 &K3 &Q6 S0=1 &WDie Sektion über das
Senden von AT-Befehlen bietet weitere
Informationen, wie man diese Einstellungen vornimmt, ohne
zu einem &ms-dos; Terminalprogramm zu flüchten.Als nächstes erstellen Sie einen Eintrag in
/etc/ttys für das Modem. Diese
Datei listet alle Schnittstellen auf, auf denen das
Betriebssystem Anmeldeversuche erwartet. Fügen Sie
eine solche Zeile hinzu:ttyd1 "/usr/libexec/getty std 57600" dialup on insecureDiese Zeile bedeutet, dass an der zweiten
seriellen Schnittstelle (/dev/ttyd1)
ein Modem angeschlossen ist, das mit 57600 bps läuft
und keine Parität besitzt
(std.57600 aus
/etc/gettytab). Der Terminal-Typ
für diese Schnittstelle ist dialup
(Einwahl). Die Schnittstelle ist
eingeschaltet (on) und
unsicher (insecure) –
das bedeutet, man kann sich über diese Schnittstelle
nicht als root einloggen. Für
Einwahlanschlüsse wie diesen, benutzen Sie den
ttydX Eintrag.Es ist relativ geläufig,
dialup als Terminal-Typ zu verwenden.
Viele Benutzer richten in ihren
.profile oder
.login Dateien eine Abfrage für
das eigentliche Terminal ein, wenn der Start-Typ
dialup ist. Das Beispiel zeigt die
Schnittstelle als unsicher und um über diese
Schnittstelle root zu werden,
müssen Sie sich als normaler Benutzer einloggen und
&man.su.1;. Wenn sie
secure (sicher) als
Einstellung verwenden, kann sich root
direkt einloggen.Nachdem Sie Modifikationen in
/etc/ttys vorgenommen haben,
müssen Sie ein hangup oder
HUP Signal an &man.init.8;
senden:&prompt.root; kill -HUP 1Das bringt &man.init.8; dazu, die Datei
/etc/ttys neu einzulesen.
init startet dann an allen als
eingeschaltet (on) markierten
Schnittstellen die getty-Prozesse. Sie können
herausfinden ob noch Logins für Ihre Schnittstelle
verfügbar sind, wenn Sie folgendes eingeben:&prompt.user; ps -ax | grep '[t]tyd1'Sie sollten etwas sehen, das so ähnlich aussieht
wie:747 ?? I 0:00:04 /usr/libexec/getty std.57600 ttyd1Wie kann ich ein Hardware-Terminal mit meiner FreeBSD
Box verbinden?Wenn Sie einen anderen Computer als Terminal für
Ihr FreeBSD System verwenden wollen, verbinden Sie die
beiden seriellen Schnittstellen mit einem Nullmodem-Kabel.
Wenn Sie ein echtes (Hardware-)Terminal
benutzen, lesen Sie die Begleitinformationen.Ändern Sie /etc/ttys wie
oben angegeben. Wenn Sie zum Beispiel ein WYSE-50
Terminal mit der fünften seriellen Schnittstelle
verbinden wollen, schreiben Sie einen Eintrag wie
diesen:ttyd4 "/usr/libexec/getty std.38400" wyse50 on secureDas Beispiel zeigt, dass die Schnittstelle an
/dev/ttyd4 mit einem wyse50 Terminal
mit 38400 bps und ohne Parität
(std.38400 aus
/etc/gettytab) verbunden ist und
root Logins möglich sind
(secure).Warum kann ich tip oder
cu nicht laufen lassen?Vielleicht sind auf Ihrem System die Programme
&man.tip.1; und &man.cu.1; nur von
uucp und der Gruppe
dialer ausführbar. Sie
können die Gruppe dialer
verwenden, um zu kontrollieren wer Zugriff auf Ihr Modem
oder entfernte Systeme hat. Fügen Sie sich einfach
selbst zur Gruppe dialer
hinzu.Als Alternative können Sie jeden Benutzer auf
Ihrem System &man.tip.1; und &man.cu.1; verwenden lassen,
dazu müssen Sie das folgende eingeben:&prompt.root; chmod 4511 /usr/bin/cu
&prompt.root; chmod 4511 /usr/bin/tipMein Hayes Modem wird nicht unterstützt – was
kann ich tun?Eigentlich ist die Onlinehilfe für &man.tip.1;
nicht mehr aktuell. Es gibt einen eingebauten,
allgemeinen Hayes Wähler. Verwenden Sie einfach
at=hayes in
/etc/remote.Der Hayes Treiber ist nicht schlau genug, um ein paar
der erweiterten Merkmale von neueren Modems zu erkennen –
Nachrichten wie BUSY, NO
DIALTONE oder CONNECT 115200
verwirren ihn nur. Sie sollten diese Nachrichten mit
Hilfe von ATX0&W abschalten, wenn
Sie tip benutzen.Das Anwahl-Timeout von &man.tip.1;
beträgt 60 Sekunden. Ihr Modem sollte weniger
verwenden, oder tip denkt, dass
ein Kommunikationsfehler vorliegt. Versuchen Sie es mit
ATS7=45&W.Tatsächlich unterstützt die ausgelieferte
Version von &man.tip.1; es noch nicht
vollständig. Die Lösung ist,
tipconf.h im Verzeichnis
/usr/src/usr.bin/tip/tip zu
editieren. Dafür benötigen Sie natürlich
die Quellcode Distribution.Editieren Sie die Zeile #define HAYES
0 in #define HAYES 1 um.
Dann führen Sie make und
make install aus. Es sollte jetzt
funktionieren.Wie soll ich die AT Befehle eingeben?Erstellen Sie einen so genannten
direct Eintrag in
/etc/remote. Wenn Ihr Modem zum
Beispiel an der ersten seriellen Schnittstelle,
/dev/cuaa0, angeschlossen ist, dann
fügen Sie die folgende Zeile hinzu:cuaa0:dv=/dev/cuaa0:br#19200:pa=noneVerwenden Sie die höchste bps Rate, die Ihr Modem
in der br Fähigkeit unterstützt. Geben Sie dann
tip cuaa0 ein
und Sie sind mit Ihrem Modem verbunden.Wenn auf Ihrem System keine
/dev/cuaa0 Datei existiert, geben Sie
folgendes ein:&prompt.root; cd /dev
&prompt.root; sh MAKEDEV cuaa0Oder benutzen Sie cu als
root mit dem folgenden Befehl:&prompt.root; cu -lline -sspeedline steht für die
serielle Schnittstelle (/dev/cuaa0)
und speed für die
Geschwindigkeit (57600). Wenn Sie mit
dem Eingeben der AT Befehle fertig sind, beenden Sie mit
~..Wieso funktioniert das <@>
Zeichen für die pn Fähigkeit nicht?Das <@> Zeichen in der
Telefonnummerfähigkeit sagt tip, dass es in der
Datei /etc/phones nach einer Nummer
suchen soll. Aber <@> ist auch
ein spezielles Zeichen in den Dateien, in denen
Fähigkeiten beschrieben werden, wie
/etc/remote. Schreiben Sie es mit
einem '\' (backslash):pn=\@Wie kann ich von der Kommandozeile eine Telefonnummer
wählen?Stellen Sie einen allgemeinen Eintrag
in /etc/remote. Zum
Beispiel:
tip115200|Dial any phone number at 115200 bps:\
:dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
:dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
Mit einem Befehl wie tip -115200
5551234 können Sie dann wählen.
Sollten Sie &man.cu.1; im Gegensatz zu &man.tip.1;
bevorzugen, verwenden Sie einen allgemeinen
cu-Eintrag:
cu115200|Use cu to dial any number at 115200bps:\
:dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
Zum Wählen können Sie dann cu
5551234 -s 115200 eingeben.Muss ich dabei jedes Mal die bps Rate
angeben?Schreiben Sie einen tip1200 oder
einen cu1200 Eintrag, aber geben Sie
auch die bps Rate an, die Ihr Modem wirklich
unterstützt. Leider denkt &man.tip.1;, dass
1200 bps ein guter Standardwert ist und deswegen sucht es
nach einem tip1200-Eintrag.
Natürlich müssen Sie nicht wirklich 1200 bps
benutzen.Wie kann ich möglichst komfortabel über
einen Terminal-Server auf verschiedene Rechner
zugreifen?Sie müssen nicht warten bis Sie verbunden sind,
und jedes Mal CONNECT
Rechner eingeben,
benutzen Sie tip's cm Fähigkeit.
Sie können diese Einträge in
/etc/remote verwenden:
pain|pain.deep13.com|Forrester's machine:\
:cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
:cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
:dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:
Mit den Befehlen tip pain oder
tip muffin können Sie eine
Verbindungen zu den Rechnern pain oder
muffin herstellen; mit tip
deep13 verbinden Sie sich mit dem Terminal
Server.Kann tip mehr als eine Verbindung für jede Seite
ausprobieren?Das ist oft ein Problem, wenn eine Universität
mehrere Telefonleitungen hat und viele tausend Studenten
diese benutzen wollen.Erstellen Sie einen Eintrag für Ihre
Universität in /etc/remote und
benutzen Sie <\@> für die
pn Fähigkeit:
big-university:\
:pn=\@:tc=dialout
dialout:\
:dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:
Listen Sie die Telefonnummern der Universität
in /etc/phones auf:
big-university 5551111
big-university 5551112
big-university 5551113
big-university 5551114
&man.tip.1; probiert jede der Nummern in der
aufgelisteten Reihenfolge und gibt dann auf. Möchten
Sie, dass tip beim Versuchen eine
Verbindung herzustellen nicht aufgibt, lassen Sie es in
einer while-Schleife laufen.Warum muss ich zweimal
CtrlP tippen, um ein
CtrlP zu senden?CtrlP ist das voreingestellte Zeichen, mit dem eine
Übertragung erzwungen werden kann und wird benutzt,
um &man.tip.1; zu sagen, dass das nächste
Zeichen direkt gesendet werden soll und nicht als
Fluchtzeichen interpretiert werden soll. Mit Hilfe der
~s Fluchtsequenz, mit der man Variablen
setzen kann, können Sie jedes andere Zeichen als
force-Zeichen definieren.Geben Sie
~sforce=zeichen
ein und drücken Sie Enter. Für
zeichen können Sie ein
beliebiges einzelnes Zeichen einsetzen. Wenn Sie
zeichen weglassen, ist das
force-Zeichen nul, das Sie mit
Ctrl2 oder
CtrlSPACE eingeben können. Ein
guter Wert für zeichen ist
ShiftCtrl6, welches ich erst auf ein paar
Terminal-Servern in Benutzung gesehen habe.Sie können das force-Zeichen auch
bestimmen, indem Sie in $HOME/.tiprc
das folgende einstellen:force=single-charWarum ist auf einmal alles was ich schreibe in
GROSSBUCHSTABEN??Sie müssen
CtrlA eingegeben haben, das
raise-Zeichen von &man.tip.1; das speziell
für Leute mit defekten Caps Lock Tasten
eingerichtet wurde. Benutzen Sie ~s wie
oben und setzen Sie die Variable raisechar auf
etwas, das Ihnen angemessen erscheint. Tatsächlich
kann die Variable auf das gleiche Zeichen wie das
force-Zeichen gesetzt werden, wenn Sie
diese Fähigkeiten niemals benutzen wollen.Hier ist ein Muster der .tiprc
Datei, perfekt für Emacs
Benutzer, die oft
Ctrl2 und
CtrlA tippen müssen:
force=^^
raisechar=^^
Das ^^ steht für
ShiftCtrl6.Wie kann ich Dateien mit tip
übertragen?Wenn Sie mit einem anderen &unix; System kommunizieren,
können Sie Dateien senden und empfangen – mit
~p (put) und ~t
(take). Diese Befehle lassen &man.cat.1; und &man.echo.1;
auf dem entfernten System laufen, um Dateien zu
akzeptieren und zu senden. Die Syntax ist:
~p <local-file> [<remote-file>]
~t <remote-file> [<local-file>]
Es gibt keine Fehlerkontrolle, deshalb sollten Sie
besser ein anderes Protokoll benutzen, wie zmodem.Wie kann ich zmodem mit tip
laufen lassen?Zuerst installieren Sie ein zmodem Programm aus der
Ports-Sammlung (eines der beiden aus der comms-Kategorie,
lrzsz oder
rzsz).Um Dateien zu empfangen, starten Sie das Programm zum
Senden auf dem entfernten Computer. Drücken Sie dann
Enter gefolgt von ~C rz (oder
~C lrz, wenn Sie lrzsz installiert
haben), um diese lokal zu empfangen.Um Dateien zu senden, starten Sie das Programm zum
Empfangen auf dem entfernten Computer. Drücken Sie
dann Enter gefolgt von ~C sz
Dateien (oder
~C lsz
Dateien), um sie zum
entfernten System zu senden.Verschiedene FragenFreeBSD benutzt viel mehr Swap-Speicher als &linux;.
Warum?Es sieht nur so aus, als ob FreeBSD mehr Swap benutzt,
als &linux;. Tatsächlich ist dies nicht der Fall. In
dieser Hinsicht besteht der Hauptunterschied zwischen
FreeBSD und &linux; darin, dass FreeBSD vorbeugend
vollkommen untätige, unbenutzte Seiten aus dem
Hauptspeicher in den Swap-Bereich auslagert, um mehr
Hauptspeicher für die aktive Nutzung zur
Verfügung zu stellen. &linux; tendiert dazu, nur als
letzten Ausweg Seiten in den Swap-Bereich auszulagern.
Die spürbar höhere Nutzung des Swap-Speichers
wird durch die effizientere Nutzung des Hauptspeichers
wieder ausgeglichen.Beachten Sie, dass FreeBSD in dieser Hinsicht
zwar vorbeugend arbeitet, es entscheidet jedoch nicht
willkürlich, Seiten auszulagern, wenn das System
vollkommen untätig ist. Deshalb werden Sie
feststellen, dass nicht alle Seiten Ihres Systems
ausgelagert wurden, wenn Sie morgens aufstehen, nachdem
das System eine Nacht lang nicht benutzt worden
ist.Warum zeigt mir &man.top.1; so wenig freien Speicher
an, obwohl nur wenige Programme laufen?Die Antwort ist ganz einfach: Freier Speicher ist
verschwendeter Speicher. Der FreeBSD Kernel verwendet den
von den Programmen nicht genutzten Speicher automatisch
für den Plattencache. Die in &man.top.1; für
Inact, Cache und
Buf gemeldeten Werte stehen alle
für zwischengespeicherte Daten mit unterschiedlichem
Alter. Wenn das System wiederholt auf Daten zugreifen
muss, braucht es nicht auf die langsame Platte
zuzugreifen, da die Daten noch zwischengespeichert sind.
Dadurch erhöht sich die Performance. Ganz generell
ist es ein gutes Zeichen, wenn &man.top.1; einen kleinen
Wert bei Free anzeigt, solange der Wert
nicht extrem klein ist.Anmerkung des Übersetzers: Mit extrem
klein sind hier Werte unterhalb 512 KByte
gemeint.Warum ändert chmod die
Zugriffsrechte auf symbolische Links nicht?Für symbolische Links gibt es keine separaten
Zugriffsrechte und standardmäßig folgt
&man.chmod.1; dem Link nicht; die Zugriffsrechte für
die Datei, auf die der symbolische Link zeigt, werden also
nicht verändert. Wenn Sie eine Datei mit dem Namen
foo und einen auf diese Datei
zeigenden symbolischen Link mit dem Namen
bar haben, wird das folgende Kommando
niemals einen Fehler melden.&prompt.user; chmod g-w barTrotzdem werden die Zugriffsrechte für
foo nicht geändert.Hierzu müssen Sie entweder
oder zusammen mit der Option
benutzen. Weitere Informationen
finden Sie in den Manualpages &man.chmod.1; und
&man.symlink.7;.Die Option bewirkt ein
rekursives &man.chmod.1;.
Seien Sie vorsichtig, wenn Sie bei
&man.chmod.1; Verzeichnisse oder symbolische
Links zu Verzeichnissen angeben. Wenn Sie die
Zugriffsrechte eines Verzeichnisses ändern
möchten, das durch einen symbolischen Link
referenziert wird, benutzen Sie &man.chmod.1;
ohne irgendwelche Optionen und folgen dem symbolischen
Link durch einen abschließenden Schrägstrich
(/). Falls z.B.
foo ein symbolischer Link zum
Verzeichnis bar ist und Sie die
Zugriffsrechte von foo
(tatsächlich bar) ändern
möchten, dann benutzen Sie etwas ähnliches
wie:&prompt.user; chmod 555 foo/Durch den abschließenden Schrägstrich folgt
&man.chmod.1; dem symbolischen Link
foo, um die Zugriffsrechte für
das Verzeichnis bar zu
ändern.Kann ich DOS-Programme unter FreeBSD
ausführen?Ja. Sie können
emulators/doscmd
verwenden, das über die Ports-Sammlung verfügbar
ist.doscmd war früher
Teil des Basissystems von &os;, es wurde aber vor der
Veröffentlichung von &os; 5.3 daraus
entfernt.Falls doscmd nicht ausreicht,
können Sie den Port
emulators/pcemu
verwenden, der einen 8088 und genug BIOS-Funktionen emuliert,
um DOS-Textanwendungen laufen zu lassen. Der Port
benötigt das X-Window-System.Was muss ich tun, um die FreeBSD-Dokumentation in
meine Muttersprache zu übersetzen?Informationen zu diesem Thema finden Sie in der FAQ
des FreeBSD German Documentation Project.Warum kommen alle meine Mails, die ich an @FreeBSD.org
schicke, wieder zurück?Das Mailsystem von FreeBSD.org verwendet einige der
strengeren Überprüfungen von
Postfix für eingehende Mails.
Mails, bei denen es Anzeichen für Konfigurationsprobleme
oder Spam gibt, werden nicht akzeptiert. Dies kann aus einem
der folgenden Gründe geschehen:Die Mail kommt von einem System oder Netzwerk,
dass für Spam-Aktivitäten bekannt
ist.Die Mailserver von FreeBSD akzeptierten keine
Mails von bekannten Spam-Quellen. Wenn Sie eine
Firma oder Domain benutzen, die Spam erzeugt oder
verteilt, sollten Sie sich einen anderen ISP
suchen.Der Mailtext enthält HTML.Mail sollte immer im Klartext gesendet werden, Sie
sollten ihr Mailprogramm entsprechend
einstellen.Das Mailsystem kann die IP-Adresse des
einliefernden Systems nicht in einen symbolischen
Namen umwandeln.Funktionierendes reverse DNS ist eine
Vorbedingung, damit ihre Mails angenommen wird.
Sorgen Sie dafür, dass der reverse DNS
für Ihren Mailserver korrekt konfiguriert wird.
Viele Anbieter für Privatkunden geben Ihnen diese
Möglichkeit nicht. In diesem Fall sollten Sie
Ihre Mails über den Mailserver Ihres Providers
versenden.Der Rechnername, der im EHLO/HELO Teil der SMTP
Kommunikation übergeben wird, kann nicht zu einer
IP-Adresse aufgelöst werden.Damit die E-Mail akzeptiert wird, brauchen Sie einen
voll qualifizierten Rechnernamen, der im DNS eingetragen ist.
Wenn Sie diesen nicht besitzen, benutzen Sie bitte den
Mailserver Ihres Providers, um E-Mails zu verschicken.Die Message-ID Ihrer Mail endet in
localhost.Einige Mail-Clients generieren eine Message-ID, die
nicht akzeptiert wird. Sie müssen Ihren Mail-Client
so konfigurieren, dass er eine gültige Message-ID
generiert. Alternativ können Sie die Message-ID von
Ihrem Mailserver umschreiben lassen.Wo kann ich einen freien FreeBSD-Account bekommen?Das FreeBSD Project bietet zwar keinen freien Zugang
zu seinen Servern an; andere Firmen bieten jedoch frei
zugängliche &unix; Systeme. Die Kosten variieren und
es kann sein, dass nicht alle Dienste zur
Verfügung stehen.Arbornet,
Inc, auch als M-Net bekannt, bietet seit 1983
uneingeschränkten Zugang zu &unix; Systemen.
Zunächst wurde eine Altos-Maschine mit System III
benutzt, 1991 erfolgte dann der Wechsel zu BSD/OS. Im
Juni 2000 erfolgte ein erneuter Wechsel, diesmal zu
FreeBSD. M-Net bietet Zugang mit Telnet und SSH und den
Zugang zur gesamten Software von FreeBSD. Allerdings ist
der Zugriff auf das Netzwerk auf Mitglieder und
Gönner beschränkt, die eine Spende an die
nicht-kommerzielle Organisation geleistet haben. M-Net
stellt zusätzlich ein Mailbox-System und einen
interaktiven Chat zur Verfügung.Grex bietet
ein ganz ähnlichen Dienst wie M-Net an, dazu
gehören auch das Mailbox-System und der interaktive
Chat. Allerdings wird eine SUN4M mit &sunos;
benutzt.Was ist sup und wie benutze ich
es?Der Name SUP steht für
Software Update Protocol und wurde von der CMU (Carnegie
Mellon University) entwickelt, um ihre Entwicklungszweige
zu synchronisieren. Wir haben es benutzt, um entfernte
Sites mit unseren zentralen Quellcodeentwicklungen zu
synchronisieren.SUP ist nicht sehr bandbreitenfreundlich und wurde
abgelöst. Die derzeit empfohlene Methode, um Ihren
Quellcode auf dem neuesten Stand zu halten ist
CVSup.Wie heißt das niedliche rote Kerlchen?Er ist namenlos, es ist einfach der der BSD
Daemon. Wenn Sie ihm unbedingt einen Namen geben
wollen, rufen Sie ihn beastie. Beachten
Sie aber, dass beastie wie
BSD ausgesprochen wird.Weitere Informationen über den BSD daemon finden
Sie auf seiner
Homepage.Kann ich Bilder des BSD Daemon verwenden?Eventuell. Der BSD Daemon unterliegt dem Copyright
von Marshall Kirk McKusick. Wenn Sie genaue Informationen
über die Einschränkungen bei der Nutzung
brauchen, sollten Sie sein Statement
on the Use of the BSD Daemon Figure lesen.Kurz gesagt, können Sie den BSD Daemon benutzen,
solange es für einen privaten Zweck ist und die
Nutzung geschmackvoll bleibt. Für den kommerziellen
Einsatz brauchen Sie die Zustimmung von Kirk McKusick.
Weitere Informationen erhalten Sie auf der Webseite BSD
Daemon's home page.Woher kann ich Bilder des BSD Daemon bekommen?Einige Bilder in den Format xfig und eps sind unter
/usr/share/examples/BSD_daemon/ zu
finden.Ich habe in den Mailinglisten eine Abkürzung oder
einen Begriff gesehen, den ich nicht kenne. Wo erhalte
ich eine Erklärung dazu?Sehen Sie bitte im
FreeBSD-Glossar nach.Warum sollte mich die Farbe des Fahrradschuppens
interessieren?Die ganz, ganz kurze Antwort ist: Überhaupt nicht.
Die etwas längere Antwort lautet: Nur weil Sie in der
Lage sind, einen Fahrradschuppen zu bauen, müssen Sie
noch lange nicht andere davon abhalten, nur weil Ihnen die
Farbe nicht gefällt. Dies ist natürlich eine
Metapher dafür, dass Sie nicht eine Diskussion über
jede kleine Änderung beginnen sollen, nur weil Sie
das können. Einige Leute behaupten sogar, dass
die Anzahl der (nutzlosen) Kommentare über eine
Änderung umgekehrt proportional zur
Komplexität der Änderung ist.Die noch längere und vollständigere Antwort
ist, dass &a.phk; nach einen langen Diskussion
über das Thema "Soll &man.sleep.1; Sekundenbruchteile
als Parameter akzeptieren?" eine lange Mail mit dem Titel
A
bike shed (any colour will do) on greener
grass... schrieb. Die einschlägigen
Teile der Nachricht lauteten:
&a.phk; in freebsd-hackers,
2.10.1999Einige von Euch haben mich gefragt, Was
meinst Du mit dem Fahrradschuppen?Es ist eine lange oder eigentlich eher eine sehr
alte und doch sehr kurze Geschichte. C. Northcote
Parkinson schrieb in den frühen Sechzigern ein Buch
mit dem Namen Parkinson's Law, das viele
Einblick in die Beziehungen innerhalb des Managements
gibt.[ein paar Kommentare zum Buch gestrichen]In dem Beispiel mit dem Fahrradschuppen ist die
andere wichtige Komponente ein Kernkraftwerk. Ich
glaube, dass zeigt schon, wie alt dieses Buch
ist.Parkinson zeigte, dass man zum Vorstand gehen
kann und die Genehmigung für ein mehrere Millionen
oder sogar Milliarden Dollar teures Kernkraftwerk
bekommt; wenn man aber einen Fahrradschuppen bauen will,
wird man in endlose Diskussionen verwickelt.Laut Parkinson liegt das daran, dass ein
Kernkraftwerk so groß, so teuer und so kompliziert
ist, dass die Leute es nicht verstehen. Und bevor
sie versuchen, es zu verstehen, verlassen Sie sich
lieber darauf, dass irgend jemand sicherlich die
ganzen Details geprüft hat, bevor das Projekt bis
zum Vorstand gekommen ist. Im Buch von Richard P.
Feynmann finden sich einige interessante und sehr
passende Beispiele aus dem Gebiet von Los
Alamos.Ein Fahrradschuppen ist was anderes. Jeder kann an
seinem freien Wochenende einen bauen und hat trotzdem
noch genug Zeit für die Sportschau. Daher ist es
unwichtig, wie gut man sich vorbereitet und wie sinnvoll
der eigene Vorschlag ist. Irgend jemand wird die
Möglichkeit nutzen und zeigen, dass er seine
Arbeit tut, dass er aufmerksam ist, dass er
da ist.In Dänemark nennen wir dieses Verhalten
Seine Fingerabdrücke hinterlassen.
Es geht um persönlichen Stolz und Prestige; die
Chance, auf irgend etwas zu zeigen und zu sagen zu
können: Da! Das habe
Ich getan. Politiker leiden
sehr stark darunter, aber viele Leute verhalten sich so,
wenn sie die Chance haben. Denkt einfach mal an
Fußabdrücke in feuchtem Zement.
Nicht ganz ernstgemeinte FragenWie cool ist FreeBSD?Q. Hat irgend jemand Temperaturmessungen
durchgeführt, während FreeBSD läuft? Ich
weiss, dass &linux; cooler läuft, als DOS, habe
aber niemals gesehen, dass FreeBSD erwähnt
wurde. Es scheint sehr heiß zu laufen.A. Nein, aber wir haben zahlreiche Geschmackstests mit
verblendeten Freiwilligen durchgeführt, denen
außerdem zuvor 250 Mikrogramm LSD-25 verabreicht
wurden. 35% der Freiwilligen sagte, dass FreeBSD
nach Orange schmeckte, &linux; hingegen schmecke wie
purple haze (Anm. d. Übersetzers: Song
von Jimmy Hendrix und LSD-Marke). Keine der Gruppen hat
besondere Abweichungen der Temperatur erwähnt.
Eventuell hätten wir sämtliche Ergebnisse dieser
Untersuchung fortwerfen sollen, als wir festgestellt
haben, dass zu viele der Freiwilligen den Raum
während der Tests verlassen haben und dadurch die
Ergebnisse verfälscht haben. Wir glauben, dass
die meisten der Freiwilligen nun bei Apple sind und an
ihrer neuen scratch and sniff
Oberfläche arbeiten. Es ist ein lustiges, altes
Geschäft, in dem wir uns befinden!Ernsthaft, FreeBSD und &linux; benutzen beide die
Instruktion HLT (halt), wenn das System
untätig ist, wodurch der Energieverbrauch und dadurch
die produzierte Wärme reduziert wird. Falls Sie auch
noch APM (Advanced Power Management) konfiguriert haben,
kann FreeBSD Ihre CPU auch in einen Low-Power-Modus
bringen.Wer kratzt in meinen Speicherbänken??Q. Gibt es irgend etwas seltsames, das
FreeBSD tut, wenn ich den Kernel kompiliere, das dazu
führt, dass der Speicher ein kratzendes
Geräusch macht? Bei der Kompilierung (und auch
für einen kurzen Moment nach der Erkennung des
Floppy-Laufwerks beim Hochfahren), kommt ein seltsames
kratzendes Geräusch von etwas das die
Speicherbänke zu sein scheinen.A. Ja! In der BSD-Dokumentation finden Sie
häufige Verweise auf Daemons und was
die meisten Leute nicht wissen, ist, dass diese sich
auf echte, nicht-körperlichen Wesen beziehen, die
Besitz von Ihrem Computer ergriffen haben. Das kratzende
Geräusch, das von Ihrem Speicher kommt, ist in
Wirklichkeit hochtöniges Flüstern, das unter den
Daemons ausgetauscht wird, während Sie entscheiden,
wie Sie die verschiedenen Systemadministrationsaufgaben,
am besten erledigen.Wenn Sie das Geräusch stört, wird ein
fdisk /mbr sie vertreiben, aber wundern
Sie sich nicht, wenn sie feindlich reagieren und
versuchen, Sie aufzuhalten. Wenn Sie während der
Ausführung zu irgendeinem Zeitpunkt die teuflische
Stimme von Bill Gates aus dem eingebauten Lautsprecher
kommen hören, laufen Sie weg und sehen Sie sich auf
keinen Fall um! Befreit von dem ausgleichenden
Einfluss der BSD Dämonen sind die beiden
Dämonen von DOS und &windows; oft dazu in der Lage, die
totale Kontrolle über Ihre Maschine für die
ewige Verdammung Ihrer Seele zurückzuerlangen. Da
Sie jetzt die Wahrheit kennen, würden Sie es
vorziehen, sich an die Geräusche zu gewöhnen,
wenn Sie die Wahl hätten.Wie viele FreeBSD-Hacker braucht man, um eine
Glühbirne auszuwechseln?Eintausendeinhundertundneunundsechzig:Dreiundzwanzig, die sich bei -CURRENT beschweren,
dass das Licht aus ist;Vier, die behaupten, dass es sich um ein
Konfigurationsproblem handelt und dass solche Dinge
wirklich nach -questions gehören;Drei, die PRs hierzu einreichen, einer von ihnen wird
falsch unter DOC abgelegt und fristet sein Dasein im
Dunkeln;Einen, der eine ungetestete Glühbirne einreicht,
wonach buildworld nicht mehr funktioniert, und sie dann
fünf Minuten später wieder herausnimmt;Acht, die die PR-Erzeuger beschimpfen, weil sie zu
ihren PRs keine Patche hinzugefügt haben;Fünf, die sich darüber beschweren, dass
buildworld nicht mehr funktioniert;Einunddreißig, die antworten, dass es bei
ihnen funktioniert und dass sie cvsup wohl zu einigem
ungünstigen Zeitpunkt durchgeführt
haben;Einen, der einen Patch für eine neue
Glühbirne an -hackers schickt;Einen, der sich beschwert, dass es vor drei
Jahren Patches hierfür hatte, aber als er sie nach
-CURRENT schickte, sind sie einfach ignoriert worden und
er hatte schlechte Erfahrungen mit dem PR-System; nebenbei
ist die vorgeschlagene Glühbirne nicht
reflexiv;Siebenunddreißig, die schreien, dass
Glühbirnen nicht in das Basissystem gehören,
dass Committer nicht das Recht haben, solche Dinge
durchzuführen, ohne die Gemeinschaft zu konsultieren
und WAS GEDENKT -CORE HIER ZU TUN!?Zweihundert, die sich über die Farbe des
Fahrradschuppens beschweren;Drei, die darauf hinweisen, dass der Patch nicht
mit &man.style.9; übereinstimmt;Siebzehn, die sich beschweren, dass die
vorgeschlagene neue Glühbirne der GPL
unterliegt;Fünfhundertundsechsundachtzig, die sich in einen
Streit über die vergleichbaren Vorteile der GPL, der
BSD-Lizenz, der MIT-Lizenz, der NPL und der
persönlichen Hygiene nichtgenannter FSF-Gründer
verwickeln;Sieben, die unterschiedliche Teile des Threads nach
-chat und -advocacy weiterleiten;Einer, der die vorgeschlagene Glühbirne einbaut,
obwohl sie dunkler leuchtet, als die alte;Zwei, die sie wieder ausbauen, und in einer
wütenden Nachricht argumentieren, dass FreeBSD
besser ganz im Dunkeln dasteht, als mit einer
dämmerigen Glühbirne;Sechsundvierzig, die sich lärmend wegen des
Wiederausbaus der dämmerigen Glühbirne streiten
und eine Erklärung von -core verlangen;Elf, die eine kleinere Glühbirne beantragen,
damit sie in ihr Tamagotchi passt, falls wir
irgendwann beschließen, FreeBSD auf diese Plattform
zu portieren;Dreiundsiebzig, die sich über die SNR auf
-hackers und -chat beschweren und aus Protest
abmelden;Dreizehn, die unsubscribe,
How do I unsubscribe?
oder Please remove me from the list gefolgt
von der üblichen Fußzeile abschicken;Einen, der eine funktionierende Glühbirne
einbaut, während alle zu beschäftigt damit sind,
mit jedem zu streiten, um es zu bemerken;Einunddreißig, die herausstellen, dass die
neue Glühbirne 0,364% heller leuchten würde,
wenn sie mit TenDRA kompiliert werden würde (obwohl
sie in einen Würfel umgeformt werden
müsste) und dass FreeBSD deshalb nach
TenDRA, anstatt nach GCC wechseln sollte;Einen, der sich beschwert, dass bei der neuen
Glühbirne die Verkleidung fehlt;Neun (einschließlich der PR-Ersteller), die
fragen Was ist MFC?Siebenundfünfzig, die sich zwei Wochen, nachdem
die Birne gewechselt worden ist, darüber beschweren,
dass das Licht aus war.&a.nik; hat
hinzugefügt:Ich habe ziemlich hierüber
gelacht.Und dann dachte ich: "Halt, sollte in dieser
Liste nicht irgendwo 'Einer, der es dokumentiert'
sein?"Und dann wurde ich erleuchtet
:-)Was passiert mit den Daten, die nach
/dev/null geschrieben werden?Sie werden in einer speziellen Datensenke der CPU in
Wärme umgewandelt, die dann über den
Kühlkörper und den Lüfter abgeführt
wird. Dies ist einer der Gründe für die
Kühlung von CPUs; die Anwender gewöhnen sich an
die schnelleren Prozessoren, gehen nicht mehr so
sorgfältig mit Ihren Daten um und so landen immer
mehr Daten in /dev/null, was zur
Überhitzung der CPU führt. Wenn Sie
/dev/null löschen (was die
Datensenke ziemlich sicher abschaltet), wird Ihre CPU zwar
nicht mehr so heiß, dafür wird Ihr System aber
sehr schnell von den überzähligen Daten
überladen und merkwürdige Effekte zeigen. Wenn
Sie eine sehr schnell Netzwerkverbindung haben,
können Sie Ihre CPU kühlen, indem sie Daten aus
/dev/random lesen und in die Weite
des Netzwerkes schicken; allerdings besteht hier die
Gefahr der Überhitzung von Netzwerk und
/. Außerdem dürfte Ihr
ISP ziemlich wütend werden, da der größte
Teil der Daten von seinen Geräten in Hitze
umgewandelt werden wird; da ISPs aber über
Klimaanlagen verfügen, sollte das kein großes
Problem sein, solange Sie es nicht
übertreiben.Nachtrag Paul Robinson:Es gibt andere Mittel und Wege. Wie jeder gute
Systemadministrator weiss, gehört es zum guten
Ton, einigen Daten zum Bildschirm zu senden, damit die
Leuchtkäferchen, die das Bild anzeigen,
glücklich sind. Die Leuchtkäferchen werden nach
der Farbe Ihrer Hüte (Rot, Grün, oder Blau)
unterschieden und sie verstecken bzw. zeigen sich (wobei
man die Farbe ihrer Hüte erkennen kann) bei jeder
Nahrungsaufnahme. Grafikkarten wandeln Daten in
Leuchkäfer-Nahrung um und schicken sie dann zu den
Leuchtkäfern - teure Karten erzeugen bessere Nahrung
und sorgen so für besseres Verhalten der
Leuchtkäfer. Diese brauchen allerdings einen
konstanten Stimulus - darum gibt es
Bildschirmschoner.Darum lautet mein Vorschlag, die zufälligen Daten
einfach zum Bildschirm zu schicken, damit sie von den
Leuchtkäfern verzehrt werden. Dabei entsteht keine
Hitze, die Leuchtkäfer bleiben glücklich und man
wird seine überflüssigen Daten sehr schnell los,
auch wenn der Bildschirm etwas merkwürdig
aussieht.Übrigens: Als Ex-Admin eines großen ISPs,
der so seine Probleme mit der Kühlung seines
Rechenzentrums hatte, kann ich nur davon abraten,
überflüssige Daten einfach in das Netzwerk zu
schicken. Die Heinzelmännchen, die die Pakete
verteilen und versenden, regen sich darüber ganz
furchtbar auf.Weiterführende ThemenWie kann ich mehr über die Interna von FreeBSD
erfahren?Zurzeit gibt es nur ein Buch über die Interna von
FreeBSD, The Design and Implementation of the FreeBSD
Operating System von Marshall Kirk McKusick und
George V. Neville-Neil, ISBN 0-201-70245-2, das sich auf
FreeBSD 5.X konzentriert.Allgemeines Wissen über &unix; kann
allerdings in den meisten Fällen auf FreeBSD
angewendet werden.Eine Liste finden Sie im entsprechenden Abschnitt der
Bibliographie.Wie kann ich bei der Entwicklung von FreeBSD
mitarbeiten?Genauere Informationen finden Sie im Artikel FreeBSD
unterstützen. Wir können Hilfe
immer gut gebrauchen!Was sind SNAPs und RELEASEs?Derzeit existieren drei aktive/halbaktive Zweige im
FreeBSD-CVS-Repository. In früheren Zweigen
ändert sich wenig, daher gibt es nur drei
aktive Entwicklungszweige:RELENG_5 bzw.
5.X-STABLERELENG_6 bzw.
6-STABLEHEAD bzw.
-CURRENT oder
7.X-CURRENTHEAD ist keine wirkliche
Bezeichnung für einen Zweig, wie die anderen beiden.
Es ist lediglich eine symbolische Konstante für
den aktuellen, nicht verzweigten
Entwicklungsstrom, auf den wir uns
einfach als -CURRENT beziehen.Derzeit steht -CURRENT für den
7.X-Entwicklungsstrom, der
5-STABLE-Zweig (RELENG_5)
wurde im Oktober 2004, der 6-STABLE-Zweig
(RELENG_6) im November 2005 von
-CURRENT abgespalten.Wie kann ich meine eigene, angepasstes Release
erstellen?Eine Anleitung dazu finden Sie im Artikel
FreeBSD Release Engineering.Wieso überschreibt make world
das installierte System?Das ist beabsichtigt. Wie der Name schon andeutet,
erstellt make world alle Systemdateien
von Grund auf neu. Sie können also sicher sein, am
Ende eine saubere, konsistente Umgebung zu haben (das ist
der Grund, warum es so lange dauert).Falls die Umgebungsvariable DESTDIR
während der Ausführung von make
world oder make install
definiert ist, werden die neu erstellten Binaries unter
${DESTDIR} in einem zum
installierten identischen Verzeichnisbaum abgelegt.
Einige zufällige Kombinationen von Änderungen
von Shared Libraries und Neuerstellungen von Programmen
können hierbei jedoch ein Scheitern von make
world verursachen.Warum ist cvsup.FreeBSD.org
kein Round-Robin-Eintrag im DNS, so dass Anfragen
auf alle CVsup-Server verteilt werden?Die CVsup-Server gleichen sich stündlich
mit dem Hauptserver ab. Allerdings findet der
Abgleich nicht zur gleichen Zeit statt, daher
können einige Server neuere Quellen bereitstellen
als andere Server. Alle Server stellen jedoch
Quellen bereit, die maximal eine Stunde alt sind.
Wäre cvsup.FreeBSD.org
ein Round-Robin-Eintrag im DNS, der Benutzern einen
zufälligen Server zuteilt, könnten beim
zweiten Lauf von CVsup ältere Quellen als beim
ersten Lauf heruntergeladen werden.Warum meldet mein System (bus speed
defaulted) beim Start?Die Adaptec 1542 SCSI Hostadapter erlauben dem
Benutzer die Buszugriffsgeschwindigkeit per Software zu
konfigurieren. Ältere Versionen des 1542-Treibers
versuchten, die schnellstmögliche Geschwindigkeit
herauszufinden und konfigurierten den Adapter
entsprechend. Wir haben festgestellt, dass dies auf
einigen Systemen nicht funktioniert, weshalb Sie nun die
Kernelkonfigurationsoption TUNE_1542
definieren müssen, um es zu aktivieren. Die
Benutzung auf Systemen, auf denen es funktioniert,
könnte Ihre Platten schneller machen, aber auf den
Systemen, auf denen es nicht funktioniert, könnten
Ihre Daten beschädigt werden.Kann ich -CURRENT mit begrenztem Internetzugang
folgen?Ja, Sie können das tun, ohne
den gesamten Quellbaum herunterzuladen, indem Sie die
Einrichtung CTM
benutzen.Wie haben Sie die Distribution in 240k-Dateien
aufgespalten?Bei neueren BSD-basierten Systemen gibt es eine Option
zu &man.split.1;, die das Splitten von
Dateien an willkürlichen Bytegrenzen erlaubt.Hier ist ein Beispiel aus
/usr/src/Makefile.
bin-tarball:
(cd ${DISTDIR}; \
tar cf - . \
gzip --no-name -9 -c | \
split -b 240640 - \
${RELEASEDIR}/tarballs/bindist/bin_tgz.)
Ich habe eine Kernelerweiterung geschrieben. An wen
sende ich sie?Lesen Sie bitte den Artikel
FreeBSD unterstützen.Und Danke, dass Sie darüber
nachdenken!Wie werden Plug&Play ISA-Karten erkannt und
initialisiert?Von: Frank Durda IV
uhclem@nemesis.lonestar.orgKurz gesagt gibt es nur wenige I/O-Ports über die
PnP-Karten antworten, wenn der Host fragt, ob jemand da
ist. Wenn die PnP-Erkennungsroutine startet, fragt sie,
ob irgendwelche PnP-Karten vorhanden sind und alle
PnP-Karten antworten mit ihrer Modellnummer auf demselben
Port, von dem sie auch gelesen haben. Die
Erkennungsroutine erhält also ein geodertes
Ja auf diese Frage. Mindestens ein Bit
wird bei dieser Antwort gesetzt sein. Die
Erkennungsroutine ist dann in der Lage, dafür zu
sorgen, dass Karten mit Modellnummern (zugeordnet von
Microsoft/Intel) kleiner als X off-line
gesetzt werden. Sie prüft dann, ob immer noch Karten
da sind, die auf die Frage antworten. Falls die Antwort
0 war, sind keine Karten mit IDs
größer X vorhanden. Nun prüft die
Erkennungsroutine, ob Karten unterhalb
X vorhanden sind. Dann setzt die
Erkennungsroutine alle Karten größer als
X-(limit/4) off-line und wiederholt die Frage. Wenn diese
halbbinäre Suche nach IDs in Folge genügend oft
wiederholt worden ist, wird die Erkennungsroutine
schließlich alle in einem Rechner befindlichen
PnP-Karten identifiziert haben und das mit einer
Iterationszahl sehr viel kleiner als 2^64.Die IDs bestehen aus zwei 32-Bit-Feldern (daher 2^64)
+ acht Bit Prüfsumme. Die ersten 32 Bit sind die
Herstellerkennung. Es wurde zwar nicht bestätigt,
aber es wird angenommen, dass unterschiedliche
Kartentypen desselben Herstellers unterschiedliche 32-Bit
Herstellerkennungen besitzen können. 32 Bit nur
für eindeutige Hersteller zu benötigen, scheint
etwas übertrieben.Die niedrigen 32 Bit sind eine Seriennummer,
Ethernetadresse - etwas, das die betreffende Karte
einzigartig macht. Die Hersteller dürfen niemals
eine zweite Karte mit denselben niedrigen 32 Bit
herstellen, es sei denn, die höheren 32 Bit sind
unterschiedlich. Sie können also mehrere Karten des
selben Typs im Rechner haben und die gesamten 64 Bit
bleiben stets eindeutig.Die 32-Bit-Gruppen können niemals nur aus Nullen
bestehen. Das erlaubt es, bei der binären Suche zu
Beginn nur auf von Null verschiedene Bits zu
achten.Wenn das System alle vorhandenen Karten-IDs
identifiziert hat, reaktiviert es jede Karte - eine nach
der anderen (über dieselben I/O-Ports) und ermittelt,
welche Ressourcen von der jeweiligen Karte benötigt
werden, welche Wahlmöglichkeiten für Interrupts
bestehen usw. Alle Karten werden abgefragt, um diese
Informationen zusammenzustellen.Diese Informationen werden dann mit Informationen aus
allen ECU-Dateien auf der Festplatte oder mit im MLB-BIOS
verdrahteten Informationen verknüpft. Die ECU- und
BIOS-PnP-Unterstützung für Hardware auf dem MLB
ist für gewöhnlich künstlich und was die
Peripheriegeräte tun ist nicht wirklich echtes PnP.
Durch die Untersuchung der BIOS-Informationen und der
ECU-Informationen können die Erkennungsroutinen
jedoch die von PnP-Geräten benutzten Ressourcen so
ändern, dass vermieden wird, dass bereits
von anderen Geräten benutzte Ressourcen verwendet
werden.Dann werden die PnP-Geräte nochmals besucht und
ihre I/O, DMA, IRQ und Memory-Map-Adressen werden
zugeordnet. Die Geräte werden an diesen Stellen
sichtbar werden und dort bis zum nächsten Reboot
verbleiben. Allerdings hindert Sie auch nichts daran, sie
zu verschieben, wohin Sie wollen.Im obigen Teil wurde sehr viel vereinfacht, aber die
grundlegende Idee sollte klar geworden sein.Microsoft hat einige der primären
Druckerstatusports für PnP übernommen, da keine
Karte diese Adressen für die entgegengesetzten
I/O-Zyklen decodiert. Ich habe während der
frühen Überprüfungsperiode des
PnP-Vorschlags eine echte IBM Druckerkarte gefunden, die
Schreibzugriffe auf dem Statusport decodiert hat, aber MS
hat nur tough gesagt. Also schreiben sie
auf den Druckerstatusport, um Adressen zu setzen, benutzen
zusätzlich diese Adresse + 0x800
und einen dritten I/O-Port zum Lesen, der irgendwo
zwischen 0x200 und
0x3ff liegen kann.Wie bekomme ich eine Major-Number für einen
Gerätetreiber, den ich geschrieben habe?&os.current; stellt seit Februar 2003
Major-Numbers für Geräte zur Laufzeit automatisch
bereit. Nach Möglichkeit sollte diese neue
Funktion benutzt werden, anstatt eine Major-Number
statisch festzulegen. Weitere Hinweise finden Sie in
src/sys/conf/majors.Wenn Sie eine statisch festgelegte Major-Number
benötigen, hängt das weitere Verfahren davon ab,
ob Sie den Treiber frei verfügbar machen wollen.
Falls dem so ist, senden Sie uns bitte eine Kopie der
Treiber-Sourcen und zusätzlich die entsprechenden
Änderungen der Datei files.i386,
ein Beispiel für einen Eintrag in der
Konfigurationsdatei und den entsprechenden Code für
&man.MAKEDEV.8;, der die Gerätedateien für Ihr
Gerät erzeugt. Falls Sie nicht beabsichtigen,
den Treiber frei verfügbar zu machen, oder es
aufgrund von Lizenzbeschränkungen nicht können,
dann ist die Major-Number 32 für zeichenorientierte
und die Major-Number 8 für blockorientierte
Geräte speziell für diesen Zweck reserviert. In
jedem Fall würden wir uns freuen, auf der Mailingliste
&a.hackers; etwas über Ihren neuen Treiber zu
hören.Gibt es alternative Layoutverfahren für
Verzeichnisse?Als Antwort auf die Frage nach alternativen
Layoutverfahren für Verzeichnisse ist das Schema, das
derzeit benutzt wird, unverändert von dem, das ich
1983 geschrieben habe. Ich habe das Vorgehen für das
originale Fast-Filesystem geschrieben und es niemals
überarbeitet. Es funktioniert gut, wenn es darum
geht, zu verhindern, dass Zylindergruppen volllaufen.
Wie viele von Ihnen angemerkt haben, funktioniert es
schlecht für find. Die meisten Dateisysteme werden
von Archiven erstellt, die mit einer Tiefensuche (also
ftw) erstellt wurden. Diese Verzeichnisse werden
über die Zylindergruppen hinweg entfaltet und
erzeugen denkbar ungünstigste Voraussetzungen
für zukünftige Tiefensuchen. Falls man die
Gesamtzahl der zu erstellenden Verzeichnisse wüsste,
wäre die Lösung die, (gesamt / fs_ncg) pro
Zylindergruppe zu erstellen, bevor fortgefahren wird.
Offensichtlich müsste man eine Heuristik
erstellen, um die Zahl zu schätzen. Sogar die
Benutzung einer kleinen, fixen Zahl, z.B. 10, würde
eine Verbesserung um Größenordnungen ausmachen.
Um Wiederherstellungen von normalem Betrieb (wo der
derzeitige Algorithmus vermutlich sinnvoller ist) zu
unterscheiden, könnten Sie die Clusterung von bis zu
10 benutzen, wenn sie alle innerhalb eines
10-Sekunden-Fensters durchgeführt würden.
Jedenfalls ist mein Schluss, dass dies ein
fruchtbares Gebiet für Experimente ist.Kirk McKusick, September 1998Wie kann ich optimalen Nutzen aus einer kernel panic
ziehen?[Dieser Abschnitt wurde von &a.des;, der
einige Tippfehler korrigiert und die Kommentare in eckigen
Klammern hinzugefügt hat, aus einer Mail von
&a.wpaul; in der Mailingliste freebsd-current
entnommen.]
From: Bill Paul <wpaul@skynet.ctr.columbia.edu>
Subject: Re: the fs fun never stops
To: Ben Rosengart
Date: Sun, 20 Sep 1998 15:22:50 -0400 (EDT)
Cc: current@FreeBSD.org
[<Ben Rosengart> sendete die
folgende Panik-Meldung]
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x40
> fault code = supervisor read, page not present
> instruction pointer = 0x8:0xf014a7e5
^^^^^^^^^^
> stack pointer = 0x10:0xf4ed6f24
> frame pointer = 0x10:0xf4ed6f28
> code segment = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, def32 1, gran 1
> processor eflags = interrupt enabled, resume, IOPL = 0
> current process = 80 (mount)
> interrupt mask =
> trap number = 12
> panic: page fault
[Wenn] Sie eine Meldung wie diese sehen, reicht es
nicht, sie einfach zu reproduzieren und sie einzusenden.
Der Wert des Instruktionszeigers, den ich oben
hervorgehoben habe, ist wichtig; leider ist er auch
konfigurationsabhängig. Mit anderen Worten variieren
die Werte abhängig von dem Kernel-Image, das Sie
tatsächlich benutzen. Wenn Sie ein GENERIC
Kernelimage von einem der Snapshots benutzen, dann ist es
für jemand anderen möglich, die fehlerhafte
Instruktion herauszufinden, aber wenn Sie einen
angepassten Kernel benutzen, können nur
Sie uns sagen, wo der Fehler
auftrat.Was Sie tun sollten, ist folgendes:Notieren Sie sich den Wert des
Instruktionszeigers. Beachten Sie, dass der Teil
0x8: am Anfang in diesem Fall nicht
von Bedeutung ist; der Teil
0xf0xxxxxx ist der, den wir
wollen.Tun Sie folgendes, wenn das System
rebootet:&prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxxxwobei 0xf0xxxxxx der Wert des
Instruktionszeigers ist. Es besteht die
Möglichkeit, dass Sie keinen exakten Treffer
erzielen, weil die Symbole in der Symboltabelle des
Kernels Funktionseinstiegspunkte sind und die Adresse
des Instruktionszeigers irgendwo innerhalb einer
Funktion liegen wird und nicht am Anfang. Falls sie
keinen exakten Treffer erzielen, lassen Sie den
letzten Teil des Werts des Instruktionszeigers weg und
versuchen es noch einmal, z.B.:&prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxxFalls das kein Ergebnis liefert, hacken Sie eine
weitere Ziffer ab. Wiederholen Sie die Schritte, bis
Sie irgendeine Ausgabe erhalten. Das Ergebnis wird
eine Liste möglicher Funktionen sein, die die
Panik verursacht haben. Das ist zwar kein absolut
genauer Mechanismus, um die Fehlerursache ausfindig zu
machen, aber es ist besser als gar nichts.Ich sehe ständig Leute, die Panik-Meldungen wie
diese zeigen, aber ich sehe kaum jemanden, der sich die
Zeit nimmt, den Instruktionszeiger einer Funktion aus der
Symboltabelle des Kernel zuzuordnen.Der beste Weg, den Grund für eine Panik
herauszufinden, ist der, einen Crash-Dump festzuhalten und
dann &man.gdb.1; zu benutzen, um den Stack im Crash-Dump
zurückzuverfolgen.Jedenfalls ist die Methode, die ich normalerweise
benutze, folgende:Richten Sie eine Kernelkonfigurationsdatei ein,
fügen Sie optional options DDB
hinzu, falls Sie glauben, dass Sie den
Kerneldebugger benötigen. (Ich benutze ihn
hauptsächlich zum Setzen von Haltepunkten, wenn
ich eine Endlosschleife irgendeiner Art
vermute.)Benutzen Sie config -g
KERNELCONFIG, um
das Erstellungsverzeichnis einzurichten.cd
/sys/compile/KERNELCONFIG;
makeWarten Sie, bis der Kernel fertig kompiliert
ist.make installrebootDer &man.make.1;-Prozess wird zwei Kernel
erstellt haben: kernel und
kernel.debug.
kernel wurde als
/kernel installiert, während
kernel.debug als Quelle für
Debuggersymbole für &man.gdb.1; benutzt werden
kann.Um sicherzustellen, dass ein Crash-Dump erhalten
bleibt, müssen Sie
/etc/rc.config editieren und
dumpdev so setzen, dass es auf
Ihre Swap-Partition zeigt. Das bewirkt, dass die
&man.rc.8;-Skripte den Befehl &man.dumpon.8; benutzen, um
Crash-Dumps zu ermöglichen. Sie können
&man.dumpon.8; auch manuell ausführen. Nach einer
Panik kann der Crash-Dump mit &man.savecore.8;
wiederhergestellt werden; wenn dumpdev
in /etc/rc.conf gesetzt ist, werden
die &man.rc.8;-Skripte &man.savecore.8; automatisch
ausführen und den Crash-Dump unter
/var/crash ablegen.Crash-Dumps von FreeBSD sind für
gewöhnlich genauso groß wie der physikalische
Hauptspeicher Ihres Rechners. Das heißt, wenn Sie
64MB RAM haben, werden sie einen 64MB Crash-Dump
erhalten. Deshalb müssen Sie dafür sorgen, dass
genügend Speicherplatz in
/var/crash zur Verfügung
steht, um den Dump aufnehmen zu können. Alternativ
führen Sie &man.savecore.8; manuell aus und lassen
es den Crash-Dump in einem anderen Verzeichnis
wiederherstellen, in dem Sie mehr Platz haben. Es ist
möglich, die Größe des Crash-Dumps zu
begrenzen, indem options MAXMEM=(foo)
benutzt wird, um den Speicher, den der Kernel benutzt,
auf einen etwas vernünftigeren Wert zu setzen.
Wenn Sie z.B. 128MB RAM haben, können Sie die
Speicherbenutzung des Kernels auf 16MB begrenzen, so
dass die Größe Ihres Crash-Dumps 16MB
anstatt 128MB betragen wird.Wenn Sie den Crash-Dump wiederhergestellt haben,
können Sie den Stack mit &man.gdb.1; so
zurückverfolgen:&prompt.user; gdb -k /sys/compile/KERNELCONFIG/kernel.debug /var/crash/vmcore.0(gdb)whereBeachten Sie, dass es mehrere Seiten mit
wertvollen Informationen geben könnte; idealerweise
sollten Sie &man.script.1; benutzen, um sie alle
festzuhalten. Wenn Sie das vollständige Kernelimage
mit allen Debugginginformationen benutzen,
müssten Sie exakt die Zeile des
Kernel-Sourcecodes finden, wo die Panik aufgetreten ist.
Für gewöhnlich müssen Sie den Stack von
unten an zurückverfolgen, um die genaue
Ereignisabfolge, die zum Crash führte,
zurückzuverfolgen. Sie können &man.gdb.1; auch
zum Ausdrucken der Inhalte verschiedener Variablen oder
Strukturen benutzen, um den Systemstatus zum Zeitpunkt des
Absturzes zu untersuchen.Wenn Sie nun wirklich verrückt sind und einen
zweiten Computer haben, können Sie &man.gdb.1; auch
für entferntes Debugging konfigurieren, so dass
Sie &man.gdb.1; auf einem System benutzen können, um
den Kernel auf einem anderen System zu debuggen,
einschließlich dem Setzen von Haltepunkten und dem
Bewegen in Einzelschritten durch den Kernelcode, genauso,
wie Sie es mit einem normalen Benutzerprogramm tun
können. Ich habe noch nicht damit gespielt weil ich
nicht oft Gelegenheit habe, zwei Rechner nebeneinander
für Debuggingzwecke einzurichten.[Bill hat hinzugefügt: "Ich
vergaß, etwas zu erwähnen: wenn Sie DDB
aktiviert haben und der Kernel im Debugger landet,
können Sie eine Panik (und einen Crash-Dump)
erzwingen, indem Sie einfach 'panic' am ddb-Prompt
eingeben. Er könnte während der Panikphase
wieder im Debugger stoppen. Falls er das tut, geben Sie
'continue' ein, dann wird er den Crash-Dump beenden."
-ed]Wieso funktioniert dlsym() nicht mehr für
ELF-Executables?Die ELF-Werkzeuge machen die in einem Executable
definierten Symbole dem dynamischen Linker nicht
standardmäßig sichtbar. Konsequenterweise
werden dlsym()-Suchen nach Handlern
aus Aufrufen von dlopen(NULL, flags)
diese Symbole nicht finden können.Wenn Sie mit dlsym() nach im
Hauptexecutable eines Prozesses vorhandenen Symbolen
suchen wollen, müssen Sie das Executable mit der
Option von &man.ld.1;
linken.Wie kann ich den Adressraum des Kernels
vergrössern oder verkleinern?Standardmäßig beträgt der
Adressraum des Kernels 256MB (FreeBSD 3.X) bzw. 1 GB
(FreeBSD 4.X). Wenn Sie einen netzwerkintensiven Server
(z.B. einen großen FTP- oder HTTP-Server) betreiben,
kann es sein, dass Sie der Meinung sind, dass
256MB nicht ausreichen.Wie also erhöhen Sie den Adressraum? Hier
gibt es zwei Aspekte. Erstens müssen Sie dem Kernel
sagen, dass er einen größeren Anteil des
Adressraums für sich selbst reservieren soll.
Da der Kernel am oberen Ende des Adressraums geladen
wird, müssen Sie zweitens die Ladeadresse verringern,
damit er mit dem Kopf nicht gegen die Obergrenze
stößt.Das erste Ziel erreicht man, indem man den Wert von
NKPDE in
src/sys/i386/include/pmap.h
erhöht. Für einen Adressraum von 1 GB
sieht das so aus:
#ifndef NKPDE
#ifdef SMP
#define NKPDE 254 /* addressable number of page tables/pde's */
#else
#define NKPDE 255 /* addressable number of page tables/pde's */
#endif /* SMP */
#endif
Dividieren Sie die gewünschte
Adressraumgröße (in Megabyte) durch vier
und subtrahieren Sie dann eins für UP und zwei
für SMP, um den korrekten Wert für
NKPDE zu finden.Um das zweite Ziel zu erreichen müssen Sie die
korrekte Ladeadresse berechnen: subtrahieren Sie einfach
die Größe des Adressraums (in Byte) von
0x100100000; für einen Adressraum von 1 GB
lautet das Ergebnis 0xc0100000. Setzen Sie
LOAD_ADDRESS in
src/sys/i386/conf/Makefile.i386 auf
diesen Wert; setzen Sie dann den Location-Counter am
Anfang der Abschnittsliste in
src/sys/i386/conf/kernel.script auf
denselben Wert:
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(btext)
SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/obj/elf/home/src/tmp/usr/i386-unknown-freebsdelf/lib);
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0xc0100000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
Konfigurieren und erstellen Sie Ihren Kernel dann neu.
Sie werden vermutlich Probleme mit &man.ps.1;, &man.top.1;
und ähnlichen Programmen haben. Ein make
world sollte diese beheben; alternativ
können Sie die gepatchte pmap.h
in das Verzeichnis /usr/include/vm
kopieren und danach libkvm,
&man.ps.1; und &man.top.1; neu erzeugen.Hinweis: die Größe des
Kernel-Adressraums muss ein Vielfaches von vier
Megabyte betragen.[&a.dg; fügt hinzu: Ich glaube, der
Kerneladressraum muss eine Zweierpotenz sein,
aber ich bin mir dessen nicht sicher. Der alte
(ältere) Bootcode pflegte die oberen Adressbits
zu mißbrauchen und ich glaube, er erwartete
mindestens 256MB Granularität.]DanksagungDieses kleine unschuldige Dokument mit Häufig gestellten
Fragen wurde in den letzten 10 Jahren von Hunderten, wenn
nicht Tausenden, geschrieben, neu geschrieben, überarbeitet,
gefaltet, verdreht, durcheinander gebracht, wieder aufgebaut,
verstümmelt, seziert, durchgekaut, überdacht, und
wiederbelebt. Und das nicht nur einmal.Wir möchten allen dafür Verantwortlichen danken
und wir fordern auch Sie auf, dieser Gruppe beizutreten,
um diese FAQ noch besser zu machen.Folgende Personen haben durch die Beantwortung von Fragen,
sowie durch Hinweise und Kommentare an der Entstehung der
deutschen Übersetzung mitgewirkt:Ross Alexander&a.jhb;&a.nik;Glen FosterOliver FrommeFrank GruenderChris HillJames Howard&a.jkh;&a.alex;&a.jmas;Mike MeyerDan O'ConnorEric Ogren&a.de.pierau;Oliver SchneiderChristoph SoldUnd an alle anderen, an die wir nicht gedacht haben.
Entschuldigung und herzlichen Dank!
&bibliography;
diff --git a/de_DE.ISO8859-1/books/fdp-primer/overview/chapter.sgml b/de_DE.ISO8859-1/books/fdp-primer/overview/chapter.sgml
index de4e32c364..c46e09fac8 100644
--- a/de_DE.ISO8859-1/books/fdp-primer/overview/chapter.sgml
+++ b/de_DE.ISO8859-1/books/fdp-primer/overview/chapter.sgml
@@ -1,348 +1,348 @@
ÜberblickHerzlich Willkommen beim FreeBSD-Dokumentationsprojekt.
Qualitativ hochwertige Dokumentation ist ein wichtiger
Erfolgsfaktor und sehr bedeutend für die Verbreitung von
FreeBSD. Die wichtigste Quelle dafür ist das
FreeBSD-Dokumentationsprojekt (FDP). Jeder Beitrag, der zu diesem
Projekt geleistet wird, ist ungemein wertvoll.Es ist das Anliegen dieser Fibel, den Leser mit dem FDP
vertraut zu machen und zu erklären, wie das FDP
organisiert ist, wie man selber Dokumente
erstellt und an das FDP einreicht und wie
die verfügbaren Werkzeuge effektiv beim Schreiben
eingesetzt werden können.Wie jedes Opensourceprojekt, ist auch das FDP auf die Mithilfe
vieler angewiesen. Deshalb ist jeder herzlich eingeladen
mitzuarbeiten. Die dafür erforderlichen Voraussetzungen sind
gering und es gibt keine Verpflichtung eine bestimmte Menge an
Dokumenten pro Monat oder Jahr beizusteuern. Das Einzige was Sie
tun müssen, ist sich auf der Mailingliste &a.doc; einzutragen.Nach dem Lesen der FDP-Fibel sollte man wissen:welche Dokumente durch das FDP betreut werden,wie man SGML-Dokumente liest und den SGML-Quellcode der
durch das FDP betreuten Dokumente versteht,wie man selbst Änderungen an Dokumenten vornehmen
kann undwie man Änderungen zur Begutachtung durch das FDP
einreichen kann.Die FreeBSD-DokumentationsreiheDas FDP umfaßt vier verschiedene Kategorien:HilfeseitenDie englischen Hilfeseiten wurden nicht vom FDP
geschrieben, da sie ein Teil des Basissystems sind. Jedoch
können bzw. wurden bereits Teile von existierenden
Hilfeseiten umformuliert, um sie verständlicher zu
machen oder um Fehler zu beheben.Für die Übersetzung der Hilfeseiten des
Systems in die verschiedenen Sprachen sind die einzelnen
Übersetzergruppen verantwortlich. Alle dabei
entstandenen Übersetzungen gehören zum
FDP.Die FAQDas Ziel der FAQ ist es, Fragen, die auf den
verschiedenen Maillinglisten und in Newsgruppen
regelmäßig diskutiert werden, nach einem
einfachen Frage- und Antwort-Muster zu behandeln. Das
schließt nicht aus, das auf bestimmte Fragen
ausführlich und umfassend eingegangen wird.Das HandbuchDas Ziel des Handbuches ist es, die
umfassende Quelle und Referenz im Netz für
FreeBSD-Benutzer zu sein.Die WebseiteDie Webseite http://www.FreeBSD.org
und ihre vielen Spiegel auf der ganzen Welt vertreten das
FreeBSD-Projekt im WWW. Für viele Menschen
ist sie der erste Kontakt mit FreeBSD.Jede dieser vier Kategorien wird im FreeBSD-CVS-Baum
verwaltet. Das bedeutet, dass alle Änderungen an den
Dateien für jeden verfügbar sind und jeder sich
mittels eines Programms wie CVSup
oder CTM eine lokale Kopie der
Dokumentation anlegen kann.Parallel zum FDP haben viele Menschen Anleitungen
geschrieben und Webseiten mit Bezug zu FreeBSD erstellt. Einige
davon werden im CVS-Archiv verwaltet, sofern der Autor dem
zugestimmt hat. In anderen Fällen hat sich der Autor
entschlossen, seine Dokumentation außerhalb des zentralen
FreeBSD-CVS-Archivs zu verwalten. Das FDP bemüht sich, so
viele Verweise wie möglich auf solche Quellen
bereitzustellen.Bevor es losgehtZum Verständnis der folgenden Kapitel sollte folgendes
bereits bekannt sein:Wie eine aktuelle Kopie der FreeBSD-Dokumentation
entweder auf Basis des FreeBSD-CVS-Archivs mittels
CVS,
CTM oder
CVSup angelegt und gepflegt wird,
oder wie mit CVSup eine frische
Kopie des CVS-Archivs heruntergeladen wird.Wie neue Programme mit Hilfe des
FreeBSD-Portsystems oder mittels &man.pkg.add.1;
heruntergeladen und installiert werden.Der SchnellstartFalls man einfach loslegen möchte und sich sicher genug
fühlt, um alles weitere erst bei Bedarf nachzusehen, kann
man einfach den folgenden Anweisungen folgen:Zuerst muß der Metaport textproc/docproj auf dem
betreffenden Arbeitsrechner installiert werden.&prompt.root; cd /usr/ports/textproc/docproj
&prompt.root; make JADETEX=no installAnschließend sollte eine lokale Kopie des
FreeBSD-doc-Verzeichnisbaumes angelegt
werden. Hierfür kann man entweder auf
CVSup im
checkout-Modus zurückgreifen oder
mittels cvs eine komplette Kopie
des CVS-Archivs anlegen.Wenn man lieber mit einer Kopie des CVS-Archivs arbeiten
möchte, werden als Minimum die Verzeichnisse
doc/share und
doc/de_DE.ISO8859-1/share
benötigt.&prompt.user; cvs checkout doc/share
&prompt.user; cvs checkout doc/de_DE.ISO8859-1/shareFür den Fall, dass ausreichend Platz auf der
Festplatte vorhanden ist, kann auch eine eine
vollständige Arbeitskopie des gesamten CVS-Baumes anlegt
werden.&prompt.user; cvs checkout docSollte geplant sein, ein existierendes Buch oder einen
existierenden Artikel zu ändern, muß
natürlich noch zusätzlich das betreffende
Verzeichnis aus dem CVS-Archiv geholt werden. Soll hingegen
ein neues Buch oder ein neuer Artikel geschrieben werden,
empfiehlt es sich, auf bestehende Bücher und Artikel
zurückzugreifen und diese als Vorlage zu nutzen.Ein Artikel über die Konfiguration eines VPNs
zwischen FreeBSD und Windows 2000 kann wie
folgt erstellt werden:Zuerst wird das Verzeichnis
articles aus dem FreeBSD-CVS-Archiv
lokal angelegt:&prompt.user; cvs checkout doc/de_DE.ISO8859-1/articlesAnschließend kopiert man einen bereits
existierenden Artikel und nutzt ihn als Vorlage. In
diesem Beispiel soll der neue Artikel im Verzeichnis
vpn-w2k liegen:&prompt.user; cd doc/de_DE.ISO8859-1/articles
&prompt.user; cp -R committers-guide vpn-w2kBereits exisitierende Dokumente, die geändert
werden sollen, können direkt aus dem CVS-Archiv
geholt werden. Das folgende Beispiel zeigt das
für die FAQ aus dem Verzeichnis
doc/de_DE.ISO8859-1/books/faq:&prompt.user; cvs checkout doc/de_DE.ISO8859-1/books/faqJetzt können die .sgml Dateien
mit einem beliebigen Texteditor bearbeitet werden.Danach ist make mit dem Ziel
lint aufzurufen, um das gesamte
Dokument auf Auszeichnungsfehler hin zu untersuchen, ohne
dass zeitaufwändige Transformationen vorgenommen
werden.&prompt.user; make lintSoll anschließend das Zieldokument erstellt
werden, kann mit Hilfe der Variable
FORMATS bestimmt werden, welche
Ausgabeformate erzeugt werden sollen. Unterstützt werden
momentan html,
html-split, txt,
ps, pdf und
rtf. Die aktuelle Liste der
unterstützten Formate befindet sich am Anfang der Datei
doc/share/mk/doc.docbook.mk. Bei der
Verwendung dieser Variable ist es wichtig, darauf zu achten,
dass die Angabe der gewünschten Formate in
Anführungszeichen eingeschlossen wird, sofern mehr als
nur ein Format gleichzeitig erstellt werden soll.Wenn das Dokument beispielsweise nach
HTML konvertiert werden soll, kann dies
so vorgenommen werden:&prompt.user; make FORMATS=htmlSoll es hingegen in den Formaten html
und txt erzeugt werden,
kann man entweder
&man.make.1; zweimal hintereinander aufrufen:&prompt.user; make FORMATS=html
&prompt.user; make FORMATS=txtoder beide Formate mit einem Aufruf von &man.make.1;
erzeugen:&prompt.user; make FORMATS="html txt"Zum Schluß müssen die Änderungen an das
FDP mittels &man.send-pr.1; eingesandt werden.
diff --git a/de_DE.ISO8859-1/books/handbook/install/chapter.sgml b/de_DE.ISO8859-1/books/handbook/install/chapter.sgml
index 65f57b156c..471e1c621d 100644
--- a/de_DE.ISO8859-1/books/handbook/install/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/install/chapter.sgml
@@ -1,5333 +1,5492 @@
JimMockÜberarbeitet und teilweise neu
geschrieben von RandyPrattDer Gang durch sysinstall und alle
Bildschirmabzüge von MartinHeinenÜbersetzt von
+
+ Johann
+ Kois
+ &os; installierenÜbersichtInstallation
-
+
&os; wird mit dem textorientierten Programm
sysinstall installiert. Distributoren
können ein anderes Installationsprogramm verwenden,
voreingestellt ist jedoch sysinstall.
Dieses Kapitel zeigt Ihnen, wie Sie mithilfe von
sysinstall &os; installieren.Dieses Kapitel behandelt folgende Punkte:Das Erzeugen von &os;-Startdisketten.Wie &os; Platten anspricht und aufteilt.Wie sysinstall
ausgeführt wird.Die Menüs von sysinstall
und die erforderlichen Eingaben in den Menüs.Bevor Sie dieses Kapitel lesen, sollten SieDie Hardware-Notes der &os;-Release, die Sie
installieren wollen, lesen und sicherstellen, dass
Ihre Hardware unterstützt wird.Diese Installationsanleitung gilt für Rechner
mit &i386;-Architektur (PC-kompatible Rechner). Abweichende
Anweisungen für andere Plattformen (beispielsweise Alpha)
werden wo notwendig gegeben. Obwohl diese Anleitung so aktuell
wie möglich ist, kann das Installationsverfahren
von dem hier gezeigten geringfügig abweichen.
Legen Sie bitte daher diese Anleitung nicht
wortwörtlich aus, sondern lassen Sie sich von
diesem Kapitel durch den Installationsprozess leiten.Hardware-AnforderungenMinimalkonfigurationDie zur Installation von &os; erforderliche
Minimalkonfiguration hängt von der zu installierenden
&os;-Version sowie von der Hardware-Architektur ab.Informationen zur jeweiligen Minimalkonfiguration finden
Sie in Installation Notes auf der Unterseite Release
Information der &os;-Internetseiten. Die folgenden
Abschnitte fassen diese Informationen zusammen. Je nachdem,
wie Sie &os; installieren, benötigen Sie eventuell auch
ein Diskettenlaufwerk, ein unterstütztes CD-ROM-Laufwerk,
oder auch eine Netzwerkkarte. des Handbuchs enthält
weitere Informationen zu den verschiedenen
Installationsarten.
- Die i386- und pc98-Architektur
+ Die &os;/&arch.i386;- und &os;/&arch.pc98;-Architekturen
- Sowohl &os;/i386 als auch &os;/pc98 benötigen
+ Sowohl &os;/&arch.i386; als auch &os;/&arch.pc98;
+ benötigen
jeweils mindestens einen 486-Prozessor sowie mindestens
24 MB RAM. Außerdem benötigen Sie für
eine Minimalinstallation mindestens 150 MB freien
Platz auf Ihrer Festplatte.In den meisten derartigen Konfigurationen ist es
besser, für mehr RAM und mehr Plattenplatz zu sorgen,
statt einen schnelleren Prozessor einzubauen.
- Die Alpha-Architektur
+ Die &os;/&arch.alpha;-ArchitekturAlpha
- Um &os;/alpha zu installieren, benötigen Sie
+ Um &os;/&arch.alpha; zu installieren, benötigen Sie
eine unterstützte Plattorm (lesen Sie dazu auch
des
Handbuchs) sowie eine
seperate Festplatte für die &os;-Installation.
Es ist nicht derzeit möglich, die Platte mit einem
weiteren Betriebssystem zu teilen. Diese seperate Platte
muss an einen SCSI-Controller angeschlossen sein, der von
der SRM-Firmware unterstützt wird. Alternativ
können Sie auch eine IDE-Platte verwenden, wenn Ihr
SRM das Starten von IDE-Platten unterstützt.ARCAlpha BIOSSRMFür die &os;-Installation benötigen Sie die
SRM-Konsolen-Firmware für Ihre Plattform. Manchmal
ist es möglich, zwischen der AlphaBIOS-Firmware
(auch ARC genannt) und SRM zu wechseln. Ist dies bei
Ihnen nicht möglich, müssen Sie sich die neue
Firmware von der Internetseite Ihres Herstellers
herunterladen.
+
+
+ Die Unterstützung für die Alpha-Plattform
+ wurde mit &os; 7.0 eingestellt. Die
+ &os; 6.X-Serie ist damit
+ die letzte Serie, die diese Architektur noch
+ unterstützt.
+
- Die amd64-Architektur
+ Die &os;/&arch.amd64;-Architektur
- &os;/amd64 benötigt für den Betrieb
- mindestens einen AMD Athlon 64-,
- AMD Athlon 64-FX-, oder einen
- AMD Opteron-Prozessor.
+ Es gibt zwei Klassen von Prozessoren, auf denen Sie
+ &os;/&arch.amd64; ausführen können. Die erste
+ Klasse bilden die AMD64-Prozessoren (zu denen
+ AMD Athlon 64-, AMD Athlon 64-FX-, oder
+ AMD Opteron-Prozessoren gehören).
+
+ Die zweite Klasse von Prozessoren, auf denen Sie diese
+ &os;/&arch.amd64; einsetzen können, ist die
+ &intel; EM64T-Architektur. Prozessoren dieser Klasse sind
+ beispielsweise &intel; &core; 2 Duo-, Quad-, und
+ Extreme-Prozessoren sowie die
+ &intel; &xeon;-Prozessorreihen 3000, 5000, und 7000.Wenn Sie einen auf dem Chipsatz nVidia nForce3 Pro-150
basierenden Rechner haben, müssen
Sie im BIOS das IO-APIC deaktivieren. Erlaubt ihr BIOS
dies nicht, müssen Sie stattdessen ACPI deaktivieren.
Der Grund dafür sind Fehler im Pro-150-Chipsatz, die
bis jetzt nicht behoben werden konnten.
- Die &sparc64;-Architektur
+ Die &os;/&arch.sparc64;-Architektur
- Um &os;/&sparc64; zu installieren, benötigen Sie
+ Um &os;/&arch.sparc64; zu installieren, benötigen Sie
eine unterstützte Plattform (lesen Sie dazu auch
des
Handbuchs).Sie benötigen außerdem eine seperate
- Festplatte, wenn Sie &os;/&sparc64; installieren wollen,
+ Festplatte, wenn Sie &os;/&arch.sparc64; installieren wollen,
da es derzeit leider noch nicht möglich ist, die
Platte mit einem weiteren Betriebssystem zu teilen.Unterstützte HardwareDie Hardware-Notes, die mit jedem &os;-Release
ausgeliefert werden, enthalten eine Liste lauffähiger
Hardware. Die Hardware-Notes befinden sich üblicherweise
in der Datei HARDWARE.TXT im
Wurzelverzeichnis der Distribution (CD-ROM oder FTP).
Sie können die Hardware-Notes außerdem im
Dokumentationsmenü von
sysinstall oder auf der Webseite
Release Information
lesen.Vor der InstallationErstellen Sie eine GerätelisteBevor Sie &os; installieren, erfassen Sie die Komponenten
Ihres Rechners. Die &os;-Installation wird die Komponenten
(Festplatten, Netzwerkkarten, CD-ROM-Laufwerke) zusammen
mit der Modellbezeichnung und des Herstellers anzeigen.
&os; wird auch versuchen, die richtige Konfiguration der
Geräte zu ermitteln. Dazu gehören die benutzten
Interrupts (IRQ) und IO-Ports. Wegen der Unwägbarkeiten
von PC-Hardware kann die Konfiguration der Geräte
allerdings fehlschlagen. In diesem Fall müssen Sie
die von &os; ermittelte Konfiguration korrigieren.Wenn Sie schon ein anderes Betriebssystem, wie &windows;
oder Linux installiert haben, können Sie die
Hardware-Konfiguration mit den Mitteln dieses Betriebssystems
bestimmen. Wenn Sie nicht sicher sind, welche Einstellungen
eine Erweiterungskarte besitzt, sehen Sie auf der Karte
selbst nach. Manchmal sind die Einstellungen dort
aufgedruckt. Gebräuchliche IRQs sind 3,
5 und 7. Die
Adressen von IO-Ports werden normalerweise hexadezimal,
zum Beispiel 0x330, angegeben.Halten Sie die Gerätekonfiguration vor der
Installation in einer Tabelle wie der nachstehenden fest:
GerätekonfigurationGerätIRQIO-PortsAnmerkungerste Festplatte--40 GB, Seagate, erster IDE-MasterCD-ROM--erster IDE-Slavezweite Festplatte--20 GB, IBM, zweiter IDE-Mastererster IDE-Controller140x1f0Netzwerkkarte--&intel; 10/100Modem--&tm.3com; 56K Faxmodem, an COM1…
Nachdem Sie wissen, über welche Hardware Ihr Rechner
verfügt, müssen Sie diese Informationen mit den
Hardwareanforderungen der zu installierenden &os;-Version
abgleichen.Sichern Sie Ihre DatenWenn der Rechner, auf dem Sie &os; installieren wollen,
wichtige Daten enthält, sichern Sie bitte diese Daten.
Prüfen Sie auch, dass Sie die Daten aus der Sicherung
wiederherstellen können, bevor Sie &os; installieren.
Die &os;-Installation fragt zwar nach, bevor Sie Daten auf Ihre
Festplatte schreibt, Ihre Daten sind allerdings unwiderruflich
verloren, wenn der Installationsvorgang einmal angelaufen
ist.Den Installationsort von &os; festlegenWenn Sie die gesamte Festplatte für &os; verwenden
wollen, müssen Sie sich an dieser Stelle keine weiteren
Gedanken machen – lesen Sie bitte im nächsten Abschnitt
weiter.Wenn Sie allerdings &os; neben anderen Betriebssystemen
betreiben wollen, müssen Sie wissen, wie Daten auf
einer Festplatte abgelegt werden und welche Auswirkungen
dies hat.
- Platteneinteilung von &i386;-Systemen
+ Platteneinteilung von &os;/&arch.i386;-SystemenEine PC-Festplatte wird in einzelne Bereiche unterteilt,
die Partitionen heißen.
&os; verwendet intern ebenfalls Partitionen. Um
Verwechslungen und Unklarheiten zu vermeiden, werden diese
Plattenbereiche unter &os; als Slices bezeichnet. So
verwendet beispielsweise das Werkzeug
fdisk den Begriff Slices, um sich auf
PC-Partitionen zu beziehen. Auf
einer PC-Festplatte können maximal vier Partitionen,
die primäre Partitionen genannt
werden, angelegt werden. Eine
erweiterte Partition hebt diese
Beschränkung auf. Eine Festplatte kann nur eine
erweiterte Partition enthalten, die wiederum weitere
so genannte logische Partitionen
enthalten kann.Jede Partition besitzt eine Partitions-ID
– eine Zahl, die den Typ der Partition festlegt.
&os;-Partitionen tragen die Partitions-ID
165.Üblicherweise kennzeichnen Betriebssysteme Partitionen
in einer besonderen Art und Weise. Beispielsweise werden
jeder primären und logischen Partition unter DOS
und dem verwandten &windows; Laufwerksbuchstaben beginnend
mit C: zugewiesen.&os; muss auf einer primären Partition installiert
werden. In dieser Partition hält &os; alle Daten
einschließlich der Dateien, die Sie anlegen.
Verfügt das System über mehrere Festplatten,
können Sie auf allen oder einigen Platten eine
&os;-Partition einrichten. Zur Installation von &os;
benötigen Sie eine freie Partition: Dies kann eine
extra für die Installation eingerichtete Partition
sein oder eine existierende Partition, die nicht mehr
benötigte Daten enthält.Wenn auf allen Platten bereits sämtliche Partitionen
benutzt werden, müssen Sie eine der Partitionen
für &os; frei machen. Benutzen Sie dazu die Werkzeuge
des eingesetzten Betriebssystems (fdisk
unter DOS oder &windows;).Verfügt das System über eine freie Partition,
benutzen Sie diese Partition. Es kann allerdings sein,
dass Sie eine oder mehrere der vorhandenen Partitionen
vorher verkleinern müssen.Eine minimale &os;-Installation benötigt nur
100 MB Plattenplatz. Diese Installation ist
allerdings sehr begrenzt und
lässt wenig Platz für Ihre eigenen Dateien.
Realistischer sind 250 MB für &os; ohne
graphische Benutzeroberfläche und 350 MB
für &os; mit einer graphischen Benutzeroberfläche.
Sie benötigen weiteren Platz für die Installation
zusätzlicher Software.Um die Partitionen zu verkleinern, können Sie
beispielsweise das kommerzielle
&partitionmagic; oder das freie
GParted benutzen. Alternativ
enthält das Verzeichnis
tools
der CD-ROM für diesen Zweck bereits die freien
Werkzeuge FIPS und
PResizer. Die Dokumentation
zu beiden Werkzeugen befindet sich ebenfalls in diesem
Verzeichnis. FIPS und
PResizer können
nur die Größen von FAT16-
und FAT32-Partitionen verändern,
während GParted und
&partitionmagic; auch
NTFS-Partitionen verändern
können. GParted ist auf
vielen Linux-Live-CDs, beispielsweise der SystemRescueCD,
verfügbar.Bei der Veränderung von µsoft; Vista-Partionen
kommt es manchmal zu Problemen. In einem solchen Fall ist es
von Vorteil, wenn Sie eine Vista-Installations-CD zur
Verfügung haben. Wie bei jeder Änderung an Ihrer
Festplatte sollten Sie auch hier zuerst ein aktuelles Backup
anlegen.Der falsche Gebrauch dieser Werkzeuge kann
Daten auf der Festplatte löschen. Vor dem
Einsatz dieser Werkzeuge stellen Sie bitte sicher,
dass Sie frische, funktionierende Datensicherungen
besitzen.Eine bestehende Partition verwendenNehmen wir an, Sie haben einen Rechner mit einer
- 4 GB Festplatte auf der schon eine Version von
+ 4 GB Festplatte, auf der schon eine Version von
&windows; installiert ist. Weiterhin haben Sie die
Platte in zwei Laufwerke C:
und D: unterteilt, die jeweils
2 GB groß sind. Auf C:
wird 1 GB benutzt und 0,5 GB von Laufwerk
D: werden benutzt.Sie haben also eine Festplatte mit zwei Partitionen
und könnten alle Daten von Laufwerk
D: auf das Laufwerk
C: kopieren. Damit wäre
die zweite Partition für &os; frei.Eine bestehende Partition verkleinernNehmen wir an, Sie haben einen Rechner mit einer
4 GB Festplatte auf der schon eine Version von
&windows; installiert ist. Während der Installation
von &windows; haben sie eine große Partition
C: angelegt, die 4 GB
groß ist. Von den 4 GB werden 1,5 GB
benutzt und Sie wollen 2 GB für &os; verwenden.Sie haben zwei Möglichkeiten, &os; zu
installieren:Sichern Sie die Daten der &windows;-Partition und
installieren Sie &windows; erneut auf einer 2 GB
großen Partition.Verkleinern Sie die &windows;-Partition mit
einem der oben aufgeführten Werkzeuge.Platteneinteilung von Alpha-SystemenAlphaAuf einer Alpha müssen Sie &os; auf einer
eigenen Festplatte installieren. Zurzeit können
Sie diese Festplatte nicht mit einem anderen Betriebssystem
zusammen benutzen. Abhängig von der Alpha-Maschine,
die Sie besitzen, können Sie eine SCSI- oder eine
IDE-Festplatte verwenden; Voraussetzung ist, dass Sie
das System von der gewählten Platte starten
können.Entsprechend den Konventionen der Handbücher
von Digital/Compaq werden Eingaben im SRM in
Großbuchstaben dargestellt. Der SRM beachtet
Groß- und Kleinschreibung nicht.Das SRM-Kommando SHOW DEVICE
zeigt die Art und die Namen der Laufwerke des Systems
an. Geben Sie das Kommando an der SRM-Eingabeaufforderung
ein:>>>SHOW DEVICE
dka0.0.0.4.0 DKA0 TOSHIBA CD-ROM XM-57 3476
dkc0.0.0.1009.0 DKC0 RZ1BB-BS 0658
dkc100.1.0.1009.0 DKC100 SEAGATE ST34501W 0015
dva0.0.0.0.1 DVA0
ewa0.0.0.3.0 EWA0 00-00-F8-75-6D-01
pkc0.7.0.1009.0 PKC0 SCSI Bus ID 7 5.27
pqa0.0.0.4.0 PQA0 PCI EIDE
pqb0.0.1.4.0 PQB0 PCI EIDEDie Ausgabe stammt von einer Digital Personal Workstation
433au und zeigt drei an das System angeschlossene Laufwerke.
Das erste Laufwerk ist ein CD-ROM mit dem Namen
DKA0, die anderen beiden sind
Festplatten mit den Namen DKC0
und DKC100.Laufwerke mit Namen wie DKx
sind SCSI-Laufwerke. Der Name DKA100
zeigt ein SCSI-Laufwerk mit der SCSI-ID 1 auf dem ersten
SCSI-Bus (A) an. DKC300 zeigt
ein SCSI-Laufwerk mit der SCSI-ID 3 auf dem dritten
SCSI-Bus (C) an. SCSI Host-Bus-Adapter werden mit
dem Namen PKx bezeichnet.
Wie in der Ausgabe von SHOW DEVICE
gezeigt, werden SCSI-CD-ROM-Laufwerke wie andere
SCSI-Festplatten behandelt.IDE-Laufwerke werden mit DQx
bezeichnet, der dazugehörige IDE-Controller
heißt PQx.Netzwerkparameter ermittelnWird während der Installation ein
Netzwerk benötigt (weil Sie über
FTP oder von einem NFS-Server installieren wollen),
müssen Sie die Konfiguration des Netzwerks kennen.
Während der Installation werden Netzwerkparameter
abgefragt, damit sich &os; mit dem Netzwerk verbinden
und die Installation abschließen kann.Verbindung über Ethernet oder ein Kabel/DSL-ModemWenn Sie sich mit einem Ethernet verbinden oder eine
Internet-Verbindung mit einem Ethernet-Adapter über
Kabel oder DSL herstellen, benötigen Sie die nachstehenden
Daten:IP-AdresseIP-Adresse des Default-GatewaysHostnameIP-Adressen der DNS-ServerSubnetzmaskeWenn Sie die Daten nicht besitzen, fragen Sie bitte
Ihren Systemadministrator oder Ihren Service-Provider.
Können die Daten über DHCP
bezogen werden, merken Sie sich diese Tatsache.Verbindung über ein ModemAuch wenn Sie sich mit einem normalen Modem bei
einem ISP einwählen, können Sie &os; aus
dem Internet installieren. Die Installation über
ein Modem dauert nur sehr lange.Sie benötigen die nachstehenden Daten:Die Telefonnummer des ISPs.Die COM-Schnittstelle, an der das Modem
angeschlossen ist.Den Benutzernamen und das Passwort für
Ihr Konto.Lesen Sie die &os;-ErrataAuch wenn das &os;-Project bemüht ist, ein
Release so stabil wie möglich herzustellen, treten
ab und an Fehler auf. In seltenen Fällen betrifft
ein Fehler die Installations-Prozedur. Die Fehler und
deren Behebungen werden in den
&os;-Errata
- festgehalten. Lesen Sie bitte die Errata bevor Sie &os;
+ festgehalten. Lesen Sie bitte die Errata, bevor Sie &os;
installieren, damit Sie nicht in frisch entdeckte
Probleme laufen.Dokumentation zu jedem Release, inklusive der Errata
zu jedem Release, finden Sie im
- Release-Abschnitt
+ Release-Bereich
des FreeBSD
- Webauftritts..
+ Webauftritts.
Die Installationsdateien beschaffen&os; kann von Dateien aus irgendeiner der
nachstehenden Quellen installiert werden:Lokale Medienvon einer CD-ROM oder einer DVDvon einer DOS-Partition auf demselben Rechnervon einem SCSI- oder QIC-Bandlaufwerkvon DiskettenNetzwerkvon einem FTP-Server, wenn erforderlich auch durch
eine Firewall oder durch einen HTTP-Proxyvon einem NFS-Serverüber eine feste serielle oder
eine feste parallele VerbindungWenn Sie eine &os;-CD oder &os;-DVD gekauft haben,
besitzen Sie schon alles, was Sie zur Installation
benötigen. Lesen Sie bitte im nächsten
Abschnitt () weiter.Wenn Sie sich die &os;-Installationsdateien noch nicht
besorgt haben, lesen Sie bitte zuerst den
. Dort werden die
notwendigen Vorbereitungen für eine Installation
von den eben genannten Medien beschrieben. Wenn Sie
den Abschnitt durchgearbeitet haben, lesen Sie bitte
in weiter.Das Startmedium vorbereitenUm &os; zu installieren, müssen Sie Ihren Rechner
mit einem speziellen Startmedium hochfahren, das die
Installationsroutine startet. Sie können das
Installationsprogramm nicht unter einem anderen Betriebssystem
ausführen. Ein Rechner startet normalerweise das
auf der Festplatte installierte Betriebssystem, er kann
aber auch von Disketten gestartet werden. Heutige Rechner
können ebenfalls mit einer CD-ROM gestartet werden.Wenn Sie eine &os; CD-ROM oder DVD besitzen (gekauft
oder selbst erstellt) und Ihr Rechner von CD-ROM oder DVD
starten kann (üblicherweise können Sie das
mit der BIOS-Option einstellen),
können Sie diesen Abschnitt überspringen.
Eine &os; CD-ROM oder DVD lässt sich direkt starten;
Sie können damit &os; ohne weitere Vorbereitungen
installieren.Um Startdisketten zu erzeugen, benutzen Sie die
nachstehende Anleitung:Abbilder der Startdisketten besorgenDie Abbilder Startdisketten befinden sich auf dem
Installationsmedium im Verzeichnis
floppies/; sie
können auch aus dem Internet heruntergeladen werden:
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/<arch>/<version>-RELEASE/floppies/.
Ersetzen Sie <arch> und
<version> durch die
passende Architektur und die passende Version.
Beispielsweise stehen die Startdisketten von
- &os; &rel.current;-RELEASE für &i386; unter
+ &os;/&arch.i386; &rel.current;-RELEASE unter
.Die Abbilder besitzen die Dateinamenerweiterung
.flp. Im Verzeichnis
floppies/ befinden
sich verschiedene Abbilder; welches Sie benutzen,
hängt von der zu installierenden &os;-Version
und in einigen Fällen vom Zielrechner ab. In den
meisten Fällen werden Sie vier Disketten benötigen:
boot.flp,
kern1.flp,
kern2.flp sowie
kern3.flp.
Lesen Sie bitte die Datei README.TXT
im Verzeichnis floppies/,
sie enthält aktuelle Informationen zu den
Abbildern.Wenn Sie die Abbilder aus dem Internet herunterladen,
benutzen Sie bitte den Binärmodus
des FTP-Programms. Einige Web-Browser verwenden den
Textmodus (oder
ASCII-Modus), was dazu führt,
dass sich die erstellten Disketten nicht starten
lassen.Die Disketten vorbereitenPro Abbild benötigen Sie eine Diskette.
Es ist wichtig, dass die verwendeten Disketten fehlerfrei
sind. Sie können dies sicherstellen, indem Sie die
Disketten selbst formatieren, verlassen Sie sich bitte
nicht auf vorformatierte Disketten. Das Formatierprogramm
von &windows; zeigt fehlerhafte Blöcke nicht an,
es markiert die Blöcke einfach als fehlerhaft und
ignoriert sie dann. Benutzen Sie neue Disketten, wenn
Sie diese Installationsart verwenden.Wenn Sie &os; installieren und das Installationsprogramm
abstürzt, einfriert oder sich merkwürdig
verhält, sind oft fehlerbehaftete Disketten
die Ursache. Schreiben Sie die Abbilder auf neue
Disketten und versuchen Sie, noch mal zu installieren.Die Abbilder auf Disketten schreibenDie .flp-Dateien sind
keine normalen Dateien, die
Sie auf eine Diskette kopieren. Sie können
die Abbilder nicht von einem
Laufwerk auf ein anderes Laufwerk kopieren. Die
Abbilder werden mit einem speziellen Werkzeug direkt
auf die Diskette geschrieben.DOSWenn Sie die Startdisketten unter &ms-dos; oder
&windows; erstellen, können Sie das mitgelieferte
Werkzeug fdimage verwenden.Wenn Sie die Abbilder auf der CD-ROM verwenden und
das CD-ROM-Laufwerk den Laufwerksbuchstaben
E: besitzt, führen Sie
den nachstehenden Befehl aus:E:\>tools\fdimage floppies\boot.flp A:Führen Sie das Kommando für jede
.flp-Datei aus. Wechseln Sie
bitte jedes Mal die Diskette und beschriften Sie die
Diskette mit dem Namen der kopierten Datei. Falls Sie
die Abbilder an anderer Stelle liegen haben, passen Sie
bitte die Kommandozeile an. Wenn Sie keine CD-ROM
besitzen, können Sie fdimage
aus dem Verzeichnis
tools
des &os;-FTP-Servers herunterladen.Wenn Sie Startdisketten auf einem &unix; System
(zum Beispiel einem anderen &os; System) erstellen,
schreiben Sie die Abbilder mit dem Befehl &man.dd.1;
direkt auf die Disketten. Auf einem &os;-System
lautet die Kommandozeile:&prompt.root; dd if=boot.flp of=/dev/fd0Unter &os; spricht /dev/fd0
das erste Diskettenlaufwerk an (das Laufwerk
A:), /dev/fd1
spricht das Laufwerk B: an.
Andere &unix; Varianten verwenden unter Umständen
andere Gerätenamen, die in der Dokumentation
des jeweiligen Systems beschrieben sind.Nun ist alles für die &os;-Installation
vorbereitet.Die Installation startenDie Installationsprozedur lässt die Daten auf
Ihren Laufwerken solange unverändert bis die
nachstehende Meldung erscheint:Last Chance: Are you SURE you want continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!Vor dieser Meldung kann die Installationsprozedur
jederzeit abgebrochen werden, ohne die Daten auf der
Festplatte zu verändern. Wenn Sie meinen, etwas
falsch konfiguriert zu haben, können Sie vor
diesem Zeitpunkt einfach den Rechner ausschalten.Der SystemstartSystemstart von &i386;-SystemenSchalten Sie zunächst Ihren Rechner aus.Schalten Sie den Rechner ein. Während des
Starts sollte angezeigt werden, wie Sie das
Systemeinstellungsmenü (oder BIOS)
erreichen. Meist drücken Sie dazu die Tasten
F2, F10,
Del oder
AltS. Benutzen Sie die angezeigte Tastenkombination.
Viele Rechner zeigen beim Systemstart eine Grafik an.
Typischerweise können Sie die Grafik mit der
Taste Esc entfernen und so die
angezeigten Meldungen lesen.Suchen Sie Option, die einstellt von welchem Gerät
der Rechner startet. Normalerweise wird die Option
genannt und zeigt eine
Geräteliste, beispielsweise Floppy,
CD-ROM, First Hard Disk
an.Wenn Sie Startdisketten erstellt haben, wählen
Sie Floppy aus, wenn Sie von CD-ROM
starten, stellen Sie sicher, dass die CD-ROM ausgewählt
ist. Wenn Sie nicht sicher sind, lesen Sie bitte im
Handbuch des Rechners oder im Handbuch der Systemplatine
nach.Stellen Sie das gewünschte Startmedium ein
und sichern Sie die Einstellungen. Der Rechner sollte
dann neu starten.Wenn Sie, wie in
beschrieben, Startdisketten vorbereitet haben,
benötigen Sie nun die erste Diskette,
die boot.flp enthält.
Legen Sie diese Diskette in das Diskettenlaufwerk ein.Wenn Sie den Rechner von einer CD-ROM starten,
legen Sie die CD-ROM so früh wie möglich
in das Laufwerk ein.Wenn Ihr Rechner wie normal startet und das
existierende Betriebssystem lädt, kann das
folgende Ursachen haben:Das Startmedium (Diskette, CD-ROM) ist nicht schnell
genug eingelegt worden. Belassen Sie das Startmedium
im Laufwerk und starten Sie Ihren Rechner neu.Die BIOS-Einstellungen sind falsch vorgenommen
worden. Wiederholen Sie diesen Schritt, bis Sie
die richtige Einstellung gefunden haben.Das verwendete BIOS kann nicht von dem
gewünschten Medium starten.&os; startet jetzt. Wenn Sie von einer CD-ROM
starten, sehen Sie die folgenden Meldungen
(Versionsangaben entfernt):Booting from CD-Rom...
CD Loader 1.2
Building the boot loader arguments
Looking up /BOOT/LOADER... Found
Relocating the loader and the BTX
Starting the BTX loader
BTX loader 1.00 BTX version is 1.01
Console: internal video/keyboard
BIOS CD is cd0
BIOS drive C: is disk0
BIOS drive D: is disk1
BIOS 639kB/261120kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d]
\ Wenn Sie mit Startdisketten hochfahren, sehen
Sie folgende Meldungen (Versionsangaben entfernt):Booting from Floppy...
Uncompressing ... done
BTX loader 1.00 BTX version is 1.01
Console: internal video/keyboard
BIOS drive A: is disk0
BIOS drive C: is disk1
BIOS 639kB/261120kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/kernel text=0x277391 data=0x3268c+0x332a8 |
Insert disk labelled "Kernel floppy 1" and press any key...Folgen Sie der Anweisung und entfernen Sie die
boot.flp-Diskette,
anschließend legen Sie die
kern1.flp-Diskette ein
und drücken Enter.
Starten Sie das System mit der ersten
Diskette und legen Sie, wenn Sie dazu aufgefordert
werden, die anderen Disketten ein.Unabhängig davon, ob Sie von Disketten
oder von CD-ROM gestartet haben, erscheint danach das
&os; Bootloader-Menü:Warten Sie entweder zehn Sekunden oder drücken
Sie Enter.Systemstart von Alpha-SystemenAlphaSchalten Sie zunächst Ihren Rechner aus.Schalten Sie den Rechner ein und warten Sie
auf die Eingabeaufforderung des Boot-Monitors.Wenn Sie, wie in
beschrieben, Startdisketten vorbereitet haben,
benötigen Sie nun die erste Diskette,
die boot.flp enthält.
Legen Sie diese Diskette in das Diskettenlaufwerk ein.
Das nachstehende Kommando startet den Rechner von
der Diskette (falls nötig, passen Sie den
Gerätenamen der Diskette an):>>>BOOT DVA0 -FLAGS '' -FILE ''Wenn Sie den Rechner von einer CD-ROM starten,
legen Sie die CD-ROM in das Laufwerk ein und
führen das folgende Kommando aus (wenn
nötig, passen Sie den Gerätenamen
des CD-ROM-Laufwerks an):>>>BOOT DKA0 -FLAGS '' -FILE ''&os; wird jetzt starten. Wenn Sie den Rechner
mit einer Diskette gestartet haben, wird irgendwann
die nachstehende Meldung erscheinen:Insert disk labelled "Kernel floppy 1" and press any key...Folgen Sie der Anweisung und entfernen Sie die
boot.flp-Diskette,
anschließend legen Sie die
kern1.flp-Diskette ein
und drücken Enter.Unabhängig davon, ob Sie von Disketten
oder von CD-ROM gestartet haben, wird folgende
Meldung erscheinen:Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [kernel] in 9 seconds... _Warten Sie entweder zehn Sekunden oder drücken
Sie Enter, danach erscheint das
Kernelkonfigurationsmenü.Systemstart bei &sparc64;-SystemenDie meisten &sparc64;-Systeme sind so konfiguriert, dass sie
automatisch von der Festplatte starten. Um &os; auf einem
solchen System zu installieren, müssen Sie das System aber
über das Netzwerk oder von einer CD-ROM starten. Daher
müssen Sie den Bootprozess unterbrechen und das System
über das PROM (OpenFirmware) starten.Dazu starten Sie Ihr System neu und warten, bis die
Startmeldung erscheint. Der genaue Wortlaut hängt vom
eingesetzten Modell ab, die Nachricht sollte aber ähnlich
der folgenden aussehen:Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.Um den Startvorgang zu unterbrechen, drücken Sie nun
die Tastenkombination L1A
oder StopA.
Verwenden Sie eine serielle Verbindung, senden Sie das Signal
BREAK über die serielle Konsole
(etwa durch die Eingabe von ~# in den
Programmen &man.tip.1; oder &man.cu.1;). In beiden Fällen
landen Sie anschließend am PROM-Prompt:ok ok {0} Der auf Einprozessorsystemen verwendete Prompt.Der Prompt auf Mehrprozessorsystemen. Die Zahl steht
dabei für die Anzahl der vorhandenen Prozessoren.Nun legen Sie Ihre CD-ROM in das Laufwerk ein und geben am
PROM-Prompt boot cdrom ein. Danach startet Ihr
System von der eingelegten CD-ROM.Die Geräteerkennung prüfenDie letzten paar Hundert Zeilen der Bildschirmausgabe
werden gesichert und können geprüft werden.Um sich den Bildschirmpuffer anzusehen, drücken
Sie die Taste Scroll-Lock. Im Puffer
können Sie mit den Pfeiltasten oder den Tasten
PageUp und PageDown
blättern. Um zur normalen Bildschirmausgabe
zurückzukehren, drücken Sie nochmals die Taste
Scroll-Lock.Prüfen Sie mit diesem Verfahren nun die Ausgaben
der Geräteerkennung. Sie werden einen Text ähnlich
wie in sehen. Die
genauen Ausgaben sind abhängig von den in Ihrem
System installierten Geräten.Prüfen Sie die Ausgabe der Geräteerkennung
sorgfältig und stellen Sie sicher, dass &os; alle
erwarteten Geräte gefunden hat. Wenn ein Gerät
nicht gefunden wurde, wird es nicht angezeigt. Ist dies
bei Ihnen der Fall, müssen Sie einen angepassten Kernel erstellen,
da das betroffene Gerät (beispielsweise eine Soundkarte)
in diesem Fall vom GENERIC-Kernel nicht
unterstützt wird.Ab &os; 6.2 gelangen Sie im nächsten Schritt
in ein Menü, in dem Sie über die Cursortasten das
Land, in dem Sie sich befinden, auswählen können
(). Durch die Bestätigung
mit der Enter-Taste wird automatisch das
von Ihnen gewählte Land sowie die dazu passende
Tastaturbelegung gewählt. Alternativ ist es auch hier
möglich, sysinstall zu verlassen
und von vorne zu beginnen.Wählen Sie mit den Pfeiltasten den Punkt
Exit Install des Hauptmenüs
aus. Nach der Auswahl wird die folgende Meldung
angezeigt: User Confirmation Requested
Are you sure you wish to exit? The system will reboot
- (be sure to remove any floppies from the drives).
+ (be sure to remove any floppies/CDs/DVDs from the drives).
[ Yes ] NoWenn Sie die Auswahl mit &gui.yes;
bestätigen, wird das Installationsprogramm erneut
starten, falls sich die CD-ROM noch im Laufwerk befindet.Wenn Sie mit Disketten gestartet haben, müssen
Sie vor dem Neustart die
boot.flp-Diskette entfernen.Das Werkzeug sysinstallZum Installieren von &os; stellt das &os;-Project das
Werkzeug sysinstall zur
Verfügung. Das Werkzeug arbeitet textorientiert
und bietet eine Reihe von Menüs und Bildschirmen,
um den Installationsprozess zu konfigurieren und zu
steuern.Die Menüs von sysinstall
werden mit Tasten wie den Pfeiltasten, Enter,
Tab oder Space bedient.
Eine ausführliche
Beschreibung der Tastenbelegung ist in der Gebrauchsanweisung
von sysinstall enthalten.Die Gebrauchsanweisung können Sie lesen, indem
Sie den Menüpunkt Usage
auswählen. Stellen Sie sicher, dass die Schaltfläche
[Select], wie in
gezeigt, aktiviert ist
und drücken Sie die Taste Enter.Es erscheinen Anweisungen wie das Menüsystem zu
bedienen ist. Wenn Sie diese gelesen haben, drücken
Sie Enter, um in das Hauptmenü
zurückzukehren.Die Dokumentation abrufenAus dem Hauptmenü wählen Sie mit den
Pfeiltasten Doc aus
und drücken Enter.Es wird das Dokumentationsmenü angezeigt.Lesen Sie bitte unbedingt die mitgelieferte Dokumentation.Um ein Dokument zu lesen, wählen Sie das Dokument
mit den Pfeiltasten aus und drücken Enter.
Wenn Sie das Dokument gelesen haben, kommen Sie mit der
Taste Enter in das Dokumentationsmenü
zurück.Um in das Hauptmenü zurückzukommen,
wählen Sie mit den Pfeiltasten Exit
aus und drücken die Taste Enter.Die Tastaturbelegung ändernUm die Tastaturbelegung zu ändern, wählen
Sie den Menüpunkt Keymap
und drücken Enter. Dies ist nur
erforderlich wenn Sie eine nicht standard-konforme Tastatur
oder eine andere als eine amerikanische Tastatur einsetzen.Eine andere Tastaturbelegung können Sie mit den
Pfeiltasten markieren und der Taste Space
auswählen. Wenn Sie die Taste Space
nochmals drücken wird die Auswahl aufgehoben. Haben
Sie eine Tastaturbelegung ausgewählt, markieren Sie
mit den Pfeiltasten &gui.ok; und drücken Sie
Enter.Der Bildschirmabzug zeigt nur einen der verfügbaren
Belegungen an. Mit der Taste Tab markieren
Sie die Schaltfläche &gui.cancel;, die mit der
Vorgabe-Belegung wieder in das Hauptmenü
zurückführt.Installationsoptionen einstellenWählen Sie Options
aus und rücken die Taste Enter.Für die meisten Benutzer sind die voreingestellten
Werte völlig ausreichend und brauchen daher nicht
geändert werden. Der Name des Releases variiert mit
der zu installierenden Version von &os;.Eine Beschreibung der ausgewählten Option
erscheint blau hervorgehoben am unteren Ende des
Bildschirms. Mit der Option
Use Defaults können
Sie alle Optionen auf die Vorgabewerte zurückstellen.Wenn Sie die Hilfeseite zu den verschiedenen Optionen
lesen wollen, drücken Sie die Taste
F1.Die Taste Q führt in das
Hauptmenü zurück.Eine Standard-Installation startenDie Standard-Installation
sollte von allen &unix;- oder &os;-Anfängern
benutzt werden. Markieren Sie mit den Pfeiltasten
Standard und drücken
Sie Enter, um die Installation zu
starten.Plattenplatz für &os; bereitstellenIhre erste Aufgabe ist, &os; Plattenplatz bereitzustellen und
den Plattenplatz für sysinstall
kenntlich zu machen (label).
Sie müssen daher wissen, wie &os; mit Platten
umgeht.Nummerierung der Laufwerke im BIOSBevor Sie &os; installieren und konfigurieren, sollten
- Sie Sie einen wichtigen Punkt beachten, besonders wenn Sie
- mehrere Festplatten besitzen.
+ Sie Sie einen wichtigen Punkt beachten. Dies gilt insbesondere
+ dann, wenn Sie mehrere Festplatten besitzen.
DOSMicrosoft WindowsIn einem PC, der unter einem vom BIOS abhängigen
Betriebssystem, wie &ms-dos; oder µsoft.windows;
läuft, kann das BIOS die normale Reihenfolge der
Laufwerke verändern und das Betriebssystem beachtet
diese Änderung. Mit dieser Funktion kann der
Rechner von einem anderen Laufwerk als dem so genannten
primären Laufwerk gestartet werden.
Die Funktion ist sehr zweckmäßig für Benutzer,
die Datensicherungen auf einer zweiten Platte erstellen
und dafür Werkzeuge wie
Ghost oder xcopy
einsetzen. Wenn die erste Platte ausfällt, von einem
Virus befallen wird oder durch einen Fehler des
Betriebssystems verunstaltet wird, können die
Platten im BIOS logisch getauscht werden. Es sieht so
aus, als wären die Laufwerke, ohne Öffnen des
Gehäuses getauscht worden.SCSIBIOS
- Teurere Systeme mit SCSI-Controllern haben oft BIOS
- Erweiterungen, mit denen die Reihenfolge von bis zu sieben
+ Teurere Systeme mit SCSI-Controllern haben oft
+ BIOS-Erweiterungen, mit denen die Reihenfolge von bis zu sieben
SCSI-Platten in ähnlicher Weise verändert werden
kann.Ein Benutzer, der es gewohnt ist, diese BIOS-Funktionen
zu benutzen, mag überrascht sein, dass &os; sich nicht
wie erwartet verhält. &os; verwendet das BIOS nicht
und weiß daher nichts von der logischen Plattenordnung
im BIOS. Dies kann zu sehr verwirrenden Situationen
führen, insbesondere wenn die Platten identische
Geometrien besitzen und Kopien voneinander sind.Vor der Installation von &os; sollte im BIOS die
normale Nummerierung der Laufwerke eingestellt und so belassen
werden. Ist es nötig, die Reihenfolge der Laufwerke zu
verändern, so sollte das immer auf dem schweren Weg, also
durch Öffnen des Gehäuses und Verändern der
Jumper und Kabel, erfolgen.Von Bills und Freds ungewöhnlichen
AbenteuernBill macht aus einer älteren Wintel Kiste ein
neues &os;-System für Fred. Auf einer SCSI-Platte,
die er mit der SCSI-ID 0 konfiguriert, installiert Bill
&os;.Nachdem Fred das System einige Tage benutzt hat, bemerkt
er, dass die ältere SCSI-Platte viele Fehler meldet
und beschwert sich bei Bill.Nach einigen Tagen entschließt sich Bill,
die Sache in die Hand zu nehmen. Er schnappt sich
eine identische SCSI-Platte aus dem Lager im Hinterzimmer
und baut diese, nachdem Sie einen Oberflächenscan
überstanden hat, mit der SCSI-ID 4 ein.
Anschließend kopiert er die Daten von der Platte
mit der SCSI-ID 0 auf die Platte mit der SCSI-ID 4.
Da die neue Platte zufriedenstellend läuft, stellt
Bill im SCSI-BIOS die Reihenfolge der Platten so um,
dass das System von der neuen Platte startet. Nach
einem problemlosen Start von &os; läuft das
System und Fred ist zufrieden.Nach einiger Zeit haben Bill und Fred Lust auf ein
weiteres Abenteuer – Sie wollen das System auf
eine neue &os;-Version aktualisieren. Bill ersetzt
die angeschlagene Platte mit der SCSI-ID 0 durch
eine gleiche Platte aus dem Lager. Auf der ausgetauschten
Platte installiert er problemlos mithilfe von
Freds Startdisketten die neue Version von &os;.Fred braucht ein paar Tage, um die neue &os;-Version
zu testen und entscheidet, dass Sie für den
produktiven Einsatz geeignet ist. Nun müssen die
Daten von der alten Platte (mit der SCSI-ID 4)
kopiert werden. Fred hängt dazu die alte Platte
ein und stellt bestürzt fest, dass alle Daten
verschwunden sind.Wo sind die Daten hin?Bill kopierte die Daten von der Platte mit der
SCSI-ID 0 auf die Platte mit der SCSI-ID 4.
Als Bill die Startreihenfolge im SCSI-BIOS änderte,
führte er sich nur selbst an der Nase herum. &os;
lief weiterhin auf der Platte mit der SCSI-ID 0.
Durch die Änderung der Startreihenfolge wurde nur
ein Teil des Boot- und Loader-Codes von der Platte mit
der SCSI-ID 4 geladen. Die Kernel-Treiber von
&os; ignorieren die BIOS-Einstellungen und benutzen
die normale Nummerierung. Das System lief also weiterhin
auf der Platte mit der SCSI-ID 0 und alle Daten von
Fred befanden sich auf dieser Platte. Es schien nur
so, als würde das System auf der Platte mit der
SCSI-ID 4 laufen.Wir sind erleichtert zu bemerken, dass keine Daten
verloren gingen oder verändert wurden. Die alte
Platte wurde im Müll wiedergefunden und Freds Daten
konnten wiederhergestellt werden (Bill weiß jetzt,
dass er noch viel zu lernen hat).Obwohl in diesem Beispiel SCSI-Platten verwendet
wurden, gelten die Konzepte gleichermaßen für
IDE-Platten.Slices mit Fdisk erstellenZu diesem Zeitpunkt werden noch keine Änderungen
auf die Festplatte ausgeschrieben. Sie können daher
sysinstall jederzeit verlassen,
und erneut beginnen, wenn Sie denken, einen Fehler gemacht
zu haben. Sie können sysinstall
über die Menüs verlassen, die Taste U
drücken oder die Option Undo
wählen. Wenn Sie einmal nicht wissen, wie Sie ein
Menü verlassen, können Sie den Rechner auch
einfach ausschalten.Nachdem Sie in sysinstall
die Standard-Installation ausgewählt haben, werden
Sie folgende Meldung sehen: Message
In the next menu, you will need to set up a DOS-style ("fdisk")
partitioning scheme for your hard disk. If you simply wish to devote
all disk space to FreeBSD (overwriting anything else that might be on
the disk(s) selected) then use the (A)ll command to select the default
partitioning scheme followed by a (Q)uit. If you wish to allocate only
free space to FreeBSD, move to a partition marked "unused" and use the
(C)reate command.
[ OK ]
[ Press enter or space ]Drücken Sie, wie angegeben, Enter.
Im nächsten Bildschirm werden alle Festplatten
angezeigt, die der Kernel während der Geräteerkennung
gefunden hat.
zeigt ein Beispiel von einem System mit zwei IDE-Platten,
die als ad0 und
ad2 erkannt wurden.Sie fragen sich vielleicht, warum ad1
nicht angezeigt wird. Wurde die Platte vielleicht
nicht erkannt?Stellen Sie sich ein System mit zwei IDE-Platten vor.
Eine Platte ist als Master am ersten Controller, die andere
als Master am zweiten Controller angeschlossen. Wenn &os;
die Platten in der Reihenfolge, in der sie gefunden werden,
nummerieren würde, hießen die Platten
ad0 und ad1
und alles würde funktionieren.Wenn Sie nun am ersten IDE-Controller eine dritte
Platte als Slave anschließen würden, wäre
diese Platte ad1. Die vorher
ad1 genannte Platte würde
nun ad2 heißen. Dateisysteme
werden auf Geräten wie ad1s1a
angelegt. Daher könnte es passieren, dass auf
einmal Dateisysteme nicht mehr gefunden werden und Sie
&os; umkonfigurieren müssten.Um diese Probleme zu umgehen, kann der Kernel so
eingestellt werden, dass er Platten nach ihrem Anschlussort
anstelle der gefundenen Reihenfolge benennt. Nach diesem
Schema ist die Master-Platte am zweiten IDE-Controller
immerad2,
auch wenn es die Geräte ad0
oder ad1 gar nicht gibt.Dieses Verhalten ist in &os; voreingestellt und der
Grund warum im Beispiel die Geräte
ad0 und ad2
angezeigt werden. Der Rechner, von dem die gezeigte
Ausgabe stammt, hatte zwei IDE-Platten, die beide als
Master konfiguriert waren, und keine Slave-Platten.Wählen Sie die Platte aus, auf die Sie &os;
installieren wollen und drücken Sie &gui.ok;.
Anschließend startet Fdisk
und zeigt einen Bildschirm wie den in
.Der Bildschirm von Fdisk
ist in drei Abschnitte unterteilt.Der erste Abschnitt umfasst die ersten beiden Zeilen
der Anzeige. Er enthält Einzelheiten über die
aktuell ausgewählte Platte, unter anderem den
&os;-Gerätenamen, die Plattengeometrie und die
Kapazität der Platte.Der zweite Abschnitt zeigt die auf der Platte befindlichen
Slices. Angezeigt wird der Anfang und das Ende der Slice,
die Größe der Slice, der &os;-Gerätename,
eine Beschreibung und der Subtyp. Im Beispiel sehen Sie
zwei unbenutzte Slices, die durch die Plattenbelegung auf
PCs entstehen. Weiterhin sehen Sie eine große
FAT-Slice, die ziemlich sicher unter
&ms-dos;/&windows; als Laufwerk C:
auftaucht und eine erweiterte Slice, die unter &ms-dos;/&windows;
weitere Laufwerke enthalten kann.Im dritten Abschnitt sind die Kommandos von
Fdisk zusammengefasst.Die nächsten Schritte hängen von der
beabsichtigten Einteilung der Festplatte ab.Wenn Sie die gesamte Festplatte für &os; verwenden
wollen, drücken Sie die Taste A
(entspricht dem Menüpunkt
Use Entire Disk). Später
im Installationsverlauf müssen Sie diese Auswahl
bestätigen, danach werden alle bisherigen Daten von
der Festplatte gelöscht. Diese Auswahl löscht
vorher vorhandene Slices und ersetzt sie durch einen
kleinen unbenutzten Bereich (der wieder durch das PC-Design
bedingt ist) und eine große Slice für &os;.
Wählen Sie dann die neu erstellte Slice mit den Pfeiltasten
aus und drücken Sie die Taste S, um
die Slice als startfähig (bootbar) zu markieren.
zeigt den Bildschirm zu
diesem Zeitpunkt. Beachten Sie das A
in der Spalte Flags. Dies zeigt an,
dass die Slice aktiv ist und das System
von dieser Slice starten wird.Um Platz für &os; zu schaffen, können Sie
auch bestehende Slices löschen. Markieren Sie dazu
die Slice mit den Pfeiltasten und drücken Sie die Taste
D. Danach legen Sie eine neue Slice
mit der Taste C an. Sie werden nach der
Größe der zu erstellenden Slice gefragt; der
Vorgabewert entspricht der größten Slice, die
angelegt werden kann (entspricht entweder dem
größten freien Bereich auf der Festplatte oder
der ganzen Festplatte).Wenn Sie schon Platz für &os; geschaffen haben
(beispielsweise mit &partitionmagic;),
können Sie eine neue Slice direkt mit der Taste
C anlegen. Sie werden wieder nach der
Größe der anzulegenden Slice gefragt.Drücken Sie die Taste Q, wenn Sie
fertig sind. Sysinstall merkt
sich die Änderungen, schreibt sie aber noch nicht
auf die Festplatte.Einen Boot-Manager installierenSie können nun einen Boot-Manager installieren.
Unter folgenden Umständen sollten Sie den
&os;-Boot-Manager installieren:Das System besitzt mehr als ein Laufwerk und
&os; ist auf einem anderen Laufwerk als dem ersten
Laufwerk installiert.&os; teilt sich das Laufwerk mit einem anderen
Betriebssystem. Beim Systemstart wollen Sie auswählen,
welches Betriebssystem gestartet wird.Wird der Rechner ausschließlich mit &os; betrieben
und &os; ist auf dem ersten Laufwerk installiert, dann
genügt der Standard-Boot-Manager.
Wenn Sie einen anderen Boot-Manager benutzen, der &os;
starten kann, wählen Sie bitte None
aus.Nachdem Sie die Auswahl getroffen haben, drücken
Sie die Taste Enter.In der Hilfe, die Sie mit der Taste F1
aufrufen, werden Probleme beschrieben, die entstehen
können, wenn sich zwei Betriebssysteme ein Laufwerk
teilen.Slices auf einem anderen Laufwerk anlegenWenn das System mehr als ein Laufwerk besitzt, kehrt
die Installationsprozedur nach der Auswahl des Boot-Managers
zum Bildschirm Select Drives zurück.
Sie können hier ein anderes Laufwerk auswählen
und auf diesem Laufwerk mit Fdisk
weitere Slices anlegen.Wenn Sie &os; auf einem anderen Laufwerk als dem ersten
Laufwerk installieren, müssen Sie den &os;-Boot-Manager
auf beiden Laufwerken installieren.Die Taste Tab wechselt zwischen dem
zuletzt ausgewählten Laufwerk und den Schaltflächen
&gui.ok; und &gui.cancel;.Drücken Sie einmal die Taste Tab,
um &gui.ok; auszuwählen und drücken Sie
anschließend Enter um die
Installation weiterzuführen.Partitionen mit Bsdlabel
anlegenIn jeder angelegten Slice müssen Sie Partitionen
anlegen. Die Partitionen werden mit Buchstaben von
a bis h gekennzeichnet.
Die Buchstaben b, c
und d haben eine besondere Bedeutung,
die Sie beachten sollten.Einige Anwendungen profitieren von einer besonderen
Aufteilung der Partitionen, insbesondere wenn das System
mehr als ein Laufwerk besitzt. Bei der ersten &os;-Installation
sollten Sie sich allerdings nicht zu viele Gedanken über
die Partitionen machen. Wichtiger ist, dass Sie &os;
installieren und benutzen. Wenn Sie mehr Erfahrung mit
&os; gesammelt haben, können Sie &os; jederzeit mit
anderen Partitionen installieren.Das folgende Schema legt vier Partitionen an: Eine
Partition für den Auslagerungsbereich
(swap space) und drei
Partitionen für Dateisysteme.
Partitionen auf dem ersten LaufwerkPartitionDateisystemGrößeBeschreibunga/
- 100 MB
+ 512 MBDas Root-Dateisystem. Jedes andere Dateisystem
wird irgendwo unterhalb von diesem Dateisystem
- eingehangen. 100 MB ist eine vernünftige
+ eingehangen. 512 MB ist eine vernünftige
Größe für dieses Dateisystem.
Sie werden hier wenig Daten speichern und &os;
- benötigt ungefähr 40 MB Platz auf
+ benötigt ungefähr 128 MB Platz auf
diesem Dateisystem. Der Rest ist für temporäre
Daten und die Reserve, falls künftige Versionen
von &os; mehr Platz in /
benötigen.bN/A2-3 x RAMDer Auslagerungsbereich befindet sich auf der
b-Partition. Es ist schon fast
eine Kunst, die Größe des Auslagerungsbereichs
richtig zu bestimmen. Eine gute Daumenregel ist,
den Auslagerungsbereich zwei bis dreimal
größer als den Hauptspeicher (RAM)
anzulegen. Sie sollten mindestens 64 MB
für den Auslagerungsbereich vorsehen. Wenn
das System also weniger als 32 MB Hauptspeicher
besitzt, richten Sie einen 64 MB großen
Auslagerungsbereich ein.
Besitzt das System mehr als ein Laufwerk,
können Sie auf jedem Laufwerk Auslagerungsbereiche
anlegen. Da &os; alle Auslagerungsbereiche
benutzt, wird der Vorgang des Auslagerns durch
mehrere Bereiche beschleunigt. Berechnen Sie
in diesem Fall die Größe des benötigten
Auslagerungsbereichs, beispielsweise 128 MB,
und teilen Sie die Größe durch die
Anzahl der Laufwerke. Dies gibt die Größe
des Auslagerungsbereichs auf jedem Laufwerk.
Mit zwei Platten ergibt das in diesem Beispiel
64 MB Auslagerungsbereich pro Platte.e/var
- 50 MB
+ 256 MB bis 1024 MBDas Verzeichnis /var
enthält Dateien, die sich dauernd
ändern (Protokolldateien und Dateien für
Verwaltungszwecke) und auf die im Normalbetrieb
oft zugegriffen wird. Liegen diese Dateien in
einem gesonderten Dateisystem, kann &os; den Zugriff
auf die Dateien optimieren, ohne den Zugriff auf
Dateien mit einem anderen Zugriffmuster zu
stören.f/usr
- Der Rest des Laufwerks
+ Der Rest des Laufwerks (mindestens 2 GB)Alle anderen Dateien werden normalerweise
im Verzeichnis /usr oder
einem Unterverzeichnis von /usr
abgelegt.
+
+ Die eben genannten Werte dienen nur als Beispiel und sollten
+ nur von erfahrenen Benutzern editiert werden. Wir empfehlen Ihnen,
+ die vom Partitionseditor vorgeschlagene Aufteilung
+ (Auto Defaults) zu verwenden.
+
+
Wenn Sie &os; auf mehr als einem Laufwerk installieren,
müssen Sie noch weitere Partitionen in den Slices
auf den anderen Laufwerken anlegen. Am einfachsten legen
Sie pro Laufwerk zwei Partitionen an: eine für den
Auslagerungsbereich und eine andere für ein
Dateisystem.
Partitionen auf weiteren LaufwerkenPartitionDateisystemGrößeBeschreibungb--Wie schon besprochen, können Sie den
Auslagerungsbereich auf mehrere Platten verteilen.
Auch wenn die a-Partition frei
ist, sollte der Auslagerungsbereich entsprechend
der Konvention auf der b-Partition
angelegt werden.e/disknDer Rest des LaufwerksDer Rest der Platte wird von einer großen
Partition eingenommen. Sie könnten für
diese Partition die a-Partition
anstelle der e-Partition benutzen.
Allerdings ist die a-Partition
per Konvention für das Root-Dateisystem
(/) reserviert. Sie brauchen
die Konvention nicht zu beachten, da aber
sysinstall die Konvention
beachtet, ist die Installation sauberer, wenn Sie
das auch tun. Sie können das Dateisystem
irgendwo einhängen. Das Beispiel schlägt
die Verzeichnisse
/diskn
vor, wobei n die Laufwerke
nummeriert. Sie können ein anderes Schema
verwenden, wenn Sie möchten.
Wenn Sie die Aufteilung der Partitionen festgelegt haben,
können Sie die Partitionen mit
sysinstall anlegen. Es erscheint
die nachstehende Meldung: Message
Now, you need to create BSD partitions inside of the fdisk
partition(s) just created. If you have a reasonable amount of disk
space (200MB or more) and don't have any special requirements, simply
use the (A)uto command to allocate space automatically. If you have
more specific needs or just don't care for the layout chosen by
(A)uto, press F1 for more information on manual layout.
[ OK ]
[ Press enter or space ]Drücken Sie Enter, um den
&os;-Partitionseditor, der Disklabel
heißt, zu starten. zeigt den
Einstiegsbildschirm von Disklabel.
Der Bildschirm ist in drei Bereiche geteilt.Die ersten Zeilen zeigen den Namen des Laufwerks, das
Sie gerade bearbeiten und die Slice, die die erstellten
Partitionen enthält (Disklabel
spricht hier von Partitionen anstatt von Slices). Der
freie Platz einer Slice, der noch keiner Partition zugeordnet
ist, wird ebenfalls angezeigt.In der Mitte des Bildschirms werden die angelegten
Partitionen, der Name des Dateisystems, das sich in
der Partition befindet, dessen Größe und
die Optionen zum Erstellen des Dateisystems angezeigt.Das untere Drittel des Bildschirms zeigt die in
Disklabel gültigen
Tastenkombinationen.Disklabel kann für Sie
automatisch Partitionen mit vorgegebenen Größen
- erstellen. Probieren Sie das bitte jetzt aus und drücken
+ erstellen (diese Standardgrößen werden durch einen
+ internen Partitionierungsalgorithmus ermittelt, der auf der
+ Plattengröße beruht). Probieren Sie das bitte
+ jetzt aus und drücken
Sie die Taste A. Der Bildschirm sieht
danach ähnlich wie in
aus. Abhängig von der Größe des Laufwerks
können die Vorgabewerte richtig oder falsch sein.
Da Sie die Vorgaben nicht akzeptieren müssen, spielt
das keine Rolle.&os; legt das Verzeichnis /tmp
in einer eigenen Partition an. Dies verhindert,
dass sich die Root-Partition mit temporären
Dateien füllt.Wollen Sie die vorgegebenen Partitionen nicht verwenden
und durch eigene ersetzen, markieren Sie mit den Pfeiltasten
die erste Partition und drücken Sie die Taste
D, um die Partition zu löschen.
Wiederholen Sie dies für alle vorgegebenen Partitionen.Um die erste Partition (a), die als
/ eingehangen wird, zu erstellen,
drücken Sie die Taste C. Stellen Sie
dabei sicher, dass die richtige Slice im oberen Teil des
Bildschirms markiert ist. Wie in
, erscheint ein Fenster,
in dem Sie die Größe der Partition angeben
müssen. Sie können die Größe in
Blöcken oder einer Zahl gefolgt von M
für Megabyte, G für Gigabyte
oder C für Zylinder angeben.
-
- Ab &os; 5.X gibt es den Menüpunkt
- Custom Newfs (Taste Z).
- Sie können dort Dateisysteme vom Typ
- UFS2 anlegen (dies ist ab &os; 5.1
- die Vorgabe), die Einstellungen von
- mit Auto Defaults angelegten
- Dateisystemen ändern oder die Option
- für zu
- erstellende Dateisysteme voreinstellen.
- Vergessen Sie nicht, Soft Updates mit der Option
- zu aktivieren.
-
-
Die vorgegebene Größe erstellt eine Partition,
die den Rest der Slice ausfüllt. Wenn Sie die
Größen aus dem früheren Beispiel verwenden,
löschen Sie die vorgeschlagene Größe mit
- der Taste Backspace und tragen Sie die
- neue Größe, wie in
- gezeigt, ein. Drücken Sie anschließend
- &gui.ok;.
+ der Taste Backspace und tragen Sie
+ 512M ein, wie in
+ gezeigt. Drücken
+ Sie anschließend &gui.ok;.
Nachdem Sie die Größe der Partition festgelegt
haben, werden Sie gefragt, ob die Partition ein Dateisystem
oder einen Auslagerungsbereich enthalten soll (siehe
). Die erste Partition
enthält ein Dateisystem, wählen Sie
FS aus und drücken Sie
die Taste Enter.Abschließend müssen Sie, weil Sie ein
Dateisystem erstellen, angeben, wo das Dateisystem
eingehangen wird. Die Eingabe ist in
dargestellt.
Das Root-Dateisystem wird in /
eingehangen, geben Sie daher /
ein und drücken Sie die Taste Enter.Auf dem Bildschirm wird jetzt die neu angelegte Partition
angezeigt. Wiederholen Sie diese Prozedur für die
restlichen Partitionen. Beim Anlegen des Auslagerungsbereichs
werden Sie nicht nach einem Mountpoint gefragt, da
ein Auslagerungsbereich nie eingehangen wird. Wenn
Sie die letzte Partition anlegen, /usr,
können Sie die vorgeschlagene Größe
stehen lassen. Das Dateisystem wird dann den Rest der
Slice einnehmen.Der letzte Bildschirm von Disklabel
sieht wie in aus (Ihre
Werte werden von den gezeigten Werten abweichen).
Drücken Sie die Taste Q, um
Disklabel zu verlassen.Den Installationsumfang bestimmenDie Distribution auswählenWelche Software Sie installieren, hängt
hauptsächlich vom Zweck des Rechners und dem zur
Verfügung stehenden Plattenplatz ab. Die vorgegebenen
Distributionen reichen von der minimalen Installation
bis hin zu einer kompletten Installation. Anfänger
sollten eine der vorgegebenen Distributionen auswählen,
erfahrene Benutzer können die zu installierende
Distribution anpassen.Die Taste F1 führt zu einem
Hilfebildschirm, der die Distributionen und deren Inhalte
beschreibt. Drücken Sie Enter, um
die Hilfe zu verlassen und zur Auswahl der Distribution
zurückzukehren.Wenn Sie eine graphische Benutzeroberfläche
installieren wollen, sollten Sie eine Distribution
auswählen, deren Name mit X
anfängt. Die Konfiguration des X-Servers
und die Auswahl der Benutzeroberfläche ist
Teil der Nacharbeiten. Die Konfiguration des X-Servers
wird in besprochen.Seit &os; 5.3 wird &xorg;
als Standard-X-Server installiert.Wenn Sie einen angepassten Kernel erstellen wollen,
wählen Sie eine Distribution aus, die den Quellcode
(source code) enthält.
Warum und wie Sie einen angepassten Kernel erstellen, erfahren
Sie in .Natürlich ist das flexibelste System das, auf
dem alles installiert ist. Wenn das System über
ausreichend Plattenplatz verfügt, wählen
Sie mit den Pfeiltasten die Option All
aus (siehe )
und drücken die Taste Enter.
Wenn Sie Bedenken haben, dass der Plattenplatz nicht
ausreicht, wählen Sie eine Distribution, die weniger
Software enthält. Machen Sie sich keine unnötigen
Sorgen um die richtige Distribution, ausgelassene Distribution
können später nachinstalliert werden.Die Ports-Sammlung installierenNach der Auswahl der Distribution haben Sie Gelegenheit,
die &os;-Ports-Sammlung zu installieren. Mit der
Ports-Sammlung lässt sich Software Dritter auf
einfache Art und Weise installieren. Der Quellcode
der zu installierenden Software ist nicht in der
Ports-Sammlung enthalten. Stattdessen enthält die
Ports-Sammlung Dateien, die den Installationsprozess
(herunterladen, übersetzen und installieren) automatisieren.
Die Ports-Sammlung wird in
besprochen.Der Installationsprozess prüft nicht, ob ausreichend
Platz für die Ports-Sammlung vorhanden ist. Wählen
Sie die Ports-Sammlung bitte nur aus, wenn das System
über ausreichenden Platz verfügt. In
&os; &rel.current; nimmt die Ports-Sammlung ungefähr
&ports.size; Plattenplatz in Anspruch. Neuere Versionen
von &os; benötigen mit Sicherheit noch mehr Platz. User Confirmation Requested
Would you like to install the FreeBSD ports collection?
This will give you ready access to over &os.numports; ported software packages,
at a cost of around &ports.size; of disk space when "clean" and possibly much
more than that if a lot of the distribution tarballs are loaded
(unless you have the extra CDs from a FreeBSD CD/DVD distribution
available and can mount it on /cdrom, in which case this is far less
of a problem).
The ports collection is a very valuable resource and well worth having
on your /usr partition, so it is advisable to say Yes to this option.
For more information on the ports collection & the latest ports,
visit:
http://www.FreeBSD.org/ports
[ Yes ] NoWählen Sie mit den Pfeiltasten
&gui.yes; aus, um die Ports-Sammlung
zu installieren. Wählen Sie &gui.no;
aus, um die Ports-Sammlung auszulassen. Drücken
Sie danach die Taste Enter, es erscheint
wieder das Distributionsmenü.Wenn Sie mit den ausgewählten Optionen zufrieden
sind, wählen Sie mit den Pfeiltasten
Exit aus (stellen Sie sicher,
dass &gui.ok; aktiv ist) und drücken Sie
die Taste Enter.Das Installationsmedium auswählenWenn Sie von einer CD-ROM oder einer DVD installieren,
wählen Sie bitte
Install from a FreeBSD CD/DVD aus.
Stellen Sie sicher, dass &gui.ok; aktiv ist und drücken
Sie dann die Taste Enter, um mit der
Installation fortzufahren.Wenn Sie ein anderes Installationsmedium benutzen,
wählen Sie die passende Option aus und folgen
den angezeigten Anweisungen.Die Hilfeseiten über Installationsmedien erreichen
Sie mit der Taste F1. Drücken Sie
Enter, um zur Auswahl des Installationsmediums
zurückzukehren.FTP-InstallationsmodiInstallationFTPSie können zwischen drei FTP-Installationsmodi
wählen: Active-FTP, Passive-FTP oder über einen
HTTP-Proxy.FTP Active: Install from an FTP
serverDiese Option führt alle FTP-Operationen
im Active-Mode aus. Dieser Modus
funktioniert nicht durch Firewalls, er funktioniert
aber mit alten FTP-Servern, die den Passive-Mode
nicht beherrschen. Wenn die Verbindung im
Passive-Mode (das ist die Vorgabe) hängt,
versuchen Sie den Active-Mode.FTP Passive: Install from an FTP server through a
firewallFTPPassive-ModeMit dieser Option benutzt
sysinstall den
Passive-Mode für alle FTP-Operationen.
In diesem Modus funktionieren Verbindungen durch
Firewalls, die einkommende Pakete auf beliebigen
TCP-Ports blockieren.FTP via a HTTP proxy: Install from an FTP server
through a http proxyFTPüber einen HTTP-ProxyDiese Option weist sysinstall
an, alle FTP-Operationen mit HTTP über einen
Proxy (wie ein Web-Browser) durchzuführen.
Der Proxy leitet die Anfragen an den richtigen
FTP-Server weiter. Mit dieser Option passieren
Sie eine Firewall, die FTP-Verbindungen verbietet,
aber einen HTTP-Proxy anbietet. Neben dem FTP-Server
müssen Sie in diesem Fall den Proxy-Server
angeben.Bei einem FTP-Proxy-Server müssen Sie normalerweise
den Ziel-FTP-Server als Teil des Benutzernamens hinter dem
Klammeraffen (@) angeben. Der Proxy-Server
übernimmt die Kommunikation mit dem Ziel-FTP-Server.
Nehmen wir an, Sie wollen von
ftp.FreeBSD.org über
den FTP-Proxy foo.example.com
auf Port 1234 installieren.Wählen Sie das Menü
Options aus und setzen Sie
dort den FTP-Benutzernamen (username)
auf ftp@ftp.FreeBSD.org. Als Passwort
geben Sie bitte Ihre E-Mail-Adresse an. Setzen Sie das
Installationsmedium auf Active-FTP oder Passive-FTP, je
nachdem welchen Modus der Proxy-Server unterstützt.
Für die URL geben Sie
ftp://foo.example.com:1234/pub/FreeBSD an.Der Proxy-Server foo.example.com
leitet Zugriffe auf das Verzeichnis
/pub/FreeBSD
an den Server ftp.FreeBSD.org
weiter. Daher können
foo.example.com als
FTP-Server angeben.Die Installation festschreibenWenn Sie wünschen, kann die Installation nun
beginnen. Dies ist die letzte Gelegenheit, die
Installation abzubrechen und Änderungen auf der
Festplatte zu vermeiden. User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!
[ Yes ] NoWählen Sie &gui.yes; aus
und drücken Sie Enter, um weiter
zu machen.Die Installationsdauer hängt von den ausgewählten
Distributionen, dem Installationsmedium und der Geschwindigkeit
des Rechners ab. Während der Installation wird der
Fortgang mit Statusmeldungen angezeigt.Die Installation ist beendet, wenn die folgende
Meldung erscheint: Message
Congratulations! You now have FreeBSD installed on your system.
We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.
If you wish to re-enter this utility after the system is up, you may
do so by typing: /usr/sbin/sysinstall.
[ OK ]
[ Press enter or space ]Drücken Sie die Taste Enter,
um die Nacharbeiten durchzuführen.Wenn Sie &gui.no; auswählen und
Enter drücken wird die Installation
abgebrochen und das System wird nicht verändert.
Die nachstehende Meldung wird angezeigt: Message
Installation complete with some errors. You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.
[ OK ]Die Meldung wird angezeigt, weil nichts installiert
wurde. Drücken Sie Enter, um
in das Hauptmenü zurückzukehren. Dort können
Sie die Installationsprozedur verlassen.Arbeiten nach der InstallationNach einer erfolgreichen Installation wird das System
konfiguriert. Sie können das System direkt konfigurieren
oder nach einem Neustart. Nach einem Neustart rufen Sie
- sysinstall (vor &os; 5.2
- /stand/sysinstall) auf und wählen
+ sysinstall auf und wählen
den Menüpunkt Configure.NetzwerkkonfigurationWenn Sie schon PPP für eine FTP-Installation
konfiguriert haben, erscheint dieser Bildschirm nicht.
Sie können die Konfiguration später in
sysinstall vornehmen.Netzwerke und die Konfiguration von &os; als
Gateway oder Router werden eingehend im Kapitel
Weiterführende
Netzwerkthemen behandelt. User Confirmation Requested
Would you like to configure any Ethernet or SLIP/PPP network devices?
[ Yes ] NoWenn Sie eine Netzwerkkarte konfigurieren wollen,
wählen Sie &gui.yes; aus und
drücken Sie die Taste Enter.
Wählen Sie &gui.no;, um die
Netzwerkkonfiguration zu überspringen.Wählen Sie die zu konfigurierende Karte mit den
Pfeiltasten aus und drücken Sie die Taste
Enter. User Confirmation Requested
Do you want to try IPv6 configuration of the interface?
Yes [ No ]Für das gezeigte Installationsbeispiel genügte
das momentan verwendete Internet-Protokoll
(IPv4). Daher wurde mit den Pfeiltasten
&gui.no; ausgewählt und mit der
Taste Enter bestätigt.Wenn Sie durch einen RA-Server mit
einem IPv6-Netzwerk verbunden sind,
wählen Sie bitte &gui.yes; und
drücken die Taste Enter. Die Suche
nach den RA-Servern dauert
einige Sekunden. User Confirmation Requested
Do you want to try DHCP configuration of the interface?
Yes [ No ]Falls Sie das Dynamic Host Configuration Protocol
(DHCP) nicht verwenden, wählen
Sie &gui.no; aus und drücken
Sie Enter.Wenn Sie &gui.yes; auswählen,
wird das Programm dhclient
ausgeführt und bei Erfolg die Netzwerkkarte
konfiguriert. Mehr über
DHCP können Sie in
nachlesen.Der nächste Bildschirmabzug zeigt die
Netzwerkkonfiguration eines Systems, das Gateway für
das lokale Netz ist.Tragen Sie in die Felder, die Sie mit der Taste
Tab auswählen können, die
richtige Konfiguration ein.HostDer vollständige Rechnername
(fully-qualified hostname),
wie in diesem Beispiel
k6-2.example.com.DomainDer Domain-Name, in dem sich der Rechner befindet.
Im Beispiel ist das
example.com.IPv4 GatewayDie IP-Adresse des Rechners, der Pakete an entfernte
Netze weiterleitet. Sie müssen dieses Feld
ausfüllen, wenn der sich der Rechner in
einem Netzwerk befindet. Lassen Sie das
Feld leer, wenn der Rechner der Gateway
in das Internet ist. Der IPv4-Gateway wird
auch default gateway
oder default route
genannt.Name serverDie IP-Adresse des lokalen DNS-Servers. Im Beispiel
gibt es keinen lokalen DNS-Server, daher wurde der
DNS-Server des Providers
(208.163.10.2) benutzt.IPv4 addressDie IP-Adresse der Netzwerkkarte
(192.168.0.1).Netmask (Netzmaske)Im Beispiel werden Adressen aus einem Klasse C
Netz (192.168.0.0 bis
192.168.0.255) benutzt.
Standardmäßig besitzt ein Klasse C Netz
die Netzmaske
255.255.255.0.Extra options to ifconfig (Optionen für ifconfig)Zusätzliche Optionen für den Befehl
ifconfig, die spezifisch für die
verwendete Netzwerkkarte sind. Im Beispiel sind
keine Optionen angegeben.Wenn Sie alle Werte eingegeben haben, wählen
Sie mit Tab &gui.ok; aus und drücken
Sie Enter. User Confirmation Requested
Would you like to Bring Up the ed0 interface right now?
[ Yes ] NoWenn Sie &gui.yes; auswählen
und Enter drücken, wird die
Netzwerkkonfiguration aktiviert. Allerdings bringt dies
zu diesem Zeitpunkt nicht viel, da der Rechner noch
neu gestartet werden muss.Gateway einrichten User Confirmation Requested
Do you want this machine to function as a network gateway?
[ Yes ] NoWählen Sie &gui.yes;, wenn der
Rechner ein Gateway für ein lokales Netz ist und
Pakete an andere Netze weiterleitet. Wenn der Rechner
ein normaler Netzknoten ist, wählen Sie
&gui.no; aus. Bestätigen Sie
die auswahl mit der Taste Enter.IP-Dienste einrichten User Confirmation Requested
Do you want to configure inetd and the network services that it provides?
Yes [ No ]Wenn &gui.no; ausgewählt wird,
werden Dienste wie telnetd nicht
aktiviert. Benutzer können sich dann von entfernten
Rechnern nicht mit telnet an
dieser Maschine anmelden. Lokale Benutzer können aber
auf entfernte Rechner mit telnet
zugreifen.Die Dienste können Sie nach der Installation
aktivieren, indem Sie die Datei /etc/inetd.conf
editieren. Dies wird in
beschrieben.Wenn Sie jetzt weitere Dienste aktivieren möchten,
wählen Sie &gui.yes; aus.
Es erscheint die nachstehende Rückfrage: User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd. Enabling
these services may increase risk of security problems by increasing
the exposure of your system.
With this in mind, do you wish to enable inetd?
[ Yes ] NoBestätigen Sie die Rückfrage mit
&gui.yes;. User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available. The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled. Note that services for
IPv6 must be separately enabled from IPv4 services.
Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.
[ Yes ] NoWenn Sie &gui.yes; auswählen,
können Sie Dienste aktivieren, in dem Sie das Zeichen
# am Zeilenanfang entfernen.Wenn Sie die gewünschten Dienste aktiviert haben,
drücken Sie die Taste Esc. Es erscheint
ein Menü, in dem Sie die Änderungen abspeichern
und den Editor verlassen können.
+
+ SSH aktivieren
+
+
+ SSH
+ sshd
+
+
+ User Confirmation Requested
+ Would you like to enable SSH login?
+ Yes [ No ]
+
+ Durch die Auswahl von &gui.yes;, wird &man.sshd.8;, der
+ OpenSSH-Daemon aktiviert. Danach
+ ist es möglich, sich über eine verschlüsselte
+ Verbindung auf Ihrem System anzumelden. Weitere Informationen
+ über OpenSSH finden Sie in
+ des &os;-Handbuchs.
+
+
Anonymous-FTPFTPanonymous User Confirmation Requested
Do you want to have anonymous FTP access to this machine?
Yes [ No ]Anonymous-FTP verbietenWenn Sie die vorgegebene Auswahl
&gui.no; mit der Taste
Enter bestätigen, können
Benutzer, die ein Konto und ein Passwort auf dem
System besitzen, immer noch mit FTP auf das System
zugreifen.Anonymous-FTP erlaubenWenn Sie Anonymous-FTP erlauben, darf jeder auf Ihr
System zugreifen. Bedenken Sie die Folgen für die
Systemsicherheit (siehe ) bevor
Sie diese Option aktivieren.Um Anonymous-FTP zu aktivieren, wählen Sie
mit den Pfeiltasten &gui.yes; aus
und drücken Sie die Taste Enter.
- Es erscheint ein ähnlicher Bildschirm wie der
- folgende:
+ Es erscheint folgende Meldung:
+
+ User Confirmation Requested
+ Anonymous FTP permits un-authenticated users to connect to the system
+ FTP server, if FTP service is enabled. Anonymous users are
+ restricted to a specific subset of the file system, and the default
+ configuration provides a drop-box incoming directory to which uploads
+ are permitted. You must separately enable both inetd(8), and enable
+ ftpd(8) in inetd.conf(5) for FTP services to be available. If you
+ did not do so earlier, you will have the opportunity to enable inetd(8)
+ again later.
+
+ If you want the server to be read-only you should leave the upload
+ directory option empty and add the -r command-line option to ftpd(8)
+ in inetd.conf(5)
+
+ Do you wish to continue configuring anonymous FTP?
+
+ [ Yes ] No
+
+ Diese Nachricht informiert Sie darüber, dass der
+ FTP-Dienst auch in der Datei
+ /etc/inetd.conf aktiviert werden muss,
+ wenn Sie anonyme FTP-Verbindungen erlauben wollen (lesen Sie
+ dazu auch des &os;-Handbuchs).
+ Wählen Sie &gui.yes; und drücken Sie
+ Enter, um fortzufahren. Danach erscheint der
+ folgende Bildschirm:
- Mit der Taste F1 rufen Sie die
- Hilfe auf:
+ Mit der Taste Tab wechseln Sie zwischen
+ den Feldern, in die Sie die benötigten Informationen
+ eingeben.
- This screen allows you to configure the anonymous FTP user.
+
+
+ UID
-The following configuration values are editable:
+
+ Die User-ID, die dem anonymen FTP-Benutzer zugewiesen
+ werden soll. Alle hochgeladenen Dateien werden diesem
+ User-ID gehören.
+
+
-UID: The user ID you wish to assign to the anonymous FTP user.
- All files uploaded will be owned by this ID.
+
+ Group
-Group: Which group you wish the anonymous FTP user to be in.
+
+ Die Gruppe, zu der der anonyme FTP-Benutzer gehören
+ soll.
+
+
-Comment: String describing this user in /etc/passwd
+
+ Comment
+
+ Eine Beschreibung dieses Benutzers in der Datei
+ /etc/passwd.
+
+
-FTP Root Directory:
+
+ FTP Root Directory
- Where files available for anonymous FTP will be kept.
+
+ Ort, an dem Dateien für anonymen FTP-Zugang
+ bereitgestellt werden sollen.
+
+
-Upload subdirectory:
+
+ Upload Subdirectory
- Where files uploaded by anonymous FTP users will go.
+
+ Das Verzeichnis, in dem von einem anonymen FTP-Benutzer
+ hochgeladene Dateien gespeichert werden.
+
+
+
Das FTP-Wurzelverzeichnis wird per Voreinstellung
in /var angelegt.
Wenn in /var
zu wenig Platz vorhanden ist, können Sie das
FTP-Wurzelverzeichnis beispielsweise nach
/usr/ftp verlegen.Wenn Sie mit den Einstellungen zufrieden sind,
drücken Sie die Taste Enter. User Confirmation Requested
Create a welcome message file for anonymous FTP users?
[ Yes ] NoWenn Sie &gui.yes; auswählen
und mit Enter bestätigen, können
Sie die Begrüßungsmeldung des FTP-Servers
in einem Editor ändern.Der Editor, in dem Sie sich befinden, heißt
ee. Folgen Sie den Anweisungen,
um die Meldung zu editieren. Sie können die
Meldung auch später in einem Editor Ihrer
Wahl editieren. Merken Sie sich dazu den Dateinamen,
der im Editor unten angezeigt wird.Wenn Sie die Taste Esc drücken,
erscheint ein Menü, in dem
a) leave editor vorgewählt
ist. Drücken Sie die Taste Enter,
um den Editor zu verlassen. Falls Sie Änderungen
vorgenommen haben, bestätigen Sie die Änderungen
nochmals mit Enter.Network-File-System einrichtenMit dem Network-File-System (NFS)
können Sie über ein Netzwerk auf Dateien zugreifen.
Ein Rechner kann NFS-Server,
NFS-Client oder beides sein.
NFS wird in
besprochen.NFS-Server einrichten User Confirmation Requested
Do you want to configure this machine as an NFS server?
Yes [ No ]Wenn Sie keinen NFS-Server
benötigen, wählen Sie &gui.no;
aus und bestätigen Sie mit Enter.Wenn Sie &gui.yes; auswählen,
erscheint der Hinweis, dass die Datei
exports angelegt werden muss. Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
[ OK ]Drücken Sie Enter und es
wird ein Editor gestartet, in dem Sie die Datei
exports editieren können.Folgen Sie den Anweisungen, um Dateisysteme
zu exportieren. Sie können die Datei
auch später in einem Editor Ihrer
Wahl editieren. Merken Sie sich dazu den Dateinamen,
der im Editor unten angezeigt wird.Drücken Sie die Taste Esc
und es erscheint ein Menü, in dem
a) leave editor vorgewählt
ist. Drücken Sie die Taste Enter,
um den Editor zu verlassen.NFS-Client einrichtenMit einem NFS-Client können
Sie auf NFS-Server zugreifen. User Confirmation Requested
Do you want to configure this machine as an NFS client?
Yes [ No ]Wählen Sie entweder &gui.yes;
oder &gui.no; aus und drücken
Sie Enter.Die Systemkonsole einrichtenSie können verschiedene Merkmale der
Systemkonsole anpassen. User Confirmation Requested
Would you like to customize your system console settings?
[ Yes ] NoWenn Sie die Merkmale der Systemkonsole anpassen wollen,
wählen Sie &gui.yes; aus und
drücken Sie die Taste Enter.Oft wird ein Bildschirmschoner auf der Konsole aktiviert.
Wälen Sie mit den Pfeiltasten
Saver aus und drücken Sie
die Taste Enter.Wählen Sie den gewünschten Bildschirmschoner
mit den Pfeiltasten aus und drücken Sie
Enter. Das Konfigurationsmenü der
Systemkonsole erscheint wieder.In der Voreinstellung wird der Bildschirmschoner nach
300 Sekunden aktiviert. Um diese Zeitspanne zu
ändern, wählen Sie wieder
Saver aus. Mit den Pfeiltasten
wählen Sie dann Timeout
aus und drücken Enter. Es
erscheint ein Eingabefenster:Ändern Sie die Zeitspanne und wählen Sie &gui.ok;
aus. Mit Enter kehren Sie in das
Konfigurationsmenü der Systemkonsole zurück.Um die Nacharbeiten fortzuführen, wählen Sie
Exit aus und drücken Sie
Enter.Die Zeitzone einstellenWenn Sie die Zeitzone richtig einstellen, kann Ihr
Rechner automatisch regional bedingte Zeitumstellungen
ausführen und andere von der Zeitzone abhängige
Funktionen handhaben.Das folgende Beispiel gilt für den Osten der USA.
Ihre Auswahl hängt vom geographischen Standort
Ihres Rechners ab. User Confirmation Requested
Would you like to set this machine's time zone now?
[ Yes ] NoUm die Zeitzone einzustellen, wählen Sie
&gui.yes; und drücken
Enter. User Confirmation Requested
Is this machine's CMOS clock set to UTC? If it is set to local time
or you don't know, please choose NO here!
Yes [ No ]Je nachdem ob die Systemzeit die Zeitzone UTC verwendet,
wählen Sie &gui.yes; oder
&gui.no; aus. Bestätigen Sie
die Auswahl mit der Taste Enter.Wählen Sie mit den Pfeiltasten das richtige
Gebiet aus und drücken Sie Enter.Wählen Sie mit den Pfeiltasten das richtige
Land aus und drücken Sie Enter.Wählen Sie mit den Pfeiltasten die richtige
Zeitzone aus drücken Sie Enter. Confirmation
Does the abbreviation 'EDT' look reasonable?
[ Yes ] NoWenn die angezeigte Abkürzung der Zeitzone richtig
ist, bestätigen Sie diese mit der Taste
Enter.Linux-Kompatibilität User Confirmation Requested
Would you like to enable Linux binary compatibility?
[ Yes ] NoWenn Sie &gui.yes; auswählen
und Enter drücken, können Sie
Linux-Software auf &os; laufen lassen. Später wird
dazu die notwendige Software installiert.Wenn Sie über FTP installieren, müssen Sie
mit dem Internet verbunden sein. Einige FTP-Server bieten
nicht alle verfügbare Software an. Es kann sein, dass
die nötige Software für die Linux-Kompatibilität
nicht installiert werden kann, dies können Sie später
jedoch nachholen.Die Maus konfigurierenMit einer 3-Tasten-Maus können Sie Texte auf der
Konsole und in Programmen markieren und einfügen
(cut and paste). Wenn Sie
eine 2-Tasten-Maus besitzen, können Sie eine 3-Tasten-Maus
emulieren. Lesen Sie dazu nach der Installation die
Hilfeseite &man.moused.8;. Das folgende Beispiel zeigt
die Konfiguration einer nicht-USB-Maus (PS/2 oder serielle
Maus): User Confirmation Requested
- Does this system have a non-USB mouse attached to it?
+ Does this system have a PS/2, serial, or bus mouse?
[ Yes ] No
- Wählen Sie &gui.no; für
- eine USB-Maus und &gui.yes; für
- eine andere Maus aus und drücken Sie
+ Wählen Sie &gui.yes; für eine PS/2-, eine
+ serielle oder eine Bus-Maus. Haben Sie hingegen eine USB-Maus,
+ wählen Sie &gui.no;. Danach drücken Sie
Enter.Markieren Sie mit den Pfeiltasten
Type und drücken Sie
press Enter.Im Beispiel wurde eine PS/2-Maus verwendet, sodass die
Vorgabe Auto passend war.
Sie können das Protokoll mit den Pfeiltasten ändern.
Stellen Sie sicher, dass &gui.ok; aktiviert ist und
verlassen Sie das Menü mit der Taste
Enter.Wählen Sie mit den Pfeiltasten
Port und drücken Sie die Taste
Enter.Im Beispiel wurde eine PS/2-Maus verwendet, sodass die
Vorgabe PS/2 richtig war.
Sie können den Port mit den Pfeiltasten ändern.
Bestätigen Sie die Auswahl mit der Taste
Enter.Wählen Sie nun mit den Pfeiltasten
Enable aus und drücken Sie
die Taste Enter, um den Mouse-Daemon
zu aktivieren und zu testen.Bewegen Sie die Maus hin und her und prüfen Sie,
dass sich der Mauszeiger entsprechend bewegt. Wenn alles
in Ordnung ist, wählen Sie &gui.yes;
aus und drücken Sie Enter. Wenn sich
die Maus nicht richtig verhält, wurde sie nicht korrekt
konfiguriert. Wählen Sie in diesem Fall
&gui.no; und versuchen Sie, die
Einstellungen zu korrigieren.Um mit den Nacharbeiten fortzufahren, wählen Sie
mit den Pfeiltasten Exit aus
und drücken Sie Enter.
-
-
-
-
- Tom
- Rhodes
- Beigetragen von
-
-
-
+
+ Pakete installieren
- Weitere Netzwerkdienste einrichten
+ Pakete (packages) sind
+ schon übersetzte Programme und sind ein
+ zweckmäßiger Weg, Programme zu installieren.
- Anfänger ohne Vorwissen finden das Einrichten
- von Netzwerkdiensten oft deprimierend. Netzwerke und
- das Internet sind für moderne Betriebssysteme von
- entscheidender Bedeutung. Es ist daher wichtig, die
- Netzwerkfunktionen von &os; zu kennen. Die von &os;
- angebotenen Netzwerkdienste können Sie während
- der Installation kennen lernen.
+ Beispielhaft wird im Folgenden die Installation
+ eines Paketes gezeigt. In diesem Schritt können
+ auch weitere Pakete installiert werden. Nach der
+ Installation können Sie mit
+ sysinstall zusätzliche
+ Pakete installieren.
- Netzwerkdienste sind Programme, die Eingaben aus dem
- Netzwerk entgegennehmen. Es wird große Mühe
- darauf verwendet, dass diese Programme keinen Schaden
- verursachen. Leider können auch Programmierern
- Fehler unterlaufen und es gibt Fälle, in denen Fehler
- in Netzwerkdiensten von Angreifern ausgenutzt wurden.
- Es ist daher wichtig, dass Sie nur Dienste aktivieren,
- die Sie benötigen. Im Zweifallsfall sollten Sie
- einen Dienst solange nicht aktivieren, bis Sie herausfinden,
- dass Sie den Dienst benötigen. Einen Dienst können
- Sie später immer noch mit sysinstall
- oder in der Datei /etc/rc.conf
- aktivieren.
+ User Confirmation Requested
+ The FreeBSD package collection is a collection of hundreds of
+ ready-to-run applications, from text editors to games to WEB servers
+ and more. Would you like to browse the collection now?
- Wählen Sie den Menüpunkt
- Networking und es erscheint ein Menü
- wie das nachstehende:
+ [ Yes ] No
-
-
-
- Den X-Server einrichten
-
-
- Der X-Server kann erst nach einer erfolgreichen
- Installation von &os; eingerichtet werden. Weitere
- Informationen zur Installation und Konfiguration des X-Servers
- enthält des Handbuchs.
-
-
- Wenn Sie eine graphische Benutzeroberfläche,
- wie KDE oder
- GNOME verwenden wollen,
- müssen Sie einen X-Server einrichten.
-
-
- Pakete installieren
-
- Pakete (packages) sind
- schon übersetzte Programme und sind ein
- zweckmäßiger Weg, Programme zu installieren.
-
- Beispielhaft wird im Folgenden die Installation
- eines Paketes gezeigt. In diesem Schritt können
- auch weitere Pakete installiert werden. Nach der
- Installation können Sie mit
- sysinstall (vor &os; 5.2
- /stand/sysinstall) zusätzliche
- Pakete installieren.
-
- User Confirmation Requested
- The FreeBSD package collection is a collection of hundreds of
- ready-to-run applications, from text editors to games to WEB servers
- and more. Would you like to browse the collection now?
-
- [ Yes ] No
-
- Nachdem Sie [ Yes ]
- ausgewählt und Enter gedrückt
- haben, gelangen Sie in die Paketauswahl:
-
-
- Die Paketkategorie aussuchen
-
-
-
-
-
-
-
-
- Es stehen nur die Pakete zur Auswahl, die sich
- auf dem momentanen Installationsmedium befinden.
-
- Wenn Sie All auswählen,
- werden alle Pakete angezeigt. Sie können die
- Anzeige auf die Pakete einer Kategorie beschränken.
- Wählen Sie mit den Pfeiltasten die Kategorie
- aus und drücken Sie die Taste
- Enter.
-
- Ein Menü mit allen Paketen der ausgewählten
- Kategorie erscheint:
-
-
- Pakete auswählen
-
-
-
-
-
-
-
-
- Im gezeigten Bildschirm ist das Paket
- bash ausgewählt. Sie
- können weitere Pakete auswählen, indem Sie
- die Pakete mit den Pfeiltasten markieren und die Taste
- Space drücken. In der unteren
- linken Ecke des Bildschirms wird eine Kurzbeschreibung
- des ausgewählten Pakets angezeigt.
-
- Die Taste Tab wechselt zwischen
- dem zuletzt ausgesuchten Paket, &gui.ok; und
- &gui.cancel;.
-
- Wenn Sie die zu installierenden Pakete ausgewählt
- haben, drücken Sie einmal Tab, um
- &gui.ok; zu markieren. Drücken Sie dann
- Enter, um wieder in die Paketauswahl
- zu gelangen.
-
- Die rechte und die linke Pfeiltaste wechseln ebenfalls
- zwischen &gui.ok; und &gui.cancel;. Mit diesen Tasten
- können Sie auch &gui.ok; auswählen und dann mit
- Enter zur Paketauswahl
- zurückkehren.
-
-
- Pakete installieren
-
-
-
-
-
-
-
-
- Benutzen Sie die Taste Tab und
- die Pfeiltasten um [ Install ]
- auszuwählen. Drücken Sie anschließend
- die Taste Enter. Sie müssen jetzt
- die Installation der Pakete bestätigen:
-
-
- Paketinstallation bestätigen
-
-
-
-
+ Die Paketinstallation wird gestartet, wenn Sie
&gui.ok; auswählen und Enter
drücken. Den Verlauf der Installation können
Sie anhand der angezeigten Meldungen verfolgen; achten
Sie dabei auf Fehlermeldungen.Nach der Paketinstallation können Sie die
Nacharbeiten fortsetzen. Wenn Sie keine Pakete
ausgewählt haben und die Nacharbeiten fortsetzen
möchten, wählen Sie trotzdem
[ Install ] aus.Benutzer und Gruppen anlegenWährend der Installation sollten Sie mindestens
ein Benutzerkonto anlegen, sodass Sie das System
ohne das Konto root benutzen
können. Normalerweise ist die Root-Partition
recht klein und läuft schnell voll, wenn Sie
Anwendungen unter dem root-Konto
laufen lassen. Vor der größten Gefahr
warnt der nachstehende Hinweis: User Confirmation Requested
Would you like to add any initial user accounts to the system? Adding
at least one account for yourself at this stage is suggested since
working as the "root" user is dangerous (it is easy to do things which
adversely affect the entire system).
[ Yes ] NoDer Bildschirm auf Deutsch: Bestätigung erforderlich
Wollen Sie Benutzerkonten anlegen? Wir empfehlen, mindestens
ein Konto für sich selbst anzulegen, da es gefährlich
ist, unter "root" zu arbeiten (es ist leicht, Befehle einzugeben,
die das System nachhaltig beeinträchtigen).
[ Yes ] NoUm ein Benutzerkonto anzulegen, wählen Sie
&gui.yes; aus und drücken
Enter.Benutzerkonto auswählenMarkieren Sie User mit
den Pfeiltasten und drücken Sie die Taste
Enter.Benutzerkonto anlegenWählen Sie die Felder zum Ausfüllen mit
der Taste Tab aus. Zur Hilfe werden
die nachstehenden Beschreibungen werden im unteren
Teil des Bildschirms angezeigt:Login IDDer Name des Benutzerkontos (verpflichtend).UIDDie numerische ID dieses Kontos. Wenn Sie das
Feld leer lassen, wird eine ID automatisch
zugeteilt.GroupDie diesem Konto zugeordnete Login-Gruppe.
Wenn Sie das Feld leer lassen, wird automatisch
eine Gruppe zugeteilt.PasswordDas Passwort des Benutzerkontos.
Füllen Sie dieses Feld sehr sorgfätig
aus.Full nameDer vollständige Name des Benutzers
(Kommentarfeld).Member groupsDie Gruppen, in denen dieses Konto Mitglied
ist (das Konto erhält Zugriffsrechte auf
Dateien dieser Gruppe).Home directoryDas Heimatverzeichnis des Benutzerkontos.
Wenn Sie das Feld leer lassen, wird das Verzeichnis
automatisch festgelegt.Login shellDie Login-Shell des Kontos. Wenn Sie das
Feld leer lassen, wird /bin/sh
als Login-Shell festgesetzt.
- Im Beispiel wurde die Login-Shell von
- /bin/sh zu der vorher installierten
- /usr/local/bin/bash geändert.
- Tragen Sie keine Shell ein, die nicht existiert, da sich
- sonst nicht anmelden können. In der BSD-Welt wird
- häufig die C-Shell benutzt, die Sie mit
- /bin/tcsh angeben können.
+ Im Beispiel wurde die Login-Shell von
+ /bin/sh zu der vorher installierten
+ /usr/local/bin/bash geändert.
+ Tragen Sie keine Shell ein, die nicht existiert, da sich
+ sonst nicht anmelden können. In der BSD-Welt wird
+ häufig die C-Shell benutzt, die Sie mit
+ /bin/tcsh angeben können.
+
+ Damit ein Wechsel auf den Superuser
+ root möglich ist, wurde dem
+ Benutzerkonto die Gruppe wheel
+ zugeordnet.
+
+ Wenn Sie zufrieden sind, drücken Sie &gui.ok;.
+ Es erscheint wieder das Benutzer-Menü:
+
+
+ Benutzermenü verlassen
+
+
+
+
+
+
+
+
+ Weitere Gruppen können, wenn Sie die Anforderungen
+ schon kennen, zu diesem Zeitpunkt angelegt werden.
+ Nach der Installation können Sie Gruppen mit
+ dem Werkzeug sysinstall anlegen.
+
+ Wenn Sie alle Benutzer angelegt haben, wählen
+ Sie mit den Pfeiltasten Exit
+ aus und drücken Sie die Taste
+ Enter.
+
+
+
+ Das root-Passwort festlegen
+
+ Message
+ Now you must set the system manager's password.
+ This is the password you'll use to log in as "root".
+
+ [ OK ]
+
+ [ Press enter or space ]
+
+ Um das root-Passwort festzulegen,
+ drücken Sie die Taste Enter.
+
+ Sie müssen das Passwort zweimal eingeben.
+ Stellen Sie sicher, dass Sie das Passwort nicht
+ vergessen. Beachten Sie, dass bei der Eingabe
+ das Passwort weder ausgegeben wird noch Sterne
+ angezeigt werden.
+
+ New password :
+Retype new password :
+
+ Nach der erfolgreichen Eingabe des Passworts
+ kann die Installation fortgesetzt werden.
+
+
+
+ Die Installation beenden
+
+ Wenn Sie noch weitere Netzwerkkarten konfigurieren
+ oder weitere
+ Einstellungen vornehmen wollen, können
+ Sie das jetzt tun. Sie können die Einstellungen auch
+ nach der Installation mit sysinstall
+ vornehmen.
+
+ User Confirmation Requested
+ Visit the general configuration menu for a chance to set any last
+ options?
+
+ Yes [ No ]
+
+ Um in das Hauptmenü zurückzukehren, wählen
+ Sie mit den Pfeiltasten &gui.no; aus
+ und drücken Sie Enter.
+
+
+ Die Installation beenden
+
+
+
+
+
+
+
+
+ Wählen Sie mit den Pfeiltasten
+ [X Exit Install] aus und drücken
+ Sie die Taste Enter. Sie müssen
+ das Beenden der Installation bestätigen:
+
+ User Confirmation Requested
+ Are you sure you wish to exit? The system will reboot (be sure to
+ remove any floppies/CDs/DVDs from the drives).
+
+ [ Yes ] No
+
+ Wählen Sie &gui.yes; aus
+ und entfernen Sie die Diskette aus dem Laufwerk, wenn
+ Sie von einer Diskette gestartet haben. Das CD-Laufwerk
+ ist bis zum Neustart des Systems verriegelt. Entfernen
+ Sie die CD zügig wenn der Rechner startet.
+
+ Achten Sie beim Neustart des Systems auf eventuell
+ auftauchende Fehlermeldungen (lesen Sie für weitere Informationen).
+
+
+
+
+
+
+ Tom
+ Rhodes
+ Beigetragen von
+
+
+
+
+ Weitere Netzwerkdienste einrichten
+
+ Anfänger ohne Vorwissen finden das Einrichten
+ von Netzwerkdiensten oft deprimierend. Netzwerke und
+ das Internet sind für moderne Betriebssysteme von
+ entscheidender Bedeutung. Es ist daher wichtig, die
+ Netzwerkfunktionen von &os; zu kennen. Die von &os;
+ angebotenen Netzwerkdienste können Sie während
+ der Installation kennen lernen.
+
+ Netzwerkdienste sind Programme, die Eingaben aus dem
+ Netzwerk entgegennehmen. Es wird große Mühe
+ darauf verwendet, dass diese Programme keinen Schaden
+ verursachen. Leider können auch Programmierern
+ Fehler unterlaufen und es gibt Fälle, in denen Fehler
+ in Netzwerkdiensten von Angreifern ausgenutzt wurden.
+ Es ist daher wichtig, dass Sie nur Dienste aktivieren,
+ die Sie benötigen. Im Zweifallsfall sollten Sie
+ einen Dienst solange nicht aktivieren, bis Sie herausfinden,
+ dass Sie den Dienst benötigen. Einen Dienst können
+ Sie später immer noch mit sysinstall
+ oder in der Datei /etc/rc.conf
+ aktivieren.
+
+ Wählen Sie den Menüpunkt
+ Networking und es erscheint ein Menü
+ wie das nachstehende:
+
+
+ Netzwerkdienste – obere Hälfte
+
+
+
+
+
+
+
+
+ Die erste Option, Interfaces,
+ wurde schon in konfiguriert.
+ Sie können daher diesen Punkt überspringen.
+
+ Der Punkt AMD aktiviert
+ einen Dienst, der automatisch Dateisysteme einhängt.
+ Normalerweise wird der Dienst zusammen mit dem
+ NFS-Protokoll (siehe unten) verwendet,
+ um automatisch entfernte Dateisysteme einzuhängen.
+ Dieser Menüpunkt erfordert keine weitere
+ Konfiguration.
+
+ Der nächste Menüpunkt ist
+ AMD Flags. Wenn Sie den Punkt
+ auswählen, erscheint ein Fenster, in dem Sie
+ AMD-spezifische Optionen eingeben
+ können. Die nachstehenden Optionen sind schon
+ vorgegeben:
+
+ -a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map
+ Die Option legt das Verzeichnis
+ fest (hier /.amd_mnt),
+ unter dem Dateisysteme eingehangen werden. Die
+ Option legt die Protokolldatei
+ fest. Wenn syslogd verwendet
+ wird, werden alle Meldungen an den Daemon
+ syslogd gesendet. Das Verzeichnis
+ /host dient zum
+ Zugriff auf exportierte Verzeichnisse von entfernten Rechnern,
+ das Verzeichnis /net
+ dient zum Zugriff auf exportierte Verzeichnisse von entfernten
+ IP-Adressen. Die Datei /etc/amd.map
+ enthält die Einstellungen für von
+ AMD verwaltete Dateisysteme.
+
+
+ FTP
+ anonymous
+
+
+ Die Auswahl Anon FTP erlaubt
+ Anonymous-FTP-Verbindungen. Wählen Sie diese Option,
+ wenn Sie einen Anonymous-FTP-Server einrichten wollen.
+ Seien Sie sich über die Sicherheitsrisiken bewusst,
+ wenn Sie Anonymous-FTP erlauben. Die Sicherheitsrisiken
+ und die Konfiguration von Anonymous-FTP werden in einem
+ gesonderten Fenster erklärt, das aufgeht, wenn Sie
+ diese Option auswählen.
+
+ Der Menüpunkt Gateway
+ konfiguriert das System, wie vorher erläutert, als
+ Gateway. Wenn Sie während der Installation den Rechner
+ aus Versehen als Gateway konfiguriert haben, können
+ Sie dies hier wieder rückgängig machen.
- Damit ein Wechsel auf den Superuser
- root möglich ist, wurde dem
- Benutzerkonto die Gruppe wheel
- zugeordnet.
+ Der Menüpunkt Inetd
+ konfiguriert, wie schon oben besprochen, den Daemon
+ &man.inetd.8;.
- Wenn Sie zufrieden sind, drücken Sie &gui.ok;.
- Es erscheint wieder das Benutzer-Menü:
+ Die Auswahl Mail konfiguriert
+ den Mail Transfer Agent (MTA) des
+ Systems. Wenn Sie diesen Punkt auswählen, erscheint
+ das folgende Menü:
-
- Benutzermenü verlassen
+
+ Den MTA festlegen
-
+
- Weitere Gruppen können, wenn Sie die Anforderungen
- schon kennen, zu diesem Zeitpunkt angelegt werden.
- Nach der Installation können Sie Gruppen mit
- dem Werkzeug sysinstall (vor &os; 5.2
- /stand/sysinstall) anlegen.
-
- Wenn Sie alle Benutzer angelegt haben, wählen
- Sie mit den Pfeiltasten Exit
- aus und drücken Sie die Taste
- Enter.
-
-
-
- Das root-Passwort festlegen
-
- Message
- Now you must set the system manager's password.
- This is the password you'll use to log in as "root".
-
- [ OK ]
+ In diesem Menü wählen Sie aus, welcher
+ MTA installiert und benutzt wird.
+ Ein MTA ist ein Mail-Server, der
+ E-Mails an lokale Empfänger oder an Empfänger
+ im Internet ausliefert.
- [ Press enter or space ]
+ Die Auswahl Sendmail
+ installiert das verbreitete sendmail
+ (in &os; die Voreinstellung). Die Auswahl
+ Sendmail local verwendet
+ sendmail als MTA,
+ deaktiviert aber den Empfang von E-Mails aus dem Internet.
+ Postfix und
+ Exim sind ähnlich wie
+ Sendmail. Beide Programme
+ liefern E-Mails aus und einige Anwender verwenden lieber eines
+ der beiden Programme als MTA.
- Um das root-Passwort festzulegen,
- drücken Sie die Taste Enter.
+ Nachdem Sie einen MTA ausgewählt
+ haben (oder beschlossen haben, keinen MTA
+ zu benutzen), erscheint wieder das Menü Netzwerkdienste.
+ Der nächste Menüpunkt ist
+ NFS client.
- Sie müssen das Passwort zweimal eingeben.
- Stellen Sie sicher, dass Sie das Passwort nicht
- vergessen. Beachten Sie, dass bei der Eingabe
- das Passwort weder ausgegeben wird noch Sterne
- angezeigt werden.
+ Die Auswahl NFS client
+ erlaubt es dem System, mit einem NFS-Server
+ zu kommunizieren. Ein NFS-Server
+ stellt mithilfe des NFS-Protokolls
+ Dateisysteme für andere Systeme auf dem Netzwerk
+ bereit. Wenn der Rechner alleine für sich steht,
+ können Sie diesen Menüpunkt auslassen.
+ Wahrscheinlich müssen Sie noch weitere Einstellungen
+ vornehmen; der beschreibt
+ die Einstellungen für NFS-Server
+ und NFS-Clients.
- New password :
-Retype new password :
+ Der Menüpunkt NFS server
+ richtet einen NFS-Server auf dem
+ Rechner ein. Durch die Auswahl dieses Punktes werden
+ die für Remote-Procedure-Call (RPC)
+ benötigten Dienste gestartet. Mit RPC
+ werden Routinen auf entfernten Rechnern aufgerufen.
- Nach der erfolgreichen Eingabe des Passworts
- kann die Installation fortgesetzt werden.
-
+ Der nächste Punkt, Ntpdate,
+ konfiguriert die Zeitsynchronisation. Wenn Sie diesen
+ Punkt auswählen, erscheint das folgende Menü:
-
- Die Installation beenden
+
+ Ntpdate konfigurieren
- Wenn Sie noch weitere Netzwerkkarten konfigurieren
- oder weitere Einstellungen vornehmen wollen, können
- Sie das jetzt tun. Sie können die Einstellungen auch
- nach der Installation mit sysinstall
- (/stand/sysinstall vor &os; 5.2)
- vornehmen.
+
+
+
+
+
+
- User Confirmation Requested
- Visit the general configuration menu for a chance to set any last
- options?
+ Wählen Sie aus diesem Menü einen nahe
+ liegenden Server aus. Die Zeitsynchronisation mit
+ einem nahe liegenden Server ist, wegen der geringeren
+ Latenzzeit, genauer als die Synchronisation mit einem
+ weiter entfernten Server.
- Yes [ No ]
+ Der nächste Menüpunkt ist
+ PCNFSD. Wenn Sie diesen Punkt
+ auswählen, wird net/pcnfsd
+ aus der Ports-Sammlung installiert.
+ Dieses nützliche Werkzeug stellt
+ NFS-Authentifizierungsdienste für
+ Systeme bereit, die diese Dienste nicht anbieten
+ (beispielsweise Microsofts &ms-dos;).
- Um in das Hauptmenü zurückzukehren, wählen
- Sie mit den Pfeiltasten &gui.no; aus
- und drücken Sie Enter.
+ Um die nächsten Menüpunkte zu sehen,
+ müssen Sie herunterblättern:
-
- Die Installation beenden
+
+ Netzwerkdienste – untere Hälfte
-
+
- Wählen Sie mit den Pfeiltasten
- [X Exit Install] aus und drücken
- Sie die Taste Enter. Sie müssen
- das Beenden der Installation bestätigen:
+ Die Programme &man.rpcbind.8;, &man.rpc.statd.8; und
+ &man.rpc.lockd.8; werden für Remote-Procedure-Calls
+ (RPC) benutzt. Das Programm
+ rpcbind verwaltet die Kommunikation
+ zwischen NFS-Servern und
+ NFS-Clients und ist für den
+ Betrieb eines NFS-Servers erforderlich.
+ Der Daemon rpc.statd hält
+ zusammen mit dem Daemon rpc.statd
+ des entfernten Rechners den Status der Verbindung. Der
+ Status einer Verbindung wird normalerweise in der Datei
+ /var/db/statd.status festgehalten.
+ Der nächste Menüpunkt ist
+ rpc.lockd, der Dateisperren
+ (file locks) bereitstellt.
+ rpc.lockd wird normalerweise
+ zusammen mit dem Daemon rpc.statd
+ benutzt, der festhält welche Rechner Sperren anfordern
+ und wie oft Sperren angefordert werden. Beide Dienste
+ sind wunderbar zur Fehlersuche geeignet, doch werden
+ Sie zum Betrieb von NFS-Servern und
+ NFS-Clients nicht benötigt.
- User Confirmation Requested
- Are you sure you wish to exit? The system will reboot (be sure to
- remove any floppies/CDs/DVDs from the drives).
+ Der nächste Punkt in der Auswahl ist
+ Routed, der Routing-Daemon.
+ Das Programm &man.routed.8; verwaltet die Routing-Tabelle,
+ entdeckt Multicast-Router und stellt die Routing-Tabelle
+ auf Anfrage jedem mit dem Netz verbundenen Rechner zur
+ Verfügung. Der Daemon wird hauptsächlich auf
+ Gateways eines lokalen Netzes eingesetzt.
+ Wenn Sie den Punkt auswählen müssen Sie
+ den Ort des Programms angeben. Die Vorgabe können
+ Sie mit der Taste Enter übernehmen.
+ Anschließend werden Sie nach den Kommandozeilenoptionen
+ für routed gefragt. Vorgegeben
+ ist die Option .
- [ Yes ] No
+ Der nächste Menüpunkt ist
+ Rwhod. Wenn Sie diesen Punkt
+ auswählen, wird während des Systemstarts der
+ Daemon &man.rwhod.8; gestartet. Das Kommando
+ rwhod schickt Broadcast-Meldungen
+ in das Netz oder empfängt diese im Consumer-Mode.
+ Die Funktion der Werkzeuge wird in den Hilfeseiten
+ &man.ruptime.1; und &man.rwho.1; beschrieben.
- Wählen Sie &gui.yes; aus
- und entfernen Sie die Diskette aus dem Laufwerk, wenn
- Sie von einer Diskette gestartet haben. Das CD-Laufwerk
- ist bis zum Neustart des Systems verriegelt. Entfernen
- Sie die CD zügig wenn der Rechner startet.
+ Der vorletzte Menüpunkt aktiviert den Daemon
+ &man.sshd.8;, den OpenSSH
+ Secure-Shell-Server. Wo möglich sollte
+ SSH anstelle von
+ telnet und FTP
+ eingesetzt werden. Der Secure-Shell-Server erstellt
+ verschlüsselte und daher sichere Verbindungen
+ zwischen zwei Rechnern.
- Achten Sie beim Neustart des Systems auf eventuell
- auftauchende Fehlermeldungen.
+ TCP Extensions ist der
+ letzte Menüpunkt. Diese Auswahl aktiviert die
+ TCP-Erweiterungen aus
+ RFC 1323 und
+ RFC 1644. Obwohl dies auf
+ vielen Rechnern die Verbindungsgeschwindigkeit erhöht,
+ können durch diese Option auch Verbindungsabbrüche
+ auftreten. Auf Servern sollte diese Option nicht aktiviert
+ werden, auf Einzelmaschinen kann diese Option nützlich
+ sein.
+
+ Wenn Sie die Netzwerkdienste eingerichtet haben,
+ blättern Sie zum Menüpunkt
+ Exit hoch, um die Nacharbeiten
+ fortzusetzen oder verlassen Sie
+ sysinstall, indem Sie zweimal
+ X Exit und danach
+ [X Exit Install] wählen.&os; starten
- Start von &os; auf einem &i386;
+ Start von &os; auf &os;/&arch.i386;Wenn alles funktioniert hat, laufen viele Meldungen
über den Bildschirm und schließlich erscheint
ein Anmeldeprompt. Um sich die Meldungen anzusehen.
drücken Sie die Taste Scroll-Lock.
Sie können dann mit den Tasten PgUp
und PgDn blättern. Wenn Sie erneut
Scroll-Lock drücken, kehren
Sie zum Anmeldeprompt zurück.Es kann sein, dass der Puffer zu klein ist, um alle
Meldungen anzuzeigen. Nachdem Sie sich angemeldet haben,
können Sie sich mit dem Kommando dmesg
alle Meldungen ansehen.Melden Sie sich bitte mit dem Benutzerkonto an
(rpratt im Beispiel),
das Sie während der Installation eingerichtet haben.
Arbeiten Sie mit root nur dann
wenn es erforderlich ist.Die nachfolgende Abbildung zeigt typische
Startmeldungen (Versionsangaben entfernt):Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
Timecounter "i8254" frequency 1193182 Hz
CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU)
Origin = "AuthenticAMD" Id = 0x580 Stepping = 0
Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
AMD Features=0x80000800<SYSCALL,3DNow!>
real memory = 268435456 (262144K bytes)
config> di sn0
config> di lnc0
config> di le0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 256311296 (250304K bytes)
Preloaded elf kernel "kernel" at 0xc0491000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c.
md0: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at
device 10.0 on pci0
ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
-fd0: <1440-KB 3.5" drive> on fdc0 drive 0
+fd0: <1440-KB 3.5” drive> on fdc0 drive 0
atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x1 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
ppbus0: IEEE1284 device found /NIBBLE
Probing for PnP devices on ppbus0:
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33
ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33
acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4
Mounting root from ufs:/dev/ad0s1a
swapon: adding /dev/ad0s1b as swap device
Automatic boot in progress...
/dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation)
/dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation)
/dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation)
/dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS
/dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation)
Doing initial network setup: hostname.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1
ether 52:54:05:de:73:1b
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Additional routing options: IP gateway=YES TCP keepalive=YES
routing daemons:.
additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons: creating ssh RSA host key
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com
creating ssh DSA host key
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com.
setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib
/usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
starting standard daemons: inetd cron sshd usbd sendmail.
Initial rc.i386 initialization:.
rc.i386 configuring syscons: blank_time screensaver moused.
Additional ABI support: linux.
Local package initialization:.
Additional TCP options:.
FreeBSD/i386 (k6-2.example.com) (ttyv0)
login: rpratt
Password:Das Erzeugen der RSA- und DSA-Schlüssel kann auf
langsamen Maschinen lange dauern. Die Schlüssel
werden nur beim ersten Neustart erzeugt, spätere
Neustarts sind schneller.Wenn der X-Server konfiguriert ist und eine
Oberfläche ausgewählt wurde, können Sie
X mit dem Kommando startx starten.
- Start von &os; auf einer Alpha
+ Start von &os; auf &os;/&arch.alpha;AlphaNach der Installation können Sie &os; von
der SRM-Eingabeaufforderung mit einem Befehl wie
dem folgenden starten:>>>BOOT DKC0Der Befehl weist die Firmware an, von dem
angegebenen Laufwerk zu starten. Damit &os; künftig
automatisch startet, geben Sie die folgenden Befehle
ein:>>>SET BOOT_OSFLAGS A>>>SET BOOT_FILE ''>>>SET BOOTDEF_DEV DKC0>>>SET AUTO_ACTION BOOTBeim Start von &os; erscheinen ähnliche
Meldungen, wie beim Start von &os; auf einem
&i386;-System.&os; herunterfahrenEs ist wichtig, dass Sie das Betriebssystem richtig
herunterfahren. Wechseln Sie zunächst mit dem
Befehl su zum Superuser; Sie müssen
dazu das root-Passwort eingeben.
Der Wechsel auf den Superuser gelingt nur, wenn der
Benutzer ein Mitglied der Gruppe wheel
ist. Ansonsten melden Sie sich direkt als Benutzer
root an. Der Befehl
shutdown -h now hält das System
an.The operating system has halted.
Please press any key to reboot.Sie können den Rechner ausschalten, nachdem die
Meldung Please press any key to reboot
erschienen ist. Wenn Sie stattdessen eine Taste drücken,
startet das System erneut.Sie können das System auch mit der Tastenkombination
CtrlAltDel
neu starten. Sie sollten diese Tastenkombination
allerdings nicht gewohnheitsmäßig benutzen.FehlersucheInstallationFehlersucheDieser Abschnitt behandelt häufig auftretende
- Installationsprobleme. Weiterhin enthält er Hinweise
+ Installationsprobleme. Weiterhin enthält er Hinweise,
wie &os; parallel mit &ms-dos; oder &windows; betrieben wird.Wenn etwas schief gehtAufgrund der Beschränkungen der PC-Architektur
ist eine zuverlässige Geräteerkennung nicht
möglich. Falls die Geräteerkennung
fehlschlägt, können Sie einige Dinge
versuchen.Sehen Sie in den Hardware
Notes Ihrer &os;-Version nach, ob Ihre Hardware
unterstützt wird.Wenn Ihre Hardware unterstützt wird und sich
der Installationsprozess aufhängt oder sonstige
Probleme auftauchen, müssen Sie einen angepassten Kernel
erstellen, da Ihre Hardware in diesem Fall nicht vom
GENERIC-Kernel unterstützt wird.
Der Kernel auf den Startdisketten
verwendet die Werkseinstellungen für IRQs,
IO-Adressen und DMA-Kanäle. Geänderte
Einstellungen müssen Sie daher in der
Kernelkonfigurationsdatei angeben, damit &os; diese
Geräte korrekt erkennt.Es ist auch möglich, dass die Suche nach einem
nicht vorhandenen Gerät dazu führt, dass die
Erkennung eines vorhandenen Geräts fehlschlägt.
In diesem Fall sollten Sie nicht vorhandene Geräte,
deren Einstellungen sich mit vorhandenen Geräten
überschneiden, deaktivieren.Einige Installationsprobleme können Sie vermeiden
oder umgehen, indem Sie die Firmware der Hardware,
insbesondere die Firmware der Systemplatine, aktualisieren.
Die Firmware der Systemplatine ist das
BIOS. Die meisten Hardware-Hersteller
bieten aktuelle Firmware und Anleitungen zur
Aktualisierung der Firmware auf dem Internet an.Viele Hersteller raten davon ab, ohne guten
Grund das BIOS zu aktualisieren.
Die Aktualisierung kann fehlschlagen
und den BIOS-Chip dauerhaft
beschädigen.&ms-dos;- und &windows;-Dateisysteme benutzenMit Double Space™
komprimierte Dateisysteme werden zurzeit von &os; nicht
unterstützt. Damit &os; auf die Daten zugreifen kann,
müssen Sie das Dateisystem daher dekomprimieren.
Rufen Sie dazu den Compression Agent
aus dem Menü Start >
Programs >
System Tools auf.
- Unter &os; hängen Sie &ms-dos;-Dateisysteme
- (FAT16 sowie FAT32) mit dem Kommando &man.mount.msdosfs.8; ein.
- Dazu ein Beispiel:
+ &os; unterstützt &ms-dos;-Dateisysteme
+ (manchmal auch als FAT-Dateisysteme bezeichnet). Der
+ Befehl &man.mount.msdosfs.8; bindet diese Dateisysteme in den
+ &os;-Verzeichnisbaum ein und erlaubt dadurch den Zugriff auf
+ die darin enthaltenen Daten. &man.mount.msdosfs.8; wird
+ normalerweise nicht direkt, sondern über einen Eintrag
+ in der Datei /etc/fstab oder durch den
+ Aufruf des Befehls &man.mount.8; (in Kombination mit den
+ korrekten Parametern).
+
+ Ein typischer Eintrag in /etc/fstab
+ sieht so aus:
+
+ /dev/ad0sN /dos msdosfs rw 0 0
+
+
+ Das Verzeichnis /dos muss bereits
+ vorhanden sein, damit dieser Eintrag funktioniert. Weitere
+ Informationen zu den Einstellungen in der Datei
+ /etc/fstab finden sich in der Manualpage
+ &man.fstab.5;.
+
+
+ Ein typischer Aufruf von &man.mount.8; zum Einhängen
+ eines &ms-dos;-Dateisystems sieht so aus:
- &prompt.root; mount_msdosfs /dev/ad0s1 /mnt
+ &prompt.root; mount -t msdosfs /dev/ad0s1 /mntDas &ms-dos;-Dateisystem befindet sich hier auf
der ersten Partition der primären Platte. Dies kann
bei Ihnen anders sein. Die Anordnung der Partitionen
entnehmen Sie den Ausgaben von dmesg
und mount.
- Erweiterte &ms-dos;-Partitionen werden für
- gewöhnlich hinter die &os;-Partitionen gelegt:
- Die Nummern der von &ms-dos; benutzten Slices ist
- höher als die der Slices von &os;. Beispielsweise
- kann /dev/ad0s1 die erste
- &ms-dos; Partition sein, /dev/ad0s2
- die &os;-Partition sein und /dev/ad0s3
- eine erweiterte &ms-dos;-Partition. Einige Anfänger
- verwirrt diese Situation zunächst.
+ &os; numeriert Platten (genauer &ms-dos;-Partitionen)
+ anders als andere Betriebssysteme. Die Nummern von
+ erweiterten Partitionen sind in der Regel höher als
+ die Nummern von primären Partitionen. Das Werkzeug
+ &man.fdisk.8; kann Ihnen dabei helfen, festzustellen,
+ welche Partitionen zu &os; und welche zu einem anderen
+ Betriebssystem gehören.Analog werden NTFS-Partitionen mit dem
Kommando &man.mount.ntfs.8; eingehangen.Fragen und Antworten zu häufig auftretenden
ProblemenMein System hängt sich beim Testen der Hardware
auf, oder es verhält sich seltsam während der
Installation oder das Diskettenlaufwerk wird nicht
getestet.
-
+
- &os; 5.0 and above makes extensive use of the system ACPI
- service on the i386, amd64 and ia64 platforms to aid in system
- configuration if it's detected during boot. Unfortunately,
- some bugs still exist in both the ACPI driver and within system
- motherboards and BIOS. The use of ACPI can be disabled by setting
- the hint.acpi.0.disabled hint in the third stage
- boot loader:
-
- set hint.acpi.0.disabled="1"
-
- This is reset each time the system is booted, so it is
- necessary to add hint.acpi.0.disabled="1"
- to the file
- /boot/loader.conf. More information about the
- boot loader can be found in the &os; Handbook.
-
+ &os; 5.0 und neuer machen ausgiebig Gebrauch
+ von den ACPI-Systemdiensten zur Systemkonfiguration
+ der i386-, amd64- und ia64-Plattformen, falls diese
+ während des Bootvorgangs gefunden werden.
+ Leider enthalten sowohl der ACPI-Treiber
+ als auch manche Motherboard- und BIOS-Implementierungen
+ für ACPI noch einige Fehler. Kommt es auf Ihrem
+ System zu Problemen, können Sie ACPI daher
+ deaktivieren, indem während des Bootvorganges
+ den Hint
+ hint.acpi.0.disabled aktivieren:
+
+ set hint.acpi.0.disabled="1"
+
+ Da diese Einstellung bei jedem Neustart verloren geht,
+ aktivieren Sie sie dauerhaft, indem Sie die Zeile
+ hint.acpi.0.disabled="1" in die Datei
+ /boot/loader.conf. Weitere Informationen
+ über den Bootloader finden Sie in des &os;-Handbuchs.
+
+
-
- I go to boot from the hard disk for the first time
- after installing &os;, the kernel loads and probes my
- hardware, but stops with messages like:
+
+ Direkt nach der Installation beginnt das System zwar
+ zu booten, der Kernel wird geladen und meine Hardware
+ getestet. Dann bricht der Bootvorgang aber mit der
+ folgenden (oder einer ähnlichen) Fehlermeldung
+ ab:
- changing root device to ad1s1a panic: cannot mount root
- What is wrong? What can I do?
+ changing root device to ad1s1a panic: cannot mount root
- What is this
- bios_drive:interface(unit,partition)kernel_name
- thing that is displayed with the boot help?
+ Was läuft hier falsch? Was kann/muss ich tun?
+
+ Was soll ich mit diesem
+ bios_drive:interface(unit,partition)kernel_name
+ anfangen, das mir die Hilfefunktion ausgibt?
-
- There is a longstanding problem in the case where the
- boot disk is not the first disk in the system. The BIOS
- uses a different numbering scheme to &os;, and working
- out which numbers correspond to which is difficult to get
- right.
-
- In the case where the boot disk is not the first disk
- in the system, &os; can need some help finding it. There
- are two common situations here, and in both of these cases,
- you need to tell &os; where the root filesystem is. You
- do this by specifying the BIOS disk number, the disk type
- and the &os; disk number for that type.
-
- The first situation is where you have two IDE disks,
- each configured as the master on their respective IDE
- busses, and wish to boot &os; from the second disk. The
- BIOS sees these as disk 0 and disk 1, while &os; sees
- them as ad0 and
- ad2.
-
- &os; is on BIOS disk 1, of type
- ad and the &os; disk number is 2, so
- you would say:
-
- 1:ad(2,a)kernel
-
- Note that if you have a slave on the primary bus, the
- above is not necessary (and is effectively wrong).
-
- The second situation involves booting from a SCSI disk
- when you have one or more IDE disks in the system. In this
- case, the &os; disk number is lower than the BIOS disk
- number. If you have two IDE disks as well as the SCSI disk,
- the SCSI disk is BIOS disk 2, type da and
- &os; disk number 0, so you would say:
-
- 2:da(0,a)kernel
-
- To tell &os; that you want to boot from BIOS disk
- 2, which is the first SCSI disk in the system. If you only
- had one IDE disk, you would use '1:' instead.
-
- Once you have determined the correct values to use,
- you can put the command exactly as you would have typed it
- in the /boot.config file using a
- standard text editor. Unless instructed otherwise, &os;
- will use the contents of this file as the default response
- to the boot: prompt.
-
+
+
+ Dabei handelt es sich um ein lange bekanntes Problem,
+ das nur dann auftritt, wenn es sich bei der Bootplatte nicht
+ um die erste Platte im System handelt. Das BIOS numeriert
+ die Festplatten anders als &os;, daher ist das System
+ manchmal nicht in der Lage, diese Numerierungen selbst
+ automatisch in Einklang zu bringen.
+
+ Sollte Ihre Bootplatte nicht die erste Platte im System
+ sein, können Sie &os; dabei helfen, diese Platte zu
+ finden. Es gibt zwei Situationen, in denen Sie &os;
+ mitteilen müssen, wo sich das root-Dateisystem befindet.
+ Dazu müssen Sie die Nummer der Platte im BIOS, den
+ Plattentyp sowie die Nummer der Platte unter &os;
+ angeben.
+
+ Im ersten Fall verfügen Sie über zwei
+ IDE-Platten, die beide als Master an ihrem jeweiligen
+ IDE-Controller konfiguriert sind. &os; soll dabei
+ von der zweiten Platte booten. Ihr BIOS erkennt die
+ beiden Platten als Platte 1 und
+ Platte 2, während &os; die
+ Platten als ad0 und
+ ad2 erkennt.
+
+ Für das BIOS befindet sich &os; auf der Platte
+ Nummer 1, der Typ ist ad, und &os;
+ erkennt die Platte als Platte Nummer 2. Daher geben Sie
+ Folgendes ein:
+
+ 1:ad(2,a)kernel
+
+ Beachten Sie, dass dieser Eintrag nicht notwendig ist,
+ wenn die zweite Platte als Slave am primären
+ IDE-Controller konfiguriert ist (sondern sogar falsch
+ wäre).
+
+ Die zweite Situation entsteht, wenn Sie von einer
+ SCSI-Platte booten und zusätzlich eine oder mehrere
+ IDE-Platten installiert haben. In diesem Fall ist die
+ Plattennummer unter &os; kleiner als die Plattennummer im
+ BIOS. Verfügen Sie über zwei IDE-Platten und
+ eine SCSI-Platte, hat die SCSI-Platte im BIOS die Nummer
+ 2, den Typ da, und wird von &os; als
+ Platte Nummer 0 erkannt. In diesem Fall geben Sie daher
+ Folgendes ein:
+
+ 2:da(0,a)kernel
+
+ Durch diese Zeile teilen Sie &os; mit, dass Sie von
+ der BIOS-Platte Nummer 2 booten wollen (bei der es sich um
+ die erste SCSI-Platte Ihres Systems handelt). Verfügen
+ Sie nur über eine IDE-Platte, geben Sie hingegen
+ 1: ein.
+
+ Nachdem Sie die korrekten Werte ermittelt haben,
+ können Sie die entsprechende Zeile in exakt der gleichen
+ Form in die Datei /boot.config
+ aufnehmen. In der Voreinstellung verwendet &os; den
+ Inhalt dieser Datei als Standardantwort am
+ boot:-Prompt.
+
+
-
- I go to boot from the hard disk for the first time
- after installing &os;, but the Boot Manager prompt just
- prints F? at the boot menu each time but
- the boot won't go any further.
+
+ Nach der Installation beginnt das System zu booten,
+ der Bootmanager zeigt im Bootmenü aber immer nur
+ F? an und das System startet
+ nicht.
+
- The hard disk geometry was set incorrectly in the
- Partition editor when you installed &os;. Go back into
- the partition editor and specify the actual geometry of your
- hard disk. You must reinstall &os; again from the
- beginning with the correct geometry.
-
- If you are failing entirely in figuring out the
- correct geometry for your machine, here's a tip: Install a
- small DOS partition at the beginning of the disk and install
- &os; after that. The install program will see the DOS
- partition and try to infer the correct geometry from it,
- which usually works.
-
- The following tip is no longer recommended, but is left here
- for reference:
+ Sie haben bei der &os;-Installation eine falsche
+ Plattengeometrie angegeben. Starten Sie den
+ Partitionseditor neu und geben Sie die korrekte
+ Plattengeometrie an. Danach installieren Sie &os;
+ erneut (diesmal mit der korrekten Plattengeometrie).
+
+ Ist es Ihnen nicht möglich, die korrekte
+ Plattengeometrie herauszufinden, hilft Ihnen vielleicht
+ der folgende Tipp weiter: Legen Sie eine kleine
+ DOS-Partition am Beginn Ihrer Bootplatte an und installieren
+ Sie anschließend &os; auf diese Platte. Das
+ &os;-Installationsprogramm wird die DOS-Partition erkennen
+ und ist dadurch normalerweise in der Lage, die korrekte
+ Plattenkonfiguration automatisch zu erkennen.
+
+ Die Vorgangsweise im folgenden Tipp wird zwar nicht
+ länger empfohlen, soll aber trotzdem dokumentiert
+ werden:
- If you are setting up a truly dedicated &os;
- server or workstation where you don't care for (future)
- compatibility with DOS, Linux or another operating system,
- you've also got the option to use the entire disk (`A' in
- the partition editor), selecting the non-standard option
- where &os; occupies the entire disk from the very first
- to the very last sector. This will leave all geometry
- considerations aside, but is somewhat limiting unless
- you're never going to run anything other than &os; on a
- disk.
+ Wenn Sie ein reines &os;-System aufsetzen wollen (als
+ Server oder als Workstation) und daher nie auf
+ Kompatibilitält zu DOS, Linux oder anderen
+ Betriebssystemen angewiesen sein werden, haben Sie auch
+ die Möglichkeit, die komplette Platte (durch die
+ Wahl von A im Partitionseditor)
+ für &os; zu
+ verwenden. Danach wird &os; die komplette Platte vom
+ ersten bis zum letzten Sektor verwenden und die
+ tatsächliche Plattengeometrie ignorieren. Danach
+ ist es allerdings nicht mehr möglich, ein anderes
+ Betriebssystem auf die gleiche Platte zu installieren
+ (ohne auch &os; neu zu installieren).
-
+
+
-
- The system finds my &man.ed.4; network card, but I
- keep getting device timeout errors.
+
+ &os; erkennt meine &man.ed.4;-Netzwerkkarte. Trotzdem
+ erhalte ich weiterhein Timeout-Meldungen für dieses
+ Gerät.
+
- Your card is probably on a different IRQ from what is
- specified in the /boot/device.hints file. The ed driver does
- not use the `soft' configuration by default (values entered
- using EZSETUP in DOS), but it will use the software
- configuration if you specify -1 in the hints
- for the interface.
-
- Either move the jumper on the card to a hard
- configuration setting (altering the kernel settings if
- necessary), or specify the IRQ as -1
- by setting the hint hint.ed.0.irq="-1"
- This will tell the kernel to
- use the soft configuration.
-
- Another possibility is that your card is at IRQ 9,
- which is shared by IRQ 2 and frequently a cause of problems
- (especially when you have a VGA card using IRQ 2!). You
- should not use IRQ 2 or 9 if at all possible.
+ Ihre Karte verwendet wahrscheinlich einen anderen IRQ
+ als den, der in der Datei
+ /boot/device.hints angegeben wurde.
+ Der &man.ed.4;-Treiber verwendet in der Voreinstellung
+ keine Soft-Konfiguration (also Werte, die
+ durch EZSETUP unter
+ DOS eingeben wurden). Sie können dies allerdings
+ erzwingen, indem Sie die Option -1
+ in den Hints für dieses Gerät
+ angeben.
+
+ Entweder verändern Sie die Jumper-Konfiguration
+ der Karte (und, falls notwendig, die Kerneleinstellungen).
+ Oder Sie geben den IRQ als -1 an, indem
+ Sie hint.ed.0.irq="-1" eingeben. Dadurch
+ wird der Kernel angewiesen, die
+ Soft-Konfiguration zu verwenden.
+
+ Prüfen Sie auch, ob Ihre Karte nicht etwa IRQ 9
+ verwendet, da dieser mit IRQ 2 geteilt wird. Diese
+ Einstellung verursacht häufig Probleme (insbesondere
+ dann, wenn IRQ 2 durch eine VGA-Grafikkarte belegt ist!).
+ Wenn irgend möglich, sollten Sie daher IRQ 2 oder 9
+ nicht verwenden.
+
+
+
+
+
+ Farben
+ Kontrast
+
+
+
+ Wenn ich sysinstall aus
+ einen X-Terminal starte, ist die gelbe Schritt auf dem
+ grauen Hintergrund nur schwer zu erkennen. Gibt es
+ eine Möglichkeit, den Kontrast für dieses
+ Programm zu erhöhen?
+
+
+
+ Haben Sie X11 bereits installiert und die von
+ sysinstall verwendeten Farben
+ bereiten Ihnen beim Lesen von Text Probleme (wenn Sie
+ ein X-Terminal verwenden), sollten Sie die Zeile
+ XTerm*color7: #c0c0c0 in die Datei
+ ~/.Xdefaults aufnehmen. Dadurch
+ wird der Hintergrund in einem dunkleren Grauton
+ dargestellt.
-
+
ValentinoVaschettoBeigetragen von Anspruchsvollere InstallationenDieser Abschnitt beschreibt die Installation von &os;
in besonderen Situationen.&os; auf einem System ohne Monitor oder Tastatur
installierenInstallationheadless (serielle Konsole)serielle KonsoleDiese Methode wird als headless install
(kopflose Installation) bezeichnet, da die Maschine, auf
die &os; installiert werden soll, entweder keinen Monitor
angeschlossen hat oder über keine VGA-Karte verfügt.
Wie kann &os; dennoch installiert werden? Eben
mithilfe einer seriellen Konsole. Im Wesentlichen ist
eine serielle Konsole eine andere Maschine, die Ein- und
Ausgaben für eine andere Maschine bereitstellt.
Um über eine serielle Konsole zu installieren, erstellen
Sie zunächst die Startdisketten, wie in
beschrieben.Damit ein Systemstart mit der seriellen Konsole
möglich ist, müssen die Disketten entsprechend
der nachstehenden Anleitung angepasst werden:Die Startdisketten für eine serielle Konsole
anpassenmountWenn Sie ein System mit den frisch erstellten
Disketten starten, läuft der normale
&os;-Installationsprozess an. Diese Installation
soll aber über die serielle Konsole gesteuert
werden. Hängen Sie mit dem Kommando &man.mount.8;
die Diskette boot.flp ein:&prompt.root; mount /dev/fd0 /mntWechseln Sie in das Verzeichnis
/mnt:&prompt.root; cd /mntIn diesem Verzeichnis können Sie den
Start über eine serielle Konsole einstellen.
Erstellen Sie die Datei boot.config
mit dem Inhalt /boot/loader -h.
Diese Zeile weist den Bootloader an, mit der seriellen
Konsole zu starten.&prompt.root; echo "/boot/loader -h" > boot.configNachdem Sie die Diskette angepasst haben, hängen
Sie die Diskette mit dem Kommando &man.umount.8;
wieder aus:&prompt.root; cd /
&prompt.root; umount /mntSie können die Diskette nun aus dem
Laufwerk entfernen.Das Nullmodemkabel anschließenNullmodemkabelSie müssen beide Maschinen mit einem
Nullmodemkabel
verbinden. Schließen Sie
das Nullmodemkabel an die seriellen Schnittstellen
beider Maschinen an. Sie können
kein direktes serielles Kabel verwenden,
Nullmodemkabel besitzen gekreuzte Leitungen.Die Installation startenSie können die Installation jetzt starten.
Legen Sie die boot.flp-Diskette
in das Laufwerk der Maschine ein, auf der Sie &os;
installieren wollen. Schalten Sie anschließend
die Maschine ein.Die Verbindung mit der zur installierenden
Maschine herstellencuMit dem Kommando &man.cu.1; verbinden Sie sich
mit der zu installierenden Maschine:&prompt.root; cu -l /dev/cuad0
-
- Unter &os; 5.X müssen Sie
- /dev/cuaa0 anstelle von
- /dev/cuad0 verwenden.Fertig! Über die cu-Sitzung
können Sie nun die zu installierende Maschine steuern.
Sie erhalten die Aufforderung die Diskette
kern1.flp einzulegen.
Anschließend legen Sie den Terminaltyp fest.
Wählen Sie die FreeBSD color console
aus und fahren wie gewohnt mit der Installation fort.Eigene Installationsmedien herstellenIm Folgenden ist mit Installations-CD
eine CD-ROM oder DVD gemeint, die Sie gekauft oder selbst
hergestellt haben.Oft müssen Sie eigene Installationsmedien erzeugen.
Dies können physische Medien wie Bänder sein oder
Installationsquellen sein, aus denen
sysinstall Dateien herunterlädt,
beispielsweise ein lokaler FTP-Server oder eine
&ms-dos;-Partition.Beispiele:Im lokalen Netzwerk befinden sich viele Maschinen,
Sie besitzen allerdings nur eine Installations-CD.
Den Inhalt der Installations-CD wollen Sie auf
einem lokalem FTP-Server bereitstellen. Zur Installation
wird der lokale FTP-Server anstelle eines Internet-Servers
benutzt.Sie haben eine Installations-CD, allerdings erkennt
&os; im Gegensatz zu &ms-dos;/&windows; das CD- oder
DVD-Laufwerk nicht. Sie können die
Installationsdateien auf eine DOS-Partition desselben
Rechners kopieren und &os; von der DOS-Partition
installieren.Der Rechner, auf dem Sie &os; installieren wollen,
besitzt kein CD- oder DVD-Laufwerk. Ein anderer Rechner,
zu dem eine serielle oder parallele Verbindung besteht,
besitzt allerdings ein CD- oder DVD-Laufwerk.Sie wollen ein Band erzeugen, mit dem Sie &os;
installieren können.Eine Installations-CD-ROM erzeugenMit jeder Release stellt das &os;-Project für
jede unterstützte Architektur mindestens zwei
CD-Abbilder (ISO-Images) zur Verfügung.
Wenn Sie einen CD-Brenner besitzen, können Sie
diese Abbilder brennen und damit &os; installieren.
Wenn Sie einen CD-Brenner besitzen und über eine
gute Internet-Verbindung verfügen, ist das die
preiswerteste Art, &os; zu installieren.Das richtige Abbild herunterladenDie ISO-Abbilder für jedes Releases
können Sie von
ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version
oder einem nahe gelegenen Spiegel herunterladen.
Ersetzen Sie arch und
version durch passende
Werte.Das Verzeichnis enthält die folgenden
Abbilder:
- FreeBSD 5.X sowie
- 6.X-ISO-Abbilder
+ FreeBSD 6.X sowie
+ 7.X-ISO-AbbilderDateinameInhaltVersion-RELEASE-Architektur-bootonly.isoEnthält alles, was Sie benötigen, um
um den FreeBSD-Kernel zu laden und die
Installationsoberfläche zu starten. Die zu
installierenden Dateien müssen über
FTP oder eine andere geeignete Quelle bezogen
werden.version-RELEASE-Architektur-disc1.isoAlles, was Sie für die Installation von
FreeBSD benötigen. Zusätzlich ist ein
Live-Dateisystem enthalten, das
gemeinsam mit der Repair-Funktion
von sysinstall
verwendet werden kann.version-RELEASE-Architektur-disc2.iso
- Die &os;-Dokumentation (bis einschließlich
- &os; 6.1) und so viele Pakete Dritter, wie auf dem
+ So viele Pakete Dritter, wie auf dem
Installationsmedium Platz hatten.version-RELEASE-arch-docs.iso
- Die &os;-Dokumentation (ab &os; 6.2).
+ Die &os;-Dokumentation.
Sie benötigen nur eines der beiden Abbilder
bootonly oder
disc1. Laden Sie bitte nicht
beide Abbilder herunter, das disc1-Abbild
enthält alles, was das bootonly-Abbild
enthält.Benutzen Sie das bootonly-Abbild,
wenn Sie eine preiswerte Internet-Anbindung besitzen.
Mit diesem Abbild können Sie &os; installieren.
Software Dritter können Sie anschließend
mithilfe des Ports-Systems ()
herunterladen.Benutzen Sie das disc1-Abbild,
wenn Sie &os; installieren wollen und das
Installationsmedium eine angemessene Auswahl an Software
Dritter enthalten soll.Die zusätzlichen Abbilder sind nützlich
aber nicht notwendig, insbesondere wenn Sie eine
schnelle Internet-Verbindung besitzen.Die CDs brennenSie müssen die Abbilder auf eine CD
brennen. Das Brennen von CDs unter &os;
wird in erläutert
(sehen Sie sich insbesondere
und an).Wenn Sie die CDs unter einem anderen Betriebssystem
erstellen, benutzen Sie die entsprechenden Werkzeuge
des Betriebssystems. Die Abbilder sind
Standard-ISO-Abbilder und können von vielen
Brennprogrammen verarbeitet werden.Wenn Sie eine angepasste Version von FreeBSD
erstellen wollen, sollten Sie den Release Engineering
Article lesen.Einen lokalen FTP-Server einrichtenInstallationNetzwerkinstallationFTPDie Dateien auf der Installations-CD sind genauso
angeordnet wie auf den &os;-FTP-Servern. Daher ist es
einfach, einen lokalen FTP-Server für die
&os;-Installation über ein Netzwerk einzurichten.Hängen Sie auf dem FTP-Server die CD-ROM in
das Verzeichnis /cdrom
ein:&prompt.root; mount /cdromLegen Sie ein Konto für Anonymous-FTP an.
Dazu editieren Sie die Datei
/etc/passwd mit dem Kommando
&man.vipw.8; und fügen die nachstehende Zeile
hinzu:ftp:*:99:99::0:0:FTP:/cdrom:/nonexistentStellen Sie sicher, dass der FTP-Dienst in der Datei
/etc/inetd.conf aktiviert ist.Jeder, der Ihren Rechner über das Netzwerk
erreicht, kann nun &os; über FTP installieren.
In sysinstall wird dazu
FTP als Installationsmedium wählt. Der
FTP-Server wird durch die Auswahl
Other (andere als die vorgegebenen
Server) und anschließende Eingabe von
ftp://Ihr Rechner
festgelegt.Wenn die Version der für die FTP-Installation
Ihrer Clients verwendeten Bootmedien (normalerweise Disketten)
nicht exakt der von Ihnen auf Ihrem lokalen FTP-Server
angebotenen Version entspricht, ist
sysinstall nicht in der
Lage, die Installation abzuschließen. Sind die
Versionsnummern unterschiedlich, können Sie durch
das Aufrufen des Punktes Optionssysinstall dazu zwingen, die
Installation dennoch abzuschließen. Dazu setzen
Sie den Namen der Distribution auf
any.Diese Vorgehensweise ist in Ihrem lokalen Netzwerk,
das durch eine Firewall geschützt ist, völlig
in Ordnung. Wenn Sie FTP für Rechner auf dem
Internet (und nicht für lokale Rechner) anbieten,
zieht Ihr Server die Aufmerksamkeit von Crackern und
andere Unannehmlichkeiten auf sich. Achten Sie in
diesem Fall darauf, dass Sie gute Sicherheitsverfahren
anwenden.Installationsdisketten erstellenInstallationDiskettenWenn Sie, was wir nicht empfehlen,
von Disketten installieren müssen, weil Disketten das
einzig unterstützte Installationsmedium sind oder
Sie es sich einfach schwer machen wollen, müssen
Sie zunächst einige Disketten vorbereiten.Sie müssen mindestens den Inhalt des Verzeichnisses
base auf
1.44 MB Disketten kopieren.
Wenn Sie die Disketten unter &ms-dos; erstellen,
müssen
Sie die Disketten mit dem DOS-Kommando
FORMAT formatieren. Unter &windows;
können Sie Disketten mithilfe des Explorers
formatieren (klicken Sie mit der rechten Maustaste auf
das A:-Laufwerk und wählen
Sie Format aus).Vertrauen Sie vorformatierten Disketten nicht; formatieren
Sie die Disketten zur Sicherheit immer selbst. In der
Vergangenheit waren vorformatierte Disketten der Verursacher
vieler Probleme.Falls Sie die Disketten auf einer &os;-Maschine
erstellen, sollten Sie immer noch formatieren. Allerdings
brauchen Sie kein DOS-Dateisystem auf den Disketten
anzulegen. Mit den Kommandos bsdlabel
und newfs können Sie das Dateisystem
UFS verwenden, wie im nachstehenden Beispiel für
3.5" 1.44 MB Disketten gezeigt:&prompt.root; fdformat -f 1440 fd0.1440
&prompt.root; bsdlabel -w fd0.1440 floppy3
&prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/fd0Anschließend können Sie die Disketten
wie ein normales Dateisystem einhängen und
beschreiben.Nachdem Sie die Disketten formatiert haben, kopieren
Sie die Dateien der Distribution auf die Disketten. Die
Dateien der Distribution sind in Stücke geteilt, sodass
fünf Dateien auf eine 1.44 MB Diskette passen.
Kopieren Sie die gewünschten Distribution auf
Disketten, wobei Sie so viele Dateien wie möglich
auf eine Diskette kopieren. Jede Distribution wird auf
der Diskette in einem eigenen Verzeichnis abgelegt,
beispielsweise a:\base\base.aa,
a:\base\base.ab und so weiter.Die Datei base.inf muss
unbedingt auf die erste Diskette des
base-Diskettensatzes kopiert werden,
damit das Installationsprogramm feststellen kann, wie viele
Disketten geladen werden müssen, um die Distribution
wieder zusammenzusetzen.Im Installationsprozess wählen Sie als
Installationsmedium Floppy
aus. Folgen Sie dann den gegebenen Anweisungen.Von einer &ms-dos;-Partition installierenInstallationvon einer &ms-dos;-PartitionUm eine Installation von einer &ms-dos;-Partition
vorzubereiten, kopieren Sie Dateien der Distributionen
in das Verzeichnis freebsd
direkt unterhalb des Wurzelverzeichnisses (zum Beispiel
c:\freebsd).
In diesem Verzeichnis muss sich dieselbe Verzeichnisstruktur
wie auf dem Installationsmedium befinden. Wenn Sie
die Dateien von einer Installations-CD kopieren, empfehlen
wir den DOS-Befehl xcopy. Das
nachstehende Beispiel bereitet eine minimale Installation
von &os; vor:C:\>md c:\freebsdC:\>xcopy e:\bin c:\freebsd\bin\ /sC:\>xcopy e:\manpages c:\freebsd\manpages\ /sIm Beispiel wurde angenommen, dass auf Laufwerk
C: ausreichend Platz vorhanden
ist und die CD-ROM Laufwerk E:
ist.Wenn Sie kein CD-Laufwerk besitzen, können Sie
die Distributionen von
ftp.FreeBSD.org
herunterladen. Jede Distribution liegt in einem eigenen
Verzeichnis. Beispielsweise liegt die Base-Distribution
im Verzeichnis
&rel.current;/base/.Kopieren Sie jede Distribution, die Sie von einer
&ms-dos;-Partition installieren wollen (und für
die Platz ist) in das Verzeichnis
c:\freebsd.
Für eine minimale Installation benötigen
Sie nur die Base-Distribution.Ein Installationsband erstellenInstallationvon einem QIC/SCSI-BandFalls Sie nicht über FTP oder von einer CD-ROM
installieren können, ist die Installation von Band
wahrscheinlich die einfachste Methode. Das
Installationsprogramm erwartet, dass sich die Distributionen
im tar-Format auf dem Band befinden.
Von den Distributions-Dateien erstellen Sie das
Installationsband einfach mit dem Kommando
tar:&prompt.root; cd /freebsd/distdir
&prompt.root; tar cvf /dev/rwt0 dist1 ... dist2Stellen Sie während der Installation sicher, dass
Sie über genügend freien Platz in einem
temporären Verzeichnis (das Sie festlegen können)
verfügen. Das temporäre Verzeichnis muss
den gesamten Inhalt des Bands
aufnehmen können. Da auf Bänder nicht wahlfrei
zugegriffen werden kann, benötigt diese
Installationsmethode temporär sehr viel Platz.Das Band muss sich vor dem Neustart mit der
Startdiskette im Laufwerk befinden. Ansonsten
wird das Band während der Geräteerkennung
vielleicht nicht erkannt.Eine Netzwerkinstallation vorbereitenInstallationNetzwerkinstallationseriell (SLIP oder PPP)InstallationNetzwerkinstallationparallel (PLIP)InstallationNetzwerkinstallationEthernetSie können drei Verbindungsarten für eine
Netzwerkinstallation benutzen: Eine Ethernet-Verbindung,
eine serielle Verbindung (SLIP oder PPP), oder eine
parallele Verbindung (PLIP, Laplink-Kabel).Die schnellste Netzwerkinstallation ist natürlich
mit einer Netzwerkkarte möglich. &os; unterstützt
die meisten der üblichen Netzwerkkarten. Eine Liste
der unterstützten Netzwerkkarten ist in den
Hardware-Notes jedes Releases enthalten. Wenn Sie eine
unterstützte PCMCIA-Netzwerkkarte benutzen, stellen
Sie sicher, dass die Karte eingesteckt ist,
bevor der Laptop eingeschaltet wird.
Leider unterstützt &os; das Einstecken von PCMCIA-Karten
während der Installation noch nicht.Für eine Netzwerkinstallation müssen Sie
Ihre IP-Adresse, die Netzwerkmaske und den Namen Ihres
Rechner kennen. Wenn Sie über eine PPP-Verbindung
installieren und keine feste IP-Adresse besitzen, braucht
Sie der vorgehende Satz nicht zu beunruhigen. Sie
können eine IP-Adresse dynamisch von Ihrem ISP
beziehen. Fragen Sie Ihren Systemadministrator nach
den richtigen Netzwerkeinstellungen.
Wenn Sie andere Rechner über Namen anstatt über
IP-Adressen erreichen wollen, brauchen Sie zudem einen
Nameserver und möglicherweise die Adresse eines
Gateways (mit PPP ist das die Adresse des ISPs), über
den Sie den Nameserver erreichen. Wenn Sie von einem
FTP-Server über einen HTTP-Proxy installieren wollen,
benötigen Sie außerdem noch die Adresse des
Proxy-Servers. Wenn Sie nicht alle oder zumindest
die meisten der benötigten Daten kennen, sollten
Sie wirklich vor der Installation
mit Ihrem Systemadministrator oder ISP reden!Die SLIP-Unterstützung ist recht einfach und
auf feste Verbindungen, beispielsweise ein serielles Kabel
zwischen einem Laptop und einem anderen Rechner, beschränkt.
Die Verbindung muss fest sein, da die Installation mit
SLIP keine Einwahl unterstützt. Eine Einwahl ist mit
PPP möglich, das Sie, wenn möglich, gegenüber
SLIP bevorzugen sollten.Wenn Sie ein Modem benutzen, ist PPP ziemlich sicher
die einzige Wahl. Stellen Sie sicher, dass Sie die
Daten Ihres Service Providers bereitliegen haben,
da Sie während der Installation die Daten früh
benötigen.Wenn Sie PAP oder CHAP benutzen, um sich mit Ihrem ISP
zu verbinden (wenn Sie unter &windows; kein Skript
benötigen, um die Verbindung herzustellen), brauchen
Sie an der ppp-Eingabeaufforderung
nur das Kommando dial abzusetzen.
Ansonsten müssen Sie sich mit Modem-spezifischen
AT-Kommandos bei Ihrem ISP einwählen (PPP stellt
nur einen einfachen Terminal-Emulator zur Verfügung).
Weiteres über PPP erfahren Sie im Abschnitt
User-PPP des Handbuchs
und im PPP-Abschnitt
der FAQ. Bei Problemen können Sie mit dem Kommando
set log local Meldungen auf den Bildschirm
umleiten.Wenn eine feste Verbindung zu einer anderen &os;-Maschine
besteht (2.0 Release oder neuer), sollten Sie ein
paralleles Laplink-Kabel in Betracht ziehen. Über
eine parallele Verbindung sind höhrere Geschwindigkeiten
als über eine serielle Verbindung (typischerweise
bis zu 50 kByte/s) möglich. Daher ist die
Installation über eine parallele Verbindung schneller
als eine Installation über eine serielle Verbindung.Eine NFS-Installation vorbereitenInstallationNetzwerkinstallationNFSEine NFS-Installation ist unkompliziert. Kopieren
Sie einfach die Distributionen auf einen NFS-Server
und wählen Sie NFS als Installationsmedium aus.Wenn der NFS-Server nur Verbindungen über
privilegierte Ports (Ports kleiner 1024) annimmt,
setzen Sie vor der Installation die Option
NFS Secure im Menü
Options.Wenn Sie eine schlechte Netzwerkkarte besitzen,
die sehr langsam ist, wählen Sie die Option
NFS Slow.Damit die NFS-Installation funktioniert, muss der
NFS-Server auch Unterverzeichnisse von exportierten
Verzeichnissen zum Einhängen freigeben. Wenn
beispielsweise die Distribution von &os; &rel.current;
unter ziggy:/usr/archive/stuff/FreeBSD
liegt, muss der Rechner ziggy erlauben,
das Verzeichnis
/usr/archive/stuff/FreeBSD
einzuhängen. Es reicht nicht, dass
ziggy erlaubt das Verzeichnis
/usr oder
/usr/archive/stuff
einzuhängen.Unter &os; werden diese Freigaben in der Datei
/etc/exports mit der Option
eingestellt. Die nötigen
Einstellungen können auf einem anderen NFS-Server
unterschiedlich sein. Wenn Sie vom NFS-Server die
Fehlermeldung permission denied
erhalten, dann haben Sie wahrscheinlich die Freigaben
nicht richtig konfiguriert.