Oracle Linux 9でwordpressサーバをたてる、という記事を2022年9月に書き始めたのですが、Oracle Linux 9用のEPELレポジトリにfail2banが含まれていなかっため、sshへの簡単な対策が行えないため書くのを中断していました。
2023年7月25日の更新でfail2banが収録されたようなので、改めて手順を作成してみます
記事修正履歴
2024/05/07: 4月下旬から常時稼働させてみての修正を追加開始
手順2-4 kdump無効化 を追加
手順14-1 php-fpm起動数制限 を追加
手順14-2 swapfile追加
準備1: Oracle Cloud用手順
準備1-1: IPv6アドレス割り当て:Oracle Cloudコンソール側
Oracle Cloudのコンソールを開いて、インスタンスにIPv6アドレスを割り当てます。
また、割り当てられたIPv6アドレスを確認します。
準備1-2: インスタンス側操作
Oracle Linux 9のイメージではIPv6が有効化されていたので、特に設定する必要はありませんでした。
準備2: 一般的な前準備
準備2-1: 日本時間にする
日本に住んでいる場合、日本時間表記の方が使いやすいので、OSも日本時間表示に設定する。
$ sudo timedatectl set-timezone Japan
$
準備2-2: パッケージを最新にアップデートする
現時点でインストール済みパッケージを最新にします。
Oracle Linux 9ではyum updateではなくdnf updateとなります。アップデート後は再起動します。(yumコマンドでも動きます)
$ sudo dnf update -y
<略>
$ sudo reboot
手順2-3:日本語Locale対応
ja_JP.UTF-8など日本語Localeで設定した際、「Failed to set locale, defaulting to C.UTF-8」というメッセージが出力される場合があります。
その場合は日本語Localeを追加インストールします。
$ sudo dnf install langpacks-ja glibc-langpack-ja
<略>
$
手順2-4:kdump無効化
(2024/05/07追加:OOK Killerが発動される率が高いので、少しでも影響を減らすために設定)
メモリが1GBしかないので、kdump.serviceの実行に失敗したりしている。
$ systemctl status kdump |cat
× kdump.service - Crash recovery kernel arming
Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Tue 2024-05-07 09:22:57 JST; 5min ago
Process: 2435 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
Main PID: 2435 (code=exited, status=1/FAILURE)
CPU: 114ms
$
ダンプとっても使わないし、エラーとならないようkdumpを無効化してしまいます。
$ sudo systemctl disable kdump.service
Removed "/etc/systemd/system/multi-user.target.wants/kdump.service".
$
手順3: EPELレポジトリの追加
EPELレポジトリを使うので、使用できるようにします。
Oracle Linux 8と異なり、Oracle-Linux-9.2-2023.08.31-0 ではOracle CloudのOS管理下にレポジトリ管理が委託されていませんでした。
手順3-1:レポジトリの状態を確認
現状のレポジトリ設定状況を「sudo dnf repolist –all」を実行して確認します。
出力内に「This system is receiving updates from OSMS server.」という文字がなければこの手順で実行できます。
$ sudo dnf repolist --all
repo id repo name status
ol9_MODRHCK Latest RHCK with fixes from Oracle for Ora disabled
ol9_RDMA Oracle Linux 9 (x86_64) RDMA disabled
ol9_UEKR7 Oracle Linux 9 UEK Release 7 (x86_64) enabled
ol9_addons Oracle Linux 9 Addons (x86_64) enabled
ol9_appstream Oracle Linux 9 Application Stream Packages enabled
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64) enabled
ol9_codeready_builder Oracle Linux 9 CodeReady Builder (x86_64) disabled
ol9_developer Oracle Linux 9 Development Packages (x86_6 disabled
ol9_developer_EPEL Oracle Linux 9 EPEL Packages for Developme disabled
ol9_developer_UEKR7 Developer Preview of UEK Release 7 (x86_64 disabled
ol9_developer_kvm_utils Oracle Linux 9 KVM Utilities for Developme disabled
ol9_distro_builder Oracle Linux 9 Distro Builder (x86_64) - ( disabled
ol9_ksplice Ksplice for Oracle Linux 9 (x86_64) enabled
ol9_kvm_utils Oracle Linux 9 KVM Utilities (x86_64) disabled
ol9_oci_included Oracle Linux 9 OCI Included Packages (x86_ enabled
ol9_u0_baseos_base Oracle Linux 9 BaseOS GA (x86_64) disabled
ol9_u1_baseos_base Oracle Linux 9.1 BaseOS (x86_64) disabled
ol9_u2_baseos_base Oracle Linux 9.2 BaseOS (x86_64) disabled
ol9_x86_64_userspace_ksplice Ksplice aware userspace packages for Oracl disabled
$
有効化するために「sudo dnf config-manager –set-enabled ol9_developer_EPEL」を実行します。
$ sudo dnf config-manager --set-enabled ol9_developer_EPEL
$ sudo dnf repolist --all
repo id repo name status
ol9_MODRHCK Latest RHCK with fixes from Oracle for Ora disabled
ol9_RDMA Oracle Linux 9 (x86_64) RDMA disabled
ol9_UEKR7 Oracle Linux 9 UEK Release 7 (x86_64) enabled
ol9_addons Oracle Linux 9 Addons (x86_64) enabled
ol9_appstream Oracle Linux 9 Application Stream Packages enabled
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64) enabled
ol9_codeready_builder Oracle Linux 9 CodeReady Builder (x86_64) disabled
ol9_developer Oracle Linux 9 Development Packages (x86_6 disabled
ol9_developer_EPEL Oracle Linux 9 EPEL Packages for Developme enabled
ol9_developer_UEKR7 Developer Preview of UEK Release 7 (x86_64 disabled
ol9_developer_kvm_utils Oracle Linux 9 KVM Utilities for Developme disabled
ol9_distro_builder Oracle Linux 9 Distro Builder (x86_64) - ( disabled
ol9_ksplice Ksplice for Oracle Linux 9 (x86_64) enabled
ol9_kvm_utils Oracle Linux 9 KVM Utilities (x86_64) disabled
ol9_oci_included Oracle Linux 9 OCI Included Packages (x86_ enabled
ol9_u0_baseos_base Oracle Linux 9 BaseOS GA (x86_64) disabled
ol9_u1_baseos_base Oracle Linux 9.1 BaseOS (x86_64) disabled
ol9_u2_baseos_base Oracle Linux 9.2 BaseOS (x86_64) disabled
ol9_x86_64_userspace_ksplice Ksplice aware userspace packages for Oracl disabled
$
手順4: インターネット公開用設定
手順4-1: fail2ban導入
公開サーバは各種のアタックにさらされます。管理用sshポートにもやってきます。
多少なりとも軽減するためにEPELレポジトリ収録のfail2banを使用します。
$ sudo dnf install fail2ban -y
<略>
$
カスタム設定は/etc/fail2ban/jail.local に対して行います。
$ sudo vi /etc/fail2ban/jail.local
$ cat /etc/fail2ban/jail.local
[DEFAULT]
# 86400秒=24時間以内に5回不審なアクセスがあったら24時間BAN
bantime = 86400
findtime = 86400
maxretry = 5
# 259200秒=3日以内に5回不審なアクセスがあったら3日間BAN
#bantime = 259200
#findtime = 259200
#maxretry = 5
# 除外IP
ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
[sshd]
enabled = true
banaction = firewallcmd-ipset
$
上記設定では24時間BANにしていますが、まぁ、3日BANでもかまわないとは思います。(本当に間違えた場合に困るのでほどほどにしておくとよい)
fail2banをOS起動時に実行する設定と、今すぐfail2banを起動するコマンドを実行します。
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
$
以降、アタックがあると /var/log/fail2ban.log にログが出ます。
手順4-2: Webサーバ用ポート公開設定
この段階では、dhcpv6-clientとsshのみが許可されています。
Webサーバ公開用にhttp(ポート80)とhttps(ポート443)を追加します。
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$
$ sudo firewall-cmd --permanent --add-service=http
success
$ sudo firewall-cmd --permanent --add-service=https
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$
手順5: php 追加
Oracle Linux 9環境では、moduleという形で複数バージョンのソフトウェアが提供されている場合があります。
phpに関してどのようなものがあるのかを「dnf module list | grep php」を実行して確認します。
$ dnf module list | grep php
php 8.1 common [d], devel, minimal PHP scripting language
$
Oracle Linux 9.2では php 8.1だけが提供されているようなので、phpとだけ指定してインストールします。
$ sudo dnf install php -y
Last metadata expiration check: 0:18:54 ago on Tue 12 Sep 2023 11:13:37 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
php x86_64 8.0.27-1.el9_1 ol9_appstream 10 k
Installing dependencies:
apr x86_64 1.7.0-11.el9 ol9_appstream 132 k
apr-util x86_64 1.6.1-20.el9_2.1 ol9_appstream 98 k
apr-util-bdb x86_64 1.6.1-20.el9_2.1 ol9_appstream 12 k
httpd-core x86_64 2.4.53-11.0.1.el9_2.5 ol9_appstream 1.8 M
httpd-filesystem noarch 2.4.53-11.0.1.el9_2.5 ol9_appstream 14 k
httpd-tools x86_64 2.4.53-11.0.1.el9_2.5 ol9_appstream 96 k
nginx-filesystem noarch 1:1.20.1-14.0.1.el9 ol9_appstream 11 k
oracle-logos-httpd noarch 90.2-1.0.2.el9 ol9_baseos_latest 37 k
php-common x86_64 8.0.27-1.el9_1 ol9_appstream 716 k
Installing weak dependencies:
apr-util-openssl x86_64 1.6.1-20.el9_2.1 ol9_appstream 14 k
httpd x86_64 2.4.53-11.0.1.el9_2.5 ol9_appstream 67 k
mod_http2 x86_64 1.15.19-4.el9_2.4 ol9_appstream 157 k
mod_lua x86_64 2.4.53-11.0.1.el9_2.5 ol9_appstream 61 k
php-cli x86_64 8.0.27-1.el9_1 ol9_appstream 3.1 M
php-fpm x86_64 8.0.27-1.el9_1 ol9_appstream 1.6 M
php-mbstring x86_64 8.0.27-1.el9_1 ol9_appstream 470 k
php-opcache x86_64 8.0.27-1.el9_1 ol9_appstream 512 k
php-pdo x86_64 8.0.27-1.el9_1 ol9_appstream 90 k
php-xml x86_64 8.0.27-1.el9_1 ol9_appstream 144 k
Transaction Summary
================================================================================
Install 20 Packages
<略>
php-pdo-8.0.27-1.el9_1.x86_64
php-xml-8.0.27-1.el9_1.x86_64
Complete!
$
手順6: MySQL設定編
Oralce Linux 9.2ではMySQL 8.0.32 か mariadb 10.5.16が提供されています。
とりあえず、Oracle直営なのでMySQLを使っておきます。
$ sudo dnf install mysql-server -y
Last metadata expiration check: 0:23:36 ago on Tue 12 Sep 2023 11:13:37 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
mysql-server x86_64 8.0.32-1.el9_2 ol9_appstream 17 M
Installing dependencies:
mariadb-connector-c-config noarch 3.2.6-1.el9_0 ol9_appstream 9.7 k
mecab x86_64 0.996-3.el9.3 ol9_appstream 384 k
mysql x86_64 8.0.32-1.el9_2 ol9_appstream 2.8 M
mysql-common x86_64 8.0.32-1.el9_2 ol9_appstream 103 k
mysql-errmsg x86_64 8.0.32-1.el9_2 ol9_appstream 513 k
mysql-selinux noarch 1.0.5-1.el9_0 ol9_appstream 35 k
protobuf-lite x86_64 3.14.0-13.el9 ol9_appstream 233 k
Transaction Summary
================================================================================
Install 8 Packages
<略>
Installed:
mariadb-connector-c-config-3.2.6-1.el9_0.noarch
mecab-0.996-3.el9.3.x86_64
mysql-8.0.32-1.el9_2.x86_64
mysql-common-8.0.32-1.el9_2.x86_64
mysql-errmsg-8.0.32-1.el9_2.x86_64
mysql-selinux-1.0.5-1.el9_0.noarch
mysql-server-8.0.32-1.el9_2.x86_64
protobuf-lite-3.14.0-13.el9.x86_64
Complete!
$
mysqldを自動起動する設定とします。
$ sudo systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
$
mysqldを起動します。
$ sudo systemctl start mysqld
$
WordPress用データベースを作成します。
MySQL 8におけるデータベースユーザ作成と権限の割り当てが従来の「grant all on DB名.* to wordpress@localhost identified by ‘パスワード’;」という一文から、「create user ~」と「grant ~」の2つに分かれている点に注意が必要です。
$ sudo mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 Source distribution
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
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> create database DB名 character set utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> create user wordpress@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all privileges on DB名.* to wordpress@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
$
手順7: Webサーバ設定
手順7-1: httpdインストール
httpdをインストールします。
Oracle Linux 9.2ではWebサーバとして Apache(httpd) 2.4.53 、nginx 1.20.1、nginx 1.22.1が使えるが、apacheを使う。
$ sudo dnf install httpd -y
Last metadata expiration check: 0:05:50 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Package httpd-2.4.53-11.0.1.el9_2.5.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
$
って・・・よくみたらphpインストール時にインストール済みでした。
次で設定変更をするので、この段階ではhttpdを起動しません。
OS起動時に自動起動する設定だけを行います。
$ sudo systemctl enable httpd
$
手順7-2: dehydratedによるLet’s Encrypt導入
Let’s EncryptによるSSL証明書導入はcertbotを使うのが一般的ではあるのだが、python環境とあわせてパッケージサイズが大きいので、コンパクトでEPELにも収録されているdehydratedを使用する。
$ sudo dnf install dehydrated -y
Last metadata expiration check: 0:07:19 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
dehydrated noarch 0.7.1-1.el9 ol9_developer_EPEL 154 k
Installing dependencies:
s-nail x86_64 14.9.22-6.el9 ol9_appstream 626 k
Transaction Summary
================================================================================
Install 2 Packages
<略>
Installed:
dehydrated-0.7.1-1.el9.noarch s-nail-14.9.22-6.el9.x86_64
Complete!
$
dehydratedによるSSL証明書取得処理には /var/www/dehydrated が使用されるためディレクトリを作成します。
$ sudo mkdir /var/www/dehydrated
$
http://~/.well-known/acme-challenge でアクセスした時に上記ディレクトリが開くようApacheの設定を /etc/httpd/conf.d/dehydrated.conf として作成します。(sudo vi /etc/httpd/conf.d/dehydrated.conf )
$ sudo vi /etc/httpd/conf.d/dehydrated.conf
$ cat /etc/httpd/conf.d/dehydrated.conf
Alias /.well-known/acme-challenge /var/www/dehydrated
<Directory /var/www/dehydrated/>
</Directory>
$
httpdを起動します
$ sudo systemctl start httpd
$
SSL証明書を発行するホスト名を /etc/dehydrated/domains.txt に記載する。(sudo vi /etc/dehydrated/domains.txt)
1行に複数のホスト名を記載するとaliasになります。
$ sudo vi /etc/dehydrated/domains.txt
$ sudo cat /etc/dehydrated/domains.txt
ホスト1名.ドメイン名 ホスト2名.ドメイン名
$
登録操作を開始します。
$ sudo dehydrated --register
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
To use dehydrated with this certificate authority you have to agree to their terms of service which you can find here: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
To accept these terms of service run "/bin/dehydrated --register --accept-terms".
$ sudo /bin/dehydrated --register --accept-terms
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
+ Generating account key...
+ Registering account key with ACME server...
+ Fetching account URL...
+ Done!
$
初回のSSL証明書発行処理を実行します。
$ sudo dehydrated --cron
# INFO: Using main config file /etc/dehydrated/config
# INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
+ Creating chain cache directory /etc/dehydrated/chains
Processing ホスト1名.ドメイン名 with alternative names: ホスト2名.ドメイン名
+ Creating new directory /etc/dehydrated/certs/ホスト1名.ドメイン名 ...
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting new certificate order from CA...
+ Received 2 authorizations URLs from the CA
+ Handling authorization for ホスト1名.ドメイン名
+ Handling authorization for ホスト2名.ドメイン名
+ 2 pending challenge(s)
+ Deploying challenge tokens...
+ Responding to challenge for ホスト1名.ドメイン名 authorization...
+ Challenge is valid!
+ Responding to challenge for ホスト2名.ドメイン名 authorization...
+ Challenge is valid!
+ Cleaning challenge tokens...
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!
+ Running automatic cleanup
$
手順7-3: WebサーバへのSSL証明書設定
まず、httpdにmod_sslを追加します。
$ sudo dnf install mod_ssl -y
Last metadata expiration check: 0:13:55 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
mod_ssl x86_64 1:2.4.53-11.0.1.el9_2.5 ol9_appstream 119 k
Transaction Summary
================================================================================
Install 1 Package
<略>
$
標準の /etc/httpd/conf.d/ssl.conf は使わず、Mozilla SSL Configuration Generatorベースの設定を /etc/httpd/conf.d/ssl-mozilla.conf として作成します。(なお、ssl.conf には”Listen 443 https”設定もあるので、そのままにしています)
$ sudo vi /etc/httpd/conf.d/ssl-mozilla.conf
$ cat /etc/httpd/conf.d/ssl-mozilla.conf
# generated 2023-09-12, Mozilla Guideline v5.7, Apache 2.4.53, OpenSSL 3.0.7, intermediate configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.53&config=intermediate&openssl=3.0.7&guideline=5.7
# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
# curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateFile /etc/dehydrated/certs/<ホスト名>/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/<ホスト名>/privkey.pem
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
$
httpdを再起動します。
$ sudo systemctl restart httpd
$
手順8: WordPress導入
手順8-1: WordPressの基本インストール
WordPressのWebから最新版をダウンロードして、/var/www/html以下に展開します。
(日本語環境向けのlatest-ja.tar.gzファイルを使っていないのはWordpressプラグインが正常にインストールできるかを確認するためにWP Multibyte Patchを手動インストールする手順を入れているためです)
$ cd /var/www/html
$ ls
$ sudo curl -O https://wordpress.org/latest.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 22.3M 100 22.3M 0 0 17.6M 0 0:00:01 0:00:01 --:--:-- 17.6M
$ ls
latest.tar.gz
$ sudo tar xfz latest.tar.gz
$ ls -l
total 22904
-rw-r--r--. 1 root root 23447259 Sep 12 11:57 latest.tar.gz
drwxr-xr-x. 5 nobody nobody 4096 Aug 29 23:14 wordpress
$ sudo rm latest.tar.gz
$
WordPressディレクトリの所有者をWebサービスのユーザである「apache」に変更します。
$ ps -ef|grep http
root 44914 1 0 11:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 44915 44914 0 11:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 44916 44914 0 11:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 44917 44914 0 11:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 44918 44914 0 11:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
opc 45353 7003 0 11:59 pts/0 00:00:00 grep --color=auto http
$ sudo chown -R apache:apache wordpress/
$ ls -l
total 4
drwxr-xr-x. 5 apache apache 4096 Aug 29 23:14 wordpress
$
/var/www/html/wordpress をDocumentRootとするように ssl-mozilla.conf に追加して、httpdを再起動します。
$ sudo vi /etc/httpd/conf.d/ssl-mozilla.conf
$ cat /etc/httpd/conf.d/ssl-mozilla.conf
# generated 2023-09-12, Mozilla Guideline v5.7, Apache 2.4.53, OpenSSL 3.0.7, intermediate configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.53&config=intermediate&openssl=3.0.7&guideline=5.7
# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/wordpress
SSLEngine on
# curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateFile /etc/dehydrated/certs/<ホスト名>/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/<ホスト名>/privkey.pem
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
$
$ sudo systemctl restart httpd
$
手順8-2: 「missing the MySQL extension」がでる場合の手順
いまの状態でブラウザからアクセスすると、下記の表示になります。
これはphpからMySQLにアクセスするためのパッケージがインストールされていないためなので、php-mysqlndを追加して、httpdを再起動します。
$ sudo dnf install php-mysqlnd -y
Last metadata expiration check: 0:25:26 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
php-mysqlnd x86_64 8.0.27-1.el9_1 ol9_appstream 157 k
Transaction Summary
================================================================================
Install 1 Package
<略>
$ sudo systemctl restart httpd
$
WordPressの設定手順を進めると wp-config.php に書き込めない、と出ますので、「sudo vi /var/www/html/wordpress/wp-config.php」を実行し、指定された内容を記載します。
手順9: SELinux設定
手順9-1: httpdのネットワーク接続問題
一見するとここまででうまく動いているように見えます。
しかし、プラグインをインストールしようとするとエラーになります。
/var/log/audit/audit.logを確認すると下記のようなログが出ています。
type=AVC msg=audit(1622095859.957:2064): avc: denied { name_connect } for pid=8908 comm="php-fpm" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
type=AVC msg=audit(1622095868.397:2065): avc: denied { name_connect } for pid=8313 comm="php-fpm" dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
type=AVC msg=audit(1622095868.401:2066): avc: denied { name_connect } for pid=8313 comm="php-fpm" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
これはhttpd_can_network_connect という値で制御されている
現在の設定値を「sudo getsebool -a |grep httpd_can_network」で確認し、「sudo setsebool -P httpd_can_network_connect on」で有効にする
$ sudo getsebool -a |grep httpd_can_network
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
$ sudo setsebool -P httpd_can_network_connect on
$ sudo getsebool -a |grep httpd_can_network
httpd_can_network_connect --> on
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
$
この変更ではhttpdの再起動は不要。
手順9-2: php-fpmの書き込み権限問題
プラグインやテーマのインストールについては問題なくても、WordPressのアップデートが出来ない。
このときの/var/log/audit/audit.logは下記
type=AVC msg=audit(1694506911.363:1538): avc: denied { write } for pid=51364 comm="php-fpm" name="wordpress" dev="dm-0" ino=34891933 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir permissive=0
こちらは/var/www/html/wordpress に対して httpdから書き込みが行えるような SELinuxのコンテキストをつけることで解決する。
「sudo chcon -R -t httpd_sys_script_rw_t /var/www/html/wordpress」
$ ls -lZ /var/www/html/
total 4
drwxr-xr-x. 5 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Sep 12 13:14 wordpress
$ sudo chcon -R -t httpd_sys_script_rw_t /var/www/html/wordpress
$ ls -lZ /var/www/html/
total 4
drwxr-xr-x. 5 apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 4096 Sep 12 13:14 wordpress
$
手順9-3:Wordpressプラグイン追加の動作確認
WordPressプラグインがインストールできる状態になっているかを確認するために「WP Multibyte Patch」をインストールします。
これをインストールするとWordpressの設定画面([Settings]-[General])に「Site language(サイトの言語)」が追加され、「日本語」表示に切り替えることができるようになります。
手順10: WordPressで取り扱えるファイルサイズの拡大
WordPressで取り扱えるファイルは標準状態だと2MBになっている。
WordPressのドキュメントのFile Upload Sizes を見ると、これはphpの設定ファイル /etc/php.ini による制限となっている。
Oracle Linux 9の標準設定では下記の値となっている。
<略>
post_max_size = 8M
<略>
upload_max_filesize = 2M
<略>
で・・・よくある手順だと軽率に /etc/php.ini を書き換えていますが、 /etc/php.d/ 以下にファイルを追加することで、そちらの設定項目を優先させることができる機能があるため、 /etc/php.d/90-wordpress.ini に変更したい2行だけを記載したファイルを作成します。
$ sudo vi /etc/php.d/90-wordpress.ini
$ cat /etc/php.d/90-wordpress.ini
post_max_size = 100M
upload_max_filesize = 100M
$
phpの設定変更を反映させるために「sudo systemctl restart php-fpm」を実行します。
$ sudo systemctl restart php-fpm
$
手順11: WordPressのSite Health Status対応
WordPressのサイトステータスを見てみると、いくつかパッケージを要求されている。
上から順に調査
Oracle Linux 8ではimagemagickのphpモジュールはなかったが、Oracle Linux 9だとあったので「sudo dnf install php-pecl-imagick」でインストール
$ sudo dnf install php-pecl-imagick
Last metadata expiration check: 1:22:23 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
php-pecl-imagick x86_64 3.7.0-1.el9 ol9_developer_EPEL 149 k
Installing dependencies:
ImageMagick-libs x86_64 6.9.12.93-1.el9 ol9_developer_EPEL 2.6 M
LibRaw x86_64 0.20.2-5.el9 ol9_appstream 382 k
ModemManager-glib x86_64 1.20.2-1.el9 ol9_baseos_latest 334 k
adobe-mappings-cmap noarch 20171205-12.el9 ol9_appstream 2.0 M
adobe-mappings-cmap-deprecated noarch 20171205-12.el9 ol9_appstream 129 k
adobe-mappings-pdf noarch 20180407-10.el9 ol9_appstream 686 k
adwaita-cursor-theme noarch 40.1.1-3.el9 ol9_appstream 686 k
adwaita-icon-theme noarch 40.1.1-3.el9 ol9_appstream 16 M
alsa-lib x86_64 1.2.8-3.el9 ol9_appstream 586 k
at-spi2-atk x86_64 2.38.0-4.el9 ol9_appstream 92 k
at-spi2-core x86_64 2.40.3-1.el9 ol9_appstream 262 k
atk x86_64 2.36.0-5.el9 ol9_appstream 378 k
avahi-glib x86_64 0.8-12.el9_2.1 ol9_appstream 13 k
bluez-libs x86_64 5.64-2.el9 ol9_baseos_latest 83 k
bubblewrap x86_64 0.4.1-6.el9 ol9_baseos_latest 50 k
colord-libs x86_64 1.4.5-4.el9 ol9_appstream 235 k
cups-libs x86_64 1:2.3.3op2-16.el9_2.1
ol9_baseos_latest 264 k
exempi x86_64 2.6.0-0.2.20211007gite23c213.el9
ol9_appstream 531 k
exiv2-libs x86_64 0.27.5-2.el9 ol9_appstream 780 k
fdk-aac-free x86_64 2.0.0-8.el9 ol9_appstream 325 k
flac-libs x86_64 1.3.3-10.el9 ol9_appstream 226 k
flatpak-selinux noarch 1.12.7-2.el9 ol9_appstream 22 k
flatpak-session-helper x86_64 1.12.7-2.el9 ol9_appstream 80 k
fuse x86_64 2.9.9-15.el9 ol9_baseos_latest 91 k
gd x86_64 2.3.2-3.el9 ol9_appstream 132 k
gdk-pixbuf2-modules x86_64 2.42.6-3.el9 ol9_appstream 96 k
geoclue2 x86_64 2.6.0-7.el9 ol9_appstream 136 k
giflib x86_64 5.2.1-9.el9 ol9_appstream 53 k
google-droid-sans-fonts noarch 20200215-11.el9.2
ol9_appstream 2.7 M
graphene x86_64 1.10.6-2.el9 ol9_appstream 64 k
graphviz x86_64 2.44.0-25.el9 ol9_appstream 3.4 M
gsm x86_64 1.0.19-6.el9 ol9_appstream 39 k
gstreamer1 x86_64 1.18.4-4.el9 ol9_appstream 1.5 M
gstreamer1-plugins-base x86_64 1.18.4-5.el9 ol9_appstream 2.1 M
gtk-update-icon-cache x86_64 3.24.31-2.el9 ol9_appstream 34 k
gtk2 x86_64 2.24.33-8.el9 ol9_appstream 3.6 M
gtk3 x86_64 3.24.31-2.el9 ol9_appstream 5.0 M
hicolor-icon-theme noarch 0.17-13.el9 ol9_appstream 70 k
imath x86_64 3.1.2-1.el9 ol9_appstream 102 k
iso-codes noarch 4.6.0-3.el9 ol9_appstream 4.0 M
jasper-libs x86_64 2.0.28-3.el9 ol9_appstream 151 k
jbig2dec-libs x86_64 0.19-7.el9 ol9_appstream 77 k
jbigkit-libs x86_64 2.1-23.el9 ol9_appstream 58 k
lcms2 x86_64 2.12-3.el9 ol9_appstream 167 k
libICE x86_64 1.0.10-8.el9 ol9_appstream 71 k
libSM x86_64 1.2.3-10.el9 ol9_appstream 42 k
libX11-xcb x86_64 1.7.0-7.el9 ol9_appstream 12 k
libXaw x86_64 1.0.13-19.el9 ol9_appstream 198 k
libXcomposite x86_64 0.4.5-7.el9 ol9_appstream 29 k
libXcursor x86_64 1.2.0-7.el9 ol9_appstream 35 k
libXdamage x86_64 1.1.5-7.el9 ol9_appstream 27 k
libXfixes x86_64 5.0.3-16.el9 ol9_appstream 20 k
libXi x86_64 1.7.10-8.el9 ol9_appstream 40 k
libXinerama x86_64 1.1.4-10.el9 ol9_appstream 15 k
libXmu x86_64 1.1.3-8.el9 ol9_appstream 79 k
libXpm x86_64 3.5.13-8.el9_1 ol9_appstream 62 k
libXrandr x86_64 1.5.2-8.el9 ol9_appstream 28 k
libXt x86_64 1.2.0-6.el9 ol9_appstream 180 k
libXtst x86_64 1.2.3-16.el9 ol9_appstream 21 k
libXv x86_64 1.0.11-16.el9 ol9_appstream 19 k
libXxf86vm x86_64 1.1.4-18.el9 ol9_appstream 19 k
libasyncns x86_64 0.8-22.el9 ol9_appstream 30 k
libcanberra x86_64 0.30-26.el9 ol9_appstream 100 k
libcanberra-gtk3 x86_64 0.30-26.el9 ol9_appstream 39 k
libdrm x86_64 2.4.114-1.el9 ol9_appstream 165 k
libepoxy x86_64 1.5.5-4.el9 ol9_appstream 246 k
libexif x86_64 0.6.22-6.el9 ol9_appstream 462 k
libfontenc x86_64 1.1.3-17.el9 ol9_appstream 31 k
libgexiv2 x86_64 0.12.3-1.el9 ol9_appstream 88 k
libglvnd x86_64 1:1.3.4-1.el9 ol9_appstream 134 k
libglvnd-egl x86_64 1:1.3.4-1.el9 ol9_appstream 35 k
libglvnd-glx x86_64 1:1.3.4-1.el9 ol9_appstream 141 k
libgs x86_64 9.54.0-9.el9 ol9_appstream 3.4 M
libgsf x86_64 1.14.47-5.el9 ol9_appstream 302 k
libgxps x86_64 0.3.2-3.el9 ol9_appstream 86 k
libijs x86_64 0.35-15.el9 ol9_appstream 30 k
libiptcdata x86_64 1.0.5-9.el9 ol9_appstream 73 k
libldac x86_64 2.0.2.3-10.el9 ol9_appstream 41 k
liblqr-1 x86_64 0.4.2-19.el9 ol9_developer_EPEL 53 k
libnotify x86_64 0.7.9-8.el9 ol9_appstream 50 k
libogg x86_64 2:1.3.4-6.el9 ol9_appstream 38 k
libosinfo x86_64 1.10.0-1.el9 ol9_appstream 345 k
libpaper x86_64 1.1.28-4.el9 ol9_appstream 67 k
libpciaccess x86_64 0.16-6.el9 ol9_baseos_latest 28 k
libraqm x86_64 0.8.0-1.el9 ol9_developer_EPEL 19 k
libsbc x86_64 1.4-9.el9 ol9_appstream 45 k
libsndfile x86_64 1.0.31-7.el9 ol9_appstream 212 k
libtheora x86_64 1:1.1.1-31.el9 ol9_appstream 168 k
libtiff x86_64 4.4.0-8.el9_2 ol9_appstream 202 k
libtool-ltdl x86_64 2.4.6-45.el9 ol9_appstream 36 k
libtracker-sparql x86_64 3.1.2-3.el9_1 ol9_appstream 354 k
libvisual x86_64 1:0.4.0-34.el9 ol9_appstream 152 k
libvorbis x86_64 1:1.3.7-5.el9 ol9_appstream 198 k
libwayland-client x86_64 1.21.0-1.el9 ol9_appstream 32 k
libwayland-cursor x86_64 1.21.0-1.el9 ol9_appstream 18 k
libwayland-egl x86_64 1.21.0-1.el9 ol9_appstream 12 k
libwayland-server x86_64 1.21.0-1.el9 ol9_appstream 41 k
libwebp x86_64 1.2.0-6.el9_1 ol9_appstream 284 k
libwmf-lite x86_64 0.2.12-10.el9 ol9_appstream 77 k
libxkbcommon x86_64 1.0.3-4.el9 ol9_appstream 133 k
libxshmfence x86_64 1.3-10.el9 ol9_appstream 13 k
low-memory-monitor x86_64 2.1-4.el9 ol9_appstream 42 k
mesa-libEGL x86_64 22.3.0-2.el9 ol9_appstream 123 k
mesa-libGL x86_64 22.3.0-2.el9 ol9_appstream 168 k
mesa-libgbm x86_64 22.3.0-2.el9 ol9_appstream 37 k
mesa-libglapi x86_64 22.3.0-2.el9 ol9_appstream 49 k
mesa-vulkan-drivers x86_64 22.3.0-2.el9 ol9_appstream 7.4 M
mkfontscale x86_64 1.2.1-3.el9 ol9_appstream 37 k
openexr-libs x86_64 3.1.1-2.el9 ol9_appstream 1.1 M
openjpeg2 x86_64 2.4.0-7.el9 ol9_appstream 170 k
opus x86_64 1.3.1-10.el9 ol9_appstream 200 k
orc x86_64 0.4.31-6.el9 ol9_appstream 188 k
osinfo-db noarch 20221130-1.0.2.el9
ol9_appstream 1.2 M
osinfo-db-tools x86_64 1.10.0-1.el9 ol9_appstream 96 k
ostree-libs x86_64 2023.1-6.el9_2 ol9_appstream 441 k
pipewire-libs x86_64 0.3.47-3.el9_2 ol9_appstream 1.7 M
poppler x86_64 21.01.0-14.el9 ol9_appstream 1.1 M
poppler-data noarch 0.4.9-9.el9 ol9_appstream 2.1 M
poppler-glib x86_64 21.01.0-14.el9 ol9_appstream 152 k
pulseaudio-libs x86_64 15.0-2.el9 ol9_appstream 726 k
pulseaudio-utils x86_64 15.0-2.el9 ol9_appstream 82 k
rtkit x86_64 0.11-28.el9 ol9_appstream 69 k
sound-theme-freedesktop noarch 0.8-17.el9 ol9_appstream 407 k
totem-pl-parser x86_64 3.26.6-2.el9 ol9_appstream 238 k
tracker x86_64 3.1.2-3.el9_1 ol9_appstream 616 k
upower x86_64 0.99.13-2.el9 ol9_appstream 188 k
urw-base35-bookman-fonts noarch 20200910-6.el9 ol9_appstream 861 k
urw-base35-c059-fonts noarch 20200910-6.el9 ol9_appstream 888 k
urw-base35-d050000l-fonts noarch 20200910-6.el9 ol9_appstream 81 k
urw-base35-fonts noarch 20200910-6.el9 ol9_appstream 11 k
urw-base35-fonts-common noarch 20200910-6.el9 ol9_appstream 22 k
urw-base35-gothic-fonts noarch 20200910-6.el9 ol9_appstream 657 k
urw-base35-nimbus-mono-ps-fonts
noarch 20200910-6.el9 ol9_appstream 810 k
urw-base35-nimbus-roman-fonts noarch 20200910-6.el9 ol9_appstream 870 k
urw-base35-nimbus-sans-fonts noarch 20200910-6.el9 ol9_appstream 1.3 M
urw-base35-p052-fonts noarch 20200910-6.el9 ol9_appstream 987 k
urw-base35-standard-symbols-ps-fonts
noarch 20200910-6.el9 ol9_appstream 42 k
urw-base35-z003-fonts noarch 20200910-6.el9 ol9_appstream 281 k
vulkan-loader x86_64 1.3.239.0-1.el9 ol9_appstream 143 k
webrtc-audio-processing x86_64 0.3.1-8.el9 ol9_appstream 310 k
wireplumber x86_64 0.4.8-1.0.1.el9 ol9_appstream 123 k
wireplumber-libs x86_64 0.4.8-1.0.1.el9 ol9_appstream 335 k
xdg-dbus-proxy x86_64 0.1.3-1.el9 ol9_appstream 41 k
xdg-desktop-portal x86_64 1.12.4-1.el9 ol9_appstream 453 k
xkeyboard-config noarch 2.33-2.el9 ol9_appstream 1.1 M
xorg-x11-fonts-ISO8859-1-100dpi
noarch 7.5-33.el9 ol9_appstream 1.2 M
Installing weak dependencies:
dconf x86_64 0.40.0-6.el9 ol9_appstream 121 k
exiv2 x86_64 0.27.5-2.el9 ol9_appstream 1.0 M
flatpak x86_64 1.12.7-2.el9 ol9_appstream 1.8 M
libcanberra-gtk2 x86_64 0.30-26.el9 ol9_appstream 26 k
p11-kit-server x86_64 0.24.1-2.el9 ol9_appstream 202 k
pipewire x86_64 0.3.47-3.el9_2 ol9_appstream 49 k
pipewire-alsa x86_64 0.3.47-3.el9_2 ol9_appstream 59 k
pipewire-jack-audio-connection-kit
x86_64 0.3.47-3.el9_2 ol9_appstream 133 k
pipewire-pulseaudio x86_64 0.3.47-3.el9_2 ol9_appstream 24 k
tracker-miners x86_64 3.1.2-3.el9 ol9_appstream 1.0 M
xdg-desktop-portal-gtk x86_64 1.12.0-3.el9 ol9_appstream 162 k
Transaction Summary
================================================================================
Install 158 Packages
<略>
$
インストール後にサイトヘルスステータスを確認するとgdも消えている
続いて「sudo dnf install php-pecl-zip php-intl」をインストール
$ sudo dnf install php-pecl-zip php-intl
Last metadata expiration check: 1:28:15 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
php-intl x86_64 8.0.27-1.el9_1 ol9_appstream 150 k
php-pecl-zip x86_64 1.19.2-6.el9 ol9_appstream 78 k
Installing dependencies:
libzip x86_64 1.7.3-7.el9 ol9_appstream 63 k
Transaction Summary
================================================================================
Install 3 Packages
<略>
$
これで、サイトヘルスステータスのパッケージ関連のメッセージは消えた。
手順12: WordPressの.htaccess有効化
/var/www/html/wordpress/.htaccess が作成されているが、Oracle Linux 8のhttpd標準設定ではこれを読み込むようにはなっていない。
これが有効になっていないと、パーマリンク設定を「基本」から変えた場合に個別記事にアクセスできなくなる。
/etc/httpd/conf.d/wordpress.conf にファイルを作って設定する。
$ sudo vi /etc/httpd/conf.d/wordpress.conf
$ cat /etc/httpd/conf.d/wordpress.conf
<Directory /var/www/html/wordpress/>
Allowoverride All
</Directory>
$ sudo systemctl restart httpd
$
手順13: OS自動更新の設定
メンテナンスがめんどくさくなって忘れる可能性があるので、Oracle Linux 8の自動更新設定を実施。
以前はyum-cronでしたが、現在は dnf-automatic に変わったので、パッケージをインストールします。
$ sudo dnf install dnf-automatic -y
Last metadata expiration check: 1:30:59 ago on Tue 12 Sep 2023 11:38:07 AM JST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
dnf-automatic noarch 4.14.0-5.0.1.el9_2 ol9_baseos_latest 53 k
Transaction Summary
================================================================================
Install 1 Package
<略>
$
/etc/dnf/automatic.conf 内の「apply_updates = no」を「apply_updates = yes」に変更
$ sudo vi /etc/dnf/automatic.conf
$ cat /etc/dnf/automatic.conf
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = default
random_sleep = 0
# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = yes
[emitters]
# Name to use for this system in messages that are emitted. Default is the
# hostname.
# system_name = my-host
# How to send messages. Valid options are stdio, email and motd. If
# emit_via includes stdio, messages will be sent to stdout; this is useful
# to have cron send the messages. If emit_via includes email, this
# program will send email itself according to the configured options.
# If emit_via includes motd, /etc/motd file will have the messages. if
# emit_via includes command_email, then messages will be send via a shell
# command compatible with sendmail.
# Default is email,stdio.
# If emit_via is None or left blank, no messages will be sent.
emit_via = stdio
[email]
# The address to send email messages from.
email_from = root@example.com
# List of addresses to send messages to.
email_to = root
# Name of the host to connect to to send email messages.
email_host = localhost
[command]
# The shell command to execute. This is a Python format string, as used in
# str.format(). The format function will pass a shell-quoted argument called
# `body`.
# command_format = "cat"
# The contents of stdin to pass to the command. It is a format string with the
# same arguments as `command_format`.
# stdin_format = "{body}"
[command_email]
# The shell command to use to send email. This is a Python format string,
# as used in str.format(). The format function will pass shell-quoted arguments
# called body, subject, email_from, email_to.
# command_format = "mail -Ssendwait -s {subject} -r {email_from} {email_to}"
# The contents of stdin to pass to the command. It is a format string with the
# same arguments as `command_format`.
# stdin_format = "{body}"
# The address to send email messages from.
email_from = root@example.com
# List of addresses to send messages to.
email_to = root
[base]
# This section overrides dnf.conf
# Use this to filter DNF core messages
debuglevel = 1
$
そしてdnf-automatic.timerを有効化し、開始します。
$ sudo systemctl enable dnf-automatic.timer
Created symlink /etc/systemd/system/timers.target.wants/dnf-automatic.timer → /usr/lib/systemd/system/dnf-automatic.timer.
$ sudo systemctl status dnf-automatic
○ dnf-automatic.service - dnf automatic
Loaded: loaded (/usr/lib/systemd/system/dnf-automatic.service; static)
Active: inactive (dead)
TriggeredBy: ○ dnf-automatic.timer
$ sudo systemctl start dnf-automatic.timer
$ sudo systemctl status dnf-automatic.timer
● dnf-automatic.timer - dnf-automatic timer
Loaded: loaded (/usr/lib/systemd/system/dnf-automatic.timer; enabled; pres>
Active: active (waiting) since Tue 2023-09-12 13:11:00 JST; 5s ago
Until: Tue 2023-09-12 13:11:00 JST; 5s ago
Trigger: Wed 2023-09-13 06:44:33 JST; 17h left
Triggers: ● dnf-automatic.service
Sep 12 13:11:00 ホスト名 systemd[1]: Started dnf-automatic timer.
$
手順14 メモリが足らない対策
Oracle CloudのFree Tierで初期値のまま稼働させてみたのですが、頻繁に応答がなくなりました。(Oracle Linux 8だと問題なかったんだけど、Oracle Linux 9だと1日複数回発生)
oom-killerが発動したり、dnf search実行したら応答が返ってこない、とか・・・(dnf searchの件はどうやらdnfレポジトリの環境問題のもよう・・・)
手順14-1 php-fpm起動数制限
メモリ消費が増えやすいものとしてphp-fpmがある
zabbix向けでの記事ではあるが「php-fpmのメモリ使用量が増加する問題について」なんてのがあるぐらいにはよくあることになっている。
/etc/php-fpm.d/www.conf にある設定ファイルで設定されているので、まずは現在値を確認
動的に子プロセスを生成 (pm = dynamic)
プロセス最大数が50 (pm.max_children = 50)
開始プロセス数は5 (pm.start_servers = 5)
スペアサーバの最低は5(pm.min_spare_servers = 5)
スペアサーバの最大は35(pm.max_spare_servers = 35)
プロセスの自動再起動は設定なし(”;pm.max_requests = 500″なのでコメントになっている)
これを下記に変更し、「systemctl restart php-fpm」で再起動した。
動的に子プロセスを生成 (pm = dynamic)
プロセス最大数が8 (pm.max_children = 8)
開始プロセス数は5 (pm.start_servers = 5)
スペアサーバの最低は5(pm.min_spare_servers = 5)
スペアサーバの最大は8(pm.max_spare_servers = 8)
プロセスの自動再起動は500(pm.max_requests = 500)
これでしばらく様子をみてみることにした(2024/05/07設定)
手順14-2 swapfile追加
yum/dnfレポジトリのファイルサイズが80MB程度を越えるとdnfコマンドの処理中にswapが1GBちょっと必要になるようだ。
標準だと1GBなく、ほかのプロセスで400MB程度は使用されているので、足らないため、swapを増量する必要がある模様。
現在の設定確認するため「swapon –show」を実行して、容量と、swapfileの権限等を確認
# swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 948M 488.4M -2
# ls -l /.swapfile
-rw-------. 1 root root 994050048 4月 25 10:59 /.swapfile
#
「/パーテーション」か「/var/oledパーテーション」のどちらかに追加のswapfileを作成
# fallocate -l 2G /var/oled/swapfile2
# ls -l /var/oled/swapfile2
-rw-r--r--. 1 root root 2147483648 5月 7 14:06 /var/oled/swapfile2
# chmod 600 /var/oled/swapfile2
# ls -l /var/oled/swapfile2
-rw-------. 1 root root 2147483648 5月 7 14:06 /var/oled/swapfile2
# mkswap /var/oled/swapfile2
スワップ空間バージョン 1 を設定します。サイズ = 2 GiB (2147479552 バイト)
ラベルはありません, UUID=66caa2dd-b28d-43da-b1a6-8b710f8a8398
#
作成したファイルをswapとして登録
# swapon /var/oled/swapfile2
# swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 948M 487.4M -2
/var/oled/swapfile2 file 2G 0B -3
#
free -mを実行してswapが増えていることを確認
# free -m
total used free shared buff/cache available
Mem: 948 512 65 26 545 436
Swap: 2995 487 2508
#
また、上記は再起動すると消えるので/etc/fstabに「/var/oled/swapfile2 none swap sw 0 0」を追加
トラブルメモ
ここからは一般的ではないトラブルの対処メモ
dnfコマンド実行したあとに応答がなくなる
OCI Free Tier(メモリ1GB)のインスタンスでOracle Linux 9をインストールしたあと、dnf check-updateを実行すると、systemのloadが非常に上がったあと、応答がなくなるということとが多発した。
EPEL追加したあとから動きがおかしくなってる?という感じがあったので、いったん全部のレポジトリを無効化してからOS系を有効にしたところ、dnfが止まらずに実行完了した。
# dnf repolist
repo id repo の名前
ol9_addons Oracle Linux 9 Addons (x86_64)
ol9_appstream Oracle Linux 9 Application Stream Packages (x86_64)
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64)
#
この状態で「dnf update」を実行したところ、EPELで追加したパッケージと関連する部分があって一括アップデートができなかった。
アップデートにdnf周りとセキュリティ周りをアップデートすればいいか、と以下のパッケージについて個別アップデートを実施した
dnf update yum selinux-policy policycoreutils rpm dnf-plugins-core
UEKを戻して以下の状態でもdnf check-updateは成功
# dnf repolist
repo id repo の名前
ol9_UEKR7 Oracle Linux 9 UEK Release 7 (x86_64)
ol9_addons Oracle Linux 9 Addons (x86_64)
ol9_appstream Oracle Linux 9 Application Stream Packages (x86_64)
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64)
#
しかし、”Oracle Linux 9 OCI Included Packages (x86_64)”(oci-included-ol9.repo)を戻したところ応答がなくなる現象発生
# dnf repolist
repo id repo の名前
ol9_UEKR7 Oracle Linux 9 UEK Release 7 (x86_64)
ol9_addons Oracle Linux 9 Addons (x86_64)
ol9_appstream Oracle Linux 9 Application Stream Packages (x86_64)
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64)
ol9_oci_included Oracle Linux 9 OCI Included Packages (x86_64)
# dnf check-update
Oracle Linux 9 OCI Included Packages (x86_64) 27 MB/s | 84 MB 00:03
<ここから出力が続かない>
強制再起動したあと、Oracle Linux 9 OCI Included Packages (x86_64)を除外して、EPELを含めてそれ以外の状態を戻してみるとdnf check-updateに成功
# dnf repolist
repo id repo の名前
ol9_UEKR7 Oracle Linux 9 UEK Release 7 (x86_64)
ol9_addons Oracle Linux 9 Addons (x86_64)
ol9_appstream Oracle Linux 9 Application Stream Packages (x86_64)
ol9_baseos_latest Oracle Linux 9 BaseOS Latest (x86_64)
ol9_developer_EPEL Oracle Linux 9 EPEL Packages for Development (x86_64)
ol9_ksplice Ksplice for Oracle Linux 9 (x86_64)
#
が・・・dnf updateでエラーが・・・
# dnf update -y
メタデータの期限切れの最終確認: 0:01:49 前の 2024年05月07日 11時32分27秒 に実施しました。
エラー:
問題 1: package ImageMagick-libs-6.9.12.93-1.el9.x86_64 from @System requires libraw_r.so.20()(64bit), but none of the providers can be installed
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-6.el9.x86_64 from @System
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-5.el9.x86_64 from ol9_appstream
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-6.el9.x86_64 from ol9_appstream
- パッケージの最良アップデート候補をインストールできません LibRaw-0.20.2-6.el9.x86_64
- パッケージの最良アップデート候補をインストールできません ImageMagick-libs-6.9.12.93-1.el9.x86_64
問題 2: package tuned-profiles-oci-2.21.0-1.0.1.el9_3.noarch from @System requires tuned = 2.21.0-1.0.1.el9_3, but none of the providers can be installed
- cannot install both tuned-2.22.1-1.0.1.el9.noarch from ol9_baseos_latest and tuned-2.21.0-1.0.1.el9_3.noarch from @System
- cannot install both tuned-2.22.1-1.0.1.el9.noarch from ol9_baseos_latest and tuned-2.21.0-1.0.1.el9_3.noarch from ol9_baseos_latest
- パッケージの最良アップデート候補をインストールできません tuned-2.21.0-1.0.1.el9_3.noarch
- インストール済パッケージの問題 tuned-profiles-oci-2.21.0-1.0.1.el9_3.noarch
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
#
現在無効にしているociレポジトリにあるtuned-profiles-ociを引っ張ってきてるから駄目な模様
$ cat /etc/yum.repos.d/oci-included-ol9.repo
[ol9_oci_included]
name=Oracle Linux $releasever OCI Included Packages ($basearch)
baseurl=https://yum$ociregion.$ocidomain/repo/OracleLinux/OL9/oci/included/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
$
ここの環境変数 $ociregionと$ocidomainはどこで定義されているかといえば、/etc/yum/vars/ociregion と /etc/yum/vars/ocidomain
$ ls -l /etc/yum/vars/
合計 12
-rw-r--r--. 1 root root 20 4月 25 10:59 ocidomain
-rw-r--r--. 1 root root 14 4月 25 10:59 ociregion
-rw-r--r--. 1 root root 13 4月 25 10:59 region
$ cat /etc/yum/vars/ocidomain
oci.oraclecloud.com
$ cat /etc/yum/vars/ociregion
.us-phoenix-1
$ cat /etc/yum/vars/region
us-phoenix-1
$
とりあえずはoracle linuxのreleaseが新しくなっていたので個別アップデート
# dnf update oraclelinux-release oraclelinux-release-el9 redhat-release
メタデータの期限切れの最終確認: 0:17:52 前の 2024年05月07日 11時32分27秒 に実施しました。
依存関係が解決しました。
=================================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
=================================================================================================================
アップグレード:
oraclelinux-release x86_64 9:9.4-1.0.6.el9 ol9_baseos_latest 8.3 M
oraclelinux-release-el9 x86_64 1.0-15.el9 ol9_baseos_latest 23 k
redhat-release x86_64 3:9.4-0.4.0.1.el9 ol9_baseos_latest 19 k
トランザクションの概要
=================================================================================================================
アップグレード 3 パッケージ
ダウンロードサイズの合計: 8.3 M
これでよろしいですか? [y/N]: y
<略>
#
OCIに関するレポジトリ設定は変更されなかったので、パッケージ除外設定でdnf updateを実施した( 「dnf update -y –exclude=tuned*,ImageMagick-libs,LibRaw」で実行した)
# dnf update -y --exclude=tuned*
メタデータの期限切れの最終確認: 0:21:39 前の 2024年05月07日 11時32分27秒 に実施しました。
エラー:
問題: package ImageMagick-libs-6.9.12.93-1.el9.x86_64 from @System requires libraw_r.so.20()(64bit), but none of the providers can be installed
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-6.el9.x86_64 from @System
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-5.el9.x86_64 from ol9_appstream
- cannot install both LibRaw-0.21.1-1.el9.x86_64 from ol9_appstream and LibRaw-0.20.2-6.el9.x86_64 from ol9_appstream
- パッケージの最良アップデート候補をインストールできません LibRaw-0.20.2-6.el9.x86_64
- パッケージの最良アップデート候補をインストールできません ImageMagick-libs-6.9.12.93-1.el9.x86_64
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
# dnf update -y --exclude=tuned*,ImageMagick-libs,LibRaw
メタデータの期限切れの最終確認: 0:22:54 前の 2024年05月07日 11時32分27秒 に実施しました。
依存関係が解決しました。
<略>
アップデート完了後、Oracle Linux 9 OCI Included Packages (x86_64)を戻してdnf check-updateを実行すると、これまでと同じで止まる
該当レポジトリからインストールされているものを確認する
# dnf list --installed|grep ol9_oci_included
ksplice-release-el9.x86_64 1.0-2.el9 @ol9_oci_included
oci-linux-config.noarch 2.0-1.0.8.el9 @ol9_oci_included
oci-utils.noarch 0.14.0-4.el9 @ol9_oci_included
python3-cryptography.x86_64 36.0.1-4.0.1.el9 @ol9_oci_included
python3-docutils.noarch 0.16-6.el9 @ol9_oci_included
python3-sdnotify.noarch 0.3.2-4.el9 @ol9_oci_included
python39-oci-sdk.x86_64 2.125.3-1.el9 @ol9_oci_included
tuned-profiles-oci.noarch 2.21.0-1.0.1.el9_3 @ol9_oci_included
tuned-profiles-oci-recommend.noarch 2.21.0-1.0.1.el9_3 @ol9_oci_included
#
twitterで検索したら、同じような事例で止まったという話をしてる人を発見
どう対処したのか聞いてみたところswap増量したとのこと。
# swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 948M 488.4M -2
# ls -l /.swapfile
-rw-------. 1 root root 994050048 4月 25 10:59 /.swapfile
#
/etc/fstabには「/.swapfile none swap sw,comment=cloudconfig 0 0」という行あり
# fallocate -l 2G /var/oled/swapfile2
# ls -l /var/oled/swapfile2
-rw-r--r--. 1 root root 2147483648 5月 7 14:06 /var/oled/swapfile2
# chmod 600 /var/oled/swapfile2
# ls -l /var/oled/swapfile2
-rw-------. 1 root root 2147483648 5月 7 14:06 /var/oled/swapfile2
# mkswap /var/oled/swapfile2
スワップ空間バージョン 1 を設定します。サイズ = 2 GiB (2147479552 バイト)
ラベルはありません, UUID=66caa2dd-b28d-43da-b1a6-8b710f8a8398
# swapon /var/oled/swapfile2
# swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 948M 487.4M -2
/var/oled/swapfile2 file 2G 0B -3
# free -m
total used free shared buff/cache available
Mem: 948 512 65 26 545 436
Swap: 2995 487 2508
#
そして dnf check-updateを実行
# dnf check-update
メタデータの期限切れの最終確認: 1:08:36 前の 2024年05月07日 13時04分17秒 に実施しました。
LibRaw.x86_64 0.21.1-1.el9 ol9_appstream
python39-oci-sdk.x86_64 2.126.1-1.el9 ol9_oci_included
tuned.noarch 2.22.1-1.0.1.el9 ol9_baseos_latest
tuned-profiles-oci.noarch 2.22.1-1.0.1.el9 ol9_oci_included
tuned-profiles-oci-recommend.noarch 2.22.1-1.0.1.el9 ol9_oci_included
#
# dnf check-update
Ksplice for Oracle Linux 9 (x86_64) 413 kB/s | 380 kB 00:00
Oracle Linux 9 OCI Included Packages (x86_64) 29 MB/s | 84 MB 00:02
Oracle Linux 9 EPEL Packages for Development (x86_64) 17 MB/s | 59 MB 00:03
Oracle Linux 9 BaseOS Latest (x86_64) 14 MB/s | 24 MB 00:01
Oracle Linux 9 Application Stream Packages (x86_64) 18 MB/s | 33 MB 00:01
Oracle Linux 9 Addons (x86_64) 516 kB/s | 396 kB 00:00
Oracle Linux 9 UEK Release 7 (x86_64) 15 MB/s | 31 MB 00:02
メタデータの期限切れの最終確認: 0:00:01 前の 2024年05月07日 14時32分44秒 に実施しました。
LibRaw.x86_64 0.21.1-1.el9 ol9_appstream
#
問題なく通りました。
実行中 topコマンドでメモリ消費を見てみたところ、swapを最大で1600MBぐらいまで使用していた。dnfコマンドの実行が終わると640MB程度の使用になったので、約1GBぐらいが必要である模様
ふとOracle Linux 8 ARMインスタンスでswapを確認してみると4GBで設定されていた。それが1GBに減ってるのでは確かに足らないですね・・・
$ swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 4G 556.1M -2
$ ls -l /.swapfile
-rw-------. 1 root root 4294967296 Apr 6 2022 /.swapfile
$ free -m
total used free shared buff/cache available
Mem: 5759 2216 2708 23 833 2696
Swap: 4095 556 3539
$
Oracle Linux 8 x86_64 インスタンスだと1.9GBで、以前は問題なかったんだけど、いま試すとdnfがOOM killerで殺されるようになっていた・・・(合計3.9GBに増やしたあとで確認すると最大で2376MBまで使用されていた)
$ swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 1.9G 84.1M -2
$ ls -l /.swapfile
-rw-------. 1 root root 1989148672 Mar 8 2023 /.swapfile
$ free -m
total used free shared buff/cache available
Mem: 936 541 63 1 331 246
Swap: 1896 467 1429
$
ただ作成時期によってはOracle linux 8 x86_64インスタンスでも8GBで設定されているようだ
$ swapon --show
NAME TYPE SIZE USED PRIO
/.swapfile file 8G 66.3M -2
$ ls -l /.swapfile
-rw-------. 1 root root 8589934592 Nov 16 2021 /.swapfile
$ free -m
total used free shared buff/cache available
Mem: 23236 5527 3452 740 14257 13471
Swap: 8191 66 8125
$
Oracle Linux 7 x86_64インスタンスだとswap 8GB
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/sda2 partition 8G 489.5M -2
$
OCI関連コマンドドキュメント
OCIリージョン内のyumサーバに関する記載 リージョナルYumサーバーへの接続