DTop CMS - система управления контентом
Текущая версия: 3.4.1


© 2002-2018

Статья опубликована: 2013.12.03
Последние изменения: 2013.12.05

FreeBSD - развертывание сервера для сетевой загрузки


В этой статье описывается создание платформы для сетевой загрузки на сервере под управлением FreeBSD. Что с этой платформой делать дальше - зависит только от вашей фантазии. Например, я полдня провозился с настройкой thinstation для загрузки по сети и дальнейшей работы с виртуальной машиной Debian по vnc, а прямо сейчас устанавливаю по сети Debian, так как не нашел болванку, чтобы прожечь на неё установочный iso. Для этого мне понадобилось скачать архив в 13 мегабайт с сайта Debian и распаковать его в корень tftp-сервера предварительно удалив оттуда файлы от thinstation.

  • Использованные версии ПО:
    # uname -sr
    FreeBSD 8.4-STABLE
    

  • Как работает загрузка по сети на примере thinstation

    • Сетевая карта по протоколу PXE получает с DHCP сервера, кроме прочих данных ещё и IP-адрес сервера TFTP, на котором лежат образы для загрузки, и имя образа, который нужно загрузить.
    • Клиент подключается к TFTP серверу и скачивает с него файл загрузчика PXE, имя которого было получено с DHCP-сервера.
    • Полученный PXE загрузчик запускается и скачивает с TFTP сервера конфигурационный файл, в котором прописаны имена файлов ядра ОС Linux - vmlinuz и образа файловой системы - initrd. Эти файлы скачиваются и управление передается ядру Linux.
    • После распаковки и загрузки ядра Linux с подмонтированным образом файловой системы, Thinstation снова обращается к TFTP серверу для скачивания необходимых ему конфигурационных файлов, где записаны адреса терминальных серверов, к которым нужно подключаться, после чего запускает нужный терминальный клиент и ожидает от пользователя ввода логина с паролем для подключения.

  • Конфигурация DHCP

    Установка и базовая настройка DHCP

    Дополнительная настройка в файле /usr/local/etc/dhcpd.conf.
    В начале файла добавляем:
    allow booting;
    allow bootp;
    
    В блок shared-network добавляем строчки с tftp-сервером и именем файла для загрузки:
    shared-network NAME {
      # тут существующие настройки
      # ...........
      #
    
      next-server 192.168.1.2;
      filename "pxelinux.0";
    }
    

  • Установка и настройка tftp-hpa

    СРАЗУ ХОЧУ СКАЗАТЬ: tftp-hpa под FreeBSD отказался отдавать файлы для PXE, так как перед get ему нужна команда binary, а PXE-карты сразу посылают get. Клиент при этом выдает вот такую ошибку:
    tftp> get pxelinux.0
    Got ERROR packet: Unsupported option(s) requested
    Error code 2048: Unsupported option(s) requested
    
    Танцы с бубном и копания в интернетах не помогли. Но так как статья про установку и настройку tftp-hpa к тому времени уже была написана, то пусть остается, может быть потом все заработает.

    Устанавливаем:
    # cd /usr/ports/ftp/tftp-hpa
    # make install clean
    
    Добавляем пользователя, группу, создаем директорию:
    # pw groupadd tftpd
    # pw useradd tftpd -c tftp_manager -d /nonexistent -g tftpd -s /usr/sbin/nologin
    # mkdir /var/tftp && chown tftpd:tftpd /var/tftp && chmod 750 /var/tftp
    
    /etc/rc.conf
    tftpd_enable="YES"
    tftpd_flags="-4 -u tftpd -s /var/tftp"
    
    Запускаем
    # /usr/local/etc/rc.d/tftpd start
    

  • Используем встроенный в FreeBSD tftpd

    С ним есть пара хитростей:
    • он не умеет работать как самостоятельный сервис и запускается через inetd;
    • не стоит менять директорию по умолчанию (/tftpboot), так как работать ни хрена не будет (File not found), но и ошибок о кривой директории вы тоже не увидите.

    Добавляем группу, пользователя, создаем директорию:
    # pw groupadd tftpd
    # pw useradd tftpd -c tftp_manager -d /nonexistent -g tftpd -s /usr/sbin/nologin
    # mkdir /tftpboot && chown tftpd:tftpd /tftpboot && chmod 750 /tftpboot
    
    Правим /etc/inetd.conf. У меня там все строчки закомментированы, поэтому задача была найти и раскомментировать строку с tftp
    tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot
    #tftp    dgram   udp6     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot
    
    Потом добавляем в /etc/rc.conf:
    inetd_enable="YES"
    
    Запускаем inetd
    /etc/rc.d/inetd start
    

    Всё, база для дальнейших экспериментов готова.