Portierungen ] [ Debian GNU/Hurd ] [ Neues ] [ Installation ] [ Hurd-CDs ] [ Dokumentation ] [ Entwicklung ] [ Kontakt ]

Debian GNU/Hurd-Installation

Dieses Dokument hat als Ziel, einen einfachen und relativ schmerzlosen Satz an Instruktionen zu vermitteln, wie man mit einem minimalen Aufwand Debian GNU/Hurd zum Laufen bekommt.

Es basiert auf Neal H. Walfields Hurd Installations-Anleitung. Vielen Dank an Neal für seinen Beitrag.

Beachten Sie, dass einige Punkte in diesem Handbuch ein bisschen unbequem sind, da sie eine lange Zeit in Anspruch nehmen und Probleme verursachen können. Sie könnten die Installation über die vorbereiteten CD-Images bevorzugen, insbesondere wenn Sie ein Anfänger sind. Selbst wenn sie veraltet sind, funktionieren sie in der Regel. Sie können Aktualisierungen immer noch aus den Online-Depots erhalten.

1. Überblick

Die Debian GNU/Hurd-Distribution hat, anders als Distributionen anderer Betriebssysteme, kein nettes Installationsprogramm. Eines Tages mag es dies haben, und Sie werden beim Design und der Implementation helfen; bis zu diesem Tag wird die Installation von Debian GNU/Hurd ein anderes Betriebssystem, speziell ein Unix-artiges System, benötigen. Die Benutzer haben erfolgreiche Installationen über verschiedene Arten von GNU/Linux sowie BSDs gemeldet. Die minimalen Anforderungen an das ur-ladende Betriebssystem sind die Fähigkeiten: ein ext2-Dateisystem zu erzeugen; ein Tar-Archiv darauf zu extrahieren und GNU Grub zu installieren.

GNU ist von der Art ähnlich zu jedem Unix-artigen System: nach dem Einloggen werden dem Benutzer eine Shell und das vertraute Unix VFS (virtuelle Dateisystem) präsentiert. Obwohl GNU versucht, POSIX zu befolgen, ist es Nicht Unix. GNU/Hurd baut auf vielen der Unix-Konzepte auf und erweitert diese, um entweder neue Funktionalität zu ergänzen oder um zu korrigieren, was als Schwachstelle im ursprünglichen Design angesehen wird. Der am ehesten bemerkbare Unterschied sind die Übersetzer, User-Space-Programme, die mit dem VFS interagieren. Diese Dateisysteme leben weder im Kernel noch müssen sie als root laufen; sie müssen nur auf die Hintergrundspeicherung und den Einhängepunkt zugreifen. Ein anderer Unterschied ist der, dass Prozesse anstelle einer einzelnen Benutzeridentität, die bei der Erzeugung festgelegt ist, über Identitätsmarken verfügen, die vom Prozess abgekoppelt sind, d.h. sie können mit den erforderlichen Rechten von einer Autorität ergänzt oder zerstört werden.

Es ist zwingend erforderlich, vertraut mit der Unix-Umgebung (und speziell den GNU-Benutzerprogrammen, wie sie in beliebten Varianten wie beispielsweise GNU/Linux gefunden werden können) zu sein, um sich in GNU wohlzufühlen. Erfahrung mit den Debian-Werkzeugen erweist sich auch als unschätzbar zur Konfiguration und Wartung einer GNU/Hurd-Kiste.

Diese Anleitung bemüht sich, die Installation von GNU/Hurd einen so schmerzlosen Prozess wie möglich zu machen. Falls Fehler vorliegen, sind sie fast sicher Fehler des Autoren. Bitte berichten Sie diese an ihn, zusammen mit anderen Vorschlägen und Kritik; sie werden alle dankend entgegengenommen.

2. Grundstück oder ein Zuhause finden

