mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-05-08 14:33:23 +00:00
74 lines
2.4 KiB
Bash
Executable File
74 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
APP_NAME=AmneziaVPN
|
|
SERVICE_GROUP=amnvpn
|
|
PLIST_NAME=$APP_NAME.plist
|
|
LAUNCH_DAEMONS_PLIST_NAME=/Library/LaunchDaemons/$PLIST_NAME
|
|
LOG_FOLDER=/var/log/$APP_NAME
|
|
LOG_FILE="$LOG_FOLDER/post-install.log"
|
|
APP_PATH=/Applications/$APP_NAME.app
|
|
|
|
rm -rf "$LOG_FOLDER"
|
|
mkdir -p "$LOG_FOLDER"
|
|
echo "`date` Script started" > "$LOG_FILE"
|
|
|
|
log() {
|
|
echo "`date` $*" >> "$LOG_FILE"
|
|
}
|
|
|
|
run_cmd() {
|
|
log "CMD: $*"
|
|
"$@" >> "$LOG_FILE" 2>&1
|
|
local ec=$?
|
|
log "EXIT: $ec"
|
|
return $ec
|
|
}
|
|
|
|
# Handle new installations unpacked into localized folder
|
|
if [ -d "/Applications/${APP_NAME}.localized" ]; then
|
|
log "Detected ${APP_NAME}.localized, migrating to standard path"
|
|
run_cmd sudo rm -rf "$APP_PATH"
|
|
run_cmd sudo mv "/Applications/${APP_NAME}.localized/${APP_NAME}.app" "$APP_PATH"
|
|
run_cmd sudo rm -rf "/Applications/${APP_NAME}.localized"
|
|
fi
|
|
|
|
run_cmd launchctl bootout system "$LAUNCH_DAEMONS_PLIST_NAME" || run_cmd launchctl unload "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
run_cmd rm -f "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
|
|
# Add separate group for xray filtering
|
|
if dscl . -read "/Groups/$SERVICE_GROUP" >/dev/null 2>&1; then
|
|
log "Group $SERVICE_GROUP already exists"
|
|
return 0
|
|
else
|
|
local next_gid
|
|
next_gid=$(dscl . -list /Groups PrimaryGroupID 2>/dev/null | awk '{print $2}' | sort -n | awk '$1>=500{g=$1} END{print (g?g+1:501)}')
|
|
run_cmd dscl . -create "/Groups/$SERVICE_GROUP"
|
|
run_cmd dscl . -create "/Groups/$SERVICE_GROUP" PrimaryGroupID "$next_gid"
|
|
run_cmd dscl . -create "/Groups/$SERVICE_GROUP" RealName "Amnezia VPN Service Group"
|
|
fi
|
|
|
|
run_cmd sudo chmod -R a-w "$APP_PATH/"
|
|
run_cmd sudo chown -R root "$APP_PATH/"
|
|
run_cmd sudo chgrp -R wheel "$APP_PATH/"
|
|
|
|
log "Requesting ${APP_NAME} to quit gracefully"
|
|
run_cmd osascript -e 'tell application "AmneziaVPN" to quit' || true
|
|
|
|
PLIST_SOURCE="$APP_PATH/Contents/Resources/$PLIST_NAME"
|
|
if [ -f "$PLIST_SOURCE" ]; then
|
|
run_cmd mv -f "$PLIST_SOURCE" "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
else
|
|
log "ERROR: service plist not found at $PLIST_SOURCE"
|
|
fi
|
|
|
|
run_cmd chown root:wheel "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
run_cmd chmod 644 "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
run_cmd launchctl bootstrap system "$LAUNCH_DAEMONS_PLIST_NAME" || run_cmd launchctl load "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
run_cmd launchctl enable "system/$APP_NAME-service" || true
|
|
run_cmd launchctl kickstart -k "system/$APP_NAME-service" || true
|
|
run_cmd launchctl print "system/$APP_NAME-service" || true
|
|
log "Launching ${APP_NAME} application"
|
|
run_cmd open -a "$APP_PATH" || true
|
|
|
|
log "Script finished"
|