{"id":20620544,"url":"https://github.com/blacklight/vmctl","last_synced_at":"2026-04-21T06:33:06.771Z","repository":{"id":66602224,"uuid":"466578393","full_name":"blacklight/vmctl","owner":"blacklight","description":"Script to automate the management of Arch Linux qemu-based VMs","archived":false,"fork":false,"pushed_at":"2022-03-07T23:07:24.000Z","size":27,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-06T20:16:31.807Z","etag":null,"topics":["arch-linux","provisioning-scripts","qemu","qemu-kvm"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blacklight.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-05T22:08:00.000Z","updated_at":"2022-03-07T21:34:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"ddd36bcb-14bb-4406-8278-c3db1f6436f7","html_url":"https://github.com/blacklight/vmctl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/blacklight/vmctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacklight%2Fvmctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacklight%2Fvmctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacklight%2Fvmctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacklight%2Fvmctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blacklight","download_url":"https://codeload.github.com/blacklight/vmctl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacklight%2Fvmctl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32080361,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T06:27:27.065Z","status":"ssl_error","status_checked_at":"2026-04-21T06:27:21.250Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arch-linux","provisioning-scripts","qemu","qemu-kvm"],"created_at":"2024-11-16T12:14:50.221Z","updated_at":"2026-04-21T06:33:06.756Z","avatar_url":"https://github.com/blacklight.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vmctl\n\n`vmctl` is a script that automates the installation, provisioning and\nmanagement of Arch Linux virtual machines.\n\n## Dependencies\n\n- `qemu`\n- `curl`\n- `expect`\n\n## Installation\n\nJust copy the `vmctl` script anywhere in your `PATH`, or clone the repository\nand create a symbolic link to `vmctl` in your `PATH`.\n\n## Usage\n\n### Install an Arch Linux virtual machine\n\nThe `vmctl install` command can be used to create an Arch Linux virtual machine\non the fly, wherever you are. It does the following:\n\n- It downloads the latest Arch Linux installer ISO image if none was downloaded\n  or a new one is available.\n- It creates a `qemu` disk file.\n- It boots a new KVM that uses the ISO file as as CDROM and automates the\n  installation of Arch Linux in the virtual machine (no user prompt required).\n- It can install extra packages and run custom post-installation provisioning scripts.\n\n```text\nUsage: vmctl install [-o \u003coutput-disk-image\u003e] [-a \u003carchitecture\u003e] [-s \u003cdisk-size\u003e]\n        [-m \u003cmemory\u003e] [-h \u003chostname\u003e] [-P \u003croot-password\u003e] [-u \u003cnon-root-username\u003e]\n        [-p \u003cnon-root-user-password\u003e] [-z \u003ctimezone\u003e] [-l \u003clocale\u003e] [-M \u003carch-mirror-url\u003e]\n        [-K] [extra qemu arguments]\n\n-o      \u003coutput-disk-image\u003e             Path of the output disk image (default: ./arch.img)\n-a      \u003carchitecture\u003e                  Target architecture (default: x86_64)\n-s      \u003cdisk-size\u003e                     Disk size (default: 8G)\n-m      \u003cmemory\u003e                        RAM size in KB (default: 2048)\n-h      \u003chostname\u003e                      VM hostname (default: qemu)\n-P      \u003croot-password\u003e                 Root password. If not specified it will be prompted\n-u      \u003cnon-root-username\u003e             Username for the main non-root user\n-p      \u003cnon-root-user-password\u003e        Password for the non-root user. If not specified it will be prompted\n-z      \u003ctimezone\u003e                      System timezone (default: UTC)\n-l      \u003clocale\u003e                        System locale (default: en_US.UTF-8)\n-M      \u003carch-mirror-url\u003e               Arch Linux download mirror URL (default: http://mirror.cj2.nl/archlinux/iso/latest/)\n                                        Consult https://archlinux.org/download/ for a full list of the available download mirrors.\n-K                                      Disable pacman keyring checks during installation. It's potentially unsafe,\n                                        but it can be an option if downloading the keys takes too long.\n```\n\nIf a required option is not specified on the command line then it will be\ninteractively prompted to the user (defaults are available for most of the\noptions).\n\nNon-interactive example:\n\n```bash\nvmctl install \\\n    -h my_vm \\\n    -a x86_64 \\\n    -s 16G \\\n    -m 2048 \\\n    -P root \\\n    -u myuser \\\n    -p password \\\n    -z Europe/Amsterdam \\\n    -o arch-base.img\n```\n\nIf you want to install an extra list of packages besides the default ones, then\nspecify them in a file named `PKGLIST` in the same directory as the disk image file.\n\nIf you want to run a custom post-installation script after the core system has been\ninstalled, then create a custom script named `post-install.sh` in the same directory\nas the disk image file.\n\n#### Notes\n\nThe keyring population process may currently (as of March 2022) take a long time.\nThis is a [known issue](https://www.reddit.com/r/archlinux/comments/rbjbcr/pacman_keyring_update_taking_too_long/).\n\n### Resize an existing image\n\n```bash\nqemu-img resize \"$imgfile\" +10G\n```\n\n### Create a COW (Copy-On-Write) image on top of a disk image\n\n```bash\nqemu-img create -o backing_file=\"$imgfile\",backing_fmt=raw -f qcow2 img1.cow\n```\n\nThis is particularly useful if you want to have a \"base\" image and several customized\nimages built on it.\n\n### Convert a raw qemu image to a VirtualBox\n\n```bash\nqemu-img convert -O vdi disk.img disk.vdi\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblacklight%2Fvmctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblacklight%2Fvmctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblacklight%2Fvmctl/lists"}