开头
早前 CentOS 公告不再提供 Centos 8 的支持,并转到 Stream 分支去。虽然不懂什么意思反正就是不爽,然后找了一个替代品 Oracle Linux 并且内核很新感觉不错。
用了个把月后也不错所以就制作一个 Cloud-init 镜像方便虚拟机快速部署,Oracle Linux 官方没有直接提供 Cloud-init 镜像所以需要自己制作(也可能是我找不到)。
准备
因为 Oracle Cloud 自己是有 Cloud-init 镜像的给虚拟机的,但是找了一轮也只找到了发布日志。最后找到了这个官方工具和这篇文章。
接着在 Oracle Cloud 上面创建了一台免费虚拟机,环境都装完了才发现不支持嵌套虚拟化,所以最后还是在自己 PVE 上面装了一个 OL8 才搞成功的。
由于官方工具在 OL8 上面测试通过,我也用 OL8 部署,如果用 CentOS 或者 Redhat 的话就自己研究了。
Oracle Linux 下载地址:https://yum.oracle.com/oracle-linux-isos.html
虚拟环境
安装官方工具的依赖与 vagrant-libvirt 的依赖。
由于我用的是 kvm 虚拟机也可以按照官方文章用 VirtualBox 。
dnf update -y
dnf install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
dnf module install virt python27
dnf install kpartx qemu-img packer vagrant \
gcc libvirt libvirt-devel libxml2-devel make ruby-devel libguestfs-tools \
git
alternatives --set python /usr/bin/python2
安装 vagrant-libvirt 插件
export CONFIGURE_ARGS="with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib64"
vagrant plugin install vagrant-libvirt
启动 libvirt 并检查虚拟化
systemctl enable --now libvirtd
virt-host-validate
运行上面的第二条命令后会输出下面内容,如果第一行显示 PASS 一般就没问题了。
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
...
制作镜像
首先修改一下配置文件 env.properties
,内存不能少于 768 否则 OL8 无法启动,磁盘(DISK_SIZE_GB)最小 3GB(需要修改 kickstart 配置否则出错),QEMU_BINARY 需要手动配置绝对路径否则会找不到命令。
其他选项根据实际情况查看官方工具仓库内 env.properties
文件的注释进行修改。
WORKSPACE=/root/images
ISO_URL=file:///mnt/mac/template/iso/OracleLinux-R8-U4-x86_64-dvd.iso
ISO_CHECKSUM=a55e97eec90e8c810f23625a349af816e1fdf162428e2bf96b752ff562106d4b
DISTR="ol8-slim"
CLOUD="oci"
BUILD_NUMBER=1
SSH_PASSWORD=0000
CPU_NUM=2
MEM_SIZE=768
DISK_SIZE_GB=10
PACKER_BUILDER="qemu.x86-64"
QEMU_BINARY="/usr/libexec/qemu-kvm"
CLOUD_INIT=yes
CLOUD_USER=ol
如果需要制作尽可能小的磁盘镜像文件需要修改 kickstart cfg 配置文件,路径位于 oracle-linux-image-tools/distr/ol8-slim/ol8-ks.cfg
.
在磁盘分区的位置修改成下面这样,可以注释或者删掉 swap 分区一行,然后 root 分区修改成 2000 (2GB)。
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=500 --label=/boot
#part swap --fstype="swap" --ondisk=sda --size=4096 --label=swap
part / --fstype="xfs" --ondisk=sda --size=2000 --label=root --grow
最后运行下面命令开始制作镜像
./bin/build-image.sh --env env.properties
等待大概20-30分钟,如无意外则会出现类似于下面的提示表示已经制作完毕。
+++ build-image.sh: Parse arguments
+++ build-image.sh: Load environment
+++ build-image.sh: Stage Packer files
+++ build-image.sh: Stage kickstart file
+++ build-image.sh: Generate Packer configuration file
+++ build-image.sh: Run Packer
build-image.sh: Spawn HTTP server
build-image.sh: Invoke Packer
...
build-image.sh: Package image
+++ build-image.sh: Cleanup Workspace
+++ build-image.sh: All done
+++ build-image.sh: Image available in /data/workspace/OL8U4_x86_64-oci-b0