vagrant-libvirtでオリジナルvagrant boxを作成する

Table of Content

広告

はじめに

LVMルートのCentOSのvagrant boxが必要になりました。

vagrantでboxを作成するにはvagrant packageで仮想マシンからboxを作成するのが一般的ですが、virtual boxでしか作成することができません。vagrant-libvirtでオリジナルboxを作成した試行錯誤の記録です。

CentOS8インストール

virt-installでCentOS8をインストールします。ベース環境は「最小限のインストール」で構築します。rootのパスワードは「vagrant」です。

virt-install \
--connect=qemu:///system \
--name=vagrant-centos8 \
--hvm \
--cdrom=/home/abtc/Downloads/CentOS-8.2.2004-x86_64-dvd1.iso \
--disk pool=default,size=40,format=qcow2,bus=virtio \
--vcpus=1 \
--ram=1024 \
--network bridge=br0,model=virtio \
--os-type=linux \
--graphics spice,listen=0.0.0.0

Vagrant Boxの設定

オフィシャルのドキュメントを参考に各種設定を行います。仮想マシンにrootでログインし、vagrantユーザの作成やsudoの設定を行います。

ネットワークの設定

nmcli c s
nmcli c m ens3 connection.autoconnect yes

vagrantユーザの作成

groupadd -g 1000 vagrant
useradd -g vagrant -u 1000 -s /bin/bash -m vagrant
echo vagrant | passwd --stdin vagrant

visudoでvagrantユーザの設定を追加

## Vagrant User Setting
Defaults:vagrant !requiretty
vagrant       ALL=(ALL)     NOPASSWD:ALL

vagrantユーザでログインしてsshの設定

install -m 0700 -d ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

仕上げを行う

sudo dnf clean all
sudo rm -rf /var/log/*
sudo rm -rf /tmp/*
sudo rm /root/.bash_histroy
history -c
sudo systemctl poweroff

Vagrant Boxの作成

出来上がった仮想マシンからVagrant Boxを作成していきます。

mkdir vagrant-centos8
cd vagrant-centos8

出来上がったqcow2のイメージをbox.imgでコピーする。

sudo cp /var/lib/libvirt/images/vagrant-centos8.qcow2 box.img
sudo chown $(id -u):$(id -g) box.img

metadata.jsonを作成する

{"provider": "libvirt", "format": "qcow2", "virtual_size": 100}

Vagrantfileを作成する

Vagrant.configure('2') do |config|
        config.vm.synced_folder ".", "/vagrant", type: "rsync"
        config.vm.provider :libvirt do |libvirt|
                libvirt.driver = 'kvm'
                libvirt.connect_via_ssh = false
                libvirt.username = 'root'
                libvirt.storage_pool_name = 'default'
        end
end

作成したファイルをtarで固めてboxを追加する

tar zcvf local-centos8.box ./metadata.json ./Vagrantfile box.img
vagrant box add local-centos8.box --name local/centos8

最後に

後は出来上がったvagrant boxをvagrant init local/centos8vagrant upで動作確認します。

Virtual Boxでの作成例は沢山ありますが、vagrant-libvirtでの作成例はあまり無いので、参考になれば幸いです。