Posts

WeeChat als IRC-Client: Nicht-Standard ~/.config/weechat

Wie ich WeeChat mit ZNC und dem Lab-IRC-Stack betreibe — Bars, Buffer, Trigger, Secrets und Scripts

Ich nutze WeeChat als IRC-Frontend im Zusammenspiel mit dem ZNC + InspIRCd-Setup im Lab.

WeeChat im Lab — buflist links, grau/orange Transcript, Nicklist rechts, Tab **highmon**.

Setup

Für die deklarative Konfiguration und den Rollout verwende ich Home-Manager. Mein Flake zur Verwaltung meiner Systeme findest du hier. Ich schreibe bei Zeiten mal einen Blogpost dazu.

Netzwerke und ZNC

Vier IRC-Server in irc.conf — drei über Bouncer, einer legacy - warum idle ich eigentlich immer noch im Quakenet? - direkt:

  • Zu libera, hackint und local - dem cluster-internen IRCd verbinde ich mich über den IRC Bouncer (ZNC) der über bnc.this-is-fine.social/+6697 via TLS erreichbar ist. Für ZNC aktiviere ich weitere IRC-Capabilities (znc.in/server-time-iso, znc.in/self-message, …).
flowchart LR WC[WeeChat] ZNC[ZNC TLS SASL] LAB[bnc.this-is-fine.social] INSP[InspIRCd hydra] QN[irc.quakenet.org plain] WC --> ZNC WC --> LAB LAB --> INSP WC --> QN
Die Serverpasswörter liegen verschlüsselt in ${sec.data} und die Passphrase hierfür wird beim Startup von WeeChat über pass mit passphrase_command = "pass show apps/weechat/passphrase" entschlüsselt:

Layout: Bars und Buffer

weechat.conf definiert ein eigenes Bar-Set — die Statuszeile unten ist absichtlich weg; Kontext steckt in der Title-Bar:

Von Mastodon zu snac: ein leichterer Fediverse-Stack

Warum das Lab PostgreSQL, Redis und Object Storage gegen eine filesystem-basierte snac-Instanz getauscht hat — mit VolSync-Restic-Backups.

Mastodon auf Kubernetes ist ein kleines SaaS in sich: PostgreSQL, Redis-kompatibler Cache, S3-artiger Media-Storage, Sidekiq, Streaming — unter this-is-fine.social lief das stabil. Für eine Handvoll lokaler Nutzer und leichte ActivityPub -Federation war es trotzdem zu viel zu babysitten: CNPG-Backups, Cache-TLS, Bucket-Credentials, Image-Upgrades — Nachtschichten für ein persönliches Konto.

Heute bedient dieselbe Domain snac („Social Networks Are Crap“): ein minimaler ActivityPub-Server in portablem C, ohne Datenbank, gesamter State in einem Verzeichnisbaum. Off-Cluster-Backup nutzt dasselbe VolSync + restic-Muster wie Pocket ID oder ZNC.

Manifeste im Seed-Repo: k8s/clusters/hydra/applications/fediverse-system/snac/ — Mastodon bleibt auskommentiert in k8s/clusters/hydra/overlays/apps/kustomization.yaml (Referenz only). Image-Build: images/snac/ im Monorepo, Registry oci.this-is-fine.io/snac/snac.

Was Mastodon im Cluster gekostet hat

Der Beitrag Mastodon im Lab beschreibt den alten Stack; operativ reduziert sich das auf:

SchichtMastodon-StackOperativer Aufwand
AppWeb + streaming + sidekiqGroße Images, viele Prozesse
SQLCloudNative-PGCluster, Backups, Upgrades
CacheDragonflyExtra Deployment, TLS
MediaRook-Ceph RGWBuckets, Credentials, S3-Quirks
EdgeGateway APIWeiterhin nötig für Federation

Mastodon ist exzellente Software — für „Fediverse-Konto auf eigener Domain ohne Mini-Plattform“ im Homelab aber überdimensioniert. snac dreht die Gleichung um: weniger Moving Parts, mehr „ein PVC, ein Baum, fertig“.

Den Tailscale-Operator für Headscale nachbauen: Das tailnet-gateway

Warum der offizielle Tailscale-Kubernetes-Operator nicht zu meinem selbstgehosteten Headscale passt — und wie ich die Teile, die ich brauche, als ein einziges StatefulSet nachgebaut habe

Mein Lab hängt an einem selbstgehosteten Headscale — einer quelloffenen Reimplementierung der Tailscale-Control-Plane. Das funktioniert wunderbar für Menschen und für die Talos-Knoten. Sobald ich aber wollte, dass auch die Cluster-Dienste sauber im Tailnet auftauchen — die Kubernetes-API, die Talos-API, die clusterinterne Namensauflösung —, stieß ich auf eine Lücke: Der offizielle Tailscale-Kubernetes-Operator ist für die Tailscale-SaaS gebaut, nicht für Headscale. Also habe ich die Teile, die ich tatsächlich brauche, selbst nachgebaut. Das Ergebnis ist ein einziges, gut lesbares StatefulSet: das tailnet-gateway.

Von Mastodon zu snac: Ein Fediverse-Server, der in einen Ordner passt

Warum ich den ausgewachsenen Mastodon-Stack gegen snac getauscht habe — einen ActivityPub-Server ohne Datenbank, Cache oder Object-Storage

Vor einer Weile habe ich ausführlich beschrieben, wie meine Mastodon-Instanz auf Kubernetes aufgebaut ist — und schon damals durchklang, dass dieser Stack für genau ein menschliches Konto reichlich überdimensioniert ist. Inzwischen habe ich die Konsequenz gezogen: this-is-fine.social läuft heute auf snac , einem ActivityPub-Server, der in einen einzigen Verzeichnisbaum passt.

Das OCI-Format und der Wechsel von Harbor zu Zot

Warum OCI mehr ist als nur Docker-Images, weshalb mein Build daemonlos mit Skopeo und Crane statt docker push arbeitet — und wie Zot mein schwergewichtiges Harbor abgelöst hat

„Container-Image“ ist im Sprachgebrauch fast zum Synonym für „Docker“ geworden — dabei ist das Format längst von Docker entkoppelt und in der Open Container Initiative (OCI) standardisiert. Dieser Beitrag erklärt, was das konkret bringt, warum meine Build-Pipeline deshalb mit Skopeo und Crane statt docker push arbeitet, und wie ich meine bisherige Harbor-Registry gegen das deutlich schlankere Zot getauscht habe.