Wir möchten auf einem Raspberry Pi 3B oder 4 ein minimales Linux-System installieren, welches nur dazu dient, uns einen Atari-ST-Emulator Hatari zur Verfügung zu stellen. Ziel gegenüber einer normalen Installation eines grafischen Raspberry Pi OS soll es sein, so wenig unnützes Zeug zu installieren, wie möglich, die beschleunigten grafischen Funktionen des Raspberry Pi trotzdem voll zu nutzen und im Endeffekt später einmal direkt in den Emulator zu booten, so dass der emulierte Atari ST mit EmuTOS und allem sonst, was wir auf dieser Basis noch on-top installieren können, voll im Vordergrund stehen.
Die Lösung einen Raspberry Pi als neuen und modernen Quasi-Atari ST zu nutzen ist vor allem deswegen interessant, weil es diesen Rechner für 30-40 Euro zzgl. Gehäuse, 5V-USB-Netzteil, Tasten und Maus gibt und er alles schon drin hat, was man den liebevoll gepflegten alten Ataris von 260ST bis Falcon heute teuer nachrüsten muss:
Wenn man einfach mal zusammenrechnet, was das alles kostet, dann weiß man, was einem so ein echter Atari-Retro-Liebling wirklich wert ist. Ich bin ja auch anfällig... ;-)
Was dieser Artikel nicht oder noch nicht umfasst:
Wer ein fertiges System dieser Art mit allem drum und dran wünscht, ohne selber alles im Detail verstehen zu wollen, dem kann ich sehr BeePi von Philippe empfehlen.
🌐 BeePI 2.0Hier muss nur die MicroSD-Card geflasht werden und der Rest ist stark automatisiert und sehr durchdacht. Wer hingegen ein System auch verstehen möchte und es ggf. Stück für Stück selber aufbauen und optimieren möchte, der kann jetzt gerne weiter lesen.
Linux-Kenntnisse auf der Kommandozeile, Bedienung eines Editors etc. werden hier ebenfalls vorausgesetzt. Ein Fernzugang via ssh ist auch sinnvoll, um von einem anderen Rechner u.U weitere Daten, ROMs usw. einzuspielen.
Zunächst holen wir uns von der Raspberry Pi Foundation den Raspberry Pi Imager, legen eine MicroSD-Card in unser Notebook ein (ggf. mit Adapter oder entsprechendem Lesegerät) und Flashen uns das Raspberry Pi OS lite auf unsere Karte. Also das System ohne grafische Benutzeroberfläche:
🌐 https://www.raspberrypi.com/software/Ich habe dies alles mit der 64-Bit-Variante getestet, ob es mit 32 Bit auch funktioniert, habe ich noch nicht probiert.
Der Imager kann selber das System herunterladen und dann auf die MicrSD-Card speichern. Diese Stecken wir dann in unseren Raspberry PI, schließen Monitor, Tastatur und Maus an und starten diesen.
Als nächstes müssen wir unser frisches System, nachdem es gestartet ist und wir einige initiale Fragen beantwortet haben, in unser WLAN oder LAN holen. LAN ist einfach: Kabel vom router anstecken. Für's WLAN rufen wir raspi-config auf und konfigurieren das System:
sudo raspi-config > 1 System Options > S1 Wireless LAN
Hier geben wir dann unser WLAN an und das dazugehörige Passwort.
Das System werden wir nun auf den aktuellsten Stand bringen und neu starten:
sudo apt update sudo apt upgrade sudo reboot sudo rpi-update (wg. EGL-Driver) sudo reboot
Jetzt bereiten wir unseren Raspberry Pi so vor, dass er eine beschleunigte Grafik auf der Console hat:
$ sudo raspi-config select '6 Advanced Options' select 'A2 GL Driver' select 'G2 GL (Full KMS)' sudo reboot
Installieren, was wir an Entwicklungstools brauchen:
sudo apt install git cmake
Weitere Libraries installieren, die wir für SDL benötigen:
sudo apt install libudev-dev libasound2-dev \ libdbus-1-dev mesa-utils-extra libegl1-mesa \ libdrm-dev libgbm-dev
Die folgenden Videocore-Binary-Blobs sind normalerweise installiert und müssen nicht extra installiert werden. Hier nur zur Referenz:
sudo apt install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
Irgendwie gehört der Pfad unter /usr/local offenbar nicht mehr offiziell zum System, daher hier die Ergänzung für Libraries und Binaries, zur Ergänzung am Ende der Datei ~/.bashrc
$ export LD_LIBRARY_PATH=/usr/local/lib $ export PATH=$PATH:/usr/local/bin
Danach einmal ausloggen und wieder einloggen und schauen, ob die beiden Variablen für unseren Benutzer getzt sind mit:
echo $LD_LIBRARY_PATH echo $PATH
Wir packen all unsere Quelltexte für SDL und Hatari in einen eigenen Ordner:
mkdir -p ~/src, cd src
Jetzt holen wir uns als erstes die SDL2-Library mit Git:
git clone https://github.com/libsdl-org/SDL cd SDL
Wir Bauen machen wir uns einen eigenen Ordner - reine Ästhetik:
mkdir -p build cd build
Und nun konfigurieren wir unsere SDL2-Library so, dass sie nur auf der Console des Raspberry Pi läuft, aber nicht unter X11, Wayland oder woanders:
../configure \ --disable-pulseaudio \ --disable-video-vivante \ --disable-video-opengl \ --disable-video-wayland \ --disable-video-directfb \ --disable-video-vulkan \ --disable-video-metal \ --disable-video-cocoa \ --disable-video-rpi \ --enable-video-kmsdrm \ --enable-video-opengles make sudo make install
SDL2 wird jetzt unter /usr/local installiert, damit sich unsere selbstgebauten Programme nicht mit den über den Paketmanager installierten vermischen.
Damit haben wir jetzt alles, was wir als Basis für Hatari brauchen.
Zunächst holen wir uns den Quellcode von Hatari, wieder mit Git:
cd ~/src git clone https://git.tuxfamily.org/hatari/hatari.git/ cd hatari mkdir -p build cd build ../configure make sudo make install
Sind wir auf einer Console eingeloggt, können wir hier natürlich automatisch die Tastatur benutzen. Starten wir aber ohne Grafische Benutzerumgebung, wie Gnome, KDE, oder X11 ein grafisches Programm direkt, so benötigt dieses für die Benutzung von Eingabegeräten explizit eine Berechtigung. Der Benutzer ehält diese, indem wir ihn in die Gruppe "input" nehmen:
sudo usermod -aG input $USER exit # und neu anmelden
Jetzt haben wir alles, was wir benötigen, um Hatari auf der Linux-Console vom Raspberry Pi direkt zu starten:
hatari
Jetzt wollen wir erreichen, dass unser System beim Start gleich in den Hatari bootet und beim Beenden von Hatari mit F11 und Quit uns ein Menü mit weiteren Optionen zur Verfügung stellt, ob wir in eine Shell wollen, das System durchstarten oder ganz herunterfahren wollen.
Für alles hier folgende werden wir zunächst root User:
sudo -i
Wir legen uns eine eigene Gruppe und einen eigenen User "atari" an, unter dem Hatari später läuft und vergeben ein Passwort:
groupadd atari useradd -g atari -d /home/atari -m -s /bin/bash -c "Atari User" atari usermod -a -G sudo,video,audio,input atari passwd atari # Passwort setzen
Dann erlauben wir allen Benutzern in der Gruppe "atari", das System ohne weitere Eingabe eines Passwortes herunter zu fahren oder neu zu starten:
Dafür werden wir wieder root und legen folgende Datei an:
nano /etc/sudoers.d/010_hatari-nopasswd
mit diesem Inhalt:
# Allow users in group "atari" to stop the system %atari ALL=NOPASSWD: /sbin/reboot, /sbin/poweroff
Dies wird erst nach Ausloggen und wieder Einloggen oder dem Neustart des Systems wirksam. Aber wir sind ja momentan sowieso nicht der User "atari".
Nun bauen wir ein Menü, welches uns später eine Wahl erlaubt, was wir nach dem Verlassen von Hatari tun wollen. Wir schreibe es in diese Datei:
nano /usr/local/bin/hatari-menu.sh
... mit diesem Inhalt:
#!/bin/bash # Set paths for Hatari and SDL export LD_LIBRARY_PATH=/usr/local/lib export PATH=$PATH:/usr/local/bin # At first always boot into Hatari (delete if not liked) hatari # After closing Hatari, now give us a choice while true do cmd=(dialog --keep-tite --menu "Hatari Menu" 11 12 4) options=(1 "Hatari" 2 "Shell" 3 "Reboot" 4 "Shutdown") choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) for choice in $choices do case $choice in 1) hatari ;; 2) /bin/bash ;; 3) sudo /sbin/reboot -f ;; 4) sudo /sbin/poweroff -f ;; esac done done
Jetzt machen wir unser Menü-Script ausführbar:
chmod +x /usr/local/bin/hatari-menu.sh
Damit dieses Menü funktioniert, müssen wir noch ein Kommando installieren, falls noch nicht geschehen, was uns die schönen Menüs später anzeigt:
apt install dialog
Um zu testen, ob unser Menü funktioniert, können wir es einmal per Hand aufrufen. Mit < strg > +C können wir es hart wieder stoppen bzw. da raus kommen - oder mit einem Reboot. ;-)
Und nun wollen wir, dass beim Start des Rechners auf der ersten virtuellen Console automatisch unser Menü erscheint, anstelle des Logins. Dazu legen wir wieder eine Datei an:
nano /etc/systemd/system/getty@tty1.service.d/override.conf
... und schreiben Folgendes hinein:
[Service] ExecStart= ExecStart=-/usr/local/bin/hatari-menu.sh StandardInput=tty StandardOutput=tty StandardError=tty
Nun laden wir den System-Daemon neu und starten die Anzeige für TTY1 neu:
systemctl daemon-reload systemctl restart getty@tty1.service
Jetzt sollten wir so weit sein, dass unser System in den Hatari bootet und wenn wir diesen mit F12 und Quit wieder verlassen, dann bekommen wir unser Menü, was wir als nächstes tun können
Natürlich muss Hatari noch mit einem EmuTOS oder anderem ROM ausgestattet werden, das muss irgendwo im Home-Verzeichnis des Linux-Benutzers "atari" liegen. Dieser Schritt und alle weiteren Schritte zur Einrichtung von Hatari sind genau so, wie überall bei Hatari.
Ab hier funktioniert Dein System im Grunde so, wie ein Atari mit einem modernen und flexiblen Unterbau. Viel Spaß mit Deinem neuen Hatari/EmuTOS-System.
Achtung!!! Bei Problemen kannst Du Dich immer über <strg>+<alt>+F2 an einer zweiten Console anmelden und Fehler beseitigen. Die Console tty1 ist vom Hatari belegt. Dies erreichst Du immer mit <strg>+<alt>+F1
Ich freue mich immer über Ergänzungen oder entdeckte Fehler. Kontakt siehe ganz oben.