Installation Guide
Complete guide to installing Infinibay VDI platform on Ubuntu and Fedora
Installation Guide
Introduction
Infinibay manages virtual machines on Linux hosts using libvirt and KVM. The installer sets up system packages, database, repositories, and services.
Installation guide for Ubuntu 23.10+ and Fedora 37+.
For detailed technical reference, see the installer repository.
Installation Methods
Infinibay offers two installation methods:
🎯 LXD Container (Recommended)
Status: In active development - ready in weeks
The easiest way to deploy Infinibay is using LXD containers with lxc/lxd-compose. This method provides:
- One-command deployment:
lxc launch infinibayorlxd-compose up - Isolated environment: Complete isolation from host system
- Easy updates: Simple container image updates
- Resource limits: Built-in CPU/memory constraints
- Snapshots: Instant backup and restore
- Minimal host changes: No system package modifications
Best for: Production deployments, testing, isolated environments
For the latest LXD deployment status, see the LXD repository.
📦 Direct Installation (Available Now)
Traditional installation directly on the host system. Provides maximum performance and full system access but modifies system packages and services.
Best for: Development, bare-metal performance, custom configurations
Continue reading below for direct installation instructions.
System Requirements
Supported Operating Systems
- Ubuntu 23.10 or later
- Fedora 37 or later
Hardware Requirements
- CPU: x86_64 processor with hardware virtualization support (Intel VT-x or AMD-V)
egrep -c '(vmx|svm)' /proc/cpuinfo(should return > 0)
- RAM: Minimum 8GB (16GB+ recommended for running multiple VMs)
- Disk Space:
- 10GB minimum for
/opt/infinibay/(code and dependencies) - Additional space for VM disk images (varies by usage)
- Recommended: 100GB+ SSD for optimal VM performance
- 10GB minimum for
Software Prerequisites
- Python 3.8 or later: Required for running the installer
- Root/sudo access: Installation modifies system packages and services
- Internet connectivity: Required for downloading packages, repositories, and ISOs
Optional Dependencies
- asciimatics: Enhances installation banner
pip3 install asciimatics
Pre-Installation Checklist
Verify system requirements:
# Verify KVM support (should return > 0)
egrep -c '(vmx|svm)' /proc/cpuinfo
# Check disk space (ensure 10GB+ free in /opt)
df -h /opt
# Verify Python version (should be 3.8+)
python3 --version
# Ensure sudo access
sudo -v
# Check OS version
cat /etc/os-release
Direct Installation Guide
Note: This section covers traditional direct installation. For LXD container deployment (recommended when available), see the section above.
Basic Installation
# Clone the installer repository
git clone https://github.com/infinibay/installer.git
cd installer
# Run the installer
sudo python3 install.py
What happens automatically:
- Detects host IP
- Generates database password
- Uses default libvirt network
- Installs to
/opt/infinibay/ - Creates systemd services
- Configures PostgreSQL
- Builds repositories
Installation Summary
At the end of installation, you'll see a summary (example output, values may differ if flags are used):
╔═══════════════════════════════════════════════════════════════╗
║ INFINIBAY INSTALLATION COMPLETE! ║
╠═══════════════════════════════════════════════════════════════╣
║ Frontend URL: http://192.168.1.100:3000 ║
║ Backend URL: http://192.168.1.100:4000 ║
║ GraphQL Playground: http://192.168.1.100:4000/graphql ║
║ ║
║ Admin Credentials: ║
║ Email: admin@example.com ║
║ Password: password ║
║ ║
║ Database Password: [generated password shown here] ║
╚═══════════════════════════════════════════════════════════════╝
Save these credentials for accessing the web interface.
Installation Options
Custom Database Configuration
# Custom password
sudo python3 install.py --db-password=MySecurePassword123
# Remote PostgreSQL
sudo python3 install.py --db-host=192.168.1.50 --db-port=5432
# Custom database and user names
sudo python3 install.py --db-name=infinibay_prod --db-user=infinibay_prod
Network Configuration
# Specify host IP
sudo python3 install.py --host-ip=192.168.1.100
# Use specific libvirt network
sudo python3 install.py --libvirt-network-name=br0
Custom Ports
sudo python3 install.py --backend-port=8080 --frontend-port=8081
Custom Installation Directory
# Custom install directory
sudo python3 install.py --install-dir=/opt/custom/path
# Separate data directory for VM disks/ISOs
sudo python3 install.py --install-dir=/opt/infinibay --data-dir=/mnt/storage/infinibay
Execution Modes
# Dry run
sudo python3 install.py --dry-run
# Verbose logging
sudo python3 install.py --verbose
# Combined
sudo python3 install.py --dry-run --verbose
Complete Example
sudo python3 install.py \
--host-ip=192.168.1.100 \
--db-password=SecurePass2024! \
--libvirt-network-name=br0 \
--backend-port=4000 \
--frontend-port=3000 \
--install-dir=/opt/infinibay \
--data-dir=/mnt/storage/infinibay \
--skip-windows-isos \
--verbose
Development Mode Installation
Development mode: Install from local workspace instead of cloning from GitHub.
cd /home/andres/infinibay
sudo python3 installer/install.py --install-dir=/home/andres/infinibay
Or use the helper script:
cd /home/andres/infinibay
sudo ./installer/install-dev.sh
The installer detects existing .git directories and skips cloning, builds in place, and restores file ownership after builds.
Installation Process Explained
The installer runs five phases:
Phase 1: Framework Initialization
Validates OS version, checks root access, detects host IP, generates database password.
Phase 2: System Dependencies
Installs Node.js, PostgreSQL, Redis, QEMU/KVM, libvirt, Rust, build tools, and mingw-w64.
Phase 3: Database Setup
Creates PostgreSQL database and user. If connection fails, the installer provides troubleshooting steps.
Phase 4: Repository Setup
Builds libvirt-node (Rust addon), backend (npm + Prisma), frontend (Next.js), infiniservice (Rust binaries for Linux and Windows).
Phase 5: Configuration & Services
Generates .env files with database URL and host IP, runs Prisma migrations, creates systemd services, downloads ISOs.
Network Configuration
Automatic Network Detection
The installer detects and configures libvirt networks automatically. Prefers default network, or creates infinibay NAT network if none exist.
Network Modes
- NAT (default): VMs use private IPs, access internet via host
- Bridged: VMs get IPs from physical network, visible to other hosts
- Isolated: VMs can only talk to host, no internet
Custom Network Setup
# List available networks
virsh net-list --all
# Use specific network
sudo python3 install.py --libvirt-network-name=your-network
Command-Line Reference
Complete reference of all installation options. Defaults shown below are subject to change; the installer output is the source of truth.
Database Configuration
| Option | Default | Description | Example |
|---|---|---|---|
--db-password |
auto-generated | PostgreSQL password for infinibay user | --db-password=SecurePass123 |
--db-user |
infinibay |
PostgreSQL username | --db-user=infinibay_prod |
--db-host |
localhost |
PostgreSQL host | --db-host=192.168.1.50 |
--db-port |
5432 |
PostgreSQL port | --db-port=5433 |
--db-name |
infinibay |
PostgreSQL database name | --db-name=infinibay_prod |
Admin User Configuration
| Option | Default | Description | Example |
|---|---|---|---|
--admin-email |
admin@example.com |
Admin user email address | --admin-email=admin@infinibay.local |
--admin-password |
password |
Admin user password | --admin-password=Admin2024! |
Network Configuration
| Option | Default | Description | Example |
|---|---|---|---|
--host-ip |
auto-detected | Host IP address for VMs to connect | --host-ip=192.168.1.100 |
--libvirt-network-name |
default |
Libvirt network name | --libvirt-network-name=br0 |
--backend-port |
4000 |
Backend GraphQL server port | --backend-port=8080 |
--frontend-port |
3000 |
Frontend web server port | --frontend-port=8081 |
Installation Paths
| Option | Default | Description | Example |
|---|---|---|---|
--install-dir |
/opt/infinibay |
Installation directory (must be absolute) | --install-dir=/opt/custom/path |
--data-dir |
same as install-dir | Data directory for ISOs, disks, etc. | --data-dir=/mnt/storage/infinibay |
Repository Options
| Option | Default | Description | Example |
|---|---|---|---|
--use-local-repos |
false |
Use local repository code instead of cloning | --use-local-repos |
--local-repos-dir |
- | Path to local repositories directory | --local-repos-dir=/home/user/infinibay |
Installation Options
| Option | Default | Description | Example |
|---|---|---|---|
--skip-isos |
false |
Skip downloading Ubuntu/Fedora ISOs | --skip-isos |
--skip-windows-isos |
false |
Skip downloading Windows ISOs | --skip-windows-isos |
Execution Modes
| Option | Default | Description | Example |
|---|---|---|---|
--dry-run |
false |
Show what would be done without executing | --dry-run |
--verbose |
false |
Enable verbose logging | --verbose |
Version Information
| Option | Description | Example Output |
|---|---|---|
--version |
Show installer version and exit | Infinibay Installer v1.0.0 |
# Check installer version
python3 install.py --version
# Output: Infinibay Installer v1.0.0
Usage Examples
# Basic installation
sudo python3 install.py
# Custom password
sudo python3 install.py --db-password=SecurePass2024!
# Custom network
sudo python3 install.py --host-ip=192.168.1.100 --libvirt-network-name=br0
# Development mode (from workspace root)
sudo python3 installer/install.py --install-dir=/home/andres/infinibay
Troubleshooting Common Issues
Permission Denied
Run with sudo:
sudo python3 install.py
Unsupported OS Version
Requires Ubuntu 23.10+ or Fedora 37+. Upgrade your OS.
Database Connection Failed
Check service status and pg_hba.conf authentication. The installer provides interactive troubleshooting if connection fails.
Invalid Port Number in Database URL
The installer URL-encodes passwords automatically. If you still see errors, use a simple password without special characters.
GitHub Authentication Required
Generate a personal access token at https://github.com/settings/tokens with repo scope. Use it as your password when Git prompts for credentials. Or use SSH keys.
Build Failures
Check internet connectivity and disk space. Run with --verbose for details.
libvirt-node Integrity Checksum Error
The installer cleans npm cache automatically. If you still see checksum errors:
cd /opt/infinibay/backend
npm cache clean --force
rm package-lock.json
npm install
Port Already in Use
Use --backend-port and --frontend-port to avoid conflicts. Check with lsof -i :3000.
Network Bridge Issues
Check libvirt network status with virsh net-list --all. Start default network if inactive.
Post-Installation Verification
Check service status:
systemctl status infinibay-backend infinibay-frontend
Access web interface at http://<your-host-ip>:3000 and GraphQL playground at http://<your-host-ip>:4000/graphql.
Check logs:
journalctl -u infinibay-backend -f
journalctl -u infinibay-frontend -f
Service Management
# Start/stop/restart
sudo systemctl start infinibay-backend infinibay-frontend
sudo systemctl stop infinibay-backend infinibay-frontend
sudo systemctl restart infinibay-backend infinibay-frontend
# Check status
sudo systemctl status infinibay-backend infinibay-frontend
# View logs
sudo journalctl -u infinibay-backend -f
# Enable/disable autostart
sudo systemctl enable infinibay-backend infinibay-frontend
sudo systemctl disable infinibay-backend infinibay-frontend
# Reload configuration after editing service files
sudo systemctl daemon-reload
sudo systemctl restart infinibay-backend infinibay-frontend
Uninstallation
Run from the installer repo or use the full path to uninstall.py:
cd ~/installer # or wherever you cloned the installer
| Command | Removes | Keeps |
|---|---|---|
sudo python3 uninstall.py |
Services only | Files, Database |
sudo python3 uninstall.py --remove-files |
Services + Files | Database |
sudo python3 uninstall.py --remove-database |
Services + Database | Files |
sudo python3 uninstall.py --remove-files --remove-database |
Everything | Nothing |
Additional flags: --dry-run, --yes, --verbose, --install-dir, --db-name, --db-user
Next Steps
- Access
http://<your-host-ip>:3000 - Log in with
admin@example.com/password - Change admin password in Settings → Account
- Create departments and configure firewall rules
- Navigate to VMs → Create VM
Documentation:
Upgrading to LXD Deployment
Once LXD container deployment becomes available, you can migrate your existing installation:
- Export data: Backup VMs, database, and configuration
- Deploy LXD container: Use
lxd-compose uporlxc launch infinibay - Import data: Restore backup into container
- Uninstall direct: Remove host installation with
uninstall.py --remove-files
LXD deployment will be documented separately when released.
Additional Resources
- Installer Repository - Direct installation scripts
- LXD Repository - Container deployment (in development)
- GitHub Issues