[Feedback on issues] Deepin Wine CDN包异常
Tofloor
poster avatar
Frank-lab-hash
deepin
2026-09-06 15:57
Author

【应用商店/CDN】deepin-wine-builder 包元数据与实际 CDN 对象长期不一致,导致 APT 无法安装

问题概述

在 Deepin 25 Crimson 环境中尝试安装「统信 Windows 应用兼容引擎」时,发现:

App Store 已签名的 Packages 索引中记录的 deepin-wine-builder 文件 Size / SHA256,与 App Store CDN 实际返回的 .deb 对象不一致。

该问题已经持续多日。

APT 的完整性校验因此正确拒绝安装。

目前观察到的现象不是依赖冲突、签名错误或本地 APT 数据损坏,而是:

当前可达 CDN 缓存返回的旧对象已经持续存活超过 6 天。


环境

系统:

Deepin 25
VERSION_CODENAME=crimson
amd64

测试环境为 Deepin 25 Distrobox,但该问题发生在 App Store HTTP/CDN 层:

  • APT 签名验证正常
  • HTTP Range 请求可以直接复现文件大小不一致
  • 不依赖 Wine 是否已经安装
  • 不依赖 Distrobox GPU / Wayland 等环境

APT 主源:

deb https://community-packages.deepin.com/beige/ crimson main commercial community

App Store:

deb https://com-store-packages.uniontech.com/appstore-V25 crimson appstore

目标软件包

Package:
deepin-wine-builder

Version:
4.0.0.10+v25-1

当前 APT Candidate:

4.0.0.10+v25-1

Packages 中的 Filename:

pool/appstore/d/deepin-wine-builder/deepin-wine-builder_4.0.0.10+v25-1_amd64.deb

已签名 APT 元数据

正常执行:

sudo apt update

成功:

  • 无签名错误
  • 无 NO_PUBKEY
  • 无 Hash Sum mismatch
  • InRelease 可以正常通过现有 Deepin keyring 校验

当前 InRelease:

Date:
Fri, 04 Sep 2026 10:09:37 UTC

Codename:
crimson

Components:
appstore

APT 当前已验证 Packages 数据:

Size:
25893570

SHA256:
62475ed8562a446769396e534fb067bfeee71132d60cf1d31fd09f5baa2d0721

CDN 实际返回对象

入口:

https://com-store-packages.uniontech.com/appstore-V25/pool/appstore/d/deepin-wine-builder/deepin-wine-builder_4.0.0.10+v25-1_amd64.deb

入口返回:

HTTP 307

最终映射到:

https://app-store-files.uniontech.com/apppkg/e2b82cf32e9a430ca47aa33d5a1135c8.deb

使用与 APT 类似的 User-Agent 请求,可以正常返回文件。

通过:

Range: bytes=0-0

测试得到:

HTTP 206 Partial Content

Content-Length:
1

Content-Range:
bytes 0-0/25804938

因此 CDN 实际对象总大小为:

25804938 bytes

但签名 Packages 索引要求:

25893570 bytes

差值:

88632 bytes

CDN 缓存信息

当前响应:

X-Cache-Status: HIT

Age: 536459

ETag:
"7B655CD85A3169CF29D249D5555B4CF6"

Last-Modified:
Thu, 27 Aug 2026 12:07:28 GMT

Server:
Tengine

OSS 信息包括:

x-oss-request-id:
6A94E1B8CAC22F323434B659

x-oss-object-type:
Normal

x-oss-hash-crc64ecma:
13520554241787285755

x-oss-storage-class:
Standard

Age = 536459,约:

6.21 天

此前同一对象观察到:

Age = 465085

随后增长到:

Age = 536459

增长约:

71374 秒
≈ 19 小时 50 分钟

在此期间以下信息始终未变化:

Size:
25804938

ETag:
"7B655CD85A3169CF29D249D5555B4CF6"

Last-Modified:
Thu, 27 Aug 2026 12:07:28 GMT

Object ID:
e2b82cf32e9a430ca47aa33d5a1135c8

Cache-Control 测试

使用:

Cache-Control: no-cache
Pragma: no-cache

重新请求。

结果仍然:

X-Cache-Status: HIT
Size: 25804938

ETag、Last-Modified、对象内容特征均未变化。

no-cache 没有使 CDN 获取与当前 Packages 索引匹配的新对象。


Cache-busting 测试

对 App Store 入口 URL 添加唯一 query string:

?cachebust=

结果:

  • 入口仍然返回 HTTP 307
  • query string 在重定向过程中被丢弃
  • 仍然映射到:
e2b82cf32e9a430ca47aa33d5a1135c8.deb
  • 最终仍为:
X-Cache-Status: HIT
Size: 25804938

因此客户端无法通过普通 cache-busting 绕开该旧对象。


APT 实际表现

执行正常安装时,APT 报错类似:

File has unexpected size
Mirror sync in progress?

APT 没有开始解包软件包。

随后检查:

dpkg --audit

正常。

apt-get check

正常。

以下包均未安装:

deepin-wine-builder
deepin-wine10-stable
deepin-wine11-stable
deepin-wine-staging
deepin-wine-logtool

已排除的问题

已经确认:

APT 签名问题

不是。

apt update

签名验证成功。

没有:

NO_PUBKEY

或其他认证错误。

软件依赖问题

不是。

在当前 Deepin 25 Crimson 环境中:

