From 3ad8c9b5a6b1ae169cc5c949f3d1ee6f7666db40 Mon Sep 17 00:00:00 2001 From: jonnybravo Date: Tue, 8 Sep 2026 11:02:29 +0200 Subject: [PATCH] first --- Caddyfile | 9 + ansible/deploy.yml | 138 ++++ ansible/pkcs11.txt | 5 + ansible/templates/Caddyfile.j2 | 11 + ansible/templates/hugo.toml.j2 | 32 + content/AWX_und_Rundeck_install.md | 131 ++++ content/Install_Browser.md | 197 ++++++ content/Stretchen_laufen.md | 23 + content/astro-vim-recommendations.md | 48 ++ content/blueray_install_manjaro.md | 44 ++ content/calcurse_tastenkürzel.md | 75 ++ content/lazygit.md | 316 +++++++++ content/networkconfig_dns.md | 187 +++++ content/string_prefixes.md | 81 +++ content/system-optimierung.md | 121 ++++ content/tinydb_vs_sqlite.md | 54 ++ content/ver_next_einbinden.md | 97 +++ content/willkommen.md | 22 + content/yubikey_setup_guide.md | 148 ++++ crt/ca.crt | 32 + crt/ca.key | 52 ++ crt/hugo-chain.crt | 60 ++ crt/hugo.crt | 28 + crt/hugo.key | 28 + crt/localhost-chain.crt | 61 ++ crt/localhost.crt | 29 + crt/localhost.key | 28 + crt/man-dan-05-chain.crt | 61 ++ crt/man-dan-05.crt | 29 + crt/man-dan-05.key | 28 + crt/ras-dan-01-chain.crt | 61 ++ crt/ras-dan-01.crt | 29 + crt/ras-dan-01.key | 28 + docker-compose.yml | 23 + site/.hugo_build.lock | 0 site/assets/css/main.css | 326 +++++++++ site/entrypoint.sh | 35 + site/hugo.toml | 37 + site/layouts/_default/baseof.html | 12 + site/layouts/_default/list.html | 19 + site/layouts/_default/rss.xml | 21 + site/layouts/_default/single.html | 19 + site/layouts/partials/footer.html | 3 + site/layouts/partials/head.html | 20 + site/layouts/partials/header.html | 8 + site/layouts/partials/toc.html | 4 + .../astro-vim-recommendations/index.html | 113 +++ .../public/awx_und_rundeck_install/index.html | 190 +++++ .../public/blueray_install_manjaro/index.html | 97 +++ site/public/calcurse_tastenkürzel/index.html | 271 +++++++ site/public/css/main.min.css | 1 + site/public/index.html | 152 ++++ site/public/index.xml | 141 ++++ site/public/install_browser/index.html | 255 +++++++ site/public/lazygit/index.html | 669 ++++++++++++++++++ site/public/networkconfig_dns/index.html | 214 ++++++ site/public/sitemap.xml | 52 ++ site/public/stretchen_laufen/index.html | 78 ++ site/public/string_prefixes/index.html | 354 +++++++++ site/public/system-optimierung/index.html | 188 +++++ site/public/tags/index.html | 47 ++ site/public/tags/index.xml | 13 + site/public/tinydb_vs_sqlite/index.html | 106 +++ site/public/ver_next_einbinden/index.html | 145 ++++ site/public/willkommen/index.html | 74 ++ site/public/yubikey_setup_guide/index.html | 189 +++++ 66 files changed, 6169 insertions(+) create mode 100644 Caddyfile create mode 100644 ansible/deploy.yml create mode 100644 ansible/pkcs11.txt create mode 100644 ansible/templates/Caddyfile.j2 create mode 100644 ansible/templates/hugo.toml.j2 create mode 100644 content/AWX_und_Rundeck_install.md create mode 100644 content/Install_Browser.md create mode 100644 content/Stretchen_laufen.md create mode 100644 content/astro-vim-recommendations.md create mode 100644 content/blueray_install_manjaro.md create mode 100644 content/calcurse_tastenkürzel.md create mode 100644 content/lazygit.md create mode 100644 content/networkconfig_dns.md create mode 100644 content/string_prefixes.md create mode 100644 content/system-optimierung.md create mode 100644 content/tinydb_vs_sqlite.md create mode 100644 content/ver_next_einbinden.md create mode 100644 content/willkommen.md create mode 100644 content/yubikey_setup_guide.md create mode 100644 crt/ca.crt create mode 100644 crt/ca.key create mode 100644 crt/hugo-chain.crt create mode 100644 crt/hugo.crt create mode 100644 crt/hugo.key create mode 100644 crt/localhost-chain.crt create mode 100644 crt/localhost.crt create mode 100644 crt/localhost.key create mode 100644 crt/man-dan-05-chain.crt create mode 100644 crt/man-dan-05.crt create mode 100644 crt/man-dan-05.key create mode 100644 crt/ras-dan-01-chain.crt create mode 100644 crt/ras-dan-01.crt create mode 100644 crt/ras-dan-01.key create mode 100644 docker-compose.yml create mode 100644 site/.hugo_build.lock create mode 100644 site/assets/css/main.css create mode 100755 site/entrypoint.sh create mode 100644 site/hugo.toml create mode 100644 site/layouts/_default/baseof.html create mode 100644 site/layouts/_default/list.html create mode 100644 site/layouts/_default/rss.xml create mode 100644 site/layouts/_default/single.html create mode 100644 site/layouts/partials/footer.html create mode 100644 site/layouts/partials/head.html create mode 100644 site/layouts/partials/header.html create mode 100644 site/layouts/partials/toc.html create mode 100644 site/public/astro-vim-recommendations/index.html create mode 100644 site/public/awx_und_rundeck_install/index.html create mode 100644 site/public/blueray_install_manjaro/index.html create mode 100644 site/public/calcurse_tastenkürzel/index.html create mode 100644 site/public/css/main.min.css create mode 100644 site/public/index.html create mode 100644 site/public/index.xml create mode 100644 site/public/install_browser/index.html create mode 100644 site/public/lazygit/index.html create mode 100644 site/public/networkconfig_dns/index.html create mode 100644 site/public/sitemap.xml create mode 100644 site/public/stretchen_laufen/index.html create mode 100644 site/public/string_prefixes/index.html create mode 100644 site/public/system-optimierung/index.html create mode 100644 site/public/tags/index.html create mode 100644 site/public/tags/index.xml create mode 100644 site/public/tinydb_vs_sqlite/index.html create mode 100644 site/public/ver_next_einbinden/index.html create mode 100644 site/public/willkommen/index.html create mode 100644 site/public/yubikey_setup_guide/index.html diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..2b4fadd --- /dev/null +++ b/Caddyfile @@ -0,0 +1,9 @@ +https://localhost:5443 { + tls /etc/caddy/certs/hugo.crt /etc/caddy/certs/hugo.key + reverse_proxy hugo:1313 +} + +https://man-dan-05:5443 { + tls /etc/caddy/certs/man-dan-05.crt /etc/caddy/certs/man-dan-05.key + reverse_proxy hugo:1313 +} \ No newline at end of file diff --git a/ansible/deploy.yml b/ansible/deploy.yml new file mode 100644 index 0000000..8f2da2d --- /dev/null +++ b/ansible/deploy.yml @@ -0,0 +1,138 @@ +--- +# Playbook: Hugo-Docker-CMS aufzielen +# Aufruf: ansible-playbook -i "," deploy.yml +# oder mit Variablen: +# ansible-playbook -i "," deploy.yml -e "target_hostname=ras-dan-01 target_port=5443" + +- name: Hugo Docker CMS bereitstellen + hosts: all + gather_facts: true + vars: + target_hostname: "{{ inventory_hostname }}" + target_port: 5443 + site_title: "Hugo Docker CMS" + site_description: "Markdown-Dateien einfach in content/ ablegen." + site_author: "JonnyBravo" + deploy_path: "{{ '~' | expanduser }}/.docker/hugo" + + tasks: + # ── Verzeichnisse anlegen ── + - name: Zielverzeichnisse erstellen + ansible.builtin.file: + path: "{{ deploy_path }}/{{ item }}" + state: directory + mode: "0755" + loop: + - content + - crt + - site/assets/css + - site/layouts/_default + - site/layouts/partials + - site/static + + # ── docker-compose.yml kopieren ── + - name: docker-compose.yml kopieren + ansible.builtin.copy: + src: "../docker-compose.yml" + dest: "{{ deploy_path }}/docker-compose.yml" + mode: "0644" + + # ── Statische Site-Dateien kopieren ── + - name: Hugo-Layouts kopieren + ansible.builtin.copy: + src: "../site/layouts/" + dest: "{{ deploy_path }}/site/layouts/" + mode: "0644" + + - name: main.css kopieren + ansible.builtin.copy: + src: "../site/assets/css/main.css" + dest: "{{ deploy_path }}/site/assets/css/main.css" + mode: "0644" + + - name: Entrypoint kopieren und ausführbar machen + ansible.builtin.copy: + src: "../site/entrypoint.sh" + dest: "{{ deploy_path }}/site/entrypoint.sh" + mode: "0755" + + # ── Zertifikate kopieren ── + - name: Zertifikate für Ziel-Host kopieren + ansible.builtin.copy: + src: "../crt/" + dest: "{{ deploy_path }}/crt/" + mode: "0600" + + - name: Zertifikate lesbar machen (crt-Dateien) + ansible.builtin.file: + path: "{{ deploy_path }}/crt/{{ item }}" + mode: "0644" + loop: + - "ca.crt" + - "{{ target_hostname }}.crt" + - "{{ target_hostname }}-chain.crt" + - "localhost.crt" + - "localhost-chain.crt" + + # ── Content (optional, nur wenn lokal vorhanden) ── + - name: Beispiel-Content kopieren (falls vorhanden) + ansible.builtin.copy: + src: "../content/" + dest: "{{ deploy_path }}/content/" + mode: "0644" + ignore_errors: true + + # ── Templates rendern ── + - name: Caddyfile aus Template generieren + ansible.builtin.template: + src: "templates/Caddyfile.j2" + dest: "{{ deploy_path }}/Caddyfile" + mode: "0644" + + - name: hugo.toml aus Template generieren + ansible.builtin.template: + src: "templates/hugo.toml.j2" + dest: "{{ deploy_path }}/site/hugo.toml" + mode: "0644" + + # ── Docker Compose starten ── + - name: Docker Compose Pull (neueste Images) + ansible.builtin.command: + cmd: docker compose pull + chdir: "{{ deploy_path }}" + register: pull_result + changed_when: "'Pulled' in pull_result.stdout or 'newer' in pull_result.stdout" + + - name: Docker Compose starten + ansible.builtin.command: + cmd: docker compose up -d + chdir: "{{ deploy_path }}" + register: compose_result + changed_when: "'Starting' in compose_result.stdout or 'Creating' in compose_result.stdout" + + - name: Warten bis Caddy lauscht + ansible.builtin.wait_for: + port: "{{ target_port }}" + host: "127.0.0.1" + timeout: 30 + + - name: HTTPS-Smoke-Test + ansible.builtin.uri: + url: "https://localhost:{{ target_port }}/" + validate_certs: false + return_content: false + register: smoketest + failed_when: smoketest.status != 200 + + - name: Erfolgsmeldung + ansible.builtin.debug: + msg: + - "✅ Hugo Docker CMS läuft!" + - " https://{{ target_hostname }}:{{ target_port }}/" + - " https://localhost:{{ target_port }}/" + - " Pfad: {{ deploy_path }}" + - " .md-Dateien: {{ deploy_path }}/content/" + - "" + - "🔒 CA-Zertifikat muss noch vertraut werden (auf deinem Client):" + - " sudo cp {{ playbook_dir }}/../crt/ca.crt /etc/ca-certificates/trust-source/anchors/hugo-docker-ca.crt" + - " sudo update-ca-trust" \ No newline at end of file diff --git a/ansible/pkcs11.txt b/ansible/pkcs11.txt new file mode 100644 index 0000000..f48e84b --- /dev/null +++ b/ansible/pkcs11.txt @@ -0,0 +1,5 @@ +library= +name=NSS Internal PKCS #11 Module +parameters=configdir='sql:' certPrefix='' keyPrefix='' secmod='secmod.db' flags= updatedir='' updateCertPrefix='' updateKeyPrefix='' updateid='' updateTokenDescription='' +NSS=Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[ECC,RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30}) + diff --git a/ansible/templates/Caddyfile.j2 b/ansible/templates/Caddyfile.j2 new file mode 100644 index 0000000..f0ea057 --- /dev/null +++ b/ansible/templates/Caddyfile.j2 @@ -0,0 +1,11 @@ +{# Template: Caddyfile für Ziel-Host #} +https://{{ target_hostname }}:{{ target_port }} { + tls /etc/caddy/certs/{{ target_hostname }}.crt /etc/caddy/certs/{{ target_hostname }}.key + reverse_proxy hugo:1313 +} +{% if target_hostname != 'localhost' %} +https://localhost:{{ target_port }} { + tls /etc/caddy/certs/localhost.crt /etc/caddy/certs/localhost.key + reverse_proxy hugo:1313 +} +{% endif %} \ No newline at end of file diff --git a/ansible/templates/hugo.toml.j2 b/ansible/templates/hugo.toml.j2 new file mode 100644 index 0000000..9ce3256 --- /dev/null +++ b/ansible/templates/hugo.toml.j2 @@ -0,0 +1,32 @@ +{# Template: hugo.toml für Ziel-Host #} +# Hugo 0.165+ — moderne Konfiguration +baseURL = "https://{{ target_hostname }}:{{ target_port }}/" +locale = "de" +title = "{{ site_title }}" +enableGitInfo = false +disableFastRender = true + +[markup] + [markup.highlight] + style = "catppuccin-mocha" + noClasses = false + lineNos = false + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true + +[taxonomies] + tag = "tags" + +[outputs] + home = ["HTML", "RSS"] + page = ["HTML"] + +[params] + description = "{{ site_description }}" + author = "{{ site_author }}" + images = [] + +buildDrafts = false +buildFuture = false +buildExpired = false \ No newline at end of file diff --git a/content/AWX_und_Rundeck_install.md b/content/AWX_und_Rundeck_install.md new file mode 100644 index 0000000..1d21fc6 --- /dev/null +++ b/content/AWX_und_Rundeck_install.md @@ -0,0 +1,131 @@ +--- +title: "Rundeck und AWX Installation mit Docker" +date: "2026-09-08" +--- + +# Rundeck und AWX Installation mit Docker + +Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent gespeichert werden. + +## Voraussetzungen +- Docker und Docker-Compose installiert +- Ausreichend Speicherplatz (mindestens 2GB empfohlen) +- Ports 4440 und 8052 frei + +## Rundeck Installation + +1. Verzeichnis für persistente Daten erstellen: + ```bash + mkdir -p ~/rundeck_data + ``` + +2. Rundeck Container starten: + ```bash + docker run -d \ + -p 4440:4440 \ + -v ~/rundeck_data:/home/rundeck/server/data \ + --name rundeck \ + rundeck/rundeck:latest + ``` + +3. Zugriff: + - URL: http://:4440 + - Login: admin/admin + +## AWX Installation + +1. Verzeichnisse für persistente Daten erstellen: + ```bash + mkdir -p ~/awx_data/postgres ~/awx_data/projects + ``` + +2. docker-compose.yml erstellen: + ```bash + cat < ~/awx_data/docker-compose.yml + version: '3' + services: + postgres: + image: postgres:13 + volumes: + - ~/awx_data/postgres:/var/lib/postgresql/data + environment: + POSTGRES_DB: awx + POSTGRES_USER: awx + POSTGRES_PASSWORD: awxpass + + awx: + image: ansible/awx:latest + depends_on: + - postgres + ports: + - "8052:8052" + volumes: + - ~/awx_data/projects:/var/lib/awx/projects + environment: + DATABASE_USER: awx + DATABASE_PASSWORD: awxpass + DATABASE_NAME: awx + DATABASE_HOST: postgres + EOL + ``` + +3. AWX starten: + ```bash + cd ~/awx_data + docker-compose up -d + ``` + +4. Zugriff: + - URL: http://:8052 + - Login: admin/password + +## Persistenz und Autostart + +Um sicherzustellen, dass die Container nach einem Neustart automatisch starten, können Systemd-Services eingerichtet werden: + +1. Für Rundeck: + ```bash + sudo bash -c 'cat < /etc/systemd/system/rundeck-docker.service + [Unit] + Description=Rundeck Docker Container + After=docker.service + + [Service] + Restart=always + ExecStart=/usr/bin/docker start -a rundeck + ExecStop=/usr/bin/docker stop -t 2 rundeck + + [Install] + WantedBy=multi-user.target + EOL' + ``` + +2. Für AWX: + ```bash + sudo bash -c 'cat < /etc/systemd/system/awx-docker.service + [Unit] + Description=AWX Docker Container + After=docker.service + + [Service] + WorkingDirectory=/home/$(whoami)/awx_data + Restart=always + ExecStart=/usr/local/bin/docker-compose up + ExecStop=/usr/local/bin/docker-compose down + + [Install] + WantedBy=multi-user.target + EOL' + ``` + +3. Services aktivieren: + ```bash + sudo systemctl daemon-reload + sudo systemctl enable rundeck-docker + sudo systemctl enable awx-docker + ``` + +## Wichtige Hinweise +- Beide Lösungen können parallel betrieben werden +- Daten werden in ~/rundeck_data und ~/awx_data gespeichert +- Für Produktivumgebungen sollten zusätzliche Sicherheitsmaßnahmen getroffen werden diff --git a/content/Install_Browser.md b/content/Install_Browser.md new file mode 100644 index 0000000..1e08ea2 --- /dev/null +++ b/content/Install_Browser.md @@ -0,0 +1,197 @@ +--- +title: "qutebrowser Installation (Wayland / Sway)" +date: "2026-09-08" +--- + +# qutebrowser Installation (Wayland / Sway) + +Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine +(Chromium/Blink-Engine). Kein Fork, sondern eigenständig. + +Hinweis: qutebrowser liegt im offiziellen Repo (`extra`), nicht im AUR. + +--- + +## 1. Basis-Installation + +```bash +sudo pacman -S qutebrowser +``` + +--- + +## 2. Video-Hardwarebeschleunigung (VAAPI) + +Deine GPU: Intel Iris Xe (TigerLake). Dafür brauchst du den Intel-Media-Driver +und die VAAPI-Utils zum Prüfen: + +```bash +sudo pacman -S intel-media-driver libva-utils +``` + +Testen ob VAAPI läuft: + +```bash +vainfo +``` + +Erwartete Ausgabe: eine Liste mit Profilen (H264, HEVC/VP9-Decoding etc.). +Falls leer oder Fehler -> Treiberproblem. + +In qutebrowser aktivieren (`:set` oder in `~/.config/qutebrowser/config.py`): + +``` +qt.args: + - ignore-gpu-blocklist + - enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL + - enable-accelerated-video-decode +``` + +--- + +## 3. DRM / Widevine (Netflix, Prime, Spotify …) + +Widevine ist proprietär und nicht im offiziellen Repo. Das AUR-Paket +`chromium-widevine` stellt das Widevine-CDM (`libwidevinecdm.so`) bereit: + +```bash +yay -S chromium-widevine +``` + +Das Paket legt die Bibliothek ab unter: + +``` +/usr/lib/chromium/libwidevinecdm.so +``` + +Pfad in qutebrowser bekannt machen (in `config.py`): + +```python +c.qt.args = [ + "widevine-path=/usr/lib/chromium/libwidevinecdm.so", + "ignore-gpu-blocklist", + "enable-features=VaapiVideoDecoder", +] +``` + +Danach qutebrowser neu starten und prüfen: + +``` +:version +``` + +Dort sollte Widevine aufgelistet sein. Prüfseite: https://bitmovin.com/demos/drm + +Wichtige Einschränkung: Widevine unter Linux liefert maximal **1080p** (L3-Lizenz). +4K-Streaming geht auf Linux nur mit Microsoft Edge oder Safari/macOS. + +--- + +## 4. Wayland-nativ starten + +Sway ist Wayland, also qutebrowser nativ (ohne XWayland) laufen lassen: + +``` +:set qt.args +``` + +oder in `config.py`: + +```python +c.qt.args = ["widevine-path=..."] +``` + +Standardmäßig nutzt qutebrowser unter Sway bereits Wayland. Prüfen: + +``` +:version +``` + +Unter "Qt" sollte `wayland` als Platform stehen (nicht `xcb`). + +--- + +## 5. Adblock & Datenschutz + +qutebrowser hat einen eingebauten Host-Datei-Adblocker. Listen aktualisieren: + +``` +:adblock-update +``` + +Für besseren Schutz in `config.py`: + +```python +# Standard-User-Agent abschalten (weniger Fingerprinting) +c.content.headers.user_agent = None + +# DNT / Tracking-Opt-out +c.content.headers.do_not_track = True +``` + +--- + +## 6. Minimale Beispiel-Konfiguration + +Datei: `~/.config/qutebrowser/config.py` + +```python +import os + +# DRM + Video-Hardwarebeschleunigung +c.qt.args = [ + "widevine-path=/usr/lib/chromium/libwidevinecdm.so", + "ignore-gpu-blocklist", + "enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL", +] + +# Startseite +c.url.start_pages = ["https://duckduckgo.com"] + +# Adblock-Listen +c.content.blocking.enabled = True +c.content.blocking.method = "both" # hosts + adblock +c.content.blocking.hosts.lists = [ + "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts", +] + +# Tabs / Verhalten +c.tabs.position = "top" +c.confirm_quit = ["downloads"] + +# Tastatur: h/j/k/l Navigation (bereits Standard bei qutebrowser) +``` + +--- + +## 7. Wichtigste Tastenkürzel + +| Taste | Aktion | +|---|---| +| `:` | Befehlszeile | +| `o` | URL öffnen | +| `O` | URL in neuem Tab öffnen | +| `f` | Links per Buchstabenkürzel anklicken | +| `H` / `L` | Zurück / Vor | +| `j` / `k` | Nach unten / oben scrollen | +| `gg` / `G` | Seitenanfang / -ende | +| `J` / `K` | Nächster / vorheriger Tab | +| `d` / `u` | Tab schließen / wieder öffnen | +| `/` | Suche auf Seite | +| `n` / `N` | Nächstes / vorheriges Suchergebnis | +| `yy` | URL in Zwischenablage | +| `ZZ` | qutebrowser beenden | + +--- + +## 8. Alternativen im Überblick (schnell & sicher auf Sway) + +| Browser | Engine | Install | Anmerkung | +|---|---|---|---| +| qutebrowser | Blink (Qt) | `sudo pacman -S qutebrowser` | Tastatur-only, ideal für Tiling | +| LibreWolf | Gecko (Firefox) | `yay -S librewolf-bin` | Firefox ohne Telemetrie, +uBlock | +| ungoogled-chromium | Blink | `yay -S ungoogled-chromium-bin` | Chromium ohne Google | +| Brave | Blink | `yay -S brave-bin` | Built-in Werbeblocker | + +Für 4K-Streaming + Extensions: Brave. Für maximalen Datenschutz: LibreWolf. +Für reine Tastatur-Steuerung im Tiling-WM: qutebrowser. diff --git a/content/Stretchen_laufen.md b/content/Stretchen_laufen.md new file mode 100644 index 0000000..332b0fa --- /dev/null +++ b/content/Stretchen_laufen.md @@ -0,0 +1,23 @@ +--- +title: "Stretchen_laufen" +date: "2026-09-08" +--- + +Aufwärmen: +10-15 Wh. 1-2 Sek. +1. Zwillingswadenmuskel dehnen S166 +2. Zwillingswadenmuskel dehen S164 +3. Beste Dhenübung der Welt S140 +4. Girlanden-Haltung S126 +5. Hüftkreisen im Stehen S148 +6. Oberschenkelrückseite dynamisch dehen S163 + +Einsteiger : +10-15 Wh. 1-2 Sek. +1. Katze - Kuh S74 +2. Quadrizeps dehnen im Stehen S156 +3. Oberschenkelrückseite statisch S160 +4. Hüftbeuger mithilfe eines Stuhles S137 +5. Zwillingswardenmuskel dehnen S166 +6. Hüftkreisen im Viertelfüser S150 +7. Oberschenkelrückseite S163 diff --git a/content/astro-vim-recommendations.md b/content/astro-vim-recommendations.md new file mode 100644 index 0000000..157f5b1 --- /dev/null +++ b/content/astro-vim-recommendations.md @@ -0,0 +1,48 @@ +--- +title: "Empfehlungen für AstroVim" +date: "2026-09-08" +--- + +# Empfehlungen für AstroVim + +## 1. Tastenkürzel kennenlernen (Which‑Key) +AstroVim nutzt **which‑key** für kontextsensitive Key‑Menüs. +Drücke `` (Standard: Leertaste) und warte kurz, um das Menü +zu sehen. So erkennst du schnell verfügbare Aktionen. + +## 2. Dateiexplorer (Neo‑Tree) +AstroVim bringt **neo‑tree** als Dateibaum mit. +- ` e` öffnet / schließt den Explorer. +- `a` legt eine neue Datei an, `d` löscht, `r` benennt um. +- `H` blendet ausgeblendete Dateien ein / aus. + +## 3. Fuzzy‑Finder (Telescope) +**Telescope** ist der Fuzzy‑Finder. +- ` f f` : Dateien im Projekt suchen +- ` f g` : live‑grep im Projekt +- ` f b` : geöffnete Buffer durchsuchen +- ` f h` : Hilfe‑Tags durchsuchen + +## 4. Buffer‑Verwaltung +- ` c` schließt den aktuellen Buffer. +- `[ b` / `] b` wechselt zum vorherigen / nächsten Buffer. +- ` b` zeigt eine Liste offener Buffer. + +## 5. Git‑Integration (LazyGit / Gitsigns) +- **LazyGit** startest du mit ` g g` – eine vollwertige + Git‑TUI direkt im Terminal‑Fenster. +- **Gitsigns** zeigt Änderungen in der Sign‑Spalte. + - `] c` / `[ c` springt zur nächsten / vorherigen Änderung. + - ` h s` stage a hunk, ` h r` reset hunk. + +## 6. Terminal im Editor +- ` t f` öffnet ein floatendes Terminal. +- ` t h` / ` t v` teilt horizontal / vertikal + mit einem Terminal. +- `Ctrl+\ Ctrl+n` wechselt in den Normal‑Modus innerhalb des Terminals. + +## 7. Snippets (LuaSnip) +AstroVim verwendet **LuaSnip**. Du kannst eigene Snippets unter +`~/.config/nvim/lua/user/snippets/` ablegen. Beispiel‑Datei +`python.lua`: + diff --git a/content/blueray_install_manjaro.md b/content/blueray_install_manjaro.md new file mode 100644 index 0000000..e44ef54 --- /dev/null +++ b/content/blueray_install_manjaro.md @@ -0,0 +1,44 @@ +--- +title: "blueray_install_manjaro" +date: "2026-09-08" +--- + +### Befehle zur Einrichtung von VLC für Blu-rays (Manjaro) + +Diese Schritte helfen Ihnen, VLC so zu konfigurieren, dass es Blu-ray-Discs abspielen kann. + +1. **Benötigte Pakete installieren** + Dieser Befehl installiert alle notwendigen Pakete für die Blu-ray-Wiedergabe: + - `vlc`: Der Media Player. + - `libaacs`: Notwendig, um AACS-geschützte Blu-ray-Discs zu entschlüsseln. + - `libbluray`: Eine Bibliothek für die Navigation und Wiedergabe von Blu-ray-Discs. + - `jre-openjdk`: Eine Java-Laufzeitumgebung, die für Blu-ray-Menüs (BD-J) benötigt wird. + + ```bash + sudo pacman -S vlc libaacs libbluray jre-openjdk + ``` + + *Hinweis: Der zuvor erwähnte Paket `libbdplus` wurde hier weggelassen, da er nicht direkt in den offiziellen Arch/Manjaro Repositories gefunden wurde und für viele Blu-rays möglicherweise nicht sofort notwendig ist. Sollten Sie später Probleme mit BD+-geschützten Discs haben, können wir die Installation aus dem AUR (Arch User Repository) in Betracht ziehen.* + +2. **Verzeichnis für AACS-Schlüssel erstellen** + Dieser Befehl erstellt das notwendige Verzeichnis in Ihrem Home-Verzeichnis, wo die Entschlüsselungsschlüssel (`KEYDB.cfg`) für Blu-ray-Discs gespeichert werden. Das `-p`-Flag stellt sicher, dass alle übergeordneten Verzeichnisse bei Bedarf ebenfalls erstellt werden und unterdrückt Fehlermeldungen, falls das Verzeichnis bereits existiert. + + ```bash + mkdir -p ~/.config/aacs/ + ``` + +3. **KEYDB.cfg-Datei herunterladen** + Dieser Befehl lädt die Datei `KEYDB.cfg` herunter, welche die Datenbank der Blu-ray-Entschlüsselungsschlüssel enthält. Diese Datei ist entscheidend für die Wiedergabe vieler kommerzieller Blu-rays. Die Datei wird direkt in das zuvor erstellte `.config/aacs/`-Verzeichnis gespeichert. + + ```bash + wget -O ~/.config/aacs/KEYDB.cfg http://vlc-bluray.whoknowsmy.name/files/KEYDB.cfg + ``` + +4. **Benutzerberechtigungen für das Blu-ray-Laufwerk korrigieren** + Sollten Sie die Fehlermeldung erhalten, dass VLC die Medienadresse nicht öffnen kann (`VLC kann die Medienadresse 'bluray:///dev/sr0' nicht öffnen`), liegt es wahrscheinlich an fehlenden Berechtigungen. Dieser Befehl fügt Ihren Benutzer zur `optical`-Gruppe hinzu, die den Zugriff auf optische Laufwerke ermöglicht. + + ```bash + sudo usermod -aG optical jonnybravo + ``` + + **WICHTIG:** Damit diese Änderung wirksam wird, müssen Sie sich **vollständig von Ihrer aktuellen Sitzung abmelden und dann wieder neu anmelden** (oder den Computer neu starten). \ No newline at end of file diff --git a/content/calcurse_tastenkürzel.md b/content/calcurse_tastenkürzel.md new file mode 100644 index 0000000..7d21b74 --- /dev/null +++ b/content/calcurse_tastenkürzel.md @@ -0,0 +1,75 @@ +--- +title: "Calcurse Tastenkürzel (Zusammenfassung)" +date: "2026-09-08" +--- + +# Calcurse Tastenkürzel (Zusammenfassung) + +Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für `calcurse` zusammengefasst. + +--- + +### **Allgemeine Steuerung** + +| Taste(n) | Aktion | +|---------------|----------------------------------------------| +| `q`, `Q` | Calcurse beenden | +| `s`, `S` | Änderungen speichern | +| `?` | Hilfe anzeigen | +| `C` | Konfigurationsmenü öffnen | +| `TAB` | Zwischen den Ansichten wechseln (Termine/TODO) | +| `ESC` | Aktion abbrechen / Dialog schließen | +| `:` | Befehlszeile öffnen | +| `^R` | Bildschirm neu zeichnen | + + +### **Navigation im Kalender** + +| Taste(n) | Aktion | +|---------------|----------------------------------------------| +| `t` | Nächster Tag | +| `T` | Vorheriger Tag | +| `w` | Nächste Woche | +| `W` | Vorherige Woche | +| `m` | Nächster Monat | +| `M` | Vorheriger Monat | +| `y` | Nächstes Jahr | +| `Y` | Vorheriges Jahr | +| `g`, `G` | Zu einem bestimmten Datum springen | +| `^G` | Zum heutigen Tag springen | +| `h`,`j`,`k`,`l`| Navigation (links, runter, hoch, rechts) | + + +### **Termine & TODOs verwalten** + +| Taste(n) | Aktion | +|---------------|----------------------------------------------| +| `a`, `A` | Neuen Eintrag hinzufügen (je nach Ansicht) | +| `^A` | Direkt einen neuen **Termin** hinzufügen | +| `^T` | Direkt einen neuen **TODO**-Eintrag hinzufügen | +| `d`, `D` | Ausgewählten Eintrag löschen | +| `e`, `E` | Ausgewählten Eintrag bearbeiten | +| `v`, `Enter` | Details des Eintrags ansehen | +| `n`, `N` | Notiz bearbeiten/hinzufügen | +| `>` | Notiz ansehen | +| `c` | Eintrag kopieren | +| `p` | Eintrag einfügen | +| `r` | Wiederholung für einen Eintrag festlegen | + + +### **Speziell für die TODO-Liste** + +| Taste(n) | Aktion | +|---------------|----------------------------------------------| +| `!` | Task als erledigt markieren (umschalten) | +| `+` | Priorität des Tasks erhöhen | +| `-` | Priorität des Tasks senken | + + +### **Daten Im- & Export** + +| Taste(n) | Aktion | +|---------------|----------------------------------------------| +| `i`, `I` | Daten aus einer Datei importieren | +| `x`, `X` | Daten in eine Datei exportieren | +| `|` | Eintrag an ein externes Skript weiterleiten | diff --git a/content/lazygit.md b/content/lazygit.md new file mode 100644 index 0000000..36b1c44 --- /dev/null +++ b/content/lazygit.md @@ -0,0 +1,316 @@ +--- +title: "Lazygit – Der Terminal-Git-Client" +date: "2026-09-08" +--- + +# Lazygit – Der Terminal-Git-Client + +Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User +Interface). Du steuerst alles per Tastatur und behältst dein ganzes Repository +auf einen Blick – kein Merken von kryptischen `git`-Befehlen mehr. + +## Installation + +```bash +# Arch / Manjaro +sudo pacman -S lazygit + +# Ubuntu / Debian +LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') +curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" +tar xf lazygit.tar.gz lazygit +sudo install lazygit /usr/local/bin + +# macOS +brew install lazygit + +# Windows (mit Winget) +winget install JesseDuffield.lazygit +``` + +Start: Einfach `lazygit` im Repository-Verzeichnis ausführen. + +--- + +## Navigation (global) + +| Taste | Aktion | +|-------|--------| +| `h` / `l` | Zwischen Panels wechseln (links/rechts) | +| `j` / `k` | In Liste nach unten/oben | +| `↑` / `↓` | Dasselbe wie j/k | +| `g` | Zum Anfang der Liste | +| `shift+G` | Zum Ende der Liste | +| `/` | Suchen (im aktuellen Panel) | +| `q` | Lazygit beenden | +| `esc` | Zurück / Aktion abbrechen | +| `?` | Hilfe anzeigen (alle Tasten) | +| `tab` | In neuem Panel: zwischen Bereichen springen | + +--- + +## Panel 1: Status (ganz links) + +Zeigt, ob du im normalen Modus, im Rebase, Merge-Konflikt etc. bist. +Normalerweise springst du mit `1`-`5` direkt in die anderen Panels. + +--- + +## Panel 2: Dateien / Working Tree + +Hier siehst du alle geänderten, neuen und gelöschten Dateien. + +| Taste | Aktion | +|-------|--------| +| `Leertaste` | Datei stagen/unstagen (markiert) | +| `a` | Alle Dateien stagen/unstagen | +| `c` | Commit erstellen (öffnet Editor für Commit-Message) | +| `shift+C` | Commit mit Editor (git commit) | +| `enter` | Diff der ausgewählten Datei anzeigen | +| `d` | Änderungen der Datei verwerfen (Achtung, unwiderruflich!) | +| `shift+D` | Datei aus Working Tree löschen | +| `e` | Datei im Editor öffnen | +| `o` | Datei mit Standardprogramm öffnen | +| `i` | Datei zu .gitignore hinzufügen / Eintrag entfernen | +| `p` | Patch – interaktiv nur Teile einer Datei stagen | + +### Patch-Modus (`p`) + +Nach Drücken von `p` auf einer Datei: + +| Taste | Aktion | +|-------|--------| +| `Leertaste` | Aktuellen Hunks stagen/unstagen | +| `j` / `k` | Zwischen Hunks navigieren | +| `v` | Selektionsmodus (visuell) – dann Leertaste für Auswahl | +| `tab` | In Diff-Fenster springen | + +--- + +## Panel 3: Branches + +| Taste | Aktion | +|-------|--------| +| `Leertaste` | Branch auschecken | +| `n` | Neuen Branch erstellen | +| `c` | Branch mit Namen umbenennen (checkout) | +| `shift+C` | Branch umbenennen (ohne checkout) | +| `d` | Branch löschen | +| `shift+D` | Branch force-löschen (auch wenn nicht gemerged) | +| `m` | Aktuellen Branch in ausgewählten Branch mergen | +| `M` | Merge ohne Fast-Forward | +| `enter` | Commits des Branches anzeigen | +| `r` | Branch rebasen auf ausgewählten Branch | +| `f` | Fast-Forward des ausgewählten Branches | +| `T` | Tag erstellen | +| `g` | Branch zurücksetzen (reset) auf ausgewählten | + +--- + +## Panel 4: Commits (im Branch-Panel mit Enter) + +| Taste | Aktion | +|-------|--------| +| `s` | Squash down – Commit in den darunterliegenden squashen | +| `shift+S` | Fixup – Commit in darunterliegenden squashen, Message verwerfen | +| `r` | Rebase auf diesen Commit starten / Rebase fortsetzen | +| `R` | Commit-Message mit `git commit --amend` bearbeiten | +| `A` | Commit mit Staged-Änderungen amendend (git commit --amend) | +| `t` | Commit rückgängig machen (revert) | +| `shift+T` | Revert erstellen, ohne zu commiten | +| `ctrl+j` / `ctrl+k` | Commit in der Liste nach unten/oben verschieben (interaktiv) | +| `g` | Reset auf diesen Commit – Optionen: | +| | `soft` – HEAD verschieben, Index bleibt | +| | `mixed` (default) – HEAD + Index verschieben | +| | `hard` – HEAD + Index + Working Tree (Achtung, verwirft!) | +| `d` | Commit löschen (während Rebase) | +| `shift+D` | Commits ab hier löschen (während Rebase) | +| `f` | Fixup-Commit erstellen | +| `shift+F` | Fixup-Commit für einen bestimmten Commit | +| `enter` | Dateien des Commits anzeigen | +| `ctrl+l` | Commit-Log anzeigen | +| `shift+C` | Commit kopieren (cherry-pick) | +| `v` | Commits in die Zwischenablage kopieren | + +--- + +## Panel 5: Stash + +| Taste | Aktion | +|-------|--------| +| `Leertaste` | Stash anwenden | +| `g` | Stash anwenden und danach löschen (pop) | +| `d` | Stash löschen | +| `enter` | Dateien des Stashs anzeigen | +| `n` | Neuen Stash mit Nachricht erstellen | +| `s` | Schnell-Stash (ohne Nachricht) | + +--- + +## Reflog + +Mit `ctrl+o` (oder im Commits-Panel) öffnest du das Reflog – alle HEAD-Bewegungen. + +| Taste | Aktion | +|-------|--------| +| `enter` | Reflog-Eintrag anzeigen | +| `g` | Auf diesen Eintrag zurücksetzen (soft/mixed/hard) | +| `ctrl+o` | Reflog schließen | + +--- + +## Remote / Push & Pull + +| Taste | Aktion | +|-------|--------| +| `p` | Push (im Branch- oder Commits-Panel) | +| `shift+P` | Force-Push (`--force-with-lease`) | +| `shift+F` | Fetch (alle Remotes) | +| `ctrl+p` | Pull (fetch + merge) | +| `shift+ctrl+P` | Pull mit Rebase | + +--- + +## Undo / Redo + +Lazygit hat eine eingebaute Undo-Funktion – ein Lebensretter! + +| Taste | Aktion | +|-------|--------| +| `z` | Letzte Git-Aktion rückgängig machen (undo) | +| `shift+Z` | Rückgängig gemachte Aktion wiederholen (redo) | + +Funktioniert für: Commit, Stash, Branch-Reset, Checkout, Cherry-Pick, Revert, +Merge ... + +--- + +## Konflikte lösen + +Im Merge-Konflikt-Fall zeigt Lazygit die betroffenen Dateien. + +| Taste | Aktion | +|-------|--------| +| `Leertaste` | Datei als "ours" markieren (eigene Version) | +| `b` | Datei als "theirs" markieren (fremde Version) | +| `↑` / `↓` | Hunk auswählen | +| `Leertaste` | Hunk auswählen (ours/theirs oder beide) | +| `a` | Alle Hunks auf einmal akzeptieren | +| `shift+M` | Merge-Tool für diese Datei öffnen | + +--- + +## Submodule + +| Taste | Aktion | +|-------|--------| +| `enter` | In Submodule wechseln (öffnet neue Lazygit-Instanz) | +| `i` | Submodule init | +| `u` | Submodule updaten | +| `n` | Submodule hinzufügen | + +--- + +## Worktrees + +| Taste | Aktion | +|-------|--------| +| `n` | Neues Worktree erstellen | +| `enter` | In Worktree wechseln | +| `d` | Worktree löschen | + +--- + +## Tipps & häufige Workflows + +### Änderungen committen + +``` +1. j/k → Datei auswählen +2. Leertaste → Stagen +3. c → Commit-Message schreiben, Enter +4. p → Pushen +``` + +### Letzten Commit ändern (amend) + +``` +1. a → Alle Dateien stagen +2. shift+A → Amend (fügt Staged-Änderungen zum letzten Commit hinzu) +``` + +### Branch erstellen und wechseln + +``` +1. 3 → Branch-Panel +2. n → Neuen Branch, Namen eingeben, Enter +``` + +### Commits zusammenfassen (squash) + +``` +1. 4 → Commits-Panel +2. j/k → Commit auswählen (der, der in den darunterliegenden gesquasht werden soll) +3. s → Squash +``` + +### Commit rückgängig machen + +``` +1. 4 → Commits-Panel +2. g → "reset" +3. soft → HEAD verschieben, Änderungen bleiben im Index +``` + +Falls du es dir anders überlegst: `z` (undo). + +### Interaktives Rebase + +``` +1. 4 → Commits-Panel +2. r auf einem älteren Commit → Rebase starten +3. j/k → Commits auswählen, dann s/f/d zum Squashen/Fixen/Löschen +4. r → Rebase fortsetzen +``` + +--- + +## Konfiguration + +Die Konfigurationsdatei liegt unter: +- Linux/macOS: `~/.config/lazygit/config.yml` +- Windows: `%APPDATA%/lazygit/config.yml` + +Beispiel für ein nützliches Config-Snippet: + +```yaml +gui: + theme: + activeBorderColor: + - '#89b4fa' + - bold + inactiveBorderColor: + - '#a6adc8' + nerdFontsVersion: "3" + +git: + paging: + colorArg: always + pager: delta --dark --paging=never + + # Commit-Konvention für Merge-Commits + commitPrefixes: + my_project: + pattern: "^(\\w+\\/\\w+-\\d+)" + replace: "[$1] " +``` + +--- + +## Fazit + +Lazygit macht Git massiv schneller: Du siehst Diff, Branches, Commits und +Stashes gleichzeitig, stagen mit Leertaste, commiten mit `c`, pushen mit `p`. +Kein `git status`-Tippen mehr, kein `git log --oneline`-Starren. + +Die beiden wichtigsten Tasten: `z` für Undo und `?` für Hilfe. \ No newline at end of file diff --git a/content/networkconfig_dns.md b/content/networkconfig_dns.md new file mode 100644 index 0000000..122a66c --- /dev/null +++ b/content/networkconfig_dns.md @@ -0,0 +1,187 @@ +--- +title: "Zusammenfassung der vorgenommenen Änderungen und Konfigurationen" +date: "2026-09-08" +--- + +# Zusammenfassung der vorgenommenen Änderungen und Konfigurationen + +Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir besprochen und durchgeführt haben. + +--- + +## 1. Python Logging (sync.py und logging_config.py) + +Um die Log-Ausgabe des `sync.py`-Skripts zu verbessern, wurde eine modulare Logging-Konfiguration mit Log-Rotation erstellt und in eine separate Datei ausgelagert. + +### `logging_config.py` erstellt + +**Zweck:** Enthält die Funktion `setup_logging()` zur Konfiguration eines Root-Loggers, der Logs in eine Datei (`sync_log.log`) schreibt, diese bei Erreichen einer Größe von 5 MB rotiert und 5 Backups behält. Optional kann auch ein Konsolen-Logger aktiviert werden. + +**Inhalt der Datei (`/home/jonnybravo/Projekte/python_tests/rclone/logging_config.py`):** + +```python +import logging +from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler +import os + +def setup_logging(console_logging=False): + """Konfiguriert das Root-Logging für die Anwendung mit Rotation. + + Diese Funktion richtet einen Root-Logger ein, der Log-Nachrichten in eine Datei schreibt, + welche bei Erreichen einer bestimmten Größe rotiert wird. + + :param console_logging: Wenn True, werden Logs zusätzlich zur Datei auch auf der Konsole ausgegeben. + Standardmäßig ist dies deaktiviert (False). + """ + + # --- Allgemeine Einstellungen --- + log_file = "sync_log.log" # Name der Log-Datei + + # Maximale Größe der Log-Datei in Bytes, bevor sie rotiert wird (hier 5 MB) + max_log_size = 5 * 1024 * 1024 + + # Anzahl der rotierenden Backup-Dateien, die behalten werden sollen (hier 5) + backup_count = 5 + + # --- Logger-Initialisierung --- + logger = logging.getLogger() + + if logger.hasHandlers(): + return + + # --- Logging-Level einstellen --- + # Mögliche Levels: DEBUG, INFO, WARNING, ERROR, CRITICAL + logger.setLevel(logging.INFO) + + # --- Formatter erstellen --- + # Definiert das Layout der Log-Nachrichten. + formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + + # --- Handler erstellen und dem Logger hinzufügen --- + + # 1. RotatingFileHandler (immer aktiv) + file_handler = RotatingFileHandler( + log_file, + maxBytes=max_log_size, + backupCount=backup_count, + encoding='utf-8' + ) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + + # 2. StreamHandler für Konsolen-Ausgabe (optional) + if console_logging: + console_handler = logging.StreamHandler() + console_handler.setFormatter(formatter) + logger.addHandler(console_handler) + + # --- Weitere Referenzen und alternative Handler --- + # (Ausführliche Kommentare sind in der Datei enthalten, hier gekürzt) +``` + +### `sync.py` angepasst + +**Zweck:** Importiert die `setup_logging`-Funktion und ruft sie ganz am Anfang des Skripts auf, um die Logging-Konfiguration zu initialisieren. + +**Relevanten Änderungen in `/home/jonnybravo/Projekte/python_tests/rclone/sync.py`:** + +```python +from logging_config import setup_logging + +# Logging so früh wie möglich einrichten +setup_logging() # Optional: setup_logging(console_logging=True) für Konsolen-Logs + +from rclone_python import rclone as rc +from rclone_python.utils import RcloneException +import os +import logging +# ... (restlicher Code) +``` + +--- + +## 2. DNS-Konfiguration auf dem Manjaro-System + +Um den AdGuard Home-Server `10.50.0.3` als primären DNS-Server für das gesamte System und alle Verbindungen zu nutzen, wurden folgende Schritte durchgeführt: + +### Globale `systemd-resolved` Konfiguration + +**Zweck:** Setzt `10.50.0.3` als systemweiten DNS-Server für `systemd-resolved`. + +**Änderungen in `/etc/systemd/resolved.conf`:** + +```ini +[Resolve] +DNS=10.50.0.3 +# FallbackDNS= # Auskommentieren oder auf FallbackDNS= setzen, um Fallback zu verhindern +``` +Nach der Bearbeitung: `sudo systemctl restart systemd-resolved` + +### NetworkManager Überschreibung für alle Verbindungen + +**Zweck:** Weist NetworkManager an, bei allen Netzwerkverbindungen (bestehende und neue) den vom DHCP-Server angebotenen DNS zu ignorieren. Dadurch wird der globale DNS von `systemd-resolved` verwendet. + +**Neue Datei erstellt: `/etc/NetworkManager/conf.d/99-global-dns-override.conf`** + +```ini +[connection] +# Diese Einstellung gilt für alle neuen und bestehenden Verbindungen. +# Sie weist NetworkManager an, den DNS-Server vom DHCP zu ignorieren. +ipv4.ignore-auto-dns=true +ipv6.ignore-auto-dns=true +``` +Nach der Erstellung: `sudo systemctl restart NetworkManager` + +### Anpassung des spezifischen WLAN-Profils (SweetHome-5G) + +**Zweck:** Hinzufügen der DNS-Suchdomäne, damit lokale Hostnamen ohne vollen Domain-Namen aufgelöst werden können. + +**Befehle für die Kommandozeile (nmcli):** +(Ersetzen Sie "Ihr Verbindungsname" durch den tatsächlichen Namen, z.B. "SweetHome-5G") + +```bash +nmcli connection modify "Ihr Verbindungsname" ipv4.dns-search "speedport.ip" +# optional für IPv6: nmcli connection modify "Ihr Verbindungsname" ipv6.dns-search "speedport.ip" +nmcli connection up "Ihr Verbindungsname" +``` + +--- + +## 3. AdGuard Home Konfiguration + +### Installation & SSL-Einrichtung + +**Zweck:** Installation von AdGuard Home auf einem Linux-Server und Absicherung der Weboberfläche mit einem selbstsignierten SSL-Zertifikat und eigener CA. + +**Schritte (ausführlich in vorherigen Antworten beschrieben):** +1. AdGuard Home installieren (`curl ... install.sh`). +2. Eigene CA (`MyCA.key`, `MyCA.pem`) und Server-Zertifikat (`adguard.key`, `adguard.crt`) mit `openssl` erstellen, inklusive SAN-Erweiterung für IP-Adresse/lokalen Hostnamen. +3. Zertifikate in AdGuard Home (`adguard.crt`, `adguard.key`) unter **Einstellungen → Verschlüsselungseinstellungen** konfigurieren. +4. `MyCA.pem` auf Client-Geräten als vertrauenswürdige Stammzertifizierungsstelle installieren. + +### Bedingte Weiterleitung für lokale Namen + +**Zweck:** Ermöglicht AdGuard Home die Auflösung lokaler Hostnamen durch Weiterleitung an den Router. + +**Konfiguration in der AdGuard Home Weboberfläche:** +1. Gehen Sie zu **Einstellungen → DNS-Einstellungen**. +2. Im Abschnitt **"Upstream-DNS-Server"** die folgende Zeile hinzufügen (zusätzlich zu öffentlichen DNS-Servern): + ``` + [/speedport.ip/]192.168.50.1 + ``` +3. Einstellungen speichern. + +--- + +## 4. Problembehebung WireGuard DNS + +**Zweck:** Behebung des Konflikts, bei dem WireGuard die DNS-Einstellungen überschrieben und auf einen nicht existierenden Server (`10.50.0.3` ohne installierten DNS-Dienst) gezeigt hat. + +**Änderung in der WireGuard-Konfigurationsdatei:** + +* In `/etc/wireguard/wg0.conf` (im Abschnitt `[Interface]`) die Zeile `DNS = 10.50.0.3` auskommentieren oder auf einen anderen DNS-Server ändern. + ```ini + [Interface] + # DNS = 10.50.0.3 + ``` +* WireGuard neu starten: `sudo systemctl restart wg-quick@wg0` (oder `sudo wg-quick down wg0 && sudo wg-quick up wg0`). \ No newline at end of file diff --git a/content/string_prefixes.md b/content/string_prefixes.md new file mode 100644 index 0000000..74b2723 --- /dev/null +++ b/content/string_prefixes.md @@ -0,0 +1,81 @@ +--- +title: "Python String-Präfixe" +date: "2026-09-08" +--- + +# Python String-Präfixe + +In Python gibt es verschiedene Präfixe für String-Literale, die bestimmen, wie der Interpreter den Inhalt des Strings verarbeitet. Suffixe für String-Literale existieren in Python nicht direkt (anders als in Sprachen wie C++), aber es gibt Methoden auf String-Objekten wie `.startswith()` und `.endswith()`. + +Hier ist die Liste aller String-Präfixe in Python mit Beschreibung und logischen Beispielen: + +| Präfix | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **Keines** | Standard-Unicode-String (UTF-8 in Python 3). Verarbeitet normale Escape-Sequenzen wie `\n` oder `\t`. | `text = "Zeile 1\nZeile 2"` | +| **`f` / `F`** | **Formatted String (f-string):** Ermöglicht die direkte Einbettung von Python-Ausdrücken und Variablen in geschweiften Klammern `{}`. | `name = "Welt"\nprint(f"Hallo {name}!")` *(Ausgabe: Hallo Welt!)* | +| **`r` / `R`** | **Raw String:** Behandelt Backslashes `\` als normale Zeichen und ignoriert Escape-Sequenzen. Ideal für reguläre Ausdrücke oder Dateipfade. | `pfad = r"C:\Users\Name\Documents"` | +| **`b` / `B`** | **Byte-String:** Erzeugt ein `bytes`-Objekt statt eines Standard-Strings. Erlaubt nur ASCII-Zeichen (Werte 0-127). | `daten = b"Hallo"` *(Typ ist `bytes`)* | +| **`u` / `U`** | **Unicode-String:** In Python 3 standardmäßig das Standardverhalten. Wird heute hauptsächlich für die Abwärtskompatibilität mit Python 2 verwendet. | `unicode_text = u"Café"` | +| **`fr` / `rf`** | **Kombination (Raw f-string):** Erlaubt sowohl die Formatierung mit `{}` als auch die Ignorierung von Escape-Sequenzen. | `ordner = "Bilder"\npfad = fr"C:\{ordner}\bild.png"` | +| **`br` / `rb`** | **Kombination (Raw Byte-string):** Erzeugt ein Byte-Objekt, bei dem Backslashes nicht als Escape-Sequenzen interpretiert werden. | `regex_bytes = rb"a\nb"` | + +*(Hinweis: Die Groß- und Kleinschreibung der Präfixe ist beliebig, d. h. `f""` verhält sich identisch zu `F""`.)* + +## Python String-Methoden + +Hier ist eine Übersicht über die wichtigsten eingebauten Methoden von String-Objekten (`str`) in Python, sortiert nach ihrer Funktion: + +### 1. Bereinigen und Ausrichten +| Methode | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **`strip([chars])`** | Entfernt führende und folgende Whitespaces (oder die angegebenen Zeichen in `chars`). | `" hallo ".strip()` *(Ergebnis: `"hallo"`)* | +| **`lstrip([chars])`** | Entfernt nur führende Whitespaces oder Zeichen. | `" hallo ".lstrip()` *(Ergebnis: `"hallo "`)* | +| **`rstrip([chars])`** | Entfernt nur folgende Whitespaces oder Zeichen. | `" hallo ".rstrip()` *(Ergebnis: `" hallo"`)* | +| **`ljust(width[, fillchar])`** | Richtet den String linksbündig in einem Feld der Breite `width` aus. | `"test".ljust(10, "-")` *(Ergebnis: `"test------"`)* | +| **`rjust(width[, fillchar])`** | Richtet den String rechtsbündig in einem Feld der Breite `width` aus. | `"test".rjust(10, "-")` *(Ergebnis: `"------test"`)* | +| **`center(width[, fillchar])`** | Zentriert den String in einem Feld der Breite `width`. | `"test".center(10, "-")` *(Ergebnis: `"---test---"`)* | +| **`zfill(width)`** | Füllt den String links mit Nullen auf, bis die Breite `width` erreicht ist. | `"42".zfill(5)` *(Ergebnis: `"00042"`)* | + +### 2. Suchen und Ersetzen +| Methode | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **`replace(old, new[, count])`** | Ersetzt Vorkommen von `old` durch `new`. Optional wird die Anzahl durch `count` begrenzt. | `"A-B-C".replace("-", "/")` *(Ergebnis: `"A/B/C"`)* | +| **`find(sub[, start[, end]])`** | Gibt den niedrigsten Index zurück, an dem `sub` gefunden wird. Gibt `-1` zurück, wenn nicht gefunden. | `"hallo".find("ll")` *(Ergebnis: `2`)* | +| **`rfind(sub[, start[, end]])`** | Gibt den höchsten Index zurück, an dem `sub` gefunden wird. Gibt `-1` zurück, wenn nicht gefunden. | `"hallo".rfind("l")` *(Ergebnis: `3`)* | +| **`index(sub[, start[, end]])`** | Wie `find()`, wirft aber einen `ValueError`, wenn das Substring nicht gefunden wird. | `"hallo".index("x")` *(Ergebnis: `ValueError`)* | +| **`rindex(sub[, start[, end]])`** | Wie `rfind()`, wirft aber einen `ValueError`, wenn nicht gefunden. | `"hallo".rindex("l")` *(Ergebnis: `3`)* | +| **`count(sub[, start[, end]])`** | Zählt, wie oft das Substring `sub` im String vorkommt. | `"banane".count("an")` *(Ergebnis: `2`)* | + +### 3. Aufteilen und Verbinden +| Methode | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **`split(sep=None, maxsplit=-1)`** | Teilt den String an Trennzeichen `sep` und gibt eine Liste zurück. | `"A,B,C".split(",")` *(Ergebnis: `['A', 'B', 'C']`)* | +| **`rsplit(sep=None, maxsplit=-1)`** | Teilt den String vom Ende her auf. | `"A,B,C".rsplit(",", 1)` *(Ergebnis: `['A,B', 'C']`)* | +| **`splitlines([keepends])`** | Teilt den String an Zeilenumbrüchen auf. | `"A\nB".splitlines()` *(Ergebnis: `['A', 'B']`)* | +| **`join(iterable)`** | Verbindet die Elemente eines Iterables (z.B. Liste) mit dem String als Trennzeichen. | `"-".join(["A", "B"])` *(Ergebnis: `"A-B"`)* | +| **`partition(sep)`** | Teilt den String beim ersten Vorkommen von `sep` in ein Tupel: `(vor, sep, nach)`. | `"A-B-C".partition("-")` *(Ergebnis: `('A', '-', 'B-C')`)* | +| **`rpartition(sep)`** | Teilt den String beim letzten Vorkommen von `sep`. | `"A-B-C".rpartition("-")` *(Ergebnis: `('A-B', '-', 'C')`)* | + +### 4. Groß-/Kleinschreibung ändern +| Methode | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **`lower()`** | Konvertiert alle Zeichen in Kleinbuchstaben. | `"Hallo".lower()` *(Ergebnis: `"hallo"`)* | +| **`upper()`** | Konvertiert alle Zeichen in Großbuchstaben. | `"Hallo".upper()` *(Ergebnis: `"HALLO"`)* | +| **`capitalize()`** | Setzt das erste Zeichen auf Groß und den Rest auf Klein. | `"hallo welt".capitalize()` *(Ergebnis: `"Hallo welt"`)* | +| **`title()`** | Setzt den ersten Buchstaben jedes Wortes auf Groß. | `"hallo welt".title()` *(Ergebnis: `"Hallo Welt"`)* | +| **`swapcase()`** | Vertauscht Groß- und Kleinschreibung. | `"HAllo".swapcase()` *(Ergebnis: `"haLLO"`)* | +| **`casefold()`** | Ähnlich wie `lower()`, ist aber aggressiver beim Entfernen von Groß-/Kleinschreibungsunterschieden (gut für Caseless Matching in Unicode). | `"Straße".casefold()` *(Ergebnis: `"strasse"`)* | + +### 5. Überprüfungsmethoden (Geben `True` oder `False` zurück) +| Methode | Beschreibung | Logisches Beispiel | +| :--- | :--- | :--- | +| **`startswith(prefix[, start[, end]])`** | Prüft, ob der String mit `prefix` beginnt. | `"hallo".startswith("ha")` *(Ergebnis: `True`)* | +| **`endswith(suffix[, start[, end]])`** | Prüft, ob der String mit `suffix` endet. | `"hallo".endswith("lo")` *(Ergebnis: `True`)* | +| **`isalnum()`** | Prüft, ob alle Zeichen alphanumerisch sind (Buchstaben und Zahlen) und mindestens ein Zeichen vorhanden ist. | `"Python3".isalnum()` *(Ergebnis: `True`)* | +| **`isalpha()`** | Prüft, ob alle Zeichen Buchstaben sind. | `"Python".isalpha()` *(Ergebnis: `True`)* | +| **`isdigit()`** | Prüft, ob alle Zeichen Ziffern sind (z. B. auch hochgestellte Zahlen). | `"123".isdigit()` *(Ergebnis: `True`)* | +| **`isnumeric()`** | Prüft, ob alle Zeichen numerisch sind (auch Brüche wie ½). | `"½".isnumeric()` *(Ergebnis: `True`)* | +| **`isspace()`** | Prüft, ob der String nur aus Whitespaces (Leerzeichen, Tabs, Zeilenumbrüchen) besteht. | `" \n".isspace()` *(Ergebnis: `True`)* | +| **`islower()`** | Prüft, ob alle buchstabenbasierten Zeichen kleingeschrieben sind. | `"hallo".islower()` *(Ergebnis: `True`)* | +| **`isupper()`** | Prüft, ob alle buchstabenbasierten Zeichen großgeschrieben sind. | `"HALLO".isupper()` *(Ergebnis: `True`)* | +| **`istitle()`** | Prüft, ob der String im Titlecase-Format vorliegt. | `"Hallo Welt".istitle()` *(Ergebnis: `True`)* | diff --git a/content/system-optimierung.md b/content/system-optimierung.md new file mode 100644 index 0000000..f8b9ecb --- /dev/null +++ b/content/system-optimierung.md @@ -0,0 +1,121 @@ +--- +title: "System Optimierung – nächste Schritte" +date: "2026-09-08" +--- + +# System Optimierung – nächste Schritte + +> Letzte Bearbeitung: 07.09.2026 +> Chat-Session-ID: `20260907_182659_6403f3` +> Chat wieder aufrufen: `@session:default/20260907_182659_6403f3` in Hermes Agent eingeben + +--- + +## 1. flashfocus patchen (Marshmallow-4.x-Inkompatibilität) + +**Einmalig ausführen:** + +```bash +sudo sed -i 's/fields\.Number/fields.Float/g' /usr/lib/python3.14/site-packages/flashfocus/config.py +``` + +**Danach testen:** + +```bash +flashfocus --help +``` + +Wenn kein Traceback kommt, ist der Patch erfolgreich. + +**Achtung:** Nach jedem `pacman -Syu`, bei dem flashfocus aktualisiert wird, muss der Patch erneut angewendet werden. + +--- + +## 2. Systemd-User-Services masken + +Die Manjaro-Sway-Config versucht die Dienste bei jedem Start neu zu enablen. +Nur `disable` reicht nicht – sie müssen **maskiert** werden. + +```bash +systemctl --user mask mako.service flashfocus.service pcmanfm.service poweralertd.service xdg-desktop-portal-gtk.service xdg-desktop-portal-lxqt.service +``` + +**Kontrolle:** + +```bash +systemctl --user status mako flashfocus pcmanfm poweralertd xdg-desktop-portal-gtk xdg-desktop-portal-lxqt +``` + +Alle sollten `masked` anzeigen (nicht `failed`). + +--- + +## 3. Neustart und Test + +Sway neustarten (Super+Shift+R) oder System rebooten. + +Nach dem Neustart prüfen, ob alle Dienste laufen: + +```bash +pgrep -a mako +pgrep -a pcmanfm-qt +pgrep -a poweralertd +pgrep -a flashfocus +pgrep -a xdg-desktop-portal +``` + +Jeder Befehl sollte eine PID und den Prozessnamen ausgeben. + +**Journal aufräumen** – keine neuen Crash-Logs mehr: + +```bash +journalctl --user -p 3 --since "1 minute ago" +``` + +--- + +## 4. Weitere Performance-Empfehlungen + +Die vollständige Analyse ist in diesem Chat dokumentiert. Hier die Top-Empfehlungen als Übersicht: + +| Priorität | Maßnahme | Befehl | +|---|---|---| +| Hoch | swappiness auf 40 senken (ZRAM) | `sudo sysctl vm.swappiness=40` (temporär) oder `/etc/sysctl.d/99-zram.conf` | +| Hoch | vfs_cache_pressure auf 50 | `sudo sysctl vm.vfs_cache_pressure=50` | +| Mittel | ollama stoppen (294 MB RAM) | `sudo systemctl disable --now ollama` | +| Mittel | lxd/docker stoppen (530 MB RAM) | `sudo systemctl disable --now lxd docker` | +| Mittel | CPU-Governor auf powersave | `sudo cpupower frequency-set -g powersave` | +| Niedrig | Boot beschleunigen | `sudo systemctl disable NetworkManager-wait-online` | +| Niedrig | Journal-Größe limitieren (3,9 GB → 500 MB) | `sudo nano /etc/systemd/journald.conf` → `SystemMaxUse=500M` | + +--- + +## 5. Verwaiste Pakete aufräumen + +```bash +sudo pacman -Rns $(pacman -Qtdq) # 9 verwaiste Pakete +``` + +--- + +## Wie diesen Chat wieder aufrufen + +In einer neuen Hermes-Agent-Session einfach eingeben: + +``` +@session:default/20260907_182659_6403f3 +``` + +Dann lädt der Agent den kompletten Chatverlauf aus der Datenbank. + +--- + +## Dateien, die geändert wurden + +| Datei | Zweck | +|---|---| +| `~/.config/sway/config.d/10-autostart-fix.conf` | Korrigierte Autostarts (exec statt systemd) | +| `/usr/lib/python3.14/site-packages/flashfocus/config.py` | Marshmallow-4.x-Patch (sudo nötig) | +| `/home/jonnybravo/Projekte/Python_Skripte/create_selfsign/selfsing.py` | CA + Zertifikats-Script (vorherige Session) | +| `~/scripts/mount-nfs.sh` | Manuelle NFS-Mount-Steuerung (vorherige Session) | +| `~/scripts/mounts.md` | NFS-Mount-Dokumentation (vorherige Session) | \ No newline at end of file diff --git a/content/tinydb_vs_sqlite.md b/content/tinydb_vs_sqlite.md new file mode 100644 index 0000000..5c4d65d --- /dev/null +++ b/content/tinydb_vs_sqlite.md @@ -0,0 +1,54 @@ +--- +title: "Vergleich: TinyDB vs. SQLite" +date: "2026-09-08" +--- + +# Vergleich: TinyDB vs. SQLite + +Sowohl TinyDB als auch SQLite sind hervorragende "Embedded Databases" (eingebettete Datenbanken), die ihre Daten in einer Datei speichern, ohne dass ein separater Serverprozess läuft. Der Unterschied liegt hauptsächlich in ihrem Ansatz zur Datenspeicherung und -abfrage. + +--- + +### SQLite + +**Vorteile (`Pros`):** + +* **Sehr robust und bewährt:** Seit Jahrzehnten im Einsatz, extrem zuverlässig (ACID-konform). +* **Standard-SQL:** Bietet eine mächtige, standardisierte Abfragesprache, die von vielen Entwicklern beherrscht wird und plattformübergreifend kompatibel ist. +* **Performance:** Sehr gute Leistung für komplexe Abfragen, Joins und große Datensätze. +* **Strikte Schemas:** Erzwingt Datenintegrität durch vordefinierte Tabellenstrukturen und Datentypen. +* **Großes Ökosystem:** Viele Tools, Treiber und Support in fast jeder Programmiersprache verfügbar. +* **Transaktionen:** Robuste Unterstützung für atomare Transaktionen. + +**Nachteile (`Cons`):** + +* **SQL-Kenntnisse erforderlich:** Entwickler, die kein SQL beherrschen, müssen es lernen. +* **Schema-Bindung:** Änderungen am Datenmodell erfordern oft Schema-Migrationen, die aufwendig sein können. Weniger flexibel für sich schnell ändernde Daten. +* **Binärdateien:** Die Datenbankdateien sind binär und nicht direkt menschenlesbar, was das Debugging erschweren kann. +* **Boilerplate-Code:** Für einfache Operationen kann der SQL-Code im Vergleich zu einer NoSQL-Datenbank länger sein. +* **Keine native Unterstützung für verschachtelte Daten:** Das Speichern von hierarchischen Daten (JSON) erfordert oft JSON-Funktionen in SQL oder separate Tabellen. + +--- + +### TinyDB + +**Vorteile (`Pros`):** + +* **Rein Pythonisch:** Die API ist zu 100% in Python geschrieben und fühlt sich sehr natürlich an. Keine SQL-Kenntnisse erforderlich. +* **Schema-los (NoSQL):** Speichert Daten als Python-Wörterbücher (ähnlich JSON). Keine Schema-Definitionen im Voraus notwendig, maximale Flexibilität für sich ändernde Datenmodelle. +* **Extrem einfach und schnell zu starten:** Ideal für kleine Projekte, Prototypen und den schnellen Einstieg. +* **Menschenlesbare Daten:** Speichert Daten standardmäßig in JSON (oder YAML/CBOR), die Datenbankdatei ist mit einem Texteditor lesbar. +* **Hervorragend für verschachtelte Daten:** Ideal für das Speichern und Abfragen von Daten mit komplexen, hierarchischen Strukturen direkt als Python-Objekte. +* **Keine Konfiguration:** Einfach importieren und loslegen. + +**Nachteile (`Cons`):** + +* **Python-spezifisch:** Nicht leicht in anderen Programmiersprachen zu verwenden (im Gegensatz zu SQL). +* **Keine komplexe relationale Abfrage:** Nicht für komplexe Joins oder Aggregationen über mehrere "Tabellen" hinweg konzipiert. +* **Leistung bei großen Datensätzen:** Bei sehr großen Datenmengen kann die Leistung leiden, da TinyDB für einige Operationen die gesamte Datei lesen muss. +* **Weniger strenge ACID-Garantien:** Obwohl es Transaktionen bietet, ist es im Vergleich zu SQLite weniger robust in Bezug auf strikte ACID-Konformität. +* **Kleineres Ökosystem:** Weniger Tools, Treiber und Community-Support als für SQLite. + +--- + +Die Wahl zwischen beiden hängt stark von den spezifischen Anforderungen Ihres Projekts ab, insbesondere von der Art der Daten, der Komplexität der Abfragen und der Notwendigkeit einer schemalosen Flexibilität. diff --git a/content/ver_next_einbinden.md b/content/ver_next_einbinden.md new file mode 100644 index 0000000..67748f4 --- /dev/null +++ b/content/ver_next_einbinden.md @@ -0,0 +1,97 @@ +--- +title: "Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen" +date: "2026-09-08" +--- + +# Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen + +Diese Anleitung erklärt, wie Sie eine bereits existierende `rclone`-Konfiguration, insbesondere für einen verschlüsselten Nextcloud-Speicher, auf einen neuen Computer umziehen können, ohne alles neu einrichten zu müssen. + +--- + +### Worum geht es? + +Alle Ihre `rclone`-Einstellungen, einschließlich der Zugangsdaten zu Ihren Cloud-Speichern, sind in einer einzigen Datei namens `rclone.conf` gespeichert. Indem Sie diese Datei auf einen neuen Rechner übertragen, "kennt" `rclone` dort sofort alle Ihre eingerichteten Verbindungen (Remotes). + +--- + +### Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben: + +1. **Zugriff auf den alten Rechner**, auf dem `rclone` bereits konfiguriert ist. +2. **Das Passwort für Ihr verschlüsseltes `crypt`-Remote.** Dies ist extrem wichtig! Ohne dieses Passwort können Sie auf Ihre verschlüsselten Daten nicht mehr zugreifen. Das Kopieren der Konfigurationsdatei allein reicht nicht, wenn Sie das Passwort nicht kennen. +3. Einen Weg, eine einzelne Datei zu übertragen (z.B. ein USB-Stick, ein sicheres Netzlaufwerk etc.). + +--- + +### Schritt-für-Schritt-Anleitung + +#### Schritt 1: `rclone.conf`-Datei auf dem alten Rechner finden und kopieren + +Die Konfigurationsdatei, die Sie benötigen, befindet sich im Home-Verzeichnis Ihres Benutzers. + +1. Öffnen Sie ein Terminal auf Ihrem **alten Rechner**. +2. Der Pfad zur Datei lautet: `~/.config/rclone/rclone.conf`. +3. Kopieren Sie diese Datei auf Ihr Übertragungsmedium (z.B. einen USB-Stick). + + ```bash + # Beispiel für das Kopieren auf einen USB-Stick, der unter /media/MeinStick gemountet ist + cp ~/.config/rclone/rclone.conf /media/MeinStick/ + ``` + +#### Schritt 2: `rclone` auf dem neuen Rechner installieren + +Falls `rclone` auf dem **neuen Computer** noch nicht installiert ist, müssen Sie dies nachholen. + +```bash +# Auf Manjaro/Arch Linux +sudo pacman -S rclone + +# Auf Debian/Ubuntu +sudo apt install rclone +``` + +#### Schritt 3: Konfigurationsdatei auf dem neuen Rechner einfügen + +Nun bringen Sie die Konfiguration auf den neuen Rechner. + +1. Öffnen Sie ein Terminal auf Ihrem **neuen Rechner**. +2. Stellen Sie sicher, dass das Zielverzeichnis existiert. Der folgende Befehl erstellt es, falls es fehlt: + ```bash + mkdir -p ~/.config/rclone/ + ``` +3. Kopieren Sie die `rclone.conf`-Datei von Ihrem Übertragungsmedium in dieses Verzeichnis. + + ```bash + # Beispiel für das Kopieren von einem USB-Stick + cp /media/MeinStick/rclone.conf ~/.config/rclone/ + ``` + +#### Schritt 4: Überprüfung und erster Test auf dem neuen Rechner + +Jetzt können Sie überprüfen, ob `rclone` die Konfiguration erfolgreich übernommen hat. + +1. **Lassen Sie sich alle erkannten Remotes anzeigen:** + ```bash + rclone listremotes + ``` + Die Ausgabe sollte nun die Namen Ihrer Remotes (z.B. `nextcloud_unverschluesselt:` und `nextcloud_verschluesselt:`) auflisten. + +2. **Führen Sie einen Test durch:** + Der beste Test ist, den Inhalt Ihres verschlüsselten Remotes aufzulisten. + ```bash + rclone ls nextcloud_verschluesselt: + ``` + * Möglicherweise fragt `rclone` Sie an dieser Stelle einmalig nach dem Passwort für Ihr verschlüsseltes Remote, um es zu verifizieren. Geben Sie hier das Passwort ein, das Sie sich gemerkt haben. + * Wenn der Befehl erfolgreich ist und eine Liste Ihrer verschlüsselten Dateien und Ordner anzeigt, war der Umzug erfolgreich! + +--- + +### ⚠️ Wichtiger Warnhinweis zum Passwort + +Die `rclone.conf`-Datei speichert Ihr Verschlüsselungspasswort nur in einer verschleierten Form. **Sie ersetzt nicht die Notwendigkeit, dass Sie das Passwort kennen!** + +* **Bewahren Sie Ihr Passwort immer an einem sicheren Ort auf** (z.B. in einem Passwort-Manager). +* Ohne das korrekte Passwort sind Ihre verschlüsselten Daten **unwiderruflich verloren**, selbst wenn Sie die `rclone.conf`-Datei haben. +* Betrachten Sie die `rclone.conf`-Datei selbst als sensibel, da sie die Zugangsdaten zu Ihren Cloud-Konten enthält. diff --git a/content/willkommen.md b/content/willkommen.md new file mode 100644 index 0000000..30cd982 --- /dev/null +++ b/content/willkommen.md @@ -0,0 +1,22 @@ +--- +title: "Willkommen bei Hugo Docker" +date: "2026-09-08" +--- + +Das ist eine Beispiel-Seite. **Funktioniert!** + +Einfach `.md`-Dateien in den Ordner `content/` kopieren – Hugo rendert sie automatisch. + +## So geht's + +```bash +# Neue Seite anlegen +echo '--- +title: "Meine Seite" +date: "2026-09-08" +--- +Inhalt hier ... +' > content/meine-seite.md +``` + +Änderungen werden dank `--watch` in Echtzeit übernommen. \ No newline at end of file diff --git a/content/yubikey_setup_guide.md b/content/yubikey_setup_guide.md new file mode 100644 index 0000000..1cae041 --- /dev/null +++ b/content/yubikey_setup_guide.md @@ -0,0 +1,148 @@ +--- +title: "YubiKey-Einrichtung unter Manjaro Sway" +date: "2026-09-08" +--- + +# YubiKey-Einrichtung unter Manjaro Sway + +Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren. + +--- + +### Übersicht der Anwendungsfälle: +1. **FIDO2/U2F:** Für die Zwei-Faktor-Authentifizierung auf Webseiten. +2. **GPG:** Zur Verschlüsselung von E-Mails/Dateien und zum Signieren von Git-Commits. +3. **SSH:** Zur sicheren Anmeldung auf Servern. +4. **PAM:** Zur Anmeldung am System oder für `sudo` (fortgeschritten und mit Vorsicht zu genießen). + +--- + +### Schritt 1: Notwendige Pakete installieren + +Zuerst müssen Sie die erforderlichen Pakete über den Paketmanager `pacman` installieren. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus: + +```bash +sudo pacman -S yubikey-manager yubikey-personalization libfido2 gnupg pcsclite ccid +``` + +**Erklärung der Pakete:** +* `yubikey-manager`: Das wichtigste Werkzeug zur Konfiguration Ihres YubiKeys. +* `yubikey-personalization`: Für ältere YubiKey-Modelle oder spezielle Konfigurationen (obwohl `yubikey-manager` oft bevorzugt wird). +* `libfido2`: Stellt die FIDO2-Unterstützung für WebAuthn in Browsern sicher. +* `gnupg`: Das GnuPG-Programm, notwendig für die Smartcard-Funktionen des YubiKeys. +* `pcsclite` & `ccid`: Systemdienste, die die Kommunikation mit dem YubiKey als Smartcard ermöglichen. + +Nach der Installation ist es eine gute Idee, den `pcscd`-Dienst zu aktivieren und zu starten: + +```bash +sudo systemctl enable pcscd.service +sudo systemctl start pcscd.service +``` + +### Schritt 2: YubiKey erkennen und Status prüfen + +Stecken Sie Ihren YubiKey ein und überprüfen Sie, ob das System ihn erkennt: + +```bash +ykman info +``` +Wenn alles korrekt ist, sollten Sie hier Informationen zu Ihrem YubiKey-Modell und dessen Firmware-Version sehen. + +--- + +### Anwendungsfälle: + +#### Anwendungsfall A: Web-Authentifizierung (FIDO2/U2F) + +Dies ist der einfachste Fall und erfordert in der Regel keine zusätzliche Konfiguration nach der Installation von `libfido2`. + +1. **Voraussetzung:** Ein unterstützter Webbrowser (Firefox, Chrome, Brave, Edge, etc.). +2. **Registrierung:** Gehen Sie zu einer Webseite, die WebAuthn oder FIDO2 unterstützt (z.B. GitHub, Google, GitLab). Navigieren Sie zu den Sicherheitseinstellungen der Webseite. +3. **YubiKey hinzufügen:** Registrieren Sie Ihren YubiKey als neuen Sicherheitsschlüssel. Der Browser sollte Sie auffordern, den YubiKey zu berühren. + +Das war's schon! Sie können den YubiKey nun für die Zwei-Faktor-Authentifizierung (2FA) auf diesen Seiten verwenden. + +#### Anwendungsfall B: GPG für Verschlüsselung und Signaturen + +Sie können den YubiKey als Hardware-Speicher für Ihre GPG-Schlüssel verwenden. Das ist sehr sicher, da die privaten Schlüssel den YubiKey niemals verlassen. + +1. **GPG-Status prüfen:** Stecken Sie den YubiKey ein und führen Sie aus: + ```bash + gpg --card-status + ``` + Wenn GPG den YubiKey als "Card" erkennt, sind Sie bereit für die weitere Konfiguration. + +2. **Schlüssel generieren oder importieren:** + Der Prozess, GPG-Schlüssel zu erstellen und auf den YubiKey zu übertragen, ist sehr umfangreich und sollte sorgfältig durchgeführt werden. Die offizielle Anleitung von Yubico ist hierfür die beste Quelle: + [Yubico Docs: Using Your YubiKey with GPG](https://developers.yubico.com/PGP/) + (Stellen Sie sicher, dass Sie eine aktuelle Anleitung verwenden, die zu Ihrer YubiKey-Firmware passt.) + +#### Anwendungsfall C: SSH-Authentifizierung + +Sie können den YubiKey auch für die SSH-Authentifizierung verwenden, um sich sicher auf Servern anzumelden. + +**Möglichkeit 1: SSH-Authentifizierung über GPG** +Wenn Sie bereits GPG (Anwendungsfall B) eingerichtet haben, können Sie den Authentifizierungs-Unterschlüssel Ihres GPG-Schlüssels für SSH verwenden. +1. Fügen Sie `enable-ssh-support` zu Ihrer `~/.gnupg/gpg-agent.conf` hinzu. +2. Folgen Sie einer Anleitung, um den GPG-Agent als SSH-Agent zu konfigurieren, z.B. für Arch Linux (Manjaro basiert darauf): + [ArchWiki: GnuPG - SSH agent](https://wiki.archlinux.org/title/GnuPG#SSH_agent) + +**Möglichkeit 2: Direkte FIDO-basierte SSH-Schlüssel (neuere YubiKeys)** +Neuere YubiKeys (ab Firmware 5.2.7) können direkt als FIDO-Gerät für SSH-Schlüssel vom Typ `ecdsa-sk` oder `ed25519-sk` verwendet werden. Dies erfordert OpenSSH ab Version 8.2. + +1. **Schlüssel generieren:** + ```bash + ssh-keygen -t ed25519-sk -C "mein-yubikey-ssh-schluessel" + ``` + `ssh-keygen` wird Sie auffordern, Ihren YubiKey zu berühren, um den Schlüssel zu erstellen. + +2. **Öffentlichen Schlüssel verwenden:** + Den generierten öffentlichen Schlüssel (z.B. `~/.ssh/id_ed25519_sk.pub`) können Sie wie gewohnt auf Ihre Server in die `~/.ssh/authorized_keys`-Datei kopieren. Bei der SSH-Anmeldung wird Ihre SSH-Anwendung Sie dann auffordern, den YubiKey zu berühren. + +#### Anwendungsfall D: System-Login und Sudo (PAM) - **Für Fortgeschrittene und mit äußerster Vorsicht!** + +Sie können den YubiKey auch verwenden, um sich am System anzumelden oder `sudo`-Befehle zu autorisieren. Eine Fehlkonfiguration hier kann Sie von Ihrem System ausschließen. + +**⚠️ WARNUNG:** +* **Lassen Sie IMMER ein zweites Terminal mit einer aktiven Root-Shell (`sudo -i`) offen**, während Sie die PAM-Konfiguration ändern. So können Sie Fehler sofort korrigieren. +* Erstellen Sie vor Änderungen an PAM-Dateien **immer Backups** der Originaldateien (z.B. `sudo cp /etc/pam.d/sudo /etc/pam.d/sudo.bak`). + +1. **PAM-Modul installieren:** + ```bash + sudo pacman -S pam-u2f + ``` + +2. **Konfigurationsdatei für den YubiKey erstellen:** + Diese Datei ordnet Ihren YubiKey Ihrem Benutzerkonto zu. + ```bash + mkdir -p ~/.config/Yubico + pamu2fcfg > ~/.config/Yubico/u2f_keys + ``` + **Wichtig:** Stecken Sie Ihren YubiKey ein und berühren Sie ihn, wenn die LED während der Ausführung von `pamu2fcfg` blinkt. + +3. **PAM-Datei bearbeiten (Beispiel für `sudo`):** + Öffnen Sie die `sudo`-PAM-Konfiguration zum Bearbeiten: + ```bash + sudo nano /etc/pam.d/sudo + ``` + Fügen Sie die folgende Zeile **GANZ OBEN** in die Datei ein: + ``` + auth sufficient pam_u2f.so authfile=/home/DEIN_BENUTZER/.config/Yubico/u2f_keys + ``` + * Ersetzen Sie `DEIN_BENUTZER` durch Ihren tatsächlichen Linux-Benutzernamen (z.B. `jonnybravo`). + * `auth sufficient`: Bedeutet, dass eine erfolgreiche Authentifizierung mit dem YubiKey **ausreicht**. Wenn der YubiKey nicht eingesteckt ist oder die Authentifizierung fehlschlägt, wird die nächste Authentifizierungsmethode (normalerweise das Passwort) verwendet. Dies ist sicherer, um sich nicht auszusperren. Wenn Sie `required` verwenden, MUSS der YubiKey funktionieren. + +4. **Testen:** + Öffnen Sie ein *neues* Terminal (NICHT das, in dem Ihre Root-Shell läuft) und testen Sie den `sudo`-Befehl (z.B. `sudo ls`). Sie sollten aufgefordert werden, Ihren YubiKey zu berühren. Berühren Sie ihn und prüfen Sie, ob `sudo` funktioniert. Funktioniert es nicht, nutzen Sie das Root-Terminal, um die Änderungen rückgängig zu machen. + +**Weitere PAM-Anwendungen:** +Ähnliche Einträge können Sie auch für den Login-Manager (z.B. `sddm`, `gdm`, `lightdm`) oder den Screensaver (z.B. `swaylock`) in deren entsprechenden PAM-Dateien (`/etc/pam.d/`) hinzufügen. Das genaue Vorgehen kann je nach Dienst variieren. + +--- + +### Wichtige Hinweise: +* **PINs und PUKs:** Merken Sie sich die PINs und PUKs Ihres YubiKeys. Sie sind für viele Funktionen unerlässlich. +* **Backups:** Erstellen Sie immer Backups Ihrer GPG-Schlüssel, bevor Sie diese auf den YubiKey verschieben. +* **Vorsicht bei PAM:** PAM-Konfigurationen sind mächtig. Testen Sie Änderungen immer sorgfältig und haben Sie einen Notfallplan (z.B. eine Live-CD oder das offene Root-Terminal). +* **Firmware:** Stellen Sie sicher, dass die Firmware Ihres YubiKeys aktuell ist (`ykman firmware info`). +* **Dokumentation:** Die Yubico-Dokumentation ist exzellent und sollte bei spezifischen Problemen oder fortgeschrittenen Konfigurationen konsultiert werden. diff --git a/crt/ca.crt b/crt/ca.crt new file mode 100644 index 0000000..2f9d0cc --- /dev/null +++ b/crt/ca.crt @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDc1NDA2WhcNMzYwOTA1 +MDc1NDA2WjBWMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCk15IFJvb3QgQ0Ew +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv/6/A8xXnuXX6/qiA0q/f +THju1i+hROxZMtRFRDweBrgRUGthZlV1bphCxMqI0waDdLzk4IcsKtoZ1TULArlF +KyJ+ERXQMmz9ZZ/JB2vMvMl+xmt56A7HBD9K0ByTX2CeRllrdMwUU+2+DRdY3V9G +6bpxJTkpF1Yj85GLryXZE5SI+/nsMGfYUSEAY7LfZ8eovmuOFuCTS5I9/ku0eR0r +/ZKYcLp3K8b0Dp8WtGZGWuPuoUlt7pNqTY8oyWG4cE6toExHmiv+UawX1hsek0ao +/amHpQovahlowXtWaaLKDXusAJ4oDfLbjVdj8R5k5msdneRIogH+LhjULChts42a +RaMG5GiHTFiNHL/mWpjTNhBQE59ZqerQdIm2PBA5TiAm+TzZkaC+dQ6r2apYliRE +qAOK+yXvyGwhGOFQc9hLBoel5Gfuk8W/SW2Kmz+IoLarbgKI1ULGATLD8Ce+OGZY +EEoX7lV863OXpLQ9RnL/HRv4ql4UYHc5ZXWHnKwCDy9anbSU+AbTnC1Cu9TgLcsn +ZwZOXYbkoe8D65QnzN9wZmkYb1wTlgyyclz8aGbpC0OM3nq0kGUyStdUilGzUShy +lA1EqP5lqp5PWavErSih+9pBQejjKRh5JMVKSY0Xmv8b2eEwmhIt0q21wpMdpTF/ +mitwYhuoxajtIw74B+/eowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUOwHDJt6XTYwoxe2aj9nxLRgL9L0wDQYJKoZI +hvcNAQELBQADggIBAB3rtwMYk+UXSJ+d9Nd83ofaCPFjD5pEA+6i37jwt0y5Kb3X +LWNF7Nmb+IsvN92zSYgXf+oXaoCvCfF5/BAqeRIFQDtVMS3z6BC0HpGBg3uHF4bJ +EDRv+TUUg3KauT2IHz33371qhUhZuh2FIgzvtwS350MhlqjdAlpj1SJzEz9O9aNu +XcNXFe3A9Pes8vrvHgkPDqhKmJXf9dwModutrp/XQv5mQtx6lFb2FPprsv4j3nKU +76YaslbLWwZYl8abr0cv6Hi7pgUS+7bB3RmBT9+2yZpBN8lZ864o8Osuovui2OyS +cOVgVf4gYqg2xZO2u/F6dPxjctbmKSUUeonXc6QRI6/7vKO7x6HXWZxY9uv+dL/2 +l5jb6OFIzsFCXzwpseJyhW7yEzNE/AlIxeR+qgIhv3QyIV33yUKCA4Ki2E4ta7/X +LJ1IS29u3xDBRzcVKQGkfyDdk7K9KuR8IIz3hZieHRkrzggOK8vxRsLfXTKU1IRM +34Ys4LcPUDVX3Uy4zWwDhBuHRLCdlae2a4Sysot1uK5+846ihln1xqjE8IWuimX/ +HqtOktl2MfmVMDwTnGsIWG9iHRe+PimtlVYpt22ucRGt4XULps8hMYw5pvic1ofy +o8DkkOc94h7P0TGA0xUaBxJrscq5EuG7ty1BwhLWNHTYyB9fsSjoBqhvCdIN +-----END CERTIFICATE----- + diff --git a/crt/ca.key b/crt/ca.key new file mode 100644 index 0000000..03c5394 --- /dev/null +++ b/crt/ca.key @@ -0,0 +1,52 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEAr/+vwPMV57l1+v6ogNKv30x47tYvoUTsWTLURUQ8Hga4EVBr +YWZVdW6YQsTKiNMGg3S85OCHLCraGdU1CwK5RSsifhEV0DJs/WWfyQdrzLzJfsZr +eegOxwQ/StAck19gnkZZa3TMFFPtvg0XWN1fRum6cSU5KRdWI/ORi68l2ROUiPv5 +7DBn2FEhAGOy32fHqL5rjhbgk0uSPf5LtHkdK/2SmHC6dyvG9A6fFrRmRlrj7qFJ +be6Tak2PKMlhuHBOraBMR5or/lGsF9YbHpNGqP2ph6UKL2oZaMF7Vmmiyg17rACe +KA3y241XY/EeZOZrHZ3kSKIB/i4Y1CwobbONmkWjBuRoh0xYjRy/5lqY0zYQUBOf +Wanq0HSJtjwQOU4gJvk82ZGgvnUOq9mqWJYkRKgDivsl78hsIRjhUHPYSwaHpeRn +7pPFv0ltips/iKC2q24CiNVCxgEyw/AnvjhmWBBKF+5VfOtzl6S0PUZy/x0b+Kpe +FGB3OWV1h5ysAg8vWp20lPgG05wtQrvU4C3LJ2cGTl2G5KHvA+uUJ8zfcGZpGG9c +E5YMsnJc/Ghm6QtDjN56tJBlMkrXVIpRs1EocpQNRKj+ZaqeT1mrxK0oofvaQUHo +4ykYeSTFSkmNF5r/G9nhMJoSLdKttcKTHaUxf5orcGIbqMWo7SMO+Afv3qMCAwEA +AQKCAgAAmfVYu394YvXoMO/NPqsPg+Nv5tOTZRxl3WjEK5rMUXfkjQf3IC7Idscd +o7ye/hINrtS3E7mO91svxKI97xy59YDUgOU4Wmgz73boesgtzBavEJsQooVrvTsk +lJR43KtLdkW+umwqjA+J98UmmRYqbUGzj9Tx5LkhzDTiDwhTBUrw68eA53/idBFn +21Lp34SF3Oy2m2rZl8d1wxqiyb0pDtJfzmwjzjhSw/OUqTm0dxALVBgYh5Id8O49 +W7eyJ9CIkT2aYF3hHjSpK/f1MxEUW05uftbSrosTkrqR/4Wh8FeFyeL5Wte8cDaX +9OOxMuglISbvmihXeYK9NYhO8eD1YEDX2lnv79DjnTgxNiCPcxR9+m6y2rx+EUad +IVYtLJmiWFsV0O0EzUBEMvBoCAebIZiMJajG9dP1ASYh7ZdUb4diN21re9ZDw+9H +Z3NCuri0UQfVUL8K8XgaIevtnkkrrcku6+QqttRw8x5ZJNEmbFypyzfkwSCUHYL1 +WT3TFgRoQWleU/f5GVjYpqfSsy/EFmoXfT6xJ4D95r5G1FJPMhoAGDSyiQHdJzfx +HFX5wxbK1zRKv0IlSqN/YOkbs9er+4W+R1HK68cNup7u1UTQaY5L7mYYlwFoChqK +01jKQOyAPaJ1QJR0dQ0v6H06XlYq0pdzam6LTwNd7ckBh8O0WQKCAQEA9D313cQZ +W58F1QcxsWKUz3lNH/yfmVF6/2AqkQyEkTZ55WVmo7eEsxfIwSMilo5XboJwgJ4/ +qIw7WwZ9rKgtKHYdA2cqNxrAG4TvzthjVDvidPbwFBMAQkDBTemIo6UdGX4fZBVZ +TYudlbLB+Eiu4L6ugUnnR+KfifC9IOUdgYl6PLkar3pAl6nXpELcK0sY+nWi2Wf8 +YLaJvX6oOJNbcyBUqPPIgfd6Ogk/3V4onvN3UVEmd8oK3oGP58Z/S96enKybCdpp +40NUO+BC09GvHZaXSxMW+T1yfLomE9t0yTjwj1beErZ+5xTNqUeG7+St0vGNSRV6 +CCqCbxyHqLn1CwKCAQEAuHiyLU3rhfoBWFPvKubVtNWwy50w9lrP+Z91wEGtX1Sv +kNdQ4GHSHz4zMsNzOr60iRDcg0DuPfHfBABU96rIe+bEeYUXhIVYwF7ZmYkLR+tX +R38qmsyslUvB9KuWcJsqgHLi7Pe/JrcCoJswLWB3Bnlvo29HDAGe5gpRNYelSjXa +vkK2rM0l3OIsmSfuqP5AIpBmKWo3OZ+IIxWK1b3+wstNmvOr4mh8RQwKd6EO+Msd +nuuAANmGbGK0OleyNBw9KtCZrETL0EaGIEb0oYndjR3T+Tec0i+RJ8qSRL117c6+ +unfHyMnTrxmOWerm6IKOOj5jQ35BSE/OC7nPc5ULyQKCAQEA87OfT9gLNVBHEXhM +LSKgOSRfwDrhRKn4gDgEQRasb/hbSHkVIOZMkiZ5Ob1FFdSRiMK+XpeIDTVfREQF +wfFMncK80Fhv1uvqI4tRfKKM+c+G9g4vHtiWuYTDXGpY3HAzyOv/hm2G3ckhQ+1J +feOIGtgoZvjGvQNzDMAY9mmmN0plnZFU/yKMsMfXUx8jcE9ObRpTk3oeaKG6bkmi +sFDYPtdTogEdYBD+9EmmX8tD3NYxiAHg0EXY8ot0e1+kRJ+sw8e2Ku60GP9lXRk3 +lQL0KCHKdC5oDekyAyH6PHYM4XrfDScwDpvpo8kuLGoiSdtzVbePsgyr5toDq7pb +4g8qYQKCAQAapnU3TlaEWIXxOM8Ip6igI28TO3ZjYONC8OKWD+b4KsfiaPjqMbel +g9rprorrJbn3Q1RYMf05PcQ2U8Xysd2c6M3hsHShVJJp2EofgEj87ucBEUIacw9L +0lIHAvMM+Z2+SNq32WLoOPBMO59OLu2DJfAW8HCXL3TBTyREU4BxpC4h5ol1lX2u +144R4k78Yx7o32ui+BFaZc3JI8eW8YfopG5lwGZIo0ewwfiRJ9d94fo5h1RKyyI8 +blYTR7AbDylXEiPhW18Gi+m8qAOXgs9bH8AL9RjW1MBnu0A+ZhCvdnrffYaDX4UR +euOx4dnSJWpex7yXd5n+1Gi0EPgDfrjhAoIBAQCbq3JjpmDgLDpy+3aiOwyoNhRC +A+/+ZCTYd7eGHuvF1UtfzKUguJty3+PEC2mTVafCGTCjQZm0pUxqg2ZMErIuXU7u +EDEzWWirRAU4M3WGoKnaD+E+nLIfYcYkaWkYIKFlPw1HCVD18xxiUiVFDe8Peh5w +OiD2GxK8/BvlkYid/Kj0uA4EwQRJGaMHsvZwIgscF5X2MtojGOB+U4SCHXMoNr1C +heCBboIPamBcEEChe48PxDIgG2i/fr8T854Oq9y5JeSRFeysrqYbOI+DAvAY2A4o +qV15bjCxrbYUwQI3CvGS99cWAwYmNAt1xIQQGmBI4Ap4Ec6JIG/dXkE2Fe/U +-----END RSA PRIVATE KEY----- + diff --git a/crt/hugo-chain.crt b/crt/hugo-chain.crt new file mode 100644 index 0000000..c3d68c2 --- /dev/null +++ b/crt/hugo-chain.crt @@ -0,0 +1,60 @@ +-----BEGIN CERTIFICATE----- +MIIEqzCCApOgAwIBAgIBGjANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAzWhcNMjcwOTA4 +MDg0MTAzWjBkMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEjAQBgNVBAMMCWxvY2FsaG9zdDEN +MAsGA1UECwwEaHVnbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOsO +keiI/Pk/gTAb+4YXkTH/UgaI/OgXHsDNSpC4Ax834s09oNfxvWCryWtehRmByRnL +nAwJscZ3tZzZwNvsSqKX23+6TjBzhDjb88DoHX+0RsdaqU6xARje63H+0Lm9PZpr +j40yBTQZcsdxlGRakUivLKEj2CSisaQ6C7WRcPPIcEeplORy0E0/t1jAVE+Yjn/m +btusaoPgCMFKeLKLJEiyJAI6BU/G4s6MfcqEPDIOn9YH2KTtqNaA5/zOwdLd4f5v +t58Fb1KWManK5kD0QtAzfYWl822ACYbqjAPSvaj679JmepE8uda4LWletcUdgKVv +ffxdamSIyCRoXllNyHUCAwEAAaN2MHQwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8E +BAMCBaAwHQYDVR0OBBYEFF/xS+XzxtxOk1b7d4jhh245iCTnMB8GA1UdIwQYMBaA +FDsBwybel02MKMXtmo/Z8S0YC/S9MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkq +hkiG9w0BAQsFAAOCAgEASdlpsP7s5s/W8VgUlOaXsxpWAfkKQIMmUTqwt6paNt27 +TSEYY4J7oYGjZkik95DVP4vIXt6GnHGn91tCj/F5KqEOGzo+Y/ulmsxVTB4VZ00Z +Z+pGXA1M8ctuKpHyrMm77CLVLt1VMzlOiDmR3Ntzhkzhcn4gSH0lrFkqU7UTLarG +OdIm0WXfYYXnP0oA/b0hpqIWvhdn2p/lLjzr2ou2Ldp+21Co/NHDenF68es8X3YD +MMu31+vIc0jQoExxD/f9cTsvODi9W37rQ+CBgHgKkdUmhdh01X92GQ8FCs8UlDax +WoWdu9/l7d/5cIA6lqUWDhX4ERr1KXKMlQoKwckAEp5+fHELs8FMPDccquEa5TNY +36buWru60v/jOT9BhhxO2pwxvdUT4ghuLwf/ZsSZB00hS1VZtmtzW2yyHwGGlp0r +AEtMsqADppxc2QQrfRuZoCkgxcPqYV7rQEZXYYUgjrYnKE+fFbkk1j7iPqbIzzFa +z/KLWl9550DHfUwql2A/2M76jxJols1SjjLLB+qPeVVE+qioi474BBBlqnEdLEcc +Ws7yXowsdvruXYypu7C90JVU8oouagHQtgHScdAl783ZtEo+MZ0lKUK4vxbH5jpM +bi+2bLF8OvrVO3IcSuOdR65tBVuA3o5XQFSYl7TNp6gwRVioTwHbjgv6FuYECGU= +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDc1NDA2WhcNMzYwOTA1 +MDc1NDA2WjBWMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCk15IFJvb3QgQ0Ew +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv/6/A8xXnuXX6/qiA0q/f +THju1i+hROxZMtRFRDweBrgRUGthZlV1bphCxMqI0waDdLzk4IcsKtoZ1TULArlF +KyJ+ERXQMmz9ZZ/JB2vMvMl+xmt56A7HBD9K0ByTX2CeRllrdMwUU+2+DRdY3V9G +6bpxJTkpF1Yj85GLryXZE5SI+/nsMGfYUSEAY7LfZ8eovmuOFuCTS5I9/ku0eR0r +/ZKYcLp3K8b0Dp8WtGZGWuPuoUlt7pNqTY8oyWG4cE6toExHmiv+UawX1hsek0ao +/amHpQovahlowXtWaaLKDXusAJ4oDfLbjVdj8R5k5msdneRIogH+LhjULChts42a +RaMG5GiHTFiNHL/mWpjTNhBQE59ZqerQdIm2PBA5TiAm+TzZkaC+dQ6r2apYliRE +qAOK+yXvyGwhGOFQc9hLBoel5Gfuk8W/SW2Kmz+IoLarbgKI1ULGATLD8Ce+OGZY +EEoX7lV863OXpLQ9RnL/HRv4ql4UYHc5ZXWHnKwCDy9anbSU+AbTnC1Cu9TgLcsn +ZwZOXYbkoe8D65QnzN9wZmkYb1wTlgyyclz8aGbpC0OM3nq0kGUyStdUilGzUShy +lA1EqP5lqp5PWavErSih+9pBQejjKRh5JMVKSY0Xmv8b2eEwmhIt0q21wpMdpTF/ +mitwYhuoxajtIw74B+/eowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUOwHDJt6XTYwoxe2aj9nxLRgL9L0wDQYJKoZI +hvcNAQELBQADggIBAB3rtwMYk+UXSJ+d9Nd83ofaCPFjD5pEA+6i37jwt0y5Kb3X +LWNF7Nmb+IsvN92zSYgXf+oXaoCvCfF5/BAqeRIFQDtVMS3z6BC0HpGBg3uHF4bJ +EDRv+TUUg3KauT2IHz33371qhUhZuh2FIgzvtwS350MhlqjdAlpj1SJzEz9O9aNu +XcNXFe3A9Pes8vrvHgkPDqhKmJXf9dwModutrp/XQv5mQtx6lFb2FPprsv4j3nKU +76YaslbLWwZYl8abr0cv6Hi7pgUS+7bB3RmBT9+2yZpBN8lZ864o8Osuovui2OyS +cOVgVf4gYqg2xZO2u/F6dPxjctbmKSUUeonXc6QRI6/7vKO7x6HXWZxY9uv+dL/2 +l5jb6OFIzsFCXzwpseJyhW7yEzNE/AlIxeR+qgIhv3QyIV33yUKCA4Ki2E4ta7/X +LJ1IS29u3xDBRzcVKQGkfyDdk7K9KuR8IIz3hZieHRkrzggOK8vxRsLfXTKU1IRM +34Ys4LcPUDVX3Uy4zWwDhBuHRLCdlae2a4Sysot1uK5+846ihln1xqjE8IWuimX/ +HqtOktl2MfmVMDwTnGsIWG9iHRe+PimtlVYpt22ucRGt4XULps8hMYw5pvic1ofy +o8DkkOc94h7P0TGA0xUaBxJrscq5EuG7ty1BwhLWNHTYyB9fsSjoBqhvCdIN +-----END CERTIFICATE----- + diff --git a/crt/hugo.crt b/crt/hugo.crt new file mode 100644 index 0000000..2f4a8b9 --- /dev/null +++ b/crt/hugo.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEqzCCApOgAwIBAgIBGjANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAzWhcNMjcwOTA4 +MDg0MTAzWjBkMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEjAQBgNVBAMMCWxvY2FsaG9zdDEN +MAsGA1UECwwEaHVnbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOsO +keiI/Pk/gTAb+4YXkTH/UgaI/OgXHsDNSpC4Ax834s09oNfxvWCryWtehRmByRnL +nAwJscZ3tZzZwNvsSqKX23+6TjBzhDjb88DoHX+0RsdaqU6xARje63H+0Lm9PZpr +j40yBTQZcsdxlGRakUivLKEj2CSisaQ6C7WRcPPIcEeplORy0E0/t1jAVE+Yjn/m +btusaoPgCMFKeLKLJEiyJAI6BU/G4s6MfcqEPDIOn9YH2KTtqNaA5/zOwdLd4f5v +t58Fb1KWManK5kD0QtAzfYWl822ACYbqjAPSvaj679JmepE8uda4LWletcUdgKVv +ffxdamSIyCRoXllNyHUCAwEAAaN2MHQwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8E +BAMCBaAwHQYDVR0OBBYEFF/xS+XzxtxOk1b7d4jhh245iCTnMB8GA1UdIwQYMBaA +FDsBwybel02MKMXtmo/Z8S0YC/S9MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkq +hkiG9w0BAQsFAAOCAgEASdlpsP7s5s/W8VgUlOaXsxpWAfkKQIMmUTqwt6paNt27 +TSEYY4J7oYGjZkik95DVP4vIXt6GnHGn91tCj/F5KqEOGzo+Y/ulmsxVTB4VZ00Z +Z+pGXA1M8ctuKpHyrMm77CLVLt1VMzlOiDmR3Ntzhkzhcn4gSH0lrFkqU7UTLarG +OdIm0WXfYYXnP0oA/b0hpqIWvhdn2p/lLjzr2ou2Ldp+21Co/NHDenF68es8X3YD +MMu31+vIc0jQoExxD/f9cTsvODi9W37rQ+CBgHgKkdUmhdh01X92GQ8FCs8UlDax +WoWdu9/l7d/5cIA6lqUWDhX4ERr1KXKMlQoKwckAEp5+fHELs8FMPDccquEa5TNY +36buWru60v/jOT9BhhxO2pwxvdUT4ghuLwf/ZsSZB00hS1VZtmtzW2yyHwGGlp0r +AEtMsqADppxc2QQrfRuZoCkgxcPqYV7rQEZXYYUgjrYnKE+fFbkk1j7iPqbIzzFa +z/KLWl9550DHfUwql2A/2M76jxJols1SjjLLB+qPeVVE+qioi474BBBlqnEdLEcc +Ws7yXowsdvruXYypu7C90JVU8oouagHQtgHScdAl783ZtEo+MZ0lKUK4vxbH5jpM +bi+2bLF8OvrVO3IcSuOdR65tBVuA3o5XQFSYl7TNp6gwRVioTwHbjgv6FuYECGU= +-----END CERTIFICATE----- + diff --git a/crt/hugo.key b/crt/hugo.key new file mode 100644 index 0000000..28b7acb --- /dev/null +++ b/crt/hugo.key @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA6w6R6Ij8+T+BMBv7hheRMf9SBoj86BcewM1KkLgDHzfizT2g +1/G9YKvJa16FGYHJGcucDAmxxne1nNnA2+xKopfbf7pOMHOEONvzwOgdf7RGx1qp +TrEBGN7rcf7Qub09mmuPjTIFNBlyx3GUZFqRSK8soSPYJKKxpDoLtZFw88hwR6mU +5HLQTT+3WMBUT5iOf+Zu26xqg+AIwUp4soskSLIkAjoFT8bizox9yoQ8Mg6f1gfY +pO2o1oDn/M7B0t3h/m+3nwVvUpYxqcrmQPRC0DN9haXzbYAJhuqMA9K9qPrv0mZ6 +kTy51rgtaV61xR2ApW99/F1qZIjIJGheWU3IdQIDAQABAoIBAApB/IQVVlTaPJ0I +25UieiegaMf4OnE2cRUg4Fwoa5p1KeSjB93kossRNB0HZu+SBmClzg2IbsWme7p4 +lj4Ctc8aqW2Nh9P9dou0rZKBjqgACgaxIipY9x9KuyOiZyFz7LhMcVtMD4YShjvF +7R/kA+sUGfJ+SfRvVSlBjzlBO5in1TWCcsgKMDnli3vQo6eAwcB0LUCQl0uAooJR +ITODNpVXvIIzm9kg5RyyIZKwmnZC99WN3ZLLofupa8ILzJj4latMjL0lvPV340Vx +HaTDN4eyyF0EYoSa5pzfOzz3UeRjhN5bffhUOU3zIW3ViEXOAtOesr/TURVyvUKj +7OGeQBECgYEA9VuTty9IAyMl2LgakHY9ICapQw3hNS5hAvVMhK6z84wda5SKjXBI +GyvRoJSUGRYISY41VPHHRPXnN82rjUIqSG6qkdQqcjmIoRHm84SL6J3VgeNV48sx +4Ipg5F6jm2N/DuAjXKJu6n4Ef36xZkZWA7xDFsgUWq91FUhsw8jp/LcCgYEA9UCd +LgteVe3KnmqSenAOVvetzTbkpFGQYvtJL2R5jccdU6Ur4iU/NLIxh+xYOWjgMm37 +DSD1/Bu7Cb4JMI7ON3fw00p0Zm7oQyMiVFAzsaf0tozDZGa+TBhMxyKgvEFrS9U6 +fp7Do3iHVnfWp6IFX2fIp8iwGJcEayCe6elDEDMCgYEAr4F9LVjN2yimJtqybcmW +OcxN4SApiyAM1s/elz5cjIcaeFy9qyS4/26duY7uTO98qBjoP0Xfc42ugjVFVHsS +wdMfgcbRQfmzqPukR2b1qURVeF7EjnhHykVRv6mOwFUwitR7lwS98FCKKSTYAr+n +QW7GUqJ2JNRDHSE8Y+PwtAsCgYA2Vye8gQZY8cQ4T5K/ED8NI/ndg3Eru2rLk7QG +jTOlp12nH+zWQbx8d5Mj88kkh0lNwzKiGRCH2LkbkoDEwo+MmMXCezfJTn+mCI3d +spuRnI5LOGs+vskhYSz53oFQ1QnqFofMcG8WtGkATrNAF1Ura3p5Oq1R9XwkJGkx +mN6kIwKBgGDzi1lj/8xP3q6emDvU5oFxmZfClRsrUhTQbyuWFiMSNfFoANdeldm2 +0IidjMiiAnrjUlhM1lCO1Jkqk8AYpugsEHQZRcrbT87wAv/YGX0Run0bTBsjwo6d +KgXe+3cwCTM4FwtjYcPe+XMPCIxH/RpXyUAoV6IO6eLIC4vUY/Ni +-----END RSA PRIVATE KEY----- + diff --git a/crt/localhost-chain.crt b/crt/localhost-chain.crt new file mode 100644 index 0000000..1cc9f94 --- /dev/null +++ b/crt/localhost-chain.crt @@ -0,0 +1,61 @@ +-----BEGIN CERTIFICATE----- +MIIEsDCCApigAwIBAgIBFzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAyWhcNMjcwOTA4 +MDg0MTAyWjBpMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEjAQBgNVBAMMCWxvY2FsaG9zdDES +MBAGA1UECwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA7B9whIPTcUzOW/sY56gLs+xT/nX1Q3XKKQK1EGT3bNxQP0Iihy3zKkq2Ig0V +eizuqANKqPDuAy4Z9u0Pa/DCfRZXnFY9gyUF1D8+rBkasLteGSToZW7c1fC1GIVd +JH067d6twUydDxuzYCVLrhxiBE95T1gEwqOcHj6VMX/R+9Fz2t2PcdggiEdKymZW +nWmbjmnqVtWqIzfS4elFiosZBd4hI2kEHfCe223Ixnwcfk6XcqmiSMSZXNhjdrEK +uPcGT/wAG6qvjZRqvuk6wVL57X9tssIkGY5VqcJF1+sOdaBOkOSwoW3vSZ4Nvy3c +NFoXtYRGkoct8F11YQFLQJFTdQIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMA4GA1Ud +DwEB/wQEAwIFoDAdBgNVHQ4EFgQUyBVbFN9EiNXKmHv3SrqR4zDYZLUwHwYDVR0j +BBgwFoAUOwHDJt6XTYwoxe2aj9nxLRgL9L0wFAYDVR0RBA0wC4IJbG9jYWxob3N0 +MA0GCSqGSIb3DQEBCwUAA4ICAQBQik5F49MxVOFWXJ4LGkpi4LpErC4V7nFgsUKR +DoVfGxjXPp8CC0mKKkWTr/W4YmFDQVJt6yz7UXxGlk+/wCa2edf9gNJM5ayuN6NK +Kd6OOtNSOx+fIB3iFovfdJ/O/yLN7DWn3Qs2eGi7CIS3+ZGU9Cv11j1PowlTpBSo +cYiVFcnWuhAQqjTih2gZXNk9p12oEdCFjaOFwFIhvbaFov5XElRkoy5va7C3E3ws +ILOvBktPtpL9BVf7+BE9IQtQtHrQrlaccb8RMgssYB4Ot9tgTfvd5AHgrzgDlnUP +RrAPJTZ1zQgCusFBRZxoFt5OPGSXCeFItvGmu9JNACjwIU8mo4Mg8Eq7H/AIbZ/4 +dMtlCJ3gKJE7s+XTdzOUTjh/2MzRFmGaqgXOE7ZSxehv5cmmDamzWfSDUHG8bs83 +QuS+bgcLboLNm0wB52iP5d0tlyX0HxqV+65OZdsWZVSdroFAG4Os+BW82AwlHOgV +v+h4JHFAyr1VOzIzDHA6aemILGO/XPJ2Ud6eRdNrI8gHisMTYNHWUQkL0qqexkPu +DhPPzrvthXgpO55SpB5JKsBIFqj1HBnXIawSG1SL23khO/IOrgTAllDqfi9S3DiI +aigyTiDiidlU5qbyPSs+KYIIWlDGyLRnZi6yqshfDy4JBHRtryMKEf58ceEnX5J9 +DW9UPA== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDc1NDA2WhcNMzYwOTA1 +MDc1NDA2WjBWMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCk15IFJvb3QgQ0Ew +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv/6/A8xXnuXX6/qiA0q/f +THju1i+hROxZMtRFRDweBrgRUGthZlV1bphCxMqI0waDdLzk4IcsKtoZ1TULArlF +KyJ+ERXQMmz9ZZ/JB2vMvMl+xmt56A7HBD9K0ByTX2CeRllrdMwUU+2+DRdY3V9G +6bpxJTkpF1Yj85GLryXZE5SI+/nsMGfYUSEAY7LfZ8eovmuOFuCTS5I9/ku0eR0r +/ZKYcLp3K8b0Dp8WtGZGWuPuoUlt7pNqTY8oyWG4cE6toExHmiv+UawX1hsek0ao +/amHpQovahlowXtWaaLKDXusAJ4oDfLbjVdj8R5k5msdneRIogH+LhjULChts42a +RaMG5GiHTFiNHL/mWpjTNhBQE59ZqerQdIm2PBA5TiAm+TzZkaC+dQ6r2apYliRE +qAOK+yXvyGwhGOFQc9hLBoel5Gfuk8W/SW2Kmz+IoLarbgKI1ULGATLD8Ce+OGZY +EEoX7lV863OXpLQ9RnL/HRv4ql4UYHc5ZXWHnKwCDy9anbSU+AbTnC1Cu9TgLcsn +ZwZOXYbkoe8D65QnzN9wZmkYb1wTlgyyclz8aGbpC0OM3nq0kGUyStdUilGzUShy +lA1EqP5lqp5PWavErSih+9pBQejjKRh5JMVKSY0Xmv8b2eEwmhIt0q21wpMdpTF/ +mitwYhuoxajtIw74B+/eowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUOwHDJt6XTYwoxe2aj9nxLRgL9L0wDQYJKoZI +hvcNAQELBQADggIBAB3rtwMYk+UXSJ+d9Nd83ofaCPFjD5pEA+6i37jwt0y5Kb3X +LWNF7Nmb+IsvN92zSYgXf+oXaoCvCfF5/BAqeRIFQDtVMS3z6BC0HpGBg3uHF4bJ +EDRv+TUUg3KauT2IHz33371qhUhZuh2FIgzvtwS350MhlqjdAlpj1SJzEz9O9aNu +XcNXFe3A9Pes8vrvHgkPDqhKmJXf9dwModutrp/XQv5mQtx6lFb2FPprsv4j3nKU +76YaslbLWwZYl8abr0cv6Hi7pgUS+7bB3RmBT9+2yZpBN8lZ864o8Osuovui2OyS +cOVgVf4gYqg2xZO2u/F6dPxjctbmKSUUeonXc6QRI6/7vKO7x6HXWZxY9uv+dL/2 +l5jb6OFIzsFCXzwpseJyhW7yEzNE/AlIxeR+qgIhv3QyIV33yUKCA4Ki2E4ta7/X +LJ1IS29u3xDBRzcVKQGkfyDdk7K9KuR8IIz3hZieHRkrzggOK8vxRsLfXTKU1IRM +34Ys4LcPUDVX3Uy4zWwDhBuHRLCdlae2a4Sysot1uK5+846ihln1xqjE8IWuimX/ +HqtOktl2MfmVMDwTnGsIWG9iHRe+PimtlVYpt22ucRGt4XULps8hMYw5pvic1ofy +o8DkkOc94h7P0TGA0xUaBxJrscq5EuG7ty1BwhLWNHTYyB9fsSjoBqhvCdIN +-----END CERTIFICATE----- + diff --git a/crt/localhost.crt b/crt/localhost.crt new file mode 100644 index 0000000..cad8710 --- /dev/null +++ b/crt/localhost.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIEsDCCApigAwIBAgIBFzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAyWhcNMjcwOTA4 +MDg0MTAyWjBpMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEjAQBgNVBAMMCWxvY2FsaG9zdDES +MBAGA1UECwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA7B9whIPTcUzOW/sY56gLs+xT/nX1Q3XKKQK1EGT3bNxQP0Iihy3zKkq2Ig0V +eizuqANKqPDuAy4Z9u0Pa/DCfRZXnFY9gyUF1D8+rBkasLteGSToZW7c1fC1GIVd +JH067d6twUydDxuzYCVLrhxiBE95T1gEwqOcHj6VMX/R+9Fz2t2PcdggiEdKymZW +nWmbjmnqVtWqIzfS4elFiosZBd4hI2kEHfCe223Ixnwcfk6XcqmiSMSZXNhjdrEK +uPcGT/wAG6qvjZRqvuk6wVL57X9tssIkGY5VqcJF1+sOdaBOkOSwoW3vSZ4Nvy3c +NFoXtYRGkoct8F11YQFLQJFTdQIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMA4GA1Ud +DwEB/wQEAwIFoDAdBgNVHQ4EFgQUyBVbFN9EiNXKmHv3SrqR4zDYZLUwHwYDVR0j +BBgwFoAUOwHDJt6XTYwoxe2aj9nxLRgL9L0wFAYDVR0RBA0wC4IJbG9jYWxob3N0 +MA0GCSqGSIb3DQEBCwUAA4ICAQBQik5F49MxVOFWXJ4LGkpi4LpErC4V7nFgsUKR +DoVfGxjXPp8CC0mKKkWTr/W4YmFDQVJt6yz7UXxGlk+/wCa2edf9gNJM5ayuN6NK +Kd6OOtNSOx+fIB3iFovfdJ/O/yLN7DWn3Qs2eGi7CIS3+ZGU9Cv11j1PowlTpBSo +cYiVFcnWuhAQqjTih2gZXNk9p12oEdCFjaOFwFIhvbaFov5XElRkoy5va7C3E3ws +ILOvBktPtpL9BVf7+BE9IQtQtHrQrlaccb8RMgssYB4Ot9tgTfvd5AHgrzgDlnUP +RrAPJTZ1zQgCusFBRZxoFt5OPGSXCeFItvGmu9JNACjwIU8mo4Mg8Eq7H/AIbZ/4 +dMtlCJ3gKJE7s+XTdzOUTjh/2MzRFmGaqgXOE7ZSxehv5cmmDamzWfSDUHG8bs83 +QuS+bgcLboLNm0wB52iP5d0tlyX0HxqV+65OZdsWZVSdroFAG4Os+BW82AwlHOgV +v+h4JHFAyr1VOzIzDHA6aemILGO/XPJ2Ud6eRdNrI8gHisMTYNHWUQkL0qqexkPu +DhPPzrvthXgpO55SpB5JKsBIFqj1HBnXIawSG1SL23khO/IOrgTAllDqfi9S3DiI +aigyTiDiidlU5qbyPSs+KYIIWlDGyLRnZi6yqshfDy4JBHRtryMKEf58ceEnX5J9 +DW9UPA== +-----END CERTIFICATE----- + diff --git a/crt/localhost.key b/crt/localhost.key new file mode 100644 index 0000000..c9728c8 --- /dev/null +++ b/crt/localhost.key @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA7B9whIPTcUzOW/sY56gLs+xT/nX1Q3XKKQK1EGT3bNxQP0Ii +hy3zKkq2Ig0VeizuqANKqPDuAy4Z9u0Pa/DCfRZXnFY9gyUF1D8+rBkasLteGSTo +ZW7c1fC1GIVdJH067d6twUydDxuzYCVLrhxiBE95T1gEwqOcHj6VMX/R+9Fz2t2P +cdggiEdKymZWnWmbjmnqVtWqIzfS4elFiosZBd4hI2kEHfCe223Ixnwcfk6Xcqmi +SMSZXNhjdrEKuPcGT/wAG6qvjZRqvuk6wVL57X9tssIkGY5VqcJF1+sOdaBOkOSw +oW3vSZ4Nvy3cNFoXtYRGkoct8F11YQFLQJFTdQIDAQABAoIBAASJnHcuHwRXSkOU +vqIHBfCMywFsbAyXk81iyVl5uJKC5QI43Q0qz3iMK9YELoSPnqd5EWMlPCGwrgbj +f9oea+e3o/KJFWYIMlrlkJNXPn7PyaC4kkRkE2zYvcDX9pYCrRJQpuynHQE4Z6Oi +RoMfoFeTsmcEBUAQoP7+ILkCizsS/iRAM66lJyK/NOfVr4Au1F/BgGYeRMfIHeMT +SzqwHDmatk+tqms+HnmXO6EhNMXlCPFtGXyU1RY6CWeGv71iahbcjKOpO2+JJxYd +0oSz3O4ruvxFB6y1dtBL09UEohAOyLxFHuM9RZfcbK7yURSzVak6B8HhP0VJ1XYI +GaKueKECgYEA/1W2xgYStemiY+3kRGQZkvn7XXgFp4fWt2Y62klpiCR/dWAmG4Uc +nP2JcjiRw31WSjJ050QrQETOW2K2bcEoceJl/f4VRy/wy2E3vzJTG972EondMArE +QGulnX0zEoWtqSZP557hKJ9DKUPqsvgqv+phh054v2mrhkfCbVlb1pUCgYEA7Lzp +ry36JDlyyDF5CtB6N5XURZEC4cB61l3ZR9aq+fGPM5o0rUuHCvRLP7tCxbtoB+kD +EOVmciJ/1T9/g4Pt7CIceGi3sIoaaINvZJWLjcI+hX2NeXSDnKa/7JDC6QubSFvs +nbVTgVc7QhzpaZDuaOgLskIKKpfiRzWFd/3IsWECgYEAxvmFoBVVeVtix9q3mrAi +2c1im/kO9vm9UlghHsA8s/I1PUO7DpERtilBdbgtpxjCKLnfLeWKit/Tq5VmMmtm +2DCkaGUbMcljLSpKZf2SlFKQkevLaUfKnaUFf4/0P8fah8kqVYYTUjOiA8NAX01T +CxFcBTQalpeDKfY7xjjvf20CgYEAw3bLP0+n7Abe5borZalyb7iu1m1/wqOpCJve +TflJnCs9gG6/NaJZssq34rwbyqUMpRNX67hs2KnxgEH4Z78jT8duWGCl4gZ0/Xwg +Gh17ZyVNd+yNRg3UqR/o8UspEz/5C0qS2Dgh5XX/wHucoQQARO/q0FjEihxzwTXI +qKUK8qECgYA4qwx5WZfI4FzinxfLgohQCDuusCj0BwWJZ3wAWGskPeMIz71/3U6C +xWnRAQyO28I5rPfGwHAPZy3W6tjLFOrqA1HtR530dM2nQvQtklVaOepdTNcty2j+ +KtA/IE48kOJiTInsVAsZ/d5vaXKHcNui1K+/ieyZiJNIFmudQv3L5g== +-----END RSA PRIVATE KEY----- + diff --git a/crt/man-dan-05-chain.crt b/crt/man-dan-05-chain.crt new file mode 100644 index 0000000..1626ebb --- /dev/null +++ b/crt/man-dan-05-chain.crt @@ -0,0 +1,61 @@ +-----BEGIN CERTIFICATE----- +MIIEszCCApugAwIBAgIBGDANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAyWhcNMjcwOTA4 +MDg0MTAyWjBrMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCm1hbi1kYW4tMDUx +EzARBgNVBAsMCm1hbi1kYW4tMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDB1K7CYSa7Us4pomvMs0PIJUX0unGzC+KinsnLGMO1fpb8VEOprQ+HY61f +87hpIGD4VjX72ELuHBDCB5qi9q5emUZJnRzxPw9OGS6q1wKwI07yOMN1L++mBjEs +zHv5koTf5DcGBgSp7AItooXJd2Ct36nPKp0iPyKSXypdIC5A51xAgUVAFs6nAXug +uQIy4G/FXalLY3JHUL7OtGfyrahG7AAM0J0sv54awJUD+PQ4685uRR/NqTkidYgZ +liOn7e1eKFOzgIm8q8b5lTg8UWQovtCRJrN5h63QiXKS/vEzV+SwZG72dUd8aPKG +r640Chp6qr3sEdjdVkN67wOzNpK5AgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwDgYD +VR0PAQH/BAQDAgWgMB0GA1UdDgQWBBSCGyOvy8BYa4lX4ONYtutUZsZyHzAfBgNV +HSMEGDAWgBQ7AcMm3pdNjCjF7ZqP2fEtGAv0vTAVBgNVHREEDjAMggptYW4tZGFu +LTA1MA0GCSqGSIb3DQEBCwUAA4ICAQAkBtg4r/c3N1Fd3iNboALRZ6zflbFmV5RQ +IKNCdtg2tDkbT8RRHM9WHyRSEyd1Oc67ATLxumN1Zta0ugQSNRNlXLohRENE0QRM +f90vuXyclfL6JZyX5lgR0TDd2Yh2Tb3ZH7qEICswapEyvyUNldmtrqvv+vJfhlHC +Su311mG+fZJzbuyzP0NSimo5pAVhLlLkp224TuBEZpxvxcLCCrbt45dfAd/KQ2Py +/iy2IBy1vsr8FOzpUHYPrQ0wZbE8NVQuhw1dtPVvtcrQBRVhfsMUS5mng2HlkXHw +YJbkTYU+Cv9vp8sNz/53OeBKpeh7znXdQED3QhBkUTq95vJPWtcqt1JPDP6WCgyG +kCg3QhTZ2QSgPcMjupQ6/j8n3wykH0I4iW08aweRyxLgbRIZNG6EMAxdeYVT2AF8 +mt6hhxzcSj1nTc0WsE+R9BG4Nvd9UDRG+1aeV3BZ+M33ONTMEUdlzu6gafV6p06k +J9qUzGhWyIhUGcUaFbbVlT7YycyNPOxXCFJUa+bmaEfQCn7SmC/kflUwIzxQt8Gs +6WLf9JLkB6pvy9NK5FCZgbcfeXRyWAzzIVeAFR4mhLa6t2HwPS4Ja3HS5HKnH3Lm +Ger4VnJdF+CHtNXLTLI8W/SibAtNqjj8W55jYJLH+gnnizFYtJ/A8LPkd3wOgUks +mT1rhXUx5A== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDc1NDA2WhcNMzYwOTA1 +MDc1NDA2WjBWMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCk15IFJvb3QgQ0Ew +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv/6/A8xXnuXX6/qiA0q/f +THju1i+hROxZMtRFRDweBrgRUGthZlV1bphCxMqI0waDdLzk4IcsKtoZ1TULArlF +KyJ+ERXQMmz9ZZ/JB2vMvMl+xmt56A7HBD9K0ByTX2CeRllrdMwUU+2+DRdY3V9G +6bpxJTkpF1Yj85GLryXZE5SI+/nsMGfYUSEAY7LfZ8eovmuOFuCTS5I9/ku0eR0r +/ZKYcLp3K8b0Dp8WtGZGWuPuoUlt7pNqTY8oyWG4cE6toExHmiv+UawX1hsek0ao +/amHpQovahlowXtWaaLKDXusAJ4oDfLbjVdj8R5k5msdneRIogH+LhjULChts42a +RaMG5GiHTFiNHL/mWpjTNhBQE59ZqerQdIm2PBA5TiAm+TzZkaC+dQ6r2apYliRE +qAOK+yXvyGwhGOFQc9hLBoel5Gfuk8W/SW2Kmz+IoLarbgKI1ULGATLD8Ce+OGZY +EEoX7lV863OXpLQ9RnL/HRv4ql4UYHc5ZXWHnKwCDy9anbSU+AbTnC1Cu9TgLcsn +ZwZOXYbkoe8D65QnzN9wZmkYb1wTlgyyclz8aGbpC0OM3nq0kGUyStdUilGzUShy +lA1EqP5lqp5PWavErSih+9pBQejjKRh5JMVKSY0Xmv8b2eEwmhIt0q21wpMdpTF/ +mitwYhuoxajtIw74B+/eowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUOwHDJt6XTYwoxe2aj9nxLRgL9L0wDQYJKoZI +hvcNAQELBQADggIBAB3rtwMYk+UXSJ+d9Nd83ofaCPFjD5pEA+6i37jwt0y5Kb3X +LWNF7Nmb+IsvN92zSYgXf+oXaoCvCfF5/BAqeRIFQDtVMS3z6BC0HpGBg3uHF4bJ +EDRv+TUUg3KauT2IHz33371qhUhZuh2FIgzvtwS350MhlqjdAlpj1SJzEz9O9aNu +XcNXFe3A9Pes8vrvHgkPDqhKmJXf9dwModutrp/XQv5mQtx6lFb2FPprsv4j3nKU +76YaslbLWwZYl8abr0cv6Hi7pgUS+7bB3RmBT9+2yZpBN8lZ864o8Osuovui2OyS +cOVgVf4gYqg2xZO2u/F6dPxjctbmKSUUeonXc6QRI6/7vKO7x6HXWZxY9uv+dL/2 +l5jb6OFIzsFCXzwpseJyhW7yEzNE/AlIxeR+qgIhv3QyIV33yUKCA4Ki2E4ta7/X +LJ1IS29u3xDBRzcVKQGkfyDdk7K9KuR8IIz3hZieHRkrzggOK8vxRsLfXTKU1IRM +34Ys4LcPUDVX3Uy4zWwDhBuHRLCdlae2a4Sysot1uK5+846ihln1xqjE8IWuimX/ +HqtOktl2MfmVMDwTnGsIWG9iHRe+PimtlVYpt22ucRGt4XULps8hMYw5pvic1ofy +o8DkkOc94h7P0TGA0xUaBxJrscq5EuG7ty1BwhLWNHTYyB9fsSjoBqhvCdIN +-----END CERTIFICATE----- + diff --git a/crt/man-dan-05.crt b/crt/man-dan-05.crt new file mode 100644 index 0000000..a3184d3 --- /dev/null +++ b/crt/man-dan-05.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIEszCCApugAwIBAgIBGDANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAyWhcNMjcwOTA4 +MDg0MTAyWjBrMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCm1hbi1kYW4tMDUx +EzARBgNVBAsMCm1hbi1kYW4tMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDB1K7CYSa7Us4pomvMs0PIJUX0unGzC+KinsnLGMO1fpb8VEOprQ+HY61f +87hpIGD4VjX72ELuHBDCB5qi9q5emUZJnRzxPw9OGS6q1wKwI07yOMN1L++mBjEs +zHv5koTf5DcGBgSp7AItooXJd2Ct36nPKp0iPyKSXypdIC5A51xAgUVAFs6nAXug +uQIy4G/FXalLY3JHUL7OtGfyrahG7AAM0J0sv54awJUD+PQ4685uRR/NqTkidYgZ +liOn7e1eKFOzgIm8q8b5lTg8UWQovtCRJrN5h63QiXKS/vEzV+SwZG72dUd8aPKG +r640Chp6qr3sEdjdVkN67wOzNpK5AgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwDgYD +VR0PAQH/BAQDAgWgMB0GA1UdDgQWBBSCGyOvy8BYa4lX4ONYtutUZsZyHzAfBgNV +HSMEGDAWgBQ7AcMm3pdNjCjF7ZqP2fEtGAv0vTAVBgNVHREEDjAMggptYW4tZGFu +LTA1MA0GCSqGSIb3DQEBCwUAA4ICAQAkBtg4r/c3N1Fd3iNboALRZ6zflbFmV5RQ +IKNCdtg2tDkbT8RRHM9WHyRSEyd1Oc67ATLxumN1Zta0ugQSNRNlXLohRENE0QRM +f90vuXyclfL6JZyX5lgR0TDd2Yh2Tb3ZH7qEICswapEyvyUNldmtrqvv+vJfhlHC +Su311mG+fZJzbuyzP0NSimo5pAVhLlLkp224TuBEZpxvxcLCCrbt45dfAd/KQ2Py +/iy2IBy1vsr8FOzpUHYPrQ0wZbE8NVQuhw1dtPVvtcrQBRVhfsMUS5mng2HlkXHw +YJbkTYU+Cv9vp8sNz/53OeBKpeh7znXdQED3QhBkUTq95vJPWtcqt1JPDP6WCgyG +kCg3QhTZ2QSgPcMjupQ6/j8n3wykH0I4iW08aweRyxLgbRIZNG6EMAxdeYVT2AF8 +mt6hhxzcSj1nTc0WsE+R9BG4Nvd9UDRG+1aeV3BZ+M33ONTMEUdlzu6gafV6p06k +J9qUzGhWyIhUGcUaFbbVlT7YycyNPOxXCFJUa+bmaEfQCn7SmC/kflUwIzxQt8Gs +6WLf9JLkB6pvy9NK5FCZgbcfeXRyWAzzIVeAFR4mhLa6t2HwPS4Ja3HS5HKnH3Lm +Ger4VnJdF+CHtNXLTLI8W/SibAtNqjj8W55jYJLH+gnnizFYtJ/A8LPkd3wOgUks +mT1rhXUx5A== +-----END CERTIFICATE----- + diff --git a/crt/man-dan-05.key b/crt/man-dan-05.key new file mode 100644 index 0000000..f853a13 --- /dev/null +++ b/crt/man-dan-05.key @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAwdSuwmEmu1LOKaJrzLNDyCVF9Lpxswviop7JyxjDtX6W/FRD +qa0Ph2OtX/O4aSBg+FY1+9hC7hwQwgeaovauXplGSZ0c8T8PThkuqtcCsCNO8jjD +dS/vpgYxLMx7+ZKE3+Q3BgYEqewCLaKFyXdgrd+pzyqdIj8ikl8qXSAuQOdcQIFF +QBbOpwF7oLkCMuBvxV2pS2NyR1C+zrRn8q2oRuwADNCdLL+eGsCVA/j0OOvObkUf +zak5InWIGZYjp+3tXihTs4CJvKvG+ZU4PFFkKL7QkSazeYet0Ilykv7xM1fksGRu +9nVHfGjyhq+uNAoaeqq97BHY3VZDeu8DszaSuQIDAQABAoIBAALP8gqsM+6JGqho +PMHrMm8xmkCdIWfwgtTq8qDVnsZP/EMUOmiYdBaZ68KuA7WTxJBp2M3rAvqXMeeM +ynG1nE1PUkGga9J0wKU4kJCmPrndQ0iYqf5V6BdbtOQyYdSay35/nkxCM1hfTh9J +IcGM77xKF9nDg6Ti716aDqBsBnvG0RK04KkNOp/LfAPy9CGgIVDn4LPojyXXM8Cz +GHS7DGbz0rarUiv0T8aJOszYv3Hb4wg0XzDBEp6SKRdjJwJ+SSk4zieLPRL2M5iV +auGmwJCi8TYPno/N8nqnSqIXNp4Kv3BqOfBG3nnCp1zPU8kdUB/5v8vJKvvFsKJs +CuMp6aECgYEA+UCDImodT03eHl+g1D/T5KybIKYlfP2dyXKz8lXM5oSyhq/59YLw +YAr8yGt8dGlTSXZOSqBCAJRyvslNaQGXbRpVtSv7+JwZPHYJDnFtmO9MoKcdiaTm +UMflFr6OkHH+qo2SytTDyZ9wqylsAKFn1zftbFyQ0I7vajO27vFQzJkCgYEAxxQQ +NcSbDYbPWYDGUC/kEwMrb23yUwFikcW2t412rgmkrqND76QGkuACcDJv1aGruyjJ +h7UW5B0hRCKNEqW4ShTI3AVPBsrRMBQEYcXfh2jT7Ges2m3ztCshie7MD4PVRyZO +1j2K7KX6s84E0l8Vj757jezM6k2/0b5NxXtyqyECgYBuNbpGE0mWcUXPhFUmxHo6 +2J9XFl/pHnMQSemLM6kAHJibuV/60MTckr8nF2/WQWQUTX1cvfOxMfJyravOzGda +VJSlISeuy8bU1xQ2EK13PAhT2NDUtdcozNpc7jE3aVBDtYm8qctQcXFuHUimFrhF +j3MpwNw/e5QdD3TJvmYNsQKBgDoEG9E/kZw4jFbeE20s97+erdrUZMlR3wLyZpRJ +cqu3fbmzNMoyuAO3qp495J+SdPSfJ1QYLyqdXqN3mjsz9mgIdJzCI0yscJgdTUWd +H85be18qu5IQdvQrmaOT5v4iglYw0MrYtpLOsCgUQw13zlXMwj8TIoipzdv3JL0H +g9xhAoGAM8/hywrwMNdcfaogKAePDk2FfOb4zhWyjx868DrkSArzNrRbd0aYPUTV +fZh8Usz55VdfDYA/cut6jdMXjRX3yhDU7IXs9SmdeMQwxTuQVv/9aOg84uNaKHKe +KsT4RVBJF5PYhWPlM1LO/DcCcDre2DahA2OqQ+S+dWZex4nGBaU= +-----END RSA PRIVATE KEY----- + diff --git a/crt/ras-dan-01-chain.crt b/crt/ras-dan-01-chain.crt new file mode 100644 index 0000000..ea09f43 --- /dev/null +++ b/crt/ras-dan-01-chain.crt @@ -0,0 +1,61 @@ +-----BEGIN CERTIFICATE----- +MIIEszCCApugAwIBAgIBGTANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAzWhcNMjcwOTA4 +MDg0MTAzWjBrMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCnJhcy1kYW4tMDEx +EzARBgNVBAsMCnJhcy1kYW4tMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDGms8XFZwmnL/7D1yIfvyFIYfmuyGSUCa40tPw9rrVZGBG4VVtmHOBcMY/ +U+0/MXuXonAqe/qbabvqsi+zQA4280siadeG/k1Q7UKQADmw7Qu7TbbK4klI5Xuz +/KtZK1ZOQNRS8OdO1EvJroG5J3U64Ri5ODlBA6vjk6OMrQXIOv1o616QGTFzCne6 +08KZG2ACdgPKXBn3wiBMo6DSwOwMU31uKbTUqKx+spBHgUMsrfIm3ckGmzC4iJ/3 +TBEg2Pr0au9YzAEnwOXY+HV7307hKoJslFvd8Nj7PDZuK/i5Vg1HuWDkwpwYHCfi +kE7ExbQS6UardUpe4F/HnAqAYeqTAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwDgYD +VR0PAQH/BAQDAgWgMB0GA1UdDgQWBBQoU+V8cq2PTEFq6QtDDRj7jlvLWjAfBgNV +HSMEGDAWgBQ7AcMm3pdNjCjF7ZqP2fEtGAv0vTAVBgNVHREEDjAMggpyYXMtZGFu +LTAxMA0GCSqGSIb3DQEBCwUAA4ICAQBLjYUBJlpkw+d0/mvZp3xNTS7Rs1Qapsef +W0nKGn5hslXJE3YKBMhCAZ88A7wQ5OiOJjPZIkuRwCNLZ/V8haavfctqvSj7epEU +crgG5VcVn+xFQVn9P5itq4HtZeLdwBphPzF2VUxFvklEp/ZUbSUAIWDP/mlblo/M +iZTTcgGZvaFbwmWuaJol/CMU2zMQYTPhTVBwt9+aHDEpDfVQuaNGQr3Gqyc6SI9Q +EHNc/hHG2jCqeaOK106sao7AFL/crASqTCAUP2XoFx47Mslw6rcblXRTHP4ZgyF6 +WqxzOrzX95lkeupMqV3TN/ng2AIzgZLmEO6R8i027c6FdiEoxv9O4A2I9j0kMDb5 +yrUUfC3KvXLNrj05baEzgyu4PBLgNS93OC4EqCB4Xct3+dXKdpuirXyRnK9WiVSA +TuRAVS/ScLR/OtyUDI11/BK6KXFd5pN2E4W8yIOU2o4BlCyUQ0Z0C0hQsqx/OSjX +Qm9k7CwW39qbo3Mqyb5iXmPSMnpGzC4c9GZMhUvov3Jx8kDmm1U7MXx6yVYxiFS+ +/Qicy/llVkMTjJQ45aPX1FOQZ7lWcCX7B0p8v6VhAC4EdD0CNr+KxYzAKv9Yu2DX +rDHh7vBGXlCjWiIQb5H3uwEgiv1RqAWdI5ouzaiDfysR0ckaqorWw71A9pfOAund +9241vNHa+w== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDc1NDA2WhcNMzYwOTA1 +MDc1NDA2WjBWMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCk15IFJvb3QgQ0Ew +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv/6/A8xXnuXX6/qiA0q/f +THju1i+hROxZMtRFRDweBrgRUGthZlV1bphCxMqI0waDdLzk4IcsKtoZ1TULArlF +KyJ+ERXQMmz9ZZ/JB2vMvMl+xmt56A7HBD9K0ByTX2CeRllrdMwUU+2+DRdY3V9G +6bpxJTkpF1Yj85GLryXZE5SI+/nsMGfYUSEAY7LfZ8eovmuOFuCTS5I9/ku0eR0r +/ZKYcLp3K8b0Dp8WtGZGWuPuoUlt7pNqTY8oyWG4cE6toExHmiv+UawX1hsek0ao +/amHpQovahlowXtWaaLKDXusAJ4oDfLbjVdj8R5k5msdneRIogH+LhjULChts42a +RaMG5GiHTFiNHL/mWpjTNhBQE59ZqerQdIm2PBA5TiAm+TzZkaC+dQ6r2apYliRE +qAOK+yXvyGwhGOFQc9hLBoel5Gfuk8W/SW2Kmz+IoLarbgKI1ULGATLD8Ce+OGZY +EEoX7lV863OXpLQ9RnL/HRv4ql4UYHc5ZXWHnKwCDy9anbSU+AbTnC1Cu9TgLcsn +ZwZOXYbkoe8D65QnzN9wZmkYb1wTlgyyclz8aGbpC0OM3nq0kGUyStdUilGzUShy +lA1EqP5lqp5PWavErSih+9pBQejjKRh5JMVKSY0Xmv8b2eEwmhIt0q21wpMdpTF/ +mitwYhuoxajtIw74B+/eowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUOwHDJt6XTYwoxe2aj9nxLRgL9L0wDQYJKoZI +hvcNAQELBQADggIBAB3rtwMYk+UXSJ+d9Nd83ofaCPFjD5pEA+6i37jwt0y5Kb3X +LWNF7Nmb+IsvN92zSYgXf+oXaoCvCfF5/BAqeRIFQDtVMS3z6BC0HpGBg3uHF4bJ +EDRv+TUUg3KauT2IHz33371qhUhZuh2FIgzvtwS350MhlqjdAlpj1SJzEz9O9aNu +XcNXFe3A9Pes8vrvHgkPDqhKmJXf9dwModutrp/XQv5mQtx6lFb2FPprsv4j3nKU +76YaslbLWwZYl8abr0cv6Hi7pgUS+7bB3RmBT9+2yZpBN8lZ864o8Osuovui2OyS +cOVgVf4gYqg2xZO2u/F6dPxjctbmKSUUeonXc6QRI6/7vKO7x6HXWZxY9uv+dL/2 +l5jb6OFIzsFCXzwpseJyhW7yEzNE/AlIxeR+qgIhv3QyIV33yUKCA4Ki2E4ta7/X +LJ1IS29u3xDBRzcVKQGkfyDdk7K9KuR8IIz3hZieHRkrzggOK8vxRsLfXTKU1IRM +34Ys4LcPUDVX3Uy4zWwDhBuHRLCdlae2a4Sysot1uK5+846ihln1xqjE8IWuimX/ +HqtOktl2MfmVMDwTnGsIWG9iHRe+PimtlVYpt22ucRGt4XULps8hMYw5pvic1ofy +o8DkkOc94h7P0TGA0xUaBxJrscq5EuG7ty1BwhLWNHTYyB9fsSjoBqhvCdIN +-----END CERTIFICATE----- + diff --git a/crt/ras-dan-01.crt b/crt/ras-dan-01.crt new file mode 100644 index 0000000..615f972 --- /dev/null +++ b/crt/ras-dan-01.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIEszCCApugAwIBAgIBGTANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJERTEQ +MA4GA1UECAwHU2FjaHNlbjEOMAwGA1UECgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNk +ZW4xEzARBgNVBAMMCk15IFJvb3QgQ0EwHhcNMjYwOTA4MDg0MTAzWhcNMjcwOTA4 +MDg0MTAzWjBrMQswCQYDVQQGEwJERTEQMA4GA1UECAwHU2FjaHNlbjEOMAwGA1UE +CgwFSWNoQUcxEDAOBgNVBAcMB0RyZXNkZW4xEzARBgNVBAMMCnJhcy1kYW4tMDEx +EzARBgNVBAsMCnJhcy1kYW4tMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDGms8XFZwmnL/7D1yIfvyFIYfmuyGSUCa40tPw9rrVZGBG4VVtmHOBcMY/ +U+0/MXuXonAqe/qbabvqsi+zQA4280siadeG/k1Q7UKQADmw7Qu7TbbK4klI5Xuz +/KtZK1ZOQNRS8OdO1EvJroG5J3U64Ri5ODlBA6vjk6OMrQXIOv1o616QGTFzCne6 +08KZG2ACdgPKXBn3wiBMo6DSwOwMU31uKbTUqKx+spBHgUMsrfIm3ckGmzC4iJ/3 +TBEg2Pr0au9YzAEnwOXY+HV7307hKoJslFvd8Nj7PDZuK/i5Vg1HuWDkwpwYHCfi +kE7ExbQS6UardUpe4F/HnAqAYeqTAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwDgYD +VR0PAQH/BAQDAgWgMB0GA1UdDgQWBBQoU+V8cq2PTEFq6QtDDRj7jlvLWjAfBgNV +HSMEGDAWgBQ7AcMm3pdNjCjF7ZqP2fEtGAv0vTAVBgNVHREEDjAMggpyYXMtZGFu +LTAxMA0GCSqGSIb3DQEBCwUAA4ICAQBLjYUBJlpkw+d0/mvZp3xNTS7Rs1Qapsef +W0nKGn5hslXJE3YKBMhCAZ88A7wQ5OiOJjPZIkuRwCNLZ/V8haavfctqvSj7epEU +crgG5VcVn+xFQVn9P5itq4HtZeLdwBphPzF2VUxFvklEp/ZUbSUAIWDP/mlblo/M +iZTTcgGZvaFbwmWuaJol/CMU2zMQYTPhTVBwt9+aHDEpDfVQuaNGQr3Gqyc6SI9Q +EHNc/hHG2jCqeaOK106sao7AFL/crASqTCAUP2XoFx47Mslw6rcblXRTHP4ZgyF6 +WqxzOrzX95lkeupMqV3TN/ng2AIzgZLmEO6R8i027c6FdiEoxv9O4A2I9j0kMDb5 +yrUUfC3KvXLNrj05baEzgyu4PBLgNS93OC4EqCB4Xct3+dXKdpuirXyRnK9WiVSA +TuRAVS/ScLR/OtyUDI11/BK6KXFd5pN2E4W8yIOU2o4BlCyUQ0Z0C0hQsqx/OSjX +Qm9k7CwW39qbo3Mqyb5iXmPSMnpGzC4c9GZMhUvov3Jx8kDmm1U7MXx6yVYxiFS+ +/Qicy/llVkMTjJQ45aPX1FOQZ7lWcCX7B0p8v6VhAC4EdD0CNr+KxYzAKv9Yu2DX +rDHh7vBGXlCjWiIQb5H3uwEgiv1RqAWdI5ouzaiDfysR0ckaqorWw71A9pfOAund +9241vNHa+w== +-----END CERTIFICATE----- + diff --git a/crt/ras-dan-01.key b/crt/ras-dan-01.key new file mode 100644 index 0000000..32036e5 --- /dev/null +++ b/crt/ras-dan-01.key @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAxprPFxWcJpy/+w9ciH78hSGH5rshklAmuNLT8Pa61WRgRuFV +bZhzgXDGP1PtPzF7l6JwKnv6m2m76rIvs0AONvNLImnXhv5NUO1CkAA5sO0Lu022 +yuJJSOV7s/yrWStWTkDUUvDnTtRLya6BuSd1OuEYuTg5QQOr45OjjK0FyDr9aOte +kBkxcwp3utPCmRtgAnYDylwZ98IgTKOg0sDsDFN9bim01KisfrKQR4FDLK3yJt3J +BpswuIif90wRINj69GrvWMwBJ8Dl2Ph1e99O4SqCbJRb3fDY+zw2biv4uVYNR7lg +5MKcGBwn4pBOxMW0EulGq3VKXuBfx5wKgGHqkwIDAQABAoIBAEryAnIIoptjjYLV +Qir0GKC4jYtBVKLdAi++x2HoCYsbTMWSpOUtoXDYOMePCTlOmAAZuVAe5uwc01/2 +i8+NvY948gJzhHSZpF2EmxiyLRMZ8NJmujMHf3Y1ux+pmpOUqgXvqu/9npv9uvfJ +lYRkYnWsmeLTV6+0DfpcLVyZslPjXGc7to+79yTDseeRpXbPUBYL80CotUTusi4J +o1KVswsGEl3I2O/ssoaPgjzr69TZUYF0hTn/p9nsJpGVrWZfOjdN1o38yvOzL8Mh +eSi58Ixvg7SXwJp2N7muTqXWXKJbHhSddmxcRBxbZP81SuwTDN2rgcfANnynP5Nz +osf3cpkCgYEA7qmV/gNLSKRcm8+S08Kdsry4ThlAkKDVMEgnOM8uQP8DBHo91y8T +gI0xuVf5NiSWt6CsfgDvCWsL6gfKW9yMd0ttXJndWXfjddFgbppsAeUBBVenn2EU +Aqwnd8JNF02W974ixZs2iSezl3HzYFr72ZPle8boURvhrnaqR9gvUg8CgYEA1QhE +pB6D6J0LwoY37UpwZaho+GEkv/z7lWd/sb6Z+EFmu/gZ4W1rfgmZ1xtwu1dEU26U +rhGztiqdAyOPrBhPMxb+fFDx+nuJjjtROG4/tONmofu5iUxGbf0eU6hEq9Bilwvd +e2rPMqOQntJzhkD7z1R02H3oDZKO78+CLjD30z0CgYEAotFjGIXayFYJL+ruejUd +LKD/A5jKqWBv0J6I04LURVc0EcvrgHAHV/37XDyeMcfIYsHkq5mrebtjx2dFMGJI +GeKFW1VE4xKdRPVwWkRTRv+aMLDaFCtAYYpc6qDNwwYV5jH6uuDm1a8WIE2HAcdQ +ZeE1/7l1KFBjKIigJp9fuRUCgYEAjIZyuQxEGUqXOk9NTyM+d2CbNdTm6BpaXtiy +HC7N5DxIJ5BmihSixrZQm9vHBl1vfdXBD/4vXOhJQIvRt0Ul4V62qoy+wmuBdqhc +UGwxbAJhblLdtdrxzpYczjR+cBP7JQY3qLTxTscknA/ZEuOE9+QPW8vaKjHWRgzN +I+k7YUUCgYEA7C55gLO2/OMSSG5y5WoHtJ69ijLZk78ya/7Q/0DwSijL7sWRftVy +Pcfv5XDAurq7KKO8Rdnz43npTS5xd5QG2A+UGopVccGJ0nFbrhSiyha8Y71WqzCb ++t9ZxUsLZ7y+5cwPOq9nTMl5LIMzoknk+PpBkKfYJlLTatRohsFjqyc= +-----END RSA PRIVATE KEY----- + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..01b81ac --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +services: + hugo: + image: hugomods/hugo:latest # Hugo 0.165.0 (2026) + entrypoint: /src/entrypoint.sh + volumes: + - ./site:/src # Hugo-Config, Layouts, Assets, Entrypoint + - ./content:/src/content # HIER .md-Dateien ablegen + restart: unless-stopped + + caddy: + image: caddy:2-alpine + ports: + - "5443:5443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - ./crt:/etc/caddy/certs:ro + - caddy_data:/data + restart: unless-stopped + depends_on: + - hugo + +volumes: + caddy_data: \ No newline at end of file diff --git a/site/.hugo_build.lock b/site/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/site/assets/css/main.css b/site/assets/css/main.css new file mode 100644 index 0000000..a6283b8 --- /dev/null +++ b/site/assets/css/main.css @@ -0,0 +1,326 @@ +/* ============================================================ + Modern CSS — oklch() + light-dark() + CSS Grid + Container Q + Kein Build-Step. Funktioniert in Chrome 111+, Firefox 120+, + Safari 16.4+ (alles 2023+). + ============================================================ */ + +/* ---- Reset & Base ---- */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; +} + +html { + color-scheme: light dark; + scroll-behavior: smooth; +} + +body { + --bg: light-dark(oklch(0.98 0 0), oklch(0.15 0.005 260)); + --text: light-dark(oklch(0.25 0 0), oklch(0.88 0.005 260)); + --muted: light-dark(oklch(0.50 0 0), oklch(0.55 0.005 260)); + --border: light-dark(oklch(0.85 0 0), oklch(0.28 0.005 260)); + --card: light-dark(oklch(1 0 0), oklch(0.20 0.008 260)); + --card-h: light-dark(oklch(0.96 0 0), oklch(0.25 0.015 260)); + --accent: light-dark(oklch(0.52 0.23 260), oklch(0.70 0.22 260)); + --code-bg:light-dark(oklch(0.94 0.01 260), oklch(0.22 0.015 260)); + --radius: 8px; + + font-family: system-ui, -apple-system, "Segoe UI", sans-serif; + font-size: 1rem; + line-height: 1.7; + text-wrap: pretty; + color: var(--text); + background: var(--bg); + min-height: 100dvh; + + /* Grid-Layout: header – main – footer */ + display: grid; + grid-template-rows: auto 1fr auto; + grid-template-columns: 1fr min(800px, 95%) 1fr; + + > * { + grid-column: 2; + } +} + +/* ---- Header ---- */ +header { + padding: 1.5rem 0; + display: flex; + justify-content: space-between; + align-items: baseline; + flex-wrap: wrap; + gap: 0.5rem; + border-bottom: 1px solid var(--border); + margin-bottom: 2rem; + + .logo { + font-size: 1.25rem; + font-weight: 700; + color: var(--accent); + text-decoration: none; + + &:hover { text-decoration: underline; } + } + + nav a { + color: var(--muted); + font-size: 0.9rem; + text-decoration: none; + + &:hover { color: var(--text); } + } +} + +/* ---- Footer ---- */ +footer { + margin-top: 3rem; + padding: 1.5rem 0; + border-top: 1px solid var(--border); + text-align: center; + font-size: 0.85rem; + color: var(--muted); + + a { color: var(--accent); } +} + +/* ---- Headings ---- */ +h1, h2, h3, h4, h5, h6 { + line-height: 1.3; + color: var(--text); + text-wrap: balance; +} + +h1 { font-size: 2rem; margin-bottom: 0.5rem; } +h2 { font-size: 1.5rem; margin: 2rem 0 0.5rem; } +h3 { font-size: 1.2rem; margin: 1.5rem 0 0.4rem; } + +.subtitle { + color: var(--muted); + margin-bottom: 2rem; +} + +/* ---- Links ---- */ +a { + color: var(--accent); + text-underline-offset: 3px; + text-decoration-thickness: 1px; + + &:hover { text-decoration-thickness: 2px; } +} + +/* ---- Content ---- */ +.content { + p, ul, ol, blockquote { + margin-bottom: 1rem; + } + + ul, ol { padding-left: 1.5rem; } + + li { margin-bottom: 0.25rem; } + + blockquote { + border-left: 3px solid var(--accent); + padding: 0.5rem 1rem; + color: var(--muted); + background: var(--card); + border-radius: 0 var(--radius) var(--radius) 0; + + p:last-child { margin-bottom: 0; } + } + + img { max-width: 100%; height: auto; border-radius: var(--radius); } + + hr { + border: none; + border-top: 1px solid var(--border); + margin: 2rem 0; + } + + /* Inline code */ + :not(pre) > code { + background: var(--code-bg); + padding: 0.15em 0.4em; + border-radius: 4px; + font-size: 0.9em; + } + + /* Code blocks */ + pre { + background: var(--code-bg); + padding: 1rem 1.25rem; + border-radius: var(--radius); + overflow-x: auto; + margin-bottom: 1.5rem; + border: 1px solid var(--border); + + code { font-size: 0.85rem; background: none; padding: 0; } + } + + /* Tables */ + table { + width: 100%; + border-collapse: collapse; + margin-bottom: 1.5rem; + font-size: 0.9rem; + + th, td { + padding: 0.5rem 0.75rem; + border: 1px solid var(--border); + text-align: left; + } + + th { + background: var(--card); + font-weight: 600; + } + + tr:nth-child(even) { background: var(--card); } + } +} + +/* ---- Article Header ---- */ +.article-header { + margin-bottom: 1.5rem; + + h1 { margin-bottom: 0.25rem; } + + time { + color: var(--muted); + font-size: 0.9rem; + } +} + +/* ---- TOC ---- */ +details.toc { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 0.75rem 1rem; + margin-bottom: 2rem; + font-size: 0.9rem; + + summary { + cursor: pointer; + font-weight: 600; + user-select: none; + } + + /* Ul im TOC */ + nav#TableOfContents > ul { + padding-left: 1rem; + margin-top: 0.5rem; + } + + ul { + list-style: none; + padding-left: 1.25rem; + + li { margin-bottom: 0.3rem; } + } + + a { text-decoration: none; } +} + +/* ---- Cards (List Page) ---- */ +.post-grid { + container-type: inline-size; + display: grid; + gap: 1.5rem; +} + +article.card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.25rem 1.5rem; + transition: background 0.15s, border-color 0.15s; + + &:hover { + background: var(--card-h); + border-color: var(--accent); + } + + time { + color: var(--muted); + font-size: 0.8rem; + } + + h2 { + font-size: 1.15rem; + margin-top: 0.25rem; + + a { + color: var(--text); + text-decoration: none; + + &:hover { color: var(--accent); } + } + } + + p { + color: var(--muted); + font-size: 0.9rem; + margin-top: 0.5rem; + } +} + +/* ---- Tags ---- */ +.tags { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-top: 0.5rem; +} + +.tag { + background: var(--code-bg); + color: var(--muted); + font-size: 0.75rem; + padding: 0.15em 0.6em; + border-radius: 4px; +} + +/* ---- Chroma Code Highlighting — Catppuccin Mocha ---- */ +/* Light */ +:root { + --chroma-bg: oklch(0.22 0.015 260); + --chroma-k: #cba6f7; + --chroma-s: #a6e3a1; + --chroma-c: #6c7086; + --chroma-n: #cdd6f4; + --chroma-o: #89b4fa; + --chroma-m: #f38ba8; +} +/* Dark (same in dark — Mocha is already dark) */ +@media (prefers-color-scheme: light) { + :root { + --chroma-bg: oklch(0.94 0.01 260); + --chroma-k: #8839ef; + --chroma-s: #40a02b; + --chroma-c: #9ca0b0; + --chroma-n: #4c4f69; + --chroma-o: #1e66f5; + --chroma-m: #d20f39; + } +} + +pre.chroma { background: var(--chroma-bg); } + +pre .k, pre .kd, pre .kn { color: var(--chroma-k); } /* keywords */ +pre .s, pre .s1, pre .s2 { color: var(--chroma-s); } /* strings */ +pre .c, pre .c1, pre .cm { color: var(--chroma-c); font-style: italic; } /* comments */ +pre .n, pre .na, pre .nt { color: var(--chroma-n); } /* names */ +pre .o, pre .p { color: var(--chroma-o); } /* operators */ +pre .m, pre .mi { color: var(--chroma-m); } /* numbers */ + +/* ---- Responsive ---- */ +@media (max-width: 840px) { + body { + grid-template-columns: 1fr; + padding: 0 1rem; + + > * { grid-column: 1; } + } +} \ No newline at end of file diff --git a/site/entrypoint.sh b/site/entrypoint.sh new file mode 100755 index 0000000..27b4c4e --- /dev/null +++ b/site/entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# Auto-Frontmatter für Hugo 0.165+ +# Fügt fehlenden --- Titel-Block in .md-Dateien ein. + +CONTENT_DIR="/src/content" + +for md in "$CONTENT_DIR"/*.md; do + [ -f "$md" ] || continue + first_line=$(head -1 "$md") + if [ "$first_line" != "---" ]; then + title=$(grep -m1 '^# ' "$md" | sed 's/^# //') + [ -z "$title" ] && title=$(basename "$md" .md) + date=$(date -r "$md" +%Y-%m-%d 2>/dev/null || date +%Y-%m-%d) + + tmp="${md}.tmp" + { + echo "---" + echo "title: \"$title\"" + echo "date: \"$date\"" + echo "---" + echo + cat "$md" + } > "$tmp" && mv "$tmp" "$md" + + echo "[frontmatter] $title" + fi +done + +exec hugo server \ + --watch \ + --bind=0.0.0.0 \ + --port=1313 \ + --disableFastRender \ + --baseURL=https://localhost:5443/ \ + --renderStaticToDisk \ No newline at end of file diff --git a/site/hugo.toml b/site/hugo.toml new file mode 100644 index 0000000..b10ea2e --- /dev/null +++ b/site/hugo.toml @@ -0,0 +1,37 @@ +# Hugo 0.165+ — moderne Konfiguration +baseURL = "https://localhost:5443/" +locale = "de" +title = "Hugo Docker CMS" +enableGitInfo = false +disableFastRender = true + +# --- Markdown / Goldmark --- +[markup] + [markup.highlight] + style = "catppuccin-mocha" + noClasses = false # Klassen statt Inline-Styles → CSS steuert + lineNos = false + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true # HTML in Markdown erlauben + +# --- Taxonomien --- +[taxonomies] + tag = "tags" + +# --- Ausgabe-Formate --- +[outputs] + home = ["HTML", "RSS"] + page = ["HTML"] + +# --- Seiten-Parameter --- +[params] + description = "Markdown-Dateien einfach in content/ ablegen." + author = "JonnyBravo" + # Open Graph defaults + images = [] + +# Sicherstellen, dass Entwürfe im DEV-Modus angezeigt werden +buildDrafts = false +buildFuture = false +buildExpired = false \ No newline at end of file diff --git a/site/layouts/_default/baseof.html b/site/layouts/_default/baseof.html new file mode 100644 index 0000000..7fb3a67 --- /dev/null +++ b/site/layouts/_default/baseof.html @@ -0,0 +1,12 @@ + + + {{ partial "head.html" . }} + + + {{ partial "header.html" . }} +
+ {{ block "main" . }}{{ end }} +
+ {{ partial "footer.html" . }} + + \ No newline at end of file diff --git a/site/layouts/_default/list.html b/site/layouts/_default/list.html new file mode 100644 index 0000000..fff5d8c --- /dev/null +++ b/site/layouts/_default/list.html @@ -0,0 +1,19 @@ +{{ define "main" }} +

