動機
- Go で Slackbot を作った
- デプロイ先の bot サーバが Linux だった
- Ops の方々の手を煩わせたくない(bot サーバに Go の開発環境をセットアップしなくて済むようにしたい)
- OS X で Linux バイナリをビルドすることにした
参考
- http://qiita.com/Jxck_/items/02185f51162e92759ebe
- http://qiita.com/masahikoofjoyto/items/4ced298989e6ab346f15
- http://onobori.hatenablog.com/entry/2016/02/23/002610
準備
$ cd $(go env GOROOT)
$ cd src
$ GOOS=linux GOARCH=amd64 ./make.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /Users/y-okubo/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
- 参考にした情報源によると、Go は 1.5 からセルフホスティング(Go 自身が Go で作られている)とのことなので、ターゲット向けの環境を作るのに別の実行環境が必要なんだろうと思っている。
- 1.4 との表記は気になるが、面倒なので現状の環境(1.6)を、指定されたディレクトリにコピーした。
実行
OS X 上で Linux(64bit) バイナリを出力
$ GOOS=linux GOARCH=amd64 go build main.go
確認
Docker で確認
$ docker run -v /Users/y-okubo/src:/src -it centos:6.7 /bin/bash
$ cd src
$ ./main
感想
- ちょっと面倒だけど動いて感動した
- サーバ側に実行環境が不要とか Rubyist 的には不思議な感じがする
- Docker ちょっとした確認に便利