'가상머신'에 해당되는 글 4건

  1. 2015.05.19 Venom 가상화 임의코드 취약점 보안업데이트
  2. 2009.07.06 우분투에서 MS환경 활용 (인터넷뱅킹,결제) (1)
  3. 2009.03.18 우분투 8.10에서 kvm을 이용한 가상서버 설정
2015.05.19 19:19

Venom 가상화 임의코드 취약점 보안업데이트

개요

  • Crowdstrike社는 QEMU의 가상머신 플로피 디스크 컨트롤러에서 ‘가상머신을 탈출할 수 있는 취약점’을 발견, 해당 취약점을 VENOM(Virtualized Environment Neglected Operations Manipulation)이라 명명
  • 낮은 버전의 가상머신 사용자는 악성코드 감염에 취약할 수 있으므로 해결방안에 따라 최신버전으로 업데이트 권고

설명
  • 가상머신의 플로피 디스크 컨트롤러에서 발생하는 취약점을 해결하는 추가 보안 업데이트 발표
- 가상 플로피 디스크 컨트롤러의 길이가 지정된 매개 변수 값을 오버플로우 시킴으로써 가상머신을 탈출해 다른 가상머신에서 임의코드를 실행 시킬 수 있는 취약점 (CVE-2015-3456)

영향 받는 소프트웨어
  • QEMU
  • Xen
  • KVM
  • VirtualBox(Oracle)
※ VMware, Microsoft Hyper-V, Boches hypervisors는 해당 취약점에 영향 받지 않음

해결 방안

  • 영향 받는 소프트웨어의 클라이언트를 사용하고 있는 시스템 관리자는 다음 참고사이트의 내용을 참조하여 보안업데이트 수행
- QEMU[1], Xen Project[2], Red Hat[3], Citrix[4], FireEye[5], Linode[6]
- Rackspace[7], Ubuntu[8], Debian[9], Suse[10], DigitalOcean[11], f5[12]
- Joyent[13], Liquid Web[14], UpCloud[15], Amazon[16], Oracle[17]
- Barracuda Networks[18]

기타 문의사항
  • 한국인터넷진흥원 인터넷침해대응센터: 국번없이 118

[참고사이트]
 [1] http://git.qemu.org/?p=qemu.git;a=commitdiff;h=e907746266721f305d67bc0718795fedee2e824c
 [2] http://xenbits.xen.org/xsa/advisory-133.html
 [3] https://access.redhat.com/articles/1444903 
 [4] http://support.citrix.com/article/CTX201078
 [5] https://www.fireeye.com/content/dam/fireeye-www/support/pdfs/fireeye-venom-vulnerability.pdf
 [6] https://blog.linode.com/2015/05/13/venom-cve-2015-3456-vulnerability-and-linode/
 [7] https://community.rackspace.com/general/f/53/t/5187
 [8] http://www.ubuntu.com/usn/usn-2608-1/
 [9] https://security-tracker.debian.org/tracker/CVE-2015-3456
 [10] https://www.suse.com/support/kb/doc.php?id=7016497
 [11] https://www.digitalocean.com/company/blog/update-on-CVE-2015-3456/
 [12] https://support.f5.com/kb/en-us/solutions/public/16000/600/sol16620.html
 [13] https://help.joyent.com/entries/68099220-Security-Advisory-on-Venom-CVE-2015-3456-in-KVM-QEMU
 [14] http://www.liquidweb.com/kb/information-on-cve-2015-3456-qemu-vulnerability-venom/
 [15] http://status.upcloud.com/incidents/tt05z2340wws
 [16] http://aws.amazon.com/security/security-bulletins/XSA_Security_Advisory_CVE_2015_3456/
 [17] http://www.oracle.com/technetwork/topics/security/alert-cve-2015-3456-2542656.html
 [18] https://community.barracudanetworks.com/forum/index.php?/topic/25582-cve-2015-3456-venom-vulnerability/?p=71567



