어쩌자고... 넷북에서 Xen을 돌리겠다는 건데?

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

좀 우끼는 일이지만, 삼성전자의 넷북인 NC10에 우분투를 설치하고 Xen 가상화 환경을 구축하려는 과정의 이야기이다. 실은, 어제 저녁에 이 과정에 얽힌 긴 글을 쓰고 초안으로 올려뒀는데, 오늘 보니 사라져버렸네... ScribeFire로 글을 작성했는데, 이렇게 작성한 몇몇 글 중에서 사라져버린 것은 이 번이 처음이다. 누구 문제인지는 모르겠으나... 오늘 아침 tistory 접속 자체가 잘 안되었던 것을 감안하면, Firefox의 문제일지도... 어쨌든 한 번 쓴 글을 다시 쓰려니 글 쓸 생각은 잘  안나고 짜증은 잘 난다. (에라 그만둘까 싶지만서도...)

넷북, NC10과 Xen

본론으로 들어가서, 그렇다. 넷북에 Xen을 올리겠다는 것은 조금 우끼는 일이다. 본격적인 "경험담"에 들어가기 전에 잠깐 Xen와 NC10의 궁합에 대해서 생각해봤다.

NC10은 삼성전자의 첫번째 넷북인데, Intel의 Atom N270 프로세서를 사용하고 있다. CPU 사양을 잠깐 살펴보면,

flags           : fpu de tsc msr pae mce cx8 apic mtrr mca cmov pat
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc
arch_perfmon pebs bts pni monitor ds_cpl est tm2 ssse3 xtpr lahf_lm

lm 도 없고, vmx 도 없다. 바꿔 말하면 x86-64 버전을 설치할 수도 없고 하드웨어 가상화 기능을 사용할 수도 없다는 뜻이다. 내 수중에 있는 기본 모델은 1GB의 RAM을 기본 장착한 상태인데 메모리 슬롯이 하나 밖에 없기 때문에 메모리 증설도 간단하지가 않다. 그런데 어째서 여기에 무슨 가상머신을 올리겠다고? (참고로 삼성전자의 다음 모델인 NC20은 VIA의 NANO칩을 쓴다고 한다. lm, vmx 다 된다던데? 솔깃~)

대답은 간단. 가벼우니까. 점점 무거운 Xnote를 어깨에 메고 다니는 것이 부담스럽게 느껴지던 차에, 이런 녀석이 옆에서 놀고 있는 꼴을 보니 써주지 않을 수가 있어야지. (그러고보니 고작 램 128MB, 256MB에서 가상머신 돌리면서 옆 팀의 512MB, 640MB 쓰는 동료들 부러워했던 때가 엇그제 같은데... 1.6GHz에 1GB 램이면 떡을 치는 사양 아니야?)

참고 : NC10의 주변 기기 사양

우분투/Xen 설치하기

어쨌든 NC10에 우분투를 설치하기 시작했다. 일단, 간단하게 기존에 설치하여 잘 돌아가고 있던 8.10 버전을 한 쪽 파티션에 복사, 다중 부팅을 하도록 했다. 그런데 이게 왠일, 시작부터 난관~! 8.10 버전의 우분투는 Xen의 Dom0를 지원하지 않는단다. 앞으로 계속 하지 않는다는 얘기도 있고(kvm을 밀고 있는 형국이므로 그럴만도 하다.) LTS에서만 될 거라는 얘기도 있고... 어쨌든 이번 작업의 목적은 "가상화"가 아니라 "Xen"이므로 간단한 결정을 했다. LTS이고 Xen 지원이 되는 8.04 버전으로 내리는 것. 결국, ubuntu 8.04 server i386 버전을 한 쪽 파티션에 깔았다.

8.10 버전의 Ubuntu를 NC10에 설치하는 것은 숨쉬는 것 만큼 간단했다. (물론, 약간의 수작업이 있어야 Wireless 등의 일부 기능을 사용할 수 있다. 본론은 아니므로 생략) 그런데 8.04는 다르더군. 설치를 한 참 진행하다가 죽어버리는 것이 아닌가! 결국 acpi=off 라는 부팅 옵션을 추가로 줌으로써 문제는 비껴 갈 수 있었다. (확인해보지는 않았지만 초기에 구워둔 CD를 사용하지 않고 8.04 버전의 최신 이미지인 8.04.2로 시도했다면 쉽게 갔을지도 모르겠다. 설치를 마친 후 최신 업데이트를 적용하고 커널도 최신으로 올리고 나니 acpi 관련 문제는 사라졌다.)

다음 순서로, ubuntu-xen-server 라는 이름의 메타 패키지를 통하여 xen 관련 패키지 설치를 마쳤다. 초반에 액땜을 해서 그런지 이 과정은 순조롭게 진행이 되었다. Xen커널 부팅을 확인한 후, 용도가 용도인지라 server 버전으로 설치했음에도 GUI가 필요했기 때문에 xorg 패키지와 간단한 wm인 openbox 패키지를 설치하였다. 그런데 이게 왠 일인가! Xen으로 부팅한 상태에서는 intel 온보드 그래픽카드를 사용하는 Xorg가 동작하지 않았다. 아니, 화면에 검게 변하면서 멈춰버렸다. (Xorg의 intel 드라이버 문제인지 kernel의 intel-agp 문제인지는 모르나, 아마도 정황으로 봐서 intel-agp와 Xen 사이에서 메모리 분쟁이 있는 것 같다.) "그래, vesa 쓰면 되지 뭐..."

Xorg, Xen, 그리고 945GME

