こんな感じに centos8.ks.cfg
を作成して、
#version=RHEL8 cmdline url --url=http://ftp.riken.jp/Linux/centos/8.1.1911/BaseOS/x86_64/os/ lang en_US.UTF-8 keyboard --vckeymap=jp --xlayouts=jp timezone Asia/Tokyo --isUtc --ntpservers=192.168.2.2 network --activate --device=link --noipv6 --bootproto=dhcp zerombr clearpart --all --initlabel bootloader --location=mbr --boot-drive=vda part / --label=root --grow --asprimary --ondisk=vda rootpw --plaintext password skipx selinux --disabled firewall --disabled firstboot --disabled services --enabled=chronyd --disabled=kdump,auditd poweroff %packages @^minimal-environment %end
CentOS-8.1.1911-x86_64-boot.iso を適当なディレクトリにダウンロードした後、次のようにサクッと作成できます。
# ダウンロード wget http://ftp.riken.jp/Linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-boot.iso -O /iso/CentOS-8.1.1911-x86_64-boot.iso # 論理ボリューム作成 lvcreate vg99 -L 8G -n vm.centos8 # セットアップ virt-install \ --name centos8 \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel8.1 \ --boot hd \ --disk path=/dev/vg99/vm.centos8,bus=virtio \ --network network=default,model=virtio \ --graphics none \ --serial pty \ --console pty \ --location /iso/CentOS-8.1.1911-x86_64-boot.iso \ --initrd-inject /tmp/centos8.ks.cfg \ --extra-args "inst.ks=file:/centos8.ks.cfg inst.stage2=cdrom: console=ttyS0 net.ifnames=0 biosdevname=0" \ --noreboot # 起動してコンソールに接続 virsh start centos8 virsh console centos8
RPM パッケージが含まれない CentOS-8.1.1911-x86_64-boot.iso
を使っているので、パッケージのダウンロードのためにやや時間かかります。
CentOS-8.1.1911-x86_64-dvd1.iso
を使う場合は ks.cfg
の url
の行を cdrom
とかに変更すればたぶん大丈夫です。
ダメだった
CentOS 7.7 の virt-install
だと↑でサクッと入れられたのですが、CentOS 8.1 の virt-install
だとダメでした。
ERROR Error validating install location: Could not find an installable distribution at '/iso/CentOS-8.1.1911-x86_64-boot.iso' The location must be the root directory of an install tree. See virt-install man page for various distro examples.
virt-install --debug
とかで見てみたところ、CentOS-8.1.1911-x86_64-boot.iso
のメディアに .treeinfo
が無いことが原因のようです。
--location
ではなく --cdrom
ならこのエラーは出ませんが、それだと --initrd-inject
や --extra-args
が効かないのでキックスタートさせるのが面倒になります。
試していませんが CentOS-8.1.1911-x86_64-dvd1.iso
なら .treeinfo
が含まれているので大丈夫です。
解決方法
.treeinfo
から initrd.img
と vmlinuz
の位置を読んでいるだけなので、--location
でそれらの位置も一緒に指定すれば OK です。
virt-install \ --name centos8 \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel8.1 \ --boot hd \ --disk path=/dev/vg99/vm.centos8,bus=virtio \ --network network=default,model=virtio \ --graphics none \ --serial pty \ --console pty \ --location /iso/CentOS-8.1.1911-x86_64-boot.iso,kernel=isolinux/vmlinuz,initrd=isolinux/initrd.img \ --initrd-inject /tmp/centos8.ks.cfg \ --extra-args "inst.ks=file:/centos8.ks.cfg inst.stage2=cdrom: console=ttyS0 net.ifnames=0 biosdevname=0" \ --noreboot
別の解決方法
man virt-install
したら↑の --location
に kernel
や initrd
を指定する方法が書いていたのでこれでええやんと思ったんですが、それに気づく前に試行錯誤したメモ。
CentOS-8.1.1911-x86_64-boot.iso
に .treeinfo
を追加したメディアを作れば大丈夫です。
mount /iso/CentOS-8.1.1911-x86_64-boot.iso /mnt -o loop rsync -av /mnt/ /tmp/CentOS-8.1.1911-x86_64-boot/ curl http://ftp.riken.jp/Linux/centos/8.1.1911/BaseOS/x86_64/os/.treeinfo > /tmp/CentOS-8.1.1911-x86_64-boot/.treeinfo mkisofs \ -o /iso/CentOS-8.1.1911-x86_64-boot-x.iso \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -r -J -v \ /tmp/CentOS-8.1.1911-x86_64-boot/ rm -fr /tmp/CentOS-8.1.1911-x86_64-boot/ umount /mnt virt-install \ --name centos8 \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel8.1 \ --boot hd \ --disk path=/dev/vg99/vm.centos8,bus=virtio \ --network network=default,model=virtio \ --graphics none \ --serial pty \ --console pty \ --location /iso/CentOS-8.1.1911-x86_64-boot-x.iso \ --initrd-inject /tmp/centos8.ks.cfg \ --extra-args "inst.ks=file:/centos8.ks.cfg inst.stage2=cdrom: console=ttyS0 net.ifnames=0 biosdevname=0" \ --noreboot
あるいは ISO は使わずに --location
も URL を指定すれば大丈夫です。ただこの方法だと images/install.img
のようなでかいファイル(509M)までダウンロードされるのでめちゃくちゃ時間かかります。
virt-install \ --name centos8 \ --hvm \ --virt-type kvm \ --ram 2048 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel8.1 \ --boot hd \ --disk path=/dev/vg99/vm.centos8,bus=virtio \ --network network=default,model=virtio \ --graphics none \ --serial pty \ --console pty \ --location http://ftp.riken.jp/Linux/centos/8.1.1911/BaseOS/x86_64/os/ \ --initrd-inject /tmp/centos8.ks.cfg \ --extra-args "inst.ks=file:/centos8.ks.cfg console=ttyS0 net.ifnames=0 biosdevname=0" \ --noreboot