{"id":28516495,"url":"https://github.com/loopholelabs/linux-pvm-ci","last_synced_at":"2025-10-24T00:35:42.694Z","repository":{"id":232495483,"uuid":"784026751","full_name":"loopholelabs/linux-pvm-ci","owner":"loopholelabs","description":"Kernel package CI for Linux with PVM patches applied","archived":false,"fork":false,"pushed_at":"2025-06-02T18:05:51.000Z","size":709,"stargazers_count":27,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-09T04:14:24.481Z","etag":null,"topics":["kernel","linux","pvm"],"latest_commit_sha":null,"homepage":"https://loopholelabs.io","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loopholelabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-09T03:22:00.000Z","updated_at":"2025-06-02T18:05:53.000Z","dependencies_parsed_at":"2024-10-24T10:07:36.613Z","dependency_job_id":"53e9979e-357a-4abd-9ccf-d73f4f0437c5","html_url":"https://github.com/loopholelabs/linux-pvm-ci","commit_stats":null,"previous_names":["loopholelabs/linux-pvm-ci"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/loopholelabs/linux-pvm-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopholelabs%2Flinux-pvm-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopholelabs%2Flinux-pvm-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopholelabs%2Flinux-pvm-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopholelabs%2Flinux-pvm-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loopholelabs","download_url":"https://codeload.github.com/loopholelabs/linux-pvm-ci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopholelabs%2Flinux-pvm-ci/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263801714,"owners_count":23513702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kernel","linux","pvm"],"created_at":"2025-06-09T04:11:25.568Z","updated_at":"2025-10-24T00:35:42.596Z","avatar_url":"https://github.com/loopholelabs.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linux PVM CI\n\nKernel package CI for Linux with PVM patches applied\n\n[![Kernel CI](https://github.com/loopholelabs/linux-pvm-ci/actions/workflows/kernel.yaml/badge.svg)](https://github.com/loopholelabs/linux-pvm-ci/actions/workflows/kernel.yaml)\n\n## Overview\n\nThis project builds the Linux kernel as RPM packages for various Linux distros and cloud-provider specific configurations with the [PVM patches](https://github.com/virt-pvm/linux) applied. It also adds a few [custom patches](./patches) to allow snapshot/restore across heterogeneous systems, such as between different cloud providers.\n\n**Interested in using PVM to live migrate VMs between cloud providers or need guest kernel builds?** Check out [Loophole Labs Architect](https://architect.run/) and [Loophole Labs Drafter](https://github.com/loopholelabs/drafter)!\n\n**Want to automatically provision cloud instances on AWS, GCP, Azure etc. with PVM preinstalled?** Check out [uninstance](https://github.com/pojntfx/uninstance) for an example multi-cloud OpenTofu/Terraform PVM setup!\n\n## Installation\n\n\u003e Replace all occurrences of `fedora` to your distribution of choice (valid values are: `fedora`, `rocky`, `alma`, `amazonlinux`) and `hetzner` to your cloud provider of choice (valid values are: `baremetal`, `hetzner`, `digitalocean`, `aws`, `gcp`, `ovh`, `azure`, `civo`, `linode`). Note that Amazon Linux is only supported on some AWS instance types (e.g. `t2.micro`) and known to fail to boot on others (`c6a.xlarge`). In addition to these, there are also experimental versions of the PVM kernel with more advanced performance tuning, but potentially less stability; these are named `${distro}-experimental`, e.g. `fedora-experimental`.\n\n\u003e Note that saving and restoring a snapshot between 4-level paging mode hosts (such as older AWS machine models) and 5-level paging mode hosts (such as newer GCP machine models) is not possible at this time (see [https://github.com/virt-pvm/linux/issues/6#issuecomment-2076990347](https://github.com/virt-pvm/linux/issues/6#issuecomment-2076990347))\n\n\u003e We set `lapic=notscdeadline` on the host to fix freezes during snapshot restores to work around [https://github.com/firecracker-microvm/firecracker/issues/4099](https://github.com/firecracker-microvm/firecracker/issues/4099)\n\n### With `cloud-init`\n\n```yaml\n#cloud-config\nruncmd:\n  - dnf config-manager --add-repo 'https://loopholelabs.github.io/linux-pvm-ci/fedora/hetzner/repodata/linux-pvm-ci.repo' # Or, if you're on Fedora Linux 41+, use `sudo dnf config-manager addrepo --from-repofile 'https://loopholelabs.github.io/linux-pvm-ci/fedora/baremetal/repodata/linux-pvm-ci.repo'`\n  - dnf install -y kernel-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64 # You might also want to install kernel-devel-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64.rpm and kernel-headers-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64.rpm if you want to build a module against the kernel\n  # Add `- grubby --copy-default --add-kernel=/boot/vmlinuz-6.7.12-pvm-host-amazonlinux-aws --initrd=/boot/initramfs-6.7.12-pvm-host-amazonlinux-aws.img --title=\"Amazon Linux (6.7.12-pvm-host-amazonlinux-aws)\" ` here on Amazon Linux, otherwise it will fail with `The param /boot/vmlinuz-6.7.12-pvm-host-amazonlinux-aws is incorrect`\n  - grubby --set-default /boot/vmlinuz-6.7.12-pvm-host-fedora-hetzner-*\n  - grubby --copy-default --args=\"pti=off nokaslr lapic=notscdeadline\" --update-kernel /boot/vmlinuz-6.7.12-pvm-host-fedora-hetzner-*\n  - dracut --force --kver $(ls /lib/modules/ | grep \"^6.7.12-pvm-host-fedora-hetzner-\") # Append `--no-kernel` on Amazon Linux, otherwise it will fail with `dracut-install: Failed to find module 'xfs'`\n  - reboot\n\nwrite_files:\n  - path: /etc/modprobe.d/kvm-intel-amd-blacklist.conf\n    permissions: \"0644\"\n    content: |\n      blacklist kvm-intel\n      blacklist kvm-amd\n  - path: /etc/modules-load.d/kvm-pvm.conf\n    permissions: \"0644\"\n    content: |\n      kvm-pvm\n\npower_state:\n  mode: reboot\n  condition: True\n```\n\n### Manually\n\n```shell\ndnf config-manager --add-repo 'https://loopholelabs.github.io/linux-pvm-ci/fedora/hetzner/repodata/linux-pvm-ci.repo' # Or, if you're on Fedora Linux 41+, use `sudo dnf config-manager addrepo --from-repofile 'https://loopholelabs.github.io/linux-pvm-ci/fedora/baremetal/repodata/linux-pvm-ci.repo'`\nsudo dnf install -y kernel-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64.rpm # You might also want to install kernel-devel-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64.rpm and kernel-headers-6.7.12_pvm_host_fedora_hetzner_*-1.x86_64.rpm if you want to build a module against the kernel\n```\n\n```shell\n# Run `sudo grubby --copy-default --add-kernel=/boot/vmlinuz-6.7.12-pvm-host-amazonlinux-aws --initrd=/boot/initramfs-6.7.12-pvm-host-amazonlinux-aws.img --title=\"Amazon Linux (6.7.12-pvm-host-amazonlinux-aws)\" ` first on Amazon Linux, otherwise it will fail with `The param /boot/vmlinuz-6.7.12-pvm-host-amazonlinux-aws is incorrect`\nsudo grubby --set-default /boot/vmlinuz-6.7.12-pvm-host-fedora-hetzner-*\nsudo grubby --copy-default --args=\"pti=off nokaslr lapic=notscdeadline\" --update-kernel /boot/vmlinuz-6.7.12-pvm-host-fedora-hetzner-*\nsudo dracut --force --kver $(ls /lib/modules/ | grep \"^6.7.12-pvm-host-fedora-hetzner-\") # Append `--no-kernel` on Amazon Linux, otherwise it will fail with `dracut-install: Failed to find module 'xfs'`\n```\n\n```shell\nsudo tee /etc/modprobe.d/kvm-intel-amd-blacklist.conf \u003c\u003cEOF\nblacklist kvm-intel\nblacklist kvm-amd\nEOF\necho \"kvm-pvm\" | sudo tee /etc/modules-load.d/kvm-pvm.conf\n```\n\n```shell\nsudo reboot\n```\n\n```shell\nlsmod | grep pvm # Check if PVM is available\n```\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at [https://github.com/loopholelabs/linux-pvm-ci](https://github.com/loopholelabs/linux-pvm-ci). For more contribution information check out [the contribution guide](./CONTRIBUTING.md).\n\n## License\n\nThe Linux PVM CI project is available as open source under the terms of the [GNU General Public License, Version 2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html).\n\n## Code of Conduct\n\nEveryone interacting in the Linux PVM CI project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).\n\n## Project Managed By:\n\n[![https://loopholelabs.io](https://cdn.loopholelabs.io/loopholelabs/LoopholeLabsLogo.svg)](https://loopholelabs.io)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floopholelabs%2Flinux-pvm-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floopholelabs%2Flinux-pvm-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floopholelabs%2Flinux-pvm-ci/lists"}