apt-get 和镜像错误或无法获取

apt-get 和镜像错误或无法获取

我的/etc/apt/sources.list包含:

deb http://ubuntu.mirror.garr.it/ubuntu/ focal main
deb-src http://ubuntu.mirror.garr.it/ubuntu/ focal main

deb-src http://ubuntu.mirror.garr.it/ubuntu/ focal restricted universe multiverse

deb http://ubuntu.mirror.garr.it/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://ubuntu.mirror.garr.it/ubuntu/ focal-updates main restricted universe multiverse

deb http://ubuntu.mirror.garr.it/ubuntu/ focal-security main restricted universe multiverse
deb-src http://ubuntu.mirror.garr.it/ubuntu/ focal-security main restricted universe multiverse

deb http://ubuntu.mirror.garr.it/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://ubuntu.mirror.garr.it/ubuntu/ focal-backports main restricted universe multiverse

deb http://archive.canonical.com/ubuntu focal partner
deb-src http://archive.canonical.com/ubuntu focal partner

但是,当我尝试与软件更新相关的任何内容时,例如,sudo apt update --fix-missing && sudo apt upgrade我在终端上得到以下输出:

    sudo apt update --fix-missing && sudo apt upgrade
Err:1 http://archive.canonical.com/ubuntu focal InRelease
  Temporary failure resolving 'proxy_server'
Err:2 http://ubuntu.mirror.garr.it/ubuntu focal InRelease
  Temporary failure resolving 'proxy_server'
Err:3 http://ubuntu.mirror.garr.it/ubuntu focal-updates InRelease
  Temporary failure resolving 'proxy_server'
Err:4 http://ubuntu.mirror.garr.it/ubuntu focal-security InRelease
  Temporary failure resolving 'proxy_server'
Err:5 http://ubuntu.mirror.garr.it/ubuntu focal-backports InRelease
  Temporary failure resolving 'proxy_server'
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://ubuntu.mirror.garr.it/ubuntu/dists/focal/InRelease  Temporary failure resolving 'proxy_server'
W: Failed to fetch http://ubuntu.mirror.garr.it/ubuntu/dists/focal-updates/InRelease  Temporary failure resolving 'proxy_server'
W: Failed to fetch http://ubuntu.mirror.garr.it/ubuntu/dists/focal-security/InRelease  Temporary failure resolving 'proxy_server'
W: Failed to fetch http://ubuntu.mirror.garr.it/ubuntu/dists/focal-backports/InRelease  Temporary failure resolving 'proxy_server'
W: Failed to fetch http://archive.canonical.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'proxy_server'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

我尝试安装的任何东西都会遇到类似的问题:

$ sudo apt-get install indicator-cpufreq
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package indicator-cpufreq

尝试从应用程序更改服务器Software update会陷入缓存刷新,或最终返回类似的错误Failed to fetch one(窗口不允许我复制和粘贴输出错误)。

有关我的系统的更多信息:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal

services.list和中应该包含什么内容proxy,问题可能是什么?

编辑#1:我认为我/etc/apt/apt.conf是错的,我希望得到一些帮助来了解该文件中的内容。echo "$http_proxy"不返回任何内容,也不返回任何内容env | grep -i proxy。设置 --> 代理网络设置为禁用,但如果我检查,Manual我会proxy-server-ip进入“代理 HTTP”字段,并且8080是端口。

编辑#2:我的/etc/apt/apt.conf.d/proxy.conf包含两行:

Acquire::http::Proxy "http://proxy_server:port/";
Acquire::https::Proxy "http://proxy_server:port/";

答案1

看起来您的机器正在尝试解析字面上名为 的主机proxy_server。尝试ping -c 5 proxy_server查看它是否列出了 IP,以及是否可以通过 ICMP 命中它。如果您确实想要使用代理,请在/etc/hosts或 中检查该 IP grep 'proxy_server' /etc/hosts,并确保您可以使用或proxy_server通过 TCP连接到列出的 IP 。对于 HTTP,端口通常为 8080,对于 SOCKS,端口通常为 1080,但实际上可以设置为任何值。您将从配置文件中获取端口信息,具体步骤如下。telnet proxy_server [port]nc proxy_server:[port]apt

如果可以 ping 通proxy_server,请确保代理工作正常并侦听您在 下的任何文件中列出的正确端口/etc/apt。要列出这些文件,请运行grep -rl 'proxy_server' /etc/apt.

如果您不打算使用代理进行连接,请grep -rl 'proxy_server' /etc/apt查看哪些文件列出了该字符串。要删除包含该字符串的所有行,请以 root 身份运行以下命令grep -rl 'proxy_server' /etc/apt | xargs -I file sed -i '/proxy_server/d' file,然后重试。

如果输出中没有列出文件grep,则运行sudo http_proxy= https_proxy= apt update --fix-missing && sudo http_proxy= https_proxy= apt upgrade,然后重试。

如果有效,那么您将在环境中的某个位置设置http_proxy和/或变量,最有可能在 中,但实际上,这些变量可以在获取的各种文件中设置)。有关这些文件的更多信息,https_proxy/root/.bashrc检查这个答案。要查明这些变量是否在 中设置/root/.bashrc,您可以运行下面的命令来删除它们,或者运行后面的脚本,这会更安全。

