「共建龙芯 openSUSE Tumbleweed 项目」

目前该项目处于停滞状态,一方面我已经没有龙芯机器,另一方面目前精力和时间都不允许,只有等待将来有朋友有能力再弄了。

各位朋友大家好,我是 Houge Langley,最近一段时间我主要参与测试和构建龙芯 LoongArch 新世界,参与到 Gentoo 下的编译、测试。最近随着龙芯 LoongArch 逐渐被合并到上游,包括内核 5.19 逐渐支持 LoongArch 架构,GCC 12 支持 LoongArch ,后续 LLVM 15 也会更新并支持上,那么整个龙芯 LoongArch 架构的生态也就会完善起来,虽然磕磕碰碰,但逐渐是好起来了。

那么目前开源社区的 Linux 发行版中,逐渐完善 LoongArch 架构的有 Arch Linux, CLFS, Debian, Gentoo, Slackware 几个发行版,而且都还处于非常早期的阶段,早期到什么程度呢?就是很多底层都需要从源码开始构建,从 0 开始,所以需要耗费更多的时间和精力去调试。那么我在 GitHub 上发起了,共建 openSUSE Tumbleweed 项目 的活动,下面我来具体谈一谈现阶段各位包维护者如何参与到这个项目中,并且做出一些贡献。

1. 龙芯目前的发展情况:

这个方面的内容,大家可以通过两个途径了解:

第一个途径:通过白老师的两篇文章进行了解,第一篇 《 非官方但全面的 LoongArch 常见问题解答》,第二篇《 如何把你的系统从旧世界迁移到新世界(施工中)》 文章。
第二个途径:通过我制作的视频了解,B 站地址油管地址

2. 目前构建 openSUSE Tumbleweed 项目的思路:

基于现阶段 LoongArch 新世界非常早期的开发阶段,openSUSE 是暂时没有办法利用常用 OBS Build Server 去编译、打包新世界的软件的。主要原因有两个:

第一、构成 OBS BUILD 服务的远程和本地基础目前均没有,包括 KVM 虚拟化,chroot,LXD 等等(新世界的虚拟化,chroot 是有了,但是 openSUSE 所需的包都没有构建出来,所以,可以理解是没有的),rpm 底层的所有包,都是 “0
第二、目前社区能够获得龙芯新世界服务器的方式除了通过购买和借用,是没有其他的方法的,主要原因并不是龙芯抠门,不想赠予社区,而是产能完全跟不上需求,而且受到国内外影响,现阶段的龙芯成本很高,目前大部分新世界服务器大多都卖给或者借给政府和企业做适配,而社区想要获取的唯一途径除了到某宝、某东购买,或者短暂的借用,别无他法。

传统从 “0” 开始构建发行版的思路:

从 LFS 入手,逐步构建出龙芯新世界的 stage1, stage2, stage3 ,后续利用 stage3 中的工具链和底层库,编译、打包 openSUSE Tumbleweed 的 rpm 包,将制作出来的底层包,或者叫做 base system 的包,利用 zypper 安装到某个目录或者块设备下,利用容器化进入后,全部包重新自举一遍,甚至多遍,正真完整的构建好 base system 所需的 rpm 打包,随后推送到 repo ,开始利用 obs server 编译、打包所有 noarch 包,调试,开始编译、测试 loongarch64 位 rpm 包。

这是最为传统构建发行版的方法,但是这需要各位朋友具有非常好的 Linux 使用底子。那么为了简化这个流程。目前我采用的方法:

目前已经有的,并且完全适配龙芯新世界的元发行版有 Gentoo,KISS 发行版有 Arch Linux,我们可以利用这两个发行版来作为刚刚提到的 stage3 去编译、打包 openSUSE Tumbleweed 的 rpm 包。原因有以下几点:

  1. Arch Linux 和 Gentoo 都能够通过包管理安装 rpm 工具,在 Arch Linux 通过 pacman -S rpm-tools ,完成安装后,运行 rpm --initdb 完成初始化;在 Gentoo 上通过安装,emerge -av rpm rpmdevtools 安装,同样完成后,运行 rpm --initdb 完成初始化;
  2. Arch Linux 和 Gentoo 已经能够构建出一整套完整的龙芯新世界底层库和工具链了;

当然,如果各位朋友有能力可以使用 Gentoo 作为框架编译、测试、打包 openSUSE Tumbleweed 的 rpm 包,不过个人更推荐用 Arch Linux 作为框架,因为 Arch Linux 目前的包更全,而且更原汁原味,Gentoo 可能会更加简化,另外可能需要做更多的调试工作,带来额外的工作负担(我的意思是 openSUSE 打包以外的工作负担)。

所以基于目前的情况,整个流程如下:

P.S 目前各位朋友手头应该是没有龙芯新世界的机器的,如果有的可以跳到第 3 步开始阅读,如果没有,就利用我借来的新世界龙芯服务器开始吧。

  1. 首先需要大家安装一个叫做 zerotier 软件,利用它,实现内网穿透,各位就能连接到我借的龙芯服务器了,具体步骤如下:

第一、各位可以登陆 Download 网站下载并安装 zerotier ,完成参考 Wiki 页面 加入到我的 network_id 下: a84ac5c10ac9027f

