diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 3b360f4b..3764314e 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -20,10 +20,10 @@ tmpLog=/tmp/pihole-install.log instalLogLoc=/etc/pihole/install.log -WEB_INTERFACE_GIT_URL="https://github.com/jacobsalmela/AdminLTE.git" -WEB_INTERFACE_DIR="/var/www/html/admin" -PIHOLE_GIT_URL="https://github.com/jacobsalmela/AdminLTE.git" -PIHOLE_FILES_DIR="/var/www/html/admin" +webInterfaceGitUrl="https://github.com/pi-hole/AdminLTE.git" +webInterfaceDir="/var/www/html/admin" +piholeGitUrl="https://github.com/pi-hole/pi-hole.git" +piholeFilesDir="/etc/.pihole" # Find the rows and columns @@ -68,20 +68,24 @@ fi ####### FUNCTIONS ########## ###All credit for the below function goes to http://fitnr.com/showing-a-bash-spinner.html spinner(){ - local pid=$1 - local delay=0.001 - local spinstr='/-\|' - while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do - local temp=${spinstr#?} - printf " [%c] " "$spinstr" - local spinstr=$temp${spinstr%"$temp"} - sleep $delay - printf "\b\b\b\b\b\b" - done - printf " \b\b\b\b" + local pid=$1 + local delay=0.001 + local spinstr='/-\|' + + spin='-\|/' + i=0 + while kill -0 $pid 2>/dev/null + do + i=$(( (i+1) %4 )) + printf "\b${spin:$i:1}" + sleep .1 + done + printf "\b" } + + backupLegacyPihole(){ if [[ -f /etc/dnsmasq.d/adList.conf ]];then echo "Original Pi-hole detected. Initiating sub space transport" @@ -258,106 +262,159 @@ setStaticIPv4(){ } installScripts(){ - $SUDO echo " " - $SUDO echo "::: Installing scripts..." - $SUDO curl -o /usr/local/bin/gravity.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/gravity.sh - $SUDO curl -o /usr/local/bin/chronometer.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/chronometer.sh - $SUDO curl -o /usr/local/bin/whitelist.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/whitelist.sh - $SUDO curl -o /usr/local/bin/blacklist.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/blacklist.sh - $SUDO curl -o /usr/local/bin/piholeLogFlush.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/piholeLogFlush.sh - $SUDO curl -o /usr/local/bin/updateDashboard.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/updateDashboard.sh + $SUDO echo ":::" + $SUDO echo -n "::: Installing scripts..." + $SUDO cp /etc/.pihole/gravity.sh /usr/local/bin/gravity.sh + $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /usr/local/bin/chronometer.sh + $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /usr/local/bin/whitelist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /usr/local/bin/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /usr/local/bin/piholeLogFlush.sh + $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /usr/local/bin/updateDashboard.sh $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh - $SUDO echo "::: ...done." + $SUDO echo " done." } installConfigs(){ - $SUDO echo " " - $SUDO echo "::: Installing configs..." + $SUDO echo ":::" + $SUDO echo -n "::: Installing configs..." $SUDO mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig - $SUDO curl -o /etc/dnsmasq.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/dnsmasq.conf - $SUDO curl -o /etc/lighttpd/lighttpd.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/lighttpd.conf + $SUDO cp /etc/.pihole/advanced/dnsmasq.conf /etc/dnsmasq.conf + $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf $SUDO sed -i "s/@INT@/$piholeInterface/" /etc/dnsmasq.conf - $SUDO echo "::: ...done." + $SUDO echo " done." } stopServices(){ - $SUDO echo " " - $SUDO echo "::: Stopping services..." - $SUDO service dnsmasq stop || true - $SUDO service lighttpd stop || true - $SUDO echo "::: ...done." + $SUDO echo ":::" + $SUDO echo -n "::: Stopping services..." + $SUDO service dnsmasq stop & spinner $! || true + $SUDO service lighttpd stop & spinner $! || true + $SUDO echo " done." } -installDependencies(){ - $SUDO echo " " - $SUDO echo "::: Updating apt-get package list" - $SUDO apt-get -qq update & spinner $! - $SUDO echo "::: Upgrading apt-get packages" - $SUDO apt-get -yqq upgrade & spinner $! - $SUDO echo "::: ...done." - $SUDO echo "::: installing dnsutils, bc, toilet, and figlet..." - $SUDO apt-get -yqq install dnsutils bc toilet figlet & spinner $! - $SUDO echo "::: ...done." - $SUDO echo "::: Installing dnsmasq..." - $SUDO apt-get -yqq install dnsmasq & spinner $! - $SUDO echo "::: ...done." - $SUDO echo "::: Installing lighttpd, php5-common, php5-cgi, and php5..." - $SUDO apt-get -yqq install lighttpd php5-common php5-cgi php5 & spinner $! - $SUDO echo "::: ...done." - $SUDO echo "::: Installing git..." - $SUDO apt-get -yqq install git & spinner $! - $SUDO echo "::: ...done." + +checkForDependencies(){ + echo ":::" + #update package lists + echo -n "::: Updating package list before install...." + #$SUDO apt-get -qq update & spinner $! + echo " done!" + echo -n "::: Upgrading installed apt-get packages...." + #$SUDO apt-get -y -qq upgrade & spinner $! + echo " done!" + + echo ":::" + echo "::: Checking dependencies:" + + dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) + for i in "${dependencies[@]}" + do + : + echo -n "::: Checking for $i..." + if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then + echo -n " Not found! Installing...." + apt-get -y -qq install $i > /dev/null & spinner $! + echo " done!" + else + echo " already installed!" + fi + done + } -installWebAdmin(){ - $SUDO echo " " - $SUDO echo "::: Downloading and installing latest WebAdmin files..." - if [ -d "/var/www/html/admin" ]; then - $SUDO rm -rf /var/www/html/admin - fi - if [ -d "/var/www/html/AdminLTE-master" ]; then - $SUDO rm -rf /var/www/html/AdminLTE-master - fi - $SUDO wget -nv https://github.com/jacobsalmela/AdminLTE/archive/master.zip -O /var/www/master.zip & spinner $! - $SUDO unzip -oq /var/www/master.zip -d /var/www/html/ - $SUDO mv /var/www/html/AdminLTE-master /var/www/html/admin - $SUDO rm /var/www/master.zip 2>/dev/null - $SUDO echo "::: ...Done." - - $SUDO echo "::: Creating log file and changing owner to dnsmasq..." +getGitFiles(){ + + echo ":::" + dirToCheck=$piholeFilesDir + echo -n "::: Checking for existing base files..." + if ! is_repo; then + echo -n " Not found! Getting files from github...." + repoToClone=$piholeGitUrl + make_repo + echo " done!" + else + echo -n " Existing files found. Grabbing latest...." + update_repo + echo " done!" + fi + + echo ":::" + dirToCheck=$webInterfaceDir + echo -n "::: Checking for existing web interface..." + if ! is_repo; then + echo -n " Not found! Getting files from github...." + repoToClone=$webInterfaceGitUrl + make_repo + echo " done!" + else + echo -n " Existing files found. Grabbing latest..." + update_repo + echo " done!" + fi + +} + +is_repo() { + # if the directory does not have a .git folder + # it is not a repo + if [ ! -d "$dirToCheck/.git" ]; then + return 1 + fi + return 0 +} + +make_repo() { + # remove the non-repod interface and clone the interface + + $SUDO rm -rf $dirToCheck + $SUDO git clone -q "$repoToClone" "$dirToCheck" > /dev/null & spinner $! +} + +update_repo() { + # pull the latest commits + cd "$dirToCheck" + $SUDO git pull -q > /dev/null & spinner $! +} + + +CreateLogFile(){ + echo ":::" + $SUDO echo -n "::: Creating log file and changing owner to dnsmasq..." if [ ! -f /var/log/pihole.log ]; then $SUDO touch /var/log/pihole.log $SUDO chmod 644 /var/log/pihole.log $SUDO chown dnsmasq:root /var/log/pihole.log + $SUDO echo " done!" else - $SUDO echo "::: No need to create, already exists!" + $SUDO echo " already exists!" fi - $SUDO echo "::: ...done." + } installPiholeWeb(){ - $SUDO echo " " - $SUDO echo "::: Downloading and installing pihole custom index page..." + $SUDO echo ":::" + $SUDO echo -n "::: Installing pihole custom index page..." if [ -d "/var/www/html/pihole" ]; then - $SUDO echo "::: Existing page detected, not overwriting" + $SUDO echo " Existing page detected, not overwriting" else $SUDO mkdir /var/www/html/pihole $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig - $SUDO curl -o /var/www/html/pihole/index.html https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/index.html + $SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html + $SUDO echo " done!" fi - $SUDO echo "::: ...done." + } installCron(){ - $SUDO echo " " - $SUDO echo "::: Downloading latest Cron script..." - $SUDO curl -o /etc/cron.d/pihole https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/pihole.cron - $SUDO echo "::: ...done." + $SUDO echo ":::" + $SUDO echo -n "::: Installing latest Cron script..." + $SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole + $SUDO echo " done!" } runGravity(){ - $SUDO echo " " + $SUDO echo ":::" $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." if ls /etc/pihole/list* 1> /dev/null 2>&1; then echo "::: Cleaning up previous install (preserving whitelist/blacklist)" @@ -368,28 +425,21 @@ runGravity(){ $SUDO echo "::: ...done." } -checkForAndInstallDependencies(){ - if [ upgrade ]; then - #Likely an existing install, no need to apt-get update - echo "::: Previous installation detected" - else - echo "::: First time install, updating package list" - $SUDO apt-get -qq update & spinner $! - echo "::: Upgrading installed apt-get packages" - $SUDO apt-get -yqq upgrade & spinner $! - fi -} installPihole(){ - installDependencies + checkForDependencies # done stopServices + $SUDO chown www-data:www-data /var/www/html $SUDO chmod 775 /var/www/html $SUDO usermod -a -G www-data pi - $SUDO lighty-enable-mod fastcgi fastcgi-php + $SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null + + getGitFiles installScripts installConfigs - installWebAdmin + #installWebAdmin + CreateLogFile installPiholeWeb installCron runGravity @@ -417,7 +467,7 @@ chooseInterface # Let the user decide if they want to block ads over IPv4 and/or IPv6 use4andor6 -checkForAndInstallDependencies + # Install and log everything to a file installPihole | tee $tmpLog