Aktualisiert auch INSTALL.md mit realistischem Installationsablauf (TTY-Login nach Autoinstall, Prüfung ob setup-base.sh gelaufen ist).
165 lines
6.8 KiB
Bash
Executable file
165 lines
6.8 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 "════════════════════════════════════════════"
|
|
|
|
# ── 1. System aktualisieren ──────────────────────────────────────────────
|
|
echo -e "\n=== 1/8 System aktualisieren ==="
|
|
apt update && apt upgrade -y
|
|
ok "System aktuell"
|
|
|
|
# ── 2. Pakete installieren ───────────────────────────────────────────────
|
|
echo -e "\n=== 2/8 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 \
|
|
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
|
|
ok "FreeCAD installiert (snap)"
|
|
|
|
# ── 3. Nvidia (nur MBP 16") ──────────────────────────────────────────────
|
|
if [[ "$MODEL" == "16" ]]; then
|
|
echo -e "\n=== 3/8 Nvidia Optimus (MBP 16\") ==="
|
|
apt install -y nvidia-driver-535 nvidia-prime bbswitch-dkms
|
|
prime-select intel
|
|
ok "Nvidia installiert, Intel als Standard-GPU gesetzt"
|
|
else
|
|
echo -e "\n=== 3/8 Nvidia (MBP 13\") — übersprungen ==="
|
|
ok "Kein Nvidia auf MBP 13\""
|
|
fi
|
|
|
|
# ── 4. Brave Browser ─────────────────────────────────────────────────────
|
|
echo -e "\n=== 4/8 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/8 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
|
|
|
|
# Nvidia blacklist (nur MBP 16", optional)
|
|
if [[ "$MODEL" == "16" ]]; then
|
|
wget -q -O /tmp/blacklist-nvidia.conf "$SETUP_RAW/blacklist-nvidia.conf"
|
|
warn "MBP 16\": blacklist-nvidia.conf liegt in /tmp — nur aktivieren wenn Nvidia nicht gebraucht wird"
|
|
fi
|
|
|
|
update-initramfs -u
|
|
ok "Systemkonfigurationen gesetzt"
|
|
|
|
# ── 6. Energieeinstellungen (systemd) ────────────────────────────────────
|
|
echo -e "\n=== 6/8 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"
|
|
|
|
# ── 7. Lokalisierung ────────────────────────────────────────────────────
|
|
echo -e "\n=== 7/8 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"
|
|
|
|
# ── 8. Services aktivieren ──────────────────────────────────────────────
|
|
echo -e "\n=== 8/8 Services aktivieren ==="
|
|
systemctl enable mbpfan
|
|
systemctl enable thermald
|
|
systemctl enable tlp
|
|
# --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
|
|
sensors-detect --auto 2>/dev/null || true
|
|
ok "mbpfan, thermald, tlp aktiv (gestartet)"
|
|
else
|
|
ok "mbpfan, thermald, tlp aktiviert (Start nach Reboot)"
|
|
fi
|
|
|
|
# ── zsh als Standard-Shell für rene ──────────────────────────────────────
|
|
chsh -s /bin/zsh rene 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "════════════════════════════════════════════"
|
|
echo -e " ${GREEN}setup-base.sh abgeschlossen!${NC}"
|
|
echo "════════════════════════════════════════════"
|