From 7078299ac6ac1760c63bb1ede50016faa00c28e5 Mon Sep 17 00:00:00 2001 From: rene Date: Tue, 10 Mar 2026 06:06:01 +0100 Subject: [PATCH] Robusteres setup-base.sh: GPU-Fix zuerst, kein set -e, idempotent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - set -e entfernt (Script bricht nicht mehr bei einzelnen Fehlern ab) - GPU-Blacklist + hid_apple + Keyboard als SCHRITT 1 (vor apt install) - dpkg --configure -a VOR Paketinstallation (repariert unterbrochene Installs) - update-initramfs direkt nach Hardware-Fixes - cloud-init früh deaktivieren - Fehlerbehandlung mit || warn/fail statt Abbruch - Zusammenfassung am Ende mit nächsten Schritten Co-Authored-By: Claude Opus 4.6 --- setup-base.sh | 191 +++++++++++++++++++++++++++----------------------- 1 file changed, 102 insertions(+), 89 deletions(-) diff --git a/setup-base.sh b/setup-base.sh index 32edbbf..3bdf594 100755 --- a/setup-base.sh +++ b/setup-base.sh @@ -1,10 +1,9 @@ #!/bin/bash # macbook-setup/setup-base.sh # System-Setup: Pakete, Konfiguration, Locale, Services -# Funktioniert in chroot (Autoinstall late-commands) UND standalone -# Verwendung: sudo bash setup-base.sh [13|16] +# Verwendung: curl ... | sudo bash -s -- 16 +# Kann mehrfach ausgeführt werden (idempotent) -set -e FORGEJO="https://git.motocamp.de" SETUP_RAW="$FORGEJO/rene/macbook-setup/raw/branch/main" @@ -12,7 +11,7 @@ SETUP_RAW="$FORGEJO/rene/macbook-setup/raw/branch/main" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' ok() { echo -e "${GREEN}✓ $*${NC}"; } warn() { echo -e "${YELLOW}⚠ $*${NC}"; } -err() { echo -e "${RED}✗ $*${NC}"; exit 1; } +fail() { echo -e "${RED}✗ $*${NC}"; } # ── Modell ermitteln ───────────────────────────────────────────────────── if [[ "$1" == "13" || "$1" == "16" ]]; then @@ -23,7 +22,7 @@ else echo " 13 = MBP 13\" Late 2013" echo " 16 = MBP 16\" Mid 2014 (Intel + AMD Radeon)" read -rp "Modell [13/16]: " MODEL - [[ "$MODEL" != "13" && "$MODEL" != "16" ]] && err "Ungültiges Modell: $MODEL" + [[ "$MODEL" != "13" && "$MODEL" != "16" ]] && { fail "Ungültiges Modell: $MODEL"; exit 1; } fi ok "Modell: MacBook Pro $MODEL\"" @@ -32,18 +31,62 @@ echo "════════════════════════ echo " setup-base.sh für MBP $MODEL\" startet" echo "════════════════════════════════════════════" -# ── 0. Sleep/Suspend verhindern während Installation ───────────────────── -echo -e "\n=== 0/10 Sleep verhindern ===" +# ── 1. Kritische Hardware-Fixes ZUERST (vor allem anderen) ─────────────── +echo -e "\n=== 1/11 Hardware-Fixes ===" + +# GPU: AMD Radeon blacklisten (MBP 16") +if [[ "$MODEL" == "16" ]]; then + cat > /etc/modprobe.d/blacklist-radeon.conf < /etc/modprobe.d/hid_apple.conf +ok "hid_apple: fnmode=2, iso_layout=0" + +# Tastaturbelegung (mac_nodeadkeys: @=Alt+L, |=Alt+7, wie auf dem Mac) +cat > /etc/default/keyboard </dev/null || true +ok "Tastatur: mac_nodeadkeys" + +# cloud-init deaktivieren (blockiert Boot ohne Cloud-Provider) +if command -v cloud-init &>/dev/null; then + touch /etc/cloud/cloud-init.disabled + ok "cloud-init deaktiviert" +fi + +# initramfs aktualisieren (GPU-Blacklist + hid_apple wirksam machen) +update-initramfs -u 2>/dev/null || true +ok "initramfs aktualisiert" + +# ── 2. Sleep/Suspend verhindern während Installation ───────────────────── +echo -e "\n=== 2/11 Sleep verhindern ===" systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null || true ok "Sleep/Suspend deaktiviert (für Installation)" -# ── 1. System aktualisieren ────────────────────────────────────────────── -echo -e "\n=== 1/10 System aktualisieren ===" -apt update && apt upgrade -y +# ── 3. Eventuelle unterbrochene Installationen reparieren ──────────────── +echo -e "\n=== 3/11 dpkg reparieren ===" +dpkg --configure -a 2>/dev/null || true +apt install -f -y 2>/dev/null || true +ok "dpkg/apt repariert" + +# ── 4. System aktualisieren ────────────────────────────────────────────── +echo -e "\n=== 4/11 System aktualisieren ===" +apt update && apt upgrade -y || warn "apt upgrade hatte Probleme" ok "System aktuell" -# ── 2. Pakete installieren ─────────────────────────────────────────────── -echo -e "\n=== 2/10 Pakete installieren ===" +# ── 5. Pakete installieren ─────────────────────────────────────────────── +echo -e "\n=== 5/11 Pakete installieren ===" apt install -y \ xubuntu-desktop \ bcmwl-kernel-source \ @@ -70,69 +113,42 @@ apt install -y \ language-pack-de \ wngerman \ bc \ - xfce4-terminal + xfce4-terminal \ +|| { fail "apt install fehlgeschlagen"; dpkg --configure -a; apt install -f -y; } ok "Pakete installiert (apt)" -# FreeCAD via Snap (nicht in Ubuntu 24.04 Repos verfügbar) -snap install freecad 2>/dev/null || warn "FreeCAD Snap übersprungen (chroot)" +# FreeCAD via Snap +snap install freecad 2>/dev/null || warn "FreeCAD Snap übersprungen" -# ── 3. GPU-Konfiguration ──────────────────────────────────────────────── -if [[ "$MODEL" == "16" ]]; then - echo -e "\n=== 3/10 AMD Radeon blacklisten (MBP 16\") ===" - # MBP 15" Mid 2014 hat Intel HD 5200 + AMD Radeon R9 M370X - # Radeon verursacht Grafikartefakte — nur Intel-GPU nutzen - cat > /etc/modprobe.d/blacklist-radeon.conf < /dev/null </dev/null || true - -# Fn-Tasten + ISO-Layout-Fix (iso_layout=0 verhindert ^/< Vertauschung) -echo 'options hid_apple fnmode=2 iso_layout=0' | tee /etc/modprobe.d/hid_apple.conf > /dev/null +# ── 7. Systemkonfigurationen ───────────────────────────────────────────── +echo -e "\n=== 7/11 Systemkonfigurationen ===" # mbpfan (modellabhängig) -wget -q -O /tmp/mbpfan.conf "$SETUP_RAW/mbpfan-${MODEL}.conf" -cp /tmp/mbpfan.conf /etc/mbpfan.conf +wget -q -O /tmp/mbpfan.conf "$SETUP_RAW/mbpfan-${MODEL}.conf" && \ + cp /tmp/mbpfan.conf /etc/mbpfan.conf || warn "mbpfan.conf Download fehlgeschlagen" # Temperatur-Watch-Skript -wget -q -O /usr/local/bin/temp-watch.sh "$SETUP_RAW/temp-watch.sh" -chmod +x /usr/local/bin/temp-watch.sh +wget -q -O /usr/local/bin/temp-watch.sh "$SETUP_RAW/temp-watch.sh" && \ + chmod +x /usr/local/bin/temp-watch.sh || warn "temp-watch.sh Download fehlgeschlagen" -update-initramfs -u ok "Systemkonfigurationen gesetzt" -# ── 6. XFCE-Konfiguration (MBP 16": Compositor aus, Display-Skalierung) ─ +# ── 8. XFCE-Konfiguration (MBP 16": Compositor aus, Display-Skalierung) ─ if [[ "$MODEL" == "16" ]]; then - echo -e "\n=== 6/10 XFCE-Konfiguration (MBP 16\") ===" + echo -e "\n=== 8/11 XFCE-Konfiguration (MBP 16\") ===" XFCE_XML_DIR="/home/rene/.config/xfce4/xfconf/xfce-perchannel-xml" mkdir -p "$XFCE_XML_DIR" - # Compositor deaktivieren (verursacht Probleme ohne GPU-Beschleunigung) + # Compositor deaktivieren cat > "$XFCE_XML_DIR/xfwm4.xml" < @@ -142,7 +158,7 @@ if [[ "$MODEL" == "16" ]]; then XFEOF - # Display-Skalierung für Retina (2x, DPI 168) + # Display-Skalierung für Retina (2x, DPI 128) cat > "$XFCE_XML_DIR/xsettings.xml" < @@ -155,18 +171,18 @@ XFEOF XSEOF - # xfce4-display-settings deaktivieren (öffnet sich sonst in Endlosschleife) - dpkg-divert --local --rename --divert /usr/bin/xfce4-display-settings.real /usr/bin/xfce4-display-settings + # xfce4-display-settings deaktivieren (Endlosschleife) + dpkg-divert --local --rename --divert /usr/bin/xfce4-display-settings.real /usr/bin/xfce4-display-settings 2>/dev/null || true ln -sf /usr/bin/true /usr/bin/xfce4-display-settings chown -R 1000:1000 /home/rene/.config/xfce4 ok "XFCE: Compositor aus, Retina-Skalierung, Display-Settings deaktiviert" else - echo -e "\n=== 6/10 XFCE-Konfiguration — Standard (MBP 13\") ===" + echo -e "\n=== 8/11 XFCE-Konfiguration — Standard (MBP 13\") ===" fi -# ── 7. Netzwerk: NetworkManager statt netplan ───────────────────────────── -echo -e "\n=== 7/10 Netzwerk ===" +# ── 9. Netzwerk: NetworkManager statt netplan ───────────────────────────── +echo -e "\n=== 9/11 Netzwerk ===" cat > /etc/netplan/01-network-manager.yaml </dev/null || true systemctl enable NetworkManager-wait-online.service 2>/dev/null || true ok "NetworkManager als Netzwerk-Renderer" -# ── 8. Energieeinstellungen (systemd) ──────────────────────────────────── -echo -e "\n=== 8/10 Energieeinstellungen ===" +# ── 10. Energieeinstellungen & Lokalisierung ───────────────────────────── +echo -e "\n=== 10/11 Energie & Lokalisierung ===" tee /etc/systemd/sleep.conf > /dev/null </dev/null || ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime -ok "Lokalisierung: Deutsch / Berlin" +ok "Energie & Lokalisierung gesetzt" -# ── 10. Services aktivieren ────────────────────────────────────────────── -echo -e "\n=== 10/10 Services aktivieren ===" -systemctl enable mbpfan -systemctl enable thermald -systemctl enable tlp -systemctl enable ssh -# --now nur wenn nicht in chroot +# ── 11. Services aktivieren ────────────────────────────────────────────── +echo -e "\n=== 11/11 Services & Shell ===" +systemctl enable mbpfan 2>/dev/null || true +systemctl enable thermald 2>/dev/null || true +systemctl enable tlp 2>/dev/null || true +systemctl enable ssh 2>/dev/null || true + +# Services starten (nur wenn nicht in chroot) if [[ "$(stat -c %d:%i /)" == "$(stat -c %d:%i /proc/1/root/.)" ]] 2>/dev/null; then - systemctl start mbpfan - systemctl start thermald - systemctl start ssh + systemctl start mbpfan 2>/dev/null || true + systemctl start thermald 2>/dev/null || true + systemctl start ssh 2>/dev/null || true sensors-detect --auto 2>/dev/null || true - ok "mbpfan, thermald, tlp, ssh aktiv (gestartet)" -else - ok "mbpfan, thermald, tlp, ssh aktiviert (Start nach Reboot)" fi -# ── cloud-init deaktivieren (kein Cloud-Provider, blockiert sonst den Boot) ── -if command -v cloud-init &>/dev/null; then - touch /etc/cloud/cloud-init.disabled - ok "cloud-init deaktiviert" -fi - -# ── zsh als Standard-Shell für rene ────────────────────────────────────── +# zsh als Standard-Shell chsh -s /bin/zsh rene 2>/dev/null || true -# ── Sleep wieder erlauben ──────────────────────────────────────────────── +# Sleep wieder erlauben systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null || true +ok "Services aktiviert, zsh als Standard-Shell" + +# ── Zusammenfassung ────────────────────────────────────────────────────── echo "" echo "════════════════════════════════════════════" echo -e " ${GREEN}setup-base.sh abgeschlossen!${NC}" echo "════════════════════════════════════════════" +echo "" +echo "Nächste Schritte:" +echo " 1. sudo reboot" +echo " 2. In XFCE einloggen" +echo " 3. Terminal öffnen und setup-desktop.sh starten:" +echo " curl -fsSL $SETUP_RAW/setup-desktop.sh | bash"