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
|
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
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.