Skip to main content

Pure Rust toolkit for VM disk image inspection and manipulation - Python bindings

Project description

guestctl

A pure Rust toolkit for VM disk inspection and manipulation with beautiful emoji-enhanced output. Inspect VM disks in seconds without booting them. Designed to work seamlessly with hyper2kvm.

License: LGPL v3 Rust

๐ŸŽจ New: Beautiful terminal output with emojis and color coding makes VM inspection actually enjoyable!

Features

  • ๐Ÿฆ€ Ergonomic Rust API - Type-safe enums, builder patterns, and fluent interfaces for modern Rust idioms
  • ๐Ÿ” Comprehensive API - 578 disk image manipulation functions (563 fully implemented, 15 API-defined) - 97.4% implementation coverage
  • ๐Ÿฆ€ Pure Rust - No C dependencies for core library, memory safe, high performance
  • โšก Compile-Time Safety - Type-safe filesystems, OS detection, and partition tables prevent runtime errors
  • ๐Ÿ’ฟ Disk Format Support - QCOW2, VMDK, RAW detection via magic bytes
  • ๐Ÿ“Š Partition Tables - MBR and GPT parsing, partition creation/deletion/resizing
  • ๐Ÿ—‚๏ธ Filesystem Operations - Mount/unmount, create (mkfs), check (fsck), tune, trim, resize
  • ๐Ÿ”Ž OS Inspection - Detect OS type, distro, version, architecture, hostname
  • ๐Ÿ“ฆ Package Management - List and inspect dpkg/rpm packages
  • ๐ŸŒ Network Configuration - Read hostname, DNS, interface config
  • ๐Ÿ‘ค System Configuration - Timezone, locale, users, groups, systemd units
  • ๐Ÿ” Encryption Support - LUKS encrypted volumes
  • ๐Ÿ“š LVM Support - Logical volume management
  • ๐Ÿ—œ๏ธ Archive Operations - tar, tgz, cpio creation and extraction
  • ๐Ÿ”‘ Checksums - MD5, SHA1, SHA256, SHA384, SHA512
  • ๐Ÿ›ก๏ธ Security Operations - SELinux, AppArmor, capabilities, ACLs
  • ๐Ÿฅพ Boot Configuration - Bootloader detection, kernel management, UEFI support
  • ๐Ÿ’พ Advanced Disk Operations - Swap management, hexdump, strings, secure scrubbing
  • ๐Ÿ”ง Service Management - systemd/sysvinit service detection, cron jobs
  • ๐Ÿ”‘ SSH Operations - SSH key management, certificates, authorized_keys
  • โš™๏ธ Configuration Editing - Augeas-based config file editing
  • ๐ŸชŸ Windows Support - Registry hive access, Windows-specific inspection
  • ๐ŸŒณ Btrfs Advanced - Subvolumes, snapshots, balance, scrub operations
  • ๐Ÿ“Š File Metadata - Detailed stat operations, inode info, permissions
  • ๐Ÿ› ๏ธ Utility Functions - Feature detection, settings management, debug tools
  • ๐Ÿ”ท XFS Support - XFS repair, administration, info, database operations
  • ๐Ÿ’ฟ ISO Operations - ISO creation, inspection, mounting
  • ๐Ÿ“ค Advanced Transfer - Offset-based downloads/uploads, device copying
  • ๐Ÿ’พ Disk Image Management - Create, resize, convert, sparsify, snapshot disk images
  • ๐Ÿ”ง Internal API - State management, environment parsing, debug functions
  • ๐Ÿ’ฟ NTFS Operations - ntfsclone, ntfsfix, label management
  • ๐Ÿ”ท Extended Filesystem - ext2/3/4 UUID, label, dump/restore operations
  • ๐Ÿ” Glob Operations - Pattern matching, ls0, find0, case-insensitive search
  • ๐Ÿ”ง Node Operations - mknod, mkfifo, mktemp, truncate, utimens
  • ๐Ÿ’พ MD/RAID - Software RAID creation, management, inspection
  • ๐Ÿ›ก๏ธ SELinux Extended - SELinux inspection, restorecon
  • ๐Ÿ” Capabilities - Linux capabilities management
  • ๐Ÿ”’ ACL Operations - POSIX ACL management
  • ๐ŸชŸ Hivex - Windows registry hive manipulation (16 functions)
  • ๐Ÿ”„ Rsync - rsync-based file synchronization
  • ๐Ÿฅพ Syslinux - syslinux/extlinux bootloader installation
  • ๐Ÿ“” Journal - systemd journal reading, export, verification
  • ๐Ÿ‘๏ธ Inotify - file monitoring with inotify
  • ๐Ÿ—œ๏ธ SquashFS - SquashFS creation and extraction
  • ๐Ÿฆ  YARA - malware scanning with YARA rules
  • ๐Ÿ”ฌ TSK - forensics with The Sleuth Kit (deleted file recovery)
  • ๐Ÿ’ฝ ZFS - ZFS filesystem management (10 functions)
  • ๐ŸชŸ LDM - Windows dynamic disk support (8 functions)
  • ๐Ÿ”€ Multipath - multipath device management
  • ๐Ÿฅพ GRUB - GRUB bootloader installation and configuration
  • โšก F2FS - Flash-Friendly File System support
  • ๐Ÿ’พ Bcache - block cache management
  • ๐Ÿ“ DOSFS - FAT12/16/32 filesystem tools
  • ๐Ÿ“ฆ CPIO - CPIO archive format support
  • ๐Ÿ—‚๏ธ NILFS - log-structured filesystem support
  • ๐Ÿ”ง UFS - Unix File System support
  • ๐ŸŒฒ ReiserFS - ReiserFS filesystem management
  • ๐Ÿ“ JFS - Journaled File System support
  • ๐Ÿ”น Minix - Minix filesystem support
  • ๐Ÿฉบ SMART - disk health monitoring with smartctl
  • ๐Ÿงน SysPrep - VM preparation operations (remove unique data)
  • ๐Ÿ› ๏ธ Utilities - version info, QEMU detection, umask, device stats
  • ๐Ÿ”ง Block Device Ops - setro/setrw, flush, reread partition table, block/sector size
  • ๐Ÿ“ Base64 - Base64 encoding/decoding for file content
  • ๐Ÿ”„ Extended Swap - swap label/UUID management operations
  • ๐Ÿ’พ DD Operations - dd-style copy, zero device operations
  • ๐Ÿ“ Positional I/O - pread/pwrite with offset support
  • ๐Ÿ” Virt Tools - virt-inspector, virt-convert, virt-resize, virt-sparsify info
  • ๐Ÿ—œ๏ธ Compression - gzip, bzip2, xz compression/decompression for files and devices
  • ๐Ÿท๏ธ Label Operations - generic filesystem label/UUID management (auto-detect fs type)
  • ๐Ÿ”„ Sync Operations - sync, drop_caches, flush for data consistency
  • ๐Ÿ”– Attributes - extended attributes (xattr) and file flags management
  • ๐Ÿงฉ Partition Types - GPT type GUID, attributes, expand partition tables
  • ๐Ÿ”— Link Management - symbolic and hard link operations
  • ๐Ÿ Python Bindings - PyO3-based native Python bindings
  • โšก Retry Logic - Built-in exponential backoff for reliable operations
  • ๐Ÿ”Œ Extensible - Modular architecture for easy extension

