KVMで仮想マシンを立ててcloud-initで初期化する

はじめに

Ubuntu上のKVMを使って、新たにUbuntu仮想マシンを立ててcloud-initで初期化する手順を記載します。

環境

  • Ubuntu20.04(ホストOS)
  • Ubuntu20.04(ゲストOS)
  • KVMはインスール済

環境構築手順

Cloud Imageをダウンロードする

rootになり、ダウンロード先のフォルダを作成する

$ sudo -i
# mkdir -p /var/lib/libvirt/images
# cd /var/lib/libvirt/images

次に Cloud Imageをダウンロードする。 バージョンの確認方法は次のリンクを参考に実施する。 inorio.hatenablog.com

# curl -o ubuntu-20.04.1-server-cloudimg-amd64.img http://cloud-images-archive.ubuntu.com/releases/focal/release-20210125/ubuntu-20.04-server-cloudimg-amd64.img 

VM用のディスクを作成する。

ダウンロードしてきたイメージファイルからそのまま起動するとディスク消費量が増えるため、QCOW2形式で差分ディスクが作成し、それをベースにVMを動作させる

#  qemu-img create -F qcow2 -b ubuntu-20.04.1-server-cloudimg-amd64.img -f qcow2 test.qcow2 50G

rootによる操作は終了する。

# exit
$ 

cloud-initで使用するmeta-dataとuser-dataを作成する

今回、ダウンロードしたCloud Imageではcloud-initという技術を使用して起動時に、ユーザアカウントなどの初期化処理を実施することができる。 cloud-initの構成要素であるmeta-dataとuser-dataを使用して初期化処理を行う。

まず、はじめに作業用ディレクトリを作成する

$ cd ~
$ mkdir -p cloud-init
$ cd cloud-init/

access.redhat.com を参考にmeta-dataとuser-dataを作成する。

$ VMNAME=test
$ mkdir -p $VMNAME
$ pushd $VMNAME
$ cat > user-data <<-EOS
#cloud-config
password: ubuntu
chpasswd: {expire: False}
ssh_pwauth: True
EOS

$ cat > meta-data <<-EOS
instance-id: $VMNAME
local-hostname: $VMNAME
EOS

$ genisoimage -output ../cidata-${VMNAME}.iso -volid cidata -joliet -rock user-data meta-data

virt-installコマンドによるインスール

virt-installコマンドを使用して、VMをインスールする。 virt-installコマンドのオプションは適当に設定する。

$ VMNAME=test
$ IMAGE_FILE=/var/lib/libvirt/images/${VMNAME}.qcow2
$ CIDATA_FILE=$PWD/cidata-${VMNAME}.iso

$ sudo virt-install \
    --name $VMNAME \
    --ram 49152 \
    --vcpus 16 \
    --arch x86_64 \
    --os-type linux \
    --os-variant ubuntu18.04 \
    --hvm \
    --virt-type kvm \
    --file $IMAGE_FILE \
    --cdrom $CIDATA_FILE \
    --boot hd \
    --network bridge:br0 \
    --network network:default \
    --graphics none \
    --serial pty \
    --console pty \
--autostart --noreboot

数分待ち、インスールが完了すると、ログインを要求する画面が表示され、user-dataで設定したパスワードでVMにログインを行うことができる。

(省略)
5gran-5gc login: ubuntu ←入力
Password:  ubuntu ←入力
$