Локальный сервер обновлений для устройств MikroTik на Debian Linux

Local update server for MikroTik devices on Debian LinuxДля поддержания актуального состояния прошивок MikroTik необходимо периодически обновлять их на всём парке устройств. И не всегда есть возможность открыть доступ в Интернет, чтобы устройство могло загрузить прошивку с серверов обновлений MikroTik. На этот случай вендор предлагает два штатных варианта действий: ручное или автоматизированное копирование прошивок на устройство с последующей перезагрузкой, либо настройка выделенного устройства в качестве источника обновлений для остальных устройств. Оба этих варианта имеют свои недостатки.

В этой заметке мы рассмотрим ещё один, альтернативный, вариант - это создание локального веб-сервера, который бы имитировал структуру каталогов оригинального сервера обновлений upgrade.mikrotik.com. Подобный сервер позволит решить две основные проблемы: распространение обновлений в локальной сети без доступа в Интернет и контроль за версией прошивок, которые будут устанавливаться на устройствах.

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

Далее пошаговая инструкция по развёртыванию и использованию локального сервера обновлений.

 

Настройка веб-сервера

На сервере с ОС Debian Linux создаём каталог для хранения прошивок:

$ sudo mkdir /srv/upgrade.mikrotik.com

На каталог необходимо назначить права доступа на запись для учётной записи, под которой будут загружаться прошивки. Например, если это администратор системы состоит в группе adm, то так:

$ sudo chgrp adm /srv/upgrade.mikrotik.com
$ sudo chmod 775 /srv/upgrade.mikrotik.com

Устанавливаем веб-сервер apache2:

$ sudo apt install apache2

Настраиваем виртуальный хост веб-сервера в файле /etc/apache2/sites-available/mikrotik.conf

<VirtualHost *:80>
               ServerName      upgrade.mikrotik.com
               DocumentRoot    /srv/upgrade.mikrotik.com
</VirtualHost>

Активируем веб-сайт:

$ sudo a2ensite mikrotik
$ sudo systemctl restart apache2

Веб-сервер готов.

 

Загрузка прошивок на локальный сервер обновлений

Представленный ниже скрипт miktrotik_up поможет нам в загрузке прошивок MikroTik нужной версии и архитектур.

#!/bin/bash -e
                                 
dir="/srv/upgrade.mikrotik.com"
url="https://upgrade.mikrotik.com/routeros"
archs=(mipsbe mmips arm tile)                                     
                                                                  
v=$1                                                              
if [[ "x$v" == "x" ]]; then                                       
    echo "Usage: $0 6.49.3"                                       
    exit 1
fi  

if [[ -d "$dir/$v" ]]; then                                                                                                         
    echo "$v already exists"                                      
    exit 1
fi                     
                                 
IFS=. read maj min mic <<EOF                                                                                                        
${v##*-}
EOF
                                 
newest="NEWEST"
if [ $maj -eq 7 ] && [ $min -gt 12 ]; then          
    newest="NEWESTa"
fi                     
                                 
for i in ${!archs[*]}; do                                         
    if [[ $maj == "7" ]]; then
        archsv[$i]="$v-${archs[$i]}"          
    else                                                          
        archsv[$i]="${archs[$i]}-$v"
    fi
done
mkdir $dir/$v
pushd $dir/$v
wget --quiet "$url/$v/CHANGELOG"
echo "================ CHANGELOG =============="
echo
cat CHANGELOG
echo

for i in ${!archsv[*]}; do
    wget --quiet "$url/$v/routeros-${archsv[$i]}.npk"
    sha256sum routeros-${archsv[$i]}.npk
    if [ $maj -eq 7 ] && [ $min -gt 12 ]; then
        wget --quiet "$url/$v/wireless-${archsv[$i]}.npk"
        sha256sum wireless-${archsv[$i]}.npk
    fi
done

ts=$(od -A n -l -j 40 -N 4 "$dir/$v/routeros-${archsv[0]}.npk" | tr -d " ")
echo "$v $ts" | tee LATEST "$newest$maj.stable" > /dev/null

if [ $maj -eq 7 ]; then
    for i in ${!archsv[*]}; do
        ln -s "routeros-${archsv[i]}.npk" "routeros-${archs[$i]}-$v.npk"
    done
fi
popd

ln -sf $v/$newest$maj.stable $dir/$newest$maj.stable

if [ $maj -eq 7 ]; then
    if [ $min -lt 12 ]; then
        ln -sf $v/NEWEST7.stable $dir/NEWEST6.upgrade
    fi
    if [ $min -eq 12 ] && [ $mic -le 1 ]; then
        ln -sf $v/NEWEST7.stable $dir/NEWEST6.upgrade
    fi
else
    ln -sf $v/LATEST "$dir/LATEST.6"
fi

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

  • dir - путь к корневому каталогу веб-сайта
  • url - ссылка для загрузки прошивок
  • archs - массив с перечнем требуемых архитектур прошивок

Если для загрузки потребуется прокси, то необходимо указать переменные окружения с указанием адреса прокси:

$ export https_proxy=http://User:Password@Proxy.holding.com:3128/
$ export http_proxy=http://User:Password@Proxy.holding.com:3128/

Пример вызова скрипта для загрузки версии 6.49.13:

$ mikrotik_up 6.49.13

============== CHANGELOG ==============

What's new in 6.49.13 (2024-Apr-04 12:57):

*) defconf - fixed firewall rule for IPv6 UDP traceroute;
c880fbc9fbc976ec90db7d01712f2d371a50db7523a3c634e5003007cbf10b4e  routeros-mipsbe-6.49.13.npk
8f03ac9e6625b3e33c75a2cb574d66d4603d4deb76a1111f4f9e03f7363dab64  routeros-mmips-6.49.13.npk
9fd8b890929f04842e548609d4bb0c8ee35acb0d1f94e5f514d3cc4a71fa338a  routeros-arm-6.49.13.npk
5c45e79eb19d4e97706effd9c0e7dadd4f0fcc826ec0850e9d2c47e406ac7837  routeros-tile-6.49.13.npk

Будут загружены прошивки нужных версий и архитектур, указаны их контрольные суммы, которые при желании можно сверить с тем, что указано на сайте производителя.

Образуется следующая структура каталогов:

├── 6.49.13
│   ├── CHANGELOG
│   ├── LATEST
│   ├── NEWEST6.stable
│   ├── routeros-arm-6.49.13.npk
│   ├── routeros-mipsbe-6.49.13.npk
│   ├── routeros-mmips-6.49.13.npk
│   └── routeros-tile-6.49.13.npk
├── LATEST.6 -> 6.49.13/LATEST
└── NEWEST6.stable -> 6.49.13/NEWEST6.stable

Отдельный каталог для прошивок заданной версии и символические ссылки LATEST.6 и NEWEST6.stable в корне, которые указывают на нужную версию прошивки, которая будет загружаться на устройства.

 

Настройка устройств MikroTik на использование локального сервера обновлений

Штатного способа изменения сайта загрузок для MikroTik не предусмотрено, но есть обходной способ добиться этого, указав в конфигурации устройства статическую A-запись для upgrade.mikrotik.com

/ip dns static add name="upgrade.mikrotik.com" address=10.X.X.X

где 10.X.X.X – это адрес нашего локального веб-сервера обновлений MikroTik.

Далее на устройстве MikroTik обновление происходит штатным способом:

/system package update check-for-updates
/system package update install

 

Управление версиями прошивок

Версии RouterOS 6 и 7 независимы друг от друга. Поэтому можно спокойно загружать на локальный сайт прошивки 6-й и 7-й версии и проводить обновление как в пределах 6-й, так и 7-й. Для перехода с 6-й на 7-ю версию требуется явно указать канал обновлений upgrade в конфигурации MikroTik, тогда при обновлении он будет запрашивать актуальную прошивку 7-й версии.

Администратору будет достаточно поменять символическую ссылку для переопределения версии, которую будут загружать устройства с сайта.

Например, для версий ветки 6.x.x, чтобы переопределить на 6.49.10, надо выполнить команды:

$ ln -sf 6.49.10/LATEST /srv/upgrade.mikrotik.com/LATEST.6
$ ln -sf 6.49.10/NEWEST6.stable /srv/upgrade.mikrotik.com/NEWEST6.stable

Для версий ниже 7.12.1, например, задать версию 7.11.4 текущей:

$ ln -sf 7.11.4/NEWEST7.stable /srv/upgrade.mikrotik.com/NEWEST7.stable
$ ls -sf 7.11.4/NEWEST7.stable /srv/upgrade.mikrotik.com/NEWEST6.upgrade

Для версий 7.13 и старше,  чтобы переопределить на версию 7.14.2:

$ ln -sf 7.14.2/NEWESTa7.stable /srv/upgrade.mikrotik.com/NEWESTa7.stable

Важные моменты, о которых стоит помнить:

  1. Устройства MikroTik с объёмом ОЗУ/Flash меньше 64 Мб не стоит обновлять до 7-й версии.
  2. В 7-й ветке есть переходная версия 7.12.1. Её необходимо загрузить на локальный сайт, так как через неё будут обновляться все устройства с более меньшей версией прошивки. Это связано с выделением отдельного пакета для беспроводных драйверов.

Использованные источники информации:

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