Advanced CLI Features (guestctl)

  • ๐ŸŽจ Beautiful Visual Output - Emoji-enhanced terminal output with color coding for easy scanning
    • ๐Ÿ’พ Block devices with icons and visual hierarchy
    • ๐Ÿง OS detection with distribution-specific icons (Linux, Windows, FreeBSD)
    • ๐Ÿ”ด Package manager icons (RPM, DEB, Pacman)
    • ๐ŸŒ Network configuration display
    • Smart color coding: green (active), red (issues), gray (unknown)
  • ๐Ÿ“Š Multiple Output Formats - JSON, YAML, CSV, and beautiful plain text for automation and scripting
  • ๐ŸŽฏ Inspection Profiles - Specialized analysis modes:
    • Security Profile - SSH hardening, firewall status, user security, SELinux/AppArmor, risk scoring
    • Migration Profile - Complete inventory for VM migration planning
    • Performance Profile - System tuning opportunities and bottleneck detection
  • ๐Ÿ”„ VM Comparison - Diff two VMs or compare multiple VMs against a baseline
  • ๐Ÿ“ค Report Export - HTML and Markdown report generation for documentation
  • โšก Result Caching - SHA256-based caching for instant repeated inspections (60x speedup)
  • ๐Ÿš€ Batch Processing - Multi-threaded parallel inspection of multiple disk images

