인터넷과 GUI 없이 Virtualbox 사용하기

1.
프로젝트를 마치고 짧지만 새로 시작하는 일이 있습니다. Jira와 Hipchat으로 고객요구사항관리시스템을 구축하는 일입니다. 몇 년전 프로젝트를 하면서 체험한 고객이 요청한 일입니다. Jira는 워낙 오랜 동안 사용했고 수 십번도 넘게 설치한 제품이라 손 쉽지만 Hipchat은 처음입니다. 더구나 사전에 조사할 때 예상한 것과 달리 가상환경으로만 프로그램을 제공하므로 Virtualbox나 VMware를 설치 운영해야 합니다. 리눅스를 사용하시는 분들은 잘 아시겠지만 리눅스환경에서 프로그램을 설치하거나 삭제하는 일은 간단합니다. 몇 가지 명령어만으로 충분합니다. 단, 조건이 있습니다. 작업환경이 인터넷으로 연결되어야 합니다. 만약 인터넷에 연결할 수 있는 사내환경이고 GUI를 이용할 수 없다면 어떤 일이 발생할까요? 한마디로 생고생입니다(^^)

인터넷과 연결된 작업환경이면 아래와 같은 방식으로 설치를 진행하면 간단합니다.

How to Install Oracle VirtualBox 5.1 on CentOS/RHEL 7/6 and Fedora 23/22

yum을 사용할 수 없으므로 rpm 파일을 인터넷으로 다운로드한 후 내부환경으로 복사하고 아래와 같이 명령어를 실행하였습니다.

rpm -ivh VirtualBox-4.2-4.2.10_84104_el6-1.x86_64.rpm

설치중 화면에 오류가 발생합니다. /var/log/vboxadd-install.log 의 로그를 확인하였습니다. kernel-devel과 관련한 패키지가 없다고 합니다. 의존성문제입니다. kernel-devel-2.6.32-504.12.2.el6.x86_64.rpm을 받아서 작업환경에 복사한 후 설치하였습니다. 그리고 설치한 패키지를 인식하도록 환경변수를 설정하였습니다.

export KERN_DIR=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64

그런데 패키지의존성에서 오류가 발생합니다.

Processing Dependency: libXmu.so.6()(64bit) for package: VirtualBox

역시 libXmu.x86_64 0:1.1.1-2.el6.x86_64.rpm를 설치하고 다시 Virtualbox를 설치하였습니다. 저는 CLI방식으로 처음 설치하느라 삽질을 하였지만 다시 작업을 하면 우선 아래와 같은 명령어로 현재 설치된 패키지를 확인하겠습니다.

또하나 꼼꼼히 /var/log/vboxadd-install.log을 확인합니다. 설치와 관련한 자료를 읽어보면 아래와 같은 명령어를 따로 실행하라고 하더군요.

그런데 로그를 확인하니까 rpm 명령어로 Virtualbox를 설치할 때 Virtualbox Driver도 같이 만듭니다. 이 때 커널소스가 필요합니다.

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

‘/etc/init.d/vboxdrv setup’

as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

혹 Virtualbox Driver를 만들 때 위와 같이 할 수도 있지만 Virtualbox를 설치한 디렉토리에 있는 vdrvbox.sh을 이용하여도 무방합니다.

이것으로 끝일까요? 아닙니다. 또다른 난관이 기다리고 있습니다.

2.
Virtualbox의 가상환경(VM)을 등록하거나 만들어야 합니다. 이제 가상환경으로 만들어진 ova파일을 virtualbox로 등록하여야 합니다. GUI라면 간단한 일입니다.

그렇지만 명령어로만 일을 해야 합니다. 이를 자세히 소개한 자료는 아래입니다.

Command로 Virtualbox 사용하기

VBoxManage를 이용하면 모든 일을 다할 수 있습니다. 먼저 ova파일 가져오기(Import)를 하였습니다. VBoxMange 명령어에 –dry-run 옵션을 주면 가상환경의 설정을 확인할 수 있습니다.

예를 들어 설정을 바뀌고자 하면 괄호로 묶인 부분의 안내에 따라 옵션을 주시면 됩니다.

그리고 아래의 변화가 나타나면 정상적으로 VM이 등록되었습니다. 확인후 $HOME Directory에서 할 수 있습니다. 아니면 import할 때 PATH를 지정할 수 있습니다. 저는 ova파일의 이상때문에 곤란을 겪었습니다.

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

이제 등록한 VM을 확인합니다.

만약 실행중인 VM을 확인하고자 하면 아래와 같은 옵션을 줍니다.

이제 가장 중요한 VM 실행입니다. GUI 없이 실행할 때에는 –type headless라는 옵션을 줍니다.

