我正在创建一个 RPM,在前期阶段,我想确定 apache 的文档根目录,以便我可以将 Web 应用程序文件复制到那里。
首先,我检查是否安装了 apache。如果安装了 apache,脚本将查找 httpd.conf 文件的位置,因为它包含文档根参数。但我不知道如何处理命令的返回find / -name httpd.conf
。我刚刚接触 shell 脚本和 RPM。也想知道这是否可能。目标是拥有 RPM,以便可以将其部署在任何系统上,而无需太多手动干预。下面是我计划的代码。目前还没有发挥作用
if [ "$(expr substr $(httpd -v) 17 6)" == "Apache"]; then
echo "Apache is installed";
find / -name httpd.conf
//need to handle the return of find and store to a location var to be used on the next line
grep -i 'DocumentRoot' $location/httpd.conf
//need to store the return document root to a var
el
echo "Apache is not installed";
fi
答案1
您的任务比您想象的要困难,因为可能有多个 .conf 文件,其中还包括其他文件。
您可能会通过检查输出得到一些里程
httpd -S
或apachectl -S
或apache2ctl -S
(取决于发行版)
这会打印出当前定义的虚拟主机的名称以及有关它们定义位置的信息,例如
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443 a.example.com (/etc/httpd/conf.d/ssl.conf:74)
*:80 is a NameVirtualHost
default server b.example.com (/etc/httpd/conf/httpd.conf:1010)
port 80 namevhost b.example.com (/etc/httpd/conf/httpd.conf:1010)
这告诉我们虚拟主机是在/etc/httpd/conf.d/ssl.conf
和中定义的/etc/httpd/conf/httpd.conf
答案2
不存在这样的事情apache's document root
,配置文件可以包含多个站点的多个根。
此外,您可以通过复制数据来破坏现有设置,特别是当默认的 apache2 已被修改时,因此您必须非常小心复制的位置和内容。
如果您无论如何都想继续此方案,您可以使用a2query -s
来查看哪些站点可用,并根据该站点查找您要放置文档的站点。如果a2query
不可用,则您可能没有安装 apache2。
如果将内容复制到文档根目录之一,请将所有内容放在文档根目录下的一个特定目录名称下和在写入任何内容之前检查该目录是否不存在。
您可能想要研究其他提供插入现有 apache 设置中的基于 HTML 的文档的软件包。我不知道有什么能做到这一点,但你可能会。
如果要安装 RPM 的系统上 apache2 的默认设置支持访问“用户页面”的机制,那么您可能只想为您的包创建一个新用户并将文档放在那里。当然,管理员可以关闭此机制,但如果没有,这不会干扰配置。为此,您也不必找到要写入的文档根目录(如果用户安装了nginx
或安装了任何其他服务器,您可能很幸运它使用相同的用户页面机制)。
答案3
我已经在 OpenSuse 和 Ubuntu 上成功使用了它。
find /etc/apache2 -name '*default*' -exec grep -sHin "documentroot.*www" {} \; | grep -v available
答案4
- Main
DocumentRoot
只是网页的一个位置,许多(可能是大多数)Apache 管理员使用 VirtualHosts 进行托管。
参见示例:https://httpd.apache.org/docs/2.2/vhosts/index.html
或者:https://httpd.apache.org/docs/2.4/vhosts/index.html
- 从 root ( ) 开始搜索整个系统的文件
/
确实是个坏主意,因为这会花费太多时间,特别是如果服务器安装了一些其他资源(最糟糕的情况是网络安装,连接速度慢,文件很多)。
您可能需要针对httpd.conf
( 或者apache2.conf
但即使如此,也不能保证某些管理员不会使用某些非标准位置进行配置。