Debian GNU/Linux Wheezy で Apache Tomcat 6 を動かしていたけど、これを Apache Tomcat 7 へアップグレードした際の作業記録。

Tomcat 6 から Tomcat 7 へのアップグレードについては、機能的なものは削除されていないようだし、設定ファイルやディレクトリの構成も大きく変わっていないようなので、あまり苦労しないと思う。

Tomcatのインストール時のデフォルトのディレクトリ構成はTomcat 6から変更ありません。以下についてはTomcat 6と同じです。

・インストール後のデフォルトのディレクトリ構成
・設定ファイル(server.xml、context.xmlなど)の格納場所
・ログ出力ディレクトリ
・起動スクリプト格納ディレクトリ

(中略)

Tomcat 4時代から採用されているリクエスト処理のCatalinaアーキテクチャは変更なしで、そのまま採用しています。Tomcatが受け付けたリクエストは、リクエスト処理パイプラインによってServletまで到達し処理されます。

Tomcat 7の新機能で何ができるようになるのか?(3):技術者が知っておきたいTomcat 7の新機能20連発 (1/3) - @IT

アップグレードする前に、公式のマイグレーションガイドぐらいはざっくり読んでおくと良い。
Apache Tomcat - Migration Guide - Tomcat 7.0.x

事前準備

Debian GNU/Linux Wheezy のパッケージシステムでは、Tomcat 6 と Tomcat 7 は同居できない。アップグレードすると Tomcat 6 の設定ファイルは消える可能性がある。

設定ファイルと配備済みのWebアプリケーションをバックアップしておく。

  • 設定ファイル: /etc/tomcat6/server.xml
  • 設定ファイル: /etc/default/tomcat6
  • Webアプリケーション: /var/lib/tomcat6/webapps

アップグレード前の状態


$ uname -mrsv
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3 x86_64
 
$ cat /etc/debian_version
7.5
 
$ dpkg -l | grep tomcat
ii  libtomcat6-java                      6.0.35-6+deb7u1               all          Servlet and JSP engine -- core libraries
ii  tomcat6                              6.0.35-6+deb7u1               all          Servlet and JSP engine
ii  tomcat6-common                       6.0.35-6+deb7u1               all          Servlet and JSP engine -- common files
 
$ dpkg -l | grep jre
ii  default-jre-headless                 1:1.6-47                      amd64        Standard Java or Java compatible Runtime (headless)
ii  icedtea-7-jre-jamvm:amd64            7u25-2.3.10-1~deb7u1          amd64        Alternative JVM for OpenJDK, using JamVM
ii  openjdk-6-jre:amd64                  6b31-1.13.3-1~deb7u1          amd64        OpenJDK Java runtime, using Hotspot JIT
ii  openjdk-6-jre-headless:amd64         6b31-1.13.3-1~deb7u1          amd64        OpenJDK Java runtime, using Hotspot JIT (headless)
ii  openjdk-6-jre-lib                    6b31-1.13.3-1~deb7u1          all          OpenJDK Java runtime (architecture independent libraries)
ii  openjdk-7-jre:amd64                  7u25-2.3.10-1~deb7u1          amd64        OpenJDK Java runtime, using Hotspot JIT
ii  openjdk-7-jre-headless:amd64         7u25-2.3.10-1~deb7u1          amd64        OpenJDK Java runtime, using Hotspot JIT (headless)
ii  openjdk-7-jre-lib                    7u25-2.3.10-1~deb7u1          all          OpenJDK Java runtime (architecture independent libraries)
 
$ java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1~deb7u1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

インストールする Tomcat 7 パッケージを検索


# aptitude search tomcat
p   guacamole-tomcat                - Tomcat-based Guacamole install with VNC su
p   libtomcat-maven-plugin-java     - Tomcat Maven plugin
i A libtomcat6-java                 - Servlet and JSP engine -- core libraries
p   libtomcat7-java                 - Servlet and JSP engine -- core libraries
p   libtomcatjss-java               - JSSE implementation using JSS for Tomcat
p   solr-tomcat                     - Enterprise search server based on Lucene3
i   tomcat6                         - サーブレットおよび JSP エンジン
p   tomcat6-admin                   - Servlet and JSP engine -- admin web applic
i A tomcat6-common                  - Servlet and JSP engine -- common files
p   tomcat6-docs                    - Servlet and JSP engine -- documentation
p   tomcat6-examples                - Servlet and JSP engine -- example web appl
p   tomcat6-extras                  - Servlet and JSP engine -- additional compo
p   tomcat6-user                    - Servlet and JSP engine -- tools to create
p   tomcat7                         - Servlet and JSP engine
p   tomcat7-admin                   - Servlet and JSP engine -- admin web applic
p   tomcat7-common                  - Servlet and JSP engine -- common files
p   tomcat7-docs                    - Servlet and JSP engine -- documentation
p   tomcat7-examples                - Servlet and JSP engine -- example web appl
p   tomcat7-user                    - Servlet and JSP engine -- tools to create

