Monthly Archives: 6月 2013

[FreeBSD][Linux] DHCPサーバ(isc-dhcpd)でリースしているIPアドレスの数を監視するには

Pocket

DHCPサーバのIPアドレス数を監視したい。

具体的には、リースしているIPアドレス数と、空いているIPアドレス数のそれぞれである。

基になるデータはdhcpd.leasesにあるのだが、そのままでは使えない。
manなど読めば分かるのだが、ここにはIPアドレスの貸与、更新、破棄が末尾にだらだらと追記されていくので、同じクライアントが複数回出てきたりする。
だからリースされたもの、空いているものを数えようとすると意外に手間取るのである。

同じ悩みを持つ方はいるようで、少し検索すると、こういったIPアドレス数を数えるスクリプトはいくつか見つかる。
調べてみた結果を記す。

なお先に結論を言っておくと、どこかの誰かが作ってくれたawkスクリプトを使用することにした。

 

いくつかのスクリプト

いずれも判で押したようにperlスクリプトである。
繰り返すがここにあるものは使っていない。

 

DHCPstatus

面倒くさい。
サイトからファイルをダウンロードして展開するとこのように。

$ ls
INSTALL README libraries.tar dhcpstatus.ini
LICENSE VERSION scripts

ここにあるibraries.tarを展開すると、dhcpstatusというディレクトリが出来る。
それを/usr/local/にコピー。
つまり/usr/local/dhcpstatusというディレクトリが出来る。

さらに、dhcpstatus.iniも/usr/local/dhcpstatusの下へコピー。
そしてdhcpstatus.iniを修正
dhcpdの設定ファイル、leaseファイルの場所を指定する。
複数のサブネットを運用しているのでなければ、show_whole_subnetを1に変更

# location of the .conf file.
conf_file=/usr/local/etc/dhcpd.conf
leases_file=/var/db/dhcpd/dhcpd.leases
show_whole_subnet=1

そして実行

$ perl ./scripts/dhcpstatus
Legacy library timelocal.pl will be removed from the Perl core distribution in the next major release. Please install it from the CPAN distribution Perl4::CoreLibs. It is being used at dhcpstatus/dhcpstatus.pm, line 26.
DHCP Subnet Information

Subnet: 192.168.100.0 Netmask: 255.255.255.0
IP range: 192.168.10.101 - 192.168.10.199 Router: 192.168.10.254
IPs defined: 99 IPs used: 21 IPs free: 78

ベースにしているPerlが古すぎるので却下。

 

DHCP leasecount

こんな感じ。

$ ./dhcp-leasecount -l /var/db/dhcpd/dhcpd.leases 172.29.16.0-172.29.16.255
defined(%hash) is deprecated at ./dhcp-leasecount line 100.
(Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./dhcp-leasecount line 102.
(Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./dhcp-leasecount line 104.
(Maybe you should just omit the defined()?)
Total available addresses: 256
Active leases: 37 (14.5%)
Expired leases: 75 (29.3%)
Available addresses: 144 (56.2%)

なんかこれも間もなく使えなくなりそうな予感。perlスクリプト修正するのやだし。

 

Report DHCP

出力がhtmlなのですぐにやる気をなくした。

 

結局awkで。

こういうawkスクリプトを使うことにした。stackoverflow.comとかで見つけたと思う。
例えばgetDhcpStatus.shとして保存しておく。

#!/bin/sh
awk '/^lease / { curlease = $2; } /^ binding state/ { lstates[curlease] = $3; } END { for (curl in lstates) { tstates[lstates[curl]]++; } for (curs in tstates) { print curs, tstates[curs]; } }' /var/db/dhcpd/dhcpd.leases

出力結果は例えば以下のように。

active; 66
free; 275

うーん。minimalでよろしい。

 

出力をMRTGに。

でこれをMRTGに食わせる場合には、さらに以下のようなスクリプトを使ってMRTGから呼ぶ。
#!/bin/sh

~/bin/mrtg/getDhcpStatus.sh | cut -f2 -d" "|head -2
uptime | awk '{print $3}' | sed "s/,//"
echo "leased, free IP addresses"

 

 

 

No tags for this post.

[OSX] メモ: MacPortsとHomebrew

Pocket

 

MacPortsとHomebrewの違いについてざっと調べた。
双方を比較するとおおよそ以下の事が言えるようだ。

MacPorts

  • 対応ソフトウェア: 多
  • 消費ディスク: 多
  • インストール時時間: 多
  • default path: /opt/local
  • システムへの依存度: 小
  • OS  update時影響: 少

Homebrew

  • 対応ソフトウェア: 少
  • 消費ディスク: 少
  • インストール時時間: 少
  • defaultpath: /usr/local/cellar
  • システムへの依存度: 大
  • OS  update時影響: 大

ベースシステムとの独立性、という点ではMacPortsに惹かれるが、サーバ用途じゃなければ手軽そうなHomebrewでいいかな…。

No tags for this post.

VMWare vSphere5.0(ESXi5.0)インストーラをUSBメモリ「から」起動するには

Pocket

VMWareのESXiは大変便利なのだが、インストーラをCDに書き込む必要のあるのが玉に瑕。
今更CD-R/DVD-Rなんて持ってないよ。
USBメモリにインストーラをインストールする方法を調べたのでまとめる。

なおESXiはVMWareからダウンロードしている前提。

UNetbootinの入手

以下より、OSに合わせたUNetbootinをダウンロード。

http://unetbootin.sourceforge.net/

Windows、Macのほか、各種Linux向けにも用意されているし、インストールの必要なく動作するので、Windowsのレジストリだって汚れないよ!

USBメモリの準備

USBメモリはFAT32でフォーマットしておく。
Windowsでは「クイックフォーマット」は選んだりしないこと。

USBメモリへの書き込み

USBメモリを挿してから、USBUNetbootinを起動。
ディスクイメージ→ISO→ESXiのインストーラISOイメージを選択
タイプでUSBメモリを選択
OKをクリック

unetbootin

以下のようになれば完成。
ママも安心ESXiインストーラ入りUSBメモリの出来上がり。

unetbootin01

以上

 

No tags for this post.