{{ .Title }}

+ {{ with .Site.Params.description }}

{{ . }}

{{ end }} + +
+ {{ range .Pages }} +
+ +

{{ .Title }}

+

{{ .Summary | plainify | truncate 200 }}

+ {{ with .Params.tags }} +
+ {{ range . }}{{ . }}{{ end }} +
+ {{ end }} +
+ {{ end }} +
+{{ end }} \ No newline at end of file diff --git a/site/layouts/_default/rss.xml b/site/layouts/_default/rss.xml new file mode 100644 index 0000000..cb634ad --- /dev/null +++ b/site/layouts/_default/rss.xml @@ -0,0 +1,21 @@ +{{ printf "" | safeHTML }} + + + {{ .Site.Title }} + {{ .Permalink }} + {{ .Site.Params.description }} + Hugo {{ hugo.Version }} + {{ .Site.Language.Locale }} + {{ now.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + + {{ range .Pages }} + + {{ .Title }} + {{ .Permalink }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{ .Permalink }} + {{ .Summary | plainify | truncate 300 }} + + {{ end }} + + \ No newline at end of file diff --git a/site/layouts/_default/single.html b/site/layouts/_default/single.html new file mode 100644 index 0000000..31dcd33 --- /dev/null +++ b/site/layouts/_default/single.html @@ -0,0 +1,19 @@ +{{ define "main" }} +
+
+

{{ .Title }}

+ {{ with .Date }}{{ end }} + {{ with .Params.tags }} +
+ {{ range . }}{{ . }}{{ end }} +
+ {{ end }} +
+ + {{ partial "toc.html" . }} + +
+ {{ .Content }} +
+
+{{ end }} \ No newline at end of file diff --git a/site/layouts/partials/footer.html b/site/layouts/partials/footer.html new file mode 100644 index 0000000..bb424dc --- /dev/null +++ b/site/layouts/partials/footer.html @@ -0,0 +1,3 @@ +
+

{{ .Site.Title }} – RSS

+
\ No newline at end of file diff --git a/site/layouts/partials/head.html b/site/layouts/partials/head.html new file mode 100644 index 0000000..3243548 --- /dev/null +++ b/site/layouts/partials/head.html @@ -0,0 +1,20 @@ + + +{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} – {{ .Site.Title }}{{ end }} + + + + + + + + + + +{{ $css := resources.Get "css/main.css" | resources.Minify }} + + + +{{ with .OutputFormats.Get "rss" }} + +{{ end }} \ No newline at end of file diff --git a/site/layouts/partials/header.html b/site/layouts/partials/header.html new file mode 100644 index 0000000..71e53f2 --- /dev/null +++ b/site/layouts/partials/header.html @@ -0,0 +1,8 @@ +
+ + {{ if not .IsHome }} + + {{ end }} +
\ No newline at end of file diff --git a/site/layouts/partials/toc.html b/site/layouts/partials/toc.html new file mode 100644 index 0000000..fcd1db5 --- /dev/null +++ b/site/layouts/partials/toc.html @@ -0,0 +1,4 @@ +
+ Inhaltsverzeichnis + {{ .TableOfContents }} +
\ No newline at end of file diff --git a/site/public/astro-vim-recommendations/index.html b/site/public/astro-vim-recommendations/index.html new file mode 100644 index 0000000..36075b0 --- /dev/null +++ b/site/public/astro-vim-recommendations/index.html @@ -0,0 +1,113 @@ + + + + +Empfehlungen für AstroVim – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Empfehlungen für AstroVim

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Empfehlungen für AstroVim

+

1. Tastenkürzel kennenlernen (Which‑Key)

+

AstroVim nutzt which‑key für kontextsensitive Key‑Menüs. +Drücke <leader> (Standard: Leertaste) und warte kurz, um das Menü +zu sehen. So erkennst du schnell verfügbare Aktionen.

+

2. Dateiexplorer (Neo‑Tree)

+

AstroVim bringt neo‑tree als Dateibaum mit.

+
    +
  • <leader> e öffnet / schließt den Explorer.
  • +
  • a legt eine neue Datei an, d löscht, r benennt um.
  • +
  • H blendet ausgeblendete Dateien ein / aus.
  • +
+

3. Fuzzy‑Finder (Telescope)

+

Telescope ist der Fuzzy‑Finder.

+
    +
  • <leader> f f : Dateien im Projekt suchen
  • +
  • <leader> f g : live‑grep im Projekt
  • +
  • <leader> f b : geöffnete Buffer durchsuchen
  • +
  • <leader> f h : Hilfe‑Tags durchsuchen
  • +
+

4. Buffer‑Verwaltung

+
    +
  • <leader> c schließt den aktuellen Buffer.
  • +
  • [ b / ] b wechselt zum vorherigen / nächsten Buffer.
  • +
  • <leader> b zeigt eine Liste offener Buffer.
  • +
+

5. Git‑Integration (LazyGit / Gitsigns)

+
    +
  • LazyGit startest du mit <leader> g g – eine vollwertige +Git‑TUI direkt im Terminal‑Fenster.
  • +
  • Gitsigns zeigt Änderungen in der Sign‑Spalte. +
      +
    • ] c / [ c springt zur nächsten / vorherigen Änderung.
    • +
    • <leader> h s stage a hunk, <leader> h r reset hunk.
    • +
    +
  • +
+

6. Terminal im Editor

+
    +
  • <leader> t f öffnet ein floatendes Terminal.
  • +
  • <leader> t h / <leader> t v teilt horizontal / vertikal +mit einem Terminal.
  • +
  • Ctrl+\ Ctrl+n wechselt in den Normal‑Modus innerhalb des Terminals.
  • +
+

7. Snippets (LuaSnip)

+

AstroVim verwendet LuaSnip. Du kannst eigene Snippets unter +~/.config/nvim/lua/user/snippets/ ablegen. Beispiel‑Datei +python.lua:

+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/awx_und_rundeck_install/index.html b/site/public/awx_und_rundeck_install/index.html new file mode 100644 index 0000000..88792a5 --- /dev/null +++ b/site/public/awx_und_rundeck_install/index.html @@ -0,0 +1,190 @@ + + + + +Rundeck und AWX Installation mit Docker – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Rundeck und AWX Installation mit Docker

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Rundeck und AWX Installation mit Docker

+

Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent gespeichert werden.

+

Voraussetzungen

+
    +
  • Docker und Docker-Compose installiert
  • +
  • Ausreichend Speicherplatz (mindestens 2GB empfohlen)
  • +
  • Ports 4440 und 8052 frei
  • +
+

Rundeck Installation

+
    +
  1. +

    Verzeichnis für persistente Daten erstellen:

    +
    mkdir -p ~/rundeck_data
    +
  2. +
  3. +

    Rundeck Container starten:

    +
    docker run -d \
    +  -p 4440:4440 \
    +  -v ~/rundeck_data:/home/rundeck/server/data \
    +  --name rundeck \
    +  rundeck/rundeck:latest
    +
  4. +
  5. +

    Zugriff:

    +
      +
    • URL: http://:4440
    • +
    • Login: admin/admin
    • +
    +
  6. +
+

AWX Installation

+
    +
  1. +

    Verzeichnisse für persistente Daten erstellen:

    +
    mkdir -p ~/awx_data/postgres ~/awx_data/projects
    +
  2. +
  3. +

    docker-compose.yml erstellen:

    +
    cat <<EOL > ~/awx_data/docker-compose.yml
    +version: '3'
    +services:
    +  postgres:
    +    image: postgres:13
    +    volumes:
    +      - ~/awx_data/postgres:/var/lib/postgresql/data
    +    environment:
    +      POSTGRES_DB: awx
    +      POSTGRES_USER: awx
    +      POSTGRES_PASSWORD: awxpass
    +
    +  awx:
    +    image: ansible/awx:latest
    +    depends_on:
    +      - postgres
    +    ports:
    +      - "8052:8052"
    +    volumes:
    +      - ~/awx_data/projects:/var/lib/awx/projects
    +    environment:
    +      DATABASE_USER: awx
    +      DATABASE_PASSWORD: awxpass
    +      DATABASE_NAME: awx
    +      DATABASE_HOST: postgres
    +EOL
    +
  4. +
  5. +

    AWX starten:

    +
    cd ~/awx_data
    +docker-compose up -d
    +
  6. +
  7. +

    Zugriff:

    +
      +
    • URL: http://:8052
    • +
    • Login: admin/password
    • +
    +
  8. +
+

Persistenz und Autostart

+

Um sicherzustellen, dass die Container nach einem Neustart automatisch starten, können Systemd-Services eingerichtet werden:

+
    +
  1. +

    Für Rundeck:

    +
    sudo bash -c 'cat <<EOL > /etc/systemd/system/rundeck-docker.service
    +[Unit]
    +Description=Rundeck Docker Container
    +After=docker.service
    +
    +[Service]
    +Restart=always
    +ExecStart=/usr/bin/docker start -a rundeck
    +ExecStop=/usr/bin/docker stop -t 2 rundeck
    +
    +[Install]
    +WantedBy=multi-user.target
    +EOL'
    +
  2. +
  3. +

    Für AWX:

    +
    sudo bash -c 'cat <<EOL > /etc/systemd/system/awx-docker.service
    +[Unit]
    +Description=AWX Docker Container
    +After=docker.service
    +
    +[Service]
    +WorkingDirectory=/home/$(whoami)/awx_data
    +Restart=always
    +ExecStart=/usr/local/bin/docker-compose up
    +ExecStop=/usr/local/bin/docker-compose down
    +
    +[Install]
    +WantedBy=multi-user.target
    +EOL'
    +
  4. +
  5. +

    Services aktivieren:

    +
    sudo systemctl daemon-reload
    +sudo systemctl enable rundeck-docker
    +sudo systemctl enable awx-docker
    +
  6. +
+

Wichtige Hinweise

+
    +
  • Beide Lösungen können parallel betrieben werden
  • +
  • Daten werden in ~/rundeck_data und ~/awx_data gespeichert
  • +
  • Für Produktivumgebungen sollten zusätzliche Sicherheitsmaßnahmen getroffen werden
  • +
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/blueray_install_manjaro/index.html b/site/public/blueray_install_manjaro/index.html new file mode 100644 index 0000000..85c2ad1 --- /dev/null +++ b/site/public/blueray_install_manjaro/index.html @@ -0,0 +1,97 @@ + + + + +blueray_install_manjaro – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

blueray_install_manjaro

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Befehle zur Einrichtung von VLC für Blu-rays (Manjaro)

+

Diese Schritte helfen Ihnen, VLC so zu konfigurieren, dass es Blu-ray-Discs abspielen kann.

+
    +
  1. +

    Benötigte Pakete installieren +Dieser Befehl installiert alle notwendigen Pakete für die Blu-ray-Wiedergabe:

    +
      +
    • vlc: Der Media Player.
    • +
    • libaacs: Notwendig, um AACS-geschützte Blu-ray-Discs zu entschlüsseln.
    • +
    • libbluray: Eine Bibliothek für die Navigation und Wiedergabe von Blu-ray-Discs.
    • +
    • jre-openjdk: Eine Java-Laufzeitumgebung, die für Blu-ray-Menüs (BD-J) benötigt wird.
    • +
    +
    sudo pacman -S vlc libaacs libbluray jre-openjdk
    +

    Hinweis: Der zuvor erwähnte Paket libbdplus wurde hier weggelassen, da er nicht direkt in den offiziellen Arch/Manjaro Repositories gefunden wurde und für viele Blu-rays möglicherweise nicht sofort notwendig ist. Sollten Sie später Probleme mit BD+-geschützten Discs haben, können wir die Installation aus dem AUR (Arch User Repository) in Betracht ziehen.

    +
  2. +
  3. +

    Verzeichnis für AACS-Schlüssel erstellen +Dieser Befehl erstellt das notwendige Verzeichnis in Ihrem Home-Verzeichnis, wo die Entschlüsselungsschlüssel (KEYDB.cfg) für Blu-ray-Discs gespeichert werden. Das -p-Flag stellt sicher, dass alle übergeordneten Verzeichnisse bei Bedarf ebenfalls erstellt werden und unterdrückt Fehlermeldungen, falls das Verzeichnis bereits existiert.

    +
    mkdir -p ~/.config/aacs/
    +
  4. +
  5. +

    KEYDB.cfg-Datei herunterladen +Dieser Befehl lädt die Datei KEYDB.cfg herunter, welche die Datenbank der Blu-ray-Entschlüsselungsschlüssel enthält. Diese Datei ist entscheidend für die Wiedergabe vieler kommerzieller Blu-rays. Die Datei wird direkt in das zuvor erstellte .config/aacs/-Verzeichnis gespeichert.

    +
    wget -O ~/.config/aacs/KEYDB.cfg http://vlc-bluray.whoknowsmy.name/files/KEYDB.cfg
    +
  6. +
  7. +

    Benutzerberechtigungen für das Blu-ray-Laufwerk korrigieren +Sollten Sie die Fehlermeldung erhalten, dass VLC die Medienadresse nicht öffnen kann (VLC kann die Medienadresse 'bluray:///dev/sr0' nicht öffnen), liegt es wahrscheinlich an fehlenden Berechtigungen. Dieser Befehl fügt Ihren Benutzer zur optical-Gruppe hinzu, die den Zugriff auf optische Laufwerke ermöglicht.

    +
    sudo usermod -aG optical jonnybravo
    +

    WICHTIG: Damit diese Änderung wirksam wird, müssen Sie sich vollständig von Ihrer aktuellen Sitzung abmelden und dann wieder neu anmelden (oder den Computer neu starten).

    +
  8. +
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/calcurse_tastenkürzel/index.html b/site/public/calcurse_tastenkürzel/index.html new file mode 100644 index 0000000..8df464b --- /dev/null +++ b/site/public/calcurse_tastenkürzel/index.html @@ -0,0 +1,271 @@ + + + + +Calcurse Tastenkürzel (Zusammenfassung) – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Calcurse Tastenkürzel (Zusammenfassung)

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Calcurse Tastenkürzel (Zusammenfassung)

+

Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für calcurse zusammengefasst.

+
+

Allgemeine Steuerung

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taste(n)Aktion
q, QCalcurse beenden
s, SÄnderungen speichern
?Hilfe anzeigen
CKonfigurationsmenü öffnen
TABZwischen den Ansichten wechseln (Termine/TODO)
ESCAktion abbrechen / Dialog schließen
:Befehlszeile öffnen
^RBildschirm neu zeichnen
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taste(n)Aktion
tNächster Tag
TVorheriger Tag
wNächste Woche
WVorherige Woche
mNächster Monat
MVorheriger Monat
yNächstes Jahr
YVorheriges Jahr
g, GZu einem bestimmten Datum springen
^GZum heutigen Tag springen
h,j,k,lNavigation (links, runter, hoch, rechts)
+

Termine & TODOs verwalten

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Taste(n)Aktion
a, ANeuen Eintrag hinzufügen (je nach Ansicht)
^ADirekt einen neuen Termin hinzufügen
^TDirekt einen neuen TODO-Eintrag hinzufügen
d, DAusgewählten Eintrag löschen
e, EAusgewählten Eintrag bearbeiten
v, EnterDetails des Eintrags ansehen
n, NNotiz bearbeiten/hinzufügen
>Notiz ansehen
cEintrag kopieren
pEintrag einfügen
rWiederholung für einen Eintrag festlegen
+

Speziell für die TODO-Liste

+ + + + + + + + + + + + + + + + + + + + + +
Taste(n)Aktion
!Task als erledigt markieren (umschalten)
+Priorität des Tasks erhöhen
-Priorität des Tasks senken
+

Daten Im- & Export

+ + + + + + + + + + + + + + + + + + + + + +
Taste(n)Aktion
i, IDaten aus einer Datei importieren
x, XDaten in eine Datei exportieren
``
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/css/main.min.css b/site/public/css/main.min.css new file mode 100644 index 0000000..91121bd --- /dev/null +++ b/site/public/css/main.min.css @@ -0,0 +1 @@ +*,*::before,*::after{box-sizing:border-box;margin:0}html{color-scheme:light dark;scroll-behavior:smooth}body{--bg:light-dark(oklch(0.98 0 0), oklch(0.15 0.005 260));--text:light-dark(oklch(0.25 0 0), oklch(0.88 0.005 260));--muted:light-dark(oklch(0.50 0 0), oklch(0.55 0.005 260));--border:light-dark(oklch(0.85 0 0), oklch(0.28 0.005 260));--card:light-dark(oklch(1 0 0), oklch(0.20 0.008 260));--card-h:light-dark(oklch(0.96 0 0), oklch(0.25 0.015 260));--accent:light-dark(oklch(0.52 0.23 260), oklch(0.70 0.22 260));--code-bg:light-dark(oklch(0.94 0.01 260), oklch(0.22 0.015 260));--radius:8px;font-family:system-ui,-apple-system,segoe ui,sans-serif;font-size:1rem;line-height:1.7;text-wrap:pretty;color:var(--text);background:var(--bg);min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr min(800px,95%)1fr;> *{grid-column:2}}header{padding:1.5rem 0;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:.5rem;border-bottom:1px solid var(--border);margin-bottom:2rem;.logo{font-size:1.25rem;font-weight:700;color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}nav a{color:var(--muted);font-size:.9rem;text-decoration:none;&:hover{color:var(--text)}}}footer{margin-top:3rem;padding:1.5rem 0;border-top:1px solid var(--border);text-align:center;font-size:.85rem;color:var(--muted);a{color:var(--accent)}}h1,h2,h3,h4,h5,h6{line-height:1.3;color:var(--text);text-wrap:balance}h1{font-size:2rem;margin-bottom:.5rem}h2{font-size:1.5rem;margin:2rem 0 .5rem}h3{font-size:1.2rem;margin:1.5rem 0 .4rem}.subtitle{color:var(--muted);margin-bottom:2rem}a{color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px;&:hover{text-decoration-thickness:2px}}.content{p, ul, ol, blockquote{margin-bottom:1rem}ul, ol{padding-left:1.5rem}li{margin-bottom:.25rem}blockquote{border-left:3px solid var(--accent);padding:.5rem 1rem;color:var(--muted);background:var(--card);border-radius:0 var(--radius)var(--radius)0;p:last-child{margin-bottom:0}}img{max-width:100%;height:auto;border-radius:var(--radius)}hr{border:none;border-top:1px solid var(--border);margin:2rem 0} :not(pre) > code { background: var(--code-bg); padding: 0.15em 0.4em; border-radius: 4px; font-size: 0.9em; } pre { background: var(--code-bg); padding: 1rem 1.25rem; border-radius: var(--radius); overflow-x: auto; margin-bottom: 1.5rem; border: 1px solid var(--border); code { font-size: 0.85rem; background: none; padding: 0; } } table { width: 100%; border-collapse: collapse; margin-bottom: 1.5rem; font-size: 0.9rem; th, td { padding: 0.5rem 0.75rem; border: 1px solid var(--border); text-align: left; } th { background: var(--card); font-weight: 600; } tr:nth-child(even) { background: var(--card); } }}.article-header{margin-bottom:1.5rem;h1{margin-bottom:.25rem}time{color:var(--muted);font-size:.9rem}}details.toc{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:.75rem 1rem;margin-bottom:2rem;font-size:.9rem;summary{cursor:pointer;font-weight:600;user-select:none}nav#TableOfContents > ul{padding-left:1rem;margin-top:.5rem}ul{list-style:none;padding-left:1.25rem;li{margin-bottom:.3rem}}a{text-decoration:none}}.post-grid{container-type:inline-size;display:grid;gap:1.5rem}article.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.5rem;transition:background .15s,border-color .15s;&:hover{background:var(--card-h);border-color:var(--accent)}time{color:var(--muted);font-size:.8rem}h2{font-size:1.15rem;margin-top:.25rem;a{color:var(--text);text-decoration:none;&:hover{color:var(--accent)}}}p{color:var(--muted);font-size:.9rem;margin-top:.5rem}}.tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem}.tag{background:var(--code-bg);color:var(--muted);font-size:.75rem;padding:.15em .6em;border-radius:4px}:root{--chroma-bg:oklch(0.22 0.015 260);--chroma-k:#cba6f7;--chroma-s:#a6e3a1;--chroma-c:#6c7086;--chroma-n:#cdd6f4;--chroma-o:#89b4fa;--chroma-m:#f38ba8}@media(prefers-color-scheme:light){:root{--chroma-bg:oklch(0.94 0.01 260);--chroma-k:#8839ef;--chroma-s:#40a02b;--chroma-c:#9ca0b0;--chroma-n:#4c4f69;--chroma-o:#1e66f5;--chroma-m:#d20f39}}pre.chroma{background:var(--chroma-bg)}pre .k,pre .kd,pre .kn{color:var(--chroma-k)}pre .s,pre .s1,pre .s2{color:var(--chroma-s)}pre .c,pre .c1,pre .cm{color:var(--chroma-c);font-style:italic}pre .n,pre .na,pre .nt{color:var(--chroma-n)}pre .o,pre .p{color:var(--chroma-o)}pre .m,pre .mi{color:var(--chroma-m)}@media(max-width:840px){body{grid-template-columns:1fr;padding:0 1rem;> *{grid-column:1}}} \ No newline at end of file diff --git a/site/public/index.html b/site/public/index.html new file mode 100644 index 0000000..605a4b9 --- /dev/null +++ b/site/public/index.html @@ -0,0 +1,152 @@ + + + + + +Hugo Docker CMS + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ +

Hugo Docker CMS

+

Markdown-Dateien einfach in content/ ablegen.

+ +
+ + + +
+ +

blueray_install_manjaro

+

Befehle zur Einrichtung von VLC für Blu-rays (Manjaro) Diese Schritte helfen Ihnen, VLC so zu konfigurieren, dass es Blu-ray-Discs abspielen kann. +Benötigte Pakete installieren Dieser Befehl …

+ +
+ +
+ +

Calcurse Tastenkürzel (Zusammenfassung)

+

Calcurse Tastenkürzel (Zusammenfassung) Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für calcurse zusammengefasst. +Allgemeine Steuerung Taste(n) Aktion q, Q Calcurse …

+ +
+ +
+ +

Empfehlungen für AstroVim

+

Empfehlungen für AstroVim 1. Tastenkürzel kennenlernen (Which‑Key) AstroVim nutzt which‑key für kontextsensitive Key‑Menüs. Drücke <leader> (Standard: Leertaste) und warte kurz, um das Menü zu …

+ +
+ +
+ +

Lazygit – Der Terminal-Git-Client

+

Lazygit – Der Terminal-Git-Client Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User Interface). Du steuerst alles per Tastatur und behältst dein ganzes Repository auf …

+ +
+ +
+ +

Python String-Präfixe

+

Python String-Präfixe In Python gibt es verschiedene Präfixe für String-Literale, die bestimmen, wie der Interpreter den Inhalt des Strings verarbeitet. Suffixe für String-Literale existieren in …

+ +
+ +
+ +

qutebrowser Installation (Wayland / Sway)

+

qutebrowser Installation (Wayland / Sway) Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine (Chromium/Blink-Engine). Kein Fork, sondern eigenständig. +Hinweis: qutebrowser …

+ +
+ +
+ +

Rundeck und AWX Installation mit Docker

+

Rundeck und AWX Installation mit Docker Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent gespeichert werden. +Voraussetzungen …

+ +
+ +
+ +

Stretchen_laufen

+

Aufwärmen: 10-15 Wh. 1-2 Sek. +Zwillingswadenmuskel dehnen S166 Zwillingswadenmuskel dehen S164 Beste Dhenübung der Welt S140 Girlanden-Haltung S126 Hüftkreisen im Stehen S148 Oberschenkelrückseite …

+ +
+ +
+ +

System Optimierung – nächste Schritte

+

System Optimierung – nächste Schritte Letzte Bearbeitung: 07.09.2026 Chat-Session-ID: 20260907_182659_6403f3 Chat wieder aufrufen: @session:default/20260907_182659_6403f3 in Hermes Agent eingeben +1. …

+ +
+ +
+ +

Vergleich: TinyDB vs. SQLite

+

Vergleich: TinyDB vs. SQLite Sowohl TinyDB als auch SQLite sind hervorragende “Embedded Databases” (eingebettete Datenbanken), die ihre Daten in einer Datei speichern, ohne dass ein …

+ +
+ +
+ +

Willkommen bei Hugo Docker

+

Das ist eine Beispiel-Seite. Funktioniert! +Einfach .md-Dateien in den Ordner content/ kopieren – Hugo rendert sie automatisch. +So geht’s # Neue Seite anlegen echo '--- title: "Meine …

+ +
+ +
+ +

YubiKey-Einrichtung unter Manjaro Sway

+

YubiKey-Einrichtung unter Manjaro Sway Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren. +Übersicht der Anwendungsfälle: FIDO2/U2F: …

+ +
+ + + +
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/index.xml b/site/public/index.xml new file mode 100644 index 0000000..43f909a --- /dev/null +++ b/site/public/index.xml @@ -0,0 +1,141 @@ + + + + Hugo Docker CMS + https://localhost:1313/ + Markdown-Dateien einfach in content/ ablegen. + Hugo 0.165.0 + de + Tue, 08 Sep 2026 08:07:00 +0000 + + + + Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen + https://localhost:1313/ver_next_einbinden/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/ver_next_einbinden/ + Anleitung: Bestehende rclone-Konfiguration auf einen neuen Rechner übertragen Diese Anleitung erklärt, wie Sie eine bereits existierende rclone-Konfiguration, insbesondere für einen verschlüsselten Nextcloud-Speicher, auf einen neuen Computer umziehen können, ohne alles neu einrichten zu müssen. … + + + + blueray_install_manjaro + https://localhost:1313/blueray_install_manjaro/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/blueray_install_manjaro/ + Befehle zur Einrichtung von VLC für Blu-rays (Manjaro) Diese Schritte helfen Ihnen, VLC so zu konfigurieren, dass es Blu-ray-Discs abspielen kann. +Benötigte Pakete installieren Dieser Befehl installiert alle notwendigen Pakete für die Blu-ray-Wiedergabe: +vlc: Der Media Player. libaacs: Notwendig, um … + + + + Calcurse Tastenkürzel (Zusammenfassung) + https://localhost:1313/calcurse_tastenk%C3%BCrzel/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/calcurse_tastenk%C3%BCrzel/ + Calcurse Tastenkürzel (Zusammenfassung) Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für calcurse zusammengefasst. +Allgemeine Steuerung Taste(n) Aktion q, Q Calcurse beenden s, S Änderungen speichern ? Hilfe anzeigen C Konfigurationsmenü öffnen TAB Zwischen den … + + + + Empfehlungen für AstroVim + https://localhost:1313/astro-vim-recommendations/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/astro-vim-recommendations/ + Empfehlungen für AstroVim 1. Tastenkürzel kennenlernen (Which‑Key) AstroVim nutzt which‑key für kontextsensitive Key‑Menüs. Drücke <leader> (Standard: Leertaste) und warte kurz, um das Menü zu sehen. So erkennst du schnell verfügbare Aktionen. +2. Dateiexplorer (Neo‑Tree) AstroVim bringt … + + + + Lazygit – Der Terminal-Git-Client + https://localhost:1313/lazygit/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/lazygit/ + Lazygit – Der Terminal-Git-Client Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User Interface). Du steuerst alles per Tastatur und behältst dein ganzes Repository auf einen Blick – kein Merken von kryptischen git-Befehlen mehr. +Installation # Arch / Manjaro sudo pacman … + + + + Python String-Präfixe + https://localhost:1313/string_prefixes/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/string_prefixes/ + Python String-Präfixe In Python gibt es verschiedene Präfixe für String-Literale, die bestimmen, wie der Interpreter den Inhalt des Strings verarbeitet. Suffixe für String-Literale existieren in Python nicht direkt (anders als in Sprachen wie C++), aber es gibt Methoden auf String-Objekten wie … + + + + qutebrowser Installation (Wayland / Sway) + https://localhost:1313/install_browser/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/install_browser/ + qutebrowser Installation (Wayland / Sway) Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine (Chromium/Blink-Engine). Kein Fork, sondern eigenständig. +Hinweis: qutebrowser liegt im offiziellen Repo (extra), nicht im AUR. +1. Basis-Installation sudo pacman -S qutebrowser 2. … + + + + Rundeck und AWX Installation mit Docker + https://localhost:1313/awx_und_rundeck_install/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/awx_und_rundeck_install/ + Rundeck und AWX Installation mit Docker Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent gespeichert werden. +Voraussetzungen Docker und Docker-Compose installiert Ausreichend Speicherplatz (mindestens 2GB empfohlen) Ports 4440 und … + + + + Stretchen_laufen + https://localhost:1313/stretchen_laufen/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/stretchen_laufen/ + Aufwärmen: 10-15 Wh. 1-2 Sek. +Zwillingswadenmuskel dehnen S166 Zwillingswadenmuskel dehen S164 Beste Dhenübung der Welt S140 Girlanden-Haltung S126 Hüftkreisen im Stehen S148 Oberschenkelrückseite dynamisch dehen S163 Einsteiger : 10-15 Wh. 1-2 Sek. +Katze - Kuh S74 Quadrizeps dehnen im Stehen S156 … + + + + System Optimierung – nächste Schritte + https://localhost:1313/system-optimierung/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/system-optimierung/ + System Optimierung – nächste Schritte Letzte Bearbeitung: 07.09.2026 Chat-Session-ID: 20260907_182659_6403f3 Chat wieder aufrufen: @session:default/20260907_182659_6403f3 in Hermes Agent eingeben +1. flashfocus patchen (Marshmallow-4.x-Inkompatibilität) Einmalig ausführen: +sudo sed -i … + + + + Vergleich: TinyDB vs. SQLite + https://localhost:1313/tinydb_vs_sqlite/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/tinydb_vs_sqlite/ + Vergleich: TinyDB vs. SQLite Sowohl TinyDB als auch SQLite sind hervorragende “Embedded Databases” (eingebettete Datenbanken), die ihre Daten in einer Datei speichern, ohne dass ein separater Serverprozess läuft. Der Unterschied liegt hauptsächlich in ihrem Ansatz zur Datenspeicherung … + + + + Willkommen bei Hugo Docker + https://localhost:1313/willkommen/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/willkommen/ + Das ist eine Beispiel-Seite. Funktioniert! +Einfach .md-Dateien in den Ordner content/ kopieren – Hugo rendert sie automatisch. +So geht’s # Neue Seite anlegen echo '--- title: "Meine Seite" date: "2026-09-08" --- Inhalt hier ... ' > content/meine-seite.md Änderungen … + + + + YubiKey-Einrichtung unter Manjaro Sway + https://localhost:1313/yubikey_setup_guide/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/yubikey_setup_guide/ + YubiKey-Einrichtung unter Manjaro Sway Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren. +Übersicht der Anwendungsfälle: FIDO2/U2F: Für die Zwei-Faktor-Authentifizierung auf Webseiten. GPG: Zur Verschlüsselung von E-Mails/Dateien und … + + + + Zusammenfassung der vorgenommenen Änderungen und Konfigurationen + https://localhost:1313/networkconfig_dns/ + Tue, 08 Sep 2026 00:00:00 +0000 + https://localhost:1313/networkconfig_dns/ + Zusammenfassung der vorgenommenen Änderungen und Konfigurationen Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir besprochen und durchgeführt haben. +1. Python Logging (sync.py und logging_config.py) Um die Log-Ausgabe des sync.py-Skripts zu verbessern, wurde … + + + + \ No newline at end of file diff --git a/site/public/install_browser/index.html b/site/public/install_browser/index.html new file mode 100644 index 0000000..0c55f58 --- /dev/null +++ b/site/public/install_browser/index.html @@ -0,0 +1,255 @@ + + + + +qutebrowser Installation (Wayland / Sway) – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

qutebrowser Installation (Wayland / Sway)

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

qutebrowser Installation (Wayland / Sway)

+

Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine +(Chromium/Blink-Engine). Kein Fork, sondern eigenständig.

+

Hinweis: qutebrowser liegt im offiziellen Repo (extra), nicht im AUR.

+
+

1. Basis-Installation

+
sudo pacman -S qutebrowser
+

+

2. Video-Hardwarebeschleunigung (VAAPI)

+

Deine GPU: Intel Iris Xe (TigerLake). Dafür brauchst du den Intel-Media-Driver +und die VAAPI-Utils zum Prüfen:

+
sudo pacman -S intel-media-driver libva-utils
+

Testen ob VAAPI läuft:

+
vainfo
+

Erwartete Ausgabe: eine Liste mit Profilen (H264, HEVC/VP9-Decoding etc.). +Falls leer oder Fehler -> Treiberproblem.

+

In qutebrowser aktivieren (:set oder in ~/.config/qutebrowser/config.py):

+
qt.args:
+  - ignore-gpu-blocklist
+  - enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL
+  - enable-accelerated-video-decode
+

+

3. DRM / Widevine (Netflix, Prime, Spotify …)

+

Widevine ist proprietär und nicht im offiziellen Repo. Das AUR-Paket +chromium-widevine stellt das Widevine-CDM (libwidevinecdm.so) bereit:

+
yay -S chromium-widevine
+

Das Paket legt die Bibliothek ab unter:

+
/usr/lib/chromium/libwidevinecdm.so
+

Pfad in qutebrowser bekannt machen (in config.py):

+
c.qt.args = [
+    "widevine-path=/usr/lib/chromium/libwidevinecdm.so",
+    "ignore-gpu-blocklist",
+    "enable-features=VaapiVideoDecoder",
+]
+

Danach qutebrowser neu starten und prüfen:

+
:version
+

Dort sollte Widevine aufgelistet sein. Prüfseite: https://bitmovin.com/demos/drm

+

Wichtige Einschränkung: Widevine unter Linux liefert maximal 1080p (L3-Lizenz). +4K-Streaming geht auf Linux nur mit Microsoft Edge oder Safari/macOS.

+
+

4. Wayland-nativ starten

+

Sway ist Wayland, also qutebrowser nativ (ohne XWayland) laufen lassen:

+
:set qt.args
+

oder in config.py:

+
c.qt.args = ["widevine-path=..."]
+

Standardmäßig nutzt qutebrowser unter Sway bereits Wayland. Prüfen:

+
:version
+

Unter “Qt” sollte wayland als Platform stehen (nicht xcb).

+
+

5. Adblock & Datenschutz

+

qutebrowser hat einen eingebauten Host-Datei-Adblocker. Listen aktualisieren:

+
:adblock-update
+

Für besseren Schutz in config.py:

+
# Standard-User-Agent abschalten (weniger Fingerprinting)
+c.content.headers.user_agent = None
+
+# DNT / Tracking-Opt-out
+c.content.headers.do_not_track = True
+

+

6. Minimale Beispiel-Konfiguration

+

Datei: ~/.config/qutebrowser/config.py

+
import os
+
+# DRM + Video-Hardwarebeschleunigung
+c.qt.args = [
+    "widevine-path=/usr/lib/chromium/libwidevinecdm.so",
+    "ignore-gpu-blocklist",
+    "enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL",
+]
+
+# Startseite
+c.url.start_pages = ["https://duckduckgo.com"]
+
+# Adblock-Listen
+c.content.blocking.enabled = True
+c.content.blocking.method = "both"          # hosts + adblock
+c.content.blocking.hosts.lists = [
+    "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts",
+]
+
+# Tabs / Verhalten
+c.tabs.position = "top"
+c.confirm_quit = ["downloads"]
+
+# Tastatur: h/j/k/l Navigation (bereits Standard bei qutebrowser)
+

+

7. Wichtigste Tastenkürzel

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
:Befehlszeile
oURL öffnen
OURL in neuem Tab öffnen
fLinks per Buchstabenkürzel anklicken
H / LZurück / Vor
j / kNach unten / oben scrollen
gg / GSeitenanfang / -ende
J / KNächster / vorheriger Tab
d / uTab schließen / wieder öffnen
/Suche auf Seite
n / NNächstes / vorheriges Suchergebnis
yyURL in Zwischenablage
ZZqutebrowser beenden
+
+

8. Alternativen im Überblick (schnell & sicher auf Sway)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserEngineInstallAnmerkung
qutebrowserBlink (Qt)sudo pacman -S qutebrowserTastatur-only, ideal für Tiling
LibreWolfGecko (Firefox)yay -S librewolf-binFirefox ohne Telemetrie, +uBlock
ungoogled-chromiumBlinkyay -S ungoogled-chromium-binChromium ohne Google
BraveBlinkyay -S brave-binBuilt-in Werbeblocker
+

Für 4K-Streaming + Extensions: Brave. Für maximalen Datenschutz: LibreWolf. +Für reine Tastatur-Steuerung im Tiling-WM: qutebrowser.

+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/lazygit/index.html b/site/public/lazygit/index.html new file mode 100644 index 0000000..06b67b8 --- /dev/null +++ b/site/public/lazygit/index.html @@ -0,0 +1,669 @@ + + + + +Lazygit – Der Terminal-Git-Client – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Lazygit – Der Terminal-Git-Client

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Lazygit – Der Terminal-Git-Client

+

Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User +Interface). Du steuerst alles per Tastatur und behältst dein ganzes Repository +auf einen Blick – kein Merken von kryptischen git-Befehlen mehr.

+

Installation

+
# Arch / Manjaro
+sudo pacman -S lazygit
+
+# Ubuntu / Debian
+LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
+curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
+tar xf lazygit.tar.gz lazygit
+sudo install lazygit /usr/local/bin
+
+# macOS
+brew install lazygit
+
+# Windows (mit Winget)
+winget install JesseDuffield.lazygit
+

Start: Einfach lazygit im Repository-Verzeichnis ausführen.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
h / lZwischen Panels wechseln (links/rechts)
j / kIn Liste nach unten/oben
↑ / ↓Dasselbe wie j/k
gZum Anfang der Liste
shift+GZum Ende der Liste
/Suchen (im aktuellen Panel)
qLazygit beenden
escZurück / Aktion abbrechen
?Hilfe anzeigen (alle Tasten)
tabIn neuem Panel: zwischen Bereichen springen
+
+ +

Zeigt, ob du im normalen Modus, im Rebase, Merge-Konflikt etc. bist. +Normalerweise springst du mit 1-5 direkt in die anderen Panels.

+
+

Panel 2: Dateien / Working Tree

+

Hier siehst du alle geänderten, neuen und gelöschten Dateien.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
LeertasteDatei stagen/unstagen (markiert)
aAlle Dateien stagen/unstagen
cCommit erstellen (öffnet Editor für Commit-Message)
shift+CCommit mit Editor (git commit)
enterDiff der ausgewählten Datei anzeigen
dÄnderungen der Datei verwerfen (Achtung, unwiderruflich!)
shift+DDatei aus Working Tree löschen
eDatei im Editor öffnen
oDatei mit Standardprogramm öffnen
iDatei zu .gitignore hinzufügen / Eintrag entfernen
pPatch – interaktiv nur Teile einer Datei stagen
+

Patch-Modus (p)

+

Nach Drücken von p auf einer Datei:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
LeertasteAktuellen Hunks stagen/unstagen
j / kZwischen Hunks navigieren
vSelektionsmodus (visuell) – dann Leertaste für Auswahl
tabIn Diff-Fenster springen
+
+

Panel 3: Branches

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
LeertasteBranch auschecken
nNeuen Branch erstellen
cBranch mit Namen umbenennen (checkout)
shift+CBranch umbenennen (ohne checkout)
dBranch löschen
shift+DBranch force-löschen (auch wenn nicht gemerged)
mAktuellen Branch in ausgewählten Branch mergen
MMerge ohne Fast-Forward
enterCommits des Branches anzeigen
rBranch rebasen auf ausgewählten Branch
fFast-Forward des ausgewählten Branches
TTag erstellen
gBranch zurücksetzen (reset) auf ausgewählten
+
+

Panel 4: Commits (im Branch-Panel mit Enter)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
sSquash down – Commit in den darunterliegenden squashen
shift+SFixup – Commit in darunterliegenden squashen, Message verwerfen
rRebase auf diesen Commit starten / Rebase fortsetzen
RCommit-Message mit git commit --amend bearbeiten
ACommit mit Staged-Änderungen amendend (git commit –amend)
tCommit rückgängig machen (revert)
shift+TRevert erstellen, ohne zu commiten
ctrl+j / ctrl+kCommit in der Liste nach unten/oben verschieben (interaktiv)
gReset auf diesen Commit – Optionen:
soft – HEAD verschieben, Index bleibt
mixed (default) – HEAD + Index verschieben
hard – HEAD + Index + Working Tree (Achtung, verwirft!)
dCommit löschen (während Rebase)
shift+DCommits ab hier löschen (während Rebase)
fFixup-Commit erstellen
shift+FFixup-Commit für einen bestimmten Commit
enterDateien des Commits anzeigen
ctrl+lCommit-Log anzeigen
shift+CCommit kopieren (cherry-pick)
vCommits in die Zwischenablage kopieren
+
+

Panel 5: Stash

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
LeertasteStash anwenden
gStash anwenden und danach löschen (pop)
dStash löschen
enterDateien des Stashs anzeigen
nNeuen Stash mit Nachricht erstellen
sSchnell-Stash (ohne Nachricht)
+
+

Reflog

+

Mit ctrl+o (oder im Commits-Panel) öffnest du das Reflog – alle HEAD-Bewegungen.

+ + + + + + + + + + + + + + + + + + + + + +
TasteAktion
enterReflog-Eintrag anzeigen
gAuf diesen Eintrag zurücksetzen (soft/mixed/hard)
ctrl+oReflog schließen
+
+

Remote / Push & Pull

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
pPush (im Branch- oder Commits-Panel)
shift+PForce-Push (--force-with-lease)
shift+FFetch (alle Remotes)
ctrl+pPull (fetch + merge)
shift+ctrl+PPull mit Rebase
+
+

Undo / Redo

+

Lazygit hat eine eingebaute Undo-Funktion – ein Lebensretter!

+ + + + + + + + + + + + + + + + + +
TasteAktion
zLetzte Git-Aktion rückgängig machen (undo)
shift+ZRückgängig gemachte Aktion wiederholen (redo)
+

Funktioniert für: Commit, Stash, Branch-Reset, Checkout, Cherry-Pick, Revert, +Merge …

+
+

Konflikte lösen

+

Im Merge-Konflikt-Fall zeigt Lazygit die betroffenen Dateien.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
LeertasteDatei als “ours” markieren (eigene Version)
bDatei als “theirs” markieren (fremde Version)
↑ / ↓Hunk auswählen
LeertasteHunk auswählen (ours/theirs oder beide)
aAlle Hunks auf einmal akzeptieren
shift+MMerge-Tool für diese Datei öffnen
+
+

Submodule

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TasteAktion
enterIn Submodule wechseln (öffnet neue Lazygit-Instanz)
iSubmodule init
uSubmodule updaten
nSubmodule hinzufügen
+
+

Worktrees

+ + + + + + + + + + + + + + + + + + + + + +
TasteAktion
nNeues Worktree erstellen
enterIn Worktree wechseln
dWorktree löschen
+
+

Tipps & häufige Workflows

+

Änderungen committen

+
1. j/k → Datei auswählen
+2. Leertaste → Stagen
+3. c → Commit-Message schreiben, Enter
+4. p → Pushen
+

Letzten Commit ändern (amend)

+
1. a → Alle Dateien stagen
+2. shift+A → Amend (fügt Staged-Änderungen zum letzten Commit hinzu)
+

Branch erstellen und wechseln

+
1. 3 → Branch-Panel
+2. n → Neuen Branch, Namen eingeben, Enter
+

Commits zusammenfassen (squash)

+
1. 4 → Commits-Panel
+2. j/k → Commit auswählen (der, der in den darunterliegenden gesquasht werden soll)
+3. s → Squash
+

Commit rückgängig machen

+
1. 4 → Commits-Panel
+2. g → "reset"
+3. soft → HEAD verschieben, Änderungen bleiben im Index
+

Falls du es dir anders überlegst: z (undo).

+

Interaktives Rebase

+
1. 4 → Commits-Panel
+2. r auf einem älteren Commit → Rebase starten
+3. j/k → Commits auswählen, dann s/f/d zum Squashen/Fixen/Löschen
+4. r → Rebase fortsetzen
+

+

Konfiguration

+

Die Konfigurationsdatei liegt unter:

+
    +
  • Linux/macOS: ~/.config/lazygit/config.yml
  • +
  • Windows: %APPDATA%/lazygit/config.yml
  • +
+

Beispiel für ein nützliches Config-Snippet:

+
gui:
+  theme:
+    activeBorderColor:
+      - '#89b4fa'
+      - bold
+    inactiveBorderColor:
+      - '#a6adc8'
+  nerdFontsVersion: "3"
+
+git:
+  paging:
+    colorArg: always
+    pager: delta --dark --paging=never
+
+  # Commit-Konvention für Merge-Commits
+  commitPrefixes:
+    my_project:
+      pattern: "^(\\w+\\/\\w+-\\d+)"
+      replace: "[$1] "
+

+

Fazit

+

Lazygit macht Git massiv schneller: Du siehst Diff, Branches, Commits und +Stashes gleichzeitig, stagen mit Leertaste, commiten mit c, pushen mit p. +Kein git status-Tippen mehr, kein git log --oneline-Starren.

+

Die beiden wichtigsten Tasten: z für Undo und ? für Hilfe.

+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/networkconfig_dns/index.html b/site/public/networkconfig_dns/index.html new file mode 100644 index 0000000..3396808 --- /dev/null +++ b/site/public/networkconfig_dns/index.html @@ -0,0 +1,214 @@ + + + + +Zusammenfassung der vorgenommenen Änderungen und Konfigurationen – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Zusammenfassung der vorgenommenen Änderungen und Konfigurationen

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Zusammenfassung der vorgenommenen Änderungen und Konfigurationen

+

Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir besprochen und durchgeführt haben.

+
+

1. Python Logging (sync.py und logging_config.py)

+

Um die Log-Ausgabe des sync.py-Skripts zu verbessern, wurde eine modulare Logging-Konfiguration mit Log-Rotation erstellt und in eine separate Datei ausgelagert.

+

logging_config.py erstellt

+

Zweck: Enthält die Funktion setup_logging() zur Konfiguration eines Root-Loggers, der Logs in eine Datei (sync_log.log) schreibt, diese bei Erreichen einer Größe von 5 MB rotiert und 5 Backups behält. Optional kann auch ein Konsolen-Logger aktiviert werden.

+

Inhalt der Datei (/home/jonnybravo/Projekte/python_tests/rclone/logging_config.py):

+
import logging
+from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
+import os
+
+def setup_logging(console_logging=False):
+    """Konfiguriert das Root-Logging für die Anwendung mit Rotation.
+
+    Diese Funktion richtet einen Root-Logger ein, der Log-Nachrichten in eine Datei schreibt,
+    welche bei Erreichen einer bestimmten Größe rotiert wird.
+
+    :param console_logging: Wenn True, werden Logs zusätzlich zur Datei auch auf der Konsole ausgegeben.
+                            Standardmäßig ist dies deaktiviert (False).
+    """
+    
+    # --- Allgemeine Einstellungen ---
+    log_file = "sync_log.log" # Name der Log-Datei
+
+    # Maximale Größe der Log-Datei in Bytes, bevor sie rotiert wird (hier 5 MB)
+    max_log_size = 5 * 1024 * 1024
+
+    # Anzahl der rotierenden Backup-Dateien, die behalten werden sollen (hier 5)
+    backup_count = 5
+
+    # --- Logger-Initialisierung ---
+    logger = logging.getLogger()
+
+    if logger.hasHandlers():
+        return
+
+    # --- Logging-Level einstellen ---
+    # Mögliche Levels: DEBUG, INFO, WARNING, ERROR, CRITICAL
+    logger.setLevel(logging.INFO)
+    
+    # --- Formatter erstellen ---
+    # Definiert das Layout der Log-Nachrichten.
+    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+
+    # --- Handler erstellen und dem Logger hinzufügen ---
+
+    # 1. RotatingFileHandler (immer aktiv)
+    file_handler = RotatingFileHandler(
+        log_file,
+        maxBytes=max_log_size,
+        backupCount=backup_count,
+        encoding='utf-8'
+    )
+    file_handler.setFormatter(formatter)
+    logger.addHandler(file_handler)
+
+    # 2. StreamHandler für Konsolen-Ausgabe (optional)
+    if console_logging:
+        console_handler = logging.StreamHandler()
+        console_handler.setFormatter(formatter)
+        logger.addHandler(console_handler)
+
+    # --- Weitere Referenzen und alternative Handler ---
+    # (Ausführliche Kommentare sind in der Datei enthalten, hier gekürzt)
+

sync.py angepasst

+

Zweck: Importiert die setup_logging-Funktion und ruft sie ganz am Anfang des Skripts auf, um die Logging-Konfiguration zu initialisieren.

+

Relevanten Änderungen in /home/jonnybravo/Projekte/python_tests/rclone/sync.py:

+
from logging_config import setup_logging
+
+# Logging so früh wie möglich einrichten
+setup_logging() # Optional: setup_logging(console_logging=True) für Konsolen-Logs
+
+from rclone_python import rclone as rc
+from rclone_python.utils import RcloneException
+import os
+import logging
+# ... (restlicher Code)
+

+

2. DNS-Konfiguration auf dem Manjaro-System

+

Um den AdGuard Home-Server 10.50.0.3 als primären DNS-Server für das gesamte System und alle Verbindungen zu nutzen, wurden folgende Schritte durchgeführt:

+

Globale systemd-resolved Konfiguration

+

Zweck: Setzt 10.50.0.3 als systemweiten DNS-Server für systemd-resolved.

+

Änderungen in /etc/systemd/resolved.conf:

+
[Resolve]
+DNS=10.50.0.3
+# FallbackDNS=  # Auskommentieren oder auf FallbackDNS= setzen, um Fallback zu verhindern
+

Nach der Bearbeitung: sudo systemctl restart systemd-resolved

+

NetworkManager Überschreibung für alle Verbindungen

+

Zweck: Weist NetworkManager an, bei allen Netzwerkverbindungen (bestehende und neue) den vom DHCP-Server angebotenen DNS zu ignorieren. Dadurch wird der globale DNS von systemd-resolved verwendet.

+

Neue Datei erstellt: /etc/NetworkManager/conf.d/99-global-dns-override.conf

+
[connection]
+# Diese Einstellung gilt für alle neuen und bestehenden Verbindungen.
+# Sie weist NetworkManager an, den DNS-Server vom DHCP zu ignorieren.
+ipv4.ignore-auto-dns=true
+ipv6.ignore-auto-dns=true
+

Nach der Erstellung: sudo systemctl restart NetworkManager

+

Anpassung des spezifischen WLAN-Profils (SweetHome-5G)

+

Zweck: Hinzufügen der DNS-Suchdomäne, damit lokale Hostnamen ohne vollen Domain-Namen aufgelöst werden können.

+

Befehle für die Kommandozeile (nmcli): +(Ersetzen Sie “Ihr Verbindungsname” durch den tatsächlichen Namen, z.B. “SweetHome-5G”)

+
nmcli connection modify "Ihr Verbindungsname" ipv4.dns-search "speedport.ip"
+# optional für IPv6: nmcli connection modify "Ihr Verbindungsname" ipv6.dns-search "speedport.ip"
+nmcli connection up "Ihr Verbindungsname"
+

+

3. AdGuard Home Konfiguration

+

Installation & SSL-Einrichtung

+

Zweck: Installation von AdGuard Home auf einem Linux-Server und Absicherung der Weboberfläche mit einem selbstsignierten SSL-Zertifikat und eigener CA.

+

Schritte (ausführlich in vorherigen Antworten beschrieben):

+
    +
  1. AdGuard Home installieren (curl ... install.sh).
  2. +
  3. Eigene CA (MyCA.key, MyCA.pem) und Server-Zertifikat (adguard.key, adguard.crt) mit openssl erstellen, inklusive SAN-Erweiterung für IP-Adresse/lokalen Hostnamen.
  4. +
  5. Zertifikate in AdGuard Home (adguard.crt, adguard.key) unter Einstellungen → Verschlüsselungseinstellungen konfigurieren.
  6. +
  7. MyCA.pem auf Client-Geräten als vertrauenswürdige Stammzertifizierungsstelle installieren.
  8. +
+

Bedingte Weiterleitung für lokale Namen

+

Zweck: Ermöglicht AdGuard Home die Auflösung lokaler Hostnamen durch Weiterleitung an den Router.

+

Konfiguration in der AdGuard Home Weboberfläche:

+
    +
  1. Gehen Sie zu Einstellungen → DNS-Einstellungen.
  2. +
  3. Im Abschnitt “Upstream-DNS-Server” die folgende Zeile hinzufügen (zusätzlich zu öffentlichen DNS-Servern): +
    [/speedport.ip/]192.168.50.1
    +
  4. +
  5. Einstellungen speichern.
  6. +
+
+

4. Problembehebung WireGuard DNS

+

Zweck: Behebung des Konflikts, bei dem WireGuard die DNS-Einstellungen überschrieben und auf einen nicht existierenden Server (10.50.0.3 ohne installierten DNS-Dienst) gezeigt hat.

+

Änderung in der WireGuard-Konfigurationsdatei:

+
    +
  • In /etc/wireguard/wg0.conf (im Abschnitt [Interface]) die Zeile DNS = 10.50.0.3 auskommentieren oder auf einen anderen DNS-Server ändern. +
    [Interface]
    +# DNS = 10.50.0.3
    +
  • +
  • WireGuard neu starten: sudo systemctl restart wg-quick@wg0 (oder sudo wg-quick down wg0 && sudo wg-quick up wg0).
  • +
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/sitemap.xml b/site/public/sitemap.xml new file mode 100644 index 0000000..0fe1e0e --- /dev/null +++ b/site/public/sitemap.xml @@ -0,0 +1,52 @@ + + + + https://localhost:1313/ver_next_einbinden/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/blueray_install_manjaro/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/calcurse_tastenk%C3%BCrzel/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/astro-vim-recommendations/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/lazygit/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/string_prefixes/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/install_browser/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/awx_und_rundeck_install/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/stretchen_laufen/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/system-optimierung/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/tinydb_vs_sqlite/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/willkommen/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/yubikey_setup_guide/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/networkconfig_dns/ + 2026-09-08T00:00:00+00:00 + + https://localhost:1313/tags/ + + diff --git a/site/public/stretchen_laufen/index.html b/site/public/stretchen_laufen/index.html new file mode 100644 index 0000000..465ccfd --- /dev/null +++ b/site/public/stretchen_laufen/index.html @@ -0,0 +1,78 @@ + + + + +Stretchen_laufen – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Stretchen_laufen

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Aufwärmen: +10-15 Wh. 1-2 Sek.

+
    +
  1. Zwillingswadenmuskel dehnen S166
  2. +
  3. Zwillingswadenmuskel dehen S164
  4. +
  5. Beste Dhenübung der Welt S140
  6. +
  7. Girlanden-Haltung S126
  8. +
  9. Hüftkreisen im Stehen S148
  10. +
  11. Oberschenkelrückseite dynamisch dehen S163
  12. +
+

Einsteiger : +10-15 Wh. 1-2 Sek.

+
    +
  1. Katze - Kuh S74
  2. +
  3. Quadrizeps dehnen im Stehen S156
  4. +
  5. Oberschenkelrückseite statisch S160
  6. +
  7. Hüftbeuger mithilfe eines Stuhles S137
  8. +
  9. Zwillingswardenmuskel dehnen S166
  10. +
  11. Hüftkreisen im Viertelfüser S150
  12. +
  13. Oberschenkelrückseite S163
  14. +
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/string_prefixes/index.html b/site/public/string_prefixes/index.html new file mode 100644 index 0000000..7937e6d --- /dev/null +++ b/site/public/string_prefixes/index.html @@ -0,0 +1,354 @@ + + + + +Python String-Präfixe – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Python String-Präfixe

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Python String-Präfixe

+

In Python gibt es verschiedene Präfixe für String-Literale, die bestimmen, wie der Interpreter den Inhalt des Strings verarbeitet. Suffixe für String-Literale existieren in Python nicht direkt (anders als in Sprachen wie C++), aber es gibt Methoden auf String-Objekten wie .startswith() und .endswith().

+

Hier ist die Liste aller String-Präfixe in Python mit Beschreibung und logischen Beispielen:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PräfixBeschreibungLogisches Beispiel
KeinesStandard-Unicode-String (UTF-8 in Python 3). Verarbeitet normale Escape-Sequenzen wie \n oder \t.text = "Zeile 1\nZeile 2"
f / FFormatted String (f-string): Ermöglicht die direkte Einbettung von Python-Ausdrücken und Variablen in geschweiften Klammern {}.name = "Welt"\nprint(f"Hallo {name}!") (Ausgabe: Hallo Welt!)
r / RRaw String: Behandelt Backslashes \ als normale Zeichen und ignoriert Escape-Sequenzen. Ideal für reguläre Ausdrücke oder Dateipfade.pfad = r"C:\Users\Name\Documents"
b / BByte-String: Erzeugt ein bytes-Objekt statt eines Standard-Strings. Erlaubt nur ASCII-Zeichen (Werte 0-127).daten = b"Hallo" (Typ ist bytes)
u / UUnicode-String: In Python 3 standardmäßig das Standardverhalten. Wird heute hauptsächlich für die Abwärtskompatibilität mit Python 2 verwendet.unicode_text = u"Café"
fr / rfKombination (Raw f-string): Erlaubt sowohl die Formatierung mit {} als auch die Ignorierung von Escape-Sequenzen.ordner = "Bilder"\npfad = fr"C:\{ordner}\bild.png"
br / rbKombination (Raw Byte-string): Erzeugt ein Byte-Objekt, bei dem Backslashes nicht als Escape-Sequenzen interpretiert werden.regex_bytes = rb"a\nb"
+

(Hinweis: Die Groß- und Kleinschreibung der Präfixe ist beliebig, d. h. f"" verhält sich identisch zu F"".)

+

Python String-Methoden

+

Hier ist eine Übersicht über die wichtigsten eingebauten Methoden von String-Objekten (str) in Python, sortiert nach ihrer Funktion:

+

1. Bereinigen und Ausrichten

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodeBeschreibungLogisches Beispiel
strip([chars])Entfernt führende und folgende Whitespaces (oder die angegebenen Zeichen in chars)." hallo ".strip() (Ergebnis: "hallo")
lstrip([chars])Entfernt nur führende Whitespaces oder Zeichen." hallo ".lstrip() (Ergebnis: "hallo ")
rstrip([chars])Entfernt nur folgende Whitespaces oder Zeichen." hallo ".rstrip() (Ergebnis: " hallo")
ljust(width[, fillchar])Richtet den String linksbündig in einem Feld der Breite width aus."test".ljust(10, "-") (Ergebnis: "test------")
rjust(width[, fillchar])Richtet den String rechtsbündig in einem Feld der Breite width aus."test".rjust(10, "-") (Ergebnis: "------test")
center(width[, fillchar])Zentriert den String in einem Feld der Breite width."test".center(10, "-") (Ergebnis: "---test---")
zfill(width)Füllt den String links mit Nullen auf, bis die Breite width erreicht ist."42".zfill(5) (Ergebnis: "00042")
+

2. Suchen und Ersetzen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodeBeschreibungLogisches Beispiel
replace(old, new[, count])Ersetzt Vorkommen von old durch new. Optional wird die Anzahl durch count begrenzt."A-B-C".replace("-", "/") (Ergebnis: "A/B/C")
find(sub[, start[, end]])Gibt den niedrigsten Index zurück, an dem sub gefunden wird. Gibt -1 zurück, wenn nicht gefunden."hallo".find("ll") (Ergebnis: 2)
rfind(sub[, start[, end]])Gibt den höchsten Index zurück, an dem sub gefunden wird. Gibt -1 zurück, wenn nicht gefunden."hallo".rfind("l") (Ergebnis: 3)
index(sub[, start[, end]])Wie find(), wirft aber einen ValueError, wenn das Substring nicht gefunden wird."hallo".index("x") (Ergebnis: ValueError)
rindex(sub[, start[, end]])Wie rfind(), wirft aber einen ValueError, wenn nicht gefunden."hallo".rindex("l") (Ergebnis: 3)
count(sub[, start[, end]])Zählt, wie oft das Substring sub im String vorkommt."banane".count("an") (Ergebnis: 2)
+

3. Aufteilen und Verbinden

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodeBeschreibungLogisches Beispiel
split(sep=None, maxsplit=-1)Teilt den String an Trennzeichen sep und gibt eine Liste zurück."A,B,C".split(",") (Ergebnis: ['A', 'B', 'C'])
rsplit(sep=None, maxsplit=-1)Teilt den String vom Ende her auf."A,B,C".rsplit(",", 1) (Ergebnis: ['A,B', 'C'])
splitlines([keepends])Teilt den String an Zeilenumbrüchen auf."A\nB".splitlines() (Ergebnis: ['A', 'B'])
join(iterable)Verbindet die Elemente eines Iterables (z.B. Liste) mit dem String als Trennzeichen."-".join(["A", "B"]) (Ergebnis: "A-B")
partition(sep)Teilt den String beim ersten Vorkommen von sep in ein Tupel: (vor, sep, nach)."A-B-C".partition("-") (Ergebnis: ('A', '-', 'B-C'))
rpartition(sep)Teilt den String beim letzten Vorkommen von sep."A-B-C".rpartition("-") (Ergebnis: ('A-B', '-', 'C'))
+

4. Groß-/Kleinschreibung ändern

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodeBeschreibungLogisches Beispiel
lower()Konvertiert alle Zeichen in Kleinbuchstaben."Hallo".lower() (Ergebnis: "hallo")
upper()Konvertiert alle Zeichen in Großbuchstaben."Hallo".upper() (Ergebnis: "HALLO")
capitalize()Setzt das erste Zeichen auf Groß und den Rest auf Klein."hallo welt".capitalize() (Ergebnis: "Hallo welt")
title()Setzt den ersten Buchstaben jedes Wortes auf Groß."hallo welt".title() (Ergebnis: "Hallo Welt")
swapcase()Vertauscht Groß- und Kleinschreibung."HAllo".swapcase() (Ergebnis: "haLLO")
casefold()Ähnlich wie lower(), ist aber aggressiver beim Entfernen von Groß-/Kleinschreibungsunterschieden (gut für Caseless Matching in Unicode)."Straße".casefold() (Ergebnis: "strasse")
+

5. Überprüfungsmethoden (Geben True oder False zurück)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodeBeschreibungLogisches Beispiel
startswith(prefix[, start[, end]])Prüft, ob der String mit prefix beginnt."hallo".startswith("ha") (Ergebnis: True)
endswith(suffix[, start[, end]])Prüft, ob der String mit suffix endet."hallo".endswith("lo") (Ergebnis: True)
isalnum()Prüft, ob alle Zeichen alphanumerisch sind (Buchstaben und Zahlen) und mindestens ein Zeichen vorhanden ist."Python3".isalnum() (Ergebnis: True)
isalpha()Prüft, ob alle Zeichen Buchstaben sind."Python".isalpha() (Ergebnis: True)
isdigit()Prüft, ob alle Zeichen Ziffern sind (z. B. auch hochgestellte Zahlen)."123".isdigit() (Ergebnis: True)
isnumeric()Prüft, ob alle Zeichen numerisch sind (auch Brüche wie ½)."½".isnumeric() (Ergebnis: True)
isspace()Prüft, ob der String nur aus Whitespaces (Leerzeichen, Tabs, Zeilenumbrüchen) besteht." \n".isspace() (Ergebnis: True)
islower()Prüft, ob alle buchstabenbasierten Zeichen kleingeschrieben sind."hallo".islower() (Ergebnis: True)
isupper()Prüft, ob alle buchstabenbasierten Zeichen großgeschrieben sind."HALLO".isupper() (Ergebnis: True)
istitle()Prüft, ob der String im Titlecase-Format vorliegt."Hallo Welt".istitle() (Ergebnis: True)
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/system-optimierung/index.html b/site/public/system-optimierung/index.html new file mode 100644 index 0000000..b1b1f8f --- /dev/null +++ b/site/public/system-optimierung/index.html @@ -0,0 +1,188 @@ + + + + +System Optimierung – nächste Schritte – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

System Optimierung – nächste Schritte

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

System Optimierung – nächste Schritte

+
+

Letzte Bearbeitung: 07.09.2026 +Chat-Session-ID: 20260907_182659_6403f3 +Chat wieder aufrufen: @session:default/20260907_182659_6403f3 in Hermes Agent eingeben

+
+
+

1. flashfocus patchen (Marshmallow-4.x-Inkompatibilität)

+

Einmalig ausführen:

+
sudo sed -i 's/fields\.Number/fields.Float/g' /usr/lib/python3.14/site-packages/flashfocus/config.py
+

Danach testen:

+
flashfocus --help
+

Wenn kein Traceback kommt, ist der Patch erfolgreich.

+

Achtung: Nach jedem pacman -Syu, bei dem flashfocus aktualisiert wird, muss der Patch erneut angewendet werden.

+
+

2. Systemd-User-Services masken

+

Die Manjaro-Sway-Config versucht die Dienste bei jedem Start neu zu enablen.
+Nur disable reicht nicht – sie müssen maskiert werden.

+
systemctl --user mask mako.service flashfocus.service pcmanfm.service poweralertd.service xdg-desktop-portal-gtk.service xdg-desktop-portal-lxqt.service
+

Kontrolle:

+
systemctl --user status mako flashfocus pcmanfm poweralertd xdg-desktop-portal-gtk xdg-desktop-portal-lxqt
+

Alle sollten masked anzeigen (nicht failed).

+
+

3. Neustart und Test

+

Sway neustarten (Super+Shift+R) oder System rebooten.

+

Nach dem Neustart prüfen, ob alle Dienste laufen:

+
pgrep -a mako
+pgrep -a pcmanfm-qt
+pgrep -a poweralertd
+pgrep -a flashfocus
+pgrep -a xdg-desktop-portal
+

Jeder Befehl sollte eine PID und den Prozessnamen ausgeben.

+

Journal aufräumen – keine neuen Crash-Logs mehr:

+
journalctl --user -p 3 --since "1 minute ago"
+

+

4. Weitere Performance-Empfehlungen

+

Die vollständige Analyse ist in diesem Chat dokumentiert. Hier die Top-Empfehlungen als Übersicht:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrioritätMaßnahmeBefehl
Hochswappiness auf 40 senken (ZRAM)sudo sysctl vm.swappiness=40 (temporär) oder /etc/sysctl.d/99-zram.conf
Hochvfs_cache_pressure auf 50sudo sysctl vm.vfs_cache_pressure=50
Mittelollama stoppen (294 MB RAM)sudo systemctl disable --now ollama
Mittellxd/docker stoppen (530 MB RAM)sudo systemctl disable --now lxd docker
MittelCPU-Governor auf powersavesudo cpupower frequency-set -g powersave
NiedrigBoot beschleunigensudo systemctl disable NetworkManager-wait-online
NiedrigJournal-Größe limitieren (3,9 GB → 500 MB)sudo nano /etc/systemd/journald.conf → SystemMaxUse=500M
+
+

5. Verwaiste Pakete aufräumen

+
sudo pacman -Rns $(pacman -Qtdq)   # 9 verwaiste Pakete
+

+

Wie diesen Chat wieder aufrufen

+

In einer neuen Hermes-Agent-Session einfach eingeben:

+
@session:default/20260907_182659_6403f3
+

Dann lädt der Agent den kompletten Chatverlauf aus der Datenbank.

+
+

Dateien, die geändert wurden

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DateiZweck
~/.config/sway/config.d/10-autostart-fix.confKorrigierte Autostarts (exec statt systemd)
/usr/lib/python3.14/site-packages/flashfocus/config.pyMarshmallow-4.x-Patch (sudo nötig)
/home/jonnybravo/Projekte/Python_Skripte/create_selfsign/selfsing.pyCA + Zertifikats-Script (vorherige Session)
~/scripts/mount-nfs.shManuelle NFS-Mount-Steuerung (vorherige Session)
~/scripts/mounts.mdNFS-Mount-Dokumentation (vorherige Session)
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/tags/index.html b/site/public/tags/index.html new file mode 100644 index 0000000..b4107d0 --- /dev/null +++ b/site/public/tags/index.html @@ -0,0 +1,47 @@ + + + + +Tags – Hugo Docker CMS + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +

Tags

+

Markdown-Dateien einfach in content/ ablegen.

+ +
+ +
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/tags/index.xml b/site/public/tags/index.xml new file mode 100644 index 0000000..1d33775 --- /dev/null +++ b/site/public/tags/index.xml @@ -0,0 +1,13 @@ + + + + Hugo Docker CMS + https://localhost:1313/tags/ + Markdown-Dateien einfach in content/ ablegen. + Hugo 0.165.0 + de + Tue, 08 Sep 2026 08:07:00 +0000 + + + + \ No newline at end of file diff --git a/site/public/tinydb_vs_sqlite/index.html b/site/public/tinydb_vs_sqlite/index.html new file mode 100644 index 0000000..e5e235f --- /dev/null +++ b/site/public/tinydb_vs_sqlite/index.html @@ -0,0 +1,106 @@ + + + + +Vergleich: TinyDB vs. SQLite – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Vergleich: TinyDB vs. SQLite

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Vergleich: TinyDB vs. SQLite

+

Sowohl TinyDB als auch SQLite sind hervorragende “Embedded Databases” (eingebettete Datenbanken), die ihre Daten in einer Datei speichern, ohne dass ein separater Serverprozess läuft. Der Unterschied liegt hauptsächlich in ihrem Ansatz zur Datenspeicherung und -abfrage.

+
+

SQLite

+

Vorteile (Pros):

+
    +
  • Sehr robust und bewährt: Seit Jahrzehnten im Einsatz, extrem zuverlässig (ACID-konform).
  • +
  • Standard-SQL: Bietet eine mächtige, standardisierte Abfragesprache, die von vielen Entwicklern beherrscht wird und plattformübergreifend kompatibel ist.
  • +
  • Performance: Sehr gute Leistung für komplexe Abfragen, Joins und große Datensätze.
  • +
  • Strikte Schemas: Erzwingt Datenintegrität durch vordefinierte Tabellenstrukturen und Datentypen.
  • +
  • Großes Ökosystem: Viele Tools, Treiber und Support in fast jeder Programmiersprache verfügbar.
  • +
  • Transaktionen: Robuste Unterstützung für atomare Transaktionen.
  • +
+

Nachteile (Cons):

+
    +
  • SQL-Kenntnisse erforderlich: Entwickler, die kein SQL beherrschen, müssen es lernen.
  • +
  • Schema-Bindung: Änderungen am Datenmodell erfordern oft Schema-Migrationen, die aufwendig sein können. Weniger flexibel für sich schnell ändernde Daten.
  • +
  • Binärdateien: Die Datenbankdateien sind binär und nicht direkt menschenlesbar, was das Debugging erschweren kann.
  • +
  • Boilerplate-Code: Für einfache Operationen kann der SQL-Code im Vergleich zu einer NoSQL-Datenbank länger sein.
  • +
  • Keine native Unterstützung für verschachtelte Daten: Das Speichern von hierarchischen Daten (JSON) erfordert oft JSON-Funktionen in SQL oder separate Tabellen.
  • +
+
+

TinyDB

+

Vorteile (Pros):

+
    +
  • Rein Pythonisch: Die API ist zu 100% in Python geschrieben und fühlt sich sehr natürlich an. Keine SQL-Kenntnisse erforderlich.
  • +
  • Schema-los (NoSQL): Speichert Daten als Python-Wörterbücher (ähnlich JSON). Keine Schema-Definitionen im Voraus notwendig, maximale Flexibilität für sich ändernde Datenmodelle.
  • +
  • Extrem einfach und schnell zu starten: Ideal für kleine Projekte, Prototypen und den schnellen Einstieg.
  • +
  • Menschenlesbare Daten: Speichert Daten standardmäßig in JSON (oder YAML/CBOR), die Datenbankdatei ist mit einem Texteditor lesbar.
  • +
  • Hervorragend für verschachtelte Daten: Ideal für das Speichern und Abfragen von Daten mit komplexen, hierarchischen Strukturen direkt als Python-Objekte.
  • +
  • Keine Konfiguration: Einfach importieren und loslegen.
  • +
+

Nachteile (Cons):

+
    +
  • Python-spezifisch: Nicht leicht in anderen Programmiersprachen zu verwenden (im Gegensatz zu SQL).
  • +
  • Keine komplexe relationale Abfrage: Nicht für komplexe Joins oder Aggregationen über mehrere “Tabellen” hinweg konzipiert.
  • +
  • Leistung bei großen Datensätzen: Bei sehr großen Datenmengen kann die Leistung leiden, da TinyDB für einige Operationen die gesamte Datei lesen muss.
  • +
  • Weniger strenge ACID-Garantien: Obwohl es Transaktionen bietet, ist es im Vergleich zu SQLite weniger robust in Bezug auf strikte ACID-Konformität.
  • +
  • Kleineres Ökosystem: Weniger Tools, Treiber und Community-Support als für SQLite.
  • +
+
+

Die Wahl zwischen beiden hängt stark von den spezifischen Anforderungen Ihres Projekts ab, insbesondere von der Art der Daten, der Komplexität der Abfragen und der Notwendigkeit einer schemalosen Flexibilität.

+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/ver_next_einbinden/index.html b/site/public/ver_next_einbinden/index.html new file mode 100644 index 0000000..f0f595c --- /dev/null +++ b/site/public/ver_next_einbinden/index.html @@ -0,0 +1,145 @@ + + + + +Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Anleitung: Bestehende rclone-Konfiguration auf einen neuen Rechner übertragen

+

Diese Anleitung erklärt, wie Sie eine bereits existierende rclone-Konfiguration, insbesondere für einen verschlüsselten Nextcloud-Speicher, auf einen neuen Computer umziehen können, ohne alles neu einrichten zu müssen.

+
+

Worum geht es?

+

Alle Ihre rclone-Einstellungen, einschließlich der Zugangsdaten zu Ihren Cloud-Speichern, sind in einer einzigen Datei namens rclone.conf gespeichert. Indem Sie diese Datei auf einen neuen Rechner übertragen, “kennt” rclone dort sofort alle Ihre eingerichteten Verbindungen (Remotes).

+
+

Voraussetzungen

+

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

+
    +
  1. Zugriff auf den alten Rechner, auf dem rclone bereits konfiguriert ist.
  2. +
  3. Das Passwort für Ihr verschlüsseltes crypt-Remote. Dies ist extrem wichtig! Ohne dieses Passwort können Sie auf Ihre verschlüsselten Daten nicht mehr zugreifen. Das Kopieren der Konfigurationsdatei allein reicht nicht, wenn Sie das Passwort nicht kennen.
  4. +
  5. Einen Weg, eine einzelne Datei zu übertragen (z.B. ein USB-Stick, ein sicheres Netzlaufwerk etc.).
  6. +
+
+

Schritt-für-Schritt-Anleitung

+

Schritt 1: rclone.conf-Datei auf dem alten Rechner finden und kopieren

+

Die Konfigurationsdatei, die Sie benötigen, befindet sich im Home-Verzeichnis Ihres Benutzers.

+
    +
  1. +

    Öffnen Sie ein Terminal auf Ihrem alten Rechner.

    +
  2. +
  3. +

    Der Pfad zur Datei lautet: ~/.config/rclone/rclone.conf.

    +
  4. +
  5. +

    Kopieren Sie diese Datei auf Ihr Übertragungsmedium (z.B. einen USB-Stick).

    +
    # Beispiel für das Kopieren auf einen USB-Stick, der unter /media/MeinStick gemountet ist
    +cp ~/.config/rclone/rclone.conf /media/MeinStick/
    +
  6. +
+

Schritt 2: rclone auf dem neuen Rechner installieren

+

Falls rclone auf dem neuen Computer noch nicht installiert ist, müssen Sie dies nachholen.

+
# Auf Manjaro/Arch Linux
+sudo pacman -S rclone
+
+# Auf Debian/Ubuntu
+sudo apt install rclone
+

Schritt 3: Konfigurationsdatei auf dem neuen Rechner einfügen

+

Nun bringen Sie die Konfiguration auf den neuen Rechner.

+
    +
  1. +

    Öffnen Sie ein Terminal auf Ihrem neuen Rechner.

    +
  2. +
  3. +

    Stellen Sie sicher, dass das Zielverzeichnis existiert. Der folgende Befehl erstellt es, falls es fehlt:

    +
    mkdir -p ~/.config/rclone/
    +
  4. +
  5. +

    Kopieren Sie die rclone.conf-Datei von Ihrem Übertragungsmedium in dieses Verzeichnis.

    +
    # Beispiel für das Kopieren von einem USB-Stick
    +cp /media/MeinStick/rclone.conf ~/.config/rclone/
    +
  6. +
+

Schritt 4: Überprüfung und erster Test auf dem neuen Rechner

+

Jetzt können Sie überprüfen, ob rclone die Konfiguration erfolgreich übernommen hat.

+
    +
  1. +

    Lassen Sie sich alle erkannten Remotes anzeigen:

    +
    rclone listremotes
    +

    Die Ausgabe sollte nun die Namen Ihrer Remotes (z.B. nextcloud_unverschluesselt: und nextcloud_verschluesselt:) auflisten.

    +
  2. +
  3. +

    Führen Sie einen Test durch: +Der beste Test ist, den Inhalt Ihres verschlüsselten Remotes aufzulisten.

    +
    rclone ls nextcloud_verschluesselt:
    +
      +
    • Möglicherweise fragt rclone Sie an dieser Stelle einmalig nach dem Passwort für Ihr verschlüsseltes Remote, um es zu verifizieren. Geben Sie hier das Passwort ein, das Sie sich gemerkt haben.
    • +
    • Wenn der Befehl erfolgreich ist und eine Liste Ihrer verschlüsselten Dateien und Ordner anzeigt, war der Umzug erfolgreich!
    • +
    +
  4. +
+
+

⚠️ Wichtiger Warnhinweis zum Passwort

+

Die rclone.conf-Datei speichert Ihr Verschlüsselungspasswort nur in einer verschleierten Form. Sie ersetzt nicht die Notwendigkeit, dass Sie das Passwort kennen!

+
    +
  • Bewahren Sie Ihr Passwort immer an einem sicheren Ort auf (z.B. in einem Passwort-Manager).
  • +
  • Ohne das korrekte Passwort sind Ihre verschlüsselten Daten unwiderruflich verloren, selbst wenn Sie die rclone.conf-Datei haben.
  • +
  • Betrachten Sie die rclone.conf-Datei selbst als sensibel, da sie die Zugangsdaten zu Ihren Cloud-Konten enthält.
  • +
+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/willkommen/index.html b/site/public/willkommen/index.html new file mode 100644 index 0000000..b6a0df2 --- /dev/null +++ b/site/public/willkommen/index.html @@ -0,0 +1,74 @@ + + + + +Willkommen bei Hugo Docker – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

Willkommen bei Hugo Docker

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

Das ist eine Beispiel-Seite. Funktioniert!

+

Einfach .md-Dateien in den Ordner content/ kopieren – Hugo rendert sie automatisch.

+

So geht’s

+
# Neue Seite anlegen
+echo '---
+title: "Meine Seite"
+date: "2026-09-08"
+---
+Inhalt hier ...
+' > content/meine-seite.md
+

Änderungen werden dank --watch in Echtzeit übernommen.

+ +
+
+ +
+
+

Hugo Docker CMS – RSS

+
+ + \ No newline at end of file diff --git a/site/public/yubikey_setup_guide/index.html b/site/public/yubikey_setup_guide/index.html new file mode 100644 index 0000000..cd3e4a8 --- /dev/null +++ b/site/public/yubikey_setup_guide/index.html @@ -0,0 +1,189 @@ + + + + +YubiKey-Einrichtung unter Manjaro Sway – Hugo Docker CMS + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ +
+
+

YubiKey-Einrichtung unter Manjaro Sway

+ + +
+ +
+ Inhaltsverzeichnis + +
+ +
+

YubiKey-Einrichtung unter Manjaro Sway

+

Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren.

+
+

Übersicht der Anwendungsfälle:

+
    +
  1. FIDO2/U2F: Für die Zwei-Faktor-Authentifizierung auf Webseiten.
  2. +
  3. GPG: Zur Verschlüsselung von E-Mails/Dateien und zum Signieren von Git-Commits.
  4. +
  5. SSH: Zur sicheren Anmeldung auf Servern.
  6. +
  7. PAM: Zur Anmeldung am System oder für sudo (fortgeschritten und mit Vorsicht zu genießen).
  8. +
+
+

Schritt 1: Notwendige Pakete installieren

+

Zuerst müssen Sie die erforderlichen Pakete über den Paketmanager pacman installieren. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

+
sudo pacman -S yubikey-manager yubikey-personalization libfido2 gnupg pcsclite ccid
+

Erklärung der Pakete:

+
    +
  • yubikey-manager: Das wichtigste Werkzeug zur Konfiguration Ihres YubiKeys.
  • +
  • yubikey-personalization: Für ältere YubiKey-Modelle oder spezielle Konfigurationen (obwohl yubikey-manager oft bevorzugt wird).
  • +
  • libfido2: Stellt die FIDO2-Unterstützung für WebAuthn in Browsern sicher.
  • +
  • gnupg: Das GnuPG-Programm, notwendig für die Smartcard-Funktionen des YubiKeys.
  • +
  • pcsclite & ccid: Systemdienste, die die Kommunikation mit dem YubiKey als Smartcard ermöglichen.
  • +
+

Nach der Installation ist es eine gute Idee, den pcscd-Dienst zu aktivieren und zu starten:

+
sudo systemctl enable pcscd.service
+sudo systemctl start pcscd.service
+

Schritt 2: YubiKey erkennen und Status prüfen

+

Stecken Sie Ihren YubiKey ein und überprüfen Sie, ob das System ihn erkennt:

+
ykman info
+

Wenn alles korrekt ist, sollten Sie hier Informationen zu Ihrem YubiKey-Modell und dessen Firmware-Version sehen.

+
+

Anwendungsfälle:

+

Anwendungsfall A: Web-Authentifizierung (FIDO2/U2F)

+

Dies ist der einfachste Fall und erfordert in der Regel keine zusätzliche Konfiguration nach der Installation von libfido2.

+
    +
  1. Voraussetzung: Ein unterstützter Webbrowser (Firefox, Chrome, Brave, Edge, etc.).
  2. +
  3. Registrierung: Gehen Sie zu einer Webseite, die WebAuthn oder FIDO2 unterstützt (z.B. GitHub, Google, GitLab). Navigieren Sie zu den Sicherheitseinstellungen der Webseite.
  4. +
  5. YubiKey hinzufügen: Registrieren Sie Ihren YubiKey als neuen Sicherheitsschlüssel. Der Browser sollte Sie auffordern, den YubiKey zu berühren.
  6. +
+

Das war’s schon! Sie können den YubiKey nun für die Zwei-Faktor-Authentifizierung (2FA) auf diesen Seiten verwenden.

+

Anwendungsfall B: GPG für Verschlüsselung und Signaturen

+

Sie können den YubiKey als Hardware-Speicher für Ihre GPG-Schlüssel verwenden. Das ist sehr sicher, da die privaten Schlüssel den YubiKey niemals verlassen.

+
    +
  1. +

    GPG-Status prüfen: Stecken Sie den YubiKey ein und führen Sie aus:

    +
    gpg --card-status
    +

    Wenn GPG den YubiKey als “Card” erkennt, sind Sie bereit für die weitere Konfiguration.

    +
  2. +
  3. +

    Schlüssel generieren oder importieren: +Der Prozess, GPG-Schlüssel zu erstellen und auf den YubiKey zu übertragen, ist sehr umfangreich und sollte sorgfältig durchgeführt werden. Die offizielle Anleitung von Yubico ist hierfür die beste Quelle: +Yubico Docs: Using Your YubiKey with GPG +(Stellen Sie sicher, dass Sie eine aktuelle Anleitung verwenden, die zu Ihrer YubiKey-Firmware passt.)

    +
  4. +
+

Anwendungsfall C: SSH-Authentifizierung

+

Sie können den YubiKey auch für die SSH-Authentifizierung verwenden, um sich sicher auf Servern anzumelden.

+

Möglichkeit 1: SSH-Authentifizierung über GPG +Wenn Sie bereits GPG (Anwendungsfall B) eingerichtet haben, können Sie den Authentifizierungs-Unterschlüssel Ihres GPG-Schlüssels für SSH verwenden.

+
    +
  1. Fügen Sie enable-ssh-support zu Ihrer ~/.gnupg/gpg-agent.conf hinzu.
  2. +
  3. Folgen Sie einer Anleitung, um den GPG-Agent als SSH-Agent zu konfigurieren, z.B. für Arch Linux (Manjaro basiert darauf): +ArchWiki: GnuPG - SSH agent
  4. +
+

Möglichkeit 2: Direkte FIDO-basierte SSH-Schlüssel (neuere YubiKeys) +Neuere YubiKeys (ab Firmware 5.2.7) können direkt als FIDO-Gerät für SSH-Schlüssel vom Typ ecdsa-sk oder ed25519-sk verwendet werden. Dies erfordert OpenSSH ab Version 8.2.

+
    +
  1. +

    Schlüssel generieren:

    +
    ssh-keygen -t ed25519-sk -C "mein-yubikey-ssh-schluessel"
    +

    ssh-keygen wird Sie auffordern, Ihren YubiKey zu berühren, um den Schlüssel zu erstellen.

    +
  2. +
  3. +

    Öffentlichen Schlüssel verwenden: +Den generierten öffentlichen Schlüssel (z.B. ~/.ssh/id_ed25519_sk.pub) können Sie wie gewohnt auf Ihre Server in die ~/.ssh/authorized_keys-Datei kopieren. Bei der SSH-Anmeldung wird Ihre SSH-Anwendung Sie dann auffordern, den YubiKey zu berühren.

    +
  4. +
+

Anwendungsfall D: System-Login und Sudo (PAM) - Für Fortgeschrittene und mit äußerster Vorsicht!

+

Sie können den YubiKey auch verwenden, um sich am System anzumelden oder sudo-Befehle zu autorisieren. Eine Fehlkonfiguration hier kann Sie von Ihrem System ausschließen.

+

⚠️ WARNUNG:

+
    +
  • Lassen Sie IMMER ein zweites Terminal mit einer aktiven Root-Shell (sudo -i) offen, während Sie die PAM-Konfiguration ändern. So können Sie Fehler sofort korrigieren.
  • +
  • Erstellen Sie vor Änderungen an PAM-Dateien immer Backups der Originaldateien (z.B. sudo cp /etc/pam.d/sudo /etc/pam.d/sudo.bak).
  • +
+
    +
  1. +

    PAM-Modul installieren:

    +
    sudo pacman -S pam-u2f
    +
  2. +
  3. +

    Konfigurationsdatei für den YubiKey erstellen: +Diese Datei ordnet Ihren YubiKey Ihrem Benutzerkonto zu.

    +
    mkdir -p ~/.config/Yubico
    +pamu2fcfg > ~/.config/Yubico/u2f_keys
    +

    Wichtig: Stecken Sie Ihren YubiKey ein und berühren Sie ihn, wenn die LED während der Ausführung von pamu2fcfg blinkt.

    +
  4. +
  5. +

    PAM-Datei bearbeiten (Beispiel für sudo): +Öffnen Sie die sudo-PAM-Konfiguration zum Bearbeiten:

    +
    sudo nano /etc/pam.d/sudo
    +

    Fügen Sie die folgende Zeile GANZ OBEN in die Datei ein:

    +
    auth       sufficient   pam_u2f.so authfile=/home/DEIN_BENUTZER/.config/Yubico/u2f_keys
    +
      +
    • Ersetzen Sie DEIN_BENUTZER durch Ihren tatsächlichen Linux-Benutzernamen (z.B. jonnybravo).
    • +
    • auth sufficient: Bedeutet, dass eine erfolgreiche Authentifizierung mit dem YubiKey ausreicht. Wenn der YubiKey nicht eingesteckt ist oder die Authentifizierung fehlschlägt, wird die nächste Authentifizierungsmethode (normalerweise das Passwort) verwendet. Dies ist sicherer, um sich nicht auszusperren. Wenn Sie required verwenden, MUSS der YubiKey funktionieren.
    • +
    +
  6. +
  7. +

    Testen: +Öffnen Sie ein neues Terminal (NICHT das, in dem Ihre Root-Shell läuft) und testen Sie den sudo-Befehl (z.B. sudo ls). Sie sollten aufgefordert werden, Ihren YubiKey zu berühren. Berühren Sie ihn und prüfen Sie, ob sudo funktioniert. Funktioniert es nicht, nutzen Sie das Root-Terminal, um die Änderungen rückgängig zu machen.

    +
  8. +
+

Weitere PAM-Anwendungen: +Ähnliche Einträge können Sie auch für den Login-Manager (z.B. sddm, gdm, lightdm) oder den Screensaver (z.B. swaylock) in deren entsprechenden PAM-Dateien (/etc/pam.d/<dienstname>) hinzufügen. Das genaue Vorgehen kann je nach Dienst variieren.

+
+

Wichtige Hinweise:

+
    +
  • PINs und PUKs: Merken Sie sich die PINs und PUKs Ihres YubiKeys. Sie sind für viele Funktionen unerlässlich.
  • +
  • Backups: Erstellen Sie immer Backups Ihrer GPG-Schlüssel, bevor Sie diese auf den YubiKey verschieben.
  • +
  • Vorsicht bei PAM: PAM-Konfigurationen sind mächtig. Testen Sie Änderungen immer sorgfältig und haben Sie einen Notfallplan (z.B. eine Live-CD oder das offene Root-Terminal).
  • +
  • Firmware: Stellen Sie sicher, dass die Firmware Ihres YubiKeys aktuell ist (ykman firmware info).
  • +
  • Dokumentation: Die Yubico-Dokumentation ist exzellent und sollte bei spezifischen Problemen oder fortgeschrittenen Konfigurationen konsultiert werden.
  • +
+ +
+
+ +
+ + + \ No newline at end of file