
#################################################################################################
Микротик на ядрах ARM (32 и 64-битные версии) и x86 поддерживает контейнеризацию. Сразу оговоримся, что это не Docker в его исконном понимании. Контейнеры изменяемы изнутри. Но парадигма запуска одного процесса и смерти контейнера после его исполнения вполне жива. Мне такая парадигма в домашнем использовании только мешает, но с ней можно бороться костылями.
Для EN7562CT (hEX refresh, он же E50UG) возможные версии контейнеров урезаны до arm32v5 (список готовых контейнеров маловат https://hub.docker.com/u/arm32v5). Ситуацию спасает контейнер с Debian(https://hub.docker.com/r/arm32v5/debian). Armel дистрибудив хоть и не выпускается в виде установщика, но сборка и компиляция ПО поддеживается. Это именно мой частный случай, все действия проводятся на данном агрегате. Собирать что-то через Docker(Podman) под arm32v5 желания нет.
Помимо микротика на ROS7.4+ и процессора ARM (ну, психов с CHR и контейнерами я не рассматриваю), потребуется внешний диск, например, USB-флеш, а также физический доступ к устройству для включения поддержки контейнеров. Использование внутренней памяти может привести смерти внцтренней NAND-флеш устройства, от ревизии к ревизии с разным временем жизни. Крайне не рекомендую крутить на внутренней памяти.
Также рекомендуется полное отсуствие здравого смысла и легкие нотки безумия. Сторонние эксплоиты могут похоронить вашу железку без возможности исправления через NetInstall, как утверждает производитель.
1. Установите пакет
################################################################################################
# канал обновлений
Код: Выделить всё
/system package update set channel=stable
Код: Выделить всё
/system package update check-for-updates
Код: Выделить всё
/system/package enable container
Код: Выделить всё
/system package update download
Код: Выделить всё
/system reboot
Для это используется остнастка device-mode, она серьёзно менялась, команды для 7.15+
################################################################################################
# промотр текущих доступных фич
Код: Выделить всё
/system/device-mode/print
# включение режима
Код: Выделить всё
/system/device-mode/update container=yes
3. Настройка сети.
Используется veth - виртуальный ethernet. Бридж для всех veth (их может быть более одного). Каждый veth может использоваться для нескольких контейнеров. Все по офф ману.
################################################################################################
Код: Выделить всё
/interface veth add address=172.17.0.2/24 gateway=172.17.0.1 gateway6="" name=veth1
/interface/bridge/add name=containers
/ip/address/add address=172.17.0.1/24 interface=containers
/interface/bridge/port add bridge=containers interface=veth1
4. Рекомендую на USB создать директорию для контейнеров
Дальше команды на форматирование флешки в ext4 - все данные удалятся!!!
################################################################################################
Код: Выделить всё
/disk print
/disk format-drive usb1 file-system=ext4
/file add name=usb1/containers type=directory
/file add name=usb1/containers/debian type=directory
Используем докер хаб, как основной поставщик
################################################################################################
Код: Выделить всё
/container config set registry-url=https://registry-1.docker.io tmpdir=usb1/containers
Тут немного костыльной магии. Если не добавить cmd="sleep infinity", процесс запустится и завершится успешно. Эта строчка позволяет крутить контейнер вечно.
Строчка logging=yes помимо логов ошибок перенаправляет еще внутренний вывод в log. То есть cmd="ls" выведет список файлов и директорий в корне в лог и завершит контейнер.
################################################################################################
Код: Выделить всё
/container/add remote-image=arm32v5/debian:latest cmd="sleep infinity" hostname=debian-mikrotik interface=veth1 logging=yes root-dir=usb1/containers/debian start-on-boot=yes
# если контейнер недоступен для скачивания, то статус будет с ошибкой
Код: Выделить всё
/container/print
################################################################################################
# нумерация по созданию
Код: Выделить всё
/container/start number=0
Код: Выделить всё
/container/print
Код: Выделить всё
/container/shell number=0
Код: Выделить всё
################################################################################################
root@debian-mikrotik:/# uname -a
Linux debian-mikrotik 5.6.3 #2 SMP Fri Feb 7 11:01:06 UTC 2025 armv7l GNU/Linux
################################################################################################
8. Работа
Тут все просто: костыли и палки.
У shell через микротик есть ряд проблем, это не полноценный эмулятор терминала, некоторые escape-последовательности ломают отображение. Например, в nano отредактировать файл - подвиг.
Например, требуется ssh сервер.
################################################################################################
Код: Выделить всё
apt update # репы bookworm-updates и bookworm-security подгнили, но это не важно, можно пропустить или отредактировать /etc/apt/sources.list.d/debian.sources
apt install openssh-server
apt install sudo
# создадим пользователя в группе sudo, чтобы иметь возможность выполнять команды от root
Код: Выделить всё
useradd -m -G sudo -s /bin/bash myusers
Код: Выделить всё
passwd myusers
Код: Выделить всё
/etc/init.d/ssh start
################################################################################################
Код: Выделить всё
sudo su # разовая акция
touch /root/startup.sh
chmod +x /root/startup.sh
echo \#\!/bin/bash > /root/startup.sh
echo \#run_initd_daemons >> /root/startup.sh
echo '/etc/init.d/ssh start' >> /root/startup.sh
echo \#magic >> /root/startup.sh
echo 'sleep infinity' >> /root/startup.sh
exit
################################################################################################
Код: Выделить всё
/container/set cmd="/root/startup.sh" numbers=0
################################################################################################
Код: Выделить всё
/container/stop number=0
Код: Выделить всё
/container/start number=0
Контейнер должен быть доступен извне по ssh.
В этот костыльный скрипт можно вкорячить запуск нужны демонов.
Вполне работоспособное решение для дома. Можете сообщить в комментариях и ЛС, какой я рак.
Автор Illinory ©