Plan 9 für Anfänger

Petra Gremeyer und Axel-Tobias Schreiner, Fachbereich Mathematik-Informatik, Universität Osnabrück

Als Mitglied einer Universität haben Sie zwar ``die'' CD, aber keine SPARC-2 oder MIPS als File-Server, wie sie für die offizielle Installation verlangt werden? In dieser Sprechstunde lesen Sie, wie man Plan 9 ganz inoffiziell zum Laufen bringt -- wobei man allerdings einige Einschränkungen bezüglich der Sicherheit in Kauf nimmt. Die ersten Schritte mit einem radikal neuen Betriebssystem sind immer besonders schwer (und lehrreich), und das umso mehr, wenn man gerade dabei mogeln muß. Läuft Plan 9 noch nicht, sind Experimente zur Installation recht mühsam. Wir beschreiben deshalb mehrere Strategien, mit denen wir mit unüblicher Hardware doch zu lauffähigen Systemen gekommen sind. Es hilft übrigens, wenn Sie ein UNIX "-System" verwalten können.

Hardware-Anforderungen

Wir brauchen eine der CPU s, für die auf der CD ein Terminal-Kern geliefert wird: Die billigste ist wohl ein 80386 SX mit einem 80387 SX Gleitkomma-Prozessor oder etwas Größeres wie ein 80486. Diese Konfiguration werden wir im folgenden den Terminal-PC nennen. Er sollte 4 MB oder mehr Hauptspeicher haben, ein 31/2"-Laufwerk oder eine nicht- SCSI Platte, um das System zu laden, eine Drei-Knopf-Maus (z. B. von Logitech), eine VGA -Platine und einen beliebigen VGA -Monitor für das 81/2 Window System. Eine Ethernet-Platine (Western Digital 8003, 3Com 503 etc., siehe sys/src/9/pc/ether*.c auf der CD) erleichtert das Einrichten eines stand-alone PCs und ist unabdingbar, wenn der PC als Plan 9 Terminal für einen Plan 9 File-Server fungieren soll.

Ein einfaches schwarz-weißes SPARC -System wie ELC oder ILC (mit mindestens 8 MB) funktioniert auch. Bei (68040 25 MHz) NeXT-Stations und Cubes waren wir bisher noch nicht erfolgreich.

Um die CD (einmal) zu lesen, verwendet man ein beliebiges UNIX "-System," das das ISO 9660 Dateisystem auf der CD lesen kann und über Ethernet und TCP/IP angeschlossen ist. Eine recht günstige Lösung ist auch ein DOS CD-Laufwerk in Kombination mit dem oben genannten Terminal-PC; von dort kann man per FTP die CD zu einem UNIX -System kopieren.

Nun müssen wir entscheiden, ob wir einen stand-alone Plan 9 oder eine Kombination aus File-Server und Plan 9 Terminal haben möchten. Der Terminal-PC ist als stand-alone Plan 9 geeignet, wenn er genügend Platz auf der Platte hat -- 120 MB für Experimente, mindestens 300 MB für das ganze System. Dann kann die Ethernet-Platine nach der Installation entfernt werden. Mit SCSI -Platten hatten wir bisher keinen Erfolg, aber Standard-Platten scheinen gut zu funktionieren.

Vorzuziehen ist jedoch eine Kombination aus File-Server und Plan 9 Terminal, denn dann kann man mit mehreren Architekturen experimentieren. Ein stand-alone Plan 9 könnte als File-Server fungieren, der PC wird aber wahrscheinlich überfordert sein. Hat man keine SPARC -2 oder MIPS als dedizierten Plan 9 File-Server, ist die beste Lösung wohl ein UNIX "-System," das über Ethernet und TCP/IP angeschlossen ist und Platz für die CD (mind. 300 MB) und die Plan 9 Benutzer hat.

Im folgenden beschreiben wir, wie man unter UNIX "" einen File-Server für Plan 9 aufbaut und damit ein Plan 9 Terminal in Betrieb nimmt. Anschließend erklären wir, wie man einen stand-alone Plan 9 auf einem PC einrichtet.

Die CD

