Навчальні матеріали Onion Wiki - OpenWRT / OPKG, UBUS, UCI

Структура UBUS

Onion Omega Wiki >>

Зміст:


Пакет OPKG

Ми наполегливо рекомендуємо переглянути цей розділ, тому, що він може допомогти вирішити будь-яку проблему, що ви можете зустріти при установці нових додатків.

Що таке OPKG?

opkg – це інсталяційний пакет та менеджер, що використовується OpenWRT. Його призначення схоже до майстра встановлення Windows чи інсталятора apt-get на Ubuntu. Opkg розташований на кількох сховищах, включаючи наше власне, отже цей пакет може бути легко завантажений та встановлений на ваш Omega.

Щоб подивитись, які сховища є під’єднаними введіть в командній стрічці наступне.

кіт /etc/opkg/distfeeds.conf

Основи OPKG

Ми розглянемо кілька основних команд та опцій при використанні opkg. Спершу, поглянемо на оновлення opkgВпевніться, що ви запустили цю команду перед встановленням будь-яких пакетів.

opkg update

Це оновить opkg список доступних пакетів. Якщо ви спробуєте встановити пакет без попереднього оновлення списку opkg, opkg може не знайти пакет, який ви шукаєте.

Далі, для встановлення певного пакету, використайте наступну команду.

opkg install <packagename>

Це здійснить пошук серед наявних пакетів. За необхідності ви можете вказати для інсталятора opkg сховище або локальний каталог, звідки ви хочете здійснити установку.

opkg install <urltopackage>
opkg install <pathtopackage>

Іноді корисно перевіперевірити, які пакети вже було встановлено.

opkg list-installed

Ви також можете оновити пакет або групу пакетів використавши команду нижче.

opkg upgrade <packages>

Для OpenWRT це не рекомендується. З двох головних причин:

  1. При цьому пам’ять використовується значно менш ефективно ніж при встановленні за умовчанням.
  2. Якщо ви оновлюєте ядро і при цьому з’являються проблеми сумісності, ваш пристрій може зламатись. Тому, не оновлюйте ядро.

Замість оновлення ядра рекомендується оновити OpenWRT новим програмним забезпеченням.

Насамкінець, для видалення пакету ви можете використати наступну команду:

opkg remove <packages>

Вступ до UBUS

Це перша частина, призначена для ознайомлення користувачів Omega з одним з найпотужніших інструментів OpenWRT, ubus. Ми наполегливо рекомендуємо користувачам спершу ознайомитись з розділом "Основи Linux". Більше того, користувачам варто ознайомитись з сценарієм командної стрічки, для максимально продуктивного вивчення даного розділу. Цей розділ може здатись складним, проте його вивчення є надзвичайно важливим для розкриття повного потенціалу Omega та ваших проектів. Почнемо без зайвих слів.

Що таке Ubus?

Ubus – це інтерфейс, що дозволяє користувачам отримувати доступ та використовувати сервіси з одного й того ж місця. Деякі сервіси вбудовані до OpenWRT, а інші сервіси - це виконавчі файли, які ми створили самостійно.

Приклад

Найкращий спосіб зрозуміти ubus, вивчити кілька прикладів з його використанням. Для початку поглянемо як використовувати ubus. Введіть це у вашу командну стрічку:

UBUS

Лук Омега Tibus

Команда показала нам кілька опцій, які ми можемо використати.

Скористаємось опцією list, щоб побачити, які сервіси нам доступні.

ubus list

Цибулевий Omega UBUS список

На екрані ви повинні побачити подібне. Не хвилюйтесь, якщо побачите дещо відмінний список, ми могли щось оновити.

Використаємо сервіс onion, щоб виконати кілька функцій. Але спершу нам потрібно подивитись, які функції є доступними і як отримати доступ до них. В загальному ми можемо зробити це введенням.

ubus list -v servicename

Для того, щоб дізнатись вміст сервісу onion, введіть це в командну стрічку:

ubus list -v onion

Ви повинні побачити подібне:

цибуля-омега-ubus3

Тепер спробуємо поблимати LED світлодіодом на Omega, використавши опцію heartbeat.

Для того, щоб зробити це, використаємо опцію call, що забезпечується ubus для доступу сервісу onion. Далі ми обираємо необхідну нам функцію та вводимо необхідні параметри використовуючи формат json:

ubus call <service> <function> '{<JSON parameters>}'

А конкретно, введіть в командну стрічку це:

ubus call onion omega-led '{"set_trigger":"heartbeat"}'

цибуля-омега-ubus4

Спостерігайте за Omega LED світлодіодом - він повинен імітувати серцебиття. Таким чином ми скористались ubus. Поглянемо більш детально, що відбувається за ширмою.

структура UBUS

На зображенні нижче показано стандартну схему його роботи.

структура UBUS

 

