6.12.2025 - Proxmox

Ein Umfangreiches Programm installieren, ohne den eienen PC zu zerschiessen? Ein neues Betriebssystem einfach mal ausprobieren, ohne die Funktion des aktuellen Systems zu riskieren? Mehrere Dienste anbieten, die sich gegenseitig nicht beeinflussen?

Für diese und andere Zwecke ist Docker ein bewährtes Werkzeug geworden. Es gibt kaum noch einen Server-Dienst, den man nicht auch als Docker-Image haben kann, und zunehmend erobern Docker-Container auch den bereich der GUI-Anwendungen, oder sogar ganzer Windows-Installationen.

Etwas störend ist allenfalls, dass Docker mitsamt seinen Containern auf einem PC läuft, den man vcielleicht auch für anderes braucht, und dass jeder noch so kleine Dienst ein ganzes Betriebssystem “mitschleppt”.

Wenn man einen passenden Computer “übrig” hat (bei mir zum Beispiel ein ausrangierter Server, dem ich den laufenden Praxisbetrieb aus Altersgründen nicht mehr zutrauen mag), kann man dort einen “Hypervisor” installieren.

Das ist, wenn man das ganze mit dem Begriff verbundene Tech-Geschwurbel mal weglässt, einfach ein Betriebssystem, das darauf spezialisiert ist, virtuelle Maschinen zu verwalten.

Auf so einem Gerät kann man in weniger als einer Minute einen kompletten virtuellen PC installieren und starten, und ebenso schnell wieder löschen. Ein solcher virtueller PC lässt sich nicht von anderen Computern im LAN unterscheiden. Er ist je nach zugeordneten Hwrdware-Ressourcen ebenso leistungsfähig, wie irgendein anderer.

Für einen Hypervisor kann man viel Geld ausgeben, wenn man ihn zum Beispiel bei Broadcom lizensiert. Man kann aber auch einen OpenSource-Hypervisor auf Linux-BNasis erst mal kostenlos installieren und nutzen.

Proxmox Virtual Environment kommt mit einem sehr einfachen Installer, den man einfach auf CD oder USB-Stick schreiben und vorn dort aus booten kann. Danach kann man mit dem Browser auf serveradresse:8006 navigieren und das System administrieren.

Proxmox kennt zwei verschiedene Arten von virtuellen Systemen:

Virtual Machines (VM):

Die sind vergleichbar mit Docker-Containern. Eine VM kann ein beliebiges Betrienbssystem enthalten, sofern es auf dem X86-Prozessor des Hosts ausführbar ist. Es braucht aber auch entsprechend Platz und Ressourcen. EIne VM erstellt man mit dem blauen Button “Create VM” rechts oben. Danach muss man einen Namen für die Maschine eingeben und dann ein Start-Image auswählen. Das kann entweder eine CD/DVD im physischen Laufwerk sein, oder eine ISO-Datei. Letztere muss man allerdings zuerst hochladen. Die Option dafür ist ein wenig versteckt: Gehen Sie in der Dropbox links oben auf “Folder view”, klappen Sie dann “Storage” auf. Wählen Sie das lokale Laufwerk und dort dann “ISO-Images”:

Upload ISO

Wählen Sie “Upload”, wenn Sie eine entsprechende ISO-Datei schon auf Ihrem Computer haben, oder “Download from URL” um eine Adresse zum Herunterladen einzugeben.

Wenn Sie die passende ISO-Datei haben, können Sie diese dann beim Erstellen der VM eintragen:

select ISO

Bei den weiteren Otionen können Sie meist die Voreinstellung belassen. Wenn in der Auswahl vorgesehen, können Sie mit “virt…” Geräten eine etwas bessere Performance erreichen: Paravirtualisierte Hardware geift direkt auf die Geräte des Hosts zu, statt sie mittels Software zu emulieren, und gewinnt dadurch Leistung auf Kosten der dann nicht mehr so vollständigen Isolierung vom Hostsystem. Am Ende können Sie die Maschine starten und sich sofort mit der Konsole verbinden:

Konsole