第二、加入后,请用任何一种可以联系上我的方式告诉我,比方 TG 搜索用户名:@HougeLangley,我的邮箱地址:litterhougelangley@live.com 都是可以的,并且你要有足够的能力,比方说熟练使用 Arch Linux 的能力,解读 PKGBUILD 的能力,使用 chroot 的能力,systemd-nspawn 的能力等等。这样我才能通过你加入到 zerotier 网络,参与到打包测试。

  1. 完成上面这一步之后,你需要通过 ssh 连接我这里的一台专门设置给大家连接龙芯的飞腾主机。IP 地址是:fda8:4ac5:c10a:c902:7f99:93ed:e041:ddd4 fca2:83c7:beed:e041:ddd4:0000:0000:0001 10.243.0.1,三选一都是可以,登陆账号是:opensuse ,密码也是:opensuse ,随后还需要再 ssh root@192.168.50.4 登陆龙芯服务器,密码就是:root 。龙芯服务器的系统是 Arch Linux,建议大家把打包用的容器统一放到 /mnt/ 目录下,自己取一个名字,然后用 pacstrap /mnt/xxx base base-devel rpm-tools openssh vim 将基本的开发环境和 rpm 工具,远程管理工具和编辑器安装到目录下,再用 systemd-nspawn 进入容器,我常用的方法是:systemd-nspawn -D /mnt/xxx -M <自己取个名字> --bind-ro=/etc/resolv.conf 就可以进入容器,这样,我们的编译、打包 openSUSE Tumbleweed 的环境就有了。

  2. 在容器中大家就可以利用 rpmbuild -ba xxx.spec 去打包 openSUSE Tumbleweed 各种包了,但需要大家切记:

第一、一定要用 openSUSE Tumbleweed 的提供的 src.rpm 包,任何你从 github 去下载的源码或者自己写的 .spec 都是不被允许的。为什么一定要用 Tumbleweed 的源码包呢?因为这是 openSUSE,我们所做的一切是为了 openSUSE 早日用上龙芯处理器的计算机,必须用最新的软件、工具链和底层库,没有分滚草,哪来的 Leap?
第二、一定要严格按照 openSUSE 和 rpm 打包流程进行,过程中提示缺少的依赖可以先注释掉,缺少的依赖可以用 Arch Linux 的 pacman 安装到容器中,如果实在找不到 Arch Linux 的依赖,可以去搜索你需要打包的 PKGBUILD,里面的依赖用 pacman 来安装好,再测试 rpm 打包。
第三、不可以损坏服务器中的 Arch Linux 系统,毕竟是我借来的,大家珍惜这样的机会。

好了,让我们加油把 openSUSE 早日 port 到龙芯上吧。

9赞

目前进展如何

1赞

龙芯的新旧世界影响只到内核,还是说连应用也得一起重新编译迁移?

龙芯新旧世界是不同的架构,所有软件都要重新编译。

旧世界是 MIPS,新世界是 LoongArch,是完全不同的,从底层工具链到上层应用,从头都要弄。

不是。你理解错了!新旧世界都是 LA 架构。但是旧世界是抄袭 MIPS 的,而新世界是从头开始实现整个系统软件架构。我日常使用 3A5000,跑 loognix 旧世界的软件,这些基本知识我还是懂的。

嗯嗯,所以咱也没有必要去纠结旧世界的 LA 了,直接去折腾新世界吧

我只是好奇,按说硬件级别的问题,应该只影响到内核,我没看明白为啥会影响到 userland 的程序。背后原理是啥?这样子对于我这种应用程序的开发人员来说,在龙芯平台上面我就得发布两个安装包了啊。

关于这个问题,朋友可以看这里获得详细解答

白老师,对相关的疑问有社区方的解释。朋友有空可以看下。另外朋友提到了兼容两个平台,其实,根据目前的发展来看,后续只需要支持 LoongArch 就可以了,旧世界迟早是会被抛弃的。

x86 上安装 obs-worker,用 qemu 可以编译 loongarch 的包吗

目前 8.2 版本的 qemu 可以使用 loongarch64 了

估计还是需要用 TW 才行

openSUSE 上怎么没有 cross-longarch64-gcc13?楼主是不是可以先整个 cross-longarch64-gcc13 到官方仓库? :stuck_out_tongue_winking_eye:

你别说,还真有可能弄一个发上来

我研究下怎么打包 Gentoo 下的 crossdev 环境

我是用的 leap15 啊,我有 loongarch 机器,可是没有找到哪个系统可以在 loongarch 上安装 obs-worker 的?

打包时附带一个CMaketoolchain,现在 openSUSE 上的 cross-*-gcc* 都没有toolchain文件,想用啥还得自己写一个,就比较烦,偶想直接使用cmake --toolchain=/usr/lib64/cmake/toolchains/loongarch64.cmake :stuck_out_tongue_winking_eye:

哥们儿我先试试,这两天还没有弄出来。不过有现成的 stage3 可以用,想不想试试在容器里跑~

各位朋友可以考虑在 openSUSE Tumbleweed 下使用 qemu-user 模式下为 Loongarch64 打包 rpm 了