A multiplatform background service written in Rust that runs on Windows and Linux VMs to collect system information and communicate with the host via virtio-serial.
Infiniservice is designed to be installed on every VM in the Infinibay infrastructure. It operates as a lightweight background service that:
- Collects system metrics and information
- Communicates with the host system via virtio-serial
- Runs continuously with configurable collection intervals
- Supports both Windows and Linux platforms
InfiniService includes comprehensive support for Linux-specific operations. These commands are automatically detected based on the distribution (Ubuntu, Debian, Fedora, CentOS, RHEL) and use the appropriate tools.
| Command Category | Description | Ubuntu/Debian | Fedora/RHEL |
|---|---|---|---|
| Update Management | Check for pending updates | apt list --upgradable |
dnf check-update |
| Update History | View installed updates | /var/log/apt/history.log |
/var/log/dnf.log |
| Security Updates | Identify security-critical updates | apt -s upgrade (security filter) |
dnf updateinfo list security |
| Firewall Status | Check firewall configuration | UFW | firewalld |
| Security Modules | Check SELinux/AppArmor | AppArmor | SELinux |
| Application Inventory | List installed software | dpkg + snap + flatpak | rpm + snap + flatpak |
| Disk Cleanup | Estimate reclaimable space | apt cache + autoremove | dnf cache + autoremove |
- DEB packages: dpkg-query for installed packages
- RPM packages: rpm -qa for installed packages
- Snap packages: Universal snap packages
- Flatpak applications: Universal flatpak applications
- Firewall Detection: Automatically detects UFW (Ubuntu) or firewalld (Fedora/RHEL)
- Security Module Status: Reports SELinux mode (Enforcing/Permissive) or AppArmor profile count
- Security Update Identification: Flags packages from security repositories
Some operations require elevated privileges:
- Update installation:
sudo apt upgradeorsudo dnf upgrade - Firewall management:
sudo ufw enableorsudo firewall-cmd - Package removal:
sudo apt autoremoveorsudo dnf autoremove
# Test all Linux command functionality
cargo run --example test_linux_commandsThe service is structured into several modules:
- config: Configuration management and loading
- collector: System information collection
- communication: Virtio-serial communication interface
- service: Main service orchestration and lifecycle management
# Build the project
cargo build
# Build for release
cargo build --release
# Run the service
cargo runThe service uses a default configuration that can be customized:
- Collection Interval: 30 seconds (configurable)
- VirtIO Channel:
- Channel Name:
org.infinibay.agent - Windows: Accessed via VirtIO Serial Port (COMx) provided by vioserial driver
- Linux:
/dev/virtio-ports/org.infinibay.agent
- Channel Name:
- Log Level: info
InfiniService requires proper VirtIO serial device configuration to communicate with the host system. The service communicates through VirtIO channels that must be configured at the hypervisor level.
For detailed configuration examples and automation scripts, see:
- Comprehensive Guide: docs/vm-configuration.md
- Automation Script: scripts/configure-vm.sh
- Windows Diagnostics: scripts/diagnose-virtio.ps1
QEMU/KVM: Requires VirtIO serial controller with org.infinibay.agent channel
# Quick configuration check
./scripts/configure-vm.sh detect
./scripts/configure-vm.sh configure --vm-name "your-vm-name"VMware: Requires serial port configuration in .vmx file (provides standard serial ports, not VirtIO)
serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.fileName = "\\.\\pipe\\infinibay-agent"VirtualBox: Requires serial port setup with host pipe communication (provides standard serial ports, not VirtIO)
VBoxManage modifyvm "VM-Name" --uart1 0x3F8 4
VBoxManage modifyvm "VM-Name" --uartmode1 server /tmp/infinibay-agentNote: VMware and VirtualBox provide standard serial ports that appear as COM ports in the guest OS, while QEMU/KVM provides true VirtIO serial devices.
Symptoms: Windows Device Manager shows VirtIO Serial Device (DEV_1043), but InfiniService reports "Access denied" or "Win32 error 5".
Solutions:
-
Run as Administrator (Most Common Fix):
# Always run InfiniService as Administrator runas /user:Administrator "C:\Program Files\InfiniService\infiniservice.exe"
-
Check VirtIO Driver Installation:
# Verify VirtIO devices Get-PnpDevice | Where-Object {$_.FriendlyName -like "*VirtIO*"} # Reinstall driver if needed pnputil /delete-driver vioserial.inf /uninstall /force pnputil /add-driver "C:\virtio\vioserial\w10\amd64\vioserial.inf" /install
-
Run Diagnostics:
# Use built-in diagnostic mode infiniservice.exe --diag # Or run comprehensive PowerShell diagnostics powershell -ExecutionPolicy Bypass -File scripts\diagnose-virtio.ps1
Cause: Insufficient privileges or security restrictions
Solutions:
- Run InfiniService as Administrator
- Add Windows Defender exclusions for InfiniService
- Verify user account has "Log on as a service" right
- Temporarily disable UAC for testing
Important: VirtIO serial devices don't create traditional COM ports. InfiniService communicates directly with VirtIO devices through the Windows VirtIO API, not through COM ports.
If you see this issue:
- This is normal behavior for VirtIO serial devices
- Verify VirtIO drivers are installed correctly
- Check that the hypervisor has VirtIO serial channels configured
- Use diagnostic tools to verify device accessibility
Administrator Privilege Requirements:
- InfiniService requires Administrator privileges to access VirtIO devices
- Install as Windows service with proper privileges
- Ensure service account has "Log on as a service" right
Driver Installation Problems:
# Check driver status
Get-PnpDevice -FriendlyName "*VirtIO Serial*" | Format-List *
# Force driver update
Get-PnpDevice -FriendlyName "*VirtIO Serial*" | Update-PnpDevice
# Check for driver conflicts
Get-WmiObject Win32_SystemDriver | Where-Object {$_.Name -like "*virtio*"}Windows Defender and Security:
- Add InfiniService executable to Windows Defender exclusions
- Check Windows Event Log for security-related blocks
- Verify no third-party antivirus is blocking VirtIO access
Device Permissions:
# Check VirtIO devices
ls -la /dev/vport*
# Fix permissions
sudo chmod 666 /dev/vport*
sudo usermod -a -G dialout $USER
# Create udev rule for persistent permissions
echo 'KERNEL=="vport*", ATTR{name}=="org.infinibay.agent", MODE="0666", SYMLINK+="infinibay-agent"' | sudo tee /etc/udev/rules.d/99-infinibay.rules
sudo udevadm control --reload-rulesVirtIO Module Loading:
# Load VirtIO modules
sudo modprobe virtio_console
sudo modprobe virtio_serial
# Verify modules
lsmod | grep virtio
# Make persistent
echo "virtio_console" | sudo tee -a /etc/modules
echo "virtio_serial" | sudo tee -a /etc/modulesSELinux/AppArmor Issues:
# SELinux: Check for denials
sudo ausearch -m avc -ts recent | grep virtio
# SELinux: Allow VirtIO access
sudo setsebool -P virt_use_comm on
# AppArmor: Check logs
sudo dmesg | grep DENIED | grep virtio
# AppArmor: Set to complain mode temporarily
sudo aa-complain /usr/sbin/infiniserviceWindows:
# Run built-in diagnostics
infiniservice.exe --diag
# Check VirtIO devices
powershell "Get-PnpDevice | Where-Object {$_.InstanceId -like '*DEV_1043*'}"
# Check services
sc query infiniserviceLinux:
# Check VirtIO devices
ls -la /sys/class/virtio-ports/
cat /sys/class/virtio-ports/vport*/name
# Check service status
systemctl status infiniservice
# Test device access
echo "test" > /dev/vport0p1Use the provided diagnostic scripts for detailed analysis:
# Automated VM configuration check
./scripts/configure-vm.sh diagnose
# Windows-specific VirtIO diagnostics (run on Windows guest)
powershell -ExecutionPolicy Bypass -File scripts\diagnose-virtio.ps1
# Validate existing configuration
./scripts/configure-vm.sh validate --vm-name "your-vm-name"Windows:
# Manual service installation
sc create infiniservice binPath="C:\Program Files\InfiniService\infiniservice.exe" start=auto
sc description infiniservice "InfiniBay VM Information Service"
# Check service status
sc query infiniservice
# Start service
sc start infiniserviceLinux:
# Manual systemd service installation
sudo cp infiniservice.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable infiniservice
sudo systemctl start infiniservice
# Check service status
sudo systemctl status infiniservice- Run installer as Administrator (Windows) or with sudo (Linux)
- Check that target directories are writable
- Verify no existing service is running
- Ensure antivirus is not blocking installation
-
Verify Hypervisor Configuration:
- Check VM configuration includes VirtIO serial devices
- Verify channel names match expected values
- Ensure VM is using correct VirtIO drivers
-
Check Device Availability:
# Linux ls -la /dev/vport* /sys/class/virtio-ports/ # Windows powershell "Get-PnpDevice | Where-Object {$_.FriendlyName -like '*VirtIO*'}"
-
Validate Configuration:
# Use automation script to validate ./scripts/configure-vm.sh validate --vm-name "your-vm-name"
- Windows Access Denied: Run as Administrator
- Linux Permission Denied: Add user to dialout group, fix device permissions
- Device Not Found: Check hypervisor VirtIO configuration
- Driver Issues: Reinstall VirtIO drivers
- Service Won't Start: Check logs, verify configuration file
- Communication Fails: Validate VirtIO channel configuration
Contact support if you encounter:
- Persistent access denied errors after trying all solutions
- VirtIO devices not appearing despite correct hypervisor configuration
- Service crashes or unexpected behavior
- Performance issues or high resource usage
Include in Support Requests:
- Output from diagnostic commands (
--diagflag) - Hypervisor type and version
- Operating system version
- VirtIO driver version
- InfiniService logs and error messages
The project uses only well-maintained Rust libraries:
- tokio: Async runtime
- serde: Serialization framework
- log/env_logger: Logging infrastructure
- anyhow/thiserror: Error handling
- config: Configuration management
- dirs: Cross-platform directory utilities
VirtIO provides a standardized, high-performance communication channel between the guest VM and the host system. This allows InfiniService to efficiently transmit system information and receive commands without relying on network-based communication, which may not always be available or reliable.
Quick Check:
# Run diagnostic mode
infiniservice.exe --diag # Windows
./infiniservice --diag # Linux
# Or use automation script
./scripts/configure-vm.sh test --vm-name "your-vm-name"Manual Verification:
- Windows: Check Device Manager for VirtIO Serial devices
- Linux: Check for
/dev/vport*devices and/sys/class/virtio-ports/
- Windows: Run as Administrator (most common solution)
- Linux: Check device permissions and user groups
- Both: Verify VirtIO drivers are properly installed
- Both: Check hypervisor VirtIO configuration
InfiniService includes built-in diagnostic capabilities:
# Built-in diagnostics
infiniservice --diag
# Comprehensive Windows diagnostics
powershell -ExecutionPolicy Bypass -File scripts\diagnose-virtio.ps1
# VM configuration diagnostics
./scripts/configure-vm.sh diagnoseContact support when:
- Diagnostic tools show errors you can't resolve
- VirtIO devices are missing despite correct configuration
- Service fails to start after following troubleshooting steps
- Performance issues persist after optimization
Always include diagnostic output and system information in support requests.
- VM Configuration Guide: Comprehensive hypervisor configuration examples
- Deployment Guide: Detailed deployment procedures and VM setup
- Project README: Main project documentation
- VM Configuration Script: Automated VirtIO configuration for different hypervisors
- Windows VirtIO Diagnostics: Comprehensive Windows VirtIO diagnostic tool
- Installation Scripts: Platform-specific installation and setup scripts
- VirtIO Drivers: Official VirtIO drivers for Windows
- QEMU Documentation: VirtIO serial device documentation
- libvirt Documentation: Domain XML configuration reference
This is the initial project setup. The core functionality is currently implemented as placeholders and TODOs that will be developed based on specific requirements.
- Implement actual system metrics collection
- Add virtio-serial communication protocol
- Create platform-specific installers
- Add configuration file support
- Implement proper error handling and recovery
- Add comprehensive logging and monitoring