Installation
These steps install the checked-in self-hosted VM console on one KVM host. They do not install the hosted image builder or establish a production Enterprise deployment.
1. Verify the Source
Check out the intended OpenFactory revision and review local changes before building containers:
git status --short
git rev-parse HEADUse a reviewed release or commit. The Compose workflow builds images from the
local cto-gui and cto-gui-libvirt-backend source trees.
2. Create Host Directories
sudo install -d -m 0755 /opt/openfactory/iso
sudo install -d -m 0755 /var/lib/libvirt/images/.openfactory-goldenThe paths are mounted read-only inside the backend for source artifacts. Guest
disks and uploaded ISOs use /var/lib/libvirt/images.
3. Preflight KVM and Libvirt
test -e /dev/kvm
test -S /var/run/libvirt/libvirt-sock
virsh -c qemu:///system list --all
docker compose versionStop if any command fails. Fix the host service, group membership, or socket location before starting the containers.
4. Start the Console
Run this from the cto-gui directory:
docker compose -f docker-compose.self-hosted.yml up --build -d
docker compose -f docker-compose.self-hosted.yml psOpen http://localhost/ from the host. For a remote evaluation, restrict port
80 at the host firewall and use a trusted private path to the host.
5. Verify the Running Mode
Confirm the frontend loads, then inspect the backend mode response from the
network path available in your deployment. It must report self_hosted: true.
The feature map should show hosted builds, conversations, scheduling, and
policy documents as unavailable.
Next, upload a disposable test ISO, create a small VM, open its VNC console, stop the VM, and delete it. Confirm the guest disk and libvirt domain are removed as expected before using larger images.
Rollback
Stop the evaluation without deleting its named volume:
docker compose -f docker-compose.self-hosted.yml downThis leaves uploaded images, libvirt resources, source directories, and the
cto-data volume intact. Inventory those resources before any deletion. Do not
use down --volumes unless you explicitly intend to destroy retained console
state and cleanup journals.