KVM: キックスタートでゲストUbuntuを完全自動インストール


前提


ドキュメント


キックスタートファイル: Ubuntu18.04 NATモード

注意点

# u18-server.ks

# インストール画面: テキストモード
text
# ISOによるインストール
install
cdrom
# サーバインストール: スキップ X Window
skipx
# インストール後: 電源停止
poweroff


# キーボード
keyboard jp
# 言語: 日本語(ja_JP)にすると途中でループするため、%postで直す
lang en_US
# インストール画面の言語
langsupport en_US
# タイムゾーン
timezone Asia/Tokyo


# ネットワーク: DNSはvirbr0(例192.168.122.0/24)からアクセスできること
network --bootproto=dhcp --device=eth0 --hostname=guest0


# 認証: パスワードはSHA512でハッシュ化
auth --enableshadow
# rootパスワード無効
rootpw --disabled
# ユーザ: alice
user alice --iscrypted --fullname=alice --password=ハッシュ化パスワード


# ブートローダ: KVMの仮想ディスクは通常vdaという名前
bootloader --location=mbr
zerombr yes
# パーティション: 自動
clearpart --all --initlabel
partition / --fstype ext4 --ondisk=vda --recommended
partition swap --ondisk=vda --recommended
autostep
# 書込自動
preseed partman/choose_partition select finish
preseed partman/confirm_nooverwrite boolean true


# 自動アップデートなし: none
# (セキュリティだけ更新なら: unattended-upgrades)
preseed pkgsel/update-policy select none
preseed base-installer/install-recommends boolean false


# キックスタート前スクリプト
%pre
echo "-----------Kickstart pre-----------"
echo "pre log" >> /var/log/my-pre.log # 再起動後: /var/log/installer/my-pre.log
sleep 1
#%end <- Ubuntuでは使わない


# パッケージ
%packages
# 最小限のインストール
@ubuntu-minimal
# SSHで入りたい
openssh-server
# ホストからの電源管理
acpid
# 日本語
language-pack-ja


# キックスタート後スクリプト(ユーザ作成前)
# ログ場所(再起動後): /var/log/installer/syslog
%post
echo "-----------Kickstart post-----------"

# ロケール: 日本語
echo "LANG=ja_JP.UTF-8" > /etc/default/locale
LANG=ja_JP.UTF-8 # ロケール適用
# キーマップ: 日本語キーボード(仮想コンソール対応)
echo "XKBLAYOUT=jp" > /etc/default/keyboard

# シリアル・仮想コンソール: GRUBシェルもLinuxブート中も利用
cat << END >> /etc/default/grub
# 追記(後方優先)
GRUB_TERMINAL="console serial"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0"
END
grub-mkconfig --output /boot/grub/grub.cfg

# アップデート
{
apt-get -q --yes update && apt-get -q --yes upgrade
} > /var/log/my-update.log # 再起動後もここ

# スタートアップファイル
echo 'alias hello-kickstart="echo Hello, Kickstart♪"' >> /etc/skel/.bashrc

echo "-----------Kickstart post end-------"

自動パーティションの結果例

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       7.9G  1.9G  5.6G  26% /

virt-installの実行

変数例

# ゲストの名前: 重複しないこと(virsh list --all)
name=u18-server
# プールパス: ボリューム保存ディレクトリ
pool=/path/to/pool
# ボリュームパス: 拡張子例.qcow2
path=$pool/$name.qcow2

# メモリサイズMiB
memory=512
# ディスクサイズGiB
size=8
# CPUの数
cpu=2
# Linux種類
linux=ubuntu18.04

# ネットワーク
network="network=default" # NATモード

# ISOファイル・ロケーション
iso=ubuntu-18.04.3-server-amd64.iso
location=/path/to/$iso

# キックスタート・ファイル名
ks_name=u18-server.ks
# ホストパス
ks_path=/path/to/$ks_name

実行、コンソール接続

virt-install --name $name  --memory $memory  --vcpus $cpu \
  --os-variant $linux  --noreboot  --network $network \
  --disk path=$path,size=$size \
  --location $location  --initrd-inject $ks_path \
  --extra-args "ks=file:/$ks_name console=tty0 console=ttyS0" \
  --noautoconsole && virsh console $name # そのままコンソール接続