From 05ef3a0c55747ab41abe5e2459d787d9a43a4416 Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Wed, 19 Oct 2022 07:10:28 -0400 Subject: Properly propagate errors from installer/updater to kickstart script. (#13802) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should result in errors in these scripts being properly deaggregated, instead of being always reported as ‘generic’ failures, thus simplifying diagnosis of end-user problems with the installation or update process. --- packaging/installer/functions.sh | 14 ++++++++--- packaging/installer/kickstart.sh | 44 ++++++++++++++++++---------------- packaging/installer/netdata-updater.sh | 21 ++++++++++++---- 3 files changed, 52 insertions(+), 27 deletions(-) (limited to 'packaging') diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh index d3421ea80f..e354ac651e 100644 --- a/packaging/installer/functions.sh +++ b/packaging/installer/functions.sh @@ -253,9 +253,17 @@ exit_reason() { EXIT_REASON="${1}" EXIT_CODE="${2}" if [ -n "${NETDATA_PROPAGATE_WARNINGS}" ]; then - export EXIT_REASON - export EXIT_CODE - export NETDATA_WARNINGS="${NETDATA_WARNINGS}${SAVED_WARNINGS}" + if [ -n "${NETDATA_SCRIPT_STATUS_PATH}" ]; then + { + echo "EXIT_REASON=\"${EXIT_REASON}\"" + echo "EXIT_CODE=\"${EXIT_CODE}\"" + echo "NETDATA_WARNINGS=\"${NETDATA_WARNINGS}${SAVED_WARNINGS}\"" + } >> "${NETDATA_SCRIPT_STATUS_PATH}" + else + export EXIT_REASON + export EXIT_CODE + export NETDATA_WARNINGS="${NETDATA_WARNINGS}${SAVED_WARNINGS}" + fi fi fi } diff --git a/packaging/installer/kickstart.sh b/packaging/installer/kickstart.sh index e3bfac4edc..5ea16380f9 100755 --- a/packaging/installer/kickstart.sh +++ b/packaging/installer/kickstart.sh @@ -479,6 +479,26 @@ run() { return ${ret} } +run_script() { + set_tmpdir + + export NETDATA_SCRIPT_STATUS_PATH="${tmpdir}/.script-status" + + export NETDATA_SAVE_WARNINGS=1 + export NETDATA_PROPAGATE_WARNINGS=1 + # shellcheck disable=SC2090 + export NETDATA_WARNINGS="${NETDATA_WARNINGS}" + + # shellcheck disable=SC2086 + run ${ROOTCMD} "${@}" + + if [ -r "${NETDATA_SCRIPT_STATUS_PATH}" ]; then + # shellcheck disable=SC1090 + . "${NETDATA_SCRIPT_STATUS_PATH}" + rm -f "${NETDATA_SCRIPT_STATUS_PATH}" + fi +} + warning() { printf >&2 "%s\n\n" "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} WARNING ${TPUT_RESET} ${*}" NETDATA_WARNINGS="${NETDATA_WARNINGS}\n - ${*}" @@ -717,11 +737,7 @@ update() { opts="--interactive" fi - export NETDATA_SAVE_WARNINGS=1 - export NETDATA_PROPAGATE_WARNINGS=1 - # shellcheck disable=SC2090 - export NETDATA_WARNINGS="${NETDATA_WARNINGS}" - if run ${ROOTCMD} "${updater}" ${opts} --not-running-from-cron; then + if run_script "${updater}" ${opts} --not-running-from-cron; then progress "Updated existing install at ${ndprefix}" return 0 else @@ -763,11 +779,7 @@ uninstall() { return 0 else progress "Found existing netdata-uninstaller. Running it.." - export NETDATA_SAVE_WARNINGS=1 - export NETDATA_PROPAGATE_WARNINGS=1 - # shellcheck disable=SC2090 - export NETDATA_WARNINGS="${NETDATA_WARNINGS}" - if ! run ${ROOTCMD} "${uninstaller}" $FLAGS; then + if ! run_script "${uninstaller}" ${FLAGS}; then warning "Uninstaller failed. Some parts of Netdata may still be present on the system." fi fi @@ -780,11 +792,7 @@ uninstall() { progress "Downloading netdata-uninstaller ..." download "${uninstaller_url}" "${tmpdir}/netdata-uninstaller.sh" chmod +x "${tmpdir}/netdata-uninstaller.sh" - export NETDATA_SAVE_WARNINGS=1 - export NETDATA_PROPAGATE_WARNINGS=1 - # shellcheck disable=SC2090 - export NETDATA_WARNINGS="${NETDATA_WARNINGS}" - if ! run ${ROOTCMD} "${tmpdir}/netdata-uninstaller.sh" $FLAGS; then + if ! run_script "${tmpdir}/netdata-uninstaller.sh" ${FLAGS}; then warning "Uninstaller failed. Some parts of Netdata may still be present on the system." fi fi @@ -1675,12 +1683,8 @@ build_and_install() { opts="${opts} --disable-cloud" fi - export NETDATA_SAVE_WARNINGS=1 - export NETDATA_PROPAGATE_WARNINGS=1 - # shellcheck disable=SC2090 - export NETDATA_WARNINGS="${NETDATA_WARNINGS}" # shellcheck disable=SC2086 - run ${ROOTCMD} ./netdata-installer.sh ${opts} + run_script ./netdata-installer.sh ${opts} case $? in 1) diff --git a/packaging/installer/netdata-updater.sh b/packaging/installer/netdata-updater.sh index 6313a92dac..4a52b035aa 100755 --- a/packaging/installer/netdata-updater.sh +++ b/packaging/installer/netdata-updater.sh @@ -85,9 +85,17 @@ exit_reason() { EXIT_REASON="${1}" EXIT_CODE="${2}" if [ -n "${NETDATA_PROPAGATE_WARNINGS}" ]; then - export EXIT_REASON - export EXIT_CODE - export NETDATA_WARNINGS + if [ -n "${NETDATA_SCRIPT_STATUS_PATH}" ]; then + { + echo "EXIT_REASON=\"${EXIT_REASON}\"" + echo "EXIT_CODE=\"${EXIT_CODE}\"" + echo "NETDATA_WARNINGS=\"${NETDATA_WARNINGS}\"" + } >> "${NETDATA_SCRIPT_STATUS_PATH}" + else + export EXIT_REASON + export EXIT_CODE + export NETDATA_WARNINGS + fi fi fi } @@ -602,15 +610,20 @@ update_build() { export NETDATA_SAVE_WARNINGS=1 export NETDATA_PROPAGATE_WARNINGS=1 export NETDATA_WARNINGS="${NETDATA_WARNINGS}" + export NETDATA_SCRIPT_STATUS_PATH="${NETDATA_SCRIPT_STATUS_PATH}" # shellcheck disable=SC2086 if ! ${env} ./netdata-installer.sh ${REINSTALL_OPTIONS} --dont-wait ${do_not_start} >&3 2>&3; then + if [ -r "${NETDATA_SCRIPT_STATUS_PATH}" ]; then + # shellcheck disable=SC1090 + . "${NETDATA_SCRIPT_STATUS_PATH}" + rm -f "${NETDATA_SCRIPT_STATUS_PATH}" + fi if [ -n "${EXIT_REASON}" ]; then fatal "Failed to rebuild existing netdata install: ${EXIT_REASON}" "U${EXIT_CODE}" else fatal "Failed to rebuild existing netdata reinstall." UI0000 fi fi - eval "${env} ./netdata-installer.sh ${REINSTALL_OPTIONS} --dont-wait ${do_not_start}" >&3 2>&3 || fatal "FAILED TO COMPILE/INSTALL NETDATA" U0009 # We no longer store checksum info here. but leave this so that we clean up all environment files upon next update. sed -i '/NETDATA_TARBALL/d' "${ENVIRONMENT_FILE}" -- cgit v1.2.3