xpzouying/xiaohongshu-mcp · error
解压失败: %w
Error message
解压失败: %w
What it means
EnsureBrowser 在 SHA256 校验通过后解压浏览器压缩包到缓存目录时 extractArchive 失败:磁盘空间不足、权限问题或压缩包格式异常。
Source
Thrown at browser/browser_download.go:117
logrus.Warnf("下载失败(第 %d/3 次): %v", attempt, dlErr)
_ = os.Remove(archivePath)
time.Sleep(2 * time.Second)
}
if dlErr != nil {
return "", fmt.Errorf("下载内置浏览器失败: %w\n"+
" 本项目只用内置浏览器,缺它不继续。请检查网络后重试;\n"+
" 离线环境可手动下载 %s,解压到 %s 后重启。", dlErr, browserURL(asset), cacheDir)
}
defer os.Remove(archivePath)
// 校验 SHA256(本地已成分发点,必须校验完整性)
if err := verifySHA256(archivePath, asset); err != nil {
return "", fmt.Errorf("校验失败: %w", err)
}
logrus.Infof("解压内置浏览器 ...")
if err := extractArchive(archivePath, cacheDir); err != nil {
return "", fmt.Errorf("解压失败: %w", err)
}
bin := findBinary(cacheDir, binName)
if bin == "" {
return "", fmt.Errorf("解压后未找到二进制 %s", binName)
}
logrus.Infof("内置浏览器就绪: %s", bin)
return bin, nil
}
// verifySHA256 下载同目录的 SHA256SUMS,校验 asset 的哈希。
func verifySHA256(archivePath, asset string) error {
want, err := fetchExpectedSHA(asset)
if err != nil {
return err
}
f, err := os.Open(archivePath)
if err != nil {View on GitHub (pinned to 332d196854)
Solutions
- 检查磁盘剩余空间并清理
- 确认缓存目录(os.UserCacheDir 下)可写
- 手动下载资产并解压到缓存目录,跳过下载/解压路径
- 确认解压库支持对应格式(dmg/tar.xz/zip)
Example fix
// before
bin, err := browser.EnsureBrowser() // 解压失败
// after
// 预先检查空间与可写性
if err := checkDiskSpace(cacheDir, 500<<20); err != nil { return err }
bin, err := browser.EnsureBrowser() Defensive patterns
Strategy: validation
Validate before calling
// 运行前检查磁盘与缓存目录可写
f, err := os.CreateTemp(cacheDir, ".wtest")
if err != nil { return fmt.Errorf("缓存目录不可写: %w", err) }
f.Close(); os.Remove(f.Name()) Prevention
- 确保缓存盘剩余空间充足
- 不要把缓存目录挂载为只读
- 确认解压库支持 dmg/tar.xz/zip 三种格式
- 离线环境可手动解压到缓存目录绕过该路径
When it happens
Trigger: extractArchive 出错:.tar.xz/.zip/.dmg 解压依赖缺失或库不支持该格式、目标磁盘满、缓存目录权限不足、压缩包虽校验通过但结构异常。
Common situations: 磁盘配额耗尽的 CI/容器环境;只读文件系统挂载缓存目录;环境缺少 xz 解压依赖。
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/e7afeb90d807b035.
Report an issue: GitHub.