Когда-то давным-давно я работал админом-помощником в университете. И были у нас компы без 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:
и потом он скажет что добавил в конфиг inetd. Я же предпочитаю xinetd, и для него конфиг приходится подправить.
Да, и корень tftp-сервера я делаю не в /var/lib/tftpboot а в /tftpboot:
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
}
Вот так. Кстати, конфиг без правок подходит и для tftpd, но повторюсь – tftpd не работает для PXE-boot.
Далее – у нас должен быть установлен DHCP-сервер. При загрузке PXE запросит у него IP и вместе с тем получит параметры для дальнейшей загрузки. А из параметров к нему надо добавить вот что:
allow booting;
allow bootp;
...
subnet 192.168.0.0 netmask 255.255.255.0 {
...
next-server 192.168.0.1;
filename "/ploplinux/pxelinux.0";
...
}
Ок, получим файл для загрузки и нужно будет грузить откуда-то систему. Plop-linux позволяет загружать ее с smb и nfs. NFS показался мне более предпочтительным, и я использовал его.
...
/tftpboot/ploplinux (ro)
Ок, теперь нужно положить все нужные файлы в /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
Да-да, будет структура вида:
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
В файле /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
Собственно, правки – указание IP сервера, с которого все потянется.
Теперь, если все правильно сделано, удаленный компьютер сможет загрузиться с этим линухом. А дальше – дело техники.
ЗЫ: а с USB у меня пока загрузиться не получилось – наверное в такой час пропустил какой-то шаг…