差异

差异

我有一台 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

  1. 启动、停止和重新启动 Apache 2 Web 服务器的命令在许多 Linux 发行版和 Unix 版本上有所不同,如下所示这里(不是最新的列表,但无论如何)。这既有历史原因,也有一些特殊原因。除了命名、位置和控制命令外,Apache(2.x)网络服务器在配置、功能等方面与所有当前 Linux 版本几乎相同。
  2. 您可以尝试创建模仿您更习惯的命令的 shell 脚本。否则我认为您做不了什么。

答案3

我自己从未使用过 Arch Linux,但您的问题引起了我的兴趣。

通过阅读 AL 的文档,特别是他们的包管理器 pacman,我得到的印象是,他们对事情应该如何做有着相当严格的规定,这符合他们“保持简单”的理念,就像他们首页。例如,看看他们的包装标准;这是我第一次看到任何 Linux 系统都有这样的标准。我希望其他发行版也有这样的标准(或让它们更明显)。

至于将 Ubuntu 风格的 Apache2 放到 AL 上,我会说“不要”。如果他们有一个功能良好的系统,可以确定应该在哪里安装东西等,我会遵循他们的建议,而不是学习按原样使用系统。如果你遇到问题并寻求帮助,他们很可能会要求你安装标准软件包。

相关内容