상세 컨텐츠

본문 제목

Linux Redhat 6.1 + Java 1.3.1 + Apache + Tomcat 3.3.1 컴파일 메뉴얼

프로그래밍/시스템, 서버구축

by 라제폰 2009. 1. 5. 13:01

본문

<!------------------------------------------------------------------------>
<!--                                                                    -->
<!--  Linux Redhat 6.1 + Java 1.3.1 + Apache + Tomcat 3.3.1 컴파일 메뉴얼 -->
<!--                                                                    -->
<!--                                                                    -->
<!--          Official distribution site : http://jkkang.net/           -->
<!--                  Technical Info : jkkang65@hanmail.net             -->
<!--                                                                    -->
<!--                          Last Updated in August 8 , 2002           -->
<!--                                  Written by Kang Jul Ki            -->
<!--                                                                    -->
<!--                                                                    -->
<!--                  Powered by http://jkkang.net/ since 1996          -->
<!--                                                                    -->
<!------------------------------------------------------------------------>


  본 문서는 오래전에 만들었던 AIX 4.3.3과 Java 1.2.2환경에서 Tomcat 3.2.3을 연동하는 방법을 Linux 에서
Java 1.3.1과 Tomcat 3.3.1 버전에 맞추어 수정한 문서이다. 기존의 만들어진 문서와 거의 비슷하므로 약간씩 수정
된 부분만 참고하면 쉽게 컴파일을 해서 연동을 할수 있을것이다. 본 문서를 따라하다가 발생하는 문제에 대해서는
어떤 책임도 저자가 지지 않는다. 문서의 끝에서는 mod_jserv.so, mod_jk.so 을 직접 컴파일해서 생성을 시킬것이다.

/******************************************************************************************

저자가 테스트한 환경은 다음과 같다. 하지만, 그와 비슷한 환경에서도 컴파일이 될 것이다.

OS: Linux Redhat 6.1
Apache: 1.3.26 or 1.3.x, 2.0.x
Java: 1.3.1 or higher
gcc: 2.95.2 or higher
Jakarta-Tomcat: 3.3.1 or higher
perl: 5.0 or higher


Download Site:
 Apache: 1.3.26 Source Code: http://www.apache.org/
  반드시 소스코드를 다운받는다. 그 이유는 tomcat하고 연동을 위해서는 컴파일이 필요하다.
  아파치의 소스코드는 /usr/local/apache 에 설치하되, 나중을 위해서 이곳에 컴파일을 한후 인스톨을
  한다. 소스코드는 반드시 같은 디렉토리에 남겨두도록 하자.
 Java: Java 1.3.1
  Java는 각 OS별로 바이너리가 따로 있다. Linux용 Java는 http://www.blackdown.org/ 에서 다운받는다.
 gcc: Linux Redhat에는 이미 gcc 가 기본적으로 깔려있다.
 Tomcat: 3.3.1 Source Code: http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.3.1/src/
 perl: Linux Redhat에는 이미 인스톨이 되어있다.
 tar: Linux 에는 이미 들어있다. 반드시 gnu tar을 바란다. AIX의 /bin/tar는 100 character 제한 문제때문에
       tomcat을 다운받아서 풀면 파일명이 짤려서 제대로 파일이 풀리지 않는다. 파일명이 짤리게 되면 Tomcat
       컴파일시 파일명을 제대로 못찾아서 에러가 발생한다. ftp.gnu.org에서 다운받는다.
       그리고 컴파일한다. 또는 ftp.snu.ac.kr, ftp.sogang.ac.kr과 같은 mirroring 사이트를 이용하자.
 make: Linux 에는 이미 들어있다. gnu make 권장

*******************************************************************************************/

위에서 higher란 말은 그 이상에서도 컴파일이 될수 있음을 의미한다. 옆에 있는 버전은 저자가 테스트한 환경을
의미한다. 각각의 디렉토리및 경로는 저자의 경우를 예로 들은 것이므로 자신들의 환경에 맞추어서 약간씩 변경
할 수도 있다. User ID는 root로 작업하기 바란다. 물론 tomcat 이란 user id로 해도 상관없다.

 

 

1. Apache 1.3.26 인스톨/컴파일

2002년 8월 7일 현재 apache 1.3.26버전이 1.3.x 버전에서는 가장 최신이다. 현재 Apache 2.x 버전도 Release
되어 사용하고 있으나, 저자는 오랜동안 검증되어 꾸준히 버전업되고 있는 Apache 1.3.x 버전을 사용하였다. 아직,
Apache 2.x에서 Tomcat 3.3.1 을 컴파일 할 계획은 없다. 나중에 시간이 나면 시도를 해볼 생각이다.

root directory: /usr/local/apache 권장, configure 를 돌릴때 --prefix=/usr/local/apache 가 기본이므로
특별히 위 디렉토리에 인스톨하고자 한다면 --prefix 를 줄 필요는 없다.

# cd /usr/local
# ls
 ...
 apache_1.3.26.tar.gz
 ...
# tar zxvf apache_1.3.26.tar.gz
# ln -s apache_1.3.26 apache
# cd apache

Makefile 생성
# ./configure --prefix=/usr/local/apache --enable-module=so

--enable-module=so 는 Apache로 하여금 DSO를 지원토록 하기 위함이다. 필수적이다.

# make
# make install

Apache가 제대로 깔렸는지 확인할려면
# ./bin/apachectl start
# ps -ef |grep httpd

해서 process들이 제대로 보이거나,

# telnet localhost 80

해서 화면이 멈췄을때, get 해서 Apache 버전이 보이면 제대로 인스톨이 성공으로 끝난것이다.

*******************************************************************************************/

 

 

2. .csh 설정 (환경변수) - Shell은 csh을 사용한다.
만약 사용자가 bash 을 사용한다면 다음과 같이 .bashrc에 넣어주면 된다.

setenv CLASSPATH        /usr/local/java131/lib/tools.jar:/usr/local/java131/jre/lib:.
setenv JAVA_HOME        /usr/local/java131
setenv JAKARTA_HOME /usr/local/apache/jakarta
setenv ANT_HOME  $JAKARTA_HOME/jakarta-ant-1.4.1
setenv TOMCAT_HOME      /usr/local/apache/jakarta/jakarta-tomcat/build/tomcat

bash 를 사용할때의 환경변수 지정은 다음과 같다.

export  CLASSPATH=/usr/local/java131/lib/tools.jar:/usr/local/java131/jre/lib:.
export  JAVA_HOME=/usr/local/java131
export  JAKARTA_HOME=/usr/local/apache/jakarta
export  ANT_HOME=$JAKARTA_HOME/jakarta-ant-1.4.1
export  TOMCAT_HOME=/usr/local/apache/jakarta/jakarta-tomcat/build/tomcat

* GNU tar 실행을 위해서 /usr/local/bin/tar가 실행되도록, 다음과 같이 /usr/local/bin을 맨 앞으로...
(ex) .profile --> PATH=/usr/local/bin:/usr/bin:/etc:/usr/sbin
 
*******************************************************************************************/

 

 

3. Java 1.3.1 이 제대로 깔렸는지 확인

저자의 경우는 /usr/local/java131 에 설치를 했다.
# cd /usr/local/java131
# ls -l
-r--r--r--    1 root     root         4003  5월  6  2001 COPYRIGHT
-r--r--r--    1 root     root        11480  5월  6  2001 LICENSE
-r--r--r--    1 root     root        13616  5월  6  2001 LICENSE.fr
-r--r--r--    1 root     root         3599  5월  6  2001 README
-r--r--r--    1 root     root        12024  5월  6  2001 README.html
drwxrwxr-x    3 root     root         4096  5월  6  2001 bin/
drwxrwxr-x    6 root     root         4096  5월  6  2001 demo/
drwxrwxr-x    3 root     root         4096  5월  6  2001 include/
drwxrwxr-x    3 root     root         4096  5월  6  2001 include-old/
drwxrwxr-x    5 root     root         4096  5월  6  2001 jre/
drwxrwxr-x    3 root     root         4096  5월  6  2001 lib/
drwxrwxr-x    4 root     root         4096  5월  6  2001 man/
-rw-rw-r--    1 root     root      5049576  5월  6  2001 src.jar


