Häufig gestellte Fragen zu GNU Hurd

Dieses Dokument versucht diejenigen Fragen zu beantworten, von denen Nutzer von GNU Hurd und der darauf aufbauenden Binärdistribution Debian GNU/Hurd am häufigsten geplagt werden. Neben Installation und allgemeiner Nutzung wird auch auf das Kompilieren und Entwickeln unter und von GNU Hurd selbst eingegangen. Bevor man andere Menschen um Hilfe fragt, sollte man das hier gelesen haben.

GNU Hurd steht noch unter aktiver Entwicklung und eine stabile Version wurde bis jetzt noch nicht veröffentlicht. Deshalb gibt es verschiedene Dinge zu beachten:

Das heißt aber auch, dass es noch genügend Spielraum für Mitarbeit auf verschiedenen Ebenen gibt:

Sollten Fragen auftauchen, die nicht durch dieses Dokument beantwortet werden aber eurer Meinung nach sollten, dann sendet sie bitte an uns. Wenn möglich mit einer Lösung.

Jeder Abschnitt steht unter dem Copyright des/r jeweiligen Autors/en. Das Kopieren, Verteilen und/oder Modifizieren dieses Dokuments ist erlaubt, solange es unter den Bedingungen der GNU Free Documentation License Version 1.1, oder einer späteren, durch die Free Software Foundation herausgegebenen Version geschieht. Von den Optionen zu "Invariant Sections", "Front-Cover Texts" und "Back-Cover Texts" wurde kein Gebrauch gemacht. Eine Kopie der Lizenz findet sich in der Datei COPYRIGHT.

                                                     Neal H Walfield
						     neal@cs.uml.edu

Ins Deutsche übersetzt von:


Inhalt


1 Allgemeines

1.1 Was ist ein Multiserver Microkernel?

{NHW} Die Bezeichnung Microkernel hat nichts mit der Größe des Kernels zu tun, sondern bezieht sich vielmehr auf die Funktionalität, die der Kernel der Umgebung bereitstellt. Allgemein anerkannt sind das: ein Satz von Schnitstellen zur Kommunikation zwischen den Prozessen und ein Weg für Prozesse, die Hardware anzusprechen. "Software Treiber", wie ich sie gern bezeichne, werden dann als Server im User-Space implementiert. Die offensichtlichsten Beispiele hierfür sind der TCP/IP-Stack, das ext2-Dateisystem und NFS. In GNU Hurd haben die Nutzer nun Zugriff auf Funktionalität, die sie unter einem monolithischen Kernel niemals hätten. Weil ein Server im User-Space als der Benutzer läuft der ihn gestartet hat, kann man so zum Beispiel in seinem Home-Verzeichnis ein ftp-Dateisystem mounten.

Weitere Informationen zum Design von Hurd findet man in dem englischen Artikel "Towards a new strategy on OS design" von Thomas Bushnell, BSG:

	http://www.gnu.org/software/hurd/hurd-paper.html

1.2 Wie wird der Begriff "Hurd" richtig benutzt?

{NHW} "Hurd", als Akronym, steht für "Hird of Unix Replacing Daemons", wobei "Hird" wiederum für "Hurd of Interfaces Representing Depth" steht.

Im Englischen wird "Hurd" wie ein Titel und nicht als Eigenname behandelt, weswegen es immer zusammen mit einem Artikel, also "the Hurd", benutzt wird. Beispiel: "The ext2 filesystem is provided by the Hurd, not by Mach." Die Ausdrücke "Hurd", "HURD", "The HURD" und "the hurd" sind dort alle inkorrekt.

Im Deutschen sagen wir einfach nur "Hurd", ohne Artikel, da sich aufgrund der Uneindeutigkeit hier kein wirklich passender Artikel finden läßt. Übersetzt würde obiger Satz also lauten: "Das ext2-Dateisystem wird von Hurd zur Verfügung gestellt, nicht von Mach".

Wir schreiben "GNU Hurd" anstelle von "Hurd", wenn wir betonen wollen das es sich um ein GNU Packet handelt. Sobald dies klar ist benutzen wir aber normalerweise die Kurzform.

Das komplette Betriebssystem besteht nicht nur aus dem Kernel und den System-Servern, sondern umfasst noch viele weitere Programme. Das komplette System wird als "GNU" oder "das GNU Betriebssystem" bezeichnet. Die GNU Programme können aber auch auf anderen Betriebssystem-Kernels laufen. Wir sagen "GNU/Hurd", wenn wir die Tatsache betonen wollen, dass dieses GNU System Hurd als Kernel benutzt. Damit stellen wir es außerdem in Gegensatz zu GNU/Linux, einem GNU System, das Linux als Kernel benutzt.

