さくらのレンタルサーバーの perl 切り替えの仕掛け

本館サイト置き場に「さくらインターネット レンタルサーバー・スタンダード」を使っています。私の分が収納されているサーバが数日前に更新されて、 FreeBSD 9.1 64 ビット版へと OS が変わりました。そこで、システムのライブラリとの互換性がなくなっている可能性を考え、perlbrew と cpanm でホーム・ディレクトリにいれていた perl バイナリとモジュールを全部削除することにしました。

さて、新しくなったサーバではシステムの perlバージョンを切り替えられるようになっています。これをどう実現しているのだろうかと、興味本位で覗いてみたところ、次のような仕組みになっているようでした。

  1. ユーザが選択している perlバージョンは ~/.perl.version に 5.14 のように記入されています。
  2. /usr/bin/perl は /usr/local/bin/perl-wrapper へのシンボリック・リンクになっています。
  3. /usr/local/bin/perl-wrapper は小さなバイナリで、~/.perl.version の内容によって perl を選んで exec しているらしい。
    • perl-5.14 は /usr/local/bin/perl5.14.4 を使うらしい。
    • それ以外の perl-5.X は /usr/local/perl/5.X/bin/perl を使うらしい。
  4. さくらのレンタルサーバーの CGI は suexec しているので、ssh でログインしているときと、CGI で動かすときとの両方共、~/.perl.version で選択した perl を動かすようです。

perl-5.14.4 がシステムのデフォルトのようですので、 ssh でログインしているときのために、 ~/.perl.version も 5.14 にしておくのが無難そうだと感じました。

ところで、perl-5.14.4 用にインストール済みのモジュールのリストを眺めていると、DateTime、Try::Tiny、Math::Pari、Test::Base が入っているのはありがたいと思われました。ですが、Class::Data::Inheritable はあるのに、Class::Accessor (か Object::Tiny) がないのは、妙な気がします。他にも、File::Slurp、Path::Tiny、OAuth::Lite、Text::Markdown::Discount、YAML::Syck (か YAML::XS) があったら便利なことでしょうに。 相変わらず local::lib + cpanm は必要なようです。

追記: 新しいサーバには /usr/local/bin/git と /usr/local/bin/vim も入っていました。素晴らしい。