当前位置:   article > 正文

Ubuntu apt下载缓慢的解决办法_apt速度man

apt速度man


一. apt软件源

由于apt-get默认的软件源位于国外,如欧洲等,因此默认情况下使用apt安装软件往往下载速度极慢。

Ubuntu和所有其他基于Debian的发行版中,apt软件存储库在/etc/apt/sources.list文件中或者在/etc/apt/sources.list.d/目录下使用单独文件定义。国内用户通常需要对其进行调整,将软件源修改为国内的服务器,这是一个基本操作,本文不再赘述。

二. apt第三方软件源

apt软件源当然不可能包括完整的软件信息,有时候我们需要使用第三方软件源。例如docker、nvidia显卡驱动等,都属于第三方软件源。

除了手动编辑/etc/apt/sources.list文件,或者在/etc/apt/sources.list.d/目录下使用单独文件增加第三方软件源的信息之外,我们通常使用add-apt-repository命令来管理第三方软件源。

add-apt-repository是Python脚本,用于将APT存储库添加到/etc/apt/sources.list中,或者作为单个文件添加到/etc/apt/sources.list.d目录中。

三. apt第三方软件源下载缓慢的问题


当第三方软件源位于国外等网络情况不理想的地方,而又找不到网络条件好的镜像软件源作为替代时,apt安装软件会变得非常缓慢。

1. 网络代理能解决问题吗?


当第三方软件源网络条件差,甚至其中的软件下载地址被qiang时,首先想到的便是使用网络代理。

配置网络代理:

  1. export http_proxy=http://xx.108.121.xx:9707
  2. export https_proxy=http://xx.108.121.xx:9707
  3. export HTTP_PROXY=http://xx.108.121.xx:9707
  4. export HTTPS_PROXY=http://xx.108.121.xx:9707

然而,配置网络代理后,尽管wget、curl等执行正常,而apt却完全挂掉了。

1.1. Could not handshake: Error in the pull function. [IP: xx.108.121.xx 9707]

以安装nvidia显卡驱动为例:

apt-get install nvidia-driver-545

执行出错:

  1. E: Failed to fetch https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu/pool/main/n/nvidia-graphics-drivers-545/nvidia-driver-545_545.23.06-0ubuntu0%7egpu22.04.3_amd64.deb  Could not handshake: Error in the pull function. [IP: xx.108.121.xx 9707]
  2. E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

1.2. 403  Forbidden [IP: xx.108.121.xx 9707]


已安装nginx为例:

  1. Err:1 http://mirrors.tencentyun.com/ubuntu jammy-updates/main amd64 nginx amd64 1.18.0-6ubuntu14.4
  2.   403  Forbidden [IP: xx.108.121.xx 9707]
  3. E: Failed to fetch http://mirrors.tencentyun.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-6ubuntu14.4_amd64.deb  403  Forbidden [IP: xx.108.121.xx 9707]
  4. E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

总之,使用网络代理之后,apt变成残废了,一会403,一会SSL失败。

2. “离线”安装


此处所谓的离线安装,不是真正的离线安装。在使用apt安装某个软件时,apt下载的可能不是单一的软件包,而是一系列的软件包,而且apt还能协助处理软件依赖、升级替换等一系列麻烦事,因此,我们不希望脱离apt来执行真正的离线安装。

这里apt的“离线”安装是指,我们提前借助其他网络条件,将apt在安装软件时需要的软件包提前下载好,然后放置到apt的软件包缓存目录中。这样,apt在安装软件时就能跳过下载过程,从而避开网络问题。为了实现这一点,需要满足两个条件。

2.1. apt软件包缓存位置


/var/cache/apt/archives是apt-get命令在系统上存储已下载的软件包文件的目录。当您使用apt-get命令下载软件包时,它会将下载的软件包文件存储在这个目录中,以便以后安装或升级使用。您可以使用这些软件包文件来进行离线安装、备份或共享给其他系统。这些软件包文件通常以.deb扩展名结尾。

如果需要清除该目录中的已下载软件包文件,您可以使用以下命令:

apt-get clean

这将从/var/cache/apt/archives目录中删除所有被apt-get命令下载的软件包文件。

2.2. apt软件包的下载地址


使用apt安装软件时,apt会打印一些软件包的下载信息,但这些信息并不完整,我们无法提取到软件包的具体地址。

以安装nginx为例:

  1. # apt-get install nginx
  2. Reading package lists... Done
  3. Building dependency tree... Done
  4. Reading state information... Done
  5. The following packages were automatically installed and are no longer required:
  6.   libevent-pthreads-2.1-7 libflashrom1 libftdi1-2 libopts25 sntp
  7. Use 'apt autoremove' to remove them.
  8. The following NEW packages will be installed:
  9.   nginx
  10. 0 upgraded, 1 newly installed, 0 to remove and 40 not upgraded.
  11. Need to get 3,872 B of archives.
  12. After this operation, 50.2 kB of additional disk space will be used.
  13. Get:1 http://mirrors.tencentyun.com/ubuntu jammy-updates/main amd64 nginx amd64 1.18.0-6ubuntu14.4 [3,872 B]
  14. Fetched 3,872 B in 0s (45.9 kB/s) 
  15. Selecting previously unselected package nginx.
  16. (Reading database ... 141544 files and directories currently installed.)
  17. Preparing to unpack .../nginx_1.18.0-6ubuntu14.4_amd64.deb ...
  18. Unpacking nginx (1.18.0-6ubuntu14.4) ...
  19. Setting up nginx (1.18.0-6ubuntu14.4) ...
  20. Scanning processes...                                                                                                                                                                              
  21. Scanning linux images...

