HP ProLiant ML110 G7 ESXi5.1 HP Smartアレイ P212

以前、MegaRAID SAS 9260-4iを搭載しRAID1でベンチマークをとったところ思ったほど書き込み速度が出ないことが分かったため、ML110 G7でサポートされているHP Smartアレイ P212を搭載してみた。

前回のMegaRAID SAS 9260-4iと同様にドライバのインストールなしでESXi5で認識し問題なく動作することができるが、VMware vSphere ClientでRAIDカードのステータス情報を確認することができないため下記の作業を行った。

当然であるが、これらの作業はESXi5がメンテナンスモードに切り替わっている事が前提で行う。
パッチファイルのアップロード先は”/vmfs/volumes/datastore1/drivers/”とする。

ESXi5に同封されていたhpsaのアップデート
この作業を行わなくてもVMware vSphere Client上でRAIDカードのステータス情報を表示させることは可能であるはずだが今回ついでに行った。
HP公式サイトからhpsa-500-5.0.0-1189498.zipをダウンロードし展開後、中に含まれていたhpsa-500-5.0.0-offline_bundle-1189498.zipをESXi5のデータストアにアップロードする。

SSHでESXi5に接続し、下記のコマンドを実行する。

# esxcli software vib list | grep hpsa # 現在のドライバのバージョン確認を行う場合は実行
# esxcli software acceptance set --level=CommunitySupported
# esxcli software vib update -d /vmfs/volumes/datastore1/drivers/hpsa-500-5.0.0-offline_bundle-1189498.zip

hp-esxi5.0uX-bundleのインストール
HP公式サイトからhp-esxi5.0uX-bundle-1.4.5-3.zipをダウンロードしESXi5のデータストアにアップロードする。

SSHでESXi5に接続し、下記のコマンドを実行する。

# esxcli software acceptance set --level=CommunitySupported
# esxcli software vib install -d /vmfs/volumes/datastore1/drivers/hp-esxi5.0uX-bundle-1.4.5-3.zip

これらの作業により再起動後にVMware vSphere Client上でRAIDカードのステータス情報を確認できるようになる。
WS000004

ベンチマーク(RAID1構築・256MBキャッシュ+BBWC)結果を見ると比較的バランスよく速度が出ていることがわかる。
HDDベンチマーク

余談であるが、Smartアレイの設定(ORCA)ではディスクを2台認識させてRAID1の構築を行おうとした場合、RAID1という選択項目はない。この場合、RAID1+0を選択することでRAID1を構築するようである。
そもそも、RAID1+0や0+1はディスク4台以上からであり2台では構築できない。

参考サイト
べっ、別に・・・あんたの(以下略) | ESX/ESXi へのパッチのインストール
Using vCenter Update Manager for HP ESXi installations | Erik Bussink
How to monitor RAID status on N54L? – HP Enterprise Business Community

HP ProLiant ML110 G7 ESXi5.1 SATAハードディスクで異常な書き込み速度低下 解決方法とベンチマーク

HP ProLiant ML110 G7でESXi5を稼働させてからゲストマシンをバックアップした際、移行前の物理マシンは長くても1時間から2時間ほどで作業が完了していたのに10時間以上かかるようになったため調べてみました

テスト環境
マシン:HP ProLiant ML110 G7
ハードディスク:WD10EFRX
ポート:光学ドライブが接続されているSATAポートの下にある予備のSATAポート
ホストOS:ESXi5.1
ゲストOS:Windows XP

BIOS設定

[Advanced Options] -> [SATA Controller Options] -> [Embedded SATA Configuration]   [Enable SATA AHCI Support]

HDDベンチマーク
ネットで言われているように恐ろしく書き込み速度が遅いです

BIOS設定

[Advanced Options] -> [SATA Controller Options] -> [Embedded SATA Configuration]   [Enable SATA AHCI Support]
[Advanced Options] -> [SATA Controller Options] -> [Drive Write Cache]   [Enabled]

HDDベンチマーク2
ディスクキャッシュを有効化すると目を疑うほど書き込み速度が改善されます

繰り返しますが、mini SASポートではなく光学ドライブ用のSATAポートでこの変化がありました
勿論、mini SASポートに接続したディスクに対しても同程度の性能向上を確認いたしました

よってコントローラ自体は同じなようです

結構ネットを探しまわってもこの事に触れているサイトは見当たらなかったので誰かの役に立てばと思います

参考サイト
[VMサーバー統合]ESXiのディスクアクセスが遅い

HP ProLiant ML110 G7 ESXi5.1 MegaRAID SAS 9260-4i

これらをインストールしなくてもMegaRAID SAS 9260-4iはESXi5上で問題なくRAIDカードとして利用できますがアレイの状態が確認できないと不便なのでインストールしてみます
公式サイト(MegaRAID SAS 9260 4i)からLatest LSISAS2108/2208 Certified SMIS ProviderとMegaCLI 5.5 P1をダウンロードしてきます

※ 下記解説ではダウンロードしたファイル群はdatastore1のdriversディレクトリの中に設置しているものとします

Latest LSISAS2108/2208 Certified SMIS Providerのインストール

# esxcli software acceptance set --level=CommunitySupported
# esxcli software vib install -d /vmfs/volumes/datastore1/drivers/VMW-ESX-5.0.0-lsiprovider-500.04.V0.38-0006-offline_bundle-1154845.zip

成功すると次のようにステータスをvSphere Clientから確認できるようになります
WS000002

MegaCLI 5.5 P1のインストール

# esxcli software acceptance set --level=CommunitySupported
# mkdir MegaCLI
# mv 8.07.07_MegaCLI.zip MegaCLI
# cd MegaCLI
# unzip 8.07.07_MegaCLI.zip
# esxcli software vib install -v /vmfs/volumes/datastore1/drivers/MegaCLI/VmwareMN/vmware-esx-MegaCli-8.07.07.vib --no-sig-check

成功すると/opt/lsi/MegaCLI/の中にMegaCliコマンドと共有ライブラリlibstorelib.soが作成されています
MegaCliコマンドを使用することでRAIDカードの情報の表示や設定が行えます

しかし、これだけ書いておいて言うのもなんですが当環境(BBUなし/RAID1)ではESXi5上のゲストマシンで書き込みに対してパフォーマンス低下を確認しました・・・
ファームウエアの問題なのか相性問題なのかはっきりしていませんがこれらの組み合わせはあまりお勧めできないかもしれません

HDDベンチマーク3

参考サイト
Monitoring an LSI MegaRAID on ESXi 5
Updating LSI MegaRAID firmware in VMware ESXi 5 | Kirk Kosinski

Perl SSH接続 Net::SSH2 使い方 CentOS5

PerlでSSHへ接続したくなったのでNet::SSH2を使ってみた
Net::SSH2を使うにはlibssh2-develを使用するらしいのでインストール
# yum -y install libssh2-devel

cpanを使ってNet::SSH2をインストール
# cpan -i Net::SSH2
# cpan -i Net::OpenSSH::Compat::SSH2

実装例
SSHでサーバにログインしてpublic_htmlに移動し、lsコマンドを実行する

#!/usr/bin/perl
use strict;
use warnings;
# SSHのバナーを表示したい場合
#use Net::OpenSSH::Compat::SSH2 qw(:supplant);
use Net::SSH2;

# バッファーサイズ
use constant BUFLEN => 512;

my $host = ""; # 接続先ホスト
my $user = ""; # ユーザ名
my $pass = ""; # パスワード

my ($len, $buf);

my $ssh2 = Net::SSH2->new();

$ssh2->connect($host) or die "$!";

if( $ssh2->auth_password($user,$pass)) {
    my $chan = $ssh2->channel();
    $chan->blocking(0);
    $chan->shell();

    $chan->write("cd public_html\n");
    select(undef,undef,undef,0.2);
    print $buf while ($len = $chan->read($buf, BUFLEN));

    $chan->write("ls -al ./\n");
    select(undef,undef,undef,0.2);
    print $buf while ($len = $chan->read($buf, BUFLEN));

    $chan->close();
}

これは色々使えそうですね

参考サイト
Perl Tips | Perl で、ssh でリモートのサーバにアクセスしてファイルをアップロード(SCP)する方法 (Net::SSH2)
自分イノベーション – 気まぐれ勉強メモ Net::SSH2を使ってみた
Net::SSH2と公開鍵
A little demo for Net::SSH2

ディスククオータに残ったUIDを削除する CentOS5

ディスククオータに残ったUIDが以前より残ってるのが気になっていたので削除してみた

ディスククオータに既に存在しないユーザのUIDが残っている場合の例
# repquota -atv

*** Report for user quotas on device /dev/sda6
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      -- 7839076       0       0          33729     0     0
orbit     --    1192       0       0             80     0     0
#1683     --       0 5242880 6291456             88     0     0

ディスククオータに残っている既に存在しないユーザのUIDを削除
# edquota -p nobody 1683

これで再度確認すると削除されているはずです

参考サイト
Factory-AJ Blog: 削除したユーザが、repquota で表示されるのを削除

SSH HTTPS OpenVPNを全て443ポートで通信させる sslh CentOS5

SSLHとはHTTP, HTTPS, SSH, OpenVPN, tinc, XMPP等のプロトコルを全て443番ポートで公開するプログラムです。
ネットワークの制限された環境だと80番と443番ポートでしか通信を許可されていなかったりします。
このプログラムを使用するとそれらの制限を回避する事ができます。

日本語で解説されたサイトが少ないので簡単に導入方法をメモしておきたいと思います。

Repoforgeリポジトリの追加
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm

SSLHのインストール
# yum install sslh

SSLHの設定
# vi /etc/rc.d/init.d/sslh

#!/bin/bash
#
#       /etc/rc.d/init.d/sslh
# sslh          This shell script takes care of starting and stopping
#               sslh - a daemon switching incoming connection between SSH and SSL/HTTPS servers
#
# Author: Andre Krajnik akrajnik@gmail.com
# 2010-03-20
#
#
# chkconfig: 2345 13 87
#
# description: sslh - a daemon switching incoming connection between SSH and SSL/HTTPS servers

# Source function library.
. /etc/init.d/functions

# ./sslh -p  0.0.0.0:8443 -l 127.0.0.1:443 -s 127.0.0.1:22

SSLH="/usr/sbin/sslh" # sslhコマンドまでのパスを書き換えて合わせる
PIDFILE="/var/run/sslh"

# SSLHのポートを8443から443に変更し、HTTPSを8443に変更する(HTTPSサーバの設定を8443にしておく)
# さらに追加したいプロトコルがあれば各自で追加する
# なお、OpenVPNを指定する場合はUDPではなくTCPである必要があると思われます
OPTIONS="--user nobody --pidfile $PIDFILE -p  0.0.0.0:443 --ssl 127.0.0.1:8443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194"

if [ -f /etc/sysconfig/sslh ]; then
        . /etc/sysconfig/sslh
fi

start() {
        echo -n "Starting SSL-SSH-Switch: "
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
                echo sslh already running: $PID
                exit 2;
        else
                daemon  $SSLH $OPTIONS
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] && touch $PIDFILE
                return $RETVAL
        fi

}

stop() {
        echo -n "Shutting down SSL-SSH-Switch: "
        echo
        killproc sslh
        echo
        rm -f $PIDFILE
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status sslh
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

SSLHの起動
# service sslh start

SSLHの自動起動
# chkconfig sslh on

参考サイト
SSLH: A SSL/SSH Multiplexer for Linux | Unixmen

Kali Linux システムモニタ(conky) インストール

Kali LinuxのデスクトップにCPU使用率やメモリ使用率などのシステム情報をクールに表示できるシステムモニタツール(conky)のインストールについてメモしておきます。

インストール
# apt-get install conky lm-sensors hddtemp

自動起動させる

# bash -c "echo '[Desktop Entry]'$'\n''Type=Application'$'\n''Exec=conky -p 5'$'\n''Hidden=false'$'\n''NoDisplay=false'$'\n''X-GNOME-Autostart-enabled=true'$'\n''Name=Conky' > ~/.config/autostart/conky.desktop"

設定
# vi ~/.conkyrc

use_xft yes
override_utf8_locale yes
xftfont MeiryoKe_Gothic:size=10
default_color d0d0d0
default_shade_color 003E3F
update_interval 2
own_window yes
own_window_type override
own_window_transparent yes
double_buffer yes
maximum_width 300
alignment top_right

TEXT
${font Bitstream Vera Sans:style=Bold:pixelsize=14}SYSTEM${font} ${hr 1}
Kernel: $alignr$kernel
Architecture: $alignr$machine
File system type: $alignr$fs_type

CPU ${alignr}${freq} MHz
${cpugraph 20,250 a0a0a0 ffffff -t}
RAM ${alignr}$mem / $memmax ($memperc%)
${membar 4}
Swap ${alignr}$swap / $swapmax ($swapperc%)
${swapbar}
Ether ${alignr}${addr eth0} 
Traffic $alignr up ${upspeed eth0} down ${downspeed eth0}
${upspeedgraph eth0 20,120 a0a0a0 ffffff -t} ${downspeedgraph eth0 20,120 a0a0a0 ffffff -t}
Wi-Fi ${alignr}${addr wlan0}
Traffic $alignr up ${upspeed wlan0} down ${downspeed wlan0}
${upspeedgraph wlan0 20,120 a0a0a0 ffffff -t} ${downspeedgraph wlan0 20,120 a0a0a0 ffffff -t}
DiskIO $alignr wrt ${diskio_write} read ${diskio_read}
${diskiograph_write 20,120 a0a0a0 ffffff -t} ${diskiograph_read 20,120 a0a0a0 ffffff -t}

Highest CPU $alignr CPU% MEM%
${top name 1}$alignr${top cpu 1} ${top mem 1}
${top name 2}$alignr${top cpu 2} ${top mem 2}
${top name 3}$alignr${top cpu 3} ${top mem 3}

Highest MEM $alignr CPU% MEM%
${top_mem name 1}$alignr${top_mem cpu 1} ${top_mem mem 1}
${top_mem name 2}$alignr${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3}$alignr${top_mem cpu 3} ${top_mem mem 3}

CPU temperature ${alignr}${hwmon 1 temp 1}℃
CPU fan speed ${alignr}${hwmon fan 1}rpm

※ 設定例なので各自自分に合った設定に換えてください。

実はこれ、デスクトップカスタム例としてよく写っていたりするのですが名称が分からなくて苦労しましたScreenshot_from_2013-10-07 17:00:53

Kali Linux Gnome Fallback (クラシック) モードからモダンモードに切り替える方法

調べ物をするため海外のフォーラムを見ていたらKali LinuxのFallbackモードからモダンモードに切り替える方法が載っていたのでメモしておく。
※ モダンモードにするとツールのジャンル分けなどがめちゃくちゃな状態になるのであまりお進めしない。。。

現在のモードの確認
# gsettings get org.gnome.desktop.session session-name

モダンモードへの切り替え
# dbus-launch gsettings set org.gnome.desktop.session session-name ‘gnome’

モダンモードはGnome拡張機能などを使いたい場合とかにはいいかもしれません

Screenshot_from_2013-10-07 10:35:39

参考サイト
Enable full gnome instead of gnome fallback

Twitter フォロワー同期(フォロー専用)Bot Perl 新API対応(改)

アカウントがプライベート設定のフォロワーがいると403 forbiddenになって処理が止まるようなので一応対策しました
手動で実行することで対象のID(数字)を確認出来ます

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

# モジュール使用宣言
use Array::Diff;
use Net::Twitter::Lite::WithAPIv1_1;
use YAML::Tiny;
use Encode;
use FindBin;

# 現在のパスから見て設定ファイルを読み込み
my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0];
# OAuth認証
my $twitter = Net::Twitter::Lite::WithAPIv1_1->new(
        traits => ['API::REST', 'OAuth'],
        consumer_key => $config->{'consumer_key'},
        consumer_secret => $config->{'consumer_secret'}
);
$twitter->access_token($config->{'access_token'});
$twitter->access_token_secret($config->{'access_token_secret'});

# 認証失敗時の処理
die('Auth failed:'.$config->{'username'}) unless ( $twitter->authorized ) ;

# ユーザー名を含むユーザー情報を取得
my $own_id = $twitter->verify_credentials->{id};

my $nextc = -1; # paging default.
my @following_id_list; # outgo

# APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
        # パラメータcursorは前回取得したフォローイングまでの番号が入っている
        my $following_list = $twitter->friends_ids({ id=>$own_id, cursor => $nextc });
        $nextc = $following_list->{next_cursor};
        # 配列からフォローイングのidを取得
        foreach my $id (@{ $following_list->{ids} }){
                push(@following_id_list, $id); # 後で比較するためにフォローイングを配列に保管
        }
}while($nextc!=0);
# 文字昇順でソート
@following_id_list = sort @following_id_list;

$nextc = -1;
my @followers_id_list; # income

# APIの仕様?から一度に100人までしか取得できないから0が返ってくるまでdoブロックをループ
do{
        # パラメータcursorは前回取得したフォロワーまでの番号が入っている
        my $followers_list = $twitter->followers_ids({ id=>$own_id, cursor => $nextc });
        $nextc = $followers_list->{next_cursor};
        # 配列からフォロワーのidを取得
        foreach my $id (@{ $followers_list->{ids} }){
                push(@followers_id_list, $id); # 後で比較するためにフォロワーを配列に保管
        }
}while($nextc!=0);
# 文字昇順でソート
@followers_id_list = sort @followers_id_list;

# 差分を取得(フォローイング)
my $diff_following = Array::Diff->diff(\@following_id_list, \@followers_id_list);

# 差分を取得(フォロワー)
my $diff_followers = Array::Diff->diff(\@followers_id_list, \@following_id_list);

# リムった人をリム返し
foreach my $delid_following (@{ $diff_following->{deleted} }){
        eval{$twitter->destroy_friend({user_id => $delid_following})};
        # プライベートだとエラーになる人がいるので確認用
        print $delid_following . "\n" if($@);
}

# フォローした人をフォロー返し
foreach my $delid_followers (@{ $diff_followers->{deleted} }){
        eval{$twitter->create_friend({user_id => $delid_followers})};
        # プライベートだとエラーになる人がいるので確認用
        print $delid_followers . "\n" if($@);
}

シーザー暗号 ROT13 Perl 復号

ありきたりですがPerlで書いてみました

#!/usr/bin/perl
print sub{$_[0]=~tr/A-Za-z/ZA-Yza-y/
for(1..$_[1]);$_[0]}->($s=<>,$k=<>);

文字列 + 改行 + ずらす回数 + 改行 で実行できます

結構短く書けるものですね