SAI, WS 2004/2005, Allgemeine Informatik I

Das Ulmer Oberon-System für die Linux/I386-Plattform


Diese Seite ist inzwischen veraltet und wird unter http://www.mathematik.uni-ulm.de/sai/ss05/ai2/ulm-oberon-i386/ weiter gepflegt.

Dank Christian Ehrhardt gibt es eine Portierung des Ulmer Oberon-Systems für die Linux-Plattform. Zu bedenken ist nur, daß sich diese noch im Alpha-Zustand befindet (d.h. mit Fehlern, Problemen und Unschönheiten muß noch gerechnet werden) und sich in der Benutzung unterscheidet. Auch sind einige Grundkenntnisse für Linux erforderlich, um dieses System unter Linux nutzen zu können. Wenn jedoch alles klappt, können Beispiele aus der Vorlesung und Lösungen für Übungsaufgaben unverändert übertragen und zur Ausführung gebracht werden. Wenn es nicht klappt, können Sie gerne zu uns kommen. Entweder mit Ihrem Notebook (das macht es einfacher) oder detaillierten Fehlerberichten mitsamt allen Fehlermeldungen und einem Installationsprotokoll.

Wichtig: Für die Installation kommen nur neuere Maschinen in Frage, die genügend Hauptspeicher mitbringen (empfohlen sind mindestens 256 Megabyte). Bitte quälen Sie damit nicht alte Maschinen mit zu wenig Hauptspeicher. Da kann eine Übersetzung tatsächlich Stunden dauern, die sonst binnen Sekunden erledigt ist.

Wir haben das Ulmer Oberon-System bereits erfolgreich unter SuSE 9.1, SuSE 9.2, Debian Woody, Gentoo und Fedora 2 installiert. Letzteres allerdings erst ab Version 0.7.6. Ab Version 0.7.13 werden auch 64-Bit-Systeme unterstützt (getestet auf AMD-Athlon-64-Systemen unter SuSE 9.2 und Fedora 2). Grundsätzlich kann es bei einigen Linux-Kernels Probleme geben, da das Ulmer Oberon-System nicht die C-Bibliothek nutzt und wir daher gelegentlich die ersten sind, die neue Kernel-Bugs entdecken dürfen.

Sollten Sie jedoch ein glücklicher Besitzer eines UltraSPARC-Systems sein, das unter Solaris läuft, dann steht ein Solaris-Paket für Oberon zur Verfügung.

Kürzliche Änderungen:

0.7.17 Im Vergleich zu 0.7.16 sind nur Änderungen hinzugekommen, die die Installierung von Skripten unter /etc/init.d bei SuSE betreffen.
0.7.16 Im Modul Streams wurde ein Bug behoben, der für eines der Vorlesungsbeispiele der letzten Vorlesung relevant war. Die Dienste pons und cdbd sind in der neuen Version deutlich restriktiver in der voreingestellten Konfiguration und damit sicherer. Mehr Hinweise dazu finden sich in der beiliegenden Datei SECURITY.
0.7.15 Die dynamische Allokation von Records oder Arrays mit der genauen Größe von 124 Bytes führte zur mehrfachen Verwendung der gleichen Speicherfläche und damit zum fast sicheren Crash. Das betraf insbesondere das Bibliotheksmodul PipeReaders, das für das kommende Blatt 15 relevant ist.
0.7.14 Einige Fehler wurden in der Oberon-Bibliothek behoben, die für das kommende Blatt 15 relevant sind.
0.7.13 Hinzugekommen sind die Unterstützung von 64-Bit-Systemen (wobei Oberon hier weiterhin im 32-Bit-Modus operiert) und einige Modulanpassungen, die für das kommende Blatt 15 relevant sind. Ferner vereinfacht sich ab sofort der Aufruf von obci und anderer Kommandos, da die entscheidenden Parameter über Umgebungsvariablen gesetzt werden. Mit letzterem entfällt die Notwendigkeit, ein Skript zur Vereinfachung zu schreiben wie es in der Antwort auf die Frage 134 im Feedback geschehen ist.
0.7.12 Gigantische Datenstrukturen mit Zeigern in lokalen Variablen konnten zu sehr langen Übersetzzeiten und recht umfangreichen Programmen führen.
0.7.11 Ein weiterer Fehler wurde behoben, der zu einem Crash von obload bzw. obbuild führen konnte, wenn bestimmte Formen von Fehlermeldungen auszugeben waren.
0.7.10 Ein weiterer schwerwiegender Fehler wurde im Code-Generator behoben, der dazu führte, daß unter bestimmten Umständen bei CASE-Anweisungen falscher Code generiert werden konnte. Dies führte auch dazu, daß auf diese Weise weitere Bugs in den Compiler selbst hineinkamen, da er mit sich selbst übersetzt wurde. Letzteres führte typischerweise zu einem Crash von obload.
0.7.9 Ein schwerwiegender Fehler, der bei der Generierung komplizierter Ausdrücke zur Array-Indizierung auftreten konnte, wurde behoben. Falls dieser Fehler zuschlägt, kommt es zu einem korrupten Base-Register, was dann kurz darauf zu einem Crash führt. Es empfiehlt sich in jedem Falle, zu der neuen Version zu wechseln.
0.7.8 Einige Fehler bei der Generierung von Init-Skripten für SuSE wurden behoben. Das ist nur relevant, wenn Sie mit SuSE arbeiten und die Oberon-Dienste automatisch durch entsprechende Skripte in /etc/init.d gestartet werden sollen.
0.7.7 Der Speicherplatzverbrauch von obload und cdbd wird nun in Abhängigkeit des physikalisch vorhandenen Speichers bestimmt. Siehe Datei TUNING. Dies ist nützlich für Maschinen mit knappem Hauptspeicher.