Zuguterletzt gibt es noch "Debian GNU/Hurd". Dies bezeichnet die Distribution, die von den Debian Entwicklern zusammengestellt wurde. Beispiel: "Was hast du auf deinem Laptop laufen?" "Debian GNU/Hurd natürlich.".

Die Franzosen neigen zu "le Hurd", behandeln den Namen also in der männlichen Einzahl, auch groß geschrieben, wie im Englischen.

Wenn wir über den Microkernel reden, sagen wir "Mach", und benutzen es wie ein reguläres Hauptwort. Beispiel: "Mach benutzt die Gerätetreiber von Linux Version 2.0.x." Manchmal sagen wir auch "Der Mach Microkernel" anstelle von nur "Mach".

1.3 Welche Mailinglisten gibt es?

{NHW} Es gibt grundsätzlich vier Mailinglisten:

Die Mailinglisten können auf dem üblichen Weg abonniert werden.

1.4 Wohin sende ich Bug-Reports?

{NHW} Du kannst das Debian Bug Tracking System (BTS) benutzen. Mehr Informationen dazu gibt's unter http://www.debian.org/Bugs.

1.5 Gibt es eine TODO-Liste?

{NHW} Ja, sogar mehrere.

1.6 Wann wird die nächste Version veröffentlicht?

{NHW} Das scheint niemand so genau zu wissen. Aber GNU/Hurd ist definitiv lauffähig. Probier es aus und hilf uns zu einem neuen Release zu kommen.

1.7 Warum ist `/usr' ein symbolischer Link auf `.'?

{MB} Die Unterscheidung zwischen `/' und `/usr' hat historische Gründe. Unix-Systeme wurden früher von zwei Kassetten gebootet: einer kleinen Root-Kassette und einer größeren User-Kassette. Heutzutage benutzen wir gern getrennte Partitionen für die zwei. Hurd wirft dieses historische Überbleibsel über Bord. Wir denken, dass wir eine flexiblere Lösung gefunden haben, die wir als Shadow-Dateisysteme bezeichnen. Leider ist die Unterstützung für Shadow-Dateisysteme noch nicht implementiert.

2 Installation

2.1 Woher bekomme ich Debian GNU/Hurd?

{NHW} Da GNU/Hurd ein offizieller nicht-stabiler Port der Debian Distribution ist, kann man die Binaries auf jedem lokalen Debian-Mirror finden. Zusätzlich gibt es jedoch einige Grundpakete, die sich nicht sauber kompilieren lassen und vorläufig mit einigen "Hacks" zum Laufen gebracht wurden. Diese findet man unter:

	ftp://alpha.gnu.org/pub/hurd/debian

