Hyper-V로 세운 Ubuntu에 virtualbox + vagrant로 Ubuntu를 세웁니다.

소개



팀에서 개발을 할 때 VirtualBox + Vagrant + Ansible로 개발 환경을 로컬로 구축하고 있어, 자신만 Windows였기 때문에 개발 환경을 구축할 때에 궁리가 필요했다( Ansible은 Windows를 제어 시스템으로 지원하지 않습니다. , VirtualBox 는 Nested Virtualization을 지원하지 않음 ).

그 때는, 호스트(Windows)에 넣은 VirtualBox + Vagrant를 WSL에서 조작 하면서, WSL로 Ansible를 실행하고 있었다.

더 좋은 방법이있을 것이라고 생각하고,
Windows + Hyper-V로 세운 VM 내에서 VirtualBox + Vagrant를 시도했습니다.

최종적으로는 이하와 같은 구성을 목표로 한다.
            -------------------------------
           | Ubuntu (VirtualBox + Vagrant) |
        ---------------------------------------
       |          Ubuntu (Hyper-V)             |
     ----------------------------------------------
    |                  Windows                     |
    ------------------------------------------------


환경



호스트측



Windows10 Pro
Hyper-v
Intel Core i7-3770k

게스트 측



우분투 16.04
VirtualBox 6.0.0
Vagrant 2.2.2

VirtualBox -> Hyper-V로 변경



VirtualBox와 Hyper-V 관리자로부터 이용하는 VM은 공존할 수 없다.
가상화에 이용되고 있는 기술이 다르기 때문이다. (INTEL VT-x 및 Hyper-V)

Docker for Windows에서는 Hyper-V를 사용하기 때문에
VirtualBox 를 이용하고 있을 때에 Docker for Windows 를 넣어 버리면 VirtualBox 로부터 VM 를 기동했을 때에 블루 스크린이 되어 버린다. 가상화에 사용되고 있는 기술이 다른 것에 기인하는 블루 스크린이다.

Hyper-V 활성화에 대해서는 Microsoft가 소개

Hyper-V를 사용하여 Ubuntu 만들기



Hyper-V를 사용하여 Ubuntu를 넣습니다.
여기도 Microsoft씨가 설명 해 주고 있다.

설치가 끝난 후 VirtualBox와 Vagrant를 도입한다.

Vagrant up 시도



하마리 포인트 1


vagrant init ubuntu/xenial64
vagrant up

그러면
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

VirtualBox is complaining that the kernel module is not loaded. Please
run `VBoxManage --version` or open the VirtualBox GUI to see the error
message which should contain instructions on how to fix this error.

가 되어, 기동할 수 없다.

원인은 Hyper-V 매니저 設定 > ハードウェア > セキュリティ 의 "보안 부팅이 유효"에 체크가 되어 있는 것이 원인이었다.
그래서 이 설정을 무효로 한다.

하마리 포인트 2



VM을 다시 시작하고,
vagrant init 
vagrant up

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

Command: ["startvm", "f59d4b5a-ecdb-4755-9918-77db8ed472d3", "--type", "headless"]

Stderr: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole

된다.
MV(Ubuntu)에 인스톨한 VirtualBox 의 설정을 봐도 VT-x는 유효하게 되어 있다.


그렇다면 VM의 머신이되는 측의 설정이 의심스럽다고 생각해 보면,
Microsoft씨에게 중첩 가상화로 가상 시스템에서 Hyper-V 실행 라고 하는 것이 있기 때문에 해 본다.

Windows 측에서 관리 권한으로 PowerShell을 시작하고,
PS C:\WINDOWS\system32> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

실행해보십시오.

다시 VM을 시작하고,
vagrant up

해보면 무사히 VM이 일어난다.

요약



원래 Windows를 사용하지 않으면 좋을 것이라는 이야기입니다만, Windows에서도 최근에는 WSL등 재미있을 수 있으므로 시험해 보았습니다.
이전에 했던 패턴보다 간단하게 VM on VM을 할 수 있다고 생각합니다.
Windows는 WSL을 포함하여 개발에 친숙한 기능을 제공하고 있으므로, 여러가지 만져 보는 것도 좋을지도 모릅니다.

좋은 웹페이지 즐겨찾기