port OFFSITE backup to MacOS script with spotlight launcher
This commit is contained in:
1 parent
9f0eafee19
commit
6fe87107ce
3 files changed
+264
No files matched your search
@@ -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"
|
||||
Reference in new issue
Block a user