Ключевые слова:freebsd, jumpstart, install, boot, pxe, (найти похожие документы)
From: Евгений Мерлинский <bleno@ukr.net.>
Newsgroups: email
Date: Mon, 8 Feb 2008 14:31:37 +0000 (UTC)
Subject: FreeBSD Jumpstart руководство.
Хочу отметить, что я считаю себя скорее не автором, а творческим
переосмыслителем материалов, упоминающихся в конце данной статьи.
Данная статья не претендует на первичность и безусловную правильность.
Это просто попытка описать практическое решение задачи автоматизации
проуесса установки FreeBSD.
Задача:
-------
Организовать процесс полностью автоматической установки
операционной системы FreeBSD на N-ное количество однотипных серверов.
При этом, в автоматическом режиме должна также производиться установка
дополнительного програмного обеспечения (packages) и постинсталляционная
конфигурация системы.
Версия ОС как клиента так и сервера в нашем случае FreeBSD 6.3
Решение:
PXE-загрузка + автоматизация работы installer-а с помошью
конфигурационного файла install.cfg.
Предупреждение:
Эта процедура делает "Сервер" уязвимым с точки зрения
безопасности и потенциально опасным для других компьютеров. Лучшим
решением будет держать сервер в своем собственном вилане недоступном ни
для каких других машин кроме "Клиентов".
Терминология:
Сервер - это компьютер обеспечивающий сервисы сетевой загрузки и
инсталляции.
Клиент - это компьютер на котором должна быть установлена ОС 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.html
2. Quick and Dirty PXE Boot Setup for FreeBSD 4.x and later. http://people.freebsd.org/~dwhite/pxeboot.html
3. Пример инсталляции FreeBSD c сетевого диска, через NFS (nfs freebsd install boot pxe). http://www.opennet.dev/base/sys/frebsd_inst_nfs.txt.html
4. Установка FreeBSD 6.0 по сети (freebsd remote dhcp boot install pxe diskless). http://www.opennet.dev/base/sys/freebsd_remote_install.txt.html
5. Примеры install.cfg для автономной установки FreeBSD. http://www.opennet.dev/base/sys/freebsd_install_cfg.txt.html