first
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
# Playbook: Hugo-Docker-CMS aufzielen
|
||||
# Aufruf: ansible-playbook -i "<host>," deploy.yml
|
||||
# oder mit Variablen:
|
||||
# ansible-playbook -i "<host>," 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"
|
||||
@@ -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})
|
||||
|
||||
@@ -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 %}
|
||||
@@ -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
|
||||
@@ -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://<deine-ip>: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 <<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
|
||||
```
|
||||
|
||||
3. AWX starten:
|
||||
```bash
|
||||
cd ~/awx_data
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. Zugriff:
|
||||
- URL: http://<deine-ip>: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 <<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. Für AWX:
|
||||
```bash
|
||||
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'
|
||||
```
|
||||
|
||||
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
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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 `<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`:
|
||||
|
||||
@@ -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).
|
||||
@@ -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 |
|
||||
@@ -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.
|
||||
@@ -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`).
|
||||
@@ -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`)* |
|
||||
@@ -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) |
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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/<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.
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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-----
|
||||
|
||||
@@ -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:
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
Executable
+35
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,12 @@
|
||||
<html lang="{{ .Site.Language.Locale }}">
|
||||
<head>
|
||||
{{ partial "head.html" . }}
|
||||
</head>
|
||||
<body>
|
||||
{{ partial "header.html" . }}
|
||||
<main>
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
{{ partial "footer.html" . }}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ with .Site.Params.description }}<p class="subtitle">{{ . }}</p>{{ end }}
|
||||
|
||||
<div class="post-grid">
|
||||
{{ range .Pages }}
|
||||
<article class="card">
|
||||
<time>{{ .Date.Format "02.01.2006" }}</time>
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
<p>{{ .Summary | plainify | truncate 200 }}</p>
|
||||
{{ with .Params.tags }}
|
||||
<div class="tags">
|
||||
{{ range . }}<span class="tag">{{ . }}</span>{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</article>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,21 @@
|
||||
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ .Site.Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>{{ .Site.Params.description }}</description>
|
||||
<generator>Hugo {{ hugo.Version }}</generator>
|
||||
<language>{{ .Site.Language.Locale }}</language>
|
||||
<lastBuildDate>{{ now.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>
|
||||
<atom:link href="{{ "index.xml" | absURL }}" rel="self" type="application/rss+xml"/>
|
||||
{{ range .Pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Summary | plainify | truncate 300 }}</description>
|
||||
</item>
|
||||
{{ end }}
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ with .Date }}<time datetime="{{ .Format "2006-01-02" }}">{{ .Format "02.01.2006" }}</time>{{ end }}
|
||||
{{ with .Params.tags }}
|
||||
<div class="tags">
|
||||
{{ range . }}<span class="tag">{{ . }}</span>{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</header>
|
||||
|
||||
{{ partial "toc.html" . }}
|
||||
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,3 @@
|
||||
<footer>
|
||||
<p>{{ .Site.Title }} – <a href="{{ "index.xml" | relURL }}">RSS</a></p>
|
||||
</footer>
|
||||
@@ -0,0 +1,20 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} – {{ .Site.Title }}{{ end }}</title>
|
||||
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ with .Summary }}{{ . | plainify | truncate 160 }}{{ else }}{{ .Site.Params.description }}{{ end }}{{ end }}">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} – {{ .Site.Title }}{{ end }}">
|
||||
<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{ with .Summary }}{{ . | plainify | truncate 160 }}{{ else }}{{ .Site.Params.description }}{{ end }}{{ end }}">
|
||||
<meta property="og:type" content="{{ if .IsHome }}website{{ else }}article{{ end }}">
|
||||
<meta property="og:url" content="{{ .Permalink }}">
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}">
|
||||
|
||||
<!-- CSS -->
|
||||
{{ $css := resources.Get "css/main.css" | resources.Minify }}
|
||||
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
|
||||
|
||||
<!-- RSS -->
|
||||
{{ with .OutputFormats.Get "rss" }}
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ $.Site.Title }}" href="{{ .RelPermalink }}">
|
||||
{{ end }}
|
||||
@@ -0,0 +1,8 @@
|
||||
<header>
|
||||
<a href="/" class="logo">{{ .Site.Title }}</a>
|
||||
{{ if not .IsHome }}
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
{{ end }}
|
||||
</header>
|
||||
@@ -0,0 +1,4 @@
|
||||
<details class="toc" {{ if gt (len .Fragments.Headings) 2 }}open{{ end }}>
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
{{ .TableOfContents }}
|
||||
</details>
|
||||
@@ -0,0 +1,113 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Empfehlungen für AstroVim – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Empfehlungen für AstroVim 1. Tastenkürzel kennenlernen (Which‑Key) AstroVim nutzt which‑key für kontextsensitive Key‑Menüs. Drücke <leader> (Standard: …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Empfehlungen für AstroVim – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Empfehlungen für AstroVim 1. Tastenkürzel kennenlernen (Which‑Key) AstroVim nutzt which‑key für kontextsensitive Key‑Menüs. Drücke <leader> (Standard: …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/astro-vim-recommendations/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Empfehlungen für AstroVim</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#1-tastenkürzel-kennenlernen-whichkey">1. Tastenkürzel kennenlernen (Which‑Key)</a></li>
|
||||
<li><a href="#2-dateiexplorer-neotree">2. Dateiexplorer (Neo‑Tree)</a></li>
|
||||
<li><a href="#3-fuzzyfinder-telescope">3. Fuzzy‑Finder (Telescope)</a></li>
|
||||
<li><a href="#4-bufferverwaltung">4. Buffer‑Verwaltung</a></li>
|
||||
<li><a href="#5-gitintegration-lazygit--gitsigns">5. Git‑Integration (LazyGit / Gitsigns)</a></li>
|
||||
<li><a href="#6-terminal-im-editor">6. Terminal im Editor</a></li>
|
||||
<li><a href="#7-snippets-luasnip">7. Snippets (LuaSnip)</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="empfehlungen-für-astrovim">Empfehlungen für AstroVim</h1>
|
||||
<h2 id="1-tastenkürzel-kennenlernen-whichkey">1. Tastenkürzel kennenlernen (Which‑Key)</h2>
|
||||
<p>AstroVim nutzt <strong>which‑key</strong> für kontextsensitive Key‑Menüs.
|
||||
Drücke <code><leader></code> (Standard: Leertaste) und warte kurz, um das Menü
|
||||
zu sehen. So erkennst du schnell verfügbare Aktionen.</p>
|
||||
<h2 id="2-dateiexplorer-neotree">2. Dateiexplorer (Neo‑Tree)</h2>
|
||||
<p>AstroVim bringt <strong>neo‑tree</strong> als Dateibaum mit.</p>
|
||||
<ul>
|
||||
<li><code><leader> e</code> öffnet / schließt den Explorer.</li>
|
||||
<li><code>a</code> legt eine neue Datei an, <code>d</code> löscht, <code>r</code> benennt um.</li>
|
||||
<li><code>H</code> blendet ausgeblendete Dateien ein / aus.</li>
|
||||
</ul>
|
||||
<h2 id="3-fuzzyfinder-telescope">3. Fuzzy‑Finder (Telescope)</h2>
|
||||
<p><strong>Telescope</strong> ist der Fuzzy‑Finder.</p>
|
||||
<ul>
|
||||
<li><code><leader> f f</code> : Dateien im Projekt suchen</li>
|
||||
<li><code><leader> f g</code> : live‑grep im Projekt</li>
|
||||
<li><code><leader> f b</code> : geöffnete Buffer durchsuchen</li>
|
||||
<li><code><leader> f h</code> : Hilfe‑Tags durchsuchen</li>
|
||||
</ul>
|
||||
<h2 id="4-bufferverwaltung">4. Buffer‑Verwaltung</h2>
|
||||
<ul>
|
||||
<li><code><leader> c</code> schließt den aktuellen Buffer.</li>
|
||||
<li><code>[ b</code> / <code>] b</code> wechselt zum vorherigen / nächsten Buffer.</li>
|
||||
<li><code><leader> b</code> zeigt eine Liste offener Buffer.</li>
|
||||
</ul>
|
||||
<h2 id="5-gitintegration-lazygit--gitsigns">5. Git‑Integration (LazyGit / Gitsigns)</h2>
|
||||
<ul>
|
||||
<li><strong>LazyGit</strong> startest du mit <code><leader> g g</code> – eine vollwertige
|
||||
Git‑TUI direkt im Terminal‑Fenster.</li>
|
||||
<li><strong>Gitsigns</strong> zeigt Änderungen in der Sign‑Spalte.
|
||||
<ul>
|
||||
<li><code>] c</code> / <code>[ c</code> springt zur nächsten / vorherigen Änderung.</li>
|
||||
<li><code><leader> h s</code> stage a hunk, <code><leader> h r</code> reset hunk.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="6-terminal-im-editor">6. Terminal im Editor</h2>
|
||||
<ul>
|
||||
<li><code><leader> t f</code> öffnet ein floatendes Terminal.</li>
|
||||
<li><code><leader> t h</code> / <code><leader> t v</code> teilt horizontal / vertikal
|
||||
mit einem Terminal.</li>
|
||||
<li><code>Ctrl+\ Ctrl+n</code> wechselt in den Normal‑Modus innerhalb des Terminals.</li>
|
||||
</ul>
|
||||
<h2 id="7-snippets-luasnip">7. Snippets (LuaSnip)</h2>
|
||||
<p>AstroVim verwendet <strong>LuaSnip</strong>. Du kannst eigene Snippets unter
|
||||
<code>~/.config/nvim/lua/user/snippets/</code> ablegen. Beispiel‑Datei
|
||||
<code>python.lua</code>:</p>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,190 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Rundeck und AWX Installation mit Docker – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Rundeck und AWX Installation mit Docker Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Rundeck und AWX Installation mit Docker – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Rundeck und AWX Installation mit Docker Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/awx_und_rundeck_install/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Rundeck und AWX Installation mit Docker</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#voraussetzungen">Voraussetzungen</a></li>
|
||||
<li><a href="#rundeck-installation">Rundeck Installation</a></li>
|
||||
<li><a href="#awx-installation">AWX Installation</a></li>
|
||||
<li><a href="#persistenz-und-autostart">Persistenz und Autostart</a></li>
|
||||
<li><a href="#wichtige-hinweise">Wichtige Hinweise</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="rundeck-und-awx-installation-mit-docker">Rundeck und AWX Installation mit Docker</h1>
|
||||
<p>Diese Anleitung zeigt, wie man Rundeck und AWX in Docker-Containern installiert, wobei alle wichtigen Daten persistent gespeichert werden.</p>
|
||||
<h2 id="voraussetzungen">Voraussetzungen</h2>
|
||||
<ul>
|
||||
<li>Docker und Docker-Compose installiert</li>
|
||||
<li>Ausreichend Speicherplatz (mindestens 2GB empfohlen)</li>
|
||||
<li>Ports 4440 und 8052 frei</li>
|
||||
</ul>
|
||||
<h2 id="rundeck-installation">Rundeck Installation</h2>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Verzeichnis für persistente Daten erstellen:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/rundeck_data
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Rundeck Container starten:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run -d <span class="se">\
|
||||
</span></span></span><span class="line"><span class="cl"> -p 4440:4440 <span class="se">\
|
||||
</span></span></span><span class="line"><span class="cl"> -v ~/rundeck_data:/home/rundeck/server/data <span class="se">\
|
||||
</span></span></span><span class="line"><span class="cl"> --name rundeck <span class="se">\
|
||||
</span></span></span><span class="line"><span class="cl"> rundeck/rundeck:latest
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Zugriff:</p>
|
||||
<ul>
|
||||
<li>URL: http://<deine-ip>:4440</li>
|
||||
<li>Login: admin/admin</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<h2 id="awx-installation">AWX Installation</h2>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Verzeichnisse für persistente Daten erstellen:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/awx_data/postgres ~/awx_data/projects
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>docker-compose.yml erstellen:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat <span class="s"><<EOL > ~/awx_data/docker-compose.yml
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s">version: '3'
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s">services:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> postgres:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> image: postgres:13
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> volumes:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> - ~/awx_data/postgres:/var/lib/postgresql/data
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> environment:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> POSTGRES_DB: awx
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> POSTGRES_USER: awx
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> POSTGRES_PASSWORD: awxpass
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> awx:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> image: ansible/awx:latest
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> depends_on:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> - postgres
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> ports:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> - "8052:8052"
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> volumes:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> - ~/awx_data/projects:/var/lib/awx/projects
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> environment:
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> DATABASE_USER: awx
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> DATABASE_PASSWORD: awxpass
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> DATABASE_NAME: awx
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s"> DATABASE_HOST: postgres
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s">EOL</span>
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>AWX starten:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> ~/awx_data
|
||||
</span></span><span class="line"><span class="cl">docker-compose up -d
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Zugriff:</p>
|
||||
<ul>
|
||||
<li>URL: http://<deine-ip>:8052</li>
|
||||
<li>Login: admin/password</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<h2 id="persistenz-und-autostart">Persistenz und Autostart</h2>
|
||||
<p>Um sicherzustellen, dass die Container nach einem Neustart automatisch starten, können Systemd-Services eingerichtet werden:</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Für Rundeck:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo bash -c <span class="s1">'cat <<EOL > /etc/systemd/system/rundeck-docker.service
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Unit]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">Description=Rundeck Docker Container
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">After=docker.service
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Service]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">Restart=always
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">ExecStart=/usr/bin/docker start -a rundeck
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">ExecStop=/usr/bin/docker stop -t 2 rundeck
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Install]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">WantedBy=multi-user.target
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">EOL'</span>
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Für AWX:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo bash -c <span class="s1">'cat <<EOL > /etc/systemd/system/awx-docker.service
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Unit]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">Description=AWX Docker Container
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">After=docker.service
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Service]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">WorkingDirectory=/home/$(whoami)/awx_data
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">Restart=always
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">ExecStart=/usr/local/bin/docker-compose up
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">ExecStop=/usr/local/bin/docker-compose down
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">[Install]
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">WantedBy=multi-user.target
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">EOL'</span>
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Services aktivieren:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl daemon-reload
|
||||
</span></span><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> rundeck-docker
|
||||
</span></span><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> awx-docker
|
||||
</span></span></code></pre></div></li>
|
||||
</ol>
|
||||
<h2 id="wichtige-hinweise">Wichtige Hinweise</h2>
|
||||
<ul>
|
||||
<li>Beide Lösungen können parallel betrieben werden</li>
|
||||
<li>Daten werden in ~/rundeck_data und ~/awx_data gespeichert</li>
|
||||
<li>Für Produktivumgebungen sollten zusätzliche Sicherheitsmaßnahmen getroffen werden</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,97 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>blueray_install_manjaro – Hugo Docker CMS</title>
|
||||
<meta name="description" content="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 …">
|
||||
|
||||
|
||||
<meta property="og:title" content="blueray_install_manjaro – Hugo Docker CMS">
|
||||
<meta property="og:description" content="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 …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/blueray_install_manjaro/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>blueray_install_manjaro</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#befehle-zur-einrichtung-von-vlc-für-blu-rays-manjaro">Befehle zur Einrichtung von VLC für Blu-rays (Manjaro)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h3 id="befehle-zur-einrichtung-von-vlc-für-blu-rays-manjaro">Befehle zur Einrichtung von VLC für Blu-rays (Manjaro)</h3>
|
||||
<p>Diese Schritte helfen Ihnen, VLC so zu konfigurieren, dass es Blu-ray-Discs abspielen kann.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>Benötigte Pakete installieren</strong>
|
||||
Dieser Befehl installiert alle notwendigen Pakete für die Blu-ray-Wiedergabe:</p>
|
||||
<ul>
|
||||
<li><code>vlc</code>: Der Media Player.</li>
|
||||
<li><code>libaacs</code>: Notwendig, um AACS-geschützte Blu-ray-Discs zu entschlüsseln.</li>
|
||||
<li><code>libbluray</code>: Eine Bibliothek für die Navigation und Wiedergabe von Blu-ray-Discs.</li>
|
||||
<li><code>jre-openjdk</code>: Eine Java-Laufzeitumgebung, die für Blu-ray-Menüs (BD-J) benötigt wird.</li>
|
||||
</ul>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S vlc libaacs libbluray jre-openjdk
|
||||
</span></span></code></pre></div><p><em>Hinweis: Der zuvor erwähnte Paket <code>libbdplus</code> 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.</em></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Verzeichnis für AACS-Schlüssel erstellen</strong>
|
||||
Dieser Befehl erstellt das notwendige Verzeichnis in Ihrem Home-Verzeichnis, wo die Entschlüsselungsschlüssel (<code>KEYDB.cfg</code>) für Blu-ray-Discs gespeichert werden. Das <code>-p</code>-Flag stellt sicher, dass alle übergeordneten Verzeichnisse bei Bedarf ebenfalls erstellt werden und unterdrückt Fehlermeldungen, falls das Verzeichnis bereits existiert.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/.config/aacs/
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p><strong>KEYDB.cfg-Datei herunterladen</strong>
|
||||
Dieser Befehl lädt die Datei <code>KEYDB.cfg</code> 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 <code>.config/aacs/</code>-Verzeichnis gespeichert.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">wget -O ~/.config/aacs/KEYDB.cfg http://vlc-bluray.whoknowsmy.name/files/KEYDB.cfg
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p><strong>Benutzerberechtigungen für das Blu-ray-Laufwerk korrigieren</strong>
|
||||
Sollten Sie die Fehlermeldung erhalten, dass VLC die Medienadresse nicht öffnen kann (<code>VLC kann die Medienadresse 'bluray:///dev/sr0' nicht öffnen</code>), liegt es wahrscheinlich an fehlenden Berechtigungen. Dieser Befehl fügt Ihren Benutzer zur <code>optical</code>-Gruppe hinzu, die den Zugriff auf optische Laufwerke ermöglicht.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo usermod -aG optical jonnybravo
|
||||
</span></span></code></pre></div><p><strong>WICHTIG:</strong> Damit diese Änderung wirksam wird, müssen Sie sich <strong>vollständig von Ihrer aktuellen Sitzung abmelden und dann wieder neu anmelden</strong> (oder den Computer neu starten).</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,271 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Calcurse Tastenkürzel (Zusammenfassung) – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Calcurse Tastenkürzel (Zusammenfassung) Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für calcurse zusammengefasst.
|
||||
Allgemeine …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Calcurse Tastenkürzel (Zusammenfassung) – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Calcurse Tastenkürzel (Zusammenfassung) Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für calcurse zusammengefasst.
|
||||
Allgemeine …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/calcurse_tastenk%C3%BCrzel/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Calcurse Tastenkürzel (Zusammenfassung)</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#allgemeine-steuerung"><strong>Allgemeine Steuerung</strong></a></li>
|
||||
<li><a href="#navigation-im-kalender"><strong>Navigation im Kalender</strong></a></li>
|
||||
<li><a href="#termine--todos-verwalten"><strong>Termine & TODOs verwalten</strong></a></li>
|
||||
<li><a href="#speziell-für-die-todo-liste"><strong>Speziell für die TODO-Liste</strong></a></li>
|
||||
<li><a href="#daten-im---export"><strong>Daten Im- & Export</strong></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="calcurse-tastenkürzel-zusammenfassung">Calcurse Tastenkürzel (Zusammenfassung)</h1>
|
||||
<p>Basierend auf deiner Konfigurationsdatei sind hier die wichtigsten Tastenkürzel für <code>calcurse</code> zusammengefasst.</p>
|
||||
<hr>
|
||||
<h3 id="allgemeine-steuerung"><strong>Allgemeine Steuerung</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste(n)</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>q</code>, <code>Q</code></td>
|
||||
<td>Calcurse beenden</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>s</code>, <code>S</code></td>
|
||||
<td>Änderungen speichern</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>?</code></td>
|
||||
<td>Hilfe anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>C</code></td>
|
||||
<td>Konfigurationsmenü öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>TAB</code></td>
|
||||
<td>Zwischen den Ansichten wechseln (Termine/TODO)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ESC</code></td>
|
||||
<td>Aktion abbrechen / Dialog schließen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>:</code></td>
|
||||
<td>Befehlszeile öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>^R</code></td>
|
||||
<td>Bildschirm neu zeichnen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="navigation-im-kalender"><strong>Navigation im Kalender</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste(n)</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>t</code></td>
|
||||
<td>Nächster Tag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>T</code></td>
|
||||
<td>Vorheriger Tag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>w</code></td>
|
||||
<td>Nächste Woche</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>W</code></td>
|
||||
<td>Vorherige Woche</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>m</code></td>
|
||||
<td>Nächster Monat</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M</code></td>
|
||||
<td>Vorheriger Monat</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>y</code></td>
|
||||
<td>Nächstes Jahr</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Y</code></td>
|
||||
<td>Vorheriges Jahr</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code>, <code>G</code></td>
|
||||
<td>Zu einem bestimmten Datum springen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>^G</code></td>
|
||||
<td>Zum heutigen Tag springen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>h</code>,<code>j</code>,<code>k</code>,<code>l</code></td>
|
||||
<td>Navigation (links, runter, hoch, rechts)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="termine--todos-verwalten"><strong>Termine & TODOs verwalten</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste(n)</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>a</code>, <code>A</code></td>
|
||||
<td>Neuen Eintrag hinzufügen (je nach Ansicht)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>^A</code></td>
|
||||
<td>Direkt einen neuen <strong>Termin</strong> hinzufügen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>^T</code></td>
|
||||
<td>Direkt einen neuen <strong>TODO</strong>-Eintrag hinzufügen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code>, <code>D</code></td>
|
||||
<td>Ausgewählten Eintrag löschen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>e</code>, <code>E</code></td>
|
||||
<td>Ausgewählten Eintrag bearbeiten</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>v</code>, <code>Enter</code></td>
|
||||
<td>Details des Eintrags ansehen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>n</code>, <code>N</code></td>
|
||||
<td>Notiz bearbeiten/hinzufügen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>></code></td>
|
||||
<td>Notiz ansehen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>c</code></td>
|
||||
<td>Eintrag kopieren</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>p</code></td>
|
||||
<td>Eintrag einfügen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>r</code></td>
|
||||
<td>Wiederholung für einen Eintrag festlegen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="speziell-für-die-todo-liste"><strong>Speziell für die TODO-Liste</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste(n)</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>!</code></td>
|
||||
<td>Task als erledigt markieren (umschalten)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>+</code></td>
|
||||
<td>Priorität des Tasks erhöhen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>-</code></td>
|
||||
<td>Priorität des Tasks senken</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="daten-im---export"><strong>Daten Im- & Export</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste(n)</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>i</code>, <code>I</code></td>
|
||||
<td>Daten aus einer Datei importieren</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>x</code>, <code>X</code></td>
|
||||
<td>Daten in eine Datei exportieren</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>`</td>
|
||||
<td>`</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+1
@@ -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}}}
|
||||
@@ -0,0 +1,152 @@
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.165.0"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Hugo Docker CMS</title>
|
||||
<meta name="description" content="Markdown-Dateien einfach in content/ ablegen.">
|
||||
|
||||
|
||||
<meta property="og:title" content="Hugo Docker CMS">
|
||||
<meta property="og:description" content="Markdown-Dateien einfach in content/ ablegen.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://localhost:1313/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="Hugo Docker CMS" href="/index.xml">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<h1>Hugo Docker CMS</h1>
|
||||
<p class="subtitle">Markdown-Dateien einfach in content/ ablegen.</p>
|
||||
|
||||
<div class="post-grid">
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/ver_next_einbinden/">Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/blueray_install_manjaro/">blueray_install_manjaro</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/calcurse_tastenk%C3%BCrzel/">Calcurse Tastenkürzel (Zusammenfassung)</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/astro-vim-recommendations/">Empfehlungen für AstroVim</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/lazygit/">Lazygit – Der Terminal-Git-Client</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/string_prefixes/">Python String-Präfixe</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/install_browser/">qutebrowser Installation (Wayland / Sway)</a></h2>
|
||||
<p>qutebrowser Installation (Wayland / Sway) Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine (Chromium/Blink-Engine). Kein Fork, sondern eigenständig.
|
||||
Hinweis: qutebrowser …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/awx_und_rundeck_install/">Rundeck und AWX Installation mit Docker</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/stretchen_laufen/">Stretchen_laufen</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/system-optimierung/">System Optimierung – nächste Schritte</a></h2>
|
||||
<p>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. …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/tinydb_vs_sqlite/">Vergleich: TinyDB vs. SQLite</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/willkommen/">Willkommen bei Hugo Docker</a></h2>
|
||||
<p>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 …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/yubikey_setup_guide/">YubiKey-Einrichtung unter Manjaro Sway</a></h2>
|
||||
<p>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: …</p>
|
||||
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<time>08.09.2026</time>
|
||||
<h2><a href="/networkconfig_dns/">Zusammenfassung der vorgenommenen Änderungen und Konfigurationen</a></h2>
|
||||
<p>Zusammenfassung der vorgenommenen Änderungen und Konfigurationen Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir besprochen und durchgeführt haben.
|
||||
1. Python …</p>
|
||||
|
||||
</article>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Hugo Docker CMS</title>
|
||||
<link>https://localhost:1313/</link>
|
||||
<description>Markdown-Dateien einfach in content/ ablegen.</description>
|
||||
<generator>Hugo 0.165.0</generator>
|
||||
<language>de</language>
|
||||
<lastBuildDate>Tue, 08 Sep 2026 08:07:00 +0000</lastBuildDate>
|
||||
<atom:link href="https://localhost:1313/index.xml" rel="self" type="application/rss+xml"/>
|
||||
|
||||
<item>
|
||||
<title>Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen</title>
|
||||
<link>https://localhost:1313/ver_next_einbinden/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/ver_next_einbinden/</guid>
|
||||
<description>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. …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>blueray_install_manjaro</title>
|
||||
<link>https://localhost:1313/blueray_install_manjaro/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/blueray_install_manjaro/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Calcurse Tastenkürzel (Zusammenfassung)</title>
|
||||
<link>https://localhost:1313/calcurse_tastenk%C3%BCrzel/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/calcurse_tastenk%C3%BCrzel/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Empfehlungen für AstroVim</title>
|
||||
<link>https://localhost:1313/astro-vim-recommendations/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/astro-vim-recommendations/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Lazygit – Der Terminal-Git-Client</title>
|
||||
<link>https://localhost:1313/lazygit/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/lazygit/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Python String-Präfixe</title>
|
||||
<link>https://localhost:1313/string_prefixes/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/string_prefixes/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>qutebrowser Installation (Wayland / Sway)</title>
|
||||
<link>https://localhost:1313/install_browser/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/install_browser/</guid>
|
||||
<description>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. …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Rundeck und AWX Installation mit Docker</title>
|
||||
<link>https://localhost:1313/awx_und_rundeck_install/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/awx_und_rundeck_install/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Stretchen_laufen</title>
|
||||
<link>https://localhost:1313/stretchen_laufen/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/stretchen_laufen/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>System Optimierung – nächste Schritte</title>
|
||||
<link>https://localhost:1313/system-optimierung/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/system-optimierung/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Vergleich: TinyDB vs. SQLite</title>
|
||||
<link>https://localhost:1313/tinydb_vs_sqlite/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/tinydb_vs_sqlite/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Willkommen bei Hugo Docker</title>
|
||||
<link>https://localhost:1313/willkommen/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/willkommen/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>YubiKey-Einrichtung unter Manjaro Sway</title>
|
||||
<link>https://localhost:1313/yubikey_setup_guide/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/yubikey_setup_guide/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Zusammenfassung der vorgenommenen Änderungen und Konfigurationen</title>
|
||||
<link>https://localhost:1313/networkconfig_dns/</link>
|
||||
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
|
||||
<guid>https://localhost:1313/networkconfig_dns/</guid>
|
||||
<description>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 …</description>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,255 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>qutebrowser Installation (Wayland / Sway) – Hugo Docker CMS</title>
|
||||
<meta name="description" content="qutebrowser Installation (Wayland / Sway) Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine (Chromium/Blink-Engine). Kein Fork, …">
|
||||
|
||||
|
||||
<meta property="og:title" content="qutebrowser Installation (Wayland / Sway) – Hugo Docker CMS">
|
||||
<meta property="og:description" content="qutebrowser Installation (Wayland / Sway) Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine (Chromium/Blink-Engine). Kein Fork, …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/install_browser/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>qutebrowser Installation (Wayland / Sway)</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#1-basis-installation">1. Basis-Installation</a></li>
|
||||
<li><a href="#2-video-hardwarebeschleunigung-vaapi">2. Video-Hardwarebeschleunigung (VAAPI)</a></li>
|
||||
<li><a href="#3-drm--widevine-netflix-prime-spotify-">3. DRM / Widevine (Netflix, Prime, Spotify …)</a></li>
|
||||
<li><a href="#4-wayland-nativ-starten">4. Wayland-nativ starten</a></li>
|
||||
<li><a href="#5-adblock--datenschutz">5. Adblock & Datenschutz</a></li>
|
||||
<li><a href="#6-minimale-beispiel-konfiguration">6. Minimale Beispiel-Konfiguration</a></li>
|
||||
<li><a href="#7-wichtigste-tastenkürzel">7. Wichtigste Tastenkürzel</a></li>
|
||||
<li><a href="#8-alternativen-im-überblick-schnell--sicher-auf-sway">8. Alternativen im Überblick (schnell & sicher auf Sway)</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="qutebrowser-installation-wayland--sway">qutebrowser Installation (Wayland / Sway)</h1>
|
||||
<p>Tastaturgesteuerter, vim-artiger Browser auf Basis von Python + QtWebEngine
|
||||
(Chromium/Blink-Engine). Kein Fork, sondern eigenständig.</p>
|
||||
<p>Hinweis: qutebrowser liegt im offiziellen Repo (<code>extra</code>), nicht im AUR.</p>
|
||||
<hr>
|
||||
<h2 id="1-basis-installation">1. Basis-Installation</h2>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S qutebrowser
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="2-video-hardwarebeschleunigung-vaapi">2. Video-Hardwarebeschleunigung (VAAPI)</h2>
|
||||
<p>Deine GPU: Intel Iris Xe (TigerLake). Dafür brauchst du den Intel-Media-Driver
|
||||
und die VAAPI-Utils zum Prüfen:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S intel-media-driver libva-utils
|
||||
</span></span></code></pre></div><p>Testen ob VAAPI läuft:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">vainfo
|
||||
</span></span></code></pre></div><p>Erwartete Ausgabe: eine Liste mit Profilen (H264, HEVC/VP9-Decoding etc.).
|
||||
Falls leer oder Fehler -> Treiberproblem.</p>
|
||||
<p>In qutebrowser aktivieren (<code>:set</code> oder in <code>~/.config/qutebrowser/config.py</code>):</p>
|
||||
<pre tabindex="0"><code>qt.args:
|
||||
- ignore-gpu-blocklist
|
||||
- enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL
|
||||
- enable-accelerated-video-decode
|
||||
</code></pre><hr>
|
||||
<h2 id="3-drm--widevine-netflix-prime-spotify-">3. DRM / Widevine (Netflix, Prime, Spotify …)</h2>
|
||||
<p>Widevine ist proprietär und nicht im offiziellen Repo. Das AUR-Paket
|
||||
<code>chromium-widevine</code> stellt das Widevine-CDM (<code>libwidevinecdm.so</code>) bereit:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">yay -S chromium-widevine
|
||||
</span></span></code></pre></div><p>Das Paket legt die Bibliothek ab unter:</p>
|
||||
<pre tabindex="0"><code>/usr/lib/chromium/libwidevinecdm.so
|
||||
</code></pre><p>Pfad in qutebrowser bekannt machen (in <code>config.py</code>):</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">qt</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"widevine-path=/usr/lib/chromium/libwidevinecdm.so"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"ignore-gpu-blocklist"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"enable-features=VaapiVideoDecoder"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="p">]</span>
|
||||
</span></span></code></pre></div><p>Danach qutebrowser neu starten und prüfen:</p>
|
||||
<pre tabindex="0"><code>:version
|
||||
</code></pre><p>Dort sollte Widevine aufgelistet sein. Prüfseite: <a href="https://bitmovin.com/demos/drm">https://bitmovin.com/demos/drm</a></p>
|
||||
<p>Wichtige Einschränkung: Widevine unter Linux liefert maximal <strong>1080p</strong> (L3-Lizenz).
|
||||
4K-Streaming geht auf Linux nur mit Microsoft Edge oder Safari/macOS.</p>
|
||||
<hr>
|
||||
<h2 id="4-wayland-nativ-starten">4. Wayland-nativ starten</h2>
|
||||
<p>Sway ist Wayland, also qutebrowser nativ (ohne XWayland) laufen lassen:</p>
|
||||
<pre tabindex="0"><code>:set qt.args
|
||||
</code></pre><p>oder in <code>config.py</code>:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">qt</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"widevine-path=..."</span><span class="p">]</span>
|
||||
</span></span></code></pre></div><p>Standardmäßig nutzt qutebrowser unter Sway bereits Wayland. Prüfen:</p>
|
||||
<pre tabindex="0"><code>:version
|
||||
</code></pre><p>Unter “Qt” sollte <code>wayland</code> als Platform stehen (nicht <code>xcb</code>).</p>
|
||||
<hr>
|
||||
<h2 id="5-adblock--datenschutz">5. Adblock & Datenschutz</h2>
|
||||
<p>qutebrowser hat einen eingebauten Host-Datei-Adblocker. Listen aktualisieren:</p>
|
||||
<pre tabindex="0"><code>:adblock-update
|
||||
</code></pre><p>Für besseren Schutz in <code>config.py</code>:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Standard-User-Agent abschalten (weniger Fingerprinting)</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">user_agent</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># DNT / Tracking-Opt-out</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">do_not_track</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="6-minimale-beispiel-konfiguration">6. Minimale Beispiel-Konfiguration</h2>
|
||||
<p>Datei: <code>~/.config/qutebrowser/config.py</code></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># DRM + Video-Hardwarebeschleunigung</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">qt</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"widevine-path=/usr/lib/chromium/libwidevinecdm.so"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"ignore-gpu-blocklist"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"enable-features=VaapiVideoDecoder,VaapiVideoDecodeLinuxGL"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="p">]</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Startseite</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">start_pages</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"https://duckduckgo.com"</span><span class="p">]</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Adblock-Listen</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">blocking</span><span class="o">.</span><span class="n">enabled</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">blocking</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="s2">"both"</span> <span class="c1"># hosts + adblock</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">blocking</span><span class="o">.</span><span class="n">hosts</span><span class="o">.</span><span class="n">lists</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="p">]</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Tabs / Verhalten</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">tabs</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="s2">"top"</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">c</span><span class="o">.</span><span class="n">confirm_quit</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"downloads"</span><span class="p">]</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Tastatur: h/j/k/l Navigation (bereits Standard bei qutebrowser)</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="7-wichtigste-tastenkürzel">7. Wichtigste Tastenkürzel</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>:</code></td>
|
||||
<td>Befehlszeile</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>o</code></td>
|
||||
<td>URL öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>O</code></td>
|
||||
<td>URL in neuem Tab öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>f</code></td>
|
||||
<td>Links per Buchstabenkürzel anklicken</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>H</code> / <code>L</code></td>
|
||||
<td>Zurück / Vor</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>j</code> / <code>k</code></td>
|
||||
<td>Nach unten / oben scrollen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>gg</code> / <code>G</code></td>
|
||||
<td>Seitenanfang / -ende</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>J</code> / <code>K</code></td>
|
||||
<td>Nächster / vorheriger Tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code> / <code>u</code></td>
|
||||
<td>Tab schließen / wieder öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/</code></td>
|
||||
<td>Suche auf Seite</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>n</code> / <code>N</code></td>
|
||||
<td>Nächstes / vorheriges Suchergebnis</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>yy</code></td>
|
||||
<td>URL in Zwischenablage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ZZ</code></td>
|
||||
<td>qutebrowser beenden</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="8-alternativen-im-überblick-schnell--sicher-auf-sway">8. Alternativen im Überblick (schnell & sicher auf Sway)</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Browser</th>
|
||||
<th>Engine</th>
|
||||
<th>Install</th>
|
||||
<th>Anmerkung</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>qutebrowser</td>
|
||||
<td>Blink (Qt)</td>
|
||||
<td><code>sudo pacman -S qutebrowser</code></td>
|
||||
<td>Tastatur-only, ideal für Tiling</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>LibreWolf</td>
|
||||
<td>Gecko (Firefox)</td>
|
||||
<td><code>yay -S librewolf-bin</code></td>
|
||||
<td>Firefox ohne Telemetrie, +uBlock</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ungoogled-chromium</td>
|
||||
<td>Blink</td>
|
||||
<td><code>yay -S ungoogled-chromium-bin</code></td>
|
||||
<td>Chromium ohne Google</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brave</td>
|
||||
<td>Blink</td>
|
||||
<td><code>yay -S brave-bin</code></td>
|
||||
<td>Built-in Werbeblocker</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Für 4K-Streaming + Extensions: Brave. Für maximalen Datenschutz: LibreWolf.
|
||||
Für reine Tastatur-Steuerung im Tiling-WM: qutebrowser.</p>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,669 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Lazygit – Der Terminal-Git-Client – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Lazygit – Der Terminal-Git-Client Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User Interface). Du steuerst alles per Tastatur und …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Lazygit – Der Terminal-Git-Client – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Lazygit – Der Terminal-Git-Client Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User Interface). Du steuerst alles per Tastatur und …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/lazygit/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Lazygit – Der Terminal-Git-Client</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#installation">Installation</a></li>
|
||||
<li><a href="#navigation-global">Navigation (global)</a></li>
|
||||
<li><a href="#panel-1-status-ganz-links">Panel 1: Status (ganz links)</a></li>
|
||||
<li><a href="#panel-2-dateien--working-tree">Panel 2: Dateien / Working Tree</a>
|
||||
<ul>
|
||||
<li><a href="#patch-modus-p">Patch-Modus (<code>p</code>)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#panel-3-branches">Panel 3: Branches</a></li>
|
||||
<li><a href="#panel-4-commits-im-branch-panel-mit-enter">Panel 4: Commits (im Branch-Panel mit Enter)</a></li>
|
||||
<li><a href="#panel-5-stash">Panel 5: Stash</a></li>
|
||||
<li><a href="#reflog">Reflog</a></li>
|
||||
<li><a href="#remote--push--pull">Remote / Push & Pull</a></li>
|
||||
<li><a href="#undo--redo">Undo / Redo</a></li>
|
||||
<li><a href="#konflikte-lösen">Konflikte lösen</a></li>
|
||||
<li><a href="#submodule">Submodule</a></li>
|
||||
<li><a href="#worktrees">Worktrees</a></li>
|
||||
<li><a href="#tipps--häufige-workflows">Tipps & häufige Workflows</a>
|
||||
<ul>
|
||||
<li><a href="#änderungen-committen">Änderungen committen</a></li>
|
||||
<li><a href="#letzten-commit-ändern-amend">Letzten Commit ändern (amend)</a></li>
|
||||
<li><a href="#branch-erstellen-und-wechseln">Branch erstellen und wechseln</a></li>
|
||||
<li><a href="#commits-zusammenfassen-squash">Commits zusammenfassen (squash)</a></li>
|
||||
<li><a href="#commit-rückgängig-machen">Commit rückgängig machen</a></li>
|
||||
<li><a href="#interaktives-rebase">Interaktives Rebase</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#konfiguration">Konfiguration</a></li>
|
||||
<li><a href="#fazit">Fazit</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="lazygit--der-terminal-git-client">Lazygit – Der Terminal-Git-Client</h1>
|
||||
<p>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 <code>git</code>-Befehlen mehr.</p>
|
||||
<h2 id="installation">Installation</h2>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Arch / Manjaro</span>
|
||||
</span></span><span class="line"><span class="cl">sudo pacman -S lazygit
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Ubuntu / Debian</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="nv">LAZYGIT_VERSION</span><span class="o">=</span><span class="k">$(</span>curl -s <span class="s2">"https://api.github.com/repos/jesseduffield/lazygit/releases/latest"</span> <span class="p">|</span> grep -Po <span class="s1">'"tag_name": "v\K[^"]*'</span><span class="k">)</span>
|
||||
</span></span><span class="line"><span class="cl">curl -Lo lazygit.tar.gz <span class="s2">"https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_</span><span class="si">${</span><span class="nv">LAZYGIT_VERSION</span><span class="si">}</span><span class="s2">_Linux_x86_64.tar.gz"</span>
|
||||
</span></span><span class="line"><span class="cl">tar xf lazygit.tar.gz lazygit
|
||||
</span></span><span class="line"><span class="cl">sudo install lazygit /usr/local/bin
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># macOS</span>
|
||||
</span></span><span class="line"><span class="cl">brew install lazygit
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Windows (mit Winget)</span>
|
||||
</span></span><span class="line"><span class="cl">winget install JesseDuffield.lazygit
|
||||
</span></span></code></pre></div><p>Start: Einfach <code>lazygit</code> im Repository-Verzeichnis ausführen.</p>
|
||||
<hr>
|
||||
<h2 id="navigation-global">Navigation (global)</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>h</code> / <code>l</code></td>
|
||||
<td>Zwischen Panels wechseln (links/rechts)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>j</code> / <code>k</code></td>
|
||||
<td>In Liste nach unten/oben</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>↑</code> / <code>↓</code></td>
|
||||
<td>Dasselbe wie j/k</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code></td>
|
||||
<td>Zum Anfang der Liste</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+G</code></td>
|
||||
<td>Zum Ende der Liste</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/</code></td>
|
||||
<td>Suchen (im aktuellen Panel)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>q</code></td>
|
||||
<td>Lazygit beenden</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>esc</code></td>
|
||||
<td>Zurück / Aktion abbrechen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>?</code></td>
|
||||
<td>Hilfe anzeigen (alle Tasten)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>tab</code></td>
|
||||
<td>In neuem Panel: zwischen Bereichen springen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="panel-1-status-ganz-links">Panel 1: Status (ganz links)</h2>
|
||||
<p>Zeigt, ob du im normalen Modus, im Rebase, Merge-Konflikt etc. bist.
|
||||
Normalerweise springst du mit <code>1</code>-<code>5</code> direkt in die anderen Panels.</p>
|
||||
<hr>
|
||||
<h2 id="panel-2-dateien--working-tree">Panel 2: Dateien / Working Tree</h2>
|
||||
<p>Hier siehst du alle geänderten, neuen und gelöschten Dateien.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Datei stagen/unstagen (markiert)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>a</code></td>
|
||||
<td>Alle Dateien stagen/unstagen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>c</code></td>
|
||||
<td>Commit erstellen (öffnet Editor für Commit-Message)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+C</code></td>
|
||||
<td>Commit mit Editor (git commit)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>Diff der ausgewählten Datei anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code></td>
|
||||
<td>Änderungen der Datei verwerfen (Achtung, unwiderruflich!)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+D</code></td>
|
||||
<td>Datei aus Working Tree löschen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>e</code></td>
|
||||
<td>Datei im Editor öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>o</code></td>
|
||||
<td>Datei mit Standardprogramm öffnen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>i</code></td>
|
||||
<td>Datei zu .gitignore hinzufügen / Eintrag entfernen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>p</code></td>
|
||||
<td>Patch – interaktiv nur Teile einer Datei stagen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="patch-modus-p">Patch-Modus (<code>p</code>)</h3>
|
||||
<p>Nach Drücken von <code>p</code> auf einer Datei:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Aktuellen Hunks stagen/unstagen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>j</code> / <code>k</code></td>
|
||||
<td>Zwischen Hunks navigieren</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>v</code></td>
|
||||
<td>Selektionsmodus (visuell) – dann Leertaste für Auswahl</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>tab</code></td>
|
||||
<td>In Diff-Fenster springen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="panel-3-branches">Panel 3: Branches</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Branch auschecken</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>n</code></td>
|
||||
<td>Neuen Branch erstellen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>c</code></td>
|
||||
<td>Branch mit Namen umbenennen (checkout)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+C</code></td>
|
||||
<td>Branch umbenennen (ohne checkout)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code></td>
|
||||
<td>Branch löschen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+D</code></td>
|
||||
<td>Branch force-löschen (auch wenn nicht gemerged)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>m</code></td>
|
||||
<td>Aktuellen Branch in ausgewählten Branch mergen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M</code></td>
|
||||
<td>Merge ohne Fast-Forward</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>Commits des Branches anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>r</code></td>
|
||||
<td>Branch rebasen auf ausgewählten Branch</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>f</code></td>
|
||||
<td>Fast-Forward des ausgewählten Branches</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>T</code></td>
|
||||
<td>Tag erstellen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code></td>
|
||||
<td>Branch zurücksetzen (reset) auf ausgewählten</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="panel-4-commits-im-branch-panel-mit-enter">Panel 4: Commits (im Branch-Panel mit Enter)</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>s</code></td>
|
||||
<td>Squash down – Commit in den darunterliegenden squashen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+S</code></td>
|
||||
<td>Fixup – Commit in darunterliegenden squashen, Message verwerfen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>r</code></td>
|
||||
<td>Rebase auf diesen Commit starten / Rebase fortsetzen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>R</code></td>
|
||||
<td>Commit-Message mit <code>git commit --amend</code> bearbeiten</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>A</code></td>
|
||||
<td>Commit mit Staged-Änderungen amendend (git commit –amend)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>t</code></td>
|
||||
<td>Commit rückgängig machen (revert)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+T</code></td>
|
||||
<td>Revert erstellen, ohne zu commiten</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ctrl+j</code> / <code>ctrl+k</code></td>
|
||||
<td>Commit in der Liste nach unten/oben verschieben (interaktiv)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code></td>
|
||||
<td>Reset auf diesen Commit – Optionen:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><code>soft</code> – HEAD verschieben, Index bleibt</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><code>mixed</code> (default) – HEAD + Index verschieben</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><code>hard</code> – HEAD + Index + Working Tree (Achtung, verwirft!)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code></td>
|
||||
<td>Commit löschen (während Rebase)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+D</code></td>
|
||||
<td>Commits ab hier löschen (während Rebase)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>f</code></td>
|
||||
<td>Fixup-Commit erstellen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+F</code></td>
|
||||
<td>Fixup-Commit für einen bestimmten Commit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>Dateien des Commits anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ctrl+l</code></td>
|
||||
<td>Commit-Log anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+C</code></td>
|
||||
<td>Commit kopieren (cherry-pick)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>v</code></td>
|
||||
<td>Commits in die Zwischenablage kopieren</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="panel-5-stash">Panel 5: Stash</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Stash anwenden</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code></td>
|
||||
<td>Stash anwenden und danach löschen (pop)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code></td>
|
||||
<td>Stash löschen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>Dateien des Stashs anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>n</code></td>
|
||||
<td>Neuen Stash mit Nachricht erstellen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>s</code></td>
|
||||
<td>Schnell-Stash (ohne Nachricht)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="reflog">Reflog</h2>
|
||||
<p>Mit <code>ctrl+o</code> (oder im Commits-Panel) öffnest du das Reflog – alle HEAD-Bewegungen.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>Reflog-Eintrag anzeigen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>g</code></td>
|
||||
<td>Auf diesen Eintrag zurücksetzen (soft/mixed/hard)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ctrl+o</code></td>
|
||||
<td>Reflog schließen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="remote--push--pull">Remote / Push & Pull</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>p</code></td>
|
||||
<td>Push (im Branch- oder Commits-Panel)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+P</code></td>
|
||||
<td>Force-Push (<code>--force-with-lease</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+F</code></td>
|
||||
<td>Fetch (alle Remotes)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>ctrl+p</code></td>
|
||||
<td>Pull (fetch + merge)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+ctrl+P</code></td>
|
||||
<td>Pull mit Rebase</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="undo--redo">Undo / Redo</h2>
|
||||
<p>Lazygit hat eine eingebaute Undo-Funktion – ein Lebensretter!</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>z</code></td>
|
||||
<td>Letzte Git-Aktion rückgängig machen (undo)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+Z</code></td>
|
||||
<td>Rückgängig gemachte Aktion wiederholen (redo)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Funktioniert für: Commit, Stash, Branch-Reset, Checkout, Cherry-Pick, Revert,
|
||||
Merge …</p>
|
||||
<hr>
|
||||
<h2 id="konflikte-lösen">Konflikte lösen</h2>
|
||||
<p>Im Merge-Konflikt-Fall zeigt Lazygit die betroffenen Dateien.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Datei als “ours” markieren (eigene Version)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>b</code></td>
|
||||
<td>Datei als “theirs” markieren (fremde Version)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>↑</code> / <code>↓</code></td>
|
||||
<td>Hunk auswählen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Leertaste</code></td>
|
||||
<td>Hunk auswählen (ours/theirs oder beide)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>a</code></td>
|
||||
<td>Alle Hunks auf einmal akzeptieren</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>shift+M</code></td>
|
||||
<td>Merge-Tool für diese Datei öffnen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="submodule">Submodule</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>In Submodule wechseln (öffnet neue Lazygit-Instanz)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>i</code></td>
|
||||
<td>Submodule init</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>u</code></td>
|
||||
<td>Submodule updaten</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>n</code></td>
|
||||
<td>Submodule hinzufügen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="worktrees">Worktrees</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Taste</th>
|
||||
<th>Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>n</code></td>
|
||||
<td>Neues Worktree erstellen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>enter</code></td>
|
||||
<td>In Worktree wechseln</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>d</code></td>
|
||||
<td>Worktree löschen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="tipps--häufige-workflows">Tipps & häufige Workflows</h2>
|
||||
<h3 id="änderungen-committen">Änderungen committen</h3>
|
||||
<pre tabindex="0"><code>1. j/k → Datei auswählen
|
||||
2. Leertaste → Stagen
|
||||
3. c → Commit-Message schreiben, Enter
|
||||
4. p → Pushen
|
||||
</code></pre><h3 id="letzten-commit-ändern-amend">Letzten Commit ändern (amend)</h3>
|
||||
<pre tabindex="0"><code>1. a → Alle Dateien stagen
|
||||
2. shift+A → Amend (fügt Staged-Änderungen zum letzten Commit hinzu)
|
||||
</code></pre><h3 id="branch-erstellen-und-wechseln">Branch erstellen und wechseln</h3>
|
||||
<pre tabindex="0"><code>1. 3 → Branch-Panel
|
||||
2. n → Neuen Branch, Namen eingeben, Enter
|
||||
</code></pre><h3 id="commits-zusammenfassen-squash">Commits zusammenfassen (squash)</h3>
|
||||
<pre tabindex="0"><code>1. 4 → Commits-Panel
|
||||
2. j/k → Commit auswählen (der, der in den darunterliegenden gesquasht werden soll)
|
||||
3. s → Squash
|
||||
</code></pre><h3 id="commit-rückgängig-machen">Commit rückgängig machen</h3>
|
||||
<pre tabindex="0"><code>1. 4 → Commits-Panel
|
||||
2. g → "reset"
|
||||
3. soft → HEAD verschieben, Änderungen bleiben im Index
|
||||
</code></pre><p>Falls du es dir anders überlegst: <code>z</code> (undo).</p>
|
||||
<h3 id="interaktives-rebase">Interaktives Rebase</h3>
|
||||
<pre tabindex="0"><code>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
|
||||
</code></pre><hr>
|
||||
<h2 id="konfiguration">Konfiguration</h2>
|
||||
<p>Die Konfigurationsdatei liegt unter:</p>
|
||||
<ul>
|
||||
<li>Linux/macOS: <code>~/.config/lazygit/config.yml</code></li>
|
||||
<li>Windows: <code>%APPDATA%/lazygit/config.yml</code></li>
|
||||
</ul>
|
||||
<p>Beispiel für ein nützliches Config-Snippet:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">gui</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">theme</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">activeBorderColor</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">'#89b4fa'</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">bold</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">inactiveBorderColor</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">'#a6adc8'</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nerdFontsVersion</span><span class="p">:</span><span class="w"> </span><span class="s2">"3"</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="nt">git</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">paging</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">colorArg</span><span class="p">:</span><span class="w"> </span><span class="l">always</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pager</span><span class="p">:</span><span class="w"> </span><span class="l">delta --dark --paging=never</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Commit-Konvention für Merge-Commits</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commitPrefixes</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">my_project</span><span class="p">:</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pattern</span><span class="p">:</span><span class="w"> </span><span class="s2">"^(\\w+\\/\\w+-\\d+)"</span><span class="w">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replace</span><span class="p">:</span><span class="w"> </span><span class="s2">"[$1] "</span><span class="w">
|
||||
</span></span></span></code></pre></div><hr>
|
||||
<h2 id="fazit">Fazit</h2>
|
||||
<p>Lazygit macht Git massiv schneller: Du siehst Diff, Branches, Commits und
|
||||
Stashes gleichzeitig, stagen mit Leertaste, commiten mit <code>c</code>, pushen mit <code>p</code>.
|
||||
Kein <code>git status</code>-Tippen mehr, kein <code>git log --oneline</code>-Starren.</p>
|
||||
<p>Die beiden wichtigsten Tasten: <code>z</code> für Undo und <code>?</code> für Hilfe.</p>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,214 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Zusammenfassung der vorgenommenen Änderungen und Konfigurationen – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Zusammenfassung der vorgenommenen Änderungen und Konfigurationen Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Zusammenfassung der vorgenommenen Änderungen und Konfigurationen – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Zusammenfassung der vorgenommenen Änderungen und Konfigurationen Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/networkconfig_dns/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Zusammenfassung der vorgenommenen Änderungen und Konfigurationen</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#1-python-logging-syncpy-und-logging_configpy">1. Python Logging (sync.py und logging_config.py)</a>
|
||||
<ul>
|
||||
<li><a href="#logging_configpy-erstellt"><code>logging_config.py</code> erstellt</a></li>
|
||||
<li><a href="#syncpy-angepasst"><code>sync.py</code> angepasst</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#2-dns-konfiguration-auf-dem-manjaro-system">2. DNS-Konfiguration auf dem Manjaro-System</a>
|
||||
<ul>
|
||||
<li><a href="#globale-systemd-resolved-konfiguration">Globale <code>systemd-resolved</code> Konfiguration</a></li>
|
||||
<li><a href="#networkmanager-überschreibung-für-alle-verbindungen">NetworkManager Überschreibung für alle Verbindungen</a></li>
|
||||
<li><a href="#anpassung-des-spezifischen-wlan-profils-sweethome-5g">Anpassung des spezifischen WLAN-Profils (SweetHome-5G)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#3-adguard-home-konfiguration">3. AdGuard Home Konfiguration</a>
|
||||
<ul>
|
||||
<li><a href="#installation--ssl-einrichtung">Installation & SSL-Einrichtung</a></li>
|
||||
<li><a href="#bedingte-weiterleitung-für-lokale-namen">Bedingte Weiterleitung für lokale Namen</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#4-problembehebung-wireguard-dns">4. Problembehebung WireGuard DNS</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="zusammenfassung-der-vorgenommenen-änderungen-und-konfigurationen">Zusammenfassung der vorgenommenen Änderungen und Konfigurationen</h1>
|
||||
<p>Dieses Dokument fasst die wichtigsten Änderungen und Konfigurationen zusammen, die wir besprochen und durchgeführt haben.</p>
|
||||
<hr>
|
||||
<h2 id="1-python-logging-syncpy-und-logging_configpy">1. Python Logging (sync.py und logging_config.py)</h2>
|
||||
<p>Um die Log-Ausgabe des <code>sync.py</code>-Skripts zu verbessern, wurde eine modulare Logging-Konfiguration mit Log-Rotation erstellt und in eine separate Datei ausgelagert.</p>
|
||||
<h3 id="logging_configpy-erstellt"><code>logging_config.py</code> erstellt</h3>
|
||||
<p><strong>Zweck:</strong> Enthält die Funktion <code>setup_logging()</code> zur Konfiguration eines Root-Loggers, der Logs in eine Datei (<code>sync_log.log</code>) schreibt, diese bei Erreichen einer Größe von 5 MB rotiert und 5 Backups behält. Optional kann auch ein Konsolen-Logger aktiviert werden.</p>
|
||||
<p><strong>Inhalt der Datei (<code>/home/jonnybravo/Projekte/python_tests/rclone/logging_config.py</code>):</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">logging</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">logging.handlers</span> <span class="kn">import</span> <span class="n">RotatingFileHandler</span><span class="p">,</span> <span class="n">TimedRotatingFileHandler</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">setup_logging</span><span class="p">(</span><span class="n">console_logging</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="s2">"""Konfiguriert das Root-Logging für die Anwendung mit Rotation.
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2"> Diese Funktion richtet einen Root-Logger ein, der Log-Nachrichten in eine Datei schreibt,
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2"> welche bei Erreichen einer bestimmten Größe rotiert wird.
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2">
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2"> :param console_logging: Wenn True, werden Logs zusätzlich zur Datei auch auf der Konsole ausgegeben.
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2"> Standardmäßig ist dies deaktiviert (False).
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Allgemeine Einstellungen ---</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">log_file</span> <span class="o">=</span> <span class="s2">"sync_log.log"</span> <span class="c1"># Name der Log-Datei</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># Maximale Größe der Log-Datei in Bytes, bevor sie rotiert wird (hier 5 MB)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">max_log_size</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># Anzahl der rotierenden Backup-Dateien, die behalten werden sollen (hier 5)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">backup_count</span> <span class="o">=</span> <span class="mi">5</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Logger-Initialisierung ---</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">()</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">hasHandlers</span><span class="p">():</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Logging-Level einstellen ---</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># Mögliche Levels: DEBUG, INFO, WARNING, ERROR, CRITICAL</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Formatter erstellen ---</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># Definiert das Layout der Log-Nachrichten.</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s1">'</span><span class="si">%(asctime)s</span><span class="s1"> - </span><span class="si">%(levelname)s</span><span class="s1"> - </span><span class="si">%(message)s</span><span class="s1">'</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Handler erstellen und dem Logger hinzufügen ---</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># 1. RotatingFileHandler (immer aktiv)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">file_handler</span> <span class="o">=</span> <span class="n">RotatingFileHandler</span><span class="p">(</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">log_file</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">maxBytes</span><span class="o">=</span><span class="n">max_log_size</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">backupCount</span><span class="o">=</span><span class="n">backup_count</span><span class="p">,</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">encoding</span><span class="o">=</span><span class="s1">'utf-8'</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">file_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">formatter</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">file_handler</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># 2. StreamHandler für Konsolen-Ausgabe (optional)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">console_logging</span><span class="p">:</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">console_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">StreamHandler</span><span class="p">()</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">console_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">formatter</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">console_handler</span><span class="p">)</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># --- Weitere Referenzen und alternative Handler ---</span>
|
||||
</span></span><span class="line"><span class="cl"> <span class="c1"># (Ausführliche Kommentare sind in der Datei enthalten, hier gekürzt)</span>
|
||||
</span></span></code></pre></div><h3 id="syncpy-angepasst"><code>sync.py</code> angepasst</h3>
|
||||
<p><strong>Zweck:</strong> Importiert die <code>setup_logging</code>-Funktion und ruft sie ganz am Anfang des Skripts auf, um die Logging-Konfiguration zu initialisieren.</p>
|
||||
<p><strong>Relevanten Änderungen in <code>/home/jonnybravo/Projekte/python_tests/rclone/sync.py</code>:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">logging_config</span> <span class="kn">import</span> <span class="n">setup_logging</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Logging so früh wie möglich einrichten</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="n">setup_logging</span><span class="p">()</span> <span class="c1"># Optional: setup_logging(console_logging=True) für Konsolen-Logs</span>
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">rclone_python</span> <span class="kn">import</span> <span class="n">rclone</span> <span class="k">as</span> <span class="n">rc</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">rclone_python.utils</span> <span class="kn">import</span> <span class="n">RcloneException</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">logging</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># ... (restlicher Code)</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="2-dns-konfiguration-auf-dem-manjaro-system">2. DNS-Konfiguration auf dem Manjaro-System</h2>
|
||||
<p>Um den AdGuard Home-Server <code>10.50.0.3</code> als primären DNS-Server für das gesamte System und alle Verbindungen zu nutzen, wurden folgende Schritte durchgeführt:</p>
|
||||
<h3 id="globale-systemd-resolved-konfiguration">Globale <code>systemd-resolved</code> Konfiguration</h3>
|
||||
<p><strong>Zweck:</strong> Setzt <code>10.50.0.3</code> als systemweiten DNS-Server für <code>systemd-resolved</code>.</p>
|
||||
<p><strong>Änderungen in <code>/etc/systemd/resolved.conf</code>:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="k">[Resolve]</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="na">DNS</span><span class="o">=</span><span class="s">10.50.0.3</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># FallbackDNS= # Auskommentieren oder auf FallbackDNS= setzen, um Fallback zu verhindern</span>
|
||||
</span></span></code></pre></div><p>Nach der Bearbeitung: <code>sudo systemctl restart systemd-resolved</code></p>
|
||||
<h3 id="networkmanager-überschreibung-für-alle-verbindungen">NetworkManager Überschreibung für alle Verbindungen</h3>
|
||||
<p><strong>Zweck:</strong> Weist NetworkManager an, bei allen Netzwerkverbindungen (bestehende und neue) den vom DHCP-Server angebotenen DNS zu ignorieren. Dadurch wird der globale DNS von <code>systemd-resolved</code> verwendet.</p>
|
||||
<p><strong>Neue Datei erstellt: <code>/etc/NetworkManager/conf.d/99-global-dns-override.conf</code></strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="k">[connection]</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Diese Einstellung gilt für alle neuen und bestehenden Verbindungen.</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Sie weist NetworkManager an, den DNS-Server vom DHCP zu ignorieren.</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="na">ipv4.ignore-auto-dns</span><span class="o">=</span><span class="s">true</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="na">ipv6.ignore-auto-dns</span><span class="o">=</span><span class="s">true</span>
|
||||
</span></span></code></pre></div><p>Nach der Erstellung: <code>sudo systemctl restart NetworkManager</code></p>
|
||||
<h3 id="anpassung-des-spezifischen-wlan-profils-sweethome-5g">Anpassung des spezifischen WLAN-Profils (SweetHome-5G)</h3>
|
||||
<p><strong>Zweck:</strong> Hinzufügen der DNS-Suchdomäne, damit lokale Hostnamen ohne vollen Domain-Namen aufgelöst werden können.</p>
|
||||
<p><strong>Befehle für die Kommandozeile (nmcli):</strong>
|
||||
(Ersetzen Sie “Ihr Verbindungsname” durch den tatsächlichen Namen, z.B. “SweetHome-5G”)</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nmcli connection modify <span class="s2">"Ihr Verbindungsname"</span> ipv4.dns-search <span class="s2">"speedport.ip"</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># optional für IPv6: nmcli connection modify "Ihr Verbindungsname" ipv6.dns-search "speedport.ip"</span>
|
||||
</span></span><span class="line"><span class="cl">nmcli connection up <span class="s2">"Ihr Verbindungsname"</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="3-adguard-home-konfiguration">3. AdGuard Home Konfiguration</h2>
|
||||
<h3 id="installation--ssl-einrichtung">Installation & SSL-Einrichtung</h3>
|
||||
<p><strong>Zweck:</strong> Installation von AdGuard Home auf einem Linux-Server und Absicherung der Weboberfläche mit einem selbstsignierten SSL-Zertifikat und eigener CA.</p>
|
||||
<p><strong>Schritte (ausführlich in vorherigen Antworten beschrieben):</strong></p>
|
||||
<ol>
|
||||
<li>AdGuard Home installieren (<code>curl ... install.sh</code>).</li>
|
||||
<li>Eigene CA (<code>MyCA.key</code>, <code>MyCA.pem</code>) und Server-Zertifikat (<code>adguard.key</code>, <code>adguard.crt</code>) mit <code>openssl</code> erstellen, inklusive SAN-Erweiterung für IP-Adresse/lokalen Hostnamen.</li>
|
||||
<li>Zertifikate in AdGuard Home (<code>adguard.crt</code>, <code>adguard.key</code>) unter <strong>Einstellungen → Verschlüsselungseinstellungen</strong> konfigurieren.</li>
|
||||
<li><code>MyCA.pem</code> auf Client-Geräten als vertrauenswürdige Stammzertifizierungsstelle installieren.</li>
|
||||
</ol>
|
||||
<h3 id="bedingte-weiterleitung-für-lokale-namen">Bedingte Weiterleitung für lokale Namen</h3>
|
||||
<p><strong>Zweck:</strong> Ermöglicht AdGuard Home die Auflösung lokaler Hostnamen durch Weiterleitung an den Router.</p>
|
||||
<p><strong>Konfiguration in der AdGuard Home Weboberfläche:</strong></p>
|
||||
<ol>
|
||||
<li>Gehen Sie zu <strong>Einstellungen → DNS-Einstellungen</strong>.</li>
|
||||
<li>Im Abschnitt <strong>“Upstream-DNS-Server”</strong> die folgende Zeile hinzufügen (zusätzlich zu öffentlichen DNS-Servern):
|
||||
<pre tabindex="0"><code>[/speedport.ip/]192.168.50.1
|
||||
</code></pre></li>
|
||||
<li>Einstellungen speichern.</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<h2 id="4-problembehebung-wireguard-dns">4. Problembehebung WireGuard DNS</h2>
|
||||
<p><strong>Zweck:</strong> Behebung des Konflikts, bei dem WireGuard die DNS-Einstellungen überschrieben und auf einen nicht existierenden Server (<code>10.50.0.3</code> ohne installierten DNS-Dienst) gezeigt hat.</p>
|
||||
<p><strong>Änderung in der WireGuard-Konfigurationsdatei:</strong></p>
|
||||
<ul>
|
||||
<li>In <code>/etc/wireguard/wg0.conf</code> (im Abschnitt <code>[Interface]</code>) die Zeile <code>DNS = 10.50.0.3</code> auskommentieren oder auf einen anderen DNS-Server ändern.
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="k">[Interface]</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># DNS = 10.50.0.3</span>
|
||||
</span></span></code></pre></div></li>
|
||||
<li>WireGuard neu starten: <code>sudo systemctl restart wg-quick@wg0</code> (oder <code>sudo wg-quick down wg0 && sudo wg-quick up wg0</code>).</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>https://localhost:1313/ver_next_einbinden/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/blueray_install_manjaro/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/calcurse_tastenk%C3%BCrzel/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/astro-vim-recommendations/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/lazygit/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/string_prefixes/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/install_browser/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/awx_und_rundeck_install/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/stretchen_laufen/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/system-optimierung/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/tinydb_vs_sqlite/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/willkommen/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/yubikey_setup_guide/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/networkconfig_dns/</loc>
|
||||
<lastmod>2026-09-08T00:00:00+00:00</lastmod>
|
||||
</url><url>
|
||||
<loc>https://localhost:1313/tags/</loc>
|
||||
</url>
|
||||
</urlset>
|
||||
@@ -0,0 +1,78 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Stretchen_laufen – Hugo Docker CMS</title>
|
||||
<meta name="description" content="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 …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Stretchen_laufen – Hugo Docker CMS">
|
||||
<meta property="og:description" content="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 …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/stretchen_laufen/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Stretchen_laufen</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents"></nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<p>Aufwärmen:
|
||||
10-15 Wh. 1-2 Sek.</p>
|
||||
<ol>
|
||||
<li>Zwillingswadenmuskel dehnen S166</li>
|
||||
<li>Zwillingswadenmuskel dehen S164</li>
|
||||
<li>Beste Dhenübung der Welt S140</li>
|
||||
<li>Girlanden-Haltung S126</li>
|
||||
<li>Hüftkreisen im Stehen S148</li>
|
||||
<li>Oberschenkelrückseite dynamisch dehen S163</li>
|
||||
</ol>
|
||||
<p>Einsteiger :
|
||||
10-15 Wh. 1-2 Sek.</p>
|
||||
<ol>
|
||||
<li>Katze - Kuh S74</li>
|
||||
<li>Quadrizeps dehnen im Stehen S156</li>
|
||||
<li>Oberschenkelrückseite statisch S160</li>
|
||||
<li>Hüftbeuger mithilfe eines Stuhles S137</li>
|
||||
<li>Zwillingswardenmuskel dehnen S166</li>
|
||||
<li>Hüftkreisen im Viertelfüser S150</li>
|
||||
<li>Oberschenkelrückseite S163</li>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,354 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Python String-Präfixe – Hugo Docker CMS</title>
|
||||
<meta name="description" content="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 …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Python String-Präfixe – Hugo Docker CMS">
|
||||
<meta property="og:description" content="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 …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/string_prefixes/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Python String-Präfixe</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#python-string-methoden">Python String-Methoden</a>
|
||||
<ul>
|
||||
<li><a href="#1-bereinigen-und-ausrichten">1. Bereinigen und Ausrichten</a></li>
|
||||
<li><a href="#2-suchen-und-ersetzen">2. Suchen und Ersetzen</a></li>
|
||||
<li><a href="#3-aufteilen-und-verbinden">3. Aufteilen und Verbinden</a></li>
|
||||
<li><a href="#4-groß-kleinschreibung-ändern">4. Groß-/Kleinschreibung ändern</a></li>
|
||||
<li><a href="#5-überprüfungsmethoden-geben-true-oder-false-zurück">5. Überprüfungsmethoden (Geben <code>True</code> oder <code>False</code> zurück)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="python-string-präfixe">Python String-Präfixe</h1>
|
||||
<p>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 <code>.startswith()</code> und <code>.endswith()</code>.</p>
|
||||
<p>Hier ist die Liste aller String-Präfixe in Python mit Beschreibung und logischen Beispielen:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Präfix</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong>Keines</strong></td>
|
||||
<td style="text-align: left">Standard-Unicode-String (UTF-8 in Python 3). Verarbeitet normale Escape-Sequenzen wie <code>\n</code> oder <code>\t</code>.</td>
|
||||
<td style="text-align: left"><code>text = "Zeile 1\nZeile 2"</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>f</code> / <code>F</code></strong></td>
|
||||
<td style="text-align: left"><strong>Formatted String (f-string):</strong> Ermöglicht die direkte Einbettung von Python-Ausdrücken und Variablen in geschweiften Klammern <code>{}</code>.</td>
|
||||
<td style="text-align: left"><code>name = "Welt"\nprint(f"Hallo {name}!")</code> <em>(Ausgabe: Hallo Welt!)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>r</code> / <code>R</code></strong></td>
|
||||
<td style="text-align: left"><strong>Raw String:</strong> Behandelt Backslashes <code>\</code> als normale Zeichen und ignoriert Escape-Sequenzen. Ideal für reguläre Ausdrücke oder Dateipfade.</td>
|
||||
<td style="text-align: left"><code>pfad = r"C:\Users\Name\Documents"</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>b</code> / <code>B</code></strong></td>
|
||||
<td style="text-align: left"><strong>Byte-String:</strong> Erzeugt ein <code>bytes</code>-Objekt statt eines Standard-Strings. Erlaubt nur ASCII-Zeichen (Werte 0-127).</td>
|
||||
<td style="text-align: left"><code>daten = b"Hallo"</code> <em>(Typ ist <code>bytes</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>u</code> / <code>U</code></strong></td>
|
||||
<td style="text-align: left"><strong>Unicode-String:</strong> In Python 3 standardmäßig das Standardverhalten. Wird heute hauptsächlich für die Abwärtskompatibilität mit Python 2 verwendet.</td>
|
||||
<td style="text-align: left"><code>unicode_text = u"Café"</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>fr</code> / <code>rf</code></strong></td>
|
||||
<td style="text-align: left"><strong>Kombination (Raw f-string):</strong> Erlaubt sowohl die Formatierung mit <code>{}</code> als auch die Ignorierung von Escape-Sequenzen.</td>
|
||||
<td style="text-align: left"><code>ordner = "Bilder"\npfad = fr"C:\{ordner}\bild.png"</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>br</code> / <code>rb</code></strong></td>
|
||||
<td style="text-align: left"><strong>Kombination (Raw Byte-string):</strong> Erzeugt ein Byte-Objekt, bei dem Backslashes nicht als Escape-Sequenzen interpretiert werden.</td>
|
||||
<td style="text-align: left"><code>regex_bytes = rb"a\nb"</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>(Hinweis: Die Groß- und Kleinschreibung der Präfixe ist beliebig, d. h. <code>f""</code> verhält sich identisch zu <code>F""</code>.)</em></p>
|
||||
<h2 id="python-string-methoden">Python String-Methoden</h2>
|
||||
<p>Hier ist eine Übersicht über die wichtigsten eingebauten Methoden von String-Objekten (<code>str</code>) in Python, sortiert nach ihrer Funktion:</p>
|
||||
<h3 id="1-bereinigen-und-ausrichten">1. Bereinigen und Ausrichten</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Methode</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>strip([chars])</code></strong></td>
|
||||
<td style="text-align: left">Entfernt führende und folgende Whitespaces (oder die angegebenen Zeichen in <code>chars</code>).</td>
|
||||
<td style="text-align: left"><code>" hallo ".strip()</code> <em>(Ergebnis: <code>"hallo"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>lstrip([chars])</code></strong></td>
|
||||
<td style="text-align: left">Entfernt nur führende Whitespaces oder Zeichen.</td>
|
||||
<td style="text-align: left"><code>" hallo ".lstrip()</code> <em>(Ergebnis: <code>"hallo "</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rstrip([chars])</code></strong></td>
|
||||
<td style="text-align: left">Entfernt nur folgende Whitespaces oder Zeichen.</td>
|
||||
<td style="text-align: left"><code>" hallo ".rstrip()</code> <em>(Ergebnis: <code>" hallo"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>ljust(width[, fillchar])</code></strong></td>
|
||||
<td style="text-align: left">Richtet den String linksbündig in einem Feld der Breite <code>width</code> aus.</td>
|
||||
<td style="text-align: left"><code>"test".ljust(10, "-")</code> <em>(Ergebnis: <code>"test------"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rjust(width[, fillchar])</code></strong></td>
|
||||
<td style="text-align: left">Richtet den String rechtsbündig in einem Feld der Breite <code>width</code> aus.</td>
|
||||
<td style="text-align: left"><code>"test".rjust(10, "-")</code> <em>(Ergebnis: <code>"------test"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>center(width[, fillchar])</code></strong></td>
|
||||
<td style="text-align: left">Zentriert den String in einem Feld der Breite <code>width</code>.</td>
|
||||
<td style="text-align: left"><code>"test".center(10, "-")</code> <em>(Ergebnis: <code>"---test---"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>zfill(width)</code></strong></td>
|
||||
<td style="text-align: left">Füllt den String links mit Nullen auf, bis die Breite <code>width</code> erreicht ist.</td>
|
||||
<td style="text-align: left"><code>"42".zfill(5)</code> <em>(Ergebnis: <code>"00042"</code>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="2-suchen-und-ersetzen">2. Suchen und Ersetzen</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Methode</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>replace(old, new[, count])</code></strong></td>
|
||||
<td style="text-align: left">Ersetzt Vorkommen von <code>old</code> durch <code>new</code>. Optional wird die Anzahl durch <code>count</code> begrenzt.</td>
|
||||
<td style="text-align: left"><code>"A-B-C".replace("-", "/")</code> <em>(Ergebnis: <code>"A/B/C"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>find(sub[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Gibt den niedrigsten Index zurück, an dem <code>sub</code> gefunden wird. Gibt <code>-1</code> zurück, wenn nicht gefunden.</td>
|
||||
<td style="text-align: left"><code>"hallo".find("ll")</code> <em>(Ergebnis: <code>2</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rfind(sub[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Gibt den höchsten Index zurück, an dem <code>sub</code> gefunden wird. Gibt <code>-1</code> zurück, wenn nicht gefunden.</td>
|
||||
<td style="text-align: left"><code>"hallo".rfind("l")</code> <em>(Ergebnis: <code>3</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>index(sub[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Wie <code>find()</code>, wirft aber einen <code>ValueError</code>, wenn das Substring nicht gefunden wird.</td>
|
||||
<td style="text-align: left"><code>"hallo".index("x")</code> <em>(Ergebnis: <code>ValueError</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rindex(sub[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Wie <code>rfind()</code>, wirft aber einen <code>ValueError</code>, wenn nicht gefunden.</td>
|
||||
<td style="text-align: left"><code>"hallo".rindex("l")</code> <em>(Ergebnis: <code>3</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>count(sub[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Zählt, wie oft das Substring <code>sub</code> im String vorkommt.</td>
|
||||
<td style="text-align: left"><code>"banane".count("an")</code> <em>(Ergebnis: <code>2</code>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="3-aufteilen-und-verbinden">3. Aufteilen und Verbinden</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Methode</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>split(sep=None, maxsplit=-1)</code></strong></td>
|
||||
<td style="text-align: left">Teilt den String an Trennzeichen <code>sep</code> und gibt eine Liste zurück.</td>
|
||||
<td style="text-align: left"><code>"A,B,C".split(",")</code> <em>(Ergebnis: <code>['A', 'B', 'C']</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rsplit(sep=None, maxsplit=-1)</code></strong></td>
|
||||
<td style="text-align: left">Teilt den String vom Ende her auf.</td>
|
||||
<td style="text-align: left"><code>"A,B,C".rsplit(",", 1)</code> <em>(Ergebnis: <code>['A,B', 'C']</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>splitlines([keepends])</code></strong></td>
|
||||
<td style="text-align: left">Teilt den String an Zeilenumbrüchen auf.</td>
|
||||
<td style="text-align: left"><code>"A\nB".splitlines()</code> <em>(Ergebnis: <code>['A', 'B']</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>join(iterable)</code></strong></td>
|
||||
<td style="text-align: left">Verbindet die Elemente eines Iterables (z.B. Liste) mit dem String als Trennzeichen.</td>
|
||||
<td style="text-align: left"><code>"-".join(["A", "B"])</code> <em>(Ergebnis: <code>"A-B"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>partition(sep)</code></strong></td>
|
||||
<td style="text-align: left">Teilt den String beim ersten Vorkommen von <code>sep</code> in ein Tupel: <code>(vor, sep, nach)</code>.</td>
|
||||
<td style="text-align: left"><code>"A-B-C".partition("-")</code> <em>(Ergebnis: <code>('A', '-', 'B-C')</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>rpartition(sep)</code></strong></td>
|
||||
<td style="text-align: left">Teilt den String beim letzten Vorkommen von <code>sep</code>.</td>
|
||||
<td style="text-align: left"><code>"A-B-C".rpartition("-")</code> <em>(Ergebnis: <code>('A-B', '-', 'C')</code>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="4-groß-kleinschreibung-ändern">4. Groß-/Kleinschreibung ändern</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Methode</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>lower()</code></strong></td>
|
||||
<td style="text-align: left">Konvertiert alle Zeichen in Kleinbuchstaben.</td>
|
||||
<td style="text-align: left"><code>"Hallo".lower()</code> <em>(Ergebnis: <code>"hallo"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>upper()</code></strong></td>
|
||||
<td style="text-align: left">Konvertiert alle Zeichen in Großbuchstaben.</td>
|
||||
<td style="text-align: left"><code>"Hallo".upper()</code> <em>(Ergebnis: <code>"HALLO"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>capitalize()</code></strong></td>
|
||||
<td style="text-align: left">Setzt das erste Zeichen auf Groß und den Rest auf Klein.</td>
|
||||
<td style="text-align: left"><code>"hallo welt".capitalize()</code> <em>(Ergebnis: <code>"Hallo welt"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>title()</code></strong></td>
|
||||
<td style="text-align: left">Setzt den ersten Buchstaben jedes Wortes auf Groß.</td>
|
||||
<td style="text-align: left"><code>"hallo welt".title()</code> <em>(Ergebnis: <code>"Hallo Welt"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>swapcase()</code></strong></td>
|
||||
<td style="text-align: left">Vertauscht Groß- und Kleinschreibung.</td>
|
||||
<td style="text-align: left"><code>"HAllo".swapcase()</code> <em>(Ergebnis: <code>"haLLO"</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>casefold()</code></strong></td>
|
||||
<td style="text-align: left">Ähnlich wie <code>lower()</code>, ist aber aggressiver beim Entfernen von Groß-/Kleinschreibungsunterschieden (gut für Caseless Matching in Unicode).</td>
|
||||
<td style="text-align: left"><code>"Straße".casefold()</code> <em>(Ergebnis: <code>"strasse"</code>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="5-überprüfungsmethoden-geben-true-oder-false-zurück">5. Überprüfungsmethoden (Geben <code>True</code> oder <code>False</code> zurück)</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Methode</th>
|
||||
<th style="text-align: left">Beschreibung</th>
|
||||
<th style="text-align: left">Logisches Beispiel</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>startswith(prefix[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob der String mit <code>prefix</code> beginnt.</td>
|
||||
<td style="text-align: left"><code>"hallo".startswith("ha")</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>endswith(suffix[, start[, end]])</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob der String mit <code>suffix</code> endet.</td>
|
||||
<td style="text-align: left"><code>"hallo".endswith("lo")</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isalnum()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle Zeichen alphanumerisch sind (Buchstaben und Zahlen) und mindestens ein Zeichen vorhanden ist.</td>
|
||||
<td style="text-align: left"><code>"Python3".isalnum()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isalpha()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle Zeichen Buchstaben sind.</td>
|
||||
<td style="text-align: left"><code>"Python".isalpha()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isdigit()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle Zeichen Ziffern sind (z. B. auch hochgestellte Zahlen).</td>
|
||||
<td style="text-align: left"><code>"123".isdigit()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isnumeric()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle Zeichen numerisch sind (auch Brüche wie ½).</td>
|
||||
<td style="text-align: left"><code>"½".isnumeric()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isspace()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob der String nur aus Whitespaces (Leerzeichen, Tabs, Zeilenumbrüchen) besteht.</td>
|
||||
<td style="text-align: left"><code>" \n".isspace()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>islower()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle buchstabenbasierten Zeichen kleingeschrieben sind.</td>
|
||||
<td style="text-align: left"><code>"hallo".islower()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>isupper()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob alle buchstabenbasierten Zeichen großgeschrieben sind.</td>
|
||||
<td style="text-align: left"><code>"HALLO".isupper()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left"><strong><code>istitle()</code></strong></td>
|
||||
<td style="text-align: left">Prüft, ob der String im Titlecase-Format vorliegt.</td>
|
||||
<td style="text-align: left"><code>"Hallo Welt".istitle()</code> <em>(Ergebnis: <code>True</code>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,188 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>System Optimierung – nächste Schritte – Hugo Docker CMS</title>
|
||||
<meta name="description" content="System Optimierung – nächste Schritte Letzte Bearbeitung: 07.09.2026 Chat-Session-ID: 20260907_182659_6403f3 Chat wieder aufrufen: …">
|
||||
|
||||
|
||||
<meta property="og:title" content="System Optimierung – nächste Schritte – Hugo Docker CMS">
|
||||
<meta property="og:description" content="System Optimierung – nächste Schritte Letzte Bearbeitung: 07.09.2026 Chat-Session-ID: 20260907_182659_6403f3 Chat wieder aufrufen: …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/system-optimierung/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>System Optimierung – nächste Schritte</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#1-flashfocus-patchen-marshmallow-4x-inkompatibilität">1. flashfocus patchen (Marshmallow-4.x-Inkompatibilität)</a></li>
|
||||
<li><a href="#2-systemd-user-services-masken">2. Systemd-User-Services masken</a></li>
|
||||
<li><a href="#3-neustart-und-test">3. Neustart und Test</a></li>
|
||||
<li><a href="#4-weitere-performance-empfehlungen">4. Weitere Performance-Empfehlungen</a></li>
|
||||
<li><a href="#5-verwaiste-pakete-aufräumen">5. Verwaiste Pakete aufräumen</a></li>
|
||||
<li><a href="#wie-diesen-chat-wieder-aufrufen">Wie diesen Chat wieder aufrufen</a></li>
|
||||
<li><a href="#dateien-die-geändert-wurden">Dateien, die geändert wurden</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="system-optimierung--nächste-schritte">System Optimierung – nächste Schritte</h1>
|
||||
<blockquote>
|
||||
<p>Letzte Bearbeitung: 07.09.2026
|
||||
Chat-Session-ID: <code>20260907_182659_6403f3</code>
|
||||
Chat wieder aufrufen: <code>@session:default/20260907_182659_6403f3</code> in Hermes Agent eingeben</p>
|
||||
</blockquote>
|
||||
<hr>
|
||||
<h2 id="1-flashfocus-patchen-marshmallow-4x-inkompatibilität">1. flashfocus patchen (Marshmallow-4.x-Inkompatibilität)</h2>
|
||||
<p><strong>Einmalig ausführen:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo sed -i <span class="s1">'s/fields\.Number/fields.Float/g'</span> /usr/lib/python3.14/site-packages/flashfocus/config.py
|
||||
</span></span></code></pre></div><p><strong>Danach testen:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">flashfocus --help
|
||||
</span></span></code></pre></div><p>Wenn kein Traceback kommt, ist der Patch erfolgreich.</p>
|
||||
<p><strong>Achtung:</strong> Nach jedem <code>pacman -Syu</code>, bei dem flashfocus aktualisiert wird, muss der Patch erneut angewendet werden.</p>
|
||||
<hr>
|
||||
<h2 id="2-systemd-user-services-masken">2. Systemd-User-Services masken</h2>
|
||||
<p>Die Manjaro-Sway-Config versucht die Dienste bei jedem Start neu zu enablen.<br>
|
||||
Nur <code>disable</code> reicht nicht – sie müssen <strong>maskiert</strong> werden.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl --user mask mako.service flashfocus.service pcmanfm.service poweralertd.service xdg-desktop-portal-gtk.service xdg-desktop-portal-lxqt.service
|
||||
</span></span></code></pre></div><p><strong>Kontrolle:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl --user status mako flashfocus pcmanfm poweralertd xdg-desktop-portal-gtk xdg-desktop-portal-lxqt
|
||||
</span></span></code></pre></div><p>Alle sollten <code>masked</code> anzeigen (nicht <code>failed</code>).</p>
|
||||
<hr>
|
||||
<h2 id="3-neustart-und-test">3. Neustart und Test</h2>
|
||||
<p>Sway neustarten (Super+Shift+R) oder System rebooten.</p>
|
||||
<p>Nach dem Neustart prüfen, ob alle Dienste laufen:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pgrep -a mako
|
||||
</span></span><span class="line"><span class="cl">pgrep -a pcmanfm-qt
|
||||
</span></span><span class="line"><span class="cl">pgrep -a poweralertd
|
||||
</span></span><span class="line"><span class="cl">pgrep -a flashfocus
|
||||
</span></span><span class="line"><span class="cl">pgrep -a xdg-desktop-portal
|
||||
</span></span></code></pre></div><p>Jeder Befehl sollte eine PID und den Prozessnamen ausgeben.</p>
|
||||
<p><strong>Journal aufräumen</strong> – keine neuen Crash-Logs mehr:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">journalctl --user -p <span class="m">3</span> --since <span class="s2">"1 minute ago"</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="4-weitere-performance-empfehlungen">4. Weitere Performance-Empfehlungen</h2>
|
||||
<p>Die vollständige Analyse ist in diesem Chat dokumentiert. Hier die Top-Empfehlungen als Übersicht:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Priorität</th>
|
||||
<th>Maßnahme</th>
|
||||
<th>Befehl</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Hoch</td>
|
||||
<td>swappiness auf 40 senken (ZRAM)</td>
|
||||
<td><code>sudo sysctl vm.swappiness=40</code> (temporär) oder <code>/etc/sysctl.d/99-zram.conf</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hoch</td>
|
||||
<td>vfs_cache_pressure auf 50</td>
|
||||
<td><code>sudo sysctl vm.vfs_cache_pressure=50</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mittel</td>
|
||||
<td>ollama stoppen (294 MB RAM)</td>
|
||||
<td><code>sudo systemctl disable --now ollama</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mittel</td>
|
||||
<td>lxd/docker stoppen (530 MB RAM)</td>
|
||||
<td><code>sudo systemctl disable --now lxd docker</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mittel</td>
|
||||
<td>CPU-Governor auf powersave</td>
|
||||
<td><code>sudo cpupower frequency-set -g powersave</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Niedrig</td>
|
||||
<td>Boot beschleunigen</td>
|
||||
<td><code>sudo systemctl disable NetworkManager-wait-online</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Niedrig</td>
|
||||
<td>Journal-Größe limitieren (3,9 GB → 500 MB)</td>
|
||||
<td><code>sudo nano /etc/systemd/journald.conf</code> → <code>SystemMaxUse=500M</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="5-verwaiste-pakete-aufräumen">5. Verwaiste Pakete aufräumen</h2>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -Rns <span class="k">$(</span>pacman -Qtdq<span class="k">)</span> <span class="c1"># 9 verwaiste Pakete</span>
|
||||
</span></span></code></pre></div><hr>
|
||||
<h2 id="wie-diesen-chat-wieder-aufrufen">Wie diesen Chat wieder aufrufen</h2>
|
||||
<p>In einer neuen Hermes-Agent-Session einfach eingeben:</p>
|
||||
<pre tabindex="0"><code>@session:default/20260907_182659_6403f3
|
||||
</code></pre><p>Dann lädt der Agent den kompletten Chatverlauf aus der Datenbank.</p>
|
||||
<hr>
|
||||
<h2 id="dateien-die-geändert-wurden">Dateien, die geändert wurden</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Datei</th>
|
||||
<th>Zweck</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>~/.config/sway/config.d/10-autostart-fix.conf</code></td>
|
||||
<td>Korrigierte Autostarts (exec statt systemd)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/usr/lib/python3.14/site-packages/flashfocus/config.py</code></td>
|
||||
<td>Marshmallow-4.x-Patch (sudo nötig)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/home/jonnybravo/Projekte/Python_Skripte/create_selfsign/selfsing.py</code></td>
|
||||
<td>CA + Zertifikats-Script (vorherige Session)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>~/scripts/mount-nfs.sh</code></td>
|
||||
<td>Manuelle NFS-Mount-Steuerung (vorherige Session)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>~/scripts/mounts.md</code></td>
|
||||
<td>NFS-Mount-Dokumentation (vorherige Session)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,47 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Tags – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Markdown-Dateien einfach in content/ ablegen.">
|
||||
|
||||
|
||||
<meta property="og:title" content="Tags – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Markdown-Dateien einfach in content/ ablegen.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/tags/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="Hugo Docker CMS" href="/tags/index.xml">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<h1>Tags</h1>
|
||||
<p class="subtitle">Markdown-Dateien einfach in content/ ablegen.</p>
|
||||
|
||||
<div class="post-grid">
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Hugo Docker CMS</title>
|
||||
<link>https://localhost:1313/tags/</link>
|
||||
<description>Markdown-Dateien einfach in content/ ablegen.</description>
|
||||
<generator>Hugo 0.165.0</generator>
|
||||
<language>de</language>
|
||||
<lastBuildDate>Tue, 08 Sep 2026 08:07:00 +0000</lastBuildDate>
|
||||
<atom:link href="https://localhost:1313/index.xml" rel="self" type="application/rss+xml"/>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,106 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Vergleich: TinyDB vs. SQLite – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Vergleich: TinyDB vs. SQLite Sowohl TinyDB als auch SQLite sind hervorragende “Embedded Databases” (eingebettete Datenbanken), die ihre Daten in …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Vergleich: TinyDB vs. SQLite – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Vergleich: TinyDB vs. SQLite Sowohl TinyDB als auch SQLite sind hervorragende “Embedded Databases” (eingebettete Datenbanken), die ihre Daten in …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/tinydb_vs_sqlite/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Vergleich: TinyDB vs. SQLite</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#sqlite">SQLite</a></li>
|
||||
<li><a href="#tinydb">TinyDB</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="vergleich-tinydb-vs-sqlite">Vergleich: TinyDB vs. SQLite</h1>
|
||||
<p>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.</p>
|
||||
<hr>
|
||||
<h3 id="sqlite">SQLite</h3>
|
||||
<p><strong>Vorteile (<code>Pros</code>):</strong></p>
|
||||
<ul>
|
||||
<li><strong>Sehr robust und bewährt:</strong> Seit Jahrzehnten im Einsatz, extrem zuverlässig (ACID-konform).</li>
|
||||
<li><strong>Standard-SQL:</strong> Bietet eine mächtige, standardisierte Abfragesprache, die von vielen Entwicklern beherrscht wird und plattformübergreifend kompatibel ist.</li>
|
||||
<li><strong>Performance:</strong> Sehr gute Leistung für komplexe Abfragen, Joins und große Datensätze.</li>
|
||||
<li><strong>Strikte Schemas:</strong> Erzwingt Datenintegrität durch vordefinierte Tabellenstrukturen und Datentypen.</li>
|
||||
<li><strong>Großes Ökosystem:</strong> Viele Tools, Treiber und Support in fast jeder Programmiersprache verfügbar.</li>
|
||||
<li><strong>Transaktionen:</strong> Robuste Unterstützung für atomare Transaktionen.</li>
|
||||
</ul>
|
||||
<p><strong>Nachteile (<code>Cons</code>):</strong></p>
|
||||
<ul>
|
||||
<li><strong>SQL-Kenntnisse erforderlich:</strong> Entwickler, die kein SQL beherrschen, müssen es lernen.</li>
|
||||
<li><strong>Schema-Bindung:</strong> Änderungen am Datenmodell erfordern oft Schema-Migrationen, die aufwendig sein können. Weniger flexibel für sich schnell ändernde Daten.</li>
|
||||
<li><strong>Binärdateien:</strong> Die Datenbankdateien sind binär und nicht direkt menschenlesbar, was das Debugging erschweren kann.</li>
|
||||
<li><strong>Boilerplate-Code:</strong> Für einfache Operationen kann der SQL-Code im Vergleich zu einer NoSQL-Datenbank länger sein.</li>
|
||||
<li><strong>Keine native Unterstützung für verschachtelte Daten:</strong> Das Speichern von hierarchischen Daten (JSON) erfordert oft JSON-Funktionen in SQL oder separate Tabellen.</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<h3 id="tinydb">TinyDB</h3>
|
||||
<p><strong>Vorteile (<code>Pros</code>):</strong></p>
|
||||
<ul>
|
||||
<li><strong>Rein Pythonisch:</strong> Die API ist zu 100% in Python geschrieben und fühlt sich sehr natürlich an. Keine SQL-Kenntnisse erforderlich.</li>
|
||||
<li><strong>Schema-los (NoSQL):</strong> Speichert Daten als Python-Wörterbücher (ähnlich JSON). Keine Schema-Definitionen im Voraus notwendig, maximale Flexibilität für sich ändernde Datenmodelle.</li>
|
||||
<li><strong>Extrem einfach und schnell zu starten:</strong> Ideal für kleine Projekte, Prototypen und den schnellen Einstieg.</li>
|
||||
<li><strong>Menschenlesbare Daten:</strong> Speichert Daten standardmäßig in JSON (oder YAML/CBOR), die Datenbankdatei ist mit einem Texteditor lesbar.</li>
|
||||
<li><strong>Hervorragend für verschachtelte Daten:</strong> Ideal für das Speichern und Abfragen von Daten mit komplexen, hierarchischen Strukturen direkt als Python-Objekte.</li>
|
||||
<li><strong>Keine Konfiguration:</strong> Einfach importieren und loslegen.</li>
|
||||
</ul>
|
||||
<p><strong>Nachteile (<code>Cons</code>):</strong></p>
|
||||
<ul>
|
||||
<li><strong>Python-spezifisch:</strong> Nicht leicht in anderen Programmiersprachen zu verwenden (im Gegensatz zu SQL).</li>
|
||||
<li><strong>Keine komplexe relationale Abfrage:</strong> Nicht für komplexe Joins oder Aggregationen über mehrere “Tabellen” hinweg konzipiert.</li>
|
||||
<li><strong>Leistung bei großen Datensätzen:</strong> Bei sehr großen Datenmengen kann die Leistung leiden, da TinyDB für einige Operationen die gesamte Datei lesen muss.</li>
|
||||
<li><strong>Weniger strenge ACID-Garantien:</strong> Obwohl es Transaktionen bietet, ist es im Vergleich zu SQLite weniger robust in Bezug auf strikte ACID-Konformität.</li>
|
||||
<li><strong>Kleineres Ökosystem:</strong> Weniger Tools, Treiber und Community-Support als für SQLite.</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>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.</p>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,145 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Anleitung: Bestehende rclone-Konfiguration auf einen neuen Rechner übertragen Diese Anleitung erklärt, wie Sie eine bereits existierende rclone-Konfiguration, …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Anleitung: Bestehende rclone-Konfiguration auf einen neuen Rechner übertragen Diese Anleitung erklärt, wie Sie eine bereits existierende rclone-Konfiguration, …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/ver_next_einbinden/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Anleitung: Bestehende `rclone`-Konfiguration auf einen neuen Rechner übertragen</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#worum-geht-es">Worum geht es?</a></li>
|
||||
<li><a href="#voraussetzungen">Voraussetzungen</a></li>
|
||||
<li><a href="#schritt-für-schritt-anleitung">Schritt-für-Schritt-Anleitung</a></li>
|
||||
<li><a href="#-wichtiger-warnhinweis-zum-passwort">⚠️ Wichtiger Warnhinweis zum Passwort</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="anleitung-bestehende-rclone-konfiguration-auf-einen-neuen-rechner-übertragen">Anleitung: Bestehende <code>rclone</code>-Konfiguration auf einen neuen Rechner übertragen</h1>
|
||||
<p>Diese Anleitung erklärt, wie Sie eine bereits existierende <code>rclone</code>-Konfiguration, insbesondere für einen verschlüsselten Nextcloud-Speicher, auf einen neuen Computer umziehen können, ohne alles neu einrichten zu müssen.</p>
|
||||
<hr>
|
||||
<h3 id="worum-geht-es">Worum geht es?</h3>
|
||||
<p>Alle Ihre <code>rclone</code>-Einstellungen, einschließlich der Zugangsdaten zu Ihren Cloud-Speichern, sind in einer einzigen Datei namens <code>rclone.conf</code> gespeichert. Indem Sie diese Datei auf einen neuen Rechner übertragen, “kennt” <code>rclone</code> dort sofort alle Ihre eingerichteten Verbindungen (Remotes).</p>
|
||||
<hr>
|
||||
<h3 id="voraussetzungen">Voraussetzungen</h3>
|
||||
<p>Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:</p>
|
||||
<ol>
|
||||
<li><strong>Zugriff auf den alten Rechner</strong>, auf dem <code>rclone</code> bereits konfiguriert ist.</li>
|
||||
<li><strong>Das Passwort für Ihr verschlüsseltes <code>crypt</code>-Remote.</strong> 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.</li>
|
||||
<li>Einen Weg, eine einzelne Datei zu übertragen (z.B. ein USB-Stick, ein sicheres Netzlaufwerk etc.).</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<h3 id="schritt-für-schritt-anleitung">Schritt-für-Schritt-Anleitung</h3>
|
||||
<h4 id="schritt-1-rcloneconf-datei-auf-dem-alten-rechner-finden-und-kopieren">Schritt 1: <code>rclone.conf</code>-Datei auf dem alten Rechner finden und kopieren</h4>
|
||||
<p>Die Konfigurationsdatei, die Sie benötigen, befindet sich im Home-Verzeichnis Ihres Benutzers.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Öffnen Sie ein Terminal auf Ihrem <strong>alten Rechner</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Der Pfad zur Datei lautet: <code>~/.config/rclone/rclone.conf</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Kopieren Sie diese Datei auf Ihr Übertragungsmedium (z.B. einen USB-Stick).</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Beispiel für das Kopieren auf einen USB-Stick, der unter /media/MeinStick gemountet ist</span>
|
||||
</span></span><span class="line"><span class="cl">cp ~/.config/rclone/rclone.conf /media/MeinStick/
|
||||
</span></span></code></pre></div></li>
|
||||
</ol>
|
||||
<h4 id="schritt-2-rclone-auf-dem-neuen-rechner-installieren">Schritt 2: <code>rclone</code> auf dem neuen Rechner installieren</h4>
|
||||
<p>Falls <code>rclone</code> auf dem <strong>neuen Computer</strong> noch nicht installiert ist, müssen Sie dies nachholen.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Auf Manjaro/Arch Linux</span>
|
||||
</span></span><span class="line"><span class="cl">sudo pacman -S rclone
|
||||
</span></span><span class="line"><span class="cl">
|
||||
</span></span><span class="line"><span class="cl"><span class="c1"># Auf Debian/Ubuntu</span>
|
||||
</span></span><span class="line"><span class="cl">sudo apt install rclone
|
||||
</span></span></code></pre></div><h4 id="schritt-3-konfigurationsdatei-auf-dem-neuen-rechner-einfügen">Schritt 3: Konfigurationsdatei auf dem neuen Rechner einfügen</h4>
|
||||
<p>Nun bringen Sie die Konfiguration auf den neuen Rechner.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Öffnen Sie ein Terminal auf Ihrem <strong>neuen Rechner</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Stellen Sie sicher, dass das Zielverzeichnis existiert. Der folgende Befehl erstellt es, falls es fehlt:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/.config/rclone/
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p>Kopieren Sie die <code>rclone.conf</code>-Datei von Ihrem Übertragungsmedium in dieses Verzeichnis.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Beispiel für das Kopieren von einem USB-Stick</span>
|
||||
</span></span><span class="line"><span class="cl">cp /media/MeinStick/rclone.conf ~/.config/rclone/
|
||||
</span></span></code></pre></div></li>
|
||||
</ol>
|
||||
<h4 id="schritt-4-überprüfung-und-erster-test-auf-dem-neuen-rechner">Schritt 4: Überprüfung und erster Test auf dem neuen Rechner</h4>
|
||||
<p>Jetzt können Sie überprüfen, ob <code>rclone</code> die Konfiguration erfolgreich übernommen hat.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>Lassen Sie sich alle erkannten Remotes anzeigen:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rclone listremotes
|
||||
</span></span></code></pre></div><p>Die Ausgabe sollte nun die Namen Ihrer Remotes (z.B. <code>nextcloud_unverschluesselt:</code> und <code>nextcloud_verschluesselt:</code>) auflisten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Führen Sie einen Test durch:</strong>
|
||||
Der beste Test ist, den Inhalt Ihres verschlüsselten Remotes aufzulisten.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rclone ls nextcloud_verschluesselt:
|
||||
</span></span></code></pre></div><ul>
|
||||
<li>Möglicherweise fragt <code>rclone</code> 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.</li>
|
||||
<li>Wenn der Befehl erfolgreich ist und eine Liste Ihrer verschlüsselten Dateien und Ordner anzeigt, war der Umzug erfolgreich!</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<h3 id="-wichtiger-warnhinweis-zum-passwort">⚠️ Wichtiger Warnhinweis zum Passwort</h3>
|
||||
<p>Die <code>rclone.conf</code>-Datei speichert Ihr Verschlüsselungspasswort nur in einer verschleierten Form. <strong>Sie ersetzt nicht die Notwendigkeit, dass Sie das Passwort kennen!</strong></p>
|
||||
<ul>
|
||||
<li><strong>Bewahren Sie Ihr Passwort immer an einem sicheren Ort auf</strong> (z.B. in einem Passwort-Manager).</li>
|
||||
<li>Ohne das korrekte Passwort sind Ihre verschlüsselten Daten <strong>unwiderruflich verloren</strong>, selbst wenn Sie die <code>rclone.conf</code>-Datei haben.</li>
|
||||
<li>Betrachten Sie die <code>rclone.conf</code>-Datei selbst als sensibel, da sie die Zugangsdaten zu Ihren Cloud-Konten enthält.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,74 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Willkommen bei Hugo Docker – Hugo Docker CMS</title>
|
||||
<meta name="description" content="Das ist eine Beispiel-Seite. Funktioniert!
|
||||
Einfach .md-Dateien in den Ordner content/ kopieren – Hugo rendert sie automatisch.
|
||||
So geht’s # Neue Seite …">
|
||||
|
||||
|
||||
<meta property="og:title" content="Willkommen bei Hugo Docker – Hugo Docker CMS">
|
||||
<meta property="og:description" content="Das ist eine Beispiel-Seite. Funktioniert!
|
||||
Einfach .md-Dateien in den Ordner content/ kopieren – Hugo rendert sie automatisch.
|
||||
So geht’s # Neue Seite …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/willkommen/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>Willkommen bei Hugo Docker</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li><a href="#so-gehts">So geht’s</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<p>Das ist eine Beispiel-Seite. <strong>Funktioniert!</strong></p>
|
||||
<p>Einfach <code>.md</code>-Dateien in den Ordner <code>content/</code> kopieren – Hugo rendert sie automatisch.</p>
|
||||
<h2 id="so-gehts">So geht’s</h2>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Neue Seite anlegen</span>
|
||||
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">'---
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">title: "Meine Seite"
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">date: "2026-09-08"
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">---
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">Inhalt hier ...
|
||||
</span></span></span><span class="line"><span class="cl"><span class="s1">'</span> > content/meine-seite.md
|
||||
</span></span></code></pre></div><p>Änderungen werden dank <code>--watch</code> in Echtzeit übernommen.</p>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,189 @@
|
||||
<html lang="de">
|
||||
<head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>YubiKey-Einrichtung unter Manjaro Sway – Hugo Docker CMS</title>
|
||||
<meta name="description" content="YubiKey-Einrichtung unter Manjaro Sway Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren. …">
|
||||
|
||||
|
||||
<meta property="og:title" content="YubiKey-Einrichtung unter Manjaro Sway – Hugo Docker CMS">
|
||||
<meta property="og:description" content="YubiKey-Einrichtung unter Manjaro Sway Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren. …">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://localhost:1313/yubikey_setup_guide/">
|
||||
<meta property="og:site_name" content="Hugo Docker CMS">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/css/main.min.css">
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/" class="logo">Hugo Docker CMS</a>
|
||||
|
||||
<nav aria-label="Breadcrumb">
|
||||
<a href="/">← Start</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
|
||||
<article>
|
||||
<header class="article-header">
|
||||
<h1>YubiKey-Einrichtung unter Manjaro Sway</h1>
|
||||
<time datetime="2026-09-08">08.09.2026</time>
|
||||
|
||||
</header>
|
||||
|
||||
<details class="toc" >
|
||||
<summary>Inhaltsverzeichnis</summary>
|
||||
<nav id="TableOfContents">
|
||||
<ul>
|
||||
<li>
|
||||
<ul>
|
||||
<li><a href="#übersicht-der-anwendungsfälle">Übersicht der Anwendungsfälle:</a></li>
|
||||
<li><a href="#schritt-1-notwendige-pakete-installieren">Schritt 1: Notwendige Pakete installieren</a></li>
|
||||
<li><a href="#schritt-2-yubikey-erkennen-und-status-prüfen">Schritt 2: YubiKey erkennen und Status prüfen</a></li>
|
||||
<li><a href="#anwendungsfälle">Anwendungsfälle:</a></li>
|
||||
<li><a href="#wichtige-hinweise">Wichtige Hinweise:</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</details>
|
||||
|
||||
<div class="content">
|
||||
<h1 id="yubikey-einrichtung-unter-manjaro-sway">YubiKey-Einrichtung unter Manjaro Sway</h1>
|
||||
<p>Diese Anleitung beschreibt, wie Sie einen YubiKey unter Manjaro Sway für verschiedene Anwendungsfälle konfigurieren.</p>
|
||||
<hr>
|
||||
<h3 id="übersicht-der-anwendungsfälle">Übersicht der Anwendungsfälle:</h3>
|
||||
<ol>
|
||||
<li><strong>FIDO2/U2F:</strong> Für die Zwei-Faktor-Authentifizierung auf Webseiten.</li>
|
||||
<li><strong>GPG:</strong> Zur Verschlüsselung von E-Mails/Dateien und zum Signieren von Git-Commits.</li>
|
||||
<li><strong>SSH:</strong> Zur sicheren Anmeldung auf Servern.</li>
|
||||
<li><strong>PAM:</strong> Zur Anmeldung am System oder für <code>sudo</code> (fortgeschritten und mit Vorsicht zu genießen).</li>
|
||||
</ol>
|
||||
<hr>
|
||||
<h3 id="schritt-1-notwendige-pakete-installieren">Schritt 1: Notwendige Pakete installieren</h3>
|
||||
<p>Zuerst müssen Sie die erforderlichen Pakete über den Paketmanager <code>pacman</code> installieren. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S yubikey-manager yubikey-personalization libfido2 gnupg pcsclite ccid
|
||||
</span></span></code></pre></div><p><strong>Erklärung der Pakete:</strong></p>
|
||||
<ul>
|
||||
<li><code>yubikey-manager</code>: Das wichtigste Werkzeug zur Konfiguration Ihres YubiKeys.</li>
|
||||
<li><code>yubikey-personalization</code>: Für ältere YubiKey-Modelle oder spezielle Konfigurationen (obwohl <code>yubikey-manager</code> oft bevorzugt wird).</li>
|
||||
<li><code>libfido2</code>: Stellt die FIDO2-Unterstützung für WebAuthn in Browsern sicher.</li>
|
||||
<li><code>gnupg</code>: Das GnuPG-Programm, notwendig für die Smartcard-Funktionen des YubiKeys.</li>
|
||||
<li><code>pcsclite</code> & <code>ccid</code>: Systemdienste, die die Kommunikation mit dem YubiKey als Smartcard ermöglichen.</li>
|
||||
</ul>
|
||||
<p>Nach der Installation ist es eine gute Idee, den <code>pcscd</code>-Dienst zu aktivieren und zu starten:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> pcscd.service
|
||||
</span></span><span class="line"><span class="cl">sudo systemctl start pcscd.service
|
||||
</span></span></code></pre></div><h3 id="schritt-2-yubikey-erkennen-und-status-prüfen">Schritt 2: YubiKey erkennen und Status prüfen</h3>
|
||||
<p>Stecken Sie Ihren YubiKey ein und überprüfen Sie, ob das System ihn erkennt:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ykman info
|
||||
</span></span></code></pre></div><p>Wenn alles korrekt ist, sollten Sie hier Informationen zu Ihrem YubiKey-Modell und dessen Firmware-Version sehen.</p>
|
||||
<hr>
|
||||
<h3 id="anwendungsfälle">Anwendungsfälle:</h3>
|
||||
<h4 id="anwendungsfall-a-web-authentifizierung-fido2u2f">Anwendungsfall A: Web-Authentifizierung (FIDO2/U2F)</h4>
|
||||
<p>Dies ist der einfachste Fall und erfordert in der Regel keine zusätzliche Konfiguration nach der Installation von <code>libfido2</code>.</p>
|
||||
<ol>
|
||||
<li><strong>Voraussetzung:</strong> Ein unterstützter Webbrowser (Firefox, Chrome, Brave, Edge, etc.).</li>
|
||||
<li><strong>Registrierung:</strong> Gehen Sie zu einer Webseite, die WebAuthn oder FIDO2 unterstützt (z.B. GitHub, Google, GitLab). Navigieren Sie zu den Sicherheitseinstellungen der Webseite.</li>
|
||||
<li><strong>YubiKey hinzufügen:</strong> Registrieren Sie Ihren YubiKey als neuen Sicherheitsschlüssel. Der Browser sollte Sie auffordern, den YubiKey zu berühren.</li>
|
||||
</ol>
|
||||
<p>Das war’s schon! Sie können den YubiKey nun für die Zwei-Faktor-Authentifizierung (2FA) auf diesen Seiten verwenden.</p>
|
||||
<h4 id="anwendungsfall-b-gpg-für-verschlüsselung-und-signaturen">Anwendungsfall B: GPG für Verschlüsselung und Signaturen</h4>
|
||||
<p>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.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>GPG-Status prüfen:</strong> Stecken Sie den YubiKey ein und führen Sie aus:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">gpg --card-status
|
||||
</span></span></code></pre></div><p>Wenn GPG den YubiKey als “Card” erkennt, sind Sie bereit für die weitere Konfiguration.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Schlüssel generieren oder importieren:</strong>
|
||||
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:
|
||||
<a href="https://developers.yubico.com/PGP/">Yubico Docs: Using Your YubiKey with GPG</a>
|
||||
(Stellen Sie sicher, dass Sie eine aktuelle Anleitung verwenden, die zu Ihrer YubiKey-Firmware passt.)</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h4 id="anwendungsfall-c-ssh-authentifizierung">Anwendungsfall C: SSH-Authentifizierung</h4>
|
||||
<p>Sie können den YubiKey auch für die SSH-Authentifizierung verwenden, um sich sicher auf Servern anzumelden.</p>
|
||||
<p><strong>Möglichkeit 1: SSH-Authentifizierung über GPG</strong>
|
||||
Wenn Sie bereits GPG (Anwendungsfall B) eingerichtet haben, können Sie den Authentifizierungs-Unterschlüssel Ihres GPG-Schlüssels für SSH verwenden.</p>
|
||||
<ol>
|
||||
<li>Fügen Sie <code>enable-ssh-support</code> zu Ihrer <code>~/.gnupg/gpg-agent.conf</code> hinzu.</li>
|
||||
<li>Folgen Sie einer Anleitung, um den GPG-Agent als SSH-Agent zu konfigurieren, z.B. für Arch Linux (Manjaro basiert darauf):
|
||||
<a href="https://wiki.archlinux.org/title/GnuPG#SSH_agent">ArchWiki: GnuPG - SSH agent</a></li>
|
||||
</ol>
|
||||
<p><strong>Möglichkeit 2: Direkte FIDO-basierte SSH-Schlüssel (neuere YubiKeys)</strong>
|
||||
Neuere YubiKeys (ab Firmware 5.2.7) können direkt als FIDO-Gerät für SSH-Schlüssel vom Typ <code>ecdsa-sk</code> oder <code>ed25519-sk</code> verwendet werden. Dies erfordert OpenSSH ab Version 8.2.</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>Schlüssel generieren:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh-keygen -t ed25519-sk -C <span class="s2">"mein-yubikey-ssh-schluessel"</span>
|
||||
</span></span></code></pre></div><p><code>ssh-keygen</code> wird Sie auffordern, Ihren YubiKey zu berühren, um den Schlüssel zu erstellen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Öffentlichen Schlüssel verwenden:</strong>
|
||||
Den generierten öffentlichen Schlüssel (z.B. <code>~/.ssh/id_ed25519_sk.pub</code>) können Sie wie gewohnt auf Ihre Server in die <code>~/.ssh/authorized_keys</code>-Datei kopieren. Bei der SSH-Anmeldung wird Ihre SSH-Anwendung Sie dann auffordern, den YubiKey zu berühren.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h4 id="anwendungsfall-d-system-login-und-sudo-pam---für-fortgeschrittene-und-mit-äußerster-vorsicht">Anwendungsfall D: System-Login und Sudo (PAM) - <strong>Für Fortgeschrittene und mit äußerster Vorsicht!</strong></h4>
|
||||
<p>Sie können den YubiKey auch verwenden, um sich am System anzumelden oder <code>sudo</code>-Befehle zu autorisieren. Eine Fehlkonfiguration hier kann Sie von Ihrem System ausschließen.</p>
|
||||
<p><strong>⚠️ WARNUNG:</strong></p>
|
||||
<ul>
|
||||
<li><strong>Lassen Sie IMMER ein zweites Terminal mit einer aktiven Root-Shell (<code>sudo -i</code>) offen</strong>, während Sie die PAM-Konfiguration ändern. So können Sie Fehler sofort korrigieren.</li>
|
||||
<li>Erstellen Sie vor Änderungen an PAM-Dateien <strong>immer Backups</strong> der Originaldateien (z.B. <code>sudo cp /etc/pam.d/sudo /etc/pam.d/sudo.bak</code>).</li>
|
||||
</ul>
|
||||
<ol>
|
||||
<li>
|
||||
<p><strong>PAM-Modul installieren:</strong></p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S pam-u2f
|
||||
</span></span></code></pre></div></li>
|
||||
<li>
|
||||
<p><strong>Konfigurationsdatei für den YubiKey erstellen:</strong>
|
||||
Diese Datei ordnet Ihren YubiKey Ihrem Benutzerkonto zu.</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p ~/.config/Yubico
|
||||
</span></span><span class="line"><span class="cl">pamu2fcfg > ~/.config/Yubico/u2f_keys
|
||||
</span></span></code></pre></div><p><strong>Wichtig:</strong> Stecken Sie Ihren YubiKey ein und berühren Sie ihn, wenn die LED während der Ausführung von <code>pamu2fcfg</code> blinkt.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>PAM-Datei bearbeiten (Beispiel für <code>sudo</code>):</strong>
|
||||
Öffnen Sie die <code>sudo</code>-PAM-Konfiguration zum Bearbeiten:</p>
|
||||
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo nano /etc/pam.d/sudo
|
||||
</span></span></code></pre></div><p>Fügen Sie die folgende Zeile <strong>GANZ OBEN</strong> in die Datei ein:</p>
|
||||
<pre tabindex="0"><code>auth sufficient pam_u2f.so authfile=/home/DEIN_BENUTZER/.config/Yubico/u2f_keys
|
||||
</code></pre><ul>
|
||||
<li>Ersetzen Sie <code>DEIN_BENUTZER</code> durch Ihren tatsächlichen Linux-Benutzernamen (z.B. <code>jonnybravo</code>).</li>
|
||||
<li><code>auth sufficient</code>: Bedeutet, dass eine erfolgreiche Authentifizierung mit dem YubiKey <strong>ausreicht</strong>. 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 <code>required</code> verwenden, MUSS der YubiKey funktionieren.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Testen:</strong>
|
||||
Öffnen Sie ein <em>neues</em> Terminal (NICHT das, in dem Ihre Root-Shell läuft) und testen Sie den <code>sudo</code>-Befehl (z.B. <code>sudo ls</code>). Sie sollten aufgefordert werden, Ihren YubiKey zu berühren. Berühren Sie ihn und prüfen Sie, ob <code>sudo</code> funktioniert. Funktioniert es nicht, nutzen Sie das Root-Terminal, um die Änderungen rückgängig zu machen.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p><strong>Weitere PAM-Anwendungen:</strong>
|
||||
Ähnliche Einträge können Sie auch für den Login-Manager (z.B. <code>sddm</code>, <code>gdm</code>, <code>lightdm</code>) oder den Screensaver (z.B. <code>swaylock</code>) in deren entsprechenden PAM-Dateien (<code>/etc/pam.d/<dienstname></code>) hinzufügen. Das genaue Vorgehen kann je nach Dienst variieren.</p>
|
||||
<hr>
|
||||
<h3 id="wichtige-hinweise">Wichtige Hinweise:</h3>
|
||||
<ul>
|
||||
<li><strong>PINs und PUKs:</strong> Merken Sie sich die PINs und PUKs Ihres YubiKeys. Sie sind für viele Funktionen unerlässlich.</li>
|
||||
<li><strong>Backups:</strong> Erstellen Sie immer Backups Ihrer GPG-Schlüssel, bevor Sie diese auf den YubiKey verschieben.</li>
|
||||
<li><strong>Vorsicht bei PAM:</strong> 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).</li>
|
||||
<li><strong>Firmware:</strong> Stellen Sie sicher, dass die Firmware Ihres YubiKeys aktuell ist (<code>ykman firmware info</code>).</li>
|
||||
<li><strong>Dokumentation:</strong> Die Yubico-Dokumentation ist exzellent und sollte bei spezifischen Problemen oder fortgeschrittenen Konfigurationen konsultiert werden.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
<p>Hugo Docker CMS – <a href="/index.xml">RSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user