2008-12-03

プロキシ認証の通し方まとめ その2

はてなブックマーク   livedoor clip

お久しぶりです、日野原です。

読者の皆さんは山本のレビューの設計編を楽しみにしていらっしゃると思いますが、彼は最近何やら忙しく飛び歩いていて、ここの記事を書く時間がとれそうにないのでもう少々お待ちください。

私はこの3ヶ月の間にまたプロキシの設定をしなければいけないケースに遭遇したので追記しておきます。

今回もプロキシの情報は同じとします。

ホスト proxy.example.com
ポート 8080
ユーザ foo
パスワード bar

sudo 編

まず、前回基本編で挙げた

export http_proxy=http://foo:bar@proxy.example.com:8080

ですが、これの適用範囲が広がりました。

rubygems編で「sudo では環境変数を引き継げない」と書いてしまったのですが、これは私の無知で、実は設定で引き継ぐ環境変数を指定できることがわかりました。

設定するためには、/etc/sudoers の env_keep という変数に引き継ぎたい環境変数を指定します。

具体的には、

Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
         _XKB_CHARSET XAUTHORITY"

という箇所があるので、これの最後の行を

         _XKB_CHARSET XAUTHORITY http_proxy NO_PROXY"

と変更します。
これで rubygems や yum を sudo で動かすときには別途プロキシを設定する必要がなくなりました。

ちなみに /etc/sudoers を編集するときには chmod して編集して戻してなんてせずに、visudo を使ってくださいね。

pear / pecl 編

PHP のモジュールを追加するときに使う pear や pecl は、プロキシ対応を独自でやっているので設定しなくてはいけません。

設定するには次のようにします。

% pear config-set http_proxy=http://foo:bar@proxy.example.com:8080

ちなみに、これで設定すると pecl にも反映されるので pear だけ設定すれば OK です。
試しに確認してみましょう。

% pecl config-get http_proxy
http://foo:bar@proxy.example.com:8080

air 編

Adobe の air のアプリケーションを作って配布するためには .air ファイルにパッケージングする必要がありますが、その際にタイムスタンプを付与するためにタイムスタンプサーバにアクセスします。そう、ここでプロキシの壁に阻まれるのです。

そこで、プロキシの内側にタイムスタンプサーバがある場合は -tsa オプションに url を指定し、無い場合にはやむを得ないので -tsa none と指定してタイムスタンプの付与を省略します。
タイムスタンプを省略した場合は署名証明書の有効期限切れ後にインストールできなくなってしまいますが、正式に製品としてリリースするときまでは考えなくても大丈夫でしょう。

ちなみにこれは http ではなく、RFC3161で定義された Time-Stamp Protocol(TSP) で、318番のポートを使用するので -Dhttp.proxyHost 等で設定してもダメです。

socksで通れば -DsocksProxyHost を指定することでできるかもしれませんが、私の環境ではまだうまく行っていません。

今回は前回の Chrome のような目玉はありませんでしたが、また何かあったら追加していきます。

2008-09-05

proxy 認証の通し方まとめ

はてなブックマーク   livedoor clip

こんにちは、日野原です。

Google のブラウザ、「Google Chrome」が発表されてダウンロードできるようになりましたが、社内でインストールしようとしてみたところプロキシ認証に対応していないらしく、インストールに失敗してしまいました。プロキシ自体には対応しているようなので、ローカルプロキシを立てて認証を任せてあげればインストールできるようです。

と言うわけで今日はプロキシ認証についてです。

自宅で趣味のプログラミングをしているときなどは良いのですが、会社で何かをしようとするとこれのせいではまることがとっても多いので、同じような悩みを持っている人達のために情報をまとめておこうと思います。

ただし、基本的にLinux(Fedora もしくは CentOS 系)での情報です。また、以下の例では、プロキシの情報は下表のようなものとします。

ホスト proxy.example.com
ポート 8080
ユーザ foo
パスワード bar

基本編

まず基本として、環境変数 http_proxy にプロキシの URL を指定します。
bash や zsh を使っている場合は .bashrc、.zshrc に以下の行を書いておきます。

export http_proxy=http://foo:bar@proxy.example.com:8080

これで wget、curl や Plagger は OK です。例外設定は NO_PROXY ですね。ただ、wget は NO_PROXY には対応していないようです。

yum 編

/etc/yum.conf 内で proxy を設定します。(次の一行を追加します)

proxy=http://foo:bar@proxy.example.com:8080/

最後の / は、付けないと動かなかったことがあるので付けておきました。現象の再現ができていないため、詳細はわかっていないのですが。

