apt-get 安装代理后-无法获取

apt-get 安装代理后-无法获取

这又是一个有关错误消息的问题E: Failed to fetch ...(示例见下面注释 2)。这个问题与我见过的其他问题的不同之处(我猜)在于以下几点。

我在代理后面运行 Ubuntu 18.04LTS。我有很多带有可用更新的软件包(我想有 200 多个)。

    我可以毫无问题地更新许多软件包,但最终仍有 48 个软件包无法安装。

所有未安装的软件包都属于bionic-updates/universe或。大多数与、、、bionic-updates/main相关。完整列表在下面的注释 1 中。但我可以安装来自和的软件包(我刚刚安装了和)。javajdklinuxsystemdbionic-updates/universebionic-updates/mainqemubsdutils

为什么有些软件包可以安装,有些却不能?
有什么可能的解决方案(除了不使用代理连接 PC)?


笔记

  1. 未安装软件包的完整列表

    ant ant-optional apport apport-gtk fwupd fwupdate fwupdate-signed gettext gettext-base jarwrapper junit4 libasm-java libcommons-collections3-java libcommons-compress-java libcommons-httpclient-java libdb5.3 libdb5.3-java libdb5.3-java-jni libecj-java libequinox-osgi-java libhsqldb1.8.0-java libjetty9-java libnss-systemd libobjenesis-java libpam-systemd libservlet3.1-java libsystemd0 libtomcat8-java linux-generic linux-headers-generic linux-image-generic openjdk-11-jdk openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless openjdk-8-jdk openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless python-pip-whl python3-pip snapd systemd
    

这是通过

$ sudo apt list --upgradable 2> /dev/null | sed 's/\/.*//' | tail +2 | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g'

为了找到每个仓库所属的仓库,我使用了(printf "%30s"...有助于在列中可视化)

$ for p in $(sudo apt list --upgradable 2> /dev/null | sed 's/\/.*//' | tail +2 | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g') ; do printf "%30s" $p ; apt policy $p 2> /dev/null | tail +6 | head -1 ; done

这将生成如下输出

                       ant        500 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages
  1. 样本误差
    $ sudo apt-get install apport
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following packages will be upgraded:
      apport
    1 upgraded, 0 newly installed, 0 to remove and 46 not upgraded.
    Need to get 125 kB of archives.
    After this operation, 20,5 kB of additional disk space will be used.
    Ign:1 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 apport all 2.20.9-0ubuntu7.17
    Err:1 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 apport all 2.20.9-0ubuntu7.17
      403  URLBlockDownload [IP: xxx.xxx.xxx3.xxx 80]
    E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/a/apport/apport_2.20.9-0ubuntu7.17_all.deb  403  URLBlockDownload [IP: 10.1.33.101 80]
    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
  1. 编辑:输出“请求”这个答案在这儿。
    $ find /etc/apt/ -name "*.list" -exec grep -iq http {} \; -exec egrep -v '^#|^$' {} \; | uniq 
    deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
    deb http://us.archive.ubuntu.com/ubuntu/ bionic main restricted
    deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
    deb http://us.archive.ubuntu.com/ubuntu/ bionic universe
    deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe
    deb http://us.archive.ubuntu.com/ubuntu/ bionic multiverse
    deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
    deb http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb http://security.ubuntu.com/ubuntu bionic-security main restricted
    deb http://security.ubuntu.com/ubuntu bionic-security universe
    deb http://security.ubuntu.com/ubuntu bionic-security multiverse
    deb https://apt.kitware.com/ubuntu/ bionic main

答案1

看起来企业防火墙阻止了 apt 的某些 URL,这就是您无法通过 apt 下载软件包的原因。您需要将源列表中提到的所有 URL 列入防火墙白名单。您需要拥有防火墙的管理员权限或请联系网络管理员。

作为替代选项,尝试将系统直接与其他互联网源(如 USB 加密狗或移动设备)连接。

答案2

这是为了给建议提供更坚实的基础这个答案。它提到防火墙过滤是罪魁祸首,并且它基于每个包使用的完整 URI,包括包名称本身。可能解释为什么给定存储库中的某些软件包可以安装,而其他一些软件包则不能安装。为了测试这一点,我获取了所有无法安装的软件包的 URI --print-uris(请参阅下面注释 1 中的完整设计命令行),以及yudit-common我没有但稍后可以安装的软件包的 URI。然后我尝试wget使用这些 URI。

对于我无法安装的每个软件包,.deb该软件包或其依赖项之一的文件都会生成

$ wget http://us.archive.ubuntu.com/ubuntu/pool/universe/a/ant/ant-optional_1.10.5-3~18.04_all.deb
--2020-09-22 10:18:35--  http://us.archive.ubuntu.com/ubuntu/pool/universe/a/ant/ant-optional_1.10.5-3~18.04_all.deb
Resolving proxy-myserver (proxy-myserver)... xx.xx.xx.xx
Connecting to proxy-myserver (proxy-myserver)|xx.xx.xx.xx|:xx... connected.
Proxy request sent, awaiting response... 403 URLBlockDownload
2020-09-22 10:18:35 ERROR 403: URLBlockDownload.

这将更有力地证实该提议。


笔记

  1. 获取包的完整 URI(也在wget这里尝试)
    for p in $(sudo apt list --upgradable 2> /dev/null | sed 's/\/.*//' | tail +2 | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g') ; do for uri in $(apt install --print-uris $p 2> /dev/null | sed -n '/^After this operation/ { :a; n; p; ba; }' | awk '{ print substr($1,2,length($1)-2) }') ; echo "uri=${uri}" ; wget ${uri} ; done ; done

答案3

代理服务器可以以不同的方式设置。一种方法是允许通过通配符域访问特定站点,反之亦然。如果管理员或环境对此更加偏执,则可以使例外情况更加细化,允许通过针对特定 URI 的正则表达式公式访问特定站点。

输出是什么, apt-get update有错误吗?

相关内容