os-upgrade.sh: manage script outpu..
This commit is contained in:
parent
e448ab862f
commit
e68bb71e9a
319
os-upgrade.sh
319
os-upgrade.sh
@ -1,19 +1,318 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#apt-get update
|
||||
#apt-get dist-upgrade -y
|
||||
#apt-get autoremove -y
|
||||
#apt-get clean
|
||||
script_name="$(basename $(realpath $0))"
|
||||
working_dir="$(dirname $(realpath $0))"
|
||||
|
||||
apt update -y
|
||||
apt dist-upgrade -y
|
||||
apt autoremove -y
|
||||
apt clean
|
||||
conf_file="${working_dir}/conf/${script_name%%.*}.conf"
|
||||
|
||||
log_file="$(mktemp)"
|
||||
random_prefix="$(head -c 300 /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 8)"
|
||||
|
||||
backup_date=$(date +%Y-%m-%d-%H%M)
|
||||
|
||||
|
||||
# =============
|
||||
# --- Some Variables
|
||||
# =============
|
||||
|
||||
removed_packages_log="/var/log/removed-debian-packages.log"
|
||||
updated_packages_log="/var/log/updated-debian-packages.log"
|
||||
|
||||
|
||||
# =============
|
||||
# --- Some Functions
|
||||
# =============
|
||||
|
||||
clean_up() {
|
||||
|
||||
|
||||
if [[ -f "$_backup_crontab_file" ]]; then
|
||||
|
||||
blank_line
|
||||
echononl " (Re)Install Crontab from previously saved crontab file
|
||||
'$_backup_crontab_file'.."
|
||||
|
||||
crontab $_backup_crontab_file >> $log_file 2>&1
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo_ok
|
||||
else
|
||||
echo_failed
|
||||
error "$(cat $log_file)"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Perform program exit housekeeping
|
||||
rm -f $log_file
|
||||
rm -rf /tmp/*.${random_prefix}
|
||||
blank_line
|
||||
exit $1
|
||||
}
|
||||
|
||||
echononl(){
|
||||
if $terminal ; then
|
||||
echo X\\c > /tmp/shprompt$$
|
||||
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
|
||||
echo -e -n " $*\\c" 1>&2
|
||||
else
|
||||
echo -e -n " $*" 1>&2
|
||||
fi
|
||||
rm /tmp/shprompt$$
|
||||
fi
|
||||
}
|
||||
echo_print_command() {
|
||||
if $terminal ; then
|
||||
echo X\\c > /tmp/shprompt$$
|
||||
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
|
||||
echo -e -n "\033[60G - \033[1m$*\\c\033[m" 1>&2
|
||||
else
|
||||
echo -e -n "\033[60G - \033[1m$*\033[m" 1>&2
|
||||
fi
|
||||
rm /tmp/shprompt$$
|
||||
fi
|
||||
}
|
||||
echo_done() {
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[32mdone\033[m ]"
|
||||
fi
|
||||
}
|
||||
echo_ok() {
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[32mok\033[m ]"
|
||||
fi
|
||||
}
|
||||
echo_ignore() {
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[33mignore\033[m ]"
|
||||
fi
|
||||
}
|
||||
echo_warning() {
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[33m\033[1mwarn\033[m ]"
|
||||
fi
|
||||
}
|
||||
echo_failed(){
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[1;31mfailed\033[m ]"
|
||||
fi
|
||||
}
|
||||
echo_skipped() {
|
||||
if $terminal ; then
|
||||
echo -e "\033[85G[ \033[37mskipped\033[m ]"
|
||||
fi
|
||||
}
|
||||
|
||||
fatal (){
|
||||
blank_line
|
||||
if $terminal ; then
|
||||
echo -e " [ \033[31m\033[1mFatal\033[m ]: \033[37m\033[1m$*\033[m"
|
||||
echo ""
|
||||
echo -e " \033[31m\033[1m Script will be interrupted..\033[m\033[m"
|
||||
else
|
||||
echo "fatal: $*"
|
||||
echo "Script will be interrupted.."
|
||||
fi
|
||||
clean_up 1
|
||||
}
|
||||
error(){
|
||||
blank_line
|
||||
if $terminal ; then
|
||||
echo -e " [ \033[31m\033[1mFehler\033[m ]: $*"
|
||||
else
|
||||
echo "Error: $*"
|
||||
fi
|
||||
blank_line
|
||||
}
|
||||
|
||||
warn (){
|
||||
if $terminal ; then
|
||||
echo ""
|
||||
echo -e " [ \033[33m\033[1mWarning\033[m ]: $*"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
info (){
|
||||
if $terminal ; then
|
||||
echo ""
|
||||
echo -e " [ \033[32m\033[1mInfo\033[m ]: $*"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
## - Check if a given array (parameter 2) contains a given string (parameter 1)
|
||||
## -
|
||||
containsElement () {
|
||||
local e
|
||||
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
trim() {
|
||||
local var="$*"
|
||||
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
|
||||
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
|
||||
echo -n "$var"
|
||||
}
|
||||
|
||||
blank_line() {
|
||||
if $terminal ; then
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
# =============
|
||||
# --- Jobhandling
|
||||
# =============
|
||||
|
||||
# - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM
|
||||
# -
|
||||
trap clean_up SIGHUP SIGINT SIGTERM
|
||||
|
||||
|
||||
# =============
|
||||
# --- Some Checks
|
||||
# =============
|
||||
|
||||
# - Running in a terminal?
|
||||
# -
|
||||
if [[ -t 1 ]] ; then
|
||||
terminal=true
|
||||
else
|
||||
terminal=false
|
||||
fi
|
||||
|
||||
|
||||
if $terminal ; then
|
||||
echo ""
|
||||
echo -e "\033[1mUpgrade Packages with a 'smart' conflict resolution system\033[m"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echononl "\033[32m\033[1mResynchronize the package index files\033[m"
|
||||
echo_print_command "apt-get update"
|
||||
apt-get update > $log_file 2>&1
|
||||
if [[ $? -gt 0 ]]; then
|
||||
echo_failed
|
||||
fatal "$(cat $log_file)"
|
||||
else
|
||||
echo_done
|
||||
fi
|
||||
|
||||
# - get list of upgradable packages
|
||||
#
|
||||
packages_updated="$(apt-get -V -s dist-upgrade | grep -E "^ .*=>.*" | awk '{print$1}')"
|
||||
|
||||
#echononl "\033[32m\033[1mUpgrade Packages\033[m - \033[1mapt full-upgrade\033[m"
|
||||
#if [[ -n "$packages_updated" ]]; then
|
||||
# apt full-upgrade -y > $log_file 2>&1
|
||||
# if [[ $? -gt 0 ]]; then
|
||||
# echo_failed
|
||||
# fatal "$(cat $log_file)"
|
||||
# else
|
||||
# echo_done
|
||||
# echo
|
||||
# echo " This packages have been updated:"
|
||||
# for _package in $packages_updated ; do
|
||||
# echo -e " \033[1m$_package\033[m"
|
||||
# done
|
||||
# echo ""
|
||||
# fi
|
||||
#else
|
||||
# echo_skipped
|
||||
#fi
|
||||
|
||||
echononl "\033[32m\033[1mUpgrade Packages\033[m"
|
||||
echo_print_command "apt-get dist-upgrade"
|
||||
if [[ -n "$packages_updated" ]]; then
|
||||
apt-get dist-upgrade -y > $log_file 2>&1
|
||||
if [[ $? -gt 0 ]]; then
|
||||
echo_failed
|
||||
fatal "$(cat $log_file)"
|
||||
else
|
||||
echo_done
|
||||
echo
|
||||
echo " This packages have been updated:"
|
||||
echo "[ $(date +%Y-%d-%m" "%H:%M) ] This packages have been updated:" >> "$updated_packages_log"
|
||||
for _package in $packages_updated ; do
|
||||
echo -e " \033[1m$_package\033[m"
|
||||
echo " $_package" >> "$updated_packages_log"
|
||||
done
|
||||
echo ""
|
||||
echo "" >> "$updated_packages_log"
|
||||
fi
|
||||
else
|
||||
echo_skipped
|
||||
fi
|
||||
|
||||
echononl "\033[32m\033[1mRemove unused Packages\033[m"
|
||||
echo_print_command "apt-get autoremove"
|
||||
apt-get autoremove -y > $log_file 2>&1
|
||||
if [[ $? -gt 0 ]]; then
|
||||
echo_failed
|
||||
fatal "$(cat $log_file)"
|
||||
else
|
||||
echo_done
|
||||
fi
|
||||
|
||||
echononl "\033[32m\033[1mClear out the local repository of retrieved package files\033[m"
|
||||
echo_print_command "apt-get clean"
|
||||
apt-get clean -y > $log_file 2>&1
|
||||
if [[ $? -gt 0 ]]; then
|
||||
echo_failed
|
||||
fatal "$(cat $log_file)"
|
||||
else
|
||||
echo_done
|
||||
fi
|
||||
|
||||
if [[ -f "/var/run/reboot-required" ]]; then
|
||||
echo -e "\n\t[ \033[31m\033[1m Reboot required! \033[m\033[m ]\n"
|
||||
fi
|
||||
|
||||
#postsuper -d ALL
|
||||
# - Get list of packages with onlx config files present
|
||||
# -
|
||||
rc_packages="$(dpkg --list | awk '/^rc/ { print $2 }')"
|
||||
|
||||
exit 0
|
||||
blank_line
|
||||
if $terminal; then
|
||||
echo -e " \033[32m\033[1mRemove (purge) packages with only config files installed ((rc):\033[m"
|
||||
echo -en " \033[1mapt-get purge \$(dpkg --list | awk '/^rc/ { print $2 }')\033[m"
|
||||
fi
|
||||
if [[ -n "$rc_packages" ]] ; then
|
||||
apt-get purge -y $(dpkg --list | awk '/^rc/ { print $2 }') > $log_file 2>&1
|
||||
if [[ $? -gt 0 ]]; then
|
||||
echo_failed
|
||||
fatal "$(cat $log_file)"
|
||||
else
|
||||
echo_done
|
||||
echo
|
||||
echo " This packages with only config files installed have been removed:"
|
||||
echo "[ $(date +%Y-%d-%m" "%H:%M) ] This packages with only config files installed have been removed:" >> "$removed_packages_log"
|
||||
for _package in $rc_packages ; do
|
||||
echo -e " \033[1m$_package\033[m"
|
||||
echo " $_package" >> "$removed_packages_log"
|
||||
done
|
||||
echo ""
|
||||
echo "" >> "$removed_packages_log"
|
||||
|
||||
fi
|
||||
else
|
||||
echo_skipped
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if [[ -f "/var/run/reboot-required" ]]; then
|
||||
if $terminal ; then
|
||||
echo -e "\n\t[ \033[31m\033[1m Reboot required! \033[m\033[m ]\n"
|
||||
else
|
||||
echo ""
|
||||
echo " System was updated - Reboot required!"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
clean_up 0
|
||||
|
Loading…
Reference in New Issue
Block a user