Trackback 0 Comment 0
2009.07.06 18:34

우분투에서 MS환경 활용 (인터넷뱅킹,결제)

Internet Explorer 설치 + IE View로 연동하기

최근에 Wine이 좋아지면서(상대적인겁니다) 우분투의 파이어폭스에서도 IE View를 사용하시는 분이 늘고 있습니다. 물론 저의 경우 리눅스용 Internet Explorer인 IES4linux가 Flash를 볼때 깜빡거리는 증상 때문에 대신 IE기반의 브라우저 jwBrowser를 씁니다만(IE Toy를 설치해볼까요?) 역시 주로 파이어폭스를 쓰고 있기 때문에 주소 복사해다 붙이는것도 귀찮아서(...) 가끔 IE View도 씁니다.

IE Tab은 어떤 기술상의 이유로 사용할 수 없다고 합니다.-_-;;

그럼 아래부터 설치법 들어갑니다.

1. 일단 당연히 Internet Explorer가 필요합니다. 리눅스용으로는 Wine을 통해 구동하는 IES4linux라는 녀석이 있습니다. 이 녀석을 설치하기전에 두가지 패키지를 설치해야 합니다.

아래 링크를 눌러서 관련 패키지를 설치해줍니다.(혹은 시냅틱에서 설치하실 수 있습니다.)
Wine
cabextract

2. 아래 파일을 다운받으신 다음 실행 시키시면 IE를 자동으로 설치해줍니다.
http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz

3. 설치가 끝났으면 이번엔 IE View를 설치합니다.(Lite만이 리눅스 지원이 됩니다.)
설치

4. IE View 설정 창에서 IE의 경로를 /home/사용자 아이디/bin/ie6 로 써줍니다.


5. 이제 파폭 메뉴에서 View this page in IE 를 택해주시면 IE로 웹페이지가 열립니다.

현재 와인의 안정버전은 1.0.1입니다. 그러므로 우분투에서는 더이상 wine 1.0.1 이후로 버전업을 하지 않고 있습니다. winehq에서 저장소를 추가하여 설치하는 wine은 1.1.x 버전이고, 이 버전의 와인은 개발버전입니다. 그러므로 버전업마다 매우 불안정한 모습을 보여줍니다.

문제는 1.1.x 이후 버전의 Wine에서는 Internet Explorer 6이 동작하지 않는다는 것입니다. IE6을 돌리는 이외의 목적으로 쓰시는 분들은 상관없겠지만 IE6.0을 쓰시려면 개발버전의 와인이 아니라 우분투 저장소에 있는 안정버전의 와인을 받으시는 것을 추천드립니다.

IE 6.0이 CPU 100% 문제를 일으키며 종료 후에도 계속 프로세스에 잔류할 경우에는 패치된 wine을 받으시면 됩니다.(64비트는 이 파일을 받으세요.)

8.04용으로 패키징 된 것이라 wine 버전이 1.0입니다. 우분투에 있는 wine이 버전이 더 높아서 자동으로 업그레이드 되버릴 우려가 있습니다. 그러므로 시냅틱 패키지 관리자에서 wine의 버전을 고정 해주시기 바랍니다.(패키지 - 잠긴 버전 선택) 이 후 버전이 계속 나왔으면 좋겠는데 배포가 이루어지지 않고 있네요..

오늘 9.04 용으로 패치 적용후 패키징을 해보려고 용을 썼지만 결국 안되더군요=_=;; 소스가 잘못된 것인지.. 64비트라서 그런지 몰라도 패키징 과정에서 계속 에러가=_=;; 이거 도와주실 분 혹시 계시면 덧글 부탁드립니다..ㅠㅠ 매 버전 wine에 패치를 적용할 필요는 없고 안정버전(1.0.x)에만 적용하면 될 듯 합니다.


