CentOS 7でTomcat 7
あちこちでそれなりに話題になっているけど、先日にCentOS 7がリリースされた。
CentOS 7にはifconfigコマンドが無いなど、結構アグレッシブにモリモリと変わっている部分も多いけど、その辺のレポートは色々あるのでわざわざ私は書かなくて良いだろう。
そこで、この記事ではCentOS 7のTomcatに絞って変更点をまとめておく。なお本記事では、以下のバージョンのCentOSで調査しました。
復習:CentOS 6でTomcat
CentOS 7でのTomcatを見る前に、まずCentOS 6ではどうだったかをちょっとおさらいしておく。
CentOS 6の公式rpmのTomcatは長らくVer.6(Tomcat 6.0.24)で放置されており、Tomcat 7.xは提供されていない。何度かRedHatのSupport Forumで「Tomcat 7.xはいつ対応するの?」と質問は上がっていたが、そのたびに「まぁ、できたらね」ではぐらかされるのが風物詩だった(たぶん)。
[ozuma@cent6 ~]$ yum info tomcat6 ...(略)... Name : tomcat6 Arch : noarch Version : 6.0.24 Release : 72.el6_5 Size : 91 k Repo : updates Summary : Apache Servlet/JSP Engine, RI for Servlet 2.5/JSP 2.1 API URL : http://tomcat.apache.org/ License : ASL 2.0 Description : Tomcat is the servlet container that is used in the official Reference ...(略)...
ということで、RedHat/CentOSでTomcatを構築する場合には、直接tar.gzファイルを拾ってきて配置するケースが多かった。また、人によってはJPackageのTomcat7のrpmを使うこともあったようだ。
また、RedHat/CentOS公式リポジトリのTomcatを入れるとOpenJDKが使われてしまうので、Oracle Javaを別に手動で入れる……という儀式が必要なこともよく知られている。
以上、この辺がCentOS 7でどう変わったかをまとめる。
CentOS 7の公式リポジトリのTomcat
結論から言うと、CentOS 7では公式リポジトリにTomcat 7.0.42が採用されている。そのため、何も考えずにyum installだけでTomcat 7が入るようになった。実にめでたい。
[ozuma@centos7 ~]$ yum info tomcat ...(略)... Name : tomcat Arch : noarch Version : 7.0.42 Release : 6.el7_0 Size : 84 k Repo : updates/7/x86_64 Summary : Apache Servlet/JSP Engine, RI for Servlet 3.0/JSP 2.2 API URL : http://tomcat.apache.org/ License : ASL 2.0 Description : Tomcat is the servlet container that is used in the official Reference ...(略)...
ただし、Tomcat 7を入れると同時に入るJavaは、以下に見えるようにOpenJDK(パッケージ名:java-1.7.0-openjdk)である。
[ozuma@centos7 ~]$ yum deplist tomcat ...(略)... package: tomcat.noarch 7.0.42-6.el7_0 ...(略)... dependency: java >= 1:1.6.0 provider: java-1.7.0-openjdk.x86_64 1:1.7.0.65-2.5.1.2.el7_0 ...(略)...
これは前から知られている「ねじれ」で、Tomcatプロジェクトは公式には「Oracle Javaで動かしてね」と言っている一方(RUNNING.txt)、RedHat/CentOSは「Tomcatパッケージで公式サポートするJavaは、OpenJDKです」と言っているわけだ。
実際の現場では、まだまだOracle Javaが主流で、OpenJDKでテストされているプロダクトは少ないだろう(む、私が時代遅れなだけか?)。というわけでせっかくTomcatはyum一発で入るようになりはしたものの、Javaは手動インストールがまだ必要である。
なお、これでCentOS 7 + Tomcat 7の構成が向こう数年で増えるだろうが、現在のTomcat最新版は8.0系である。はてさて、どうなることやら。
tomcatユーザのuid
CentOS 6の時から変わらず、CentOS 7でも、Tomcatパッケージインストール時に作成されるtomcatユーザのuidは91である。
[ozuma@centos7 ~]$ id tomcat uid=91(tomcat) gid=91(tomcat) groups=91(tomcat)
しかし実は、これも前から知られている「ねじれ」である。何が言いたいのかと言うと、CentOSでの基本的なuidは、以下のuidgidというテキストファイルとして示されている。
[ozuma@centos7 ~]$ head /usr/share/doc/setup-2.8.71/uidgid NAME UID GID HOME SHELL PACKAGES root 0 0 /root /bin/bash setup bin 1 1 /bin /sbin/nologin setup daemon 2 2 /sbin /sbin/nologin setup sys - 3 - - setup adm 3 4 /var/adm /bin/bash setup tty - 5 - - setup ...(略)... tomcat 53 53 /var/lib/tomcat /sbin/nologin tomcat ...(略)...
見ての通り、本来ならばtomcatユーザはuidに53を使うべきなのだが……。ここで、rpmでのインストール時に実行されるスクリプトレットを見てみよう。rpmコマンドに、-qオプションと--scriptsオプションを付けて、preinstallのscriptletを確認すれば良い。
[ozuma@centos7 ~]$ rpm -q --scripts tomcat preinstall scriptlet (using /bin/sh): # add the tomcat user and group /usr/sbin/groupadd -g 91 -r tomcat 2>/dev/null || : /usr/sbin/useradd -c "Apache Tomcat" -u 91 -g tomcat \ -s /sbin/nologin -r -d /usr/share/tomcat tomcat 2>/dev/null || : ...(略)...
見ての通り、ここではuidが91で決め打ちされている。ずれてますね。
が、もはや「CentOSのtomcatユーザは、uid=91」で世界的にも共通認識ができちゃったっぽいので、このねじれを気にしている人はもはや世界でも私一人である(言い過ぎか?)。なので皆さんも無視していいのですが、一応小ネタと言うことで。
CentOS 7でTomcat 7の初期設定
デフォルトでは、8080/tcpが空いていないため接続テストもできない。iptablesで空けてやらねばならないが……CentOS 7からは、iptablesではなくfirewalldを使うようになったため、これをsystemctlコマンドで操作する。
# systemctl stop firewalld.service
とりあえずiptables stop相当のことをしたいなら、上記のようにfirewalld.serviceをstopする。でもこんなことは本当はしちゃいけないので、きちんと設定するために、firewalldで8080/tcpを空けてください。とてもややこしいですが。