Tag Archives: Linux (Server) - Page 4

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

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)

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

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

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;
       }

Smart-UPS 1000用クロスシリアルケーブルの自作 (2)

以前Smart-UPS 1000用クロスシリアルケーブルを作製したが前回はパーツが揃わない状態で作製したものであったため見た目が粗悪なものであった。そこで今回、しっかりと作りなおしてみた。

使用したパーツは全て秋月電子通商にて購入
Dサブ コネクタ 9P・オス(半田付けタイプ)
Dサブ コネクタ用シェル 9P

結線は前回の記事を元に作製

完成

IDC-BB延長フラットケーブルの自作

マザーボード上のCOMポートをブラケット上にRS-232で提供できるようにするケーブルが裏配線したところ微妙に足りない事が判明したため困っていたところ、下記のサイトで延長ケーブルの自作を行っているサイトがあったのでそれを参考に延長ケーブルの作製を行った。

インテルマザーシリアル延長

すでにIDC-BBは二本手元にあったので一本をぶった切って延長ケーブルに使う事にした。

使用したソケットはF3BD10PD254RMCと呼ばれるヒロセ電機の製品で、秋葉原のマルツパーツ館にて取り扱いがある。

圧着機が手元に無かったため、LANケーブル用の圧着機の柄に挟み圧着した。

完成

接続時の様子

仕様・組み立てマニュアル
中継タイプリボンケーブル用コネクタ(HIF3B中継タイプ)