Falls Sie keine verfügbare Partition oder extra Festplatte haben, kann dies der längste Schritt sein. In diesem Fall müssen Sie Ihre Festplatte neu partitionieren. Eine Möglichkeit ist es, GNUs Partitions-Editor, Parted, zu verwenden. Er bietet nicht nur grundlegende Partitionseditierung, sondern auch Partitionsgrößenveränderungs- und -verschiebe-Funktionalität. Das Handbuch ist recht vollständig und enthält mehrere Anleitungskurse.

Der Hurd unterstützt mehrere Erweiterungen des ext2fs-Dateisystem-Formats. Zuallererst sind darunter die passiven Übersetzer und ein vierter Satz an Rechte-Bits für unbekannte Benutzer (Benutzer ohne eine Identität – nicht der other-Benutzer). Um diese Erweiterungen zu benutzen, muss der Eigentümer der Partition auf hurd gesetzt werden. mke2fs setzt den Eigentümer auf den aktuell laufenden Kernel, wenn dies nicht explizit auf der Befehlszeile aufgehoben wird. Da der Hurd diese Einstellung fleißig respektieren wird, muss darauf geachtet werden, diese zutreffend zu setzen, oder der Hurd wird auf subtile Art versagen. Beachten Sie, dass selbst ein Dateisystem, das einem bestimmten Kernel gehört, noch von anderen benutzt werden kann; Sie können u.U. nur einige Erweiterungen nicht benutzen.

Um ein Dateisystem zu erzeugen, benutzen Sie mke2fs und übergeben Sie -b 4096 -I 128 -o hurd, um dem Hurd anzuzeigen, dass er der neue Eigentümer des Dateisystems ist. Wenn beispielsweise Ihre Partition /dev/hda2 ist:

 
 # mke2fs -b 4096 -I 128 -o hurd /dev/hda2

3. Das Boot-Lade-Programm

Das Boot-Lade-Programm des GNU-Systems ist Grub, der GRand Unified Boot loader, und es ist seine Hauptaufgabe, den Kern des GNU-Systems (Mach und den Hurd) zu booten. Allerdings kann jedes Boot-Lade-Programm, das den Multiboot-Standard unterstützt, dazu verwendet werden, Mach und den Hurd zu laden. Momentan (soweit uns das bewusst ist) ist der GNU Grub das einzige Boot-Lade-Programm, das so einen Standard unterstützt.

Ein Wort über Grub. Anders als traditionelle Boot-Lade-Programme auf x86, wie LILO, ist Grub sehr mächtig. Es hat eine Kommandozeilenschnittstelle, bootp, dummy-Terminal-Unterstützung und eine Fülle an anderen Funktionen. Zusätzlich kann er fast jeden Kernel booten. Falls Sie jemals eine Alpha oder Sparc gebootet haben, werden Sie verstehen, was Grub machen kann. Daher seien Sie nicht verängstigt: Grub ist besser. Sie werden ihn mögen. Sie werden nicht zurückkehren.

Es ist wahrscheinlich besser, dass Sie Grub vor der Installation von Hurd installieren. Sie können es aber auch zu jedem späteren Zeitpunkt auf Ihre Festplatte installieren.

4. Cross-Installation

Der nächste Schritt ist das Erhalten des Basis-Systems. Es gibt mehrere Alternativen, falls Sie ein Debian-System verwenden, können Sie das Paket crosshurd verwenden. Andernfalls können Sie ein aktualisiertes Basissystem-Tar-Archiv von einem beliebigen unter http://wiki.debian.org/DebianPorts/Mirrors aufgeführten Spiegel holen.

Das Tar-Archiv ist so aufgesetzt, dass alles in das aktuelle Verzeichnis extrahiert wird. Nachdem das Dateisystem eingehängt ist, kann das Archiv extrahiert werden. Ist das Dateisystem beispielsweise auf /dev/hda2, der Einhängepunkt /gnu und das Archiv im aktuellen Home-Verzeichnis des Benutzers, dann wird das Folgende benötigt:

 
 # mount -t ext2 /dev/hda2 /gnu
 # cd /gnu
 # tar --same-owner -xvjpf ~/gnu.tar.bz2

