A command-line tool for managing QEMU virtual machines created through Syzkaller's `create-image.sh`.
- 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 :)
- 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
pip install syzqemuctl
python3.8+ qemu screen ssh
The configuration file is stored in ~/.config/syzqemuctl/config.json
. It contains:
- Images home directory path
- Default VM settings
- Initialize syzqemuctl:
syzqemuctl init --images-home /path/to/images
- Create a new VM:
syzqemuctl create my-vm
- Run the VM:
syzqemuctl run my-vm --kernel /path/to/kernel
- Check VM status:
syzqemuctl status my-vm
- Copy files 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
- Execute commands in VM:
syzqemuctl exec my-vm "uname -a" # You'd better wrap the command with double quotes
- Stop the VM:
syzqemuctl stop my-vm
- List all VMs:
syzqemuctl list
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}")
Apache-2.0
Contributions are welcome! Please feel free to submit a Pull Request.