MacOS CatalinaでのVagrant+VirtualBox:でも私のマシンでは動作します!

Vagrantとは何か?

2010年3月にHashicorpのMitchell Hashimotoと彼のパートナーJohn Benderによって最初にリリースされたVagrant は 仮想マシン(VM)のライフサイクル管理のためのオープンソースのコマンドラインツールです。このユーティリティは、このプロセスをより簡単にすることで開発生産性を向上させることを目的としています。Vagrantは当初はOracle VirtualBoxに依存していましたが、バージョン1.1以降、VMware、KVM、その他のサポートも含まれています。しかし、仮想化はウェブ開発に役立つが、Vagrantを使用することは常に完璧なオプションではありません。

なぜVagrantを使用するのか?それは価値があるのか?

まず第一に、Vagrantは 柔軟性が大幅に向上し、ハイパーバイザベースの不変の環境を提供します。これにより、開発者は他のシステムでのみ利用可能な機能を必要とする環境を構築できます。

例えば、さまざまなOSやカーネルをサポートするアプリケーションを構築する必要がある場合、Vagrantを利用してテストを実行できる複数の仮想マシンを簡単に作成できます。同様に、クライアントの環境(OS、リソースなど)を再現したい場合、VMとVagrantを組み合わせることも特に役立つかもしれません。

ワークステーションにVagrantをインストールする

Vagrantの始め方は、公式のVagrant Downloads pageからインストーラーまたは適切なパッケージをダウンロードしてください。以下の手順は、2022年12月現在の最新バージョンであるVagrant v2.3.3についてのものです。

WindowsにVagrantをインストールする

インストールするために Vagrant Windowsには、まずMSIパッケージをダウンロードする必要があります。次に、ファイルを実行し、通常のインストールプロセスを進めることができます。

注意: インストーラーは自動的に’vagrant’をシステムパスに追加するため、ターミナルでも使用可能になります。ただし、Vagrantが見つからない場合は、システムをログアウトして再ログインすることを試してください。Windowsではこれが一般的な問題です。

MacOS CatalinaにVagrantをインストールする

既に’brew’パッケージマネージャーがインストールされていることを想定し、 MacにVagrantを設置するためには、この1行コマンドでインストールを実行できます:

 

```bash
$> brew install vagrant
```

また、Vagrantをインストールするためにバイナリを使用することもできます。

LinuxにVagrantをインストールする

Linuxシステムの場合、Ubuntu 20.04にVagrantをインストールする手順を示します:

キーをインストール:

 

