Files
openwrt-packages/multimedia/tvheadend/files/tvheadend.init
Marius Dinu ea07162ee5 tvheadend: cut subnet from lan IP reported by uci, fix bug #26681
Unannounced modifications (OpenWrt PR 13780) in uci network.lan.ipaddr broke tvheadend init script.
This commit updates the init script to cut the subnet from the ip address reported by uci.

Bug report: #26681

Reported-by: @DonKult
Tested-by: @DonKult
Signed-off-by: Marius Dinu <m95d+git@psihoexpert.ro>
2025-06-07 20:26:47 +02:00

92 lines
3.5 KiB
Bash

#!/bin/sh /etc/rc.common
START=99
STOP=00
USE_PROCD=1
PROG=/usr/bin/tvheadend
TEMP_CONFIG=/tmp/tvheadend
PERSISTENT_CONFIG=/etc/tvheadend
# If you change the user, update the owner of tvheadend configuration directory and files!
# If you change the group, update USB hotplug script for DVB devices in /dev/hotplug.d/usb/
# otherwise, tvheadend won't have permissions to open newly connected tuners!
# Also update all other packages that use the dvb group.
TVH_USER=tvheadend
TVH_GROUP=dvb
execute_first_run() {
# $1 is the config dir. Default: /etc/tvheadend
mkdir -p "$1"
chown -R $TVH_USER "$1"
# This should create a new configuration including an admin account with no name and no password,
# but it aborts (-A) without saving it:
# "$PROG" -c "$1" -B -C -A -u $TVH_USER -g $TVH_GROUP >/dev/null 2>&1
# Instead, run it for 10s then kill it:
"$PROG" -c "$1" -B -C -u $TVH_USER -g $TVH_GROUP & TVH_PID=$! ; sleep 10 ; kill $TVH_PID ; sleep 2
}
ensure_config_exists() {
local config_path
config_load tvheadend
config_get config_path service config_path
if [ -z "$config_path" ]; then
[ -d "$PERSISTENT_CONFIG" ] || execute_first_run "$PERSISTENT_CONFIG"
else
# if the configuration directory is empty, empty config with grant-all ACL is created
[ -d "$config_path" ] && [ "$(ls -A $config_path)" ] || execute_first_run "$config_path"
fi
# if use_temp_epgdb is enabled (default), most of the config is put to config_path
# (or /etc/config), except for epgdb.v3, which grows quite large and is write-heavy,
# so it's put into volatile tmpfs
# epgdb.v3 is created and symlinked to main config dir upon each start (if it doesn't exist)
config_get_bool use_temp_epgdb service use_temp_epgdb 1
if [ "$use_temp_epgdb" == "1" ]; then
TEMP_EPG="${TEMP_CONFIG}/epgdb.v3"
[ ! -f "$TEMP_EPG" ] && mkdir -p "$TEMP_CONFIG" && touch "$TEMP_EPG" && chmod 755 "$TEMP_CONFIG" && chmod 644 "$TEMP_EPG" && chown -R $TVH_USER "$TEMP_CONFIG"
[ -z "$config_path" ] && config_path="$PERSISTENT_CONFIG"
ln -sf "$TEMP_EPG" "${config_path}/epgdb.v3"
fi
}
load_uci_config() {
config_load tvheadend
config_get config_path service config_path "$PERSISTENT_CONFIG"
[ -n "$config_path" ] && procd_append_param command -c "$config_path"
config_get_bool nosyslog service nosyslog 0
[ "$nosyslog" -eq 1 ] && procd_append_param command --nosyslog
config_get_bool ipv6 server ipv6 0
[ "$ipv6" -eq 1 ] && procd_append_param command --ipv6
config_get bindaddr server bindaddr
[ -z "$bindaddr" ] && bindaddr=$(uci get network.lan.ipaddr | cut -d / -f 1)
[ -n "$bindaddr" ] && procd_append_param command --bindaddr "$bindaddr"
config_get http_port server http_port
[ -n "$http_port" ] && procd_append_param command --http_port "$http_port"
config_get http_root server http_root
[ -n "$http_root" ] && procd_append_param command --http_root "$http_root"
config_get htsp_port server htsp_port
[ -n "$htsp_port" ] && procd_append_param command --htsp_port "$htsp_port"
config_get htsp_port2 server htsp_port2
[ -n "$htsp_port2" ] && procd_append_param command --htsp_port "$htsp_port2"
config_get xspf server xspf 0
[ "$xspf" -eq 1 ] && procd_append_param command --xspf
config_get noacl server noacl 0
[ "$noacl" -eq 1 ] && procd_append_param command --noacl
}
start_service() {
ensure_config_exists
procd_open_instance
procd_set_param file /etc/config/tvheadend
chgrp -R $TVH_GROUP /dev/dvb/*
chmod -R g+rwX /dev/dvb/*
procd_set_param command "$PROG" -B -u $TVH_USER -g $TVH_GROUP
load_uci_config
procd_close_instance
}