2010년에는 안드로이드폰이 많이 나올것이다. 그러나 국내에서는 과연 나올까?
나온다고 본다. 다만 그 시기가 언제일지는 모르겠다.
빠르면 2월정도, 상반기에는 꼭 출시되었으면 한다.(구글코리아야! 도와줘!!  전파인증)

안드로이드 개발환경을 구축하기로 했다. 플랫폼은 우분투.
조합은 이렇다.
우분투 9.10 + eclipse 3.5 (galileo) + android eclair (2.01)
가능한 쉽고, 빠른 개발환경 구축을 목표로 한다.
핵심은 어플개발이기 때문에 개발환경에서 삽질은 최소로 줄여야 겠지.

일단 eclipe 까지는 한방에(우분투는 먼저 깔려있어야죠.)
apt-get install eclipse eclipse-jdt
를 하면 관련 패키지를 알아서 설치해준다.


그다음은 developer.android.com 에서 관련 정보를 찾는다.

기본 Quick Start 문서 : http://developer.android.com/sdk/index.html

1. Android SDK 설치.
  링크를 찾아 설치 : linux 를 찾아서 설치해야 겠죠.
  실행할 수 있도록 패스를 설정한다.(PATH=andriod-sdk/tools:$PATH)

2. eclipse 플러그인 설치 (ADT)

 http://developer.android.com/sdk/eclipse-adt.html
 이클립스를 잘 안다면  이 주소만 알려주면 알아서 깔겠죠.
https://dl-ssl.google.com/android/eclipse/
install/update 로 설치하면 됨.

이부분은 eclipse / eclipse-pde 패키지를 설치하면 되는 듯.

펼쳐두기..


3. android SDK 컴포넌트 추가
http://developer.android.com/sdk/adding-components.html
SDK 를 설치하고 AVD Manager 를 실행한다.
왼쪽메뉴의 Avaliable Packages 를 선택하고, 필요한 패키지(컴포넌트)를 설치한다.
혹시 에러가 난다면.

펼쳐두기..


난 2.0 버전 이상의 패키지를 설치했다.(목표는 eclair 이기 때문에...)

4. 안녕! 빵꾸똥꾸야!
자! 여기까지는 준비운동은 끝났다. 본격적인 어플개발을 시작.
제대로 되나. 확인할 겸.
http://developer.android.com/resources/tutorials/hello-world.html
안녕! 세상아를 찍어봐야지.

이클립스에서 android 프로젝트를 생성한다.
이때 이런 메세지가 나올 것이다.
The location of the Android SDK has not been setup. Please go to Preferences > Android and set it up
처음 실행시 기본 SDK 의 위치를 찾지 못하는 것이다. 메뉴의 Window > Preference > Android 탭으로 가서
설치한 SDK 위치를 지정해준다.  (andriod-sdk 까지 지정해주면 된다. 풀패스로.)

그리고, 소스를 알맞게 수정을 하고, Run 해주면 나온다.
이렇게! (에뮬실행이 오래걸리는구나! vbox 에서 실행해서 그런가?)

좀더 개발환경에 적응을 하고, 어플을 만들어 봐야 겠다.
뭘 만들지...

아이폰어플에 비해 참 쉽다. 물론 맥북사면 비슷하려나? ^^


[참조]
# avd 디바이스 설정.(Android Virtual Devices)
android list targets
android 타겟지정 avd 생성

 android create avd -n my_avd -t 1

 
우분투 9.10 을 설치하고, 파이어폭스를 띄우면 자동으로 플래시플레이어 플러그인을 설치한다.
그런데, 이상하게 플레이는 되는데, 컨트롤을 할 수 없다.
그래서 혹시나 해서 64bit 버전으로 수동설치해봤다.


