'find'에 해당되는 글 1

  1. 2010.01.31 유닉스에 톰캣 컴파일해서 설치하기

유닉스에 톰캣 컴파일해서 설치하기

- 유닉스에서 개발 웹 서버 설치, 설정하기
- Install and configure a development Web server in UNIX

- 시스템 요구 사항
  • 하드디스크 용량 10GB, 메모리 최소 512MB
  • 웹 브라우저
  • JRE 5.0 이상: Tomcat 6에서는 해당 JRE가 필요
  • C 컴파일러 : 솔라리스나 IBM AIX의 기본 설치본에는 이런 컴파일러가 없다. Using the GNU C/C++ compiler on AIX를 참고한다.
  • 파일 추출 도구 : 서버에서 파일을 적절히 추출하려면 gunzip, tar, bzcat, 그리고 가능하다면 GNU make와 tar(gmake, gtar로서 GNU 사이트에서 다운로드 가능)가 필요하다.
    서버에서 도구들이 제대로 동작하는지 체크해 보려면 다음 명령어를 실행해본다.
    # cd /usr
    # find . –name *.tar //(repeat for *make, *zip, etc.)
  • 톰캣 코드
- 유닉스와 윈도에서 톰캣 설정 차이점
  • 유닉스 서버에서는 bzcat, gunzip, tar(혹은 gtar)가 필요
  • PATH 설정
  • 기본 운영체제 파일 시스템(/var, /tmp 등)에 적절한 권한이 필요
  • ID, 그룹, 적절한 접근 권한에 대해 고려해야 함
  • GUI가 아닌 CLI
  • 윈도우는 자동화된 배치 파일 처리에 .bat을, 실행 파일에 .exe 파일을 쓴다.
  • 유닉스에서는 기본적으로는 실행 스크립트 등에 .sh나 .ksh 확장자를 사용한다.
- 경로 설정
JAVA_HOME
# export JAVA_HOME=/usr/jdk/instances/jdk1.5.0 //JRE 또는 JDK
# JAVA_HOME=/usr/bin/java; export JAVA_HOME

# echo $JAVA_HOME
/usr/jdk/instances/jdk1.5.0

CATALINA_HOME
# export CATALINA_HOME=/opt/apache-tomcat-6.0.16

- 셸 설정
홈디렉터리에 .profile 파일을 생성한다.
bash-3.00# cd ~/ (home dir)
bash-3.00# vi .profile
# /bin/sh
stty istrip
PATH=$PATH:/usr/bin:/usr/local/bin:/usr/ucb:/etc
export PATH
umask 077

export SHELL=/usr/bin/ksh
export ENV=$HOME/.kshrc
export EDITOR=vi
export FCEDIT=vi

#Tomcat specific PATHs
export JAVA_HOME=/usr/jdk/instances/jdk1.5.0
export CATALINA_HOME=/opt/apache-tomcat-6.0.16

bash-3.00# PATH=/usr/ccs/bin:$PATH; export PATH (for make cmd)
bash-3.00# PATH=/usr/sfw/bin:$PATH; export PATH

- 사용자와 그룹
여러 사용자가 서버를 사용하게 된다면 당연히 각기 다른 사용자가 다양한 도구와 파일 시스템에 접근할 수 있도록 허용할 사용자와 그룹 권한을 설정하고 싶을 것이다. root가 아닌 사용자로 톰캣을 설치하여 동작시키려 한다면 이 또한 필수다(대부분의 실 서비스 환경에서 추천되는 방식이다).

# /usr/sbin/groupadd -g {구체적인 gid 명시. 명시하지 않으면 OS가 gid를 알아서 할당해줄 것이다.} {그룹 이름}
# /usr/sbin/groupadd -g 10004 tomcatgroup

# /usr/sbin/useradd -d {사용자 홈 디렉터리} -g {사용자가 속한 주 그룹} -u {구체적인 UID 명시. 이 란은 비워둘 수 있다. 명시하지 않으면 운영체제가 UID를 알아서 할당해줄 것이다.) -s {해당 사용자에 대한 기본 셸} -c "{사용자에 대한 상세 정보 명기}" {사용자 이름}
# /usr/sbin/useradd -d /export/home/tomcat -g tomcatgroup -u 10010 -s /bin/ksh -c "Main Tomcat Administrative User" tomcat

- 서버 설치 파일 다운로드, 추출하기
//파일을 /opt 디렉터리 아래로 옮긴다(/opt 디렉토리는 대부분의 신규 소프트웨어가 설치되는 디렉터리다).
# mv *tar.gz /opt
# ls -ltr /opt

//권한 설정하기
# cd /opt
# chmod +x *gz //same as chmod 775
# umask 007 //사용자가 770 권한을 갖고 신규 파일을 생성할 수 있도록 한다. chmod를 역으로 생각해 보라.

//설치 파일 추출하기
# gunzip *.gz
# tar -xvf *.tar
# ls -latr

# rm *.exe
# rm *.bat

- 서버 설정, 컴파일
# cd $CATALINA_HOME/bin
# ./configure --with-java=/usr/java
//- or -
# export JAVA_HOME
# ./configure

//코드 컴파일하기
# gunzip jsvc.tar.gz
# pwd
/opt/apache-tomcat-6.0.16/bin
# tar -xvf jsvc.tar
# gmake //gmake가 위치한 경로가 PATH에 있는지 확인하기 바란다(예를 들어 ./sfw/bin/).
//톰캣 사이트에서는 FreeBSD 시스템의 자체 BSD make 명령어 대신 GNU make(gmake)를 사용해야 한다고 언급하고 있다.

# chmod 775 jsvc[각주:1]
# cp jsvc ..
# cd ..

- 서버 시작[각주:2]
# cd $CATALINA_HOME/bin
# ./startup.sh
# cd ../logs

# tail -50 catalina.out

- 시작 데몬[각주:3] 구동하기
#./jsvc \
–home /usr/jdk/instances/jdk1.5.0 \
–Dcatalina.home=/opt/apache-tomcat-6.0.16 \
-cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out \
-errfile ./logs/catalina.err \
org.apache.catalina.startup.Bootstrap
//root가 아닌 사용자로 구동하려면 -user 옵션을 사용
//특정 .pid 파일 위치를 명시하려면 -pid 옵션을 사용

# ./jsvc -help

- 톰캣 설치 테스트하기
기본 톰캣은 http 포트 8080에 내부 HTTP 서버를 설치한다(Coyote HTTP/1.1).

- 톰캣 웹 애플리케이션 매니저에 특정 사용자 접근 허용하기
tomcat-users.xml에 role과 user 추가
//보안을 위해 tomcat-user.xml 파일을 파일 소유자만 접근할 수 있도록 제한한다.
# chmod 600 tomcat-users.xml

* 엔터프라이즈 웹 아키텍처 대 독립형(stand-alone) 웹 아키텍처에 대한 비교
  1. jsvc 는 런처(launcher) 프로세스, 통제(controller) 프로세스, 통제되는(controlled) 프로세스 이렇게 세 개의 프로세스를 사용한다. 통제되는 프로세스는 주 자바 쓰레드다. 이 주 자바 가상 머신(JVM)이 비정상적으로 종료되면 통제 프로세스, 즉 컨트롤러 다음에 재시작한다. jsvc는 데몬 프로세스이므로 root로 시작해야 한다. 인자값으로 -user를 주면 root 권한이 없는 사용자로도 동작시킬 수 있다. [본문으로]
  2. LifecycleListeners를 구현하여 시작 프로세스를 입맛에 맞게 고칠 수도 있다. [본문으로]
  3. 데몬은 비 대화형(non-interactive) 서버 애플리케이션으로서 명시한 시그널(signal)들을 운영체제가 통제하게 된다. 윈도에서 서비스를 떠올려보자. 윈도의 서비스는 서버 애플리케이션의 정상적인 셧다운을 위해 제공된다. 운영체제는 셧다운이 절박한 상황인 경우 서버 애플리케이션에게 이를 고지하게 되고 애플리케이션은 수행중인 과정을 끝내기 전에 어떤 작업을 수행할 수 있도록 할 여지가 생기게 된다. [본문으로]