etsuxのブログ

自分がハマったことなどを記録しています。

VMware vSphere Hypervisor 6.0に変更

VMware vSphere Hypervisor 6.5はHTML5のみのクライアントとなっているので、クライアントPC側に多大な処理性能を要求する。

安物のノートPCでは何をするにも動作が遅くて使うのは無理。

ということで、VMware vSphere Hypervisor 6.0に変更することとした。

セットアップが終わった仮想マシン(Windows10)の仮想ディスクが破損したところなので、ちょうどいい機会。

 

HTML5クライアントに比べるとvSphere Clientは軽くてよい。

ローカルファイルの受け渡しも簡単だし、6.5はないな~。

 

VMware vSphere Hypervisor 6.5の仮想マシンからデータストアを参照(方法見つからず)

VMware vSphere Hypervisor 6.5の仮想マシン(Windows)にローカルにあるファイルを渡したいので、データストアを経由して渡す方法がないか調査。

 

やっぱりなさそうですね...

 

普通に共有フォルダかリモートデスクトップで渡すようにしたほうが早そう。

↓こういうこともできるらしい。

 

Windows Homeにリモートデスクトップで接続する方法 【RDPWrap】 - WICの中から

 

あと、持ち込みたいファイルをISO化して、データストアにアップロード、仮想マシンのCD/DVDに「データストアISOファイル」として割り当てる方法もある。

今回はISO WorkshopでISOを作ってアップロードしてみたが、ネットワーク設定ができるまではこのほうが簡単?

ISO Workshop のダウンロードと使い方 - k本的に無料ソフト・フリーソフト

 

VMware vSphere Hypervisorでの仮想マシン追加

VMware vSphere Hypervisorのインストールが完了したら、ブラウザからESXiにアクセス。

https://<ESXiのIPアドレス

 

以前はブラウザでアクセスしてvSphere Cllientをダウンロード、vSphere Clientから操作していたが、今はCllientがなくなってHTML5でのGUIだけになった。

vSphere Client (HTML5) と vSphere Web Client 6.5 の FAQ (2148759) | VMware KB

 

アクセスすると気になる2つ。

  • このホストに割り当てられた証明書はまだ有効ではありません。 有効な証明書をインストールする必要があります。
  • 現在 ESXi を評価モードで使用しています。このライセンスは 60 日後に有効期限が切れます。

「現在ESXiを評価モードで~」はVMware vSphere Hypervisor 6.5 ダウンロード センターの「ライセンス情報」の「ライセンス キー」をコピーして、VMware ESXiのライセンスに貼り付け。

f:id:etsux:20170716203211p:plain

証明書のほうは後回し。

 

USBのDVDドライブをESXiに接続して、OSメディアを差し込んで仮想マシンにインストールしようとしているが、CD/DVD ドライブ 1を「ホストデバイス」にしてもCD/DVD メディアが「none」以外に選択できず認識されていない。

とりあえず、「アクション>サービス>SSHの有効化」と「コンソールSSHの有効化」を行って、SSHコンソールを開く。

TeraTermからパスワードでSSHでつなげられるように/etc/ssh/sshd_configの設定を変更。

PasswordAuthentication yes

SSHを再起動すれば、TereTermから接続できるようになる。

/etc/init.d/SSH restart

 

とやってみたものの、USBのDVDドライブを認識させる方法がわからず。

 

STYLE-IL11-i7S-HNV購入とVMware vSphere Hypervisorの構築

iiyamaの省スペースPCを購入。

iiyama STYLE-IL11-i7S-HNV [Windows 10 Home] | パソコン工房【公式通販】

大きさとスペックがよい自宅のセンターサーバー用(自分の実験用)。

 

ここにVMware vSphere Hypervisor環境を作って、仮想マシンをいくつも立てて、夢を見てみようと思う。

無償の VMware vSphere Hypervisor, 無償の仮想化 (ESXi)

VMware-VMvisor-Installer-201701001-4887370.x86_64.iso 

 

サイズが328 MBしかないのでISOをCD-Rに焼いて、インストールを始めたらすぐにエラーが出た。

「nfs41client failed to load」

How to fix nfs41client not load ? |VMware Communities

いろいろ書いてあるけど、ESXiとNICで調べてみるとNICが対応していないとダメらしい。つまり、エラーの原因は NICRealtekなので、ESXiに標準に提供されているドライバでは対応できない、ということらしい。

仮想環境なのでネットワークなしというわけにはいかないので、ネットワーク関連を無視してインストールするのはありえないから、対処は必須。

 

 

読みやすそうな参考記事はこのあたり。

VMware ESXiをインストールしたら「No network adapters」ではまった時の対処法 - Qiita

 

