当前位置: 首页 > 科技观察

如何在Ubuntu中安装特定版本的包

时间:2023-03-15 09:03:30 科技观察

想要在Ubuntu中安装特定版本的包?您可以使用以下命令轻松完成此操作:sudoaptinstallpackage_name=package_version您如何知道哪些版本的软件包可用?您可以使用此命令:aptlist--all-versionspackage_name在下面的屏幕截图中,您可以看到我有两个版本的VLC可用,我使用命令安装旧版本:安装特定版本aptubuntulisten听起来像一个容易的事,对吧?但事情并不像看起来那么简单。这是不确定它是否会出现的东西,但可能会涉及。本教程将涵盖使用apt或apt-get命令安装特定版本程序的所有重要方面。安装特定版本的程序你需要知道的事情在基于Ubuntu和Debian的发行版上,你需要知道一些关于APT和存储库如何工作的事情。没有相同包源的旧版本Ubuntu不会在其存储库中保留旧版本的包。在特殊情况下,您可能会暂时看到多个版本。例如,当您运行APT更新(但不是升级)时,可能会有一个新版本可用。在APT缓存中,您可以看到同一个包的两个版本。但是,一旦软件包升级到新版本,旧版本的软件包将从APT缓存和存储库中删除。使用多个包源来使用不同的版本要获得同一个包的多个版本,您必须添加多个包源。比如VLC就是3.x系列的版本。添加VLC每日构建PPA将提供(不稳定的)版本4.x系列。同样,您可以下载不同版本的DEB文件并进行安装。版本号较高的版本通常优先。如果您有来自多个包源的同名软件,默认情况下Ubuntu将安装可用版本号最高的版本。在前面的例子中,如果我安装VLC,它会安装4.x系列的版本,而不是3.x系列的版本。旧版本将在可用时升级到新版本这是另一个可能的问题。即使您安装了旧版本的软件包,它也会升级到更新的版本(如果有更新的版本可用)。您必须保留该软件包以防止其被升级。还需要安装依赖如果包有依赖,还需要安装必要的依赖包。现在您知道了一些可能的问题,让我们看看如何解决它们。安装特定版本的包在本教程中,我将以VLC为例。VLC版本在Ubuntu的存储库中可用。我已经添加了每日构建PPA,这将为我提供VLC4.0版本的候选版本。如您所见,我当前系统上有两个版本的VLC:安装特定版本的aptubuntu~$aptlist-avlcListing...Donevlc/jammy4.0.0~rc1~~git20220516+r92284+296~ubuntu22。04.1amd64vlc/jammy3.0.16-1build7amd64vlc/jammy3.0.16-1build7i386因为版本号高的优先,使用aptinstallvlc命令会导致安装4.0版的VLC。但是,为了本教程,我想安装旧版本3.0.16。sudoaptinstallvlc=3.0.16-1build7但是,这里会有这样的东西。VLC包有一些依赖,这些依赖也需要特定的版本。因此,当Ubuntu尝试为其安装最新版本时,你会遇到经典的Youhaveleftabrokenpackage错误。安装特定版本的aptubuntu时出现问题要修复此错误,您需要为它提供所有依赖项所抱怨的软件包的特定版本。因此,该命令将如下所示:sudoaptinstallvlc=3.0.16-1build7\vlc-bin=3.0.16-1build7\vlc-plugin-base=3.0.16-1build7\vlc-plugin-qt=3.0。16-1build7\vlc-plugin-video-output=3.0.16-1build7\vlc-l10n=3.0.16-1build7\vlc-plugin-access-extra=3.0.16-1build7\vlc-plugin-notify=3.0。16-1build7\vlc-plugin-samba=3.0.16-1build7\vlc-plugin-skins2=3.0.16-1build7\vlc-plugin-video-splitter=3.0.16-1build7\vlc-plugin-visualization=3.0。16-1build7说明每行末尾的\只是将多行命令写入同一个命令的一种方式。它有效吗?在许多情况下,它是有效的。但是,我选择了一个复杂的VLC示例,它有很多依赖项。甚至所涉及的依赖项都依赖于其他包。所以,它变得笨拙。另一种方法是在安装时指定包源。或者,指定存储库您已经添加了多个包源,因此您应该对这些包的来源有所了解。使用以下命令搜索存储库:apt-cachepolicy|less注意存储库名称后面的行:500http://security.ubuntu.com/ubuntujammy-security/multiversei386Packagesreleasev=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=i386originsecurity.ubuntu.com可以指定o,l,a等参数。在我原来的示例中,我想从Ubuntu存储库(获得版本3.16)而不是PPA的版本(它会给我版本4)安装VLC。因此,以下命令将安装VLC3.16版及其所有依赖项:sudoaptinstall-t"o=ubuntu"vlcinstallfromrepositorysource似乎令人满意?但是,当您必须更新系统时,问题就来了。接下来它会抱怨找不到指定的包版本。我还能做什么要安装旧版软件包,请从您的系统中删除较新版本的软件包源(如果可能)。它将有助于摆脱这些依赖地狱。如果你做不到,检查你是否可以从其他一些打包格式中获取它,比如Snap、Flatpak、AppImage等。事实上,Snap和Flatpak也允许你从可用版本中选择和安装。因为应用程序是沙盒化的,所以很容易管理不同版本的依赖关系。保留包以防止升级如果您完成了特定程序版本的安装,您可能希望避免意外升级到较新的版本。实现这一目标并不复杂。sudoapt-markholdpackage_name您可以免除包的保留,以便以后可以升级:sudoapt-markunholdpackage_name请注意,不会自动保留包的依赖项。它们需要单独指定。结论如您所见,安装选定的软件包版本有一定的规则。只有当包具有依赖关系时,事情才会变得复杂,然后,你就会陷入依赖地狱。