NeXTSTEP: Auf einem RPi 5
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. 🎉

Den kompletten Boot-Prozess kannst du dir hier anschauen: