20170504-title01

ラズパイにMySQL5.7.18が入ったことで気をよくした俺は、Apache2.4系の最新を入れることした。

2017/05/03時点での最新版は2.4.25。
apt-getで入るのは2.4.10、ダメだ、またソースからコンパイルせねば。あー、怖いw




まずはOpenSSLから!

最近はhttpsでのアクセス推奨って感じで、開発時点から意識しておいたほうが良いのは自明の理。

まずはOpenSSLをインストールする。

aptリポジトリで用意されてるバージョンって何だろう?

$ sudo apt-cache policy openssl
openssl:
  インストールされているバージョン: 1.0.1t-1+deb8u2
  候補:               1.0.1t-1+deb8u6
  バージョンテーブル:
     1.0.1t-1+deb8u6 0
        500 http://mirrordirector.raspbian.org/raspbian/ jessie/main armhf Packages
 *** 1.0.1t-1+deb8u2 0
        100 /var/lib/dpkg/status

バージョン1.0.1tでした。つ~か、入れたつもりなかったのにインストールされてた。

なので、削除する。

$ sudo apt-get purge openssl

そしたら、以下のサイトから1.0.2系の最新を取ってくる。

ここは一気にtarボール取得からconfig、make、make installまでやってしまおう。

$ wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
$ tar zxvf openssl-1.0.2k.tar.gz
$ mv openssl-1.0.2k openssl
$ cd openssl/
$ ./config -fPIC shared zlib
$ make
$ sudo make install
$ cd /usr/local/ssl/bin
$ sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

そんでもってopensslのバージョン確認。

$ openssl version
OpenSSL 1.0.2k  26 Jan 2017

じゅ、順調だっ!


いよいよhttpd。マジ怖い。その前に準備。

果たしてどれほどの時間がかかるのだろうか。。。本当にマジで怖い。

いよいよ、apache2をビルドする。

ビルドする上で必要なのがaprとapr-util。これらのtarボールも一緒に取ってくる。

$ wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.25.tar.gz
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-1.5.2.tar.gz
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-util-1.5.4.tar.gz

aprとapr-util、実は解凍したhttpd-2.4.25の下のsrclibに置けば、httpdのmake時に一緒にコンパイル、リンクしてくれるらしい。便利。

