首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >apt-获取/智能更新如何确定要更新哪些包列表?

apt-获取/智能更新如何确定要更新哪些包列表?
EN

Ask Ubuntu用户
提问于 2012-06-28 21:30:35
回答 1查看 697关注 0票数 0

上下文是一个bug,Ubuntu每30分钟在其存档镜像上更新软件包列表时间戳,这迫使[apt-get|aptitude] update命令下载包列表,尽管它们没有更改:

建议的解决方法是在运行touch之前在受影响的索引文件上运行apt-get update。这使他们的时间戳流行,并避免了不得不重新下载他们。这将使处理速度提高几分钟(在各种测试中分别为2-3秒和2-6分钟)。尽管运行了本地apt-cache-ng代理,但还是存在这种情况。

我们将遇到这样的测试(主要是),并为我们的AWS基础设施部署(某种程度上)基于Ubuntu的映像,apt-get update在其中运行了几次。3-6分钟和3-20秒对我们的迭代时间有很大的不同。

我觉得奇怪的是,apt不依赖文件大小或散列来确定文件是否发生了变化。时间戳是非常微不足道的修改,似乎是非常脆弱的基础上的这种行为。

EN

回答 1

Ask Ubuntu用户

发布于 2012-06-28 23:01:13

当我第一次测试touch hack时,我感到惊讶的是,apt使用本地文件mod时间来通知http服务器下载什么--但显然是这样的(否则黑客不会成功)。

下载的发布文件包含可靠的日期,这些文件是经过低温签名的,因此是相当值得信赖的,但是散列并不用于确定要下载的包文件。

使用现在用于包文件的时间戳方法,镜像站点没有什么特殊需要。我们欠Debian项目的设计。它有助于镜像所有者保持Ubuntu与Debian相同,并保持事物的香草,因此易于管理。

据我所知,这种设计通常运作得很好。就我而言,这只是一个应该修复的bug,但是这个bug是在规范的私有代码中,所以像我这样的局外人无法帮助修复它。我希望他们这么做,因为我们滥用那些运行Ubuntu镜像的人的好客,除了给一些Ubuntu用户造成不必要的费用,他们必须用千兆字节支付带宽。

有一种使用etag来表示服务项的http协议机制,但它不用于apt-get。这样的标签可以包含发布文件中的散列。

Ubuntu版本中包含了大量的包,这使得这个bug变得如此重要。

从已签名(因此也是校验求和)版本中,这些文件有散列,在这些文件中,包的版本有散列,而文件的校验和。由于包文件包含版本号,而且它们不会更改,所以错误不会导致冗余包升级。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/157337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档