Adobe Creative Cloud Apps

So stellen Sie Adobe-Apps (Creative Cloud, Acrobat, Photoshop) 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.

Adobe-Paket vorbereiten

Paket in der Admin Console erstellen

  1. In der Adobe Admin Console anmelden und zu Pakete navigieren.
  2. Ein Managed Package erstellen. Dabei alle Apps auswählen, die auf den Geräten installiert werden sollen – mehrere Apps (z. B. Photoshop, Illustrator, Acrobat) werden in einer PKG gebündelt.
  3. In den Management-Optionen Remote Update Manager (RUM) aktivieren. Damit wird das RUM-Binary mit der PKG auf die Geräte ausgeliefert und steht später für Updates zur Verfügung.
  4. Das fertige Paket herunterladen. 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, wird pro App bzw. Bündel ein eigenes Paket erstellt und der jeweiligen Gerätegruppe zugewiesen. 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: Einen dauerhaften Speicherort verwenden. Der Download-Link aus der Adobe Admin Console ist temporär und session-gebunden und eignet sich nicht als feste Bezugsquelle. Das Paket einmalig herunterladen und selbst bereitstellen. Außerdem auf einen Dateinamen ohne Leerzeichen achten.


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 wird lediglich PKG_URL und APP_LABEL gesetzt.

Vollständiges Konfigurationsbeispiel anzeigen
# !/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

Dieses Skript als wiederkehrenden Relution-Job anlegen (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, wird in der Admin Console stattdessen ein Self-Service-Paket erstellt (bzw. im Paket die Optionen „Enable self-service install" und „Allow non-admins to update and install apps" aktiviert). 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.

Vollständiges Konfigurationsbeispiel anzeigen
# !/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, wird die entkoppelte LaunchDaemon-Variante aus Erstinstallation verwendet – 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: Die App wird manuell hinzugefügt, und als Erkennungsregel wird die zuvor gewählte Bundle-ID hinterlegt.

  1. In der App-Konformität manuell eine App hinzufügen (ohne PKG-Upload).
  2. Als Erkennungsregel die Bundle-ID hinterlegen, 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.

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