2.2.20-1ubuntu1
中的apache2具有所有依赖性。即使在服务器上有此软件包的新版本,也应安装该软件包。另一个虚拟机可能需要apache2的旧版本。手动将所有必需的*.deb
复制到每个虚拟机,然后输入:dpkg -i
...->可以工作,但是很容易出错。 (手动脚本等)。为每个设置创建并使用新的Ubuntu存储库。 ->不起作用,因为我需要n个存储库。
设置一次机器并复制VM /创建快照。 ->无效,因为我需要存储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
#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
安装特定版本: br /> 现在,您可以再次运行
apt-cache policy
来查看已安装的版本:更新后,使用apt-mark
固定软件包:# apt-get install apache2=2.4.7-1ubuntu4.5
...
假设新版本的apache2已添加到软件包索引中,并且您的计算机与
apt-get update
同步。下次运行apt-get upgrade
时,您会看到此消息:# 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
#4 楼
实际上,这是不可能的,因为旧版本未保存在存档中,因此,除非您在某处放置了旧版本的副本,否则无法安装它。您应该问自己,为什么首先要安装旧版本。在稳定版本上,发布新版本的主要原因是要纠正安全漏洞,并且您不想运行易受攻击的服务器吗?评论
我需要它来为开发目的复制旧环境的精确副本。是否可以设置不删除旧软件包版本以访问所需软件包的镜像,或者我是否需要设置多个仅包含差异的存储库?
–ayckoster
2012年1月2日14:57
@psusi:回答不完全公平,可能有很多原因。以我为例,较新的版本实际上可能存在错误,请仔细检查是否需要较旧的版本。只是一个例子。
– Cookie
2014年3月28日在21:23
@nomen,不,它是一个不使用滚动发布模型的发行版。请务必确保在稳定版本中修复关键错误和安全漏洞时,它们不会引起回归,但是如果确实发生了回归,请提交带有回归发布标记的错误报告,并将其修正或发布。背部。
–psusi
2014年4月5日在23:48
@nomen,如果您想用单词弥补自己的意思,您将很难与他人交流。对于世界上的其他所有人,这不是滚动发布,滚动发布是完全相反的,因此与稳定发布是互斥的。现在,考虑到这一点,该发行版附带的原始版本实际上保留在-release口袋中,而更新则放在-updates或-security口袋中,因此尽管您无法返回到以前的更新,可以返回到最初发布的版本。
–psusi
2014年4月6日,1:17
@psusi:这是您的另一种。在所有机器上,要求Unison始终为相同版本。但是在13.10上它是与12.04 LTS不同的版本。那么现在怎么办?当遇到这样的问题时,收到像您为什么要这样做这样的答案确实非常无益,而且浪费了每个人的时间。
– Cookie
14年4月15日在7:01
#5 楼
正如psusi解释的那样,旧版本没有保留在ubuntu存储库中,但是显然您仍然可以在启动板上找到它们。因此,您可以转到(用您的ubuntu版本和体系结构替换trusty和amd64):https://launchpad.net/ubuntu/trusty/amd64/apache2
和选择所需的版本。然后,将deb下载为文件并安装:
dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb
再次,将文件名替换为文件。如果您必须降级许多软件包,这将很乏味,但是如果您绝望,那总比没有好。
评论
非常感谢您指出= 2.2 \ *选项作为使用通配符选择任何可用子版本的方法。那就是我想知道但不知道如何问的问题:)
– aexl
15年4月16日在14:31
N:$ sudo apt-get更新后无法找到软件包^ apache2,但是sudo apt-get install apache2 = 2.2 *对我有用
–布莱恩·梅勒(Braian Mellor)
17年7月24日在15:04
@BraianMellor apt-get madison已过时,请改用apt-get策略,apt-get策略^ apache2可以
– netawater
20年8月5日在5:28