1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RHEL9.xをVagrant + VirtualBoxでデプロイ

Posted at

【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に必要なツールをインストールします。

  1. VirtualBoxとVagrantのインストール

    sudo dnf install -y VirtualBox vagrant
    
  2. 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
    
  3. インストールの確認

    vboxmanage --version
    vagrant --version
    packer --version
    
  4. その他の必要なツールを事前にインストール

    sudo dnf install -y libguestfs-tools qemu-img
    

手順2: RHEL ISOイメージの準備

  1. ISOイメージのダウンロード
    Red Hat Developer Portalから、RHELのDVD ISOイメージをダウンロードします。

  2. チェックサムの計算
    ダウンロードした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.jsonks.cfg)を準備し、カスタマイズします。

  1. 作業ディレクトリの作成とファイルのダウンロード

    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
    
  2. 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
    
  3. 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
    
  4. 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"はご自身の環境に合わせてください。
  5. 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
    

    もしくは、都度 Vagrantfileconfig.vm.synced_folder ".", "/vagrant", disabled: true を追記する。

手順4: PackerによるBoxイメージのビルド

設定が完了したら、PackerでBoxイメージをビルドします。

  1. Packerビルドの実行
    packer.jsonがあるディレクトリで、以下のコマンドを実行します。

    packer build packer.json
    

    PackerがVirtualBoxを起動し、Kickstartの設定に基づいてRHEL 9.4の自動インストールを開始します。

  2. ビルド結果の確認
    ビルドが成功すると、作業ディレクトリ内にoutput-vagrantというディレクトリが作成され、その中にpackage.boxというファイルが生成されています。

手順5: ビルドしたBoxをVagrantで利用する

最後に、完成したBoxイメージをVagrantに追加し、仮想マシンを起動します。

  1. VagrantにBoxを追加
    生成された package.box ファイルを、Vagrantに rhel94-custom という名前で登録します。

    vagrant box add rhel94-custom ./output-vagrant/package.box
    
  2. Vagrantfileの準備と修正
    テスト用のVagrantプロジェクトディレクトリを作成し、Vagrantfileを初期化します。

    mkdir ~/vagrant-rhel94 && cd ~/vagrant-rhel94
    vagrant init rhel94-custom
    
  3. 仮想マシンの起動と確認
    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.jsonprovisionersをカスタマイズして独自のツール入りBoxを作成したりと、様々な応用が可能です。ぜひお試しください。

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?