제이닷 디엔티에서 구입한 X-5 라는 보드를 이용해서 웹 서버를 올려볼 것이다. 임베디드용 웹 서버에는 크게 두가지가 가장 많이 사용된다. Boa(가수아님) 와 Goahead 가 그것이다.
서버 시장에서 Apache 와 IIS 처럼 말이다. 다음은 내가 알고 있는 각각의 특징들이다. 언제까지나 주관적인 나의 생각이다.
boa | goahead | |
속도 | 빠르다 | 대체로 그럭저럭 |
용량 | 가볍다 | 대체로 보통 |
확장 | CGI, HTML | ASP,CGI,HTML,PERL |
솔직히 임베디드 시스템이 웹서버를 올리는 사람은 거의 없을 듯 하다. 왜냐 하면 그럴 필요가 없기 때문이다. 일반 서버보다 성능이나 퍼포먼스도 떨어지는 임베디드 시스템에 포팅을 할 필요는 없기 때문이다.
하지만, 요피에도 웹서버가 올라가는 요즘, 한번 쯤 올려봐도 무리는 없을 듯 하다.
우선 프로그램 홈페이지 http://www.boa.org 에서 최신 버전을 다운로드 한다. 현재 최신 버전은 0.94.13 이다. 압축을 풀고, 미리 설치해둔 툴 체인으로 컴파일 하면 된다.
#tar xzvf boa-0.94.13.tar.gz #cd boa-0.94.13 #cd src #vi Makefile
makefile 의 설정을 바꿔주어야 한다. 크로스 컴파일러를 사용해야 하기 때문이다. 기본적으로는 i386 컴파일러로 설정되어 있다. 30번째 줄을 다음과 같이 수정한다.
# Change these if necessary YACC = bison -y LEX = flex CC = armv5l-linux-gcc // 수정 CPP = armv5l-linux-gcc -E // 수정
수정했다면, 이제 컴파일하자!!
#make
에러없이 제대로 수행되었다면, src 디렉토리에 boa 라는 실행파일(오브젝트)가 생성되었을 것이다. 이 파일과 boa 설정 파일인 boa.conf 파일을 타겟 보드로 전송한다.
만일 아래와 같은 에러가 발생했다면,
util.c:100:1: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 오류 1
compat.h 파일을 다음과 같이 수정한다.
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff // ## 삭제한다
여기서는 전송하는 방법은 언급하지 않는다. 알아서 전송하길 ^^;
전송했다고 끝난 것이 아니다. boa 가 실행가능하도록 환경을 만들어 주어야 한다. 우선 boa.conf 파일이 위치할 /etc/boa 라는 디렉토리를 생성해야 한다.
#mkdir /etc/boa #mv boa.conf /etc/boa/
이번에는 로그 파일이 저장할 곳을 만들어 줘야 한다. boa.conf 파일을 참고 하기 바란다.
#mkdir /var/log/boa #touch /var/log/boa/access_log
이번에는 boa.conf 파일을 수정한다. 다음의 부분에서 말이다.
# Group: The group name or GID the server should run as. User nobody Group nobody // 수정
이번에는 mime.types 파일을 만들어야 한다. 이파일은 웹상에서 확장자를 보고서 어떻게 처리할지 대한 정의가 담긴 파일이다. 예를 들어 확장자가 .php4 이면 웹서버는 php 파서에게 파일을 넘긴다. 이 파일은 기존의 서버(예:apache) 에 있는 파일을 그대로 가져다가 써도 된다. 만일 구할 수 없다면, touch 명령을 만들어서 만든다. 순전히 임시방편이다.
마지막으로 Document Root, 즉 주소를 치면 가장 먼저 보이는 경로를 만들어줘야 한다.
#mkdir /var/www
이 모든 것은 boa.conf 파일을 참고하면 된다. 물론 다른 경로로 정해줘도 된다.
이제 Boa 를 올려보자!! 어디로??
#./boa #ps -aux // 혹시 모르니 확인해보자!!
그리고 외부에서 접속해보자!! 어떤가?? 페이지가 뜨면 제대로 돌아가고 있는 것이다.
이번에는 goahead 를 설치해보자! 역시 프로그램 홈페이지 http://216.211.138.77/webserver/webserver.htm 에서 최신 버전을 다운로드 받는다.
현재 최신 버전은 2.18 이다. 마찬가지로 압축을 풀고 툴 체인을 이용해서 컴파일해주면 된다.
#tar xzvf webs218.tar.gz #cd ws032112 #cd LINUX // 포팅하고자 하는 OS 의 디렉토리로 들어간다. #vi Makefile
크로스 컴파일러의 지정을 위해 몇가지 수정이 필요하다.
all: compile ARCH = libwebs.a NAME = webs CC = armv5l-linux-gcc // 수정 AR = armv5l-linux-ar // 수정 ... ... ... .c.o: armv5l-linux-gcc -c -o $@ $(DEBUG) $(CFLAGS) $(IFLAGS) $< // 수정
위에서 보면, 3 곳을 수정해 주면 된다.
그리고 컴파일 하면,
#make
webs 라는 오브젝트 파일이 생성될 것이다. 이제는 타겟 보드에 옮기는 일만 남았다.
나의 경우, 위에서 압축을 푼 ws031202 디렉토리를 통째로 올렸다. 그리고서 webs 를 실행시켜주는 것만으로 웹서버가 동작함을 볼 수 있었다.
#./webs
어찌보면, 허무하게 느껴질지도 모르겠다. 이대로 끝나기는 아쉬우니까.. -_-;
ws031202 디렉토리를 보면, web 이라는 디렉토리가 보일 것이다. 들어가 보면, 아~ 이곳이 Document root 구나!! 라는 생각이 들것이다.
나는 얼마전에 goahead 를 이용해서 스탠드 제어를 해봤었다. 그때 .cgi 를 이용해서 구현했었는데, 만일 cgi 를 올리고 싶다면, cgi-bin 디렉토리에다가 cgi 파일을 넣으면 되겠다.
이렇게 보면, ws031202 전체를 올리는 것보다, LINUX, webs, web 이렇게만 올려도 동작하는 데는 아무 문제가 없을 듯 하다.