지난 포스팅에서 windows(hvm) guest 를 Ubuntu 14.4 dom0 에 설치하고 설정하는 과정을 다루어 보았다. 이번에는 동일한 host 환경에 pv(반가상화) guest 를 설치하는 과정을 정리해 보고, 주의할 사항이나 문제 해결 방법 등에 대해 기록하고자 한다.


Host 의 xen 환경에 대해서는 지닌 시간에 충분히 다루었으므로, 이번에는 pv guest 를 설치하고 다루는 중요한 체크포인트들에 대해 집중적으로 기록한다.


지난 포스팅의 HVM guest 설치 과정과 이번 포스팅에서 다룰 pv guest 설치의 차이점들을 짚어 보도록 하자(참고/지난 포스팅: [Xen 가상화 1] Windows 7 hvm guest on Ubuntu 14.4 LTS, Xen 4.4.1 - 설치 및 설정 가이드)


* HVM guest는 Host 의 각종 장치를 에뮬레이션하는 기능(가상화된 장치)를 직접 사용하기 때문에 설치 CD/DVD-rom 이나, 네트워크 설치 등 다양한 방법을 자연스럽게 써서, 설치 과정이 직관적이고 쉬울 뿐 아니라 VNC 를 통해서 그래피컬한 방식으로 진행 가능하다

* PV(paravirt) guest OS는 주로 linux 계열의 OS 들을 사용하며, HVM guesu OS로 사용되는 Windows / Open Solaris / FreeBSD  등은 pv guest 로는 사용이 곤란하다

* PV guest 설치 방법은 크게 두 가지로 나뉜다

 1. config 파일 설정 방식으로, image 파일을 loop device 로 마운트하여 완전 수작업으로 시스템 파일 복사/설치(guest install 과정이 없음)하고 vm을 구동

 2. virt-install 로 text 방식 또는 virt-manager 로 GUI 방식으로 설치(guest install 과정이 있음)

* PV guest 설치시에는 Host 의 ISO 파일이나 CD/DVD-rom 을 사용할 수 없다

virt-manager 에서 새로운 vm 추가시에 "로컬 CDROM/ISO" 를 통한 설치 진행 시 paravirt 는 선택이 불가



위의 마지막 줄의 제약사항은 config 파일 설정 방식이나 virt-install 을 통한 명령어 방식에서도 동일하므로, 지난 포스팅에서와 같이 iso 파일을 마운트해서 PV guest 를 설치해 보려는 시도는 의미가 없음에 주의하자.


1. 어떤 방법을 쓸 것인가? ... GUI로 쉽게 가자


위에서 언급한 config 파일 설정을 통한 완전 수작업 방식은, Host OS 나 guest OS의 종류에 따라 방법이 달라질 뿐 아니라, image 파일 내의 파티션 설정, vmlinuz/initrd 등의 부트로더/OS파일 복사, 패키지의 수작업/선별적 설치(SUSE는 zypper, Ubuntu 는 apt-get...이런 식. 각각의 옵션도 상이함) 등의 복잡한 과정을 밟아야 하므로 다소 난이도가 있는 까다로운 작업이 될 수 있다. 따라서 이번 포스팅에서는 virt-manager 를 통한 쉬운 GUI 방식을 선택해서 진행해 보려 한다.


* 지난 포스팅에서 virt-manager 설치는 이미 해 두었으므로 별도 준비 과정은 없다

* 우선 xen의 config 파일을 수정하고 restart 한다

$ su -

# vi /etc/xen/xend-config.sxp -> 아래 2개 항목을 찾아서 uncomment 하고 내용을 수정한다

(xend-http-server yes)

(xend-port            8000)

service xen restart


* (옵션 사항) visrh 명령으로 storage poo 을 미리 설정해 두면 설치 iso, guest image 저장 위치를 따로 지정할 수 있다

(/home/vmimage는 guest OS의 설치 이미지 파일이 생성될 위치, /home/vmos_images 는 iso 파일이 저장된 위치)

# virsh

virsh # pool-destroy default

virsh # pool-undefine default

virsh # pool-define-as --name default --type dir --target /home/vmimage

virsh # pool-autostart default

virsh # pool-build default

virsh # pool-start default

virsh # pool-destroy local

virsh # pool-undefine local

