CentOS 5.1にTomcat 6をインストール その2

昨日に引き続き、Tomcatの設定を行います。
@ITの記事を参考に、Tomcatdaemonで動かすように設定します。
http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_01/safetomcat_01_2.html#03

Apache Commons Daemonをビルドする

tomcatをインストールしたディレクトリのbin以下に
jsvc.tar.gzというファイルがあるので、
移動してビルドします。

# mv /opt/tomcat/bin/jsvc.tar.gz ./
# tar -zxf jsvc.tar.gz
# cd jsvc-src/
# autoconf
# ./configure
# make


作成されたjsvcというファイルの所有者をtomcat
実行アカウントに変更し、
tomcatディレクトリに放り込みます。

# chown tomcat. jsvc
# mv jsvc /opt/tomcat/bin


さらに、自動起動させるためのスクリプトを作成します。
これも、前出の@ITの記事のものをそのまま使用しました。

ファイル名はjsvcだとわかりにくいので「tomcat」にしました。

#!/bin/sh
#
# chkconfig: - 80 20
# description: Tomcat 6.0.16
#
# Tomcat起動・停止用スクリプト
#

. /etc/init.d/functions

JAVA_HOME=/usr/java/jdk1.5.0_15
CATALINA_HOME=/opt/tomcat
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc

start(){
    #
    # Start Tomcat
    #

    echo -n "Starting Tomcat: "
    $DAEMON \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap

    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        touch $LOCKFILE
    else
        echo_failure
    fi
    echo
}

stop(){
    #
    # Stop Tomcat
    #
    echo -n "Shutting down Tomcat: "
    $DAEMON \
    -stop \
    -pidfile $PIDFILE \
    org.apache.catalina.startup.Bootstrap
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        rm -f $PIDFILE $LOCKFILE
    else
        echo_failure
    fi
    echo
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $DAEMON
        RETVAL=$?
        ;;
    *)
        echo $"Usage: tomcat {start|stop|restart|status}"
        exit 1
        ;;
esac 

シェルに実行権限を与えて、 /etc/init.d 以下に放り込んだら
chkconfigでboot時にtomcatを起動するように設定します。

# chmod +x tomcat
# mv tomcat /etc/init.d
# chkconfig tomcat on

作成したシェルを実行してTomcatを起動します。

# /etc/init.d/tomcat start

http://localhost:8080/ にアクセスしてTomcatのスタート画面が
表示されれば、Tomcatの構築は完了です。

CentOS 5.1にTomcat 6をインストール その1

タイトルのままです。
RedHat Enterprise Linux 5.1にApache + Tomcatインストールしないといけないのですが、
予習のためVMware上のCentOS 5.1にインストールしてみます。

JDKのインストール

Sunのダウンロードサイトから必要なファイルを取ってきます。今回は1.5.0_15を使用しました。

[root@localhost tmp]# chmod +x jdk-1_5_0_15-linux-i586-rpm.bin 
[root@localhost tmp]# ./jdk-1_5_0_15-linux-i586-rpm.bin
Sun Microsystems, Inc.  Binary Code License Agreement

for the JAVA 2 PLATFORM STANDARD EDITION DEVELOPMENT KIT 5.0

SUN  MICROSYSTEMS,  INC.  ("SUN") IS WILLING TO LICENSE  THE
SOFTWARE  IDENTIFIED  BELOW TO YOU ONLY  UPON THE ....
  〜〜中略〜〜

Do you agree to the above license terms? [yes or no] 
yes        ← "yes" と入力
Unpacking...
Checksumming...
0
0
Extracting...
UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
  inflating: jdk-1_5_0_15-linux-i586.rpm  
準備中...                ########################################### [100%]
   1:jdk                    ########################################### [100%]
 
Done.
[root@localhost tmp]# 


/usr/java/jdk1.5.0_15 以下にインストールされているはずなので、パスを通します。
/etc/profileの末尾に、以下の行を追加します。

export JAVA_HOME=/usr/java/jdk1.5.0_15
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar


which java などとして、正しくパスが通っていることを確認すれば、JDKのインストールは完了です。

Tomcat 6のインストール

http://tomcat.apache.org/ からバイナリファイルをダウンロードし、適当なところに置きます。
今回は http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_01/safetomcat_01_1.html を参考に、
/opt/tomcat にインストールしました。

[root@localhost tmp]# tar -zxf apache-tomcat-6.0.16.tar.gz
[root@localhost tmp]# mv -f apache-tomcat-6.0.16 /opt/tomcat


Tomcatを動かすユーザtomcatを作成し、/opt/tomcat にアクセスできるよう所有権を設定します。

[root@localhost tmp]# useradd -d /opt/tomcat -s /sbin/nologin tomcat
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@localhost tmp]# chown -R tomcat. /opt/tomcat

何か警告が出ましたが、気にしない。


この後、TomcatDAEMONとして起動できるように設定を行うのですが、
長くなったのでまた次回にします。

変数の値が整数かどうかを調べる

変数に入っている値が整数かどうかをチェックしたい、というシチュエーションはよくあると思います。
JavaScriptの isNaN ですね。

result=`test ${hoge} -eq 0 2> /dev/null`
if[ ${result} -le 1 ]; then
    echo "整数"
else
    echo "整数じゃない"
fi

文字列の比較で -eq を使用するとエラーになると、resultにはエラーコード(2以上)が返ってきます。
整数であれば、0 か 1 が返ってくるので、それを利用して整数かどうかチェックできます。


2008/05/15 追記
・・・
すみません。これ、間違ってますね。
実際は以下のようにする必要があります。

test ${hoge} -eq 0 2> /dev/ull
result=$?

if [ ${result} -le 1 ]; then
  echo "整数"
else
  echo "整数じゃない"
fi

直前のコマンドのエラーコードが $? に入っているので、その内容を確認する必要があります。

CDOを使用してGmail経由でメールを送信する

CDOを使用すると、WSHから他のコンポーネントをインストールせずに、外部のSMTPサーバを使用してメールを送信することができます。
GmailSMTPサーバとしてメールを送信するサンプルがあったので、メモしておきます。

http://openmya.hacker.jp/hasegawa/public/20070609/admintech.html
↑ここの64ページ目

ポイントは以下の点ですね。

  • SMTP認証を有効にする
  • ポートを465または587にする
  • SSL通信を有効にする

60ページ目のXML読み込みのサンプルも参考になります。
まぁ、JavaScriptならXMLよりJSONで書く方が多いですが。

JavaScriptを使用してOSを判別する方法について

  • ブラウザ上で判別
document.write(navigator.userAgent);

僕の環境では以下のように表示されました。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)

Windows NT 5.2 だと Windows Server 2003Windows NT 5.1 だと Windows XPらしいです。
OS の判別 <- 詳細はこちらを参照。
様々なOSの判断方法が記載されてます。

  • WMIで判別

ログオンスクリプトとかでOSを判別する場合は、WMIが便利そうです。

var wmi = GetObject("winmgmts:\\\\.\\root\\cimv2");
var items = wmi.ExecQuery("Select * from Win32_OperatingSystem");

var e = new Enumerator(items);

for(; !e.atEnd(); e.moveNext()){
	var item = e.item();
	
	WScript.Echo(item.Caption); // <--(1)
	
	if(item.Caption.toLowerCase().indexOf("vista") >= 0){
		WScript.Echo("vistaです");
	}else{
		WScript.Echo("vistaじゃないです");
	}
}

僕の環境だと(1)でこんな風に表示されました。

末尾に「_」がついていたら削除する

しょうもないスクリプトですが、せっかく書いたので・・・
与えられた文字列の末尾に「_」がついている場合、その「_」を削除した文字列を返します。

#! /bin/sh
# rmUB.sh
# 末尾に「_」がついていたら削除する

foo="hello_"
ch=`echo ${foo} | cut -c ${#foo}`
if [ ${ch} = '_' ]; then
	pos=`expr ${#foo} - 1`
	bar=`echo ${foo} | cut -c 1-${pos}`

	echo $bar
fi

文字列比較では -eq を使うとエラーになるんですね。