クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

今更ながらPHPを7.1→7.4にアップデートしたら、依存関係の解決で苦戦した話

こんにちは、ちーかまです!
2023年7月1日をもって、Google アナリティクスがユニバーサルアナリティクスからGoogle アナリティクス 4に完全移行しましたね。

移行に対応するため社内ポータルサイトのひとつでWordpressPHPのバージョンアップを行ったのですが、PHPのバージョンアップでパッケージの依存関係を解決するために難航しました...
忘備録のために、今回はその件について書こうと思います。

環境構成

アップデート前

アップデート後

やったこと

まずはじめに、PHP7.4をインストールしました。

# remiリポジトリインストール
$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
 
# 古いPHP削除
$ sudo yum remove php-*

# 新しいPHPインストール
$ sudo yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php74 php php-bcmath php-cli php-common php-devel php-embedded php-gd php-gmp php-json php-mbstring php-mcrypt php-mysqlnd php-opcache php-pdo php-process php-pspell php-xml php-pecl-apcu

実行完了したので、バージョンを確認してみよう!とコマンド実行したところなんと警告が...

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'gd' (tried: /usr/lib64/php/modules/gd (/usr/lib64/php/modules/gd: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/gd.so (/lib64/libraqm.so.0: undefined symbol: fribidi_get_bracket_types)) in Unknown on line 0

gdがロードできていないようですね。どうもfribidi_get_bracket_typesが原因の様子。
調べたところfribidiのバージョンが1.0 未満の場合に発生する問題であるとのことだったため、fribidiを1.0以降のバージョンにアップデートしました。

# fribidiを削除
$ sudo yum -y remove fribidi

# 1.0以降のfribidiをインストール
$ sudo rpm -ivh http://mirror.centos.org/centos/7/os/x86_64/Packages/fribidi-1.0.2-1.el7_7.1.x86_64.rpm

そして改めてgdインストールしようとしたところ、libraqm.so.0の要求が...

$ yum install --enablerepo=remi-php74 php-gd
読み込んだプラグイン:fastestmirror
remi-php74                                                                                                                                                                         | 3.0 kB  00:00:00     
remi-php74/primary_db                                                                                                                                                              | 263 kB  00:00:01     
Loading mirror speeds from cached hostfile
 * remi-php74: rpms.remirepo.net
 * remi-safe: rpms.remirepo.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-gd.x86_64 0:7.4.33-7.el7.remi を インストール
--> 依存性の処理をしています: libgd.so.103()(64bit) のパッケージ: php-gd-7.4.33-7.el7.remi.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ gd3php.x86_64 0:2.3.3-7.el7.remi を インストール
--> 依存性の処理をしています: libraqm.so.0()(64bit) のパッケージ: gd3php-2.3.3-7.el7.remi.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: gd3php-2.3.3-7.el7.remi.x86_64 (remi-safe)
             要求: libraqm.so.0()(64bit)
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

ということでlibraqm.so.0をインストールしてから、再度gdインストール。

$ wget http://ftp.iij.ad.jp/pub/linux/Fedora/epel/7/x86_64/Packages/l/libraqm-0.7.0-4.el7.x86_64.rpm
$ rpm -ivh libraqm-0.7.0-4.el7.x86_64.rpm

$ yum install --enablerepo=remi-php74 php-gd

無事実行完了したのでバージョンを確認してみよう!とコマンド実行したところなんとまたまた警告が...!

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'gd' (tried: /usr/lib64/php/modules/gd (/usr/lib64/php/modules/gd: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/gd.so (/lib64/libraqm.so.0: undefined symbol: hb_ft_font_set_load_flags)) in Unknown on line 0

今度はhb_ft_font_set_load_flagsが原因の様子。
harfbuzzのバージョンが合ってないかも、と思ったのでとりあえず削除してインストールし直してみました。

# harfbuzzを削除
$ sudo yum -y remove harfbuzz

# harfbuzzをインストール
$ wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/harfbuzz-1.7.5-2.el7.x86_64.rpm
$ rpm -ivh harfbuzz-1.7.5-2.el7.x86_64.rpm

そして改めてibraqm.so.0をインストールしてからのgdインストールしたところ、とうとう成功しました...!

$ php -v
PHP 7.4.33 (cli) (built: Jun  6 2023 16:33:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies

まとめ

はじめてのPHPバージョンアップだったこともあり、想定していたよりも作業が難航し途中で不安になりました。
とはいえ本来の目的であるGoogle アナリティクス 4への移行作業としてはまだまだ序盤なため、次回執筆時はWordpressプラグインのアップデートについて触れられたらなと思います!


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp