Releases: arighi/virtme-ng
v1.40
virtme-ng v1.40 (hotfix release is out)!
No significant change, this is just a very small hotfix release to solve a packaging problem introduced by a conflict with the new vng-mcp tool.
And, while at it, there're also some small improved hints in the MCP server, so that AI agents can better understand how to build the kernel using vng --build.
Detailed ChangeLog:
Andrea Righi (3):
virtme-ng: MCP: Document kernel build using virtme-ng
virtme-ng: setup: Remove vng-mcp from scripts
virtme-ng v1.40
v1.39
virtme-ng v1.39 is out!
The most noticeable change in this release is the new Model Context Protocol (MCP) server. This feature lets you connect with AI assistants such as Claude, Cursor, etc., and use natural human language to automate kernel development tasks.
In this way, AI agents can automatically configure kernels, apply patches from lore.kernel.org, and run commands within recompiled kernels. You can even have the AI agent perform bug bisection for you and run specific commands/scripts inside each recompiled version to determine whether the kernel is good or bad.
An additional feature is vCPU pinning (using the --pin CPU_LIST option), which enables binding virtual CPUs to particular physical host CPUs. This ensures more consistent performance testing within the vng guest environment.
The release also adds support for memoryless NUMA nodes, enabling users to specify size=0 with the --numa argument to create NUMA nodes without memory. This capability can be useful for simulating heterogeneous architectures, where devices like GPUs are represented as memoryless NUMA nodes to model their CPU locality relationships.
Last, but not least, there's a new --shell BINARY option which lets users choose a different shell to use within the vng session, rather than using their system's default shell and a new --empty-password option that creates empty passwords in the vng guest, instead of blocking login for other users, enabling easier debugging and SSH access during testing.
Other changes:
- Updated Python versions in CI (dropped EOL 3.8 and 3.9)
- Various bug fixes in virtme-init
- Enhanced documentation and README updates
- Improved error handling and validation
Detailed ChangeLog:
Andrea Righi (7):
virtme/architectures: Enable topology extensions for AMD CPUs
virtme-ng: Introduce --shell
virtme-ng: Implement vCPU pinning
virtme: systemd: Disable zram generator
virtme: Support memoryless NUMA nodes
virtme-ng: Add MCP server for AI agent integration
virtme-ng v1.39
Ilya Leoshkevich (3):
virtme-init: Improve nested virtme-ng performance
virtme-init: Fix `base64: invalid input`
virtme-init: Send guest's hostname to the DHCP server
Marc Hartmayer (3):
virtme/commands/run: Fix TypeError
vng: Add `--empty-passwords` support
Improve `vng-mcp` integration
Matthieu Baerts (NGI0) (8):
virtiofsd: run with -o cache=auto in --rw mode
github: python: add 3.14, drop 3.9
project: drop EOL Python 3.8 and 3.9 versions
github: run: use virtme-ng-init in one of the runs
github: run: use the verbose option
github: run: switch to latest ubuntu version
github: run: sync dependences with README
README: docker: keep example up-to-date
Oscar Linderholm (2):
net: option to disable automatic DHCP configuration
Make --no-dhcp a global configuration option
Ricardo B. Marlière (5):
virtme/run: Set virtme_root_user=1 also when using `--root` option
virtme/run: Check read permissions of args.root
virtme/run: Always mount cache when args.root != '/'
virtme-sshd-script: Set SSH_HOME to virtme.cache if it's mounted
virtme-sshd-script: Don't use the default StrictModes
Ricardo Ribalda (1):
virtme-init: Increase timeout for udevadm settle
v1.38
A new version of virtme-ng is out!
This is a fairly calm update, bringing only bug fixes. The most noticeable fix is that the infamous Stale file handle (ESTALE) errors with virtiofsd are finally gone (if you've hit them before, you know how annoying they were).
Other fixes/improvements that are worth mentioning:
- a fix for
systemctl daemon-reloadwhen systemd support is enabled (@marcosps), - a fix for a kernel symlink issue affecting openSUSE/SLE (@marcosps),
- README/docs improvements (@matttbe),
- various coding style cleanups (@mhartmay).
Detailed ChangeLog:
Andrea Righi (4):
virtme_ng_init: Fix potential endless loop when reading /proc/consoles
virtme-ng: Run virtiofsd with -o cache=always to avoid ESTALE errors
doc: Add a note about stale file handle errors
virtme-ng v1.38
Cheng-Yang Chou (1):
docs: Add "cd virtme-ng"
Marc Hartmayer (12):
virtme/guest/virtme-init: su: Do not use a login shell
virtme-ng-init: Be in common with the Bash variant
virtme-ng-init: `cargo clippy` and `cargo fmt` fixes
setup.py: Remove outdated code
virtme_ng_init: Set minimal supported Rust version (MSRV) to 1.75.0
virtme_ng_init: Cargo.toml: Configure linter
virtme_ng_init: Fix most of the new `cargo clippy` findings
pre-commit: Add cargo hooks
pre-commit: Do not use the legacy alias for `ruff`
github actions: rust: Reuse pre-commit
Update README.md to suggest setting up pre-commit
pre-commit: Add more hooks
Marcos Paulo de Souza (3):
utils.rs: Show the reason of why run_cmd failed
init: Create a default lvm.conf file when --systemd is specified
commands: run.py: Resolve symlinks on get_kernel_version
Matthieu Baerts (NGI0) (9):
pre-commit: cargo: display different names
github: rust: use one pre-commit command
README: rework the Installation section
README: move the Requirements section after Installation
README: note about shell completion
README: fix typo and missing backquotes
README: fix aligments
README: remove no longer used 'virtme' link
README: Troubleshooting: poor performances
v1.37
A new version of virtme-ng is out!
The most interesting feature in this new version is the initial support for systemd, thanks to @rbmarliere!
Until now, virtme-ng didn’t support systemd because it relied on a custom init system (virtme-ng-init) to speed up boot time. As a result, tests requiring systemd couldn't run inside the virtme-ng session. With the new --systemd option, virtme-ng can now (optionally) boot with systemd in the virtualized environment, enabling full systemd interaction during testing.
Example:
- without systemd support:
$ vng -r -- systemctl show --property=Version
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to system scope bus via local transport: Host is down
- with systemd support:
$ vng -r --systemd -- systemctl show --property=Version
Version=257.8-1-arch
Note: You'll need a fully-featured (generic) kernel for systemd to start all expected services. Using --systemd with a minimal kernel may not work reliably.
Moreover, this release also includes a few bug fixes and small improvements. Enjoy!
Detailed ChangeLog:
Andrea Righi (2):
virtme/commands/run: Do not fail if nr_open can't be accessed
virtme-ng v1.37
Dafna Hirschfeld (2):
virtme/commands/run: search vmlinux in kdir for gdb
virtme/commands/run: support dry run for gdb
Jakub Kicinski (1):
virtme_ng/utils: resolve symlinks for binary paths
Luis Henriques (1):
virtme/commands/run: also identify static PIE busybox binaries
Marc Hartmayer (3):
virtme_ng: run: Use `json` package for creating the JSON messages
virtme_ng: run: dump: Make sure the temporary file resides on the same file system
virtme_ng: run: Dump: Check for more errors and print error messages
Matthieu Baerts (1):
gdb: dry-run: use 'shlex' to print array
Matthieu Baerts (NGI0) (1):
setup: fix license format
Ricardo B. Marlière (7):
virtme-init: Do not re-mount /run
systemd: Add initial support
virtme-ng: Move get_conf_file_path() from KernelSource to utils.py
virtme-ng: Make utils.get_conf() accept a path
systemd: Enable user to customize masks
virtme_ng/utils: Remove cfg/virtme-ng.conf in favor of CONF_DEFAULT
README.md: Add "Configuration" section
v1.36
Another hotfix release to address an issue with remote builds and fix a couple of quoting problems in the vng command.
Detailed ChangeLog:
Andrea Righi (2):
vng: Fix remote build
virtme-ng v1.36
Marc Hartmayer (3):
virtme_ng: run: --exec and positional arguments are mutually exclusive
virtme-ng: run: Fix quoting
virtme_ng: run: Fix `vng -- ''`
v1.35
v1.34
May the 4th be with your kernel tests, virtme-ng v1.34 is out!
This new version includes lots of improvements in the SSH protocol (special thanks to @mhartmay and @matttbe!) and a better support for the s390 architecture.
By default, SSH connections to the guest now use vsock, a lightweight transport that bypasses the full network stack and can speed up testing workflows. You can also use the -- syntax to run remote commands in a guest via SSH, for example vng --ssh-client -- uname -r. In addition, the integration with tools like ssh, scp, and rsync has been improved for connecting to or copying files from/to a vng guest. To view and customize the exact SSH command being used, try vng --ssh-client --dry-run.
Last but not least, there's also the usual set of misc bug fixes and improvements.
Detailed ChangeLog:
Andrea Righi (12):
init: clean up previous X11 state
init: allow to create raw ICMP socket as regular user
setup.py: Build a static virtme-ng-init
build: support newer pip
virtme-sshd-script: Enable scp support
ssh: Move virtme-ssh-proxy to host tools
doc: Update scp example
resources: Support importlib_resources with python 3.10
ci: Fix coding style and make pre-commit hook happy
virtme-ng: Do not truncate stdout/stderr on process exit
ssh/vsock: Use "%" as the default CID/port separator
virtme-ng v1.34
Andreas Grapentin (2):
enable different user login through virtme ssh client
mount /run with permissions 755 and use as path for sshd files
Jakub Wilk (1):
Add missing spaces in help message
Jim Cromie (2):
configkernel: check for an existing .config before doing new one
check that --custom arg is an existing file
Marc Hartmayer (51):
pyproject.yaml: Specify minimum version of Python supported
Provide a pre-commit configuration file
run: Add '--disable-monitor'
virtme/commands/run: Make 'img_name' parameter optional
run: find_kernel_and_mods: Support multiple img names
architectures: s390x: Add Ubuntu, RH, and Fedora support to img_name
architectures: s390x: Fix serial console args
architectures: s390x: Add earlyconsole args
Use vmcoreinfo device only on architectures that supports it
Fix check-executables-have-shebangs findings
Automatic pyupgrade fixes
Fix all flake8 and pylint findings
pre-commit: Avoid removing the blank line from DCO-1.1.txt
virme/commands/run: find_kernel_and_mods: Fix kernel modules version detection on s390x
Fix ruff pyupgrade check findings
Fix ruff flake8-bear finding
pyproject.toml: Add minimal 'ruff' configuration
pre-commit config: Replace pyupgrade, flake8 and pylint by the ruff checker
pre-commit configuration: Add ruff-format hook
pyproject.toml: Select 'isort' for ruff
setup.cfg: flake8: Ignore E203
Reformat code using 'ruff format'
Add '.git-blame-ignore-revs' file
virtme/architectures: s390x: Use host CPU model in case of KVM and native run
virtme/architectures: Add 'numa_support' function to 'Arch' class
virtme/architectures: Add s390x virtiofs support
architectures: s390x: Add diag288 watchdog support
virtme/commands/run: ssh_client: Fix quoting of cmd in dry-run mode
virtme-sshd-script: Specify the SSH_CONFIG only once
Fix many ShellCheck findings and some other minor nits
virtme/guest/virtme-init: Bail out in case change directory has failed
Fix ShellCheck finding SC2714
virtme/guest/*: Replace `which` utility by `command -v` bash builtin
pre-commit configuration: Add local ShellCheck hook
Add EditorConfig configuration
pre-commit-config: Add local shfmt hook
Format all shell source files
Add the commit formatting the Bash code to '.git-blame-ignore-revs'
virtme-init: Bash implementation: Make it more similar to the Rust implementation
virtme/commands/run: ssh_client: Fix quoting of 'args.remote_cmd'
architectures: Make 'vhost_dev_type' more generic
virtme: Populate own 'known_hosts' file with our SSH host keys
virtme/commands/run: Create and use a SSH client configuration
virtme: Add vsock support for the SSH connection to the guest
virtme-prep-kdir-mods: Get rid of interactive question when modules.dep is removed
virtme/commands/run: get_kernel_version: Refactor kernel version pattern
virtme/run: Fix version detection on s390x if */lib/modules/.../vmlinuz is used
virtme_ng/version.py: Fix coding style
README.md: Improve `virtme-ng.conf` example (#278)
virtme/commands/run: Use `tempfile.TemporaryFile`
Use `shlex.join()` instead of `" ".join(...)`
Matthieu Baerts (NGI0) (18):
README: recommended way to build in a separate dir
README: example with CCache
config: create build dir if defined
version: use importlib.metadata instead of pkg_resources
ssh: disable host key checking
make: drop submodule update
resources: replace pkg_resources by importlib_resources
README: mention 'ssh vsock/<CID>'
console: abort if socat is not available
vng: build/quote: quotes envs and args
vng: build: print make command
vng: exec: quote envs args
vng: args: move --ssh-tcp in the remote group
vng: console/ssh: use envs as remote cmd
README: example with KBUILD_OUTPUT
vng: use shlex.split() instead of <str>.split()
vng: --append: better handled quotes
vng: build: more readable command
Ricardo B. Marlière (1):
virtme/run: Set kernel.use_root_mods when user pass `--root`
virtme-ng v1.33
virtme-ng v1.33 is now available!
While the changelog looks extensive, this release is quite small and stable with only a few bug fixes. The big changelog is due to the merging of virtme-ng-init into the main virtme-ng project (while keeping the virtme-ng-init git history intact). This merge allows us to simplify the project structure and eliminate the need to manage a separate git submodule.
As a result, you may need to run the following commands to remove the submodule also from your local Git repository (in case somehting isn't working in your regular workflow):
$ git submodule deinit virtme_ng_init
$ git rm -rf virtme_ng_init
After that, just fetch, pull, or reset to the main virtme-ng branch as usual.
Most noticeable changes in this release include restricting the SSH port to localhost (to mitigate potential security risks when --ssh is used), support for running amd64 vng instances on non-x86 platforms (e.g., running an x86 vng instance on arm64), and a number of minor fixes here and there.
Big thanks to all the contributors!
Detailed ChangeLog:
Andrea Righi (53):
initial commit
virtme-ng-init: initial implementation in Rust
doc: add a proper README.md
create rust.yml
properly handle GUI support
workaround to be able to start xinit directly from a console session
doc: README.md: project merged into virtme-ng
virtme-ng-init: preserve host path
virtme_ng_init: properly synchronize udev and network startup
virtme-ng: allow to run snaps inside virtme-ng instances
virtme-ng: provide --enable-snaps
virtme-ng-init: initialize XDG_RUNTIME_DIR
guest-tools: add a script to automatically start the sound subsystem
virtme-ng: try to automatically fix permissions of snapd state.json
virtme: init process refactoring
virtme-ng: pass --exec command via /proc/cmdline
virtme-ng-init: support 32-bit architectures
virtme-ng-init: use usize instead of u64 in do_mount()
virtme-ng-init: minor coding style fixes
virtme-ng-init: relax 'nix' and 'users' crate dependencies
remove Cargo.lock
update README.md
github: add coding style checks to the workflows
virtme-ng-init: support base64 encoded commands
cargo: use fixed versions for nix and users crate
virtme-ng-init: fail gracefully when executing external commands
virtme-ng-init: support long commands in graphic mode
virtme-ng-init: make virtme-script a constant
virtme-ng: honor virtme_user when running user script
virtme-ng-init: always set XDG_RUNTIME_DIR
virtme-ng-init: set proper ownership of the default console device
virtme-ng-init: set the proper ownership on the virtio-ports devices
virtme-ng-init: fix build error with older versions of rustc
virtme-ng-init: add default secure_path to /etc/sudoers
virtme-ng-init: drop usage of group when chwon'ing
virtme-ng-init: docker host support
virtme-ng-init: channel the return code of a command to the host
virtme-ng-init: allow virtme-ng to specify a console device
virtme-ng-init: always override sudoers
virtme-ng-init: handle command line option nr_open
virtme-ng-init: apply limits after mounting kernel filesystems
virtme-ng-init: hide additional sudo settings
virtme-ng-init: print a hint to exit from virtme-ng
virtme-ng-init: allow to mount legacy cgroupfs (v1)
virtme-ng-init: properly configure terminal line settings
add Cargo.lock
virtme-ng-init: move all temp files to /run/tmp
virtme-ng-init: overlayfs: fall back to mounting without xino option
ssh: support virtme.ssh
virtme-ng-init: always check return code when executing bash
virtme-ng: enable amd64 architecture support on non-x86 platforms
virtme: always print kernel panic / oops in interactive mode
virtme-ng v1.33
Andreas Grapentin (1):
properly quoting exec string to avoid breaking virtme-run invocation on more complex guest calls
David Carlier (1):
virtme_ng_init: replace Err(...) instances for is_err()
Marcos Paulo de Souza (1):
main.rs: Enable lvm usage
Matthieu Baerts (NGI0) (17):
init: set the HOME env var if root
net: support multiple interfaces
net: setup the loopback iface in a thread
poweroff: fix irrefutable 'if let' pattern warning
vsock: socat service for remote console
vsock: mount virtme_vsockmount if needed
ssh: only export the port to localhost
virtme-ng-init: remove the submodule
gh: import and adapt rust workflow
console/ssh: properly quote the remote cmd
vng: run: support O= in interactive mode
vng: run: support O= with full paths
vng: run: support KBUILD_OUTPUT
vng: support --debug with --qemu-opts
vng: support --nvgpu and --qemu-opts
vng: fail if --arch is used without --root
vng: arch: list supported arch in case of errors
Neill Kapron (1):
virtme-ng-init: do not remount /run
Ondrej Mosnáček (2):
virtme_ng_init: use uzers instead of users (which is unmaintained)
virtme_ng_init: update dependencies
Thibault Ferrante (2):
README.md: add building and installation section
virtme-ng-init: allow /tmp to be mounted from host
Uli Schlachter (34):
Use ? on Option where possible
Add a simple test for extract_user_script()
Simplify extract_user_script()
Remove use of HashMap
Remove Option return from run_misc_services()
Simplify an env var check
Simplify(?) some environment lookup
Simplify lookup of $virtme_user
Simplify(?) some command construction
Remove useless Some-wrapping
Remove unnecessary 'static
Replace e.g. libc::S_IRWXU with Mode::S_IRWXU
Fix clippy warnings around logging
Fix clippy warnings about patterns
Fix clippy warning about unnecessary return
Fix clippy warnings about reading lines
Fix clippy warning about "loop never loops"
Fix clippy warning about "push() after creation"
Fix clippy warning about unnecessary matching
Simplify opening of TTYs
Use uname() from nix instead of libc
Remove useless to_string()
Simplify /etc/shadow generation
Use utils::create_file() to write some file contents
Remove an unnecessary Vec
Refactor logic in find_udevd()
Allow run_cmd() with non-utf8-strings
Avoid allocations for static strings for run_shell()
Use nix' flags instead of libc's in one more place
Avoid temporary allocation for PathBuf
Add a log!() macro
(Needlessly) optimise logging
Use write_all() instead of write()
Remove unnecessary trim_end_matches('\n')
Zev Weiss (3):
utils: Don't log mount failures due to ENOENT
Don't try to run systemd-tmpfiles on non-systemd systems
Add guest hostname to /etc/hosts
virtme-ng v1.32
Happy new year! virtme-ng v1.32 is out!
We're kicking off with an exciting new release with some new features. The most notable being the remote console (vsock), thanks to @matttbe, and SSH support.
The remote console (--console / --console-client) allows you to open a console session on a running vng instance from another terminal, which can be really useful for inspecting tests/workloads while they're running in the primary console.
The SSH support (--ssh / --ssh-client) enables direct ssh/scp access to a running vng instance, making it particularly useful to transfer data, such as large test outputs, from the guest to the host and vice-versa. Since these are all new features, I expect to see some bugs, so don't hesitate to report them.
Additionally, there's a new command --numa-distance, that can be used to simulate heterogeneous NUMA nodes with different distance costs.
Enjoy!
Detailed ChangeLog:
Andrea Righi (6):
numa: introduce --numa-distance
virtme-init: Start udev after mounting all filesystems
virtme: enable ssh support
virtme-ng: introduce --console and --ssh shortcuts
sshd: generate a custom sshd_config
virtme-ng v1.32
Marcos Paulo de Souza (1):
virtme-init: Enable lvm usage
Matthieu Baerts (NGI0) (24):
net: support multiple interfaces
udhcpc: add default route if announced
net: allow to specify the bridge iface
net: option to force net MAC address
github: pylint: new supported versions
feat: vsock support for remote console access
vsock: connect: generate helper script
vsock: connect: pass command to execute
vsock: connect: avoid issues with modified script
make: build virtme-ng-init by default
vsock: connect: support commands without tty
vsock: connect: execute given cmd with right user
vsock: connect: only use 'su' if needed
vng: pass '--user root' to virtme-run
vsock: connect: respect '--user' if defined
vsock: connect: respect '--pwd' and '--cwd' if defined
vsock: 'socat' is required
vsock: rename options to --client/--server
console: port: switch to 2222 by default
console: --client and --server are mutually excl
console: client: support --dry-run
README: mention 'socat' in the requirements
github: restrict builds on push to the main branch
sshd: look for overlayfs before modifying auth keys
Michal Suchanek (1):
setup.py: Do not fail when argparse-manpage is not available
Tamir Duberstein (2):
Revert "Merge pull request #184 from hramrach/main"
Restore bash completions
jeromecst (1):
Update README.md
v1.31
virtme-ng v1.31 released!
This is a minor release to fix a packaging issue, after an attempt to modernize the build system we realized that we were not installing the bash completion file anymore, so we have temporarily reverted the change to cut this new release.
This is mostly for distro that may have missed the bash completion and the default config file with the previous release (v1.30).
In addition to this packaging fix, there is also the initial support to run virtme-ng on macOS, which is pretty cool (thanks @tamird)!
Detailed ChangeLog:
Andrea Righi (2):
setup.py: update contact email
virtme-ng v1.31
Michal Suchanek (1):
Revert "Modernize build system"
Tamir Duberstein (4):
Make it build on macOS
Remove redundant initialization
Remove usage of os.uname
Make qemu work on macOS