Skip navigation

PowerCLI に含まれる Image Builder では、標準では含まれない VIB を追加したインストーラの

ISO イメージファイルを作成することができます。

今回は ESXi 6.5 に、RealTek の NIC ドライバを追加してみます。

 

ちなみに、ドライバを追加した ISO イメージファイルを作成する場合、

最近では Andreas Peetz さんが作成した ESXi-Customizer-PS という

PowerShell / PowerCLI ベースのツールが利用されることが多いです。

このツールについては、下記のブログで紹介されています。

 

ESXi-Customizer-PS

https://www.v-front.de/p/esxi-customizer-ps.html

 

しかし今回は、あえて標準的な PowerCLI / Image Builder を使用して

ISO イメージファイルを作成してみます。

 

今回利用するファイルについて。

ESXi 6.5 は最新のパッチ(ESXi650-201712001.zip)を MyVMware からダウンロードずみです。

 

RealTek の NIC ドライバの VIB は、おなじく

Andreas Peetz さんの下記の Web サイトで公開されているもの(Net55-r8168)を

利用させていただきます。

今回のイメージに追加するファイルは、

.vib ファイルではなくオフラインバンドルを利用してみます。

これは VIB が含まれた ZIP ファイルで、net55-r8168-8.045-napi-offline_bundle.zip です。

※せっかくオフライン バンドルも提供していただいているので・・・

 

List of currently available ESXi packages

https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages

 

ファイルは下記のように同じディレクトリに配置しています。

PowerCLI> ls .\ESXi650-201712001.zip,net55-r8168-8.045-napi-offline_bundle.zip | select Name,Length

 

Name                                         Length

----                                         ------

ESXi650-201712001.zip                     478519869

net55-r8168-8.045-napi-offline_bundle.zip   1131520

 

 

なお、PowerCLI も、インストールずみです。

 

ISO イメージ ファイルの作成。

まず、ESXi のパッチ(オフラインバンドル)を読み込みます。

今回も、不具合修正&セキュリティ修正の両方と、VMware Tools が含まれるイメージ プロファイルである

ESXi-6.5.0-20171204001-standard を利用します。

PowerCLI> Add-EsxSoftwareDepot .\ESXi650-201712001.zip

 

 

PowerCLI> Get-EsxImageProfile | where {$_.Name -notmatch "s-standard|-no-tools"} | ft -AutoSize

 

Name                            Vendor       Last Modified       Acceptance Level

----                            ------       -------------       ----------------

ESXi-6.5.0-20171204001-standard VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

 

 

RealTek ドライバのオフラインバンドルを読み込みつつ、

ついでに含まれている VIB の名前を見ておきます。

VIB の名前は、net55-r8168 です。

PowerCLI> Add-EsxSoftwareDepot .\net55-r8168-8.045-napi-offline_bundle.zip | Get-EsxSoftwarePackage | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

ちなみに、VIB のファイル名も確認できたりします。

PowerCLI> Get-EsxSoftwarePackage -AcceptanceLevel CommunitySupported -Name net55-r8168 | select SourceUrls

 

SourceUrls

----------

{zip:D:\work\net55-r8168-8.045-napi-offline_bundle.zip?net55-r8168-8.045-napi.x86_64.vib}

 

 

今回 読み込んだ VIB パッケージの中で、net55-r8168 だけは

他よりも許容レベル(AcceptanceLevel)が低く、CommunitySupported のパッケージです。

PowerCLI> Get-EsxSoftwarePackage -AcceptanceLevel CommunitySupported | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

イメージ プロファイルの 許容レベル については、ドキュメントでは下記のあたりに説明があります。

VIB およびホストの許容レベルについて

 

そこで新しく作成するイメージ プロファイルも、許容レベルを CommunitySupported にします。

新しいプロファイル名は、わかりやすく ESXi-6.5.0-20171204001-with-realtek にしました。

Vendor の指定も必須になるので、今回は HomeLab としています。

PowerCLI> New-EsxImageProfile -CloneProfile $image_profile -Vendor HomeLab -Name ESXi-6.5.0-20171204001-with-realtek -AcceptanceLevel CommunitySupported | fl Name,Vendor,AcceptanceLevel

 

Name            : ESXi-6.5.0-20171204001-with-realtek

Vendor          : HomeLab

AcceptanceLevel : CommunitySupported

 

 

作成したプロファイルに、ドライバを追加します。

PowerCLI> Add-EsxSoftwarePackage -ImageProfile ESXi-6.5.0-20171204001-with-realtek -SoftwarePackage net55-r8168

 

Name                           Vendor          Last Modified   Acceptance Level

----                           ------          -------------   ----------------

ESXi-6.5.0-20171204001-with... HomeLab         2018/02/10 1... CommunitySupported

 

 

ドライバの VIB パッケージが追加されています。

PowerCLI> Get-EsxImageProfile -Name ESXi-6.5.0-20171204001-with-realtek | select -ExpandProperty VibList | where {$_.Name -eq "net55-r8168"} | ft -AutoSize

 

Name        Version    Vendor  Creation Date

----        -------    ------  -------------

net55-r8168 8.045-napi Realtek 2018/02/08 12:46:36

 

 

ISO イメージ ファイルとしてエクスポートします。

PowerCLI> Export-EsxImageProfile -ImageProfile ESXi-6.5.0-20171204001-with-realtek -ExportToIso -FilePath .\ESXi-6.5.0-20171204001-with-realtek.iso

 

ついでに、ドライバを追加したイメージ プロファイルの

オフラインバンドルもエクスポートしておきます。

これは、後でこのイメージにさらに VIB を追加したい場合などに利用できます。

PowerCLI> Export-EsxImageProfile -ImageProfile ESXi-6.5.0-20171204001-with-realtek -ExportToBundle -FilePath .\ESXi-6.5.0-20171204001-with-realtek.zip

 

結果として、下記のようなファイルが作成されます。

PowerCLI> ls | select Name,Length

 

Name                                         Length

----                                         ------

ESXi-6.5.0-20171204001-with-realtek.iso   350390272

ESXi-6.5.0-20171204001-with-realtek.zip   341466626

ESXi650-201712001.zip                     478519869

net55-r8168-8.045-napi-offline_bundle.zip   1131520

 

 

この ISO イメージファイルで ESXi をインストールすると、

通常のインストーラでは認識できない RealTek の NIC が認識できるようになります。

esxi65-realtek-pnic.png

 

ちなみに ESX Shell や SSH で直接ログインして確認すると、下記のように認識されています。

[root@localhost:~] vmware -vl

VMware ESXi 6.5.0 build-7388607

VMware ESXi 6.5.0 Update 1

[root@localhost:~] esxcli network nic list

Name    PCI Device    Driver  Admin Status  Link Status  Speed  Duplex  MAC Address         MTU  Description                                                   

------  ------------  ------  ------------  -----------  -----  ------  -----------------  ----  -----------------------------------------------------------------------------------------

vmnic0  0000:01:00.0  r8168   Up            Up            1000  Full    d8:9e:f3:7c:91:c6  1500  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller

 

おまけ。

以前に似たようなことをしていましたので、こちらもどうぞ・・・

ESXi のオフライン バンドルから ISO イメージ ファイルを作成してみる。

ESXi 5.5 を Intel NUC にインストールしてみる。

ESXi 5.5 を Intel Haswell NUC にインストールしてみた。

ネステッドESXi 用 VMware Tools 導入済みの ESXi 5.5 を作成してみました。(Image Builder PowerCLI)

 

以上、ESXi 6.5 でカスタムイメージを作成してみる話でした。

PowerCLI で、vSAN の情報取得や設定、操作などをすることができます。

今回は、vSAN クラスタの概要を取得するスクリプトのサンプルを作成してみました。

 

以前に VMware Hands-on Labs(HoL)で PowerCLI をためしてみる投稿をしてみましたが、

この時はコピー&ペーストでためす都合により、ワンライナーっぽい実行例でした。

vSAN の情報を PowerCLI 6.5 R1 で見てみる。

 

手元に vSAN 環境がある場合は、コマンドラインを1行ずつ実行するよりも

スクリプトにして実行したほうが便利なケースがあると思います。

たとえば以前に HoL でためしたコマンドラインをまとめて、

下記のリンクにあるようなスクリプトで vSAN 環境の概要を確認することができます。

get_vsan_summary.ps1 · GitHub

 

このスクリプトを実行すると、下記のような感じになります。

  • PowerShell / PowerCLI のウインドウ幅は 140 にしてあります。
  • Connect-VIServer で vCenter に接続してから実行しています。
  • vSAN クラスタは 3つあります。(最初にクラスタ設定だけ表示)
  • vSAN Disk のデバイス名(CanonicalName)は長すぎて切れてますが、
    ウインドウ幅を広げて実行すれば全体が表示されます。
  • 長いので2クラスタ目の途中までの表示となってますが、
    1クラスタ目の様子で雰囲気を感じてもらえればと思います。

powercli-vsan-report-sample.png

 

ちなみに PowerCLI のプロンプト「PowerCLI>」は、下記のように工夫しています。

PowerCLI プロンプト文字列に vCenter への接続状態を反映してみる。

 

そして今回ためした PowerCLI のバージョンは下記です。

PowerCLI> Get-PowerCLIVersion | select UserFriendlyVersion

 

UserFriendlyVersion

-------------------

VMware PowerCLI 6.5.1 build 5377412

 

 

PowerCLI> Get-Module VMware.* | select Version,Name

 

Version       Name

-------       ----

6.5.2.6234650 VMware.VimAutomation.Core

6.5.1.5374001 VMware.VimAutomation.Storage

6.5.1.5374428 VMware.VimAutomation.Vds

 

 

今回のサンプルスクリプトは、vSAN の情報を網羅的に取得しているわけではなかったり、

スクリプトの書き方が独特だったりしますが、何かのヒントにしていただければと思います。

 

以上、PowerCLI での vSAN 情報の取得例でした。

ESXi 6.5 の「仮想マシン バージョン 13」(vmx-13)では

対応するゲスト OS の種類が増えましたが、

これまで対応していた OS の細分化もされています。

 

たとえば Oracle Linux や CentOS などは、Red Hat Enterprise Linux 異なり

これまで「Oracle Linux 4/5/6・・・」 のように 1つにまとめられていました。

しかし、vmx-13 の VM では「Oracle Linux 6」「Oracle Linux 7」と、ちゃんと細分化されました。

esxi65-guestid-01.png

 

vCenter 6.5 の vSphere Web Client で見ると、

vmx-11 の VM での Oracle Linux は下記のようになっています。

esxi65-guestid-02.png

 

そして

vmx-13 の VM での Oracle Linux は下記のように分割されています。

esxi65-guestid-03.png

 

API のリファレンスを見ると、

実際に増えた ゲスト OS の GuestId が「Since vSphere API 6.5」でわかりそうです。

 

Enum - VirtualMachineGuestOsIdentifier(vim.vm.GuestOsDescriptor.GuestOsIdentifier)

https://vdc-repo.vmware.com/vmwb-repository/dcr-public/6b586ed2-655c-49d9-9029-bc416323cb22/fa0b429a-a695-4c11-b7d2-2cbc284049dc/doc/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html

 

リファレンスにあるゲスト OS の NAME は VM の GuestId とおなじもので、

PowerCLI などでゲスト OS の種類を指定するときに使用されます。

従来だとバージョン指定がない oracleLinux64Guest だけでしたが

oracleLinux6_64Guest、oracleLinux6_64Guest などが追加されています。

PowerCLI> Get-VM oracle-* | select Name,GuestId | sort Name

 

Name              GuestId

----              -------

oracle-linux-6-vm oracleLinux6_64Guest

oracle-linux-7-vm oracleLinux7_64Guest

oracle-linux-vm   oracleLinux64Guest

 

 

このように、以前より VM にゲスト OS の指定が明確にできるようになりました。

 

また、.vmx ファイルの直接編集などで vmx-11 以前の仮想マシンに

vmx-13 以降に追加された GuestId を指定してしまうと、

vSphere Web Client での VM の設定確認・変更ができなくなることがあるので

注意が必要かもしれません。

たとえば、vmx-11 の VM に vmx-13 で追加された「VMware Photon OS (64-bit)」

(vmwarePhoton64Guest)を指定するとこの問題が起きたりします。

※実は Photon OS 2.0 GA の vmx-11 版の ova ファイルがそうなっていたりします。

 

以上、ESXi 6.5 での GuestId についてでした。

最新の ESXi を利用したい場合、たいてい ISO イメージ ファイルからインストールした後に

オフライン バンドルとよばれるパッチを適用することになります。

 

しかし PowerCLI の Image Builder を利用することで、オフライン バンドルの zip ファイルから

そのパッチが適用された ESXi の ISO イメージ ファイルをエクスポートすることができます。

 

Image Builder のドキュメントは下記のあたりです。

vSphere ESXi Image Builder を使用したインストールのカスタマイズ

 

Image Builder については、以前に下記のブログでも紹介されていました。

VMware ESXi イメージ管理ベストプラクティス その1 - Japan Cloud Infrastructure Blog - VMware Blogs

VMware ESXi イメージ管理ベストプラクティス その2 - Japan Cloud Infrastructure Blog - VMware Blogs

 

本来であれば Image Builder は、ハードウェア特有のドライバ追加などの場合に利用されますが、

今回はただ、パッチから最新版 ESXi のインストーラを抽出するためだけに利用してみます。

 

PowerCLI をインストールしておきます。

今回のバージョンは下記です。

PowerCLI> Get-PowerCLIVersion | select User*

 

UserFriendlyVersion

-------------------

VMware PowerCLI 6.5.1 build 5377412

 

 

ESXi のオフラインバンドル(パッチ)を MyVMware からダウンロードしておきます。

PowerCLI> ls .\ESXi650-201712001.zip | select Name,Length

 

Name                     Length

----                     ------

ESXi650-201712001.zip 478519869

 

 

ISO イメージ ファイルのエクスポート。

Image Builder で、オフライン バンドルを読み込みます。

PowerCLI> Add-EsxSoftwareDepot .\ESXi650-201712001.zip

 

Depot Url

---------

zip:D:\VMware\ESXi\ESXi650-201712001.zip?index.xml

 

 

