Mattermost 5をFreeBSDでも動くようにしてみた

**一番下にビルドしたバイナリの配布サイトを記載しています。**
**手っ取り早く使いたい方は、そちらをどうぞ**

社内でビジネス向けチャットを導入したいと考え、Mattermostを動かしてみることにしました。
個人的な要件的には、次のような感じ

- FreeBSDで動くこと
- KeycloakでSSOが出来ること
    - これはそのうち別記事で書きます。

RocketChatも試したけど、meteorがそもそもFreeBSDで動かないようなので、諦めました。
ちなみに、Mattermost 4系はFreeBSDのpkgにありましたが、どうせ使うなら新しいものを。

## FreeBSDで動くようにコンパイルする

### 環境の準備

- OS
    - FreeBSD 11.2R(amd64)

Git/Go/gmake/zipをpkgから導入します。

```
# pkg install git go gmake zip
```

### Mattermostのビルド

本来は、Webappもgitから落とすのが良いのですが、FreeBSDだとnpmの関係でWebappのビルドに失敗するため、
配布されているパッケージからWebapp部分だけ抜き出します。

パッチはFreeBSD向けのバイナリを作るためのパッチです。

```
$ mkdir -p ~/go/src/github.com/mattermost
$ cd ~/go/src/github.com/mattermost
$ git clone https://github.com/mattermost/mattermost-server.git
$ cd mattermost-server
$ git checkout remotes/origin/release-5.1
$ fetch https://github.com/tatsuyaueda/mattermost-server/commit/bf98b63c875467e93225c4e5d93417d2db217031.patch
$ patch < bf98b63c875467e93225c4e5d93417d2db217031.patch
$ export BUILD_NUMBER=5.1.0-unofficial
$ gmake build
$ gmake config-reset
$ mkdir -p ~/go/src/github.com/mattermost/mattermost-webapp/
$ mkdir -p ~/temp
$ cd ~/temp
$ fetch https://releases.mattermost.com/5.1.0/mattermost-team-5.1.0-linux-amd64.tar.gz
$ tar xvzf mattermost-team-5.1.0-linux-amd64.tar.gz
$ mkdir -p ~/go/src/github.com/mattermost/mattermost-webapp/dist/
$ cp -Rp ./mattermost/client/* ~/go/src/github.com/mattermost/mattermost-webapp/dist/
$ cd ~/go/src/github.com/mattermost/mattermost-server
$ gmake package
```

ここまでの操作でバイナリが生成されます。

```
$ ls  ~/go/src/github.com/mattermost/mattermost-server/dist
mattermost                              mattermost-team-linux-amd64.tar.gz      mattermost-team-windows-amd64.zip
mattermost-team-freebsd-amd64.tar.gz    mattermost-team-osx-amd64.tar.gz
```

## こんな面倒なことをしなくても、、AWS CodeBuildでビルドする

上記の方法で、とりあえずFreeBSDで動くMattermostがビルドできますが、Mattermostのリリースは
月に1回行われており、それに追従にするにはちょっと面倒なので、AWS CodeBuildを使って、楽をします。

ビルドにUbuntuを利用しているため、Webapp部分もちゃんとビルド出来ます。

ソースコードのリポジトリはFreeBSD向けのバイナリをビルドするパッチを含んだリポジトリを、
本家からforkして作ったため、こちらを使ってください。

- https://github.com/tatsuyaueda/mattermost-server
    - ブランチ：release-5.1-unofficial

```buildspec.yml
version: 0.2

env:
  variables:
    SRC_DIR_SERVER: src/github.com/mattermost/mattermost-server
    SRC_DIR_WEBAPP: src/github.com/mattermost/mattermost-webapp
    BASE_VERSION: v5.1.0

phases:
  install:
    commands:
      - apt-get update
      - apt-get install -y build-essential npm golang zip libpng-dev git rename
      - npm install npm@latest -g
      - export BUILD_NUMBER=${BASE_VERSION}-unofficial && echo ${BUILD_NUMBER}
      - export GOPATH=${HOME}/go && echo ${GOPATH}
      - export PATH=/usr/local/go/bin:${GOPATH}/bin:${PATH} && echo ${PATH}
      - type go && go version
  pre_build:
    commands:
      - mkdir -p ${GOPATH}/${SRC_DIR_SERVER} && cd ${GOPATH}/${SRC_DIR_SERVER}
      - mv ${CODEBUILD_SRC_DIR}/* ${CODEBUILD_SRC_DIR}/.??* .
      - mkdir -p ${GOPATH}/${SRC_DIR_WEBAPP} && cd ${GOPATH}/${SRC_DIR_WEBAPP}/..
      - git clone https://github.com/mattermost/mattermost-webapp.git
      - cd ${GOPATH}/${SRC_DIR_WEBAPP}
      - git checkout refs/tags/${BASE_VERSION}
  build:
    commands:
      - cd ${GOPATH}/${SRC_DIR_SERVER}
      - echo Build started on `date`
      - echo Compiling the Go code...
      - make build
      - make build-client
      - make config-reset
      - make package
  post_build:
    commands:
      - rename 's/mattermost-team-(.+)/mattermost-team-$ENV{BUILD_NUMBER}-$1/' dist/*
      - ls ./dist/
      - echo Build completed on `date`
artifacts:
  files: 
    - 'dist/*'
  base-directory: ${GOPATH}/${SRC_DIR_SERVER}
  discard-paths: yes
```

## ビルドしたバイナリを配布しています

ただFreeBSDで使いたいという方は、手っ取り早くAWS CodeBuildでビルドしたバイナリを、
次のURLで配布しているため。こちらをご利用ください。

配布ページにも記載していますが、本バイナリは at your own risk を条件にご利用ください。

- https://github.com/tatsuyaueda/mattermost-server/wiki