LoginSignup
3
4

More than 5 years have passed since last update.

Go でクロスコンパイル(darwin => linux)

Last updated at Posted at 2016-08-02

動機

  1. Go で Slackbot を作った
  2. デプロイ先の bot サーバが Linux だった
  3. Ops の方々の手を煩わせたくない(bot サーバに Go の開発環境をセットアップしなくて済むようにしたい)
  4. OS X で Linux バイナリをビルドすることにした

参考

準備

$ 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 ちょっとした確認に便利
3
4
0

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
3
4