📝

キックスタートファイルの作成から自動インストールまで

2024/12/27に公開

前提

このドキュメントは、Miracle Linux 8.8を使用して作成しています。また、下記の操作ができることを前提としています。

  • isoイメージファイルのダウンロード
  • isoイメージファイルのマウント
  • RedHat系のLinuxを手動でインストールできる

また、このドキュメントではキックスタートファイルの編集は、よく使用する設定のみ紹介しています。詳細な情報は、ドキュメント末尾の参考リンクを参照してください。

対象読者

  • RedHat系のLinuxを自動インストールしたいが方法がわからない
  • キックスタートファイルの作成方法を知っているが、isoイメージファイルに追加する方法がわからない
  • 私(元々自分のためのメモなので)

自動インストールまでの流れ

  • まずは自動インストールで設定したい内容で、手動でインストールを行います。
  • インストール後にキックスタートファイルが作成されますので、それを取得します。
    • /root/anaconda-ks.cfg にキックスタートファイルが保存されます。これを保存します。
  • キックスタートファイルを編集します。
  • isoイメージファイルにキックスタートファイルを追加します。
  • 作成したisoイメージファイルを使用すると、自動インストールが行われます。

キックスタートファイルの編集

手動インストール後のキックスタートファイルをベースにしていますので、基本的には大きな変更は必要ありませんが、よく使用する設定を紹介します。

インストール対象・対象外のディスクを指定する

