DHCP сервер - конфигурация, загрузка и обновление ПО
Подготовлено на основании документа: "Руководство оператора MAG-200" (стр. 12, 19, 38).
На примере: OS - Ubuntu 16.04 server, DHCP - isc-dhcp-server, TFTP Server - Openbsd-inetd TFTP, STB MAG-322
TFTP server. Установка, настройка
Пример установки и настройки TFTP сервера для загрузки и обновления ПО по протоколу TFTP для MAG322
- Установить (если необходимо) TFTP-сервер:
apt-get install openbsd-inetd tftp tftpd
- По умолчанию TFTP-сервер настроен на использование директории
/srv/tftp
. Изменить при необходимости в файле/etc/inetd.conf
- Создать каталог
/srv/tftp/stb/322
и поместить в него необходимые файлы: Bootstrap, imageupdate, logo.bmp.gz, OP.KEY.
где:
Bootstrap - Ядро;
imageupdate - Образ ПО;
logo.bmp.gz - Логотип начального загрузчика;
OP.KEY - Ключ оператора.
- Изменить права:
chown -R nobody /srv/tftp/stb/322
- Перезапустить службу
inetd:
/etc/init.d/openbsd-inetd restart
Проверка TFTP сервера
Если клиент запускается на локальном сервере, укажите IP адрес 127.0.0.1. Если клиент запускается на удаленном сервере, укажите IP адрес сервера.
echo test > /srv/tftp/stb/322/myfile
cd /home tftp 127.0.0.1 tftp> get stb/322/myfile
DHCP-server 'isc-dhcp-server'. Установка, настройка
sudo apt-get install isc-dhcp-server
- Файл глобальной стартовой настройки
/etc/default/isc-dhcp-server
В этом файле необходимо указать интерфейс, на котором будет работать DHCP-сервер. В данном примере имя сетевого интерфейса enp1s6
- Файл конфигурации DHCP-сервера:
/etc/dhcp/dhcpd.conf
Option Space
Для обмена "vendor-specific" информацией между сервером и клиентом (STB) используется DHCP-опция №43. Для описания информации производителя STB используется «option space Infomir». Перечень возможных опций:
option space Infomir; option Infomir.autostart code 1 = text; option Infomir.bootargs code 2 = text; option Infomir.mcip code 3 = ip-address; option Infomir.mcport code 4 = integer 16; option Infomir.oppubfile code 9 = text; option Infomir.mcip_img code 10 = ip-address; option Infomir.mcport_img code 11 = integer 16; option Infomir.mcip_mng code 12 = ip-address; option Infomir.mcport_mng code 13 = integer 16; option Infomir.ip_log code 14 = ip-address; option Infomir.port_log code 15 = integer 16; option Infomir.logo_x code 16 = integer 16; option Infomir.logo_y code 17 = integer 16; option Infomir.bg_color code 18 = integer 32; option Infomir.fg_color code 19 = integer 32; option Infomir.VerNumber code 20 = text; option Infomir.DateTime code 21 = text; option Infomir.portal_dhcp code 22 = text; option Infomir.timezone code 23 = text; option Infomir.update_url code 24 = text; option Infomir.update_sboot code 25 = text; option Infomir.update_ver code 26 = text; option Infomir.update_mode code 27 = text; option Infomir.update_sboot_ver code 28 = text;
Описание vendor-specific опций
Название | Код | Тип | Описание | Кем используется |
---|---|---|---|---|
mcip | 3 | ip-address | IP адрес мультикаст группы для приема ядра или Bootstrap-а. | Boolloader |
mcport | 4 | integer 16 | Порт мультикаст группы для приема ядра или Bootstrap-а. | Boolloader |
oppubfile | 9 | text | Содержит имя файла, в котором расположен подготовленный ключ оператора для установки в приставку | Bootstrap |
mcip_img | 10 | ip-address | IP адрес мультикаст группы для приема imageupdate. | Bootstrap |
mcport_img | 11 | integer 16 | Порт мультикаст группы для приема imageupdate. | Bootstrap |
mcip_mng | 12 | ip-address | IP адрес мультикаст группы для приема команд. | Основное ПО |
mcport_mng | 13 | integer 16 | Порт мультикаст группы для приема команд. | Основное ПО |
ip_log | 14 | ip-address | IP адрес сервера на который Bootstrap может послать отчеты. | Bootstrap |
port_log | 15 | integer 16 | Порт на сервере на который Bootstrap может послать отчеты. | Bootstrap |
logo_x | 16 | integer 16 | Координата по оси x, левого верхнего угла логотипа. | Boolloader |
logo_y | 17 | integer 16 | Координата по оси y, левого верхнего угла логотипа. | Boolloader |
bg_color | 18 | integer 32 | Цвет фона в формате “XRGB” для отображения информационных сообщений при загрузке. | Boolloader |
fg_color | 19 | integer 32 | Цвет шрифта в формате “XRGB” для отображения информационных сообщений при загрузке. | Boolloader |
VerNumber | 20 | text | Версия начального загрузчика три символа с ведущими нулями. Пример использования: substring( option vendor-encapsulated-options,2,3)=«002» |
Dhcp-сервер |
DateTime | 21 | text | Дата и время создания начального загрузчика. | Dhcp-сервер |
portal_dhcp | 22 | text | Портал, на который выполняется переход, если не установлены переменные “portal1” и “portal2” и переменная ”use_portal_dhcp” не установлена или имеет значение “true”. Если переменная ”use_portal_dhcp” установлена в ”false”, то это значение этой переменной не используется. |
Dhcp-сервер |
timezone | 23 | text | Значение часового пояса (timezone), которое передается приставке для установки переменной timezone_conf. | Основное ПО |
update_url | 24 | text | Адрес (URL) размещения образа для обновления основного ПО STB imageupdate. Пример: "tftp://10.1.1.1/322/imageupdate" | Bootstrap |
update_sboot | 25 | text | Адрес (URL) размещения образа Начального загрузчика (Bootloader), используемого для обновления. | Bootloader |
update_ver | 26 | text | Номер версии ПО в образе для обновления. Если номер текущего образа (используемого в STB) и передаваемого для обновления совпадает, то обновление не производится. | Dhcp-сервер |
update_mode | 27 | text | Адрес (URL) размещения образа Bootstrap. Пример: "tftp://10.1.1.1/254/Bootstrap". | Bootloader |
update_sboot_ver | 28 | text | Версия Начального загрузчика (Bootloader), используемого для обновления. | Bootloader |
Загрузка ядра (Bootstrap/uImage) по протоколу TFTP для режима Emergency
Пример заполнения секции "MAG322_boot":
class "MAG322_boot" { match if (( option vendor-class-identifier="InfomirMAG322boot")); filename "stb/322/Bootstrap"; next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space Infomir; }
Примечание. Режим аварийного восстановления (Emergency) MAG3xx
Обновление ПО (imageupdate) из меню System Recovery Utility
Пример заполнения секции "MAG322_upgrade":
class "MAG322_upgrade" { match if (( option vendor-class-identifier="InfomirMAG322upgrade")); next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space Infomir; option Infomir.update_url "tftp://10.1.1.1/stb/322/imageupdate"; }
Примечание. Выбор режима обновления ПО в меню System Recovery Utility MAG3xx
После успешного обновления устанавливаются переменные начального загрузчика Image_Version, Image_Date и Image_Desc, в соответствии с параметрами обновленной версии, устанавливается режим загрузки NAND и выполняется перезапуск приставки.
Автоматическое обновление ПО при старте в DHCP через TFTP
Пример заполнения секции "MAG322_vendor":
class "MAG322_vendor" { match if (( option vendor-class-identifier="InfomirMAG322")); next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space Infomir; option Infomir.portal_dhcp "http://10.1.1.1/stalker_portal/c/index.html"; option Infomir.update_ver "220"; option Infomir.update_url "tftp://10.1.1.1/stb/322/imageupdate"; }
После успешного обновления устанавливаются переменные начального загрузчика Image_Version, Image_Date и Image_Desc, в соответствии с параметрами обновленной версии, устанавливается режим загрузки NAND и выполняется перезапуск приставки. Также в этом классе ("MAG322_vendor") можно передать адрес портала, на который выполняется переход, если не установлены переменные portal1 и portal2 и переменная use_portal_dhcp не установлена или имеет значение true. Если переменная use_portal_dhcp установлена в false, то значение опции Infomir.portal_dhcp не используется.
Значение переменных Начального загрузчика “Image_Version”
, “Image_Date”
и “Image_Desc”
можно посмотреть в меню System Recovery Utility / Device Information
, а также с помощью утилиты fw_printenv.
Обмен сообщениями по DHCP-протоколу
Рассмотрим пример обмена собщениями по DHCP-протоколу между приставкой и сервером в случае использования секции class "MAG322_upgrade" в dhcpd.conf.
В примере используются следующие параметры:
MAC-адрес сетевого интерфейса (Ethernet) приставки - 0:1a:79:51:8:98
MAC-адрес сетевого интерфейса (Ethernet) сервера 0:30:48:fd:9e:5f
IP-адрес, который назначается сервером приставке - 10.1.1.26.
IP-адрес сервера - 10.1.1.1.
Параметры dhcpd.conf соответствуют примеру (см. содержание секции class "MAG322_upgrade").
Приставка посылает dhcp-запрос со следующими параметрами (указана часть параметров):
- IP: 0.0.0.0 (0:1a:79:51:8:98) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
- OP: 1 (BOOTPREQUEST)
- CHADDR: 00:1a:79:51:08:98:00:00:00:00:00:00:00:00:00:00
Option 53 DHCP message type: 1 (DHCPDISCOVER)
- Option 61 Client identifier 0:1a:79:51:8:98
Option 55 Parameter Request List: 1 (Subnet mask), 3 (Routers), 6 (DNS server), 12 (Host name), 15 (Domain name), 28 (Broadcast address), 42 (NTP servers), 43 (Vendor specific info)
Option 60 Vendor class identifier: InfomirMAG322upgrade
Сервер, получив и проанализировав запрос от приставки, посылает dhcp-ответ со следующими параметрами (указана часть параметров):
- IP: 10.1.1.1 (0:30:48:fd:9e:5f) > 10.1.1.26 (0:1a:79:51:8:98)
- OP: 2 (BOOTPREPLY)
- YIADDR: 10.1.1.26
- SIADDR: 10.1.1.1
- CHADDR: 00:1a:79:51:08:98:00:00:00:00:00:00:00:00:00:00
OPTION 53 (1) DHCP message type: 2 (DHCPOFFER)
- OPTION: 54 ( 4) Server identifier 10.1.1.1
- OPTION: 51 ( 4) IP address leasetime 600 (10m)
- OPTION: 1 ( 4) Subnet mask 255.255.255.0
- OPTION: 3 ( 4) Routers 10.233.0.104
- OPTION: 6 ( 8) DNS server 8.8.8.8,8.8.4.4
- OPTION: 28 ( 4) Broadcast address 10.1.1.255
- OPTION: 42 ( 4) NTP servers 10.1.1.1
Option 43 Vendor specific info: tftp://10.1.1.1/stb/322/2.20.07-a6/imageupdate
Получив параметры от DHCP-сервера, приставка подключается к tftp-серверу и получает образ imageupdate по пути, указанному в этих параметрах. На экране отображаются сообщения об этапе процесса получения и обновления:
Starting update from DHCP
Receive is starting tftp://10.1.1.1/stb/322/2.20.07-a6/imageupdate
Wrighting image to flash///
Checking signature,
и т.д.
Установка логотипа и ключа оператора
class "MAG322_upglogo" { match if (( option vendor-class-identifier="InfomirMAG322upglogo")); next-server 10.1.1.1; option ntp-servers 10.1.1.1; vendor-option-space Infomir; filename "stb/322/logo.bmp.gz"; option Infomir.oppubfile "stb/322/OP.KEY"; }