介绍
RISC-V 是精简指令集的一代表之作,由于其开源、精简的特性,一经推出就广受开发者好评。本书主要介绍 Arch Linux 在 RSIC-V 平台上的一些使用教程和开发介绍,感谢实验室的大力支持,也欢迎更多小伙伴一起加入 https://plctlab.org/。
而 Arch Linux RISC-V 项目隶属 PLCT Lab 旗下,是一个旨在 Arch Linux 平台上为 RISC-V 架构进行软件可用性移植的开源项目。通过对源码进行一系列 Patch 和测试,使得其他平台软件能够分发到对应架构上并正常使用。
本文档采用 mdBook 构建,采用 CC BY-SA 4.0 许可,部分引用外部内容则许可同源。
声明:由于作者本人为 ArchRISCV 小队的成员之一,利益相关之处请自行斟酌,如有勘误,还请 issues 区斧正。
项目负责人
- Felix Yan / @felixonmars: 项目主要负责人,下以肥猫代称
项目地址
签名密钥
0xB5971F2C5C10A9A08C60030F786C63F330D7CB92
打包并签名是一种常用的验证分发一致性的方式,如果是正在使用 Arch Linux 的用户,签名密钥已经包含在 archlinux-keyring 中,无需额外导入。
镜像站
- 加拿大 / Canada
- 肥猫 (主站 / Main): https://archriscv.felixc.at/
- 罗马尼亚 / Romania
- 中国 / China
- 中科院软件研究所: https://mirror.iscas.ac.cn/archriscv/
- 南方科技大学: https://mirrors.sustech.edu.cn/archriscv/
- 武昌首义学院 (仅教育网 / CERNET only): https://mirrors.wsyu.edu.cn/archriscv/
打好的软件包通过主站进行分发,而镜像站负责提供软件包缓存,以达到负载均衡、加速下载的效果,使用时可以根据自己的网络情况进行选择。
镜像站的目录结构通常如下表所示:
目录 / Directory | 描述 / Description |
---|---|
/images | rootfs 基本环境 / rootfs stage tarball |
/repo | 二进制包仓库 / binary repository |
移植进程
https://archriscv.felixc.at/.status/status.htm
最新的打包状态可以在上述网站中获取,无论是开发者还是关心移植进度的用户都可以自行查看。为了更好的解读类表内容,常见的软件包状态如下:
状态名 / Name | 描述 / Description |
---|---|
2.6.1-1 -> 2.6.1-2 | 正常版本迭代 / Update |
FTBFS | 无法从源代码直接构建 / Fails To Build From Source |
Dependency '*' not satisfied. | 依赖不满足 |
Leaf package, port it! | 无关联依赖包,可直接移植 |
快速上手
贡献指南
快速上手
简介
同学,你听说过 Arch Linux 吗?
可能你没用过 Arch Linux,但或多或少也听说,甚至体验过过 AUR。用户提交一个构建包的描述文件 —— PKGBUILD,通过 AUR 平台分发这个文件,其他用户就可以在自己的设备上自动构建所需要的包。
Arch RISCV 的打包方式与常规的 Arch 打包方式略有不同,与其说是在打包,不如说是在原有的 PKGBUILD 上打补丁,通过 patch 的方式把这个 PKGBUILD 修改成自己需要的样子。之所以没像 Arch Linux ARM 那样完全独立出去,是因为希望有朝一日能得到 Arch Linux 官方架构支持。
如上图所示是一个 Rust
语言开发的静态博客生成工具 zola
(看不清可以右键新建标签页中打开),右边是原始的 Arch Linux PKGBUILD,而左边是我们为了能在 RISCV 架构上顺利打出这个包所做的一点 “修补”。
可以看到这个补丁移除了原有 PKGBUILD 指定编译到目标架构 $CARCH
的部分内容。 $CARCH
相关内容在 Arch Wiki 中有提及,这里不作赘述。
可以看到这个包很有意思的地方在于直接替换了 ring
这个依赖库的上游。对于一些密码学相关的库,若只是平时使用到不会觉得有太多不同,但对于实际开发和编译来说,会牵扯到很多架构上特有的问题,从打包变到针对架构开发也成了自然而然的事情,这里也感谢肥猫的卓越贡献。
获取 PKGBUILD
Git 或 Web
记得小的时候还用过一个名为世界之窗的浏览器,浏览器作为沟通网络世界的窗户,自然是能够直接获取到 PKGBUILD 原始文件的。
Arch Linux 已经完成了从 SVN 到 Git 的迁移,现在所有官方软件包的构建文件都能在 https://github.com/archlinux/svntogit-community/ 仓库中找到。
但是 Github 提供的搜索功能较为有限,也可以通过 https://archlinux.org/packages/ 页面找到所需要的包,然后右上角 Package Actions > Source Files
转跳到目的链接。
asp
除此之外,Arch 开发者在以前 SVN 的时代为了方便同步构建源代码,还开发了名为 asp
的构建资源管理工具。
$ sudo pacman -S asp
即可快速安装。
获取软件包命令如下:
$ asp checkout <package name>
.
├── repos
│ └── community-x86_64
│ └── PKGBUILD
└── trunk
└── PKGBUILD
可以看到还是保留了 SVN 的目录结构,trunk
即为主线,对应 git 上的 main
或者 master
,repos
内是对应软件源分支,一个软件可能同时存在稳定版和测试版两种软件包状态,那么在这里的 repos
中就会多一个分支,我们在打包时候按需选取即可。
AUR Helper
AUR Helper 从来都不是特指某一个工具,而是某一类能帮你从 AUR 上拉去构建资源文件的工具,并且自动帮你完成构建。比如早期的 yaourt
,现在比较流行的 paru
和 yay
等。很高兴它们都提供了下载官方软件包资源的功能,为我们的使用提供了方便。
$ paru -G <package name>
$ yay -G <package name>
使用更加方便,没有复杂的目录结构,只有单纯的文件,如果需要来自不同软件源的则需要在拉取的时候带上软件源名称,比如 community/zola
。
打上 Patch 🎇
开发和贡献
基础设施
设备列表
设备主要分为 x86_64(qemu)
架构的编译机和 riscv(native)
开发板两种,具体跳板地址和端口可以在群置顶中找到。
添加用户
https://github.com/plctlab/felix-infra
https://github.com/plctlab/riscv-lab-access
编译机上的用户是根据上述两个仓库中的配置文件进行自动创建和部署的。
-
- 首先需要准备好你的
Github
用户名和一个 SSH 公钥 (为 Github 账户添加 SSH Key)。添加好之后访问 https://github.com/axionl.keys 进行验证(这里以我自己的用户名axionl
为例)
- 首先需要准备好你的
-
- 派生
riscv-lab-access
仓库后,将自己的用户名添加到 developers.list,申请合并。注意到如果不是使用Github
首选的SSH Key
的话也可以在后面以#
分隔开,添加自己的密钥地址,记得确保地址能够被访问。
- 派生
-
- 派生
felix-infra
仓库后,将自己想创建的用户名和 Github 名称添加到 userMap.json 上(似乎约定成俗按字母顺序排列)。
- 派生
连接机器
部署好后可以通过 ssh 访问服务器,因为机器较多,通常使用 ssh config 来进行配置管理,一个典型的配置如下:
Host ARCHRV_US
HostName <找群置顶的地址>
Port 22
IdentityFile ~/.ssh/git/axionl
User axionl
由于 ssh 本身具有不稳定性,在访问特别是构建软件包的时候记得使用 tmux
保持一个回话,避免因为网络波动而中断打包流程,同时也记得在使用完成之后手动释放会话,登陆后可见提示如下。
Welcome to a powerful Arch Linux builder with RISC-V support.
This system IS NOT backed up. Please ensure you DO NOT keep valuable data here!
Usage Info
- Use the devtools helpers to build packages.
- Don't forget to set your PACKAGER in ~/.makepkg.conf.
- Chroots are kept in /var/lib/archbuild (~chroots).
Last login: Sun May 15 04:36:34 2022 from <Your IP Address>
[axionl@minun ~]$ tmux