openeuler-riscv / oerv-team

OERV 实习生工作中心
6 stars 35 forks source link

实习生赵飞扬+创建邮箱 #812

Closed hehellooedas closed 1 month ago

hehellooedas commented 1 month ago

neofetch效果

在qemu system模式开启的openEuler虚拟机里使用osc构建rpm包

在x86_64平台用nspawn容器构建riscv64的rpm包

hehellooedas commented 1 month ago

任务一

通过 QEMU 仿真 RISC-V 环境并启动 openEuler RISC-V 系统,设法输出 neofetch 结果并截图提交

  1. 下载openEuler镜像到本地

image-20240524202010305

下载镜像后解压缩,并参考镜像源里的start_vm.sh脚本,写一个适合当前系统的run.sh

qemu-system-riscv64 \
    -nographic -machine virt \
    -smp 8 -m 4G \
    -bios fw_payload_oe_uboot_2304.bin \
    -drive file=openEuler-24.03-V1-base-qemu-testing.qcow2,format=qcow2,id=hd0 \
    -object rng-random,filename=/dev/urandom,id=rng0 \
    -device virtio-gpu \
    -device virtio-rng-device,rng=rng0 \
    -device virtio-blk-device,drive=hd0 \
    -device virtio-net-device,netdev=usernet \
    -netdev user,id=usernet,hostfwd=tcp::10001-:22 \
    -device qemu-xhci -usb -device usb-kbd -device usb-tablet

给予run.sh执行权限后直接运行.进入openEuler系统后进行必要的rpm包安装和ssh配置,使用ssh连接到本地的10001端口转发到openEuler虚拟机的22端口。

ssh -p 10001 april_zhao@localhost

2、试图安装和运行neofetch

由于我有两台Fedora设备,因此我的每台设备都使用openEuler RISC-V虚拟机并且尝试使用不同的方法去达到目的。

首先直接尝试使用包管理器安装.

sudo dnf install neofetch

但很可惜,openEuler官方源里没有这个包。

方法一:直接从Fedora-koji.repo源里借用.

❯ cat fedora-riscv-koji.repo
[fedora-riscv-koji]
name = Fedora RISC-V koji
baseurl = http://fedora.riscv.rocks/repos/f40-build/latest/riscv64/ 
enable=1
gpgcheck=0

添加源到/etc/yum.repo.d当中,再次使用dnf命令安装neofetch,成功安装.

方法二:直接通过rpm包安装

由于neofetch是基于shell脚本编写的,平台无关性很强,因此我直接访问pkgs.org下载[neofetch-7.1.0-12.fc40.noarch.rpm](https://fedora.pkgs.org/rawhide/fedora-x86_64/neofetch-7.1.0-12.fc40.noarch.rpm.html).

但是安装时出现了包依赖问题,也就是neofetch依赖于catimg绘制图像,因此我访问https://github.com/posva/catimg.拉取它的源码,使用cmake构建make install安装后,就可以成功安装neofetch.

任务二

在 openEuler RISC-V 系统上通过 obs 命令行工具 osc,从源代码构建 RISC-V 版本的 rpm 包.

1、根据guide.md的描述注册一个osc的账号.

然后在openEuler RISC-V虚拟机里安装必要的rpm包

sudo dnf install osc build rpm-build obs-service-tar_scm

可以成功安装.

2、编写osc的配置文件,使它符合在obs注册的账号信息

image-20240524205226095

3、选定xz项目进行本地构建

osc co openEuler:Mainline:RISC-V/xz

cd openEuler:Mainline:RISC-V/xz #切换到xz包的目录

osc up -S xz  #把源码包、补丁和spec文件下载到本地

rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done #重命名由service下载的文件

osc build #开始本地构建

构建的结果如conversation所示.

任务三

尝试使用 qemu user & nspawn 或者 docker 加速完成任务二.

由于使用qemu的system mode开启虚拟机进行包构建,速度会比较慢,因为完整地模拟一个指令集和跑一个系统非常消耗资源。为了追求效率,可以在高性能的x86平台上直接构建RISC-V 的rpm包。

1、在我的x86 Fedora系统里安装必要的rpm包

sudo dnf install glibc-static pcre-static glib2-static zlib-static obs-service-tar_scm osc 

在安装osc的rpm包的时候会根据依赖情况自动安装obs-build等包。

osc co openEuler:Mainline:RISC-V/xz
osc up -S xz
rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done
osc build standard_riscv64 riscv64 xz.spec --vm-type=nspawn

由于在Fedora上的qemu包是相当完整的,因此这一套流程走下来没有遇到挫折,直接就能跑通。构建的结果如conversation所示.

Jingwiw commented 1 month ago

good job