Fork me on GitHub

The WebDevil

Enjoy development

Когда-то давным-давно я работал админом-помощником в университете. И были у нас компы без 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:

apt-get install tftp-hpa tftpd-hpa

и потом он скажет что добавил в конфиг inetd. Я же предпочитаю xinetd, и для него конфиг приходится подправить.
Да, и корень tftp-сервера я делаю не в /var/lib/tftpboot а в /tftpboot:

# 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
}

Вот так. Кстати, конфиг без правок подходит и для 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 показался мне более предпочтительным, и я использовал его.

# cat /etc/exports
...
/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
Да-да, будет структура вида:

# 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

В файле /tftpboot/ploplinux/pxelinux.cfg/default нужно внести некоторые правки:

# 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

Собственно, правки – указание IP сервера, с которого все потянется.
Теперь, если все правильно сделано, удаленный компьютер сможет загрузиться с этим линухом. А дальше – дело техники.

ЗЫ: а с USB у меня пока загрузиться не получилось – наверное в такой час пропустил какой-то шаг…

Comments are closed.