如何安装特定的 Ubuntu deb 包(具有精确的版本)?

如何安装特定的 Ubuntu deb 包(具有精确的版本)?

我想要使​​用所提供的一些指定包(名称和版本)来设置一个新的虚拟机。

例如,apache2 版本2.2.20-1ubuntu1包含所有依赖项。即使服务器上有此软件包的新版本,也应该安装此版本。

解决方案必须与多个 (n)“设置”配合使用/扩展。另一个虚拟机可能需要较旧版本的 apache2。

我目前知道一些安装精确软件包的可能性,但扩展性不太好:

  1. 手动将所有必需内容复制*.deb到每个虚拟机并输入:dpkg -i...-> 可以工作,但很容易出错。(手动脚本等)
  2. 为每个设置创建并使用一个新的 Ubuntu 存储库。-> 不起作用,因为我需要 n 个存储库。
  3. 设置一次机器并复制虚拟机/创建快照。-> 不起作用,因为我需要存储 n 个虚拟机。

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

答案1

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

通过在软件包名称后面加上等号和要选择的软件包版本,可以选择要安装的软件包的特定版本。这将导致找到并选择该版本进行安装。或者,也可以通过在软件包名称后面加上斜线和发行版版本或存档名称(稳定、冻结、不稳定)来选择特定的发行版。

例如,你可以这样做:

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 list -a apache2

答案2

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

sudo apt-cache madison ^apache2

如果不起作用,请考虑sudo apt-get update先运行以更新包列表。

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

sudo apt-get install apache2=2.2.\*

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

dpkg -l 'apache2*' | grep ^i

如果版本信息被截断,请尝试:

COLUMNS=100 dpkg -l <packageName>

答案3

我将使用系列中其他方便的版本控制命令来扩展之前的答案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.

答案4

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

相关内容