はじめに

ついこないだCentOS7が出たような気がしていたのですが、時が経つのは早いもので2020年1月にはCentOS8.1がリリースされていました。
このあたりのOSはどんどん進化していきますね。
とはいえ、オンプレミス環境にしろクラウド環境にしろ、一度環境を構築して運用を始めると、実務に直結しないとなかなか新しいOSに手が出にくいという実情もあったりします。
今回ブログを執筆する機会を得ましたので、せっかくなのでWindowsでCentOS8.1でオーソドックスなLAPP(Linux/Apache/Postgresql/PHP)での開発環境を、Vagrantで作ってみようかと思います。
今回はまず、CentOS8.1の導入をしていきたいと思います。
使用する仮想化ソフト
ソフトウェア | バージョン |
Vagrant | 2.2.9 |
VirtualBox | 6.1.8 r137981 |
セットアップする環境
環境 | バージョン |
CentOS | 8.1 |
Apache | 2.4 |
Postgresql | 10 |
PHP | 7.4 |
VirtualBoxの導入
まずは仮想化ソフトのVirtualBoxをインストールします。
執筆時点では6.1.8でしたが、もしかしたらもう少しバージョンが上がっているかもしれません。
自身の環境に合わせてダウンロードとインストールを行ってください。その際に再起動も必要に応じて行ってください。
ダウンロード先URL:https://www.virtualbox.org/wiki/Downloads
Vagrantの導入
Vagrantのインストール
VirtualBoxに引き続き、Vagrantのダウンロードとインストールを行いましょう。
Vagrantは、複数の仮想化ソフト(VirtualBox、VMWareなど)を一括してコマンドラインから操作できるラッパーソフトで、Vagrantfileと呼ばれるテキストベースの定義ファイルを作成することで、仮想化環境を簡単に再現することができるソフトウェアです。
ダウンロード先URL:https://www.vagrantup.com/downloads
インストール後、コマンドプロンプトやPowerShellから下記のコマンドを入力することで、インストール確認が行えます。
Vagrantのバージョン確認コマンドです。
1 |
vagrant -v |
共有ファイルが使えるようにプラグインの導入
Vagrantをインストール・実行しているホスト環境(自分の環境はWindows)上のファイルを、仮想マシン上にマウントして使用できるようにするため、「vagrant-vbgues」というプラグインをインストールします。
コマンドプロンプトや、PowerShellからコマンドを入力して実行します。
1 |
vagrant plugin install vagrant-vbguest |
Vagrantfileの設定
続いてVagrantfileを設定していきます。
ここでは、例えばVMマシンのイメージであったり、使用するIPアドレスやポート番号、プロビジョニング用のスクリプト定義などを記載することが可能です。
まずはWindows上の任意のディレクトリ上にVagrantfileを作成したいので、下記のようなコマンドをコマンドプロンプトやPowerShellから実行します。
1 2 |
C:\path\to\file\directory vagrant init |

「Vagrantfile」というファイルができたかと思います。
「C:\path\to\file\directory」は各々Vagrantfileを作成したい任意のディレクトリパスを指定していただければと思います。
色々な設定サンプルがコメントアウトして記載されていますが、今回は全部削除して、下記のように書き換えてしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# https://github.com/dotless-de/vagrant-vbguest/issues/367 # https://github.com/dotless-de/vagrant-vbguest/pull/373 if defined?(VagrantVbguest) class MyWorkaroundInstallerUntilPR373IsMerged < VagrantVbguest::Installers::CentOS protected def has_rel_repo? unless instance_variable_defined?(:@has_rel_repo) rel = release_version @has_rel_repo = communicate.test(centos_8? ? 'yum repolist' : "yum repolist --enablerepo=C#{rel}-base --enablerepo=C#{rel}-updates") end @has_rel_repo end def centos_8? release_version && release_version.to_s.start_with?('8') end def install_kernel_devel(opts=nil, &block) if centos_8? communicate.sudo('yum update -y kernel', opts, &block) communicate.sudo('yum install -y kernel-devel', opts, &block) communicate.sudo('shutdown -r now', opts, &block) begin sleep 10 end until @vm.communicate.ready? else rel = has_rel_repo? ? release_version : '*' cmd = "yum install -y kernel-devel-`uname -r` --enablerepo=C#{rel}-base --enablerepo=C#{rel}-updates" communicate.sudo(cmd, opts, &block) end end end end Vagrant.configure("2") do |config| config.vagrant.plugins = ['vagrant-vbguest'] config.vbguest.auto_update = true config.vm.box = "centos/8" config.vm.box_url = "http://cloud.centos.org/centos/8/x86_64/images/CentOS-8-Vagrant-8.1.1911-20200113.3.x86_64.vagrant-virtualbox.box" if defined?(MyWorkaroundInstallerUntilPR373IsMerged) config.vbguest.installer = MyWorkaroundInstallerUntilPR373IsMerged end config.vm.synced_folder "C:\\src\\path\\to\\synced\\dir", "/dest/synced\dir" config.vm.provision "shell", inline: <<-SHELL dnf -y update SHELL end |
本来ここまで長々複雑になる予定ではなかったのですが・・・・・。
今回はHashiCorp Vagrant CloudにアップロードされているCentOS8を使用していきたい・・・と思っていたところで問題発生。
上記のサイトがVagrant CloudのCentOS8のWEBサイトなのですが、ここに記載されているBoxのバージョンがCentOS8.0のもので、このページ記載されているバージョンで仮想マシンを起動すると、プロビジョニングでエラーを引き起こしてしまいます。
なので、プロビジョニング時にエラーになっている原因を解消するためのスクリプトの追加と、別途Boxの指定を別のものに変えることにしました。
このやり方の参考サイト:
- https://qiita.com/You_name_is_YU/items/a7e2ca82ba48faee8e97
- https://github.com/dotless-de/vagrant-vbguest/issues/367#issuecomment-619375784
ここは今後のバージョンアップが望まれますね。
そのほか、共有ファイルのマウント設定(ここもWindowsとLinuxの任意のパスに書き換えてください)や、プロビジョニング時にパッケージ更新のシェルを実行する命令を記載しています。
CentOS8から、パッケージマネージャーが「yum」から「dnf」に変わったようですね。
yumでも実行可能なようですが、dnfのエイリアスになっているようです。
Vagrant実行
さて、いよいよ仮想マシンの起動を行います。
起動は下記のコマンドで行うことができます。
1 |
vagrant up |
これで定義ファイルに記載されている通りに仮想マシンが起動されます。
初回起動時は、OSイメージのダウンロードとVMイメージの作成、VirtualBoxへの登録が自動的に行われます。
エラーなく実行が終了していれば大丈夫です。
試しに下記のコマンドでログインしてみましょう。
1 |
vagrant ssh |
無事ログインができれば完了です。
さて、今回はここまで。CentOS8.1のインストールまで終わりました。
次回はいよいよミドルウェア系のインストールを行っていきたいと思います。