![如何安装特定的 Ubuntu deb 包(具有精确的版本)?](https://linux22.com/image/1076650/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85%E7%89%B9%E5%AE%9A%E7%9A%84%20Ubuntu%20deb%20%E5%8C%85%EF%BC%88%E5%85%B7%E6%9C%89%E7%B2%BE%E7%A1%AE%E7%9A%84%E7%89%88%E6%9C%AC%EF%BC%89%EF%BC%9F.png)
我想要使用所提供的一些指定包(名称和版本)来设置一个新的虚拟机。
例如,apache2 版本2.2.20-1ubuntu1
包含所有依赖项。即使服务器上有此软件包的新版本,也应该安装此版本。
解决方案必须与多个 (n)“设置”配合使用/扩展。另一个虚拟机可能需要较旧版本的 apache2。
我目前知道一些安装精确软件包的可能性,但扩展性不太好:
- 手动将所有必需内容复制
*.deb
到每个虚拟机并输入:dpkg -i
...-> 可以工作,但很容易出错。(手动脚本等) - 为每个设置创建并使用一个新的 Ubuntu 存储库。-> 不起作用,因为我需要 n 个存储库。
- 设置一次机器并复制虚拟机/创建快照。-> 不起作用,因为我需要存储 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
实际上,这是不可能的,因为旧版本没有保存在档案中,所以除非你有旧版本的副本放在某处,否则你无法安装它。你应该问问自己为什么要安装旧版本。在稳定版本中,发布新版本的主要原因是为了纠正安全漏洞,你不想运行一个有漏洞的服务器,对吧?