summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAustin S. Hemmelgarn <austin@netdata.cloud>2024-03-20 10:14:51 -0400
committerGitHub <noreply@github.com>2024-03-20 10:14:51 -0400
commit11cf7564d5e3cdf524c38c6b29141932e5cfcbde (patch)
tree12097d81a6744aa6cacb4a902a7636aaf8e3e51c
parent2dd5146ca8878f5afe293b5b7f6632be587455b9 (diff)
Improve offline install error handling. (#17153)
* Handle braindead firewalls that block HTTP HEAD requests. Apparently there exist firewalls out there that allow HTTP GET requests but block HTTP HEAD requests. This causes issues in our installer code because we use HEAD requests to efficiently check if files exist on remote servers. In most cases, correct behavior here is to check if a known valid URL fails our remote file check, and if it does short-circuit the check on subsequent calls. * Bail early if we fail to download anything for offline installs. This ensures we give a proper error message.
-rwxr-xr-xpackaging/installer/kickstart.sh22
1 files changed, 21 insertions, 1 deletions
diff --git a/packaging/installer/kickstart.sh b/packaging/installer/kickstart.sh
index 04b34fd77f..6d9f4ea0e7 100755
--- a/packaging/installer/kickstart.sh
+++ b/packaging/installer/kickstart.sh
@@ -2,7 +2,7 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
-# Next unused error code: F0516
+# Next unused error code: F0517
# ======================================================================
# Constants
@@ -595,6 +595,8 @@ check_for_remote_file() {
if echo "${url}" | grep -Eq "^file:///"; then
[ -e "${url#file://}" ] || return 1
+ elif [ -n "${NETDATA_ASSUME_REMOTE_FILES_ARE_PRESENT}" ]; then
+ return 0
elif [ -n "${CURL}" ]; then
"${CURL}" --output /dev/null --silent --head --fail "${url}" || return 1
elif command -v wget > /dev/null 2>&1; then
@@ -1509,15 +1511,21 @@ try_package_install() {
deb)
repoconfig_file="${repoconfig_name}${pkg_vsep}${REPOCONFIG_DEB_VERSION}${pkg_suffix}.${pkg_type}"
repoconfig_url="${REPOCONFIG_DEB_URL_PREFIX}/${repo_prefix}/${repoconfig_file}"
+ ref_check_url="${REPOCONFIG_DEB_URL_PREFIX}"
;;
rpm)
repoconfig_file="${repoconfig_name}${pkg_vsep}${REPOCONFIG_RPM_VERSION}${pkg_suffix}.${pkg_type}"
repoconfig_url="${REPOCONFIG_RPM_URL_PREFIX}/${repo_prefix}/${SYSARCH}/${repoconfig_file}"
+ ref_check_url="${REPOCONFIG_RPM_URL_PREFIX}"
;;
esac
if ! pkg_installed "${repoconfig_name}"; then
progress "Checking for availability of repository configuration package."
+ if ! check_for_remote_file "${ref_check_url}"; then
+ NETDATA_ASSUME_REMOTE_FILES_ARE_PRESENT=1
+ fi
+
if ! check_for_remote_file "${repoconfig_url}"; then
warning "No repository configuration package available for ${DISTRO} ${SYSVERSION}. Cannot install native packages on this system."
return 2
@@ -1660,6 +1668,10 @@ try_static_install() {
progress "Attempting to install using static build..."
fi
+ if ! check_for_remote_file "${NETDATA_TARBALL_BASEURL}"; then
+ NETDATA_ASSUME_REMOTE_FILES_ARE_PRESENT=1
+ fi
+
# Check status code first, so that we can provide nicer fallback for dry runs.
if check_for_remote_file "${NETDATA_STATIC_ARCHIVE_URL}"; then
netdata_agent="${NETDATA_STATIC_ARCHIVE_NAME}"
@@ -1898,6 +1910,10 @@ prepare_offline_install_source() {
static|'')
set_static_archive_urls "${SELECTED_RELEASE_CHANNEL}" "x86_64"
+ if ! check_for_remote_file "${NETDATA_TARBALL_BASEURL}"; then
+ NETDATA_ASSUME_REMOTE_FILES_ARE_PRESENT=1
+ fi
+
if check_for_remote_file "${NETDATA_STATIC_ARCHIVE_URL}"; then
for arch in ${STATIC_INSTALL_ARCHES}; do
set_static_archive_urls "${SELECTED_RELEASE_CHANNEL}" "${arch}"
@@ -1922,6 +1938,10 @@ prepare_offline_install_source() {
fi
fi
+ if ! find . -name '*.gz.run'; then
+ fatal "Did not actually download any static installer archives, cannot continue. ${BADNET_MSG}." F0516
+ fi
+
progress "Fetching ${NETDATA_STATIC_ARCHIVE_CHECKSUM_URL}"
if ! download "${NETDATA_STATIC_ARCHIVE_CHECKSUM_URL}" "sha256sums.txt"; then
fatal "Failed to download checksum file. ${BADNET_MSG}." F0506