Apacheをソースからインストールした際にファイル配置を変更する

どこにApache関連のファイル群がインストールされているのか迷ったことはありませんか？

サーバーによってApacheがインストールされている場所は、`/usr/local/apache2`だったり、`/opt/httpd`だったり、`/usr/sbin`だったりで環境によって様々です。

Apacheは、ソースからインストールする際に**ファイル／ディレクトリのレイアウトをconfigureオプションで設定することができます**。

指定の仕方は、大きく分けて２種類あります。

1. 予め定義された設定を使う場合
2. 自分でひとつづつ定義していく場合

# 予め定義された設定を使う場合

apacheのソースを解凍すると中に、`config.layout`というファイルが入っています。
この中に予め定義された設定が記述してあります。

この設定を使うためには、configureのオプションとして、`--enable-layout=ID`　を付与するだけです。簡単ですね。

例）RedHat系のディレクトリレイアウトでインストールしたい場合

```bash
$ sudo ./configure --enable-layout=RedHat
$ sudo make && make install
```

現時点での最新版として、httpd-2.4.18をサンプルに見てみると、
予め用意された設定の種類はこのくらいあります。

* Apache
* GNU
* Mac OS X Server
* Darwin
* RedHat
* opt
* SuSE
* BSDI
* Solaris
* OpenBSD
* FreeBSD
* Debian
* RPM
* AIX
* Slackware-FHS

```bash
$ cd /usr/local/src
$ curl -s -O http://www.eu.apache.org/dist//httpd/httpd-2.4.18.tar.gz
$ tar zxvf httpd-2.4.18.tar.gz
$ grep "<Layout" httpd-2.4.18/config.layout | sed -e "s/<Layout//g;s/>//g"
 Apache
 GNU
 Mac OS X Server
 Darwin
 RedHat
 opt
 SuSE
 BSDI
 Solaris
 OpenBSD
 FreeBSD
 Debian
 RPM
 AIX
 Slackware-FHS
```

config.layoutからいくつかレイアウトを抜粋してみます。

何も指定しない場合の初期レイアウトは、`Apache`レイアウト が適用されます。
他には、OSXだったりRedHatだったりするとこんな感じなります。

```html
#   Classical Apache path layout.
<Layout Apache>
    prefix:        /usr/local/apache2
    exec_prefix:   ${prefix}
    bindir:        ${exec_prefix}/bin
    sbindir:       ${exec_prefix}/bin
    libdir:        ${exec_prefix}/lib
    libexecdir:    ${exec_prefix}/modules
    mandir:        ${prefix}/man
    sysconfdir:    ${prefix}/conf
    datadir:       ${prefix}
    installbuilddir: ${datadir}/build
    errordir:      ${datadir}/error
    iconsdir:      ${datadir}/icons
    htdocsdir:     ${datadir}/htdocs
    manualdir:     ${datadir}/manual
    cgidir:        ${datadir}/cgi-bin
    includedir:    ${prefix}/include
    localstatedir: ${prefix}
    runtimedir:    ${localstatedir}/logs
    logfiledir:    ${localstatedir}/logs
    proxycachedir: ${localstatedir}/proxy
</Layout>

#   Darwin/Mac OS Layout
<Layout Darwin>
    prefix:        /usr
    exec_prefix:   ${prefix}
    bindir:        ${exec_prefix}/bin
    sbindir:       ${exec_prefix}/sbin
    libdir:        ${exec_prefix}/lib
    libexecdir:    ${exec_prefix}/libexec+
    mandir:        ${prefix}/share/man
    datadir:       /Library/WebServer
    sysconfdir:    /etc+
    installbuilddir: ${prefix}/share/httpd/build
    errordir:      ${prefix}/share/httpd/error
    iconsdir:      ${prefix}/share/httpd/icons
    htdocsdir:     ${datadir}/Documents
    manualdir:     ${datadir}/share/httpd/manual
    cgidir:        ${datadir}/CGI-Executables
    includedir:    ${prefix}/include+
    localstatedir: /var
    runtimedir:    ${localstatedir}/run
    logfiledir:    ${localstatedir}/log+
    proxycachedir: ${runtimedir}/proxy
</Layout>

#   Red Hat Linux 7.x layout
<Layout RedHat>
    prefix:        /usr
    exec_prefix:   ${prefix}
    bindir:        ${prefix}/bin
    sbindir:       ${prefix}/sbin
    libdir:        ${prefix}/lib
    libexecdir:    ${prefix}/lib/apache
    mandir:        ${prefix}/man
    sysconfdir:    /etc/httpd/conf
    datadir:       /var/www
    installbuilddir: ${datadir}/build
    errordir:      ${datadir}/error
    iconsdir:      ${datadir}/icons
    htdocsdir:     ${datadir}/html
    manualdir:     ${datadir}/manual
    cgidir:        ${datadir}/cgi-bin
    includedir:    ${prefix}/include/apache
    localstatedir: /var
    runtimedir:    ${localstatedir}/run
    logfiledir:    ${localstatedir}/log/httpd
    proxycachedir: ${localstatedir}/cache/httpd
</Layout>
```

ちなみに、httpdの2.2系ではレイアウトの種類が若干異なるのでご留意ください。


# 個別に設定する場合

大枠は何かしらのレイアウトを使いつつ、一部だけ書き換えたい場合などは個別に設定することもできます。

設定できる項目は、`configure --help`で確認できます。
以下は httpd-2.4.18 での設定項目を抜粋したものです。

```
Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local/apache2]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]
```

# まとめ

config.layoutを便利に使えば、**configureでパス指定しているオプションはすっきりさせることができる**と思います。
昨今、パッケージマネージャを使ってhttpdをインストールすることも多いですが、ちゃんと**configureの中身を見ると色々発見があって面白い**ですね :smile: