Скрипт автоматического обновления OS и прошивки + бекап и оповещение на почту

Здесь выкладываем скрипты
beeyev
Сообщения: 2
Зарегистрирован: 07 авг 2018, 20:51

07 авг 2018, 21:16

Скрипт обновлен 20.01.2020

Скрипт проверяет наличие обновлений, если обновление есть, то перед прошивкой присылает оповещение на почту с информацией о новой версии, полным бекапом и выгрузкой конфиг файла во вложении.
После установки RouterOS, скрипт обновляет прошивку (загрузчик?) RouterBoard и затем снова перезагружает микротик.
В финале вы получаете второе письмо (примерно через пару минут) с информацией о том что обновление установлено.

В скрипте 3 основных режима, можно выбрать необходимый:

Простой бекап, раз в день скрипт делает бекап всей системы и выгружает конфиг, эти два файла он шлет на почту.
Уведомление о выходе новой версии, кроме бекапа скрипт пришлет информацию если вышла новая версия прошивки.
Бекап и автоматическая установка новой версии прошивки, сначала бекап на почту, потом процесс обновления и в завершении скрипт пришлет еще одно письмо о том что новая прошивка была установлена.

Можно указать ограничение чтобы скрипт автоматически ставил только фикс (патч) обновления. Т.е. те у которых меняется только последняя цифра в версии. Прим. 6.33.2 -> 6.33.3

репозиторий:
https://github.com/beeyev/Mikrotik-Rout ... and-update
Последний раз редактировалось beeyev 27 янв 2020, 08:52, всего редактировалось 2 раза.


leond
Сообщения: 2
Зарегистрирован: 25 окт 2018, 11:12

25 окт 2018, 12:05

Добрый день!
MikroTik RouterOS 6.42.9
/system package update get installed-version - ничего не вернет
/system package update get latest-version - тоже ничего не вернет


Sertik
Сообщения: 763
Зарегистрирован: 15 сен 2017, 09:03

25 окт 2018, 16:59

Задумка хорошая, но очень опасно ей пользоваться. Ибо в скрипте нужно предусмотреть проверку с какой версии обновление разрешено. Если будете регулярно бэкапиться - может и прокатит, а если стояла древняя версия - то при автообновлении таком всё повиснет к чертям и всё .... Да и changelog неплохо бы читать перед обновлением на новую версию. Этого скрипт явно не умеет. И перепрошивать Микротик нетинсталлом тоже ... :ps_ih:


Чего не знаем то нагуглим
Аватара пользователя
podarok66
Модератор
Сообщения: 3513
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

25 окт 2018, 19:23

leond писал(а):
25 окт 2018, 12:05
Добрый день!
MikroTik RouterOS 6.42.9
/system package update get installed-version - ничего не вернет
/system package update get latest-version - тоже ничего не вернет

Код: Выделить всё

[podarok66@RB750Gr3] > :put [/system package update get installed-version]
6.43.2
[podarok66@RB750Gr3] > :put [/system package update get latest-version]
6.43.4
Что я не так делаю?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
leond
Сообщения: 2
Зарегистрирован: 25 окт 2018, 11:12

26 окт 2018, 10:36

podarok66 писал(а):
25 окт 2018, 19:23
leond писал(а):
25 окт 2018, 12:05
Добрый день!
MikroTik RouterOS 6.42.9
/system package update get installed-version - ничего не вернет
/system package update get latest-version - тоже ничего не вернет

Код: Выделить всё

[podarok66@RB750Gr3] > :put [/system package update get installed-version]
6.43.2
[podarok66@RB750Gr3] > :put [/system package update get latest-version]
6.43.4
Что я не так делаю?
Спасибо за ответ, микрот без перезагрузки - не микрот(
После всё заработало штатно.


zanios3
Сообщения: 1
Зарегистрирован: 08 ноя 2018, 10:47

08 ноя 2018, 11:07

А никто не делал скрипт автоматического обновления с другого роутера?
Суть такова. что есть центральный маршрутизатор и больше 500 одинаковых роутеров.
В микротах есть обновление с удаленного хоста (/system upgrade upgrade-package-source>
), но почему они не сделали его способным работать в автоматическом режиме, не понимаю (ну или я совсем не понял, как это сделать).
Разрешать автоматически обновляться когда им вздумается - можно так и всю сеть положить :)
А так обновил руками один. проверил конфиги, убедился, что залился без проблемм, тогда уже кидаешь нужные пакеты на центральный роутер и все подтягивают обновления с него.
Скрипт должен запускать /system upgrade refresh раз в сутки и если в списке пакетов появляются со статусом available, то запускать system upgrade download-all, и дальше по аналогии со скриптом в теме выше.
Все просто, но как написать условие проверки пакетов со статусом не знаю. Может кто поможет?


