apt update がハングアップしたまま、トラブルシューティングの方法がない

apt update がハングアップしたまま、トラブルシューティングの方法がない

Ubuntu 16.04 の Apt アップデートは、ビューが更新されるたびにランダムにハングします。

試した方法では永久に修正できず、トラブルシューティングする方法もありません。

唯一の解決策は、 へのシェル スクリプトを作成することです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に切り替える

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

NetworkManagerを再起動します

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 updateは頻繁にハングしたり失敗したりします。これを回避するには、いつも apt clean前にapt update

このコマンドは、まさにこれを実行するスクリプトを作成します。またはapt-updateの代わりに使用してください。apt-get updateapt 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 つのコマンドは、ロックなどを盗もうとしているように見えるため、実際には問題があります。最終的に、それらを削除しました。

シェル スクリプトなどのハックに頼らずに、この問題を永続的に解決するにはどうすればよいでしょうかapt clean && apt update?

この問題をトラブルシューティングするにはどうすればいいでしょうか?

関連情報