가상화 환경에서 예상치 못한 문제에 부딪히면 경험이 썩 쓴맛으로 변할 수 있습니다. 특히 Xen 기술을 처음 접하는 사용자라면, Python 개발자가 아닌 이상 Xen의 오류 메시지가 지나치게 장황하면서도 실질적인 도움이 되지 않는다는 사실을 뼈저리게 느끼게 될 것입니다. 길게 늘어진 트레이스와 내부 함수 호출에 대한 암호 같은 참조 때문에, 본래는 간단하고 쉽게 해결할 수 있는 문제조차 오히려 더 혼란스럽게 느껴질 수 있습니다.
저도 가상화나 Python의 전문가는 아닙니다(사실 전문가이긴 한데, 겸손하게 보이는 편이 낫죠. 그래야 실수를 용서받을 수 있고, 실패해도 괜찮으며, 사람들은 겸손함과 언더독 정신을 좋아하니까요). 그럼에도 단 몇 분 만에 해결되는 흔한 문제들을 여러 번 만나왔습니다. 다만 초보 사용자에게는 이런 문제들이 영원처럼 느껴질 수 있죠. 지금부터 Xen을 좀 더 즐겁게 사용할 수 있도록 도와드리겠습니다.
팁 1: 디스플레이 설정 확인
시작하기 전에 먼저 디스플레이가 올바르게 구성되어 있는지 확인하세요. BASH든 TCSH든, DISPLAY 변수를 적절한 장치로 export 또는 setenv 명령으로 설정해야 합니다. 이것이 반드시 거쳐야 할 첫 번째 단계입니다.
export DISPLAY=hostname:port
팁 2: "No module named ..." 오류 해결
"no module named xen.xm", "no module named gtk" 등 수없이 많은 비슷한 오류 메시지를 마주할 수 있습니다. 흥미로운 점은, 대부분의 경우 오류 메시지가 서로 달라 보여도 문제의 근본 원인은 동일하다는 것입니다.
xm 트레이스백의 실제 예를 살펴보겠습니다. /usr/sbin/xm something을 실행했는데 실패하는 상황입니다:
Linux #xm list
Traceback (most recent call last):
File "/usr/sbin/xm", line 8, in <module>
from xen.xm import main
ImportError: No module named xen.xm
가능성은 두 가지입니다. 첫째, 모듈이 실제로 없는 경우. 둘째, 다른 곳에 문제가 있는 경우입니다. 먼저 첫 번째 경우부터 살펴보겠습니다.
Python 모듈이 실제로 누락된 경우
모듈이 실제로 존재하지 않을 수도 있습니다. 호스트에 관련 패키지가 설치되어 있는지 확인하면 됩니다. 예를 들어 gtk 패키지가 없다는 오류가 나타난다면, 패키지 관리 데이터베이스에서 gtk와 python-gtk 패키지의 설치 여부를 조회해 보세요.
또한 strace로 실패하는 명령을 실행하여 해당 유틸리티가 기대하는 파일이나 디렉터리가 누락되었는지 추적할 수도 있습니다. 이를 통해 문제에 대한 더 많은 단서를 얻을 수 있습니다. 시스템에 불완전한 Xen 설치가 이루어져 있을 가능성도 상당히 높습니다.
다른 곳에 원인이 있는 경우
'다른 원인'이란 대개 Python 환경 설정 문제를 의미합니다. 패키지가 시스템에 설치되어 있음에도 불구하고 Python이 어떤 이유로 이를 인식하지 못할 수 있습니다. 이 경우 PYTHONPATH 변수를 수동으로 설정하여 site-packages 디렉터리를 가리키면 문제를 우회할 수 있습니다.
export PYTHONPATH=/path-to-python-version/site-packages
PATH 변수도 함께 점검하여 올바른 버전의 Python을 사용 중인지 확인하세요. 명령어를 전체 경로로 실행하는 것도 항상 권장되는 좋은 습관입니다. 이것이 바로 세 번째 팁으로 이어집니다.
팁 3: 명시적인 명령 실행
믿기 어렵겠지만 대부분의 Xen 유틸리티는 사실 래퍼(wrapper) 스크립트입니다. 그 안에는 Python 코드가 숨어 있습니다. 예를 들어 Virtual Machine Manager(VMM) 역시 Python 기반 프로그램입니다. 먼저 유틸리티가 어디에 숨어 있는지 찾아야 합니다:
which <xen utility>
그다음 해당 파일의 내용을 확인합니다:
cat <path to xen utility>
그런 다음 래퍼를 거치지 않고 명령을 직접 실행할 수 있습니다. 이러한 래퍼 명령은 모두 상대 경로 이름을 사용하는데, 이는 어떤 Python 버전을 사용하든 도구가 작동한다는 장점이 있지만, 반대로 문제가 발생했을 때는 근본 원인을 가려버리는 요소가 됩니다.
실제 소프트웨어 문제인지 아니면 환경 설정 문제인지 확인하려면 Python 설치 경로 전체를 명시하여 명령을 실행해 보세요. 예를 들어 virt-manager를 직접 실행하는 대신 다음과 같이 실행합니다:
/usr/bin/python "/usr/share/virt-manager ..."
심지어 python2.4나 python2.7처럼 특정 버전의 Python을 지정해서 실행해 볼 수도 있습니다.
팁 4: 래퍼 스크립트 수정
숙련된 사용자가 아니라면 권장하지 않는 방법이지만, 래퍼 스크립트를 직접 수정하여 특정 경로와 Python 설치를 가리키도록 만들 수 있습니다. 앞선 초기 문제로 돌아가 보겠습니다. xm create <vm name> 실행 시 xen.xm 모듈 오류가 발생하는 상황입니다.
먼저 xm 명령이 정확히 무엇인지 확인해야 합니다. which xm을 실행하면 이 명령이 /usr/sbin/xm에 위치한다는 것을 알 수 있습니다. 이 파일을 텍스트 편집기로 열어보면 실제로 Python 스크립트임을 확인할 수 있습니다.
#!/usr/bin/env python
# -*- mode: python; -*-
import sys
# add fallback path for non-native python path installs if needed
sys.path.append('/usr/lib/python')
sys.path.append('/usr/lib64/python')
from xen.xm import main
main.main(sys.argv)
Xen의 일부 버전에서는 첫 줄이 #!/usr/bin/env python으로 되어 있습니다. 이를 특정 Python 버전으로 변경해 볼 수 있습니다. 예를 들어 Python 2.4 또는 Python 2.6 등이 있습니다. 그중 하나가 잘못 구성되어 있거나 환경 설정에서 누락되어 있을 가능성이 있습니다.
#!/usr/bin/env python <--- 삭제
#!/usr/bin/python2.6 <--- 사용
그러면 예상대로 모든 것이 정상적으로 작동하는 것을 확인할 수 있습니다. 예를 들어 Xen 커널이 함께 설치된 필자의 openSUSE 11.4 머신에서도 이 방법이 통했습니다.
마찬가지로 /usr/bin/python만 참조하는 최신 버전의 Xen에서도 동일한 변경을 시도해 보면, 문제가 시스템 설정과 관련된 것인지 판별할 수 있습니다.
변경 작업 전에는 반드시 원본 파일을 백업하세요. 또한 한 번에 하나의 변경만 시도하여 새로운 복합 문제를 만들지 않도록 주의해야 합니다.
팁 5: 서비스 상태 확인
너무 단순해 보이지만, libvirt 서비스가 시작되지 않은 상태에서는 가상화 작업 전반에 걸림돌이 생깁니다. dom0 도메인에 연결할 수 없게 되는 등 여러 문제가 발생합니다. 따라서 libvirt 서비스가 실행 중인지, 그리고 부팅 시 자동으로 시작되도록 활성화되어 있는지 반드시 확인하세요.
오늘은 여기까지 살펴보겠습니다.
추가 학습 자료
Virtuatopia 사이트에는 매우 유용한 참고 자료가 있습니다.
RedHat 문서의 "Common Xen Problems" 문서도 함께 읽어볼 만합니다.
결론
이 글이 가장 세련된 글은 아닐 수 있습니다. 하지만 어차피 Python 트레이스백 메시지도 미의 결정체는 아니니까요. 과도하게 장황한 출력은 실제 문제를 가릴 수 있으며, 그 실체는 올바른 환경 변수를 설정하거나 Python 버전을 바꾸는 것처럼 허탈할 정도로 단순한 경우가 많습니다. 이 가이드가 불필요한 번거로움과 좌절로부터 여러분의 소중한 시간을 절약해 주기를 바랍니다.
읽을 거리가 아직 많이 남아 있으니 바로 가상화 섹션으로 이동해 클릭을 시작해 보세요. 입문 소개 글부터 Xen Cloud Platform과 XenServer, 탐색용 라이브 CD까지 다양한 자료가 준비되어 있습니다. 앞으로도 더 많은 Xen 관련 정보를 다룰 예정입니다. 또 다른 오픈소스 솔루션인 KVM도 흥미롭게 살펴볼 만합니다. 즐기세요!
공유하고 싶은 간단하고 범용적인 팁이 있다면 언제든지 이메일로 연락 주세요. Dedoimedo였습니다.
감사합니다.