Skip to main content

build-guide

工作流介绍

肥猫(项目主负责人)会不断的将 x86-64 源里的软件包脚本在 RISC-V 上进行编译。 成功的将会直接加入 RISC-V 的源里,失败的会把日志文件放在 https://archriscv.felixc.at/.status/status.htm 里并对这个包标记上 FTBFS 标志。 FTBFS 是 "Fail To Build From Source" 的缩写。我们的任务就是尝试修复这些包。

日常你不需要在上面那个网页搜,我们还有一个工会页记录了包的状态:

https://plct-archrv.ax64.workers.dev/

其中,左边是包的名字,点击包的名字可以直接跳转到上一次包构建的日志。 你需要注意看右边的 mark 标记,上面会记录着每一个包当前的状态。 你可以把鼠标移动到标记上来查看详细信息。

领取包

找到一个想修的包,查看第三排的状态,看看是不是已经有人正在修,或者已经修好了。 如果是一个没人处理的包,你可以到群里用 /add 命令来获取这个包的锁,让同事 知道你已经在处理这个包了。比如你现在想修 rust,那么发送 /add rust 即可。

如果你是普通路人,那么只需要去仓库看看有没有冲突 pr 即可。

修包

  1. 下载构建脚本文件
asp checkout rust
  1. 修改架构

上一步的命令会将上游的构建脚本 clone 到当前文件夹。 你需要进入包目录下的 trunk 目录,修改 PKGBUILD 的构建架构。

cd rust/trunk
setconf PKGBUILD arch "('x86_64' 'riscv64')"

这一步可以允许我们在 riscv64 架构下运行这个编译脚本。

  1. 创建缓存文件夹

我们还需要构建一个文件夹作为包的缓存。在编译过程中,pacman 会下载脚本 需要的依赖包,如果缓存文件夹复用,不干净就会导致构建时依赖安装失败等问题。

# 你可以直接创建一个固定的文件夹
mkdir ~/.cache/pkgcache

# 也可以随便创建一个临时文件夹
mktemp -d -t "pkgcache_XXX"
  1. 开始构建

安装好 archlinuxcn 源里的 devtools 之后,我们会有 RISC-V 专用的 extra-riscv64-build 工具来帮助我们构建。

export CACHE_DIR="YOUR CACHE DIRECTORY"
extra-riscv64-build -- -d "$CACHE_DIR:/var/cache/pacman/pkg"

这里的 -d 函数会把 $CACHE_DIR/var/cache/pacman/pkg 的路径映射参数 传到下一层的 makechrootpkg 程序。在 chroot 里下载的软件包可以在 $CACHE_DIR 里找到。

Q&A

  • 我有一些额外资讯,如何附带在包的标签上呢?

在命令 /mark package status status 之后的所有字符都会当作附录加入标签里。 比如你想说 neovim 包因为上游的一个改动导致编译失败了,可以这样用机器人:

/mark package upstreamed Fail to build because https://github.com/xxxxxxx
^
从这里开始的所有文字都会被记录
  • 有的包有 FTBFS 状态,但是却能在本地成功构建

可能最近包修好了没有 rebuild,使用机器人命令 /mark PACKAGE ready 让肥猫知道, 等肥猫重新编译。

  • 修复了几次也修不好,或者包特别难修,比如很多 x86 的汇编,想转让给别人来修:
/mark PKGNAME stuck
/drop PKGNAME
  • 释放一个包裹

/drop PKGNAME

  • 撤销标记

/unmark PKGNAME STATUS

  • 什么时候标记 QEMU?

只有比如说测试跑不过,或者 qemu 神奇 bug 导致的,才标 #noqemu。

注意,如果只有 QEMU 里才会出错,开发板没有问题的话,不要修,直接标 qemu。

  • 什么时候标记 outdated_dep?

依赖(包)过期了,需要在repo里滚/上游滚。

注意:现在机器人会自动检查依赖并自动 unmark outdated 了,你需要用特殊的语法来标记依赖:

/mark xxx outdated_dep [aaa]

当 aaa 更新的时候,xxx 这个包就会被自动解除依赖过期标记,同时你也会被通知。

  • 标了 failing 的包是什么意思

标记 failing 的包都是最近一次构建失败的,同时机器人会标记上 failing 的时间。 你可以把鼠标移动到 failing 的文字上来查看额外讯息。

  • 可用的 mark 包括

unknown, upstreamed, outdated, outdated_dep, stuck, noqemu, ready, pending

工会页的可用查询参数

工会页支持 URL 查询参数,可用的参数有

  • name: 包名,user: 用户名,
  • work: 目前工作状态 (merged, working, pull requested),
  • mark: 包的标记 (和 bot 的标记一样),
  • mkby: 打标记的人名 (可以用来追踪 outdated),
  • sort: 可以 sort=name, sort=user, sort=mark, sort=work...。也可以组合使用
  • expandAllComments: 展开所有的标记

比如你要查询谁打过标记:

https://plct-archrv.ax64.workers.dev/?mkby=*-x64,%E7%93%9C

比如你想让工会页以工作状态排序:

https://plct-archrv.ax64.workers.dev/?sort=work

Leaf package, port it!

在肥猫的包状态页里,有些包被标记了 leaf 状态。

这些是尚未来得及构建的包,如果没什么好修的包,你可以处理一下他们。

如果构建失败,那么就把这个包当作 FTBFS 来修,如果构建成功,标记一个 ready 通知肥猫即可。

rotten

rotten 代表原来这个包的 patch 打不上了。这通常是因为 Arch Linux 的上游 PKGBUILD 更新了导致 patch 对不上位置。这样的包有很多,而且通常很简单,请尽量修复。

黑名单

有一些包完全没有在 RISC-V 上打的必要,比如 intel 系列,闭源 binary 包等等。 所以在尝试打包前,先确认这个包在 RISC-V 上是否有打的必要。 如果没有,用 bot 给这些包打上 ignore 标签。

目前的黑名单

Loading Blacklist...