macbook-setup/setup-base.sh

250 lines
10 KiB
Bash
Raw Normal View History

#!/bin/bash
# macbook-setup/setup-base.sh
# System-Setup: Pakete, Konfiguration, Locale, Services
# Verwendung: curl ... | sudo bash -s -- 16
# Kann mehrfach ausgeführt werden (idempotent)
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}"; }
fail() { echo -e "${RED}$*${NC}"; }
# ── 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 + AMD Radeon)"
read -rp "Modell [13/16]: " MODEL < /dev/tty
[[ "$MODEL" != "13" && "$MODEL" != "16" ]] && { fail "Ungültiges Modell: $MODEL"; exit 1; }
fi
ok "Modell: MacBook Pro $MODEL\""
echo ""
echo "════════════════════════════════════════════"
echo " setup-base.sh für MBP $MODEL\" startet"
echo "════════════════════════════════════════════"
# ── 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 <<EOF
blacklist radeon
blacklist amdgpu
EOF
ok "AMD Radeon/amdgpu geblockt — nur Intel i915"
else
ok "MBP 13\": nur Intel-GPU, kein Blacklisting nötig"
fi
# Fn-Tasten + ISO-Layout-Fix (iso_layout=0 verhindert ^/< Vertauschung)
echo 'options hid_apple fnmode=2 iso_layout=0' > /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 <<EOF
XKBMODEL="macbook79"
XKBLAYOUT="de"
XKBVARIANT="mac_nodeadkeys"
XKBOPTIONS="lv3:lalt_switch,terminate:ctrl_alt_bksp"
EOF
dpkg-reconfigure -f noninteractive keyboard-configuration 2>/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)"
# ── 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"
# ── 5. Pakete installieren ───────────────────────────────────────────────
echo -e "\n=== 5/11 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 \
libheif-examples imagemagick \
pipx \
zoxide \
micro \
libreoffice libreoffice-l10n-de \
thunderbird thunderbird-locale-de \
keepassxc \
htop btop \
timeshift \
vlc \
language-pack-de \
wngerman \
bc \
xfce4-terminal \
|| { fail "apt install fehlgeschlagen"; dpkg --configure -a; apt install -f -y; }
ok "Pakete installiert (apt)"
# FreeCAD via Snap
snap install freecad 2>/dev/null || warn "FreeCAD Snap übersprungen"
# ── 6. Brave Browser ─────────────────────────────────────────────────────
echo -e "\n=== 6/11 Brave Browser ==="
curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg \
https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
curl -fsSLo /etc/apt/sources.list.d/brave-browser-release.sources \
https://brave-browser-apt-release.s3.brave.com/brave-browser.sources
apt update && apt install -y brave-browser || warn "Brave Browser fehlgeschlagen"
ok "Brave installiert"
# ── 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 || 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 || warn "temp-watch.sh Download fehlgeschlagen"
ok "Systemkonfigurationen gesetzt"
# ── 8. XFCE-Konfiguration (MBP 16": Compositor aus, Display-Skalierung) ─
if [[ "$MODEL" == "16" ]]; then
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
cat > "$XFCE_XML_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
# Display-Skalierung für Retina (2x, DPI 128)
cat > "$XFCE_XML_DIR/xsettings.xml" <<XSEOF
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xsettings" version="1.0">
<property name="Gdk" type="empty">
<property name="WindowScalingFactor" type="int" value="2"/>
</property>
<property name="Xft" type="empty">
<property name="DPI" type="int" value="128"/>
</property>
</channel>
XSEOF
# 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=== 8/11 XFCE-Konfiguration — Standard (MBP 13\") ==="
fi
# ── 9. Netzwerk: NetworkManager statt netplan ─────────────────────────────
echo -e "\n=== 9/11 Netzwerk ==="
cat > /etc/netplan/01-network-manager.yaml <<NMEOF
network:
version: 2
renderer: NetworkManager
NMEOF
# Cloud-init netplan-Config entfernen (blockiert NetworkManager)
rm -f /etc/netplan/50-cloud-init.yaml
# Boot nicht auf Netzwerk warten lassen
systemctl disable systemd-networkd-wait-online.service 2>/dev/null || true
systemctl enable NetworkManager-wait-online.service 2>/dev/null || true
ok "NetworkManager als Netzwerk-Renderer"
# ── 10. Energieeinstellungen & Lokalisierung ─────────────────────────────
echo -e "\n=== 10/11 Energie & Lokalisierung ==="
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
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 "Energie & Lokalisierung gesetzt"
# ── 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 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
fi
# zsh als Standard-Shell
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
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"