Go開発環境/ビルド環境としてAmazon Linuxをセットアップする手順
こんにちは、虎塚です。
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の作法的にもっとこうしたほうがいいよ、といった点がありましたら、お教えいただけるとうれしいです。
それでは、また。