docs

Adobe CC & Acrobat

So stellen Sie Adobe-Apps (Creative Cloud, Acrobat) auf macOS-Geräten über Relution bereit und halten sie mit dem Remote Update Manager aktuell.

Adobe Apps lassen sich nicht wie eine klassische native App über Relution installieren. Der Grund: Adobe Pakete sind keine einfachen stillen Installer, sondern starten während der Installation eigene Hintergrundprozesse (Creative Cloud Desktop / HyperDrive). Diese laufen im eingeschränkten Kontext des nativen MDM-Befehls nicht zuverlässig durch – der Upload der PKG gelingt, die Installation bleibt jedoch hängen oder scheitert.

Daher wird die Installation über ein Skript ausgeführt (macOS Companion). Updates werden zentral über den Remote Update Manager gesteuert.


Warum ein Skript nötig ist

  • Installation: installer -pkg … -target / läuft im vollen Root-Kontext, so wie Adobe es dokumentiert. Der angemeldete Benutzer benötigt dafür keine Administratorrechte.
  • Kein Datei-Push: Der macOS Companion liefert keine Datei mit. Die PKG muss daher per Netzwerk bezogen (heruntergeladen) werden.
  • Updates: Im Managed-Paket ist das Auto-Update für Endnutzer deaktiviert. Aktualisierungen erfolgen über einen wiederkehrenden Update-Job, der den Remote Update Manager (RUM) aufruft – siehe Laufende Updates.

Adobe-Paket vorbereiten

Paket in der Admin Console erstellen #

  1. Melden Sie sich in der Adobe Admin Console an und navigieren Sie zu Pakete.
  2. Erstellen Sie ein Managed Package. Wählen Sie dabei alle Apps aus, die auf den Geräten installiert werden sollen – mehrere Apps (z. B. Photoshop, Illustrator, Acrobat) werden in einer PKG gebündelt.
  3. Aktivieren Sie in den Management-Optionen Remote Update Manager (RUM). Damit wird das RUM-Binary mit der PKG auf die Geräte ausgeliefert und steht später für Updates zur Verfügung.
  4. Laden Sie das fertige Paket herunter. Der Installer liegt im Paketordner unter Build/<Paketname>_Install.pkg.

Hinweis zur Aufteilung: Erhalten alle Nutzer denselben App-Satz, genügt ein kombiniertes Paket. Sollen verschiedene Gruppen unterschiedliche Apps erhalten, erstellen Sie pro App bzw. Bündel ein eigenes Paket und weisen es der jeweiligen Gerätegruppe zu. Der Update-Job (siehe unten) bleibt in beiden Fällen derselbe.


Bereitstellung der PKG

Da der Companion keine Datei mitliefert, muss die PKG an einem per Netzwerk erreichbaren Ort liegen, von dem das Skript sie herunterlädt – z. B. ein interner Webserver oder Cloud-Storage.

Wichtig: Verwenden Sie einen dauerhaften Speicherort. Der Download-Link aus der Adobe Admin Console ist temporär und session-gebunden und eignet sich nicht als feste Bezugsquelle. Laden Sie das Paket einmalig herunter und stellen Sie es selbst bereit. Achten Sie außerdem auf einen Dateinamen ohne Leerzeichen.


Skripte zur Automatisierung

Der Rollout besteht aus zwei Relution-Jobs: einer einmaligen Erstinstallation und einem wiederkehrenden Update-Job.

Erstinstallation (empfohlen)

Adobe-Pakete sind oft mehrere Gigabyte groß. Ein direkter Download innerhalb eines Relution-Skripts kann das Skript-Timeout überschreiten und wird dann abgebrochen. Das folgende Skript umgeht das: Es installiert einen LaunchDaemon, der Download, Installation und den ersten Update-Lauf entkoppelt im Hintergrund ausführt. Das Relution-Skript selbst ist in Sekunden fertig.

Pro Paket setzen Sie lediglich PKG_URL und APP_LABEL.

#!/bin/bash
#
# Adobe Managed Deployment – JOB 1: Erstinstallation
# Ausführung über den Relution macOS Companion.

set -e

# --- Konfiguration (pro Paket anpassen) ---
PKG_URL="https://ihr-share.example/Photoshop_Install.pkg"
APP_LABEL="photoshop"   # nur für Log/Daemon-Name

LABEL="io.relution.adobe.${APP_LABEL}"
WORKER="/usr/local/relution/${LABEL}.sh"
PLIST="/Library/LaunchDaemons/${LABEL}.plist"
LOG="/var/log/relution_adobe_deploy.log"

