Mattermost 5.32 – upgrading Mattermost Server with a script

# vi upgrade_mattermost.sh
#!/usr/bin/env bash
# Immediately exit if a command run from a loop, a pipeline or a compound
# command statement fails or a variable is used unset.
set -e
########################################
# Configuration – please adapt it to your environment
########################################
# Mattermost path
mattermostdir=“/opt/mattermost“
# Backup path
backupdir=“/opt“
# Temporary path for download
downloaddir=“/tmp“
# Specify the edition you use
#edition=“Team“
edition=“Enterprise“
# Start with plugins? Set 1 for starting with plugins active
plugins=0
# Set 1 for overriding the database backup question
backupdatabase=0
########################################
# Check dependencies
if ((EUID != 0)); then
echo „[-] This script needs to be run as root to work properly. Aborted.“
exit 1
fi
if ! type „systemctl“ >/dev/null 2>&1 && ! type „service“ >/dev/null 2>&1; then
echo „[-] The daemon manager (systemd or sysvinit) is not accessible. Aborted.“
exit 1
fi
if ! type „wget“ >/dev/null 2>&1 && ! type „curl“ >/dev/null 2>&1; then
echo „[-] A download tool like wget or curl is not accessible. Aborted.“
exit 1
fi
# Check requirements
if [[ „${edition}“ != „Team“ ]] && [[ „${edition}“ != „Enterprise“ ]]; then
echo „[-] The edition must either be \“Team\“ or \“Enterprise\“. Aborted.“
exit 1
fi
# Check config variables
test -d ${backup}
test -d ${downloaddir}
test -d ${mattermostdir}
# Ask for database backup
if [ „${backupdatabase}“ -eq 0 ]; then
read -r -p „[?] Do you have a current backup of the Mattermost database? [Y/n] “ input
case „$input“ in
[yY])
echo „[+] Starting the update process of Mattermost…“
;;
*)
echo „[-] Please create a backup and start again“
exit 1
;;
esac
fi
# Check if Mattermost exists in the path provided above
if [ ! -f „${mattermostdir}/bin/mattermost“ ]; then
echo „Mattermost not found please check the path for the Mattermost directory“
exit 1
fi
# Get version from argument
if [ -z „${1}“ ]; then
echo „Please specify the version of Mattermost to download“
exit 1
fi
version=“${1}“
if [[ „${edition}“ == „Team“ ]]; then
url=“https://releases.mattermost.com/${version}/mattermost-team-${version}-linux-amd64.tar.gz“
else
url=“https://releases.mattermost.com/${version}/mattermost-${version}-linux-amd64.tar.gz“
fi
# Main
# Get the file
function get_the_file() {
echo „[+] Downloading Mattermost ${edition} \“${version}\“…“
if type „curl“ >/dev/null 2>&1; then
if ! curl -LC – „${url}“ -o „${downloaddir}/mattermost-upgrade.tar.gz“; then
echo „[-] An issue occurred when downloading the Mattermost update package.“
exit 1
fi
else
if ! wget „${url}“ -o „${downloaddir}/mattermost-upgrade.tar.gz“; then
echo „[-] An issue occurred when downloading the Mattermost update package.“
exit 1
fi
fi
echo „[+] The Mattermost update package has been downloaded with successful“
}
# Check previous download
if [ -e „${downloaddir}/mattermost-upgrade.tar.gz“ ]; then
read -r -p „[?] A previous download exists. Do you want to replace it by a new one? [Y/n “ input
case „$input“ in
[yY])
echo „[+] Remove previous download.“
rm -rf „${downloaddir}/mattermost-upgrade.tar.gz“
get_the_file
;;
esac
else
get_the_file
fi
echo „[+] Extracting Mattermost update package…“
mkdir -p „${downloaddir}/mattermost-upgrade“
tar -xf „${downloaddir}/mattermost-upgrade.tar.gz“ -C „${downloaddir}/mattermost-upgrade/“
echo „[+] Stopping Mattermost service…“
if type systemctl >/dev/null 2>&1; then
systemctl stop mattermost
else
service mattermost stop
fi
if pgrep mattermost > /dev/null; then
echo „[-] Mattermost is still running. Update not possible. Aborting…“
rm -rf „${downloaddir}/mattermost-upgrade“
rm -f „${downloaddir}/mattermost-upgrade.tar.gz“
exit 1
fi
echo „[+] Creating backup of Mattermost…“
cp -ra „${mattermostdir}“ „${backupdir}/mattermost-backup-$(date +’%F-%H-%M‘)/“
echo „[+] Preparing update…“
USER=“$(stat -c ‚%U‘ ${mattermostdir}/bin/mattermost)“
GROUP=“$(stat -c ‚%G‘ ${mattermostdir}/bin/mattermost)“
chown -hR „$USER“:“$GROUP“ „${downloaddir}/mattermost-upgrade/“
# Clean up Mattermost directory
find „${mattermostdir}“ -mindepth 1 -maxdepth 1 -not \( -path „${mattermostdir}/config“ -o -path „${mattermostdir}/logs“ -o -path „${mattermostdir}/plugins“ -o -path „${mattermostdir}/data“ -o -path „${mattermostdir}/client“ \) -exec rm -rf {} \;
find „${mattermostdir}/client“ -mindepth 1 -maxdepth 1 -not \( -path „${mattermostdir}/client/plugins“ \) -exec rm -rf {} \;
# Rename plugin directory
if [ „${plugins}“ -eq 0 ]; then
echo „[+] Renaming plugin folders…“
if [ -d „${mattermostdir}/plugins/“ ]; then
mv „${mattermostdir}/plugins/“ „${mattermostdir}/plugins~“
fi
if [ -d „${mattermostdir}/client/plugins/“ ]; then
mv „${mattermostdir}/client/plugins/“ „${mattermostdir}/client/plugins~“
fi
fi
echo „[+] Updating Mattermost…“
cp -an „${downloaddir}/mattermost-upgrade/mattermost/“* „${mattermostdir}“
echo „[+] Cleaning Mattermost temporary files…“
rm -rf „${downloaddir}/mattermost-upgrade/“
rm -f „${downloaddir}/mattermost-upgrade.gz“
echo „[+] Allowing Mattermost to run on port 0-1023…“
setcap cap_net_bind_service=+ep „${mattermostdir}/bin/mattermost“
echo „[+] Starting Mattermost service…“
if type systemctl >/dev/null 2>&1; then
systemctl start mattermost
else
service mattermost start
fi
echo „[+] Mattermost updated with successful“
if [ „${plugins}“ -eq 0 ]; then
echo „*************************************************“
echo „Dont forget to reactivate your plugins“
echo „mv \“${mattermostdir}/plugins~\“ \“${mattermostdir}/plugins\““
echo „mv \“${mattermostdir}/client/plugins\“ \“${mattermostdir}/client/plugins~\““
echo „*************************************************“
fi
# chmod +x ./upgrade_mattermost.sh
# ./upgrade_mattermost.sh <Version>
# ./upgrade_mattermost.sh 5.26.0

Leave a Reply

You must be logged in to post a comment.