Android SDK and AVD Manager (Linux) : Network is unreachable

Network is unreachable

Network Is Unreachable

去年撰写过一篇博客,解释了如何将默认下载地址从 https 变更为 http,提到其中的原因是由于Gnome 和 SWT 的 BUG,这些小问题往往给人带来很不好的使用体验。事情过去一年多了,由于一些原因,又要安装 Linux 版的 Android SDK,发现去年的问题依旧存在,不幸的是,除此之外,又发现了一个新问题。

问题表现为,当采用 http 下载时,窗口提示:Failed to fetch URL http://dl-ssl.google.com/android/repository/repository.xml, reason: Network is unreachable。--确信这在去年是没有发生的,那么问题既然已经发生了,就别抱怨了,把精力集中在如何解决它,了解发生的原因。

没有 Log,没有 Debug,还好我们有搜索引擎。How to resolve an issue “Network is unreachable” in Java applicationsSolved network unreachable when installing Android 是我找到的两篇博客,给了我很大的帮助,根据他们的办法,这才使得问题顺利解决。

问题的解决办法很简单,在 Terminal 执行以下命令(root角色):

eniac:/home/xuhj# sysctl -w net.ipv6.bindv6only=0
net.ipv6.bindv6only = 0

这样做无需 reboot,当即可解决问题,不过等到下次开机之后,问题依旧,那就采用修改配置文件(/etc/sysctl.d/bindv6only.conf)的方式来一劳永逸吧。在我的电脑上,该文件只有一行有效信息,确认 net.ipv6.bindv6only 的值为1。

# This sysctl sets the default value of the IPV6_V6ONLY socket option.
#
# When disabled, IPv6 sockets will also be able to send and receive IPv4
# traffic with addresses in the form ::ffff:192.0.2.1 and daemons listening
# on IPv6 sockets will also accept IPv4 connections.
#
# When IPV6_V6ONLY is enabled, daemons interested in both IPv4 and IPv6
# connections must open two listening sockets.
# This is the default behaviour of almost all modern operating systems.
 
net.ipv6.bindv6only = 0

让我遗憾的是,找的到解决办法,却找不到问题原因。从表象上来看,这个问题在 Eclipse 也能重现,那么是不是 SWT 的原因呢?从上面配置文件里的注释可以看出,如果选项被打开,即赋值为1,IPV6和IPV4是分别打开监听 socket,如果关闭它,则IPV6也可以收发IPV4的数据(原文为traffic,理解可能有误)。显然,如果关闭这个选项会好一些。

Linux 就是这样“神奇”,你永远不知道接下来的一个问题会是什么。好在自己已经不再像以前那样急躁,现在能耐下心来跟踪问题了。

2 Comments

temc1 5 月, 2011 at 6:52 下午

你不知的gfw?

Xu Haojie3 5 月, 2011 at 9:12 上午

在当时的情况下,这个问题可以排除GFW的嫌疑。建议参考我文中所提到的两处链接。

Leave a comment

Your comment