oerv的pretask3
-
任务三:尝试使用 qemu user & nspawn 或者 docker 加速完成任务二
如果前面使用了从qemu提取出来根文件系统,那么直接chroot进入这个根文件系统即可。否则,就跳转到后面的内容吧。
root@yyjeqhc:~# pwd
/root
root@yyjeqhc:~# ls
chroot git oe2503_qemu qemu_oe2503_rootfs snap unmount
./chroot
IP address: 192.168.126.103
IP address: 100.92.192.51
IP address: 172.17.0.1
Users online: 0
#直接就能进入系统。
#但是需要手动修改/etc/resolv.conf,因为是直接从qemu复制过来的,所以有些配置需要逐一修改。
curl 4.ipw.cn
#确保网络正常,然后剩下的操作,和pretask2的一样,配置osc等。
#还是构建pcre2吧,结果如下:
[ 825s] + /usr/bin/rm -rf /home/abuild/rpmbuild/BUILDROOT/pcre2-10.42-13.oe2503.riscv64
[ 825s] + RPM_EC=0
[ 825s] ++ jobs -p
[ 825s] + exit 0
[ 825s] Executing(rmbuild): /bin/sh -e /var/tmp/rpm-tmp.r6YrQc
[ 826s] + umask 022
[ 826s] + cd /home/abuild/rpmbuild/BUILD
[ 826s] + rm -rf pcre2-10.42 pcre2-10.42.gemspec
[ 826s] + RPM_EC=0
[ 826s] ++ jobs -p
[ 826s] + exit 0
[ 826s]
[ 826s] RPM build warnings:
[ 826s] line 51: It's not recommended to have unversioned Obsoletes: Obsoletes: pcre2-utf16 pcre2-utf32 pcre2-tools
[ 826s] line 75: It's not recommended to have unversioned Obsoletes: Obsoletes: pcre2-static
[ 827s] ... checking for files with abuild user/group
[ 828s]
[ 828s] finished "build pcre2.spec" at Fri Apr 25 04:54:36 UTC 2025.
[ 828s]
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/SRPMS/pcre2-10.42-13.oe2503.src.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/pcre2-10.42-13.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/pcre2-devel-10.42-13.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/noarch/pcre2-help-10.42-13.oe2503.noarch.rpm
#快了一半。
这样的话,pretask3就结束了。
但是,不妨比较一下多种加速方式的区别。
[root@yyjeqhc /]# cd root
[root@yyjeqhc ~]# ls
git home:swjnxyf:branches:openEuler:25.03 rootfs
[root@yyjeqhc ~]# osc co openEuler:24.03/man-db
A openEuler:24.03
A openEuler:24.03/man-db
/root/openEuler:24.03/man-db/.osc/sources/_service | Elapsed Time: 0:00:00
A openEuler:24.03/man-db/_service
At revision 12.
[root@yyjeqhc ~]# ls
git home:swjnxyf:branches:openEuler:25.03 openEuler:24.03 rootfs
[root@yyjeqhc ~]# cd openEuler\:24.03/
[root@yyjeqhc openEuler:24.03]# ls
man-db
[root@yyjeqhc openEuler:24.03]# cd man-db/
[root@yyjeqhc man-db]# ls
_service
[root@yyjeqhc man-db]# osc up -S
/root/openEuler:24.03/man-db/_service:tar_scm:backport-Improve-lexgrog-1-portability.patch | Elapsed Time: 0:00:00
A _service:tar_scm:backport-Improve-lexgrog-1-portability.patch
/root/openEuler:24.03/man-db/_service:tar_scm:backport-Update-warning-regex-for-groff-1.23.0.patch | Elapsed Time: 0:00:00
A _service:tar_scm:backport-Update-warning-regex-for-groff-1.23.0.patch
/root/openEuler:24.03/man-db/_service:tar_scm:man-db-2.11.2.tar.xz | Elapsed Time: 0:00:00
A _service:tar_scm:man-db-2.11.2.tar.xz
/root/openEuler:24.03/man-db/_service:tar_scm:man-db-cache-update.service | Elapsed Time: 0:00:00
A _service:tar_scm:man-db-cache-update.service
/root/openEuler:24.03/man-db/_service:tar_scm:man-db.crondaily | Elapsed Time: 0:00:00
A _service:tar_scm:man-db.crondaily
/root/openEuler:24.03/man-db/_service:tar_scm:man-db.spec | Elapsed Time: 0:00:00
A _service:tar_scm:man-db.spec
/root/openEuler:24.03/man-db/_service:tar_scm:man-db.sysconfig | Elapsed Time: 0:00:00
A _service:tar_scm:man-db.sysconfig
/root/openEuler:24.03/man-db/_service:tar_scm:man-db.yaml | Elapsed Time: 0:00:00
A _service:tar_scm:man-db.yaml
At revision 70120030bd685a162822ec72fa423410.
fix
osc build
[ 1640s] RPM build warnings:
[ 1640s] line 25: It's not recommended to have unversioned Obsoletes: Obsoletes: man-db-cron
[ 1640s] line 26: It's not recommended to have unversioned Obsoletes: Obsoletes: man-pages-zh-CN
[ 1641s] ... checking for files with abuild user/group
[ 1641s]
[ 1641s] finished "build man-db.spec" at Fri Apr 25 06:29:01 UTC 2025.
[ 1641s]
/var/tmp/build-root/9950x-riscv64/home/abuild/rpmbuild/SRPMS/man-db-2.11.2-2.oe2403.src.rpm
/var/tmp/build-root/9950x-riscv64/home/abuild/rpmbuild/RPMS/riscv64/man-db-2.11.2-2.oe2403.riscv64.rpm
#这都要近半小时,qemu系统肯定会更长的。
接下来试一下docker,参阅https://zhuanlan.zhihu.com/p/668893754
docker pull xfan1024/openeuler:24.03-riscv64
docker run -it --privileged --name 2403 xfan1024/openeuler:24.03-riscv64 bash
#没有太大区别,就是进入容器以后,还需要配置一下环境
#其他的包,缺什么,找什么吧
dnf install -y dnf-plugins-core rpm-build net-tools osc build vim
util-linux bind-utils cmake git gcc make pkg-config gcc-g++ vim wget chrony
[root@679d595cbbfe ~]# osc co openEuler:25.03/xz
A openEuler:25.03
A openEuler:25.03/xz
_service: | Elapsed Time: 0:00:00
A openEuler:25.03/xz/_service
At revision 4.
osc up -S
osc build
#构建,提示错误:
d_riscv64/riscv64/dbus-tools-1.16.0-1.oe2503.riscv64.rpm: 8640293f53bdc55c8d5455ac5398e361 (actual) != None (expected)
fetching packages for 'openEuler:25.03': | Elapsed Time: 0:01:01
Skipping verification of package signatures
Writing build configuration
Running build
sudo: No such file or directory
#直接跳过sudo吧
echo -e '#!/bin/sh\nexec "$@"' > /usr/local/bin/sudo
chmod +x /usr/local/bin/sudo
[ 690s] Executing(rmbuild): /bin/sh -e /var/tmp/rpm-tmp.ruu1Il
[ 690s] + umask 022
[ 690s] + cd /home/abuild/rpmbuild/BUILD
[ 690s] + rm -rf xz-5.6.3 xz-5.6.3.gemspec
[ 690s] + RPM_EC=0
[ 690s] ++ jobs -p
[ 690s] + exit 0
[ 690s]
[ 690s] RPM build warnings:
[ 690s] line 31: It's not recommended to have unversioned Obsoletes: Obsoletes: xz-static
[ 691s] ... checking for files with abuild user/group
[ 691s]
[ 691s] finished "build xz.spec" at Fri Apr 25 07:25:27 UTC 2025.
[ 691s]
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/SRPMS/xz-5.6.3-1.oe2503.src.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/xz-devel-5.6.3-1.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/xz-5.6.3-1.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/xz-libs-5.6.3-1.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/xz-lzma-compat-5.6.3-1.oe2503.riscv64.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/noarch/xz-help-5.6.3-1.oe2503.noarch.rpm
再来看另一个项目,这个是很明显的构建失败的包,后续修包的话可能就是从这里面找
[root@679d595cbbfe ~]# osc co openEuler:25.03:Epol/Kmesh
A openEuler:25.03:Epol
A openEuler:25.03:Epol/Kmesh
_service: | Elapsed Time: 0:00:00
A openEuler:25.03:Epol/Kmesh/_service
At revision 4.
[root@679d595cbbfe ~]# cd openEuler\:25.03\:Epol/
[root@679d595cbbfe openEuler:25.03:Epol]# cd Kmesh/
[root@679d595cbbfe Kmesh]# osc up -S
...
osc build
[ 131s] go: kmesh.net/kmesh/test/e2e tested by
[ 131s] kmesh.net/kmesh/test/e2e.test imports
[ 131s] sigs.k8s.io/gateway-api/apis/v1: sigs.k8s.io/gateway-api@v1.0.1-0.20240112015229-444631bfe06f: Get "https://repo.huaweicloud.com/repository/goproxy/sigs.k8s.io/gateway-api/@v/v1.0.1-0.20240112015229-444631bfe06f.zip": dial tcp: lookup repo.huaweicloud.com on [::1]:53: read udp [::1]:56271->[::1]:53: read: connection refused
[ 131s] error: Bad exit status from /var/tmp/rpm-tmp.ckByJk (%build)
[ 131s]
[ 131s] RPM build errors:
[ 131s] Bad exit status from /var/tmp/rpm-tmp.ckByJk (%build)
[ 131s]
[ 131s] failed "build Kmesh.spec" at Fri Apr 25 07:56:25 UTC 2025.
[ 131s]
Build failed with exit code 1
The buildroot was: /var/tmp/build-root/standard_riscv64-riscv64
Cleaning the build root may fix the problem or allow you to start debugging from a well-defined state:
- add '--clean' option to your 'osc build' command
- run 'osc wipe [--vm-type=...]' prior running your 'osc build' command again
#这个就是容器里面没有ipv6的dns解析服务(没有运行在本地的ipv6 dns服务器)
dnf install -y dnsmasq
vim /etc/dnsmasq.conf
#添加下面两行即可
listen-address=127.0.0.1,::1
server=172.17.0.1
[root@679d595cbbfe Kmesh]# dnsmasq --test
dnsmasq: syntax check OK.
[root@679d595cbbfe Kmesh]# dnsmasq &
[1] 66986
[root@679d595cbbfe /]# netstat -tlnp |grep 53
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 66991/riscv64-binfm
tcp6 0 0 :::53 :::* LISTEN 66991/riscv64-binfm
然后就可以正常下载了go代码了。
#当然了,只是解决dial tcp: lookup repo.huaweicloud.com on [::1]:53: read udp [::1]:56271->[::1]:53: read: connection refused,解决了解析失败的问题。
#包构建失败的原因还是需要具体分析。
网络问题解决,构建过程就正常了。
153s] fatal error: too many errors emitted, stopping now [-ferror-limit=]
[ 153s] 20 errors generated.
[ 153s] Error: can't execute clang: exit status 1
[ 153s] exit status 1
[ 153s] bpf/kmesh/bpf2go/bpf2go.go:21: running "go": exit status 1
[ 153s] make: *** [Makefile:83: all] Error 1
[ 153s] error: Bad exit status from /var/tmp/rpm-tmp.6KjyDe (%build)
[ 153s]
[ 153s] RPM build errors:
[ 153s] Bad exit status from /var/tmp/rpm-tmp.6KjyDe (%build)
[ 153s]
[ 153s] failed "build Kmesh.spec" at Fri Apr 25 08:53:27 UTC 2025.
[ 153s]
#构建失败和官网上的日志是一样的
回到chroot里面,构建Kmesh这个包也会出一样的问题,解决方案是修改主机的dns服务
root@yyjeqhc:~# netstat -tlnp |grep 53
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1097/systemd-resolv
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN 1097/systemd-resolv 不能开启ipv6也监听吗
vim /etc/systemd/resolved.conf
#查看配置内容,然后在指定位置添加下面两行即可,然后重启解析服务
[Resolve]
DNSStubListener=yes
DNSStubListenerExtra=::1
root@yyjeqhc:~# systemctl restart systemd-resolved
Warning: The unit file, source configuration file or drop-ins of systemd-resolved.service changed on disk. Run 'systemctl daemon-reload' to reload units.
root@yyjeqhc:~# systemctl daemon-reload
root@yyjeqhc:~# netstat -tlnp |grep 53
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 305169/systemd-reso
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN 305169/systemd-reso
tcp6 0 0 ::1:53 :::* LISTEN 305169/systemd-reso
#然后,chroot里面再构建,就不会出现这个错误了。会正常构建到最后失败
最后,试一下主机环境,即ubuntu直接安装osc构建工具
参阅 实习生顾凯杰+创建邮箱 by gukj-spel · Pull Request #1334 · openeuler-riscv/oerv-team
#系统版本不一样,所以我不用安装systemd-nspawn
apt install systemd-container
#首先是osc
git clone https://github.com/openSUSE/osc.git --depth 1
cd osc
chmod +x setup.py
./setup.py build
root@yyjeqhc:~/git/osc# ./setup.py build
Traceback (most recent call last):
File "/root/git/osc/./setup.py", line 4, in <module>
import setuptools
ModuleNotFoundError: No module named 'setuptools'
apt install python3-setuptools
./setup.py install
#然后是obs-build
git clone https://github.com/openSUSE/obs-build.git --depth 1
cd obs-build
sudo make install
#然后,osc配置账号网址,和openeuler系统里面操作一样。本身osc build也是一个虚拟环境
root@yyjeqhc:~# osc checkout home:swjnxyf
A home:swjnxyf
A home:swjnxyf/fastfetch
/root/home:swjnxyf/fastfetch/.osc/sources/fastfetch-2.40.4.zip
A home:swjnxyf/fastfetch/fastfetch-2.40.4.zip
/root/home:swjnxyf/fastfetch/.osc/sources/fastfetch.spec
A home:swjnxyf/fastfetch/fastfetch.spec
At revision 1.
A home:swjnxyf/hello
At revision None.
root@yyjeqhc:~# ls
chroot download git home:swjnxyf oe2503_qemu qemu_oe2503_rootfs snap unmount
root@yyjeqhc:~# cd home\:swjnxyf/
root@yyjeqhc:~/home:swjnxyf# ls
fastfetch hello
root@yyjeqhc:~/home:swjnxyf# cd fastfetch/
root@yyjeqhc:~/home:swjnxyf/fastfetch# ls
fastfetch-2.40.4.zip fastfetch.spec
#需要设置vm-type参数,可以是chroot或spawn
root@yyjeqhc:~/home:swjnxyf/fastfetch# osc build --vm-type=chroot
x86_64 is not a valid arch for the repository standard_riscv64, use one of: riscv64
osc build --vm-type=chroot standard_riscv64 riscv64
...
0s] check that the right architecture is available for your build host, you need for this one.
[ 1s] cycle: filesystem -> bash
[ 1s] breaking dependency filesystem -> bash
[ 1s] cycle: rpm -> rpm-libs
[ 1s] breaking dependency rpm-libs -> rpm
[ 1s] cycle: selinux-policy-targeted -> selinux-policy
[ 1s] breaking dependency selinux-policy -> selinux-policy-targeted
[ 1s] cycle: openEuler-rpm-config -> rpm-build
[ 1s] breaking dependency rpm-build -> openEuler-rpm-config
[ 1s] [1/33] preinstalling filesystem...
[ 1s] /usr/lib/build/build-pkg-rpm: line 202: rpm: command not found
[ 1s] /usr/lib/build/build-pkg-rpm: line 232: rpm: command not found
[ 1s] /usr/lib/build/build-pkg-rpm: line 239: rpm2cpio: command not found
[ 1s] unexpected EOF
[ 1s]
[ 1s] yyjeqhc failed "build fastfetch.spec" at Fri Apr 25 09:15:21 UTC 2025.
[ 1s]
#主机安装rpm即可。
#apt install rpm
[ 365s] Wrote: /home/abuild/rpmbuild/SRPMS/fastfetch-2.40.4-1.oe2503.src.rpm
[ 366s] Wrote: /home/abuild/rpmbuild/RPMS/riscv64/fastfetch-2.40.4-1.oe2503.riscv64.rpm
[ 366s] Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.Ng9fvd
[ 366s] + umask 022
[ 366s] + cd /home/abuild/rpmbuild/BUILD
[ 366s] + cd fastfetch-2.40.4
[ 366s] + /usr/bin/rm -rf /home/abuild/rpmbuild/BUILDROOT/fastfetch-2.40.4-1.oe2503.riscv64
[ 367s] + RPM_EC=0
[ 367s] ++ jobs -p
[ 367s] + exit 0
[ 367s] Executing(rmbuild): /bin/sh -e /var/tmp/rpm-tmp.DQt7bF
[ 367s] + umask 022
[ 367s] + cd /home/abuild/rpmbuild/BUILD
[ 367s] + rm -rf fastfetch-2.40.4 fastfetch-2.40.4.gemspec
[ 367s] + RPM_EC=0
[ 367s] ++ jobs -p
[ 367s] + exit 0
[ 367s] ... checking for files with abuild user/group
[ 367s]
[ 367s] yyjeqhc finished "build fastfetch.spec" at Fri Apr 25 09:22:58 UTC 2025.
[ 367s]
/var/tmp/build-root/standard_riscv64-riscv64/.mount/home/abuild/rpmbuild/SRPMS/fastfetch-2.40.4-1.oe2503.src.rpm
/var/tmp/build-root/standard_riscv64-riscv64/.mount/home/abuild/rpmbuild/RPMS/riscv64/fastfetch-2.40.4-1.oe2503.riscv64.rpm
osc build --vm-type=spawn standard_riscv64 riscv64
[ 338s] ++ jobs -p
[ 338s] + exit 0
[ 338s] Executing(rmbuild): /bin/sh -e /var/tmp/rpm-tmp.QQ7lhR
[ 338s] + umask 022
[ 338s] + cd /home/abuild/rpmbuild/BUILD
[ 338s] + rm -rf fastfetch-2.40.4 fastfetch-2.40.4.gemspec
[ 338s] + RPM_EC=0
[ 338s] ++ jobs -p
[ 338s] + exit 0
[ 339s] ... checking for files with abuild user/group
[ 339s] ... saving statistics
[ 339s]
[ 339s] yyjeqhc finished "build fastfetch.spec" at Fri Apr 25 09:29:21 UTC 2025.
[ 339s]
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/SRPMS/fastfetch-2.40.4-1.oe2503.src.rpm
/var/tmp/build-root/standard_riscv64-riscv64/home/abuild/rpmbuild/RPMS/riscv64/fastfetch-2.40.4-1.oe2503.riscv64.rpm