KickstartでCentOS/Fedora/Red Hatを自動インストールする方法
はじめに
IT サポート業務でサーバーやデスクトップに CentOS、Fedora、Red Hat を頻繁に導入する場合、Kickstart による自動インストールは大きな時間短縮になります。Kickstart は GUI/対話インストールで指定した設定の多くを自動的に再現でき、インストール後にスクリプトで追加のソフトを導入したり設定を適用したりできます。
重要: インストール中にライセンス同意など手動操作が必要なソフト(例: VMware Player)の場合は、その部分だけ手作業が必要になります。
Kickstart ファイルの確認方法
もし Kickstart ファイルを見たことがなければ、Red Hat 系ディストリビューションを手動インストールした後に /root ディレクトリにできる anaconda-ks.cfg を確認してください。そこにインストール時に選択したパラメータが Kickstart 形式で保存されています。既存の設定を読み解くことは学習に有効です。
例:Fedora インストール用 Kickstart(コメント付き)
以下は実際に筆者が Fedora ラップトップ群に適用した Kickstart の例です。VMware Player を導入し、wget で仮想マシンイメージを取得するポストインストール処理を含みます。
text
install
cdrom
lang en_US.UTF-8
keyboard uk
timezone --utc Europe/London
rootpw --iscrypted $$nndedddewfooofcerd3r434
selinux --disabled
# Custom user added
user --name=kevinmitnick --groups=users --password=HackThePlanet
authconfig --enableshadow --passalgo=sha512 --enablefingerprint
firewall --service=ssh
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --drives=sda
ignoredisk --only-use=sda
part /boot --fstype=ext2 --asprimary --size=500
part /OtherOS --fstype=ext4 --asprimary --size=10240
part swap --asprimary --size=2048
part pv.fedora1000 --grow --asprimary --size=500
volgroup fedora --pesize=32768 pv.fedora1000
logvol /centosVM --fstype=ext4 --name=centosVM --vgname=fedora --size=30720
logvol /home --fstype=ext4 --name=home --vgname=fedora --size=81920
logvol / --fstype=ext4 --name=root --vgname=fedora --size=25600
logvol /windowsVM --fstype=ext4 --name=windowsVM --vgname=fedora --size=40960
bootloader --location=mbr --driveorder=sda --append="nomodeset rhgb quiet"
# setup the network with DHCP
network --device=eth0 --bootproto=dhcp
# packages that will be installed, anything starting with an @ sign is a yum package group.
%packages
@admin-tools
@authoring-and-publishing
@base
@core
@development-libs
@development-tools
@dial-up
@editors
@education
@electronic-lab
@engineering-and-scientific
@eclipse
@fedora-packager
@fonts
@gnome-desktop
@gnome-software-development
@graphical-internet
@graphics
@hardware-support
@input-methods
@java
@java-development
@kde-desktop
@kde-software-development
@legacy-fonts
@office
@online-docs
@printing
@sound-and-video
@system-tools
@text-internet
@x-software-development
@base-x
kpackagekit
system-config-network
scribus
xfsprogs
mtools
gpgme
gpm
rpmdevtools
koji
mercurial
lua
pylint
rpmlint
plague-client
cmake
mock
bzr
pptp
kdeedu-marble
minicom
opencv
yum-priorities
plotutils
openoffice.org-opensymbol-fonts
qtcurve-gtk2
gvfs-obexftp
glibmm24-devel
gnome-vfs2-devel
libsigc++20-devel
libart_lgpl-devel
kdepim
konversation
ImageMagick
digikam
kipi-plugins
kdegraphics
gypsy
gpsd
hdparm
m17n-db-tamil
m17n-db-gujarati
m17n-db-kannada
m17n-db-hindi
gok
m17n-db-oriya
m17n-db-bengali
m17n-contrib-sinhala
m17n-db-assamese
m17n-db-punjabi
iok
m17n-db-telugu
m17n-db-malayalam
xorg-x11-fonts-ISO8859-1-100dpi
urw-fonts
ghostscript-fonts
kdepim
vorbis-tools
amarok
jack-audio-connection-kit
kaffeine
kdemultimedia
vbetool
gssdp
geoclue
createrepo
radeontool
PackageKit-command-not-found
obexftp
enca
festival
ntpdate
xsel
gupnp
rdesktop
fuse
ncftp
mesa-libGLU-devel
xorg-x11-apps
xscreensaver-gl-extras
gdm
xscreensaver-extras
xscreensaver-base
xterm
xorg-x11-resutils
gitk
git-gui
dia
tftp
python-crypto
boost-devel
valgrind
subversion
cvs
thunderbird-lightning
python-sqlite2
asciidoc
glibc-static
tcllib
python-psycopg*
ssh*
perl-ExtUtils-MakeMaker
perl-Net-Telnet
perl-HTML-FromText
libICE.so.6
libSM.so.6
libXmu.so.6
libXp.so.6
libXpm.so.4
libXt.so.6
help2man
cscope
ctags
git
kernel-devel
tftp-server
texlive-latex
texi2html
cmake
transfig
alsa-lib
libXScrnSaver
qt
qt-x11
libasound.so.2
libXss.so.1
libQtDBus.so.4
libQtGui.so.4
pulseaudio
alsa-plugins-pulseaudio
pulseaudio-esound-compat
pulseaudio-libs
pulseaudio-libs-glib2
pulseaudio-module-zeroconf
pulseaudio-libs-zeroconf
xmms-pulse
pulseaudio-module-gconf
wine-pulseaudio
xine-lib-pulseaudio
pulseaudio-utils
pulseaudio-module-bluetooth
padevchooser
paman
paprefs
pavucontrol
pavumeter
ncurses-devel.i686
%end
%post --log=/root/my-post-log
exec < /dev/tty3 > /dev/tty3
chvt 3
echo
echo "################################"
echo "# Running Post Configuration #"
echo "################################"
# prevent future yum updates pulling down & install new kernels (and breaking VMware & video drivers).
echo "exclude=kernel*" >> /etc/yum.conf
# update the system
yum update -y
# install rpm fusion repo
rpm -Uvh \
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm \
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
# disable rpmfusion repo, to prevent a yum update contaminating the system with rpmfusion rpms.
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/rpmfusion-*
# install video drivers - enabling rpmfusion repos on the command line.
yum -y --enablerepo=rpmfusion-nonfree --enablerepo=rpmfusion-free --enablerepo=rpmfusion-free-updates --enablerepo=rpmfusion-nonfree-updates install kmod-nvidia xorg-x11-drv-nvidia-libs.i686 xorg-x11-drv-nvidia-libs.x86_64 akmod-nvidia
# start akmods on boot
chkconfig akmods on
# add pcadmin to sudoers
echo "kevinmitnick ALL=(ALL) ALL" >> /etc/sudoers
# set perms on vmware partitions so users in the users group can create vm's
chown :users /windowsVM && chmod 775 /windowsVM
chown :users /centosVM && chmod 775 /centosVM
# Make sure the system boots X by setting the system to run level 5
sed -i 's/id:3:initdefault:/id:5:initdefault:/g' /etc/inittab
# install openvpn & configure
wget ftp://$host/pub/VPN/OpenVPN/Linux/openvpnclient-custom-settings-1.6-3.i386.rpm
rpm -ivh openvpnclient-custom-settings-1.6-3.i386.rpm
cd /etc/openvpn/
rm client.conf-*
wget ftp://$host/pub/VPN/OpenVPN/Linux/64bit/client.conf-1
mv client.conf-1 client.conf-0
rm -f /openvpnclient-custom-settings-1.6-3.i386.rpm
# add Kevin Mitnick to group users
usermod -a -G users kevinmitnick
# pull down vmware images
cd /windowsVM/
wget --user=magicinstaller --password=hacktheplanet ftp://magicinstaller:fubar@ftp.$host.com/images/windowsVM.tar.gz
tar -xvzf windowsVM.tar.gz
cd /centosVM/
wget --user=magicinstaller --password=hacktheplanet ftp://magicinstaller:fubar@ftp.$host.com/images/centosVM.tar.gz
tar -xvzf centosVM.tar.gz
# create symlink as instructed
cd /usr/lib; ln -s libtinfo.so libtermcap.so.2
# confirm perms are set correctly
chown -R :users /windowsVM && chmod -R 775 /windowsVM
chown -R :users /centosVM && chmod -R 775 /centosVM
# swap to console 1
chvt 1
解説ポイント(主要項目)
- 言語・キーボード・タイムゾーン: lang、keyboard、timezone でインストール環境のロケールを指定します。
- root パスワード: rootpw –iscrypted は暗号化済みパスワードを指定します。生のパスワードを記載する場合はセキュリティに注意してください。
- SELinux: selinux –disabled は本番環境では推奨されない場合があります。要件に応じて Enforcing/Permissive を検討してください。
- パーティション: clearpart、part、volgroup、logvol で LVM を含む細かいパーティション分割を指定できます。既存パーティションを上書きするか否かに注意。
- パッケージ: %packages 以下でグループ(@)や単体パッケージを列挙します。依存関係やリポジトリの有無でインストール結果が変わります。
- ポスト処理: %post セクションでインストール後に実行するスクリプトを配置。ここでレポジトリ追加、yum update、ドライバ導入、ファイル取得などを自動化します。
重要: ポストスクリプト内で外部ネットワークに接続する処理(wget、ftp、rpm インストール等)を行う場合は、インストール環境のネットワーク可用性と認証情報の保護に注意してください。
ポストインストールスクリプトの設計ヒント
- 冪等性(何度実行しても問題ない)を心がける。既に導入済みのコンポーネントを再適用しても壊れないように条件判定を入れる。
- ログを残す: %post –log=/root/my-post-log のようにログ出力を指定しておくとデバッグが容易。
- 機密情報は直接埋め込まない: パスワードや FTP 認証情報は外部の安全な配布方法(構成管理ツール、Vault)を検討。
カスタマイズ例と代替アプローチ
- 代替: イメージング(Ghost、WDS)ではハード依存の問題が出るため、Kickstart とスクリプトの組合せはハードの多様性に強い。
- 当てはまらない例: インストーラが対話的な承認を要求するソフト(VMware 等)は完全自動化できないケースがあります。これらは手動かライセンスに応じた別プロセスで処理。
- 他のツール: PXE ブート + Kickstart、Ansible/Chef などの構成管理ツールと組合わせて、インストール後の詳細な構成管理を自動化できます。
役割別チェックリスト
- インフラ管理者:
- Kickstart ファイルのバックアップとバージョン管理
- ネットワークとリポジトリアクセスの確認
- セキュリティ担当:
- root やユーザーのパスワード運用を監査
- SELinux 設定のポリシー確認
- サポート/エンドユーザー:
- VMware 等のライセンス手順を文書化
- ユーザー追加・権限付与の動作確認
簡易 SOP(導入手順)
- Kickstart ファイルをテンプレートとして作成し Git に保存する。
- テスト用ハード/仮想マシンで検証インストールを実行する。
- %post のログを確認してエラーを解消する。
- セキュリティレビューと承認後、本番展開する。
テストケース / 受け入れ基準
- インストールは無人で完了すること(コンソールでの待ち状態がない)。
- %post の主要処理(リポジトリ追加、yum update、VM 取得、権限設定)が成功し、ログにエラーが残らないこと。
- ネイティブドライバ(例: NVIDIA)が期待通りにロードされ、グラフィックセッションが起動すること。
- 作成したユーザーが指定グループに所属し、sudo 権限があること。
互換性と移行のヒント
- Kickstart のオプション名やパッケージ名はディストリビューションやバージョンで変更される場合があります。新しいリリースではまず anaconda-ks.cfg を生成して比較してください。
- 32bit / 64bit の違いやパッケージのアーキテクチャ指定(.i686 など)に注意。
まとめ
Kickstart は Red Hat 系ディストリビューションの自動インストールに適した強力なツールです。%post を活用することで導入後の追加設定やソフトウェア配布まで自動化でき、複数ハードウェア環境での再利用性が高まります。まずは小さなテンプレートから始め、段階的に項目を追加していくことを推奨します。
Notes: この記事の元資料は www.netzensolutions.com による投稿を基にしています。質問があればコメントを残してください。