Von hier aus können Sie z.B. einen openssh-server installieren, um sich auch unabhöngig von Proxmox mit dieser virtuellen Maschine verbinden zu können, oder auch einen grafischen Deskop installieren, auf den Sie sich mit VNC, X2Go oder xrdp verbinden können (siehe weiter unten).

Linux Container (lxc)

Das sind “leichtgewichtige” Container. Diese bringen kein komplettes Betriebssystem mit, sondern nutzen das des Host-Systems. Darum kommen als lxc nur Linux-Varianten in Frage. Einen Container erstellen Sie mit dem blauen Button “Create CT” rechts oben. Als erstes müssen Sie mindestens einen Namen und ein Passwort für die Maschine eingeben. Anstelle eines ISO Images müssen Sie dann ein “Template” auswählen. Auch das müssen Sie dem System zunächst zur Verfügung stellen. Das geht in gleicher Weise, wie oben für ISO beschrieben:

CT Images

Ansonsten hat man hier nicht ganz soviele Einstellmöglichkeiten, wie für VMs. Immerhin kann man Diskgrösse, Speicherausstattung und Zahl der zugeordneten CPU-Kerne angeben. Danach startet die Maschine in wenigen Sekunden. Auch hier kann man die Ausstattung an der Konsole komplettieren, es gibt hier kaum Unterschiede zu den VMs.

Datensicherung

Proxmox Container haben einen grossen Vorteil gegenüber “echten” Computern und auch gegenüber Docker-Containern: Es ist kinderleicht, vom momentanen Zustand einer Maschine einen Snapshot zu erstellen, zu dem man jederzeit wieder zurück kann. Und ebenso leicht kann man ein komplettes Backup erstellen.

Snapshot

Also einfach immer, bevor man etwas “kritisches” in der VM installiert oder ändert, rasch einen Snapshot erstellen, was wenige Sekunden dauert, dann kann man wieder zurück, falls etwas schief gegangen ist.

Beispiel: Debian 13 mit einfachem XFCE Desktop

  • CT mit debian13 (debian-13-standard_13.1-2_amd64.tar.zst template) erstellen und starten. Einloggen als root mit dem beim Erstellen vorgegebenen Passwort
  • apt update && apt upgrade -y
  • apt install sudo openssh-server xfce4 dbus-x11 xrdp
  • adduser IhrUserName
  • adduser IhrUserName sudo

Danach können Sie von einem anderen Computer aus mit xfreerdp3 /v:adresse /u:IhrUserName /p:IhrPassword +dynamic-resolution auf diesen virtuellen debian 13-Computer mit xfce Desktop zugreifen. Wenn Sie einen Windows-PC benutzen, können Sie die Verbindung einfach mit mstsc (Windows Remoteverbindung) herstellen.

Eventuell müssen Sie das Tastaturlayout im client dann noch einmal einstellen, obwohl Sie es bei der Installation schon gemacht haben. Manchmal “vergisst” xrdp auch wieder das layout beim nächsten Login und man muss es mit setxkbmap ch wieder einstellen.

11.11.2025 - Wireguard

Ein VPN (virtual private network) dient dazu, sich von auswärts auf sichere Weise ins eigene Netwerk einzubuchen. Dazu benötigt man einen Computer im Netzwerk, der als Brücke fungiert, und Software, die den gesamten Datenverkehr verschlüsselt und die Zugriffsberechtigungen ünerprüft.

Viele Router bieten bereits die Möglichkeit, als VPN-Brücke zu dienen. Wenn das für Ihre Zwecke genügt, verwenden Sie das. Wenn nicht, möchten Sie vielleicht weiter lesen.

Hier zeige ich kurz die Installation von Wireguard, einem modernen und doch recht einfachen VPN-System. Sie können die VPN-Brücke im LAN auf einem separaten Computer installieren (z.B. einem Raspberry Pi). Clients gibt es für “fast alles”: Windows, Linux, Mac, Android, iOS).

Grundsätzlich

