PHP が OS のアップデートでエラーになってた
◆ 古い環境でコンパイルした phpbrew を見てた
◆ 古い php だと共有ライブラリが見つからなくなってた
◆ 再ビルドし直して解決
◆ php コマンドが phpbrew をみるようになってたので PATH を変更して標準インストールの php を参照するように修正必要だった
◆ 古い php だと共有ライブラリが見つからなくなってた
◆ 再ビルドし直して解決
◆ php コマンドが phpbrew をみるようになってたので PATH を変更して標準インストールの php を参照するように修正必要だった
動かない
しばらくバージョン挙げてなかった fedora をアップグレードしました24 くらい?だったのを 27 にしました
それからしばらく経っていたのですが php をちょっと使いたくなって実行すると
% php -a
php: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
php: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
なんかエラーが出ています
dnf で php のアップデートをしても最新版のようです
その他全部のパッケージをアップデートしても変わらずでした
エラーメッセージを見ると共有ライブラリがないみたいです
OS アップデートで見たことあるようなメッセージですが エラーもなく最新版に更新できたのに出るのは変な気もします
原因
考えられる原因を探してると 「そういえば phpbrew つかっていたっけ」 ということに気づきました% type php
php is /home/me/.phpbrew/php/php-7.1.0/bin/php
php is /home/me/.phpbrew/php/php-7.1.0/bin/php
確認すると phpbrew の php をみています
alias じゃなくて PATH で phpbrew を見るようになってるようです
PATH は
PATH=/home/me/.phpbrew/php/php-7.1.0/bin:/home/me/.phpbrew/bin:~~
ひとまず解除して通常の php を使うようにしよう と思ったのですが phpbrew 自体も php を使うので解除もできません
管理に php 自身を使うので別のツールなしでできていいな と思っていたのにこういう問題があるのですね……
% phpbrew --help
php: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
php: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
とりあえず原因が phpbrew の php をみてることだろうと予測できたので /bin にある php をみるようにしてみます
% export PATH="/bin:$PATH"
% type php
php is /bin/php
% type php
php is /bin/php
標準の php を使うようにしたら無事動きました
phpbrew を動くように
このまま標準 php を使うなら問題ないですが phpbrew でバージョン選択できるようにしたいですたぶんですが 古い環境でビルドしてインストールしたのでその頃の環境の libreadline.so.6 を参照しようとしてエラーになっています
対策は
- 古い環境にあったはずの libreadline.so.6 を持ってくる
- php を新しくビルドし直す
のどちらかでできそうな気がします
せっかく新しい環境にアップデートしたのに古いままのソフトのために古いライブラリを配置するのも気が進まないので新しくビルドし直してインストールすることにします
というのも 動かない phpbrew のバージョンはちょうど標準の php のバージョンより古いものでした
基本古いのを使うことはなくて 標準のバージョンより新しいのを使うために phpbrew を使っていたので この際古いのはアンインストールしてしまうことにしました
% phpbrew install 7.2
use だと一時的なので switch します
switch にしないともう一度 shell を開き直したらまた最初のエラーになります
% phpbrew switch 7.2.1
古いのは消しておきます
% phpbrew remove php-7.1.0
ところで
install だと 7.2 まで入力すれば 7.2.x の中で最新が自動で選ばれます
switch/use はフルバージョン名が必要です
remove になるとバージョン名に加えて php- のプレフィックスまで必要になります
install/use/switch は省略したらその中の最新で remove もバージョンのみでよくなればいいのですけど なんで揃ってないんでしょうね
あと確認のときの [Y/n] は入力も Y か n の必要があります
大文字はデフォルトって意味で yes だから y だと入力したらもう一度聞かれました
no のときの N もダメでした
細かいところで気が利かないんですね
さらにもうひとつ remove で消しても build/ と distfiles/ にファイルが残ります
clean というコマンドがあったのでやってみてもダメでした
消す前にやる必要があるとか remove じゃなく purge じゃないとダメとかなのかな?