オフラインバンドルには、複数のイメージ プロファイルが含まれています。

今回は、VMware Tools のインストーラと、セキュリティパッチ以外の修正も含んでいる

「ESXi-6.5.0-20171204001-standard」というイメージ プロファイルを利用します。

PowerCLI> Get-EsxImageProfile | ft -AutoSize

 

Name                             Vendor       Last Modified       Acceptance Level

----                             ------       -------------       ----------------

ESXi-6.5.0-20171201001s-no-tools VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171204001-standard  VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171204001-no-tools  VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

ESXi-6.5.0-20171201001s-standard VMware, Inc. 2017/12/18 11:40:25 PartnerSupported

 

 

イメージプロフィアるを指定して、ISO イメージ ファイルをエクスポートします。

PowerCLI> Export-EsxImageProfile ESXi-6.5.0-20171204001-standard -ExportToIso -FilePath D:\work\ESXi-6.5.0-20171204001-standard.iso

 

ISO イメージ ファイルがエクスポートされました。

 

PowerCLI> ls D:\work\ESXi-6.5.0-20171204001-standard.iso | select Name,Length

 

Name                                   Length

----                                   ------

ESXi-6.5.0-20171204001-standard.iso 349245440

 

 

PowerCLI スクリプト編。

同様のことができる簡易的な PowerCLI スクリプトを作成してみました。

(ただし特にエラー制御とかはしていません。)

 

export_esxi-offline-bundle_to_iso.ps1

ESXiのオフラインバンドルから、ISO イメージファイルをエクスポート。 · GitHub

 

下記のように、オフライン バンドルと、スクリプト ファイルを配置して・・・

PowerCLI> ls | select Name,Length

 

Name                                     Length

----                                     ------

ESXi650-201712001.zip                 478519869

export_esxi-offline-bundle_to_iso.ps1       502

 

 

オフライン バンドルのファイル名とエクスポート先のディレクトリを指定して実行します。

PowerCLI> .\export_esxi-offline-bundle_to_iso.ps1 .\ESXi650-201712001.zip D:\work\

Export ISO File: D:\work\ESXi-6.5.0-20171204001-standard.iso

 

この ISO ファイルからブートして、ESXi をインストールすることができます。

export-iso-boot.png

 

vSAN の動作確認などでは最新の ESXi を利用したかったりするので、

環境構築の効率化として活用できるかもしれないと思います。

 

以上、Image Builder で ESXi のパッチから ISO イメージ ファイルをエクスポートする話でした。

PowerCLI では、ESXi の「システムの詳細設定」パラメータを確認・変更することができます。

そこで、VSAN Swap オブジェクトの Thick Provision無効化の設定を、

PowerCLI でまとめて確認・設定してみます。

 

今回のパラメータは、下記で説明されているものです。

VSAN Cormac Blog 〜VSAN 6.2 VM スワップ オブジェクトに関する新機能〜 - Japan Cloud Infrastructure Blog - VMware Blogs

VSAN 6.2 Part 5 - New Sparse VM Swap Object - CormacHogan.com

 

自宅のラボでは Swap オブジェクトの容量を確保しなくてもよいので、
vSAN クラスタに含まれるすべての ESXi で「有効」に揃えてみます。

 

PowerCLI スクリプトでの設定変更も紹介されていますが、

あえて今回はシンプルなコマンドラインを使用してみます。

Virtual SAN 6.2 & PowerCLI - Sparse Virtual Swap files - Virtual Blocks

 

今回、設定変更の対象とする ESXi です。

「vsan-cluster-01」という名前の vSAN クラスタに含まれる ESXi を対象とします。

PowerCLI> Get-Cluster vsan-cluster-01 | Get-VMHost | sort Name | select Name,Version,Build

 

Name             Version Build

----             ------- -----

hv-i21.go-lab.jp 6.5.0   7388607

hv-i22.go-lab.jp 6.5.0   7388607

hv-i23.go-lab.jp 6.5.0   7388607

hv-i24.go-lab.jp 6.5.0   7388607

hv-i25.go-lab.jp 6.5.0   7388607

hv-i26.go-lab.jp 6.5.0   7388607

 

 

現時点での設定状態を確認します。

デフォルトでは VSAN.SwapThickProvisionDisabled = 0

(「Thick プロビジョニング無効」を無効にされている状態)です。

ESXi「hv-i24.go-lab.jp」以外は、すでに設定変更していました。

PowerCLI> Get-Cluster vsan-cluster-01 | Get-VMHost | sort Name | Get-AdvancedSetting VSAN.SwapThickProvisionDisabled | select Entity,Name,Value

 

Entity           Name                            Value

------           ----                            -----

hv-i21.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i22.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i23.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i24.go-lab.jp VSAN.SwapThickProvisionDisabled     0

hv-i25.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i26.go-lab.jp VSAN.SwapThickProvisionDisabled     1

 

 

下記のように、設定変更をしていなかった ESXi だけに絞って、設定変更してみます。

PowerCLI> Get-Cluster vsan-cluster-01 | Get-VMHost | sort Name | Get-AdvancedSetting -Name VSAN.SwapThickProvisionDisabled | where {$_.Value -ne 1} | select Entity,Name,Value

 

Entity           Name                            Value

------           ----                            -----

hv-i24.go-lab.jp VSAN.SwapThickProvisionDisabled     0

 

 

設定変更します。

PowerCLI> Get-Cluster vsan-cluster-01 | Get-VMHost | sort Name | Get-AdvancedSetting -Name VSAN.SwapThickProvisionDisabled | where {$_.Value -ne 1} | Set-AdvancedSetting -Value 1 -Confirm:$false

 

Name                 Value                Type                 Description

----                 -----                ----                 -----------

VSAN.SwapThickPro... 1                    VMHost

 

 

ESXi「hv-i24.go-lab.jp」の設定が変更され、パラメータが揃いました。

PowerCLI> Get-Cluster vsan-cluster-01 | Get-VMHost | sort Name | Get-AdvancedSetting -Name VSAN.SwapThickProvisionDisabled | select Entity,Name,Value

 

Entity           Name                            Value

------           ----                            -----

hv-i21.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i22.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i23.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i24.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i25.go-lab.jp VSAN.SwapThickProvisionDisabled     1

hv-i26.go-lab.jp VSAN.SwapThickProvisionDisabled     1

 

 

PowerCLI を経由して、esxcli を実行することもできます。

そこで、ESXi の実機で設定変更されていることを

「esxcli system settings advanced list」でも確認してみます。

/VSAN/SwapThickProvisionDisabled の IntValue が「1」に変更されていることがわかります。

PowerCLI> (Get-VMHost -Name hv-i24.go-lab.jp | Get-EsxCli -V2).system.settings.advanced.list.Invoke() | where {$_.Path -eq "/VSAN/SwapThickProvisionDisabled"}

 

 

DefaultIntValue    : 0

DefaultStringValue :

Description        : Turn off default thick provisioning type for VM swap object and allow user to control the provisioning type using policy.

IntValue           : 1

MaxValue           : 1

MinValue           : 0

Path               : /VSAN/SwapThickProvisionDisabled

StringValue        :

Type               : integer

ValidCharacters    :

 

 

以上、PowerCLI で ESXi のパラメータを変更してみる話でした。

PowerCLI で、ESXi のバージョンを取得することができます。

Connect-VIServer で vCenter に接続すると、下記のように

vCenter 管理下の ESXi のバージョンをまとめて表示することができます。

PowerCLI> Get-VMHost | select Name,Version,Build | sort Name

 

Name             Version Build

----             ------- -----

hv-d02.go-lab.jp 6.0.0   4192238

hv-i11.go-lab.jp 6.5.0   5310538

hv-i21.go-lab.jp 6.5.0   5310538

hv-i22.go-lab.jp 6.5.0   5310538

hv-i23.go-lab.jp 6.5.0   7388607

hv-i24.go-lab.jp 6.5.0   5969303

hv-i25.go-lab.jp 6.5.0   5310538

hv-i26.go-lab.jp 6.5.0   5310538

hv-n11.go-lab.jp 6.5.0   5969303

hv-n12.go-lab.jp 6.5.0   5969303

hv-n13.go-lab.jp 6.5.0   5969303

hv-n14.go-lab.jp 6.5.0   5969303

 

PowerShell の Group-Object(エイリアスの「Group」でもよい)で工夫すると、

下記のように ESXi のバージョンがどれくらい揃っているか確認することができます。

ESXi の Version + Build ごとに、ESXi 台数(Count 列)がわかります。

ただし、これだけだとグループ化された情報(Group 列)が省略されてしまったりします。

PowerCLI> Get-VMHost | Group Version,Build

 

Count Name                      Group

----- ----                      -----

    5 6.5.0, 5310538            {hv-i26.go-lab.jp, hv-i11.go-lab.jp, hv-i21.go-lab.jp, hv-i22.go-lab.jp...}

    1 6.5.0, 7388607            {hv-i23.go-lab.jp}

    5 6.5.0, 5969303            {hv-i24.go-lab.jp, hv-n12.go-lab.jp, hv-n11.go-lab.jp, hv-n14.go-lab.jp...}

    1 6.0.0, 4192238            {hv-d02.go-lab.jp}

 

たとえば下記のように工夫することで、見やすくすることができます。

  • グループ化された ESXi を、名前順にソートして「,」で Join。(これで表示が省略されることを防止)
  • グループ化された ESXi の列名を「ESXi」にする。
  • 古いものから表示されるように、ESXi の Version + Build (グループ化された後の Name 列)でソート。

PowerCLI> Get-VMHost | Group Version,Build | select Count,Name,@{N="ESXi";E={($_.Group.Name | sort) -join ","}} | sort Name

 

Count Name           ESXi

----- ----           ----

    1 6.0.0, 4192238 hv-d02.go-lab.jp

    5 6.5.0, 5310538 hv-i11.go-lab.jp,hv-i21.go-lab.jp,hv-i22.go-lab.jp,hv-i25.go-lab.jp,hv-i26.go-lab.jp

    5 6.5.0, 5969303 hv-i24.go-lab.jp,hv-n11.go-lab.jp,hv-n12.go-lab.jp,hv-n13.go-lab.jp,hv-n14.go-lab.jp

    1 6.5.0, 7388607 hv-i23.go-lab.jp

 

私の環境では ESXi を FQDN で vCenter 登録していて名前が長いので、

さらに ESXi 名のドメイン部分も省略(.go-lab.jp なので「\..*」でマッチする部分を省略)してしまいます。

PowerCLI> Get-VMHost | Group Version,Build | select Count,Name,@{N="ESXi";E={($_.Group.Name -replace "\..*","" | sort) -join ","}} | sort Name

 

Count Name           ESXi

----- ----           ----

    1 6.0.0, 4192238 hv-d02

    5 6.5.0, 5310538 hv-i11,hv-i21,hv-i22,hv-i25,hv-i26

    5 6.5.0, 5969303 hv-i24,hv-n11,hv-n12,hv-n13,hv-n14

    1 6.5.0, 7388607 hv-i23

 

以上、PowerCLI で ESXi バージョン確認するときの工夫についてでした。

vSAN 環境では、VM の容量確保や冗長性の設定のために

仮想マシン ストレージ ポリシーを利用します。

たとえば仮想マシン ストレージ ポリシーを 仮想ディスク(VMDK)に適用するだけで

RAID1 から RAID5 に変更することができます。

しかし、対象 VM が多いと GUI である vSphere Web Client で適用するのが大変なことがあるので、

PowerCLI で仮想マシン ストレージ ポリシー を変更してみました。

 

vCenter には、Connect-VIServer で接続ずみです。

今回の vCenter のバージョンです。

PowerCLI> $global:DefaultVIServer | select Version,Build

 

Version Build

------- -----

6.5.0   5973321

 

PowerCLI のバージョンは 6.5.1 を使用しています。

仮想マシン ストレージ ポリシーにかかわるコマンドレットは、

SPBM(Storage Policy Based Management)といった名前がついています。

PowerCLI> Get-Module VMware.VimAutomation.Storage | select Name,Version

 

Name                         Version

----                         -------

VMware.VimAutomation.Storage 6.5.1.5374001

 

 

PowerCLI> gcm *spbm* | sort Noun,Varb | select Module,Name

 

Module                       Name

------                       ----

VMware.VimAutomation.Storage Get-SpbmCapability

VMware.VimAutomation.Storage Get-SpbmCompatibleStorage

VMware.VimAutomation.Storage Set-SpbmEntityConfiguration

VMware.VimAutomation.Storage Get-SpbmEntityConfiguration

VMware.VimAutomation.Storage Get-SpbmFaultDomain

VMware.VimAutomation.Storage Get-SpbmPointInTimeReplica

VMware.VimAutomation.Storage Start-SpbmReplicationFailover

VMware.VimAutomation.Storage Sync-SpbmReplicationGroup

VMware.VimAutomation.Storage Get-SpbmReplicationGroup

VMware.VimAutomation.Storage Get-SpbmReplicationPair

VMware.VimAutomation.Storage Start-SpbmReplicationPrepareFailover

VMware.VimAutomation.Storage Start-SpbmReplicationPromote

VMware.VimAutomation.Storage Start-SpbmReplicationReverse

VMware.VimAutomation.Storage Start-SpbmReplicationTestFailover

VMware.VimAutomation.Storage Stop-SpbmReplicationTestFailover

VMware.VimAutomation.Storage New-SpbmRule

VMware.VimAutomation.Storage New-SpbmRuleSet

VMware.VimAutomation.Storage Import-SpbmStoragePolicy

VMware.VimAutomation.Storage Get-SpbmStoragePolicy

VMware.VimAutomation.Storage Export-SpbmStoragePolicy

VMware.VimAutomation.Storage Remove-SpbmStoragePolicy

VMware.VimAutomation.Storage New-SpbmStoragePolicy

VMware.VimAutomation.Storage Set-SpbmStoragePolicy

 

この環境では、下記の仮想マシンストレージポリシーを利用しています。

PowerCLI> Get-SpbmStoragePolicy | select Name,@{N="VMs";E={($_|Get-VM).Count}} | where {$_.VMs -gt 0}

 

Name                        VMs

----                        ---

vSAN Default Storage Policy  15

vsan-policy-raid5            94

 

