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

Обновить Apache из исходников, если оригинал был установлен из rpm?

(перенесено из stackoverflow.com)

Недавно я унаследовал набор машин с Red Hat Enterprise Linux 5.4. Они были снабжены Apache Server v2.2.3, установленным из rpms. Мне нужно обновить Apache до версии 2.2.19. По разным причинам я создаю Apache из исходников. Установить мою новую версию Apache не проблема, но у меня есть два экземпляра Apache: v2.2.3 в / usr / sbin / httpd и v2.2.19 в / usr / local / sbin / httpd. В большинстве случаев я бы просто удалил существующую версию Apache с помощью rpm -e, но есть масса других rpms, которые имеют Apache в качестве зависимости. Кажется, я не могу найти rpm Apache 2.2.19 для REL 5.4, поэтому я не могу выполнить rpm --upgrade. Если я соберу Apache 2.2.19 с префиксом существующего экземпляра Apache (/ usr / sbin / httpd), установка завершится неудачно, поскольку / usr / sbin / httpd уже существует. Я исследовал использование yum для обновления пакетов, но сервер находится за брандмауэром и не видит внешний мир.

На данный момент я склоняюсь к созданию собственного rpm, но это кажется большим количеством дополнительной работы для, казалось бы, небольшой задачи. Похоже, я не понимаю чего-то действительно простого.

Я обычно использую пакеты, предоставляемые дистрибутивом, но если мне по какой-либо причине нужно скомпилировать что-то вроде Apache из исходного кода, я обязательно

  1. установите его в отдельный путь (например, /usr/local/apache2 или /opt/apache2
  2. создать для них свои собственные сценарии инициализации (например, /etc/init.d/apache2_custom) - испорченная работа со скриптами, предоставленными дистрибутивом, рано или поздно вас укусит
  3. Обновить /etc/motd и другая документация, чтобы четко указать тот факт, что этот сервер использует самкомпилированный пакет FOO

Вы действительно очень хотите создать RPM. Не нужно делать это с нуля; будет любое количество существующих пакетов, которые вы можете использовать (или, по крайней мере, использовать в качестве основы), включая существующий пакет RPM.

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

Переместите свой старый httpd двоичный файл в сторону, затем установите.

mv /usr/sbin/httpd /usr/sbin/httpd.old -v, установите свой --prefix=/usr/sbin для Apache ./configure, затем установите. Обязательно сначала сделайте резервную копию файлов конфигурации Apache. (tar czpf /etc/httpd-backup-$(date +%s).tar.gz /etc/httpd/ )

Хотя это может привести вас на скользкую дорожку удаления зависимостей, вам следует проверить, какие пакеты требуют установки httpd.

# rpm -q --whatrequires httpd

Если вы можете удалить пакеты, то у вас может быть свой ответ, если вы не можете удалить apache из-за зависимостей, и вам абсолютно необходимо запустить более новую версию, чем я бы предложил отключить rpm-версию httpd и остановить его запуск при загрузке.

# service httpd stop
# chkconfig httpd off

Я бы предложил затем установить вашу скомпилированную версию и запустить ее из другого каталога для конфигурации / двоичных файлов. Если вы пойдете по этому маршруту, также будет разумно скопировать сценарий инициализации по умолчанию, изменить пути и добавить его под другим именем.

# chkconfig --add httpd-custom
# chkconfig httpd-custom on

Имейте в виду, что если вы используете поддержку Redhat, они не помогут вам с настраиваемой скомпилированной версией httpd, и они действительно не поддержат вас, если вы испортили исходные двоичные файлы.