mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-11-15 02:42:58 +00:00
commit
edcdf9f619
4 changed files with 63 additions and 76 deletions
|
@ -46,6 +46,12 @@ checkout() {
|
||||||
local corebranches
|
local corebranches
|
||||||
local webbranches
|
local webbranches
|
||||||
|
|
||||||
|
# Check if FTL is installed - 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
|
||||||
|
local binary
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}" #binary name will be the last line of the output of get_binary_name (it always begins with pihole-FTL)
|
||||||
|
|
||||||
# Avoid globbing
|
# Avoid globbing
|
||||||
set -f
|
set -f
|
||||||
|
|
||||||
|
@ -86,7 +92,6 @@ checkout() {
|
||||||
fi
|
fi
|
||||||
#echo -e " ${TICK} Pi-hole Core"
|
#echo -e " ${TICK} Pi-hole Core"
|
||||||
|
|
||||||
get_binary_name
|
|
||||||
local path
|
local path
|
||||||
path="development/${binary}"
|
path="development/${binary}"
|
||||||
echo "development" > /etc/pihole/ftlbranch
|
echo "development" > /etc/pihole/ftlbranch
|
||||||
|
@ -101,7 +106,6 @@ checkout() {
|
||||||
fetch_checkout_pull_branch "${webInterfaceDir}" "master" || { echo " ${CROSS} Unable to pull Web master branch"; exit 1; }
|
fetch_checkout_pull_branch "${webInterfaceDir}" "master" || { echo " ${CROSS} Unable to pull Web master branch"; exit 1; }
|
||||||
fi
|
fi
|
||||||
#echo -e " ${TICK} Web Interface"
|
#echo -e " ${TICK} Web Interface"
|
||||||
get_binary_name
|
|
||||||
local path
|
local path
|
||||||
path="master/${binary}"
|
path="master/${binary}"
|
||||||
echo "master" > /etc/pihole/ftlbranch
|
echo "master" > /etc/pihole/ftlbranch
|
||||||
|
@ -161,7 +165,6 @@ checkout() {
|
||||||
fi
|
fi
|
||||||
checkout_pull_branch "${webInterfaceDir}" "${2}"
|
checkout_pull_branch "${webInterfaceDir}" "${2}"
|
||||||
elif [[ "${1}" == "ftl" ]] ; then
|
elif [[ "${1}" == "ftl" ]] ; then
|
||||||
get_binary_name
|
|
||||||
local path
|
local path
|
||||||
path="${2}/${binary}"
|
path="${2}/${binary}"
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ source "/opt/pihole/COL_TABLE"
|
||||||
# make_repo() sourced from basic-install.sh
|
# make_repo() sourced from basic-install.sh
|
||||||
# update_repo() source from basic-install.sh
|
# update_repo() source from basic-install.sh
|
||||||
# getGitFiles() sourced from basic-install.sh
|
# getGitFiles() sourced from basic-install.sh
|
||||||
# get_binary_name() sourced from basic-install.sh
|
|
||||||
# FTLcheckUpdate() sourced from basic-install.sh
|
# FTLcheckUpdate() sourced from basic-install.sh
|
||||||
|
|
||||||
GitCheckUpdateAvail() {
|
GitCheckUpdateAvail() {
|
||||||
|
|
|
@ -138,9 +138,6 @@ else
|
||||||
OVER="\\r\\033[K"
|
OVER="\\r\\033[K"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Define global binary variable
|
|
||||||
binary="tbd"
|
|
||||||
|
|
||||||
# A simple function that just echoes out our logo in ASCII format
|
# A simple function that just echoes out our logo in ASCII format
|
||||||
# This lets users know that it is a Pi-hole, LLC product
|
# This lets users know that it is a Pi-hole, LLC product
|
||||||
show_ascii_berry() {
|
show_ascii_berry() {
|
||||||
|
@ -2189,7 +2186,10 @@ clone_or_update_repos() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Download FTL binary to random temp directory and install FTL binary
|
# Download FTL binary to random temp directory and install FTL binary
|
||||||
|
# Disable directive for SC2120 a value _can_ be passed to this function, but it is passed from an external script that sources this one
|
||||||
|
# shellcheck disable=SC2120
|
||||||
FTLinstall() {
|
FTLinstall() {
|
||||||
|
|
||||||
# Local, named variables
|
# Local, named variables
|
||||||
local latesttag
|
local latesttag
|
||||||
local str="Downloading and Installing FTL"
|
local str="Downloading and Installing FTL"
|
||||||
|
@ -2219,6 +2219,9 @@ FTLinstall() {
|
||||||
ftlBranch="master"
|
ftlBranch="master"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local binary
|
||||||
|
binary="${1}"
|
||||||
|
|
||||||
# Determine which version of FTL to download
|
# Determine which version of FTL to download
|
||||||
if [[ "${ftlBranch}" == "master" ]];then
|
if [[ "${ftlBranch}" == "master" ]];then
|
||||||
url="https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}"
|
url="https://github.com/pi-hole/FTL/releases/download/${latesttag%$'\r'}"
|
||||||
|
@ -2297,6 +2300,8 @@ get_binary_name() {
|
||||||
local machine
|
local machine
|
||||||
machine=$(uname -m)
|
machine=$(uname -m)
|
||||||
|
|
||||||
|
local l_binary
|
||||||
|
|
||||||
local str="Detecting architecture"
|
local str="Detecting architecture"
|
||||||
printf " %b %s..." "${INFO}" "${str}"
|
printf " %b %s..." "${INFO}" "${str}"
|
||||||
# If the machine is arm or aarch
|
# If the machine is arm or aarch
|
||||||
|
@ -2312,24 +2317,24 @@ get_binary_name() {
|
||||||
if [[ "${lib}" == "/lib/ld-linux-aarch64.so.1" ]]; then
|
if [[ "${lib}" == "/lib/ld-linux-aarch64.so.1" ]]; then
|
||||||
printf "%b %b Detected ARM-aarch64 architecture\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected ARM-aarch64 architecture\\n" "${OVER}" "${TICK}"
|
||||||
# set the binary to be used
|
# set the binary to be used
|
||||||
binary="pihole-FTL-aarch64-linux-gnu"
|
l_binary="pihole-FTL-aarch64-linux-gnu"
|
||||||
#
|
#
|
||||||
elif [[ "${lib}" == "/lib/ld-linux-armhf.so.3" ]]; then
|
elif [[ "${lib}" == "/lib/ld-linux-armhf.so.3" ]]; then
|
||||||
#
|
#
|
||||||
if [[ "${rev}" -gt 6 ]]; then
|
if [[ "${rev}" -gt 6 ]]; then
|
||||||
printf "%b %b Detected ARM-hf architecture (armv7+)\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected ARM-hf architecture (armv7+)\\n" "${OVER}" "${TICK}"
|
||||||
# set the binary to be used
|
# set the binary to be used
|
||||||
binary="pihole-FTL-arm-linux-gnueabihf"
|
l_binary="pihole-FTL-arm-linux-gnueabihf"
|
||||||
# Otherwise,
|
# Otherwise,
|
||||||
else
|
else
|
||||||
printf "%b %b Detected ARM-hf architecture (armv6 or lower) Using ARM binary\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected ARM-hf architecture (armv6 or lower) Using ARM binary\\n" "${OVER}" "${TICK}"
|
||||||
# set the binary to be used
|
# set the binary to be used
|
||||||
binary="pihole-FTL-arm-linux-gnueabi"
|
l_binary="pihole-FTL-arm-linux-gnueabi"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
printf "%b %b Detected ARM architecture\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected ARM architecture\\n" "${OVER}" "${TICK}"
|
||||||
# set the binary to be used
|
# set the binary to be used
|
||||||
binary="pihole-FTL-arm-linux-gnueabi"
|
l_binary="pihole-FTL-arm-linux-gnueabi"
|
||||||
fi
|
fi
|
||||||
elif [[ "${machine}" == "x86_64" ]]; then
|
elif [[ "${machine}" == "x86_64" ]]; then
|
||||||
# This gives the architecture of packages dpkg installs (for example, "i386")
|
# This gives the architecture of packages dpkg installs (for example, "i386")
|
||||||
|
@ -2342,12 +2347,12 @@ get_binary_name() {
|
||||||
# in the past (see https://github.com/pi-hole/pi-hole/pull/2004)
|
# in the past (see https://github.com/pi-hole/pi-hole/pull/2004)
|
||||||
if [[ "${dpkgarch}" == "i386" ]]; then
|
if [[ "${dpkgarch}" == "i386" ]]; then
|
||||||
printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}"
|
||||||
binary="pihole-FTL-linux-x86_32"
|
l_binary="pihole-FTL-linux-x86_32"
|
||||||
else
|
else
|
||||||
# 64bit
|
# 64bit
|
||||||
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
|
# set the binary to be used
|
||||||
binary="pihole-FTL-linux-x86_64"
|
l_binary="pihole-FTL-linux-x86_64"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# Something else - we try to use 32bit executable and warn the user
|
# Something else - we try to use 32bit executable and warn the user
|
||||||
|
@ -2358,13 +2363,13 @@ get_binary_name() {
|
||||||
else
|
else
|
||||||
printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}"
|
printf "%b %b Detected 32bit (i686) architecture\\n" "${OVER}" "${TICK}"
|
||||||
fi
|
fi
|
||||||
binary="pihole-FTL-linux-x86_32"
|
l_binary="pihole-FTL-linux-x86_32"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo ${l_binary}
|
||||||
}
|
}
|
||||||
|
|
||||||
FTLcheckUpdate() {
|
FTLcheckUpdate() {
|
||||||
get_binary_name
|
|
||||||
|
|
||||||
#In the next section we check to see if FTL is already installed (in case of pihole -r).
|
#In the next section we check to see if FTL is already installed (in case of pihole -r).
|
||||||
#If the installed version matches the latest version, then check the installed sha1sum of the binary vs the remote sha1sum. If they do not match, then download
|
#If the installed version matches the latest version, then check the installed sha1sum of the binary vs the remote sha1sum. If they do not match, then download
|
||||||
printf " %b Checking for existing FTL binary...\\n" "${INFO}"
|
printf " %b Checking for existing FTL binary...\\n" "${INFO}"
|
||||||
|
@ -2380,6 +2385,9 @@ FTLcheckUpdate() {
|
||||||
ftlBranch="master"
|
ftlBranch="master"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local binary
|
||||||
|
binary="${1}"
|
||||||
|
|
||||||
local remoteSha1
|
local remoteSha1
|
||||||
local localSha1
|
local localSha1
|
||||||
|
|
||||||
|
@ -2458,8 +2466,10 @@ FTLcheckUpdate() {
|
||||||
FTLdetect() {
|
FTLdetect() {
|
||||||
printf "\\n %b FTL Checks...\\n\\n" "${INFO}"
|
printf "\\n %b FTL Checks...\\n\\n" "${INFO}"
|
||||||
|
|
||||||
if FTLcheckUpdate ; then
|
printf " %b" "${2}"
|
||||||
FTLinstall || return 1
|
|
||||||
|
if FTLcheckUpdate "${1}"; then
|
||||||
|
FTLinstall "${1}" || return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2622,8 +2632,15 @@ main() {
|
||||||
fi
|
fi
|
||||||
# Create the pihole user
|
# Create the pihole user
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
|
|
||||||
# Check if FTL is installed - do this early on as FTL is a hard dependency for Pi-hole
|
# Check if FTL is installed - do this early on as FTL is a hard dependency for Pi-hole
|
||||||
if ! FTLdetect; then
|
local funcOutput
|
||||||
|
funcOutput=$(get_binary_name) #Store output of get_binary_name here
|
||||||
|
local binary
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}" #binary name will be the last line of the output of get_binary_name (it always begins with pihole-FTL)
|
||||||
|
local theRest
|
||||||
|
theRest="${funcOutput%pihole-FTL*}" # Print the rest of get_binary_name's output to display (cut out from first instance of "pihole-FTL")
|
||||||
|
if ! FTLdetect "${binary}" "${theRest}"; then
|
||||||
printf " %b FTL Engine not installed\\n" "${CROSS}"
|
printf " %b FTL Engine not installed\\n" "${CROSS}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -342,7 +342,10 @@ def test_FTL_detect_aarch64_no_errors(Pihole):
|
||||||
detectPlatform = Pihole.run('''
|
detectPlatform = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
''')
|
''')
|
||||||
expected_stdout = info_box + ' FTL Checks...'
|
expected_stdout = info_box + ' FTL Checks...'
|
||||||
assert expected_stdout in detectPlatform.stdout
|
assert expected_stdout in detectPlatform.stdout
|
||||||
|
@ -363,7 +366,10 @@ def test_FTL_detect_armv6l_no_errors(Pihole):
|
||||||
detectPlatform = Pihole.run('''
|
detectPlatform = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
''')
|
''')
|
||||||
expected_stdout = info_box + ' FTL Checks...'
|
expected_stdout = info_box + ' FTL Checks...'
|
||||||
assert expected_stdout in detectPlatform.stdout
|
assert expected_stdout in detectPlatform.stdout
|
||||||
|
@ -385,7 +391,10 @@ def test_FTL_detect_armv7l_no_errors(Pihole):
|
||||||
detectPlatform = Pihole.run('''
|
detectPlatform = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
''')
|
''')
|
||||||
expected_stdout = info_box + ' FTL Checks...'
|
expected_stdout = info_box + ' FTL Checks...'
|
||||||
assert expected_stdout in detectPlatform.stdout
|
assert expected_stdout in detectPlatform.stdout
|
||||||
|
@ -402,7 +411,10 @@ def test_FTL_detect_x86_64_no_errors(Pihole):
|
||||||
detectPlatform = Pihole.run('''
|
detectPlatform = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
''')
|
''')
|
||||||
expected_stdout = info_box + ' FTL Checks...'
|
expected_stdout = info_box + ' FTL Checks...'
|
||||||
assert expected_stdout in detectPlatform.stdout
|
assert expected_stdout in detectPlatform.stdout
|
||||||
|
@ -419,7 +431,10 @@ def test_FTL_detect_unknown_no_errors(Pihole):
|
||||||
detectPlatform = Pihole.run('''
|
detectPlatform = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
''')
|
''')
|
||||||
expected_stdout = 'Not able to detect architecture (unknown: mips)'
|
expected_stdout = 'Not able to detect architecture (unknown: mips)'
|
||||||
assert expected_stdout in detectPlatform.stdout
|
assert expected_stdout in detectPlatform.stdout
|
||||||
|
@ -438,64 +453,14 @@ def test_FTL_download_aarch64_no_errors(Pihole):
|
||||||
''')
|
''')
|
||||||
download_binary = Pihole.run('''
|
download_binary = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
binary="pihole-FTL-aarch64-linux-gnu"
|
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLinstall
|
FTLinstall "pihole-FTL-aarch64-linux-gnu"
|
||||||
''')
|
''')
|
||||||
expected_stdout = tick_box + ' Downloading and Installing FTL'
|
expected_stdout = tick_box + ' Downloading and Installing FTL'
|
||||||
assert expected_stdout in download_binary.stdout
|
assert expected_stdout in download_binary.stdout
|
||||||
assert 'error' not in download_binary.stdout.lower()
|
assert 'error' not in download_binary.stdout.lower()
|
||||||
|
|
||||||
|
|
||||||
def test_FTL_download_unknown_fails_no_errors(Pihole):
|
|
||||||
'''
|
|
||||||
confirms unknown binary is not downloaded for FTL engine
|
|
||||||
'''
|
|
||||||
# mock whiptail answers and ensure installer dependencies
|
|
||||||
mock_command('whiptail', {'*': ('', '0')}, Pihole)
|
|
||||||
Pihole.run('''
|
|
||||||
source /opt/pihole/basic-install.sh
|
|
||||||
distro_check
|
|
||||||
install_dependent_packages ${INSTALLER_DEPS[@]}
|
|
||||||
''')
|
|
||||||
download_binary = Pihole.run('''
|
|
||||||
source /opt/pihole/basic-install.sh
|
|
||||||
binary="pihole-FTL-mips"
|
|
||||||
create_pihole_user
|
|
||||||
FTLinstall
|
|
||||||
''')
|
|
||||||
expected_stdout = cross_box + ' Downloading and Installing FTL'
|
|
||||||
assert expected_stdout in download_binary.stdout
|
|
||||||
error1 = 'Error: URL https://github.com/pi-hole/FTL/releases/download/'
|
|
||||||
assert error1 in download_binary.stdout
|
|
||||||
error2 = 'not found'
|
|
||||||
assert error2 in download_binary.stdout
|
|
||||||
|
|
||||||
|
|
||||||
def test_FTL_download_binary_unset_no_errors(Pihole):
|
|
||||||
'''
|
|
||||||
confirms unset binary variable does not download FTL engine
|
|
||||||
'''
|
|
||||||
# mock whiptail answers and ensure installer dependencies
|
|
||||||
mock_command('whiptail', {'*': ('', '0')}, Pihole)
|
|
||||||
Pihole.run('''
|
|
||||||
source /opt/pihole/basic-install.sh
|
|
||||||
distro_check
|
|
||||||
install_dependent_packages ${INSTALLER_DEPS[@]}
|
|
||||||
''')
|
|
||||||
download_binary = Pihole.run('''
|
|
||||||
source /opt/pihole/basic-install.sh
|
|
||||||
create_pihole_user
|
|
||||||
FTLinstall
|
|
||||||
''')
|
|
||||||
expected_stdout = cross_box + ' Downloading and Installing FTL'
|
|
||||||
assert expected_stdout in download_binary.stdout
|
|
||||||
error1 = 'Error: URL https://github.com/pi-hole/FTL/releases/download/'
|
|
||||||
assert error1 in download_binary.stdout
|
|
||||||
error2 = 'not found'
|
|
||||||
assert error2 in download_binary.stdout
|
|
||||||
|
|
||||||
|
|
||||||
def test_FTL_binary_installed_and_responsive_no_errors(Pihole):
|
def test_FTL_binary_installed_and_responsive_no_errors(Pihole):
|
||||||
'''
|
'''
|
||||||
confirms FTL binary is copied and functional in installed location
|
confirms FTL binary is copied and functional in installed location
|
||||||
|
@ -503,7 +468,10 @@ def test_FTL_binary_installed_and_responsive_no_errors(Pihole):
|
||||||
installed_binary = Pihole.run('''
|
installed_binary = Pihole.run('''
|
||||||
source /opt/pihole/basic-install.sh
|
source /opt/pihole/basic-install.sh
|
||||||
create_pihole_user
|
create_pihole_user
|
||||||
FTLdetect
|
funcOutput=$(get_binary_name)
|
||||||
|
binary="pihole-FTL${funcOutput##*pihole-FTL}"
|
||||||
|
theRest="${funcOutput%pihole-FTL*}"
|
||||||
|
FTLdetect "${binary}" "${theRest}"
|
||||||
pihole-FTL version
|
pihole-FTL version
|
||||||
''')
|
''')
|
||||||
expected_stdout = 'v'
|
expected_stdout = 'v'
|
||||||
|
|
Loading…
Reference in a new issue