Apache Httpd2.4とTomcat9の連携

環境

インストールの詳細は以前の記事を参照。

https://wankomagic.hatenablog.com/entry/2020/04/09/165254

 

Httpdの設定

/etc/httpd/conf.modules.d/00-proxy.conf に以下があることを確認する。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 

/etc/httpd/conf.d/tomcat.conf (名前は何でもよい)にTomcatへのリダイレクトの設定を記述する。tomcat側でキーワードチェックをしない場合はsecret=passwordの記述は不要。

ProxyPass /docs/ ajp://localhost:8009/docs/ secret=password
ProxyPass /examples/ ajp://localhost:8009/examples/ secret=password

 

Tomcatの設定

/usr/local/tomcat/conf/server.xml のHostタグ内にAJPからのアクセスに対するリダイレクトの設定を記述する。コメントアウトで書かれているのでコメントアウトを外して、secret="pasword"を追記する。secretの値はhttpdで設定したものにする。

<Connector protocol="AJP/1.3"
  address="::1"
  port="8009"
  secret="password"
  redirectPort="8443" />

secretは9で追加されたAJPアクセスに関するセキュリティ設定。8ではrequiredSecretに該当するが、デフォルトnullではエラーになる(503)。secretRequired="false"を記述してチェックしないようにするか、secret="httpdで記述したキーワード"を記述してチェックを通すようにする必要がある。

https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html

 

 

SELinuxの設定

Httpdから別のポートへの接続を許可する。

setsebool -P httpd_can_network_connect on

RHEL7公式ドキュメント

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_apache_http_server-booleans

httpd_senuxのマニュアル

https://linux.die.net/man/8/httpd_selinux

 

これを知ったのは次の記事で、ポリシー設定は他にもある。触ってみながら、ポリシーを見直す。

https://computingforgeeks.com/install-apache-tomcat-9-on-linux-rhel-centos/

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_relay 1
sudo setsebool -P httpd_graceful_shutdown 1
sudo setsebool -P nis_enabled 1 

 

Httpd, Tomcatを再起動して、ブラウザから動作確認する。

 

 補足

CentOS8にdockerをインストールする

だらだら書いたので、結論を先に書く。

  • container-toolsモジュールを無効にしてdocker公式手順を実行する
    無効にせず、containerd.ioだけRPMによるインストールでも可
  • RHEL8/CentOS8はdockerをサポートしておらず、代わりにpodmanを提供している
    この記事は最終的にpodmanをインストールしている

 

以下、経緯。

 

CentOS7のときはextraリポジトリにあったので、適当に入力したらインストールできた。

yum install docker

CentOS8にdockerはなかった。

http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/extras/x86_64/Packages/

http://ftp.jaist.ac.jp/pub/Linux/CentOS/8/extras/x86_64/os/Packages/

なので公式からインストールする。

https://docs.docker.com/engine/install/centos/

dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

dnf install docker-ce docker-ce-cli containerd.io

しかしエラーが出てインストールできない。 containerd.ioが1.2.2-3以上が必要だが、除外されている。

エラー:
問題: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded

インストールできるバージョンを確認する。

# dnf list --showduplicates containerd.io
利用可能なパッケージ
containerd.io.x86_64 1.2.0-1.2.beta.2.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.0.rc.0.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.2.rc.2.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-3.el7 docker-ce-stable

ちなみに、CentOS7で実行すると、1.2.13-3.1.el7がインストールできる。CentOS8のどれかのリポジトリが邪魔してることを疑い、docker-ce-stableリポジトリのみ有効にすると、インストールできるバージョンとして表示される。

# dnf list --disablerepo=* --enablerepo=docker-ce-stable --showduplicates containerd.io
利用可能なパッケージ
containerd.io.x86_64 1.2.0-1.2.beta.2.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.0.rc.0.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.2.rc.2.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-3.el7 docker-ce-stable
containerd.io.x86_64 1.2.2-3.el7 docker-ce-stable
containerd.io.x86_64 1.2.2-3.3.el7 docker-ce-stable
containerd.io.x86_64 1.2.4-3.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.5-3.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.6-3.3.el7 docker-ce-stable
containerd.io.x86_64 1.2.10-3.2.el7 docker-ce-stable
containerd.io.x86_64 1.2.13-3.1.el7 docker-ce-stable

有効になっているリポジトリを確認して、どれがexcludedしているかひとつづつ確認する。犯人はAppStream。

# dnf repolist
repo id repo の名前 状態
AppStream CentOS-8 - AppStream 5,308
BaseOS CentOS-8 - Base 1,661
docker-ce-stable Docker CE Stable - x86_64 63
extras CentOS-8 - Extras 16 

AppStreamは8から現れたオプショナルなリポジトリで、パッケージをまとめたモジュールというものがある。このモジュールを確認してみる。

# dnf module list
CentOS-8 - AppStream
Name Stream Profiles Summary
389-ds 1.4 389 Directory Server (base)
ant 1.10 [d] common [d] Java build tool
container-tools rhel8 [d] common [d] Common tools and dependencies for container runtimes
container-tools 1.0 [x] common [d] Common tools and dependencies for container runtimes

以下略

 container-toolsというのが怪しいので無効にしてみる。

# dnf module disable container-tools
========================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
========================================================================================================================
モジュールの無効化:
container-tools

トランザクションの概要
========================================================================================================================

これでよろしいですか? [y/N]: y
完了しました!
# dnf list --showduplicate containerd.io
利用可能なパッケージ
containerd.io.x86_64 1.2.0-1.2.beta.2.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.0.rc.0.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-2.2.rc.2.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.0-3.el7 docker-ce-stable
containerd.io.x86_64 1.2.2-3.el7 docker-ce-stable
containerd.io.x86_64 1.2.2-3.3.el7 docker-ce-stable
containerd.io.x86_64 1.2.4-3.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.5-3.1.el7 docker-ce-stable
containerd.io.x86_64 1.2.6-3.3.el7 docker-ce-stable
containerd.io.x86_64 1.2.10-3.2.el7 docker-ce-stable
containerd.io.x86_64 1.2.13-3.1.el7 docker-ce-stable

container-toolsの中身(パッケージ)はRHELのサイトで確認できる。ストリームはrhel8(dnf module list実行時に[d]が付いている方)。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/package_manifest/AppStream-repository

 

この中にpodman-dockerというものがある。RedHatが用意したdockerの代替品で、8からサポートしなくなった(extraリポジトリからなくした)のはこれのためらしい。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index

RedHatがこっちをサポートするというのであれば、こちらを入れてみる。

まずはもとの状態に戻す。

dnf module enable container-tools

dnf config-manager --disable docker-ce-stable

 どうでも良いけど、dnf config-manager --disableを実行したら、repoファイル内の空白行が全部消えるので、嫌な人はファイルを直接編集する。あるいはファイルを削除する。

 

RedHatのドキュメントの通り、まずcontainer-toolsモジュールをインストールする。

# dnf module install container-tools
エラー:
問題: conflicting requests
- nothing provides python3-psutil needed by python-podman-api-1.2.0-0.2.gitd0a45fe.module_el8.1.0+298+41f9343a.noarch
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、 最適候補のパッケージのみを使用しないでください)

python3-psutilがないといわれる。今度はexcludedではなく実物がないらしい。

RHEL8のpython38モジュールに含まれるそうだが、(確認した時点で)CentOS8ではpython27, python36モジュールしかなかったので、別のところから取得する。CentOS8はepelリポジトリから取得する(extraリポジトリインストーラがある)。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/package_manifest/AppStream-repository

 

# dnf install epel-release