Früher oder später muß die CD in ein schreibbares Dateisystem kopiert werden. Die offizielle Installation führt vor, wie man ein Plan 9 Terminal, also zum Beispiel eine einfache SPARC , mit der CD als Wurzel startet und von dort die CD auf einen Plan 9 File-Server kopiert. Dieser Weg ist auch gangbar, indem man ein UNIX -System wie unten beschrieben als (leeren) Plan 9 File-Server einrichtet und dann die CD unter Plan 9 vom Terminal zum File-Server kopiert.

Wir gehen aber davon aus, daß die nötige Hardware nicht zur Verfügung steht, und daß wir statt dessen ein UNIX "-System" verwenden. Dort muß man die CD komplett in ein Dateisystem kopieren und mit Kommandos wie etwa

# cd /CD && find * -print |
> sort >/tmp/cd
# cd /P9 && find * -print |
> sort >/tmp/p9
# comm -23 /tmp/cd /tmp/p9

grob kontrollieren, daß alle Dateien der CD (montiert auf /CD) in der Kopie (montiert auf /P9) vorhanden sind. Die Ausgabe zeigt die fehlenden Dateien -- sie sollte leer sein. Wir kopierten mit SPARC und NeXT; einige Kataloge, insbesondere im Manual-Bereich, fehlten total, und bei einigen Dateien war der Inhalt verschwunden.

ISO 9660 limitiert die Dateinamen, und Plan 9 ergötzt sich an Namen wie 81/2 oder a:, die DOS und sogar UNIX "" Probleme bereiten. Auf der CD sind problematische Dateinamen deshalb ersetzt worden. Bei Installation eines Plan 9 File-Servers auf UNIX "-Basis" müssen die Namen früher oder später korrigiert werden -- dasselbe gilt, wenn Sie sich nur einen Überblick über den Dateibaum verschaffen wollen.

In der Datei /P9/_conform.map stehen Pfad-Komponenten wie F000026 und die zugehörigen Plan 9 Namen. Die meisten Namen kann man leicht umwandeln:

# cd /P9
# find * -print | sort |
> awk -f fix _conform.map - |
> sh

NF == 1 {    # von find | sort (circa 13000)
    n = split($0, orig, "/")
    if ((last = map[orig[n]]) != "")
    {   new = ""
        for (i = 1; i < n; i ++)
        {   comp = map[orig[i]]
            new = new (comp != "" ? comp : orig[i]) "/"
        }
        print "mv " new orig[n] " " new last
    }
    next
}
NF == 2 {    # von _conform.map (circa 3000)
    map[$1] = $2
    next
}
{   print "cannot happen" | "cat >&2"
    exit 1
}

Abbildung 1: awk-Programm ``fix'' repariert die CD-Dateinamen

Abbildung 1 zeigt ein awk-Programm fix, das /P9/_conform.map in einen Vektor speichert, Pfad-Namen liest, deren Komponenten gegebenenfalls durch die Vektor-Einträge ersetzt und die nötigen mv-Befehle generiert, um die Namen zu korrigieren. sort gibt die Kataloge vor deren Inhalt aus und reicht die ganze Liste an awk weiter, wenn find abgelaufen ist. Deshalb muß eine Datei oder ein Katalog nur dann umbenannt werden, wenn die letzte Komponente des Pfads berichtigt werden muß -- die anderen Komponenten sind schon vorher angepaßt worden.

Unser einziges Problem war 81/2, aber das kann gelöst werden, sobald Plan 9 den File-Server benutzt. UNIX "" als Plan 9 File-Server

Es gibt ein Programm u9fs, das als File-Server einen UNIX "-Dateibaum" für Plan 9 zur Verfügung stellt. Die Quellen liegen auf der CD in sys/src/cmd/unix/u9fs. Nach ein paar lokalen Anpassungen sollte make auf der UNIX "-Anlage" dieses Programm erfolgreich übersetzen. In der Datei u9fs.c kann man

#define DBG(f) f

setzen, um eine Ablaufverfolgung zu aktivieren. Das sollte später wieder entfernt werden, wenn der Server korrekt arbeitet.

u9fs liest 9P Messages aus File-Deskriptor 0 und schreibt die Antworten auf File-Deskriptor 1. Fehler und die Ablaufverfolgung werden in die Datei geschrieben, die als stderr in main() von u9fs.c gesetzt wird. Diese Datei ist normalerweise /tmp/u9fs.log.