Quick Start

Installation

# Install system dependencies (Fedora/RHEL)
sudo dnf install qemu-img

# From source
git clone https://github.com/ssahani/guestctl
cd guestctl
cargo build --release
cargo install --path .

CLI Tool

GuestCtl is a powerful command-line tool for inspecting and manipulating VM disk images without mounting them. Features beautiful emoji-enhanced output with color coding for better readability.

Example - Inspect a VMware Photon OS disk (5 seconds):

sudo guestctl inspect photon.vmdk

Output:

๐Ÿ’พ Block Devices
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  โ–ช /dev/sda 8589934592 bytes (8.59 GB)
    โ€ข Read-only: yes

๐Ÿ—‚  Partitions
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  ๐Ÿ“ฆ /dev/sda3
    โ€ข Size:   8574189056 bytes (8.57 GB)

๐Ÿ“ Filesystems
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  ๐Ÿง /dev/sda3 ext4
    โ€ข UUID:  311182bd-f262-4081-8a2d-56624799dbad

๐Ÿ–ฅ๏ธ  Operating Systems
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    ๐Ÿง Type:         linux
    ๐Ÿ“ฆ Distribution: photon
    ๐Ÿท๏ธ Product:      VMware Photon OS/Linux 5.0
    ๐Ÿ  Hostname:     photon-2e2948360ed5
    ๐Ÿ”ด Packages:     rpm
    โšก Init system:  systemd
    ๐Ÿ’พ Disk usage:   15.1% (5.15 TB used / 34.14 TB total)
    ๐Ÿง Kernel:       vmlinuz-6.1.10-11.ph5

Key Features:

  • ๐ŸŽจ Color-coded output - Visual hierarchy with emojis and colors
  • โšก Fast - Complete OS detection in ~5 seconds
  • ๐Ÿ”’ Safe - Read-only by default
  • ๐ŸŒ Network detection - Automatic network config parsing
  • ๐Ÿ“Š Multiple formats - Pretty terminal, JSON, HTML, YAML

Basic Operations:

# Inspect with beautiful output
sudo guestctl inspect photon.vmdk

# JSON output for scripting
sudo guestctl inspect --json ubuntu.qcow2 | jq '.operating_systems[0].distro'

# List filesystems
sudo guestctl filesystems ubuntu.qcow2

# List installed packages
sudo guestctl packages ubuntu.qcow2

# Read a file
sudo guestctl cat ubuntu.qcow2 /etc/hostname

# List directory contents
sudo guestctl list ubuntu.qcow2 /etc

# Extract a file
sudo guestctl extract ubuntu.qcow2 /etc/passwd ./passwd

Advanced Features:

# Basic inspection
guestctl inspect vm.qcow2

# JSON output for automation
guestctl inspect vm.qcow2 --output json | jq '.os.hostname'

# Security audit profile
guestctl inspect vm.qcow2 --profile security

# Migration planning profile
guestctl inspect vm.qcow2 --profile migration --output json

# Performance tuning profile
guestctl inspect vm.qcow2 --profile performance

# Compare two VMs
guestctl diff vm-before.qcow2 vm-after.qcow2

# Compare multiple VMs against baseline
guestctl compare baseline.qcow2 vm1.qcow2 vm2.qcow2 vm3.qcow2

# Export HTML report
guestctl inspect vm.qcow2 --export html --export-output report.html

# Export Markdown inventory
guestctl inspect vm.qcow2 --export markdown --export-output inventory.md

# Use caching for faster repeated inspections
guestctl inspect vm.qcow2 --cache  # First run: ~30s, subsequent: <0.5s

# Batch inspect multiple VMs in parallel
guestctl inspect-batch *.qcow2 --parallel 4 --cache

# Cache management
guestctl cache-stats
guestctl cache-clear

Available Commands:

  • inspect - Comprehensive VM inspection with profiles
  • diff - Compare two disk images
  • compare - Compare multiple VMs against baseline
  • inspect-batch - Parallel batch inspection
  • list - List files in disk image
  • extract - Extract files from disk image
  • execute - Execute commands in guest
  • backup - Create tar backup from guest
  • convert - Convert disk image formats
  • create - Create new disk image
  • check - Filesystem check
  • usage - Disk usage statistics
  • detect - Detect disk image format
  • info - Disk image information
  • cache-stats - View cache statistics
  • cache-clear - Clear inspection cache
  • version - Show version information

