Назад | Перейти на главную страницу

Проблемы с зависимостями при установке postgresql

Вот шаги, которые я выполнил для установки postgresql на сервере Debian:

  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

Когда я добавляю add 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: Это мой результат /etc/apt/sources.list: И у меня нет /etc/apt/preferences:

Каждый раз, когда я сталкивался с подобными странными вещами (в основном, каскадным удалением, когда он пытался удалить половину моей ОС), я обнаружил, что способность в режиме ncurses лучше исправлять это.

Кажется, что он просматривает весь список одновременно в режиме ncurses вместо того, чтобы работать со списком, который вы набрали в cli, по одному и создавать конфликтующие зависимости.

Для начала просто введите aptitude на клиенте. Используйте / для начала поиска и + или - для добавления и удаления из списка. Затем нажмите g, когда закончите.

Во-первых, есть тонкая, но важная разница между использованием -t переключатель и $package/$suite переключатель:

  • apt-get install <package>/squeeze-backports - Это будет установлено из squeeze-backports и зависимостей из стабильной версии.
  • apt-get -t squeeze-backports install <package> - Это установит обе и зависимости из squeeze-backports.


Так же, как первый проход, попробуйте дать $package/$suite switch as apt-get затем попытается установить postgresql и postgresql-common из squeeze-backports, но не его зависимости (в данном случае logrotate).

У меня нет системы Squeeze для тестирования, но я думаю, что происходит следующее:

Squeeze больше не является текущим выпуском Stable, а теперь старый конюшня. Squeeze-backports извлекает свои пакеты из тогдашней версии тестирования (Wheezy), которая теперь является текущей стабильной. Версия postgresql, которую вы пытаетесь установить, на самом деле относится к текущей версии Stable, но была разработана для работы с большинством зависимостей от oldstable (например, logrotate 3.7.8-6 от oldstable / squeeze по сравнению с logrotate 3.8.1- 4 из stable / wheezy), но поскольку squeeze-backports и wheezy примерно аналогичны при использовании -t switch означает, что он по какой-то причине пытается вытащить logrotate из репозиториев wheezy вместо того, чтобы довольствоваться версией 3.7.8-6, которая включена в oldstable / squeeze. Обычно это вызвано либо тем, что репозитории wheezy добавлены явно с неправильной настройкой политик apt-pinning, либо у вас есть репозитории, которые указывают на тип выпуска (стабильный / тестируемый / нестабильный), а не на выпуск (squeeze / wheezy), и в этом случае у вас гораздо большая проблема.

Вам следует попытаться решить вашу проблему, обновившись до Wheezy, поскольку это текущая версия Stable. Это лучшее решение по целому ряду причин. Если вы не можете или не хотите этого делать, попробуйте использовать -t switch, чтобы вы не извлекали зависимости для postgresql из backports или не использовали apt-pinning для извлечения необходимого материала из Wheezy.


Я не решаюсь обновлять Debian до Wheezy, так как могу легко сломать что-то важное на сервере.

К сожалению, вам рано или поздно придется перейти на Wheezy. Команда безопасности Debian предоставляет исправления безопасности для старого стабильного продукта примерно на год и поэтому вы действительно должны уже сейчас планировать обновление до Wheezy. Пожалуйста, не поймите это неправильно, но если у вас нет опыта для обновления, вам следует найти и нанять кого-то, кто это сделает.

Я думаю, у вас есть два подхода: вы можете либо выполнить обновление на месте с Squeeze до Wheezy, либо вы можете создать новый сервер на основе Wheezy и перейти с одного на другой. Обновление на месте на самом деле довольно просто сделать, если у вас есть здоровый система для начала. Я видел некоторые коробки, которые были обновлены в течение трех или четырех различных циклов выпуска, и они отлично работают. Убедитесь, что вы прочитали примечания к выпуску внимательно и протестируйте как процесс обновления, так и свое приложение / приложения в своей среде разработки, прежде чем выполнять обновление на своем производственном сервере (о котором, вероятно, мы говорим). Однако похоже, что мы не работаем со здоровым сервером, поэтому я предлагаю вам выбрать путь миграции, так как вы получите хороший чистый лист.

Само собой разумеется, что независимо от того, какой путь вы выберете к Wheezy, у вас уже должны быть проверенные процедуры резервного копирования и восстановления.


Если есть более простой способ решить мою проблему

Да. Есть более простой способ решить вашу немедленный проблема, но это не решает первопричину, и профессионалы решают ее.

Посмотрите на результаты своей политики apt-cache. Вы извлекаете postgresql и postgresql-common из не-debian apt.postgresql.org репозитории, но похоже, что у вас есть те, которые добавлены для Ubuntu (точный-pgdg) вместо Debian Squeeze (squeeze-pgdg), который может иметь совершенно другой набор зависимостей. В случае logrotate это 3.7.8-6ubuntu5 вместо 3.7.8-6 из oldstable / squeeze.

Logrotate извлекается из репозиториев Debian Stable, то есть из Wheezy, который предположительно не синхронизирован с остальной частью вашей старой стабильной / сжатой системы. Ваши пакеты postgresql от Ubuntu Precise ищут 3.7.8-6ubuntu5, но ближайший к вам - 3.8.1-4 от stable / wheezy.

Вам необходимо 1) прекратить использование репозиториев Ubuntu, когда вы используете Debian и 2) выяснить, какой выпуск (Squeeze или Wheezy) вы на самом деле используете, и изменить Stable к этому. Я подозреваю, что это решит вашу проблему.

При этом ваш /etc/apt/sources.list не настроен правильно, и есть большая вероятность, что ваш сервер сильно испорчен. У вас не должно быть репозиториев Ubuntu, если вы используете Debian. Ubuntu основан на Debian, но это два отдельных зверя, и в Интернете есть досадное количество советов, в которых рекомендуется, если вам нужна определенная версия пакета или пакет, который существует в PPA Ubuntu, но не в репозиториях Debian, просто добавьте PPA Ubuntu. Это не верно. Пожалуйста, не делайте этого и не слушайте людей, которые рекомендуют это.

Вы также отслеживаете релиз-тип (стабильный), а не релиз (Squeeze или Wheezy). Это означает, что как только Wheezy был выпущен как стабильный, все эти пакеты стали доступны. Возможно, вы уже используете Wheezy или какое-то ужасное сочетание Squeeze и Wheezy. Это тоже плохо.

Я действительно рекомендую вам выполнить чистую установку и перенести туда свое приложение.


он был изменен несколько раз разными людьми

RCS тривиально прост в настройке и использовании. Я искренне рекомендую его даже для самых маленьких инсталляций. Это поможет смягчить эти проблемы в будущем.