Sobald eine lauffähige Installation vorhanden ist, kannst du apt auf die genannten Archive verweisen indem du folgende zwei Zeilen zu der Datei `/etc/apt/sources.list' hinzufügst:

	deb ftp://alpha.gnu.org/pub/gnu/hurd/debian unstable main
	deb http://http.us.debian.org/debian unstable main

Da der Download all dieser Pakete jedoch ziemlich lange dauern kann (es gibt dort über einen Gigabyte an Dateien), hat Philip Charles Debian GNU/Hurd CD's zusammengestellt. Händler findest du unter:

	http://www.debian.org/ports/hurd/hurd-cd

2.2 Wie installiere ich Debian GNU/Hurd?

{NHW} Lies eine der Installationsanweisungen. Die aktuellste findet sich unter:

	http://web.walfield.org/papers/hurd-installation-guide/

2.3 Welche Hardware wird unterstützt?

{NHW} Zur Zeit läuft GNU/Hurd nur auf IA32-Maschinen. Die Portierung auf andere Architekturen sollte jedoch nicht so schwer sein, und an einer Portierung auf die PowerPC Architektur wird schon gearbeitet.

In Sachen Gerätetreiber nutzt GNU Mach einen Teil der Treiber des Linux 2.0.x Kernels. Eine relativ komplette Liste der unterstützten Hardware steht unter:

	http://www.freesoftware.fsf.org/thug/gnumach_hardware.html

Falls es Probleme gibt, liegt es höchstwahrscheinlich daran, dass:

Im ersten Fall solltest du damit beginnen, Geräte zu entfernen oder die BIOS-Einstellungen zu ändern. Im zweiten Fall muß man, da Mach keine nachladbaren Module bietet, einen neuen Kernel kompilieren und nur die Treiber für Geräte einbinden die man tatsächlich braucht.

2.4 Welchen Partitionstyp sollte ich für meine GNU/Hurd-Partitionen wählen?

{MB} Man sollte das ext2 Dateisystem nutzen, oder alternativ das von BSD bekannte ufs. Die Partitionstypennummer für ext2fs ist 0x83 (wie bei Linux) und _nicht_ 0x63 (GNU Hurd). Thomas erklärt warum 0x63 die falsche Wahl ist:

	Eines Tages werden wir vielleicht ein neues Dateisystem-Format
	haben, welches dann wahrscheinlich als das GNU Hurd
	Dateisystem-Format bezeichnet wird und diesen Partitionscode
	benutzt.

Wie Roland betont wäre es aber auch in jedem Fall ein Fehler den Code 0x63 für eine ext2fs Partition zu benutzen.

2.5 Wie benenne ich Partitionen?

{MB,NHW} Ich wußte das diese Frage kommen würde. Wenn ich diese FAQ auf eine einzige Frage reduzieren müßte, dann würde ich diese wählen. Es ist eigentlich ziemlich einfach, aber man muß beachten, dass es gleich mehrere inkompatible Namenskonventionen gibt.

Erstens für Hurd: Falls das Laufwerk ein SCSI-Laufwerk ist, ist die SCSI-Gerätenummer (ID) wichtig; falls es ein IDE-Laufwerk ist, sollte man wissen an welchem Controller das Laufwerk hängt, und ob es als Master oder Slave arbeitet. Hurd benutzt die BSD-Namenskonvention, welche Laufwerke anhand ihrer physischen Lage numeriert, beginnend bei 0. Dieses Namensschema ist vergleichbar mit Linux. Dort wird das erste Laufwerk (Master) am ersten Controller mit "hda" und das Slave-Laufwerk als "hdb" bezeichnet. Am zweiten Controller werden die Laufwerke (Master/Slave) entsprechend als "hdc" und "hdd" bezeichnet. Unter Hurd wird "hda" zu "hd0", "hdb" zu "hd1", usw.

Partitionen werden unter Hurd, wie auch unter BSD, als "Slices" bezeichnet und von 1 beginnend durchnumeriert. Somit sprechen wir eine bestimmte Partition an indem wir den Laufwerksnamen nehmen und daran ein `s' gefolgt von der Partitionsnummer anhängen. Dies entspricht wiederum fast Linux, wobei nun noch ein `s' dazwischen kommt. Zum Beispiel wird Linux "hda1" zu Hurd "hd0s1".

Der Bootloader GRUB verwendet eine komplett andere Konvention. Er durchläuft das BIOS und fügt jede Platte einem Array hinzu. Sowohl Laufwerke wie auch Partition werden von 0 beginnend durchnummeriert. Das Format ist: "hd(<Laufwerk>,<Partition>)". Somit bezeichnet "hd(0,1)" die zweite Partition des ersten im BIOS gefundenen Laufwerks. Da GRUB eine Autovervollständigung (mittels <TAB>) besitzt, ist Raten aber normalerweise nicht notwendig.

2.6 Kann ich Partitionen größer als 1GB nutzen?

{MB} Nein, zur Zeit nicht. Die Dateisystem-Server müssen noch dahingehend geändert werden, dass sie nicht den kompletten Datenträger im Speicher abbilden. Das ist eigentlich nicht allzu schwer. Für große Dateien müssen einige Schnittstellen geändert werden, was zwar etwas schwieriger, aber sicherlich auch machbar ist.

2.7 Wieviel Swap brauche ich?

{NHW} Allgemein gesagt: eine Menge. Wenn der Swap voll belegt ist gerät Mach in "Panic". Ich habe mindestens 128MB RAM und 256MB Swap auf allen Maschinen auf denen ich GNU/Hurd laufen habe.

2.8 Kann ich die selbe Swap-Partition für GNU/Linux und GNU/Hurd nutzen?

{NHW} Ja. Der "Default Pager" erkennt und respektiert Linux Swap-Partitionen. Er swappt aber auch in eine "RAW"-Partition, also alles was nicht als Linux-Swap erkannt wird. Es ist daher vorsichtig angesagt!

2.9 Was bedeutet der Fehler "Operation not permitted"?

