diff --git a/install_script.sh.template b/install_script.sh.template index 9e0de8b5..7b3a9b26 100644 --- a/install_script.sh.template +++ b/install_script.sh.template @@ -347,6 +347,33 @@ function remove_rpm_gpg_keys() { done } +function get_redhat_release_version() { + local release_file + local version="" + + for release_file in "${1:-/etc/redhat-release}" "${2:-/etc/system-release}"; do + if [ -r "$release_file" ]; then + version=$(grep -oE '[0-9]+' <"$release_file" | head -1) + if [ -n "$version" ]; then + printf '%s' "$version" + return 0 + fi + fi + done + + for release_file in "${3:-/etc/os-release}" "${4:-/usr/lib/os-release}"; do + if [ -r "$release_file" ]; then + version=$(grep -E '^VERSION_ID=' <"$release_file" | head -1 | cut -d = -f 2 | grep -oE '[0-9]+' | head -1) + if [ -n "$version" ]; then + printf '%s' "$version" + return 0 + fi + fi + done + + printf '7' +} + # Emulate hashmap with simple switch case function getMapData() { @@ -1397,10 +1424,7 @@ if [ "$OS" == "Red Hat" ]; then fi # NOTE: CentOS/RHEL 6 don't have /etc/os-release. /etc/centos-release and /etc/redhat-release # aren't necessarily on the system, so this is not 100 % reliable, but best we can do - release_version=$(grep -oE '[0-9]+' /dev/null | head -1) - if [ -z "$release_version" ]; then - release_version=7 - fi + release_version=$(get_redhat_release_version /etc/redhat-release /etc/system-release /etc/os-release /usr/lib/os-release) if { [ "$DISTRIBUTION" == "Red Hat" ] || [ "$DISTRIBUTION" == "CentOS" ]; } && [ "$release_version" -lt 7 ]; then if [ -n "$agent_minor_version_without_patch" ]; then if [ "$agent_minor_version_without_patch" -ge "52" ]; then diff --git a/unit_tests/test_install_script.sh b/unit_tests/test_install_script.sh index 8f5d017c..e861f643 100755 --- a/unit_tests/test_install_script.sh +++ b/unit_tests/test_install_script.sh @@ -418,6 +418,59 @@ testParEnabledWithoutApiKeyOnlyEnrollment() { assertEquals "$(sudo yq eval '.private_action_runner.api_key_only_enrollment' $config_file)" "null" } +### get_redhat_release_version +setUpReleaseFiles() { + release_dir=$(mktemp -d) + missing="$release_dir/missing" + redhat_release="$release_dir/redhat-release" + system_release="$release_dir/system-release" + os_release="$release_dir/os-release" + usr_lib_os_release="$release_dir/usr-lib-os-release" +} +testRedhatReleasePreferred() { + setUpReleaseFiles + echo "CentOS Linux release 7.9.2009 (Core)" > "$redhat_release" + echo "Amazon Linux release 2 (Karoo)" > "$system_release" + echo 'VERSION_ID="9.4"' > "$os_release" + assertEquals "7" "$(get_redhat_release_version "$redhat_release" "$system_release" "$os_release" "$usr_lib_os_release")" +} +testSystemReleaseUsedWhenRedhatReleaseMissing() { + setUpReleaseFiles + echo "Amazon Linux release 2 (Karoo)" > "$system_release" + echo 'VERSION_ID="9.4"' > "$os_release" + assertEquals "2" "$(get_redhat_release_version "$missing" "$system_release" "$os_release" "$usr_lib_os_release")" +} +testOsReleaseUsedWhenReleaseFilesMissing() { + setUpReleaseFiles + echo 'VERSION_ID="9.4"' > "$os_release" + assertEquals "9" "$(get_redhat_release_version "$missing" "$missing" "$os_release" "$usr_lib_os_release")" +} +testUsrLibOsReleaseUsedAsLastSource() { + setUpReleaseFiles + echo 'VERSION_ID=8' > "$usr_lib_os_release" + assertEquals "8" "$(get_redhat_release_version "$missing" "$missing" "$missing" "$usr_lib_os_release")" +} +testFallsBackToSevenWhenNothingAvailable() { + setUpReleaseFiles + assertEquals "7" "$(get_redhat_release_version "$missing" "$missing" "$missing" "$missing")" +} +testEmptyFilesFallThroughToNextSource() { + setUpReleaseFiles + : > "$redhat_release" + : > "$system_release" + echo 'VERSION_ID="9.4"' > "$os_release" + assertEquals "9" "$(get_redhat_release_version "$redhat_release" "$system_release" "$os_release" "$usr_lib_os_release")" +} +testNonNumericOsReleaseFallsBack() { + setUpReleaseFiles + echo 'VERSION_ID=rawhide' > "$os_release" + assertEquals "7" "$(get_redhat_release_version "$missing" "$missing" "$os_release" "$missing")" +} +testMissingRedhatReleaseIsSilent() { + setUpReleaseFiles + assertEquals "" "$(get_redhat_release_version "$missing" "$missing" "$missing" "$missing" 2>&1 >/dev/null)" +} + ### install_apm_ssi getApmSsiInstallerURL() { (