公開日:2026/1/25 0:00:00

AlmaLinux 10.1 セットアップメモ

Section 1.3 packer で box 作成 packer で box 作成 2 - provisioners -

About

Section 1.2 で作成した almalinux10_1-min-SELinux.pkr.hcl 内の provisioners を設定していきます。

フォルダ構造の確認

ここまでで、仮想マシンにOSがインストールされた状態までは作成できたと思いますが、そこからコマンドを一つ一つ打って環境を作っていてはあまり意味がありません。 その構築のためのコマンドをまとめて実行するのが provisioners で、その内容をまとめたフォルダが provisioners になります。

[-] C:\
 `--[-] vagrant
     |--[+] box
     |--[+] iso
     |--[-] packer-almalinux-10
     |   |--[+] builders
     |   |--[+] provisioners
     |   `-- almalinux10_1-min-SELinux.pkr.hcl
     `-- packer.exe

特定環境用のboxを作る場合は、provisioners 内にセットアップコマンドを入れておけばいいでしょう。 なお、最小限の構成はこうしていますが、バージョン指定が含まれるものや構成次第では provisioners とは別で管理したほうが良いです。

provisioners で実施することの概要

基本的な provisioners 内のシェルで実行するのはvagrantで使うために必要なものをインストールすることとboxファイルの容量削減のための処理です。

  • VirtualBox Guest Additions のインストール
  • vagrant ユーザーの認証方法の追加設定
  • クリーンアップという名の余計な部分の掃除

この 3ファイルを作成してから HCLファイルに追加します。

VirtualBox Guest Additions のインストール

provisioners/virtualbox.sh ファイルを下記の内容で作成します。

echo 'Install VBoxLinuxAdditions'
dnf -y install gcc gcc-c++ make perl kernel-devel-`uname -r` kernel-headers-`uname -r`
VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
mount -o loop /home/vagrant/VBoxGuestAdditions.iso /mnt
sh /mnt/VBoxLinuxAdditions.run
# /sbin/rcvboxadd quicksetup all
umount /mnt
rm -rf /home/vagrant/VBoxGuestAdditions.iso

ひっそりとインストール時にアップロードしてあるVBoxGuestAdditions.isoを使ってインストールしています。 kickstart の post で処理する方法もあるのですが、カーネルがアップデートされていた場合にトラブルになるため、このタイミングにしています。 Virtualbox のバージョンとカーネルに依存しているので、PC内の Virtualboxのバージョンを更新した場合は VirtualBox Guest Additions も更新する必要があります。 vagrantのプラグインに自動更新するものもあるらしいので、必要があればそれの活用も検討してください。

また、 /sbin/rcvboxadd quicksetup all はコメントアウトしていますが、インストールされているすべてのカーネルに対して処理をするというものです。 いろいろと試していた時の名残ですが、構築時に Guest Additions が思ったように入らない場合に試してみてください。

vagrant ユーザーの認証方法の追加設定

vagrant で、sshを使う場合、vagrant ssh を使いますが、認証鍵方式でアクセスしています。 そのためのssh鍵などを設定します。

provisioners/vagrant.sh ファイルを下記の内容で作成します。

mkdir -pm 700 /home/vagrant/.ssh
curl -L https://raw.githubusercontent.com/hashicorp/vagrant/refs/heads/main/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh

鍵はネットで公開しているのか……と思うかもしれませんが、vagrant の公式サイトでもそのまま使って外部公開するなという注釈があるので忘れずに。 なお、kickstart内で、パスワードログインも許可しているので、好みのターミナルアプリを使って、localhost:2222 にアクセスして vagrant (password: vagrant) でログインすることもできます。

クリーンアップ

provisioners/cleanup.sh ファイルを下記の内容で作成します。

dnf -y clean all
rm -f /tmp/*
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY

box ファイルの圧縮率を上げるためのコマンドです。 dd で空き容量すべてにzeroを書き込んでから削除することで、使用している微妙な空きを片付けている……と思ってください。

HCLファイルの修正

shellファイルが準備できたので、実行するようにHCLファイル、almalinux9_6-SELinux-min.pkr.hclを書き換えます。

build {
  sources = ["source.virtualbox-iso.AlmaLinux"]

  provisioner "shell" {
    execute_command = "echo 'vagrant' | sudo -S sh '{{ .Path }}'"
    inline = [
      "dnf -y update",
      "reboot"
    ]
    expect_disconnect = true
    pause_after = "30s"
  }

  provisioner "shell" {
    execute_command = "echo 'vagrant' | sudo -S sh '{{ .Path }}'"
    scripts = [
      "./provisioners/vagrant.sh",
      "./provisioners/virtualbox.sh"
    ]
  }

  provisioner "shell" {
    execute_command = "echo 'vagrant' | sudo -S sh '{{ .Path }}'"
    scripts = [
      "./provisioners/cleanup.sh"
    ]
  }

  post-processor "vagrant" {
    keep_input_artifact = false
    output = "./AlmaLinux-${local.alumalinux_version}-x86_64-min-jp-SELinux_VB${var.virtualbox_version}.box"
  }
}

という感じに書き換わります。

また、ベース部分とクリーンアップを二つに分けているのは、その間にWebサーバーやDBの構築手順が入る可能性があるためです。 それらもまとめてscriptsに列挙してもいいのですが、追加部分なのかそうでないのかが判別しにくいかなということもあり、ブロック分けをしています。

packer build

すべて整ったらpowershellやcygwin上からpackerを実行します。

PS> cd c:\vagrant\packer-almalinux-10
PS> ..\packer.exe build almalinux10_1-SELinux-min.pkr.hcl

必ずHCLファイルがある場所に移動してから実行してください。相対パスに影響するのでその場所で実行という感じになります。

実行後は、勝手にvirtualbox のウィンドウが開いてインストールが始まり、再起動後に、今度はpowershellのコンソールからコマンドが実行される様子が見られ、勝手に終了してboxファイルの作成まで進みます。

完成すれば、HCL内のoutputに書いたファイル名で出力されているので、あとはvagrantから使ってみましょう。

おまけ

processors に書いた shell には、この後のsectionでメモしてあるコマンドを列挙することで、その手順が再生される……ということになります。

そのため、設定ファイルの作成や編集を、sedechoコマンドを駆使して書き換えるようにすることで、自動化できるようになるというわけです。

この手順がそのまま今度はコンテナ関連でも使えると思うので、工夫してみましょう。