guestfs-release-notes-1.32(1) Virtualization Support guestfs-release-notes-1.32(1)

guestfs-release-notes-1.32 - یادداشت‌های انتشار نسخه ۱.۳۲ ابزار libguestfs

این یادداشت‌های انتشار فقط تفاوت‌ها نسبت به تفکیک شاخه پایدار/توسعه قبلی (1.30.0) را پوشش می‌دهند. برای گزارش تغییرات دقیق، لطفاً مخزن git یا فایل ChangeLog توزیع‌شده در بسته تاربال را مشاهده کنید.

ابزارهای جدید

ابزار جدید virt-v2v-copy-to-local(1) یک ابزار کمکی برای virt-v2v(1) است که به شما امکان می‌دهد ماشین‌های مهمان مبدأ را که virt-v2v قادر به دسترسی مستقیم به آن‌ها نیست، تبدیل کنید.

قابلیت‌های جدید در ابزارهای موجود

ابزار Virt-customize نحوه نوشتن سید تصادفی (random seed) در CirrOS را می‌داند (پینو توسکانی - Pino Toscano).

در فدورا، virt-customize ابزار dnf(8) را با فلگ --best اجرا می‌کند، و اطمینان حاصل می‌کند که همیشه به آخرین بسته‌های موجود به‌روزرسانی شود.

ابزار Virt-builder اکنون الگوهای ۳۲ بیتی فدورا را ارائه می‌دهد.

گزینه --install در virt-builder و virt-customize اکنون روی مهمان‌های ۳۲ بیتی فدورا کار می‌کند. قبلاً سعی می‌کرد بسته‌های ۶۴ بیتی را نصب کند (یان سدلاک - Jan Sedlák).

ابزار Virt-builder اکنون می‌تواند ایمیج‌های ابری را با استفاده از متادیتای Simple Streams v1.0 دریافت کند (پینو توسکانی - Pino Toscano).

ابزار Virt-builder اکنون می‌تواند ایمیج‌های ابری openSUSE را به‌صورت پیش‌فرض دریافت کند (سدریک بوزدونات - Cédric Bosdonnat).

ابزار Virt-customize اکنون به‌طور پیش‌فرض در openSUSE ≥ 11 از گذرواژه‌های رمزگذاری‌شده قوی‌تر (SHA-512) استفاده می‌کند (پینو توسکانی - Pino Toscano).

ابزار Virt-builder اکنون نام‌فایل‌های خروجی شامل کاراکترهای دونقطه (":") را به‌درستی مدیریت می‌کند، و فایل‌های موقت را به‌جای پیش‌فرض /tmp در دایرکتوری حافظه موقت (cache) libguestfs ایجاد می‌کند (پینو توسکانی - Pino Toscano).

ابزار Virt-resize گزینه جدیدی با نام --unknown-filesystems دارد تا نحوه عملکرد را هنگام درخواست تغییر اندازه سیستم‌فایلی که libguestfs نحوه تغییر اندازه آن را نمی‌داند، کنترل کند.

ابزار Virt-v2v اکنون دارای یک فلگ/حالت --in-place است که امکان تبدیل درجا (in-place) ماشین‌های مهمان را فراهم می‌کند (رومان کاگان - Roman Kagan).

ابزار Virt-v2v دارای یک گزینه --compressed برای ایجاد فایل‌های خروجی qcow2 فشرده است.

ابزار Virt-v2v اکنون می‌تواند مسیر دیتاسنتر VMware (یا dcPath) را به‌درستی از libvirt دریافت کند، به‌جای اینکه مجبور باشد آن را با استفاده از الگوریتمی محاسبه کند که گاهی اوقات به پاسخ نادرست منجر می‌شد (ماتیاس بولته، تینگ‌تینگ ژنگ - Matthias Bolte, Tingting Zheng).

ابزار Virt-v2v اکنون هنگام اجرا روی میزبان ۳۲ بیتی، اندازه حافظه RAM را برای مهمان‌های ۶۴ بیتی به‌درستی پردازش می‌کند.

بایندینگ‌های زبان‌های برنامه‌نویسی

در برنامه‌های Perl و Python، رابط برنامه‌نویسی "get_program_name" اکنون نام واقعی برنامه را برمی‌گرداند، به‌جای رشته نادرست "perl" یا "python".

بایندینگ‌های پایتون اکنون می‌توانند در برابر نسخه متفاوتی از libguestfs کامپایل شوند، که امکان ساخت ماژول pip را در برابر هر نسخه‌ای از libguestfs فراهم می‌کند (به‌جای اینکه ماژول pip و libguestfs دقیقاً به نسخه یکسانی نیاز داشته باشند).

