Skip to content

如何在Arch Linux x86_64的环境下使用makerepropkg验证RISC V架构的包

Xeonacid edited this page Jan 5, 2022 · 4 revisions

如何在 Arch Linux x86_64 的环境下使用 makerepropkg 验证 RISC-V 架构的包


给 devtools 包打 risc-v patch

  1. 使用 asp 或者其他工具获取到 devtools 的软件包的构建脚本 PKGBUILD。(建议新建一个 pkg 目录用来存放软件包的构建脚本)
$ asp checkout devtools
  1. cd 到包含 PKGBUILD 的目录
$ cd devtools/trunk/

3.下载 riscv64.patch, makepkg-riscv64.conf, pacman-extra-riscv64.conf。

$ wget https://raw.githubusercontent.com/felixonmars/archriscv-packages/master/devtools/riscv64.patch
$ wget https://raw.githubusercontent.com/felixonmars/archriscv-packages/master/devtools/makepkg-riscv64.conf
$ wget https://raw.githubusercontent.com/felixonmars/archriscv-packages/master/devtools/pacman-extra-riscv64.conf
  1. 使用patch命令加入 patch
$ patch   < ./riscv64.patch
  1. 使用 extra-x86_64-build 打包
$ extra-x86_64-build
  1. 使用pacman -U 安装本地包
# pacman -U iana-etc-20210624-1-any.pkg.tar.zst

写在前面

使用 makerepropkg 的时候,RISC-V 的环境建议只下载官方仓库的包,不要自己通过其他途径进行包的安装,不然可能会报failed to retrive xxx。产生这个问题的原因是 makerepropkg 没办法下载到你当前环境中安装的软件包的文件。同时因为你的包不在官方仓库,也没办法使用pacman -Sw xxx进行软件包的下载。

如果要使用自动下载可以对 makerepropkg 进行如下魔改:

# 修改下载地址
- archiveurl='https://archive.archlinux.org/packages'
+ archiveurl='https://mirrors.wsyu.edu.cn/archriscv/repo/core/'

# 修改下载的逻辑(原逻辑是先寻找首字母,然后寻找包名,座后找到对应的版本。现在只用直接找到对应版本的包即可)
- curl -Llf -# -o "${cdir}/${f}" "${archiveurl}/${pkgname:0:1}/${pkgname}/${f}" || continue 2
+ curl -Llf -# -o "${cdir}/${f}" "${archiveurl}/${f}" || continue 2

1. 文件修改

修改 /bin/makerepropkg,使其使用 makepkg-riscv64.conf。 但是在修改之前,需要先备份一下 makerepropkg 文件。

# cp /bin/makerepropkg /bin/makerepropkg01
# vim /bin/makerepropkg
# 指定使用makepkg-riscv64.conf
- printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -M /usr/share/devtools/makepkg-x86_64.conf -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1
+ printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -M /usr/share/devtools/makepkg-riscv64.conf -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1

2. 运行 makerepropkg

在运行文件之前,我们需要cd进入到包含打包好的文件和 PKGBUILD 的路径下。这里我使用iana-etc这个包进行举例。(我的包文件放在~/AUR/路径下,使用时请自行进行替换)

$ cd ~/AUR/iana-etc/trunk
$ ls -l
total 4132
-rw-r--r-- 1 east east  401291 Aug  1 17:44 iana-etc-20210624-1-any.pkg.tar.zst
-rw-r--r-- 1 east east      71 Aug  1 17:40 LICENSE
drwxr-xr-x 3 east east    4096 Aug  1 17:42 pkg
-rw-r--r-- 1 east east    2014 Aug  1 17:40 PKGBUILD
-rw-r--r-- 1 east east   41512 Aug  1 17:41 protocol-numbers-20210324.xml
-rw-r--r-- 1 east east 3762835 Aug  1 17:41 service-names-port-numbers-20210624.xml
-rw-r--r-- 1 east east     844 Aug  1 17:40 sources.tar.xz
drwxr-xr-x 2 east east    4096 Aug  1 17:41 src

运行 makerepropkg,这里我们需要指定 pacman cache 的路径为 arch risc-v 中的 pacman cache 路径,所以需要用到 -c 参数来手动指定 cache 路径。

# makerepropkg  -c /home/dongdong/archriscv/var/cache/pacman/pkg/  iana-etc-20210624-1-any.pkg.tar.zst

2.1 package acl-2.3.1-1-riscv64 does not have a valid architecture 解决方法

在上一步运行结束后,会出现如下报错信息

报错一

出现该问题是因为没有指定 pacman.conf 为 riscv64。用 x86-64 架构的 pacman.conf 去安装 riscv64 架构的软件包是不可行的。

修改 makerepropkg 文件,是其在mkarchroot的时候通过-C指定使用的 pacman.conf 文件

# 注意 此处的路径要写绝对路径,否则会报错找不到文件
- printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -M /usr/share/devtools/makepkg-riscv64.conf -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1
+ printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -C /usr/share/devtools/pacman-extra-riscv64.conf -M /usr/share/devtools/makepkg-riscv64.conf -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1

修改完成后再次运行

# makerepropkg  -c /home/dongdong/archriscv/var/cache/pacman/pkg/  iana-etc-20210624-1-any.pkg.tar.zst

iana-etc-20210624-1-any.pkg.tar.zst验证是 reproduced

==> Tidying install...
  -> Removing libtool files...
  -> Purging unwanted files...
  -> Removing static library files...
  -> Stripping unneeded symbols from binaries and libraries...
  -> Compressing man and info pages...
==> Checking for packaging issues...
==> Creating package "iana-etc"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
warning: database file for 'core' does not exist (use '-Sy' to download)
warning: database file for 'extra' does not exist (use '-Sy' to download)
warning: database file for 'community' does not exist (use '-Sy' to download)
  -> Generating .MTREE file...
  -> Compressing package...
==> Leaving fakeroot environment.
==> Finished making: iana-etc 20210624-1 (Tue 03 Aug 2021 04:11:07 AM CST)
  -> built succeeded! built packages can be found in /var/lib/archbuild/reproducible/testenv/pkgdest
==> comparing artifacts...
  -> Package 'iana-etc-20210624-1-any.pkg.tar.zst' successfully reproduced!
Clone this wiki locally