![apt-get 无法在代理后工作](https://linux22.com/image/971799/apt-get%20%E6%97%A0%E6%B3%95%E5%9C%A8%E4%BB%A3%E7%90%86%E5%90%8E%E5%B7%A5%E4%BD%9C.png)
我的公司使用 HTTP 代理,因此我们的各种 Ubuntu 12.04 服务器需要正确配置,即设置\etc\apt\apt.conf.d\80proxy
为:
Acquire::http::Proxy "http://proxy.mycompany.com:80";
Acquire::http::No-Cache true;
现在,几天以来,这种方法突然停止了工作:我遇到了总和不匹配错误。我已经尝试了在 stackoverflow 或网络上找到的所有常见技巧其中包括:
sudo rm -fR /var/lib/apt/lists/*
sudo apt-get clean
但似乎什么都不起作用。我甚至切换到 FTP 服务器,但没有任何效果。有什么根本办法可以解决这个问题?代理服务器可能存在某种问题吗?可能是什么问题?
使用 Ubuntu 12.04
答案1
就单独从终端使用 apt 而言,我发现以下方法对我有用:
- 保留
/etc/apt/apt.conf
为空,以便 apt 重新使用$*_proxy
环境变量。 确保您的环境变量设置正确:例如,您可以在 .bashrc 中添加:
http_proxy="http://username:password@proxyserver:port" # And so on for other proxy settings like https_proxy and ftp_proxy
如果您的用户名或密码包含任何特殊字符,则可能需要URL 已编码。
使用 sudo你的环境变量,而不是其自身。这是通过编辑文件来完成的
/etc/sudoers
。做这个的时候一定要小心!仅使用sudo visudo
命令编辑文件;任何错误都可能导致您无法重新进入 sudo 模式!添加以下内容:Defaults env_keep+="http_proxy https_proxy ftp_proxy socks_proxy"
这确保 sudo 在执行
sudo apt-get install ...
等时保留这些变量。
如果有效请告诉我:)
答案2
要通过代理使用 apt-get,我需要执行以下操作 - 但您确实需要能够访问互联网(例如通过 Firefox 等浏览器):
sudo apt-get --print-uris install PROGRAM
这将打印执行安装所需的软件包的 URL(以及其他信息,如 md5sums),以便您可以下载它们。例如,使用supertux
:
wilf@comp:~$ sudo apt-get install --print-uris supertux
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
supertux-data
The following NEW packages will be installed
supertux supertux-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 59.4 MB of archives.
After this operation, 80.0 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
'http://gb.archive.ubuntu.com/ubuntu/pool/universe/s/supertux/supertux-data_0.3.3-6_all.deb' supertux-data_0.3.3-6_all.deb 58590640 MD5Sum:68bd36f2c262f7caed1b5c947977202a
'http://gb.archive.ubuntu.com/ubuntu/pool/universe/s/supertux/supertux_0.3.3-6_i386.deb' supertux_0.3.3-6_i386.deb 804782 MD5Sum:a49c6c3c918bae2c968b3da6ac725b06
然后从给定的链接下载.deb
文件(最好下载到一个空文件夹中),通过代理等工作的浏览器,然后您可以使用软件中心安装它们;或者cd /FOLDER/WITH/DOWNLOADED-DEB-FILES
在终端中使用其中一个命令
dpkg -i *.deb
gdebi *.deb
这有点慢而且烦人,但似乎可以通过 HTTP 代理工作。您也可以从http://packages.ubuntu.com/
答案3
为了补充 Wilf,我运行了以下命令通过 Chrome 自动下载。据我所知,Firefox 可以更简单。
yes | sudo apt-get --print-uris install PROGRAM-NAME-HERE | grep http | awk '{print $1 }' | tr -d \' | while read -r line; do google-chrome "$line"; done
编辑:因此整个答案将包含在一篇文章中,下载完成后只需运行
cd /FOLDER/WITH/DOWNLOADED-DEB-FILES; dpkg -i *.deb
答案4
这里有一个陷阱,如果你以非特权用户身份设置代理后运行
sudo apt-get install REQUIRED_PACKAGE
REQUIRED_PACKAGE 是你想要安装的软件,而你仍然看到它在通过代理连接机器时挂起,那么它可能会正常工作-E执行 sudo 命令如下...
sudo -E apt-get install REQUIRED_PACKAGE
这将使用您当前的环境(您的代理环境设置)以 root 身份运行您的命令