در این مقاله قصد دارم به شما آموزش دهم که چگونه میتوانید نصب لینوکس را خودکار سازی کنید.
فرض کنید که قصد داریم در یک سازمان بر روی سیستمهای متفاوتی از نظر سخت افزاری سیستم عامل لینوکس نصب کنیم، چگونه میتوانیم نصب را خودکار سازی کنیم. برای پاسخ به این سوال با من همراه باشید.
در این مستند قصد داریم نصب سیستمعامل لینوکس را بهصورت اتوماتیک بررسی و پیادهسازی کنیم. روشی که در این مستند استفاده میشود روش استفاده از preseed فایل است که مکانیزم پاسخ به سوالات در طول نصب است.
روش preseed فایل این امکان را فراهم میآورد که نصب سیستمعامل لینوکس را اتوماتیک سازی کنیم و همچنین میتوان اعمالی را در نصبِ با این روش انجام داد که با نصب معمولی نمیتوان انجام داد و انعطافپذیری بسیار بیشتری را نسبت به نصب معمولی سیستمعامل لینوکس فراهم میکند.
در استفاده از این روش نیاز است که قبل از آن با یکسری از قسمتهای debian آشنا شویم.
بهطور خواص زمانی که یک یا گروهی از بستههای نرمافزاری را در debianنصب میکنید وظیفهی debconfاست که پیکربندی این بستههای نرمافزاری را از شما سؤال بپرسد و تنظیمات مربوط به کاربر را در پایگاه دادهی خود ذخیره کند. و در آینده اگر که بستهی نرمافزاری قصد داشت نصب شود تنظیمات پیکربندی خود را از این پایگاه داده میخواند و فایلهای پیکربندی را با استفاده از این پایگاه داده ایجاد میکند، بهعنوانمثال اینکه آیا سرور نصبشده اجرا شود یا نشود و یا اینکه همراه با سرور کتابخانهی دیگری هم نصب شود یا نشود.
(یودِب) Udeb یا micro deb یک نوع خاص از بستههای نرمافزاری debianاست که شباهت بسیاری به بستههای نرمافزاری معمولی دارد بهگونهای که شما میتوانید محتویات آنها را با فرمانهای dpkg –c مشاهده کنید یا بافرمان dpkg –e آنها را از حالت فشرده خارج کنید. این بستههای نرمافزاری به دلیل ماهیت استفاده باید حجم بسیار پایینی داشته باشند چراکه در زمان نصب، کاملاً باید در RAMقرار بگیرند و اینکه در مرحلهی چهارم نصبِ سیستم فراخوانی میشوند، که زمان partitioning سیستم است. این بستههای نرمافزاری در یک سیستم معمولی نباید نصب شوند و معمول بهمنظور استفاده در مراحل نصب سیستمعامل استفاده میشود. دو کلاس متفاوت از این بستههای نرمافزاری عبارتاند از:
ی1. Kernel image an kernel module udeb
اساساً همان kernel image است که بهصورت خاصی دربستهی نرمافزاری ارائه میشود، که دربستهی جدید نرمافزاری سایز کوچکتری را دارد علت آنهم این است که در مراحل نصب نیاز به بسیاری از ماژولهای کرنل نیست.
د2. Partman و اجزای آن
در Partmanبرای partitioningاستفاده میشود که در ادامهی این مستند به بررسی آن خواهیم پرداخت.
در ابتدا با روشهای ارسال فایل preseed.cfg به یک debian installer آشنا میشویم و در ادامه به بررسی یک مورد فایل preceed.cfg خواهیم پرداخت.
روشهای متفاوتی برای ارسال فایل preceed.cfg به initrd هست، اما قبل از آن بهتر است زمان استفاده از فایل preseed.cfg را بدانیم، برای این منظور نیاز است که با initrd در لینوکس آشنا شوید.
در Initrdیا Initramfs یک فایل سیستم است که boot loaderآن را در ram بارگذاری میکند تا این که بتواند از ram بهعنوان root file system استفاده کند که امکان بارگذاری برنامههای دیگر در ram فراهم شود. بعدازآن میتوان root file systemدیگری را مثلا از هارد به کرنل معرفی کرد پس initrd وظیفهی این را دارد تا اینکه RAM را قابلاستفاده کند تا کرنل در RAMقرار گیرد. Initrdمیتواند یک فایل به اسم preseed.cfg بهعنوان ورودی دریافت کند که این فایل حاوی پیکربندیهای کرنل است، این پیکربندیها همان پاسخ به سوالات هنگام نصب هستند که در فرمت خاصی بهعنوان فایل preseed.cfgبه initrd داده میشوند. اگر که این فایل به initrdمعرفی شوند خود initrdآن را load کرده و اعمال میکند همچنین قابلیتی وجود دارد که میتوان تمامی پیکربندی preseed.cfg را در فایل initrd قرار داد و آن را در یک iso سیستمعامل قرارداد و ازآنپس آن iso بهصورت اتوماتیک از پیکربندیها استفاده میکند. اما ما میتوانیم در مرحله boot loader هممکان preseed.cfg را به initrd معرفی کنیم، مکان preseed فایل میتواند بر روی شبکه باشد که میتوان با استفاده از tftpیا ftp یا http آن را انتقال داد.
در ابتدا نحوهی ارسال preseed.cfg را از طریق شبکه با استفاده از پروتکل httpبررسی میکنیم و بعدازآن نحوهی قرار دادن فایل preseed.cfg را در یک iso بررسی خواهیم کرد.
برای ارسال preseed.cfg از طریق پروتکل http نیاز به یک وب سرور داریم، درصورتیکه بر روی سیستمعامل لینوکس شما python نصبشده باشد میتوانید بهراحتی از آن استفاده کنید، فقط کافی است که وارد پوشهی حاوی فایل preseecd.cfg شوید و فرمان 2‑1 را اجرا کنید.
python –m SimpleHTTPServer 80
فرمان 2‑1 اجرای وب سرور
درصورتیکه شما در web browser خود ip address سیستم لینوکس خود را اجرا کنید میتوانید فایل preseed.cfg را مشاهده کنید.
بعدازاین که وارد مرحلهی نصب سیستمعامل debian شدید، شکل 2‑1
وارد ناحیهی advance option شده و زمانی که بر روی گزینهی automatic installation قرار گرفتید بر روی کلید e فشار دهید تا وارد محیط ویرایش گزینه automatic installationشوید. شکل 2‑2
بعدازآن وارد محیط ویرایش automated install شوید و مانند شکل 2‑3 آدرس فایل preseed.cfgرا وارد کنید و در انتها کلید crtr+xرا باهم فشار دهید تا این که ادامهی عمل boot صورت گیرد.
همانگونه که مشاهده میکنید میتوان مانند شکل 2‑3 فرمان 2‑2 را اضافه کرد.
url=http://172.30.120.11/preseed.cfg
فرمان 2‑2 تنظیمات ارسال فایل preseed
همچنین شما باید در ادامه فرمان 2‑2 کارت شبکهی متصل سیستم را هم مشخص کنید.
url=http://172.30.120.11/preseed.cfginterface=eth0
فرمان 2‑3 ارسال تنظیمات فایل preseed
برای اینکه فایل preseed.cfg را در یک فایل iso سیستمعامل قرار دهیم مانند ادامه عمل کنید.
در ابتدا فایل iso را از حالت image خارج کنید
در ابتدا فایل iso سیستمعامل را از حالت فشرده خارج کنید. فرمان 2‑4
7z x -oDESTINATION debian-9.3.0-i386-netinst.iso
فرمان 2‑4 unpack
اعمال دسترسی write بر دایرکتوری install.amd و محتویات آن. فرمان 2‑5
chmod +w -R isofiles/install.amd/
فرمان 2‑5 دسترسی write
فایل initrd.gzهای زیر شاخه پوشه install.amd را از حالت zip خارج کنید. فرمان 2‑6
gunzip isofiles/install.amd/initrd.gz
gunzip isofiles/install.amd/gtk/initrd.gz
gunzip isofiles/install.amd/xen/initrd.gz
فرمان 2‑6 unzip initrd
بعدازآن نیاز است که فایل preseed.cfg را به initrd اضافه کنیم. فرمان 2‑7
echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.amd/initrd
echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.amd/gtk/initrd
echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.amd/xen/initrd
فرمان 2‑7 افزودن preseedبه initrd
دوباره فایل initrd را zip کنید. فرمان 2‑8
gzip isofiles/install.amd/initrd
gzip isofiles/install.amd/gtk/initrd
gzip isofiles/install.amd/xen/initrd
فرمان 2‑8 zip initrd
دسترسی writeرا از initrd بگیرید. فرمان 2‑9
chmod -w -R isofiles/install.amd
فرمان 2‑9 گرفتن دسترسی write
حال hash file را بهروزرسانی کنید. فرمان 2‑10
cd isofile
md5sum `find -follow -type f` > md5sum.txt
فرمان 2‑10 hash file
دوباره iso را ایجاد کنید، برای ایجاد فایل iso نیاز است که syslinux را در ابتدا نصب کنید. فرمان 2‑11
apt-get install syslinux
apt-get install xorriso
xorriso -as mkisofs -isohybrid-mbr /usr/lib/syslinux/mbr/isohdpfx.bin –c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -o preseed-debian-08.iso isofiles
فرمان 2‑11 ایجاد iso
بعد از ایجاد فایل iso شما میتوانید از آن در نصب اتوماتیک استفاده کنید.
در ادامه به تشریح فایل preseed.cfg خواهیم پرداخت.
برای انتخاب موقعیت جغرافیایی و کیبورد از این دو خط فرمان 3‑1 استفاده میشود.
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
فرمان 3‑1 انتخاب کشور و کیبورد
انتخاب کارت شبکه بهصورت خودکار و تنظیم hostname. فرمان 3‑2
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string debian
فرمان 3‑2 انتخاب کارت شبکه و host name
برای اجبار نصب efi این فرمان 3‑3 را وارد کنید
grub-efi-amd64 grub2/force_efi_extra_removable boolean true
فرمان 3‑3 نصب efi
برای مشخص کردن آدرس mirror از فرمان 3‑4 استفاده کنید.
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string false
فرمان 3‑4 پیکربردی mirror
برای اضافه کردن کاربر root و اضافه کردن کاربر user.فرمان 3‑5
d-i passwd/make-user boolean true
d-i passwd/root-password password 1
d-i passwd/root-password-again password 1
d-i passwd/user-fullname string user
d-i passwd/username string user
d-i passwd/user-password password 1
d-i passwd/user-password-again password 1
فرمان 3‑5 افزودن کاربر
تنظیمات زمان. فرمان 3‑6
d-i clock-setup/utc boolean true
d-i time/zone string US/Eastern
d-i clock-setup/ntp boolean true
فرمان 3‑6 تنظیمات زمان
تنظیمات مربوط به disk partitioning در فایل preseed مانند فرمان 3‑7 است. همانگونه که مشاهده کنید در خط اول دیسکهای سیستم را مشخص شده و در خط دوم و سوم آن تأکید بر پاک شدن lvm داشته و در خط چهارم روش معمول را برای پارتیشن بندی انتخاب کرده و بعدازآن به نصب نشدن swap تأکید داشته و بعدازآن پارتیشن بندی را شروع کرده است.
همانگونه که در فرمان 3‑7 مشاهده میکنید میزان حجم به مگابایت محاسبهشده و به پارتیشن خاص آن نسبت دادهشده است فقط در ایجاد پارتیشن root که آخرین پارتیشن است مشخص کرده است که هرآن چه فضای دیگر مانده بود را به پارتیشن root اختصاص دهید.
d-i partman-auto/disk string /dev/sda /dev/sdb
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm_nooverwrite boolean false
d-i partman-auto/method string regular
d-i partman-basicfilesystems/no_swap boolean false
d-i partman-auto/expert_recipe string \
512 512 512 fat32 \
method{ efi } format{ } \
device{ /dev/sda } \
. \
1536 1536 1536 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /boot } \
device{ /dev/sda } \
. \
25600 25600 25600 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
device{ /dev/sda } \
mountpoint{ /tmp } \
. \
51200 51200 51200 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
device{ /dev/sda } \
mountpoint{ /usr } \
. \
500 10000 1000000000 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
device{ /dev/sda } \
mountpoint{ / } \
.
فرمان 3‑7 partitioning
درصورتیکه هارددیسک دیگری بر روی سیستم قرار دارد که میخواهید آن را هم پارتیشن بندی کنید، میتوانید از fdisk استفاده کنید اما توصیه میشود که این کار در این مرحله انجام نشود و بهتر است که بعد از اتمام نصب دیسک دوم را پارتیشن بندی کنید ولی درصورتیکه نیاز شد در مرحلهی نصب پارتیشن بندی را انجام دهید، در این زمان در ابتدا تمام پارتیشنهای موجود بر روی دیسک را پاک کنید و بعدازآن با استفاده از فرمان fdisk پارتیشنهای موردنیاز را بسازید. فرمان 3‑8
d-i preseed/late_command string dd if=/dev/zero of=/dev/sdb bs=512 count=1 conv=notrunc ; echo -e "g\nn\n1\n\n+450G\nw" | fdisk -c -u /dev/sdb ; mke2fs -F -t ext4 -q /dev/sdb1 ; echo -e "n\n2\n\n\n\nw" | fdisk -c -u /dev/sdb; mke2fs -F -t ext4 -q /dev/sdb2
فرمان 3‑8 ایجاد پارتیشن بر روی دیسک دوم
بعدازاین که پارتیشن بندی را انجام دادید نیاز است که تأیید کنید که عمل write بر روی دیسک و پارتیشنها انجام شود. فرمان 3‑9
d-i partman-basicfilesystems/no_mount_point boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
فرمان 3‑9 تاییدههای پارتیشن بندی
برای اینکه سرویس ssh-server بر روی سیستم نصب بشود میتوانید از فرمان 3‑10 استفاده کنید.
tasksel tasksel/first multiselect ssh-server
فرمان 3‑10 نصب ssh server
همچنین شما میتوانید پکیجهای دیگری را هم نصب کنید به عنوان مثال پکیج htopو vim. فرمان 3‑11
d-i pkgsel/include string vim, htop
فرمان 3‑11 نصب پکیج
همچنین شما میتوانید مشخص کنید که تمامی پکیجها به روز رسانی شوند. فرمان 3‑12
d-i pkgsel/upgrade select full-upgrade
فرمان 3‑12 به روز شدن پکیجها
برای غیر فعال کردن نصب popularty contest از فرمان 3‑13 استفاده کنید.
popularity-contest popularity-contest/participate boolean false
فرمان 3‑13 disable popularity contest
بعد از آن مشخص کنید که grub نصب شود. فرمان 3‑14
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string /dev/sda
فرمان 3‑14 نصب grub
و در انتها مشخص کنید که سیستم reboot شود. فرمان 3‑15
d-i finish-install/reboot_in_progress note
فرمان 3‑15 ریستارت شدن سیستم بعد از اتمام نصب
بعد از انجام مراحل بالا فایل پیکربندی نصب ایجاد شده است و میتوانید از آن استفاده کنید و آن را در یک iso قرار دهید یا این که فایل را از طریق شبکه به سیستم معرفی کنید.
امیدوارم این مستند آموزنده باشد.