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

更新


ホストCentOS8で非推奨になった文法


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

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

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

# c8-server.ks

# インストール画面: テキストモード
text
# 光学ドライブからインストール
cdrom
# インストール後: 電源停止
poweroff


# キーボード
keyboard --vckeymap=jp --xlayouts=jp
# 言語(ただし、テキストモードのインストール中表示は英語)
lang ja_JP --addsupport=en_US
# タイムゾーン
timezone Asia/Tokyo


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


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


# パーティション: 自動
clearpart --all --initlabel --disklabel=gpt
autopart --type=plain
# ブートローダ
# シリアル・仮想コンソール: GRUBシェルもLinuxブート中も利用、/etc/default/grubにも反映
# KVMの仮想ディスクは通常vdaという名前
bootloader --append="console=tty0 console=ttyS0" --boot-drive=vda


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

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


# 各段階のスクリプト: ログ場所(再起動後) /var/log/anaconda/ks-script-*.log

# キックスタートファイル読込直後のスクリプト
# ネットワークやパーティションの特別な設定(例外的に)
%pre
echo "-----------Kickstart pre-----------"
sleep 1
%end

# インストール直前のスクリプト
# ネットワーク、パーティション(指示通りの)設定後
%pre-install
echo "---------Kickstart pre-install-----"
sleep 1
%end

# キックスタート後スクリプト(ユーザ作成後)
# chroot環境
%post
echo "-----------Kickstart post-----------"
# アップデート
dnf -y upgrade
# スタートアップファイル
echo 'alias hello="echo Hello, Kickstart♪"' >> /home/alice/.bashrc
echo "-----------Kickstart post end-------"
%end

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

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda4       8.0G  1.5G  6.6G  19% /
/dev/vda2      1014M  212M  803M  21% /boot

lang ja_JPの結果

localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp

virt-installの実行

変数例

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

# メモリサイズMiB
memory=1024
# ディスクサイズGiB
size=10
# CPUの数
cpu=2
# Linux種類
linux=centos8

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

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

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

# (訂正): 「inst.lang=jp」を間違いのため削除済み