以下是我在Debian服务器上安装postgresql的步骤:
添加backports deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
到/etc/apt/sources.list
运行sudo apt-get update
运行apt-get -t squeeze-backports install postgresql-9.1
我在步骤#3得到依赖性错误:
The following packages have unmet dependencies: postgresql-9.1 : Depends: postgresql-common (>= 115~) but it is not going to be installed
当我添加添加postgresql-common并运行apt-get -t squeeze-backports install postgresql-9.1 postgresql-common
,出现以下依赖性错误:
The following packages have unmet dependencies: postgresql-common : Breaks: logrotate (>= 3.8) but 3.8.1-4 is to be installed
我的系统有问题,或安装步骤不正确? 删除logrotate
并让postgresql
安装所需的安全吗?
这里是apt-cache policy postgresql-9.1 postgresql-common logrotate
输出apt-cache policy postgresql-9.1 postgresql-common logrotate
: 这是我的输出/etc/apt/sources.list
: 而我没有/etc/apt/preferences
:
首先,在使用-t
开关和$package/$suite
开关之间有一个微妙而重要的区别:
apt-get install <package>/squeeze-backports
– 这将从squeeze-backports和dependencies安装 apt-get -t squeeze-backports install <package>
– 这将从squeeze-backports安装和依赖。 就像第一遍一样,尝试给$package/$suite
开关作apt-get,然后尝试从squeeze-backports安装postgresql和postgresql-common,而不是依赖(在这个例子中是logrotate)。
我没有一个挤压系统来testing,但我认为这是正在发生的事情:
Squeeze不再是Stable的当前版本,现在已经变成老旧了 。 挤压backports从当时的稳定版testing(Wheezy)版本中抽取软件包。 你试图安装的postgresql的版本实际上是从当前版本的稳定,但是被devise为运行与大多数依赖从老稳定(即,从oldstable的3.7.3-6 logrotate转换相比,logrotate 3.8.1- 4来自stable / wheezy),但是由于挤压backports和wheezy大致类似,使用-t
开关意味着它试图从wheezy的仓库中抽出logrotate,而不是满足旧版本中包含的3.7.8-6版本/挤。 一般来说,这可能是由于在快速存储库中明确添加了错误的apt-pinning策略设置,或者存储库指向了release-type(stable / testing / unstable)而不是release(squeeze / wheezy)你有一个更大的问题。
您应该努力通过升级到Wheezy来解决您的问题,因为它是Stable的当前版本。 这是许多原因的最佳解决scheme。 如果你不能或者不愿意那么做,可以尝试使用-t
开关,这样你就不需要从backports提取postgresql的依赖关系,或者使用apt-pinning从Wheezy中提取所需的东西。
我不愿意更新Debian到Wheezy,因为我可以轻松地在服务器上打破重要的东西。
不幸的是,你将不得不升级到Wheezy早晚。 Debian安全团队只为老一代提供大约一年的安全补丁,因此,您现在应该已经计划在此时升级到Wheezy。 请不要采取这种错误的方式,但如果你没有专业知识做升级,你应该寻求和聘请谁做的人。
我认为你有两种方法:既可以从Squeeze升级到Wheezy,也可以构build一个新的基于Wheezy的服务器,并从一个迁移到另一个。 就地升级实际上很简单,只要你有一个健康的系统开始。 我已经看到一些已经升级了三到四个不同的发布周期,他们工作得很好。 确保您仔细阅读发行说明 ,并且在生产服务器(可能是我们正在讨论的那个)上进行升级之前,在开发环境中testing升级过程和应用程序。 然而,这听起来像我们没有一个健康的服务器,所以我build议你采取迁移path,因为你会得到一个很好的干净的石板。
不言而喻,无论您selectWheezy的path,您应该已经有一个经过validation的备份和恢复程序。
如果有更简单的方法来解决我的问题
是。 有一个更简单的方法来解决你的眼前的问题,但它没有解决根本原因和专业人士解决根本原因。
看看你的apt-cache策略结果。 你从非debian apt.postgresql.org仓库中取出 postgresql和postgresql-common,但看起来你已经为Ubuntu(精确-pgg)而不是Debian Squeeze(squeeze-pgdg)添加了一个,不同的依赖关系。 在logrotate的情况下,它是3.7.8-6ubuntu5而不是从oldstable / squeeze 3.7.8-6。
Logrotate正在从Debian Stable存储库中提取,这意味着从Wheezy中获得,这可能与您的oldstable / squeeze系统的其余部分不同步。 你从Ubuntu Precise的postgresql软件包正在寻找3.7.8-6ubuntu5,但最接近的是3.8.1-4 from stable / wheezy。
你需要1)停止使用Debian的Debian软件库,2)找出你正在运行的是什么版本(Squeeze或Wheezy),然后把Stable
改成这个。 我怀疑这会解决你的问题。
话虽如此,你的/etc/apt/sources.list
configuration不正确,你的服务器很可能是相当混乱的。 如果您使用的是Debian,则不应该安装Ubuntu软件仓库。 Ubuntu是基于Debian的,但它们是两个独立的野兽,在互联网上有一个不幸的数量的build议,如果你需要某个版本的软件包或者在Ubuntu PPA中存在的软件包,而不是在Debian软件仓库中添加Ubuntu PPA。 这是错误的。 请不要这样做,或听取推荐它的人。
你也跟踪发布types(稳定),而不是发布(挤压或Wheezy)。 这意味着只要Wheezy作为Stable发布,所有这些软件包都可以使用。 你可能已经在运行Wheezy或者Squeeze和Wheezy的一些可怕的混合。 这也不好。
我真的build议你做一个干净的安装,并在那里迁移你的应用程序。
它被不同的人多次修改
RCS安装和使用非常简单。 我衷心推荐它甚至最小的安装。 这将有助于缓解未来的这些问题。
任何时候我遇到这样的奇怪的事情(主要是试图卸载一半操作系统的级联删除),我发现在ncurses模式aptitude更聪明的修复它。
它似乎一次以ncurses模式查看整个列表,而不是一次一个地在cli中input的列表,并创build相互冲突的依赖关系。
只需在cli键入aptitude即可开始。 使用/开始search,+或 – 从列表中添加和删除。 然后当你完成时打g。