[Momonga-devel.ja:03301] Re: svn につながらない


nosanosaです。

pingではつながるのにsvnでunknown hostになるというこの問
題ですが、w3mやwget, xchat, lftp, curlなどのアプリケーシ
ョンでは接続できているでしょうか?

もしそれらでも名前解決ができていないようなら、ぼくが遭遇
しているのと同じ問題かもしれません。

うちでも先日mph-get upgradeで最新のgcc+glibcにしたあたり
でwgetやxchatがつながらなくなりました。で、これらのアプ
リを--disable-ipv6にしてビルドし直すとつながるという感じ
だったのでいろいろ調べてみました。

で、分かったことは、IPv6が有効なビルドをするとこれらのア
プリケーションでは名前解決にglibcが提供するgetaddrinfo(3) 
関数を使うようになるのですが、どういうわけかgetaddrinfo
を呼ぶ際にerrnoが非0にセットされていると(で、どうもgetaddrinfo
を呼ぶ前にはerrnoは2つまりENOENT: No such file or
directory 
にセットされている事が多いみたい)、その値を見て(?)シス
テムエラーを返してしまうみたいなのです。で名前解決が働き
ません。

で、これらのアプリケーションでgetaddrinfoを呼ぶ直前にerrno=0;
というような文を入れると、ちゃんと名前解決してくれます。

で、いっそのことというわけでglibcのgetaddrinfoの最初でerrno=0;
とリセットすると全部ちゃんとうごいてくれました。

そんな一行パッチを添付しますので、これでglibcをrebuildし
て試してもらえませんか?一応、これで作ったバイナリをhttp://www.momonga-linux.org/~nosanosa/

においておきました。

subversionについては当方firewallの内側でsvnプロトコルが
通らないので未確認ですが、ソースをみるとgetaddrinfoを呼
んでいるようなのでこれでうまくいくかもしれません。

で、問題はこれが
1. そもそもipv6からみのローカルの設定が何か悪い
2. glibcのgetaddrinfoがおかしい
3. errno=2になるようなシステムがおかしい
4.システムのerrnoからみがおかしい
5. もっと別の問題
のどれか?ということなのですが。
 
他の皆さんが問題ないのだとローカルな問題だという気もする
んですが,errno=0;で解決してしまうというか,そもそもerrno
を使いたいなら初期化するべきなんじゃという気もします.ENOENT
なんてstraceしてみるとどんなプログラムでもでまくりだし。

Momongaでの正しいIPv6設定ってどうなんでしたっけ?
/etc/sysconfig/networkでNETWORKING_IPV6=yes
となってるくらいなのですが…

> maxwelと申します。
> 
> 昨日から
> svn co
> svn://anonsvn.momonga-linux.org/svnroot_pkgs/trunk
> でリポジトリのチェックを行うと
> svn: Unknown hostname 'anonsvn.momonga-linux.org'
> となってアクセスできなくなっています。
Index: glibc.spec
===================================================================
--- glibc.spec	(リビジョン 8260)
+++ glibc.spec	(作業コピー)
@@ -1,4 +1,4 @@
-%global momorel 6
+%global momorel 6.1
 #%%global auxarches i586 i686 athlon sparcv9 alphaev6
 %global auxarches i386 athlon sparcv9 alphaev6
 %global prelinkarches noarch
@@ -78,6 +78,9 @@
 # sparc patches
 Patch600: glibc-2.3.5-sparc-timing.patch
 
+#
+Patch10000: glibc-getaddrinfo_reset_errno.patch
+
 Buildroot: %{_tmppath}/glibc-%{PACKAGE_VERSION}-root
 Obsoletes: zoneinfo, libc-static, libc-devel, libc-profile, libc-headers,
 Obsoletes:  linuxthreads, gencat, locale, ldconfig, locale-ja, glibc-profile
@@ -798,6 +801,8 @@
 %patch600 -p1
 %endif
 
+%patch10000 -p1 -b .errno
+
 %build
 GCC=gcc
 GXX=g++
--- glibc-20060217T1609/sysdeps/posix/getaddrinfo.c.o	2005-12-21 01:49:19.000000000 +0900
+++ glibc-20060217T1609/sysdeps/posix/getaddrinfo.c	2006-03-03 02:02:18.869875960 +0900
@@ -1466,6 +1466,9 @@
   struct gaih_service gaih_service, *pservice;
   struct addrinfo local_hints;
 
+  /* really needed? and OK? */
+  errno=0;
+
   if (name != NULL && name[0] == '*' && name[1] == 0)
     name = NULL;