73 lines
2.8 KiB
Bash
Executable File
73 lines
2.8 KiB
Bash
Executable File
#!/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"
|