쉽게 쉽게 안되면 피해가는 방식으로 여기까지 왔지만! 그런데 이게 뭔가?! vesa 모드로 Xorg를 띄우면 고작 800x600의 해상도로 뜨는 것이 아닌가! 안되는 것은 참아도 미운 것은 참을 수 없다! 그렇게 본격적인 삽질은 시작되었다.

시도해본 것들 :

  • intel 드라이버를 agp 없이 써보려는 시도 : 잘 안됨.
  • vesa 드라이버를 쓰면서 1024x600을 얻기 위해 xorg.conf 로 어떻게 해보려는 시도 : 잘 안됨
  • fbdev 드라이버를 쓸 각오를 하고 fbcon 띄워보려는 시도 : 헉! 왜 이런 시도를 한거야!

그렇다. 그런 시도를 한 것이 잘못이었다... 공식의 23-server 커널을 쓰면서 vga=0x314 옵션을 주면 800x600일 지언정 fbcon이 정상적으로 올라왔다. 그런데 23-xen을 올릴 때는 vga=... 도, video=... 도 먹질 않았다. xen이 원래 그런거니? 그럼 안되는데... 결국 커널 소스 패키지를 내려받아서 생애 최초의 deb 커스텀 빌드에 돌입! 몇 시간에 걸친 커널 컴파일을 시도했다.(이게 몇 년 만의 커널 컴파일인가? 기억도 나지 않는다!) 오라... 그랬더니, fbcon, vesafb를 built-in으로 했더니, xen으로 시작해도 fbcon이 잘 올라왔다. "이거야!". 여기서 멈춰도 되는데... 이놈의 결벽증은, 공식 커널에서도 왠지 설정을 잘 해주면 될 것 같은 생각이 자꾸 드는 것이다. 다시 커널을 공식 버전으로 복구하고 다양한 시도를 진행했다. 삽질의 끝은 어디인가? 포기! 아마도 뭔가 내가 모르는 것이 있는게다. 시간만 얼마가 지났는지...

그러던 길에 발견한 페이지(메일)가 바로 아래의 페이지 :

[Debian-eeepc-devel] 1024x600 console [was: Re: Video out toggling]

I have made some progress with this. The intelfb framebuffer driver doesn't support mode changing except for the VGA output. However, the uvesafb framebuffer driver does as long as the mode you want is known to the BIOS. But the Eee BIOS doesn't know about the panel's native resolution. This can be fixed using a utility called 915resolution, which hacks the RAM copy of the BIOS. But 915resolution doesn't know about the 945GME chip in the '901.

멍청한 비디오 바이오스의 모드 리포트를 소프트웨어적으로 고쳐주는 프로그램인데, NC10의 그래픽칩인 945GME 지원에 대한 패치가 있었던 것. (휘발성 수정이라서 Xorg를 위한 답은 되는데 FB를 위한 답은 되지 않는다. FB를 위한 grub 패치도 있는 것 같은데 시도하지는 않았다.) 그래... 쉽게 가는게 목표잖아. 커스텀 커널보다는 커스텀 유틸이 낫지. 결국, 생애 최초로 dpatch 를 써가며 커스텀 버전의 915resolution패키지를 빌드, 설치, 설정했다.

휴, 이제야 깔끔한 모습의 GUI를, Xen 환경에서 볼 수 있게 되었다. 이제부터 시작이다!

...

이게 얼마만의 삽질인가! 후훗~ 간만에 재밌기도 하고 :-)

(그런데 오랜만에 DE 가 아닌 WM-only로 쓰려니까... 좀 당황스러운데?


우분투 8.10에서 kvm을 이용한 가상서버 설정

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

개요

가물가물한 기억인데, kvm과의 첫 만남은 아마도 2007년 늦은 봄 정도였던 것 같다. 그 무렵이 드디어! kvm이 메인스트림 커널에 포함되고 그것을 기반으로 한 배포본이 등장하기 시작했던 무렵이기 때문이다. (요즘 가끔씩 깜짝 놀라기도 하는데, 되돌아보니 근 몇 년간 배포본에서 지원하지 않는 최신의 뭔가를 스스로 노력해서 써본 기억이 없다! 이럴수가!)

이런 저런 정황으로 봤을 때, 앞으로 리눅스 기반 가상화의 중심에 자리 잡을 것으로 예상했던 kvm의 첫 느낌은, (애써 감추려고 노력했지만) 사실 실망이었다. 너무 느리고 까다롭고... 하지만, 신생아라는 점을 고려하면, 그냥 "와~ 추카추카~ 이쁘네~~~ 잘키워~" 하고 호응해줄 수 밖에!

그로부터 채 1 년도 지나기 전에, kvm을 프로젝트에서 개발 플랫폼으로써 활용할 수 있었다는 것이, 기쁘지 않을 수 없다. :-) 그래서, 이번에는 내부 업무 시스템에 kvm을 적용해보기로 맘먹었다. (말이 길었는데,) 이 글은 그 과정에 대한 기록이다.

설치 및 설정 - 기본 설정

한 두 번도 아닌데, kvm은 설치할 때 마다 새로운 느낌이 있다. 아직 활발히 성장하고 있는 중이어서일까? 어쨌든, 이번 설치의 플랫폼은 우분투 8.10이다. 먼저, 다음 명령을 사용하여 kvm 관련 패키지를 설치했다.

$ sudo apt-get install ubuntu-virt-server

