关于linux存储库管理器如何自我更新的设计原则?

时间:2010-10-15 18:21:08

标签: repository yum apt-get aptitude pacman

我知道还有其他应用程序,但考虑到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     

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

也许这个问题太笼统但我觉得这比程序员更合适。对于这样一个问题,它本质上更具技术性。如果有一个更适合这个问题的地方,请随时告诉我,我可以关闭或主持人可以搬家。

感谢。

2 个答案:

答案 0 :(得分:1)

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

  • 现代unix系统通常会容忍在没有打嗝的情况下覆盖正在运行的可执行文件,因此理论上你可以这样做。
  • 您可以在chroot监狱中进行,然后移动或类似的东西,以减少系统易受攻击的时间。添加一个日志文件系统,这仍然有点安全。

我发现包管理器需要将包访问数据库保存在内存中以确保其中存在竞争条件。同样,chroot监狱和复制选项可作为低风险替代方案。

答案 1 :(得分:0)

  

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

这就像很多东西,你不需要专门“设计”来解决这个问题......但你需要知道某些“陷阱”。

例如,Unix通过引用计数inode帮助,所以“你”可以删除你仍在使用的文件,并且没关系。然而,这意味着你需要做的一些事情,例如,如果你有插件然后你需要在之前加载它们你运行启动一个事务...即使插件只运行在最后事务的原因(因为你最后可能有不同的版本)。

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

使用与之通信的外部问题可能会非常棘手(因为在更新之后您无法执行旧版本的新副本)。但这种情况并不经常发生,当它出现在下载之类的时候......在任何更新之前都可以轻易实现。

在yd / apt等cmd行客户端中也有一些问题,例如,如果你有一个程序将运行2+“更新”,那么如果第一次更新是到包管理器。降级使这更有趣:)。 另外守护进程应该基本上不会“加载”包管理器,但与其他陷阱一样......无论如何,你倾向于想要遵循这一点,原因还有其他原因。