2017年9月11日月曜日

VirtualBox で kickstart サーバを構築してみた

概要

kickstart は ISO などから VM に OS をインストール際にそのインストールの設定を自動化するための仕組みです
まずは kickstart サーバを構築する必要があるので今回はサーバの構築まで行ってみました

環境

  • macOS X 10.12.6
  • Virtualbox 5.1.26 r117224 (Qt5.6.2)
  • CentOS 7.3.1611

事前準備

今回は Mac 上の Virtualbox で進めていきます
なので、まず Virtualbox をインストールしましょう
もちろん他の仮想化環境や物理マシンでも問題ないです

kickstart サーバには CentOS サーバを採用します
なので、ISO ファイルを公式からダウンロードしましょう
今回は「CentOS-7-x86_64-Minimal-1611.iso」という ISO ファイルをダウンロードしました

kickstart サーバ用の CentOS の構築

Virtualbox で作業します
新規から VM を作成します
タイプに「Linux」を選択しバージョンに「Red Hat (64-bit)」を選択します
kickstart1.png

以下各設定項目になります

  • メモリサイズは今回 2048MB にしました
  • ハードディスクは「仮想ハードディスクを作成する」にしました
  • ハードディスクのタイプは VDI にしました
  • サイズのタイプは「可変サイズ」にしました
  • ファイルの場所は好きな場所を選択してください、サイズは 8GB にしました

作成できたら「設定」から「ストレージ」で「コントローラ IDE 」が空になっているのを確認します
ここに事前にダウンロードしておいた ISO をマウントしておきます
kickstart2.png

あとは起動してコンソール画面から CentOS をインストールすれば OK です
設定する項目は殆どないと思います
自分は OS をインストールするパーティションと root のパスワードを設定しました

設定が完了したらインストールができるまで待ちましょう

※うまく NAT ネットワークに接続できない場合は Virtualbox の「環境設定」から「ネットワーク」で「NAT ネットワーク」と「ホストオンリーネットワーク」を追加しましょう
※ NAT 側がうまく接続できない場合は以下のコマンドを実行してみたください

  • nmcli con mod enp0s3 connection.autoconnect "yes"
  • systemctl restart NetworkManager
  • systemctl restart network

kickstart サーバの構築

では kickstart サーバを構築します
とは行っても https or https 経由で .ks ファイルを配信できる環境を構築すれば完了です

  • yum -y update
  • yum -y install httpd vim

ks ファイルの作成

次に .ks ファイルを作成します
各項目の設定はコメントで説明しています
必須のオプションもあればそうでないオプションもあります
別のオプションについては参考サイトにある RedHat の kickstart オプションの一覧を参照してください

  • vim centos.ks
# 新規インストールします
install

# CD にマウントしてある ISO からインストールします
cdrom

# 言語を設定します
lang ja_JP.utf8

# キーボードレイアウトを設定します
keyboard us

# タイムゾーンを設定します
timezone Asia/Tokyo

# 認証オプションを設定します (必須)
auth --useshadow --passalgo=sha512

# selinux を無効にします
selinux --disabled

# iptables を無効にします
firewall --disabled

# 自動起動するサービスを指定します
services --enabled=NetworkManager,sshd

# インストール後再起動させます
reboot

# ブートローダオプションを指定します (必須)
bootloader --location=mbr --driveorder=sda

# パーティションをクリアします
clearpart --linux --drives=sda

# パーティション作成で確認を求められないようにします、これを指定しないと ISO からインストールする画面のシステムのインストール先を選択する画面で止まってしまいます
zerombr

# パーティションを自動で設定します
autopart

# ルートパスワードを設定します
# 「openssl passwd -1」コマンドでパスワードは生成できます
rootpw --iscrypted $1$kuGjySFy$1EqDH0PdmNx7fyDBTvyHN.

%packages --nobase --ignoremissing
@core
%end

ks ファイルの配信

では作成した ks ファイルを配信します

  • cd /var/www/html
  • cp centos.ks .
  • systemctl httpd start

で curl などでアクセスしてファイルが取得できれば OK です

  • curl localhost/centos.ks

selinux, iptables firewalld の無効化

とりあえずテストなのでそれぞれ無効にしました

  • vim /etc/selinux/config
SELINUX=disabled
  • systemctl disable firewalld

動作確認

kickstart ファイルの配信準備ができたら、実際に CentOS のインストールを kickstart 経由で行ってみます

先ほどと同様に VM を 1 つ作成して ISO をマウントします
このとき先ほどとは違い kickstart サーバを指定します

タブを押すと以下のようにインストールコマンドを指定することができるので追加で kickstart サーバを指定します

inst.stage2 の設定項目がある場合は削除して OK です
192.168.56.101 はホストオンリーアダプターに付与されている先ほど構築して kickstart サーバの IP になります
kickstart3.png

これでインストールを開始してみましょう
kickstart サーバを構築したときは対話的にインストールしていたのがなくなりすべて自動でインストールされると思います

試しに kickstart ファイルを複数用意して lang などの項目を別なものに変更して起動後に $LANG などを確認してみると良いと思います

最後に

kickstart サーバを構築して CentOS のインストールの自動化を行ってみました
仕組み自体は設定ファイルを http で配信するだけなので簡単です
ただ、新たに構築する VM が kickstart サーバにアクセスできる必要があります
Github などで公開してグローバルからならどこでもつながるようにすることで解決する方法もあるようです

今回はパーティションなど細かい設定はほとんど行いませんでしたが、パーティションを細かく設定したり LVM 構成を組むこともできるようです
詳しくは RedHat の公式サイトにある kickstart のオプションを紹介しているドキュメントを確認してみてください

参考サイト

0 件のコメント:

コメントを投稿