if [ "$(id -u)" -ne 0 ]; then
    echo "FEHLER: muss als root laufen." >&2
    exit 1
fi

mkdir -p "$(dirname "$WORKER")"

cat > "$WORKER" <<WORKEOF
#!/bin/bash
PKG_URL="${PKG_URL}"
APP_LABEL="${APP_LABEL}"
RUM_BIN="/usr/local/bin/RemoteUpdateManager"
PLIST="${PLIST}"
WORKER="${WORKER}"
LOG="${LOG}"

log() { echo "\$(date '+%Y-%m-%d %H:%M:%S') [\$APP_LABEL] \$1" | tee -a "\$LOG"; }
log "=== Erstinstallation gestartet ==="

BEFORE="\$(find /Applications -maxdepth 2 -iname "Adobe*.app" 2>/dev/null | wc -l | tr -d ' ')"

TMP="\$(mktemp -d /tmp/adobe.XXXXXX)"
PKG="\$TMP/install.pkg"
log "Lade PKG: \$PKG_URL"
if caffeinate -i curl -fL --retry 4 --retry-delay 10 -C - "\$PKG_URL" -o "\$PKG" >>"\$LOG" 2>&1; then
    log "Download ok. Installiere..."
    installer -pkg "\$PKG" -target / >>"\$LOG" 2>&1 && log "installer erfolgreich." || log "FEHLER: installer (\$?)."
else
    log "FEHLER: Download fehlgeschlagen (\$?)."
fi
rm -rf "\$TMP"

if [ -x "\$RUM_BIN" ]; then
    log "Starte RemoteUpdateManager..."
    "\$RUM_BIN" --action=install >>"\$LOG" 2>&1
    log "RUM beendet (RC \$?)."
else
    log "WARNUNG: RUM nicht gefunden."
fi

AFTER="\$(find /Applications -maxdepth 2 -iname "Adobe*.app" 2>/dev/null | wc -l | tr -d ' ')"
log "Adobe-Apps: vorher \$BEFORE, nachher \$AFTER"
find /Applications -maxdepth 2 -iname "Adobe*.app" 2>/dev/null | while read -r a; do
    mdimport "\$a" 2>/dev/null || true
    VER="\$(defaults read "\$a/Contents/Info.plist" CFBundleShortVersionString 2>/dev/null || echo '?')"
    log "  - \$a (Version \$VER)"
done

log "=== Fertig, räume auf ==="
launchctl bootout system "\$PLIST" 2>/dev/null || true
rm -f "\$PLIST" "\$WORKER"
WORKEOF

chmod 700 "$WORKER"

cat > "$PLIST" <<PLISTEOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key><string>${LABEL}</string>
    <key>ProgramArguments</key>
    <array><string>/bin/bash</string><string>${WORKER}</string></array>
    <key>RunAtLoad</key><true/>
    <key>StandardErrorPath</key><string>${LOG}</string>
</dict>
</plist>
PLISTEOF

chown root:wheel "$PLIST"
chmod 644 "$PLIST"

launchctl bootout system "$PLIST" 2>/dev/null || true
launchctl bootstrap system "$PLIST"
echo "Bootstrap ok: $LABEL gestartet."
exit 0

Das Ergebnis wird protokolliert unter /var/log/relution_adobe_deploy.log.

Laufende Updates #

Legen Sie dieses Skript als wiederkehrenden Relution-Job an (z. B. wöchentlich). Es benötigt keinen Download – der Remote Update Manager bezieht die Updates direkt von Adobe. Ohne Angabe von Produkten werden alle installierten Adobe-Apps gemeinsam aktualisiert; ein separater Job pro App ist nicht nötig.

#!/bin/bash
RUM_BIN="/usr/local/bin/RemoteUpdateManager"
RUM_PRODUCTS=""   # leer = alle Apps; sonst SAP-Codes, z. B. "APRO,PHSP"
LOG="/var/log/relution_adobe_update.log"

log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$LOG"; }

if [ ! -x "$RUM_BIN" ]; then
    log "FEHLER: RUM nicht gefunden – ist eine Adobe-App installiert?"
    exit 2
fi

log "=== RUM-Update gestartet ==="
if [ -n "$RUM_PRODUCTS" ]; then
    "$RUM_BIN" --action=install --productVersions="$RUM_PRODUCTS" >>"$LOG" 2>&1
