Andreas

Forgejo selbst hosten

01. September 2026 · Anwendungen · andreas · Kein Kommentar

Seit mehr als 10 Jahren ist hier für die Verwaltung der heimischen Software-Projekte Fossil im Einsatz. Da ich beruflich seit einiger Zeit git verwende, lag der Gedanke nahe, auch privat noch einmal über den Einsatz von git nachzudenken.

Eine Versionsverwaltung lässt sich natürlich auch nur auf den lokalen Client beschränkt verwenden, spielt ihre wahren Stärken aber erst zusammen mit einer Plattform wie z.B. GitHub oder Codeberg aus. Fossil hatte dies recht elegant durch einen integrierten Webserver gelöst.

Bei der Auswahl waren für mich zwei Kriterien wichtig:

  • Hosting im heimischen Netz möglich und
  • ein möglichst geringer Installations- und Wartungsaufwand.

Letztendlich soll die Plattform Arbeit abnehmen, weshalb nach Sichtung der verfügbaren Alternativen Schwergewichte wie z.B. GitLab direkt aus dem Kreis der möglichen Kandidaten gestrichen wurden. Die Wahl fiel letztendlich auf Forgejo, welches als leichtgewichtige und freie Software unter dem Dach des Codeberg e.V. entwickelt wird.

Als Installationsvariante habe ich den Weg “Installation from binary” gewählt, diesen allerdings leicht angepasst bzw. abgewandelt. Zum Betrieb reicht ein schlanker LXC-Container, der mit 1GB Ram und 2 Cores für den heimischen Bedarf fast schon überdimensioniert ist.

Falls noch nicht vorhanden, müssen auf dem zukünftigen Forgejo-System noch ein paar zusätzliche Pakete nachinstalliert werden:

# apt install gnupg2 git git-lfs

Herunterladen

Das Herunterladen und Verifizieren erfolgt gemäß der offiziellen Anleitung:

# wget https://code.forgejo.org/forgejo/forgejo/releases/download/v16.0.2/forgejo-16.0.2-linux-amd64 ... # gpg --keyserver keys.openpgp.org --recv EB114F5E6C0DC2BCDD183550A4B61A2DC5923710 ... gpg: key A4B61A2DC5923710: public key "Forgejo <contact@forgejo.org>" imported gpg: Total number processed: 1 gpg: imported: 1 # wget https://code.forgejo.org/forgejo/forgejo/releases/download/v16.0.2/forgejo-16.0.2-linux-amd64.asc ... # gpg --verify forgejo-16.0.2-linux-amd64.asc forgejo-16.0.2-linux-amd64 gpg: Signature made Thu Jul 30 22:59:44 2026 CEST gpg: using EDDSA key 3BF4E813F84812411DA01E5BC4186DF66F4B6750 gpg: Good signature from "Forgejo <contact@forgejo.org>" [unknown] gpg: aka "Forgejo Releases <release@forgejo.org>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: EB11 4F5E 6C0D C2BC DD18 3550 A4B6 1A2D C592 3710 Subkey fingerprint: 3BF4 E813 F848 1241 1DA0 1E5B C418 6DF6 6F4B 6750

Vorbereitung

Abweichend von der offiziellen Anleitung habe ich forgejo mitsamt Daten- und Konfigurationverzeichns komplett unter “/opt/forgejo” installiert.

# mkdir -p /opt/forgejo/bin # mkdir -p /opt/forgejo/data # adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git # chown -R git:git /opt/forgejo # chmod 750 /opt/forgejo

Auf die ausführbare Datei (Forgejo kommt als Single-Binary) habe ich einen symbolischen Link gesetzt, damit bei einem Update lediglich der Link angepasst werden muss. Auch auf eine zusätzliche Datenbank-Instanz habe ich verzichtet und verwende das integrierte SQLite.

# mv forgejo-16.0.2-linux-amd64 /opt/forgejo/bin/ # chmod +x /opt/forgejo/bin/forgejo-16.0.2-linux-amd64 # ln -s /opt/forgejo/bin/forgejo-16.0.2-linux-amd64 /opt/forgejo/bin/forgejo

