Русский
Русский
English
Статистика
Реклама

Openwrt

Устройство пакетной системы OpenWRT

02.12.2020 18:09:40 | Автор: admin
Операционная система OpenWRT обычно используется как прошивка для роутеров. Типичное применение заключается в том, чтобы установить и забыть. Но если вдруг вам чего-то не хватит, то придётся разбираться в устройстве дистрибутива.



OpenWRT использует OPKG в качестве пакетного менеджера, точнее, собственный форк. Дебианщикам он во многом покажется знакомым: похожие команды, похожий формат репозитория и пакетов.

Мне захотелось запатчить LUCI (этого в статье не будет), но адекватного быстрого введения я не нашёл, пришлось самостоятельно собирать отрывки сведений из разрозненной документации, статей и примеров, поглядывая в код и на результаты работы. Бонусом собрал примитивный (но бесполезный на практике) пакет, которого ещё нет в репозитории. Собранным ликбезом делюсь ниже.

Устройство репозитория


В файловой системе OpenWRT есть файл /etc/opkg/distfeeds.conf, в нём указывается системный (предоставленный разработчиками OpenWRT и OPKG) список репозиториев. Собственные и сторонние репозитории можно указать в /etc/opkg/customfeeds.conf. Формат однострочный, состоит из трёх слов:

  1. src или src/gz, от этого зависит, будет качаться файл Packages или Packages.gz. Судя по коду, есть другие опции для первого слова, но я не нашёл репозиториев, для которых это было бы актуально. Несмотря на src в названии, это репозиторий для бинарных пакетов. Специального формата репозиториев для пакетов с исходным кодом, аналогичного тому, что используется в Debian/APT, у OPKG не предусмотрено.
  2. Название репозитория или фида в терминологии OPKG/OpenWRT.
  3. URL, внутри которого лежит файл Packages/Packages.gz.

При выполнении opkg update к URL через / добавляется Packages или Packages.gz, список пакетов и подписи сохраняется в /tmp/opkg-lists, файл называется соответственно второму слову в списке репозиториев. Отсюда два важных вывода:

  1. При перезагрузке кэш очистится. На встроенных системах вроде роутеров это абсолютно разумно.
  2. В /etc/opkg/customfeeds.conf можно оверрайдить системные фиды своими собственными, дав им такое же название. OPKG ругнётся, но проглотит оверрайд, сложив нужный файлик вместо загруженного ранее.

Заодно будет загружен Packages.sig, в котором должен лежать хэш распакованного списка пакетов. В самом списке просто перечисляются пакеты, для каждого пакета есть несколько значений, значения для разных пакетов отделяются пустой строкой. Вот самые важные поля для каждого пакета:

  • Package, имя пакета;
  • Version, версия, при наличии нескольких пакетов с одинаковым именем можно выбрать версию, по умолчанию установится самая свежая;
  • Depends, зависимости от других пакетов, пакетный менеджер доустановит перечисленные пакеты в случае их отсутствия в системе;
  • Filename, путь к файлу относительно базового URL репозитория, обычно репозиторий плоский и всё лежит там же, где и `Packages.gz`;
  • SHA256sum, заявленный репозиторием хэш пакета.

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

Бинарные пакеты


Бинарные пакеты почти аналогичны пакетам Debian. Разница следующая:

  1. Расширении .ipk вместо .deb.
  2. Упаковывается всё с помощью `tar` и сжимается с помощью gzip, это же справедливо для вложенных архивов. В Debian архив верхнего уровня упаковывается более примитивным ar, а вложенные архивы чаще всего имеют расширение .tar.xz, инструменты используются соответствующие.

Если вы поменяете расширение пакета для OpenWRT на .tar.gz и распакуете, то обнаружите внутри два архива и один текстовый файл. Файл называется debian-version, в нём содержится версия формата бинарного файла и она нам не очень интересна, в современных системах эта версия всегда равняется 2.0.

Архив data.tar.gz содержит исполняемые файлы, файлы конфигурации и всё, ради чего устанавливается пакет. Если распаковать его в корень ФС, вы получите все ожидаемые файлы на нужных местах, в /usr/bin/, /etc/ и так далее.

А в control.tar.gz находятся вспомогательные файлы для пакетного менеджера. Это скрипты, которые должны выполняться до или после установки и удаления (preinst, postinst, prerm, postrm), сведения о файлах, являющихся конфигурационными, и метаинформация о пакете, во многом повторяющая ту, что содержится в Packages.

Система сборки пакетов


Сборочная система (она же SDK) выполнена в виде Make-фреймворка. Фреймворк не подразумевает, что вы будете собирать пакеты по отдельности, его основная задача заключается в сборке целых репозиториев.

SDK для x86_64 лежит в git. Есть архив (ссылка скоро устареет, но найти свежий несложно), который сэкономит вам время на компиляции тулчейна для сборки. Внутри особый интерес представляет файл feeds.conf.default. Формат несложный, через пробел:

  1. Ключевое слово src-git. Поддерживается не только git, но сейчас репозиториев в иных VCS нет.
  2. Название фида.
  3. URL git-репозитория, в котором можно указать коммит или тег. Если вы знаете, как называется такая спецификация, подскажите, пожалуйста.

Сам репозиторий с пакетами устроен максимально просто: в корне репозитория категория пакета, на втором уровне директория с названием пакета, а внутри него лежит Makefile, опционально `Config.in` для дополнительных опций при выполнении make menuconfig и субдиректория patches с соответствующим содержимым. Для простейшего пакета достаточно только Makefile. Для примера можете заглянуть в зеркало основного репозитория.

Тестовая сборка


Я попробовал собрать GNU Hello, чтобы проверить, как работает SDK. Это сравнительно монструозный Hello World, написанный в строгом соответствии с гайдлайнами проекта GNU, его единственная задача заключается в иллюстрации этих гайдлайнов. Отдельный репозиторий для него не создавал, а вместо этого подсунул в базовые пакеты SDK, откуда и скомпилировал.

Для работы самого SDK в окружениии Debian понадобятся пакеты libncurses-dev (для меню сборки), build-essential (GCC и прочие стандартные зависимости программ на C), gawk, unzip, file, rsync и python3. Также для создания репозитория из собранных пакетов, потребуется утилита для генерации ключей usign. Её в репозитории нет, поэтому дополнительно потребуется `cmake` для сборки. Этот инструмент можно заменить как на GPG, так и на signify-openbsd, но она рекомендуется и разрабатывается проектом OpenWRT, а также гораздо приятней в использовании.

Компилируем и устанавливаем usign:

git clone https://git.openwrt.org/project/usign.gitcd usigncmake .makesudo make install 

Вместо установки (sudo make install) можете просто запомнить, где находится бинарь, чтобы в дальнейшем дёргать его руками.

Теперь базовая настройка SDK:

git clone https://git.openwrt.org/openwrt/openwrt.gitcd openwrt./scripts/feeds update -a./scripts/feeds install -a

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

Выполняя ./scripts/feeds update -a мы клонируем/обновляем все репозитории из feeds.conf(.default), проверяем зависимости и готовим директорию staging_dir/host/bin с исполняемыми файлами (в основном это симлинки на системные утилиты). Следующая команда, ./scripts/feeds install -a, рассовывает симлинки в package/feeds, откуда они и будут браться для компиляции. Эти две команды не обязательны для сборки моего кастомного пакета.

Далее выполняется make menuconfig. Можно пропустить, но при компиляции пакета всё равно выдаст соответствующее окошко. В нём достаточно поменять таргет и сабтаргет, чтобы всё скомпилировалось под x86_64 и выйти, согласившись с сохранением конфига. Также потребуется собрать вспомогательный инструментарий для сборки (make tools/install) и тулчейн (make toolchain/install). Если вы качали SDK из архива, то make menuconfig вам не покажет опций для выбора таргета, а сборка инструментария и тулчейна не требуется всё уже есть на месте.

Теперь я создаю директорию package/devel/hello, в которой размещаю Makefile следующего содержания:

Makefile
include $(TOPDIR)/rules.mkPKG_NAME:=helloPKG_VERSION:=2.9PKG_RELEASE:=1PKG_LICENSE:=GPL-3.0-or-laterPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gzPKG_SOURCE_URL:=@GNU/hello/PKG_HASH:=ecbb7a2214196c57ff9340aa71458e1559abd38f6d8d169666846935df191ea7include $(INCLUDE_DIR)/package.mkdefine Package/hello        SECTION:=devel        CATEGORY:=Development        TITLE:=GNU Hello        URL:=https://www.gnu.org/software/hello/endefdefine Package/hello/description        The GNU Hello program produces a familiar, friendly greeting. Yes,        this is another implementation of the classic program that prints        Hello, world! when you run it. However, unlike the minimal version        often seen, GNU Hello processes its argument list to modify its        behavior, supports greetings in many languages, and so on. The primary        purpose of GNU Hello is to demonstrate how to write other programs that        do these things; it serves as a model for GNU coding standards and GNU        maintainer practices.endefdefine Package/hello/install        $(INSTALL_DIR) $(1)/usr/bin        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/hello $(1)/usr/bin/endef$(eval $(call BuildPackage,hello))

В основном всё должно быть понятно без пояснений. Подключаются файлы фреймворка, описываются основные параметры пакета, @GNU подменяется на зеркала проекта GNU (определены во фреймворке), а путь состоит из двух частей: PKG_SOURCE_URL, в котором указывается базовый URL для всех версий и расширяется конкатенацией именем файла из PKG_SOURCE через слэш. В Package/hello/install содержатся инструкции по сборке бинарей в архив data.tar.gz. Дополнительные опции для сборки, если потребуются, доступны в документации. Кстати, не забудьте, что make очень требователен к отступам, у меня вместо начальных пробелов были одиночные табы.

Снова вызываете make menuconfig, проверяете, что в обозначенной секции (Development в моём случае) отмечен пакет hello и выходим сохранив конфиг. Наконец, собираем пакет в три этапа; скачивание, распаковка и собственно компиляция:

make package/hello/downloadmake package/hello/preparemake package/hello/compile

В результате я получил пакет bin/packages/x86_64/base/hello_2.9-1_x86_64.ipk. Можно собирать репозиторий. Генерируем пару ключей (usign -G -c 'openwrt test repo' -s key-build -p key-build.pub, приватный ключ обязательно должен называться `key-build`), и собираем репозиторий: make package/index. На этом этапе сборка может ругнуться на отсутствие usign в директории со вспомогательными утилитами, я решил проблему симлинком: ln -s `which usign` staging_dir/host/bin/usign. Теперь рядом с пакетом лежит полный набор, необходимый для репозитория.

Проверяем репозиторий вместе с пакетом


Вы можете проверить всё на настоящем роутере (не забудьте только выбрать правильный таргет), но я воспользовался Докером. В Докерхабе есть образ OpenWRT для x86_84, который можно запустив, пробросив внутрь контейнера директорию с SDK: sudo docker run -it --name openwrt_test -v $PWD:/opt openwrtorg/rootfs. Потыкайте кнопку ввода пока не появится приглашение Баша.

Копирую ключ из проброшенной директории (cp /opt/key-build.pub /etc/opkg/keys/usign -F -p /opt/key-build.pub, название ключа обязательно должно совпадать с идентификатором), добавляю свой локальный репозиторий (echo src/gz local file:///opt/bin/packages/x86_64/base >> /etc/opkg/customfeeds.conf), обновляю репозиторий (opkg update). Вывод начинается с обнадёживающего текста, всё подписано верно:

# opkg updateDownloading file:///opt/bin/packages/x86_64/base/Packages.gzUpdated list of available packages in /var/opkg-lists/localDownloading file:///opt/bin/packages/x86_64/base/Packages.sigSignature check passed.

Осталось только установить и проверить:

root@34af2f6e849b:/# opkg install helloInstalling hello (2.9-1) to root...Downloading file:///opt/bin/packages/x86_64/base/hello_2.9-1_x86_64.ipkConfiguring hello.root@34af2f6e849b:/# helloHello, world!

Ура, готово! Несмотря на разбросанную по статьям документацию, процесс сборки пакетов довольно прост.



Подробнее..

Openwrt сниффер витой пары

25.07.2020 22:11:28 | Автор: admin
Всем доброго времени суток, моя не большая история началась с того как мы с другом спорили о стандартах 10BASE-T и 100BASE-T о полных и халф-дуплексах в итоге решил на примере готового устройства показать ему что слушать с пар можно.
Прочитав статью взял свой старенький TP-Link mr3240 v1.2 на котором была дефолтная прошивка. немного танцев с бубном и вот на нем уже полноценный снифер с Openwrt на борту, 8Ah батарейка, Wireguard и флешечка для хранения дампов в случае чего.

Установку openwrt описывать не буду т.к мануалов и так куча.
начнем наверно с установки tcpdump и подготовки самого WRT
логинимся в роутер по SSH дефолт root без пароля
далее
opkg update && opkg install openwrt

img


далее немного настроек в Switch openwrt переходим 192.168.1.1
Network -> Switch

будем слушать порт wan и 4 порт, при этом появится интерфейс влана eth0.3, если оставить настройки дефолтными то на 4 порту мы будем слышать только широковещательные сообщения т.к процессор не будет обрабатывать все адресованные не ему сообщения,
в случае со статьей вдохновившей меня мы слушали только одну пару либо RX либо TX в моём случае мы слушаем обе на интерфейсах eth1 и eth0.3
суть в том чтоб подключить пары Rx и Tx на пары Rx пары каждого интерфейса
img
image

для этого я собрал такой топорный кабель
Кабель



теперь вопрос о том как же удобно слушать просто запустить tcpdump и хранить всё на роутере не вариант от слова совсем, только в редких случаях конечно где объем не трафика не большой.

по этому решено использовать pipe через ssh plink для windows подходит прям идеально и смотреть всё в wireshark.
нашел на просторах интернета простой скриптик в котором нужно указать интерфейс и так далее
@REM ----------------------------------------------------@REM remotecap.cmd@REM   Example command for captruing eremote network packet@REM  using wireshark and tcpdump.@REM   First written by j2doll. September 10th 2016.@REM   https://github.com/j2doll/wireshark-remote-command-win@REM   http://j2doll.tistory.com@REM ----------------------------------------------------@REM install putty and wireshark on your windows pc.@SET PLINK_PATH="C:\Program Files\PuTTY\plink.exe"@SET WIRESHARK_PATH="C:\Program Files\Wireshark\Wireshark.exe"@SET REMOTE_SERVER=192.168.1.1@SET REMOTE_ACCOUNT=root@SET REMOTE_PASSWORD=@SET REMOTE_INTERFACE=eth0.3@REM execute command%PLINK_PATH% -batch -ssh -pw %REMOTE_PASSWORD% %REMOTE_ACCOUNT%@%REMOTE_SERVER% "tcpdump -s0 -U -w - -i %REMOTE_INTERFACE%" | %WIRESHARK_PATH% -i - -k


конечно можно было бы и доделать это всё есть скриптик на питоне который объединяет два pipe в один и видно было бы удобно, но для моих целей это было вовсе не нужно
дальше вставляем кабель между девайсами и дополнительные пары в wan и 4 порт роутера запускаем две версии скрипта в одной REMOTE_INTERFACE=eth0.3 во второй REMOTE_INTERFACE=eth1.

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

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

Чутка картиночек







дальше всё это запитал от аккума добавил wwan подкрутил wireguard и снифить можно из дома естественно если есть куда подкинуть wwan в месте где мы слушаем))
на этом всё.
Подробнее..