アップグレード作業


# aptitude install tomcat7
以下の新規パッケージがインストールされます:
  libservlet3.0-java{a} libtomcat7-java{ab} tomcat7 tomcat7-common{a}
更新: 0 個、新規インストール: 4 個、削除: 0 個、保留: 0 個。
3,922 k バイトのアーカイブを取得する必要があります。展開後に 4,906 k バイトのデ ィスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
 libtomcat7-java : 競合: libtomcat6-java [6.0.35-6+deb7u1 が既にインストール済みです]
以下のアクションでこれらの依存関係の問題は解決されます:
 
     以下のパッケージを削除する:
1)     libtomcat6-java
2)     tomcat6
3)     tomcat6-common
 
 
 
この解決方法を受け入れますか? [Y/n/q/?]Y
以下の新規パッケージがインストールされます:
  libservlet3.0-java{a} libtomcat7-java{a} tomcat7 tomcat7-common{a}
以下のパッケージが削除されます:
  libservlet2.5-java{u} libtomcat6-java{a} tomcat6{a} tomcat6-common{a}
更新: 0 個、新規インストール: 4 個、削除: 4 個、保留: 0 個。
3,922 k バイトのアーカイブを取得する必要があります。展開後に 697 k バイトのディ スク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y
取得: 1 http://cdn.debian.net/debian/ wheezy/main libservlet3.0-java all 7.0.28-4+deb7u1 [304 kB]
取得: 2 http://cdn.debian.net/debian/ wheezy/main libtomcat7-java all 7.0.28-4+deb7u1 [3,508 kB]
取得: 3 http://cdn.debian.net/debian/ wheezy/main tomcat7-common all 7.0.28-4+deb7u1 [60.6 kB]
取得: 4 http://cdn.debian.net/debian/ wheezy/main tomcat7 all 7.0.28-4+deb7u1 [49.5 kB]
Fetched 3,922 kB in 0秒 (4,876 kB/s)
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 72988 個のファイルとディレクトリがイン ストールされています。)
tomcat6 を削除しています ...
[ ok ] Stopping Tomcat servlet engine: tomcat6.
tomcat6-common を削除しています ...
libtomcat6-java を削除しています ...
libservlet2.5-java を削除しています ...
以前に未選択のパッケージ libservlet3.0-java を選択しています。
(データベースを読み込んでいます ... 現在 72812 個のファイルとディレクトリがイン ストールされています。)
(.../libservlet3.0-java_7.0.28-4+deb7u1_all.deb から) libservlet3.0-java を展開 しています...
以前に未選択のパッケージ libtomcat7-java を選択しています。
(.../libtomcat7-java_7.0.28-4+deb7u1_all.deb から) libtomcat7-java を展開してい ます...
以前に未選択のパッケージ tomcat7-common を選択しています。
(.../tomcat7-common_7.0.28-4+deb7u1_all.deb から) tomcat7-common を展開していま す...
以前に未選択のパッケージ tomcat7 を選択しています。
(.../tomcat7_7.0.28-4+deb7u1_all.deb から) tomcat7 を展開しています...
libservlet3.0-java (7.0.28-4+deb7u1) を設定しています ...
libtomcat7-java (7.0.28-4+deb7u1) を設定しています ...
tomcat7-common (7.0.28-4+deb7u1) を設定しています ...
tomcat7 (7.0.28-4+deb7u1) を設定しています ...
 
Creating config file /etc/default/tomcat7 with new version
システムユーザ `tomcat7' (UID 112) を追加しています...
新しいユーザ `tomcat7' (UID 112) をグループ `tomcat7' に追加しています...
ホームディレクトリ `/usr/share/tomcat7' は作成しません。
 
Creating config file /etc/logrotate.d/tomcat7 with new version
[ ok ] Starting Tomcat servlet engine: tomcat7.

アップグレード後の状態


# dpkg -l | grep tomcat
ii  libtomcat7-java                      7.0.28-4+deb7u1               all          Servlet and JSP engine -- core libraries
rc  tomcat6                              6.0.35-6+deb7u1               all          Servlet and JSP engine
ii  tomcat7                              7.0.28-4+deb7u1               all          Servlet and JSP engine
ii  tomcat7-common                       7.0.28-4+deb7u1               all          Servlet and JSP engine -- common files

Tomcat 7 のインストール先ディレクトリと設定ファイル

Tomcat 7 の配置されているディレクトリは /var/lib/tomcat7


# ls -la /var/lib/tomcat7
合計 24
drwxr-xr-x  6 root    root    4096  5月  2 10:24 .
drwxr-xr-x 46 root    root    4096  5月  2 10:24 ..
drwxr-xr-x  3 tomcat7 tomcat7 4096  5月  2 10:24 common
lrwxrwxrwx  1 root    root      12  4月  8 15:47 conf -> /etc/tomcat7
lrwxrwxrwx  1 root    root      17  4月  8 15:47 logs -> ../../log/tomcat7
drwxr-xr-x  3 tomcat7 tomcat7 4096  5月  2 10:24 server
drwxr-xr-x  3 tomcat7 tomcat7 4096  5月  2 10:24 shared
drwxrwxr-x  3 tomcat7 tomcat7 4096  5月  2 10:25 webapps
lrwxrwxrwx  1 root    root      19  4月  8 15:47 work -> ../../cache/tomcat7

自分が設定した Tomcat 7 の設定ファイルは次の2つ。

  • /etc/tomcat7/server.xml
  • /etc/default/tomcat7

/etc/tomcat7/server.xml の設定

Tomcat 6 の server.xml はそのまま使えない。そのため、同梱されている server.xml を修正して使う。

server.xml に記述されている Connector 要素を自分好みに修正する。

元の Connector 要素はこれ。


<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    URIEncoding="UTF-8"
    redirectPort="8443" />
  • port 属性: 自分が使いたいポート番号へ変更
  • URIEncoding 属性: 文字化けの元なので削除
  • server 属性: HTTPレスポンスの server ヘッダを書き換えたい場合に追加

<Connector port="8180" protocol="HTTP/1.1"
    server="Foo Bar Server 7"
    connectionTimeout="20000" 
    redirectPort="8443" />

自分の場合は、設定ファイルは別のバックアップしやすい場所に置いてあって、それにシンボリックリンクしている。元の設定ファイルは .org みたいな名前を付けてバックアップしておいたほうが無難。

こんな感じでシンボリックリンクを張っている。


# cd /etc/tomcat7
# mv ./server.xml ./server.xml.org
# ln -s /home/hoge/etc/tomcat/server.xml server.xml

/etc/default/tomcat7 の設定

Tomcat 6 のときに /etc/default/tomcat6 で何か特殊な設定をしているなら、それを反映する。

自分の場合は、 JAVA_OPTS を設定しているぐらい。こんな感じで。


JAVA_OPTS="-Djava.awt.headless=true -Xmx512M -XX:+UseConcMarkSweepGC -Dfreetts.voices=com.sun.speech.freetts.en.us.cmu_time_awb.AlanVoiceDirectory,com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory -server -Xloggc:/var/log/tomcat7/gc.log -Dsun.net.client.defaultConnectTimeout=15000 -Dsun.net.client.defaultReadTimeout=15000"

/etc/default/tomcat7 も .org とか付けてオリジナルのファイルをバックアップしつつ、自分用の設定ファイルはバックアップしやすい場所に置いて、それにシンボリックリンク。


# cd /etc/default
# mv ./tomcat7 ./tomcat7.org
# ln -s /home/hoge/etc/default/tomcat7 tomcat7

Log4j の設定

自分の場合は Webアプリケーション上で Apache Log4J を使っているので、この設定ファイル log4j.properties も修正。Log4J のログファイル出力場所を /var/log/tomcat6 から /var/log/tomcat7 へ変更。

Tomcat 7 にWebアプリケーションを配置

Tomcat 7 にデプロイするプログラムは /var/lib/tomcat7/webapps 以下に置く。

自分の場合は、Webアプリケーションはバックアップしやすい場所に置いてあるので、この場所にシンボリックリンクするようにしている。


# cd /var/lib/tomcat7/webapps
# ln -s /home/hoge/webapps/foobar foobar

Tomcat 7 を再起動する

設定ファイルや Web アプリケーションを配置したら、 Tomcat 7 を再起動して反映する。


# /etc/init.d/tomcat7 restart
[ ok ] Stopping Tomcat servlet engine: tomcat7.
[ ok ] Starting Tomcat servlet engine: tomcat7.

これでアップグレード完了 ( ´ー`)フゥー...

参考資料

tags: debian tomcat

Posted by NI-Lab. (@nilab)