Windows 10 Vagrant Box 만들기

이 글은 Creating a Windows 10 Base Box for Vagrant with VirtualBox 가이드를 기반으로 하고, 중간에 안되는 부분은 다른 글을 참고로 작업했다.

나 그냥 쓰면 안되니?

그냥 최종본 쓰고 싶은 분들은… 아래 처럼 하시면 되겠다.

$ vagrant init kyungw00k/windows-10-pro-kn-x64; vagrant up --provider virtualbox
$ vagrant rdp

만들어보고 싶으신 분은 계속 읽어나가면 되겠다.

뭐가 필요한가?

작업하기 전에 설치할 건 설치하고, 다운 받을건 다운 받아놓자.

가상 머신 만들기

이름은 (영어로) 아무렇게 짓되, 몇 가지 수정할 필요가 있다.

윈도우를 설치하기

Vagrant Box니 ID/PASSWORD를 모두 vagrant로 설정 해 주면 되겠다.

추가 설정

VirtualBox Guest Addition 설치하기

스크린샷 2015-09-09 오후 1.19.23

설치하고 리부팅하자.

###사용자 계정 컨트롤 설정을 “알리지 않음”으로 변경 스크린샷 2015-09-09 오후 1.17.04

이후에 레지스트리 작업을 하라는데(EnableLUA=0)이 있는데, 바꾸면 Edge 등 몇몇 앱들이 동작하지 않게 된다. 필요하면 하면 됨.

WinRM 서비스 활성화

관리자 모드로 명령프롬프트를 띄운 다음 아래 항목을 한 행씩 실행하자.

winrm quickconfig -q
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
winrm set winrm/config @{MaxTimeoutms="1800000"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
sc config WinRM start= auto

방화벽 상태가 게스트 또는 공용 네트워크로 연결된 경우, 첫 행에서 방화벽 관련 이상한 에러가 뜬다.

이 때는 PowerShell을 관리자 모드로 실행한 후, 아래 코드를 넣어보자.

$nlm = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
$connections = $nlm.getnetworkconnections()
$connections |foreach {
    if ($_.getnetwork().getcategory() -eq 0) {
        $_.getnetwork().setcategory(1)
    }
}

위 스크립트를 실행하면 방화벽 상태가 개인 네트워크로 바뀌게 된다.

스크린샷 2015-09-09 오후 1.12.52

PowerShell Execution Policy 변경

스크린샷 2015-09-09 오후 1.08.32

관리자 모드로 PowerShell을 실행시킨 다음 아래 항목을 실행하자.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

A를 눌러 일괄 승인한다.

원격 데스트톱 연결 허용

연결을 허용하면 vagrant rdp 로 접속할 수 있게 된다.

스크린샷 2015-09-09 오후 1.06.48

(optional) Tweak!

기타 등등 해주심 될듯

자, 이제 Box로 Exporting 해보자

디렉토리 하나 만들어 Vagrantfile을 하나 만들자.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.guest = :windows
config.vm.communicator = "winrm"
config.vm.boot_timeout = 600
config.vm.graceful_halt_timeout = 600

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network :forwarded_port, guest: 3389, host: 3389
config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true

# config.vm.provider "virtualbox" do |vb|
# # Customize the name of VM in VirtualBox manager UI:
# vb.name = "yourcompany-yourbox"
# end
end

그리고 아래 명령을 수행해 Box를 만든다.

$ vagrant package --base 가상머신이름 --output `pwd`/windows.box --vagrantfile `pwd`/Vagrantfile

사용해보기

앞에서 만들어진 windows.box를 추가해서 사용해보자. 이미지 이름은 windows-10-pro-kn-korean-x64 라고 가정한다.

$ vagrant box add /path/to/output/windows.box --name windows-10-pro-kn-korean-x64

이상 없이 박스가 추가 되었다면, 이제 정말 띄워보자.

$ vagrant init windows-10-pro-kn-korean-x64
$ vagrant up

별다른 에러 문구가 없다면, 이제 원격 데스크톱으로 접속해보자.

$ vagrant rdp

패스워드가 틀리다고 나오는데 이때, vagrant 입력해주면 접속 된다. (패스워드를 plaintext로 줘서 그런거 같은데… 해싱하면 해결된다는듯. 아몰랑~)

배포하기

만든 Vagrant Box를 배포할 수 있는 곳이 있더라. 여기에 계정 파고 지금까지 만든 box를 올려놨다. (링크 : https://atlas.hashicorp.com/kyungw00k/boxes/windows-10-pro-kn-x64)

마지막으로…

실제 로컬에서 box를 만드는 시간도 그렇고, Provider를 여러개 추가해야 하는 이슈가 있는데, 이런걸 한방에 해결하기 위해서는 Packer를 활용하는게 좋을 듯 하다.

Back