NeXTSTEP: Auf einem RPi 5

🇬🇧 English version…

Previous Emulator Installation auf einem Raspberry Pi 5

In dieser Anleitung zeige ich dir Schritt für Schritt, wie du NeXTSTEP 3.3 mithilfe des Emulators Previous auf einem Raspberry Pi 5 installierst. Diese Anleitung basiert auf Raspberry Pi OS Lite, um ein minimales System zu schaffen, das nach dem Hochfahren direkt in die NeXTSTEP-Oberfläche startet.

Voraussetzungen

Hardware

  • Raspberry Pi 5
  • Eine schnelle SD-Karte oder ein USB-Stick (mindestens 32 GB empfohlen). Eine SSD bietet eine bessere Leistung, ist aber nicht erforderlich.
  • Ein passendes Netzteil für deinen Raspberry Pi 5 (5V/5A)
  • Tastatur, Maus und Monitor
  • Ein Computer mit einem SD-Kartenleser oder USB-Anschluss

Software

  • Raspberry Pi Imager
  • Raspberry Pi OS Lite (64-Bit)
  • NeXTSTEP-Installationsdateien
    Da ich mich hier nur auf das Einrichten von NeXTSTEP für einen Cube konzentriere, benötigen wir auch nur das ISO Image der User Installation. Ein Boot-Disketten-Image benötigen wir für diese Maschine nicht.

Wo finde ich NeXTSTEP-Dateien?

NeXTSTEP wird oft als so genannte “Abandonware” betrachtet, da es kommerziell nicht mehr verfügbar ist und vom ursprünglichen Hersteller nicht mehr gepflegt wird. Eine exzellente und umfassende Quelle für alle benötigten Images und weitere nützliche Software ist das Archiv auf nextcomputers.org oder das Internet Archive.

Die NeXT ROM-Files werden nicht benötigt, da diese durch die Installation von Previous mitgeliefert werden. Solltest du sie dennoch herunterladen wollen, dann findest du ein Bundle verschiedener Files für verschiedene Modelle im macintoshrepository.org.

Raspberry Pi OS Lite installieren und einrichten

1. Raspberry Pi OS Lite auf SD-Karte / USB-Stick flashen

Stecke die SD-Karte ein oder verbinde den USB-Stick mit deinem Computer und starte den Raspberry Pi Imager. Ich verzichte an dieser Stelle auf eine ausführlich Erklärung, wie man mit Raspberry Pi Imager arbeitet, und setze das einfach mal voraus.

Wenn das Flaschen erledigt ist, kannst du deinen Raspberry Pi mit dieser SD-Karte / diesem USB-Stick booten.

2. Erster Start und Systemaktualisierung

Das System bootet in eine Kommandozeile (Terminal). Logge dich mit deinem zuvor beim Flashen vergebenen Benutzernamen und Passwort ein, und führe eine vollständige Systemaktualisierung durch. Das kann einen Moment dauern.

sudo apt update && sudo apt full-upgrade -y

3. Neustart des Systems

Nach der Aktualisierung ist ein Neustart empfohlen.

sudo reboot

Previous Emulator kompilieren und installieren

Bevor wir den Emulator herunterladen und kompilieren, müssen wir noch alle Abhängigkeiten für das Kompilieren von Previous installieren:

sudo apt install -y \
build-essential \
cmake \
libasound2-dev \
libaudiofile-dev \
libdbus-1-dev \
libdirectfb-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libopenal-dev \
libpcap-dev \
libpng-dev \
libpulse-dev \
libsdl2-dev \
libslirp-dev \
libts-dev \
libudev-dev \
raspberrypi-ui-mods \
subversion \
zlib1g-dev

Jetzt können wir den Quellcode des Previous-Emulators von SourceForge klonen und den Build konfigurieren:

svn checkout https://svn.code.sf.net/p/previous/code/trunk previous
cd previous && ./configure

Nach dem configure sollte sowas erscheinen:

Libraries summary :
-------------------

  - sdl :	using SDL2 2.26.5
  - png :	found, allows to print to files using png
  - pcap :	found, allows networking without NAT
  - xattr.h :	found, allows netbooting from a folder
  - off_t :	8 byte, allows image files of 2 GiB and more

Configuration summary :
-----------------------

  - Build configuration : Release
  - Build macOS bundle :  Disabled
  - Tracing :             Enabled
  - Rendering thread :    Disabled

-- Configuring done
-- Generating done
-- Build files have been written to: /home/next/previous

Now you must type: make; make install
to actually build and install the software

Jetzt musst du nur noch den Quellcode kompilieren und installieren:

make && sudo make install

NeXTSTEP-Installationsdateien vorbereiten

