我需要httpd
在生产环境中运行的旧版 Centos 5 32 位机器上升级 Apache。由于所有官方 repo 版本都已过时,我尝试在 docker 容器中编译它;但由于各种原因,这似乎失败了:
1)它抱怨旧PCRE
版本:
util_pcre.c:128: error: 'PCRE_DUPNAMES' undeclared (first use in this function)
我通过添加适当的值来修补它,pcre.h
只是为了看看它会去哪里......
2)然后它抱怨flex
安装版本中不存在某些功能:
"/usr/src/httpd-2.4.43/server/util_expr_scan.l", line 32: unrecognized %option: reentrant
"/usr/src/httpd-2.4.43/server/util_expr_scan.l", line 33: unrecognized %option: bison-bridge
flex: could not create
我认为我正在尝试解决一个难题,那么我还有什么其他选择呢?
可以吗静态地httpd
在机器中编译Centos 7.x
并运行它Centos 5.x
?这样做有什么注意事项吗?另一个选择是编译一切在 Centos 5.x 上从头开始,但这似乎是一项艰巨的任务 :)
升级httpd
机器遇到了阻力——有人可以建议一个可行的解决方案吗?
答案1
操作系统必须升级。每十年左右升级一次是维护这些通用 LTS 操作系统的最低要求。不这样做是不负责任的,因为已停产的 CentOS 5 有未修补的安全漏洞。为易受攻击的软件添加补偿安全控制比升级它的工作量更大。
由于其他原因,您需要对 httpd 进行重大升级。这已经是一个需要阅读发行说明、调整配置和测试的项目了。
从源代码编译会增加工作量:构建、安装和维护。当然,您可以自由地这样做,但您不会像 EL httpd 构建那样快速或经过充分测试。而且您自己的构建不会改善不升级操作系统的技术债务。
因此在 CentOS 8 上配置一个 Web 服务器,进行测试并切换。
如果这行不通,请保留升级后的主机,但限制旧版软件。例如在容器中。然后启动一个项目以正确升级或替换它。
答案2
您应该意识到运行这种过时的 CentOS 版本会带来安全隐患,我不会讨论这个,如果您是出于懒惰这样做,请遵循@John Mahowald 的建议。
现在,如果你在较新的 Linux 机器上编译静态 httpd,它将在旧的 CentOS 上运行,但请记住,编译后的 httpd 二进制文件只是其中的一部分,还有许多接近常规的附加文件,请采取apachectl命令作为示例,或者可能从 httpd.conf 请求的外部库。
另外,当您编译较新版本的 apache 时,它通常会将有效前缀设置为 /usr/local,因此,除非您已经构建了 PREFIX=/,否则全新的二进制文件将需要来自 /usr/local/etc/httpd 而不是 /etc/httpd 的 apache 配置文件,所有相关文件也是如此。
对于你的情况,最简单的方法可能是构建整个静态二进制文件,然后将整个源代码目录复制到 CentOS 5 上,然后从那里运行进行安装从那里,所有文件将根据您的 ./configure 的有效前缀安装在预期的位置。