Install
openclaw skills install openbot-esxiZero-touch Debian 13 VM deployment on VMware ESXi 8. Builds custom preseed ISO, creates NVMe+vmxnet3 VM with serial console, and runs unattended installation. Use when deploying Debian VMs on ESXi, automating VM provisioning, or setting up serial console access for headless ESXi VM management.
openclaw skills install openbot-esxiDeploy fully configured Debian 13 VMs on ESXi 8 in ~8 minutes with zero manual interaction.
| Variable | Required | Description |
|---|---|---|
ESXI_HOST | Yes | ESXi host IP address |
ESXI_PASS | Yes | ESXi root password |
ESXI_USER | No | ESXi user (default: root) |
ESXI_DATASTORE | No | Target datastore (default: datastore1) |
NETWORK | No | Port group name (default: VM Network) |
DOMAIN | No | Domain for VMs (default: local) |
VM_PASS | Yes (resize only) | VM root password for disk resize script |
⚠️ Note: The deploy script generates a random VM password and prints it to stdout. The password is also embedded in the preseed ISO uploaded to the ESXi datastore. Remove the ISO after deployment and treat stdout output as sensitive.
bash, python3, wgetInstall on Debian/Ubuntu:
apt install xorriso isolinux sshpass
# govc: https://github.com/vmware/govmomi/releases
All credentials are passed via environment variables — nothing is hardcoded or embedded in process arguments.
export ESXI_HOST="192.168.1.100"
export ESXI_PASS="your-esxi-root-password"
bash scripts/esxi-deploy.sh [hostname] [cpu] [ram_mb] [disk_gb] [serial_port]
| Parameter | Default | Description |
|---|---|---|
| hostname | random animal name | VM name |
| cpu | 2 | vCPU count |
| ram_mb | 2048 | Memory in MB |
| disk_gb | 20 | Disk size in GB |
| serial_port | random 8600-8699 | Telnet port for serial console |
Example:
bash scripts/esxi-deploy.sh webserver 4 4096 50 8610
root, random passwordEvery VM gets a serial port accessible via telnet to the ESXi host:
telnet <ESXI_IP> <serial_port>
Works even when the VM has no network. Configured:
GRUB_TERMINAL="console serial", serial 115200 8N1console=tty0 console=ttyS0,115200n8serial-getty@ttyS0.service enabledESXi firewall requirement (activated automatically by the script):
esxcli network firewall ruleset set -e true -r remoteSerialPort
Important: Set serial port IP to the ESXi host IP, not 0.0.0.0:
serial0.fileName = "telnet://<ESXI_IP>:<port>"
Grow a VM's disk without shutdown:
export ESXI_HOST="192.168.1.100"
export ESXI_PASS="your-esxi-password"
export VM_PASS="vm-root-password"
bash scripts/esxi-vm-resize-disk.sh <vm-name> <new-size-gb>
Requires cloud-guest-utils on the VM (pre-installed by the deploy script).
All settings are configurable via environment variables:
export ESXI_HOST="192.168.1.100" # ESXi host IP (required)
export ESXI_PASS="secret" # ESXi root password (required)
export ESXI_USER="root" # ESXi user (default: root)
export ESXI_DATASTORE="datastore1" # Target datastore (default: datastore1)
export NETWORK="VM Network" # Port group name (default: VM Network)
export DOMAIN="example.local" # Domain for VMs (default: local)
No credential store or external resolver is required. Pass secrets via environment variables only — they are never embedded in process arguments or URLs.
| Component | Choice | Reason |
|---|---|---|
| Disk controller | NVMe | Faster than SCSI/SATA for modern guests |
| Production NIC | vmxnet3 | Paravirtualized, best performance |
| Installer NIC | E1000 | Kernel driver built-in, no firmware needed |
| Boot mode | BIOS | Simpler for automated installs |
| Provisioning | Thin | Saves datastore space |
de_DE.UTF-8, keyboard de, timezone Europe/Berlinopen-vm-tools, curl, sudo, qemu-guest-agent, cloud-guest-utilsPermitRootLogin yes, PasswordAuthentication yesfloppy, pcspkr (prevent I/O error loops in VMs)Customize the preseed section in esxi-deploy.sh for different locales or packages.
govc uses GOVC_USERNAME/GOVC_PASSWORD env vars.sshpass for automated SSH. For production, consider SSH key-based auth instead.0.0.0.0), but anyone with network access to the ESXi host can connect. Restrict access via:
remoteSerialPort to trusted IPs)late_command — Shell expansion in the deploy script's heredoc destroys nested heredocs. Use echo -e or single-line commands instead.remoteSerialPort ruleset must be enabled.growpart on the root partition or redeploy with larger disk.