我创建了一个私人 deb 存储库,用于将软件及其更新传播到 600 台 Ubuntu 上网本。每次连接网络时,我的脚本都会尝试执行 apt-get 更新。
但有时(事实上经常),我会遇到这种情况:
Failed to fetch https://myserver/ubuntu/dists/maverick/main/binary-i386/voosicomat.deb **Size mismatch**
该服务器是 2.2 Apache,仅支持 HTTPS。其日志中没有错误。
脚本如下:
apt-get update
apt-get dist-upgrade --force-yes --yes
以下是 apt-get 的完整输出
Ign https://myserver maverick Release.gpg
Ign https://myserver/ubuntu/ maverick/main Translation-en
Ign https://myserver maverick Release
Ign https://myserver maverick/main i386 Packages/DiffIndex
Ign https://myserver maverick/main i386 Packages
Ign https://myserver maverick/main i386 Packages
Hit https://myserver maverick/main i386 Packages
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
majdb utilitaires voosicomat
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 6207kB/6273kB of archives.
After this operation, 0B of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
utilitaires voosicomat majdb
Get:1 https://myserver/ubuntu/ maverick/main voosicomat all 2.0.1 [4755kB]
Get:2 https://myserver/ubuntu/ maverick/main majdb all 1.0.17 [1452kB]
Failed to fetch https://myserver/ubuntu/dists/maverick/main/binary-i386/voosicomat.deb Size mismatch
Fetched 7091kB in 21s (324kB/s)
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
答案1
您的问题可能是 repo 错误。如果索引未在 repo 上更新,那么您将收到(不太有用的)Size mismatch
错误。
一个可能的解决方法是通过以下方式更新你的仓库
- 删除问题包
- 将软件包复制回存储库
- 运行存储库更新脚本
sudo /usr/local/deb/update
您还可以编辑 apt sources.list 以删除除本地存储库之外的所有存储库。
答案2
以上答案对我都不起作用。结果发现问题与某些代理和 HTTP/1.1 流水线有关
apt-get -o Debug::Acquire::http=true update
显示了一些来自 2012 年的疯狂的 Last-Modified Headers... 我们也遇到了这个问题,下载的软件包的内容与我们预期的不同,这很奇怪
解决方案是禁用 apt 的 http 管道
1)创建文件/etc/apt/apt.conf.d/00httppipeline
2)复制粘贴Acquire::http::Pipeline-Depth "0";
3)删除 apt 缓存rm -rf /var/cache/apt/*
之后,大小不匹配或哈希大小不匹配错误消失了,我可以升级我的软件包
答案3
我正在运行 Ubuntu 11 并删除了 /var/cache/apt/archives/ 下的所有 *.deb
然后运行:apt-get --fix-install install
似乎有效。
答案4
我正在运行 Elementary OS:
删除已安装(不再需要)的下载软件包(.deb)
sudo apt-get clean
删除缓存中所有无法再下载的软件包(即不再存在于存储库中的软件包或存储库中具有较新版本的软件包)。
sudo apt-get autoclean
删除不必要的软件包(卸载应用程序后,可能会有一些你不再需要的软件包)
sudo apt-get autoremove
这修复了我的错误。