```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

リポジトリを追加:

 

```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```

更新を引き込んでインストールを実行:

 

```bash
$> sudo apt update && sudo apt install vagrant
```

以上で終わりです!今すぐにでもターミナルを開いて「vagrant」と入力してください。ただし、Vagrantをそのまま実行すると、利用可能なサブコマンドのリストが表示されることもあります。

Vagrantインストール時に発生し得る主な問題

ただし、Vagrantのインストールエラーは比較的まれですが、マシン上に複数のハイパーバイザがインストールされている場合、この確率は大幅に上昇します。結局のところ、ハイパーバイザは、既に1つ以上が使用中の場合、仮想マシンの作成を許可しない傾向があります。

以下は、Vagrantの公式ドキュメントからのいくつかの迅速な解決策で、他のハイパーバイザが存在する場合にVagrantとVirtualBoxを使用するのに役立ちます:

Linuxで

他のハイパーバイザを使用している場合、以下のエラーに遭遇することがあります:

 

```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", <ID of the VM>, "--type", "headless"]

Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```

VirtualBoxが正しく実行されるためには、追加のハイパーバイザをシステムの拒否リストに追加する必要があります。

まず、ハイパーバイザの名前を調べてください:

 

```bash
$> lsmod | grep kvm
kvm_intel             204800  6
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm
```

次に、「blacklist」コマンドを使用してハイパーバイザを拒否リストに追加してください。

 

```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```

最後に、マシンを再起動し、再び「vagrant」コマンドを使用してください。

Windowsで

WindowsでVirtualBox VMを起動しようとすると、衝撃的なブルースクリーンに遭遇することがあります。

VirtualBoxを通常通り使用するためには、Hyper-Vを無効にする必要があります。以下の簡単なコマンドを使用してWindows 10で機能をオフにします:

 

```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```

Windows 11でも、管理者権限のあるPowershellを使用できます:

 

```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```

また、Windowsのシステム設定からHyper-Vを無効にすることもできます。

  • Windowsボタンを右クリックして「アプリと機能」を選択
  • 「Windowsの機能の有効化または無効化」を開く
  • Hyper-Vのチェックを外し、最後にOKをクリック

これらの変更を適用するためにコンピュータを再起動します。

MacOSで

VBoxManageを実行しようとする際に以下のエラーメッセージに遭遇した場合:

failed to open /dev/vboxnetctl: No such file or directory

VirtualBoxを完全に再インストールするか、以下のコマンドを使用してください:

 
sudo /Library/StartupItems/VirtualBox/VirtualBox restart

または

 
sudo /Library/StartupItems/VirtualBox/VirtualBox start

最近のバージョンでは、ファイル/Library/StartupItems/VirtualBox/VirtualBoxが存在しないため、以下のコマンドを使用する必要があります。

 
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl

MacOS Catalina: しかし、私のマシンでは動作します

Macで発生する別の問題は、アプリケーションが「私のマシンでは正常に動作します」と言われ、どれだけ懇願や涙を流しても他の場所で同じ動作をさせることができない、古典的な問題です。SPGの私のチームも以前この問題に直面したことがあります。

あなたがVagrantとVirtualBoxを使用してローカル環境を展開・テストしていると想像してください。チーム内のソフトウェアエンジニアの1人は、独自にカスタマイズされたVagrantBoxを使用しており、これまでうまく機能しています。彼らを開発者1と呼びましょう。彼らのワークステーションでは、VirtualBox v6.1.34、Vagrant 2.2、そしてUbuntuが問題なく動作しています。

一方、開発者2のローカル環境をアップグレードする必要があることは明らかです。彼らは現在、MacOS、VirtualBox v6.1.24、そしてVagrant 2.1.xの組み合わせを使用しています。

その結果、少なくとも最初の印象では、開発者2の戦略は以下の通り単純に見えます:

  • ステップ1:VirtualBoxとVagrantのバージョンをアップデートする(統一されたバージョンを使用することが重要)
  • ステップ2:追加のプロジェクトコンポーネントをすべてインストールする

これらの操作はどちらも成功裏に完了しましたが、結果は確かに予想外でした―何らかの理由で、VirtualBoxにインストールされたウェブサイトが完全にアクセス不能になっています。一体どうしたことでしょうか!?

このような謎に直面した場合、以下のような理にかなった行動をとることが重要です:

  • ログファイルを調査する
  • PHP、Nginx、MySQLなどのすべてのVirtualBoxサービスが稼働していることを確認する
  • curlを使用してページにアクセスする

しかし、この場合、すべてが正常に動作しており、VirtualBoxインスタンス内に明らかな問題はありません。

その後、あなたのチームは方針を変更し、VirtualBoxホストが外部から到達可能かどうかを調査することにします。簡単なpingコマンドを使った結果、パケットの100%が失われていることを発見し、驚くことになります。この情報は少し気がかりですが、これが全体の問題の原因かもしれません.

この手がかりに従って、彼らは最終的に、ホストオンリーアダプターが現在異なるIPアドレス範囲を受け取る必要があることを発見します。これは、VirtualBox v6.1.30のアップデート(パッチアップデートなのに)から始まったようです:

 

192.168.55.х prior to the update

192.168.56.х. after the update.

最近改訂されたVirtualBoxのユーザーマニュアルには、

Linux、Mac OS X、およびSolarisでは、Oracle VM VirtualBoxはホストオンリーアダプターに192.168.56.0/21範囲のIPアドレスのみを許可します。」

チーム全員が一安心します。新しいホストオンリーアダプターを作成し、VirtualBoxインスタンスのものを変更した後、問題は突然解決します。ソリューションの重要なウェブコンポーネントが最終的にアクセス可能になり、Developer 2もついに満足します。

Vagrantか…? どのような代替案があり、どうしてそれらが優れているのか?

とても興奮していると、Vagrantの代替品を探すことを許されるかもしれません。しかし、そうすると、ユーティリティとコンテナ(ほとんどの場合、Docker)を比較したウェブサイトにたどり着くことになるでしょう。これは実際に妥当な比較なのでしょうか?結局のところ、それは正しい比較であり、その違いを理解している限りです。

Dockerがハイパーバイザーに対して持つ多くの利点は、同時に欠点とも見なすことができます。それはあなたがそれを何のために使うかによって異なります。では、大きな点から始めましょう:ロード時間。コンテナは基本的に一連のプロセスであるため、迅速に起動できますが、これはホストカーネルを使用することを意味します。その結果、仮想化されたハードウェアに依存する代わりに、コンテナはホストのハードウェアを直接使用します。

ハイパーバイザーは、メモリ、CPU時間、ドライブスペースなどの専用リソースを持つこともできます。一方、コンテナは、ホストコンピュータ上の他のプロセスとリソースを共有します。同様に、Vagrantは完全な仮想マシンを作成できますが、これにはより多くの時間とリソースが必要です。一方、Dockerのコンテナ化アプローチでは、より少ないリソースで迅速に展開できます。

それを念頭に置いて、これは競争ではなく、単にあなたの会社のニーズに関するものであることを覚えておいてください。

結論

Vagrantは間違いなく強力なツールですが、問題に対して免疫ではありません。あなたの会社が専門知識や知識に欠けている場合、専門のソフトウェア開発チームが支援できるかもしれません。結局のところ、たとえそれが「私のマシンで動作する」だけでも、すべての問題に対する解決策が存在します。

Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o