apt-get卡在0 [连接到us.archive.ubuntu.com]

当我升级时,它会卡在这里:
user@plato:~# sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  bind9-host coreutils cpio curl dnsutils libbind9-90 libc-bin libc-dev-bin
  libc6 libc6-dev libcgmanager0 libcurl3 libcurl3-gnutls libdns100
  libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libisc95 libisccc90
  libisccfg90 libjasper1 liblwres90 libplymouth2 libsepol1 libssl-dev
  libssl-doc libssl1.0.0 linux-libc-dev mime-support multiarch-support ntp
  ntpdate openssl plymouth plymouth-theme-ubuntu-text python3-distupgrade
  ubuntu-release-upgrader-core unzip
39 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 16.0 MB of archives.
After this operation, 12.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
0% [Connecting to us.archive.ubuntu.com (2001:67c:1562::15)] ░

当我更新时,它会卡在这里:
user@plato:~# apt-get update
0% [Connecting to us.archive.ubuntu.com (2001:67c:1562::14)] [Connecting to sec░

我能够正常地ping通us.archive.ubuntu.com。
user@plato:~# ping us.archive.ubuntu.com
PING us.archive.ubuntu.com (91.189.91.23) 56(84) bytes of data.
64 bytes from economy.canonical.com (91.189.91.23): icmp_seq=1 ttl=54 time=81.5 ms
64 bytes from economy.canonical.com (91.189.91.23): icmp_seq=2 ttl=54 time=81.5 ms
64 bytes from economy.canonical.com (91.189.91.23): icmp_seq=3 ttl=54 time=81.5 ms
64 bytes from economy.canonical.com (91.189.91.23): icmp_seq=4 ttl=54 time=81.4 ms
^C
--- us.archive.ubuntu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 81.425/81.528/81.582/0.355 ms

我该怎么做才能解决这个问题?

我迄今尝试过的方法:

我尝试了按照这个博客的指引:http://nickescobedo.com/719/ubuntu-apt-get-hangs-at-0

强制apt-get只使用IPv4

  • /etc/apt/apt.conf.d/目录下创建一个文件 99force-ipv4
  • 在新建的文件中添加以下一行内容:Acquire::ForceIPv4 false;
  • 现在apt-get将只使用IPv4

没有一个答案对我有用:我的问题是我的Windows主机防火墙阻止了在Virtualbox中运行的Ubuntu虚拟机。 - drodsou
这些答案都对我没用。我重新启动了虚拟机,现在它可以工作了。 - kilojoules
4个回答

我找到了重新使apt-get工作的方法。
编辑gai.conf
sudo vim /etc/gai.conf

将第54行改为取消注释以下内容:
precedence ::ffff:0:0/96  100

写并退出:
:wq

注意

请留意第50行,它与其他行几乎一模一样:

precedence ::ffff:0:0/96  10

这是错误的代码行。向下移动约4行,您将找到正确的代码行需要取消注释,因为它以100结尾,而不是10

2非常感谢您发布解决方案。我遇到了同样的问题,这个方法解决了它。 - bradym
60你到底是怎么弄明白的?这突然发生在我的一个服务器上,而且这个方法解决了问题。 - Brian Neal
1当这种情况发生在我身上的时候,我以为我会需要很久才能弄清楚到底发生了什么。第一个解决方案就立刻出现了,而且直接解决了问题……不到5分钟!虽然我还是想知道为什么一开始会发生这种情况。(解决方案给出了一些导致原因的线索,但并不多) - mikuszefski
这只是在软件中心更新后发生在我身上的。一定有什么改变了它。非常感谢你的答案,+1 为了节省我几个小时的痛苦。 - Ron Thompson
非常感谢,这帮我节省了数小时的联系客服和痛苦。 - Joehot200
这怎么可能发生?我甚至在这个问题发生时进行了干净的Ubuntu安装。 - Daniel
4这里发生了什么事?能详细解释一下为什么这个修复方法有效吗? - four43
61问题:互联网服务提供商(ISPs)开始建立一个内部IPv6网络,以便最终连接到IPv6互联网。因此,在运行apt-get时,该网络中的服务器现在默认尝试通过其IPv6地址连接到*.ubuntu.com。解决方案:取消注释precedence ::ffff:0:0/96 100可以使请求优先选择IPv4。 - Arian Faurtosh
8修复好了!这绝对是解决这个问题的正确方法。但是对于任何遇到这个修复方法的人,请确保不要像我一样做。我取消了precedence ::ffff:0:0/96 10的注释,然后又不得不回到文件中重新注释掉那行代码,然后取消注释正确的那行代码,即precedence ::ffff:0:0/96 100 - dtigue
没有什么比一个能够作为谷歌搜索的第一个结果的神奇解决方案更好了。 - Daniel
非常感谢!我一直在想为什么我无法通过手机的网络连接更新任何软件包。不知道Verizon修复IPv6需要多长时间呢? - Aaron Franke
除了“优先级”修复之外,我还需要在/etc/network/interfaces的末尾添加“dns-nameservers 8.8.4.4 8.8.8.8”。http://askubuntu.com/questions/766131/set-static-ip-ubuntu-16-04。我的ISP是monkeybrains.net。 - BSalita
这对我没有起作用,这个有用:http://askubuntu.com/a/759540/4246 - Gauthier
1经典。我希望互联网服务提供商在IPv6真正运行之前不要推出它。因为我的家庭Comcast连接在路由到谷歌和Facebook时出现了问题,所以我不得不在我的电脑上禁用IPv6。 - sudo
有没有关于为什么会发生这种情况的详细解释的链接? - mbigras
1男人,你刚刚解决了我很多问题:D - Adrians Netlis
先生,您真是个天才。 - e18r
这个解决方法对我有用,然后我看到关于家庭互联网的评论,意识到谷歌和只有谷歌连接需要很长时间。检查了Facebook,它也出现了同样的问题,所以我禁用了IPv6(如果需要做相同的操作,请参考链接),现在它们运行得很好。为什么这个问题只会给这些网站造成麻烦呢?https://askubuntu.com/questions/440649/how-to-disable-ipv6-in-ubuntu-14-04 - Michael
我通过将/etc/apt/sources.list中的所有源更改为https来解决了这个问题。首先,您需要安装apt-transport-https,并使用支持https的镜像(例如deb https://ubuntu.osuosl.org/ubuntu/ xenial main restricted)。 - crizCraig
哇...谢谢你的解决方案。运作得非常好。 - Parag Jadhav
谢谢!这也解决了我的问题。正如有人在上面指出的那样,我家里有一个本地服务器,这是一个IPS问题/特性。 - gregwinn
靠!这是什么魔法!!!像魔术一样有效。点赞! - Joy
你是个巫师吗? - desertkun

在更新和升级之前最好禁用IPV6。
  1. 打开终端
  2. 输入 sudo -H gedit /etc/sysctl.conf 并打开配置文件,在末尾添加以下行:
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1 
    net.ipv6.conf.lo.disable_ipv6 = 1 
    
  3. 然后运行以下命令:
    cat /proc/sys/net/ipv6/conf/all/disable_ipv6 
    

    如果显示‘1’,表示已禁用 IPV6。

    如果显示‘0’,请按照步骤4和步骤5进行操作。

  4. 键入命令 sudo sysctl -p。你将在终端中看到以下内容:
    net.ipv6.conf.all.disable_ipv6 = 1 
    net.ipv6.conf.default.disable_ipv6 = 1 
    net.ipv6.conf.lo.disable_ipv6 = 1 
    
  5. 重复上述“步骤3”,现在将显示1。

这个起作用了。我不明白为什么。你能解释一下吗? - AAI

IPv6 的修复方法都对我无效。可能我遇到的症状是由不同的原因引起的。我的解决办法是在 sources.list 文件中进行搜索和替换,切换到另一个存档,例如:
sudo vim /etc/apt/sources.list

然后:
:%s/us\.archive/de\.archive/g
:wq

这至少让我能够继续工作,直到我找出真正的问题。

对我有效的方法是将我的Ubuntu客户机的VirtualBox网络设置从"桥接适配器"切换到"NAT"。


2是的,这肯定会起作用。但是,为什么在“桥接适配器”上不起作用呢?我可以使用“桥接适配器”做任何事情,除了apt-get update - soufrk