Redhat

離線升級 httpd 的挑戰

  • November 28, 2017

大家早上好。我試圖弄清楚如何正確地將我們的 Linux 伺服器上的 httpd 從 2.2.14 升級到 2.2.34。這是詳細資訊:

背景資訊:我們的伺服器都執行 RHEL 5.11,並且位於無法訪問一般網際網路的 DMZ 中。(我們不太可能打開防火牆進行線上升級,但這可能是一個有爭議的問題。)經過大量閱讀,似乎在安裝時安裝了 httpd 的社區版本,而不是版本Red Hat 與他們的發行版一起打包。根據我對本文的理解,這意味著我們不能使用“yum update httpd”。我們母公司為我們的 Linux 伺服器僱傭的支持供應商也不知道如何為我們升級它,所以現在就交給我了。

迄今為止的嘗試:由於缺乏任何其他好的想法,支持供應商嘗試在開發伺服器上本地建構 2.2.34。這是成功的,因為似乎安裝了 2.2.34,但它目前沒有為伺服器上執行的應用程序提供服務——仍然使用 2.2.14 傳遞。

可能有用的資訊:現在,httpd 二進製文件安裝在 /usr/sbin,配置和庫位於 /etc/httpd。這是我在執行 httpd -V 時看到的:

Server version: Apache/2.2.14 (Unix)
Server built:   Oct 14 2009 13:20:11
Server's Module Magic Number: 20051115:23
Server loaded:  APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
 threaded:     no
   forked:     yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

較新的版本是在 /etc/httpd/httpd-2.2.34/ 建構的。這是 httpd -V 在該目錄中執行時的樣子:

Server version: Apache/2.2.34 (Unix)
Server built:   Nov 14 2017 09:46:53
Server's Module Magic Number: 20051115:43
Server loaded:  APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4
Architecture:   64-bit
Server MPM:     Prefork
 threaded:     no
   forked:     yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr/local/apache2"
-D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

在我看來它是正確建構的,但我不知道如何查看它是否真的有效

我需要回答的問題:

1)如果新版本確實正確建構並且可以執行,那麼我如何強制系統使用較新版本?(我可以弄清楚配​​置更改以使其載入應用程序,但 ps aux | grep “httpd” 顯示它甚至沒有執行。)

2)有沒有更簡單的方法來做到這一點?我閱讀了Apache 站點上的“升級”說明,但在系統上的任何地方都沒有 config.nice 文件。

我感謝提供的任何幫助。我可以根據需要提供更多資訊。

您已經正確建構了 httpd,但是從原始碼建構的版本的預設目錄是/usr/local/apache2,如果您make && make install以 root 身份完成,它將安裝在那裡。通常的方法是符號連結/usr/local/apache2/etc/httpd保持一致性。查看初始安裝,移動/etc/httpd和創建符號連結/usr/local/apache2應該可以與您的 init 文件一起使用,但您也可以檢查它是否與您的安裝相匹配。

如果您需要再次執行此操作,您還可以考慮建構一個 RPM,apache 源附帶一個建構文件,它可以在執行 CentOS 5.11 的 VM 上執行。

引用自:https://serverfault.com/questions/885537