virsh # pool-define-as --name local-iso --type dir --target /home/vmos_images 

virsh # pool-autostart local-iso

virsh # pool-build local-iso

virsh # pool-start local-iso

virsh # quit


* virt-manager 를 실행하고 VM 생성을 위한 과정을 진행한다

# virt-manager


127.0.0.1(xen) 항목을 더블클릭하여 root 암호를 입력하여 로그인


툴바의 '새 가상머신 생성' 버튼을 클릭하고 머신 이름 지정 후 '네트워크 설치'를 선택하고 '앞으로' 클릭


URL 입력 부분에 네트워크 설치 URL을 입력하고 OS종류, 버전을 선택하고 '앞으로'


* Ubuntu 14.4(trusty) 를 위한 네트워크설치 URL은 다음 3개 중 하나를 선택하여 입력

http://kr.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/

http://us.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/

http://mirrors.kernel.org/ubuntu/dists/trusty/main/installer-amd64/


디스크 이미지의 크기를 기가바이트 단위로 지정하고 '앞으로'


'추가옵션' 클릭, Virt 종류는 xen(paravirt) 로 선택


항목별 변경 사항이 있으면 각각 수정한 후 '적용', 상단의 '설치시작' 을 선택하면 다음 단계로 진행


프로그레스 바가 있는 작은 팝업창이 뜬 후, 약간의 시간이 지나면 가상머신관리자 창에 새로운 vm 이 나타난다. 이 때 접속이 되지 않는 시커먼 그래픽 콘솔 창이 같이 뜨는데, 당황하지 않고 창을 닫아 버리자(paravirt guest이므로 지금은 그래픽 화면을 볼 수 없고, base system 설치가 완료된 이후에는 가상콘솔 화면으로 접속할 수 있다).


다다

virt-manager 구동 후 시간이 지났을 경우 root 로그인 창이 뜨기도 한다



* xl list 를 해 보면 방금 생성한 vm 이 기동되고 정상 작동중인 것을 확인 수 있다

* 이제부터는 터미널을 열어서 텍스트 방식으로 진행한다. console 로 접속하면 셋업 단계의 화면을 접하게 된다

# xl li

Name                                        ID   Mem VCPUs State Time(s)

Domain-0                                     0 10714     4     r-----    4124.2

ubuntu14-pv3                                 3  1024     1     -b----       2.2

# xl console 3


엔터를 입력하여 다음 단계로...


other>Asia> ... 국가를 선택하고 엔터


default locale 선택하고 엔터


hostname 입력하고 엔터



* 이후부터는 일반적인 ubuntu OS 설치 과정과 거의 유사하므로 중간 과정 생략


모든 설치 과정이 완료되면 vm은 자동으로 reboot 된다


virt-manager 의 툴바에서 '가상머신 콘솔' 버튼을 클릭하면 새로운 vm에 접속할 수 있다. xl console 을 통해 text 방식으로도 접속 가능(새로이 만들어진 vm의 ip는 192.168.25.29 로 자동 할당 되어 있다)


Host 의 터미널에서 vm 쪽으로 ping test 를 수행해 본다. 네트워크가 정상 작동 됨을 볼 수 있다.


2. vm 복제(vm cloning)


* 새로운 vm이 설치되고 정상 작동하는 데에 수 십분 또는 그 이상의 시간이 소요되는데, 기존의 관리 대상인 vm을 복제해서 사용하면 몇 초만에 새로운 vm을 생성하여 사용할 수 있다.


복제할 대상이 되는 vm을 종료한 후, virt-manager에서 우클릭, 복제를 수행하면 된다


복제 될 vm의 이름을 지정하면 저장소도 해당 이름으로 자동 복제된다


스토리지의 크기에 따라 수 초~수 분 내로 새로운 vm이 만들어 진다


새롭게 복제된 vm이 나타났다. 이후의 테스트 과정은 생략한다.


* 참고: (설정 파일 위치 관련)

 - virt-manager, virt-install 같은 tool이 관리하는 기본 설정 파일은 /etc/libvirt 내에 위치한다

 - 사용자 고유의 virt-manager에 대한 각종 vm 관련 설정 사항은 $USER/.gconf/apps/virt-manager 내에 위치한다(본 예시에서는 /root/.gconf/apps/virt-manager 가 될 것이다)



