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 загрузку.
Настройка сервера.
Сетевой интерфейс сервера, который входит в вилан с клиентами имеет
такие настройки:
Наши сервисы настроены но не запущены.
Стартуем ручками либо перезагружаем сервер.
Копиируем содержимое 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
Сассоциируем метаустройство с файлом и смонтируем:
Все пакеты, которые должны быть установлены инсталлером автоматически,
то есть те, которые указаны в конце файла install.cfg, должны
быть скопированы в /tftpboot/packages/All. Важно не забыть
добавить строки описывающие эти пакеты в файл
/tftpboot/packages/INDEX.
Теперь рассмотрим такой замечательный механизм как пользовательский
постинсталляционный пакет.
В моем файле install.cfg он упоминался, как custom_package.
Основная идея состоит в том, чтобы этот пакет устанавливал и настраивал
все, чтомы захотим после инсталляции системы и пакетов приложений. Это
могут быть системные файлы такие как rc.conf, master.passwd,
подготовленные конфигурационные файлы установленных приложений. Кроме
того при своей установке этот пакадж может выполнить системные комманды
посредством применения преинсталляционного и постинсталляционного
шелл-скриптов.
Функциональность этого механизма ограничена только вашей фантазией и
перечнем задач.
Для облегчения и автоматизации процесса генерации пакета используем
скрипт pkgmaker.sh. Вот его содержимое:
Для более глубокого понимания сути процесса рекомендуется вдемчивое
прочтение соответствующей страницы мануала (pkg_create(1)).
В рабочем директории создатим директорий для файлов пакета:
# cd $WORKDIR
# mkdir custom_package
Создаем там набор служебных файлов
# ls cusom_package
COMMENT DESCR PLIST post pre
Названия COMMENT и DESCR говорят сам за себя - заполняем их по своему
усмотрениюВ файл PLIST вносим список файлов которые должны
устанавливаться в системе при установке пакета:
Ну а файлы 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.ru/base/sys/frebsd_inst_nfs.txt.html
4. Установка FreeBSD 6.0 по сети (freebsd remote dhcp boot install pxe diskless). http://www.opennet.ru/base/sys/freebsd_remote_install.txt.html
5. Примеры install.cfg для автономной установки FreeBSD. http://www.opennet.ru/base/sys/freebsd_install_cfg.txt.html