Опис компонента OPKG
Менеджер пакетів opkg призначений для розширення можливостей пристроїв Keenetic шляхом встановлення додаткових програмних пакетів. За допомогою opkg досвідчені користувачі можуть встановлювати та оновлювати модулі, які не входять до базової прошивки пристрою, що дозволяє їм гнучко налаштоввувати функціональність маршрутизатора для конкретних завдань.
У цій статті описано принципи використання opkg у KeeneticOS, включаючи процедуру встановлення, методи підключення зовнішніх накопичувачів та рекомендації щодо використання пакетів із репозиторію.
Компонент Підтримка відкритих пакетів має бути встановлений на пристрої для використання відкритих пакетів.
Компонент:
додає команди налаштування
opkg,монтує файлову систему USB в
/opt,розпаковує файли
*.ipkта*.tar.gzз каталогу/opt/install,виконує хук-скрипти.
Налаштування
Команда opkg disk використовується для визначення файлової системи /opt. Файлову систему можна ідентифікувати за UUID або за міткою тому. Наприклад,
(config)>opkg disk OPT_LABEL:Opkg::Manager: Disk is set to: OPT_LABEL. (config)>system configuration save
Підтримуються файлові системи NTFS та EXT2/3. Після налаштування opkg disk та підключення накопичувача, компонент opkg:
Змонтує файлову систему
OPT_LABELдо/opt.Якщо каталог
/opt/installіснує, розпакує усі файли/opt/install/*.ipkдо/opt. Це розпакування має бути завершено за 120 секунд, інакше воно буде перервано за тайм-аутом.Виконає
/opt/etc/initrc.
Хук-скрипти
Хук-скрипти розташовані в:
/
opt/etc/initrc— скрипт автозапуску за замовчуванням (можна визначити за допомогою командиopkg initrc),/opt/etc/ndm/*.d/— обробники подій.
Каталоги скриптів та змінні середовища описані в окремих розділах нижче.
Змінні PATH та LD_LIBRARY_PATH попередньо визначені для вибору виконуваних файлів та динамічних бібліотек з /opt:
PATH=/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib:/lib:/usr/lib
Префікс /opt завжди мається на увазі в директиві shebang хук-скрипта. Тобто, і #!/bin/sh, і #!/opt/bin/sh будуть виконувати інтерпретатор /opt/bin/sh.
Для кожного скрипту, що виконується, встановлено тайм-аут у 24 секунди.
Усі хук-skrypt запускаються в одній черзі, тобто поки виконується /opt/etc/ndm/wan.d/01-one.sh, жодні інші скрипти не будуть запущені ні з /opt/etc/ndm/wan.d/, ні з /opt/etc/ndm/netfilter.d/.
initrc
Скрипт ініціалізації /opt/etc/initrc виконується після монтування /opt. Він може виконувати деякі інші скрипти ініціализации, наприклад /opt/etc/init.d/*, для запуску фонових процесів. Якщо /opt/etc/initrc відсутній, компонент OPKG виконає /opt/etc/init.d/* в алфавітному порядку.
Наприклад, скрипт запуску dropbear може бути:
#!/bin/sh
if [ ! -d /opt/etc/dropbear ]; then
mkdir /opt/etc/dropbear
fi
if [ ! -f /opt/etc/dropbear/dropbear_dss_host_key ]; then
dropbearkey -t dss -f /opt/etc/dropbear/dropbear_dss_host_key
fi
if [ ! -f /opt/etc/dropbear/dropbear_rsa_host_key ]; then
dropbearkey -t rsa -f /opt/etc/dropbear/dropbear_rsa_host_key
fi
dropbearДля сумісності з системами ініціалізації, подібними до Sys-V, скрипти /opt/etc/initrc та /opt/etc/init.d викликаються з аргументом командного рядка start. Коли користувач хоче вийняти накопичувач /opt, /opt/etc/initrc викликається з аргументом stop.
ndm/wan.d
Скрипти подій /opt/etc/ndm/wan.d/ виконуються, як только з’явиться нове підключення до Інтернету.
1-й параметр | Опис |
|---|---|
| Підключення до Інтернету встановлено |
| Підключення до Інтернету розірвано |
Змінна | Опис |
|---|---|
| WAN-інтерфейс, наприклад |
| IP-адреса інтерфейсу |
| Маска підмережі інтерфейсу |
| IP-адреса WAN-шлюзу |
Коли підключення до Інтернету не працює, скрипти wan.d виконуються з усіма невизначеними змінними, що зазначені вище.
Якщо підключення до Інтернету було встановлено до монтування /opt, скрипти wan.d виконуються відразу після initrc.
ndm/user.d
Скрипти /opt/etc/ndm/user.d виконуються, коли основна система оновлює /etc/passwd та /etc/group. Додайте скрипти до user.d, якщо вам потрібно змінити /etc/passwd або /etc/group. В іншому випадку будь-які зміни в цих файлах будуть перезаписані.
Змінна | Опис |
|---|---|
| Ім'я користувача з доступом до |
Коли користувач видаляється, скрипти user.d виконуються з невизначеною змінною $user.
Наприклад, ви можете створити домашні каталоги за допомогою хука user.d наступним чином:
#!/bin/sh
home=/opt/home
[ -z "$user" ] && exit 0 # $user is undefined
[ -d $home/$user ] && exit 0 # home already exists
if mkdir -p $home/$user; then
chmod 0755 $home
chmod 0700 $home/$user
chown $user $home/$user
findm/netfilter.d
Скрипти /opt/etc/ndm/netfilter.d виконуються, коли система переписує таблицю netfilter. Хуки netfilter.d можуть змінювати таблицю за допомогою iptables. Змінні $table та $type слід перевіряati, щоб запобігти дублюванню правил.
Змінна | Опис |
|---|---|
| протокол netfilter, такий як |
| таблиця netfilter, така як |
Наприклад, ви можете додати деякі правила mangle наступним чином:
#!/bin/sh [ "$type" == "ip6tables" ] && exit 0 # check the protocol type in backward-compatible way [ "$table" != "mangle" ] && exit 0 # check the table name iptables -A PREROUTING -i br0 -t mangle -p tcp --dport 22 -j MARK --set-mark 1 iptables -A PREROUTING -i br0 -t mangle -p tcp --dport 23 -j MARK --set-mark 1
ndm/usb.d
Скрипти /opt/etc/ndm/usb.d виконуються, коли USB-пристрій під'єднано або від'єднано.
1-й параметр | Опис |
|---|---|
| USB-пристрій під'єднано |
| USB-пристрій від'єднано |
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати ключ.
Змінна | Опис | Приклад |
|---|---|---|
| Шлях до пристрою |
|
| Назва пристрою в |
|
| Шлях в sysfs |
|
| ID моделі USB |
|
| Номер універсального порту USB |
|
| ID виробника USB |
|
Будь-який пристрій, підключений до виконання скрипту ініціалізації opkg, запустить ці скрипти зворотного виклику, заплановані для запуску під час виконання скрипту ініціалізації OPKG.
ndm/fs.d
Скрипти /opt/etc/ndm/fs.d викликаються, коли файлова система змонтована, готується до розмонтування або несподівано вилучена.
1-й параметр | Опис |
|---|---|
| Файлова система змонтована |
| Файлова система готується до розмонтування або несподівано витягнута |
Типом файлової системи може бути будь-який з: VFAT, EXFAT, NTFS, EXT2, EXT3, EXT4 або HFSP.
Змінна | Опис | Приклад |
|---|---|---|
| Тип файлової системи |
|
| ID файлової системи |
|
| Мітка файлової системи / розділу |
|
| Каталог монтування файлової системи (абсолютний шлях) |
|
Будь-яка файлова система, змонтована до виконання скрипта ініціалізації OPKG, запустить ці скрипти зворотного виклику, заплановані для запуску під час виконання скрипта ініціалізації OPKG.
ndm/time.d
Скрипти /opt/etc/ndm/time.d викликаються, коли системний час змінюється (синхронізується через NTP).
ndm/button.d
Скрипти /opt/etc/ndm/button.d викликаються при натисканні кнопки FN та/або кнопки(ок) WPS.
Змінна | Опис | Приклад |
|---|---|---|
| Яка кнопка була натиснута |
|
| Тип натискання |
|
Спочатку вам потрібно налаштувати деякі деталі з вебінтерфейсу.
ndm/schedule.d
Скрипти /opt/etc/ndm/schedule.d викликаються із запланованими подіями (якщо розклади визначені через CLI).
1-й параметр | Опис |
|---|---|
| Початок запланованого завдання |
| Кінець запланованого завдання |
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Назва розкладу |
| Час (у секундах), витрачений на дію |
ndm/neighbour.d
Скрипти /opt/etc/ndm/neighbour.d викликаються для певних мережевих подій сусідів. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Унікальний ID сусіда з моменту завантаження |
| Дія сусіда ( |
| Тип оновлення (якщо є): |
| Сімейство адрес — |
ndm/ifcreated.d
Скрипти /opt/etc/ndm/ifcreated.d викликаються, коли створюється інтерфейс NDM. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
ndm/ifdestroyed.d
Скрипти /opt/etc/ndm/ifdestroyed.d викликаються, коли інтерфейс NDM видаляється. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
ndm/ifipchanged.d
Скрипти /opt/etc/ndm/ifipchanged.d викликаються, коли змінюється IPv4-адреса або підмережа інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
| Нова IPv4-адреса |
| Нова маска мережі IPv4 |
| Поточний стан зв'язку інтерфейсу, може бути |
| Поточний стан підключення інтерфейсу, може бути |
| Поточний стан інтерфейсу, може бути |
| Поточний глобальний пріоритет інтерфейсу, може бути нульовим для неглобальних інтерфейсів та > 0, коли інтерфейс глобальний |
ndm/ifip6changed.d (з версії 4.0)
Скрипти /opt/etc/ndm/ifip6changed.d викликаються, коли змінюється IPv6-адреса або підмережа інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
| IPv6-адреса |
| Маска мережі IPv6 |
| Поточний стан зв'язку інтерфейсу, може бути |
| Поточний стан підключення інтерфейсу, може бути |
| Поточний стан інтерфейсу, може бути |
| Поточна дія зміни, може бути |
| Поточний глобальний пріоритет інтерфейсу, може бути нульовим для неглобальних інтерфейсів та > 0, коли інтерфейс глобальний |
ndm/ifstatechanged.d (застаріло з версії 4.0, збережено лише для зворотної сумісності)
Скрипти /opt/etc/ndm/ifstatechanged.d викликаються, коли змінюється стан інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
| Поточний стан зв'язку інтерфейсу, може бути |
| Поточний стан підключення інтерфейсу, може бути |
| Поточний стан інтерфейсу, може бути |
| Джерело змін, може бути |
ndm/iflayerchanged.d (новий та основний з версії 4.0)
Скрипти /opt/etc/ndm/iflayerchanged.d викликаються, коли змінюється стан рівня інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| Специфічне для Linux ім'я інтерфейсу |
| Рівень інтерфейсу, може бути |
| Поточний стан рівня інтерфейсу, може бути |
ndm/sms.d
Скрипти /opt/etc/ndm/sms.d викликаються при отриманні SMS на інтерфейсі UsbQmi. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDM |
| ID SMS |
Фактичний вміст SMS можна отримати через ci/rci (команди ndmq / jq), використовуючи надані ID інтерфейсу та повідомлення.
ndm/pptp_vpn_up.d
Скрипти /opt/etc/ndm/pptp_vpn_up.d викликаються, коли користувач підключається до VPN-сервера PPTP. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Ім'я користувача |
| Системний інтерфейс (зазвичай vpn*) |
| Зовнішня IPv4-адреса віддаленого вузла |
| IPv4-адреса віддаленого вузла всередині тунелю |
ndm/pptp_vpn_down.d
Скрипти /opt/etc/ndm/pptp_vpn_down.d викликаються, коли користувач відключається від VPN-сервера PPTP. Скрипти викликаються з першим параметром ($1) == hook.
Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Ім'я користувача |
| Системний інтерфейс (зазвичай sstp*) |
| Зовнішня IPv4-адреса віддаленого вузла |
| IPv4-адреса віддаленого вузла всередині тунелю |
ndm/l2tp_ipsec_vpn_up.d
Скрипти /opt/etc/ndm/l2tp_ipsec_vpn_up.d викликаються, коли користувач підключається до L2TP/IPsec VPN-сервера. Скрипти викликаються з першим параметром($1) == hook.
Визначено наступні змінні середовища, які дозволяють ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
$ndm_opkg_id | Ім'я користувача |
$iface | Системний інтерфейс (зазвичай l2tp*) |
$remote | Зовнішня IPv4-адреса віддаленого вузла |
$local | IPv4-адреса віддаленого вузла всередині тунелю |
ndm/l2tp_ipsec_vpn_down.d
Скрипти /opt/etc/ndm/l2tp_ipsec_vpn_down.d викликаються, коли користувач відключається від L2TP/IPsec VPN-сервера. Скрипти викликаються з першим параметром($1) == hook.
Визначено наступні змінні середовища, які дозволяють ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Ім'я користувача |
| Системний інтерфейс (зазвичай l2tp*) |
| Зовнішня IPv4-адреса віддаленого вузла |
| IPv4-адреса віддаленого вузла всередині тунелю |
ndm/vip_vpn_up.d
Скрипти /opt/etc/ndm/vip_vpn_up.d викликаються, коли користувач підключається до VPN-сервера віртуального IP. Скрипти викликаються з першим параметром($1) == hook.
Визначено наступні змінні середовища, які дозволяють ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Ім'я користувача |
| Зовнішня IPv4-адреса віддаленого вузла |
| IPv4-адреса віддаленого вузла всередині тунелю |
ndm/vip_vpn_down.d
Скрипти /opt/etc/ndm/vip_vpn_down.d викликаються, коли користувач відключається від VPN-сервера віртуального IP. Скрипти викликаються з першим параметром($1) == hook.
Визначено наступні змінні середовища, які дозволяють ідентифікувати деталі завдання.
Змінна | Опис |
|---|---|
| Ім'я користувача |
| Зовнішня IPv4-адреса віддаленого вузла |
| IPv4-адреса віддаленого вузла всередині тунелю |
ndm/openvpn-*.d
Скрипти /opt/etc/ndm/openvpn-*.d/ викликаються, коли OpenVPN у NDMS виконує скрипт-перехоплювач (2.10+, лише коли ndm-mod-openvpn встановлено та налаштовано).
Список скриптів:
/opt/etc/ndm/openvpn-up.d//opt/etc/ndm/openvpn-tls-verify.d//opt/etc/ndm/openvpn-ipchange.d//opt/etc/ndm/openvpn-client-connect.d//opt/etc/ndm/openvpn-route-up.d//opt/etc/ndm/openvpn-client-disconnect.d//opt/etc/ndm/openvpn-down.d//opt/etc/ndm/openvpn-learn-address.d/
Значення скриптів слід перевіряти на офіційній сторінці керівництва OpenVPN (розділ SCRIPTING AND ENVIRONMENTAL VARIABLES).
Усі змінні середовища, встановлені самим OpenVPN (описані тут), зберігаються як є і передаються до скриптів-перехоплювачів OPKG. Скрипти викликаються з першим параметром($1) == hook. Усі аргументи з оригінального виконання перехоплювача передаються як додаткові змінні середовища.
Змінна | Опис |
|---|---|
| ID інтерфейсу NDMS, наприклад |
| Кількість аргументів в оригінальному виклику перехоплювача |
| Значення аргументу |