我的基本目标是能够在生产环境中支持较旧的二进制文件和库,同时仍使用较新的库和二进制文件。
基础设施设置:
- Ubuntu Linux
- 使用 debian 软件包中的相关库
- C++共享库
我们希望保留多个版本的原因:
- 将生产作业分段移至新库
- 当底层 c++ boost 库发生变化时,依赖库应该针对新的 boost 版本重新编译
- 不希望库依赖关系因单个生产版本而改变--
答案1
据我所知,最佳做法是创建镜像官方存储库的本地存储库,并在同步脚本中排除您不想更新的软件包。
您也可以使用固定: https://help.ubuntu.com/community/PinningHowto
但另一方面,发行版发布后通常不会更改软件包的版本。他们只是修复了安全问题,但版本保持不变。
所以,只要您不从 ubuntu 10.04 更改为 10.10,您的二进制文件和库就应该保持相同的版本。(这适用于官方软件包,如果您正在构建自己的软件包,请使用它们创建本地存储库并检查有关 .deb 存储库的文档,因为存储库本身能够进行某种版本控制)。
答案2
通常,同一个软件包的两个版本提供相同的文件,并且您不能有两个具有完全相同路径的不同文件……除非您欺骗应用程序。欺骗应用程序的一种方法是将其运行在chroot环境。你可以从原始文件系统中mount --bind
删除ln
大部分内容以节省硬盘空间。在我看来,在 chroot 中系统地运行应用程序最方便的方法是schroot
。只需apt-get install schroot
在 Debian/Ubuntu 下,然后阅读手册。
一个更强大(但设置起来更棘手)的解决方案是使用容器, 例如龙芯它可以提供文件系统的“虚拟化”视图(以及许多其他东西)。可能,这对您的情况来说有点过头了。
哎呀,我不能发布声誉这么小的链接……