5. GNU/Hurd booten

Alles ist nun in Bereitschaft, um GNU/Hurd zum ersten Mal zu booten. Nach der Überprüfung, dass die Grub-Boot-Diskette im Laufwerk liegt, rebooten Sie. Falls alles gut abläuft, wird entweder ein Grub-Menü oder eine Kommandozeile angezeigt. Falls ein Menü angezeigt wird, drücken Sie c, um zur Kommandozeile zu gelangen.

Zuerst muss der GNU Mach geladen werden. Dies benötigt das Wissen über das Dateisystem und den Pfad zu GNU Mach. Grub benutzt eine Partitions-Nomenklatur, die sich ein bisschen von Linux und dem Hurd unterscheidet: sowohl IDE als auch SCSI-Laufwerke werden (hdN,M) benannt. N ist die Laufwerksnummer (mit Null beginnend) wie sie vom BIOS durchnummeriert wird. Das bedeutet, Grub unterscheidet nicht zwischen IDE- und SCSI-Platten. M identifiziert die Partition auf dem Laufwerk. Es ist auch ein bei Null beginnender Index. Falls dies verwirrend klingt, entspannen Sie sich: Der Grub ist auch hilfsbereit.

Um zu bestimmen, auf welchem Dateisystem eine bestimmte Datei liegt, bietet Grub den find-Befehl. Wenn dieser Befehl zusammen mit einem Dateinamen geäußert wird, sucht Grub auf jedem Dateisystem nach der spezifizierten Datei und gibt aus, wo sie gefunden wurde. Um zum Beispiel nach dem Kernel /boot/gnumach.gz zu suchen:

 
  
   grub> find /boot/gnumach.gz
   (hd0,0)

Hier gibt Grub an, dass /boot/gnumach.gz auf (hd0,0) ist.

Vor dem Laden des Kernels muss mindestens eine Option, die Wurzel-Partition, auf der Befehlszeile spezifiziert werden. Dies wird vom Hurd selber (d.h. nicht von Grub) verwendet. Als solche muss sie so bezeichnet sein, dass der Hurd sie verstehen kann.

GNU Mach nummeriert Platten beginnend bei Null. IDE-Laufwerke haben das Präfix hd während SCSI-Platten das Präfix sd haben. Wie bei Linux werden die Laufwerke entsprechend Ihrer Position am Kontroller nummeriert. Zum Beispiel ist der primäre Master hd0 und der sekundäre Slave hd3. Partitionen benutzen die BSD-Slice-Namenskonvention und hängen sM an den Laufwerksnamen an, um eine bestimmte Partition anzuzeigen. Die Slice-Zahl ist einfach zu berechnen: erhöhen Sie einfach die von Grub verwendete Zahl um eins.

Da der Hurd noch nicht konfiguriert wurde, muss er im Einzelbenutzermodus gestartet werden. Hierzu reicht die Ergänzung von -s auf der Kernel-Befehlszeile.

Unter der Annahme, dass das erste Laufwerk (d.h. (hd0)) der Master auf dem sekundären Kontroller ist, hätten wir:

 
  
   grub> kernel (hd0,0)/boot/gnumach.gz root=device:hd2s1 -s
   [Multiboot-elf, ...]

