ずっと欲しいと思いながらも買う機会がなく過ごしていましたが、本日偶然、秋葉原駅横のラジオセンター2Fにある山本無線e-BOX店でニキシー管時計キットを限定販売しているのを発見し思わず購入してしまいました。
小さめのダンボールに入っています。中身はTubeHobby製のNCV2.1-14かと思います。
![IMG_1512[1]](https://www.orsx.net/wp-content/uploads/2013/01/IMG_15121-300x225.jpg)
ずっと欲しいと思いながらも買う機会がなく過ごしていましたが、本日偶然、秋葉原駅横のラジオセンター2Fにある山本無線e-BOX店でニキシー管時計キットを限定販売しているのを発見し思わず購入してしまいました。
小さめのダンボールに入っています。中身はTubeHobby製のNCV2.1-14かと思います。
![IMG_1512[1]](https://www.orsx.net/wp-content/uploads/2013/01/IMG_15121-300x225.jpg)
昨日うっかり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上では”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
必要なファイルをダウンロードしてデータストアにアップロードしておく。
なお、パッチを当てると当てていたドライバが剥がれるためもう一度当てなおさなければならない。
ドライバに漏れがあると結構、作業工程的にも精神的にも大変なことになるため十分漏れがないように注意しておく。
ドライバ
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
メールを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だと怒られた
# 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
最近のコメント