如果你在网络中管理多台Ubuntu服务器,则为每个系统单独下载更新和软件包会很麻烦,因为它不但会占用大量带宽,而且还会花费很多时间。
遇到这种情况,如果你只需下载一次所有必需的软件包并让所有系统从你自己的存储库本地安装它们,那就比较省事了?这正是apt-mirror
帮助你做的事情。
本文小编将简单介绍使用apt-mirror
设置本地Ubuntu存储库,如果你有这方面的烦恼,不妨一起来看看。
什么是apt-mirror?
apt-mirror
是一个小工具,它可以从Ubuntu镜像下载整个APT仓库(或其子集),并将其保存到你的本地服务器,这样你就可以通过HTTP协议提供这个本地仓库,并将你的客户端指向它。大多数情况下,apt-mirror
可以帮你:
- 创建Ubuntu软件包的本地镜像
- 减少互联网带宽使用(非常适合有限带宽设置)
- 加快包的安装和更新
- 在离线或隔离环境中工作
前期准备工作
在开始镜像Ubuntu存储库之前,需要准备以下内容。以下是要点的细分以及每个要点的重要性。
- 需要一台专用的Ubuntu机器,最好运行最新的LTS(长期支持)版本,例如Ubuntu 24.04、Ubuntu 22.04或Ubuntu 20.04
- 需要150GB到250GB的可用磁盘空间,具体取决于你计划镜像的Ubuntu存储库的大小。
- 能够熟练使用命令行:编辑文件、使用
sudo
运行命令、安装软件包以及设置基本服务(如Apache或Nginx) - 第一次同步时,需要稳定且速度相当快的互联网连接,因为它可以下载数十甚至数百GB的数据,如果你想要镜像包含多个组件的整个Ubuntu版本,这一点尤为重要
步骤1、在Ubuntu中安装apt-mirror
要开始设置本地存储库,第一步是安装apt-mirror
软件包,该软件包专门用于帮助你创建Ubuntu官方APT存储库的完整或部分镜像。
首先更新系统的软件包索引,以确保获得可用软件的最新版本。
sudo apt update
更新完成后,使用以下命令安装apt-mirror
工具:
sudo apt install apt-mirror
安装之后,apt-mirror
即可根据你的特定镜像需求进行配置。
步骤2、为本地Ubuntu存储库创建必要的文件夹
当你使用apt-mirror
时,它需要在你的系统上有一个地方来下载和存储所有存储库,例如数据包、元数据和结构。默认情况下,它将所有内容保存在目录下
/var/spool/apt-mirror
,该目录会成为你所镜像的Ubuntu仓库的本地副本。
虽然可以通过修改配置文件来更改此位置(将在后面步骤中介绍),但首先要确保该目录存在并且可以使用:
sudo mkdir -p /var/spool/apt-mirror
除此之外,还要创建另一个目录/var/www/html/ubuntu
,该目录将成为面向公众的文件夹,网络上的客户端计算机可以通过Apache或Nginx等Web服务器访问镜像存储库。
sudo mkdir -p /var/www/html/ubuntu
在此过程的后续阶段,需要将镜像目录中的内容同步到这个可通过Web访问的路径。这样,你的内部计算机就无需连接到互联网,它们将通过HTTP直接从你的本地镜像中提取更新。
步骤3、配置apt-mirror
安装apt-mirror
完成后,需要指定下载内容、存储位置以及同步期间的操作,所有这些都通过位于以下位置的主配置文件进行控制:
/etc/apt/mirror.list
使用你喜欢的编辑器中打开该文件:
sudo nano /etc/apt/mirror.list
接下来让我们看一个用于为amd64(64 位)系统镜像Ubuntu 24.04(Noble Numbat )的示例配置:
############# apt-mirror config ############# # Directory to store the mirrored files set base_path /var/spool/apt-mirror # Internal structure directories set mirror_path $base_path/mirror set skel_path $base_path/skel set var_path $base_path/var set cleanscript $var_path/clean.sh # Architecture you want to mirror set defaultarch amd64 # Number of download threads (10–20 is good for most) set nthreads 10 # Tilde files control (leave as is) set _tilde 0 ############# Repositories to Mirror ########### # Base Ubuntu 24.04 repositories deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse # Security updates deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse ############# Clean Instructions ############## clean http://archive.ubuntu.com/ubuntu clean http://security.ubuntu.com/ubuntu ##############################################
步骤4、开始镜像APT包
一旦在mirror.list
文件中正确配置了想要镜像的仓库和组件,就可以运行apt-mirror
命令将Ubuntu软件包下载到本地服务器了:
sudo apt-mirror
上述命令连接到官方Ubuntu镜像服务器,获取你之前指定的元数据和包文件,并将它们保存到您的本地磁盘下的/var/spool/apt-mirror
。
根据你添加的组件数量(例如main
、universe
等)以及架构数量(例如amd64或i386),此过程可能需要数小时,并且可能占用超过100GB的磁盘空间。因此,在开始之前,请确保你的Ubuntu服务器有足够的可用存储空间。
个人强烈建议在screen或tmux会话中运行上述命令,因为大型下载需要耗费时间,而且如果你的SSH会话断开连接或者终端关闭,下载就会停止。使用screen或tmux可以确保该进程在后台继续运行,即便你失去了连接。
步骤5、通过Apache或Nginx提供镜像服务
一旦你系统使用apt-mirror
下载完所有Ubuntu软件包,下一步就是让网络上的其它机器可以访问这些软件包。为此,需要通过HTTP提供镜像文件,这时Apache或Nginx等Web服务器就可以发挥作用了。
为了简单起见,本文将使用Apache,因此首先使用以下命令安装Apache :
sudo apt install apache2
安装完成后,你需要让本地镜像目录能够被Apache的默认网站根目录访问,该目录通常位于/var/www/html
。为此,你可以创建从镜像目录到Web根目录的符号链接。例如,使用以下命令链接Ubuntu存档和安全镜像:
sudo ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu /var/www/html/ubuntu sudo ln -s /var/spool/apt-mirror/mirror/security.ubuntu.com/ubuntu /var/www/html/ubuntu-security
链接完成后就可以测试镜像是否正常工作了。打开浏览器并访问http://server-ip/ubuntu/dists/noble/
。将server-ip
替换为你自己镜像服务器的实际IP地址。如果一切设置正确,应该会看到Noble发行版的目录列表或发行文件。
步骤6、配置客户端使用本地镜像
一旦你的本地APT镜像设置完毕并通过HTTP提供服务,下一步就是配置你的客户端机器来使用它,而不是访问互联网获取软件包,这意味着你需要在每个客户端上编辑sources.list
文件,告诉系统从哪里获取更新和软件。
首先备份现有sources.list
文件,以防以后需要恢复到原始设置。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
之后,使用自己喜欢的文本编辑器中打开该文件:
sudo nano /etc/apt/sources.list
现在到了重要的部分,也就是将默认的Ubuntu镜像URL替换为本地镜像服务器的IP地址(或主机名)。例如,如果你的本地服务器IP是192.168.2.100
,则你的源列表应如下所示:
deb http://192.168.2.100/ubuntu noble main restricted universe multiverse deb http://192.168.2.100/ubuntu noble-updates main restricted universe multiverse deb http://192.168.2.100/ubuntu-security noble-security main restricted universe multiverse
这些行告诉客户端机器直接从本地镜像获取基本系统包、更新和安全补丁,而不是转到archive.ubuntu.com
或security.ubuntu.com
。
完成这些更改后,保存并运行以下命令:
sudo apt update
这将使用你的本地存储库刷新软件包索引。如果所有配置正确且本地镜像可以访问,客户端现在应该会直接从你的Ubuntu服务器拉取更新并安装软件包,从而加快安装速度并减少互联网使用量。
步骤7、自动镜像同步
一旦您使用apt-mirror
完成本地Ubuntu镜像的初始同步,下一个重要步骤就是定期更新它。
Ubuntu仓库会频繁更新,包含新的软件包、安全补丁和错误修复。如果你的本地镜像过期,那么客户端系统将无法从这些更新中受益,这也就违背了创建镜像的初衷。
为了自动处理这个问题,这里使用了一个简单但功能强大的Linux功能,称为cron,它允许你安排任务(称为cron 作业)在特定时间或间隔运行。
为此,请通过运行以下命令打开root用户的crontab文件:
sudo crontab -e
现在将以下行添加到文件底部:
0 2 * * * /usr/bin/apt-mirror > /var/log/apt-mirror.log
这行代码告诉系统每天凌晨2:00运行apt-mirror
命令。> /var/log/apt-mirror.log
部分会将命令的输出发送到日志文件,以便你后期需要排除故障时可以查看。
小结
可用看出,使用apt-mirror
搭建本地Ubuntu APT仓库,对于管理网络中多台机器的人来说是个很棒的解决方案。它不仅能节省时间和带宽,还能确保更快的软件包安装和更简便的维护,尤其在网络访问受限或无网络的环境中表现突出。