CentOS7.6に最新のGolangをインストールする

投稿者: | ↻ : 2019年5月7日

はじめに

仮想マシン上のCentOS7.6にGolang用の開発環境を構築する方法をまとめます。Golangのバージョンが、1.12になり新しい依存関係管理システムが利用できるようになりパッケージの扱いが楽になったはずだけど、まだ、GOPATHを意識しないわけには行かないようです。

以前、CentOS7.4で確認したことをCentOS7.6で再確認しました。

環境

  • Vagrant 2.2.4
  • Virtualbox 6.0.4
  • CentOS 7.6 (centos/7 virtualbox, 1902.01)

利用したVagrantfile

# vim: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.box_version = "1902.01"

  config.vm.network "private_network", ip:"192.168.200.1"

  config.vm.provider "virtualbox" do |vb|
      vb.memory = 4096  # 4GiB
  end
end

手順

ダウンロード

Golang公式サイトのダウンロードページで最新バージョンを確認してアーカイブをダウンロードする。

(2018/4/2時点の最新は1.12.5なので「go1.12.5.linux-amd64.tar.gz」)

$ curl -L -O https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  122M  100  122M    0     0  37.1M      0  0:00:03  0:00:03 --:--:-- 37.1M

インストールしてパスを通す

ビルド済みのファイルがアーカイブされているので、展開してパスを通す。

$ sudo tar -C /usr/local -xf go1.12.5.linux-amd64.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile

go getで必要になるコマンドをインストール

go getは各リポジトリから直接ファイルを取得するので、それぞれに対応したコマンドが必要なります。

目的のライブラリやコマンドのリポジトリがgithub.comでも依存しているライブラリがgithub.com以外の場合があるので、git、hg、svnあたりを使えるように以下のパッケージをインストールします。

$ sudo yum install -y git mercurial subversion

go getでインストールしたコマンドのためのパスを通す

$ echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bash_profile

環境変数GOPATHを設定する(任意)

「go get」で追加されるコマンドなどがデフォルトのGOPATHではなく、環境変数のGOPATHを参照している場合などに設定する必要があります。

$ echo 'export GOPATH=$(go env GOPATH)' >> ~/.bash_profile

作業ディレクトリを作成する(任意)

下記はgithub.comを利用してソースファイルを管理する例です。
[username]には自分のgithub上のusernameを、[repository name]には作成するリポジトリの名前を設定します。

新しい依存関係管理システム[Go Modules](https://blog.golang.org/using-go-modules)のおかげで「$GOPATH」以外の場所が指定できるようになりました。自作のパッケージを作成するなら後から変更するより「$GOPATH」以下へ作成した方がよさそうです。

# 最初の一回だけ必要
$ mkdir -p `go env GOPATH`/{src,bin,pkg}

# 新しく作成するたびに必要
$ mkdir -p `go env GOPATH`/[username]/[repository name]

備考

環境変数GOROOTについて

実行ファイルに埋め込まれた、GOROOTの場所以外にインストールした場合に設定が必要となる。
(Golangでの標準は「/usr/local」だけど提供パッケージにより異なる)

今回ダウンロードしたアーカイブの場合は、標準通りなので環境変数GOROOTは設定しません。

# 埋め込み値の確認
$ go env | grep GOROOT
GOROOT="/usr/local/go"

環境変数GOPATHについて

環境変数GOROOTのように実行ファイルに埋め込まれている値があり、環境変数GOPATHを設定せずにgo getを行うとデフォルトの「$HOME/go」以下にパッケージやgo製のコマンドがインストールされます。

# 埋め込み値の確認(Vagrantで作成した仮想マシンでの結果)
$ go env | grep GOPATH
GOPATH="/home/vagrant/go"

まとめ

以前調べた時よりCentOSとGolangのバージョンが、だいぶ上がったので直近の環境で再確認しました。またもやyumでインストールできるパッケージが古かった(version 1.11.5)ので、公式サイトから最新バージョンを取得することにしました。もう、公式から実行可能なコンパイル済みのバイナリを含むアーカイブファイルとして配布されているので、敢えてyumを使う必要がない気がします。