lawfully.kr
한 미국 변호사의 서랍

VirtualBox/Vagrant로 맥 OSX 설치하기

2017년 02월 11일


VirtualBox로 맥 설치하여 사용하기

맥미니가 또 고장났다. 또 하드디스크 문제이다. 아무래도 이제는 수명이 다했다는 신호를 마구 보내고 있는 것 같다. 그런데, 아직은 살 때가 아니다. 한 5년 썼으면 잘 쓴 것 아니냐고 말할 수도 있겠지만, 아직은 때가 아니다. 나는 요즘은 노트북을 들고 다니지 않는다. 거의… 밖에서 일할 때에는 핸드폰만으로 충분하다. 게다가 클라우드를 사용하니, 그냥 좋은 블루투스 키보드 하나만 있으면 충분하다. 데이터는 어차피 클라우드에 다 있고, 정작 결정적인 작업은 집에서 하면 되니… 또, 집에서 사용하는데 노트북을 사용하는 것도 우습다. 그리고, 모니터와 붙어 있는 일체형은 왠지 손이 가지 않는다. 천상 맥미니 또는 쓰레기통 모양의 초강력 컴퓨터로 가야 하는데 그건 또 아닌 것 같고. 그냥 맥미니만 기다린다. 아직은 그럴듯한 혁신이 없다. 게다가, 리눅스도 쓰다보니 정도 많이 들었다. 그나저나, 그래도 맥이 필요한 작업이 있다.

맥을 고칠 때까지는 맥을 쓸 수 없다. 그런데, 맥을 써야만 한다. 어떻게 할까? 가장 쉬운 것은 VirtualBox를 설치하는 것이다. 사실 제대로 되지 않을지 걱정도 꽤 했었는데, 아주 쉬웠다. 솔직히 너무 쉬웠다. 이 페이지에서는 윈도에 맥 OS X를 설치하는 방법을 알려주는데 (심지어는 설치용 ISO 이미지도 제공하므로, 이것도 만들 필요도 없다) 그대로만 하면 된다. 우선 위 링크를 따라가서 이미지 파일을 다운로드한다. VirtualBox를 설치한다. VirtualBox를 실행하고, 새 가상머신을 만든다. 유형을 “Mac OS X”로 선택하면 거의 기본값을 설치해 주는 대로 따라가면 된다. 다만, 할 수 있다면 CPU 수는 2개로 하고, PAE/NX를 활성화한다. 또, 플로피디스크를 사용하지 않기로 하고 (이건 해야 한다), 칩셋은 IHC9으로 한다. 그래픽 메모리는 128로 올린다. 여기에 아까 다운로드받은 파일을 CD 이미지로 더한다. 그리고, 다음을 실행한다. 위에서 가상머신 이름으로 정한 것을 “VM NAME”에 대신해서 넣는다.

$ cd VirtualBox
$ VBoxManage modifyvm "VM NAME" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
$ VBoxManage setextradata "VM NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"
$ VBoxManage setextradata "VM NANE" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
$ VBoxManage setextradata "VM NAME" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"
$ VBoxManage setextradata "VM NAME" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
$ VBoxManage setextradata "VM NAME" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

그리고, 실행해서 시키는 대로 설치하면 끝이다.

혹시나 위에서 다운로드하지 않고, 직접 설치 디스크를 만들려는 사람은 이곳으로 가서 prepare-iso.sh 파일을 다운로드받아 실행하면 된다. 꽤 오래 걸린다. 모든 과정이 무지 오래 걸린다. 일단 인내심이 필요하다.

vagrant

또 다른 방법은 vagrant를 사용하는 것이다. 오해하지 않기 위해 말하자면, vagrant에도 VirtualBox (또는 기타 가상화 소프트웨어)가 필요하다. 즉, VirtualBox는 설치해야 한다는 것이다. 그 다음 vagrant를 설치하고 나서, 우선 atlas에서 사용할 박스를 찾는다. 예를 들어 OS X를 사용하겠다면, 이런 것을 찾아서 쓰면 된다. 찾았다면 (위의 것을 사용하기로 했다면),

