本篇文章将介绍一个仅有 2MB+ 身材大小的缓存和加速工具:APT Proxy。

相比老牌儿的 apt cacher ng 而言,除了尺寸更小、内存占用更低(10M以内)、还拥有无需配置,开箱即用等的特点。

写在前面

最近在折腾轻量的 “all in one python” 容器学习环境和一个复杂项目的容器构建,过程中需要不断的 apt-get updateapt-get install,真的是非常浪费时间。

在一年前,我曾分享过如何《使用容器搭建 APT Cacher NG 缓存代理服务》,来减少日常开发和 CI 构建过程中的“数据更新、数据下载”所需要的时间。

但是,想要更好的使用 APT Cacher NG,首先需要准备一段冗长的配置文件;其次,如果是首次下载资源,想要享受加速服务,还需要使用命令来调整目标系统环境中的 /etc/apt/sources.list 中的资源域名,真的是有点麻烦。

那么,有没有简单易用的方案呢?

在网上搜索了一圈之后,我发现在八年前,有一个国外的开发者曾计划开发一款名为 apt-proxy 的开源软件,想要用来替换掉 APT Cacher NG(这不是和我想一块去了么)。然而因为种种原因,这位开发者最后弃坑了,而留下来的代码在八年后的今天,也根本编译构建不起来。

但直觉告诉我,这个方式应该是行得通的。

于是,我花了一些时间,对程序进行了一些调整,最终将程序跑了起来。

在经过简单验证之后,我发现原作者的设想和功能理念其实是不错的。只不过真的想用起来,缺少了“一些功能”。于是,我又花了一些时间,为这个软件添加了一些好用的功能:

  • 同时支持服务 Ubuntu / Debian 系统的数据下载
  • 强化缓存数据规则,避免过于频繁的查询 Indexes 数据,浪费不必要的时间
  • 内置了 Ubuntu / Debian Mirror 列表,根据网络位置自动选择最快的镜像
  • 支持手动指定 Ubuntu / Debian 源地址
  • 拥有一个简单易读的“状态统计页面”

然后,又为它集成了 GitHub 上的 CI 功能,让这个软件可以自动构建支持 i386、x86、x64、ARM64v8、ARM32v6、ARM32v7 多种二进制文件,来在多种硬件上运行。以及自动构建和生成能够跑在各种环境中的 Docker 镜像。

说了这么多,我们来直接上手看看,如何使用这个“小程序”为我们日常开发 / 软件 CI 构建过程进行加速吧。

使用 APT Proxy 来加速 APT 操作

APT Proxy 的使用方式,一般有两种:直接执行二进制文件,和使用 Docker 来运行。

考虑到我的读者中,Docker “爱好者” 数量众多,就先来聊聊 Docker 中的使用吧。

在 Docker 中使用 APT Proxy

你可以通过下面的命令,先将 apt-proxy 作为后台服务运行在本地。

docker run -d --name=apt-proxy -p 3142:3142 soulteary/apt-proxy

当命令执行完毕之后,我们将会看到类似下面的日志:

Unable to find image 'soulteary/apt-proxy:latest' locally
latest: Pulling from soulteary/apt-proxy
c2bc5c57ca31: Pull complete
fa7d8f08049a: Pull complete
Digest: sha256:036e1fc4725f98bee2ed8e0c418b44955e134360bf52baaf3f48c3ec6d9d69e3
Status: Downloaded newer image for soulteary/apt-proxy:latest
06d2e2281f21ac505116fdee121aca00aa8a3257803a783f4e253e00c8ac7c94

当服务运行起来之后,我们可以通过打开浏览器,访问 localhost:3142 (或者具体 IP),看到一个简单的统计界面。

为了方便验证服务效果,我们使用 Docker 再启动一个 Ubuntu 或者 Debian 系统:

docker run --rm -it ubuntu:22.04

当命令执行完毕之后,我们会进入容器的 Bash 环境中。

