Yum でインストールした Tomcat をバイナリでインストールし直す

以前構築した GitBucket の Tomcat ですが、構築後のバージョンアップをしばらく怠っていました。
脆弱性もいくつか修正されているため、今回は最新版へのバージョンアップを行ってみます。

また、簡単という理由で構築時に yum でインストールをしていましたが、yumリポジトリには脆弱性対応済みの最新版がありません。
なので、一旦 yum パッケージのアンインストールを行った後、公式サイトの tar.gz を展開して再インストールを行っていきます。

検証環境

事前準備とアンインストール

可能ならば仮想マシンのスナップショットを作成しておきます。

tomcat サービスを停止させ、自動起動を無効化させます。

# systemctl stop tomcat
# systemctl disable tomcat

アプリケーションの退避

この環境では Tomcat ディレクトリ配下に Git リポジトリと GitBucket のアプリケーションが配置されているため、適当なディレクトリを作成して退避させておきます。
今回は /tmp/tomcat_update というディレクトリを作成して退避させます。

# mkdir /tmp/tomcat_update && cd $_
# mv /usr/share/tomcat/.gitbucket/ ./
# mv /usr/share/tomcat/webapps/gitbucket.war ./
# ls -a /tmp/tomcat_update/
.  ..  .gitbucket  gitbucket.war

server.xmlweb.xml などの設定ファイルも消してしまうため、設定値に変更がある場合は設定ファイルも控えておきましょう。

アンインストール

退避が完了したら yum でインストールした旧バージョンの tomcat をアンインストールしていきます。
アンインストール対象のパッケージを洗い出し、全て削除します。

# yum list installed | grep tomcat
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
tomcat.noarch                      7.0.76-2.el7                   @base
tomcat-el-2.2-api.noarch           7.0.76-2.el7                   @base
tomcat-jsp-2.2-api.noarch          7.0.76-2.el7                   @base
tomcat-lib.noarch                  7.0.76-2.el7                   @base
tomcat-servlet-3.0-api.noarch      7.0.76-2.el7                   @base

# yum remove tomcat tomcat-el-2.2-api tomcat-jsp-2.2-api tomcat-lib tomcat-servlet-3.0-api

Tomcat 用のディレクトリも削除します。

# rm -rf /usr/share/tomcat

新バージョンのインストール

以前 yum でインストールしたときにユーザが作られていますが、新規インストールの場合には新しくユーザを追加します。

# useradd -s /sbin/nologin tomcat

ダウンロードと展開

先ほど作成した作業用ディレクトリでバイナリのダウンロードと展開を行い、tomcat ディレクトリに移動させます。
Apache Tomcat 7 Software Downloads から tomcat をダウンロードします。

# cd /tmp/tomcat_update
# curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-7/v7.0.90/bin/apache-tomcat-7.0.90.tar.gz
# tar -xzvf ./apache-tomcat-7.0.90.tar.gz
# mv /tmp/tomcat_update/apache-tomcat-7.0.90 /usr/share/tomcat
# chown -R tomcat:tomcat /usr/share/tomcat

バージョン確認のスクリプトを実行すると、7.0.90 であることを確認できます。

# /usr/share/tomcat/bin/version.sh
Using CATALINA_BASE:   /usr/share/tomcat
Using CATALINA_HOME:   /usr/share/tomcat
Using CATALINA_TMPDIR: /usr/share/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.90
Server built:   Jul 2 2018 17:05:37 UTC
Server number:  7.0.90.0
OS Name:        Linux
OS Version:     3.10.0-514.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_151-b12
JVM Vendor:     Oracle Corporation

Tomcat サービス化

startup.sh でも開始できますが、systemctl コマンドでサービスの起動・停止を操作したいので systemd ユニットファイルを作成します。

# cat <<EOS  >/usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 7
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
ExecStart=/usr/share/tomcat/bin/startup.sh
ExecStop=/usr/share/tomcat/bin/shutdown.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOS

systemctl コマンドで tomcat サービスのステータスが確認できるようになっています。

# systemctl daemon-reload
# systemctl status tomcat

リポジトリとアプリケーションの復旧

退避しておいたリポジトリとアプリケーションを tomcat ディレクトリに戻します。

# mv /tmp/tomcat_update/.gitbucket /usr/share/tomcat/
# mv /tmp/tomcat_update/gitbucket.war /usr/share/tomcat/webapps/

アプリケーション開始

停止させていた GitBucket アプリケーションと Web サーバを起動します。

# systemctl start tomcat
# systemctl enable tomcat

アプリケーション (GitBucket) にアクセスし、リポジトリに対する操作などが問題なく行えることが確認できたら完了です。

参考サイト