کیفیت rdoc (مستندات) زبان روبی بهبود یافته است (پینو توسکانی - Pino Toscano).

اسکریپت‌های پرل دیگر مکان perl را در خط shebang به‌صورت کد ثابت قرار نمی‌دهند، بلکه به‌جای آن از env(1) برای یافتن آن استفاده می‌کنند (پینو توسکانی - Pino Toscano).

در برنامه‌های OCaml، هندل guestfs به‌اشتباه به یک ریشه سراسری (global root) تبدیل شده بود، به این معنی که هرگز توسط زباله‌روب (garbage collector) جمع‌آوری نمی‌شد. اگر تابع "close" را به‌طور صریح فراخوانی نمی‌کردید، هندل تا زمان خروج کامل برنامه بسته نمی‌شد. این مورد اکنون اصلاح شده است تا هندل‌ها به روش معمول زباله‌روبی شوند. این تغییر باعث تغییر رابط برنامه‌نویسی تابع OCaml به نام "Guestfs.event_callback" می‌شود. توجه داشته باشید که بایندینگ‌های زبان‌های غیر C تحت پوشش ضمانت API/ABI ابزار libguestfs قرار ندارند، اگرچه تلاش زیادی می‌کنیم تا آن‌ها را تغییر ندهیم، اما در این مورد برای رفع این باگ بسیار جدی ضروری بود.

بازرسی (Inspection)

توزیع‌های Alpine Linux و مدیر بسته APK، توزیع‌های ALT Linux، Frugalware و PLD Linux اکنون شناسایی می‌شوند (پینو توسکانی - Pino Toscano).

در صورت وجود، فایل /etc/os-release برای بازرسی مهمان‌های لینوکس ترجیح داده خواهد شد (پینو توسکانی - Pino Toscano).

نسخه صحیح هسته برای مهمان‌های ویندوز ≥ 10 برگردانده می‌شود.

مستندات

صفحه راهنمای حجیم guestfs(3) به چندین صفحه راهنمای مجزا تقسیم شده است: guestfs-hacking(1) guestfs-internals(1) guestfs-security(1). در درخت منبع، یک دایرکتوری جدید به نام docs حاوی این مستندات است.

معماری‌ها و پلتفرم‌ها

ابزار Libguestfs اکنون از پلتفرم‌های ۶۴ بیتی ARM همراه با vGICv3 پشتیبانی می‌کند.

همچنین guestfs-security(1) را ببینید.

"CVE-2015-5745"
https://bugzilla.redhat.com/1251157

این یک آسیب‌پذیری در خود libguestfs نیست، اما از آنجا که ما همیشه یک درگاه virtio-serial به هر مهمان اختصاص می‌دهیم (زیرا ارتباط مهمان-میزبان از این طریق انجام می‌شود)، ارتقای سطح دسترسی از اپلاینس به فرایند qemu میزبان امکان‌پذیر است. این موضوع می‌تواند بر شما تأثیر بگذارد اگر:

  • برنامه libguestfs شما برنامه‌های غیرقابل‌اعتماد را از درون مهمان اجرا کند (با استفاده از "guestfs_sh" و غیره)، یا
  • اکسپلویت دیگری (به‌عنوان مثال) در کد سیستم‌فایل هسته پیدا شود که به یک سیستم‌فایل مخرب اجازه دهد کنترل اپلاینس را به دست گیرد.

اگر از sVirt برای محدود کردن qemu استفاده کنید، برخی از حملات را خنثی خواهد کرد.

مجوزهای Virt-customize روی .ssh و .ssh/authorized_keys
https://bugzilla.redhat.com/1260778

قبلاً هنگامی که درخواست تزریق یک کلید SSH به یک مهمان داده می‌شد، virt-customize (و در نتیجه virt-builder نیز) دایرکتوری .ssh و فایل .ssh/authorized_keys را با مجوزهای بسیار گسترده ایجاد می‌کرد که به سایر کاربران اجازه خواندن می‌داد. اکنون آن‌ها به ترتیب با مجوزهای 0700 و 0600 ایجاد می‌شوند، که همانند ابزار ssh-copy-id(1) است.

رابط‌های جدید (New APIs)

"guestfs_get_identifier"
"guestfs_set_identifier"
دریافت/تنظیم یک شناسه به ازای هر هندل. تأثیر اصلی این مورد تغییر خروجی ردگیری (trace) از:
libguestfs: trace: foo

به:

libguestfs: trace: ID: foo

است که پیگیری ردها را در برنامه‌های چندنخی (multi-threaded) یا جایی که یک برنامه از چندین هندل استفاده می‌کند (به‌ویژه virt-v2v) آسان‌تر می‌سازد.

