以前、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/[email protected] requires
github.com/pmezard/[email protected]: 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版が必要なければ、公式サイトからバイナリを持ってきた方が楽です