Systemd-Dienst

Der Start erfolgt über einen Systemd-Dienst, hier habe ich die Pfade entsprechend angepasst.

/etc/systemd/system/forgejo.service
[Unit] Description=Forgejo (Beyond coding. We forge.) After=syslog.target After=network.target [Service] RestartSec=2s Type=notify User=git Group=git WorkingDirectory=/opt/forgejo/ ExecStart=/opt/forgejo/bin/forgejo web --config /opt/forgejo/config/app.ini Restart=always Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/opt/forgejo [Install] WantedBy=multi-user.target

Anschließend werden die Systemd-Dateien neu eingelesen und der Dienst gestartet:

# systemctl daemon-reload # systemctl enable forgejo.service # systemctl start forgejo.service

Die weitere Konfiguration wird über die Weboberfläche erledigt, diese erreicht man über http://forgejo.internal:3000/ (oder wie auch immer der lokale Server benannt wurde).

Umstellung auf SSL, Port 443

Wer möchte, kann Forgejo auf SSL umstellen und den Standard-Port auf 443 umändern. Hierzu werden als erstes ein paar Einträge in der service-Datei ergänzt, damit der unpriviegierte git-Benutzer die Erlaubnis hat, den Dienst auf einem Port kleiner 1024 zu starten.

/etc/systemd/system/forgejo.service
... AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_BIND_SERVICE PrivateUsers=false ...

Zusätzlich werden in der “app.ini” noch ein paar Anpassungen für Protokoll und Port vorgenommen sowie die Zertifikate hinterlegt:

/opt/forgejo/config/app.ini
... PROTOCOL = https CERT_FILE = /opt/forgejo/config/forgejo.internal.crt KEY_FILE = /opt/forgejo/config/forgejo.internal.key ROOT_URL = https://forgejo.internal HTTP_PORT = 443 ...

Nach einem Neustart des Dienstes kann Forgejo dann über die als ROOT_URL angegebene Adresse aufgerufen werden.


Hörenswert #132: Floor Jansen - Bring Me Silence

28. August 2026 · Hörenswert · andreas · Kein Kommentar

Link zu Youtube

Mit “Bring Me Silence” wirft Floor Jansens im Januar 2027 erscheinendes Soloalbum “Hytress” nach “Run” bereits den zweiten Schatten voraus. Deutlich metallischer als die Songs auf “Paragon” nähert sich Floor gefühlt wieder Revamp-Zeiten.


Kingdom Come Deliverance: A Woman's Lot - Frustreiche Spielzeitverlängerung

20. August 2026 · Spiele · andreas · Kein Kommentar

DLCs sind eine Wundertüte: von kosmetischen Änderungen oder zusätzlichen Items bis hin zu einem “Blood & Wine”, welches das Hauptspiel “The Witcher 3” fast in den Schatten stellt, ist vieles denkbar und möglich.

Theresa

Auch die Erweiterung “A Woman’s Lot” für Kingdom Come Deliverance klingt nach einer guten und interessanten Idee: den Überfall auf Skalitz nicht nur aus der Sicht von Henry, sondern auch aus der Perspektive seiner Retterin Theresa zu erleben.

Leider machen aber das seltsame Speichersystem in Zusammenarbeit mit nur wenigen und schlech gewählten Speicherpunkten sowie künstlich erschwerten Quests das Erlebnis eher zum frustigen Erlebnis - hier einige Beispiele:

Die Quest “Ties that bind” beinhaltet neben einer Suche nach Verbandsmaterial auch die Aufgabe, 10 Merigold-Pflanzen zu beschaffen. Theoretisch kein Problem, allerdings hat man für diesen Questabschnitt offensichtlich die Generierung dieser Pflanzenart im Questgebiet künstlich eingeschränkt, so daß diese nur an einer im Dunkeln eher mühsam auffindbaren Stelle überhaupt wachsen, was zu Threads wie “A Woman’s Lot - Did anyone manage to find the plant Marigold?” führt.

