Автоматическое обновление Mikrotik

Автор: | 07.09.2017

Для роутеров Mikrotik, достаточно регулярно выходят обновления. Обновляться можно через меню System -> Packages -> Check_For_Updates, но когда устройств пара десятков и в эфир они выходят не регулярно — это не удобно. Ясно, что процесс нуждается в автоматизации.

Подготовка
Как подсказывает документация, если в корне файловой системы роутера лежит .npk файл с версией (зашита в заголовке файла, считывается автоматом) выше, чем установленная, то после перезагрузки по команде /system reboot (proper shutdown, как её называет лог) прошивка автоматически обновится.

Mikrotik
На роутере создаём скрипт следующего содержания:

Здесь, получаем серийник, текущую версию прошивки, проверяем соответствие установленной версии загрузчика и доступной и если они не равны делаем обновление и перезагружаем устройство.
Далее, серверу передаётся набор следующих параметров: osver — текущая версия прошивки, serial — серийный номер роутера.
Если на сервере есть версия свежее, чем osver, то сервер отдаёт файл для скачивания, после успешного завершения которой, Mikrotik уходит в перезагрузку, иначе — ошибку 404.

Сервер
На стороне сервера поднимаем Web-сервер с поддержкой CGI и пишем скрипт:

Тут смотрим, если скрипт запустили из консоли с параметром «fetch», то парсим страницу загрузок сайта Mikrotik’а, в таблице ищем самую верхнюю прошивку с архитектурой MIPS, из ветки Bugfix only (как-то были проблемы после ручного обновления на Current, а тут можно автоматически положить все устройства, так что — онли баг фикс), смотрим нет ли у нас уже такого файла и если нет — качаем, выходим.
Если скрипт запущен через CGI: ищем новейшую версию на сервере, сравниваем с версией на устройстве и, в случае различия в пользу версии на сервере, отдаём файл.

P.S: Для сравнения версий используется преобразование в число функцией version2int. Например версия 6.38.7 преобразуется к 63807, как показал беглый просмотр сайта mikrotik.com ветка Bugfix only придерживается такого формата уже лет 7.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *