oerv 笔试

oerv 入职笔试记录

0x00 mugen 环境配置以及测试案例分析

1.openEuler 23.09 RISCV64 VM准备

  1. 打开 openEuler 官网,按照官网镜像准备好 start_vm.sh、fw_payload_oe_uboot_2304.bin 、openEuler 23.09 riscv 镜像

  2. [可选] 为了方便个人工作,需将 vm nic 桥接到 host 已有的网桥 br0 , 编辑 start_vm.sh, 将原有的 netdev 和 virtio-net 替换如下


	-device virtio-net-pci,netdev=hn0,id=nic0 \  

	-netdev bridge,id=hn0,br=br0 \

  1. 使用 qemu-img 创建 test.qcow2 并将 openEuler riscv 镜像作为backing_file,并修改start_vm.sh中的 drive 参数手动指定为 test.qcow2

完成上述步骤后, 运行 start_vm.sh , 查看网络 DHCP 地址已正常获取

2.mugen 环境配置

首先从 git clone 将 mugen clone 到 VM 中

安装依赖,但是 openEuler RISCV 的OS和source repo下似乎缺少 python3-paramiko,


[root@openeuler mugen]# bash dep_install.sh    

OS                                           4.3 kB/s |  15 kB     00:03       

OS                                           639 kB/s | 3.4 MB     00:05       

source                                       4.2 kB/s | 2.2 kB     00:00       

Package expect-1:5.45.4-7.oe2309.riscv64 is already installed.  

Package psmisc-23.6-1.oe2309.riscv64 is already installed.  

Package make-1:4.4.1-1.oe2309.riscv64 is already installed.  

Package iputils-20221126-2.oe2309.riscv64 is already installed.  

Package python3-six-1.16.0-3.oe2309.noarch is already installed.  

No match for argument: python3-paramiko  

Error: Unable to find a match: python3-paramiko  

于是决定通过 pip 安装,在pip中安装发现没有现成的wheel, 需要编译

通过试错和查阅官方包,依次通过 dnf 下载依赖 gcc libffi-devel openssl-devel, 以及准备 rust stable compiler (目前stable 为 1.76.0,满足wheel依赖需要的 >= 1.73.0), 最后 pip install 来编译并安装轮子(下面是已经编译和安装完wheel之后的输出)


[root@openeuler mugen]# pip install paramiko  

Requirement already satisfied: paramiko in /usr/local/lib/python3.11/site-packages (3.4.0)  

Requirement already satisfied: bcrypt>=3.2 in /usr/local/lib64/python3.11/site-packages (from parami  

ko) (4.1.2)  

Requirement already satisfied: cryptography>=3.3 in /usr/local/lib64/python3.11/site-packages (from  

paramiko) (42.0.5)  

Requirement already satisfied: pynacl>=1.5 in /usr/local/lib64/python3.11/site-packages (from parami  

ko) (1.5.0)  

Requirement already satisfied: cffi>=1.12 in /usr/local/lib64/python3.11/site-packages (from cryptog  

raphy>=3.3->paramiko) (1.16.0)  

Requirement already satisfied: pycparser in /usr/local/lib/python3.11/site-packages (from cffi>=1.12  

->cryptography>=3.3->paramiko) (2.21)

配置环境本机环境


bash mugen.sh -c --ip 192.168.31.108 --password <hidden> --user root --port 22

至此,整体 mugen 环境就配置完成了。

3.样例执行和分析

本人选择如下 testsuite 进行分析,并附上其测试日志

docker-engine


Fri Mar  8 12:52:06 2024 - INFO  - start to run testcase:oe_test_service_docker.  

Fri Mar  8 12:52:11 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 12:54:30 2024 - ERROR - The case exit by code 2.  

Fri Mar  8 12:54:31 2024 - INFO  - End to run testcase:oe_test_service_docker.  

Fri Mar  8 12:54:32 2024 - INFO  - A total of 1 use cases were executed, with 0 successes 1 failures and 0 skips.


Fri Mar  8 12:52:23 2024 - INFO  - Start environmental preparation.  

Fri Mar  8 12:53:28 2024 - INFO  - End of environmental preparation!  

Fri Mar  8 12:53:28 2024 - INFO  - Start testing...  

    Active: active (running) since Fri 2024-03-08 12:53:38 CST; 5s ago  

    Active: inactive (dead) since Fri 2024-03-08 12:53:45 CST; 5s ago  

    Active: active (running) since Fri 2024-03-08 12:53:59 CST; 5s ago  

find: ‘"/etc/systemd/system/multi-user.target.wants/docker.service"’: No such file or directory  

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.servi  

ce.  

find: ‘"/etc/systemd/system/multi-user.target.wants/docker.service"’: No such file or directory  

Fri Mar  8 12:54:08 2024 - ERROR - docker.service enable failed  

Fri Mar  8 12:54:09 2024 - ERROR - ../common/common_lib.sh line 70  

Mar 08 12:53:31 openeuler dockerd[101925]: time="2024-03-08T12:53:31.305510463+08:00" level=error msg="failed to  

