建议在“/tmp”目录下创建“rootfs”。
mkdir -p /tmp/rootfs/var/lib/rpm rpm --root /tmp/rootfs/ --initdb
手动下载openEuler发布包,指定在“rootfs”目录中安装,安装完成后,在“rootfs”下会生成etc、usr、var子目录。
rpm -ivh --nodeps --root /tmp/rootfs/ https://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/aarch64/Packages/openEuler-release-24.03LTS_SP1-55.oe2403sp1.aarch64.rpm cd /tmp/rootfs ll
安装成功如下(error报错忽略)。
mkdir /tmp/rootfs/etc/yum.repos.d curl -o /tmp/rootfs/etc/yum.repos.d/openEuler-24.03-LTS-SP1.repo https://gitee.com/src-openeuler/openEuler-repos/raw/openEuler-24.03-LTS-SP1/generic.repo
通过添加-k命令选项可以在进行HTTPS请求时不验证服务器的SSL证书,此操作可以规避自签名证书问题,但存在安全绕过风险,建议默认不使用-k命令选项。
dnf --installroot=/tmp/rootfs/ install -y dnf yum vim net-tools iproute iputils NetworkManager openssh-server passwd hostname ntp
vi /tmp/rootfs/etc/resolv.conf
nameserver 8.8.8.8 nameserver 114.114.114.114
vi /tmp/rootfs/etc/sysconfig/network-scripts/ifup-eth0
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=851a6f36-e65c-3a43-8f4a-78fd0fc09dc9 ONBOOT=yes AUTOCONNECT_PRIORITY=-999 DEVICE=eth0
mount --bind /dev /tmp/rootfs/dev mount -t proc /proc /tmp/rootfs/proc mount -t sysfs /sys /tmp/rootfs/sys
chroot /tmp/rootfs/ /bin/bash
passwd root
useradd mirror
vi /etc/ima/ima-policy
measure func=FILE_CHECK mask=MAY_READ fowner=1000
echo openEuler > /etc/hostname exit
主机名openEuler用户可自定义。
umount -l /tmp/rootfs/dev umount -l /tmp/rootfs/proc umount -l /tmp/rootfs/sys
请参见编译Guest Kernel准备内核代码并生成配置。
export LOCALVERSION= make include/config/kernel.release make modules -j32
make modules_install INSTALL_MOD_PATH=/tmp/rootfs
dd if=/dev/zero of=/tmp/rootfs.img bs=1M count=5000
其中bs表示块大小,对应的rootfs.img大小为bs*count,即5000MB,用户可根据实际情况自定义容量大小。
cd /tmp mkfs.ext4 rootfs.img
mkdir -p rootfs1 mount rootfs.img rootfs1 cp -rfp /tmp/rootfs/* rootfs1/ umount rootfs1
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
可以通过执行以下命令扩展一个已有的rootfs.img的容量。
qemu-img resize rootfs.img +50G e2fsck -f rootfs.img resize2fs rootfs.img
yum install ncurses-devel openssl-devel yum groupinstall "Development Tools"
yum install kernel-source-6.6.0-72.0.0.76.oe2403sp1.aarch64 -y
目标版本Kernel源码位于“/usr/src”目录下。
rpm -ql kernel-source
cd /usr/src/linux-6.6.0-72.0.0.76.oe2403sp1.aarch64/ vim arch/arm64/configs/openeuler_defconfig
内核版本号取决于用户kernel-source的安装版本,因此这里的kernel目录应参考用户实际安装的版本所在目录。
CONFIG_NET_9P=y CONFIG_NET_9P_VIRTIO=y CONFIG_VIRTIO_BLK=y CONFIG_SCSI_VIRTIO=y CONFIG_VIRTIO_NET=y CONFIG_VIRTIO=y CONFIG_VIRTIO_PCI_LIB=y CONFIG_VIRTIO_PCI=y CONFIG_EXT4_FS=y # CONFIG_DEBUG_INFO_BTF is not set
vim drivers/block/Kconfig
bool "Virtio block driver"
vim drivers/net/Kconfig
bool "Virtio network driver"
vim drivers/virtio/Kconfig
bool "PCI driver for virtio devices"
make openeuler_defconfig
export LOCALVERSION= make include/config/kernel.release make -j32
编译完成生成的Guest Kernel镜像位于“arch/arm64/boot/Image”路径下。Image文件即机密虚机启动时所需镜像文件。