OS-8698 smartos-live ucodecheck needs to address AMD fallback ucode
Reviewed by: Carlos Neira <carlos.neira at edgecast.io>
Reviewed by: Travis Paul <tpaul at edgecast.io>
Approved by: Travis Paul <tpaul at edgecast.io>
OS-8697 piadm's fatal() helper should echo all args (#1160)
Reviewed by: Carlos Neira <carlos.neira at edgecast.io>
Reviewed by: Dan McDonald <danmcd at edgecast.io>
Approved by: Dan McDonald <danmcd at edgecast.io>
Fix resource leaks and add handshake timeout in console proxy
Critical fixes for console connection handler:
1. Replace deprecated net.Stream() with new net.Socket()
2. Add cleanup() function with idempotent guard to prevent double-cleanup
3. Add 5-second timeout for zone console handshake
4. Ensure socket.destroy() called on all error paths:
- Client close
- Console socket error
- Client error
- Handshake timeout
- Handshake failure
5. Rename 'console' variable to 'consoleSocket' to avoid shadowing global
6. Truncate handshake error messages to prevent log spam
These fixes prevent file descriptor leaks and hanging connections that
could exhaust system resources under error conditions.
[3 lines not shown]
Add zoneadmd console handshake for non-KVM brands
The zoneadmd console_sock requires a protocol handshake before data flows.
Send 'IDENT C 0\n' and wait for 'OK' response before proxying data.
This matches the zlogin -C handshake protocol.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Use zoneadmd console socket instead of /dev/zcons device
The correct console socket for zlogin -C is managed by zoneadmd at
/var/run/zones/<zonename>.console_sock, not the /dev/zcons device.
All brands now use unix sockets:
- KVM: /zones/<uuid>/root/tmp/vm.console (serial console)
- Others: /var/run/zones/<zonename>.console_sock (zoneadmd console)
This allows simple net.Stream() connection for all brands.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Use socat to proxy zone console devices
fs.createReadStream doesn't work properly with character devices like
/dev/zcons/*/zoneconsole. Use socat instead to handle the device I/O
properly.
For non-KVM brands, spawn socat process per connection to proxy between
TCP socket and zone console device with proper raw/echo settings.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Fix console proxy to use fs streams for device files
Zone console devices (/dev/zcons/*/zoneconsole) are character devices,
not unix sockets. net.connect() fails with ENOTSOCK when trying to
connect to them.
Fix by using different connection methods based on brand:
- KVM: net.Stream().connect() for unix socket
- Others: fs.createReadStream/WriteStream for device file
This allows proper bidirectional data flow for zone console devices.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Spawn console proxy for all running VMs at startup
Fix issue where non-KVM/Bhyve VMs (Joyent, LX) were not getting console
proxies spawned at vmadmd startup. Previously only KVM/Bhyve called loadVM()
which spawned the console proxy.
Now all running VMs get console proxies regardless of brand.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Add console to runtime_info for all VM brands
Add 'console' to runtime_info feature list for all brands to enable
vmadm info queries for console connection details.
Changes:
- KVM: Add 'console' to existing runtime_info array
- Bhyve: Add 'console' to runtime_info array
- Joyent: Add runtime_info: ['console'] (new)
- Joyent-minimal: Add runtime_info: ['console'] (new)
- LX: Add runtime_info: ['console'] (new)
This allows vm.info(['console']) to work for all brands, which is
required by CNAPI console endpoint and vmadmd console proxy.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
Add console proxy support to vmadmd
Implement TCP proxy for console access across all VM brands:
- KVM: Proxy to unix socket at /tmp/vm.console (serial console)
- Bhyve/Joyent/LX: Proxy to zone console device at /dev/zcons/<zonename>/zoneconsole
Changes:
- Add CONSOLE object to track console proxy state
- Add spawnConsoleProxy() to create TCP listeners for console access
- Add clearConsoleProxy() and reloadConsoleProxy() for lifecycle management
- Add infoConsole() to return console connection details via vm.info()
- Add console proxy spawning alongside VNC/SPICE in VM lifecycle
- Add vm.info() support for joyent, joyent-minimal, and lx brands (console only)
Console proxies are automatically created when VMs start and cleaned up when VMs stop.
Connection details (host, port, type) are available via vm.info(['console']).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply at anthropic.com>
OS-8690: smartos-ui does not adapt to changed admin interface IP address
Reviewed by: Carlos Neira <carlos.neira at edgecast.io>
Reviewed by: Dan McDonald <danmcd at edgecast.io>
Reviewed by: Toomas Soome <tsoome at edgecast.io>
Approved by: Dan McDonald <danmcd at edgecast.io>
OS-8683 vmadm reprovision for bhyve brand
Portions generated by: Claude <noreply at anthropic.com>
Reviewed by: Dan McDonald <danmcd at edgecast.io>
Approved by: Dan McDonald <danmcd at edgecast.io>
Add pre-emptive disk size validation for bhyve reprovision
- Add checkDiskSizes step before destroyOldDisk0 to validate that new image size does not exceed current disk0 size
- Prevents data loss by failing early with clear error message if new image would be larger than existing disk
- Remove setQuotaBhyveAfterReprovision step that attempted to fix quotas after potential failure
- Use zfs get volsize and imgadm get to compare current disk size vs new image size
- Convert sizes appropriately (bytes vs MiB) for accurate comparison
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply at anthropic.com>
Add pre-emptive disk size validation for bhyve reprovision
- Add checkDiskSizes step before destroyOldDisk0 to validate that new image size does not exceed current disk0 size
- Prevents data loss by failing early with clear error message if new image would be larger than existing disk
- Remove setQuotaBhyveAfterReprovision step that attempted to fix quotas after potential failure
- Use zfs get volsize and imgadm get to compare current disk size vs new image size
- Convert sizes appropriately (bytes vs MiB) for accurate comparison
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply at anthropic.com>
Add pre-emptive disk size validation for bhyve reprovision
- Add checkDiskSizes step before destroyOldDisk0 to validate that new image size does not exceed current disk0 size
- Prevents data loss by failing early with clear error message if new image would be larger than existing disk
- Remove setQuotaBhyveAfterReprovision step that attempted to fix quotas after potential failure
- Use zfs get volsize and imgadm get to compare current disk size vs new image size
- Convert sizes appropriately (bytes vs MiB) for accurate comparison
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply at anthropic.com>
fix refreservation, recalculate quotas
If we went from e.g. a 10G image to a 100G image, we should fix the
quotas. Additional testing still needed.
Portions generated by: Claude <noreply at anthropic.com>