# dnf module install container-tools
========================================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
========================================================================================================================
アップグレード:
audit x86_64 3.0-0.13.20190507gitf58ec40.el8 BaseOS 252 k
audit-libs x86_64 3.0-0.13.20190507gitf58ec40.el8 BaseOS 116 k
policycoreutils x86_64 2.9-3.el8_1.1 BaseOS 377 k
group/moduleパッケージをインストール:
buildah x86_64 1.11.6-6.module_el8.1.0+298+41f9343a AppStream 8.5 M
cockpit-podman noarch 11-1.module_el8.1.0+298+41f9343a AppStream 1.0 M
conmon x86_64 2:2.0.6-1.module_el8.1.0+298+41f9343a AppStream 37 k
container-selinux noarch 2:2.124.0-1.module_el8.1.0+298+41f9343a AppStream 47 k
containernetworking-plugins x86_64 0.8.3-4.module_el8.1.0+298+41f9343a AppStream 20 M
fuse-overlayfs x86_64 0.7.2-5.module_el8.1.0+298+41f9343a AppStream 60 k
podman x86_64 1.6.4-4.module_el8.1.0+298+41f9343a AppStream 12 M
python-podman-api noarch 1.2.0-0.2.gitd0a45fe.module_el8.1.0+298+41f9343a AppStream 43 k
runc x86_64 1.0.0-64.rc9.module_el8.1.0+298+41f9343a AppStream 2.6 M
skopeo x86_64 1:0.1.40-8.module_el8.1.0+298+41f9343a AppStream 5.8 M
slirp4netns x86_64 0.4.2-3.git21fdece.module_el8.1.0+298+41f9343a AppStream 88 k
toolbox x86_64 0.0.4-1.module_el8.1.0+293+ad8ef41f AppStream 15 k
udica noarch 0.2.1-2.module_el8.1.0+298+41f9343a AppStream 48 k
依存関係のインストール:
containers-common x86_64 1:0.1.40-8.module_el8.1.0+298+41f9343a AppStream 49 k
criu x86_64 3.12-9.el8 AppStream 482 k
libnet x86_64 1.1.6-15.el8 AppStream 67 k
ostree-libs x86_64 2019.2-1.el8 AppStream 391 k
podman-manpages noarch 1.6.4-4.module_el8.1.0+298+41f9343a AppStream 176 k
protobuf-c x86_64 1.3.0-4.el8 AppStream 37 k
python3-cairo x86_64 1.16.3-6.el8 AppStream 90 k
python3-gobject x86_64 3.28.3-1.el8 AppStream 25 k
python3-pip noarch 9.0.3-15.el8 AppStream 19 k
python3-systemd x86_64 234-8.el8 AppStream 81 k
python36 x86_64 3.6.8-2.module_el8.1.0+245+c39af44f AppStream 19 k
setroubleshoot-plugins noarch 3.3.10-3.el8 AppStream 366 k
checkpolicy x86_64 2.9-1.el8 BaseOS 348 k
cockpit-bridge x86_64 196.3-1.el8 BaseOS 606 k
cockpit-system noarch 196.3-1.el8 BaseOS 1.6 M
fuse3-libs x86_64 3.2.1-12.el8 BaseOS 94 k
libvarlink x86_64 18-3.el8 BaseOS 44 k
policycoreutils-python-utils noarch 2.9-3.el8_1.1 BaseOS 250 k
python3-audit x86_64 3.0-0.13.20190507gitf58ec40.el8 BaseOS 85 k
python3-libsemanage x86_64 2.9-1.el8 BaseOS 127 k
python3-policycoreutils noarch 2.9-3.el8_1.1 BaseOS 2.2 M
python3-setools x86_64 4.2.2-1.el8 BaseOS 600 k
python3-setuptools noarch 39.2.0-5.el8 BaseOS 162 k
python3-psutil x86_64 5.6.3-5.el8 epel 396 k
弱い依存関係のインストール:
setroubleshoot-server x86_64 3.3.20-2.el8 AppStream 397 k
モジュールプロファイルのインストール:
container-tools/common
モジュールストリームの有効化:
python36 3.6

 メインのpodmanをインストールする。

# dnf install podman-docker
========================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
========================================================================================================================
インストール:
podman-docker noarch 1.6.4-4.module_el8.1.0+298+41f9343a AppStream 35 k

トランザクションの概要
========================================================================================================================

 

動作確認:参考 https://tech-lab.sios.jp/archives/16269

# podman run docker.io/hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

 

# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcf4a6a6b136 docker.io/library/hello-world:latest /hello 8 minutes ago Exited (0) 8 minutes ago serene_cori

 

# podman rm serene_cori
fcf4a6a6b136f2294b438a9c811dd3f6c8ec077d5e654ea33270d5b2cd274d35

 

# docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/hello-world latest bf756fb1ae65 4 months ago 20 kB

 

# docker rmi bf756fb1ae65
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Untagged: docker.io/library/hello-world:latest
Deleted: bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b

podmanをインストールするとdockerコマンドが使えるようになるが、内部でpodmanコマンドを実行している(シンボリックリンクではない)。

# cat /usr/bin/docker
#!/bin/sh
[ -f /etc/containers/nodocker ] || \
echo "Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg." >&2
exec /usr/bin/podman "$@"

 

Apache archivaをMavenCentralのプロキシリポジトリとして利用する

環境 

CentOS7

archiva2.2.4 

gradle6.0

 

http://archiva.apache.org/download.cgi 

Standaloneを利用する。

curl -O https://ftp.riken.jp/net/apache/archiva/2.2.4/binaries/apache-archiva-2.2.4-bin.tar.gz

tar zxf apache-archiva-2.2.4-bin.tar.gz

apache-archiva-2.2.4/bin/archiva start

https://archiva.apache.org/docs/2.2.4/quick-start.html

http://hostname:8080/ にアクセスして、adminユーザーのパスワード設定をする。

build.gradleのrepositoriesをarchivaに書き換える。デフォルトで認証なしで使える。

maven{ url "http://hostname:8080/repository/internal" }

ビルドツールを解さず、事前にキャッシュする場合

http://hostname:8080/repository/internal/junit/junit/3.8.1/junit-3.8.1.jar

 

Gradle Flywayプラグイン

試した環境

java11

gradle6.0

flyway6.3.3

mysql8.0.19

 

build.gradle

plugins {

  id 'java-library'

  id 'org.flywaydb.flyway' version '6.3.3'

}
repositories {

  mavenCentral()

}

dependencies {
  implementation 'mysql:mysql-connector-java:8.0.19'
}
flyway {

  url = 'jdbc:mysql://${host}:3306/${schema}'

  user = '${user}'

  password = '${password}'

  //locations = ['filesystem:src/main/resources/db/migration'] //default

  //sqlMigrationPrefix = 'V' //default

  //sqlMigrationSeparator = '__' //default

  //sqlMigrationSuffixes = '.sql' //default

}

src/main/resources/db/migration/V1.0.0__create_member.sql を用意してタスクを実行した場合

  • flywayMigrate

 Schema version: 1.0.0
 +-----------+---------+---------------+------+---------------------+---------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+---------------+------+---------------------+---------+
| Versioned | 1.0.0 | create member | SQL | 2020-04-17 11:43:27 | Success |
+-----------+---------+---------------+------+---------------------+---------+

  • flywayMigrate flywayBaseline

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':flywayBaseline'.
> Error occurred while executing flywayBaseline
Unable to baseline schema history table `work`.`flyway_schema_history` as it already contains migrations

  • flywayBasline

Schema version: 1
+----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2020-04-17 11:44:59 | Baseline |
+----------+---------+-----------------------+----------+---------------------+----------+

  • flywayBaseline flywayMigrate

Schema version: 1
+----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2020-04-17 11:44:59 | Baseline |
+----------+---------+-----------------------+----------+---------------------+----------+

 

src/main/resources/db/migration/V1.0.1__create_member.sql を用意してタスクを実行した場合

  • flywayMigrate

Schema version: 1.0.1
+-----------+---------+---------------+------+---------------------+---------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+---------------+------+---------------------+---------+
| Versioned | 1.0.1 | create member | SQL | 2020-04-17 11:48:16 | Success |
+-----------+---------+---------------+------+---------------------+---------+

  • flywayMigrate flywayBaseline

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':flywayBaseline'.
> Error occurred while executing flywayBaseline
Unable to baseline schema history table `work`.`flyway_schema_history` as it already contains migrations

  • flywayBaseline 

