Ubuntu16.04でソースからGoをビルドする方法
序章
Go は、Googleが開発した最新のオープンソースプログラミング言語です。 シンプルで堅牢なライブラリとツールのセットを備えているため、信頼性が高く効率的なアプリケーションを簡単に構築できます。
Goアプリケーションを最新バージョンの言語に対してテストしたり、Goコードベースに貢献したり、Goバージョン管理を改善したりする場合は、ソースからGoをビルドする必要があります。 このチュートリアルでは、Goを構築する方法、いくつかの実用的な考慮事項をカバーする方法、および「Hello、World」テストアプリケーションを構築する方法を示します。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
Ubuntu 16.04チュートリアルを使用した初期サーバーセットアップ(sudo非rootユーザーとファイアウォールを含む)に従ってセットアップされた、少なくとも1GBのメモリを備えた1つのUbuntu16.04サーバー。
-
サーバーにインストールされたGit。Ubuntu16.04用のこのGitインストールチュートリアルに従ってセットアップできます。
-
オプションで、GitHubアカウント。
ステップ1—ビルドの依存関係をインストールする
開始する前に、リポジトリキャッシュが最新であることを確認してください。
- sudo apt-get update
デフォルトでは、Ubuntuには、コンパイラ、ライブラリ、ツールなど、Goのビルドに必要なすべてのパッケージが付属しているわけではありません。 インストールすることで、ビルドとコンパイルの依存関係を簡単にインストールできます build-essential
、を含むパッケージ gcc
Cをコンパイルするため、 g++
C++および make
、ビルド自動化ツール。
- sudo apt-get install build-essential
インストールが完了すると、Goをソースからビルドするために必要なすべてのツールが手に入ります。 次に、Go1.4バイナリが必要になります。
ステップ2—Go1.4.3のインストール
Go 1.5+をビルドするには、Go1.4が必要です。 これは、Go1.5以降のツールチェーンがGo自体で記述されているためです。 Go 1.4または任意のポイントリリース(1.4.1、1.4.2、または1.4.3)を使用できます。 このチュートリアルでは、Go1.4.3を使用します。
SHA1チェックサムを使用したGoバイナリは、Goのダウンロードページにあります。 と呼ばれるファイルをダウンロードします go1.4.3.linux-amd64.tar.gz
ホームディレクトリに移動します。
- cd ~
- curl -O https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz
このファイルは本物のソースからダウンロードされましたが、ダウンロードしたものの整合性を検証することは、依然として優れたセキュリティ慣行です。 これは、ダウンロードページで提供されるファイルハッシュとダウンロードされたファイルのハッシュを比較することで最も簡単に実行できます。
まず、ダウンロードしたファイルのハッシュを取得します。
- sha1sum go1.4.3.linux-amd64.tar.gz
このコマンドの出力を、Goダウンロードページで提供されているチェックサムと比較します。
- Output332b64236d30a8805fc8dd8b3a269915b4c507fe go1.4.3.linux-amd64.tar.gz
チェックサムが一致する場合は、ファイルを解凍できます。
- tar xvf go1.4.3.linux-amd64.tar.gz
The x
フラグはeX tractの略で、 v
言う tar
V erbose出力を使用するには(つまり 抽出されるファイルを一覧表示する)、および f
Filenameを指定しましょう。
Go 1.4は、というディレクトリに解凍されました。 go
、ただし、GoビルドスクリプトはでGo1.4バイナリを検索します ~/go1.4
デフォルトでは。 を使用してディレクトリの名前を変更します mv
指図。
- mv go go1.4
これで、ソースからGoをビルドするために必要な依存関係ができました。 Go 1.4をホームディレクトリから別の場所に移動する場合は、次の手順に従います。 そうでない場合は、ステップ4に進んでGoソースのクローンを作成できます。
ステップ3— Go 1.4.3の再配置(オプション)
Goビルドスクリプトを実行すると、次の環境変数に基づいてGo1.4が検索されます。 GOROOT_BOOTSTRAP
. その変数が設定されていない場合(デフォルトでは設定されています)、ビルドスクリプトは go1.4
ディレクトリはホームディレクトリにあります。 あなたは使用することができます GOROOT_BOOTSTRAP
Go1.4を別の場所に移動する場合は変数。 ここでは、に移動します /usr/local/go1.4
.
まず、ディレクトリ自体を移動します。
- sudo mv go1.4 /usr/local
次に、を変更して環境内のパスを設定する必要があります ~/.profile
ファイル。
- sudo nano ~/.profile
ファイルの最後に、次の行を追加します。
. . .
export GOROOT_BOOTSTRAP=/usr/local/go1.4
ファイルを保存して終了します。 この変更を有効にするには、プロファイルを更新してください。
- source ~/.profile
次に、Goソースのクローンを作成します。
ステップ4—Goソースを取得する
Goバイナリを保存するための推奨される場所は /usr/local
、これはこのチュートリアルで使用するものです。 ただし、好きな場所に保存できます。
に引っ越す /usr/local
Gitを使用してリポジトリのクローンを作成します。
- cd /usr/local
- sudo git clone https://go.googlesource.com/go
実行する必要があります git clone
ルート権限を持つ /usr/local
rootが所有しています。 クローンを作成している場合ユーザーが書き込み権限を持っているディレクトリに移動すると、sudoなしでこのコマンドを実行できます。
注:Goを以外の場所に保管する /usr/local
設定する必要があります GOROOT
環境変数。 Go環境変数の詳細については、ステップ7を参照してください。
クローンが正常に完了すると、クローンが作成されます go
のディレクトリ /usr/local
. そのディレクトリに移動します。
- cd go
ビルドする前に、必要なGoバージョンを選択する必要があります。
ステップ5—Goバージョンの選択
Goソースには、利用可能なバージョンごとに異なるGitブランチがあります。 ブランチの名前は次のとおりです。
master
開発中の最新バージョンの場合goversion
安定したバージョンの場合
ここでは、Go 1.7.4を使用します。つまり、 go1.7.4
ブランチ。
警告:開発バージョン(つまり、 the master
生産中の囲碁のブランチ)。 テストされておらず、バグがある可能性があります。 開発バージョンはアプリケーションのテストに適していますが、本番環境ではリリースされたバージョンのみを使用します。
ブランチを変更するには、 git checkout
指図。 これらのコマンドはroot権限で実行する必要があります。 /usr/local
と /usr/local/go1.4
rootが所有しています。
- sudo git checkout go1.7.4
この手順が完了すると、お好みのバージョンのGoソースコードがダウンロードされます。 これで、このチュートリアルの重要な部分であるGo自体の構築に進む準備ができました。
ステップ6—ビルドゴー
goをビルドするには、bashスクリプトを実行する必要があります。 src/all.bash
、それはソースコードに付属しています。 スクリプトは、必要な依存関係がすべてあることを確認し、いくつかのテストを実行して、ビルドを完了します。
スクリプトを実行しますが、Go 1.4.3バイナリの場所を変更した場合は、を追加する必要があることに注意してください。 -E
フラグ(すなわち sudo -E bash ./all.bash
)環境変数を保持します。
- cd src
- sudo bash ./all.bash
スクリプトが完了するまでに少し時間がかかります。 ビルドが完了すると、次の出力が表示されます。
Output of src/all.bashALL TESTS PASSED
---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.
警告:場合によっては、Go1.7でビルドが失敗することがあります。 time
テストが失敗しました。 これはバグの結果です。
Failed test output--- FAIL: TestLoadFixed (0.00s)
time_test.go:943: Now().In(loc).Zone() = "-01", -3600, want "GMT+1", -3600
FAIL
FAIL time 2.403s
...
2016/12/09 22:16:40 Failed: exit status 1
この問題の回避策は、バグ修正を手動で適用することです。 これを行うには、新しいブランチを作成し、修正を加えたコミットを選択します。 Gitのチェリーピッキングは、特定のコミットからブランチに変更を適用するプロセスです。
このバグはcommitc5434f2 で修正されたので、新しく作成したブランチに追加してください。
- cd ..
- sudo git checkout -b go1.7.4-timefix
- sudo git cherry-pick c5434f2973a87acff76bac359236e690d632ce95
これを行った後、スクリプトを再度実行できます。 (忘れないでください -E
Go 1.4.3バイナリを移動した場合はフラグを立てます。)
- cd src
- sudo bash ./all.bash
Goが構築されたので、いくつかの環境変数を設定する必要があります。
ステップ7—Go変数の設定
環境変数は、Goのインストールをカスタマイズするための強力な方法です。 最も重要で有用なものをウォークスルーします。
Goの使用を開始するには、Goバイナリパスを追加する必要があります。 /usr/local/go/bin
、へ PATH
と GOPATH
環境変数。 GOPATH
Goアプリケーションコードとバイナリが保存される場所です。これを次のように指定します。 ~/work
、これは自由にカスタマイズできますが。
これらの変数をに追加します ~/.profile
ファイル。 お気に入りのテキストエディタで開きます。
- nano ~/.profile
ファイルの最後に、次の行を追加します。
. . .
export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
Goをデフォルト以外のパスにインストールした場合、つまり それ以外の何か /usr/local/go
、を定義する必要があります GOROOT
変数。 その場合は、次の行も追加します。
export GOROOT=$HOME/go
export GOPATH=$HOME/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
ファイルを保存して終了します。 これらの変更を有効にするには、プロファイルを更新してください。
- source ~/.profile
この手順が正常に完了すると、完全に機能するGoがインストールされます。 次に、すべてが期待どおりに機能していることを確認するためにテストします。
ステップ8—Goインストールのテスト
テストする一般的な方法は、Goが機能していることです。これは、単純な「Hello、World」アプリケーションを作成して実行することです。
これを行うには、まず、に基づいてアプリファイルのディレクトリを作成して移動します GOPATH
. Goパス内で好きなものを選択できますが、ここでの例として、GitHubを使用してコードを管理する場合に必要な階層の種類を設定します。 ただし、この階層はGitHubアカウントがなくても機能します。
- mkdir -p $GOPATH/src/github.com/your_github_username/test_project
- cd $GOPATH/src/github.com/your_github_username/test_project
次に、「Hello、World」Goファイルを作成します。 hello.go
.
- nano hello.go
次のコードをファイルに追加します。
package main
import "fmt"
func main() {
fmt.Printf("Hello World!\n")
}
この例では、 fmt
次のようなI/O機能を実装するパッケージ Printf()
、およびを定義します main()
プログラムの実行時にHelloWorldを出力する関数。
それを保存してファイルを終了し、Goコマンドを使用してコンパイルします install
.
- go install github.com/your_github_username/test_project
コンパイルが終了したら、次のコマンドで実行できます。
- hello
Hello World!が端末に印刷されます。これは、Goのインストールが機能していることを意味します。
ステップ9— Goバージョンの変更(オプション)
このチュートリアルでは、Go1.7.4を設定します。 別のバージョンを使用する場合は、アクティブなGitブランチを変更してGoを再構築する必要があります。
現在のGoバージョンを確認するには、次を使用できます。 go version
.
- go version
Outputgo version go1.7.4 linux/amd64
例として、Goバージョンを1.6.4に切り替えます。 このバージョンはにあります go1.6.4
ブランチなので、それに切り替えます。
- cd /usr/local/go
- sudo git checkout go1.6.4
すべてが最新であることを確認するには、を実行します git pull
選択したブランチの最新の変更を取得します。
- sudo git pull origin go1.6.4
次に、前と同じようにビルドスクリプトを実行し、必ず追加します。 -E
手順3でGo1.4を再配置した場合はフラグを立てます。
- cd src
- sudo bash ./all.bash
これが完了するまでには少し時間がかかります。 ビルドが完了すると、次の出力が表示されます。
Output of src/all.bashALL TESTS PASSED
---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.
すでにGo変数が設定されています ~/.profile
手順5から、バージョンを変更するために必要なのはこれだけです。
結論
ソースからビルドしてパスを設定することで、Goアプリケーションを開発およびテストしたり、Goコードベースに貢献したりするための優れたベースが得られます。
詳細については、Goの使用を開始する方法またはGoWebフレームワークであるMartiniを使用してGoアプリケーションを提供する方法を参照してください。 Goオープンソースに貢献するためのインスピレーションを探している場合は、go-qemuおよびgo-libvirtプロジェクトについて読むことができます。