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.xml
や web.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
# 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) にアクセスし、リポジトリに対する操作などが問題なく行えることが確認できたら完了です。