はじめに

Apache 2.2 + Java 7 + MySQL 5.5 + Tomcat7の環境で検証をする必要があったので、 これらをソースからインストールする方法を記載する。
当然、どれもEOLのためセキュリティ的に脆弱な部分があることに留意する。
これらは全て検証で使用するため、公開サーバとすることはない。
例によってAWS EC2で構築する。

環境

1
2
3
4
5
Apache 2.2.34
OpenSSL 1.0.2k
Tomcat 7.0.79
MySQL 5.5.62
Java 7 (jdk7u80)

EC2の構築

まずは、インストール元となるインスタンスを構築する。
x86 アーキテクチャではなく arm アーキテクチャでは対応するビルドができない可能性があるため、今回は x86 アーキテクチャのインスタンスで実施する。

EC2の設定

下記のような設定で構築する。

1
2
3
4
OS: AmazonLinux2023
インスタンスタイプ: t3.micro
セキュリティグループ: 22, 80, 443, 8080を自分のIPのみ開放
ストレージ: gp3 8GB
ec2-setting

接続
ec2-connect-instance

※以前の記事でも記載したが、RLoginで接続する際に 鍵方式が SHA1 だとエラーが出る。
その場合は、SHA2-256, SHA2-512 のいずれかの方式に変更して接続すること。

ミドルウェアのインストール

接続が完了したら早速インストールの作業を始める。
全てEOLになっているため、通常のパッケージマネージャーから入れられない。
そのため、アーカイブされたソースからインストールする方法をとる。

make gccのインストール

1
sudo dnf install make gcc

↓この辺が入る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dependencies resolved.
===========================================================================================================================================================================================================
 Package                                              Architecture                             Version                                                 Repository                                     Size
===========================================================================================================================================================================================================
Installing:
 gcc                                                  x86_64                                   11.3.1-4.amzn2023.0.3                                   amazonlinux                                    32 M
 make                                                 x86_64                                   1:4.3-5.amzn2023.0.2                                    amazonlinux                                   534 k
Installing dependencies:
 annobin-docs                                         noarch                                   10.93-1.amzn2023.0.1                                    amazonlinux                                    92 k
 annobin-plugin-gcc                                   x86_64                                   10.93-1.amzn2023.0.1                                    amazonlinux                                   887 k
 cpp                                                  x86_64                                   11.3.1-4.amzn2023.0.3                                   amazonlinux                                    10 M
 gc                                                   x86_64                                   8.0.4-5.amzn2023.0.2                                    amazonlinux                                   105 k
 glibc-devel                                          x86_64                                   2.34-52.amzn2023.0.2                                    amazonlinux                                    48 k
 glibc-headers-x86                                    noarch                                   2.34-52.amzn2023.0.2                                    amazonlinux                                   448 k
 guile22                                              x86_64                                   2.2.7-2.amzn2023.0.2                                    amazonlinux                                   6.4 M
 kernel-headers                                       x86_64                                   6.1.21-1.45.amzn2023                                    amazonlinux                                   1.4 M
 libmpc                                               x86_64                                   1.2.1-2.amzn2023.0.2                                    amazonlinux                                    62 k
 libtool-ltdl                                         x86_64                                   2.4.7-1.amzn2023.0.3                                    amazonlinux                                    38 k
 libxcrypt-devel                                      x86_64                                   4.4.33-7.amzn2023                                       amazonlinux                                    32 k

Transaction Summary
===========================================================================================================================================================================================================
Install  13 Packages

OpenSSLインストール

ソースビルドに下記のパッケージが必要になるため事前に入れておく。

1
sudo dnf install perl zlib-devel
1
2
3
4
5
$ cd /usr/local/src
$ sudo wget https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz
$ sudo tar xvfz openssl-1.0.2k.tar.gz
$ cd openssl-1.0.2k
$ sudo ./config shared zlib

↓下記が出ればOK

1
2
3
....
make[1]: Leaving directory '/usr/local/src/openssl-1.0.2k/test'
Configured for linux-x86_64.

インストール作業を実施する。

1
2
3
4
5
6
7
# makeの実施
$ sudo make depend
$ sudo make
$ sudo make test

# インストール
$ sudo make install

↓こんな感じで終了しているはず。

1
2
3
4
5
6
7
8
...
cp libcrypto.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/openssl.pc
[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ 

インストールしたOpenSSLを適用させる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# confの作成
sudo sh -c "echo '/usr/local/ssl/lib' >> /etc/ld.so.conf.d/openssl-1.0.2k.conf"

# 確認
less /etc/ld.so.conf.d/openssl-1.0.2k.conf

/usr/local/ssl/lib
と書いてあればOK!

# 反映
sudo /sbin/ldconfig

# SSLの共有ライブラリがどれを見ているのか確認
ldconfig -p | grep -i libssl

[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ ldconfig -p | grep -i libssl
        libssl3.so (libc6,x86-64) => /lib64/libssl3.so
        libssl.so.3 (libc6,x86-64) => /lib64/libssl.so.3
        libssl.so.1.0.0 (libc6,x86-64) => /usr/local/ssl/lib/libssl.so.1.0.0
        libssl.so (libc6,x86-64) => /usr/local/ssl/lib/libssl.so
先程インストールしたディレクトリになっているのでOK

シンボリックリンクの変更

1
2
[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)

現状だと、 openssl のバイナリが既にインストール済みのものを見ているので、これを変更する。

which コマンドで確認し、修正を行う。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[ec2-user@ip-172-31-35-61 openssl-1.0.2k]$ which openssl
/usr/bin/openssl

$ cd /usr/bin
$ sudo mv openssl openssl-3.0.8
$ sudo ln -s /usr/local/ssl/bin/openssl openssl
$ openssl version

[ec2-user@ip-172-31-35-61 bin]$ openssl version
OpenSSL 1.0.2k  26 Jan 2017

これでOpenSSLのインストール作業は完了

Apacheのインストール

例によって、 /usr/local/src に入れる。 Apache のモジュールについては、ほぼ全部入れているが適宜オプションを変更すること。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ cd /usr/local/src
$ sudo curl -LO http://archive.apache.org/dist/httpd/httpd-2.2.34.tar.gz
$ sudo tar zxf httpd-2.2.34.tar.gz
$ cd httpd-2.2.34
$ sudo ./configure \
  --with-ssl=/usr/local/ssl \
  --enable-mods-shared=all \
  --enable-proxy \
  --enable-ssl \
  --enable-usertrack \
  --enable-so \
  --enable-authn-alias \
  --enable-cache \
  --enable-disk-cache \
  --enable-cgi \
  --enable-suexec

※オプションは下記が参考になる。
参考: https://httpd.apache.org/docs/2.2/programs/configure.html

↓下記のようになっていればOK

1
2
3
4
5
6
7
config.status: creating support/phf_abuse_log.cgi
config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands

インストール

1
2
$ sudo make
$ sudo make install

↓下記のようになっていればOK

1
2
3
4
5
mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: Leaving directory '/usr/local/src/httpd-2.2.34'

確認する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cd /usr/local/apache2
[ec2-user@ip-172-31-35-61 apache2]$ ./bin/apachectl -V
Server version: Apache/2.2.34 (Unix)
Server built:   Apr  8 2023 17:49:41
Server's Module Magic Number: 20051115:43
Server loaded:  APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/apache2"
 -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

インストールできているようだ。

Apacheユーザで実行できるようにする。

apache ユーザを追加し権限を変更する。

1
2
3
$ sudo useradd -s /sbin/nologin apache
$ sudo usermod -G apache apache
$ sudo chown -R apache:apache /usr/local/apache2

起動ユーザを deamonapache に変更する。

1
$ sudo vi /usr/local/apache2/conf/httpd.conf
1
2
3
4
-User daemon
-Group daemon
+User apache
+Group apache

apache2-conf 129-130行目を修正する。

Apacheサービスの登録/自動起動設定

1
$ sudo vi /etc/systemd/system/httpd.service

下記のように記載して保存する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=The Apache 2.2 HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=/usr/local/apache2/conf/httpd.conf
ExecStart=/usr/local/apache2/bin/apachectl -k start
ExecReload=/usr/local/apache2/bin/apachectl -k graceful
ExecStop=/usr/local/apache2/bin/apachectl -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
1
2
3
4
5
# サービスの自動起動を有効にする
$ sudo systemctl enable httpd.service

# 確認
$ sudo systemctl list-unit-files | grep httpd.service

こんな感じになる

1
2
[ec2-user@ip-172-31-35-61 apache2]$ sudo systemctl list-unit-files | grep httpd.service
httpd.service                          enabled         disabled

実際に起動する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 起動
$ sudo systemctl start httpd.service

# 確認
$ sudo systemctl status httpd.service

 httpd.service - The Apache 2.2 HTTP Server
     Loaded: loaded (/etc/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-04-08 17:59:00 UTC; 4s ago
    Process: 101878 ExecStart=/usr/local/apache2/bin/apachectl -k start (code=exited, status=0/SUCCESS)
   Main PID: 101931 (httpd)
      Tasks: 6 (limit: 1055)
     Memory: 7.4M
        CPU: 54ms
     CGroup: /system.slice/httpd.service
             ├─101931 /usr/local/apache2/bin/httpd -k start
             ├─101932 /usr/local/apache2/bin/httpd -k start
             ├─101933 /usr/local/apache2/bin/httpd -k start
             ├─101934 /usr/local/apache2/bin/httpd -k start
             ├─101935 /usr/local/apache2/bin/httpd -k start
             └─101936 /usr/local/apache2/bin/httpd -k start

Apr 08 17:58:59 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting httpd.service - The Apache 2.2 HTTP Server...
Apr 08 17:59:00 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started httpd.service - The Apache 2.2 HTTP Server.

いけてる!

プロセスを確認

1
2
3
4
5
6
7
8
[ec2-user@ip-172-31-35-61 apache2]$ ps -ef | grep httpd
root      101931       1  0 17:58 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101932  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101933  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101934  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101935  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
apache    101936  101931  0 17:59 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
ec2-user  101942    1828  0 17:59 pts/0    00:00:00 grep --color=auto httpd

よさそう。

仕上げに、/usr/local/bin 内に Apachectl, httpdのシンボリックリンクを作成する。

1
2
3
$ cd /usr/local/bin
$ sudo ln -s /usr/local/apache2/bin/httpd httpd
$ sudo ln -s /usr/local/apache2/bin/apachectl apachectl

おまけ: ビルドオプションを忘れた場合に確認する方法

1
2
$ cd /usr/local/apache2/build
$ less config.nice

config.nice にビルド時のオプションが記載されている。

この時点でブラウザからアクセスできるか確認してみる。
apache2-http-access

It Works が出てるのでOK

SSL証明書の作成

適当なSSL証明書を作成しておく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd ~
$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr

[ec2-user@ip-172-31-35-61 ~]$ openssl req -new -key server.key > server.csr
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
A challenge password []:
An optional company name []:


$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt

[ec2-user@ip-172-31-35-61 ~]$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/ST=Tokyo/O=Internet Widgits Pty Ltd/CN=localhost
Getting Private key

こんな感じで作成、とっても適当!

Apache のディレクトリに入れておく。

1
2
3
$ cd ~
$ sudo mkdir -p /usr/local/apache2/ssl
$ sudo cp server* /usr/local/apache2/ssl

ssl.conf の修正

1
2
3
4
5
$ cd /usr/local/apache2/conf/extra/

# バックアップを取って差分を取れるようにしておく。
$ sudo cp httpd-ssl.conf httpd-ssl.conf.bk
$ sudo vi httpd-ssl.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[ec2-user@ip-172-31-35-61 extra]$ diff -u httpd-ssl.conf.bk httpd-ssl.conf
--- httpd-ssl.conf.bk   2023-04-08 18:07:39.164674897 +0000
+++ httpd-ssl.conf      2023-04-08 18:09:04.955485116 +0000
@@ -112,8 +112,8 @@
 
 #   General setup for the virtual host
 DocumentRoot "/usr/local/apache2/htdocs"
-ServerName www.example.com:443
-ServerAdmin [email protected]
+#ServerName www.example.com:443
+#ServerAdmin [email protected]
 ErrorLog "/usr/local/apache2/logs/error_log"
 TransferLog "/usr/local/apache2/logs/access_log"
 
@@ -131,7 +131,7 @@
 #   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
 #   require an ECC certificate which can also be configured in
 #   parallel.
-SSLCertificateFile "/usr/local/apache2/conf/server.crt"
+SSLCertificateFile "/usr/local/apache2/ssl/server.crt"
 #SSLCertificateFile "/usr/local/apache2/conf/server-dsa.crt"
 #SSLCertificateFile "/usr/local/apache2/conf/server-ecc.crt"
 
@@ -141,7 +141,7 @@
 #   you've both a RSA and a DSA private key you can configure
 #   both in parallel (to also allow the use of DSA ciphers, etc.)
 #   ECC keys, when in use, can also be configured in parallel
-SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
+SSLCertificateKeyFile "/usr/local/apache2/ssl/server.key"
 #SSLCertificateKeyFile "/usr/local/apache2/conf/server-dsa.key"
 #SSLCertificateKeyFile "/usr/local/apache2/conf/server-ecc.key"

httpd.conf の修正

1
2
3
4
5
cd /usr/local/apache2/conf/

# バックアップを取って差分を取れるようにしておく。
sudo cp httpd.conf httpd.conf.bk
sudo vi httpd.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
--- httpd.conf.bk       2023-04-08 18:15:31.759104907 +0000
+++ httpd.conf  2023-04-08 18:16:08.459447728 +0000
@@ -178,8 +178,6 @@
 <Directory />
     Options FollowSymLinks
     AllowOverride None
-    Order deny,allow
-    Deny from all
 </Directory>
 
 #
@@ -477,7 +475,7 @@
 #Include conf/extra/httpd-default.conf
 
 # Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
+Include conf/extra/httpd-ssl.conf
 #
 # Note: The following must must be present to support
 #       starting without SSL on platforms with no /dev/random equivalent

これで ssl 接続ができるようになっているはずなので確認してみる。

1
2
3
$ sudo systemctl restart httpd.service
$ sudo systemctl status httpd.service
(active runningになっていればOK)

apache2-https-access
証明書は自己証明書なので警告が出ているが、https でアクセスはできている。
これで Apache のインストールは完了

Javaのインストール

Tomcatを入れる前に、Javaを入れておく必要がある。

Java8をパッケージから入れる

1
$ sudo dnf install java-1.8.0-amazon-corretto-devel
1
2
3
4
[ec2-user@ip-172-31-35-61 ~]$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment Corretto-8.362.08.1 (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM Corretto-8.362.08.1 (build 25.362-b08, mixed mode)

Java7をalternativesで切り替えられるようにする

  1. 下記URLから、 Linux x64jdk-7u80-linux-x64.tar.gz をダウンロードする。
    URL: https://www.oracle.com/jp/java/technologies/javase/javase7-archive-downloads.html java-archive-download

  2. オラクルのサインインを求められるので、サインインする。

  3. 再度URLにアクセスし、ダウンロードする。

  4. ダウンロードしたソースをファイル転送でサーバにいれる。
    以降は/home/ec2-user に入る想定で記載する。

  5. バイナリを /usr/local/src に入れ、解凍する。

1
2
3
$ cd /usr/local/src
$ sudo mv /home/ec2-user/jdk-7u80-linux-x64.tar.gz .
$ sudo tar xzvf jdk-7u80-linux-x64.tar.gz
  1. バージョンを確認しておく。
1
2
3
4
[ec2-user@ip-172-31-1-72 src]$ ./jdk1.7.0_80/bin/java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  1. update-alternatives で入れる。
1
2
3
4
5
6
$ sudo update-alternatives --verbose --install /usr/bin/java java /usr/local/src/jdk1.7.0_80/bin/java 10

[ec2-user@ip-172-31-35-61 src]$ java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment Corretto-8.362.08.1 (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM Corretto-8.362.08.1 (build 25.362-b08, mixed mode)

この状態だとまだ切り替わっていない。 切り替えるには、 config オプションで変える。

  1. configjava の向き先を変える。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ sudo update-alternatives --config java

[ec2-user@ip-172-31-35-61 src]$ sudo update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
   2           /usr/local/src/jdk1.7.0_80/bin/java

Enter to keep the current selection[+], or type selection number: 2

2 を選択して java の向き先を先程インストールししたディレクトリにする。

  1. 変更されたかの確認
1
2
3
4
[ec2-user@ip-172-31-35-61 src]$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

参考: https://qiita.com/yochapan/items/af86a320035f8db7daf4

Tomcatのインストール

Tomcat 7.0.79はアーカイブされているバージョンのため、アーカイブからパッケージをダウンロードしてインストールする。
リンク: https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ cd /usr/local/src
$ sudo wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/apache-tomcat-7.0.79.tar.gz
$ sudo tar xvzf apache-tomcat-7.0.79.tar.gz
$ sudo mv apache-tomcat-7.0.79 /usr/local/tomcat
$ sudo useradd -d /usr/local/tomcat -s /bin/false tomcat
$ sudo chown -R tomcat: /usr/local/tomcat
$ sudo /usr/local/tomcat/bin/startup.sh

[ec2-user@ip-172-31-35-61 src]$ sudo /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

※スタートしたかを確認する。 tomcat-http-access

一応 起動時のJVMのバージョンも確認しておく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[ec2-user@ip-172-31-35-61 conf]$ sudo /usr/local/tomcat/bin/version.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.79
Server built:   Jun 26 2017 16:25:20 UTC
Server number:  7.0.79.0
OS Name:        Linux
OS Version:     6.1.21-1.45.amzn2023.x86_64
Architecture:   amd64
JVM Version:    1.7.0_80-b15
JVM Vendor:     Oracle Corporation

JVM Version: 1.7.0_80-b15 となっているので問題なさそうだ。

AJPでApache経由でアクセスするようにする

Apacheの修正

1
2
3
$ cd /usr/local/apache2/conf
$ sudo cp httpd.conf httpd.conf.bk2
$ sudo vi httpd.conf
1
2
3
4
5
6
7
8
[ec2-user@ip-172-31-35-61 conf]$ diff -u httpd.conf.bk2 httpd.conf
--- httpd.conf.bk2      2023-04-08 18:48:43.227590261 +0000
+++ httpd.conf  2023-04-08 18:49:17.707911304 +0000
@@ -485,3 +485,4 @@
 SSLRandomSeed startup builtin
 SSLRandomSeed connect builtin
 </IfModule>
+ProxyPass / ajp://localhost:8009/

Tomcat の修正 (これは不要)

1
2
3
$ cd /usr/local/tomcat/conf
$ sudo cp server.xml server.xml.bk
$ sudo vi server.xml

server.xml を少し修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[ec2-user@ip-172-31-35-61 conf]$ sudo diff -u server.xml.bk server.xml
--- server.xml.bk       2023-04-08 18:42:29.894113752 +0000
+++ server.xml  2023-04-08 18:43:17.214554519 +0000
@@ -90,8 +90,7 @@
     -->
 
     <!-- Define an AJP 1.3 Connector on port 8009 -->
-    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
 
     <!-- An Engine represents the entry point (within Catalina) that processes
          every request.  The Engine implementation for Tomcat stand alone

どちらも再起動する。

1
2
3
$ sudo systemctl restart httpd.service
$ sudo /usr/local/tomcat/bin/shutdown.sh
$ sudo /usr/local/tomcat/bin/startup.sh

apache2-ajp-http-access apache2-ajp-https-access

Tomcatの自動起動の設定

ユニットファイルの作成

1
sudo vi /etc/systemd/system/tomcat.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[Unit]
Description=Apache Tomcat 7.0.79
ConditionPathExists=/usr/local/tomcat
After=httpd.service

[Service]
User=tomcat
Group=tomcat
Type=oneshot

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=no
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

httpd.service の後に起動したいので、 After を指定しておく。

1
2
3
4
5
6
$ sudo systemctl daemon-reload
$ sudo systemctl list-unit-files --type=service | grep tomcat
$ sudo systemctl enable tomcat
$ sudo systemctl list-unit-files | grep tomcat.service

$ sudo systemctl status tomcat.service

log ファイルが root になっていると起動できないので、Tomcatを停止し下記を実施する。

1
$ sudo chown -R tomcat: logs/

これで下記のようにリスタートができるようになる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ sudo systemctl restart tomcat.service

[ec2-user@ip-172-31-35-61 conf]$ sudo systemctl status tomcat.service 
 tomcat.service - Apache Tomcat 7.0.79
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
     Active: active (exited) since Sat 2023-04-08 18:56:29 UTC; 6s ago
    Process: 105003 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 105003 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 1055)
     Memory: 3.9M
        CPU: 4.263s
     CGroup: /system.slice/tomcat.service

Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting tomcat.service - Apache Tomcat 7.0.79...
Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal startup.sh[105003]: Tomcat started.
Apr 08 18:56:29 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished tomcat.service - Apache Tomcat 7.0.79.

MySQLのインストール

アーカイブされているバージョンのため、アーカイブからパッケージをダウンロードしてインストールする。 ※URLから直接 dnf install できなかったので wget でまずローカルに落としてから作業した。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cd ~
$ mkdir -p work/mysql && cd $_

# mysql5.5.62-server
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-server-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-server-5.5.62-1.el7.x86_64.rpm

# mysql5.5.62-client
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-client-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-client-5.5.62-1.el7.x86_64.rpm

# mysql5.5.62-devel
$ wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-devel-5.5.62-1.el7.x86_64.rpm
$ sudo dnf install MySQL-devel-5.5.62-1.el7.x86_64.rpm

インストール確認

1
2
[ec2-user@ip-172-31-35-61 mysql]$ mysql --version
mysql  Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1

MySQLの自動起動設定

1
sudo systemctl enable mysql

確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl start mysql
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl start mysql
[ec2-user@ip-172-31-35-61 mysql]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sat 2023-04-08 19:00:10 UTC; 5s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 105974 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 66.2M
        CPU: 204ms
     CGroup: /system.slice/mysql.service
             ├─105980 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─106066 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-fil>

Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105974]: Starting MySQL.
Apr 08 19:00:08 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105980]: Logging to '/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.err'.
Apr 08 19:00:10 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[105974]: . SUCCESS!
Apr 08 19:00:10 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

mysql に入れるか確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[ec2-user@ip-172-31-35-61 mysql]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

後始末

1
2
$ cd ~
$ rm -fr work

my.cnfをカスタマイズする

1
$ sudo vi /etc/my.cnf.d/my.cnf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

再起動

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
sudo systemctl restart mysql

# 確認
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status mysql
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sat 2023-04-08 19:02:36 UTC; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 106262 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 36.2M
        CPU: 144ms
     CGroup: /system.slice/mysql.service
             ├─106268 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─106355 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-fil>

Apr 08 19:02:34 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 08 19:02:36 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[106262]: Starting MySQL.. SUCCESS!
Apr 08 19:02:36 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

その他設定しておくこと

UTC->JSTへの修正

1
$ sudo timedatectl set-timezone Asia/Tokyo

確認

1
2
3
4
5
6
7
$ date
Sat Apr  8 19:06:40 UTC 2023

$ sudo timedatectl set-timezone Asia/Tokyo

$ date
Sun Apr  9 04:06:49 JST 2023

問題なく変更できている。

rsyslogのインストール

AmazonLinux2023 だと /var/log 系のログファイルがないので、 rsyslog を入れる。

1
$ sudo dnf install rsyslog

cronのインストール

1
$ sudo dnf install cronie-noanacron

サービス起動 & 自動起動設定

1
2
$ sudo systemctl start crond
$ sudo systemctl enable crond

オプション: Fake SMTPの導入

mailpit という 開発用のSMTPのダミーサーバがある。
これを使用することで、アプリケーションのメール送信を確認することができる。

Dockerのインストール

1
$ sudo dnf install docker

サービス起動 & 自動起動設定

1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[ec2-user@ip-172-31-35-61 ~]$ docker version
Client:
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.19.3
 Git commit:        100c701
 Built:             Mon Mar 13 22:41:42 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied

Docker composeのインストール

1
2
3
4
5
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
1
2
[ec2-user@ip-172-31-35-61 ~]$ docker compose version
Docker Compose version v2.4.1

ec2-userでDocker起動できるようにする

1
2
$ sudo usermod -a -G docker ec2-user
$ sudo chgrp docker /var/run/docker.sock

一度 ec2-user からログアウトしてログインし直す。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[ec2-user@ip-172-31-35-61 ~]$ docker version
Client:
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.19.3
 Git commit:        100c701
 Built:             Mon Mar 13 22:41:42 2023
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.19.3
  Git commit:       a89b842
  Built:            Mon Mar 13 00:00:00 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.19
  GitCommit:        1e1ea6e986c6c86565bc33d52e34b81b3e2bc71f
 runc:
  Version:          1.1.4
  GitCommit:        5fd4c4d144137e991c4acebb2146ab1483a97925
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[ec2-user@ip-172-31-35-61 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Got permission denied が出なくなったのでOK

mailpitの導入

1
2
3
$ cd ~
$ mkdir -p mailpit && cd $_
$ vi compose.yml

compose.yml は下記のように記載する。

1
2
3
4
5
6
services:
  mailpit:
    image: axllent/mailpit:v1.4.0
    ports:
      - 8025:8025
      - 25:1025

ホストのポート25をコンテナのポート1025に繋げる形にする。

1
docker compose up -d
1
2
3
[ec2-user@ip-172-31-35-61 mailpit]$ docker compose ps
NAME                COMMAND             SERVICE             STATUS              PORTS
mailpit-mailpit-1   "/mailpit"          mailpit             running             0.0.0.0:25->1025/tcp, 0.0.0.0:8025->8025/tcp, :::25->1025/tcp, :::8025->8025/tcp

これでセットアップは完了だが、AWSの方でセキュリティグループの 8025を開ける必要があるので開けて確認をする。

最終的に下記のようなセキュリティグループの設定になっている。
aws-security-group

アクセスの確認をする。 mailpit-access OK

メール送信をテストする

sendmailを入れる。

1
$ sudo dnf install sendmail

下記をサーバで実行する。

1
2
3
4
5
6
7
sendmail -t <<EOL
From: [email protected]
To: [email protected]
Subject: test
testmail1
testmail2
EOL

実際にmailpit にメールが来ていることが確認できる。
mailpit-testmail

確認: 再起動後にApache, Tomcat, MySQLが起動しているか

EC2でインスタンスの再起動 or reboot コマンドを実行する。

1
ps aux

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  3.5  1.7  23152 16440 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 32
root           2  0.0  0.0      0     0 ?        S    04:38   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   04:38   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   04:38   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   04:38   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   04:38   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:0-cgroup_destroy]
root           8  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/0:0H-events_highpri]
root           9  0.4  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:0-flush-259:0]
root          10  0.0  0.0      0     0 ?        I<   04:38   0:00 [mm_percpu_wq]
root          11  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_kthread]
root          12  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_rude_kthread]
root          13  0.0  0.0      0     0 ?        I    04:38   0:00 [rcu_tasks_trace_kthread]
root          14  0.1  0.0      0     0 ?        S    04:38   0:00 [ksoftirqd/0]
root          15  0.1  0.0      0     0 ?        I    04:38   0:00 [rcu_preempt]
root          16  0.0  0.0      0     0 ?        S    04:38   0:00 [migration/0]
root          17  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:1-cgroup_destroy]
root          18  0.0  0.0      0     0 ?        S    04:38   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    04:38   0:00 [cpuhp/1]
root          20  0.1  0.0      0     0 ?        S    04:38   0:00 [migration/1]
root          21  0.1  0.0      0     0 ?        S    04:38   0:00 [ksoftirqd/1]
root          22  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:0-cgroup_destroy]
root          23  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/1:0H-events_highpri]
root          25  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:1-flush-259:0]
root          26  0.0  0.0      0     0 ?        S    04:38   0:00 [kdevtmpfs]
root          27  0.0  0.0      0     0 ?        I<   04:38   0:00 [inet_frag_wq]
root          28  0.0  0.0      0     0 ?        S    04:38   0:00 [kauditd]
root          29  0.0  0.0      0     0 ?        S    04:38   0:00 [khungtaskd]
root          30  0.0  0.0      0     0 ?        S    04:38   0:00 [oom_reaper]
root          31  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:2-flush-259:0]
root          32  0.0  0.0      0     0 ?        I<   04:38   0:00 [writeback]
root          33  0.0  0.0      0     0 ?        S    04:38   0:00 [kcompactd0]
root          34  0.0  0.0      0     0 ?        SN   04:38   0:00 [khugepaged]
root          35  0.0  0.0      0     0 ?        I<   04:38   0:00 [kintegrityd]
root          36  0.0  0.0      0     0 ?        I<   04:38   0:00 [kblockd]
root          37  0.0  0.0      0     0 ?        I<   04:38   0:00 [blkcg_punt_bio]
root          38  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:1-events]
root          39  0.0  0.0      0     0 ?        I<   04:38   0:00 [tpm_dev_wq]
root          40  0.0  0.0      0     0 ?        I<   04:38   0:00 [md]
root          41  0.0  0.0      0     0 ?        I<   04:38   0:00 [edac-poller]
root          42  0.0  0.0      0     0 ?        S    04:38   0:00 [watchdogd]
root          44  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/0:1H-kblockd]
root          48  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:3-flush-259:0]
root          49  0.0  0.0      0     0 ?        S    04:38   0:00 [kswapd0]
root          67  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfsalloc]
root          68  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs_mru_cache]
root          70  0.0  0.0      0     0 ?        I<   04:38   0:00 [kthrotld]
root          73  0.1  0.0      0     0 ?        I    04:38   0:00 [kworker/1:2-cgroup_destroy]
root          86  0.0  0.0      0     0 ?        S    04:38   0:00 [xenbus_probe]
root         117  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-wq]
root         119  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-reset-wq]
root         121  0.0  0.0      0     0 ?        I<   04:38   0:00 [nvme-delete-wq]
root         127  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:4-flush-259:0]
root         128  0.0  0.0      0     0 ?        I<   04:38   0:00 [mld]
root         145  0.0  0.0      0     0 ?        I<   04:38   0:00 [ipv6_addrconf]
root         146  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/1:1H-xfs-log/nvme0n1p1]
root         149  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:5-events_unbound]
root         166  0.0  0.0      0     0 ?        I<   04:38   0:00 [kstrp]
root         178  0.0  0.0      0     0 ?        I<   04:38   0:00 [zswap-shrink]
root         179  0.0  0.0      0     0 ?        I<   04:38   0:00 [kworker/u5:0]
root         356  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:2-events]
root         357  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:3-events]
root         713  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-buf/nvme0n1]
root         714  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-conv/nvme0n]
root         715  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-reclaim/nvm]
root         716  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-blockgc/nvm]
root         717  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-inodegc/nvm]
root         718  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-log/nvme0n1]
root         719  0.0  0.0      0     0 ?        I<   04:38   0:00 [xfs-cil/nvme0n1]
root         720  0.0  0.0      0     0 ?        S    04:38   0:00 [xfsaild/nvme0n1p1]
root         725  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:3-events_power_efficient]
root         726  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/0:4-cgroup_destroy]
root         766  0.8  1.9  50376 18452 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-journald
root        1136  0.4  1.2  37200 11764 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-udevd
systemd+    1150  0.6  1.4  21168 13516 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-resolved
root        1153  0.0  0.2  36024  2384 ?        S<sl 04:38   0:00 /sbin/auditd
root        1159  0.0  0.0      0     0 ?        I<   04:38   0:00 [ena]
root        1165  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:6-flush-259:0]
root        1173  0.0  0.0      0     0 ?        I<   04:38   0:00 [cryptd]
dbus        1237  0.1  0.4   8376  3904 ?        Ss   04:38   0:00 /usr/bin/dbus-broker-launch --scope system --audit
dbus        1270  0.1  0.3   5264  2884 ?        S    04:38   0:00 dbus-broker --log 4 --controller 9 --machine-id ec2160a5242b2c02755b13cec8fa10c6 --max-bytes 536870912 --max-fds 4096 --max-matches 1638
root        1305  0.0  0.7  15260  6520 ?        Ss   04:38   0:00 /usr/bin/systemd-inhibit --what=handle-suspend-key:handle-hibernate-key --who=noah --why=acpid instead --mode=block /usr/sbin/acpid -f
root        1308  0.0  0.3  81328  3092 ?        Ssl  04:38   0:00 /usr/sbin/irqbalance --foreground
libstor+    1309  0.0  0.2  11792  2088 ?        Ss   04:38   0:00 /usr/bin/lsmd -d
root        1311  132  0.7 164768  6868 ?        Ssl  04:38   0:22 /usr/sbin/rngd -f -x pkcs11 -x nist
root        1312  2.5  0.6 180788  5736 ?        Ssl  04:38   0:00 /usr/sbin/rsyslogd -n
root        1313  0.1  1.1 261044 11052 ?        Ss   04:38   0:00 /usr/sbin/sssd -i --logger=files
systemd+    1321  0.4  1.0 235736  9680 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-networkd
root        1327  0.0  0.0      0     0 ?        I<   04:38   0:00 [rpciod]
root        1328  0.0  0.0      0     0 ?        I<   04:38   0:00 [xprtiod]
root        1332  0.6  1.3 262528 12516 ?        S    04:38   0:00 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
chrony      1334  0.0  0.3  95776  3600 ?        S    04:38   0:00 /usr/sbin/chronyd -F 2
root        1344  0.4  4.2 276456 39704 ?        S    04:38   0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root        1350  0.7  4.5 1300204 41900 ?       Ssl  04:38   0:00 /usr/bin/containerd
root        1351  0.0  0.3 281008  3588 ?        Ssl  04:38   0:00 /usr/sbin/gssproxy -D
root        1365  0.2  1.0  17572 10044 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-logind
root        1382  0.0  0.1   2668  1136 ?        S    04:38   0:00 /usr/sbin/acpid -f
root        1411  0.0  0.7  27096  7136 ?        Ss   04:38   0:00 /usr/local/apache2/bin/httpd -k start
tomcat      1448 28.7  7.3 1659696 68440 ?       Sl   04:38   0:04 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.Clas
apache      1494  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1495  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1496  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1497  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
apache      1498  0.0  0.4  38396  3824 ?        S    04:38   0:00 /usr/local/apache2/bin/httpd -k start
root        1526  0.0  1.3 723192 12872 ?        Ssl  04:38   0:00 /usr/bin/amazon-ssm-agent
root        1527  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/1:4-events]
root        1532  0.0  0.8  29104  7992 ?        Ss   04:38   0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        1540  1.5  6.8 1404380 63616 ?       Ssl  04:38   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536
root        1542  0.0  0.2  20544  2668 ?        Ss   04:38   0:00 /usr/sbin/atd -f
root        1543  0.0  0.3 233420  3704 ?        Ss   04:38   0:00 /usr/sbin/crond -n
root        1544  0.0  0.1 221344  1072 tty1     Ss+  04:38   0:00 /sbin/agetty -o -p -- \u --noclear - linux
root        1545  0.0  0.1 221388  1068 ttyS0    Ss+  04:38   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220
root        1548  0.0  0.4 232300  3920 ?        S    04:38   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
mysql       1642  0.4  4.7 489956 43672 ?        Sl   04:38   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.a
root        1646  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:7-flush-259:0]
root        1739  0.8  2.4 733964 22808 ?        Sl   04:38   0:00 /usr/bin/ssm-agent-worker
root        1859  0.0  0.0      0     0 ?        I    04:38   0:00 [kworker/u4:8-events_unbound]
root        1920  0.4  1.1  41860 10800 ?        Ss   04:38   0:00 sshd: ec2-user [priv]
root        1923  0.6  0.7  15260  6568 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-userdbd
root        1924  0.0  0.8  24704  7704 ?        S    04:38   0:00 systemd-userwork
root        1925  0.0  0.8  24704  7704 ?        S    04:38   0:00 systemd-userwork
root        1926  0.0  0.8  24876  7772 ?        S    04:38   0:00 systemd-userwork
ec2-user    1928  1.5  1.3  19844 12960 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd --user
ec2-user    1930  0.0  0.6  44816  6476 ?        S    04:38   0:00 (sd-pam)
ec2-user    1937  0.1  0.7  42204  6844 ?        R    04:38   0:00 sshd: ec2-user@pts/0
ec2-user    1938  0.4  0.5 233060  5052 pts/0    Ss   04:38   0:00 -bash
root        1942  1.0  0.9  16996  8588 ?        Ss   04:38   0:00 /usr/lib/systemd/systemd-hostnamed
root        1961  0.5  0.9 260288  8408 pts/0    S    04:38   0:00 sudo su
root        1963  0.0  0.5 245536  4856 pts/0    S    04:38   0:00 su
root        1964  1.0  0.5 233096  5100 pts/0    S    04:38   0:00 bash
root        1981  0.0  0.3 232520  2932 pts/0    R+   04:38   0:00 ps aux
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status httpd.service
 httpd.service - The Apache 2.2 HTTP Server
     Loaded: loaded (/etc/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2023-04-09 04:38:12 JST; 1min 9s ago
    Process: 1354 ExecStart=/usr/local/apache2/bin/apachectl -k start (code=exited, status=0/SUCCESS)
   Main PID: 1411 (httpd)
      Tasks: 6 (limit: 1055)
     Memory: 11.8M
        CPU: 61ms
     CGroup: /system.slice/httpd.service
             ├─1411 /usr/local/apache2/bin/httpd -k start
             ├─1494 /usr/local/apache2/bin/httpd -k start
             ├─1495 /usr/local/apache2/bin/httpd -k start
             ├─1496 /usr/local/apache2/bin/httpd -k start
             ├─1497 /usr/local/apache2/bin/httpd -k start
             └─1498 /usr/local/apache2/bin/httpd -k start

Apr 09 04:38:11 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting httpd.service - The Apache 2.2 HTTP Server...
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started httpd.service - The Apache 2.2 HTTP Server.
[ec2-user@ip-172-31-35-61 ~]$ systemctl status tomcat.service
 tomcat.service - Apache Tomcat 7.0.79
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; preset: disabled)
     Active: active (exited) since Sun 2023-04-09 04:38:12 JST; 1min 15s ago
    Process: 1418 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 1418 (code=exited, status=0/SUCCESS)
      Tasks: 36 (limit: 1055)
     Memory: 91.2M
        CPU: 4.693s
     CGroup: /system.slice/tomcat.service
             └─1448 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize>

Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting tomcat.service - Apache Tomcat 7.0.79...
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal startup.sh[1418]: Tomcat started.
Apr 09 04:38:12 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished tomcat.service - Apache Tomcat 7.0.79.
[ec2-user@ip-172-31-35-61 ~]$ systemctl status mysql.service
 mysql.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/rc.d/init.d/mysql; generated)
     Active: active (running) since Sun 2023-04-09 04:38:16 JST; 1min 18s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1530 ExecStart=/etc/rc.d/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 17 (limit: 1055)
     Memory: 49.9M
        CPU: 237ms
     CGroup: /system.slice/mysql.service
             ├─1548 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ip-172-31-35-61.ap-northeast-1.compute.internal.pid
             └─1642 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=ip-172-31-35-61.ap-northeast-1.compute.internal.err --pid-file=>

Apr 09 04:38:14 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mysql.service - LSB: start and stop MySQL...
Apr 09 04:38:16 ip-172-31-35-61.ap-northeast-1.compute.internal mysql[1530]: Starting MySQL.. SUCCESS!
Apr 09 04:38:16 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Started mysql.service - LSB: start and stop MySQL.

大丈夫そうだ。

アクセス確認もしておく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
curl localhost

[ec2-user@ip-172-31-35-61 ~]$ curl localhost
<!DOCTYPE html>


<html lang="en">
    <head>
        <title>Apache Tomcat/7.0.79</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="http://tomcat.apache.org/">Home</a></span>

取得できているので起動はしてそうだ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
mysql

[ec2-user@ip-172-31-35-61 ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

入れるのでOK

今度 mailpit も自動起動化しよう。

番外編: mailpitの自動起動化

1
$ sudo vi /etc/systemd/system/mailpit.service

Unitファイルの作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[Unit]
Description=mailpit on docker
ConditionPathExists=/home/ec2-user/mailpit
After=docker.service

[Service]
User=ec2-user
Group=ec2-user
Type=oneshot

ExecStart=docker compose -f /home/ec2-user/mailpit/compose.yml up -d
ExecStop=docker compose -f /home/ec2-user/mailpit/compose.yml down
Restart=no
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

自動起動の設定

1
2
3
4
$ sudo systemctl daemon-reload
$ sudo systemctl list-unit-files --type=service | grep mailpit
$ sudo systemctl enable mailpit.service
$ sudo systemctl list-unit-files | grep mailpit.service

イケてる・・・!?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl restart mailpit.service
[ec2-user@ip-172-31-35-61 ~]$ sudo systemctl status mailpit.service
 mailpit.service - mailpit on docker
     Loaded: loaded (/etc/systemd/system/mailpit.service; enabled; preset: disabled)
     Active: active (exited) since Sun 2023-04-09 04:50:50 JST; 5s ago
    Process: 3148 ExecStart=docker compose -f /home/ec2-user/mailpit/compose.yml up -d (code=exited, status=0/SUCCESS)
   Main PID: 3148 (code=exited, status=0/SUCCESS)
        CPU: 100ms

Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Starting mailpit.service - mailpit on docker...
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Network mailpit_default  Creating
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Network mailpit_default  Created
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Creating
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Created
Apr 09 04:50:49 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Starting
Apr 09 04:50:50 ip-172-31-35-61.ap-northeast-1.compute.internal docker[3159]: Container mailpit-mailpit-1  Started
Apr 09 04:50:50 ip-172-31-35-61.ap-northeast-1.compute.internal systemd[1]: Finished mailpit.service - mailpit on docker.

再起動して確認してみる。

ちゃんと起動している・・・!

1
2
3
[ec2-user@ip-172-31-35-61 ~]$ docker ps
CONTAINER ID   IMAGE                    COMMAND      CREATED              STATUS          PORTS                                                                              NAMES
0c0003c80d2d   axllent/mailpit:v1.4.0   "/mailpit"   About a minute ago   Up 59 seconds   0.0.0.0:8025->8025/tcp, :::8025->8025/tcp, 0.0.0.0:25->1025/tcp, :::25->1025/tcp   mailpit-mailpit-1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ec2-user@ip-172-31-35-61 ~]$ curl localhost:8025
<!DOCTYPE html>
<html lang="en" class="h-100">

<head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <meta name="referrer" content="no-referrer">
        <meta name="robots" content="noindex, nofollow, noarchive">
        <link rel="icon" href="favicon.svg">
        <title>Mailpit</title>
        <link rel=stylesheet href="dist/app.css">
</head>

<body class="h-100">
        <div class="container-fluid h-100 d-flex flex-column" id="app">
                <noscript>You require JavaScript to use this app.</noscript>
        </div>

        <script src="dist/app.js"></script>
</body>

</html>

すばらっ!

参考

おわりに

ソースから全部インストールするのは久々の作業だったのでかなり時間がかかった。
ただやはり勉強にはなるなあ。
パッケージ管理ツールに頼り切りなので、このあたり力になることはやっていきたい。