Partition clearing information で指定したディスクをインストール対象にするか、対象外にするかを指定します。

  • sda, sdb, sdc だけをインストール対象にする場合
    ignoredisk --only-use=sda,sdb,sdc
    
  • sda だけをインストール対象にする場合
    ignoredisk --only-use=sda`
    

既にパーティションが存在する場合は削除する

新しいパーティションを作成する前に、システムからパーティションを削除します。デフォルトでは、パーティションは削除されません。
clearpart で指定したディスクのパーティションを削除します。

  • sda のパーティションのみ削除
    clearpart --all --drives=sda
    
  • すべてのパーティションを削除し、ディスクを初期化
    clearpart --all --initlabel
    

インストール後のライセンス同意に同意する

下記のように記述することで、ライセンス同意を自動化できます。

# License agreement
eula --agreed

インストール終了後に再起動する

インストールが完了した後に自動的に再起動するように設定します。
私はインストール後に設定を行うことが多いので、再起動しています。

# Reboot after installation
reboot

インストール終了後にシャットダウンする

インストールが完了した後に自動的にシャットダウンするように設定します。
インストール後は一旦シャットダウンさせたい場合は、こちらを使用してください。

# Shutdown after installation
poweroff

インストール中にSSH接続を許可する

インストール中にユーザ名:root、パスワード:hogeでSSH接続を許可します。

sshpw --username=root --password=hoge

rootパスワードを設定する

インストール後にrootパスワードを設定します。
平文のパスワードを記述することもできますが、セキュリティ上の問題があるため、暗号化されたパスワードを記述することをお勧めします。

  • MD5チェックサムをを使用する場合
    • password というパスワードを暗号化する場合
      echo -n "password" | md5sum
      5f4dcc3b5aa765d61d8327deb882cf99  -
      
    • この場合--iscrypted $1$の後に5f4dcc3b5aa765d61d8327deb882cf99を記述します。
      # Root password
      rootpw --iscrypted $1$5f4dcc3b5aa765d61d8327deb882cf99
      
  • SHA-512を使用する場合
    • password というパスワードを暗号化する場合
      echo -n "password" | sha512sum
      b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86  -
      
    • この場合--iscrypted $6$の後にb109... を記述します。
      # Root password
      rootpw --iscrypted $6$b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
      

サービスの有効、無効を設定する

インストール後に有効、無効にするサービスを設定します。

  • libvirtd を無効にする
    # Services
    services --disabled=libvirtd
    
  • chronyd を有効にする
    # Services
    services --enabled=chronyd
    
  • まとめて設定することも可能
    # Services
    services --enabled=chronyd,ssh --disabled=libvirtd,cups
    

パッケージの選択・除外

グループ名やパッケージ名を指定して、インストールするパッケージが選択できます。また、除外するパッケージも指定できます。

指定可能なグループ名、IDの確認方法

  • isoイメージファイルをマウントし、repodataディレクトリにあるcompsファイル(XML)を探します。
    Miracle Linux 8.8の場合、下記2つのファイルがあります。
    BaseOS/repodata/526b1c185400d6c72fd7466b6dc7c21efd13d2b9b86f6921862a8f2f09802d03-BaseOS.xml
    AppStream/repodata/f294109810686230b39d58498b0ec205eb5b364c3f23a4f4669d66b9cbefedbc-AppStream.xml
    
  • XMLを開きます。<group>タグ内の<id>がグループID、<name>がグループ名です。
    <group>
      <id>network-file-system-client</id>
      <name>Network File System Client</name>
    

指定可能なパッケージ名の確認方法

  • isoイメージファイルをマウントします。
  • RHEL7以前の場合
    • Packagesディレクトリにある*.rpmファイルを確認します。
  • RHEL8以降の場合
    • BaseOSAppStreamディレクトリにある*.rpmファイルを確認します。

選択・除外の記述方法

%packages から %end の間に記述します。
グループ名、IDは@を先頭に付けて指定します。パッケージ名はそのまま指定します。
また、除外する場合は、-を先頭につけます。

  • Network File System Client をインストール
    %packages
    @network-file-system-client
    %end
    
  • openssh-server,ipmitool をインストール
    %packages
    openssh-server
    ipmitool
    %end
    
  • cvs,doxygen を除外
    %packages
    -cvs
    -doxygen
    %end
    
  • まとめて設定することも可能
    %packages
    @network-file-system-client
    openssh-server
    ipmitool
    -cvs
    -doxygen
    %end
    

インストール前にスクリプトを実行する

キックスタートファイルが解析され、インストールが開始される前にスクリプトを実行することができます。ハードウェア構成に応じて、ネットワークやストレージ設定を変更することができます。
以下は、sdaはシステム領域とし、sdb以降はSATA接続であれば、ストレージ領域として/var/storage1から順に割り当てるスクリプトを記述しています。

%pre
#!/bin/sh
counter=1
lsblk -dpno NAME,TRAN | while read -r dev type; do
    if [ "$dev" =~ ^/dev/sd && "$type" == "sata" ]; then
        if [ "$dev" != "/dev/sda" ]; then
            storage_num=$(printf "%03d" $counter)
            echo "part /var/storage${storage_num} --fstype=\"xfs\" --grow --ondisk=${dev} --size=1" >> /tmp/part-include
            counter=$((counter + 1))
        fi
    fi
done
%end

パーティションの設定箇所に%include /tmp/part-includeを追加します。

# Disk partitioning information
part /boot/efi --fstype=efi --maxsize=200 --size=200 --ondisk=sda
part / --asprimary --fstype="xfs" --grow --ondisk=sda --size=1
part swap --fstype="swap" --ondisk=sda --recommended
%include /tmp/part-include

こうすることで、ストレージ領域の数にかかわらず、自動的にパーティションを割り当てることができます。

isoイメージファイルにキックスタートファイルを追加

以下の手順はRedHat系のLinux上で行うことを前提としています。

isoイメージファイルをマウントし、コピーする

mkdir /root/ml/{iso,kickstart}

  • デバイスの場合

    mount -o loop,rw -t iso9660 /dev/sr0 /root/ml/iso
  • ファイルの場合

    mount -o loop,rw -t iso9660 MIRACLELINUX-8.8-rtm-x86_64.iso /root/ml/iso
  • コピー

    rsync -a /root/ml/iso/ /root/ml/kickstart/

isoイメージの編集

ブートメニューのカスタマイズ(BIOS)

  • isolinux/isolinux.cfgを開く
  • label linuxと書かれている場所を探す
label linux
  menu label ^Install MIRACLE LINUX 8.8
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet
  • これらをコピーし、1行あけて下にコピーする
  • menu labelを分かりやすい文字列に変更する
  • デフォルトで選択させたい場合はmenu defaultを追加する。

    その場合、他のmenu defaultは削除する。
  • append initrd=の末尾に下記を追加する
    inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg
    
    • 下記のようにインストール時にカーネルパラメータを設定する事も可能。
      inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
      
      (この場合、install_typeというパラメータを追加)
  • 追加した項目の例
    label linux
      menu label ^Install MIRACLE LINUX 8.8 for Production
      menu default
      kernel vmlinuz
      append initrd=initrd.img inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
    
  • タイムアウト時間を変更する場合は、timeoutを変更する。
    • 10秒に設定する場合は、timeout 100に変更する。

ブートメニューのカスタマイズ(EFI)

  • EFI/BOOT/grub.cfgを開く
  • menuentry 'Install MIRACLE LINUX 8.8'と書かれている場所を探す
    menuentry 'Install MIRACLE LINUX 8.8' --class fedora --class gnu-linux --class gnu --class os {
            linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet
            initrdefi /images/pxeboot/initrd.img
    }
    
  • これらをコピーし、menuentry の上(### BEGIN の下)に追加する
  • menuentry の次の文字列(ラベル)を分かりやすい文字列に変更する。
  • linuxefi の末尾(quiet の次)に下記を追加する。
    inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg
    
    • 下記のようにインストール時にカーネルパラメータを設定する事も可能。
      inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
      
      (この場合、install_typeというパラメータを追加)
  • 追加した項目の例
    menuentry 'Install MIRACLE LINUX 8.8 for Production' --class fedora --class gnu-linux --class gnu --class os {
        linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=prouction
        initrdefi /images/pxeboot/initrd.img
    }
    
  • デフォルトで選択させたい場合はset default="1"を変更する。
    • menuentry は0から始まるので、set default="0"に変更することで、最初のメニューをデフォルトにする。
  • タイムアウト時間を変更する場合は、set timeout=60を変更する。
    • 10秒に設定する場合は、set timeout=10に変更する。

isoイメージを再構築

  • iso展開の親ディレクトリに移動
    cd /root/ml/kickstart
    
  • mkisofsを実行。
    mkisofs -r -J -input-charset utf-8  -o ../MIRACLELINUX-8.8-rtm-x86_64-ks.iso  -b isolinux/isolinux.bin -c isolinux/boot.cat  -V "MIRACLE-LINUX-8-8-x86_64" -translation-table -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot  ./
    
    • -Vの後の文字列(ラベル名)は isolinux.cfg, grub.cfgで設定している文字に合わせておくこと。
    • 他のオプションはRHELのWebサイトをそのまま使用

参考

Discussion