AlmaLinux9インストール
AlmaLinux9とCakePHP4の組み合わせも検証してみました。しかし、移行を考えていた事務系システムをCakePHP4で稼働させるには結構な量のコードの書き換えが必要になることので検証作業は中断しました。ただ、CakePHP4のインストールはComposerを使ってインストールできたので、備忘録として残しておきます。
環境
- AlmaLinux9
- Apach
- postgresql13
- PHP8
- CakePHP4
- sqlsrv
AlmaLinux9
インストールはAlmaLinux8同様にHyper-Vの仮想マシン。設定は以下の通り。
- 世代:第1世代
- 起動メモリ:1024MB 動的メモリ使用 ※初期の512MBでは、インストール時にエラーしてしまうため1024MB以上にしましょう。
- ネットワーク:仮想ネットワーク
- ハードディスク:VHDXフォーマット 127GB(初期値のまま)
- ブート:公式サイトからダウンロードした「AlmaLinux-9.3-x86_64-dvd.iso」と指定
AlmaLinux8同様にインストール直後からssh、FTPは起動していますが、暗号化方式が変更になったため、RSA/SHA2に対応していないクライアントソフトから接続する必要があります。
使っていたputtyとWinSCPが暗号化方式に対応していなかったため、puttyは「Release 0.81-ranvis2」に、WinSCPは「6.3.3」に更新することにしました。
クライアントソフトを更新できないときは、サーバー側の設定を旧仕様に変更するで対応することもできます。
# update-crypto-policies --set LEGACY
# reboot
ポリシーを「LEGACY」に変更することで、RSA/SHA1が有効になり従来のクライアントソフトでも接続できるようになります。
Apach
Apachは、dnfコマンドを使いインストールします。rootユーザーで行います。
# dnf install httpd
ここでインストールされるのは
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
httpd x86_64 2.4.57-5.el9 appstream 46 k
依存関係のインストール:
almalinux-logos-httpd noarch 90.5.1-1.1.el9 appstream 18 k
apr x86_64 1.7.0-12.el9_3 appstream 122 k
apr-util x86_64 1.6.1-23.el9 appstream 94 k
apr-util-bdb x86_64 1.6.1-23.el9 appstream 12 k
httpd-core x86_64 2.4.57-5.el9 appstream 1.4 M
httpd-filesystem noarch 2.4.57-5.el9 appstream 12 k
httpd-tools x86_64 2.4.57-5.el9 appstream 80 k
弱い依存関係のインストール:
apr-util-openssl x86_64 1.6.1-23.el9 appstream 14 k
mod_http2 x86_64 1.15.19-5.el9 appstream 148 k
mod_lua x86_64 2.4.57-5.el9 appstream 60 k
インストールされたのは
almalinux-logos-httpd-90.5.1-1.1.el9.noarch
apr-1.7.0-12.el9_3.x86_64
apr-util-1.6.1-23.el9.x86_64
apr-util-bdb-1.6.1-23.el9.x86_64
apr-util-openssl-1.6.1-23.el9.x86_64
httpd-2.4.57-5.el9.x86_64
httpd-core-2.4.57-5.el9.x86_64
httpd-filesystem-2.4.57-5.el9.noarch
httpd-tools-2.4.57-5.el9.x86_64
mod_http2-1.15.19-5.el9.x86_64
mod_lua-2.4.57-5.el9.x86_64
バージョン確認
# httpd -v
Server version: Apache/2.4.57 (AlmaLinux)
Server built: Jul 20 2023 00:00:00
ユーザー名「webmaster 」、ホームディレクトリはドキュメントルートの「/var/www/html」で専用のユーザーを作り、パスワードを設定します。
# useradd -d /var/www/html webmaster
useradd: warning: the home directory /var/www/html already exists.
useradd: Not copying any file from skel directory into it.
# passwd webmaster
ユーザー webmaster のパスワードを変更。
新しい パスワード:
新しい パスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
「/var/www/html」下にあるファイルのパーミッションを「webmaster 」にします。-Rオプションで再帰的に行うようにします。
# chown -R webmaster:webmaster /var/www/html
外部からアクセスできるようにファイアウォールのポートを開きます。
# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --reload
success
.htaccessを有効にするためhttpd.confを編集します
# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
<Directory "/var/www/html">タブにあるAllowOverrideディレクティブの設定をNoneからAllに変更します。 ※AllowOverrideは何カ所かにあるので変更する箇所に注意しましょう。
# AllowOverride None
AllowOverride All
Apachを起動します。
# systemctl start httpd
自動起動の設定を行います。
# systemctl enable httpd
postgresql
dnfコマンドを使いインストールします。rootユーザーで行います。
# dnf install postgresql-server
ここでインストールされるのは
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
postgresql-server x86_64 13.14-1.el9_3 appstream 5.7 M
依存関係のインストール:
postgresql x86_64 13.14-1.el9_3 appstream 1.5 M
postgresql-private-libs x86_64 13.14-1.el9_3 appstream 132 k
インストールされたのは
インストール済み:
postgresql-13.14-1.el9_3.x86_64
postgresql-private-libs-13.14-1.el9_3.x86_64
postgresql-server-13.14-1.el9_3.x86_64
バージョン確認 ※「V」は大文字です
# psql -V
psql (PostgreSQL) 13.14
データベースの初期設定を行います。
# postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
サーバーを起動します。
# systemctl start postgresql
自動起動の設定を行います。
# systemctl enable postgresql
外部からアクセスできるようにpostgresql.confを編集します。
# vi /var/lib/pgsql/data/postgresql.conf
以下の記述を追加します。
listen_addresses = '*'
検証機のため、すべてのIPから許可してますが、実機運用では特定のIPアドレスを指定しましょう。
接続認証を変更します。以下の記述を文末に追加します。
# vi /var/lib/pgsql/data/pg_hba.conf
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all 192.168.0.0 255.255.255.0 trust
検証機のため、「trust」を指定し「パスワードなし」にしてますが、実機運用では必ず、パスワード認証を行うように設定してください。上の2行が内部接続、3行目は外部からのアクセス用です。
設定を変更したので、再起動します。
# systemctl restart postgresql
外部からアクセスできるようにファイアウォールのポートを開きます。
# firewall-cmd --add-service=postgresql --permanent
success
# firewall-cmd --reload
success
PHP
AlmaLinux9のデフォルトはPHP8ですが、SQLサーバとの接続に必要なphp-sqlsrvはデフォルトリポジトリに含まれていないので、remi-8.1をインストールします。rootユーザーで行います。
# dnf install epel-release
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
キャッシュを作成/更新します
# dnf clean all && dnf -y makecache
remi-8.1がインストールされるように指定します。
# dnf -y module reset php && dnf -y module enable php:remi-8.1
確認します。
# dnf module list php
メタデータの期限切れの最終確認: 1:29:00 前の 2024年05月13日 14時46分05秒 に実施しました。
AlmaLinux 9 - AppStream
Name Stream Profiles Summary
php 8.1 common [d], devel, minimal PHP scripting language
php 8.2 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 [e] common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language
必要なPHP 拡張も含めて、インストールします。
# dnf install php php-mbstring php-pgsql php-pdo php-xml php-pear php-devel php-intl
インストールされたモジュールは(長いので畳んでます)
インストール済み:
autoconf-2.69-38.el9.noarch
automake-1.16.2-8.el9.noarch
cmake-filesystem-3.26.5-2.el9.x86_64
cpp-11.4.1-3.el9.alma.1.x86_64
gcc-11.4.1-3.el9.alma.1.x86_64
gcc-c++-11.4.1-3.el9.alma.1.x86_64
glibc-devel-2.34-100.el9.x86_64
glibc-headers-2.34-100.el9.x86_64
kernel-headers-5.14.0-427.16.1.el9_4.x86_64
keyutils-libs-devel-1.6.3-1.el9.x86_64
krb5-devel-1.21.1-1.el9.x86_64
libcom_err-devel-1.46.5-5.el9.x86_64
libicu73-73.2-1.el9.remi.x86_64
libkadm5-1.21.1-1.el9.x86_64
libmpc-1.2.1-4.el9.x86_64
libpq-13.11-1.el9.x86_64
libselinux-devel-3.6-1.el9.x86_64
libsepol-devel-3.6-1.el9.x86_64
libsodium-1.0.18-8.el9.x86_64
libstdc++-devel-11.4.1-3.el9.alma.1.x86_64
libtool-2.4.6-45.el9.x86_64
libverto-devel-0.3.2-3.el9.x86_64
libxcrypt-devel-4.4.18-3.el9.x86_64
libxml2-devel-2.9.13-6.el9_4.x86_64
m4-1.4.19-1.el9.x86_64
make-1:4.3-8.el9.x86_64
nginx-filesystem-1:1.20.1-14.el9_2.1.alma.1.noarch
oniguruma5php-6.9.9-1.el9.remi.x86_64
openssl-devel-1:3.0.7-27.el9.x86_64
pcre2-devel-10.40-5.el9.x86_64
pcre2-utf16-10.40-5.el9.x86_64
pcre2-utf32-10.40-5.el9.x86_64
perl-AutoLoader-5.74-481.el9.noarch
perl-B-1.80-481.el9.x86_64
perl-Carp-1.50-460.el9.noarch
perl-Class-Struct-0.66-481.el9.noarch
perl-Data-Dumper-2.174-462.el9.x86_64
perl-Digest-1.19-4.el9.noarch
perl-Digest-MD5-2.58-4.el9.x86_64
perl-DynaLoader-1.47-481.el9.x86_64
perl-Encode-4:3.08-462.el9.x86_64
perl-Errno-1.30-481.el9.x86_64
perl-Exporter-5.74-461.el9.noarch
perl-Fcntl-1.13-481.el9.x86_64
perl-File-Basename-2.85-481.el9.noarch
perl-File-Compare-1.100.600-481.el9.noarch
perl-File-Copy-2.34-481.el9.noarch
perl-File-Find-1.37-481.el9.noarch
perl-File-Path-2.18-4.el9.noarch
perl-File-Temp-1:0.231.100-4.el9.noarch
perl-File-stat-1.09-481.el9.noarch
perl-FileHandle-2.03-481.el9.noarch
perl-Getopt-Long-1:2.52-4.el9.noarch
perl-Getopt-Std-1.12-481.el9.noarch
perl-HTTP-Tiny-0.076-462.el9.noarch
perl-IO-1.43-481.el9.x86_64
perl-IO-Socket-IP-0.41-5.el9.noarch
perl-IO-Socket-SSL-2.073-1.el9.noarch
perl-IPC-Open3-1.21-481.el9.noarch
perl-MIME-Base64-3.16-4.el9.x86_64
perl-Mozilla-CA-20200520-6.el9.noarch
perl-NDBM_File-1.15-481.el9.x86_64
perl-Net-SSLeay-1.92-2.el9.x86_64
perl-POSIX-1.94-481.el9.x86_64
perl-PathTools-3.78-461.el9.x86_64
perl-Pod-Escapes-1:1.07-460.el9.noarch
perl-Pod-Perldoc-3.28.01-461.el9.noarch
perl-Pod-Simple-1:3.42-4.el9.noarch
perl-Pod-Usage-4:2.01-4.el9.noarch
perl-Scalar-List-Utils-4:1.56-461.el9.x86_64
perl-SelectSaver-1.02-481.el9.noarch
perl-Socket-4:2.031-4.el9.x86_64
perl-Storable-1:3.21-460.el9.x86_64
perl-Symbol-1.08-481.el9.noarch
perl-Term-ANSIColor-5.01-461.el9.noarch
perl-Term-Cap-1.17-460.el9.noarch
perl-Text-ParseWords-3.30-460.el9.noarch
perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch
perl-Thread-Queue-3.14-460.el9.noarch
perl-Time-Local-2:1.300-7.el9.noarch
perl-URI-5.09-3.el9.noarch
perl-base-2.27-481.el9.noarch
perl-constant-1.33-461.el9.noarch
perl-if-0.60.800-481.el9.noarch
perl-interpreter-4:5.32.1-481.el9.x86_64
perl-libnet-3.13-4.el9.noarch
perl-libs-4:5.32.1-481.el9.x86_64
perl-mro-1.23-481.el9.x86_64
perl-overload-1.31-481.el9.noarch
perl-overloading-0.02-481.el9.noarch
perl-parent-1:0.238-460.el9.noarch
perl-podlators-1:4.14-460.el9.noarch
perl-subs-1.03-481.el9.noarch
perl-threads-1:2.25-460.el9.x86_64
perl-threads-shared-1.61-460.el9.x86_64
perl-vars-1.05-481.el9.noarch
php-8.1.28-1.el9.remi.x86_64
php-cli-8.1.28-1.el9.remi.x86_64
php-common-8.1.28-1.el9.remi.x86_64
php-devel-8.1.28-1.el9.remi.x86_64
php-fedora-autoloader-1.0.1-7.el9.noarch
php-fpm-8.1.28-1.el9.remi.x86_64
php-intl-8.1.28-1.el9.remi.x86_64
php-mbstring-8.1.28-1.el9.remi.x86_64
php-nikic-php-parser4-4.18.0-1.el9.noarch
php-opcache-8.1.28-1.el9.remi.x86_64
php-pdo-8.1.28-1.el9.remi.x86_64
php-pear-1:1.10.14-1.el9.noarch
php-pgsql-8.1.28-1.el9.remi.x86_64
php-process-8.1.28-1.el9.remi.x86_64
php-sodium-8.1.28-1.el9.remi.x86_64
php-xml-8.1.28-1.el9.remi.x86_64
xz-devel-5.2.5-8.el9_0.x86_64
zlib-devel-1.2.11-40.el9.x86_64
バージョン確認
# php -v
PHP 8.1.28 (cli) (built: Apr 10 2024 05:53:50) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.28, Copyright (c) Zend Technologies
with Zend OPcache v8.1.28, Copyright (c), by Zend Technologies
Apachを再起動します。
#systemctl restart httpd
CakePHP4
CakePHPはComposerを使ってインストールします。公式サイトに書かれている方法に従って、Composerをインストールします。作業はrootユーザで行います。
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
# php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 2.7.2) successfully installed to: /root/composer.phar
Use it: php composer.phar
# php -r "unlink('composer-setup.php');"
確認します。
# composer diagnose
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? y
Checking platform settings: OK
Checking git settings: No git process found
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking pubkeys:
Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0 87719BA6 8F3BB723 4E5D42D0 84A14642
Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B 0C708369 153E328C AD90147D AFE50952
OK
Checking Composer version: OK
Checking Composer and its dependencies for vulnerabilities: OK
Composer version: 2.7.2
PHP version: 8.0.30
PHP binary path: /usr/bin/php
OpenSSL version: OpenSSL 3.0.7 1 Nov 2022
cURL version: 7.76.1 libz 1.2.11 ssl OpenSSL/3.0.7
zip: extension not loaded, unzip present, 7-Zip not available
公式サイトに従って、インストーラースクリプトを移動させます。
# mv composer.phar /usr/local/bin/composer
CakePHPは、一般ユーザーでインストールするので、ここではwebmasterに切り替えます。
# su - webmaster
念のため、カレントディレクトリを確認しておきます。
$ pwd
/var/www/html
(プロジェクト)ディレクトリにイントールします。CakePHP4がインストールされるように「cakephp/app:"4.*"」を指定します。
$ composer self-update && composer create-project --prefer-dist cakephp/app:"4.*" (プロジェクト)
途中で、パーミッションを変更する確認があるので、Yを指定します。
Set Folder Permissions ? (Default to Y) [Y,n]? Y
CakePHPのインストールが完了したら、SELinuxポリシーを変更します。
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/(プロジェクト)/logs(/.*)?"
# restorecon -R /var/www/html/(プロジェクト)/logs
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/(プロジェクト)/tmp(/.*)?"
# restorecon -R /var/www/html/(プロジェクト)/tmp
sqlsrv
sqlsrvPHP 拡張をインストールします。rootユーザーで行います。
インストールして分かったのですが、SQL Server2012には暗号化の問題で接続することができませんでした。今回はサーバをSQL Server2022に変更することで検証作業を進めました。
SELinuxが有効の状態だと、接続することができなかったため、SELinuxを無効にして検証を行っています。
回避先が分かったのでSELinux有効でもOK
ODBC ドライバーをあらかじめインストールしておく必要があるので、必要なパッケージをダウンロードします。
# curl https://packages.microsoft.com/config/rhel/9/prod.repo | tee /etc/yum.repos.d/mssql-release.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 194 100 194 0 0 572 0 --:--:-- --:--:-- --:--:-- 572
[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl=https://packages.microsoft.com/rhel/9.0/prod/
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
MSODBC18をインストールします。
# dnf install msodbcsql18
インストールされるのは
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
msodbcsql18 x86_64 18.3.2.1-1 packages-microsoft-com-prod 925 k
依存関係のインストール:
libtool-ltdl x86_64 2.4.6-45.el9 appstream 36 k
unixODBC x86_64 2.3.11-1.rh packages-microsoft-com-prod 274 k
途中で、GPG 鍵のインポートとライセンスの確認があるので、そこは「YES」とします。
インストールされたのは
インストール済み:
libtool-ltdl-2.4.6-45.el9.x86_64 msodbcsql18-18.3.2.1-1.x86_64
unixODBC-2.3.11-1.rh.x86_64
PHP 拡張をインストールします。
# dnf install php-sqlsrv
インストールされるのは
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
php-sqlsrv x86_64 5.12.0-1.el9.remi.8.1 remi-modular 265 k
インストールされたのは
インストール済み:
php-sqlsrv-5.12.0-1.el9.remi.8.1.x86_64
Apachを再起動します。
# systemctl restart httpd
ファイアウォールのポートを開きます。
#firewall-cmd --permanent --add-port=1433/tcp
success
#firewall-cmd --reload
SELinux ポリシーを変更します。-Pオプションを付けて、恒久的に指定します。
#setsebool -P httpd_can_network_connect_db 1
アプリケーションの接続文字列にTrustServerCertificateオプションを追加します。
"TrustServerCertificate"=>"yes"
サーバー証明書を使う場合は、"no"として、証明書の設定を追加します。ここでは証明書が無いので"yes"として自己署名入りのサーバー証明書を使用します。この場合でも、暗号化は行われます。