Go開発環境/ビルド環境としてAmazon Linuxをセットアップする手順

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

Amazon Linux上でGo製のツールを使うためのセットアップをする機会がありましたので、手順をまとめておきます。

ちなみにそのツールとは、都元さん作成のaurlです。そのため、この記事は、Amazon Linux上でのaurlのインストール手順でもあります。

追記: 数名の方から「Go製ツールを使うには、バイナリファイルを1個置くだけでOKです」というコメントをいただきました。当初「Amazon LinuxでGo製ツールを使う手順」という記事タイトルにしていましたが、「Go開発環境/ビルド環境としてAmazon Linuxをセットアップする手順」のほうが適切でしたので、訂正します。ご指摘ありがとうございます!

環境

  • AMI: amzn-ami-hvm-2015.03.0.x86_64-gp2 (ami-cbf90ecb)
  • カーネル: 3.14.48-33.39.amzn1.x86_64

手順

1. golangのインストール

なにはともあれGoをインストールします。

$ sudo yum install golang
[...]
=========================================================================================
 Package                       Arch      Version                   Repository       Size
=========================================================================================
Installing:
 golang                        x86_64    1.4.2-2.12.amzn1          amzn-updates    3.3 M
Installing for dependencies:
 apr                           x86_64    1.5.0-2.11.amzn1          amzn-main       115 k
 apr-util                      x86_64    1.4.1-4.17.amzn1          amzn-main        87 k
 bzr-python27                  x86_64    2.1.2-2.13.amzn1          amzn-main       5.9 M
 cpp48                         x86_64    4.8.2-16.2.99.amzn1       amzn-main       6.4 M
 gcc48                         x86_64    4.8.2-16.2.99.amzn1       amzn-main        16 M
 git                           x86_64    2.1.0-1.38.amzn1          amzn-main       9.2 M
 glibc-devel                   x86_64    2.17-55.143.amzn1         amzn-updates    1.1 M
 glibc-headers                 x86_64    2.17-55.143.amzn1         amzn-updates    723 k
 golang-pkg-bin-linux-amd64    x86_64    1.4.2-2.12.amzn1          amzn-updates     18 M
 golang-pkg-linux-amd64        noarch    1.4.2-2.12.amzn1          amzn-updates    9.5 M
 golang-src                    noarch    1.4.2-2.12.amzn1          amzn-updates    6.8 M
 kernel-headers                x86_64    3.14.48-33.39.amzn1       amzn-updates    964 k
 libgomp                       x86_64    4.8.2-16.2.99.amzn1       amzn-main       167 k
 libmpc                        x86_64    0.8.2-1.4.amzn1           amzn-main        49 k
 libserf                       x86_64    1.3.7-1.7.amzn1           amzn-main        64 k
 mercurial-common              x86_64    2.6.3-1.25.amzn1          amzn-main       1.4 M
 mercurial-python27            x86_64    2.6.3-1.25.amzn1          amzn-main       2.3 M
 mpfr                          x86_64    2.4.2-1.7.amzn1           amzn-main       182 k
 perl-Error                    noarch    1:0.17020-2.9.amzn1       amzn-main        33 k
 perl-Git                      noarch    2.1.0-1.38.amzn1          amzn-main        57 k
 perl-TermReadKey              x86_64    2.30-20.9.amzn1           amzn-main        33 k
 subversion                    x86_64    1.8.11-1.50.amzn1         amzn-updates    1.6 M
 subversion-libs               x86_64    1.8.11-1.50.amzn1         amzn-updates    1.1 M

Transaction Summary
=========================================================================================
Install  1 Package (+23 Dependent packages)
[...]

2. GOPATHの設定

環境変数にGOPATHを設定します。これは、ビルドをするための場所の指定なので、任意の場所で構いません。

今回は、ログインユーザec2-userのホームディレクトリのgoディレクトリを指定しました。設定時点では、ディレクトリが実際に存在していなくても大丈夫です。

また、設定は、次のように.bashrcに記述しました。

[...]
export GOPATH=$HOME/go

すぐに反映するため、設定ファイルを読み込みます。設定結果を確認しておきましょう。

$ source ~/.bashrc
$ echo $GOPATH
/home/ec2-user/go

3. goxのインストール

今回使用するツール(aurl)は、コンパイルにgoxを使うので、インストールします。 マルチプラットフォームで動かすバイナリが欲しいのでなければ、かならずしもインストールしなくてもよいようです。

まず、go getコマンドで、goxをチェックアウトします。

$ go get github.com/mitchellh/gox

ステップ2で設定した$GOPATHディレクトリが存在しなければ、この時に作成されます。$GOPATHの下に、bin、pkg、srcディレクトリが作成されます。goxのソースコードは$GOPATH/src/に、バイナリファイルは$GOPATH/bin/に配置されます。

