mirror of
https://github.com/eliasstepanik/ark-ac-server-tools.git
synced 2026-01-11 18:48:26 +00:00
359 lines
15 KiB
Bash
Executable File
359 lines
15 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
userinstall=no
|
|
steamcmd_user=
|
|
showusage=no
|
|
migrateconfig=no
|
|
installservice=no
|
|
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
--me)
|
|
userinstall=yes
|
|
steamcmd_user="--me"
|
|
;;
|
|
-h|--help)
|
|
showusage=yes
|
|
break
|
|
;;
|
|
--prefix=*)
|
|
PREFIX="${1#--prefix=}"
|
|
;;
|
|
--prefix)
|
|
PREFIX="$2"
|
|
shift
|
|
;;
|
|
--exec-prefix=*)
|
|
EXECPREFIX="${1#--exec-prefix=}"
|
|
;;
|
|
--exec-prefix)
|
|
EXECPREFIX="$2"
|
|
shift
|
|
;;
|
|
--data-prefix=*)
|
|
DATAPREFIX="${1#--data-prefix=}"
|
|
;;
|
|
--data-prefix)
|
|
DATAPREFIX="$2"
|
|
shift
|
|
;;
|
|
--install-root=*)
|
|
INSTALL_ROOT="${1#--install-root=}"
|
|
;;
|
|
--install-root)
|
|
INSTALL_ROOT="$2"
|
|
shift
|
|
;;
|
|
--bindir=*)
|
|
BINDIR="${1#--bindir=}"
|
|
;;
|
|
--bindir)
|
|
BINDIR="$2"
|
|
shift
|
|
;;
|
|
--libexecdir=*)
|
|
LIBEXECDIR="${1#--libexecdir=}"
|
|
;;
|
|
--libexecdir)
|
|
LIBEXECDIR="$2"
|
|
shift
|
|
;;
|
|
--datadir=*)
|
|
DATADIR="${1#--datadir=}"
|
|
;;
|
|
--datadir)
|
|
DATADIR="$2"
|
|
shift
|
|
;;
|
|
--migrate-config)
|
|
migrateconfig=yes
|
|
;;
|
|
--install-service)
|
|
installservice=yes
|
|
;;
|
|
-*)
|
|
echo "Invalid option '$1'"
|
|
showusage=yes
|
|
break;
|
|
;;
|
|
*)
|
|
if [ -n "$steamcmd_user" ]; then
|
|
echo "Multiple users specified"
|
|
showusage=yes
|
|
break;
|
|
elif getent passwd "$1" >/dev/null 2>&1; then
|
|
steamcmd_user="$1"
|
|
else
|
|
echo "Invalid user '$1'"
|
|
showusage=yes
|
|
break;
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$userinstall" == "yes" ] && [ "$UID" -eq 0 ]; then
|
|
echo "Refusing to perform user-install as root"
|
|
showusage=yes
|
|
fi
|
|
|
|
if [ "$showusage" == "no" ] && [ -z "$steamcmd_user" ]; then
|
|
echo "No user specified"
|
|
showusage=yes
|
|
fi
|
|
|
|
if [ "$userinstall" == "yes" ]; then
|
|
PREFIX="${PREFIX:-${HOME}}"
|
|
EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
|
|
DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}"
|
|
CONFIGFILE="${PREFIX}/.arkmanager.cfg"
|
|
INSTANCEDIR="${PREFIX}/.config/arkmanager/instances"
|
|
else
|
|
PREFIX="${PREFIX:-/usr/local}"
|
|
EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
|
|
DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}"
|
|
CONFIGFILE="/etc/arkmanager/arkmanager.cfg"
|
|
INSTANCEDIR="/etc/arkmanager/instances"
|
|
fi
|
|
|
|
BINDIR="${BINDIR:-${EXECPREFIX}/bin}"
|
|
LIBEXECDIR="${LIBEXECDIR:-${EXECPREFIX}/libexec/arkmanager}"
|
|
DATADIR="${DATADIR:-${DATAPREFIX}/arkmanager}"
|
|
|
|
if [ "$showusage" == "yes" ]; then
|
|
echo "Usage: ./install.sh {<user>|--me} [OPTIONS]"
|
|
echo "You must specify your system steam user who own steamcmd directory to install ARK Tools."
|
|
echo "Specify the special used '--me' to perform a user-install."
|
|
echo
|
|
echo "<user> The user arkmanager should be run as"
|
|
echo
|
|
echo "Option Description"
|
|
echo "--help, -h Show this help text"
|
|
echo "--me Perform a user-install"
|
|
echo "--prefix Specify the prefix under which to install arkmanager"
|
|
echo " [PREFIX=${PREFIX}]"
|
|
echo "--exec-prefix Specify the prefix under which to install executables"
|
|
echo " [EXECPREFIX=${EXECPREFIX}]"
|
|
echo "--data-prefix Specify the prefix under which to install support files"
|
|
echo " [DATAPREFIX=${DATAPREFIX}]"
|
|
echo "--install-root Specify the staging directory in which to perform the install"
|
|
echo " [INSTALL_ROOT=${INSTALL_ROOT}]"
|
|
echo "--bindir Specify the directory under which to install executables"
|
|
echo " [BINDIR=${BINDIR}]"
|
|
echo "--libexecdir Specify the directory under which to install executable support files"
|
|
echo " [LIBEXECDIR=${LIBEXECDIR}]"
|
|
echo "--datadir Specify the directory under which to install support files"
|
|
echo " [DATADIR=${DATADIR}]"
|
|
echo "--install-service"
|
|
echo " Install the service"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$userinstall" == "yes" ]; then
|
|
# Copy arkmanager to ~/bin
|
|
mkdir -p "${INSTALL_ROOT}${BINDIR}"
|
|
cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager"
|
|
chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager"
|
|
|
|
# Create a folder in ~/.local/share to store arkmanager support files
|
|
mkdir -p "${INSTALL_ROOT}${DATADIR}"
|
|
|
|
# Copy the uninstall script to ~/.local/share/arkmanager
|
|
cp uninstall-user.sh "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh"
|
|
chmod +x "${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh"
|
|
sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \
|
|
-e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \
|
|
"${INSTALL_ROOT}${DATADIR}/arkmanager-uninstall.sh"
|
|
|
|
# Create a folder in ~/logs to let Ark tools write its own log files
|
|
mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools"
|
|
|
|
# Create a folder in ~/.config/arkamanger to hold instance configs
|
|
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
|
|
|
|
# Copy example instance config
|
|
cp instance.cfg.example "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example"
|
|
# Change the defaults in the new instance config template
|
|
sed -i -e "s|\"/home/steam|\"${PREFIX}|" \
|
|
"${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
|
|
|
|
# Copy arkmanager.cfg to ~/.arkmanager.cfg.NEW
|
|
cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.example"
|
|
# Change the defaults in the new config file
|
|
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \
|
|
-e "s|\"/home/steam|\"${PREFIX}|" \
|
|
-e "s|/var/log/arktools|${PREFIX}/logs/arktools|" \
|
|
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
|
|
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
|
|
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
|
|
"${INSTALL_ROOT}${CONFIGFILE}.example"
|
|
|
|
# Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist
|
|
if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
|
|
SUFFIX=
|
|
if [ "$migrateconfig" = "no" ]; then
|
|
SUFFIX=".NEW"
|
|
cp "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}"
|
|
fi
|
|
|
|
bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}"
|
|
bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg${SUFFIX}"
|
|
|
|
echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."
|
|
echo "A copy of the new configuration file was included in '${CONFIGFILE}.NEW'. Make sure to review any changes and update your config accordingly!"
|
|
exit 2
|
|
else
|
|
cp -n "${INSTALL_ROOT}${CONFIGFILE}.example" "${INSTALL_ROOT}${CONFIGFILE}"
|
|
cp -n "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example" "${INSTALL_ROOT}/${INSTANCEDIR}/main.cfg"
|
|
fi
|
|
else
|
|
# Copy arkmanager to /usr/bin and set permissions
|
|
cp arkmanager "${INSTALL_ROOT}${BINDIR}/arkmanager"
|
|
chmod +x "${INSTALL_ROOT}${BINDIR}/arkmanager"
|
|
|
|
# Copy the uninstall script to ~/.local/share/arkmanager
|
|
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
|
|
cp uninstall.sh "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh"
|
|
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh"
|
|
sed -i -e "s|^BINDIR=.*|BINDIR=\"${BINDIR}\"|" \
|
|
-e "s|^LIBEXECDIR=.*|LIBEXECDIR=\"${LIBEXECDIR}\"|" \
|
|
-e "s|^DATADIR=.*|DATADIR=\"${DATADIR}\"|" \
|
|
"${INSTALL_ROOT}${LIBEXECDIR}/arkmanager-uninstall.sh"
|
|
|
|
if [ "$installservice" = "yes" ]; then
|
|
# Copy arkdaemon to /etc/init.d ,set permissions and add it to boot
|
|
if [ -f /lib/lsb/init-functions ]; then
|
|
# on debian 8, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit
|
|
if [ -f /etc/systemd/system.conf ]; then # used by systemd
|
|
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
|
|
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
if [ -z "${INSTALL_ROOT}" ]; then
|
|
systemctl daemon-reload
|
|
systemctl enable arkmanager.service
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "systemctl disable arkmanager.service"
|
|
fi
|
|
else # systemd not present, so use sysvinit
|
|
cp lsb/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
# add to startup if the system use sysinit
|
|
if [ -x /usr/sbin/update-rc.d ] && [ -z "${INSTALL_ROOT}" ]; then
|
|
update-rc.d arkmanager defaults
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "update-rc.d -f arkmanager remove"
|
|
fi
|
|
fi
|
|
elif [ -f /etc/rc.d/init.d/functions ]; then
|
|
# on RHEL 7, sysvinit and systemd are present. If systemd is available we use it instead of sysvinit
|
|
if [ -f /etc/systemd/system.conf ]; then # used by systemd
|
|
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
|
|
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
if [ -z "${INSTALL_ROOT}" ]; then
|
|
systemctl daemon-reload
|
|
systemctl enable arkmanager.service
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "systemctl disable arkmanager.service"
|
|
fi
|
|
else # systemd not preset, so use sysvinit
|
|
cp redhat/arkdaemon "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager"
|
|
chmod +x "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager"
|
|
sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}/etc/rc.d/init.d/arkmanager"
|
|
if [ -x /sbin/chkconfig ] && [ -z "${INSTALL_ROOT}" ]; then
|
|
chkconfig --add arkmanager
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "chkconfig arkmanager off"
|
|
fi
|
|
fi
|
|
elif [ -f /sbin/runscript ]; then
|
|
cp openrc/arkdaemon "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
chmod +x "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}/etc/init.d/arkmanager"
|
|
if [ -x /sbin/rc-update ] && [ -z "${INSTALL_ROOT}" ]; then
|
|
rc-update add arkmanager default
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "rc-update del arkmanager default"
|
|
fi
|
|
elif [ -f /etc/systemd/system.conf ]; then # used by systemd
|
|
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
|
|
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
|
|
cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service"
|
|
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
|
|
if [ -z "${INSTALL_ROOT}" ]; then
|
|
systemctl daemon-reload
|
|
systemctl enable arkmanager.service
|
|
echo "Ark server will now start on boot, if you want to remove this feature run the following line"
|
|
echo "systemctl disable arkmanager.service"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Create a folder in /var/log to let Ark tools write its own log files
|
|
mkdir -p "${INSTALL_ROOT}/var/log/arktools"
|
|
chown "$steamcmd_user" "${INSTALL_ROOT}/var/log/arktools"
|
|
|
|
# Create a folder in /etc/arkmanager to hold instance config files
|
|
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
|
|
chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}"
|
|
|
|
# Copy example instance config
|
|
cp instance.cfg.example "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
|
|
chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
|
|
# Change the defaults in the new instance config template
|
|
sed -i -e "s|\"/home/steam|\"/home/$steamcmd_user|" \
|
|
"${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
|
|
|
|
# Copy arkmanager bash_completion into /etc/bash_completion.d/
|
|
mkdir -p "${INSTALL_ROOT}/etc/bash_completion.d"
|
|
cp bash_completion/arkmanager "${INSTALL_ROOT}/etc/bash_completion.d/arkmanager"
|
|
|
|
# Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists
|
|
mkdir -p "${INSTALL_ROOT}/etc/arkmanager"
|
|
chown "$steamcmd_user" "${INSTALL_ROOT}/etc/arkmanager"
|
|
cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.example"
|
|
chown "$steamcmd_user" "${INSTALL_ROOT}${CONFIGFILE}.example"
|
|
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \
|
|
-e "s|\"/home/steam|\"/home/$steamcmd_user|" \
|
|
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
|
|
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
|
|
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
|
|
"${INSTALL_ROOT}${CONFIGFILE}.example"
|
|
|
|
if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
|
|
SUFFIX=
|
|
if [ "$migrateconfig" = "no" ]; then
|
|
SUFFIX=".NEW"
|
|
cp "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}"
|
|
fi
|
|
|
|
bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}"
|
|
bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}${SUFFIX}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg${SUFFIX}"
|
|
|
|
echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."
|
|
echo "A copy of the new configuration file was included in /etc/arkmanager. Make sure to review any changes and update your config accordingly!"
|
|
exit 2
|
|
else
|
|
cp -n "${INSTALL_ROOT}${CONFIGFILE}.example" "${INSTALL_ROOT}${CONFIGFILE}"
|
|
cp -n "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example" "${INSTALL_ROOT}/${INSTANCEDIR}/main.cfg"
|
|
fi
|
|
fi
|
|
|
|
exit 0
|