Files
op-packages/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init
T

133 lines
4.8 KiB
Bash

#!/bin/sh
# Run once on every (re-)install/upgrade of luci-app-daede: migrate legacy
# config, drop stale files from the old luci-app-daed package, and seed the
# default dae form sections. The netns cleanup that used to be patched into
# daed's init from here now lives directly in daed's own stop_service().
set -e
# luci-app-daede owns its own LuCI menu and view path. Remove stale files from
# the official luci-app-daed package and earlier daede builds that reused
# /view/daed.
rm -f /usr/share/luci/menu.d/luci-app-daed.json
rm -f /usr/share/rpcd/acl.d/luci-app-daed.json
rm -rf /usr/share/luci-app-daed
rm -rf /www/luci-static/resources/view/daed
rm -f /usr/lib/lua/luci/i18n/daed.zh-cn.lmo
rm -f /tmp/luci-indexcache.* 2>/dev/null || true
rm -rf /tmp/luci-modulecache/* 2>/dev/null || true
if [ -f /etc/config/daed_luci ]; then
old_backend="$(uci -q get daed_luci.config.active_backend || true)"
if ! uci -q get daede.config >/dev/null 2>&1; then
touch /etc/config/daede
uci -q set daede.config=daede
case "$old_backend" in
dae|daed) uci -q set daede.config.active_backend="$old_backend" ;;
esac
uci -q commit daede
elif ! uci -q get daede.config.active_backend >/dev/null 2>&1; then
case "$old_backend" in
dae|daed)
uci -q set daede.config.active_backend="$old_backend"
uci -q commit daede
;;
esac
fi
rm -f /etc/config/daed_luci
fi
if ! uci -q get daede.config >/dev/null 2>&1; then
touch /etc/config/daede
uci -q set daede.config=daede
if [ -f /etc/init.d/daed ]; then
uci -q set daede.config.active_backend='daed'
else
uci -q set daede.config.active_backend='dae'
fi
uci -q commit daede
fi
# Remove --disable-timestamp from dae init so log lines carry timestamps
DAE_INIT="/etc/init.d/dae"
if [ -f "$DAE_INIT" ]; then
sed -i 's/--disable-timestamp//' "$DAE_INIT"
sed -i '/procd_append_param command *$/d' "$DAE_INIT"
sed -i 's|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray".*|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" TZ="$(uci -q get system.@system[0].zonename)"|' "$DAE_INIT"
fi
# dae expects geoip.dat / geosite.dat under /usr/share/dae/;
# v2ray-geoip installs them to /usr/share/v2ray/. Create symlinks.
if [ -f /usr/share/v2ray/geoip.dat ] && [ ! -f /usr/share/dae/geoip.dat ]; then
mkdir -p /usr/share/dae
ln -sf /usr/share/v2ray/geoip.dat /usr/share/dae/geoip.dat
fi
if [ -f /usr/share/v2ray/geosite.dat ] && [ ! -f /usr/share/dae/geosite.dat ]; then
mkdir -p /usr/share/dae
ln -sf /usr/share/v2ray/geosite.dat /usr/share/dae/geosite.dat
fi
if [ -f /usr/share/v2ray/geoip.dat ] && [ ! -f /usr/share/daed/geoip.dat ]; then
mkdir -p /usr/share/daed
ln -sf /usr/share/v2ray/geoip.dat /usr/share/daed/geoip.dat
fi
if [ -f /usr/share/v2ray/geosite.dat ] && [ ! -f /usr/share/daed/geosite.dat ]; then
mkdir -p /usr/share/daed
ln -sf /usr/share/v2ray/geosite.dat /usr/share/daed/geosite.dat
fi
# Seed default dae form sections (group/routing/dns) for the LuCI editor.
# Idempotent: only add what's missing. Lives in the `dae` UCI package,
# consumed by gen-dae-config.sh.
if [ -f /etc/config/dae ]; then
if ! uci -q get dae.config.lan_interface >/dev/null 2>&1; then
uci -q set dae.config.lan_interface='br-lan'
fi
if ! uci -q show dae | grep -q "=group$"; then
g="$(uci add dae group)"
uci -q set "dae.$g.name=proxy"
uci -q set "dae.$g.policy=min_moving_avg"
fi
if ! uci -q get dae.routing >/dev/null 2>&1; then
uci -q set dae.routing=routing
uci -q set dae.routing.private_direct=1
uci -q set dae.routing.cn_direct=1
uci -q set dae.routing.block_ads=0
uci -q set dae.routing.fallback=proxy
fi
if ! uci -q get dae.dns >/dev/null 2>&1; then
uci -q set dae.dns=dns
uci -q set dae.dns.cn_upstream='udp://dns.alidns.com:53'
uci -q set dae.dns.fallback_upstream='tcp+udp://dns.google:53'
uci -q set dae.dns.response_ttl='0'
fi
# Migrate legacy group filters to the unified source / name_filter fields,
# then drop the old keys so the form shows real, editable values (the old
# fields used to re-populate the new ones and looked un-deletable).
# `uci get` joins a list into one space-separated line; the unquoted $() word-
# splits it back into items. dae tags/keywords are whitespace-free, so this is
# the intended split (do NOT set IFS=newline here — it would merge the items).
i=0
while uci -q get "dae.@group[$i]" >/dev/null 2>&1; do
if [ -z "$(uci -q get dae.@group[$i].source)" ]; then
for v in $(uci -q get dae.@group[$i].filter_sub 2>/dev/null); do
uci -q add_list dae.@group[$i].source="$v"
done
fi
if [ -z "$(uci -q get dae.@group[$i].name_filter)" ]; then
for v in $(uci -q get dae.@group[$i].filter_node 2>/dev/null); do
uci -q add_list dae.@group[$i].name_filter="$v"
done
fi
uci -q delete dae.@group[$i].filter_sub 2>/dev/null
uci -q delete dae.@group[$i].filter_node 2>/dev/null
i=$((i+1))
done
uci -q commit dae
fi
exit 0
reload_service() {
restart
}