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でメモしてあるコマンドを列挙することで、その手順が再生される……ということになります。
そのため、設定ファイルの作成や編集を、sed
やecho
コマンドを駆使して書き換えるようにすることで、自動化できるようになるというわけです。
この手順がそのまま今度はコンテナ関連でも使えると思うので、工夫してみましょう。