Laravelにて開発中のアプリケーションでJWTを使おうと思ったら、PHP-sodium が入ってないよって怒られた。
いまくいかなくて悩んでたら、@KCApps さんが助けてくれた話
さくらインターネットのレンタルサーバーにsodium拡張をインストールする方法
追記
CLIで ~/www/php.ini を読み込む設定を追加(Optional)
がちゃんと働いていなかったので修正しました。
とりあえず結論
make じゃなくて gmake を使うとうまくいく
# 作業用ディレクトリの作成
mkdir -p {~/usr/local/src,~/usr/local/php/extension}
# libsodium のダウンロードとコンパイル
cd ~/usr/local/src
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
tar xzvf libsodium-1.0.18.tar.gz
cd libsodium-1.0.18
./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.0.23.zip
unzip php-8.0.23.zip
mv php-src-php-8.0.23/ext/sodium ./sodium-php-8.0.23
cd sodium-php-8.0.23
/usr/local/php/8.0/bin/phpize
./configure --with-php-config=/usr/local/php/8.0/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/
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-p15 FreeBSD 11.2-RELEASE-p15
(中略)/usr/obj/home/pkg/src/sys/GENERIC amd64
$ php -v
PHP 8.0.25 (cli) (built: Nov 8 2022 13:31:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.25, Copyright (c) Zend Technologies
with Zend OPcache v8.0.25, 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のほうがより一般的というか、環境に依存しない挙動が期待できるみたいなので、そちらを使用したほうが安定するみたいです。