- Brave Browser: von Flatpak auf apt mit offiziellem Repo umgestellt - Kitty Terminal: Installation (apt) + Konfiguration in setup-desktop.sh - FaceTime HD Webcam: Firmware + DKMS-Treiber (bcwc_pcie) - WireGuard: von NetworkManager auf wg-quick umgestellt, DNS fuer m13 - SSH-Key-Generierung + automatische HTTPS→SSH Umstellung der Repos - Thunderbird: von apt auf Snap (wegen .deb-Bug) - XFCE HiDPI: Noto Sans 10pt, Panel 28px, fuer beide MBPs vereinheitlicht - Tastatur: ctrl:swap_lwin_lctl fuer Mac-like Cmd+C/V - Standard-Apps: Brave (Browser), Thunderbird (Mail) - CLAUDE.md: Doku aktualisiert Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.2 KiB
8.2 KiB
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)
- Stock Ubuntu 24.04 Server ISO auf USB-Stick (dd) - NICHT das custom ISO (build-iso.sh)!
- Interaktiv installieren: Sprache, Tastatur, WLAN im Installer einrichten, User
rene, LVM - Neustarten, einloggen als rene
curl -fsSL https://git.motocamp.de/rene/macbook-setup/raw/branch/main/setup-base.sh | sudo bash -s -- 16- Neustarten, in XFCE einloggen
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@<ip>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 alswezterm.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 heisstbatcat— Aliases in .zshrc gesetzt toolsAlias 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=quietmuss VOR dem source stehen, nicht in .p10k.zsh (wird sonst ueberschrieben)
Claude Code Multi-Profile
- Zwei Profile:
claude-priv(mail@motocamp.de) undclaude-work(rene@rm202.de) - Config-Dirs:
~/.claude-privund~/.claude-work claude-account priv|workfuer Re-Login (logout, Browser, login)- Setup:
setup-claude-profiles.shrichtet 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