はじめに
我が家では家庭内DHCPとしてdnsmasqを利用しています。
DHCPでリースされたIPアドレスを確認するには、サーバへSSHでログインし dnsmasq.leases のファイル内容を確認しますが、
毎回サーバへログインするのが面倒になってきました。
そこで、WEBサーバを立ち上げてDHCPのIPリース状況をWEBブラウザから簡単に確認できるようにしました。
先行事例
先行事例をgoogleで簡単に調べましたが特に見つかりませんでした。
探している時間が勿体ないのでさっさと作りました。
方針
- DHCPのリース情報が書かれている、以下ファイル内容をWEBブラウザから確認できるようにする。
- /var/lib/dnsmasq/dnsmasq.leases
- httpサーバはDHCP(dnsmasq)をインストールしているサーバに構築する。
- 今回は目的が単純なので重装備のapacheは利用せずにpythonのウェブサーバ機能を利用する。
- 家庭内LANで利用するのでセキュリは後回しにします、まずは最速最短でサーバを構築し運用を開始する。
$vi /var/www-py/cgi-bin/index.py
print('Content-type: text/html; charset=UTF-8\r\n')
print('<H1>%s</H1>\n' % "dnsmasq.leases")
f=open("/var/lib/dnsmasq/dnsmasq.leases", "rt")
try:
for line in f:
print(line.strip() + "<br>\n")
finally:
f.close()
スクリプトを実行できるように権限を付与する
$ ls -l /var/www-py/cgi-bin/index.py
-rwxr-xr-x. 1 root root 121 6月 12 15:13 /var/www-py/cgi-bin/index.py
実行方法
$firewall-cmd --add-port=8000/tcp --zone=public
$firewall-cmd --reload
$cd /var/www-py
$python -m CGIHTTPServer 8000
#ctl-z で終了します。
プライベートな情報は伏せています。(殆ど黒塗りだな・・・)
サービス化する
OS起動時にWEBサーバを自動起動できるようにサービスを作ります。
サービスの設定ファイル
$vi /usr/lib/systemd/system/www-py.service
[Unit]
Description=www-py server.
After=dnsmasq.service firewalld.service
[Service]
Type=simple
ExecStartPre=/var/www-py/service/start StartPre
ExecStart=/var/www-py/service/start Start
ExecStopPost=/var/www-py/service/start StopPost
[Install]
WantedBy=multi-user.target
サービスから呼ぶスクリプトファイル
サービスが起動しているときだけFirewallのポートを空けたいので、firewall-cmdコマンドに --permanent オプションは付けません。
$vi /var/www-py/service/start
if [ "$1" = "StartPre" ] ; then
firewall-cmd --add-port=8000/tcp --zone=public
elif [ "$1" = "StopPost" ] ; then
firewall-cmd --remove-port=8000/tcp --zone=public
elif [ "$1" = "Start" ] ; then
cd /var/www-py/
python -m CGIHTTPServer 8000
else
echo "Unknown arg. arg=$1"
fi
ファイルのアクセス権
ls -l /var/www-py/service/start
-rwxr-xr-x. 1 root root 105 Jun 12 20:36 /var/www-py/service/start
仕上げ
$systemctl start www-py
$systemctl stop www-py
webサーバのプロセスが残っていないか確認します。
$ps -aux | grep python
$firewall-cmd --list-ports --zone=public
#問題なければOS起動時にサービスを読み込むようにします。
$systemctl enable www-py
環境
Raspberry Pi3 b
$uname -a
Linux foo-bar.local 4.9.80-v7.1.el7
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
$ python --version
Python 2.7.5