在不使用这类缓存代理工具时,我们想安装一个软件(比如 vim),我们需要执行下面的命令:

apt update && apt install -y vim
# 或者
apt update && apt-get install -y vim

由于操作系统的默认软件源是 http://archive.ubuntu.com/ubuntu/http://security.ubuntu.com/ubuntu/ ,加上每次执行命令都需要访问远程网络服务器,所以速度会很慢,偶尔还会遇到网络中断。假设我们想使用 apt-proxy 快速安装 vim 并将 vim 缓存至本地,方便后续其他容器、主机完成快速安全和更新,可以执行下面的命令:

http_proxy=http://host.docker.internal:3142 apt-get -o pkgProblemResolver=true -o Acquire::http=true update && \
http_proxy=http://host.docker.internal:3142 apt-get -o pkgProblemResolver=true -o Acquire::http=true install vim -y

当然,你也可以根据自己的喜好,或者实际情况使用运行主机的具体 IP 来替换上面命令中的 http://host.docker.internal,当我们执行完毕命令,会发现程序的下载速度比默认情况下变快了非常多,即使日志中的下载数据地址看起来和默认官方地址完全一样。

Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [82.3 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:6 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [4653 B]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [188 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]
...
Unpacking vim (2:8.2.3995-1ubuntu2) ...
Setting up libexpat1:amd64 (2.4.7-1) ...
Setting up media-types (7.0.0) ...
Setting up libsodium23:amd64 (1.0.18-1build2) ...
Setting up libgpm2:amd64 (1.20.7-10build1) ...
Setting up libsqlite3-0:amd64 (3.37.2-2) ...
Setting up xxd (2:8.2.3995-1ubuntu2) ...
Setting up vim-common (2:8.2.3995-1ubuntu2) ...
Setting up libpython3.10-minimal:amd64 (3.10.4-3) ...
...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

这是因为 apt-proxy 在启动的时候,会自动选择最快的 Mirror 站点,并自动的将我们使用的官方软件源进行替换。也就是说,无需像使用 apt-cacher-ng 一样,再去调整和修改 cat /etc/apt/sources.list 文件,就能够获得加速的效果。

在验证完首次下载之后,执行 CTRL+D 销毁当前容器,我们再次执行下面的命令,再新建一个干净的容器:

docker run --rm -it ubuntu:22.04

然后再次执行命令,尝试更新软件列表以及进行 vim 安装:

http_proxy=http://host.docker.internal:3142 apt-get -o pkgProblemResolver=true -o Acquire::http=true update && \
http_proxy=http://host.docker.internal:3142 apt-get -o pkgProblemResolver=true -o Acquire::http=true install vim -y

你会发现命令执行的速度犹如开挂一般,飞速完成。查看日志,可以发现数据更新的速度最少也在 10MB/s,而连续下载软件包则能够跑到 40MB/s (如果你的文件更大,还可以跑出更高的速度)

Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
...
...
Fetched 21.5 MB in 1s (16.3 MB/s)
...
...
Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 vim amd64 2:8.2.3995-1ubuntu2 [1724 kB]
Fetched 14.5 MB in 0s (41.6 MB/s)

再次访问浏览器中的统计页面,会看到当前我们已经缓存的文件情况概览。(演示的过程中,使用的是 MacOS 中的 Docker Desktop,所以可用磁盘空间展示的是共享磁盘空间,不够准确,可以忽略。)

因为我们使用的是容器来运行 APT Proxy,而且并没有选择将数据映射到宿主机,所以清理缓存就变的非常简单,只需要销毁容器,然后再重新创建一个容器即可。

# 停止容器
docker stop apt-proxy
# 删除容器和缓存数据
docker rm apt-proxy
# 新建一个新的容器
docker run -d --name=apt-proxy -p 3142:3142 soulteary/apt-proxy

当然,如果你在意软件安装速度,也可以将缓存数据映射到宿主机,实现缓存数据的持久化。

docker run -d --name=apt-proxy -v `pwd`/.aptcache:/.aptcache -p 3142:3142 soulteary/apt-proxy

使用二进制方式使用 APT Proxy

在 GitHub 的项目 Release 页面,有包含 7种不同类型的可执行文件。

根据你的使用场景,下载对应的可执行文件的压缩包,然后解压之后,执行:

./apt-proxy

当程序执行完毕之后,你会得到类似下面的日志:

2022/06/14 12:49:13 running apt-proxy
2022/06/14 12:49:13 Start benchmarking mirrors
2022/06/14 12:49:13 Finished benchmarking mirrors
2022/06/14 12:49:13 using fastest mirror http://mirrors.tuna.tsinghua.edu.cn/debian/
2022/06/14 12:49:14 Start benchmarking mirrors
2022/06/14 12:49:14 Finished benchmarking mirrors
2022/06/14 12:49:14 using fastest mirror http://mirror.lzu.edu.cn/ubuntu/
2022/06/14 12:49:14 proxy listening on 0.0.0.0:3142

接下来的使用方式,就和上文中提到的一样啦,调整我们要执行的 apt updateapt insall 命令即可。

手动指定要使用的软件源

虽然软件内置了不止一个 Ubuntu 和 Debian 的软件源,还会根据网络情况调用官方的软件源接口,来补充合适的软件源。最后,根据测速的方式来自动选择要使用的软件源。

但是,最快的软件源不一定网络出口是最大的,所以你也可以根据你的实际网络状况,来选择更适合你的软件源,假设我们想要把 Ubuntu 和 Debian 使用的软件源指定为 “清华源”,那么可以这样调整命令:

./apt-proxy --ubuntu=https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ --debian=https://mirrors.tuna.tsinghua.edu.cn/debian/

当命令执行完毕,我们就可以看到日志输出中包含了我们所指定的软件源。

2022/06/14 12:55:12 running apt-proxy
2022/06/14 12:55:12 using specify debian mirror https://mirrors.tuna.tsinghua.edu.cn/debian/
2022/06/14 12:55:12 using specify ubuntu mirror https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
2022/06/14 12:55:12 proxy listening on 0.0.0.0:3142

上面的参数同样可以用在 Docker 环境中。

其他

APT Proxy 支持的完整的参数,可以通过在命令后添加 -h 来查看。包含了调整缓存目录、调整端口和监听 IP 地址,调整代理模式等。

感兴趣的同学,可以通过 GitHub 项目地址 https://github.com/soulteary/apt-proxy 了解最新的情况,或者自己动手试验来试试看。

最后

这篇文章和 APT Proxy 是最近折腾东西的副产品,希望能够帮助到和我一样“懒惰”的程序员。

如果未来的时间里,GitHub 上的项目和本篇文章收到比较多的鼓励的话,我或许会持续开发和迭代一些有趣、有用的功能。

–EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2022年06月14日
统计字数: 6661字
阅读时间: 14分钟阅读
本文链接: https://soulteary.com/2022/06/14/lightweight-and-small-zero-configuration-apt-acceleration-tool-apt-proxy.html

轻量小巧的零配置 APT 加速工具:APT Proxy相关推荐

  1. java 轻量数据库_DBTree是一个springboot2 + vue-element-template实现的轻量数据库表结构查看及管理工具...

    DBTree简介 DBTree是一个WEB版的轻量数据库表结构查看及管理工具,相比phpMyAdmin, DBTree只专注于方便开发查看表结构信息和 注释维护.通过树形展示库表结构,可以对表进行自定 ...

  2. 推荐一款轻量且功能强大的集成开发工具(IDE)lightly

    面对初学者推荐的一款轻量且功能强大的集成开发工具(IDE)lightly,可以在线使用,也可以下载客户端,支持windows和macOS. 支持C,C++,Golang,HTML,Java,PHP,P ...

  3. 无线lan连接服务器,无线 LAN 控制器和轻量接入点基本配置示例

    本文档提供了轻量接入点 (AP) 的基本配置示例,该接入点通过 Cisco Catalyst 交换机连接到 Cisco 无线局域网 (WLAN) 控制器 (WLC). 尝试进行此配置之前,请确保满足以 ...

  4. 腾讯云轻量应用服务器安装和配置宝塔 Linux 面板腾讯云专享版

    宝塔 Linux 面板腾讯云专享版由腾讯云与堡塔公司联合开发,专享版在已支持普通版所有功能的基础上,还默认集成腾讯云对象存储.文件存储.内容分发网络和 DNS 解析插件.插件具备如下功能: 支持将对象 ...

  5. 轻量小巧的Knife4j v2.0.8源码

    介绍: Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧,轻量,并且功能 ...

  6. 使用腾讯云轻量应用服务器搭建网络质量拨测工具 SmokePing

    本文原载于 https://www.idc.moe/archives/qcloud-Lighthouse-SmokePing.html 作者:iks SmokePing 是由 RRDtool 的作者 ...

  7. Linux 软件包下载加速工具:APT Proxy

    本篇文章将继续介绍这个仅有 2MB+ 身材大小的 Linux 软件包缓存和加速工具:APT Proxy. 相比老牌的 apt cacher ng 而言,除了尺寸更小.内存占用更低(10M以内).它还拥 ...

  8. 阿里云轻量应用服务器 搭建配置详解

    好久没有更新博客了,说来也是惭愧没有养成记录经验的习惯. 有很多技术开发同学都想拥有自己的服务器用来搭建个人网站,或者展示作品,但是怕租上不会配置或者嫌配置繁琐难下决定. 废话不多说直接进入正题,前两 ...

  9. 轻量全面的硬件检测工具——Speccy中文版评测

    其实我们大多数人在购买电脑后,不是很了解自己的电脑的硬件配置信息,从自己的计算机里查看系统信息,也是只能看到一些基本信息,这样我们不能及时了解自己的电脑的健康情况,电脑硬件是否完好无损? Speccy ...

最新文章

  1. 北航与西安交大计算机专业对比,北航和西安交大,谁的工科实力更强,该上哪一所大学呢?...
  2. ajax传输是用utf8,使用ajax时UTF8编码不起作用
  3. centos 更换java版本_centos7 更换jdk版本
  4. 任务的定义、任务切换的原理及实现
  5. python用代码表示5与2的整除_Python教程5:Python 2.x和Python 3.x的区别有哪些?
  6. python准备_python环境准备
  7. [SHOI2017]组合数问题
  8. 如何应用AutoML加速图机器学习任务的处理?
  9. 判断.java文件中getConnection与cleanUp数量是否匹配
  10. nginx解析php失败,为什么nginx不能解析php?
  11. 7个顶级资源网站,不知道就很可惜
  12. 哈工大未来计算机院士,中国双一流大学拥有院士校友数排名,这是真实力!哈工大依然很强...
  13. Python global文件的全局变量使用
  14. Mac Apache ZooKeeper 配置
  15. IT 技能发展:10 大基本 IT 技能(精通一半你就是人才)
  16. 产品沉思录 V3.0 试读
  17. 云计算如何与企业管理协同作战
  18. 用Python实现简易超市售货系统
  19. 中国大学慕课第8周测验
  20. 干货!蓝桥杯单片机组一经验分享

热门文章

  1. 【Time系列五】个性时钟与秒表升级版
  2. 移动端组件cube-ui使用
  3. 流媒体发展新趋势 p2p网络技术 p2p穿透 p2p音视频解决方案
  4. CSS阴影样式大全(包含所有样式: demo代码全)看图看代码
  5. 中职学生计算机应用专业升大要什么证书,中职计算机应用专业校级全员化技能竞赛初探...
  6. Github下载安装教程
  7. 嵌入式系统设计师考试笔记之嵌入式系统基础知识
  8. Fluent算例4:脏几何处理的歧管
  9. IE6 IE7 IE8 IE9 IE10 Css hack及IE条件注释法
  10. 售前工程师的一些面试