사내에서 신규 노트북을 지급받으면 헌(!) 노트북을 반납해야 하는 정책이 있는데 헌 노트북을 폐기 처분 하는 것이 아니라 특정 목적으로 유휴장비로 활용할 수 있는 제도가 있습니다. 비용이 추가적으로 들지 않고 다른 서버를 확보하는 데 복잡한데 반해 매우 간편히 받을 수 있어 프로젝트에서 개발 서버로 사용할 때가 꽤 있는데, 아쉽게도 말 그대로 헌 것이기에 성능이 그다지 좋지는 않습니다. 제 경우에는 대게 성능을 최적화해서 쓰기 위해 GUI없이 서버 운영체제로 설치합니다. 그러나 가상화를 써야하는 시점에 난관에 부딪히게 됩니다.

커맨드 라인만으로 어떻게 VM을 생성할 수 있을까?

이런 열악한 환경 외에서도 클라우드 가상 서버 등에서도 VM을 운영하고 싶을 때 활용할 수 있으리라 생각됩니다.

VirtualBox 설치

VirtualBox 공식 홈페이지에서 정말 친절하게 잘 설명해주고 있으니 버전별로 무리없이 설치할 수 있으리라 생각됩니다.

sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian vivid contrib" >> /etc/apt/sources.list.d/virtualbox.list'
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install virtualbox-5.0

Extension Pack 설치

Guest OS의 성능 향상, 클립보드, 공유 폴더 등의 확장 기능을 사용하기 위해 설치가 필수입니다.

wget http://download.virtualbox.org/virtualbox/5.0.10/Oracle_VM_VirtualBox_Extension_Pack-5.0.10-104061.vbox-extpack
sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-5.0.10-104061.vbox-extpack
VBoxManage list extpacks

예제 커맨드의 URL 대신 설치 페이지에서 최신 버전으로 다운로드 받아 같은 방법으로 하면 되겠습니다.

VM 생성

이제 준비는 끝났습니다. GUI에서 VM을 생성했던 기억을 되살려서 커맨드라인도 동일하게 설정하면 되겠습니다. 우선 VM 이름을 VPN환경 테스트라고 하겠습니다.

VBoxManage createvm --name "VPN환경 테스트" --register

옵션을 더 넣어서 생성할 때 한번에 잘 설정할 수도 있겠지만 아래와 같이 옵션 수정도 가능합니다.

VBoxManage modifyvm "VPN환경 테스트" --memory 2048 --acpi on --boot1 dvd --ostype Windows7_64 --ioapic on

지원되는 OS 타입은 VBoxManage list ostypes 명령어로 확인해볼 수 있습니다.

스토리지 설정

SATA로 통용되는 스토리지는 메인 하드디스크와 DVD가 대중적인 광학 디스크로 구성하는 것이 일반적입니다. 쉽게 이야기하자면, 윈도우 CD와 윈도우를 설치할 C드라이브가 그것입니다. 홈디렉토리 아래 Downloads 디렉토리에 윈도우 설치DVD가 있다고 가정하고 현재 디렉토리에 가상 스토리지 파일을 생성한다고 하겠습니다.

VBoxManage createhd --filename "win7.vdi" --size 30720
VBoxManage storagectl "VPN환경 테스트" --name "SATA Controller" --add sata --portcount 4
VBoxManage storageattach "VPN환경 테스트" --storagectl "SATA Controller" --port 0 --type hdd --medium win7.vdi
VBoxManage storageattach "VPN환경 테스트7" --storagectl "SATA Controller" --port 1 --type dvddrive --medium YOUR_WINDOWS7_IMAGE.iso

네트워크 설정

가상화에서 주로 쓰이는 네트워크 설정 방식은 NAT와 Bridge방식이 있습니다. NAT는 위키피디아에서는 장황히 설명되어 있지만 쉽게 설명하자면 Host OS가 공유기 역할을 하게 된다고 보면 됩니다. Host OS가 가진 IP대역과 다른 사설망을 Guest OS에 IP 로 할당이 됩니다. 한편 Bridge는 HostOS와 동일한 IP대역으로 할당받습니다. 장비로 랜선이 하나로 들어왔지만 IP는 두 개 이상 할당 받는 모습이 됩니다. NAT vs Bridged

NAT 네트워크를 생성한 후 위 VM에서 이 NAT 망을 사용하는 것으로 설정합니다.

sudo VBoxManage natnetwork add -t nat-int-network -n "10.20.30.0/24" -e -h on
sudo VBoxManage natnetwork start -t nat-int-network
VBoxManage modifyvm "VPN환경 테스트" --nic1 nat

브릿지 네트워크

VBoxManage modifyvm "VPN환경 테스트" --nic1 bridged --bridgeadapter1 eth0 --nictype1 82540EM

Host OS에서 어댑터 ID를 확인하여 기입합니다. 또한 VirtualBox 5.0 기준 다음과 같은 NIC Type 들이 있습니다.

  • AMD PCNet PCI II : Am79C970A
  • AMD PCNet FAST III : Am79C973 (기본값)
  • Intel PRO/1000 MT Desktop : 82540EM
  • Intel PRO/1000 T Server : 82543GC
  • Intel PRO/1000 MT Server 82545EM

공식 매뉴얼에서는 기본값 항목이 거의 모든 운영체제에서 잘 인식이 된다고 하였지만, Windows 7 2014년 기준 업데이트로 설치해보니 드라이버 인식이 바로 되지 않았습니다. 인텔 계열로 적용하고 다시 시작해보니 Plug & Play가 작동하면서 드라이버 설치가 제대로 되었습니다.

VRDP 설정

GUI환경에서는 바로 콘솔창이 열리지만 CLI환경에서는 VirtualBox에서 제공하는 RDP(원격 데스크탑) 기능을 사용해서 접근이 가능합니다. (물론 GUI환경에서도 설정 가능합니다.)

VBoxManage modifyvm "VPN환경 테스트" --vrde on 
VBoxManage modifyvm "VPN환경 테스트" --vrdeport 4000

VM 시작

이제 모든 준비는 끝났습니다. VM을 시작하고 위에서 지정한 포트로 익숙한 RDP 툴을 사용하여 Guest OS를 설치하면 됩니다.

VBoxHeadless --startvm "VPN환경 테스트"

Guest Addition 설치

설치를 완료하면 Guest Addition을 반드시 설치하는 것이 좋습니다. GUI에서는 메뉴에서 Install Guest Addition 항목을 찾아 클릭하는 것으로 CD를 마운트해서 Autorun이 실행되어 자동으로 설치됩니다. CLI에서도 같은 방법으로 마운트만 해주고 설치하면 동일하게 설치가 가능합니다.

VBoxManage storageattach "VPN환경 테스트" --storagectl "SATA Controller" --port 1 --type dvddrive --medium /usr/share/virtualbox/VBoxGuestAdditions.iso