CentOS 8 を virt-builder や cloud.centos.org のイメージを使って KVM に手っ取り早く入れる

CentOS 8 を virt-install でサクッと入れる - ngyukiの日記 のような Kickstart を使う方法はカスタマイズが柔軟ですが、その代わりやたら時間がかかります。

あり物のイメージを使って構築する方が手っ取り早いので、以下の2つのイメージで構築してその手順とかを比べてみました。

virt-builder (builder.libguestfs.org)

virt-builder centos-8.2 \
  --output /var/lib/libvirt/images/centos-8.2-builder.img \
  --arch x86_64 \
  --hostname centos-8-2-builder \
  --root-password password:password \
  --timezone Asia/Tokyo \
  --selinux-relabel

virt-install \
  --name centos-8.2-builder \
  --hvm \
  --virt-type kvm \
  --ram 2048 \
  --vcpus 1 \
  --arch x86_64 \
  --os-type linux \
  --os-variant centos8 \
  --boot hd \
  --disk path=/var/lib/libvirt/images/centos-8.2-builder.img \
  --network network=default \
  --graphics none \
  --serial pty \
  --console pty \
  --import
parted -l
# Model: Virtio Block Device (virtblk)
# Disk /dev/vda: 6442MB
# Sector size (logical/physical): 512B/512B
# Partition Table: gpt
# Disk Flags: pmbr_boot
#
# Number  Start   End     Size    File system     Name  Flags
#  1      1049kB  2097kB  1049kB                        bios_grub
#  2      2097kB  1076MB  1074MB  ext4
#  3      1076MB  1721MB  645MB   linux-swap(v1)        swap
#  4      1721MB  6441MB  4721MB  xfs

df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/vda4       4.4G  1.3G  3.2G  29% /
# /dev/vda2       976M  134M  776M  15% /boot

getenforce
# Enforcing

cat /proc/cmdline | tr ' ' '\n'
# BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-193.6.3.el8_2.x86_64
# root=UUID=5e65e2b1-bd66-4404-9403-b2a5825a2c14
# ro
# console=tty0
# rd_NO_PLYMOUTH
# crashkernel=auto
# resume=UUID=abefcabc-5e1d-41cb-92f6-cc0230dad69d
# console=ttyS0,115200

cloud.centos.org

cd /var/lib/libvirt/images/
curl https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.2.2004-20200611.2.x86_64.qcow2 -O

virt-install \
  --name centos-8.2-generic \
  --hvm \
  --virt-type kvm \
  --ram 2048 \
  --vcpus 1 \
  --arch x86_64 \
  --os-type linux \
  --os-variant centos8 \
  --boot hd \
  --disk path=/var/lib/libvirt/images/CentOS-8-GenericCloud-8.2.2004-20200611.2.x86_64.qcow2 \
  --network network=default \
  --graphics none \
  --serial pty \
  --console pty \
  --import \
  --noreboot

virt-customize -d centos-8.2-generic \
  --hostname centos-8-2-generic \
  --root-password password:password \
  --timezone Asia/Tokyo \
  --selinux-relabel

virsh start centos-8.2-generic
virsh console centos-8.2-generic

parted -l
# Model: Virtio Block Device (virtblk)
# Disk /dev/vda: 10.7GB
# Sector size (logical/physical): 512B/512B
# Partition Table: msdos
# Disk Flags:
#
# Number  Start   End     Size    Type     File system  Flags
#  1      1049kB  8390MB  8389MB  primary  xfs          boot

df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/vda1       7.9G  1.3G  6.6G  16% /

getenforce
# Enforcing

cat /proc/cmdline | tr ' ' '\n'
# BOOT_IMAGE=(hd0,msdos1)/boot/vmlinuz-4.18.0-193.6.3.el8_2.x86_64
# root=UUID=7295907d-61c6-49b5-8687-5a6ae8855f6b
# ro
# console=ttyS0,115200n8
# no_timer_check
# net.ifnames=0
# crashkernel=auto

さいごに

cloud.centos.org なら cloud-init が有効なので meta-data と user-data の ISO を用意できるのならカスタマイズは柔軟です。ただ KVM なら virt-builder や virt-customize でカスタマイズするほうが手っ取り早いので cloud-init は別になくても良いかもしれません。

cloud.centos.org のイメージのほうがパーティション 1 つだけで男前ですが、サイズが 10GB もあって大きすぎ感あります。小さいものを大きくするのは簡単でもその逆は難しいので、イメージのサイズはもっと小さく作成されているほうが嬉しいです。

virt-builder の方はパーティションがいくつか分かれています。ベアメタルサーバならともかく仮想サーバならスワップ用にパーティションを切らなくてもスワップ用のボリュームをアタッチすれば良いと思うし、LVM するわけでもないので /boot 分けなくても良いと思うし、ルートボリュームがそんなでかいサイズになることはまず無いので GPT じゃなくせば bios_grub も必要ないと思うし(でかいディスクがほしければ別途でかいデータボリュームをアタッチする)、個人的には 1 パーティションだけになっている方が好みです。

オフィシャルのネームバリューもあるので当面は cloud.centos.org のイメージを使っておこうと思います。