{"id":28184131,"url":"https://github.com/robur-coop/vm","last_synced_at":"2025-10-16T06:37:54.622Z","repository":{"id":111508099,"uuid":"118909195","full_name":"robur-coop/vm","owner":"robur-coop","description":"vm -- Manage KVM/QEMU virtual machines","archived":false,"fork":false,"pushed_at":"2019-10-14T13:50:00.000Z","size":46,"stargazers_count":13,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-12T05:58:24.174Z","etag":null,"topics":["kvm","linux","virtualization"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robur-coop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-01-25T12:18:35.000Z","updated_at":"2024-01-15T12:56:43.000Z","dependencies_parsed_at":"2023-04-29T17:47:46.273Z","dependency_job_id":null,"html_url":"https://github.com/robur-coop/vm","commit_stats":null,"previous_names":["robur-coop/vm"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robur-coop%2Fvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robur-coop","download_url":"https://codeload.github.com/robur-coop/vm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254470975,"owners_count":22076587,"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":["kvm","linux","virtualization"],"created_at":"2025-05-16T05:12:15.214Z","updated_at":"2025-10-16T06:37:49.577Z","avatar_url":"https://github.com/robur-coop.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## vm -- Manage KVM/QEMU virtual machines\n\nThere are [many](https://www.linux-kvm.org/page/Management_Tools) KVM\nmanagement tools out there. This one is mine.\n\nIt is primarily intended to support the use case of running throwaway KVM/QEMU\nVMs (_not_ unikernels) for a CI system (see `examples/`). An eventual secondary\nuse case is to provide a comfortable CLI for throwaway VM management on a\ndevelopment machine.\n\nTherefore, it:\n\n- is strictly opinionated and minimalist,\n- only tested on Debian GNU/Linux 10.x as a host system,\n- only supports LVM with thin provisioning for storage,\n- only supports macvtap or bridged networking,\n- assumes that the underlying network is an isolated VLAN with DHCP and DNS\n  service provided elsewhere.\n\n## Installation\n\n### Dependencies\n\n- Debian GNU/Linux 10.x `x86_64` as a host system.\n- LVM, `thin-provisioning-tools`, `socat`, `qemu-system-x86`.\n- `rng-tools5` (recommended, see below).\n- `ssvnc` (optional).\n\n### Rough steps\n\nThis is for an install from scratch, as root:\n\n```sh\nmake\nsudo make install\n# READ and edit the script to suit (at least changing the volume group name)\nsudo ./install.sh\n# READ and edit /etc/vm/config.sh (at least changing the volume group name)\n```\n\nThe defaults are to use `bridge` mode for networking, using `vmbr0`. For an\nexample of how to set up `vmbr0`, see [examples/vmbr0](examples/vmbr0).\n\nFor `vm console` to work directly on the host, install `ssvnc`.  If you\nonly need to access consoles via the SSH forwarding functionality, copy\n`src/vm-console.sh` to your client host and install `ssvnc` there. In\neither case, you do not need the JRE dependency of `ssvnc`.\n\n## Known issues/caveats\n\n- Not much documentation, but the `vm` commands should be self-explanatory.\n- Due to the need to manipulate LVM volumes, most `vm` commands must be run as\n  root.\n- `vm create` and `vm clone` _should_ be safe to execute in parallel, but this\n  has not (yet) been extensively tested under load. All other _VM-specific_\n  operations on the same VM should not be called in parallel.\n- The current network setup relies on an undocumented external dnsmasq\n  configuration, I'd like to replace this with a MirageOS unikernel.\n- Running VMs regularly will quickly exhaust the host system kernel's entropy\n  pool, leading to unexpected hangs of user processes trying to read\n  /dev/random.  Install `rng-tools5` to start an `rngd` service feeding entropy\n  from hardware sources into the host kernel's entropy pool. The guest VM is\n  configured with a `virtio-rng` device which the guest OS should use as an\n  entropy source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobur-coop%2Fvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobur-coop%2Fvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobur-coop%2Fvm/lists"}