在我们的业务服务器上,出于各种原因,我们想要使用 rpm 包,但我们无法将 rpm 包安装到系统数据库中(权限、多个实例等)。因此,我们创建了自己的本地 rpmdb,并以非 root 身份使用 --dbpath 参数安装包。因此,目前我们的本地数据库中可能只有 10 个包。这种方法效果很好,允许非 root 安装,并且允许同一包的多个实例,因为使用了多个 rpmdb。缺点是必须使用 --nodeps 安装所有内容,因为我们的本地数据库看不到在系统级别安装的任何包。
为了解决 --nodeps 问题,我可以使用多种方法使用当前系统数据库初始化本地数据库(例如,只需复制 /var/lib/rpm/Packages 并重建)。然后在上面安装我们的应用程序包应该可以让我们充分利用依赖项。但问题是如何在第一次复制后保持系统包同步。如果管理员安装系统补丁,则只有系统 rpmdb 会被更新。我正在寻找某种方法来编写夜间批处理作业,该作业将比较更新并将数据库更新仅应用于我们的本地副本。
有什么想法可以使用什么命令来实现这一点?
感谢您的帮助。Brian
答案1
--nodeps
、可重定位包以及手动管理 Berkeley DB 都很麻烦。你想三者都做吗?我不建议这样做,这会让包管理倒退 20 年。Fedora 或 EL 中很少有软件包是可重定位的,因为它无法通过 yum 进行管理。此外,nodeps 意味着您可能会遇到 yum 无法轻易修复的依赖关系。
为用户提供他们需要的每个实例的“主机”。虚拟机、容器、chroot(yum --installroot
),其中任何一个都可能比与 RPM 作斗争的时间更便宜。
自动配置。制定程序,让用户可以对软件包集提出更改建议,并及时进行审核。可以给某些用户测试实例的权限,这样他们就可以尝试一些东西而不会破坏任何重要的东西。
重新打包任何内容,这样就不需要重新定位或更换 rpmdb。移动到不冲突的路径,制作带有名称中版本号的单独软件包。一般来说,请遵循 Fedora RPM 打包指南。然后可以使用 yum 管理软件包。