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


前提


ドキュメント


ハッシュ化パスワードの準備

python -c \
  'import crypt,getpass; pw=getpass.getpass(); print(crypt.crypt(pw) \
   if (pw==getpass.getpass("確認: ")) else exit())'
# 出力例
$6$PJT7Bq5loUD0k2X6$64ZfEV040jfBFaBftVss37LDNCPQMIQDwxd6d32DBHCcsOdZg40vT8ZwaAzAgKK.6sDhL86wUQP.t37eGP.Q0/

キックスタートファイル: CentOS7 NATモード

# c7-server.ks

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


# キーボード
keyboard --vckeymap=jp --xlayouts=jp
# 言語(日本語はテキストモードのインストール中は非対応)
lang ja_JP.UTF-8
# タイムゾーン
timezone Asia/Tokyo


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


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


# ブートローダ: KVMの仮想ディスクは通常vdaという名前
bootloader --location=mbr --boot-drive=vda
# パーティション: 自動
autopart --type=plain
clearpart --drives=vda --initlabel


# パッケージ
%packages
# Environment Group: 最小限のインストール
@^minimal
%end

# Kdump無効
%addon com_redhat_kdump --disable
%end

# キックスタート前スクリプト
# ログ場所(再起動後): /var/log/anaconda/
%pre
echo "-----------Kickstart pre-----------"
sleep 1
%end

# キックスタート後スクリプト(ユーザ作成後)
# chroot環境
%post
echo "-----------Kickstart post-----------"

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

# アップデート
yum --assumeyes update

# スタートアップファイル
echo 'alias hello="echo Hello, Kickstart♪"' >> /home/alice/.bashrc
echo "-----------Kickstart post end-------"
%end

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

ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/vda3        6.2G  1.3G  4.9G   21% /
/dev/vda1       1014M  159M  856M   16% /boot

virt-installの実行

変数例

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

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

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

# ISOファイル・ロケーション
iso=CentOS-7-x86_64-DVD-1908.iso
location=/path/to/$iso

# キックスタート・ファイル名
ks_name=c7-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 "inst.ks=file:/$ks_name console=tty0 console=ttyS0" \
  --noautoconsole && virsh console $name # そのままコンソール接続

デスクトップをインストールするとき


NATモードではなく、ブリッジ指定のとき