u9fs muß mit dem Internet Dämon inetd gestartet werden, der (wenigstens auf SUN - und NeXT-Systemen) durch die Datei /etc/inetd.conf kontrolliert wird. Dabei wird zum einen ein Service-Name wie u9fs mit dem Port 564 verbunden, den Plan 9 auf dem UNIX "-System" anrufen wird, und zum anderen wird inetd darüber informiert, daß für diesen Service eingehende Anrufe mit obigem File-Server-Programm verbunden werden. Die Name/Port-Verbindung wird in der Datei /etc/services eingeführt:

u9fs   564/tcp

Diese Datei wird als NIS map (yellow pages) oder über NetInfo (auf dem NeXT) zur Verfügung gestellt, so daß man entweder /etc/services auf dem NIS Master Server edieren und die Information per make in /var/yp verteilen oder den NetInfoManager benutzen muß. Seien Sie mutig, oder fragen Sie Ihren Systemverwalter.

Ist die Name/Port-Verbindung definiert, erweitert man /etc/inetd.conf

# Service Protokoll    User Pfad                           argv0 argv1
u9fs stream tcp nowait root /P9/sys/src/cmd/unix/u9fs/u9fs u9fs  /P9

Abbildung 2: Eintrag für ``u9fs'' in ``inetd.conf''

um die in Abbildung 2 gezeigten Zeilen, damit der Dämon den Port 564 bewacht und u9fs wie gewünscht startet. Wir informieren inetd über die neue Konfiguration, indem wir seine Prozeßnummer mit ps ax ermitteln und ihm dann mit kill -1 prozeßnummer ein hangup-Signal schicken. netstat -a zeigt nun an, daß der Port 564 oder u9fs überwacht wird. (Die entsprechenden Beschwörungsformeln für System V kennen wir leider nicht.)

Das Argument /P9 am Ende der Konfigurationszeile in Abbildung 2 veranlaßt u9fs, die Wurzel mittels chroot() in den vorher vorbereiteten Dateibaum zu verlagern. Zu Beginn einer Sitzung sendet das Plan 9 Terminal seinen Login-Namen an den Server u9fs, der mit getpwent() die Paßwort-Datenbank des Hosts holt und die Zugangs-Berechtigung prüft. Abhängig davon, wie das UNIX "-System" Logins überprüft -- es kann auch NIS oder NetInfo benutzen -- wird es notwendig sein, /P9/etc/passwd und /P9/etc/group als Dummy- oder sogar als Paßwort-Dateien zu erstellen. Verfolgen Sie den Ablauf, indem Sie die oben erwähnte Datei /tmp/u9fs.log mit Kommandos wie sniff oder tail -f betrachten. Wird der Login-Name (zum Beispiel none) zurückgewiesen, suchen Sie die Ursache in der Funktion getpwdf() in u9fs.c.

Das Plan 9 Terminal

Wenn der Internet-Dämon für u9fs auf Anfragen wartet, kann man ein Plan 9 Terminal starten und mit u9fs den Baum /P9 auf der UNIX "-Anlage" als Wurzel-Dateisystem benutzen. Wir hatten sowohl mit einer SPARC als auch mit einem PC Erfolg. Ein NeXT sollte eigentlich auch funktionieren, aber bisher tat uns keiner den Gefallen.

Eine SPARC lädt man am besten vom Netz. Ist die SPARC diskless, genügt es, /P9/sparc/9ss auf dem Boot-Server im Netz in den Katalog /tftpboot zu kopieren und dann folgendes anzugeben:

> b net 9ss

Startet die SPARC von ihrer eigenen Platte, plaziert man den Plan 9 Kern in ihren Wurzelkatalog und startet mit

> b 9ss

Ein PC als Terminal benötigt ein Programm namens b.com und einen Kern namens 9dos. Beides findet sich auf der DOS -Floppy, die zusammen mit der CD ausgeliefert wird, oder im Katalog 386 auf der CD. Wenn Ihr PC keine SCSI -Schnittstelle für seine Festplatte verwendet, können beide Dateien in den DOS -Wurzelkatalog auf der Festplatte gebracht werden. Alternativ kann man das 31/2" Floppy-Laufwerk verwenden. In beiden Fällen ruft man b.com von DOS aus auf und wird dann gefragt, von wo aus man laden möchte. Die magischen Worte sind #fd!0!9dos, um den Kern von der Floppy zu bekommen, bzw. #hd!0!9dos, um von der DOS -Wurzel auf der Festplatte zu laden. 0 muß gegebenenfalls durch eine andere Ziffer ersetzt werden, wenn mehrere Laufwerke vorhanden sind.