立即删除http_proxyhttps_proxy的命令.bashrc

sudo sed -i '/http_proxy/d;/https_proxy/d' /root/.bashrc
sed -i '/http_proxy/d;/https_proxy/d' ~/.bashrc

注意:我列出您自己的配置文件的原因~/.bashrc是因为有时在某些情况下,root 被设置为继承用户的配置文件。

在尝试删除这些行之前检查这些行是否确实存在的脚本(请注意,如果这些行不存在,前面的命令不会失败,但这实际上会在输出中返回这些行,以便您知道它们存在的位置:

#!/bin/sh

if grep -E '(http_proxy)|(https_proxy)' /root/.bashrc; then
  sudo sed -i '/http_proxy/d;/https_proxy/d' /root/.bashrc
fi
if grep -E '(http_proxy)|(https_proxy)' ~/.bashrc; then
  sed -i '/http_proxy/d;/https_proxy/d' ~/.bashrc
fi

或者,如果您更喜欢一行,您可以复制/粘贴:

if grep -E '(http_proxy)|(https_proxy)' /root/.bashrc; then sudo sed -i '/http_proxy/d;/https_proxy/d' /root/.bashrc; fi; if grep -E '(http_proxy)|(https_proxy)' ~/.bashrc; then sed -i '/http_proxy/d;/https_proxy/d' ~/.bashrc; fi

重要的:如果这些文件中直接有任何.bashrc用于切换代理的函数或别名,它将删除任何包含http_proxy或 的行https_proxy。对于您的情况,将上面的命令/脚本中的http_proxyand替换为.https_proxyproxy_server

您的具体一句话如下:

if grep 'proxy_server' /root/.bashrc; then sudo sed -i '/proxy_server/d' /root/.bashrc; fi; if grep 'proxy_server' ~/.bashrc; then sed -i '/proxy_server/d' ~/.bashrc; fi

编辑:grep根据您的评论更正了该命令,并在重新阅读您的问题后,如果您根本不想连接到代理,只需mv /etc/apt/apt.conf.d/proxy.conf /tmp/重新运行该命令,它应该可以正常工作。如果这是唯一proxy_server出现的地方,那么我不确定为什么删除这些行不起作用,但它可能proxy.conf会被缓存在某个地方。通过完全删除该文件,您的代理设置可能会重新初始化。

问题的实际根源是您在 中具有虚拟/示例设置,这实际上是在尝试解析端口 上的/etc/apt/apt.conf.d/proxy.conf主机。正如您所知,它实际上并不存在,并且必须是实际的端口号才能成功连接。proxy_serverportproxy_serverportapt

通过删除该proxy.conf文件(根本不需要该文件apt,并且默认情况下通常不存在),您应该能够解决此问题。

编辑#2:如果您确实需要连接到代理,则只需保留/etc/apt/apt.conf.d/proxy.conf原位并替换proxy_server为代理服务器的实际 IP 或主机名以及port实际端口号。或者,您可以仅替换port为实际端口号,并创建一个条目/etc/hostsproxy_server指向实际代理服务器的正确 IP 地址。

最终编辑:与用户聊天后,他们删除了/etc/apt/apt.conf.d/proxy.conf但仍然遇到相同的问题,除了不是未解决proxy_server,而是未解决proxy.server,这让我相信代理设置是在另一个位置设置的。

我让他们跑了grep -rlE 'Acquire::.*::Proxy' /etc/apt/,他们又回来了/etc/apt/apt.conf

然后我指示他们运行grep -nE 'Acquire::.*::Proxy' /etc/apt/apt.conf,它返回以下内容:

...
5:Acquire::http::Proxy "http://user:[email protected]:port/";
6:Acquire::https::Proxy "http://user:[email protected]:port/";
...

这本质上与 相同/etc/apt/apt.conf.d/proxy.conf,只是主机名proxy.server改为proxy_server。仍然是虚拟/示例设置。在指示他们注释掉第 5 行和第 6 行并重新运行 的初始命令后sudo apt update --fix-missing && sudo apt upgrade,他们确认它工作正常并获取更新。

答案2

部分答案:

终端输出表明您在某处配置了代理服务器。由于您没有提供完整的 apt 配置,请查看如何配置代理服务器 apt(例如这里,第一个 Google 结果),然后检查完​​整的 apt 配置,/etc/apt看看是否在某处有一些代理设置。

如果没有,下一步就是做一些事情,比如sudo env看看环境 sudo验证是否未设置代理。

当前问题中没有足够的信息来确定实际原因,这需要调试。


如果 中没有任何与代理相关的内容sudo env,并且 apt 配置中的任何位置都没有代理设置,则下一步是查看man apt.conf并启用调试输出。从Debug::Acquire::http和开始Debug::Acquire::https


如果你字面上地

获取::http::代理“http://用户:[电子邮件受保护]:港口/”;

在你的 apt 配置文件中,那么这根本没有意义:引号内的内容只是你的占位符实际的用户名,您的实际的密码,实际的服务器的主机名,以及实际的港口。

所以如果你没有具体的您需要使用代理服务器,并且您知道您的用户名、密码和服务器地址,然后只需删除该文件即可。

目前, apt 尝试向proxy.server(字面意思proxy.server)发出请求,当然该主机名不存在,因此它无法连接,因此无法下载任何内容。

相关内容