我想知道从 Ubuntu 打包系统之外安装软件是否会使 apt/dpkg 工具混淆。我知道安装太新的 .deb 包并尝试手动递归解决依赖关系(因为依赖关系也太新)可能会使它们混淆。但是不同的打包工具(如 pip 或 snap)怎么办?通过“sudo make install”从源代码安装东西怎么办?我认为 apt/dpkg 不知道正在安装所有这些软件。那么这对这个打包系统的完整性是否安全?如果我这样做会怎么样:
sudo apt install cmake #low version from Ubuntu repository
sudo make install #high version from Cmake website in sources
sudo apt remove cmake
我假设两个安装都针对文件系统中的同一位置。
答案1
您正确地假设dpkg
和apt
不知道来自pip
或的这个额外软件sudo make install
。然而,这两个安装不要瞄准文件系统中的相同位置。额外的软件来自pip
或sudo make install
安装在您的 中优先级更高的目录中(更早)$PATH
。
如果您使用 标志从 安装软件包pip
,--user
而不使用sudo
,则软件包将安装到~/.local/bin
。使用 安装的软件包sudo make install
通常会安装到/usr/local/bin
。
如果您运行:echo $PATH
您将看到这些路径列在软件包使用的标准目录之前,因此当您运行命令时将执行手动安装的软件包。这有助于避免使用或deb
安装相同软件包时发生冲突。apt
dpkg
因此,您可以保持apt
依赖项满足,并且无需卸载apt
的版本cmake
。这样,您仍然可以通过执行完整路径在脚本或终端中调用dpkg
已安装的版本: 运行命令:执行该版本。cmake
/usr/bin/cmake
cmake
sudo make install
使用 安装的软件包也是如此pip
。例如,如果您youtube-dl
通过安装apt-get
然后使用 安装:pip install youtube-dl --user
,则将执行pip
版本:~/.local/bin/youtube-dl
而不是/usr/bin/youtube-dl
。
您可以安装两个相冲突的版本并且仍然可以使用它们。
这并不是说不会发生冲突。您的系统依赖于某些软件包(如 Python),如果您更改系统默认版本,这些软件包可能无法正常运行。此外,如果您不信任来源,则安装随机下载的软件被认为不太安全。手动下载的软件也可能存在错误或安全漏洞,您必须记住通过下载软件或使用 来手动更新pip
。
答案2
那么如果我不太确定某个包,我可以让 apt/dpkg 安装到 /usr/local(或 ~/.local)吗?我想不行,因为 .deb 包包含固定位置。另一方面,在使用这些工具处理时添加一个中缀并不是什么大问题。