Full Documentation: docs/CLI_GUIDE.md


Basic Usage

Library (GuestFS API)

use guestctl::guestfs::Guestfs;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create handle
    let mut g = Guestfs::new()?;

    // Add disk image (read-only)
    g.add_drive_ro("/path/to/disk.qcow2")?;

    // Launch (analyzes disk)
    g.launch()?;

    // Inspect OS
    let roots = g.inspect_os()?;
    for root in roots {
        println!("Found OS root: {}", root);
        println!("  Type: {}", g.inspect_get_type(&root)?);
        println!("  Distro: {}", g.inspect_get_distro(&root)?);
        println!("  Version: {}.{}",
            g.inspect_get_major_version(&root)?,
            g.inspect_get_minor_version(&root)?);
        println!("  Hostname: {}", g.inspect_get_hostname(&root)?);
    }

    // List partitions
    let partitions = g.list_partitions()?;
    for part in partitions {
        println!("Partition: {}", part);
        println!("  Filesystem: {}", g.vfs_type(&part)?);
        println!("  Label: {}", g.vfs_label(&part).unwrap_or_default());
    }

    // Cleanup
    g.shutdown()?;

    Ok(())
}

Ergonomic Rust API (Recommended)

GuestCtl provides modern Rust patterns for better type safety and ergonomics:

use guestctl::guestfs::{Guestfs, FilesystemType, OsType, Distro};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Builder pattern for configuration
    let mut g = Guestfs::builder()
        .add_drive_ro("/path/to/disk.qcow2")
        .verbose(true)
        .build_and_launch()?;

    // Type-safe filesystem creation
    g.mkfs("/dev/sda1")
        .ext4()              // Type-safe enum, not string!
        .label("rootfs")
        .blocksize(4096)
        .create()?;

    // Type-safe OS detection with pattern matching
    for root in g.inspect_os()? {
        let os_type = OsType::from_str(&g.inspect_get_type(&root)?);

        match os_type {
            OsType::Linux => {
                let distro = Distro::from_str(&g.inspect_get_distro(&root)?);

                // Smart methods on enums
                if let Some(pkg_mgr) = distro.package_manager() {
                    println!("Package manager: {}", pkg_mgr);  // "deb", "rpm", "pacman", etc.
                }

                // Exhaustive pattern matching
                match distro {
                    Distro::Ubuntu | Distro::Debian => println!("Debian-based"),
                    Distro::Fedora | Distro::Rhel => println!("RPM-based"),
                    Distro::Archlinux => println!("Arch Linux"),
                    _ => println!("Other Linux"),
                }
            }
            OsType::Windows => println!("Windows detected"),
            _ => println!("Other OS"),
        }
    }

    g.shutdown()?;
    Ok(())
}

See docs/ERGONOMIC_API.md and docs/MIGRATION_GUIDE.md for details.

Python Bindings

GuestCtl provides native Python bindings via PyO3 for seamless integration with Python workflows.

Installation:

# Quick build (recommended)
./build_python.sh

# Or manual build
python3 -m venv .venv
source .venv/bin/activate
pip install maturin
PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 maturin develop --features python-bindings

# Verify installation
python3 -c "import guestctl; print(guestctl.__version__)"

Basic Example:

from guestctl import Guestfs

# Create handle and configure
g = Guestfs()
g.add_drive_ro("/path/to/disk.qcow2")
g.launch()

# Inspect operating system
roots = g.inspect_os()
for root in roots:
    print(f"OS Type: {g.inspect_get_type(root)}")
    print(f"Distro: {g.inspect_get_distro(root)}")
    print(f"Version: {g.inspect_get_major_version(root)}.{g.inspect_get_minor_version(root)}")
    print(f"Hostname: {g.inspect_get_hostname(root)}")

# Mount and read files
mountpoints = g.inspect_get_mountpoints(root)
for mount_path, device in sorted(mountpoints, key=lambda x: len(x[0])):
    g.mount_ro(device, mount_path)

if g.is_file("/etc/hostname"):
    content = g.read_file("/etc/hostname")
    print(f"Hostname from file: {content.decode('utf-8').strip()}")

# List installed packages
apps = g.inspect_list_applications(root)
print(f"Total packages: {len(apps)}")

