Dieses Dokument hat sich zum Ziel gesetzt, mit relativ wenigen Worten durch die Installation von GNU/Hurd zu leiten und dem Leser mit den wichtigsten Konfigurationsaufgaben vertraut zu machen.

Copyright © 2000, 2001, 2002, 2003 Neal H. Walfield <neal@cs.uml.edu>

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the sections entitled ``Copying'' and ``GNU General Public License'' are included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.

Installieren von Hurd
*********************

Dieses Dokument hat sich zum Ziel gesetzt, mit relativ wenigen Worten durch die Installation von GNU/Hurd zu leiten und dem Leser mit den wichtigsten Konfigurationsaufgaben vertraut zu machen.

Uebersicht
**********

Die Debian GNU Hurd Distribution hat, wie viele andere Distributionen, kein sehr komfortables oder gar ansehnliches Installationsprogramm. Eines Tages wird es aber, vielleicht mit Deiner Hilfe, so sein. Bis es so weit ist, benoetigen wir vorerst noch ein System, das wir als Sprungbrett nutzen und von dem aus wir GNU Hurd installieren. Speziell sind damit UNIX-artige Systeme gemeint (Philip Charles has created a set of CDs (available at http://www.debian.org/ports/hurd/hurd-cd) which contains a live Debian GNU/Linux system thereby arguably eliding this requirement, however, we maintain that this is functionally equivalent.).

Einige User konnten dies mit Hilfe von Linux- oder BSD-Systeme bewerkstelligen. Was das System lediglich koennen muss ist: ein ext2 Dateisystem erstellen; ein tar-Archiv auf dieses extrahieren; GNU GRUB installieren.

GNU Hurd ist aehnlich wie Unix-Systeme: nachdem der User sich angemeldet hat praesentiert sich eine Shell und das gelaeufige Unix-VFS (virtual filesystem). Obwohl GNU versucht ist, POSIX-Kompatibel zu sein, ist es kein Unix (GNU is Not Unix). Hurd baut auf viele Konzepte von Unix auf und erweitert diese um neue Funktionalitaeten oder beseitigt deren Fehler im Design. Die groesste Unterschied besteht wohl in den so genannten Translators, die es ermoeglichen, dass Programme direkt mit dem VFS interagieren. Diese Dateisysteme muessen weder im Kernel noch muessen sie mit root-Rechten laufen. Es reicht aus, wenn  diese Zugriff auf das Speichermedium, das mit dem Translator an dem Mount-Point verbunden wird und den eigentlichen Mount-Point hat.

Ein weiterer Unterschied besteht darin, dass Prozesse statt einer einzelnen bei der Erzeugung festgelegten User ID ein Identifizierungs-Token besitzen, welches unabhaengig vom Prozess ist. D.h. die Tokens koennen mit der entsprechenden Berechtigung von einer Authorisierungsstelle versehen oder entzogen werden.

Mit Unix-Systemen vertraut zu sein, ist hier sehr von Vorteil. Sich mit den verschiedenen Debian-Tools auszukennen, bringt ebenfalls Zusatzpunkte in der Konfiguration, der Pflege und Wartung der GNU Hurd-Box.

Ich bin bemueht, mit dieser Hilfe euch so schmerzlos wie nur moeglich durch die Installation zu begleiten. Sollten dennoch Fehler auftreten (die in vielen Faellen auf den Author zurueckzufuehren sind), meldet sie mir. Auch Anregungen oder Kritiken sind willkommen.

Partitionierung
***************

Wenn keine freien Partition(en) oder Festplatten zur Verfuegung stehen, wird dies der haerteste Weg. In diesem Fall benoetigt man Software, um die Festplatte zu repartitionieren. Eine von vielen Loesungen waere dort GNU's Partitions-Editor parted. Es unterstuetzt nicht nur einfachen Partitionieren. Auch Vergroessern, Verkleinern und Verschieben von Partitionen sind sein Element. Zu finden ist es unter http://www.gnu.org/software/parted.  Es ist dringligst auf die gelungene Dokumentation hinzuweisen die auch verschiedene Tutourials bietet.

Hurd kann nur mit Partitionen bis etwa 2Gb umgehen. Alles ueber diesen Wert wird nicht funktionieren. Das ist auf eine Entscheidung vor mehreren Jahren zurueckzufuehren, wo der Dateisystem-Server das ganze Filesystem im Speicher abbildete. Es ist geplant, dieses zu aendern.

Sagen wir mal so, 2Gb ist mehr als genug fuer ein laufendes System. Es besteht ja weiterhin noch die Moeglichkeit, mehrere Partitionen zu erstellen. Ein mal 2Gb fuer / und (beispielsweise) nochmals 2Gb fuer /home.

Hurd unterstuetzt einige Erweiterungen von ext2. Insbesondere sind passive Uebersetzer und ein viertes Rechte Tripel fuer unbekannte Nutzer (Nutzer ohne Identitaet -- nicht "others") zu nennen.

Um dieses zu nutzen, muss der Besitzer der Partiton hurd sein. mke2fs,

Um aber nun ein Dateisystem zu erstellen, das den Besitzer hurd traegt, fuehren wir mke2fs mit der Option -o hurd aus.

      # mke2fs -o hurd /dev/hda2

Der Boot Loader
***************

Anders als GNU/Linux oder BSD's hat Hurd keinen eigenen Boot Loader. Jeder Boot Loader, der den Multiboot-Standart beherrscht kann Hurd starten. Momentan ist das aber nur einer. Grub - GRand Unified Boot loader.

Grub ist im Gegensatz zu den Traditionellen Boot Loader auf x86 (LILO sei ein Bespiel) sehr maechtig. Er besitzt eine Befehlzeile, beherrscht bootp, hat ein dummy terminal und eine menge an weiteren Funktionen. Weiterhin kann er so gut wie Jedes System booten. Wenn du jemals eine Sparc oder Alpha gebootet hast, wirst Du bereits wissen, zu was Grub im stande ist. Deshalb, keine Angst: Grub ist besser. Du wirst ihn moegen, Dir keinen anderen mehr wuenschen.

Grub ist unter http://www.gnu.org/software/grub/ zu finden. Dort befindet sich ein Quellen-Archiv. Wenn man sich die Quellen herunter geladen hat, kommt der klassische Dreisatz configure, make und make install zum einsatz. Es ist nun Zeit, sich die Dokumentation von Grub durchzulesen. Alternativ kann auch ein Disketten-Image runtergelden werden, von dem dann gebootet wird. Dafuer muss das Image auf die Diskette geschrieben werden.

      # dd if=grub-boot-image of=/dev/fd0

Spaeter kann Grub auch auf der Festplatte installiert werden.

Cross Installation
******************

Als naechstes wird das Basissystem herruntergeldaen: ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/gnu-latest.tar.gz.

Das Tarball ist so konfiguriert, dass es alle benoetigten Dateien in die vorgesehenen Verzeichnisse entpackt. Zunaechst muss das Dateisystem gemountet werden. Davon ausgegangen, das das einzuhaengende Dateisystem sich auf /dev/hda2, der Punkt, an dem es eingehangen werden soll /gnu ist und sich das Archiv im Home-Verzeichnis befindet, geben wir folgende Befehle ein:

      # mount -t ext2 /dev/hda2 /gnu
      # cd /gnu
      # tar --same-owner -xvzpf ~/gnu-latest.tar.gz

Hurd booten
***********

Nun sind wir bereit, Hurd zum ersten mal booten. Nachdem Du Dich versichert hast, dass sich die Bootdiskette mit Grub an Bord im Laufwerk befindet, starten wir den Rechner neu. Wenn alles gut geht, befindest Du Dich nun auf der Kommandozeile von Grub. Wenn wiedererwarten ein Menu angezeigt werden sollte, druecke C um auf besagte zu gelangen.

Als erstes muss GNU Mach geladen werden. Dazu musst Du zunaechst wissen, auf welcher Partition und in welchem Verzeichniss sich der Mach-Kernel befindet. Grub nutzt dazu eine andere Methode um die Festplatte und die darauf befindlichen Partitionen anzusprechen, als wie es bei Linux oder Hurd der Fall ist. IDE und SCSI Laufwerke werden demnach mit (hdN,M) angesprochen (IDE und SCSI wird nicht unterschieden), wobei N fuer die Nummer der Festplatte (bei Null beginnend) und M fuer die Partitonsnummer (ebenfalls bei Null beginnend) steht. Es werden keine Unterschiede zwischen IDE und SCSI gemacht Grub hilft einem aber auch ein wenig.

Um eine bestimmte Datei zu finden, von der man den genauen Ort der Speicherung nicht kennt, hat Grub ei Kommando find Wenn man dieses zusammen mit einem Dateinamen aufruft durchsucht Grub alle Dateisysteme und gibt aus, wo er sie gefunden hat. Um nach der Datei /boot/gnumach.gz zu suchen gibt man folgendes ein:

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

Somit weiss man nun, dass sich /boot/gnumach.gz auf (hd0,1) befindet.

Bevor nun den Kernel geladen werden kann, muss noch eine weitere Option angeben werden, die fuer Hurd, nicht fuer Grub wichtig ist. Und zwar musst Du Hurd mitteilen, wo sich der Kernel befindet.

GNU Mach nummeriert die Festplatten bei 0 (Null) beginnend. IDE-Festplatten tragen den Prefix hd, wobei SCSI-Festplatten den Prefix sd tragen. Nummeriert werden in der reienfolgen, in der sie an dem Controller angeschlossen sind. Die Festplatte am Master-Port des Primaeren Controller wird mit hd0 und die Festplatte am Slave-Port mit hd3 angesprochen. Die Partitionen werden aehnlich wie unter BSD mit sM angesprochen. Die Partitonen werden bei 1 (Eins) beginnend hochgezaehlt.

Da Hurd noch nicht konfiguriert wurde, musst Du es im Single-User-Modus starten. Das geschieht, indem man Hurd -s als Boot-Option mit auf dem Weg gibt.

Davon ausgehend, dass sich Hurd auf der zweiten Partition der Festplatte am Master-Port des Primaeren IDE-Controllers (/dev/hda2) befindet, muss folgendes eingeben werden:

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

Als naechstes sorgt man dafuer, dass der root filesystem-Server und der exec-Server geladen wird. Das wird mit Grub's Moeglichkeit, Module zu laden, erreicht. Die Werte fuer ${var} werden von GNU Mach gefuellt. Da die Zeile fuer das ext2fs-Kommando doch etwas lang ist, hat man die Moeglichkeit, die Zeile mit einem Backslash zu trennen. Es ist dabei darauf zu achten, dass sich am Ende einer Zeile keine Leerzeichen hinter dem Backslash befindet. Weiterhin ist zwischen {var} und (var) zu unterscheiden (geschweifte und runde Klammern).

       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]

Keine Angst, wenn Hurd fertig eingerichtet ist, kannst Du Grub automatisieren und die Kommandos in der Konfigurationsdatei /boot/grub/menu.lst ablegen.

GNU Hurd kann nun gestartet werden:

     grub> boot

Nun lehn Dich zurueck und beobachte die Meldungen auf dem Bildschirm. Noch ein wichtiger Hinweis: GNU Mach hat einen Bug, bei dem der Kernel bei druecken einer Taste beim Bootvorgang haengen bleibt (Kernel-Panic).

Wenn Hurd nicht bootet, kann es an IRQ-Sharing liegen. GNU Mach beherrscht dieses nicht. Auch werden keine nachladbaren Kernel-Module unterstuetzt, woraufhin die meisten Treiber fuer Geraete in den Kernel kompiliert sind. Weiterhin koennen aeltere Geraete Probleme bereiten, wenn auf Anfragen von GNU Mach an nicht vorhandene Geraete fehlerhafte Antworten kommen. Um dies zu loesen muss ein eigener Mach-Kernel kompiliert werden, der nur die benoetigten Treiber enthaelt. Wenn Du Debian GNU/Linux Dein Eigen nennst, installiere das Packet gcc-i386-gnu.

Wenn weiterhin Probleme bestehen, schaue in den Links am Ende des Dokumentes vorbei. Wenn alle Stricke reissen, wird eine Anfrage an die zustaendige Mailingliste zur Loesung beitragen.

Vorkonfiguration
****************

Sobald man sich auf der Shell befindet, und jedesmal, wenn man im Single-User-Modus ist, muss der Terminal-Typ angeben werden.

      # export TERM=mach

Weiterhin wird Strg-C und dergleichen im Single-User-Modus nicht unterstuetzt.

Nun startet man das native-install Script, das die Packete und verschiedene wichtige Uebersetzer (Eng. Translator) konfiguriert:

      # ./native-install

Nachdem der erste durchlauf dieses Scriptes erfolgt ist, wird uns selbiges darauf hinweisen, dass es einen zweiten, finalen, Durchlauf benoetigt. Also startet man den Rechner mittels reboot neu und befolgt nochmals die Anweisungen aus Section '5. Hurd booten', um abermals das native-install Script auszufuehren.

Konfiguration
*************

Netzwerk
========

Um die Netzwerkkarte zu Konfigurieren, muss der pfinet-Uebersetzer konfiguriert werden. Dazu benutzt man settrans um einen Uebersetzer an einem Knoten auf dem Dateisystem anzuschliessen. Wenn nun ein Programm auf diesen Knoten zugreift, um beispielsweise ein ICMP/TCP/UDP-Packet zu senden, wird Hurd automatisch einen Server starten, um die Anfrage auszufuehren.

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

Erklaerung der Argumente: fg Beendet vorher gestartete Uebersetzer ap macht den Uebersetzer Aktiv und Passiv -i das Interface an dem pfinet lauschen soll -a die IP-Adresse -g der gateway -m die Netwerkmaske

Als Aktiv bezeichnet man einen Uebersetzer, wenn er sofort gestartet wird und er nach beendigung nicht mehr vorhanden ist, z.B. wenn der Rechner neu gestartet wird. Ein Passiver Uebersetzer hingegen speichert die Einstellungen im Dateisystem. Dadurch bleibt er auch erhalten, wenn der Rechner neu gestartet wird. Er wird erst wieder gestartet, wenn ein Prozess auf den zugewiesenen Knoten zugreift.

Nun werden unter /etc/resolv.conf die DNS-Server eingetragen:

       nameserver 145.253.2.11
       nameserver 145.253.2.74

Um nun zu testen, ob die Netzwerkkarte richtig eingerichtet ist, wird ping -c2 gateway eingegeben. -c2 veranlasst ping dazu, nur 2 ICMP-Packete abzusetzen, da Strg-C nicht greifen wuerde und man keine Moeglichkeit hat ping zu beenden.

DHCP wird unter Hurd bisweilen nicht Unterstuetzt. Das ist auf pfinet zurueckzufuehren, das auf den TCP/IP-Code von Linux zurueckgreift, und nicht in der Lage ist an 0.0.0.0 zu lauschen.

Um Hilfe fuer settrans zu erhalten, wird dem Programm --help als Argument gegeben. Auch die einzelnen Uebersetzer werden daraufhin eine kleine Uebersicht geben.

      # /hurd/pfinet --help

Die Ausgaben sollte man der laenge wegen durch eine less-Pipe schicken.

      # /hurd/pfinet --help |less

Dateisysteme
============

Nun widmet man sich der Datei /etc/fstab. Dort sind alle Partitionen einzutragen, die man unter Hurd nutzen will. Es ist sehr wichtig, das eine Swap-Partition eingebunden wird, da Hurd dadurch wesendlich stabiler laeuft. Hurd ist auch in der Lage mit GNU/Linux eine Swap-Partition zu teilen. Beachte die 2Gb-Grenze! Als Standart-Editor ist nano installiert.

Hier ein Bespiel einer /etc/fstab:

     # <file system> <mount point>   <type>  <options>  <dump>  <pass>
     /dev/hd0s2      /               ext2    rw         0       1
     /dev/hd0s3      /home           ext2    rw         0       2
     /dev/hd0s4      none            swap    sw         0       0

man sollte nicht vergessen, die noetigen Geraetedateien zu erstellen. Das geschieht mit MAKEDEV

      # cd /dev
      # ./MAKEDEV hd0s1 hd0s2 hd0s3

Um NFS-Dateisystem einzuhaengen, wird der /hurd/nfs-Uebersetzer genutzt. Wenn der Uebersetzer ohne root-Rechte gestartet wird, versucht er zu einen unprivilegierten Port auf den NFS-Server zu verbinden, was in den meisten Faellen von diesem zurueckgewiesen wird. Um dieses zu erlauben, muss auf dem NFS-Server in der Datei /etc/exports in den zustaendigen Zeilen insecure eingetragen werden.

       /home  192.168.0.10(rw,insecure)

Um dieses nun in Hurd einzubinden wird wieder settrans benoetigt:

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

Reboot
======

So, nun ist es endlich so weit, sich in den Multi-User-Modus zu befoerdern. Dazu gibt man zunaechst reboot auf der Kommandozeile ein, um danach Section 5. befolgend wieder zu booten. Diesmal wird das -s in der Kernel-Zeile weggelassen.

Happy Hacking!

Schlussworte
************

Dokumentation
=============

Um Informationen ueber Hurd zu erhalten, solltest Du Debians Hurd-Seite: http://www.debian.org/ports/hurd/ und GNU's site: http://hurd.gnu.org besuchen.

Das Grub Menu
=============

Um nicht fuer jeden Bootvorgang die Monsterzeilen fuer Grub einzugeben, ist es ratsam /boot/grub/menu.lst zu editieren.

Geraetedateien hinzufuegen
==========================

Es befinden sich nur wenige Geraetedateien in /dev. Nutze das MAKEDEV Script, um alle benoetigten zu erstellen.

Packete installieren
====================

Es gibt mehrere Moeglichkeiten Packete zu installieren. Ein Packet herunterzuladen und es mit dpkg -i zu installieren, ist recht unbequem. Die einfachere Variante ist da wohl apt-get. Dazu sind folgende Eintraege in die Datei /etc/apt/sources.list noetig:

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

Sollte GNU Mach die Netzwerkkarte nicht unterstuetzen oder wird ein Modem genutzt, bleibt nur die Moeglichkeit die Packete herunterzuladen und sie auf Hurd zu uebertragen. Unter /usr/share/doc/apt/offline gibt es weitere Informationen dazu.

XFree86
=======

XFree86 wurde Portiert und alle Grafikkarten, die keine Kernelmodule erfordern werden unterstuetzt.

Zunaechst konfiguriere den Keyboard-Uebersetzer:

      # cd /dev
      # ./MAKEDEV kbd

Danach den Maus-Uebersetzer. Fuer eine serielle Maussteht folgende Zeile, wobei --device=com0 mit den zutreffenden COM-Port ersetzt wird:

      # settrans /dev/mouse /hurd/mouse --device=com0 --protocol=microsoft

Es ist sicherzustellen, das /dev/com0 existiert. Wenn nicht, nutzt man MAKEDEV um dieses zu erstellen.

Eine PS/2 Maus benoetigt keine Geraetedatei. Es reicht folgende Zeile um zum gewuenschten Ergebnis zu gelangen:

      # settrans /dev/mouse /hurd/mouse --protocol=ps/2

Andere Maeuse werden auch unterstuetzt. Man startet /hurd/mouse mit der Option --help fuer mehr Details.

Es werden verschiedene Packete benoetigt. x-window-system-core, rxvt und twm oder fvwm sollten fuers erste reichen.

Debconf kann zum konfigurieren von XFree86 genutzt werden, was aber eine Nachbearbeitung der XF86Config bzw. der XF86Config-4 nach sich zieht. Die Section Pointer ist wie folgt zu aendern:

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

Optional kann Emulate3Buttons hinzugefuegt werden. Andere Optionen werden nicht funktionieren.

GNU Hurd nutzt keine ld.so.conf. Da /X11R6/lib sich nicht im Standart Suchpfad fuer die Bibliotheken befindet, ist folgender Eintrag in ~/.profile von noeten:

     export LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH

Nun fuehrt startx zum starten des X-Servers

Es sind noch einige Dinge zu beachten. xterm arbeitet nicht richtig, Nutze dafuer rxvt. update-menu wurde noch nicht Portiert. Somit gibt es kein sauberes Debian-Menu. Obwohl eine pthreads Implementation existiert, wurden noch nicht saemtliche Packete Portiert. GNOME und KDE werden somit noch nicht lauffaehig sein.

Virtuelle Terminals
===================

Es wird an Virtuelle Terminals unter Hurd gebastelt. Nutze bis dahin screen.

Mailing Lists
=============

 1. debian-hurd@debian.org  Debian's Hurd-ML

      1. Archiv: http://lists.debian.org/#debian-hurd

 2. web-hurd@gnu.org Entwicklung der Hurd-Seite http://hurd.gnu.org.

      1. Archiv: http://mail.gnu.org/pipermail/web-hurd/

 3. help-hurd@gnu.org  GNU's ML fuer Hilfe mit Hurd

      1. Archiv: http://mail.gnu.org/pipermail/help-hurd/

 4. bug-hurd@gnu.org Hier gehen Bug's und Patches hin.

      1. Archiv: http://mail.gnu.org/pipermail/bug-hurd/

Weitere Quellen
===============

The Hurd Wiki, http://hurd.gnufans.org/bin/view/Hurd/WebHome Deutsche FAQ, http://www.gnu.org/software/hurd/faq.de.html Gut sortierte Linkliste, http://debian.fmi.uni-sofia.bg/~ogi/hurd/links/

Zitierte Werke
**************

``The Easy Guide to Installing Hurd on a Linux Box'' Copyright © 1999 Matthew Vernon matthew@debian.org. http://www.pick.ucam.org/~mcv21/hurd.html