Merge pull request #3688 from pi-hole/tweak/os-check

Tweaks to os_check() Redux
This commit is contained in:
Adam Warner 2020-08-17 17:31:58 +01:00 committed by GitHub
commit 42f55f5202
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 50 deletions

View file

@ -396,49 +396,46 @@ check_critical_program_versions() {
os_check() { os_check() {
# This function gets a list of supported OS versions from a TXT record at versions.pi-hole.net # This function gets a list of supported OS versions from a TXT record at versions.pi-hole.net
# and determines whether or not the script is running on one of those systems # and determines whether or not the script is running on one of those systems
local remote_os_domain valid_os valid_version detected_os_pretty detected_os detected_version local remote_os_domain valid_os valid_version detected_os detected_version
remote_os_domain="versions.pi-hole.net" remote_os_domain="versions.pi-hole.net"
valid_os=false
valid_version=false
detected_os_pretty=$(cat /etc/*release | grep PRETTY_NAME | cut -d '=' -f2- | tr -d '"') detected_os=$(grep "\bID\b" /etc/os-release | cut -d '=' -f2 | tr -d '"')
detected_os="${detected_os_pretty%% *}" detected_version=$(grep VERSION_ID /etc/os-release | cut -d '=' -f2 | tr -d '"')
detected_version=$(cat /etc/*release | grep VERSION_ID | cut -d '=' -f2- | tr -d '"')
IFS=" " read -r -a supportedOS < <(dig +short -t txt ${remote_os_domain} | tr -d '"') IFS=" " read -r -a supportedOS < <(dig +short -t txt ${remote_os_domain} @ns1.pi-hole.net | tr -d '"')
for i in "${supportedOS[@]}" for distro_and_versions in "${supportedOS[@]}"
do do
os_part=$(echo "$i" | cut -d '=' -f1) distro_part="${distro_and_versions%%=*}"
versions_part=$(echo "$i" | cut -d '=' -f2-) versions_part="${distro_and_versions##*=}"
if [[ "${detected_os}" =~ ${os_part} ]]; then if [[ "${detected_os^^}" =~ ${distro_part^^} ]]; then
valid_os=true valid_os=true
IFS="," read -r -a supportedVer <<<"${versions_part}" IFS="," read -r -a supportedVer <<<"${versions_part}"
for x in "${supportedVer[@]}" for version in "${supportedVer[@]}"
do do
if [[ "${detected_version}" =~ $x ]];then if [[ "${detected_version}" =~ $version ]]; then
valid_version=true valid_version=true
break break
fi fi
done done
break break
fi fi
done done
# Display findings back to the user # Display findings back to the user
if [ "$valid_os" = true ]; then if [ "$valid_os" = true ]; then
log_write "${TICK} Distro: ${COL_GREEN}${detected_os}${COL_NC}" log_write "${TICK} Distro: ${COL_GREEN}${detected_os^}${COL_NC}"
if [ "$valid_version" = true ]; then if [ "$valid_version" = true ]; then
log_write "${TICK} Version: ${COL_GREEN}${detected_version}${COL_NC}" log_write "${TICK} Version: ${COL_GREEN}${detected_version}${COL_NC}"
else else
log_write "${CROSS} Version: ${COL_RED}${detected_version}${COL_NC}" log_write "${CROSS} Version: ${COL_RED}${detected_version}${COL_NC}"
log_write "${CROSS} Error: ${COL_RED}${detected_os} is supported but version ${detected_version} is currently unsupported (${FAQ_HARDWARE_REQUIREMENTS})${COL_NC}" log_write "${CROSS} Error: ${COL_RED}${detected_os^} is supported but version ${detected_version} is currently unsupported (${FAQ_HARDWARE_REQUIREMENTS})${COL_NC}"
fi fi
else else
log_write "${CROSS} Distro: ${COL_RED}${detected_os}${COL_NC}" log_write "${CROSS} Distro: ${COL_RED}${detected_os^}${COL_NC}"
log_write "${CROSS} Error: ${COL_RED}${detected_os} is not a supported distro (${FAQ_HARDWARE_REQUIREMENTS})${COL_NC}" log_write "${CROSS} Error: ${COL_RED}${detected_os^} is not a supported distro (${FAQ_HARDWARE_REQUIREMENTS})${COL_NC}"
fi fi
} }

View file

@ -182,15 +182,11 @@ os_check() {
if [ "$PIHOLE_SKIP_OS_CHECK" != true ]; then if [ "$PIHOLE_SKIP_OS_CHECK" != true ]; then
# This function gets a list of supported OS versions from a TXT record at versions.pi-hole.net # This function gets a list of supported OS versions from a TXT record at versions.pi-hole.net
# and determines whether or not the script is running on one of those systems # and determines whether or not the script is running on one of those systems
local remote_os_domain valid_os valid_version detected_os_pretty detected_os detected_version display_warning local remote_os_domain valid_os valid_version detected_os detected_version display_warning
remote_os_domain="versions.pi-hole.net" remote_os_domain="versions.pi-hole.net"
valid_os=false
valid_version=false
display_warning=true
detected_os_pretty=$(cat /etc/*release | grep PRETTY_NAME | cut -d '=' -f2- | tr -d '"') detected_os=$(grep "\bID\b" /etc/os-release | cut -d '=' -f2 | tr -d '"')
detected_os="${detected_os_pretty%% *}" detected_version=$(grep VERSION_ID /etc/os-release | cut -d '=' -f2 | tr -d '"')
detected_version=$(cat /etc/*release | grep VERSION_ID | cut -d '=' -f2- | tr -d '"')
IFS=" " read -r -a supportedOS < <(dig +short -t txt ${remote_os_domain} @ns1.pi-hole.net | tr -d '"') IFS=" " read -r -a supportedOS < <(dig +short -t txt ${remote_os_domain} @ns1.pi-hole.net | tr -d '"')
@ -198,32 +194,32 @@ os_check() {
printf " %b %bRetrieval of supported OS failed. Please contact support. %b\\n" "${CROSS}" "${COL_LIGHT_RED}" "${COL_NC}" printf " %b %bRetrieval of supported OS failed. Please contact support. %b\\n" "${CROSS}" "${COL_LIGHT_RED}" "${COL_NC}"
exit 1 exit 1
else else
for i in "${supportedOS[@]}" for distro_and_versions in "${supportedOS[@]}"
do do
os_part=$(echo "$i" | cut -d '=' -f1) distro_part="${distro_and_versions%%=*}"
versions_part=$(echo "$i" | cut -d '=' -f2-) versions_part="${distro_and_versions##*=}"
if [[ "${detected_os}" =~ ${os_part} ]]; then if [[ "${detected_os^^}" =~ ${distro_part^^} ]]; then
valid_os=true valid_os=true
IFS="," read -r -a supportedVer <<<"${versions_part}" IFS="," read -r -a supportedVer <<<"${versions_part}"
for x in "${supportedVer[@]}" for version in "${supportedVer[@]}"
do do
if [[ "${detected_version}" =~ $x ]];then if [[ "${detected_version}" =~ $version ]]; then
valid_version=true valid_version=true
break
fi
done
break break
fi fi
done
break
fi
done done
fi fi
if [ "$valid_os" = true ] && [ "$valid_version" = true ]; then if [ "$valid_os" = true ] && [ "$valid_version" = true ]; then
display_warning=false display_warning=false
fi fi
if [ "$display_warning" = true ]; then if [ "$display_warning" != false ]; then
printf " %b %bUnsupported OS detected: %s%b\\n" "${CROSS}" "${COL_LIGHT_RED}" "${detected_os_pretty}" "${COL_NC}" printf " %b %bUnsupported OS detected: %s %s%b\\n" "${CROSS}" "${COL_LIGHT_RED}" "${detected_os^}" "${detected_version}" "${COL_NC}"
printf " https://docs.pi-hole.net/main/prerequesites/#supported-operating-systems\\n" printf " https://docs.pi-hole.net/main/prerequesites/#supported-operating-systems\\n"
printf "\\n" printf "\\n"
printf " e.g: If you are seeing this message on a fresh install, you can run:\\n" printf " e.g: If you are seeing this message on a fresh install, you can run:\\n"