【RHEL9.x対応】Packerで自作するVagrant VirtualBoxイメージ
はじめに
Red Hat社のライセンスポリシー変更により、Vagrant Cloudで提供されていたRHELの公式・準公式Boxの更新が停止し、RHEL 9.4のような新しいバージョンのBoxが利用できなくなりました。
しかし、Red Hat Developer Programを利用すれば、開発用途のRHEL ISOイメージは引き続き無料で入手可能です。
そこで本記事では、このISOイメージとPackerを使い、サブスクリプション未登録のクリーンな状態のRHEL 9.4 Vagrant Box for VirtualBoxを自分自身でビルドする手順を詳しく解説します。
前提/検証条件
- ホストOS: Fedora 41 (x86_64アーキテクチャ)
- 仮想化ソフトウェア: VirtualBox (7.1.6r167084)
- Boxビルドツール: Packer (v1.13.0)
- 仮想環境管理ツール: Vagrant (2.4.6)
-
入手済みファイル: Red Hat DeveloperサイトからダウンロードしたRHEL 9.xのインストール用ISOイメージ (
rhel-9.4-x86_64-dvd.iso
など) - 利用させていただいたPacker定義のベース: https://github.com/alvistack/vagrant-rhel/blob/master/packer/rhel-9-virtualbox/ におけるks.cfgおよびpacker.json
手順1: 必要なツールのインストール
ホストOSに必要なツールをインストールします。
-
VirtualBoxとVagrantのインストール
sudo dnf install -y VirtualBox vagrant
-
Packerのインストール
sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo sudo dnf install -y packer
-
インストールの確認
vboxmanage --version vagrant --version packer --version
-
その他の必要なツールを事前にインストール
sudo dnf install -y libguestfs-tools qemu-img
手順2: RHEL ISOイメージの準備
-
ISOイメージのダウンロード
Red Hat Developer Portalから、RHELのDVD ISOイメージをダウンロードします。 -
チェックサムの計算
ダウンロードしたISOファイルの整合性を確認するため、cksum
コマンドでチェックサムを計算します。# 例: ダウンロードしたISOファイルが ~/Downloads にある場合 $ cd ~/Downloads $ sha256sum ./rhel-9.4-x86_64-dvd.iso 398561d7b66f1a4bf23664f4aa8f2cfbb3641aa2f01a320068e86bd1fc0e9076 ./rhel-9.4-x86_64-dvd.iso
実行結果のチェックサム値(398561d7b66f1a4bf23664f4aa8f2cfbb3641aa2f01a320068e86bd1fc0e9076)をメモしておきましょう。
手順3: Packer設定ファイルの準備と修正
Packerでのビルドに必要な設定ファイル(packer.json
とks.cfg
)を準備し、カスタマイズします。
-
作業ディレクトリの作成とファイルのダウンロード
mkdir ~/rhel94-packer && cd ~/rhel94-packer wget https://raw.githubusercontent.com/alvistack/vagrant-rhel/master/packer/rhel-9-virtualbox/packer.json wget https://raw.githubusercontent.com/alvistack/vagrant-rhel/master/packer/rhel-9-virtualbox/ks.cfg
もしくは
git clone https://github.com/alvistack/vagrant-rhel.git cd ~/vagrant-rhel/packer/rhel-9-virtualbox
-
ks.cfgの編集: 日本語環境へのカスタマイズ
必要であれば、ks.cfg
ファイル内で言語、キーボード、タイムゾーンの設定を日本語環境向けに変更できます。ks.cfg... lang en_US.UTF-8 # -> lang ja_JP.UTF-8 keyboard --vckeymap=us --xlayouts='us' # -> keyboard --vckeymap=jp106 --xlayouts=jp timezone America/New_York --isUtc # -> timezone Asia/Tokyo --isUtc
-
ks.cfgの編集: ディスクパーティションのカスタマイズ
オリジナルでは役割ごとにサイズを指定してパーティションを割り振っている。clearpart --all --initlabel --disklabel=gpt part biosboot --size=1 --fstype=biosboot part /boot --size=8192 --fstype=ext4 part swap --size=8192 --fstype=swap part / --grow --fstype=ext4
例えば自動的に割り振らせるのであれば、以下の様に編集する。
clearpart --all --initlabel --disklabel=gpt --drives=sda autopart --type=plain --nohome --fstype=ext4
-
packer.json
の修正
packer.json
を編集し、ISOパス、チェックサム、プロビジョナ、出力先を修正します。-
builders:
headless:
falseに変更した場合、packer実行時にvirtualboxのpopupが開き、途中経過を確認できる。 -
builders:
iso_url:
: ローカルのISOファイルを指定。 -
builders:
iso_checksum:
: 手順2で計算した値に書き換え。 -
post-processors
:vagrantfile_template
の項を追加し、Vagrantfile.tplを指定 -
provisioners:
: サブスクリプション登録処理を無効化しRed Hatアカウントに紐付けないクリーンなBoxを作成するため、空[]
とします。ただし、その結果、VirtualBox Guest Additionsのビルドに必要なdkms
等がインストールされなくなり、ディスクのシェアなどが利用できないことになります。(制約)
以下は修正後の
packer.json
の例です。{ "builders": [ { .... "headless": false,2.4.6 .... "iso_checksum": "398561d7b66f1a4bf23664f4aa8f2cfbb3641aa2f01a320068e86bd1fc0e9076", "iso_url": "file:///home/user/Downloads/rhel-9.4-x86_64-dvd.iso", .... "post-processors": [ .... { .... "type": "vagrant", "vagrantfile_template": "Vagrantfile.tpl" } ], "provisioners": [] }
【修正のポイント】
-
"iso_url"
と"iso_checksum"
はご自身の環境に合わせてください。
-
-
Vagrantfile.tpl
の用意
デフォルトの属性を定義するVagrantfileのテンプレートファイルとして./Vagrantfile.tplを用意し、synced_folderの無効化などを指定。Vagrant.configure("2") do |config| config.vm.box = "{{ .BoxName }}" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.provider "virtualbox" do |vb| vb.memory = 2048 vb.cpus = 2 vb.customize ["modifyvm", :id, "--ioapic", "on"] end end
もしくは、都度
Vagrantfile
にconfig.vm.synced_folder ".", "/vagrant", disabled: true
を追記する。
手順4: PackerによるBoxイメージのビルド
設定が完了したら、PackerでBoxイメージをビルドします。
-
Packerビルドの実行
packer.json
があるディレクトリで、以下のコマンドを実行します。packer build packer.json
PackerがVirtualBoxを起動し、Kickstartの設定に基づいてRHEL 9.4の自動インストールを開始します。
-
ビルド結果の確認
ビルドが成功すると、作業ディレクトリ内にoutput-vagrant
というディレクトリが作成され、その中にpackage.box
というファイルが生成されています。
手順5: ビルドしたBoxをVagrantで利用する
最後に、完成したBoxイメージをVagrantに追加し、仮想マシンを起動します。
-
VagrantにBoxを追加
生成されたpackage.box
ファイルを、Vagrantにrhel94-custom
という名前で登録します。vagrant box add rhel94-custom ./output-vagrant/package.box
-
Vagrantfileの準備と修正
テスト用のVagrantプロジェクトディレクトリを作成し、Vagrantfile
を初期化します。mkdir ~/vagrant-rhel94 && cd ~/vagrant-rhel94 vagrant init rhel94-custom
-
仮想マシンの起動と確認
vagrant up
で仮想マシンを起動します。vagrant up
起動が完了したら、SSHで接続してOSのバージョンを確認しましょう。
vagrant ssh [vagrant@localhost ~]$ cat /etc/redhat-release Red Hat Enterprise Linux release 9.4 (Plow)
無事にRHEL 9.4が起動すれば成功です。
まとめ
本記事では、Packerを用いてサブスクリプション未登録のクリーンなRHEL 9.4 Vagrant Boxを自作する方法を紹介しました。
この手順により、dkms
やGuest Additionsを含まない最小限のBoxが作成され、Vagrant実行時に共有フォルダの無効化が必要になりますが、外部アカウントに依存しない、よりポータブルな開発環境の元イメージとして活用できます。
これをベースに、Vagrantfile
のプロビジョニング機能を使って必要なパッケージを導入したり、packer.json
のprovisioners
をカスタマイズして独自のツール入りBoxを作成したりと、様々な応用が可能です。ぜひお試しください。