limitusus’s diary

主に技術のことを書きます

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

で復旧できる。