# 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, KeePassXC, Kitty, Brave Browser, default-jre etc. - **Snap:** FreeCAD, LibreOffice (wegen "benutzerdefinierte Installation nicht abgeschlossen" Bug bei .deb), Bitwarden, Thunderbird - **Flatpak:** PrusaSlicer - flatpak muss in setup-base.sh (root) installiert werden, nicht in setup-desktop.sh (user) ## Geloeste Probleme (Lessons Learned) ### Brave Browser - .deb Version crashte frueher mit SIGTRAP (int3) auf aelterer Hardware - Inzwischen funktioniert .deb/apt mit offiziellem Brave-Repo - Loesung: apt mit Brave-Repo (in setup-base.sh) ### 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 - GTK-Schrift: Noto Sans 10, Titelschrift: Noto Sans Bold 10 - Panel-Hoehe: 28px (passend zur Schriftgroesse bei 2x-Skalierung) - Referenz-Schriftgroesse: Kitty 18pt MesloLGS NF — Systemschriften sollen visuell dazu passen - xfwm4: Default-xhdpi Theme - XFCE Compositor deaktivieren - xfce4-display-settings deaktivieren (verursacht Endlosschleife) ### FaceTime HD Webcam - Broadcom 1570, haengt am PCIe-Bus (nicht USB) — kein Treiber im Kernel - Firmware: github.com/patjak/facetimehd-firmware (extrahiert aus macOS-Treiber) - Treiber: github.com/patjak/bcwc_pcie, installiert via DKMS (automatischer Rebuild bei Kernel-Updates) - Modul: facetimehd, autoload via /etc/modules-load.d/facetimehd.conf ### Tastatur - iso_layout=1 + de (mit Dead Keys, NICHT nodeadkeys) + lv3:lalt_switch + ctrl:swap_lwin_lctl - nodeadkeys verhindert Akzent-Kombination (´e statt é) - ctrl:swap_lwin_lctl tauscht Cmd und Ctrl (Mac-like Copy/Paste mit Cmd+C/V) - XFCE Keyboard-Override deaktivieren (XkbDisable) ### Terminal - Kitty als Standard-Terminal (statt xfce4-terminal) - xfce4-terminal bleibt installiert als Fallback - Kitty Config: MesloLGS NF 18pt, copy_or_interrupt fuer Cmd+C (kopiert bei Selektion, sonst SIGINT) - xfce4-terminal unterstuetzt kein Remapping von Ctrl+C/V auf Copy/Paste ### Git / SSH - SSH-Key (ed25519) wird in setup-desktop.sh generiert - Forgejo SSH laeuft auf dsm.motocamp.de:2222 (nicht git.motocamp.de, nicht Port 22) - Alle Repos werden automatisch von HTTPS auf SSH umgestellt - git credential.helper store als Fallback bis SSH-Key in Forgejo hinterlegt ist ### 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 - /etc/hosts: dsm.motocamp.de → 10.47.11.10 (Synology direkt), git.motocamp.de → 10.47.11.23 (NPM/macvlan, da Gitea hinter Reverse Proxy) ### WireGuard VPN - Konfiguration via wg-quick (Config in /etc/wireguard/wg-vps.conf) - DNS = 10.47.11.20 (Pihole) direkt in der WireGuard-Config - Autostart via systemctl enable wg-quick@wg-vps - **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 ### EFI / Boot - auto-boot EFI-Variable auf false setzen: verhindert automatischen Start beim Anstecken des Netzteils - Variable: /sys/firmware/efi/efivars/auto-boot-7c436110-ab2a-4bbb-a880-fe41995c9f82 ### 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) ### GNOME 48 Panel hell trotz Dark-Mode (Asahi) - Panel bleibt hell, egal ob color-scheme auf prefer-dark steht (sowohl native Top-Bar als auch Dash to Panel) - Dash-to-Panel custom-bg macht Panel dunkel, aber Schrift auch dunkel (unlesbar) - Loesung: user-theme Extension + minimales DarkPanel Shell-Theme (~/.local/share/themes/DarkPanel/gnome-shell/gnome-shell.css) - CSS nutzt `@media (prefers-color-scheme: dark)` damit Panel im Light-Mode wieder dem System folgt - **Stolperstein:** Extension muss explizit aktiviert werden (`gnome-extensions enable user-theme@...`) — gsettings allein reicht nicht - gnome-shell-extension-user-theme muss per dnf installiert sein ### WezTerm - Gemeinsames Terminal fuer macOS (ersetzt iTerm2) und Linux (ersetzt xfce4-terminal) - Config: `~/.wezterm.lua` (liegt auch im macbook-setup Repo als `wezterm.lua`) - Catppuccin Macchiato, Hintergrund #0e0d0b, Schrift #cad3f5, MesloLGS NF - macOS: `brew install --cask wezterm`, Linux: apt-Repo apt.fury.io/wez (setup-base.sh) - Bestehende Maschinen aktualisieren: `curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/wezterm.lua -o ~/.wezterm.lua` ### Zsh & Tools - oh-my-zsh, Powerlevel10k, zsh-syntax-highlighting, MesloLGS NF Font - PlatformIO via pipx - h2j (HEIC-Konverter), zoxide, micro - Terminal-Tools (apt): bat, eza, fd-find, fzf, ripgrep, tldr, ncdu, duf - Ubuntu: fd heisst `fdfind`, bat heisst `batcat` — Aliases in .zshrc gesetzt - `tools` Alias zeigt Cheat-Sheet mit allen Befehlen, Aliases und Skripten - gitcheck Alias funktioniert in interaktiver Shell (nicht via `zsh -l -c`, das ist normal) - Powerlevel10k Instant Prompt: `POWERLEVEL9K_INSTANT_PROMPT=quiet` muss VOR dem source stehen, nicht in .p10k.zsh (wird sonst ueberschrieben) ### Claude Code Multi-Profile - Zwei Profile: `claude-priv` (mail@motocamp.de) und `claude-work` (rene@rm202.de) - Config-Dirs: `~/.claude-priv` und `~/.claude-work` - `claude-account priv|work` fuer Re-Login (logout, Browser, login) - Setup: `setup-claude-profiles.sh` richtet Verzeichnisse und Shell-Aliases ein ### asciiquarium - benoetigt Perl-Modul Term::Animation (nicht in apt verfuegbar) - Abhaengigkeiten: libcurses-perl (apt) + Term::Animation (CPAN) ## 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