{MB} Du hast vergessen, den Dateisystem-Besitzer der GNU/Hurd-Partition auf "hurd" zu setzen. Hurd nutzt zusätzliche Informationen in den Inodes um Übersetzer zu platzieren. Damit das funktioniert, muß die Partition so markiert werden, dass Hurd der Besitzer ist. Dies wird erreicht indem die Option "-o hurd" dem mke2fs beim Erzeugen des ext2-Systems unter anderen Betriebssystemen übergeben wird (unter GNU/Hurd ist diese Option automatisch eingeschaltet). Es läßt sich aber auch mit Hilfe des `e2os'-Skripts im Nachhinein noch nachholen.

2.10 Nachdem `native-install' fertig ist, kann ich nur noch ssoo sscchhrreeiibbeenn. Insbesondere musste ich `rreebboooott' schreiben um neu zu booten.

{MB} Lustig, nicht war? Zusätzlich zum Rettungs-`term'-Server in `/tmp/console' wurde ein anderer "term"-Server gestartet der ersterem die Tastatureingabe stiehlt. Nach einem Neustart verschwindet dieses Problem, weil nur noch ein einziger "term"-Server übrig ist. Wenn `tar' Übersetzer unterstützen würde, hätten wir dieses Probem nicht. Aber auch wer dieses Problem nicht sofort nach der Installation hat, sollte direkt neu starten um nicht auf diesen Bug zu stoßen.

3 Setup

3.1 Wie füge ich eine Swap-Partition hinzu?

{MB} Eine Swap-Partition wird auch als Paging-File bezeichnet. Normalerweise reicht es aus die Swap-Partition in die `/etc/fstab' einzutragen, so wie man es auch unter Linux macht. Man kann auch in eine Linux-Swap-Partition auslagern und Hurd wird die Linux-Swap-Signatur (beide Versionen) respektieren. Jedoch wird Hurd auch fröhlich in jede andere RAW-Partition swappen und alles darin überschreiben. Sei vorsichtig!

Falls man in eine Datei auslagern will, oder sicher gehen will das die Linux-Swap-Signatur vorher geprüft wird, muß man die `/etc/servers.boot' editieren. Die Syntax ist der Partitionsgerätedateiname, optional gefolgt von der Swap-Datei innerhalb einer ext2-Partition, gefolgt von einem Leerzeichen und dann einem von: `$(add-raw-paging-file)', `$(add-linux-paging-file)', `$(add-paging-file)'. Ersteres funktioniert mit jeder Partition oder Datei und berücksichtigt keine Swap-Signaturen oder andere Daten. Das zweite besitzt einen Sicherheitscheck und benutzt die Datei nur, wenn eine Linux-Swap-Signatur gefunden wurde. Letzteres sucht zuerst nach einer Swap-Signatur und fällt zurück auf "RAW-Paging" wenn keine gefunden wurde. Dies ist auch die Default-Einstellung für Einträge in der `/etc/fstab'.

3.2 Wie richte ich ein Netzwerk ein? Wie richte ich ein loopback-Device ein?

{MB} Für ein Netzwerk muß zunächst sichergestellt werden, dass GNU Mach beim Booten die Netzwerkkarte richtig erkannt hat. Danach muß dann, wie auch für das loopback-Device, `pfinet' eingerichtet werden. Dokumentation dazu findet sich unter:

	http://www.debian.org/ports/hurd/hurd-doc-server#pfinet

`/etc/resolv.conf', `/etc/hosts', usw. müssen ebenfalls entsprechend angepasst werden.

Dies ist natürlich alles nur notwendig, wenn es nicht bereits von der Installationsroutine erledigt wurde.

3.3 Wie kann ich Optionen an `serverboot' übergeben?

{MB} Du mußt diese dem Kernel (also z.B. auf der GRUB-Kommandozeile) übergeben, der diese dann automatisch an `serverboot' weitergibt.

3.4 Kann ich die GNU/Linux-Version von e2fsck für eine GNU/Hurd-Partition verwenden?

{MB} Ja, zumindest seit `e2fsprogs-1.05'. Die Version läßt sich mit `e2fsck -V' prüfen.

{NHW} Man sollte seine Partition nicht defragmentieren, da das entsprechende Utility nicht mit Übersetzern umgehen kann.

3.5 Warum funktionieren Pipes nicht?

{MB} `settrans -fgc /servers/socket/1 /hurd/pflocal' sollte helfen.

4 Nutzung

4.1 Wo finde ich die Dokumentation?

{NHW} Es gibt weder man-Pages noch info-Nodes zu Hurd-Übersetzern und Kommandos. Dokumentation ist innerhalb der Binaries und kann durch Angabe der Option `--help' angezeigt werden. Beispiel:

	# /hurd/ext2fs --help

zeigt die Optionen an, die der ext2fs-Übersetzer akzeptiert.

4.2 Was ist ein Übersetzer (translator)?

{MB} Es gibt einen Artikel zu Übersetzern unter:

	http://www.debian.org/ports/hurd/hurd-doc-translator

