导读:听起来像一个简单的任务,对吧?但是事情并非看起来那么简单。这里有一些不确定是否会出现,但是可能会涉及的东西。
在 Ubuntu 中想安装一个软件包的一个特别指定的版本?你可以通过下面的方式来轻松地完成:
你如何知道某个软件包有哪些可用的版本?可以使用这个命令:
在下面的屏幕截屏中,你可以看到,我有两个可用的 VLC 版本,我使用命令来安装较旧的版本:
install specific versions apt ubuntu
听起来像一个简单的任务,对吧?但是事情并非看起来那么简单。这里有一些不确定是否会出现,但是可能会涉及的东西。
这篇教程将涵盖使用apt或apt-get命令来安装一个具体指定的程序的版本的所有的重要的方面。
安装一个具体指定版本的程序需要知道的事
在基于 Ubuntu 和 Debian 发行版中,你需要知道一些关于 APT 和存储库是如何工作的知识。
同一个软件包源没有较旧的版本
Ubuntu 在其存储库中不保留较旧版本的软件包。在特殊的情况下,你可以暂时性地看到多个版本。例如,你运行 APT 更新(但不升级)时,可能会有一个可用的新版本。在 APT 缓存中,你可以看到同一个软件包的两个版本。但是,一旦软件包被升级到了新的版本,较旧版本的软件包将从APT 缓存和存储库中移除。
使用多个软件包源来使用不同的版本
为获取同一个的软件包的多个版本,你必须得添加多个软件包源。例如,VLC 是版本 3.x 系列。添加VLC 每日构建 PPAlaunchpad.net将会提供(不稳定的)版本 4.x 系列。
同样,你可以下载不同版本的 DEB 文件,并安装它。
较高版本编 的版本通常有优先权
如果你有来自多个软件包源的相同名称的软件,默认情况下,Ubuntu 将安装可用的最高版本编 的版本。
在前面的示例中,如果我安装 VLC ,那么它将会安装 4.x 系列的版本,而不是 3.x 系列的版本。
较旧版本将升级到可用的较新版本
这是另外一个可能存在的问题。即使你安装较旧版本的软件包,它也会升级到较新的版本(如果存在可用的较新版本)。你必须保留该软件包来防止其升级itsfoss.com。
依赖关系也需要安装
如果软件包有依赖关系,你也需要安装必要的依赖关系软件包。
现在,你已经知道一些可能存在的问题,让我们看看如何解决它们。
安装一个软件包的具体指定版本
在这篇教程中,我将以 VLC 为例。在 Ubuntu 的存储库中可获得 VLC 版本。我添加了每日构建 PPA ,它将向我提供 VLC 的 4.0 版本的候选版本。
如你所见,在现在的系统中,我有两个可用的 VLC 版本:
install specific versions apt ubuntu
因为较高版本编 版本有优先权,使用apt install vlc命令将会导致安装 VLC 的 4.0 版本。但是,因为这篇教程的缘由,我想安装较旧的版本 3.0.16 。
但是,这里会有这样的事。VLC 软件包有一些依赖关系,并且这些依赖关系也需要具体指定的版本。因此,在 Ubuntu 为其尝试安装最新的版本时,你将会遇到经典的你已保留残缺软件包itsfoss.com(you have held broken packages)错误。
problem installing specific version apt ubuntu
为修复这个错误,你需要为其提供它所投诉的所有依赖关系的软件包的具体指定版本。因此,该命令会变成这样:
说明一下,每行结尾处的 只是用来将多行命令来写入同一个命令的一种方式。
它有作用吗?在很多情况下,它是有作用的。但是,我选择了一个复杂的 VLC 示例,它有很多依赖关系。甚至这些所涉及的依赖关系也依赖于其它的软件包。所以,它就变得令人难以处理。
一种替代的方法是在安装时指定软件包源。
替代方式,指定存储库
使用下面的命令来搜索存储库:
注意存储库名称后面的行:
你可以具体指定 、、 等参数。
在我原来的示例中,我想安装来自 Ubuntu 存储库的 VLC(获取版本 3.16),而不是安装来 PPA 的版本(它将向我提供版本 4)。
因此,下面的命令将安装 VLC 版本 3.16 及其所有的依赖关系:
install from repository source
看起来令人满意?但是,当你必须更新系统时,问题就来了。它接下来会控诉找不到指定的软件包版本。
还能做什么?
为安装较旧的软件包版本,从你的系统中移除较新版本的软件包源(如果可能的话)。它将有助于逃脱这些依赖关系地狱。
如果不能这么做,检查你是否可以从其它一些软件包的打包格式来获取,像 Snap、Flatpak、AppImage 等等。事实上,Snap 和 Flatpak 也允许你从可用的版本中选择和安装。因为这些应用程序是沙盒模式的,所以它很容易管理不同版本的依赖关系。
保留软件包,防止升级
如果你完成安装一个指定的程序版本,你可能想避免意外地升级到较新的版本。实现这一点并不太复杂。
你可以免除保留软件包,以便它能稍后升级:
注意,软件包的依赖关系不会自动地保留。它们需要单独地指明。
结论
如你所见,安装选定软件包版本有一定之规。只有当软件包有依赖关系时,那么事情就会变得复杂,然后,你就会进入依赖关系地狱。
我希望你在这篇教程中学到一些新的东西。如果你有问题或建议来改善它,请在评论区告诉我。
via:https://itsfoss.com/apt-install-specific-version-2/
LCTT 译者 :郑
翻译: 103.0 篇
|
贡献: 1293 天
2018-12-03
→
2022-06-17
https://linux.cn/lctt/robsean
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!