Install Ubuntu 9.04 JeOS

Bookmark and Share

JeOS(Just Enough OS)는 주로 가상머신을 위하여 사용되는, OS로써 최소한의 내용만 담고 있는 형태의 우분투 배포본의 한 가지이다. (desktop, server 버전과 함께 별도의 iso로 배포되던 것이, 근래에는 server 버전에 녹아들어갔다.)

개요

업무용 가상 서버의 기반으로 JeOS를 써볼까 하는 생각이 들어서 (용량 문제도 있고, 시험하고 싶은 생각도 있고) 이 작업을 시작한다.

일단은 수동 설치를 통하여 배포본 자체의 활용 가능성을 확인할 것이고 차후 debootstrap 또는 vmbuilder 등의 방식을 이용한 자동 설치 부분을 확인하려고 한다.

kvm 위에 JeOS 설치하기

먼저, 설정 생성용 스크립트로 표준 설정을 만들어 낸다. 설정 생성 스크립트는 디스크 세 개를 사용하는 VM을 만들 수 있도록 작성되어 있다. (단, 어떤 이유에서인지 디스크 3 개가 모두 살아있는 상태에서 정상적인 설치가 불가하여 일단 디스크 하나만 사용하여 설치를 진행하는 방식을 취하고 있다. 상세 분석 필요)

sio4@jangseung:/box/vms$ ./genxml.sh 
name of vm: u904j64
size of ram: 512
number of cpus: 2
path of cdrom: /box/isos/ubuntu/ubuntu-9.04-server-amd64.iso
disk size of sys: 4
Formatting '/box/vms/u904j64/u904j64-sys.qcow2', fmt=qcow2, size=4194304 kB
disk size of tmp: 2
Formatting '/box/vms/u904j64/u904j64-tmp.qcow2', fmt=qcow2, size=2097152 kB
disk size of opt: 8
Formatting '/box/vms/u904j64/u904j64-opt.qcow2', fmt=qcow2, size=8388608 kB
sio4@jangseung:/box/vms$ tar zcf u904j64-config.tar.gz u904j64/
sio4@jangseung:/box/vms$

이렇게 만들어진 xml 파일을 이용하여 libvirt에 등록하고, VM을 실행하여 설치를 진행한다.

sio4@jangseung:/box/vms$ virsh define u904j64/u904j64.xml 
Connecting to uri: qemu:///system
Domain u904j64 defined from u904j64/u904j64.xml

sio4@jangseung:/box/vms$ virt-viewer -c qemu:///system --wait u904j64 &
[1] 15340
sio4@jangseung:/box/vms$ virsh start u904j64
Connecting to uri: qemu:///system
Domain u904j64 started

sio4@jangseung:/box/vms$

virt-viewer 화면이 뜨면 다음의 과정에 따라 최소 설치 버전의 설치를 진행한다.

  1. 언어 선택
  2. F4를 눌러 "최소 가상머신 설치" 선택
  3. 그리고 몇 번의 Enter (keyboard, …)
  4. hostname은 jeos-template으로 지정
  5. 파티션은 수동 (스왑없이 전체를 '/'로 설정)
  6. … 사용자 설정, …
  7. 자동 업데이트 하지 않음
  8. OpenSSH server 선택
  9. 그러면, 자동으로 grub 설정을 마치고 재부팅.

여기서 의문점 : 이렇게 재부팅하게 되면 다음의 메시지와 함께 부팅이 중단된다. 이거… 나름 "기능"인가?

Boot from CD-Rom...
CDROM boot failure code : 0003
Boot from CD-Rom failed:L could not read the boot disk
FATAL: No bootable device.

가상의 CD 이미지다 보니까, 게다가 "virsh define"을 다시 해주지 않으면 CD 제거와 부팅 매체 변경이 불가능한 상황이다보니 이런 결과가 오히려 반갑다. (아마도 "기능"인 것 같다.)

여기서 백업 한 번 하고,

sio4@jangseung:/box/vms$ tar zcf ../backups/vm-u904j64-installed.tar.gz  u904j64
sio4@jangseung:/box/vms$

이제 xml 파일을 편집하여 boot 매체를 'cdrom'에서 'hd' 바꾸고, 막아놓은 2,3번째 디스크 열어준 후 다시 부팅.

sio4@jangseung:/box/vms$ vi u904j64/u904j64.xml 
sio4@jangseung:/box/vms$ virsh define u904j64/u904j64.xml 
Connecting to uri: qemu:///system
Domain u904j64 defined from u904j64/u904j64.xml

sio4@jangseung:/box/vms$ virsh destroy u904j64
Connecting to uri: qemu:///system
Domain u904j64 destroyed

[1]+  Done                    virt-viewer -c qemu:///system --wait u904j64
sio4@jangseung:/box/vms$ virsh start u904j64
Connecting to uri: qemu:///system
Domain u904j64 started