Theresa and Samuel during 'Ties that bind'

Theoretisch hat Theresa einen Begleiter namens Tinker, der oft stört um dann nicht da zu sein, wenn man ihn brauchen würde. Hat man Tinker im falschen Moment einen “Stay!"-Befehl gegeben, so führt bei der Quest “Aftermath” eine automatisch getriggerte Schnellreise mit Holba zurück in Richtung Skalitz, während der Hund weiterhin am Startpunkt verweilt - nur um in Zwischensequenzen dann doch wieder mit Theresa durch’s Bild zu streifen.

Die Nebenquest “Angel Of Mercy” ist viergeteilt. Während der Abschnitt rund um Julian eher einen “Wie, das war’s schon?"-Moment beschert, sind bei Jarmila und Stanislav jeweils angriffslustige NPCs unterwegs. Warum hier zwischen den Lösungen der Teilaufgaben und auch nach Questabschluss keine automatische Speicherung erfolgt, wissen hoffentlich wenigstens die Entwickler.

Dazu kommen noch viele Kleinigkeiten wie z.B. grundsätzlich fehlende Schnellreisemöglichkeiten, die fehlende Möglichkeit zum Kleidungswechsel oder selbst nach dem Überfall auf Skalitz keine Möglichkeit, ein Pferd benutzen zu dürfen.

Alles in allem fühlt sich “A Woman’s Lot” massiv nach einer vergebenen Chance und nach einem Versuch an, mittels künstlich errichteter Barrieren und Schwierigkeiten eine möglichst hohe “Spieldauer” zu konstruieren.


Deep Purple - When Hell Freezes Over

15. August 2026 · Verschiedenes · andreas · Kein Kommentar

Seitdem Don Henley die Antwort “when Hell freezes over” auf die Frage nach einer möglichen Reuion der Eagles gegeben hat, ist der Ausdruck bei vielen Musik-Fans zu einem Synonym für “wird nie passieren” geworden.

Ian Paice, Ian Gillan & Ritchie Blackmore; Image &copy; Philly Upstart

Daß manchmal Unmögliches doch möglich wird, haben Deep Purple und Ritchie Blackmore am 12. August 2026 im Jones Beach Theatre, New York bewiesen. Seit dem letzten gemeinsamen Konzert am 17. November 1993 in Helsinki herrschte Funktstille und auch zur Aufnahme in die Rock & Roll Hall Of Fame waren zwar mit David Coverdale und Glenn Hughes zwei ehemalige Bandmitglieder erschienen, das Gründungsmitglied glänzte aber durch Abwesenheit.

Letztendlich war es wohl Ritche Blackmore, der sich bei Ian Gillan nach der Möglichkeit eines gemeinsamen Jams erkundigte. Ian Gillan und die anderen Deep Purple-Mitglieder fanden die Idee offensichtlich gut und so kam es nach 33 Jahren - wenn auch nur für ein gemeinsames “Smoke On The Water” - zu einem gemeinsamen Auftritt, als die Band fast vor Blackmores Haustür spielte.


Quake unter Linux

05. August 2026 · Spiele · andreas · Kein Kommentar

Zum 30. Geburtstag war es mal wieder Zeit, eine Runde durch das “originale” Quake zu drehen.

Quake!

Obwohl zwischenzeitlich eine überarbeitete PC-Version veröffentlicht wurde, ist diese leider nur für Windows erschienen. Da aber der Quellcode des originalen Quake von id Software als Open Source freigegeben wurde, kann man zum nativen Spielen unter Linux glücklicherweise auf verschiedene Engines in den Distributionsquellen zurückgreifen. Eine Darstellung recht nah am Original liefert das Paket quakespasm, welches in den Debian-Quellen enthalten ist:

QuakeSpasm is a Unix-friendly Quake engine based on the SDL port of the popular FitzQuake. It includes some new features, important fixes, and aims for portability and correctness.

