Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 머신

가상 머신의 3D 가속 - 3부: Linux 호스트 & Linux 게스트에서 VMGL로 가능할까?

이 글은 가상화 시리즈의 세 번째 아티클이자, 아마도 그중 가장 어려운 편입니다. 지금까지 우리는 VMware 제품의 DirectX 지원과 VirtualBox의 OpenGL 지원을 살펴봤는데, 두 경우 모두 Windows 게스트에서만 사용할 수 있었습니다. 호스트 플랫폼이 무엇인지는 중요하지 않았죠. 하지만 Linux 게스트는 어떨까요?

처음에는 이것이 불가능한 일이라고 생각했습니다. 그런데 linux.com에서 VMGL이라는 애플리케이션을 사용해 Linux 게스트에서 3D를 즐길 수 있다는 기사를 읽게 되었습니다. 상당히 유망해 보였고, 훌륭해 보였지만 동시에 어려워 보이기도 했습니다. 5~10분짜리 간단한 작업이 아니라 규모가 큰 작업이었습니다. 그래서 과연 이것이 실제로 가능한지 직접 확인해 보기로 했습니다.

그리고 그 답은...

답은 이렇습니다. "it should work(동작할 것입니다)" 또는 "all you have to do is ~(하기만 하면 됩니다)" 같은 표현이 등장하는 기사나 튜토리얼, 가이드, 하우투를 본다면 경고 신호로 받아들이세요! 곧 큰 고생이 시작된다는 뜻입니다.

원문 기사와 애플리케이션 개발자의 문서는 목표에 근접하기 위해 해야 할 험난한 작업의 약 90%를 다루지 않고 있습니다. 이 튜토리얼에서는 Linux 가상 머신에서 3D를 (어쩌면) 동작시키기 위해 필요한 모든 지독한 세부 사항을 보여드리겠습니다. 참고로 앞선 두 편의 아티클도 함께 읽어보시기 바랍니다.

  • 가상 머신의 3D 가속 - 1부: VMware & DirectX 튜토리얼
  • 가상 머신의 3D 가속 - 2부: VirtualBox & OpenGL 튜토리얼

VMGL: OpenGL 3D 가속 - 검열 없는 버전

먼저 VMware Server에서 시작한 뒤, 동일한 작업을 VirtualBox에서도 시도해 보겠습니다.

설치

패키지를 내려받아 설치하는 것 자체는 쉽습니다. RPM 형식으로 배포되기 때문에 Ubuntu 같은 데비안 계열 배포판을 사용한다면 먼저 alien 패키지를 설치하고 RPM을 DEB로 변환해야 합니다. 먼저 alien을 설치합니다:

sudo apt-get install alien

다음으로 RPM 패키지를 DEB로 변환합니다:

alien -k package.rpm package.deb

마지막으로 설치합니다:

rpm -i package.rpm

또는

dpkg -i package.deb

일반적인 이름 대신 실제 VMGL 패키지 이름으로 바꿔서, 호스트에 한 번, 게스트에 한 번 설치합니다.

참고: RPM/DEB를 설치할 때는 눈에 띄는 오류가 나타나지 않습니다. 하지만 소스에서 직접 설치하려고 하면 완전히 엉망이 됩니다. gcc, make, 커널 소스, 커널 헤더 등 build-essential 계열 패키지는 물론 imake, python, OpenGL 헤더 등 수많은 의존성을 충족해야 합니다.

안타깝게도 개발자는 필요한 의존성 목록조차 친절하게 알려주지 않으므로, 무엇이 필요하고 불필요한지 시행착오를 거듭하며 추측해야만 합니다.

게다가 소스 코드 자체가 완전히 깨져 있는 상태입니다. Ubuntu 게스트에서도 마찬가지였습니다.

이 단계에서 포기하게 될 가능성이 높습니다. 하지만 RPM/DEB 패키지를 사용했다면 모든 것이 잘 된 것처럼 느껴져 계속 진행하게 되겠죠...

모듈 로드

다음 단계는 xorg.conf 파일을 수정하는 것입니다. 다음과 같은 섹션을 추가합니다:

Section "Module"
Load "vmglext"
EndSection

변경 사항이 적용되도록 게스트의 X 윈도우를 재시작합니다(Ctrl + Alt + Backspace).

Xvnc 서버 시작

다음으로, 게스트에서 모든 OpenGL 터널링을 마법처럼 처리해 줄 수정된 Xvnc 서버를 실행합니다.

아, 여기서부터 진짜 까다로운 부분입니다. 개발자가 구버전(2003년경)의 서버를 사용했는데, 이유는 불분명하지만 아마도 자신의 대학에서 쓰던 환경을 그대로 가져온 것이겠죠. 이 때문에 최신 배포판에는 존재하지 않는 파일 및 폴더 위치를 가정하여 현대 배포판에서는 정상 동작하지 않습니다.