인터넷 뱅킹도 잘 안하고, 윈도우즈 특수 프로그램을 잘 돌리지 않는 저로서는(몇몇이 있긴하지만.. wine-libs를 사용한다고 명시된 것들이라 리눅스용이라고 봐도-_-;) 우분투에서 가장 아쉬운건 잠깐씩 돌리는 IE와 결제인데 이것으로도 이미 충분한 것 같습니다.

ISP 결제는 키보드 보안 때문에 가상머신에서도 다운되버리고.. 크로스오버에서도 에러가 나고.. 오직 wine 1.0.x에서만 볼 수 있는 화면입니다.


우분투에 MBC Mini 플레이어 설치

MBC 라디오는 공개된 스트리밍이 있어서 잘 들을 수 있었는데 얼마전에 또 막히고 말았습니다. 그래서 홧김에 리눅스에서 미니 플레이어를 설치해보자! 라고 마음을 먹게되었습니다. 물론 역시 Wine을 이용한 방법입니다.

크로스오버에서는 잘 동작하는 것으로 알려져 있습니다. 역시 문제는 Wine을 이용한 방법이겠죠.-_-; 아래는 삽질과정 & 팁입니다.(이 팁은 Wine 1.0을 기준으로 작성되었습니다.)

1. 일단 준비물을 구비합니다. 준비물은,

wine
cabextract
ies4linux
Windows Media Player 9 for Win98 인스톨러

입니다. 이 준비물에서 아시겠지만 미니플레이어는 IE와 윈미플이 있어야 동작하는 지극히 윈도 의존적 프로그램입니다. 아래 설치과정부터는 JWBrowser의 설치과정과 비슷하게 진행될 겁니다.

2. 먼저 ies4linux를 설치합니다. 설치과정상 어려운 문제는 더이상 존재하지 않는 것 같습니다.(너무 쉽네요)

3. 그 다음 ./ies4linux에 있는 ie6을 홈폴더로 복사하거나 링크를 걸어 이름을 .wine으로 변경합니다.

홈폴더를 여신뒤, Ctrl+H를 하여 숨긴 파일 보기를 합니다. 그렇게 하여 .ies4linux 폴더를 찾습니다.

.ies4linux 폴더에 가보시면 ie6 라는 폴더가 있습니다. 이 녀석을 홈폴더로 Alt + Drag 하여 심볼릭 링크를 걸어줍니다.

그리고 이 링크 파일의 이름을 .wine 으로 바꿔줍니다.

그러면 .wine 폴더가 위에 화살표가 얹혀진(링크라는 표시)채로 만들어집니다.

.wine/drive_c/windows/Fonts 에 윈도에서 쓰이는 굴림체를 복사하여 주시면 좋습니다.

4. 이 단계까지는 이전과 비슷합니다만, 문제는 미디어플레이어 였습니다. 크로스오버와 Wine이 차이를 갖는 점도 이 부분으로, 크로스오버에서는 IE6 설치 후 쉽게 윈미플9를 설치할 수 있습니다만 Wine에서 윈미플9를 설치하려고 하면 아래와 같은 에러가 나타납니다.


이 부분은 ies4linux 개발자가 편의상 레지스트리에 윈미플9를 등록해놓았기 때문에 벌어지는 현상으로 보입니다. 그렇기 때문에 레지스트리를 수정해야 합니다.(이 부분 때문에 정말 많은 삽질&검색을 해야 했습니다..Wine-doors와 Wine-tricks를 써보았지만 결과적으로 실패했습니다.)

레지스트리 수정을 하기 위해서 아래 파일을 받습니다.

wmp9config.reg

이 폴더를 .wine으로 복사합니다.

그런 뒤 터미널에서 아래 명령어를 입력합니다.

regedit ./.wine/wmp9config.reg

이렇게 하면 이제 미디어플레이어를 설치할 수 있습니다.

