Subsonic on Tomcat 6

NO IMAGE

環境

Ubuntu 12.04 LTS (64bit)
Tomcat 6
Oracle Java SE 7

Tomcat 6 上で Subsonic を動かしてみます.

Subsonic WAR version

http://www.subsonic.org/ – Download – WAR version をダウンロードします.
ダウンロードしたバージョンは subsonic-4.6-war.zip でした.
解凍すると,subsonic.war が得られます.

Tomcat 6

http://www.subsonic.org/pages/installation.jsp#war を見ると,Tomcat 7 では動かないようです.
Please note that Subsonic currently doesn’t work with Tomcat 7. と書かれています.

http://tomcat.apache.org/ – Download – Tomcat 6.0 – Binary Distributions – tar.gz から Tomcat 6 をダウンロードします.

$ tar zxvf apache-tomcat-6.0.35.tar.gz
$ sudo mv apache-tomcat-6.0.35 /usr/local/
$ sudo ln -s /usr/local/apache-tomcat-6.0.35 /usr/local/tomcat6

既に他のアプリケーションで TCP:8080 を使用している場合は server.xml を編集して TCP:8080 以外を使用するようにします.

$ cd /usr/local/tomcat6
$ vi conf/server.xml

例えば,

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="12345" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

のように変更します.

Sobsonic 用ディレクトリ

Subsonic 用のディレクトリ,メディアファイルを格納するディレクトリを作成しておきます.

$ sudo mkdir /var/subsonic
$ sudo chown user.group /var/subsonic
$ sudo mkdir /var/music
$ sudo chown user.group /var/music

Sobsonic の war ファイルを Tomcat の webapps ディレクトリに移動させます.

$ cp /path/to/subsonic.war /usr/local/tomcat6/webapps/

ひとまず Tomcat を起動させてみます.

$ cd /usr/local/tomcat6/bin/
$ ./startup.sh

http://(IP address):(port)/subsonic/ に接続し,admin の初期パスワードでログインし admiin パスワードを変更します.
その後,メディアファイル用のディレクトリを設定します.

Tomcat 6 の自動スクリプトについては,http://www.craigburke.com/blog/2011/08/25/setting-up-tomcat-on-ubuntu/ で紹介されているものを参考に少し修正しました.

#!/bin/bash
#
# tomcat
#
# chkconfig:
# description:  Start up the Tomcat servlet engine.

# Source function library.
# /etc/init.d/functions

CATALINA_HOME="/usr/local/tomcat6"
TOMCAT_USER='user'
SHUTDOWN_WAIT=20

tomcat_pid() {
  echo `ps aux | grep $CATALINA_HOME | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
     then
        echo "Tomcat is already running (pid: $pid)"
     else
        echo "Starting Tomcat"
        /bin/su $TOMCAT_USER $CATALINA_HOME/bin/startup.sh
   fi

   return 0
}

stop() {
 pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then

  echo "Stoping Tomcat"
   /bin/su $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh

   echo -n "Waiting for processes to exit ["
   let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n ".";
      sleep 1
      let count=$count+1;
    done
    echo "Done]"

    if [ $count -gt $kwait ]
    then
      echo "Killing processes ($pid) which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
    fi
  else
    echo "Tomcat is not running"
  fi

  return 0
}

status() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
  else
    echo "Tomcat is not running"
  fi
}

case "$1" in
 start)
        start
        ;;
 stop)
        stop
        ;;
 restart)
       stop
       start
       ;;
 status)
       status
       ;;
*)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

Ubuntu の runlevel 2 だったので、

$ runlevel

.

N 2

rc2.d に張ります.

$ sudo vi /etc/init.d/tomcat6
$ sudo chmod 755 /etc/init.d/tomcat6
$ sudo ln -s /etc/init.d/tomcat6 /etc/rc2.d/S99tomcat6

Ubuntu 再起動後,一般ユーザで Tomcat が動いてることを確認します.

http://www.maruko2.com/mw/rsync_%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%90%8C%E6%9C%9F%EF%BC%88%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%89
http://www.itmedia.co.jp/enterprise/articles/0804/21/news013_2.html

Jetty 8.1 (動作失敗)

Jetty 8.1 で動かしてみます.
結論としては,自分の力量では動きませんでした.

ダウンロードした war ファイルを Jetty の webapps にコピーし,/var 以下に subsonic 用ディレクトリを作成し,Jetty を動かしているユーザにアクセス権を譲渡しました.

$ cp /path/to/subsonic.war $JETTY_HOME/webapps/
$ sudo mkdir /var/subsonic
$ sudo chown user.group /var/subsonic

その後,Jetty を再起動し,http://(IP address):(port)/subsonic/ にアクセスします.
初期パスワードで admin としてログインし,Setting をクリックしたところで以下のようなエラーが.

Exception	org.apache.jasper.JasperException
Message	/WEB-INF/jsp/settingsHeader.jsp(12,0) PWC6340: According to the TLD, rtexprvalue is true, and deferred-value is specified for the attribute items of the tag handler org.apache.taglibs.standard.tag.rt.core.ForTokensTag, but the argument for the setter method is not a java.lang.Object
Java version	Oracle Corporation 1.7.0_04
Operating system	Linux 3.2.0-24-generic
Server	jetty/8.1.4.v20120524
Memory	Used 124 of 209 MB
Stack trace	org.apache.jasper.JasperException: /WEB-INF/jsp/settingsHeader.jsp(12,0) PWC6340: According to the TLD, rtexprvalue is true, and deferred-value is specified for the attribute items of the tag handler org.apache.taglibs.standard.tag.rt.core.ForTokensTag, but the argument for the setter method is not a java.lang.Object

検索すると,Web アプリの taglibs と Jetty のそれがコンフリクトしている?とのこと?
http://stackoverflow.com/questions/595320/jasper-in-jetty-6-throws-exception-for-jstl-tag

解決できなかったので,Jetty 8.1 で Subsonic を動かすのは断念しました.

Jettyカテゴリの最新記事