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 всегда подразумевается в шебанге хука. То есть, как #!/bin/sh, так и #!/opt/bin/sh будут запускать интерпретатор /opt/bin/sh.

Для каждого выполняемого скрипта установлен 24-секундный тайм-аут.

Все хук-скрипты запускаются в одной очереди, т. е. пока /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 следует проверять, чтобы избежать дублирования правил.

Переменная

Описание

$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

Идентификатор модели USB

0003

$usb_port

Номер порта USB

2

$usb_vendor

Идентификатор производителя USB

1d6b

Любое устройство, подключенное до запуска скрипта OPKG init, запустит эти скрипты обратного вызова, запланированные для запуска при выполнении скрипта OPKG init.

ndm/fs.d

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

1-й параметр

Описание

start

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

stop

Файловая система готовится к размонтированию или незапланированно извлечена

Тип файловой системы может быть любым из следующих: VFAT, EXFAT, NTFS, EXT2, EXT3, EXT4 или HFSP.

Переменная

Описание

Пример

$type

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

EXT2

$name

Идентификатор файловой системы

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

$label

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

SecondPart

$directory

Каталог монтирования файловой системы (абсолютный путь)

/tmp/mnt/SecondPart

Любая файловая система, смонтированная до выполнения скрипта OPKG init, запустит эти скрипты обратного вызова, запланированные для запуска при выполнении скрипта OPKG init.

ndm/time.d

Скрипты /opt/etc/ndm/time.d вызываются при изменении системного времени (синхронизация через NTP).

ndm/button.d

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

Переменная

Описание

Пример

$button

Какая кнопка была нажата

WLAN

$action

Тип нажатия

click, double-click или hold

Сначала необходимо настроить некоторые параметры в веб-конфигураторе.

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

Уникальный идентификатор соседствующего устройства с момента загрузки

$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

Идентификатор интерфейса NDM

$system_name

Обозначение интерфейса Linux

ndm/ifdestroyed.d

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$id

Идентификатор интерфейса NDM

$system_name

Обозначение интерфейса Linux

ndm/ifipchanged.d

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$id

Идентификатор интерфейса NDM

$system_name

Обозначение интерфейса Linux

$address

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

$mask

Новая маска сети IPv4

$link

Текущее состояние соединения интерфейса, может быть up или down

$connected

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

$up

Текущее состояние интерфейса, может быть up или down

$global

Текущий глобальный приоритет интерфейса, может быть равен нулю для неглобальных интерфейсов и > 0, если интерфейс является глобальным (global)

ndm/ifip6changed.d (since 4.0)

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$id

Идентификатор интерфейса NDM

$system_name

Обозначение интерфейса Linux

$address

Адрес IPv6

$mask

Маска сети IPv6

$link

Текущее состояние соединения интерфейса, может быть up или down

$connected

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

$up

Текущее состояние интерфейса, может быть up или down

$action

Текущее действия по изменению, может быть add или delete

$global

Текущий глобальный приоритет интерфейса, может быть равен нулю для неглобальных интерфейсов и > 0, если интерфейс является глобальным (global)

ndm/ifstatechanged.d (устарело с версии 4.0, сохраняется только для обратной совместимости)

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$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

Идентификатор интерфейса 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

Идентификатор интерфейса NDM

$message_id

Идентификатор SMS

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

ndm/pptp_vpn_up.d

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$ndm_opkg_id

Имя пользователя

$iface

Системный интерфейс (обычно vpn*)

$remote

Внешний IPv4-адрес удаленного узла

$local

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

ndm/pptp_vpn_down.d

Скрипты /opt/etc/ndm/pptp_vpn_down.d вызываются, когда пользователь отключается от сервера PPTP VPN. Скрипты вызываются с первым параметром ($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

Системный интерфейс (обычно lt2p*)

$remote

Внешний IPv4-адрес удаленного узла

$local

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

ndm/vip_vpn_up.d

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

Следующие переменные среды определены для того, чтобы вы могли идентифицировать детали задачи.

Переменная

Описание

$ndm_opkg_id

Имя пользователя

$remote

Внешний IPv4-адрес удаленного узла

$local

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

ndm/vip_vpn_down.d

Скрипты /opt/etc/ndm/vip_vpn_down.d вызываются, когда пользователь отключается от сервера Virtual IP VPN. Скрипты вызываются с первым параметром ($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

Идентификатор интерфейса NDMS, например, OpenVPN0

$ndm_opkg_argc

Количество аргументов в исходном вызове хука

$ndm_opkg_arg_N

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