5. 윈도우즈 미디어플레이어를 설치합니다. 설치과정 중 아래 메시지가 등장하지만,
/.wine/drive_c/Program Files/Windows Media Player 로 이동하여 wmplayer.exe를 실행하면 설치를 마무리할 수 있습니다.



자, 이제 어려운 준비과정(별로 어렵진 않죠^^;;)이 다 끝났습니다! 이제는 mini 플레이어를 설치할 차례입니다.

6. Mini Player를 iMBC에서 다운받아 설치합니다. 하지만 MBC에 가기 귀찮으신 분들을 위해 설치파일을 올려둡니다.

MiniSetup.exe

설치 과정에서 한글이 깨질 수 있습니다만 크게 신경쓰지 않으셔도 됩니다.

7. 설치과 완료되면 바탕화면에 mini 아이콘이 등장합니다. 실행해봅니다.

로그인 창이 정상적으로 뜨는 군요^^

드디어 Mini Player가 실행되었습니다! 라디오도 잘 나옵니다.

실행은 꽤 잘되는 편입니다. 자세히 보시면 트레이 아이콘도 잘 올라가 있는 것을 보실 수 있습니다. 중간에 어떤 에러가 등장하지만 광고와 관련된 Flash 관련 오류입니다. 다만 방송 이름이 깨지는 점은 다소 아쉽습니다.


지금까지 MBC Mini Player를 리눅스에서 사용하는 법을 알아보았습니다. 물론 가상머신을 쓰고 있다면 가상머신에서 해결할 수 있습니다. 그렇지만 라디오를 듣자고 가상머신을 실행할 수는 없기에-_-;; 만약 크로스오버 리눅스 정품을 보유하고 계시다면 크로스오버 리눅스에서는 더 쉽게 설치할 수 있으니 이 방법을 사용하지 마시기 바랍니다.


우분투에 Wine으로 Google 크롬 설치하기


얼마전에 블로그에도 리눅스에서 구글 크롬이 돌아가는 듯한 스크린샷을 올렸지만 사실 그건 버츄얼박스의 심리스 모드였습니다=_=;;

오늘은 오랜만에 할 일도 없고 해서 Wine을 또 설치했습니다.(그동안은 게임 안하려고 일부러 지웠죠=_=;) Wine 1.1.4 의 체인지로그를 보다보니 구글크롬에 대한 버그 픽스가 있더군요. 그래서 혹시나 하는 마음에 구글 크롬을 설치해보기로 했습니다.

준비물은 Wine 1.1.4 입니다.

1. 일단 구글 크롬을 다운 받아야 합니다. 현재 웹상에 있는 넷 인스톨러는 Wine에서 구동되지 않습니다. 그러므로 아래 주소에서 다른 종류의 인스톨러를 받으셔야합니다.
다운

2. 인스톨러를 눌러서 설치합니다. 그러면 별다른 설치과정없이 빠른 속도로 설치 완료 메시지가 나옵니다.

이때 주의해야할 점은 Wine에는 IE가 없기 때문에 IE에서 설정을 가져오는 옵션을 체크하면 안된다는 것입니다.

3. 설치가 끝나면 크롬이 실행되는데 오류가 나옵니다. 창을 종료시키고 바탕화면에 생긴 크롬 아이콘에 오른클릭을 눌러 속성 창을 엽니다.


실행아이콘 탭에 명령어 부분에 --new-http --in-process-plugins 라는 옵션을 추가해줍니다.

4. 그런 다음 다시 해당 아이콘을 눌러서 실행해보면,


잘 실행되는군요^^ 특유의 속도감은 다소 떨어진 느낌이들긴 하지만 그래도 파이어폭스 3.0과 비슷한 수준의 속도를 보여줍니다. UI의 반응속도도 매끄럽네요. 무엇보다도 플래쉬가 IES4Linux와 달리 껌뻑껌뻑 거리지 않습니다. 이런 느낌대로라면 그런대로 브라우징의 목적으로 써도 괜찮을 듯한 느낌입니다.

