UMGUM.COM (лучше) 

Обновление ОС Mikrotik (Netinstall) ( Инструкция по обновлению ПО "RouterOS" путём применения утилиты "Netinstall", запускаемой в среде "Wine" на ОС "Linux". )

12 марта 2015  (обновлено 3 апреля 2019)

Hard: "MikroTik RB/CCR".
OS: "Linux Debian/RedHat", "RouterOS v6".
Apps: "Wine", "Netinstall".

Задача: руководствуясь официальной инструкцией ориентированной на применение в операционных системах "MS Windows" выработать свой подход, для использования в ОС "Linux".


Загрузка необходимого программного обеспечения.

Для работы потребуется полноценная графическая оболочка вроде "LXDE", "XFCE" или "KDE" - только лишь из командной строки наша задача не решается.

Прежде всего на стороне условного сервера инсталляции развернём среду запуска "MS Windows"-приложений, а также библиотеку расширения стандарта POSIX "capabilities".

Для "Linux Debian/Ubuntu":

# apt install wine libcap2-bin

Для "Linux RedHat/CentOS/Fedora":

# yum install wine libcap

Запускаем браузер, идём на сайт разработчиков программного обеспечения для маршрутизаторов "Mikrotik" и загружаем предназначенную для переустановки устройств под управлением "RouterOS" утилиту "Netinstall" - ищем её в блоке программного обеспечения для этой платформы:

https://mikrotik.com/download -> Software -> RouterOS -> General -> Netinstall (Stable).

Заодно скачиваем дистрибутив "Main packages" (в нашем примере "routeros-mipsbe-6.44.1.npk"), который впоследствии установим посредством утилиты "Netinstall" на целевое устройство.

Утилита "Netinstall" не нуждается в процедуре установки - это монолитное приложение, просто запускаемое на исполнение из любого места файловой системы и не оставляющее следов своей деятельности.

Подготовка сервера инсталляции.

При инсталляции используется группа протоколов BOOTP/PXE/TFTP поверх IP/UPD, и для их работы на сервере инсталляции достаточно настроенного LAN-интерфейса, через который будет осуществляться взаимодействие в целевым устройством. Для согласования клиент-серверных взаимодействий посредством протокола BOOTP (Bootstrap Protocol) требуется указание адреса "шлюза" (возможно несуществующего в действительности) в конфигурации сетевого интерфейса компьютера, на котором осуществляется запуск PXE-сервера (Preboot eXecution Environment) - например следующей адресации:

IP/mask: 172.16.1.2/24
Gateway: 172.16.1.1

В GUI типового "Network Manager" установка параметров IP-протокола для сетевого интерфейса выглядит примерно так:

размер: 320 400 640 800 1024 1280
Параметры IP-протокола в GUI "Network Manager".
Параметры IP-протокола в GUI "Network Manager".

Диапазон адресации между сервером инсталляции и клиентом неважен (например в инструкции разработчиков утилиты "Netinstall" используется подсеть IPv4:192.168.88.0/24) - главное, чтобы задействуемые адреса не конфликтовали с возможно уже используемыми.

Включаем сервер инсталляции и целевой "Mikrotik" в одну L2-сеть - лучше всего проводом напрямую, без посредников. Иногда возможность PXE-загрузки целевого устройства ограничена первым (eth1) сетевым интерфейсом или иным, отмеченным подписью "Boot" - лучше сразу проверить это и включиться в нужный.

Запуск утилиты "Netinstall" в "Wine" и активация PXE-сервера.

Наверняка запуск в пространстве разрешений простого пользователя не позволит утилите включиться в прослушивание сетевого интерфейса на порту (UPD:67) ниже 1024 (таковы ограничения безопасности ядра "Linux" по умолчанию) и активация на нём BOOTP-сервера прервётся с сообщением об ошибке "bind bootp failed: (10013)".

Это обходится грубым запуском посредством SUDO или точечным разрешением посредством расширения стандарта POSIX "capabilities" ответственному в "Wine" за сеть приложению открывать порты ниже порога по умолчанию:

# setcap CAP_NET_BIND_SERVICE+ep /usr/bin/wine32-preloader
# setcap CAP_NET_BIND_SERVICE+ep /usr/bin/wine64-preloader

Удостоверимся, что расширенные разрешения успешно применены:

# getcap /usr/bin/wine{32,64}-preloader

Запускаем утилиту "Netinstall" посредством "Wine":

$ wine ./mikrotik-netinstall/netinstall.exe

В GUI-интерфейсе "Netinstall" активируем PXE-сервер и задаём IP-адрес, который должен будет назначен целевому устройству "Mikrotik" в процессе согласования параметров соединения с ним посредством протокола BOOTP:

Активация PXE-сервера в GUI "Netinstall" (Mikrotik).
Активация PXE-сервера в GUI "Netinstall" (Mikrotik).

Main -> Net booting - > Boot Server enabled: true
Main -> Net booting - > Client IP address: 172.16.1.11

Обновление ПО (прошивка) "Mikrotik".

Необязательно, но желательно для наблюдения за процессом загрузки и обновления на стороне "Mikrotik" подключиться к устройству через "последовательный порт (serial port)" RS-232 (кабелем DB-9):

$ minicom --device /dev/ttyUSB0 --baudrate 115200 --8bit --noinit

