構築ネタ(FreeBSD) W2chサーバ化 (2)

Pocket

■tomcat のインストール
W2ch まとめ Wiki では tomcat6 を使用するとの記述があるため tomcat6 を選択したが、tomcat7 でも普通に動作することは確認すみ。

# portinstall tomcat
Install 'www/tomcat55'? [yes] no
Install 'www/tomcat6'? [yes] yes
Install 'www/tomcat7'? [yes] no

Installation settings:
   Destination directory:    /usr/local/apache-tomcat-6.0
   Location of JDK:          /usr/local/jdk1.6.0
   Location of Java port:    java/jdk16
   Running as (user/group):  www/www
   HTTP port:                8180
   Shutdown listener port:   8005
   AJP 1.3 connector port:   8009
   Logfile stdout:           /usr/local/apache-tomcat-6.0/logs/stdout.log
   Logfile stderr:           /usr/local/apache-tomcat-6.0/logs/stderr.log

インストールはあっさりと終わるので、rc.conf に起動用の記述を加える。

# vi /etc/rc.conf
[/etc/rc.conf] (追加)
tomcat60_enable="YES"

ログのローテーション設定も追加。

# vi /etc/newsyslog.conf
[/etc/newsyslog.conf](追加)
/usr/local/apache-tomcat-6.0/logs/stdout.log www:www 644  7     *    $W0D0 Z
/usr/local/apache-tomcat-6.0/logs/stderr.log www:www 644  7     *    $W0D0 Z

起動スクリプトの修正(重要)
環境変数 LANG を設定しておかないと、ダウンロードページが表示されない等の各種どはまりが待ち受けている(後述)。

# vi /usr/local/etc/rc.d/tomcat6
[/usr/local/etc/rc.d/tomcat6]
9a10
> export LANG=ja_JP.UTF-8

tomcat の起動・停止

# sh /usr/local/etc/rc.d/tomcat6 start
# sh /usr/local/etc/rc.d/tomcat6 stop

■W2chのインストール
ドキュメントに従い、インストールに必要なものをあらかじめ準備。

○ffmpeg

# portinstall ffmpeg
Install 'multimedia/ffmpeg'? [yes] yes
Install 'multimedia/ffmpeg-devel'? [yes] no

○PDFBox
http://www.pdfbox.org/index.html から sourceforge経由でDL

# unzip PDFBox-0.7.3.zip
# cp PDFBox-0.7.3/lib/PDFBox-0.7.3.jar /usr/local/apache-tomcat-6.0/lib

○htmlparser
http://htmlparser.sourceforge.net/ から sourceforge経由でDL

# unzip HTMLParser-2.0-SNAPSHOT-bin.zip
# cp HTMLParser-2.0-SNAPSHOT/lib/* /usr/local/apache-tomcat-6.0/lib

○crimson

# portinstall crimson
Install 'games/crimson'? [yes] no
Install 'textproc/crimson'? [yes] yes
# cp /usr/local/share/java/classes/crimson.jar /usr/local/apache-tomcat-6.0/lib

○w2ch

# cd /usr/local/src
# wget http://woontai.dip.jp/w2chwar/w2ch043e.war
# cp /usr/local/src/w2ch043e.war /usr/local/apache-tomcat-6.0/webapps
(tomcat6が稼働していると、自動的にディレクトリ展開される)
# cd /usr/local/apache-tomcat-6.0/webapps
# ln -s w2ch043e w2ch
(最新版にシンボリックリンク作成)

展開されたひな形をコピーし、w2chconf.xml を作成する。
自分の携帯のUTN番号をあらかじめ調べておく。
→携帯のテンキーで *#06# と入力すると表示される。

# mkdir /etc/w2ch
# cp /usr/local/apache-tomcat-6.0/webapps/w2ch/WEB-INF/w2chconf.xml /etc/w2ch
# vi /etc/w2ch/w2chconf.xml
[/etc/w2ch/w2chconf.xml]
15c15
<     <param-value>鯖名</param-value>
---
>     <param-value>example.jp</param-value>
26c26
<       123456789ABCDEF
---
>       自分の携帯のUTN番号
33c33
<     <param-value>/var/spool/w2ch/thread</param-value>
---
>     <param-value>/usr/local/www/w2ch/thread</param-value>
39c39
<     <param-value>/var/spool/w2ch/dat</param-value>
---
>     <param-value>/usr/local/www/w2ch/dat</param-value>
45c45
<     <param-value>/var/spool/w2ch/media</param-value>
---
>     <param-value>/usr/local/www/w2ch/media</param-value>

各種ディレクトリの作成と所有者変更

# mkdir -p /usr/local/www/w2ch/thread
# mkdir -p /usr/local/www/w2ch/dat
# mkdir -p /usr/local/www/w2ch/media
# chmod www:www /usr/local/www/w2ch/*

■Apache と tomcat の連携
php と同様に、make config を実行して mod_proxy と mod_proxy_ajp を有効にする。
apache22 make config

# cd /usr/local/ports/www/apache22
# make config
(以下を有効化)
PROXY
PROXY_AJP

# make clean
# make install

インストールが失敗する(予定通り)ので、deinstall / reinstall を実行。

# make deinstall
# make reinstall

httpd.conf を修正する。

# vi /usr/local/etc/apache22/httpd.conf
[/usr/local/etc/apache22/httpd.conf]
109a111
> LoadModule proxy_module libexec/apache22/mod_proxy.so
> LoadModule proxy_ajp_module libexec/apache22/mod_proxy_ajp.so

tomcat 連携部分は適当にこんな感じで作っておく。httpd.conf に追記してもOK。

# vi /usr/local/etc/apache22/Include/w2ch.conf
[/usr/local/etc/apache22/Include/w2ch.conf]
ProxyRequests Off
<Location /w2ch/>
   ProxyPass ajp://localhost:8009/w2ch/
</Location>

すべて完了したら、Apache を再起動する。

# apachectl restart

iモードでアクセスしてみて、ページが表示されればOK。
例: http://www.example.jp/w2ch/ とか、URL は Apache の設定に依存するので各自お好みで。以下はトラブルシューティング。

■文字化けする/ダウンロードページが表示されず、エラーとなる。

○エラーログ

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /download.jsp at line 19

16:     String server=url.getHost();
17:     JamListBean jamlistbean=new JamListBean();
18:     String userAgent=request.getHeader("user-agent");
19:     String selectedjam=jamlistbean.getJamFile(userAgent);
20:     String [][]list=jamlistbean.getJamList();
21: %>
22: 


Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:519)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.util.regex.PatternSyntaxException: Dangling meta character '?' near index
0 ??????(????????????????????)
^
        java.util.regex.Pattern.error(Pattern.java:1713)
        java.util.regex.Pattern.sequence(Pattern.java:1878)
        java.util.regex.Pattern.expr(Pattern.java:1752)
        java.util.regex.Pattern.compile(Pattern.java:1460)
        java.util.regex.Pattern.<init>(Pattern.java:1133)
        java.util.regex.Pattern.compile(Pattern.java:823)
        w2ch_server.JamListBean.getJamFile(JamListBean.java:37)
        org.apache.jsp.download_jsp._jspService(download_jsp.java:74)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs.

Apache Tomcat/6.0.32

○原因
web.xml w2conf.xml の中の日本語部分の処理に失敗するため。

○対処
tomcat の起動スクリプトの最初の方で、環境変数 LANG を設定する。まとめ Wiki にも記述があるのだが、下の方に書かれていたので最初気づかずに余計な試行錯誤をしてしまった。

[まとめWiki引用]
中間鯖リスト・対応機種などが文字化けします
rc.d/tomcat6とかそういうものにexport LANG=ja_JP.UTF-8と追記すればおk。

■tomcatの起動に失敗する

FreeBSD 8.2-Release 環境で発生。/etc/rc.conf に tomcat6_enable="YES" を記述した後、root 権限で起動スクリプトを手動で実行すると、一般ユーザ www に su した状態で処理が停止する。

○実行例

# whoami
root
# sh /usr/local/etc/rc.d/tomcat6 start
Starting tomcat60.
$ whoami
www
$ exit
exit
# ps aux | grep java
www      90742  0.0  3.6 204840 36772  ??  Is    4:50PM   0:03.37 [java]

これで何が困るかというと、OSを再起動したときにここで処理が止まってしまい、ローカルのコンソールから処理を抜けてやらないと先に進めないこと。遠隔地にサーバを置いてリモートでリブートしたりしたら万事休す。

○対処
起動スクリプトを読んでみたが、よくわからなかった。とりあえずの対処としては、/usr/local/etc/rc.d/tomcat6 を使わず、tomcat のディレクトリにインストールされる純正の起動/終了スクリプトを使用すること。この場合、/etc/rc.conf の tomcat6_enable 行はあらかじめ削除しておく。

# ln -s /usr/local/apache-tomcat-6.0/bin/startup.sh /etc/rc.local
# ln -s /usr/local/apache-tomcat-6.0/bin/shutdown.sh /etc/rc.shutdown.local

とりあえずこんな感じ。

この記事にコメントする

Powered by WordPress, WP Theme designed by WSC Project. ログイン