From 564fd365d4fa642eac655cdf3020006bbe60aaff Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 14 Mar 2026 08:15:31 +0100 Subject: [PATCH 1/2] CLAUDE.md mit allen Projekt-Erkenntnissen fuer portable Nutzung Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..fba521f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,103 @@ +# macbook-setup - Projektkontext fuer Claude Code + +## Projekt-Uebersicht +Setup-Skripte fuer Ubuntu 24.04 auf alten MacBook Pros (Xubuntu-Desktop). +Repo liegt auf Gitea: git.motocamp.de/rene/macbook-setup + +## Hardware + +| Bezeichnung | Modell | CPU | GPU | Display | Besonderheiten | +|---|---|---|---|---|---| +| m16 | MBP 15" Mid 2014 | i7-4980HQ | Intel HD 5200 + AMD Radeon R9 M370X | Retina (2x) | AMD muss geblockt werden (amdgpu blacklist) | +| m13 | MBP 13" Late 2013 | - | nur Intel | Retina (2x) | - | + +- WLAN: Broadcom BCM4360 (kein Treiber im Ubuntu-Installer!) +- m16 erreichbar per `ssh rene@m16.local`, sudo ohne Passwort konfiguriert + +## Netzwerk +- Subnetz: 10.47.11.0/24 +- Fritz!Box: 10.47.11.1 +- Synology: 10.47.11.10 (dsm.motocamp.de) + +## Installations-Workflow (WICHTIG) +1. **Stock Ubuntu 24.04 Server ISO** auf USB-Stick (dd) - **NICHT** das custom ISO (build-iso.sh)! +2. Interaktiv installieren: Sprache, Tastatur, **WLAN im Installer einrichten**, User `rene`, LVM +3. Neustarten, einloggen als rene +4. `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/setup-base.sh | sudo bash -s -- 16` +5. Neustarten, in XFCE einloggen +6. `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/setup-desktop.sh | bash` + +**Warum kein custom ISO:** Broadcom-WLAN hat keinen Treiber in der Live-Umgebung. +Der interaktive Installer hat einen eingebauten WLAN-Schritt. Ohne Netzwerk koennen +die Setup-Skripte nicht heruntergeladen werden. + +## Arbeitsweise +- Rene verbindet sich per SSH auf das MacBook und fuehrt Befehle dort aus +- Wenn Befehle auf dem MacBook noetig sind: per `ssh rene@` verbinden und dort ausfuehren (statt den User bitten, Befehle abzutippen) + +## Paketquellen-Zuordnung +- **apt:** System-Pakete, xubuntu-desktop, Thunderbird, KeePassXC, default-jre etc. +- **Snap:** FreeCAD, LibreOffice (wegen "benutzerdefinierte Installation nicht abgeschlossen" Bug bei .deb) +- **Flatpak:** Brave Browser (wegen SIGTRAP/int3 Crash bei .deb auf aelterer HW), PrusaSlicer +- flatpak muss in setup-base.sh (root) installiert werden, nicht in setup-desktop.sh (user) + +## Geloeste Probleme (Lessons Learned) + +### Brave Browser +- .deb Version crasht mit SIGTRAP (int3) auf aelterer Hardware +- AppArmor `apparmor_restrict_unprivileged_userns=1` war NICHT die Ursache +- Loesung: Flatpak verwenden + +### LibreOffice +- .deb Version zeigt "benutzerdefinierte Installation nicht abgeschlossen" +- Loesung: Snap verwenden +- default-jre Paket noetig (behebt "javaldx failed" in Writer) + +### HiDPI / Retina Display +- GDK WindowScalingFactor=2 + DPI=96 (NICHT 128!) +- Cursor-Groesse: 48 +- xfwm4: Default-xhdpi Theme +- XFCE Compositor deaktivieren +- xfce4-display-settings deaktivieren (verursacht Endlosschleife) + +### Tastatur +- iso_layout=1 + de nodeadkeys + lv3:lalt_switch +- XFCE Keyboard-Override deaktivieren (XkbDisable) + +### Netzwerk & WLAN +- NetworkManager statt netplan fuer WLAN +- WLAN-Config beim netplan-zu-NM Umstieg erhalten +- systemd-networkd-wait-online deaktivieren +- cloud-init deaktivieren nach Installation + +### WireGuard VPN +- Konfiguration via NetworkManager .nmconnection (nicht wg-quick) +- DNS + dns-search direkt im NM-Profil +- **Key-Verwechslung:** m16/m13 hatten eigenen PublicKey als Peer-PublicKey eingetragen. NM zeigt keinen Fehler, wg show zeigt einfach keine Peers. Immer pruefen: local public key darf NICHT gleich dem Peer-PublicKey sein. +- Server-PublicKey gegen funktionierende Clients verifizieren + +### WireGuard Server-Referenz +- Server: 24.134.39.137:443 (VPS, Interface ens3) +- Server-PublicKey: mp0YKEjsUbnld3aTAnF6cSzTfixhZETQCoKiFHIcF30= +- Peer-IPs: .2=iPhoneR, .3=iPhoneM, .4=iPadR, .5=iPadM, .6=m1, .7=m16, .8=m13 +- DNS im VPN: 10.47.11.20 (Fritz!Box), 10.47.11.1 (Gateway) +- Server macht NAT/Masquerade ueber ens3 + +### Setup-Skripte +- macOS-Installer hinterlaesst macOS-sudoers: setup-base.sh ersetzt sie durch Linux-Standard +- setup-desktop.sh: set -e entfernt, Unicode durch ASCII ersetzt +- setup-desktop.sh Autostart braucht Terminal-Fenster (xfce4-terminal) fuer interaktive Eingaben +- setup.sh: read von /dev/tty bei curl|bash +- Sleep/Suspend waehrend Installation verhindern +- DPMS gestaffelt: 5/6/7 Min (Blank/Sleep/Off) + +### Zsh & Tools +- oh-my-zsh, Powerlevel10k, zsh-syntax-highlighting, MesloLGS NF Font +- PlatformIO via pipx +- h2j (HEIC-Konverter), zoxide, micro +- gitcheck Alias funktioniert in interaktiver Shell (nicht via `zsh -l -c`, das ist normal) + +## Autoinstall (archiviert, nicht mehr verwendet) +- YAML-Heredocs brechen den Parser: printf mit \n verwenden +- Kernel-Parameter-Syntax fuer autoinstall dokumentiert +- Wurde verworfen wegen fehlendem WLAN-Treiber im Live-System From fa40de742913d9f27c75e9a94b8da64b97670e3b Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 14 Mar 2026 08:18:39 +0100 Subject: [PATCH 2/2] Claude Code Permissions aktualisiert Co-Authored-By: Claude Opus 4.6 --- .claude/settings.local.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index ded820a..f328cf4 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,7 +1,36 @@ { "permissions": { "allow": [ - "Bash(git:*)" + "Bash(git:*)", + "Bash(do echo:*)", + "Bash(python3:*)", + "Bash(openssl passwd:*)", + "Bash(brew list:*)", + "Bash(brew search:*)", + "Bash(brew install:*)", + "Bash(chmod +x:*)", + "Bash(./build-iso.sh:*)", + "Bash(hdiutil attach:*)", + "Bash(curl:*)", + "Bash(xorriso:*)", + "WebFetch(domain:git.motocamp.de)", + "Bash(bash:*)", + "Bash(diskutil list:*)", + "Bash(diskutil unmountDisk:*)", + "Bash(sudo dd:*)", + "Bash(gh api:*)", + "WebFetch(domain:github.com)", + "WebFetch(domain:api.github.com)", + "WebFetch(domain:brave.com)", + "Bash(echo:*)", + "Bash(ls:*)", + "Bash(cp:*)", + "WebSearch", + "WebFetch(domain:discourse.ubuntu.com)", + "WebFetch(domain:canonical-subiquity.readthedocs-hosted.com)", + "Bash(ssh:*)", + "Bash(ping -c 2 -W 2 10.47.11.71)", + "Bash(ifconfig utun0:*)" ] } }