$ vagrant init andrewdryga/vagrant-box-osx
$ vagrant up

이렇게 명령을 준 다음 한세월 기다리면 된다. 인내심이 필요하고, 또 믿음이 필요하다. 이건 된다. 그러므로 믿고 기다리라.

그냥 VirtualBox를 쓰지 않고 Vagrant를 쓰는 이유는

VirtualBox를 제대로 쓰려면 (예를 들어 파일을 공유하려면) GuestAdditions라는 iso 파일의 내용을 게스트 OS에 설치해야 하는데 맥용은 제공하지 않는다. 그러므로, 호스트와 게스트 사이에 연결이 쉽지 않다. 가장 흔한 예로 호스트와 게스트 사이에서 파일을 어떻게 공유할 것인가? Vagrant를 사용하면, ssh를 사용할 수 있다. 다음과 같이…

$ vagrant ssh

그리고, 나아가서 ssh의 자매품인 scp를 사용할 수도 있다. 먼저 다음과 같이 해야 한다.

$ vagrant plugin install vagrant-scp

그 다음에는 게스트 기계 이름을 알아 내자.

$ vagrant status
Current machine status:

default                 running (virtualbox)

기계 이름은 default이다. 그러므로, 이제 scp를 사용하면 된다.

$ vagrant scp default:/Users/vagrant/Downloads/test.txt .

이렇게 하면 된다. 또는, 별도로 플러그인을 사용하고 싶지 않다면,

$ scp -P 2222 vagrant@127.0.0.1:/Users/vagrant/Downloads/test.txt .

또 그냥 VirtualBox보다 Vagrant른 선호하는 이유는, 에, 게으르지 않으면 리눅스 사용자가 아니기 때문이다. 그냥 VirtualBox를 사용하는 경우 맥을 띄우려면 우선 메뉴를 클릭한 다음, 거기서 VirtualBox를 클릭한 다음, VirtualBox에서 맥 가상머신을 클릭해서 띄워야 한다. 제정신이 박힌 리눅스 사용자는 절대 그렇게 하지 않는다. 제정신이 박힌 리눅스 사용자는 항상 터미널을 띄워 두고 있다. 그리고, Vagrant의 환경설정파일인 Vagrantfile에 다음과 같이만 설정해 주면,

config.vm.provider "virtualbox" do |vb|
  vg.gui = true
end

다음부터는 그냥 해당 디렉토리에서 vagrant up만 실행하면 자동으로 윈도우가 떠 주신다.

공인인증서가 없어질 때까지는

내친 김에 vagrant에 윈도우도 설치했다. 한달에 한 두번 정도는 대체로 공인인증서 때문에 사용한다는 점을 감안하면, 가상화야말로 공인인증서의 최적화된 솔루션이다. 오로지 공인인증서 목적으로만 사용한다면, 어지간한 플러그인을 설치하더라도 마음에 상처를 받지 않을 수 있다. 그냥 나중에 가상머신 지워버리면 그만 아닌가. 윈도우 ISO 파일만 있다면, VirtualBox 설치는 아주 쉽다. 이렇게 해서 VirtualBox를 설치하였다면, 이걸 Vagrant에 더하는 (그러니까 기존의 VirtualBox를 가지고 Vagrant를 하는) 방법은 다음과 같다.

$ VBoxManage list vms

이렇게 하면 중괄호에 둘러싸인 ID 정보를 알 수 있다. 예를 들어,

"windows" {50feafd3-74cd-40b5-a170-3c976348de27}

이런 식으로 나온다. 그러면, 이 정보를 가지고,

$ $ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id

이렇게만 해 주면 된다. 그러면 이미 만들어 놓은 가상머신을 사용하여 vagrant를 사용할 수 있다. 이렇게 해서 리눅스 위에서 돌아가는 맥, 리눅스 위에서 돌아가는 윈도우를 만들었다. 물론, 호스트 머신이 리눅스가 아니라 맥이나 윈도우라도 쓸 수 있는 방법이다. 특히 공인인증서를 생각할 때도 눈물을 흘리지 않으면서 살 수 있다. 그 결과는 아래 그림과 같다.

Virtualbox