Properly propagate errors from installer/updater to kickstart script. (#13802)
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.
Austin S. Hemmelgarn committed
Oct 19, 2022 at 07:10 UTC
05ef3a0c55747ab41abe5e2459d787d9a43a4416
3 files changed
+52
-27
packaging/installer/functions.sh
+11
-3
@@ -253,9 +253,17 @@ exit_reason() {
253
EXIT_REASON="${1}"
254
EXIT_CODE="${2}"
255
if [ -n "${NETDATA_PROPAGATE_WARNINGS}" ]; then
256
- export EXIT_REASON
257
- export EXIT_CODE
258
- export NETDATA_WARNINGS="${NETDATA_WARNINGS}${SAVED_WARNINGS}"
256
+ if [ -n "${NETDATA_SCRIPT_STATUS_PATH}" ]; then
257
+ {
258
+ echo "EXIT_REASON=\"${EXIT_REASON}\""
259
+ echo "EXIT_CODE=\"${EXIT_CODE}\""
260
+ echo "NETDATA_WARNINGS=\"${NETDATA_WARNINGS}${SAVED_WARNINGS}\""
261
+ } >> "${NETDATA_SCRIPT_STATUS_PATH}"
262
+ else
263
+ export EXIT_REASON
264
+ export EXIT_CODE
265
+ export NETDATA_WARNINGS="${NETDATA_WARNINGS}${SAVED_WARNINGS}"
266
+ fi
267
fi
268
fi
269
}
packaging/installer/kickstart.sh
+24
-20
@@ -479,6 +479,26 @@ run() {
479
return ${ret}
480
}
481
482
+run_script() {
483
+ set_tmpdir
484
+
485
+ export NETDATA_SCRIPT_STATUS_PATH="${tmpdir}/.script-status"
486
+
487
+ export NETDATA_SAVE_WARNINGS=1
488
+ export NETDATA_PROPAGATE_WARNINGS=1
489
+ # shellcheck disable=SC2090
490
+ export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
491
+
492
+ # shellcheck disable=SC2086
493
+ run ${ROOTCMD} "${@}"
494
+
495
+ if [ -r "${NETDATA_SCRIPT_STATUS_PATH}" ]; then
496
+ # shellcheck disable=SC1090
497
+ . "${NETDATA_SCRIPT_STATUS_PATH}"
498
+ rm -f "${NETDATA_SCRIPT_STATUS_PATH}"
499
+ fi
500
+}
501
+
502
warning() {
503
printf >&2 "%s\n\n" "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} WARNING ${TPUT_RESET} ${*}"
504
NETDATA_WARNINGS="${NETDATA_WARNINGS}\n - ${*}"
@@ -717,11 +737,7 @@ update() {
737
opts="--interactive"
738
fi
739
720
- export NETDATA_SAVE_WARNINGS=1
721
- export NETDATA_PROPAGATE_WARNINGS=1
722
- # shellcheck disable=SC2090
723
- export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
724
- if run ${ROOTCMD} "${updater}" ${opts} --not-running-from-cron; then
740
+ if run_script "${updater}" ${opts} --not-running-from-cron; then
741
progress "Updated existing install at ${ndprefix}"
742
return 0
743
else
@@ -763,11 +779,7 @@ uninstall() {
779
return 0
780
else
781
progress "Found existing netdata-uninstaller. Running it.."
766
- export NETDATA_SAVE_WARNINGS=1
767
- export NETDATA_PROPAGATE_WARNINGS=1
768
- # shellcheck disable=SC2090
769
- export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
770
- if ! run ${ROOTCMD} "${uninstaller}" $FLAGS; then
782
+ if ! run_script "${uninstaller}" ${FLAGS}; then
783
warning "Uninstaller failed. Some parts of Netdata may still be present on the system."
784
fi
785
fi
@@ -780,11 +792,7 @@ uninstall() {
792
progress "Downloading netdata-uninstaller ..."
793
download "${uninstaller_url}" "${tmpdir}/netdata-uninstaller.sh"
794
chmod +x "${tmpdir}/netdata-uninstaller.sh"
783
- export NETDATA_SAVE_WARNINGS=1
784
- export NETDATA_PROPAGATE_WARNINGS=1
785
- # shellcheck disable=SC2090
786
- export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
787
- if ! run ${ROOTCMD} "${tmpdir}/netdata-uninstaller.sh" $FLAGS; then
795
+ if ! run_script "${tmpdir}/netdata-uninstaller.sh" ${FLAGS}; then
796
warning "Uninstaller failed. Some parts of Netdata may still be present on the system."
797
fi
798
fi
@@ -1675,12 +1683,8 @@ build_and_install() {
1683
opts="${opts} --disable-cloud"
1684
fi
1685
1678
- export NETDATA_SAVE_WARNINGS=1
1679
- export NETDATA_PROPAGATE_WARNINGS=1
1680
- # shellcheck disable=SC2090
1681
- export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
1686
# shellcheck disable=SC2086
1683
- run ${ROOTCMD} ./netdata-installer.sh ${opts}
1687
+ run_script ./netdata-installer.sh ${opts}
1688
1689
case $? in
1690
1)
packaging/installer/netdata-updater.sh
+17
-4
@@ -85,9 +85,17 @@ exit_reason() {
85
EXIT_REASON="${1}"
86
EXIT_CODE="${2}"
87
if [ -n "${NETDATA_PROPAGATE_WARNINGS}" ]; then
88
- export EXIT_REASON
89
- export EXIT_CODE
90
- export NETDATA_WARNINGS
88
+ if [ -n "${NETDATA_SCRIPT_STATUS_PATH}" ]; then
89
+ {
90
+ echo "EXIT_REASON=\"${EXIT_REASON}\""
91
+ echo "EXIT_CODE=\"${EXIT_CODE}\""
92
+ echo "NETDATA_WARNINGS=\"${NETDATA_WARNINGS}\""
93
+ } >> "${NETDATA_SCRIPT_STATUS_PATH}"
94
+ else
95
+ export EXIT_REASON
96
+ export EXIT_CODE
97
+ export NETDATA_WARNINGS
98
+ fi
99
fi
100
fi
101
}
@@ -602,15 +610,20 @@ update_build() {
610
export NETDATA_SAVE_WARNINGS=1
611
export NETDATA_PROPAGATE_WARNINGS=1
612
export NETDATA_WARNINGS="${NETDATA_WARNINGS}"
613
+ export NETDATA_SCRIPT_STATUS_PATH="${NETDATA_SCRIPT_STATUS_PATH}"
614
# shellcheck disable=SC2086
615
if ! ${env} ./netdata-installer.sh ${REINSTALL_OPTIONS} --dont-wait ${do_not_start} >&3 2>&3; then
616
+ if [ -r "${NETDATA_SCRIPT_STATUS_PATH}" ]; then
617
+ # shellcheck disable=SC1090
618
+ . "${NETDATA_SCRIPT_STATUS_PATH}"
619
+ rm -f "${NETDATA_SCRIPT_STATUS_PATH}"
620
+ fi
621
if [ -n "${EXIT_REASON}" ]; then
622
fatal "Failed to rebuild existing netdata install: ${EXIT_REASON}" "U${EXIT_CODE}"
623
else
624
fatal "Failed to rebuild existing netdata reinstall." UI0000
625
fi
626
fi
613
- eval "${env} ./netdata-installer.sh ${REINSTALL_OPTIONS} --dont-wait ${do_not_start}" >&3 2>&3 || fatal "FAILED TO COMPILE/INSTALL NETDATA" U0009
627
628
# We no longer store checksum info here. but leave this so that we clean up all environment files upon next update.
629
sed -i '/NETDATA_TARBALL/d' "${ENVIRONMENT_FILE}"