0

我知道还有其他应用程序,但考虑到 yum/apt-get/aptitude/pacman 你是 linux 发行版的核心包管理器。

今天我在我的 Fedora 13 盒子上看到:

(7/7): yum-3.2.28-4.fc13_3.2.28-5.fc13.noarch.drpm       |  42 kB     00:00     

我开始想知道这样的包是如何自我更新的?需要什么设计来确保程序可以自我更新?

也许这个问题太笼统了,但我觉得 SO 比programmers.SE 更适合这样一个问题,因为它本质上更具技术性。如果这个问题有更合适的地方,请随时告诉我,我可以关闭或主持人可以移动。

谢谢。

4

2 回答 2

1

我不知道这些特定系统是如何工作的,但是...

  • 现代 unix 系统通常会容忍覆盖正在运行的可执行文件而不会打嗝,所以理论上你可以做到这一点。
  • 您可以在 chroot 监狱中执行此操作,然后移动或类似的东西来减少系统易受攻击的时间。添加一个日志文件系统,这仍然更安全一些。

我突然想到,包管理器还需要将包访问数据库保存在内存中,以确保那里不会出现竞争条件。同样,chroot jail and copy 选项可作为风险较低的替代方案。

于 2010-10-15T18:26:38.213 回答
0

我开始想知道这样的包是如何自我更新的?需要什么设计来确保程序可以自我更新?

就像很多事情一样,您不需要专门“设计”来解决这个问题……但您确实需要了解某些“陷阱”。

例如,Unix 通过引用计数 inode 来提供帮助,因此“您”可以删除您仍在使用的文件,这很好。但是,这意味着您必须做一些事情,例如,如果您有插件,那么您需要在运行开始事务之前将它们全部加载......即使插件只会在事务结束时运行(因为您可能最后有不同的版本)。

您还需要做一些事情来确保您正在更新的任何东西都能正常工作,例如: 在删除旧文件之前先放下新文件。并且不要截断旧文件,只需取消链接即可。但这些也可以帮助你:)。

使用与您沟通的外部问题可能会很棘手(因为在旧版本更新后您无法执行旧版本的新副本)。但这并不经常这样做,而且当它用于下载之类的事情时……这可以很容易地在任何更新之前发生。

还有一些事情在 yum/apt 等 cmd 行客户端中不是问题,例如,如果您有一个程序要运行 2+“更新”,那么如果第一次更新是对包的更新,您可能会遇到问题经理。降级使这更加有趣:)。此外,类似守护进程的进程基本上不应该“加载”包管理器,但与其他陷阱一样……出于其他原因,您倾向于遵循这一点。

于 2010-10-27T15:03:47.140 回答