まずは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でオプションを指定しておかないと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ではどうすりゃいいんだ?
というわけで調べてみたことを整理。
- /etc/init.d/にサービス名でファイルを作りその中に起動スクリプトを書く。
- 参考にする起動スクリプトは/etc/init.d/skeleton
- 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
いやもうここまででいいでしょ、今日は。達成感あるし。
参考にさせて頂いたサイト
コメント