ویرگول
ورودثبت نام
محمد حسین جلیلی
محمد حسین جلیلی
خواندن ۹ دقیقه·۳ سال پیش

خودکار سازی نصب لینوکس

در این مقاله قصد دارم به شما آموزش دهم که چگونه می‌توانید نصب لینوکس را خودکار سازی کنید.

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

1 مقدمه

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

روش preseed فایل این امکان را فراهم می‌آورد که نصب سیستم‌عامل لینوکس را اتوماتیک سازی کنیم و همچنین می‌توان اعمالی را در نصبِ با این روش انجام داد که با نصب معمولی نمی‌توان انجام داد و انعطاف‌پذیری بسیار بیشتری را نسبت به نصب معمولی سیستم‌عامل لینوکس فراهم می‌کند.

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

1-1 پایگاه داده debconf

به‌طور خواص زمانی که یک یا گروهی از بسته‌های نرم‌افزاری را در debianنصب می‌کنید وظیفه‌ی debconfاست که پیکربندی این بسته‌های نرم‌افزاری را از شما سؤال بپرسد و تنظیمات مربوط به کاربر را در پایگاه داده‌ی خود ذخیره کند. و در آینده اگر که بسته‌ی نرم‌افزاری قصد داشت نصب شود تنظیمات پیکربندی خود را از این پایگاه داده می‌خواند و فایل‌های پیکربندی را با استفاده از این پایگاه داده ایجاد می‌کند، به‌عنوان‌مثال این‌که آیا سرور نصب‌شده اجرا شود یا نشود و یا این‌که همراه با سرور کتابخانه‌ی دیگری هم نصب شود یا نشود.

1-2یودِب-Udeb

(یودِب) 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 خواهیم پرداخت.

2 روش‌های استفاده از 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 بررسی خواهیم کرد.

2-1 ارسال preseed با استفاده از http

برای ارسال preseed.cfg از طریق پروتکل http نیاز به یک وب سرور داریم، درصورتی‌که بر روی سیستم‌عامل لینوکس شما python نصب‌شده باشد می‌توانید به‌راحتی از آن استفاده کنید، فقط کافی است که وارد پوشه‌ی حاوی فایل preseecd.cfg شوید و فرمان ‏2‑1 را اجرا کنید.

python –m SimpleHTTPServer 80

فرمان ‏2‑1 اجرای وب سرور

درصورتی‌که شما در web browser خود ip address سیستم لینوکس خود را اجرا کنید می‌توانید فایل preseed.cfg را مشاهده کنید.

بعدازاین که وارد مرحله‌ی نصب سیستم‌عامل debian شدید، شکل ‏2‑1

شکل ‏2‑1 انتخاب‌های بیشتر
شکل ‏2‑1 انتخاب‌های بیشتر

وارد ناحیه‌ی advance option شده و زمانی که بر روی گزینه‌ی automatic installation قرار گرفتید بر روی کلید e فشار دهید تا وارد محیط ویرایش گزینه automatic installationشوید. شکل ‏2‑2

شکل ‏2‑2 نصب اتوماتیک
شکل ‏2‑2 نصب اتوماتیک

بعدازآن وارد محیط ویرایش automated install شوید و مانند شکل ‏2‑3 آدرس فایل preseed.cfgرا وارد کنید و در انتها کلید crtr+xرا باهم فشار دهید تا این که ادامه‌ی عمل boot صورت گیرد.

شکل ‏2‑3 معرفی مکان فایل
شکل ‏2‑3 معرفی مکان فایل

همان‌گونه که مشاهده می‌کنید می‌توان مانند شکل ‏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

2-2 ایجاد iso حاوی فایل preseed.cfg در لینوکس

برای این‌که فایل 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 شما می‌توانید از آن در نصب اتوماتیک استفاده کنید.

3 تشریح فایل preseed.cfg

در ادامه به تشریح فایل 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 &quotg\nn\n1\n\n+450G\nw&quot | fdisk -c -u /dev/sdb ; mke2fs -F -t ext4 -q /dev/sdb1 ; echo -e &quotn\n2\n\n\n\nw&quot | 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 قرار دهید یا این که فایل را از طریق شبکه به سیستم معرفی کنید.


امیدوارم این مستند آموزنده باشد.

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