mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-22 02:01:08 +07:00
feat: implement service kickstart and improve macos post install script (#2131)
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>KeepAlive</key>
|
<key>KeepAlive</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<true/>
|
||||||
<key>Sockets</key>
|
<key>Sockets</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>Listeners</key>
|
<key>Listeners</key>
|
||||||
|
|||||||
@@ -7,42 +7,54 @@ LOG_FOLDER=/var/log/$APP_NAME
|
|||||||
LOG_FILE="$LOG_FOLDER/post-install.log"
|
LOG_FILE="$LOG_FOLDER/post-install.log"
|
||||||
APP_PATH=/Applications/$APP_NAME.app
|
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
|
# Handle new installations unpacked into localized folder
|
||||||
if [ -d "/Applications/${APP_NAME}.localized" ]; then
|
if [ -d "/Applications/${APP_NAME}.localized" ]; then
|
||||||
echo "`date` Detected ${APP_NAME}.localized, migrating to standard path" >> $LOG_FILE
|
log "Detected ${APP_NAME}.localized, migrating to standard path"
|
||||||
sudo rm -rf "$APP_PATH"
|
run_cmd sudo rm -rf "$APP_PATH"
|
||||||
sudo mv "/Applications/${APP_NAME}.localized/${APP_NAME}.app" "$APP_PATH"
|
run_cmd sudo mv "/Applications/${APP_NAME}.localized/${APP_NAME}.app" "$APP_PATH"
|
||||||
sudo rm -rf "/Applications/${APP_NAME}.localized"
|
run_cmd sudo rm -rf "/Applications/${APP_NAME}.localized"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if launchctl list "$APP_NAME-service" &> /dev/null; then
|
run_cmd launchctl bootout system "$LAUNCH_DAEMONS_PLIST_NAME" || run_cmd launchctl unload "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
launchctl unload "$LAUNCH_DAEMONS_PLIST_NAME"
|
run_cmd rm -f "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
rm -f "$LAUNCH_DAEMONS_PLIST_NAME"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo chmod -R a-w "$APP_PATH/"
|
run_cmd sudo chmod -R a-w "$APP_PATH/"
|
||||||
sudo chown -R root "$APP_PATH/"
|
run_cmd sudo chown -R root "$APP_PATH/"
|
||||||
sudo chgrp -R wheel "$APP_PATH/"
|
run_cmd sudo chgrp -R wheel "$APP_PATH/"
|
||||||
|
|
||||||
rm -rf $LOG_FOLDER
|
log "Requesting ${APP_NAME} to quit gracefully"
|
||||||
mkdir -p $LOG_FOLDER
|
run_cmd osascript -e 'tell application "AmneziaVPN" to quit' || true
|
||||||
|
|
||||||
echo "`date` Script started" > $LOG_FILE
|
|
||||||
|
|
||||||
echo "Requesting ${APP_NAME} to quit gracefully" >> "$LOG_FILE"
|
|
||||||
osascript -e 'tell application "AmneziaVPN" to quit'
|
|
||||||
|
|
||||||
PLIST_SOURCE="$APP_PATH/Contents/Resources/$PLIST_NAME"
|
PLIST_SOURCE="$APP_PATH/Contents/Resources/$PLIST_NAME"
|
||||||
if [ -f "$PLIST_SOURCE" ]; then
|
if [ -f "$PLIST_SOURCE" ]; then
|
||||||
mv -f "$PLIST_SOURCE" "$LAUNCH_DAEMONS_PLIST_NAME" 2>> $LOG_FILE
|
run_cmd mv -f "$PLIST_SOURCE" "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
else
|
else
|
||||||
echo "`date` ERROR: service plist not found at $PLIST_SOURCE" >> $LOG_FILE
|
log "ERROR: service plist not found at $PLIST_SOURCE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chown root:wheel "$LAUNCH_DAEMONS_PLIST_NAME"
|
run_cmd chown root:wheel "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
launchctl load "$LAUNCH_DAEMONS_PLIST_NAME"
|
run_cmd chmod 644 "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
echo "`date` Launching ${APP_NAME} application" >> $LOG_FILE
|
run_cmd launchctl bootstrap system "$LAUNCH_DAEMONS_PLIST_NAME" || run_cmd launchctl load "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
open -a "$APP_PATH" 2>> $LOG_FILE || true
|
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
|
||||||
|
|
||||||
echo "`date` Service status: $?" >> $LOG_FILE
|
log "Script finished"
|
||||||
echo "`date` Script finished" >> $LOG_FILE
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ fi
|
|||||||
|
|
||||||
# Unload the service if loaded and remove its plist file regardless
|
# Unload the service if loaded and remove its plist file regardless
|
||||||
if launchctl list "${APP_NAME}-service" &> /dev/null; then
|
if launchctl list "${APP_NAME}-service" &> /dev/null; then
|
||||||
sudo launchctl unload "$LAUNCH_DAEMONS_PLIST_NAME"
|
sudo launchctl bootout system "$LAUNCH_DAEMONS_PLIST_NAME" || sudo launchctl unload "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
fi
|
fi
|
||||||
sudo rm -f "$LAUNCH_DAEMONS_PLIST_NAME"
|
sudo rm -f "$LAUNCH_DAEMONS_PLIST_NAME"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user