libdtk6core     6.7.47.1
libdtk6gui      6.7.47
libdtk6widget   6.7.47
libdtk6log      6.7.47
libqt6widgets6  6.8.0+dfsg-0deepin28

均满足 Builder 要求。

执行:

apt install --simulate \
  deepin-wine-builder \
  deepin-wine11-stable

可以正常解析:

2 upgraded
269 newly installed
0 removed

无:

  • broken dependency
  • downgrade
  • 跨发行版基础仓库替换

本地 APT/dpkg 损坏

不是。

dpkg --audit:正常
apt-get check:正常

当前判断

目前可以确认:

已签名的 App Store Packages 元数据与实际 CDN 对象长期不一致。

当前网络路径持续命中:

Size = 25804938

的旧对象,而当前已签名 Packages 要求:

Size = 25893570
SHA256 = 62475ed8562a446769396e534fb067bfeee71132d60cf1d31fd09f5baa2d0721

并且:

Age > 6 days
X-Cache-Status = HIT

同时:

  • Cache-Control: no-cache 无效
  • cache-busting query 无效
  • 最终 object ID 长期不变
  • ETag 长期不变
  • Last-Modified 长期不变

因此高度怀疑以下环节之一存在异常:

  1. App Store CDN cache invalidation 未正常执行;
  2. 上游 CDN cache 长期保留旧对象;
  3. App Store package -> apppkg object mapping 没有指向正确的新对象;
  4. 软件包发布时更新了 Packages 索引,但对应 CDN object 没有同步更新。

由于当前网络使用代理/TUN,DNS 返回 Fake-IP,无法直接枚举真实 CDN edge,因此无法进一步确认具体是哪一级 CDN 节点出现问题。


希望官方协助检查

请协助检查:

Package:
deepin-wine-builder

Version:
4.0.0.10+v25-1

对应:

apppkg/e2b82cf32e9a430ca47aa33d5a1135c8.deb

是否确实应该对应当前 Packages 中:

Size:
25893570

SHA256:
62475ed8562a446769396e534fb067bfeee71132d60cf1d31fd09f5baa2d0721

以及 App Store/CDN 是否需要:

  • purge 旧缓存;
  • 更新 object mapping;
  • 重新发布该 Builder 软件包;
  • 或重新生成 App Store Packages 元数据。

目前没有使用:

--allow-unauthenticated
--fix-missing
trusted=yes
dpkg --force-*

也没有绕过 APT 的完整性检查。

Reply Favorite View the author
All Replies
avatar
𰻞𰻝面
deepin
2026-09-07 03:53
#1

没有遇到啊,可以安装成功。是不是你的网络运营商进行流量劫持,导致数据异常,换个DNS试试

Reply View the author
avatar
加菲不是胖橘
deepin product team
2026-09-07 10:45
#2

目前只看到你这一例下载失败,可能是你这边网络问题下载的包不完整,你apt update更新下索引了再重新安装试试。

Reply View the author
avatar
Frank-lab-hash
deepin
2026-09-07 12:27
#3
加菲不是胖橘:

目前只看到你这一例下载失败,可能是你这边网络问题下载的包不完整,你apt update更新下索引了再重新安装试试。

已多次执行 apt update,索引签名验证正常。进一步抓取 HTTP 响应后发现并非下载中断:当前 Packages 索引声明 deepin-wine-builder 大小为 25893570,但 CDN 对象自身通过 Content-Range 明确声明总大小为 25804938。

当前响应长期为 X-Cache-Status: HIT,Age 已超过 6 天,Last-Modified 为 8 月 27 日;Cache-Control: no-cache 后仍返回同一对象。

另一位用户能正常安装,因此我怀疑可能只是部分 CDN/网络路径命中了旧缓存,而非全局问题。能否帮忙检查一下 e2b82cf32e9a430ca47aa33d5a1135c8.deb 的 CDN 缓存/对象映射是否正常?

Reply View the author
avatar
neko
deepin
Ecological co-builder
Q&A Team
2026-09-07 13:49
#4

大概率是区域CDN同步的锅,开源用超级ping改hosts指定host到其它CDN服务器应该能暂时解决。

Reply View the author
avatar
在月光下等候清晨
deepin
2026-09-08 11:09
#5

apt更新索引后,通过应用商店更新兼容引擎、通过终端apt更新兼容引擎是否正常,如果正常就不要再纠结了。

Reply View the author
avatar
Frank-lab-hash
deepin
2026-09-08 14:42
#6

又做了进一步多节点测试。通过 AliDNS/Google DoH 获取真实公网地址后,用 curl --resolve 保持官方 hostname、SNI 和正常 TLS 校验逐节点测试:

  • 两个 App Store 入口 IP 120.77.173.206、112.74.190.222 都 307 到同一个 e2b82cf32e9a430ca47aa33d5a1135c8.deb
  • 文件 CDN 测试了 220.205.124.35、156.238.128.8/9/10
  • 四个节点全部返回 Size=25804938
  • ETag、Last-Modified、CRC64 也完全一致

但当前已签名 Packages 索引仍要求:

Size=25893570

SHA256=62475ed8562a446769396e534fb067bfeee71132d60cf1d31fd09f5baa2d0721

因此基本可以排除单个区域 CDN edge 缓存异常。看起来更像 App Store 的 package→apppkg 映射、共享上游缓存、origin object 或发布流程问题。麻烦官方重点检查 e2b82cf32e9a430ca47aa33d5a1135c8.deb 对应的源对象是否正确。

Reply View the author