Ubuntu 16.04 上的 apt 更新在每次视图更新时都会随机挂起。
我尝试过的任何方法都无法永久修复它,而且我也无法对其进行故障排除。
我唯一的解决方案是创建一个 shell 脚本来apt clean && apt update
.然后就可以了。
echo -e '#!/bin/bash\nsudo apt clean && sudo apt update' | sudo tee /usr/bin/apt-update; sudo chmod +x /usr/bin/apt-update
我做过的事情:
切换到谷歌DNS
禁用 NetworkManager 管理的 DNS
sudo sed -i -e 's/^dns=dnsmasq/#dns=dnsmasq/' /etc/NetworkManager/NetworkManager.conf
将 Google DNS 添加到 DHCP 客户端(dhcp 会将 google DNS 添加到 /etc/resolv.conf)
echo 'prepend domain-name-servers 8.8.4.4;' | sudo tee -a /etc/dhcp/dhclient.conf
echo 'prepend domain-name-servers 8.8.8.8;' | sudo tee -a /etc/dhcp/dhclient.conf
重新启动网络管理器
systemctl restart NetworkManager.service
编辑 apt 配置
一些存储库存在 http/1.1 管道问题。
请尝试以下操作:
echo 'Acquire::http::Pipeline-Depth "0";' | sudo tee /etc/apt/apt.conf.d/99pipelining-off
有时很难看出哪些存储库因超时而失败
减少超时
echo 'Acquire::http::Timeout "5";' | sudo tee /etc/apt/apt.conf.d/99reduce-timeout
强制 IP V4 禁止尝试解析 IP V6
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4
为 apt-update 创建脚本
apt-get 更新经常挂起/失败。解决这个问题的方法是总是 apt clean
前apt update
此命令创建一个名为 的脚本,apt-update
该脚本就是执行此操作的,应该使用apt-get update
或代替apt update
echo -e '#!/bin/bash\nsudo apt clean && sudo apt update' | sudo tee /usr/bin/apt-update; sudo chmod +x /usr/bin/apt-update
启用自动镜像切换
sudo sed -i -e 's/deb http:\/\/il.archive.ubuntu.com\/ubuntu\//deb mirror:\/\/mirrors.ubuntu.com\/mirrors.txt/' sources.list
启用合作伙伴存储库
sudo sed -i.bak "/^# deb .*partner/ s/^# //" /etc/apt/sources.list
我尝试编辑清洁政策
echo 'DSELECT::Clean "always";' | sudo tee /etc/apt/apt.conf.d/99DselectAlwaysClean
echo 'APT::Get::Clean=always;' | sudo tee /etc/apt/apt.conf.d/99AlwaysClean
我什至尝试添加更新后和更新前命令
echo 'APT::Update::Post-Invoke {"/usr/bin/apt apt clean || exit 0"};' | sudo tee /etc/apt/apt.conf.d/99PostUpdateClean
echo 'APT::Update::Pre-Invoke {"/usr/bin/apt clean || exit 0"};' | sudo tee /etc/apt/apt.conf.d/99PreUpdateClean
这两个命令实际上是有问题的,因为它们似乎试图窃取锁或其他东西。最后我把它们删除了。