2011-01-07
さくらのレンタルサーバーライトプランでCPANモジュールをインストールするためのスクリプト
さくらのレンタルサーバーライトプラン(月額125円)でCPANモジュールをインストールするためのWebアプリケーション(CGIスクリプト)を書きました。さくらのレンタルサーバーライトプランでは、SSHやTelnetを使えないために、CPANモジュールのインストールは障壁の高いものになってはいますが、このツールを使うとあら簡単に、Webブラウザ上からモジュールをインストールすることができます。
Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順と同じ手順でさくらのレンタルサーバー上にFTPでアップロードしてください。app.cgiのパーミッションは755にする必要があります。
ディレクトリ構成は以下のようにします。
sakuracpanm - app.cgi
モジュールのインストールはテキストボックスにモジュール名を入力して、インストールボタンを押すだけです。初回のCPANモジュールのインストールはcpanmの依存モジュールをインストールする必要があるため時間がかかります(5〜10分)。気長に待ってください。だれでも利用できるので、インストールが終わったらすぐにこのツールを削除するか、パーミッションを000などにするなどしてください。
#!/usr/bin/perl use FindBin; use lib "$FindBin::Bin/lib"; use Mojolicious::Lite; use File::Copy 'move'; use LWP::UserAgent; use utf8; # トップページ get '/' => sub { my $self = shift; my $module = $self->req->param('module'); $self->stash(error => ''); $self->stash(output => ''); if ($module && $module =~ /^[:\w]+$/) { my $home = $ENV{DOCUMENT_ROOT}; $home =~ s#/www$##; my @output; my @cpanm; eval { chdir $home or die qq{Can't change directory "$home": $!}; my $ua = LWP::UserAgent->new; my $res = $ua->get('http://xrl.us/cpanm/'); my $cpanm_content; if ($res->is_success) { $cpanm_content = $res->content; } else { die qq{Can't donwlaod "cpanm"}; } push @cpanm, '#!/usr/bin/perl'; push @cpanm, "BEGIN {" . "\$ENV{HOME} = '$home';" . "use lib '$home/perl5/lib/perl5';" . "}"; push @cpanm, $cpanm_content; open my $write_fh, '>', 'cpanm' or die qq{Can't open "cpanm" for write: $!}; print $write_fh join("\n", @cpanm); close $write_fh; my $output = `perl cpanm --local-lib=$home/perl5 $module 2>&1`; push @output, split /\n/, $output; }; return $self->render(error => $@) if $@; $self->render(output => \@output); } elsif ($module) { $self->stash(error => 'モジュール名を正しく入力してください'); $self->render; } else { $self->render; } } => 'index'; app->start; __DATA__ @@ index.html.ep <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>さくらのレンタルサーバーライト CPANモジュールインストール</title> </head> <body> <h1>さくらのレンタルサーバーライト CPANモジュールインストール</h1> <pre> # インストールしたモジュールを利用したい場合はスクリプト(app.cgi)に以下のように記述します。 use FindBin; use lib "$FindBin::Bin/../../perl5/lib/perl5"; # このスクリプトはだれもが利用可能なのでインストールが終了したらすぐに削除してください。 </pre> <form method="get" action="<%= url_for '/' %>" > <div>モジュール <input type="text" name="module"><input type="submit" value="インストール" ></div> <div style="color:red"><%= $error %></div> <div> % if ($output) { % foreach my $line (@$output) { <p style="margin:0; padding:0"><%= $line %></p> % } % } </div> </form> </body> </html>
トラックバック - http://d.hatena.ne.jp/perlcodesample/20110107/1300165343
リンク元
- 94 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADRA_jaJP371JP372&q=perl+index
- 62 http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=perl+三項演算子
- 56 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=perl+binmode
- 48 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=perl++例外&aq=f&aqi=g1&aql=&oq=
- 29 http://pipes.yahoo.com/pipes/pipe.info?_id=faa858a20082ef6d25ad27557e37e011
- 29 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&source=hp&q=perl+四捨五入&lr=&btnG=Google+検索
- 24 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&tbs=lr:lang_1ja&q=perl+xml::simple+サンプル&aq=f&aqi=&aql=&oq=&gs_rfai=
- 23 http://kenchikushikaku.seesaa.net/
- 23 http://reader.livedoor.com/reader/
- 17 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=perl+"$1"