*******************************************************************************************/

 

 

4. $JAKARTA_HOME 디렉토리에 Tomcat 관련 파일 다운로드

# cd $JAKARTA_HOME
# ls -l

-rw-r--r--   1 root     system   1328414  7월 29일 22:43 jakarta-ant-1.4.1-src.tar.gz
-rw-r--r--   1 root     system     65342  7월 29일 22:35 jakarta-servletapi-src.tar.gz
-rw-r--r--   1 root     system   2157412  7월 29일 22:35 jakarta-tomcat-3.3.1-src.tar.gz

*******************************************************************************************/

 

 

5. jakarta-ant-1.4.1-src.tar.gz 인스톨

# cd $JAKARTA_HOME
# tar zxvf jakarta-ant-1.4.1-src.tar.gz
# cd jakarta-ant-1.4.1
# ./build.sh

after successfully compile,

# cd dist/bin
# ls -l

-rwxr-xr-x    1 jkkang   seluser      3280  8월  7 10:06 ant*
-rw-r--r--    1 jkkang   seluser      3056  8월  7 10:06 ant.bat
-rwxr-xr-x    1 jkkang   seluser        77  8월  7 10:06 antRun*
-rw-r--r--    1 jkkang   seluser       301  8월  7 10:06 antRun.bat
-rw-r--r--    1 jkkang   seluser       212  8월  7 10:06 lcp.bat
-rwxr-xr-x    1 jkkang   seluser      3736  8월  7 10:06 runant.pl*
-rw-r--r--    1 jkkang   seluser      2705  8월  7 10:06 runant.py


Java CLASSPATH 에 ant.jar 를 다음과같이 추가해준다.

setenv CLASSPATH        /usr/local/java131/lib/tools.jar:/usr/local/java131/jre/
lib:/usr/local/apache/jakarta/jakarta-ant-1.4.1/dist/lib/ant.jar:.

ant 파일의 생성을 확인한 후에 이 실행파일에 PATH 환경변수에 적용되도록 아래와 같이 추가해준다.

.cshrc 에 "$ANT_HOME/dist/bin" PATH 추가

# cat .cshrc
...
set path=( /usr/local/bin /bin /usr/bin /usr/ucb /etc /usr/ccs/bin /usr/etc )
set path=( $path /usr/sbin /usr/local/java131/bin /usr/local/apache/bin /usr/loc
al/apache/jakarta/jakarta-ant-1.4.1/dist/bin . )

...

추가를 해준다음에는 환경변수에 적용토록 다음과 같이 실행을 해주거나 logout/login을 다시한다.
# cd ~/
# source .cshrc

or

logout/login

*******************************************************************************************/

 


6. jakarta-servletapi-src.tar.gz 인스톨

# cd $JAKARTA_HOME
# gzip -dc jakarta-servletapi-src.tar.gz | tar xvf -
# mv jakarta-servletapi-src jakarta-servletapi
# cd jakarta-servletapi
# chmod +x build.sh
# ./build.sh dist

Buildfile: build.xml

BUILD FAILED

No JAXP compliant XML parser found. Please visit http://xml.apache.org for a suitable parser

와 같이 에러 발생하면, 다음에다가 jaxp.jar 를 추가한다.

setenv  CLASSPATH /usr/java130/lib/tools.jar:/usr/java130/jre/lib:/usr/local/apache/jakarta/jakarta-ant-1.4.1/dist/lib/ant
.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/jaxp.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/crimson.jar:.

after successfully compile

# cd lib
# ls -l

-rw-r--r--   1 root     system     40978  7월 30일 12:05 servlet.jar


.cshrc 에 servlet.jar CLASSPATH에 추가한다.

# vi ~/.cshrc

