だいぶ前に Qiita で virt-builder でゲストを作って virt-resize でリサイズして virt-customize でカスタマイズ という記事を書いていて。
virt-builder
ふむふむ便利そう、だがしかしなんか気に入らないので普通にゲスト作るときはやっぱ Kickstart だわ
と思ったはずなのだけど、なにが気に入らなかったのか忘れてしまったのでそのメモ。
virt-builder
でサクッとゲストを作る
virt-builder
という libvirt 管理下の KVM などの仮想環境にサクッとゲストを作るコマンドがあります。libguestfs-tools-c
パッケージに含まれているのでインストールします。
yum -y install libguestfs-tools-c
まずはゲスト用のボリュームを作成します。
lvcreate vg1 -n vm.ore-no-virt -L 6G
ゲストのイメージの中身を弄るためのスクリプトを作ります。
cat <<'__RUN__'> run.sh set -eux # selinux sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config # ngyuki useradd ngyuki -m -g wheel # authorized_keys mkdir -p /home/ngyuki/.ssh curl -fsSL https://github.com/ngyuki.keys | awk 1 > /home/ngyuki/.ssh/authorized_keys chown -R ngyuki: /home/ngyuki/.ssh chmod 700 /home/ngyuki/.ssh chmod 600 /home/ngyuki/.ssh/authorized_keys # sudoers wheel tee /etc/sudoers.d/wheel <<EOS %wheel ALL=(ALL) NOPASSWD: ALL Defaults:%wheel env_keep += SSH_AUTH_SOCK Defaults:%wheel !requiretty Defaults:%root !requiretty EOS # sudoers chmod chmod 0440 /etc/sudoers.d/wheel # ipv6 tee /etc/sysctl.d/ipv6-disable.conf <<EOS net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 EOS # sshd sed -i '/UseDNS /c UseDNS no' /etc/ssh/sshd_config sed -i '/PermitRootLogin /c PermitRootLogin yes' /etc/ssh/sshd_config sed -i '/AddressFamily /c AddressFamily inet' /etc/ssh/sshd_config # postfix postconf -e inet_protocols=ipv4 __RUN__
virt-builder
でゲストのイメージを作ります。1回目はイメージのテンプレートがダウンロードされるので結構時間がかかります。2回目以降はキャッシュされているので早いです。
virt-builder centos-7.4 \ --output /dev/vg1/vm.ore-no-virt \ --arch x86_64 \ --hostname ore-no-virt \ --root-password disable \ --timezone Asia/Tokyo \ --run run.sh \ --firstboot-command ' nmcli con modify eth0 \ connection.autoconnect yes \ ipv4.method manual \ ipv4.addresses 10.12.16.99/23 \ ipv4.gateway 10.12.16.1 \ ipv4.dns 10.12.16.2 \ ipv6.method ignore nmcli con up eth0 '
イメージを元に libvirt にインポートします。
virt-install \ --name ore-no-virt \ --hvm \ --virt-type kvm \ --ram 1024 \ --vcpus 1 \ --arch x86_64 \ --os-type linux \ --os-variant rhel7 \ --boot hd \ --disk path=/dev/vg1/vm.ore-no-virt \ --network network=back \ --graphics none \ --serial pty \ --console pty \ --import \ --noreboot
ゲストを開始して SSH でログインできます。
virsh start ore-no-virt
ssh ngyuki@10.12.16.99
気に入らなかった理由
イメージのテンプレートのパーティション構成がなんか好きではなかったので使ってなかったんでした。
sudo parted -l /dev/vda #=> Model: Virtio Block Device (virtblk) #=> Disk /dev/vda: 6442MB #=> Sector size (logical/physical): 512B/512B #=> Partition Table: msdos #=> Disk Flags: #=> #=> Number Start End Size Type File system Flags #=> 1 1049kB 1075MB 1074MB primary xfs boot #=> 2 1075MB 1720MB 645MB primary linux-swap(v1) #=> 3 1720MB 6442MB 4723MB primary xfs
今日日仮想サーバなら /boot
とか無くていいしスワップも必要なら別ディスクとしてアタッチするし、1つのディスクで複数パーティション切るぐらいなら複数のディスクをアタッチすればいいんじゃね?と思うので、仮想サーバでは基本的に1ディスク=1パーティションとしてます。
ので、この方法での環境構築はたぶんやりません。
この記事、元は 2018/03 ごろに書いてたものです。