
Обновление Apt в Ubuntu 16.04 зависает случайным образом при каждом обновлении представления.
Ничто из того, что я пробовал, не может исправить эту проблему навсегда, и у меня нет способа устранить неполадки.
Единственное решение, которое у меня есть, — это создать скрипт оболочки для 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
Что я сделал:
Переключиться на Google DNS
Отключить управляемый DNS NetworkManager
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
Перезапустить NetworkManager
systemctl restart NetworkManager.service
редактировать apt-config
В некоторых репозиториях возникают проблемы с конвейеризацией 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
Эти 2 команды на самом деле проблемные, потому что они, кажется, пытаются украсть блокировку или что-то в этом роде. В конце концов я их удалил.