在旧 Linux(Centos 5)中安装新软件(httpd)?

在旧 Linux(Centos 5)中安装新软件(httpd)?

我需要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 的有效前缀安装在预期的位置。

相关内容