cUrlコマンドとプロキシと認証
仕事場のPCで同様にrepoをインストール、と思ったんだが仕事場のネットワークには恐怖のNTLMプロトコルを使うMS-Proxy Server様が鎮座在しているため、そのままではまず駄目だろうと思いつつやってみたら..
$ curl http://android.git.kernel.org/repo > repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:01:23 --:--:-- 0 curl: (7) couldn't connect to host
案の定駄目だった。
仕方が無いので以前覚えた.bashrcにプロキシの記述を行って実行したところ問題なくインストールされたのだが、
-
- .bashrcのプロキシ設定
proxy=http://プロキシサーバのURL:ポート番号/ export http_proxy=$proxy export HTTP_PROXY=$proxy
はてさて、プロキシの認証情報が全く記述されていないのに、どうしてこれで上手く動くのだろう。
Helpを見るとどうやらcUrlのwin32版はNTLM認証のプロキシに対応しているらしく、この記述であれば.bashrcを書き換えなくても通ってしまうことが判った。
$ curl -U : --proxy-ntlm --proxy プロキシサーバ名:ポート名 http://android.git.kernel.org/repo > repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17451 100 17451 0 0 5510 0 0:00:03 0:00:03 --:--:-- 8349
さて、この場合もやはりプロキシの認証情報は必要とされていない。おまけに謎のオプション"-U :"って何だ??
バージョン詳細を見てみると
$ curl -v -V curl 7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3 Protocols: dict file ftp ftps http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp Features: Largefile NTLM SSL SSPI libz
NTLMサポートがあるバージョンなのは確認した。 ここでやっと本家のmanpageにたどり着く。
cURL - How To Use
やはり"-U"オプションが鍵だった。
-U/--proxy-user <user:password>
Specify the user name and password to use for proxy authentication.
If you use an SSPI-enabled curl binary and do NTLM authentication, you can force curl to pick up the user name and password from your environment by simply specifying a single colon with this option: "-U :".
なるほど、ちゃんと環境から取得してくれるんだ。ということは.bashrcにプロキシの記述をすることでここまでやってくれているという認識の良いのだろう。(本当か?)
私は些末な部分に拘って本質部分を調べるのを後回しにしてしまう癖があるのだが、今回もそうだった。最初からcUrlの本家を調べれば解決にかかった時間は1/10になるはずだが、そもそも本質を理解していないから後回しになるのかもしれない。
ということでrepo syncを実行するだけでこんなにネタの宝庫。UNIXは深いねぇ。