kickstart で RHEL8 のインストールを自動化する

# Red Hat Enterprise Linux 8 の自動インストール

RHEL 系のシステムでは、 2019 年 5 月 7 日にリリースされた Red Hat Enterprise Linux 8 が今後の主流になるでしょう。 先を見据えて、どんな OS なのか触ってみたい人もいるのではないでしょうか。今回は kickstart を使用して RHEL8 の自動インストールを検証してみました。

手順書にたくさんハードコピーを貼ったり、 PC に張り付いてページ数の多い手順書を見ながら GUI をポチポチしたり、インストール作業のエビデンスのハードコピーを取り忘れてモチベーションが上がらないインストールのやり直しをするために夜遅くまで残りたくない。
と思っている人も多いはず。働き方改革の時代には、どの現場でも自動化のニーズが高いのでは。

## キックスタートファイルの作成

1. [Kickstart Generator](https://access.redhat.com/ja/labsinfo/kickstartconfig) で、キックスタートファイルを作成します。

1. 作成したキックスタートファイルをカスタマイズします。今回の検証では、以下のようにキックスタートファイルをカスタマイズ [^1] しました。

    ```ks.cfg
    # Copyright (c) 2019 sakitics.
    #
    #version = rhel8

    # Installation logging level
    logging --level=debug

    # System language
    lang ja_JP.UTF-8

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

    # System services
    services --enabled="chronyd"

    # System timezone
    timezone Asia/Tokyo --isUtc

    # Root password
    rootpw --iscrypted $6$47tP9FcKFDmmvNJF$AMl5WnJNyARcG4v9kFXwOjADhVqs5mc54T7M4QQSi9DehpebTtHM8FLtxXVAwjlrENTSBcNfZtLecMMEn/UrQ1

    #platform x86, AMD64, or Intel EM64T

    # Shutdown after installation
    shutdown --eject

    # Use text mode install
    text

    # Use CDROM installation media
    cdrom

    ignoredisk --only-use=sdb

    # System bootloader configuration
    bootloader --location=mbr --append="crashkernel=auto" --boot-drive=sdb

    # Clear the Master Boot Record
    zerombr

    # Partition clearing information
    clearpart --all --initlabel --drives=sdb

    autopart --type=lvm

    # Network information
    network --bootproto=dhcp --device=enp0s3 --noipv6 --activate --onboot=yes
    network --bootproto=static --device=enp0s8 --gateway=192.168.33.1 --ip=192.168.33.101 --netmask=255.255.255.0 --ipv6=auto --activate --onboot=yes
    network --hostname=ROBOCODE

    # System authorization information
    auth --passalgo=sha512 --useshadow

    # SELinux configuration
    selinux --enforcing
    firewall --enabled --ftp --ssh

    # Do not configure the X Window System
    skipx

    # Run the Setup Agent on first boot
    firstboot --disable

    %packages
    @standard
    @^server-product-environment
    kexec-tools
    %end

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

[^1]: 既存のディスクをクリアしてインストールします。

## インストール

1. Red Hat Enterprise Linux for x86_64 のインストールメディアをサーバにマウントします。

1. サーバの電源を投入します。

1. Press Tab for full configuration options on menu items. のメッセージが表示されたら、 Tab キーを押します。
    ![Press Tab for full configuration options on menu items.](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494429/52adb168-61ab-380c-3e3b-dca1cdc92c51.png)

1. キックスタートファイルを保存した USB をサーバにマウントします。

1. 起動オプションに、以下のオプション [^2] [^3] [^4] を追加します。

    ```BASH
    inst.ks=hd:UUID=<UUID>:ks.cfg
    ```

    ![Startup options](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494429/82df3583-e8f1-57b5-1b89-0fc8293dd258.png)

[^2]: UUID には、接続した USB の UUID を指定します。
[^3]: すでに入力されている起動オプションは変更しないでください。
[^4]: 起動オプションを追加する場合は、半角空白を入力してから追加してください。

1. Enter キーを押して、しばらくするとインストールが開始されます。
    ![Start](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494429/61058bfc-7c49-b618-54a3-ae7eda15567d.png)

1. インストールが完了すると、サーバがシャットダウンされます。

1. Red Hat Enterprise Linux for x86_64 のインストールメディアをサーバからアンマウントします。

1. キックスタートファイルを保存した USB をサーバからアンマウントします。

1. サーバの電源を投入します。

1. Red Hat Enterprise Linux が起動することを確認します。

## 実際にやってみた

[![デモンストレーション](http://img.youtube.com/vi/wdlfQosxMWU/0.jpg)](https://youtu.be/wdlfQosxMWU)

## この手順は、以下の技術情報をもとに作成されています

- [Red Hat Enterprise Linux 8 高度な RHEL インストールの実行](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/pdf/performing_an_advanced_rhel_installation/Red_Hat_Enterprise_Linux-8-Performing_an_advanced_RHEL_installation-ja-JP.pdf)

## ひとりごと

マニュアルを Word か Excel で作れって言われるけど、 diff 取りずらいし、 sed とか grep で複数のファイルを一括処理！！みたいなことも難しい。 linter 使えないから、汎用的じゃないチェック用のマクロが量産されて、ときにはサーバを操作したこともない人が作ったマクロとテンプレートを強要されてもやもやする。
マニュアルを渡されたオペレータは Word や Excel から実行するコマンドを抜き出して、一生懸命テキストファイルに貼り付けてる。
コストをかけて作った Word や Excel のマニュアルは、かけたコスト以上の価値を生み出せているんだろうか。。。
Markdown とか reStructuredText で作れば、いろんなことが解決できそう。