Emulatoren für SteamOS

Für Steam selbst existiert fast nur RetroArch als Emulationsplattform. Diese ist allerdings nicht unbedingt dafür bekannt besonders nutzerfreundlich zu sein. Während Distributionen wie Batocera eine Erfahrung wie aus einem Guss bieten, ist das für Emulation in SteamOS nicht der Fall. Abhilfe schafft hierbei EmuDeck. Dieses installiert ein Frontend als App, welche sich in den Gaming-Modus unter SteamOS integriert.

EmuDeck bzw. EmulationStation nach der Installation

Um EmuDeck zu installieren, muss in den Desktop-Modus des SteamOS gewechselt werden. Dort muss im Browser auf die EmuDeck-Webseite gewechselt werden und dort die Linux-Installation heruntergeladen werden. Diese startet nach der Ausführung den eigentlichen Installer. Hier kann das System wie gewünscht konfiguriert werden. Spätere Updates laufen dann ebenfalls über das Interface im Desktop-Modus. Nach der Installation kann wieder in den Gaming-Modus gewechselt werden.

Ollama unter Ubuntu 24.04 installieren

Ollama, ein Werkzeug um Large Language Models lokal auszuführen, kann auch auf einem Server z. B. unter Ubuntu 24.04 genutzt werden. Zur Installation wird das Installationsskript auf dem Server ausgeführt:

curl -fsSL https://ollama.com/install.sh | sh

Dieses Skript legt einen Nutzer ollama auf dem System an und installiert Ollama:

curl -fsSL https://ollama.com/install.sh | sh
>>> Installing ollama to /usr/local
>>> Downloading ollama-linux-amd64.tar.zst
######################################################################## 100.0%
>>> Creating ollama user...
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
>>> The Ollama API is now available at 127.0.0.1:11434.
>>> Install complete. Run "ollama" from the command line.

Anschließend kann Ollama über das Kommando ollama gesteuert werden. Ein erstes Modell könnte mittels:

ollama run gpt-oss

heruntergeladen und ausgeführt werden. Soll das Modell wieder gestoppt werden, so kann der Befehl:

ollama stop gpt-oss

genutzt werden. Soll ein Modell nur heruntergeladen werden, kann hierfür das Subkommando pull genutzt werden:

ollama pull gpt-oss

Die Daten von Ollama werden im Ordner /usr/share/ollama/ gespeichert. Dort finden sich auch die Modelle im Unterordner .ollama/models. Wer die aktuell laufenden Modelle sehen möchte, kann dies mit dem Befehl:

ollama ps

bewerkstelligen. Das Kommando:

ollama list

hingegen listet alle installierten Modelle auf. Ollama selbst stellt unter 127.0.0.1:11434 eine API bereit, die bei einem sinnvoll konfigurierten Server allerdings nicht von außen erreichbar sein sollte.

Wer diese API von außen erreichbar machen möchte, kann Nginx als Reverse Proxy nutzen. Dazu muss die Datei /etc/systemd/system/ollama.service angepasst und dort kann das Interface auf welchen gehört werden soll, sowie die erlaubten Origins konfiguriert werden:

Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"

Danach muss die SystemdUnit neu gestartet werden:

systemctl daemon-reexec
systemctl daemon-reload
systemctl restart ollama

Anschließend kann die eigentliche Nginx-Konfiguration erstellt werden:

map $http_authorization $allow_ollama {
  default 0;
  "Bearer secret123" 1;
  "Bearer secret345" 1;
}

server {

  server_name api.example.org;

  ...

  # Ollama
  location ^~ /ollama/ {

    # Auth
    if ($allow_ollama = 0) { return 401; }

    # Proxy pass
    proxy_pass http://localhost:11434/;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 60s;  # Upstream TCP connect timeout
    proxy_send_timeout    60s;  # Upstream request send timeout
    proxy_read_timeout    300s; # Upstream response read timeout
    send_timeout          60s;  # Client response send timeout

    # Do not forward the token to the backend
    proxy_set_header Authorization "";
  }
}

In dieser wird eine Map mit Bearern definiert, die der Authentifizierung dienen und die API wird über eine ReverseProxy-Konfiguration nach außen gegeben. Ein Beispiel-Aufruf könnte dann wie folgt aussehen:

curl https://api.example.org/ollama/api/chat \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer secret123" \
  -d '{
    "model": "gpt-oss",
    "messages": [
      { "role": "user", "content": "Schreibe einen Haiku über den Frühling." }
    ],
    "stream": false
  }'

Und schon läutet das Ergebnis den Frühling ein:

Frühling ruft leise,
Bäume wachen, Sonne lacht,
Träume fliegen hoch.

Aktualisierungsskript für Ubuntu-Rechner

Für Ubuntu-Rechner habe ich es mir seit vielen Jahren angewöhnt ein Skript upgrade.sh zu erzeugen, welches installierte Pakete auf den aktuellen Stand bringt:

#!/bin/sh
apt autoremove -y && apt autoclean -y && apt update && apt full-upgrade -y && apt autoremove -y && apt autoclean -y
snap refresh

Bei apt wird autoremove und autoclean vor und nach dem Upgrade aufgerufen, um bei Systemen mit wenig Speicherplatz für möglichst viel freien Platz zu sorgen. Technisch unspektakulär, aber eine zuverlässige kleine Routine, die die Systempflege deutlich erleichtert.

Aufnahme mittels SoX unter macOS

Wer auf der Suche nach einer Möglichkeit ist, im Terminal unter macOS, eine Aufnahme in eine Datei zu schreiben, kann hierfür SoX nutzen. Dazu sollte dieses im ersten Schritt über Homebrew installiert werden:

brew install sox lame

Neben dem Paket für SoX wird lame installiert um eine Encodierung zu MP3 zu ermöglichen. Nach der Installation kann die Aufnahme im Terminal mittels:

sox -t coreaudio "default" -C 256 output.mp3

gestartet werden. In diesem Fall stellt default das Gerät dar, von dem aufgenommen wird. Anschließend wird über den aktuellen Status der Aufnahme informiert:

Input File     : 'default' (coreaudio)
Channels       : 2
Sample Rate    : 48000
Precision      : 32-bit
Sample Encoding: 32-bit Signed Integer PCM

In:0.00% 00:00:05.23 [00:00:00.00] Out:250k  [    ==|==    ]        Clip:0

Soll die Aufnahme gestoppt werden, kann dies mittels Control + C, erledigt werden.

Command not found: compdef

Nach der Installation von Angular unter macOS erschient im Terminal beim Start folgende Meldung:

/dev/fd/12:18: command not found: compdef

Hintergrund ist das bei der Installation von Angular die Konfigurationsdatei .zshrc der Shell angepasst wurde:

# Load Angular CLI autocompletion.
source <(ng completion script)

Um das Problem zu lösen, kann die betreffende Änderung in der Konfigurationsdatei entfernt werden. Alternativ kann die generelle Autovervollständigung vor dem Laden der Angular-Autovervollständigung aktiviert werden:

# Init command-line completion
autoload -Uz compinit
compinit

Anschließend sollte die entsprechende Meldung nicht mehr auftreten.