So können Sie loslegen:

  1. Laden Sie sich die aktuelle Version (zur Zeit 0.7.17) auf Ihr Linux-System und packen Sie diese unter /tmp/oberon oder einem anderen temporären Verzeichnis aus:

    mkdir /tmp/oberon && cd /tmp/oberon
    wget ftp://ftp.mathematik.uni-ulm.de/pub/soft/oberon/ulm/i386/ulm-oberon-i386-0.7.17.tar.gz
    tar xvfz ulm-oberon-i386-0.7.17.tar.gz
    cd ulm-oberon-i386-0.7.17
    

  2. Falls bei Ihnen die libelf-Bibliothek nicht installiert ist oder diese fehlerhaft sein sollte (war bei Fedora 2 der Fall), dann würde die Übersetzung oder die nachfolgende Verwendung des tof2elf-Werkzeuges nicht funktionieren. Sie können in diesem Falle eine fertig übersetzte statische Fassung herunterladen und so in das ausgepackte System hineinkopieren, daß nicht mehr versucht wird, es neu zu bauen:

    wget ftp://ftp.mathematik.uni-ulm.de/pub/soft/oberon/ulm/i386/tof2elf
    chmod 755 tof2elf
    touch tof2elf
    mv tof2elf src/util/tof2elf
    

  3. Jetzt müssen Sie sich entscheiden, wohin Sie das Oberon-System installieren möchten. Kandidaten wären beispielsweise /usr/local/oberon oder ~/oberon. Im folgenden Beispiel wird von /usr/local/oberon ausgegangen. Sie können aber auch jedes andere (nach Möglichkeit noch nicht existierende) Verzeichnis wählen:

    make DestDir=/usr/local/oberon
    

  4. Die Umgebungsvariablen PATH und MANPATH können Sie automatisch anpassen, wenn Sie das rc-Skript von Ihrer Shell einlesen lassen:

    . /usr/local/oberon/rc
    

    Es empfiehlt sich, dies auch in ~/.profile oder in /etc/profile aufzunehmen. Unter Gentoo Linux sollte rc unter /etc/env.d installiert werden:

    cp /usr/local/oberon/rc /etc/env.d/oberon
    env-update
    

  5. Dann sollten Sie den Namensdienst für Oberon und die Datenbank für den Compiler starten. Dies ist jeweils ``per Hand'' möglich oder in einer automatisierten Form, die auch nach jedem Neustart zur Ausführung gelangt. Für letzteres gibt es allerdings bislang nur unter SuSE direkte Unterstützung.

    Ob die beiden Dienste korrekt arbeiten, können Sie leicht überprüfen, indem Sie mit Hilfe von nsh einen Blick in das Namenssystem von Oberon werfen:

    borchert@portia:~> nsh
    * ls
        pub
    * cd pub
    * ls
        cdb
    * cd cdb
    * ls
        oberon
    * cd oberon
    * ls
        cdbd
        modules
    * q
    borchert@portia:~>
    

  6. Danach sind alle beiliegenden Quellen der Oberon-Bibliothek in die Datenbank zu laden:

    load_libsources
    

    Dies ist nur einmalig erforderlich.

  7. Wenn alles soweit geklappt hat, können Sie mit dem in dem ausgepackten Verzeichnis liegenden ersten Beispiel sehen, ob es tatsächlich funktioniert:

    borchert@portia:~/Hello> obci Welcome.o[dm]
    borchert@portia:~/Hello> obbuild Welcome
    borchert@portia:~/Hello> ./Welcome
    Welcome to Ulm's Oberon System on the I386 platform!
    borchert@portia:~/Hello>
    

    Bitte haben Sie auch für so ein winziges Programm Geduld. Da zu Beginn in der Datenbank nur Quellen enthalten sind, muß der Compiler zunächst recht viele Module übersetzen, bevor er zu Welcome kommt.

  8. Erfolgsmeldungen an borchert@mathematik.uni-ulm.de sind willkommen :-)

Einige Fragen und Antworten zu dem Ulmer Oberon-System unter Linux


Andreas Borchert, 1. März 2005