...
setenv  CLASSPATH /usr/java130/lib/tools.jar:/usr/java130/jre/lib:/usr/local/apache/jakarta/jakarta-ant-1.4.1/dist/lib/ant
.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/jaxp.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/crimson.jar:/usr/
local/apache/jakarta/jakarta-servletapi/lib/servlet.jar:.

...

# cd ~/
# source .cshrc

해서 환경변수에 적용시켜준다. servlet.jar 는 java source code를 servlet 과 함께 프로그래밍하기 위해서
꼭 필요하다.

*******************************************************************************************/

 

 

7-1. jakarta-tomcat-3.3.1-src.tar.gz 인스톨 - 첫번째

이 부분에서 README 파일을 보면 "unpacked" version of Tomcat (builds quicker because
  no time is spent JARing up results) 를 생성한다고 나온다. 컴파일을 할때 README 파일은 반드시 읽는
습관을 갖도록 하자. 저자도 README 파일을 보고 컴파일을 한 것이다.

# cd $JAKARTA_HOME
# gzip -dc jakarta-tomcat-3.3.1-src.tar.gz | tar xvf -
# mv jakarta-tomcat-3.3.1-src jakarta-tomcat
# cd $JAKARTA_HOME/jakarta-tomcat
# ant

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/
Main

발생시

.cshrc 에서 CLASSPATH 부분에 마지막 ant.jar 경로추가
...
setenv  CLASSPATH /usr/java130/lib/tools.jar:/usr/java130/jre/lib:/usr/local/apache/jakarta/jakarta-ant-1.4.1/dist/lib/ant
.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/jaxp.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/crimson.jar:/usr/
local/apache/jakarta/jakarta-servletapi/lib/servlet.jar:/usr/local/apache/jakarta/jakarta-ant-1.4.1/dist/lib/ant.jar:.
...

추가를 해준다음에는 환경변수에 적용토록 다음과 같이 실행을 해주거나 logout/login을 다시한다.
# cd ~/
# source .cshrc
# cd $JAKARTA_HOME/jakarta-tomcat
# ant

BUILD FAILED

/usr/local/apache_1.3.26/jakarta/jakarta-tomcat/build.xml:540: Could not find fi
le /usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/ant.jar to copy.

하면, 다음과 같이 한다. 위의 메시지를 보면 ant.jar 파일을 잘못 찾아서 나는 에러다. 이 문제는
Tomcat 개발자들이 뭔가 실수를 한듯 하다. 이 외에도 몇가지 비슷한 실수가 보이기는 하지만...
이런 실수들을 잡기 위해서 메뉴얼을 만드는 지도...

csh 를 사용하는 사용자의 경우에는 위에서 설명했듯이 .cshrc 에 설정토록 한다. README 파일을 읽어보게
되면 왜 Tomcat 컴파일시 ant 를 쓰는지 나온다.

*******************************************************************************************/

 

 

7.2 jakarta-tomcat-3.3.1-src.tar.gz 인스톨 - 두번째

 이 부분에서 README 파일을 보면  a binary distribution version of Tomcat 를 생성한다고 나온다.

# cd $JAKARTA_HOME/jakarta-tomcat
# ant dist

BUILD FAILED

/usr/local/apache_1.3.26/jakarta/jakarta-tomcat/build.xml:540: Could not find fi
le /usr/local/apache/jakarta/jakarta-ant-1.4.1/lib/ant.jar to copy.

하면, 다음과 같이 한다. 위의 메시지를 보면 ant.jar 파일을 잘못 찾아서 나는 에러다. 이 문제는
Tomcat 개발자들이 뭔가 실수를 한듯 하다. 이 외에도 몇가지 비슷한 실수가 보이기는 하지만...
이런 실수들을 잡기 위해서 메뉴얼을 만드는 지도...

# cd $ANT_HOME/dist/lib
# cp ant.jar $ANT_HOME/lib

다시 시도
# cd $JAKARTA_HOME/jakarta-tomcat
# ant dist

*******************************************************************************************/

 

 

 

8-1. Tomcat 가동하기/죽이기 - "unpacked" version of Tomcat

