CentOS7上でhugoのソースビルドエラー

hugoをソースからビルドした時のエラー対処

以前、CentOS7上のhugoでGCCエラー にて、似たような記事を投稿しましたが、最近になって、ソールからのビルドに失敗したので、対処してみました。
ちなみに、ビルドしようとしているhugoのバージョンは0.82です

環境 

# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

# git version
git version 1.8.3.1

# go version
go version go1.15.5 linux/amd64

hugo ソースビルド 

$ vim from-gh.sh
mkdir $HOME/src
cd $HOME/src
git clone https://github.com/gohugoio/hugo.git
cd hugo
go install --tags extended

$ sh from-gh.sh

エラー 

Cloning into 'hugo'...
remote: Enumerating objects: 50309, done.
remote: Total 50309 (delta 0), reused 0 (delta 0), pack-reused 50309
Receiving objects: 100% (50309/50309), 93.65 MiB | 9.80 MiB/s, done.
Resolving deltas: 100% (34542/34542), done.
go: github.com/sanity-io/litter@v1.5.0 requires
	github.com/pmezard/go-difflib@v0.0.0-20151028094244-d8ed2627bdf0: invalid version: git fetch --unshallow -f origin in /root/go/pkg/mod/cache/vcs/b66720d7c9f6776b1690ab6c7de6bd08fe64d74a3eaff8dbdef6603dac225370: exit status 128:
	fatal: git fetch-pack: expected shallow list

gitのバージョンを最新にしてみたら、今度は下記のエラー

$ git version 
git version 2.30.1
$ go install --tags extended
tpl/internal/go_templates/texttemplate/helper.go:11:2: package io/fs is not in GOROOT (/usr/lib/golang/src/io/fs)

g++のエラーも出た

 go build github.com/bep/golibsass/internal/libsass: g++: exec: "g++": executable file not found in $PATH

g++は、yum install -y gcc-c++で解決

解決方法 (fix) 

goのバージョンを最新にすることで、ビルドする事が確認できました

ちなみに、go 1.15までは、コマンドを実行するたびに、必要に応じて、go.modが自動的に更新されていたのが、1.16からは自動更新が行われなくなり、ユーザーが明示的に指定しなければならなくなった。 なので、goコマンドを実行した際にエラーが出る場合があるが、go mod tidyを実行することで、解決及び解決の糸口が見つかる

go manual install 

goの最新版をインストールする前にyumでインストールしたgolangを削除
(インストール先や環境変数を自分で変えられる方は、削除しなくてもパスを通せば併用して使えるかもしれません)

$ sudo yum -y remove golang

$ wget https://golang.org/dl/go1.16.linux-amd64.tar.gz
$ sudo tar zxf go1.16.linux-amd64.tar.gz -C /usr/local/
$ export PATH=$PATH:/usr/local/go/bin
$ go version
go version go1.16 linux/amd64
$ go env|grep GOROOT
GOROOT="/usr/local/go"

再度hugo ビルド 

再び、hugo ソースビルド を行います。

ただし、一度、失敗しているので、$HOME/srcが作成されているかと思いますので、 下記の操作で続行

$ cd $HOME/src/hugo
$ go install --tags extended

これで、エラーが出なければ、$HOME/go/bin/内にhugoが作成されているはずです。
無ければ、ビルドに失敗しているか、GOPATHが違う場所に設定されている可能性があります。

$ cd $HOME/go/bin
$ ./hugo version
hugo v0.82.0-DEV+extended linux/amd64 BuildDate=unknown

私の環境では、このようにhugo最新版のビルドでは、goも最新版に上げる必要がありましたが、これでもエラーが出る場合は、hugoのバージョンを下げてビルドすると成功するかもしれません。

ちなみに、今回はCentOS7上でのhugo extended版を必要としましたが、extended版が必要なければ、公式サイトからバイナリを持ってきた方が楽です


See also