Устанавливаем и настраиваем DHCP-сервер
# portinstall isc-dhcp3-server (из опций указывем только WITH_DHCP_PARANOIA)
В /etc/rc.conf добавляем:
# for PXE
dhcpd_enable="YES"
dhcpd_ifaces="em0"
dhcpd_chroot_enable="YES"
В /usr/local/etc/dhcpd.conf пишем
option domain-name “example.ru”;
option domain-name-servers 192.168.1.2, 192.168.1.3;
authoritative;
ddns-update-style none;
log-facility local4;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
use-host-decl-names on;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.1.100 192.168.1.200;
# адрес сервера на котором работает инсталлятор
next-server 192.168.1.5;
filename "pxeboot";
option root-path "192.168.1.5:/spool/pxe";
}
В /etc/syslog.conf добавляем
local4.* /var/log/dhcpd.log
В /etc/newsyslog.conf
/var/log/dhcpd.log 644 3 900 * JC
/etc/rc.d/syslogd reload
Копируем содержимое install CD в папку на диске
mdconfig -a -f /path/to/dist.iso
mount_cd9660 /dev/md0 /mnt/cdrom/
cp -r /mnt/cdrom/ /spool/pxe
tftp-сервер
mkdir /var/tftproot
cp /spool/pxe/boot/pxeboot /var/tftpboot
chown nobody /var/tftpboot
chmod 640 /var/tftpboot
В /etc/hosts.allow пишем
# tftp server for remote install
tftpd: 192.168.1.0/255.255.255.0 : allow
tftpd: ALL : deny
В /etc/inetd.conf пишем
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /var/tftpboot -u nobody
/etc/rc.d/inetd reload
NFS сервер
В /etc/exports пишем
/spool/pxe -ro -network=192.168.1.0 -mask=255.255.255.0
В /etc/rc.conf
nfs_server_enable="YES"
rpcbind_enable="YES"
И запускаем все это
rpcbind
nfsd -u -t -n 4
mountd -r
# showmount -e
Exports list on localhost:
/spool/pxe 192.168.1.0
Редактируем loader.conf
Примерно так:
# cat > /spool/pxe/boot/loader.conf
mfsroot_load="YES"
mfsroot_type="mfs_root"
mfsroot_name="/boot/mfsroot"
autoboot_delay="5"
vfs.root.mountfrom="ufs:/dev/md0c"
Ключевым моментом является наличие последней строчки.
В принципе после всего этого можно уже ставить систему.
install.cfg
Для того, чтобы не отвечать вручную на все вопросы sysinstall это можно автоматизировать составив файл install.cfg
Файл install.cfg должен находиться внутри mfsroot.gz, скопировать его туда можно так:
cd /spool/pxe
gzip -d boot/mfsroot.gz
mdconfig -a -t vnode -f boot/mfsroot -u 9
mount /dev/md9 /mnt/tmp
cp install.cfg /mnt/tmp
umount /mnt/tmp
mdconfig -d -u 9
gzip boot/mfsroot
(этот набор команд лучше оформить в виде Makefile)
Пример install.cfg
Чтобы при установке ставилися набор пакетов их нужно создать:
cd /spool/pxe/packages/All/
pkg_crete -b bash-3.1.10
pkg_crete -b sudo-1.6.8.12_1
pkg_crete -b smartmontools-5.33_5
И прописать из в INDEX, например таким скриптом:
#!/bin/sh
dir=/spool/pxe/packages
cd $dir/All
rm $dir/INDEX
for file in *; do
echo ${file%.tgz}
egrep ^${file%.tgz} /usr/ports/INDEX-6 >> $dir/INDEX
done
Недостатки данного способа
-
Нужно прописывать в install.cfg имя интерфейса и имя диска, что неудобно, если железо не однотипное.
-
Нельзя установить систему на gmirror
-
Нужно прописывать полные (включая версию) имена всех устанавливаемых пакетов, после их обновления приходится прописывать все в install.cfg заново.
-
Конфиги, которые нужно скопировать на новый сервер нужно оформлять в виде пакета, что повышает трудоемкость задачи.