必要なファイルをダウンローしようとリンクをたどっていくと、ESXi-Customizer-PS-v2.5.ps1は飛び先がDonate(寄付)のところ。少し上にスクロールすれば、ダウンロードリンクがあるのでそこからダウンロード。

VMware Front Experience: ESXi-Customizer-PS

 

ダウンロードしたファイルは以下の3つ。

  • VMware-PowerCLI-6.5.0-4624819.exe
  • ESXi-Customizer-PS-v2.5.ps1
  • net51-drivers-1.0.0-1vft.510.0.0.799733.x86_64.vib

 

VMware-PowerCLIをインストールしようとすると、PowerShellのポリシー変更が必要とのこと。

コマンド:Set-ExecutionPolicy RemoteSigned

 

念のため、注意書きを読んでおく。とりあえず大丈夫とする。

about_Execution_Policies

RemoteSigned
- スクリプトを実行できます。Windows Server 2012 R2 の既定の実行ポリシーです。
- インターネット (電子メールとインスタント メッセージング プログラムを含む) からダウンロードされたスクリプトと構成ファイルが、信頼された発行元によってデジタル署名されている必要があります。
- ローカル コンピューター上で記述された (インターネットからダウンロードされていない) スクリプトには、デジタル署名は必要ありません。
- Unblock-File コマンドレットの使用などによってスクリプトのブロックが解除されている場合は、インターネットからダウンロードされた、署名されていないスクリプトが実行されます。
- インターネット以外をソースとする署名されていないスクリプトや、署名されているが悪意のあるスクリプトが実行される危険性があります。

 

PowerShellで実行したら

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerS
' へのアクセスが拒否されました。 既定 (LocalMachine) のスコープの実行ポリシーを変更
ョンを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを
-Scope CurrentUser" を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], Unauthor
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShe
nd

 

あ、PowerShellを「管理者として実行」で起動するんですね。→無事完了。

VMware-PowerCLIのインストールで[Continue]ボタンを押してインストール完了。

 

続いて、PowerShellESXi-Customizer-PSのスクリプトを実行。

about_Execution_Policiesの-v65の説明が間違っているけど。

-v60 : Create the latest ESXi 6.0 ISO
-v65 : Create the latest ESXi 6.0 ISO

 

以下のコマンドを実行。

.\ESXi-Customizer-PS-v2.5.ps1 -v65 -pkgDir O:\download

 

に不要なZIPファイルなどがあると読み込みに多少時間がかかる上にFAILEDが出て無視される。pkgDirには余計なファイルはおかないように注意。

 

Loading Offline bundles and VIB files from O:\download ...
Loading O:\download\XXXXXXXX.zip ... [FAILED]
Probably not a valid Offline bundle, ignoring.
Loading O:\download\net51-drivers-1.0.0-1vft.510.0.0.799733.x86_64.vib ... [OK]
Add VIB net51-drivers 1.0.0-1vft.510.0.0.799733 [New AcceptanceLevel: CommunitySupported] [OK, added]

 

カスタマイズ版のISOの作成が完了。

ESXi-6.5.0-20170404001-standard-customized.iso

 

標準のISOをCD-Rに焼いて(2回)でインストールに失敗したので、今度はDVD-RWに焼くことにした。常識かもしれないけど、↓のとおり。

  • DVD-RWでもISOイメージは焼ける。
  • 起動用のディスクに使える。
  • DVD-RWのほうがCD-RよりもESXiのインストールのファイルの読み込みが速い。(なぜかは知らない)

最初のエラーも起きなくなり、「nfs41client load successfully」で進んだ。

ESXiのインストール先にはSSDを選択したが、HDDにしておいて、SSDはOSの仮想イメージにしたほうがよかったかも。

 

PDCAサイクルも起承転結もフレームワークの1つなのに信奉しすぎ感が漂う

万能でないからこそフレームワークなのだが...
何か文章を書くのに「起承転結」の特に「転」って何だろう...
PDCAサイクルを回す」と呪文のように唱えても...
という私はまったくの素人で専門家ではない。ただの主観。

PDCAサイクルで難解なのは「A」で、さらに「A」から「P」へのつながり。

PDCAサイクルを回す」=「計画を立てて、それを実行して、振り返って、次に活かす」のような説明だが、これでは「A」がないし、「A」から「P」のつながりもわからない。

たぶん、こう説明する人は、作業工程を頭に思い浮かべているのかな?作業をするのに、計画して実行するだけではなく、ちゃんとチェックしないとダメだ、と言いたいのかな?と思ってしまう。

PDCAサイクルは工程管理ではなく、改善のスパイラルだということを忘れると「A」が抜け落ちてしまう。あと、「C」が「D」の生産物に対するチェック(レビューとか)と思っていたり。

わかりやすくなるかも、と思ってPDCAの日本語訳を考えてみた。

PDCA 一般訳 自己流訳  
Plan 計画 特化 具体化のアプローチ
Do 実行 実装
Check(Study) 評価(学習) 分解(解析) 抽象化のアプローチ
Action 活動 汎化

何かを作るときには、目的を満たすための「特化」したものを考え、それを「実装」する。よりよくするには、実装したものをいったん「分解」し、共通項を抽出して「汎化」する。汎化されたものは技術/部品/規約/知見などであり、次の特化したものを作るときに適用することで、よりよいものができるようになる。

一度書いたプログラムをリファクタリングして汎用性を高めたり、同じ轍を踏まない工夫をして、次に作るときに役立てることが「A」から「P」の流れとなる。

改善のスパイラルも同じで、計画/実行のプロセスを例えばKPT(Keep/Problem/Try)に分解して、よいものをよりよく汎用的にして、次の計画に取り入れる。

※個人的には問題のあるものを無理によくする改善策にとらわれず、障壁を人為的淘汰によって排除するだけにした方が実りあると思う。

ガントチャートを自作

興味本位でガントチャートを作ってみる。

サーバ側のエンジンを何にするかは、簡単なところでRails

画面も自作したり、jquery-uiでごりごり作ってもよいかもしれないが、既存のものを探してみる。

dhtmlxGanttでRailsのサンプルがあったので、これに逃げてしまおうかと。

Using dhtmlxGantt with Ruby on Rails [Tutorial]

 

tableのヘッダ固定+縦横スクロールでのセルの幅/高さ揃え

tableのヘッダ固定+縦横スクロールはいろいろなものが公開されているが、やっぱり自作もしてみる。

よくあるtaleを4つ用意してそれぞれをdivで囲み、右下のペインのスクロールバーで右上、左下が同期して動作する。

他と少し違うのは、FourPanesTable-fix-height、FourPanesTable-fix-width、FourPanesTable-fix-crossというクラスのスタイルで、幅と高さをそろえるための幅0pxのtd、高さ0xのtdを4つのペインの境目に入れたこと。(以下の図の矢印のところに、visibility: hiddenで隠された行や列がある)

f:id:etsux:20170620225933p:plain

four_panes_table.css

幅と高さ調整のスタイルの定義は以下ではまった。

  • 行を0pxにするには、line-heightとoverflow:hiddenが必要。
  • min-width、max-widthで幅、min-height、max-heightで高さを制御。
  • !importantをつけないと別で定義されたスタイルが使われる。
#FourPanesTable-left-top {
	margin: 0px;
	padding: 0px;
	vertical-align: top;
	text-align: left;
	float: left;
	overflow: hidden;
}
#FourPanesTable-right-top {
	margin: 0px;
	padding: 0px;
	vertical-align: top;
	text-align: left;
	overflow: hidden;
}
#FourPanesTable-left-bottom {
	margin: 0px;
	padding: 0px;
	vertical-align: top;
	text-align: left;
	float: left;
	overflow: hidden;
	height: 50vh;
}
#FourPanesTable-right-bottom {
	margin: 0px;
	padding: 0px;
	vertical-align: top;
	text-align: left;
	overflow: scroll;
	height: 50vh;
}
td.FourPanesTable-fix-height {
	min-width: 0px !important;
	max-width: 0px !important;
	min-height: 1em;
	max-height: 1em;
	height: 1em;
	visibility: hidden !important;
}
td.FourPanesTable-fix-width {
	min-height: 0px !important;
	max-height: 0px !important;
	line-height:0px !important;
	overflow: hidden !important;
	visibility: hidden !important;
}
td.FourPanesTable-fix-cross {
	min-width: 0px !important;
	max-width: 0px !important;
	min-height: 0px !important;
	max-height: 0px !important;
	line-height: 0px !important;
	overflow: hidden !important;
	visibility: hidden !important;
}
#FourPanesTable-left-top table ,
#FourPanesTable-right-top table ,
#FourPanesTable-left-bottom table ,
#FourPanesTable-right-bottom table {
	table-layout: fixed;
}
#FourPanesTable-left-bottom table tr:nth-child(odd),
#FourPanesTable-right-bottom table tr:nth-child(odd) {
	background: #f0ffff;
}

four_panes_table.js

$(this).scrollLeft()は()を忘れてスクロールが同期されずはまった。

$(document).ready(function() {
	$('#FourPanesTable-right-bottom').scroll(function(){
		$('#FourPanesTable-right-top').scrollLeft($(this).scrollLeft());
		$('#FourPanesTable-left-bottom').scrollTop($(this).scrollTop());
	});
});