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 у меня пока загрузиться не получилось - наверное в такой час пропустил какой-то шаг...