====== Настройка сервера для установки FreeBSD по сети ====== ===== Устанавливаем и настраиваем 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) Пример {{freebsd:install.cfg|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 заново. * Конфиги, которые нужно скопировать на новый сервер нужно оформлять в виде пакета, что повышает трудоемкость задачи.