host/build.sh produces Ubuntu-installable debs (linux-image,
linux-headers) whose release string ends in -pvm. The PVM switcher is
core-kernel code — it cannot ship as a DKMS module, so PVM hosts run this
kernel wholesale.
linux-modules-*-gcp package in the running Ubuntu
release donates its /boot/config-* — GCP driver coverage (virtio, gVNIC)
stays distro-equivalent, so the debs work on any GCP instance type.configs/host-pvm.config: CONFIG_KVM=m, CONFIG_KVM_PVM=m. That is
the entire PVM delta; upstream’s host reference config shows no other
requirement (KASLR, PTI and 5-level paging all stay at distro defaults).SYSTEM_TRUSTED_KEYS, DEBUG_INFO*) — they cannot build
outside Canonical’s packaging and a PVM node does not need them.host/install.sh is deliberately two-phase:
sudo ./install.sh . # dpkg -i + one-shot grub-reboot into -pvm
sudo reboot
uname -r && lsmod | grep kvm_pvm && ls /dev/kvm
sudo ./install.sh --commit . # make it the default only after validation
A broken kernel therefore costs one reboot, never a dead node. Secure Boot must be off (the kernel is unsigned); the script refuses to install otherwise.
scripts/gcp-host-e2e.sh runs the whole loop against a fresh GCP e2
instance: install → reboot → kvm_pvm loaded → guest smoke boot → teardown.