Laravelにて開発中のアプリケーションでJWTを使おうと思ったら、PHP-sodium が入ってないよって怒られた。
いまくいかなくて悩んでたら、@KCApps さんが助けてくれた話
さくらインターネットのレンタルサーバーにsodium拡張をインストールする方法
とりあえず結論
make じゃなくて gmake を使うとうまくいく
※ PHP8.3環境です。適宜バージョン調整してください。
# 作業用ディレクトリの作成
mkdir -p {~/usr/local/src,~/usr/local/php/extension}
# libsodium のダウンロードとコンパイル
cd ~/usr/local/src
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.20.tar.gz
tar xzvf libsodium-1.0.20.tar.gz
cd libsodium-1.0.20
./configure --prefix=$HOME/usr/local
make && make check
make install
# PHP拡張のダウンロード&コンパイル
cd ~/usr/local/src
wget https://github.com/php/php-src/archive/php-8.3.8.zip
unzip php-8.3.8.zip
mv php-src-php-8.3.8/ext/sodium ./sodium-php-8.3.8
cd sodium-php-8.3.8
/usr/local/php/8.3/bin/phpize
./configure --with-php-config=/usr/local/php/8.3/bin/php-config --with-sodium PKG_CONFIG_PATH=$HOME/usr/local/lib/pkgconfig/ LDFLAGS=-L$HOME/usr/local/lib/
make
gmake test
# インストール
cp modules/sodium.so ~/usr/local/php/extension/sodium.so
cat <<EOF >> $HOME/www/php.ini
extension=$HOME/usr/local/php/extension/sodium.so
EOF
# 確認
php -c ~/www/php.ini -m | grep sodium
# sodium と表示されればOK
CLIで ~/www/php.ini を読み込む設定を追加(Optional)
cat <<EOF >> $HOME/.bash_profile
export PHP_INI_SCAN_DIR="$HOME/www/"
EOF
source ~/.bash_profile
php -m | grep sodium
# sodium と表示されればOK
Waht's sodium?
Sodium is a modern, easy-to-use software library for encryption, decryption, signatures, password hashing, and more.
Sodium は、暗号化、復号化、署名、パスワード ハッシュなどのための最新の使いやすいソフトウェア ライブラリです。
これをPHPで利用するための拡張が PHP-sodium だそうな。
具体的にはJWTで EdDSA signer
に対応する際に導入されたらしい。
うごかすためには、レンタルサーバに Libsodium
と PHP拡張のコンパイルが必要。
かつて intl
を入れるときにやった手順と同じような感じでできるやろう。と気軽に考えていたらどん詰りました。
改めて見返すと、 intl
のときも gmake
使ってました。思い込みダメゼッタイ。
# スペック確認
$ uname -a
FreeBSD www0000.sakura.ne.jp 11.2-RELEASE-p16 FreeBSD 11.2-RELEASE-p16 #2: Mon Dec 9 13:33:15 JST 2024 (中略) amd64
$ php -v
PHP 8.3.8 (cli) (built: Jun 11 2024 22:17:58) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.8, Copyright (c) Zend Technologies
with Zend OPcache v8.3.8, Copyright (c), by Zend Technologies
make と gmake
Ref: https://system.blog.uuum.jp/entry/make
make は歴史が長く、何度も rewrite されているので、様々な実装が存在します。基本的な処理は同じですが、実装によって処理が多少異なります。 主な実装は次の3つぐらいかなと思います。
- System V make
- BSD make
- GNU make
System V の make は恐らくオリジナルの実装に一番近いんじゃないでしょうか。僕は使ったこともないので詳細はわかりません。 BSD系UNIXを使っている方は BSD make を使う機会が多いんじゃないかと思います。
最近のUNIX環境では、GNU make ほぼ一択じゃないでしょうか。機能的にも一番上だし、UNIX環境だとほぼ使えるし。
実装の違いにより、動作が変わってしまうのですね。
gmakeのほうがより一般的というか、環境に依存しない挙動が期待できるみたいなので、そちらを使用したほうが安定するみたいです。