安装 postgresql 的依赖问题

安装 postgresql 的依赖问题

这是我在 Debian 服务器上安装 postgresql 所遵循的步骤:

  1. 添加反向deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free移植/etc/apt/sources.list

  2. 跑步sudo apt-get update

  3. 跑步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

我的系统有问题吗,或者安装步骤不正确?删除logrotatepostgresql安装所需的版本是否安全?

这是的输出apt-cache policy postgresql-9.1 postgresql-common logrotate在此处输入图片描述 这是我的输出/etc/apt/sources.list在此处输入图片描述 我没有/etc/apt/preferences在此处输入图片描述

答案1

-t首先,使用switch 和switch之间存在细微但重要的区别$package/$suite

  • apt-get install <package>/squeeze-backports- 这将从 squeeze-backports 和来自稳定版的依赖项进行安装
  • apt-get -t squeeze-backports install <package>- 这将安装 squeeze-backports 的依赖项。


就像第一次尝试提供$package/$suite开关一样,apt-get 将尝试从 squeeze-backports 安装 postgresql 和 postgresql-common,但不会安装它的依赖项(在本例中是 logrotate)。

我没有 Squeeze 系统可以进行测试,但我认为发生了以下情况:

Squeeze 不再是当前稳定版本,现在奥尔兹特布尔。Squeeze-backports 从当时的测试版本 (Wheezy) 中提取软件包,而该版本现在是当前的稳定版本。您尝试安装的 postgresql 版本实际上来自当前版本的稳定版本,但设计为与 oldstable 中的大多数依赖项一起运行(即 oldstable/squeeze 中的 logrotate 3.7.8-6 与 stable/wheezy 中的 logrotate 3.8.1-4 相比),但由于 squeeze-backports 和 wheezy 大致相似,使用开关-t意味着它出于某种原因尝试从 wheezy 的存储库中提取 logrotate,而不是满足于 oldstable/squeeze 中包含的版本 3.7.8-6。一般来说,这是由于要么明确添加了 wheezy 存储库,并且设置了错误的 apt-pinning 策略,要么您的存储库指向发布类型(稳定/测试/不稳定)而不是发布(挤压/wheezy),在这种情况下,您的问题会更大。

您应该尝试通过升级到 Wheezy 来解决问题,因为它是当前的稳定版本。出于多种原因,这是最好的解决方案。如果您不能或不愿意这样做,请尝试使用开关,-t这样您就不会从反向移植中提取 postgresql 的依赖项,或者使用 apt-pinning 从 Wheezy 中提取所需的内容。


我犹豫是否将 Debian 更新到 Wheezy,因为我很容易破坏服务器上的一些重要的东西。

不幸的是,你迟早要升级到 Wheezy。Debian 安全团队只为旧稳定版提供大约一年的安全补丁。所以此时您确实应该已经计划升级到 Wheezy。请不要误解,但如果您不具备升级专业知识,您应该寻找并聘请具备此知识的人。

我认为有两种方法:你可以从 Squeeze 直接升级到 Wheezy,也可以构建一个新的基于 Wheezy 的服务器,然后从一个服务器迁移到另一个服务器。只要你有一个健康系统。我见过一些盒子经过三到四个不同的发布周期升级,它们工作得很好。请务必阅读发行说明仔细检查,并在生产服务器(大概就是我们讨论的服务器)上进行升级之前,在开发环境中测试升级过程和应用程序。但是听起来我们的服务器不太健康,所以我建议您采用迁移路径,因为这样您将获得一个干净的版本。

不言而喻,无论您选择哪种方式使用 Wheezy,您都应该已经拥有经过验证的备份和恢复程序。


如果有更简单的方法来解决我的问题

是的。有一种更简单的方法可以解决您的即时问题,但它不能解决根本原因,而专业人士可以解决根本原因。

查看您的 apt-cache 策略结果。您正在从非 Debian 中提取 postgresql 和 postgresql-commonapt.postgresql.org存储库,但看起来您为 Ubuntu (precise-pgdg) 添加的存储库,而不是为 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,但最接近的是 stable/wheezy 中的 3.8.1-4。

您需要 1) 使用 Debian 时停止使用 Ubuntu 存储库,2) 找出您实际运行的版本(Squeeze 或 Wheezy)并更改为该Stable版本。我认为这会解决您的问题。

话虽如此,您的/etc/apt/sources.list配置根本就不正确,而且您的服务器很可能已经非常混乱。如果您使用的是 Debian,则不应该有 Ubuntu 存储库。Ubuntu 基于 Debian,但它们是两个独立的系统,不幸的是,互联网上有很多建议建议,如果您需要某个版本的软件包或存在于 Ubuntu PPA 但不存在于 Debian 存储库中的软件包,只需添加 Ubuntu PPA 即可。这是错误的。请不要这样做或听从推荐的人。

您还跟踪的是发布类型(稳定版)而不是发布版本(Squeeze 或 Wheezy)。这意味着 Wheezy 发布为稳定版后,所有这些软件包都可用。您可能已经在运行 Wheezy 或一些糟糕的 Squeeze 和 Wheezy 混合版本。这也很糟糕。

我真的建议您进行全新安装并将您的应用程序迁移到那里。


它被不同的人修改过多次

RCS 的设置和使用非常简单。我诚挚地推荐它用于即使是最小的安装。它将有助于减轻将来的这些问题。

答案2

每当我遇到类似这样的奇怪的事情(主要是级联删除,试图卸载我一半的操作系统)时,我发现 ncurses 模式下的 aptitude 可以更智能地修复它。

它似乎在 ncurses 模式下一次查看整个列表,而不是一次处理您在 cli 中输入的列表并创建冲突的依赖关系。

只需在命令行中输入 aptitude 即可启动。使用 / 开始搜索,使用 + 或 - 添加和删除列表。完成后按 g。

相关内容