# Ein Verzeichnis für NeXTSTEP-Dateien erstellen
mkdir ~/nextstep

# In das neue Verzeichnis wechseln
cd ~/nextstep

# Ein 2GB großes virtuelles Festplatten-Image erstellen
dd if=/dev/zero of=next_hdd.img bs=1M count=2048

Damit NeXTSTEP mit dem erstellten Image etwas anfangen kann und dieses als Harddisk erkennt, müssen wir noch eine Partition-Table schreiben. Das machen wir mit fdisk.

fdisk next_hdd.img

Wir erstellen ganz einfach eine einzige primäre Partition, gehen mit Return durch alle vorgeschlagenen Defaults und lassen fdisk diese Partition Table ins Image schreiben. So sieht meine Ausgabe zu dem Kommando aus:

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0x32feeeab.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-4194303, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, default 4194303):

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

Lade dir nun das NeXTSTEP Installations Image herunter, und kopiere es auf den Raspberry Pi. Zusätzlich kannst du auch noch das CD-Image mit den Developer Tools herunterladen, und ebenfalls auf den Raspberry Pi kopieren. Das Kopieren erledigen wir am Besten mit scp (wir gehen davon aus, dass dein Benutzer auf dem Raspberry Pi next und der Pi cube heißt.

Installations CD kopieren:

scp ~/Downloads/NeXTSTEP_3.3_User.iso next@cube.local:/home/next/nextstep/

Nach Bedarf die Developer Tools kopieren:

scp ~/Downloads/NeXTSTEP_3.3_Developer.iso next@cube.local:/home/next/nextstep/

Eventuell musst du bei dir noch den ~/Downloads Pfad anpassen. Je nachdem, unter welchem Betriebssystem du gerade arbeitest, und wo deine Downloads landen.

Boot-Vorgang optimieren

Wir wollen den Boot-Vorgang am Raspi so schnell wie möglich hinter uns bringen, und dabei soll so wenig wie möglich angezeigt werden. Das erreichen wir, in dem wir dem Kernel noch einen zusätzlichen Boot-Parameter mitgeben.

Hierzu öffnen wir folgende Datei:

sudo nano /boot/firmware/cmdline.txt

Darin befindet sich eine einzige Zeile mit vielen Parametern, jeweils durch ein Leerzeichen getrennt. Gehe ganz ans Ende dieser Zeile und hänge den Parameter quiet loglevel=3 an

Speichere die Datei und schließe den Editor.

Autostart vorbereiten

Da wir Raspberry Pi OS Light, also die Version ohne grafischen Desktop, installierte und eine minimal GUI im Schritt 3 mit dem Paket raspberrypi-ui-mods nur nachinstallierte haben, startet unser System noch immer direkt in die Console. Das wollen wir ändern. Das OS soll in die grafische Benutzeroberfläche booten und hier auch gleich einen Auto-Login durchführen.

Um das zu erreichen, müssen wir noch zwei Änderungen in der Console via raspi-config vornehmen.

Logge dich am Raspi direkt oder via SSH ein, und rufe raspi-config auf:

sudo raspi-config

Dann solltest du sowas sehen:

Gehe nun durch die unten beschriebenen Schritte:

  • 1 System Options
  • 55 Boot
  • B2 Desktop GUI → OK
  • 1 System Options
  • 56 Auto Login
  • “Would you like to automatically log in to the console?” → No
  • “Would you like to automatically log in to the desktop?”Yes
  • Finish
  • “Would you like to reboot now?”Yes

Dein Raspi startet nun neu und sollte automatisch im Desktop landen und dort auch mit deinem next Benutzer eingeloggt sein.

Previous Emulator Konfiguration

Damit Previous beim ersten Mal nicht mit den Standardeinstellungen startet, sondern gleich so, wie wir es wollen. geben wir ihm eine Konfiguration mit. Diese wird auf dem Raspi unter ~/.config/previous/ abgelegt. Zur Sicherheit erstellen wir dieses Verzeichnis erstmal.

mkdir -p ~/.config/previous/

Dann öffnest du die (leere) Konfig-Datei:

nano ~/.config/previous/previous.cfg

Hier kopierst du diesen Inhalt rein:

[Log]
bConfirmQuit = TRUE
bConsoleWindow = FALSE

[ConfigDialog]
bShowConfigDialogAtStartup = FALSE

[Screen]
nMonitorType = 2
nMonitorNum = 0
bFullScreen = TRUE
bShowStatusbar = FALSE
bShowDriveLed = FALSE

[ShortcutsWithModifiers]
kOptions = O
kFullScreen = F
kMouseMode = M
kColdReset = C
kScreenshot = G
kRecord = R
kSound = S
kPause = P
kDebuggerM68K = D
kDebuggerI860 = I
kQuit = Q
kDimension = N
kStatusbar = B

[ShortcutsWithoutModifiers]
kOptions = F12
kFullScreen = F11
kMouseMode =
kColdReset =
kScreenshot = F4
kRecord = F5
kSound =
kPause =
kDebuggerM68K =
kDebuggerI860 =
kQuit =
kDimension =
kStatusbar = F10

[Boot]
nBootDevice = 1
bEnableDRAMTest = FALSE
bEnablePot = FALSE
bEnableSoundTest = TRUE
bEnableSCSITest = TRUE
bLoopPot = FALSE
bVerbose = FALSE
bExtendedPot = FALSE
bVisible = FALSE

[HardDisk]
szImageName0 = /home/next/nextstep/NeXTSTEP_3.3_HD-Image_Previous_2GB.img
nDeviceType0 = 1
bDiskInserted0 = TRUE
bWriteProtected0 = FALSE
szImageName1 =
nDeviceType1 = 0
bDiskInserted1 = FALSE
bWriteProtected1 = FALSE
szImageName2 =
nDeviceType2 = 0
bDiskInserted2 = FALSE
bWriteProtected2 = FALSE
szImageName3 =
nDeviceType3 = 0
bDiskInserted3 = FALSE
bWriteProtected3 = FALSE
szImageName4 =
nDeviceType4 = 0
bDiskInserted4 = FALSE
bWriteProtected4 = FALSE
szImageName5 =
nDeviceType5 = 0
bDiskInserted5 = FALSE
bWriteProtected5 = FALSE
szImageName6 =
nDeviceType6 = 0
bDiskInserted6 = FALSE
bWriteProtected6 = FALSE
nWriteProtection = 0

[System]
nMachineType = 1
bColor = TRUE
bTurbo = TRUE
bNBIC = TRUE
bADB = TRUE
nSCSI = TRUE
nRTC = TRUE
nCpuLevel = 4
nCpuFreq = 33
bCompatibleCpu = TRUE
bRealtime = FALSE
nDSPType = 2
bDSPMemoryExpansion = TRUE
n_FPUType = 68040
bCompatibleFPU = TRUE
bMMU = TRUE

[Dimension]
bI860Thread = TRUE
bMainDisplay = TRUE
nMainDisplay = 0
bEnabled0 = TRUE
nMemoryBankSize00 = 16
nMemoryBankSize01 = 16
nMemoryBankSize02 = 0
nMemoryBankSize03 = 0
szRomFileName0 = /usr/local/share/previous/ND_step1_v43.BIN
bEnabled1 = FALSE
nMemoryBankSize10 = 4
nMemoryBankSize11 = 4
nMemoryBankSize12 = 4
nMemoryBankSize13 = 4
szRomFileName1 = /usr/local/share/previous/ND_step1_v43.BIN
bEnabled2 = FALSE
nMemoryBankSize20 = 4
nMemoryBankSize21 = 4
nMemoryBankSize22 = 4
nMemoryBankSize23 = 4
szRomFileName2 = /usr/local/share/previous/ND_step1_v43.BIN

WICHTIG: Passe unter der Sektion “[HardDisk]” den Wert bei szImageName0 an. Hier musst du dein leeres HD Image eintragen, in das du NeXTSTEP installieren willst.

Autostart via “Kiosk-Mode” einrichten

Schritt 1: Autostart-Verzeichnis erstellen

Wir legen eine Konfigurationsdatei im Autostart-Verzeichnis deines Benutzers an. Falls der Ordner noch nicht existiert, erstelle ihn.

mkdir -p ~/.config/autostart

Schritt 2: Die Autostart-Datei erstellen

Jetzt erstellen wir eine .desktop-Datei. Das ist eine Art Verknüpfung, die der Desktop beim Starten automatisch ausführt.

nano ~/.config/autostart/previous.desktop

Schritt 3: Inhalt für die Autostart-Datei einfügen

Füge den folgenden Inhalt komplett in die leere Datei ein.

[Desktop Entry]
Type=Application
Name=Previous NeXT Emulator
Comment=Starts the Previous Emulator in fullscreen
Exec=/usr/local/bin/previous
Terminal=false

Speichere die Datei und schließe den Editor.
Jetzt ist alles bereit. Starte deinen Raspberry Pi neu.

sudo reboot

Nach dem Neustart sollte dein Raspberry Pi mit minimalen Textausgaben hochfahren und dann direkt in die NeXTSTEP-Oberfläche wechseln.

Abschluss

Du hast es geschafft! Viel Spass mit NeXTSTEP auf deinem Raspberry Pi. 🎉

NeXTSTEP Workspace

Den kompletten Boot-Prozess kannst du dir hier anschauen: