Creating RHEL7.3 Vagrant Box using Packer and VitualBox on Windows10
準備するもの。
あと、ハッシュ計算できるコマンドも必要かな。
自分の場合はpowershell立ち上げたらmd5sumなどが見つかったけど。
とりあえず、RHEL以外をインストールしてくださいな。
RHELの話
Red Hat Developer Programに参加して、
(登録は必要だけど)無償でRHELを手にいれます。
あくまで個人用で、VirtualBox上で動かします。
VirtualBoxで動かす例は、Red Hatのページでも手順が公開されていますが、
手でペチペチインストールするのが面倒臭くなるので徐々に自動化します。
はじめは手でインストール
anaconda-ks.cfgが欲しいじゃないですか。
それを手直しして、とりあえずこういう感じのにしました。
firewallを書き忘れてたり、ツッコミどころはたくさん。
ミニマムインストールなのに、レポジトリの追加もしてます。
いつか使うかもしれんから勉強のために追加してるだけです。
auth --enableshadow --passalgo=sha512 repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage text cdrom firstboot --enable ignoredisk --only-use=sda keyboard --vckeymap=jp --xlayouts='jp' lang en_US.UTF-8 --addsupport=ja_JP.UTF-8 network --bootproto=dhcp --device=enp0s3 --onboot=true --ipv6=auto network --hostname=localhost.localdomain rootpw --iscrypted $6$VzSTNp8xLdgMSJNe$Ns6mWbts4wIV9NRt.mZhDaQZLSKuzfEwZ.gXDw3hmVTJtkYbERPhB3jil.OghoOc6yEBtQe6tz9ovbMVvB18E/ services --disabled="chronyd" timezone Asia/Tokyo --isUtc --nontp user --name=vagrant --password=$6$hyGjqRR76Cf5KOF9$gwz6bfU8HvYB.15VjAIdKWB8jJAAJ8rlS9kuv6gWfAZNvN9JkmCCJDepiFM4eYNexD2E0.CRjXoEJwOloJUVF. --iscrypted --gecos="vagrant" bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm clearpart --none --initlabel eula --agreed reboot %packages @^minimal @core kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end %anaconda pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty %end %post %end
ネットワークはonboot付けてないと面倒です。
付け忘れた場合はあとでks.cfgのfetchに失敗しますよ。
ユーザとパスワードは以下のとおりです。
root/vagrant
vagrant/vagrant
まあ、Vagrant用のBoxを作る前提ですからね。
日本語うざいんで、langをen_US.UTF-8をメインにしてます。
Packerのファイルを作る
ks.cfgを使う設定ファイル(rhel73.json)を書いた。
{ "description": "creating rhel 7.3 vagrant box", "builders": [ { "type": "virtualbox-iso", "vm_name": "packer-rhel73", "guest_os_type": "RedHat_64", "iso_url": "file:///C:/Users/{{user `username`}}/Downloads/rhel-server-7.3-x86_64-dvd.iso", "iso_checksum": "34a65dbdfb8d9bb19b3a03d278df2a99", "iso_checksum_type": "md5", "ssh_username": "root", "ssh_password": "vagrant", "shutdown_command": "echo 'packer' | sudo -S shutdown -P now", "http_directory": ".", "vboxmanage":[ ["modifyvm", "packer-rhel73", "--memory", "2048"], ["modifyvm", "packer-rhel73", "--cpus", "2"] ], "boot_command": [ "<esc><wait>", "linux ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg ksdevice=enp0s3<enter>", "<wait>" ] } ], "provisioners":[ { "type": "shell", "inline": [ "cat <<__EOF > /etc/sudoers.d/vagrant", "vagrant ALL=(ALL) NOPASSWD:ALL", "__EOF", "chmod 440 /etc/sudoers.d/vagrant" ] }, { "type": "shell", "inline": [ "mkdir -p /home/vagrant/.ssh", "chmod 700 /home/vagrant/.ssh", "chown vagrant:vagrant /home/vagrant/.ssh", "cat <<__EOF > /home/vagrant/.ssh/authorized_keys", "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key", "__EOF", "chmod 600 /home/vagrant/.ssh/authorized_keys", "chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys" ] }, { "type": "shell", "inline": [ "mkdir -p /media/cdrom", "mount /dev/cdrom /media/cdrom", "cat <<__EOF > /etc/yum.repos.d/rhel-dvd.repo", "[rhel-dvd]", "name=Red Hat Enterprise Linux 7.3 - x86_64 - DVD", "baseurl=file:///media/cdrom/", "enabled=0", "gpgcheck=1", "gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release", "__EOF", "yum -y --enablerepo=rhel-dvd install bzip2 gcc make kernel-devel", "yum -y --enablerepo=rhel-dvd groupinstall \"X Window System\"", "mkdir -p ~/guestaddition", "mount -t iso9660 -o loop ~/VBoxGuestAdditions.iso ~/guestaddition", "~/guestaddition/VBoxLinuxAdditions.run", "umount ~/guestaddition", "rm -rf ~/guestaddition ~/VBoxGuestAdditions.iso" ] }, { "type": "shell", "inline": [ "yum -y --enablerepo=rhel-dvd install unzip lsof psmisc", "umount /media/cdrom", "eject -r /dev/cdrom" ] } ], "post-processors": [ { "type": "vagrant", "compression_level": 1 } ] }
vm名なんかは変えてください。
これは手インストール時に使った名前と被らないようにしただけです。
yum.repos.dへの追加には、addonの類が入ってませんが、好みで追加してくださいな。
ksdeviceを書くのは過去の経験からです。
奇妙なヒアドキュメントの書き方がありますが、これで動きます。
あの配列は改行コード付きで連結されるという仕様があるためです。
簡単に言うとpackerは自前サーバを立てて、http_directoryにあるks.cfgを公開します。
bootコマンドを受け付けた側は、ネットワーク経由でそのks.cfgを見に行きます。
そのため、このときにハマるのはたいていネットワーク系の問題です。
あと、今回メモリは2GBしか割り当ててないですが、RHELは4GB(推奨8GB)です。
おそらくそのあたりが原因でkdumpサービスが起動できてないように思います。