[http://d.hatena.ne.jp/flageo/20060501/p1](http://d.hatena.ne.jp/flageo/20060501/p1)
でも書いたけど、phttpget、つまりはportsnap, freebsd-updateはhttp://user:password@proxy.server.com:8080形式の環境変数HTTP_PROXYを読んでくれない。
そこでportsnap, freebsd-updateを実行するときにはHTTP_PROXY, HTTP_PROXY_AUTHに付け替える必要があるわけだが、これが面倒くさい。
というわけで、phttpget自体を改造する。
ネタは[http://www.freebsd.org/cgi/query-pr.cgi?pr=129431](http://www.freebsd.org/cgi/query-pr.cgi?pr=129431)
$ uname -r
8.2-RELEASE-p3
$ grep FBSDID ./phttpget.c
__FBSDID("$FreeBSD: src/usr.sbin/portsnap/phttpget/phttpget.c,v 1.14.2.1.6.1 2010/12/21 17:09:25 kensmith Exp $");
以上の/usr/src/usr.sbin/portsnap/phttpget/phttpget.cに対して以下のような修正を。
$ diff -u phttpget.c.orig phttpget.c
--- phttpget.c.orig 2012-04-05 10:58:52.000000000 +0900
+++ phttpget.c 2012-04-05 11:04:25.000000000 +0900
@@ -44,7 +44,7 @@
#include <sysexits.h>
#include <unistd.h>
-static const char * env_HTTP_PROXY;
+static char * env_HTTP_PROXY;
static char * env_HTTP_PROXY_AUTH;
static const char * env_HTTP_USER_AGENT;
static char * env_HTTP_TIMEOUT;
@@ -136,6 +136,11 @@
p = strchr(env_HTTP_PROXY, '/');
if (p != NULL)
*p = 0;
+ if (strchr(env_HTTP_PROXY, '@')) {
+ proxy_auth_user = strsep(&env_HTTP_PROXY, ":");
+ proxy_auth_pass = strsep(&env_HTTP_PROXY, "@");
+ p = strchr(env_HTTP_PROXY, '@');
+ }
p = strchr(env_HTTP_PROXY, ':');
if (p != NULL) {
*p = 0;
あとは/usr/src/usr.sbin/portsnap/phttpget/でmakeして、できたphttpgetを/usr/libexec配下にコピーすればOK。
当然ながらOSの更新(freebsd-updateやmake buildworld install)すると元に戻るので注意。