手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 8 Kickstart インストール

目次に戻る

概要

CentOS8のインストールをkickstartを用いて自動化します。

前提条件

OS

CentOS Stream 8を使用します。

所感

CentOS-Stream-8-x86_64-20210402-dvd1.isoを使用してkickstartインストールを試しましたが、物理サーバーだけkickstartインストールができませんでした。違いはUSBインストールメディアを使うか(物理)、ISOイメージを直接指定するか(仮想マシン)だけですが、明確な情報は見つけられていません。この為、物理サーバーに関しては一時的にCentOS8.2のISOを使用しています(8.3でも不可)。仮想マシンのインストールにISOイメージを指定する場合は問題ないため、作成したUSBインストールメディア、またはそれを参照するインストーラーに何らかの問題があるのではと想定していますが、今後のバージョンアップで改善するかもしれません。

kickstartファイルの作成

kickstartはインストーラーに指示する情報を定義した単なるファイルです。手作業でインストールを行うと/root/anaconda-ks.cfgが作成されるので、それを参考にカスタマイズするのが良いでしょう。

kickstartファイルのサンプル

下記の例はanaconda-ks.cfgをベースに、できるだけ汎用性が高くなるように整理して作成しています。記載順序もできるだけ合わせていますが、kickstartはあまり記載順序は関係しないようですので分かり易く変更して問題ないと思います。anaconda-ks.cfgのコメント行は削除しています。

text
repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream

%post
systemctl enable cockpit.socket
mkdir /root/.ssh
echo "ssh public key" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
%end

%packages
@^server-product-environment
kexec-tools
cockpit-pcp
%end

keyboard --xlayouts='jp'
lang ja_JP.UTF-8

network --bootproto=static --device=link --gateway=192.168.13.2 --ip=192.168.13.10 --netmask=255.255.255.0 --nameserver=192.168.13.2 --ipv6=auto --activate
network --hostname=centos

cdrom
firstboot --disable
skipx

ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
part /boot/efi --fstype="efi" --ondisk=sda --size=1024 --fsoptions="defaults,uid=0,gid=0,umask=077,shortname=winnt"
part pv.1 --fstype="lvmpv" --ondisk=sda --size=1 --grow
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup cl --pesize=4096 pv.1
logvol / --fstype="xfs" --grow --size=1 --name=root --vgname=cl
logvol swap --fstype="swap" --size=4096 --name=swap --vgname=cl

timezone Asia/Tokyo --isUtc
rootpw --plaintext password

%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
text
本例ではtextモードでのインストールを指定しています。GUI環境の場合はgraphicalを指定します(textモードでGUIパッケージを選択してインストールも可能ですが起動時はGUIが起動しないためランレベルの変更が必要です)。
repo
CentOS Stream 8のデフォルト値です。
%post~%end
インストール後に自動で実行するコマンドを書きます。上記の例ではcockpitの自動起動設定をしています。また、SSHの公開鍵も設定しています。「ssh public key」の個所を公開鍵に置き換えるだけです。インストール時点で公開鍵をインポートすると、いちいちssh-copy-idをする必要が無いので楽だと思います。必要に応じて設定しましょう。
%packages~%end
インストール対象パッケージです。@^server-product-environmentは手動インストールの「ソフトウェアの選択」で「サーバー」を選択した場合の設定値です。「ワークステーション」の場合は@^workstation-product-environmentに変更します。@^はパッケージグループの意味ですね。kexec-toolsはkdumpを使用する場合に必要です。本例ではkdumpを有効としています。cockpit-pcpは追加のパッケージの例です。このようにDNFで指定するパッケージ名を記載します。
keyboard
キーボード設定です。
lang
言語設定です。
network
ネットワーク設定です。インストール時点でネットワーク設定を行いたい場合に設定しますが、複数のネットワークアダプタを持つ環境ではどのネットワークアダプタに対するネットワーク設定なのか識別できない為、一度、手動でインストールを行って割り当てられるネットワークアダプタのデバイス名を確認し、–deviceにデバイス名を設定します。
cdrom
インストール元です。おそらくネットワークインストールでは値が異なると思います。物理サーバーへUSBメモリを使用してインストール、仮想マシンへISOイメージを使用してインストールする場合もcdromになります。
firstboot
firstbootの設定です。firstbootはGUI環境で初回起動時にライセンスの合意やユーザー作成を要求します。CLI環境ではそもそも不要、GUI環境でもこの設定で無効にすることができます。
skipx
Xを設定しません。GUI環境では不要な設定です。
ignoredisk
指定したディスクをインストール対象から除外します。本例では全てを除外した上でsdaのみ対象とする設定です。ネットワークアダプタと同じくデバイス名は一度手動インストールして確認しておきましょう。
clearpart
sdaのパーティションを全て削除します。
part
sdaに対するパーティションの設定です。本例では/boot/efi、/boot、pv.1(LVMのPhysical Volume)を作成しています。pv.1のサイズは–growオプションで割り当て可能な最大値を設定しています。補足として、ここで指定しているPVの番号(pv.1)はインストール後にanaconda-ks.cfgで確認すると変わりますが特に影響はありません。
volgroup
LVMのVolume Groupを作成しています。名前はclでPhysical Volumeはpv.1です。
logvol
LVMのLogical volumeを作成しています。本例では/とswapを作成しています。/のサイズは–growオプションで割り当て可能な最大値を設定しています。
timezone
タイムゾーンの設定です。
rootpw
rootユーザーのパスワード設定です。本例では–plaintextで平文のパスワードを指定していますが、ハッシュ値でも指定可能です。
%addon~%end
CentOS Stream 8のデフォルト値です。kdumpが有効であることが確認できます。
%anaconda~%end
CentOS Stream 8のデフォルト値です。パスワードポリシーが設定されています。

kickstartで複数のディスクを設定する場合

SSD(sda)とHDD(sdb)を1台ずつ搭載したサーバーで、SSDをシステム領域、HDDをデータ領域として使用し、且つLVMを使用する場合は下記のディスク設定となります。

ignoredisk --only-use=sda,sdb
clearpart --all --initlabel --drives=sda,sdb
part /boot/efi --fstype="efi" --ondisk=sda --size=1024 --fsoptions="umask=0077,shortname=winnt"
part pv.1 --fstype="lvmpv" --ondisk=sda --size=1 --grow
part pv.2 --fstype="lvmpv" --ondisk=sdb --size=1 --grow
part /boot --fstype="xfs" --ondisk=sda --size=1024
volgroup cl1 --pesize=4096 pv.1
volgroup cl2 --pesize=4096 pv.2
logvol / --fstype="xfs" --size=1 --grow --name=root --vgname=cl1
logvol swap --fstype="swap" --size=4096 --name=swap --vgname=cl1
logvol /home --fstype="xfs" --size=1 --grow --name=home --vgname=cl2

kickstartでSELinuxを無効にする場合

何かと無効にされがちなSELinuxですが、SELinuxの利用を想定していないのであればインストール時点で無効にしておくと良いでしょう。

selinux --disabled

物理サーバーにkickstartでインストールする際の文字化け対策

物理サーバーにkickstartでインストールする際に日本語では出力が文字化けする為、LANG=Cにすると文字化けを回避できます。但し、最終的に日本語環境にする場合はインストール後に設定変更が必要です。私の場合はトラブルシューティング以外は文字化けしていても良いと思っているのでLANG=Cにはしていません。尚、KVM上の仮想マシンにkickstartを使用する場合は発生しません。

LANG=C

kickstartを使用したインストール

本例では作成したkickstartファイルをWebサーバーに配置してインストーラから参照する方法とします。192.168.13.88でWebサーバーが稼働しks-centos.cfg(kickstartファイル)が参照できる状態とします。尚、Webサーバー自体に特別な要件はありません。

ISOイメージからの起動とkickstartファイルの指定

ISOイメージから起動すると下記の画面になります。Install CentOS~にTABでカーソルを合わせ、eを押し、エディットモードに入ります。尚、BIOSの場合は少々画面が異なります。

quietの後に「inst.ks=http://192.168.13.88/ks-centos.cfg」を入力します。入力後はctrl+xを押します。DHCPが存在しない場合は「inst.ks=http://192.168.13.88/ks-centos.cfg ip=192.168.13.100 netmask=255.255.255.0 gateway=192.168.13.2」のようにIPアドレスの割り当ても含めます。

問題なければ下記のように自動インストールが進みます。VMware Workstation Pro上でのインストールなので文字化けしていますね。この文字化けを回避したいなら「LANG=C」が必要です。

目次に戻る

CentOS 8 Kickstart インストール

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る