Перейти к содержимому

Сборка CUPS для OpenWrt: Оживляем принтер на Mikrotik RB2011

Maks
2 минуты чтения

Mikrotik RB2011UiAS-2HND-IN — устройство легендарное, но его родная RouterOS не поддерживает принт-серверы. Выход один: OpenWrt. В этой статье я расскажу, как самостоятельно собрать пакет CUPS (Common UNIX Printing System) для этой «железки», если его нет в стандартном репозитории вашей сборки.

Подготовка рабочей среды

Для кросс-компиляции нам понадобится Linux-машина (я использую Ubuntu 24.04). Для начала установим базовый набор инструментов сборки:

bash
1sudo apt-get update
2sudo apt-get install build-essential libc6-dev libncurses5-dev libncursesw5-dev \
3gawk gettext git zlib1g-dev swig python3-dev command-not-found


Решаем проблему Python 2.7

Старые версии OpenWrt (19.07 и ранее) при сборке активно используют Python 2.7, который в Ubuntu 24.04 уже давно канул в лету. Установим его вручную из репозиториев предыдущих выпусков:

bash
1# Скачиваем необходимые пакеты
2wget http://security.ubuntu.com/ubuntu/pool/universe/p/python2.7/python2.7_2.7.18-13ubuntu1.5_amd64.deb \
3http://security.ubuntu.com/ubuntu/pool/universe/p/python2.7/libpython2.7-stdlib_2.7.18-13ubuntu1.5_amd64.deb \
4http://security.ubuntu.com/ubuntu/pool/universe/p/python2.7/python2.7-minimal_2.7.18-13ubuntu1.5_amd64.deb \
5http://security.ubuntu.com/ubuntu/pool/universe/p/python2.7/libpython2.7-minimal_2.7.18-13ubuntu1.5_amd64.deb
6
7# Устанавливаем одной командой
8sudo apt install ./libpython2.7-minimal_2.7.18-13ubuntu1.5_amd64.deb \
9./libpython2.7-stdlib_2.7.18-13ubuntu1.5_amd64.deb \
10./python2.7-minimal_2.7.18-13ubuntu1.5_amd64.deb \
11./python2.7_2.7.18-13ubuntu1.5_amd64.deb

Работа с исходниками OpenWrt

Клонируем репозиторий OpenWrt. Для RB2011 лучше использовать ветку 19.07, так как она стабильно работает на архитектуре ar71xx/ath79.

bash
1git clone -b openwrt-19.07 https://github.com/openwrt/openwrt.git openwrt-19.07
2cd openwrt-19.07

Добавляем CUPS в список пакетов (Feeds)

По умолчанию CUPS может отсутствовать в фидах. Добавим сторонний репозиторий:

bash
1echo "src-git cups https://github.com/TheMMcOfficial/lede-cups.git" >> feeds.conf.default

Исправление ошибок совместимости

При сборке старого SDK на новом GCC (в Ubuntu 24.04) вы неизбежно столкнетесь с ошибкой отсутствия типов в cmake. Нужно внести правку в заголовочный файл.

Проблема: Ошибка компиляции cmWorkerPool.h из-за неопределенности uint64_t. Решение: Откройте файл (путь может немного отличаться в зависимости от версии cmake в SDK): nano build_dir/host/cmake-3.15.1/Source/cmWorkerPool.h

В самое начало файла (после комментариев) добавьте:

cpp
1#include <cstdint>

Конфигурация и сборка

Теперь обновляем зависимости и заходим в меню выбора пакетов:

bash
1./scripts/feeds update -a
2./scripts/feeds install -a
3make menuconfig

В меню нужно выбрать:

  1. Target System: Atheros AR71xx/AR913x (для старых ядер) или Ath79 (для новых).
  2. Subtarget: Generic
  3. Target Profile: MikroTik RB2011UiAS-2HND
  4. Network -> Printing: Найдите cups и нажмите M, чтобы собрать его отдельным модулем (.ipk).

Сборка Toolchain

Это самый долгий этап. Мы собираем кросс-компилятор, который превратит код C++ в понятный для процессора MIPS код.

bash
1# Используем все ядра процессора для ускорения
2make tools/install -j$(nproc)
3make toolchain/install -j$(nproc)

Финальный рывок: Сборка пакета

Теперь собираем непосредственно CUPS с выводом подробного лога на случай ошибок:

bash
1make package/cups/compile V=s

Результат

После успешного завершения ваш файл .ipk будет находиться в директории: bin/packages/[архитектура]/cups/

Останется только закинуть его на роутер через scp и установить:

bash
1opkg install cups_xxx.ipk

Важно: Не забудьте, что для работы CUPS на RB2011 вам, скорее всего, понадобится внешняя USB-флешка, смонтированная как Overlay, так как встроенной памяти (128 МБ) может не хватить для логов и очередей печати.

Поделиться этой публикацией

Main dashboard: live router status, client connection details, port mapping management, and active traffic routing rules

Router Manager (Golang / React)

Панель самообслуживания для автоматизации рутинных сетевых настроек роутера MikroTik без предоставления пользователям административного доступа к оборудованию.