1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yanjiu-juci

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

JUCI веб-интерфейс для встроенных маршрутизаторов

JUCI — это веб-интерфейс на основе JavaScript для широкополосных маршрутизаторов, работающих с Iopsys/OpenWRT.

JUCI создан с использованием HTML5, AngularJS и Bootstrap:

Десктоп

JUCI имеет тематическую настройку и полностью мобильную поддержку (адаптивность):

Мобильная версия

Что такое JUCI?

Он предлагает вам следующее:

  • Оптимальное использование ресурсов устройства — ваш маршрутизатор выполняет только основные функции (которые могут быть написаны на C!), а сам интерфейс работает целиком внутри браузера клиента. Ваш маршрутизатор вычисляет и отправляет минимально необходимую информацию.
  • Полная поддержка мобильных устройств
  • Легкость использования — код использует AngularJS и HTML5, что делает его очень простым для добавления новых элементов интерфейса.
  • Полный контроль и гибкость — при этом множество готовых компонентов: позволяют выбрать уровень развития самостоятельно. Нет ограничений на внешний вид вашего интерфейса.
  • Динамическая тематизация — вы можете менять цветовые темы во время выполнения.
  • Поддержка всех языков — позволяет полностью локализовать ваш интерфейс. Генерация файлов локализации частично автоматизирована (для текстовых данных HTML). Также поддерживаются динамически меняющиеся языки на странице без необходимости перезагрузки приложения. Включено быстрое режим отладки переводов, где можно увидеть недостающие строки в текущем пакете языка.

Установка на OpenWRT

Вы можете попробовать JUCI на OpenWRT.

Вот как установить его:

  • Добавьте мой репозиторий в ваш feeds.conf.default
src-git-full juci https://github.com/mkschreder/mks-openwrt-feed.git
  • Обновите и установите репозиторий (с помощью -f для принудительной замены):
./scripts/feeds update juci
./scripts/feeds install -f -p juci -a
  • Выберите JUCI Core, тему Inteno и плагины в меню menuconfig (ЗАМЕЧАНИЕ: некоторые плагины конфликтуют друг с другом, поэтому нельзя выбрать juci-broadcom-wl и juci-openwrt-wireless одновременно).

Например, вы можете добавить следующие строки в ваш .config и затем выполнить make defconfig:

CONFIG_PACKAGE_juci-ubus-core=y
# CONFIG_PACKAGE_juci-asterisk is not set
# CONFIG_PACKAGE_juci-broadcom-dsl is not set
# CONFIG_PACKAGE_juci-broadcom-ethernet is not set
# CONFIG_PACKAGE_juci-broadcom-vlan is not set
# CONFIG_PACKAGE_juci-broadcom-wl is not set
CONFIG_PACKAGE_juci-ddns=y
CONFIG_PACKAGE_juci-diagnostics=y
CONFIG_PACKAGE_juci-dnsmasq-dhcp=y
CONFIG_PACKAGE_juci-dropbear=y
CONFIG_PACKAGE_juci-ethernet=y
CONFIG_PACKAGE_juci-event=y
CONFIG_PACKAGE_juci-firewall-fw3=y
# CONFIG_PACKAGE_juci-freecwmp is not set
# CONFIG_PACKAGE_juci-igmpinfo is not set
# CONFIG_PACKAGE_juci-inteno-multiwan is not set
# CONFIG_PACKAGE_juci-inteno-router is not set
# CONFIG_PACKAGE_juci-jquery-console=y
# CONFIG_PACKAGE_juci-macdb is not set
CONFIG_PACKAGE_juci-minidlna=y
CONFIG_PACKAGE_juci-mod-status=y
CONFIG_PACKAGE_juci-mod-system=y
# CONFIG_PACKAGE_juci-natalie-dect is not set
# CONFIG_PACKAGE_juci-netmode is not set
CONFIG_PACKAGE_juci-network-netifd=y
CONFIG_PACKAGE_juci-openwrt-wireless=y
# CONFIG_PACKAGE_juci-router-openwrt is not set
CONFIG_PACKAGE_juci-samba=y
CONFIG_PACKAGE_juci-simple-gui=y
CONFIG_PACKAGE_juci-snmp=y
CONFIG_PACKAGE_juci-sysupgrade=y
CONFIG_PACKAGE_juci-uhttpd=y
CONFIG_PACKAGE_juci-upnp=y
CONFIG_PACKAGE_juci-usb=y
# CONFIG_PACKAGE_juci-utils is not set
CONFIG_PACKAGE_juci-theme-inteno=y
CONFIG_PACKAGE_juci=y
  • Сборка!

Меню можно настроить в /etc/config/juci. Как начальный вариант, вы можете использовать juci.config.example, скопировать его на ваш маршрутизатор в /etc/config/juci и затем модифицировать его для получения нужных вам меню. Более продвинутая система меню находится в списке задач...

При переходе на IP-адрес вашего маршрутизатора вы должны увидеть экран входа. По умолчанию используется учетная запись администратора для входа, но если пароля нет для учетной записи администратора, вы не сможете войти. Поэтому перейдите в консоль и установите пароль для учетной записи администратора или измените пользователя для входа, редактируя /etc/config/rpcd и затем выполнив /etc/init.d/rpcd restart.

JUCI также включает сервер NodeJS, который можно использовать для локального тестирования и передачи JSON-RPC вызовов на ваш маршрутизатор во время тестирования (juci-local-server).

Контрибьюция

Если вы хотите работать над JUCI или используете JUCI и делаете изменения, обычно хорошей идеей будет отправить ваши изменения в виде патчей. Это можно сделать с помощью команды "git format-patch --stdout" и затем отправив патч мне.

Для подробных инструкций по отправке патчей см.: Отправка патчей

(Примечание: если вы делаете много изменений и никогда не отправляете их на проверку, то вероятнее всего, ваш код станет "мусором". Когда это произойдет, рано или поздно вам придется начать с чистого клона репозитория JUCI и заново добавить свои изменения, так как они были неправильно интегрированы изначально. Так что отправка патчей при постоянном развитии может быть полезна.)

Интересные факты

Добавочные возможности можно реализовать поверх JUCI путем создания пакета, который устанавливает JS и CSS файлы в директорию /www маршрутизатора и запускает juci-update после установки (файл index.html создается автоматически).

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

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

JUCI также использует модифицированные версии ubus и rpcd на OpenWRT, которые можно установить из репозитория (используя опцию -f).

Начало работы

Новое: теперь вы можете найти скомпилированные руководства по JUCI здесь: http://mkschreder.github.io/juci/

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

Чтобы установить необходимые инструменты для сборки JUCI, вы можете использовать файл ./scripts/ubuntu-bootstrap.sh. Запустите его с помощью sudo.

JUCI представляет собой коллекцию многих файлов, включая отдельные файлы JavaScript, шаблоны HTML, переводы и стили (написанные на LESS). Все эти файлы должны быть собраны в набор модулей, которые затем могут быть включены в качестве скриптов в страницу index.html. Это осуществляется с помощью make.