vSAN Default Storage Policy というポリシーは、下記のようなルールが設定されています。

(このポリシーはデフォルトで作成されるものですが、いくつか設定変更しているかもしれません)

PowerCLI> Get-SpbmStoragePolicy -Name "vSAN Default Storage Policy" | select -ExpandProperty AnyOfRuleSets | select -ExpandProperty AllOfRules | ft -AutoSize Capability,Value

 

Capability                  Value

----------                  -----

VSAN.hostFailuresToTolerate     1

VSAN.stripeWidth                1

VSAN.forceProvisioning      False

VSAN.proportionalCapacity       0

VSAN.cacheReservation           0

 

vsan-policy-raid5 ポリシーは、とりあえず RAID5 にしようと下記のようなルールで作成しました。

PowerCLI> Get-SpbmStoragePolicy -Name "vsan-policy-raid5" | select -ExpandProperty AnyOfRuleSets | select -ExpandProperty AllOfRules | ft -AutoSize Capability,Value

 

Capability                Value

----------                -----

VSAN.replicaPreference    RAID-5/6 (Erasure Coding) - Capacity

VSAN.proportionalCapacity 0

 

今回は、まだ vSAN Default Storage Policy ポリシーが適用されている VM に、

vsan-policy-raid5 ポリシーを適用したいと思います。

 

vSAN Default Storage Policy を利用している VM は、下記のように確認できます。

VM は 15 台ありますが、とりあえず 5台だけ表示しています。

ついでに、利用しているストレージ容量も表示してみました。

(今回の例では、容量の少ない VM は 0 になっています。)

PowerCLI> (Get-SpbmStoragePolicy "vSAN Default Storage Policy" | Get-VM).Count

15

PowerCLI> Get-SpbmStoragePolicy "vSAN Default Storage Policy" | Get-VM | select Name,{[int]$_.UsedSpaceGB} | sort Name | select -First 5

 

Name               [int]$_.UsedSpaceGB

----               -------------------

ansible01                           11

ha-vm01                              0

hv-n00                               0

hv-n06-w                             2

infra-dns01-master                  20

 

infra-dns01-master という VM のポリシーを vsan-policy-raid5 に変更してみます。

PowerCLI> Get-VM infra-dns01-master | Set-SpbmEntityConfiguration -StoragePolicy "vsan-policy-raid5"

 

Entity                         Storage Policy                 Status          Time Of Check

------                         --------------                 ------          -------------

infra-dns01-master             vsan-policy-raid5              compliant       2018/01/20 14:59:44

 

上記だと、仮想マシン ホームのポリシーだけが変更されます。

(手軽に確認しやすいため、対象 VM の「仮想マシン ストレージ ポリシーの編集」を開いています)

vm-st-policy-01.png

 

下記のように、仮想ディスクもポリシーを変更します。

PowerCLI> Get-VM infra-dns01-master | Get-HardDisk | Set-SpbmEntityConfiguration -StoragePolicy "vsan-policy-raid5"

 

Entity                         Storage Policy                 Status          Time Of Check

------                         --------------                 ------          -------------

Hard disk 1                    vsan-policy-raid5              compliant       2018/01/20 15:10:50

 

仮想マシン ストレージ ポリシーは、下記のように確認することができます。

PowerCLI> Get-VM infra-dns01-master | Get-SpbmEntityConfiguration | ft -AutoSize

 

Entity             Storage Policy    Status    Time Of Check

------             --------------    ------    -------------

infra-dns01-master vsan-policy-raid5 compliant 2018/01/20 14:59:44

 

PowerCLI> Get-VM infra-dns01-master | Get-HardDisk | Get-SpbmEntityConfiguration | ft -AutoSize

 

 

Entity      Storage Policy    Status    Time Of Check

------      --------------    ------    -------------

Hard disk 1 vsan-policy-raid5 compliant 2018/01/20 15:10:50

 

 

vSphere Web Client でも、仮想マシンホームだけでなく仮想ディスクのポリシーが変更されています。

vm-st-policy-02.png

 

ただし、データ配置もポリシーに合わせて変更されるため(今回は RAID0 → RAID5)

まとめてポリシー変更する場合は容量やパフォーマンスについて要注意かもしれません。

 

以上、PowerCLI で仮想マシン ストレージ ポリシーを変更してみる話でした。

ためしに、VMware Photon OS 2.0 で NFS 環境を構築してみようと思います。

今回は、NFS Server / NFS Clent の両方を Photon OS にしてみます。

 

NFS Server

  • ホスト名は ph20-nfs-sv-01
  • IP アドレス/サブネットマスクは 192.168.12.240/24

NFS Client

  • ホスト名は ph20-nfs-client-01
  • IP アドレス/サブネットマスクは 192.168.12.241/24

 

OS の準備。

Photon OS 2.0 は、OVA 版(photon-custom-hw13-2.0-304b817.ova)をデプロイしてあります。

NFS Server / NFS Client はどちらも、ホスト名、ネットワークの設定をすませて、

RPM をこの時点の最新のものにしてあります。

root@photon-machine [ ~ ]# hostnamectl set-hostname ph20-nfs-sv-01

root@photon-machine [ ~ ]# tdnf update -y

root@photon-machine [ ~ ]# reboot

 

NFS Server の構築。

今回は、NFS で共有するために VM に仮想ディスク 2(/dev/sdb)を追加しています。

仮想ディスク 2 は VM に追加ずみです。

(NFS で共有するディレクトリは、仮想ディスクをわけずにディレクトリを指定してもよいです)

 

NFS 共有のためのディスク準備。

ディスク(/dev/sdb)をフォーマットします。

sdb が認識されています。

root@ph20-nfs-sv-01 [ ~ ]# lsblk -l /dev/sd?

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda    8:0    0  16G  0 disk

sda1   8:1    0   3M  0 part

sda2   8:2    0  16G  0 part /

sdb    8:16   0  40G  0 disk

 

パーティションを作成します。これで /dev/sdb1 が作成されます。

root@ph20-nfs-sv-01 [ ~ ]# echo '2048,,L' | sfdisk -uS /dev/sdb

 

ext4 ファイルシステムでフォーマットします。

root@ph20-nfs-sv-01 [ ~ ]# mkfs -t ext4 /dev/sdb1

 

今回は、/opt/share ディレクトリを作成してマウントします。

root@ph20-nfs-sv-01 [ ~ ]# mkdir -p /opt/share

root@ph20-nfs-sv-01 [ ~ ]# chmod -R 755 /opt

root@ph20-nfs-sv-01 [ ~ ]# echo '/dev/sdb1 /opt/share ext4 defaults 0 0' >> /etc/fstab

root@ph20-nfs-sv-01 [ ~ ]# cat /etc/fstab

UUID=c1e929b0-5a75-4783-b99f-f79b4007da4e    /    ext4    defaults 1 1

/dev/sdb1 /opt/share ext4 defaults 0 0

root@ph20-nfs-sv-01 [ ~ ]# mount -a

root@ph20-nfs-sv-01 [ ~ ]# df -h /opt/share

Filesystem      Size  Used Avail Use% Mounted on

/dev/sdb1        40G   49M   38G   1% /opt/share

 

lsblk コマンドでも、/dev/sdb1 がマウントされたことが確認できます。

root@ph20-nfs-sv-01 [ ~ ]# lsblk -l /dev/sd?

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda    8:0    0  16G  0 disk

sda1   8:1    0   3M  0 part

sda2   8:2    0  16G  0 part /

sdb    8:16   0  40G  0 disk

sdb1   8:17   0  40G  0 part /opt/share

 

NFS Server のセットアップ。

nfs-utils をインストールします。

root@ph20-nfs-sv-01 [ ~ ]# tdnf install -y nfs-utils

 

NFS 関連のサービスを有効化 / 起動します。

 

rpcbind

root@ph20-nfs-sv-01 [ ~ ]# systemctl enable rpcbind

Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /lib/systemd/system/rpcbind.service.

Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /lib/systemd/system/rpcbind.socket.

root@ph20-nfs-sv-01 [ ~ ]# systemctl start rpcbind

root@ph20-nfs-sv-01 [ ~ ]# systemctl is-active rpcbind

active

 

nfs-server

root@ph20-nfs-sv-01 [ ~ ]# systemctl enable nfs-server

Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /lib/systemd/system/nfs-server.service.

root@ph20-nfs-sv-01 [ ~ ]# systemctl start nfs-server

root@ph20-nfs-sv-01 [ ~ ]# systemctl is-active nfs-server

active

 

NFS で共有するディレクトリをエクスポートします。

今回は、マウントするアドレスを制限していない(「*」を指定している)ため
exportfs では /opt/share は「<world>」となっています。

ちなみに no_subtree_check は、exportfs 実行時のメッセージ抑止のためにデフォルト値をそのまま記載しています。

root@ph20-nfs-sv-01 [ ~ ]# echo '/opt/share *(rw,no_root_squash,no_subtree_check)' >> /etc/exports

root@ph20-nfs-sv-01 [ ~ ]# cat /etc/exports

/opt/share *(rw,no_root_squash,no_subtree_check)

root@ph20-nfs-sv-01 [ ~ ]# exportfs -r

root@ph20-nfs-sv-01 [ ~ ]# exportfs

/opt/share      <world>

 

iptables の設定。

2049 番ポートあての通信を許可しておきます。

今回の NFS Server / NFS Client は、どちらも 192.168.12.0/24 のネットワーク セグメントにあります。

※環境によっては、systemctl disable iptables でもよいかもしれません。

※今回は、NFS v4 を利用しています。(Photon OS 2.0 のデフォルト)

root@ph20-nfs-sv-01 [ ~ ]# iptables -A INPUT -s 192.168.12.0/24 -p tcp --dport 2049 -j ACCEPT

root@ph20-nfs-sv-01 [ ~ ]# iptables -A INPUT -s 192.168.12.0/24 -p udp --dport 2049 -j ACCEPT

root@ph20-nfs-sv-01 [ ~ ]# iptables-save > /etc/systemd/scripts/ip4save

 

NFS Client でのマウント。

Client 側でも、nfs-utils をインストールします。

root@ph20-nfs-client-01 [ ~ ]# tdnf install -y nfs-utils

 

/opt/share ディレクトリ を作成して、NFS をマウントします。

root@ph20-nfs-client-01 [ ~ ]# mkdir -p /opt/share

root@ph20-nfs-client-01 [ ~ ]# chmod -R 755 /opt

root@ph20-nfs-client-01 [ ~ ]# echo '192.168.12.240:/opt/share /opt/share nfs _netdev 0 0' >> /etc/fstab

root@ph20-nfs-client-01 [ ~ ]# mount -a

root@ph20-nfs-client-01 [ ~ ]# df -h /opt/share

Filesystem                 Size  Used Avail Use% Mounted on

192.168.12.240:/opt/share   40G   48M   38G   1% /opt/share

 

Photon OS 2.0 では、デフォルトは NFS v4 になります。

root@ph20-nfs-client-01 [ ~ ]# nfsstat -m

/opt/share from 192.168.12.240:/opt/share

Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.12.241,local_lock=none,addr=192.168.12.240

 

root@ph20-nfs-client-01 [ ~ ]# nfsstat -l

nfs v4 client        total:      300

------------- ------------- --------

nfs v4 client        write:        3

nfs v4 client         open:        9

nfs v4 client    open_noat:        4

nfs v4 client        close:        4

nfs v4 client      setattr:       10

nfs v4 client       fsinfo:       20

nfs v4 client       access:       24

nfs v4 client      getattr:       81

nfs v4 client       lookup:       24

nfs v4 client  lookup_root:        5

nfs v4 client       create:        2

nfs v4 client     pathconf:       15

nfs v4 client       statfs:        5

nfs v4 client      readdir:        8

nfs v4 client  server_caps:       35

nfs v4 client  delegreturn:        1

nfs v4 client  exchange_id:        5

nfs v4 client create_session:        5

nfs v4 client destroy_session:        4

nfs v4 client     sequence:       22

nfs v4 client reclaim_comp:        5

nfs v4 client   secinfo_no:        5

nfs v4 client destroy_clientid:        4

 

 

ちなみに photon の GitHub にも、少しだけ NFS についての説明があります。

photon/nfs-utils.md at master · vmware/photon · GitHub

 

以上、Photon OS 2.0 の NFS の様子でした。

ESXi は、Kickstart でインストールとその後の設定を一部自動化することができます。

Kickstart は PXE ブートと合わせて利用することが多いですが、

今回は Kickstart スクリプトを自動的に読み込む ESXi のカスタム ISO インストーラを作成してみます。

 

ESXi 6.5 のドキュメントでは下記のあたりです。

カスタムのインストールまたはアップグレードスクリプトを含む、インストーラ ISO イメージの作成

 

ISO イメージ ファイル作成のための環境準備。

ESXi のインストーラは、ESXi 6.5 U1 のもの

(VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso)を利用しています。

これは、あらかじめ MyVMware からダウンロードしておきます。

 

ISO を作成する OS は、Oracle Linux 7 を利用しています。

(ただ、RHEL や CentOS でも同様のはずです。)

[root@ol74 ~]# cat /etc/oracle-release

Oracle Linux Server release 7.4

 

ISO イメージを作成するために、genisoimage をインストールします。

[root@ol74 ~]# yum install -y genisoimage

 

ちなみに、mkisofs コマンドも alternatives で管理されていて 、genisoimage へのリンクになっているようです。

[root@ol74 ~]# alternatives --display mkisofs

mkisofs -ステータスは自動です。

リンクは現在 /usr/bin/genisoimage を指しています。

/usr/bin/genisoimage - 優先度 50

スレーブ mkisofs-mkisofsman: /usr/share/man/man1/genisoimage.1.gz

スレーブ mkisofs-mkhybrid: /usr/bin/genisoimage

スレーブ mkisofs-mkhybridman: /usr/share/man/man1/genisoimage.1.gz

現在の「最適」バージョンは /usr/bin/genisoimage です。

[root@ol74 ~]# which mkisofs

/usr/bin/mkisofs

[root@ol74 ~]# ls -l /usr/bin/mkisofs

lrwxrwxrwx. 1 root root 25  1月  4 21:02 /usr/bin/mkisofs -> /etc/alternatives/mkisofs

