当前位置: 首页>>技术教程>>正文


如何安装具体版本的Ubuntu软件包?

, , ,

问题描述

我想用一些指定的软件包(名称和版本)来设置新的虚拟机。

例如版本2.2.20-1ubuntu1中的apache2具有所有依赖关系。即使服务器上有这个软件包的新版本,也应该安装这个软件包。

解决方案必须使用多个(n)”setups”进行工作/扩展。另一个虚拟机可能需要更旧版本的apache2。

我目前知道安装确切软件包的一些可能性,但不会扩展这种好处:

  1. 手动将所有必需的*.deb复制到每个虚拟机,然后输入:dpkg -i … – >可以工作,但很容易出错。 (手动脚本等)

  2. 为每个设置创建并使用新的Ubuntu存储库。 – >不起作用,因为我需要n个存储库。

  3. 设置一次机器并复制VM /创建快照。 – >不起作用,因为我需要存储n个虚拟机。

我的问题可能被标记为补丁管理,但我不想将我的软件包更新为当前版本。我的目标是安装旧的软件包。

最佳解决方案

您可以使用apt-get安装该软件包的特定版本,只要它位于知道的存档中即可。来自apt-get手册页:

A specific version of a package can be selected for installation by following the package name with an equals and the version of the package to select. This will cause that version to be located and selected for install. Alternatively a specific distribution can be selected by following the package name with a slash and the version of the distribution or the Archive name (stable, frozen, unstable).

例如,你可以这样做:

sudo apt-get install apache2=2.2.20-1ubuntu1

请注意,在这种情况下,您可能需要自行完成一些依赖关系解析,但是如果出现任何问题,apt-get会告诉您是什么导致了它们。在我的11.10系统中,我需要执行以下操作才能使其工作:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

次佳解决方案

要检查哪些版本可用,可以通过以下方式进行检查:

sudo apt-cache madison ^apache2

如果不起作用,请在运行sudo apt-get update之前更新软件包列表。

然后复制该版本或使用以下语法:

sudo apt-get install apache2=2.2\*

要检查您安装的版本,请运行:

dpkg -l 'apache2*' | grep ^i

第三种解决方案

实际上,这是不可能的,因为旧版本不会保存在存档中,所以除非您有旧版本的副本放置在某处,否则无法安装它。你应该问自己为什么你想安装一个老版本。在一个稳定的版本中,发布新版本的主要原因是为了纠正一个安全漏洞,你不想运行一个易受攻击的服务器吗?

第四种方案

我将在apt系列中的其他便捷版本命令的基础上扩展早期的答案。要查看哪些版本可用,请运行apt-cache policy

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

然后,如别处所述,使用apt-get安装特定版本:

# apt-get install apache2=2.4.7-1ubuntu4.5
...

您现在可以再次运行apt-cache policy来查看您安装的版本:

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

如果您不希望在更新中安装更新的版本,请使用apt-mark将程序包固定在以下位置:

# apt-mark hold apache2
apache2 set on hold.

假设一个新版本的apache2被添加到包索引中,并且您的机器与apt-get update同步。当你下次运行apt-get upgrade时,你会看到这个:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/252.html,未经允许,请勿转载。