VNG(1) virtme-ng VNG(1)

vng - اجرای سریع هسته‌ها درون یک اسنپ‌شات مجازی‌سازی‌شده از سیستم زنده

vng [-h] [--version] [--run [RUN] | --build | --clean | --dump DUMP | --mcp] [--dry-run] [--no-virtme-ng-init] [--empty-passwords] [--pin [PIN]] [--gdb] [--snaps] [--debug] [--kconfig] [--skip-modules] [--commit COMMIT] [--config CONFIG] [--configitem CONFIGITEM] [--busybox PATH_TO_BUSYBOX] [--qemu QEMU] [--name NAME] [--user USER] [--shell BINARY] [--root ROOT] [--root-release ROOT_RELEASE] [--rw] [--force-9p] [--disable-microvm] [--disable-kvm] [--disable-monitor] [--cwd CWD] [--rodir RODIR] [--rwdir RWDIR] [--overlay-rwdir OVERLAY_RWDIR] [--cpus CPUS] [--memory MEMORY] [--numa MEM[,cpus=FIRST_CPU1[-LAST_CPU1]][,cpus=FIRST_CPU2[-LAST_CPU2]]...] [--numa-distance SRC,DST=VAL] [--balloon] [--network NETWORK] [--no-dhcp] [--net-mac-address NET_MAC_ADDRESS] [--disk PATH] [--exec EXEC] [--append APPEND] [--force-initramfs] [--sound] [--graphics] [--verbose] [--quiet] [--qemu-opts QEMU_OPTS] [--build-host BUILD_HOST] [--build-host-exec-prefix BUILD_HOST_EXEC_PREFIX] [--build-host-vmlinux] [--arch ARCH] [--cross-compile CROSS_COMPILE] [--force] [--nvgpu [GPU PCI Address]] [--vfio-pci PCI_ADDRESS] [--console [PORT]] [--console-client [PORT]] [--ssh [PORT]] [--ssh-client [PORT]] [--ssh-tcp] [--remote-cmd COMMAND] [--systemd] [envs ...]

ساخت و اجرای هسته‌ها درون یک اسنپ‌شات مجازی‌سازی‌شده از سیستم زنده شما

متغیرهای اضافی Makefile

