Files
cloudron-box/src/scripts/update.sh

62 lines
1.9 KiB
Bash
Raw Normal View History

#!/bin/bash
set -eu -o pipefail
if [[ ${EUID} -ne 0 ]]; then
echo "This script should be run as root." > /dev/stderr
exit 1
fi
readonly UPDATER_SERVICE="cloudron-updater"
if [[ $# == 1 && "$1" == "--check" ]]; then
echo "OK"
exit 0
fi
if [[ $# != 1 ]]; then
echo "sourceDir argument required"
exit 1
fi
2018-08-01 15:38:40 -07:00
readonly source_dir="${1}"
2018-08-01 15:38:40 -07:00
echo "Updating Cloudron with ${source_dir}"
2018-08-01 15:38:40 -07:00
readonly installer_path="${source_dir}/scripts/installer.sh"
echo "=> reset service ${UPDATER_SERVICE} status in case it failed"
if systemctl reset-failed "${UPDATER_SERVICE}"; then
echo "=> service has failed earlier"
fi
2018-11-15 10:52:31 -08:00
# StandardError will follow StandardOutput in default inherit mode. https://www.freedesktop.org/software/systemd/man/systemd.exec.html
2018-11-30 21:18:01 -08:00
echo "=> Run installer.sh as ${UPDATER_SERVICE}."
2018-12-05 16:39:29 -08:00
if [[ "$(systemd --version | head -n1)" != "systemd 22"* ]]; then
readonly DATETIME=`date '+%Y-%m-%d_%H-%M-%S'`
readonly LOG_FILE="/home/yellowtent/platformdata/logs/updater/cloudron-updater-${DATETIME}.log"
update_service_options="-p StandardOutput=file:${LOG_FILE}"
echo "=> starting service (ubuntu 18.04) ${UPDATER_SERVICE}. see logs at ${LOG_FILE}"
else
update_service_options=""
echo "=> starting service (ubuntu 16.04) ${UPDATER_SERVICE}. see logs using journalctl -u ${UPDATER_SERVICE}"
fi
if ! systemd-run --property=OOMScoreAdjust=-1000 --unit "${UPDATER_SERVICE}" $update_service_options ${installer_path}; then
echo "Failed to install cloudron. See log for details"
exit 1
fi
while true; do
2018-11-30 21:18:01 -08:00
if systemctl is-failed "${UPDATER_SERVICE}" >/dev/null 2>&1; then
echo "=> ${UPDATER_SERVICE} has failed"
exit 1
fi
2018-11-30 21:18:01 -08:00
echo "${UPDATER_SERVICE} is still active. will check in 5 seconds"
sleep 5
# this loop will stop once the update process stopped the box unit and thus terminating this child process
done