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
Gateway: 172.16.1.1
В GUI типового "Network Manager" установка параметров IP-протокола для сетевого интерфейса выглядит примерно так:
Параметры 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
# 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).
Main -> Net booting - > Boot Server enabled: true
Main -> Net booting - > Client IP address: 172.16.1.11
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" после завершения мигания индикатора загрузки (ожидаем не менее десяти секунд с момента подачи электропитания).
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
....
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
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).
В подключённом через RS-232 интерфейсе "minicom" процедура инсталляции сопровождается примерно такими сообщениями:
Formatting disk....
installed routeros-mipsbe-6.44.1
Writing configuration...
Software installed.
Press ENTER to reboot
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 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: ...
....
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
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
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
....
trying bootp protocol... failed
firmware loading failed
....
Выше приводился пример вывода сообщений об успешном прохождении всех этапов процедуры обновления. И да, после выключения и включения электропитания "Mikrotik" внесённые нами изменения параметров загрузчика восстановятся на заданные по умолчанию.