JUCI — это веб-интерфейс на основе JavaScript для широкополосных маршрутизаторов, работающих с Iopsys/OpenWRT.
JUCI создан с использованием HTML5, AngularJS и Bootstrap:
JUCI имеет тематическую настройку и полностью мобильную поддержку (адаптивность):
Он предлагает вам следующее:
Вы можете попробовать 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
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 )