В связи с тем, что сейчас периодически наблюдается масштабная эксплуатация уязвимости CVE-2018-14847 на устройствах MikroTik ботнетом Mēris, публикую свой скрипт автоматического обновления. Установка происходит с официального источника, поэтому выход в интернет для маршрутизатора обязателен.
Важное предупреждение: не раз видел комментарии, когда у людей после обновления железки окирпичивались, поэтому если вы не уверены, что сможете восстановить его работоспособность в случае поломки, не используйте автообновление. У меня же статистика другая — скрипт работает годами на огромном количестве устройств и ничего не ломается. Разумеется, там делаются и резервные копии, но это уже требует отдельной настройки в зависимости от потребностей администраторов.
В двух словах, как работает скрипт. В первую очередь проверяется, существует ли уже задача с именем Update и оттуда берётся время выполнения, затем вместо старой задачи записывается новая. Если задача не существует, время обновления выставляется на 4:00 каждый день, обычно в это время устройство используется меньше всего. Это полезно для обновления самого скрипта, если нужно массово внести правки, а разное время позволяет выполнять обновление устройств внутри локальной сети чуть позже (ставлю 4:30), потому что при перезагрузке основного роутера интернет отсутствует и дочерние устройства не смогут до конца загрузить новые пакеты. Если вы используете устройства гирляндой с питанием по PoE, обязательно убедитесь, что время выставлено везде разное, т. к. перезагрузка роутера временно обесточит то устройство, которое оно питает.
Далее в указанное время происходит проверка новой версии на канале stable — исправьте под свои потребности, но у меня со стабильным каналом тоже никогда проблем не было, а в long term не хватает функций. Если новая версия обнаружена, сразу создаётся задача обновления прошивки Firmware и выполняется обновление операционной системы с перезагрузкой. При следующем старте уже отрабатывает обновление прошивки и снова выполняется обязательная перезагрузка, а задача Firmware удаляется. В итоге всего происходит две перезагрузки, чтобы обеспечить установку последней версии как операционной системы RouterOS, так и прошивки Firmware.
Применение крайне простое: скопировать текст из блока ниже и вставить его через WinBox в терминал, Enter, готово.
/system scheduler; :local time "04:00:00"; :do {:set time [get [find name=Update] start-time]} on-error={}; :do {remove Update} on-error={}; add interval=1d name=Update on-event="/system package update; set channel=stable; check-for-updates once; :delay 5; :if ([get installed-version] != [get latest-version]) do={/system scheduler add name=Firmware on-event=\"/system scheduler remove Firmware; /system routerboard; :if ([get current-firmware] != [get upgrade-firmware]) do={upgrade; :delay 1; /system reboot}\" start-time=startup; /system package update install}" start-time=$time
На седьмой версии он должен работать? У меня не работает(. Ни чего не обновляет.
Конечно работает и обновляет в указанное время.
На шестой версии точно работает. Сегодня залилось успешно вчерашнее обновление. На седьмой нашёл ошибку), при копировании из скрипта пропал один символ. Скопировал заново. Жду обновления, чтобы проверить работоспособность). Спасибо.
Все прекрасно работает и на седьмой версии. Вчерашние обновления залились успешно. Спасибо.
Подскажите, пожалуйста, какой будет код только установки обновления package без обновления firmware?
Не подскажите при обновлении конфигурация сохраняется?
Конечно, а как иначе.
Перестал обновлять прошивку Firmware. Как минимум на 7.9.2 точно второй раз не перезагружается.
Так же. Стояла 7,9,2. Прошивку скрипт скачал но она висит сейчас как Upgrade firmware (не Current). Для полного обновления нужно выполнить /system/routerboard upgrade set yes. Как это можно автоматизировать?
На всех моих роутерах этой проблемы нет, скрипт не менялся. Что конкретно пишется — что есть обновление прошивки, либо прошивка обновилась и только нужна перезагрузка? Возможно это косяк какой-то промежуточной прошивки, вы можете либо вручную обновиться и перезагрузиться, либо вообще ничего не делать и посмотреть, как скрипт отработает на 7.10->7.11, ведь обновление firmware не обязательно.
Есть три роутера настроенных в CAPsMAN, точки скрипт прописали, а вот сам роутер выдает ошибку : expected end of command (line 1 column 586), куда копать нужно?!
Скорее всего просто неправильно скопировали скрипт, в нём всего 583 символа.
Да, Вы правы, большое спасибо за быстрый ответ!!!