OCP 4.3をお弁当箱に全自動インストールする - 3. 準備編②- CentOS自動インストールメディアの作成

[1. 概要編](https://qiita.com/hmiyakoshi0803/items/00a26dde9de0c6983e18)
[2. 準備編①- ESXiインストールメディアの作成]()
**3. 準備編②- CentOS自動インストールメディアの作成（本記事）**
[4. NUC構築編](https://qiita.com/hmiyakoshi0803/items/0bbbfce6b9411ac16c79)
[5. ESXiインストール編]()
[6. ESXi Virtual Network構築編]()
[7. VCSA構築編]()
[8. 踏み台サーバ構築編① - VM構築]()
[9. 踏み台サーバ構築編② - ミドルウェア構築]()
[10. 踏み台サーバ構築編③ - MatchBox構築]()
[11. OCP4.3 インストール編]()


---
# はじめに
- jumpboxの構築を自動化したかったため、kickstartの仕組みを使ったCentOSの自動Installメディアを作成した
- kickstartとは、RHEL、fedoraなどredhat系ディストリビューションの、OS自動インストール機能のこと
- 仮想マシンを構築時に、作成したインストールメディアをマウントすると自動的にCentOSのインストールが実行される

# 作業環境
- 全ての作業は、作業用に手動で構築したLinux Server（CentOS）上で実施
  <br>（MacだとCentOSのISOファイルを上手く展開できなかったため）

---
# 作業手順
## 1. 必要モジュールのInstall
```[Shell]
# yum -y install mkisofs pykickstart
```

## 2. Install DVDをダウンロード
```[Shell]
# cd /tmp
# curl -O http://ftp.tsukuba.wide.ad.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso
```

## 3. Install DVDを展開
- Install DVDを/mntにマウントして、ファイルを作業ディレクトリ（~/base）にコピー

```[Shell]
# mount -t iso9660 -o loop /tmp/CentOS-7-x86_64-DVD-1908.iso /mnt
# mkdir ~/base
# cp -RT /mnt ~/base
```

## 4. rootユーザーの暗号化パスワード作成 （Pythonを使用）
``` [Shell]
# python -c 'import crypt; print(crypt.crypt("This is Password Strings", crypt.METHOD_SHA512))'
```

## 5. ks.cfgファイルを作成

- CentOSを手動インストールすると、インストール時の設定が、`/root/anaconda-ks.cfg`ファイルとして作成される
- この設定ファイルを流用して、自動インストール用の設定ファイルを作成する

```
# cp /root/anaconda-ks.cfg ~/base/ks.cfg
# vi ~/base/ks.cfg
```

### 5.1. Command Section


- 高速化のためtext mode installに設定

```
# Use graphical install
text
```


- keyboard設定

```
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
```

- Language設定

```
# System language
lang ja_JP.UTF-8
```
- Network設定（固定IP）

```
# Network information
network --device ens192 --bootproto static --ip 192.168.0.252 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 8.8.8.8,8.8.4.4 --noipv6 --onboot=yes --activate
network  --hostname=centos77_base
```

- rootパスワード設定

```
# Root password
rootpw --iscrypted "ここに、「4. rootユーザーの暗号化パスワード作成 （Pythonを使用）」で作成した暗号化パスワードを記載"
```


- timezone設定

```[Shell]
# System timezone
timezone Asia/Tokyo --isUtc
```

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

```
# Clear the Master Boot Record
zerombr
```

- SElinux 有効化

```
# SELinux configuration
selinux --enforcing
```


### 5.2. Package Section
- `open-vm-tools`を忘れずにインストールする

```
#########################################
# Package Section
#########################################
%packages
@^minimal
@core
kexec-tools
vim
open-vm-tools
%end
```

### 5.3. Script Section
- 公開鍵をサーバに登録し、公開鍵認証でサーバログイン可能なように設定する

```
#########################################
# Script Section
#########################################
%post --log=/root/ks.post01.log
#!/bin/bash

# Create dummy file for logging start
touch /root/my-ssh-start


# Copy public key
mkdir /root/.ssh

echo "ssh-rsa Here is Public key..." >> /root/.ssh/authorized_keys

chmod 600 ~/.ssh/*
chmod 700 /root/.ssh
chown -R root.root /root/.ssh


# Modify ssh config
cp /etc/ssh/sshd_config /var/tmp/sshd_config_org

cat << EOF >> /etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys
EOF

sed -i -e "s/#PermitRootLogin\ yes/PermitRootLogin\ yes/g" /etc/ssh/sshd_config
sed -i -e "s/#PubkeyAuthentication\ yes/PubkeyAuthentication\ yes/g" /etc/ssh/sshd_config
sed -i -e "s/PasswordAuthentication\ no/PasswordAuthentication\ yes/g" /etc/ssh/sshd_config


# Create dummy file for logging end
touch /root/my-ssh-finished

%end
```

### 5.4. After kickstart Section
- kickstart完了後はRebootする
- Reboot前にDVDを排出する

```
#########################################
# After kickstart Section
#########################################

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

```



## 6. ks.cfg を検証
- 問題ない場合、何も出力されない

``` [Shell]
# ksvalidator ~/base/ks.cfg 
# echo $?
0
```

## 7. 自動インストール用の設定を追加する
```[Shell]
vi ~/base/isolinux/isolinux.cfg
```

- 下記を編集する

```[Shell]
# default vesamenu.c32 <- コメントアウト
default centos7auto <- 追記
・
・
・
menu separator # insert an empty line
menu separator # insert an empty line

（ここから追記: 自動起動用の設定。kickstart設定ファイルのパスを指定する）
label centos7auto
  menu label ^Install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=cdrom: inst.ks=cdrom:
（ここまで）

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

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

・
・
・
```



## 8. ISOファイルの作成
``` [Shell]
# cd ~/base/
# mkisofs -v -r -J -o ../CentOS-7-x86_64-DVD-1908_Auto.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
```

# 次の手順
- ここで作成したISOファイルをESXiのDatasoreに転送
- Ansibleで、このISOファイルを使ってVMを作成
- 自動でCent OSのInstallが完了する


# Reference
- [GUIをポチポチせずにCentOS7を自動でインストールするISOファイルを作成してみた](https://qiita.com/ynishimura0922/items/de76a83003ce360cf760)
- [kickstartをマスターしたのでメモっておく](https://qiita.com/uturned0/items/92f2e75c8533e8465e8b)
- [CentOS 7のオフライン自動インストール用isoファイルを作る](https://qiita.com/rprev/items/255718ac40b71778c78a)
- [KickStartその1(KickStartによるLinux自動インストール概要)](http://nopipi.hatenablog.com/entry/2016/07/23/171148)
- [Linux を自動インストールする方法 (Kickstart)](https://www.linuxmania.jp/kickstart.html)