[Momonga-devel.ja:03301] Re: svn につながらない
- From: nosanosa <sbfield_snmsyk@xxxxxxxxxxx>
- Date: Fri, 3 Mar 2006 16:22:07 +0900 (JST)
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;