#!/usr/bin/env bash script_name="$(basename $(realpath $0))" working_dir="$(dirname $(realpath $0))" #conf_file="${working_dir}/conf/${script_name%%.*}.conf" conf_file="${working_dir}/conf/mattermost.conf" LOCK_DIR="/tmp/$(basename $0).$$.LOCK" log_file="${LOCK_DIR}/${script_name%%.*}.log" backup_date="$(date +%Y-%m-%d-%H%M)" # ---------- # Base Function(s) # ---------- clean_up() { if [[ -f "$_backup_crontab_file" ]]; then echononl "(Re)Install previously saved crontab from '$_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 -rf "$LOCK_DIR" 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 } fatal(){ echo "" if $terminal ; then echo -e " [ \033[31m\033[1mFatal\033[m ] $*" else echo -e " [ Fatal ] $*" fi echo "" if $terminal ; then echo -e " \033[1mScript terminated\033[m.." else echo -e " Script terminated.." fi echo "" rm -rf $LOCK_DIR exit 1 } error (){ echo "" if $terminal ; then echo -e " [ \033[31m\033[1mError\033[m ] $*" else echo " [ Error ] $*" fi echo "" } warn (){ echo "" if $terminal ; then echo -e " [ \033[33m\033[1mWarning\033[m ] $*" else echo " [ Warning ] $*" fi echo "" } info (){ if $terminal ; then echo "" if $terminal ; then echo -e " [ \033[32m\033[1mInfo\033[m ] $*" else echo " [ Info ] $*" fi echo "" fi } echo_ok() { if $terminal ; then echo -e "\033[85G[ \033[32mok\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[33m\033[1mskipped\033[m ]" fi } echo_wait(){ if $terminal ; then echo -en "\033[85G[ \033[5m\033[1m..\033[m ]" fi } 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 } detect_os () { if $(which lsb_release > /dev/null 2>&1) ; then DIST="$(lsb_release -i | awk '{print tolower($3)}')" DIST_VERSION="$(lsb_release -r | awk '{print tolower($2)}')" DIST_CODENAME="$(lsb_release -c | awk '{print tolower($2)}')" if [[ "$DIST" = "debian" ]]; then if $(echo "$DIST_VERSION" | grep -q '\.') ; then DIST_VERSION=$(echo "$DIST_VERSION" | cut --delimiter='.' -f1) fi fi elif [[ -e "/etc/os-release" ]]; then . /etc/os-release DIST=$ID DIST_VERSION=${VERSION_ID} fi # remove whitespace from DIST and DIST_VERSION DIST="${DIST// /}" DIST_VERSION="${DIST_VERSION// /}" } # ---------- # - Jobhandling # ---------- # - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM # - trap clean_up SIGHUP SIGINT SIGTERM # - Create lock directory '$LOCK_DIR" # mkdir "$LOCK_DIR" # ---------- # - Some checks .. # ---------- # - Running in a terminal? # - if [[ -t 1 ]] ; then terminal=true else fatal "Script must run in a terminal." fi # ========== # - Begin Main Script # ========== # ---------- # - Headline # ---------- if $terminal ; then echo "" echo -e "\033[1m----------\033[m" echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m" echo -e "\033[1m----------\033[m" fi # ---------- # Read Configurations from $conf_file # ---------- # - Give your default values here # - DEFAULT_FQHN_HOSTNAME="$(hostname -f)" DEFAULT_MATTERMOST_USER="mattermost" DEFAULT_MATTERMOST_GROUP="mattermost" DEFAULT_DB_TYPE="pgsql" DEFAULT_MATTERMOST_BASE_INSTALL_PATH="/opt" DEFAULT_MATTERMOST_TMP_DIR="/tmp" if [[ -f "$conf_file" ]]; then source "$conf_file" else fatal "No configuration file '$conf_file' present.\n In upgrade mode a configuration file is required!" fi [[ -n "$FQHN_HOSTNAME" ]] && DEFAULT_FQHN_HOSTNAME="$FQHN_HOSTNAME" if [[ -z "$DB_TYPE" ]] ; then fatal "Missing database type (DB_TYPE)!" fi if [[ -z "$DB_NAME" ]] ; then fatal "Missing database name (DB_NAME)!" fi if [[ -z "$DB_USER" ]] ; then fatal "Missing database user (DB_USER)!" fi if [[ -z "$DB_PASS" ]] ; then fatal "Missing database password (DB_PASS)!" fi [[ -n "$MATTERMOST_BASE_INSTALL_PATH" ]] && DEFAULT_MATTERMOST_BASE_INSTALL_PATH="$MATTERMOST_BASE_INSTALL_PATH" [[ -n "$MATTERMOST_TMP_DIR" ]] && DEFAULT_MATTERMOST_TMP_DIR="$MATTERMOST_TMP_DIR" [[ -n "$MATTERMOST_USER" ]] && DEFAULT_MATTERMOST_USER="$MATTERMOST_USER" if [[ -n "$MATTERMOST_GROUP" ]]; then DEFAULT_MATTERMOST_GROUP="$MATTERMOST_GROUP" else DEFAULT_MATTERMOST_GROUP="$DEFAULT_MATTERMOST_USER" fi echo -e "\033[32m--\033[m" echo "" echo "Version to upgrade Mattermost Server" echo "" echo " see: https://mattermost.com/download/" echo "" echo "" MM_NEW_VERSION= while [ "X$MM_NEW_VERSION" = "X" ] do echononl "New Mattermost Server Version: " read MM_NEW_VERSION if [ "X$MM_NEW_VERSION" = "X" ]; then echo -e "\n\t\033[33m\033[1mA Version number is required!\033[m\n" fi done DOWNLOAD_ARCHIVE="mattermost-${MM_NEW_VERSION}-linux-amd64.tar.gz" DOWNLOAD_URL="https://releases.mattermost.com/${MM_NEW_VERSION}/${DOWNLOAD_ARCHIVE}" echo -e "\033[32m--\033[m" echo "" echo "Base path of current mattermost installation." echo "" echo -e " The install directory is everything before the first occurrence " echo -e " of the string \e[3m/mattermost\e[0m." echo "" echo "" MATTERMOST_BASE_INSTALL_PATH= if [[ -n "$DEFAULT_MATTERMOST_BASE_INSTALL_PATH" ]]; then while [[ "X${MATTERMOST_BASE_INSTALL_PATH}" = "X" ]]; do echononl "Base installation path [${DEFAULT_MATTERMOST_BASE_INSTALL_PATH}]: " read MATTERMOST_BASE_INSTALL_PATH if [[ "X${MATTERMOST_BASE_INSTALL_PATH}" = "X" ]]; then MATTERMOST_BASE_INSTALL_PATH=$DEFAULT_MATTERMOST_BASE_INSTALL_PATH fi if [[ ! -d "${MATTERMOST_BASE_INSTALL_PATH}/mattermost" ]]; then echo -e "\n\tGiven Path does not contain a mattermost installation" MATTERMOST_BASE_INSTALL_PATH= fi done else while [[ "X${MATTERMOST_BASE_INSTALL_PATH}" = "X" ]]; do echononl "Base installation path: " read MATTERMOST_BASE_INSTALL_PATH if [[ "X${MATTERMOST_BASE_INSTALL_PATH}" = "X" ]]; then echo -e "\n\t\033[33m\033[1mBase installation path of current installation is reqired\033[m\n" fi if [[ ! -d "${MATTERMOST_BASE_INSTALL_PATH}/mattermost" ]]; then echo -e "\n\tGiven Path does not contain a mattermost installation" MATTERMOST_BASE_INSTALL_PATH= fi done fi MATTERMOST_CURRENT_VERSION="$(${MATTERMOST_BASE_INSTALL_PATH}/mattermost/bin/mattermost version 2> /dev/null | grep -E "^Build Number:" | cut -d' ' -f3)" echo -e "\033[32m--\033[m" echo "" echo "Give TMP directory for Downlaoding and extracting mattermost sources.." echo "" echo "" MATTERMOST_TMP_DIR= if [[ -n "$DEFAULT_MATTERMOST_TMP_DIR" ]]; then while [[ "X${MATTERMOST_TMP_DIR}" = "X" ]]; do echononl "TMP directory [${DEFAULT_MATTERMOST_TMP_DIR}]: " read MATTERMOST_TMP_DIR if [[ "X${MATTERMOST_TMP_DIR}" = "X" ]]; then MATTERMOST_TMP_DIR=$DEFAULT_MATTERMOST_TMP_DIR fi if [[ ! -d "${MATTERMOST_TMP_DIR}" ]]; then echo -e "\n\tnGiven TMP Directory \033[33m\033[1m$MATTERMOST_TMP_DIR\033[m does not exist!\n" MATTERMOST_TMP_DIR= fi done else while [[ "X${MATTERMOST_TMP_DIR}" = "X" ]]; do echononl "TMP directory: " read MATTERMOST_TMP_DIR if [[ "X${MATTERMOST_TMP_DIR}" = "X" ]]; then echo -e "\n\t\033[33m\033[1mA TMP directory is required!\033[m\n" continue fi if [[ ! -d "${MATTERMOST_TMP_DIR}" ]]; then echo -e "\n\tGiven TMP Directory \033[33m\033[1m$MATTERMOST_TMP_DIR\033[m does not exist!\n" MATTERMOST_TMP_DIR="" fi done fi FQHN_HOSTNAME= echo "" echo -e "\033[32m--\033[m" echo "" echo "Insert full qualified hostname for Mattermost Service" echo "" if [[ -n "$DEFAULT_FQHN_HOSTNAME" ]]; then while [[ "X${FQHN_HOSTNAME}" = "X" ]]; do echononl "Full qualified hostname [${DEFAULT_FQHN_HOSTNAME}]: " read FQHN_HOSTNAME if [[ "X${FQHN_HOSTNAME}" = "X" ]]; then FQHN_HOSTNAME=$DEFAULT_FQHN_HOSTNAME fi if [[ ! $FQHN_HOSTNAME =~ \. ]]; then echo -e "\n\tGiven Host \033[33m\033[1m$FQHN_HOSTNAME\033[m seems not to be a full qualified hostname.\n" FQHN_HOSTNAME="" fi done else while [[ "X${FQHN_HOSTNAME}" = "X" ]]; do echononl "Full qualified hostname: " read FQHN_HOSTNAME if [[ "X${FQHN_HOSTNAME}" = "X" ]]; then echo -e "\n\t\033[33m\033[1mFull qualified hostname is reqired\033[m\n" fi if [[ ! $FQHN_HOSTNAME =~ \. ]]; then echo -e "\n\tGiven Host \033[33m\033[1m$FQHN_HOSTNAME\033[m seems not to be a full qualified hostname.\n" FQHN_HOSTNAME="" fi done fi HOSTNAME="${FQHN_HOSTNAME%%.*}" echo "" echo "--" echo "" echo "Enter user and group for Mattermost Service." echo "" MATTERMOST_USER= while [ "X$MATTERMOST_USER" = "X" ] do echononl "Mattermost user [${DEFAULT_MATTERMOST_USER}]: " read MATTERMOST_USER if [ "X$MATTERMOST_USER" = "X" ]; then MATTERMOST_USER=$DEFAULT_MATTERMOST_USER fi done MATTERMOST_GROUP= while [ "X$MATTERMOST_GROUP" = "X" ] do echononl "Mattermost group [$DEFAULT_MATTERMOST_GROUP]: " read MATTERMOST_GROUP if [ "X$MATTERMOST_GROUP" = "X" ]; then MATTERMOST_GROUP=$DEFAULT_MATTERMOST_GROUP fi done if [[ "$DB_TYPE" = "mysql" ]] ; then if [[ -n "$MYSQL_CREDENTIAL_ARGS" ]] ; then if ! $(mysql $MYSQL_CREDENTIAL_ARGS -N -s -e 'quit' > /dev/null 2>&1) ; then fatal "Parameter MYSQL_CREDENTIAL_ARGS is given, but a connection to MySQL Service failed.!" fi USE_MYSQL_CREDENTIAL_ARGS=true else USE_MYSQL_CREDENTIAL_ARGS=false _MYSQL_ROOT_PW="" echo "" echo -e "\033[32m--\033[m" echo "" echo "Insert root password of MySQL Database Service" echo "" while [ "X${_MYSQL_ROOT_PW}" = "X" ]; do echononl "Passworteingabe: " read -s _MYSQL_ROOT_PW if [ "X${_MYSQL_ROOT_PW}" = "X" ]; then echo -e "\n\t\033[33m\033[1mPassworteingabe erforderlich!\033[m\n" continue fi if $(pgrep mysqld_safe > /dev/null 2>&1) || $(pgrep mysqld > /dev/null 2>&1); then if $(mysql --user="root" --password="$_MYSQL_ROOT_PW" -N -s -e 'quit' > /dev/null 2>&1) ; then MYSQL_ROOT_PW=$_MYSQL_ROOT_PW else echo -e "\n\t\033[33m\033[1mFalsches Passwort\033[m\n" _MYSQL_ROOT_PW="" fi else fatal "MySQL seems not be running. Start MySQL Service and try installing mattermost again." fi done fi fi blank_line blank_line echo -e "\033[32mStart upgrade script for Mattermost Server with the following parameters\033[m" echo "" echo -e " Mattermost current Server Version.: $MATTERMOST_CURRENT_VERSION" echo "" echo -e " Mattermost New Server Version.....: \033[33m\033[1m$MM_NEW_VERSION\033[m" echo "" echo -e " Full qualified Hostname...........: $FQHN_HOSTNAME" echo -e " Hostname..........................: $HOSTNAME" echo "" echo -e " Base path of installation.........: $MATTERMOST_BASE_INSTALL_PATH" echo "" echo -e " TMP directory ....................: $MATTERMOST_TMP_DIR" echo "" echo -e " Mattermost user...................: $MATTERMOST_USER" echo -e " Mattermost group..................: $MATTERMOST_GROUP" echo "" echo "" if [[ "${DB_TYPE}" = "pgsql" ]] ; then echo -e " Database Type.....................: PostgreSQL" else echo -e " Database Type.....................: MySQL" fi echo "" if [[ "${DB_TYPE}" = "mysql" ]]; then if $USE_MYSQL_CREDENTIAL_ARGS ; then echo -e " MYSQL_CREDENTIAL_ARGS.............: $MYSQL_CREDENTIAL_ARGS" else echo -e " Root password MySQL...............: **" fi fi echo "" echo -e " Database Name.....................: $DB_NAME" echo -e " Database User.....................: $DB_USER" echo -e " Database Password.................: $DB_PASS" echo "" echononl "einverstanden (yes/no): " read OK OK=${OK,,} while [ "X$OK" != "Xyes" -a "X$OK" != "Xno" ]; do echononl "Wrong entry! [yes/no]: " read OK OK=${OK,,} done [ $OK = "yes" ] || fatal Repeat with other settings.. blank_line blank_line if ! $USE_MYSQL_CREDENTIAL_ARGS ; then MYSQL_CREDENTIAL_ARGS="--user='root' --password=$_MYSQL_ROOT_PW" if ! $(mysql $MYSQL_CREDENTIAL_ARGS -N -s -e 'quit' > /dev/null 2>&1) ; then fatal "Parameter MYSQL_CREDENTIAL_ARGS is given, but a connection to MySQL Service failed.!" fi fi blank_line echo -e "\033[37m\033[1mSome pre-installation stuff..\033[m" blank_line echononl "Download version \033[1m${MM_NEW_VERSION}\033[m of the Mattermost Server.." if [[ ! -f "${working_dir}/mattermost-${MM_NEW_VERSION}-linux-amd64.tar.gz" ]]; then wget -P ${working_dir} $DOWNLOAD_URL > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi else echo_skipped fi # - Deaktiviere Cronjobs # - _backup_crontab_file=/tmp/crontab_root.${backup_date} echononl "Backup Crontab to '$_backup_crontab_file'" crontab -l > $_backup_crontab_file 2> $log_file if [[ $? -eq 0 ]]; then echo_ok else echo_failed fatal "$(cat $log_file)" fi echononl "Remove crontab for root.." crontab -r > $log_file 2>&1 if [[ $? -eq 0 ]]; then echo_ok else echo_failed fatal "$(cat $log_file)" fi echononl "Extract the Mattermost Server files into TMP directory.." tar -xf ${working_dir}/mattermost-${MM_NEW_VERSION}-linux-amd64.tar.gz \ -C ${MATTERMOST_TMP_DIR} --transform='s,^[^/]\+,\0-upgrade,' if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi echononl "Stop Mattermost Service.." if $(systemctl is-active --quiet service mattermost.service) ; then systemctl stop mattermost.service > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi else echo_skipped fi echononl "Backup mattermost database.." if [[ "${DB_TYPE}" = "mysql" ]]; then mysqldump --login-path=local --opt $DB_NAME \ > ${MATTERMOST_BASE_INSTALL_PATH}/${DB_NAME}-${backup_date}.sql 2> $log_file if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi else pg_dump -U ${DB_USER} -F p -c ${DB_NAME} -f ${MATTERMOST_BASE_INSTALL_PATH}/${DB_NAME}-${backup_date}.sql 2> $log_file if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi fi echononl "Backup mattermost installation directory.." cp -ra ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/ \ ${MATTERMOST_BASE_INSTALL_PATH}/mattermost-back-${backup_date}/ > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi echo echo -e "\033[37m\033[1mUpgrade Mattermost to version $MM_NEW_VERSION ..\033[m" echo echononl "Remove all files except \e[3mspecial directories\e[0m from within the current mattermost directory." find ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/ ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/client/ \ -mindepth 1 -maxdepth 1 \! \( -type d \( -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/client \ -o -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/client/plugins \ -o -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/config \ -o -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/logs \ -o -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/plugins \ -o -path ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/data \) -prune \) | sort | sudo xargs rm -r > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi echononl "Change ownership of the new files before copying them.." chown -hR ${MATTERMOST_USER}:${MATTERMOST_GROUP} ${MATTERMOST_TMP_DIR}/mattermost-upgrade/ > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi echononl "Copy the new files to your install directory.." cp -an ${MATTERMOST_TMP_DIR}/mattermost-upgrade/. ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/ > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi # Activate the CAP_NET_BIND_SERVICE capability to allow the new Mattermost binary # to bind to low ports. # echononl "Allow the new Mattermost binary to bind to low ports.." setcap cap_net_bind_service=+ep ${MATTERMOST_BASE_INSTALL_PATH}/mattermost/bin/mattermost > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi blank_line echo -e "\033[37m\033[1mSome post-installation stuff..\033[m" blank_line echononl "Remove the temporary files.." rm -r ${MATTERMOST_TMP_DIR}/mattermost-upgrade/ > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" echononl "continue anyway [yes/no]: " read OK OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do echononl "Wrong entry! - repeat [yes/no]: " read OK done [[ $OK = "yes" ]] || fatal "Stopped by user" else echo_ok fi echononl "Start Mattermost Service" systemctl start mattermost.service > "$log_file" 2>&1 if [[ $? -ne 0 ]]; then echo_failed error "$(cat "$log_file")" else echo_ok fi clean_up 0