الكثير من بطاقات الإيثرنت تدعم الإقلاع عبر الشبكة netboot ويستفاد من ذلك في عمل شبكة مركزية لا تملك أطرافها أقراصا disk-less clients. كذلك يمكن الاستفادة من هذه الخاصية في تثبيت لينكس على عدد كبير من الأجهزة متشابهة الإعدادات.
نحتاج تخصيص خادم في الشبكة يحتوي على tftp (خدمة لنقل الملفات عبر الشبكة المحلية عبر منفذ UDP رقم 69 وهي بروتوكول مختلف تماما عن FTP الذي يعمل على منفذ TCP رقم 21). مهمة tftp هي توصيل الملفات اللازمة للإقلاع.
يتم الإقلاع عبر gPXE وهي تنفيذ لمعايير PXE
محمل الإقلاع المستخدم في هذه الوثيقة هو syslinux
استخدم مدير الحزم لتثبيت tftp-server
yum install tftp-server
في فيدورا وبالتالي أعجوبة ذلك يتضمن تثبيت xinetd الإعدادات التلقائية ل tftp أنه يكون غير مفعل لذا قم بتحرير ملف /etc/xinetd.d/tftp وستجد في رأسه disable = yes اجعل قيمتها no.
disable = no
وهذا لا يكفي حيث أن xinetd لا يكون مفعل تلقائيا (يمكنك تفعيله من نظام ثم إدارة ثم حدمات) أو عبر الأوامر
chkconfig --levels 2345 xinetd on service xinetd start
وسنفترض في بقية الوثيقة أن مسار ملفات TFTP هو المجلد /tftpboot/
اذهب لمجلد /tftpboot/ ثم قم بوضع إعدادات syslinux 1) عمل ذلك أسهل ما يكون (طبعا ضع المكان الحقيقي لملف ISO الخاص بتوزيعة أعجوبة)
cd / livecd-iso-to-pxeboot /path/to/ojuba-X-Live-i386.iso
هذا الأمر يعمل مجلد tftpboot داخل المجلد الحالي و محتوياته
تلك الإعدادات تبدو هكذا
DEFAULT oj3deskless TIMEOUT 20 PROMPT 0 LABEL oj3deskless KERNEL vmlinuz0 APPEND rootflags=loop initrd=initrd0.img root=/ojuba-X-Live-i386.iso rootfstype=auto ro liveimg quiet rhgb ONERROR LOCALBOOT 0
داخل قرص أعجوبة وسيط التثبت ستجد مجلد اسمه images بداخله مجلد pxeboot فيه ملفات
ما ينقصك حتى تقلع هو نسخ محمل الإقلاع pxelinux.0 من syslinux
yum install syslinux cp /usr/share/syslinux/pxelinux.0 /tftpboot/
كما يلزمنا عمل الإعدادات pxelinux وذلك داخل مجلد pxelinux.cfg اعمل ملف اسمه default كما يلي:
DEFAULT oj3inst TIMEOUT 20 PROMPT 0 LABEL oj3inst KERNEL vmlinuz APPEND initrd=initrd.img ramdisk_size=34561 method=http://webserver/netboot ip=dhcp ONERROR LOCALBOOT 0
حيث webserver هو خادم الويب و netboot هو العنوان الذي فيه نسخة محتويات قرص التثبيت (اللازمة لبرنامج التثبيت أناكوندا بما فيها حزم rpm) يعني على خادم الويب اكتب
mkdir /mnt/virtual mount -o loop ojuba-X-i386-DVD.iso /mnt/virtual mkdir /var/www/html/netboot/ cp -ra /mnt/virtual/* /var/www/html/netboot/ umount /mnt/virtual rmdir /mnt/virtual
عليك إضافة مدخلات تدل الأجهزة على الخادم وعلى الملف محمل الإقلاع. يعني في الجزء الخاص بالأجهزة المخدومة أضف
filename "/tftpboot/pxelinux.0"; server-name "servername"; next-server ip_address;
هذا كل ما تحتاجه للبدء بالعمل يمكنك تجربة ما صنعنا دون إكمال بقية المقال.
سيتم نقل النواة وقرص الرام عبر الشبكة إلى الرام في الجهاز المخدوم ثم يقلع النظام. في حالة النظام الحي سيكون قرص الرام هو القرص الحي كاملا مما سيأخذ وقتا طويلا خصوصا إن أخذنا تأخير بروتوكول tftp.
ملاحظة: يفترض أن لا يكون هناك إلا خادم DHCP واحد في الشبكة المحلية الواحدة وقد يكون هذا الخادم موجود داخل الموجه router
محمل إقلاع gPXE هو ملف واحد ذي امتداد .pxe يعمل على تحميل firmware في بطاقة الإيثرنت مما يدعلها تدعم بروتوكلات مثل HTTP و HTTPS لذا يتم جلبه عبر tftp ثم جلب pxelinux عبر HTTP لأنه أسرع.
يفترض أننا سنحتاج ملف واحد امتداده .pxe لكن هناك بعض الحالات لا تعمل فيها التعريفات العامة فنضطر لاستخدام gPXE UNDI driver
للحصول على الملفات
قم بوضع الملفات على خادم apache أي في /var/www/html/netboot/ ولا تبق في /tftpboot/ إلا ملفي gpxe.pxe و undi.pxe
قم بتعديل إعدادات DCHP كي تقوم بتحميل pxelinux عبر http إن كان النظام يدعم محمل إقلاع gPXE فإن لم يكن يدعمه فإنه يحمل gpxe.pxe الذي يضيف دعم http ثم يعيد من جديد.
يعني في الجزء الخاص بالأجهزة المخدومة أضف
next-server ip_address; if exists user-class and option user-class = "gPXE" { filename "http://webserver/netboot/pxelinux.0"; } else { filename "/gpxe.pxe"; }
قد تسأل ما فائدة الملف الآخر undi.pxe حيث انه وفق هذه الإعدادات لن يتم استخدامه. قد يلزمك استخدامه مكان gpxe.pxe إن لم تكن الأجهزة عندك مدعومة من قبل الأول.
ولأن أغلب المختبرات تكون معدة من أجهزة متشابهة فإنه يلزمك واحد فقط من الملفين.
لكن إن وجدت نفسك في موقف بحاجة لاستعمالهما معا يمكنك عمل:
if exists user-class and option user-class = "gPXE" { filename "http://webserver/netboot } else { if binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "mac_address_1" or binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "mac_address_2" { filename "/undi.pxe"; } else { filename "/gpxe.pxe"; } }
حيث mac_address_1 و mac_address_2 هما عنواني MAC للجهازين اللذان لم يعملان مع الملف العادي ويحتاجان للملف الثانوي undi.pxe