Openstack Mitaka 최종본(v6) 설치 및 설정 종합본



본 편의 도입 및 준비 부분은, 위의 지난 2016년 9월에 #1 편에서 다뤘던 Mitaka v5 버전 내용을 그 근간으로 한다. Mitaka v5 는 지난 2016년 6월에 출시된 이후 거의 몇 일 ~ 몇 주 단위로 활발하게 수정 변경되어 11월 9일에 최종 버전인 v6 가 릴리즈되어 있다. 참고로 CentOS 계열(Redhat, CentOS, Fedora)을 위한 디플로이 도구인 Packstack 의 Mitaka 를 위한 버전은 다음 그림에서 보다시피 v5, v6 만 존재하고 있다.



지난 9월의 계획에서는 2016년 10월 릴리즈 예정이었던 Newton 버전을 설치하고 검증하는 과정을 다루려고 했으나, 릴리즈 직후에 한 번 시험삼아 설치해 보니 지나치게 불안정한 면이 커서, 현 시점의 안정적인 Mitaka 최종 버전을 따로 정리해 두는 편이 나을 듯 하여 급하게 본 포스팅을 구성해 보려 한다.


  • 설치 준비 과정 이후의 상세 내용


전 편의 1~5 섹션까지 내용은 그대로 사용하는 것으로 하고, 이후의 섹션 6부터 전 편의 보충 형식으로 써내려 간다. 결론적으로는, 오픈스택 Mitaka 버전을 설치, 설정하기 위해서는 지난 #1편(1~5섹션)과 본 #2편(6섹션 이후)를 연이어서 참고하면 되지 않을까 하는 생각이다.



6. 오픈스택 설치를 위한 각 노드들의 패키지 설정


  • 각 노드의 리포지토리를 변경하고 필수 패키지 설정


이미 위에서 언급했다시피, 다수의 의존성 패키지를 따로 설치하지 않고 yum update -y 를 통해 최신 패키지 업데이트를 진행한 다음 Openstack v6 를 따로 다운로드 설치하는 과정을 아래에 써내려 간다. 역시 Mitaka의 최종 버전이니만큼 비교적 안정적이고 오류 없이 잘 진행됨을 확인하였다(9월버전 v5에서 오류가 발생하였던 lbaas 포함 설치도 v6에서는 오류 없이 잘 진행됨).


# yum update -y

# yum install -y net-tools

# yum install -y wget


  • 각 노드의 /etc/hosts 파일에 다음의 3개 라인을 추가

10.10.10.6 openstack-ctrl

10.10.10.7 openstack-net

10.10.10.8 openstack-cmp1


  • 마찬가지로 각 3개 노드에서 보안 등 각종 관리패키지를 오픈스택 설치가 가능해 지도록 구성

# systemctl disable firewalld

# systemctl stop firewalld

# systemctl disable NetworkManager

# systemctl stop NetworkManager

# yum remove -y NetworkManager

# systemctl enable network

# systemctl start network



7. Packstack 으로 Openstack 자동 설치하기

Packstack은 Controller 노드에서 answer 파일을 읽어 들여서 자신을 포함하여 하위 노드(Network 노드, Compute 노드들)에서 각종 소프트웨어들을 설치/설정하는 스크립트를 단계적으로 실행해 주는 역할을 한다(Redhat 제공 RDO 프로젝트 참고: www.rdoproject.org). 이를 위해 각 하위 노드에 암호 없이 접속이 가능해야 한다. 


  • Controller 노드에서 각 노드로 Passwordless ssh 설정

[root@openstack-ctrl ~]# ssh-keygen 

