2011년 9월 19일 월요일
openssl 인증서 발급
2011년 9월 18일 일요일
OVIF 지원
(주)아이디폰 (www.idfone.co.kr) 의 KAISHOT (IDF-PVR 시리즈)는 PSIA 및 ONVIF 를 지원한다.
그리고, Darwin Streaming Server 와 연동 되고 (Client/Server mode 모두 지원),
송/수신 모드를 지원하며,
네트웍(FOMA, HSDPA, HSUPA, EVDO, Wibro egg, 802.11 a/b/g/n, 802.3) 상황에 따라
가변 bitrate 및 전송 중 저장을 지원한다.
아래는 ONVIF 설치 과정.
1. lighttpd 설치
1.1 pcre (Perl Compatible Regular Expressions) 설치
1.2 zlib 설치
1.3 bzip2 설치
1.4 lighttpd 설치
1.5 libiconv 설치
1.6 libxml2 설치
1.7 php 설치
2. fastcgi , ONVIF
2.1 openssl 설치
2.2 libfcgi 설치
2.3 gsoap 설치
2.4 onvif wsdl download and 설치
[출처] ONVIF and PSIA (lighttpd fastcgi)|작성자 로한방
임베디드리눅스 빌드방법- openssl, libxml2 등..
시스템 개요
Host
CPU : x86
O/S : Fedora 7
Target
CPU : A&W6410(S3C6410)
O/S : Linux 2.6.21.5
Kernel Image, Filesystem Image : http://juncon.tistory.com/39
사용된 패키지/라이브러리
DirectFB-1.2.8
DirectFB-example-1.2.0
Gtk+-2.12.11
glib-2.16.5
atk-1.23.5
libjpeg-6b
libpng 1.2.31
freetype-2.3.7
expat-2.0.1
fontconfig-2.6.0
tiff-3.8.2
pkg-config 0.20
pixman-0.10.0
cairo-1.6.4
pango-1.20.5
libxml2-2.6.30
curl-7.18.2
icu4c-3.8.1
sqlite-3.6.2
openssl-0.9.8h
libgpg-error-1.6
libgcrypt-1.4.2
libxslt-1.1.24
tiff-3.8.2
WebKit-r36309
빌드를 위한 시스템 구축
Host
빌드는 Fedora 7, Fedora 10 전체설치 버전에서 테스트 하였다. 다른 시스템에서도 빌드가 가능하지만, Fedora 7을 권장한다. (Redhat 9부터 Fedora 4~Fedora 10까지 해보았지만 Fedora 7이 가장 안정적으로 크로스컴파일이 되었다.)
gpref 설치
빌드시에 gperf패키지가 필요하다. 간단히 yum을 이용하여 설치한다.
# yum –y install gperf
관련 파일 준비
빌드를 위하여 툴체인, WebKit소스, 패치등을 다운받는다. (파일이 필요하신 분은 댓글 남겨주세요~)
1. WebKit_toolchains_20090506_anw6410.tar.gz à 툴체인
2. WebKit-r36309_20090506_anw6410.tar.gz à WebKit 소스
3. cairo-1.6.4-patch.tar.gz à cairo-1.6.4 Patch
경로 설정
본 문서에서는 아래의 경로에서 작업한다.
기본 디렉토리 : /home/juncon/webkit
WebKit 소스 : /home/juncon/webkit/WebKit-r36309
라이브러리 : /home/juncon/webkit/libs
툴체인 : /opt/crosstool
빌드 prefix : /usr/local/webkit
소스 준비
# cd ~juncon
# mkdir webkit
# tar zxvf WebKit-r36309_20090506_anw6410.tar.gz –C /home/juncon/webkit
# tar zxvf WebKit_toolchains_20090506_anw6410.tar.gz –C /opt
라이브러리 빌드
라이브러리 빌드는 /home/juncon/webkit/libs에서 작업한다.
# mkdir /home/juncon/webkit/libs
# cd /home/juncon/webkit/libs
pkg-config 0.20.0 (for x86)
# wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.20.tar.gz
# tar zxvf pkg-config-0.20.tar.gz
# cd pkg-config-0.20
# ./configure --prefix=/usr/local/webkit
# make
# make install
# cd ..
환경변수 설정
이제 툴체인과 pkg-config를 사용하기 위하여 환경변수를 설정한다.
# export PATH=/usr/local/webkit/bin: /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/bin:$PATH
# export PKG_CONFIG_PATH=/usr/local/webkit/lib/pkgconfig
which 명령어를 이용하여 PATH가 정상적으로 잡혔는지 확인한다.
# which pkg-config
/usr/local/webkit/bin/pkg-config
# which arm-linux-gcc
/opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/bin/arm-linux-gcc
zlib 1.2.3
# wget http://www.zlib.net/zlib-1.2.3.tar.gz
# tar zxvf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# CC=arm-linux-gcc RANLIB=arm-linux-ranlib AR=arm-linux-ar ./configure --prefix=/usr/local/webkit --shared
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
Libpng 1.2.31
# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.31.tar.gz
# tar zxvf libpng-1.2.31.tar.gz
# cd libpng-1.2.31
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
jpeg-6b
# wget http://freeware.sgi.com/source/libjpeg/libjpeg-6b.tar.gz
# tar zxvf /libjpeg-6b.tar.gz
# cd libjpeg-6b
# ./configure --prefix=/usr/local/webkit --enable-shared --enable-static --host=arm-linux
# vi Makefile
23번 라인 : CC = arm-linux-gcc
63번 라인 : AR= arm-linux-ar rc
65번 라인 : AR2= arm-linux-ranlib
# make
# make install
# cd ..
FreeType 2.3.7
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.7.tar.gz
# tar zxvf freetype-2.3.7.tar.gz
# cd freetype-2.3.7
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libxml 2.6.32
# wget ftp://xmlsoft.org/libxml2/libxml2-2.6.30.tar.gz
# tar zxvf libxml2-2.6.30.tar.gz
# cd libxml2-2.6.30
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libgpg-error-1.6
# wget ftp://ftp.ring.gr.jp/pub/net/gnupg/libgpg-error/libgpg-error-1.6.tar.bz2
# tar jxvf libgpg-error-1.6.tar.bz2
# cd libgpg-error-1.6
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libgcrypt-1.4.1
# wget ftp://ftp.ring.gr.jp/pub/net/gnupg/libgcrypt/libgcrypt-1.4.2.tar.gz
# tar zxvf libgcrypt-1.4.2.tar.gz
# cd libgcrypt-1.4.2
# vi Makefile.in
240: tests 삭제
241: tests 삭제
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
libxslt-1.1.24
# wget ftp://xmlsoft.org/libxslt/libxslt-1.1.24.tar.gz
# tar zxvf libxslt-1.1.24.tar.gz
# cd libxslt-1.1.24
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
openssl-0.9.8h
# wget http://www.openssl.org/source/openssl-0.9.8h.tar.gz
# tar zxvf openssl-0.9.8h.tar.gz
# cd openssl-0.9.8h
Configure 파일의 325번 라인에 있는linux-elf 라인전체를 복사해 아래 굵게 표시한 부분을 수정한다.
"linux-arm", "arm-linux-gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# ./Configure linux-arm --prefix=/usr/local/webkit --openssldir=/usr/local/webkit no-threads no-zlib no-asm shared
Makefile을 수정한다
AR = arm-linux-ar rc
RANLIB = arm-linux-ranlib
# make
# make install
expat 2.0.1
# wget http://nchc.dl.sourceforge.net/sourceforge/expat/expat-2.0.1.tar.gz
# tar zxvf expat-2.0.1.tar.gz
# cd expat-2.0.1
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
fontconfig 2.6.0
# wget http://fontconfig.org/release/fontconfig-2.6.0.tar.gz
# tar zxvf fontconfig-2.6.0.tar.gz
# cd fontconfig-2.6.0
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --with-arch=arm-unknown-linux-gnu --disable-docs
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
tslib 1.0
# wget http://download.berlios.de/tslib/tslib-1.0.tar.bz2
# tar jxvf tslib-1.0.tar.bz2
# cd tslib-1.0
# ./autogen.sh
# ./configure --prefix=/usr/local/webkit --target=arm-linux --host=arm-linux --enable-shared CC=arm-linux-gcc
# vi config.h
#define malloc rpl_malloc 을 삭제한다.
# make
# make install
# cd ..
DirectFB 1.2.8
# wget http://www.directfb.org/downloads/Core/DirectFB-1.2.8.tar.gz
# tar zxvf DirectFB-1.2.8.tar.gz
# cd DirectFB-1.2.8
# ./configure --prefix=/usr/local/webkit --target=arm-linux --host=arm-linux --without-x --disable-osx --disable-x11 --enable-fbdev --with-gfxdrivers=none --build=i686 --with-inputdrivers=tslib,keyboard --enable-zlib
# make
# make install
# cd ..
DirectFB Examples 1.2.0
# wget http://www.directfb.org/downloads/Extras/DirectFB-examples-1.2.0.tar.gz
# tar zxvf DirectFB-examples-1.2.0.tar.gz
# cd DirectFB-examples-1.2.0
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
이제 DirectFB빌드는 끝났다. 이대로 /usr/local/webkit을 보드에 올려서 DirectFB 예제들을 실행하면 된다.
glib 2.16.5
# wget http://ftp.gnome.org/pub/gnome/sources/glib/2.16/glib-2.16.5.tar.gz
# tar zxvf glib-2.16.5.tar.gz
# cd glib-2.16.5
# vi glib-config.cache
glib_cv_long_long_format=${glib_cv_long_long_format=ll}
glib_cv_stack_grows=${glib_cv_stack_grows=no}
glib_cv_has__inline=${glib_cv_has__inline=yes}
glib_cv_has__inline__=${glib_cv_has__inline__=yes}
glib_cv_uscore=${glib_cv_uscore=no}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
glib_cv_use_pid_surrogate=${glib_cv_use_pid_surrogate=yes}
# ./configure --prefix=/usr/local/webkit --host=arm-linux --with-threads=posix --cache-file=glib-config.cache
# make
# make install
다음 빌드시 크로스 컴파일한 glib-genmarshal이 선택되지 않도록 한다.
# mv /usr/local/webkit/bin/glib-genmarshal /usr/local/webkit/bin/glib-genmarshal_arm
# cd ..
atk-1.23.5
# wget http://ftp.gnome.org/pub/gnome/sources/atk/1.23/atk-1.23.5.tar.gz
# tar zxvf atk-1.23.5.tar.gz
# cd atk-1.23.5
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
pixman-0.10.0
# wget http://www.cairographics.org/releases/pixman-0.11.10.tar.gz
# tar zxvf pixman-0.11.10.tar.gz
# cd pixman-0.11.10
# vi Makefile.in
201: test삭제
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
cairo-1.6.4
# wget http://www.cairographics.org/releases/cairo-1.6.4.tar.gz
# tar zxvf cairo-1.6.4.tar.gz
# cd cairo-1.6.4
FTP에서 cairo-1.6.4-patch.tar.gz파일을 받는다.
# tar zxvf cairo-1.6.4-patch.tar.gz
# patch -p1 < 001-cairo_dfb-run-clipped-function.patch
# patch -p1 < 002-cairo_dfb-dest-image-clip.patch
# patch -p1 < 003-cairo_dfb-zero-box-clip-fix.patch
# patch -p1 < 004-cairo-blit-optimization.patch
# patch -p1 < 005-cairo-font-crash-fix.patch
# ./configure --prefix=/usr/local/webkit --host=arm-linux --enable-directfb=yes --enable-xlib=no --enable-xlib-xrender=no --enable-xcb=no --without-x --disable-win32
# make
# make install
# cd ..
pango-1.20.5
# wget http://ftp.gnome.org/pub/GNOME/sources/pango/1.20/pango-1.20.5.tar.gz
# tar zxvf pango-1.20.5.tar.gz
# cd pango-1.20.5
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --enable-cairo --disable-xlib --disable-win32
# make
# make install
# cd ..
tiff 3.8.2
# wget ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.8.2.tar.gz
# tar zxvf tiff-3.8.2.tar.gz
# cd tiff-3.8.2
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x
# make
# make install
# cp -au /usr/local/webkit/* /opt/crosstool/gcc-4.1.1-glibc-2.5/armv6-vfp-linux-gnueabi/armv6-vfp-linux-gnueabi/
# cd ..
gtk+-2.12.11
# wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/gtk+-2.12.11.tar.gz
# tar zxvf gtk+-2.12.11.tar.gz
# cd gtk+-2.12.11
# vi gtk+-config.cache
ac_cv_lib_Xinerama_XineramaQueryExtension=${ac_cv_lib_Xinerama_XineramaQueryExtension=no}
# ./configure --prefix=/usr/local/webkit --host=arm-linux --without-x --with-gdktarget=directfb --cache-file=gtk+-config.cache
# make
# make install
# cd ..
이제 DirectFB기반의 Gtk+-2.0이 빌드되었습니다. 이 상태로 보드에 올려서 gtk-demo를 실행하시면 됩니다.
sqlite 3.6.2
# wget http://www.sqlite.org/sqlite-3.6.2.tar.gz
# tar zxvf sqlite-3.6.2.tar.gz
# cd sqlite-3.6.2
# ./configure --prefix=/usr/local/webkit --host=arm-linux
# make
# make install
# cd ..
curl 7.18.2
# wget http://curl.s-lines.net/download/curl-7.18.2.tar.gz
# tar zxvf curl-7.18.2.tar.gz
# cd curl-7.18.2
# vi configure
28733라인에 { (exit 1); exit 1; }; } à } 만 남기고 지운다.
# ./configure --prefix=/usr/local/webkit --host=arm-linux --with-ca-path=/usr/local/webkit/certs
# make
# make install
# cd ..
icu 3.6 for x86
icu를 컴파일 하다보면 컴파일중 생성한 tool을 이용하여 새로운 소스코드를 생성하는 과정에서 크로스 컴파일된 툴이 실행되지 못하는 오류가 있어 먼저 x86용으로 빌드한다. (디렉토리 : icu_x86)
# wget http://download.icu-project.org/files/icu4c/3.8.1/icu4c-3_8_1-src.tgz
# tar zxvf icu4c-3_8_1-src.tgz
# mv icu icu_x86
# cd icu_x86/source
# ./configure --enable-tests=no --enable-samples=no
# make
# cd ../../
icu 3.6 for arm
# tar zxvf icu4c-3_8_1-src.tgz
# cd icu/source
이전에 x86으로 빌드했던 것을 링크한다.
# ln –s ../../icu_x86/source/bin bin_x86
# vi data/icupkg.inc.in
마지막줄을 아래와 같이 변경
GENCCODE=../bin_x86/genccode
GENCMN=../bin_x86/gencmn
ICUPKG=../bin_x86/icupkg
# vi data/Makefile.in
bin_x86=../bin_x86 ß 8번째 라인에 추가
Makefile내의 BINDIR을 bin_x86으로 변경한다. (vi 명령 “:%s/BINDIR/bin_x86”)
# vi icudefs.mk.in
229번 라인을 아래와 같이 수정
INVOKE = $(LDLIBRARYPATH_ENVVAR)= /home/juncon/WebKit/libs/icu_x86/source/lib:$(LIBRARY_PATH_PREFIX)$(LIBDIR):$(top_bu ilddir)/stubdata:$(top_builddir)/tools/ctestfw:$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER)
# vi extra/uconv/Makefile.in
141번 라인을 아래와 같이 수정
$(INVOKE) $(PKGDATA_INVOKE_OPTS) ../../bin_x86/pkgdata -p $(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst
164번 라인을 아래와 같이 수정
$(INVOKE) ../../bin_x86/genrb -e UTF-8 -s $(^D) -d $(@D) $(^F)
# vi extra/uconv/pkgdata.inc.in
마지막 라인을 아래와 같이 수정
GENCCODE=../../bin_x86/genccode
GENCMN=../../bin_x86/gencmn
ICUPKG=../../bin_x86/icupkg
# ./configure --prefix=/usr/local/webkit --host=arm-linux --enable-tests=no --enable-samples=no
# gmake
# gmake install
WebKit 빌드
FTP에서 다운받은 WebKit의 소스가 있는 디렉토리로 이동한다.
# cd /home/juncon/WebKit/WebKit-r36309
# ./autogen.sh --prefix=/usr/local/webkit --host=arm-linux --enable-debug=no --with-target=directfb
# make
# make install
WebKit의 실행파일인 GtkLauncher는 인스톨되지 않으므로 별도로 복사한다.
# cp ./Programs/.libs/GtkLauncher /usr/local/webkit/bin
한글 지원을 위한 폰트 설정
기본적으로 한글 폰트가 없어 보드에 포팅하고 실행을 하면 한글은 깨진다. 그래서 윈도우에서 사용하고 있는 gulim.ttc파일등을 사용하도록 설정한다.
폰트는 윈도우 PC의 c:\windows\fonts에 있다.
# mkdir /usr/local/webkit/share/fonts
# cp ARIALUNI.TTF gulim.ttc /usr/local/webkit/share/fonts
fonts.conf 파일을 수정해 준다.
# vi /usr/local/webkit/etc/fonts/fonts.conf
26라인에
USB 만들기
본 문서에는 USB메모리를 ext3로 포멧한 후 사용하였다. 만약 mtdblock에 복사하고자 한다면 USB에 담은 결과물을 그대로 올리면 된다.
먼저 USB메모리를 ext3로 포멧한다.
USB 디바이스: /dev/sdc1
# fdisk /dev/sdc
fdisk 사용법은 man fdisk를 참조한다.
# mkfs.ext3 /dev/sdc1
# mount /dev/sdc1 /mnt/usb
/usr/local/webkit 디렉토리를 USB에 복사한다.
# cp –aR /usr/local/webkit /mnt/usb/
# cd /mnt/usb/webkit
필요없는 파일들을 삭제한다.
# find ./ -name “*.a” | xargs rm -rf
# find ./ -name “*.la” | xargs rm -rf
# find ./ -name “include” | xargs rm -rf
# find ./ -name “man” | xargs rm –rf
# cd ../../
# umount /mnt/usb
A&W6410에서 실행
이제 보드를 부팅하고 WebKit을 실행하기 위한 환경들을 설정한다. 당연히 인터넷에 접속 가능한 상태여야 한다.
ip설정
# ifconfig eth0 192.168.0.45
# route add default gw 192.168.0.1 eth0
DNS 설정
# vi /etc/resolv.conf
nameserver 210.94.0.73
WebKit 실행전 준비
# mount /dev/sda1 /mnt/usb
# cd /usr/local
# ln -s /mnt/usb/webkit
환경변수를 설정한다.
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/webkit/lib
export PATH=/usr/local/webkit/bin:/sbin:/usr/sbin:/bin:/usr/bin
export LD_PRELOAD=/usr/lib/libts.so:/usr/lib/ts/pthres.so
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
WebKit 실행
# cd /usr/local/webkit/bin
만약 빌드 후 처음 실행이라면 gdk-pixbuf-query-loaders와 pango-querymodules를 실행한다.
# mkdir /usr/local/webkit/etc/pango
# ./pango-querymodules > ../etc/pango/pango.modules
# ./gdk-pixbuf-query-loaders > ../etc/gtk-2.0/gdk-pixbuf.loaders
이제 WebKit을 실행한다.
# ./GtkLauncher http://www.google.co.kr
맨처음 실행하게 되면 font를 캐쉬하는 작업을 하기 때문에 WebKit이 뜨기 까지 시간이 걸린다.