apt-get 无法在代理后工作

apt-get 无法在代理后工作

我的公司使用 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 而言,我发现以下方法对我有用:

  1. 保留/etc/apt/apt.conf为空,以便 apt 重新使用$*_proxy环境变量。
  2. 确保您的环境变量设置正确:例如,您可以在 .bashrc 中添加:

    http_proxy="http://username:password@proxyserver:port"
    # And so on for other proxy settings like https_proxy and ftp_proxy
    

    如果您的用户名或密码包含任何特殊字符,则可能需要URL 已编码

  3. 使用 sudo你的环境变量,而不是其自身。这是通过编辑文件来完成的/etc/sudoers做这个的时候一定要小心!仅使用sudo visudo命令编辑文件;任何错误都可能导致您无法重新进入 sudo 模式!添加以下内容:

    Defaults env_keep+="http_proxy https_proxy ftp_proxy socks_proxy"
    

    这确保 sudo 在执行sudo apt-get install ...等时保留这些变量。

我发现Ubuntu 的 apt-get 操作方法

如果有效请告诉我:)

答案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 身份运行您的命令

相关内容