我们可以编译Apache HTTP Server并将其二进制文件重新部署到其他位置吗?
时间:2020-03-05 18:41:57 来源:igfitidea点击:
作为产品发布的一部分,我们将提供在(UNIX)开发计算机上编译的Apache HTTP Server二进制文件。
我们告诉客户将二进制文件(在其UNIX服务器上)安装在与编译二进制文件相同的目录结构下。对于某些客户,这是不合适的,例如他们可以在服务器上安装软件的位置受到限制,并且他们不想自己编译Apache。
有没有一种编译Apache HTTP Server的方法,因此可以使用环境变量动态指定其安装位置?
我花了几天的时间试图解决这个问题,却找不到解决方法。它使我相信,Apache二进制文件在编译时对某些目录路径进行了硬编码,从而阻止了我们所需的可移植性。
有没有人设法做到这一点?
解决方案
回答
我认为解决此问题的方法是开发一个" ./configure && make"脚本,客户端使用该脚本来安装,指定和编译二进制文件。这当然会要求客户端在其服务器上安装所有源代码,或者我们可以使其在NFS共享上可用。
回答
I think the way to do(get around) this problem is to develop a "./configure && make" script that your client uses to install, specify and compile the binaries. That would offcourse require that the client has all the source-code installed on his server or you can make it available on an NFS share.
更不用说完整的构建工具链了。如今,GCC在大多数主要发行版中都没有默认。强迫客户端将其安装到/ opt / my_apache2 /
或者类似的东西是否明智?
回答
如果我们要为特定位置编译Apache2,但希望客户端能够将其安装在其他位置(并且我假设他们与构建机器具有相同的体系结构和操作系统),则可以这样做,但是apachectl脚本将需要一些售后黑客。
我只是测试了这些步骤:
- 解压缩Apache2源代码(尽管它也应与Apache 1.3一起使用)并运行./configure --prefix = / opt / apache2
- 先执行make然后sudo make install来安装在构建机器上。
- 切换到安装目录(/ opt / apache2),然后使用tar和gzip压缩二进制文件和配置文件。我用cd / opt / apache2; sudo tar cf-apache2 | gzip -c>〜/ apache2.tar.gz
- 将tar文件移动到目标计算机。我决定安装在/ opt / mynewdir / dan / apache2中进行测试。因此,基本上,客户不能使用rpm或者类似的东西-除非我们知道如何使它可重新定位(我不:-))。
- 无论如何,客户的conf / httpd.conf文件将充满硬编码的绝对路径-他们可以将其更改为所需的任何路径。 apachectl脚本也具有硬编码路径。它只是一个shell脚本,因此我们可以对其进行破解或者给他们一个sed脚本,以将构建机器上的旧路径转换为客户端上的新路径。
- 我跳过了所有这些黑客,只运行了./bin/httpd -f /opt/mynewdir/dan/conf/httpd.conf :-)
希望能有所帮助。让我们知道我们收到的任何错误消息(如果对我们不起作用)。
回答
@Hissohathair
我建议将1更改为@Hissohathair的答案。
6). ./bin/httpd -d <server path> (although it can be overridden in the config file)
在apacheclt中,有一个HTTPD变量,我们可以重写该变量以使用它。