努力してみた日記

«前の日記(2013-06-25) 最新 次の日記(2013-08-11)» 編集
あまりためにはならない話しか書かないと思うよ。

努力したWiki

2013-08-08 phttpgetだめだめすぎんだろ

[FreeBSD] FireWallの奥にあるFreeBSDでportsnapを実行する方法

FireWallがあるとportsnapコマンド実行に支障が出ることがあります。 ひとつはFireWallに答えなきゃいけない認証情報。 もうひとつはFireWallが通信内容を検査するためにかかってしまう通信の遅延。
# portsnap --debug fetch
とかやってデバグ情報を出したりpsコマンドでどんなコマンドが呼び出されているか調べると、/usr/bin/fetchと/usr/libexec/phttpgetが使われていることがわかりました。

PROXYの指定

fetchであれば、FireWall(PROXY)は環境変数 HTTP_PROXYでPROXYを指定してあげればいい。

# setenv HTTP_PROXY "http://proxy.ne.jp:8080"
のように。PROXYに認証情報がいるなら
# setenv HTTP_PROXY "http://userid:password@proxy.ne.jp:8080"
となります。

タイムアウトが発生する場合

今回食らった環境では、FireWallでダウンロードファイルを先にウイルス検査するため、大きいファイルのダウンロードほど通信に遅延が発生します。fetchコマンドのソースを見てみると遅延許容時間はデフォルトが120秒のようです。

この値は環境変数HTTP_TIMEOUTで変更できます。今回は30分を設定してみたので

# setenv HTTP_TIMEOUT 1800
となります。…68MBダウンロードされました。

最後にphttpgetの対処

ところがfetchが通ったあとなぜか servname not supported のメッセージが。

よくよく見ると、

phttpget: host = userid, port = password@proxy.ne.jp:8080: servname not supported for ai_socktype
とか…

要はphttpgetコマンドは環境変数HTTP_PROXYに設定したURIのuseridとpasswordを正しくパースできないわけですね。

fetchのソースを見ると、環境変数HTTP_PROXY_AUTHが使えるようなので、環境変数HTTP_PROXYから認証情報をはずし、環境変数HTTP_PROXY_AUTHに記述しました。

# setenv HTTP_PROXY_AUTH "basic:*:userid:password"
# setenv HTTP_PROXY "http://proxy.ne.jp:8080"
こんな感じ。

ここまでやって、ようやく portsnap fetch が終了できました。


単なる覚書以下の内容です。一度内容を全部消しました。
«前の日記(2013-06-25) 最新 次の日記(2013-08-11)» 編集
2010|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|03|04|05|06|07|08|09|11|12|
2013|01|02|03|04|06|08|
2014|02|04|06|07|09|10|11|12|
2015|01|02|03|04|06|08|09|10|11|12|
2016|01|02|04|05|10|
2017|02|03|04|05|06|