Als nächstes muss der Wurzeldateisystem-Server und der exec-Server geladen werden. Dies geschieht mittels Grubs Boot-Modul Lademöglichkeit. Die ${var} werden von GNU Mach eingefüllt. Die Argumente werden vom Hurd verwendet um anzugeben, was für eine Art von Information bereitgestellt wird. Da die ext2fs-Befehlszeile sehr lang ist, kann Sie durch Schützen des Zeilenumbruchzeichens in normaler Unix-Manier umgebrochen werden. Stellen Sie sicher, dass nach dem umgedrehten Schrägstrich am Zeilenende kein Leerzeichen folgt. Stellen Sie auch sicher, { und } von ( und ) zu unterscheiden.

 
  
  grub> module (hd0,0)/hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume)
    [Multiboot-module  0x1c4000, 0x2cfe6a bytes]
  grub> module (hd0,0)/lib/ld.so.1 /hurd/exec $(exec-task=task-create)
    [Multiboot-module  0x494000, 0x27afe bytes]

Sobald der Hurd läuft, kann dieser Prozess automatisiert werden, indem die passenden Befehle zu Grubs /boot/grub/menu.lst-Konfigurationsdatei hinzugefügt werden.

GNU/Hurd kann nun gebootet werden:

 
grub> boot

Falls der GNU/Hurd nicht bootet, könnte dies an geteilten IRQs liegen: GNU Mach arbeitet nicht gut mit diesen. Sie können Ihre Situation bestätigen, indem Sie beispielsweise in die /proc/interrupts-Datei unter Linux schauen. Da der GNU Mach auch keine ladbaren Kernelmodule unterstützt, sind viele Treiber in den Standardkernel einkompiliert. Falls es alte Peripherie gibt, kann dies ein Problem sein: Ein Gerät könnte auf eine Sondierung für ein komplett anderes Gerät ohne Bezug reagieren und dadurch einen Absturz hervorrufen. Das Bauen eines neuen Kernels mit nur den benötigten Gerätetreibern löst normalerweise dieses Problem. GNU Mach kann einfach cross-kompiliert werden. Falls Sie Debian betreiben, versuchen Sie das mig-Paket zu installieren und der normale gcc sollte es erledigen.

Falls dies nicht hilft fragen Sie auf der angemessenen Mailing-Liste.

6. Native Installation

Sobald Ihnen eine Shell-Eingabeaufforderung präsentiert wird, und immer wenn der Hurd im Einzelbenutzermodus ist, ist es notwendig, den Terminaltyp einzustellen:

 
# export TERM=mach

Seien Sie gewarnt, dass CONTROL-C und Freunde im Einzelbenutzermodus nicht funktionieren.

Wir können nun das native-install-Skript laufen lassen. Dies wird die Pakete konfigurieren und mehrere wichtige Übersetzer einrichten:

 
# ./native-install

Bevor sich das Skript beendet, wird es angeben, dass es ein zweites Mal laufen muss. Folgen Sie den Anweisungen und rebooten Sie mittels des reboot-Befehls. Gehen Sie wieder in den Einzelbenutzermodus und lassen Sie ./native-install laufen.

7. Konfiguration

7.1 Das Netz

Um das Netz zu konfigurieren muss der pfinet-Übersetzer konfiguriert werden. Dies geschieht über den settrans-Befehl, der einen Übersetzer an einen gegebenen Dateisystemknoten einhängt. Falls Programme auf den Knoten, beispielsweise durch Senden eines RPC, zugreifen, wird das Betriebssystem transparent den Server starten, um die Anfrage zu bearbeiten.

 
# settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a a.b.c.d -g e.f.g.h -m i.j.k.l

Hier werden settrans mehrere Optionen übergeben. Die ersten zwei, fg, erzwingen, dass existierende Übersetzer verschwinden. Die nächsten zwei, ap, erzeugen sowohl aktive als auch passive Übersetzer. Indem wir aktive Übersetzer erzeugen, sehen wir sofort jede Fehlermeldung auf stderr. Der letztere speichert den Übersetzer und die Befehle im Knoten, so dass er transparent neu gestartet werden kann (d.h. die Einstellungen bleiben persistent über Neustarts hinweg erhalten). Die Optionen werden vom Knoten, an den der Übersetzer angehängt werden soll, dann dem zu startenden Programm (d.h. dem Übersetzer) und jedem Argument, das Sie ihm übergeben, gefolgt. Die -i-Option ist die Schnittstelle, auf der pfinet horchen wird, -a ist die IP-Adresse, -g ist das Gateway und -m ist die Netzmaske.