# Cleanup
g.umount_all()
g.shutdown()

More Examples:

Full Documentation:

Python API Coverage:

  • 58 Guestfs methods covering OS inspection, file operations, device management, LVM, archives, and more
  • 3 DiskConverter methods for format conversion and detection
  • Comprehensive error handling with Python exceptions
  • Full type conversion between Rust and Python types

Project Structure

guestctl/
โ”œโ”€โ”€ Cargo.toml
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ ARCHITECTURE.md                    # Architecture documentation
โ”œโ”€โ”€ GUESTFS_IMPLEMENTATION_STATUS.md   # Implementation status (578 functions)
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ lib.rs                         # Library entry point
โ”‚   โ”œโ”€โ”€ core/                          # Core utilities
โ”‚   โ”‚   โ”œโ”€โ”€ error.rs                   # Error types
โ”‚   โ”‚   โ”œโ”€โ”€ retry.rs                   # Retry logic
โ”‚   โ”‚   โ””โ”€โ”€ types.rs                   # Common types
โ”‚   โ”œโ”€โ”€ disk/                          # Disk operations (Pure Rust)
โ”‚   โ”‚   โ”œโ”€โ”€ reader.rs                  # Disk image reader (magic byte detection)
โ”‚   โ”‚   โ”œโ”€โ”€ partition.rs               # MBR/GPT parser
โ”‚   โ”‚   โ””โ”€โ”€ filesystem.rs              # Filesystem detection (ext4, NTFS, etc.)
โ”‚   โ”œโ”€โ”€ guestfs/                       # GuestFS-compatible API (486 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ handle.rs                  # Main handle (new/launch/shutdown)
โ”‚   โ”‚   โ”œโ”€โ”€ inspect.rs                 # OS inspection (12 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ device.rs                  # Device operations (9 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ partition.rs               # Partition operations (6 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ mount.rs                   # Mount operations (11 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ file_ops.rs                # File operations (35+ functions)
โ”‚   โ”‚   โ”œโ”€โ”€ lvm.rs                     # LVM operations (9 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ command.rs                 # Command execution (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ archive.rs                 # Archive operations (7 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ luks.rs                    # LUKS encryption (6 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ checksum.rs                # Checksums and file content (9 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ filesystem.rs              # Filesystem operations (8 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ utils.rs                   # File utilities (11 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ network.rs                 # Network configuration (7 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ package.rs                 # Package management (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ system.rs                  # System configuration (13 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ security.rs                # Security operations (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ boot.rs                    # Boot configuration (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ disk_ops.rs                # Advanced disk operations (12 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ service.rs                 # Service management (8 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ ssh.rs                     # SSH operations (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ part_mgmt.rs               # Partition management (9 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ augeas.rs                  # Configuration editing (11 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ resize.rs                  # Filesystem resize (7 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ windows.rs                 # Windows operations (12 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ btrfs.rs                   # Btrfs operations (12 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ metadata.rs                # File metadata (17 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ misc.rs                    # Miscellaneous utilities (22 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ xfs.rs                     # XFS operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ iso.rs                     # ISO operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ transfer.rs                # Advanced file transfer (8 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ disk_mgmt.rs               # Disk image management (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ internal.rs                # Internal operations (16 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ ntfs.rs                    # NTFS operations (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ ext_ops.rs                 # Extended filesystem ops (11 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ glob_ops.rs                # Glob operations (7 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ node_ops.rs                # Node operations (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ md_ops.rs                  # MD/RAID operations (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ selinux_ops.rs             # SELinux extended (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ cap_ops.rs                 # Capabilities (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ acl_ops.rs                 # ACL operations (8 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ hivex_ops.rs               # Hivex operations (16 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ rsync_ops.rs               # Rsync operations (2 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ syslinux_ops.rs            # Syslinux operations (2 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ journal_ops.rs             # Journal operations (11 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ inotify_ops.rs             # Inotify operations (6 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ squashfs_ops.rs            # SquashFS operations (3 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ yara_ops.rs                # YARA operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ tsk_ops.rs                 # TSK operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ zfs_ops.rs                 # ZFS operations (10 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ ldm_ops.rs                 # LDM operations (8 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ mpath_ops.rs               # Multipath operations (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ grub_ops.rs                # GRUB operations (7 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ f2fs_ops.rs                # F2FS operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ bcache_ops.rs              # Bcache operations (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ dosfs_ops.rs               # DOSFS operations (5 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ cpio_ops.rs                # CPIO operations (3 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ nilfs_ops.rs               # NILFS operations (4 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ ufs_ops.rs                 # UFS operations (3 functions)
โ”‚   โ”‚   โ”œโ”€โ”€ inspect_enhanced.rs        # Enhanced inspection with profiles
โ”‚   โ”‚   โ””โ”€โ”€ windows_registry.rs        # Windows registry parsing
โ”‚   โ”œโ”€โ”€ python.rs                      # Python bindings (PyO3, 100+ methods)
โ”‚   โ”œโ”€โ”€ converters/                    # Disk format converters
โ”‚   โ”‚   โ””โ”€โ”€ disk_converter.rs          # qemu-img wrapper
โ”‚   โ””โ”€โ”€ cli/                           # CLI implementation
โ”‚       โ”œโ”€โ”€ commands.rs                # CLI commands
โ”‚       โ”œโ”€โ”€ profiles/                  # Inspection profiles
โ”‚       โ”œโ”€โ”€ exporters/                 # HTML/Markdown exporters
โ”‚       โ”œโ”€โ”€ formatters.rs              # Output formatters
โ”‚       โ”œโ”€โ”€ templates/                 # Askama templates
โ”‚       โ”œโ”€โ”€ diff.rs                    # VM comparison
โ”‚       โ””โ”€โ”€ cache.rs                   # Result caching
โ”œโ”€โ”€ examples/                          # Example programs
โ”‚   โ”œโ”€โ”€ rust/
โ”‚   โ”‚   โ”œโ”€โ”€ inspect_disk.rs
โ”‚   โ”‚   โ””โ”€โ”€ list_partitions.rs
โ”‚   โ””โ”€โ”€ python/                        # Python examples
โ”‚       โ”œโ”€โ”€ test_bindings.py           # Comprehensive test suite
โ”‚       โ”œโ”€โ”€ comprehensive_example.py   # Full-featured example
โ”‚       โ”œโ”€โ”€ archive_example.py         # Archive operations
โ”‚       โ”œโ”€โ”€ extract_files.py           # File extraction
โ”‚       โ””โ”€โ”€ README.md                  # Python examples guide
โ”œโ”€โ”€ docs/                              # Documentation (organized)
โ”‚   โ”œโ”€โ”€ README.md                      # Documentation index
โ”‚   โ”œโ”€โ”€ guides/                        # User guides
โ”‚   โ”œโ”€โ”€ api/                           # API documentation
โ”‚   โ”œโ”€โ”€ architecture/                  # Architecture docs
โ”‚   โ”œโ”€โ”€ development/                   # Contributor docs
โ”‚   โ”œโ”€โ”€ testing/                       # Testing docs
โ”‚   โ”œโ”€โ”€ status/                        # Implementation status
โ”‚   โ””โ”€โ”€ archive/                       # Historical docs
โ”œโ”€โ”€ pyproject.toml                     # Python package config
โ”œโ”€โ”€ build_python.sh                    # Python build script
โ””โ”€โ”€ tests/                             # Integration tests