8.10 버전부터 새로 추가된 ubuntu-virt-server 패키지는 kvm, libvirt-bin, openssh-server 등의 세 패키지를 잡고 있는 가상화 서버 구성을 위한 메타패키지이다. 이와 함께 추가된 ubuntu-virt-mgmt 패키지는 virt-manager, python-vm-builder, virt-viewer 등의 관리용 패키지를 잡고 있는 메타 패키지인데, 이 번 작업 내용에는 포함되지 않았다. (현재 랩탑에서 사용중인 7.10 버전에서는 지원되지 않아서 일단 관련된 작업 및 시험은 보류했다.)

네트워킹 등의 일부 기능은 적절한 권한이 있어야 사용할 수 있다. 다음 명령을 이용하여 사용자를 libvirtd 그룹에 추가시켜준다. (물론, 다시 로그인을 해야 변경된 그룹 권한이 적용된다.)

$ sudo adduser `id -un` libvirtd

위의 과정이 정상적으로 수행되었다면, 다음과 같은 방식으로 작동 여부를 확인할 수 있다.

$ virsh -c qemu:///system list
Connecting to uri: qemu:///system
Id Name                 State
----------------------------------
$

가상머신 설치하기 - 가상 콘솔

이런! 가상머신을 설치하려고 보니 어쩔 수 없이 최소한의 클라이언트 기능을 설치할 수 밖에 없겠네... 애초의 계획은 클라이언트는 완전히 독립된 기계에서 운용하고 서버는 말 그대로 "가상화 기반"으로써만 활용하는 것이었다. 그런데... 랩탑 환경을 지금 바꾸기는 좀 무리가 있고 일단은 서버에 최소한의 관리 환경을 설치하도록 한다.

다음과 같은 방식으로 가상 콘솔 프로그램인 virt-viewer를 설치한다.

$ sudo apt-get install virt-viewer
[...]
다음 새 꾸러미를 설치할 것입니다:
  defoma fontconfig fontconfig-config hicolor-icon-theme libatk1.0-0
  libatk1.0-data libcairo2 libcups2 libdatrie0 libdrm2 libfontconfig1
  libfontenc1 libfreetype6 libgl1-mesa-glx libglu1-mesa libgtk-vnc-1.0-0
  libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libgtkglext1 libice6 libjpeg62
  libpango1.0-0 libpango1.0-common libpixman-1-0 libpng12-0 libsm6
  libthai-data libthai0 libtiff4 libxcb-render-util0 libxcb-render0
  libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxfont1 libxft2 libxi6
  libxinerama1 libxmu6 libxrandr2 libxrender1 libxt6 libxxf86vm1 ttf-dejavu
  ttf-dejavu-core ttf-dejavu-extra virt-viewer x-ttcidfont-conf
  xfonts-encodings xfonts-utils
[...]

virt-viewer는 말 그대로 가상머신 뷰어이다. 이 프로그램을 통하여 가상머신의 가상 콘솔에 접속할 수 있고, OS 설치 등의 현장에서만 실행할 수 있는 작업을 진행할 수 있다.

이것으로 준비는 거의 끝난 것 같다.

가상머신 설치하기 - 가상머신 생성

virt-install 이나 우분투 고유의 python-vm-builder (예전의 ubuntu-vm-builder) 등의, 설치 전용 유틸리티를 활용하여 생성과 동시에 설치를 진행하는 방식도 있고, 또는 virt-manager에서 적절한 생성을 마친 후, 가상머신을 기동시키고 설치를 진행할 수도 있다. 예전에는 virt-manager 방식이나 virt-install 방식을 시도해봤었는데, virt-manager 방식의 경우, 설치 속도 문제로 고생을 좀 했던 기억이 있다. virt-install의 경우, 설치 후 재부팅이 필요한 환경 등에서 좀 모자라다는 느낌을 받았었던 것 같은데 역시 기억이 살짝 희미해져 있다. 더욱 중요한 것은, virt-install의 경우, 여러 디스크를 붙이고 싶은 경우 등의 상세한 작업을 할 수 없었던 것으로 기억한다. 그래서 이번에는 다른 방식을 도입해 보았다.

이름하여 가상머신 생성기. genxml.sh라는 스크립트를 급조했다. 처음에는 조금 보편적인 설정이 가능하도록 하려다가, 시간도 없고. 또한 그렇게 까지 할 필요성을 느끼지도 못해서 내 스타일의 가상머신을 만들어내는 정도로 목표 수준을 낮췄다. 다음은 스크립트의 내용이다.

#!/bin/sh

VM_ROOT=/box/vms

vm_name=mercury
vm_mem=1024
vm_cpu=2
vm_mac=`echo "52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"`

echo -n "name of vm: "; read vm_name
vm_home=$VM_ROOT/$vm_name
mkdir -p $vm_home

echo -n "size of ram: "; read vm_mem
echo -n "number of cpus: "; read vm_cpu
echo -n "path of cdrom: "; read vm_cdrom
echo -n "disk size of sys: "; read size
qemu-img create $vm_home/$vm_name-sys.qcow2 -f qcow2 ${size}G
echo -n "disk size of tmp: "; read size
qemu-img create $vm_home/$vm_name-tmp.qcow2 -f qcow2 ${size}G
echo -n "disk size of opt: "; read size
qemu-img create $vm_home/$vm_name-opt.qcow2 -f qcow2 ${size}G

cat < $vm_name.xml >>EOF
<domain type="kvm">
  <name>$vm_name</name>
  <uuid>`uuidgen`</uuid>
  <memory>$(( $vm_mem * 1024 ))</memory>
  <currentmemory>$(( $vm_mem * 1024 ))</currentmemory>
  <vcpu>$vm_cpu</vcpu>
  <os>
    <type>hvm</type>
    <boot dev="hd"/>
  </os>
  </boot>
  <features>
    <acpi/>
  </features>
  <clock offset="utc" />
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type="file" device="disk">
      <source file="/$vm_home/$vm_name-sys.qcow2"/>
      <target dev="hda" bus="ide"/>
    </disk>
    <disk type="file" device="disk">
      <source file="/$vm_home/$vm_name-tmp.qcow2"/>
      <target dev="hdb" bus="ide"/>
    </disk>
    <disk type="file" device="disk">
      <source file="/$vm_home/$vm_name-opt.qcow2"/>
      <target dev="hdd" bus="ide"/>
    </disk>
    <disk type="file" device="cdrom">
      <source file="/$vm_cdrom"/>
      <target dev="hdc" bus="ide"/>
    </disk>
    <interface type="network">
      <mac address="$vm_mac"/>
      <source network="default"/>
    </interface>
    <input bus="ps2" type="mouse"/>
    <graphics type="vnc" port="-1" listen="127.0.0.1"/>
  </devices>
</domain>
EOF

이 스크립트를 이용하면 디스크 세 개를 달고 있는 가상머신 설정을 단숨에 만들어낼 수 있고 해당 디스크 이미지 역시 스크립트 내부에서 만들어낸다. 가상머신이 생성되는 위치는 스크립트 내부에 지정되어 있으며, 가상머신 이름을 이용한 디렉토리 안에 관련된 디스크 파일을 모아두는 방식으로 되어있다. 다만, 가상머신의 설정이 담긴 xml은 스크립트를 실행한 현재디렉토리에 떨어지게 되며, 다음 명령을 이용하여 이 xml 파일을 읽어들여 가상머신 설정을 완료하도록 할 수 있다.

$ ./genxml.sh
name of vm: u810si
size of ram: 512
number of cpus: 2
path of cdrom: /box/isos/ubuntu-8.10-server-i386.iso
disk size of sys: 6
Formatting '/box/vms/u810si/u810si-sys.qcow2', fmt=qcow2, size=6291456 kB
disk size of tmp: 1
Formatting '/box/vms/u810si/u810si-tmp.qcow2', fmt=qcow2, size=1048576 kB
disk size of opt: 2
Formatting '/box/vms/u810si/u810si-opt.qcow2', fmt=qcow2, size=2097152 kB
$ virsh -c qemu:///system define u810si.xml

이렇게, 우분투 8.10 서버용 i386 버전을 위한 가상머신 설정과 디스크 준비를 끝냈고, 마지막으로 virsh 쉘의 define 명령을 이용하여 만들어진 설정을 적용하였다. 이제 생성된 가상머신을 실행해보자.

$ virsh -c qemu:///system start u810si
Connecting to uri: qemu:///system

$ virt-viewer -c qemu:///system u810si

어라? 부팅에 실패했다! 왜냐하면, 기본 부팅 설정이 'hd' 즉, 하드디스크로 되어있기 때문. xml 파일을 열어서 다음의 내용을 수정해주고 다시 define 명령을 내려줘야 cdrom으로의 부팅이 가능하다. (그런데 왜 hd를 기본값으로 했을까? cdrom으로 바꿀까?)

9c9
<    <boot dev="hd">
---
>    <boot dev="cdrom">

어쨌든, cdrom으로 부팅을 하도록 설정하고, define 명령을 내려주고, 다시 start 명령을 내린 후 접속을 해보면 설치 화면이 떠 있는 것을 볼 수 있다. 이후의 과정은 일반적인 설치 과정이며, 최종적으로 재부팅. 어라? 그러면 다시 CD로 부팅할 줄 알았은데 그렇지가 않다. 그냥 부팅 오류가 발생했네? 이유는 모르겠지만 어차피 다시 부팅 설정을 바꿨어야 했으므로, 다음의 방식으로 설정을 바꿔주고 다시 시작해보자.

$ virsh -c qemu:///system destroy u810si
$ vi u810si.xml  (boot 부분 편집)
$ virsh -c qemu:///system define u810si.xml
$ virsh -c qemu:///system start u810si

휴, 이제 설치가 모두 끝났다.

아참, 이렇게 재부팅 하기 직전의 상태를 백업해 두는 것도 좋겠네.

가상머신 복제

이렇게 생성, 설정 및 설치를 마친 후, 늘 그렇듯이 설치 원본의 백업 및 복제 방안 마련에 들어간다. 백업은 간단한게, xml 파일과 디스크 이미지 파일을 tar 명령으로 묶어서 저장해두면 그 뿐. 그럼 복제는? 다음의 방식을 도입해봤다.

먼저, 간단한 스크립트를 하나 짰다. 이름은 copyvm.sh.

#!/bin/sh

src_vm=$1
dst_vm=$2

[ "$src_vm" = "" -o "$dst_vm" = "" ] && {
        echo "usage: copyvm.sh src dst"
        exit 1
}

[ ! -d "$src_vm" ] && { echo "source vm is not exist. abort!"; exit 1; }
[ -e "$dst_vm" ] && { echo "destination vm is already exist. abort!"; exit 1; }

vm_mac=`echo "52:54:00$(hexdump -e '/1 ":%02x"' -n 3 /dev/urandom)"`
vm_uuid=`uuidgen`

cp -a $src_vm $dst_vm
cd $dst_vm
rename "s/$src_vm/$dst_vm/" *
sed -i "s/$src_vm/$dst_vm/g" $dst_vm.xml
sed -i "s,<uuid>.*</uuid>,<uuid>$vm_uuid</uuid>," $dst_vm.xml
sed -i "s,<mac address=".*/">,<mac address="$vm_mac">," $dst_vm.xml

ls
cat $dst_vm.xml