SUSE 11.0과 Ubuntu 8.10 양쪽 모두에서 오류 없이 서버를 구동하기 위해 상당한 해킹 작업을 해야 했습니다. 여러분도 다음과 비슷한 오류를 수없이 만나게 될 것입니다.

가상 머신의 3D 가속 - 3부: Linux 호스트 & Linux 게스트에서 VMGL로 가능할까?

2003년산 패키지로 애플리케이션을 빌드하면 벌어지는 일입니다. 다행히 해결책은 "간단"합니다. 문제를 수정해 보겠습니다.

rgb.txt 다운로드

첫 번째 오류입니다. 인터넷 어딘가에서 rgb.txt 파일을 찾아(구글에서 검색하세요) 내려받고, 패키지가 기대하는 위치에 배치합니다. 파일 안의 빈 줄은 구문 오류를 일으키므로 모두 삭제해야 합니다.

Xvnc 서버가 기대하는 위치에 파일을 놓거나, 더 나은 방법으로 /etc/X11/rgb.txt 아래에 놓고 심볼릭 링크를 생성합니다:

cd /usr/X11R6/lib/X11
sudo ln -s /usr/share/X11/rgb.txt
cd /usr/share/X11
sudo ln -s /etc/X11/rgb.txt

결과는 다음과 같습니다:

가상 머신의 3D 가속 - 3부: Linux 호스트 & Linux 게스트에서 VMGL로 가능할까?

지저분해 보이죠? 실제로도 지저분합니다!

다음 단계는 누락된 폰트들에 대한 심볼릭 링크도 생성하는 것입니다.

cd /usr/X11R6/lib/X11/fonts
sudo ln -s /usr/share/fonts/X11/100dpi
sudo ln -s /usr/share/fonts/X11/75dpi
sudo ln -s /usr/share/fonts/X11/encodings
sudo ln -s /usr/share/fonts/X11/misc
sudo ln -s /usr/share/fonts/X11/Type1
sudo ln -s /usr/share/fonts/X11/util

그러면 다음과 같은 결과를 얻습니다:

가상 머신의 3D 가속 - 3부: Linux 호스트 & Linux 게스트에서 VMGL로 가능할까?

이제 Xvnc 서버를 시작하면 여전히 오류는 출력되지만, 이번에는 동작하기는 합니다.

이제 호스트에서 vncviewer를 실행합니다. 물론 게스트는 호스트에서 접근 가능한 IP 주소를 가져야 합니다. 즉, 게스트 가상 머신에 브리지 또는 NAT 네트워킹이 필요합니다.

vncviewer guest-ip-address:1

게스트에서 GLSTUB을 export합니다:

export GLSTUB=guest-ip-address:port

이번 예제에서 GLSTUB은 7001 포트를 가리킵니다. 게스트 IP 주소가 192.168.34.129이므로 다음과 같이 export합니다:

export GLSTUB=192.168.34.129:7001

이제 마법처럼 모든 것이 동작해야겠죠.

음, 실제로는 동작하지 않습니다. glxinfo를 실행해도 vmglext 드라이버가 사용 중이라는 표시가 없고, 권장대로 glxgears를 실행해도 예전과 똑같이 처량한 성능만 보여줍니다. 깨진 패키지들을 감안하면 놀라운 결과는 아니죠.

VirtualBox로 전부 다시 시도

VMware Server의 NAT와 proprietary 코드가 원인이라고 생각했습니다. 그래서 Ubuntu 호스트에 VirtualBox OSE 에디션을 올리고 Ubuntu 게스트를 실행해 동일한 트릭을 시도했습니다. 이번에도 브리지 네트워킹을 구성했습니다.

브리지 네트워킹 구성 자체는 이 글의 주제와 직접적인 관련은 없지만, 호스트와 게스트가 통신하게 만들기 위해 실행해야 하는 명령어 모음을 소개합니다. 자세한 내용은 VirtualBox - Community Ubuntu Documentation 문서를 참고하세요.

제가 수행한 순서는 다음과 같습니다(여러분의 환경/구성과 정확히 일치하지 않을 수 있습니다).

1. 호스트에 브리지 유틸리티 설치

첫 단계는 브리지 유틸리티를 설치하여 네트워크 인터페이스를 브리지하고 IP 주소를 공유할 수 있게 하는 것입니다.

sudo apt-get install bridge-utils

2. 네트워크 스크립트에 브리지 선언

브리지 유틸리티 설치 후 네트워크 설정 파일에 브리지를 선언해야 합니다. 여기서 시연하는 Debian 계열 시스템에서는 설정이 /etc/network/interfaces 단일 파일에 저장됩니다. 반면 RedHat 계열 배포판은 네트워크 어댑터마다 개별 설정 스크립트를 사용합니다.