В попередньому прикладі ми під’єднались до ubus через інтерфейс командної стрічки, ubus_cli на схемі. Ubus дозволив нам під’єднатись до сервісу onion через rcpd, який ми обговоримо детально пізніше. Як тільки сервіс onion виконав функцію запиту, вихід передано назад до ubus_cli через ubus.

Ubus є потужним інструментом для доступу до сервісів Omega як локально, так і віддалено. На приклад, коли ми використовуємо Omega як сервер, ми можемо використати сервіс httpd-mod-ubus для під’єднання до Omega ubus локально. Також, якщо ми використовуємо хмарне сховище Omega cloud, ми можемо під’єднатись до Omega ubus через onion device client service.


UBUS, частина 2 - RPCD

RPCD частина 1

Нагадаємо, в попередньому розділі Ubus ми говорили, що деякі сервіси Ubus вбудовані в OpenWRT, а деякі були додані нами. Давайте подивимось, що ми маємо на увазі. Введіть команду ubus list у вашу командну стрічку.

ubus list

Ви побачите список сервісів. Але як нам дізнатись, які сервіси є стандартними для onion? Введіть плагін rpcd. Поглянемо знову на зображення, представлене в попередньому розділі. Як можна здогадатись з назви та малюнку, ми використовуємо rpcd для під’єднання нашого сервісу до ubus. Так ми додавали сервіси до ubus і так ви можете додавати свої власні сервіси до ubus.

Плагін rpcd дозволяє користувачам створювати їхні власні сервіси у форматі виконуваних сценаріїв командної стрічки в ubus. Щоб побачити, які сценарії командної стрічки використовують rpcd, перейдіть до каталогу /usr/libexec/rpcd/ та перегляньте вміст:

cd /usr/libexec/rpcd/
ls

Цибулевий Omega UBUS RPCD

Ви можете перевірити це самостійно, але ті ж самі сервіси доступні в ubus. Ми можемо використати команду cat для відкриття сценарію командної стрічки та дивитись, що відбувається поза кадром щоразу, коли викликається сервіс ubus.

В наступному розділі, ми покажемо вам, як створити свій власний сервіс та приєднати його до ubus.


UBUS, частина 3 - RPCD

RPCD частина 2

В цій частині ми покажемо, як створити сценарій командної стрічки для ubus. Ми також рекомендуємо прочитати OpenWRT wiki на тему, яка може бути знайдена тут.

Додатково, користувачам варто бути знайомими з форматуванням JSON, оскільки цей формат використовується для передачі інформації в сервіси UBUS. Перейдіть за цим посиланням для короткої довідки про форматування json.

Сценарій командної стрічки UBUS

Існують дві відмінні особливості, що відрізняють сценарій командної стрічки ubus від звичайного, які саме, стане зрозуміло з нашого прикладу.

1) I/O

Весь вхід та вихід сценарію командної стрічки ubus має формат JSON. Цей формат забезпечує сумісність між всіма сервісами ubus. JSON також дуже поширений формат для передачі даних через web, тому добре вивчіть його. Типовий об’єкт або файл json виглядає приблизно так.

'{"argument1":"value1", "argument2":"value2","argument3":"value3"}'

2) Функції List/Call

Сценарій командної стрічки ubus повинен також підтримувати функціії call/list, щоб приєднатись до ubus. З першого розділу ubus пам’ятаємо, що ми використовували функцію ubus list, щоб показати, як використовувати сервіс, а функцію ubus call, щоб показати, як отримати доступ до сервісу. Обидві ці функції описані в сценарії командної стрічки.

Приклад

В нашому прикладі ми створимо простий ubus виконавчий сценарій командної стрічки, який обраховуватиме суму та різницю двох цілих чисел та поверне їх назад до файлу у форматі json.

Для того, щоб почати перейдемо до каталогу rpcd.

cd /usr/libexec/rpcd

Тепер створимо файл з назвою Math використавши cat

cat > Math

І вставимо наступний код

#!/bin/sh
. /usr/lib/onion/lib.sh  
    #includes the functions that we need to parse JSON files

case "$1" in
    #The list function describes how to use the ubus functions.
        list)
                echo '{ "addition": { "argument1": "value" , "argument2":"value"}, "subtraction": { "argument1": "value", "argument2":"value"} }'
        ;;
    #The call function describes the methods that are available
        call)
                case "$2" in
                        # The addition method
                        addition)
                                # read the argument
                                read input
                                # Load the argument into the json for retrieval
                                json_load "$input"
                                #Using the function below, the value of
                                #"argument1" is stored in variable val1
                                json_get_var val1 "argument1"
                                json_get_var val2 "argument2"
                                #The sum of the two are computed
                                ans=$(($val1+$val2))
                                #The \ is used so that we can substitute
                                #properly
                                echo "{ \"The ans is\" :\"$ans\"}"
                        ;;
                        subtraction)
                                # read the argument
                                read input
                                # Load the argument into the json for
                                json_load "$input"
                                #Using the function below, the value of
                                #"argument1" is stored in variable val1
                                json_get_var val1 "argument1"
                                json_get_var val2 "argument2"
                                #The difference of the two are computed
                                ans=$(($val1-$val2))
                                #The \ is used so that we can substitute
                                #properly
                                echo "{ \"The ans is\" :\"$ans\"}"
                        ;;
                esac
        ;;