Schema version: 1
+-----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2020-04-17 11:50:10 | Baseline |
| Versioned | 1.0.1 | create member | SQL | | Pending |
+-----------+---------+-----------------------+----------+---------------------+----------+

  • flywayBaseline flywayMigrate

Schema version: 1.0.1
+-----------+---------+-----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------+
| | 1 | << Flyway Baseline >> | BASELINE | 2020-04-17 11:50:10 | Baseline |
| Versioned | 1.0.1 | create member | SQL | 2020-04-17 11:51:01 | Success |
+-----------+---------+-----------------------+----------+---------------------+----------+

src/main/resources/db/migration/V1.0.1__create_member.sql を用意して、build.gradleにflyway.baselineVersion=2を追加して、flywayMigrateタスクを実行した場合、SQLは実行されない。

Schema version: 2
+-----------+---------+-----------------------+----------+---------------------+----------------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+-----------------------+----------+---------------------+----------------+
| Versioned | 1.0.1 | create member | SQL | | Below Baseline |
| | 2 | << Flyway Baseline >> | BASELINE | 2020-04-17 13:13:22 | Baseline |
+-----------+---------+-----------------------+----------+---------------------+----------------+

 

追記

build.gradleにパスワードとか書くのが嫌なら、gradle.propertiesにflyway.passwordで書く。url, user, baselineVersionなども設定可能。

 

参考

https://flywaydb.org/documentation/gradle/

VMWare vSphere Hypervisor(ESXi)のダウンロード

入手先を迷ったので記録として。


https://my.vmware.com/ja/group/vmware/evalcenter?p=free-esxi6

https://my.vmware.com/ja/group/vmware/evalcenter?p=free-esxi7

 

ユーザー登録とアクティベーション登録(60日の試用期間)が必要。

 

古いVMWare WorkStationしか持っていないので、ゲストOSの選択でESXi7が出ない。別バージョンを選択したり、「その他」を選択したりして無理やりインストールを始めると「No Network Adapters」というエラーメッセージが表示される。NICドライバを認識しないとか。

https://souiunogaii.hatenablog.com/entry/ESXi-NoNetworkAdapters

 

7の評価目的ではないので、6.7をダウンロードした。VMWare WorkStationでゲストOSの選択でESXi6を選んでインストール完了した。インストール後に表示する

URLにアクセスすれば管理画面にアクセスできる(vSphere clientのダウンロードは不要)。

 

お遊び環境をつくる(CentOS8)

yumコマンド(Python2)がdnfコマンド(Python3)に変わった。yumはdnfにリンクされている(正確には、yumとdnfはdnf-3にリンクしている)のでyumコマンドを使い続けられるが、慣れるためにdnfコマンドを使う。

 

CentOS8マシンの作成はVMWare Workstationを利用しているが、まずここで躓く。マシンの設定画面を開くと、「CD/DVD」が2つあり、一つ目が「autoinst.iso」、二つ目がOSのISOになっているため、一つ目を削除しなければ、インストールできない。

 

#java11
yum install -y java-11
java-11のリポジトリがCentOS7ではupdatesだったが、AppStreamになった
/etc/yum.repos.d/CentOS-Base.repoを見ると、baseだけになっており、CentOS-AppStream.repoやCentOS-Extras.repoなどが追加された

 

#tomcat9.0.33
curl https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.33/bin/apache-tomcat-9.0.33.tar.gz | tar zx -C /usr/local/src
ln -s /usr/local/src/apache-tomcat-9.0.33 /usr/local/tomcat
vi /etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
User=root
Group=root
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecRestart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

chmod ug+x /etc/systemd/system/tomcat.service
systemctl enable tomcat

vi /usr/lib/firewalld/services/tomcat.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Apache Tomcat</short>
  <description>Apache Tomcat</description>
  <port protocol="tcp" port="8080"/>
</service>

firewall-cmd --add-service=tomcat --zone=public --permanent
firewall-cmd --reload

vi /usr/local/tomcat/conf/tomcat-users.xml

