VMware ESXiを自動インストールする際、設定用のスクリプトやOVAファイル等をCD-ROM(DVD-ROM)に入れておいて、それをESXiインストール後にデータストア等にコピーしたいと思うときがあるだろう。
その際の手法について記述する。

ESXiのKickstartでCD-ROMからファイルをコピーする場合、「%post」に記述する方法と「%firstboot」に記述する方法の2通りある。
どちらでも記述の方法はそう変わらないが、応用性で言うと「%firstboot」への記述の方が優れているように思える。

以下に、「%post」「%firstboot」それぞれでの記述例を...


今回は、VMware ESXiのホストにCD-ROM(DVD-ROM)をマウントさせてみることにした。
VMware ESXiでは、CD-ROM(DVD-ROM)のマウントポイントは「/vmfs/volumes/CDROM」と定められているようで、以下のコマンドでマウントを行える。

vmkload_mod iso9660
/sbin/vsish -e set /vmkModules/iso9660/mount mpx.vmhba32:C0:T0:L0

実際に実行した結果がこちら。


VMware ESXiの自動インストール時に、IPアドレスをコマンドから変更させたいと思ったのでその備忘。参考にしたサイトは以下。

ESXiのこういった設定(IPアドレスの設定以外でも)では、大体はesxcliコマンドを用いる事で対応できるようだ。

1.現在設定されているIPアドレスを確認する

現在設定されているIPアドレスを確認するには、以下のコマンドを実行する。

~ # esxcli network ip interface ipv4 get
Na...

LinuxやUNIXでは、ユーザのパスワード情報は「/etc/passwd(shadow化している場合は「/etc/shadow」)」というファイルに以下のように設置される。

root@Test-UbuntuOS004:/home/test# cat /etc/shadow
root:!:16222:0:99999:7:::
daemon:*:16177:0:99999:7:::
bin:*:16177:0:99999:7:::
sys:*:16177:0:99999:7:::
sync:*:16177:0:99999:7:::
games:*:16177:0:99999:7:::
man...

コマンドの実行結果を変数に代入するのは、シェルスクリプトやPowerShellでは以下のようにすれば簡単にできる。

シェルスクリプトの場合

#!/bin/sh
TEST=`cat test.txt | grep $1`

PowerShellの場合

# Get Yesterday
$date = (Get-Date).AddDays(-1)

しかし、バッチファイルの場合はこんな簡単にはいかず、コマンドの実行結...


Linuxのジョークコマンド11個をまとめてみた

Linuxで使えるジョークコマンドってどんなのがあるんだろう?
ということで、ちょっと調べてまとめてみた。

はっきり言って実用性は皆無なので、間違ってもメインのサーバやマシンには入れちゃダメだぜ!

1.sl

ジョークコマンドとして定番。実行すると、AAのSL列車がコンソール上を走り抜ける。
インストールは以下。

debian系の場合

apt-get install sl

Redhat系の場合

yum install sl

実行した結果がこちら。

一応、オプションが4個ほどついてるのでその紹介。

  • -a …小さい人?が助けを求めるようになる
  • -l...

BIOSのシリアルナンバー等の、Mac OS Xが搭載されているハードウェア情報を取得する際は「system_profiler」コマンドが利用出来る。
これはLinuxでいうと「dmidecode」コマンドに相当するコマンドだ。

実行すると、以下のような内容が表示される。
表示される内容はdmidecodeよりも多く、ネットワーク設定(IPアドレスなども)についても表示される。

以下、ヘルプの情報を記載