- Barracuda -


저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


2015년 현재, Opensource Xen이나 Citrix XenServer+XenCenter, VMWare ESX+vSphere, Oracle VM Server 등의 많은 가상화 Solution들이 있다. 본 편에서는 현존 대다수 가상화 솔루션들의 근간이 되는, Opensource Xen을 활용한 가상화 실습 시에 가장 필수적으로 밟아 나가는 단계를 정리해 두려 한다. 염두에 두고 있는 것은 Ubuntu와 OpenSuse 를 각각 Host로 하고 Windows 7 과 CentOS Server 를 각각 Guest 로 하는 조합으로 대략 3~4가지의 시리즈를 써 나가는 것이다.


본 편에서는 그 첫 번째 Case로, Ubuntu 14.4 LTS 를 Host(Dom0)로 한 Xen 환경에서 Windows 7  VM을 사용하기 위한 방법과 과정을 정리해 나가고자 한다. 단, 가상화 솔루션이 "어떻게 작동하는지"의 이해에 도움이 되도록, 각 과정을 수동으로 직접 다루며, 최대한 GUI 관리 툴 등은 사용하지 않는 것이 본 포스팅들의 특별한 의도도 생각하면 되겠다.


전체적인 과정을 간단히 나열하면 다음과 같다.


* Ubuntu 14.4 LTS Desktop 설치 - Host OS 준비

* Host 를 Xen Dom0 로 사용할 수 있도록 하는 필수 과정들

* VM에 Guest OS(Windows 7) 을 설치하고 사용, 운영하는 방법과 과정



이제 각 단계 별로 실제 작업을 차근차근 수행해 보자.


1. Ubuntu 14.4 LTS 설치 - Host OS 준비