subversion 編

ホームディレクトリ下の ~/.subversion/servers に指定します。
初期状態でこのファイルの最後の [global] セクションにコメントアウトされた状態で設定が書かれているので、それを書き換えます。

http-proxy-exceptions = *.example.com
http-proxy-host = proxy.example.com
http-proxy-port = 8080
http-proxy-username = foo
http-proxy-password = bar

subversion の場合は社内にアクセスすることも多いと思うので、例外設定(http-proxy-exceptions)もしておかないと後悔するでしょう。

rubygems 編

rubygems は環境変数を見てくれるので list 等のコマンドは基本編と同じでいけます。
しかし install など root 権限が必要になるコマンドでは su 後に export して環境変数を設定する必要があります。また、sudo では環境変数を引き継げないので、-p オプションでプロキシの設定を渡します。

sudo gem install rails -p http://foo:bar@proxy.example.com:8080

ただ、1.0より前のバージョンの rubygems ではバグがあって -p オプションが効かないので、rubygems の config_file.rb(私の環境では /usr/lib/ruby/site_ruby/1.8/rubygems/config_file.rb)内にある class Gem::ConfigFile に以下のメソッドを追加する必要があります。

  def []=(key, value)
    @hash[key] = value
  end

ruby/open-uri 編

Rails の script/plugin など、ruby の open-uri を使用しているプログラムはそのままでは環境変数にプロキシを設定しても認証には対応してくれません。(1.8.6.114までではだめでした。)
open-uri.rb(私の環境では /usr/lib/ruby/1.8/open-uri.rb)に以下のパッチを当てる必要があります。

216c216
<         klass = Net::HTTP::Proxy(proxy.host, proxy.port)
---
>         klass = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password)

これで、環境変数 http_proxy の設定でいけるようになります。

apache ant 編

最近 ant を使って java のアプリをインストールしたんですが、ivy で必要なライブラリを自動でダウンロードしてくれるところに感動しました。
でもその感動の前にはプロキシ認証の壁が立ちはだかったのです。
と言うわけで環境変数 ANT_OPTS にプロキシの設定を渡しましょう。

export ANT_OPTS="-Dhttp.proxyHost=proxy.example.com \
                 -Dhttp.proxyPort=8080 \
                 -Dhttp.proxyUser=foo -Dhttp.proxyPassword=bar"

Amazon Web Services(EC2) 編

ant が JVM に渡すパラメータを独自の環境変数で管理しているということは、同じ java のアプリである EC2 の管理ツールも同じようになっているわけです。
EC2_JVM_ARGS に指定してください。(EC2の場合は https も使うので、https の設定も必要です。)

export EC2_JVM_ARGS="-Dhttp.proxyHost=proxy.example.com \
                     -Dhttps.proxyHost=proxy.example.com \
                     -Dhttp.proxyPort=8080  -Dhttps.proxyPort=8080 \
                     -Dhttp.proxyUser=foo -Dhttp.proxyPass=bar"

Amazon Web Service を試してみたので次は Google App Engine… と行きたいところですが、Python はわからないのでそれはまた次の機会にでも。

【番外?】Google Chrome(Windows版)インストール編【本題?】

最後に、冒頭で触れた Google Chrome のインストールをしましょう。
今回はローカルプロキシに Proxomitron日本語の情報)を使用しました。

読者層を考えて、ダウンロードからインストールの手順は省略します。

起動したら、まずは右側の下の方にある「Proxy」をクリックして、HTTP Proxies とある欄のコンボボックスにプロキシのサーバ名とポートを「proxy.example.com:8080」というように入力します。

次にパスワードを入力するため、今入力したコンボボックスを右クリックして開くメニューで「Advanced Proxy settings」を選択します。
普通こんな操作、気付きませんよね。隣に座っている同僚が教えてくれました。

ダイアログが開いたら一番下の「Send username and password to proxy」にチェックを入れて、ユーザ名とパスワードを入れます。これでプロキシサーバの設定は終了です。

次にこのサーバを使うようにするため、一番はじめのウインドウで左下にある「Bypass」をクリックし、その上にある「Use Remote Proxy」にチェックを入れます。

これでローカルプロキシの設定は終わりです。

後は Google Chrome のインストーラがこのプロキシを使うように、IE と Firefox のプロキシの設定を localhost:8080 にして、ChromeSetup.exe を起動するだけです。
(IEだけだとインストールが途中で止まってしまう場合もあるようです。)

以上で番外編も終了です。

今回はこんなところで打ち止めですが、またなにかあったら情報を載せていきます。