LoginSignup
2
3

More than 3 years have passed since last update.

virt-install で KVM に CentOS8 を無人インストール

Last updated at Posted at 2019-09-28

virt-install を使って CentOS8 の VMを作る時のメモです。

CentOS8 のISOをダウンロードする

どこかから適当にダウンロードしてください。
2019/9 時点では CentOS-8-x86_64-1905-dvd1.iso

kickstart.cfg を作る

無人インストールの応答ファイルである kickstart.cfg を作ります。
{{ }} は適宜置き換えてください。

install
cmdline
eula --agreed
reboot

# DVDイメージからインストールする
cdrom

# use AppStream repo
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream

# テキストモード
text

# skip X configuration
skipx

# Keyboard layouts
# キーボードレイアウトはjp, us
keyboard --vckeymap=jp106 --xlayouts='jp','us'

# System language
lang en_US.UTF-8

# ネットワーク設定
# `net.ifnames=0 biosdevname=0` を指定しているなら、--device=eth0。
# 指定していないなら、--device=ens0。
network  --bootproto=static --ip={{ IP_paddress }} --netmask={{ netmask }} --device=eth0 --noipv6 --activate

# DHCP使う場合
#network  --bootproto=dhcp --device=eth0 --noipv6 --activate



# ホスト名
# e.g.) yourmachine.example.com
network  --hostname={{ hostname }}

# System services
services --disabled="chronyd"

# System timezone
timezone Asia/Tokyo --isUtc --nontp

# use vda only
ignoredisk --only-use=vda

# パーティショニング
# LVM構成のおまかせパーティション。
clearpart --all --initlabel
autopart --type=lvm

# Root password
# `auth` の `--passalgo=` で指定したアルゴリズムで暗号化した文字列を渡す
rootpw --iscrypted "{{ encrypted_password }}"

# 平文で指定するなら以下の文を使う
#rootpw --plaintext "{{ cleartext_password }}"

# System authorization information
auth --enableshadow --passalgo=sha512

# SELinux 無効化
selinux --disabled

# firewalld 無効化
firewall --disabled

# 初回起動後のセットアップを無効化
firstboot --disabled

%packages
@^minimal-environment
kexec-tools

@core
# インストールのときに入れてしまう rpm を指定する
# e.g)
# dnf-utils
# chrony
# wget
%end

%post

# インストール直後から sshの鍵認証でログインできるように
# authorized_key を入れておく。
# 不要ならこのブロック削除。
# <ここから>
mkdir -p /root/.ssh
chmod 700 /root/.ssh
cat <<EOF > /root/.ssh/authorized_keys
{{ authorized_key }}
EOF
chmod 600 /root/.ssh/authorized_keys
# <ここまで>

%end

VMストレージのイメージファイルを作る

qemu-img で qcow2 形式のイメージファイルを作ります。

qemu-img create -f qcow2 vmimage.qcow2 100G

100G は最大サイズです。いきなり 100ギガバイトの qcow2 ファイルができるわけではありません。

インストール

以下の素材がそろったらインストール。
- kickstart.cfg
- qcow2 イメージファイル
- CentOS8 のISOイメージファイル

libvirt-4.5.0 では、まだ centos8.0 が無かったので、--os-variant centos7.0 にしてます。

virt-install \
    --name {{ vm_name }} \
    --initrd-inject {{ /path/to/kickstart.cfg }} \
    --hvm \
    --virt-type kvm \
    --ram {{ memory_in_megabytes }} \
    --vcpus {{ number_of_cpus }} \
    --arch x86_64 \
    --cpu kvm64 \
    --os-type linux \
    --os-variant centos7.0 \
    --disk path={{ /path/to/qcow2 }},format=qcow2,bus=virtio,cache=none \
    --location {{ /path/to/CentOS-8-x86_64-1905-dvd1.iso }} \
    --serial pty \
    --network bridge={{ ethernet_device_name_on_kvm_host }} \
    --extra-args "edd=off console=tty0 console=ttyS0,115200 ks=file:/kickstart.cfg" \
    --force

イーサネットデバイスを eth0 にしたいなら、--extra-argsnet.ifnames=0 biosdevname=0 をつけてください。
つけない場合、ens0 です。正確には、predictable network interface name です。
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

virt-install \
    --name {{ vm_name }} \
    --initrd-inject {{ /path/to/kickstart.cfg }} \
    --hvm \
    --virt-type kvm \
    --ram {{ memory_in_megabytes }} \
    --vcpus {{ number_of_cpus }} \
    --arch x86_64 \
    --cpu kvm64 \
    --os-type linux \
    --os-variant centos7.0 \
    --disk path={{ /path/to/qcow2 }},format=qcow2,bus=virtio,cache=none \
    --location {{ /path/to/CentOS-8-x86_64-1905-dvd1.iso }} \
    --serial pty \
    --network bridge={{ ethernet_device_name_on_kvm_host }} \
    --extra-args "edd=off net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,115200 ks=file:/kickstart.cfg" \
    --force

インストールが終わったら、VMが再起動されて、virt-install が終了し、コマンドプロンプトが戻ってきます。
KVMホストの性能にも依存しますが、20秒程度でVMが起動してsshログインできるようになります。

トラブルシュート

virt-installしたのとは別のターミナルで、VMにコンソール接続するとインストールの進捗状況を見ることができます。

virsh console {{ vm_name }}

10分たってもインストールが終わらなかったら、無人インストールがとまっていないかコンソールで見てみて、kickstart.cfg を修正してください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3