오랜만에 또 테크니컬 노트를 올린다.
일단, 이 글의 아이디어는 N 모 게임회사를 다니는 System Engineer 박모 씨의
질문으로 인해 떠올라 작성된 글이다.
배경 :
Ubuntu 10.04 를 개발팀에서 요구하였으나, IBM X3XXX M4 장비의 LSI 드라이버를
인식하지 못해 Bare-metal 한 설치가 불가능 한 상황.
하지만 나의 배경은 Oracle Linux 를 이용한다...
준비물 : OL6, 맥주(킬케니) 12캔, 파파이스 포테이토칩, 하인즈캐찹!
앞서 설명했던 오라클에서 제공하는 템플릿을 사용하면, 매우매우 편하게
yum repository 에서 명시된 릴리즈 버젼을 다운받아 설치를 진행 해 준다.
OL6 에서 OL5 의 이미지를 돌리고, 그것을 chroot 환경으로 제공하겠다는 것!
( 참고로 사용된 OL6 host 는 OVM 에 가상화로 돌아가는 가상머신이다 ㅋㅋ )
1. Install lxc packages
# yum -y install lxc lxc-libs lxc-templates lxc-devel
2. Config to LXC
특별히 설정해 주어야 할 것은 없으나,
LXC 에서 사용할 root fs 를 지정해 두는 것이 좋다.
# vi /etc/lxc/default.conf
lxc.rootfs =/var/lib/lxc
lxc.network.type = veth
lxc.network.link = virbr0
lxc.network.flags = up
다음명령을 통해 기본적인 환경 확인이 가능하다.
# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-2.6.39-400.214.3.el6uek.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
3. Create rootfs for LXC
난 Btrfs 를 이용해 root filesystem 을 만들 것이다. ( 이미 만들어뒀다 -_- )
[Mirr-test ~]# btrfs subvolume list /kernel_git/
ID 282 gen 275950 top level 5 path test <<< 요놈을 쓸 것이다.
ID 284 gen 270305 top level 5 path test2
[Mirr-test ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda2 10224056 8822480 882600 91% /
tmpfs 1220352 579308 641044 48% /dev/shm
/dev/xvda1 101133 53752 42159 57% /boot
/dev/xvdb1 104856220 18602708 81231188 20% /kernel_git
[Mirr-test ~]# mount -o subvolid=282 /dev/xvdb1 /var/lib/lxc
[Mirr-test ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda2 10224056 8822508 882572 91% /
tmpfs 1220352 579308 641044 48% /dev/shm
/dev/xvda1 101133 53752 42159 57% /boot
/dev/xvdb1 104856220 18602708 81231188 20% /kernel_git
/dev/xvdb1 104856220 18602708 81231188 19% /var/lib/lxc
4. Create LXC via template
자 이제, 본격적인 Linux Container 를 생성 해 보자.
앞서 소개한 적이 있는데, 오라클은 LXC 를 위한 충분한 Template 을 제공하고 있다.
[Mirr-test /]# lxc-create -n ol5test -t /usr/share/lxc/templates/lxc-oracle -B btrfs -- -R 5.8
lxc-create: No config file specified, using the default config /etc/lxc/default.conf
Host is OracleServer 6.5
Create configuration file /var/lib/lxc/ol5test/config
Downloading release 5.8 for x86_64
Loaded plugins: changelog, downloadonly, fastestmirror, fs-snapshot, list-data, post-transaction-actions, protectbase, refresh-
: packagekit, security, upgrade-helper
ol5_u8_base | 1.4 kB 00:00
LXC 의 이름은 ol5test, template 은 /usr/share/lxc/templates/lxc-oracle 을 사용,
Backing-store type 은 btrfs 임을 지정해 준 것이며,
특별히 Release 버젼을 5.8 로 사용하겠다고 지정해 준 것이다.
Release 버젼을 지정 해 주면, yum repository 에서 해당 release 버젼에 맞는 패키지들을
자동 다운로드 및 설치하도록 templates 가 구성되어 있음을 알 수 있다. 올학흘 쫭! +.,+
간단하게 설치과정에 대해서 설명하자면, btrfs 의 파일시스템을 이용하여,
ol5test 라는 서브볼륨을 생성한 뒤, 해당 서브볼륨에,
yum repository 로 부터 얻어온 package 들을 debootstrap 라는 툴을 이용하여
마치 설치과정을 거친 것 처럼 만들어 주는 것이다.
원래는 virsh 를 이용해 empty container 를 libvirt 로 접속하여 직접 console 연결하여
리눅스를 설치하는 것과 같이 접근하는 방법을 소개해 볼까 했는데,
시간상의 문제도 있고, 귀차니즘도 한몫 하여,
간단히 libvirt 를 이용하여 virsh 툴을 통해 마치 xen 이나 kvm 처럼 다룰 수 도 있음을
살짝 언급만 해주고 가겠다.... 나중에 게으름 없어지면 한번 시도해 주겠다....
( ... Snip ... )
Complete!
Fixing (downgrading) rpm database from version 9
Rebuilding rpm database
Configuring container for Oracle Linux 5.8
Added container user:oracle password:oracle
Added container user:root password:root
Container : /var/lib/lxc/ol5test/rootfs
Config : /var/lib/lxc/ol5test/config
Network : eth0 (veth) on virbr0
'/usr/share/lxc/templates/lxc-oracle' template installed
'ol5test' created
자, 완료 되었다. Template 의 설정에 의해 oracle 계정과 root 계정 설정이 되었다.
[Mirr-test /]# cd /var/lib/lxc/ol5test/
[Mirr-test ol5test]# ls -lah
total 8.0K
drwxr-xr-x. 1 root root 34 Mar 9 13:48 .
drwx------. 1 root root 94 Mar 9 13:57 ..
-rw-r--r--. 1 root root 2.1K Mar 9 13:48 config
-rw-r--r--. 1 root root 207 Mar 9 13:48 fstab
drwxr-xr-x. 1 root root 140 Mar 9 13:57 rootfs
[root@Mirr-test ol5test]# btrfs subvolume list /var/lib/lxc/
ID 282 gen 298831 top level 5 path test
ID 284 gen 270305 top level 5 path test2
ID 398 gen 298831 top level 282 path ol5test/rootfs
[Mirr-test ol5test]# ls -lah rootfs/
total 0
drwxr-xr-x. 1 root root 140 Mar 9 13:57 .
drwxr-xr-x. 1 root root 34 Mar 9 13:48 ..
drwxr-xr-x. 1 root root 768 Mar 9 13:57 bin
drwxr-xr-x. 1 root root 0 Feb 17 2010 boot
drwxr-xr-x. 1 root root 130 Mar 9 13:57 dev
drwxr-xr-x. 1 root root 1.7K Mar 9 13:57 etc
drwxr-xr-x. 1 root root 12 Mar 9 13:57 home
drwxr-xr-x. 1 root root 54 Mar 9 13:57 lib
drwxr-xr-x. 1 root root 4.2K Mar 9 13:57 lib64
drwxr-xr-x. 1 root root 0 Feb 17 2010 media
drwxr-xr-x. 1 root root 0 Feb 17 2010 mnt
drwxr-xr-x. 1 root root 0 Feb 17 2010 opt
dr-xr-xr-x. 1 root root 0 Feb 17 2010 proc
drwxr-x---. 1 root root 90 Mar 9 13:57 root
drwxr-xr-x. 1 root root 2.5K Mar 9 13:57 sbin
drwxr-xr-x. 1 root root 14 Mar 9 13:57 selinux
drwxr-xr-x. 1 root root 0 Feb 17 2010 srv
drwxr-xr-x. 1 root root 0 Feb 17 2010 sys
drwxrwxrwt. 1 root root 0 Feb 17 2010 tmp
drwxr-xr-x. 1 root root 122 Mar 9 13:57 usr
drwxr-xr-x. 1 root root 126 Mar 9 13:56 var
5. Start to LXC node
모든 준비는 끝났다, 이제 만들어진 컨테이너의 Power button 만 살짜쿵 눌러주는 것이다.
# lxc-start -n ol5test
INIT: version 2.86 booting
Welcome to Oracle Linux Oracle Linux Server release 5.8
Press 'I' to enter interactive startup.
Setting hostname ol5test: [ OK ]
Mounting local filesystems: [ OK ]
Enabling /etc/fstab swaps: [ OK ]
INIT: Entering runlevel: 3
Entering non-interactive startup
Starting mcstransd: [FAILED]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
Determining IP information for eth0... done.
[ OK ]
Starting restorecond: [ OK ]
Mounting other filesystems: [ OK ]
Starting system logger: [ OK ]
Starting sshd: [ OK ]
Oracle Linux Server release 5.8
Kernel 2.6.39-400.214.3.el6uek.x86_64 on an x86_64
ol5test login: root
Password:
root password 는 root 로 설정되어 있다.
ol5test login : root
Password :
Last login: Sun Mar 9 00:05:40 on lxc/console
[root@ol5test ~]#
[root@ol5test ~]# ls
[root@ol5test ~]# cat /etc/enterprise-release
Enterprise Linux Enterprise Linux Server release 5.8 (Carthage)
[root@ol5test ~]# rpm -qa | grep glibc
glibc-2.5-81
glibc-common-2.5-81
짜잔~ 보시는 바와 같이, kernel 은 물론 Host 의 커널을 이용하지만,
나머지 패키지들은.. 특히 glibc 등은 2.5 버젼을 사용하고 있음을 알 수 있다.
어차피 개발팀에서 요구하는 것들은 glibc 와 기타 5.X 대에서 사용 가능한
개발 툴들을 요구하는 것이였기에 Kernel 에 대한 K-api 등은 특별히 신경 쓸 필요가
없는 상황이므로, LXC 를 이용해 커널을 제외한 모든 환경을,
훌륭하게 제공을 되는 것이다.
( 사실, 잘 들어보면, 굳이 Legacy 버젼을 고집해야 할 필요가 없는 환경이였다. )
6. Advanced run to LXC node
일단 lxc-start 를 통해 실행하게 되면, host 로의 접근을 위해서는 다시 세션을 열거나 해야한다.
귀찮다면 lxc-start 실행 시 daemon 모드로 실행이 가능하다.
# lxc-start -n ol5test -d
# lxc-info -n ol5test
state: RUNNING
pid: 17031
# ps ax
17028 ? Ss 0:00 lxc-start -n ol5test -d
17031 ? Ss 0:00 init [3]
간단하지 않은가? init [3] 저녀석이 container 로 돌아가고 있는 실제 프로세스다.
접속은 간단히 lxc-console 명령을 통해 접속이 가능하며,
sshd 가 올라와 있기 때문에 새로운 session 을 열어 접속 하면 된다.
# ssh 192.168.122.130
The authenticity of host '192.168.122.130 (192.168.122.130)' can't be established.
RSA key fingerprint is ba:ca:83:68:c4:d0:94:eb:3c:75:17:db:cb:7b:76:2d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.130' (RSA) to the list of known hosts.
root@192.168.122.130's password:
Last login: Sun Mar 9 00:29:26 2014
[root@ol5test ~]#
이로써, 개발팀에서는 'kernel 이 약간 이상하다?' 라고 생각 할 뿐,
운용에 전혀 문제가 없게 되었다!! 밥팅이들 -_-
개발 참 발로해... 국내 최대의 게임사라는 아이들이 ㅋㅋ
오랜만에 포스팅 끝..
담엔 간단히 Kpartx 를 함께 이용해 이미 존재하는 vDIsk 의 내용을 확인하는 방법과,
LVM 복구를 하는 걸 간단히 작성 해 보도록 하겠음. 물론 지켜진적 한번도 없으나 ㅋ
2012/09/03 - [Skills/가상화(Hypervisors)] - 가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 1부
2012/09/09 - [Skills/가상화(Hypervisors)] - 가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 2부
'Skills > 가상화(Hypervisors)' 카테고리의 다른 글
Oracle 에서도 Desktop Virtualization Infrastructure 가 있다는거 아니? (0) | 2013.08.22 |
---|---|
가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 2부 (0) | 2012.09.09 |
가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 1부 (0) | 2012.09.03 |
IBM Developerworks 의 KVM 관련 글. (0) | 2011.07.15 |
virt-manager 및 가상화 관련 라이브러리들에대한 깨알정보 (0) | 2011.05.12 |