Computers/Xen

Paravirtualized VM on Xen 4.4.0 with Debian wheezy

emzei 2014. 6. 4. 17:29

앞서 포스팅한   Xen 4.4 installation on Debian wheezy (임시. 지저분한 설명) 에 이어서

 paravirtualized vm 설치 (반가상화) 

설치와 관련한 에러는 맨 아래에 정리해두었습니다.


1. 우선 guest vm을 위한 image file  을 만듭니다 (11GB 파일)
(여기서는 guest1.img로 생성)

#dd if=/dev/zero of=guest1.img bs=1024K count=10240





2. 해당 이미지 파일의 파일시스템을 설정. ext4로 설정합니다.

 

# /sbin/mkfs.ext4  (image file 절대경로)







3. 해당 이미지 파일을 /mnt 디렉토리에 마운트합니다. /mnt가 없으면 만들어주시고 수행해주세요.

# mkdir /mnt/

# mount -o loop (이미지파일경로) /mnt/






4. 그리고 본 guest 운영체제에 맞는 파일을 구성할수 있도록 하는데 이때 debootstrap을 사용합니다.

일단 debootstrap이 설치되있지 않은 경우 설치합니다.


# apt-get install debootstrap




debootstrap이 설치되었다면 guest에 맞는 파일 구성을 해줍니다.

(저는 guest도 debian wheezy로 할 생각이어서 이렇게 했어요.)

# debootstrap --arch amd64 wheezy /mnt/






5. guest에 올릴 커널을 컴파일 하기 위해서 커널 소스코드 압축파일을 풀어줍니다.


# tar xvzf linux-3.14.3.tar.gz


(압축 푸는중...)




6. 압축 푼 디렉토리로 이동한 뒤, 일반적 커널 컴파일 수행... (커널 컴파일 관련 링크)


# cd linux-3.14.3

# make menuconfig


단, menuconfig에서 가상화 관련이 제대로 설정되어있는지 확인해주세요.



menuconfig 완료후 .config 내에 아래와 같은 설정이 되어있는지!



설정이 제대로 되었다면 다음 명렁어를 수행합니다.

# make








7. make를 하는동안, /mnt/에 mount된 guest 이미지를 수정합니다.


/mnt/etc/fstab 을 아래와 같이 수정합니다.

# vi /mnt/etc/fstab





필요에 따라서 /mnt/etc/hostname 도 수정합니다.

# vi /mnt/etc/hostname 





/mnt/etc/network/interfaces는 아래와 같이 수정합니다.

#vi /mnt/etc/network/interfaces






그리고 /mnt/etc/securetty를 열어서 hvc0를 추가합니다. 확인해보고 없는 경우에만 추가하면 됩니다.

# vi /mnt/etc/securetty








8, 그리고 아래와 같이 일련의 명령어를 입력해주세요.

# chroot /mnt

# mknod /dev/xvda1 b 202 1

# mknod /dev/hvc0 c 229 0

# chown root:disk /dev/xvda1

# exit









9. /mnt/etc/inittab 을 아래와 같이 수정합니다.


# vi  /mnt/etc/inittab


아래 캡쳐처럼 55-59 라인의 2~6 부분을 #으로 모두 주석처리합니다.

또한, hvc0:2345:respawn:/sbin/agetty -L 9600 hvc0 를 추가합니다.








10. 그리고 guest 내의 사용자를 추가합니다.


# chroot /mnt/

# adduser (username)

...

# exit









11. 아까 make를 수행하던 터미널로 돌아와서, make가 완료된 후 make modules_install을 수행합니다.

이 때, 모듈이 설치되는 곳을 /mnt로 하여 guest 이미지에게 설치될 수 있도록 합니다.


# make modules_install INSTALL_MOD_PATH=/mnt










12. 리눅스 소스코드 폴더내의 .config 파일을 /mnt/boot/config-(버전) 으로 복사합니다.

# cp .config /mnt/boot/config-(버전#)









13. 다시 /mnt로 root를 변경한 뒤, 우선 apt-get을 위한 sources.list를 수정합니다.

# chroot /mnt

# vi /etc/apt/sources.list


( kaist 나 daum 중에 아무거나 하시면되요 혹시나해서 두개함. )


sources.list를 수정 및 업데이트하여 적용합니다.


# apt-get update






update가 완료되었다면 이제 initramfs-tools를 설치합니다.


# apt-get install initramfs-tools





설치 완료 후, 다음과 같이 명령어를 수행합니다.

# mkinitramfs -o initrd.img-(버전#) (버전#)

# exit

warning message는 무시하셔도 좋습니다.





14. 어느정도 준비가 되었습니다. 폴더를 하나만들고 컴파일했던 이미지와 설정파일, 그리고 게스트 이미지를 함께 둡니다.

저는 최상위 디렉토리에 wheezy라는 폴더를 생성하였고, 해당 디렉토리에 파일을 모았습니다.

initrd.img를 옮긴 뒤 /mnt에 mount되었던 이미지를 umount하고 다 디렉토리로 모아모아~


# mkdir -p /wheezy

# mv /mnt/initrd.img-3.14.3 /wheezy/

# umount /mnt/


guest1.img는 초반에 만든 image 파일이고,

initrd.img-3.14.3은 guest1.img를 /mnt에 마운트 한 뒤 가져온 것이고

vmlinux는 리눅스 소스코드에서 make 후, 리눅스 소스코드 디렉토리에서 가져온 것입니다.


(참고) # cp (LinuxSourceDIR)/vmlinux / /wheezy/








15. 이제 pvm을 띄우기 위한 설정파일을 만듭니다. 편하게 하려고 예시파일을 복사하여 사용합니다.


# cd /etc/xen

# cp xlexample.pvlinux wheezy.cfg

# vi wheezy.cfg



guest name은 원하는대로 바꿔주시고

kernel 항목 : vmliux 파일 경로

ramdisk 항목 : initrd.img 파일 경로

extra와 root 항목은 캡쳐와 똑같이 입력하시면 됩니다.


memory 는 vm에 할당되는 RAM입니다.

vcpus 는 가상 cpu 할당입니다. 최대 cpus 코어 만큼 할당가능합니다. (vcpu로 하면 안되고 vcpus로 해야 제대로 설정됩니다)

vif 는 네트워크 인터페이스 설정인데, 앞서 xen 설치에서 브릿지를 virbr0로 하여서 동일하게 입력합니다.

disk에는 guest image 파일 경로








16. 이제 실행하면 됩니다.


# xl create -c wheezy.cfg



다른 터미널에서 xl list 로 guest가 동작중임을 알 수 있습니다.

# xl list









-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------



★ failed to free memory for the domain

위와 같은 에러가 뜨는 경우는 RAM 남은 공간이 부족할 때 발생합니다.

guest가 하나도 없는데 본 에러가 뜨는 것은 dom0에 많은 메모리가 할당된 경우인데요, 

이때 dom0의 ram크기를 강제로 변경할 수 도 있습니다.


// xl mem-set (dom-id) (memsize)

# xl mem-set 0 2048



또는 게스트의 설정파일 (위에서는 wheezy.cfg)의 memory 크기를 줄여서 해도 됩니다.








★ auto ballooning 설정


# vi /etc/xen/xl.conf 









★ root@deblan:/etc/xenit xl create -c wheezy.cfg 

Parsing config from wheezy.cfg 

xc: error: panic: xc_dom_core.c:185: failed to open flle: No such flle or directory: Internal error

libxl: error: libxl_dob.c:370:libxl bulld_pv: xc_dom_kernel_flle failed: No such file or directory 

libxl: error: libxl_create.c:1022:domcreate_rebulld_done: cannot (re-)bulid domain: -3 


이러한 경우는 해당 cfg 파일에 잘못된 설정이 있는 경우입니다.

파일명이나 경로 제대로 확인해주세요.







★rootodebian:/etc/xens xl create -c wheezy.cfg 

Parsing config from wheezy.cfg 

libxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: /etc/xen/scripts/v If-bridge online [-1] exited with error status 1 

libxl: error: libxl_device.c:1084:device_hotplug_child_death_cb: script: Could not find bridge device xenbr0 

libxl: error: libxl_create.c:1226:domcreate_attach_vtpms: unable to add nic devices 

libxl: error: libxl_exec.c:118:libxl_repart_childexitstatus: /etc/xen/scripts/vif-bridge offline [-1] exited with error status 1 

libxl: error: libxl_device.c:1084:device_hotplug_child_death_cb: script: Could not find bridge device xenbr0




bridge 설정이 xenbr0로 되어서 발생한 에러.

xl.conf를 수정하여 virbr0로 변경








★ apt-get install 하려는데 네트워크가 안되는 경우

네트워크 static하게 설정해주세요.