Переопределение проверок зависимостей yum, когда существуют более новые версии зависимого программного обеспечения - PullRequest
3 голосов
/ 19 марта 2009

Я использую yum на CentOS 5.1 - я вручную скомпилировал PHP 5.2.8 из исходного кода, но другие пакеты были установлены с использованием yum. Мне нужно установить расширение PHP через pecl, и для этого также нужно установить phpize. Однако выполнение следующих действий приводит к ошибке зависимости:

sudo yum install php-devel

Ошибка: отсутствует зависимость: php = 5.1.6-20.el5_2.1 требуется пакету php-devel

Поскольку у меня уже установлена ​​более новая версия PHP, как я могу заставить yum игнорировать это? Нужно ли вручную компилировать pecl / phpize из исходного кода? По общему признанию у меня никогда не было проблем прежде, это только из-за комбинации компиляций и установок yum.

Есть мысли?

Спасибо, Kyle

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012

В целом:

Если вы создаете его самостоятельно, оно входит в /usr/local и доступно только для других вещей в /usr/local.

Если вы устанавливаете из RPM / Yum, он входит в /usr и доступен для /usr и /usr/local.

Итак, если вы хотите установить инструменты PHP с использованием домашнего PHP-кода, установите их также в /usr/local: как правило, с программным обеспечением типа GNU, это будет что-то вроде:

   ./configure --prefix=/usr/local && make && sudo make install

или

   make prefix=/usr/local all && sudo make prefix=/usr/local install

… хотя для большинства программного обеспечения по умолчанию должно быть /usr/local, если вы не переопределите настройку префикса.

Если вы хотите «собрать вручную» пакеты, основанные на RPM, вы можете использовать

   yumdownloader --source WHATEVER-PACKAGE
   rpm -i WHATEVER-PACKAGE.rpm
   rpmbuild -bp ~/rpm/SPECS/WHATEVER-PACKAGE.spec

(ваш путь, эквивалентный ~/rpm, может отличаться; rpmbuild --showrc скажет вам, где)

Загружается пакет .src.rpm, который содержит исходный (оригинальный авторский) источник (обычно tarball), а также патчи для ОС; устанавливает исходники в ~/rpm (или ваш префикс rpmbuild); а затем распаковывает исходники и применяет исправления в ~/rpm/BUILD/WHATEVER-PACKAGE/

Оттуда вы можете выполнить шаги настройки / выполнения самостоятельно с префиксом /usr/local

Конечно, просто установить из RPM гораздо проще: -)

3 голосов
/ 23 марта 2009

yum ничего не знает о вашей скомпилированной вручную версии php. Вы можете либо обойти разрешение зависимостей RPM, установив пакет, используя rpm --nodeps, и надеяться, что он работает.

Или установите скомпилированную вами версию php в другой каталог, чтобы она могла сосуществовать со старой версией от yum, чтобы все были довольны (не уверен, если это возможно, я думаю, это зависит от того, используют ли ваши приложения жестко заданный путь к php или нет).

Или, если вам повезет, сторонний репозиторий, такой как EPEL или RPMForge , может иметь более новый пакет php, поэтому вам не нужно компилировать свой собственный.

2 голосов
/ 19 марта 2009

Как правило, лучше иметь одно управление пакетами в системе, так что вам лучше будет упаковывать все в RPMS и управлять им через yum. Это сэкономит вам много времени в долгосрочной перспективе.

Если вам абсолютно необходимо иметь что-то (например, PHP) из исходных текстов вручную, используйте stow / checkinstall / ... или любое другое решение, которое позволит вам выполнять элементарное управление пакетами для скомпилированных исходников вещей.

Относительно вашего вопроса, вы можете попытаться отменить проверку зависимостей, загрузив RPM требуемого пакета, выполнив "rpm -i --force file.rpm", так как yum не имеет никакой опции для принудительной установки

...