Щоб завантажити лінуха по мережі, будемо використовувати : DHCP (для отримання параметрів мережі), tftpd (для скачування власне образів) і все це буде працювати через PXE-стек. Для нижчеприведеного випадку нотую мережеву інсталяцію Федори в корпоративному середовищі, проте з невеликими правками можна затосовувати до завантаження тонких клієнтів, інших ОС чи на інші (не заборонені законом 😉 ) цілі.
Качаємо потрібний образ ОС Fedora Linux:
Заходимо на список дзеркал Федори, вибираємо потрібну версію, збірку, найближче дзеркало та звантажуємо образ. Мені був потрібен образ мережевої інсталяції Fedora 14 під i386, я брав з посилання:
wget http://fedora.vc.ukrtel.net/linux/releases/14/Fedora/i386/iso/Fedora-14-i386-netinst.iso
Готуємо образ до мережевої загрузки:
Встановлюємо livecd-iso-to-pxeboot
yum install livecd-tools
Або качаємо (слід встановити залежності) з : http://svn.rpmforge.net/svn/trunk/rpms/livecd-tools/livecd-iso-to-pxeboot.sh
Або копіюємо прямо звідси:
#!/bin/bash # Convert a live CD iso so that it can be booted over the network # using PXELINUX. # Copyright 2008 Red Hat, Inc. # Written by Richard W.M. Jones <rjones@redhat.com> # Based on a script by Jeremy Katz <katzj@redhat.com> # Based on original work by Chris Lalancette <clalance@redhat.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. export PATH=/sbin:/usr/sbin:$PATH usage() { echo "Usage: livecd-iso-to-pxeboot <isopath>" exit 1 } cleanup() { [ -d "$CDMNT" ] && umount $CDMNT && rmdir $CDMNT } exitclean() { echo "Cleaning up to exit..." cleanup exit 1 } if [ $(id -u) != 0 ]; then echo "You need to be root to run this script." exit 1 fi # Check pxelinux.0 exists. if [ ! -f /usr/share/syslinux/pxelinux.0 -a ! -f /usr/lib/syslinux/pxelinux.0 ]; then echo "Warning: pxelinux.0 not found." echo "Make sure syslinux or pxelinux is installed on this system." fi while [ $# -gt 1 ]; do case "$1" in *) usage ;; esac shift done ISO="$1" if [ -z "$ISO" -o ! -e "$ISO" ]; then usage fi if [ -d tftpboot ]; then echo "Subdirectory tftpboot exists already. I won't overwrite it." echo "Delete the subdirectory before running." exit 1 fi mkdir tftpboot # Mount the ISO. # FIXME: would be better if we had better mountpoints CDMNT=$(mktemp -d /media/cdtmp.XXXXXX) mount -o loop "$ISO" $CDMNT || exitclean trap exitclean SIGINT SIGTERM # Does it look like an ISO? if [ ! -d $CDMNT/isolinux -o ! -f $CDMNT/isolinux/initrd0.img ]; then echo "The ISO image doesn't look like a LiveCD ISO image to me." exitclean fi # Create a cpio archive of just the ISO and append it to the # initrd image. The Linux kernel will do the right thing, # aggregating both cpio archives (initrd + ISO) into a single # filesystem. ISOBASENAME=`basename "$ISO"` ISODIRNAME=`dirname "$ISO"` ( cd "$ISODIRNAME" && echo "$ISOBASENAME" | cpio -H newc --quiet -o ) | gzip -9 | cat $CDMNT/isolinux/initrd0.img - > tftpboot/initrd0.img # Kernel image. cp $CDMNT/isolinux/vmlinuz0 tftpboot/vmlinuz0 # pxelinux bootloader. if [ -f /usr/share/syslinux/pxelinux.0 ]; then cp /usr/share/syslinux/pxelinux.0 tftpboot elif [ -f /usr/lib/syslinux/pxelinux.0 ]; then cp /usr/lib/syslinux/pxelinux.0 tftpboot else echo "Warning: You need to add pxelinux.0 to tftpboot/ subdirectory" fi # pxelinux configuration. mkdir tftpboot/pxelinux.cfg cat > tftpboot/pxelinux.cfg/default <<EOF DEFAULT pxeboot TIMEOUT 20 PROMPT 0 LABEL pxeboot KERNEL vmlinuz0 APPEND initrd=initrd0.img root=/$ISOBASENAME rootfstype=iso9660 rootflags=loop ONERROR LOCALBOOT 0 EOF # All done, clean up. umount $CDMNT rmdir $CDMNT echo "Your pxeboot image is complete." echo echo "Copy tftpboot/ subdirectory to /tftpboot or a subdirectory of /tftpboot." echo "Set up your DHCP, TFTP and PXE server to serve /tftpboot/.../pxeboot.0" echo echo "Note: The initrd image contains the whole CD ISO and is consequently" echo "very large. You will notice when pxebooting that initrd can take a" echo "long time to download. This is normal behaviour." exit 0В течці, де лежить звантажений образ, пишемо щось на зразок:
livecd-iso-to-pxeboot Fedora-14-i386-netinst.isoОтримуємо:
The ISO image doesn't look like a LiveCD ISO image to me. Cleaning up to exit...Хм… То є зле — адже це справжнісінький диск для встановлення. Починаємо копатися в скрипті. Для початку зробимо його локальну копію:
cp -p `which livecd-iso-to-pxeboot` ./Відриваємо текст скрипта і що ж бачимо?
# Does it look like an ISO? if [ ! -d $CDMNT/isolinux -o ! -f $CDMNT/isolinux/initrd0.img ]; then echo "The ISO image doesn't look like a LiveCD ISO image to me." exitclean fiАга! В образі є тека isolinux, проте initrd-образ має назву не initrd0.img, a initrd.img. Міняємо всі збіги initrd0.img, на initrd.img , а до пари й vmlinuz0 на vmlinuz і маємо щастя.
./livecd-iso-to-pxeboot Fedora-12-i386-netinst.isoНалаштовуємо tftp-сервер:
Якщо у Вас раніше не використовувався tftpd, то можна просто скопіювати вміст створеної скриптом теки tftpboot до теки, яку використовує tftpd (у мене це /tftpboot).
cp -pRv tftpboot/* /tftpboot/Мій tftpd запускається з-під xinetd. Конфіг-файл /etc/xinetd.d/tftp має вигляд:
# default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -vvvv -p -c -u ftp -s /tftpboot disable = no enable = yes per_source = 11 cps = 100 2 flags = IPv4 }Звісно ж, не забуваємо включити та запустити сам суперінетдемон:
chkconfig xinetd on service xinetd startДозволяємо з’єднання до нашого tftp-сервера (обов’язково прилаштуйте під свої потреби!) в /etc/sysconfig/iptables:
#dhcp -A INPUT -m udp -p udp --dport 67 -j ACCEPT #tftpd -A INPUT -m udp -p udp --dport 69 -j ACCEPTНалаштовуємо DHCP-сервер:
Мінімально потрібна конфігурація сервера (cat /etc/dhcpd.conf):
subnet 192.168.0.0 netmask 255.255.255.0 { # --- default gateway option routers 192.168.0.1; option subnet-mask 255.255.255.0; option nis-domain "localdomain"; option domain-name "localdomain"; option domain-name-servers 192.168.0.1; option time-offset 7200; # my Time option ntp-servers 192.168.0.1; default-lease-time 60; max-lease-time 600; boot-unknown-clients off; host test-pc { # вписуємо МАС-адресу машини для завантаженння hardware ethernet 00:1d:00:00:00:10; # адреса для машини fixed-address 192.168.0.2; # адреса tftp-сервера next-server 192.168.0.1; # файл для загрузки з сервера filename "pxelinux.0"; } }При потребі, звісно, підправте мережеві налаштування. Отже, DHCP-сервер (який живе на адресі 192.168.0.1) видасть машині з МАС-адресою 00:1d:00:00:00:10 адресу 192.168.0.2 і передасть, що файл для завантаження називається pxelinux.0 і скачати його слід з tftp-сервера з адресою 192.168.0.1.
Включивши в BIOS завантаження з мережі і перегрузившись, наша тестова машина отримає мережеві налаштування і завантажить по мережі з tftp-сервера початковий образ netinstall, так, неначе цей самий образ був би записаний на диск і вставлений в цю машину.
При бажанні — можна всяко-разно крутити як налаштування DHCP, так і налаштування pxe, для отримання такого результату, який Вам потрібен. Зокрема, можна створити під кожну окрему машину окремий файл конфігурації pxeboot і передавати ядру Linux необхідні параметри, як описано, наприклад в Графічна інсталяція Fedora Linux на dedicated server хостингу. Таким чином можна організувати, наприклад, встановлення типових конфігурацій в корпоративній мережі та багато інших смакот…