ESXi6でBMC(IPMI)のIPアドレスを調べる

職場で、ESXi6をインストールしていたサーバにおいてBMCのIPアドレスがなんだか不明な状態(要は管理していないということなのだが…)になった。
LANケーブル引っこ抜くわけにもいかないし、どうすればいいかなぁ…と調べていた所、外部からESXiの管理ポートにアクセスしてBMCのIPアドレスを調べる方法があるようだ。

調べ方は簡単。
以下のコマンドを外部のマシンから実行すればいい。

curl -sk https://ESXi管理IPアドレス:5989/cimom --user root -X POST \
-H 'Content-type: application/xml; cha...

大体の事はなんでも出来るawkだが、grepのように行を抽出する事も出来る。
以下のようにコマンドを実行することで、文字列を含む行の抽出を行える。

awk '/文字列/' 対象ファイル
[root@test-node ~]# cat /tmp/sample.log
2016/04/25 00:00:01 : [11.25] SELECT AAA.* FROM AAA WHERE AAA.xxx = ? ; [123]
2016/04/25 00:00:01 : [9.76] SELECT BBB.* FROM BBB WHERE BBB.yyy = ? AND BBB.zzz; [1...

会社のシステム(Maxscale経由でDBに接続)で負荷テストをしていたところ、不可解な接続エラーが発生していた。どうも新しいセッションが作成出来ないとの事なのだが、後ろのMariaDB側のMax Connection値は余裕がある。で、いろいろと調べていたところ、Maxscaleのエラーログに以下のようなエラーが出ていた。

2016-04-26 16:53:56   Error 24, Too many open files. Failed to accept new client connection.

Oh...(´・ω・`)

どうやら、ファイルディスクリプタが上限を超えてし...


仕事で、以下のようなSQLとその実行時間のログを集計することがあったので、awkで平均値を求めた際のコマンドを備忘として残しておく。
かなり簡略化したログなのだが、「[]」の中に実行に要した時間があって、その右に実行したSQLが記述されているようなログだ。「;」より右のはPrepared StatementでSQLに入れられる値だ。

/tmp/sample.log

2016/04/25 00:00:01 : [11.25] SELECT AAA.* FROM AAA WHERE AAA.xxx = ? ; [123]
2016/04/25 00:00:01 : [9.76] S...

Cephでは、データの冗長性を保つためにオブジェクトのレプリカを各ノードに作成するようになっている。
作成するレプリカ数はPoolごとに定義されていて、デフォルトではオリジナル含め3OSDにオブジェクトを配置するようになっている。

なお、現在のPoolのレプリカ数は以下のコマンドで確認出来る。

ceph osd pool get Pool名 size
[root@BS-PUB-CEPHADM ~]# ceph osd pool get .rgw size
size: 3

※CephのPool名がわからない場合は、以下のコマンドでPoolの一覧を取得出来る。

ceph os...

仕事でAzure Blob Storageをいじってるのだけど、ポータル画面からだとスナップショットの取得ができなそうなので、PowerShellから取ってみる事にした。

残念ながら、コンテナ単位でSnapshotを取得する事は出来ないようで、オブジェクト単位での取得をする必要があるようだ。

# Blob Storageに関する情報
# StorageAccountName: Blobアカウント名
# StorageAccountKey : Blobアクセスキー
# ContainerName : Blobコンテナ名
# BlobName : Blob名
$StorageAccount...

LinuxのコンソールなどからコマンドでDatadogのDashboardとかを編集したり、イベントの通知をする場合はDatadogpyなどを用いれば良いのだが、Windows Server上からコマンドで実行させたい事があった。
で、結論としてはDatadogではRestAPIが用意されているので、PowerShellでそれ経由で処理させれば良い。

●datadog-sample.ps1

# ----------------------
# Datadog Powershellイベント通知スクリプト(Sample)
# ----------------------

$url_...

仕事でJSONファイルをいじる事がおおくなり、jqコマンドのお世話になる事が多くなったのだが、そんな中で以下のような状況に出くわしたので備忘として残しておく。
例えば以下のファイルで、キー「id」の値が「test2」の場合のみ、「format」を「log」に書き換えたい場合。

● test.json

[
  {
    "id": "test1",
    "format": "zip",
    "size": 50
  },
  {
    "id": "test2",
    "format": "csv",
    "size": 100
  },
  {
    "id":...

ファイルやポート、プロセスの関連を確認する際に良く利用するlsofコマンドについて、個人的に覚えておきたいオプションや使い方をまとめてみる事にする。
なお、もしlsofコマンドがない環境の場合、ファイルとプロセスの紐付けを確認するだけであればfuserコマンドが入っていればそれで代用可能だ。

1.全プロセスを確認する

lsofコマンドは、オプションを付与しないで実行すると全てのプロセスについて出力してくれる。

lsof
[root@test-node ~]# lsof
COMMAND     PID   TID     USER   FD      TYPE...

psコマンドで覚えておきたい使い方5個

Linuxでプロセス状態を取得するコマンドといえばpsコマンドだが、今回はこのコマンドで個人的に覚えておきたいオプション等についてをまとめてみる事にする。

1.基本的な使い方(現在動作中のプロセスを全て出力する)

psコマンドは、基本的に現在動作中のプロセスを出力するためのコマンドだ。
で、現在システムで動作しているプロセスを全て出力する場合は、「-ef」で指定出来る。
以下、オプションの詳細。

  • -e … 全てのプロセスを出力する
  • -f … 完全なフォーマットで出力する

このオプションでpsコマンドを実行した場合、以下のような出力が得られる。

[root@test-...

仕事でDatadogを使用しているのだが、Dashboard上でクライアントから取得した文字列(プログラムのバージョンとか)を表示させたいので少し調べてみた。
で、以下のようなアドバイスを頂いたので実際にやってみる事にした。

なお、DatadogではすでにApplicationKeyを発行済みとする。


phpでSQLで取得した複数行・複数列の内容をそのまま出力させる(多次元連想配列)

仕事で何故かPHPを少し触る事になった。
で、その中でPHPで作られたコマンドラインツールでクエリの結果(複数行・複数列)をそのまま出力させたい箇所があり、以下のように多次元連想配列を利用すると簡単に書けたので備忘として残しておく。
※以下の例では、PDOを使用してSQLiteに接続している。

●test.php

/*
 ==== 変数 ====
*/
$dbfile  = 'test.db'; // 使用するDBファイル
$dbtable = 'TEST';    // SQLを実行するテーブル名
$dbwhere = 'AAA';     // SQLで検索する文字列
$dbc...

sqlite3でテーブルの一覧を取得する場合、以下のようにコマンドを実行する。

.tables

もしくは

select name from sqlite_master where type='table';

で一覧が取得出来る。

sqlite> .table
TEST
sqlite> select name from sqlite_master where type='table';
TEST

テーブル...


Proxmox VE 4.1でファイアウォール(セキュリティグループ)の設定を行う

Proxmox VEでは、動作しているVMへのアクセスに対し、Proxmox側でファイアウォールの管理ができるようになっている。
今回は、このファイアウォール機能を実際に動作させてみる。

Proxmoxのファイアウォール機能は、データセンターで管理する。
まず、データセンターを選択し[Firewall] > [オプション] で、[Enable Firewall] を「はい」に切り替える(チェックを入れる)。

次に、ファイアウォールを動作させたいVMを選択し、[Firewall] > [オプション] で、[Enable Firewall] を「はい」に切り替える(チェックを入れる...


Proxmox VE 4.1でActive Directory連携を行う

Proxmox VE 4.1ではWebGUIから設定してActive Directory連携を行わせる事が出来る。
今回は、CentOS 7 + Samba4で作成したDomain ContollerとProxmox VE 4.1でこの連携を行う。

連携設定は簡単。
まず、[データセンター] > [認証] > [追加]で、Active Directoryを選択する。

レルムやドメイン、DCサーバの情報などの環境情報を入力する。

で、ここまでで終わるのかな?と思ってたのだが、どうやらグループやその権限、グループに所属するユーザとしてADのユーザも作らないといけないらしい。...


シェルスクリプト単体で外部に漏れても、すぐには中身が見れないようにする方法をについて、バイナリ化の他に、難読化…というか、スクリプトの中身がスグには見えないようにする方法がないか調べてみた。
で、以下のようにbase64やgpgを利用する事で対応出来たので、備忘として残しておく。

まず、以下のようなスクリプトを用意しておく。

●test.sh

#!/bin/sh
echo "test"
mkdir ./test
touch ./test/test

1.base64で難読化する

base64で難読化するには、以下のようにコマンドを実行して難読化したファイルを生成する。

...
lessコマンドで覚えておきたい使い方9個

長い標準出力を見るときに重宝するlessコマンド。
LinuxやUNIXをある程度触っている人間であれば必ず触ってるであろう基本的なコマンドだが、今回はこのコマンドについての使い方をまとめてみることにする。

1.基本的な使い方

lessは、基本的に長い(大きな)テキストファイルや標準出力を見る際に用いられる。
基本的には、以下のようにコマンドを実行して利用する。

コマンド | less

例)/proc/meminfoの出力内容をlessで見る場合

cat /proc/meminfo | less

この状態の時、上下キー(もしくは、jkキー)で表示範囲を移動する事...


今使っているCentOS 7のサーバでは、journalからのログをrsyslogを使って振り分けているのだが、どうもログが出力されていない状態になった。で、調べたところ「/var/log/messages」に以下のようなエラーが出ていた。

Apr XX 17:XX:21 localhost journal: Suppressed 529 messages from /user.slice/user-1000.slice

以前にVMWare ESXiで似たような設定をしていたが、Proxmox VEでも出来ないか調べてみた。
まぁ、流石に基本KVM(& OpenVZ)なので、問題なく設定できるようだ。

1.シリアルコンソールの追加

VMへシリアルコンソールを追加するのは簡単で、Proxmox VE 4.1のホストで、以下のコマンドを実行するだけだ。

qm set  -serial0 socket
root@BS-PUB-MICROSERVER-02:~# qm set 102 -serial0 socket
update VM 102: -serial0 socket

VM...


シェルスクリプトの中身を見れないようにしようと思って調べていた所、shcというシェルスクリプトをバイナリ化するプログラムがあるようだったので使ってみる事にした。
前提として、利用にはmakeが必要なので、gccが必要。

1.インストール

まずはインストール。
こちらのページから、以下のコマンドでダウンロード、コンパイルを行う。

HTTP="http://www.datsi.fi.upm.es/~frosal/" && curl -s $HTTP | grep .tgz | awk -F\" '{print $2}' | sed 's/^.\///g' | xargs -I{}...

Linuxでkernel panic発生時に自動的に再起動させる

Linuxでは、カーネルパラメータを設定することで、カーネルパニック発生時に自動的に再起動させるよう出来る。
今回は、CentOS 7でその設定を行う。

カーネルパニックといっても、普通に運用していて簡単にパニックが起きるわけではない。
そこで、以下のコマンドで懇意的にカーネルパニックを発生させる。

echo c > /proc/sysrq-trigger

このカーネルパニック発生後、再起動を自動的に行わせ...


Pythonで簡易的なWebサーバを稼働させる

Pythonでは、コンソール上から簡易的にWebサーバを立ち上げる事ができる。
以下のようにコマンドを実行することで、カレントディレクトリ配下をWEB公開ディレクトリとしてWEBサーバを動作させることが出来る。
※ポート番号を指定しない場合、デフォルトで8000ポートを利用する。

python -m SimpleHTTPServer <ポート番号>

ログは全て標準出力で出力される。


Proxmox VE 4.1では、クラスタを構成する各ノードにオブジェクトストレージである「Ceph」をインストールし、OSDとして動作させることが出来る。
つまり、Proxmoxのクラスタノードが10台以上とかいても、共通アクセスするストレージ機器を用意することなく動作を継続することが出来るということになる。イメージ的には、vSANに似たように利用することが可能となる。

Cephそのものの動作については、以下のページを参考にするとよいだろう。


Linuxのdiffコマンドで覚えておきたい使い方9個

diffコマンドといえば、ファイルの差分を確認する際に良く利用するコマンドだ。
今回は、このdiffコマンドについて覚えておきたい使い方について紹介する。

1.基本的な使い方

基本的には、以下のようにコマンドを実行することで、ファイルの差異を確認する。

diff /tmp/test /tmp/test.nl
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test
aaaaa
v4vvv
ccccc
ddddd
ee2ee
fffff
ggggg

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.nl
aaaaa
vvvv...

Proxmox VE 4.1でDRBD9を用いた状態でHA化設定を行う

前回、Proxmox VE 4.1でDRBD9の設定を行い、ライブマイグレーションが行えるようにしたので、今回はHA化の設定を行う。
この設定を行う事で、物理ノードに何かが合った場合、VMが自動的に別ノードにマイグレーションされて再起動されるようになる。
ただし、注意したいのがノードが最小で3台以上であること。
2台構成では動作しないので注意だ。

まず、WEBコンソールから[データセンター] > [HA] > [グループ]を開き、[作成]からHAグループを作成する(ここでは、グループIDを「test」としている)。


投資の自己責任論が叫ばれる昨今、金相場や為替レートは気になるもの。
それがたとえコンソールにアクセスしている真っ最中でも。

というわけで、コンソール操作中でも金相場や為替レートを調べる方法を紹介。
まぁ、以下のコマンドを実行するだけだ。

ドルレート

wget https://rate-exchange-1.appspot.com/currency\?from=USD\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'

金相場

wget h...

bashでcp/mvコマンドを使用してファイルのバックアップとか移動をする際、出来ればキー入力は少ない方がいいわけで。
長いファイル名とか、PATH名だととても面倒だったりする。

というわけで、個人的にキー入力を短縮するためにやっている指定方法について、記述しておく。

1.同一PATH内にバックアップ・移動(ファイル名変更)する場合

同一PATH内に、末尾に文字列を追加してバックアップ・移動をする場合は、以下のようにコマンドを実行することでキー入力を減らすことが出来る。

cp 対象PAHT{,文字列}
[root@BS-PUB-CENT7-01 ~]# ls -la /t...

仕事でpingを打ちっぱなしにしてた時、音で成功した祭は通知させられないかなぁ、と思ったので、やれないか調べてみた。
まぁ、そもそもビープ音でよければもう用意はされているのだけど、イヤホンで音楽聴いてたりしていると聞き逃すので、もうちょっと主張の激しい音で知らせて欲しい。

という訳で、pingで疎通に成功・失敗した際に任意の音で通知をさせるようにしてみよう。
前提として、ssh越しのサウンドのやり取りというのが設定とか面倒そうなので、この方法はssh接続先のサーバで実行するのではなく、あくまでも手元のMacやLinux上からとなる。

任意の文字列を読み上げさせる場合

pin...