Apple Mac miniで作るVMware vSphereラボ環境 ー ESXiのインストール

前回の続きMac miniにESXiをインストールしていきます。
CD-Rが余っている場合は普通にISOを焼いてもらえれば、USBメモリを準備する必要はありません。
CD-Rがない場合は最初に500MB程度の容量のあるUSBメモリを用意してください。今回は引き出しの奥にあった古いiPodを使いました。
NICドライバはあらかじめWindowsで読み込める形式(※1)でCD-Rに焼いておいてください。


USBからESXiをインストールするための準備はこちらのブログに詳しい手順が出ていますが、要約すると下のような手順です。

  1. syslinuxのzipをダウンロードして展開
  2. USBメモリをFATでフォーマット
  3. USBメモリにsyslinuxをインストール
  4. ESXiのISOイメージの中身をそのままUSBメモリにコピー
  5. USBメモリにコピーしたisolinux.cfgのファイル名を syslinux.cfgに変更

ESXiのインストール用USBが作成できたらMac miniに接続して、USBキーボード、HDMI端子を接続して起動します。
先ほど作成したUSBから起動するため、起動音が鳴ったらALTキーを押し続けてください。

真ん中の「Windows」を選択するとSyslinuxが起動します。
"menu.c32: not a COM32R image"というメッセージがループし続けますが、気にせずbootのところに入力します。

boot: mboot.c32

あとはESXiのインストーラーが起動するのでMac miniにESXiをインストールするだけです。
インストールが終わって再起動したらF2を押してESXiの構成画面に入ります。

ここでネットワークカードをテストするとすべてのテストが失敗します。

ネットワークカードが動いていないことはわかったので、ドライバをインストールします。
F2を押して"Troubleshooting Options"を選びます。

Enable ESXi shellを選択してシェルを有効にします。

Alt + F1を押してシェルにログインします。
シェルにログイン後に以下のコマンドを実行してドライバをインストールしてください。
1. VMkernelモジュールの読み込み

vmkload_mod iso9660

2. CDドライブをマウント

vsish -e set /vmkModules/iso9660/mount $(esxcfg-mpath -b | grep "CD-ROM" | awk '{print $1}')

3. ドライバをコピーして解凍するためのフォルダを作成

mkdir /tmp/driver

4. CDROMに入っているドライバの圧縮ファイルを先ほど作成したフォルダにコピーして解凍

/vmfs/volumes/mpx.vmhba32\:C0\:T0\:L0/TG3312~1.ZIP /tmp/driver
cd /tmp/driver
unzip TG3312~1.ZIP

画面はこんな感じになっているはずです。

5. ドライバファイルを/var/vmware/logにコピーする
※このファイル名はいつもこのように表示されるわけではなく"TG33_21.ZIP"のように大文字英数字になることもあります。

cp tg3-3.120h.v50.2-offline_bundle-547149.zip /var/log/vmware

6. /var/vmware/logにコピーしたドライバをESXiにインストール

cd /var/log/vmware
esxcli software vib install --no-sig-check --maintenance-mode -d tg3-3.120.h.v50.2-offline-bundle-547149.zip

ネットワークのテストを実行してNICが動作している事を確認します。

※1 MacでドライバのCDを焼くとESXiでファイルを読み込む事ができません。WindowsでCDを作るか対応するソフトでWindows形式を指定して焼いてください。

Source:
The Mac Mini VMware ESXi 5 Server – Part 2 (Installation)

Apple Mac miniで作るVMware vSphereラボ環境 ー はじめに

VCP受験を思い立ったとき、会社以外でvSphereを実行できるテスト環境が欲しいと思っていたのですが、スペース的にも騒音的にもサーバー機器を家に置く訳にはいきませんでした。かといって家にある古いWindows PCにVMware Workstationを入れてラボを作れるかというとスペック的に厳しい。そこでネットでいろいろとリサーチしていたところ、海外のサイトでApple Mac miniを使ってラボを構築した人のブログを発見しましたので、これを真似する事にしました。

用意するもの
用意するハードウェアは以下のものです。僕が使用したMac miniはこれですが、予算があればなるべくCPUが良いものを選んだ方がいいと思います。メモリは後で交換しますので標準の2GBで十分です。HDMI端子は既にある人はとくに必要ありませんが、ない人のために購入したもののリンクを載せておきます。それから500MB程度の要領があるUSBメモリとUSB接続のキーボードを用意します。CD-Rは後ほど説明しますがMac mini用のネットワークカードのドライバをインストールするために使います。