Documentation

๐Ÿ“š Complete documentation is organized in docs/

Quick Links:

See docs/README.md for complete documentation index.

Architecture

See docs/architecture/ARCHITECTURE.md for detailed architecture documentation.

Core Modules

guestfs - GuestFS-Compatible API (115 functions)

  • handle.rs - Main GuestFS handle (lifecycle management)
  • inspect.rs - OS inspection (12 functions, fully working)
  • device.rs - Device operations (9 functions, fully working)
  • partition.rs - Partition operations (6 functions, fully working)
  • mount.rs - Mount operations (11 functions, API-defined, needs NBD)
  • file_ops.rs - File operations (35+ functions, API-defined, needs FS parser or NBD)
  • lvm.rs - LVM operations (5 functions, API-defined)
  • command.rs - Command execution (4 functions, API-defined)
  • archive.rs - Archive operations (8 functions, API-defined)

disk - Pure Rust Disk Operations

  • reader.rs - Disk image reader with format detection via magic bytes
  • partition.rs - MBR and GPT partition table parser
  • filesystem.rs - Filesystem detection (ext4, NTFS, XFS, Btrfs, FAT32)

core - Core Utilities

  • error.rs - Error types using thiserror
  • retry.rs - Exponential backoff retry logic
  • types.rs - Common types (DiskFormat, GuestType, etc.)

