# ============================================================ # MikroTik - Kontrola aktualizaci + zaloha konfigurace # Verze: 1.0 # Popis: Zkontroluje dostupnou aktualizaci RouterOS. Pokud je # k dispozici nova, dosud nenotifikovana verze, vytvori # zalohu konfigurace (.backup) a odesle ji emailem # spolu s informaci o aktualizaci. # Pomoci /system note perzistuje posledni notifikovanou # verzi i po restartu zarizeni. # Nazev souboru zalohy: rok_mesic_den_nazevzarizeni # ============================================================ # --- Nacteni perzistovane posledni notifikovane verze --- :local savedVersion [/system note get note] :global lastNotifiedVersion :if ($lastNotifiedVersion = "") do={ :set lastNotifiedVersion $savedVersion } # --- Aktualni verze --- :local currentVersion [/system resource get version] # --- Kontrola aktualizaci --- /system package update check-for-updates once :delay 5 :local latestVersion [/system package update get latest-version] :local updateChannel [/system package update get channel] # --- Pokracovat pouze pokud je nova, dosud nenotifikovana verze --- :if ($latestVersion != "" && \ $currentVersion != $latestVersion && \ $latestVersion != $lastNotifiedVersion) do={ # --- Sestaveni nazvu souboru zalohy --- :local routerName [/system identity get name] :local dateVal [/system clock get date] :local year [:pick $dateVal 0 4] :local month [:pick $dateVal 5 7] :local day [:pick $dateVal 8 10] :local fileName ($year . "_" . $month . "_" . $day . "_" . $routerName) :log info ("Zaloha konfigurace: zahajeni, soubor: " . $fileName) # --- Vytvoreni backup souboru (.backup) --- :local backupOk false :do { /system backup save name=$fileName dont-encrypt=yes :delay 5 :set backupOk true :log info ("Zaloha konfigurace: .backup soubor vytvoren: " . $fileName . ".backup") } on-error={ :log error "Zaloha konfigurace: Nepodarilo se vytvorit .backup soubor." } # --- Odeslani emailu --- :if ($backupOk) do={ :do { /tool e-mail send \ to="vas@mail.cz" \ subject=("MikroTik - nova verze " . $latestVersion . " + zaloha konfigurace") \ body=("Byla zjistena nova verze systemu RouterOS. Prikladam zalohu systemu pred jeho aktualizaci.\n\n" . \ "Zarizeni : " . $routerName . "\n" . \ "Soucasna verze : " . $currentVersion . "\n" . \ "Nova verze : " . $latestVersion . "\n" . \ "Kanal : " . $updateChannel . "\n\n" . \ "V priloze naleznete zalohu konfigurace: " . $fileName . ".backup") \ file=($fileName . ".backup") # Ulozit notifikovanou verzi do /system note (perzistence po restartu) /system note set note=$latestVersion :set lastNotifiedVersion $latestVersion :log info ("Notifikace + zaloha odeslana: " . $latestVersion) } on-error={ :log error "Notifikace + zaloha: Odeslani emailu selhalo. Zkontrolujte SMTP konfiguraci." } # --- Uklid souboru z flash pameti --- :delay 2 :do { /file remove ($fileName . ".backup") :log info "Zaloha konfigurace: Docasny soubor smazan." } on-error={ :log warning "Zaloha konfigurace: Nepodarilo se smazat docasny soubor." } # --- Aktualizace firmware (RouterBOOT) --- :do { /system routerboard upgrade :log info "Firmware: Aktualizace RouterBOOT zahajena." :delay 5 } on-error={ :log warning "Firmware: Aktualizace RouterBOOT selhala nebo neni dostupna." } # --- Aktualizace RouterOS + restart --- :log info ("Aktualizace RouterOS na verzi " . $latestVersion . " - zarizeni se restartuje.") :delay 3 /system package update install } else={ # Backup selhal, odeslat alespon textovou notifikaci o aktualizaci :do { /tool e-mail send \ to="vas@mail.cz" \ subject=("MikroTik - nova verze " . $latestVersion . " (zaloha selhala)") \ body=("Je dostupna nova verze RouterOS.\n\n" . \ "Zarizeni : " . $routerName . "\n" . \ "Soucasna verze : " . $currentVersion . "\n" . \ "Nova verze : " . $latestVersion . "\n" . \ "Kanal : " . $updateChannel . "\n\n" . \ "POZOR: Vytvoreni zalohy konfigurace selhalo!\n" . \ "Zkontrolujte prosim stav zarizeni.") /system note set note=$latestVersion :set lastNotifiedVersion $latestVersion :log warning ("Notifikace odeslana bez zalohy: " . $latestVersion) } on-error={ :log error "Notifikace: Odeslani emailu selhalo. Zkontrolujte SMTP konfiguraci." } } } else={ :if ($latestVersion = "") do={ :log warning "Notifikace: Nepodarilo se ziskat informace o aktualizaci." } else={ :log info ("Notifikace: Zadna nova verze. Aktualni: " . $currentVersion) } }