【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Ubuntu】【Hugo】搭建私人博客:Page Bundle
分析了 Hugo 中 public/ 目录下的内容,并进一步分析了 Hugo Page Bundle 机制,下面继续
搭建私人博客
之前 blog 【Ubuntu】【Hugo】搭建私人博客:Hugo&PaperMod 兼容问题 提到了 Hugo 和 PaperMod 的兼容性问题,当时提供的解决方案是给 PaperMod 降级,现在来看另一种方案,给 Hugo 升级,只有不断地更新版本,才能享受到开源社区提供的最新功能
在终端输入
bash
git clone https://github.com/gohugoio/hugo.git
可以克隆源仓库的 Hugo,如果访问速度慢的话,博主在 Gitee 上传了一份刚克隆的(2025.12 月份,后面有必要会经常更新)

将上面的命令调整为
bash
git clone https://gitee.com/hitweston/hugo.git
OK,clone 成功后,在终端输入
bash
git tag --sort=-creatordate | head -n 5
可以查看到 Hugo 版本已经更新到 v0.153.2

如果用 Ubuntu 仓库的话,当前只到 v0.123.7 版本,还是 7月份的构建的,Ubuntu 仓库官方更新的慢

OK,接着在终端输入
bash
CGO_ENABLED=1 go install -tags extended
开始从源码构建安装 Hugo Extended 扩展版本,下面说下这条命令各部分的含义
CGO_ENABLED=1:这里CGO_ENABLED是一个环境变量,用于控制 Go 是否启用 CGO ,启用 CGO 时,将允许 Go 代码调用 C 语言库,而禁用 CGO 则是纯 Go 编译,之前 blog 【Ubuntu】【Hugo】搭建私人博客:新建站点 说了,Hugo 的扩展功能需要依赖 C 语言库,比如 SCSS/Sass 编译,WebP 图像处理等,如果不启用 CGO,这些功能就会被禁用go install:Go 工具链命令,用于编译当前项目,并安装可执行文件,这个可执行文件会被复制输出到$GOPATH/bin,一般是~/go/bin/,注意,go install不同于go build,go build只在当前目录生成可执行文件,而go install编译后会安装到全局 bin 目录,方便全局使用-tags extended:传递 build tags 构建标签给 Go 编译器,Go 支持通过//go:build extended注释控制哪些代码参与编译,在 Hugo 源码中,扩展功能被包裹在extended标签下,只有指定-tags extended时,这些代码才会被编译进去

安装完成后,终端输入
bash
~/go/bin/hugo version
可以查看到 Hugo 版本已更新成最新版本 v0.154.0
但如果在终端输入
bash
hugo version
可以看到 Hugo 版本还是旧的

这是因为 Go 的安装路径没有添加到 PATH 环境变量的原因,在终端输入
bash
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
可以把 ~/go/bin 加到 PATH 最前面,因为 Shell 会依据 PATH 从左到右查找命令,放在最前就能优先使用,此时在终端再输入
bash
hugo version
就可以看到最新的 Hugo 版本了

另外,构建 Hugo 需要依赖大量的 Github 仓库的东西

如果访问 Github 速度太慢的话,可以到博主 Gitee https://gitee.com/hitweston/hugo 上下载构建好的 v0.154.0 版本

总而言之,本地构建是开发者能够拿到功能最全 Hugo 的标准方式,编译一次,就可以长期使用,还能随时 git pull 和 go install 升级到最新版,而且因为 ~/go/bin 在 PATH 最前面,go install 安装后就能用到最新版本!
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】搭建私人博客:Detached HEAD