SUPERMIN(1) Virtualization Support SUPERMIN(1)

supermin - ابزاری برای ایجاد و ساخت اپلاینس‌های supermin

supermin --prepare -o OUTPUTDIR PACKAGE [PACKAGE ...]
supermin --build -o OUTPUTDIR -f chroot|ext2 INPUT [INPUT ...]

 supermin --prepare bash util-linux -o /tmp/supermin.d

 cat > init <<EOF
 #!/bin/sh
 mount -t proc /proc /proc
 mount -t sysfs /sys /sys
 echo Welcome to supermin
 bash -i
 EOF

 chmod +x init
 tar zcf /tmp/supermin.d/init.tar.gz ./init

 supermin --build /tmp/supermin.d -f ext2 -o /tmp/appliance.d

 qemu-kvm -nodefaults -nographic \
          -kernel /tmp/appliance.d/kernel \
          -initrd /tmp/appliance.d/initrd \
          -hda /tmp/appliance.d/root \
          -serial stdio -append "console=ttyS0 root=/dev/sda"
 ...
 Welcome to supermin
 bash-4.3#
ابزار supermin برای ساخت اپلاینس‌های supermin است. این‌ها اپلاینس‌هایی بسیار کوچک (مشابه ماشین‌های مجازی) هستند که معمولاً حجمی حدود ۱۰۰ کیلوبایت دارند و در کسری از ثانیه به‌صورت در لحظه (on-the-fly) هنگامی که نیاز به بوت کردن یکی از آن‌ها داشته باشید، کاملاً نمونه‌سازی و راه‌اندازی می‌شوند.
این برنامه پیش‌تر febootstrap نامیده می‌شد. این صفحهٔ راهنما مستندات supermin 5.x را ارائه می‌دهد که یک بازنویسی کامل بوده و تفاوت زیادی با febootstrap 2.x دارد. اگر به دنبال ابزارهای febootstrap 2.x هستید، این مستند جای مناسبی برای آن نیست.

ابزار supermin می‌تواند در دو حالت استفاده شود: آماده‌سازی (preparing) یک اپلاینس کوچک supermin، که بر روی سیستم ساخت (build system) انجام می‌شود؛ و ساخت (building)، که اپلاینس supermin را گرفته و یک اپلاینس کامل و قابل بوت می‌سازد، که بر روی سیستم کاربر نهایی انجام می‌پذیرد.

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

حالت آماده‌سازی (PREPARE MODE)

گزینهٔ --prepare اپلاینس کوچک supermin را در دایرکتوری خروجی داده‌شده ایجاد می‌کند. شما فهرستی از بسته‌هایی را که می‌خواهید نصب شوند مشخص می‌کنید و supermin به‌طور خودکار وابستگی‌های آن‌ها را پیدا خواهد کرد. فهرست بسته‌ها باید بر روی ماشین میزبان نصب شده باشد.

برای مثال:

supermin --prepare bash coreutils -o supermin.d

یک اپلاینس supermin حاوی بسته‌های "bash" و "coreutils" می‌سازد. به‌طور دقیق‌تر، این دستور فایل‌هایی در دایرکتوری supermin.d ایجاد می‌کند. این دایرکتوری همان اپلاینس supermin است. (بخش «SUPERMIN APPLIANCES» در زیر را ببینید).

هدف این است که مرحلهٔ --prepare روی یک سیستم ساخت مرکزی انجام گیرد و اپلاینس supermin بین کاربران نهایی توزیع شود (که به دلیل اندازهٔ بسیار کوچک اپلاینس‌های supermin، کاری بسیار آسان است).

حالت ساخت (BUILD MODE)

گزینهٔ --build (که قبلاً برنامه‌ای جداگانه به نام "supermin-helper" بود) اپلاینس کامل را از روی اپلاینس supermin می‌سازد:

supermin --build --format ext2 supermin.d -o appliance.d

این دستور فایل‌هایی با نام‌های appliance.d/kernel، appliance.d/root و غیره ایجاد می‌کند که همان اپلاینس کامل و قابل بوت است.

هدف این است که مرحلهٔ --build روی ماشین کاربر نهایی در آخرین لحظه پیش از نیاز به اپلاینس انجام شود. بسته‌های موجود در اپلاینس supermin (آن‌هایی که هنگام آماده‌سازی اپلاینس مشخص شده‌اند) باید بر روی ماشین کاربر نهایی نصب باشند.

ساخت و حافظهٔ موقت (Build and cache)

معمولاً می‌خواهید بازسازی اپلاینس روی ماشین کاربر نهایی تنها در صورت نیاز انجام شود. Supermin گزینه‌های اضافی برای آسان‌تر کردن این روند فراهم کرده است:

supermin --build \
  --if-newer --lock /run/user/`id -u`/supermin.lock \
  --format ext2 supermin.d -o appliance.d

اگر چندین برنامه این دستور را به‌طور موازی اجرا کنند، نمونه‌ها روی فایل قفل (lock file) منتظر خواهند ماند. اپلاینس کامل تنها در صورتی بازسازی می‌شود که وجود نداشته باشد یا قدیمی‌تر از فایل‌های ورودی و پایگاه‌دادهٔ بسته‌های میزبان باشد.

توجه داشته باشید که فایل قفل نباید درون دایرکتوری خروجی -o ذخیره شود.

بسته‌ها (PACKAGES)

منظور از «بسته» همان بستهٔ RPM، دبیان (و غیره) است، مانند "coreutils"، "perl".

در تمامی موارد، supermin تنها می‌تواند یک اپلاینس supermin بسازد که از نظر توزیع، نسخه و معماری دقیقاً با میزبان یکسان باشد. این ابزار ساخت میان‌سکویی (cross-build) انجام نمی‌دهد..SH "گزینه‌ها (OPTIONS)"

نمایش راهنمای مختصر نحوه استفاده در خط فرمان، و خروج.
ساخت اپلاینس کامل از اپلاینس supermin. این کار در گذشته برنامه‌ای مجزا با نام "supermin-helper" بود.
(تنها در حالت --build)

رونوشت‌برداری از هسته (و درخت دستگاه یا device tree در صورت ایجاد) به جای پیوند نمادین به هسته در /boot.

این کار کمی کُندتر است، اما در صورتی که بخواهید مجوزها یا برچسب SELinux را روی هسته یا درخت دستگاه تغییر دهید، ضروری است.

(تنها در حالت --build)

قالب خروجی را برای اپلاینس کامل انتخاب می‌کند.

هیچ پیش‌فرضی وجود ندارد. هنگام استفاده از --build باید گزینهٔ --format را مشخص کنید.

قالب‌های ممکن عبارتند از:

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

درخت سیستم‌فایل در OUTPUTDIR (یعنی گزینهٔ -o) نوشته می‌شود.

این حالت "chroot" نامیده می‌شود زیرا بعداً می‌توانید دقیقاً با دستور chroot(1) وارد این دایرکتوری شوید، هرچند استفاده از یک فناوری کانتینر (مانند LXC و غیره) ایدهٔ بهتری است.

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

یک تصویر دیسک با سیستم‌فایل ext2.

هستهٔ خروجی در OUTPUTDIR/kernel، یک initramfs کوچک که می‌تواند اپلاینس را سوار (mount) کند در OUTPUTDIR/initrd، و تصویر سیستم‌فایل ext2 در OUTPUTDIR/root نوشته می‌شود (که در آن OUTPUTDIR توسط گزینهٔ -o مشخص می‌گردد).

سیستم‌فایل (OUTPUTDIR/root) دارای اندازهٔ پیش‌فرض ۴ گیگابایت است (همچنین گزینهٔ --size را ببینید).

(تنها در حالت --build)

پردازندهٔ میزبان را مشخص می‌کند (مانند "i686"، "x86_64"). این مقدار به عنوان تطبیق زیررشته هنگام جستجو برای هسته‌های سازگار استفاده می‌شود. اگر مشخص نشود، پیش‌فرض آن پردازندهٔ میزبانی است که supermin روی آن کامپایل شده است.

(تنها در حالت --build)

دایرکتوری خروجی بررسی شده و بازسازی نمی‌شود مگر این که واقعاً نیاز باشد.

این کار با بررسی تاریخ‌های پایگاه‌دادهٔ بسته‌های میزبان (/var/lib/rpm و غیره)، فایل‌های ورودی supermin، و دایرکتوری خروجی انجام می‌شود. این عملیات تنها زمانی صورت می‌گیرد که پایگاه‌دادهٔ بسته‌های میزبان یا فایل‌های ورودی supermin از دایرکتوری خروجی جدیدتر باشند.

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

(تنها در حالت --build)

فایلی به نام /packagelist درون chroot یا سیستم‌فایل ext2 تولیدشده می‌افزاید که شامل فهرست مرتب‌شده‌ای از تمام بسته‌های استفاده‌شده برای ساخت اپلاینس است.

عمدتاً برای اشکال‌زدایی مفید است، چرا که یافتن این موضوع را آسان‌تر می‌کند که برای مثال کدام نسخه از یک بسته درون اپلاینس کپی شده است.

فهرست کردن درایورهای مدیر بسته که درون supermin کامپایل شده‌اند، و این که آیا مدیر بستهٔ مربوطه روی سیستم کنونی شناسایی شده است یا خیر.
(تنها در حالت --build)

اگر چندین اجرای موازی از supermin نیاز به ساخت یک اپلاینس کامل داشته باشند، می‌توانید از گزینهٔ --lock استفاده کنید تا مطمئن شوید با یکدیگر تداخل پیدا نکرده و کار هم را خراب نمی‌کنند.

فایل قفل برای ایجاد انحصار متقابل (mutual exclusion) به کار می‌رود تا در هر زمان تنها یک نمونه از supermin اجرا شود.

توجه داشته باشید که فایل قفل نباید درون دایرکتوری خروجی ذخیره شود.

انتخاب دایرکتوری خروجی.

هنگام استفاده از --prepare، این دایرکتوری همان جایی است که اپلاینس supermin در آن نوشته خواهد شد. هنگام استفاده از --build، این دایرکتوری جایی است که اپلاینس کامل، هسته و غیره در آن نوشته خواهند شد.

هرگونه محتویات قبلی در دایرکتوری خروجی حذف خواهد شد و یک دایرکتوری خروجی جدید ایجاد می‌شود.

دایرکتوری خروجی با ساخت یک دایرکتوری موقت با نامی مانند OUTPUTDIR.abc543، تغییر نام دایرکتوری خروجی قدیمی (در صورت وجود) و حذف آن، و سپس تغییر نام دایرکتوری موقت به OUTPUTDIR، به صورت (تقریباً) اتمیک ایجاد می‌شود. با ترکیب این گزینه با --lock می‌توانید اطمینان حاصل کنید که چندین اجرای موازی از supermin با یکدیگر تعارض پیدا نمی‌کنند.

(تنها در حالت --prepare)

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

برای ArchLinux، این گزینه فایل پیکربندی pacman (پیش‌فرض /etc/pacman.conf) را تنظیم می‌کند. به pacman.conf(5) رجوع کنید.

برای توزیع‌های مبتنی بر Yum/RPM، این گزینه فایل پیکربندی yum (پیش‌فرض /etc/yum.conf) را تنظیم می‌کند. به yum.conf(5) رجوع کنید.

آماده‌سازی اپلاینس supermin.
(تنها در حالت --prepare)

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

توجه داشته باشید که اگر فایل‌های محلی نسبت به نسخهٔ اولیه درون بسته تغییر کرده باشند، این کار می‌تواند باعث ایجاد اپلاینس‌های معیوب شود. این موضوع به‌ویژه برای فایل‌های پیکربندی یک مشکل به شمار می‌رود.

با این حال، این گزینه در برخی شرایط کنترل‌شده مفید است؛ برای نمونه هنگام استفاده از supermin درون یک chroot تازه نصب‌شده، یا زمانی که در طول فرآیند ساخت به شبکه دسترسی ندارید.

(تنها در حالت --build)

تعیین اندازهٔ سیستم‌فایل ext2 خروجی؛ اندازه را می‌توان با پسوندهای رایج مانند "32G" (۳۲ گیگابایت) و غیره مشخص کرد.

اگر اندازه مشخص نشود، اندازهٔ پیش‌فرض ۴ گیگابایت استفاده می‌شود.

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

فعال‌سازی پیام‌های مشروح.

می‌توانید این گزینه را چندین بار مشخص کنید تا پیام‌های بیشتری فعال شوند:

اشکال‌زدایی مراحل کلی.
اطلاعات تفصیلی درون هر مرحله..IP "-v -v -v" 4 حجم بسیار زیادی از اطلاعات اشکال‌زدایی (بسیار فراتر از حد نیاز برای استفادهٔ عادی، اما مناسب برای زمانی که در تلاش برای عیب‌یابی یک باگ در supermin هستید).
نام بسته و شمارهٔ نسخه را چاپ کرده و خارج می‌شود.

اپلاینس‌های supermin تنها شامل اطلاعات کافی برای ساخت اپلاینسی هستند که حاوی همان سیستم‌عامل (نسخهٔ لینوکس، توزیع، انتشار و غیره) سیستم‌عامل میزبان باشد. از آنجا که میزبان و اپلاینس فایل‌های مشترک بسیاری نظیر /bin/bash و /lib/libc.so دارند، دلیلی برای قرار دادن این فایل‌ها در خود اپلاینس وجود ندارد. این فایل‌ها می‌توانند به سادگی و بر حسب تقاضا هنگام راه‌اندازی اپلاینس از میزبان خوانده شوند. بنابراین برای صرفه‌جویی در فضا، تنها نام بسته‌های مورد نظر از میزبان را ذخیره کرده و آن‌ها را (به همراه وابستگی‌ها) در زمان ساخت کپی می‌کنیم.

برخی از فایل‌ها را نمی‌توان صرفاً به این روش از میزبان کپی کرد. این موارد شامل فایل‌های پیکربندی هستند که ممکن است مدیر سیستم میزبان آن‌ها را ویرایش کرده باشد. بنابراین در کنار فهرست فایل‌های میزبان، یک تصویر پایهٔ اسکلتی (skeleton base image) را نیز ذخیره می‌کنیم که شامل این فایل‌ها و ساختار کلی دایرکتوری‌ها است.

بنابراین یک اپلاینس supermin معمولاً دست‌کم از دو فایل کنترلی تشکیل می‌شود (packages و base.tar.gz).

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

این فایل به صورت متن ساده است، با یک نام بسته در هر سطر.

این فایل tar (که ممکن است فشرده شده باشد) حاوی اسکلت فایل‌سیستم است. این فایل عمدتاً شامل دایرکتوری‌ها و تعداد کمی فایل پیکربندی است.

تمام مسیرها در فایل tar باید نسبت به دایرکتوری ریشهٔ اپلاینس باشند.

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

مسیرها می‌توانند شامل نویسه‌های عام (wildcards) باشند که هنگام ایجاد اپلاینس بسط داده می‌شوند؛ به عنوان مثال:

/etc/yum.repos.d/*.repo

تمام فایل‌های *.repo را درون اپلاینس کپی می‌کند.

هر نام مسیر در فایل باید با نویسهٔ "/" آغاز شود.

خود supermin فایل‌های hostfiles را ایجاد نمی‌کند (اگرچه پیش از نسخهٔ 5، این سازوکار اصلیِ مورد استفاده برای ایجاد اپلاینس کامل بود). با این حال، اگر می‌خواهید فایل‌های متفرقه و بسته‌بندی‌نشده را در اپلاینس کامل کپی کنید، می‌توانید یک یا چند مورد از این فایل‌ها را درون دایرکتوری اپلاینس supermin قرار دهید.

فهرستی از نام فایل‌ها، نام دایرکتوری‌ها، یا الگوهای نویسه عامِ دارای پیشوند "-" که از اپلاینس نهایی مستثنی می‌شوند.

این رویکرد نسبتاً بی‌رحمانه است، چرا که صرفاً موارد را حذف می‌کند و احتمالاً باعث ناقص شدن بسته‌ها می‌شود. با این حال می‌تواند روشی مناسب برای به حداقل رساندن اندازهٔ اپلاینس نهایی باشد.

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

توجه داشته باشید که نام‌های بالا صرفاً پیشنهاد هستند. می‌توانید از هر نام دلخواهی استفاده کنید، زیرا supermin هنگام بازسازی اپلاینس، محتوای هر فایل را تشخیص می‌دهد. همچنین می‌توانید از هر نوع فایل، چندین مورد داشته باشید..SS "بازسازی اَپلاینس (RECONSTRUCTING THE APPLIANCE)" حالت مجزای "supermin --build" برای بازسازی یک اپلاینس از فایل‌های اپلاینس supermin استفاده می‌شود.

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

supermin.d/
supermin.d/base.tar.gz
supermin.d/extra.tar.gz
supermin.d/packages
supermin.d/zz-hostfiles

به این ترتیب می‌توان فایل‌های اضافی را تنها با ساخت یک فایل tar دیگر (در مثال بالا extra.tar.gz) و قرار دادن آن در دایرکتوری اضافه کرد، و فایل‌های میزبان اضافی را نیز افزود (در مثال بالا zz-hostfiles). وقتی اپلاینس ساخته شود، فایل‌های اضافی در آن نمایان خواهند شد.

ممکن است بخواهید برای صرفه‌جویی در زمان و فضا هنگام نمونه‌سازی، اپلاینس supermin را «کمینه» کنید. معمولاً ممکن است بخواهید مستندات، فایل‌های info، صفحات راهنما (man pages) و محلی‌سازی‌ها (locales) را حذف کنید.

می‌توانید این کار را با ساختن یک فایل excludefiles که فایل‌ها، دایرکتوری‌ها یا الگوهای عام (wildcards) ناخواسته را فهرست می‌کند، انجام دهید. این موارد هنگام ساخت اپلاینس کامل نادیده گرفته می‌شوند.

-/boot/*
-/lib/modules/*
-/usr/share/doc/*
-/usr/share/info/*
-/usr/share/man/*

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

معمولاً کرنل و ماژول‌های کرنل در اپلاینس supermin گنجانده نمی‌شوند.

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

استفاده از کرنل و ماژول‌های کرنل سفارشی (USING A CUSTOM KERNEL AND KERNEL MODULES)

برنامه supermin قادر است بهترین کرنل میزبان موجود را برای بوت کردن اپلاینس انتخاب کند. با این حال می‌توانید با تنظیم متغیرهای محیطی این مورد را بازنویسی کنید (بخش «متغیرهای محیطی (ENVIRONMENT VARIABLES)» در زیر را ببینید).

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

mkdir /tmp/kmods
make bzImage
make modules
make modules_install INSTALL_MOD_PATH=/tmp/kmods

export SUPERMIN_KERNEL=/path/to/linux.git/arch/x86/boot/bzImage
export SUPERMIN_MODULES=/tmp/kmods/lib/modules/3.xx.yy

supermin --build -f ext2 [etc]

برنامه supermin با کپی کردن بسته‌های فهرست‌شده در packages اپلاینس را می‌سازد. برای اینکه این فرایند کار کند، آن بسته‌ها باید در دسترس باشند. ما معمولاً این موضوع را با افزودن وابستگی‌ها (مثلاً خطوط "Requires:" در RPM) به بسته‌ای که از اپلاینس supermin استفاده می‌کند اعمال می‌کنیم، تا آن بسته نتواند بدون واکشی بسته‌های وابسته نصب شود و بدین ترتیب اطمینان حاصل شود که بسته‌ها برای استفاده supermin نصب شده‌اند.

اگر این متغیر محیطی تنظیم شود، انتخاب خودکار کرنل نادیده گرفته شده و از این کرنل استفاده می‌شود.

این متغیر محیطی باید به یک فایل کرنل اشاره کند، مانند /boot/vmlinuz-3.0.x86_64

این متغیر، دایرکتوری ماژول‌های کرنل مورد استفاده را مشخص می‌کند.

این متغیر محیطی باید به دایرکتوری ماژول‌ها اشاره کند، مانند /lib/modules/3.0.x86_64/

در معماری‌های غیر x86، اگر supermin نتواند نسخه کرنلِ "SUPERMIN_KERNEL" را تنها با بررسی فایل تشخیص دهد، ممکن است لازم باشد این متغیر محیطی را تنظیم کنید..SH "همچنین ببینید (SEE ALSO)" http://people.redhat.com/~rjones/supermin، guestfs(3)، http://libguestfs.org.

Copyright (C) 2009-2016 Red Hat Inc.

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

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

شما باید به همراه این برنامه یک نسخه از پروانه عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، با Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA مکاتبه کنید.

2023-11-16 supermin-5.3.3