2016-10-18 11:05:48 +00:00
#!/usr/bin/env bash
# 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-11-01 18:33:04 +00:00
# Check Pi-hole core and admin pages versions and determine what
# upgrade (if any) is required. Automatically updates and reinstalls
# application if update is detected.
2016-10-18 11:05:48 +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.
2016-10-18 11:11:02 +00:00
# Variables
2016-11-02 05:19:40 +00:00
readonly ADMIN_INTERFACE_GIT_URL = "https://github.com/pi-hole/AdminLTE.git"
readonly ADMIN_INTERFACE_DIR = "/var/www/html/admin"
readonly PI_HOLE_GIT_URL = "https://github.com/pi-hole/pi-hole.git"
readonly PI_HOLE_FILES_DIR = "/etc/.pihole"
2017-02-05 19:07:04 +00:00
2017-06-25 21:21:41 +00:00
# shellcheck disable=SC2034
2017-01-29 01:32:42 +00:00
PH_TEST = true
2016-10-18 13:19:25 +00:00
2018-04-15 17:25:35 +00:00
# when --check-only is passed to this script, it will not perform the actual update
CHECK_ONLY = false
2017-07-26 17:00:08 +00:00
# shellcheck disable=SC1090
2017-06-25 21:21:41 +00:00
source " ${ PI_HOLE_FILES_DIR } /automated install/basic-install.sh "
2017-07-26 17:00:08 +00:00
# shellcheck disable=SC1091
2017-06-25 21:21:41 +00:00
source "/opt/pihole/COL_TABLE"
2017-06-21 11:49:05 +00:00
2017-01-29 01:32:42 +00:00
# is_repo() sourced from basic-install.sh
# make_repo() sourced from basic-install.sh
# update_repo() source from basic-install.sh
# getGitFiles() sourced from basic-install.sh
2018-04-02 21:06:36 +00:00
# get_binary_name() sourced from basic-install.sh
# FTLcheckUpdate() sourced from basic-install.sh
2016-11-02 05:19:40 +00:00
2016-12-24 14:19:39 +00:00
GitCheckUpdateAvail( ) {
2018-04-02 21:06:36 +00:00
local directory
directory = " ${ 1 } "
2017-01-29 01:38:14 +00:00
curdir = $PWD
2017-06-25 21:21:41 +00:00
cd " ${ directory } " || return
2016-12-24 14:19:39 +00:00
# Fetch latest changes in this repo
2016-12-25 00:18:58 +00:00
git fetch --quiet origin
2017-01-05 12:10:19 +00:00
# @ alone is a shortcut for HEAD. Older versions of git
# need @{0}
2017-07-01 21:52:10 +00:00
LOCAL = " $( git rev-parse "@{0}" ) "
2017-01-05 12:10:19 +00:00
# The suffix @{upstream} to a branchname
# (short form <branchname>@{u}) refers
# to the branch that the branch specified
# by branchname is set to build on top of#
# (configured with branch.<name>.remote and
# branch.<name>.merge). A missing branchname
# defaults to the current one.
2017-07-01 21:52:10 +00:00
REMOTE = " $( git rev-parse "@{upstream}" ) "
2016-12-24 14:19:39 +00:00
2017-07-26 17:00:08 +00:00
if [ [ " ${# LOCAL } " = = 0 ] ] ; then
echo -e " \\n ${ COL_LIGHT_RED } Error: Local revision could not be obtained, please contact Pi-hole Support
Additional debugging output:${ COL_NC } "
2017-01-05 12:10:19 +00:00
git status
exit
fi
2017-07-26 17:00:08 +00:00
if [ [ " ${# REMOTE } " = = 0 ] ] ; then
echo -e " \\n ${ COL_LIGHT_RED } Error: Remote revision could not be obtained, please contact Pi-hole Support
Additional debugging output:${ COL_NC } "
2017-01-05 12:10:19 +00:00
git status
exit
fi
2017-01-29 01:00:02 +00:00
# Change back to original directory
2017-06-25 21:21:41 +00:00
cd " ${ curdir } " || exit
2017-01-05 12:10:19 +00:00
if [ [ " ${ LOCAL } " != " ${ REMOTE } " ] ] ; then
2016-12-24 14:19:39 +00:00
# Local branch is behind remote branch -> Update
return 0
2016-12-24 14:32:25 +00:00
else
# Local branch is up-to-date or in a situation
# where this updater cannot be used (like on a
# branch that exists only locally)
return 1
2016-12-24 14:19:39 +00:00
fi
}
2016-11-02 08:12:02 +00:00
main( ) {
2017-07-26 17:00:08 +00:00
local basicError = " \\n ${ COL_LIGHT_RED } Unable to complete update, please contact Pi-hole Support ${ COL_NC } "
2018-04-02 20:53:32 +00:00
local core_update
local web_update
local FTL_update
core_update = false
web_update = false
FTL_update = false
2018-04-15 01:08:16 +00:00
2017-07-26 17:00:08 +00:00
# shellcheck disable=1090,2154
2017-03-21 22:01:51 +00:00
source " ${ setupVars } "
2016-11-02 08:12:02 +00:00
2017-07-26 17:00:08 +00:00
# This is unlikely
2017-02-05 19:07:04 +00:00
if ! is_repo " ${ PI_HOLE_FILES_DIR } " ; then
2017-07-26 17:00:08 +00:00
echo -e " \\n ${ COL_LIGHT_RED } Error: Core Pi-hole repo is missing from system!
Please re-run install script from https://pi-hole.net${ COL_NC } "
2016-11-02 19:09:33 +00:00
exit 1;
fi
2016-11-02 08:12:02 +00:00
2017-06-21 11:49:05 +00:00
echo -e " ${ INFO } Checking for updates... "
2016-12-24 14:19:39 +00:00
2016-12-24 14:32:25 +00:00
if GitCheckUpdateAvail " ${ PI_HOLE_FILES_DIR } " ; then
core_update = true
2017-07-26 17:00:08 +00:00
echo -e " ${ INFO } Pi-hole Core:\\t ${ COL_YELLOW } update available ${ COL_NC } "
2016-12-24 14:40:31 +00:00
else
core_update = false
2017-07-26 17:00:08 +00:00
echo -e " ${ INFO } Pi-hole Core:\\t ${ COL_LIGHT_GREEN } up to date ${ COL_NC } "
2016-12-24 14:32:25 +00:00
fi
2018-04-15 01:08:16 +00:00
if [ [ " ${ INSTALL_WEB_INTERFACE } " = = true ] ] ; then
2017-02-05 19:07:04 +00:00
if ! is_repo " ${ ADMIN_INTERFACE_DIR } " ; then
2017-07-26 17:00:08 +00:00
echo -e " \\n ${ COL_LIGHT_RED } Error: Web Admin repo is missing from system!
Please re-run install script from https://pi-hole.net${ COL_NC } "
2017-02-05 19:07:04 +00:00
exit 1;
fi
if GitCheckUpdateAvail " ${ ADMIN_INTERFACE_DIR } " ; then
web_update = true
2017-07-26 17:00:08 +00:00
echo -e " ${ INFO } Web Interface:\\t ${ COL_YELLOW } update available ${ COL_NC } "
2017-02-05 19:07:04 +00:00
else
web_update = false
2017-07-26 17:00:08 +00:00
echo -e " ${ INFO } Web Interface:\\t ${ COL_LIGHT_GREEN } up to date ${ COL_NC } "
2017-02-05 19:07:04 +00:00
fi
2016-11-02 13:41:51 +00:00
fi
2016-12-24 14:32:25 +00:00
2018-04-04 15:34:31 +00:00
if FTLcheckUpdate > /dev/null; then
FTL_update = true
echo -e " ${ INFO } FTL:\\t\\t ${ COL_YELLOW } update available ${ COL_NC } "
else
2018-05-01 20:59:12 +00:00
case $? in
1)
echo -e " ${ INFO } FTL:\\t\\t ${ COL_LIGHT_GREEN } up to date ${ COL_NC } "
; ;
2)
echo -e " ${ INFO } FTL:\\t\\t ${ COL_LIGHT_RED } Branch is not available. ${ COL_NC } \\n\\t\\t\\tUse ${ COL_LIGHT_GREEN } pihole checkout ftl [branchname] ${ COL_NC } to switch to a valid branch. "
; ;
*)
echo -e " ${ INFO } FTL:\\t\\t ${ COL_LIGHT_RED } Something has gone wrong, contact support ${ COL_NC } "
esac
2018-04-04 15:34:31 +00:00
FTL_update = false
2016-11-02 13:41:51 +00:00
fi
2016-11-02 14:29:20 +00:00
2018-04-02 20:53:32 +00:00
if [ [ " ${ core_update } " = = false && " ${ web_update } " = = false && " ${ FTL_update } " = = false ] ] ; then
2017-06-21 11:49:05 +00:00
echo ""
2018-04-02 20:53:32 +00:00
echo -e " ${ TICK } Everything is up to date! "
exit 0
2017-02-05 19:15:27 +00:00
fi
2016-11-02 14:29:20 +00:00
2018-04-15 17:25:35 +00:00
if [ [ " ${ CHECK_ONLY } " = = true ] ] ; then
2017-06-21 11:49:05 +00:00
echo ""
2018-04-15 17:25:35 +00:00
exit 0
2017-02-05 19:15:27 +00:00
fi
2016-11-02 14:29:20 +00:00
2017-02-05 19:15:27 +00:00
if [ [ " ${ core_update } " = = true ] ] ; then
2017-06-21 11:49:05 +00:00
echo ""
2018-04-02 20:53:32 +00:00
echo -e " ${ INFO } Pi-hole core files out of date, updating local repo. "
getGitFiles " ${ PI_HOLE_FILES_DIR } " " ${ PI_HOLE_GIT_URL } "
echo -e " ${ INFO } If you had made any changes in '/etc/.pihole/', they have been stashed using 'git stash' "
fi
if [ [ " ${ web_update } " = = true ] ] ; then
echo ""
echo -e " ${ INFO } Pi-hole Web Admin files out of date, updating local repo. "
getGitFiles " ${ ADMIN_INTERFACE_DIR } " " ${ ADMIN_INTERFACE_GIT_URL } "
echo -e " ${ INFO } If you had made any changes in '/var/www/html/admin/', they have been stashed using 'git stash' "
2017-02-05 19:15:27 +00:00
fi
2016-11-02 14:29:20 +00:00
2017-07-26 17:00:08 +00:00
if [ [ " ${ FTL_update } " = = true ] ] ; then
2018-04-02 20:53:32 +00:00
echo ""
echo -e " ${ INFO } FTL out of date, it will be updated by the installer. "
2017-02-22 10:00:45 +00:00
fi
2018-04-15 17:25:35 +00:00
if [ [ " ${ FTL_update } " = = true || " ${ core_update } " = = true ] ] ; then
2018-04-02 20:53:32 +00:00
${ PI_HOLE_FILES_DIR } /automated\ install/basic-install.sh --reconfigure --unattended || \
echo -e " ${ basicError } " && exit 1
fi
2016-11-02 14:29:20 +00:00
echo ""
exit 0
2016-11-02 08:12:02 +00:00
}
2016-11-02 07:51:38 +00:00
2018-04-15 17:25:35 +00:00
if [ [ " $1 " = = "--check-only" ] ] ; then
CHECK_ONLY = true
fi
2016-11-02 08:12:02 +00:00
main