The installer determines if it an update based on existence of box dir. It then calls the nginx splash setup code. The splash setup code relies on the data directory being setup. Otherwise, it barfs in data/nginx. This results in a case where restarting cloudron-installer when it is unpacking the box code results in an error about being unable to write admin.conf (since the data dir gets setup only in box setup.sh). So, use cloudron.conf to determine if box was setup and running at some point (this is already used in the js code)
69 lines
2.2 KiB
Bash
Executable File
69 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eu -o pipefail
|
|
|
|
readonly BOX_SRC_DIR=/home/yellowtent/box
|
|
readonly DATA_DIR=/home/yellowtent/data
|
|
readonly CLOUDRON_CONF=/home/yellowtent/configs/cloudron.conf
|
|
|
|
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
readonly json="${script_dir}/../../node_modules/.bin/json"
|
|
readonly curl="curl --fail --connect-timeout 20 --retry 10 --retry-delay 2 --max-time 300"
|
|
|
|
readonly is_update=$([[ -f "${CLOUDRON_CONF}" ]] && echo "yes" || echo "no")
|
|
|
|
# create a provision file for testing. %q escapes args. %q is reused as much as necessary to satisfy $@
|
|
(echo -e "#!/bin/bash\n"; printf "%q " "${script_dir}/installer.sh" "$@") > /home/yellowtent/provision.sh
|
|
chmod +x /home/yellowtent/provision.sh
|
|
|
|
arg_source_tarball_url=""
|
|
arg_data=""
|
|
|
|
args=$(getopt -o "" -l "sourcetarballurl:,data:" -n "$0" -- "$@")
|
|
eval set -- "${args}"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
--sourcetarballurl) arg_source_tarball_url="$2";;
|
|
--data) arg_data="$2";;
|
|
--) break;;
|
|
*) echo "Unknown option $1"; exit 1;;
|
|
esac
|
|
|
|
shift 2
|
|
done
|
|
|
|
box_src_tmp_dir=$(mktemp -dt box-src-XXXXXX)
|
|
echo "Downloading box code from ${arg_source_tarball_url} to ${box_src_tmp_dir}"
|
|
|
|
while true; do
|
|
if $curl -L "${arg_source_tarball_url}" | tar -zxf - -C "${box_src_tmp_dir}"; then break; fi
|
|
echo "Failed to download source tarball, trying again"
|
|
sleep 5
|
|
done
|
|
while true; do
|
|
# for reasons unknown, the dtrace package will fail. but rebuilding second time will work
|
|
if cd "${box_src_tmp_dir}" && npm rebuild; then break; fi
|
|
echo "Failed to rebuild, trying again"
|
|
sleep 5
|
|
done
|
|
|
|
if [[ "${is_update}" == "yes" ]]; then
|
|
echo "Setting up update splash screen"
|
|
"${box_src_tmp_dir}/setup/splashpage.sh" --data "${arg_data}" # show splash from new code
|
|
${BOX_SRC_DIR}/setup/stop.sh # stop the old code
|
|
fi
|
|
|
|
# switch the codes
|
|
rm -rf "${BOX_SRC_DIR}"
|
|
mv "${box_src_tmp_dir}" "${BOX_SRC_DIR}"
|
|
chown -R yellowtent.yellowtent "${BOX_SRC_DIR}"
|
|
|
|
# create a start file for testing. %q escapes args
|
|
(echo -e "#!/bin/bash\n"; printf "%q " "${BOX_SRC_DIR}/setup/start.sh" --data "${arg_data}") > /home/yellowtent/setup_start.sh
|
|
chmod +x /home/yellowtent/setup_start.sh
|
|
|
|
echo "Calling box setup script"
|
|
"${BOX_SRC_DIR}/setup/start.sh" --data "${arg_data}"
|
|
|