[Xen] Xen VM 에서 공인아이피 할당하기

가상화/Xen 2010. 11. 16. 16:07 Posted by Relipmoc
찾아보니 엄청 쉬운거였지만 이 글을 쓰는 이유는 구글링을 해도 이것에 대해 잘 안나왔기 때문이다.
사실 이건 네트워크 개념을 조금만 알아도 되는거지만; 

일단 Virtual Machine configure 파일에서 vif 를 'type=ioemu, bridge=브릿지 네트워크 이름' 로 설정해 주면 된다. 예를들면, CentOS 기본패키지의 브릿지 네트워크 이름의 기본 값은 xenbr0 이니까 

vif = ['type=ioemu, bridge=xenbr0'] 

로 설정해 주고 저장한다.

그리고 나서 

# xm create <vm_name>

로 VM 을 올리고, VM 안에서 호스트에서 공인 아이피 받는 것처럼 설정해주면 된다. 
이건 OS 마다 설정방법이 틀리니 패스.

다 설정 했으면 네트워크 리셋..

OS 가 우분투일 경우에는, 
# service networking restart 
CentOS일 경우에는, 
# service network restart 
이다.. 이것도 OS 마다 틀린 것 같으니 구글링하기바란다. 

댓글을 달아 주세요

이 포스트를 쓰기 앞서, 이 내용은 http://wiki.xen.org/xenwiki/Xen4.0 에서 소개 된
Set up Ubuntu 10.04 Server PV DomU at Xen 4.0 Dom0 (pvops 2.6.32.12 kernel) Dom0 on top of Ubuntu 10.04 Server
를 번역한 것이며, 여분의 우분투 서버가 없어서 제가 직접 설치해 보지 못했다는 것을 알려드립니다.

apt-get install libcurl4-openssl-dev \
xserver-xorg-dev \
mercurial gitk \
build-essential \
libncurses5-dev \
uuid-dev gawk \
gettext texinfo bcc \
libncurses5-dev dpkg-dev debhelper \
iasl texinfo bridge-utils bison flex
apt-get build-dep xen-3.3

먼저 의존성에 걸리는 패키지 와 Xen에 관련된 모든 패키지를 받은 뒤
그리고 Xen 커널 을 git 으로 체크아웃 한다.

cd /usr/src
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


체크아웃이 다 되었으면 데비안 방식(?)으로 커널을 컴파일 한다.

make menuconfig # Enabled the dom0 support and the Xen backend as usual on Ubuntu 9.10, F12
make -j(x)number_of_kernels
make modules_install install
chmod g-s /usr/src -R
make deb-pkg
dpkg -i ../linux-image*2.6.32.12*.deb
depmod 2.6.32.12
update-initramfs -c -k 2.6.32.12

또는

aptitude install kernel-package fakeroot
export CONCURRENCY_LEVEL=(코어갯수) +1
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-xen kernel-image kernel-headers
update-initramfs -c -k 2.6.32.16

만약 첫번째 방법으로 했을 때에는
(커널 옵션) <M> Xen /dev/xen/evtchn device
(명령어) echo “xen-evtchn” >> /etc/modules

두번째는
(커널 옵션) <*> Xen /dev/xen/evtchn device
 
Xen 4.0 설치

hg clone http://xenbits.xensource.com/xen-4.0-testing.hg
cd xen-4.0-testing.hg
make xen
make tools
make install-xen
make install-tools PYTHON_PREFIX_ARG=

hg 로 Xen4.0 소스르 받은 뒤, 컴파일 + 설치해 준다

update-rc.d xend defaults 20 21
update-rc.d xendomains defaults 21 20


그리고 (우분투 에서) 서비스 데몬으로 인식(?)시켜 준다.

grub 메뉴 파일에 다음과 같은 텍스트를 넣은 뒤, 리붓 한다. 리붓시에 커널을 밑 이름과 같은 커널을 로딩한다.

menuentry "Xen 4 / Ubuntu 10.04 kernel 2.6.32.12" {
insmod ext2
set root='(hd1,5)'
multiboot (hd1,5)/boot/xen.gz dummy=dummy
module (hd1,5)/boot/vmlinuz-2.6.32.12 dummy=dummy nopat root=/dev/sdb5 ro console=tty0
module (hd1,5)/boot/initrd.img-2.6.32.12
}