Jedes Plan 9 Terminal fragt dann, woher das Wurzel-Dateisystem kommen soll. Geben Sie tcp!1.2.3.4 ein, wobei die Nummern die Internet-Adresse des UNIX "-Systems" sind, auf dem u9fs wartet. Anschließend müssen Sie die eigene Internet-Adresse des Terminals, die Netzmaske und einen Gateway so angeben, daß u9fs Ihr Terminal finden kann.

Die nächste Eingabe betrifft den Benutzernamen für Plan 9 und für UNIX "" innerhalb von u9fs. Auf der CD ist der Benutzer tor eingetragen, aber man kann auch einen fast leeren Baum für einen Benutzer wie axel in /P9 auf der UNIX "-Seite" eintragen:

# cd /P9/usr
# mkdir axel axel/lib axel/tmp
# cd axel/lib
# echo '#!/bin/rc' >profile

Vergewissern Sie sich, daß sich axel auf dem UNIX "-System" anmelden kann und daß ihm die angelegten Dateien gehören. Geben Sie am Terminal ein leeres Paßwort ein und beobachten Sie, was passiert, sowohl am Terminal als auch in /tmp/u9fs.log auf dem UNIX "-System." Plan 9 sollte laufen, zumindest ein Stück weit!

Der Start von Plan 9

Setzt sich Plan 9 auf dem Terminal überhaupt in Bewegung, können wir ihm durch Verändern einiger Dateien auf der UNIX "-Seite" die Arbeit deutlich erleichtern. Die erste interessante Datei ist /P9/lib/namespace; sie wird vom init-Prozeß interpretiert, um den Teil des Namensraums einzurichten, der unmittelbar auf dem Kern selbst aufbaut. Werfen Sie einen Blick in das Kapitel drei des Manuals -- abgesehen von Datakit und seriellen Schnittstellen benötigen wir letztlich alles, was angegeben ist. Die letzten Zeilen etablieren einen Benutzer und die Verantwortung für /tmp und könnten modifiziert werden.

Die nächsten beiden Dateien sind /P9/rc/lib/rcmain und /P9/rc/bin/termrc. Die erste sollte man besser unverändert lassen, denn sie sorgt dafür, daß die Plan 9 Shell rc korrekt funktioniert. Die zweite kann für die ersten Experimente stark ausgedünnt werden. Kopieren Sie sie nach termrc-orig, und vereinfachen Sie termrc

#!/bin/rc
flag x +                                # Ablaufverfolgung

