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.

Datenträger im Terminal unter macOS formatieren

Ab und an, bietet es sich an einen Boot-Stick, z.B. für die Linux-Distribution seiner Wahl zu erstellen. Problematisch wird es, wenn versucht wird diesen über das Festplattendienstprogramm unter macOS wieder zu formatieren. Dann kann es durchaus zu Fällen kommen, in denen dies nicht mehr möglich ist. Hier bietet es sich dann an den Datenträger im Terminal zu formatieren. Im ersten Schritt muss dazu ermittelt werden, wie der konkrete Datenträger angesprochen werden muss:

diskutil list

Im Normalfall wird ein Gerät mit den Attributen external und physical gesucht:

/dev/disk14 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *62.9 GB    disk14
   1:       Microsoft Basic Data                         6.3 GB     disk14s1
   2:                        EFI ESP                     5.2 MB     disk14s2
   3:       Microsoft Basic Data                         307.2 KB   disk14s3
   4:           Linux Filesystem                         56.6 GB    disk14s4

Wurde das Gerät gefunden, kann der Datenträger ausgehängt werden:

diskutil unmountDisk /dev/disk14

Anschließend kann die eigentliche Formatierung gestartet werden:

diskutil eraseDisk ExFAT USB GPT /dev/disk14

Mit ExFAT wird in diesem Fall das Dateisystem, mit USB der Name und mit GPT das Partitionsschema definiert. Nach einer kurzen Wartezeit sollte die Formatierung dann abgeschlossen sein:

Started erase on disk14
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk14s2 as ExFAT with name USB
Volume name      : USB
Partition offset : 411648 sectors (210763776 bytes)
Volume size      : 122466304 sectors (62702747648 bytes)
Bytes per sector : 512
Bytes per cluster: 131072
FAT offset       : 2048 sectors (1048576 bytes)
# FAT sectors    : 4096
Number of FATs   : 1
Cluster offset   : 6144 sectors (3145728 bytes)
# Clusters       : 478360
Volume Serial #  : 697b38bb
Bitmap start     : 2
Bitmap file size : 59795
Upcase start     : 3
Upcase file size : 5836
Root start       : 4
Mounting disk
Finished erase on disk14

Merge unter Git erzwingen

Normalerweise ist ein Merge unter Git kein Problem. Im Terminal könnte das Ganze wie folgt aussehen:

git merge feature-xyz

Interessant wird es, wenn es dabei zu einem Fehler kommt:

fatal: refusing to merge unrelated histories

In diesem Fall besteht das Problem darin, dass die History des Quellbranches nicht mit der des Zielbranches zusammenhängt. Wer in einem solchen oder ähnliches Fall trotzdem einen Merge erzwingen möchte, kann dies mit einem zusätzlichen Parameter bewerkstelligen:

git merge feature-xyz --allow-unrelated-histories

Damit wird der Quellbranch zwangsweise in den Zielbranch gemergt.

Exportieren-Menü in Logic Pro ausgeblendet

Nach einem Update auf die 12er-Version von Logic Pro, ergab sich das Problem, dass im Menü Ablage der Punkt Exportieren komplett ausgeblendet war.

Vermutlich ergab sich das Problem mit der Migration der Einstellungen von der alten zur neuen Version. Gelöst wurde das in diesem Fall mit dem Löschen der Einstellungsdatei im Terminal:

rm ~/Library/Preferences/com.apple.logic10.plist

Nachdem Logic Pro anschließend wieder gestartet wurde, funktionierte auch das Exportieren-Menü wieder ohne Probleme.

HackerTube

Um die Vorträge des aktuellen 39th Chaos Communication Congress bequem auf dem Smartphone zu sehen, war ich auf der Suche nach einer passenden App für iOS und wurde mit HackerTube schnell fündig.

HackerTube
Preis: Kostenlos

Mit der kostenlosen App lassen sich Videos verschiedenster Veranstaltungen aus dem IT-Bereich ansehen, darunter auch die Talks des Chaos Computer Clubs. Die App bündelt Streams und Aufzeichnungen aus Community-Quellen wie media.ccc.de und macht sie mobil gut konsumierbar.

HackerTube unter iOS

Neben der Version für iOS existiert auch eine Version für den Apple TV und lässt einen die Vorträge so auf dem großen Schirm genießen.