はじめに
我が家では家庭内DHCPとしてdnsmasqを利用しています。
DHCPでリースされたIPアドレスを確認するには、サーバへSSHでログインし dnsmasq.leases のファイル内容を確認しますが、
毎回サーバへログインするのが面倒になってきました。
そこで、WEBサーバを立ち上げてDHCPのIPリース状況をWEBブラウザから簡単に確認できるようにしました。
先行事例
先行事例をgoogleで簡単に調べましたが特に見つかりませんでした。
探している時間が勿体ないのでさっさと作りました。
方針
作成したWEBスクリプト
$vi /var/www-py/cgi-bin/index.py
#!/usr/bin/env python # -*- coding:utf-8 -*- 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
実行方法
#ファイヤウォールのポートを空ける #webサーバが起動しているときだけポートを空けたいので --permanent は付けない。 #ファイヤウォールの制御は後述でスクリプトにします。 $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
#!/bin/bash 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 #1 SMP Thu Mar 15 13:29:03 UTC 2018 armv7l armv7l armv7l GNU/Linux $ cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) $ python --version Python 2.7.5