그러나 역시 아직 완전하지는 않습니다. 특히 https:// 주소에서는 아래와 같이 나와서 이글루스에 로그인이 안됩니다.


또한 탭별로 등장하는 chrome.exe 프로세스의 메모리 반환이 생각보다 잘 되지 않는 것도 문제입니다. 그러나 이 오류가 수정되길 바라는 것보다는 리눅스용 크롬이 나오길 기다리는게 더 좋을 것 같습니다. =_=;; 그냥 한번 크롬을 테스트해보시고 싶으신 분들은 시도해보셔도 좋을 것 같습니다^^

출처 : http://opensea.egloos.com/


Trackback 1 Comment 1
  1. Favicon of https://blog.pages.kr 날으는물고기 2009.07.06 18:35 신고 address edit & del reply

    리눅스에서 ActiveX 사용하기(ies4linux)
    http://kldp.org/node/78956

2009.03.18 14:31

우분투 8.10에서 kvm을 이용한 가상서버 설정

개요

가물가물한 기억인데, kvm과의 첫 만남은 아마도 2007년 늦은 봄 정도였던 것 같다. 그 무렵이 드디어! kvm이 메인스트림 커널에 포함되고 그것을 기반으로 한 배포본이 등장하기 시작했던 무렵이기 때문이다. (요즘 가끔씩 깜짝 놀라기도 하는데, 되돌아보니 근 몇 년간 배포본에서 지원하지 않는 최신의 뭔가를 스스로 노력해서 써본 기억이 없다! 이럴수가!)

이런 저런 정황으로 봤을 때, 앞으로 리눅스 기반 가상화의 중심에 자리 잡을 것으로 예상했던 kvm의 첫 느낌은, (애써 감추려고 노력했지만) 사실 실망이었다. 너무 느리고 까다롭고... 하지만, 신생아라는 점을 고려하면, 그냥 "와~ 추카추카~ 이쁘네~~~ 잘키워~" 하고 호응해줄 수 밖에!

그로부터 채 1 년도 지나기 전에, kvm을 프로젝트에서 개발 플랫폼으로써 활용할 수 있었다는 것이, 기쁘지 않을 수 없다. :-) 그래서, 이번에는 내부 업무 시스템에 kvm을 적용해보기로 맘먹었다. (말이 길었는데,) 이 글은 그 과정에 대한 기록이다.

설치 및 설정 - 기본 설정

한 두 번도 아닌데, kvm은 설치할 때 마다 새로운 느낌이 있다. 아직 활발히 성장하고 있는 중이어서일까? 어쨌든, 이번 설치의 플랫폼은 우분투 8.10이다. 먼저, 다음 명령을 사용하여 kvm 관련 패키지를 설치했다.

$ sudo apt-get install ubuntu-virt-server

8.10 버전부터 새로 추가된 ubuntu-virt-server 패키지는 kvm, libvirt-bin, openssh-server 등의 세 패키지를 잡고 있는 가상화 서버 구성을 위한 메타패키지이다. 이와 함께 추가된 ubuntu-virt-mgmt 패키지는 virt-manager, python-vm-builder, virt-viewer 등의 관리용 패키지를 잡고 있는 메타 패키지인데, 이 번 작업 내용에는 포함되지 않았다. (현재 랩탑에서 사용중인 7.10 버전에서는 지원되지 않아서 일단 관련된 작업 및 시험은 보류했다.)

네트워킹 등의 일부 기능은 적절한 권한이 있어야 사용할 수 있다. 다음 명령을 이용하여 사용자를 libvirtd 그룹에 추가시켜준다. (물론, 다시 로그인을 해야 변경된 그룹 권한이 적용된다.)

$ sudo adduser `id -un` libvirtd

위의 과정이 정상적으로 수행되었다면, 다음과 같은 방식으로 작동 여부를 확인할 수 있다.

$ virsh -c qemu:///system list
Connecting to uri: qemu:///system
Id Name                 State
----------------------------------
$

