Merge pull request #3537 from MichaIng/patch-2

Further failsafe check for available APT packages
This commit is contained in:
DL6ER 2021-01-07 11:56:52 +01:00 committed by GitHub
commit c5ed8f8bed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -85,6 +85,8 @@ QUERY_LOGGING=true
INSTALL_WEB_INTERFACE=true
PRIVACY_LEVEL=0
CACHE_SIZE=10000
# Placeholder variable for the list of available APT packages to be parsed subsequently
APT_PACKAGE_LIST=""
if [ -z "${USER}" ]; then
USER="$(id -un)"
@ -179,6 +181,19 @@ is_command() {
command -v "${check_command}" >/dev/null 2>&1
}
is_apt_package(){
# Checks whether a package, or one that provides it, is available in
# the installed APT repository lists.
local check_package=$1
# Obtain the list of available packages once
if [[ -z $APT_PACKAGE_LIST ]]; then
APT_PACKAGE_LIST=$(apt-cache dumpavail | grep -E '^P(ackage|rovides):')
fi
grep -qE " $check_package(,|$)" <<< "$APT_PACKAGE_LIST"
}
os_check() {
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
@ -303,10 +318,10 @@ if is_command apt-get ; then
# Update package cache. This is required already here to assure apt-cache calls have package lists available.
update_package_cache || exit 1
# Debian 7 doesn't have iproute2 so check if it's available first
if apt-cache show iproute2 > /dev/null 2>&1; then
if is_apt_package iproute2; then
iproute_pkg="iproute2"
# Otherwise, check if iproute is available
elif apt-cache show iproute > /dev/null 2>&1; then
elif is_apt_package iproute; then
iproute_pkg="iproute"
# Else print error and exit
else
@ -326,10 +341,10 @@ if is_command apt-get ; then
# Check if installed php is v 7.0, or newer to determine packages to install
if [[ "$phpInsNewer" != true ]]; then
# Prefer the php metapackage if it's there
if apt-cache show php > /dev/null 2>&1; then
if is_apt_package php; then
phpVer="php"
# Else fall back on the php5 package if it's there
elif apt-cache show php5 > /dev/null 2>&1; then
elif is_apt_package php5; then
phpVer="php5"
# Else print error and exit
else
@ -341,9 +356,9 @@ if is_command apt-get ; then
phpVer="php$phpInsMajor.$phpInsMinor"
fi
# We also need the correct version for `php-sqlite` (which differs across distros)
if apt-cache show "${phpVer}-sqlite3" > /dev/null 2>&1; then
if is_apt_package "${phpVer}-sqlite3"; then
phpSqlite="sqlite3"
elif apt-cache show "${phpVer}-sqlite" > /dev/null 2>&1; then
elif is_apt_package "${phpVer}-sqlite"; then
phpSqlite="sqlite"
else
printf " %b Aborting installation: No SQLite PHP module was found in APT repository.\\n" "${CROSS}"