Monthly Archives: 1月 2013

今更ながらニキシー管時計キットを購入

ずっと欲しいと思いながらも買う機会がなく過ごしていましたが、本日偶然、秋葉原駅横のラジオセンター2Fにある山本無線e-BOX店でニキシー管時計キットを限定販売しているのを発見し思わず購入してしまいました。

小さめのダンボールに入っています。中身はTubeHobby製のNCV2.1-14かと思います。
IMG_1512[1]

ニキシー管もセットになっておりますが店内にIN-14をバラ売りしているようです。
IMG_1513[1]

組み立ててみました。
IMG_1522

先人の方々に習い丸ピンICソケットを利用し、ニキシー管を交換できるようにしてみました。
IMG_1523

PerlとSendmailとBccのメーリングリスト配信スクリプト

昨日うっかりBccとCcを間違えてしまう大失態を演じてしまったため簡易ながら不特定多数にBccでメールを一斉配信してくれるスクリプトをPerlでサクッと書いてみました。
そしてどうせ書いたのならば久々に公開して有意義に使っていただこうと思い公開します。

コマンドラインベースで動けばいいかなということで機能自体には特にこだわりは無いのですが必要のある方がおりましたらご自由にコピーしてお使いください。
※ 当スクリプトを利用するにはPerlモジュールのインストールができるレベルの知識を必要とします。

実行用スクリプト
# vi infoEmail.pl

#!/usr/bin/perl
use utf8;
use strict;
use warnings;

binmode(STDOUT, ":utf8");

require "infoEmail.pm";

#
# メールマガジン配信スクリプト
#

my $mm   = infoEmail->new();
my $mime = $mm->mailer();

print $mime->as_string;
print '*' x 50 . "\n";
print "上記の内容で配信してもよろしいですか? (y/N)\n";
print '*' x 50 . "\n";
print "> ";
my $input = <STDIN>;
chomp($input);

if($input eq 'y' || $input eq 'yes'){
        $mm->sendmail($mime);
        print "メールを配信しました\n";
}else{
        print "メールの配信をキャンセルしました\n";
}

モジュール(プログラム本体)
# vi infoEmail.pm

#!/usr/bin/perl
package infoEmail;

use utf8;
use strict;
use warnings;

use Config::Simple;
use Mail::Krohn;
use Mail::Krohn::Sendmail;
use Email::MIME;
use Email::MIME::Creator;
use Encode;

sub new {
        my $class = shift;
        my $cfg = new Config::Simple('./infoEmail.conf') or die Config::Simple->error();
        my $self = {
                from         => $cfg->param('From'),
                to           => $cfg->param('To'),
                subject      => $cfg->param('Subject'),
                x_mailer     => $cfg->param('X-Mailer'),
                bccfilepath  => $cfg->param('BccFilePath'),
                bodyfilepath => $cfg->param('BodyFilePath')
        };
        return bless $self , $class;
}

sub mailer {
        my $self     = shift;
        my $bcc      = $self->read_config($self->{ bccfilepath });
        my $body     = $self->read_config($self->{ bodyfilepath });
        my $from     = $self->{ from };
        my $to       = $self->{ to };
        my $subject  = $self->{ subject };
        my $x_mailer = $self->{ x_mailer };
        my $mime = Email::MIME->create(
                header => [
                        From       => encode('MIME-Header-ISO_2022_JP' => decode('utf-8',$from)),
                        To         => encode('MIME-Header-ISO_2022_JP' => decode('utf-8',$to)),
                        Bcc        => encode('MIME-Header-ISO_2022_JP' => decode('utf-8',$bcc)),
                        Subject    => encode('MIME-Header-ISO_2022_JP' => decode('utf-8',$subject)),
                        'X-Mailer' => decode('utf-8',$x_mailer),
                ],
                attributes => {
                        content_type => 'text/plain',
                        charset      => 'ISO-2022-JP',
                        encoding     => '7bit',
                },
                body => encode('iso-2022-jp' => decode('utf-8',$body)),
        );
        return $mime;
}

sub sendmail {
        my $self = shift;
        my $mime = shift;
        my $mailer = Mail::Krohn->new();
        $mailer->send($mime);
        return 0;
}

sub read_config {
        my $self = shift;
        my $file_path = shift;

        open(my $fh, "<", $file_path) || die("Can not open file $file_path");
        my $file_contents;
        while( my $line = readline $fh ){
                $file_contents .= $line;
        }
        chomp($file_contents);
        return $file_contents;
}

1;

設定ファイル
# vi infoEmail.conf

############################################################
# メールマガジン設定ファイル
############################################################
# 送信元
From         = "ぼっちちゃん" <めーる@あどらあ>
# 送信先
To           = "ぼっちちゃん" <めーる@あどらあ>
# 件名
Subject      = ぼっちちゃんと愉快な仲間たちめーりんぐりすと
# メーラー名
X-Mailer     = My Best Friends Mailing List
############################################################
# 送り先リストの記述されたファイル
BccFilePath  = ./infoEmail_bcc.tmp
# 本文の記述されたファイル
BodyFilePath = ./infoEmail_body.tmp
############################################################

配信用メール本文
# vi infoEmail_body.tmp

お友達100人できるかな?

=======================================
"ぼっちちゃん" <めーる@あどらあ~>
ぼっちちゃんと愉快な仲間たちめーりんぐりすと
=======================================

配信対象のアドレスリスト
# vi infoEmail_bcc.tmp

おともだち1@あどらあ, めーる2@あどらあ, めーる3@あどらあ, めーる4@あどらあ, めーる5@あどらあ

久々にPerl触ったらだいぶ忘れてました(^_^;)

参考サイト
第20回 Email::Sender:メールを送信する:モダンPerlの世界へようこそ|gihyo.jp … 技術評論社

NagiosでMySQLが異常となる

Nagios上では”Return code of 127 is out of bounds – plugin may be missing”というエラーが出ている

試しに手動実行してみる
# /usr/local/nagios/libexec/check_mysql -H localhost -u root -p ***********************
/usr/local/nagios/libexec/check_mysql: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

