큐브리드 를 설치하고, php 모듈을 올리기 위해 몇가지 주의할 사항이 있다.

참고로 http://blog.1day1.org/324  는 우분투64bit 환경에서 모듈컴파일 하는 방법이다.
우분투 64bit 의 php 는  Centos 의 php 모듈로도 쓸 수 있다.
다만 몇가지 환경이 맞아야 한다.

큐브리드 공식페이지에서는 현재 소스형태로 제공되고 있다.
이전에는 ( http://dev.naver.com/projects/cubrid-php/download )
Centos 5, php 5.1.6 을 기준으로 cubrid.so 를 배포했다. 같은 환경이라면 정상적으로 작동하지만, 다른 환경에서는 따로 소스를 컴파일해서 사용해야 한다.

1. php 버전이 맞아야 한다.
  centos 5.1.6 이 공식버전이고,  우분투는 5.2.x 버전이다.
  둘중 하나를 맞춰야 한다. ( 나는 centos 를 업그레이드 했다. )

2. 64bit(x64) , 32bit (i386) 가 맞아야 한다.
  당연하겠지만, 사용되는 라이브러리 등이 달라지기 때문에 아키텍트(?)를 맞춰야 한다.



기타 cubrid 설치위치도 영향을 주는가?
테스트를 해보니, 기본 /opt/cubrid 에 설치된다.(rpm 패키지 기준)
바이너리를 비교해보니, cubrid 설치위치가 다른 부분이 있다.
다른 환경들도 테스트 해보겠지만, cubrid 설치위치도 영향을 주는 듯 하다.
아직 정확한 테스트를 하지 않아서 어떤 영향을 주는지 혹은 영향이 없는지 확인하지 않았다.

직접 설치시 다른 경로로 지정하는 경우에는 php 모듈이 작동하지 않을 수 있다.
모듈이 정상적으로 올라오지 않으면 이 부분을 확인해 본다.


[추가]
3. cubrid 설치 위치도 어느정도 영향이 있다.
위 사항을 테스트 한 결과를 정리해본다.

모듈이 제대로 올라오지 않는 경우 아파치에러로그에 다음처럼 메시지가 나온다.
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/cubrid.so' - libcascci.so.8: cannot open shared object file: No such file or directory in Unknown on line 0
cubrid.so 모듈이  libcascci.so.8 을 로드하는데 실패했기 때문이다.
공유라이브러리의 문제라면
/opt/cubrid/lib64 에서 해당 라이브러리 파일을 만들어 준다.
-rw-r--r-- 1 root root 586516 2009-09-20 18:41 libcascci.a
lrwxrwxrwx 1 root root     18 2009-09-23 18:34 libcascci.so -> libcascci.so.8.2.1
-rwxr-xr-x 1 root root 348625 2009-09-20 18:41 libcascci.so.8.2.1
이런식으로 libcascci.so 만 생성되어 있다.
ln -s libcascci.so.8.2.1 libcascci.so.8
이렇게 링크해서 만들어 준다.(설치시 왜 만들어 주지 않는지 모르겠다. (lib 쪽은 생성되어 있다.)



centos i386/x64 , ubuntu i386/x64  에서 테스트 중인데, 작동여부가 조금씩 차이가 있다.
결과가 뒤죽박죽이라 조금 혼란스럽다.(추후 다시 정리해야 겠다)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

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

지난 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


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
Cubrid 2008 R2.0 버전을 쎈토스에서 SRPM 빌드하는 법을 정리한다.

SRPM 빌드전에 뭐하지?

일단 빌드 전에 필요한 패키지들이 있다.
yum install rpm-build

당연히 빌드할 rpmbuild 패키지가 필요하다.(이미 깔려 있으면 생략)


0) 빌드에 필요한 패키지

yum install elfutils-libelf-devel ncurses-devel libstdc++-devel

1) javac (jdk) 필요. JDK 패키지 설치

yum install java-1.6.0-openjdk-devel

JAVA_HOME 설정 추가. (~/.bash_profile 에 넣어주거나, 콘솔상에서 입력해준다.)

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


export JAVA_HOME

2) 다음은 ant

yum install ant

3) c++

yum install gcc-c++


본격적인 SRPM 빌드 작업


1) SRPM 다운로드

wget http://dev.naver.com/frs/download.php/500/CUBRID-8.2.0.1150-el5.src.rpm
wget http://dev.naver.com/frs/download.php/515/cubrid.spec

2) SRPM 빌드