esac

Як тільки ви вставили код, натисніть CTRL+D та збережіть файл.

Як тільки ви зробили файл виконавчим зміною доступу до нього, введіть це у вашу командну стрічку:

chmod +x Math

Пісця цього вам буде потрібно перезавантажити плагін rcpd, для розпізнавання щойно доданого сервісу. Для цього введіть в командну стрічку наступне:

/etc/init.d/rpcd restart

Це має під’єднати ваш сервіс до ubus.

Цибулевий Omega UBUS RPCD

Тепер давайте перевіримо чи наш сервіс з’явився у списку. Для перевірки наявності нашого сервісу запустіть

ubus list

в командній стрічці.

Цибулевий Omega UBUS RPCD

Як можна побачити, Math з’явився в списку сервісів ubus. Якщо ні, спробуйте запустити

/etc/init.d/rpcd stop

а потім

/etc/init.d/rpcd start

або перезапустіті Omega.

Спробуємо використати нашу функцію, введіть наступні команди та спостерігайте, що станеться:

ubus list -v Math
ubus call Math addition '{"argument1":"4","argument2":"6"}'
ubus call Math subtraction '{"argument1":"4","argument2":"6"}'

Цибулевий Omega UBUS RPCD

На цьому розділ про UBUS завершуємо.


UCI

Коротко, Unified Configuration Interface, скорочено uci - це централізований інтерфейс налаштувань OpenWRT.

Для зміни файлів конфігурації ми можемо перейти до спеціального файлу, зазвичай розташованого в папці "/etc/config".

Також, ви можете використати командну стрічку uci для досягнення тих самих цілей. Uci особливо зручний, коли необхідно провести зміни у файлах конфігурації зсередини сценарію командної стрічки без змін всіх інших частин файлу. Для подальшого вивчання рекомендуємо ознайомитись з документацією OpenWRT на цю тему, яка може бути знайдена тут.

Приклад

Для виклику uci з командної стрічки просто введіть:

uci

В результаті ви побачите всі функції, що ви можете викликати для uci.

Лук Omega UCI

Тепер давайте детальніше поглянемо на наш файл конфігурації, той самий файл, що знаходиться в папці '/etc/config/', але ми хочемо скористуватись uci. Отже введіть:

uci export wireless

Onion Omega UCI export wireless

Також ви можете використати команду uci show, що швидко доведе свою зручність:

uci show wireless

Onion Omega UCI show wireless

Тепер, щоб захистити нашу точку доступу wifi ми повинні змінити наше кодування та додати ключ. Нам потрібно скористуватись наступною командою:

uci set <config>.<section>[.<option>]=<value>

Вам може стати цікаво, що означає друга частина команди. Якщо вам цікаво, можете прочитати документацію OpenWRT, але друга частина вказує на конкретну стрічку у файлі конфігурації, що ми хочемо змінити та записати нове значення. Отже в нашому випадку ми хочемо змінити кодування з відсутнього на psk2. Щоб визначити точний синтаксис другої частини, зверніться до виводу uci show wireless. Тепер введіть наступне у вашій командній стрічці:

uci set wireless.@wifi-iface[0].encryption=psk2

а потім – здійсніть зміни:

uci commit wireless

Щоб поглянути на зміни, введіть знову

uci show wireless

У вас повинні бути такі ж зміни, як на зображенні нижче.

Onion Omega UCI show wireless

Створимо пароль для нашої точки доступу. Подібно до попереднього кроку, ми введемо наступну команду

uci set wireless.@wifi-iface[0].key=password

після чого

uci commit wireless

і для перевірки наших змін:

uci show wireless

Створимо пароль для нашої точки доступу. Подібно до попереднього кроку, ми введемо наступну команду. uci set wireless.@wifi-iface[0].key=password після чого uci commit wireless і для перевірки наших змін: uci show wireless

Тепер для перезавантаження вашого Omega введіть:

/etc/init.d/boot reload

Це перезавантажить ваші файли конфігурації. Вам також потрібно перезавантажити ваш сервіс wifi. Для цього введіть у командну стрічку наступне.

wifi

Зачекайте кілька секунд і ваш Omega повинен почати трансляцію закритого wifi сигналу. Для перевірки відкрийте доступні wifi мережі, ваш Omega wifi повинен запитати пароль при підключенні, що був встановлений нами як "password".

Onion Omega WiFi

І вуаля, ви тільки що використали uci для запаролення вашої точки доступу Omega.

Більше інформації

За детальнішою інформацією про UCI, зверніться до технічної довідки OpenWRT UCI.

Залишити відповідь