Implementation Status

Category Functions Status
Total APIs 115 35 working, 80 API-defined
Lifecycle 8 โœ… Fully working
Inspection 12 โœ… Fully working
Device Ops 9 โœ… Fully working
Partition Ops 6 โœ… Fully working
Mount Ops 11 โš ๏ธ API-only (needs NBD)
File Ops 35+ โš ๏ธ API-only (needs FS parser)
LVM 5 โš ๏ธ API-only
Commands 4 โš ๏ธ API-only
Archives 8 โš ๏ธ API-only

See GUESTFS_IMPLEMENTATION_STATUS.md for complete function implementation status.

Design Principles

  1. Pure Rust - No C dependencies (except qemu-img tool)
  2. Memory Safety - Leveraging Rust's ownership system
  3. Zero-cost Abstractions - High-level APIs with no runtime overhead
  4. Clean API Design - Intuitive function signatures and error handling
  5. Modularity - Clean separation of concerns
  6. Testability - Comprehensive test coverage (33 tests passing)

Examples

See the examples/ directory for complete examples:

  • convert_disk.rs - Convert disk image formats
  • detect_format.rs - Detect and inspect disk images
  • retry_example.rs - Using retry logic with exponential backoff

Run examples with:

cargo run --example convert_disk
cargo run --example detect_format

API Coverage

Statistics

Metric Count Percentage
LibGuestFS functions 733 100%
GuestCtl APIs defined 364 49.7%
Fully working 349 47.6%
API-only (needs impl) 15 2.0%

Comparison with LibGuestFS

See LIBGUESTFS_COMPARISON.md for:

  • Complete function-by-function comparison
  • What's implemented vs what's missing
  • Implementation phases and timeline
  • Recommendations for full compatibility

Implementation Strategy

Current: Pure Rust implementation without C dependencies

Working:

  • โœ… Disk format detection (magic bytes)
  • โœ… Partition table parsing (MBR, GPT)
  • โœ… Filesystem detection (superblock analysis)
  • โœ… OS inspection (35 functions)

Planned (Phase 1):

  • ๐Ÿ”„ NBD mounting (qemu-nbd integration)
  • ๐Ÿ”„ File I/O via NBD mount
  • ๐Ÿ”„ Command execution via chroot
  • ๐Ÿ”„ Archive operations (tar, tgz)

Integration with hyper2kvm

guestctl is designed to work seamlessly with hyper2kvm:

use guestctl::guestfs::Guestfs;

// Simple, intuitive API
let mut g = Guestfs::new()?;
g.add_drive_ro("/path/to/disk.qcow2")?;
g.launch()?;

// Inspect VM
let roots = g.inspect_os()?;
for root in &roots {
    println!("OS: {}", g.inspect_get_distro(root)?);
    println!("Version: {}.{}",
        g.inspect_get_major_version(root)?,
        g.inspect_get_minor_version(root)?);
}

Benefits for hyper2kvm:

  • โœ… No root required for read-only operations
  • โœ… Faster - Pure Rust implementation
  • โœ… Simpler - No C dependencies
  • โœ… Safer - Rust memory safety
  • โœ… Comprehensive - 578 functions, 97.4% implementation coverage

Dependencies

System Dependencies

  • qemu-img - Disk image manipulation (QEMU tools) - Optional, for format conversion
# Fedora/RHEL
sudo dnf install qemu-img

# Ubuntu/Debian
sudo apt install qemu-utils

# Arch Linux
sudo pacman -S qemu

Note: guestctl is a pure Rust implementation with no C library dependencies!

Rust Dependencies

See Cargo.toml for complete list:

  • thiserror - Custom error types
  • byteorder - Binary parsing
  • memmap2 - Memory-mapped I/O
  • regex - Pattern matching
  • pyo3 (optional) - Python bindings
  • serde / serde_json - Serialization

Development

Building

# Debug build
cargo build

# Release build (optimized)
cargo build --release

# Run tests
cargo test

# Run with logging
RUST_LOG=debug cargo run -- convert --source test.vmdk --output test.qcow2

Running Tests

Rust Tests:

# Unit tests
cargo test

# Integration tests
cargo test --test '*'

# With coverage
cargo tarpaulin --out Html

