Переопределение зависимостей yum проверяет, существуют ли более новые версии зависимого программного обеспечения


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

Sudo yum установить php-devel

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

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

Есть какие-нибудь мысли?

Спасибо, Кайл

Author: Kyle, 2009-03-19

3 answers

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

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

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

 2
Author: ADEpt, 2009-03-18 23:10:21

В целом:

Если вы создадите его самостоятельно, он войдет в /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, который содержит исходный (исходный авторский) источник (обычно архив), а также исправления для конкретной операционной системы; устанавливает источники в ~/rpm (или ваш префикс rpmbuild); а затем распаковывает источники и применяет исправления в ~/rpm/BUILD/WHATEVER-PACKAGE/

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

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

 4
Author: BRPocock, 2012-02-22 15:40:31

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

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

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

 3
Author: 8jean, 2009-03-23 19:20:21