AlmaLinux9インストール

AlmaLinux9とCakePHP4の組み合わせも検証してみました。しかし、移行を考えていた事務系システムをCakePHP4で稼働させるには結構な量のコードの書き換えが必要になることので検証作業は中断しました。ただ、CakePHP4のインストールはComposerを使ってインストールできたので、備忘録として残しておきます。

環境

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"として自己署名入りのサーバー証明書を使用します。この場合でも、暗号化は行われます。

ページの先頭へ