tpotce/update.sh

229 lines
6.5 KiB
Bash
Raw Normal View History

#!/bin/bash
2017-10-05 22:02:02 +00:00
###################################################
2018-08-21 14:57:25 +00:00
# Do not change any contents of this script!!
2017-10-05 22:02:02 +00:00
###################################################
2018-01-10 17:14:39 +00:00
# Some vars
2017-10-05 19:13:58 +00:00
myCONFIGFILE="/opt/tpot/etc/tpot.yml"
2018-01-10 17:13:48 +00:00
myCOMPOSEPATH="/opt/tpot/etc/compose"
2017-10-05 19:13:58 +00:00
myRED=""
myGREEN=""
myWHITE=""
myBLUE=""
2017-10-05 19:13:58 +00:00
# Check for existing tpot.yml
function fuCONFIGCHECK () {
echo "### Checking for T-Pot configuration file ..."
echo -n "###### $myBLUE$myCONFIGFILE$myWHITE "
if ! [ -f $myCONFIGFILE ];
2017-10-05 19:13:58 +00:00
then
echo
2018-08-20 15:06:10 +00:00
echo "[ $myRED""NOT OK""$myWHITE ] - No T-Pot configuration found."
echo "Please create a link to your desired config i.e. 'ln -s /opt/tpot/etc/compose/standard.yml /opt/tpot/etc/tpot.yml'."
2017-10-05 19:13:58 +00:00
echo
exit 1
else
2018-08-20 15:06:10 +00:00
echo "[ $myGREEN""OK""$myWHITE ]"
2017-10-05 19:13:58 +00:00
fi
}
# Let's test the internet connection
function fuCHECKINET () {
mySITES=$1
echo "### Now checking availability of ..."
for i in $mySITES;
do
echo -n "###### $myBLUE$i$myWHITE "
curl --connect-timeout 5 -IsS $i 2>&1>/dev/null
if [ $? -ne 0 ];
then
2018-08-20 15:06:10 +00:00
echo
echo "###### $myBLUE""Error - Internet connection test failed.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]"
echo "Exiting.""$myWHITE"
2017-10-05 19:13:58 +00:00
echo
exit 1
else
2018-08-20 15:06:10 +00:00
echo "[ $myGREEN"OK"$myWHITE ]"
2017-10-05 19:13:58 +00:00
fi
done;
}
2018-08-20 15:06:10 +00:00
# Update
2017-10-05 22:02:02 +00:00
function fuSELFUPDATE () {
2017-10-05 22:34:41 +00:00
echo "### Now checking for newer files in repository ..."
2018-08-20 15:06:10 +00:00
git fetch --all
2017-10-05 22:34:41 +00:00
myREMOTESTAT=$(git status | grep -c "up-to-date")
if [ "$myREMOTESTAT" != "0" ];
then
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE""No updates found in repository.""$myWHITE"
2017-10-05 22:34:41 +00:00
return
fi
2018-08-21 14:51:46 +00:00
myRESULT=$(git diff --name-only origin/18.04 | grep update.sh)
2017-10-05 22:02:02 +00:00
myLOCALSTAT=$(git status -uno | grep -c update.sh)
if [ "$myRESULT" == "update.sh" ];
then
2017-10-05 22:40:31 +00:00
if [ "$myLOCALSTAT" == "0" ];
2017-10-05 22:02:02 +00:00
then
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE""Found newer version, will update myself and restart.""$myWHITE"
2018-08-21 14:50:33 +00:00
git reset --hard
2017-10-05 22:02:02 +00:00
git pull --force
exec "$1" "$2"
exit 1
fi
else
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE""Update script is already up-to-date.""$myWHITE"
git reset --hard
2017-10-13 21:53:21 +00:00
git pull --force
fi
}
2017-10-05 22:02:02 +00:00
2018-08-08 15:02:56 +00:00
# Let's check for version
function fuCHECK_VERSION () {
local myMINVERSION="18.04.0"
2018-08-21 14:35:35 +00:00
local myMASTERVERSION="18.10.0"
2018-08-08 15:02:56 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Checking for version tag ..."
2018-08-08 15:02:56 +00:00
if [ -f "version" ];
then
myVERSION=$(cat version)
if [[ "$myVERSION" > "$myMINVERSION" || "$myVERSION" == "$myMINVERSION" ]] && [[ "$myVERSION" < "$myMASTERVERSION" || "$myVERSION" == "$myMASTERVERSION" ]]
then
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE$myVERSION is eligible for the update procedure.$myWHITE"" [ $myGREEN""OK""$myWHITE ]"
2018-08-08 15:02:56 +00:00
else
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE $myVERSION cannot be upgraded automatically. Please run a fresh install.$myWHITE"" [ $myRED""NOT OK""$myWHITE ]"
exit
2018-08-08 15:02:56 +00:00
fi
else
2018-08-20 15:06:10 +00:00
echo "###### $myBLUE""Unable to determine version. Please run 'update.sh' from within '/opt/tpot'.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]"
2018-08-08 15:02:56 +00:00
exit
fi
}
2018-08-20 15:06:10 +00:00
# Stop T-Pot to avoid race conditions with running containers with regard to the current T-Pot config
function fuSTOP_TPOT () {
echo "### Need to stop T-Pot ..."
echo -n "###### $myBLUE Now stopping T-Pot.$myWHITE "
systemctl stop tpot
if [ $? -ne 0 ];
then
echo " [ $myRED""NOT OK""$myWHITE ]"
echo "###### $myBLUE""Could not stop T-Pot.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]"
echo "Exiting.""$myWHITE"
echo
exit 1
else
echo "[ $myGREEN"OK"$myWHITE ]"
fi
2018-08-20 15:06:10 +00:00
}
2017-10-05 21:02:36 +00:00
2018-08-20 15:06:10 +00:00
# Backup
function fuBACKUP () {
local myARCHIVE="/root/$(date +%Y%m%d%H%M)_tpot_backup.tgz"
local myPATH=$PWD
echo "### Create a backup, just in case ... "
echo -n "###### $myBLUE Building archive in $myARCHIVE $myWHITE"
cd /opt/tpot
tar cvfz $myARCHIVE * 2>&1>/dev/null
if [ $? -ne 0 ];
then
echo " [ $myRED""NOT OK""$myWHITE ]"
echo "###### $myBLUE""Something went wrong.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]"
echo "Exiting.""$myWHITE"
echo
cd $myPATH
exit 1
else
echo "[ $myGREEN"OK"$myWHITE ]"
cd $myPATH
fi
}
2017-10-05 22:34:41 +00:00
2018-08-20 15:06:10 +00:00
# Let's load docker images in parallel
function fuPULLIMAGES {
local myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml"
for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq)
do
docker pull $name &
done
wait
}
function fuUPDATER () {
local myPACKAGES="apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount cockpit cockpit-docker curl dialog dnsutils docker.io docker-compose dstat ethtool fail2ban genisoimage git glances grc html2text htop ifupdown iptables iw jq libcrack2 libltdl7 lm-sensors man multitail net-tools npm ntp openssh-server openssl pass prips syslinux psmisc pv python-pip unattended-upgrades unzip vim wireless-tools wpasupplicant"
echo "### Now upgrading packages ..."
apt-get -y autoclean
apt-get -y autoremove
apt-get update
apt-get -y install $myPACKAGES
# Some updates require interactive attention, you can override that for unattended upgrades.
# Be warned, this can easily break your system.
# apt-get dist-upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes
apt-get -y dist-upgrade
npm install "https://github.com/taskrabbit/elasticsearch-dump#9fcc8cc" -g
pip install --upgrade pip
hash -r
pip install --upgrade elasticsearch-curator yq
wget https://github.com/bcicen/ctop/releases/download/v0.7.1/ctop-0.7.1-linux-amd64 -O /usr/bin/ctop && chmod +x /usr/bin/ctop
2017-10-05 19:13:58 +00:00
echo
2017-10-05 21:02:36 +00:00
2018-08-20 15:06:10 +00:00
echo "### Now replacing T-Pot related config files on host"
cp host/etc/systemd/* /etc/systemd/system/
cp host/etc/issue /etc/
2017-10-05 22:02:02 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Now pulling latest docker images"
fuPULLIMAGES
2017-10-05 19:13:58 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### If you made changes to tpot.yml please ensure to add them again."
echo "### We stored the previous version as backup in /root/."
echo "### Done, please reboot."
}
################
# Main section #
################
# Got root?
myWHOAMI=$(whoami)
if [ "$myWHOAMI" != "root" ]
then
echo "Need to run as root ..."
sudo ./$0
exit
fi
2018-08-20 15:06:10 +00:00
# Only run with command switch
if [ "$1" != "-y" ]; then
echo "This script will update / upgrade all T-Pot related scripts, tools and packages"
echo "Some of your changes might be overwritten, so make sure to save your work"
echo "This is beta feature and only recommended for experienced users, run with '-y' switch"
echo
exit
fi
2018-01-10 17:29:02 +00:00
2018-08-20 15:06:10 +00:00
fuCHECK_VERSION
echo
2018-08-20 15:06:10 +00:00
fuCONFIGCHECK
echo
2018-08-20 15:06:10 +00:00
fuCHECKINET "https://index.docker.io https://github.com https://pypi.python.org https://ubuntu.com"
echo
2018-08-20 15:06:10 +00:00
fuSTOP_TPOT
echo
2018-08-20 15:06:10 +00:00
fuBACKUP
echo
2018-08-20 15:06:10 +00:00
fuSELFUPDATE "$0" "$@"
echo
2018-08-20 15:06:10 +00:00
fuUPDATER
echo