本文概述
- 要求
- 安装apt-cacher-ng
- 在Raspberry PI上配置apt
- 使用apt-cacher-ng测试apt
- 配置Ubuntu或Debian系统以使用apt-cacher-ng
- 通过HTTPS的APT
- 管理apt-cacher-ng
- 管理缓存
如果你在互联网速度较慢的地方生活和工作, 并且需要更新一堆Debian和/或Ubuntu系统, 那么此apt代理将使你的生活更加轻松和快捷。
APT是Debian和Ubuntu Linux发行版用于安装和更新其软件的程序。在开箱即用的配置中, 当你使用apt安装程序时, 例如:
sudo apt install inkscape
APT将从分发存储库服务器下载软件档案并进行安装。当软件包很小, 只需要下载几个文件并且你的Internet连接速度很快时, 这非常有用。
但是, 如果要安装大量软件, 并且办公室到处都是需要更新的计算机, 并且Internet连接速度很慢, 则可能需要很长时间才能在每台计算机上下载并安装所有内容。
代理服务器, 特别是诸如apt-cacher-ng之类的缓存代理, 是一个程序, 位于要尝试更新的计算机和包含要下载的软件的存储库服务器之间。你要更新的计算机将从代理服务器而非存储库请求软件, 然后代理将请求转发至存储库, 下载软件并将其交还给更新计算机。
聪明的部分是, 代理将保留其下载的所有软件文件的副本。当本地网络上的另一台计算机尝试下载相同的文件时, 即它想安装或更新相同的软件时, 该代理已经具有一个副本, 可以将其提供给请求的计算机而无需下载。
首次下载后, 所有后续下载将以你本地网络的速度压缩。
要求
要完成本指南, 你将需要以下内容:
- 运行Raspbian Buster的Raspberry PI(任何版本)已连接到本地网络。
- 用于插入Raspberry Pi的屏幕和键盘。如果可以通过SSH进入Raspberry Pi, 则这些是可选的。
- Raspberry Pi上的非root用户, 启用了sudo的用户。
- 本地网络上的Debian或Ubuntu系统。
满足所有这些要求后, 以sudo用户身份登录Raspberry PI上的终端, 然后继续进行下一部分。
安装apt-cacher-ng
在Linux上安装任何新软件包之前, 执行系统更新始终是一个好主意。这将确保你的系统运行的软件包版本与分发存储库中可用的软件包版本相同, 并且可以确保本地的软件包版本列表是最新的。这样做将确保你在安装apt-cacher-ng时不会遇到任何错误。
以下命令将更新你的系统:
$ sudo apt update
$ sudo apt upgrade
现在, 你的Raspberry PI是最新的, 安装apt-cacher-ng:
$ sudo apt install apt-cacher-ng
安装程序将询问你是否要通过apt-cacher-ng启用HTTPS隧道。你应该对这个问题回答”否”。我们将配置APT以通过apt-cacher-ng代理HTTPS连接, 而不需要隧道。另外, 如果需要, 你可以稍后在apt-cacher-ng配置文件中更改这些选项。
与现代软件约定保持一致, 在安装apt-cacher-ng时会创建并启用systemd服务文件。这意味着apt-cacher-ng将在启动时自动启动, 你还可以使用常规的systemd service命令来管理apt-cacher-ng:
$ sudo systemctl start apt-cacher-ng.service
$ sudo systemctl stop apt-cacher-ng.service
$ sudo systemctl restart apt-cacher-ng.service
apt-cacher-ng现在作为系统守护程序运行, 在端口3142上侦听并准备接受apt的连接。
在Raspberry PI上配置apt
我们将配置为使用apt-cacher-ng代理的第一个系统将是Raspberry PI上的apt。我们将apt配置为使用apt-cacher-ng代理的方式将是在apt的源文件中重写URL。源文件包含可下载发行版软件的存储库URL列表。
你可以在/etc/apt/sources.list中找到Raspbian的主要源文件, 并且在全新安装中如下所示:
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
# deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
这里唯一的活动(未注释)行是第一行, 即:
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
我们需要修改这一行, 以便使用文本编辑器打开文件, 这里我们使用nano:
$ sudo nano /etc/apt/sources.list
修改第一行, 使其如下所示:
deb http://127.0.0.1:3142/raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
你在此处所做的是将127.0.0.1:3142插入URL。
IP地址127.0.0.1始终是本地计算机的IP, 通常称为”本地主机”。 :3142部分指示端口。
通过按CTRL + o, ENTER, CTRL + x保存和退出nano。
现在, 你需要对/etc/apt/sources.list.d/raspi.list中的源文件进行相同的更改。
apt和apt-cacher-ng现在可以进行测试了。
使用apt-cacher-ng测试apt
每当你运行apt时, 它都会缓存下载的所有文件的副本。 apt这样做是为了避免不进行任何不必要的下载, 并保留安装档案的本地副本, 以防万一需要重新安装软件包且没有互联网的情况。
此本地缓存意味着如果存储库未更改, 则在运行apt更新或apt升级时apt将不会与代理联系。因此, 为了测试代理, 我们将需要手动清除apt缓存。以下命令将清除所有apt的缓存程序包:
$ sudo rm -rf /var/lib/apt/lists/
$ sudo rm -rf /var/cache/apt/*
现在, 通过运行更新并检查是否有错误来测试apt:
$ sudo apt update
你应该看到几行输出, 如下所示:
Get:1 http://127.0.0.1:3142/raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
以http://127.0.0.1:3142/开头的URL表示apt正在从apt-cacher-ng接收更新文件。
你还可以通过运行以下命令来查看apt-cacher-ng日志文件中的错误:
$ tail -f /var/log/apt-cacher-ng/apt-cacher.log
在第二个终端。如果你没有遇到任何错误, 则可以继续在本地网络上配置Debian或Ubuntu系统。
配置Ubuntu或Debian系统以使用apt-cacher-ng
你想从apt-cacher-ng代理中受益的本地网络上的Debian或Ubuntu系统不需要安装任何其他软件。你所需要做的就是重新编写其源文件, 以便他们从apt-cacher-ng收集所有更新, 而不是直接联系存储库。
对源文件进行的更改与对Raspberry PI对源进行的编辑完全相同, 不同之处在于, 你需要使用Raspberry PI的IP地址代替127.0.0.1。
这意味着你首先需要获取Raspberry Pi的IP地址。获取Raspberry PI IP地址的最简单方法是在Raspberry PI的终端中运行以下命令:
$ hostname -I
这将打印出Raspberry PI具有的IP地址。使用第一个IPv4 IP地址。在这里, 我将使用示例地址192.168.0.2。你将需要替换Raspberry PI的IP地址。
回到客户端计算机上, 使用文本编辑器打开主要源文件, 这里我们使用nano:
$ sudo nano /etc/apt/sources.list
该文件将包含与Raspberry PI的/etc/apt/sources.list上的格式相同的行。这是Debian Buster安装中的示例行:
deb http://ftp.debian.org/debian buster main
你需要使用Raspberry PI的IP如下编辑这些行:
deb http://192.168.0.2:3142/ftp.debian.org/debian buster main
编辑/etc/apt/sources.list和/etc/apt/sources.list.d/下任何其他源文件中的所有行。然后删除任何本地缓存的文件以进行测试:
$ sudo rm -rf /var/lib/apt/lists/*
$ sudo rm -rf /var/cache/apt/*
再次更新系统:
$ sudo apt update
$ sudo apt upgrade
apt的输出应通过打印如下包含代理IP的行来指示更新文件来自apt-cacher-ng代理:
Hit:1 http://192.168.0.2:3142/ftp.debian.org/debian buster InRelease
现在, 此计算机已完全配置为使用新的apt代理。你将需要编辑以后添加到此计算机的所有新源文件, 包括为发行版升级添加的任何新行。
通过HTTPS的APT
到目前为止, 我们查看的源文件都使用了HTTP连接。这是Debian和Ubuntu的蓄意设计决定, 因为安装档案具有内置的内部加密签名, 可以阻止恶意篡改。因此, HTTPS不会增加很多额外的安全性, 同时会大大增加具有大量不同地理位置的镜像的工程负担。
但是, 使用HTTPS有一些优点, 这意味着某些非官方存储库使用HTTPS。 apt-cacher-ng支持两种处理HTTPS存储库的方法。
第一种是将客户端直接连接到存储库服务器。不幸的结果是, apt-cacher-ng不会缓存软件包。如果你希望以这种模式运行apt-cacher-ng, 请使用文本编辑器打开/etc/apt-cacher-ng/acng.conf:
$ sudo nano /etc/apt-cacher-ng/acng.conf
并添加以下行:
PassThroughPattern: .*
这将apt-cacher-ng配置为允许HTTPS连接从客户端传递到存储库。
第二种方法是修改客户端源文件中的存储库行, 以便客户端通过HTTP连接到apt-cacher-ng, 但是apt-cacher-ng随后将通过HTTPS连接到存储库。这些软件包将通过HTTPS下载到apt-cacher-ng, 然后通过HTTP发送到客户端计算机。 apt-cacher-ng可以缓存程序包, 我们不会失去HTTPS的好处。
以下源代码行用于通过HTTPS访问Docker存储库:
deb [arch=amd64] https://download.docker.com/linux/debian buster stable
当你编辑HTTP行时, 你将192.168.0.2:3142添加到了URL中。当你编辑HTTPS行时, 你需要添加192.168.0.2:3142/HTTPS///例如:
deb [arch=amd64] http://192.168.1.67:3142/HTTPS///download.docker.com/linux/debian buster stable
现在, 客户端计算机将通过HTTP从apt-cacher-ng请求软件包, 而apt-cacher-ng将通过HTTPS从Docker下载并缓存软件包。
管理apt-cacher-ng
Web GUI可用于在本地网络上管理apt-cacher-ng。为了访问此GUI, 你需要将浏览器指向:
http://<Proxy IP>:3142/acng-report.html
替换示例本地网络IP 192.168.0.2, 我们得到:
http://192.168.0.2:3142/acng-report.html
GUI的第一个也是最重要的部分, “传输统计信息”为你提供了从存储库中下载的数据量与缓存中已提供的数据量之比的信息。下图显示了GUI的这一部分:
“缓存效率”部分会告诉你apt-cacher-ng从其缓存V中提供了多少文件, 绕过了缓存。 “命中”表示代理从缓存提供的文件, “未命中”表示代理计算机从存储库下载并添加到缓存的文件。
管理缓存
当开发人员向存储库添加新版本时, apt-cacher-ng下载并提供给本地网络上客户端计算机的文件将变得过时。发生这种情况时, 这些陈旧的apt-cacher-ng必须将它们从缓存中删除, 因为它们不再需要, 并且会占用驱动器上的空间。 Raspberry PI检查缓存并自动删除陈旧的文件。
当你安装apt-cacher-ng时, 还在以下位置安装了cron文件:
/etc/cron.daily/apt-cacher-ng
每天都会由cron运行, 这会为你清除缓存。
如果你希望手动查看并清除缓存, 则应登录Web GUI并单击标记为”开始扫描和/或到期”的按钮。通常不需要这样做, 但是如果要从快速更新的存储库中进行更新, 则可能需要这样做。
你现在有了一个高效的apt代理, 可以减轻办公室或家庭中大型重复性系统更新的网络负担。
有兴趣探索Raspberry Pi, 请查看此在线课程。
评论前必须登录!
注册