* 준비물: Ubuntu 14.4 LTS Desktop, 64 bit의 iso 파일을 내려 받아 구운 DVD-ROM(http://www.ubuntu.com/download/desktop 참조)


Windows계열이든 Linux 계열이든 OS를 설치하는 과정은 크게 다르지 않다. 설치 화면을 "잘 보고 따라 가면" 된다! 만약 주의 사항이 있다면 따로 Post-it 같은 메모지를 써서 기록해 두는 방법을 애용하자. 아마도 내 말이 피가 되고 살이 됨을 나중에 느끼게 될 지도 모를 일이다.


* OS 설치시 가상화 등의 추가 옵션은 따로 지정하지 않고,  Default 옵션만으로 진행한다.

* 본 글에서는 vm을 설치할 볼륨이 스파스(sparse) 파일이 될 것이므로, Host OS에 마운트 되는 볼륨의 경우 /(root) 볼륨은 20~100 GB 가량, /home 볼륨은 200GB~400GB 이상 여유 있게 잡는다. vm OS 가 설치된 볼륨 파일들을 /home 내에 하위 디렉토리를 만들고 체계적으로 관리하기 위함이다.

* 한글/영문 입력이 가능하도록 설정하고, 인터넷 접속이 가능하도록 네트워크 설정까지 완료한다.

* 추후에 linux guest vm으로 양방향 ssh 접속/운영이 가능하도록 다음과 같이 설정해 둔다

$ su -

# apt-get install ssh

# vi /etc/ssh/sshd_config -> 아래 항목을 찾아서 yes 로 변경한다.

  PermitRootLogin yes

# service ssh restart



2.Host 를 Xen Dom0 로 사용할 수 있도록 하는 필수 과정들


* 이번 단계에서는 Xen 관련 패키지 설치, VM 네트워킹을 위한 bridge 설정, 부팅 시 Xen kernel 이 로딩되도록 grub 설정 등의 작업을 수행한다.

* 과정을 단순하게 하기 위해 모든 패키지는 바이너리 형태로 설치된다. 즉 source 를 다운로드하여 빌드하는 방식으로 설정하는 경우에 꼭 써야 하는 apt-get build-dep, .configure, make && make install 등의 명령이나 스크립트의 실행 등은 사용하지 않아도 된다.


# apt-get install xen-hypervisor-4.4-amd64 xen-utils-4.4

# apt-get install qemu-kvm libvirt-bin libvirt-dev virt-manager virtinst vncviewer

# adduser $USER libvirtd


* Xen networking 에서 가장 중요한 부분. 여기서는 첫 번째 NIC(eth0)를 Xen 에서 사용할 bridge로 설정한다.

# vi /etc/network/interfaces -> 구조에 맞게 적당히 수정(dhcp 를 사용하지 않는 경우는 dhcp 대신 static 으로)

  iface eth0 inet manual
  auto xenbr0
  iface xenbr0 inet dhcp
      bridge_ports eth0

  ...


# vi /etc/xen/xend-config.sxp -> uncomment 처리

  (network-script network-bridge)

# vi /etc/default/xen -> xl 로 되어 있는지 확인(기본 툴스택이 xm 에서 보다 향상된 최근 xl 로 업그레이드 되어 있음)

  TOOLSTACK=xl


# vi /etc/default/grub

  GRUB_CMDLINE_LINUX=""  # dom0_mem=512 dom0_max_vcpus=1 dom0_vcpus_pin 와 같이 튜닝 가능

  GRUB_CMDLINE_LINUX_DEFAULT=""


# cd /etc/grub.d

# mv 10_linux 21_linux -> 부팅 순서에 20_linux_xen 이 먼저 배치되도록 변경

# sync

# reboot


* Host 의 네트웍이 정상 작동 하는지, 브리지 설정이 제대로 되어 있는지 점검한다.

# ping google.com

# brctl show

  bridge name    bridge id                    STP enabled    interfaces
  virbr0          8000.000000000000         yes       
  xenbr0        8000.d0505602a73d         no                   eth0


* 아래의 xl 실행 결과를 볼 수 있다면, 설정된 Xen 가상화 환경이 잘 작동하는 것으로 보고 다음 단계 수행

# xl info
host                   : Ubuntu-desktop
release                : 3.16.0-38-generic
version                : #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015
machine                : x86_64
nr_cpus                : 4
max_cpu_id             : 3
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 1
cpu_mhz                : 3399
hw_caps                : bfebfbff:2c100800:00000000:00007f00:77fafbff:00000000:00000021:00002fbb
virt_caps              : hvm hvm_directio
total_memory           : 12207
free_memory            : 8559
sharing_freed_memory   : 0
sharing_used_memory    : 0
outstanding_claims     : 0
free_cpus              : 0
xen_major              : 4
xen_minor              : 4
xen_extra              : .1
xen_version            : 4.4.1
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          :
xen_commandline        : placeholder
cc_compiler            : gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
cc_compile_by          : stefan.bader
cc_compile_domain      : canonical.com
cc_compile_date        : Wed May 20 12:19:20 UTC 2015
xend_config_format     : 4



3.VM에 Guest OS(Windows 7) 을 설치하고 사용, 운영하는 방법과 과정



* 준비물: Windows 7 이 설치 가능한 CD 또는 DVD의 iso 파일, /root/vmos_images/win7.iso 로 복사해 둔다.


* 이번 단계에서는 VM을 설치하기 위한 가상 볼륨(Sparse 파일)을 준비하고, 실제로 guest os인 Windows 7을 설치, Xen을 통해 구동하고 사용하는 방법을 기술한다.


# mkdir -p /home/vmimage/win7

# cd /home/vmimage/win7

# dd if=/dev/zero of=./win7.img bs=4k count=1 seek=8M -> 30GB 가량의 빈 파일 생성


* Windows 계열 OS 는 일반적으로 전가상화(Full virtualization, HVM) 방식을 쓴다

# vi win7.cfg

# WINDOWS 7 CONFIGURATIONS for Xen
#  - Installation: Ubuntu 14.4 LTS, Xen 4.4.1 guest

builder = 'hvm'
vcpus = 2
memory = 4096

#Disks
disk = [
    'file:/home/vmimage/win7/win7.img,ioemu:hda,w',
    'file:/root/vmos_images/win7.iso,ioemu:hdc:cdrom,r'
]

#Hostname
name = 'windows7-1'

# Networking
vif = ['type=ioemu,mac=00:16:3E:*:*:*,bridge=xenbr0']

# Behavior
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

on_xend_stop='shutdown'

# VNC
vnc=1           # Enable VNC
vncconsole=0  # Don’t start vncviewer after “create” the domain
vncunused=0   # Don’t automatically assign unused port based on domain id
vncdisplay=2    # VNC Port Number to be added to “5900”. e.g.:  vncdisplay=2  : port=5902
                               # So, invoke "vncviewer 127.0.0.1::5902 &" after "create" domU

# Boot: d(cdrom) - to install Windows into the image file or target volume
# After installation, change it as 'c' or 'cd'
boot='d'
#boot='cd'


# Mouse cursor sync in vncviewer

usb=1

usbdevice='tablet'


# Set video ram for HiRes

stdvga=1

videoram=16


* Xen에 의해 vm이 생성되고, 설정 파일(win7.cfg) 에서 지정된 가상볼륨 파일(win7.img)에 windows 7 이 설치되는 과정

# xl create win7.cfg

Parsing config from win7.cfg


# vncviewer 127.0.0.1::5902 &




# xl list

Name                   ID    Mem  VCPUs    State       Time(s)
Domain-0                0   3482      4         r-----     4430.5
windows7-1              14  4096     4         -b----       71.1



- Barracuda -

저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


Fedora에는 Xen kernel이 포함되어 있지 않다(FC13 기준). 따라서 Xen 관련 패키지들과 함께 Kernel을 Xenify 하고 여러가지 설정을 손봐주어야 한다(이 점은 OpenSUSE 11.3과 판이하게 다른 점이라 하겠다).


이번 포스팅은 http://wiki.xensource.com/xenwiki/Fedora13Xen4Tutorial 의 내용을 토대로 했지만 실제 그대로 따라 해 보면 안되는 경우가 더 많다. 몇 가지 빠진 사항도 있고 설치 환경이 달라서 벌어지는 문제일 듯하다.
사실, 이런 종류의 일들은 해 보면 별 것 아닌 것 같지만 과정 자체가 추리와 유추가 난무하는 수사극과 비슷하다는 생각을 하게 된다.
더구나, 이번 설치는 Lenovo thinkpad T60(Intel 945GM VGA) 노트북에 Xen4 환경을 설치하는 것이어서, 서로 다른 컴퓨팅 환경에서의 Xen 설정시에 참고해 볼만한 내용이 될 듯 하다.

Anyway, 아래에 T60 Fedora 14 + Xen 4.0.1을 위한 설치 과정 및 방법을 정리해 두기로 한다.

1. Fedora 설치

최대한 단순하게 기본 패키지만 설치하기 위해 Fedora Core 14 x86_64 live cd로 부팅한 다음 Install to Hdd 아이콘을 클릭하여 기본 설치를 수행한다.
/boot 파티션은 ext3 포맷으로 하고, 크기는 최소 2048 MB 가 권장된다.
설치시 ntp로 시간동기화를 설정했다면 아래 ntp 설정 과정은 Skip. 다시 말하지만 기본 패키지 외에는 설치하지 않아야만 나중에 귀찮은 일을 겪지 않게 된다. 필요 없어진 패키지들을 의존성 확인하면서 erase/delete/remove 해 본 사람은 왜 이런 얘기를 하는지 아실 것이다.

2. 준비 작업

네트워크를 시작시키고 자동 Start되게 설정한다
# chkconfig network on
# /etc/init.d/network start
# yum install screen vim wget tcpdump ntp ntpdate man smartmontools ethtool

설치시 ntp를 지정하지 않았다면
# chkconfig ntpd on
# chkconfig ntpdate on
# /etc/init.d/ntpdate start
# /etc/init.d/ntpd start

/boot/grub/grub.conf (또는 menu.lst) 를 편집
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_f13-lvroot
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=10          <= 0을 8 또는 10으로...
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu         <= #를 삽입해서 comment화
title Fedora (2.6.33.3-85.fc13.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.33.3-85.fc13.x86_64 ro root=/dev/mapper/vg_f13-lvroot rd_LVM_LV=vg_f13/lvroot rd_LVM_LV=vg_f13/lvswap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=fi rhgb quiet
        initrd /initramfs-2.6.33.3-85.fc13.x86_64.img

/etc/selinux/config 를 편집
보안 정책의 제한 때문에 설정에 문제가 생기지 않도록 selinux 기능을 꺼 둔다
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled           <= enforcing을 disabled로...
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
/etc/hosts 를 편집
Hostname에 항목이 없을 경우 귀찮은 메시지들이 뜨게 되므로 미리 조치
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   myhostname myhostname.localdomain
# yum install xorg-x11-xauth
# yum update
대략 110개 가량(120M 이상)의 패키지 다운로드와 설치가 진행될 것이다.


3. Xen build를 위한 패키지 설치 및 환경 설정

개발 환경의 기본 패키지 일괄 설치
# yum groupinstall "Development Libraries"
# yum groupinstall "Development Tools"

추가 패키지들 설치
# yum install transfig wget texi2html libaio-devel dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel bzip2-devel pciutils-libs pciutils-devel SDL-devel libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial glibc-devel.i686 libidn-devel

4. src.rpm 에서 Xen 4.0.1 binary rpm build 및 설치
# wget http://pasik.reaktio.net/fedora/xen-4.0.1-6.fc14.src.rpm
# rpm -i xen-4.0.1-6.fc14.src.rpm
Warning message가 몇 개 나오겠지만 무시하고 다음 단계로...

Binary RPM을 생성하기 위해 rpmbuild를 수행
# cd /root/rpmbuild/SPECS
# rpmbuild -bb xen.spec
결과로 아래의 결과가 나타난다
Wrote: /root/rpmbuild/RPMS/x86_64/xen-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-libs-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-runtime-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-hypervisor-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-doc-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-devel-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-licenses-4.0.1-6.fc14.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/xen-debuginfo-4.0.1-6.fc14.x86_64.rpm

생성된 rpm binary 들을 설치한다
# cd /root/rpmbuild/RPMS/x86_64/
# rpm -Uvh *4.0.1-6*.rpm

5. Xen kernel source 다운로드/빌드/설치 - Linux 2.6.32.x pvops Xen dom0 kernel

레퍼런스에 URL들이 몇 개 있지만 Fedora 12 버전 정도에 맞춰 져 있는 내용들이라 별반 도움이 되지 않는다. 여기서는 Source를 다운로드하고 직접 빌드해서 설치하는 과정을 진행한다.
# git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
# cd linux-2.6-xen
# git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x

Sample config 파일을 다운로드 하게 되는데, Debug 모드가 다수 설정되어 있으므로 make menuconfig를 통해 Debug 옵션들을 Disable하고, 각 옵션사항들을 잘 따라가면서 Xen virtualization 관련한 device, kernel등의 설정을 Enable해 주어야 한다. 본인이 사용한 sample config를 링크해 두도록 하겠다(환경이 다르므로 별로 도움은 되지 않겠지만...)

# wget -O .config http://pasik.reaktio.net/xen/pv_ops-dom0-debug/config-2.6.32.25-pvops-dom0-xen-stable-x86_64
# make menuconfig

* 주의: 802.1d Bridging support 항목 같은 경우는 반드시 <M> 으로 선택해야만 Bridging 기능이 modularize 된다. <*>와 같은 방식으로 선택해서 Build한다면 Kernel의 기능 일부로 embed 되어서 나중에 Bridging 기능을 대체하는 open vswitch 같은 서비스를 설치하지 못하는 경우도 만날 수 있게 되므로 주의한다.

변경된 설정을 저장하고 Exit 한 후에 아래와 같이 Kernel Build를 수행한다. 숫자 2는 CPU core 갯수를 의미한다.
# make clean
# make -j2 bzImage && make -j2 modules
성능에 따라 수 십분 내지 수 시간이 걸리는 작업이다. 몇 가지 Warning이 나오지만 Error가 아니므로 그닥 치명적이지는 아니리라 기대하면서 결과를 기다린다.

이제 커널모듈을 설치하고 Xen Kernel로 부팅을 준비한다.
# make modules_install
# depmod -a 2.6.32.25
# cp -a arch/x86/boot/bzImage /boot/vmlinuz-2.6.32.25-xen-Bryans
# cp -a System.map /boot/System.map-2.6.32.25-xen-Bryans
# cp -a .config /boot/config-2.6.32.25-xen-Bryans
# cd /boot
# dracut initramfs-2.6.32.25-xen-Bryans.img 2.6.32.25
(4개의 파일명은 각자 알아서 결정하되 grub.conf 편집시 정확히 입력!)
dracut은 Ramdisk filesystem을 생성해 주는 새로 개발된 유틸리티이다. 그전에는 OS에 따라 mkinitrd 같은 것들을 썼는데 이제 조금은 편해진 느낌이랄까...
몇 개의 Warning성 메시지들이 뜰 텐데 무시하고 넘어간다.

여기 까지 성공적으로 왔다면 이제 2/3 정도는 온 것이다. 아까 수정했던 /boot/grub/grub.conf 파일을 열어서 마지막에 5라인을 정확히 편집해서 저장하고 reboot를 진행한다.

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_bryansfedora1-LogVol00
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0                   <= 2로 하면 3번째인 Xen kernel로 자동 부트
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title Fedora (2.6.35.6-48.fc14.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.35.6-48.fc14.x86_64 ro root=/dev/mapper/vg_bryansfedora1-LogVol00 rd_LVM_LV=vg_bryansfedora1/LogVol00 rd_LVM_LV=vg_bryansfedora1/LogVol02 rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=ko rhgb quiet
	initrd /initramfs-2.6.35.6-48.fc14.x86_64.img
title Fedora (2.6.35.6-45.fc14.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.35.6-45.fc14.x86_64 ro root=/dev/mapper/vg_bryansfedora1-LogVol00 rd_LVM_LV=vg_bryansfedora1/LogVol00 rd_LVM_LV=vg_bryansfedora1/LogVol02 rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=ko rhgb quiet
	initrd /initramfs-2.6.35.6-45.fc14.x86_64.img

* 여기부터 =>
title Fedora Xen 4.0.1 (Kernel 2.6.32.25) pvops dom0
	root (hd0,0)
	kernel /xen.gz dom0_mem=768M loglvl=all guest_loglvl=all
	module /vmlinuz-2.6.32.25-xen-Bryans ro root=/dev/mapper/vg_bryansfedora1-LogVol00 vga=ask
	module /initramfs-2.6.32.25-xen-Bryans.img
잘 보면 첫 번째 타이틀부터 5라인을 복사해서 맨 뒤에 붙이고 편집하면 간단할 것이라는 생각이 들 것이다. kernel 라인에서 dom0_mem은 Host OS를 위해서 확보되어야 할 최소 메모리 이므로 시스템 여유에 따라 적절히 설정한다. module /vmlinuz 라인에서는 root 장치의 Path만 지정하고 나머지 볼륨들은 불필요. 라인 마지막에 vga=ask 와 같이 하지 않고 레퍼런스에 있는 nomodeset으로 지정할 경우, X window가 프레임 버퍼 device를 잡지 못하고 부팅시에 오류가 발생하는 상황을 관찰할 수도 있다.

정상적인 과정을 잘 밟았다면 다음과 같이 4개의 주요 Daemon 들이 enable 된 것을 확인할 수 있다.
# chkconfig --list | grep xen
xenconsoled     0:off   1:off   2:off   3:on    4:on    5:on    6:off
xend            0:off   1:off   2:off   3:on    4:on    5:on    6:off
xendomains      0:off   1:off   2:off   3:on    4:on    5:on    6:off
xenstored       0:off   1:off   2:off   3:on    4:on    5:on    6:off
이제 Xen kernel로 부팅을 시도한다.
# reboot

6. Xen 가상화 환경 마무리 작업

시스템 리스타트 후에 xm info 를 수행해 보면 Xen host의 설정 상태를 볼 수 있다. 
이제 가상화 환경에서 편리한 Utility를 설치하고 환경을 점검한다.
# yum install virt-manager libvirt virt-viewer qemu-system-x86.x86_64

설치된 Libvirt Daemon을 확인하고 기동한다.
# chkconfig --list libvirtd
libvirtd        0:off   1:off   2:off   3:on    4:on    5:on    6:off
# /etc/init.d/libvirtd start

Bridging 설정, DNS masquerading 동작 상태, iptable과 ipforwarding 설정 상태를 다음과 같이 확인한다.
# brctl show
# ps aux | grep -i dnsmasq
# ifconfig
# iptables -t nat -L -n -v

eth0를 bridge로 해서 VM들의 network을 브리징하려면 다음과 같이 설정을 변경하고 reboot 하면 된다.
# vi /etc/xen/xend-config.sxp
# ...
#(network-script network-bridge)
* Comment를 풀고 아래와 같이 수정
(network-script 'network-bridge bridge=br0')
# reboot
부팅 후 네트워크 장치 상태를 확인하면
# ifconfig
br0    Link encap:Ethernet  HWaddr 12:34:56:0E:3F:9E
          inet addr:192.168.0.19  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:891 (891.0 b)
이전에 eth0에 할당되었던 Host의 ip가 br0에 할당되어 있음을 확인할 수 있다.

* 이제 모든 설치와 설정 과정은 끝이 났고, VM image를 다운로드 받거나 ISO 파일 또는 DVD 등을 통해서 VM을 create해 볼 수 있을 것이다.

* 참고로, wiki.xen.org 의 Xen networking(bridged case) 개념을 설명한 이미지를 첨부하니, 잘 이해해 두도록 하자.




- Barracuda -




저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


Host(Dom0)
 - Lenovo thinkpad T60, Ram1.5g
 - OpenSUSE 11.3, Kernel 2.6.34.7-0.5 x86_64
 - Xen 4.0.1_01-84.1 x86_64
Guest
 - Windows XP SP2

1. Xen & libvirt upgrade

openSUSE 11.3에서 virtualization package를 설치하면 Xen 4.0.0이 설치된다.
우선 이를 4.0.1 최신 버전으로 upgrade를 진행한다.
Xen & Kernel rebuild로 진행하는 방법도 있겠으나 여기서는 rpm 설치를 통해서 진행하는 방법을 택한다.

* Reboot후 xen kernel이 아닌 일반 kernel로 시스템을 시작한다.
* wget으로 아래의 url내의 file들을 내려 받는다

http://download.opensuse.org/repositories/Virtualization/openSUSE_11.3/x86_64/

xen-libs-4.0.1_01-84.1.x86_64.rpm
xen-tools-4.0.1_01-84.1.x86_64.rpm
vm-install-0.4.27-49.1.x86_64.rpm
virt-manager-0.8.5-43.1.x86_64.rpm
qemu-0.12.4-8.1.x86_64.rpm
libvirt-0.8.5-74.4.x86_64.rpm
libvirt-client-0.8.5-74.4.x86_64.rpm
libvirt-devel-0.8.5-74.4.x86_64.rpm
libvirt-python-0.8.5-74.4.x86_64.rpm

zypper remove 로 xen, xen-tools, xen-libs, vm-install, virt-manager, qemu, libvirt-client, libvirt-devel, libvirt-python을 삭제

* 다운로드 받은 rpm들을 설치한다
* 패키지들의 Dependency를 잘 체크해서 설치하고 reboot, Xen kernel로 시스템 시작

2. VM 설치 준비

* Window XP SP2 iso image file 준비 (/home/vmimages/windows_iso/winxp.iso)
* 가상 Disk image와 config를 저장할 디렉토리 생성(/home/vmimages/windows_disk)

* 가상 Disk image를 위한 sparse file 생성(16GB)
dd if=/dev/zero of=/home/vmimages/windows_disk/winxp_disk0 bs=4k seek=4096k count=1

* HVM 용 config 작성

cd /home/vmimages/windows_disk/
vi winxp_hvm.cfg
----------------------------------------------------------------------
name = 'winxp'
kernel = '/usr/lib/xen/boot/hvmloader'
builder = 'hvm'
vcpus = 1
cpus = "1"
memory = 256
device_model = '/usr/lib/xen/bin/qemu-dm'
disk = [ 'tap:aio:/home/vmimages/windows_disk/winxp_disk0,ioemu:hda,w',
           'file:/home/vmimages/windows_iso/winxp.iso,hdc:cdrom,r' ]
vif = [ 'type=ioemu, bridge=br0' ]
boot = "dc"
vnc = 1
vncviewer = 1
sdl = 0
pae = 0
acpi = 1
apic = 1
----------------------------------------------------------------------

3. VM create

xm create winxp_hvm.cfg
TightVNC를 통해 VM에 접속하고 Window xp 설치를 진행(가상머신 관리자>가상머신 콘솔 접속)

* 메모리 여유가 작아서 tail -100f /var/log/xen/xend.log 에서 메모리 할당 오류가 날 경우에는
/boot/grub/menu.lst 의 xen kernel line에 "dom0_mem=1024" 를 추가하여 dom0를 위한  minimum 메모리를 확보해야 한다


저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들