[root@ol74 ~]# ls -l /etc/alternatives/mkisofs

lrwxrwxrwx. 1 root root 20  1月  4 21:02 /etc/alternatives/mkisofs -> /usr/bin/genisoimage

 

オリジナルのインストーラのファイルを配置。

あらかじめ この Linux に転送しておいた、

ESXi のインストーラの ISO イメージ ファイルをマウントします。

[root@ol74 ~]# ls -l VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso

-rw-r--r--. 1 root root 348788736  1月  4 14:55 VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso

[root@ol74 ~]# mount -o loop VMware-VMvisor-Installer-6.5.0.update01-5969303.x86_64.iso /mnt/

mount: /dev/loop0 is write-protected, mounting read-only

 

インストーラのファイルを、一時的に利用するディレクトリ(今回は /tmp/ESXi65u1-custom-iso)にコピーします。

[root@ol74 ~]# mkdir /tmp/ESXi65u1-custom-iso

[root@ol74 ~]# cp -pr /mnt/* /tmp/ESXi65u1-custom-iso/

 

コピーが終わったら、ISO イメージ ファイルはアンマウントしておきます。

[root@ol74 ~]# umount /mnt/

 

Kickstart ファイルの配置。

Kickstart で利用するスクリプト(今回は KS.CFG)を作成します。

事情によりネットワーク設定は VLAN ID 指定 + DHCP 設定にしていますが、

静的に IP アドレスを設定することもできます。

ESXi Kickstart サンプル。 · GitHub

 

今回の Kickstart ファイルは、/tmp/ESXi65u1-custom-iso/KS.CFG として作成します。

ファイル名は 8.3形式で大文字にしておきます。

[root@ol74 ~]# vi /tmp/ESXi65u1-custom-iso/KS.CFG

 

boot.cfg の編集(もしくは新規作成)。

Kickstart スクリプトを読み出すように、boot.cfg を編集します。

今回は カスタム ISO で対話式インストールもできるように、

boot.cfg の編集ではなく、boot-ks.cfg というファイルを新規作成します。

[root@ol74 ~]# sed 's|^kernelopt=.*$|kernelopt=runweasel ks=cdrom:/KS.CFG|' /tmp/ESXi65u1-custom-iso/boot.cfg > /tmp/ESXi65u1-custom-iso/boot-ks.cfg

[root@ol74 ~]# grep kernelopt /tmp/ESXi65u1-custom-iso/boot-ks.cfg

kernelopt=runweasel ks=cdrom:/KS.CFG

 

ちなみに新規作成されたファイルの全体は下記のようになっています。

[root@ol74 ~]# cat /tmp/ESXi65u1-custom-iso/boot-ks.cfg

bootstate=0

title=Loading ESXi installer

timeout=5

kernel=/tboot.b00

kernelopt=runweasel ks=cdrom:/KS.CFG

modules=/b.b00 --- /jumpstrt.gz --- /useropts.gz --- /features.gz --- /k.b00 --- /chardevs.b00 --- /a.b00 --- /user.b00 --- /uc_intel.b00 --- /uc_amd.b00 --- /sb.v00 --- /s.v00 --- /ata_liba.v00 --- /ata_pata.v00 --- /ata_pata.v01 --- /ata_pata.v02 --- /ata_pata.v03 --- /ata_pata.v04 --- /ata_pata.v05 --- /ata_pata.v06 --- /ata_pata.v07 --- /block_cc.v00 --- /char_ran.v00 --- /ehci_ehc.v00 --- /elxnet.v00 --- /hid_hid.v00 --- /i40en.v00 --- /igbn.v00 --- /ima_qla4.v00 --- /ipmi_ipm.v00 --- /ipmi_ipm.v01 --- /ipmi_ipm.v02 --- /ixgben.v00 --- /lpfc.v00 --- /lsi_mr3.v00 --- /lsi_msgp.v00 --- /lsi_msgp.v01 --- /misc_cni.v00 --- /misc_dri.v00 --- /mtip32xx.v00 --- /ne1000.v00 --- /nenic.v00 --- /net_bnx2.v00 --- /net_bnx2.v01 --- /net_cdc_.v00 --- /net_cnic.v00 --- /net_e100.v00 --- /net_e100.v01 --- /net_enic.v00 --- /net_fcoe.v00 --- /net_forc.v00 --- /net_igb.v00 --- /net_ixgb.v00 --- /net_libf.v00 --- /net_mlx4.v00 --- /net_mlx4.v01 --- /net_nx_n.v00 --- /net_tg3.v00 --- /net_usbn.v00 --- /net_vmxn.v00 --- /nhpsa.v00 --- /nmlx4_co.v00 --- /nmlx4_en.v00 --- /nmlx4_rd.v00 --- /nmlx5_co.v00 --- /ntg3.v00 --- /nvme.v00 --- /nvmxnet3.v00 --- /ohci_usb.v00 --- /pvscsi.v00 --- /qedentv.v00 --- /qfle3.v00 --- /qflge.v00 --- /qlnative.v00 --- /sata_ahc.v00 --- /sata_ata.v00 --- /sata_sat.v00 --- /sata_sat.v01 --- /sata_sat.v02 --- /sata_sat.v03 --- /sata_sat.v04 --- /scsi_aac.v00 --- /scsi_adp.v00 --- /scsi_aic.v00 --- /scsi_bnx.v00 --- /scsi_bnx.v01 --- /scsi_fni.v00 --- /scsi_hps.v00 --- /scsi_ips.v00 --- /scsi_isc.v00 --- /scsi_lib.v00 --- /scsi_meg.v00 --- /scsi_meg.v01 --- /scsi_meg.v02 --- /scsi_mpt.v00 --- /scsi_mpt.v01 --- /scsi_mpt.v02 --- /scsi_qla.v00 --- /shim_isc.v00 --- /shim_isc.v01 --- /shim_lib.v00 --- /shim_lib.v01 --- /shim_lib.v02 --- /shim_lib.v03 --- /shim_lib.v04 --- /shim_lib.v05 --- /shim_vmk.v00 --- /shim_vmk.v01 --- /shim_vmk.v02 --- /uhci_usb.v00 --- /usb_stor.v00 --- /usbcore_.v00 --- /vmkata.v00 --- /vmkplexe.v00 --- /vmkusb.v00 --- /vmw_ahci.v00 --- /xhci_xhc.v00 --- /emulex_e.v00 --- /btldr.t00 --- /weaselin.t00 --- /esx_dvfi.v00 --- /esx_ui.v00 --- /lsu_hp_h.v00 --- /lsu_lsi_.v00 --- /lsu_lsi_.v01 --- /lsu_lsi_.v02 --- /lsu_lsi_.v03 --- /native_m.v00 --- /rste.v00 --- /vmware_e.v00 --- /vsan.v00 --- /vsanheal.v00 --- /vsanmgmt.v00 --- /tools.t00 --- /xorg.v00 --- /imgdb.tgz --- /imgpayld.tgz

build=

updated=0

 

Boot メニューの編集。

Boot メニューのファイル(isolinux.cfg)を下記のように編集します。

  1. Kickstart むけのエントリ追記。
  2. Kickstart むけのエントリでの自動起動設定を追記。

 

下記のように、Kickstart むけのエントリを追記します。

vi などでの編集でもよいですが、今回はコピーペーストしやすいので

今回は LABEL ks として、boot-ks.cfg を読み込むエントリを追加しています。

MENU LABEL は、もともとの末尾に「Kickstart」を追記しています。

isolinux.cfg-LABEL_ks · GitHub

 

追記の様子です。

[root@ol74 ~]# cat << EOF >> /tmp/ESXi65u1-custom-iso/isolinux.cfg

> LABEL ks

>   KERNEL mboot.c32

>   APPEND -c boot-ks.cfg

>   MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer Kickstart

> EOF

[root@ol74 ~]#

 

Boot メニューのタイムアウト時に、追記した Kickstart むけのエントリ(LABEL ks)が

自動選択されるように isolinux.cfg を編集します。

[root@ol74 ~]# sed -i '/^TIMEOUT.*$/a ONTIMEOUT ks' /tmp/ESXi65u1-custom-iso/isolinux.cfg

 

isolinux.cfg は、結果的に下記のようになりました。

[root@ol74 ~]# cat /tmp/ESXi65u1-custom-iso/isolinux.cfg

DEFAULT menu.c32

MENU TITLE ESXi-6.5.0-20170702001-standard Boot Menu

NOHALT 1

PROMPT 0

TIMEOUT 80

ONTIMEOUT ks

LABEL install

  KERNEL mboot.c32

  APPEND -c boot.cfg

  MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer

LABEL hddboot

  LOCALBOOT 0x80

  MENU LABEL ^Boot from local disk

LABEL ks

  KERNEL mboot.c32

  APPEND -c boot-ks.cfg

  MENU LABEL ESXi-6.5.0-20170702001-standard ^Installer Kickstart

 

ISO イメージ ファイルの作成。

/tmp/ESXi65u1-custom-iso 配下のファイルから、genisoimage コマンドで

Kickstart ファイルを含む ISO イメージファイル(/tmp/ESXi65u1-custom.iso)を作成します。

コマンドラインで指定している isolinux.bin、boot.cat、efiboot.img はオリジナルのインストーラに含まれています。

[root@ol74 ~]# genisoimage -relaxed-filenames -J -R -o /tmp/ESXi65u1-custom.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot /tmp/ESXi65u1-custom-iso

Warning: creating filesystem that does not conform to ISO-9660.

I: -input-charset not specified, using utf-8 (detected in locale settings)

Size of boot image is 4 sectors -> No emulation

Size of boot image is 2048 sectors -> No emulation

  2.94% done, estimate finish Thu Jan  4 23:09:45 2018

  5.87% done, estimate finish Thu Jan  4 23:09:45 2018

  8.81% done, estimate finish Thu Jan  4 23:09:45 2018

11.73% done, estimate finish Thu Jan  4 23:09:53 2018

14.67% done, estimate finish Thu Jan  4 23:09:51 2018

17.60% done, estimate finish Thu Jan  4 23:09:50 2018

20.54% done, estimate finish Thu Jan  4 23:09:49 2018

23.47% done, estimate finish Thu Jan  4 23:09:49 2018

26.40% done, estimate finish Thu Jan  4 23:09:48 2018

29.33% done, estimate finish Thu Jan  4 23:09:48 2018

32.27% done, estimate finish Thu Jan  4 23:09:48 2018

35.20% done, estimate finish Thu Jan  4 23:09:47 2018

38.13% done, estimate finish Thu Jan  4 23:09:47 2018

41.07% done, estimate finish Thu Jan  4 23:09:47 2018

43.99% done, estimate finish Thu Jan  4 23:09:47 2018

46.93% done, estimate finish Thu Jan  4 23:09:47 2018

49.86% done, estimate finish Thu Jan  4 23:09:47 2018

52.80% done, estimate finish Thu Jan  4 23:09:46 2018

55.73% done, estimate finish Thu Jan  4 23:09:46 2018

58.66% done, estimate finish Thu Jan  4 23:09:46 2018

61.59% done, estimate finish Thu Jan  4 23:09:46 2018

64.53% done, estimate finish Thu Jan  4 23:09:46 2018

67.46% done, estimate finish Thu Jan  4 23:09:46 2018

70.39% done, estimate finish Thu Jan  4 23:09:46 2018

73.32% done, estimate finish Thu Jan  4 23:09:46 2018

76.26% done, estimate finish Thu Jan  4 23:09:46 2018

79.19% done, estimate finish Thu Jan  4 23:09:46 2018

82.13% done, estimate finish Thu Jan  4 23:09:46 2018

85.05% done, estimate finish Thu Jan  4 23:09:47 2018

87.99% done, estimate finish Thu Jan  4 23:09:47 2018

90.92% done, estimate finish Thu Jan  4 23:09:47 2018

93.85% done, estimate finish Thu Jan  4 23:09:47 2018

96.79% done, estimate finish Thu Jan  4 23:09:47 2018

99.72% done, estimate finish Thu Jan  4 23:09:47 2018

Total translation table size: 2048

Total rockridge attributes bytes: 14341

Total directory bytes: 6144

Path table size(bytes): 50

Max brk space used 25000

170483 extents written (332 MB)

[root@ol74 ~]#

 

ISO イメージ ファイルが作成されました。

[root@ol74 ~]# ls -l /tmp/ESXi65u1-custom.iso

-rw-r--r--. 1 root root 349149184  1月  4 23:09 /tmp/ESXi65u1-custom.iso

 

作成した ISO イメージの動作確認。

ESXi65u1-custom.iso を利用して ESXi のインストールを開始すると、自動的に Kickstart の処理が進みます。

 

今回は、VMware Workstation で ISO ブートしてみました。

作成した ISO イメージファイルでブートしてみると、

Boot メニューの 3行目に「~ Kickstart」メニューが追加されています。

このままカウントダウンが終わると、自動的に追加したメニューでインストール処理が進みます。

 

esxi-custom-iso-01.png

 

インストール完了時に下記のようなメッセージが表示されますが、

Kickstart スクリプトに「reboot」があるので、少し待つと自動的に再起動されます。

 

esxi-custom-iso-02.png

 

PXE + Kickstart の環境を用意するほどではないけれどもインストールを自動化したい場合や、

ホストプロファイルが利用できなかったり、ホストプロファイルでカバーできないカスタマイズを

したい場合などに便利かもしれません。

 

以上、ESXi のカスタム インストーラを作成してみる話でした。

VMware の Linux ディストリビューションである、Photon OS の紹介です。

 

この投稿は、vExperts Advent Calendar 2017 の 25日目です。

vExperts Advent Calendar 2017 - Adventar

 

Photon OS の Tips を投稿しようかと思ったのですが、

そもそも Photon OS 自体があまり知られていないようなので

今回は 10 点ほど、ポイントをお伝えしてみようと思います。

 

1. Photon OS は、主に Docker コンテナ ホストとして利用されます。

OS ディストリビューション同梱のパッケージにも、Docker が含まれています。

OVA 版には、デフォルトで Docker Engine がインストールされています。

vSphere Integrated Containers (VIC)でも、Photon OS が利用されます。

Photon OS を利用する Photon Controller というプロダクトもあります。

 

