1

作为我们产品发布的一部分,我们发布了我们在 (UNIX) 开发机器上编译的 Apache HTTP Server 二进制文件。

我们告诉我们的客户将二进制文件(在他们的 UNIX 服务器上)安装在我们编译它的相同目录结构下。对于某些客户端,这是不合适的,例如,他们可以在服务器上安装软件的位置受到限制,并且他们不想自己编译 Apache。

有没有编译 Apache HTTP Server 的方法,以便可以使用环境变量动态指定其安装位置?

我花了几天时间试图解决这个问题,但找不到解决方法。这让我相信 Apache 二进制文件在编译时对某些目录路径进行了硬编码,从而阻碍了我们所需的可移植性。

有没有人设法做到这一点?

4

4 回答 4

1

如果您正在为特定位置编译 Apache2,但希望您的客户能够将其安装在其他地方(并且我假设它们具有与您的构建机器相同的架构和操作系统),那么您可以这样做,但 apachectl 脚本将需要一些售后黑客。

我刚刚测试了这些步骤:

  1. 解压 Apache2 源代码(这应该也适用于 Apache 1.3)并运行./configure --prefix=/opt/apache2

  2. 然后运行 ​​make以安装sudo make install在构建机器上。

  3. 切换到安装目录 (/opt/apache2),然后 tar 和 gzip 压缩二进制文件和配置文件。我用了cd /opt/apache2; sudo tar cf - apache2 | gzip -c > ~/apache2.tar.gz

  4. 将 tar 文件移动到目标计算机。我决定安装进去/opt/mynewdir/dan/apache2测试。因此,基本上,您的客户不能使用 rpm 或类似的东西——除非您知道如何使其可重定位(我不知道 :-))。

  5. 无论如何,您客户的conf/httpd.conf文件将充满硬编码的绝对路径——他们可以将这些更改为他们需要的任何内容。apachectl脚本也有硬编码路径。它只是一个 shell 脚本,因此您可以破解它或给他们一个sed脚本,以将构建机器的旧路径转换为客户端上的新路径。

  6. 我跳过了所有的hackery,然后就跑了./bin/httpd -f /opt/mynewdir/dan/conf/httpd.conf:-)

希望有帮助。如果它不适合您,请告诉我们您收到的任何错误消息。

于 2008-08-26T12:31:09.937 回答
1

我认为解决(解决)这个问题的方法是开发一个“./configure && make”脚本,您的客户端使用它来安装、指定和编译二进制文件。这当然需要客户端在其服务器上安装所有源代码,或者您可以在 NFS 共享上提供它。

于 2008-08-22T12:34:20.480 回答
0

@Hissohathair

我建议对@Hissohathair 的回答进行 1 处更改。

6). ./bin/httpd -d <server path> (although it can be overridden in the config file) 

在 apacheclt 中有一个用于 HTTPD 的变量,您可以在其中覆盖以使用它。

于 2008-09-06T19:00:10.567 回答
0

我认为解决(解决)这个问题的方法是开发一个“./configure && make”脚本,您的客户端使用它来安装、指定和编译二进制文件。这当然需要客户端在其服务器上安装所有源代码,或者您可以在 NFS 共享上提供它。

更不用说完整的构建工具链了。如今,大多数主要发行版都没有默认 GCC。/opt/my_apache2/强迫客户安装它或类似的东西不是很理智吗?

于 2008-08-26T09:45:37.887 回答