junker272
Сообщения: 1
Зарегистрирован: 23 мар 2018, 20:35

23 дек 2018, 11:29

У меня заработало с set channel=stable , с current не хотело


EagleNN
Сообщения: 2
Зарегистрирован: 09 авг 2017, 19:45

06 июл 2019, 23:21

Я давно делал такой скрипт. Потом пришел к выводу что намного лучше просто отправлять нотификации на email.
Никаких ограничений для именования скрипта нет :)

Для секюрности пароль для почтового аккаунта вводится в диалоге WinBox tools->email
 
{
## Check for update and send email with configuration if any
:log info "Starting Update check and backup script...";

## Notification e-mail
:local Eaccount "XXXXXXXXXXXXXXXX@gmail.com";

## Changelog location
:local Changelog "https://mikrotik.com/current.rss";
:local ChangelogFilename "changelog_current.html";

## Resolve SMTP name and prepare backup variable
:local sysname [/system identity get name];
:local sysver [/system package get system version];
:local localSubj "Empty"
:local localBody "Empty"
:log info "Flushing DNS cache...";
/ip dns cache flush;
:delay 2;
:local smtpserv [:resolve "smtp.gmail.com"];

## Check for update
/system package update
## set channel doesn't work on the latest FW
## set channel=current
check-for-updates

## Wait on slow connections
:delay 15s;

## Important note: "installed-version" was "current-version" on older Router OSes
:if ([get installed-version] != [get latest-version]) do={

## New version of RouterOS available
:log info ("Upgrade available for RouterOS on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])")

:set localSubj "RouterOS need to be upgraded on router $sysname"
:set localBody "Upgrade for RouterOS available on router $sysname from $[/system package update get installed-version] to $[/system package update get latest-version] (channel:$[/system package update get channel])"

} else={

## RouterOS latest, let's check for updated firmware
:log info ("No RouterOS upgrade found, checking for HW upgrade...")

/system routerboard

:if ( [get current-firmware] != [get upgrade-firmware]) do={

## New version of firmware available
:log info ("Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]")

:set localSubj "Firmware need to be updated on router $sysname"
:set localBody "Firmware upgrade available on router $sysname from $[/system routerboard get current-firmware] to $[/system routerboard get upgrade-firmware]"

} else={

:log info ("No Router HW upgrade found")
}
}

:log info "localSubj= $localSubj ";
:if ( !($localSubj = "Empty")) do={

:log info "Deleting last Backups...";
:foreach i in=[/file find] do={:if ([:typeof [:find [/file get $i name] \
"$sysname-backup-"]]!="nil") do={/file remove $i}};
:delay 2;
:do {/file remove $ChangelogFilename} on-error={};

## Downloading changelog file
/tool fetch mode=https url=("$Changelog") dst-path=("$ChangelogFilename");

## Backup configuration
:local backupfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".backup");
:log info "Creating new Full Backup file...";
/system backup save name=$backupfile;
:delay 5;

:local exportfile ("$sysname-backup-" . \
[:pick [/system clock get date] 7 11] . [:pick [/system \
clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".rsc");
:log info "Creating new Setup Script file...";
/export verbose file=$exportfile;
:delay 5;

:log info "Sending Full Backup file via E-mail...";
/tool e-mail send to=$Eaccount server=$smtpserv \
port=587 start-tls=yes file=($backupfile ."," . $exportfile . "," . $ChangelogFilename) \
subject=("$localSubj") \
body=("$localBody");
:delay 10;

}
}


beeyev
Сообщения: 2
Зарегистрирован: 07 авг 2018, 20:51

27 янв 2020, 08:52

Обновил скрипт до новой версии, поправил шапку.


Аватара пользователя
podarok66
Модератор
Сообщения: 3513
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

27 янв 2020, 13:14

Спасибо, что не забросили это дело. :-)


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить