Автоматическая проверка обновлений RouterOS, уведомление о новых версиях при помощи PUSH-сообщений Telegram

Ранее мы уже неоднократно говорили о необходимости своевременного обновления программного обеспечения Mikrotik. Иногда в RouterOS встречаются серьёзные ошибки, очень редко даже критические.
Чем чревато несвоевременно обновление RouterOS я уже писал, причем многие владельцы Mikrotik-ов не обновились и по сей день. Со своей стороны команда Mikrotik докладывает всех сил на поиск и устранение ошибок, выпуск новых версий и своевременное уведомление клиентов.
Далеко не каждый администратор устройства Mikrotik заходит регулярно на официальный сайт в поисках обновлений.
Хотите научиться работать с MikroTik? В этом поможет углубленный курс по администрированию MikroTik. Получите демо-доступ к этому курсу бесплатно.
Кнопка «Check for Updates» это хорошо, но толковый администратор, управляющий устройством, на которое возложены серьёзные задачи, перед тем как выполнить команду «Download & Install», обязательно посетит соответствующую ветку официального форума «Announcements». В данной ветке можно ознакомиться с особенностями обновления и отзывами тех клиентов, кто уже успели обновиться.
Очень редко, но всё же случаются ситуации, когда обновление содержит изменение некоторых функций, что потенциально может привести к неполной работоспособности некоторых конфигураций при переходе на новую версию. Бывало и такое, что после обновления пользователи не могли получить доступ к устройству или же конфигурация вовсе слетала.
Бывали на моей памяти и такие обновления, перед которыми, из-за кардинальных изменений, в обязательно порядке необходимо было выполнять бэкап. Без бэкапа вы попросту не смогли бы откатить все настройки в случае необходимости downgrade. Да и копию самого бэкапа необходимо хранить на стороннем устройстве, а не в памяти RouterBOARD.
С учетом всего вышеизложенного, вы не сможете полностью положиться на автоматическое обновление. Собственно, функция автоматического обновления в RouterOS имеется еще с версии RouterOS v6.31 (см. документацию).
Реализован механизм при помощи простенького скрипта:

/system package update
check-for-updates once
:delay 1s;
:if ( [get status] = "New version is available") do={ install }
Добавляете скрипт в System — Scripts, после чего настраиваете планировщик (System — Scheduler) на периодический запуск самого скрипта. Система будет обновляться автоматически, как только при проверке определит доступность новой версии.
Само собой разумеется, таким скриптом следует пользоваться только в крайнем случае, на свой собственный страх и риск.
Есть ли другие варианты? Конечно же, есть. Всё зависит только от вас и вашего умения писать скрипты.
Со своей стороны хочу предложить вам весьма интересный вариант реализации уведомлений о выходе новых версий. Я уже писал о реализации PUSH-уведомлений прямо из Mikrotik RouterOS, так почему бы не воспользоваться этим же методом для уведомлений о новых версиях?
Заходим в System — Scripts и добавляем 2 скрипта.
Первый скрипт, «check_updates»:

:log info "Checking new version RouterOS...";
/system package update
check-for-updates once
:delay 5s;
:if ( [get status] = "System is already up to date") do={ 
:log info "Installed last RouterOS version, skip notification";
}
:if ( [get status] = "New version is available") do={ 
:log warning "Attention! New version of RouterOS is available!";
/system script run new_version_notifier
:delay 2s;
:log warning "Admin was notified by PUSH-message";
}
Данный скрипт осуществляет проверку доступности новой версии и, в зависимости от статуса, либо просто пишет запись в лог, либо запускает скрипт с отправкой уведомления. Скрипт проверен и работает на RouterOS 6.42.1 current, для bugfixes-only и Release candidate, возможно, потребуется вносить правки и указывать Channel.
Если у вас большой парк устройств, вероятно, вам будет полезна следующая команда:

/system routerboard get [параметр]

При её помощи вы сможете получить такие данные:

  • board-name — название устройства, например «hEX»;
  • model — модель, например «RouterBOARD 750G r3»;
  • current-firmware — текущая версия RouterBOOT, например «6.42.1»;
  • upgrade-firmware — последняя версия RouterBOOT, например «6.42.1»;
Что это вам даст? Во-первых, модель устройства, что позволит пересмотреть список изменений конкретно для вашей платформы. Во-вторых, вы можете прямо в скрипте выполнить проверку версии RouterBOOT. Обращаю ваше внимание, версия RouterBOOT не обновляется автоматически!
Версия RouterBOOT обновляется нажатием кнопки «Upgrade», или же выполнением команд (требуется перезагрузка):

/system routerboard upgrade 
/system reboot
Если же вас интересует название конкретного устройства, вытянуть его можно при помощи команды:

/system identity get name
Если данный функционал востребован — вам придется дописать его самостоятельно. Мой скрипт реализует только базовое уведомление. Само уведомление выполняется только в том случае, если у вас более старая версия, если же система актуальна — в уведомлениях нет необходимости. В противном случае Mikrotik будет каждый раз слать вам уведомления и вы попросту перестанете обращать на них внимание.
Второй скрипт, «new_version_notifier»:

tool fetch url="https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чата>&text=New%20version%20RouterOS%20is%20available" dst-path=telegram.txt; 
Данный скрипт реализует исключительно отправку уведомления, для него вам потребуется <ваш_токен> и <id_чата> для Telegram Bot API, более подробно о них рассказано в публикации: «Отправка Push-уведомлений из Mikrotik RouterOS прямо на мобильный при помощи Telegram».
Последний шаг — настройка планировщика. Заходим в System — Scheduler, создаем новую задачу с командой:

/system script run check_updates
В качестве интервала для запуска я использую 1 день, при желании, интервал можно менять, например, установить запуск каждые 12 часов.
И напоследок, если вы хотите использовать форматирование теста, в URL Telegram API следует заменить:

&text=
на:

&parse_mode=html&text=
В итоге у вас получится URL вида:

https://api.telegram.org/bot<ваш_токен> /sendMessage?chat_id=<id_чата &parse_mode=html&text=<сообщение>"
После этого в сообщении можно будет использовать форматирование, например:

<b>жирный</b>
<i>курсив</i>
Выделение жирным шрифтом будет полезно в случаях, когда вы получаете много уведомлений.
Хотите научиться работать с MikroTik? В этом поможет углубленный курс по администрированию MikroTik. Получите демо-доступ к этому курсу бесплатно.