確認してみると”libmysqlclient.so.16″がないことが分かる
# /sbin/ldconfig -v | grep mysql
/sbin/ldconfig: Path `/usr/lib64/mysql’ given more than once
/usr/lib/mysql:
libmysqlclient.so.18 -> libmysqlclient_r.so
/usr/lib64/mysql:
libmysqlclient.so.18 -> libmysqlclient_r.so
libmysqlclient_r.so.15 -> libmysqlclient_r.so.15.0.0
libmysqlclient.so.15 -> libmysqlclient.so.15.0.0

パッケージを追加しておく
# yum install mysqlclient16

再び手動実行してみる
# /usr/local/nagios/libexec/check_mysql -H localhost -u root -p ***********************
Uptime: 12635 Threads: 1 Questions: 25334 Slow queries: 0 Opens: 44 Flush tables: 1 Open tables: 37 Queries per second avg: 2.005

ESXi5.1を623860から914609へアップデートする

必要なファイルをダウンロードしてデータストアにアップロードしておく。
なお、パッチを当てると当てていたドライバが剥がれるためもう一度当てなおさなければならない。
ドライバに漏れがあると結構、作業工程的にも精神的にも大変なことになるため十分漏れがないように注意しておく。

パッチ
VMware Store and Account

ドライバ
Adaptec – Adaptec Driver: AACRAID Driver v1.2.1-29900 for VMware Download Detail
ESXi5.1のドライバを作成してみる(intel 82579LM/82574L編) << 環境さんぷる
※ ここではESXi5.1用のNICとRAIDカードのドライバをダウンロードしているがそれぞれの環境に合わせて揃える。

対象のESXi5.1のゲストマシンをシャットダウンし、メンテナンスモードに切り替える。
SSHを使いrootでログインし下記のコマンドを入力する。

アップデート・パッチのインストール

# esxcli software vib install -d /vmfs/volumes/datastore1/ESXi510-201212001.zip

※ 場合によっては非常に時間がかかる事があるが気長に待つ。

ドライバのインストール

# esxcli software acceptance set --level=CommunitySupported
# esxcli software vib install -v /vmfs/volumes/datastore1/net-e1000e-2.1.4.x86_64.vib
# esxcli software vib install -d /vmfs/volumes/datastore1/aacraid-esxi5.1-1.2.1.29900.zip –no-sig-check
# esxcli software vib install -v /vmfs/volumes/datastore1/vmware-esxi-drivers-scsi-aacraid-510.5.2.1.29900.-1.1.5.799733.x86_64.vib –no-sig-check

※ ここではdatastore1にアップロードしているがそれぞれの環境に合わせる。

終わったら再起動し様子を見る。
クライアントのアップデートについて聞いてくるのでアップデートする。
ビルド番号が上がっていてゲストマシンも正常に認識していたらメンテナンスモードを終了し再起動をかける。

ここまでで、アップデートは完了です。

ホットバックアップの再設定
ESXi5.1をアップデートして気づいたのですが/etc/rc.localを編集しようとしたところ”Operation not permitted”と言われた。そのため、”/etc/rc.local.d/local.sh”を書き換える方法で再設定する。

# vi /etc/rc.local.d/local.sh

最下部に追記する。

# ESXi5.1 HOT Back UP
/bin/kill $(cat /var/run/crond.pid)
/bin/echo "0 17 * * 1-5 /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh \
-f /vmfs/volumes/datastore1/ghettoVCB/backup_vmlist.txt \
-g /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf \
> /vmfs/volumes/datastore1/ghettoVCB/backup_log/ghettoVCB-backup-\$(date +%s).log" \
>> /var/spool/cron/crontabs/root
/bin/crond

※ 5.1から”/bin/busybox”コマンドが消えたようなので”/bin/crond”としておく。

しかしこのままではバージョンが合わないエラーが出たりwhoamiコマンドが無いなど正常にスクリプトが動作しないようなので書き換える。

# vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh

230行付近を編集

編集前

	ESX_VERSION=$(vmware -v | awk '{print $3}')
	if [[ "${ESX_VERSION}" == "5.0.0" ]]; then
		VER=5
        elif [[ "${ESX_VERSION}" == "4.0.0" ]] || [[ "${ESX_VERSION}" == "4.1.0" ]]; then
                VER=4
        else
                ESX_VERSION=$(vmware -v | awk '{print $4}')
                if [[ "${ESX_VERSION}" == "3.5.0" ]] || [[ "${ESX_VERSION}" == "3i" ]]; then
                        VER=3
                else
                        echo "You're not running ESX(i) 3.5, 4.x, 5.x!"
                        exit 1
                fi
        fi

編集後

	ESX_VERSION=$(vmware -v | awk '{print $3}')
	if [[ "${ESX_VERSION}" == "5.0.0" ]] || [[ "${ESX_VERSION}" == "5.1.0" ]]; then
		VER=5
        elif [[ "${ESX_VERSION}" == "4.0.0" ]] || [[ "${ESX_VERSION}" == "4.1.0" ]]; then
                VER=4
        else
                ESX_VERSION=$(vmware -v | awk '{print $4}')
                if [[ "${ESX_VERSION}" == "3.5.0" ]] || [[ "${ESX_VERSION}" == "3i" ]]; then
                        VER=3
                else
                        echo "You're not running ESX(i) 3.5, 4.x, 5.x!"
                        exit 1
                fi
        fi
# vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB-restore.sh

86行付近を編集

編集前

	ESX_VERSION=$(vmware -v | awk '{print $3}')
	if [ "${ESX_VERSION}" == "5.0.0" ]; then
		VER=5
        elif [[ "${ESX_VERSION}" == "4.0.0" ]] || [[ "${ESX_VERSION}" == "4.1.0" ]]; then
                VER=4
        else
                ESX_VERSION=$(vmware -v | awk '{print $4}')
                if [[ "${ESX_VERSION}" == "3.5.0" ]] || [[ "${ESX_VERSION}" == "3i" ]]; then
                        VER=3
                else
			echo "You're not running ESX(i) 3.5, 4.x, 5.x!"
                        exit 1
                fi
        fi

編集後

	ESX_VERSION=$(vmware -v | awk '{print $3}')
	if [[ "${ESX_VERSION}" == "5.0.0" ]] || [[ "${ESX_VERSION}" == "5.1.0" ]]; then
		VER=5
        elif [[ "${ESX_VERSION}" == "4.0.0" ]] || [[ "${ESX_VERSION}" == "4.1.0" ]]; then
                VER=4
        else
                ESX_VERSION=$(vmware -v | awk '{print $4}')
                if [[ "${ESX_VERSION}" == "3.5.0" ]] || [[ "${ESX_VERSION}" == "3i" ]]; then
                        VER=3
                else
			echo "You're not running ESX(i) 3.5, 4.x, 5.x!"
                        exit 1
                fi
        fi

101行付近を編集

編集前

if [ ! $(whoami) == "root" ]; then
        logger "info" "This script needs to be executed by \"root\"!"
        echo "ERROR: This script needs to be executed by \"root\"!"
        exit 1
fi

編集後

if [ ! $(who | awk '{print $1}') == "root" ]; then
        logger "info" "This script needs to be executed by \"root\"!"
        echo "ERROR: This script needs to be executed by \"root\"!"
        exit 1
fi

動作チェックを行い、正常に動作していたら再設定完了です。

参考サイト
ESXi5.0マシンを2台作成 | SS-NET サポート
富士通 PRIMERGY TX100 S3 の ESXi5.1 838463 を 5.1 914609 (ESXi510-201212001.zip) にアップデートする。 << 環境さんぷる
VMWARE 5.1 Could not find a trusted signer
【ESXi 5.0】仮想マシンのオンラインバックアップ – OSSでLinuxサーバ構築
Modifying ghettoVCB to run on VMware ESXi 5.1

PerlでメールをBccで送信する Email::MIME + Mail::Krohn

メールをEmail::Sendを利用し送信しようとしたところ下記のように色々と怒られたため調べてみたところ
スクリプト起動時にReturn::Value::NO_CLUCKに値を入れれば良いということが分かったが実にスマートではないので代わりになるモジュールを探してみた

Return::Value is deprecated at /usr/lib/perl5/site_perl/5.8.8/Return/Value.pm line 13
        require Return/Value.pm called at /usr/lib/perl5/site_perl/5.8.8/Email/Send.pm line 11
        Email::Send::BEGIN() called at /usr/lib/perl5/site_perl/5.8.8/Return/Value.pm line 0
        eval {...} called at /usr/lib/perl5/site_perl/5.8.8/Return/Value.pm line 0
        require Email/Send.pm called at infoEmail.pl line 6
        main::BEGIN() called at /usr/lib/perl5/site_perl/5.8.8/Return/Value.pm line 0
        eval {...} called at /usr/lib/perl5/site_perl/5.8.8/Return/Value.pm line 0

必要なモジュールをインストールする
# cpan install parent
# cpan install Class::Accessor::Lite
# cpan install Mail::Krohn

#!/usr/bin/perl
use strict;
use warnings;

use utf8;
use Mail::Krohn;
use Mail::Krohn::Sendmail;
use Email::MIME;
use Email::MIME::Creator;
use Encode;

MAIN:{
    my $mime = Email::MIME->create(
        header => [
            From => 'そうしんもとめーる@あどれす',
            To   => 'そうしんもとめーる@あどれす',
            Bcc  => 'そうしんさきめーる@あどれす',
            Subject => Encode::encode( 'MIME-Header-ISO_2022_JP', 'テストメールです' ),
            'X-Mailer' => 'TestMailer',
        ],
        attributes => {
            content_type => 'text/plain',
            charset      => 'iso-2022-jp',
            encoding     => '7bit',
        },
        parts => [
                Encode::encode( 'iso-2022-jp', 'でばっぐおいしー!!' ),
        ],
    );

    my $mailer = Mail::Krohn->new();
    $mailer->send($mime);
}

参考サイト
Email::MIME::CreatorとEmail::Sendでメール送信
[Perl]Email::SendつかったらReturn::Valueにdeprecatedだと怒られた

CentOS5.7 Email::Send インストール

# cpan install Perl::OSType <- make testでエラーが起きる # yum --enablerepo=epel install perl-Perl-OSType # cpan install Module::Build # cpan install Module::Pluggable # cpan install Email::Send