"guestfs_vfs_minimum_size"
برگرداندن حداقل اندازه یک سیستم‌فایل (هنگام کوچک کردن). این قابلیت از ext2/3/4، XFS و btrfs پشتیبانی می‌کند و می‌تواند در آینده از انواع دیگر سیستم‌فایل‌ها نیز پشتیبانی کند (ماکسیم پروودنتسف - Maxim Perevedentsev).

سایر تغییرات API

"guestfs_disk_create": افزودن "preallocation" = "off"/"metadata"/"full".
برای raw، این امکان استفاده از "off" را به‌عنوان مترادفی برای "sparse" فراهم می‌کند (تا با qcow2 سازگار شود). برای qcow2، این امکان استفاده از "sparse" را به‌عنوان مترادفی برای "off" فراهم می‌کند.

همچنین گزینه "full" را اضافه می‌کند، که مطابق با تخصیص کامل است، اما برای کارایی از posix_fallocate(3) استفاده می‌کند.

"guestfs_tar_in": پارامترهای جدید "xattrs"، "selinux"، "acl".
"guestfs_tar_out": پارامترهای جدید "xattrs"، "selinux"، "acl".
این پارامترهای اضافی کنترل می‌کنند که آیا ویژگی‌های توسعه‌یافته (extended attributes)، بافتارهای SELinux و/یا ACLهای POSIX از بسته‌های tar بازگردانی یا در آن‌ها ذخیره شوند یا خیر.
"guestfs_add_drive"
پارامترهای موجود "username" و "secret" می‌توانند برای ارائه احراز هویت برای iSCSI استفاده شوند (پینو توسکانی - Pino Toscano).

گزینه "./configure --enable-valgrind-daemon" حذف شده است.

دیگر نمی‌توانید libguestfs را روی سیستم‌های مربوط به دوره RHEL 5 (حدود سال ۲۰۰۷) بسازید. در صورت نیاز به پشتیبانی (محدود) از RHEL 5، شاخه "oldlinux" را ببینید.

اکنون می‌توان Virt-p2v را روی توزیع‌های لینوکس دوره RHEL 6 (حدود سال ۲۰۱۰) ساخت.

برای ساخت از git اکنون OCaml ≥ 3.11 (منتشر شده در سال ۲۰۰۸) مورد نیاز است.

ساخت بایندینگ‌های Perl اکنون به "Module::Build" (به‌جای "ExtUtils::MakeMaker") نیاز دارد.

ساخت‌ها باید سریع‌تر باشند (به‌ویژه هنگام ساخت مجدد تدریجی)، زیرا برای کاهش زمان ساخت تلاش شده است.

اگر نیاز به اجرای تولیدکننده (generator) در زمان ساخت دارید، به هر دو ابزار OCaml و ماژول findlib برای OCaml نیاز است. قبلاً در صورت نصب نبودن findlib، ساخت با شکست مواجه می‌شد.

تست‌های "make check" اکنون به‌صورت موازی (درون هر دایرکتوری تست) اجرا می‌شوند.

دستور "make install" دیگر فایل‌های OCaml bindtests.* را به‌طور نادرست نصب نمی‌کند.

دستور "make install" اکنون می‌تواند دو بار اجرا شود. قبلاً در اجرای دوم با شکست مواجه می‌شد.

دستور "make clean" اکنون باید تقریباً تمام فایل‌هایی را که "make" ایجاد می‌کند حذف کند.

یک قاعده جدید "make installcheck" اضافه شده است که امکان تست نسخه نصب‌شده libguestfs را فراهم می‌کند.

تلاش‌هایی برای به حداقل رساندن اندازه اپلاینس انجام شد، که فضای دیسک موقت و زمان مورد نیاز هندل‌های libguestfs را کاهش می‌دهد.

اپلاینس اکنون نام کارت شبکه (NIC) را به dhcpd ارسال می‌کند، که باعث رفع توقف‌ها هنگام اجرای اپلاینس در برخی از توزیع‌ها می‌شود (سدریک بوزدونات - Cédric Bosdonnat).

ماژول OCaml "Guestfs.Errno" اکنون تولید می‌شود (پینو توسکانی - Pino Toscano).

در ابزارهای OCaml، کدهای مشترک اکنون گزینه‌های --debug-gc، --verbose و سایر گزینه‌های متداول را مدیریت می‌کنند (رومان کاگان، پینو توسکانی - Roman Kagan, Pino Toscano).

محیط آزمون virt-v2v به ما امکان می‌دهد مهمان‌های آزمایشی را در تاریخ‌های مشخصی در گذشته بوت کنیم، و اطمینان حاصل کنیم که فعال‌سازی مجدد ویندوز اعمال نمی‌شود.

یک رابط برنامه‌نویسی داخلی جدید برای خواندن/نوشتن در یک زیرفرایند از طریق یک پایپ از کد کتابخانه وجود دارد.

از برنامه "deheader" برای حذف دستورات بلااستفاده "#include" استفاده شده است.

در ابزارهای OCaml، ماژول‌های "Char" و "String" اکنون به‌طور ضمنی به ماژول‌های "Common_utils.Char" و "Common_utils.String" ارجاع می‌دهند (به‌جای موارد موجود در stdlib). ماژول‌های "Common_utils" شامل تعدادی تابع کاربردی اضافی برای char/string هستند و همچنین برخی از توابع ناامن در stdlib را پنهان می‌کنند.

اکنون بسیاری از آزمون‌های virt-v2v حتی اگر rhsrvany و virtio-win را نصب نکرده باشید، اجرا خواهند شد (رومان کاگان - Roman Kagan).

فایل حجیم configure.ac به چندین فایل کوچک‌تر به نام m4/guestfs_*.m4 تقسیم شده است.

دایرکتوری‌های قدیمی tests/data و tests/guests به test-data/ منتقل شده‌اند. این دایرکتوری سطح بالای جدید حاوی تمام داده‌های آزمایشی است که مشترک، حجیم و/یا بین چندین آزمون به اشتراک گذاشته شده‌اند.

یک دایرکتوری سطح بالای جدید website/ حاوی وب‌سایت عمومی http://libguestfs.org (یا بیشتر آن) وجود دارد.

تست فازینگ بازرسی (tests/fuzz) حذف شده است.

ابزار Virt-p2v اکنون خروجی dmesg ماشین فیزیکی مبدأ را در دایرکتوری اشکال‌زدایی سرور تبدیل ذخیره می‌کند، که اشکال‌زدایی موارد مربوط به درایورها، میان‌افزارها (firmware) و غیره را ساده‌تر می‌سازد.

هنگام تنظیم برچسب سیستم‌فایل ext3/ext4، دستور set-label پیام خطای اشتباهی را برمی‌گرداند
افزودن یک ایمیج پایه ۳۲ بیتی فدورا ۲۳ برای virt-builder
ابزار virt-builder فایل‌های موقت را در /tmp می‌نویسد
ابزار virt-resize پارتیشن‌های لاجیکال را کپی نمی‌کند
ابزار virt-inspector نسخه 6.3 را برای ایمیج‌های win10 برمی‌گرداند (باید 10.0 برگرداند)
خطای segfault در virt-inspector --xpath هنگام دریافت ویژگی (attribute)
ابزار libguestfs می‌تواند دستورات را در حالی اجرا کند که stdin باز نیست (یا بدتر از آن، به دستگاه‌های تصادفی انتخابی مهمان متصل است)
درباره گزینه فشرده‌سازی برای qcow2
ابزار guestfish باید بتواند چینش‌های LVM thin را مدیریت کند
خطای برنامه‌نویسی پایتون DNF هنگام اجرا از طریق virt-builder
در صورت عدم نصب دستور file، بازرسی arch="unknown" را برای مهمان ویندوز برمی‌گرداند
مستندسازی مجوزهای مورد نیاز برای کاربران غیر مدیر جهت استفاده از virt-v2v
درخواست قابلیت: virt-sparsify: ایمن‌سازی لغو فشرده‌سازی '--in-place' (به‌صورت عادی یا اجباری)
کلاینت Virt-p2v نباید گزینه vdsm را نشان دهد زیرا قابل استفاده نیست
ابزار virt-v2v در تبدیل ایمیج raw ویندوز با شکست مواجه می‌شود: خطای "device name is not a partition"
خطای virt-builder: error: [file] is not a regular file in the guest
آزمون Simplestreams با شکست مواجه می‌شود: خطای virt-builder: error: the value for the key 'size' is not an integer
دستور copy-in در guestfish با الگوها (wildcards) رفتار عجیب/غیرمنتظره‌ای دارد
پایتون: عدم امکان کامپایل ماژول pip در صورت متفاوت بودن نسخه libguestfs نصب‌شده با نسخه pip guestfs
پیام تشخیصی بهتر هنگام عدم وجود virbr0
عدم نمایش هشدار هنگام تبدیل مهمان win7 با آنتی‌ویروس AVG نصب‌شده
گزینه --ssh-inject در virt-builder مجوزهای مناسبی را روی فایل‌های ایجادشده تنظیم نمی‌کند
درخواست قابلیت: بررسی و هشدار V2V به کاربر برای غیرفعال کردن group policy و آنتی‌ویروس در مهمان‌های ویندوز
تنظیم پروتکل گرافیکی و نوع ویدیویی اشتباه برای مهمان پس از تبدیل به rhev 3.6 توسط virt-v2v
اسلش‌های اضافی در URLهای vcenter ابزار virt-v2v را دچار سردرگمی می‌کند
‏[RHEV][V2V] ابزار virt-v2v کارت شبکه (NIC) را در صورت خالی بودن رشته منبع رابط منبع/@network یا منبع/@bridge نادیده می‌گیرد
ایمیج دیسک ۳۲ بیتی فدورا ۲۲ ایجاد شده توسط virt-builder قابل به‌روزرسانی نیست
حالت بدون رابط گرافیکی virt-p2v: خطای باز کردن اتصال کنترلی به $ip:22:unexpected …rompt
گزینه -oa preallocated -of qcow2 در virt-v2v به‌صورت کارآمد عمل نکرد
ابزار v2v: فاصله‌ها در مسیرها باید به‌صورت %20 اسکیپ شوند
بستن تمام پورت‌های ورودی در ISO ابزار virt-p2v
صفحه راهنمای virt-customize بخش خلاصه دستور را دو بار نمایش می‌دهد
دستور mount-loop در راه‌اندازی دستگاه loop با شکست مواجه شد: No such file or directory
خطای هسته: unable to handle kernel NULL pointer dereference at <addr> in function __blkg_lookup
ابزار virt-v2v باید مدخل‌های نامعتبر هسته را در پیکربندی grub نادیده بگیرد
اطلاعات نامرتبط در fstab باعث شکست virt-v2v با اطلاعات خطای مبهم می‌شود
ابزار virt-p2v: استفاده از دکمه "Back" باعث می‌شود لیست خروجی چندین بار پر شود
نصب درایور ویدیویی اشتباه برای مهمان rhel5.11 پس از تبدیل به libvirt
درخواست قابلیت: virt-builder ایمیج‌های qcow v3 ایجاد می‌کند، افزودن گزینه ساخت برای qcow v2
هنگام تبدیل مهمان XenPV با هسته معمولی نصب‌شده، فایل /etc/sysconfig/kernel به‌روزرسانی نمی‌شود
توابع "lstatnslist" و "lstatlist" در صورت استفاده نادرست از API خطایی صادر نمی‌کنند
ابزار koji spin-livecd نمی‌تواند یک Live CD کارآمد بسازد
دستور mount-loop با شکست مواجه می‌شود: mount failed: Unknown error -1
دستور set-label فقط می‌تواند <=127 بایت برای btrfs و <=126 بایت برای سیستم‌فایل ntfs تنظیم کند که با پیام راهنما همخوانی ندارد. همچنین برای ntfs باید زمانی که طول >128 بایت است یک پیام هشدار صادر کند
شکست libvirt در خاموش کردن دامنه: could not destroy libvirt domain: Requested operation is not valid: domain is not running
دستور mount-loop در راه‌اندازی دستگاه loop با شکست مواجه شد: No such file or directory

guestfs-examples(1), guestfs-faq(1), guestfs-performance(1), guestfs-recipes(1), guestfs-testing(1), guestfs(3), guestfish(1), http://libguestfs.org

Richard W.M. Jones

Copyright (C) 2009-2025 Red Hat Inc.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU GPL) همان‌طور که توسط «بنیاد نرم‌افزارهای آزاد» منتشر شده است؛ چه نسخه ۲ مجوز یا (به انتخاب خودتان) هر نسخه بعدی، بازتوزیع کرده و/یا تغییر دهید.

این برنامه با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.

شما باید همراه با این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به آدرس زیر مکاتبه کنید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

برای دریافت فهرستی از اشکالات ثبت‌شده در libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools

برای گزارش یک اشکال جدید در libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

هنگام گزارش یک اشکال، لطفاً موارد زیر را ارائه دهید:

  • نسخه libguestfs.
  • مکانی که libguestfs را از آن دریافت کرده‌اید (به‌عنوان مثال کدام توزیع لینوکس، کامپایل‌شده از سورس و غیره).
  • اشکال را به‌دقت شرح دهید و روشی برای بازتولید آن ارائه نمایید.
  • دستور libguestfs-test-tool(1) را اجرا کرده و خروجی کامل و ویرایش‌نشده را در گزارش اشکال جای‌گذاری کنید.
2026-07-14 libguestfs-1.60.1