virt-builder(1) Virtualization Support virt-builder(1)

virt-builder - ساخت سریع ایمیج‌های ماشین مجازی

virt-builder os-version
   [-o|--output DISKIMAGE] [--size SIZE] [--format raw|qcow2]
   [--arch ARCHITECTURE] [--attach ISOFILE]
   [--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
   [--chown UID:GID:PATH] [--commands-from-file FILENAME]
   [--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
   [--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
   [--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
   [--hostname HOSTNAME] [--inject-blnsvr METHOD]
   [--inject-qemu-ga METHOD] [--inject-virtio-win METHOD]
   [--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
   [--move SOURCE:DEST] [--password USER:SELECTOR]
   [--root-password SELECTOR] [--run SCRIPT]
   [--run-command 'CMD+ARGS'] [--scrub FILE]
   [--ssh-inject USER[:SELECTOR]] [--tar-in TARFILE:REMOTEDIR]
   [--timezone TIMEZONE] [--touch FILE] [--truncate FILE]
   [--truncate-recursive PATH] [--uninstall PKG,PKG..] [--update]
   [--upload FILE:DEST] [--write FILE:CONTENT] [--no-logfile]
   [--password-crypto md5|sha256|sha512] [--no-selinux-relabel]
   [--selinux-relabel]
virt-builder -l|--list [--long] [--list-format short|long|json] [os-version]
virt-builder --notes os-version
virt-builder --print-cache
virt-builder --cache-all-templates
virt-builder --delete-cache
virt-builder --get-kernel DISKIMAGE
   [--format raw|qcow2] [--output OUTPUTDIR]

ابزار virt-builder ابزاری برای ساخت سریع ماشین‌های مجازی جدید است. شما می‌توانید انواع مختلفی از ماشین‌های مجازی را برای استفادهٔ محلی یا ابری، معمولاً در عرض چند دقیقه یا کمتر، بسازید. همچنین virt-builder راه‌های متعددی برای سفارشی‌سازی این ماشین‌های مجازی ارائه می‌دهد. همه‌چیز از طریق خط فرمان اجرا می‌شود و هیچ عملیاتی به دسترسی ریشه (root) نیاز ندارد، بنابراین خودکارسازی و اسکریپت‌نویسی بسیار ساده است.

توجه داشته باشید که virt-builder سیستم‌های مهمان را از ابتدا (scratch) نصب نمی‌کند. این ابزار الگوهای آماده و تمیز سیستم‌عامل را که به‌صورت دیجیتالی امضا شده‌اند دریافت کرده و آن‌ها را سفارشی‌سازی می‌کند. این رویکرد به این دلیل استفاده می‌شود که بسیار سریع‌تر است، اما اگر نیاز به نصب تازه و از صفر سیستم‌عامل دارید، ممکن است بخواهید نگاهی به virt-install(1) و oz-install(1) بیندازید.

ساده‌ترین راه برای شروع، بررسی مثال‌ها در بخش بعدی است..SH "مثال‌ها (EXAMPLES)"

virt-builder --list

سیستم‌عامل‌های موجود برای نصب را فهرست می‌کند. مجموعه‌ای از سیستم‌عامل‌های آزاد با امکان توزیع مجدد به‌صورت استاندارد در دسترس است. شما همچنین می‌توانید موارد دلخواه خود را اضافه کنید (به زیر مراجعه کنید).

پس از انتخاب یک مهمان از فهرست، ممکن است بخواهید بررسی کنید که آیا یادداشت‌های نصبی وجود دارد یا خیر:

virt-builder --notes fedora-41

virt-builder fedora-41

یک ایمیج Fedora 41 برای همان معماری virt-builder می‌سازد (بنابراین اجرای آن در یک سیستم i686 تلاش خواهد کرد تا در صورت موجود بودن، یک ایمیج i686 بسازد). این ایمیج دارای تمام پیکربندی‌های پیش‌فرض خواهد بود (حداقل اندازه، بدون حساب‌های کاربری، گذرواژهٔ تصادفی برای ریشه، فقط حداقل نرم‌افزارهای پایه‌ای نصب‌شده و غیره).

شما نیازی ندارید این دستور را به عنوان کاربر ریشه (root) اجرا کنید.

اولین باری که این دستور اجرا می‌شود، باید الگو را از طریق شبکه بارگیری کند، اما این الگو در حافظهٔ پنهان ذخیره می‌شود (به بخش "CACHING" مراجعه کنید).

نام فایل خروجی از نام الگو گرفته می‌شود، بنابراین در مورد بالا fedora-41.img خواهد بود. می‌توانید نام فایل خروجی را با استفاده از گزینهٔ -o تغییر دهید:

virt-builder fedora-41 -o mydisk.img

شما همچنین می‌توانید از گزینهٔ -o برای نوشتن روی دستگاه‌های موجود یا حجم‌های منطقی (logical volumes) استفاده کنید.

virt-builder fedora-41 --format qcow2

مشابه بالا، اما خروجی را با قالب qcow2 در fedora-41.qcow2 ذخیره می‌کند.

virt-builder fedora-41 --size 20G

مشابه بالا، اما اندازه خروجی ۲۰ گیگابایت خواهد بود. اندازهٔ سیستم‌عامل مهمان هم‌زمان با کپی شدن در خروجی (به‌طور خودکار با استفاده از virt-resize(1)) تغییر می‌یابد.

virt-builder fedora-41 --arch i686

مشابه بالا، اما در صورت در دسترس بودن، از یک الگوی i686 استفاده می‌کند.

virt-builder fedora-41 --root-password file:/tmp/rootpw

یک ایمیج Fedora 41 ایجاد می‌کند. گذرواژهٔ کاربر ریشه از فایل /tmp/rootpw خوانده می‌شود.

توجه داشته باشید که اگر گزینهٔ --root-password را تنظیم نکنید، یک گذرواژهٔ ریشهٔ تصادفی به سیستم مهمان اختصاص می‌یابد که در خروجی استاندارد (stdout) چاپ می‌شود.

شما همچنین می‌توانید حساب‌های کاربری ایجاد کنید. بخش "USERS AND PASSWORDS" در زیر را ببینید.

virt-builder fedora-41 --hostname virt.example.com

نام میزبان را روی "virt.example.com" تنظیم می‌کند.

برای نصب بسته‌ها از مخزن نرم‌افزاری معمول (سیستم مهمان) (مانند dnf یا apt):

virt-builder fedora-41 --install "inkscape,@Xfce Desktop"

(در Fedora، علامت "@" برای نصب گروه‌های بسته‌ها استفاده می‌شود. در Debian به‌جای آن یک فرا-بسته (meta-package) نصب می‌کنید.)

برای به‌روزرسانی بسته‌های نصب‌شده به آخرین نسخه:

virt-builder debian-7 --update

گزینه‌های فراوانی وجود دارند که به شما امکان شخصی‌سازی نصب را می‌دهند. این گزینه‌ها شامل موارد زیر هستند: گزینه‌های --run/--run-command که یک اسکریپت شل یا دستور را در زمان تولید ایمیج دیسک اجرا کرده و به شما امکان اضافه یا ویرایش کردن فایل‌هایی که به ایمیج دیسک می‌روند را می‌دهند. گزینه‌های --firstboot/--firstboot-command که به شما امکان افزودن اسکریپت‌ها/دستوراتی را می‌دهند که در نخستین راه‌اندازی سیستم مهمان اجرا می‌شوند. گزینهٔ --edit برای ویرایش فایل‌ها، و گزینهٔ --upload برای بارگذاری فایل‌ها.

برای مثال:

cat <<'EOF' > /tmp/dnf-update.sh
dnf -y --best update
EOF

virt-builder fedora-41 --firstboot /tmp/dnf-update.sh

یا به‌سادگی:

virt-builder fedora-41 --firstboot-command 'dnf -y --best update'

که باعث می‌شود دستور "update" از ابزار dnf(8) یک بار در نخستین راه‌اندازی مهمان اجرا شود.

یا:

virt-builder fedora-41 \
  --edit '/etc/dnf/dnf.conf:
            s/gpgcheck=1/gpgcheck=0/'

که فایل /etc/dnf/dnf.conf را درون ایمیج دیسک (در طول فرایند ساخت ایمیج، مدت‌ها پیش از راه‌اندازی) ویرایش می‌کند.

شما می‌توانید این گزینه‌ها را ترکیب کنید و چندین مورد از هر نوع داشته باشید..SH "گزینه‌ها (OPTIONS)"

نمایش راهنما.
استفاده از معماری مشخص‌شده برای تصویر خروجی. این بدان معناست که باید منابعی وجود داشته باشند که قالب درخواستی را برای معماری مورد نظر ارائه دهند.

همچنین بخش "ARCHITECTURE" را ببینید.

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

احتمالاً می‌خواهید اطمینان حاصل کنید که حجم(ها) یا سیستم‌های فایل در دیسک‌های متصل‌شده دارای برچسب هستند (یا از یک نام حجم ISO استفاده کنید) تا بتوانید آن‌ها را با برچسب در run-scriptهای خود سوار (mount) کنید:

mkdir /tmp/mount
mount LABEL=EXTRA /tmp/mount

می‌توانید چندین گزینهٔ --attach داشته باشید و قالب آن می‌تواند هر قالب دیسکی باشد (نه فقط یک ISO).

همچنین ببینید: --run، "Installing packages at build time from a side repository"، genisoimage(1)، virt-make-fs(1).

مشخص کردن قالب دیسک برای گزینهٔ --attach بعدی. مقدار "FORMAT" معمولاً "raw" یا "qcow2" است. برای دیسک‌های ISO از "raw" استفاده کنید.
گزینهٔ --cache DIR دایرکتوری مورد استفاده/بررسی برای فایل‌های قالب کش‌شده را تعیین می‌کند. در صورت عدم تنظیم، مقدار پیش‌فرض آن $XDG_CACHE_HOME/virt-builder/ یا $HOME/.cache/virt-builder/ خواهد بود.

گزینهٔ --no-cache کش کردن قالب را غیرفعال می‌کند.

بارگیری تمام قالب‌ها در کش و سپس خروج. بخش "CACHING" را ببینید.

توجه داشته باشید که این گزینه همه‌چیز را کش نمی‌کند. ممکن است قالب‌های بیشتری بارگذاری شوند. همچنین این گزینه بسته‌ها را کش نمی‌کند (گزینه‌های --install و --update).

بررسی/عدم بررسی امضای دیجیتال قالب سیستم‌عامل. حالت پیش‌فرض بررسی امضا و خروج در صورت نادرست بودن آن است. استفاده از --no-check-signature این بررسی را نادیده می‌گیرد.

همچنین گزینهٔ --fingerprint را ببینید.

استفاده از توالی‌های رنگی ANSI برای رنگی کردن پیام‌ها. این حالت پیش‌فرض در زمانی است که خروجی یک tty باشد. اگر خروجی برنامه به یک فایل هدایت شود، توالی‌های رنگی ANSI غیرفعال خواهند بود مگر اینکه از این گزینه استفاده کنید.
مشخص کردن یک باینری جایگزین برای curl(1). همچنین می‌توانید از این گزینه برای افزودن پارامترهای curl استفاده کنید، به عنوان مثال برای غیرفعال کردن بررسی‌های گواهی https:
virt-builder --curl "curl --insecure" [...]
حذف کش قالب‌ها. بخش "CACHING" را ببینید.
عدم حذف فایل خروجی در صورت شکست در ساخت. می‌توانید از این گزینه برای اشکال‌زدایی شکست در اجرای اسکریپت‌ها استفاده کنید. برای روش‌های اشکال‌زدایی تصویرها، بخش "DEBUGGING BUILDS" را ببینید.

حالت پیش‌فرض این است که اگر virt-builder شکست بخورد (یا مثلاً اسکریپتی که اجرا می‌کند با شکست مواجه شود)، فایل خروجی حذف شود.

بررسی اینکه نمایه (index) و قالب‌ها توسط کلیدی با اثر انگشت (fingerprint) داده‌شده امضا شده باشند. (اثر انگشت یک رشتهٔ طولانی است که معمولاً به صورت ۱۰ گروه ۴ رقمی هگزادسیمال نوشته می‌شود).

می‌توانید این گزینه را چندین بار مشخص کنید. اگر چندین نشانی منبع (source URL) داشته باشید، می‌توانید بدون اثر انگشت، با یک اثر انگشت یا با چندین اثر انگشت کار کنید. در صورت وجود چندین اثر انگشت، هر یک باید تناظر یک‌به‌یک (1-1) با یک نشانی منبع داشته باشند.

برای ساخت‌های معمولی، این گزینه قالب خروجی را مشخص می‌کند. پیش‌فرض raw است.

همراه با --get-kernel، این گزینه قالب ورودی را تعیین می‌کند.

برای ایجاد یک فایل qcow2 به سبک قدیمی (جهت سازگاری با RHEL 6 یا نسخه‌های بسیار قدیمی qemu < 1.1)، پس از اجرای virt-builder، از این دستور استفاده کنید:

qemu-img amend -f qcow2 -o compat=0.10 output.qcow2
این گزینه هسته (kernel) و initramfs را از یک تصویر دیسکِ از پیش ساخته‌شده به نام "IMAGE" استخراج می‌کند (در واقع برای هر تصویر دیسک ماشین مجازی کار می‌کند، نه فقط مواردی که با virt-builder ساخته شده‌اند).

توجه داشته باشید که این روش منسوخ شده است: ابزار جداگانه‌ای برای این کار وجود دارد، virt-get-kernel(1)، که گزینه‌های بیشتری برای استخراج فایل دارد.

هسته و initramfs در دایرکتوری جاری نوشته می‌شوند، مگر اینکه نام دایرکتوری --output "outputdir" را نیز مشخص کرده باشید.

قالب تصویر دیسک به‌طور خودکار شناسایی می‌شود مگر اینکه با استفاده از گزینهٔ --format آن را مشخص کنید.

در صورتی که سیستم مهمان شامل چندین هسته باشد، هسته‌ای با بالاترین شمارهٔ نسخه انتخاب می‌شود. برای استخراج هسته‌های دلخواه از تصویر دیسک، guestfish(1) را ببینید. برای استخراج کل دایرکتوری /boot یک مهمان، virt-copy-out(1) را ببینید.

مشخص کردن یک باینری جایگزین برای gpg(1) (GNU Privacy Guard). به‌طور پیش‌فرض virt-builder به دنبال "gpg2" یا "gpg" در $PATH می‌گردد.

همچنین می‌توانید از این گزینه برای افزودن پارامترهای gpg استفاده کنید، برای مثال جهت مشخص کردن یک دایرکتوری خانگی جایگزین:

virt-builder --gpg "gpg --homedir /tmp" [...]
فهرست کردن تمام قالب‌های موجود در صورت مشخص نشدن مهمان، یا فقط برای مهمان مشخص‌شده.

می‌توان با --list-format قالب خروجی برای فهرست کردن قالب‌ها را انتخاب کرد:

قالب پیش‌فرض، فقط شناسهٔ قالب و در کنار آن، توضیحات کوتاه آن را چاپ می‌کند.
یک فهرست متنی شامل جزئیات منابع موجود و به دنبال آن جزئیات قالب‌های موجود را چاپ می‌کند.
یک شیء JSON حاوی جزئیات منابع موجود و جزئیات قالب‌های موجود را چاپ می‌کند.

کلید "version" در شیء اصلی نشان‌دهندهٔ "نسخهٔ سازگاری" است و هر بار که خروجی JSON حاصل با نسخه‌های قبلی ناسازگار شود (مثلاً ساختار تغییر کرده باشد یا کلیدهای غیراختیاری دیگر وجود نداشته باشند)، ارتقا می‌یابد.

گزینهٔ --long نگارش کوتاه‌شده‌ای برای قالب "long" است.

همچنین ببینید: --source، --notes، بخش "SOURCES OF TEMPLATES".

این گزینه برای سازگارتر کردن خروجی با ماشین هنگام پردازش و تجزیه توسط برنامه‌های دیگر استفاده می‌شود. بخش "MACHINE READABLE OUTPUT" را در ادامه ببینید..IP "-m MB" 4
مقدار حافظهٔ اختصاص‌یافته به اسکریپت‌های --run را تغییر می‌دهد. اگر متوجه شدید که اسکریپت‌های --run یا گزینهٔ --install با کمبود حافظه مواجه می‌شوند، این مقدار را افزایش دهید.

مقدار پیش‌فرض را می‌توان با این دستور پیدا کرد:

guestfish get-memsize
دسترسی شبکه را از درون سیستم‌عامل میهمان در طول فرایند نصب فعال یا غیرفعال می‌کند.

حالت فعال پیش‌فرض است. برای غیرفعال کردن دسترسی از --no-network استفاده کنید.

شبکه تنها اتصالات خروجی را مجاز می‌داند و محدودیت‌های جزئی دیگری نیز دارد. بخش «NETWORK» در virt-rescue(1) را ببینید.

اگر از --no-network استفاده کنید، برخی گزینه‌های دیگر مانند --install کار نخواهند کرد.

این گزینه بر دسترسی میهمان به شبکه پس از راه‌اندازی (بوت شدن) تأثیری ندارد، چرا که این مورد توسط هایپروایزر یا محیط ابری شما کنترل می‌شود و ارتباطی با virt-builder ندارد.

به‌طور کلی شما نباید از --no-network استفاده کنید. با این حال دلایلی وجود دارد که ممکن است بخواهید از آن استفاده کنید:

1.
پشتیبان libguestfs (backend) که استفاده می‌کنید از شبکه پشتیبانی نمی‌کند. (ببینید: «BACKEND» در guestfs(3)).
2.
هر نرم‌افزاری که برای نصب نیاز دارید از یک ISO متصل‌شده می‌آید، بنابراین نیازی به شبکه ندارید.
3.
نمی‌خواهید کد میهمان غیرقابل‌اعتماد هنگام اجرای virt-builder تلاش کند به شبکه میزبان دسترسی پیدا کند. این مورد به‌ویژه زمانی که به منبع الگوهای سیستم‌عامل اعتماد ندارید مطرح می‌شود. (بخش «SECURITY» در زیر را ببینید).
4.
شبکهٔ میزبان ندارید (مثلاً در محیط‌های امن/محدودشده).
هنگام خروج، فایل خروجی را همگام‌سازی (sync) نمی‌کند.

برنامهٔ Virt-builder هنگام خروج، فایل خروجی یا ایمیج دیسک را "fsync" می‌کند.

دلیل این است که حالت حافظهٔ موقت (caching) پیش‌فرض در qemu/KVM برابر با "none" یا "directsync" است که هر دوی آنها از حافظهٔ موقت صفحه (page cache) میزبان عبور می‌کنند (آن را دور می‌زنند). بنابراین اگر بلافاصله پس از اجرای virt-builder میهمان را راه‌اندازی کنید، این حالت‌ها به درستی کار نخواهند کرد - آنها فایل خروجی کامل را نخواهند دید. (توجه داشته باشید که نباید از این حالت‌های حافظه موقت استفاده کنید - آنها به این دلیل و دلایل دیگر اساساً معیوب هستند.)

اگر از این حالت‌های حافظه موقت معیوب استفاده نمی‌کنید، می‌توانید از --no-sync برای جلوگیری از این همگام‌سازی غیرضروری و به‌دست آوردن کارایی بسیار بیشتر استفاده کنید.

تمام یادداشت‌های مرتبط با این سیستم‌عامل میهمان را فهرست کرده و سپس خارج می‌شود (این عمل فرایند نصب را انجام نمی‌دهد).
خروجی را در filename می‌نویسد. اگر این گزینه را مشخص نکنید، نام فایل خروجی با گرفتن رشتهٔ "os-version" و افزودن ".img" (برای قالب raw) یا ".qcow2" (برای قالب qcow2) تولید می‌شود.

توجه داشته باشید که نام فایل خروجی می‌تواند یک دستگاه (device)، پارتیشن یا حجم منطقی (logical volume) باشد.

هنگامی که همراه با --get-kernel استفاده شود، این گزینه دایرکتوری خروجی را مشخص می‌کند.

اطلاعات مربوط به حافظهٔ موقت الگوها (template cache) را چاپ می‌کند. بخش «CACHING» را ببینید.
پیام‌های پیشرفت معمول را چاپ نمی‌کند.
اندازه دیسک خروجی را مشخص می‌کند؛ اندازه را می‌توان با استفاده از نام‌های متداول مانند "32G" (۳۲ گیگابایت) و غیره مشخص کرد.

برنامهٔ Virt-builder اندازهٔ سیستم‌های فایل درون ایمیج دیسک را به‌طور خودکار تغییر می‌دهد.

اگر اندازه مشخص نشود، یکی از این دو حالت رخ می‌دهد: اگر خروجی یک فایل باشد، اندازه با اندازه الگو یکسان خواهد بود. اگر خروجی یک دستگاه، پارتیشن و غیره باشد، اندازه همان دستگاه استفاده می‌شود.

برای مشخص کردن اندازه بر حسب بایت، عدد باید با حرف کوچک انگلیسی b همراه باشد، مانند: "--size 10737418240b".

تعداد N ≥ ۲ پردازندهٔ مجازی (vCPU) را برای استفاده توسط اسکریپت‌های --run فعال می‌کند.
نشانی اینترنتی (URL) منبع را برای جستجوی نمایه‌ها تنظیم می‌کند.

می‌توانید این گزینه را چندین بار برای مشخص کردن چندین منبع مشخص کنید.

همچنین بخش «SOURCES OF TEMPLATES» در زیر را ببینید.

توجه داشته باشید که نباید --source را به منابعی که به آنها اعتماد ندارید ارجاع دهید (مگر اینکه منبع توسط شخصی که به او اعتماد دارید امضا شده باشد). همچنین گزینهٔ --no-network را ببینید.

در صورتی که دستگاه خروجی یک پارتیشن باشد، هشداری صادر نمی‌کند. این هشدار از یک خطای متداول کاربری هنگام نوشتن روی یک حافظه فلش USB یا درایو خارجی جلوگیری می‌کند؛ حالتی که در آن معمولاً باید روی کل دستگاه (--output /dev/sdX) بنویسید، نه روی پارتیشنی از دستگاه (--output /dev/sdX1). از این گزینه برای فرونشاندن این هشدار استفاده کنید.
پیام‌های اشکال‌زدایی را فعال می‌کند و/یا خروجی پرجزئیات تولید می‌کند.

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

شماره نسخه را نمایش می‌دهد و خارج می‌شود.
پیام‌های خطا، هشدار و اطلاعاتی را در سطرهای متناسب می‌شکند (wrap). این رفتار در حالتی که خروجی یک tty است پیش‌فرض می‌باشد. اگر خروجی برنامه به یک فایل تغییر مسیر داده شود، شکستن سطرها غیرفعال خواهد بود مگر اینکه از این گزینه استفاده کنید.
ردیابی فراخوانی‌های API مربوط به libguestfs را فعال می‌کند..SS "گزینه‌های سفارشی‌سازی"
افزودن یک خط متن به "FILE". اگر فایل از قبل با یک خط‌جدید (newline) پایان نیافته باشد، یک نویسه خط‌جدید پیش از خط الحاقی اضافه می‌شود. همچنین یک خط‌جدید به‌طور خودکار به انتهای رشتهٔ "LINE" اضافه می‌شود.

برای مثال (با فرض نقل‌قول معمولی پوسته) این دستور:

--append-line '/etc/hosts:10.0.0.1 foo'

بسته به وضعیت، عبارت "10.0.0.1 foo⏎" یا "⏎10.0.0.1 foo⏎" را به فایل اضافه خواهد کرد؛ مورد دوم تنها در صورتی است که فایل موجود پیش از این با خط‌جدید خاتمه نیافته باشد.

"⏎" نمایانگر یک نویسه خط‌جدید است که با بررسی محتوای موجود در فایل حدس زده می‌شود؛ بنابراین این دستور برای فایل‌هایی که از پایان‌خط‌های Unix یا Windows استفاده می‌کنند به‌درستی عمل می‌کند. این گزینه برای فایل‌های خالی یا فایل‌هایی که وجود ندارند نیز کار می‌کند.

برای درج چندین خط، از همان گزینه چند بار استفاده کنید:

--append-line '/etc/hosts:10.0.0.1 foo'
--append-line '/etc/hosts:10.0.0.2 bar'

برای درج یک خط خالی پیش از خط الحاقی، بدین صورت عمل کنید:

--append-line '/etc/hosts:'
--append-line '/etc/hosts:10.0.0.1 foo'
تغییر مجوزهای دسترسی "FILE" به "PERMISSIONS".

نکته: "PERMISSIONS" به‌طور پیش‌فرض در مبنای ده‌دهی تفسیر می‌شود، مگر اینکه پیشوند 0 به آن اضافه کنید تا در مبنای هشت‌هشتی باشد؛ یعنی از 0700 استفاده کنید نه 700.

تغییر شناسه کاربری (UID) و شناسه گروهی (GID) مالک یک فایل یا دایرکتوری در مهمان. نکته:
  • تنها UIDها و GIDهای عددی کار خواهند کرد، و ممکن است این شناسه‌ها در داخل مهمان با میزبان یکسان نباشند.
  • این گزینه برای مهمان‌های Windows کار نخواهد کرد.

برای مثال:

virt-customize --chown '0:0:/var/log/audit.log'

همچنین ببینید: --upload.

خواندن دستورهای سفارشی‌سازی از یک فایل، در هر خط یک دستور (و آرگومان‌های آن).

هر خط شامل یک دستور سفارشی‌سازی و آرگومان‌های آن است، برای مثال:

delete /some/file
install some-package
password some-user:password:its-new-password

خطوط خالی نادیده گرفته می‌شوند، و خطوطی که با "#" آغاز می‌شوند کامنت بوده و آن‌ها نیز نادیده گرفته می‌شوند. علاوه بر این، می‌توان آرگومان‌ها را با افزودن یک "\" (نویسهٔ ادامه‌دهنده) در انتهای خط در چند خط گسترش داد، برای مثال:

edit /some/file:\
  s/^OPT=.*/OPT=ok/

دستورها به همان ترتیبی که در فایل آمده‌اند پردازش می‌شوند، درست مانند اینکه به‌صورت --delete /some/file در خط فرمان مشخص شده باشند.

کپی کردن بازگشتی فایل‌ها یا دایرکتوری‌ها در داخل مهمان.

استفاده از نویسه‌های عام (Wildcard) امکان‌پذیر نیست.

کپی کردن بازگشتی فایل‌ها یا دایرکتوری‌های محلی به داخل تصویر دیسک، و قرار دادن آن‌ها در دایرکتوری "REMOTEDIR" (که باید وجود داشته باشد).

استفاده از نویسه‌های عام (Wildcard) امکان‌پذیر نیست.

حذف یک فایل از سیستم مهمان، یا حذف یک دایرکتوری (و تمام محتویات آن، به‌صورت بازگشتی).

می‌توانید در مسیر مشخص‌شده از نویسه‌های تطبیق الگوی پوسته (glob) استفاده کنید. مراقب باشید که در صورت نیاز، نویسه‌های تطبیق را برای جلوگیری از بسط در پوستهٔ میزبان گریزدهی (escape) کنید. برای مثال:

virt-customize --delete '/var/log/*.log'.

همچنین ببینید: --upload، --scrub.

ویرایش "FILE" با استفاده از عبارت پرل "EXPR".

دقت کنید که عبارت را به‌درستی در علامت نقل‌قول قرار دهید تا توسط پوسته دچار دگرگونی نشود.

توجه داشته باشید که این گزینه تنها در صورتی در دسترس است که Perl 5 نصب باشد.

بخش «NON-INTERACTIVE EDITING» را در virt-edit(1) ببینید.

نصب "SCRIPT" در داخل مهمان، به‌گونه‌ای که با اولین بوت مهمان، این اسکریپت اجرا شود (با دسترسی root، در اواخر فرایند راه‌اندازی).

پس از نصب در مهمان، مجوز chmod +x به‌طور خودکار به اسکریپت داده می‌شود.

نسخهٔ جایگزین --firstboot-command نیز همان کار را انجام می‌دهد، اما به‌راحتی دستور را برای شما در قالب یک اسکریپت تک‌خطی بسته‌بندی می‌کند.

می‌توانید چندین گزینهٔ --firstboot داشته باشید. آن‌ها به همان ترتیبی که در خط فرمان ظاهر شده‌اند اجرا می‌شوند.

همچنین ببینید: بخش «FIRSTBOOT» در virt-customize(1)، --run.

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

می‌توانید چندین گزینهٔ --firstboot داشته باشید. آن‌ها به همان ترتیبی که در خط فرمان ظاهر می‌شوند اجرا می‌گردند.

همچنین ببینید: بخش «FIRSTBOOT» در virt-customize(1)، --run.

نصب بسته‌های نام‌برده (یک فهرست جداشده با کاما). این بسته‌ها هنگام اولین بوت مهمان و با استفاده از مدیر بستهٔ مهمان (مانند apt، yum و غیره) و اتصال شبکهٔ مهمان نصب می‌شوند.

برای بررسی اجمالی روش‌های گوناگون نصب بسته‌ها، بخش «INSTALLING PACKAGES» را ببینید.

تنظیم نام میزبان (hostname) سیستم مهمان به "HOSTNAME". در صورت تمایل می‌توانید از یک نام نقطه‌دار به‌شکل hostname.domainname (یا همان FQDN) استفاده کنید.
تزریق سرور بالون (blnsvr.exe) به درون یک مهمان Windows. این عملیات همچنین یک اسکریپت firstboot تزریق می‌کند تا سرور بالون هنگام بوت شدن مهمان نصب شود.

پارامتر آن مشابه همان پارامتری است که در عملیات --inject-virtio-win استفاده می‌شود.

توجه داشته باشید که برای انجام یک تبدیل کامل از یک مهمان Windows از یک هایپروایزر دیگر مانند VMware (که شامل عملیات‌های متعدد دیگری است) باید به‌جای این ابزار از virt-v2v(1) استفاده کنید.

تزریق QEMU Guest Agent به درون یک مهمان Windows. عامل مهمان به‌منظور ارائهٔ قابلیت‌های پیشرفته، از طریق یک سوکت با qemu ارتباط برقرار می‌کند (نگاه کنید به qemu-ga(8)). این عملیات همچنین یک اسکریپت firstboot تزریق می‌کند تا Guest Agent هنگام بوت شدن مهمان نصب شود.

پارامتر آن مشابه همان پارامتری است که در عملیات --inject-virtio-win استفاده می‌شود.

توجه داشته باشید که برای انجام یک تبدیل کامل از یک مهمان Windows از یک هایپروایزر دیگر مانند VMware (که شامل عملیات‌های متعدد دیگری است) باید به‌جای این ابزار از virt-v2v(1) استفاده کنید.

تزریق درایورهای virtio-win به درون یک مهمان Windows. این درایورها درایورهای شتاب‌یافتهٔ virtio را اضافه می‌کنند که برای اجرا بر روی هایپروایزری که از virtio پشتیبانی می‌کند (مانند qemu/KVM) مناسب هستند. این عملیات همچنین رجیستری ویندوز را به‌گونه‌ای تنظیم می‌کند که درایورها هنگام بوت شدن مهمان نصب گردند.

این پارامتر می‌تواند یکی از موارد زیر باشد:

مسیر تصویر ISO حاوی درایورهای virtio-win (مانند /usr/share/virtio-win/virtio-win.iso).
دایرکتوری حاوی بسته‌های بازشدهٔ درایورهای virtio-win (مانند /usr/share/virtio-win).

توجه داشته باشید که برای انجام یک تبدیل کامل از یک مهمان Windows از یک هایپروایزر دیگر مانند VMware (که شامل عملیات‌های متعدد دیگری است) باید به‌جای این ابزار از virt-v2v(1) استفاده کنید. بسته‌های مشخص‌شده (فهرستی جداشده با کاما) را نصب می‌کند. این بسته‌ها هنگام ساخت تصویر با استفاده از مدیر بستهٔ مهمان (مانند apt، yum و غیره) و اتصال شبکهٔ میزبان نصب می‌شوند.

برای مرور کلی روش‌های مختلف نصب بسته‌ها، "INSTALLING PACKAGES" را ببینید.

همچنین --update و --uninstall را ببینید.

ایجاد پیوند(های) نمادین در مهمان، که از "LINK" آغاز شده و به "TARGET" اشاره می‌کند.
ایجاد یک دایرکتوری در مهمان.

این گزینه از "mkdir -p" استفاده می‌کند، بنابراین دایرکتوری‌های میانی نیز ایجاد می‌شوند و در صورتی که دایرکتوری از پیش وجود داشته باشد نیز کار می‌کند.

انتقال فایل‌ها یا دایرکتوری‌ها درون مهمان.

نویسه‌های عام (Wildcards) نمی‌توانند استفاده شوند.

پاک‌سازی کامل "builder.log" (فایل گزارش دستورهای ساخت) از تصویر پس از اتمام ساخت. اگر نمی‌خواهید دقیقاً مشخص شود که تصویر چگونه ساخته شده است، از این گزینه استفاده کنید.

همچنین ببینید: "LOG FILE".

تلاشی برای اصلاح برچسب‌های SELinux فایل‌ها در مهمان انجام ندهید.

در مهمان‌هایی که از SELinux پشتیبانی می‌کنند، سفارشی‌سازی به‌طور خودکار فایل‌ها را مجدداً برچسب‌گذاری می‌کند تا برچسب صحیح SELinux را داشته باشند. (برچسب‌گذاری مجدد بلافاصله انجام می‌شود، اما در صورت شکست عملیات، سفارشی‌سازی در عوض فایل /.autorelabel را در تصویر touch می‌کند تا عملیات برچسب‌گذاری مجدد برای بوت بعدی تصویر زمان‌بندی شود.) این گزینه برچسب‌گذاری مجدد خودکار را غیرفعال می‌کند.

این گزینه برای مهمان‌هایی که از SELinux پشتیبانی نمی‌کنند بی‌اثر است (no-op).

تنظیم گذرواژه برای "USER". (توجه داشته باشید که این گزینه حساب کاربری را ایجاد نمی‌کند).

برای آگاهی از قالب فیلد "SELECTOR" و همچنین نحوهٔ راه‌اندازی حساب‌های کاربری، بخش "USERS AND PASSWORDS" را ببینید.

هنگامی که ابزارهای virt گذرواژه‌ای را در مهمان تغییر داده یا تنظیم می‌کنند، این گزینه الگوریتم رمزنگاری آن گذرواژه را به "md5"، "sha256" یا "sha512" تنظیم می‌کند.

گزینه‌های "sha256" و "sha512" به glibc ≥ 2.7 نیاز دارند (بررسی crypt(3) درون مهمان).

گزینهٔ "md5" با مهمان‌های نسبتاً قدیمی لینوکس کار خواهد کرد (مانند RHEL 3)، اما در برابر حملات امروزی ایمن نیست.

پیش‌فرض "sha512" است مگر اینکه libguestfs یک مهمان قدیمی را شناسایی کند که از SHA-512 پشتیبانی نمی‌کرد، که در این صورت از "md5" استفاده خواهد کرد. می‌توانید با مشخص کردن این گزینه رفتار libguestfs را بازنویسی کنید.

توجه داشته باشید که این گزینه رمزنگاری پیش‌فرض گذرواژه را که توسط مهمان هنگام ایجاد حساب‌های کاربری جدید استفاده می‌شود تغییر نمی‌دهد. اگر می‌خواهید این کار را انجام دهید، باید از گزینهٔ --edit برای تغییر "/etc/sysconfig/authconfig" (در Fedora و RHEL) یا "/etc/pam.d/common-password" (در Debian و Ubuntu) استفاده کنید.

تنظیم گذرواژهٔ ریشه (root).

برای آگاهی از قالب فیلد "SELECTOR" و همچنین نحوهٔ راه‌اندازی حساب‌های کاربری، بخش "USERS AND PASSWORDS" را ببینید.

توجه: در virt-builder، اگر --root-password را تنظیم نکنید، یک گذرواژهٔ ریشهٔ تصادفی به مهمان اختصاص می‌یابد.

اجرای اسکریپت شل (یا هر برنامه‌ای) به نام "SCRIPT" روی تصویر دیسک. اسکریپت به‌صورت مجازی‌سازی‌شده درون یک ابزارک کوچک (appliance) و chroot‌شده به سیستم‌فایل مهمان اجرا می‌شود.

روی اسکریپت به‌طور خودکار chmod +x اعمال می‌شود.

اگر libguestfs پشتیبانی کند، یک اتصال شبکهٔ محدود در دسترس خواهد بود اما تنها اتصالات خروجی شبکه را مجاز می‌داند. همچنین می‌توانید دیسک‌های داده (مانند فایل‌های ISO) را به‌عنوان روشی دیگر برای ارائهٔ داده‌ها (مانند بسته‌های نرم‌افزاری) به اسکریپت بدون نیاز به اتصال شبکه متصل کنید (--attach). علاوه بر این می‌توانید فایل‌های داده را بارگذاری کنید (--upload).

می‌توانید چندین گزینهٔ --run داشته باشید. آن‌ها به همان ترتیبی که در خط فرمان ظاهر می‌شوند اجرا می‌گردند.

همچنین ببینید: --firstboot، --attach، --upload.

اجرای دستور و آرگومان‌ها روی تصویر دیسک. این دستور به‌صورت مجازی‌سازی‌شده درون یک ابزارک کوچک (appliance) و chroot‌شده به سیستم‌فایل مهمان اجرا می‌شود.

اگر libguestfs پشتیبانی کند، یک اتصال شبکهٔ محدود در دسترس خواهد بود اما تنها اتصالات خروجی شبکه را مجاز می‌داند. همچنین می‌توانید دیسک‌های داده (مانند فایل‌های ISO) را به‌عنوان روشی دیگر برای ارائهٔ داده‌ها (مانند بسته‌های نرم‌افزاری) به اسکریپت بدون نیاز به اتصال شبکه متصل کنید (--attach). علاوه بر این می‌توانید فایل‌های داده را بارگذاری کنید (--upload).

می‌توانید چندین گزینهٔ --run-command داشته باشید. آن‌ها به همان ترتیبی که در خط فرمان ظاهر می‌شوند اجرا می‌گردند.

همچنین ببینید: --firstboot، --attach، --upload.

پاک‌سازی کامل (امحای) یک فایل از مهمان. این گزینه مانند --delete است، به‌جز اینکه:
  • داده‌ها را امحا می‌کند تا مهمان نتواند آن را بازیابی کند.
  • نمی‌تواند دایرکتوری‌ها را حذف کند، بلکه تنها فایل‌های معمولی را حذف می‌کند.
این یک گزینه برای سازگاری است که کاری انجام نمی‌دهد.
تزریق یک کلید ssh به‌طوری که "USER" داده‌شده بتواند از طریق ssh بدون وارد کردن گذرواژه وارد شود. "USER" باید از قبل در مهمان وجود داشته باشد.

برای آگاهی از ساختار فیلد "SELECTOR"، بخش "SSH KEYS" را ببینید.

می‌توانید چندین گزینهٔ --ssh-inject برای کاربران مختلف و همچنین برای کلیدهای بیشتر برای هر کاربر داشته باشید.

کپی کردن فایل‌ها یا دایرکتوری‌های محلی از یک فایل tar محلی به نام "TARFILE" به درون تصویر دیسک، و قرار دادن آن‌ها در دایرکتوری "REMOTEDIR" (که باید وجود داشته باشد). توجه داشته باشید که فایل tar باید غیرفشرده باشد (فایل‌های .tar.gz در اینجا کار نخواهند کرد).
تنظیم منطقهٔ زمانی پیش‌فرض سیستم مهمان به "TIMEZONE". از یک رشتهٔ مکان مانند "Europe/London" استفاده کنید.
این دستور عملیاتی شبیه به touch(1) را روی "FILE" انجام می‌دهد.
این دستور حجم "FILE" را به صفر کوتاه (truncate) می‌کند. فایل باید از قبل وجود داشته باشد.
این دستور به‌طور بازگشتی اندازهٔ تمام فایل‌های زیر مسیر "PATH" را به صفر کاهش می‌دهد.
حذف بسته‌های نام‌برده (فهرستی جداشده با کاما). این بسته‌ها هنگام ساخت تصویر با استفاده از مدیر بستهٔ مهمان (مانند apt، yum و غیره) حذف می‌شوند. همچنین ممکن است برای برآورده کردن این درخواست، نیاز به حذف بسته‌های وابسته باشد.

همچنین --install و --update را ببینید.

معادل دستورهای "yum update"، "apt-get upgrade"، یا هر دستوری را که برای به‌روزرسانی بسته‌های از پیش نصب‌شده در الگو به آخرین نسخه‌هایشان لازم است، انجام می‌دهد.

همچنین --install و --uninstall را ببینید.

بارگذاری فایل محلی "FILE" در مقصد "DEST" در تصویر دیسک. مالکیت و مجوزهای فایل اصلی حفظ می‌شوند، بنابراین باید آن‌ها را طوری تنظیم کنید که می‌خواهید در تصویر دیسک باشند.

مقدار "DEST" می‌تواند نام فایل نهایی باشد. از این مورد می‌توان برای تغییر نام فایل هنگام بارگذاری استفاده کرد.

اگر "DEST" نام یک دایرکتوری باشد (که باید از قبل در مهمان وجود داشته باشد)، فایل در آن دایرکتوری بارگذاری می‌شود و همان نام سیستم‌فایل محلی را حفظ می‌کند.

همچنین ببینید: --mkdir، --delete، --scrub.

نوشتن "CONTENT" در "FILE"..SH "مرجع (REFERENCE)"

چندین رویکرد برای نصب بسته‌ها یا برنامه‌ها در سیستم‌عامل مهمان وجود دارد که هر یک موازنه‌ها و پیامدهای متفاوتی دارند.

نصب بسته‌ها در زمان ساخت

اگر سیستم‌عامل مهمانی که نصب می‌کنید مشابه سیستم‌عامل میزبان باشد (برای مثال هر دو لینوکس باشند)، و اگر libguestfs از اتصالات شبکه پشتیبانی کند، می‌توانید از --install برای نصب بسته‌ها به این صورت استفاده کنید:

virt-builder fedora-41 --install inkscape

این روش از مدیر بسته‌ی مهمان و اتصال شبکه‌ی میزبان استفاده می‌کند.

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

برای به‌روزرسانی بسته‌های نصب‌شده در قالب (template) در زمان ساخت:

virt-builder fedora-41 --update

بیشتر قالب‌هایی که همراه با virt-builder عرضه می‌شوند، حاوی گزینش بسیار حداقلی از بسته‌ها هستند (معروف به "JEOS" یا "Just Enough Operating System") که در زمان ایجاد قالب به‌روز بوده‌اند، اما ممکن است تا زمانی که اقدام به نصب یک سیستم‌عامل از روی آن قالب می‌کنید قدیمی شده باشند. این گزینه آن بسته‌های قالب را به‌روزرسانی می‌کند.

نصب بسته‌ها در اولین راه‌اندازی

گزینه‌ی دیگر، نصب بسته‌ها در زمان نخستین راه‌اندازی سیستم‌عامل مهمان است:

virt-builder fedora-41 --firstboot-install inkscape

این روش از مدیر بسته‌ی مهمان و اتصال شبکه‌ی خود مهمان استفاده می‌کند.

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

نصب بسته‌ها در زمان ساخت از یک مخزن جانبی

اگر نرم‌افزاری که می‌خواهید نصب کنید در مخزن بسته‌ی اصلی مهمان موجود نباشد، می‌توانید یک مخزن جانبی اضافه کنید. معمولاً این مخزن به صورت یک فایل ISO (تصویر دیسک CD) حاوی بسته‌های اضافی ارائه می‌شود.

می‌توانید تصویر دیسک را با استفاده از genisoimage(1) یا virt-make-fs(1) ایجاد کنید. برای genisoimage، دستوری شبیه به این را به کار ببرید:

genisoimage -o extra-packages.iso -R -J -V EXTRA cdcontents/

اسکریپتی ایجاد کنید که ISO را متصل (mount) کرده و مخزن را برپا سازد. برای dnf، فایل /tmp/install.sh را با محتوای زیر بسازید:

mkdir /tmp/mount
mount LABEL=EXTRA /tmp/mount

cat <<'EOF' > /etc/yum.repos.d/extra.repo
[extra]
name=extra
baseurl=file:///tmp/mount
enabled=1
EOF

dnf -y install famousdatabase

برای apt، فایل /tmp/install.sh را با محتوای زیر بسازید:

mkdir /tmp/mount
mount LABEL=EXTRA /tmp/mount

apt-cdrom -d=/tmp/mount add
apt-get -y install famousdatabase

از گزینه‌ی --attach برای پیوست کردن تصویر CD / دیسک و از گزینه‌ی --run برای اجرای اسکریپت استفاده کنید:

virt-builder fedora-41 \
  --attach extra-packages.iso \
  --run /tmp/install.sh

گزینه‌ی --root-password برای تغییر گذرواژه‌ی root استفاده می‌شود (در غیر این صورت از یک گذرواژه‌ی تصادفی استفاده خواهد شد). این گزینه یک "SELECTOR" گذرواژه در یکی از قالب‌های زیر می‌پذیرد:

گذرواژه‌ی root را از "FILENAME" می‌خواند. کل خط اول این فایل به عنوان گذرواژه‌ی جایگزین در نظر گرفته می‌شود. سایر خطوط نادیده گرفته می‌شوند. باید این فایل را با حالت 0600 ایجاد کنید تا مطمئن شوید هیچ‌کس دیگری قادر به خواندن آن نیست.
گذرواژه‌ی root را روی رشته‌ی متنی "PASSWORD" تنظیم می‌کند.

توجه: این روش امن نیست چرا که هر کاربری روی همان ماشین می‌تواند گذرواژه‌ی متن‌آشکار را با استفاده از ps(1) ببیند.

یک گذرواژه‌ی تصادفی انتخاب می‌کند که در stdout چاپ می‌شود. این گذرواژه تقریباً ۱۲۰ بیت تصادفی‌بودن دارد.

این حالت پیش‌فرض است.

گذرواژه‌ی حساب root غیرفعال می‌شود. این کار مانند قرار دادن "*" در فیلد گذرواژه است.
حساب root قفل می‌شود، اما یک گذرواژه روی حساب قرار می‌گیرد. اگر ابتدا قفل آن باز شود (با استفاده از "passwd -u")، ورودها از گذرواژه‌ی داده‌شده استفاده خواهند کرد.
حساب root قفل شده و گذرواژه غیرفعال می‌شود.

ایجاد حساب‌های کاربری

برای ایجاد حساب‌های کاربری، دستور useradd(8) را همراه با --firstboot-command به این صورت به کار ببرید:

virt-builder --firstboot-command \
   'useradd -m -p "" rjones ; chage -d 0 rjones'

دستور فوق یک حساب "rjones" بدون گذرواژه ایجاد می‌کند و کاربر را وادار می‌سازد هنگام نخستین ورود، یک گذرواژه تنظیم کند. روش‌های دیگری نیز برای مدیریت گذرواژه‌ها وجود دارد؛ برای جزئیات به useradd(8) مراجعه کنید..SS "چینش صفحه‌کلید (KEYBOARD LAYOUT)" از آن‌جا که روش‌های بسیار متفاوتی برای تنظیم چینش صفحه‌کلید در توزیع‌های لینوکس وجود دارد، virt-builder هنوز تلاش نمی‌کند تا یک گزینه خط فرمان ساده داشته باشد. این بخش نحوه تنظیم صفحه‌کلید را برای برخی از توزیع‌های رایج لینوکس شرح می‌دهد.

چینش صفحه‌کلید با systemd

برای توزیع‌هایی که از "localectl" در systemd استفاده می‌کنند، از فرمانی مانند این استفاده کنید:

virt-builder fedora-41 \
  --firstboot-command 'localectl set-keymap uk'

برای جزئیات بیشتر به localectl(1) و https://www.happyassassin.net/2013/11/23/keyboard-layouts-in-fedora-20-and-previously مراجعه کنید.

چینش صفحه‌کلید با استفاده از /etc/sysconfig/keyboard

برای RHEL ≤ 6، Fedora ≤ 18 و موارد مشابه، با استفاده از گزینه‌های --upload، --write یا --edit فایل پیکربندی صفحه‌کلید را بارگذاری کرده یا ویرایش کنید. برای مثال:

virt-builder centos-6 \
  --edit '/etc/sysconfig/keyboard: s/^KEYTABLE=.*/KEYTABLE="uk"/'

قالب این فایل در بسیاری از منابع آنلاین مستند شده است.

چینش صفحه‌کلید در توزیع‌های برپایه Debian

برای توزیع‌های مشتق‌شده از Debian که از /etc/default/keyboard استفاده می‌کنند، با استفاده از گزینه‌های --upload، --write یا --edit فایل صفحه‌کلید را بارگذاری کرده یا ویرایش نمایید. برای مثال:

virt-builder debian-8 \
  --edit '/etc/default/keyboard: s/^XKBLAYOUT=.*/XKBLAYOUT="gb"/'

به https://wiki.debian.org/Keyboard مراجعه کنید.

بیشتر توزیع‌های لینوکس از تنظیمات محلی (locale) متعددی پشتیبانی می‌کنند تا بتوانید پیام‌های سیستم‌عامل مهمان را به زبان دیگری مانند روسی چاپ کنید.

با این حال هیچ تنظیم یکتایی وجود ندارد که این مورد را کنترل کند، زیرا ممکن است برای پشتیبانی از قلم‌های کنسول و X، و روش‌های ورودی صفحه‌کلید، بسته‌های بیشتری نیاز به نصب داشته باشند. بسته‌های مورد نیاز و پیکربندی آن‌ها به شدت وابسته به توزیع است، و انجام این کار خارج از محدوده virt-builder است.

این بخش شامل مثال‌هایی برای برخی از توزیع‌های رایج لینوکس است.

تنظیم زبان ژاپنی در Fedora 41

virt-builder fedora-41 \
  --size 20G \
  --update \
  --install @japanese-support \
  --install @xfce \
  --install xorg-x11-server-Xorg,xorg-x11-drivers,rsyslog \
  --link /usr/lib/systemd/system/graphical.target:/etc/systemd/system/default.target \
  --firstboot-command 'localectl set-locale LANG=ja_JP.utf8' \
  --firstboot-command 'localectl set-keymap jp' \
  --firstboot-command 'systemctl isolate graphical.target'

تنظیم زبان ژاپنی در Debian 8 (Jessie)

توجه داشته باشید اگرچه این کار ژاپنی را در کنسول متنی نیز فعال می‌کند، بعید است که ژاپنی را در آن‌جا به شکل صحیح نمایش‌داده‌شده ببینید. با این حال زبان ژاپنی در برنامه‌ها و پایانه‌های X به درستی نمایش داده می‌شود.

pkgs=locales,xfce4,\
ibus,ibus-anthy,\
fonts-ipafont-gothic,fonts-ipafont-mincho,\
fonts-takao-mincho,\
xfonts-intl-japanese,xfonts-intl-japanese-big,\
iceweasel-l10n-ja,manpages-ja

virt-builder debian-8 \
  --size 20G \
  --install $pkgs \
  --edit '/etc/locale.gen: s,^#\s*ja,ja,' \
  --write '/etc/default/locale:LANG="ja_JP.UTF-8"' \
  --run-command "locale-gen"

اسکریپت‌ها و نصب بسته‌هایی که در زمان ساخت اجرا می‌شوند (--run، --run-command، --install، --update، اما نه در firstboot) در یکی از مکان‌های زیر ثبت می‌شوند:

/tmp/builder.log
در مهمان‌های لینوکس، BSD و سایر سیستم‌های غیر ویندوزی.
در مهمان‌های Windows و DOS.
/builder.log
اگر /tmp یا C:\Temp وجود نداشته باشد.

اگر نمی‌خواهید فایل گزارش در تصویر نهایی باقی بماند، از گزینه خط فرمان --no-logfile استفاده کنید.

گزینه --ssh-inject برای تزریق کلیدهای ssh برای کاربران در سیستم مهمان استفاده می‌شود تا بتوانند بدون ارائه گذرواژه وارد شوند.

بخش "SELECTOR" از مقدار گزینه اختیاری است؛ در این صورت، --ssh-inject "USER" به این معنی است که ما دایرکتوری ~/.ssh کاربر فعلی را برای یافتن فایل شناسه عمومی پیش‌فرض بررسی می‌کنیم. آن کلید بارگذاری می‌شود. «شناسه عمومی پیش‌فرض» همان فایل default_ID_file توصیف‌شده در ssh-copy-id(1) است.

در صورت مشخص شدن، "SELECTOR" می‌تواند در یکی از قالب‌های زیر باشد:

کلید ssh را از FILENAME می‌خواند. FILENAME معمولاً یک فایل .pub است.
از "KEY_STRING" مشخص‌شده استفاده می‌کند. "KEY_STRING" معمولاً یک رشته عمومی مانند ssh-rsa AAAA.... user@localhost است.

در هر صورت، دایرکتوری ~USER/.ssh و فایل ~USER/.ssh/authorized_keys در صورت عدم وجود ایجاد خواهند شد..SS "فرآیند نصب (INSTALLATION PROCESS)" هنگامی که virt-builder را فراخوانی می‌کنید، فرآیند نصب به شرح زیر پیش می‌رود:

  • تصویر الگو بارگیری می‌شود.

    اگر تصویر الگو در حافظهٔ نهان (کَش) موجود باشد، نسخهٔ ذخیره‌شده در حافظهٔ نهان به‌جای آن استفاده می‌شود. (بخش «حافظهٔ نهان (CACHING)» را ببینید).

  • امضای الگو بررسی می‌شود.
  • الگو درون یک فایل tmp از حالت فشرده خارج می‌شود.
  • اندازهٔ تصویر الگو با استفاده از virt-resize(1) در مقصد تغییر می‌یابد.
  • دیسک‌های اضافی متصل می‌شوند (--attach).
  • یک بذر تصادفی (random seed) جدید برای ماشین مهمان تولید می‌شود.
  • شخصی‌سازی ماشین مهمان، به ترتیبی که در خط فرمان مشخص شده است انجام می‌گیرد.
  • برچسب‌گذاری مجدد SELinux انجام می‌شود، مگر آنکه با --no-selinux-relabel غیرفعال شده باشد.

وارد کردن به libvirt

تصویر دیسک را با استفاده از گزینهٔ --import در virt-install(1) به libvirt وارد کنید.

virt-install --import \
  --name guest --ram 2048 \
  --disk path=disk.img,format=raw --os-variant fedora27

نکات:

1.
شما باید قالب درست را مشخص کنید. قالب برابر با "raw" است مگر اینکه از گزینهٔ --format در virt-builder استفاده کرده باشید.
2.
استفاده از --os-variant به‌شدت توصیه می‌شود، زیرا دستگاه‌های بهینه‌ای را ارائه می‌دهد تا ماشین مهمان با بالاترین کارایی اجرا شود. برای دریافت فهرستی از همهٔ گونه‌ها، دستور زیر را اجرا کنید:
osinfo-query os

ابزار بالا توسط بستهٔ libosinfo ارائه می‌شود.

3.
می‌توانید virt-install را با دسترسی ریشه (root) یا غیرریشه اجرا کنید. هر یک کمی متفاوت عمل می‌کنند چرا که libvirt برای هر کاربر مجموعهٔ متفاوتی از ماشین‌های مجازی را مدیریت می‌کند. به‌ویژه virt-manager معمولاً ماشین‌های مجازی متعلق به کاربر ریشه را نمایش می‌دهد، در حالی که Boxes ماشین‌های مجازی متعلق به کاربر را نشان می‌دهد و سایر ابزارها نیز احتمالاً متفاوت عمل می‌کنند.

وارد کردن به OpenStack

تصویر را با انجام دستور زیر به Glance (مخزن تصاویر OpenStack) وارد کنید:

glance image-create --name fedora-41-image --file fedora-41.img \
  --disk-format raw --container-format bare \
  --is-public True

پارامتر --file همان تصویر دیسک ایجادشده توسط virt-builder است. این مقدار باید با گزینهٔ --output در virt-builder مطابقت داشته باشد. پارامتر --disk-format باید با گزینهٔ --format در virt-builder (یا اگر از آن گزینه استفاده نکرده‌اید، با "raw") همخوانی داشته باشد. پارامتر --container-format همیشه باید برابر با "bare" باشد، زیرا virt-builder تصاویر را در کانتینرها قرار نمی‌دهد.

می‌توانید از دستور "glance image-show fedora-41-image" برای نمایش مشخصات تصویر استفاده کنید.

برای راه‌اندازی یک نمونه (instance) از تصویر خود روی یک گره محاسباتی Nova، دستور زیر را اجرا کنید:

nova boot fedora-41-server --image fedora-41-image \
  --flavor m1.medium

از دستور "nova flavor-list" برای مشاهدهٔ فهرست اندازه‌های ممکن ماشین (machine flavors) استفاده کنید. برای فهرست کردن نمونه‌های در حال اجرا، از "nova list" استفاده کنید.

راه‌اندازی مستقیم با استفاده از qemu یا KVM

خط فرمان qemu چندان پایدار نبوده و استفاده از آن ساده نیست، از این رو در صورت امکان باید از libvirt استفاده شود. با این حال، می‌توان از یک خط فرمان شبیه به دستور زیر برای راه‌اندازی ماشین مجازی استفاده کرد:

qemu-system-x86_64 \
  -machine accel=kvm:tcg \
  -cpu max \
  -m 2048 \
  -drive file=disk.img,format=raw,if=virtio

همانند libvirt، بسیار مهم است که قالب درست انتخاب شود. این قالب برابر با "raw" خواهد بود مگر اینکه از گزینهٔ --format استفاده شده باشد.

Puppet

برای فعال‌سازی عامل Puppet (Puppet agent) در یک ماشین مهمان، بسته را نصب کنید، پیکربندی را به سمت Puppetmaster خود تنظیم نمایید و اطمینان حاصل کنید که عامل در هنگام بالا آمدن سیستم (boot) اجرا می‌شود.

یک دستور متداول virt-builder به این صورت خواهد بود:

virt-builder fedora-41 \
  --hostname client.example.com \
  --update \
  --install puppet \
  --append-line '/etc/puppet/puppet.conf:[agent]' \
  --append-line '/etc/puppet/puppet.conf:server = puppetmaster.example.com/' \
  --run-command 'systemctl enable puppet'

دستورالعمل‌های دقیق بر اساس توزیع لینوکس متفاوت است. برای اطلاعات بیشتر ببینید: https://docs.puppet.com/puppet/latest/install_pre.html.SS "اشکال‌زدایی ساخت‌ها (DEBUGGING BUILDS)" اگر خود virt-builder با شکست مواجه شد، اشکال‌زدایی (-v) را فعال کرده و یک باگ گزارش دهید (بخش «گزارش باگ‌ها (BUGS)» در زیر را ببینید).

اگر virt-builder به این دلیل با شکست مواجه شد که اسکریپت یا بسته‌ای که نصب می‌کند با خطا روبرو شده است، از --no-delete-on-failure برای نگه‌داشتن فایل خروجی استفاده کنید و به خواندن این بخش ادامه دهید.

اگر virt-builder با موفقیت به پایان رسید اما ایمیج کار نمی‌کند، موارد زیر را بررسی کنید:

استفاده از virt-rescue
دستور virt-rescue(1) را روی ایمیج دیسک اجرا کنید:
virt-rescue -a disk.img

این دستور یک پوسته نجات (rescue shell) در اختیارتان می‌گذارد. می‌توانید سیستم‌فایل‌های ایمیج دیسک را روی /sysroot سوار (mount) کرده و با استفاده از دستورهای معمول لینوکس آن‌ها را بررسی کنید. همچنین می‌توانید با chroot به درون مهمان بوت‌لودر را مجدداً نصب کنید. صفحه راهنمای virt-rescue اطلاعات و مثال‌های بسیار بیشتری دارد.

استفاده از guestfish
دستور guestfish(1) را روی ایمیج دیسک اجرا کنید:
guestfish -a disk.img -i

از دستورهای guestfish مانند "ll /directory" و "cat /file" برای بررسی دایرکتوری‌ها و فایل‌ها استفاده کنید.

استفاده از guestmount
ایمیج دیسک را با استفاده از FUSE و guestmount(1) به‌صورت امن روی میزبان سوار کنید:
mkdir /tmp/mp
guestmount -a disk.img -i /tmp/mp
cd /tmp/mp

برای پیاده کردن (unmount) ایمیج دیسک دستور زیر را اجرا کنید:

fusermount -u /tmp/mp
افزودن کنسول سریال
اگر سیستم مهمان هنگام بوت متوقف شد، افزودن یک کنسول سریال به مهمان و هدایت پیام‌های کرنل به کنسول سریال می‌تواند مفید باشد. افزودن کنسول سریال مستلزم بررسی مستندات ناظر مجازی‌سازی (hypervisor) شما است. برای هدایت پیام‌های کرنل به کنسول سریال، عبارت زیر را به خط فرمان کرنل بیفزایید:
console=tty0 console=ttyS0,115200

دستور virt-builder منابع موجود را از فایل‌های پیکربندی با پسوند .conf که در مسیرهای زیر قرار دارند می‌خواند:

  • $XDG_CONFIG_HOME/virt-builder/repos.d/ (در صورت عدم تنظیم، مقدار $XDG_CONFIG_HOME برابر با $HOME/.config است).
  • $VIRT_BUILDER_DIRS/virt-builder/repos.d/ (که در آن $VIRT_BUILDER_DIRS به معنای هر یک از دایرکتوری‌های مشخص‌شده در آن متغیر محیطی است، یا در صورت تنظیم نشدن، فقط /etc).

هر فایل .conf در این مسیرها دارای قالب متنی ساده‌ای شبیه زیر است:

[libguestfs.org]
uri=http://libguestfs.org/download/builder/index.asc
gpgkey=file:///etc/xdg/virt-builder/repos.d/libguestfs.gpg

بخش داخل براکت‌ها شناسه مخزن است که به‌عنوان شناسه یکتا به‌کار می‌رود.

فیلدهای زیر می‌توانند وجود داشته باشند:

"uri=URI"
نشانی URI فایل ایندکس که این مخزن به آن ارجاع می‌دهد.

این فیلد الزامی است.

"gpgkey=URI"
این فیلد اختیاری نشان‌دهنده نشانی URI کلید مورد استفاده برای امضای فایل ایندکس است (هرچند فقط URIهای file:// پذیرفته می‌شوند). اگر مشخص نشود، فایل ایندکس ارجاع‌داده‌شده توسط uri=.. بدون امضا در نظر گرفته می‌شود.
"proxy=MODE"
این فیلد اختیاری حالت پروکسی را هنگام دانلود فایل ایندکس این مخزن مشخص می‌کند. مقادیر ممکن عبارتند از:
هیچ پروکسی به هیچ وجه استفاده نمی‌شود، حتی با نادیده گرفتن پیکربندی سیستم.
پروکسی استفاده‌شده همان پروکسی سیستم خواهد بود.
پیکربندی پروکسیِ واقعی را برای استفاده مشخص می‌کند و پیکربندی سیستم را بازنویسی می‌نماید.

اگر مشخص نشود، مقدار مفروض رعایت تنظیمات پروکسی سیستم است (یعنی همانند زمانی که system مشخص شده باشد).

"format=FORMAT"
این فیلد اختیاری قالب مخزن را مشخص می‌کند. مقادیر ممکن عبارتند از:
قالب بومیِ مخزن "virt-builder". همچنین به «ساخت و امضای فایل ایندکس» در زیر مراجعه کنید.
نشانی URI نمایانگر ریشه یک درخت فراداده از Simple Streams v1.0 است.

برای اطلاعات بیشتر درباره Simple Streams، همچنین https://launchpad.net/simplestreams را ببینید.

اگر مشخص نشود، مقدار مفروض "native" است.

برای استفاده‌های حرفه‌ای از virt-builder، ممکن است بخواهید مخزن قالب‌های اختصاصی خود را بسازید.

مخزن Libguestfs.org

به‌طور پیش‌فرض، virt-builder فایل http://libguestfs.org/download/builder/index.asc را دانلود می‌کند که ایندکسی از قالب‌های موجود به‌همراه اطلاعاتی درباره هریک از آن‌ها است و در یک امضای دیجیتال گنجانده شده است. دستور "virt-builder --list" اطلاعات موجود در این فایل ایندکس را فهرست می‌کند.

قالب‌های میزبانی‌شده در libguestfs.org با استفاده از اسکریپت‌های شل، فایل‌های kickstart و فایل‌های preseed ساخته شده‌اند که در درخت سورس libguestfs در مسیر "builder/templates" یافت می‌شوند.

راه‌اندازی مخزن

می‌توانید سایت اختصاصی خود را شامل یک فایل ایندکس و چند قالب راه‌اندازی کنید، و سپس با ساخت یک فایل .conf که به آن اشاره می‌کند، virt-builder را به سمت آن هدایت نمایید.

توجه داشته باشید که اگر ایندکس شما امضا شده است، باید gpgkey=.. را به‌درستی در فایل .conf خود پر کنید و مطمئن شوید که فایل کلید GPG را نیز مستقر کرده‌اید.

virt-builder --source https://example.com/builder/index.asc \
   --fingerprint 'AAAA BBBB ...' \
   --list

می‌توانید این را روی هر وب‌سرور یا سرور FTP، یا روی یک سیستم‌فایل محلی یا شبکه‌ای میزبانی کنید.

راه‌اندازی کلید GPG

اگر کلید GnuPG ندارید، باید یکی راه‌اندازی کنید. (از نظر فنی این مورد اختیاری است، اما اگر فایل‌های ایندکس و قالب‌های شما امضا نشده باشند، کاربران virt-builder مجبور خواهند بود هر بار از پرچم --no-check-signature استفاده کنند.)

برای ساخت یک کلید، راهنمای GPG را در http://www.gnupg.org/gph/en/manual.html ببینید.

کلید عمومی GPG خود را صادر (export) کنید:

gpg --export -a "you@example.com" > pubkey

ساخت قالب‌ها

راه‌های متعددی برای ساخت قالب‌ها وجود دارد. به‌عنوان مثال می‌توانید از مهمان‌های موجود کلون بگیرید (به virt-sysprep(1) مراجعه کنید)، یا می‌توانید یک سیستم مهمان را به‌صورت دستی نصب کنید (virt-install(1)). برای مشاهده چگونگی ساخت قالب‌ها برای virt-builder، اسکریپت‌های موجود در "builder/templates" را بررسی کنید..PP ابزار Virt-builder از هر قالب تصویری (مانند raw، qcow2 و غیره) به عنوان قالب، هم به‌صورت دست‌نخورده (as-is) و هم فشرده‌شده با XZ پشتیبانی می‌کند. به این ترتیب، تصاویر موجود (برای نمونه پاک‌سازی‌شده با استفاده از virt-sysprep(1)) می‌توانند به عنوان قالب استفاده شوند.

برای دستیابی به بهترین نتیجه هنگام فشرده‌سازی قالب‌ها، از گزینه‌های xz زیر استفاده کنید (برای توضیحات بیشتر nbdkit-xz-plugin(1) را ببینید):

xz --best --block-size=16777216 disk

ایجاد و امضای فایل فهرست (index)

فایل فهرست ساختار متنی ساده‌ای دارد (در اینجا بدون امضای دیجیتال نمایش داده شده است):

[fedora-41]
name=Fedora® 41
osinfo=fedora41
arch=x86_64
file=fedora-41.xz
checksum[sha512]=...
format=raw
size=6442450944
compressed_size=148947524
expand=/dev/sda3

[fedora-42]
name=Fedora® 42
osinfo=fedora42
arch=x86_64
file=fedora-42.xz
checksum[sha512]=...
revision=3
format=raw
size=4294967296
compressed_size=172190964
expand=/dev/sda3

بخش درون کروشه‌ها همان "os-version" است، یعنی همان رشته‌ای که در خط فرمان virt-builder برای ساخت آن سیستم‌عامل به کار می‌رود.

توجه داشته باشید که نویسه‌های خط جدید (newline) در فایل فهرست اهمیت چندانی ندارند. خط‌های خالی بین بخش‌ها اختیاری بوده و صرفاً برای خوانایی بیشتر گنجانده شده‌اند. می‌توانید از هر تعداد خط خالی (یا هیچ) برای جداسازی بخش‌ها استفاده کنید.

ایجاد و امضای فایل فهرست را می‌توان با ابزار virt-builder-repository(1) آسان‌تر کرد.

پس از آماده‌سازی فایل "index" در قالب درست، با دستور زیر آن را به‌صورت clearsign امضا کنید:

gpg --clearsign --armor index

این کار فایل نهایی با نام index.asc را ایجاد می‌کند که می‌تواند در سرور بارگذاری شود (و همان نشانی uri=.. است). همان‌طور که در بالا اشاره شد، امضای فایل فهرست اختیاری است، اما توصیه می‌شود.

فیلدهای زیر می‌توانند وجود داشته باشند:

"name=NAME"
نام کاربرپسند این قالب. این نام در خروجی --list نمایش داده می‌شود، اما در غیر این صورت اهمیتی ندارد.
"osinfo=ID"
این فیلد اختیاری، سیستم‌عامل را به شناسه (ID) مرتبط در libosinfo نگاشت می‌کند. Virt-builder (هنوز) از آن استفاده نمی‌کند.
"arch=ARCH"
معماری سیستم‌عامل نصب‌شده در این قالب. این فیلد اجباری است.
"file=PATH"
مسیر (نسبت به فایل فهرست) قالب فشرده‌شده با xz.

توجه داشته باشید که مسیرهای مطلق یا URIها در اینجا مجاز نیستند. دلیل آن این است که virt-builder یک سیاست «منشأ یکسان» (same origin) برای قالب‌ها دارد تا نتوانند از سرورهای دیگری دریافت شوند.

"sig=PATH"
این گزینه منسوخ شده است. به جای آن از فیلد checksum استفاده کنید.

مسیر (نسبت به فایل فهرست) امضای مجزای (detached signature) متعلق به GPG برای فایل xz.

توجه داشته باشید که مسیرهای مطلق یا URIها در اینجا مجاز نیستند. دلیل آن این است که virt-builder یک سیاست «منشأ یکسان» (same origin) برای قالب‌ها دارد تا نتوانند از سرورهای دیگری دریافت شوند.

این فایل را می‌توان به صورت زیر ایجاد کرد:

gpg --detach-sign --armor -o disk.xz.sig disk.xz
"checksum[sha512]=7b882fe9b82eb0fef..."
مجموع مقابله‌ای (checksum) از نوع SHA-512 فایلی که در file=.. مشخص شده است پس از بارگیری بررسی می‌شود. برای محاسبه آن، دستور زیر را اجرا کنید:
sha512sum disk.xz

توجه داشته باشید اگر از این مورد استفاده کنید، نیازی به امضای فایل نخواهید داشت، یعنی از "sig" استفاده نکنید. این گزینه بر "sig" تقدم داشته و آن را بی‌اثر می‌کند.

"checksum=7b882fe9b82eb0fef..."
"checksum" یک نام مستعار برای "checksum[sha512]" است.

اگر نیاز به سازگاری با virt-builder = 1.24.0 دارید، باید از "checksum" استفاده کنید زیرا آن نسخه هنگام مواجهه با کروشه و اعداد در کلید یک فیلد، خطای تجزیه (parse error) می‌داد. این مشکل در virt-builder ≥ 1.24.1 برطرف شده است.

"revision=N"
شماره بازبینی (revision) یک عدد صحیح است که برای واپایش حافظه موقت (cache) قالب استفاده می‌شود. افزایش شماره بازبینی باعث می‌شود کلاینت‌ها حتی در صورتی که نسخه‌ای از قالب را در حافظه موقت خود داشته باشند، آن را مجدداً بارگیری کنند.

شماره بازبینی اختیاری است. در صورت حذف، مقدار پیش‌فرض آن 1 است.

"format=raw"
"format=qcow2"
قالب تصویر دیسک را مشخص کنید؛ در صورتی که فشرده شده باشد، این قالبِ قبل از فشرده‌سازی است. اگر ارائه نشود، قالب به‌طور خودکار تشخیص داده می‌شود، اما معمولاً بهتر است قالب مورد نظر به‌طور صریح بیان شود.

توجه داشته باشید که این قالبِ منبع است که با گزینه --format (قالب خروجی درخواستی) تفاوت دارد. Virt-builder تبدیل از قالب منبع به قالب خروجی درخواستی را در حین کار (on-the-fly) انجام می‌دهد.

"size=NNN"
اندازه مجازی تصویر بر حسب بایت. این اندازه تصویر در حالت غیرفشرده است. در صورت استفاده از قالبی غیر از raw مانند qcow2، این به معنای اندازه دیسک مجازی است، نه اندازه فایل qcow2.

این فیلد اجباری است.

همچنین Virt-builder از این مقدار به عنوان حداقل اندازه‌ای که کاربران می‌توانند از طریق گزینه --size درخواست کنند، یا در صورت نبود گزینه --size به عنوان اندازه پیش‌فرض استفاده می‌کند.

"compressed_size=NNN"
اندازه واقعی تصویر دیسک بر حسب بایت، یعنی آنچه در file=.. مشخص شده است. این مقدار صرفاً برای اطلاع‌رسانی استفاده می‌شود (هنگام استفاده از قالب‌های "long" و "json" در گزینه --list).
"expand=/dev/sdaX"
هنگام گسترش تصویر به اندازه نهایی آن، به virt-resize(1) دستور می‌دهد تا پارتیشن مشخص‌شده در تصویر مهمان را گسترش دهد تا تمام فضای موجود پر شود. این فیلد مانند گزینه --expand در virt-resize عمل می‌کند.

معمولاً باید نام دستگاه مربوط به فایل‌سیستم ریشه مهمان را در اینجا قرار دهید.

استفاده از این فیلد پیشنهاد می‌شود، اما الزامی نیست. اگر این فیلد نادیده گرفته شود، virt-resize یک پارتیشن اضافه در انتهای دیسک برای پوشش فضای خالی ایجاد می‌کند که روشی بسیار کمتر کاربرپسند است.

"lvexpand=/dev/VolGroup/LogVol"
هنگام گسترش تصویر به اندازه نهایی آن، به virt-resize(1) دستور می‌دهد تا حجم منطقی (LV) مشخص‌شده در تصویر مهمان را گسترش دهد تا تمام فضای موجود پر شود. این فیلد مانند گزینه --lv-expand در virt-resize عمل می‌کند.

اگر مهمان از LVM2 استفاده می‌کند، معمولاً باید LV فایل‌سیستم ریشه مهمان را در اینجا قرار دهید. اگر مهمان از LVM2 استفاده نمی‌کند یا فایل‌سیستم ریشه آن روی یک LV قرار ندارد، از این گزینه استفاده نکنید.

"notes=NOTES"
هرگونه یادداشتی که همراه با این تصویر باشد، به ویژه یادداشت‌هایی که شرح می‌دهند چه بسته‌هایی در تصویر موجود است، تصویر چگونه آماده شده است، و اطلاعات مجوز.

این اطلاعات در حالت‌های --notes و --list --long نمایش داده می‌شوند.

می‌توانید با دندانه‌دار کردن هر خط جدید با حداقل یک نویسه فاصله (حتی در خطوط خالی)، یادداشت‌های چندخطی بنویسید:

notes=This image was prepared using
 the following kickstart script:
                               <-- one space at beginning of line
 part /boot --fstype ext3
 ...
"hidden=true"
استفاده از پرچم hidden مانع از فهرست شدن قالب توسط گزینه --list می‌شود (اما همچنان قابل نصب است). از این مورد برای تصاویر آزمایشی استفاده می‌شود.
"aliases=ALIAS1 ALIAS2 ..."
این فیلد اختیاری فهرستی از نام‌های مستعار را برای تصویر مشخص می‌کند که با فاصله از هم جدا شده‌اند. برای نمونه، می‌توان از یک نام مستعار استفاده کرد تا همیشه به آخرین نسخه از یک تصویر مشخص اشاره داشته باشد و نسخه‌های قدیمی‌تر را به جای به‌روزرسانی همان تصویر، در فهرست در دسترس نگه دارد (فیلد "revision" را ببینید)..PP اجرای virt-builder روی چندین منبع

امکان استفاده از چندین منبع با virt-builder وجود دارد. روش توصیه‌شده، استقرار فایل‌های .conf است که به فایل‌های شاخص (index) اشاره می‌کنند. روش دیگر، مشخص کردن منابع با استفاده از چندین گزینه --source و/یا --fingerprint است:

virt-builder \
  --source http://example.com/s1/index.asc \
  --source http://example.com/s2/index.asc

می‌توانید N یا ۱ اثر انگشت (fingerprint) ارائه دهید. در حالتی که N اثر انگشت ارائه می‌دهید، N = تعداد منابع است و یک تناظر یک‌به‌یک (1-1) میان هر منبع و هر اثر انگشت برقرار خواهد بود:

virt-builder \
  --source http://example.com/s1/index.asc --fingerprint '0123 ...' \
  --source http://example.com/s2/index.asc --fingerprint '9876 ...'

در حالتی که ۱ اثر انگشت ارائه می‌دهید، همان اثر انگشت برای تمام منابع استفاده می‌شود.

شما "باید" حداقل ۱ اثر انگشت ارائه دهید.

مجوز قالب‌ها

باید از نحوه مجوزدهی (licensing) تصاویری که توزیع می‌کنید آگاه باشید. برای سیستم‌های‌مهمان متن‌باز، پیوندی به کد منبع در فیلد "notes" قرار دهید و سایر الزامات را رعایت کنید (مانند موارد مربوط به علائم تجاری).

مشخصات رسمی فایل شاخص

قالب فایل شاخص دارای مشخصات رسمی تعریف‌شده توسط اسکنر flex و تجزیه‌کننده bison است که برای تجزیه فایل استفاده می‌شوند. این موارد را می‌توان در فایل‌های زیر در درخت منبع libguestfs یافت:

builder/index-scan.l
builder/index-parse.y

ابزاری با نام virt-index-validate(1) برای اعتبارسنجی فایل شاخص جهت اطمینان از صحت آن در دسترس است.

توجه داشته باشید که تجزیه‌کننده و ابزار می‌توانند روی هر یک از فایل‌های شاخص امضاشده یا بدون امضا (یعنی index یا index.asc) کار کنند.

فایل شاخص همواره با کدگذاری UTF-8 ذخیره می‌شود.

ذخیره‌سازی موقت قالب‌ها

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

مکان حافظه موقت $XDG_CACHE_HOME/virt-builder/ یا $HOME/.cache/virt-builder است.

می‌توانید با اجرای دستور زیر، اطلاعات مربوط به دایرکتوری حافظه موقت، از جمله اینکه در حال حاضر کدام سیستم‌های‌مهمان ذخیره شده‌اند را چاپ کنید:

virt-builder --print-cache

در صورت تمایل به صرفه‌جویی در فضا، حافظه موقت را می‌توان با اجرای دستور زیر حذف کرد:

virt-builder --delete-cache

می‌توانید با اجرای دستور زیر، تمامی قالب‌های (فعلی) را در حافظه موقت محلی بارگیری کنید:

virt-builder --cache-all-templates

برای غیرفعال کردن حافظه موقت قالب‌ها، از --no-cache استفاده کنید.

تنها قالب‌ها در حافظه موقت ذخیره می‌شوند. فایل شاخص و امضاهای دیجیتال مجزا (detached signatures) ذخیره موقت نمی‌شوند.

ذخیره‌سازی موقت بسته‌ها

ابزار Virt-builder برای بارگیری فایل‌ها از curl(1) استفاده می‌کند و همچنین هنگام نصب بسته‌ها (--install، --update) از تنظیمات جاری "http_proxy" (و غیره) بهره می‌گیرد.

بنابراین ممکن است بخواهید آن متغیرهای محیطی را به‌منظور به حداکثر رساندن میزان ذخیره‌سازی موقت محلی تنظیم کنید. به بخش "متغیرهای محیطی (ENVIRONMENT VARIABLES)" و curl(1) مراجعه کنید.

آینه‌های محلی

برای افزایش سرعت و قابلیت اطمینان نصب بسته‌ها، می‌توانید یک آینه (mirror) محلی از توزیع هدف راه‌اندازی کنید و مدیر بسته‌ی سیستم‌مهمان را به آن هدایت نمایید.

استفاده از آینه محلی با Fedora

برای نصب یک سیستم‌مهمان Fedora با استفاده از یک آینه محلی:

virt-builder fedora-41 \
  --edit '/etc/yum.repos.d/fedora.repo:
      s{.*baseurl=.*}{baseurl=http://example.com/mirror/};
      s{.*metalink=.*}{};
  ' \
  --edit '/etc/yum.repos.d/fedora-updates.repo:
      s{.*baseurl=.*}{baseurl=http://example.com/mirror-updates/};
      s{.*metalink=.*}{};
  ' \
  --run-command 'dnf -y update' \
  --install 'pkg1,pkg2,...'

استفاده از آینه محلی با Debian

با فرض اینکه از "apt-proxy" برای آینه‌کردن مخزن استفاده می‌کنید، باید یک فایل sources.list جدید ایجاد کنید که به پروکسی شما اشاره کند (ببینید: https://help.ubuntu.com/community/AptProxy) و سپس اجرا کنید:

 virt-builder debian-8 \
   --upload sources.list:/etc/apt/sources.list \
   --run-command 'apt-get -y update' \
   --install 'pkg1,pkg2,...'
ابزار Virt-builder از GNU Privacy Guard (یا GnuPG یا gpg) استفاده می‌کند تا اطمینان یابد که نمایه (index) و قالب‌ها (templates) دستکاری نشده‌اند.
منبع به یک فایل نمایه اشاره دارد که به صورت اختیاری امضا شده است.
ابزار Virt-builder نمایه را بارگیری کرده و معتبر بودن امضا و مطابقت اثر انگشت (fingerprint) امضاکننده با اثر انگشت مشخص‌شده را بررسی می‌کند (یعنی به ترتیبی که در gpgkey=.. در فایل .conf، یا با گزینه --fingerprint مشخص شده است).
برای بررسی در برابر کلید عمومی/اثر انگشت توکار، لازم است کلید عمومی به دسته‌کلید (keyring) محلی gpg کاربر وارد (import) شود (این شیوه کارکرد معمول gpg است).
هنگامی که قالبی بارگیری می‌شود، امضای آن نیز به همین شیوه بررسی می‌گردد.
اگرچه امضاها اختیاری هستند، اما اگر آن‌ها را نداشته باشید، کاربران virt-builder باید گزینه --no-check-signature را در خط فرمان به کار ببرند. این کار مانع از آن می‌شود که یک مهاجم فایل نمایه امضاشده را با یک فایل بدون امضا جایگزین کرده و virt-builder بدون بررسی امضا و بی‌سر‌و‌صدا اجرا شود. در هر صورت، اکیداً توصیه می‌شود که همواره نمایه و قالب‌های امضاشده ایجاد کنید.

ابزار Virt-builder می‌تواند بدون در نظر گرفتن اینکه معماری میزبان چیست، یک مهمان برای هر معماری دلخواهی بسازد؛ به عنوان مثال ساخت یک مهمان x86-64 بر روی یک میزبان ARM.

با این حال، برخی گزینه‌ها ممکن است کار نکنند، به‌ویژه گزینه‌هایی که نیاز به اجرای دستورات در داخل مهمان در طول فرآیند ساخت دارند: --install، --update، --run و --run-command. ممکن است لازم باشد این گزینه‌ها را با معادل‌های زمان نخستین بوت (firstboot) آن‌ها جایگزین کنید.

ساخت مهمان‌های ۳۲ بیتی i686 روی میزبان x86-64 باید بدون هیچ مرحله خاصی به درستی کار کند.

ابزار Virt-builder نیازی به اجرا با دسترسی ریشه ندارد (در واقع، نباید با دسترسی ریشه اجرا شود) و از setuid، "sudo" یا هیچ سازوکار مشابه دیگری استفاده نمی‌کند.

گزینه‌های --install، --update، --run و --run-command با استفاده از یک ماشین مجازی کوچک (appliance) پیاده‌سازی شده‌اند، بنابراین این دستورات روی میزبان اجرا نمی‌شوند. اگر از باک‌اند libvirt در libguestfs استفاده می‌کنید و SELinux فعال باشد، ماشین مجازی علاوه بر این در یک کانتینر SELinux (به نام sVirt) کپسوله‌سازی می‌شود.

با این حال، این گزینه‌ها به شبکه میزبان دسترسی خواهند داشت و از آنجا که قالب ممکن است حاوی کدهای غیرقابل‌اعتماد باشد، کد ممکن است تلاش کند به منابع شبکه میزبان که مجاز نیست دسترسی یابد. می‌توانید از --no-network برای جلوگیری از این موضوع استفاده کنید.

دستورات firstboot هنگام بوت شدن مهمان در بستر آن اجرا می‌شوند، بنابراین امنیت هایپروایزر / بستر ابری شما باید در نظر گرفته شود.

ابزار Virt-builder یک دانه تصادفی (random seed) را به هر مهمانی که می‌سازد تزریق می‌کند. این کار به اطمینان از اینکه شماره‌های توالی TCP، شناسه‌های UUID، کلیدهای میزبان ssh و موارد مشابه در زمان بوت شدن مهمان واقعاً تصادفی هستند، کمک می‌کند.

شما باید امضاهای دیجیتال را بررسی کنید و هیچ‌یک از خطاهای مربوط به امضا را نادیده نگیرید.

اگر می‌خواهید چندین مهمان جدید از یک نوع ایجاد کنید، ممکن است وسوسه‌انگیز باشد که virt-builder را یک‌بار اجرا کرده و سپس فایل خروجی را کپی کنید. شما نباید این کار را انجام دهید. باید virt-builder را برای هر مهمان جدیدی که نیاز دارید، یک‌بار اجرا کنید.

دلیل این است که هر همزاد باید (حداقل) یک دانه تصادفی (random seed) مجزا داشته باشد و احتمالاً در نسخه‌های آینده virt-builder ویژگی‌های یکتای دیگری (مانند UUIDهای سیستم‌فایل) نیز اضافه خواهد شد.

کار دیگری که نباید انجام دهید این است که مهمان را بوت کرده و سپس از تصویر دیسک بوت‌شده کپی بگیرید. دلیل این امر آن است که برخی مهمان‌ها در نخستین بوت، شناسه‌های یکتای ماشین (machine ID)، کلیدهای میزبان SSH و مواردی از این دست ایجاد می‌کنند و شما نمی‌خواهید نسخه‌های شبیه‌سازی‌شده هویت‌های تکراری داشته باشند.

همچنین ببینید: virt-sysprep(1).

مهم‌ترین عامل در دستیابی به عملکرد خوب، حافظه موقت (caching) است. در نخستین باری که قالب‌ها استفاده می‌شوند، یا اگر از گزینه --cache-all-templates استفاده کنید، قالب‌ها در کَش بارگیری می‌شوند. برای اطلاعات بیشتر به بخش "CACHING" در بالا مراجعه کنید.

بسته‌های مورد نیاز برای گزینه‌های --install و --update با استفاده از اتصال شبکه میزبان بارگیری می‌شوند. تنظیم متغیرهای محیطی "http_proxy"، "https_proxy" و "ftp_proxy" برای اشاره به یک وب‌کَش محلی، می‌تواند این اطمینان را ایجاد کند که بسته‌ها تنها یک‌بار بارگیری می‌شوند. همچنین می‌توانید از یک مخزن بسته محلی استفاده کنید، هرچند که راه‌اندازی آن می‌تواند پیچیده باشد و بسته به توزیع لینوکسی که قصد نصب آن را دارید، متفاوت است.

استفاده از --no-sync

از --no-sync استفاده کنید. با این حال هشدارهای بخش "گزینه‌ها (OPTIONS)" در بالا را بخوانید، زیرا این کار در صورت استفاده نادرست می‌تواند باعث خرابی دیسک شود.

صرف‌نظر کردن از virt-resize

ابزار Virt-builder می‌تواند تحت شرایط خاصی از مرحله virt-resize صرف‌نظر کند. این کار virt-builder را بسیار سریع‌تر می‌کند. این شرایط عبارتند از:

  • خروجی باید یک فایل معمولی باشد (نه یک دستگاه بلوکی)، و
  • کاربر از گزینه --size استفاده نکرده باشد، و
  • قالب خروجی دقیقاً همان قالب تمپلیت (معمولاً raw) باشد.

pxzcat

اگر liblzma در زمان ساخت پیدا شده باشد، Virt-builder از یک پیاده‌سازی داخلی pxzcat (نسخه موازی xzcat) استفاده می‌کند. در صورتی که liblzma در زمان ساخت یافت نشود، "xzcat" معمولی به کار گرفته می‌شود که تک‌رشته‌ای است.

مهمان‌هایی که از SELinux استفاده می‌کنند (مانند Fedora و Red Hat Enterprise Linux) نیازمند آن هستند که هر فایل برچسب (label) صحیح SELinux را داشته باشد.

ابزار Virt-builder روش برچسب‌گذاری فایل‌های جدید را نمی‌داند، بنابراین دو راهبرد ممکن وجود دارد که می‌تواند برای اطمینان از برچسب‌گذاری صحیح به کار گیرد:

برچسب‌گذاری مجدد خودکار
این روش setfiles(8) را دقیقاً پیش از نهایی‌سازی مهمان اجرا می‌کند که برچسب‌های SELinux را به درستی در تصویر دیسک تنظیم می‌نماید.

این روش توصیه‌شده است.

استفاده از --no-selinux-relabel --touch /.autorelabel
قالب‌های مهمان ممکن است از قبل حاوی فایلی به نام /.autorelabel باشند یا شما می‌توانید آن را ایجاد کنید (touch).

برای مهمان‌هایی که از SELinux استفاده می‌کنند، این کار موجب اجرای restorecon(8) در نخستین بوت می‌شود. مهمان‌ها نخستین باری که از آن‌ها استفاده می‌کنید یک‌بار به طور خودکار راه‌اندازی مجدد خواهند شد که طبیعی و بی‌خطر است..SS "گزینه‌های منسوخ‌شده (DEPRECATED OPTIONS)" در نسخهٔ 1.56 گزینه‌های subscription-manager حذف شدند.

از --run='subscription-manager register --username=USER --password=PASS' استفاده کنید
از --run='subscription-manager unregister' استفاده کنید
از --run='subscription-manager attach ...' استفاده کنید
از --run='subscription-manager remove --all' استفاده کنید

گزینهٔ --machine-readable می‌تواند برای سازگارتر کردن خروجی با ماشین استفاده شود که هنگام فراخوانی virt-builder از سایر برنامه‌ها، رابط‌های کاربری گرافیکی (GUI) و غیره مفید است.

از این گزینه به تنهایی برای پرس‌وجوی قابلیت‌های فایل اجرایی virt-builder استفاده کنید. یک خروجی معمولی به این صورت است:

$ virt-builder --machine-readable
virt-builder
arch
config-file
customize
json-list
pxzcat

فهرستی از قابلیت‌ها، هر کدام در یک سطر چاپ می‌شود و برنامه با وضعیت 0 خارج می‌شود.

تعیین یک رشتهٔ قالب‌بندی برای کنترل خروجی امکان‌پذیر است؛ بخش "ADVANCED MACHINE READABLE OUTPUT" را در guestfs(3) ببینید.

برای سایر متغیرهای محیطی که بر تمام برنامه‌های libguestfs تأثیر می‌گذارند، بخش "ENVIRONMENT VARIABLES" را در guestfs(3) ببینید.

"http_proxy"
"https_proxy"
"no_proxy"
پروکسی را برای دانلودها تنظیم می‌کنند. این متغیرهای محیطی (و موارد دیگر) در واقع توسط curl(1) تفسیر می‌شوند، نه virt-builder.
"HOME"
برای تعیین مکان حافظهٔ پنهان الگوها و مکان منابع کاربر استفاده می‌شود. بخش‌های "CACHING" و "SOURCES OF TEMPLATES" را ببینید.
"VIRT_TOOLS_DATA_DIR"
می‌تواند به دایرکتوری حاوی فایل‌های دادهٔ مورد استفاده برای نصب راه‌اندازی نخستین (firstboot) ویندوز اشاره کند.

به‌طور معمول نیازی به تنظیم این متغیر ندارید. در صورت عدم تنظیم، مقدار پیش‌فرض کامپایل‌شده درون برنامه استفاده خواهد شد (چیزی شبیه به /usr/share/virt-tools).

این دایرکتوری ممکن است شامل فایل‌های زیر باشد:

این فایل اجرایی ویندوزی RHSrvAny است که برای نصب اسکریپت "firstboot" در سیستم‌های مهمان ویندوز به کار می‌رود. اگر قصد دارید از گزینه‌های --firstboot یا --firstboot-command برای مهمان‌های ویندوز استفاده کنید، وجود آن الزامی است.

همچنین ببینید: "https://github.com/rwmjones/rhsrvany"

این یک فایل اجرایی ویندوز ارائه‌شده همراه با SUSE VMDP است که برای نصب اسکریپت "firstboot" در سیستم‌های مهمان ویندوز استفاده می‌شود. اگر قصد دارید از گزینه‌های --firstboot یا --firstboot-command برای مهمان‌های ویندوز استفاده کنید، وجود آن الزامی است.
"XDG_CACHE_HOME"
برای تعیین مکان حافظهٔ پنهان الگوها استفاده می‌شود. بخش "CACHING" را ببینید.
"XDG_CONFIG_HOME"
برای تعیین مکان منابع کاربر استفاده می‌شود. بخش "SOURCES OF TEMPLATES" را ببینید.
"VIRT_BUILDER_DIRS"
برای تعیین مکان منابع سیستم استفاده می‌شود. بخش "SOURCES OF TEMPLATES" را ببینید.

این برنامه در صورت موفقیت مقدار 0 و در صورت بروز خطا مقداری غیر صفر را برمی‌گرداند.

guestfs(3), guestfish(1), guestmount(1), virt-builder-repository(1), virt-copy-out(1), virt-customize(1), virt-get-kernel(1), virt-install(1), virt-rescue(1), virt-resize(1), virt-sysprep(1), oz-install(1), gpg(1), gpg2(1), curl(1), virt-make-fs(1), genisoimage(1), http://libguestfs.org..SH "نویسندگان (AUTHORS)" Richard W.M. Jones http://people.redhat.com/~rjones

حق نشر 2013 Red Hat Inc.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation) منتشر شده است، بازتوزیع کرده و/یا تغییر دهید؛ چه نسخهٔ ۲ مجوز یا (به انتخاب خودتان) هر نسخهٔ متأخرتر دیگری.

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

شما باید به همراه این برنامه نسخه‌ای از «مجوز عمومی همگانی گنو» را دریافت کرده باشید؛ در غیر این صورت به 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-11 guestfs-tools-1.56.0