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:
es gibt vieles, was erst noch fertig gestellt werden muss
es sind noch immer viele Bugs vorhanden
ein GNU/Hurd System wird früher oder später abstürzen
Das heißt aber auch, dass es noch genügend Spielraum für Mitarbeit auf verschiedenen Ebenen gibt:
Entwicklung von Hurd und Mach selbst
Portierung von Applikationen
Schreiben von Dokumentation
Nutzer-Feedback (auch sehr wichtig!)
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:
Lars Weber <me@lars.in-berlin.de>
Henning Riedel <hriedel@htwm.de>
{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
{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".
{NHW} Es gibt grundsätzlich vier Mailinglisten:
bug-hurd@gnu.org: Entwicklung von Hurd und Mach.
help-hurd@gnu.org: Allgemeine Fragen zu Hurd.
web-hurd@gnu.org: Pflege der Hurd-Webseiten unter http://www.gnu.org/software/hurd/hurd.html
debian-hurd@lists.debian.org: Entwicklung (inklusive Portierungen) von und Hilfe zur Debian GNU/Hurd Distribution.
Die Mailinglisten können auf dem üblichen Weg abonniert werden.
{NHW} Du kannst das Debian Bug Tracking System (BTS) benutzen. Mehr Informationen dazu gibt's unter http://www.debian.org/Bugs.
{NHW} Ja, sogar mehrere.
<hurd>/tasks
<hurd>/TODO
{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.
{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.
{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
{NHW} Lies eine der Installationsanweisungen. Die aktuellste findet sich unter:
http://web.walfield.org/papers/hurd-installation-guide/
{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:
du IRQ-Sharing benutzt, was GNU Mach bisher nicht vollständig unterstützt
ein Gerätetreiber die Hardware untersucht und ausversehen das falsche Gerät aktiviert
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.
{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.
{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.
{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.
{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.
{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!
{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.
{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.
{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'.
{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.
{MB} Du mußt diese dem Kernel (also z.B. auf der GRUB-Kommandozeile) übergeben, der diese dann automatisch an `serverboot' weitergibt.
{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.
{MB} `settrans -fgc /servers/socket/1 /hurd/pflocal' sollte helfen.
{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.
{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.
{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.
{NHW} Versuch's mit:
ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/keymap.tar.gz
{NHW} Wenn du den GNU Mach Microkernel benutzt dann kannst du die TERM variable auf den Wert `mach-color' setzen:
# export TERM=mach-color
{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
{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.
{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.
{MB} Zwei ist der Kernel, drei der default Pager und vier das Root-Dateisystem.
{MB} Versuche `ps Aux'.
{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.
{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.
{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.
{NHW} Es funktioniert, du musst ihm nur mitteilen welches Dateisystem es abfragen soll. Beispiel:
# df /
{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.
{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.
{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.
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.
{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.
{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).
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.
{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.
{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.
{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
{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.
{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
{NHW} Jepp. Das kompilieren im Source Tree selbst in ungetestet. Versuche:
# ../src/hurd/configure ...
{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
{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.
{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
{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.
{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:
{NHW} Neal H Walfield <neal@cs.uml.edu>
{MB} Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>