我的/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_proxy
和https_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_proxy
and替换为.https_proxy
proxy_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_server
port
proxy_server
port
apt
通过删除该proxy.conf
文件(根本不需要该文件apt
,并且默认情况下通常不存在),您应该能够解决此问题。
编辑#2:如果您确实需要连接到代理,则只需保留/etc/apt/apt.conf.d/proxy.conf
原位并替换proxy_server
为代理服务器的实际 IP 或主机名以及port
实际端口号。或者,您可以仅替换port
为实际端口号,并创建一个条目/etc/hosts
以proxy_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
)发出请求,当然该主机名不存在,因此它无法连接,因此无法下载任何内容。