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をインストールすると、ビルドとコンパイルの依存関係を簡単にインストールできます。このパッケージには、Cをコンパイルするためのgcc、C++をコンパイルするためのg++、および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
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ビルドスクリプトを実行すると、GOROOT_BOOTSTRAPという環境変数に基づいてGo1.4が検索されます。 その変数が設定されていない場合(デフォルトでは設定されています)、ビルドスクリプトは、go1.4ディレクトリがホームディレクトリにあると想定します。 Go 1.4を別の場所に移動する場合は、GOROOT_BOOTSTRAP変数を使用できます。 ここでは、/usr/local/go1.4に移動します。
まず、ディレクトリ自体を移動します。
sudo mv go1.4 /usr/local
次に、~/.profileファイルを変更して、環境内のパスを設定する必要があります。
sudo nano ~/.profile
ファイルの最後に、次の行を追加します。
〜/ .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
/usr/localはrootが所有しているため、root権限でgit cloneを実行する必要があります。 クローンを作成している場合ユーザーが書き込み権限を持っているディレクトリに移動すると、sudoなしでこのコマンドを実行できます。
注: Goを/usr/local以外の場所に保存するには、GOROOT環境変数を設定する必要があります。 Go環境変数の詳細については、ステップ7を参照してください。
クローンが正常に完了すると、/usr/localにgoディレクトリが作成されます。 そのディレクトリに移動します。
cd go
ビルドする前に、必要なGoバージョンを選択する必要があります。
ステップ5—Goバージョンの選択
Goソースには、利用可能なバージョンごとに異なるGitブランチがあります。 ブランチの名前は次のとおりです。
master開発中の最新バージョン- 安定版の場合は
goversion
ここでは、Go 1.7.4を使用します。これは、go1.7.4ブランチを使用することを意味します。
警告:開発バージョン(つまり、 Goのmasterブランチ)が本番環境にあります。 テストされておらず、バグがある可能性があります。 開発バージョンはアプリケーションのテストに適していますが、本番環境ではリリースされたバージョンのみを使用します。
ブランチを変更するには、git checkoutコマンドを使用します。 /usr/localと/usr/local/go1.4はrootが所有しているため、これらのコマンドは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.
警告: timeテストが失敗したために、Go1.7でビルドが失敗する場合があります。 これはバグの結果です。
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
これを行った後、スクリプトを再度実行できます。 (Go 1.4.3バイナリを移動した場合は、-Eフラグを忘れないでください。)
cd src sudo bash ./all.bash
Goが構築されたので、いくつかの環境変数を設定する必要があります。
ステップ7—Go変数の設定
環境変数は、Goのインストールをカスタマイズするための強力な方法です。 最も重要で有用なものをウォークスルーします。
Goの使用を開始するには、Goバイナリパス/usr/local/go/binをPATHおよびGOPATH環境変数に追加する必要があります。 GOPATHは、Goアプリケーションコードとバイナリが保存される場所です。これは~/workとして指定しますが、これは自由にカスタマイズできます。
これらの変数を~/.profileファイルに追加します。 お気に入りのテキストエディタで開きます。
nano ~/.profile
ファイルの最後に、次の行を追加します。
〜/ .profile
. . . export GOPATH=$HOME/work export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
Goをデフォルト以外のパスにインストールした場合、つまり /usr/local/go以外の場合は、GOROOT変数を定義する必要があります。 その場合は、次の行も追加します。
〜/ .profile
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.goという名前の「Hello、World」Goファイルを作成します。
nano hello.go
次のコードをファイルに追加します。
hello.go
package main
import "fmt"
func main() {
fmt.Printf("Hello World!\n")
}
この例では、Printf()などのI/O関数を実装するfmtパッケージを使用し、プログラム時に HelloWorldを出力するmain()関数を定義します。実行されます。
保存してファイルを終了し、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
ここで、前と同じようにビルドスクリプトを実行します。手順3でGo 1.4を再配置した場合は、必ず-Eフラグを追加してください。
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.
手順5の~/.profileでGo変数を設定しているので、バージョンを変更するために必要なのはこれだけです。
結論
ソースからビルドしてパスを設定することで、Goアプリケーションを開発およびテストしたり、Goコードベースに貢献したりするための優れたベースが得られます。
詳細については、Goの使用を開始する方法またはGoWebフレームワークであるMartiniを使用してGoアプリケーションを提供する方法を参照してください。 Goオープンソースに貢献するためのインスピレーションを探している場合は、go-qemuおよびgo-libvirtプロジェクトについて読むことができます。