Post

Checkliste: macOS Fleet-Bootstrap mit Homebrew + MDM (wiederholbar, auditierbar)

Checkliste: macOS Fleet-Bootstrap mit Homebrew + MDM (wiederholbar, auditierbar)

Einen neuen Mac in den Unternehmenseinsatz zu bringen, sollte möglichst automatisiert und reproduzierbar ablaufen. Mit Homebrew, MDM und einer durchdachten Bootstrap-Checkliste lässt sich das effizient umsetzen. Hier ist mein bewährter Ablauf. Diese Checkliste zeigt, wie du neue Macs standardisiert bootstrapst: MDM Enrollment, Security-Baseline, Homebrew, Standard-Tools, Logging – mit klaren Validierungsschritten und einem minimalen Bootstrap-Script.

Ziel

  • Wiederholbar: Jeder Mac kommt in einen definierten Zustand.
  • Auditierbar: Du kannst nachweisen, was installiert/konfiguriert wurde.
  • Support-fähig: Standardisierte Tools/Versionen reduzieren Tickets.

Vorbereitungen (einmalig)

1) Definiere deine Baseline

Beispiele:

  • FileVault: an
  • Firewall: an
  • Updates: automatisch
  • EDR: installiert + healthy
  • Admin-Rechte: restriktiv

2) Git-Repo für Bootstrap

Strukturvorschlag:

1
2
3
4
5
mac-bootstrap/
  Brewfile
  bootstrap.sh
  profiles/
  docs/

3) Brewfile erstellen

1
brew bundle dump --file=Brewfile --force

Oder direkt pflegen, z. B.:

1
2
3
4
5
6
7
8
tap "homebrew/cask"

brew "git"
brew "jq"
brew "python"

cask "visual-studio-code"
cask "iterm2"

Schritt-für-Schritt: Gerät bootstrapen

Schritt 1: MDM Enrollment verifizieren

Check:

1
profiles status -type enrollment

Sollte „MDM enrollment: Yes“ liefern.

Schritt 2: OS-Version und Security-Status prüfen

1
2
3
sw_vers
fdesetup status
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

Schritt 3: Homebrew installieren (idempotent)

1
2
3
4
5
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# shellenv dauerhaft setzen (zsh)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
source ~/.zprofile

Schritt 4: Standard-Tools via Brewfile ausrollen

1
2
3
brew update
brew bundle --file ./Brewfile
brew cleanup

Schritt 5: Konfiguration setzen (Beispiele)

Setze Einstellungen möglichst via Configuration Profiles (MDM), nicht per Script. Für lokale Defaults (nur wenn nötig):

1
2
3
# Beispiel: Finder zeigt Pfad
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
killall Finder

Schritt 6: Logging/Auditing sicherstellen

  • Inventarisierung über MDM (Apps/Versionen)
  • Optional zusätzlich lokales Logfile im Bootstrap

Minimaler Bootstrap-Wrapper:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env bash
set -euo pipefail

LOG="/var/log/mac-bootstrap.log"
exec > >(tee -a "$LOG") 2>&1

echo "== $(date -Iseconds) bootstrap start =="

if ! command -v brew >/dev/null 2>&1; then
  echo "Homebrew missing"; exit 1
fi

brew update
brew bundle --file "/path/to/Brewfile"

echo "== $(date -Iseconds) bootstrap done =="

Validierung nach dem Bootstrap

Tooling

1
2
brew --version
brew bundle check --file ./Brewfile

Security-Baseline

1
2
fdesetup status
systemextensionsctl list | head

Häufige Abweichungen

  • Brew installiert, aber PATH fehlt → brew shellenv in .zprofile
  • MDM Profile nicht angewendet → Check in MDM-Console, profiles show

Betrieb: Update-Strategie

  • Monatliche Wartungsfenster: brew update && brew upgrade
  • Freeze kritischer Tools (z. B. Terraform) per Version Pinning/Artifact Mirror
  • Dokumentiere Changes (Changelog im Repo)

Takeaways

  • Bootstrap ist ein Produkt: Repo, Reviews, Releases, Changelog.
  • Nutze MDM für Policies/Profiles; Scripts nur für „Bootstrapping“.
  • Ein Brewfile + brew bundle ist der einfachste Weg zu reproduzierbaren Macs.
  • Validierung ist Pflicht: brew bundle check + Security-Checks.
  • Logging (/var/log/...) macht Support und Audits deutlich einfacher.
This post is licensed under CC BY 4.0 by the author.