내용은 간단하다. 인수 두 개를 받아서 첫 번째 인수로 받은 기존 VM을 두 번째 인수로 받은 이름의 새 VM으로 복사하고 설정 차원에서 중복되어서는 안되는 값만 바꿔주는 것이다.(MAC 주소와 UUID) 물론, OS 내부의 설정은 아직 변경하지 못한다. 불가능할 것 같지는 않은데... 현재로써는 복제 원본과 복제된 가상머신의 hostname, sshkey 등의 값이 같다는 한계가 있지만, 어쨌든 쓸만은 하다. 또한 복제 원본을 위한 템플릿 작업을 조금 한다면 더 좋겠지.

$ copyvm.sh u810si rails

이제 우분투 8.10 서버 i386 버전 기반의 rails 환경 복제 완료. 프로비저닝 시간? 한 10초?

새로운 가상머신을 시작시킨 후, 다음의 명령으로 필요한 추가 패키지를 설치해줬다.

$ sudo apt-get install vim
$ sudo apt-get install subversion
$ sudo apt-get install rails
$ sudo apt-get install rubygems

마치기

푸하하... 여기까지, 우분투 8.10 최신버전을 기반으로 한 가상 인프라 구축의 초기 단계와 가상머신 생성 및 복제 과정을 정리해봤다.

KLDPConf 8.12 후기

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브
어제, 2008년 12월 06일, 국내 최고의 FOSS 커뮤니티인 KLDP의 컨퍼런스 행사에 다녀왔다. 얼핏 기억하기에, 꽤 오래 전부터 KLDPConf 행사가 있었던 것 같은데, 내가 참가했던 것은 이번이 두 번째이다. ("나와 커뮤니티"에 대해서는 다음 기회에...혹시 기회가 된다면...:-) 이 글은, 바로 그 발걸음에 대한 기록이다.

아! 내 맘대로 KLDPConf 8.12라고 이름 붙였다. 위키를 기준으로 공식 이름은 "KLDPConf/20081206" 인데, 그냥 우분투 식으로 :-)



현장에서 받아야 할 택배도 있고 하여, 좀 더 빠르게 움직였어야 했건만, 애 엄마도 출근한 주말에 아들과 떨어지는 것이 어찌 아쉬운지...(아들도, 나도,...) 결국, 딱 떨어지는 시간만 가지고 집을 나섰다. 그런데 이게 왠일? 처음 가보는 가산 디지털단지의 길목은 어찌나 낯설던지... 전철역에서 내린 시간은 더도 말고 덜도 말고 딱 떨어지는 시간이었으나 그 전날 네이버맵에서 찾아봤던 간단해 보이던 길은... "흑 T.T 분명히 가까웠는데..." 추운 날씨에 걸음을 재촉하던 사람들을 잡고 물어 물어... 결국 'ㄷ'자로 꺾어서, 꺾어서 20분 정도 늦게야 행사장에 도착할 수 있었다. (요즘 뚜벅이용 네비게이션이 나온다는데... :-(



다행히, 행사 시작 전에 도착은 할 수 있었다. :-) 그리고는, 컨퍼런스 노트로 사용할 수 있었던 노트와 필기구 세트를 포함한 선물세트를 받은 후,

1. 모든 참가자의 자기소개
2.1. 김성훈님의 "허드슨 아저씨 이야기"
2.2. 허태준님의 "오픈소스 개발자 되기"
2.3. 서영진님의 "임베디드 리눅스 회사를 끌어왔던 이야기"
2.4. 서상욱님의 "nFORGE 개발 이야기"
2.5. 장정철님의 "Glade/GTK+ 이야기"
2.6. "인텔의 Moblin..."
3. 자유 토의 및 저녁 식사!

순으로 행사는 진행되었다.



이번 행사에서는 참자자들의 소개에 약간 주목해 보았다. 리눅스의 시장에서의 현재가 궁금했기 때문. 모두 꼼꼼히 적지는 못했지만, 참가자들의 직업,관심분야 분포는 대충 다음과 같았다.

kernel 관련 -- 3명
임베디드 관련 -- 16명
이동/무선 통신 관련 -- 2명
(디지털) TV관련 -- 2명
CDN -- 2명
소프트웨어 엔지니어링 -- 6명

어라? 한 7~80명은 오셨을 텐데... 좀 잘못 뽑았나? 어쨌든 임베디드쪽의 강세가 강하게 나타났고, 이슈트래커, 프로그램 분석, 애자일 등의 소프트웨어 엔지니어링에 대한 관심도 높은 것 같았다. 다섯 개의 발표 주제에 가운데 임베디드 관련 이야기, nFORGE나 허드슨 관련 이야기 등이 미리 공지된 이유도 어느 정도는 있겠지만, 그게 전부는 아닐 것이라고 생각한다. 어찌보면 그런 발표 주제가 선정될 수 있었다는 점만 봐도... 어라? 시작은 데이터를 가지고 뭔가 얘기하는 척 하더니 결국은 추측과 주장이네?

아무튼, 참가자들의 관심사 키워드를 뽑아보면 다음과 같다.

SuSE, ata, WiMAX, 만도, 로봇, gtk, 홍콩, 차량용 블랙박스, 게임서버, 엠텍비전:-), 데스크탑, SAS, 경쟁상대, 번역, DTV, 대학원, 커널, CDN, 칩, 지원, 휴대폰, arm9, 음성코덱, 이슈트래커, 리눅스플랫폼, 모바일, 개방형, 리모, MID, 스마트카드, 패킷, 프로그램분석, SE, 테스트, GTK+, 프레임웍, 이미지유사도, 폐수, 개발효율, 애자일,...



다음은 "준비된 발표"

1. 허드슨씨를 만나보세요.

홍콩 과기대의 김성훈님께서 귀찮은 반복작업을 싫어하는 고급인재들에게 허드슨씨를 만나볼 것을 간단한 예를 통해서 권해주셨다. 고급이 아님에도 불구하고, 두 번 이상 할 일이라면 대체로 자동화를 해야만 하는, 게으름은 그 들 못지않은 나라서 관심을 가지고 있었던 "지속적 통합" 도구의 하나이다. 직간접적인 코딩을 하지 않은지가 일년이 되어가다 보니, 좀 느슨한 관심으로 들었던 시간이었는데, 김성훈님의 프리젠테이션에 살짝 매료되어 버렸다.

"팀에서 받아들이지 않는다면 혼자라도 써라. 그럼 팀에서 인기 개발자가 될 걸?"

2. 오픈소스 개발자 되기

야생의 밟고 밟히는 세상에 대하여, 그리고 그 익숙해지기 어려운 야생에 익숙해져서, 결국에는 오픈소스 개발자의 자유로운 영혼을 누리기까지의 과정을 SuSE 리눅스의 허태준님이 진솔하고 실질적이고 또한 핵심을 꼭 꼭 찍어서 설명해주셨다.

"직장을 옮겨도 같은 일", "자유도", "누가 동료인가?", "까칠한 전통",...

3. 임베디드 회사... 무제의 발표

서영진님께서 97년에 회사를 시작하여 오늘(Windriver에 팔아 버림)까지의 기로에 대하여 간략하게 설명해주셨다. 기억에 남는 말씀은,

"소프트웨어는 글로벌 경쟁"
"우리 산업 환경에서는 임베디드"
"헨드폰은 2~3년인데 자동차는 10년!"
"나도 안 살 디자인인데 패션의 이테리에서 1x0만대?"

4. nFORGE 이야기

NHN의 서상욱님이 GFORGE를 기반으로 하는 nFORGE의 개발 과정과 컨셉, 향후 일정 등에 대하여 얘기를 해주셨다. 괭장히 관심이 많은 분야이기도 하고, 솔루션/패키지로써가 아니라 서비스로써의 Forge에 관심이 있기 때문에 그들의 앞으로의 기로가... 참으로 궁금하다. 당장은? 잘 모르겠다. 어쨌든 "개발자 생태계 육성"이라는 표현이 가슴에 와 닿는다. 권순선님의 "한국 사람들 만의 특성 있다고 본다"는 첨언은 반 쯤 이해가 가고 반 쯤은 잘 모르겠다. 어쨌든 nFORGE를 비롯해서 NAVER DeveloperCenter 계획이 성공적으로 자리잡기를 바란다.

5. GTK+/Glade 프로그래밍
6. Intel, Moblin, ...

헉! 나의 집중력의 한계인가? 이 쯤 해서는 노트도 좀... 부족하고 기억도 가물가물...



그리고 이어진 자유 토론/네트워킹 시간. 나는 허태준님을 중심으로 모여있던 그 무리에 속해 있었는데, 우리 모임이 가장 재미있었을 것이라고 생각하고 있다! :-)

허태준님에게 커널 개발자의 세계, 어떻게 시작된 것인지 등의 몇몇 질문을 시작으로 자리가 형성되기 시작하여 CDN쪽 이야기, 네트워크/TCP이야기, Netbook/MID 이야기, 아키텍쳐 이야기, IT 대란(잃어버릴 5년) 등등... 재미있는 시간을 가졌다.

KLDPConf의 핵심은 바로 이 시간에 있는 것 같다. 그다지 사교적이지 못한 성격 탓에 좀 더 적극적으로 덤비지 못하는 것이 좀 아쉽지만, 역시 이 시간의 재미는 쏠쏠하다.

자유토론 중간에 파파이스 햄버거였나? 가벼운 저녁 해결이 있었고, 이야기는 이어져 갔다.



식사 시간이었던가 자유 토론 시작 무렵이었던가... 권순선님의 이런 저런 얘기(요는, 정체되어 있다. 끊긴다. 확산의 노력이 필요. 이런 자리도 알려달라. 무플보다는 악플... 등등)가 있었는데, 어찌나 뜨끔하던지... 사실, KLDP라는 공간 또는 조직에 대한 나의 참여는 거의 '0'이라고 볼 수 있으니까.

비교적 초기부터 리눅스를 써 왔던 입장에서 지역 LUG 활동도 했었고, 10년을 리눅스 관련 일을 하고 있고, 나름대로 "뼈 속까지 리눅서"라는 자부심도 있고,... 또 Usenet이나 Mailing list가 소통의 중심이던 시절에는 나름대로 열심히 활동도 했었고...... 그런데 이 Web이라는 (아끼는) 녀석을 기반으로 한 커뮤니티에는 어째서인지 잘 적응이 되지 않는다. 왜일까?

나의 성향이 그런가보다. Usenet이나 Mailing list에서 기술 이슈를 놓고 서로 난도질, 또는 이 날 나왔던 표현으로 하지면 밟고 밟히는 분위기에는 잘 적응이 되는 것 같은데, 이상하게도 "친하게" 안부도 전하고 "사는 얘기"도 하는 밝은 느낌의 공간은 좀... 뭐랄까... 잘 적응이 안되어 왔던 것 같다. :-)