Xiaomi Gateway MIEU01 как универсальный контроллер умного дома

22.02.2021 14:21:33 | Автор: admin

Home Assistant - прекрасное программное решение для умного дома. У неё современный интерфейс, множество плагинов и дополнений почти на все случаи жизни. В интернете можно найти множество компонентов для самых экзотических устройств. Но чтобы начать им пользоваться, надо как следует позаботиться об аппаратной платформе. Нужно либо купить одноплатный компьютер наподобие Raspberry PI, или же использовать десктопный компьютер, который должен работать в режиме 24/7.

Но что если я скажу, что даже простой ZigBee шлюз от Xiaomi с евро-вилкой, который вставляется в розетку, может работать как хост система для Home Assistant? Он может показывать значение датчиков в веб интерфейсе, управлять светом и розетками, контролировать ZigBee сеть, проговаривать текст голосом через встроенный динамик, делать полноценную автоматизацию и всё это на скромном устройстве, которое нужно лишь воткнуть в розетку.

Немного истории

Данная статья является логическим продолжением другой статьи о том, как команда энтузиастов взломала ZigBee шлюз от Xiaomi и получила доступ к ОС Linux, которая там установлена. Когда я прочитал эту статью, у меня возникло желание попробовать повторить манипуляции, которые @lenz1986 описал в своей статье.

Это потенциально вело к получению ZigBee шлюза, который можно будет как-нибудь хакнуть, чтобы он поддерживал работу со всеми ZigBee устройствами, а не только с устройствами от Xiaomi (число которых в случае европейского региона ещё и сильно урезано). Потому я приобрёл шлюз и поспешил воспользоваться инструкцией из статьи. Я спросил у автора, насколько безопасно прошивать, и он заверил меня, что это безопасно. Я, уверенный, что новая прошивка загрузится только в оперативную память, запустил команду для прошивки системы. Оказалось, что только в оперативной памяти работает новая операционная система OpenWrt, а все разделы, которые отвечают за стоковую систему, перетёрты новой полурабочей системой (которая на тот момент даже не видела flash-память).

Так началось моё приключение, которое и привело к тому, что на данный момент шлюз может работать как универсальный контроллер для умного дома. Он работает с ZigBee, bluetooth, может быть хост-системой для программ zigbee2mqtt, node-red, Domoticz и даже Home Assistant!

Всё что описано в статье касается европейского шлюза Xiaomi версии 2 (DGNWG05LM), а также первого шлюза Aqara (ZHWG11LM).

Статья так же применима к шлюзу Aqara в аналогичном форм-факторе, за исключением того, что в нём отсутствует bluetooth модуль.

Установка операционной системы OpenWrt

Далее приведена упрощённая инструкция. Более подробная версия находится на основном сайте проекта https://openlumi.github.io/, в ней подробно описывается каждый шаг. С картинками!

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

Потому мы меняем ОС на портированную последнюю стабильную версию OpenWrt 19.07. Образ системы с веб-интерфейсом LuCI занимает 10 мегабайт.

Сейчас установка и обновление максимально упрощены, но на первом этапе требуется USB-UART адаптер и паяльник, чтобы подпаяться к консоли, получить root и запустить установку OpenWrt.

Упрощённо это выглядит так:

1. В uboot прописать загрузку в single mode

setenv bootargs "${bootargs} single rw init=/bin/bash" && boot

2. В UART-консоли надо задать пароль через passwd, а после перезагрузки уже войти в систему и запустить скрипт установки OpenWrt.

Он находится в репозитории https://github.com/openlumi/owrt-installer и прошьёт последнюю версию OpenWrt.

На этом месте провода больше не нужны и можно собрать шлюз.
Голая система OpenWrt поднимает точку доступа без пароля, чтобы можно было зайти и настроить подключение к своей WiFi сети.

Отлично, теперь у нас есть (относительно) полноценный линукс с возможностью устанавливать сторонние пакеты, но пропала главная функциональность шлюза: его возможность работать с ZigBee устройствами. Вернём же её!

Zigbee2MQTT

Что такое Zigbee2MQTT?

Сеть ZigBee имеет ячеистую структуру и может даже работать сама по себе без внешнего управления. Но для того, чтобы она могла работать с системами извне, требуется главное устройство координатор. Обычно координатор имеет последовательный интерфейс для получения данных из сети и отправки команд в сеть. Программа Zigbee2MQTT умеет работать с координаторами разных производителей и отправлять данные устройств в MQTT брокер. MQTT - это один из протоколов для работы с устройствами умного дома, и многие системы УД умеют с ним работать. Потому, Zigbee2MQTT является мостиком от устройств ZigBee к любым системам умного дома.

Zigbee2mqtt является де-факто стандартом для работы с устройствами ZigBee. Он умеет прокидывать параметры устройств и их состояние в брокер mqtt, где их уже может считывать ваша система умного дома.Мы же установим Zigbee2mqtt и MQTT брокер mosquitto прямо на шлюз.