Eine Wireguard-Verbindung ist grundsätzlich eine Vrebindung zwischen “Peers”, also gleichberechtigten Partnern. Es gibt keine strikte Rollenverteilung, daher ist die Konfiguration auf Server und clients jeweils sehr ähnlich: Jeder Peer hat einen privaten Schlüssel, den nur er selber kennt, und einen öffentlichen Schlüssel, der zu diesem privaten Schlüssel passt, und den jeder kennen darf. (Das Prinzip der asymmetrischen Verschlüsselung habe ich früher) ausgeführt). Die Konfiguration des Peers, der als Server dienen soll, unterscheidet sich nur darin, dass zusätzlich eine Netzwerkbrücke eingerichtet werden muss, die den verbindenden Peers Adressen aus dem lokalen Netzwerk zuweist.

Damit ein wireguard client Verbindung zu einem anderne aufnehmen kann, benötigt er

  • dessen IP
  • dessen öffentlichen Schlüssel

und: Er muss diesem bekannt sein. Also sein eigener öffentlicher Schlüssel muss beim Peer eingetragen sein.

Installation und Einrichtung

  • Debian-Linux und Derivate: sudo apt install wireguard.
  • Windows: Wireguard aus dem App store.
  • Android: Wireguard aus dem Play Store.

Server

Ich zeige im Folgenden das Vorgehen für Ubuntu Linux. Andere Systeme funktionieren ähnlich

  • sudo -soder su, da für alle folgenden Schritte Administrator-Rechte nötig sind
  • wg genkey >server.key - Privaten Schlüssel erstellen (Der Dateiname ist egal)
  • wg pubkey <server.key >server.pub Passenden öffentlichen Schlüssel erstellen.

Dann /etc/wireguard/wg0.conf einrichten:

[Interface]
PrivateKey = Inhalt von server.key, z.B. UDqRf6+UaLmlcacePjIGs=

Address = 10.0.0.1/24

ListenPort = 51820

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE

Client (für jeden client separat)

  • sudo -s
  • wg genkey >client.key
  • wg genkey <client.key >client.pub

Dann auch hier eine Konfiguration in /etc/wireguard erstellen:

sudo nano /etc/wireguard/myvpn.conf

[Interface]

PrivateKey = Inhalt von client.key GFY+esEyMOaiUQxnUeE20=

Address = 10.0.0.3/24

DNS = 192.168.17.1 # Oder ein anderer DNS-Server, z.B. 1.1.1.1 oder die IP deines Routers (z.B. 192.168.1.1)

# (eventuell) PostUp = resolvectl dns pinas 192.168.1.17 && resolvectl domain pinas "~." lan

[Peer]
PublicKey = Inhalt von server.pub SkavMdbXTZ4uG+SDf=

Endpoint = meine.oeffentliche.ip:51820

AllowedIPs = 192.168.17.0/24, 0.0.0.0/0 # Leitet den gesamten Traffic über das VPN

PersistentKeepalive = 25

Clients auf dem Server bekannt machen

Für jeden client in /etc/wireguard/wg0.conf einen Eintrag anhängen:

... Anfang von wg0.conf s. oben...

[Peer] # Für jeden client [Peer], keine eigenen Namen!

PublicKey = client.pub des jeweiligen Clients 0j4y0cA0Y3qPsBg=

AllowedIPs = 10.0.0.2/32 # Für jeden Client eine eigene Adresse aus dem eingestellten Adressbereich vergeben!

Wireguard aktivieren:

Auf dem Server:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

(So wird der Wireguard Dienst bei Neustart des Servers automatisch gestartet)

Mit dem Client Verbindung herstellen:

sudo wg-quick up myvpn

Verbindung beenden:

sudo wg-quick down myvpn

Mobile Geräte

Auf mobilen Geräten ist das hier gezeigte Vorgehen mit Erstllen eines Schlüssels auf dem Client via Kommandozeile nicht praktikabel.

Man kann aber natürlich auch die client-Schlüssel auf dem Server erzeugen.

sudo -s
cd /etc/wireguard
mkdir meinhandy
wg genkey >meinhandy/client.key
wg genkey <meinhandy/client.key >meinhandy/client.pub

Dann in /etc/wireguard/wg0.conf einen [Peer]- Abschnitt mit dem Inhalt von meinhandy/client.pub erstellen, und meinhandy/client.key aufs Handy übertragen und in die wireguard-App eintragen.

Dafür gibt es eine weitere Vereinfachung:

Auf dem Server:

Die ganze myvpn.conf wie oben gezeigt mitsamt dem eben erstellten privaten Schlüssel in meinhandy erstellen.

sudo apt install qrencode

qrencode -t ansiutf8 < meinhandy/myvpn.conf

Es wird ein QR-Code angezeigt, den man mit der Wireguard-App des Handys einfach abfotografieren kann, um die Verbingung einzurichten.

1.11.2025 - Windows ohne Windows

Der Titel ist vielleicht ein wenig reisserisch, aber ja: Man kann heute Windows-Programme auf einem Linux-Computer laufen lassen. Streng genommen ging das schon länger: Mt einem Windows Terminal Server und einem oder mehreren Thin Clients, die nicht eigentliche Programme ausführen, sondern nur die Bildschirmausgabe des Terminalservers darstellen. Die Programme selber laufen auf diesem Terminalserver.

Neu ist, dass ein ganzes Windows-System auch in einem Docker Container laufen kann. Und solche Docker-Container kann man ja bekanntlich unter beliebigen Betriebssystemen starten. Der entsprechende Computer braucht dazu nicht einmal einen Bildschirm. Die Bildschirmausgabe leitet man, wie beim Terminalserver, auf einen beliebigen Client um, der ebenfalls ein beliebiges Betriebssystem haben kann.

Und verblüffenderweise ist das Ganze völlig legal. Sie brauchen dazu keine geheimnisvollen Seiten im Darknet aufzusuchen.

Am Einfachsten geht die Installation unter Linux mit WinBoat. Der Installer prüft, ob alle Voraussetzungen gegeben sind. Der Prozessor muss Virtualisierung beherrschen (das gilt heute für fast alle), und die Virtualisierung muss im Bios eingeschaltet sein (Suchen Sie nach Intel VT-x oder AMD SVM). Vermutlich müssen Sie dann noch freeRDP installieren (sudo apt install freerdp3-x11 unter Ubuntu). Den Rest erledigt WinBoat vollautomatisch. Es installiert z.B. Windows 11 von der offiziellen Microsoft-Seite. (Wählen Sie die englische Version, die deutsche scheint nicht zu funktionieren). Danach Läuft Windows 11 auf Ihrem Linux-Computer. Wenn Sie mehrere Bildschirme haben, können Sie auf einem Windows und auf einem Linux anzeigen. In diesem Windows können Sie installieren, was Sie wollen. Zum Beispiel funktioniert Microsoft Office durchaus, ebenso Elexis. Und als Besonderheit können Sie solche Programme auch direkt auf dem Linux-Desktop ausführen. statt in einem Windows-Fenster.

Leider ist WinBoat etwas unflexibel, was die Grösse des Windows-Fensters angeht: Es belegt immer einen ganzen Bildschirm. Wenn Sie das nicht wollen, können Sie freerdp auch unabhängig von WinBoat starten, sofern der Container läuft:

xfreerdp3 /u:Ihrname /p:Ihrpasswort /v:localhost +dynamic-resolution

Zeigt den Windows-Desktop in einem Fenster an, das Sie beliebig vergrössern und verkleinern können.

Mit xfreerdp3 /u:Ihrname /p:Ihrpasswort /v:localhost -w:1280 -h:1024 /scale:140 +dynamic-resolution können Sie eine Anfangsgrösse und einen internen Vergrösserungsfaktor für Windows vorgeben (100,140 oder 180).

Sie können Windows sogar in einem gewöhnliche Brower darstellen, indem Sie ihn auf http://127.0.0.1:8006 richten. Allerdings ist dann die Darstellung deutlich träger, als mit RDP.

Hier ein Beispiel des Windows-11-Desktops in einem Fenster eines Linux KDE Desktops:

Windows in Linux

Windows ohne Bildschirm

Wie oben geschrieben, braucht der Computer, auf dem Ihr Docker-Windows läuft, keinen Bildschirm. Wenn WinBoat fertig ist, hat es einen Docker-Container erstellt, den Sie zum Beispiel mit docker start WinBoat auch von einem entfernten Terminal aus starten können. (Um genau zu sein: WinBoat installiert im Hintergrund ein anderes Projekt: dockur/windows, das einen solchen Container erstellt.) Und damit haben Sie den perfekten Fernzugriff auf Ihre Praxis:

#! /bin/bash

# Z.B. mit WireGuard (separat zu installieren) ein VPN zur Praxis öffnen. Sicherheit geht vor.
sudo wg-quick up praxis

# FreeRDP starten und verbinden
xfreerdp3 /u:Ihrname /p:Ihrpassword /v:praxisserver +dynamic-resolution

# Wenn wir fertig sind, schliessen wir den Tunnel wieder
sudo wg-quick down praxis

Dank der Effizienz des RDP Protokolls können Sie so von zuhause aus über eine halbwegs schnelle DSL- oder 4G-Verbindung fast genau so mit derart bereitgestellten Windows-Programmen arbeiten, wie von einem Praxis-PC aus.

Achtung: Wählen Sie, wenn Sie fertig sind, nicht “Shut down” im Windows-Fenster, sondern “Disconnect”, um den Container nicht ganz zu stoppen.

Windows auf Windows

Natürlich können Sie auch von einem Windows-Computer auf Ihr virtuelles Windows zugreifen. Geben Sie dort einfach mstsc ein. Windows erfragt dann die Verbindungsdaten.

Elexis auf Android

Wenn Sie schon immer mal Elexis auf Ihrem Handy laufen lassen wollten, auch das geht:

Elexis auf Android

(Ja, das ist Elexis auf Windows 11, ferngesteuert mit “Windows App” auf einem Android Handy über ein VPN).

Noch ein Tip

Wenn Sie sind wie ich, dann reservieren Sie am Anfang viel zu wenig Platz für die Windows-Festplatte. Die von WinBoat vorgeschlagenen 30GB reichen jedenfalls nicht weit. Mit Java, Elexis und Office ist sie voll. Gut ist: Man kann die Platte ohne Datenverlust vergrössern (Aber natürlich sollten Sie trozdem alles Wichtige sichern, bevor Sie hier weitermachen).

  • Finden Sie die zuständige docker-compose.yml: docker inspect WinBoat|grep compose
  • Gehen Sie in dieses Verzeichnis, z.B. cd ~/.winboat und beenden Sie den Windows-Container völlig: docker compose down
  • nano docker-compose.yml
  • Finden Sie die Zeile DISK_SIZE und ändern Sie sie in z.B. 60G. Achten Sie darauf, keine Einrückungen zu verändern.
  • ^O ^X
  • docker compose up -d
  • Verbinden Sie sich wieder mit Windows
  • Drücken Sie die Windows-Taste und geben Sie ein “Disk”. Wählen Sie das Applet “create and format hardisk partitions”.
  • Auf Ihrer Festplatte sollte nun ein freier Bereich enstanden sein, in den Sie Windows (C) erweitern können. Dann war das schon alles. Aber:
  • Eventuell ist eine Recovery Partition im Weg. Die brauchen Sie nicht wirklich, da Sie dieses Windows ja jederzeit in wenigen Minuten regenerieren können. Allerdings ist sie gegen normales Löschen geschützt.
  • Starten Sie Powershell
  • Diskpart
  • list disk
  • select disk 1
  • list part
  • select part 3 (oder welche auch immer die störende Partition ist)
  • delete partition override
  • Starten Sie Windows neu
  • Öffnen Sie wieder den Festplattenmanager
  • Jetzt sollte der Raum hinter der Windows(C) - Partition frei sein.
  • Rechtsklick auf die Windows-Partition und “extend”
  • Voilà, Sie haben eine grössere Platte, ohne Datenverlust oder Neuinstallation.

Das Ganze geht schneller, als es gedauert hat, es hier aufzuschreiben.

Schlussbemerkung

Dieses Windows ist natürlich nicht aktiviert. Microsoft ist derzeit recht tolerant mit nicht aktivierten Windows-11-Installationen und vertreibt die Installer ja auch selber kostenlos. Aber das kann sich natürlich jederzeit ändern. Sie können ggf. einen key kaufen (Bei Microsoft selbst oder bei einem der vielen erheblich günstigeren Drittverkäufer, wobei es dort leider auch schwarze Schafe gibt), und Ihr Linux-Windows mit diesem key ganz nornal aktivieren.

13.6.2025 - Stable-Diffusion

Vielleicht haben die vorherigen Kapitel Sie ja neugierig auf weitere KI-Experimente gemacht. Ein ganz heisser Kandidat für nähere Beschäftigung wird vermutlich Bilderstellung mit KI sein - zumindest, sobald sie einmal hineingeschnuppert haben. Das Hineinschnuppern ist allerdings nicht ganz einfach, denn die Platzhirsche ChatGPT 4o, Midjourney, Firefly und wie sie alle heissen, sind für simples Ausprobieren zu teuer. Sie erlauben zwar kostenlose Nutzung, aber dann ist die Erstellung der Bilder sehr langsam oder kompliziert oder auf wenige Bilder begrenzt.

Vielleicht erst mal eine Idee, was man zum Beispiel machen kann: Eine Möglichkeit von Bildgeneratoren ist, aus einer Textbeschreibung ein Bild zu machen. Zum Beispiel:

a van gogh painting of a tired doctor sitting in front of a computer

Van Gogh am Computer

Oder:

a picasso painting of a tired doctor sitting in front of a computer

Picasso

Sie sehen das Prinzip. Es spielt keine Rolle, dass Van Gogh oder Picasso vermutlich eher keinen Laptop besassen. Nebst Kopien von Malern kann man auch fotorealistische oder Cartoon-ähnliche oder Anime-ähnliche Bilder einfach nur aus Textbeschreibungen erstellen.

Dies wäre nicht das Amateur-Blog, wenn es hier nicht um eine Möglichkeit ginge, KI-Bilder auf der eigenen Hardware zu erstellen. Ich stelle hier die OpenSource-Lösung Stable-Diffusion vor. Und die gute Nachricht ist: Wenn Sie den letzten Artikeln gefolgt sind, dann haben Sie schon alles, was Sie brauchen. Um Stable-Diffusion lokal laufen zu lassen, benötigen Sie:

  • Einen halbwegs modernen Computer mit mindestens 16GB RAM (Mehr ist besser)
  • Eine Grafikkarte mit mindestens 8GB RAM (16GB oder mehr ist deutlich besser). Idealerweise mit NVidia RTX-Chip,
  • Ein Betriebssystem. auf dem die Programmiersprache Python laufen kann (gilt z.B. für Linux, Mac, Windows)
  • Die Grafik-Treiber von NVidia (geht bei Windows und Mac automatisch, bei Linux braucht es manchmal bei ganz neuen Karten ein wenig Frickelei)
  • Das CUDA von NVidia, dass zu Grafikkarte und Treiber passt.

Ich schlage vor, das stable-diffusion-webui von AUTOMATIC1111 zu verwenden. Die Installation ist auf der Github-Seite sehr gut erklärt, scrollen Sie einfach zu “Installation and Running” hinunter.

Wenn alles geklappt hat, öffnet sich nach der (Durchaus einige Zeit dauernden) Installation ein Browser-Fenster, das so ähnlich wie dieses aussieht (Wenn nicht, schauen Sie weiter unten unter “Probleme bei der Installation):

WebUI

Sie erkennen hier eine Menge etwas verwirrende Felder und Einstellmöglichkeiten. Zunächst sehen Sie ganz oben, dass der Browser offenbar die Adresse http://localhost:7860 geöffnet hat. Das ist darum interessant, weil es bedeutet, dass Sie Stable-Diffusion nicht nur an dem Computer nutzen können, auf dem das Programm läuft, sondern an jedem, der diesen Computer erreichen kann. Allerdings sollten Sie dann das webui mit ./webui --listen starten.

Okay, seit ich diesen Artikel angefangen habe, habe ich mich ein wenig mit Bildgenerierung befasst und eingesehen: Das sprengt den Rahmen eines solchen Beitrags bei weitem. Die Möglichkeiten sind unendlich. Ich schlage vor, sich zum Beispiel mit dieser Seite zu befassen: Stable Diffusion beginners guide