GUIをポチポチせずにCentOS7を自動でインストールするISOファイルを作成してみた

# はじめに
自宅に古いサーバを再利用したVMware ESXi(仮想サーバ、ぷちプライベートクラウド的なもの)がありまして、そこで、仮想マシンたてて新しい技術の検証やQiitaで気になったこと、試したいことなど色々しています。
ただ、毎回仮想マシンをたてて、OSをインストールするのがすごく手間です。。。
（え？、vagrantとか使えばいいじゃんって、、メインで使っているノートPCがポンコツすぎて。。。メモリとか全然足りないし、なるべくローカルは汚したくないので。。）
なので、自動化してラクにOSインストール済の仮想マシンを作成できるようにしたいと思います！

#やりたいこと

・KickStartを利用したCentOS7を自動インストールするISOファイルを作成する。　***←今回これ***
・AnsibleでESXiを操作して、仮想マシンの作成・削除・構成の変更できるようにする。



#構成

ISOの作成は基本的にポンコツノートPCで行い、作成したISOファイルをESXiサーバに送ります。

```
                     同一LAN
  ポンコツノートPC    <----------->    ESXiサーバ
ip:192.168.10.10                  ip:192.168.10.8
```

#手順

## OS自動インストールISOのもととなるCentOS7のISOを取得

open-vm-toolsなど自動でインストールするようにしたいため、MinimalではなくDVD版のISOを取得しておくこと

```
# wget http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso
```

##CentOS7のISOファイルを展開する

```
# mount -r /root/CentOS-7-x86_64-DVD-1611.iso /mnt
# mkdir -p /tmp/centos7/ks
# cp -rp /mnt/* /tmp/centos7
```


## KickStartファイル作成

```
# cd /tmp/centos7/ks
# vi anaconda-ks.cfg
```

```/tmp/centos7/ks/anaconda-ks.cfg
# version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
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=ens192 --ipv6=auto --activate
network  --hostname=testvm

# Root password
rootpw --iscrypted $6$mdTPMO/VJC68VrUZ$ctM6wT.oT8WVVZ44ec6v.u1gn28IvAYo3tOEW/EfGmt9hxbJlwd60LAUi2lFAtDYFEwDBOOUAI/c9XhRVi10K.
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Tokyo --isUtc
user --name=centos --password=$6$j4FkN7wJ5o2rU6X0$yDky4ZGY.GKq2XmSTErJJH4Amt2MvBMYgO0mwD9PYmmg.bY/FXG0QK0XPlWGfQS5V7xuY618XaWLWzYigIXNY. --iscrypted --gecos="centos"

zerombr
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
autopart
#example partition setting
#part pv.216 --fstype="lvmpv" --ondisk=sda --size=15883
#part /boot --fstype="xfs" --ondisk=sda --size=500
#volgroup centos --pesize=4096 pv.216
#logvol /  --fstype="xfs" --grow --maxsize=51200 --size=1024 --name=root --vgname=centos
#logvol swap  --fstype="swap" --size=1638 --name=swap --vgname=centos


selinux --disabled
firewall --disabled

%packages
@^minimal
@core
kexec-tools
vim
open-vm-tools
%end


%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

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

```


- text

インストール時の画面設定。GUI/textモードか指定する。KickStartファイルの動作確認をする場合はグラフィカルのほうが使いやすいかもしれないですが、最終的に何台ものマシンにセットアップする場合は、textモードが早くて良いと思います。

```
・グラフィカル(GUI)モードにする場合
graphical
・テキストモードにする場合
text
```

- selinux設定

selinuxの設定。無効化(--disabled)、有効化(--enforcing)、警告出力(--permissive)を選択します。

``` 
selinux [--disabled|--enforcing|--permissive]

ex)
selinux --disabled
firewall --disabled
```

- サービス設定

サービスの有効・無効設定を行います。カンマ区切りで複数サービスを指定する場合は、スペースを入れるとそれ以降は認識されません。

```
サービスの有効化
services --enabled=SERVICE1,SERVICE2,SERVICE3
サービスの無効化
services --disabled=SERVICE1,SERVICE2,SERVICE3
```

- zerombr

この設定をいれないと、パーティション初期化の設定画面のところでとまってしまい自動インストールできません。

- %packages

`%packages ~ %end`で囲まれたことろに指定したパッケージをインストールします。


- KickStart完了後の挙動

```
リブートする場合："reboot --eject"　※"-eject"はdvdを排出するオプション
電源OFFする場合:"poweroff"
一時停止する場合："halt"
```




## 自動インストール用の起動メニュ設定

OSインストール時に表示されるメニュに自動インストール用のメニュを追加する

```
# vi /tmp/centos7/isolinux/isolinux.cfg
```

```
timeout 600 <- 50変更
・
・
・
label check
  menu label Test this ^media & install CentOS Linux 7
  #menu default　　<-　コメントアウト
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

↓追加

label centos7auto
  menu label ^Install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=cdrom inst.ks=cdrom:/ks/anaconda-ks.cfg

```


##isoファイルを作成のするためのソフトインストール

```
# yum install genisoimage
※インストール完了後にmkisofsコマンドがあること
```

##  mkisofs コマンドを使用して、作業用ディレクトリを丸ごとＩＳＯイメージ化

```
# cd /tmp/centos7
# mkisofs -o ../CentOS-7-x86_64-DVD-1611_Auto.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -V "CentOS 7 x86_64" ./

※これでOSを自動インストールするISOが作成される
```

オプション

```
  -l                ： Allow full 31 character filenames for ISO9660 names
  -r                ： Generate rationalized Rock Ridge directory information
  -J                ： Generate Joliet directory information
  -o FILE           ： Set output file name
  -b FILE           ： Set El Torito boot image name
  -c FILE           ： Set El Torito boot catalog name
  -no-emul-boot     ： Boot image is 'no emulation' image
  -boot-load-size # ： Set numbers of load sectors
  -boot-info-table  ： Patch boot image with info table
```

参考
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-kickstart-syntax.html

#ESXiのテータストアへ転送しておく

ESXiのISOファイル置き場は自分の環境に合わせて変更ください。

```
# scp /var/tmp/CentOS-7-x86_64-DVD-1611_Auto.iso root@192.168.10.8:/vmfs/volumes/datastore1/ISO/centos/
```