$ tar zxvf httpd-2.4.25.tar.gz
$ cp apr-* ./httpd-2.4.25/srclib/.
$ cd httpd-2.4.25/srclib/
$ mkdir apr
$ mkdir apr-util
$ mv apr-1.5.2.tar.gz ./apr/.
$ mv apr-util-1.5.4.tar.gz  ./apr-util/.
$ cd apr
$ tar zxvf apr-1.5.2.tar.gz
$ mv -i apr-1.5.2/* .
$ cd ..
$ cd apr-util/
$ tar zxvf apr-util-1.5.4.tar.gz
$ mv -i apr-util-1.5.4/* .

あとは必要なライブラリをインストール。

$ sudo apt-get -y install libpcre3 libpcre3-dev perl

いや、実は上3つのライブラリ、すでに入ってたんだけどね。

これで準備は整った。


良く分からんconfigure、そしてmake & make install

仕事でも結構ハマったことがあるんだが、configureでオプションを指定しておかないとmoduleが生成されてない!なんてことがある。

要はやりたいことが何かってことだ。

やりたいこと、それはcakephpを動かしたいのでmod_rewrite生成したい、tomcatと連携したかったり分散したかったりでmod_proxy関連生成したい、先にビルドしたsslを有効にしたいのでmod_ssl生成したい、MPM (Multi-Processing Module) 色々試したいのでmod_mpm関連生成したい。

つ~わけで、configる!間違ってるかもしれないけど。

$ cd httpd-2.4.25/
$ ./configure  --enable-so  --enable-rewrite=shared  --enable-proxy=shared  --enable-proxy-ajp  --enable-ssl  --with-ssl=/usr/local/ssl  --with-included-apr  --enable-mods-shared  --enable-mpms-shared

エラー出なかった。。。

いよいよ、make。ヤバい。

$ make

30分くらいで終了。エラー出なかった。。。良かった。。。マジ良かった。。。

$ sudo make install

これで/usr/local/apache2の下にインストールされる。


とりあえず設定。

とりあえず、世の中に倣ってapacheユーザーを作成して動かす。あとServerName設定していないとエラーになるので設定しとく。

$ sudo groupadd -g 501 apache
$ sudo useradd -M -u 501 -g apache -s /bin/false apache
$ sudo vi /usr/local/apache2/conf/httpd.config
 
    :
177 #User daemon
178 #Group daemon
179 User apache
180 Group apache
    :
210 #ServerName www.example.com:80
211 ServerName rpi-mng-svr01:80
    :

そして動かす。

$ sudo /usr/local/apache2/bin/apachectl start
$ ps aux | grep httpd
 
root     22456  0.0  0.3   6880  3252 ?        Ss   04:49   0:00 /usr/local/apache2/bin/httpd -k start
apache   22459  0.0  0.3 229088  3016 ?        Sl   04:49   0:00 /usr/local/apache2/bin/httpd -k start
apache   22460  0.0  0.3 229088  3016 ?        Sl   04:49   0:00 /usr/local/apache2/bin/httpd -k start
apache   22461  0.0  0.3 229088  3012 ?        Sl   04:49   0:00 /usr/local/apache2/bin/httpd -k start
pi       22545  0.0  0.0   3844   564 pts/1    S+   04:49   0:00 grep --color=auto httpd

Windows10のPCのブラウザーからラズパイ(うちの場合http://192.168.0.101)へアクセス。

It works!

OK!じゅ、順調だ!


自動起動設定。そしてハマる。

自動起動って、どうやるんだ。

Redhat系ではchkconfig、最近はsystemctl。でもRaspbian、もっと言うとDebianではどうすりゃいいんだ? というわけで調べてみたことを整理。

  1. /etc/init.d/にサービス名でファイルを作りその中に起動スクリプトを書く。
  2. 参考にする起動スクリプトは/etc/init.d/skeleton
  3. update-rc.dコマンドを使用してランレベル毎に用意されている/etc/rcX.dへシンポリックリンクを貼る。

上記1.でハマった。どう書いたら良いか分からんかったが、Google先生、もっと言えば先人の方々の知恵を借りて、どうにか動くスクリプトを書くことが出来た。

そしてスクリプト中最初のコメント、これ書いてないとエラー出るのね。

とりあえず、晒すのは恥ずかしいが載せておく。

$ sudo vi /etc/init.d/httpd
 
#!/bin/sh
### BEGIN INIT INFO
# Provides:          httpd
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Apache2 web server
# Description:       Start the web server and associated helpers
#  This script will start apache2, and possibly all associated instances.
#  Moreover, it will set-up temporary directories and helper tools such as
#  htcacheclean when required by the configuration.
### END INIT INFO
 
NAME=httpd
DESC="Apache is a World Wide Web server."
DAEMON=/usr/local/apache2/bin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
. /usr/share/initramfs-tools/scripts/functions
 
case "$1" in
'start')
    /usr/local/apache2/bin/apachectl start
    ;;
'stop')
    /usr/local/apache2/bin/apachectl stop
    ;;
'restart')
    /usr/local/apache2/bin/apachectl restart
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac
exit 0

そしてupdate-rc.dを実行。

$ sudo update-rc.d httpd defaults

上記、エラー無く通るまで数時間を費やす。。。はぁぁぁ。。。

というわけで、無事serviceコマンドで起動・停止が出来るようになりました。

$ sudo service httpd start
$ sudo service httpd status
 
● httpd.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/httpd)
   Active: active (exited) since 木 2017-05-04 05:46:35 JST; 2s ago
  Process: 22434 ExecStop=/etc/init.d/httpd stop (code=exited, status=0/SUCCESS)
  Process: 22664 ExecStart=/etc/init.d/httpd start (code=exited, status=0/SUCCESS)
 
$ sudo service httpd stop
$ sudo service httpd status
 
● httpd.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/httpd)
   Active: inactive (dead) since 木 2017-05-04 05:46:57 JST; 2s ago
  Process: 22705 ExecStop=/etc/init.d/httpd stop (code=exited, status=0/SUCCESS)
  Process: 22664 ExecStart=/etc/init.d/httpd start (code=exited, status=0/SUCCESS)
 
$ sudo ls /etc/rc2.d/
README       S01dhcpcd  S01rsyslog       S02httpd  S03dbus            S03mysql  S03rsync  S04avahi-daemon  S05plymouth  S05rmnologin
S01bootlogs  S01motd    S01triggerhappy  S03cron   S03dphys-swapfile  S03ntp    S03ssh    S04bluetooth     S05rc.local

いやもうここまででいいでしょ、今日は。達成感あるし。


参考にさせて頂いたサイト