Stellen Sie sicher, dass Sie Name-Server zu Ihrer /etc/resolv.conf-Datei hinzufügen:

 
  nameserver 192.168.1.1

Um diese Konfiguration zu testen: ping -c2 gateway. Das -c ist wichtig, um die Anzahl der pings zu begrenzen; erinnern Sie sich, dass CONTROL-C im Einzelbenutzermodus nicht funktioniert.

DHCP funktioniert noch nicht im Hurd. Dies ist in Beschränkungen von pfinet begründet: es basiert auf Linux TCP/IP-Code und kann nicht auf 0.0.0.0 lauschen.

Hilfe über settrans kann durch Übergabe der --help-Option erhalten werden. Hilfe über einen speziellen Übersetzer kann erhalten werden, indem er von der Befehlszeile mit dem gleichen Argument aufgerufen wird, z.B.:

 
# /hurd/pfinet --help

Da es viel an Ausgabe geben kann, überlegen Sie, diese durch ein seitenbasiertes Anzeige-Programm wie less zu leiten.

7.2 Andere Dateisysteme

Als nächstes editieren Sie /etc/fstab, um weitere Dateisysteme sowie Auslagerungs-Bereich (swap space) hinzuzufügen. Es ist sehr wichtig, dass ein Auslagerungsbereich verwendet wird; der Hurd wird um eine Größenordnung stabiler sein. Beachten Sie, dass sich der Hurd transparent eine Auslagerungspartition mit Linux teilen kann, aber in jedes Gerät auslagern kann, darunter in rohe Partitionen wie beispielsweise Ihre Home-Partition. Standardmäßig ist nano der einzige Editor, der in der Basisdistribution installiert ist.

Hier ist eine /etc/fstab-Datei als Beispiel:

 
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
/dev/hd2s1      /               ext2    rw         0       1
/dev/hd2s2      /home           ext2    rw         0       2
/dev/hd2s3      none            swap    sw         0       0

Denken Sie daran, jedes Gerät mit dem MAKEDEV-Befehl anzulegen:

 
 # cd /dev
 # ./MAKEDEV hd2s1 hd2s2 hd2s3

Um ein NFS-Dateisystem einzuhängen, wird der /hurd/nfs-Übersetzer verwendet. Falls er nicht als root läuft, wird er sich am Server mit einer Port-Nummer oberhalb von 1023 anmelden. Standardmäßig wird GNU/Linux dies ablehnen. Um GNU/Linux mitzuteilen, Verbindungen aus nicht-reservierten Ports zu akzeptieren, ergänzen Sie die insecure-Option zu der export-Zeile. Hier ist eine /etc/exports-Datei als Beispiel, die annimmt, dass die IP-Adresse des Clients 192.168.1.2 ist:

 
  /home  192.168.1.2(rw,insecure)

Um dies von einer GNU-Kiste einzuhängen und unter der Annahme, dass die IP-Adresse des NFS-Servers 192.168.1.1 ist:

 
# settrans -cgap /mount/point /hurd/nfs 192.168.1.1:/home

7.3 Neustart

Schließlich rebooten Sie in den Mehrbenutzermodus, d.h. auf die gleiche Art, wie der Einzelbenutzermodus hochgebracht wurde ohne die -s-Option beim Laden des Kernels. Für Details lesen Sie den Abschnitt 5 GNU/Hurd booten.

Lustiges Hacken!

8. Abschließende Worte

8.1 Das Grub-Menü

Immer den Kernel von Hand zu laden kann sehr ermüdend werden. Editieren Sie /boot/grub/menu.lst und passen Sie sie entsprechend an; das Booten wird viel schneller und leichter werden.

8.2 Geräte ergänzen

