公開日:2022/8/22 0:00:00

AlmaLinux 8.6

AlmaLinux 8.6 セットアップメモ

Section 2.2 packer で box 作成 1 OSインストール

About

vagrant で使用するOSイメージのboxを作成します。
基本的にSection 1.1Section 1.2で作業した内容をそのまま自動化して作成します。 それぞれのメモの内容と異なるのは、vagrantユーザーがあること、鍵認証方式のみに制限していない、公開するわけではないのでSSHやwheel関係はちゃんと設定していないという3点になります。

フォルダ構造

いろいろ作成することになりますが、下記のような構造で作業していきます。
特に説明がなければ、フォルダやファイルはあるということになります。

[-] C:\
 `--[-] vagrant
     |--[+] box
     |--[+] iso
     |--[-] packer-almalinux-8
     |   |--[+] builders
     |   `--[+] provisioners
     `-- packer.exe

構成など

packer のvirtualboxとvagrantのプラグインを使って構築するわけですが、ドキュメントが分かりにくい……一度構成を作成してしまえば、あとはOSのバージョンアップに合わせて微調整という感じになるので、最初だけは手間をかけてください。

基本的には、packer build 設定ファイル.json でjsonファイルの内容に沿ってセットアップをしていきます。 jsonファイル内にすべて書くというわけではなく、builders はOSのインストールと初期構築の設定ファイル……Linux の場合は、kickstartによるインストールの設定等を入れ、その後、provisioners に入れたshellファイルを順次実行させ、post-processorsで保存するという感じになります。

jsonファイル

まずは、packer-almalinux-8 フォルダに、almalinux8_6-min.jsonを作成します。

内容は下記の通り。

{
  "builders": [
    {
      "type": "virtualbox-iso",
      "vm_name": "AlumaLinux8.6-x86_64_minimal",
      "guest_os_type": "RedHat_64",
      "iso_url": "..\\iso\\AlmaLinux-8.6-x86_64-minimal.iso",
      "iso_checksum": "29111d9539830359aecec69ac12cf0e407c7500ffd0b9c46598b15e5fe1f4847",
      "ssh_username": "vagrant",
      "ssh_password": "vagrant",
      "ssh_port": 22,
      "ssh_wait_timeout": "10000s",
      "hard_drive_interface": "sata",
      "disk_size": 8000,
      "shutdown_command": "echo 'vagrant' | sudo -S poweroff",
      "guest_additions_path": "VBoxGuestAdditions.iso",
      "virtualbox_version_file": ".vbox_version",
      "vboxmanage": [
        ["modifyvm", "{{.Name}}", "--memory", "2048"],
        ["modifyvm", "{{.Name}}", "--cpus", "1"]
      ],
      "http_directory": "./builders",
      "boot_wait": "10s",
      "boot_command": [
        "<up><tab> inst.text inst.ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
      ]
    }
  ],
  "provisioners": [
  ],
  "post-processors": [
    {
      "type": "vagrant",
      "keep_input_artifact": false,
      "override": {
        "virtualbox": {
          "output": "./AlmaLinux-9-x86_64-min-jp_VB6.1.36.box"
        }
      }
    }
  ]
}

“iso_url” には、ダウンロードしておいたインストーラーのisoイメージのパス情報を入れておきます。相対指定できるので、適切に設定して下さい。 また、“iso_checksum” は、isoイメージと一緒にダウンロードした、CHECKSUMファイルに記載されている値を使ってください。

それ以外はほぼおまじないですが、仮想マシンのHDD、CPU、メモリを変えたい場合は “disk_size”“vboxmanage” あたりを変更してください。

それ以外の細かいことは VirtualBox Builder (from an ISO)を見て下さい。

これだけ書いても、boot_commandにある ks.cfg がないので、VirtualBox上にイメージだけ作られて終わってしまうだけなので、OSインストールのための設定ファイルを作成します。

OS自動インストールの ks(キックスタートファイル)作成

vagrant\packer-almalinux-9\buildersks.cfgファイルを下記の内容で作成します。 Linux Kickstartファイルなどで検索するとどういうものか説明が出てくると思うのですが、同じ内容でインストールするのに毎回UIを操作するのもだるいよね……というときに使うもの。

基本的には、手動でインストールしたAlamaLinuxの**/home/root**ディレクトリ内にインストール時の条件や設定を記録した、anaconda-ks.cfg を参考にしつつ手を加えたものとなります。順序が異なるので比較しにくいのですが、OSのメジャーアップデート時以外はそうそう見ないと思います。

説明しているサイトも多いのでそれはそれで見てもらいつつ、packagesで、minimal…最小構成を選択したうえで、wifiのドライバ関係は入れないという設定を追加。

自動インストールで設定を変えることや選ぶこともないのにUIが表示されて眺めるのも無駄な感じがするので text ui install というところで、text install にしています。

ホスト名は network —hostname=alumalinux8.localhost で指定。rootパスワードはvagrantを使う関係でvagrantに設定しています。また、vagrantユーザーを作成する必要があるのでそれも作成するようにしていますがこの辺りは、post つまり、パッケージをインストールした直後にコマンドを実行して作成しています。

# AlmaLinux 8.6
#version=RHEL8

# url --url https://repo.almalinux.org/almalinux/8/BaseOS/x86_64/kickstart/
# repo --name=BaseOS --baseurl=https://repo.almalinux.org/almalinux/8/BaseOS/x86_64/os/
# repo --name=AppStream --baseurl=https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/

# Use CDROM installation media
cdrom

%packages
@^minimal-environment
kexec-tools
-iwl100-firmware
-iwl1000-firmware
-iwl105-firmware
-iwl135-firmware
-iwl2000-firmware
-iwl2030-firmware
-iwl3160-firmware
-iwl5000-firmware
-iwl5150-firmware
-iwl6000g2a-firmware
-iwl6050-firmware
-iwl7260-firmware

%end

# text ui install
text
skipx
firstboot --disabled

# System language
lang ja_JP.UTF-8

# Keyboard layouts
keyboard --xlayouts='jp'

# System timezone
timezone Asia/Tokyo --isUtc --ntpservers=ntp.jst.mfeed.ad.jp

# Network information
network --device enp0s3 --bootproto dhcp --ipv6=auto --activate
network --hostname=localhost.example.com

# firewall
firewall --enabled --ssh
selinux --disabled

# services
services --enabled=sshd

# Root password
rootpw --plaintext vagrant

# System bootloader configuration
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

ignoredisk --only-use=sda
autopart --type=plain --nohome --noboot
# Partition clearing information
clearpart --none --initlabel

reboot --eject

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

%post
# /usr/sbin/groupadd vagrant
/usr/sbin/useradd vagrant -G wheel
echo "vagrant" | passwd --stdin vagrant
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant
echo "Defaults:vagrant !requiretty" >> /etc/sudoers.d/vagrant
chmod 0440 /etc/sudoers.d/vagrant
# see Vagrant documentation (https://docs.vagrantup.com/v2/boxes/base.html)
# for details about the requiretty.
sed -i "s/^.*requiretty/# Defaults requiretty/" /etc/sudoers
yum -y update
yum clean all
%end

さて、%post 内にいろいろ書けそうに見えていると思いますが、細かいことは provisioners でやりたいので、ここはここまで。

この時点で、boxファイルが生成される状態になります。

この次は、provisionersについて……これはいろいろあるので別ページにまとめます。