Зміст:
Пакет 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 це не рекомендується. З двох головних причин:
- При цьому пам’ять використовується значно менш ефективно ніж при встановленні за умовчанням.
- Якщо ви оновлюєте ядро і при цьому з’являються проблеми сумісності, ваш пристрій може зламатись. Тому, не оновлюйте ядро.
Замість оновлення ядра рекомендується оновити OpenWRT новим програмним забезпеченням.
Насамкінець, для видалення пакету ви можете використати наступну команду:
opkg remove <packages>
Вступ до UBUS
Це перша частина, призначена для ознайомлення користувачів Omega з одним з найпотужніших інструментів OpenWRT, ubus. Ми наполегливо рекомендуємо користувачам спершу ознайомитись з розділом "Основи Linux". Більше того, користувачам варто ознайомитись з сценарієм командної стрічки, для максимально продуктивного вивчення даного розділу. Цей розділ може здатись складним, проте його вивчення є надзвичайно важливим для розкриття повного потенціалу Omega та ваших проектів. Почнемо без зайвих слів.
Що таке Ubus?
Ubus – це інтерфейс, що дозволяє користувачам отримувати доступ та використовувати сервіси з одного й того ж місця. Деякі сервіси вбудовані до OpenWRT, а інші сервіси - це виконавчі файли, які ми створили самостійно.
Приклад
Найкращий спосіб зрозуміти ubus, вивчити кілька прикладів з його використанням. Для початку поглянемо як використовувати ubus. Введіть це у вашу командну стрічку:
UBUS
Команда показала нам кілька опцій, які ми можемо використати.
Скористаємось опцією list, щоб побачити, які сервіси нам доступні.
ubus list
На екрані ви повинні побачити подібне. Не хвилюйтесь, якщо побачите дещо відмінний список, ми могли щось оновити.
Використаємо сервіс onion, щоб виконати кілька функцій. Але спершу нам потрібно подивитись, які функції є доступними і як отримати доступ до них. В загальному ми можемо зробити це введенням.
ubus list -v servicename
Для того, щоб дізнатись вміст сервісу onion, введіть це в командну стрічку:
ubus list -v onion
Ви повинні побачити подібне:
Тепер спробуємо поблимати LED світлодіодом на Omega, використавши опцію heartbeat.
Для того, щоб зробити це, використаємо опцію call, що забезпечується ubus для доступу сервісу onion. Далі ми обираємо необхідну нам функцію та вводимо необхідні параметри використовуючи формат json:
ubus call <service> <function> '{<JSON parameters>}'
А конкретно, введіть в командну стрічку це:
ubus call onion omega-led '{"set_trigger":"heartbeat"}'
Спостерігайте за Omega LED світлодіодом - він повинен імітувати серцебиття. Таким чином ми скористались 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
Ви можете перевірити це самостійно, але ті ж самі сервіси доступні в 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.
Тепер давайте перевіримо чи наш сервіс з’явився у списку. Для перевірки наявності нашого сервісу запустіть
ubus list
в командній стрічці.
Як можна побачити, 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"}'
На цьому розділ про UBUS завершуємо.
UCI
Коротко, Unified Configuration Interface, скорочено uci - це централізований інтерфейс налаштувань OpenWRT.
Для зміни файлів конфігурації ми можемо перейти до спеціального файлу, зазвичай розташованого в папці "/etc/config".
Також, ви можете використати командну стрічку uci для досягнення тих самих цілей. Uci особливо зручний, коли необхідно провести зміни у файлах конфігурації зсередини сценарію командної стрічки без змін всіх інших частин файлу. Для подальшого вивчання рекомендуємо ознайомитись з документацією OpenWRT на цю тему, яка може бути знайдена тут.
Приклад
Для виклику uci з командної стрічки просто введіть:
uci
В результаті ви побачите всі функції, що ви можете викликати для uci.
Тепер давайте детальніше поглянемо на наш файл конфігурації, той самий файл, що знаходиться в папці '/etc/config/', але ми хочемо скористуватись uci. Отже введіть:
uci export wireless
Також ви можете використати команду uci show, що швидко доведе свою зручність:
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
У вас повинні бути такі ж зміни, як на зображенні нижче.
Створимо пароль для нашої точки доступу. Подібно до попереднього кроку, ми введемо наступну команду
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".
І вуаля, ви тільки що використали uci для запаролення вашої точки доступу Omega.
Більше інформації
За детальнішою інформацією про UCI, зверніться до технічної довідки OpenWRT UCI.