Mac mini本体

16GBメモリ

HDMI端子

500MB程度のUSBメモリ
USB接続のキーボード
CD-R(一枚)


ダウンロードするもの
ESXi、vCenterのISOはVMwareのサイトから評価版をダウンロードできますので、自分のメールアドレスを使ってアカウントを作成して評価版をダウンロードしてください。評価版のWindows 2008R2に関してもMSのサイトでユーザー登録をするとダウンロードする事ができます。FrreNASは後ほど仮想のiSCSIストレージを作成するために使用します。

VMware ESXi ISO
ESXi用Broadcom NICドライバー
vSphere vCenter ISO
Windows 2008 R2評価版
FreeNAS


ラボ構築の手順
手順を簡単に書き出すと下のような形になります。
このうち3、4、5に関しては評価期間が過ぎるとやり直す必要があります。

  1. ESXiのインストール
  2. ドメインコントローラの構築
  3. ESXi(仮想)のインストールx2
  4. vCenter Serverのインストール
  5. iSCSIストレージ(仮想)の作成

PlayFrameworkのViewでHTMLエスケープをさせない方法

この方法が正しいかどうかはわからないけど一応メモ。
下のような形でHTMLを出力させるメソッドがあったとして…

@Entity
public class MyModel extends Model {
	@Transient 
	public final static HashMap typeMap = new HashMap(){{
		put(0, "Type1"); put(1, "Type2"); 
	}};
	
	public static String getTypeOptions(){
		StringBuffer sb = new StringBuffer();
		for(Iterator it = typeMap.entrySet().iterator(); it.hasNext();){
			Map.Entry entry = (Map.Entry)it.next();
			Integer key = (Integer)entry.getKey();
			String value = (String)entry.getValue();
			sb.append("<option value='"+key+"'>"+value+"</option>\n");
		}
		return sb.toString();
	}
}

このままviewで出力するとHTMLがエスケープされてしまうため、raw()を使うことでそのままの文字列を出力できる。

<select id="modelType">${models.MyModel.getTypeOptions().raw()}</select>

https://groups.google.com/forum/?fromgroups=#!topic/play-framework/9xF7Gq7sWKA
http://www.playframework.org/documentation/1.0.1/releasenotes

VCP5を取得しました

半年前にトレーニングに参加したVCPですが、先日やっと試験に合格しました。
VCPとして認定されるには下記コースへの参加が条件になっていますので、受験される方はトレーニングの受講が必要です。
VMware vSphere : Install, Configure, Manage [V5]

コースに参加しなくてもテストだけを受験することはできるようですが、その場合はVMware公認とはならないようです。
VMware認定教育コースが受けられる教育機関はVMwareの公式サイトで発表されています。
どこもお値段は30万ほどなので、とても個人で受講できる値段ではないでしょう。

試験の感想:
他にベンダー資格を持っていませんし、VCP自体も初受験だったのでうまく比較ができないのですが、個人的にはかなり難易度が高い試験だと感じました。一応、vSphereの運用・構築を含めた実務経験がある上で、参考書に付いてきた問題集をかなりやり込んでから臨んだのですが、結果は合格ラインぎりぎりでした。模擬試験はほぼ全問を暗記するくらいまで繰り返し、なぜその回答になるのかをVMwareの公式ドキュメントやテストラボ、書籍等で確認、理解しながら勉強したつもりだったのですが自信をもって回答できる問題は少数でした。

Communityや海外ブログなどで触れられていますが、単に暗記するだけでは合格できないような内容になっているのだと思います。
実際、ある程度使った経験がないと答えるのが難しいと思われる問題もありました。

勉強方法:
今後受験する方の参考になるかもしれませんので、勉強方法について書いておきます。
まず用意したのは以下の4冊です。上の2つは会社ですでに購入済みでしたので個人で買ったのは下の2つです。その2冊でちまたの問題集を買えてしまうくらいの値段になってしまうのですが…

VMware徹底入門 第2版
VMware vSphereエンタープライズ・インテグレーション
VCP教科書 VMware vSphere 4
VCP5 VMware Certified Professional on vSphere 5 Study Guide: Exam VCP-510

