-
Couldn't load subscription status.
- Fork 4
Opkg Component
The opkg component must be installed on the target to use open packages.
The component will:
- add
opkgconfiguration commands, - mount a USB filesystem to
/opt, - inflate
*.ipkand*.tar.gzfiles from the/opt/installdirectory, - execute hook scripts.
The opkg disk command is used to specify the /opt filesystem. The filesystem can be identified by either UUID, or a volume label. For example,
(config)> opkg disk OPT_LABEL:
Opkg::Manager: Disk is set to: OPT_LABEL.
(config)> system configuration save
NTFS and EXT2/3 filesystems are supported. Once the opkg disk is configured and the storage is attached,
the opkg component will:
- Mount the
OPT_LABELfilesystem to/opt. - If the
/opt/installdirectory exists, inflate all/opt/install/*.ipkfiles to/opt. This unpack should be finished in 120 seconds or it will be finished by timeout. - Execute
/opt/etc/initrc.
Hook scripts are located in:
-
/opt/etc/initrc— default startup script (can be defined viaopkg initrccommand), -
/opt/etc/ndm/*.d/— event handlers.
Script directories and environment variables are described in specific sections below.
PATH and LD_LIBRARY_PATH variables are predefined for selection of executables and dynamic libraries from /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
The /opt prefix is always implied in the hook script shebang. That is, both #!/bin/sh and #!/opt/bin/sh will execute the /opt/bin/sh interpreter.
There's 24 seconds timeout on every script to be executed.
All hook scripts started in one queue, i.e. while /opt/etc/ndm/wan.d/01-one.sh is still running, no any other scripts will be started neither from /opt/etc/ndm/wan.d/ nor from /opt/etc/ndm/netfilter.d/.
Initialization script /opt/etc/initrc is executed after /opt is mounted. It can execute some other init scripts, such as /opt/etc/init.d/* to start background processes. If /opt/etc/initrc is missing, the opkg component will execute /opt/etc/init.d/* in alphabetic order.
For example, dropbear startup script might be:
#!/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
dropbearTo make it compatible with Sys-V like init systems, /opt/etc/initrc and /opt/etc/init.d scripts are called with the start command line argument. When the user wants to eject the /opt storage, /opt/etc/initrc is called with the stop argument.
/opt/etc/ndm/wan.d/ event scripts are executed once a new internet connection is available.
| 1st Parameter | Description |
|---|---|
start |
Internet connection established |
stop |
Internet connection terminated |
| Variable | Description |
|---|---|
$interface |
WAN interface, such as ppp0
|
$address |
interface IP address |
$mask |
interface subnet mask |
$gateway |
WAN gateway IP address |
When the internet connection is down the wan.d scripts are executed with all above variables undefined.
If the internet connection has been established before mounting /opt the wan.d scripts are executed right after initrc.
/opt/etc/ndm/user.d scripts are executed when /etc/passwd and /etc/group are refreshed by the core system. Add scripts to user.d if you need to modify /etc/passwd or /etc/group. Otherwise, any changes to these files will be overwritten.
| Variable | Description |
|---|---|
$user |
user name with OptWare access, if added through the core system |
When a user is deleted the user.d scripts are executed with undefined $user.
For example, you can create home directories using the user.d hook as follows:
#!/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/opt/etc/ndm/netfilter.d scripts are executed when the system rewrites a netfilter table. The netfilter.d hooks can modify the table using iptables. The $table and $type variables should be checked to prevent rule duplicates.
| Variable | Description |
|---|---|
$type |
netfilter protocol, such as iptables for IPv4 or ip6tables for IPv6 |
$table |
netfilter table, such as filter, nat or mangle
|
For example, you can add some mangle rules as follows:
#!/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/opt/etc/ndm/usb.d scripts are executed when a USB dongle is attached or detached.
| 1st Parameter | Description |
|---|---|
start |
USB device attached |
stop |
USB device detached |
The following environment variables are defined to let you identify the dongle.
| Variable | Description | Example |
|---|---|---|
$usb_device |
Path to the /proc/bus/usb device |
/proc/bus/usb/002/001 |
$usb_devname |
Name of device in /proc/bus/usb
|
bus/usb/002/001 |
$usb_devpath |
Path in sysfs | /devices/platform/xhci-hcd/usb2 |
$usb_model |
USB model ID | 0003 |
$usb_port |
USB port number | 2 |
$usb_vendor |
USB vendor ID | 1d6b |
Any device connected before execution of Opkg init script will trigger this callback scripts scheduled to be run at the execution of Opkg init script.
/opt/etc/ndm/fs.d scripts are called when filesystem is mounted or preparing to be unmounted or unexpectedly ejected.
| 1st Parameter | Description |
|---|---|
start |
filesystem is mounted |
stop |
filesystem is preparing to be unmounted or unexpectedly ejected |
Filesystem type can be any of: VFAT, EXFAT, NTFS, EXT2, EXT3, EXT4 or HFSP.
| Variable | Description | Example |
|---|---|---|
$type |
Filesystem type | EXT2 |
$name |
Filesystem ID | 583a7335-6ef8-460b-a4c1-43a2e5c70e71: |
$label |
Filesystem / partition label | SecondPart |
$directory |
Filesystem mount directory (absolute path) | /tmp/mnt/SecondPart |
Any filesystem mounted before execution of Opkg init script will trigger this callback scripts scheduled to be run at the execution of Opkg init script.
/opt/etc/ndm/time.d scripts are called when the system time is changed (synchronized via NTP).
/opt/etc/ndm/button.d scripts are called when Fn, and/or WPS button(s) has been pressed.
| Variable | Description | Example |
|---|---|---|
$button |
Which button has been pressed | WLAN |
$action |
Type of click |
click, double-click or hold
|
You have to configure some details from web interface first.
/opt/etc/ndm/schedule.d scripts are called with schedule events (if schedules defined via CLI).
| 1st Parameter | Description |
|---|---|
start |
start of scheduled task |
stop |
end of scheduled task |
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$schedule |
name of schedule |
$elapsed |
time (in seconds) taken for action |
/opt/etc/ndm/neighbour.d scripts are called with certain network neighbor events. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
unique ID of neighbour since boot |
$action |
neighbour action(new, del or update) |
$update |
type of update (if any): ip6list for updating list of IPv6 addresses per neighbour, wireless for changing media type (e. g. roaming between access-points), mac (if real MAC is changed, e. g. on repeaters with MAT), dhcp (if DHCP info was updated) and none
|
$address |
address family - ipv4 or ipv6
|
/opt/etc/ndm/ifcreated.d scripts are called when NDM interface is created. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
/opt/etc/ndm/ifdestroyed.d scripts are called when NDM interface is removed. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
/opt/etc/ndm/ifipchanged.d scripts are called when IPv4 address or subnet of NDM interface is changed. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
$address |
New IPv4 address |
$mask |
New IPv4 network mask |
$link |
Interface current link status, can be up or down
|
$connected |
Interface current connection status, can be yes or no
|
$up |
Interface current status, can be up or down
|
$global |
Interface current global priority, can be zero for non-global interfaces and > 0 when interface is global |
/opt/etc/ndm/ifip6changed.d scripts are called when IPv6 address or subnet of NDM interface is changed. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
$address |
IPv6 address |
$mask |
IPv6 network mask |
$link |
Interface current link status, can be up or down
|
$connected |
Interface current connection status, can be yes or no
|
$up |
Interface current status, can be up or down
|
$action |
Current change action, can be add or delete
|
$global |
Interface current global priority, can be zero for non-global interfaces and > 0 when interface is global |
/opt/etc/ndm/ifstatechanged.d scripts are called when status of NDM interface is changed. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
$link |
Interface current link status, can be up or down
|
$connected |
Interface current connection status, can be yes or no
|
$up |
Interface current status, can be up or down
|
$change |
Source of changes, can be link, connected, up or config
|
/opt/etc/ndm/iflayerchanged.d scripts are called when status of NDM interface layer state is changed. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$id |
NDM interface ID |
$system_name |
Linux-specific interface name |
$layer |
Interface layer, can be conf (administrative from config), link (ethernet L2 / PPP), ipv4 (got/lost IPv4 access), ipv6 (got/lost IPv6 access), ctrl (802.1x or WebCaller status change) |
$level |
Interface layer current status, can be running, detached (USB disconnect), disabled, pending, running
|
/opt/etc/ndm/sms.d scripts are called when SMS on UsbQmi interface is received. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$interface_id |
NDM interface ID |
$message_id |
SMS ID |
Actual content of SMS can be retrieved via ci/rci (ndmq / jq commands) using supplied interface and message IDs.
/opt/etc/ndm/pptp_vpn_up.d scripts are called when user is connected to PPTP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically vpn*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/pptp_vpn_down.d scripts are called when user is disconnected from PPTP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically vpn*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/sstp_vpn_up.d scripts are called when user is connected to SSTP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically sstp*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/sstp_vpn_down.d scripts are called when user is disconnected from SSTP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically sstp*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/l2tp_ipsec_vpn_up.d scripts are called when user is connected to L2TP/IPsec VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically l2tp*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/l2tp_ipsec_vpn_down.d scripts are called when user is disconnected from L2TP/IPsec VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$iface |
System interface (typically l2tp*) |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/vip_vpn_up.d scripts are called when user is connected to Virtual IP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/vip_vpn_down.d scripts are called when user is disconnected from Virtual IP VPN server. Scripts are invoked with first parameter($1) == hook.
The following environment variables are defined to let you identify the task details.
| Variable | Description |
|---|---|
$ndm_opkg_id |
User name |
$remote |
External IPv4 address of remote peer |
$local |
IPv4 address of remote peer inside tunnel |
/opt/etc/ndm/openvpn-*.d/ scripts are called when OpenVPN in NDMS executes hook script (2.10+, only when ndm-mod-openvpn is installed and configured).
List of scripts:
- /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/
For meanings of scripts one should consult with official OpenVPN man page (section SCRIPTING AND ENVIRONMENTAL VARIABLES)
All environmental variables set by OpenVPN itself (described here) are preserved as is and passed to opkg hook scripts. Scripts are invoked with first parameter($1) == hook. All arguments from original hook execution are passed as additional environment variables.
| Variable | Description |
|---|---|
$ndm_opkg_id |
NDMS ID of interface, for example OpenVPN0
|
$ndm_opkg_argc |
count of arguments in original hook invocation |
$ndm_opkg_arg_N |
value of argument N, where N is a number within [0..$ndm_opkg_argc] |