forked from p15670423/monkey
Deploy: Script to install appimage sysd service that runs on boot
This commit is contained in:
parent
32a9fe7bf9
commit
bd22b7fbcc
|
@ -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. "
|
Loading…
Reference in New Issue