Posterous theme by Cory Watilo

Linux pxe boot

Когда-то давным-давно я работал админом-помощником в университете. И были у нас компы без cdrom, со всем встроеным. И надо было туда поставить форточки и весь софт для учебных классов. Столкнулся с проблемой =) USB-CDROM тогда взять было негде, и было две мысли - USB boot и PXE boot. Последнее - это сетевая загрузка, многие интегрированые сетевые чипы могут ее осилить, остальным же (это платки за 5$) нужен чип с биосом. С первым с горем пополам что-то получалось, а со вторым - нет. А загрузившись в линух можно было уже развернуть образ на винт... Так вот подобная задача встала передо мной снова - массовая установка FreeBSD с одинаковым конфигом. Ну, лишь с небольшими поправками. Погуглив я наткнулся на PLoP Linux - дистрибутивчик напичкан всем полезным, о чем можно подумать - ntfs-3g, partimage, возможность бута откуда угодно. Попробовал сделать PXE-boot - все-равно есть сервер, который раздает домашние директории по NFS. Сразу скажу - я ставил tftpd, но он не поддерживает операцию tsize - потому для PXE-boot не годится. Но для этого подходит tftpd-hpa. Итак, устанавливаем tftpd-hpa: [cc lang="bash"] apt-get install tftp-hpa tftpd-hpa [/cc] и потом он скажет что добавил в конфиг inetd. Я же предпочитаю xinetd, и для него конфиг приходится подправить. Да, и корень tftp-сервера я делаю не в /var/lib/tftpboot а в /tftpboot: [cc lang="bash"] # cat /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 } [/cc] Вот так. Кстати, конфиг без правок подходит и для tftpd, но повторюсь - tftpd не работает для PXE-boot. Далее - у нас должен быть установлен DHCP-сервер. При загрузке PXE запросит у него IP и вместе с тем получит параметры для дальнейшей загрузки. А из параметров к нему надо добавить вот что: [cc lang="bash"] ... allow booting; allow bootp; ... subnet 192.168.0.0 netmask 255.255.255.0 { ... next-server 192.168.0.1; filename "/ploplinux/pxelinux.0"; ... } [/cc] Ок, получим файл для загрузки и нужно будет грузить откуда-то систему. Plop-linux позволяет загружать ее с smb и nfs. NFS показался мне более предпочтительным, и я использовал его. [cc lang="bash"] # cat /etc/exports ... /tftpboot/ploplinux (ro) [/cc] Ок, теперь нужно положить все нужные файлы в /tftpboot/ploplinux. Вот эти файлы: http://download.plop.at/files/ploplinux/ploplinux-v3.7.1.tar.gz http://download.plop.at/plop/ploplinux/ploplinux-v3.7.1-pxeboot.tgz Да-да, будет структура вида: [cc lang="bash"] # ls -l /tftpboot/ploplinux/ total 5345 -rw-r--r-- 1 root root 847 2008-01-25 14:43 boot.msg -rw-r--r-- 1 root root 3299016 2008-01-25 13:58 bzimage -rw-r--r-- 1 root root 1960996 2008-01-25 16:02 initrfs.gz -rw-r--r-- 1 root root 94356 2004-11-11 17:00 memtest drwxr-xr-x 3 root root 288 2008-01-25 09:07 ploplinux -rw-r--r-- 1 root root 42652 2008-01-25 13:07 plpbt.com -rw-r--r-- 1 root root 40113 2008-01-25 13:09 plpinst.com drwxr-xr-x 3 root root 96 2007-12-10 09:02 pluspacks -rw-r--r-- 1 root root 13940 2007-06-10 17:51 pxelinux.0 drwxr-xr-x 2 root root 152 2008-02-01 20:49 pxelinux.cfg [/cc] В файле /tftpboot/ploplinux/pxelinux.cfg/default нужно внести некоторые правки: [cc lang="bash"] # cat /tftpboot/ploplinux/pxelinux.cfg/default default linux display boot.msg timeout 100 prompt 1 label linux kernel bzimage append initrd=initrfs.gz vga=1 nfsmount=192.168.0.1:/tftpboot/ploplinux label linuxfb kernel bzimage append initrd=initrfs.gz vga=0x318 nfsmount=192.168.0.1:/tftpboot/ploplinux label hd localboot 0x80 append - label plp kernel plpbt.com append - label plpinst kernel plpinst.com append - label memtest kernel memtest [/cc] Собственно, правки - указание IP сервера, с которого все потянется. Теперь, если все правильно сделано, удаленный компьютер сможет загрузиться с этим линухом. А дальше - дело техники. ЗЫ: а с USB у меня пока загрузиться не получилось - наверное в такой час пропустил какой-то шаг...