가상머신 설치하기 - 가상 콘솔

이런! 가상머신을 설치하려고 보니 어쩔 수 없이 최소한의 클라이언트 기능을 설치할 수 밖에 없겠네... 애초의 계획은 클라이언트는 완전히 독립된 기계에서 운용하고 서버는 말 그대로 "가상화 기반"으로써만 활용하는 것이었다. 그런데... 랩탑 환경을 지금 바꾸기는 좀 무리가 있고 일단은 서버에 최소한의 관리 환경을 설치하도록 한다.

다음과 같은 방식으로 가상 콘솔 프로그램인 virt-viewer를 설치한다.

$ sudo apt-get install virt-viewer
<...>
다음 새 꾸러미를 설치할 것입니다:
  defoma fontconfig fontconfig-config hicolor-icon-theme libatk1.0-0
  libatk1.0-data libcairo2 libcups2 libdatrie0 libdrm2 libfontconfig1
  libfontenc1 libfreetype6 libgl1-mesa-glx libglu1-mesa libgtk-vnc-1.0-0
  libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgtkglext1 libice6 libjpeg62
  libpango1.0-0 libpango1.0-common libpixman-1-0 libpng12-0 libsm6
  libthai-data libthai0 libtiff4 libxcb-render-util0 libxcb-render0
  libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxfont1 libxft2 libxi6
  libxinerama1 libxmu6 libxrandr2 libxrender1 libxt6 libxxf86vm1 ttf-dejavu
  ttf-dejavu-core ttf-dejavu-extra virt-viewer x-ttcidfont-conf
  xfonts-encodings xfonts-utils
<...>

virt-viewer는 말 그대로 가상머신 뷰어이다. 이 프로그램을 통하여 가상머신의 가상 콘솔에 접속할 수 있고, OS 설치 등의 현장에서만 실행할 수 있는 작업을 진행할 수 있다.

이것으로 준비는 거의 끝난 것 같다.
 
가상머신 설치하기 - 가상머신 생성

virt-install 이나 우분투 고유의 python-vm-builder (예전의 ubuntu-vm-builder) 등의, 설치 전용 유틸리티를 활용하여 생성과 동시에 설치를 진행하는 방식도 있고, 또는 virt-manager에서 적절한 생성을 마친 후, 가상머신을 기동시키고 설치를 진행할 수도 있다. 예전에는 virt-manager 방식이나 virt-install 방식을 시도해봤었는데, virt-manager 방식의 경우, 설치 속도 문제로 고생을 좀 했던 기억이 있다. virt-install의 경우, 설치 후 재부팅이 필요한 환경 등에서 좀 모자라다는 느낌을 받았었던 것 같은데 역시 기억이 살짝 희미해져 있다. 더욱 중요한 것은, virt-install의 경우, 여러 디스크를 붙이고 싶은 경우 등의 상세한 작업을 할 수 없었던 것으로 기억한다. 그래서 이번에는 다른 방식을 도입해 보았다.

이름하여 가상머신 생성기. genxml.sh라는 스크립트를 급조했다. 처음에는 조금 보편적인 설정이 가능하도록 하려다가, 시간도 없고. 또한 그렇게 까지 할 필요성을 느끼지도 못해서 내 스타일의 가상머신을 만들어내는 정도로 목표 수준을 낮췄다. 다음은 스크립트의 내용이다.

이름하여 가상머신 생성기. genxml.sh라는 스크립트를 급조했다. 처음에는 조금 보편적인 설정이 가능하도록 하려다가, 시간도 없고. 또한 그렇게 까지 할 필요성을 느끼지도 못해서 내 스타일의 가상머신을 만들어내는 정도로 목표 수준을 낮췄다. 다음은 스크립트의 내용이다.

#!/bin/sh

VM_ROOT=/box/vms

vm_name=mercury
vm_mem=1024
vm_cpu=2
vm_mac=`echo "52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"`