<?xml version="1.0" encoding="UTF-8"?>
  <tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="****" roles="manager-gui,admin-gui"/>
</tomcat-users>

次の2ファイルの該当箇所をコメントアウトする(可能ならIPに書き換える)
/usr/local/tomcat/webapps/manager/META-INF/context.xml
/usr/local/tomcat/webapps/host-manager/META-INF/context.xml

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

systemctl start tomcat

 

#jenkins2.230
curl http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/war/2.230/jenkins.war -o /usr/local/tomcat/webapps/jenkins.war

 

#mysql8.0.19
dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
yum module disable mysql
dnf install mysql-server
yum module enable mysql

/var/log/mysqld.logで初期パスワードを確認して変更する
mysql -uroot -p
set password='****'

 

※AppStreamにmysql-server-8.0.17-3.module_el8.0.0+181+899d6349があり、AppStreamが優先される。DNFにはpriorityプラグインが同梱されているので、repoファイルにpriority=1~98(デフォルト99)を記述すれば良いと思ったが、AppStreamが優先された。
※AppStreamとmysql80-communityで依存関係が異なる

mysql関連パッケージの違い(名前違いを含む)
・ AppStreamからインストールした場合(mysqlモジュール)
mysql-server
mecab
mysql
mysql-common
mysql-errmsg

・mysql80-communityからインストールした場合
mysql-community-server
mysql-community-client
mysql-community-common
mysql-community-libs

 依存関係の違い
・ AppStreamからインストールした場合
mariadb-connector-c-config
protobuf-lite
checkpolicy
policycoreutils-python-utils
python3-audit
python3-libsemanage
python3-policycoreutils
python3-setools
・mysql80-communityからインストールした場合
net-tools

 

※参考: dnf module info mysql

Name : mysql
Stream : 8.0 [d][a]
Version : 8000020191007200700
Context : 55190bc5
Architecture : x86_64
Profiles : client, server [d]
Default profiles : server
Repo : AppStream
Summary : MySQL Module
Description : MySQL is a multi-user, multi-threaded SQL database server. MySQL is a client/server implementation consisting of a server daemon (mysqld) and many different client programs and libraries. The base package contains the standard MySQL client programs and generic MySQL files.
Artifacts : mecab-0:0.996-1.module_el8.0.0+41+ca30bab6.9.src
: mecab-0:0.996-1.module_el8.0.0+41+ca30bab6.9.x86_64
: mecab-debuginfo-0:0.996-1.module_el8.0.0+41+ca30bab6.9.x86_64
: mecab-debugsource-0:0.996-1.module_el8.0.0+41+ca30bab6.9.x86_64
: mecab-ipadic-0:2.7.0.20070801-16.module_el8.0.0+41+ca30bab6.src
: mecab-ipadic-0:2.7.0.20070801-16.module_el8.0.0+41+ca30bab6.x86_64
: mecab-ipadic-EUCJP-0:2.7.0.20070801-16.module_el8.0.0+41+ca30bab6.x86_64
: mysql-0:8.0.17-3.module_el8.0.0+181+899d6349.src
: mysql-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-common-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-debuginfo-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-debugsource-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-devel-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-devel-debuginfo-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-errmsg-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-libs-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-libs-debuginfo-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-server-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-server-debuginfo-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-test-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64
: mysql-test-debuginfo-0:8.0.17-3.module_el8.0.0+181+899d6349.x86_64

 

※mysql80-communityリポジトリを使うとnet-toolsがインストールされるけど要らないのでは(ただしifconfig他は最初からインストールされている。廃止予定とは)

 

※CentOS8用のmysqlは8のみ、mysql5.7はCentOS7までしか提供していない
http://repo.mysql.com/yum/mysql-5.7-community/el/
mysql80-communityレポジトリのbaseurlのOSバージョンを7に書き換えてインストール&起動は確認したが、どんな問題が発生するかわからないので、ソースからビルドするか、だれかビルドして提供している人を探すか
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

 

