【CentOS】kickstart サーバの構築 

## VirtualBOX上のCentOS7 にkickstartサーバを作る。
下記の環境に作成していきたいと思います:v:

```
[root@server ~]# uname -a
Linux server 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@server ~]#
```
Kickstartサーバには下記サービスを稼働させる必要があります。

- tftp
- dhcp
- httpd
- syslinux

起動の流れとしては下記。

1. OSインストール対象マシンをPXE(Pre eXecition Environment) で起動。
2. DHCP サーバから
   - IP アドレス
   - ブートローダのファイル名
   を取得する。
3. TFTP サーバから
   - ブートローダファイル（pxelinux.0）を取得する。
4. ブートローダ（pxelinux.0）でブート
5. TFTP サーバから起動する方法が書かれた pxelinux.cfg/default を取得する。
6. pxelinux.cfg/default に書かれている方法で起動する。

##ということでまずはyumにてインストールしていきます。

```
[root@server ~]# yum install tftp-server dhcp httpd syslinux
====================================================================================================================================
 Package                        アーキテクチャー          バージョン                                  リポジトリー             容量
====================================================================================================================================
インストール中:
 dhcp                           x86_64                    12:4.2.5-68.el7.centos.1                    base                    513 k
 syslinux                       x86_64                    4.05-15.el7                                 base                    990 k
 tftp-server                    x86_64                    5.2-22.el7                                  base                     47 k
更新します:
 httpd                          x86_64                    2.4.6-88.el7.centos                         base                    2.7 M
依存性関連でのインストールをします:
 mtools                         x86_64                    4.0.18-5.el7                                base                    203 k
依存性関連での更新をします:
 dhclient                       x86_64                    12:4.2.5-68.el7.centos.1                    base                    284 k
 dhcp-common                    x86_64                    12:4.2.5-68.el7.centos.1                    base                    175 k
 dhcp-libs                      x86_64                    12:4.2.5-68.el7.centos.1                    base                    131 k
 httpd-tools                    x86_64                    2.4.6-88.el7.centos                         base                     90 k

トランザクションの要約
====================================================================================================================================
インストール  3 パッケージ (+1 個の依存関係のパッケージ)
更新          1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 5.1 M
Is this ok [y/d/N]: y
```

syslinux とはLinuxカーネルを起動するためのブートローダです。
このブートローダをtftpにて配布可能な場所へコピーします。

```
[root@server syslinux]# mkdir /var/lib/tftpboot/pxelinux
[root@server syslinux]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux/
```

次にpxelinux設定ファイルディレクトリを作成します。

```
[root@server syslinux]# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
[root@server syslinux]# mkdir /var/www/html/ks
```

次にインストールに必要なrpmを httpd の公開ディレクトリへコピーします。
VirtualBox にてインストールiso をコントローラIDEへマウントしておく。

```
[root@server html]# mount /dev/cdrom /mnt/cdrom
[root@server html]# mkdir /var/www/html/RHEL7
[root@server html]# cp -a /mnt/cdrom/* ./RHEL7/
[root@server html]# cd RHEL7/
[root@server RHEL7]# ls
CentOS_BuildTag  EULA  LiveOS    RPM-GPG-KEY-CentOS-7          TRANS.TBL  isolinux
EFI              GPL   Packages  RPM-GPG-KEY-CentOS-Testing-7  images     repodata
[root@server RHEL7]# umount /mnt/cdrom

```

今コピーしたファイルの中にインストーラ起動用のカーネル、初期RAMディスクについてTFTP公開用ディレクトリへもコピーする。

```

[root@server pxeboot]# cp /var/www/html/CENTOS7/images/pxeboot/vmlinuz /var/lib/tftpboot/pxelinux/CENTOS7/
[root@server pxeboot]# cp /var/www/html/CENTOS7/images/pxeboot/initrd.img /var/lib/tftpboot/pxelinux/CENTOS7/
```

次にDHCPサーバの設定
/etc/dhcp/dhcp.conf に下記のように設定を入れる。

```
subnet 192.168.0.0 netmask 255.255.255.0 {
        range 192.168.0.200 192.168.0.205;
        class "pxeclients" {
                match if substring (option vendor-class-dentifier, 0, 9) = "PXEClient";
                next-server 192.168.0.1;
                filename "pxelinux/pxelinux.0";
        }
}
```
中身について詳しい解説は割愛。
次にブートストラップイメージのメニュー設定
/var/lib/tftpboot/pxelinux/boot.msg

```
-------------------------
Welcome to Kickstart Install!!!
-------------------------
1. CentOS 7 - preconfigured
2. CentOS 7
```
複数OSを入れる場合は、メニュー番号が増えていくかんじ。
今回は
1.は設定済の構成で自動インストール
2.はインストール画面にて対話的に設定。

次にこのメニュー番号に対応したPXE起動用の設定を入れる。
/var/lib/tftpboot/pxelinux/pxelinux.cfg/default

```
prompt 1
display boot.msg

label 1
kernel /CENTOS7/vmlinuz
append initrd=/CENTOS7/initrd.img ks=http://192.168.0.1/ks/ks_1.cfg

label 2
kernel /CENTOS7/vmlinuz
append initrd=/CENTOS7/initrd.img ks=http://192.168.0.1/ks/ks_2.cfg
```
起動用の設定をラベルごとに分けて、ks_*.cfg の設定ファイルを参照させる。
ここまで来たらTFTPサーバ、DHCPサーバ、HTTPDサーバを立ち上げておく。

次のファイアウォールの設定
http,tftp,dhcpのサービスを開放する。
私の環境では、インストール先サーバのセグメントは internalゾーンに所属しているので、--zone=internal としている。


```
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=http
success
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=tftp
success
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=dhcp
success
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=http --permanent
success
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=tftp --permanent
success
[root@server pxelinux.cfg]# firewall-cmd --zone=internal --add-service=dhcp --permanent
success
```

次にキックスタートファイルを作成する。
REDHATのkickstart generator を使いたいところだが、ライセンスがいるものらしいので、割愛。
先ほどブートメニューの作成にて、自動構成用のメニューも作ったが、こちらは generator を使えないので、
対話インストール用のみ作成する。

/var/www/html/ks/ks_1.cfg,ks_2.cfg

```
url --url=http://192.168.0.1/CENTOS7
```
これだけです。

## インストール対象サーバの起動
今回はVirtual Box に作成しているので、Kick Start サーバと同じセグメントに新規サーバを起動させる。

![virtuakbox.png](https://qiita-image-store.s3.amazonaws.com/0/326158/5b29e1d3-cda4-1f9b-bba0-5fbecc9c2421.png)
ネットワークは、「内部ネットワーク」intnet

システムのメインメモリは1024MB ではなぜかPXEブート中に容量が足りないと怒られたので、4096MB にて起動したところ成功した。