Install Edera
This guide walks you through installing Edera on a Linux instance using either the Xen (default) or KVM (Early Access) hypervisor backend.
Choose a backend
| Xen | KVM | |
|---|---|---|
| Recommended for | Production workloads; maximum security and performance | Teams already running KVM; lower barrier to entry |
| Host kernel | Edera-built and maintained kernel | Your existing distribution kernel |
| Reboot required | Yes | No |
| Bootloader modified | Yes | No |
| Nested virtualization (cloud VMs) | Not required | Required if not on bare metal |
| Hardware requirement | Broad; supports PV and PVH | VT-x or AMD-V |
If you’re unsure, use Xen: it’s the default and the production-ready path.
Validate your system
Before installing, run edera-check to confirm your system meets all requirements:
docker run --pull always --pid host --privileged \
ghcr.io/edera-dev/edera-check:stable preinstallAll Required checks should pass. If anything fails, address the issue before proceeding. See the edera-check reference for details on each check.
Prerequisites
- A Google Artifact Registry (GAR) key from Edera (
key.json). Don’t have one? Contact support@edera.dev. - Docker or nerdctl installed on the target node with root or sudo access.
- UEFI boot mode is required.
Step 1: Log in to the registry
Run the following commands on the target node. Copy your key.json to the node first if needed.
docker login us-central1-docker.pkg.dev -u _json_key --password-stdin < key.jsonStep 2: Run the installer
docker run --privileged \
--env 'TARGET_DIR=/host' \
--volume '/:/host' \
--volume "$HOME/.docker/config.json:/root/.docker/config.json" \
--pid host \
--net host \
us-central1-docker.pkg.dev/edera-protect/staging/protect-installer:${TAG}Set TAG to the release version you want to install. See Edera release notes for current versions.
The installer reboots the node when complete. Wait 1-2 minutes for it to come back online.
Step 3: Verify installation
sudo protect --version
sudo systemctl status protect-daemon
sudo protect zone listExpected output from protect zone list:
No zones have been launched.KVM prerequisites
- A Google Artifact Registry (GAR) key with access to the Edera installer image. Don’t have one? Contact the team.
- Docker installed on your target node with root or sudo access.
- Docker authenticated to GAR on the target node:
sudo docker login us-central1-docker.pkg.dev. - A current, non-EOL LTS kernel.
edera-checkvalidates this. See kernel.org for LTS status. - Hardware virtualization enabled (VT-x or AMD-V) and
/dev/kvmaccessible. Verify:ls -la /dev/kvm.
Nested virtualization
If you’re running inside a VM, the outer hypervisor must expose KVM to the guest. For AWS EC2, see Amazon EC2 nested virtualization. Most general-purpose EC2 instance types do not support nested KVM.
Step 1: Run the installer
Run the following command on the target host:
docker run --privileged \
--env 'TARGET_DIR=/host' \
--env 'HYPERVISOR=kvm' \
--volume '/:/host' \
--volume "$HOME/.docker/config.json:/root/.docker/config.json" \
--pid host \
--net host \
us-central1-docker.pkg.dev/edera-protect/staging/protect-installer:${TAG}Set TAG to the release version you want to install. See Edera release notes for current versions.
HYPERVISOR=kvm is omitted, the installer defaults to Xen. Switching backends later requires reinstalling from scratch.The KVM installer does not modify your bootloader and does not reboot the node. When the installer exits, the Protect daemon is already running.
Step 2: Verify installation
protect help
sudo systemctl status protect-daemon
sudo protect zone listKubernetes
These steps apply to both backends.
Confirm nodes are back online
watch kubectl get nodesApply the Edera RuntimeClass
kubectl apply -f https://public.edera.dev/kubernetes/runtime-class.yaml
kubectl get runtimeclassExpected output:
NAME HANDLER AGE
edera edera 1dLabel nodes for Edera workloads
The Edera RuntimeClass includes a nodeSelector that requires nodes to be labeled with runtime=edera:
kubectl label nodes <node-name> runtime=ederaTest with a Pod
kubectl apply -f kubernetes/test-workload.yaml
kubectl wait --for=condition=ready pod/edera-test-pod -n edera-test --timeout=300s
kubectl get pods -n edera-testTroubleshooting
Node unreachable after Xen install
Expected. The installer reboots the node. Wait 1-2 minutes then reconnect and run sudo protect --version to confirm it’s running.
Console UI scrambled screen not available after Xen install
This typically occurs when booting into a node that does not have UEFI enabled. Edera requires UEFI to work properly.
/dev/kvm not found (KVM)
If /dev/kvm is missing at install time, the installer fails during preflight. If it disappears after install, the daemon fails to start:
ERROR protect-daemon: failed to initialize core runtime: missing /dev/kvmTo recover:
Check what’s missing:
ls -l /dev/kvm lsmod | grep -E '^kvm_(intel|amd)' egrep -c '(vmx|svm)' /proc/cpuinfoIf the KVM module isn’t loaded:
sudo modprobe kvm_intel # or kvm_amd sudo systemctl restart protect-daemonIf the CPU doesn’t expose
vmxorsvm, enable hardware virtualization in BIOS/UEFI.If you’re inside a VM, the outer hypervisor isn’t exposing nested KVM. See nested virtualization above.
Verify Edera services
sudo systemctl status protect-daemon
sudo protect zone list
sudo protect --versionKubernetes troubleshooting
- Check pod details:
kubectl describe pod edera-test-pod -n edera-test - Check logs:
kubectl logs edera-test-pod -n edera-test - Verify RuntimeClass:
kubectl get pod edera-test-pod -n edera-test -o=jsonpath="{.spec.runtimeClassName}"
What’s next
- Monitor your workloads with Prometheus and Grafana
- Learn about GPU support for AI/ML workloads (Xen only)
- KVM architecture overview for background on how the KVM and Xen backends compare
- Kernel customization for custom kernels and boot parameters