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

AlmaLinux 8.6

AlmaLinux 8.6 セットアップメモ

Section 2.3 packer で box 作成 packer で box 作成 2 provisioners

About

Section 2.2 で作成した almalinux8_6-min.json 内の provisioners を設定していきます。

フォルダ構造の確認

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

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

provisioners で実施することの概要

processors で実施するのは、OSのセットアップになりますが、どういうものを追加するにしても次のことは必須となります。

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

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

パッケージのアップデート

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

dnf -y install gcc gcc-c++ make perl kernel-devel-`uname -r` kernel-headers-`uname -r`
dnf -y install elfutils-libelf-devel
dnf -y install epel-release wget bzip2 tar
dnf -y update

最初の2行にある gcc 等は、VirtualBox Guest Additions に必要になるため追加します。

その次は、epel はどうせ使う事が多いのでここでインストール。wget や zip tar も使う頻度が高いのでこれもインストールしておきます。

最後にパッケージ全体をupdateしましょう。

VirtualBox Guest Additions のインストール

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

VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
mount -o loop /home/vagrant/VBoxGuestAdditions.iso /mnt
sh /mnt/VBoxLinuxAdditions.run
umount /mnt
rm -rf /home/vagrant/VBoxGuestAdditions.iso

ひっそりとインストール時にアップロードしてあるVBoxGuestAdditions.isoを使います。 kickstart の post で処理してもいいような気がするのですが、必要なパッケージの問題もあるのでデバックなども考えると、このタイミングにしておくとよいでしょう。

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

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

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

mkdir -pm 700 /home/vagrant/.ssh
curl -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh

鍵はネットで公開しているのか……と思うかもしれませんが、vagrant の公式サイトでもそのまま使って外部公開するなという注釈があるので忘れずに。 独自のカギを使うように変えるのは、vagrantのマニュアルを漁ってください。

クリーンアップ

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

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

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

jsonファイルの修正

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

  "provisioners": [
  ],

が、

  "provisioners": [
    {
      "type": "shell",
      "execute_command": "echo 'vagrant' | sudo -S sh '{{.Path}}'",
      "override": {
        "virtualbox-iso": {
          "scripts": [
            "./provisioners/base.sh",
            "./provisioners/vagrant.sh",
            "./provisioners/virtualbox.sh"
          ]
        }
      }
    },
    {
      "type": "shell",
      "execute_command": "echo 'vagrant' | sudo -S sh '{{.Path}}'",
      "override": {
        "virtualbox-iso": {
          "scripts": [
            "./provisioners/cleanup.sh"
          ]
        }
      }
    }
  ],

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

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

packer build

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

cd c:\vagrant\packer-almalinux-8
..\packer.exe build almalinux8_6-min.json

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

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

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

おまけ

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

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

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