# cd $JAKARTA_HOME/jakarta-tomcat/build/tomcat
# ./bin/startup.sh

웹 화면에서 http://localhost:8080 를 접속해보면 Tomcat 이 실행된 화면을 볼수가 있다. 반드시 Tomcat 이
실행된 화면에서 Hello World 프로그램을 실행해 보기 바란다.

# cd $JAKARTA_HOME/jakarta-tomcat/build/tomcat
# ./bin/shutdown.sh


8-2. Tomcat 가동하기/죽이기 - distribution version of Tomcat

# cd $JAKARTA_HOME/jakarta-tomcat/dist/tomcat
# ./bin/startup.sh

웹 화면에서 http://localhost:8080 를 접속해보면 Tomcat 이 실행된 화면을 볼수가 있다.

# cd $JAKARTA_HOME/jakarta-tomcat/bdist/tomcat
# ./bin/shutdown.sh


와 같이 두 가지 방법이 있겠으나, 실행은 같다.

*******************************************************************************************/

 

 

10-1. mod_jk.so 생성 (mod_jserv.so의 대체버전)

mod_jk.so을 직접 컴파일하려면 다음과 같이 한다. mod_jk.so는 mod_jserv.so를 대체하기 위한 다음버전이다.
최근에는 mod_jserv.so보다 많이 쓰이는 추세다. 저자는 mod_jk.so 를 사용할것을 권한다.

# cd $JAKARTA_HOME/jakarta-tomcat/src/native/mod_jk
# vi README
# cd apache1.3
# chmod +x build-unix.sh
# ./build-unix.sh

성공하면,

# ls -l mod_jk.so
-rwxr-xr-x    1 jkkang   seluser    119778  8월  8 13:43 mod_jk.so*

# cp mod_jk.so apache/libexec

# vi /usr/local/apache/conf/httpd.conf

마지막 줄에,

Include /usr/local/apache/jakarta/jakarta-tomcat/build/tomcat/conf/jk/mod_jk.conf
를 추가한다. 단 경로는 자신의 서버로 바꾸면된다. 위에서 /usr/local/apache를 바꾸면 될것이다.
그리고 mod_jk.conf 을 아래와 같이 수정한다.

# cat mod_jk.conf

LoadModule jk_module libexec/mod_jk.so

<IfModule mod_jk.c>

JkWorkersFile   /usr/local/apache/jakarta/jakarta-tomcat/build/tomcat/conf/jk/workers.properties
JkLogFile       /usr/local/apache/logs/mod_jk.log
JkLogLevel      error
JkMount         /*.jsp ajp12
JkMount         /servlet/* ajp12
JkMount         /examples/* ajp12
JkMount         /jkkang/* ajp12

그리고 apache 를 다시 시작해준다.

*******************************************************************************************/

 

 

10-2. mod_jsev.so 생성 및 Apache 에 설정하기

# cd $JAKARTA_HOME/jakarta-tomcat/src/native/mod_jserv
# /usr/local/apache/bin/apxs -c -o mod_jserv.so *.c

apxs는 내부적으로 perl을 호출하기 때문에 서버에 반드시 perl이 설치되어 있어야 한다. 아파치는 DSO를 지원하도록
컴파일되어야 mod_jserv.so을 동적으로 로드할 수 있다. 배포본에 포함된 것이라면 대부분 DSO를 지원하도록 되어
있으므로 문제가 없으나 직접 컴파일을 하는 경우라면 configure 실행시에 반드시 --enable-module=so 옵션을
주어야 한다. apache가 DSO를 지원하도록 컴파일이 되어 있는지는 다음과 같이 확인이 가능하다.

# /usr/local/apache/bin/httpd -l
...
mod_so.c
...

파일이 보이면 DSO를 지원하도록 컴파일이 된것이다.

 

# ls -l mod_jserv.so
-rwxr-xr-x    1 jkkang   seluser    126966  8월  8 13:39 mod_jserv.so

after Successfully compile
# cp mod_jserv.so /usr/local/apache/libexec