Wer das Rundum-Sorglos-Paket möchte, kann das Paket “quake” installieren, welches auch gleich den “game-data-packager” mitinstalliert. Dieser schnürt für eine ganze Reihe von Spielen mehr oder minder vollautomatisch aus bereits vorhandenen Spiel-Installationen oder Original-CDs die benötigten Datenpakete.

Wer möchte, kann aber auch mit Hilfe einer Minimalinstallation und ein paar Befehlen auf der Kommandozeile eine spielfähige Installation erstellen.

Sollte man das Original-Spiel nicht oder nicht mehr besitzen, so gibt es mehr oder minder regelmäßig bei GOG.com für wenig Geld die Originalversion zu erwerben.

Die Installation der Engine erfolgt durch das Paket “quakespasm”:

$ sudo apt install quakespasm

Anschließend kann mit Hilfe von “innoextract” das Installationspaket entpackt werden

$ sudo apt install innoextract $ innoextract setup_quake_the_offering_2.0.0.6.exe Extracting "Quake - The Offering" - setup data version 5.5.0 (unicode) ... - "app/id1/config.cfg" - overwritten - "app/id1/autoexec.cfg" - "app/id1/PAK0.PAK" - "app/id1/PAK1.PAK" ... Done.

Standardmäßig sucht QuakeSpasm die Spieldateien in einem Verzeichnis “id1” im Benutzerverzeichnis.

$ /usr/games/quakespasm Command line: /usr/games/quakespasm Found SDL version 2.32.4 Detected 12 CPUs. Initializing QuakeSpasm v0.96.3 Host_Init Playing shareware version. ERROR-OUT BEGIN QUAKE ERROR: W_LoadWadFile: couldn't load gfx.wad Basedir is: /home/andreas Check that this has an id1 subdirectory containing pak0.pak and pak1.pak, or use the -basedir command-line option to specify another directory.

Wer die Dateien lieber an einer anderen Stelle in Dateisystem ablegen möchte, kann dies ebenfalls tun und muß den Aufruf des Clients um den Parameter “-basedir” ergänzen:

$ mkdir /<PFAD>/Quake $ cp -r --preserve=timestamps app/id1 /<PFAD>/Quake $ cp -r --preserve=timestamps app/hipnotic /<PFAD>/Quake $ cp -r --preserve=timestamps app/rogue /<PFAD>/Quake $ cp --preserve=timestamps app/goggame-1435828198.ico /<PFAD>/Quake $ /usr/games/quakespasm -basedir /<PFAD>/Quake

Obwohl der Pfad stimmt, scheitert der Aufruf allerdings erneut mit einem Fehler:

Check that this has an id1 subdirectory containing pak0.pak and pak1.pak, or use the -basedir command-line option to specify another directory.

Der Grund hierfür ist, daß Linux im Gegensatz zu Windows bei Dateinamen zwischen Groß- und Kleinschreibung unterscheidet und “pak0.pak” sowie “pak1.pak” nicht gefunden werden, da sie als “PAK0.PAK” und “PAK1.PAK” auf der Festplatte liegen. Wenn man dies korrigiert, kann auch gleich der nicht benötigte Ordner “glquake” entsorgt werden.

$ mv /<PFAD>/Quake/id1/PAK0.PAK /<PFAD>/Quake/id1/pak0.pak $ mv /<PFAD>/Quake/id1/PAK1.PAK /<PFAD>/Quake/id1/pak1.pak $ rm -r /<PFAD>/Quake/id1/glquake

Um das Starten komfortabler zu gestalten, fehlt noch eine “.desktop”-Datei:

.local/share/applications/Quake.desktop
[Desktop Entry] Type=Application Encoding=UTF-8 Name=Quake Exec=/usr/games/quakespasm -basedir /<PFAD>/Quake Icon=/<PFAD>/Quake/goggame-1435828198.ico Terminal=false Categories=Game

In dem von GOG vertriebenen Paket sind auch die beiden Erweiterungen “Quake Mission Pack I: Scourge of Armagon” (von Hipnotic Interactive) sowie “Quake Mission Pack II: Dissolution of Eternity” (von Rogue Entertainment) enthalten, deren Aufruf jeweils mit einem entsprechenden Parameter erfolgt:

