14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mattermost TeamEditionを毎日自動アップデートする【Mattermostのメジャーバージョンアップに対応】

Last updated at Posted at 2019-12-27

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

弊社は、ながらく無料版Slackをヘビーに使ってきましたが、あまりにもヘビーに使いすぎ、チャットの履歴を見られる期間が短くなっていました。
そこでMattermost TeamEditionを導入しました。

そこまではいいのですが、Mattermostのバージョンアップはかなり頻繁なので、面倒くさいから自動化したという話になります。

1. 前提条件

Mattermostのディレクトリ構成

/opt/mattermost <--- Mattermost本体
/opt/mattermost-data/  <--- Mattermostのデータとプラグインが入っている

それぞれのディレクトリの中身

$ ls /opt/mattermost -la
合計 256
drwxr-xr-x 12 mattermost mattermost   4096 12月 17 14:02 .
drwxr-xr-x 13 root       root         4096 12月 18 02:08 ..
-rw-r--r--  1 mattermost mattermost   1239 12月 17 14:02 MIT-COMPILED-LICENSE.md
-rw-r--r--  1 mattermost mattermost 196761 12月 17 14:02 NOTICE.txt
-rw-r--r--  1 mattermost mattermost   5312 12月 17 14:02 README.md
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:03 bin
drwxr-xr-x  6 mattermost mattermost   4096 12月 17 14:02 client
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:02 config
drwxr-xr-- 30 mattermost mattermost   4096 11月 22  2018 data
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:02 fonts
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:02 i18n
drwxr-xr-x  3 mattermost mattermost   4096 12月 17 14:02 logs
drwxr--r--  2 mattermost mattermost   4096 10月 12  2018 plugins
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:03 prepackaged_plugins
drwxr-xr-x  2 mattermost mattermost   4096 12月 17 14:02 templates

$ ls -la /opt/mattermost-data/
合計 28
drwxr-xr-x   5 mattermost mattermost  4096 11月 22  2018 .
drwxr-xr-x  13 root       root        4096 12月 18 02:08 ..
drwxr-xr-x  10 mattermost mattermost  4096 12月 27 02:08 client-plugins
drwxr-xr-- 387 mattermost mattermost 12288 12月 27 02:08 data
drwxr-xr-x  18 mattermost mattermost  4096 12月 27 02:08 plugins

config.jsonの設定

$ grep 'opt' /opt/mattermost/config/config.json
        "Directory": "/opt/mattermost-data/data/",
        "Directory": "/opt/mattermost-data/plugins",
        "ClientDirectory": "/opt/mattermost-data/client-plugins/",

2. 自動アップデートスクリプト

2021/07/15(木)、Mattermostのアーカイブファイルをダウンロードするページが変更になったので更新しています。

/home/user/bin/update.sh
#!/bin/bash

# Install Directory
INSTALL_DIR=/opt

# User and group
USER=mattermost
GROUP=mattermost

CURRENT_VERSION=$(sudo -u ${USER} ${INSTALL_DIR}/mattermost/bin/mattermost version 2> /dev/null  | sed -ne 's/^Version: \(.*\)/\1/p')
CURRENT_BUILD=$(sudo -u ${USER} ${INSTALL_DIR}/mattermost/bin/mattermost version 2> /dev/null  | sed -ne 's/^Build Number: \(.*\)/\1/p')

