xcp-ng + xoa installation

Updated on: 2025-07-15

XOA if you wish (optional)

Once xcp-ng is up and running, you’ want XOA up for VM migration. Here is the fastest way.
Log into xen host,
bash -c "$(curl -s http://xoa.io/deploy)"
Answer pretty basic Q and off you go.

If you can run Docker image (Linux, WSL, MacOS (not sure for Apple silicone)), you can run XOA locally to connect to xcp-ng server. This saves the disk/memory on the server.

The default username/password is admin@admin.net / admin.

Cheat sheet

auto start

xe vm-list
xe vm-param-set uuid=$VMUUID other-config:auto_poweron=true

get IP

xe vm-param-get param-name=networks uuid=$VMUUID

PCI passthrough

source

First, make dom-0 to not use the PCI devices.

(8.3)

xe pci-list

xe pci-disable-dom0-access uuid=<pci uuid>
xe pci-enable-dom0-access uuid=<pci uuid>

This is less confusing than lspci.

(before 8.3)
/opt/xensource/libexec/xen-cmdline --set-dom0 "xen-pciback.hide=(02:00.0)(06:00.0)(06:00.1)"

check what’s the boot command with

cat /boot/efi/EFI/xenserver/grub.cfg

(if this is EFI boot.)

Reboot.

xl pci-assignable-list shows the devices, and use the devices for the guest.

0000:02:00.0
0000:06:00.0
0000:06:00.1

xe vm-param-set uuid=$VMUUID other-config:pci=0/0000:02:00.0,0/0000:06:00.0,0/0000:06:00.1

Reaching to client VNC console

First you need to allow sshd to port forward in /etc/ssh/sshd_config

PermitTunnel yes

systemctl restart sshd

ssh root@osiris -L 5902:localhost:5902 "socat TCP-LISTEN:5902,reuseaddr,fork UNIX-CONNECT:/var/run/xen/vnc-1"

Then, vnc clint at localhost:5902

Gotchas

When you import a VM from ESXi, the ethernet device name changes. If you are using netplan for static IP address, adjust the device name in /etc/netplan.

Debian/Ubuntu

You may need to install xe-daemon. Without it, the VM status like network IP does not show up.

sudo apt install xe-guest-utilities
systemctl enable xe-daemon
systemctl start xe-daemon

XigmaNAS

pkg install sysutils/xe-guest-utilities xen-guest-tools 

Go over to “System > Advanced > rc.conf” and add ” xenguest_enable” -> “YES”

and service xenguest start. Once it works, you can see the IP address on XOA.

XOA in a docker

This is one of good reasons on my book to go with xcp-ng. I don’t have to run XOA on the server.
Following the instructions on https://github.com/ronivay/xen-orchestra-docker, I make a docker image and running it locally.

Create dirs for the docker:

sudo mkdir -p /var/lib/xen/xo-server /var/lib/xen/redis

then run it.

docker run -dit -p 3380:80 -v /var/lib/xen/xo-server:/var/lib/xo-server -v /var/lib/xen/redis:/var/lib/redis --name xoa --stop-timeout 30 xen-orchestra

I put this in a shell script and run it when I want to run XOA and open the console on localhost:3380.

Local ISO library

xe sr-create name-label="Local ISO Library" type=iso device-config:location=/var/lib/iso-store/ device-config:legacy_mode=true

xe sr-scan uuid=UUID

ZFS

yum install -y zfs nvme-cli

Start from scratch

# nvme list
Node                  SN                   Model                                    Namespace Usage                      Format           FW Rev  
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme1n1          0000A000000         PC SN730 NVMe WDC 512GB                  1         512.11  GB / 512.11  GB    512   B +  0 B   11170012

# wipefs -a /dev/nvme1n1

Leave a Reply

Your email address will not be published. Required fields are marked *