0.関連記事一覧
- KickStartによる自動インストールの説明
- その1 KickStartによるOS自動インストールの全体の流れ
- その2 ks.cfg設定ファイルの説明(このエントリー)
- その3 KickStartネットワーク構成
1.はじめに
この記事は、RHEL/fedoraのOS自動インストールを行うKickStartの設定ファイル(ks.cfg)の書き方の詳細です。ネットワーク設定、ディスク設定、パッケージ設定、ユーザ設定、を中心に編集頻度が高そうな項目を説明します。
2.ネットワーク設定
(1)スタティック設定例
enp0s3,enp0s8双方をstaticでネットワーク設定する場合の例です。
# Network information network --bootproto=static --device=enp0s3 --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.2 --nameserver=10.0.2.3 --noipv6 --activate network --bootproto=static --device=enp0s8 --ip=192.168.0.20 --netmask=255.255.255.0 --noipv6 --activate --nodefroute network --hostname=testserve
- "--bootproto=static"とすることで、静的設定になります。
- "--device"で、設定するデバイスを指定します。
- "--ip"、"--netmask="、"--gateway="でIP設定をします。
- "--nameserver"で、参照先DNSを指定します。DNSが複数ある場合は、"=x.x.x.x,y.y.y.y"とカンマで区切って指定します。
- "--noipv6"で、ipv6を無効化します。
- "--activate"を付けることで、boot時にデバイスが有効化されます。
- "--nodefroute "は、デフォルトGWと通信しないデバイスに設定します。
- "network --hostname=xxxx"で、ホスト名を設定します。
(2)DHCP設定例
enp0s3をDHCP設定に変更した例です。
# Network information network --bootproto=dhcp --device=enp0s3 --noipv6 --activate network --bootproto=static --device=enp0s8 --ip=192.168.0.20 --netmask=255.255.255.0 --noipv6 --activate --nodefroute network --hostname=testserver
bonding・vlanと組み合わせた構成は下記記事を参照して下さい。
nopipi.hatenablog.com
3.ディスク設定
インストール時のディスク構成(パーティション、LVM、ファイルシステムなど)を指定します。ディスク設定は、設計したディスク構成になるよう手動で組み直したほうが基本良さそうです。
(1)ブートディスク構成例*1
(2)上記構成例の場合のKickStart設定
# Specifies used disk for installation ignoredisk --only-use=sda # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel --drives sda # Disk partitioning information part pv.295 --fstype="lvmpv" --ondisk=sda --size=1 --grow part /boot --fstype="xfs" --ondisk=sda --size=500 --label=boot volgroup rootvg --pesize=4096 pv.295 logvol swap --fstype="swap" --size=256 --name=swaplv --vgname=rootvg logvol /home --fstype="xfs" --size=100 --name=homelv --vgname=rootvg --label="home" logvol / --fstype="xfs" --size=1 --grow --name=rootlv --vgname=rootvg --label="root"
- インストーラが対象とするディスクの指定
- "ignoredisk"で"--only-use="オプションを設定すると、指定したディスクのみインストーラの対象になります。
- ブートローダの指定
- ディスクフォーマット(既存パーティション削除)
- パーティション設定
- LVM
4.インストールパッケージ設定
インストルするパッケージは、下記のように"%packages 〜 %end"のセクションの間で設定します。基本はGUIで設定内容に足りないパッケージを追加するのが簡単です。
%packages @^infrastructure-server-environment @base @compat-libraries @core @large-systems @performance @security-tools kexec-tools telnet trace-cmd vim %end
- @で始まるのがインストールするパッケージグループです。
- 足りないパッケージを個別に追加します。
5.ユーザ設定
(1)rootユーザのパスワード設定
rootユーザのパスワードは"rootpw"で設定します。パスワードは、(a)平文文字列、または(b)暗号化された文字列で指定できます。
(1)-(a)パスワードを平文で記載する場合
オプション無し、または"--plaintext"オプションを付けることで、平文でrootユーザのパスワードを指定します。その場合、パスワードが丸見えになるので、KickStartファイルの管理には十分注意してください。
rootpw --plaintext "SyokiPass@9999"
(1)-(b)暗号化したパスワードで記載する場合
"--iscrypted"オプションを付けることで、暗号化された文字列でパスワードを指定します。暗号化されたと言っても時間をかければ解読できるので、KickStartファイルの管理はやはり注意してください。
- "/etc/shadow"に登録する形式で暗号化した文字列で指定します。
- 暗号化形式は"auth"で指定され形式になります。例えば、"auth --enableshadow --passalgo=sha512"とある場合は、SHA512形式の暗号化になります。
- 暗号化されたパスワードの作り方は、次項目(2)を参照して下さい。
# Root password rootpw --iscrypted $6$WYz7GsXMGCHrJnw.$BoSTW/Ac9vaVvjwB0NVg3.sccEh2g7eZhU7c7BRRx/d8Dxoo7UE70EYyhPEBiemPLxB.Pq0StVaoDIWTWLCFx/
(2)指定する暗号文字列をどうするか?
やり方として2例、(a)pythonで生成する、(b)設定したいパスワードが入った"/etc/shadow"ファイルからコピーする、を説明します。なおネットで見るとopensslコマンドで暗号文字列を生成という記事があるのですが、現在主流のSHA512には対応していないので、この方法は取れません。*3
(3)-(a)pythonで生成する
端的に例を説明すると、"SyokiPass@9999"というパスワードをSHA512形式で暗号化する場合は以下のコマンドになります。
# python -c 'import crypt; print(crypt.crypt("SyokiPass@9999", crypt.METHOD_SHA512))'
sha512は、暗号をより強固なものにするため「暗号したい文字列」と「salt(ソルト)」と呼ばれる文字列を組み合わせ暗号化します。上の例では、"crypt.METHOD_SHA512"の部分がSHA512形式のsalt文字列を生成&入力している部分になります。さらにこの例ではsalt文字列を乱数生成しています。*4
(3)-(b)"/etc/shadow"からコピーする
pythonから生成すればいいので、このやり方は実質不要ですが、一旦インストールした後または、適当なユーザを作成してパスワードを設定しshadowファイルから文字列を抜き出します。":"がフィールドの区切り文字になり、第2フィールドが暗号化された文字列のフィールドになるので、ここをコピーして利用します。
#grep '^root' /etc/shadow root:$6$WYz7GsXMGCHrJnw.$BoSTW/Ac9vaVvjwB0NVg3.sccEh2g7eZhU7c7BRRx/d8Dxoo7UE70EYyhPEBiemPLxB.Pq0StVaoDIWTWLCFx/::0:99999:7:::
6.その他
(1)GUI/textモードの指定
KickStartファイルの動作確認をする場合はグラフィカルのほうが使いやすいかもしれないですが、最終的に何台ものマシンにセットアップする場合は、textモードが早くて良いと思います。
- グラフィカル(GUI)モードにする場合
graphical
- テキストモードにする場合
text
(2)selinux設定
selinuxの設定。無効化(--disabled)、有効化(--enforcing)、警告出力(--permissive)を選択します。
selinux [--disabled|--enforcing|--permissive]
(3)サービス設定
サービスの有効・無効設定を行います。カンマ区切りで複数サービスを指定する場合は、スペースを入れるとそれ以降は認識されません。
- サービスの有効化
services --enabled=SERVICE1,SERVICE2,SERVICE3
- サービスの無効化
services --disabled=SERVICE1,SERVICE2,SERVICE3
(4)KickStart完了後の挙動
- リブートする場合:"reboot --eject" ※"-eject"はdvdを排出するオプション
- 電源OFFする場合:"poweroff"
- 一時停止する場合:"halt"
7.設定ファイル例
ks.cfgの設定例です。
#version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage # Use CDROM installation media cdrom # Select Install mode. graphical:Use graphical install, text:Use text install. #graphical text # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=jp --xlayouts='jp' # System language lang ja_JP.UTF-8 # Network information network --bootproto=dhcp --device=enp0s3 --noipv6 --activate network --hostname=testserver # Root password rootpw --iscrypted $6$WYz7GsXMGCHrJnw.$BoSTW/Ac9vaVvjwB0NVg3.sccEh2g7eZhU7c7BRRx/d8Dxoo7UE70EYyhPEBiemPLxB.Pq0StVaoDIWTWLCFx/ # System timezone timezone Asia/Tokyo --isUtc # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel --drives sda # Disk partitioning information part pv.295 --fstype="lvmpv" --ondisk=sda --size=1 --grow part /boot --fstype="xfs" --ondisk=sda --size=500 --label=boot volgroup rootvg --pesize=4096 pv.295 logvol swap --fstype="swap" --size=256 --name=swaplv --vgname=rootvg logvol /home --fstype="xfs" --size=100 --name=homelv --vgname=rootvg --label="home" logvol / --fstype="xfs" --size=1 --grow --name=rootlv --vgname=rootvg --label="root" %packages @^infrastructure-server-environment @base @compat-libraries @core @large-systems @performance @security-tools kexec-tools telnet trace-cmd vim %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end # Reboot after the installation is complete.(eject DVD media before rebooting) reboot --eject
*1:このレイアウトはRHELの推奨構成とはことなります。例えばswapが小さかったりするので注意してください。
*2:"--initlabel"は廃止されたようですが、anacondaが自動生成したanaconda-ks.cfgではオプションが付いているので、そのままにしています。参考→32.4. キックスタートのオプション - Red Hat Customer Portal
*3:opensslコマンドがSHA512で使えない件の参考:sha512でハッシュされたsaltつきパスワードを生成するには | Nobwak's Lair。
*4:rhelインストールガイドにpythonの例が改定あるのですが、saltの説明が雑なので、しょうがなくKickstartのコードを参考にしています。anaconda/users.py at master · rhinstaller/anaconda · GitHubの"def cryptPassword(password, algo=None):"を参考にしています。