在OpenBSD的Apache服务器上运行xinc
有没有人能够使xinc在OpenBSD chroot的默认Apache下正常运行?我想使我们的开发服务器像生产服务器一样保持完整的chroot运行状态,以便确保我们的代码在chroot上运行良好。
解决方案
回答
我自己从未使用过xinc,因此只能暗示我通常如何使用chroot来应用程序。
第一步是收集有关应用程序需要运行的所有信息;我通常通过运行systrace(1)和ldd(1)来找出运行该软件所需的内容来完成此操作。
通过的输出
systrace -A -d. <app> ldd <app>
并确保chroot环境中可以使用应用程序涉及和需要的所有内容(很多应用程序实际不需要的东西)。我们可能需要稍微调整配置和环境变量。另外,如果可以选择将应用程序日志记录到syslog,我通常会这样做并创建一个syslog套接字(请参阅syslogd(8)的-a选项),以减少应用程序需要写访问权限的位置。
我刚才所描述的是一种使任何程序都可以在chroot环境中运行的通用方法(但是,如果我们需要导入一半的userland和一些suid命令,则可能不希望使用chroot :)。对于在Apache下运行的应用程序(我确定我们知道OpenBSD httpd(8)稍有不同),我们可以选择使用(一旦程序启动;监狱中仍然需要任何动态库) apache访问文件,从而允许使用httpd.conf在chroot环境中导入资源,而无需实际复制它们。
此链接也很有用(如果有些过时),概述了OpenBSD上chroot的PHP中的一些陷阱。
回答
First step would be to gather information on everything the app needs to run; this I usually accomplish by running systrace(1) and ldd(1) to find out what is needed to run the software.
我会尝试的。我发现xinc的最大问题是,虽然它是一个PHP应用程序,但它想知道应用程序的安装路径(但是它仍会将内容散布到其他文件夹中)并以守护程序模式运行一些PHP脚本(这些脚本最难实现)。开始运行)。因此,例如,我告诉它安装到/ var / www / xinc,然后进行符号链接
/ var / www / var / www / xinc-> / var / www / xinc
并且部分起作用。我让GUI出现了一些问题,它拒绝识别我已经建立的任何项目。我认为最大的问题是其中一部分正在运行chroot,另一半正在外部运行。
如果所有其他方法都失败了,那么由于我们的生产是chroot的,因此我将不得不在chroot环境中编程时构建一些东西。我们遇到了一些问题,我们需要在chroot之外进行编码,然后必须回溯以找到使它在chroot中工作所需的条件。
回答
@dragonmantank
在Xinc的情况下,希望我们使用PEAR进行安装。
pear list-files xinc/Xinc
这应该可以完成,并向我们显示Xinc安装文件的放置位置。因此,即使Xinc"只是"一个大的PHP脚本,它仍然散布在rc脚本以及运行应用程序所需的所有其他所有内容中。我确定我们不需要添加此处列出的所有路径,但可以添加某些路径以使其运行。
除了Xinc本身,我认为它还需要phpUnit和其他一堆PEAR库来运行,所以我建议的是:
pear config-get php_dir
然后,我们需要将该路径(如Henrik建议的那样)添加到chroot环境。
回答
我们是否已将问题发布在Xinc错误跟踪器上? Xinc本身应该运行良好,因为它既可以作为守护程序运行,也可以作为Web应用程序运行。正如我们所暗示的那样,问题可能在于该守护程序未在chroot的环境(如Web界面)中运行,从而导致任一端都无法抓取文件。