Weiterführende Fragen kannst du an die Mailingliste stellen.

4.3 Was ist die login-Shell?

{MB} Hurd besitzt das Konzept des "nicht-eingeloggten" Benutzers. Dieser Nutzer besitzt weder Nutzer- noch Gruppen-ID. Das rührt daher, dass Hurd Sätze von Nutzer- und Gruppen-IDs unterstützt, und eine Möglichkeit dabei natürlich der leere Satz ist. Hurd-Dateisysteme bieten ein viertes Rechte-Tripel ("rwx"), welches genutzt wird, um die Rechte eines solchen Users "ohne Rechte" zu bestimmen. Dies muß jedoch von Datei zu Datei einzeln erlaubt werden. Per Voreinstellung werden die gleichen Rechte wie für `other' genutzt.

Die Login-Shell von Hurd ist eine Shell, die ohne Nutzer- oder Gruppen-Rechte läuft. Um einem solchen "nicht-User" den Zugriff auf deine Dateien zu verweigern, kannst du entweder das vierte Dateirechte-Tripel entsprechend ändern, oder die Login-Shell des `login'-Users auf `/bin/loginpr' setzen. Letzteres führt zu einem Standard login-Prompt.

4.4 Wie benutze ich andere Tastatureinstellungen als `US'?

{NHW} Versuch's mit:

	ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/keymap.tar.gz

4.5 Wie schalte ich die Farbe für die Konsole ein?

{NHW} Wenn du den GNU Mach Microkernel benutzt dann kannst du die TERM variable auf den Wert `mach-color' setzen:

	# export TERM=mach-color

4.6 Wie kann ich virtuelle Konsolen einschalten?

{NHW} Virtuelle Konsolen werden derzeit nicht unterstützt. Alternativ kann man aber das Programm `screen' benutzen, welches auch einiges an zusätzlicher Funktionalität bietet.

Kalle Olavi Niemitalo <tosi@ees2.oulu.fi> hat die Arbeit an `colortext' begonnen, einem Userspace-Programm zum multiplexen der Konsole, das die Eingaben von /dev/kbd ließt. Siehe dazu:

	http://stekt.oulu.fi/~tosi/

{MB} Hier sind ein paar nützliche Optionen für die ~/.screenrc um dafür zu sorgen, dass `screen' sich mehr wie die virtuellen Terminals von Linux verhält:

	bindkey ^[O0 select 0
	bindkey ^[O1 select 1
	bindkey ^[O2 select 2
	bindkey ^[O3 select 3
	bindkey ^[O4 select 4
	bindkey ^[O5 select 5
	bindkey ^[O6 select 6
	bindkey ^[O7 select 7
	bindkey ^[O8 select 8
	bindkey ^[O9 select 9
	# Unglücklicherweise ignoriert Mach bisher modifier-keys auf die
	# Pfeiltasten.  Für's erste nehmen wir daher andere Tasten zum
	# Vor- und Zurückschalten.
	# ^[, bedeutet ALT und ","
	# ^[. bedeutet ALT und "."
	bindkey ^[, prev
	bindkey ^[. next

4.7 Was ist der Status von X?

{MB} Es funktioniert! Die Pakete sind auf jedem Debian ftp-Mirror vorhanden. XFree86 4.0.2 ist verfügbar, genauso wie ein Teil der v3-Server. Instruktionen zum Benutzen der Pakete finden sich in den Archiven der Mailinglisten.

4.8 Warum funktioniert X nicht?

{MB} Versuche `export LD_LIBRARY_PATH=/usr/X11R6/lib'. Schuld ist ein Problem mit dem Linker. GNU/Hurd erwartet das `RPATH' benutzt wird, aber Debian versucht das auf verschiedenen Wegen zu umgehen. Aus Sicherheitsgründen funktioniert obige Lösung allerdings nicht mit Dateien die das suid-Bit gesetzt haben. Das Problem wird sich vorraussichtlich durch die Benutzung von "RUNPATH" erledigen, welches im neuen ELF Standard festgelegt ist.

4.9 Was sind das für merkwürdige Prozess-ID's `2', `3' und `4'?

{MB} Zwei ist der Kernel, drei der default Pager und vier das Root-Dateisystem.

4.10 Warum bekomme ich von `ps aux' so eine merkwürdige Ausgabe?

{MB} Versuche `ps Aux'.

4.11 Ein Prozess hängt, den ich mit `kill' beenden will. Aber jetzt hängt auch `ps'?

{MB} Unterbreche `ps' und benutze es mit der Option `-M'.

