给龙芯久久派交叉编译 Cloudreve

教程

前言

龙芯有新世界和旧世界之分,两个世界的软件不通用,更多细节请参考这篇文章。本文编译的 Cloudreve 仅适用于龙芯新世界。截至本文撰写时,适配久久派的新世界系统仅有 Buildroot。

提示

如果你只是想要一个编译好的可执行文件,可直接前往此处下载。

本文编译所用系统为 Ubuntu 22.04 LTS amd64,其他系统大同小异。以下为详细步骤。

安装 Golang 环境

下载 Golang 压缩包

wget https://golang.google.cn/dl/go1.23.3.linux-amd64.tar.gz

解压

sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz

添加到环境变量(全局)

sudo echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile

使环境变量生效

source /etc/profile

安装 Node.js 环境

如果你使用自己的电脑或国内服务器进行编译,建议配置 Node.js 镜像进行加速。

export NODE_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/

然后安装 Node.js。

curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | sudo bash -s install lts

配置 npm 镜像(可选)

npm config set registry https://registry.npmmirror.com

安装 yarn

sudo npm install -g yarn

配置 yarn 镜像(可选)

yarn config set registry https://registry.npmmirror.com

下载 Cloudreve 源码

安装 gitzip,如果已安装请跳过

sudo apt update
sudo apt install -y git zip

克隆 Cloudreve 仓库到本地,同时拉取子模块

git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git

进入仓库目录,并切换到目前最新的 3.8.3 版本分支

cd Cloudreve
git checkout 3.8.3

编译 Cloudreve

如果你使用自己的电脑或国内服务器进行编译,建议配置 Go 模块代理进行加速。

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

安装 GoReleaser

go install github.com/goreleaser/goreleaser@latest

修改 .goreleaser.yaml,删除 goos 中的 windowsdarwin,以及 goarch 中的所有架构,并添加 loong64 架构。为减少构建出二进制文件的体积,可在 ldflags 的参数最后加上 -s -w(去除符号表信息和调试信息)。

修改后的结果如下:

此处省略...

ldflags:
- -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion={{.Tag}}' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit={{.ShortCommit}}' -s -w

goos:
- linux

goarch:
- loong64

此处省略...

由于依赖版本过低,直接编译会报错。需要先更新两个模块。

go get modernc.org/libc@v1.61.0
go get modernc.org/sqlite@v1.33.1

然后即可编译

~/go/bin/goreleaser build --clean --snapshot

编译出的可执行文件在 dist/Cloudreve_linux_loong64/ 中。

本文作者:Tony

本文链接: https://blog.iamsjy.com/2024/11/09/cross-compile-cloudeve-for-loongson-2k0300/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

评论