ndb/cs                                  # setzt sysname
sysname=`{cat /dev/sysname}

switch ($cputype) {
        case 386                        # fuer den PC
                bind -b '#w' /dev       # Festplatte (mit DOS)
                bind -a '#f' /dev       # Floppy
                bind -a '#t' /dev       # serial line (Maus)

                /fs             # Dateisystem des Kerns (DOS, non-SCSI)
                mount -c /srv/dos /n/c: /dev/hd0disk

                font=/lib/font/bit/pelm/euro.8.font

                # aux/mouse 0
                # aux/vga generic/640x480x1
}

Abbildung 3: Eine einfache Version von ``rc/bin/termrc''

wie in Abbildung 3 angegeben. Das kann natürlich auf der UNIX "-Seite" geschehen, zum Abgewöhnen nochmals mit vi...

Anfänglich ist es klug, in termrc so wenig wie möglich zu tun, um die Ausgaben am Bildschirm beobachten zu können. Insbesondere sollte man auf einem PC nicht schon jetzt in den VGA -Modus umschalten und 81/2 starten, denn dann verschwinden alle Ausgaben vom Schirm!

Wir sollten frühzeitig Vorkehrungen zum Swappen treffen, um spätere Fallen zu vermeiden. Wenn das Terminal keine lokale Platte hat oder wenn Sie ein versehentliches Löschen der Platte nicht riskieren möchten, führen Sie

swap /tmp

aus. Das ist zwar langsam, aber es funktioniert. Dabei bleibt jeweils eine Datei in /tmp übrig. Wenn der stand-alone PC zumindest teilweise installiert ist, ist

swap /dev/hd0swap

eine wesentlich bessere Lösung. Das swap-Kommando kann am Terminal von Hand ausgeführt oder in termrc eingefügt werden.

Die letzte Datei, die Sie anschauen sollten, ist /P9/usr/axel/lib/profile (wer auch immer bei Ihnen axel ist). Diese Datei wird beim Start von rc für den Benutzer axel ausgeführt und sollte alles enthalten, was dieser Benutzer speziell benötigt, wogegen /P9/rc/bin/termrc das Terminal allgemein einrichten sollte. profile ist der richtige Platz, um eigene Kommandos und Programm-Kataloge und den privaten tmp-Katalog zu binden und 81/2 mit ein paar Fenstern zu starten, die dann in der Datei windows angelegt werden. Anregungen finden Sie in Brian Kernighans ReadMe-Artikel.

Einrichten eines stand-alone PC

Wenn Sie wirklich den steinigen Weg ohne jegliche UNIX -Unterstützung gehen müssen, dann sollten Sie ganz schnell lernen, mit Plan 9 umzugehen. In einem Artikel Configuring a PC hat Dave Presotto zwar aufgeschrieben, wie man eine leere Plan 9 Partition in einem PC einrichtet, aber damit haben wir erst halb gewonnen. 9dos erwartet DOS als Wurzel-Dateisystem, und man muß sich etwas Pfiffiges überlegen, um schnell vollständig zu Plan 9 überzuwechseln, denn sonst hat man ständig Probleme mit den Einschränkungen, die das DOS -Dateisystem aufzwingt.

Der Systemstart beginnt immer mit dem Aufruf von b.com unter DOS . Möchte man keine Boot-Floppy verwenden, die nur den DOS -Kern, command.com, b.com und 9dos enthält, dann braucht man eine (möglicherweise sehr kleine) DOS -Partition auf der Festplatte, die wenigstens diese Dateien enthält.

Für einen stand-alone PC sollten Sie Plan 9 möglichst viel von Ihrer Festplatte überlassen. Beachten Sie, daß Plan 9 den letzten 512-Byte-Sektor der Platte dazu verwendet, seine eigenen Partitionen zu beschreiben. Den Rest der Platte können Sie mehr oder weniger nach Gutdünken einteilen, aber der letzte Sektor gehört auf jeden Fall Plan 9.

Räumen Sie Ihren PC auf, das heißt, ziehen Sie einen backup oder werfen Sie alles weg, und installieren Sie eine kleine DOS -Partition am Anfang der Platte mit fdisk und format unter DOS . Der folgende Baum ist ungefähr das Minimum:

[DOS kernel]
autoexec.bat
command.com
dos\chkdsk.exe
dos\fdisk.exe
dos\format.com
dos\xcopy.exe

wobei folgendes in autoexec.bat steht:

path c:\dos
chkdsk /f

Kopieren Sie nicht(!) die ganze distribution-Floppy in die DOS -Partition -- sie enthält unangenehme Überraschungen. Erzeugen Sie die nötigen Kataloge mit md, und kopieren Sie mit copy genau die folgenden Dateien:

9dos
b.com
adm\timezone\local
386\init
386\bin\bind
386\bin\mount
386\bin\rc
386\bin\disk\kfs
386\bin\disk\kfscmd
lib\namespac
rc\bin\rcmain
rc\lib\termrc
srv\
tmp\

Abschließende Gegenschrägstriche kennzeichnen leere Kataloge.

Starten Sie DOS von dieser Partition, legen Sie die Plan 9 distribution-Floppy ein, und starten Sie Plan 9 von der DOS -Partition, wobei Sie die distribution-Floppy wie folgt als Wurzel angeben:

C> b
boot from[default==fd!0!9dos]:
hd!0!9dos
root is from:
local!#f/fd0disk
user[none]:

In Anlehnung an Dave Presottos Configuring a PC erzeugt man nun eine Plan 9 Partition mit disk/prep:

% disk/prep /dev/hd0
  ... siehe Artikel ...
% cp /9dos /dev/hd0boot
% disk/kfs -r

Die letzte Anweisung erzeugt ein leeres Plan 9 Dateisystem auf der Festplatte. Dorthin kopieren wir als nächstes einfach die gesamte distribution-Floppy:

% mount -bc /srv/kfs /tmp

disk/kfs ist ein File-Server, der seine Verbindung in /srv/kfs hinterlegt. mount macht das Dateisystem im Namensraum als /tmp schreibbar zugänglich. Das Dateisystem ist leer, deshalb legen wir einige Kataloge an:

% cd /tmp
% mkdir bin n n/a: n/c: n/ftp
% mkdir tmp

Wir müssen leider disk/mkfs und disk/mkext verwenden, um die ganze distribution-Floppy zu kopieren. Dazu benötigen wir eine Prototyp-Datei:

% ed proto
a
386
        +
adm
        +
lib
        +
mnt
        +
rc
        +
usr
        +
.
w
41
q
% disk/mkfs -aprv -s / \
        /tmp/proto |
        disk/mkext -d /tmp

Für die Prototyp-Kataloginhalte ist ein tab und ein Plus angegeben.

Der Prototyp ist deshalb so kompliziert, weil wir aus dem Namensraum von / nur einen Teil kopieren dürfen. Einfacher geht es, wenn wir das Wurzel-Dateisystem, also die distribution-Floppy, explizit montieren und komplett kopieren:

% mount /srv/boot /n/a:
% echo '+' >/tmp/proto
% disk/mkfs -aprv -s /n/a: \
        /tmp/proto |
        disk/mkext -d /tmp

Als nächstes müssen wir unter Plan 9 mit ed (oder besser noch, 81/2 und sam) die namespace- und termrc-Dateien editieren, um beim nächsten Start die DOS -Partition als minimale Wurzel möglichst weitgehend mit dem Plan 9 Dateisystem zu überdecken. DOS edit kann hier natürlich nicht verwendet werden, denn Plan 9 ist über die vor den newlines eingefügten carriage returns nicht allzu glücklich.

Sollten Sie einen Fehler machen, können Sie jederzeit DOS neu starten, indem Sie control-T, control-T, r eingeben. b.com findet jetzt die Plan 9 Partition und lädt den Kern von dort. Machen Sie weiter, wenn Sie die distribution-Floppy als Wurzel eingelegt haben:

C> b
root is from:
local!#f/fd0disk
user[none]:

Falls nötig, können Sie das Plan 9 Dateisystem auf der Festplatte wieder als /tmp montieren:

% disk/kfs
% mount -bc /srv/kfs /tmp

Diesmal entfällt die Option -r, bei der der Server das Dateisystem leer anlegt.

1   #!/bin/rc
2   flag x +
3   bind -b '#w' /dev
4   bind -a '#f' /dev
5   bind -a '#t' /dev
6   disk/kfs
7   disk/kfscmd allow
8   mount -bc /srv/kfs /
9   /386/bin/bind -bc /386/bin /bin
10  bind -bc /rc/bin /bin
11  /fs
12  mount -c /srv/dos /n/c: /dev/hd0disk
13  ndb/cs
14  aux/mouse 0
15  if (test -d /lib/vga) aux/vga generic/640x480x1
16  if not aux/vga -t generic 640 480 1
17  cd /usr/$user
18  bind -bc tmp /tmp

Abbildung 4: ``rc/bin/termrc'' für einen stand-alone PC

Abbildung 4 zeigt, was wir unter Plan 9 in die Datei /n/c:/rc/bin/termrc, also in termrc in der DOS -Partition, schreiben müssen. Zeile (1) steht am Anfang aller rc-Skripte. flag ist eine Anweisung an rc, um die Ablaufverfolgung einzuschalten (2). namespac sollte von Hardware-Abhängigkeiten freigehalten werden, deshalb binden wir die Festplatte (3), die Floppy (4) und die seriellen Leitungen für die Maus (5) erst in termrc in den Namensraum unter /dev.

Noch befinden wir uns auf der DOS -Partition als Wurzel. Jetzt starten wir den Server für das Plan 9 Dateisystem (6) und reduzieren den Zugriffsschutz, damit auch Dateien ohne x-Bit ausgeführt werden können (7). Dieses Bit wurde beim Kopieren von der distribution-Floppy grundsätzlich gelöscht. Später können wir mit chmod dieses Bit für init und die Kommandos in bin wieder setzen und diese Zeile aus termrc entfernen.

Mit mount verdecken wir nun die gesamte DOS -Wurzel durch das Plan 9 Dateisystem (8). Anschließend müssen wir natürlich sofort /bin wiederherstellen (9-10).

Die restlichen Zeilen können auch entfallen. Zugriff auf die DOS -Partition richtet man mit (11-12) ein. /fs startet den File-Server im Kern, der seine Verbindung in /srv/dos hinterlegt. Die mount-Anweisung stellt die DOS -Partition im Namensraum unter /n/c: zur Verfügung -- deshalb wird termrc im Moment auch dort editiert.

ndb/cs ist der Connection-Server, der Internet-Adressen übersetzt (13). Er ist nötig, wenn man Verbindungen zu anderen Systemen aufbauen will.

Hat der PC Maus und VGA -Schirm, so können diese mit (14-16) zur Verfügung gestellt werden. (14) geht davon aus, daß die Maus an COM 0 hängt. aux/vga von der distribution-Floppy greift mit der Option -t auf eine kleine Datei /lib/vgadb mit Beschreibungen verschiedener Kombinationen aus VGA -Karte und Monitor zu. Die CD enthält einen Baum mit VGA -Beschreibungen, auf den /386/bin/aux/vga von der CD ohne Option zugreift. Wenn wir in termrc efolgreich in den VGA -Modus umschalten, wird die bisherige Ablaufverfolgung am Schirm gelöscht.

Die Kataloge für den Benutzer, den Sie beim Booten verwendet haben, können in namespac oder hier in termrc etabliert werden (17). Es empfiehlt sich, jedem Benutzer seinen eigenen /tmp-Katalog zu geben (18). 81/2 wird am besten im lib/profile des Benutzers gestartet.

Die zweite Datei, die für den Start des stand-alone PCs wichtig ist, ist /n/c:/lib/namespac. Damit initialisiert der init-Prozeß den Namensraum. Diese Datei wird interpretiert und darf nur Kommentare, cd-, bind- und mount-Kommandos enthalten, Zitieren ist nicht möglich, siehe namespace(6). Diese Datei kann wahrscheinlich unverändert bleiben.

Das war's! Beenden Sie Plan 9 (mit zwei control-T und einem r) und vergewissern Sie sich, daß die Plan 9 distribution-Floppy aus dem Laufwerk entfernt ist, bevor der PC damit zu starten versucht. Wenn DOS wieder läuft, genügt

C> b
root is from:
local!#w/hd0disk
user[none]:

Nun müßten Sie zuschauen können, wie Plan 9 auf Ihrem stand-alone PC startet.

Laden eines stand-alone PC

Jetzt haben wir eine Plan 9 distribution-Floppy auf der Festplatte, die als Wurzel vor die DOS -Partition gebunden ist. Neue Dateien werden im Plan 9 Dateisystem angelegt. Nun müssen wir so viele Dateien wie möglich von der CD kopieren.

Hat man nur den einen PC, der auch für Plan 9 benutzt wird, sollte man unter DOS die CD teilweise in die DOS -Partition kopieren, Plan 9 starten und von der DOS -Partition in das Plan 9 Dateisystem kopieren. Das ist harte Arbeit. Unter Plan 9 macht man etwa folgendes:

% echo '+' >/tmp/proto
% disk/mkfs -aprv \
        -s /n/c:/somedir \
        /tmp/proto |
        disk/mkext -d /new

Wir verwenden wieder disk/mkfs und disk/mkext zum Transport. + als Prototyp sorgt dafür, daß ein kompletter Unterbaum kopiert wird. disk/mkfs holt den Unterbaum aus einem Katalog somedir in der DOS -Partition /n/c:, die in Zeile 12 in Abbildung 4 montiert worden ist. Das Archiv wird per Pipeline an disk/mkext weitergegeben, um irgendwo anders ausgepackt zu werden. Wir kopieren also den Baum somedir von seiner Position in /n/c: an eine neue Stelle /new.

Mit genügend Geduld kann man die CD auf diese Weise in das Plan 9 Dateisystem auf der Festplatte kopieren. Es geht schneller, wenn man ein kompaktierendes tar für DOS von GNU verwendet. Offensichtlich ist 386/bin/tar das erste Programm, das man dann kopiert.

Ein weitaus besserer Ansatz ist ein zweites System als FTP -Host, in Verbindung mit dem ftpfs File-Server unter Plan 9. Der FTP -Host sollte eine Kopie der CD haben -- wir nehmen wieder an, daß diese in /P9 liegt. Von Plan 9 aus kommen Sie folgendermaßen zum FTP -Host:

% ip/ipconfig 9.8.7.6
% ndb/cs # hier oder in termrc
% ftpfs -/ 1.2.3.4
220 server ready
User: axel
331 Password required for axel.
Password:
230 User axel logged in.

Bei ip/ipconfig geben Sie die Internet-Adresse des stand-alone PCs an, auf dem Plan 9 läuft. Mit der Option -m kann eine Netzmaske definiert werden, die sicherstellt, daß Sie den FTP -Host erreichen. Bei ftpfs geben Sie die Internet-Adresse des Hosts an. Wenn wir dann am Host angemeldet sind, montiert ftpfs den Wurzelkatalog des Hosts als Baum nach /n/ftp, und wir können kopieren:

% cp /n/ftp/P9/386/bin/tar \
        /386/bin/tar
% cp /n/ftp/P9/386/bin/chmod \
        /386/bin/chmod

Nach dem Kopieren von 386/bin/tar kann man auf der FTP -Seite tar-Dateien erstellen und diese unter Plan 9 auspacken. Wenn ein UNIX "-System" FTP -Host ist, kann man alles unter Plan 9 abwickeln:

% telnet 1.2.3.4
$ cd /P9
$ tar cf xx.tar somedir
$ exit
% cd / && tar xf /n/ftp/xx.tar

Das wird eine Weile dauern und einigen Platz beanspruchen, denn ftpfs kopiert zuerst die gesamte Datei vom Host in eine Datei in /tmp unter Plan 9 und macht die Datei dann von dort aus zugänglich. ftpfs sollte durch das kill-Skript in /n/ftp/P9/rc/bin sauber beendet werden, andernfalls können sich eine Menge Dateien in /tmp ansammeln.

Mit dem früher beschriebenen Plan 9 File-Server auf UNIX "-Basis" kann der stand-alone PC sehr viel einfacher geladen werden. Booten Sie dazu den PC mit dem File-Server als Wurzel:

C> b
root is from: tcp!1.2.3.4

Anschließend starten und montieren wir das Plan 9 Dateisystem der lokalen Platte als /n/kfs in den Namensraum und kopieren vom File-Server in das lokale Plan 9 Dateisystem:

% disk/kfs
% mkdir /n/kfs # falls noetig
% mount -c /srv/kfs /n/kfs
% { cd /386/bin; tar c . } | \
  { cd /n/kfs/386/bin; tar x }

Diesmal ist tar vorhanden -- die Wurzel stammt ja von der CD. Kopieren Sie so viel wie möglich, d. h. alles von /386, /adm, /lib, /sys etc.

Zum Abschluß sollten Sie einen Kern bauen, der auf dem stand-alone PC das Plan 9 Dateisystem direkt als Wurzel nimmt:

% cd /sys/src/9/pc
% mk 'CONF=pcdisk'

Damit wird der Kern 9pcdisk gebaut. Man kann sich die Konfigurations-Dateien anschauen, die am Anfang von mkfile aufgezählt sind, und eine davon für den Kern aussuchen, oder man macht sich eine eigene.

Kopieren Sie den Kern nach /dev/hd0boot, überprüfen Sie /n/kfs/lib/termrc und /n/kfs/lib/namespace, und starten Sie mit b in der DOS -Partition. Hat das geklappt, können alle Überreste von Plan 9 außer b.com aus der DOS -Partition gelöscht werden.

Die Quellen

In dieser unix/mail ist ein Übersichtsartikel zu Plan 9; am Schluß sind verschiedene Literaturhinweise aufgeführt. Unsere Arbeit beruht vor allem auf der offiziellen Installationsbeschreibung sowie auf Dave Presottos Artikel Configuring a PC, die beide mit dem System von Bell Labs ausgeliefert werden.

Diese Sprechstunde ist eine gekürzte und ins Deutsche übersetzte Fassung eines Reports, den wir in der Informatik-Reihe der Osnabrücker Schriften zur Mathematik (Heft 31, 1993) publiziert haben. Interessenten können den Report auch unter pub/hanser/um-93.4 auf dem Server ftp.informatik.uni-osnabrueck.de finden.