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.
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.
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 |
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.
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 |
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.
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.
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.
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 |
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!
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.
Standardmäßig sind nur einige Geräte im /dev
-Verzeichnis angelegt.
Benutzen Sie das MAKEDEV-Skript, um jedes benötigte Gerät anzulegen.
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.
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.
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.