make - без аргументов собирает производственные файлы (минифицированные и gzip'нутые).
make debug - собирает незаминифицированные файлы для использования с juci-local-server.

При разработке очень полезно использовать локальный сервер, так как он позволяет постоянно тестировать ваши изменения локально. Локальный сервер — это маленькая программа, написанная с использованием NodeJS, которая запускает локальный HTTP-сервер, передающий вызовы ubus на реальное устройство.

Чтобы запустить локальный сервер для тестирования новых элементов GUI во время разработки:```bash ./juci-local-server --host "<IP-адрес вашего маршрутизатора с установленным JUCI>"

теперь перейдите на http://localhost:3000/, чтобы увидеть локальный GUI.

когда вы сделаете изменения в коде, снова выполните make debug и перезагрузите локальную страницу.


Общие проблемы
--------------

* Я зашел на домашнюю страницу и ничего не вижу. Домашняя страница пустая.

    Решение: откройте консоль своего браузера и посмотрите, нет ли ошибок, выводимых там.

* JUCI не запускается. Сообщает, что вызова ubus juci.ui.menu не существует.

    Решение: убедитесь, что ubus-scriptd запущен на маршрутизаторе. Убедитесь, что все скрипты загружены без ошибок. Для проверки выполните `/etc/init.d/ubus-scriptd stop` и просто запустите ubus-scriptd. Он выведет трассировку. Теперь прервите его с помощью Ctrl+C и, исправив ошибки, перезапустите его с помощью `/etc/init.d/ubus-scriptd start`. Затем убедитесь, что необходимый вызов присутствует в выводе "ubus list".

* Я дохожу до страницы входа, но не могу войти. Какой пароль?

    Решение: учетная запись входа установлена в `/etc/config/rpcd`. Пароль — это Unix-пароль для этой учетной записи — который вы можете изменить с помощью `passwd <username>`.

* Я могу войти, но получаю большой красный блок с большим количеством текста, упоминающего Angular.

    Решение: это значит, что какой-то модуль полностью не смог инициализироваться или что у вас есть синтаксическая ошибка где-то или что у вас есть повторяющиеся контроллеры или что-то еще, что вызывает исключение в Angular. Обычно первым шагом является проверка консоли браузера на сообщения перед ошибкой. Затем проверьте криптографическое сообщение Angular, указанное в ошибке, чтобы получить представление о том, что делать дальше.

* Моей странице xyz не удается получить доступ к ubus. В консоли браузера появляется "Access Denied".

    Решение: убедитесь, что у вас правильно настроен ACL-перечень в вашем файле `access.json` в вашем плагине (если он там отсутствует, создайте его — используйте существующие плагины для примера). Затем скопируйте этот файл на ваш маршрутизатор и перезапустите rpcd (`/etc/init.d/rpcd restart`). Теперь должно всё работать.

* Процесс сборки просто зависает на строке, содержащей "npm".

    Решение: процесс сборки требует подключения к интернету для загрузки необходимых зависимостей для некоторых скриптов сборки. Если это невозможно, программы типа "npm" могут зависнуть бесконечно.

* Сборка завершается ошибкой при "Compiling css/...juci.css...".

    Решение: это происходит, когда YUI-Compressor (минификатор CSS, написанный на Java) заканчивает работу из-за нехватки памяти. Этот файл часто становится большим, и минификатору требуется больше памяти. Убедитесь, что ваш JVM настроен на использование более крупного стека (я поражён, насколько легко Java всегда расходует память).

Тестирование на единичных случаях
---------------------------------

**Замечание:** тестирование на единичных случаях больше не поддерживается с сентября  Yöntemler
-----------------------------------

Возможность использования UCI напрямую из консоли браузера. Когда вы открываете свою консоль, у вас будет глобальная переменная uci, определенная в приложении.

```javascript
$uci.$sync("wireless"); // синхронизирует таблицу wireless
$uci.$sync(["wireless", "hosts"]); // синхронизирует как wireless, так и hosts конфигурации.

$uci.wireless.wl0.channel.value = 1; // устанавливает значение канала в 1

$uci.$save(); // сохраняет конфигурацию uci

Все вышеупомянутые методы возвращают обещание. Таким образом, если вам нужно выполнить код ПОСЛЕ завершения операции, вам следует установить обратный вызов done (или fail/always) для возвращенного обещания. Вы делаете это следующим образом:

$uci.$sync("wireless").done(function(){
    console.log("Канал: "+$uci.wireless.wl0.channel.value);
}).fail(function(){
    console.log("Не удалось синхронизировать таблицы!");
}).always(function(){
    console.log("Готово!");
});

Когда вы вызываете $sync(), код uci загружает указанные конфигурации в память. Типы конфигураций должны быть определены в вашем плагине заранее, чтобы поля, которых нет в конфигурациях, могли быть созданы со своими значениями по умолчанию.

Для получения более подробной информации о том, как это делается, проверьте .js файлы в плагинах под src/ (не страницы и виджеты, а главный файл плагина, который обычно называется plugin-name.js или просто main.js).

Как и в командной строке uci, JUCI предоставляет несколько способов доступа к элементам конфигурации:

$uci.wireless["@all"] // список всех секций конфигурации беспроводной сети
$uci.wireless["@wifi-device"] // список только секций с устройствами Wi-Fi
$uci.wireless.wl0 // доступ к секции wl0 по имени (все секции, имеющие имя, могут быть получены таким образом)
$uci.wireless.cfg012345 // доступ к секции с автоматически созданным именем UCI.

Каждое поле в секции UCI имеет член "value", который является текущим значением этого поля. Поэтому если вы используете секции UCI в элементах вашего графического интерфейса, вам следует использовать .value для установки их значений.

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

Также возможно привязывать проверяющие функции к каждому полю. Примеры находятся в файле uci.js.

Задачи серверной части

Серверная часть JUCI в основном состоит из скриптов, реализующих функции ubus, которые становятся доступными для кода GUI через JSON-RPC. Эти скрипты являются простым связывающим слоем, которым JUCI пользуется для взаимодействия со всем остальным системой. Вы можете поместить эти скрипты в папку ubus/ вашего плагина. Каждый скрипт должен иметь глобально уникальное имя (лучше всего, чтобы это имя указывало на принадлежность к конкретному плагину), и он будет помещён в папку /usr/lib/ubus/juci маршрутизатора.

Все эти скрипты затем управляются службой ubus-scriptd на маршрутизаторе, которая делает их доступными через ubus.

ubus-scriptd поддерживает как скрипты в батче, так и службы. Большинство задач серверной части JUCI обычно являются скриптами в батче, которые становятся объектами ubus.

Дополнительная информация

Документация JUCI может быть значительно улучшена. Вы можете ускорить этот процесс, отправив свои вопросы на страницу проблем JUCI на GitHub (https://github.com/mkschreder/juci/issues).

История JUCI -------------В апреле 2015 года я пришёл в качестве консультанта в компанию Inteno в середине цикла выпуска следующего поколения IOPSYs Open Source SDK для широкополосных маршрутизаторов Inteno. Одним из моих первых заданий было быстро добавить новую функциональность к существующему веб-интерфейсу. Я быстро понял, что это невозможно. Существующий интерфейс был написан на Lua, а добавление новых страниц было странным путешествием по удалению HTML-кода путём вызова функций Lua. Это было странно даже в лучшем случае, и это не было виной Inteno — они использовали готовое решение и уже несколько лет имели дело с задачей его улучшения. Но эта задача никогда не была завершена.

Поэтому я взялся за создание нового интерфейса. В течение двух месяцев я сделал рабочий прототип, известный тогда как luci-express. Он получил такое название оттого, что вначале я исследовал идею использования NodeJS и Express для создания его — но вместо этого решил использовать Angular.JS и части Luci2 (с большей частью кода Luci2 теперь удаленной, но серверная часть, такой как rpcd, была фактически создана специально для Luci2 на OpenWRT и используется до сих пор).

Название luci-express, однако, было недостаточно описательным — особенно потому, что буква "L" в luci стоит за Lua, а luci-express был практически написан на JavaScript. Так что я придумал более подходящее название для него, которое стало аббревиатурой Javascript Universal Configuration Interface — и вот как родился JUCI. Кроме того, все казались довольными этим названием, поэтому JUCI стал его официальным названием.

Еще шесть месяцев потребовалось, чтобы сделать JUCI достойным участника для использования в производственной среде. Со временем больше людей присоединились к разработке, и сейчас мы несколько человек, добавляющих новые вещи к JUCI. Оказалось, что это действительно полезно и довольно приятно работать с ним. Все это стало возможным благодаря начальной поддержке Inteno и IOPSYs и примерам уже работающих систем.

Уведомление об авторских правах

Авторское право © 2015 проекта JUCI. Все права защищены.

Все вклады в JUCI имеют авторское право своих соответствующих авторов.

JUCI содержит код от:

Reidar Cederqvist <reidar.cederqvist@gmail.com>
Stefan Nygren <stefan.nygren@hiq.se>
Charlie Robbins <[charlie.robbins](@http://nodejitsu.com)>
Craig Mason-Jones
Kord Campbell <kord@loggly.com>
Mihai Bazon
Philippe Rathé <prathe@gmail.com>

Этот программный продукт является свободным программным обеспечением; вы можете распространять его и/или модифицировать его в соответствии с условиями Генеральной общественной лицензии версии 3, выпущенной Free Software Foundation.

Этот программный продукт распространяется в надежде, что он будет полезен, но БЕЗ ЛЮБОГО ГАРАНТИРОВАННОГО УСЛОВИЯ; без даже подразумевающегося гарантийного обязательства по продаже или пригодности для специального назначения. Смотрите Генеральную общественную лицензию для получения дополнительной информации.

Вы должны были получить копию Генеральной общественной лицензии вместе с этим программным продуктом; если нет, напишите в Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

JUCI JavaScript Webgui для встроенных устройств под управлением OpenWRT Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yanjiu-juci.git
git@api.gitlife.ru:oschina-mirror/yanjiu-juci.git
oschina-mirror
yanjiu-juci
yanjiu-juci
master