sio4@jangseung:/box/vms$ virt-viewer -c qemu:///system --wait u904j64
sio4@jangseung:/box/vms$

이제 새 시스템이 뜬다. 확인해보니, 360MB 정도의 용량이 설치되어 있다. 추가한 디스크를 잡아주고 다시 백업, undefine 하면 기반 마련 완료.

$ sudo vi /etc/fstab
$ sudo fdisk /dev/sdb
$ sudo fdisk /dev/sdc
$ sudo mkfs /dev/sdb1
$ sudo mkfs /dev/sdc1
$ sudo halt -p
sio4@jangseung:/box/vms$ tar zcf ../backups/vm-u904j64-installed.tar.gz u904j64
sio4@jangseung:/box/vms$ ls -sh ../backups/vm-u904*
197M ../backups/vm-u904j64-installed.tar.gz
197M ../backups/vm-u904j64-setup.tar.gz
273M ../backups/vm-u904s64-installed.tar.gz
268M ../backups/vm-u904s64-justinst.tar.gz
sio4@jangseung:/box/vms$  virsh undefine u904j64
Connecting to uri: qemu:///system
Domain u904j64 has been undefined

sio4@jangseung:/box/vms$

그런데 이게 실질적으로 얼마나 다른 것일까?

병적인 공간과 깔끔에 대한 집착!

(아~ 누가 나의 이 병적인 공간과 깔끔에 대한 집착을 걷어줬으면…)

디스크 이미지를 작고 깔끔하게 유지하기 위하여 다음의 과정을 거져 설치 후 추가 작업(두 개의 추가 디스크 장착 등)을 진행했다.

"되돌리기"가 가능한 작업 환경 만들기

가상머신의 디스크를 qcow2 이미지로 만들었을 경우, 이것이 지원하는 "바탕 이미지 + 변경분" 형태의 기능을 사용할 수 있다. 이 기능을 사용함으로써, 사용자는 특정 시점으로부터의 변경을 별도로 보관하고, 그 내용을 선택적으로 최종 반영하거나 버릴 수 있다.

이러한 작업은 qcow 이미지를 관리하는 도구인 qemu-img를 통하여 이루어진다.

작업 명령
원본 생성 qemu-img create -f qcow2 os-base.qcow2
변경 이미지 생성 qemu-img create -f qcow2 -b os-base.qcow2 os-screen.ovl
변경분 반영하기 qemu-img commit -f qcow2 os-screen.ovl
변경분 버리기 qemu-img create -f qcow2 -b os-base.qcow2 os-screen.ovl

설정 작업 진행

초기 설정 내용은 /tmp 및 /opt 파티셔닝, 파일시스템 만들기, fstab 설정 등이다. /tmp 와 /opt는 각각 서로 다른 파일로 작성되었고 시스템을 담은 '/'는 -sys 파일에, 휘발성 자료를 담을 '/tmp'는 -tmp 파일에, 업무용 데이터를 저장할 '/opt'는 -opt 파일에 담도록 구성하였다.

파일시스템을 만드는 작업과 fstab을 설정하는 작업은 각각 독립적으로 진행되었다.

  1. 부팅 후 두 디스크에 대한 fdisk, mkfs 수행
  2. 종료 후 -opt, -tmp 는 커밋, -sys는 버리기
  3. 다시 부팅 후 /etc/fstab 수정, 종료하고 -sys만 커밋
sio4@jangseung:/box/vms/u904j64$ ls -l
total 601044
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:12 u904j64-opt.ovl
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:11 u904j64-opt.qcow2
-rw-r--r-- 1 sio4 sio4     28672 2009-06-18 16:11 u904j64-sys.ovl
-rw-r--r-- 1 sio4 sio4 614748160 2009-06-18 13:40 u904j64-sys.qcow2
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:11 u904j64-tmp.ovl
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:11 u904j64-tmp.qcow2
-rw-r--r-- 1 sio4 sio4      1140 2009-06-18 16:14 u904j64.xml
sio4@jangseung:/box/vms/u904j64$

이 상태에서, 파티셔닝 작업을 진행. 그 결과, 아래와 같이 -opt, -tmp 의 오버레이에 많은 변경이 발생했다.

<...>
sio4@jangseung:/box/vms/u904j64$ ls -l
total 703796
-rw-r--r-- 1 sio4 sio4  68284416 2009-06-18 16:20 u904j64-opt.ovl
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:11 u904j64-opt.qcow2
-rw-r--r-- 1 sio4 sio4   2269184 2009-06-18 16:21 u904j64-sys.ovl
-rw-r--r-- 1 sio4 sio4 614748160 2009-06-18 13:40 u904j64-sys.qcow2
-rw-r--r-- 1 sio4 sio4  34611200 2009-06-18 16:20 u904j64-tmp.ovl
-rw-r--r-- 1 sio4 sio4     20480 2009-06-18 16:11 u904j64-tmp.qcow2
-rw-r--r-- 1 sio4 sio4       509 2009-06-18 16:18 u904j64.description
-rw-r--r-- 1 sio4 sio4      1140 2009-06-18 16:14 u904j64.xml
sio4@jangseung:/box/vms/u904j64$

