Category Archives: Linux (Server) - Page 6

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

CentOS5.7 Apache2 DOS攻撃対策

DOS攻撃の対策モジュールを変更したのをメモするのを忘れていたのでメモしておきます。

旧記事
Dosアタック対策 Apache2 Vine Linux

# wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz
# tar xvzf mod_dosdetector-0.2.tar.gz
# cd mod_dosdetector-0.2
# make
# make install

# vi /etc/httpd/conf.d/dos_attack.conf

RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .*  - [R=503,L]
ErrorDocument 503 "Server is busy."

AddType image/vnd.microsoft.icon .ico

DoSDetection On
DoSPeriod 60
DoSThreshold 70
DoSHardThreshold 90
DoSBanPeriod 7200
DoSTableSize 500
DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)

ESXi5 コマンドから仮想マシンの電源を管理する

対象の仮想マシンのIDを調べる
# vim-cmd vmsvc/getallvms

IDに各当する仮想マシンの状態を確認する(“ID”には数字が入る)
# vim-cmd vmsvc/power.getstate ID

IDに各当する仮想マシンの電源を入れる(“ID”には数字が入る)
# vim-cmd vmsvc/power.on ID

IDに各当する仮想マシンの電源を切る(“ID”には数字が入る)
# vim-cmd vmsvc/power.off ID

IDに各当する仮想マシンを再起動する(“ID”には数字が入る)
# vim-cmd vmsvc/power.reboot ID

Perl Linux CPU使用率 Memory使用率の高いプロセスを探し出す

最近尋常じゃないほどサーバリソースを喰い潰すプロセスがいるようなので調査しようと監視システムを書くことにしました。
一応PerlではProc::ProcessTableと呼ばれるモジュールにてプロセスを監視できるようなのでサクッとCPU使用率の高いプロセスを見つけ出すプログラムを書いてみました。

#!/usr/bin/perl
use warnings;
use strict;
use Proc::ProcessTable;

my $Processtable = new Proc::ProcessTable;

foreach my $item (@{$Processtable->table}){
        my $pctcpu = sprintf("%5.1f", $item->pctcpu);
        my $pctmem = sprintf("%5.1f", $item->pctmem);
        if($pctcpu > 50){
                print $item->pid ." ". getpwuid($item->uid) ." " . $pctcpu . " ". $pctmem ." ". $item->cmndline . "\n";
        }
}

実行するとちゃんとCPU使用率の高いプロセスを特定してくれました。

# perl ProcessKill.pl
3509 root 100.0   0.0 155 perl -e while (1) { $i++ }

参考
Proc::ProcessTable size differences

atコマンドがエラーを起こす

$ echo “xmms -p” |sudo at 0900
warning: commands will be executed using /bin/sh
Cannot open lockfile /var/spool/cron/atjobs/.SEQ: No such file or directory

atdを再起動させても解決しなかったため手動でロックファイルを作成したところ解決しました

$ sudo touch /var/spool/cron/atjobs/.SEQ
$ sudo chown daemon:daemon /var/spool/cron/atjobs/.SEQ

mod_ruidとmod_securityの共存

mod_ruidとmod_securityを利用すると性質上ログが正常に取れない問題が発生した。
そのため対策方法を考えてみる。

# cat /var/log/httpd/audit_log
Audit log: Failed to create subdirectories: /var/asl/data/audit/20120617/20120617-1153 (Permission denied)

mod_ruidはそれぞれアクセスされたプログラムファイルのユーザ権限でApacheを動かすので先にディレクトリ”/var/asl/data/audit/日付/”を作製したユーザ以外のログが記録されないという問題が発生する。そのため、一つのファイルに全てのログを記録するように設定する。

SecAuditLogTypeをSerialと設定することにより1つのファイルでログを記録できる。
# vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

SecAuditEngine RelevantOnly

SecRuleEngine On
#SecRuleEngine DetectionOnly

#SecAuditLogType Concurrent
SecAuditLogType Serial
SecAuditLog logs/audit_log
# SecAuditLogStorageDir logs/modsec_audit

今後のため一応ログ出力を強化しておく
# vi /etc/httpd/conf.d/mod_security.conf

# Debug Log.
SecDebugLog logs/modsec_debug_log
SecDebugLogLevel 1
 
# Log File.
LogFormat "%V %h %t %{UNIQUE_ID}e \"%r\" %>s %X | %I %O | %<{mod_security-time1}n %<{mod_security-time2}n %<{mod_security-time3}n %D" mperformance
CustomLog logs/modsec_performance_log mperformance

ESXi5 SSH 公開鍵暗号化方式 作製

鍵の作り方が分からず苦戦したが下記のサイトにて詳しく書かれていたためそれを参考に鍵を作製した。

ESXi 4.1 から ESXi 5.0 へアップグレード

# cd /etc/ssh/keys-root
# /usr/lib/vmware/openssh/bin/ssh-keygen -t rsa -C “SSH2 RSA key”
Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa
後はEnterで進む

公開鍵をauthorized_keysへ追記しておく
# cat id_rsa.pub > ./authorized_keys

下記が秘密鍵なのでこれを保管しておく
/etc/ssh/keys-root/id_rsa

VMware vSphere CLI インストール CentOS5

vicfg-hostopsコマンドを使うためVMwereのサイトから下記のファイルをダウンロードしインストールしようとしたところつまずいたのでメモ

ファイル:VMware-vSphere-CLI-5.0.0-422456.x86_64.tar.gz

下記の文章が表示され処理が止まる
proxy’ e.g. export http_proxy=http://myproxy.mydomain.com:0000

調べたところフォーラムに解決策が書かれていたのでインストーラーを改変
Installing the Perl SDK thru NAT’d, not proxy, firewalls.

# vi vmware-install.pl
5515行付近のif文の中身をコメントアウト

       if ( !( $ftpproxy && $httpproxy)) {
#          uninstall_file($gInstallerMainDB);
#         exit 1;
       }