見出し画像

【Amazon Linux 2023 地獄日記】PHP 8.2が入らない!?八方塞がりの迷路から生還した唯一の鍵

ちなみに、知人との共有メモですので参考にしないでね笑

どうもこんにちは。Amazon Linuxの迷宮に迷い込んだインフラエンジニア、またはただの被害者です。
今回は、Amazon Linux 2023(RHEL9ベース)にPHP 8.2を入れようとして壮絶に爆死した末路、「最初に 〇〇すればいいだけだった・・・」という話を、面白おかしく、涙をこらえつつ綴っていきます。


第一章:Amazon Linux 2023にPHPを入れようとしたら罠だった件

  • いつものごとく、Laravelでも動かそうかな〜と思って立ち上げた Amazon Linux 2023。
    Fedora(Red Hat 9)ベースだし、dnfも使えるし、PHPぐらい秒で入るでしょ〜〜。

そんな軽い気持ちで放ったコマンドがこちら。

sudo dnf install php
・・・
php -v
PHP 8.4.xx

はい、PHP 8.4 登場(バグ付き)

いやいやいや、誰も8.4なんて頼んでないんですよ。
「まだ出てよちよちの子を引っ張り出してきてんじゃないよ!?」


第二章:REMI?EPEL?そんなもの、もう無い。

「RHEL系ならREMI入れればいいんでしょ?昔からの知恵じゃん!」

意気揚々と以下を試す。

sudo dnf install epel-release

No match for argument: epel-release
Error: Unable to find a match: epel-release

は?

そしてREMIリポジトリを手動で持ってこようとしても、

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

エラー: このOSはサポートされてないよ〜(by remiちゃん)

Amazon Linux 2023、REMIにもEPELにも見捨てられた孤独な戦士であることが判明。
ここで一つ学びました。「Amazon Linux 2023、マジで孤高。」


第三章:SSL?Proxy?知ったことか!という無慈悲な壁

ではせめて手動でRPMダウンロードして……と思っていたのですが。

うちの会社、SSL通信はProxyを通さないとダメなのです。
が、Amazon Linux 2023くん、プロキシ越しのSSL接続にめちゃくちゃ弱い。

curl -O https://www.php.net/...

curl: (56) Received HTTP code 403 from proxy after CONNECT

はい、死んだ。
export http_proxy とか https_proxy とかやっても、DNSが死んでる、証明書が死んでる、という デバフの嵐。


第四章:nginx先に入れたら後戻りできない呪いがかかる

「とりあえずnginxだけでも入れておくか」と思って軽率に以下を実行。

sudo dnf install nginx

これは問題なくインストール完了!
ここまでは良かった。
問題はこの後、PHPを入れようとしたときです。

sudo dnf install php82

結果は──またもやPHP 8.4
しかも バージョン指定しても8.4しか候補が出てこない地獄構成。


第五章:最後の鍵、それは「最初にdnfでphp82を入れる」ことだった

途方に暮れて調べまくっていたら、ひっそりとAmazon Linux公式に「php82」という名前でパッケージが存在するという情報を発見。
その時、すべての点が繋がったのです。

「もしかして……最初に php82 を入れれば、全部うまくいくのでは……?」

✅ 勝利ルート:最初に PHP8.2 を入れる手順

以下の手順で、見事にPHP 8.2をインストール&動作確認できました!

インストール(必須モジュール付き)

sudo dnf install php82 php82-php php82-php-fpm php82-php-mysqlnd php82-php-mbstring php82-php-xml php82-php-cli

バージョン確認

php -v
PHP 8.2.xx

出ました!PHP 8.2!

この状態であれば、LaravelもWordPressも問題なし!
FPMで nginx とも連携できます。


第六章:nginxとの連携もバッチリ(サンプル設定)

server {
 listen       80;
 listen       [::]:80;
 server_name  _;
 root         /usr/share/nginx/html;

 # Load configuration files for the default server block.
 include /etc/nginx/default.d/*.conf;

   error_page 404 /404.html;
   location = /404.html {
   }

   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
   }
}

ディレクトリパスは自分の環境に合わせてね〜
そして /usr/share/nginx/html/index.php にこれを書いて:

<?php phpinfo(); ?>

ブラウザでアクセスすると・・・感動のphpinfoページとご対面です!👏


結論:Amazon Linux 2023は優しい顔してめちゃくちゃクセ強い
• dnfでPHPを入れたい? → 先に php82 をインストールせよ
• REMIもEPELもない? → そう、君はひとりだ。
• nginxを先に入れた? → ご愁傷様。PHP8.4の世界へようこそ。
• Proxy経由でSSL繋がらない? → curlもwgetも全滅!


まとめ

問題 回避策
REMI / EPEL 入らない 最初から諦める
dnf install php82を明示して一番最初に入れる
Proxy越しSSL死ぬ dnf優先。外でRPMダウンロードして持ってこい
nginx先に入れた リビルド or PHP強制ダウングレード地獄


この経験から得た教訓はただひとつ。

「Amazon Linux 2023でPHPを使いたければ、最初に dnf install php82 をしろ」

──以上、Amazon Linux 2023サバイバル記でした!


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
【Amazon Linux 2023 地獄日記】PHP 8.2が入らない!?八方塞がりの迷路から生還した唯一の鍵|む’らぴ
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1