В шлюзе установлен зигби модуль JN5169, и для неё рабочей прошивкой является прошивка zigate, которая позволяет использовать чип, как координатор сети зигби. Благодаря стараниям @G1K, в zigbee2mqtt появилась поддержка работы с zigate и сейчас, начиная с версии zigbee2mqtt 1.17, в нём уже есть поддержка этой прошивки. Также, с его помощью мне удалось собрать пакет для OpenWrt размером в скромные 5 МБ. Чтобы установить, вам нужно в OpenWrt добавить feed с собранными пакетами для шлюза, и затем стандартным способом установить нужные пакеты

Добавляем фид:

wget -q https://openlumi.github.io/openwrt-packages/public.key -O /tmp/public.key && opkg-key add /tmp/public.key && rm /tmp/public.keyecho 'src/gz openlumi https://openlumi.github.io/openwrt-packages/packages/19.07/arm_cortex-a9_neon' >> /etc/opkg/customfeeds.conf

Устанавливаем пакеты:

opkg updateopkg install mosquitto node node-zigbee2mqtt

Прошить зигби чип можно прямо из веб-интерфейса LuCI:

Прошивки с разными скоростями работы с внешним последовательным портом можно скачать отсюда: https://github.com/openlumi/ZiGate/releases/tag/snapshot-20210103

Там же нужно сбросить EEPROM чипа, который хранит в себе данные о подключённых устройствах.Нужно выбрать скорость, на которой работает прошивка и нажать кнопку Erase PDM.

Уже на этом этапе, после перезагрузки, на порту 8080 загрузится веб интерфейс zigbee2mqtt, который позволяет включать режим спаривания и управлять подключёнными устройствами.

Улучшенная прошивка

Разработка прошивки Zigate идёт достаточно вяло и в ней присутствуют определённые проблемы. Потому тот же самый @G1K взялчистый пример координатора от NXP и применил только необходимые патчи из проекта Zigatе. В итоге прошивка лишилась ряда проблем, и при этом продолжила исправно работать с zigbee2mqtt

Альтернативная прошивка для z2m находится тут: https://github.com/openlumi/JN-ZigbeeNodeControlBridge-firmware

Home Assistant

И вишенкой на торте стало портирование целиком системы Home Assistant прямо на шлюз. Целиком это некоторое преувеличение, т.к. даже начальная установка занимает гораздо больше места, чем есть на шлюзе, а каждый компонент может требовать версию библиотек, которые отсутствуют в поставке.

Но мне удалось удалить большую часть компонентов, которые не нужны для базовой работы системы, а в других заменить версии зависимостей на те, что есть в OpenWrt. Это в основном касается библиотек, которые требуют компиляции и не могут установиться стандартным способом, т.к. на шлюзе просто нет компилятора.

Устанавливается это тоже всего лишь в одну команду (при условии, что у вас подключён фид openlumi).

wget https://raw.githubusercontent.com/openlumi/homeassistant_on_openwrt/main/ha_install.sh -O - | sh

Будет установлена последняя версия с поддержкой python 3.7 Home Assistant 2021.1.5

В поставке есть компоненты для работы с MQTT, если вы захотите его использовать с zigbee2mqtt, а также ZHA, компонент для работы с сетью зигби напрямую, если вам будет хватать поддержки устройств от этого компонента. Для ZHA потребуется оригинальная прошивка Zigate, работающая на скорости 115200.

В Home Assistant работают автоматизации, а также есть отзывы об успешном запуске компонентов mpd, tts, mysensors, камер

Для управления датчиками и устройствами самого шлюза можно использовать сервис lumimqtt (https://github.com/openlumi/lumimqtt)

При использовании компонента MQTT устройства сами залетят в систему, используя механизм mqtt discovery.
Установленный Home Assistant занимает на диске около 100 МБ и после загрузки работает достаточно быстро для подобной аппаратной платформы.

Более подробная инструкция по установке тут https://github.com/openlumi/homeassistant_on_openwrt

Что ещё можно сделать?

На шлюз Xiaomi с установленной OpenWrt можно устанавливать почти все пакеты из официального репозитория. Однако есть проблемы с использованием модулей ядра из пакетов, это может привести к kernel panic при установке. Такое было замечено при установке пакетов для openvpn, l2tp.В случае же приложений для userspace ограничений нет.

Например, была успешно бекпортирована более легковесная система умного дома Domoticz 2020 из master-ветки openwrt. В ней работают как плагин для работы с Zigate напрямую, так и плагин для zigbee2mqtt.

Если вы хотите более сложную логику для автоматизаций, чем предоставляет Home Assistant, есть возможность установить пакета для визуального поточного программирования node-red прямо на шлюзе. Разнообразные ноды для управления шлюзом уже в комплекте.

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

На плате шлюза есть выведенные пятаки GPIO, правда, очень мелкие, но можно их использовать в linux через sysfs.Также на платах, где используется модуль WiFi Realtek 8723bs (все евро-шлюзы Xiaomi), есть возможность использовать встроенный bluetooth. В шлюзах Aqara стоит чип 8189es, в котором модуля bluetooth нет.

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

Все текущие результаты собраны в едином проекте на гитхабе https://github.com/openlumi

Телеграм-чат для обсуждения.

Благодарности

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

@lenz1986 добавил поддержку nand, bluetooth

@Alx2000y написал драйвер для звука для шлюза, внедрил поддержку overlayfs, бекпортировал модуль ядра для паттернов мигания светодиодами

@G1K написал адаптер для zigbee2mqtt, которая поддерживает zigate в качестве координатора, организовал фид с пакетами для установки их на шлюзе через opkg и оптимизировал node-red для работы на шлюзе

@divanikus написал скрипт по установке OpenWrt на стоковой системе по воздуху

И, напоследок, бонус

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

Raspberry PI 3b

Orange PI PC2

Xiaomi Gateway DGNWG05LM

Процессор

Broadcom BCM2837 Quad Core 1.2GHz 64bit

AllWinner H5 Quad-Core 1.2GHz 64bit

iMX6ULL, single core 696 MHz 32bit

Оперативная память

1Гб

1Гб

256Мб

Дисковое пространство

Требуется SD Card

Требуется SD Card

256Мб

Ethernet

100Mbit

100Mbit

-

USB

4 x USB 2.0

3 x USB 2.0

1 x USB 2.0, требуется распайка разъёма

Bluetooth модуль

+

-

+

ZigBee модуль

-

-

+

WiFi модуль

+

-

+

Питание

Требуется внешнее питание, micro-USB

Требуется внешнее питание, круглый разъём

Встроенный блок питания

Дополнительно

HDMI, Гребёнка GPIO, разъём для подключения камеры, jack 3.5

HDMI, Гребёнка GPIO, разъём для подключения камеры, jack 3.5

Встроенный динамик, цветная подсветка, датчик освещённости, HID кнопка. GPIO на плате требуют пайки.

Подробнее..

Немного непортативного домашнего мониторинга, или из чего ещё можно собрать троллейбус

03.03.2021 12:06:10 | Автор: admin
КДПВ Borya_Spec (facebook.com/strangedrawings)КДПВ Borya_Spec (facebook.com/strangedrawings)

Мысль внедрить очередную свистелку в Home Assistant посетила меня, внезапно, в туалете. Бывает, сидишь, залипаешь в любимый информационный ресурс, и вдруг в глазах резко темнеет, и весь твой кругозор сужается до светящегося экранчика телефона. Снова УЗО не выдержал кухонных экспериментов, или, как говорили наши далёкие предки, "пробки выбило". И вот считаешь про себя секунды, в течение которых всё твоё драгоценное оборудование, весь твой любимый зоопарк одноплатников и показометров, противостоит беспросветной тьме силами бездушного куска свинца, именуемого "Источник бесперебойного питания". И, казалось бы, нагрузка невелика, и вроде как статью дочитать успеваешь, и до электрощита добежать, чтобы "автомат" передёрнуть, но всё равно как-то волнительно, вот бы знать, сколько минут еще в запасе осталось?

TL;DR

Далее я покажу и расскажу, как сделать беспроводной портативный роутер Kingston Mobilelite Wireless MLWG2 проводным и непортативным, с возможностью быстро вернуться к базовому состоянию (не стоит зацикливаться на рарности данной модели, руководство универсальное), а также накрутить на него OpenWrt, воткнуть кабель от APC UPS и отправлять данные в Home Assistant.

Дисклеймер: автор не несёт ответственности за сожжённое и закирпиченное вами оборудование, если решились что-то повторить - думайте своей головой. Мне обычно везёт, а повезёт ли вам?

Intro

Итак, задача поставлена: старенький бесперебойник, допустим, "APC Back-UPS ES 700", без особых финансовых затрат желает быть помониторенным и интегрированным в Home Assistant, с последующей привязкой на смену статуса каких-либо событий автоматизации. Задача осложняется достаточно коротким проприетарным шнурком, допустим, "USB-RJ45", который особо далеко не протянешь (неудобство компенсируется практически нулевой стоимостью ИБП, ввиду появления огромного количества оных на вторичном рынке). Нужна маленькая тихая железяка, способная спрятаться под столом, принимать данные по USB, и слать воздухом - под эти цели был выделен портативный роутер, он же "портативная флешка", он же Kingston MobileLite Wireless G2. Немного об MLWG2: не вдаваясь в технические подробности по поводу его внутренностей, устройство представляет собой точку доступа, способную принимать подключения по WiFi, раздавая интернет через другую точку доступа (одним радиомодулем), либо через мобильный "свисток", либо через витую пару. Оснащено крайне ограниченной функционально прошивкой, умеет шарить подключенные флешки через родное мобильное приложение. Приобреталось для временного расширения памяти нерасширяемых устройств Apple, в связи с пандемией актуальность временно утратило.

Железо

Большинство портативных роутеров, оснащенных съёмной батареей, без этой самой батареи включаться и работать отказываются, даже будучи подключенными к источнику постоянного питания. Без понятия, с чем это связано, но держать 24/7 устройство, запитанное от аккумулятора, я посчитал нецелесообразным и местами даже опасным, так как батареи имеют свойство деградировать, вздуваться и воспламеняться.

Kingston MLWG2 без верхней крышки (фото с сайта openwrt.org)Kingston MLWG2 без верхней крышки (фото с сайта openwrt.org)

Самый распространённый (в интернете) способ сделать портативное устройство непортативным - воткнуть или впаять вместо батареи опытным путём подобранный конденсатор, спаяв его с пачкой резисторов, и тем самым обманывая контроллер заряда/разряда, встроенный в роутер. Выглядит крайне ненадёжно, устройство я еще планирую использовать по назначению, а значит обманывать контроллер буду наиболее очевидным способом: подавая в него постоянное напряжение, равное напряжению полностью заряженного аккумулятора. Из устройства была изъята батарея, и путём многократных замеров штангенциркулем, гугления, чтения даташитов, и даже не с первого раза, был идентифицирован и приобретён на Алиэкспресс правильный коннектор с маркировкой JST ZH 5-pin.

Сверху вниз: JST GH 1.25 мм, JST ZH 1.50 мм, оригинальный коннектор и батареяСверху вниз: JST GH 1.25 мм, JST ZH 1.50 мм, оригинальный коннектор и батареяТермистор заменен на резистор 10 кОмТермистор заменен на резистор 10 кОм

Вооружившись мультиметром, удалось определить распиновку коннектора: два красных провода - плюс, два чёрных провода - минус. Средний жёлтый провод показывал сопротивление порядка 10 кОм и был идентифицирован, как термистор. У китайского JST-коннектора были аккуратно срезаны направляющие "рельсы", термистор заменен обычным 10 кОм-резистором, всё аккуратненько спаяно и закрыто в термоусадку.

Готовая связка коннектор - преобразовательГотовая связка коннектор - преобразователь

Полностью заряженный аккумулятор роутера давал напряжение чуть более 4 вольт, значит нужен понижающий преобразователь с 5 вольт. Как нельзя лучше подошёл миниатюрный модуль, известный как DSN-MINI-360 (360 вероятно из-за вращающегося на 360 подстроечника). Пришлось помучиться с капризным подстроечником, дабы понизить напряжение телефонной зарядки до нужных 4 вольт (делать это лучше с тем блоком питания, от которого планируете питать устройство в будущем, учитывая так же, что под нагрузкой напряжение слегка просядет). В итоге роутер благополучно обманулся, показал 100% заряд аккумулятора и без проблем загрузился. Непрерывная работа связки в течение нескольких суток так же не выявила каких-либо проблем. Родное приложение показывает полностью заряженный аккумулятор (при его отсутствии). Конструкция с легкостью возвращается к исходному состоянию.

С 4 вольт без нагрузки просел до 3.86 под нагрузкойС 4 вольт без нагрузки просел до 3.86 под нагрузкой

Прошивка

Kingston MLWG2 имеет официально поддерживаемую сообществом сборку OpenWrt последней (на текущий момент) версии, 19.07.7. Однако способ прошивки здесь слегка нестандартный. Вряд ли кто-то будет это повторять, но интереса ради можно и глянуть, я получил от процесса "колоссальное" удовольствие. Для начала нужно активировать в железяке telnet. К сожалению, я забыл вытащить init-скрипты оригинальной прошивки, но костыль там прописан знатный. Итак, форматируем флешку в FAT32, помещаем в корень сборку OpenWrt (я использовал openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin из официального репозитория), и пустой текстовый файл с названием "mlwG2_v;telnetd; .x.x.bin" (именно так, без кавычек).

После втыкания флешки в устройство и последующей его перезагрузки, подключившись к создаваемой устройством WiFi-сети, можно подсоединиться telnet-клиентом (логин admin, без пароля, ip устройства захардкожен в прошивке):

telnet 192.168.201.254

Получаем BusyBox:

  (none) login: admin    BusyBox v1.12.1 (2014-09-18 09:46:08 CST) built-in shell (ash)  Enter 'help' for a list of built-in commands.    #

Прошиваем...

mtd_write write /media/USB1/openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin KernelAmtd_write -r write /media/USB1/openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin KernelB

После окончания прошивки устройство весело помигает лампочками, потом все три лампочки разом загорятся, и железяка окирпичится. Не будет ни WiFi, ни Ethernet, просто три горящих лампочки.

Вскрываем корпус устройства и на верхней плате справа видим четыре неподписанных пятнышка припоя - это и есть спасительный UART. Запаиваем на него USB-to-TTL конвертер, запускаем эмулятор терминала (под винду я использую PuTTY), подключаемся (COMx:57600,8,n,1).

Белый - TX (R конвертера), зелёный - RX (T конвертера), черный - GND, паял дрожащими рукамиБелый - TX (R конвертера), зелёный - RX (T конвертера), черный - GND, паял дрожащими руками

Видим, что устройство живо, но неправильно сконфигурированы сетевые интерфейсы. Вместо eth0 откуда-то вылез eth0.1, а WiFi вообще отключен. Исправляем несправедливость, отправляем устройство в reboot, и наслаждаемся полностью работоспособной OpenWrt (UART я отпаивать пока не рекомендую, только через него можно сделать failsafe в случае нарушения работоспособности прошивки).

root@OpenWrt:/etc/config# cat network config interface 'loopback'        option ifname 'lo'        option proto 'static'        option ipaddr '127.0.0.1'        option netmask '255.0.0.0'config globals 'globals'        option ula_prefix 'fdf0:a4ca:5192::/48'config interface 'lan'        option type 'bridge'        option ifname 'eth0.1' <--- заменяем на eth0        option proto 'static'        option ipaddr '192.168.1.1'        option netmask '255.255.255.0'        option ip6assign '60'config device 'lan_eth0_1_dev'        option name 'eth0.1'  <-- заменяем на eth0        option macaddr '00:26:b7:09:e9:32'        root@OpenWrt:/etc/config# cat wireless config wifi-device 'radio0'      option type 'mac80211'      option channel '11'      option hwmode '11g'      option path 'platform/10180000.wmac'      option htmode 'HT20'      option disabled '1' <-- убираемconfig wifi-iface 'default_radio0'      option device 'radio0'      option network 'lan'      option mode 'ap'      option ssid 'OpenWrt'      option encryption 'none'

Как подключить OpenWrt в режиме клиента к существующей точке доступа, думаю, писать не стоит, есть подробнейшая официальная документация. Вкратце, через LuCI: Network -> Wireless -> Scan -> Join Network -> Assign firewall-zone = lan. После чего, в целях безопасности, лучше деактивировать интерфейс точки доступа (Mode: Master), продолжая работу с устройством по IP изнутри основной сети (всё-таки написал).

Софт

Для мониторинга ИБП APC используется демон apcupsd, про его интеграцию с Home Assistant уже много где написано, для этого даже плагины не нужны, у меня всё заработало просто через configuration.yml.

Ставим поддержку USB и демона из репозитория:

opkg updateopkg install kmod-usb-hidopkg install apcupsd

Подключаем кабель ИБП в роутер, проверяем, что устройство видно:

root@OpenWrt:/# ls -la /dev/usbdrwxr-xr-x    2 root     root            60 Mar  2 21:10 .drwxr-xr-x    5 root     root          1380 Mar  2 21:10 ..crw-------    1 root     root      180,  96 Mar  2 21:10 hiddev0

Заходим в /etc/apcupsd, бэкапим конфиг apcupsd.conf, заменяя на свой. В минимуме нам достаточно вот этого (говорим, что используем USB-кабель, и будем отдавать данные по сети):

## apcupsd.conf v1.1 ##UPSCABLE usbUPSTYPE usbNETSERVER onNISIP 0.0.0.0NISPORT 3551

Cтартуем демона

/etc/init.d/apcupsd start

Выполняем команду apcaccess и в идеале видим в консоли информацию об ИБП, любуемся полем STATUS: ONLINE. Теперь по адресу роутера (при правильно сконфигурированном файрволе) можно получать инфу от бесперебойника.
С софтом закончено.

root@OpenWrt:/etc/apcupsd# apcaccessAPC      : 001,035,0824DATE     : 2021-03-03 00:23:17 +0300HOSTNAME : OpenWrtVERSION  : 3.14.14 (31 May 2016) unknownUPSNAME  : OpenWrtCABLE    : USB CableDRIVER   : USB UPS DriverUPSMODE  :STARTTIME: 2021-03-03 00:23:15 +0300SHARE    :MODEL    : Back-UPS ES 700STATUS   : ONLINELINEV    : 232.0 VoltsLOADPCT  : 42.0 PercentBCHARGE  : 100.0 PercentTIMELEFT : 31.4 MinutesMBATTCHG : 10 PercentMINTIMEL : 5 MinutesMAXTIME  : 0 SecondsSENSE    : MediumLOTRANS  : 180.0 VoltsHITRANS  : 266.0 VoltsALARMDEL : 30 SecondsBATTV    : 13.5 VoltsLASTXFER : Low line voltageNUMXFERS : 0TONBATT  : 0 SecondsCUMONBATT: 0 Seconds...

Настройка Home Assistant

Тут даже и настраивать ничего не надо, прописываем в configuration.yml, рестартуем:

apcupsd:  host: <IP устройства с apcupsd>  port: 3551sensor:  - platform: apcupsd    resources:     - bcharge     - loadpct     - status     - timeleft     - model     - linev

Получаем готовый набор entities: модель ИБП, состояния (ONLINE, ONBATT, ...), % заряда батареи, % нагрузки, примерное оставшееся время работы от батареи, напряжение в сети (перечень параметров гораздо больше, я взял основные для себя). По результатам тестов, Home Assistant получает состояние бесперебойника где-то в течение 10-40 секунд, обновление показателей идёт где-то раз в 2-3 минуты. В целом, оно того стоило.

Далеко не полный набор сущностей, которые можно вытянуть из демонаДалеко не полный набор сущностей, которые можно вытянуть из демона

Итак, кто дочитал до конца, узнал, что с помощью старого портативного роутера, спрятанного под столом, можно мониторить напряжение в сети и заряд старенького бесперебойника с Авито, а ещё стоит иметь про запас USB-to-TTL конвертер, мало ли, захочется что-нибудь перепрошить. Я же получил некоторое удовольствие от того, что заставил работать валявшуюся без дела железяку, а также без особых усилий получил очередную карточку в Lovelace своего полоумного дома. Спасибо за внимание.

Данные несколько искажены вследствие тестированияДанные несколько искажены вследствие тестирования

Ссылки.

Подробнее..

Перевод Linksys WRT54G роутер, случайно ставший легендарным

02.02.2021 12:18:59 | Автор: admin

В мире, где роутеры всё больше напоминают перевёрнутых пауков, чем предметы, которые бы хотелось видеть в своей гостиной, есть только несколько устройств, которые можно было бы назвать знаменитыми. Примерами подобного могут быть AirPort Стива Джобса и mesh-роутеры Eero. Но лавры победителя в этой категории получает модель роутера Linksys, которой уже исполнилось уже почти 20 лет, и всё благодаря изначально незадокументированной особенности, ставшей чрезвычайно популярной у определённой пользовательской базы. Сегодня мы поговорим о сине-чёрном образце маршрутизатора беспроводного доступа Linksys WRT54G. Именно этот роутер показал миру, на что должны быть способны беспроводные маршрутизаторы.

1988 год


Linksys был основан двумя иммигрантами из Тайваня Джени и Виктором Цао в 1988 году. По информации в профиле 2004 года на Inc., компания задумывалась как посредник между изобретателями и производителями на рынке Тайваня, но в 1990-х сама занялась производством оборудования, со временем придя к рынку домашних сетей и начав доминировать на нём в начале 2000-х.


Хотя сегодня он не особо впечатляет, однако роутер EtherFast помог Linksys стимулировать создание нового рынка домашних сетей. И это было ещё ДО того, как WiFi стал играть важную роль.

Как чёрный и синий стали неофициальными цветами домашних сетей в начале 2000-х


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

Однако в конце 1990-х о роутерах совершенно никто не знал, этого рынка ещё не существовало на радарах многих компаний-изготовителей сетевого оборудования, потому что необходимость сетей ограничивалась офисами. Это означало, что установка роутера была и чрезвычайно дорогой, и невозможной для простых смертных.

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

В начале 90-х оборудование Linksys приходилось продавать с собственными драйверами. Однако когда появилась Windows 95, сетевые возможности были уже встроены в неё. Это означало, что совершенно внезапно пропало основное препятствие к получению доли рынка компанией Linksys: возник увеличивающийся спрос на её сетевые адаптеры, устанавливаемые внутрь десктопов и ноутбуков.

Виктор помогал в руководстве и работе с технологиями, а Джени занималась сделками о продажах с крупными розничными сетями, например, с Best Buy, что способствовало превращению сетевых карт в мейнстрим мира технологий.

Однако реальным шансом, на многие годы сделавшим Linksys лидером, стало создание Виктором роутера, изначально нацеленного на домашних пользователей. Когда дайлап-модемы начали выходить из моды, возникла неожиданная потребность.

Когда в конце 90-х начался постепенный расцвет широкополосного Интернета, имевшего гораздо большую цену, чем дайлап, Виктор понял, что люди захотят подключить все свои домашние компьютеры к одной линии, говорится к профиле Джени и Виктора на Inc. Для этого им бы понадобился роутер высокотехнологичный разветвитель, позволяющий подключать к одному модему несколько компьютеров.

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

В обзоре кабельного/DSL-роутера EtherFast PC Magazine замечает, что Linksys сделала гораздо больше, чем просили пользователи.

Цена в 200 долларов стала бы прорывом для роутера с двумя портами Ethernet, однако Linksys уместила в эту коробку гораздо больше возможностей, писал рецензент Крейг Эллисон. Роутер, способный работать со скоростями до 100 мегабит, может похвастаться четырьмя портами и теоретически способен работать с сотнями IP-адресов.

Возможно, он не был чрезвычайно надёжным, как его более дорогие конкуренты, однако имел разумную цену для домашнего устройства.

Роутер приобрёл огромный успех, благодаря которому Linksys поднялась на вершину зарождающегося рынка. На самом деле, единственной ошибкой в реализации роутера было отсутствие поддержки беспроводного соединения. Однако громкое имя Linksys означало, что как только она появится, у нового устройства будет готовая аудитория, которую порадует его низкая цена и простота пользования.

Особенно популярным стал один роутер, однако причины этого оказались для Linksys неожиданными.

500 миллионов долларов


За такую сумму гигант в производстве сетевого оборудования Cisco приобрёл Linksys в 2003 году. Поглощение произошло в то время, когда Linksys сама зарабатывала полмиллиарда долларов в год, и быстро росла в основном за счёт успеха своих роутеров. В интервью NetworkWorld Виктор Цао утверждал, что конфликтов между роутерами Linksys и сетевой инфраструктурой Cisco не существует. Они решали свои задачи по-разному, в чём Cisco вскоре убедится на собственном горьком опыте.


WRT54G был не просто дешёвым его можно было хакать.

Как случайная особенность беспроводного роутера Linksys превратила скучный роутер в устройство для фанатов


Во многих смыслах серия роутеров WRT54G стала чем-то вроде Nintendo Entertainment System мира беспроводных роутеров. Появившись примерно на заре истории популярности беспроводных роутеров, она продемонстрировала гораздо большую гибкость, чем задумывалось производителем. Хоть она и не была единственной, однако находилась в огромном количестве домов по всему миру.

Несмотря на гораздо меньшую славу, его успех был сравним с современным ему Motorola RAZR его можно было найти практически повсюду, в домах и мелких компаниях по всему миру. Несмотря на своё страшное название, WRT54G был тем роутером, который покупали люди, нуждающиеся в беспроводном роутере.

И высока вероятность того, что он по-прежнему используется во многих местах, несмотря на устаревшие стандарты безопасности и чрезвычайно древний внешний вид. (Вспоминается история компьютера Amiga, управлявшего системами отопления и вентиляции целого школьного округа.)

Однако причина, по которой серия WRT54G продержалась так долго, несмотря на использование беспроводного протокола, фактически устаревшего 12 лет назад, может заключаться в его особенности, которая изначально не была задокументирована. Эта особенность сохранилась, несмотря на все сложности, вызванные поглощением компании. Случайно или нет, но в WRT54G скрывалось нечто фундаментальное для встроенной прошивки роутера: ПО на основе Linux.

В этом и заключалась проблема Linksys должна была выпустить исходный код своей прошивки под лицензией GNU General Public License, требующей распространять производное ПО с теми же условиями, что и ПО, на основании которого оно было создано.

Эндрю Миклас, участвовавший в создании списка рассылки о ядре Linux, рассказал, что ему лично довелось связаться с сотрудником компании и убедиться, что ПО было основано на Linux но со временем этот сотрудник прекратил с ним общаться.

Миклас сообщил, что его интерес к файлу прошивки частично был вызван стремлением к улучшению поддержки в Linux относительно нового тогда стандарта 802.11g, который поддерживался устройством.

Я знаю, что некоторые компании-производители беспроводных устройств сомневались, стоит ли выпускать драйверы в open source, потому что беспокоились, что параметры их радиооборудования можно будет изменять вне пределов спецификации. Однако если драйверы уже написаны, разве есть какое-то техническое препятствие к тому, чтобы их нельзя было просто рекомпилировать под оборудование Intel и выпустить как бинарные модули?

Миклас обнаружил нечто интересное, то, чего в ПО быть не должно. Это был недосмотр со стороны Cisco, которую ожидал неприятный сюрприз, связанный с популярным продуктом, продававшимся всего несколько месяцев. По сути, произошло следующее: один из поставщиков, похоже, использовал прошивку на основе Linux в чипах, поставляемых Broadcom, и не сообщил об этом Linksys, которая в рамках поглощения передала это ПО Cisco.

В колонке 2005 года для Linux Insider юрист Хизер Микер, специализирующаяся на проблемах интеллектуальной собственности и ПО с открытым исходным кодом, сообщила, что Cisco было довольно трудно разобраться во всём этом самостоятельно:

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

Чтобы выявить проблему, Cisco пришлось бы провести расследование вглубь на три уровня интеграции продуктов. Любой специалист по слияниям и поглощениям скажет вам, что это попросту невозможно. Дело не в неряшливости или нерадивости, дело в непрозрачности.

Венчурный капиталист, активист open source и бывший лидер проекта дистрибутива Debian Linux Брюс Перенс рассказал LinuxDevices, что не стоит винить в произошедшем Cisco, однако она всё равно столкнулась с проблемами соответствия требованиям лицензии open source.

Обычно субподрядчики не особо усердно докладывают клиентам об их обязанностях по лицензии GPL, рассказывает Перенс. (Также он добавил, что, несмотря на предложение помощи Cisco, ответа он не дождался.)

Как бы то ни было, информация о роутере с прошивкой в open source всплыла на поверхность, и пост Микласа быстро привлёк внимание сообщества фанатов. Автор поста на Slashdot сразу смог увидеть открывшиеся возможности: Это может быть интересным: вероятно, появится возможность создания суперкрутой прошивки для точки доступа с IPsec, нативной поддержкой ipv6 и т.д.!

Когда читатели Slashdot узнали об этом, они начали выдвигать требования.

Примерно спустя месяц после выпуска поста на Slashdot компания без особого энтузиазма выпустила свою open-source-прошивку.


WRT54G без корпуса. Благодаря Linux-прошивке устройство стало мишенью как для программных, так и для аппаратных хаков.

Хакерам открылся целый мир возможностей, а сторонние разработчики быстро добавили в оригинальное оборудование функции, о которых никогда не задумывался производитель. По сути, это был бытовой роутер, который можно было взломать и заставить выдавать гораздо более мощный беспроводной сигнал, чем это допускалось Федеральной комиссией по связи, превратить его в SSH-сервер или в VPN для домашней сети. Был и ещё более яркий пример роутер можно было превратить в мозг робота.

Также он стал фундаментом для полезного открытого ПО, например, OpenWrt и Tomato. То есть возникла целая инфраструктура, позволявшая расширить возможности роутера намного больше, чем допускалось его производителем.

По сути, Cisco под угрозой судебного иска оказалась вынужденной выпустить прошивку на основе Linux под лицензией GPL, но не была в восторге от того, что устройство, успех которого позволил ей наконец попасть в дома пользователей, предоставляло им гораздо большие возможности.

Как писал Lifehacker в 2006 году, это был идеальный способ превращения своего роутера за 60 долларов в роутер за 600 долларов. То есть, теоретически, успех устройства на рынке обернулся для Cisco убытком.

Поэтому в результате компания провела апгрейд роутера, который по сути стал даунгрейдом: устранила Linux-прошивку, заменив её проприетарным аналогом, урезав объём ОЗУ и ПЗУ, что усложнило замену прошивки на сторонние версии. Это разгневало пользователей, и Cisco (вероятно, осознав свой провал) выпустила Linux-версию роутера под названием WRT54GL, в которой восстановила удалённые спецификации.

Эту модель и сегодня можно найти на Amazon, и она по-прежнему имеет страницу поддержки на сайте Linksys. Несмотря на то, что её максимум всего 54 мегабита/с по беспроводному каналу, довольно жалкий показатель по сравнению с современными роутерами по той же цене, она по-прежнему продаётся.

Вся неразбериха с GPL наносила урон ещё годы спустя после обнаружения проблемы с прошивкой по итогу Cisco пришлось заплатить Free Software Foundation. Однако это, в конечном итоге, создало имидж брэнду Linksys. Сегодня компания продаёт целую линейку чёрно-синих роутеров, сохраняющих поддержку открытых прошивок. (Однако стоят они намного дороже, чем WRT54G.)

Мы хотим, чтобы эта книга расширила аудиторию платформы WRT54G и использования встроенных устройств в целом, раскрывая потенциал, который способна предложить эта платформа, цитата из введения книги 2007 года Linksys WRT54G Ultimate Hacking. Авторам книги сыграло на руку то, что WRT54G был встроенной системой со возможность хакинга, при этом очень популярной и использующейся для множества различных целей, как развлекательных, так и практичных. Да, хакинг устройства стал настолько распространённым, что выпустили целую 400-страничную книгу, посвящённую этой теме.

Надо внести ясность большинство людей, покупавших WRT54G в Best Buy, скорее всего, не волновало то, что прошивка находится в open source. Но это решение создало своего рода культ устройства. Последователи этого культа помогали поддерживать длительный интерес к устройству и среди тех, кто был далёк от хакинга.

Это было практически ненамеренное сарафанное радио. Когда обычный человек спрашивал у своего друга-технаря, какой роутер стоит купить, тот рекомендовал ему понятно какую модель.


В статье 2016 года на Ars Technica сообщалось, что роутер по-прежнему приносил миллионы долларов в год компании Linksys, которая к тому времени была продана Belkin. Несмотря на то, что модель и близко не была столь же мощной, как её более дорогие аналоги, WRT54GL (да, именно версия с Linux) сохранила свою аудиторию и на втором десятке лет, потому что воспринималась как чрезвычайно надёжная и простая в использовании.

Мы продолжаем делать её, потому что люди продолжают её покупать, говорил в то время продакт-менеджер Винс ЛаДука, заявивший, что роутер продолжает продаваться потому, что детали для него продолжают производить.

Выше я сказал, что WRT54G во многих смыслах стал аналогом Nintendo Entertainment System для беспроводных роутеров. И я считаю, что особенно справедливо это в контексте его довольно впечатляющей загробной жизни, как и у NES. Несмотря на свой солидный возраст и неподходящий для гостиной внешний вид, он хорошо продавался многие годы после истечения срока годности, в немалой степени и из-за использования открытых драйверов.

Если ваша пользовательская база просит вас что-то сохранить, то вам стоит к этому прислушаться.



На правах рекламы


Виртуальные серверы с защитой от DDoS-атак, скоростью интернета в 500 Мегабит, новейшим железом и возможностью устанавливать ОС со своих ISO, даже MikroTik RouterOS. Всё это про наши эпичные серверы. Максимальная конфигурация 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe! Поспешите заказать.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru