脱vSphereClient (Apple信者向け)

最近、自宅マシンにESXiをインストールしました。

プライベートの端末がOSXということもあり、vSphereClientの利用がサポートされません(*)。
VirtualBox上のWindowsマシンにインストールして操作する、という利用方法もありますが、
vSphereClientを利用するのに、VirtualBoxを起動して、Windowsを起動して、vSphereClientを起動。
んで、GUI操作ぽちぽち。

めんどい!

実はある程度のことはESXiにSSH接続してコマンドラインで出来るんです!

今回はVM作成を実施してみます。

ESXiのインストールやストレージ、ネットワークは準備済みとします。

ほとんどはvim-cmdコマンドを利用します。

vim-cmd

サブコマンドを実施し、色々なことを実現できます。

[root@localhost:~] vim-cmd
Commands available under /:
hbrsvc/       internalsvc/  solo/         vmsvc/
hostsvc/      proxysvc/     vimsvc/       help

[root@localhost:~] vim-cmd hostsvc
Commands available under hostsvc/:
advopt/                   enable_ssh                refresh_firewall
autostartmanager/         firewall_disable_ruleset  refresh_services
datastore/                firewall_enable_ruleset   reset_service
datastorebrowser/         get_service_status        runtimeinfo
firmware/                 hostconfig                set_hostid
net/                      hosthardware              standby_mode_enter
rsrc/                     hostsummary               standby_mode_exit
storage/                  login                     start_esx_shell
summary/                  logout                    start_service
vmotion/                  maintenance_mode_enter    start_ssh
connect                   maintenance_mode_exit     stop_esx_shell
cpuinfo                   pci_add                   stop_service
disable_esx_shell         pci_remove                stop_ssh
disable_ssh               queryconnectioninfo       task_list
enable_esx_shell          querydisabledmethods      updateSSLThumbprintsInfo

例えば、
vim-cmd hostsvc/enable_sshを実行すると、ESXiホストでssh接続が有効となります。
vim-cmd maintenance_mode_enterを実行すると、ESXiホストをメンテナンスモードにします。
とかです。

