Ueber Minix - Von Martin Ebnöther Geschichte Minix wurde 1989 von Andrew S. Tanenbaum geschrieben. Tanenbaum ist Professor für Mathematik und Computerwissenschaften an der Vrije Universiteit in Amsterdam, wo er unter Anderem Networking und Betriebssystemdesign unterrichtet. Es ist entweder über Internet downloadbar oder zusammen mit dem Buch "Operating Systems: Design and Implementation" von Andrew S. Tanenbaum und Albert S. Woodhull, erschienen bei Prentice-Hall erhältlich. Seit einigen Monaten ist Minix unter die BSD-Lizenz gestellt worden und damit freie Software. Minix war gedacht, als praktisches Beispiel zu dienen, wie ein Betriebssystem programmiert wird. Es ist ein Unix-Clone und wurde von Tanenbaum von Grund auf selbst geschrieben, benutzt also keinerlei Code von AT&T. Es ist Multitasking und Multiuserfähig, wie es sich für ein Unix-System gehört. Ausserdem richtet es sich nach dem POSIX-Standard. Tanenbaum wurde zwar von hunderten Leuten mit Patches und Erweiterungen zu Minix bombardiert, aber da er kein grosses Betriebssystem sondern ein kleines, überschaubares System zum Lernen wollte, wurden eigentlich so gut wie alle zurückgewiesen. So erstaunt es nicht, dass Linus Torvalds mit Linux die ganzen willigen Leute auf seine Seite zog, was Tanenbaum wohl dazu veranlasste, die Mail zu schreiben, welche den grossen Flamewar zwischen Torvalds und Tanenbaum auslöste. Inzwischen sind die alten Streitereien längst beigelegt. Tanenbaum zu Linux in seiner persönlichen FAQ: What do you think of Linux? I would like to take this opportunity to thank Linus for producing it. Before there was Linux there was MINIX, which had a 40,000-person newsgroup, most of whom were sending me email every day. I was going crazy with the endless stream of new features people were sending me. I kept refusing them all because I wanted to keep MINIX small enough for my students to understand in one semester. My consistent refusal to add all these new features is what inspired Linus to write Linux. Both of us are now happy with the results. The only person who is perhaps not so happy is Bill Gates. I think this is a good thing. Uebersetzung: Was denken Sie von Linux? Ich möchte diese Gelegenheit nutzen, um Linus Torvalds dafür zu danken, dass er es geschrieben hat. Vor Linux war MINIX mit seiner 40'000 Leuten in der Newsgroup, von denen mir die meisten täglich E-Mails geschrieben haben. Ich war nahe daran, verrückt zu werden ob dem endlosen Strom neuer Features, welche die Leute in Minix eingebaut haben wollten. Ich habe sie alle zurückgewiesen, weil ich Minix klein und überschaubar halten wollte. Meine stetige ablehnende Haltung gegenüber neuen Features war es, welche Linus dazu gebracht haben, Linux zu schreiben. Wir beide sind zufrieden mit unseren Resulatetn. Die einzige Person, welche nicht so zufrieden ist, ist Bill Gates. Ich denke, das ist gut so. Hardwareanforderungen und -unterstützung. Hier muss man unterscheiden zwischen Minix-16, Minix-32 und Minix-VMD. Minix-16 läuft auf XT (8088, 8086), AT (80286) und der ganzen i386 Architektur. Es kommt mit minimal 640 KByte aus, es gibt sogar Anleitungen, wie man es mit 512 KByte noch benutzen kann. Sehr angenehm ist es dabei allerdings nicht mehr. Minix-32 und Minix-VMD benötigen mindestens 32-Bit Architektur, also mindestens eine 80386 CPU und mindestens 2 MByte RAM. Unterstützt werden IDE und SCSI-Harddisks, CDROM-Laufwerke, Sound Blaster 16 Karten und eigentlich alle Grafikkarten, da es nur im Textmodus läuft. Ausserdem unterstützt es NE2000, 3Com 3c503 und DP8930 ISA Ethernetkaren. Ich betreibe Minix-16 auf einem 80286 Laptop, ein Chicony LT3600. Diese spezielle Maschine ist einigen Leuten unter dem Namen "Opa" bekannt. Die CPU ist mit 20 MHz getaktet. Ausserdem verfügt die Maschine über 5 MByte RAM, eine 212 MByte IDE-Harddisk und einen ISA-Slot (!) welcher mit einer NE2000 Netzwerkkarte bestückt ist. Für Minix-16 ist dies schon fast eine Powermaschine. Welches Minix für was? Minix-16 ist das Minix für die alten und kleinen Systeme wie XT und AT. Es kann bis 16 MByte RAM und Partitionen bis zu einer Grösse von 128 MByte verwalten. Zudem hat es eine Beschränkung auf 14 Zeichen lange Dateinamen. Minix-32 benötigt eine 32-Bit Architektur, also mindestens einen 80386 Prozessor. Es kann bis 4 GByte RAM und Partitionen bis zu einer Grösse von 1 GByte verwalten. Die aktuelle Version von Minix-16 und Minix-32 ist 2.0.3, welche am 2. Oktober 2001 veröffentlicht wurde. Minix-VMD ist eigentlich eine inoffizielle Version von Minix. Es basiert auf Minix-32 1.7.0 und wurde von Kees J. Bot ein wenig erweitert. Der grösste Unterschied zu den beiden Standard-Minixen ist, dass Minix-VMD über virtuellen Speicher (Swap) verfügt. Damit lässt sich dann sogar eine ebenfalls übers Internet erhältliche ältere Version von X11 betreiben! Installation Die Installation ist nicht ganz so einfach, für den erfahrenen Hacker aber kein Problem. Nachdem man sich die Disk-Images für Root- und Bootfloppy (Usr), sowie für USR und SRC heruntergeladen und auf Disketten geschrieben hat bootet man die Root-Disk, womit der Minix-Bootmonitor gestartet wird. Nach einer Weile wird man gefragt, welches Device als /usr gemountet werden soll. Sofern man nicht über ein zweites Floppylaufwerk verfügt, sollte man hier die Usr-Disk reinschieben und den Pfad zum Device auf /dev/fd0 vervollständigen. Nach einem weiteren Moment erscheint der Login-Prompt und man kann sich als root einloggen. Nun gibt es zwei Möglichkeiten, Minix zu installieren. Es gibt die komfortable automatische Version oder die lehrreiche Manuelle. Bei mir hat die automatische Installation nie so richtig funktioniert, darum beschreibe ich hier kurz, wie man dies von Hand vornimmt. Zuerst muss man die Harddisk partitionieren mit "part". Die Aufteilung ist ähnlich wie bei Linux. Zu beachten ist, dass Minix-16 nur Partitionen bis zu einer Grösse von 128 MByte und Minix-32 sowie Minix-VMD bis zu 1 GByte verwalten können. Nachdem man die Partitionen eingerichtet hat, muss man die beiden Disketten auf die entsprechenden Partitionen kopieren, was nur durch einiges ummounten geschehen kann. Zuerst kopiert man die USR-Disk auf die Partition, die später als /usr gemountet werden wird, dann der Inhalt der Root-Disk nach der Partition, die als / gemountet wird. Dann bottet man erneut von der Root-Diskette, gibt nun aber die HD Partition an, welche als /usr gemountet werden soll. Dann muss man mit installboot den Bootmonitor in den Masterbootrecord (MBR) schreiben. Hat man das getan, muss man die Partitionen in /etc/fstab eintragen. Mein fstab sieht so aus: # cat fstab # Poor man's File System Table. root=/dev/hd1 usr=/dev/hd2 Die dritte Partition wird per mount /dev/hd3 /home in der Startdatei /etc/rc gemountet. Danach kann man das System nun ab Harddisk booten. Konfiguration des Netzwerks Netzwerk in Minix wird oft als kompliziert angesehen, aber wie so oft mit Unix ist es ganz einfach, wenn man weiss wie es geht. In Minix-VMD habe ich es bisher nicht hinbekommen, allerdings hatte ich auch noch nicht gross Zeit, mich damit auseinanderzusetzen. In Minix-16 und Minix-32 geschieht die Konfiguration genau gleich. Zuerst muss man den Kernel darauf vorbereiten. Dazu editiert man die Datei /usr/include/minix/config.h. Am Besten macht man eine Kopie von dieser Datei, denn zu grobes Herumfummeln kann einem das System zerschiessen. Diese Linie beinhaltet den Trick. #define ENABLE_NETWORKING 1 /* enable TCP/IP code */ 0 schaltet es aus, 1 schaltet es ein. Ebenso sollte man diese Zeile anpassen #define NR_CONS 6 /* # system consoles (1 to 8) */ Hier muss man dann noch mit MAKEDEV die entsprechenden Devices in /dev generieren, die tty in /etc/ttytab eintragen und schon hat man statt zwei sechs virtuelle Konsolen. Hat man den Kernel in config.h so konfiguriert wie es einem gefällt, muss man nach /usr/src/tools wechseln, wo man dann den Befehl make hdboot eingibt, was dann den Kernel compiliert und ans rechte Ort, nämlich /minix kopiert. Dabei wird die Nummer um eins hochgezählt, wie 2.0.0r0, 2.0.0r1 etc. Jedoch werden immer nur zwei Kernels behalten. Wie das genau passiert sieht man im Shellscript unter /usr/src/tools/mkboot. Wenn der Kernel fertiggebacken ist (dauert auf Opa rund eine Stunde) muss man dem Bootmonitor sagen, dass er nun diesen verwenden soll. Dazu hält man die Maschine an, schreibt den Pfad im Bootmonitor in die Variable image, mit "image = /minix/2.0.0r1" oder so. Gleichzeitig sollte man die Netzwerkkarte anmelden mit "DPETH=300:10" wobei 300 für die Adresse, 10 für den IRQ steht. Hier bitte die Werte der jeweiligen Netzwerkkarte einfügen. Meine ist jumperbar, drum weiss ich immer, wo sie ist. Dann noch save, damit die Werte abgespeichert werden und nun kann man neu booten. Während des Bootvorgangs sollte nun die Netzwerkkarte erkannt werden sowie einige zusätzliche Dämonen gestartet werden. Nun braucht man nur noch per ifconfig der Karte eine IP-Adresse zuzuweisen soweie die route festzulegen und in /etc/resolv die IP des Nameservers einzutragen. Damit ich das nicht jedesmal von Hand machen muss habe ich mir ein Script unter /etc/rc.net gebastelt, welches ich von /etc/rc ausführen lasse. Es sieht so aus: ifconfig -h 192.168.1.105 -n 255.255.255.0 add_route -g 192.168.1.98 Den Hostnamen bezieht Minix vom Nameserver. Falls es keinen gemeldet bekommt zeigt es beim Loginprompt einfach die IP-Adresse. Anwendungen, Programme Es gibt verschiedene Anwendungen für Minix. Mitgeliefert mit der Grundinstallation wird ein ftpd. Wieviel Traffic er bewältigen kann ist nicht näher spezifiziert, für einen Low-Traffic-Server sollte es jedoch reichen. Natürlich spielt hier auch die eingesetzte Hardware eine Rolle. Weitere Applikationen, die ich gefunden habe sind unter Anderem ein Webserver mit dem fantasievollen Namen httpd, den Michael Temari geschrieben hat. Ausserdem gibt es endlich einen rudimentären, aber brauchbaren IRC-Client. Sein Name ist minirc und er wurde von Stian Sletner programmiert. Man findet ihn hier: ftp://ftp.sletner.com/pub/minix/minirc.tar.Z Diese Liste ist in keiner Weise vollständig. Weitere Informationen Es gibt eine Newsgroup, wo man sich bei Problemen, die nicht in irgendeiner Anleitung beschrieben worden sind, hin wenden kann. Diese ist comp.os.minix. Hier lesen unter anderem Andrew S. Tanenbaum, Al Woodhull, Kees J. Bot und diverse andere aktive Minix-Entwickler mit. Auch Linus Torvalds liest mit und schreibt ab und zu etwas, vorallem wenn mal wieder jemand nach der Minix-Version von gcc fragt. Hier gibts eine kleine Uebersicht. Viele Tips und Tricks gibts auf Al Woodhull's Seite. Die offizielle Minix-Webseite wird von Andrew S. Tanenbaum betrieben. Hier kann man Minix-16 und Minix-32 downloaden und hier bekommt man Minix-VMD. Zu der Behauptung, Minix sei tot, noch ein kurzes Statement von Tanenbaum: Is MINIX dead? Oh no. Far from it. It is simply focused on the target area it was always focused on: education. The excursion into hackerland was a detour. A co-author, Al Woodhull, and I have rewritten the MINIX book based on the new, POSIX-compliant, version of MINIX which Kees Bot produced. It is still be aimed at having students be able to learn the principles of operating systems and most of a real system in one semester. In deutsch: Ist Minix tot? Aber nein. Sogar ziemlich weit davon entfernt. Es ist einfach sehr zielgerichtet, und sein Ziel ist klar: Bildung. Der Ausflug ins Hackerland war eine Umleitung. Ein Co-Autor, Al Woodhull und ich haben das MINIX Buch neu geschrieben, basierend auf der neuen, POSIX-unterstützenden Version von Kees Bot. Es richtet sich immer noch an Stunden, welche das Prinzip von Betriebssystemen und das Meiste eines echten Systems in einem Semester lernen wollen.