perlbrewがぶっ壊れた話
ちょっと事情があってperl5.6.2をperlbrewでインストールしたらperlbrewがぶっ壊れてしまい、そんな古いものでトラブったレポートなんて書かれてなかったのでその話。
実は5.6.2のテスト自体は以下のように失敗している。
Failed 8 test scripts out of 358, 97.77% okay. ### Since not all tests were successful, you may want to run some of ### them individually and examine any diagnostic messages they produce. ### See the INSTALL document's section on "make test". ### You have a good chance to get more information by running ### ./perl harness ### in the 't' directory since most (>=80%) of the tests succeeded. ### You may have to set your dynamic library search path, ### LD_LIBRARY_PATH, to point to the build directory: ### setenv LD_LIBRARY_PATH `pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness ### LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd t; ./perl harness ### export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness ### for csh-style shells, like tcsh; or for traditional/modern ### Bourne-style shells, like bash, ksh, and zsh, respectively. u=0.18 s=0.17 cu=7.62 cs=3.24 scripts=358 tests=15116 make: *** [test] エラー 1
それでも
% perlbrew install -f perl-5.6.2
なんてして強引にインストールしてしまった結果こんなことになったんだろうか?
その後、ぶっ壊れるまでの過程は以下の通り。
% perlbrew list * perl-5.14.1 perl-5.6.2 /usr/bin/perl (5.10.1) % perlbrew available perl-5.15.2 i perl-5.14.1 perl-5.12.4 perl-5.10.1 perl-5.8.9 i perl-5.6.2 perl5.005_04 perl5.004_05 perl5.003_07 % perlbrew switch perl-5.6.2 Perl v5.8.0 required--this is only v5.6.2, stopped at /home/***/perl5/perlbrew/bin/perlbrew line 6. BEGIN failed--compilation aborted at /home/***/perl5/perlbrew/bin/perlbrew line 6. % cat ~/.perlbrew/init # DO NOT EDIT THIS FILE
このように壊れてしまうともう新しいshellからはperlbrewが正しく使えず、何もできなくなってしまった。
% perlbrew list Perl v5.8.0 required--this is only v5.6.2, stopped at /home/***/perl5/perlbrew/bin/perlbrew line 6. BEGIN failed--compilation aborted at /home/***/perl5/perlbrew/bin/perlbrew line 6. % perlbrew switch perl-5.14.1 Perl v5.8.0 required--this is only v5.6.2, stopped at /home/***/perl5/perlbrew/bin/perlbrew line 6. BEGIN failed--compilation aborted at /home/***/perl5/perlbrew/bin/perlbrew line 6. Perl v5.8.0 required--this is only v5.6.2, stopped at /home/***/perl5/perlbrew/bin/perlbrew line 6. BEGIN failed--compilation aborted at /home/***/perl5/perlbrew/bin/perlbrew line 6. % perlbrew available Perl v5.8.0 required--this is only v5.6.2, stopped at /home/***/perl5/perlbrew/bin/perlbrew line 6. BEGIN failed--compilation aborted at /home/***/perl5/perlbrew/bin/perlbrew line 6.
今回は偶然まだ健康だったshellが残っていたので、そこで改めて
% perlbrew switch perl-5.14.1
とすることで.perlbrew/initを復旧させることができ、難を逃れることができた。
これを機に.perlbrew/initをバックアップしておいた。これでハマってしまった人のため、自分のperl-5.14.1用バックアップを晒しておくので、もしハマってしまいshellも残っていないときはこれを参考に.perlbrew/initを置けば戻れるかも。
% cat init.perl-5.14.1 # DO NOT EDIT THIS FILE export PERLBREW_PERL=perl-5.14.1 export PERLBREW_VERSION=0.27 export PERLBREW_PATH=/home/***/perl5/perlbrew/bin:/home/***/perl5/perlbrew/perls/perl-5.14.1/bin export PERLBREW_ROOT=/home/***/perl5/perlbrew
いざとなれば
% cp ~/.perlbrew/init.perl-5.14.1 ~/.perlbrew/init
で復旧できる。