VAX3900 Emulation unter SimH in einem Docker Container

    • Offizieller Beitrag

    Hallo!


    Nachdem der kleine DELL 3020M eingetroffen ist und jetzt unter Ubuntu 18.04 LTS läuft wollte ich nun die Projekte von meinen ganzen Raspies umziehen.

    Zu den Dingen wie haproxy und Joomla gehört auch die Emulation einer VAX3900 unter simh.


    Auf github findet man auch das passende Image:

    https://github.com/jguillaumes/dockersimh


    Wer nun einen user mit sudo Rechten erstellt hat, installiert sich nun Docker unter diesem user. Dazu gibt es genügend Anleitungen.


    Der simh container wird vom image folgendermaßen erstellt "noch nicht ausführen ;)":

    sudo docker run --name webvax -p 2323:2323 -v /home/pezu/machines:/machines -it jguillaumes/simh-vax


    Der Name des Containers in diesem Fall ist "webvax" und das lokale Verzeichnis /home/pezu/machines wird in den Container nach /machines gemountet.

    /machines ist das Verzeichnis in welchen der Container die VAX Dateien erwartet, z.B. das nvram, disks und andere .iso Dateien für die emulierten CD-Roms.

    Ich habe festgestellt, das die Angabe eines absoluten Pfades mit dem notwendigen führenden "/" am besten funktioniert.

    Sollte docker mit der Schreibweise Probleme haben, wird docker meist ein Volume anlegen. Dieses geht auch aber dann bitte legt das Volume vorher mit eindeutigen Namen an.


    z.B. "sudo docker volume create machines"

    Der Aufruf ist dann:

    sudo docker run --name webvax -p 2323:2323 -v machines:/machines -it jguillaumes/simh-vax

    Da gehe ich hier aber nicht weiter darauf ein! Im folgenden verweise ich auf ein lokales Verzeichnis.


    Das -p 2323:2323 spiegelt den Containerport 2323 auf den Wirtsrechnerport 2323. Der Port 2323 ist später die serielle Console der emulierten VAX. Schaut dazu in die Beispiel .ini die ihr im github unter machines/vax/vax.ini

    set dz enable

    set dz 8b

    set dz lines=8

    att dz 2323


    Bevor also der Container erzeugt wird, legt für die Emulation ein Verzeichnis unter eurem user an und legt dort eine Datei an:

    mkdir ~/machines

    touch ~/machines/happy.txt


    Nun könnt ihr den Befehl ausführen. Ich verwende zum testen auch noch den Qualifier --rm, so wird der Container nach der Ausführung auch sofort entfernt:

    sudo docker run --rm --name webvax -p 2323:2323 -v /home/pezu/machines:/machines -it jguillaumes/simh-vax


    Beim ersten Start wird docker nun das Image suchen und herunterladen. Danach verbleibt es im Docker Repository.


    Jetzt solltet ihr folgendes sehen:


    Ihr seit jetzt im Container im Verzeichnis /machines und solltet dort die Datei happy.txt aus euren lokalen Verzeichnis sehen:

    simh_2.JPG


    Wenn ihr diese Datei nicht seht, dann überprüft nochmals eure Eingabe!


    Sollte alles passen, dann gebt ihr jetzt einfach mal "vax" ein und solltet das hier erhalten:


    Leider gibt es hier den ersten Bug, der simh prompt wird nicht angezeigt. Das ist aber kosmetischer Natur. Ihr könnt jetzt simh Befehle eingeben. Mit "exit" kommt ihr wieder raus, mit "boot" wird die CPU initialisiert usw.


    Wenn ihr jetzt über "exit" den simh verlasst und dann mit "exit" den Container verlasst dann seit ihr wieder in eurer shell und der Container wird verworfen.

    Ihr könnt euch auch mit einfachen unix Befehlen im Container bewegen.


    Der nächste grosse Schritt ist das anlegen und/oder kopieren euer evtl. vorhanden VAX Dateien in das lokale ~/machines Verzeichnis.

    Habt ihr das erledigt startet ihr wieder euren container:

    sudo docker run --rm --name webvax -p 2323:2323 -v /home/pezu/machines:/machines -it jguillaumes/simh-vax


    Gebt ihr jetzt "vax" ein, solltet eure VAX Emulation starten. Wie ihr simh konfiguriert ist einschlägig beschrieben


    Im Gegensatz zu den Anweisungen in github oder auf der Webseite des Autors konnte ich die Emulation nicht automatisch mit dem Argument "vax" starten:

    sudo docker run --rm --name webvax -p 2323:2323 -v /home/pezu/machines:/machines -it jguillaumes/simh-vax vax


    Geht bei mir nicht. Wenn man sich das zugehörige Image mit docker anschaut:

    docker inspect jguillaumes/simh-vax

    fällt auf, das die Entrypoints nicht wirklich passen!


    Was aber geht, da die startup.sh sich in der root des Containers befindet ist:

    sudo docker run --rm --name webvax -p 2323:2323 -v /home/pezu/machines:/machines -it jguillaumes/simh-vax '/startup.sh' 'vax'


    Die Argumente 'startup.sh' und 'vax' ersetzen den default Entrypoint. Mit dem Qualifier -d sollte der container dann auch im Hintergrund laufen.


    Evtl. fixe ich mal das Image.


    Mit "docker attach webvax" könnt ihr euch dann mit dem Container verbinden oder auch übers Netz oder Port 2323 zugreifen fals entsprechend in der Emulation und dem VMS OS konfiguriert.


    Hoffe das hilft dem ein oder anderen.


    Gruss,

    Peter