NetBSD Advent Calendar 2017の9日目の記事です。
はじめに
Mattermostと言う チャットプラットフォームがある。これのCommunity Editionは LDAP認証機能がないなどちょっと使いにくい部分はあるのだが、 Linuxでは良い感じに動くのを確認していた。 日本語ユーザーインターフェイスもベータ扱いではあるが、 ほぼ翻訳できていると思う。
Mattermostは、サーバーはGo言語で書かれており、 ビルドにはnode.jsも必要となる。 どちらもGo 1.8以降、node.js 8以降が必要で、 例えばDebian GNU/Linux 9で動かそうとすると、 標準のパッケージマネジメントシステムに収録されている Goとnode.jsはこれよりずっと古いので、ディストリビューションのリポジトリー 以外から新しいバージョンをインストールしなくてはいけない。 その点、pkgsrcであれば、Goは新しいし、node,jsも新しいものを選べる。
また、Mattermostの開発環境には、dockerが必要なように思われるかもしれないが、 別になくてもちゃんと動かすことができる。
以下では、NetBSD/amd64 current上でMattermostのサーバーと ウェブアプリケーションをビルドするまでを紹介する。 実際に動かすまでは、次回に紹介したい。
ビルドに必要なツールを用意する
サーバーはGo言語で書かれているため、 pkgsrc/lang/goを インストールする。 以下のように操作すれば良い。
# cd /usr/pkgsrc/lang/go
# make install
この記事を書いている時点では、go-1.9.2というパッケージがインストールされる。
ウェブアプリケーションは、node.jsでビルドするため、以下のように最新のnode.jsを インストールしておく。
# cd /usr/pkgsrc/lang/nodejs
# make install
この記事を書いている時点では、nodejs-9.2.0nb1というパッケージがインストールされる。
ウェブアプリケーションのビルドの途中で、node.jsのmozjpegモジュールを
インストールすることになる。
このモジュールは、Linuxであれば、コマンドのバイナリーファイルを
提供してくれるのだが、NetBSD用など当然ないので、バイナリーファイルを
ビルドしないといけない。
そのためには、以下のパッケージが必要になる。
ちなみに、Debian GNU/Linux 9の場合にもlibpng12.so
が提供
されていないため、mozjpegを使おうとする箇所で失敗する。
pkgsrc/devel/pkgconf
pkgsrc/devel/libtool-base
pkgsrc/graphics/png
ウェブアプリケーションをビルドするには、
yarnというパッケージマネジメント
システムが必要である。
yarnのインストール手順によると、以下のようにnpm
コマンドを
使ってのインストールは推奨されていないようであるが、一番簡単な方法であり、
このためにしか使わないので、これを採用してしまう。
$ mkdir ~/yarn
$ cd ~/yarn
$ npm install yarn
$ set PATH=~/yarn/node_module/yarn/bin:$PATH
また、GNU makeも必要なので、インストールしておく。どこかで、gmakeをmakeとして呼び出しているようなので、シンボリックリンクも作っておく。
# cd /usr/pkgsrc/deve/gmake
# make install
$ ln -s /usr/pkg/bin/gmake ~/yarn/node_modeule/yarn/bin/make
ソースコードを配置する
Compiling Mattermostのウェブページにあるように配置していく。
$ mkdir -p ~/go/src/github.com/mattermost
$ cd ~/go/src/github.com/mattermost
$ git clone https://github.com/mattermost/mattermost-server.git
$ git clone https://github.com/mattermost/mattermost-webapp.git
配置したソースコードの場所を、環境変数に設定する。
$ set GOPATH=$HOME/go
$ export GOPATH
$ set PATH=$PATH:$GOPATH/bin
ビルドに必要なパッチを当てる
残念ながら、MattermostのMakefileは、あまり移植性を考慮していないようである。 また、開発用にはdockerを使うので、配布用のアーカイブファイルを作成する 部分について、最近は忘れられているようである。
どう直すのが適当であるかは明確ではないが、配布用のアーカイブファイルを
作成するには以下のようなパッチが必要である。
config/config.json
ファイルは、なければ自動的に生成されるので
用意しておく必要はないはずである。
diff --git a/build/release.mk b/build/release.mk
index 5eaee8022..285dcadac 100644
--- a/build/release.mk
+++ b/build/release.mk
@@ -36,16 +36,6 @@ package:
cp -RL templates $(DIST_PATH)
cp -RL i18n $(DIST_PATH)
- @# Disable developer settings
- sed -i'' -e 's|"ConsoleLevel": "DEBUG"|"ConsoleLevel": "INFO"|g' $(DIST_PATH)/config/config.json
- sed -i'' -e 's|"SiteURL": "http://localhost:8065"|"SiteURL": ""|g' $(DIST_PATH)/config/config.json
-
- @# Reset email sending to original configuration
- sed -i'' -e 's|"SendEmailNotifications": true,|"SendEmailNotifications": false,|g' $(DIST_PATH)/config/config.json
- sed -i'' -e 's|"FeedbackEmail": "test@example.com",|"FeedbackEmail": "",|g' $(DIST_PATH)/config/config.json
- sed -i'' -e 's|"SMTPServer": "dockerhost",|"SMTPServer": "",|g' $(DIST_PATH)/config/config.json
- sed -i'' -e 's|"SMTPPort": "2500",|"SMTPPort": "",|g' $(DIST_PATH)/config/config.json
-
@# Package webapp
mkdir -p $(DIST_PATH)/client
cp -RL $(BUILD_WEBAPP_DIR)/dist/* $(DIST_PATH)/client
また、Go言語で書かれたサーバーをNetBSD/amd64向けにビルドするための ターゲットが必要である。 以下のように追加する。
diff --git a/Makefile b/Makefile
index a0cf74f1c..ff4bb8149 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: build package run stop run-client run-server stop-client stop-server restart restart-server restart-client start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist setup-mac prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-web-client vet run-server-for-web-client-tests
+.PHONY: build package run stop run-client run-server stop-client stop-server restart restart-server restart-client start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist setup-mac prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows build-netbsd internal-test-web-client vet run-server-for-web-client-tests
ROOT := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
diff --git a/build/release.mk b/build/release.mk
index 5eaee8022..c551e3ad0 100644
--- a/build/release.mk
+++ b/build/release.mk
@@ -13,6 +13,10 @@ build-windows:
@echo Build Windows amd64
env GOOS=windows GOARCH=amd64 $(GO) install $(GOFLAGS) $(GO_LINKER_FLAGS) ./cmd/platform
+build-netbsd:
+ @echo Build NetBSD amd64
+ env GOOS=netbsd GOARCH=amd64 $(GO) install $(GOFLAGS) $(GO_LINKER_FLAGS) ./cmd/platform
+
build: build-linux build-windows build-osx
build-client:
配布用のアーカイブファイルを作成する部分は、LinuxとmacOS、Windows用の全てを 用意するようになっているので、NetBSD用だけを用意するように変更してしまう。
diff --git a/build/release.mk b/build/release.mk
index 5eaee8022..0105cf681 100644
--- a/build/release.mk
+++ b/build/release.mk
@@ -61,38 +61,9 @@ endif
@# ----- PLATFORM SPECIFIC -----
- @# Make osx package
@# Copy binary
-ifeq ($(BUILDER_GOOS_GOARCH),"darwin_amd64")
cp $(GOPATH)/bin/platform $(DIST_PATH)/bin # from native bin dir, not cross-compiled
-else
- cp $(GOPATH)/bin/darwin_amd64/platform $(DIST_PATH)/bin # from cross-compiled bin dir
-endif
- @# Package
- tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-amd64.tar.gz mattermost
- @# Cleanup
- rm -f $(DIST_PATH)/bin/platform
-
- @# Make windows package
- @# Copy binary
-ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64")
- cp $(GOPATH)/bin/platform.exe $(DIST_PATH)/bin # from native bin dir, not cross-compiled
-else
- cp $(GOPATH)/bin/windows_amd64/platform.exe $(DIST_PATH)/bin # from cross-compiled bin dir
-endif
- @# Package
- cd $(DIST_ROOT) && zip -9 -r -q -l mattermost-$(BUILD_TYPE_NAME)-windows-amd64.zip mattermost && cd ..
- @# Cleanup
- rm -f $(DIST_PATH)/bin/platform.exe
-
- @# Make linux package
- @# Copy binary
-ifeq ($(BUILDER_GOOS_GOARCH),"linux_amd64")
- cp $(GOPATH)/bin/platform $(DIST_PATH)/bin # from native bin dir, not cross-compiled
-else
- cp $(GOPATH)/bin/linux_amd64/platform $(DIST_PATH)/bin # from cross-compiled bin dir
-endif
@# Package
- tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-amd64.tar.gz mattermost
+ tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-netbsd-amd64.tar.gz mattermost
@# Don't clean up native package so dev machines will have an unzipped package available
@#rm -f $(DIST_PATH)/bin/platform
ビルドする
これで、ビルドする準備はできたので、後はウェブアプリケーションとサーバーを ビルドし、配布用アーカイブファイルを作成すれば良い。 node.js、Goともにネットワーク経由でファイルを取得する。
まずはウェブアプリケーションをビルドする。以下のように実行すれば良い。 mattermost-serverディレクトリーの中で実行しているが、実際には mattermost-webapp内でビルドがされる。
$ cd ~/go/src/github.com/mattermost/mattermost-server
$ gmake build-client
次に、サーバーをビルドする。以下のように実行する。
$ cd ~/go/src/github.com/mattermost/mattermost-server
$ gmake build-netbsd
最後に、配布用アーカイブファイルを作成する。
$ cd ~/go/src/github.com/mattermost/mattermost-server
$ gmake package
まとめ
ここまでで、Mattermostのウェブアプリケーションとサーバーを含んだ
mattermost-team-netbsd-amd64.tar.gz
ファイルが、
~/go/src/github.com/mattermost/mattermost-server/dist
ディレクトリーに生成される。
次回は、このmattermost-team-netbsd-amd64.tar.gz
ファイルを
使って、日本語のメッセージ検索が可能な環境を構築する。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。