[root@openstack-ctrl ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.7

[root@openstack-ctrl ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.8


#--> 암호 없이 정상적으로 접속되는지 확인

[root@openstack-ctrl ~]# ssh openstack-net

[root@openstack-ctrl ~]# ssh openstack-cmp1


  • Packstack repo 설정 및 설치 시작
이전에 진행했던 방식으로 다음과 같이 rdo-release.rpm 을 다운로드하고 설치하면, 현재 시점의 가장 최근 버전인 newton 버전이 설치되어 버리므로,

[root@openstack-ctrl ~]# yum install -y https://www.rdoproject.org/repos/rdo-release.rpm

[root@openstack-ctrl ~]# yum install -y openstack-packstack

...


특정 버전의 Openstack을 명시적으로 다운로드 & 설치하기 위해서는 https://repos.fedorapeople.org/repos/openstack/ 에서 해당 버전을 찾아서 설치하는 과정을 밟아 가면 된다. 여기서는 생성된 answer.txt 파일 항목 중 특별히 편집 수정해야 하는 부분을 표시하여 간략한 설명을 달아 두도록 한다.

[root@openstack-ctrl ~]# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-mitaka/rdo-release-mitaka-6.noarch.rpm

[root@openstack-ctrl ~]# yum update -y

[root@openstack-ctrl ~]# yum install -y openstack-packstack

[root@openstack-ctrl ~]# su - stack

[stack@openstack-ctrl ~]# sudo packstack --gen-answer-file=answer.txt

[stack@openstack-ctrl ~]# sudo vi answer.txt

[general]

...

# 개별 항목에 자동 적용 되는 공통 암호

CONFIG_DEFAULT_PASSWORD=openstack


# 여기서는 사용하지 않음

CONFIG_MANILA_INSTALL=n


# 여기서는 사용하지 않음

CONFIG_SWIFT_INSTALL=n


# 미터링 패키지 설치

CONFIG_CEILOMETER_INSTALL=y


# 여기서는 사용하지 않음

CONFIG_AODH_INSTALL=n


# 여기서는 사용하지 않음

CONFIG_GNOCCHI_INSTALL=n


# 여기서는 사용하지 않음

CONFIG_SAHARA_INSTALL=n


# 오케스트레이션을 위한 패키지 설치

CONFIG_HEAT_INSTALL=y


# 여기서는 사용하지 않음

CONFIG_IRONIC_INSTALL=n


# ntp 시간동기화는 수동 설치 및 설정

CONFIG_NTP_SERVERS=


# 여기서는 사용하지 않음

CONFIG_NAGIOS_INSTALL=n


# API 서비스 패키지 등이 설치되는 Controller 노드

CONFIG_CONTROLLER_HOST=10.10.10.6


# Compute 서비스 패키지들이 설치되는 노드

CONFIG_COMPUTE_HOSTS=10.10.10.8


# Compute networking (nova network) 또는 OpenStack Networking (neutron) 이 설치 되는 Network 노드

CONFIG_NETWORK_HOSTS=10.10.10.7


# AMQP 서비스 설치 노드(여기서는 Controller 노드)

CONFIG_AMQP_HOST=10.10.10.6


# 기본 DB인 MariaDB 설치 노드(여기서는 Controller 노드)

CONFIG_MARIADB_HOST=10.10.10.6


# MariaDB 관리자 계정 암호

CONFIG_MARIADB_PW=openstack


# Keystone DB 암호

CONFIG_KEYSTONE_DB_PW=openstack


# Identity 서비스 admin 계정 암호

CONFIG_KEYSTONE_ADMIN_PW=openstack


# Identity service demo 계정 암호

CONFIG_KEYSTONE_DEMO_PW=openstack


# Glance DB 암호

CONFIG_GLANCE_DB_PW=openstack


# Glance Identity service 암호

CONFIG_GLANCE_KS_PW=openstack


# Nova DB 암호

CONFIG_NOVA_DB_PW=openstack


# Nova Identity service 암호

CONFIG_NOVA_KS_PW=openstack


# Neutron Identity service 암호

CONFIG_NEUTRON_KS_PW=openstack


# Neutron DB 암호

CONFIG_NEUTRON_DB_PW=openstack


# Neutron L3 의 External OVS bridge 지정(비워 두면 default로 linuxbridge)

CONFIG_NEUTRON_L3_EXT_BRIDGE=br-ex


# OpenStack Networking metadata agent 암호.

CONFIG_NEUTRON_METADATA_PW=openstack


# OpenStack Networking's Load-Balancing-as-a-Service (LBaaS) 설치 여부

CONFIG_LBAAS_INSTALL=y


# OpenStack Networking's L3 Metering agent 설치 여부

CONFIG_NEUTRON_METERING_AGENT_INSTALL=y


# neutron.ml2.type_drivers 로 사용할 드라이버 지정. comma 로 구분 ['local','flat', 'vlan', 'gre', 'vxlan']

CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan


# Tenant network로 사용할 network type을 순서대로 지정. comma 로 구분 ['local', 'vlan', 'gre', 'vxlan']

CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan


# neutron.ml2.mechanism_drivers 로 로딩할 메커니즘 드라이버 지정. comma 로 구분

# ['logger', 'test', 'linuxbridge', 'openvswitch', 'hyperv', 'ncs', 'arista', 'cisco_nexus', 'mlnx', 'l2population', 'sriovnicswitch']

CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch


# OpenStack Networking으로 사용할 L2 agent 지정 ['linuxbridge', 'openvswitch']

CONFIG_NEUTRON_L2_AGENT=openvswitch


# HEAT DB 암호

CONFIG_HEAT_DB_PW=openstack


# HEAT Identity service 암호

CONFIG_HEAT_KS_PW=openstack


# HEAT Identity domain 관리자 암호

CONFIG_HEAT_DOMAIN_PASSWORD=openstack


# Provisioning 테스트를 위한 demo 설치 여부

CONFIG_PROVISION_DEMO=y


# Ceilometer Identity service 암호

CONFIG_CEILOMETER_KS_PW=openstack


# MongoDB 설치 서버(여기서는 Controller 노드)

CONFIG_MONGODB_HOST=10.10.10.6


# Redis master server

CONFIG_REDIS_MASTER_HOST=10.10.10.6


[stack@openstack-ctrl ~]# sudo packstack --answer-file=answer.txt

Welcome to the Packstack setup utility


The installation log file is available at: /var/tmp/packstack/20161209-052810-KZtyhp/openstack-setup.log


Installing:

Clean Up                                             [ DONE ]

Discovering ip protocol version                      [ DONE ]

root@10.10.10.6's password: 

Setting up ssh keys                                  [ DONE ]

Preparing servers                                    [ DONE ]

Pre installing Puppet and discovering hosts' details [ DONE ]

Adding pre install manifest entries                  [ DONE ]

Setting up CACERT                                    [ DONE ]

Adding AMQP manifest entries                         [ DONE ]

Adding MariaDB manifest entries                      [ DONE ]

Adding Apache manifest entries                       [ DONE ]

Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]

Adding Keystone manifest entries                     [ DONE ]

Adding Glance Keystone manifest entries              [ DONE ]

Adding Glance manifest entries                       [ DONE ]

Adding Nova API manifest entries                     [ DONE ]

Adding Nova Keystone manifest entries                [ DONE ]

Adding Nova Cert manifest entries                    [ DONE ]

Adding Nova Conductor manifest entries               [ DONE ]

Creating ssh keys for Nova migration                 [ DONE ]

Gathering ssh host keys for Nova migration           [ DONE ]

Adding Nova Compute manifest entries                 [ DONE ]

Adding Nova Scheduler manifest entries               [ DONE ]

Adding Nova VNC Proxy manifest entries               [ DONE ]

Adding OpenStack Network-related Nova manifest entries[ DONE ]

Adding Nova Common manifest entries                  [ DONE ]

Adding Neutron VPNaaS Agent manifest entries         [ DONE ]

Adding Neutron FWaaS Agent manifest entries          [ DONE ]

Adding Neutron LBaaS Agent manifest entries          [ DONE ]

Adding Neutron API manifest entries                  [ DONE ]

Adding Neutron Keystone manifest entries             [ DONE ]

Adding Neutron L3 manifest entries                   [ DONE ]

Adding Neutron L2 Agent manifest entries             [ DONE ]

Adding Neutron DHCP Agent manifest entries           [ DONE ]

Adding Neutron Metering Agent manifest entries       [ DONE ]

Adding Neutron Metadata Agent manifest entries       [ DONE ]

Adding Neutron SR-IOV Switch Agent manifest entries  [ DONE ]

Checking if NetworkManager is enabled and running    [ DONE ]

Adding OpenStack Client manifest entries             [ DONE ]

Adding Horizon manifest entries                      [ DONE ]

Adding Heat manifest entries                         [ DONE ]

Adding Provisioning manifest entries                 [ DONE ]

Adding Provisioning Glance manifest entries          [ DONE ]

Adding Provisioning Demo bridge manifest entries     [ DONE ]

Adding MongoDB manifest entries                      [ DONE ]

Adding Redis manifest entries                        [ DONE ]

Adding Ceilometer manifest entries                   [ DONE ]

Adding Ceilometer Keystone manifest entries          [ DONE ]

Copying Puppet modules and manifests                 [ DONE ]

Applying 10.10.10.8_prescript.pp

Applying 10.10.10.7_prescript.pp

Applying 10.10.10.6_prescript.pp

10.10.10.7_prescript.pp:                             [ DONE ]      

10.10.10.8_prescript.pp:                             [ DONE ]      

10.10.10.6_prescript.pp:                             [ DONE ]      

Applying 10.10.10.6_amqp.pp

Applying 10.10.10.6_mariadb.pp

10.10.10.6_amqp.pp:                                  [ DONE ]    

10.10.10.6_mariadb.pp:                               [ DONE ]    

Applying 10.10.10.6_apache.pp

10.10.10.6_apache.pp:                                [ DONE ]   

Applying 10.10.10.6_keystone.pp

Applying 10.10.10.6_glance.pp

10.10.10.6_keystone.pp:                              [ DONE ]     

10.10.10.6_glance.pp:                                [ DONE ]     

Applying 10.10.10.6_api_nova.pp

10.10.10.6_api_nova.pp:                              [ DONE ]     

Applying 10.10.10.6_nova.pp

Applying 10.10.10.8_nova.pp

Applying 10.10.10.7_neutron.pp

10.10.10.6_nova.pp:                                  [ DONE ]    

10.10.10.7_neutron.pp:                               [ DONE ]    

10.10.10.8_nova.pp:                                  [ DONE ]    

Applying 10.10.10.8_neutron.pp

Applying 10.10.10.6_neutron.pp

10.10.10.8_neutron.pp:                               [ DONE ]    

10.10.10.6_neutron.pp:                               [ DONE ]    

Applying 10.10.10.6_osclient.pp

Applying 10.10.10.6_horizon.pp

10.10.10.6_osclient.pp:                              [ DONE ]     

10.10.10.6_horizon.pp:                               [ DONE ]     

Applying 10.10.10.6_heat.pp

10.10.10.6_heat.pp:                                  [ DONE ] 

Applying 10.10.10.6_provision.pp

Applying 10.10.10.6_provision_glance

10.10.10.6_provision.pp:                             [ DONE ]          

10.10.10.6_provision_glance:                         [ DONE ]          

Applying 10.10.10.7_provision_bridge.pp

10.10.10.7_provision_bridge.pp:                      [ DONE ]             

Applying 10.10.10.6_mongodb.pp

Applying 10.10.10.6_redis.pp

10.10.10.6_mongodb.pp:                               [ DONE ]    

10.10.10.6_redis.pp:                                 [ DONE ]    

Applying 10.10.10.6_ceilometer.pp

10.10.10.6_ceilometer.pp:                            [ DONE ]       

Applying Puppet manifests                            [ DONE ]

Finalizing                                           [ DONE ]


 **** Installation completed successfully ******


Additional information:

 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.

 * File /root/keystonerc_admin has been created on OpenStack client host 10.10.10.6. To use the command line tools you need to source the file.

 * To access the OpenStack Dashboard browse to http://10.10.10.6/dashboard .

Please, find your login credentials stored in the keystonerc_admin in your home directory.

 * Because of the kernel update the host 10.10.10.8 requires reboot.

 * Because of the kernel update the host 10.10.10.7 requires reboot.

 * Because of the kernel update the host 10.10.10.6 requires reboot.

 * The installation log file is available at: /var/tmp/packstack/20161209-052810-KZtyhp/openstack-setup.log

 * The generated manifests are available at: /var/tmp/packstack/20161209-052810-KZtyhp/manifests



8. Network 노드 - Neutron 네트워크(OVS bridge) 인터페이스 설정 확인


#1 편에서 수동으로 설정해 주어야 했던 Network 노드의 외부 bridge 인터페이스(br-ex)와 enp0s9 의 브리지 포트 연결이, Mitaka v6에서는 자동으로 이루어짐을 볼 수 있다. 다음의 결과를 확인해 보자 


  • Network 노드 브리지 인터페이스 설정 확인

[root@openstack-net ~]# ifconfig

br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.7  netmask 255.255.255.0  broadcast 192.168.0.255

        inet6 fe80::8464:32ff:fe27:304f  prefixlen 64  scopeid 0x20<link>

        ether 08:00:27:bd:a3:bd  txqueuelen 0  (Ethernet)

        RX packets 138  bytes 21542 (21.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 59  bytes 6843 (6.6 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet6 fe80::a00:27ff:febd:a3bd  prefixlen 64  scopeid 0x20<link>

        ether 08:00:27:bd:a3:bd  txqueuelen 1000  (Ethernet)

        RX packets 412  bytes 84303 (82.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 71  bytes 9555 (9.3 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


...



이제 ifcfg-br-ex, ifcfg-enp0s9 인터페이스도 확인해 보자

[root@openstack-net ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex

DEVICE=br-ex

DEVICETYPE=ovs

TYPE=OVSBridge

BOOTPROTO=static

IPADDR=192.168.0.7

NETMASK=255.255.255.0

BROADCAST=192.168.0.255

GATEWAY=192.168.0.1

DEFROUTE=yes

ONBOOT=yes

NM_CONTROLLED=no

IPV4_FAILURE_FATAL=yes

IPV6INIT=no


[root@openstack-net ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9

DEVICE=enp0s9

DEVICETYPE=ovs

TYPE=OVSPort

OVS_BRIDGE=br-ex

ONBOOT=yes

NM_CONTROLLED=no

IPV6INIT=no



[root@openstack-net ~]# ovs-vsctl show

fd89eff3-c539-4250-8922-854f550124bc

    Bridge br-ex

        Port br-ex

            Interface br-ex

                type: internal

        Port "qg-05c23c0b-11"

            Interface "qg-05c23c0b-11"

                type: internal

        Port "enp0s9"

            Interface "enp0s9"

    Bridge br-int

        fail_mode: secure

        Port patch-tun

            Interface patch-tun

                type: patch

                options: {peer=patch-int}

        Port "qr-02fc6bc6-04"

            tag: 1

            Interface "qr-02fc6bc6-04"

                type: internal

        Port br-int

            Interface br-int

                type: internal

        Port "tap44e6cf82-31"

            tag: 1

            Interface "tap44e6cf82-31"

                type: internal

    Bridge br-tun

        fail_mode: secure

        Port "vxlan-0a0a0a08"

            Interface "vxlan-0a0a0a08"

                type: vxlan

                options: {df_default="true", in_key=flow, local_ip="10.10.10.7", out_key=flow, remote_ip="10.10.10.8"}

        Port patch-int

            Interface patch-int

                type: patch

                options: {peer=patch-tun}

        Port br-tun

            Interface br-tun

                type: internal

    ovs_version: "2.5.0"

Open vSwitch 의 브리지 인터페이스를 조회해 보면, br-ex 브리지에 br-ex 포트와 enp0s9 포트가 연결되어 있음을 볼 수 있다.



Controller 노드의 환경변수 설정 스크립트 복사


  • Network 노드, Compute 노드에서 CLI 명령 실행이 필요할 경우에 대비하여 스크립트 복사


Controller 노드의 keystonerc 관련 파일들을 다음과 같이 Network 노드, Compute 노드에 복사해 둔다


[root@openstack-ctrl ~]# scp keystonerc_* root@openstack-net:~

[root@openstack-ctrl ~]# scp keystonerc_* root@openstack-cmp1:~



9. Horizon 웹을 통해 Cloud 플랫폼 사용 준비 과정


  • Horizon 웹 UI 사용 준비 - 클라우드 네트워크 설정


시스템 구성도의 Admin VM에 해당하는 VM에서, firefox 웹브라우저를 통해 http://10.10.10.6으로 접속, admin 계정과 answer.txt 에서 지정한 암호를 통해 로그인


tenant 서비스를 위해서 demo 프로젝트를 사용한다고 가정했을 때,  해당 프로젝트에서 사용할 네트워크를 생성, 설정하는 과정을 다음과 같이 진행한다.


System->Routers 페인, 라우터 목록에서 router1 삭제 


System->Networks 페인, 사용하지 않는 네트워크(public_subnet) 을 삭제



networks 패널에서, '+Create Network' 을 선택하고 admin 프로젝트에 대해 public 네트워크를 새로이 생성(본 케이스에서는 vxlan 방식, shared - External network).



Subnet Detail 에서는, 네트워크 내부에 DHCP 서버(iptime 공유기)가 존재하므로, Enable DHCP 는 해제하고, 할당 가능한 IP 범위를 입력


admin 계정을 로그아웃하고, tenant 서비스를 설정/사용하기 위한 demo 계정으로 로그인


앞에서 admin 을 통해 생성, 설정한 네트워크를 사용하기 위해, 왼쪽 메뉴에서 Project->Network->Router 패널을 선택하고 '+Create Router' 을 클릭하여 demo 프로젝트에서 사용할 라우터를 생성. External Network 항목에 대해, 앞서 생성했던 public 네트워크를 선택





'+Add Interface' 클릭을 통해, 앞서 생성한 사설 네트워크와의 연결을 위한 인터페이스를 추가



좌측 메뉴의 Network 패널에서 Network Topology 를 선택하여 현재 구성된 네트워크의 구조를 확인한다. 여기까지 성공적으로 진행하였다면 클라우드 환경을 본격적으로 사용하기 위한 전체 설정 과정은 완료한 것이며, 다음의 필수 준비과정 몇 가지를 거치면 모든 준비가 끝나고 VM을 생성, 관리할 수 있는 요건을 갖추게 되었다.


11. VM 인스턴스 생성 관리를 위한 준비 & 실행 단계


  • security Group 생성 확인

 Compute->Access & Security->Security Group


시스템에 디폴트로 적용되는 Security Group 이 이미 생성되어 있다. 필요시 별도로 생성하여 사용하면 됨.


  • Key Pair 생성



Compute->Access & Security->Key Pairs->Create Key Pair, pem 파일 다운로드 및 보관



  • Floating IP 생성



Floating IP를 할당 필요한 갯수만큼 할당 받는다



  • VM Image 확인


Openstack 에 포함된 테스트용 초소형 OS image(12MB) 외에도, Ubuntu Cloud image 사이트나 CentOS cloud image 사이트 등에서 다운로드 받아 두고, Openstack image로 업로드(admin 계정으로)해서 사용할 수 있다


  • VM instance 생성








  • Ubuntu VM instance 생성하고 접속하기

별도의 전용 Security Group 을 생성해 둔다


Ubuntu VM을 만들기 위한 Flavor 템플릿을 생성해 둔다(admin 계정)








새로이 Ubuntu VM Instance 를 생성하고, 앞에서 할당해 두었던 Floating IP 들 중에서 하나를 선택하여 Associate 를 클릭하면 VM의 내부 사설 port(10.0.0.*) 과 Floating IP가 연결된다



Ubuntu VM 에 연결된 Floating IP 로 ping 테스트와 ssh 접속을 수행해 본다



12. LBaas(LB As A Service) 의 설정과 테스트


  • Haproxy Load Balancer 사용을 위한 준비

새로운 VM과 LB에 할당할 Floating IP 를 추가한다


LB pool 에 할당할 새로운 Ubuntu VM 을 생성해 둔다




LB pool 에 포함될 VM 들에 접속하여 nginx 패키지를 설치한다(외부 접속을 위해 /etc/resolv.conf 에 nameserver 를 추가하고, apt-get update 를 한 이후, apt-get install nginx 로 패키지 설치). 설치 이후 curl http://localhost 로 자체 접속 테스트.


각 VM의 웹서버에 80 port 로 접속이 가능하도록, 기존의 Security Group에 새로운 Rule 을 추가한다


VM들의 웹서버에 접속이 가능한지 웹브라우저를 통해 각각 접속해 본다



Network->Load Balancer, +Add Pool 클릭 및 저장 후,


Add VIP 선택


IP address에는 VM의 사설 IP 대역에 해당하는 IP를 입력. Connection Limit 는 -1 또는 제한되는 연결 갯수 입력 & 저장


Associate Floating IP 선택.


미리 준비한 Floating IP를 선택하고 Associate 클릭 & 저장


Members 탭 선택, +Add Member 클릭


Add Member 클릭. Pool 선택 & 대상 VM, port 번호 등 설정



웹브라우저에서 LB VIP로 접속하여 확인 완료



- Barracuda -


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

Barracuda

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


1. 오픈스택이란?

Openstack은 소규모부터 중대규모를 아우르는 IAAS(Infra As A Service)를 가능하게 하는 오픈소스 클라우드 플랫폼 솔루션입니다. 2010년, Rackspace사의 클라우드 파일 플랫폼과 NASA의 Nebula를 기반으로 통합, 협력하는 방식으로 진행되기 시작한 이 프로젝트의 첫 코드명은 Austin(2010). 이후 Diablo(2011), Essex(2012), Havana(2013), Icehouse, Juno(2014), Kilo(2015), Liverty, Mitaka(2016) 를 거져 2016년 10월에 Newton 버전이 출시될 예정으로 개발이 진행되고 있지요.


Python 언어를 기반으로 만들어진 이 클라우드 플랫폼은 Apache License 2.0 이 적용되어 있기 때문에 상용/비상용에 관계 없이 누구나 자유로이 채택하여 변경, 사용할 수 있을 뿐 아니라, 완성도 면에서 충실하고 잘 관리된 프로젝트의 퀄리티로 인해 수많은 전문가와 기업들이 관심을 가지고 개발에 참여하거나 자사의 제품에서 오픈스택을 지원하기 위해 연구개발을 진행하고 있는 Hot 한 기술 아이템이자 클라우드 컴퓨팅 플랫폼과 네트워킹 분야의 패러다임을 이끌고 있는 녀셕이기도 합니다.


원래는 Spec이 어느 정도 되는 서버 장비가 최소 2대 이상 있어야 설치, 운영을 해 볼 수 있지만, 가정 또는 소규모 연구실에서도 자체 Lab Test 정도는 해 볼 수 있도록 Triple-O(Openstack On Openstack) 구성에 대한 문서를 오픈스택 진영에서 직접 소개하고 있읍니다.

참고: ☞ https://wiki.openstack.org/wiki/TripleO).


2. 들어가며

본 포스팅에서는 필자의 맥북(MacBook Pro Sierra, Quadcore 16GB, SSD 256GB) 상에서 (1) VirtualBox 로 가상머신(CentOS 7.2)을 만들고, (2) Packstack을 이용해서 각각의 가상머신을 Openstack용 controller, Network, Compute 노드로 설치, 설정하여, 만들어진 오픈스택 클라우드 환경에서 (3) 실제로 VM을 생성하고 네트워크로 접속해보고, (4) LBaaS 서비스를 설치한 뒤 LB와 2개의 VM을 이용한 로드밸런싱 환경을 간단히 테스트해 보는 과정 전체를 기술해 둡니다.


중요한 점은, 본인이 포스팅하는 대다수의 블로깅에서 일관되게 지키려고 하는 원칙 중의 하나이긴 하지만, 과정 하나 하나를 직접 내 손으로 수행해 본 결과를 그대로 표현하고 기술함으로써 설치나 설정 과정에서 필요한 원리와 방식에 대해 더 구체적으로 들여다볼 수 있는 기회를 보는 이에게 제공해 주고자 한다는 점입니다. 내가 알지 못하고 무언가를 표현하는 것은, 보는 이에게 도움도 되지 않을 뿐 아니라 시간과 지면 낭비라고 생각하며, 플라스크를 만든 아르민 로나허가 말했듯이, "추상적인 내용보다 구체적인 경험을 나누는 것" 이 더 효과적인 소통과 전달의 수단이 될 수 있기 때문이지요.




본 포스팅의 작업과정에 가장 핵심적인 내용들이 위의 그림에 요약되어 표현되어 있으니, 잘 이해되도록 그림을 자세히 들여다 보기를 권하며, 아래 내용부터는 간략히, 다소 간결한 표현으로 써내려 갑니다.



3. 버추얼박스 가상머신 준비



우선 가상머신에 설치할 OS인 CentOS 7.2 를 다운로드(일반적으로 Ubuntu일 경우 Devstack 을 통해서, CentOS 나 Redhat일 경우 Packstack 을 통해서 Openstack 을 설치하게 됨).


  • VirtualBox 에서 VM 생성


위 그림에 해당하는 4개의 VM을 생성한다. Control 노드는 메모리를 4GB~8GB 정도 주는 것이 좋으며, Admin은 버추얼박스에서 GUI(웹브라우저 사용)이 가능하도록 데스크톱 형태로 설치해야 한다.


  • VM 네트워크 카드(NIC) 설정

그림을 잘 들여다 보면 기본적인 설정사항이 상세히 표시되어 있는데, 본 포스팅에서는 VirtualBox 에서 3가지의 네트워크(각각 외부, 데이터, 관리용)를 준비해야 한다. 이 중에서 외부(External) 네트워크는 인터넷 접속용, 데이터는 VM에 할당되는 서비스 네트워크, 관리용은 Openstack이 VM을 관리하기 위한 용도.

데이터 및 관리용 네트워크는 VirtualBox 의 호스트전용 어댑터 방식(NAT방식으로 해도 작동은 하지만, Virtualbox 내부에서만 동작하는 네트워크이므로 이 정도로 충분함)으로 생성하고, 외부용 네트워크는 맥북 호스트에서 VM에 접속도 가능하고, VM에서 외부 인터넷으로도 접속이 가능하도록 브리지모드로 생성.

호스트전용 어댑더 방식을 위해 아래 그림의 과정과 같이 vboxnet0 네트워크를 우선 생성한다(VirtualBox 환경설정 > 툴바의 네트워크 선택 > 호스트전용 네트워크 선택 > 우측 + 아이콘 클릭).


IPv4 주소는 변경할 필요 없이 그대로 둔다.


DHCP 서버를 눌러서 내용 확인 후 변경 없이 그대로 확인


마우스 커서를 들이대면 설정된 네트워크 정보가 보인다. 그냥 확인.


VM에서 사용할 호스트전용 네트워크가 준비되었으므로 다음 섹션의 VM별 네트워크 구성표에 따라 각각 어댑터를 할당하고 맨 위의 구성도를 보면서 스텍을 적당히 조절하며 4개의 VM을 생성한다. 앞의 3개의 노드들은 가급적 GUI가 없는 서버모드로 OS를 설치해야 하며, 마지막의 Admin VM은 웹브라우저를 통해 Controller VM의 Horizon 웹포탈에 접속해야 하므로 GUI 가 가능하도록 생성하되, 네트워크 정보는 Controller 와 같은 구성으로 하면 운영, 관리에 무리가 없을 것이다.


  • 각 VM 네트워크 카드(NIC) 구성

VM구분

(노드)

 NIC1

 NIC2

 NIC3

방식

(vbox)

장치명

용도

방식

(vbox)

장치명

용도

방식

(vbox)

장치명

용도

 Controller

bridge

enp0s9

API

(외부)

vboxnet0

eth0

control

(관리용)

 

 

 

 Network

bridge

enps09

API

(외부)

vboxnet0

eth0

control

(관리용)

vboxnet0

eth1

tenant

(데이터)

 Compute

 

 

 

vboxnet0

eth0

control

(관리용)

vboxnet0

eth1

tenant

(데이터)


   * 용도별 network segment(IP 대역)

     - API(외부용): 192.168.0.6~ ... Vbox VM외부, 즉 Virtualbox(즉 호스트의 하이퍼바이저 레벨) 에서는 bridge 장치로 인식되며, VM 내부에서는 ifcfg-enp0s9 장치로 관리됨(물리장치명 enp0s9 는 맥북의 경우이며, 일반 조립PC의 RTL 계열 등의 네트워크 카드는 단순히 eth0 와 같은 명칭이 될 수도 있다)

     - Control(관리용): 10.10.10.6~ ... Vbox VM 내부에서는 ifcfg-eth0 로 관리됨

     - Tenant(데이터): 10.10.20.6~ ... Vbox VM 내부에서는 ifcfg-eth1 으로 관리됨

   * 모든 Adapter 는 Virtualbox 에서 생성시 '무작위모드 허용' 으로 설정

   * vboxnet0 방식의 NIC은 모두 '반가상네트워크'로 설정


글 처음에 보이는 시스템 구성도와 아래의 네트워크 구성도는 Openstack 설치, 설정과정의 핵심 구조와 원리를 담은 설계도에 해당하므로 충분히 들여다 보고 잘 이해해 두도록 한다 그래야만 차후에 본인 스스로 실무적 요구사항을 담은 구성도를 직접 그려낼 수 있게 될 것이다.




4. 오픈스택 노드 들의 네트워크 개별 설정 - (1)


이제 위의 구성도와 표에 맞게 각 노드의 네트워크를 세부적으로 설정해 보자


  • 인터넷에서 패키지를 다운로드할 수 있도록 DNS 접속 주소를 설정

# vi /etc/resolv.conf # --> 자신의 인터넷 환경에 맞게 DNS 등록. 잘 모르면 8.8.8.8 하나만.

nameserver 168.126.63.1

nameserver 168.126.63.2


  • Controller 노드

  호스트명을 다음과 같이 변경하고 로그아웃 후, 다시 로그인


# hostnamectl set-hostname openstack-ctrl


  API용 외부 네트워크(enp0s9)

[root@openstack-ctrl ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s9

DEVICE=enp0s9

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=192.168.0.6

NETMASK=255.255.255.0

[root@openstack-ctrl ~]# vi /etc/sysconfig/network-scripts/route-enp0s9

default via 192.168.0.1 dev enp0s9

 

  관리용 내부 네트워크(eth0)

[root@openstack-ctrl ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.10.6

NETMASK=255.255.255.0


[root@openstack-ctrl ~]# systemctl restart network

[root@openstack-ctrl ~]# yum install -y net-tools


  Controller 노드는 Openstack 인프라 내에서 시간동기화(ntpd) 서버 기능을 해야 하므로 다음과 같이 ntpd 서버로 설정한다


[root@openstack-ctrl ~]# yum clean all; yum install -y ntp

[root@openstack-ctrl ~]# vi /etc/ntp.conf

restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap

server kr.pool.ntp.org

server time.bora.net

server time.kornet.net

[root@openstack-ctrl ~]# systemctl enable ntpd

[root@openstack-ctrl ~]# systemctl start ntpd

[root@openstack-ctrl ~]# ntpq -pn


  • Network 노드

  호스트명을 다음과 같이 변경하고 로그아웃 후, 다시 로그인


# hostnamectl set-hostname openstack-net


  API용 외부 네트워크(enp0s9)

[root@openstack-net ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s9

DEVICE=enp0s9

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=192.168.0.7

NETMASK=255.255.255.0

[root@openstack-net ~]# vi /etc/sysconfig/network-scripts/route-enp0s9

default via 192.168.0.1 dev enp0s9

 

  관리용 내부 네트워크(eth0)

[root@openstack-net ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.10.7

NETMASK=255.255.255.0


  데이터용 내부 네트워크(eth1) 

[root@openstack-net ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.20.7

NETMASK=255.255.255.0


[root@openstack-net ~]# systemctl restart network

[root@openstack-net ~]# yum install -y net-tools


  Controller 노드에 맞추어 시간동기화(ntp) 기능을 설정


[root@openstack-net ~]# yum clean all; yum install -y ntp

[root@openstack-net ~]# vi /etc/ntp.conf

server  10.10.10.6

[root@openstack-net ~]# systemctl enable ntpd

[root@openstack-net ~]# systemctl start ntpd

[root@openstack-net ~]# ntpq -pn

     remote           refid      st t when poll reach   delay   offset  jitter

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

 10.10.10.6      LOCAL(0)         6 u  92m   64    0   60.402   37.293   0.000


5. 오픈스택 설치를 위한 각 노드 계정 및 네트워크 설정 - (2)


  • Controller, Network, Compute 노드에서 각각 오픈스택 설치/운영을 위한 stack 이라는 계정을 생성하고 권한을 부여
# useradd stack
# passwd stack  # --> specify a password
# echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack
# sudo chmod 0440 /etc/sudoers.d/stack

  • Compute 노드는 외부 네트워크에 직접 연결할 수 있는 NIC이 없음(위의 표: VM NIC 구성표 참조)


시스템 구성도와는 다르게 Compute 노드에 Network 노드처럼 NIC을 하나 더 추가해 주면 되지만, 여기서는 원칙대로 진행한다. 하지만 이렇게 되면 Compute 노드에서 새로운 패키지를 설치할 수 없게 되므로, Network 노드(를 게이트웨이로 해서)를 통해 외부 접속이 가능하도록 해 보자. 우선, Network 노드에서 다음을 수행한다.


# yum install -y iptables-services

# systemctl start iptables

# systemctl enable iptables

# iptables -F

# iptables -t nat -A POSTROUTING -o enp0s9 -j MASQUERADE

# iptables -A FORWARD -i eth0 -j ACCEPT

# service iptables save

# vi /etc/sysctl.conf

net.ipv4.ip_forward=1

# sysctl -p

   ※ [주의1] 붉은 글씨로 표기된 enp0s9 장치명은 Openstack 설치가 완료된 이후에는 br-ex 로 바꿔서 사용되어야 한다. 아래에서 다시 설명함

  • Compute 노드(openstack-cmp1, openstack-cmp2, ...)

  호스트명을 다음과 같이 변경하고 로그아웃 후, 다시 로그인


# hostnamectl set-hostname openstack-cmp1



  데이터용 내부 네트워크(eth1) 

[root@openstack-cmp1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.20.8

NETMASK=255.255.255.0


     다음으로 Compute 노드에서 다음과 같이 네트워크와 게이트웨이를 설정한다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.10.8

NETMASK=255.255.255.0

# vi /etc/sysconfig/network-scripts/route-eth0

default via 10.10.10.7 dev eth0

# systemctl restart network
# yum install -y net-tools

# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=45.7 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=39.8 ms ...


  Controller 노드에 맞추어 시간동기화(ntp) 기능을 설정한다


[root@openstack-cmp1 ~]# yum clean all; yum install -y ntp

[root@openstack-cmp1 ~]# vi /etc/ntp.conf

server  10.10.10.6

[root@openstack-cmp1 ~]# systemctl enable ntpd

[root@openstack-cmp1 ~]# systemctl start ntpd

[root@openstack-cmp1 ~]# ntpq -pn

     remote           refid      st t when poll reach   delay   offset  jitter

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

 10.10.10.6      LOCAL(0)         6 u  92m   64    0   60.402   37.293   0.000


6. 오픈스택 설치를 위한 각 노드들의 패키지 설정


  • 각 노드의 리포지토리를 변경하고 필수 패키지를 설치


이제 모든 3개 노드(Controller, Network, Compute)에서 BaseRepo 를 다음과 같이 변경하고, 필수 유틸리티와 종속성 패키지를 순서대로 빠짐 없이 설치한다(Openstack 버전에 따라 다소 차이가 있을 수 있으며, 아래는 2016.9월 시점 Mitaka v5 기준). 참고로 활발히 개발이 진행되고 있는 Openstack 의 버전에 따라, 본 포스팅의 경우처럼 다수의 의존성 패키지를 따로 설치하지 않고 yum update 를 통해 기본적인 패키지 업데이트를 진행한 다음, 최소한의 의존성 패키지를 따로 설치하는 경우도 생각해 볼 수 있다.


# vi /etc/yum.repos.d/CentOS-Base.repo

#mirrorlist=...모든 섹션에서 mirrorlist 줄을 comment

#baseurl=...모든 섹션에서 baseurl 줄을 comment, 그 줄 아래에 다음 줄을 각각 추가

baseurl=http://ftp.daumkakao.com/centos/$releasever/os/$basearch/

# yum install -y net-tools

# yum install -y wget


# --> 종속성 패키지 설치

# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/python-markdown-2.4.1-1.el7.centos.noarch.rpm

# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/python-cheetah-2.4.4-5.el7.centos.x86_64.rpm

# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/python-werkzeug-0.9.1-2.el7.noarch.rpm

# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/python-itsdangerous-0.23-2.el7.noarch.rpm

# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/python-flask-0.10.1-4.el7.noarch.rpm

# wget wget ftp://mirror.switch.ch/pool/4/mirror/centos/7.2.1511/os/x86_64/Packages/python-jinja2-2.7.2-2.el7.noarch.rpm

# wget ftp://mirror.switch.ch/pool/4/mirror/centos/7.2.1511/cloud/x86_64/openstack-liberty/common/python-babel-1.3-6.el7.noarch.rpm

# wget ftp://mirror.switch.ch/pool/4/mirror/centos/7.2.1511/os/x86_64/Packages/python-markupsafe-0.11-10.el7.x86_64.rpm

# sudo yum install -y python-pygments

# sudo rpm -ivh python-markdown-2.4.1-1.el7.centos.noarch.rpm

# sudo rpm -ivh python-cheetah-2.4.4-5.el7.centos.x86_64.rpm

# sudo rpm -ivh python-werkzeug-0.9.1-2.el7.noarch.rpm

# sudo rpm -ivh python-itsdangerous-0.23-2.el7.noarch.rpm

# sudo yum install -y  pytz

# sudo rpm -ivh python-babel-1.3-6.el7.noarch.rpm

# sudo rpm -ivh python-markupsafe-0.11-10.el7.x86_64.rpm

# sudo rpm -ivh python-jinja2-2.7.2-2.el7.noarch.rpm

# sudo rpm -ivh python-flask-0.10.1-4.el7.noarch.rpm


  • 각 노드의 /etc/hosts 파일에 다음의 3개 라인을 추가

10.10.10.6 openstack-ctrl

10.10.10.7 openstack-net

10.10.10.8 openstack-cmp1


  • 마찬가지로 각 3개 노드에서 보안 등 각종 관리패키지를 오픈스택 설치가 가능해 지도록 구성

# systemctl disable firewalld

# systemctl stop firewalld

# systemctl disable NetworkManager

# systemctl stop NetworkManager

# yum remove -y NetworkManager

# systemctl enable network

# systemctl start network


# vi /etc/selinux/config #--> liberty 부터는 불필요 해졌으므로 생략

...

SELINUX=permissive

...



7. Packstack 으로 Openstack 자동 설치하기

Packstack은 Controller 노드에서 answer 파일을 읽어 들여서 자신을 포함하여 하위 노드(Network 노드, Compute 노드들)에서 각종 소프트웨어들을 설치/설정하는 스크립트를 단계적으로 실행해 주는 역할을 한다(Redhat 제공 RDO 프로젝트 참고: www.rdoproject.org). 이를 위해 각 하위 노드에 암호 없이 접속이 가능해야 한다. 


  • Controller 노드에서 각 노드로 Passwordless ssh 설정

[root@openstack-ctrl ~]# ssh-keygen 

[root@openstack-ctrl ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.7

[root@openstack-ctrl ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.8


#--> 암호 없이 정상적으로 접속되는지 확인

[root@openstack-ctrl ~]# ssh openstack-net

[root@openstack-ctrl ~]# ssh openstack-cmp1


  • Packstack repo 설정 및 설치 시작

[root@openstack-ctrl ~]# yum install -y https://www.rdoproject.org/repos/rdo-release.rpm

[root@openstack-ctrl ~]# yum install -y openstack-packstack

[root@openstack-ctrl ~]# su - stack

[root@openstack-ctrl ~]# sudo packstack --gen-answer-file=answer.txt

[root@openstack-ctrl ~]# sudo vi answer.txt

=== OVS(Openvswitch) 기반 샘플 answer 파일 다운로드 ===

=== answer.txt 로 복사후 편집, 사용 ===


[root@openstack-ctrl ~]# sudo packstack --answer-file=answer.txt

Welcome to the Packstack setup utility



The installation log file is available at: /var/tmp/packstack/20160828-041734-_nTMcZ/openstack-setup.log



Installing:

Clean Up                                             [ DONE ]

Discovering ip protocol version                      [ DONE ]

Setting up ssh keys                                  [ DONE ]

Preparing servers                                    [ DONE ]

Pre installing Puppet and discovering hosts' details [ DONE ]

Adding pre install manifest entries                  [ DONE ]

Installing time synchronization via NTP              [ DONE ]

Setting up CACERT                                    [ DONE ]

Adding AMQP manifest entries                         [ DONE ]

Adding MariaDB manifest entries                      [ DONE ]

Adding Apache manifest entries                       [ DONE ]

Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]

Adding Keystone manifest entries                     [ DONE ]

...

Adding Nagios server manifest entries                [ DONE ]

Adding Nagios host manifest entries                  [ DONE ]

Copying Puppet modules and manifests                 [ DONE ]

Applying 10.10.10.8_prescript.pp

Applying 10.10.10.7_prescript.pp

Applying 10.10.10.6_prescript.pp

10.10.10.8_prescript.pp:                             [ DONE ]      

10.10.10.6_prescript.pp:                             [ DONE ]      

10.10.10.7_prescript.pp:                             [ DONE ]      

Applying 10.10.10.8_chrony.pp

Applying 10.10.10.7_chrony.pp

Applying 10.10.10.6_chrony.pp

10.10.10.8_chrony.pp:                                [ DONE ]   

10.10.10.6_chrony.pp:                                [ DONE ]   

10.10.10.7_chrony.pp:                                [ DONE ]   

Applying 10.10.10.6_amqp.pp

Applying 10.10.10.6_mariadb.pp

10.10.10.6_amqp.pp:                                  [ DONE ]    

10.10.10.6_mariadb.pp:                               [ DONE ]    

Applying 10.10.10.6_apache.pp

10.10.10.6_apache.pp:                                [ DONE ]   

Applying 10.10.10.6_keystone.pp

Applying 10.10.10.6_glance.pp

Applying 10.10.10.6_cinder.pp

10.10.10.6_keystone.pp:                              [ DONE ]     

10.10.10.6_glance.pp:                                [ DONE ]     

10.10.10.6_cinder.pp:                                [ DONE ]     

Applying 10.10.10.6_api_nova.pp

10.10.10.6_api_nova.pp:                              [ DONE ]     

Applying 10.10.10.6_nova.pp

Applying 10.10.10.8_nova.pp

10.10.10.6_nova.pp:                                  [ DONE ] 

10.10.10.8_nova.pp:                                  [ DONE ] 

Applying 10.10.10.8_neutron.pp

Applying 10.10.10.7_neutron.pp

Applying 10.10.10.6_neutron.pp

10.10.10.8_neutron.pp:                               [ DONE ]    

10.10.10.6_neutron.pp:                               [ DONE ]    

10.10.10.7_neutron.pp:                               [ DONE ]    

Applying 10.10.10.6_osclient.pp

Applying 10.10.10.6_horizon.pp

10.10.10.6_osclient.pp:                              [ DONE ]     

10.10.10.6_horizon.pp:                               [ DONE ]     

Applying 10.10.10.6_ring_swift.pp

10.10.10.6_ring_swift.pp:                            [ DONE ]       

Applying 10.10.10.6_swift.pp

10.10.10.6_swift.pp:                                 [ DONE ]  

Applying 10.10.10.6_heat.pp

10.10.10.6_heat.pp:                                  [ DONE ] 

Applying 10.10.10.6_provision.pp

Applying 10.10.10.6_provision_glance

10.10.10.6_provision.pp:                             [ DONE ]          

10.10.10.6_provision_glance:                         [ DONE ]          

Applying 10.10.10.7_provision_bridge.pp

10.10.10.7_provision_bridge.pp:                      [ DONE ]             

Applying 10.10.10.6_gnocchi.pp

10.10.10.6_gnocchi.pp:                               [ DONE ]    

Applying 10.10.10.6_mongodb.pp

Applying 10.10.10.6_redis.pp

10.10.10.6_mongodb.pp:                               [ DONE ]    

10.10.10.6_redis.pp:                                 [ DONE ]    

Applying 10.10.10.6_ceilometer.pp

10.10.10.6_ceilometer.pp:                            [ DONE ]       

Applying 10.10.10.6_aodh.pp

10.10.10.6_aodh.pp:                                  [ DONE ] 

Applying 10.10.10.6_nagios.pp

Applying 10.10.10.8_nagios_nrpe.pp

Applying 10.10.10.7_nagios_nrpe.pp

Applying 10.10.10.6_nagios_nrpe.pp

10.10.10.8_nagios_nrpe.pp:                           [ DONE ]        

10.10.10.7_nagios_nrpe.pp:                           [ DONE ]        

10.10.10.6_nagios.pp:                                [ DONE ]        

10.10.10.6_nagios_nrpe.pp:                           [ DONE ]        

Applying Puppet manifests                            [ DONE ]

Finalizing                                           [ DONE ]


 **** Installation completed successfully ******


Additional information:

 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.

 * File /root/keystonerc_admin has been created on OpenStack client host 10.10.10.6. To use the command line tools you need to source the file.

 * To access the OpenStack Dashboard browse to http://10.10.10.6/dashboard .

Please, find your login credentials stored in the keystonerc_admin in your home directory.

 * The installation log file is available at: /var/tmp/packstack/20160906-010456-B6ViYg/openstack-setup.log

 * The generated manifests are available at: /var/tmp/packstack/20160906-010456-B6ViYg/manifests



  • 유의해야 할 사항

본 글에서 제공되는 answer.txt 샘플파일은 2016.9월 시점 Mitaka 기준의 것으로, LBaas 설치 옵션(CONFIG_LBAAS_INSTALL)을 켜게 되면 설치 단계에서 "neutron server 실행 오류가 유발되고 있으므로 초기 설치시에는 일단 제외하고 LBaas는 글 후반에 별도로 다룸


Neutron L2 Agent와 Neutron ML2 Mechanism driver는 openvswitch만을 적용하였다.  메커니즘 드라이버는 필요에 따라 linuxbridge, arista, cisco nexus 등을 여건에 맞게 콤마로 구분하여 추가하면 됨


간혹 설치 중간 중간에 노드의 상태가 불안정하여 오류가 발생하거나 더 이상 진행되지 않는 등의 경우가 생기기도 하는데, 강제 종료 후 다시 시도해 보거나, 전체 노드를 리부트 후 재시도 또는 최악의 경우 VM을 다시 만들어 초기 상태에서 재시도를 해야 하는 경우가 있을 수도 있음


잦은 설치 오류로 인하여 /var/log 디렉토리의 서비스별 로그 디렉토리에 log 파일이 넘쳐서 Vbox VM의 디스크가 Full 될 수도 있음에 유의



8. Network 노드 - Neutron 네트워크(OVS bridge) 인터페이스 설정


이제 설치과정의 막바지. Network 노드의 브리지 인터페이스를 다음과 같이 설정해 주어야 한다 


  • Network 노드 브리지 인터페이스 설정

[root@openstack-net ~]# ifconfig

br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet6 fe80::b4c4:87ff:fe82:a949  prefixlen 64  scopeid 0x20<link>

        ether b6:c4:87:82:a9:49  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 13  overruns 0  frame 0

        TX packets 8  bytes 648 (648.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.7  netmask 255.255.255.0  broadcast 192.168.0.255

        inet6 fe80::a00:27ff:fe2f:5037  prefixlen 64  scopeid 0x20<link>

        ether 08:00:27:2f:50:37  txqueuelen 1000  (Ethernet)

        RX packets 27435  bytes 37349433 (35.6 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 8894  bytes 643839 (628.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 10.10.10.7  netmask 255.255.255.0  broadcast 10.10.10.255

         ...

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 10.10.20.7  netmask 255.255.255.0  broadcast 10.10.20.255

         ...

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfig 로 네트워크 구성을 살펴 보면 br-ex(외부 연결 브리지)에는 IP 주소가 할당되어 있지 않고, enp0s9 에 외부 연결용 IP(192.168.0.7)이 할당되어 있는 것을 볼 수 있다. 


이제 enp0s9 에 할당된 외부 네트워크 정보를 br-ex(외부용 브리지 인터페이스) 로 옮기고, ifcfg-enp0s9를 br-ex와 연결하는 작업을 해야 한다. 다음의 과정을 따라가 보자.


[root@openstack-net ~]# cd /etc/sysconfig/network-scripts/

[root@openstack-net ~]# cp ifcfg-enp0s9 ifcfg-br-ex

[root@openstack-net ~]# vi ifcfg-br-ex

DEVICE=br-ex

DEVICETYPE=ovs

TYPE=OVSBridge

BOOTPROTO=static

IPADDR=192.168.0.7

NETMASK=255.255.255.0

BROADCAST=192.168.0.255

GATEWAY=192.168.0.1

DEFROUTE=yes

ONBOOT=yes

NM_CONTROLLED=no

IPV4_FAILURE_FATAL=yes

IPV6INIT=no


[root@openstack-net ~]# vi ifcfg-enp0s9

DEVICE=enp0s9

DEVICETYPE=ovs

TYPE=OVSPort

OVS_BRIDGE=br-ex

ONBOOT=yes

NM_CONTROLLED=no

IPV6INIT=no



[root@openstack-net ~]# systemctl restart network

[root@openstack-net ~]# ifconfig

br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.7  netmask 255.255.255.0  broadcast 192.168.0.255

        inet6 fe80::b49c:2aff:fe19:7e4c  prefixlen 64  scopeid 0x20<link>

        ether 08:00:27:2f:50:37  txqueuelen 0  (Ethernet)

        RX packets 31966  bytes 5704088 (5.4 MiB)

        RX errors 0  dropped 1  overruns 0  frame 0

        TX packets 7268  bytes 1153521 (1.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet6 fe80::a00:27ff:fe2f:5037  prefixlen 64  scopeid 0x20<link>

        ether 08:00:27:2f:50:37  txqueuelen 1000  (Ethernet)

        RX packets 1191146  bytes 714542018 (681.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 17821  bytes 2222494 (2.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

네트워크 재시작 후 네트워크 구성을 ifconfig 로 확인해 보면, br-ex에 외부 연결용 네트워크 정보가 할당되어 있고, enp0s9의 ethernet(MAC) 주소가 br-ex 의 MAC 주소와 동일한 값을 가진 것을 확인할 수 있다.


9. Compute 노드 - 네트워크 게이트웨이 설정


  • Compute 노드에서 외부로 접속할 필요가 있을 경우에만 해당


앞서 설명했듯이 Compute 에는 외부로 직접 연결 가능한 네트워크가 없으므로, Network 노드를 통해서만 외부 접속이 가능하다.  위의 [주의1] 에서 설명한 부분의 파란 글씨에 해당하는 설정을 Network 노드에서 수행(위에서 설명한 대로 enp0s9는 br-ex 로 변경)한 다음 다음과 같이 설정해 두면 된다.


[root@openstack-cmp1 ~]# cd /etc/sysconfig/network-scripts/

[root@openstack-cmp1 ~]# vi ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

IPADDR=10.10.10.8

NETMASK=255.255.255.0


[root@openstack-cmp1 ~]# vi route-eth0

default via 10.10.10.7 dev eth0


[root@openstack-cmp1 ~]# systemctl restart network



Controller 노드의 환경변수 설정 스크립트 복사


  • Network 노드, Compute 노드에서 CLI 명령 실행이 필요할 경우에 대비하여 스크립트 복사


Controller 노드의 keystonerc 관련 파일들을 다음과 같이 Network 노드, Compute 노드에 복사해 둔다


[root@openstack-ctrl ~]# scp keystonerc_* root@openstack-net:~

[root@openstack-ctrl ~]# scp keystonerc_* root@openstack-cmp1:~



10. Horizon 웹을 통해 Cloud 플랫폼 사용 준비 과정


  • Horizon 웹 UI 사용 준비 - 클라우드 네트워크 설정


시스템 구성도의 Admin VM에 해당하는 VM에서, firefox 웹브라우저를 통해 http://10.10.10.6으로 접속, admin 계정과 answer.txt 에서 지정한 암호를 통해 로그인


tenant 서비스를 위해서 demo 프로젝트를 사용한다고 가정했을 때,  해당 프로젝트에서 사용할 네트워크를 생성, 설정하는 과정을 다음과 같이 진행한다.



사용하지 않는 기본 Router 삭제(Admin->System->Router->demo 프로젝트-public라우터), Public 네트워크 정보(Admin->System->Network->admin 프로젝트-public subnet)을 삭제 



networks 패널에서, '+Create Network' 을 선택하고 admin 프로젝트에 대해 public 네트워크를 새로이 생성(본 케이스에서는 vxlan 방식, shared - External network).



생성된 public 네트워크 항목을 선택하여, 하단의 '+Create Subnet' 을 클릭,  실제로 사용할 외부 네트워크 정보(CIDR, Gateway, DNS 등)을 Subnet, Subnet Detail 항목 선택을 통해 각각 등록


admin 계정을 로그아웃하고, tenant 서비스를 설정/사용하기 위한 demo 계정으로 로그인

앞에서 admin 을 통해 생성, 설정한 네트워크를 사용하기 위해, 왼쪽 메뉴에서 Project->Network->Router 패널을 선택하고 '+Create Router' 을 클릭하려 demo 프로젝트에서 사용할 라우터를 생성. External Network 항목에 대해, 앞서 생성했던 public 네트워크를 선택



'+Create Gateway' 클릭을 통해 외부 네트워크와의 연결을 위한 게이트웨이를 설정




'+Add Interface' 클릭을 통해, 앞서 생성한 사설 네트워크와의 연결을 위한 인터페이스를 추가


좌측 메뉴의 Network 패널에서 Network Topology 를 선택하여 현재 구성된 네트워크의 구조를 확인한다. 여기까지 성공적으로 진행하였다면 클라우드 환경을 본격적으로 사용하기 위한 전체 설정 과정은 완료한 것이며, 다음의 필수 준비과정 몇 가지를 거치면 모든 준비가 끝나고 VM을 생성, 관리할 수 있게 됨.


11. VM 인스턴스 생성 관리를 위한 준비 & 실행 단계


  • security Group 생성


  • Key Pair 생성



  • Floating IP 생성



  • VM Image 확인


  • 생성된 VM 목록




12. LBaas(LB As A Service) 의 설정과 테스트


LBaas 의 설치 방법에 대해서는 여기를 주로 많이 참조하게 되는데(Kilo 버전 기준), 현재 시점의 Mitaka에 적용시에 적욥하지 않은 일부 오류가 숨어 있으므로 아래의 내용으로 진행하면 크게 무리 없이 성공적으로 수행 가능



  • Controller, Network 노드에서 각각 haproxy, lbaas 설치
[root@openstack-ctrl ~]# yum install -y haproxy openstack-neutron-lbaas


  • Controller 노드에 driver, plugin 설정
[root@openstack-ctrl ~]# vi /etc/neutron/neutron_lbaas.conf
service_provider = LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
[root@openstack-ctrl ~]# vi /etc/neutron/neutron.conf
service_plugins 리스트에 lbaas 추가
[root@openstack-ctrl ~]# systemctl restart neutron-server.service

  • Network 노드에 lbaas agent 설정
[root@openstack-net ~]# vi /etc/neutron/lbaas_agent.ini
device_driver = neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver
user_group = haproxy
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

[root@openstack-net ~]# systemctl restart neutron-lbaas-agent.service
[root@openstack-net ~]# systemctl enable neutron-lbaas-agent.service

  • Horizon(Controller 노드) 설정
[root@openstack-ctrl ~]# vi /etc/openstack-dashboard/local_settings
'enable_lb': True

[root@openstack-ctrl ~]# systemctl restart httpd.service


이제 Openstack Horizon 에 로그인하여 Network 패널 아래에 Load Balancer 라는 서브 패널이 나타나며, Load balancer 설정 및 사용이 가능해 짐을 볼 수 있다.


다음에 다룰 내용은?


2016년 10월에 Mitaka 후속 버전으로 Newton 버전에 릴리즈되었습니다. 다음에 다룰 내용은 최신의 Newton 버전이 되겠으며, 본 포스팅과 중복되는 부분은 제외하고, 기본적인 설치/설정 과정의 요약 정리와 함께 로드밸런싱을 위한 VM 이미지의 준비, Haproxy 기술을 활용한 LB의 대상이 되는 VM에 웹서버를 설정하고 부하 분산의 작동 테스트를 포함하여, answer 파일의 개별설정과 VM의 HOT(Heat Orchestration Template)에 의한 VM 자동증설(Auto-scale: Scale out/in)에 대해서 다루어 보도록 하겠습니다. 


- Barracuda -


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

Barracuda

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


지난 포스팅에서 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 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


Linux host에서 가상화 지원 솔루션 중 VirtualBox를 설치하고 사용하는 경우에, 특히 OpenSuse 12.x 환경에서 virtualbox 를 설치하고, VM을 사용하고자 할 경우(ubuntu 등 기타 linux에서도 비슷하게 적용될 듯)에 주의 사항이 있다.


virtualbox를 https://www.virtualbox.org/wiki/Downloads 에서 다운로드 받고 설치, VirtualBox 기동 후 extpack 까지 설치하고 난 후, virtualbox 메뉴에서 vm을 생성하고 머신을 시작하려고 하면 "virtualbox kernel driver not installed (rc=-1908)" 라는 메시지 창이 뜨고 '/etc/init.d/vboxdrv setup' 을 실행하라고 경고창이 뜨게 된다. 이제 터미널 창에서 '/etc/init.d/vboxdrv setup' 이라고 실행하게 되는데......


이 때, 만약 커널 소스가 linux 에 설치되어 있지 않다면

/etc/init.d/vboxdrv setup

Stopping VirtualBox kernel modules          done

Recompiling VirtualBox kernel modules     failed

라고 오류가 발생되고 더 이상 진행이 되지 않는다. 또 경고창에 나타난 대로 아래와 같이 log를 조회해 보면 오류가 나타남을 알 수 있다.

# cat /var/log/vbox-install.log

Makefile: 181:  *** Error: unable to find the source of your current linux kernel. Specify KERN_DIR=<directorty> and run Make again. Stop.

...

 

이는, virtualbox가 설치되면 kernel module을 로드하기 위해서 해당 커널모듈을 컴파일하게 되는데, 커널 소스가 설치되지 않은 경우에 만날 수 있는 에러 상황이다.


터미널 명령으로 아래와 같이 실행하면 문제를 해결할 수 있다(root 권한으로 실행, 아래는 Suse 계열의 linux에 대한 명령이며, OS에 맞춰 yum, apt-get 과 같은 패키지 설치 명령을 사용하면 된다)

# zypper search kernel-source (=> OS에 따라 kernel-sources 로 나타나는 경우도 있음)

# zypper refresh

# zypper in -y kernel-source

# /etc/init.d/vboxdrv restart

# /etc/init.d/vboxdrv setup

Stopping VirtualBox kernel modules            done

Recompiling VirtualBox kernel modules       done

Starting VirtualBox kernel modules              done


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

Barracuda

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


앞 선 포스팅(Fedora 14 Dom0 Kernel (Xen 4.0.1-6) 설치 - Virtual Machine 사용을 위한 준비)의 후속으로 동일 환경에서 Opensuse 11.3 vm(pv)를 설치해 보자.

Network install은 ftp, http, nfs 등의 몇 가지 방법이 있다. 몇 개월 전의 포스팅에서 Local web server를 이용한 network install을 다루어 본 적이 있었던 것 같다. 이번에는 CDRom이나 DVD  또는 ISO 이미지가 없을 경우에 인터넷만 연결되어 있다면 어디서나 간편하게(사실 시간은 좀 걸릴 것이다. remote 공개된 repository server를 통해 부팅 및 설치를 해야 하므로...) 설치해 보는 방법을 테스트 해 본다.

* 주의 : 
virt-manager는 libvirt의 기능을 통해 domU를 생성하게 되는데, 이때 vm image file은 /var/lib/libvirt/images 에 생성된다. 따라서 root volume의 공간이 충분하지 않을 경우 vm image 파일의 크기에 제약이 따른다. 이 때는
# service libvirtd stop
# vi /etc/libvirt/storage/default.xml
...
  <path>/home/vmimages</path> => vm image를 생성할 디렉토리 지정
...
# service libvirtd start
의 과정을 거친 후 아래 단계를 진행한다

# virt-manager &
또는 Applications > System Tools > Virtual Machine Manager 실행

Step 1 of 5

Toolbar의 Create a new virtual machine 선택
-> New virtual machine name 입력, Connection은 localhost(Xen)
Choose how ...
-> Network Install(HTTP, FTP or NFS) 선택

'Forward' click
Step 2 of 5

Provide ... operating system install URL
-> URL Options 는 바꾸지 말고 비워 놓는다
Automatically detect operating system ... 을 Check한다.
-> 자동으로 Repository를 읽어 OS type: Linux, Version: Unknown 을 detect할 것이다

'Forward' click
- ftp 가 아닌 http 로 URL을 등록해야 함에 주의
- 북미에서 가까운 경우 URL을 http://download.opensuse.org/distribution/11.3/repo/oss/ 로 등록하면 더 빠를 것 같다.
Step 3 of 5

Memory(Ram), CPU 갯수를 입력, 선택

'Forward' click
Step 4 of 5

Enable storage for this virtual machine을 Check
-> Create a disk image on the computer's hardware 선택, 가상 disk size 입력
-> Allocate entire disk now 를 unCheck
(Check하면 서버의 파티션(정확히는 위에서 설정한 vmimage 생성 영역)의 남아 있는 전체 공간 크기 만큼 할당하게 되므로 주의 !!)

'Forward' click
Step 5 of 5

Ready to begin installation of xxxxxx...
...
Customize configuration before install을 Check

Advanced option 선택
-> Virtual network 'default' NAT 또는 specify shared device name 선택(이 경우  Bridge name 을 입력: br0 또는 xenbr0 등...)

Virt Type: paravirt 또는 fullvirt 중 선택
Architecture: x86_64(intel), i686(AMD) 선택

'Finish' click

Begin installation 버튼이 맨 위에 배치된 Virtual Machine spec customize 창이 뜬다

- 각 설정을 리뷰하면서 확인
- Audio는 일반적으로 사용하지 않을 것이므로, 아래쪽의 Remove 버튼으로 삭제
(기본적으로 Audio 항목이 뜨지 않게 하려면 Virtual Machine Manager에서 Edit>Preference 에서 설정할 수 있다)
- 여기서 부터는 창을 닫더라도 설치 과정이 진행되어 버리므로(버그 인듯하다) 잘 못 설정된 항목이 있을 경우 중간에 처음부터 다시 시작해야 한다

맨 위의 'Begin installation' Click
Creating Virtual Machine 윈도우가 뜨면서

The virtual machine is now being created. Allocation .... 메시지와 함께
Progress bar가 오락 가락하는 모습이 나타난다
>>> Linuxrc v3.4.14 (Kernel 2.6.34-12-xen) <<<

Make sure that number 1 is in your drive
-> Back 선택, Enter
Select the language
-> English 선택, Enter
Choose a keyboard map
-> English (US) 선택, Enter
Main Menu
-> Start Installation 선택, Enter
Start Installation
-> Start Installation or Update 선택, Enter
Choose the source medium
-> Network 선택, Enter
Choose the network protocol
-> HTTP 선택, Enter
Automatic configuration via DHCP?
-> Yes 선택, Enter (또는 No 선택, network 정보 입력: 192.168.100.55/24 형식)
Enter the IP address of the HTTP server
-> ftp.novell.co.jp
Enter the directory on the server
-> /pub/opensuse/distribution/11.3/repo/oss/
Do you need a username ...
-> No 선택, Enter
Use a HTTP proxy?
-> No 선택, Enter

여기서부터 Loading installation System (1/6)...(6/6)까지 자동 진행

No new Driver Updates found -> Enter

Text booting 화면으로 전환되고 Found a linux console terminal... 메시지를 끝으로
 시간이 조금(또는 많이) 흐른 후, Graphical open suse 설치화면이 나타난다.

여기서 부터는 대화형으로 설치를 진행할 수 있으므로 이후는 생략
(Firewall 설정에서 ssh 접속을 허용해 놓으면 ssh로 접속하여 사용할 수 있다
"ssh포트를 열고 ssh서비스 활성화" 선택)
설치 완료 후

# virt-viewer domain-name
# virt-viewer id
등으로 vm에 접속하여 사용 가능하다(또는 virt-manager 에서 vm선택 후 Open을 해도 되겠다)

# xm info
# xm list
등의 기본적인 xen command line을 통해 사용할 수도 있으니 이후는 취향에 맞게 알아서 사용하면 된다.

- 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 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들



Setting up Xen Dom0 kernel 2.6.31.13 on OpenSuse 11.2

 * Installation methods are as follows
  (1) Binary tarball from xensource.com(xen-3.x.x-install.tgz)
  (2) RPM download and install
  (3) Online Package installation by zypper or yast or yast2(software installation)
  (4) From source
    - Xen source(make dist-xen,...) / Kernel source+patch(Patch & make modules_install & modifying grub)
    - Xen source / Custom kernel source(make ARCH=xen xconfig, ...)
  * Must-have softwares
  (1) bridge-utils(brctl,...)
  (2) hotplug system(mostly in Linux udev)
  (3) Build utils and related(gcc, binutils, GNU make, zlib, python)
  
1. Check virtualization env. if needed
# rpm -qa | egrep "(xen|virt)" | sort

2. Disable SElinux if installed

3. Install xen related packages and build tools
   (Or install RPMs by yast, yast2 GUI interface...If U r lucky enough).
# zypper search xen*
# zypper install xen xen-devel xen-doc-html xen-doc-pdf xen-libs xen-tools xen_server
# zypper install make gcc gcc-c++

  3-1. Or, install xen by building source like this...
  # wget http://bits.xensource.com/oss-xen/release/3.4.2/xen-3.4.2.tar.gz
  # tar -xvzf xen-3.4.2.tar.gz
  # cd xen-3.4.2
  # zypper install dev86 => essential to build !!
  # make dist-xen dist-tools dist-stubdom
  # make install-xen install-tools install-stubdom

  3-2. Download Vanilla kernel source & xen patch
  # cd /usr/src
  # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.12.tar.bz2
  # tar xvjf linux-2.6.31.12.tar.bz2
  # mv linux-2.6.31.12 linux-2.6.31.12-xen-byMe
  # wget http://gentoo-xen-kernel.googlecode.com/files/xen-patches-2.6.31-10.tar.bz2
  # mkdir xen-patches-v10_2.6.31.12
  # cd xen-patches-v10_2.6.31.12
  # tar xvjf ../xen-patches-2.6.31-10.tar.bz2
  # cd ../
  # cd linux-2.6.31.12-xen-byMe
  # for i in `ls ../xen-patches-v10_2.6.31.12/`; do patch -p1 < ../xen-patches-v10_2.6.31.12/"$i"; done

  3-3. Copy original kernel config file for convenience
  # cp /boot/config-2.6.31.xx-generic .config
   * curses lib will be required...
  # make menuconfig => Set each items exactly !
  -----------------------------------------------
  Processor type and features --->
    [*] Enable Xen compatible kernel
    Networking support --->
    Networking options --->
     <*> 802.1d Ethernet Bridging
    Device Drivers --->
     XEN --->
     [*] Privileged Guest (domain 0)
     <M> Backend driver support
     <M>   Block-device backend driver
     <M>   Block-device tap backend driver
     <M>   Block-device tap backend driver 2
     <M>   Network-device backend driver
     <M>   PCI-device backend driver
     <M>   SCSI backend driver
     <M>   USB backend driver
     <*> Block-device frontend driver
     <*> Network-device frontend driver
     <M> SCSI frontend driver
     <M> USB frontend driver
     <*> Framebuffer-device frontend driver
     <*>   Keyboard-device frontend driver
     [*] Disable serial port drivers
     <*> Export Xen attributes in sysfs
        Xen version compatibility (3.3.0 and later) --->
           3.3.0 and later
  -----------------------------------------------

  3-4. Xenifying Kernel - Make & install
  # export CONCURRENCY_LEVEL=5
  # make => maybe some hours ... --;
  # make modules
  # make modules_install  
  # make install
   * If using mkinitramfs,
  # mkinitramfs -o /boot/initrd.img-2.6.31.12-xen-byMe 2.6.31.12-xen-byMe
   * Or if mkinitrd,
  # depmod -a 2.6.31.12-xen-byMe
  # mkinitrd /boot/initrd-2.6.31.12-xen-byMe.img 2.6.31.12-xen-byMe
  
  3-5. Now, edit Grub menu
  # vi /boot/grub/menu.lst
  Title Xen 3.4.2 - Kernel 2.6.31.12 on OpenSUSE 11.2
    kernel /boot/xen.gz dom0_mem=512000
    module /boot/vmlinuz-2.6.31.12-xen-ByMe ...
    module /boot/initrd-2.6.31.12-xen-byMe.img <= Add this line
  
4. Reboot the system by Grub menu - Xen kernel

  # chkconfig --add xend
  # chkconfig xend on
  # /etc/init.d/xend start
  # chkconfig --add xendomains
  # chkconfig xendomains on
  # /etc/init.d/xendomains start
  
  # chkconfig --add libvirtd
  # chkconfig libvirt on
  # /etc/init.d/libvirtd start
  
5. Check if Xen dom0 system is correctly set up

  # ps aux | egrep "(xen|virt)" | sort
  ...xenwatch, xenbus, xend, HalDaemon.py, xenstored, xencolsoled, libvirtd, ...
  
All done, now test it by creating VMs.


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

Barracuda

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


오랜만에 Posting...^_^;;;

Sorry for all these English notations.

1. Get Cent5.4 DVD iso file be prepared in local disk(download it!)
 # wget http://blahblah/*.iso  => save it to /home/vmimg_src/cent54dvd.iso

2. Prepare sparse file for disk image & get filesystem ready(24GB virtual disk image)
 # dd if=/dev/zero of=/home/vmimg/centvdisk.img bs=6k seek=4096k count=1
 # mkfs.ext3 /home/vmimg/centvdisk,img

3. Mount iso image to loop device
 # losetup -f => Check free loop device number, consider its loop7
 # losetup -f /home/vmimg_src/cent54dvd.iso => assign iso to /dev/loop7
 # mkdir -p /mnt/iso/cent54dvd
 # mount -t iso9660 /dev/loop7 /mnt/iso/cent54dvd

4. Make httpd be prepared and copy all the installation files
 # mkdir /home/www/cent54
 # vi /etc/apache2/default-server.conf, modify
<Directory “/home/www/cent54”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
 # /etc/init.d/apache2 restart
 # cp -a /mnt/iso/cent54dvd /home/www/cent54

5. Make VM boot loader be prepared
 # cd /home/vmimg
 # mkdir cent54boot; cd cent54boot
 # cp /home/www/cent54/images/xen/vmlinuz ./vmlinuz-install-xen
 # cp /home/www/cent54/images/xen/initrd.img ./initrd-install-xen

6. edit CentOS PV domu configuration
 # cd ~/xen_config
 # vi cent54domu.cfg
-----------------------------------------------------------------------------
name='centOSdomU'
# After installation boot, disable these 2 lines
kernel='/home/vmimg/cent54boot/vmlinuz-install-xen'
ramdisk='/home/vmimg/cent54boot/initrd-install-xen'
# After installation boot, enable below 1 line
#bootloader='/usr/bin/pygrub'
extra='text'
memory=1024
vcpus=1
# After installation boot, disable below 1 line
disk=['file:/home/vmimg/centvdisk.img,xvda,w']
# After installation boot, enable below 1 line
#disk=['tap:aio:/home/vmimages/centvdisk.img,xvda,w']
audio=0
vif=['bridge=br0']
# After installation boot, disable below 1 line
on_poweroff='destroy'
on_reboot='restart'
on_crash='restart'
-----------------------------------------------------------------------------
* As for this process, U need to make root/swap partition manually

7. Create VM with xm command
 # xm create -c cent54domu.cfg => installation starts
   * If  reboot starts after installation, kill it!
 # xm destroy domain_number
 # cp cent54domu.cfg cent54domu_init.cfg
 # vi cent54domu.cfg => Do as the comment says & save it
 # xm create cent54domu.cfg

  * Now VM starts as a normal boot process
  * All done.


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

Barracuda

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


제목은 거창하지만 내용은 그냥 연대기의 나열이다...라고 하지만 그 중 몇 가지는 IT 역사상으로도
의미를 가지지 않을까...

Main Frame 시절, 서버 자원 - 하드웨어/소프트웨어/Sub-CPU, OS - 파티셔닝, 리소스 파티셔닝
Open Unix 들이 도입 - 한계성(기술, 고가의 도입 비용)
1999 미 VMware사, VMware Workstation 발표, Windows NT 4.0에서 Windows 95를 복수개 가동 (*)
 => 저가의 서버 환경에서 Virtual Machine 기술이 일반화 되는 신호탄
2004, MS가 Connectix 인수, MS Virtual Server 2005 출시 - 안정성, 성능 부족
 => 2005~2006 Hypervisor 개발 착수
2004, EMC, VMWare 인수
2006, XenSource/Virtual Iron, 상용화 Xen 출시 - 투자부족, 관리툴 미흡
2006 Amazon EC2 클라우드데이터센터 오픈(Xen based)
2007, Citrix, XenSource 인수(5억$)
2007, MS, SCVMM(System Center Virtual Machine Manager) 발표
2007, Oracle, Oracle VM(Xen based) 발표
2007, Sun, xVM(Xen based) 발표 -> Virtual Box
2007.12, MS, Hyper-V 베타버전 발표
~ 2008 HP, IBM 등 거대기업 가상화기술 도입, 솔루션 개발
          서버가상화, 네트워크가상화, 스토리지가상화, 어플리케이션가상화, 데스크톱가상화...
~ 2009 LGCNS, SKC&C, 삼성SDS 가상화 기반 클라우드 사업 본격화
~ 2010 VMWare ESX, Citrix XenServer, MS Hyper-V 등 출시, 경쟁 본격화


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

Barracuda

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


OpenSuse Xen Kernel 상태에서는 수동으로 Nvidia driver를 잡아주지 않으면 normal video(vga, vesa)에서 아름답지 못한 Suse Desktop을 써야 한다. 물론 Xen 가상화를 사용하지 않는다면 아래와 같이 간단(?)하게 최신 드라이버를 받아 설치하고 사용할 수 있다.
# init 3 ==> text mode로...
# mkdir /tmp/nvidia
# cd nvidia
# wget http://us.download.nvidia.com/XFree86/Linux-x86_64/195.36.15/NVIDIA-Linux-x86_64-195.36.15-pkg2.run
# sh ./NVIDIA-Linux-x86_64-195.36.15-pkg2.run -q
# sax2 -r -m 0=nvidia

Xen Kernel 상태에서 G-force 9800 을 작동시키기 위해 구글링을 해 보았지만 suselinux.co.kr의 freeboard((2009년 11/11 게시물), en.opensuse.org 들을 뒤적거려 보지만 별 다른 소득이 없을 것이다. 자칫 삽질하기 시작하면 겉잡을 수 없는 나락에 빠지는 수고(?)를 겪게 될 것이니 주의 !!

2007년을 기준으로 nvidia가 linux를 지원하는 방법이 바뀌었으며, 2009년 11월까지의 Know how도 Suse 등의 driver 디렉토리 구조가 조금씩 바뀌면서 정답이 거의 없어졌기 때문이다. 그 중에서 본인의 환경에 맞는 해결법을 가장 근접하게 제시한 곳은 http://en.opensuse.org/Talk:Use_Nvidia_driver_with_Xen 바로 여기이지만, 글로 옮기는 도중의 삽질이었는지 모르겠지만 2개의 know-how 글들이 묘하게 어긋나 있어서 살짝 약 오른다. 어긋난 부분을 아래와 같이 정리해본다.

* 위의 최신버전(195.36.15)의 nvidia는 일단 포기함이 현명하다
우선 zypper 또는 yast 로 아래의 package들을 설치해 두어야 한다. 모든 작업은 root 권한에서 수행한다.
kernel-source kernel-syms kernel-xen gcc binutils make
* Xen Kernel booting 상태에서 작업한다

# init 3 (또는 vi /etc/inittab 하여 id:5:initdefault 의 5를 3으로 바꾸고 reboot)
# mkdir /tmp/nvidia; cd /tmp/nvidia
# wget http://us.download.nvidia.com/XFree86/Linux-x86_64/185.18.36/NVIDIA-Linux-x86_64-185.18.36-pkg2.run
# chmod u+x NVIDIA-Linux-x86_64-185.18.36-pkg2.run
# ./NVIDIA-Linux-x86_64-185.18.36-pkg2.run --extract only
# cd /tmp/nvidia/NVIDIA-Linux-x86_64-185.18.36-pkg2/usr/src/nv
# vi Makefile.kbuild ==> EXTRA_CFLAGS += -Wall.. 줄 아래에 빈 칸을 열고 아래 2줄의 내용을 추가한다
XEN_FEATURES := $(shell grep "D xen_features" /boot/System.map-$(shell uname -r) | colrm 17)
EXTRA_LDFLAGS := --defsym xen_features=0x$(XEN_FEATURES)
저장하고 prompt로 빠진다.

# export IGNORE_XEN_PRESENCE=1
# export SYSSRC=/lib/modules/$(uname -r)/source
# export SYSOUT=/lib/modules/$(uname -r)/build

# make module
* 여기까지 성공했으면 현재 디렉토리에 nvidia.ko 파일이 생성될 것이다

# cp nvidia.ko /lib/modules/$(uname -r)/kernel/drivers/video
# cd /tmp/nvidia/NVIDIA-Linux-x86_64-185.18.36-pkg2/usr/X11R6/lib/modules/drivers
# cp nvidia_drv.so /usr/lib64/xorg/modules/updates/drivers/
# cp nvidia_drv.so /usr/X11R6/lib/modules/drivers
# cd /lib/modules/$(uname -r)/kernel/drivers/video/
# depmod -a
# modprobe nvidia
# startx
* 성공적으로 X server 가 기동되면 terminal을 띄워서 /etc/inittab 의 id:5:initdefault: 로 원상복구하고
# shutdown -r now ==> restart, xen kernel 로 부팅한다.



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

Barracuda

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