Установка по сети

При установке по сети используются следующие компоненты PXE:

  1. DHCP-сервер.

    PXE-клиент запрашивает IP-адрес через DHCP. DHCP-сервер также предоставляет информацию о TFTP-сервере, с которого загружается образ ОС.

  2. TFTP-сервер.

    После получения IP-адреса и информации о TFTP-сервере, PXE-клиент подключается к TFTP-серверу для загрузки начального загрузчика iPXE.

  3. Загрузчик iPXE.

    Загрузчик загружает ядро ОС и необходимые модули, после чего передает управление системе.

Чтобы выполнить установку, необходимо подготовить инфраструктуру для хранения и получения начального загрузчика iPXE. Для этого на сервере, на котором установлен бэкенд продукта, выполните настройку:

  1. DHCP-сервера — отвечает за распределение и управление доступными IP-адресами и другими сетевыми параметрами, а также предоставляет пользовательскую конфигурацию сети.

  2. (Альтернативный шаг) DHCP-Proxy — отвечает за передачу запросов к серверу.

    DHCP-Proxy используется, если на стороне заказчика, по какой-либо причине невозможно внесение изменений в настройки DHCP-сервера. В этом случае необходимо развернуть DHCP-proxy (при его отсутствии) и вносить изменения в его конфигурацию.

    Ниже приведены примеры конфигурации DHCP-сервера и DHCP-Proxy. В конфигурации предусмотрены условия для архитектур BIOS и UEFI. Для каждой архитектуры указываются свои файлы загрузчиков, которые будут загружаться через TFTP-сервер или HTTP-репозиторий. При этом в инфраструктуре заказчика должны быть развернуты TFTP-сервер и/или HTTP-репозиторий, в зависимости от используемой архитектуры (BIOS или UEFI).

    Также в примере используются переменные:

    • ${osmax_provisioner_base_url} — актуальная конечная точка (endpoint) модуля osmax-provisioner для получения стартового скрипта начального загрузчика;

      Для получения стартового скрипта загрузчика iPXE указан путь к методу v1/boot_loaders/ipxe/config?templateSlug={templateSlug}, где в качестве значения атрибута templateSlug, используется уникальное системное имя шаблона конфигурационного файла.

    • ${fqdn_tftp_server} — fqdn поднятого TFTP-сервера, на котором хранится файл начального загрузчика iPXE;

    • ${fqdn_http_repo}- fqdn HTTP-репозитория, на котором хранится файл начального загрузчика iPXE.

      Конфигурация DHCP-сервера:

      # cat /etc/dhcp/dhcpd.conf
      # базовые DHCP-опции
      option domain-name "wd2.local";
      option domain-name-servers 192.168.11.10;
      default-lease-time 7776000;
      max-lease-time 7776000;
      option ntp-servers 192.168.0.2;
      option routers 192.168.11.10;
      option ntp-servers 192.168.0.2;
      ddns-updates on;
      ddns-update-style interim;
      ignore client-updates;
      key dhcp-server.wd2.local. {
              algorithm hmac-md5;
              secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
      }
      
      # Определение формата опции 93
      # При работе без DHCP-proxy раскомментировать
      #option client-architecture code 93 = unsigned integer 16;
      
      # Настройка сегмента сети
      subnet 192.168.11.0 netmask 255.255.255.0 {
          range 192.168.11.100 192.168.11.200;
      # При работе без DHCP-proxy раскомментировать блок
      ## Определение архитектуры клиента:
      ## Определение архитектуры DHCP-клиента как iPXE
      #    if exists user-class and option user-class = "iPXE" {
      ## Путь до iPXE-инструкции для iPXE-загрузчика
      #        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
      ## Определение архитектуры DHCP-клиента как UEFI HTTP
      #    } elsif option client-architecture = encode-int ( 16, 16 ) {
      ## Путь до ipxe-загрузчика для UEFI
      #        filename "${fqdn_http_repo}/ipxe.efi";
      #        option vendor-class-identifier "HTTPClient";
      ## Определение архитектуры DHCP-клиента как BIOS
      #    } elsif option client-architecture = 00:00 {
      ## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
      #        filename "undionly.kpxe";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Определение архитектуры DHCP-клиента как UEFI
      #    } elsif option client-architecture = 00:09 {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Определение архитектуры DHCP-клиента как UEFI
      #    } elsif option client-architecture = 00:07 {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Если архитектура не определена, отдавать iPXE-загрузчик для UEFI
      #    } else {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      #    }
      
      # базовые DHCP-опции
          ddns-domainname "wd2.local";
          ddns-rev-domainname "in-addr.arpa";
      
          zone 11.168.192.in-addr.arpa. {
              primary 127.0.0.1;
              key dhcp-server.wd2.local.;
              }
      }

      Конфигурация DHCP-сервера c доверенной установкой:

      # cat /etc/dhcp/dhcpd.conf
      # базовые DHCP-опции
      option domain-name "wd2.local";
      option domain-name-servers 192.168.11.10;
      default-lease-time 7776000;
      max-lease-time 7776000;
      option ntp-servers 192.168.0.2;
      option routers 192.168.11.10;
      option ntp-servers 192.168.0.2;
      ddns-updates on;
      ddns-update-style interim;
      ignore client-updates;
      key dhcp-server.wd2.local. {
              algorithm hmac-md5;
              secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
      }
      
      # Определение формата опции 93
      # При работе без DHCP-Proxy раскомментировать
      #option client-architecture code 93 = unsigned integer 16;
      
      # настройка сегмента сети
      subnet 192.168.11.0 netmask 255.255.255.0 {
          range 192.168.11.100 192.168.11.200;
      # При работе без DHCP-Proxy раскомментировать блок
      ## Определение архитектуры клиента:
      ## Определение архитектуры DHCP-клиента как iPXE
      #    if exists user-class and option user-class = "iPXE" {
      - ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу http)
      + ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу https)
      #        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
      ## Определение архитектуры DHCP-клиента как UEFI HTTP
      #    } elsif option client-architecture = encode-int ( 16, 16 ) {
      ## Путь до ipxe-загрузчика для UEFI
      #        filename "${fqdn_http_repo}/ipxe.efi";
      #        option vendor-class-identifier "HTTPClient";
      ## Определение архитектуры DHCP-клиента как BIOS
      #    } elsif option client-architecture = 00:00 {
      ## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
      #        filename "undionly.kpxe";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Определение архитектуры dhcp-клиента как UEFI
      #    } elsif option client-architecture = 00:09 {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Определение архитектуры DHCP-клиента как UEFI
      #    } elsif option client-architecture = 00:07 {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      ## Если архитектура не определена отдавать iPXE-загрузчик для UEFI
      #    } else {
      ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
      #        filename "ipxe.efi";
      ## Адрес TFTP-сервера
      #        next-server ${fqdn_tftp_server};
      #    }
      
      # базовые DHCP-опции
          ddns-domainname "wd2.local";
          ddns-rev-domainname "in-addr.arpa";
      
          zone 11.168.192.in-addr.arpa. {
              primary 127.0.0.1;
              key dhcp-server.wd2.local.;
              }
      }

      Конфигурации DHCP-Proxy:

      cat /etc/dnsmasq.d/dhcp.conf
      # Основные настройки dnsmasq
      dhcp-no-override
      pxe-prompt="Press any key for boot menu", 2
      
      # Отключает DNS-службу, оставляя только DHCP-функциональность.
      port=0
      # Включает логирование DHCP-сообщений.
      log-dhcp
      
      # Создание меток для сопоставления архитектур
      dhcp-match=set:x86PC, option:client-arch, 0
      dhcp-match=set:BC_EFI, option:client-arch, 7
      dhcp-match=set:EFI _x86-64, option:client-arch, 9
      dhcp-match=set:HTTPClient,option:client-arch,16
      dhcp-match=set:iPXE,175
      
      # Загрузочные опции для iPXE-клиентов на основе меток
      dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
      dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
      dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
      dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
      dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
      dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
      # Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
      dhcp-range=192.168.11.100,proxy
      
      # DHCP option 93 | Client architecture
      # 0 Standard PC BIOS
      # 6 32-bit x86 EFI
      # 7 64-bit x86 EFI
      # 9 64-bit x86 EFI (obsolete)
      # 10    32-bit ARM EFI
      # 11    64-bit ARM EFI
      # 16    64-bit x86 UEFIhttpClient

      Конфигурации DHCP-Proxy с доверенной установкой:

      cat /etc/dnsmasq.d/dhcp.conf
      # Основные настройки dnsmasq
      dhcp-no-override
      pxe-prompt="Press any key for boot menu", 2
      
      # Отключает DNS-службу, оставляя только DHCP-функциональность.
      port=0
      # Включает логирование DHCP-сообщений.
      log-dhcp
      
      # Создание меток для сопоставления архитектур
      dhcp-match=set:x86PC, option:client-arch, 0
      dhcp-match=set:BC_EFI, option:client-arch, 7
      dhcp-match=set:EFI _x86-64, option:client-arch, 9
      dhcp-match=set:HTTPClient,option:client-arch,16
      dhcp-match=set:iPXE,175
      
      # Загрузочные опции для iPXE-клиентов на основе меток
      - # Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTP)
      + ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
      dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
      - # Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTP)
      + ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
      dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
      dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
      dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
      dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
      dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
      # Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
      dhcp-range=192.168.11.100,proxy
      
      # DHCP option 93 | Client architecture
      # 0 Standard PC BIOS
      # 6 32-bit x86 EFI
      # 7 64-bit x86 EFI
      # 9 64-bit x86 EFI (obsolete)
      # 10    32-bit ARM EFI
      # 11    64-bit ARM EFI
      # 16    64-bit x86 UEFIhttpClient