ttt

getttyent

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

2014-06-19 22:57:54 | デジタル・インターネット

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

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時間ほどたって、修正されていました

なぜこうなった!

20140619