当你通过文件手动安装软件包时,.deb
它不会被更新apt
(另请参阅如何更新从 .deb 文件安装的程序问题),但是当您安装当前 Ubuntu 版本的存储库中没有的软件包,但该软件包包含在更高版本的 Ubuntu 中时会发生什么。当您升级到默认包含该软件包的新版本时,系统是否会:
- 意识到该包已经安装并以适当的方式更新它。
- 意识到包已经安装,但保留手动安装的版本。
- 没有意识到已经安装而再次安装,导致同一个包被安装了两次。
- 以其他方式崩溃和烧毁?
如果后面任何一个选项是正确答案,我该如何防止这种情况发生?
答案1
软件包管理器并不关心软件包是否已被dpkg
或安装apt
。如果它在存储库中找到软件包的较新版本,则会安装该较新版本。
就您而言,这意味着如果新 Ubuntu 版本中的软件包具有更高的版本号,您的软件包就会得到更新。
看 ”如何阻止特定包的更新?“如果您不想更新您的软件包。
答案2
也许只有某些来源才具有更新功能。您发布的链接指出,当您使用 dpkg 安装时,它会绕过 apt,因此不会更新。
作为测试,我搜索了 Utopic 中可用的 nodejs 版本(v0.10.25),然后使用 checkinstall 安装了 nodejs(v0.10.20)
我下载并解压然后运行:
./configure
make
sudo checkinstall -D
安装后我检查了版本,实际上是 0.10.20
然后我做了
sudo apt-get update
sudo apt-get upgrade
并被告知节点被阻止了
所以我尝试了
sudo apt-get dist-upgrade
并且它更新了节点。我检查了之后的版本,它报告了 0.10.25(Utopic 可用的版本)
所以我不确定是否只有一些手动安装的软件包才会更新,或者是否因为我使用 checkinstall 来制作 deb/install。
唯一奇怪的是当我手动安装时我检查了版本
node -v
但由于使用 apt 更新,现在我必须使用
nodejs -v
因此,我再次使用 checkinstall 从源代码构建了一个旧版本的 deb,然后使用
sudo apt-get dist-upgrade