Citrin's site

Персональный сайт Антона Южанинова

Инструменты пользователя

Инструменты сайта


freebsd:pxe_sysinstall

Настройка сервера для установки 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)

Пример 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 заново.
  • Конфиги, которые нужно скопировать на новый сервер нужно оформлять в виде пакета, что повышает трудоемкость задачи.
freebsd/pxe_sysinstall.txt · Последние изменения: 2008-09-28 14:18 UTC — citrin

.