それではいってみよう。
今回はCentos6のVMを作成します。

  1. VM作成
  2. ブランクVMを作成します。

    [root@localhost:~] vim-cmd vmsvc/createdummyvm centos6-1 /vmfs/volumes/local_ssd
    4

    戻り値はVMのIDです。

    [root@localhost:~] ls -l /vmfs/volumes/local_ssd/centos6-1_3/
    total 1024
    -rw-------    1 root     root       1048576 May 10 10:42 centos6-1_3-flat.vmdk
    -rw-------    1 root     root           465 May 10 10:42 centos6-1_3.vmdk
    -rw-r--r--    1 root     root             0 May 10 10:42 centos6-1_3.vmsd
    -rwxr-xr-x    1 root     root           977 May 10 10:42 centos6-1_3.vmx
    [root@localhost:~] cat /vmfs/volumes/local_ssd/centos6-1_3/centos6-1_3.vmx
    .encoding = "UTF-8"
    config.version = "8"
    virtualHW.version = "11"
    nvram = "centos6-1_3.nvram"
    pciBridge0.present = "TRUE"
    virtualHW.version = "11"
    nvram = "centos6-1_3.nvram"
    pciBridge0.present = "TRUE"
    svga.present = "TRUE"
    pciBridge4.present = "TRUE"
    pciBridge4.virtualDev = "pcieRootPort"
    pciBridge4.functions = "8"
    pciBridge5.present = "TRUE"
    pciBridge5.virtualDev = "pcieRootPort"
    pciBridge5.functions = "8"
    pciBridge6.present = "TRUE"
    pciBridge6.virtualDev = "pcieRootPort"
    pciBridge6.functions = "8"
    pciBridge7.present = "TRUE"
    pciBridge7.virtualDev = "pcieRootPort"
    pciBridge7.functions = "8"
    vmci0.present = "TRUE"
    hpet0.present = "TRUE"
    floppy0.present = "FALSE"
    scsi0.virtualDev = "lsilogic"
    scsi0.present = "TRUE"
    scsi0:0.deviceType = "scsi-hardDisk"
    scsi0:0.fileName = "centos6-1_3.vmdk"
    scsi0:0.present = "TRUE"
    displayName = "centos6-1"
    guestOS = "other"
    uuid.bios = "56 4d fd a6 54 0c 8e 22-a5 d9 9a 10 df 9d be ae"
    uuid.location = "56 4d fd a6 54 0c 8e 22-a5 d9 9a 10 df 9d be ae"
    vc.uuid = "52 79 a6 30 04 b7 91 37-35 5d ad 4c 42 08 59 a4"

    vmxファイル、vmdkファイル等おなじみのファイルが作成されています。
    勝手に付加された「_3」はどこから来たのでしょう。

  3. ISOファイルアップロード
  4. scpコマンドでCentOS6のisoファイルをdatastoreにアップロードします。

  5. VMリソース設定
  6. 最低限必要な箇所のみ設定します。

    まずは以下を設定。

    • CPU数 -> 2core
    • メモリ値 -> 2GB
    • ネットワーク -> 1つ
    • CDROMデバイス
    • ゲストOS種別
    • VNC
    [root@localhost:~] vi /vmfs/volumes/local_ssd/centos6-1_3/centos6-1_3.vmx
    
    以下、編集
    guestOS = "other"
     ↓
    guestOS = "rhel6-64"
    
    以下、追記
    numvcpus = "2"
    memSize = "2048"
    ide1:0.startConnected = "TRUE"
    ide1:0.deviceType = "cdrom-image"
    ide1:0.fileName = "/vmfs/volumes/local_ssd/CentOS-6.6-x86_64-minimal.iso"
    ide1:0.present = "TRUE"
    ethernet0.virtualDev = "vmxnet3"
    ethernet0.networkName = "VM Network"
    ethernet0.addressType = "generated"
    ethernet0.present = "TRUE"
    RemoteDisplay.vnc.enabled="true"
    RemoteDisplay.vnc.port="5901"
    RemoteDisplay.vnc.password="password"
    RemoteDisplay.vnc.keyMap="jp"

    ide1:0.fileNameはアップロードしたisoファイルのパス指定
    ethernet0.networkNameはポートグループ名
    RemoteDisplay.vnc.portはVNC接続するポート番号
    後述しますがVNC接続する用のポートをESXiで開放する必要があります。
    RemoteDisplay.vnc.passwordはVNC接続時のパスワード


    次はディスクサイズを設定。

    • ディスクサイズ -> 16GB
    [root@localhost:~] vmkfstools -c 10g -d thin /vmfs/volumes/local_ssd/centos6-1_3/centos6-1_3-1.vmdk
    [root@localhost:~] vi /vmfs/volumes/local_ssd/centos6-1_3/centos6-1_3.vmx
    
    以下、編集
    scsi0:0.fileName = "centos6-1_3.vmdk"
     ↓
    scsi0:0.fileName = "centos6-1_3-1.vmdk"
    
    [root@localhost:~] vmkfstools -U /vmfs/volumes/local_ssd/centos6-1_3/centos6-1_3.vmdk

    元のvmdkファイルは削除して構いません。

  7. VNC接続設定
  8. ESXiでVNC接続できるようにポートを開放します。

    セキュリティプロファイル定義
    [root@localhost:~] cp /etc/vmware/firewall/service.xml /etc/vmware/firewall/service.xml.bak
    [root@localhost:~] chmod u+w /etc/vmware/firewall/service.xml
    [root@localhost:~] chmod +t /etc/vmware/firewall/service.xml
    以下を<ConfigRoot>タグ内に追記
      <service id='0140'>
        <id>vnc</id>
        <rule id='0000'>
          <direction>inbound</direction>
          <protocol>tcp</protocol>
          <port type='dst'>5901</port>
        </rule>
       <enabled>false</enabled>
       <required>false</required>
      </service>
    [root@localhost:~] chmod 444 /etc/vmware/firewall/service.xml
    ポート開放
    [root@localhost:~] esxcli network firewall refresh
    [root@localhost:~] esxcli network firewall ruleset list
    vnc                    false
    [root@localhost:~] esxcli network firewall ruleset set -r vnc -e true
    [root@localhost:~] esxcli network firewall ruleset set -r vnc -a true
    Already allowed all ip

  9. VM起動
  10. [root@localhost:~] vim-cmd vmsvc/power.on 3
    Powering on VM:

  11. コンソール接続
  12. OSXの場合、デフォルトでVNCクライアントが備わっています。
    Finderのメニューから[移動] - [サーバへ接続]を選択
    f:id:sfujimoto:20150510215217p:plain

    vnc://:<設定したポート番号>
    f:id:sfujimoto:20150510215013p:plain

    vmxファイルに設定したパスワードを入力
    f:id:sfujimoto:20150510220408p:plain

    コンソールの画面が表示されます。
    f:id:sfujimoto:20150510215356p:plain

このようにコマンドとVNC接続により、VMを構築できました。
細やかな設定は難しいところもありますが、
多くの機能を扱うことができます。

私は省エネのため、利用しない時はESXiを落としています。
そのため、VMを全てシャットダウンして、シャットダウンが完了したらESXiをシャットダウンするスクリプトと、
ESXiを起動したらtxtファイルに登録したVMを自動で起動するスクリプトを作成しています。
またESXiはpythonを標準搭載しているのでpythonistaには助かります。

(*) Wineでほとんどの機能を利用可。