Go を 普通に Ubuntu にインストールする

先日は windows で Go を試してみましたが、ここでは普通にUbuntuにインストールしてみます。

Go コンパイラ

Goコンパイラには 6g や 8g のような gc Goコンパイラと、gcc をバックエンドにした gccgo コンパイラがあります。gccgo では最適化が十分に行えるものの、ガベージコレクションが未実装となっていたりコンパイラ自体のコンパイルが面倒だったりします。ここでは gc Go コンパイラUbuntu 9.10 にインストールする手順について見ていきます。

環境変数の設定

最初に環境変数を設定しておきます。以下のコマンドにて .bashrc に環境変数の定義を追加します。

$ echo '' >> ~/.bashrc
$ echo '# for Go lang environment' >> ~/.bashrc
$ echo 'export GOROOT=$HOME/go' >> ~/.bashrc
$ echo 'export GOOS=linux' >> ~/.bashrc
$ echo 'export GOARCH=386' >> ~/.bashrc
$ echo 'export GOBIN=$HOME/bin' >> ~/.bashrc
$ source ~/.bashrc

環境変数の設定を以下のコマンドで確認します。

$ env | grep ^GO
GOBIN=/home/naotsugu/bin
GOARCH=386
GOROOT=/home/XXXX/go
GOOS=linux

ソースファイルの取得

リポジトリからGoのソースを取得します。リポジトリMercurial なのでインストールしておきます。hgコマンドがあればこの作業は不要です。

sudo apt-get install mercurial

以下のコマンドを入力してhgコマンドを確認しておきます。

$ hg --version


ではリポジトリからソースを取得します。$GOROOTディレクトリが空の状態で以下のコマンドを実行します。

$ sudo hg clone -r release https://go.googlecode.com/hg/ $GOROOT

Go ツールのビルド

Go ツールのコンパイルには bison, gcc, libc6-dev, ed が必要です。Ubuntu 9.10 では bison 以外はインストールされているはずです。以下のコマンドでbisonをインストールします。

$ sudo apt-get install bison

インストール後以下のコマンドで確認しときます。

$ dpkg -s bison


ビルド後の出力ディレクトリ$GOBINの実体を作成しておきます。また、このディレクトリにパスを設定しておきます。ビルドには5分程度かかります。

$ mkdir $HOME/bin
$ export PATH=$PATH:$GOBIN
$ cd $GOROOT/src
$ ./all.bash

$GOBIN を /usr/local/bin などとした場合、sudo ./all.bash とする必要があるが、この場合 root の環境変数として前述の $GOROOT などを設定する必要があります。ビルドを実行するユーザの権限のあるディレクトリを指定しておいて、後で /usr/local/bin にコピーするのが良いでしょう。

以下のような出力でビルドは終了します。

--- cd ../test
1 known bugs; 0 unexpected bugs

ビルド結果として以下のファイルが作成されました。

$ ls $GOBIN
6cov  6prof  8c  8l   ebnflint  godoc  gomake  gotest  hgpatch
6nm   8a     8g  cgo  godefs    gofmt  gopack  goyacc  quietgcc

コンパイル

ではビルドしてできたツールにてコンパイルをしてみましょう。まずはソースを作成します。

$ cat > hello.go <<EOF
package main
import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}
EOF

コンパイルして実行してみます。

$ 8g hello.go
$ 8l -o hello hello.8 
$ ./hello 
hello, world

大丈夫そうですね。ではコンパイラ達を/usr/local/binにコピーしておきます。

$ sudo cp -p $GOBIN/* /usr/local/bin

以上で完了です。