PowerCLI Core や、PowerNSX の Docker コンテナを実行するホストとしても利用できるかなと思います。

Docker コンテナの PowerNSX を実行してみる。

PowerCLI Core を Docker コンテナでためしてみる。 (ちょっと古い投稿ですが)

 

2. 最新の GA バージョンは 2.0。

今年の vForum Tokyo が開催のタイミングで、さりげなく GA されてました。

VMware Photon OS 2.0 が GA になりました。

 

3. インストーラの提供も GitHub。

インストーラの ISO / OVA / ディスクイメージも GitHub のリンクからダウンロードできます。

(実際のダウンロードサイトは Bintray)

Downloading Photon OS · vmware/photon Wiki · GitHub

 

不具合があって置き換えられたりするので、新しいリリースがなくてもたまに確認するとよいと思います。

パブリッククラウドむけのイメージも、ここからダウンロードできます。

 

4.ドキュメントは、GitHub にある。

ドキュメントは、GitHub の Wiki(Home · vmware/photon Wiki · GitHub )から見るとよいと思います。

 

ちなみに直接は関係ありませんが、Photon OS を利用する VIC も

最新版のドキュメントは GitHub に公開されています。

vSphere Integrated Containers by VMware®

 

5. コンテナ・イメージのベース OS としても利用できる。

Photon OS も、当然ながら Docker コンテナ イメージのベース OS として利用することができます。

Docker Hub にオフィシャルなイメージもあります。

でもまだ 2.0 が出ていない・・・

https://hub.docker.com/_/photon/

https://hub.docker.com/r/vmware/photon/

 

PowerCLI Core のコンテナイメージの OS も Photon OS です。

https://hub.docker.com/r/vmware/powerclicore/~/dockerfile/

 

6. 仮想アプライアンスとしても利用されている。

Docker コンテナとは関係なく、仮想アプライアンスとしても利用されています。

Linux 仮想アプライアンス版の vCenter Server である「vCenter Server Appliance 6.5」も Photon OS になりました。

他にも、Advent Calendar で登場した HCI Bench も Photon OS でした。

今後は Photon OS の知識の重要度が増してきそうです。

 

7. パッケージ管理は YUM 互換の TDNF。

パッケージ管理には、YUM と互換性のある TDNF というものが採用されています。

VMware Photon OS へのパッケージ追加。(tdnf / yum)

そして yum コマンドも利用できます。

Photon OS 2.0 では yum にリンクがはられていました。

 

パッケージ自体は RPM ですが、Bintray(vmware is using Bintray)で配布されています。

ちなみに Bintray にアカウントを作成すると、RPM の更新通知を受けられたりします。

 

8. サービス管理は systemd。

Linux ディストリビューションの流行にあわせて?、systemd が採用されています。

photon/photon-admin-guide.md at master · vmware/photon · GitHub

 

9. Linux Kernel は新しめのものを採用している。

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

root@photon-machine [ ~ ]# uname -r

4.9.66-1.ph2-esx

 

カスタマイズ内容は GitHub で分かると思います。

photon/SPECS/linux at master · vmware/photon · GitHub

 

10. PMD という管理機構がある。

Photon 独自の管理 API があります。

まだ正直、使い道がわかりませんが、ネットワーク設定やパッケージ管理などができるようです。

VMware Photon OS 2.0 で PMD / pmd-cli を実行してみる。

 

 

以前の Photon OS についての投稿 もよろしければどうぞ。

来年も、Photon OS に親しんでいこうと思います。

 

以上、Photon OS の紹介でした。メリークリスマス。

vr-photon.png

この投稿は、vExperts Advent Calendar 2017 の 18日目です。

vExperts Advent Calendar 2017 - Adventar

 

今年、NSX と PowerNSX についての投稿をしていたので、

そのまとめとして、テナントを大量生産してみようと思います。

PowerNSX でテナント追加の自動化をしてみる。Part.1

PowerNSX でテナント追加の自動化をしてみる。Part.2

PowerNSX でテナント追加の自動化をしてみる。Part.3

PowerNSX でテナント追加の自動化をしてみる。Part.4

PowerNSX でテナント追加の自動化をしてみる。Part.5

 

ここまでで紹介した方法をふまえて、

たとえば 100 テナント作成するときのことを考えてみようと思います。

ve-adv-2017-18-00.png

 

まず今回は、Part.5 までで紹介した内容をもとに下記のようなスクリプトを作成してみました。

実際に NSX の操作を自動化するときはその環境に依存すると思うので、

一つの例ということでご覧いただければと思います。

 

add_tenant.ps1

blog-powernsx-samples/add_tenant.ps1 at master · gowatana/blog-powernsx-samples · GitHub

 

tenant_config.ps1

blog-powernsx-samples/tenant_config.ps1 at master · gowatana/blog-powernsx-samples · GitHub

 

では、スクリプトを実行してみます。

まず PowerNSX で vCenter と NSX Manager に接続しておきます。

PowerNSX での NSX への接続方法について。

 

スクリプト ファイルを配置して・・・

PowerNSX> ls

 

    ディレクトリ: C:\work\blog-powernsx-samples\powernsx-auto-adv

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a----       2017/12/18     22:42           4202 add_tenant.ps1

-a----       2017/12/18     22:43            990 tenant_config.ps1

 

実行。

PowerNSX> .\add_tenant.ps1 .\tenant_config.ps1 55 3

 

このような感じになります。

できあがるネットワーク環境は、Part.5 のものと同じものです。

なお、PowerNSX のプロンプトは、こんな感じで雰囲気を出しています。

PowerNSX プロンプト文字列に NSX / vCenter への接続状態を反映してみる。

ve-adv-2017-18-01.png

 

下記のように、NSX によるネットワークと VM が作成されます。

NSX の論理スイッチに VM が3つ接続された状態になりました。

ve-adv-2017-18-02.png

 

そして極端な例ですが、下記のような要領で、

100 テナント(各テナントに 3 VM)の環境が作れたりします。

※だた実際にこれでうまくいくかは別として・・・

PowerNSX> 1..100 | foreach {

>>   $tenant_no = $_

>>  .\add_tenant.ps1 .\tenant_config.ps1 $tenant_no 3

>> }

 

ということで、理想的なことをいうと下記のような考えができるのではないかと思います。

  • 自動化は、最初の仕込みには時間がかかったとしても、
    大量の作業をミス防止しつつできる。100 回おなじ作業があっても、作業ミスをなくせる。
    PoewrCLI / PowerNSX スクリプトに限らず、vRealize Orchestrator や vRealize Automation の情報 などでも。
  • 定型化することにより、意図的に構成をシンプルにできる。(複雑化を防止できる。)
  • NSXはホスト3台からでもできるが、自動化の仕込みも 3ホストあれば十分はじめられる。
    (ちなみに今回の NSX 環境は 3 ESXi ホストですが、1ホストの NSX 環境でもはじめられます。)

 

以上、今年も PowerNSX 紹介 Advent Calendar でした。

クリスマスなので明るい感じでお伝えしてみました・・・

今年もクリスマスが近づいてきたので、日本の vExpert 2017 メンバーで

アドベントカレンダーをお届けしたいと思います。

vExperts Advent Calendar 2017 - Adventar

 

1日目は、かんたんに vExpert についての紹介と、

今年の VMTN 日本語フォーラムの様子を投稿しようと思います。

 

vExpert とは どんな人?

VMware のコミュニティに貢献した人が、VMware から表彰される制度で、

自薦・他薦により年次で受賞者が選出されます。

貢献の方法は、登壇、著作、ブログ投稿、VMUG / VMTN でのコミュニティ活動、ツール制作など、さまざまです。

受賞者のプロフィールは vExpert Directory で見ることができます。

ちなみに日本の vExpert 2017 の受賞者は 50人くらいです。

 

また、最近では vExpert の受賞者から専門分野ごとのvExpertを選出するサブ プログラムもあり、

2017年は vExpert NSX、vExpert vSAN、vExpert Cloud の 3つのアワードがありました。

 

I am ...

(今年の VMworld / vForum がこんな感じだったので・・・)

私の場合は、おもに VMTN での貢献で vExpert を受賞しているので、

今回は VMTN Japanese フォーラムの 2017 年の様子を投稿しようと思います。

 

以前の投稿より・・・

vExpert 2017 に選ばれました。そして VMTN のユーザーモデレータになりました。

 

VMTN Japanese フォーラムの様子 2017

まず、2015年、2016年の様子を振り返っておこうと思います。

VMware のコミュニティサイトと、日本語 Online Forum の様子。 ※2015年

VMware Community の Japanese Online Forum (VMTN Japan) の様子 2016。

 

もともと、年間 100~120件程度のディスカッション(スレッド)投稿があったのですが、

(サイトへのアクセスが悪くなったこともあり?)

2016年は 70件弱(というか 69件くらい)におちこんでいました。

 

それでは、VMTN(VMware Technology Netowrk)の個人的な3大トピック。

  1. 各国語フォーラムがリニューアルされた。3月
  2. 多すぎた製品別、機能別などのフォーラムが統合された。6月頃~
  3. コミュニティ プラットフォームのソフトウェア Jive のバージョンアップ。
    さりげなくWebサイトのパフォーマンスが改善された。アイコンが丸くなった。6月

 

