-
Notifications
You must be signed in to change notification settings - Fork 78
如何在Arch Linux x86_64的环境下使用makerepropkg验证RISC V架构的包
- 使用 asp 或者其他工具获取到 devtools 的软件包的构建脚本 PKGBUILD。(建议新建一个 pkg 目录用来存放软件包的构建脚本)
$ asp checkout devtools
-
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
- 使用
patch
命令加入 patch
$ patch < ./riscv64.patch
- 使用 extra-x86_64-build 打包
$ extra-x86_64-build
- 使用
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
修改 /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
在运行文件之前,我们需要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
在上一步运行结束后,会出现如下报错信息
出现该问题是因为没有指定 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!