phpbrew

phpbrewで、mcryptバリアントがインストールできない

こんにちは、ウチイダです。

最近またPHPを触ることが増えてきていて、Windows11のWSL2上にphpbrewで環境構築をしています。

今回はmcryptを使いたくなり、バリアントを追加しようとしたらうまくいかなかったというトラブルです。

バリアントをインストールしようとしたら、以下のようなエラーが。

$ phpbrew ext install mcrypt
Downloading https://pecl.php.net/rest/r/mcrypt/stable.txt via curl extension
[==================================================================] 5.00/5.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/1.0.4.xml via curl extension
[==================================================================] 736.00/736.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/stable.txt via curl extension
[==================================================================] 5.00/5.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/1.0.4.xml via curl extension
[==================================================================] 736.00/736.00B 100%
Downloading https://pecl.php.net/get/mcrypt-1.0.4.tgz via curl extension
[==================================================================] 26.42/26.42KB 100%
===> Extracting to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext...
===> Installing mcrypt extension...
Log stored at: /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log
Changing directory to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt
===> Phpize...
Error: Command failed: phpize > /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log 2>&1 returns:

調べてみたところ、どうやらautoconfのパッケージが入ってなかったり、バージョンが古いと、phpizeでエラーするみたいです。

とりあえずautoconfをインストールします。

$ sudo apt install autoconf

再度バリアントのインストールを試みると、今度は別のエラーが出ました。

$ phpbrew ext install mcrypt
[ ] mcrypt extension is disabled.
===> Installing mcrypt extension...
Log stored at: /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log
Changing directory to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt
===> Running make clean: /usr/bin/make -C '/home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt' --quiet 'clean'
===> Phpize...
===> Configuring...
Error: Command failed: ./configure '--with-php-config=/home/y-uchiida/.phpbrew/php/php-7.4.23/bin/php-config' >> '/home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log' 2>&1 returns:

調べてみたけど、よくわかりませんでした…

ふと、バリアントは、パッケージの本体がないとインストールできないという仕様に思い至りました。

WSLのほうでmcryptのパッケージを入れてなかったような気がしたので、インストール。

$ sudo apt-get install libmcrypt-dev
# ...(中略)...
The following NEW packages will be installed:
  libmcrypt-dev

やっぱり入ってませんでした。

再度、mcrypt バリアントをインストールします。

$ phpbrew ext install mcrypt
[ ] mcrypt extension is already disabled.
===> Installing mcrypt extension...
# ...(中略)...
[*] mcrypt extension is enabled.
Done.

今度はうまくいったみたいです。

最後に、phpbrewで管理しているPHPに、バリアントを追加します。

$ phpbrew install 7.4.20 +mcrypt
===> phpbrew will now build 7.4.20
===> Loading and resolving variants...
# ...(中略)...
Congratulations! Now you have PHP with 7.4.20 as php-7.4.20

* To configure your installed PHP further, you can edit the config file at
    /home/y-uchiida/.phpbrew/php/php-7.4.20/etc/php.ini

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.4.20

Or you can use switch command to switch your default php to php-7.4.20:

    $ phpbrew switch php-7.4.20

Enjoy!

ビルドしなおしなので、結構時間かかります。

phpinfo を見てみると、mcryptの項目が増えていることが確認できました。

まとめ

今回必要だったのは、以下のコマンドを実行することでした。

  • autoconf パッケージのインストール( sudo apt install autoconf )
  • mcyrpt パッケージのインストール( sudo apt-get install libmcrypt-dev )
  • mcrypt バリアントを含めて、phpbrewで再ビルド(sudo phpbrew install 7.4.20 +mcrypt)

以上です。

あなたのお役に立てたらうれしいです。

phpbrew からインストールしたPHPでartisan migrae できない

プロジェクトごとにPHPのバージョン管理をするため、先日、phpbrewを導入しました。

しばらくは問題なく使えていたのですが、Laravelの開発のためartisanコマンドを実行したときにエラーが。

$ php artisan migrate

   Illuminate\Database\QueryException  : could not find driver (SQL: select * from information_schema.tables where table_schema = laravel_chap5 and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673|

  Exception trace:

  1   PDOException::("could not find driver")
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=localhost;port=3306;dbname=laravel_app", "laravel_user", "laravel_passwd", [])
      /var/www/public/laravel_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

PDOExeption::(“coult not find driver”) となってます。PDOドライバーがない??

phpのインストール状況を見てみました。

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers =>

むむ…。確かに設定されていない…

defaultバリアントにもpdoは含まれているんですけどね…念のためインストールしなおし。

$ phpbrew install 7.4.21 +default +pdo +mysql
===> phpbrew will now build 7.4.21
===> Loading and resolving variants...
Checking distribution checksum...
Checksum matched: 36ec6102e757e2c2b7742057a700bbff77c76fa0ccbe9c860398c3d24e32822a
===> Distribution file was successfully extracted, skipping...

# 中略 #

* We found that you enabled 'mysql' variant, you might need to setup your
  'pdo_mysql.default_socket' or 'mysqli.default_socket' in your php.ini file.

* To configure your installed PHP further, you can edit the config file at
    /home/uchiida/.phpbrew/php/php-7.4.21/etc/php.ini

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.4.21

Or you can use switch command to switch your default php to php-7.4.21:

    $ phpbrew switch php-7.4.21

Enjoy!

バリアントをつけなおしてみても、状況は変わらず。うーんなんなのか…

メッセージをよく見てみると、「mysqlバリアントを有効にするには、php.iniでソケットをセットアップする必要があるかもよ」と書かれています。

改めてGithubのREADMEを見直してみたところ、phpbrew config でiniを修正することができると書いてあります。

https://github.com/phpbrew/phpbrew/blob/master/README.ja.md#extention-installer

記載の通りにコマンド入力したら、エディタが立ち上がったので、そのまま保存して終了しました。

これで直ったのかな~と思いつつ、PHPの情報を見てみると、、、

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers => mysql
PDO Driver for MySQL => enabled

直ってました。artisan migrate コマンドも実行できました。

iniファイルの変更は、別途行わないといけないみたいですね…

以上です。あなたのお役に立てればうれしいです。