FreeBSDでminiUpdateを動かす 


2004年05月20日

DiCEのLinux版をFreeBSDで動作させることが出来なかったので、Linux/UNIX用に作られたminiUpdateを使うことにします。
miniUpdateは、Perlスクリプトで動作するので、Perl環境を整えてやる必要があります。
ホントに俺に出来るのかよ〜(;^_^A

まずはminiUpdateをゲットして解凍する

とりあえずminiDNSのサイトに行き、ダウンロードページからminiUpdateをゲットして来ましょう。Windows端末でも良いです。FreeBSDサーバを直接操作してwget等で取りに行ける方はそうしてもかまわないと思いますが、私はWindows端末からFreeBSDサーバへFTP転送しています。

転送が終わったらsuになって、root権限を使える様にして下さい。

私が手に入れたminiUpdateは、miniUpdate-0.5.tar.gzという0.5というバージョンの付いたファイル。これを/usr/local/binに移動してアーカイブを解凍します。

# mv miniUpdate-0.5.tar.gz /usr/local/bin
# cd /usr/local/bin
# tar zxvf miniUpdate-0.5.tar.gz

これで、miniUpdate-0.5.plというファイルと、miniUpdate.confが解凍されます。元のファイルはもう要らないので、削除してしまっても良いでしょう。

# rm miniUpdate-0.5.tar.gz

miniUpdate.confを/etcに移動して設定をする

miniUpdate.confを/etcに移動します

# mv miniUpdate.conf /etc

miniUpdate.confをエディタで開いて必要な設定を施します。
# ee /etc/miniUpadate.conf

#
# this is a sample configuration file for miniUpdate v0.5
#
interface = fxp0  ←FreeBSDのイーサネットを指定します
login_id = sasapurin  ←miniDNSのアカウントを記述します
password = x29rRzmPq  ←もちろん嘘のパスワードです!ハックしようとしても無駄です(笑
hostname = sasapurin.com  ←独自ドメインの場合はドメインを指定します

#
# If your public IP is eaten by the router(e.g. your machine only get 192.168.x.
# please set $no_public_ip to true and $report_url to the URL of an IP address
# reporting site. However, you should get consent of the reporting site before
# using it.
#
no_public_ip = true  ←自分のネットワーク環境に応じてtrueかfalseを設定します
report_url = http://checkip.dyndns.org/  ←自分のグローバルIPを診断するサイトを指定します

上記の様な手順でminiUpdate.confを設定し、変更内容を保存します。

とりあえずminiUpdateを起動してみる

多分、これだけでは動かないと思うのですが、とりあえずminiUpdateの起動を試みてみます。
私の場合は、Perl環境が整っていなかったので、エラーとなりました。

# perl /usr/local/bin/miniUpdate-0.5.pl

もしくは

# /usr/local/bin/perl /usr/local/bin/miniUpdate-0.5.pl

これでperlを使ってminiUpdate-0.5.plを動作させようとします。多分下記の様なエラーが返ってくると思いますが、Portsから必要なPerl環境をインストールしてやればエラーが出なくなりますので、安心して下さい。

 *** FATAL ERROR *** module 'Digest::MD5

BEGIN failed--compilation aborted.at /usr/local/bin/miniUpdate-0.5.pl line 30.

上記の様なエラーが返ってくると思います。
これは、miniUpdate-0.5.plを実行する為に必要なモジュールがインストールされていない為に出るエラーメッセージです。私はFreeBSDを最小インストールしているので、足りないモジュールが有っても当然なのかも知れません。エラーメッセージに従って、必要なモジュールをインストールしてやります。

私の環境で足りないと言われたモジュールは下記の3つです。
それぞれ環境によっては、足りないモジュールが違うかも知れませんので、必要に応じてモジュール(Ports)をインストールしてやって下さい。
Portsのインストール方法は割愛します。ご存知ですよね?

必要と言われたモジュール

インストールするべきFreeBSDのPorts名
Proc::Daemon devel/p5-Proc-Daemon
Digest::MD5 security/p5-MD5
LWP::Simple www/p5-Libwww

LWP::Simpleについては、なぜp5-Libwwwなのかよく分かりませんが、サーチエンジンで「FreeBSD」と「LWP」という単語検索して引っかかった、高橋 誠さんのHPを参考にさせていただきました。ありがとうございました。

引用文: FreeBSDの標準のPerlではLWPが入っていないので、PortsからP5-Libwww-5.75をインストールしました。

もう一度miniUpdate-0.5.plを起動してみる

Perl環境が整えば、エラーは出なくなるハズです。エラーが出なくなったら正常動作を確認します。

まずは、topコマンドを入力して、Perlの動作状況を見てみます。

# /usr/local/bin/perl /usr/local/bin/miniUpdate-0.5.pl
# top

last pid: 6483; load averages: 0.00, 0.00, 0.00 up 2+13:34:09 20:23:31
47 processes: 1 running, 46 sleeping
CPU states: 0.0% user, 0.0% nice, 0.0% system, 0.5% interrupt, 99.5% idle
Mem: 18M Active, 13M Inact, 17M Wired, 4988K Cache, 13M Buf, 1236K Free
Swap: 104M Total, 8120K Used, 97M Free, 7% Inuse

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
155 root 10 0  4280K 2168K nanslp 1:04 0.00% 0.00% perl ←ここで動いている
111 root 2 0  3036K 784K select 0:21 0.00% 0.00% sendmail
741 root 2 0  1328K 380K select 0:21 0.00% 0.00% ntpd
325 root 2 0  3308K 1076K select 0:13 0.00% 0.00% httpd
431 www 2 0  3948K 1664K accept 0:06 0.00% 0.00% httpd
329 www 2 0  4032K 1844K accept 0:06 0.00% 0.00% httpd
326 www 2 0  3980K 1644K accept 0:05 0.00% 0.00% httpd
345 www 2 0  3904K 1644K accept 0:05 0.00% 0.00% httpd
346 www 2 0  3980K 1684K accept 0:05 0.00% 0.00% httpd
327 www 2 0  3916K 1744K accept 0:05 0.00% 0.00% httpd
330 www 2 0  3864K 1456K accept 0:05 0.00% 0.00% httpd
447 www 2 0  3872K 1680K accept 0:05 0.00% 0.00% httpd
328 www 2 0  4008K 1628K accept 0:05 0.00% 0.00% httpd
344 www 2 0  3948K 1672K accept 0:05 0.00% 0.00% httpd
355 root 10 0  3828K 2268K nanslp 0:04 0.00% 0.00% perl
104 root 10 0  1024K 380K nanslp 0:03 0.00% 0.00% cron
www#

次にpsコマンドで確認してみます。
suで起動させたminiUpdateはrootで起動されていると思うので、ps -U rootで指定してみました。
他の方法でも確認は出来ると思いますので、各々好みの方法でご確認下さい。

# ps -U root | grep miniUpdate

3558 ?? Is 0:03.64 perl /usr/local/bin/miniUpdate-0.5.pl

上記の様にプロセスが立ち上がっていることを確認出来たら、動作はひとまずOKです。

ログを見てみる

正常にminiUpdateが動いているか、ログを見て確認してみます。

# ee /var/log/miniUpdate.log

[2004-05-20 04:34:34]
[2004-05-20 04:34:34]
[2004-05-20 04:34:34] *** miniUpdate 0.5 Started ***
[2004-05-20 04:34:37] sasapurin.com mapped to 220.109.131.17
[2004-05-20 04:39:40] sasapurin.com mapped to 219.164.85.31

2004-05-20 04:34:34に、miniUpdate 0.5がスタートしたと記録されています。
そしてsasapurin.com220.109.131.17にマップされたということが記録されています。
このマップされたIPアドレスが、ネットワークのグローバルアドレスと一致していれば、まずは動作OKでしょう。
我が家の場合は、ブロードバンドルーターを使っているので、ルーターのWAN側のIPアドレスと一致していることを確認しました。

2004-05-20 04:39:40に、ルーターのWAN側のIPアドレスが変更になりました(ADSL環境なので故意に接続を切って、再接続してみました。)
どうやらこれで正常に動いていると判断してよさそうです。
miniDNSをminiUpdate-0.5で動作させることに成功!(*^。^*)/

少しだけminiUpdate-0.5.plをハックしてみる

miniUpdate-0.5を少しでも理解しておきたくて、miniUpdate-0.5.plをエディタで開いてみました。
Perlスクリプトはテキストファイルなので、エディタで開いて解析することが出来るのがちょっと嬉しいですね。 下記はそのスクリプトの一部分です。

# ee /usr/local/bin/miniUpdate-0.5.pl

################################################
#
# Setup constants and variables

# setup defaults
$log_file = "/var/log/miniUpdate.log";
$lock_file = "/var/run/miniUpdate.pid";
$ifconfig = "/sbin/ifconfig";
$no_public_ip = '0';

# setup constants / vars
$server_addr = "update.minidns.net";
$server_port = "9120";
$version = "0.5";
$support_version = "0.8.1";
$ctx = Digest::MD5->new;
$last_ip = "";

ログファイルの所在:/var/log/miniUpdate.log
ロックファイルの所在:/var/run/miniUpdate.pid

この2つを押さえておけば大丈夫でしょう。
両方ともFreeBSDのしきたりに合っていたので何となく嬉しいです。ログもロックファイルも/varディレクトリに無いとスッキリしませんからね。
もしLinux等をお使いで、自分の環境に合わないのであれば、ここの記述を変更してみると良いかも知れませんね(無責任モード)。

FreeBSD起動時に自動起動させる(/usr/local/etc/rc.d/への登録)

さて、ここまで出来たら後は自動起動させるためのスクリプトを書いて、/usr/local/etc/rc.d/へ登録して置くだけです。

しかし待てよ〜、Perlスクリプトを起動させるにはどうすれば良いんだろう?
色々と試行錯誤した結果、下記の様にすると自動起動させられることが分かりました。

# touch /usr/local/etc/rc.d/miniUpdate.sh
# ee /usr/local/etc/rc.d/miniUpdata.sh

#!/bin/sh
/usr/local/bin/perl /usr/local/bin/miniUpdate-0.5.pl  ←perlのPATHをフルパスで指定するのがミソ!

下記の様にするとなぜか動きませんでした。(どうしてだろう?.....)

#!/bin/sh
perl /usr/local/bin/miniUpdate-0.5.pl  ←perlのPATHを省略したらダメみたい

以上で安心してsasapurin.comという独自ドメインを、miniDNSというフリーのダイナミックDNSサービスで運用することが出来るようになりました。
DiCE Linux版での実験と言い、ここまで漕ぎ着けるのにずいぶん時間がかかったぁ〜


Amazon.co.jp アソシエイト

専門書籍はこちから購入することが出来ます。良かったら探してみて下さい。