Print server enterprise уровня на OpenWRT
Features
Установка
Настройка
Включение DHCP клиента
Фиксация MAC адреса
Устанавливаем необходимые компоненты
Скрипт 10-prnt-helper
Функционал
Установка
Установка прошивок
Автозапуск
Персистентность
p910nd
Обновление
Заключение
Источники
Эта инструкция по созданию сервера печати на базе OpenWRT.
Имеющиеся в продаже готовые решения примитивны и неоправданно дорого стоят.
Из всех имеющихся на рынке готовых решений только Zyxel Keenetic на старой прошивке версии 1 (возможно на новых тоже) может автоматически загружать прошивку в принтер, но это не сервер печати а WiFi роутер.
Возможность получить и установить свежую прошивку
Широкий выбор аппаратной платформы
Поддержка IPv6, DHCPv6 и тп
Поддержка USB хабов
Поддержка WiFi (встроенного или через дополнительный PCI/USB адаптера)
Возможность одновременной работы с несколькими принтерами
Автоматическая загрузка прошивки в принтер при включении сервера печати или принтера
Лучше посмотреть инструкции по установки для выбранного устройства на сайте openwrt.
На NanoPi NEO установка сводится к:
скачать ext4 образ
с помощью dd залить его на MicroSD флешку
вставить флешку в NanoPi NEO
Заходим в веб интерфейс, адрес по умолчанию: 192.168.1.1, логин root, пароля нет.
Переключаем для работы в качестве DHCP клиента, это более предпочтительно для сервера печати.
Переходим в Network->Interfaces
Edit для LAN
Вкладка General Settings, Protocol: выбираем DHCP Client и Switch protocol, Save, Save & Apply
Переходим в вебгуй на новом адресе чтобы примерились настройки, иначе через 90 секунд настройки откатяся
Для NanoPi NEO требуется зафиксировать mac адрес, чтобы он не генерировал новый после каждой перезагрузки.
Переходим в Network->Interfaces
Edit для LAN
Вкладка Advanced Settings, Override MAC address: вводим примерно тоже самое что там отображается и
Переходим в System->Software
Update lists… (интернет должен быть уже настроен),
В появившемся окне: Dismiss
Устанавливаем: p910nd, luci-app-p910nd, kmod-usb-printer, kmod-lp
Либо через SSH вводим
opkg update opkg install p910nd luci-app-p910nd kmod-usb-printer kmod-lp
При подключении принтера скрипт автоматически
создаёт symlink /dev/PRINTER_SERIAL_NUMBER на /dev/usb/lpX — это нужно чтобы при наличии двух одинаковых принтеров они всегда получали один и тот же TCP порт, не зависимо от порядка включения/загрузки
загружает прошивку с именем ${DEV_VID}-${DEV_PID}. dl из /etc/fw в принтер
выводит информацию о своих действиях в Status->System Log
Подключаемся по ssh:
ssh [email protected]
Создаём папку:
mkdir -p /etc/hotplug.d/usbmisc/
Скачиваем скрипт:
wget -O /etc/hotplug.d/usbmisc/10-prnt-helper http://www.netlab.linkpc.net/download/software/openwrt/print_server/10-prnt-helper
Устанавливаем права:
chmod 0755 /etc/hotplug.d/usbmisc/10-prnt-helper
Устанавливаем владельца:
chown root:root /etc/hotplug.d/usbmisc/10-prnt-helper
Переходим в Status->System Log и ищем строчки содержащие prnt-helper, если принтер подключён и всё сделано правильно они обязательно будут, как пример для HP 1018 будет примерно так:
Sat Jan 16 00:26:07 2021 user. notice prnt-helper: Device /dev/usb/lp0 linked to /dev/DF32CGE Sat Jan 16 00:26:07 2021 user.notice prnt-helper: Attempt to load /etc/fw/03f0-4117.dl to /dev/usb/lp0
Создаём папку:
mkdir -p /etc/fw/
Скачиваем прошивку для HP 1018:
wget -O /etc/fw/03f0-4117.dl http://www.netlab.linkpc.net/download/software/openwrt/print_server/20051028_hp1018.dl
DF32CGE — Уникальный серийный номер принтера.
03f0-4117.dl — VID-PID для HP 1018.
20051028_hp1018.dl — прошивка к которой уже добавлены нужные заголовки.
Подробнее про прошивки и где/как их добывать можно прочитать тут Printer firmware uploder / converter
На случай если принтер и принт сервер были обесточены а потом включены одновременно требуется чтобы при загрузке 10-prnt-helper запускался из стартовых скриптов, поскольку hotplug событие не отрабатывает такие ситуации.
Переходим в System->Startup, вкладка Local Startup
перед “exit 0” добавляем:
for _UMDIR in `find /sys/devices/platform/ -type d -name 'usbmisc'`; do _LPDIR_PATH=`find "${_UMDIR}" -maxdepth 1 -type d -name 'lp*'` [ -z "${_LPDIR_PATH}" ] && continue; _LPNAME=`basename "${_LPDIR_PATH}"` [ ! -c "/dev/usb/${_LPNAME}" ] && continue; _DEVPATH=`echo "${_LPDIR_PATH}" | sed -e 's|/sys||'` echo "Force hotplug for: DEVNAME=usb/${_LPNAME}" ACTION=add DEVNAME="usb/${_LPNAME}" DEVPATH="${_DEVPATH}" /etc/hotplug.d/usbmisc/10-prnt-helper done
Save
Чтобы скрипт и файлы прошивок сохранялись в бэкапах конфигурации а так же при обновлении нужно проделать следующее:
Переходим в System->Backup / Flash Firmware, вкладка Configuration
Добавляем текст:
/etc/hotplug. d/usbmisc/10-prnt-helper /etc/fw/*
Save
Переходим в Services->p910nd — Printer server
Включаем enable
В поле Device вместо /dev/usb/lp0 можно прописать /dev/DF32CGE (то что было в Status->System Log)
Остальное на своё усмотрение
Save & Apply
Через WebUI загрузить ext4 образ (для NanoPi NEO)
Заново установить компоненты
Перезагрузить
Не рассмотрена настройка фаервола, безопасности и прочих базовых возможностей OpenWRT.
Расширенные функции, такие как автоматическое обнаружение тоже не настраивались, возможно это будет сделано позже и данная заметка будет дополнена.
Ретроспективно, это четвёртая реализация сервера печати для HP 1018 за последние 14 лет:
Сервер печати TL-PS110U + Printer firmware uploder / converter
FreeBSD 9 на Equeleus 8132, самописный демон dprint и скрипт под devd для загрузки прошивки (почти не использовалось)
Zyxel Keenetic Giga — проработал долго, пока роутер не вышел из строя, после него использовался опять первый вариант
Основная причина создания этого решения — необходимость автоматической загрузки прошивки в принтер, при этом более качественных и компактных принтеров, не прихотливых в обслуживании сейчас на рынке нет.
В планах на будущее:
Добавить автоматическое обнаружение
Установить NanoPi NEO в металлический корпус
Подключить к NanoPi NEO сканер и настроить кнопки на нём для сканирования на сервер и копирования
p910nd Printer Server
Hotplug
Настройка Hotplug на OpenWRT
Printer firmware uploder / converter
GDI printer and net print server
usb_printerid
software, howto, linux, openwrt, print
Содержание
Итак, есть принтер Ecosys FS-1120D, подключенный к одному компьютеру. Все остальные компьютеры в сети используют его как сетевой. Но если этот компьютер сломается, все останутся без распечатки. Как убрать из цепи Компьютер-Компьютер-Принтер среднее звено? Первый вариант – купить принт-сервер, второй – приобрести принтер с сетевой картой. И то, и другое требует затрат, да и не интересно. Поэтому надо покопаться на пыльных полках.
Итого: латанная материнская плата на AM2, старенький блок питания, двухъядерный Celeron и два гигабайта оперативной памяти. Это – будущий usb принт сервер, который мы сделаем своими руками.
Этап первый, система
Дальнейшее всё делается на виртуальной машине. В качестве операционной системы используется Ubuntu Server 16.04, в основном из-за широкого списка поддерживаемого оборудования.
Устанавливаем систему на виртуальную машину:
Получилась базовая система. В неё надо добавить пакеты:
sudo apt-get update
sudo apt-get install samba samba-common cups mc
Настраиваем samba (/etc/samba/smb.conf)
В стандартном конфиге редактируем (или добавляем, если отсутствует):
[global]
workgroup = Network
netbios name = prints
security = user
map to guest = bad user
Закомментировать строки:
#; interfaces =
#; bind interfaces only = yes
[printers]
guest ok = yes
browseable = yes
[print$]
guest ok = yes
read only = no
Настраиваем CUPS (/etc/cups/cupsd.conf)
Закомментировать строки:
#Listen localhost:631
#Browsing Off
Добавить строки:
ServerAdmin [email protected]
DefaultEncryption Never
Browsing on
Listen 631
Исправить:
# Restrict access to the server…
<Location />
Order allow,deny
Allow All
</Location>
# Restrict access to the admin pages…
<Location /admin>
Order allow,deny
Allow All
</Location>
В файл /etc/rc. local надо добавить строку (cups затыкается после запуска samba):
service cups restart
Теперь перезагрузить сервер.
Этап второй, принтер
Добавляем принтер в CUPS.
Принтер подключается в Windows как сетевой по адресу \\prints\имя_принтера
Делаем лазейку для горячей настройки – добавляем в /etc/rc. local строку “/media/cdrom/cdrom/script.sh” (сюда автоматически монтируется флешка). Сценарий script.sh будет запускаться с правами root.
Устанавливаем xresprobe и pinguybuilder
sudo wget https://launchpad.net/ubuntu/+source/xresprobe/0.4.24ubuntu9/+build/1274262/+files/xresprobe_0.4.24ubuntu9_amd64.deb
Если есть неудовлетворённые зависимости, выполняется:
sudo apt-get –f install
Чистим систему
sudo apt-get -f install
sudo apt autoclean
sudo apt autoremove
Создаём образ
sudo PinguyBuilder backup
Если процесс был прерван, надо удалить временные файлы:
sudo PinguyBuilder clean
Программа создаст образ ISO (размером 500-600 Мб), который надо записать на флешку, флешку воткнуть в материнскую плату и всё это положить в коробку. Материнскую плату надо настроить на включение при подаче питания и запитать от одного выключателя вместе с принтером.
Результат: в любом свободном месте ставится принтер, подключенный к принт-серверу. Время готовности после включения – 2-2,5 минуты. Если что-то работает не так, как хотелось бы, это допиливается через сценарий script.sh, который пишется в корень флешки.
Оцените статью:
(3 голоса, среднее: 3.7 из 5)
Поделитесь с друзьями!
Просто делюсь своим опытом, некоторые вещи, которые я почерпнул в процессе, могут оказаться полезными для других.
У меня есть TP-Link WNDR3600 v1 (N600) с 2 портами USB. У меня также есть термопринтер Citizen CTS310II (вы знаете, чековый принтер). CUPS не помещался во флэш-памяти, не говоря уже о зависимостях Python для облачной печати, которые я хотел. После нескольких мгновений яростного потирания подбородка я подключил 8-гигабайтную флешку к порту и воспользовался extroot.
Для этого мне пришлось установить пару модулей ядра, в частности kmod-fs-ext4 и kmod-usb-storage . После установки перезагрузка — самый быстрый способ убедиться, что они загружаются автоматически, что важно для extroot. Если они не загружаются автоматически, загляните в /etc/modules.d/ и, возможно, создайте загрузочный файл.
Пока вы это делаете, возьмите kmod-usb-printer .
В вашей системе разработки возьмите SDK OpenWRT (который должен соответствовать установленной версии OpenWRT). Настройте свои каналы как обычно, а также добавьте:
src-git print git://github.com/FranciscoBorges/openwrt-printing-packages. git
Это даст вам ghostscript и другие вещи, которые вам понадобятся.
Установите нужные пакеты, которые должны включать cups и ghostscript.
Если вы хотите использовать фильтр gstoraster (необходим для полезной печати на этом термопринтере, возможно, и на других), вам нужно ткнуть в файл Makefile канала ghostscript. Давайте упростим, примените этот патч в OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2/feeds/printing/net/ghostscript/ с помощью команды patch -p0 < gstoraster.diff
make menuconfig и под libs убедитесь, что tiffx отключен (не строится, но нам это все равно не нужно). Остальное должно быть хорошо.
Создайте свои пакеты. Следуйте вики OpenWRT, чтобы узнать, как управлять пакетами с помощью предоставленных сценариев SDK, сделать их доступными для вашей установки OpenWRT и так далее.
На вашем компьютере с OpenWRT установите соответствующие пакеты cups и ghostscript.
Для Citizen CTS310II я взял исходный код драйвера CUPS. Это означало загрузку (из Citizen) ctzpos-cups-1.1.0-0.src.rpm, загрузку его в rpm2cpio, а затем распаковку ctzpos-cups-1.1.0.tar.bz2. Загрузите этот Makefile и переименуйте его в Makefile, скопируйте его в исходный каталог ctzpos. Ожидается, что STAGING_DIR установлен (что будет, если вы настроили свой SDK). Отредактируйте Makefile, при необходимости измените пути и имя компилятора. Как только он (надеюсь) скомпилируется, вам нужно будет ВРУЧНУЮ перенести полученные двоичные файлы фильтра на ваше целевое устройство. Их нужно установить на /usr/lib/cups/filter/ .
Если вы включили и установили фильтр gstoraster, вам также следует убедиться, что ваши правила mime.convs обновлены. В одном из них у вас должны быть следующие строки:
application/vnd.cups-pdf application/vnd.cups-raster 99 gstoraster
application/vnd.cups-postscript application/vnd.cups-raster 175 gstoraster
Если вы видите сообщения об ошибках CUPS, такие как Неподдерживаемый формат «приложение/постскриптум» у вас либо не установлены вышеуказанные правила, либо ваш фильтр (gstoraster) по какой-то причине не работает.
Также не работал автоматический поиск устройства принтера из веб-интерфейса. «Добавить принтер» не предлагает какие-либо обнаруженные принтеры в качестве параметров. Все в порядке, я закрыл cupsd и отредактировал /etc/cups/cupsd.conf , добавив FileDevice Yes и сохранив/запустив cups. Затем я запустил /usr/lib/cups/backend/usb и скопировал/вставил URI во ввод URI для добавления принтера (в моем случае usb://CITIZEN/CT-S310II?serial=00000000). Когда меня попросили указать файл .ppd, я загрузил файл, включенный в исходный код Citizen CTS310II.
Как только вы закончите настройку CUPS так, как вы хотите, все готово, если только вы не хотите использовать облачный принтер.
Cloudprint кажется достаточно простым, это приложение Python, которое взаимодействует с использованием pycups. Безвредный? Вот в чем загвоздка: вы можете установить pycups и cloudprint с помощью pip, но для pycups требуются заголовки cups и iconv.
Итак, либо вы устанавливаете make/gcc/etc. на вашем устройстве OpenWRT или вы создаете пакет pycups. У меня есть rootfs на 8 ГБ, поэтому я выбрал первое. Я скопировал нужные мне файлы заголовков и установил pycups и cloudprint. (Я могу описать эти шаги позже, если это необходимо, но это действительно хакерство.)
Итак, сколько времени занимает печать документа размером с чек (20 см x 8 см)? 45 секунд. Ой, черт возьми, но это работает.
В любом случае, в качестве побочной мысли, сценарий для сборки пакетов pip AS пакетов ipkg был бы довольно милым … кто-нибудь хочет заняться этим? 🙂
Сейчас многие устройства работают под управлением Linux, но в основном это прошивка с закрытым исходным кодом, к которой у вас нет доступа. Мы покажем, как использовать OpenWrt, чтобы освободить маршрутизатор TL-MR3020 от проприетарной прошивки и превратить его в универсальный сервер для вашей домашней сети.
Компания TP-Link производит маршрутизаторы различных классов производительности. TL-MR3020 (рис. 1) позиционируется производителем как мобильный маршрутизатор, поскольку он небольшой и легкий. Однако он не поддерживает 3G (см. поле «Оборудование»), хотя вы можете обновить его через порт USB.
Рисунок 1: TL-MR3020 TP-Link (слева) размером не больше ладони. Концентратор mini-USB от Pearl (справа) выступает в роли расширителя.
Таким образом, роутер предназначен для людей, которым не нужен 3G или у которых есть UMTS-модуль, и поэтому они не хотят вкладывать деньги в дорогой мобильный UMTS-маршрутизатор. Однако «нормальное» использование маршрутизатора не является предметом этой статьи; вместо этого я опишу, как превратить его в мини-сервер.
Для этого вы замените существующую прошивку на OpenWrt, специальный дистрибутив Linux для микроустройств. OpenWrt имеет систему управления пакетами, ничем не уступающую классическим дистрибутивам; таким образом, только ограничения аппаратного обеспечения могут ограничить ваше творчество.
Prelude
TL-MR3020 хорошо подходит для этой цели по двум причинам: устройство. С другой стороны, никаких препятствий на пути установки сторонних прошивок производитель не ставит.
Для начала скачайте правильную версию OpenWrt и следуйте кратким, но вполне достаточным инструкциям, прилагаемым к роутеру, для подключения к веб-интерфейсу устройства. Когда вы туда доберетесь, загрузите новую прошивку в TL-MR3020, выбрав Upgrade в новой веб-форме (рис. 2).
Рисунок 2: OpenWrt загружается как обновление прошивки через исходный веб-интерфейс на TL-MR3020.
Загрузка прошивки — единственный действительно важный шаг во всем процессе. Бракованный образ прошивки отправит роутер на охоту — единственный шанс — паяльник. Таким образом, перед загрузкой изображения необходимо ознакомиться с сообщениями на вики OpenWrt и следовать соответствующим инструкциям.
После установки OpenWrt следующим шагом будет базовая настройка, особенно для сети. Затем вам необходимо установить ряд программных пакетов, которые улучшают поддержку USB для носителей данных (флешек или жестких дисков). Этот шаг позволяет загрузить маршрутизатор с внешнего диска. Затем в расширенную корневую файловую систему вы добавляете дополнительные пакеты программного обеспечения из репозитория OpenWrt для фактического приложения.
Первый контакт
После обновления прошивки и перезагрузки устройства вы можете подключить свой ПК или ноутбук к роутеру с помощью кабеля. Настройте сеть (обычно для этого можно использовать сетевой менеджер) и войдите через Telnet на 192.168.1.1 (рисунок 3). Маршрутизатор запускает DHCP-сервер, который предоставляет подходящий адрес для вашего ПК или ноутбука.
Рисунок 3: Готово: первый вход в OpenWrt.
На этом этапе вы должны установить пароль для root. Затем OpenWrt отключает сервер Telnet из соображений безопасности и запускает сервер SSH. Далее настройте конфигурацию сети так, чтобы роутер находился в вашей домашней сети; затем вы можете двигаться дальше и добавить больше программного обеспечения. Для получения подробной информации о системе конфигурации OpenWrt см. блок «Настройка OpenWrt».
Рисунок 4: Использование веб-интерфейса на OpenWrt для получения состояния системы.
Чтобы использовать маршрутизатор в качестве сервера в домашней сети, конфигурация сети должна выглядеть, как в листинге 1 ( /etc/config/network ) и листинге 2 ( /etc/config/wireless ).
Листинг 1: /etc/config/network
01 # /etc/config/network ----------------- 02 03 config интерфейс 'loopback' 04 опция ifname 'lo' 05 вариант прото 'статический' 06 опция ipaddr '127.0.0.1' 07 опция сетевая маска '255.0.0.0' 08 09конфиг интерфейс 'wifi' 10 вариант прото 'статический' 11 опция ipaddr '192.168.3.100' 12 опция сетевая маска '255.255.255.0' 13 опция шлюз '192.168.3.1' 14 список dns '192.168.3.1' 15 list dns '8.8.8.8'
Строки 9–15 в листинге 1 настраивают интерфейс WLAN.
Листинг 2: /etc/config/wireless
01 # /etc/config/wireless ---------------- 02 03 config wifi-устройство radio0 04 опция тип mac80211 05 опция канал 11 06 опция macaddr 90:f6:52:e6:d7:b2 07 опция hwmode 11ng 08 опция htmode HT20 09 список ht_capab SHORT-GI-20 10 список ht_capab SHORT-GI-40 11 список ht_capab RX-STBC1 12 список ht_capab DSSS_CCK-40 13 # УДАЛИТЕ ЭТУ СТРОКУ, ЧТОБЫ ВКЛЮЧИТЬ WIFI: 14 # опция отключена 1 15 16 config wifi-iface 17 опция устройство радио0 18 опция сеть wi-fi 19 опция режим ста 20 опция ssid 'my-ssid' 21 опция шифрование psk2 22 option key 'secret'
Листинг 2, строка 19гарантирует, что сервер интегрирован в сеть как клиент WLAN , а не как точка доступа или маршрутизатор.
После перезагрузки устройство должно найтись по настроенному сетевому адресу. Если нет, может помочь аварийный режим: во время загрузки нажмите кнопку WPS, как только она начнет мигать. Если светодиодный индикатор быстро мигает, снова отпустите его. Теперь устройство находится в отказоустойчивом режиме с адресом по умолчанию 192.168.1.1 и запущенным демоном Telnet. Вы можете подключиться к Telnet и внести необходимые исправления. Однако в этом режиме на маршрутизаторе недоступен DHCP-сервер. Вы должны вручную назначить соответствующий IP-адрес своему компьютеру.
Дополнительное ПО
Исходный образ прошивки не содержит всех компонентов, необходимых для запуска корневой файловой системы на USB-накопителе, поэтому вам нужно будет добавить их сейчас. После успешного завершения настройки сети мини-маршрутизатор может получить доступ в Интернет и использовать удобную систему управления пакетами для установки дополнительного программного обеспечения задним числом.
Важным моментом является команда opkg , которую вам нужно запустить от имени пользователя root. Для этого сначала позвоните по номеру opkg update для обновления списка пакетов. Затем установите указанные пакеты с помощью следующей команды:
# opkg install
Если вы ищете конкретный пакет, подкоманда list выводит список пакетов с краткими описаниями. Для установки через USB в первую очередь потребуется набор пакетов ядра (листинг 3).
Листинг 3: Подготовка USB-накопителя 02 # Базовая поддержка USB (USB 1.1 и USB 2) 03 opkg обновление 04 opkg установить kmod-usb-uhci kmod-usb-ohci kmod-usb2 05 insmod uhci 06 insmod usb-ohci 07 insmod usbcore 08 insmod ehci-hcd 09 10 # USB хранилище (FAT требуются дополнительные модули 11 # который вы можете обновить позже однако) 12 opkg установить kmod-usb-storage-mount блок kmod-fs-ext4-core kmod-scsci 13 14 # Подготовить USB накопитель (на ПК) 15 # -> Раздел с тремя разделами (root, home, swap) 16 # fdisk /dev/sdb и т. д. 17 # -> Формат разделов с помощью ext4 или своп 18 # mkfs.ext4 /dev/sdb1 19 # mkfs.ext4 /dev/sdb2 20 # mkswap /dev/sdb3 21 22 # Подготовить корневую на USB (копирует старую корневую файловую систему) 23 mkdir -p /mnt/usb 24 mount /dev/sda1 /mnt/usb 25 tar -cvf - -C /оверлей . | tar -xf - -C /mnt/usb 26 количество /мнт/usb
Лучше всего разбить и отформатировать USB-накопитель ( /dev/sdb в списке — вам может потребоваться изменить это) на вашем ПК. Помимо корневого раздела, вам понадобится домашний раздел и, прежде всего, пространство подкачки.
Затем вы можете просто подключить флешку к маршрутизатору и изменить конфигурацию точек монтирования в файле /etc/config/fstab . Строки 10-16 в листинге 4 важны.
Листинг 4. Настройка точек монтирования
01 # Настроить точки монтирования 02 config глобальный automount 03 опция из_fstab 1 04 опция anon_mount 1 05 06 конфиг глобальный автоподкачка 07 опция из_fstab 1 08 опция anon_swap 0 09 10 конфиг монтирование 11 опция цель /оверлей 12 опция устройство /dev/sda1 13 опция fstype ext4 14 опция опции rw, синхронизация 15 опция включена 1 16 опция enabled_fsck 0 17 18 конфиг монтирование 19 опция цель /дом 20 опция устройство /dev/sda2 21 опция fstype ext4 22 опция опции rw, синхронизация 23 опция включена 1 24 опция enabled_fsck 1 25 26 конфигурация своп 27 опция устройство /dev/sda3 28 опция включена 1
Последняя строка листинга 3 копирует всю корневую файловую систему на флешку. Рекомендуется создать резервную копию сейчас. Система все равно загрузится, даже если флешка не вставлена: в этом случае она просто игнорирует несуществующие устройства.
После перезагрузки с подключенной флешкой у вас наконец появилось больше места на диске. Любые пакеты, которые вы теперь добавляете, могут храниться там. В общем, наличие корневой файловой системы на USB-устройстве удобно. Вы можете изменять конфигурацию с помощью обычных редакторов на ПК и легко копировать данные между локациями (например, для резервных копий).
На этом базовая конфигурация завершена, за исключением нескольких вещей, таких как имя хоста. Оставшаяся часть процедуры зависит от того, как вы будете использовать маршрутизатор, и вы можете использовать диспетчер пакетов для получения и настройки необходимого программного обеспечения. Процедура на OpenWrt ничем не отличается от любого другого дистрибутива.
Кнопки и светодиоды
С помощью веб-интерфейса или SSH вы можете полностью управлять TL-MR3020 как мини-сервером. Однако проще использовать существующие кнопки. Оригинальная кнопка WPS подходит для запуска отдельных действий, а боковой ползунковый переключатель (с тремя положениями) выполняет переключение между различными режимами работы (подробнее об этом позже).
Светодиоды служат своего рода устройством вывода. Возможны три различных состояния: включено, выключено или мигает. В сочетании с кнопками вы можете создать несколько приятных функций. С технической точки зрения вам нужно управлять светодиодами в файлах ниже /sys/class/leds (например, для светодиода WPS это /sys/class/leds/tp-link:green:wps каталог ). Создатели OpenWrt скрывают сложность, и обычно вам нужно только отредактировать конфигурацию в файле /etc/config/system 9.0100 (листинг 5, строки 13-35).
Листинг 5: Редактирование /etc/config/system
01 # Настройка светодиодов и кнопок 02 конфигурация система 03 опция имя хоста 'jupiter.bablokb-local.de' 04 опция часовой пояс 'CET-1CEST,M3. 5.0,M10.5.0/3' 05 06 конфигурация сервер времени 'ntp' 07 список серверов '0.openwrt.pool.ntp.org' 08 список серверов '1.openwrt.pool.ntp.org' 09 список серверов '2.openwrt.pool.ntp.org' 10 список серверов '3.openwrt.pool.ntp.org' 11 опция enable_server '0' 12 13 config led 'led_usb' 14 имя опции 'USB' 15 опция sysfs 'tp-link:green:3g' 16 опция триггер 'usbdev' 17 опция dev '1-1' 18 вариант интервал '50' 19 20 config led 'led_wlan' 21 название опции 'WLAN' 22 опция sysfs 'tp-link:green:wlan' 23 опция триггер 'phy0tpt' 24 25 config led 'led_lan' 26 название опции 'LAN' 27 опция sysfs 'tp-link:green:lan' 28 опция триггер 'netdev' 29 опция dev 'eth0' 30 опция режим 'ссылка tx rx' 31 32 config led 'led_wps' 33 имя опции 'wps' 34 опция sysfs 'tp-link:green:wps' 35 опция триггер 'по умолчанию включена' 36 37 кнопка настройки 38 опция кнопка 'wps' 39 опция действие 'выпущено' 40 опция мин '3' 41 опция макс '6' 42 опция обработчик 'остановка' 43 44 кнопка конфигурации 45 опция кнопка 'wps' 46 опция действие 'выпущено' 47 опция мин '0' 48 опция макс '2' 49опция обработчик 'logger wps нажата 0-2s' 50 51 конфигурация слайдер 'слайдер' 52 option handler '/usr/sbin/handle_slider'
Как правило, OpenWrt связывает активность светодиодов с рабочими состояниями отдельных компонентов, таких как сеть или интерфейс USB. Однако вы можете настроить значения по умолчанию в соответствии с вашими потребностями.
Настройка коммутатора также проста. Вам необходимо настроить ядро системы событий так, чтобы оно срабатывало при соответствующих событиях кнопки. Для этого отредактируйте 9Кнопки струн. Поскольку это список исключений, вы включаете события для кнопок, удаляя знак комментария. С этого момента система запускает все сценарии в каталоге /etc/hotplug/button для каждого события кнопки. Переменные BUTTON и ACTION установлены.
Пример, демонстрирующий взаимодействие со светодиодами, показан в листинге 6.
Листинг 6: Взаимодействие светодиодов
01 #!/bin/sh 02 # Обрабатывать кнопочные события 03 04 set_led_blink() { 05 # Переключатель мигает вкл (1с вкл / 0,2 сек выкл) 06 эхо таймер > /sys/class/leds/tp-link\:зеленый\:wps/триггер 07 echo 1000 > /sys/class/leds/tp-link\:зеленый\:wps/delay_on 08 echo 200 > /sys/class/leds/tp-link\:green\:wps/delay_off 09# Выключить через три секунды 10 спать 3 11 эхо нет > /sys/class/leds/tp-link\:зеленый\:wps/триггер 12 # Включить через три секунды 13 спать 3 14 set_led_on 15 } 16 17 set_led_on() { 18 # Включить светодиод 19 эхо включено по умолчанию > /sys/class/leds/tp-link\:green\:wps/trigger 20 } 21 22 if [ "$BUTTON" = "wps" ]; затем 23 if [ "$ACTION" = "нажато" ]; затем 24 set_led_blink & 25 еще 26 set_led_on 27 фи 28 еще 29 выход 0 30 fi
Этот сценарий предназначен только для кнопки WPS (строка 22) и заставляет светодиод WPS мигать в течение трех секунд (строки 6–8 и 10), а затем гаснуть еще на три секунды. Когда вы отпускаете кнопку, скрипт снова включает светодиод (строка 19).
Вместо того, чтобы хранить каждый сценарий по отдельности в каталоге Button и запрашивать там состояние переключателя, как в листинге 5, имеет смысл загрузить общий сценарий кнопки из сокровищницы OpenWrt. Затем вы можете настроить переключатель аналогично светодиодам в /etc/config/system .
Кнопка WPS здесь настроена как переключатель off : Если удерживать кнопку нажатой не менее трех, но не более шести секунд, а затем отпустить, система выключится (строки 37–42 в листинге 5). ).
Этот шаг также раскрывает смысл программы в листинге 6; светодиод кнопки мигает в течение трех секунд, а затем выключается на три секунды, поэтому вам не нужно считать, чтобы выключить систему. Точно так же вы также можете использовать кнопку WPS, чтобы начать другую операцию с помощью коротких щелчков. В листинге 5 (строки 44–49) для демонстрационных целей настраивается запись журнала.
Ползунковый переключатель
Ползунковый переключатель на TL-MR3020 немного сложнее по двум причинам. Во-первых, ядро видит ползунковый переключатель не как одну кнопку, а как две; отображение трех возможных состояний занимает 2 бита. Таким образом, каждое изменение переключателя инициирует два события, которые последовательно достигают сценария обработки, но должны оцениваться вместе. Во-вторых, система событий видит только изменения.
Теперь вы можете попробовать небольшой скрипт, проверяющий состояние ползункового переключателя при загрузке, например, для настройки сетевого окружения. Однако этот аспект лишь намекает в вики-документации OpenWrt. В листинге 7 показано, как это сделать.
Листинг 7. Проверка состояния ползункового переключателя
01 #!/bin/sh 02 # Читать ползунок (иначе BTN_0/BTN_1) 03 # rmmod использует подчеркивание, insmod использует штрих! 04 rmmod gpio_button_hotplug # Удалить ядро модуль 05 echo 18 > /sys/class/gpio/export # export BTN_0 06 echo 20 > /sys/class/gpio/export # export BTN_1 07 cat /sys/class/gpio/gpio18/value > /var/run/BTN_0 # Status BTN_0 08 cat /sys/class/gpio/gpio20/value > /var/run/BTN_1 # Статус BTN_1 09echo 18 > /sys/class/gpio/unexport # unexport BTN_0 10 echo 20 > /sys/class/gpio/unexport # unexport BTN_1 11 INSMOD GPIO-BUTTON-HOTPLUG#Модуль ядра загрузки
Сценарий хранит состояние двух кнопок BTN_0 и BTN_1 в соответствующих именованных файлах под /var /run . Скрипт запускается один раз при запуске, начиная с /etc/rc.local .
Напротив, сценарий в листинге 8 запускается для каждого события кнопки.
Листинг 8: Обновление кнопки состояния
01 #!/bin/sh 02 # Обрабатывать слайдер события 03 . /lib/functions.sh 04 ЗАДЕРЖКА=5 05 LOCK=/var/run/slider.lock 06 07 # --- Выполнить обновление (асинхронно) --- 08 run_handler() { 09 # Только начать если не уже активно 10 если ! mkdir "$LOCK" 2>/dev/null; затем 11 logger "скрипт обновления уже выполняется" 12 выход 0 13 фи 14 15 # Чтение сценария обработки из /etc/config/system 16 config_load система 17 config_get обработчик слайдер обработчик 18 logger "сценарий-обработчика: $handler" 19 20 регистратор "ожидание $DELAY секунд для всех событий" 21 спать $DELAY 22 eval $handler # Execute обработчик 23 rm -fr "$LOCK" 24 } 25 26 # --- Главная Программа ---- 27 логгер "Обработка события '$ACTION' для $BUTTON" 28 29 # Игнорировать WPS кнопку 30 if [ "$BUTTON" = "wps" ]; затем 31 выход 0 32 фи 33 34 # Кнопка обновить файл для соответствия событию 35 if [ "$ACTION" = "нажато" ]; затем 36 echo "1" > "/var/run/$BUTTON" 37 еще 38 echo "0" > "/var/run/$BUTTON" 39 фи 40 # Выполнить асинхронно 41 run_handler & # (не не блокировать обработку событий)
Обновляет кнопку состояния в /var/run . Кроме того, он запускает сценарий обработки. Дополнительная магия в строках 10-12 гарантирует запуск только одного сценария обработки. Время ожидания перед обработкой (строка 21) гарантирует, что все соответствующие события кнопки также будут получены и обработаны. Строки 16 и 17 извлекают сценарий обработки из файла конфигурации /etc/config/system . Затем сценарий обработки начинается со строки 22.
Пример такого сценария показан в листинге 9..
Листинг 9: Сценарий обработки
01 #!/bin/sh 02 # Обработка скрипта для слайдера 03 регистратор "Выполнить $0" 04 05 # Статус чтения ползунка 06 if [ `cat /var/run/BTN_0` = "0" ]; затем 07 slider="WISP" 08 elif [ `cat /var/run/BTN_1` = "0" ]; затем 09 слайдер="3G" 10 еще 11 слайдер="AP" 12 фи 13 логгер "Статус ползунка: $slider" 14 15 # Удалить старые симлинки 16 rm /etc/config/dhcp 17 rm /etc/config/сеть 18 rm /etc/config/wireless 19 20 # Установить новые симлинки 21 ln -s dhcp.$slider /etc/config/dhcp 22 ln -s network. $slider /etc/config/network 23 ln -s беспроводная сеть.$slider /etc/config/wireless 24 25 # Перезапустите сеть и DHCP 26 /etc/init.d/network перезапустить 27 /etc/init.d/dnsmasq перезапустить
Считывает состояние ползункового переключателя и переконфигурирует сеть. Фактические сетевые файлы представляют собой только символические ссылки; таким образом, реконфигурация состоит из указания символических ссылок на новые файлы конфигурации. Например, /etc/config/network.AP содержит конфигурацию сети, когда ползунок находится в положении AP . Имеет смысл запустить скрипт обработки один раз во время запуска (в /etc/rc.local ) после прочтения состояния ползунка.
Выводы
В этой статье я объяснил аппаратное обеспечение, поэтому вам нужно «всего лишь» объединить отдельные компоненты. Например, для получения более подробной информации о том, как запустить флешку UMTS или реализовать определенные сетевые сценарии, см. вики OpenWrt.
Небольшой маршрутизатор TL-MR3020 не может работать со всеми приложениями (см. вставку «Дополнительные примеры приложений»). Однако описанные здесь механизмы как минимум аналогичны другим устройствам, в том числе других производителей. В верхней части спектра мощности находятся устройства QNAP NAS, которые поставляются с установленным OpenWrt. Однако набор предварительно настроенных сервисов усложняет настройку.
Информация
[1] Подробная информация для TL-MR3020: http://wiki.openwrt.org/toh/tp-link/tl-mr3020
Автор
. 3KABL работает в Allianz Managed Operations & Services SE разработчиком SAP HR. Когда он не слушает музыку, не катается на велосипеде и не ходит пешком, он сосредотачивается на темах, связанных с Linux и объектной ориентацией. Вы можете связаться с ним по телефону [email protected] .Включите JavaScript для просмотра комментариев на основе Disqus.