else
    "$RUM_BIN" --action=install >>"$LOG" 2>&1
fi
log "RUM beendet (RC $?)."

SAP-Codes für die gezielte Aktualisierung einzelner Apps: APRO (Acrobat), PHSP (Photoshop), ILST (Illustrator), IDSN (InDesign), PPRO (Premiere Pro), AEFT (After Effects).

Alternative: Self-Service #

Sollen die Nutzer ihre Adobe Apps selbst installieren, statt sie zentral auszurollen, erstellen Sie in der Admin Console stattdessen ein Self-Service-Paket (bzw. aktivieren im Paket die Optionen „Enable self-service install" und „Allow non-admins to update and install apps"). Das Skript installiert dann nur die Creative Cloud Desktop App; die eigentlichen Apps wählt und installiert der Nutzer anschließend selbst. Voraussetzung ist eine Named-User-Lizenzierung mit passenden Produktprofilen. Ein zentraler Update-Job entfällt, da Updates über die Desktop App laufen.

#!/bin/bash
#
# Self-Service – installiert nur die Creative Cloud Desktop App.
# Die eigentlichen Apps installiert der Nutzer anschließend selbst.

PKG_URL="https://ihr-share.example/CreativeCloud_Install.pkg"

if [ "$(id -u)" -ne 0 ]; then
    echo "FEHLER: muss als root laufen." >&2
    exit 1
fi

TMP="$(mktemp -d /tmp/ccda.XXXXXX)"
PKG="$TMP/install.pkg"

echo "Lade Creative Cloud Desktop App..."
if caffeinate -i curl -fL --retry 4 --retry-delay 10 -C - "$PKG_URL" -o "$PKG"; then
    installer -pkg "$PKG" -target /
    RC=$?
else
    echo "FEHLER: Download fehlgeschlagen."
    rm -rf "$TMP"
    exit 1
fi
rm -rf "$TMP"

if [ "$RC" -eq 0 ]; then
    echo "Creative Cloud Desktop App installiert."
    exit 0
else
    echo "FEHLER: Installation fehlgeschlagen (RC $RC)."
    exit 1
fi

Hinweis: Ist das Paket sehr groß und läuft der direkte Download ins Skript-Timeout, verwenden Sie die entkoppelte LaunchDaemon-Variante aus Erstinstallation – dort einfach PKG_URL auf das Creative-Cloud-Desktop-App-Paket setzen und den RUM-Schritt weglassen.


Statusüberwachung über App-Konformität #

In diesem Setup erfolgt die Installation über das Skript – es wird keine PKG in Relution hochgeladen. Die App-Konformität dient daher nicht der Verteilung, sondern der Statusüberwachung: Sie fügen die App manuell hinzu und hinterlegen als Erkennungsregel die zuvor gewählte Bundle-ID.

  1. Fügen Sie in der App-Konformität manuell eine App hinzu (ohne PKG-Upload).
  2. Hinterlegen Sie als Erkennungsregel die Bundle-ID, z. B. com.adobe.acc.AdobeCreativeCloud.
  3. Relution prüft regelmäßig anhand dieser ID, ob die App auf dem Gerät vorhanden ist.
  4. Geräte ohne die App werden als Nicht konform markiert. Dort kann anschließend das Installations-Skript (erneut) ausgeführt werden.

App-spezifische Erkennung (z. B. nur Photoshop): Hierfür stellt das Inventar keinen eigenen Marker bereit. In diesem Fall lässt sich nur der generische CC-Nachweis verwenden, der das Paket (nicht die einzelne App) bestätigt.


Hinweise #

  • Lizenzierung (Named User Licensing): Nach der Installation meldet sich der Benutzer beim ersten Start mit seiner Adobe-ID an. Jede App benötigt ein passendes Produktprofil in der Admin Console – ohne Berechtigung ist die App zwar installiert, aber nicht nutzbar.
  • Major-Upgrades: Der Remote Update Manager aktualisiert nur innerhalb der installierten Hauptversion (Basis- und Sicherheitsupdates). Der Wechsel auf eine neue Jahresgeneration erfordert ein neues Paket.
  • Bildungsumgebungen: Für Adobe-Bildungskunden ist das automatische Update für Endnutzer nicht verfügbar; die Steuerung über den Remote Update Manager ist hier der vorgesehene Weg.
  • Spotlight: Das Erstinstallations-Skript indexiert installierte Apps per mdimport, damit sie sofort über die Spotlight-Suche auffindbar sind – nicht nur im Finder.

Top