【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

/dev/random

Debian GNU/HurdでaptからMercurialをインストールして、Goをダウンロードしようとしたらエラーになりました。

# hg clone https://go.googlecode.com/hg/ go
abort: error: EOF occurred in violation of protocol

httpsではなくhttpだとダウンロードできたため、OpenSSLがうまく機能していないようです。調べた結果、Hurdには/dev/randomがないため乱数が生成できずにエラーになっていました。/dev/randomを作成すればダウンロードできました。作成方法はカーネルをいじらずにサーバーをセットする方式で、マイクロカーネル的だと思いました。

作成方法

Hurd Installation Guidesshの項目に載っていました。

wget http://kilobug.free.fr/hurd/random-64.tar.gz
tar xvzf random-64.tar.gz
cp random/random /hurd
settrans -c /dev/random /hurd/random --seed-file /var/run/random-seed --secure
settrans -c /dev/urandom /hurd/random --seed-file /var/run/urandom-seed --fast
chmod 0644 /dev/random /dev/urandom

エラー調査

参考までに、エラーの原因が/dev/randomだと分かった経緯を書いておきます。

httpsが通らないことから、証明書関係かなと思って、aptでssl-certをインストールしようとしました。すると以下のようなエラーが出ました。

# apt-get install ssl-cert
(中略)
Generating a 1024 bit RSA private key
3525:error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded:md
_rand.c:517:You need to read the OpenSSL FAQ, http://www.openssl.org/support/faq
.html
3525:error:04081003:rsa routines:RSA_BUILTIN_KEYGEN:BN lib:rsa_gen.c:210:
dpkg: error processing ssl-vert (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 ssl-vert
E: Sub-process /usr/bin/dpkg returned an error code (1)

"random number generator"のエラーを調べると/dev/randomが関係しているようなので、見ると存在していませんでした。作成方法を調べて作成すればssl-certは無事にインストールできました。

Mercurial自体はssl-certがなくても機能しましたが、原因を突き止めるのに参考になりました。