Skip to main content

Інструкція користувача

Опис компонента 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:

  1. Змонтує файлову систему OPT_LABEL до /opt.

  2. Якщо каталог /opt/install існує, розпакує усі файли /opt/install/*.ipk до /opt. Це розпакування має бути завершено за 120 секунд, інакше воно буде перервано за тайм-аутом.

  3. Виконає /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-й параметр

Опис

start

Підключення до Інтернету встановлено

stop

Підключення до Інтернету розірвано

Змінна

Опис

$interface

WAN-інтерфейс, наприклад ppp0

$address

IP-адреса інтерфейсу

$mask

Маска підмережі інтерфейсу

$gateway

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

Ім'я користувача з доступом до OptWare, якщо додано через основну систему

Коли користувач видаляється, скрипти 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
fi
ndm/netfilter.d

Скрипти /opt/etc/ndm/netfilter.d виконуються, коли система переписує таблицю netfilter. Хуки netfilter.d можуть змінювати таблицю за допомогою iptables. Змінні $table та $type слід перевіряati, щоб запобігти дублюванню правил.

Змінна

Опис

$type

протокол netfilter, такий як iptables для IPv4 або ip6tables для IPv6

$table

таблиця netfilter, така як filter, nat або mangle

Наприклад, ви можете додати деякі правила 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-й параметр

Опис

start

USB-пристрій під'єднано

stop

USB-пристрій від'єднано

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати ключ.

Змінна

Опис

Приклад

$usb_device

Шлях до пристрою /proc/bus/usb

/proc/bus/usb/002/001

$usb_devname

Назва пристрою в /proc/bus/usb

bus/usb/002/001

$usb_devpath

Шлях в sysfs

/devices/platform/xhci-hcd/usb2

$usb_model

ID моделі USB

0003

$usb_port

Номер універсального порту USB

2

$usb_vendor

ID виробника USB

1d6b

Будь-який пристрій, підключений до виконання скрипту ініціалізації opkg, запустить ці скрипти зворотного виклику, заплановані для запуску під час виконання скрипту ініціалізації OPKG.

ndm/fs.d

Скрипти /opt/etc/ndm/fs.d викликаються, коли файлова система змонтована, готується до розмонтування або несподівано вилучена.

1-й параметр

Опис

start

Файлова система змонтована

stop

Файлова система готується до розмонтування або несподівано витягнута

Типом файлової системи може бути будь-який з: VFAT, EXFAT, NTFS, EXT2, EXT3, EXT4 або HFSP.

Змінна

Опис

Приклад

$type

Тип файлової системи

EXT2

$name

ID файлової системи

583a7335-6ef8-460b-a4c1-43a2e5c70e71:

$label

Мітка файлової системи / розділу

SecondPart

$directory

Каталог монтування файлової системи (абсолютний шлях)

/tmp/mnt/SecondPart

Будь-яка файлова система, змонтована до виконання скрипта ініціалізації OPKG, запустить ці скрипти зворотного виклику, заплановані для запуску під час виконання скрипта ініціалізації OPKG.

ndm/time.d

Скрипти /opt/etc/ndm/time.d викликаються, коли системний час змінюється (синхронізується через NTP).

ndm/button.d

Скрипти /opt/etc/ndm/button.d викликаються при натисканні кнопки FN та/або кнопки(ок) WPS.

Змінна

Опис

Приклад

$button

Яка кнопка була натиснута

WLAN

$action

Тип натискання

натискання, подвійне натискання або утримання

Спочатку вам потрібно налаштувати деякі деталі з вебінтерфейсу.

ndm/schedule.d

Скрипти /opt/etc/ndm/schedule.d викликаються із запланованими подіями (якщо розклади визначені через CLI).

1-й параметр

Опис

start

Початок запланованого завдання

stop

Кінець запланованого завдання

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$schedule

Назва розкладу

$elapsed

Час (у секундах), витрачений на дію

ndm/neighbour.d

Скрипти /opt/etc/ndm/neighbour.d викликаються для певних мережевих подій сусідів. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

Унікальний ID сусіда з моменту завантаження

$action

Дія сусіда (new, del або update)

$update

Тип оновлення (якщо є): ip6list для оновлення списку IPv6-адрес для сусіда, wireless для зміни типу носія (наприклад, роумінг між точками доступу), mac (якщо змінюється реальний MAC, наприклад, на повторювачах з MAT), dhcp (якщо оновлено інформацію DHCP) та none

$address

Сімейство адрес — ipv4 або ipv6

ndm/ifcreated.d

Скрипти /opt/etc/ndm/ifcreated.d викликаються, коли створюється інтерфейс NDM. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

ndm/ifdestroyed.d

Скрипти /opt/etc/ndm/ifdestroyed.d викликаються, коли інтерфейс NDM видаляється. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

ndm/ifipchanged.d

Скрипти /opt/etc/ndm/ifipchanged.d викликаються, коли змінюється IPv4-адреса або підмережа інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

$address

Нова IPv4-адреса

$mask

Нова маска мережі IPv4

$link

Поточний стан зв'язку інтерфейсу, може бути up або down

$connected

Поточний стан підключення інтерфейсу, може бути yes або no

$up

Поточний стан інтерфейсу, може бути up або down

$global

Поточний глобальний пріоритет інтерфейсу, може бути нульовим для неглобальних інтерфейсів та > 0, коли інтерфейс глобальний

ndm/ifip6changed.d (з версії 4.0)

Скрипти /opt/etc/ndm/ifip6changed.d викликаються, коли змінюється IPv6-адреса або підмережа інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

$address

IPv6-адреса

$mask

Маска мережі IPv6

$link

Поточний стан зв'язку інтерфейсу, може бути up або down

$connected

Поточний стан підключення інтерфейсу, може бути yes або no

$up

Поточний стан інтерфейсу, може бути up або down

$action

Поточна дія зміни, може бути add або delete

$global

Поточний глобальний пріоритет інтерфейсу, може бути нульовим для неглобальних інтерфейсів та > 0, коли інтерфейс глобальний

ndm/ifstatechanged.d (застаріло з версії 4.0, збережено лише для зворотної сумісності)

Скрипти /opt/etc/ndm/ifstatechanged.d викликаються, коли змінюється стан інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

$link

Поточний стан зв'язку інтерфейсу, може бути up або down

$connected

Поточний стан підключення інтерфейсу, може бути yes або no

$up

Поточний стан інтерфейсу, може бути up або down

$change

Джерело змін, може бути link, connected, up або config

ndm/iflayerchanged.d (новий та основний з версії 4.0)

Скрипти /opt/etc/ndm/iflayerchanged.d викликаються, коли змінюється стан рівня інтерфейсу NDM. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$id

ID інтерфейсу NDM

$system_name

Специфічне для Linux ім'я інтерфейсу

$layer

Рівень інтерфейсу, може бути conf (адміністративний з конфігурації), link (ethernet L2 / PPP), ipv4 (отримано/втрачено доступ до IPv4), ipv6 (отримано/втрачено доступ до IPv6), ctrl (зміна стану 802.1x або WebCaller)

$level

Поточний стан рівня інтерфейсу, може бути running, detached (відключення USB), disabled, pending, running

ndm/sms.d

Скрипти /opt/etc/ndm/sms.d викликаються при отриманні SMS на інтерфейсі UsbQmi. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$interface_id

ID інтерфейсу NDM

$message_id

ID SMS

Фактичний вміст SMS можна отримати через ci/rci (команди ndmq / jq), використовуючи надані ID інтерфейсу та повідомлення.

ndm/pptp_vpn_up.d

Скрипти /opt/etc/ndm/pptp_vpn_up.d викликаються, коли користувач підключається до VPN-сервера PPTP. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$ndm_opkg_id

Ім'я користувача

$iface

Системний інтерфейс (зазвичай vpn*)

$remote

Зовнішня IPv4-адреса віддаленого вузла

$local

IPv4-адреса віддаленого вузла всередині тунелю

ndm/pptp_vpn_down.d

Скрипти /opt/etc/ndm/pptp_vpn_down.d викликаються, коли користувач відключається від VPN-сервера PPTP. Скрипти викликаються з першим параметром ($1) == hook.

Наступні змінні середовища визначені, щоб дозволити вам ідентифікувати деталі завдання.

Змінна

Опис

$ndm_opkg_id

Ім'я користувача

$iface

Системний інтерфейс (зазвичай sstp*)

$remote

Зовнішня IPv4-адреса віддаленого вузла

$local

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.

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

Змінна

Опис

$ndm_opkg_id

Ім'я користувача

$iface

Системний інтерфейс (зазвичай l2tp*)

$remote

Зовнішня IPv4-адреса віддаленого вузла

$local

IPv4-адреса віддаленого вузла всередині тунелю

ndm/vip_vpn_up.d

Скрипти /opt/etc/ndm/vip_vpn_up.d викликаються, коли користувач підключається до VPN-сервера віртуального IP. Скрипти викликаються з першим параметром($1) == hook.

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

Змінна

Опис

$ndm_opkg_id

Ім'я користувача

$remote

Зовнішня IPv4-адреса віддаленого вузла

$local

IPv4-адреса віддаленого вузла всередині тунелю

ndm/vip_vpn_down.d

Скрипти /opt/etc/ndm/vip_vpn_down.d викликаються, коли користувач відключається від VPN-сервера віртуального IP. Скрипти викликаються з першим параметром($1) == hook.

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

Змінна

Опис

$ndm_opkg_id

Ім'я користувача

$remote

Зовнішня IPv4-адреса віддаленого вузла

$local

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. Усі аргументи з оригінального виконання перехоплювача передаються як додаткові змінні середовища.

Змінна

Опис

$ndm_opkg_id

ID інтерфейсу NDMS, наприклад OpenVPN0

$ndm_opkg_argc

Кількість аргументів в оригінальному виклику перехоплювача

$ndm_opkg_arg_N

Значення аргументу N, де N — це число в межах [0..$ndm_opkg_argc]