집에 돌아와 주말의 아빠 모드에서의 시간을 보내고, 오늘은 마트에도 다녀오고, 사랑스런 아들의 토마스 기차 트랙도 하나 사주고... 그래서 점수좀 따고, 저녁 내 같이 놀다가 다시 랩탑 앞에 앉았다. 그런데 좀 슬프네. 권순선님이 그 날의 자리에서 표현했던 절망 앞의 느낌이랄까? 그런 것이 표현했던 것 이상의 것이었나 보다. 나도 한 때 작은 조직을 이끌어 봤었고, 오래된 기억이지만 비슷한 느낌을 받았던 것 같기도 하고, 이해할 수 없는 것이 아니므로 더욱 안타깝다.

오늘의 후기에 적당한 주제는 아니므로 이 이야기는 다음의 기회로 미루자.



아무튼, 다양한 분야의, 그러나 리눅스 하나로 뭉친! 뭐랄까... 감히 "동료" 라고 말해도 될까? 그런 사람들과 함께 했던 즐거운 시간이었다.
KLDP도, KLDPConf도 영원을 뛰어 넘어 날아다녀라~!



덧붙임: 참가자 선물 세트

NHN의 티셔츠와 노트, 볼펜, 네이버윈도 모양의 자석

NHN의 티셔츠와 노트, 볼펜, 네이버윈도 모양의 자석


인텔의 1GB 카드형 USB 메모리

인텔의 1GB 카드형 USB 메모리


SK C&C의 무릅담요

SK C&C의 무릅담요



이 외에도 엠텍비젼에서 장소 및 음료, 다과를 제공해주셨습니다. 감사합니다. :-)



덧붙임: KLDP의 관련 글 들


오랜만의 KLDPConf: 12월 6일 | KLDP
12월 6일 토요일 오후에 시간들 어떠세요? 오랜만에 KLDPConf겸 해서 이야기할 수 있는 시간을 가졌으면 합니다.
12월 6일 KLDPConf 참석자 모집! | KLDP
KLDPConf는 OpenSource를 주제로 자발적인 참여를 권장하는 소규모 세미나입니다. 열린 환경에서 서로 공유하기 위해 만들어졌으며, 심도 있는 토론과 상호 교류, 데모 등을 위해 발표 시간만큼의 자유 시간을 확보하여 모두가 함께 OpenSource를 즐기고, 배우고, 느낄 수 있는 자리가 되었으면 합니다.
KLDPWiki: KLDP Conf/20081206
앞으로 KLDPConf는 기존의 세미나 위주에서 벗어나 참석자들간의 참여와 교류를 권장하는 방향으로 진행하고, CodeFest는 좀더 실질적인 결과물이 나올 수 있는 방향으로 진행하려 합니다.
KLDPConf 시작했습니다~ | KLDP
오랜만에 했는데 많이 오셨네요. 결석하신 분들도 좀 되는데 장소가 딱 적당해서 거의 꽉 찼습니다. 날씨가 추워서 그런지 사람들이 빨리 안 오셔서... 조금 늦게 시작했습니다.
오늘 KLDPConf 후기 올려주세요~ | KLDP
자자 오셨던 분들 '모두' 어떤 형태로든 이곳 KLDP 혹은 본인 블로그 등등 어디든 좋으니 후기를 좀 올려 주세요... 아까도 제가 강조했지만... 악플보다 더 무서운게 무플이랍니다. 기억이 다 사라지기 전에... 즐거움과 흥분이 모두 사라지고 귀차니즘이 마음속을 지배하기 전에 빨리빨리 후기를... :-)

Landscape: Canonical의 새로운 서비스, SaaS (SMS as a Service)

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브
휴~ 이러니 내가 캐노니칼/우분투를 좋아하지 않을 수 없단 말이지.

벌써 12월인데 오늘에야 처음으로 Ubuntu의 새 버전인 8.10 Intrepid의 서버 버전을 설치해보았다. 뭐, 그냥 새 배포본일 뿐이지 별다른 생각은 없었다. 설치하는 과정에서 보니까... 소프트웨어/보안패치 자동업데이트 부분이 눈에 띄기는 했었지. 그런데, 잠깐 logout 했다가 다시 접속했을 때, 뭔가 익숙하지 않은 뭔가가 있는 것이 아닌가?

sio4@jangseung:/box/vms$ ssh 192.168.122.182
sio4@192.168.122.182's password:
Linux ubuntu 2.6.27-7-server #1 SMP Fri Oct 24 07:37:55 UTC 2008 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

  System information as of Wed Dec  3 00:40:01 KST 2008

  System load: 0.0              Memory usage: 5%   Processes:       51
  Usage of /:  8.7% of 7.87GB   Swap usage:   0%   Users logged in: 1

  Graph this data and manage this system at https://landscape.canonical.com/
Last login: Wed Dec  3 00:34:39 2008 from 192.168.122.1
sio4@ubuntu:~$

오~~ 시스템 정보 요약서비스! 좋지. 관리하던 서버가 있던 시절에는 이런 사소한 것에도 많은 관심을 가졌던 터라... 첫번째 느낌은 "향수"랄까? 그런데 자세히 보니... "저 쪽에 가서 이 자료를 그려보고 이 시스템을 관리해보시라"고? 아뿔싸! 아까 건성으로 보아 넘겼던 자동업데이트 부분에서 잠깐 스쳐봤던 그 단어! Landscape! 캐노니칼의 새로운 시스템 관리/모니터링 서비스이다!

대단하다.

배포본 전쟁의 황혼기에 해성처럼 나타나 새로운 시장 구도를 만들어 놓은 이들. 데스크탑에서 서버, 다시 MID와 넷북, 이제는 ARM 기반 시스템으로 전개되는 모습만으로도 그 들과 아무런 상관도 없는 내가 다 찌릿찌릿 하더니, 이제는 SaaS 형태의 SMS 서비스를 내놓은 것! 이건 뭐~

