Переопределение зависимостей 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.
Есть какие-нибудь мысли?
Спасибо, Кайл
3 answers
Как правило, в системе лучше иметь одно управление пакетами, поэтому вам будет лучше упаковывать все в RPM и управлять им с помощью yum. Это сэкономит вам много времени в долгосрочной перспективе.
Если вы абсолютно хотите иметь компилятор чего-либо (fe PHP) из исходных текстов вручную, используйте stow/checkinstall/... или любое другое решение, которое позволило бы вам выполнять элементарное управление пакетами для материалов, скомпилированных с исходным кодом.
Отвечая на ваш вопрос, вы могли бы попытаться переопределите проверку зависимостей, загрузив RPM требуемого пакета и выполнив "rpm-i --force file.rpm", так как у yum нет возможности принудительной установки
В целом:
Если вы создадите его самостоятельно, он войдет в /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 намного проще:-)
yum
ничего не знает о вашей скомпилированной вручную версии php. Вы можете либо обойти разрешение зависимостей RPM, установив пакет с помощью rpm --nodeps
, и надеяться, что это сработает.
Или установите версию php, которую вы сами скомпилировали, в другой каталог, чтобы она могла сосуществовать со старой версией yum, чтобы все были довольны (не уверен, возможно ли это, я думаю, это зависит от того, используют ли ваши приложения жестко закодированный путь к php или нет).
Или, если вам повезет, сторонний репозиторий, такой как EPEL или RPMForge, может иметь более новый пакет php, поэтому вам не нужно компилировать свой собственный.