echo -n "name of vm: "; read vm_name
vm_home=$VM_ROOT/$vm_name
mkdir -p $vm_home

echo -n "size of ram: "; read vm_mem
echo -n "number of cpus: "; read vm_cpu
echo -n "path of cdrom: "; read vm_cdrom
echo -n "disk size of sys: "; read size
qemu-img create $vm_home/$vm_name-sys.qcow2 -f qcow2 ${size}G
echo -n "disk size of tmp: "; read size
qemu-img create $vm_home/$vm_name-tmp.qcow2 -f qcow2 ${size}G
echo -n "disk size of opt: "; read size
qemu-img create $vm_home/$vm_name-opt.qcow2 -f qcow2 ${size}G

cat > $vm_name.xml <<EOF
<domain type='kvm'>
  <name>$vm_name</name>
  <uuid>`uuidgen`</uuid>
  <memory>$(( $vm_mem * 1024 ))</memory>
  <currentMemory>$(( $vm_mem * 1024 ))</currentMemory>
  <vcpu>$vm_cpu</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <source file='/$vm_home/$vm_name-sys.qcow2'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='file' device='disk'>
      <source file='/$vm_home/$vm_name-tmp.qcow2'/>
      <target dev='hdb' bus='ide'/>
    </disk>
    <disk type='file' device='disk'>
      <source file='/$vm_home/$vm_name-opt.qcow2'/>
      <target dev='hdd' bus='ide'/>
    </disk>
    <disk type='file' device='cdrom'>
      <source file='/$vm_cdrom'/>
      <target dev='hdc' bus='ide'/>
    </disk>
    <interface type='network'>
      <mac address='$vm_mac'/>
      <source network='default'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' listen='127.0.0.1'/>
  </devices>
</domain>
EOF

이 스크립트를 이용하면 디스크 세 개를 달고 있는 가상머신 설정을 단숨에 만들어낼 수 있고 해당 디스크 이미지 역시 스크립트 내부에서 만들어낸다. 가상머신이 생성되는 위치는 스크립트 내부에 지정되어 있으며, 가상머신 이름을 이용한 디렉토리 안에 관련된 디스크 파일을 모아두는 방식으로 되어있다. 다만, 가상머신의 설정이 담긴 xml은 스크립트를 실행한 현재디렉토리에 떨어지게 되며, 다음 명령을 이용하여 이 xml 파일을 읽어들여 가상머신 설정을 완료하도록 할 수 있다.

$ ./genxml.sh
name of vm: u810si
size of ram: 512
number of cpus: 2
path of cdrom: /box/isos/ubuntu-8.10-server-i386.iso
disk size of sys: 6
Formatting '/box/vms/u810si/u810si-sys.qcow2', fmt=qcow2, size=6291456 kB
disk size of tmp: 1
Formatting '/box/vms/u810si/u810si-tmp.qcow2', fmt=qcow2, size=1048576 kB
disk size of opt: 2
Formatting '/box/vms/u810si/u810si-opt.qcow2', fmt=qcow2, size=2097152 kB
$ virsh -c qemu:///system define u810si.xml

이렇게, 우분투 8.10 서버용 i386 버전을 위한 가상머신 설정과 디스크 준비를 끝냈고, 마지막으로 virsh 쉘의 define 명령을 이용하여 만들어진 설정을 적용하였다. 이제 생성된 가상머신을 실행해보자.

$ virsh -c qemu:///system start u810si
Connecting to uri: qemu:///system

$ virt-viewer -c qemu:///system u810si

어라? 부팅에 실패했다! 왜냐하면, 기본 부팅 설정이 'hd' 즉, 하드디스크로 되어있기 때문. xml 파일을 열어서 다음의 내용을 수정해주고 다시 define 명령을 내려줘야 cdrom으로의 부팅이 가능하다. (그런데 왜 hd를 기본값으로 했을까? cdrom으로 바꿀까?)

9c9
<    <boot dev='hd'/>
---
>   <boot dev='cdrom'/>

어쨌든, cdrom으로 부팅을 하도록 설정하고, define 명령을 내려주고, 다시 start 명령을 내린 후 접속을 해보면 설치 화면이 떠 있는 것을 볼 수 있다. 이후의 과정은 일반적인 설치 과정이며, 최종적으로 재부팅. 어라? 그러면 다시 CD로 부팅할 줄 알았은데 그렇지가 않다. 그냥 부팅 오류가 발생했네? 이유는 모르겠지만 어차피 다시 부팅 설정을 바꿨어야 했으므로, 다음의 방식으로 설정을 바꿔주고 다시 시작해보자.

$ virsh -c qemu:///system destroy u810si
$ vi u810si.xml (boot 부분 편집)
$ virsh -c qemu:///system define u810si.xml
$ virsh -c qemu:///system start u810si

휴, 이제 설치가 모두 끝났다.

아참, 이렇게 재부팅 하기 직전의 상태를 백업해 두는 것도 좋겠네.

가상머신 복제

이렇게 생성, 설정 및 설치를 마친 후, 늘 그렇듯이 설치 원본의 백업 및 복제 방안 마련에 들어간다. 백업은 간단한게, xml 파일과 디스크 이미지 파일을 tar 명령으로 묶어서 저장해두면 그 뿐. 그럼 복제는? 다음의 방식을 도입해봤다.

먼저, 간단한 스크립트를 하나 짰다. 이름은 copyvm.sh.

#!/bin/sh

src_vm=$1
dst_vm=$2

[ "$src_vm" = "" -o "$dst_vm" = "" ] && {
        echo "usage: copyvm.sh src dst"
        exit 1
}

[ ! -d "$src_vm" ] && { echo "source vm is not exist. abort!"; exit 1; }
[ -e "$dst_vm" ] && { echo "destination vm is already exist. abort!"; exit 1; }

vm_mac=`echo "52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"`
vm_uuid=`uuidgen`

cp -a $src_vm $dst_vm
cd $dst_vm
rename "s/$src_vm/$dst_vm/" *
sed -i "s/$src_vm/$dst_vm/g" $dst_vm.xml
sed -i "s,<uuid>.*</uuid>,<uuid>$vm_uuid</uuid>," $dst_vm.xml
sed -i "s,<mac address=.*/>,<mac address='$vm_mac'/>," $dst_vm.xml

ls
cat $dst_vm.xml

내용은 간단하다. 인수 두 개를 받아서 첫 번째 인수로 받은 기존 VM을 두 번째 인수로 받은 이름의 새 VM으로 복사하고 설정 차원에서 중복되어서는 안되는 값만 바꿔주는 것이다.(MAC 주소와 UUID) 물론, OS 내부의 설정은 아직 변경하지 못한다. 불가능할 것 같지는 않은데... 현재로써는 복제 원본과 복제된 가상머신의 hostname, sshkey 등의 값이 같다는 한계가 있지만, 어쨌든 쓸만은 하다. 또한 복제 원본을 위한 템플릿 작업을 조금 한다면 더 좋겠지.

$ copyvm.sh u810si rails

이제 우분투 8.10 서버 i386 버전 기반의 rails 환경 복제 완료. 프로비저닝 시간? 한 10초?

새로운 가상머신을 시작시킨 후, 다음의 명령으로 필요한 추가 패키지를 설치해줬다.

$ sudo apt-get install vim
$ sudo apt-get install subversion
$ sudo apt-get install rails
$ sudo apt-get install rubygems

마치기

푸하하... 여기까지, 우분투 8.10 최신버전을 기반으로 한 가상 인프라 구축의 초기 단계와 가상머신 생성 및 복제 과정을 정리해봤다.


출처 : http://sio4.tistory.com/

Trackback 2 Comment 0