1 장. 설치하기 전 준비 및 기본 절차
1.1 설치하기 전에 필요한 것들
jdk117_v3
jsdk2.0
apache_1.3.9
ApacheJServ-1.0
위의 것들을 다운받아 적당한 위치에 풀어 놓는다.
jdk 는 /usr/local/jdk117 디렉토리에
jsdk 는 /usr/local/jsdk20 디렉토리에
apache 는 /tmp/apache_1.3.9 디렉토리에
ApacheJServ 는 /tmp/ApacheJServ-1.0 디렉토리에 있는 것으로 간주하고 아래를 설명.
1.2 리눅스에서 컴파일하여 설치하기
리눅스에서 컴파일해서 설치하는 대부분의 패키지는 보통 다음 세 가지 명령을
순서대로 하면 된다.
# ./configure .....필요한 옵션들.......
# make
# make install
./configure 는 환경에 맞게 여러가지 설정을 잡아 주는 것이고,
make 는 컴파일하는 과정이고, make install 은 설치 과정이다.
제 2 장. 아파치 웹서버의 설치
2.1 아파치에 필요한 jserv모듈의 복사
우선 apache_1.3.9 을 풀어놓은 디렉토리 /tmp/apache_1.3.9으로 이동한다.
# cd /tmp/apache_1.3.9
디렉토리 src/modules/ 밑에 디렉토리 jserv 를 만들고, 이 디렉토리로 이동한다.
# cd src/modules
# mkdir jserv
# cd jserv
/tmp/ApacheJServ-1.0/src/c/ 밑의 모든 파일을
현재 디렉토리(/tmp/apache_1.3.9/src/modules/jserv)에 복사한다.
# cp /tmp/ApacheJServ-1.0/src/c/* .
다시 apache_1.3.9 의 기본 디렉토리로 이동한다.
# cd ../../..
2.2 컴파일하기 전 환경 잡기
# ./configure --enable-rule=SHARED_CORE \
--enable-module=so \
--prefix=/usr/local/apache \
--activate-module=src/modules/jserv/mod_jserv.c
위의 명령을 내릴 때는 한 줄씩 입력하고 각 줄의 끝에서 엔터 키를 누른다.
[참고]
아파치 웹서버를 디렉토리에 /usr/local/apache에 설치하기 위해
옵션 --prefix=/usr/local/apache를 주었는데 다른 곳에 설치하려면 이 옵션을 다르게 준다.
옵션 --prefix 의 사용법은 --prefix=...... 이고, ...... 부분에 실제 설치될 디렉토리를 적어 준다.
예를 들어, --prefix=/etc/apache 라고 적어 주면 아파치 웹서버가 /etc/apache 디렉토리에 설치된다.
실제 설치는 다음의 설치 순서 중 마지막 부분인 make install 을 실행한 후에야 이루어진다.
2.3 컴파일하기
# make
2.4 설치하기
# make install
제 3 장. ApacheJServ 의 설치
3.1 셸 환경변수 JAVA_HOME
필요하면 다음 명령을 미리 실행하여 환경변수 JAVA_HOME 의 값을 정해 둔다.
echo $JAVA_HOME 하여 이 환경변수의 값을 볼 수 있다.
# JAVA_HOME="/usr/local/jdk117/"; export JAVA_HOME
환경변수 확인:
# echo $JAVA_HOME
3.2 디렉토리 이동
이제 ApacheJServ 1.0 을 설치하기 위해 이를 풀어놓은 디렉토리
/tmp/ApacheJServ-1.0로 이동한다.
# cd /tmp/ApacheJServ-1.0
3.3 컴파일 하기 전 환경 잡기
# ./configure --with-apache-install=/usr/local/apache \
--prefix=/usr/local/jserv --enable-apache-conf \
--with-jsdk=/usr/local/jsdk20/lib/jsdk.jar
[참고 1]
옵션 중에 --prefix=...... 부분에는 jserv 모듈이 설치될 디렉토리를 적어 준다.
[참고 2]
--with-apache-install=...... 부분에는 앞의 절차에 따라 아파치 웹서버가 설치된
디렉토리를 적어준다.
이 예에서는 /usr/local/apache 라고 하였다.
[참고 3]
--with-jsdk=...... 부분에는 이미 설치되어 있는
JSDK 2.0 의 jsdk.jar 의 (파일명을 포함한) 전체 경로를 적어 준다.
이 예에서는 /usr/local/jsdk20/jsdk.jar 라고 하였다.
3.4 컴파일하기
# make
3.5 설치하기
# make install
제 4 장. 아파치 웹서버의 동작 확인
4.1 기존의 웹 서비스의 중지
만일 80 포트를 사용하는 웹서버가 이미 떠 있다면 이를
중지시켜야 한다. 이를 위해 다음 명령 중하나를 실행한다.
# kill
# /etc/rc.d/init/httpd stop
# /etc/httpd stop
# /usr/local/apache/bin/apachectl stop
[참고]
리눅스를 설치하면서 자동으로 함께 설치된 아파치 웹서버의
PID 파일은 디렉토리 /var/run 에 있다.
이 파일의 존재 유무로 기존의 웹서버가 동작하는지 앞으로 새로 설치된
웹서버가 동작하는지 확인할 수 있다.
리눅스가 재부팅되면 새로 설치된 웹서버가 아니라 기존의 웹서버가 동작할 경우가 있기 때문이다.
4.2 새 아파치 웹서버의 서비스 시작
이제 새로 설치된 아파치 웹서버를 가동시킨다.
# /usr/local/apache/bin/apachectl start
4.3 웹 브라우저로 확인
웹 브라우저로 다음을 방문하여 아파치웹서버가 작동하는지 확인한다,
URL 주소: http://localhost/ 또는 http://호스트주소/
4.4 새 아파치웹서버의 PID 확인
아파치웹서버가 설치된 디랙토리 /usr/local/apache 로 이동한다.
# cd /usr/local/apache
아파치웹서버가 작동되면 ./logs/ 디렉토리에 PID 파일 httpd.pid 이
생성된다. ls 명령과 more 명령으로 이를 확인한다.
# ls ./logs
# more ./logs/httpd.pid
4.5 아파치 웹서버의 중지
이제 아파치 웹서버를 중지시켜 본다.
# ./bin/apachectl stop
PID 파일 httpd.pid 이 없어졌는지 확인한다.
아파치웹서버를 중지시켰으면 이 PID 파일이 없는 것이 정상이다.
# ls ./logs
제 5 장. 서블릿 동작시키기
5.1 디렉토리 이동
다시 아파치웹서버가 설치된 디렉토리로 이동한다.
현재 디렉토리가 /usr/local/apache 이면 이 과정은 필요 없다.
# cd /usr/local/apache
이제 conf 파일과 peroperties 파일을 카피하고 몇 군데 고쳐 주어야 한다.
./conf 디렉토리로 이동한다.
# cd conf
5.2 http.conf 의 수정
ApacheJServ 1.0 를 풀어놓고 컴파일 하던 그 디렉토리 밑에 conf 디렉토리 밑에 있는 httpd.conf 파일을 현재 디렉토리 밑에 jserv.conf 라는 새 이름으로 카피한다.
왜냐하면 현재 디렉토리에 httpd.conf 라는 파일이 이미 존재하기 때문이다.
또 /tmp/ApacheJServ-1.0/conf 디렉토리 밑에 있는 파일 jserv.properties 와 zone.peoperties 를 현재 디렉토리로 카피한다.
# cp /tmp/ApacheJServ-1.0/conf/httpd.conf jserv.conf
# cp /tmp/ApacheJServ-1.0/conf/jserv.* .
# cp /tmp/ApacheJServ-1.0/conf/zone.* .
httpd.conf 와 jserv.conf 의 내용을 합친 것이 httpd.conf 가
되도록 한다. 이를 위해 편집기를 써도 되고 셸에서 다음 명령을
실행해도 된다.
# cat jserv.conf >> httpd.conf
[참고]
여기서 출력 리디렉션을 반드시 >> 로 해야만 jserv.conf 의 내용이 httpd.conf 의 됫 부분에 추가된다.
이제 httpd.conf 파일을 읽어서 몇 가지를 확인하고 수정한다.
편집기에서 mod_jerv 라는 글자를 찾으면 수정할 곳으로 빨리
찾아갈 수 있다.
우선
ApJServMount /servlets /root 라고 된 곳을 찾아
#ApJServMount /servlets /root
ApJServMount /servlets /example로 고친다.
[참고]
이는 나중에 Hello.class 라는 서블릿 클래스를 웹 상에서 방문할 때 URL 주소를
http://호스트주소/servlets/Hello로 적기 위함이다.
오른 쪽에 적어준 /example 이라는 것은 ApacheJServ 1.0 beta 이후 새로 도입된 zone 이라는 것으로서 zone 의 이름이 example 임을 의미한다.
zone 이란 서블릿 들의 묶음이라고 보면 된다.
나중에 파일 jserv.properties 를 고칠 때 example 이라는 이름의 zone 에 대해
설정해야 한다.
만일 이곳을 ApJServMount /example /example이라고 적어 주면 웹 상에서
방문하는 URL은 http://호스트주소/example/Hello이다.
또 이곳을 ApJServMount /hong/myServlet /example이라고 할 경우에는
방문할 URL이 http://호스트주소/hong/myServlet/Hello이다.
5.3 파일 jserv.properties 의 수정
ApacheJServ 는 아파치웹서버의 설치 디렉토리를 기준으로 파일 ./conf/jserv.properties 를 가장 먼저 읽고, 이 파일에서 설정해 준 것을 기준으로 동작한다.
zone 에 관한 것도 이 파일을 읽음으로써 인식한다,
그 이유는 파일 ./conf/mod_hserv.conf 에서 ApJServProperties 디렉티브가
다음처럼 되어 있기 때문이다.
ApJServProperties ./conf/jserv.properties
다음에는 example 이라는 이름의 zone 을 만들고, 이 zone의 서블릿 클래스 파일들이 있는 곳(디렉토리)를 지정하고, 이 zone 에 대한 프로퍼티 파일이 어느 것인지 설정한다.
현재 디렉토리가 /usr/local/apache/conf 인지 확인하고, 파일 jserv.properties를
편집기로 열어서 다음처럼 몇 군데를 수정한다.
우선 example 이라는 이름의 zone 을 만들기 위해 zones=root로 된 곳을 찾아
#zones=root
zones=example
로 고친다. 또 example 이라는 이름의 zone 의 프로퍼티 파일을 알려 주기 위해
#root.properties=/tmp/ApacheJServ-1.0/conf/zone.properties
로 된 곳을 찾아 아래와 같이 고친다.
#root.properties=/tmp/ApacheJServ-1.0/conf/zone.properties
example.properties=/tmp/ApacheJServ-1.0/example/example.properties
[참고]
/tmp/ApacheJServ-1.0/example/example.properties 라는 파일에는
repositories=/tmp/ApacheJServ-1.0/example
라고 된 곳이 있는데 이곳에는 서블릿 클래스를 실제로
갖다 둘 디렉토리를 적어 준다.
적는 규칙은 다음과 같다.
repositories=[repository],[repository]...
여기서 지정한 디렉토리는 ApacheJServ 가 서블릿을 로딩할 때 기본 디렉토리로 인식하는 것이다. 즉, CLASSPATH 와 비슷한 기능을 한다고 보면 된다.
5.4 파일 example.properties 에 대한 이해
파일 /tmp/ApacheJServ-1.0/example/example.properties 에는
repositories=.... 외에도 다음 것들이 정해져 있는데 이는
프로퍼티 파일을 만들 때 자주 참조되는 내용이다.
autoreload.file=true
init.timeout=10000
destroy.timeout=10000
session.timeout=1800000
session.checkFrequency=30000
singleThreadModelServlet.initialCapacity=5
singleThreadModelServlet.incrementCapacity=5
singleThreadModelServlet.maximumCapacity=10
###################
# 자동으로 시작하는 서블릿 설정.
# Syntax: servlets.startup=[classname or alias],[classname or alias],...
# Default: NONE
###################
# servlets.startup=hello,snoop,org.fool.Dummy
##################
# 서블릿에 별명(alaias) 정하기.
# Syntax: servlet.[alias].code=[classname] (String)
# Default: NONE
##################
# servlet.snoop.code=SnoopServlet
# servlet.hello.code=org.fool.Dummy
######################
# 모든 서블릿에 전달될 전역 초기값 설정하기.
# Syntax: servlets.default.initArgs=[name]=[value],[name]=[value],...
# Default: NONE
######################
# servlets.default.initArgs=common.to.everybody=Hi everybody!
######################
# Syntax: servlet.[classname].initArgs=[name]=[value],[name]=[value],...
# Default: NONE
######################
# servlet.org.fool.Dummy.initArgs=message=I'm a dummy servlet
######################
# 별명(alias)을 갖는 서블릿의 초기값 설정하기.
# Syntax: servlet.[alias].initArgs=[name]=[value],[name]=[value],...
######################
# servlet.snoop.initArgs=message=I'm a snoop servlet
# servlet.hello.initArgs=message=I say hello world to everyone
제 6 장. 설치한 후 에러 해결
에러 1. jserv.logs 파일을 생성하지 못하는 에러
브라우저로 http://localhost/servlets/Hello를 방문하니 에러가 나고,
에러 로그 파일 logs/error_log 에 다음 에러 메세지가 여러 개 있다.
java.io.IOException: Directory not writable: /usr/local/apache/logs
at org.apache.java.io.LogWriter.(LogWriter.java:286)
at org.apache.java.io.LogWriter.(LogWriter.java:202)
at org.apache.jserv.JServLog.(JServLog.java:76)
at org.apache.jserv.JServ.start(JServ.java:218)
at org.apache.jserv.JServ.main(JServ.java:153)
ApacheJServ/1.0: Error opening log file: java.io.IOException: Directory
not writable: /usr/local/apache/logs
[해결하기]
이는 아파치웹서버의 디폴트 접속 사용자(nobody)의 권한으로
로그파일 ./logs/jserv.log 파일을 생성시키지 못해서 생기는 에러이다.
이를 해결할려면 ./logs 디렉토리에서 jserv.log 파일을 하나 만든다.
그 다음 파일의 소유자를 변경한다.
# chown nobody jserv.log
# chown .nobody jserv.log
확인 : ls -al 하여 jserv.log 의 소유자 및 그룹이 nobody로 되어 있는지 확인한다.
에러 2. example.properties 를 찾지 못하는 에러
브라우저로 http://localhost/servlets/Hello를 방문하니 에러가 나고,
에러 로그 파일 logs/error_log 에 다음 에러 메세지가 있다.
ApacheJServ/1.0: No configuration file named
"example.properties" for servlet zone example
[해결하기]
파일 ./conf/jserv.properties 에서 zone 의 설정 부분을 확인한다.
확인 내용:
zones=example
example.properties=/tmp/ApacheJServ-1.0/example/example.properties
에러 3. localhost 가 인식되지 못해 일어나는 에러
이 에러는 보통은 발생하지 않으므로 별로 상관이 없으나
필자의 경우에는 리눅스 시스템이 localhost 를 인식하지 못하는
관계로 Apache & ApacheJServ 를 여러 달 동안 설치 못하다가
겨우 그 원인과 해결책을 찾아내어 성공적으로 설치하였다.
localhost 가 인식되지 못하는 시스템에서는 일반적인 html 파일을 읽을 때는 잘 되는데
서블릿을 방문하면 에러가 발생한다.
이는 아파치와 jserv가 내부적으로 apjv11 이라는 프로토콜로 통신할 때
로컬 IP 주소 127.0.0.1을 사용하기 때문이다.
이 경우에는 http://localhost/servlets/Hello 를 방문할 때
error_log 파일에 다음 메세지가 기록된다.
ApacheJServ/1.0: Exception creating the server socket:
java.net.BindException: Address already in use
더구나 아파치의 stop, start, restart 가 제대로 동작하지 않는다.
[에러 해결]
localhost 확인하기:
# /bin/ping localhost
(또는 # /sbin/route -n)
/sbin/route -n 으로 확인할 때 다음이 나오지 않으면 localhost가 잡혀 있지 않다.
localhost 에러를 해결하려면 리눅스의 넷트웍이 localhost를 인식하도록 해 주어야 한다. 우선 파일 /etc/hosts 에 다음 줄이 잘 있는지 확인한다.
없으면 편집기로 그 파일을 열어 써 주어야 한다.
127.0.0.1 localhost localhost.localdomain
localhost 는 loopback 디바이스 lo 를 사용한다.
먼저 ifconfig 명령으로 디바이스 lo 의 인터페이스를 설정하고,
그 다음 route 명령으로 그 IP 에 연결할 길을 알려 준다.
# /sbin/ifconfig lo 127.0.0.1
# /sbin/route add 127.0.0.1
[주] 필자가 이 문제를 해결하는데 하이텔의 linux 동호회에
김도한(하이텔 ID: elemia)님이 남겨 놓았던 글이
도움이 되었다.
제 7 장. 설치와 동작의 마지막 확인
이제 많은 산을 넘어 왔으니 브라우저로
http://localhost/servlets/Hello
를 방문해 본다.
Example Apache JServ Servlet
Congratulations, Apache JServ is working!
라는 문구가 나오면 성공이다.
http://soback.kornet.net/~dure707/pub/apache/installjserv.html
'Network ♡ > LINUX ¿' 카테고리의 다른 글
Beep음 끄기 (linux) (0) | 2008.06.13 |
---|---|
BIND (0) | 2008.06.13 |
[참고] httpd.conf (0) | 2008.06.13 |
[수업] 웹서버 설정 (0) | 2008.06.13 |
[수업] 네임서버 설정 (0) | 2008.06.13 |