참고: 자신이 직접 선택한 고정 IP 주소를 사용하세요.

sudo gedit /etc/network/interfaces

위 파일에 추가:

auto br0
iface br0 inet static
    address 192.168.3.100
    netmask 255.255.255.0
    gateway 192.168.3.1
    bridge_ports eth0 vbox0

3. VirtualBox용 가상 네트워크 어댑터 선언

이렇게 하면 VirtualBox가 br0 브리지를 사용할 수 있습니다:

sudo gedit /etc/vbox/interfaces

위 파일에 추가:

vbox0 <your user name> br0

4. 네트워크 및 VirtualBox 드라이버 재시작

설정 파일에 변경 사항을 추가한 후에는 네트워크 서비스와 VirtualBox를 모두 재시작해야 변경 사항이 적용됩니다.

sudo service networking restart
sudo /etc/init.d/virtualbox-ose restart

5. 올바른 권한을 위해 파일 몇 개 해킹

VirtualBox가 네트워크 터널링 장치를 사용할 수 있도록 권한을 변경해야 할 수 있습니다. 다음과 같이 수행합니다:

sudo chown root:vboxusers /dev/net/tun
sudo chmod 666 /dev/net/tun

6. 게스트가 vbox0 가상 어댑터를 사용하도록 설정

이 작업은 호스트 머신에서 해당 가상 머신의 설정(Settings) 메뉴에 접근하여 수행합니다.

7. 게스트 부팅 후 고정 IP 주소 할당

이 주소는 브리지와 동일한 서브넷에 속해야 합니다. 즉, 마지막 옥텟을 1만큼 증가시키면 됩니다.

sudo ifconfig <device> <ip address> up

예제:

sudo ifconfig eth3 192.168.3.101 up

8. 앞서 수행한 모든 단계 반복

검열 없는 버전의 처음으로 돌아가 전체 설정을 다시 실행합니다. 그리고 또 한 번, 동작하지 않습니다. 마법이었을 텐데 말이죠?

결론

결국 Linux 가상 머신에서 3D 가속을 누리는 일은 저 같은 박식한 괴덕을 포함해 사용자의 99.999995%에게는 너무나 어려운 영역입니다. 이 프로젝트는 누군가의 박사 학위 작업으로 보이는데, 실제로 진정한 학계 산물의 냄새가 납니다. 절반쯤 완성되었고, 일반인이 쓸 수 없다는 점에서 말이죠.

하지만 저를 당황하게 하는 것은, 몇 가지 사소한 해킹만 거치면 "모두 준비 완료"라고 주장하는 부분입니다. 마치 새벽 이슬 한 잔을 얻는 것처럼 말이죠. 5분짜리 해킹이라던 작업은 결국 3~4시간의 고통으로 끝났습니다. 대체 왜 6년 된 버전의 Xvnc를 이 작업에 사용했을까요?

그런데 제가 가장 화가 나는 점은, 누군가가 이렇게 엉망진창인 상태로 제품을 출시했다는 사실 그 자체입니다. 부끄러운 일이죠. 하지만 모든 것이 잃은 것은 아닙니다. 세 가지 중 두 가지는 성공했습니다. Windows 게스트에서의 VMware DirectX 지원과 VirtualBox OpenGL 지원은 보석 같았습니다.

낙심하지 마세요! VMware와 Sun은 가상화 업계의 거인입니다. Linux 사용자가 Linux 게스트를 구동하며 3D 가속을 즐기는 날은 시간문제일 것입니다.

모든 것을 종합해 보면, Linux 호스트/Linux 게스트 3D 가속의 필요성은 상대적으로 덜 중요해 보입니다. Windows 사용자는 아마 Windows만 사용할 것이고, 필요하면 Linux를 듀얼 부팅하겠죠. Linux 사용자는 대체로 필요한 레거시 애플리케이션을 쓰기 위해 Windows 게스트를 원할 것이며, 이를 위해서는 이미 해결책(한두 가지씩)이 있습니다. Linux 안에 Linux를 올리는 가상화는 흥미로운 발상이지만, 대부분의 사람들에게 우선순위는 아닙니다. 그래도 언젠가는 이루어질 겁니다. 제 말을 기억해 두세요.

마무리로 지금까지의 과정을 돌아보겠습니다. 이 시리즈를 통해 값진 교훈 몇 가지를 얻었습니다. VMware Server와 VirtualBox를 활용해 Windows 게스트에서 3D 가속을 즐기는 방법을 배웠고, 그 과정에서 멋진 해킹과 트릭도 몇 가지 익혔습니다. 무엇보다 중요한 것은, 데스크톱 가상화가 끊임없이 진화하며 우리의 목표와 욕구를 한 단계 더 나아가게 해 준다는 사실입니다.

즐거운 가상화 되시길!