Deploy: Script to install appimage sysd service that runs on boot

This commit is contained in:
EliaOnceAgain 2022-04-04 23:46:48 +03:00
parent 32a9fe7bf9
commit bd22b7fbcc
1 changed files with 138 additions and 0 deletions

View File

@ -0,0 +1,138 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(realpath $(dirname $BASH_SOURCE[0]))"
SYSTEMD_UNIT_FILENAME="monkey-appimage.service"
SYSTEMD_DIR="/lib/systemd/system"
MONKEY_BIN="/opt/infection-monkey/bin"
APPIMAGE_NAME="InfectionMonkey.appimage"
echo_help() {
echo "usage: install-infection-monkey-service.sh [--user <NAME> --appimage <PATH>] [--help] [--uninstall]"
echo ""
echo "Installs Infection Monkey AppImage and systemd unit to run on boot"
echo "--user User to run the AppImage as"
echo "--appimage Path to the AppImage"
echo "--uninstall Uninstall Infection Monkey AppImage systemd service"
}
service_install() {
cat > "${SCRIPT_DIR}/${SYSTEMD_UNIT_FILENAME}" << EOF
[Unit]
Description=Infection Monkey AppImage Runner
After=network.target
[Service]
User=$1
Type=simple
ExecStart="${MONKEY_BIN}/${APPIMAGE_NAME}"
[Install]
WantedBy=multi-user.target
EOF
sudo mv "${SCRIPT_DIR}/${SYSTEMD_UNIT_FILENAME}" "${SYSTEMD_DIR}/${SYSTEMD_UNIT_FILENAME}"
# Enable on boot
sudo systemctl enable "${SYSTEMD_UNIT_FILENAME}" &>/dev/null
sudo systemctl daemon-reload
}
service_uninstall() {
echo "Uninstalling Infection Monkey AppImage systemd service..."
if [ -f "${MONKEY_BIN}/${APPIMAGE_NAME}" ] ; then
sudo rm -f "${MONKEY_BIN}/${APPIMAGE_NAME}"
fi
if [ -f "${SYSTEMD_DIR}/${SYSTEMD_UNIT_FILENAME}" ] ; then
sudo systemctl stop "${SYSTEMD_UNIT_FILENAME}" 2>/dev/null
sudo systemctl disable "${SYSTEMD_UNIT_FILENAME}" &>/dev/null
sudo rm "${SYSTEMD_DIR}/${SYSTEMD_UNIT_FILENAME}"
sudo systemctl daemon-reload
fi
exit 0
}
has_sudo() {
# 0 true, 1 false
sudo -nv > /dev/null 2>&1
return $?
}
exit_if_missing_argument() {
if [ -z "$2" ] || [ "${2:0:1}" == "-" ]; then
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
}
uname=""
appimage_path=""
while (( "$#" )); do
case "$1" in
--user)
exit_if_missing_argument "$1" "$2"
uname=$2
shift 2
;;
--appimage)
exit_if_missing_argument "$1" "$2"
appimage_path=$2
shift 2
;;
--uninstall)
service_uninstall
;;
-h|--help)
echo_help
exit 0
;;
*)
echo "Error: Unsupported parameter $1" >&2
exit 1
;;
esac
done
if ! has_sudo; then
echo "Error: You need root permissions for some of this script operations. \
Run \`sudo -v\`, enter your password, and then re-run this script."
exit 1
fi
# input sanity
if [ -z "$uname" ] || [ -z "$appimage_path" ] ; then
echo "Error: missing flags"
echo_help
exit 1
fi
# specified user exists
if ! id -u "$uname" &>/dev/null ; then
echo "Error: User does not exist '${uname}'"
exit 1
fi
# appimage path exists
if [ ! -f "${appimage_path}" ] ; then
if [ ! -f "${SCRIPT_DIR}/${appimage_path}" ] ; then
echo "Error: AppImage path does not exist: '${appimage_path}'"
exit 1
fi
appimage_path="${SCRIPT_DIR}/${appimage_path}"
fi
# move appimge to dst dir
sudo mkdir -p "${MONKEY_BIN}"
if [ "$appimage_path" != "${MONKEY_BIN}/${APPIMAGE_NAME}" ] ; then
sudo cp "$appimage_path" "${MONKEY_BIN}/${APPIMAGE_NAME}"
fi
service_install "${uname}"
echo "Installation done. "