2015-12-06 14:31:49 +00:00
#!/usr/bin/env bash
2016-01-30 20:12:40 +00:00
# Pi-hole: A black hole for Internet advertisements
2017-02-22 17:55:20 +00:00
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
2016-01-30 20:12:40 +00:00
# Completely uninstalls Pi-hole
2015-12-06 14:31:49 +00:00
#
2017-02-22 17:55:20 +00:00
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
2017-06-21 11:49:05 +00:00
source "/opt/pihole/COL_TABLE"
2017-02-22 17:55:20 +00:00
2017-06-21 11:49:05 +00:00
while true; do
2022-04-12 18:36:49 +00:00
read -rp " ${ QST } Are you sure you would like to remove ${ COL_WHITE } Pi-hole ${ COL_NC } ? [y/N] " answer
case ${ answer } in
2018-05-31 03:14:18 +00:00
[ Yy] * ) break; ;
2020-03-08 23:53:14 +00:00
* ) echo -e " ${ OVER } ${ COL_LIGHT_GREEN } Uninstall has been canceled ${ COL_NC } " ; exit 0; ;
2018-05-31 03:14:18 +00:00
esac
2017-06-21 11:49:05 +00:00
done
2015-12-06 14:31:49 +00:00
2016-01-16 19:56:08 +00:00
# Must be root to uninstall
2017-06-21 11:49:05 +00:00
str = "Root user check"
2016-10-22 06:23:31 +00:00
if [ [ ${ EUID } -eq 0 ] ] ; then
2018-05-31 03:14:18 +00:00
echo -e " ${ TICK } ${ str } "
2016-01-16 19:56:08 +00:00
else
2018-05-31 03:14:18 +00:00
# Check if sudo is actually installed
# If it isn't, exit because the uninstall can not complete
if [ -x " $( command -v sudo) " ] ; then
export SUDO = "sudo"
else
echo -e " ${ CROSS } ${ str }
Script called with non-root privileges
2021-01-19 18:33:38 +00:00
The Pi-hole requires elevated privileges to uninstall"
2018-05-31 03:14:18 +00:00
exit 1
fi
2016-01-16 19:56:08 +00:00
fi
2017-08-17 18:53:43 +00:00
readonly PI_HOLE_FILES_DIR = "/etc/.pihole"
2022-07-06 20:58:14 +00:00
SKIP_INSTALL = "true"
2017-08-17 18:53:43 +00:00
source " ${ PI_HOLE_FILES_DIR } /automated install/basic-install.sh "
# setupVars set in basic-install.sh
source " ${ setupVars } "
2021-08-03 20:48:26 +00:00
# package_manager_detect() sourced from basic-install.sh
package_manager_detect
2017-08-17 18:53:43 +00:00
2022-07-29 20:47:40 +00:00
# Uninstall packages used by the Pi-hole
2024-09-11 16:10:09 +00:00
DEPS = ( " ${ INSTALLER_COMMON_DEPS [@] } " " ${ PIHOLE_COMMON_DEPS [@] } " " ${ OS_CHECK_COMMON_DEPS [@] } " " ${ INSTALLER_DEPS [@] } " " ${ PIHOLE_DEPS [@] } " " ${ OS_CHECK_DEPS [@] } " )
2017-08-17 18:53:43 +00:00
2020-03-08 23:53:14 +00:00
# Compatibility
2018-05-31 03:37:52 +00:00
if [ -x " $( command -v apt-get) " ] ; then
2018-05-31 03:14:18 +00:00
# Debian Family
2019-06-17 23:28:55 +00:00
PKG_REMOVE = ( " ${ PKG_MANAGER } " -y remove --purge)
2018-05-31 03:14:18 +00:00
package_check( ) {
dpkg-query -W -f= '${Status}' " $1 " 2>/dev/null | grep -c "ok installed"
}
2018-05-31 03:37:52 +00:00
elif [ -x " $( command -v rpm) " ] ; then
# Fedora Family
2019-06-17 23:28:55 +00:00
PKG_REMOVE = ( " ${ PKG_MANAGER } " remove -y)
2018-05-31 03:37:52 +00:00
package_check( ) {
rpm -qa | grep " ^ $1 - " > /dev/null
2018-05-31 03:14:18 +00:00
}
2016-06-11 00:01:13 +00:00
else
2018-05-31 03:14:18 +00:00
echo -e " ${ CROSS } OS distribution not supported "
exit 1
2016-06-11 00:01:13 +00:00
fi
2016-10-20 02:47:45 +00:00
removeAndPurge( ) {
2018-05-31 03:14:18 +00:00
# Purge dependencies
echo ""
for i in " ${ DEPS [@] } " ; do
2018-05-31 03:43:49 +00:00
if package_check " ${ i } " > /dev/null; then
2018-05-31 03:14:18 +00:00
while true; do
2022-04-12 18:36:49 +00:00
read -rp " ${ QST } Do you wish to remove ${ COL_WHITE } ${ i } ${ COL_NC } from your system? [Y/N] " answer
case ${ answer } in
2018-05-31 03:14:18 +00:00
[ Yy] * )
echo -ne " ${ INFO } Removing ${ i } ... " ;
2019-06-17 23:30:26 +00:00
${ SUDO } " ${ PKG_REMOVE [@] } " " ${ i } " & > /dev/null;
2018-05-31 03:14:18 +00:00
echo -e " ${ OVER } ${ INFO } Removed ${ i } " ;
break; ;
[ Nn] * ) echo -e " ${ INFO } Skipped ${ i } " ; break; ;
esac
done
else
echo -e " ${ INFO } Package ${ i } not installed "
2018-06-01 01:57:59 +00:00
fi
2018-05-31 03:14:18 +00:00
done
# Remove dnsmasq config files
2018-05-31 03:37:52 +00:00
${ SUDO } rm -f /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/*-pihole*.conf & > /dev/null
2018-05-31 03:14:18 +00:00
echo -e " ${ TICK } Removing dnsmasq config files "
# Call removeNoPurge to remove Pi-hole specific files
removeNoPurge
2016-03-26 20:18:53 +00:00
}
2016-01-16 19:56:08 +00:00
2016-10-20 02:47:45 +00:00
removeNoPurge( ) {
2018-05-31 03:14:18 +00:00
# Only web directories/files that are created by Pi-hole should be removed
echo -ne " ${ INFO } Removing Web Interface... "
${ SUDO } rm -rf /var/www/html/admin & > /dev/null
${ SUDO } rm -rf /var/www/html/pihole & > /dev/null
${ SUDO } rm -f /var/www/html/index.lighttpd.orig & > /dev/null
2018-07-27 16:35:39 +00:00
# If the web directory is empty after removing these files, then the parent html directory can be removed.
2018-05-31 03:14:18 +00:00
if [ -d "/var/www/html" ] ; then
if [ [ ! " $( ls -A /var/www/html) " ] ] ; then
${ SUDO } rm -rf /var/www/html & > /dev/null
fi
2018-05-29 07:59:39 +00:00
fi
2018-05-31 03:14:18 +00:00
echo -e " ${ OVER } ${ TICK } Removed Web Interface "
2021-08-03 20:48:26 +00:00
2018-05-31 03:14:18 +00:00
# Attempt to preserve backwards compatibility with older versions
# to guarantee no additional changes were made to /etc/crontab after
# the installation of pihole, /etc/crontab.pihole should be permanently
# preserved.
if [ [ -f /etc/crontab.orig ] ] ; then
${ SUDO } mv /etc/crontab /etc/crontab.pihole
${ SUDO } mv /etc/crontab.orig /etc/crontab
${ SUDO } service cron restart
echo -e " ${ TICK } Restored the default system cron "
fi
# Attempt to preserve backwards compatibility with older versions
if [ [ -f /etc/cron.d/pihole ] ] ; then
${ SUDO } rm -f /etc/cron.d/pihole & > /dev/null
echo -e " ${ TICK } Removed /etc/cron.d/pihole "
2018-05-29 07:59:39 +00:00
fi
2018-05-31 03:14:18 +00:00
2019-03-15 13:47:41 +00:00
if package_check lighttpd > /dev/null; then
2022-12-19 07:52:29 +00:00
# Attempt to preserve backwards compatibility with older versions
2019-06-17 23:13:31 +00:00
if [ [ -f /etc/lighttpd/lighttpd.conf.orig ] ] ; then
2018-05-31 03:14:18 +00:00
${ SUDO } mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf
fi
2019-06-17 23:13:31 +00:00
if [ [ -f /etc/lighttpd/external.conf ] ] ; then
${ SUDO } rm /etc/lighttpd/external.conf
fi
2022-12-15 02:18:04 +00:00
# Fedora-based
if [ [ -f /etc/lighttpd/conf.d/pihole-admin.conf ] ] ; then
${ SUDO } rm /etc/lighttpd/conf.d/pihole-admin.conf
2022-12-19 07:52:29 +00:00
conf = /etc/lighttpd/lighttpd.conf
tconf = /tmp/lighttpd.conf.$$
if awk '!/^include "\/etc\/lighttpd\/conf\.d\/pihole-admin\.conf"$/{print}' \
$conf > $tconf && mv $tconf $conf ; then
:
else
rm $tconf
fi
${ SUDO } chown root:root $conf
${ SUDO } chmod 644 $conf
2022-12-15 02:18:04 +00:00
fi
# Debian-based
if [ [ -f /etc/lighttpd/conf-available/pihole-admin.conf ] ] ; then
if is_command lighty-disable-mod ; then
${ SUDO } lighty-disable-mod pihole-admin > /dev/null || true
fi
${ SUDO } rm /etc/lighttpd/conf-available/15-pihole-admin.conf
fi
2019-06-17 23:13:31 +00:00
echo -e " ${ TICK } Removed lighttpd configs "
2017-06-21 11:49:05 +00:00
fi
2017-08-17 18:53:43 +00:00
2018-05-31 03:14:18 +00:00
${ SUDO } rm -f /etc/dnsmasq.d/adList.conf & > /dev/null
${ SUDO } rm -f /etc/dnsmasq.d/01-pihole.conf & > /dev/null
2021-08-15 09:17:09 +00:00
${ SUDO } rm -f /etc/dnsmasq.d/06-rfc6761.conf & > /dev/null
2018-05-31 03:14:18 +00:00
${ SUDO } rm -rf /var/log/*pihole* & > /dev/null
2022-05-15 18:22:06 +00:00
${ SUDO } rm -rf /var/log/pihole/*pihole* & > /dev/null
2018-05-31 03:14:18 +00:00
${ SUDO } rm -rf /etc/pihole/ & > /dev/null
${ SUDO } rm -rf /etc/.pihole/ & > /dev/null
${ SUDO } rm -rf /opt/pihole/ & > /dev/null
${ SUDO } rm -f /usr/local/bin/pihole & > /dev/null
${ SUDO } rm -f /etc/bash_completion.d/pihole & > /dev/null
${ SUDO } rm -f /etc/sudoers.d/pihole & > /dev/null
echo -e " ${ TICK } Removed config files "
2018-06-01 04:03:13 +00:00
# Restore Resolved
if [ [ -e /etc/systemd/resolved.conf.orig ] ] ; then
2019-04-30 20:41:12 +00:00
${ SUDO } cp -p /etc/systemd/resolved.conf.orig /etc/systemd/resolved.conf
2018-06-01 04:03:13 +00:00
systemctl reload-or-restart systemd-resolved
fi
2018-05-31 03:14:18 +00:00
# Remove FTL
if command -v pihole-FTL & > /dev/null; then
echo -ne " ${ INFO } Removing pihole-FTL... "
if [ [ -x " $( command -v systemctl) " ] ] ; then
systemctl stop pihole-FTL
else
service pihole-FTL stop
fi
2023-02-21 20:49:03 +00:00
${ SUDO } rm -f /etc/systemd/system/pihole-FTL.service
if [ [ -d '/etc/systemd/system/pihole-FTL.service.d' ] ] ; then
read -rp " ${ QST } FTL service override directory /etc/systemd/system/pihole-FTL.service.d detected. Do you wish to remove this from your system? [y/N] " answer
case $answer in
[ yY] *)
echo -ne " ${ INFO } Removing /etc/systemd/system/pihole-FTL.service.d... "
${ SUDO } rm -R /etc/systemd/system/pihole-FTL.service.d
echo -e " ${ OVER } ${ INFO } Removed /etc/systemd/system/pihole-FTL.service.d "
; ;
*) echo -e " ${ INFO } Leaving /etc/systemd/system/pihole-FTL.service.d in place. " ; ;
esac
fi
2018-05-31 03:14:18 +00:00
${ SUDO } rm -f /etc/init.d/pihole-FTL
${ SUDO } rm -f /usr/bin/pihole-FTL
echo -e " ${ OVER } ${ TICK } Removed pihole-FTL "
fi
2017-08-17 18:53:43 +00:00
2018-06-01 23:50:52 +00:00
# If the pihole manpage exists, then delete and rebuild man-db
if [ [ -f /usr/local/share/man/man8/pihole.8 ] ] ; then
2018-06-03 12:15:26 +00:00
${ SUDO } rm -f /usr/local/share/man/man8/pihole.8 /usr/local/share/man/man8/pihole-FTL.8 /usr/local/share/man/man5/pihole-FTL.conf.5
2018-06-01 23:50:52 +00:00
${ SUDO } mandb -q & >/dev/null
echo -e " ${ TICK } Removed pihole man page "
fi
2018-05-31 03:14:18 +00:00
# If the pihole user exists, then remove
if id "pihole" & > /dev/null; then
2018-05-31 03:24:09 +00:00
if ${ SUDO } userdel -r pihole 2> /dev/null; then
2018-05-31 03:14:18 +00:00
echo -e " ${ TICK } Removed 'pihole' user "
else
echo -e " ${ CROSS } Unable to remove 'pihole' user "
fi
2017-06-21 11:49:05 +00:00
fi
2020-04-03 18:07:44 +00:00
# If the pihole group exists, then remove
if getent group "pihole" & > /dev/null; then
if ${ SUDO } groupdel pihole 2> /dev/null; then
echo -e " ${ TICK } Removed 'pihole' group "
else
echo -e " ${ CROSS } Unable to remove 'pihole' group "
fi
fi
2016-04-21 01:43:01 +00:00
2018-05-31 03:24:09 +00:00
echo -e " \\n We're sorry to see you go, but thanks for checking out Pi-hole!
2020-05-13 10:49:00 +00:00
If you need help, reach out to us on GitHub, Discourse, Reddit or Twitter
2018-05-31 03:14:18 +00:00
Reinstall at any time: ${ COL_WHITE } curl -sSL https://install.pi-hole.net | bash${ COL_NC }
2017-06-21 11:49:05 +00:00
2018-05-31 03:14:18 +00:00
${ COL_LIGHT_RED } Please reset the DNS on your router/clients to restore internet connectivity
${ COL_LIGHT_GREEN } Uninstallation Complete! ${ COL_NC } "
2016-03-26 20:18:53 +00:00
}
2016-01-16 19:56:08 +00:00
2016-03-26 20:18:53 +00:00
######### SCRIPT ###########
Remove false statement about dependency removal on Raspbian
The statement "All dependencies are safe to remove on Raspbian" has been added at a time where a much smaller list of dependencies were installed, all indeed relatively safe to purge. Nowadays this list has grown and includes important system packages, like iproute2, psmisc, sudo, curl and others, which are often again dependencies of other packages, like network stacks (ifupdown) and others, so that inexperienced users, following that statement, may break their systems network capabilities and more.
This message has hence been removed.
Signed-off-by: MichaIng <micha@dietpi.com>
2021-05-02 11:27:35 +00:00
echo -e " ${ INFO } Be sure to confirm if any dependencies should not be removed "
2016-03-26 20:18:53 +00:00
while true; do
2018-05-31 03:14:18 +00:00
echo -e " ${ INFO } ${ COL_YELLOW } The following dependencies may have been added by the Pi-hole install: "
echo -n " "
for i in " ${ DEPS [@] } " ; do
echo -n " ${ i } "
done
echo " ${ COL_NC } "
2022-04-12 18:36:49 +00:00
read -rp " ${ QST } Do you wish to go through each dependency for removal? (Choosing No will leave all dependencies installed) [Y/n] " answer
case ${ answer } in
2018-05-31 03:14:18 +00:00
[ Yy] * ) removeAndPurge; break; ;
[ Nn] * ) removeNoPurge; break; ;
* ) removeAndPurge; break; ;
esac
2016-03-26 20:18:53 +00:00
done