のぴぴのメモ

自分用のLinuxとかの技術メモ

KickStartその1(KickStartによるLinux自動インストール概要)

0.関連記事一覧

1.はじめに

1.1KickStartとは

RHELfedoraなどredhatディストリビューションの、OS自動インストール機能です。*1

1.2ざっくりした使い方

KickStart用のファイルを作成し、インストーラ起動時のオプションで作成ファイルを指定すればOKです。ファイルは、普通にOSインストールするとその時の設定で"/root/anaconda-ks.cfg"ファイルが作成されるので、それを修正して使うのが簡単です。*2

  1. 普通にRHEL/fedoraをインストー
  2. インストール後、"/root/anaconda-ks.cfg"をコピーし編集
  3. 編集したファイルをインストーラから読み込めるよう仕込む。仕込み方法は「3.補足」参照
  4. インストーラでファイルオプション(inst.ks=xxx)を追加して実行
  5. あとは完了するまで待つ。

2.利用手順

2.1ファイル(ks.cfg)の編集

普通にインストールすると、rootのホームディレクトリ直下に"anaconda-ks.cfg"ファイルが作成されているので、このファイルを元に必要な部分を編集します。ファイル名は、特にこだわりがなければKickStartデフォルトの"ks.cfg"にしておくとブート時の設定が少し省けて良いです。*3
■ks.cfgの例(RHELのDVDメディアからインストールする場合の設定例)
設定内容については、こちらの記事を参照して下さい。

#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

�don com_redhat_kdump --enable --reserve-mb='auto'

%end

# Reboot after the installation is complete.(eject DVD media before rebooting)
reboot --eject

2.2ファイル検証

作成したファイルは、ksvalidatorコマンドで内容を検証します。
ksvalidatorは通常はインストールされていませんので、yum/dnfコマンドでパッケージを個別にインストールします。

# yum install pykickstart

検証は以下のコマンドで実行します。

$ ksvalidator ks.cfg

KickStartのバージョン毎の構文差異を気にする場合は、インストールするOSバージョンを指定して、検証することもできます。*4

$ ksvalidator -v RHEL7 ks.cfg

2.3インストーラを起動しキックスタートをローディングする

主な方法を以下に列挙します。個人的には、ネットワークが使えるならネット(http/httpsなど)、ネットワークが使えないならフロッピー(判別しやすいから)から設定ファイルを読みこませるのがいいと思っています。

  1. インストーラを起動する。(私はRHELのDVDメディアからブート)
  2. 起動画面で"tabキー"で介入し"ks="、または"inst.ks="オプションでキックスタートファイルの場所を指定する。(下記画面参照)*5
    1. httpの例:"inst.ks=http://192.168.0.1/ks.cfg"
    2. フロッピーの例:"inst.ks=hd:fd0:/ks.cfg"
    3. DVDの例:"inst.ks=cdrom:/ks.cfg"

※ファイルがメディア直下で、ファイル名が"ks.cfg"の場合は、":/ks.cfg"を省略可能です。
f:id:nopipi:20160722080514p:plain

2.4インストール完了

キックスタートファイルが上手く書かれていれば、後は最後まで自動的にインストールされます。

3.補足(kickstartファイルを読み込ませるベストプラクティス)

KickStartファイルをどう読み込ませるか以外に悩みましたので、私なりの考え方を整理しました。

(1)ネットワークが利用可能な環境の場合

ネットワークが利用可能であれば、http/httpsあたりでkickstartファイルを読み込ませるのが最も簡単で確実です。

(2)ネットワークが使えない場合

この場合が悩ましいです。私がおすすめと思った順に記載します。

(2)-1 インストーラをカスタマイズする

インストーラのイメージをカスタマイズして、作成したファイルを組み込み自動的に読み込ませるのが一番確実で、全自動化が可能です。ですが、リビジョンや設定を変更都度に、インストールイメージを作りなおさなければならないのが手間なので、OSインストールの頻度が低い場合は逆に非効率かもしれません。

(2)-2 フロッピーから読み取る

RHELドキュメントには詳細な説明が無いのが気になりますが・・・。ですが個人的には、フロッピーが使える環境であればフロッピーから読み込ませるのが、デバイス名が"fd0"で明確なのもあり、一番無難な気がします。*6

(2)-3 KicStartファイル専用のdvd(isoファイル)を準備して差し替える

kickStartのファイルをisoまたはDVDにし、インストーラで差し替えて利用する方法です。(オプションは、"inst.ks=cdrom/ks.cfg"という感じです。)"Plese Insert CDROM containing"というメッセージが表示されたらDVDを差し替えますが、ロックがかかってejectできなかったりするようです。

(2)-4 USBメモリor外付けHDDを利用する

RHELドキュメントを見ると、USBメモリか外付HDDから読み込むのが無難な方法です。ですが、インストールするディスク構成が異なるとデバイス名が変わるのが難点です。UUIDでデバイスを指定する方法もあるのですが、インストールメディアをカスタマイズせず、毎回"ks="オプションを手打ちする場合は長すぎて面倒です。

4.リファレンス(kickstartドキュメント)

必要な情報は大方、利用するRHEL/fedoraバージョンの「インストールガイド」の終盤にある「キックスタートを使ったインストール」という章に載っています。

*1:RHEL/Fedoraインストーラであるanacondaに含まれる機能です。kickStartを含むanacondaは、redhat社の「Red Hat Installer Engineering Team」が開発しており、ソース&ドキュメントはgithub(Red Hat Installer Engineering Team · GitHub)で公開されています。

*2:以前はファイル作成用のGUIがありましたが、今は開発が放置されているので利用は推奨されないようですインストールガイド 23.2. キックスタートを使ったインストールの実行方法の重要を参照

*3:anacondaの中のdracut用モジュールに"fetch-kickstart-disk"というシェルがあり、そこでファイルのパスのデフォルトが"/ks.cfg"と定義されています。

*4:指定できるバージョン一覧は、"ksvalidator -l dummy"コマンドで確認できます。ファイルパスの文字を何かしら入れないとエラーになるあたりが微妙ですが。

*5:どちらでも利用可能ですが、以前の書き方が"ks="で、最近は"inst.ks="が基本のようです。

*6:以前は、ks=floppyで読み込めましたが、今はks=hd:fd0のように指定します。