2 つの Web アプリを単一のサーバー (debian10) に移行しようとしていますが、どちらも異なるバージョンの PHP が必要であり、どちらも正常に動作するために cURL 拡張機能が必要です。
php5.6-curl は libcurl v3 を使用します
php8.1-curl は libcurl v4 を使用します
まずphp5.6-curlをインストールし、php8.1-curlをインストールしようとしたところ、aptが通知をスローしました。The following packages have unmet dependencies: php8.1-curl : Depends: libcurl4 (>= 7.56.1) but it is not going to be installed
apt で -f を使用すると、php5.6-curl が削除されます...
これら 2 つの libcurl ライブラリを単一のシステムで使用できるようにする最もエレガントな方法は何ですか?
ありがとう、ロバート
編集: 私の知る限り、問題は libcurl3 と libcurl4 が同じファイル /usr/lib/x86_64-linux-gnu/libcurl.so.4 を共有しており、パッケージを再インストールするとそれが変更されることです (libcurl3<->libcurl4)。php[5.6,8.1]-fpm はライブラリをロードしようとしますが、不適切な libcurl.so.4 バージョンを取得したライブラリは失敗し、php はそのモジュールを使用できません。
おそらく、4eg php5-curl バイナリにユーザー定義パスからのライブラリを使用するように強制するエレガントな方法があるでしょうか?
答え1
両方のアプリを、必要なものがすべて含まれるコンテナーに配置します。
答え2
私は自分で回避策を見つけました。同様の問題を解決したい場合は、最もエレガントな方法ではない私の方法を実行してください。
- 必要なすべての php5.6 パケットをインストールします。
- /usr/lib ディレクトリを /usr/php56libs にコピーします。
- 私の場合は、systemd サービス ファイルを編集します。
systemctl edit --full php5.6-fpm
- 下サービスセクションに環境変数を追加します:
Environment="LD_LIBRARY_PATH=/usr/php56libs"
- これで、apt (強制
-f
オプション付き) を使用してすべての php8.1 パケットをインストールできます。これにより、/usr/lib から競合するライブラリがすべて削除されますが、php5.6-fpm サービスは /usr/php56libs のものを使用するため、問題にはなりません。
答え3
SSH 経由でサーバーにログインします。ユーザーのホーム ディレクトリにいることを確認します。インストールするバージョンを見つけます。ファイルを解凍します。この新しいディレクトリに移動します。nano または vim を使用して .bash_profile を開きます。例: 必要なファイルを .bash に追加して更新します。.bash_profile を更新して、新しい構成を有効にします。curl の場所とバージョンを確認します。