port OFFSITE backup to MacOS script with spotlight launcher

This commit is contained in:
trnq1ll0 committed 2026-10-21 09:30:43 +02:00
1 parent 9f0eafee19
commit 6b37013994
3 files changed
+264

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
#!/bin/bash
# Erstellt ~/Applications/BFDS Offsite Backup.app, damit das Backup per
# Spotlight ("bfds offsite backup") gestartet werden kann. Die App oeffnet
# ein Terminal-Fenster und startet dort launch-backup.sh (Header, dann sudo-Start)
# (Passwort-Abfragen und Ausgabe brauchen ein Terminal).
# Kompatibel mit dem mit macOS ausgelieferten Bash 3.2.
set -euo pipefail
APP_NAME="${APP_NAME:-BFDS Offsite Backup}"
APP_DIR="${APP_DIR:-$HOME/Applications}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BACKUP_SCRIPT="$SCRIPT_DIR/launch-backup.sh"
APP_PATH="$APP_DIR/$APP_NAME.app"
[ -x "$BACKUP_SCRIPT" ] || { echo "FEHLER: $BACKUP_SCRIPT nicht ausfuehrbar" >&2; exit 1; }
mkdir -p "$APP_DIR"
rm -rf "$APP_PATH"
# Pfad fuer AppleScript-String und Shell quoten
SHELL_CMD="$(printf '%q' "$BACKUP_SCRIPT")"
SHELL_CMD="${SHELL_CMD//\\/\\\\}"
SHELL_CMD="${SHELL_CMD//\"/\\\"}"
/usr/bin/osacompile -o "$APP_PATH" <<EOF
set wasRunning to application "Terminal" is running
tell application "Terminal"
activate
if wasRunning then
do script "$SHELL_CMD"
else
-- Terminal oeffnet beim Start selbst ein Fenster: dieses mitverwenden
repeat 50 times
if (count of windows) > 0 then exit repeat
delay 0.1
end repeat
if (count of windows) > 0 then
do script "$SHELL_CMD" in window 1
else
do script "$SHELL_CMD"
end if
end if
end tell
EOF
echo "Installiert: $APP_PATH"
echo "Spotlight: \"bfds offsite backup\" eintippen (Indexierung kann kurz dauern)."
# Standardmaessig heisst die App intern "applet" (so erscheint sie auch in den
# Datenschutz-Listen). Ausfuehrbare Datei, Bundle-Name und -ID umbenennen und neu signieren.
PLIST="$APP_PATH/Contents/Info.plist"
EXEC_NAME="BFDS-Offsite-Backup"
mv "$APP_PATH/Contents/MacOS/applet" "$APP_PATH/Contents/MacOS/$EXEC_NAME"
PB=/usr/libexec/PlistBuddy
"$PB" -c "Set :CFBundleExecutable $EXEC_NAME" "$PLIST"
"$PB" -c "Set :CFBundleName $APP_NAME" "$PLIST"
"$PB" -c "Add :CFBundleIdentifier string de.streber24.bfds-offsite-backup" "$PLIST" 2>/dev/null \
|| "$PB" -c "Set :CFBundleIdentifier de.streber24.bfds-offsite-backup" "$PLIST"
"$PB" -c "Add :CFBundleDisplayName string $APP_NAME" "$PLIST" 2>/dev/null \
|| "$PB" -c "Set :CFBundleDisplayName $APP_NAME" "$PLIST"
/usr/bin/codesign --force --deep --sign - "$APP_PATH"
# Voller Festplattenzugriff laesst sich nicht per Script erteilen (macOS schuetzt
# die Freigabe, nur MDM oder der Nutzer selbst kann sie setzen). Deshalb: Einstellungen
# oeffnen und die App im Finder markieren, zum Hineinziehen in die Liste.
echo
echo "Bitte jetzt einmalig 'Voller Festplattenzugriff' fuer die App erteilen:"
echo " App aus dem Finder-Fenster in die Liste ziehen (oder + klicken) und Schalter aktivieren."
open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"
open -R "$APP_PATH"