Skip to main content

A command-line tool for managing QEMU virtual machines created through Syzkaller's create-image.sh.

Project description

syzqemuctl

A command-line tool for managing QEMU virtual machines created through Syzkaller's `create-image.sh`.

PyPI - Version PyPI - Downloads GitHub License Codacy grade

Features

  • Easy VM creation and management
  • Automated template image creation using syzkaller's create-image.sh
  • SSH and file transfer support
  • Command execution in VMs
  • Screen session management for VM console access

See details in Usage section :)

Change Log

Each version without BUG tag is usable.

v0.1.0 ~ v0.1.10 - 0.1.0: 2025-01-16 - Initial release (BUG: entry_point is wrong) - 0.1.1: 2025-01-16 - Update README.md (BUG: entry_point is wrong) - 0.1.2: 2025-01-17 - Fix bug of entry point (**CLI USABLE NOW!**) - 0.1.3: 2025-01-17 - Add badges - 0.1.4: 2025-01-20 - Fix the inconsistencies of README and code (**API USABLE NOW!**) - 0.1.5: 2025-01-21 - Complete vm.wait_until_ready and update README - 0.1.6: 2025-01-21 - Update version info and try to solve the installation dependency problem - 0.1.7: 2025-01-21 - Fix the installation dependency problem - 0.1.8: 2025-01-22 - Add smart option --version and move some functions to utils.py - 0.1.9: 2025-01-22 - Add safe_decode in execute in vm.py - 0.1.10: 2025-01-22 - Use the kernel in last vm config to start vm by default
v0.2.0 ~ progressing - 0.2.0: 2025-04-25 - Add user friendly instruction for running image and update email - 0.2.1: 2025-04-26 - Add documentation for copy dirs from local to vm - 0.2.2: 2025-04-27 - Add restart for vm and update README - 0.2.3: 2025-04-27 - Set default image size of image-template to 5GB and support --size for creating vm (BUG: size it doesn't work) - 0.2.4: 2025-04-27 - Fix a missing file in creating vm with specified size and optimize printing - 0.2.5: 2025-05-01 - Add security check for command injection - 0.2.6: 2025-05-12 - Add blocking mode for init command

Installation

pip install syzqemuctl

Requirements

python3.8+ qemu screen ssh  

Configuration

The configuration file is stored in ~/.config/syzqemuctl/config.json. It contains:

  • Images home directory path
  • Default VM settings

Usage

⭐ As a command-line tool (CLI)

You can check the usage of syzqemuctl or syzqemuctl CMD by adding --help. Here are some common uses:

  1. Initialize syzqemuctl:
syzqemuctl init --images-home /path/to/images
  1. Create a new VM:
syzqemuctl create my-vm [--size 5120]   # --size INT for specifying the VM disk size (5GB by default)
  1. Run the VM:
syzqemuctl run my-vm --kernel /path/to/kernel
  1. Check VM status:
syzqemuctl status my-vm
  1. Copy files/dir to/from VM:
syzqemuctl cp local_file my-vm:/remote/path  # Copy to VM
syzqemuctl cp my-vm:/remote/file local_path  # Copy from VM

syzqemuctl cp local_dir my-vm:/remote/       # Copy local_dir to VM
syzqemuctl cp local_dir/ my-vm:/remote/      # Copy local_dir/* to VM
  1. Execute commands in VM:
syzqemuctl exec my-vm "uname -a" # You'd better wrap the command with double quotes
  1. Stop the VM:
syzqemuctl stop my-vm
  1. Restart the VM:
syzqemuctl restart my-vm
  1. List all VMs:
syzqemuctl list
  1. Delete the VM:
syzqemuctl delete my-vm

⭐ As a Python package (API)

from syzqemuctl import ImageManager, VM

manager = ImageManager("/path/to/images_home")
manager.initialize()
manager.create("my-vm")

# Or just direct specify a created VM and
vm = VM("/path/to/images_home/my-vm")
vm.start(kernel="/path/to/kernel")

# Wait several minutes for the VM to be ready, or you can check by:
if vm.is_ready():
    pass

# Or use this API to wait:
if vm.wait_until_ready(timeout=180, interval=60):
    pass

# You need to use this context manager to auto-connect/disconnect
with vm:
    vm.copy_to_vm("/path/to/local/file", "/path/to/vm/remote/file")
    stdout, stderr = vm.execute("uname -a")
    print(f"stdout: {stdout}\nstderr: {stderr}")

License

Apache-2.0

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

syzqemuctl-0.2.6.tar.gz (15.9 kB view details)

Uploaded Source

File details

Details for the file syzqemuctl-0.2.6.tar.gz.

File metadata

  • Download URL: syzqemuctl-0.2.6.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.8.10

File hashes

Hashes for syzqemuctl-0.2.6.tar.gz
Algorithm Hash digest
SHA256 35a80e5c73add1b7c0359c72679e2fe1cd3c182ced817e94f651c313e3abde0f
MD5 d45d5238d180cf0f4fc8424d95924a06
BLAKE2b-256 ba2a8c7c35f40439d7de653cb1f3b04ff07a61e8e71709192b9c77de0421df11

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page