我有一台 ubuntu 服务器和一台 arch linux 机器。我已经习惯了 ubuntu 上的 apache 设置。它简单而高效。然而,在我的 arch 机器上安装 apache2 后,我注意到一切都不同了。守护进程甚至没有相同的名称。有人可以向我解释一下吗:
1:为什么一切都如此不同
2:如何在 Arch 上获取 ubuntu apache
答案1
其他答案对 Ubuntu/Debian 和 Arch Linux 之间的区别已经足够好了,但它们并不是真正“技术导向”...我不是专家,我只是一个 arch 用户和 AUR 维护者,但我会尽力更“技术性”地回答这个问题。
请认为以下内容并不完整,因为我只谈论了差异(我还没有说完,但主要差异已经存在)。事实上,由于我不明白为什么 OP 需要改变,我无法正确回答 OP 问题的第二部分。
由于我不是全职 Ubuntu/Debian 用户,因此这个答案可能缺少一些关于 Debian/Ubuntu 的解释。
差异
软件包构建
作为 Arch 用户和 AUR 维护者,我做的第一件事以及每个 Arch 用户在出现此类问题时应该做的第一件事就是阅读软件包构建Apache 软件包中可以找到这里。
所以在我写这篇文章的时候,它看起来是这样的
# $Id$
# Maintainer: Jan de Groot <[email protected]>
# Contributor: Andrea Scarpino <[email protected]>
# Contributor: Pierre Schmitz <[email protected]>
pkgname=apache
pkgver=2.4.27
pkgrel=1
pkgdesc='A high performance Unix-based HTTP server'
arch=('i686' 'x86_64')
url='http://www.apache.org/dist/httpd'
license=('APACHE')
backup=(
etc/httpd/conf/httpd.conf
etc/httpd/conf/extra/httpd-{autoindex,dav,default,info,languages}.conf
etc/httpd/conf/extra/httpd-{manual,mpm,multilang-errordoc}.conf
etc/httpd/conf/extra/httpd-{ssl,userdir,vhosts}.conf
etc/httpd/conf/extra/proxy-html.conf
etc/httpd/conf/{mime.types,magic}
etc/logrotate.d/httpd
)
depends=('zlib' 'apr-util' 'pcre' 'libnghttp2' 'openssl')
makedepends=('libxml2' 'lua')
optdepends=(
'lua: for mod_lua module'
'libxml2: for mod_proxy_html, mod_xml2enc modules'
'lynx: apachectl status'
)
source=(
https://www.apache.org/dist/httpd/httpd-${pkgver}.tar.bz2{,.asc}
openssl-malloc-init.patch
apache.tmpfiles.conf
httpd.logrotate
httpd.service
arch.layout
)
sha256sums=('71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a'
'SKIP'
'd305f8b52ac2a9bbda7bb0776496471e69e9d30642740f594d00086a8c7e344c'
'63da1a420f4714a3e7af2672d28384419cc7eedbe7bf35baebd02938fabc15bf'
'0bbbfae23a917b2fce0bf8f900f60319b50769224a96314e9301a75ccd078e16'
'f574bac6d5f398e7a649fc0e1ca66ff01ad4ef34dac71258e93d8a9d9a2b3960'
'dda05c6e76f12624e418ca18a36f2e90ec1c5b1cc52fed7142fce6076ec413f3')
validpgpkeys=('A93D62ECC3C8EA12DB220EC934EA76E6791485A8') # Jim Jagielski
prepare() {
cd httpd-${pkgver}
# set default user
sed -e 's#User daemon#User http#' \
-e 's#Group daemon#Group http#' \
-i docs/conf/httpd.conf.in
cat "${srcdir}/arch.layout" >> config.layout
# https://github.com/openssl/openssl/issues/2865
patch -Np1 -i ../openssl-malloc-init.patch
}
build() {
cd httpd-${pkgver}
./configure --sbindir=/usr/bin \
--enable-layout=Arch \
--enable-mpms-shared=all \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-suexec \
--with-suexec-caller=http \
--with-suexec-docroot=/srv/http \
--with-suexec-logfile=/var/log/httpd/suexec.log \
--with-suexec-bin=/usr/bin/suexec \
--with-suexec-uidmin=99 --with-suexec-gidmin=99 \
--enable-ldap --enable-authnz-ldap --enable-authnz-fcgi \
--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
--enable-ssl --with-ssl \
--enable-deflate --enable-cgi --enable-cgid \
--enable-proxy --enable-proxy-connect \
--enable-proxy-http --enable-proxy-ftp \
--enable-dbd --enable-imagemap --enable-ident --enable-cern-meta \
--enable-lua --enable-xml2enc --enable-http2 \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-pcre=/usr
make
}
package() {
cd httpd-${pkgver}
make DESTDIR="${pkgdir}" install
install -D -m644 "${srcdir}/httpd.logrotate" "${pkgdir}/etc/logrotate.d/httpd"
install -D -m644 "${srcdir}/apache.tmpfiles.conf" "${pkgdir}/usr/lib/tmpfiles.d/apache.conf"
install -D -m644 "${srcdir}/httpd.service" "${pkgdir}/usr/lib/systemd/system/httpd.service"
install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
# symlinks for /etc/httpd
# do we really need this symlink?
ln -fs /usr/lib/httpd/modules "${pkgdir}/etc/httpd/modules"
# set sane defaults
sed -e 's#/usr/lib/httpd/modules/#modules/#' \
-e 's|#\(LoadModule negotiation_module \)|\1|' \
-e 's|#\(LoadModule include_module \)|\1|' \
-e 's|#\(LoadModule userdir_module \)|\1|' \
-e 's|#\(LoadModule slotmem_shm_module \)|\1|' \
-e 's|#\(Include conf/extra/httpd-multilang-errordoc.conf\)|\1|' \
-e 's|#\(Include conf/extra/httpd-autoindex.conf\)|\1|' \
-e 's|#\(Include conf/extra/httpd-languages.conf\)|\1|' \
-e 's|#\(Include conf/extra/httpd-userdir.conf\)|\1|' \
-e 's|#\(Include conf/extra/httpd-default.conf\)|\1|' \
-e 's|#\(Include conf/extra/httpd-mpm.conf\)|\1|' \
-i "${pkgdir}/etc/httpd/conf/httpd.conf"
# cleanup
rm -r "${pkgdir}/usr/share/httpd/manual"
rm -r "${pkgdir}/etc/httpd/conf/original"
rm -r "${pkgdir}/srv/"
rm -r "${pkgdir}/run"
}
prepare()
当我们看到正在发生的事情时,这prepare()
部分非常有趣......
首先,我们使用以下命令更改默认用户...
# set default user
sed -e 's#User daemon#User http#' \
-e 's#Group daemon#Group http#' \
-i docs/conf/httpd.conf.in
确实,正如我们在官方看到的apache 存储库默认组和用户如下,这向我们展示了 Arch Linux 与其他发行版之间的第一个区别。
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon
添加自定义拱门布局
在继续下面的内容之前,让我先谈谈 Apache 布局。Apache 默认包含自己的布局,但也包含根据不同发行版而定的一些布局。这主要是为什么不同发行版的布局如此不同。事实上,Apache 使用文件配置布局以便允许根据分布自定义目录和“架构”结构。
换句话说,引用阿帕奇维基百科:
许多第三方分销商改变布局以符合当地政策。
config.layout
可以找到默认值这里。确实如您所见,Arch 布局不在默认config.layout
文件中,这就是为什么我们有此行:
cat "${srcdir}/arch.layout" >> config.layout
让我们比较一下 Debian/Ubuntu 布局和 Arch 布局
以下是 Debian 的默认布局(在我写这篇文章的时候)
<Layout Debian>
prefix:
exec_prefix: ${prefix}/usr
bindir: ${exec_prefix}/bin
sbindir: ${exec_prefix}/sbin
libdir: ${exec_prefix}/lib
libexecdir: ${exec_prefix}/lib/apache2/modules
mandir: ${exec_prefix}/share/man
sysconfdir: ${prefix}/etc/apache2
datadir: ${exec_prefix}/share/apache2
iconsdir: ${datadir}/icons
htdocsdir: ${prefix}/usr/share/apache2/default-site/htdocs
manualdir: ${htdocsdir}/manual
cgidir: ${prefix}/usr/lib/cgi-bin
includedir: ${exec_prefix}/include/apache2
localstatedir: ${prefix}/var/lock/apache2
runtimedir: ${prefix}/var/run/apache2
logfiledir: ${prefix}/var/log/apache2
proxycachedir: ${prefix}/var/cache/apache2/proxy
infodir: ${exec_prefix}/share/info
installbuilddir: ${prefix}/usr/share/apache2/build
errordir: ${datadir}/error
</Layout>
以下是从官方获取的 Arch 布局arch 包:
<Layout Arch>
prefix: /etc/httpd
exec_prefix: /usr
bindir: /usr/bin
sbindir: /usr/bin
libdir: /usr/lib/httpd
libexecdir: /usr/lib/httpd/modules
mandir: /usr/share/man
sysconfdir: /etc/httpd/conf
datadir: /usr/share/httpd
installbuilddir: /usr/lib/httpd/build
errordir: /usr/share/httpd/error
iconsdir: /usr/share/httpd/icons
htdocsdir: /srv/http
manualdir: /usr/share/httpd/manual
cgidir: /srv/http/cgi-bin
includedir: /usr/include/httpd
localstatedir: /var
runtimedir: /run/httpd
logfiledir: /var/log/httpd
proxycachedir: /var/cache/httpd
</Layout>
我不会详细介绍一切,因为我认为这不一定,因为我们可以在文档或其他地方。
我们在这里看到的是它非常不同。所以这几乎解释了 Arch 和 Ubuntu/Debian Apache 软件包之间的所有区别。
build()
我搜索了 Debian/Ubuntu 的默认配置,但没有找到任何确定的信息,所以如果您知道,请随意添加它和/或对这部分/答案留下评论。
另一个最重要的事情是 Apache 的构建和配置方式,并且不同的发行版可能有所不同。
Arch Linux 选择使用以下配置,我认为这应该与 Debian 不同。您可以找到有关配置参数的更多信息这里
./configure --sbindir=/usr/bin \
--enable-layout=Arch \
--enable-mpms-shared=all \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-suexec \
--with-suexec-caller=http \
--with-suexec-docroot=/srv/http \
--with-suexec-logfile=/var/log/httpd/suexec.log \
--with-suexec-bin=/usr/bin/suexec \
--with-suexec-uidmin=99 --with-suexec-gidmin=99 \
--enable-ldap --enable-authnz-ldap --enable-authnz-fcgi \
--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
--enable-ssl --with-ssl \
--enable-deflate --enable-cgi --enable-cgid \
--enable-proxy --enable-proxy-connect \
--enable-proxy-http --enable-proxy-ftp \
--enable-dbd --enable-imagemap --enable-ident --enable-cern-meta \
--enable-lua --enable-xml2enc --enable-http2 \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-pcre=/usr
答案2
- 启动、停止和重新启动 Apache 2 Web 服务器的命令在许多 Linux 发行版和 Unix 版本上有所不同,如下所示这里(不是最新的列表,但无论如何)。这既有历史原因,也有一些特殊原因。除了命名、位置和控制命令外,Apache(2.x)网络服务器在
配置、功能等方面与所有当前 Linux 版本几乎相同。 - 您可以尝试创建模仿您更习惯的命令的 shell 脚本。否则我认为您做不了什么。
答案3
我自己从未使用过 Arch Linux,但您的问题引起了我的兴趣。
通过阅读 AL 的文档,特别是他们的包管理器 pacman,我得到的印象是,他们对事情应该如何做有着相当严格的规定,这符合他们“保持简单”的理念,就像他们首页。例如,看看他们的包装标准;这是我第一次看到任何 Linux 系统都有这样的标准。我希望其他发行版也有这样的标准(或让它们更明显)。
至于将 Ubuntu 风格的 Apache2 放到 AL 上,我会说“不要”。如果他们有一个功能良好的系统,可以确定应该在哪里安装东西等,我会遵循他们的建议,而不是学习按原样使用系统。如果你遇到问题并寻求帮助,他们很可能会要求你安装标准软件包。