initialize a tracing processor \"otlp\"" error="no OpenTelemetry endpoint: skip plugin"  

Mar 08 12:53:52 openeuler dockerd[102077]: time="2024-03-08T12:53:52.517703549+08:00" level=error msg="failed to  

initialize a tracing processor \"otlp\"" error="no OpenTelemetry endpoint: skip plugin"  

Fri Mar  8 12:54:10 2024 - ERROR - There is an error message for the log of docker.service  

Fri Mar  8 12:54:10 2024 - ERROR - oe_test_service_docker.sh line 35  

Fri Mar  8 12:54:13 2024 - INFO  - Finish test!  

Fri Mar  8 12:54:13 2024 - ERROR - failed to execute the case.  

Fri Mar  8 12:54:14 2024 - INFO  - start environment cleanup.  

Fri Mar  8 12:54:30 2024 - INFO  - Finish environment cleanup!

日志中的问题主要由两处引发

  1. docker.service 在创建完 multi-user .target.wants 链接后仍然无法被 find 检索到

  2. no OpenTelemetry endpoint: skip plugin

问题一

日志显示 docker.service enable failed, symlink 没有被检测到,整个问题出现在 test_enable 内测试 enbale 的部分,根据推测是对symlink_file参数处理不当导致的,此处find需要的参数应该是/etc/systemd/system/multi-user.target.wants/docker.service,而该参数却是"/etc/systemd/system/multi-user.target.wants/docker.service", 出现了与预期不符合的字符,导致 find 无法将其正确认识为路径,根据symlink_file 的用处我判断这是一个属于 mugen 的 bug, 应当需要被提交, 我对此处的处理如下:


# testcases/cli-test/common/common_lib.sh

symlink_file=$(systemctl disable "${service}" 2>&1 | grep "Removed" | awk '{print $2}' |   

  awk '{print substr($0,1,length($0)-1)}' | tr -d '"')

通过追加 tr -d '"' 去除 " ,当然此处理也许欠缺考量

当修改以后我们再进行测试,相关部分日志如下


find: ‘/etc/systemd/system/multi-user.target.wants/docker.ser  

vice’: No such file or directory  

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.  

/etc/systemd/system/multi-user.target.wants/docker.service

并且此时exit code 变为1,只剩下问题二了,故此问题解决

问题二

目前已经被 containerd 作为 issue 处理了,containerd 是 docker-engine 的 runtime,随着更新应该会被解决

https://github.com/containerd/containerd/issues/7540

https://github.com/containerd/containerd/issues/9740

clang

测试执行


[root@openeuler mugen]# bash mugen.sh -f clang  

Fri Mar  8 17:58:42 2024 - INFO  - start to run testcase:oe_test_clang_02.  

Fri Mar  8 17:58:48 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 18:00:40 2024 - ERROR - The case exit by code 1.  

Fri Mar  8 18:00:40 2024 - INFO  - End to run testcase:oe_test_clang_02.  

Fri Mar  8 18:00:41 2024 - INFO  - start to run testcase:oe_test_clang_01.  

Fri Mar  8 18:00:47 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 18:02:39 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 18:02:40 2024 - INFO  - End to run testcase:oe_test_clang_01.  

Fri Mar  8 18:02:41 2024 - INFO  - start to run testcase:oe_test_clang_03.  

Fri Mar  8 18:02:46 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 18:04:51 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 18:04:52 2024 - INFO  - End to run testcase:oe_test_clang_03.  

Fri Mar  8 18:04:53 2024 - INFO  - start to run testcase:oe_test_clang_04.  

Fri Mar  8 18:04:59 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 18:06:50 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 18:06:51 2024 - INFO  - End to run testcase:oe_test_clang_04.  

Fri Mar  8 18:06:51 2024 - INFO  - A total of 4 use cases were executed, with 3 successes 1 failures and 0 skips.

oe_test_clang_02 有异常,查看一下log


Fri Mar  8 17:59:00 2024 - INFO  - Start to prepare the test environment.  

Fri Mar  8 18:00:18 2024 - INFO  - End to prepare the test environment.  

Fri Mar  8 18:00:18 2024 - INFO  - Start to run test.  

....(省略一些不关键部分)

oe_test_clang_02.sh: line 46: clang-format: command not found  

Fri Mar  8 18:00:28 2024 - ERROR - oe_test_clang_02.sh line 47  

Fri Mar  8 18:00:28 2024 - INFO  - End to run test.  

Fri Mar  8 18:00:29 2024 - ERROR - failed to execute the case.  

Fri Mar  8 18:00:29 2024 - INFO  - Start to restore the test environment.  

Fri Mar  8 18:00:39 2024 - INFO  - End to restore the test environment.

定位到最后发现 如下问题


oe_test_clang_02.sh: line 46: clang-format: command not found  

Fri Mar  8 18:00:28 2024 - ERROR - oe_test_clang_02.sh line 47

查询资料和dnf search后发现是缺少clang-format, 了解以后发现这个在其它 RPM系中(比如 fedora) 出现在 clang-tools-extra 这个包里面的,openEuler是有这个包的,但原测试样例中并没有安装这个依赖

