macbook-setup/setup-base.sh
rene de67fff30c Fix MBP 16": Nvidia blacklisten, nomodeset, Compositor aus, SSH, sudo
Probleme beim ersten MBP 16" Setup behoben:
- Nvidia-Treiber werden NICHT mehr installiert, stattdessen alle
  Nvidia-Module komplett geblockt (blacklist-nvidia.conf)
- GRUB: nomodeset fuer MBP 16" (verhindert GPU-Artefakte)
- XFCE Compositor deaktiviert fuer MBP 16"
- Sleep/Suspend waehrend Installation verhindert
- openssh-server in Paketliste (SSH-Zugriff ab erstem Boot)
- user-data: rene zur sudo-Gruppe, install-server: true
- FreeCAD Snap: Fehler in chroot abfangen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:22:19 +01:00

200 lines
8.3 KiB
Bash
Executable file

#!/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]
set -e
FORGEJO="https://git.motocamp.de"
SETUP_RAW="$FORGEJO/rene/macbook-setup/raw/branch/main"
# ── Farben ──────────────────────────────────────────────────────────────
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; }
# ── Modell ermitteln ─────────────────────────────────────────────────────
if [[ "$1" == "13" || "$1" == "16" ]]; then
MODEL="$1"
else
echo ""
echo "Welches MacBook Pro?"
echo " 13 = MBP 13\" Late 2013"
echo " 16 = MBP 16\" Mid 2014 (Intel + Nvidia)"
read -rp "Modell [13/16]: " MODEL
[[ "$MODEL" != "13" && "$MODEL" != "16" ]] && err "Ungültiges Modell: $MODEL"
fi
ok "Modell: MacBook Pro $MODEL\""
echo ""
echo "════════════════════════════════════════════"
echo " setup-base.sh für MBP $MODEL\" startet"
echo "════════════════════════════════════════════"
# ── 0. Sleep/Suspend verhindern während Installation ─────────────────────
echo -e "\n=== 0/9 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/9 System aktualisieren ==="
apt update && apt upgrade -y
ok "System aktuell"
# ── 2. Pakete installieren ───────────────────────────────────────────────
echo -e "\n=== 2/9 Pakete installieren ==="
apt install -y \
xubuntu-desktop \
bcmwl-kernel-source \
mbpfan thermald \
lm-sensors xfce4-sensors-plugin \
tlp tlp-rdw \
git curl wget stow \
zsh neovim \
build-essential \
python3 python3-pip python3-venv \
nodejs npm \
wireguard wireguard-tools \
openssh-server \
libreoffice libreoffice-l10n-de \
thunderbird thunderbird-locale-de \
keepassxc \
htop btop \
timeshift \
vlc \
language-pack-de \
wngerman \
bc \
xfce4-terminal
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)"
ok "FreeCAD installiert (snap)"
# ── 3. Nvidia blacklisten (MBP 16") ─────────────────────────────────────
if [[ "$MODEL" == "16" ]]; then
echo -e "\n=== 3/9 Nvidia blacklisten (MBP 16\") ==="
cat > /etc/modprobe.d/blacklist-nvidia.conf <<NVEOF
blacklist nouveau
blacklist nvidia
blacklist nvidia_drm
blacklist nvidia_modeset
NVEOF
ok "Nvidia-Module komplett geblockt"
else
echo -e "\n=== 3/9 Nvidia (MBP 13\") — übersprungen ==="
ok "Kein Nvidia auf MBP 13\""
fi
# ── 4. Brave Browser ─────────────────────────────────────────────────────
echo -e "\n=== 4/9 Brave Browser ==="
curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg \
https://brave-keyring.s3.brave.com/brave-browser-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] \
https://brave-releases.s3.brave.com/ stable main" \
| tee /etc/apt/sources.list.d/brave-browser-release.list
apt update && apt install -y brave-browser
ok "Brave installiert"
# ── 5. Konfigurationsdateien ─────────────────────────────────────────────
echo -e "\n=== 5/9 Systemkonfigurationen ==="
# Tastaturbelegung
tee /etc/default/keyboard > /dev/null <<EOF
XKBMODEL="macbook79"
XKBLAYOUT="de"
XKBVARIANT="mac"
XKBOPTIONS="lv3:lalt_switch,terminate:ctrl_alt_bksp"
EOF
# Fn-Tasten
echo 'options hid_apple fnmode=2' | tee /etc/modprobe.d/hid_apple.conf > /dev/null
# mbpfan (modellabhängig)
wget -q -O /tmp/mbpfan.conf "$SETUP_RAW/mbpfan-${MODEL}.conf"
cp /tmp/mbpfan.conf /etc/mbpfan.conf
# 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
# GRUB: nomodeset für MBP 16" (Nvidia/GPU-Probleme verhindern)
if [[ "$MODEL" == "16" ]]; then
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"/' /etc/default/grub
update-grub 2>/dev/null || true
ok "GRUB: nomodeset gesetzt (MBP 16\")"
fi
update-initramfs -u
ok "Systemkonfigurationen gesetzt"
# ── 6. XFCE Compositor deaktivieren (MBP 16") ────────────────────────────
if [[ "$MODEL" == "16" ]]; then
echo -e "\n=== 6/9 XFCE Compositor deaktivieren ==="
XFWM4_DIR="/home/rene/.config/xfce4/xfconf/xfce-perchannel-xml"
mkdir -p "$XFWM4_DIR"
cat > "$XFWM4_DIR/xfwm4.xml" <<XFEOF
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfwm4" version="1.0">
<property name="general" type="empty">
<property name="use_compositing" type="bool" value="false"/>
</property>
</channel>
XFEOF
chown -R 1000:1000 /home/rene/.config/xfce4
ok "XFCE Compositor deaktiviert (MBP 16\")"
else
echo -e "\n=== 6/9 XFCE Compositor — beibehalten (MBP 13\") ==="
fi
# ── 7. Energieeinstellungen (systemd) ────────────────────────────────────
echo -e "\n=== 7/9 Energieeinstellungen ==="
tee /etc/systemd/sleep.conf > /dev/null <<EOF
[Sleep]
HibernateDelaySec=1800
EOF
tee -a /etc/systemd/logind.conf > /dev/null <<EOF
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=ignore
EOF
ok "Energieeinstellungen gesetzt"
# ── 8. Lokalisierung ────────────────────────────────────────────────────
echo -e "\n=== 8/9 Lokalisierung ==="
locale-gen de_DE.UTF-8
update-locale LANG=de_DE.UTF-8 LC_ALL=de_DE.UTF-8
timedatectl set-timezone Europe/Berlin 2>/dev/null || ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
ok "Lokalisierung: Deutsch / Berlin"
# ── 9. Services aktivieren ──────────────────────────────────────────────
echo -e "\n=== 9/9 Services aktivieren ==="
systemctl enable mbpfan
systemctl enable thermald
systemctl enable tlp
systemctl enable ssh
# --now 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
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
# ── zsh als Standard-Shell für rene ──────────────────────────────────────
chsh -s /bin/zsh rene 2>/dev/null || true
# ── Sleep wieder erlauben ────────────────────────────────────────────────
systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target 2>/dev/null || true
echo ""
echo "════════════════════════════════════════════"
echo -e " ${GREEN}setup-base.sh abgeschlossen!${NC}"
echo "════════════════════════════════════════════"