Mac-mini-2009-SERVER:~ user$ system_profiler --helo
Usage: system_profiler [-listDataTyp...

sedを用いた小文字から大文字への変換方法について調べる機会があったのでその備忘。

GNU拡張されたsedとそうでないsedと存在し、GNU拡張がされている場合は以下の内容を実行することで小文字→大文字への変換ができる。

sed 's/\(.*\)/\U\1/'

小文字→大文字の場合は以下。

sed 's/\(.*\)/\L\1/'

ただし、GNU拡張されていないsed(VMware ESXiのshellは...


VMware ESXiのルーティングを設定するコマンド「esxcfg-route」についてのリファレンスを記述する。
まずは、VMWare ESXi 5.5のhelpから。

~ # esxcfg-route -h
esxcfg-route <options> [<network> <gateway>] | <default gateway>
   <network> can be specified in 3 ways:
    * As a single argument in <IP>/<Mask>...

シェルスクリプトやバッチを作成する際、外部ファイルを引数として指定して使用する事が多々ある。
その際、相対パスで外部ファイルを引数した後にcdコマンドを使用するとうまく動かないため、相対パスで引数とした外部ファイルをソース内で絶対パス(フルパス)に変換させる。

シェルスクリプトの場合

シェルスクリプトの場合は、以下のように記述をする事で相対パスを絶対パスに変換する事が出来る。

$(cd $(dirname "対象ファイルのパス") && pwd)/$(basename "対象ファイルのパス")

cdコマンドが入っているが、実際にかれんとディレクトリが変更される訳ではないので安...


今回は、vSwithに関しての操作ができるコマンド『esxcfg-vswitch』について記述する。
まずはESXi 5.5のヘルプの内容から。

~ # esxcfg-vswitch  -h
esxcfg-vswitch [options] [vswitch[:ports]]
  -a|--add                    Add a new virtual switch.
           [--dvswitch --uuid=<16 hexadecimal digits> --impl-class=<implementation class>]...

WindowsやUNIX系のOSではローカル、リモートのマシンで空いているポートを確認(ポートスキャン)するコマンドがある。 今回は、UNIX系のOSでローカル、リモート別にそれぞれで使えるポートスキャンコマンドについてまとめてみた。
まぁ、UNIX系としてひとくくりにしてしまったけど、実際は各OSごとにコマンドで出来る機能が違ったりするので、

ローカルマシンのポートチェックコマンド

netstat

Windowsでもあったが、実行しているローカルマシンのポートを確認する定番コマンド。
使い方については、こちらを参照してもらいたい。

リモートマシンのポートチェックコマン

...

WindowsやUNIX系のOSではローカル、リモートのマシンで空いているポートを確認(ポートスキャン)するコマンドがある。 今回は、Windowsでローカル、リモート別にそれぞれで使えるポートスキャンコマンドについてまとめてみた。

ローカルマシンのポートチェックコマンド

ローカルマシン(コマンドを実行するマシン)のポートを確認するには、以下のコマンドが使える。

netstat

定番のコマンド。
コマンドを実行しているローカルマシン上のポートチェックを行うためのツールで、UNIX系OSにも搭載されている。
現在サポートされているWindowsであれば、標準で搭載されている。...


今回のはちょっとコマンドリファレンスと呼べるか微妙だが、Linuxで言うとdmidecodeコマンドに相当する「smbiosDump」について記述する。
もう、実際に見てもらったほうが早いので、以下に実行の結果を記述する。(なお、grepを入れないとあまりにも長すぎて保存出来ないため、Systemと書かれた行の後ろ10行だけ抜き出す方式で出力している。)

~ #  smbiosDump | grep System -A10
  System Info: #1
    Manufacturer: "VMware, Inc."
    Product: "VMware Virtual Pla...

バッチファイルを作成するにあたり、for文の中で変数を定義するようなコードを書くことがある。
for文の中にfor文を記述するような、2重ループなどが該当する。
その際、例えば以下のようなソースを書くとしよう。

@Echo off
Set LIST=%~f1
For /f "delims=," %%a In (%LIST%) Do (
    Set LINE=%%a
    Echo "LINE>%LINE%"
)

で、以下のような外部ファイルを読みこませようとするとしよう。

 aaaaa
 bbbbb
 ccccc
 ddddd
 eeeee
 fffff
 ggggg...

昨日、ipmitoolからのGUID取得方法について記述したので、今回はそのスクリプトの改良版。
ホスト名、IPアドレス自動取得スクリプトと同様に、外部ファイルからipmiのIPアドレス、ユーザ名、パスワードを取得させ、IPアドレス別に一覧化させるというもの。
リストの読込みは引数で行わせる。

1.外部ファイル

まずは外部ファイル「ipmi.list」から。名前は任意なので適当に。
今回は、Fujitsu Primergy RX100の初期設定(IPアドレスはDCHP)の状態でリストを作成している。

●ipmi.list

#ipaddr,user,pass
192.1...

以前から、サーバのシリアルナンバー(UUID)を元にIPアドレスを設定する方法について記述してきたが、今回はそのUUIDをどうやって取得するのかについて。
以下が、今まで作成してきたホスト名、IPアドレスの筐体別自動設定スクリプト。

サーバ大量構築時のキモ ~シリアルコードからIPアドレスを自動設定するスクリプト~
サーバ大量構築時のキモ ~シリアルコードからIPアドレスを自動設定するスクリプト(Ubuntu編)~
サーバ大量構築時のキモ ~シリアルナンバーを用いたWindowsへの静的IPアドレス設定バッチ~

サーバ筐体のUUIDは、ipmitoolから取得が可能。
以下のような...


hp Intergrity rx1620 のiLOにSSH接続してみた

以前購入したhp Intergrity rx1620のiLOに対し、SSH接続を行ったのでその備忘。IPアドレスは「192.168.0.251」としている。
このiLO、購入したバージョンだけなのかもしれないがOpenSSHではなく、有料のSSH2を使っているらしい。

よく使われるOpenSSHとSSH2との違いについてはこちらのページを参照してもらいたい。
上記参考ページを読んでもらうとわかるが、TeratermではiLOにSSH接続できない。接続しようとすると、以下のようなエラーが表示される。

LinuxやMacなどに実装されているOpensshでのsshコマンドでも、...


世の中に出回っている大概のOSには、OSを自動インストール、展開に利用できる『デプロイメントツール』というツールが用意されている。
今回は、各OSで用意されているこのデプロイメントツールをまとめてみた。

UNIX

  • Solaris … Jumpstart : あらかじめ作成したプロファイルを使って、複数システムのインストール、アップグレードを自動的かつ同時に行う事が出来るツール。こちらのページに、より詳細なドキュメントがある。その他、JumpStart Enterprise Toolkitというツールもあるようだ。
  • HP-UX … Ignite-UX : 複数のクラ...

Windows OSでの名前解決順序の変更

Linuxには、名前解決の優先順位(hostsを優先するのか、DNSを優先するのか等)を設定するNSSという仕組みがあり、nsswitch.confという設定ファイルで優先順位を変更することが出来る。
では、Windowsの場合にはどうなのだろうか?

Windowsの場合は、レジストリに設定がある。
以下のレジストリキーで設定されている。

\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\ServiceProvider


今までCentOSUbuntuの自動インストール方法について記述してきたので、今回はVMware ESXiの自動インストールについて記述する。
さてさて、どうやってESXiの自動インストールを行うのか? 実はこのVMware ESXi、CentOSで使ったKickstartが使えるのである。

というわけで、同様にKickstartを用いてインストールを進めてみよう。
今回は、まず「Kickstartを用いた自動インストールができること」を主眼に置くので、そんなに凝った事はしない。
インストール対象にはESXi 5.5、作業にはCentOS 6.5を用いる事にした。別にUbu...


前回、RHEL系のLinuxで使用出来るKickstartを用いた自動インストールディスクを作成したので、今回はDebian系のツールPreseedを用いたディスクを作成してみる。
使用するOSはUbuntu  Server14.04とする。
なお、通常のUbuntu Desktopではこの設定は使えないので注意。
というのが、「/isolinux/isolinux.cfg」で指定するkernel等の場所が、Desktop版とServer版とで相違があるためだ。

1.Kickstartとの違い

Preseedは、Debian系Linux用の自動インストールツールだ。基本的に、や...


さて、以前ホスト名を引数にした半自動IPアドレス設定バッチを作成したが、今回は更に自動化出来ないかとやってみた。
内容としては、上記バッチファイルをベースにして、ここ最近記述しているシリアルナンバーを用いた設定スクリプトの内容を落とし込んだものだ。

まずは、もはやお馴染みの外部ファイル「host.list」から。
Linuxとの使い回しを考えて、フォーマットは全く同じものを使用している。

●host.list

hostname,serialno,defaultgw,nic0,nic1
Test-UbuntuOS001,564D33C9F632AB40148800E9CA...

筐体ごとの区別をするために、各OSでのシリアルナンバーの確認方法を調べていたので備忘。
Windowsでは、以下のコマンドでコマンドプロンプトからシリアルナンバーを取得出来る。

wmic bios get serialnumber

実際に取得した結果がこちら。

C:\Users\Work>wmic bios get serialnumber
SerialNumber
VMware-56 4d eb d5 e6 d1 6e c2-87 17 75 4b f0 ee a7 35


VMware ESXi にSSHで接続しシリアルナンバーを確認するには、以下のコマンドを実行する。

esxcfg-info -y | grep "System UUID"

実際に実行した結果が以下。

~ # esxcfg-info -y | grep "System UUID"
|----System UUID.................................................5366f5c9-85ad-2ec1-431a-00151716ad92

この抽出結果だと少し使いにくいので、awkやsedで加工。

~ # esxcfg-info -y...

前にCentOSで動作するIPアドレス、ホスト名を各筐体ごとに自動設定するスクリプトを作成したので、今回はそのUbuntu版(多分Debianでも動くと思うけど)。
基本的には、以前書いたスクリプトをUbuntu用に焼き直しただけだ。
今回の検証では、Ubuntu 14.04 LTS(Desktop及びServer Edition)を使用している。

まずはホスト名やIPアドレスを記述した外部ファイル。 こちらはそのまま流用する。

●host.list

hostname,serialno,defaultgw,nic0,nic1
Test-UbuntuOS001,564D33C9F...

ちょっと事情があって、サブネットマスクのCIDR形式⇔アドレス形式の変換を行わせるシェルスクリプトを作成する必要が出たので、サンプルを掲載していたサイト含め紹介する。
解説は不要かもしれないが、各スクリプト名は「mask2cdr」がアドレス形式→CIDR形式、「cdr2mask」がCIDR形式→アドレス形式となる。
なお、基本的には関数として抽出し、末尾にサンプルを記載しておく。

/bin/sh形式

このスクリプトは、こちらのフォーラムに掲載されていた。

mask2cidr

#!/bin/sh
mask2cidr ()
{
 # Assumes there's no "...

サーバ大量構築時のキモ ~Kickstart によるLinux 自動インストール時のネットワーク設定~

Kickstartを用いて、Linuxを自動インストールする際の更なる自動化が出来ないかと考えた。
で、筐体に合わせて、固定IPアドレスの割り振りを自動化させる事が出来たので記述する。

1.実現するには

実現には、まずサーバ筐体のシリアルコードが必要だ。
これは、可能であれば発注元からリストを貰えないか交渉することを推奨する。
もし貰えない場合は…まぁ、通常の1Uや2Uラックのサーバであればどこかに書いてあるので、それを頑張ってメモしてもらうしか無い…かなぁ。

2014/06/28 追記
マネジメントポート(IPMI)から、対象のマザーボードが保有するUUIDを取得するス...


サーバ大量構築時のキモ ~シリアルコードからIPアドレスを自動設定するスクリプト~

以前、hostnameを引数にIPアドレスを自動的に設定するスクリプトを作成したが、今回はそれをより自動化させた。
基板の持つシリアルコードから各筐体の判断を行わせ、ただコマンドを実行するだけで個別のIPアドレスを実行させるようにする。

1.実現するには

さて、んじゃ実際どうすればいいのか?
まず問題になるのが、各筐体の違いを、OSはどのように認識すればいいのか。

今回は、各対象サーバの持つシリアルコードを利用して違いを認識させる事にした。
このシリアルコードをLinuxが認識するには、「dmidecode」コマンドを利用すれればいい。

「dmidecode」コマンドでは...


Kickstartを用いた自動インストール時では、configファイルの「%post」以下にコマンドを記述することで、インストール直後にスクリプトを実行させる事が出来る。
その際にログを出力させるには、「%post」の後に以下のように追記すればいい。

%post --log=ログ出力先

これで、ログが出力される。
試しに、以下のconfigファイルを実行させてみた。

[root@test-centos CentOS_6.5_Final_custom]# cat /home/CentOS_6.5_Final_custom/ks
.cfg
#platform=x86, AMD64,...