Rokiのチラ裏

学生による学習のログ

自宅ローカルサーバー(apache,motion,ping,AP)構築

前書き

Amazon dash buttonなどと連携させたmotionサーバー(監視カメラ)を以前構築したわけだが、最近は更に用途が増えてきている。

例えば、最近何故だかマンション内の回線が不安定であるのでpingを飛ばしたりしている。マンション内と断定したのは、定期的にプロバイダからの接続が切れる事を観測した事に帰結するのだが、まあ正直なところ原因ははっきりと定かではない。そこで、取り敢えず原因を探るためにも、不安定になるたびにpingを送信して、どの段階でノードがlostされたのか調べたりする必要がある。

また、別の用途としては、アクセスポイントとしての役割がある。GigaBitのルーターが欲しかったのだが、それに対応した無線LANルーターは割とお値段が張るので、学生身分も考えて有線LANルータにして、元から稼働している自宅サーバーをアクセスポイントにしてしまう事にした。

そして、それら全てを直感的に操作したり、情報にアクセスできたりする必要がある。まあ私だけが出来れば良いというのであれば必要ないのだが、彼女だけが自宅にいる時に使えないのも不便なので必要である。そのためには、apacheを使ってウェブサーバーを作り、そのページからグラフィカルなインタフェースで操作できるようにする事とした。

そんなわけで、以下に上記の機能を稼働させるサーバーを構築する作業をログを残す。


導入する機能まとめ

さて、導入する機能は以下の通りである。

  • LAMP
  • motion
  • cronでpingを飛ばしそのログファイルをphpで吸い上げる
  • AP化


環境は以下の通りである。

$ uname -a
Linux Vostro-Ubuntu 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

MySQLは特に必要としないので厳密にはLAPといったところか。

apache,php導入

$ sudo apt-get install apache2 php libapache2-mod-php

apacheについては、諸々の設定が必要であるが、本エントリでは、取り合えず機能として目立つ設定内容だけを示す。*1 設定内容としては、まずapacheサーバーへのアクセスはローカルネットワーク内のマシンに限定する。また、すぐcgiを動かしたくなるとも思うのでそのように設定した。

<Directory /var/www/html>
     Options ExecCGI
     AddType text/html cgi
 
     AllowOverride All
     order deny,allow
     deny from all
     allow from 192.168.
     allow from 10.42.0.
</Directory>

このapacheサーバーは、apacheだけでなく、アクセスポイントともなっているため、そのアクセスポイントを使っているユーザー(10.42.0.)もallowする必要がある。

motion導入

motionについては、以前アップロードしたエントリを参照。 roki.hateblo.jp

cronでpingを飛ばしphpで吸い上げ

cronで定期的にpingを飛ばす。ログファイルを上書き出力させ、そのファイルをphpで読み込み、前述したページに表示させる。取り敢えず、pingは30分おきにexample.comへ送出する。

*/30 *    * * *   root    /bin/bash /var/www/script/check_ping.sh

shスクリプトは以下のような内容。

#!/bin/bash
# checkinfo.sh

cd /var/www/script
date > ../logfiles/ping.log
echo >> ../logfiles/ping.log
ping -c 10 www.example.com >> ../logfiles/ping.log
echo >> ../logfiles/ping.log
traceroute www.example.com >> ../logfiles/ping.log

そしてphpで吸い上げる。

<?php
    function file_print($filename,$filetype_name){
        $fp=fopen($filename,'r');
        print('<u><strong>'.$filetype_name.'</strong></u>:<br>');
        if($fp){
            if(flock($fp,LOCK_SH)){
                while(!feof($fp)){
                    $buffer=fgets($fp);
                    print($buffer.'<br>');
                }
                flock($fp,LOCK_UN);
            }else{
                print('File lock was failed.');
            }
        }
        fclose($fp);
        print('<br><br>');
    }

    file_print('../script/checkinfo.sh','script');
    file_print('../logfiles/ping.log','result');
?>

これで、定期的に実行されるpingを、apacheに設定されているhtmlページから参照できるようになる。

AP化

AP化は公開されているユーティリティツールを用いれば比較的容易に構築できる。

sudo apt -y install hostap
git clone https://github.com/oblique/create_ap
cd create_ap
sudo make install
create_ap --ieee80211n wireless_adaptor_name eth_adaptor_name SSID key &

以上で完了した。

ちなみに、ローカルネットワーク上のページは以下のような感じにしてみた。普通にhtmlとcssで書いた。

無駄に装飾を凝ってしまった気がするが画面中央の黄色い画像部分はmotionプロセスが起動すると自動的に監視カメラの映像に切り替わるようになっている。

*1:他の標準的なディストリビューションではhttpd.confによる設定が一般的だが、Ubuntuのaptでapache2を導入した場合は、/etc/apache2/apache2.confに設定内容が書かれるため、本エントリでもその内容をそのまま記載している。