在测试样例中设置依赖后再进行一次测试, 一切正常


[root@openeuler mugen]# bash mugen.sh -f clang -r oe_test_clang_02  

Fri Mar  8 18:37:08 2024 - INFO  - start to run testcase:oe_test_clang_02.  

Fri Mar  8 18:37:13 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 18:38:22 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 18:38:22 2024 - INFO  - End to run testcase:oe_test_clang_02.  

Fri Mar  8 18:38:23 2024 - INFO  - A total of 1 use cases were executed, with 1 successes 0 failures and 0 skips.

至此 clang 的样例问题解决

Rust

运行 Rust suite 


[root@openeuler mugen]# bash mugen.sh -f rust    

Fri Mar  8 19:40:52 2024 - INFO  - start to run testcase:oe_test_rustc_03.  

Fri Mar  8 19:40:57 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:41:54 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 19:41:54 2024 - INFO  - End to run testcase:oe_test_rustc_03.  

Fri Mar  8 19:41:55 2024 - INFO  - start to run testcase:oe_test_clippy.  

Fri Mar  8 19:42:01 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:43:04 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 19:43:05 2024 - INFO  - End to run testcase:oe_test_clippy.  

Fri Mar  8 19:43:07 2024 - INFO  - start to run testcase:oe_test_rustc_02.  

Fri Mar  8 19:43:12 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:44:21 2024 - ERROR - The case exit by code 3.  

Fri Mar  8 19:44:21 2024 - INFO  - End to run testcase:oe_test_rustc_02.  

Fri Mar  8 19:44:22 2024 - INFO  - start to run testcase:oe_test_cargo_02.  

Fri Mar  8 19:44:28 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:45:40 2024 - ERROR - The case exit by code 1.  

Fri Mar  8 19:45:41 2024 - INFO  - End to run testcase:oe_test_cargo_02.  

Fri Mar  8 19:45:43 2024 - INFO  - start to run testcase:oe_test_rustfmt.  

Fri Mar  8 19:45:48 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:46:51 2024 - ERROR - The case exit by code 3.  

Fri Mar  8 19:46:52 2024 - INFO  - End to run testcase:oe_test_rustfmt.  

Fri Mar  8 19:46:53 2024 - INFO  - start to run testcase:oe_test_rustdoc.  

Fri Mar  8 19:46:59 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:48:52 2024 - ERROR - The case exit by code 2.  

Fri Mar  8 19:48:52 2024 - INFO  - End to run testcase:oe_test_rustdoc.  

Fri Mar  8 19:48:53 2024 - INFO  - start to run testcase:oe_test_rustc_01.  

Fri Mar  8 19:48:59 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:50:16 2024 - INFO  - The case exit by code 0.  

Fri Mar  8 19:50:16 2024 - INFO  - End to run testcase:oe_test_rustc_01.  

Fri Mar  8 19:50:17 2024 - INFO  - start to run testcase:oe_test_cargo_01.  

Fri Mar  8 19:50:23 2024 - INFO  - pkgs:(lshw) is already installed  

Fri Mar  8 19:51:10 2024 - ERROR - The case exit by code 1.  

Fri Mar  8 19:51:11 2024 - INFO  - End to run testcase:oe_test_cargo_01.  

Fri Mar  8 19:51:11 2024 - INFO  - A total of 8 use cases were executed, with 3 successes 5 failures and 0 skips.

选择一部分 cargo 的问题分析


// cargo_01

Fri Mar  8 19:50:54 2024 - ERROR - Help information printing failed  

Fri Mar  8 19:50:55 2024 - ERROR - oe_test_cargo_01.sh line 31

// cargo_02

Fri Mar  8 19:45:25 2024 - ERROR - Failed to update file  

Fri Mar  8 19:45:26 2024 - ERROR - oe_test_cargo_02.sh line 54

cargo_01 的问题在于大小写匹配,样例中检测的是USAGE,但现在cargo,实际出现的是Usage, 要做一些修改。

cargo_02 的问题在于 test 为检出 Cargo.lock 导致的,原因是因为这里创建了一个子 crate, 在进行 update 的时候子 crate 里面是不会产生 Cargo.lock, 它会更新根 crate 的 Cargo.lock, 这里的正确做法有两种:

  1. update完以后,先返回到根 crate, 然后再 test

  2. 将 CHECK_RESULT 置为结果取反

0x01 贡献(?)

个人比较感兴趣的方向是云原生,也是我认为本人在 RISCV 方向比较想贡献出力的一个部分,因为本人并没对RISCV有很深的了解,所以想在参与 openEuler RISCV 的云原生生态完善的同时学习更多相关 RISCV 相关的知识,希望能在这个过程中提高对 RISCV 的认识程度,以及当对 RISCV 的知识积累到一定程度的后,希望能利用RISCV的特性来促进其在云原生上的应用。

就目前对 RISCV 的了解来说,最想了解和学习的方向可能是如何利用 RISCV 进行更细致的权限粒度控制,已达到更好的容器效果。

Comment