mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-11-15 02:42:58 +00:00
Merge branch 'development' into fix/gravity_no_locallist
This commit is contained in:
commit
4ac4bc5c18
9 changed files with 90 additions and 20 deletions
|
@ -50,6 +50,8 @@ sudo bash basic-install.sh
|
||||||
wget -O basic-install.sh https://install.pi-hole.net
|
wget -O basic-install.sh https://install.pi-hole.net
|
||||||
sudo bash basic-install.sh
|
sudo bash basic-install.sh
|
||||||
```
|
```
|
||||||
|
### Method 3: Using Docker to deploy Pi-hole
|
||||||
|
Please refer to the [Pi-hole docker repo](https://github.com/pi-hole/docker-pi-hole) to use the Official Docker Images.
|
||||||
|
|
||||||
## [Post-install: Make your network take advantage of Pi-hole](https://docs.pi-hole.net/main/post-install/)
|
## [Post-install: Make your network take advantage of Pi-hole](https://docs.pi-hole.net/main/post-install/)
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ versionOutput() {
|
||||||
if [[ -n "$current" ]] && [[ -n "$latest" ]]; then
|
if [[ -n "$current" ]] && [[ -n "$latest" ]]; then
|
||||||
output="${1^} version is $branch$current (Latest: $latest)"
|
output="${1^} version is $branch$current (Latest: $latest)"
|
||||||
elif [[ -n "$current" ]] && [[ -z "$latest" ]]; then
|
elif [[ -n "$current" ]] && [[ -z "$latest" ]]; then
|
||||||
output="Current ${1^} version is $branch$current."
|
output="Current ${1^} version is $branch$current"
|
||||||
elif [[ -z "$current" ]] && [[ -n "$latest" ]]; then
|
elif [[ -z "$current" ]] && [[ -n "$latest" ]]; then
|
||||||
output="Latest ${1^} version is $latest"
|
output="Latest ${1^} version is $latest"
|
||||||
elif [[ "$curHash" == "N/A" ]] || [[ "$latHash" == "N/A" ]]; then
|
elif [[ "$curHash" == "N/A" ]] || [[ "$latHash" == "N/A" ]]; then
|
||||||
|
|
|
@ -426,7 +426,7 @@ dhcp-leasefile=/etc/pihole/dhcp.leases
|
||||||
echo "#quiet-dhcp6
|
echo "#quiet-dhcp6
|
||||||
#enable-ra
|
#enable-ra
|
||||||
dhcp-option=option6:dns-server,[::]
|
dhcp-option=option6:dns-server,[::]
|
||||||
dhcp-range=::100,::1ff,constructor:${interface},ra-names,slaac,${leasetime}
|
dhcp-range=::100,::1ff,constructor:${interface},ra-names,slaac,64,3600
|
||||||
ra-param=*,0,0
|
ra-param=*,0,0
|
||||||
" >> "${dhcpconfig}"
|
" >> "${dhcpconfig}"
|
||||||
fi
|
fi
|
||||||
|
@ -716,7 +716,7 @@ RemoveCustomDNSAddress() {
|
||||||
host="${args[3]}"
|
host="${args[3]}"
|
||||||
|
|
||||||
if valid_ip "${ip}" || valid_ip6 "${ip}" ; then
|
if valid_ip "${ip}" || valid_ip6 "${ip}" ; then
|
||||||
sed -i "/${ip} ${host}/d" "${dnscustomfile}"
|
sed -i "/^${ip} ${host}$/d" "${dnscustomfile}"
|
||||||
else
|
else
|
||||||
echo -e " ${CROSS} Invalid IP has been passed"
|
echo -e " ${CROSS} Invalid IP has been passed"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -748,7 +748,7 @@ RemoveCustomCNAMERecord() {
|
||||||
if [[ -n "${validDomain}" ]]; then
|
if [[ -n "${validDomain}" ]]; then
|
||||||
validTarget="$(checkDomain "${target}")"
|
validTarget="$(checkDomain "${target}")"
|
||||||
if [[ -n "${validDomain}" ]]; then
|
if [[ -n "${validDomain}" ]]; then
|
||||||
sed -i "/cname=${validDomain},${validTarget}/d" "${dnscustomcnamefile}"
|
sed -i "/cname=${validDomain},${validTarget}$/d" "${dnscustomcnamefile}"
|
||||||
else
|
else
|
||||||
echo " ${CROSS} Invalid Target Passed!"
|
echo " ${CROSS} Invalid Target Passed!"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
@ -357,10 +357,14 @@ if is_command apt-get ; then
|
||||||
# Packages required to run this install script (stored as an array)
|
# Packages required to run this install script (stored as an array)
|
||||||
INSTALLER_DEPS=(dhcpcd5 git "${iproute_pkg}" whiptail dnsutils)
|
INSTALLER_DEPS=(dhcpcd5 git "${iproute_pkg}" whiptail dnsutils)
|
||||||
# Packages required to run Pi-hole (stored as an array)
|
# Packages required to run Pi-hole (stored as an array)
|
||||||
PIHOLE_DEPS=(cron curl iputils-ping lsof netcat psmisc sudo unzip wget idn2 sqlite3 libcap2-bin dns-root-data libcap2)
|
PIHOLE_DEPS=(cron curl iputils-ping lsof netcat psmisc sudo unzip idn2 sqlite3 libcap2-bin dns-root-data libcap2)
|
||||||
# Packages required for the Web admin interface (stored as an array)
|
# Packages required for the Web admin interface (stored as an array)
|
||||||
# It's useful to separate this from Pi-hole, since the two repos are also setup separately
|
# It's useful to separate this from Pi-hole, since the two repos are also setup separately
|
||||||
PIHOLE_WEB_DEPS=(lighttpd "${phpVer}-common" "${phpVer}-cgi" "${phpVer}-${phpSqlite}" "${phpVer}-xml" "${phpVer}-json" "${phpVer}-intl")
|
PIHOLE_WEB_DEPS=(lighttpd "${phpVer}-common" "${phpVer}-cgi" "${phpVer}-${phpSqlite}" "${phpVer}-xml" "${phpVer}-intl")
|
||||||
|
# Prior to PHP8.0, JSON functionality is provided as dedicated module, required by Pi-hole AdminLTE: https://www.php.net/manual/json.installation.php
|
||||||
|
if [[ "${phpInsNewer}" != true || "${phpInsMajor}" -lt 8 ]]; then
|
||||||
|
PIHOLE_WEB_DEPS+=("${phpVer}-json")
|
||||||
|
fi
|
||||||
# The Web server user,
|
# The Web server user,
|
||||||
LIGHTTPD_USER="www-data"
|
LIGHTTPD_USER="www-data"
|
||||||
# group,
|
# group,
|
||||||
|
@ -1940,9 +1944,17 @@ finalExports() {
|
||||||
# Install the logrotate script
|
# Install the logrotate script
|
||||||
installLogrotate() {
|
installLogrotate() {
|
||||||
local str="Installing latest logrotate script"
|
local str="Installing latest logrotate script"
|
||||||
|
local target=/etc/pihole/logrotate
|
||||||
|
|
||||||
printf "\\n %b %s..." "${INFO}" "${str}"
|
printf "\\n %b %s..." "${INFO}" "${str}"
|
||||||
|
if [[ -f ${target} ]]; then
|
||||||
|
printf "\\n\\t%b Existing logrotate file found. No changes made.\\n" "${INFO}"
|
||||||
|
# Return value isn't that important, using 2 to indicate that it's not a fatal error but
|
||||||
|
# the function did not complete.
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
# Copy the file over from the local repo
|
# Copy the file over from the local repo
|
||||||
install -D -m 644 -T ${PI_HOLE_LOCAL_REPO}/advanced/Templates/logrotate /etc/pihole/logrotate
|
install -D -m 644 -T "${PI_HOLE_LOCAL_REPO}"/advanced/Templates/logrotate ${target}
|
||||||
# Different operating systems have different user / group
|
# Different operating systems have different user / group
|
||||||
# settings for logrotate that makes it impossible to create
|
# settings for logrotate that makes it impossible to create
|
||||||
# a static logrotate file that will work with e.g.
|
# a static logrotate file that will work with e.g.
|
||||||
|
@ -1951,9 +1963,9 @@ installLogrotate() {
|
||||||
# the local properties of the /var/log directory
|
# the local properties of the /var/log directory
|
||||||
logusergroup="$(stat -c '%U %G' /var/log)"
|
logusergroup="$(stat -c '%U %G' /var/log)"
|
||||||
# If there is a usergroup for log rotation,
|
# If there is a usergroup for log rotation,
|
||||||
if [[ ! -z "${logusergroup}" ]]; then
|
if [[ -n "${logusergroup}" ]]; then
|
||||||
# replace the line in the logrotate script with that usergroup.
|
# replace the line in the logrotate script with that usergroup.
|
||||||
sed -i "s/# su #/su ${logusergroup}/g;" /etc/pihole/logrotate
|
sed -i "s/# su #/su ${logusergroup}/g;" ${target}
|
||||||
fi
|
fi
|
||||||
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,11 +206,7 @@ removeNoPurge() {
|
||||||
}
|
}
|
||||||
|
|
||||||
######### SCRIPT ###########
|
######### SCRIPT ###########
|
||||||
if command -v vcgencmd &> /dev/null; then
|
echo -e " ${INFO} Be sure to confirm if any dependencies should not be removed"
|
||||||
echo -e " ${INFO} All dependencies are safe to remove on Raspbian"
|
|
||||||
else
|
|
||||||
echo -e " ${INFO} Be sure to confirm if any dependencies should not be removed"
|
|
||||||
fi
|
|
||||||
while true; do
|
while true; do
|
||||||
echo -e " ${INFO} ${COL_YELLOW}The following dependencies may have been added by the Pi-hole install:"
|
echo -e " ${INFO} ${COL_YELLOW}The following dependencies may have been added by the Pi-hole install:"
|
||||||
echo -n " "
|
echo -n " "
|
||||||
|
|
20
gravity.sh
20
gravity.sh
|
@ -63,6 +63,8 @@ fi
|
||||||
# have changed
|
# have changed
|
||||||
gravityDBfile="${GRAVITYDB}"
|
gravityDBfile="${GRAVITYDB}"
|
||||||
gravityTEMPfile="${GRAVITYDB}_temp"
|
gravityTEMPfile="${GRAVITYDB}_temp"
|
||||||
|
gravityDIR="$(dirname -- "${gravityDBfile}")"
|
||||||
|
gravityOLDfile="${gravityDIR}/gravity_old.db"
|
||||||
|
|
||||||
if [[ -z "${BLOCKINGMODE}" ]] ; then
|
if [[ -z "${BLOCKINGMODE}" ]] ; then
|
||||||
BLOCKINGMODE="NULL"
|
BLOCKINGMODE="NULL"
|
||||||
|
@ -113,8 +115,19 @@ gravity_swap_databases() {
|
||||||
fi
|
fi
|
||||||
echo -e "${OVER} ${TICK} ${str}"
|
echo -e "${OVER} ${TICK} ${str}"
|
||||||
|
|
||||||
# Swap databases and remove old database
|
# Swap databases and remove or conditionally rename old database
|
||||||
|
# Number of available blocks on disk
|
||||||
|
availableBlocks=$(stat -f --format "%a" "${gravityDIR}")
|
||||||
|
# Number of blocks, used by gravity.db
|
||||||
|
gravityBlocks=$(stat --format "%b" ${gravityDBfile})
|
||||||
|
# Only keep the old database if available disk space is at least twice the size of the existing gravity.db.
|
||||||
|
# Better be safe than sorry...
|
||||||
|
if [ "${availableBlocks}" -gt "$(("${gravityBlocks}" * 2))" ] && [ -f "${gravityDBfile}" ]; then
|
||||||
|
echo -e " ${TICK} The old database remains available."
|
||||||
|
mv "${gravityDBfile}" "${gravityOLDfile}"
|
||||||
|
else
|
||||||
rm "${gravityDBfile}"
|
rm "${gravityDBfile}"
|
||||||
|
fi
|
||||||
mv "${gravityTEMPfile}" "${gravityDBfile}"
|
mv "${gravityTEMPfile}" "${gravityDBfile}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -852,6 +865,11 @@ for var in "$@"; do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Remove OLD (backup) gravity file, if it exists
|
||||||
|
if [[ -f "${gravityOLDfile}" ]]; then
|
||||||
|
rm "${gravityOLDfile}"
|
||||||
|
fi
|
||||||
|
|
||||||
# Trap Ctrl-C
|
# Trap Ctrl-C
|
||||||
gravity_Trap
|
gravity_Trap
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ Available commands and options:
|
||||||
|
|
||||||
\fB-w, whitelist\fR [options] [<domain1> <domain2 ...>]
|
\fB-w, whitelist\fR [options] [<domain1> <domain2 ...>]
|
||||||
.br
|
.br
|
||||||
Adds or removes specified domain or domains tho the Whitelist
|
Adds or removes specified domain or domains to the Whitelist
|
||||||
.br
|
.br
|
||||||
|
|
||||||
\fB-b, blacklist\fR [options] [<domain1> <domain2 ...>]
|
\fB-b, blacklist\fR [options] [<domain1> <domain2 ...>]
|
||||||
|
|
9
pihole
9
pihole
|
@ -367,7 +367,7 @@ tailFunc() {
|
||||||
# Color blocklist/blacklist/wildcard entries as red
|
# Color blocklist/blacklist/wildcard entries as red
|
||||||
# Color A/AAAA/DHCP strings as white
|
# Color A/AAAA/DHCP strings as white
|
||||||
# Color everything else as gray
|
# Color everything else as gray
|
||||||
tail -f /var/log/pihole.log | sed -E \
|
tail -f /var/log/pihole.log | grep --line-buffered "${1}" | sed -E \
|
||||||
-e "s,($(date +'%b %d ')| dnsmasq\[[0-9]*\]),,g" \
|
-e "s,($(date +'%b %d ')| dnsmasq\[[0-9]*\]),,g" \
|
||||||
-e "s,(.*(blacklisted |gravity blocked ).* is (0.0.0.0|::|NXDOMAIN).*),${COL_RED}&${COL_NC}," \
|
-e "s,(.*(blacklisted |gravity blocked ).* is (0.0.0.0|::|NXDOMAIN).*),${COL_RED}&${COL_NC}," \
|
||||||
-e "s,.*(query\\[A|DHCP).*,${COL_NC}&${COL_NC}," \
|
-e "s,.*(query\\[A|DHCP).*,${COL_NC}&${COL_NC}," \
|
||||||
|
@ -453,7 +453,10 @@ Debugging Options:
|
||||||
Add '-a' to automatically upload the log to tricorder.pi-hole.net
|
Add '-a' to automatically upload the log to tricorder.pi-hole.net
|
||||||
-f, flush Flush the Pi-hole log
|
-f, flush Flush the Pi-hole log
|
||||||
-r, reconfigure Reconfigure or Repair Pi-hole subsystems
|
-r, reconfigure Reconfigure or Repair Pi-hole subsystems
|
||||||
-t, tail View the live output of the Pi-hole log
|
-t, tail [arg] View the live output of the Pi-hole log.
|
||||||
|
Add an optional argument to filter the log
|
||||||
|
(regular expressions are supported)
|
||||||
|
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-a, admin Web interface options
|
-a, admin Web interface options
|
||||||
|
@ -527,7 +530,7 @@ case "${1}" in
|
||||||
"status" ) statusFunc "$2";;
|
"status" ) statusFunc "$2";;
|
||||||
"restartdns" ) restartDNS "$2";;
|
"restartdns" ) restartDNS "$2";;
|
||||||
"-a" | "admin" ) webpageFunc "$@";;
|
"-a" | "admin" ) webpageFunc "$@";;
|
||||||
"-t" | "tail" ) tailFunc;;
|
"-t" | "tail" ) tailFunc "$2";;
|
||||||
"checkout" ) piholeCheckoutFunc "$@";;
|
"checkout" ) piholeCheckoutFunc "$@";;
|
||||||
"tricorder" ) tricorderFunc;;
|
"tricorder" ) tricorderFunc;;
|
||||||
"updatechecker" ) updateCheckFunc "$@";;
|
"updatechecker" ) updateCheckFunc "$@";;
|
||||||
|
|
|
@ -595,3 +595,42 @@ def test_os_check_passes(Pihole):
|
||||||
''')
|
''')
|
||||||
expected_stdout = 'Supported OS detected'
|
expected_stdout = 'Supported OS detected'
|
||||||
assert expected_stdout in detectOS.stdout
|
assert expected_stdout in detectOS.stdout
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_manager_has_installer_deps(Pihole):
|
||||||
|
''' Confirms OS is able to install the required packages for the installer'''
|
||||||
|
mock_command('whiptail', {'*': ('', '0')}, Pihole)
|
||||||
|
output = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
distro_check
|
||||||
|
install_dependent_packages ${INSTALLER_DEPS[@]}
|
||||||
|
''')
|
||||||
|
|
||||||
|
assert 'No package' not in output.stdout # centos7 still exits 0...
|
||||||
|
assert output.rc == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_manager_has_pihole_deps(Pihole):
|
||||||
|
''' Confirms OS is able to install the required packages for Pi-hole '''
|
||||||
|
mock_command('whiptail', {'*': ('', '0')}, Pihole)
|
||||||
|
output = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
distro_check
|
||||||
|
install_dependent_packages ${PIHOLE_DEPS[@]}
|
||||||
|
''')
|
||||||
|
|
||||||
|
assert 'No package' not in output.stdout # centos7 still exits 0...
|
||||||
|
assert output.rc == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_package_manager_has_web_deps(Pihole):
|
||||||
|
''' Confirms OS is able to install the required packages for web '''
|
||||||
|
mock_command('whiptail', {'*': ('', '0')}, Pihole)
|
||||||
|
output = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
distro_check
|
||||||
|
install_dependent_packages ${PIHOLE_WEB_DEPS[@]}
|
||||||
|
''')
|
||||||
|
|
||||||
|
assert 'No package' not in output.stdout # centos7 still exits 0...
|
||||||
|
assert output.rc == 0
|
||||||
|
|
Loading…
Reference in a new issue