3.

CentOS7 yum install php-fpm 依存解決エラーの原因と Remi リポジトリ対処

編集
この記事の要点
  • CentOS 7 で yum install php-fpm 実行時に依存解決失敗(php-common との競合 / バージョン不整合
  • 主な原因: ① 既に別バージョン(Remi 等)の php-common が入っている / ② EPEL/Remi リポジトリ未追加 / ③ CentOS 7 の標準 PHP 5.4 が古い
  • 推奨対処: Remi リポジトリで PHP 7.4 / 8.x をインストール(CentOS 7 標準の 5.4 は EOL)
  • 手順: ① yum install epel-release → ② Remi の rpm 追加 → ③ yum-config-manager --enable remi-php74 → ④ yum install php-fpm php-cli php-mysqlnd
  • CentOS 7 自体が 2024-06-30 EOL。Rocky Linux 9 / AlmaLinux 9 への移行を強く推奨

このエラーの概要

CentOS 7 で PHP-FPM をインストールしようとして以下のような依存解決エラーが出るケースです:

$ sudo yum install php-fpm

エラー: パッケージ: php-fpm-5.4.16-46.el7.x86_64 (base)
             要求: php-common(x86-64) = 5.4.16-46.el7
             インストール: php-common-7.4.33-1.el7.remi.x86_64 (@remi-php74)
                 php-common(x86-64) = 7.4.33-1.el7.remi
             利用可能: php-common-5.4.16-46.el7.x86_64 (base)
                 php-common(x86-64) = 5.4.16-46.el7
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

意味は「base リポジトリの php-fpm 5.4.16 を入れたいが、既に Remi の php-common 7.4.33 が入っていて衝突している」です。CentOS 7 では yum install php-fpm をそのまま実行すると、デフォルトで 古い PHP 5.4(base リポジトリ)を入れようとします。一方、Remi が有効化されていると別バージョンが混在し、依存関係が破綻します。

解決の方針

状況推奨アクション
新規構築で PHP 7.4 / 8.x を使いたいRemi で php74 / php82 モジュールを有効化(対処1)
古い PHP 5.4 をどうしても使う必要があるbase のみ有効、Remi を --disablerepo=remi*(対処2)
Remi の別 PHP バージョンへ切替yum-config-manager で旧 enable を disable に(対処3)
CentOS 7 を継続使用したいEOL のため、Rocky/AlmaLinux 9 へ移行を推奨(対処4)

対処1: Remi リポジトリで PHP 7.4 / 8.x をインストール(推奨)

# 1. EPEL リポジトリ追加 (Remi の前提)
sudo yum install -y epel-release

# 2. Remi リポジトリ追加
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

# 3. yum-utils を入れて config-manager を使えるように
sudo yum install -y yum-utils

# 4. Remi の PHP 7.4 を有効化(既存があれば無効化)
sudo yum-config-manager --disable 'remi-php*'
sudo yum-config-manager --enable remi-php74
#   PHP 8.0 → remi-php80
#   PHP 8.1 → remi-php81
#   PHP 8.2 → remi-php82

# 5. インストール
sudo yum install -y php php-fpm php-cli php-common \
    php-mysqlnd php-pdo php-gd php-mbstring php-xml \
    php-json php-opcache php-bcmath php-zip

# 6. 確認
php -v
# PHP 7.4.33 (cli) (built: ...) ...

# 7. 起動
sudo systemctl enable --now php-fpm
sudo systemctl status php-fpm

対処2: あえて CentOS 標準の PHP 5.4 を入れたい

レガシーシステム維持で 5.4 が必要な場合のみ:

# Remi を一時的に無効化してインストール
sudo yum install -y --disablerepo='remi*' \
    php php-fpm php-cli php-common php-mysql php-pdo

# 既存 Remi PHP を全部消す場合
sudo yum remove -y $(rpm -qa | grep php)
sudo yum clean all
sudo yum install -y php php-fpm

注意: PHP 5.4 は 2015 年に EOL です。セキュリティ脆弱性が放置されているため、本番運用は絶対に避けてください。

対処3: 既存 Remi の PHP バージョンを切り替える

# 現在有効なリポジトリ確認
sudo yum repolist enabled | grep remi

# 例: remi-php72 → remi-php74 へ
sudo yum-config-manager --disable remi-php72
sudo yum-config-manager --enable remi-php74

# パッケージをアップグレード
sudo yum update -y php php-fpm php-cli php-common \
    php-mysqlnd php-pdo php-gd php-mbstring php-xml

# モジュール一覧
yum list installed | grep php

# 設定ファイルの新旧確認 (.rpmnew / .rpmsave が出る)
find /etc/php* -name "*.rpm*"

対処4: CentOS 7 EOL を踏まえた移行

CentOS 7 は 2024-06-30 で EOL。脆弱性修正の YUM 更新が止まっています。本番で長期運用するなら以下のいずれかへ移行してください:

  • Rocky Linux 9: CentOS 7 系の正当後継。dnf install php php-fpm でデフォルト PHP 8.0+
  • AlmaLinux 9: 同じく RHEL 互換。CloudLinux 系の安定運用
  • Ubuntu 22.04 / 24.04 LTS: apt install php8.2-fpm で楽
  • RHEL 9 + Convert2RHEL: 有償サポート
# Rocky Linux 9 の場合
sudo dnf install -y epel-release
sudo dnf module reset php
sudo dnf module enable -y php:8.2
sudo dnf install -y php php-fpm php-cli php-mysqlnd

sudo systemctl enable --now php-fpm

php-fpm 起動後の最小設定

; /etc/php-fpm.d/www.conf

; nginx 連携の場合
user = nginx
group = nginx

; UNIX ソケット (推奨)
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

; プロセス数(メモリと相談)
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10

; スロー実行ログ
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

FAQ

Q: --skip-broken を付けて回避できる?
A: 一見入りますが依存関係が壊れたまま動くので、php スクリプト実行時に「shared library not found」等が頻発します。根本対処(リポジトリ整理)が必要です。

Q: scl の rh-php72 とどっちが良い?
A: Software Collections (SCL) は scl enable rh-php72 bash で切替が必要で手間。Remi はシステム標準として置き換える形なので運用が楽です。

Q: 複数 PHP バージョン共存させたい
A: Remi なら php74 / php82 パッケージ名で並行インストール可能。/opt/remi/php74/root/usr/bin/php 等で直接呼べます。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. curl: (51) SSL: certificate subject name '~' does not match target host name '~'
  2. mount: special device ... does not exist
  3. 【yum install php-fpm】エラー: パッケージ: php-fpm-5.4.16-46.el7.x86_64 (base)
  4. ファイルが開けません: https://centos7.iuscommunity.org/ius-release.rpm を飛ばします。
  5. File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
  6. unable to execute 'gcc': No such file or directory