[Из песочницы] Установка FreeBSD по сети (PXE) с linux-сервера (dnsmasq + nfs)

Возникла потребность установить FreeBSD на ноутбук. Так как ноутбук древний, он не поддерживает загрузку с флэшки по usb. Болванки под рукой также не оказалось, было решено опробовать установку через PXE (Preboot eXecution Environment). Погуглив, я нашел несколько статей на эту тему, однако в них описывается установка linux с linux-сервера, либо FreeBSD с FreeBSD-сервера. Я не претендую на создание какого-то особенного метода, просто выкладываю свою инструкцию по быстрому развертыванию FreeBSD 10.1 по сети.Теоретическая часть PXE-загрузки хорошо описана в статье: http://xgu.ru/wiki/PXEИтак, приступим. Нам понадобится: dhcp, tftp, nfs.

В качестве сервера выступит компьютер с установленным Debian 7. У меня на нем уже был установлен dnsmasq, который является одновременно dhcp- и dns-сервером. Это очень удобно для небольшой домашней сети, чтобы не поднимать отдельно dhcp и bind. К тому же в dnsmasq есть свой tftp-сервер, так что он идеально подходит для нашей задачи, как говорится — «всё в одном флаконе». Остается установить nfs-сервер и всё это дело сконфигурировать. PXE-загрузчик имеется в образе дистрибутива FreeBSD.

Устанавливаем нужные пакеты:

apt-get install dnsmasq nfs-kernel-server Скачиваем iso-образ FreeBSD с официального сайта freebsd.org. Я использовал минимальный bootonly-образ: wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-i386-bootonly.iso Монтируем его: mount -o loop FreeBSD-10.1-RELEASE-i386-bootonly.iso /mnt Копируем все файлы образа в директорию, которая будет доступна через nfs: cp -a /mnt /srv/nfs/freebsd Добавляем nfs-шару в /etc/exports /srv/nfs/freebsd 192.168.0.0/24(rw, sync, no_subtree_check) Перезапускаем nfs: service nfs-kernel-server restart Теперь требуется кое-что подправить:

Закомментируем или удалим строчку в /srv/nfs/freebsd/etc/fstab, чтобы система при загрузке не пыталась монтировать диск (образ предназначен для записи на болванку), а смонтировала в качестве корневой файловой системы нашу nfs-шару:

# /dev/iso9660/10_1_RELEASE_I386_BO / cd9660 ro 0 0 Удаляем символьную ссылку /srv/nfs/freebsd/etc/resolv.conf, которая ссылается на несуществующий файл /srv/nfs/freebsd/tmp/bsdinstall_etc/resolv.conf. По идее, адрес dns-сервера должен был быть получен по dhcp и записан в этот файл установщиком FreeBSD при запуске. Однако этого не происходит: установщик создает пустой файл, а если файл уже создан, затирает его. Поэтому вместо симлинка создаем новый файл /srv/nfs/freebsd/etc/resolv.conf и прописываем в него адрес своего dns-сервера: nameserver 192.168.0.101 Редактируем файл /etc/dnsmasq.conf, привожу только те опции, которые требуются для решения нашей задачи, т.е. dhcp+tftp без dns: interface=eth0 #интерфейс, на котором слушаются dhcp-запросы dhcp-range=192.168.0.200,192.168.0.250,12h #Диапазон выдаваемых ip-адресов и время аренды dhcp-option=17,/srv/nfs/freebsd/ #Указываем корень для nfs dhcp-boot=/srv/nfs/freebsd/boot/pxeboot #Указываем путь к PXE-загрузчику enable-tftp #Включаем встроенный tftp-сервер tftp-root=/srv/nfs/freebsd/ #Указываем корень tftp Перезапускаем dnsmasq: service dnsmasq restart Вот собственно и всё. Заходим в биос, выбираем порядок загрузки с LAN (PXE). Сетевая карта загружает pxe-loader, затем по tftp копируется и запускается ядро, монтируется корневая файловая система через nfs, запускается установщик FreeBSD, а далее — стандартная установка FreeBSD. Не забудьте только по завершению установки изменить порядок загрузки в биосе на прежний.

© Habrahabr.ru