Rで認証プロキシを乗り越える

Rではパッケージのインストールなどはネットワーク経由(CRAN)で行われます。認証プロキシが必要なネットワークの内部でRのパッケージをインストールする必要がある場合、それを乗り越えるためのいくつかの方法についてメモ。

–internet2 を使う

Rの実行時に –internet2 というオプションを指定する方法。この指定をすると windows の場合はOSのネットワークプロキシの設定を参照する。これはR+プロキシで検索するとよく出てくる方法だけど、認証プロキシには対応していないのでなにか方法を考えないといけない。

以前紹介したRubyのlocalproxyを使って、OSのプロキシの設定をlocalhostにしてしまえば –internet2 でもプロキシを通過可能。

この方法は非常に汎用性が高く、rubyのgemとか、その他ネットワーク越しのパッケージインストールでは威力を発揮する方法ですが、rubyを導入したり、OS起動時にスクリプトを起動するなど、初期設定はめんどくさいので、とりあえずRだけ認証プロキシを通過すればよい場合は次の方法がおすすめです。

http_proxy, http_proxy_user を指定

Rの実行時に http_proxy=http://proxy.hogehoge.com:PORT http_proxy_user=ask を指定すれば(指定の方法は –internet2 と同じ方法)パッケージインストールなどの際にプロキシユーザーとパスワードを入力するダイアログが出現します。これに入力するだけ。特に難しいことはないはずです。

[ruby] open-uri でプロキシ認証

認証プロキシ下のコンピュータから ruby の open-uri を使うためのメモです。

ネットで検索したら open-uri.rb にパッチをあてる、みたいなハックが何件かヒットしましたが、ソースコードを読んでみたところ、少なくともバージョン 1.9.2 ではライブラリを書き換えることなく、以下のように対処可能です。

require "open-uri"

pxy = "http://my.proxy.com:8080"
usr = "proxyuser"
pss = "proxypass"

options = { :proxy_http_basic_authentication => [pxy,usr,pss] }
uri = "http://www.google.com/"

open(uri,options){ |io|
  # do something with io
}

proxy_http_basic_authentication というオプションに3つの要素(プロキシサーバーアドレス+ポート、ユーザ名、パスワード)を与えれば認証プロキシを乗り越えることができます。

おまけ

スクリプトにパスワードを直接書くことに抵抗ある人は例えば以下のようにすれば、スクリプトの実行毎にプロンプトに入力することができます。

require 'highline'  # なければ gem でインストールしましょう。

usr = HighLine.new.ask('Proxy ID: ')
pss = HighLine.new.ask('Proxy Password: ') { |q| q.echo = '*' }

highline を使うとパスワードをターミナルから入力する際に、画面に表示させずに * (アスタリスク)を表示させることができます。gem でインストール可能です。

Ruby のバージョンマネージャー rvm を Ubuntu で使う

Ubuntu 11.04 を導入しました。いままでは windows から Redhat にログインするという形で使っていたのですが、yum はパッケージの依存関係とかに時間を取られてしまって Ubuntu ならそのへん楽になるんじゃないかと。

実際非常に楽でした。いいですね、Ubuntu。

ただ認証プロキシ下での rvm (Ruby version manager) の設定ですこしハマったのでメモを残しておきます。
“Ruby のバージョンマネージャー rvm を Ubuntu で使う”の続きを読む