지난번. 우분투 9.04 의 방법과 크게 다르지않다. ( http://blog.1day1.org/262 )

다운로드 주소가 바뀐것 같다.
http://labs.adobe.com/technologies/flashplayer10/64bit.html

다운로드주소
http://labs.adobe.com/downloads/flashplayer10_64bit.html

압축풀고. 해당위치에 복사.


flashplugin-installer 라는 패키지로 설치한 듯 하다.
이상하게 동작하는 것 같아. 그냥 예전방식으로 처리했다.

펼쳐두기..

위 방법도 상관없는 듯. (방법은 알아서 )


우분투(리눅스) 시스템을 운영중에 있다.
얼마전 하드디스크 에러가 생겨  시스템을 이전하려 한다.
이런 하드에러도 있고, 하드디스크를 큰 용량으로 바꾸려고 할 경우도 있다.

rsync, tar 등을 이용하는 방법도 있지만, 간단하게 cp -a 를 이용하려고 한다.
/var , /usr  등이 별도의 파티션으로 나뉘어져 있는 경우  해당 디렉토리를 뺀 / (루트) 를 복사해야 한다.
별도파티션으로 나뉘어 있던 디렉토리는 나중에 옮겨도 된다.

일단 새 하드디스크를 연결한다.
기존 시스템 하드는 /dev/sda 이고,  연결한 새 하드디스크는 /dev/sdb 라고 가정한다.
/ 는 sda1 ,  /usr 는 sda2 , /var 는 sda3  이라고 한다면,  우선 sda1 을 먼저 옮겨도 되고 다 같이 옮겨도 된다.

sda1 은 sdb1 으로 옮길것이다. 데이터를 이동한다.
현재 시스템이 가동한 상태에서 옮겨도 되긴 하지만, 고려할 사항이 많다.
dev , proc 등 시스템 관련 디렉토리를 주의해야 한다.

별도로 마운트 하고 옮긴다.
mount /dev/sda1 /mnt/sda1
mount /dev/sdb1 /mnt/sdb1
이런식으로 마운트 시키고 데이터를 옮긴다.
cp -a /mnt/sda1/* /mnt/sdb1/
이렇게 하면 따로 dev , proc , var/run , var/lock 등을 신경쓰지 않아도 된다.

새하드디스크로 부팅하려면 어떤값을 바꿔야 하나?
fstab 을 새하드디스크의 설정값으로 변경한다.
이때 복사한 fstab 의 값을 변경한다. 즉 /mnt/sdb1/etc/fstab 을 바꿔준다.
fstab 은 UUID 로 설정해 놓는 것이 편하다.

blkid 명령을 내리면
/dev/sdb1: UUID="{새하드UUID값}" SEC_TYPE="ext2" TYPE="ext3"
새로운 하드의 UUID 값을 얻을 수 있다.
fstab 의 해당 값을 바꿔준다.
UUID={기존UUID값}  / ext3 defaults,errors=remount-ro 0 1
이 설정만 바꾸면 되는가?

새 하드디스크에 grub 을 인스톨한다.
grub-install  /dev/sdb
이런식으로 되면 편하겠는데, 아마 안될 것이다.
grub 쉘로 들어가서 직접 바꿔준다.
grub 명령을 내리면  grub >  이렇게 grub 쉘을 사용할 수 있다.
grub >  find /boot/grub/stage1
stage1 은 하드디스크의 MBR 영역에 설치된다.
find /boot/grub/stage1
 (hd0,0)
 (hd1,0)
이런식으로 나오게 된다. 기존 하드는 hd0 , 새 하드디스크는 hd1  이다.
다음처럼 새 하드디스크에 grub 을 설치한다.
grub >  root (hd0,0)
grub >  setup (hd0)
특별히 에러메세지가 없으면 정상적으로 설치가 되었을 것이다.

이제 grub 의 menu.lst 를 변경한다. 여기서도 fstab 처럼 UUID 를 변경해준다.
/boot/grub/menu.lst 

# kopt=root=UUID={새하드UUID값} ro console=tty0
이 부분과
title           Ubuntu 8.04.3 LTS, kernel 2.6.24-24-generic Default
root            (hd0,0)
kernel          /boot/vmlinuz root=UUID={새하드UUID값} ro console=tty0 quiet splash
initrd          /boot/initrd.img
이 부분의 UUID 값을 바꿔준다.


이제 새 하드디스크로 부팅순서를 바꾸고 부팅한다.

재부팅후에 BIOS 설정에서 새 하드디스크로 부팅순서를 바꿔서 부팅해 본다.
정상적으로 부팅되는지 확인해본다. 이상이 있으면 기존의 하드로 다시 바꾸면 된다.
하드디스크 위치나 바이오스 설정 등의 차이로 인해 부팅에 이상이 있는 경우가 있으니 설정을 다르게 바꿔가면서 테스트 해본다.

내 경우는  보드의 SATA (sda) , SCSI 컨트롤러, SATA 컨트롤러(sdb)  이렇게 되어 있었다.
바이오스에서 각각의 부팅순서를 바꾸지 못하고, PCI 인터페이스인  SCSI , SATA 가 묶여서 바뀌게 되었다. 그래서 PCI 인터페이스의 맨 처음으로 바꿔야 했다.
SATA 에서는 primary 로 변경하고,  SCSI 는 보드에서 SATA 를 보드의 안쪽으로 바꿔서 SATA -> SCSI 컨트롤러 순으로 변경하고 서야 제대로 부팅할 수 있었다.



우분투 hardy 로 업그레이드 한 후에 이런 에러가 뜨기 시작했다.
현상은 아래와 같은 메세지가 나온다. 별다른 문제는 없지만, 종료하려고 하면 한참후(20~30초)에 종료팝업(재시작,종료,로그아웃 등의 메세지창)이 뜬다.
Internal error failed to initialize HAL
내부 오류.
HAL  기반(?) 으로 동작되는 프로그램에 이상이 있는 듯 하다.

https://bugs.launchpad.net/ubuntu/+source/dbus/+bug/81670
hardy 의 버그인듯 싶다.

/etc/rc2.d 의 부트스크립트들을 살펴보면.
S12dbus
S13gdm
S24hal
의 순서로 되어 있다. gdm 이 뜨기 전에 hal 이 먼저 실행되어야 하는데, 잘못되어 있다.

위 순서를 바꿔준다.  S13gdm 을 S30gdm 으로 바꿔준다.




큐브리드를 사용해보려고 테스트 중이다.

지난 8월에 2008 R2.0 버전이 새로 나왔다. 64bit 지원과 SRPM 지원이 눈에 띈다.
기존버전은 64bit 환경에 쓰기에는 애매한 부분이 있었다.
그래서 편법(?)으로 쓰기도 했다.(http://blog.1day1.org/312)

Centos(redhat 계열-rpm) 에서 빌드하는 것과 뭐가 다르지?

Centos 에서 cubrid SRPM 빌드를 해봤는데, 별다른 문제없이 빌드가 되었다.

우분투는 기본 패키지는 .deb 이지만,  rpm 도 설치가 가능하다.(특이한 설정이 아니라면)
rpm 을 사용하기 위한 패키지를 설치한다. ( 우분투 hardy 버전에서 테스트 했다)
apt-get install rpm

큐브리드도 SRPM 을 제공하기 때문에 우분투에서 빌드해보았다.

rpmbuild --rebuild 를 해보면 사전에 필요한 패키지들이 있다.
elfutils-libelf-devel
ncurses-devel
libstdc++-devel
glibc-devel
위 패키지 들에 해당하는 우분투 패키지는
apt-get install  libelf-dev libncurses-dev libstdc++6-dev libc6-dev
등에 해당한다.

rpm 방식은 체크하는 방식이 차이가 있어서 해당 패키지를 설치해도 계속 에러가 난다.
그래서 SRPM 의 spec 을 수정해서 다시 SRPM 을 만들기로 했다.

SRPM 패키지 우분투용으로 다시 만들자

먼저 srpm 을 설치한다
rpm -ivh CUBRID-8.2.0.1150-el5.src.rpm
우분투에서는  /usr/src/rpm 에 rpmbuild 관련 파일,디렉토리가 있다.
SRPM을 설치하면  rpm/SOURCES 에 관련소스가 생기고, rpm/SPECS 에 설정파일이 생긴다.

rpm/SPECS/cubrid.spec 을 열어서 
Requires:      ncurses
Requires:      libstdc++
BuildRequires: elfutils-libelf-devel
BuildRequires: ncurses-devel
BuildRequires: libstdc++-devel
BuildRequires: glibc-devel
위 부분을 주석처리한다.  각 줄의 앞에  # 을 붙여준다.

우분투에서는 rpmbuild 시 _sysconfdir 의 위치가 약간 다르게 나타난다.
rpm --eval %{_sysconfdir}
해보면  Centos 에서는 /etc 로 나오는데, 우분투는  /usr/etc  로 나온다.
SRPM 빌드 마지막 부분에 이 부분때문에 관련 파일을 찾을 수 없다는 에러가 나온다.
/usr/lib/rpm/x86_64-linux/macros  부분의
%_sysconfdir            %{_prefix}/etc
를 다음처럼 바꿔준다.
%_sysconfdir            /etc
SPEC 을 고친후에 SRPM 을 다시 만들어 준다.
rpmbuild -bs rpm/SPECS/cubrid.spec
rpm/SRPMS/ 에 다시 만든 SRPM 패키지가 생성된다.


이제 SRPM 빌드해도 되나?
준비가 끝났으니 본격적으로 우분투에서 SRPM 빌드를 한다.
rpmbuild --rebuild rpm/SRPMS/CUBRID-8.2.0.1150-el5.src.rpm
Centos 와 마찬가지로 JAVA_HOME 설정, ant 등의 빌드시 필요한 패키지를 설치한다.
apt-get install sun-java6-jdk ant

JAVA_HOME=/usr/lib/jvm/java-6-sun
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin


export JAVA_HOME
export PATH
make , gcc 등의 개발에 필요한 패키지도 설치되어 있어야한다.(대부분 이미 설치되어 있을듯)
apt-get install build-essential

최종적으로 rpm 을 만들었는데, 이런에러가.
rpm -Uvh CUBRID-8.2.0.1150-el5.x86_64.rpm
아! 나를 반기는 의존성 오류.
오류: Failed dependencies:
        /bin/bash is needed by CUBRID-8.2.0.1150-el5.x86_64
        /bin/csh is needed by CUBRID-8.2.0.1150-el5.x86_64
        /bin/sh is needed by CUBRID-8.2.0.1150-el5.x86_64
이미 bash , sh 등이 설치되어 있지만, rpm 에서 체크하는 방식이 달라서 그런듯 하다.
즉, 우분투에서는 설치된 패키지 정보가 rpm 에서 알 수 없어서 그런듯 하다.

일단 의존성 체크 없이 설치한다.
rpm -Uvh --nodeps CUBRID-8.2.0.1150-el5.x86_64.rpm


Centos 에서 DNS(네임서버) 설정

알아둘일 2009/08/19 08:46 Posted by 1day1
centos 쪽에 네임서버를 설치하려 한다.
우분투와 차이점이 있어 정리한다.

우분투는 /etc/bind/ 에 설정파일이 있다.
/etc/bind/named.conf.local 에 도메인 설정을 한다.
zone 파일은 /var/cache/bind 에 위치한다.


Centos 는 뭐가 다르지?
그런데, centos 는 조금 다르다.
가장 큰 차이점은 chroot 로 네임서버를 구동한다.
우분투쪽도 그런방식이 가능할 것으로 생각한다.(최신 배포판은 그런방식을 쓸지도,현 hardy)
그래서 chroot 의 root path 는 /var/named/chroot 가 된다.
네임서버 실행시 저 위치가 root 가 된다. 설정파일도 그 안에 위치한다.
/var/named/chroot/etc/named.caching-nameserver.conf
/var/named/chroot/etc/named.rfc1912.zone
도메인 설정은 named.rfc1912.zone 에 설정하면 된다.

그럼 zone 파일은 어디에 위치하나!
바로 /var/named 인데, chroot 상의 /var/named 이다.
/var/named/chroot/var/named
가 된다.

/etc/named.conf 등의 파일은 뭐지?
그냥 관리자가 관리하기 편하게 링크를 걸어준것 뿐이다.
해당 파일들을 삭제하고 재시작 해봐도 정상적으로 작동하는 것을 볼 수 있다.

ps 로 네임서버 프로세스를 확인해보면.
/usr/sbin/named -u named -c /etc/named.caching-nameserver.conf -t /var/named/chroot
chroot 로 시작하고 chroot 의 /etc/named.caching-nameserver.conf  설정을 불러들이는 것을 볼 수 있다.


기존 우분투 설정을 그대로 쓰고 싶어
우분투의 설정을 그대로 가져가 쓴다고 할때.
우분투의 named.conf.local 설정을
/var/named/chroot/etc/ 에 복사한후
/etc/named.conf.local 로 심볼릭 링크를 한다.
ln -s /var/named/chroot/etc/named.conf.local /etc/named.conf.local
/var/named/chroot/etc/named.caching-nameserver.conf  ( /etc/named.conf )
의 마지막 줄에. named.conf.local  설정을 불러오도록 다음 줄을 추가한다.
include "/etc/named.conf.local";

그리고 기존의 zone 파일들은
/var/named/chroot/var/named 에 복사해 주면 된다.

그리고 재시작하고, nslookup , dig 등으로 확인한다.



외부에서 도메인 질의가 안된다면
로컬에서는 되는데, 외부에서는 안된다면 다음의 사항을 체크한다.

1. 방화벽
iptable 로 53 번 포트를 열러줘야 한다.
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

2. 설정
설정파일의 기본이 localhost 를 기준으로 되어 있다.( named.caching-nameserver.conf )
    allow-query     { any; };

    match-clients      { any; };
    match-destinations { any; };
위처럼 localhost 를 any 로 바꿔준다.


nslookup 으로 질의확인
nslooup 으로 질의를 해서 네임서버 설정이 잘 되어 있는지 확인할 수 있다.
nslookup my.domain.com  localhost
처럼 질의를 했을때.
Non-authoritative answer:
Name:   my.domain.com
Address: 111.222.333.444
Non-authoritative  라는 메세지가 나오면 안된다.
해당 메세지가 없어야 일단 로컬설정이 제대로 된 것이다.


슬레이브 설정시 필요한 마스터 설정.
options 의 설정중에
allow-query 는  nslookup, dig 등을 이용한 일반 쿼리를 말한다.
슬레이브에서 마스터의 설정을 가져가려 하면
allow-transfer { slave-server_ip; };
의 설정을 해준다. (기본설정이 모두 허용인 듯 싶다. 필요한 서버만 허가를 하려면 필요하다)


ps. Centos 에서 bind-chroot 패키지를 설치하면 chroot 가 적용된다.

오래된 윈도우용 웹캠이 있다. 윈도우XP 까지만 지원된다.(3개정도 있던가.)
더군다나 제조회사는 이미 망해버린 상태이다.(웹캠 회사는 온전한 곳이 별로 없다)
대기업표 웹캠도 오래된 것들은 윈XP 이상의 드라이버는 제공하지 않는다.
윈도우 비스타, 윈도우7 을 사용하고 있는 상황에서 쓸모없는 물건이 되버렸다.
아직 윈XP 가 많이 쓰이지만, 왠지 시한부 인생을 사는 것 같이 씁쓸하다.

혹시나 하는 마음에 리눅스(우분투)에 연결했다.
3개중 2개는 그냥 인식되네, 나머지 하나도 테스트해봐야 겠다.
치즈(cheese)를 실행시켜보니 잘 되는구나.

웹캠 감시 시스템을 적용해 볼까?
몇가지 찾아보니, motion 과 zoneminder 라는 것이 있다.

우선 zoneminder 를 해보기로 한다.
참조 : http://www.linuxscrew.com/2007/11/05/howto-home-video-security-with-zoneminder-and-ubuntu/


설치하기
설치는 우분투 패키지를 제공하기 때문에 쉽다.
apt-get install zoneminder apache2 php5-mysql libapache2-mod-php5 mysql-server ffmpeg
카메라 영상을 웹에서 보기위해 apache2 가 필요하다.
mysql-server 는  zoneminder 의 설정등을 저장하기 위해 mysql 을 사용하기 때문에 필요하다.
웹기반으로 카메라 영상 감시를 하기위한 어플이 php 로 제작되어 있다.(php5, mod-php5 필요)
ffmpeg 는 카메라 영상을 동영상으로 저장하기 위해 필요한 패키지 이다.

http://localhost/zm 으로 접속하기 위해 apache 설정을 한다.
ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
아파치를 재시작한다.


옵셥설정하기
http://localhost/zm   으로 접속해서 기본 옵션을 설정한다.(오른쪽 윗 부분에 있다.)
옵션중에 다른 부분은 바꿀 것은 없고. image 부분에서
두번째 항목  ZM_STREAM_METHOD  를  mpeg 에서  jpeg 로 바꾼다.(save 를 꼭 해준다)

그리고 zoneminder 를 재시작해준다.
/etc/init.d/zoneminder restart
여기까지 한후, 감시설정을 해준다.(웹캠이 여러개가 있다면, 여러개의 감시설정을 할 수 있다.)

감시설정하기
"Add New Monitor" 를 눌러 설정을 한다.

아무 이름이나 쓰고, Local 로 해준다. Function 은  원하는 것으로 선택한다.
잘못 이해했는지 모르겠지만, Modect 로 설정하면 Event 가 발생할 듯 싶은데, 잘 안된다.
그래서 Mocord 를 하니 제대로 Event 를 잡아내는 듯 하다.(Record 를 해야 하나?)
그리고 저장한다.

소스(Source) 부분에서  웹캠 디바이스를 지정한다.(보통 /dev/video0)
여러개 있다면,  video1 , video2  등의 디바이스가 생겼을 것이다.
capture width , height 는 320x240 이 적당할 듯 하다.
640x480 등은  커널 공유메모리를 늘려줘야 하나보다.(shmall , shmmax 관련)

감시화면보기
모니터 설정후에  설정한 이름을 클릭하면

다음처럼 웹캠 화면이 나온다.(지금은 어두워서, 밝은 것은 프라이버시 문제로...)

이벤트도 기록되는 것을 볼 수 있다.(어떤 상황에 이벤트가 생성되는지 정확한 기준은 아직 모르겠다)

주의사항 : /var/cache/zoneminder 에 영상이 저장된다. 충분한 공간을 확보해야 한다.


영상이 잘 안보인다면
감시화면을 띄웠을때 카메라 영상이 제대로 나오지 않는다면,
/var/log/messages 를 확인해본다.  퍼미션 에러가 나온다면.
아래처럼 권한을 조정해 본다.(zoneminder 재시작)
chmod 4755 /usr/bin/zmfix
그래도 안된다면, 아래처럼 video0 의 other 권한을 rwx 로 바꿔준다. (또는 666 ,777 )
chmod o+rwx /dev/video0


ps. 테스트에 사용된 웹캠이  Z-Star Microelectronics Corp. ZC0301 WebCam 이다.(lsusb)
저게  LED 조명이 있는데 꺼져있다. 켜는 방법을 아직 못찾겠다.(없나?)
그러고보니 윈도우에서도 조절을 못했던 것 같다.

우분투 64bit 환경에서 cubrid 를 설치하는 것이 쉽지 않았다.(지난글 : http://blog.1day1.org/311 )

다음은 64bit 환경에서 chroot 를 이용해서 32bit 어플을 실행하는 방법을 설명한다.
이 방법은 다른 어플에 활용해도 된다.
예전에 firefox 32bit flashplayer 문제가 많았을때 사용되던 방법이다.

1. chroot 및 debootstrap 패키지 설치
  # apt-get install schroot  dchroot debootstrap
  schroot , dschroot  둘중에 하나만 선택해도 된다.

 기본 위치를  /var/chroot32/hardy 로 잡았다.(자신이 원하는 위치로 바꿔도 된다)
 hardy 64bit 환경에서  chroot hardy 32bit 환경을 설정하려한다.
 설치하고  schroot 설정 ( /etc/schroot/schroot.conf - 이미 있음. 추가)
[hardy]
description=Ubuntu hardy
priority=3
location=/var/chroot32/hardy
users={Userid}
groups={Userid},root
root-groups=root,{Userid}
personality=linux32
aliases=cubrid,default
{Userid} 는 본인 계정을 적으면 된다.
chroot 전환방법은
# schroot -c hardy   또는  schroot -c cubrid  또는 schroot -c default 
또는 그냥 schroot 를 실행하면 default 가 실행된다.

이게 좀 복잡해 보이면, dchroot 를 사용한다.
  /etc/dchroot.conf 를 만들고, 다음 한줄을 넣는다.
hardy  /var/chroot32/hardy

  나중에 32bit 어플설정시 schroot 는 좀 이상 동작을 해서 dchroot 가 더 나은 듯 하다.
chroot 전환방법은 schroot 와 비슷
# dchroot -c hardy  또는 그냥  dchroot

 여기까지 기본 설정은 완료 실제적인 chroot 32bit 환경을 구축한다.

2. chroot 기본환경 구축, 설정
# debootstrap —variant=buildd —arch i386 hardy /var/chroot32/hardy http://ftp.daum.net/ubuntu
 젠투 사용자는 익숙할 것이다.(chroot 도) 설치시 필요하니... ^^
 명령에서 엿볼 수 있듯이  i386 아키텍쳐(?) 를 구축하기 위한 기본 시스템을 만든다.
 /var/chroot32/hardy 에 시스템 기본 파일이 만들어진것을 볼 수 있다.
 현 시스템(64bit)에서 필요한 파일들을 복사한다.
# cp /etc/resolv.conf /var/chroot32/hardy/etc/
# cp /etc/apt/sources.list /var/chroot32/hardy/etc/apt/

# cp /etc/passwd /var/chroot32/hardy/etc/
# cp /etc/shadow /var/chroot32/hardy/etc/
# cp /etc/group /var/chroot32/hardy/etc/
# cp /etc/sudoers /var/chroot32/hardy/etc/
# cp /etc/hosts /var/chroot32/hardy/etc/
/etc/fstab 에 chroot 에 필요한 설정을 추가한다.
/proc            /var/chroot32/hardy/proc      none rbind 0 0
/dev            /var/chroot32/hardy/dev        none rbind 0 0
/sys             /var/chroot32/hardy/sys       none rbind 0 0
/tmp            /var/chroot32/hardy/tmp        none rbind 0 0

필요하면 다음 항목도 추가한다.
/home                       /var/chroot32/hardy/home                 none rbind 0 0
/var/run/dbus            /var/chroot32/hardy/var/run/dbus      none rbind 0 0

추가한 후에 마운트 한다.
# mount -a


이제는 chroot 상태로 넘어가서 추가적인 패키지들을 설치한다.
# schroot  ( 또는 dchroot )
chroot 된 상태가 된다.( $ 로 표시하겠다)  그 다음에 패키지를 설치한다.
$ apt-get install wget debconf devscripts gnupg nano
$ apt-get update ; apt-get upgrade
필요하면 추가 설치
$ apt-get install vim aptitude
chroot 에서 빠져 나오려면,  exit  를 입력한다.

3. 32bit 어플 실행환경 설정


/usr/local/bin/do_dchroot  파일 생성 후, chmod 755 로 실행권한을 준다.(chroot 빠져나온상태)
#!/bin/sh

for arg; do
        arg=`echo $arg | sed -e 's/ /\\\ /g'`
        args=`echo $args $arg`
done

xhost +
/usr/bin/dchroot -d "`echo $0 | sed 's|^.*/||'` $args"

32bit 어플실행환경 파일이다.  이 파일을 이용해서 32bit 어플을 실행시킬 것이다.

gedit 으로 테스트를 해본다. (chroot 상태에서 , schroot 나 dchroot 로 )
$ apt-get install gedit
$ cd /usr/bin ; ln -s gedit gedit32
$ exit
chroot 를 빠져나와서
# cd /usr/local/bin ; ln -s do_dchroot gedit32
# gedit32
처럼 링크를 걸고 , 실행시키면 chroot 상태로 바뀌면서 gedit32 가 실행된다.
이런식으로 cubrid 도 실행할 것이다.

4. cubrid 어플 설치,실행.

 chroot 상태에서 cubrid 를 설치, 실행한다. (자세한 방법은 생략한다.)
$ sh CUBRID-8.1.4.1032-linux.sh  (설치)
$ . /root/.cubrid.sh
$ cubrid service start
다음 매니저를 실행해본다.
$ cubridmanager
를 실행하면 몇가지 에러가 발생한다.


위에서 한 방식으로 do_dchroot 로 32bit 어플실행 설정을 한다.
/usr/bin/cubridman_start  를 만들었다.  (chroot 상태)
#!/bin/sh
. /root/.cubrid.sh
cubridmanager

실행스크립트를 만들고, chroot 를 벗어나서 다음처럼 링크시킨다.
# cd /usr/local/bin ; ln -s do_dchroot cubridman_start
# cubridman_start
로 실행시킨다.

java , swt 관련 에러가 보이면, 다음  패키지를 설치한다.
$ apt-get install lilbswt3.2-gtk-java sun-java6-jdk    ( 또는 sun-java6-jre )
한글이 깨진다면.
$ apt-get install language-support-ko language-pack-ko language-pack-gnome-ko
$ locale-gen ko_KR.UTF-8

schroot 로 실행환경 설정
schroot 도 dchroot 와 동일한 형태의 스크립트는 안되지만, 비슷하게 처리할 수 있다.
# schroot -c hardy -p cubrid_start
# schroot -c hardy -p cubridman_start
위와 같은 방식으로 실행하면 된다.


큐브리드를 설치하면서, 몇가지 겪었던 어려움을 정리한다.

윈도우, 우분투 에 각각 설치를 해봤다.
윈도우는 64bit 가 지원되지 않는다.  우분투는 64bit 환경에서 가능은 하지만 원활하지 않는다.
쓸데없는 고민을 하지 않기 위해 32bit 환경에 설치하는 것이 좋다.(추후 64bit 를 공식지원한다고 한다)

1. 윈도우 설치.
  설치시 별문제 없었음.
  다만  php 모듈 설치할때, dll 파일이 제대로 등록이 되지 않을때, 재부팅을 해보면 제대로 등록이 됨.
  윈도우쪽은 황당한(재부팅 신공) 해결책이 자주 나온다.

2. 우분투 32 bit 설치.
  이것도 별 문제 없음.
  다만 다운로드에 올라와 있는 php 모듈이 64bit 로 올라와 있음.
  (좀 혼동됨 - 32bit 도 올려놓으면 좋을 듯)

3. 우분투 64 bit 설치.
  여기서 많은 난관이 기다리고 있었음.
  일단은  cubrid 설치, 실행은 큰 이상이 없음.

이 문제를 조심하면 됨.


 cubrid 서버만 실행하여 사용한다면 다음 과정은 필요없을지 모른다.
 따로 cubridmanager 는 다른 곳에 설치해서 사용해도 될 것이다.
 실제로 서버용에서 cubridmanager 까지 설치해 놓지 않는 경우가 많을 듯 하다.


 그러나, 동일한 서버에서 사용하려한다면, 이야기는 달라진다.
 테스트를 해보니, cubridmanager 실행시 자바 에러를 만나게 된다.
 이런 메세지.
JVM terminated. Exit code=13
/usr/bin/java
-Xmx512m
-jar /system/cubrid/cubridmanager/cmclient/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20080118.jar
-os linux
-ws gtk
-arch x86
-showsplash
-launcher /system/cubrid/cubridmanager/cmclient/cubridmanager
-name Cubridmanager
—launcher.library /system/cubrid/cubridmanager/cmclient/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.3.R33x_v20080118/eclipse_1023.so
-startup /system/cubrid/cubridmanager/cmclient/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20080118.jar
-exitdata 370013
-vm /usr/bin/java
-vmargs
-Xmx512m
-jar /system/cubrid/cubridmanager/cmclient/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20080118.jar
정확한 이유는 모르겠지만, 32bit 로 컴파일된 큐브리드를 64bit 에서 실행하려고 했을때 문제인듯.
cubridmanager 쪽이 그런것으로 보아 java 와 관련이 있어 보임.

우회적인 해결책으로  chroot 로 32bit 환경을 만들고, chroot 상에서 실행하는 방법으로 처리하였음.
좀 복잡한 과정을 거치긴 하지만, 64bit 환경인 상태에서는 최선의 선택이 아닐까 생각됨.

chroot 로 32bit 환경을 만들어서 실행하는 방법은 다음 글에서 다루기로 한다.(좀 길다)

dapper 에서 hardy 로 업그레이드 하면서, 설정이 조금씩 바뀌는 부분이 있었다.
그 중에 crontab 의 설정이다.
설정 자체가 바뀐 것은 아니고, rule 의 체크가 깐깐해 졌다고 해야하나?

dapper 에 쓰던 설정을 그대로 적용하니, cron 이 작동하지 않는 문제가 있었다.
왜 그런가 한참을 봐도 모르겠다.

syslog 를 살펴보니 다음과 같은 메세지가 나왔다.
Error: bad username; while reading /etc/crontab
왜 틀렸다고 하지? 이상하네..

그런데 cron 설정한 것을 하나하나 살펴보니.
36 * * * *    /etc/cron.myset/get_ip.cron.sh
이런식으로 되어 있었다.
36 * * * *  root  /etc/cron.myset/get_ip.cron.sh
이렇게 root 로 되어 있어야 하는데 말이다.

어! 그런데, dapper 에서 그냥 저렇게 없어도 작동했던 것 같은데, 그 때도 작동을 안했나?
cron 이 새버전(hardy  버전)으로 바뀌면서 룰을 바꿨나?

여러개중에 하나의 설정 때문에 cron 전체가 작동하지 않았다.
깐깐한 체크가 좋기는 하지만, 한참 헤맸다.


ps. 예전 로그를 살펴보니, 잘못된 설정의 cron 은 실행이 안 된 듯 하다.
  별로 중요한 설정이 아니라, 미처 발견을 못 했나 보다.

  저런경우 /etc/cron.d/  에  cron 설정을 분리해서 넣어두면 좋을 듯 하다.