그리고 VM 을 생성한 뒤, 즐겁게 놀면(?) 된다.

* libvirtd 를 이용한(?) Xen 설치 방법은 다음이 시간에..
* 번역오류, 문제점, 오타 등이 있을 경우에는 댓글로 알려주시기 바랍니다.

댓글을 달아 주세요

  1. Ray Ban outlet 2013.07.27 10:34  댓글주소  수정/삭제  댓글쓰기

    태양이 바다에 미광을 비추면,나는 너를 생각한다.

* 이 포스팅은 CentOS 패키지 설치를 기준으로 설명하는 글 입니다. 컴파일 설치는 약간 다를 수 도 있습니다.

나는 CentOS 패키지로 설치한 것이라, 컴파일 설치로 하면 좀 틀릴지도 모르곘지만,
CentOS 에서 패키지로 Xen 을 깔면 기본 아이피 대역이 192.168.122.* 이다. 이걸 너무 바꾸고 싶어서 안달이 났지만 결국 인터넷엔 문서가 하~나~도~ 없어서 이 포스팅을 쓰게 됬다.

뭐 솔직히 어떤 큰 프로젝트에서 하이퍼바이저를 바꾼다거나 뭐 그런게 아니라면 이걸로 큰일이 생긴다거나 그런건 없겠지만, 나 같은 경우에는 10.0.0.* 이 아니면 좀 꺼림칙 한 기분이 들어서 (이게 바로 안달이 난 이유다.-_-..) 여러가지 삽질을 해 보았다. 하지만 어느 파일을 바꿔야 되는지는 찾아 내었지만 어떻게 그걸 적용 하는지를 알아내지 못하고 포기했었는데, 알고보니 쉬운 곳에 숨어 있었다.

바로 virsh 를 사용하는 것이였다.

덧붙이자면, 내가 몰랐던 이유가 libvirtd 를 끄면 네트워크 변수로 올라가 있던 데이터가 기본 네트워크 설정 파일에 Overwrite 되서 리셋해도 적용이 안됬던 것이다 -_- libvirtd 를 끄고 수정하고 다시 올렸으면 되는걸 괜히 삽질;

일단 virsh 로 들어간다
# virsh

그리고 net-edit 로 기본 네트워크 파일을 수정한다.
# net-edit <Network Name>
이 때 net-list 명령어로 어떤 네트워크 이름인지 확인 한 후에 저기에 대입해 주면 된다.
CentOS 패키지로는 default 였던걸로 기억한다. (Xen 4.* 은 틀릴지도 모름)

그럼 대충

<network>
  <name>default</name>
  <uuid>12341234</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' forwardDelay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

이런게 보일것이다.

딱 봐도 이해갈거라 생각하지만.......................
ip 태그의 address 가 게이트웨이다. 그리고 netmask 는.. 알거라 믿고 (솔직히 설명하기 귀찮다고는 말 못한다.)
그 밑에 dhcp 의 range 가 각각의 VM 에 어느 아이피들을 할당 시킬거지 정하는 부분이다.

<network>
  <name>default</name>
  <uuid>12341234</uuid>
  <forward mode='nat'/>
  <bridge name=virbr0' stp='on' forwardDelay='0' />
  <ip address='10.0.0.1' netmask='255.255.255.0'>
  </ip>
</network>

난 이렇게 바꾸어 줬다. dhcp 부분을 날려버리고 게이트웨이와 netmask 부분만 바꾸어 주었다.

저기서 dhcp 를 활성화 시키고 싶으면
ip 태그 안에
    <dhcp>
      <range start=10.0.0.2' end='10.0.0.254' />
    </dhcp>

를 추가하면 될듯하다. 테스트를 안해봐서 잘은 모르겠..

다 수정 했으면 ^X 를 하든 :wq 를 하든지 해서 에디터를 빠져나온후,

# net-destroy default
# net-create /path/to/xml/default.xml

로 다시 시작해 주면 된다.
CentOS 패키지의 경우에는
# net-create /etc/libvirt/qemu/networks/default.xml
이다.