{NHW} Normalerweise bezieht `ps' seine Informationen sowohl vom proc-Server als auch (über den Message-Port) von den Prozessen selbst. Wenn ein Prozess hängt kann er nicht antworten, und deswegen wartet `ps' ewig. Die `-M' Option hält `ps' davon ab Informationen zu sammeln, welche die Benutzung von Message Ports verlangen.

4.12 Wo sind ...?

{MB} `fdisk' und `dmesg' sind noch nicht portiert.

Statt `free' benutze `vmstat' oder `vminfo'.

Für Kernel-Nachrichten kann man `/dev/klog' direkt auslesen. Allerdings sollte man beachten, dass die Nachrichten nach einmaligem lesen verschwunden sind.

{NHW} `ifconfig' gibt es nicht. Versuche:

	# /hurd/pfinet --help

Was dhcp angeht, schaue dir `hurd/trans/pump.c' an. Dort findet sich der Start eines dhcp-Clients für Hurd.

4.13 Gibt es ein `/proc'-Dateisystem?

{MB} Nein. Eventuell wird es eines Tages ein Emulations-Dateisystem für Programme geben die es benötigen. Falls du dich über das leere `/proc' Verzeichnis wunderst: es ist ein Überbleibsel aus einem Debian GNU/Linux Paket (`base-files', um genau zu sein).

Um nach vorhandenen Hardwaregeräten zu suchen kannst du das `devprobe' Hilfsprogramm benutzen.

4.14 Warum funktioniert das `df'-Kommando nicht?

{NHW} Es funktioniert, du musst ihm nur mitteilen welches Dateisystem es abfragen soll. Beispiel:

	# df /

4.15 Warum sterben meine Übersetzer?

{NHW} Versuche es mit den Optionen `-ap' von `settrans'. Normalerweise erzeugt `settrans' nur einen passiven Übersetzer, weswegen keine Ausgaben auf dem Terminal zu sehen sind. Mit `-ap' werden aber sowohl der aktive als auch der passive Übersetzer gesetzt, was dafür sorgt das der Übersetzer sofort startet und seine Fehlermeldungen auf das Terminal schreibt.

Ein häufiges Problem ist es, wenn einem passiven Übersetzer relative Pfadnamen übergeben werden, da nicht vorhergesagt werden kann, welches Verzeichnis das aktuelle Arbeitsverzeichnis ist wenn der Übersetzer gestartet wird.

4.16 Warum funktioniert ein `read()' auf ein Verzeichnis?

{MB} Es ist wichtig zu verstehen, dass ein Verzeichnis unter Hurd nichts spezielles hat sondern nur eine weitere Datei ist. Dies passt zusammen mit dem Übersetzerkonzept, bei dem ein Übersetzer als Verzeichnis erscheinen, aber gleichzeitig auch eine einfache Datei zur Verfügung stellen kann.

5 Fehlersuche

5.1 Wenn die APM-Unterstützung im BIOS meine Festplatten herunterfährt, wacht Hurd nicht mehr auf. Was ist da los?

{MB} APM wird in den bisherigen Versionen von GNU Mach nicht unterstützt. Die derzeit einzige Lösung ist es, die APM-Unterstützung im BIOS abzuschalten.

5.2 Was sind das für Meldungen über `default pager', `paging' und `pager request'?

Der `default pager' ist verantwortlich für die Zuweisung des virtuellen Speichers. Wenn er keine neuen Speicher-Seiten mehr reservieren kann, weil bereits der gesamte Speicher belegt ist, dann können schreckliche Dinge passieren. Solche Fehlermeldungen können ein Zeichen dafür sein, dass zuwenig Speicher im System oder der swap-space zu klein ist. Vielleicht hast du aber auch ein Speicherloch in einem der laufenden Programme entdeckt.

5.3 Was ist ein `gratuitous error'?

{MB} Dieser kommt von `strerror(EGRATUITOUS)'. Der Dokumentation zur `glibc' nach hat dieser Fehler-Code keine Bedeutung. Dies ist allerdings nicht ganz richtig. Thomas erklärt:

	Genauer bedeutet `EGRATUITOUS' offiziell, dass ein Server in einer
	"unmöglichen" oder das Protokol verletzenden Weise geantwortet
	hat.  Es gibt einige Fälle in denen Hurd `EGRATUITOUS'
	zurückgibt, in denen aber vermutlich etwas anderes gewählt werden
	sollte.

Wenn du so eine Fehlermeldung reproduzieren kannst, dann melde dich bitte.

5.4 Was bedeutet "/dev/hd0s1: MOUNTED READ-ONLY; MUST USE `fsysopts --writable' "?