만약 –type headless 없이 실행하면 아래와 같은 에러를 만납니다.

혹 등록한 VM를 실행중 오류가 발생하면 반드시 VM을 등록한 디렉토리밑의 Logs를 확인하시길 바랍니다.

3.
이제 설치가 끝났으니 고생 끝, 행복 시작일까요? 아닙니다. Virtualbox를 GUI를 이용할 때와 다른 새로운 경험이 기다리고 있습니다. 가장 어려운 점은 네트워크 설정입니다. CLI와 GUI를 비교할 때 가장 큰 차이는 Guest에 로그온을 할 수 있느냐 없느냐입니다. GUI를 사용하면 네트워크를 어떻게 설정하더라도 Console을 이용하는 것처럼 로그온을 할 수 있습니다. 반면 CLI의 경우 네트워크로 연결하지 않으면 – 예을 들어 SSH – 로그온을 할 수 없습니다. hipchat.ova는 기본값으로 Bridged방식의 네트워크를 가지고 있습니다. DHCP를 사용하면 IP를 할당받으므로 SSH로 로그온을 할 수 있지만 DHCP를 사용하지 않으므로 Bridged만으로는 할 수 있는 일이 없습니다. 결국 NAT, Bridged, Hostonly와 같은 개념을 이해하여야 합니다.

우선 HostOnly로 설정하였습니다.Creating virtual machines using VBoxManage command의 도움을 받아서 아래와 같이 설정하였습니다. CLI환경에서는 VBoxManage로 모든 일을 할 수 있습니다.

DHCP로 할당받은 IP에 로그온을 하니까 정상이고 Hipchat의 시스템이 어떤 구성을 가졌는지 확인하였습니다. 여기까지입니다. hipchat을 사용하려면 https://hipchat의IP주소 로 접속하여 환경설정을 하여야 합니다. Jira나 Confluence와 동일합니다. HostOnly는 외부접속을 할 수 없습니다.NAT와 NAT 네트워크를 시도하였습니다. NAT와 NAT 네트워크이 약간 다른 의미가 있다고 합니다. 읽어보면 NAT 네트워크는 NATs라고 이해해도 무방할 듯합니다.

VirtualBox의 NAT, 내부 네트워크, NAT 네트워크

Setting up a NAT network in VirtualBox 5이 소개한 NAT 네트워크 설정방법입니다.

위의 설정을 이용하여 Guest의 네트워크 어댑터를 NAT와 HostOnly 및 Bridged로 설정하는 방법입니다.

NAT를 설정할 때 따라다니는 표현이 Port Forwarding입니다. 방화벽에서 접근이 가능한 IP 주소의 호스트와 NAT설정한 Guest를 연결하는 설정을 해보았습니다. 방법은 두가지입니다 natnetwork으로 설정하는 방법입니다.

또다른 방법은 vm 설정을 변경할 때 natpf 옵션을 사용하는 방법입니다.

이제 성공할 것이라는 간절한 기대를 가지고 https를 해보았습니다. 에고고.. 결과는 access denied입니다. 무슨 문제일까요? VirtualBox에서 CentOS 네트워크 설정이 다루고 있는 주제와 비슷한 현상입니다.guest로 로그온을 하면 eth0와 eth1이 보이는데 eth0에 할당된 주소가 hostonly 주소입니다. NAT와 관련한 설명을 찾아보면 다음과 같은 문장이 있습니다.

However it’s really hard to configure NAT to let the VM to act as a server (e.g. as NFS or TFTP server), for this reason the developer usually choose a bridged configuration, with proper IP parameter assignments.

결국 IP를 새로 할당을 받아서 Bridged방식을 사용하여야 하는지 고민중입니다. 몇 일 더 시험을 해보면 답이 나올 듯 합니다. 몇 주동안 이런저런 설정을 위해 인터넷을 열심히 검색하였습니다. 우현히 phpVirtualBox:A web-based front-end to VirtualBox written in PHP을 발견하였습니다. GUI나 CLI를 사용하지 않고 웹환경으로도 설정가능하였습니다. 마지막으로 hipchat을 서비스로 관리할 수 있는 쉘이 있더군요. 물론 약간 편집을 하였습니다.

4.
아직 끝내지 못했지만 CLI로 Hipchat을 설치하면서 많이 배웠습니다. 우선 가상환경으로 배포하는 제품들이 많더군요. vagrant나 docker가 인기를 끄는 이유를 알았습니다. 더불어 CLI로 일을 하면서 Virtualbox의 동작방식을 이해할 수 있었습니다. GUI는 편리성을 제공하지만 UI의 동작에 대해 눈을 감게끔 합니다. CLI가 필요한 이유입니다.

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.