EZ-S3C6410에서 실행되는 apache2 컴파일 방법

 

ez-s3c6410에서 apache, httpd 가 필요한 분들이 많으신거 같아서 컴파일한 방법을 올려드립니다.

 

1. 작업 환경

 

서버 : Ubuntu 11.04 Server 버전

툴체인 : arm-linux-gnueabi-4.3.2.tar.gz
           (ftp://ftp.falinux.com/toolchain_ramdisk/recommendation/gcc-4.3.2/arm-linux-gnueabi-4.3.2.tar.gz 파일 사용)

 

 

2. 아파치 버전

 

파일 : httpd-2.2.9.tar.gz [다운로드]

         (공식 사이트에서는 httpd-2.2.18.tar.gz 버전이 올라와 있지만, 오류를 잡지 못해서 2.2.9 버전을 사용하였습니다.)

 

 

3. 압축 풀기

 

다운로드 받은 파일의 압축을 풀어줍니다.

 

$ tar zxvf httpd-2.2.9.tar.gz

 

압축을 푼 다음 httpd-2.2.9 폴더 안으로 이동합니다.

 

$ cd httpd-2.2.9

 

참고로 제가 컴파일 할 때 절대 경로는 /staff/sepiawind/apache2/httpd-2.2.9에서 작업을 하였습니다.
컴파일 오류 메시지가 나오는 곳에 저 경로는 제가 작업한 폴더이므로 신경 쓰시지 않으셔도 됩니다.

 

 

4. 컴파일(i386)

 

apache2을 크로스 컴파일 하면서 제대로 진행되지 않는 문제점이 있습니다.

이 경우 일반 컴파일을 하여서 필요한 파일 몇가지를 복사해놔야 합니다.

 

httpd-2.2.9 폴더 안에서 작업을 진행합니다.

 

환경 설정을 먼저 해줍니다.

$ ./configure --with-included-apr --enable-so && make

 

끝난 후, 아래와 같이 폴더를 만든 다음, 필요한 파일 2가지를 복사해놓습니다.

 

컴파일 한 곳 상위에 임시폴더 tmp 폴더를 생성합니다.

$ mkdir ../tmp

 

그 다음 아래 파일들을 tmp 폴더 아래로 복사를 합니다.

$ cp -a srclib/pcre/dftables ../tmp/

 

$ cp -a server/gen_test_char ../tmp/

 

설정한 내용들을 지워줍니다

$ make distclean

 

 

4. arm-generic-linux-eabi 로 컴파일

 

이제 ez-s3c6410 보드에서 사용하기 위해 컴파일할 차례입니다.

 

httpd-2.2.9 폴더 안에서 작업을 진행합니다.

 

아래 내용을 복사해서 설정을 합니다.

(복사할 때, html 내용이라서 약간 변형되게 복사될 수도 있습니다.
먼저 메모장에 붙여넣기를 하신 다음, 다시 그것을 복사해서 쉘에서 붙여넣으신 다음 실행하시면 됩니다.)

 

참고로 설치 폴더 위치를 --prefix=/usr/local/apache2 으로 설정하였습니다.

다른 폴더로 설치하실 분들은 --prefix 내용을 변경해줘야합니다.

 

$ ac_cv_file_dbd_apr_dbd_mysql_c=no ac_cv_sizeof_size_t=4 ac_cv_sizeof_ssize_t=4 \
ac_cv_sizeof_int=4 apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no \
ac_cv_func_setpgrp_void=no ac_cv_file__dev_zero=no ap_void_ptr_lt_long=no \
CC=arm-generic-linux-gnueabi-gcc CPP=arm-generic-linux-gnueabi-cpp \
STRIP=arm-generic-linux-gnueabi-strip OBJCOPY=arm-generic-linux-gnueabi-objcopy \
RANLIB=arm-generic-linux-gnueabi-ranlib LD=arm-generic-linux-gnueabi-ld \
./configure --prefix=/usr/local/apache2 --target=arm-generic-linux-gnueabi --build=i686 \
--host=arm-generic-linux-gnueabi --with-included-apr \
--enable-so --enable-static-htpasswd --enable-static-htdigest

 

에러 없이 끝났다면 make 명령을 실행합니다.

$ make

 

 

5. make 오류 수정(1)

 

아래와 같이 첫 번째 오류 메시지가 나타납니다.

 

(생략)
./include/apr.h:488:2: error: #error no decision has been made on APR_PATH_MAX for your platform
In file included from ./include/apr_strings.h:52,
                 from passwd/apr_getpass.c:23:
./include/apr_want.h:93: error: redefinition of 'struct iovec'
make[3]: *** [passwd/apr_getpass.lo] 오류 1
make[3]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib/apr'
make[2]: *** [all-recursive] 오류 1
make[2]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib/apr'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib'
make: *** [all-recursive] 오류 1

 

오류 메시지에 나온 곳을 처리해 줍니다.

 

먼저 srclib/apr/include/apr.h 파일을 수정합니다.

 

$ sudo vi srclib/apr/include/apr.h

 

(수정 전 : 488 라인)
#error no decision has been made on APR_PATH_MAX for your platform

 

(수정 후 : APR_PATH_MAX 255 항목을 넣고 아래 부분을 주석 처리 합니다.)
#define APR_PATH_MAX 255
/*#error no decision has been made on APR_PATH_MAX for your platform*/

 

그 다음 srclib/apr/include/apr_want.h 파일을 수정합니다.

$ sudo vi srclib/apr/include/apr_want.h

 

맞는 방법인지는 모르겠지만, 에러가 되서 주석처리 했더니 컴파일이 진행되었습니다.

 

(수정 전 : 93 라인)
struct iovec
{
}

 

(수정 후 : 주석 처리를 한다.)
/*
struct iovec
{
} */

 

수정 후, 다시 make를 실행합니다.

 

$ make

 

6. make 오류 수정(2)

 

이번엔 make를 실행하던 도중 바이너리를 실행할 수 없다는 문제가 나타납니다.

 

./dftables /staff/sepiawind/apache2/httpd-2.2.9/srclib/pcre/chartables.c
./dftables: ./dftables: 바이너리 파일을 실행할 수 없음
make[3]: *** [/staff/sepiawind/apache2/httpd-2.2.9/srclib/pcre/chartables.c] 오류 126
make[3]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib/pcre'
make[2]: *** [all-recursive] 오류 1
make[2]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib/pcre'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/srclib'
make: *** [all-recursive] 오류 1

 

아까 복사해두었던 파일을 복사하도록 합니다. 그리고 다시 make를 수행합니다.

 

$ cp ../tmp/dftables srclib/pcre/
$ make

 

또 다시 오류가 나타납니다.

 

/bin/sh: ./gen_test_char: 바이너리 파일을 실행할 수 없음
make[2]: *** [test_char.h] 오류 126
make[2]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/server'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/staff/sepiawind/apache2/httpd-2.2.9/server'
make: *** [all-recursive] 오류 1

 

아래와 같이 파일 복사를 하고 make를 해줍니다.

 

$ cp ../tmp/gen_test_char server/
$ make

 

make 가 정상적으로 끝날 것입니다.

 

 

7. make install

 

make install 을 해줍니다.

 

$ sudo make install

 

설정 할때, 저는 --prefix=/usr/local/apache2 명령을 주었기 때문에 /usr/local/apache2 위치에 설치가 될 것입니다.

설치된 폴더로 이동합니다.

 

$ cd /usr/local/apache2

 

이제 apache2 폴더는 arm-generic-linux-gnueabi 로 컴파일 되서 ez-s3c6410에서 돌아갈 수 있게 되었습니다.

 

 

컴파일 완료

 

사정상 약속이 있어서 나가봐야하기 때문에(;ㅁ; 죄..죄송합니다.)

 

컴파일이 완료된 apache2 파일을 ez-s3c6410 보드에 복사해서 실행하는 방법은 내일(다음 강좌) 설명하도록 하겠습니다.