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

投稿者: | ↻ : 2019年12月26日

はじめに

仮想マシン上のCentOS7.6にGolang用の開発環境を構築する方法をまとめます。Golangのバージョンが、1.12になりデフォルト設定や、新しい依存関係管理システムが利用できるようになりパッケージの扱いが楽になったはずだけど、古いライブラリなどが環境変数のGOPATHを参照している場合は、環境変数としてGOPATHを設定する必要があります。

2019.12.26:OSやツールのバージョンが上がったので、新しい環境で検証を行いました。

環境

  • Vagrant 2.2.6
  • Virtualbox 6.0.14
  • CentOS 7.6 (centos/7 virtualbox, 1905.01)

利用したVagrantfile

# vim: set ft=ruby :

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

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

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

手順

ダウンロード

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

(2019/12/26時点の最新は1.13.5なので「go1.13.5.linux-amd64.tar.gz」)

$ curl -O https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  114M  100  114M    0     0  53.1M      0  0:00:02  0:00:02 --:--:-- 53.1M

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

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

$ sudo tar -C /usr/local -xf go1.13.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のバージョンが、だいぶ上がったので直近の環境で再確認しました。

epelリポジトリからインストールできるバージョンは1.13.3で、公式サイトの最新バージョンは1.13.5なので、差はあまり無いけど、公式から実行可能なコンパイル済みのバイナリを含むアーカイブファイルとして配布されているので、敢えてyumを使う必要がない気がします。