在apt的输出内容中我们可以看到nginx软件包的一些网络地址信息,但这并不是软件包的具体下载地址:

Get:1 http://mirrors.tencentyun.com/ubuntu jammy-updates/main amd64 nginx amd64 1.18.0-6ubuntu14.4 [3,872 B]

只有在下载出现某些错误的情况下,apt才会将软件包的下载地址打印出来,而很多时候,我们是没工夫等待apt报错的。例如,apt以每秒1kb的速度下载100mb的文件,等待报错或者下载完成都是很耗时的。

E: Failed to fetch https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu/pool/main/n/nvidia-graphics-drivers-545/libnvidia-compute-545_545.23.06-0ubuntu0%7egpu22.04.3_amd64.deb  Connection timed out

当然,这里可以取巧,正如前文所言,网络代理会导致apt执行报错,并且是立即报错,而报错信息中将会包含软件包的实际下载地址,简直机智过人!

这里将通过apt的正常途径来打印软件包下载地址。

2.2.1. 通过apt-get -o Debug::Acquire::http=true命令打印软件包下载地址


apt-get -o Debug::Acquire::http=true这个命令设置了apt-get在执行HTTP下载时显示调试信息。这些调试信息将包括HTTP请求、响应头等。您可以在执行其他apt-get命令时添加此调试选项来查看相应的调试信息。

例如,使用apt-get -o Debug::Acquire::http=true update命令,将显示更新存储库时的HTTP请求和响应的详细信息。您可以根据需要将这个调试选项与其他apt-get命令和选项一起使用来自定义apt-get的行为和查看调试信息。还是以安装nginx为例:

  1. # apt-get -o Debug::Acquire::http=true install nginx
  2. Reading package lists... Done
  3. Building dependency tree... Done
  4. Reading state information... Done
  5. The following packages were automatically installed and are no longer required:
  6.   libevent-pthreads-2.1-7 libflashrom1 libftdi1-2 libopts25 sntp
  7. Use 'apt autoremove' to remove them.
  8. The following NEW packages will be installed:
  9.   nginx
  10. 0 upgraded, 1 newly installed, 0 to remove and 40 not upgraded.
  11. Need to get 3,872 B of archives.
  12. After this operation, 50.2 kB of additional disk space will be used.
  13. 0% [Working]GET /ubuntu/pool/main/n/nginx/nginx_1.18.0-6ubuntu14.4_amd64.deb HTTP/1.1
  14. Host: mirrors.tencentyun.com
  15. User-Agent: Debian APT-HTTP/1.3 (2.4.10) non-interactive
  16. Answer for: http://mirrors.tencentyun.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-6ubuntu14.4_amd64.deb
  17. HTTP/1.1 200 OK
  18. Server: openresty/1.16.1.1
  19. Date: Tue, 31 Oct 2023 02:34:08 GMT
  20. Content-Type: application/octet-stream
  21. Content-Length: 3872
  22. Connection: keep-alive
  23. Last-Modified: Wed, 28 Jun 2023 08:32:49 GMT
  24. Accept-Ranges: bytes
  25. Get:1 http://mirrors.tencentyun.com/ubuntu jammy-updates/main amd64 nginx amd64 1.18.0-6ubuntu14.4 [3,872 B]
  26. Fetched 3,872 B in 0s (44.6 kB/s) 
  27. Selecting previously unselected package nginx.
  28. (Reading database ... 141544 files and directories currently installed.)
  29. Preparing to unpack .../nginx_1.18.0-6ubuntu14.4_amd64.deb ...
  30. Unpacking nginx (1.18.0-6ubuntu14.4) ...
  31. Setting up nginx (1.18.0-6ubuntu14.4) ...
  32. Scanning processes...                                                                                                                                                                              
  33. Scanning linux images...

通过调试信息就可以看到nginx软件包的下载地址了:

Answer for: http://mirrors.tencentyun.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-6ubuntu14.4_amd64.deb

2.3. apt“离线”安装步骤


至此,针对apt下载缓慢的情况,我们可以通过以下步骤来解决。

a. 借助apt-get -o Debug::Acquire::http=true命令打印软件包下载地址
借助apt-get -o Debug::Acquire::http=true将下载缓慢的软件包的实际下载地址打印出来后,中断apt执行过程。

b. 借助其他网络条件下载软件包
借助其他网络条件,例如位于海外的服务器,去下载需要的软件包。

c. 将下载好的软件包放置到apt软件包缓存目录/var/cache/apt/archives

d. 重复执行以上步骤
重复执行apt-get -o Debug::Acquire::http=true install,如果遇到有下载缓慢的软件包,重复以上步骤,直到所有软件包准备完毕。这时,再次执行apt-get install,apt将能够跳过软件包的下载过程,执行实际的安装操作。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/673667
推荐阅读
相关标签
  

闽ICP备14008679号