끝.

아, 그리고 VM 들 network 도 restart 도 해 주어야 한다. (당연한건가)
PS. libvirtd + qemu 를 쓰는 모든 하이퍼바이저 (몇 개 없겠지만) 에도 다 적용될지도 모르겠다. 안써봐서 잘..... 모르겠지만.

댓글을 달아 주세요

CentOS 에 Xen 설치 및 설정

가상화/Xen 2010. 7. 18. 00:32 Posted by Relipmoc
※ 이 문서는 /hosting/xen 에 작업한다는 가정 하에 작성된 문서입니다. 유의하시기 바립니다.

.. 먼저 Xen 을 설치하기 전에 OpenVZ 를 설치할려고 했지만 꼭 Windows 를 올릴필요가 있어서 할 수 없이 Xen 을 선택했다.
Xen 은 가상화 하이퍼바이저로서 적어도 VMWare(-_-)보다는 높은 효율을 뽑아낸다. 우분투에서는 실패했지만 CentOS 에서는 강력한(?) 패키지가 있어서 컴파일 한번 없이 간단하게 설치할 수 있었다.

# yum install kernel-xen xen xen-libs xen-devel libvirt
# reboot

이 두 명령어 하나로 충분하다 -_-

리붓후 다행히 커널패닉이 안났다면 바로 VM 을 만들어 준다.
Vm 을 만들기 전에 network 부분도 설정을 해야 하지만 다른 블로그나, 웹 문서에 자세히 설명이 되어 있기 때문에, 굳이 여기서 길게 설명할 필요가 없을것 같아서 넘어가도록 하겠다.

덧. 서버 말고 노트북에 깔았을때 GRUB 의 root device 설정문제로 한번 패닉이 난적이 있었다.
일단은 제일 쉬운 CentOS 를 올려보도록 하겠다.

# wget http://centos.mirror.cdnetworks.com/5.5/os/x86_64/images/xen/initrd.img -O /hosting/xen/boot/initrd.img
# wget http://centos.mirror.cdnetworks.com/5.5/os/x86_64/images/xen/vmlinuz -O /hosting/xen/boot/vmlinuz
이 두 파일을 받은 후 에,
# dd if=/dev/zero of=xen-test.disk bs=100M count=10
dd 명령어로(↑) 디스크를 만들어준 뒤, /etc/xen/xen-test 에 아래와 같은 내용을 작성한다.

kernel = "/hosting/xen/boot/vmlinuz"
ramdisk = "/hosting/xen/boot/initrd.img"
#bootloader = "/usr/bin/pygrub"
name = "test"
memory = "256"
disk = [ 'tap:aio:/hosting/xen/xen-test.disk,xvda,w']
vif = [ 'bridge=virbr0', ]
vcpus=1
on_crash = 'destroy'

대충 읽어도 아실거라 믿지만, 혹시 모르니 설명을 하도록 하겠다.
kernel : 커널 바이너리다.
ramdisk : ... kernel 과 ramdisk 는 설치할 때만 필요하고, 설치가 끝나면 주석처리 해줘야 하는 부분이다.
bootloader : 이 부분은 설치가 끝나면 주석을 풀고 kernel, ramdisk 를 주석처리 해준다. 정확히 뭔지는 모르겠지만 아마 vm 에 설치된 커널을 올리기위한 도구 같다. 일종의 GRUB 삘.
name : 이름.
memory : RAM.
disk : dd 명령어로 만든 디스크 파일을 넣어주면 된다
vif : 네트워크.
vcpus : CPU 코어 할당 개수
on_crash : 크래쉬가 낫을때 어떻게 처리해야 하는지 명시해 주는 부분이다. 이외에 on_reboot on_shutdown 등이 있다.

다 됬으면

# xm create xen-test

로 vm 을 생성하고 바로 콘솔에 들어가서 설치를 진행한다.

# xm console xen-test

설치가 완료되면, 위에도 써놨듯이 kernel, ramdisk 부분을 주석처리하고, bootloader 를 주석해제 하면된다.
그리고 다시

# xm create xen-test
로 Vm 을 생성하여, 삽질하시면 된다.

===============================

수고 하셨습니다.



댓글을 달아 주세요