{NHW} Hier wurde `/dev/hd0s1' nicht sauber aus dem Dateisystem entfernt. Beim Booten startet Hurd ein `fsck -p' auf jede Partition die es in `/etc/fstab' findet, sodass du dir überlegen solltest die entsprechende Partition dort einzutragen. Wenn du dir sicher bist, dass die Partition in Ordnung ist, kannst du folgenden Befehl benutzen

	# fsysopts /home --writable

um den Übersetzer auf `/home' von nur-lesen (read-only) auf beschreibbar (writable) zu setzen. Beachte, dass das Kommando an das Dateisystem gesendet wird und nicht an den Store (also /dev/hd0s1).

5.5 Wenn GNU/Hurd abstürzt bootet GNU Mach automatisch neu. Gibt es eine Möglichkeit ihn anzuhalten, damit ich den oder die Fehler aufschreiben kann?

Wenn du `init' die `-H' Option übergibst (indem du es zur Kommandozeile beim Booten hinzufügst), startet Mach statt neu zu starten den Kernel-debugger. Am Debugger-prompt (`db>') kannst du jederzeit `reboot' eingeben um neu zu starten.

6 Portieren

6.1 Welche Programme sind schon portiert worden?

{NHW} Eine Menge, wie ein Blick in das Debian Archiv zeigt. Und viele der noch fehlenden Programme brauchen nichtmal zwangsläufig portiert zu werden, es wurde nur bisher nie versucht sie zu kompilieren.

6.2 Ist das Portieren leicht?

{NHW} Bei Applikationen die sich an den POSIX Standard halten, ist das Portieren relativ einfach. GNU/Hurd versucht ein möglichst POSIX konformes Betriebssystem zu sein.

Ein häufig von Programmierern gemachter Fehler, ist anzunehmen, dass MAXPATHLEN und PATH_MAX definiert sind. Bei den meisten Betriebssystemen sind diese Werte auf einige Tausend gesetzt aber bei GNU/Hurd gibt es kein Maximum und die Werte sind folglich nicht definiert. Der korrekte Weg ist es, einen Patch an die Autoren des Programms zu schicken der das Programm dynamisch Speicher reservieren läßt.

6.3 Wie kann ich helfen?

{NHW} Jeff Bailey versucht derzeit, alle vorhandenen Debian Pakete auf Hurd zu portieren. Unter der folgenden Adresse kannst du herausfinden was bereits erreicht wurde und wie du helfen kannst:

	http://people.debian.org/~jbailey/oasis/group/Debian/index.html

7 Kompilieren

7.1 Woher bekomme ich den Quellcode?

{NHW} Der Quellcode ist im CVS zu finden unter:

	:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd

Es wird kein Passwort zum Einloggen benötigt. Die interessanten Module sind: `hurd', `mach' und `mig'.

Ein Web-Interface ist auch vorhanden unter: http://subversions.gnu.org.

Der Quellcode zu den aktuellen Debian Paketen läßt sich auf jedem Debian-Mirror finden.

7.2 Kann ich einen Cross-Compile machen?

{NHW} Ja. Wenn du Debian GNU/Linux auf IA32 benutzt ist es relativ simpel, weil dort ein einfacher Cross-Compiler vorhanden ist. Alles was benötigt wird sind die `gcc-i386-gnu' und `mig-i386-gnu' Pakete. Beim `configure' müssen die verwendeten Tools direkt angegeben werden:

	# MIG=/usr/bin/i386-gnu-mig CC=/usr/bin/i386-gnu-gcc \
	  ../src/hurd/configure ...

Wenn du eine andere Distribution benutzt, ist das Ganze etwas umständlicher. Instruktionen gibt es im "Cross Compiling HOWTO" unter:

	http://hurddocs.sourceforge.net/howto/cross.html

Die Erfahrungen von Farid Hajji <farid.hajji@ob.kamp.net> lassen sich außerdem unter folgender Adresse nachlesen:

	http://lists.debian.org/debian-hurd-0012/msg00062.html

7.3 Irgendwelche allgemeinen Tips?

{NHW} Jepp. Das kompilieren im Source Tree selbst in ungetestet. Versuche:

	# ../src/hurd/configure ...

8 Entwicklung

8.1 Was ist OSKit-Mach?

{NHW} Es gibt zwei Versionen von Mach die mit Hurd benutzt werden: GNU Mach und OSKit-Mach. GNU Mach benutzt die Treiber von Linux 2.0.x und OSKit-Mach die des `OSKit' der Universität von Utah. Wenn alles glatt läuft dann wird sich OSKit-Mach stabilisieren und zum offiziellen Kernel werden. Mehr Informationen zum OSKit gibt es unter:

	http://www.cs.utah.edu/flux/oskit

8.2 Wo finde ich die Dokumentation?

{NHW} Zum Mach Kernel wurden mehrere Bücher geschrieben und die enthaltenen Informationen sind immernoch weitestgehend zutreffend. Für angehende Kernel-Hacker können sie als notwendige Lektüre angesehen werden. Zu finden sind sie unter:

	http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html

Die Dokumentation zu Hurd ist äußerst unzulänglich. Der Beginn eines Buches, "The GNU Hurd", befindet sich im `doc' Verzeichnis des Quellbaums von Hurd. Es kann mit dem folgenden Kommando gelesen werden:

	# info hurd

Der Ort für definitive Antworten ist natürlich der Quellcode, was aber nicht bedeuten soll das mehr Dokumentation nicht willkommen wäre. Als Start sollte man sich die Datei `<hurd>/doc/navigating' angucken.

8.3 Wie kann ich sicher sein, dass mein Code POSIX-kompatibel ist?

{NHW} Unglücklicherweise muß man den POSIX Standard von dem IEEE kaufen. Eine Obermenge von POSIX, die Single Unix Specification version 2, bekommt man jedoch kostenlos im Internet unter:

	http://www.unix-systems.org/online.html

8.4 Wem schicke ich meine Patches?

{NHW} Wenn sie für Hurd, Mach oder MiG sind, dann schicke die Patches an die bug-hurd Mailingliste.

Wenn sie für andere Pakete sind, dann ist das Debian Bug Tracking System ein guter Platz. Du solltest in diesem Fall die debian-hurd Mailingliste über den Bugreport benachrichtigen.

8.5 Welches Format sollten Patches für Hurd oder GNU Mach haben.

{MB} Patches sollten im "unified context diff"-Format sein (Option `-u' zu GNU diff). Es ist außerdem hilfreich wenn du zusätzlich die `-p' Option benutzt, welche zusätzlich Informationen zu den geänderten Funktionen einfügt. Für ähnliche Änderungen kann eine einzelne Datei benutzt werden, aber unabhängige Änderungen sollten auch auf mehrere Dateien verteilt werden. Die Patches können entweder "Inline" oder als MIME-attachment verschickt werden. Sie sollten nicht komprimiert und/oder in Archive gepackt werden, es sei den sie sind extrem groß. Und wenn sie sehr groß sind, ist es vermutlich besser sie irgendwo online zu plazieren und der Liste nur die Adresse mitzuteilen.

Schreibe einen ChangeLog Eintrag, der sich an das Format der existierenden Dateien hält. Beispiel:

	2000-12-02  Marcus Brinkmann  <marcus@gnu.org>
		* ops.c (op_readlink): Before returning, check if the buffer
	        pointed to by transp is ours.  If not, munmap it.
	        (op_read): Likewise for bp.
	        (op_readdir): Don't alloca a buffer here.  Instead initialize
	        BUF and BUFSIZE to 0 and let the server (eh, MiG) do it.
	        munmap BUF before returning.

Der Dateiname und der Name der Funktion sollten immer komplett ausgeschrieben und nicht abgekürzt oder anderweitig zerstückelt werden (etwa foo.{c,h}), da sonst ein Suchen nach allen geänderten Funktionen unmöglich wird. Locale Variablennamen sind alle groß geschrieben. Es sind immer zwei Leerzeichen zwischen Sätzen. Unter Emacs kann man "C-x 4 a" benutzen, um einen neuen ChangeLog Eintrag zu erstellen. Wenn du das innerhalb einer Funktion machst, füllt Emacs automatisch den Datei- und Funktionsnamen für dich ein.

Schicke keine Patches für das ChangeLog selbst. Füge stattdessen ChangeLog-Einträge in die Nachricht ein, die den Patch enthält. Zwischen Patches für die ChangeLog-Datei gibt es häufig Konflikte.

Wenn sich der ursprüngliche Quellbaum im Verzeichnis `hurd-orig', und der geänderte Quellbaum im Verzeichnis `hurd' befindet, dann kannst du das folgende Kommando benutzen um einen korrekten Patch zu erzeugen. Versichere dich aber bitte, dass sich keine zusätzlichen Dateien wie Backups in dem geänderten Quellbaum befinden, oder lasse alternativ die Option `-N' weg. Die ChangeLog-Einträge müssen seperat zusammengesucht werden.

	# diff -x ChangeLog -Nurp hurd-orig hurd

Die Antworten wurden gegeben von: