Contents
概要
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」が必要です。