Уже сейчас можно запустить "Mikrotik" в режиме загрузки по сети "Etherboot" и попробовать пройти процедуру инсталляции:

1. Выключаем питание.
2. Зажимаем кнопку "Reset".
3. Удерживая кнопку "Reset" включаем питание.
4. Отпускаем кнопку "Reset" после завершения мигания индикатора загрузки (ожидаем не менее десяти секунд с момента подачи электропитания).

Через заранее установленное посредством RS-232 подключение в интерфейсе "minicom" наблюдаем за процессом согласования сетевых параметров BOOTP и получения от PXE-сервера загрузочного программного модуля посредством TFTP (Trivial File Transfer Protocol):

RouterBOOT backup booter 3.22
....

trying bootp protocol... OK
resolved mac address 60:EB:69:xx:xx:xx
transfer started ... transfer ok, time=2.38s
setting up elf image... OK
jumping to kernel code

Далее управление "Mikrotik" автоматически передаётся полученному от PXE-сервера программному модулю загрузки, который должен будет посредством TFTP доставить на устройство полноценный дистрибутив и произвести необходимые изменения в конфигурации:

Welcome to MikroTik Router Software remote installation 6.44.1
Press Ctrl-Alt-Delete to abort

mac-address: 00:0C:42:D5:C8:B5
....

Waiting for installation server...
....
Found server at 60:EB:69:xx:xx:xx

Вывод выше даёт нам понять, что "Mikrotik" успешно соединился с PXE-сервером и готов принять от него управляющие команды и данные для загрузки. При этом в окне "Netinstall" целевое устройство должно отобразится в списке доступных для инсталляции "Routers/Drives".

В GUI-интерфейсе "Netinstall" выбираем месторасположение дистрибутива, который мы собираемся установить на устройство:

Main -> Packages -> From -> Browse... -> (директория с файлами "*.npk")

Выделяем целевое устройство в списке доступных "Routers/Drives", выбираем предназначенный для установки дистрибутив с списке "Packages" и жмём кнопку "Install" - сразу после чего запускается процедура форматирования встроенного NAND-диска ("флеш-памяти") целевого "Mikrotik" и установка на неё заданного дистрибутива "RouterOS":

Отображение процесса обновления "RouterOS" в GUI "Netinstall" (Mikrotik).
Отображение процесса обновления "RouterOS" в GUI "Netinstall" (Mikrotik).

В подключённом через RS-232 интерфейсе "minicom" процедура инсталляции сопровождается примерно такими сообщениями:

Formatting disk....

installed routeros-mipsbe-6.44.1                                            
Writing configuration...

Software installed.
Press ENTER to reboot

На этом обновление программного обеспечения считается завершённым. Перезагружаем "Mikrotik" и переходим к его настройке.

Если что-то пошло не так.

Прежде всего полезно посмотреть выхлоп "Wine", в среде которого запущена утилита "Netinstall" - в идеале мы должны там наблюдать заметки о приёме BOOTP-запросов, регистрации целевого устройства на PXE-сервере и отправке по TFTP программного модуля загрузки:

....
bootp recv bytes: 300
client: 00:0C:42:D5:C8:B4
bootp req received
onTftp 131 vmlinux
port: 43264
blksize 1452
sendFile 3711316
....

Основные причины, почему соединения BOOTP/PXE/TFTP не отрабатывают заключаются в неверных сетевых настройках сервера инсталляции, ограничениях ядра "Linux" на открытие порта UPD:67 и запретительных правилах сетевого защитного экрана. Разбирайтесь с этим, руководствуясь вышеприведёнными инструкциями.

Для выяснения, что конкретно не срабатывает, очень поможет подключение к устройству через "последовательный порт (serial port)" RS-232.

Помимо простого вызова режима "Etherboot" путём зажима на этапе запуска "Mikrotik" кнопки "Reset" можно воспользоваться более богатым возможностями режимом конфигурирования параметров загрузки - его CLI-интерфейс вызывается нажатием любой клавиши в момент двухсекундной задержки на этапе загрузки устройства, разумеется в интерфейсе "minicom", подключенного по RS-232:

RouterBOOT backup booter 3.22
....
Press any key within 2 seconds to enter setup
....
RouterBOOT-3.22
What do you want to configure?
  ....
  o - boot device
  ....
  g - upgrade firmware
  ....
your choice: ...

Нам нужно будет воздействовать на два параметра меню загрузчика "Mikrotik".

Изменим порядок загрузки (опция "o" главного меню), оставив только "Etherboot":

....
Select boot device:
* e - boot over Ethernet
  n - boot from NAND, if fail then Ethernet
  ....
your choice: e - boot over Ethernet

После чего запустим процедуру обновления (опция "g" главного меню) посредством "Etherboot":

....
Upgrade firmware options:
* e - upgrade firmware over ethernet
  s - upgrade firmware over serial port
your choice: e - upgrade firmware over ethernet

Вероятно процедура обновления завершится ошибкой - мы ведь не из любопытства здесь - но с заданными настройками загрузки только посредством "Etherboot" она будет повторятся бесконечно, пока мы не найдём причину на сервере инсталляции и не устраним её:

....
trying bootp protocol... failed
firmware loading failed
....

Выше приводился пример вывода сообщений об успешном прохождении всех этапов процедуры обновления. И да, после выключения и включения электропитания "Mikrotik" внесённые нами изменения параметров загрузчика восстановятся на заданные по умолчанию.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )