はじめに

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
[[email protected] 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-use[email protected] 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
[[email protected] 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
[[email protected] 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

[[email protected] 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
[[email protected] 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
[[email protected] 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
[[email protected] 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

[[email protected] ~]$ 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

[[email protected] ~]$ 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
[[email protected] 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
[[email protected] ~]$ 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
[[email protected] 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

[[email protected] 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-us[email protected] 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
[[email protected] 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-u[email protected] 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-use[email protected] 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
[ec[email protected] 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-us[email protected] 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-us[email protected] 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
[[email protected] 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
[[email protected] 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)
[[email protected] mysql]$ sudo systemctl start mysql
[[email protected] mysql]$ sudo systemctl start mysql
[[email protected] 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
[[email protected] 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

# 確認
[[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] 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: [email protected]/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
[e[email protected] ~]$ 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.
[[email protected] ~]$ 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.
[[email protected] ~]$ 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

[[email protected] ~]$ 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

[[email protected] ~]$ 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-[email protected] ~]$ sudo systemctl restart mailpit.service
[ec2[email protected] ~]$ 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
[[email protected] ~]$ 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
[[email protected] ~]$ 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>

すばらっ!

参考

おわりに

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