次に、goxのツールチェーンをビルドしておきます。

$ cd $GOPATH/bin
$ sudo ./gox -build-toolchain
--> Toolchain: darwin/386
--> Toolchain: darwin/amd64
--> Toolchain: linux/386
--> Toolchain: linux/amd64
--> Toolchain: linux/arm
--> Toolchain: freebsd/386
--> Toolchain: freebsd/amd64
--> Toolchain: openbsd/386
--> Toolchain: openbsd/amd64
--> Toolchain: windows/386
--> Toolchain: windows/amd64
--> Toolchain: freebsd/arm
--> Toolchain: netbsd/386
--> Toolchain: netbsd/amd64
--> Toolchain: netbsd/arm

最後に、今後goxを使いやすいように、シンボリックリンクを作成します。$GOPATH/bin自体をPATHに追加しても同じように呼び出せるようになりますが、$GOPATHはあくまでもビルドする場所なので、こちらのほうがよいのではないかと思います。

今回は、/usr/local/binに追加しました。

$ sudo ln -s /home/ec2-user/go/bin/gox /usr/local/bin/gox
$ which gox
/usr/local/bin/gox

Go製ツールを使うための汎用的な準備は、ここまでです。

4. aurlのインストール

ここからは、今回使うツールaurlに特化した手順です。が、Githubからチェックアウトしてgoxでコンパイルして使うGo製ツールのセットアップでは、同じ手順が適用できるかと思います。

リポジトリからaurlをチェックアウトします。

$ go get -d github.com/classmethod-aws/aurl

ステップ2で設定した$GOPATH/srcディレクトリの下に、aurlのソースコードが展開されます。

ステップ5. aurlのコンパイル

aurlのscriptsディレクトリにcompile.shがあるので、実行します。このスクリプトは内部でgoxを呼んでいるので、実行するとステップ3でインストールしたgoxが使用されます。

$ sh $GOPATH/src/github.com/classmethod-aws/aurl/scripts/compile.sh
Number of parallel builds: 1

-->      darwin/386: github.com/classmethod-aws/aurl
-->    darwin/amd64: github.com/classmethod-aws/aurl
-->       linux/386: github.com/classmethod-aws/aurl
-->     linux/amd64: github.com/classmethod-aws/aurl
-->       linux/arm: github.com/classmethod-aws/aurl
-->     freebsd/386: github.com/classmethod-aws/aurl
-->   freebsd/amd64: github.com/classmethod-aws/aurl
-->     openbsd/386: github.com/classmethod-aws/aurl
-->   openbsd/amd64: github.com/classmethod-aws/aurl
-->     windows/386: github.com/classmethod-aws/aurl
-->   windows/amd64: github.com/classmethod-aws/aurl
-->     freebsd/arm: github.com/classmethod-aws/aurl
-->      netbsd/386: github.com/classmethod-aws/aurl
-->    netbsd/amd64: github.com/classmethod-aws/aurl
-->      netbsd/arm: github.com/classmethod-aws/aurl

aurlのソースコードのルートディレクトリに作成されたpkgディレクトリの下に、プラットフォームごとのバイナリがごっそりと作成されました。

$ ls $GOPATH/src/github.com/classmethod-aws/aurl/pkg/
darwin_386    freebsd_amd64  linux_amd64  netbsd_amd64  openbsd_amd64
darwin_amd64  freebsd_arm    linux_arm    netbsd_arm    windows_386
freebsd_386   linux_386      netbsd_386   openbsd_386   windows_amd64

Amazon Linuxで使用するのは、linux_amd64用のバイナリだけです。今回は説明を省略しますが、goxの引数によって、特定プラットフォーム用のバイナリだけを出力するようにできます。

$ ls -la /home/ec2-user/go/src/github.com/classmethod-aws/aurl/pkg/linux_amd64/
total 7848
drwxrwxr-x  2 ec2-user ec2-user    4096 Jul 27 14:22 .
drwxrwxr-x 17 ec2-user ec2-user    4096 Jul 27 14:22 ..
-rwxr-xr-x  1 ec2-user ec2-user 8028080 Jul 27 14:22 aurl

コンパイルされたaurlは深い階層にあるので、これもシンボリックリンクを作成しておくと、後々便利でしょう。

$ sudo ln -s /home/ec2-user/go/src/github.com/classmethod-aws/aurl/pkg/linux_amd64/aurl /usr/local/bin/aurl
$ which aurl
/usr/local/bin/aurl

以上で、自作のシェルスクリプトやRubyスクリプトからaurlを呼び出せるようになりました。

上記の手順で問題なく動作することを確認しましたが、Goの作法的にもっとこうしたほうがいいよ、といった点がありましたら、お教えいただけるとうれしいです。

それでは、また。