< OS 有关 > Ubuntu: APT-Cacher-NG Server, Ubuntu 系统的软件包管理 缓存从官方软件源下载的软件包 无需重复从互联网下载

原因:

今天升级一台 Ubuntu, 安装了 600MB。 所以去找类似 Microsoft WSUS 这样的应用。

APT-Cacher-NG Server 介绍:

  • 可作为中间代理服务器,缓存从官方软件源下载的软件包
  • 当局域网内其他机器需要相同软件包时,直接从缓存中提供,无需重复从互联网下载
  • 支持多种软件包格式,包括 .deb、.rpm 等
  • 可以统一管理软件包的更新和分发
  • 适合有多台 Linux 服务器需要更新的环境
  • 支持 SSL/TLS 加密连接
  • 有详细的访问日志
  • 有 Web 界面监控状态
  • 有过期策略,自动清理旧包

官网:Apt-Cacher NG - Software Package Download Proxy

工作原理:

  1. 客户端请求软件包
  2. apt-cacher-ng 检查本地缓存
  3. 如果缓存中存在,直接返回
  4. 如果不存在,从官方源下载并缓存
  5. 向客户端分发软件包

实践环境:

网络拓扑:

代码见附件1

3台 Ubuntu 主机: ub1, ub2, ub3   都是 TLS desktop 24.04
Apt-Cacher-ng Server 运行在 ub1
条件:只缓存 24.04 发行的软件升级包

配置步骤:

这个很简单 略...

一、在 ub1 

1. 安装 apt-cacher-ng

sudo apt update
sudo apt install apt-cacher-ng

2. 编辑配置文件

sudo vi /etc/apt-cacher-ng/acng.conf
# 基本设置
CacheDir: /var/cache/apt-cacher-ng
LogDir: /var/log/apt-cacher-ng
SupportDir: /usr/lib/apt-cacher-ng
Port: 3142
ReportPage: acng-report.html
ExThreshold: 4
LocalDirs: acng-doc /usr/share/doc/apt-cacher-ng

# 镜像配置
Remap-ubuntu: deb.ubuntu.com/ubuntu/ ubuntu/
Remap-security: security.ubuntu.com/ubuntu/ ubuntu/

# 文件匹配的规则
VfilePattern: \.deb|\.tar\.gz|\.tgz|\.dsc|\.udeb|\.diff\.gz|Release|Packages|Sources|Release\.gpg|InRelease|Commands.*|\.cnf|Translation-.*|Components|by-hash
PfilePattern = .*(deb|dsc|tar(\.gz|\.bz2|\.xz)|diff(\.gz|\.bz2|\.xz)|debian\.tar\.(gz|xz)|[a-z]+\.tar\.(gz|bz2|xz)|tar|tgz|tar\.gz|cnf)$

# 下载重试
DlMaxRetries: 5

解释,文件匹配规则:

1)主要作用是:

  • 控制哪些文件需要被缓存
  • 区分易变文件和永久文件的缓存策略
  • 确保重要的包文件和元数据能被正确缓存
  • 优化存储空间的使用

2)目的:

  • 提高缓存效率
  • 节省存储空间
  • 确保关键文件被正确缓存
  • 避免缓存不必要的文件

VfilePattern (Volatile file pattern): 用于匹配易变的文件模式

  • .deb - Debian 软件包文件
  • .tar\.gz|\.tgz - 压缩的归档文件
  • .dsc - Debian 源码包描述文件
  • .udeb - 微型 Debian 包(主要用于安装器)
  • .diff\.gz - 补丁文件
  • Release - 仓库发布信息
  • Packages - 包含软件包列表
  • Sources - 源代码包信息
  • Release\.gpg - 数字签名文件
  • InRelease - 内联签名的发布文件
  • Commands.* - 命令相关文件
  • .cnf - 配置文件
  • Translation-.* - 翻译文件
  • Components - 仓库组件信息
  • by-hash - 基于哈希的文件访问

PfilePattern (Permanent file pattern): 用于匹配需要永久缓存的文件模式

  • .deb - Debian 包
  • .dsc - 源码包描述
  • .tar(.gz|.bz2|.xz) - 各种压缩格式的 tar 文件
  • .diff(.gz|.bz2|.xz) - 各种压缩格式的差异文件
  • debian.tar.(gz|xz) - Debian 专用压缩包
  • [a-z]+.tar.(gz|bz2|xz) - 任何字母开头的压缩包
  • tar|tgz|tar.gz - 各种 tar 格式
  • cnf - 配置文件

3. 设置开机自启动,并启用服务

sudo systemctl enable apt-cacher-ng
sudo systemctl start apt-cacher-ng

二、 ub2 和 ub3上使用代理

1. 编辑配置文件

sudo vi /etc/apt/apt.conf.d/01proxy
Acquire::http::Proxy "http://ub1:3142";

2.  仓库配置文件:/etc/apt/sources.list.d/ubuntu.sources

Types: deb deb-src
URIs: http://archive.ubuntu.com/ubuntu
Suites: jammy jammy-updates jammy-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
  • 定义软件包的下载来源
  • 确保下载软件通过 GPG 签名
  • 允许系统获取更新和安全补丁

3. 测试配置 

sudo apt update

三、如果 ub1 有 ufw 防火墙

sudo ufw allow from 《你的局域网段, 例:192.168.6.0/24 》 to any port 3142

允许来自 192.168.0.0/24 网段的客户端(图中的 ub2 和 ub3)访问 3142 端口

四、WEB 管理界面

选中这三项, 点 "Start Mirroring"

总结:

软件的配置很简单。最大益处是省掉重复的下载时间,网络流量的节省,只安装有签名的软件。 

在一台 24 小时运行的主机上安装, 写个脚本可以软件部署在执行脚本的主机上。

另,如果有安装 tailscale, 会有路由问题要解决。 配置 tailscale 的 ACL, 见我以前文章有粘贴。 

不记得有没有改过这个文件:3. /etc/apt/sources.list.d/tailscale.list

deb [signed-by=/usr/share/keyrings/tailscale-archive-keyring.gpg] https://pkgs.tailscale.com/stable/ubuntu noble main

Tailscale 的官方软件仓库,用于 tailscale 软件升级

附件1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home Network Diagram</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.6.1/mermaid.min.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
        }
        .container {
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="mermaid">
            graph TD
            I((Internet)) --- R[Router]
            R --- UB1[ub1:Ubuntu<br>apt-cacher-ng<br>>server]
            R --- UB2[ub2:Ubuntu]
            R --- UB3[ub3:Ubuntu]
            style I fill:#fff,stroke:#333,stroke-width:2px
            style R fill:#f96,stroke:#333,stroke-width:2px
            style UB1 fill:#9cf,stroke:#333,stroke-width:4px,width:150px,height:100px
            style UB2 fill:#9cf,stroke:#333,stroke-width:4px,width:100px,height:100px
            style UB3 fill:#9cf,stroke:#333,stroke-width:4px,width:100px,height:100px
        </div>
    </div>
    <script>
        mermaid.initialize({ startOnLoad: true });
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值