Возникла потребность установить 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. Не забудьте только по завершению установки изменить порядок загрузки в биосе на прежний.
Автор: perfectus