/usr/games/quakespasm -basedir /<PFAD>/Quake -hipnotic /usr/games/quakespasm -basedir /<PFAD>/Quake -rogue

Musik

GOG liefert auch die Images der originalen CDs mit, jeweils als Kombination aus “cue” und “bin”-Datei. Damit die Musik innerhalb des Spiels verwendet werden kann, müssen die Audio-Tracks aus den Images extrahiert werden, was am einfachsten mit bchunk funktioniert, welches ebenfalls in den Debian-Quellen vorhanden ist.

$ sudo apt install bchunk

Nach der Installation wird dann zuerst die Musik des Hauptspiels extrahiert. Die Musik beginnt immer bei Track 2, Track 1 enthält den Datenteil der Original-CD:

$ bchunk -w game.gog game.cue track ... Writing tracks: 1: track01.iso 117/117 MB [********************] 100 % 2: track02.wav 52/52 MB [********************] 100 % 3: track03.wav 24/24 MB [********************] 100 % 4: track04.wav 84/84 MB [********************] 100 % 5: track05.wav 61/61 MB [********************] 100 % 6: track06.wav 75/75 MB [********************] 100 % 7: track07.wav 87/87 MB [********************] 100 % 8: track08.wav 56/56 MB [********************] 100 % 9: track09.wav 65/65 MB [********************] 100 % 10: track10.wav 36/36 MB [********************] 100 % 11: track11.wav 52/52 MB [********************] 100 %

Anschließend werden die Audio-Dateien in das noch anzulegende Unterverzeichnis “music” kopiert, wo sie dann automatisch verwendet werden:

$ mkdir /<PFAD>/Quake/id1/music $ mv *.wav /<PFAD>/Quake/id1/music $ rm *.iso

Die Musik zur Erweiterung “Scourge Of Armagon” ist in den Dateien “gamea.cue” / “gamea.gog” enthalten und muß in ein Unterverzeichnis des “hipnotic”-Ordners:

$ bchunk -w gamea.gog gamea.cue track ... Writing tracks: 1: track01.iso 58/58 MB [********************] 100 % 2: track02.wav 32/32 MB [********************] 100 % 3: track03.wav 32/32 MB [********************] 100 % 4: track04.wav 30/30 MB [********************] 100 % 5: track05.wav 32/32 MB [********************] 100 % 6: track06.wav 32/32 MB [********************] 100 % 7: track07.wav 31/31 MB [********************] 100 % 8: track08.wav 30/30 MB [********************] 100 % 9: track09.wav 30/30 MB [********************] 100 % $ mkdir /<PFAD>/Quake/hipnotic/music $ mv *.wav /<PFAD>/Quake/hipnotic/music $ rm *.iso

Die Musik zur Erweiterung “Dissolution Of Eternity” ist in den Dateien “gamed.cue” / “gamed.gog” enthalten und muß in ein Unterverzeichnis des “rogue”-Ordners:

$ bchunk -w gamed.gog gamed.cue track ... Writing tracks: 1: track01.iso 68/68 MB [********************] 100 % 2: track02.wav 32/32 MB [********************] 100 % 3: track03.wav 31/31 MB [********************] 100 % 4: track04.wav 31/31 MB [********************] 100 % 5: track05.wav 31/31 MB [********************] 100 % 6: track06.wav 33/33 MB [********************] 100 % 7: track07.wav 30/30 MB [********************] 100 % 8: track08.wav 31/31 MB [********************] 100 % 9: track09.wav 31/31 MB [********************] 100 % $ mkdir /<PFAD>/Quake/rogue/music $ mv *.wav /<PFAD>/Quake/rogue/music $ rm *.iso

Quakespasm unterstützt verschiedene Audioformate - wer ohne Klangverlust noch etwas Plattenplatz sparen möchte, kann die entpackten “wav”-Dateien in “flac” konvertieren:

$ for wav in *.wav; do flac $wav; done