※どうでもいいけど、CentOS7+mysql5.7の時はmysqld.serviceファイルに「Alias=mysql.service」があったけど、なくなった

 

 

お遊び環境をつくる(CentOS7)

yum install -y yum-utils

#jdk1.8.0-242
yum install -y jdk

 

#tomcat9.0.33
cd /tmp
curl https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.33/bin/apache-tomcat-9.0.33.tar.gz -O
tar zxf apache-tomcat-9.0.33.tar.gz -C /usr/local/src
ln -s /usr/local/src/apache-tomcat-9.0.33/ /usr/local/tomcat
vi /etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
User=root
Group=root
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecRestart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

chmod ug+x /etc/systemd/system/tomcat.service
systemctl enable tomcat

vi /usr/lib/firewalld/services/tomcat.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Apache Tomcat</short>
<description>Apache Tomcat</description>
<port protocol="tcp" port="8080"/>
</service>

firewall-cmd --add-service=tomcat --zone=public --permanent
firewall-cmd --reload
もしくは、
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

vi /usr/local/tomcat/conf/tomcat-users.xml

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="****" roles="manager-gui,admin-gui"/>
</tomcat-users>

次の2ファイルの該当箇所をコメントアウトする(可能ならIPに書き換える)
/usr/local/tomcat/webapps/manager/META-INF/context.xml
/usr/local/tomcat/webapps/host-manager/META-INF/context.xml

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

systemctl start tomcat

 

#jenkins 2.230
cd /usr/local/tomcat/webapps
curl http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/war/2.230/jenkins.war -O
ミラーサイトcurl http://mirrors.jenkins.io/war/latest/jenkins.war で確認

あるいは他に8080ポートを利用しないのであれば、パッケージからインストールする
curl https://pkg.jenkins.io/redhat/jenkins.repo -o /etc/yum.repos.d/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
systemctl start jenkins

 

#mysql8.0.19
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-server
systemctl start mysqld
初期パスワードを /var/log/mysqld.log で確認して、mysqlに接続する
set password = '****';
パスワードポリシーに限らず設定したい場合、show variables like 'validate_password%'; で項目を確認する
set global validate_password.policy=LOW;
set password = '****';
set global validate_password.policy=MEDIUM;
※ポリシーを戻さなくても再起動したら戻る
ポリシーを戻したくない場合は、/etc/my.cnfの[mysqld]ブロックに次のを追加して、再起動する
validate_password.policy=LOW

 

#そのほか
yum install -y git

 

 

感想

お遊び環境なので、すべて最新にしたくて、Tomcat10を入れようとしたが、Jenkinsが起動しなかった。

catalina.out

情報 [http-nio-8080-exec-56] org.apache.jasper.servlet.TldScanner.scanJars 少なくとも1つのJARが、まだTLDを含んでいないTLDについてスキャンされました。 スキャンしたが、そこにTLDが見つからなかったJARの完全なリストについ ては、このロガーのデバッグログを有効にしてください。 スキャン中に不要なJARをスキップすると、起動時間とJSPコンパイル時間が改善されます。
重大 [http-nio-8080-exec-56] org.apache.catalina.core.StandardContext.startInternal 1つまたは複数のリスナーが開始に失敗しました。 完全な詳細は適切なコンテナログファイルにあります。
重大 [http-nio-8080-exec-56] org.apache.catalina.core.StandardContext.startInternal 以前のエラー のためにコンテキストの起動が失敗しました [/jenkins]

Tomcat10はJakartaEE9(旧JavaEE)対応で、Servletがjavax.servletからjakarta.servletになって、変換が必要だとか。

https://tomcat.apache.org/

The Apache Tomcat Project is proud to announce the release of version 10.0.0-M3 of Apache Tomcat. This release is a milestone release and is targeted at Jakarta EE 9.

Users of Tomcat 10 onwards should be aware that, as a result of the move from Java EE to Jakarta EE as part of the transfer of Java EE to the Eclipse Foundation, the primary package for all implemented APIs has changed from javax.* to jakarta.*. This will almost certainly require code changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later. A migration tool is under development to aid this process.