サーバ構築運用の最近のブログ記事

2017年5月3日(水)

最近、@niftyのDDNS更新スクリプトがエラーを出力していたので原因を調査してみました。
その結果、@nifty側でDDNSのURLやアクセス方法を変更していることがわかり、これに合わせて更新スクリプトを修正対応しました。

以下が最新版となります。

#!/usr/bin/perl -w
use strict;
use Encode;

#-------------------------------------------------------------------------------#
# 2009.09.26																	#
# @nifty DDNSサービスのIPアドレス更新を行うスクリプト							#
#																				#
# このスクリプトには@niftyのユーザIDとパスワードをテキストで埋め込むため、スク	#
# リプトファイルのパーミッションモードは0700としておく方が良い。				#
# このスクリプトを定期的に実行するためにクローンに登録する。なお、IPアドレスの	#
# 更新が無い場合でも1週間(期間は以下の変数でカスタマイズ可能)に一度は更新処理	#
# をする(スクリプトが自動で判断して実行)。										#
# crontabの例)																	#
#	0,10,20,30,40,50 * * * * hogehoge /home/umihiko/bin/niftyddns.pl			#
#																				#
# 2009.09.26 初版																#
# 2010.01.27 @nifty DDNSのWebにアクセスできない場合の処理追加					#
# 2014.04.28 $current_ipにアドレスをgetできなかった場合に$current_ipを初期化	#
# する処理追加																	#
# 2017.05.03 @nifty DDNSのWebのアドレスとURLエンコードの内容が@nifty側で変更	#
# されていたため、この変更に対応												#
#																				#
#-------------------------------------------------------------------------------#

#-------------------------------------------------------------------------------#
# グローバル変数
## ユーザ毎にカスタマイズが必要な変数
my $niftyid 	= "TAE03353";				# @niftyのユーザID
my $niftypasswd = "8VEEDQ3T";				# @niftyのパスワード
my $basedir 	= "/home/umihiko/bin";		# このスクリプトをインストールするディレクトリ
my $datadir 	= "$basedir/atniftyddns";	# このスクリプトで使うファイル(IPアドレスの保存ファイル、wgetの出力結果等)を保存するディレクトリ
my $addrfile	= "$datadir/prev_ip.txt";	# 前回のIPアドレスを保存するファイル名
my $updatetime	= "$datadir/update.txt";	# 前回、IPアドレス更新を実行した時間(time関数値)を保存するファイル名
my $resultfile	= "$datadir/result.txt";	# スクリプトの結果(IPアドレスに変更が無かったか、あるいはIPアドレス更新処理をしたか)を記録するファイル名
my $interval	= 7;						# IPアドレス変更が無い場合でもこの変数で指定された日にち(デフォルト7日)が経過したら更新処理を行う

