Эта процедура делает "Сервер" уязвимым с точки зрения безопасности и потенциально опасным для других компьютеров. Лучшим решением будет держать сервер в своем собственном вилане недоступном ни для каких других машин кроме "Клиентов".
Терминология:
Сервер - это компьютер обеспечивающий сервисы сетевой загрузки и инсталляции.
Клиент - это компьютер на котором должна быть установлена ОС FreeBSD.
Клиент должен поддерживать PXE загрузку.
Настройка сервера.
Сетевой интерфейс сервера, который входит в вилан с клиентами имеет такие настройки:
# ifconfig lnc1
lnc1: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
inet 10.0.1.1 netmask 0xffffff00 broadcast 10.0.1.255
ether 00:0c:29:2f:f4:99
1. Для начала нужно установить сервер
DHCP. Берем здесь
/usr/ports/net/isc-dhcp3-server.
При установке порта можно либо оставить все опции по умолчанию либо снять все.
Пример конфигурационного файла
/usr/local/etc/dhcpd.conf:
dhcpd.conf
authoritative;
option subnet-mask 255.255.255.0;
filename "/boot/pxeboot";
option root-path "10.0.1.1:/tftpboot";
ddns-update-style none;
option domain-name "test.com";
server-name "DHCPserver";
server-identifier 10.0.1.1;
default-lease-time 7200;
max-lease-time 7200;
subnet 10.0.1.0 netmask 255.255.255.0 {
next-server 10.0.1.1;
range 10.0.1.29 10.0.1.200;
}
Добавим в
/etc/rc.conf строку
dhcpd_enable="YES"
2. Настроим сервис
tftp. Воспользуемся стандартным, обслуживающимся
inetd.
Cоздадим директорию
/tftpbootРаскоментируем в
/etc/inetd.conf строку
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
Ну и добавим в
/etc/rc.conf строку
inetd_enable="YES"
3.Настроим сервис
nfs.
В
/etc/rc.conf:
nfs_server_enable="YES"
И добавим в
/etc/exports строку:
/tftpboot -maproot=root -network 10.0.1.0 -mask 255.255.255.0
Наши сервисы настроены но не запущены.
Стартуем ручками либо перезагружаем сервер.
Копиируем содержимое cdrom-а с дистрибутивом в
/tftpboot.
Для этого лучше воспользоваться tar-ом:
# mount /cdrom
# cd /cdrom
# ( tar --create --file=- * ) | ( cd /tftpboot ; tar --extract --file=- )
Это сбережет место на диске.
На этом этапе клиент уже может загружаться с сервера и инсталлироваться в диалоговом режиме.
Автоматизации процесса инсталляции мы добъемся с помощью написания файла сценария для installer-а, а именно
install.cfg. Подробней с правилами и синтаксисом его заполнения можно ознакомиться в соответствующей странице мануала
(sysinstall(8)).
Вот пример моего файла:
# Turn on extra debugging.
debug=YES
# Ok, this ought to turn off ALL prompting, don't complain to me that you
# lost a machine because you netbooted it on the same subnet as this
# box
nonInteractive=YES
noWarn=YES
tryDHCP=YES
################################
# My host specific data
hostname=client
domainname=test.com
# DHCP does this for us
#nameserver=10.0.0.1
#defaultrouter=10.0.0.1
#ipaddr=DHCP
#netmask=255.255.255.0
################################
################################
# Which installation device to use
nfs=10.0.1.1:/tftpboot
netDev=lnc0
tryDHCP=YES
mediaSetNFS
################################
################################
# Select which distributions we want.
#dists= base kernels dict doc man
#distSetCustom
distSetUser
################################
################################
# Now set the parameters for the partition editor on sd0.
disk=ad0
partition=all
bootManager=standard
diskPartitionEditor
#diskPartitionWrite
################################
################################
# All sizes are expressed in 512 byte blocks!
#
# Size in Mb is calculated in that way: size_in_mb=size_in_blocks*1024*1024/512
#
ad0s1-1=ufs 524288 /
ad0s1-2=swap 524288 none
ad0s1-3=ufs 524288 /var 1
ad0s1-4=ufs 524288 /tmp 1
ad0s1-5=ufs 0 /usr 1
# Let's do it!
diskLabelEditor
#diskLabelCommit
# OK, everything is set. Do it!
installCommit
#Here we can setup all required packages
#Here is our special customized package installation
package=custom_package
packageAdd
Для того чтобы внедрить
install.cfg в дистрибутив, чтобы он автоматически скармливался инсталлеру, проделаем следующее.
# cd /tftpboot/boot
# gunzip mfsroot.gz
Сассоциируем метаустройство с файлом и смонтируем:
# mdconfig -a -t vnode -f mfsroot -u 0
# mount /dev/md0 /mnt
# cp $WORKDIR/install.cfg /mnt
# umount /mnt
# mdconfig -d -u 0
# gzip mfsroot
Все пакеты, которые должны быть установлены инсталлером автоматически, то есть те, которые указаны в конце файла
install.cfg, должны быть скопированы в
/tftpboot/packages/All. Важно не забыть добавить строки описывающие эти пакеты в файл
/tftpboot/packages/INDEX.
Это должна быть строка вида:
package_name-1.0||/|Package Description||youremail@your.domain||||
Теперь рассмотрим такой замечательный механизм как пользовательский постинсталляционный пакет.
В моем файле
install.cfg он упоминался, как
custom_package.
Основная идея состоит в том, чтобы этот пакет устанавливал и настраивал все, чтомы захотим после инсталляции системы и пакетов приложений. Это могут быть системные файлы такие как rc.conf, master.passwd, подготовленные конфигурационные файлы установленных приложений. Кроме того при своей установке этот пакадж может выполнить системные комманды посредством применения преинсталляционного и постинсталляционного шелл-скриптов.
Функциональность этого механизма ограничена только вашей фантазией и перечнем задач.
Для облегчения и автоматизации процесса генерации пакета используем скрипт
pkgmaker.sh. Вот его содержимое:
#!/bin/sh
# $Wintelcom: src/freebsd/pxe/doc/pkgmaker.sh,v 1.1 2000/07/14 12:42:05 bright Exp $
# $FreeBSD: doc/en_US.ISO8859-1/articles/pxe/pkgmaker.sh,v 1.1 2003/06/17 08:21:40 alfred Exp $
PKGNAME=${1}
PKGDIR=`pwd`/${PKGNAME}/
pkg_create -i ${PKGDIR}pre -I ${PKGDIR}post -f ${PKGDIR}PLIST -s ${PKGDIR} -p / -d ${PKGDIR}DESCR -c ${PKGDIR}COMMENT ${PKGNAME}.tgz
Для более глубокого понимания сути процесса рекомендуется вдемчивое прочтение соответствующей страницы мануала
(pkg_create(1)).
В рабочем директории создатим директорий для файлов пакета:
# cd $WORKDIR
# mkdir custom_package
Создаем там набор служебных файлов
# ls cusom_package
COMMENT DESCR PLIST post pre
Названия COMMENT и DESCR говорят сам за себя - заполняем их по своему усмотрениюВ файл PLIST вносим список файлов которые должны устанавливаться в системе при установке пакета:
# cat ./custom_package/PLIST
etc/rc.conf
etc/master.passwd
Создаем в директории пакета копию дерева файловой системы содержащей файлы, которые будут устанавливаться и копируем туда эти файлы:
# mkdir ./custom_package/etc
# cp /etc/rc.conf ./custom_package/etc
# cp /etc/master.passwd ./custom_package/etc
# ls custom_package/etc
master.passwd rc.conf
Ну а файлы post и pre делаем исполняемыми и вносим туда сценарии, которые должны быть выполнены до и после установки пакета, например:
# cat ./custom_package/post
#/bin/sh
/sbin/reboot
Теперь находясь в рабочем директории, содержащем директорий пакета запускаем скрипт pkgmaker.sh, с соответствующим имени директория пакета аргументом:
# ./pkgmaker.sh custom_package
В рабочем директории получаем пает custom_package.tgz Поступаем с ним также, как со всеми другими пакетами.
Ну вот фактически все.
Подключаем клиент интерфейсом в вилан, где находится сервер.
В BIOS клиента выставляем опцию загрузки по сети.
Список Источников.
При написании данного материала использовались следующие материалы:
1.
FreeBSD Jumpstart Guide.
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/pxe/article.html2.
Quick and Dirty PXE Boot Setup for FreeBSD 4.x and later.
http://people.freebsd.org/~dwhite/pxeboot.html3.
Пример инсталляции FreeBSD c сетевого диска, через NFS (nfs freebsd install boot pxe).
http://www.opennet.ru/base/sys/frebsd_inst_nfs.txt.html4.
Установка FreeBSD 6.0 по сети (freebsd remote dhcp boot install pxe diskless).
http://www.opennet.ru/base/sys/freebsd_remote_install.txt.html5.
Примеры install.cfg для автономной установки FreeBSD.
http://www.opennet.ru/base/sys/freebsd_install_cfg.txt.html