1冊目のVMware徹底入門の内容はV4向けのものになりますが、VMwareから出版されているもので、V5にも共通する部分が多数カバーされています。また説明も非常に丁寧でわかりやすいのでおすすめです。
VCP教科書のほうもV4になりますが共通する部分はまだ多くあり、VMware徹底入門には載っていない部分も細かく説明されています。また各章の終わりに練習問題が用意されていますので、試験に向けた練習にもなります。
最後の書籍は広辞苑なみの厚さですべて英語になりますが、かなりおすすめです。あまりのボリュームにめげそうになりますが、演習の説明がかなりありますので思ったより時間はかかりません。この本のサポート用WEBサイトから模擬試験ソフトがダウンロードできます。これは全部で200問以上あるのですが、試験の重要範囲がカバーされていますので英語での勉強に問題がない方は使えると思います。

あとはもちろんVMwareのvSphere公式ドキュメントです。
これをほぼすべて印刷して読み込みました。

あとは個人用のテストラボ環境を自宅に構築しました。海外のブログやVMware Communityでは意外とこのテストラボの構築を重要視している人が多くいるようでした。今回はMac miniに無償のESXiを入れた上で複数台のESXiをVMとしてインストールして環境を作りました。これに関しては後ほど環境構築の手順をアップしようと思います。

勉強期間は1ヶ月半から2ヶ月ほどです。早朝、帰宅後の時間を使って書籍を読んで演習をやったり、模擬試験で理解度を確認しながら不安な部分をラボと公式ドキュメントを使って補完するという方法を取りました。

最後に:
正直、ここまでやって合格ラインぎりぎりという自分の不甲斐なさに落胆しました。みんなの受験記などをみるとネットに出回っている怪しい問題集を使えばもっと簡単に高得点がマークできるようなので、問題集を使って勉強しながらラボや公式ドキュメントを使うというのが一番効率がいいかと思います。

いまは遠く及びませんが、今後は実務を通して経験を積んでからVCAPを目指そうと思います。

apache 一部のサブディレクトリだけを認証なしに設定する

ルートディレクトリに対してBasic認証をかけている場合に、サブディレクトリの一部を認証なしでも通すように設定する方法です。
LocationMatchを使って認証が必要ないLocationにSatisfy Anyを指定します。対象のLocationだけ認証なしにしても、当然ながらそこで使われている画像ファイルなんかは認証を要求されるので、そのページで使っている画像ファイルなんかも認証の対象外に設定します。

    <LocationMatch "/no_auth">
        # All access controls and authentication are disabled
        # in this directory
        Satisfy Any
        Allow from all
    </LocationMatch>

    <LocationMatch "/images">
        # All access controls and authentication are disabled
        # in this directory
        Satisfy Any
        Allow from all
    </LocationMatch>

    <Location />
        AuthType Basic
        AuthName "Please Enter User/Password"
        
    ...
    </Location>

Source:
http://stackoverflow.com/questions/2641646/how-to-accomplish-authtype-none-in-apache-2-2
http://httpd.apache.org/docs/2.2/mod/core.html#require

backbone.js Viewのイベントを実行したターゲットを取得

backbone.jsのviewでeventsに定義したメソッド内で対象の要素を取得するにはtargetを使います。
eventsで定義されたメソッドの中だと「this」はviewそのものを参照するので、console.log($(this).html())とやってもnullが返ってきてしまいます。
正しくイベントを引き起こしたHTML要素を取得するには次のように指定します。

var MyView = Backbone.View.extend({

	events: {
		"click #foo":"clickedFoo"
	},
	
	clickedFoo: function(ev) {
		alert($(ev.target).text());
	}
});

Source:
http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked

Playframework モデルのプロパティのデータ型を指定する

PlayframeworkでモデルにString型のプロパティを追加すると、データ型はMySQLだと自動的にVARCHAR(255)になります。
このままだと255を超える長さの文字列を追加しようとするとPersistenceExceptionになります。

PersistenceException occured : org.hibernate.exception.DataException: could not insert: [models.Comment]
..
Caused by: org.hibernate.exception.DataException: could not insert: [models.Comment]

@Columnアノテーションを使ってデータ型をTEXTにすることで回避できました

@Entity
public class Comment extends Model{

	@ManyToOne
	public Post post
	
	@Column(columnDefinition = "TEXT")
	public String comment;
	
}

Source:
http://stackoverflow.com/questions/7247968/use-of-lob-for-field-in-playframework
http://docs.oracle.com/javaee/5/api/javax/persistence/Column.html