مدیر سیستمهای شرکت فالکوت، مانند سایر مدیر سیستمهای خدمات بزرگ IT، به ابزاری نیاز دارند که فرآیند نصب (یا بازنصب) ماشینهای خود را در کمترین زمان و در صورت ممکن به صورت خودکار انجام دهند.
این نیازمندیها توسط طیف گستردهای از راه حلها برطرف میشوند. از یک طرف ابزار عمومی مانند SystemImager با ایجاد یک تصویر از ماشین نمونه، آن را روی ماشینهای هدف گسترش میدهد؛ از طرف دیگر، نصب کننده دبیان این قابلیت را دارد که با استفاده از یک فایل پیکربندی خاص به پرسشهای مطرح شده طی فرآیند نصب به صورت خودکار پاسخ دهد. به عنوان یک راه حل ترکیبی، ابزاری مانند FAI، که مخفف Fully Automatic Installer است، ماشینها را با استفاده از سیستم بستهبندی نصب، اما از زیرساخت خود به منظور فرآیندهای پیچیدهتر مانند راهاندازی، پارتیشنبندی و پیکربندی استفاده میکند.
Each of these solutions has its pros and cons: SystemImager works independently from any particular packaging system, which allows it to manage large sets of machines using several distinct Linux distributions. It also includes an update system that doesn't require a reinstallation, but this update system can only be reliable if the machines are not modified independently; in other words, the user must not update any software on their own, or install any other software. Similarly, security updates must not be automated, because they have to go through the centralized reference image maintained by SystemImager. This solution also requires the target machines to be homogeneous, otherwise many different images would have to be kept and managed (an amd64 image won't fit on a powerpc machine, and so on).
On the other hand, an automated installation using debian-installer can adapt to the specifics of each machine: the installer will fetch the appropriate kernel and software packages from the relevant repositories, detect available hardware, partition the whole hard disk to take advantage of all the available space, install the corresponding Debian system, and set up an appropriate bootloader. However, the standard installer will only install standard Debian versions, with the base system and a set of pre-selected “tasks”; this precludes installing a particular system with non-packaged applications. Fulfilling this particular need requires customizing the installer… Fortunately, the installer is very modular, and there are tools to automate most of the work required for this customization, most importantly simple-cdd (CDD being an acronym for Custom Debian Derivative). Even this solution, however, only handles initial installations; this is usually not a problem since the APT tools allow efficient deployment of updates later on.
We will only give a rough overview of FAI, and skip SystemImager altogether (which is no longer in Debian, but available as a third-party package), in order to focus more intently on debian-installer and simple-cdd, which are more interesting in a Debian-only context.
12.3.1. نصبکننده تمام خودکار (FAI)
نصبکننده تمام خودکار احتمالا قدیمیترین سیستم گسترش خودکار برای دبیان باشد، که جایگاه آن به عنوان یک مرجع را مشخص میکند؛ اما طبیعت بسیار سازگار آن به نوعی پیچیدگیهای درونیاش را جبران میکند.
FAI نیازمند یک سیستم سرور به منظور نگهداری از اطلاعات راهاندازی برای ماشینهای است که قصد دارند از طریق شبکه به آن متصل گردند. این سرور نیازمند بسته fai-server (یا fai-quickstart، که عناصر مورد نیاز برای یک پیکربندی استاندارد را گردآوری میکند) است.
FAI uses a specific approach for defining the various installable profiles. Instead of simply duplicating a reference installation, FAI is a full-fledged installer, fully configurable via a set of files and scripts stored on the server; the default location /srv/fai/config/
according to /etc/fai/nfsroot.conf
is not automatically created, so the administrator needs to create it along with the relevant files. Most of the times, these files will be customized from the example files available in the documentation for the fai-doc package, more particularly the /usr/share/doc/fai-doc/examples/simple/
directory.
Once the profiles are defined, the fai-setup
command generates the elements required to start an FAI installation; this mostly means preparing or updating a minimal system (NFS-root) used during installation. An alternative is to generate a dedicated boot CD with fai-cd
.
ایجاد تمام این فایلهای پیکربندی نیازمند درک درستی از چگونگی عملکرد FAI میباشد. یک فرآیند متداول نصب از گامهای زیر تشکیل شده است:
دریافت یک کرنل از شبکه و راهاندازی آن؛
اتصال فایل سیستم root از NFS؛
اجرای /usr/sbin/fai
، که باقی فرآیند نصب را کنترل میکند (از این رو گامهای بعدی توسط این اسکریپت فراخوانی میشوند)؛
رونوشتگیری فضای پیکربندی از سرور درون /fai/
؛
اجرای fai-class
. اسکریپتهای /fai/class/[0-9][0-9]*
به ترتیب اجرا میشوند و نام “کلاسهای” منطبق با ماشین مورد نظر میباشند را بر میگردانند؛ از این اطلاعات برای ادامه فرآیند نصب استفاده میشود. اینکار موجب انعطافپذیری در تعریف سرویسهای مورد نیاز برای نصب و پیکربندی میشود.
دریافت تعدادی از متغیرهای پیکربندی، با توجه به کلاسهای مربوطه؛
پارتیشنبندی دیسکها و فرمت کردن پارتیشنها، بر اساس اطلاعات فراهم شده در /fai/disk_config/class
؛
اتصال پارتیشنهای مذکور؛
نصب سیستم پایه؛
گردآوری پایگاهداده Debconf با استفاده از fai-debconf
؛
دریافت فهرست بروزرسانیهای موجود برای APT؛
نصب بستههای فهرست شده در /fai/package_config/class
؛
اجرای اسکریپتهای پس از پیکربندی، /fai/scripts/class/[0-9][0-9]*
؛
ثبت گزارشهای نصب، قطع اتصال پارتیشنها و راهاندازی مجدد.
12.3.2. گردآوری debian-installer
At the end of the day, the best tool to install Debian systems should logically be the official Debian installer. This is why, right from its inception, debian-installer has been designed for automated use, taking advantage of the infrastructure provided by debconf. The latter allows, on the one hand, to reduce the number of questions asked (hidden questions will use the provided default answer), and on the other hand, to provide the default answers separately, so that installation can be non-interactive. This last feature is known as preseeding.
12.3.2.1. استفاده از یک فایل Preseed
مکانهای مختلفی وجود دارد که یک نصبکننده میتواند فایل preseed را دریافت کند:
در initrd که برای راهاندازی ماشین استفاده شده است؛ در این مورد، عملیات preseed در ابتدای فرآیند نصب صورت میگیرد و تمام پرسشها میتوانند نادیده گرفته شوند. این فایل باید بنام preseed.cfg
در اولین سطح دایرکتوری initrd قرار گیرد.
در رسانه راهاندازی (مانند CD یا USB)؛ عملیات preseed به محض اتصال رسانه صورت میگیرد، یعنی درست پس از پرسشهای مربوط به زبان و ساختار صفحه کلید. پارامتر راهاندازی preseed/file
میتواند برای شناسایی مکان فایل preseed (برای نمونه، /cdrom/preseed.cfg
در هنگام نصب از CD-ROM یا /hd-media/preseed.cfg
در هنگام نصب از USB) مورد استفاده قرار گیرد.
from the network; preseeding then only happens after the network is (automatically) configured; the relevant boot parameter is then preseed/url=http://server/preseed.cfg
(HTTPS, FTPS, SFTP, etc. are not supported).
در یک نگاه، قرار دادن فایل preseed درون initrd ممکن است جالبترین گزینه به نظر آید؛ اگرچه، کمتر از این حالت استفاده میشود چرا که ایجاد یک initrd قابل نصب بسیار دشوار است. دو راهکار جایگزین دیگر، بیشتر متداول هستند، به خصوص که پارامترهای راهاندازی روشی دیگر برای آمادهسازی پاسخها به اولین پرسشهای فرآیند نصب را فراهم میکنند. روش مرسوم برای ذخیرهسازی این پارامترهای راهاندازی و جلوگیری از نوشتن هر کدام در زمان نصب، قرار دادن آنها در پیکربندی مرتبط با isolinux
(در مورد CD-ROM) یا syslinux
(در مورد USB) است.
12.3.2.2. ایجاد یک فایل Preseed
یک فایل preseedاز نوع متنی است که در هر خط آن پاسخ به یک پرسش از Debconf قرار دارد. هر خط به چهار فیلد که با فاصله (space یا tab) از یکدیگر جدا میشوند، تقسیم شده است. برای نمونه، در مورد d-i mirror/suite string stable
:
فیلد اول “مالک” پرسش به حساب میآید؛ “d-i” برای پرسشهایی استفاده میشود که مرتبط با فرآیند نصب هستند، اما میتواند در مورد نام بستههای موجود دبیان نیز بکار رود؛
the second field is an identifier for the question (the template name);
فیلد سوم نوع پرسش را مشخص میکند؛
فیلد چهارم و آخرین فیلد نیز پاسخ به پرسش را شامل میشود. به یاد داشته باشید که از فیلد سوم توسط یک space باید جدا شود؛ اگر بیش از یک فاصله بکار رود، به عنوان بخشی از پاسخ در نظر گرفته میشود.
سادهترین روش برای ایجاد یک فایل preseed نصب یک سیستم به صورت دستی است. سپس debconf-get-selections --installer
پاسخهای مرتبط با آن را فراهم میکند. پاسخهای مرتبط با سایر بستهها نیز توسط debconf-get-selections
گردآوری میشوند. اگرچه، راهکار بهتر در این مورد نوشتن فایل preseed به صورت دستی است، که از یک فایل نمونه و مستندات مرجع میتوان استفاده کرد: با چنین رویکردی، تنها پرسشهایی که پاسخهای پیشفرض داشته باشند میتوانند آمادهسازی شوند؛ استفاده از پارامتر راهاندازی priority=critical
به Debconf دستور میدهد که تنها به پرسشهای حیاتی پاسخ دهد و از پاسخهای پیشفرض برای سایر پرسشها استفاده کند.
Pre-setting a value in a preseed file automatically instructs the Debian installer to not ask that question. This happens, because loading the preseed file does not just set the given value(s), but also marks each of the affected dialogs as “seen“ by the user. Thus it is possible to pre-set a question's value and still present the dialog to the user by resetting the “seen“ flag. Beware that order in this case matters and that the value has to be preseeded before setting the dialog to “unseen“ as shown in the following example:
d-i netcfg/hostname string worker
d-i netcfg/hostname seen false
12.3.2.3. ایجاد یک رسانه راهاندازی سفارشی
دانستن اینکه یک فایل preseed در کجا ذخیره شود خوب است، اما کافی نیست: مدیر سیستم باید به شیوهای رسانه راهاندازی نصب را تغییر دهد که پارامترهای راهاندازی تغییر کرده و فایل preseed به آن اضافه شود.
12.3.2.3.1. راهاندازی از طریق شبکه
When a computer is booted from the network, the server sending the initialization elements also defines the boot parameters. Thus, the change needs to be made in the PXE configuration for the boot server; more specifically, in its
/tftpboot/pxelinux.cfg/default
configuration file. Setting up network boot is a prerequisite; see the Installation Guide for details.
12.3.2.3.2. آمادهسازی یک USB قابل اجرا
Once a bootable key has been prepared (see
قسمت 4.1.2, “راهاندازی از USB”
), a few extra operations are needed. Assuming the key contents are available under
/media/usbdisk/
, copy the preseed file to
/media/usbdisk/preseed.cfg
.
If you have been using a hybrid ISO image to create the bootable USB stick, then you have to edit /media/usbdisk/boot/grub/grub.cfg
(for the EFI boot screen):
مثال 12.2. boot/grub/grub.cfg file and preseeding parameters
menuentry --hotkey=i 'Install' {
set background_color=black
linux /install.amd/vmlinuz preseed/file=/cdrom/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 --- quiet
initrd /install.amd/initrd.gz
}
And you have to edit /media/usbdisk/isolinux/isolinux.cfg
(for BIOS boot) or one of the files it utilizes - e.g. /media/usbdisk/isolinux/txt.cfg
- to add required boot parameters:
مثال 12.3. isolinux/txt.cfg file and preseeding parameters
label install
menu label ^Install
kernel [...]
append preseed/file=/cdrom/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=/install.amd/initrd.gz --- quiet
If you have been using the hd-media
installer image for a custom USB stick, edit /media/usbdisk/syslinux.cfg
and add the required boot parameters as shown in the example below:
مثال 12.4. فایل syslinux.cfg و پارامترهای عملیات آمادهسازی
default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=initrd.gz --
12.3.2.3.3. ایجاد یک تصویر CD-ROM
یک حافظه USB از نوع رسانههای خواندنی-نوشتنی است، پس تغییر فایل در آن و افزودن پارامترها کار آسانی است. در مورد CD-ROM، این عملیات از پیچیدگی بیشتری برخوردار است چرا که نیازمند تولید مجدد تصویر ISO از آن میباشد. این وظیفه توسط debian-cd مدیریت میشود، اما استفاده از این ابزار برای اینکار مطلوب نیست: نیازمند یک mirror محلی و درک از گزینههای موجود در /usr/share/debian-cd/CONF.sh
است؛ حتی در این صورت، make
چندین بار باید فراخوانی شود. بنابراین مطالعه /usr/share/debian-cd/README
به شدت توصیه میگردد.
Having said that, debian-cd always operates in a similar way: an “image” directory with the exact contents of the CD-ROM is generated, then converted to an ISO file with a tool such as genisoimage
, mkisofs
or xorriso
. The image directory is finalized after debian-cd's make image-trees
step. At that point, we insert the preseed file into the appropriate directory (usually $TDIR/$CODENAME/CD1/
, $TDIR and $CODENAME being parameters defined by the CONF.sh
configuration file). The CD-ROM uses isolinux
as its bootloader, and its configuration file must be adapted from what debian-cd generated, in order to insert the required boot parameters (the specific files are $TDIR/$CODENAME/CD1/isolinux/isolinux.cfg
and $TDIR/$CODENAME/CD1/boot/grub/grub.cfg
as shown above). Then the “normal” process can be resumed, and we can go on to generating the ISO image with make image CD=1
(or make images
if several CD-ROMs are generated).
12.3.3. Simple-CDD: یک راهکار جامع
استفاده از یک فایل preseed به تنهایی تمام پیشنیازهای فرآیندهای بزرگ توسعه را محقق نمیکند. با اینکه امکان اجرای چند اسکریپت در انتهای فرآیند نصب وجود دارد، مجموعه بستههایی که باید نصب گردند به سادگی قابل دسترس نمیباشند (معمولا، فقط “task” میتواند انتخاب شود)؛ مهمتر اینکه، این روش منجر به نصب بستههای رسمی از دبیان میشود و سایر بستههای محلی را نادیده میگیرد.
On the other hand, debian-cd is able to integrate external packages, and debian-installer can be extended by inserting new steps in the installation process. By combining these capabilities, it should be possible to create a customized installer that fulfills our needs; it should even be able to configure some services after unpacking the required packages. Fortunately, this is not a mere hypothesis, since this is exactly what simple-cdd does.
The purpose of this tool is to allow anyone to easily create a distribution derived from Debian, by selecting a subset of the available packages, preconfiguring them with Debconf, adding specific software, and executing custom scripts at the end of the installation process. This matches the “universal operating system” philosophy, since anyone can adapt it to their own needs.
12.3.3.1. ایجاد پروفایلها
Simple-CDD “پروفایل” را تعریف میکند که با مفهوم “کلاس” در FAI سازگار هستند و یک ماشین میتواند چندین پروفایل داشته باشد (که در زمان نصب مشخص میشوند). یک پروفایل توسط مجموعه فایلهای profiles/profile.*
تعریف میشود:
فایل .description
شامل توضیح یک خطی درباره پروفایل است؛
فایل .packages
شامل بستههایی است که در صورت انتخاب شدن پروفایل به شیوه خودکار نصب میگردند؛
فایل .downloads
شامل بستههایی است که درون رسانه نصب ذخیرهسازی میشوند، اما الزامی در نصب آنها وجود ندارد؛
فایل .preseed
شامل اطلاعات آمادهسازی برای پرسشهای Debconf (برای نصبکننده و/یا بستهها) میباشد؛
فایل .postinst
شامل اسکریپتی است که در انتهای فرآیند نصب اجرا میشود؛
lastly, the .conf
file allows changing some parameters based on the profiles to be included in an image.
پروفایل default
نقش ویژهای دارد چرا که همیشه انتخاب میشود؛ شامل حداقلهای مورد نیاز توسط Simple-CDD است. تنها موردی که در این پروفایل سفارشی میشود پارامتر آمادهسازی simple-cdd/profiles
است: امکان رد کردن پرسش، که توسط Simple-CDD، درباره پروفایل قابل نصب را فراهم میکند.
به یاد داشته باشید که دستورات باید از دایرکتوی والد profiles
فراخوانی شوند.
12.3.3.2. پیکربندی و استفاده از build-simple-cdd
Simple-CDD به پارامترهای بسیاری برای عملکرد جامع نیاز دارد. آنها اغلب درون یک فایل پیکربندی قرار دارند، که build-simple-cdd
میتواند با گزینه --conf
به آن اشاره کند، همچنین میتوانند با استفاده از پارامترهای انحصاری به build-simple-cdd
ارجاع شوند. در اینجا به این دستور و پارامترهای مورد نیاز آن نگاهی میاندازیم:
پارامتر profiles
فهرستی از پروفایلهای قابل اجرا در CD-ROM ایجاد شده را فهرست میکند؛
بر اساس فهرست بستههای مورد نیاز، Simple-CDD فایلهای متناسب با آنها را از سرور اشاره شده در server
دانلود کرده و آنها را درون یک mirror موقت قرار میدهد (که در ادامه به debian-cd داده میشود)؛
بستههای سفارشی موجود در local_packages
نیز درون همین mirror محلی قرار میگیرند؛
سپس debian-cd (درون یک مکان پیشفرض که میتواند با متغیر debian_cd_dir
پیکربندی شود) همراه با فهرستی از بستهها به منظور یکپارچهسازی اجرا میشود؛
زمانی که debian-cd دایرکتوری خود را آماده کند، Simple-CDD برخی تغییرات را در این دایرکتوری انجام میدهد:
فایلهایی که شامل پروفایلها هستند درون یک دایرکتوری زیر مجموعه simple-cdd
(واقع در CD-ROM نهایی) قرار میگیرند؛
سایر فایلهای فهرست شده در پارامتر all_extras
نیز افزوده میشوند؛
پارامترهای راهاندازی طوری تنظیم میشوند که عملیات preseed فعال گردد. در صورت ذخیرهسازی اطلاعات لازم در متغیرهای language
و country
، پرسشهای مربوط به زبان و کشور نادیده گرفته میشوند.
سپس debian-cd فایل نهایی ISO را تولید میکند.
12.3.3.3. تولید یک فایل ISO
Once we have written a configuration file and defined our profiles, the remaining step is to invoke build-simple-cdd --conf simple-cdd.conf
. After a few minutes, we get the required image in images/debian-11-amd64-CD-1.iso
.