rpmbuild —rebuild CUBRID-8.2.0.1150-el5.src.rpm

빌드가 완료되면  /usr/src/redhat/RPMS 에   설치할 rpm 파일이 생성된다.

설치는 보통에 하던식으로  rpm -Uvh ... .rpm   으로 하면 된다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
자세한 방법은 다음을 참조한다.

큐브리드가 이미 설치되어 있는 상태를 가정한다.

1. 큐브리드 소스 다운 받기(svn)
svn checkout --username anonsvn https://dev.naver.com/svn/cubrid/trunk/contrib/php
2. 관련 패키지 설치
 apx2 가 필요하다. 해당 명령이 있는지 확인하고 없으면 관련 패키지를 설치한다.
apt-get install apache2-prefork-dev
그리고 phpize 도 필요하다. 역시 마찬가지로 없으면
apt-get install php5-dev

3. 빌드하기
src 디렉토리에서
phpize5
./configure
make
를 각각 실행하면  modules 에 cubrid.so 가 생성된다.

modules/cubrid.so 와 cubrid_err.msg 를
extension 디렉토리에 복사한다.( /usr/lib/php5/20060613/ - 등의 extension 디렉토리를 확인)

4. php.ini 설정하기
php.ini 에 cubrid.so 를 등록한다.
extension=cubrid.so
cubrid.err_path="/usr/lib/php5/20060613"

phpinfo 등으로 정상적으로 cubrid.so 가 올라왔는지 확인한다.



ps. centos 의 경우 httpd-devel , php-devel 패키지가 필요하다.
yum install httpd-devel  php-devel

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
우분투 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
위와 같은 방식으로 실행하면 된다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

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

윈도우, 우분투 에 각각 설치를 해봤다.
윈도우는 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 환경을 만들어서 실행하는 방법은 다음 글에서 다루기로 한다.(좀 길다)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
얼마전 NHN 에서 큐브리드를 인수한다는 소식이 있었다.
그 이전에도 NHN 서비스에 큐브리드를 사용하고, 적극 지원한다는 이야기를 들었던것 같다.
큐브리드가 '성능이 좋은가 보다' 라고 단순히 생각했었다.

그러다가, 아예 인수까지 하게 되었구나.
내부의 어떤 전략이 있는지 알수 없지만, 오픈소스화 이후까지 생각하고 있는 듯 하다.
dbms 엔진의 특성상 데이터 무결성이나 안정성 등 여러가지 까다로운 요구조건들을 만족시키기 위해 어떤 기술들이 어떻게 적용되었는지를 살펴볼 수 있는 좋은 기회가 될 것입니다. 그리고 영어의 부담 없이 직접 한국어로 소통할 수 있겠고요. (인용 kldp)
오픈소스화는 시간이 흐른후에 좋은 영향을 줄 것은 분명할 듯 하다.
그런데, 무명(?)의 DB 를 오픈소스화해서 당장 이득을 주지는 않을 것이다.
NHN 이 그동안 이익극대화를 목표로 하고 있다는 인상을 조금 누그러트려줄까?

아무튼 선택권이 많아진다는 것은 사용자에게 득이 될 것은 분명하다.
게다가 mysql , pgsql 등의 기존의 오픈소스 DB 와의 경쟁역할도 할 수 있을 것이다.
더군다나, 국내업체이기에 그 지원(개발,서비스)은 국내개발자,사용자 측면에서 타 오픈소스DB 보다 우월한 위치에 있을 듯 싶다.
사용자를 얼마나 빠른 시일내에 확보할 수 있느냐가 문제겠지만, 어느정도의 사용자를 확보한다면 NHN 이라는 이름이 시너지역할을 하게 될 것이다. 그점에서 mysql 보다 국내에서는 이점이 될 듯 하다.

그동안 오라클, MS-SQL 이라는 이름에 mysql 은 명함내밀기 어려웠다는 것을 영업(?)해본 사람들은 잘 알것이다. 물론 mysql 을 썬이 인수를 해서 Sun 의 이름덕을 보겠지만, 아직은 국내에서는 미흡할 듯 싶다. NHN vs Sun.

아직 갈길이 멀지만, 큐브리드가 NHN 의 지원을 힘입어 발전하길 바란다.
(자료가 부족해요...)


근데, NHN 의 오픈소스 정책을 어느정도 까지 생각하고 있을까?
오픈소스 인큐베이터 같은 것도 만들려나?  세계시장 진출을 위한 사전포석?



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,