Standardmäßig sind nur einige Geräte im /dev-Verzeichnis angelegt. Benutzen Sie das MAKEDEV-Skript, um jedes benötigte Gerät anzulegen.

8.3 Weitere Pakete installieren

Es gibt mehrere Wege, um Pakete zu ergänzen. Herunterladen und dpkg -i funktioniert, ist aber sehr unbequem. Die einfachste Methode ist die Verwendung von apt-get. Editieren Sie /etc/apt/sources.list und ergänzen Sie einen der folgenden unveröffentlichten Einträge aus http://wiki.debian.org/DebianPorts/Mirrors:

 
deb http://ftp.debian-ports.org/debian unreleased main

http://ftp.debian-ports.org/ und seine Spiegel enthalten Pakete, die Korrekturen oder Patches enthalten, die noch nicht von den Originalautoren oder Debian integriert wurden.

Und den Unstable-Eintrag von einem der Debian-Spiegel (schauen Sie auf http://www.debian.org/mirror/list für die komplette Liste), der diese Architektur bedient:

 
deb http://ftp.de.debian.org/debian unstable main

Falls GNU Mach Ihre Netzwerk-Karte nicht erkennt oder Sie ein Modem verwenden, ist der einzige Weg, ein Upgrade durchzuführen, das Herunterladen der Pakete und die Übertragung in das GNU System. Der einfachste Weg hierzu ist die Verwendung von apt off-line. Lesen Sie /usr/share/doc/apt-doc/offline.text.gz für detaillierte Instruktionen.

8.4 Die Hurd-Konsole

Neben der Mach-Konsole, der Sie während der Installation begegnen, weist der GNU/Hurd eine mächtige Konsole mit virtuellen Terminals im Userspace auf. Derzeit müssen Sie die Konsole manuell mit dem folgenden Befehl starten:

 
 # console -d vga -d pc_mouse --repeat=mouse -d pc_kbd --repeat=kbd -d generic_speaker -c /dev/vcs

Innerhalb der Hurd-Konsole können Sie zwischen virtuellen Terminals via ALT+F1, ALT+F2 und so weiter wechseln. ALT+CTRL+BACKSPACE hängt die Hurd-Konsole ab und bringt Sie zurück zur Mach-Konsole, von der aus Sie sich wieder mit dem obigen Befehl zurückverbinden können.

8.5 X.Org

X.Org ist portiert worden und alle Grafikkarten, die es unterstützt und die kein Kernelmodul erfordern, sollten funktionieren.

Sie müssen in der Hurd-Konsole sein und Repeater aufgesetzt haben, wie dies in dem obigen Abschnitt 8.4 gezeigt ist. Da X.Org /dev/kbd als Gerät für Ihre Tastatur hartkodiert hat, müssen Sie einen Symlink erstellen:

 
 # cd /dev
 # ln -s cons/kbd kbd
 # ln -s cons/mouse mouse

Sie werden mehrere X-Pakete benötigen. x-window-system-core, rxvt und twm, fvwm oder wmaker sind ein guter Anfang.

Debconf kann zur Konfiguration von X.Org verwendet werden, allerdings hat er keine Hurd-Kenntnisse und die Konfigurationsdatei muss angepasst werden. Nach der Konfiguration ändern Sie den Pointer-Abschnitt in folgende Form:

 
Section "Pointer"
  Protocol "osmouse"
  Device "/dev/mouse"
EndSection

Emulate3Buttons und ZAxisMapping müssen beide deaktiviert sein.

Schließlich geben Sie startx ein.

Es gibt mehrere Warnungen, derer Sie sich bewusst sein müssen. update-menu ist noch nicht portiert worden. Daher gibt es keine schönen Debian-Menüs. Obwohl eine pthreads-Implementation existiert, sind noch nicht alle pthread-Pakete portiert: erwarten Sie nicht, dass Gnome und KDE funktionieren.