そして、VMTN Japanese フォーラムの今年のトピックをいくつか。

  1. コーポレートサイト(https://www.vmware.com/jp.html)からの「コミュニティ」直リンク復活!!
  2. VMTN の画面上の地球アイコンから、直接 Japanese フォーラムに行けるようになった。
  3. 各国語フォーラムのリニューアルにともない、Japan → 新規 Japanese フォーラムに。
    VMTN Japanese フォーラムがリニューアルされたので、よろしくおねがいします。

 

各国語フォーラムのリニューアルにより、以前よりも日本語フォーラムにアクセスしやすくなりました。

vmtnj2017.png

 

サイトへの導線が復活したので、今年は 2016年(69件)よりもフォーラムの活性化が期待できると思い、

はりきって去年の投稿と同じ方法で投稿数をカウントしてみると・・・

 

今年は 68件・・・なんと去年とほとんど変わってませんでした。

月ごとの件数を見ても、サイトリニューアルや導線復活の効果は微妙な感じです。

PS C:\> $rss = Invoke-WebRequest -Method Get -Uri "https://communities.vmware.com/community/feeds/threads?community=7560"

PS C:\> $content = [xml]$rss.Content

PS C:\> $content.rss.channel.title

VMware Communities : Discussion List - Japanese

PS C:\> $items = $content.rss.channel.Item

PS C:\> $items2017 = $items | select @{N="Date";E={(Get-Date $_.date)}},title | where {$_.Date -ge "2016-12-01"}

PS C:\> $items2017.Count

68

PS C:\> $items2017 | group {Get-Date $_.Date -f "yyyy-MM"} | select Name,Count | sort Name | ft -AutoSize

 

Name    Count

----    -----

2016-12     5

2017-01     5

2017-02     4

2017-03     5

2017-04     3

2017-05     5

2017-06     5

2017-07     8

2017-08    13

2017-09     4

2017-10     6

2017-11     5

 

 

PS C:\>

 

考えてみると各国語フォーラムのリニューアルは、サイト的にはフォーラムが新規作成されたので、

これまでの Japan フォーラムのフォロー設定がさりげなくリセットされています。

以前にフォローしていた人の通知は外れているので、VMTN を思い出す機会が減っているのかもしれません。

 

ちなみに、タイトル ベースでディスカッション投稿を見てみると下記のような感じでした。

PS C:\> $items2017

 

Date                title

----                -----

2017/11/28 17:27:51 AirWatchコンソール画面のプロファイル名として使える文字の仕様に変更がありましたでしょうか?

2017/11/23 21:51:26 Workstation上のESXiにインストールしたCentOSがPower ONできない

2017/11/17 8:45:06  vCenter ConverterでP2v後の起動でキー入力できない。

2017/11/07 20:43:39 vSphere HAの構成オプション「仮想マシンの監視」機能について

2017/10/18 16:58:11 Get-Logでvm-supportを取得中、接続が切断される

2017/11/01 9:26:17  ゲストOSとしてWindows2000ProfessionalやWindowsXPHomeがインストールできない

2017/10/27 20:03:19 同じEVCモードのHAクラスタ間のESXiホストの移動について

2017/10/16 18:20:18 PowerCLIでのESXiホスト間のファイル送受信について

2017/10/10 21:09:08 コメンドラインでの仮想マシン構成変更について

2017/10/03 21:47:00 vCenter Server再インストールのライセンスについて

2017/10/04 10:20:37 Win2003をESXi5.1へのP2Vについて

2017/07/02 19:07:33 AMD APU(A10-7850K、A4-5300)にてvmwareを実行していると、ホストOSにBSOD CLOCK_WATCHDOG_TIMEOUT(101)が発生します

2017/09/28 16:28:36 ゲストOSの再起動に失敗する

2017/09/27 16:16:28 ネットワーク接続(ゲスト:Cent OS ⇔ ホスト:Windows7)

2017/09/14 23:09:29 vcloud directorで作成した仮想マシンを 別のリソースプール(ルートリソースプール)にvmotionした場合の影響

2017/09/14 16:49:10 Taskのinfo.descriptionIdプロパティについて

2017/08/30 21:04:30 P2V速度を上げる方法について

2017/08/30 16:01:25 VMWarePlayerでのマルチモニタ使用について

2017/08/31 14:26:03 BusLogicのエラーが出ます

2017/08/23 18:32:19 VMware ESXi 6.5.0d VM(Windows Server 2016)でインストール後エラー

2017/08/25 0:20:38  vmware HAのDRS振り分け方法

2017/08/23 14:08:50 vCenter Server for Essential

2017/08/22 16:47:54 アプリケーション監視のSDKについて

2017/08/21 10:22:30 vSAN 6.6 ネットワーク設定について

2017/08/16 23:39:45 gest OSのUbuntuで sudo apt-get install dkmsを行った際、VirtualBox側で行う必要のある操作は何でしょうか

2017/08/10 13:22:57 ハートビートデータストアを設定しない場合の挙動について

2017/08/15 18:44:40 vCenterからvLBとVMのvNIC設定を取得した際のNetwork Adapterの表示順序について

2017/08/03 15:24:19 ESXi 6.5を再起動すると必ず通信ができなくなる

2017/08/08 10:11:06 vSphere 6.5でvCenter Server Applianceを停止しているとvSphere HAが動作しない

2017/05/18 18:00:58 Exsi6.0で サーバー用 Tesla GPU アクセラレータ NVIDIA Tesla M40 or M4 or P100 が対応可能かどうか

2017/07/30 14:31:09 仮想マシン windows server 2016 Standard へ view connection server インストール中エラー

2017/07/24 11:20:51 コマンドでデプロイ

2017/07/13 20:05:28 USBデバイスが認識されない

2017/07/09 8:55:09  ゲストosで音割れ

2017/06/15 17:46:12 Windows10(x64)にThinAppで仮想化したMicrosoft Visio2013/Project2013を展開したい。ライセンスエラーを回避できず動かせない。

2017/07/11 12:35:55 vSphere 6.5のサポート期限について

2017/07/06 16:53:23 VmwareEsxi上の仮想マシンのシャットダウン、電源OFFの確認について

2017/07/01 15:55:45 VMware ESXi 6.5.0d で OS X 仮想マシンの使用

2017/06/28 10:21:38 VMPlayerでのディスク圧縮方法

2017/06/22 13:21:20 仮想サーバからFC-VTLを使用可能でしょうか

2017/06/20 17:09:37 ESXi6.xでのNTP設定がリセットされてしまう。

2017/06/07 11:10:51 SCP失敗

2017/05/19 14:30:07 vCenterServerのサービスを起動できない

2017/05/22 20:42:35 KB2068353 HBAデバイス タイムアウト値について

2017/05/16 1:40:07  フォルダ共有

2017/05/10 19:44:54 vCenterのサービスが起動できない

2017/04/04 22:50:33 VMware(R) Workstation 12 Player vmware-authd.exe にてハンドルリーク

2017/04/11 16:50:04 VMFS 空き領域

2017/04/08 8:34:28  VMware Workstation 12 Playerの共有フォルダの「ネットワークドライブに再接続できませんでした」について

2017/03/27 14:43:10 ESXiの過去のCPU使用率

2017/03/14 9:00:47  VMTN Japanese フォーラムがリニューアルされました(201703/14)

2017/03/02 4:08:29  ESXi 6.0 で USB3.0 HDD接続後データストア登録

2017/03/03 10:39:38 VMが起動出来なくなった

2017/02/22 15:17:37 Available Mbytesカウンタの変化とバルーニング機能について

2017/03/01 9:43:29  Resouce Poolの作成削除履歴

2017/02/27 11:07:08 全体的に重い場合の調査方法について

2017/02/16 14:15:22 Resource Pool

2017/02/15 16:20:07 2要素認証

2017/01/28 13:58:43 ESXiをNVMeSSD使い、RAID1でインストールしたい。

2017/01/28 11:12:00 VMwareWorkStationV12.5で起動時にエラーが出る

2017/01/06 18:06:33 Site Recovery Manager 5.8を6.1へアップグレードする手順について

2017/01/07 10:47:17 VMware Fusion 3.1.4 Mac OS / 仮想マシンWindows 起動モード?

2017/01/12 19:25:52 vsphere5.1からvsphere6.5のアップグレード方法について

2016/12/02 23:36:17 VMwareESXi 5.1 NIC チーミング構成で のNIC交換

2016/12/20 17:25:22 コマンドを使用したディスクの障害検知について

2016/12/15 14:13:13 vim-cmdのESXi6.0 update 2でのサポート

2016/12/01 14:32:34 vmdkファイルの圧縮時にCould not openで圧縮ができない

2016/12/02 10:06:55 vSphere5.5でのStorage vMotion要件について

 

PS C:\>

 

投稿件数は以前より減っていますが、最近あらたに投稿、回答されるかたもいらっしゃるので

地道にもりあげていければと思います。

ちなみに、英語の製品別フォーラム(NSX とか、vSAN とか)のほうは相変わらず活発で、

実はよく見ると日本人らしき(英語の)問い合わせも ちらほら見かけます。

 

VMTN Japanese フォーラムを利用しよう!

ということで、VMTN Japanese フォーラムの利用方法を宣伝しておこうと思います。

 

まず VMTN の利用方法です。

気軽に、フォーラムにて質問投稿、返信してみてもらえればと思います。

【最初にお読みください】VMTN Japanese フォーラムの利用方法

 

そして以前に VMTN 日本語フォーラムをフォローしていた人は、ぜひまたフォローお願いします。

VMTN フォーラムの更新情報を受け取る方法

 

以上、VMTN Japanese フォーラムの 2017年の様子でした。

Photon OS 2.0 では、SysRq キーが無効にされているようです。

root@vm06 [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

root@vm06 [ ~ ]# grep CONFIG_MAGIC_SYSRQ /boot/config-*-esx

# CONFIG_MAGIC_SYSRQ is not set

 

Photon OS を マジック SysRq キーでハングさせたいことがあったので、

今回は SRPM を利用して、Kernel の RPM をビルドしてみようと思います。

(vSphere HA の動作確認で使用しようかなと・・・)

 

Photon OS の Source RPM ファイル(SRPM)は、下記のあたりからダウンロードできます。

※rpm ファイルのリストが表示されるまで時間がかかることがあります。

https://bintray.com/vmware/photon_srpms_2.0_x86_64/packages#files

 

ビルドで必要な RPM のインストール。

依存関係があったり、ビルドに必要だったりする RPM を、

あらかじめインストールしておきます。今回は Kernel なので特に多いです。

spec ファイルに記載された依存 RPM だけでは不足していて、エラーになります。

※長いので RPM ごとにエスケープで改行していますが、tdnf install は1行で実行できます。

※RPM の記載順序には、特に意味はありません。

tdnf install -y \

rpm-build \

Linux-PAM-devel \

glib-devel \

kbd \

kmod-devel \

libdnet-devel \

libmspack-devel \

openssl-devel \

procps-ng-devel \

xerces-c-devel \

xml-security-c-devel \

tar \

patch \

make \

gcc \

glibc-devel \

linux-api-headers \

binutils \

diffutils \

elfutils

 

SRPM のダウンロードと展開。

まず SRPM をダウンロードします。

root@vm06 [ ~ ]# curl -L https://bintray.com/vmware/photon_srpms_2.0_x86_64/download_file?file_path=linux-esx-4.9.60-1.ph2.src.rpm -o linux-esx-4.9.60-1.ph2.src.rpm

root@vm06 [ ~ ]# ls -l linux-esx-4.9.60-1.ph2.src.rpm

-rw-r----- 1 root root 93291006 Nov 21 14:20 linux-esx-4.9.60-1.ph2.src.rpm

 

今回は、Kernel なので この SRPM を使用します。

Photon OS 2.0 GA 同梱の RPM より ひとつ新しいバージョンがリリースされていたので

それを利用します。

root@vm06 [ ~ ]# rpm -qpi linux-esx-4.9.60-1.ph2.src.rpm

Name        : linux-esx

Version     : 4.9.60

Release     : 1.ph2

Architecture: x86_64

Install Date: (not installed)

Group       : System Environment/Kernel

Size        : 93363301

License     : GPLv2

Signature   : RSA/SHA1, Thu 09 Nov 2017 05:44:26 AM UTC, Key ID c0b5e0ab66fd4949

Source RPM  : (none)

Build Date  : Thu 09 Nov 2017 04:00:50 AM UTC

Build Host  : photon-d2dd6bc2fb2e

Relocations : (not relocatable)

Vendor      : VMware, Inc.

URL         : http://www.kernel.org/

Summary     : Kernel

Description :

The Linux kernel build for GOS for VMware hypervisor.

 

RPM をビルドする Photon OS に、SRPM をインストールします。

いろいろ RPM を追加するので、ビルドした Kernel をインストールするゲストとは別に、

ビルド用のゲストを用意したほうがよいと思います。

root@vm06 [ ~ ]# rpm -ivh linux-esx-4.9.60-1.ph2.src.rpm

 

/usr/src/photon ディレクトリ配下に、ソースと .spec ファイルが展開されます。

root ではない OS ユーザ(今回は gowatana)でビルドしようと思うので、

/usr/src/photon から下のファイルの所有者を変更してしまいます。

 

 

root@vm06 [ ~ ]# chown -R gowatana:users /usr/src/photon

root@vm06 [ ~ ]# ls -l /usr/src/photon

total 8

drwxr-x--- 2 gowatana users 4096 Nov 21 14:24 SOURCES

drwxr-x--- 2 gowatana users 4096 Nov 21 14:24 SPECS

root@vm06 [ ~ ]# su - gowatana

gowatana [ ~ ]$

 

ソースのカスタマイズ。

ファイルを編集して、MAGIC_SYSRQ を有効にします。

今回は、patch などは作成せず、直接ファイルを編集してしまいます。

 

 

gowatana [ ~ ]$ cp /usr/src/photon/SOURCES/config-esx config-esx.orig

gowatana [ ~ ]$ vi /usr/src/photon/SOURCES/config-esx

gowatana [ ~ ]$ diff config-esx.orig /usr/src/photon/SOURCES/config-esx

2895c2895,2896

< # CONFIG_MAGIC_SYSRQ is not set

---

> CONFIG_MAGIC_SYSRQ=yes

> CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1

gowatana [ ~ ]$

 

インストールするときに正式な RPM と衝突しないように、

今回はパッケージの名前を linux-esx-custom に変更してしまいます。

 

 

gowatana [ ~ ]$ cp /usr/src/photon/SPECS/linux-esx.spec linux-esx.spec.orig

gowatana [ ~ ]$ vi /usr/src/photon/SPECS/linux-esx.spec

gowatana [ ~ ]$ diff linux-esx.spec.orig /usr/src/photon/SPECS/linux-esx.spec

3c3

< Name:           linux-esx

---

> Name:           linux-esx-custom

gowatana [ ~ ]$

 

RPM のビルド。

RPM をビルドします。

gowatana [ ~ ]$ rpmbuild -ba /usr/src/photon/SPECS/linux-esx.spec

 

しばらく待つと、rpm ファイルが生成されます。

 

 

gowatana [ ~ ]$ ls -l /usr/src/photon/RPMS/x86_64/

total 231576

-rw-r----- 1 gowatana users   8091691 Nov 21 15:09 linux-esx-custom-4.9.60-1.x86_64.rpm

-rw-r----- 1 gowatana users 210508901 Nov 21 15:14 linux-esx-custom-debuginfo-4.9.60-1.x86_64.rpm

-rw-r----- 1 gowatana users  10952427 Nov 21 15:09 linux-esx-custom-devel-4.9.60-1.x86_64.rpm

-rw-r----- 1 gowatana users   7574551 Nov 21 15:09 linux-esx-custom-docs-4.9.60-1.x86_64.rpm

 

作成した RPM のインストール。

ビルドした RPM をインストールしてみます。

root@vm02 [ ~ ]# rpm -qa | grep linux-esx

linux-esx-4.9.53-5.ph2.x86_64

root@vm02 [ ~ ]# uname -r

4.9.53-5.ph2-esx

 

インストールします。

(ビルドで使用したサーバとは別のサーバにインストールしています)

 

 

 

root@vm02 [ ~ ]# ls -lh linux-esx-custom-4.9.60-1.x86_64.rpm

-rw-r----- 1 root root 7.8M Nov 21 15:19 linux-esx-custom-4.9.60-1.x86_64.rpm

root@vm02 [ ~ ]# rpm -ivh linux-esx-custom-4.9.60-1.x86_64.rpm

Preparing...                          ################################# [100%]

Updating / installing...

   1:linux-esx-custom-4.9.60-1        ################################# [100%]

root@vm02 [ ~ ]# rpm -qa | grep linux-esx

linux-esx-custom-4.9.60-1.x86_64

linux-esx-4.9.53-5.ph2.x86_64

 

カーネルパラメータでの sysrq 有効化。

カーネルのオプションだけでは、sysrq キーは有効になっていません。

さらに、sysctl で kernel.sysrq = 1 を設定する必要があります。

root@vm02 [ ~ ]# sysctl -a | grep sysrq

kernel.sysrq = 0

sysctl: reading key "net.ipv6.conf.all.stable_secret"

sysctl: reading key "net.ipv6.conf.default.stable_secret"

sysctl: reading key "net.ipv6.conf.eth0.stable_secret"

sysctl: reading key "net.ipv6.conf.lo.stable_secret"

root@vm02 [ ~ ]#

 

これは、systemd の RPM に含まれる

50-security-hardening.conf ファイルの設定で無効化(kernel.sysrq=0)されているので、

root@vm02 [ ~ ]# cat /etc/sysctl.d/50-security-hardening.conf

#Enabling the strongest form of native Linux Address Space Layout Randomization (ASLR).

kernel.randomize_va_space=2

#Restrict revealing kernel addresses

kernel.kptr_restrict=2

#Preventing non-root users from viewing the kernel ring buffer.

kernel.dmesg_restrict = 1

# To avoid potential information disclosure

net.ipv4.tcp_timestamps = 0

# disabling an unused feature

kernel.sysrq=0

root@vm02 [ ~ ]# rpm -qf /etc/sysctl.d/50-security-hardening.conf

systemd-233-9.ph2.x86_64

 

ファイルを編集してしまいまいます。

root@vm02 [ ~ ]# sed -i "s/kernel.sysrq=0/kernel.sysrq=1/" /etc/sysctl.d/50-security-hardening.conf

root@vm02 [ ~ ]# grep kernel.sysrq /etc/sysctl.d/50-security-hardening.conf

kernel.sysrq=1

 

sysctl の /etc/sysctl.conf ファイルがデフォルトでは作成されないので、
ファイルが含まれる distrib-compat をインストールしておくと、

sysctl コマンドのエラーがなくなります。

※実際はただファイル作成しても大丈夫です。

root@vm06 [ ~ ]# sysctl -p

sysctl: cannot open "/etc/sysctl.conf": No such file or directory

root@vm06 [ ~ ]# yum install -y distrib-compat

root@vm06 [ ~ ]# sysctl -p

root@vm06 [ ~ ]#

 

OS を再起動します。

※このあと EFI セキュアブートを無効にするので、シャットダウンでもよいです。

root@vm02 [ ~ ]# reboot

 

VM での IEF セキュアブート無効化。

OVA 版の Photon OS 2.0 だと、EFI のセキュアブートが有効で、

今回作成したカーネルの RPM がひっかかってしまうはずです。

ということで、今回は VM でセキュアブートを無効にしておきます。

esxi-vm-secureboot-off.png

 

sysrq キー有効化の確認。

OS を再起動すると、新しいカーネルを読み込まれていて、

さらに kernel.sysrq = 1 が設定されています。

root@vm02 [ ~ ]# uname -r

4.9.60-1-esx

root@vm02 [ ~ ]# sysctl -a | grep sysrq

kernel.sysrq = 1

sysctl: reading key "net.ipv6.conf.all.stable_secret"

sysctl: reading key "net.ipv6.conf.default.stable_secret"

sysctl: reading key "net.ipv6.conf.eth0.stable_secret"

sysctl: reading key "net.ipv6.conf.lo.stable_secret"

root@vm02 [ ~ ]# cat /proc/sys/kernel/sysrq

1

 

OS をクラッシュさせたりできるようになりました。

root@vm02 [ ~ ]# echo c > /proc/sysrq-trigger

 

たとえば、vSphere HA の「仮想マシンの監視」の動作確認に使用したりできます。

guest-sysrq-crash.png

 

以上、Photon OS 2.0 で マジック SysRq キーを利用できるようにしてみる話でした。

Photon OS 2.0 から、PMD(Photon Management Daemon)と

その CLI である pmd-cli が導入されたので使用してみます。

 

Photon Management Daemon Command-line Interface (pmd-cli)

photon/pmd-cli.md at master · vmware/photon · GitHub

 

PMD のインストール。

pmd のパッケージをインストールして、pmd サービスを起動します。

root@photon-machine [ ~ ]# tdnf install -y pmd

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64)'

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64) Updates'