LATEST_VERSION=$(curl -s https://docs.mattermost.com/about/version-archive.html | grep 'linux-amd64.tar.gz</span></code></p></li>' | sed -ne 's|.*https://releases.mattermost.com/\(.*\)/mattermost-.*</span></code></p></li>|\1|p'| head -1)

# check new version
MIN_VERSION="$(printf '%s\n' "$CURRENT_VERSION" "$LATEST_VERSION" | sort -V | head -n1)"

if [ "$LATEST_VERSION" == "$CURRENT_VERSION" ]
then
  echo "CURRENT_VERSION:$CURRENT_VERSION is equal LATEST_VERSION:$LATEST_VERSION"
  exit
elif [ "$CURRENT_VERSION" == "$MIN_VERSION" ]
then
  echo "Current installed version: $CURRENT_VERSION"
  echo "LATEST_VERSION:$LATEST_VERSION is grater than the CURRENT_VERSION:$CURRENT_VERSION"
  echo "Install LATEST_VERSION:$LATEST_VERSION"
  TARGET_VERSION=$LATEST_VERSION
else
  echo "Current installed version: $CURRENT_VERSION"
  echo "Current installed build Number: $CURRENT_BUILD"
  echo "Latest Version: $LATEST_VERSION"
  echo "Something wrong. Exit"
  exit
fi

# Download Mattermost
mkdir -vp /tmp/download-mattermost-${TARGET_VERSION}
pushd /tmp/download-mattermost-${TARGET_VERSION}
wget https://releases.mattermost.com/${TARGET_VERSION}/mattermost-team-${TARGET_VERSION}-linux-amd64.tar.gz

tar -x --transform='s,^[^/]\+,\0-upgrade,' -f ./mattermost-team-${TARGET_VERSION}-linux-amd64.tar.gz
sudo chown -hR ${USER}:${GROUP} /tmp/download-mattermost-${TARGET_VERSION}/mattermost-upgrade/

echo "Stop Mattermost"
sudo systemctl stop mattermost

pushd ${INSTALL_DIR}
sudo cp -vra mattermost/ mattermost-back-$(date +'%F-%H-%M')/

find ${INSTALL_DIR}/mattermost/ -mindepth 1 -maxdepth 1 \! \( -type d \
   \( -path ${INSTALL_DIR}/mattermost/config \
   -o -path ${INSTALL_DIR}/mattermost/logs \
   -o -path ${INSTALL_DIR}/mattermost/plugins \
   -o -path ${INSTALL_DIR}/mattermost/data \) -prune \) | xargs echo rm -r
find ${INSTALL_DIR}/mattermost/ -mindepth 1 -maxdepth 1 \! \( -type d \
   \( -path ${INSTALL_DIR}/mattermost/config \
   -o -path ${INSTALL_DIR}/mattermost/logs \
   -o -path ${INSTALL_DIR}/mattermost/plugins \
   -o -path ${INSTALL_DIR}/mattermost/data \) -prune \) | sudo xargs rm -r

sudo cp -an /tmp/download-mattermost-${TARGET_VERSION}/mattermost-upgrade/. ${INSTALL_DIR}/mattermost/
sudo rm -rf /tmp/download-mattermost-${TARGET_VERSION}/mattermost-upgrade/

sudo chown -hR ${USER}:${GROUP} ${INSTALL_DIR}/mattermost/
sudo chown -hR ${USER}:${GROUP} ${INSTALL_DIR}/mattermost-data/plugins/
sudo chown -hR ${USER}:${GROUP} ${INSTALL_DIR}/mattermost-data/client-plugins/

echo "Start Mattermost"
sudo systemctl start mattermost

# Wait mattermost starting up
sleep 360

msg="{\"text\": \"Mattermost のバージョンを${TARGET_VERSION}にアップデートしました。\"}"
curl -i -s -o /dev/null -X POST -H 'Content-Type: application/json' -d "$msg" https://mattermost.example.jp/hooks/xxxxxxxxxxxxxxxxxxxxxxxxxx

3. アップデート cron

/etc/cron.d/cron_mattermost-update
$ cat /etc/cron.d/cron_mattermost-update 
8 2  * * * root bash /home/usr/bin/update.sh

4. 運用実績

2019年7月2日から運用していますが、トラブルはありません。

2020年5月15日 追記

ダウンロードリンクのURL変更に対応

MattermostをダウンロードするURLを取得する下記のページ内の
tar.gzの直リンク表示形式が変更になった。

Version Archive — Mattermost 5.23 documentation
https://docs.mattermost.com/administration/version-archive.html

既存は以下

https://releases.mattermost.com/5.22.3/mattermost-5.22.3-linux-amd64.tar.gz

変更後は以下

https://releases.mattermost.com/5.23.0/mattermost-5.23.0-linux-amd64.tar.gz?src=arc

上記変更に対応

2021年7月15日 追記

ダウンロードページが変更になった

旧ページURL

https://docs.mattermost.com/administration/version-archive.html

新ページURL

https://docs.mattermost.com/upgrade/version-archive.html

2021年8月30日 追記

Mattermostのバージョン 5.38.2のBuild Numberが5.39.2であるためエラーが発生します。
9月16日に5.39.0がリリースされる予定のためスクリプトをBuild Number取得から変更します。

2021年10月07日 追記

Mattermostのメジャーバージョンアップ(Version 6.0)が近づいているため、インストールするバージョンの比較チェック方法を変更しました。

MIN_VERSION="$(printf '%s\n' "$CURRENT_VERSION" "$LATEST_VERSION" | sort -V | head -n1)"

で小さい方のバージョンを抜き出して、現在のバージョンと最新バージョンが同じの場合以外で以下のように
現在のバージョンと最小バージョンが一致している場合は新しいバージョンをインストールするルールに変更しました。

@digitarhythm ありがとうございました~。

if [ "$LATEST_VERSION" == "$CURRENT_VERSION" ]
then
  echo "CURRENT_VERSION:$CURRENT_VERSION is equal LATEST_VERSION:$LATEST_VERSION"
  exit
elif [ "$CURRENT_VERSION" == "$MIN_VERSION" ]
then
  echo "Current installed version: $CURRENT_VERSION"
  echo "LATEST_VERSION:$LATEST_VERSION is grater than the CURRENT_VERSION:$CURRENT_VERSION"
  echo "Install LATEST_VERSION:$LATEST_VERSION"
  TARGET_VERSION=$LATEST_VERSION
else
  echo "Current installed version: $CURRENT_VERSION"
  echo "Current installed build Number: $CURRENT_BUILD"
  echo "Latest Version: $LATEST_VERSION"
  echo "Something wrong. Exit"
  exit
fi

2024年7月5日追記 URLのパス変更

https://docs.mattermost.com/upgrade/version-archive.htm

https://docs.mattermost.com/about/version-archive.html
になったので修正

- LATEST_VERSION=$(curl -s https://docs.mattermost.com/upgrade/version-archive.html | grep 'linux-amd64.tar.gz</span></code></p></li>' | sed -ne 's|.*https://releases.mattermost.com/\(.*\)/mattermost-.*</span></code></p></li>|\1|p'| head -1)
+ LATEST_VERSION=$(curl -s https://docs.mattermost.com/about/version-archive.html | grep 'linux-amd64.tar.gz</span></code></p></li>' | sed -ne 's|.*https://releases.mattermost.com/\(.*\)/mattermost-.*</span></code></p></li>|\1|p'| head -1)
14
13
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?