forgejo-federation/docs/content/doc/installation/from-source.zh-cn.md
editfund-founder 139704f499
Update from-source.zh-cn.md & from-source.en-us.md - Cross Compile Using Zig (#25194)
## Compile & Cross Compile Gitea With CGO Dependencies Using Zig

---------

Co-authored-by: Jason Song <i@wolfogre.com>
2023-06-13 10:53:51 +08:00

4.6 KiB
Raw Blame History

date title slug weight toc draft aliases menu
2016-12-01T16:00:00+02:00 使用源代码安装 install-from-source 30 false false
/zh-cn/install-from-source
sidebar
parent name weight identifier
installation 使用源代码安装 30 install-from-source

使用源代码安装

首先你需要安装Golang关于Golang的安装参见官方文档

其次你需要安装Node.jsNode.js 和 npm 将用于构建 Gitea 前端。

目录

{{< toc >}}

下载

你需要获取Gitea的源码最方便的方式是使用 git 命令。执行以下命令:

git clone https://github.com/go-gitea/gitea
cd gitea

然后你可以选择编译和安装的版本,当前你有多个选择。如果你想编译 main 版本,你可以直接跳到 编译 部分,这是我们的开发分支,虽然也很稳定但不建议您在正式产品中使用。

如果你想编译最新稳定分支,你可以执行以下命令签出源码:

git branch -a
git checkout v{{< version >}}

最后,你也可以直接使用标签版本如 v{{< version >}}。你可以执行以下命令列出可用的版本并选择某个版本签出:

git tag -l
git checkout v{{< version >}}

编译

要从源代码进行编译,以下依赖程序必须事先安装好:

  • go {{< min-go-version >}} 或以上版本, 详见这里
  • node {{< min-node-version >}} 或以上版本,并且安装 npm, 详见这里
  • make, 详见这里

各种可用的 make 任务 可以用来使编译过程更方便。

按照您的编译需求,以下 tags 可以使用:

  • bindata: 这个编译选项将会把运行Gitea所需的所有外部资源都打包到可执行文件中这样部署将非常简单因为除了可执行程序将不再需要任何其他文件。
  • sqlite sqlite_unlock_notify: 这个编译选项将启用SQLite3数据库的支持建议只在少数人使用时使用这个模式。
  • pam: 这个编译选项将会启用 PAM (Linux Pluggable Authentication Modules) 认证,如果你使用这一认证模式的话需要开启这个选项。

使用 bindata 可以打包资源文件到二进制可以使开发和测试更容易,你可以根据自己的需求决定是否打包资源文件。 要包含资源文件,请使用 bindata tag

TAGS="bindata" make build

默认的发布版本中的编译选项是: TAGS="bindata sqlite sqlite_unlock_notify"。以下为推荐的编译方式:

TAGS="bindata sqlite sqlite_unlock_notify" make build

测试

在执行了以上步骤之后,你将会获得 gitea 的二进制文件,在你复制到部署的机器之前可以先测试一下。在命令行执行完后,你可以 Ctrl + C 关掉程序。

./gitea web

交叉编译

Go 编译器支持交叉编译到不同的目标架构。有关 Go 支持的目标架构列表,请参见 Optional environment variables

交叉构建适用于 Linux ARM64 的 Gitea

GOOS=linux GOARCH=arm64 make build

交叉构建适用于 Linux ARM64 的 Gitea并且带上 Gitea 发行版采用的编译选项:

CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sqlite_unlock_notify" make build

使用Linux与Zig编译或交叉编译

按照Getting Started of Zig来安装zig。

  • 编译(Linux ➝ Linux)
CC="zig cc -target x86_64-linux-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
CGO_LDFLAGS="-linkmode=external -v"
GOOS=linux \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
  • 交叉编译(Linux ➝ Windows)
CC="zig cc -target x86_64-windows-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
GOOS=windows \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build

使用Windows与Zig编译或交叉编译

使用GIT BASH编译。

  • 编译(Windows ➝ Windows)
CC="zig cc -target x86_64-windows-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
GOOS=windows \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build
  • 交叉编译(Windows ➝ Linux)
CC="zig cc -target x86_64-linux-gnu" \
CGO_ENABLED=1 \
CGO_CFLAGS="-O2 -g -pthread" \
CGO_LDFLAGS="-linkmode=external -v"
GOOS=linux \
GOARCH=amd64 \
TAGS="bindata sqlite sqlite_unlock_notify" \
make build