이 상태에서 두 이미지 변경분에 대한 커밋을 진행하면 다음과 같이 변경분의 크기와 같게 바탕 이미지가 변경된 것을 알 수 있다.

sio4@jangseung:/box/vms/u904j64$ qemu-img commit -f qcow2 u904j64-tmp.ovl
Image committed.
sio4@jangseung:/box/vms/u904j64$ qemu-img commit -f qcow2 u904j64-opt.ovl 
Image committed.
sio4@jangseung:/box/vms/u904j64$ ls -al
total 804364
drwxr-xr-x  2 sio4 sio4      4096 2009-06-18 16:26 .
drwxr-xr-x 12 sio4 sio4      4096 2009-06-18 16:07 ..
-rwxr-xr-x  1 sio4 sio4       440 2009-06-18 16:26 disk.sh
-rw-r--r--  1 sio4 sio4  68284416 2009-06-18 16:20 u904j64-opt.ovl
-rw-r--r--  1 sio4 sio4  68284416 2009-06-18 16:22 u904j64-opt.qcow2
-rw-r--r--  1 sio4 sio4   2269184 2009-06-18 16:21 u904j64-sys.ovl
-rw-r--r--  1 sio4 sio4 614748160 2009-06-18 13:40 u904j64-sys.qcow2
-rw-r--r--  1 sio4 sio4  34611200 2009-06-18 16:20 u904j64-tmp.ovl
-rw-r--r--  1 sio4 sio4  34611200 2009-06-18 16:22 u904j64-tmp.qcow2
-rw-r--r--  1 sio4 sio4       509 2009-06-18 16:18 u904j64.description
-rw-r--r--  1 sio4 sio4      1140 2009-06-18 16:14 u904j64.xml
sio4@jangseung:/box/vms/u904j64$

변경된 내용을 바탕 이미지에 반영했으니 다시 오버레이 이미지를 현 상태를 바탕으로 초기화한다.

sio4@jangseung:/box/vms/u904j64$ ./disk.sh  reset
Formatting 'u904j64-sys.ovl', fmt=qcow2, backing_file=u904j64-sys.qcow2, size=4194304 kB
Formatting 'u904j64-tmp.ovl', fmt=qcow2, backing_file=u904j64-tmp.qcow2, size=2097152 kB
Formatting 'u904j64-opt.ovl', fmt=qcow2, backing_file=u904j64-opt.qcow2, size=2097152 kB
sio4@jangseung:/box/vms/u904j64$ ls -al
total 701616
drwxr-xr-x  2 sio4 sio4      4096 2009-06-18 16:26 .
drwxr-xr-x 12 sio4 sio4      4096 2009-06-18 16:07 ..
-rwxr-xr-x  1 sio4 sio4       440 2009-06-18 16:26 disk.sh
-rw-r--r--  1 sio4 sio4     20480 2009-06-18 16:27 u904j64-opt.ovl
-rw-r--r--  1 sio4 sio4  68284416 2009-06-18 16:22 u904j64-opt.qcow2
-rw-r--r--  1 sio4 sio4     28672 2009-06-18 16:27 u904j64-sys.ovl
-rw-r--r--  1 sio4 sio4 614748160 2009-06-18 13:40 u904j64-sys.qcow2
-rw-r--r--  1 sio4 sio4     20480 2009-06-18 16:27 u904j64-tmp.ovl
-rw-r--r--  1 sio4 sio4  34611200 2009-06-18 16:22 u904j64-tmp.qcow2
-rw-r--r--  1 sio4 sio4       509 2009-06-18 16:18 u904j64.description
-rw-r--r--  1 sio4 sio4      1140 2009-06-18 16:14 u904j64.xml
sio4@jangseung:/box/vms/u904j64$

이렇게 한 사이클의 변경 작업을 살펴보았다.


물론 약간의 호기심이 작용하는 부분도 있기는 하다. 그렇다고 이렇게 꼭 복잡하게 일을 처리해야 하는 이유가 있는가? 이쯤 되면 정말 병 아닌가?

To Do

  • 원본->복제->임시->스냅샷저장->임시->리셋->커밋 흐름구조 그리고 (dot으로)
  • 스크립트 첨부하기
  • 시간적 생명주기 모델 말고 성격에 따른(공유, 할당, 영구, 휘발성 등) 모델 고민하여 넣기
  • 이 모든 것을 자동화하기

Bookmark and Share


따로 명시하지 않는 한에서 이 사이트의 모든 콘텐츠는 다음의 라이선스를 따릅니다: Creative Commons Attribution-NonCommercial 3.0 License