タイトルがちょっと大げさです。
優秀な方がやれば多分さらっとできるのでしょうが。。。
私には無理でした。
経緯
CPIのACE01を仕事で使っているのですが、このサーバのPerlがなんと5.8.9なんです。
PHPは5.3と5.2が使えるのに、Perlは虐げられている! と思ったので、plenv入れて見返してやろうと思ったのでした。
も少しいうと、Perl5.8.9だとMojolicious使えないじゃん、というのが一番の趣旨でした。
ネット上探しても、どうもACE01に入れたという情報が見当たりません。
ちなみに、perlbrewも同様です。
ACE01使っている層はそういうことに興味がない層なのか、、、?
やってみたこと
ACE01はSSHでの接続はできますが、gitどころかcurlも使えません。
なので、GitHubから圧縮ファイルをいただいてきて、展開して、、、という感じです。
で、最近のplenvはPerl-Buildというpluginがないと動かないらしいので、それも持ってきました。
まずは正攻法で、パスを追加してみます。
ACE01はtcshです。
ですが、中身で関数を使っているようなので、tcshでは動かないのかな、と素人なりに考えました。
一応試しに。
vi .tcshrc
set pathset path = ( $HOME/.plenv/bin $path )
ですが、うんともすんとも言いません。
そもそも記述が間違えている可能性もあり。
時間がないので、bashに切り替えて試してみることにしました。
bash
echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
で、plenvしてみると、一応パスは通った模様。
でも、Command not found
いろいろ見ているうちに、単純にshebang行が通っていないような予感。
なので、ひとまず、
# !/usr/bin/env bash
を、下のように変更
# !/usr/local/bin/bash
に変更。
自分に知識がないので、そもそもこれが間違っているかもしれないが、、、
そうしたら、ひとまず起動した模様。/usr/bin/bash
だと動かなかったけど、/usr/local/bin/bash
だと一応動きを見せてくれたのでこれでいいんじゃない、的なかんじです。
追記:2013.12.06
syohexさんにコメントいただいた内容で環境を確認してみました。
% which env
env: Command not found.
% which bash
/usr/local/bin/bash
% ls -l `which bash`
-rwxr-xr-x 1 0 0 763312 Oct 4 11:29 /usr/local/bin/bash
% bash --version
GNU bash, version 4.1.10(0)-release (amd64-portbld-freebsd8.3)
でした。
/usr/local/bin/bash
であっているようです。
追記、おわり
、、、?
なんだか、膨大な量のプロセスが立ち上がってきます。
最終的に、プロセスが上限に達してすごく怒られます。。。
killとか間に合いません。
こりゃ、ダメですね。。。
ACE01のbashが、そもそもまともにユーザ側に提供されているのかどうかもわかりません。
私はシェルスクリプトはほぼほぼわからないので、ギブアップです。
ちなみに、perlbrewのほうがまだちゃんと動きそうな雰囲気を見せてくれました。
ただ、どのオプションつけても、help(オプションが間違えているときに出るヤツです)ばっかり出ます。
今日はやめたー、というところです。
明日以降、perlbrewで試してみて、動いたらご報告します。。。
#もしくは、plenvの旧バージョン(perlでできていたヤツ)でやってみるというのもあり、、、なのかな?
追記:2013.12.06
plenv1.6.0はどうか
コメント欄でtokuhiromさんに教えてもらったので、Perl-Buildも試してみました。
結論、うまくいかず。
その前に、plenvの1.6.0を試していました。
ACE01で発生する現象がPerl-Buildの場合と同じだったので下記に記録します。
アップロードして、パーミッションをちょっといじってパスを通したら動作するにはしたんです。
シェル版と違って、Perlだから立ち上がり自体は問題なくて。
でも、なんかおかしい。。。
まず、plenv available
をしても、何も返ってこないのです。
ダメ元でplenv install 5.16.2
としてみたところ、エラーメッセージが。
% plenv install 5.16.2
Creating /usr/home/**********/.plenv/build(building directory)
Install 5.16.2 to /usr/home/**********/.plenv/versions/5.16.2
Fetching 5.16.2 as /tmp/C1krSBgzkw/perl-5.16.2.tar.bz2 (http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2)
Cannot get file from http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2: 599 Internal Exception at /usr/home/**********/.plenv/bin/../share/plenv/lib/perl5/Perl/Build.pm line 108.
要は、HTTP::Tinyでコケているようです。
そこで、Build.pmのdieしている部分をData::Dumperでダンプしてみました。
すると、
% plenv install 5.16.2
Creating /usr/home/**********/.plenv/build(building directory)
Install 5.16.2 to /usr/home/**********/.plenv/versions/5.16.2
Fetching 5.16.2 as /tmp/TfZQSU72oL/perl-5.16.2.tar.bz2 (http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2)
$VAR1 = {
'success' => '',
'headers' => {
'content-type' => 'text/plain',
'content-length' => 80
},
'status' => 599,
'content' => 'Could not connect to \'search.cpan.org:80\': IO::Socket::INET: Bad protocol \'tcp\'
',
'reason' => 'Internal Exception',
'url' => 'http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2'
};
とのこと。
多分、プロトコルが不正だよ、みたいなことを言われてるんだと思います。
ネットで見かけたワンライナーを打ってみます。
% perl -e 'print join(":",getprotobyname( "tcp" ))'
反応なしです。
HTTP::TinyがIO::Socket::INETを呼んでいて、IO::Socket::INETはgetprotobyname()の戻り値を使うのに反応がないからそこで終了しているような。
要は、このサーバだとHTTP::Tinyが使えない、ということかなーと。
もぅ…だめ、なのか……
でも、ちょーくやしーので、ムリヤリなんとかしてやろうと思いました。
というか、ダウンロードとか手動でやればいいじゃん、的な。
(plenvの凄さに対して、バカっぽい行動のような気がしますが、、、申し訳ありません。)
まずは、ダウンロードされたPerlがどこに保存されるのかを確認。
VirtualBox上のDebianにplenv(2.1.1ですが)入っているので、参考にしました。
.plenv/cache
にありました。
でも、これは1.6.0でも同じなの?
と思ったけれど、先ほどのメッセージからして、/tmp
以下にランダムな名前でディレクトリを切って、そこにダウンロードしているようです。
うーん、そうなると、手動でダウンロードして配置するってのが難しくなります。。。
ということで、Build.pmの100行目周辺をこんな風に勝手に変えました。
if ($response->{success}) {
print "Downloaded $url to $path.\n";
} else {
# die "Cannot get file from $url: $response->{status} $response->{reason}";
print "Cannot get file from $url: $response->{status} $response->{reason}\n\n";
system ("wget $url -O $path");
}
dieしないで、メッセージだけprintして、systemコマンドでwget叩いてダウンロード、という感じです。
よし、イケた!! と思いました。
二重のトラップです
これでうまくいきました。ダウンロードに関しては。
Saving to: `/tmp/63I1FEUa4g/perl-5.16.2.tar.bz2'
100%[=========================================================================>] 13,725,101 1.01M/s in 14s
2013-12-06 13:06:48 (936 KB/s) - `/tmp/63I1FEUa4g/perl-5.16.2.tar.bz2' saved [13725101/13725101]
Configuring perl '5.16.2'
rm -f config.sh Policy.sh
Auto-guessed '5.16.2'
sh Configure -Dprefix=/usr/home/**********/.plenv/versions/5.16.2 -de -A'eval:scriptdir=/usr/home/**********/.plenv/versions/5.16.2/bin'
uname: not found
expr: not found
expr: not found
expr: not found
tr: not found
tr: not found
Beginning of configuration questions for perl5.
Checking echo to see how to suppress newlines...
...using -n.
The star should be here-->*
First let's make sure your kit is complete. Checking...
split: not found
split: not found
cat: /usr/home/**********/.plenv/build/perl-5.16.2/UU/x??: No such file or directory
Looks good...
tr: not found
tr: not found
tr: not found
Configure: Fatal Error: cannot figure out how to translate newlines with 'tr'.
Installation failure: sh Configure -Dprefix=/usr/home/**********/.plenv/versions/5.16.2 -de -A'eval:scriptdir=/usr/home/**********/.plenv/versions/5.16.2/bin' at /usr/home/**********/.plenv/bin/../share/plenv/lib/perl5/Perl/Build.pm line 283.
まだトラップがあったようです。
UNIXコマンドが大量に欠如していて、終わっちゃいました。
なんか、plenvに関してはひとまず諦めます。。。
追記、おわり