Refreshing metadata for: 'VMware Photon Extras 2.0(x86_64)'

photon-extras                              106    100%

Installing:

libgpg-error             x86_64       1.27-1.ph2       photon       118.88k 121733

cyrus-sasl               x86_64       2.1.26-13.ph2    photon       558.79k 572200

libgcrypt                x86_64       1.8.1-1.ph2      photon         1.18M 1235073

perl                     x86_64       5.24.1-4.ph2     photon        49.41M 51811861

libxml2                  x86_64       2.9.6-1.ph2      photon         7.30M 7651659

haveged                  x86_64       1.9.1-3.ph2      photon       186.28k 190753

openldap                 x86_64       2.4.44-3.ph2     photon         1.52M 1598869

iputils                  x86_64       20151218-4.ph2   photon       262.51k 268810

ntp                      x86_64       4.2.8p10-4.ph2   photon         6.28M 6581037

pcre                     x86_64       8.40-4.ph2       photon       699.09k 715866

pmd-libs                 x86_64       0.0.5-3.ph2      photon       330.13k 338056

lightwave-client-libs    x86_64       1.3.1-5.ph2      photon         2.20M 2308680

jansson                  x86_64       2.10-1.ph2       photon        76.67k 78510

copenapi                 x86_64       0.0.2-3.ph2      photon        62.80k 64304

likewise-open            x86_64       6.2.11.4-3.ph2   photon        11.52M 12078104

netmgmt                  x86_64       1.1.0-9.ph2      photon       149.77k 153360

c-rest-engine            x86_64       1.0.4-3.ph2      photon       107.93k 110520

pmd                      x86_64       0.0.5-3.ph2      photon       527.47k 540133

 

Total installed size:  82.42M 86419528

 

Downloading:

pmd                                     173185    100%

c-rest-engine                            49211    100%

netmgmt                                  72283    100%

likewise-open                          3899636    100%

copenapi                                 35650    100%

jansson                                  42100    100%

lightwave-client-libs                   737040    100%

pmd-libs                                 93441    100%

pcre                                    301344    100%

ntp                                    3637335    100%

iputils                                 129855    100%

openldap                                890618    100%

haveged                                  75010    100%

libxml2                                1589185    100%

perl                                  18290806    100%

libgcrypt                               510631    100%

cyrus-sasl                              298403    100%

libgpg-error                             61382    100%

Testing transaction

Running transaction

Installing/Updating: jansson-2.10-1.ph2.x86_64

Installing/Updating: copenapi-0.0.2-3.ph2.x86_64

Installing/Updating: libgpg-error-1.27-1.ph2.x86_64

Installing/Updating: libgcrypt-1.8.1-1.ph2.x86_64

Installing/Updating: iputils-20151218-4.ph2.x86_64

Installing/Updating: cyrus-sasl-2.1.26-13.ph2.x86_64

Installing/Updating: openldap-2.4.44-3.ph2.x86_64

Installing/Updating: perl-5.24.1-4.ph2.x86_64

Installing/Updating: ntp-4.2.8p10-4.ph2.x86_64

Installing/Updating: libxml2-2.9.6-1.ph2.x86_64

Installing/Updating: haveged-1.9.1-3.ph2.x86_64

Installing/Updating: likewise-open-6.2.11.4-3.ph2.x86_64

Waiting for lwreg startup.

ok

Installing settings from /opt/likewise/share/config/accounts.reg...

Installing settings from /opt/likewise/share/config/dcerpcd.reg...

Installing settings from /opt/likewise/share/config/eventlogd.reg...

Installing settings from /opt/likewise/share/config/lsassd.reg...

Installing settings from /opt/likewise/share/config/lwiod.reg...

Installing settings from /opt/likewise/share/config/lwreg.reg...

Installing settings from /opt/likewise/share/config/netlogond.reg...

Installing settings from /opt/likewise/share/config/privileges.reg...

Installing settings from /opt/likewise/share/config/rdr.reg...

Starting service dependency: netlogon

Starting service dependency: lwio

Starting service dependency: rdr

Starting service: lsass

Installing/Updating: lightwave-client-libs-1.3.1-5.ph2.x86_64

Installing/Updating: pmd-libs-0.0.5-3.ph2.x86_64

Installing/Updating: pcre-8.40-4.ph2.x86_64

Installing/Updating: netmgmt-1.1.0-9.ph2.x86_64

Installing/Updating: c-rest-engine-1.0.4-3.ph2.x86_64

Installing/Updating: pmd-0.0.5-3.ph2.x86_64

Generating a 2048 bit RSA private key

................................+++

..+++

writing new private key to '/etc/pmd/server.key'

-----

Generating RSA private key, 2048 bit long modulus

..........................................................+++

...............................................................................................+++

e is 65537 (0x10001)

writing RSA key

 

Complete!

root@photon-machine [ ~ ]#

 

pmd サービスを起動します。

root@photon-machine [ ~ ]# systemctl start pmd

root@photon-machine [ ~ ]# systemctl enable pmd

root@photon-machine [ ~ ]# systemctl status pmd

● pmd.service - photon management daemon

   Loaded: loaded (/lib/systemd/system/pmd.service; enabled; vendor preset: enabled)

   Active: active (running) since Fri 2017-11-03 17:45:40 UTC; 4s ago

Main PID: 715 (pmd)

    Tasks: 18 (limit: 4915)

   CGroup: /system.slice/pmd.service

           mq715 /usr/bin/pmd

 

Nov 03 17:45:40 photon-machine systemd[1]: Started photon management daemon.

 

なぜか pmd サービスが起動できないことがあるのですが、

その場合は restServer.log ファイルのパーミッションが下記になっているか

確認してみるとよいと思います。

root@photon-machine [ ~ ]# ls -l /var/log/pmd/restServer.log

-rw-r--r-- 1 pmd pmd 0 Nov  3 17:45 /var/log/pmd/restServer.log

 

pmd-cli のインストール。

pmd-cli の RPM をインストールします。

すでに pmd で依存 PRM がインストール済みとなっているため

pmd-cli だけがインストールされます。

root@photon-machine [ ~ ]# tdnf install -y pmd-cli

 

Installing:

pmd-cli                  x86_64       0.0.5-3.ph2      photon        58.79k 60200

 

Total installed size:  58.79k 60200

 

Downloading:

pmd-cli                                  33148    100%

Testing transaction

Running transaction

Installing/Updating: pmd-cli-0.0.5-3.ph2.x86_64

 

Complete!

root@photon-machine [ ~ ]#

 

pmd-cli がインストールされました。

オプションなしで実行すると、help が見られます。

ネットワーク(net)、RPM パッケージ(pkg)、ユーザ(usr)、firewall の

情報確認や設定ができるようです。

そして pmd が起動しているリモートサーバに実行することもできます。

root@photon-machine [ ~ ]# pmd-cli

These are the current registered components

'firewall' : firewall management

'net' : network management

'pkg' : package management

'usr' : user management

You need to specify a component and a command

usage: pmd-cli [connection/auth options] <component> <command> [command options]

 

For local connections, use: pmd-cli <component> <cmd> <options>.

Current logged in user permissions will apply when executing commands.

This is the same as specifying --servername localhost.

For remote servers, use one of 3 methods mentioned below. Password is never sent out to the remote in any of the below auth scenarios.

When --user is specified, you will be prompted for password.

1. System user.

   pmd-cli --servername <server> --user <user>

2. Lightwave user (pmd server must be joined or should be part of embedded lightwave)

   pmd-cli --servername <server> --user <user> --domain <lightwave domain>

3. Kerberos spn (client must successfully run kinit before using this method)

   pmd-cli --servername <server> --spn <service principal name>

Error(805) : Unknown error

root@photon-machine [ ~ ]#

 

pmd-cli を実行してみる。

pmd-cli は、途中までのコマンドラインを実行することで下記のようにヘルプを見ながら操作できます。

root@photon-machine [ ~ ]# pmd-cli net

Unknown command net

Usage: netmgr command <command options ...>

 

For help: netmgr -h or netmgr --help

For version: netmgr -v or netmgr --version

 

List of commands:

 

link_info        get or set interface mac address, mtu, link state, or link mode

ip4_address      get or set interface IPv4 address and optionally default gateway

ip6_address      add or delete IPv6 address(es) and optionally default gateway for interface

ip_route         add or delete static IP route for the interface

dns_servers      get or set DNS mode, list of DNS servers

dns_domains      get or set list of DNS domains

dhcp_duid        get or set DHCP DUID, optionally per interface

if_iaid          get or set interface IAID

ntp_servers      get or set NTP servers list

hostname         get or set system hostname

wait_for_link    wait for the interface to come up

wait_for_ip      wait for the interface to acquire a valid IP address

error_info       get error information from error code

net_info         get or set network configuration parameters

set_duid         This is deprecated, will be removed in the future. Please use 'dhcp_duid --set'

set_iaid         This is deprecated, will be removed in the future. Please use 'if_iaid --set'

get_dns_servers  This is deprecated, will be removed in the future. Please use 'dns_servers --get'

Error(33) : Unknown error

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# pmd-cli net ip4_address

Usage:

ip4_address --get --interface <ifame>

ip4_address --set --interface <ifname> --mode dhcp|static|none --addr <IPv4Address/prefix> --gateway <Gateway Address>

Error(33) : Unknown error

root@photon-machine [ ~ ]#

 

IP アドレスの設定情報を表示してみました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.207/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]#

 

たとえば、RPM のインストールもできます。

ためしに jq コマンドの RPM をインストールしてみました。

root@photon-machine [ ~ ]# pmd-cli pkg install -y jq

 

Installing:

jq                       x86_64       1.5-3.ph2        photon       340.52k 348689

 

Total installed size: 340.52k 348689

 

Downloading:

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# rpm -q jq

jq-1.5-3.ph2.x86_64

 

そして、pmd が起動している別の Photon OS にも jq をインストールしてみます。

これまでの pmd-cli の結果にあるように、このサーバは 192.168.12.207 ですが、

そこからリモート(192.168.12.208)の Photon に pmd-cli を実行してみます。

 

リモート(192.168.12.208)の Photon でも pmd を起動してあります。

root@photon-machine [ ~ ]# ssh root@192.168.12.208 "cat /etc/photon-release;systemctl is-active pmd"

Password:

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

active

root@photon-machine [ ~ ]#

 

ただ、これだけだと pmd-cli では接続できないようです。

root@photon-machine [ ~ ]# pmd-cli --servername 192.168.12.208 --user root pkg install -y jq

Password:

 

Error(382312513) : (null)

Error(382312513) : Failed to connect to the remote host, reason = rpc_s_connect_timed_out (0x16c9a041).

root@photon-machine [ ~ ]#

 

たまたまうちにあった Log Insight で NSX 分散ファイアウォールのログを取得できるので見てみると、

pmd-cli をリモート実行したタイミングで TCP 2016 番ポート宛のアクセスがあるようでした。

vrli-pmd-port.png

 

宛先 Photon 側(192.168.12.208)で見てみると、

たしかに pmd が TCP 2016番ポートをリスニングしています。

※さりげなくここで lsof と pmd-cli をインストールしています。

root@photon-machine [ ~ ]# ip a | grep 192

    inet 192.168.12.208/24 brd 192.168.12.255 scope global dynamic eth0

root@photon-machine [ ~ ]# tdnf install -y --quiet lsof pmd-cli

root@photon-machine [ ~ ]# lsof -i -P | grep pmd

pmd       690             pmd    4u  IPv4   8867      0t0  TCP *:2081 (LISTEN)

pmd       690             pmd    5u  IPv6   8868      0t0  TCP *:2081 (LISTEN)

pmd       690             pmd   10u  IPv4   8886      0t0  TCP *:2016 (LISTEN)

pmd       690             pmd   11u  IPv6   8888      0t0  TCP *:2016 (LISTEN)

 

Photon の iptables でそのポートは解放されていないので、

今回は pmd-cli firewall ~ のローカル実行でポートを開放してしまいます。

pmd は TCP 2081 番もリスニングしていますが、ファイアウォールのログでは通信がなかったので

今回は 2016 番だけ解放してみました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.208/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]# pmd-cli firewall rules --chain INPUT --add "-p tcp -m tcp --dport 2016 -j ACCEPT"

root@photon-machine [ ~ ]#

 

iptables のポートを開放すると、192.168.12.207 から pmd-cli をリモート実行できました。

