kickstartをマスターしたのでメモっておく

資料はこちら サンキュー #インフラ勉強会	

> [CentOSの繰り返しのインストールを
Kickstart で手抜きしよう(?) by @akane298]( https://docs.google.com/presentation/d/1CIeS4B28p64Vv16YLUfs0TnXVvBO9JgMJDH_-e-5Qdc/edit#slide=id.p)

```py
# ISO 形式を作成できるように  mkisofs を導入しておく
yum -y install mkisofs pykickstart

# インストールDVDのISOイメージをダウンロードします
curl -O http://ftp.tsukuba.wide.ad.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1804.iso
ls *.iso -l

#インストールDVDの内容を ~/base の下に展開します
mount -t iso9660 -o loop CentOS-7-x86_64-Minimal-1804.iso /mnt
mkdir ~/base
cp -RT /mnt ~/base
ls ~/base

# 手もとのcent7の ~/ にある anaconda-ks.cfg をコピる
cp ~/anaconda-ks.cfg ~/base/ks.cfg
```

こっからが各自のレシピ

> 参考： https://github.com/joyent/mi-centos-7/blob/master/ks.cfg  
http://nopipi.hatenablog.com/entry/2016/07/23/170635

### 既存anacondaを変更するもの
```py
vim ~/base/ks.cfg

これを
# Use graphical install
graphical

こうすると早いらしい
# Use text mode install
text
# Do not configure the X Window System
skipx

### /homeのパーティション作成をやめさせる
#これを変える。
autopart --type=lvm 
↓
autopart --type=lvm --nohome

```
### ks.cfgに追記するもの
```py

### 一番下の行にまずこれを足す
# これ絶対やっといたほうがいい。マジめんどい。
reboot --eject					# リブート前にDVDを排出する

### SELinuxをPermissiveにする
# echo "I'm sorry Ishikawa san."
selinux --permissive	
services --disabled=firewalld

# Installation logging level
logging --level=debug

### network
## dhcpの場合はこれ
# Setup network interfaces via DHCP
network --device=eth0 --bootproto=dhcp --onboot=yes --activate

## 全然うまくいかないfixed ipはこれ
# Network information
network  --bootproto=static --device=ens192 --gateway=192.168.1.1 --ip=192.168.1.100 --netmask=255.255.255.0 --nameserver=8.8.8.8 --noipv6 --onboot=yes --activate


```

ここから自分流。とりあえずテストでやったもの

```py
##########################################################################################
#################### MY postscript -> ####################################################
##########################################################################################


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

set -x

	### 初心者はdebug用にどこまで進んだかわかるようにtouchとかしとくと幸せ
     touch /root/my-yum-start-yum
           # パッケージを最新にする
           yum update -y						     
             # 好きなものいれていく
	     yum install -y epel-release
	     yum install -y sl vim git
     touch /root/my-yum-finish-yum

    # docker
    touch /root/my-install-docker
	    curl -fsSL get.docker.com -o get-docker.sh
	    sh get-docker.sh
    touch my-installed-docker
    
############################# ssh -> ###########################################################
  touch /root/my-ssh-start
	# 公開鍵をコピーしてパーミッション変更
	  mkdir /root/.ssh	
	  echo "ssh-rsa AAAAB3NzaC1..." >> /root/.ssh/authorized_keys
	  # 秘密鍵
	  cat <<ID_RSA > ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
ID_RSA

    chmod 700 /root/.ssh
    chmod 600 /root/.ssh/*
    chown -R root.root /root/.ssh
    
    cp /etc/ssh/sshd_config /var/tmp/sshd_config_org
    cat << EOF >> /etc/ssh/sshd_config	# sshの設定を追記(EOFの手前まで)・修正(sedで)
AddressFamily inet
UseDNS no
#PermitRootLogin no         # 本番サーバではコメント外しましょう
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
EOF
	    sed -i -e "s/PasswordAuthentication\ yes/PasswordAuthentication\ no/g" /etc/ssh/sshd_config

    touch /root/my-ssh-finished
############################# ssh <- ###########################################################
    
    # ipのセットアップ
    touch /root/my-setip-start
    # if名は環境によって違うので、動的に取るようにする
    LANG=C
    # sortされたNICの最初のひとつを使う ※virtualboxでhost networkがある場合は２つめにする
    NIC=$(nmcli d s | sort | grep " connected" | grep ethernet | cut -d " " -f 1 | sort | head -1)
    # ここ未検証。
    nmcli con add type ethernet con-name $NIC ifname $NIC
	    # kickstartだとうまくいかないみたい？なので最初の起動時に手動で実行しやすいように.sh置いておく
	    echo "nmcli con add type ethernet con-name $NIC ifname $NIC" > /root/my-setup-ip.sh
	    chmod +x /root/my-setup-ip.sh
    touch /root/my-setip-finished

    ## 独自のセットアップツールを呼び出す
    # NASからツールを取得
    yum install -y lftp
    lftp sftp://nas:nas@192.168.1.100 -e "get array1/my-tool/my-setup.sh; bye"    
    # 実行
    bash my-setup.sh > /root/my-setup.log
 
    echo "hostnamectl set-hostname xxx" > /root/my-set-hostname
    date > /root/my-from_ks_date
    
%end

##########################################################################################
#################### MY postscript <- ####################################################
##########################################################################################
```

ks.cfg を検証しましょう

```py
# syntax check!
[root@cent72 base]# ksvalidator ks.cfg
```

isoを作り直す

```py
# ks.cfg がどのデバイスに置かれているかをここで設定します。
# autorun という項目で、インストールDVDのISOイメージ内の
# ks.cfgを読ませる場合の設定は下記のようになります。

cat >> ~/base/isolinux/isolinux.cfg <<EOL

label autorun
  menu label ^KIckStartAutoRun
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=cdrom: inst.ks=cdrom:

EOL

# 出来上がったファイルイメージをISO形式に変換します
cd ~/base
mkisofs -v -r -J -o ../CentOS-7-KickStart.iso -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
ls ~/*.iso

# どっかに送ったりとか
scp ~/CentOS-7-auto.iso me@192.168.1.2:~/Downloads/Centos-7-KickStart-ks-`date`.iso
```

あとはできたisoを焼いたり、ESXiに置いてインストールしたり。

isoをマウント起動して、インストール画面で `AutoRun` を選べば幸せ。

![スクリーンショット 2018-05-17 22.47.42.png](https://qiita-image-store.s3.amazonaws.com/0/24737/e1accc7d-22cc-8994-b9bd-595624bdacaa.png)


# 注意点

軽いks.cfgでもここで死ぬほど待たされるので信じて待ちましょう。何度も強制終了しちゃったよ。待ったら行ったよ。

![スクリーンショット 2018-05-17 22.53.46.png](https://qiita-image-store.s3.amazonaws.com/0/24737/2ed147bf-8678-d7c8-1238-61db23a56327.png)

tty3に出力スると、logを流すこともできるらしい。

> https://ken-etsu-tech.blogspot.com/2008/01/anaconda-kickstartpost.html


インストールが終わったら

```py
# ks.cfgで入れたあいつが走ったら成功だね。
$ sl
```


よっしゃマスターした！