Python Tests:

# Install pytest (if not already installed)
pip install pytest

# Run Python bindings tests
pytest tests/test_python_bindings.py -v

# Run with test disk image
export GUESTKIT_TEST_IMAGE=/path/to/test.qcow2
pytest tests/test_python_bindings.py -v

Comprehensive Testing:

# Run all tests (Rust + Python)
cargo test --all-features
pytest tests/test_python_bindings.py -v

# Example Python integration test
cd examples/python
sudo python3 test_bindings.py /path/to/disk.img

Note on Permissions: Some tests require root access for mounting disk images.

See docs/testing/TESTING.md for complete testing documentation.

Code Quality

# Format code
cargo fmt

# Lint
cargo clippy

# Check documentation
cargo doc --no-deps --open

Cargo Features

guestctl uses Cargo features for optional functionality:

  • disk-ops (default) - Disk operation utilities
  • guest-inspect (default) - Guest OS inspection
  • python-bindings (optional) - PyO3 Python bindings
[dependencies]
guestctl = { version = "0.1", features = ["guest-inspect"] }

# With Python bindings
guestctl = { version = "0.1", features = ["python-bindings"] }

Build with Python bindings:

cargo build --features python-bindings

Roadmap

See GUESTFS_IMPLEMENTATION_STATUS.md for detailed implementation status.

Phase 0: Foundation (โœ… COMPLETE)

  • Pure Rust architecture (no C dependencies)
  • Disk format detection (QCOW2, VMDK, RAW)
  • Partition table parsing (MBR, GPT)
  • Filesystem detection (ext4, NTFS, XFS, Btrfs, FAT32)
  • Comprehensive API structure (578 functions, 97.4% implemented)
  • OS inspection (30+ functions fully working)
  • Device operations (20+ functions fully working)
  • Partition operations (15+ functions fully working)
  • Python bindings foundation (PyO3)

Phase 1: Essential Operations (๐Ÿ”„ PLANNED - 3 weeks)

Implement for 90% hyper2kvm compatibility:

  • NBD mounting - qemu-nbd integration for filesystem access
  • Command execution (4 functions) - command, sh, sh_lines
  • Archive operations (8 functions) - tar_in, tar_out, tgz_in, tgz_out
  • File operations (10 functions) - cp, mv, download, upload, grep, find
  • LUKS operations (6 functions) - luks_open, luks_close, luks_format
  • LVM activation (4 functions) - vg_activate_all, lvcreate, lvremove

Total: 30+ critical functions

Phase 2: Filesystem Operations (๐Ÿ“… FUTURE - 2 weeks)

  • Filesystem creation (mkfs, mke2fs, mkfs_btrfs)
  • Filesystem repair (fsck, e2fsck, ntfsfix, xfs_repair)
  • Extended attributes (getxattr, setxattr)
  • Resize operations (resize2fs, ntfsresize)

Phase 3: Advanced Features (๐Ÿ“… FUTURE - 4 weeks)

  • Augeas (config file editing)
  • Windows registry (Hivex operations)
  • Partition management (add/delete/resize)
  • SELinux relabeling

Phase 4: Specialized (๐Ÿ“… OPTIONAL)

  • Btrfs advanced features (subvolumes, snapshots)
  • ZFS support
  • YARA malware scanning
  • File recovery (TSK)

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Write tests for new functionality
  4. Ensure all tests pass
  5. Submit a pull request

See CONTRIBUTING.md for detailed guidelines.

License

This project is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0).

See LICENSE for full license text.

Acknowledgments

  • hyper2kvm - Primary use case and integration target
  • QEMU - Disk format conversion tools
  • Rust Community - For excellent crates and tooling

Support

Related Projects

  • hyper2kvm - Production-grade VM migration toolkit
  • hypersdk - High-performance hypervisor SDK

Made with โค๏ธ for reliable VM operations

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

guestctl-0.3.0-cp314-cp314-manylinux_2_39_x86_64.whl (391.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

File details

Details for the file guestctl-0.3.0-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for guestctl-0.3.0-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1b1b3dbdf932e6657a29f2df5711837878e33267f6e34bde6f9f61b828fc020e
MD5 dd4a15feb17f5688fb3ce02a23b59426
BLAKE2b-256 ab1e64d414979375537f34cfb2895decbdc2ff71fa9dd2c927e5bcc3676f366a

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