root@photon-machine [ ~ ]# pmd-cli net ip4_address --get --interface eth0

IPv4 Address Mode: dhcp

IPv4 Address=192.168.12.207/24

IPv4 Gateway=192.168.12.1

root@photon-machine [ ~ ]# pmd-cli --servername 192.168.12.208 --user root pkg install -y jq

Password:

 

Installing:

jq                       x86_64       1.5-3.ph2        photon       340.52k 348689

 

Total installed size: 340.52k 348689

 

Downloading:

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# ssh root@192.168.12.208 jq -V

Password:

jq-1.5

root@photon-machine [ ~ ]#

 

エラーメッセージを見ると rpc とあるので 2016 版ポートの解放でしたが、

設定ファイルをみると REST でのアクセスの場合は 2081 の解放が必要かもしれません。

root@photon-machine [ ~ ]# cat /etc/pmd/pmd.conf

[main]

#not an rpmostree server

servertype=0

apisecurity=/etc/pmd/api_sddl.conf

roledir=/etc/javelin.roles.d

rolepluginsdir=/etc/javelin.roles.plugins.d

 

[rest-server]

enabled=1

port=2081

apispec=/etc/pmd/restapispec.json

 

[rpc-server]

enabled=1

port=2016

 

[privsep]

pubkey=/etc/pmd/privsep_pub.key

privkey=/etc/pmd/privsep_priv.key

 

簡単にまとめると、pmd-cli の実行には・・・

  • pmd サービスが起動している必要がある。
  • リモート実行の場合は、iptables の TCP 2016 番ポートの解放が必要。
    (もしくは systemctl stop iptables)

 

ちなみに、pmd-cli net ~ のリモード実行はなぜかうまくいかないようです。

ひきつづき Photon OS 2.0 で いろいろと試してみたいと思います。

 

以上、PMD / pmd-cli を使用してみる話でした。

最近 GA になった Photon OS 2.0 に、ansible をインストールしてみました。

 

GA のときの投稿はこちらをどうぞ・・・

VMware Photon OS 2.0 が GA になりました。

 

今回はダウンロードサイトにある OVA with virtual hardware v13 (ESX 6.5 and above) を利用しています。

 

Ansible 実行サーバへの ansible インストール。

まず、root / changeme でログイン&パスワード変更をして、

わかりやすくホスト名(今回は ph20-ansible)を変更しておきます。

You are required to change your password immediately (administrator enforced)

Last login: Fri Nov  3 01:04:03 2017 from 192.168.1.XXX

Changing password for root.

Current password: ★デフォルトはchangeme

New password:  ★変更するパスワードを入力。

Retype new password:

01:04:23 up 35 min,  0 users,  load average: 0.00, 0.00, 0.00

tdnf update info not available yet!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# hostnamectl set-hostname ph20-ansible

root@photon-machine [ ~ ]# su -

root@ph20-ansible [ ~ ]#

 

Photon OS のリポジトリに、ansible が用意されています。

root@ph20-ansible [ ~ ]# tdnf list ansible

ansible.noarch                              2.4.0.0-1.ph2             photon

 

インストールしてみると、依存関係により python2 もインストールされます。

ちなみに、デフォルトだと Python 3 だけがインストールされています。

root@ph20-ansible [ ~ ]# tdnf install -y ansible

 

Installing:

python2-libs             x86_64       2.7.13-10.ph2    photon        15.49M 16239329

python2                  x86_64       2.7.13-10.ph2    photon         1.85M 1936323

ansible                  noarch       2.4.0.0-1.ph2    photon        54.13M 56762546

 

Total installed size:  71.47M 74938198

 

Downloading:

ansible                                9680670    100%

python2                                 779030    100%

python2-libs                           5952811    100%

Testing transaction

Running transaction

Installing/Updating: python2-libs-2.7.13-10.ph2.x86_64

Installing/Updating: python2-2.7.13-10.ph2.x86_64

Installing/Updating: ansible-2.4.0.0-1.ph2.noarch

 

Complete!

root@ph20-ansible [ ~ ]#

 

しかし、これだけでは Ansible 関連のコマンドを実行できませんでした。

root@ph20-ansible [ ~ ]# ansible --version

Traceback (most recent call last):

  File "/bin/ansible", line 40, in <module>

    import ansible.constants as C

  File "/usr/lib/python2.7/site-packages/ansible/constants.py", line 15, in <module>

    from ansible.config.manager import ConfigManager, ensure_type

  File "/usr/lib/python2.7/site-packages/ansible/config/manager.py", line 11, in <module>

    import yaml

ImportError: No module named yaml

root@ph20-ansible [ ~ ]#

 

Photon OS 2.0 の RPM の依存関係が十分でないためか、さらに RPM の追加が必要です。

すくなくとも YAML、jinja2 が不足しているようなので追加インストールします。

Python3 ではなく Python2 で利用するため、PyYAML と python-jinja2 をインストールします。

root@ph20-ansible [ ~ ]# tdnf install -y PyYAML python-jinja2

 

Installing:

python-markupsafe        x86_64       1.0-3.ph2        photon        61.48k 62953

python-jinja2            noarch       2.9.5-6.ph2      photon         1.95M 2044146

PyYAML                   x86_64       3.12-2.ph2       photon       622.06k 636988

 

Total installed size:   2.62M 2744087

 

Downloading:

PyYAML                                  198440    100%

python-jinja2                           697669    100%

python-markupsafe                        29704    100%

Testing transaction

Running transaction

Installing/Updating: python-markupsafe-1.0-3.ph2.x86_64

Installing/Updating: python-jinja2-2.9.5-6.ph2.noarch

Installing/Updating: PyYAML-3.12-2.ph2.x86_64

 

Complete!

root@ph20-ansible [ ~ ]#

 

これで ansible コマンドは実行できるようになりました。

root@ph20-ansible [ ~ ]# ansible --version

ansible 2.4.0.0

  config file = None

  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

  ansible python module location = /usr/lib/python2.7/site-packages/ansible

  executable location = /bin/ansible

  python version = 2.7.13 (default, Oct 26 2017, 01:54:36) [GCC 6.3.0]

root@ph20-ansible [ ~ ]#

 

ということで、ansible をインストールする場合は、すくなくとも下記のパッケージが必要そうです。

# tdnf install -y ansible PyYAML python-jinja2

 

Ansible を別の Photon OS に実行してみる。

それでは、別の Photon OS に Ansible でコマンド実行してみます。

 

まず、SSH の鍵ファイルを作成しておきます。

root@ph20-ansible [ ~ ]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

 

Ansible でコマンド実行する Photon(今回は 192.168.12.205)に公開鍵をコピーしておきます。

今回は、初回の root パスワード変更も一緒に実施しています。

root@ph20-ansible [ ~ ]# ssh-copy-id root@192.168.12.205

/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

The authenticity of host '192.168.12.205 (192.168.12.205)' can't be established.

ECDSA key fingerprint is SHA256:gnXBYqCxVbxQ6VlSExsLIi+tFkAB6YlIU6KxYqrKtoY.

Are you sure you want to continue connecting (yes/no)? yes

/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Password: ★changeme

You are required to change your password immediately (administrator enforced)

Changing password for root.

Current password: ★changeme

New password: ★新パスワードを入力。

Retype new password: ★新パスワードを再入力。

 

Number of key(s) added: 1

 

Now try logging into the machine, with:   "ssh 'root@192.168.12.205'"

and check to make sure that only the key(s) you wanted were added.

 

root@ph20-ansible [ ~ ]#

 

Ansible のインベントリファイルを作成しておきます。

今回は、下記の内容だけ記載しています。

[targets]

192.168.12.205

 

下記のように作成しました。

root@ph20-ansible [ ~ ]# cat << EOF > hosts

> [targets]

> 192.168.12.205

> EOF

root@ph20-ansible [ ~ ]# cat ./hosts

[targets]

192.168.12.205

 

接続確認してみると、相手の Photon にパスの通った python がなくて失敗しました。

root@ph20-ansible [ ~ ]# ansible -i ./hosts -m ping 192.168.12.205

192.168.12.205 | FAILED! => {

    "changed": false,

    "failed": true,

    "module_stderr": "Shared connection to 192.168.12.205 closed.\r\n",

    "module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",

    "msg": "MODULE FAILURE",

    "rc": 0

}

 

たしかに、相手の Photon(192.168.12.205)にはまだ python2 をインストールしておらず

デフォルトでは python 3 しかないので・・・

root@photon-machine [ ~ ]# ip a | grep 192

    inet 192.168.12.205/24 brd 192.168.12.255 scope global dynamic eth0

root@photon-machine [ ~ ]# rpm -qa | grep python

python3-libs-3.6.1-9.ph2.x86_64

python3-six-1.10.0-8.ph2.noarch

python3-jinja2-2.9.5-6.ph2.noarch

python3-prettytable-0.7.2-6.ph2.noarch

python3-jsonpatch-1.15-4.ph2.noarch

python3-requests-2.13.0-3.ph2.noarch

python3-PyYAML-3.12-2.ph2.x86_64

python3-3.6.1-9.ph2.x86_64

python3-markupsafe-1.0-3.ph2.x86_64

python3-configobj-5.0.6-4.ph2.noarch

python3-xml-3.6.1-9.ph2.x86_64

python3-jsonpointer-1.10-6.ph2.noarch

python3-oauthlib-2.0.2-3.ph2.noarch

python3-setuptools-3.6.1-9.ph2.noarch

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# python

-bash: python: command not found

root@photon-machine [ ~ ]# python3 -V

Python 3.6.1

 

実行先に python2 をインストールしてしまいます。

 

実は Photon OS 2.0 では、yum コマンドが tdnf の RPM に含まれていて

デフォルトで yum コマンドも実行できるようになっています。

root@photon-machine [ ~ ]# which yum

/usr/bin/yum

root@photon-machine [ ~ ]# rpm -qf /usr/bin/yum

tdnf-1.2.2-2.ph2.x86_64

 

ということで、yum で python2 をインストールしておきます。

root@photon-machine [ ~ ]# yum install -y python2

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64)'

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64) Updates'

Refreshing metadata for: 'VMware Photon Extras 2.0(x86_64)'

photon-extras                              106    100%

Installing:

python2-libs             x86_64       2.7.13-10.ph2    photon        15.49M 16239329

python2                  x86_64       2.7.13-10.ph2    photon         1.85M 1936323

 

Total installed size:  17.33M 18175652

 

Downloading:

python2                                 779030    100%

python2-libs                           5952811    100%

Testing transaction

Running transaction

Installing/Updating: python2-libs-2.7.13-10.ph2.x86_64

Installing/Updating: python2-2.7.13-10.ph2.x86_64

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# which python

/usr/bin/python

 

これで Ansible で接続テストがとおりるようになります。

root@ph20-ansible [ ~ ]# ansible -i ./hosts -m ping 192.168.12.205

192.168.12.205 | SUCCESS => {

    "changed": false,

    "failed": false,

    "ping": "pong"

}

 

ためしに、下記のような Ansible Playbook を実行してみました。

※最初にお伝えしておくと、これは yum が微妙なことになります。

root@ph20-ansible [ ~ ]# cat docker-host.yml

---

- name: setup Docker host.

  hosts: targets

  remote_user: root

  tasks:

 

  - name: install Docker package.

    yum:

      name: docker

      state: latest

 

  - name: start docker service.

    service:

      name: docker

      state: started

      enabled: yes

 

しかし Ansible で yum モジュールを利用しようとすると、
Python2 むけの「yum」モジュール不足になりました。

root@ph20-ansible [ ~ ]# ansible-playbook -i hosts docker-host.yml

 

PLAY [setup Docker host.] ******************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [192.168.12.205]

 

TASK [install Docker package.] *************************************************

fatal: [192.168.12.205]: FAILED! => {"changed": false, "failed": true, "msg": "python2 bindings for rpm are needed for this module. python2 yum module is needed for this  module"}

        to retry, use: --limit @/root/docker-host.retry

 

PLAY RECAP *********************************************************************

192.168.12.205             : ok=1    changed=0    unreachable=0    failed=1

 

root@ph20-ansible [ ~ ]#

 

ちなみに Photon 2.0 では yum と tdnf の RPM が競合しています。

tdnf が保護されているので、yum の RPM のインストールは難しそうです。

root@photon-machine [ ~ ]# tdnf install -y yum

Error(1030) : The operation would result in removing the protected package : tdnf

 

かわりに command モジュールなどで yum コマンドを実行する感じになってしまうかもしれません。

毎回 changed になってしまう雑な感じですが・・・

root@ph20-ansible [ ~ ]# cat docker-host.yml

---

- name: setup Docker host.

  hosts: targets

  remote_user: root

  tasks:

 

  - name: docker RPM install.

    command: bash -c "rpm -q {{ item }} || tdnf install -y {{ item }}"

    with_items:

    - docker

 

  - name: start docker service.

    service:

      name: docker

      state: started

      enabled: yes

 

root@ph20-ansible [ ~ ]# ansible-playbook -i hosts docker-host.yml

 

PLAY [setup Docker host.] ******************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [192.168.12.205]

 

TASK [docker RPM install.] *****************************************************

changed: [192.168.12.205] => (item=docker)

 

TASK [start docker service.] ***************************************************

ok: [192.168.12.205]

 

PLAY RECAP *********************************************************************

192.168.12.205             : ok=3    changed=1    unreachable=0    failed=0

 

root@ph20-ansible [ ~ ]#

 

簡単にここまで気づいた Photon OS 2.0 + ansible をまとめると・・・

  • Ansible 実行サーバには、ansible だけでなく PyYAML python-jinja2 など、他にも RPM が必要。
    python2 は、ansible の依存関係でインストールされる。
  • Ansible のターゲットになるサーバには、少なくとも python2 がいるので、
    VM のテンプレートなどに入れておいた方がよさそう。
  • デフォルトで yum コマンドは利用できるが、ansible からは利用が困難そうで、
    rpm インストールには工夫が必要そう。

 

何となく Photon OS 2.0 でのパッケージ管理については ansible より

PMD / pmd-cli や cloud-init を利用したほうがよいのかもしれないとも思えました。

 

以上、Photon OS 2.0 で ansible を利用してみる話でした。