You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

离线状态下apt-cacher-ng无法支持客户端执行apt update问题求助

apt-cacher-ng离线模式下apt update失败的原因与解决办法

核心原因

apt update的核心作用是从上游源拉取Packages、Sources等索引文件的最新版本,以此获取软件包的最新版本信息和依赖关系。apt-cacher-ng默认逻辑是:当客户端请求索引时,优先尝试从上游源获取最新版本,只有上游源不可达且本地已有缓存时才会返回缓存内容。但断网时,服务器无法连接上游源,又没有提前缓存完整的索引文件,就会返回500错误,导致apt update失败。

客户端A和B的差异原因:

  • 客户端A曾在服务器联网时执行过apt update,本地已缓存了旧的索引文件,因此还能基于本地索引执行apt install;但再次执行apt update时,服务器无法获取新索引,导致失败。
  • 客户端B从未执行过apt update,本地没有任何索引文件,apt update失败后无法获取包信息,自然也无法执行apt install。

解决办法

1. 提前在服务器缓存索引文件

在服务器联网状态下,让apt-cacher-ng缓存所有需要的源索引:

  • 让已配置代理的客户端执行一次apt update,触发服务器缓存索引;
  • 或者在服务器本地通过代理触发缓存:
http_proxy=http://localhost:3142 apt update

2. 开启apt-cacher-ng的离线模式

编辑服务器上的apt-cacher-ng配置文件:

vim /etc/apt-cacher-ng/acng.conf

修改以下配置项:

OfflineMode: 1          # 开启离线模式,禁止尝试连接上游源
CacheDirPerm: 0755      # 确保缓存目录权限正确
LogLevel: info          # 可选,方便排查日志

重启服务生效:

systemctl restart apt-cacher-ng

3. 客户端适配配置

在客户端的/etc/apt/apt.conf.d目录下新建配置文件(比如99apt-offline),添加以下内容:

Acquire::http::Proxy "http://server_ip:3142";
Acquire::Check-Valid-Until "false";  # 关闭索引文件的有效期检查
Acquire::Retries "0";                # 避免反复尝试连接上游源

这样客户端会优先使用服务器缓存的索引,即使索引过期也能正常使用。

4. 预缓存常用软件包(可选)

如果需要离线安装特定软件包,在服务器联网时,通过代理下载并缓存包及其依赖:

http_proxy=http://localhost:3142 apt-get install -d <package_name>

-d参数表示仅下载不安装,下载的包会被apt-cacher-ng自动缓存。

内容的提问来源于stack exchange,提问作者LilDrizzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:57:13