假设我“ apt-get install somepkg ”,然后进一步安装依赖于“somepkg”的其他软件包(“abc”和“def”)。后来,我可能会读到包的最新发布源中有一些理想的更新,但我可以看到通过包管理器提供的预构建版本卡在一个非常旧的版本上,所以我然后从最新版本获取、制作和安装发布源。
但是,我现在看到我有 2 个不同版本/集的各种内置/安装包。例如/bin/somepkg-tool (v 1.0)、/usr/bin/sompkg-tool (v1.0),以及更新的、从最新构建的/usr/local/bin/somepkg -工具( v4.1),它提出了一些问题-
- 从不同版本安装多组二进制文件(一组来自预构建的包管理器,一组来自本地构建的最新 src)可能会出现问题吗?感觉就像是最好避免的潜在问题的来源。
- 如果我要使用“ sudo apt-get purge somepkg ”删除较旧的预构建托管包,现在提示也删除依赖包“abc”和“def”,这让我感到不舒服,因为不清楚这是否严格必要的,或者他们是否可以通过在路径上找到较新构建的二进制文件来继续工作。删除/清除以前安装的包是否不可避免地会删除后续的依赖包?另外,如果我接受删除依赖包,包管理器会/可以看到后续(重新)安装“abc”和“def”不再需要获取和安装旧的“somepkg”,因为我已经在本地构建并从 src 安装了必要的“somepkg”二进制文件?
- 或者是否有某种方法可以通过包管理器清除旧安装的“somepkg”而不删除 2 个依赖包?
- 是否有解决这种情况的一般最佳方法,或者通常最好根据具体情况进行处理?
我在这里注意到了一个类似的未回答的问题,但是,评论集中在具体案例上,这是相当有问题的,因为它是许多事情的基本依赖。
不想分散这个问题的一般性质,说明一个具体案例可能很有用 -
- 我'apt-get install git' (v2.30.2)
- 我后来'apt-get install gitolite3'和'... git-lfs'。
- 后来,我在发行说明中看到了一些修复/更新,我的 debian 包管理器告诉我最新的 git 包卡在旧版本上(apt-get update,apt show git)所以我'wget ...git-2.37 .3.tar.gz',从较新的发布源制作和安装。
现在我看到我有以下二进制文件(在 git 包附带的所有其他文件中) -
- /bin/git (v2.30.2旧)
- /usr/bin/git (v2.30.2旧)
- /usr/local/bin/git (v2.37.3新)
并希望确保避免依赖 gitolite 存储库服务器和 LFS 服务器因无意中使用较旧的 git 二进制文件而出现问题。因此,这些问题。
如果您始终知道如何
PATH
设置,则可以控制它,但是是的,这可能是问题的根源。包管理器只知道包;它不知道您手动安装的二进制文件。
您可以使用
equivs
创建一个虚拟包来满足依赖关系。请参阅如何使 apt 忽略已安装包的未实现依赖项?请参阅如何安装比 Debian 提供的更新版本的软件?为了更好地解决这个问题,特别是对于已经打包
git
了较新版本的软件包- 如果它们在反向移植中不可用(Debian 11 目前为 2.34.1),您可以使用较新的源软件包重建实际的软件包。使用两个不同的安装系统(来自包管理器和由本地管理员“手动”编译/安装),很容易得到:
尽量避免手动安装重复的程序。如果您必须这样做,请创建大量文档,说明您以这种方式安装了哪些程序,以及您如何编译/安装它们。向包管理器添加配置以防止它安装您不想要的包(在这些配置中带有详细的注释)也是一件重要的事情。让您之后的下一位系统管理员轻松维护和更新这些程序。(通常,“下一个”管理员将是你,9 个月后这些细节的记忆已经消失)