## カスタマイズ不要な変数
my $atniftyddns = "https://domain.nifty.com/domain/DdnsIpChangeConfirm.do"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $conf_ipaddr = 'DDNS_CHANGE_IP=IP%95%CF%8DX%83y%81%5B%83W%82%D6'; 		# 今後、@nifty DDNSサービスで変更がなければこのままでOK (2017.05.03)
my $change_atniftyddns = "https://domain.nifty.com/cp/ddns/DdnsIpChangeAdd.do"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK (2017.05.03)
# my $update_ip	= "DDNS_UPDATE_IP_ADDRESS"; # 今後、@nifty DDNSサービスで変更がなければこのままでOK
my $update_ip	= 'change_type=ip'; # 今後、@nifty DDNSサービスで変更がなければこのままでOK (2017.05.03)
my $wget;
my $current_ip = ''; 						# 現在のIPアドレス (2017.05.03)
my $previous_ip;							# 前回のIPアドレス
my $change = 1; 							# 前回のIPアドレスと現在のIPアドレスが一致していない場合、または、初めてこのスクリプトを実行する場合に1にセット
my $updated;								# $updatetimeファイルに保存されているIPアドレス更新実行時間
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# スクリプトで使うファイルの保存ディレクトリが無い場合にディレクトリを作成
if( !-d $datadir ) {
	mkdir( $datadir, 0755 ) || die "ディレクトリ生成失敗 : $!";
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# @nifty DDNSのIPアドレス更新ページをwgetでアクセスし、現在のIPアドレスを確認
$wget = `wget --secure-protocol=auto -O - -q $atniftyddns?$conf_ipaddr`;
$wget =~/[0-9]+(\.[0-9]+){3}/;
$current_ip = $&;
# if ( $current_ip eq '' ) { $current_ip = '0.0.0.0'; }
# print "current_ip = $current_ip\n";
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# 前回のIPアドレスと現在のIPアドレスが一致するか比較し、一致していない場合には
# IPアドレスが変更したとして$changeフラグをセット

## 前回のIPアドレスを保存しているファイルが存在している場合は現在のIPアドレスと
## 一致するか確認
if ( -e $addrfile ) {
	open( FH, "<$addrfile" );
	$previous_ip = ;
	close( FH );
	if ( $current_ip eq $previous_ip ) {
		$change = 0;
	}
	elsif ( $current_ip eq "" ) { # @nifty DDNSにアクセスできない場合
		if ( -e $resultfile ) {
			unlink( $resultfile );
		}
		open( FH, ">$resultfile" );
		print FH '@nifty DDNS Webページにアクセスできませんでした。' . "\n";
		close( FH );
		exit;
	}
	else {
		unlink $addrfile;
		open( FH, ">addrfile" );
		print FH $current_ip;
		close( FH );
	}
}
## 前回のIPアドレスを保存しているファイルが存在しない場合は現在のIPアドレスを
## 保存
else {
	open( FH, ">$addrfile" );
	print FH $current_ip;
	close( FH );
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
# 最終更新時から$intervalで指定した日数経過している場合は、IPアドレスに変更が
# なくても更新処理を実行する($changeフラグをセットする)
if ( -e $updatetime ) {
	open( FH, "<$updatetime" );
	$updated = ;
	close( FH );
	if ( $updated <= time - ( $interval * 24 * 3600 ) ) {
		$change = 1;
		unlink $updatetime;
		open( FH, ">$updatetime" );
		print FH time;
		close FH;
	}
}
else {
	$change = 1;
	open( FH, ">$updatetime" );
	print FH time;
	close FH;
}
#------------------------------------------------------------------------------#
# $changeフラグがセットしてある場合、IPアドレス更新を実行し、IPアドレス保存ファ
# イルに保存しているIPアドレスを現在のIPアドレスに更新
if ( $change ) {
	if ( -e $resultfile ) {
		unlink( $resultfile );
	}
	$wget = `wget --secure-protocol=auto -O - -q --http-user=$niftyid --http-password=$niftypasswd $atniftyddns?$update_ip`;
	$wget =~/[0-9]+(\.[0-9]+){3}/;
	$current_ip = $&;
	my $remain = $';
	$remain =~/
/; $remain = $`; Encode::from_to($remain, 'shiftjis', 'utf-8'); open( FH, ">$resultfile" ); print FH $current_ip . $remain . "\n"; close( FH ); } else { unlink( $resultfile ); open( FH, ">$resultfile" ); print FH "IPアドレス($current_ip)は変更されていません。\n"; close( FH ); }

2014年1月12日( 日)

Movable Type 6.01へアップグレードしました。

2013年5月19日(日)

Debianのメジャーバージョンがアップしたらしく、先週、自宅サーバのOSが自動アップグレードで失敗していたので手動でアップグレードしたもののGNOMEが立ち上がらないとかメールサーバが動かなくなっていたりしたので、思い切って新バージョン(Wheezy)を一からインストールしてみました。

MT4i 3.1 alpha1をインストールしました。

Movable Type 5.0 RC1から正式版にアップデートしました。

Movable Type 5.0beta3からRC1にアップデートしました。

いつも忘れるのがスタティックディレクトリ(mt-static)内のsupportディレクトリのパーミッションを0777にしないままmt.cgiにアクセスしてサインイン後に怒られるというものです。

次は忘れないようにしたいところです。

Debian5.0+plone3.1.3+zope2.10.6のシステム構成において、ploneのサイト設定でタイトルに日本語を使うと文字化けしてしまいます。ZMIからploneサイトのPropertiesを選択してタイトルに日本語を入力しても文字化けしませんが(これは、ココに記載されている手順を実行したため)、plone側から行うと文字化けしてしまうというものです。

ネットで調べてみると、解決方法がありました。
早速使わせてもらい、無事解決。

Movable Type 5.0beta1からbeta3にアップグレードしました。

アップグレード後、デフォルトのクラシックテーマに変わりますが、ヘッダの画像が表示されません。テンプレートをカスタマイズ(無料テンプレートを適用)していたせいかな。

とりあえず、一旦テンプレートを変更してもう一度もとのデフォルトに戻すとOKです。

Apacheのログ解析ツールとして、analog + DNSTranとvisitorsを導入してみました。

これはその時の備忘録です。

サーバOSはDebian 5.0なのでaptitudeを利用して analog 2.6.0-17、visitors0.7-4、Graphviz 2.20.2-3をインストールします。
DNSTranはDebianパッケージとして提供されていないため、このサイトからLinux用のバイナリをダウンロードして /usr/local/bin にインストールします(tarボールを解凍するだけ)。この時点での最新版は1.5.2でした。

次に設定および導入です。

まずは /etc/analog.cfg の設定です。以下のようにしました。

 

LOGFILE /var/log/apache2/access.log*
OUTFILE /home/www/log/analog/index.html
HOSTNAME www.uminoie.mydns.jp
LANGFILE /usr/share/analog/lang/jpu.lng
DESCFILE /usr/share/analog/lang/jpudesc.txt
DOMAINSFILE /usr/share/analog/lang/jpudom.tab
DNS READ
DNSFILE /usr/local/bin/dnstran1.5.2/dnscache
LANGUAGE JAPANESE-UTF
SEARCHCHARCONVERT ON

YEARLY				ON
QUARTERLY			OFF
MONTHLY			ON
WEEKLY				ON
DAILYREP			ON
DAILYSUM			ON
HOURLYREP			ON
HOURLYSUM			ON
WEEKHOUR			OFF
QUARTERREP		OFF
QUARTERSUM		OFF
FIVEREP				OFF
FIVESUM				OFF
HOST				ON
REDIRHOST			OFF
FAILHOST			OFF
ORGANISATION		ON
DOMAIN				ON
REQUEST			ON
DIRECTORY			ON
FILETYPE			ON
SIZE				ON
PROCTIME			ON
REDIR				ON
FAILURE				ON
REFERRER			ON
REFSITE				ON
SEARCHQUERY		ON
SEARCHWORD		ON
INTSEARCHQUERY	ON
INTSEARCHWORD		ON
REDIRREF			ON
FAILREF				OFF
FULLBROWSER		ON
BROWSER			OFF
OSREP				ON
VHOST				ON
REDIRVHOST			OFF
REDIRVHOST			OFF
USER				ON
REDIRVHOST			OFF
FAILUSER			OFF
STATUS				ON

REQLINKINCLUDE pages
REFLINKINCLUDE *
REDIRREFLINKINCLUDE *
FAILREFLINKINCLUDE *
SUBBROW */*
SUBTYPE *.gz,*.Z

SEARCHENGINE https://*google.*/* q,as_q,as_epq,as_oq
SEARCHENGINE https://*altavista.*/* q
SEARCHENGINE https://*yahoo.*/* p
SEARCHENGINE https://*lycos.*/* query,wfq
SEARCHENGINE https://*aol.*/* query
SEARCHENGINE https://*excite.*/* search
SEARCHENGINE https://*go2net.*/* general
SEARCHENGINE https://*metacrawler.*/* general
SEARCHENGINE https://*msn.*/* q,MT
SEARCHENGINE https://*netscape.*/* search
SEARCHENGINE https://*looksmart.*/* key
SEARCHENGINE https://*webcrawler.*/* qkw,search,searchText
SEARCHENGINE https://*overture.*/* Keywords
SEARCHENGINE https://*teoma.*/* q
SEARCHENGINE https://*infospace.*/* qkw
SEARCHENGINE https://*alltheweb.*/* q
SEARCHENGINE https://*dogpile.*/* q
SEARCHENGINE https://*ask.*/* q,ask
SEARCHENGINE https://*alltheweb.*/* query
SEARCHENGINE https://*northernlight.*/* qr
SEARCHENGINE https://*nlsearch.*/* qr
SEARCHENGINE https://*dmoz.*/* search
SEARCHENGINE https://*/netfind* query
SEARCHENGINE https://*/pursuit query
ROBOTINCLUDE REGEXPI:robot
ROBOTINCLUDE REGEXPI:spider
ROBOTINCLUDE REGEXPI:crawler
ROBOTINCLUDE Googlebot*
ROBOTINCLUDE msnbot*
ROBOTINCLUDE Infoseek*
ROBOTINCLUDE Scooter*
ROBOTINCLUDE *Slurp*
ROBOTINCLUDE *Validator*
ROBOTINCLUDE Ultraseek*
TYPEALIAS .html    ".html [Hypertext Markup Language]"
TYPEALIAS .htm     ".htm  [Hypertext Markup Language]"
TYPEALIAS .shtml   ".shtml [Server-parsed HTML]"
TYPEALIAS .ps      ".ps   [PostScript]"
TYPEALIAS .gz      ".gz   [Gzip compressed files]"
TYPEALIAS .tar.gz  ".tar.gz [Compressed archives]"
TYPEALIAS .jpg     ".jpg  [JPEG graphics]"
TYPEALIAS .jpeg    ".jpeg [JPEG graphics]"
TYPEALIAS .gif     ".gif  [GIF graphics]"
TYPEALIAS .png     ".png  [PNG graphics]"
TYPEALIAS .txt     ".txt  [Plain text]"
TYPEALIAS .cgi     ".cgi  [CGI scripts]"
TYPEALIAS .pl      ".pl   [Perl scripts]"
TYPEALIAS .css     ".css  [Cascading Style Sheets]"
TYPEALIAS .class   ".class [Java class files]"
TYPEALIAS .pdf     ".pdf  [Adobe Portable Document Format]"
TYPEALIAS .zip     ".zip  [Zip archives]"
TYPEALIAS .hqx     ".hqx  [Macintosh BinHex files]"
TYPEALIAS .exe     ".exe  [Executables]"
TYPEALIAS .wav     ".wav  [WAV sound files]"
TYPEALIAS .avi     ".avi  [AVI movies]"
TYPEALIAS .arc     ".arc  [Compressed archives]"
TYPEALIAS .mid     ".mid  [MIDI sound files]"
TYPEALIAS .mp3     ".mp3  [MP3 sound files]"
TYPEALIAS .ogg     ".ogg  [OGG sound files]"
TYPEALIAS .doc     ".doc  [Microsoft Word document]"
TYPEALIAS .rtf     ".rtf  [Rich Text Format]"
TYPEALIAS .mov     ".mov  [Quick Time movie]"
TYPEALIAS .mpg     ".mpg  [MPEG movie]"
TYPEALIAS .mpeg    ".mpeg [MPEG movie]"
TYPEALIAS .asp     ".asp  [Active Server Pages]"
TYPEALIAS .jsp     ".jsp  [Java Server Pages]"
TYPEALIAS .cfm     ".cfm  [Cold Fusion]"
TYPEALIAS .php     ".php  [PHP]"
TYPEALIAS .js      ".js   [JavaScript code]"

/home/wwwがドキュメントルートであるとしています。
次にanalogのログ解析結果で出力されるHTML文書内のイメージファイルの格納ディレクトリをapacheの設定ファイルでaliasとして追加します。追加するファイルは /etc/apache2/sites-enabed/000-default のバーチャルホストの内部で以下の記述です。

 

    alias /analog "/usr/share/analog/images"
    <directory "/usr/share/analog/images">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from all
    </directory>

 

今度はvisitorsとDNSTranです。これらは設定ファイルが無くコマンドラインでの指定になるのでvistors.shというシェルスクリプトを以下のように作成します。

 

#!/bin/sh
/usr/bin/visitors -A -m 30 /var/log/apache2/access.log -o html > /home/www/log/visitors/index.html

 

シェルスクリプトではなく直接コマンドを/etc/crontab等に記述しても良いのですが、標準エラー出力を/deb/nullにリダイレクトできない(リダイレクトすると出力ファイルの中身も一緒にリダイレクトされて空のindex.htmlができてしまった)ため、いったんシェルスクリプトに処理を記入してcronではこのスクリプトの出力を/dev/nullにリダイレクトするようにしました。cronでの記述は以下です。

0 * * * * root /usr/local/bin/visitors.sh > /dev/null 2>&1

 

DNSTranも同様にシェルスクリプトを作成します。

 

#!/bin/sh
cd /usr/local/bin/dnstran1.5.2
./dnstran /var/log/apache2/access.log > /dev/null 2>&1
rm /var/log/apache2/access.log.gz

このスクリプトもcronに登録します。

 

55 * * * * root /usr/local/bin/dnstran1.5.2/dnstran.sh > /dev/null 2>&1

 

参考にしたサイトを以下に示します。情報提供ありがとうございます。

[analog関連]

https://www.skucky.com/inst_analog.html
https://www.miloweb.net/analog.html

[DNSTran関連]

https://nekhet.ddo.jp/item/877
https://www.summary.net/soft/dnstran.html

[visitors関連]

https://gigazine.net/index.php?/news/comments/20070305_visitors/
https://www.uetyi.mydns.jp/wordpress/linux-server/entry-173.html

Movable Type 5.0beta1からbeta2にアップグレードしました。

ところが、「Powered by」ウィジェットのmtバージョンがb1のままでb2に変更されません。上手くアップグレードができていないのか、ベータ版だからなのかは不明。とりあえず運用には影響なさそうなので原因調査は今のところ見送ることとしました。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちサーバ構築運用カテゴリに属しているものが含まれています。

前のカテゴリはメモです。

次のカテゴリは旅行です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2020年5月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

ショッピング(ナチュラム)