mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
93 lines
2.6 KiB
Bash
93 lines
2.6 KiB
Bash
|
#!/bin/bash -e
|
||
|
|
||
|
# help print function
|
||
|
function printHelp {
|
||
|
echo "The script updates the user Hyperion is executed by system and service manager (after start-up).
|
||
|
Without arguments it will configure Hyperion being executed under the current user.
|
||
|
The script must be executed as root, i.e. sudo $0
|
||
|
|
||
|
Options:
|
||
|
-u username The user name Hyperion to executed to be with
|
||
|
-h Shows this help message and exits"
|
||
|
}
|
||
|
|
||
|
function prompt () {
|
||
|
while true; do
|
||
|
read -p "$1 " yn
|
||
|
if [[ $yn = "" ]]; then
|
||
|
echo "Please answer Yes or No."
|
||
|
else
|
||
|
case "${yn:-Y}" in
|
||
|
[Yes]* ) return 1;;
|
||
|
[No]* ) return 0;;
|
||
|
* ) echo "Please answer Yes or No.";;
|
||
|
esac
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# Default username
|
||
|
USERNAME=${SUDO_USER}
|
||
|
|
||
|
while getopts u:h option
|
||
|
do
|
||
|
case "${option}"
|
||
|
in
|
||
|
u) USERNAME=${OPTARG};;
|
||
|
v) _VERBOSE=1;;
|
||
|
h) printHelp; exit 0;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
if [ "`id -u`" -ne 0 ]; then
|
||
|
printHelp
|
||
|
exit 99
|
||
|
fi
|
||
|
|
||
|
if ! id ${USERNAME} >/dev/null 2>&1; then
|
||
|
echo "The given username \"${USERNAME}\" does not exist. Exiting..."
|
||
|
exit 99
|
||
|
fi
|
||
|
|
||
|
echo "Configure the hyperion daemon to be executed under user: ${USERNAME}"
|
||
|
|
||
|
if [ ${USERNAME} == "root" ]; then
|
||
|
echo ''
|
||
|
echo 'You asked to run Hyperion with root privileges. This poses a security risk!'
|
||
|
echo 'It is recommended not to do so unless there are good reasons (e.g. WS281x usage).'
|
||
|
if prompt 'Are you sure you want to run Hyperion under root? [Yes/No]'; then
|
||
|
echo 'No updates will be done. Exiting...'
|
||
|
exit 99
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
#Disable current service
|
||
|
CURRENT_SERVICE=$(systemctl --type service | { grep -o "hyperion.*@.*\.service" || true; })
|
||
|
if [[ ! -z ${CURRENT_SERVICE} ]]; then
|
||
|
CURRENT_SERVICE_USER=$(expr "${CURRENT_SERVICE}" : 'hyperion.*@\(.*\).service')
|
||
|
if [ "${USERNAME}" == "${CURRENT_SERVICE_USER}" ]; then
|
||
|
echo "Hyperion is already running under the user: ${USERNAME}. No updates required."
|
||
|
exit 0;
|
||
|
fi
|
||
|
echo "Disable current service: ${CURRENT_SERVICE}"
|
||
|
systemctl is-active --quiet ${CURRENT_SERVICE} && systemctl disable --quiet ${CURRENT_SERVICE} --now >/dev/null 2>&1
|
||
|
fi
|
||
|
|
||
|
HYPERION="hyperion"
|
||
|
#Downward compatibility
|
||
|
if [[ ${CURRENT_SERVICE} == hyperiond* ]]; then
|
||
|
HYPERION="hyperiond"
|
||
|
fi
|
||
|
|
||
|
#Enable new service
|
||
|
NEW_SERVICE="${HYPERION}@${USERNAME}.service"
|
||
|
echo "Restarting Hyperion Service: ${NEW_SERVICE}"
|
||
|
systemctl enable --quiet ${NEW_SERVICE} --now >/dev/null 2>&1
|
||
|
|
||
|
# Update HyperBian splash screen
|
||
|
sed -i "s/${CURRENT_SERVICE}/${NEW_SERVICE}/" /etc/update-motd.d/10-hyperbian >/dev/null 2>&1
|
||
|
|
||
|
echo "Done."
|
||
|
exit 0
|
||
|
|