原文はこちら。
https://blogs.oracle.com/wim/running-virtualbox-inside-a-vm-instance-in-oracle-cloud-infrastructure
OK - だから、 「なぜ?」と聞かないでください。その理由は、できるから、つまり、ほとんどの場合に対して答えがあるからです。
Oracle Cloud InfrastructureはNested Virtualizationをサポートしています。VMインスタンスをOCIで作成し、Oracle Linux 7をUEKで実行すると、KVMもしくはVirtualBox VMを内部に作成できます(作り方はすぐにご紹介します)。ベアメタルインスタンスを作成すると、通常のローカルサーバー上でインストールするのと同じVirtualBoxをインストールしたり、KVMを利用したりできます。ベアメタルサーバーなので、ハードウェアおよびその機能にフルアクセスできます。
VirtualBoxには、(仮想化されている場合でも)リモート実行に便利な組み込み機能があります。 1つの例が、組み込みのvRDPサーバーで、リモートの動画や音声(ビデオチャンネルの有効化/チューニング)を利用できます。ローカルのVirtualBoxイメージを簡単に作成し、変更しないでリモートで実行できます。定常的に起動/停止する小さなVMを作成できるということで、vagrantのboxを利用できます。つまり、vagrantのVirtualBox環境全体をリモートクラウドに開放します。そんなわけで、「できるから」という言葉はさておき、これにはよい実ユースケースがあります。
どうやって構成すればいいのでしょうか。ほとんどの場合、かなり簡単です。OCIのVMにVirtualBoxをインストールする方法は、ローカルのデスクトップまたはサーバーにインストールする方法と変わりありません。VirtualBoxでゲストVMを設定するには、完全なリモートデスクトップをインストールしてvncなどを実行するのではなく、する代わりにコマンドライン(vboxmanage)を使用します。コマンドラインを使って行うほうがはるかに高速です。BridgeモードでVirtualBoxを実行して、OCIネイティブ・クラウド・ネットワーク機能(VCN/Subnet/IPアドレス、パブリックIP(NATなし)でさえも)にフルアクセスできるようにするには、 少々やるべきことがあります。
そのステップをご紹介します。私はたくさんスクリーンショットを貼り付けるタイプの人間ではないので、ほとんどが文章になってしまいますがご容赦を。
VMインスタンスにログインします。OCI WebコンソールからプライマリVNICが接続されていることがわかります。これは、VMの内部ではens3になるかもしれません。 OCI Webコンソールでは、VNICには名前が付いています(通常、プライマリVNICの名前はインスタンス名と同じです)。プライベートIPを持っていて、パブリック・ネットワーク上におく場合はパブリックIPアドレスも使用します。これらすべてのものを、インスタンス作成の一環で標準で構成します。
VirtualBoxでBridgeネットワークを使用する方法をご紹介したいので、2番目のVNICが必要です。この時点で作成することもできますし、後で戻ってVirtualBox VMを起動する準備が出来てから作成することもできます。Webコンソール内(またはOCI CLIを使用)でAttached VNICsに移動し、特定のVCN/Subnet上にVNICを作成します。
メモが必要な重要な情報は、この新しく作成されたvnicのMACアドレスとプライベートIPアドレスです。この例では、10.0.0.2と00:00:17:02:EB:EAで、後でこの情報が必要です。
まず、インストーラのISOイメージから新しいVMを作成したい場合は、インストール・メディアをOCI VMにアップロードしてください。 ここでは、以下のURLから入手できるOracle Linux 7.5のプレビューイメージをアップロードしました。
当然ながら、OCIブロックストレージをVMにアタッチして、VirtualBoxの仮想ディスクをそのボリュームにおきます。以下の例では、40GBの仮想ディスクイメージを作成し、OL7.5 ISOをDVDイメージとしてアタッチしています。
これはやや複雑です。このセカンダリVNIC用にどのネットワークデバイスがVMホスト上に作成されているかを確認する必要があります。
注意:コマンドラインでは、macアドレスに:(コロン)を使用しないでください。
VMを起動する前に、ホスト上のリモートRDP接続用にファイアウォールを開き、OCIコンソールでも同じ操作を行います。ホストのプライマリVNICのセキュリティ・リストを変更して、ポート3389(RDP)へのインバウンドトラフィックを許可します。
https://blogs.oracle.com/wim/running-virtualbox-inside-a-vm-instance-in-oracle-cloud-infrastructure
OK - だから、 「なぜ?」と聞かないでください。その理由は、できるから、つまり、ほとんどの場合に対して答えがあるからです。
Oracle Cloud InfrastructureはNested Virtualizationをサポートしています。VMインスタンスをOCIで作成し、Oracle Linux 7をUEKで実行すると、KVMもしくはVirtualBox VMを内部に作成できます(作り方はすぐにご紹介します)。ベアメタルインスタンスを作成すると、通常のローカルサーバー上でインストールするのと同じVirtualBoxをインストールしたり、KVMを利用したりできます。ベアメタルサーバーなので、ハードウェアおよびその機能にフルアクセスできます。
VirtualBoxには、(仮想化されている場合でも)リモート実行に便利な組み込み機能があります。 1つの例が、組み込みのvRDPサーバーで、リモートの動画や音声(ビデオチャンネルの有効化/チューニング)を利用できます。ローカルのVirtualBoxイメージを簡単に作成し、変更しないでリモートで実行できます。定常的に起動/停止する小さなVMを作成できるということで、vagrantのboxを利用できます。つまり、vagrantのVirtualBox環境全体をリモートクラウドに開放します。そんなわけで、「できるから」という言葉はさておき、これにはよい実ユースケースがあります。
どうやって構成すればいいのでしょうか。ほとんどの場合、かなり簡単です。OCIのVMにVirtualBoxをインストールする方法は、ローカルのデスクトップまたはサーバーにインストールする方法と変わりありません。VirtualBoxでゲストVMを設定するには、完全なリモートデスクトップをインストールしてvncなどを実行するのではなく、する代わりにコマンドライン(vboxmanage)を使用します。コマンドラインを使って行うほうがはるかに高速です。BridgeモードでVirtualBoxを実行して、OCIネイティブ・クラウド・ネットワーク機能(VCN/Subnet/IPアドレス、パブリックIP(NATなし)でさえも)にフルアクセスできるようにするには、 少々やるべきことがあります。
そのステップをご紹介します。私はたくさんスクリーンショットを貼り付けるタイプの人間ではないので、ほとんどが文章になってしまいますがご容赦を。
Step 1: Create an OCI VM and create/assign an extra VNIC to pass through to your VirtualBox VM.
OCIアカウントをお持ちでない場合は、サインアップして300ドルのクレジットトライアルアカウントを取得できます。始めるにはそれで十分のはずです。Try for Free - Oracle Cloudアカウントをセットアップし、サブネットを持つVCN(Virtual Cloud Network)を作成し、アベイラビリティ・ドメイン/リージョンの1つにVMインスタンスを作成します。テスト目的で、Oracle Linux 7のVM.Standard2.2シェイプ・インスタンスを作成しました。このインスタンスを作成すれば、ユーザーopcでログインして作業を開始できます。
https://cloud.oracle.com/tryit
VMインスタンスにログインします。OCI WebコンソールからプライマリVNICが接続されていることがわかります。これは、VMの内部ではens3になるかもしれません。 OCI Webコンソールでは、VNICには名前が付いています(通常、プライマリVNICの名前はインスタンス名と同じです)。プライベートIPを持っていて、パブリック・ネットワーク上におく場合はパブリックIPアドレスも使用します。これらすべてのものを、インスタンス作成の一環で標準で構成します。
VirtualBoxでBridgeネットワークを使用する方法をご紹介したいので、2番目のVNICが必要です。この時点で作成することもできますし、後で戻ってVirtualBox VMを起動する準備が出来てから作成することもできます。Webコンソール内(またはOCI CLIを使用)でAttached VNICsに移動し、特定のVCN/Subnet上にVNICを作成します。
Step 2: Install and configure VirtualBox
Oracle Linux 7を使う場合、非常に簡単です。yumを使用してVirtualBoxとVirtualBoxカーネルモジュールをビルドするための依存関係をインストールし、速やかにExtension Packをダウンロードしてインストールすれば完了です。これで完了です。OCI VMインスタンスのOracle Linux 7上に全ての機能を利用可能なVirtualBoxハイパーバイザがインストールされました。# yum install -y kernel-uek-devel-`uname -r` gcc
# yum install -y VirtualBox-5.2
# wget https://download.virtualbox.org/virtualbox/5.2.8/Oracle_VM_VirtualBox_Extension_Pack-5.2.8.vbox-extpack
# vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.8.vbox-extpack
Step 3: Create your first VirtualBox guest VM
以下の手順は、コマンドラインからVMを作成する方法です。コマンドラインを使用する場合のよい点は、VMを構成するために必要なことを明確に理解でき、値(メモリ、ディスクなど)を簡単に調整できる点です。まず、インストーラのISOイメージから新しいVMを作成したい場合は、インストール・メディアをOCI VMにアップロードしてください。 ここでは、以下のURLから入手できるOracle Linux 7.5のプレビューイメージをアップロードしました。
Developer Preview for Oracle Linux 7VirtualBox VMの作成
http://www.oracle.com/technetwork/server-storage/linux/downloads/linux-beta-4409163.html
仮想ディスクとストレージコントローラの構成# vboxmanage createvm --name oci-test --ostype oracle_64 --register
# vboxmanage modifyvm oci-test --memory 4096 --vram 128 --ioapic on
# vboxmanage modifyvm oci-test --boot1 dvd --boot2 disk --boot3 none --boot4 none
# vboxmanage modifyvm oci-test --vrde on
当然ながら、OCIブロックストレージをVMにアタッチして、VirtualBoxの仮想ディスクをそのボリュームにおきます。以下の例では、40GBの仮想ディスクイメージを作成し、OL7.5 ISOをDVDイメージとしてアタッチしています。
Bridgeネットワーク・アダプタを構成して直接OCIのVNICに接続# vboxmanage createhd --filename oci-test.vdi --size 40960
# vboxmanage storagectl oci-test --name "SATA Controller" --add sata --controller IntelAHCI
# vboxmanage storageattach oci-test --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium oci-test.vdi
# vboxmanage storagectl oci-test --name "IDE Controller" --add ide
# vboxmanage storageattach oci-test --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium /home/opc/OracleLinux-R7-U5-BETA-Server-x86_64-dvd.iso
これはやや複雑です。このセカンダリVNIC用にどのネットワークデバイスがVMホスト上に作成されているかを確認する必要があります。
このネットワーク・アダプタをIPアドレスなしで起動し、MTUを9000(OCIにおけるVNICのデフォルトのmtu設定)に設定します。# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens3: mtu 9000 qdisc mq state UP qlen 1000
link/ether 00:00:17:02:3a:29 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.8/24 brd 192.168.1.255 scope global dynamic ens3
valid_lft 73962sec preferred_lft 73962sec
3: ens4: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:00:17:02:eb:ea brd ff:ff:ff:ff:ff:ff
あともう少しです。このタイミングでVirtualBoxでNICを作成し、以前に記録したMACアドレスをこのNICに割り当ててください。このMACアドレスを使用することが非常に重要で、そうしないとネットワーク上のトラフィックが許可されません。# ip link set dev ens4 up
# ip link set ens4 mtu 9000
注意:コマンドラインでは、macアドレスに:(コロン)を使用しないでください。
これでおしまいです。インストールメディアから起動し、OCIのホストネットワークに直接接続できる、起動可能なVirtualBox VMができました。このネットワークではDHCPは実行されていないので、VirtualBox VMを作成するときは、静的IPを割り当てなければなりません(上記の例では10.0.0.2)。# vboxmanage modifyvm oci-test --nic1 bridged --bridgeadapter1 ens4 --macaddress1 00001702ebea
VMを起動する前に、ホスト上のリモートRDP接続用にファイアウォールを開き、OCIコンソールでも同じ操作を行います。ホストのプライマリVNICのセキュリティ・リストを変更して、ポート3389(RDP)へのインバウンドトラフィックを許可します。
Start your VM in headless mode ヘッドレスモードでVMを起動し、デスクトップやラップトップにあるお好みのRDPクライアントを使ってリモートのVirtualBoxコンソールに接続します。# firewall-cmd --permanent --add-port=3389/tcp
# firewall-cmd --reload
# vboxmanage startvm oci-test --type headless
リモートの動画や音声(例えば、VM内でYouTubeビデオを再生したり、ムービーファイルを再生したい場合など)を試したい場合、vrdeビデオチャンネルを有効にします。 qualityパラメータを使用して、mjpegストリームの圧縮/損失率(パフォーマンスを向上させます)を変更します。# vboxmanage modifyvm oci-test --vrdevideochannel on
# vboxmanage modifyvm oci-test --vrdevideochannelquality 70