* Tomcat을 Apache와 연동해서 Apache에서 자동실행토록 할려면 httpd.conf에 tomcat.conf 라인 추가한다.

# vi /usr/local/apache/conf/httpd.conf

마지막 줄에,

Include /usr/local/apache/tomcat/build/tomcat/conf/tomcat.conf
를 추가한다. 단 경로는 자신의 서버로 바꾸면된다. 위에서 /usr/local/apache를 바꾸면 될것이다.

*******************************************************************************************/

 

 

11. Tomcat, Apache 실행순서

tomcat을 먼저 실행한 후 apache를 실행하도록 한다.


# cd $TOMCAT_HOME/bin
# ./tomcat.sh start
# /usr/local/apache/bin/apachectl start

*******************************************************************************************/

 

 

12. Tomcat의 Context 설정

다음은 메뉴얼의 영문부분이다. 이 부분을 꼭 읽어보고 "truct it" 을 해야만 한다.
In order to run the /admin applications you need to "trust it" and set a password. The /admin
may be dangerous if left unprotected, and is disabled by default. To enable the /admin you'll
need to edit the file TOMCAT_HOME/conf/apps-admin.xml and change the "trusted" attribute to true.
It should look like:

    <Context path="/admin"
             docBase="webapps/admin"
             trusted="true" >
            <SimpleRealm filename="conf/users/admin-users.xml" />
    </Context>

다음 명령어를 실행시켜서 설정을 적용한다.

# cd $TOMCAT_HOME/bin
# ./tomcat.sh run -enableAdmin


Tomcat 3.3.1에서는 복잡한 Context 설정을 쉽게 웹인터페이스를 통해서 할수가 있다. 방법은 다음과 같다.

http://jkkang.net:8080/admin/index.html 에 접속을 한다. 그리고

Context Admin 항목으로 접속을 하면 password을 물어본다. password는 다음의 파일을 편집함으로서 수정이
가능하다.

# vi $TOMCAT_HOME/conf/users/admin-users.xml

<tomcat-users>
  <user name="admin" password="암호입력" roles="tomcat_admin,tomcat,role1" />
</tomcat-users>

그리고, 다시 접속을 해서 Context 를 생성한다. 여기서는 jkkang 이란 Context 를 생성하겠다.

Path:  Document Base:
/jkkang  webapps/jkkang


# cd $TOMCAT_HOME/webapps
# mkdir jkkang
# cd examples
# cp -p -R * ../jkkang
# cd ..
# ls -l

drwxr-xr-x    6 jkkang   seluser      4096  8월  7 11:47 ROOT/
drwxr-xr-x    5 jkkang   seluser      4096  8월  7 11:42 admin/
drwxr-xr-x    6 jkkang   seluser      4096  8월  7 11:40 examples
drwxr-xr-x    6 jkkang   seluser      4096  8월  8 22:18 jkkang/

와 같이 jkkang/ 이란 Context 를 생성하게 된다. 위에서 mod_jk.conf 에서 다음을 추가시켰었다.

JkMount         /jkkang/* ajp12

이 상태에서 다음과 같이 접속을 해서 확인을 한다.

http://jkkang.net/jkkang/

했을때, Servlet 이 뜨면 성공!!!

*******************************************************************************************/

 

 

13. 마치며

  본 문서를 통해서 지금까지 Aix 4.3.3에서 Tomcat을 컴파일하는데 많은 애를 먹은 분들께 조금이라도 도움이 되었으면
하는 바이다. 문서에 대한 궁금한 사항이 있으면 문서의 위에 명시한 홈페이지 또는 메일주소로 연락을 하면 시간이 허용하는
한도내에서 답변을 드릴것을 약속한다. 문서에서 오류가 있으면 저에게 메일(jkkang65@hanmail.net) 또는 저의 홈페이지
(http://jkkang.net/)의 Java 관련 게시판에 Q&A에 올려주면 좋겠습니다.

 

 


                                                    2002년 8월 어느 여름날 늦은밤에 잠 안자고 문서를 만들면서...

 


관련글 더보기