mirror of
https://github.com/gomods/athens
synced 2026-02-03 08:40:31 +00:00
Removes hardcoded values form our supplied SystemD Unit file and the installation script. Users, prior to installation, will need to ensure that their user, group, and permissions settings of where Athens stores data are correct. Co-authored-by: Manu Gupta <manugupt1@gmail.com> Co-authored-by: Matt <matt.ouille@protonmail.com>
171 lines
4.2 KiB
Bash
Executable File
171 lines
4.2 KiB
Bash
Executable File
#!/bin/bash -e
|
|
# This script manages installation using SystemD, if available, or SysV as a fall-back.
|
|
#
|
|
# Usage:
|
|
# systemd.sh [ install | remove | status | log ]
|
|
|
|
cd $(dirname $0)/..
|
|
[[ -n $VERSION ]] || export VERSION=unset
|
|
|
|
function ensureSystemdIsPresent
|
|
{
|
|
if [[ $( uname -s ) != "Linux" ]]; then
|
|
echo "SystemD can only be used on Linux systems."
|
|
exit 1
|
|
fi
|
|
|
|
id=$(uname -msn)
|
|
|
|
if command -v systemctl >/dev/null; then
|
|
echo -n "$id has "
|
|
systemctl --version | head -1
|
|
|
|
elif [ -d /etc/init.d ]; then
|
|
echo "$id has SysV."
|
|
|
|
else
|
|
echo "Neither SystemD nor SysV is available in this operating system."
|
|
lsb_release -a
|
|
exit 1
|
|
|
|
fi
|
|
}
|
|
|
|
# doInstallConfig installs the config file
|
|
function doInstallConfig
|
|
{
|
|
if [ ! -r config.toml ]; then
|
|
echo "Missing: config.toml"
|
|
echo "Copy & modify config.dev.toml as needed."
|
|
exit 1
|
|
fi
|
|
sudo mkdir -p /etc/athens
|
|
sudo install -v -o root -g root -m 644 config.toml /etc/athens
|
|
}
|
|
|
|
# doInstallBinary copies the Athens binary to /usr/local/bin with the necessary settings.
|
|
function doInstallBinary
|
|
{
|
|
[ -f athens ] || make athens
|
|
|
|
if [ ! -x /usr/local/bin/athens -o athens -nt /usr/local/bin/athens ]; then
|
|
|
|
[ -f /etc/systemd/system/athens.service ] && sudo systemctl stop athens
|
|
[ -f /etc/init.d/athens ] && sudo /etc/init.d/athens stop
|
|
|
|
sudo install -v -o root -g root athens /usr/local/bin
|
|
fi
|
|
|
|
# Give the athens binary the ability to bind to privileged ports (e.g. 80, 443) as a non-root user:
|
|
command -v setcap >/dev/null && sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/athens
|
|
}
|
|
|
|
# doInstallSystemd sets up the SystemD service unit.
|
|
function doInstallSystemd
|
|
{
|
|
local rootPath=$(sed -nr 's/(RootPath) = (".*")/\2/p' /etc/athens/config.toml | xargs)
|
|
sed -i "/ReadWritePaths/ s|=.*|=$rootPath|" scripts/service/athens.service
|
|
|
|
sudo install -v -o root -g root -m 644 scripts/service/athens.service /etc/systemd/system
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable athens
|
|
sudo systemctl start athens
|
|
}
|
|
|
|
# doInstall builds and installs the binary as a SystemD unit
|
|
function doInstall
|
|
{
|
|
doInstallConfig
|
|
doInstallBinary
|
|
doInstallSystemd
|
|
}
|
|
|
|
# doRemove deletes the SystemD unit and cleans up log files etc
|
|
function doRemove
|
|
{
|
|
if [ -f /etc/systemd/system/athens.service ]; then
|
|
sudo systemctl stop athens
|
|
sudo rm -f /etc/systemd/system/athens.service
|
|
# Reset systemctl
|
|
sudo systemctl daemon-reload
|
|
echo "SystemD installation was removed."
|
|
|
|
elif [ -f /etc/init.d/athens ]; then
|
|
sudo service athens stop
|
|
sudo update-rc.d athens remove
|
|
sudo rm -f /etc/init.d/athens
|
|
echo "SysV installation was removed."
|
|
|
|
fi
|
|
|
|
sudo rm -rf /etc/athens /etc/ssl/athens /usr/local/bin/athens /var/log/athens.log /var/www/.athens
|
|
}
|
|
|
|
# doStatus shows what is installed, if anything, and whether it is running
|
|
function doStatus
|
|
{
|
|
if [ -x /usr/local/bin/athens ]; then
|
|
echo "Athens is /usr/local/bin/athens"
|
|
/usr/local/bin/athens --version
|
|
else
|
|
echo "Athens is absent (no /usr/local/bin/athens)."
|
|
exit 0
|
|
fi
|
|
|
|
if [ -f /etc/systemd/system/athens.service ]; then
|
|
echo
|
|
echo "SystemD: /etc/systemd/system/athens.service exists."
|
|
sudo systemctl status athens ||:
|
|
|
|
elif [ -f /etc/init.d/athens ]; then
|
|
echo
|
|
echo "SysV: /etc/init.d/athens exists."
|
|
sudo service athens status ||:
|
|
|
|
else
|
|
echo "Athens is not installed as a service."
|
|
fi
|
|
}
|
|
|
|
# showLog shows the relevant lines in syslog
|
|
function showLog
|
|
{
|
|
if [ -x /usr/local/bin/athens ]; then
|
|
echo "Athens is /usr/local/bin/athens"
|
|
/usr/local/bin/athens --version
|
|
else
|
|
echo "Athens is absent (no /usr/local/bin/athens)."
|
|
exit 0
|
|
fi
|
|
|
|
if [ -f /etc/systemd/system/athens.service ]; then
|
|
fgrep athens /var/log/syslog | fgrep "$(date '+%b %d')"
|
|
|
|
elif [ -f /etc/init.d/athens ]; then
|
|
fgrep athens /var/log/syslog | fgrep "$(date '+%b %d')"
|
|
|
|
else
|
|
echo "Athens is not installed as a service."
|
|
fi
|
|
}
|
|
|
|
### Main script ###doStatus
|
|
|
|
case $1 in
|
|
install)
|
|
ensureSystemdIsPresent; doInstall ;;
|
|
|
|
remove|uninstall)
|
|
ensureSystemdIsPresent; doRemove ;;
|
|
|
|
status)
|
|
ensureSystemdIsPresent; doStatus ;;
|
|
|
|
log)
|
|
ensureSystemdIsPresent; showLog ;;
|
|
|
|
*)
|
|
echo "Usage: $0 [ install | remove | status | log"
|
|
exit 1 ;;
|
|
esac
|