2014年6月20日金曜日

(FreeBSD) portsで、fetchがすべてNo address recordで失敗する

もう修正されてしまったのですが、今朝、なんだこりゃと思った障害。



portmasterを実行したら、fetchがすべてNo address recordと表示されてエラーになる。



portmasterが原因ではなくて、portsの問題らしい。



たとえば



root@somehost:/usr/ports/graphics/ImageMagick # make
===>  Found saved configuration for ImageMagick-6.8.9.3,1
===>   ImageMagick-6.8.9.3,1 depends on file: /usr/local/sbin/pkg - found
=> ImageMagick-6.8.9-3.tar.xz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://www.imagemagick.org/download/ImageMagick-6.8.9-3.tar.xz
fetch: http://www.imagemagick.org/download/ImageMagick-6.8.9-3.tar.xz: No address record
=> Attempting to fetch http://www.imagemagick.org/download/legacy/ImageMagick-6.8.9-3.tar.xz
fetch: http://www.imagemagick.org/download/legacy/ImageMagick-6.8.9-3.tar.xz: No address record
=> Attempting to fetch http://servingzone.com/mirrors/ImageMagick/ImageMagick-6.8.9-3.tar.xz
fetch: http://servingzone.com/mirrors/ImageMagick/ImageMagick-6.8.9-3.tar.xz: No address record
=> Attempting to fetch http://mirror.checkdomain.de/imagemagick/ImageMagick-6.8.9-3.tar.xz
fetch: http://mirror.checkdomain.de/imagemagick/ImageMagick-6.8.9-3.tar.xz: No address record
以下省略



fetchを実行するのは、
/usr/ports/Mk/bsd.port.mk
のなかにある
if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} ${FETCH_AFTER_ARGS}; then \
と書いてあるところ。



いったいどんなコマンドが実行されているんだろう?と、ちょっと小細工して調べてみたら、こんな感じだった。



/usr/bin/env -i PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin SSL_NO_VERIFY_PEER=1 SSL_NO_VERIFY_HOSTNAME=1 /usr/bin/fetch -Fpr -S 7555684 ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.9-3.tar.xz
fetch: ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.8.9-3.tar.xz: No address record



fetchコマンドに指定しているオプションがおかしいのか?と思ったら、そうではなくて、先頭にある「/usr/bin/env -i」が原因だった。
「-i」オプションがあると、もともと設定している環境変数を引き継がなくなるとのこと。
つまり、環境変数http_proxyやftp_proxyなどが、fetchへ渡されなくなってしまう、ということだった。



あーあー、納得です。だからNo address recordなんですね。
直接インターネットに接続しておらず、proxyサーバが必須な環境(しかもDNSで名前解決もできない)の場合、proxyサーバを使わずに、自力でダウンロードしてしまうわけですか。



/usr/ports/Mk/bsd.commands.mk
というファイルで
SETENV?=          /usr/bin/env -i PATH="${PATH}"
と書いてあったのですが、それが間違い。
SETENV?=          /usr/bin/env
ですね・・・



http://svnweb.freebsd.org/ports/head/Mk/bsd.commands.mk?r1=358219&r2=358268



を見れば、何がどうなったのか、一目瞭然。5時間ほどたって、修正されていました[E:coldsweats01]



なぜこうなった!



20140619



0 件のコメント:

コメントを投稿