VMware Fusion / Workstation 25H2 – dictTool

投稿者: | 10月 16, 2025

近頃、VMware系のアプリの利用がグッと減ってきた。理由は単純で、Windows11のHyper-VとWSLでことが済んでしまうから。昔のHyper-Vからするとだいぶまとも。全然使える。というか、なぜもっと使わなかったんだろうか。Hyper-Vを通り越して、WSLへ行ったからかもしれない。また、VMware Fusion / Workstationも物理PC自体の機能追加が鈍化しているので、新機能が付かない。今流行りのAIなんて、生PCを使うので、仮想マシンなんか使わない。VMware Fusion / Workstationの新機能は、vSphereとの同期が近頃はメイン。しかし、今やvSphereは、簡単に買える代物ではないので、いよいよ持って遠ざかる。しかし、今回は違う!

 

閑話休題

 

VMware Fusion / Workstation 25H2にdictToolというのが同梱された。VMXファイルをコマンドラインで書き換えてくれるらしい。なんと、ちょっと便利。

まず、最初に使い道を思いついたのが、VMの中のNICをe1000eから、vmxnet3に書き換える。
ethernet0.virtualDev = “e1000e”
 
たまに、「なんかネットのスピードがおそいんですよねぇ」という人がいる調べてみると、大抵e1000eのまま。10GbEのvmxnet3がVMware Fusion / Workstationでも使えるのを知らないのか、気にしていないのか?多分前者。
いつもこれをわざわざエディタで書き換えているが、dictToolを使えば、コマンドライン一発で書き換えられる
dictTool set “Ubuntu Server 24.04 64-bit Arm.vmx” ethernet0.virtualDev=”vmxnet3″
 
確認
dictTool query “Ubuntu Server 24.04 64-bit Arm.vmx” ethernet0.virtualDev
 
ちゃんと書き換わっている!
ethernet0.virtualDev = “vmxnet3”
 
 
次はお待ちかね。Cloud-initも試してみた。
VMXファイルがあるディレクトリ(カレントディレクトリ)にcloud-initのファイル(meta-data/user-data/network-config)がある前提

meta-dataと user-data の投入

容量制限があるので、余計なコメントなどを削除して、gzipをかけたものをbase64にエンコードして、インジェクションしている。
# — Set your .vmx path (quote if it has spaces) —
VMX=”Ubuntu Server 24.04 64-bit Arm.vmx”
 
 
# — Cloud-init (VMware datasource via guestinfo): metadata —
dictTool set “$VMX” guestinfo.metadata=”$(
awk ‘!/^[[:space:]]*#/ && NF’ meta-data | gzip -c9 | base64 | tr -d ‘\n’
)”
dictTool set “$VMX” guestinfo.metadata.encoding=”gzip+base64″
# — Cloud-init: userdata (preserve ‘#cloud-config’ header on line 1) —
dictTool set “$VMX” guestinfo.userdata=”$(
awk ‘NR==1 && /^#cloud-config$/ {print; next} !/^[[:space:]]*#/ && NF’ user-data \
| gzip -c9 | base64 | tr -d ‘\n’
)”
dictTool set “$VMX” guestinfo.userdata.encoding=”gzip+base64″

network-config も渡す場合(任意)

容量制限があるので、余計なコメントなどを削除して、gzipをかけたものをbase64にエンコードして、インジェクションしている。
# — Cloud-init: network-config (optional) —
dictTool set “$VMX” guestinfo.networkconfig=”$(
awk ‘!/^[[:space:]]*#/ && NF’ network-config | gzip -c9 | base64 | tr -d ‘\n’
)”
dictTool set “$VMX” guestinfo.networkconfig.encoding=”gzip+base64″
 

設定確認

最初だけ表示している。全てを表示させたければ最後のhead以降を外す
# — Quick peek: print first 60 chars of each value to confirm it’s set —
echo -n “metadata: “; dictTool query “$VMX” guestinfo.metadata | head -c 60; echo ” …”
echo -n “userdata: “; dictTool query “$VMX” guestinfo.userdata | head -c 60; echo ” …”
echo -n “netconfig: “; dictTool query “$VMX” guestinfo.networkconfig | head -c 60 2>/dev/null || true; echo ” …”
 
必要ならデコード検証
先頭だけ表示している。全文を表示せたければ、最後のheadを外す
# — Decode locally (for inspection) —
dictTool query “$VMX” guestinfo.metadata | awk ‘{sub(/^[^=]*=[[:space:]]*/,””); print}’ | tr -d ‘\n’ | (base64 -d 2>/dev/null || base64 -D 2>/dev/null) | gunzip | head
dictTool query “$VMX” guestinfo.userdata | awk ‘{sub(/^[^=]*=[[:space:]]*/,””); print}’ | tr -d ‘\n’ | (base64 -d 2>/dev/null || base64 -D 2>/dev/null) | gunzip | head
# If network-config was set:
dictTool query “$VMX” guestinfo.networkconfig | awk ‘{sub(/^[^=]*=[[:space:]]*/,””); print}’ | tr -d ‘\n’ | (base64 -d 2>/dev/null || base64 -D 2>/dev/null) | gunzip | head

VMの起動

ここまできたら、コマンドラインで起動
vmrun start “$VMX”
 
起動したら、cloud-initを再度動かすようにして、再起動するとcloud-initが適用された!

 

便利!テストした環境は、VMware Fusionなので、ARM環境。ARM環境でもcloud-initが動くのね。(そりゃ動く)

 

で、すこしはVMware Fusion / Workstationの利用頻度が増えるかというと。。。多分ねぇ。そもそももともとあんまし使わないのよ。

ちなみに、25H2で、vctlコマンドがディスコンになった。kindが呼べなくなった。やはりインフラエンジニアには、コンテナ、Kubernetesはほど遠かったか。

KubernetesでKIND

コメントを残す