نمایش شماره نسخه برنامه و خروج
تنها نمایش دستورها بدون اجرای واقعی آن‌ها.
بازگشت به virtme-init مبتنی بر bash (کاربردی برای اشکال‌زدایی/توسعه)
استفاده از گذرواژه‌های خالی برای تمامی کاربران
سنجاق کردن هر ریسه vCPU در QEMU به یک پردازنده متمایز میزبان. اگر بدون آرگومان مشخص شود، تمام پردازنده‌های میزبان استفاده می‌شوند. اگر همراه با آرگومان داده شود، باید فهرستی/محدوده‌ای از پردازنده‌ها باشد (مانند 0,1,3-5,9). نکته: در هر لحظه تنها یک مهمان virtme-ng می‌تواند سنجاق شود؛ سنجاق کردن چندین مهمان virtme-ng هنوز پشتیبانی نمی‌شود.
پیوست کردن یک نشست اشکال‌زدایی به نمونه در حال اجرا که با --debug آغاز شده است
اجازه اجرای snapها درون virtme-ng
شروع نمونه با اشکال‌زدایی فعال: اجازه ایجاد رونوشت خرابی (crash dump)، اتصال یک نشست اشکال‌زدایی با GDB و غیره.
تنها بازنویسی .config هسته بدون ساخت/اجرای هیچ‌چیز
اجرای یک ساخت بسیار سریع با نادیده گرفتن ماژول‌های خارجی (بدون پشتیبانی از ماژول‌های خارجی)
استفاده از یک هسته مشخص‌شده با شناسه کامیت، برچسب (tag) یا شاخه (branch) خاص
استفاده از یک (یا چند) فایل قطعه‌کد .config هسته، یا '-' برای stdin
افزودن یک CONFIG_ITEM=val پس از --config <fragments>؛ این موارد تنظیمات قبلی پیکربندی را بازنویسی می‌کنند
استفاده از فایل باینری مشخص‌شده busybox
استفاده از فایل باینری مشخص‌شده QEMU
تنظیم نام میزبان مهمان و پرچم -name در qemu
تغییر کاربر درون مهمان (پیش‌فرض همان کاربر سیستم میزبان است)
بازنویسی شل پیش‌فرض کاربر
ارائه یک chroot خاص جهت استفاده درون هسته مجازی‌سازی‌شده (کاربردی به همراه --arch)
استفاده از یک انتشار هدف Ubuntu برای ایجاد یک chroot جدید (استفاده به همراه --root)
دادن دسترسی خواندن/نوشتن به سیستم فایل ریشه مهمان. هشدار: این کار می‌تواند برای سیستم فایل میزبان خطرناک باشد!
استفاده از سیستم فایل قدیمی 9p به عنوان rootfs
خودداری از استفاده از معماری "microvm" در QEMU (تنها روی x86_64)
خودداری از استفاده از مجازی‌سازی سخت‌افزاری / KVM
غیرفعال کردن مانیتور STDIO در QEMU
تغییر دایرکتوری کاری مهمان (پیش‌فرض در صورت امکان همان دایرکتوری کاری فعلی است)
ارائه یک دایرکتوری فقط‌خواندنی به مهمان. استفاده از --rodir=path یا --rodir=guestpath=hostpath
ارائه یک دایرکتوری خواندن/نوشتن به مهمان. استفاده از --rwdir=path یا --rwdir=guestpath=hostpath
ارائه یک دایرکتوری که برای مهمان خواندن/نوشتن است اما در میزبان فقط‌خواندنی می‌باشد. استفاده از --overlay-rwdir=path.
تنظیم تعداد پردازنده‌های مهمان (پرچم -smp در qemu)
تنظیم اندازه حافظه مهمان (پرچم -m در qemu)
ایجاد یک گره NUMA در مهمان. از این گزینه چندین بار برای ایجاد گره‌های NUMA بیشتر استفاده کنید. اندازه کل حافظه اختصاص‌یافته به گره‌های NUMA باید با اندازه حافظه مهمان (مشخص‌شده با --memory/-m) مطابقت داشته باشد. این گزینه به طور ضمنی معماری microvm را غیرفعال می‌کند.
تنظیم فاصله VAL بین گره‌های NUMA مبدا (SRC) و مقصد (DST). از این گزینه چندین بار برای تعیین چندین فاصله بین گره‌های NUMA استفاده کنید. این گزینه تنها همراه با --numa استفاده می‌شود.
اجازه به میزبان برای درخواست آزادسازی حافظه از مهمان
فعال‌سازی دسترسی شبکه: user، bridge(=<br>)، loop
غیرفعال کردن پیکربندی DHCP برای رابط‌های شبکه.
آدرس MAC جهت انتساب به رابط NIC، مانند 52:54:00:12:34:56. آخرین بایت (octet) برای دستگاه‌های شبکه بعدی افزایش خواهد یافت.
افزودن یک فایل به عنوان دیسک virtio-scsi (می‌تواند چندین بار استفاده شود)
اجرای یک دستور درون هسته و خروج
گزینه‌های بوت اضافی هسته (می‌تواند چندین بار استفاده شود)
استفاده از یک initramfs حتی در صورتی که غیرضروری باشد
فعال‌سازی دستگاه صوتی (در صورتی که معماری از آن پشتیبانی کند).TP --graphics, -g نمایش خروجی گرافیکی به‌جای استفاده از کنسول.
افزایش میزان جزئیات خروجی کنسول.
لغو حالت پرجزئیات (غیرفعال‌سازی --verbose).
آرگومان‌های اضافی برای QEMU (می‌تواند چندین بار استفاده شود) یا تجمیع‌شده با هم: --qemu-opts='...'
انجام ساخت کرنل روی یک سرور راه دور (نیازمند دسترسی ssh).
افزودن یک دستور (مانند chroot) به ابتدای دستور make اجراشده روی میزبان ساخت دوردست.
کپی کردن vmlinux از میزبان ساخت به سیستم محلی.
تولید و آزمایش کرنل برای یک معماری خاص (پیش‌فرض، معماری میزبان است؛ در صورت تنظیم، باید همراه با --root استفاده شود).
تنظیم پیشوند کامپایل متقاطع (cross-compile).
بازنشانی اجباری مخزن git به شاخه یا کامیت هدف (هشدار: این کار ممکن است تغییرات ذخیره‌نشده را حذف کند) و بازنویسی اجباری پیکربندی کرنل.
افزودن یک پردازنده گرافیکی NVIDIA به‌صورت گذر مستقیم (passthrough).
گذر مستقیم یک دستگاه PCI با استفاده از vfio-pci (می‌تواند چندین بار استفاده شود)، مانند --vfio-pci 0000:ce:00.0.
اجرای systemd به‌عنوان فرایند init (آزمایشی).

اجرای یک کرنل مشخص‌شده؛ --run می‌تواند یکی از آرگومان‌های زیر را بپذیرد: ۱) هیچ‌چیز (در این حالت تلاش می‌کند همان کرنل در حال اجرا روی میزبان را بوت کند)، ۲) یک فایل باینری کرنل (مانند ./arch/x86/boot/bzImage)، ۳) یک دایرکتوری (جایی که در آن تلاش می‌کند فایل باینری معتبر کرنل را بیابد)، ۴) یک نسخه بالادستی (upstream)، برای مثال `vng --run v6.6.17` (در این حالت vng یک کرنل بالادستی ازپیش‌کامپایل‌شده را از مخزن اصلی Ubuntu mainline بارگیری خواهد کرد).
ساخت کرنل در دایرکتوری جاری (یا به‌صورت راه دور در صورت استفاده همراه با --build-host).
پاک‌سازی مخزن کرنل (محلی یا راه دور در صورت استفاده همراه با --build-host).
ایجاد یک دامپ حافظه (memory dump) از کرنل در حال اجرا (نمونه باید با --debug راه‌اندازی شده باشد).
راه‌اندازی سرور MCP (پروتکل زمینه مدل / Model Context Protocol) برای یکپارچه‌سازی با عامل‌های هوش مصنوعی.

فعال‌سازی یک سرور جهت ارتباط بعدی از سمت میزبان با استفاده از --console-client. به‌طور پیش‌فرض، یک کنسول ساده با استفاده از اتصال VSOCK و socat برای پروکسی ارائه خواهد شد.
اتصال به یک ماشین مجازی راه‌اندازی‌شده با گزینه --console جهت کنترل راه دور.
فعال‌سازی سرور SSH جهت ارتباط بعدی از سمت میزبان با استفاده از --ssh-client.
اتصال به یک ماشین مجازی راه‌اندازی‌شده با گزینه --ssh جهت کنترل راه دور.
استفاده از پروتکل TCP برای اتصال SSH به سیستم مهمان.
اجرای دستوری متفاوت از مقدار پیش‌فرض در ماشین مجازی (--server)، یا راه‌اندازی این دستور به‌جای محیط خط فرمان خطی (--client)..SH "یادداشت‌ها (COMMENTS)" ابزار virtme-ng به شما امکان می‌دهد تا به‌سادگی و به‌سرعت یک هستهٔ لینوکس (Linux kernel) را بر اساس کد منبع، دوباره کامپایل و آزمایش کنید. این ابزار امکان بازکامپایل هسته را به‌جای چندین ساعت، در عرض چند دقیقه فراهم می‌کند؛ سپس هسته به‌طور خودکار در یک محیط مجازی‌سازی‌شده اجرا می‌شود که یک رونوشت دقیق copy-on-write از سیستم فعال شماست؛ بدین معنا که هرگونه تغییر ایجادشده در محیط مجازی، تأثیری بر سیستم میزبان نخواهد داشت.

برای انجام این کار، یک پیکربندی کمینه (با حداقل پشتیبانی لازم برای آزمایش هسته در qemu) ایجاد می‌شود، سپس هستهٔ انتخاب‌شده با استفاده از سیستم‌فایل میزبان به‌عنوان یک اسنپ‌شات (snapshot) به‌روش copy-on-write، به‌طور خودکار ساخته و در qemu اجرا می‌گردد.

این بدان معناست که می‌توانید بدون نگرانی و بدون تأثیر بر میزبان، کل سیستم‌فایل را نابود کنید، هسته را با کرش مواجه سازید و غیره.

نکته: هسته‌های تولیدشده با virtme-ng فاقد بسیاری از ویژگی‌ها هستند تا زمان ساخت به کمترین حد ممکن برسد و هم‌زمان هسته‌ای کاربردی در اختیارتان بگذارد که قادر به اجرای آزمایش‌ها و بررسی‌های شما باشد.

ابزار virtme-ng بر پایهٔ virtme توسعه یافته است که توسط Andy Lutomirski <luto@kernel.org> نوشته شده است.

برنامهٔ virtme-ng توسط Andrea Righi <arighi@nvidia.com> نوشته شده است
بر پایهٔ virtme اثر Andy Lutomirski <luto@kernel.org>

جدیدترین نسخهٔ virtme-ng را می‌توان از نشانی زیر دریافت کرد: https://github.com/arighi/virtme-ng

2026-07-06 virtme-ng 1.41