분하다.


몇 개월 전에 팀에 제안했던 바로 그 서비스. 제품으로써의 SMS를 만든 것이 아니므로 팔 수는 없지만 (아니, 이제 와서 그저 그런 SMS 제품 하나 만들어 봐야 팔 수도 없겠지만 :-), SaaS 개념을 도입한 SMS라면 충분히 고객에게 새로운 가치를 줄 수 있을 뿐만 아니라, 영업/마케팅 측면에서 서비스를 차별화 할 수 있고 개발팀의 입장에서도 각각의 사이트에 청진기를 심어놓는 격이니... 놓치기 쉬운 고객의 헛기침 소리까지 잡아낼 수 있을 것이고... 나름대로 훌륭한 발상이라고 혼자서만 주장하다가 묻혀버린 바로 그 서비스를 다른 회사의 사이트에서 보는 심정이... 찌릿찌릿? 이런...분하다!

캐노니칼! 니들 딱 내 삘이다~!

Welcome! - Landscape
Landscape makes the management and monitoring of Ubuntu systems simple and effective by combining world-class support with easy to use online management tools.
Landscape | Canonical
Landscape - Changing the way you manage your systems

Download the datasheet Landscape is an easy-to-use systems management and monitoring service that allows you to manage multiple Ubuntu machines as easily as one through a simple Web-based interface. The Landscape service provides powerful, automated systems administration capabilities such as management, monitoring and provisioning of packages across multiple machines lowering your per-systems cost of management and administration. Because Landscape is Web-based, it is easy to set up and use and requires no special hardware or specialised skills. View the landscape datasheet for even more details.

'오픈소스' 카테고리의 다른 글

KLDPConf 8.12 후기  (1) 2008.12.07
우.생.선 - KLDPConf  (4) 2008.03.10
왜 오픈소스인가? 그게 뭔데?  (0) 2008.03.01

ssh 빨리 접속하기, pseudo-tty 살리기, ssh로 웹필터 회피하기

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

(요즘 참여하는 프로젝트에 얽힌) 세 가지 이야기.

1. 먼저 ssh 빨리 접속하기 (접속지연 줄이기)

나의 우분투 데스크탑에서 ssh를 사용하여 리눅스 서버에 접속하는데 접속이 좀 느리다. 네트워크 연결은 문제가 없는데 키 확인을 한 후에 로긴 프롬프트가 뜨기까지 대충 5초는 걸리는 것 같다. 게으른 성격 때문에 웬만하면 그냥 참고 쓰겠는데... 작업 성격이 다섯대의 서버에 로그인 하는 대신, 클라이언트에 위치한 배치 명령만 차례로 던져가며 작업하는 상황이라 반복되는 암호 입력 지연이 좀 거슬린다.

'-v' 옵션을 사용하여 확인해보니, "Unspecified GSS failure. ..." 뭐 이런 이야기가 나온다. (나오고 좀 멈춰 있는다.) 오호라... 관련 설정을 ~/.ssh/config에 해주는 것으로 일단 상황 종료.

뭐? 그런 상황이면 "서로 믿고 사는 사회" 만들면 되지 왜 매번 암호를 입력하냐고? 글쎄... 이상하게 그게 더 맘 편하다

아차차! 설정을 빼먹었네.

GSSAPIAuthentication no

참고로, 대체로 이런 현상은 인증 모듈에 의하여 일어나는데, 예전에는 가장 흔한 경우가 DNS 역추적에 명시적으로 빨리 실패하지 못하고 (또는 성공하지 못하고) 찾아보겠다고 헤메는 경우였다.

2. pseudo-tty 살리기

단순히 "ssh user@remote.host" 형태의 명령으로 원격지에 로그인 하는 경우라면, 명령을 수행하는 창, 화면, tty를 이어받아 원격 쉘이 실행된다. 그런데, "ssh user@remote.host top" 이라고 명령해보면,

$ ssh user@remote.host top
user@remote.host's password: 
TERM environment variable not set.

이렇게 화면 기반의 프로그램은 정상적으로 실행되지 않는다. 그런데, '-t' 옵션을 사용하면 원하는 일을 할 수 있다. 원격 로긴 후 항상 같은 화면 기반 프로그램을 띄워야 하는 상황이라면 유용하다.

3. ssh로 웹필터 피하기 (SOCKS proxy)

망할, 점점 상황은 나빠지고 있다. 윈도용으로만 존재하는 특정 네트워크 클라이언트를 설치해야만 네트워크 접속이 되는 환경. 예외처리로 네트워크에는 참여했으나 결국, 웹 접속은 허용되지 않았다. 그러나 얼마나 다행인가? 우리에겐 ssh가 있으니.

ssh -D8080 -fqCN user@proxy.host

위의 명령을 이용하면 일반적인 ssh 서버인 proxy.host를 웹 필터 우회를 위한 대리자로써 사용할 수 있다. -C 명령은 압축을 사용하기 위한 옵션이고 -f는 접속이 되면 프로세스를 백그라운드로 돌리기 위한 옵션이다.

다음과 같은 파이어폭스 설정을 해주면 우회로 설정 끝.

network.proxy.no_proxies_on : localhost, 127.0.0.1, 192.168.10.0/24, .localdomain
network.proxy.socks : localhost
network.proxy.socks_port : 8080
network.proxy.socks.remote_dns : true
network.proxy.socks_version : 5
network.proxy.type : 1

웹 필터 회피를 위한 경우, 또는 누군가 나의 웹생활을 훔쳐보고 있다는 느낌을 지울 수 없다면... :-)