任务三:基于 systemd-nspawn 和 QEMU User Mode 搭建 openEuler RISC-V 软件包的快速开发环境
我们前面两个任务和这个任务是具有关联性的,是铺垫性质,我们的pretask也会对后面的工埋买下伏笔,这个任务,我们要做的相比前面的任务,主要就是使用nspawn或者docker来进行加速对构建rpm包的过程。
整个流程应该是
- 安装qemu
- 安装osc和obs-build
- osc拉取对应软件包
- 安装nspawn或docker
- osc build的时候使用nspawn进行加速
1.安装qemu
git clone https://github.com/qemu/qemu.git
cd qemu
./configure
make -j$(nproc)
sudo make install
2.我们继续安装osc和obs-build
yay -S osc-git obs-build-git
arch系列的aur里面有现成的,其他发行版可以手动构建一下
安装osc
git clone https://github.com/openSUSE/osc.git
cd osc
chmod +x setup.py
./setup.py build
sudo ./setup.py install
安装obs-build
git clone https://github.com/openSUSE/obs-build.git
cd obs-build
sudo make install
安装之后,我们就可以尝试开始构建了
3.首先通过命令,将obs平台的分支的包拉下来
osc co openEuler:23.09:RISC-V coreutils
这只是拉下来了一个文件_service,我们还需要一行命令来将远程包的其他相关文件一起拉下来
(注意,我们co下来后,会出现对应的文件夹,请进入之后执行下面命令)
osc up -S
我们拉下来的文件都是_service开头的,这是不可用的,所以我们还需要去掉这些头
rm -f _service;for file in `ls`;do new_file=${file##*:};mv $file $new_file;done
小tips:可以在~/.bashrc里面添加一行
alias fix = 'rm -f _service;for file in `ls`;do new_file=${file##*:};mv $file $new_file;done'
保存后记得执行一下.bashrc文件,之后再有这种情况,在命令行输入fix就可以了
4.安装nspawn或者docker
我这里自己是用的nspawn
在qemu源码目录下
sudo ./scripts/qemu-binfmt-conf.sh --persistent yes --credential yes --systemd riscv64
sudo systemctl restart systemd-binfmt
如果是乌班图系列,可以选择直接安装
sudo apt install zstd systemd-container
这里解释一下,systemd-container是包含我们用的systemd-binfmt,这个东西是会决定我们的nspawn的。
安装之后检查一下
sudo systemctl status systemd-binfmt.service
输出的状态为active(绿色)这样才正常。
5.加速构建
我的本机为manjaro,使用nspawn的时候一直遇见一些错误,退而求其次使用了chroot(我的理解为简易版的nspawn,隔离机制不如nspawn,所以加速效果也会差一些)
osc build standard_riscv64 riscv64 --vm-type=chroot
最后成功,撒花完结!!!