OS: Ubuntu Server 18.04.1 LTS
Apache 2.4.35
Apache HTTP Serverをソースからインストールすることが然程頻繁には無いから、いざという際にすっかりやり方を忘れてしまう。configureスクリプトを実行してはエラーに出会い、調べてはまたconfigureスクリプトを実行するのはいい加減厄介に感じるから、ひとつインストールの手引きをしたためておこうという算段である。まずはソースコードをダウンロードして展開する。
$ wget -c http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.35.tar.bz2 $ wget -c https://www.apache.org/dist/httpd/httpd-2.4.35.tar.bz2.asc $ gpg --recv-key 995E35221AD84DFF $ gpg --verify httpd-2.4.35.tar.bz2.asc $ tar jxvf httpd-2.4.35.tar.bz2 $ cd httpd-2.4.35/
configureスクリプトを実施するまえに予め必要とされるライブラリを導入しておく。オプションによって必要とされるものは変わるけれども、毎回概ねこのようなエラーメッセージに見舞われている。
メッセージ | 必要なパッケージ |
---|---|
configure: error: APR not found. Please read the documentation. | libapr1-dev |
configure: error: APR-util not found. Please read the documentation. | libaprutil1-dev |
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/ | libpcre3-dev |
checking whether to enable mod_deflate… configure: error: mod_deflate has been requested but can not be built due to prerequisite failures | zlib1g-dev |
checking whether to enable mod_ssl… configure: error: mod_ssl has been requested but can not be built due to prerequisite failures | libssl-dev |
$ sudo apt install libapr1-dev libaprutil1-dev libpcre3-dev zlib1g-dev libssl-dev $ ./configure --enable-so --enable-cache --enable-disk-cache --enable-mem-cache --enable-deflate --enable-expires --enable-headers --enable-usertrack --enable-unique-id --enable-ssl --enable-rewrite --enable-logio $ make $ sudo make install
恙無くインストールが全うされたら次は設定に関する手続きを進める。httpdをapacheユーザで実行したいから此れを予め作成する。そうしたらhttpd.confに手を入れてゆく。
$ sudo useradd -s /bin/false apache $ cd /usr/local/apache2/conf/ $ sudo cp -av httpd.conf httpd.conf.orig
ログフォーマットにcombinedioを適用するためにmod_logio.soをロードしたり Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
というエラーメッセージを避けるためにmod_userdir.soをロードした。
$ sudo vi httpd.conf #LoadModule logio_module modules/mod_logio.so LoadModule logio_module modules/mod_logio.so #LoadModule userdir_module modules/mod_userdir.so LoadModule userdir_module modules/mod_userdir.so #User daemon #Group daemon User apache Group apache #ServerAdmin you@example.com ServerAdmin guro@localhost #ServerName www.example.com:80 ServerName 192.168.0.58 #Include conf/extra/httpd-userdir.conf Include conf/extra/httpd-userdir.conf #Include conf/extra/httpd-vhosts.conf Include conf/extra/httpd-vhosts.conf
その次にhttpd-userdir.confを触る。のちにphp.iniの設定を.htaccessから変更するためにAllowOverrideディレクティブへOptionsも足す。けれどもそうすると結局全てのディレクティブタイプを指定することと同義であるからAllに置き換えた。
$ cd extra/ $ sudo vi httpd-userdir.conf (snip) #AllowOverride FileInfo AuthConfig Limit Indexes AllowOverride All
今度はhttpd-vhosts.confを編集する。DocumentRootが見つからないと AH00112: Warning: DocumentRoot [/home/guro/public_html] does not exist
というようなエラーメッセージが現れてしまうからこれも予め作成してから手を付ける。
$ mkdir /home/guro/public_html $ sudo vi httpd-vhosts.conf <VirtualHost *:80> ServerAdmin guro@localhost DocumentRoot "/home/guro/public_html" ServerName 192.168.0.58 ErrorLog "logs/error_log.guro" CustomLog "logs/access_log.guro" combinedio </VirtualHost>
ここまで調えたら設定ファイルに誤りがないか確かめるためにconfigtestを実施する。Syntax OKがもらえるまではエラーの内容を熱心に点検して修正せねばならない。
$ sudo /usr/local/apache2/bin/apachectl configtest Syntax OK
問題をすべて潰したらhttpdを起動する。起動に成功してもapachectlからはまるきりメッセージが表示されないから実際にhttpdプロセスが生成されているかを確認しておくと良さそうである。
$ sudo /usr/local/apache2/bin/apachectl start $ ps axuwf | grep http[d] root 36536 0.0 0.0 79848 4012 ? Ss 05:37 0:00 /usr/local/apache2/bin/httpd -k start apache 36537 0.0 0.1 2011824 4508 ? Sl 05:37 0:00 \_ /usr/local/apache2/bin/httpd -k start apache 36538 0.0 0.1 2011824 4508 ? Sl 05:37 0:00 \_ /usr/local/apache2/bin/httpd -k start apache 36539 0.0 0.1 2011824 4508 ? Sl 05:37 0:00 \_ /usr/local/apache2/bin/httpd -k start
あとは多方面からの叱責が見込まれるHTML文法でテスト用のウェブコンテンツを用意して実際にブラウザからアクセスしてみるとこうである。
$ vi /home/guro/public_html/index.html <html><body><h1>OK!</h1></body></html>
正常に表示されることを散々確認したらひとまずhttpdを停止してのちにどこへ出しても恥ずかしいコンテンツに差し替えてゆく手筈を整えて全ては終いである。
$ sudo /usr/local/apache2/bin/apachectl stop $ ps axuwf | grep http[d]