Fix and simplify binary download (#5451)

This commit is contained in:
DL6ER 2023-10-22 23:03:42 +02:00 committed by GitHub
commit a44e51bf76
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 58 deletions

View file

@ -90,7 +90,6 @@ IPV6_ADDRESS=${IPV6_ADDRESS}
QUERY_LOGGING=true QUERY_LOGGING=true
WEBPORT=8080 WEBPORT=8080
PRIVACY_LEVEL=0 PRIVACY_LEVEL=0
CACHE_SIZE=10000
if [ -z "${USER}" ]; then if [ -z "${USER}" ]; then
USER="$(id -un)" USER="$(id -un)"
@ -301,11 +300,11 @@ package_manager_detect() {
PKG_COUNT="${PKG_MANAGER} -s -o Debug::NoLocking=true upgrade | grep -c ^Inst || true" PKG_COUNT="${PKG_MANAGER} -s -o Debug::NoLocking=true upgrade | grep -c ^Inst || true"
# Update package cache # Update package cache
update_package_cache || exit 1 update_package_cache || exit 1
# Packages required to perform the os_check (stored as an array) # Packages required to perform the os_check and FTL binary detection
OS_CHECK_DEPS=(grep dnsutils) OS_CHECK_DEPS=(grep dnsutils binutils)
# Packages required to run this install script (stored as an array) # Packages required to run this install script
INSTALLER_DEPS=(git iproute2 dialog ca-certificates binutils) INSTALLER_DEPS=(git iproute2 dialog ca-certificates)
# Packages required to run Pi-hole (stored as an array) # Packages required to run Pi-hole
PIHOLE_DEPS=(cron curl iputils-ping psmisc sudo unzip idn2 libcap2-bin dns-root-data libcap2 netcat-openbsd procps jq) PIHOLE_DEPS=(cron curl iputils-ping psmisc sudo unzip idn2 libcap2-bin dns-root-data libcap2 netcat-openbsd procps jq)
# If apt-get is not found, check for rpm. # If apt-get is not found, check for rpm.
@ -1856,57 +1855,43 @@ remove_dir() {
} }
get_binary_name() { get_binary_name() {
# Get the OS architecture (we cannot use uname -m as this may return an incorrect architecture when buildx-compiling with QEMU for arm) local l_binary
local machine local machine
machine=$(uname -m) machine=$(uname -m)
# Get local GLIBC version (leave at "0.0" if no GLIBC, e.g., on musl)
local l_glibc_version="0.0"
if ldd --version 2>&1 | grep -q "GLIBC"; then
l_glibc_version=$(ldd --version | head -n1 | grep -o '[0-9.]*$')
printf "%b %b Detected GLIBC version %s\\n" "${OVER}" "${TICK}" "${l_glibc_version}"
else
printf "%b %b No GLIBC detected\\n" "${OVER}" "${CROSS}"
fi
local l_binary
local str="Detecting processor" local str="Detecting processor"
printf " %b %s..." "${INFO}" "${str}" printf " %b %s..." "${INFO}" "${str}"
# If the machine is arm or aarch
if [[ "${machine}" == "arm"* || "${machine}" == *"aarch"* ]]; then # If the machine is aarch64 (armv8)
# ARM if [[ "${machine}" == "aarch64" ]]; then
# If AArch64 is found (e.g., BCM2711 in Raspberry Pi 4)
printf "%b %b Detected AArch64 (64 Bit ARM) architecture\\n" "${OVER}" "${TICK}"
l_binary="pihole-FTL-arm64"
elif [[ "${machine}" == "arm"* ]]; then
# ARM 32 bit
# Get supported processor from other binaries installed on the system # Get supported processor from other binaries installed on the system
# We cannot really rely on the output of $(uname -m) above as this may
# return an incorrect architecture when buildx-compiling with QEMU
local cpu_arch local cpu_arch
cpu_arch=$(readelf -A "$(command -v sh)" | grep Tag_CPU_arch | awk '{ print $2 }') cpu_arch=$(readelf -A "$(command -v sh)" | grep Tag_CPU_arch | awk '{ print $2 }')
# Get the revision from the CPU architecture # Get the revision from the CPU architecture
local rev local rev
rev=$(echo "${cpu_arch}" | grep -o '[0-9]*') rev=$(echo "${cpu_arch}" | grep -o '[0-9]*')
if [[ "${machine}" == "aarch64" ]]; then if [[ "${rev}" -eq 6 ]]; then
printf "%b %b Detected AArch64 (64 Bit ARM) architecture\\n" "${OVER}" "${TICK}" # If ARMv6 is found (e.g., BCM2835 in Raspberry Pi 1 and Zero)
# set the binary to be used
l_binary="pihole-FTL-arm64"
elif [[ "${cpu_arch}" == "armv6"* ]]; then
printf "%b %b Detected ARMv6 architecture\\n" "${OVER}" "${TICK}" printf "%b %b Detected ARMv6 architecture\\n" "${OVER}" "${TICK}"
# set the binary to be used (e.g., BCM2835 as found in Raspberry Pi Zero and Model 1)
l_binary="pihole-FTL-armv6" l_binary="pihole-FTL-armv6"
elif [[ "${rev}" -ge 7 ]]; then
# If ARMv7 or higher is found (e.g., BCM2836 in Raspberry PI 2 Mod. B)
# This path is also used for ARMv8 when the OS is in 32bit mode
# (e.g., BCM2837 in Raspberry Pi Model 3B, or BCM2711 in Raspberry Pi 4)
printf "%b %b Detected ARMv7 (or newer) architecture (%s)\\n" "${OVER}" "${TICK}" "${cpu_arch}"
l_binary="pihole-FTL-armv7"
else else
# If ARMv8 or higher is found (e.g., BCM2837 as found in Raspberry Pi Model 3B) # Otherwise, Pi-hole does not support this architecture
if [[ "${cpu_arch}" == "v7" || "${rev}" -gt 7 ]]; then printf "%b %b This processor architecture is not supported by Pi-hole (%s)\\n" "${OVER}" "${CROSS}" "${cpu_arch}"
printf "%b %b Detected ARMv7 (or newer) architecture (%s)\\n" "${OVER}" "${TICK}" "${cpu_arch}" l_binary=""
# set the binary to be used
l_binary="pihole-FTL-armv7"
elif [[ "${rev}" -gt 6 ]]; then
# Otherwise, if ARMv7 is found (e.g., BCM2836 as found in Raspberry Pi Model 2)
printf "%b %b Detected ARMv7 architecture (%s)\\n" "${OVER}" "${TICK}" "${cpu_arch}"
# set the binary to be used
l_binary="pihole-FTL-armv6"
else
# Otherwise, Pi-hole does not support this architecture
printf "%b %b This processor architecture is not supported by Pi-hole (%s)\\n" "${OVER}" "${CROSS}" "${cpu_arch}"
l_binary=""
fi
fi fi
elif [[ "${machine}" == "x86_64" ]]; then elif [[ "${machine}" == "x86_64" ]]; then
# This gives the processor of packages dpkg installs (for example, "i386") # This gives the processor of packages dpkg installs (for example, "i386")
@ -1921,9 +1906,8 @@ get_binary_name() {
printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}" printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}"
l_binary="pihole-FTL-386" l_binary="pihole-FTL-386"
else else
# 64bit # 64bit OS
printf "%b %b Detected x86_64 architecture\\n" "${OVER}" "${TICK}" printf "%b %b Detected x86_64 architecture\\n" "${OVER}" "${TICK}"
# set the binary to be used
l_binary="pihole-FTL-amd64" l_binary="pihole-FTL-amd64"
fi fi
elif [[ "${machine}" == "riscv64" ]]; then elif [[ "${machine}" == "riscv64" ]]; then
@ -2104,16 +2088,6 @@ main() {
fi fi
fi fi
# Check if there is a usable FTL binary available on this architecture - do
# this early on as FTL is a hard dependency for Pi-hole
local funcOutput
funcOutput=$(get_binary_name) #Store output of get_binary_name here
# Abort early if this processor is not supported (get_binary_name returns empty string)
if [[ "${funcOutput}" == "" ]]; then
printf " %b Upgrade/install aborted\\n" "${CROSS}" "${DISTRO_NAME}"
exit 1
fi
# Check if SELinux is Enforcing and exit before doing anything else # Check if SELinux is Enforcing and exit before doing anything else
checkSelinux checkSelinux
@ -2130,6 +2104,16 @@ main() {
# Check that the installed OS is officially supported - display warning if not # Check that the installed OS is officially supported - display warning if not
os_check os_check
# Check if there is a usable FTL binary available on this architecture - do
# this early on as FTL is a hard dependency for Pi-hole
local funcOutput
funcOutput=$(get_binary_name) #Store output of get_binary_name here
# Abort early if this processor is not supported (get_binary_name returns empty string)
if [[ "${funcOutput}" == "" ]]; then
printf " %b Upgrade/install aborted\\n" "${CROSS}" "${DISTRO_NAME}"
exit 1
fi
# Install packages used by this installation script # Install packages used by this installation script
printf " %b Checking for / installing Required dependencies for this install script...\\n" "${INFO}" printf " %b Checking for / installing Required dependencies for this install script...\\n" "${INFO}"
install_dependent_packages "${INSTALLER_DEPS[@]}" install_dependent_packages "${INSTALLER_DEPS[@]}"

View file

@ -269,8 +269,8 @@ def test_FTL_detect_armv6_no_errors(host):
mock_command_2( mock_command_2(
"readelf", "readelf",
{ {
"-A /bin/sh": ("Tag_CPU_arch: armv6KZ", "0"), "-A /bin/sh": ("Tag_CPU_arch: armv6", "0"),
"-A /usr/bin/sh": ("Tag_CPU_arch: armv6KZ", "0"), "-A /usr/bin/sh": ("Tag_CPU_arch: armv6", "0"),
}, },
host, host,
) )
@ -319,7 +319,7 @@ def test_FTL_detect_armv7l_no_errors(host):
) )
expected_stdout = info_box + " FTL Checks..." expected_stdout = info_box + " FTL Checks..."
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + (" Detected ARMv7 architecture (armv7l)") expected_stdout = tick_box + (" Detected ARMv7 (or newer) architecture")
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + " Downloading and Installing FTL" expected_stdout = tick_box + " Downloading and Installing FTL"
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout
@ -352,7 +352,7 @@ def test_FTL_detect_armv7_no_errors(host):
) )
expected_stdout = info_box + " FTL Checks..." expected_stdout = info_box + " FTL Checks..."
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + (" Detected ARMv7 architecture (armv7)") expected_stdout = tick_box + (" Detected ARMv7 (or newer) architecture")
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout
expected_stdout = tick_box + " Downloading and Installing FTL" expected_stdout = tick_box + " Downloading and Installing FTL"
assert expected_stdout in detectPlatform.stdout assert expected_stdout in detectPlatform.stdout