KoolProxy规则更新脚本免刷固件更新方法[2017-04-01]

20170417 之后的固件不需要这些。 固件会自动更新脚本。
鉴于KoolProxy规则存放站点不太稳定,在我mod的padavan固件的上一个版本,我就把KoolProxy规则更新脚本 设计成可以方便地在WEB UI界面修改和更新。这样,一旦Kp的更新规则文件发生变化,或者规则存放站点发生变化 的情况下,都可以不需要更新固件,很快及时修复。
那么存放的位置很自然是在storage, 具体位置是/etc/storage/koolproxy_rules_update.sh
首先,我们更新一下kp更新站点的配置(这条语句只需要执行一次,以后不需要执行):
nvram set koolproxy_update_server=http://koolshare.b0.upaiyun.com/rules
然后就是更新脚本了。 这次kp规则站点又恢复下载了,我制作了新版本的脚本方便大家更新规则,脚本(此脚本将在下次固件更新时内置)全部内容如下:
把KP_EXTRA_RULE_CNT=0
的 0 改成 1 ,可以启用 koolproxy_wp.txt 扩展规则. 同时,我在写这个脚本的时候就考虑了其它规则的更新,
假如你还有一个规则放在 http://fooo.com/test/kp/other_rules.txt
, 只需要在 # ------- END EXTRA RULES -------
前加上:
KP_EXTRA_RULE_1=http://fooo.com/test/kp/other_rules.txt
相应的, KP_EXTRA_RULE_CNT=1
就要变成 KP_EXTRA_RULE_CNT=2
,即这后面的数字是附加规则的数量.
#!/bin/sh
# version: 1.0.5
# author: 荒野无灯
# date: 2017-04-01
# url: http://p4davan.80x86.io
# made for my padavan mod firmware.
# ref: https://github.com/koolproxy/merlin-koolproxy/blob/master/koolproxy/scripts/koolproxy_rule_update.sh
# nvram set koolproxy_update_server=http://entware.mirrors.ligux.com/koolproxy
# ------- START EXTRA RULES -------
# set it to the actual rule number to enable it
KP_EXTRA_RULE_CNT=0
KP_EXTRA_RULE_0=http://koolshare.b0.upaiyun.com/wp/koolproxy_wp.txt
# ------- END EXTRA RULES -------
KP_VERSION_FILE=/etc/storage/koolproxy/data/version
KP_DATA_DIR=/etc/storage/koolproxy/data
KP_STORE_DIR=/etc/storage/koolproxy/rules_store
KP_LOG_LEVEL=`nvram get koolproxy_log_level`
KOOLPROXY_UPDATE_SERVER=`nvram get koolproxy_update_server`
TMP_VERSION_FILE=/tmp/version
TMP_KP_FILE=/tmp/kp.txt
func_my_logger() {
#log level (0:DEBUG, 1:INFO, 2:AD, 3:WARNING, 4:ERROR), default value is ERROR
if [ "$KP_LOG_LEVEL" -lt "2" ]; then
logger -t "[koolproxy]" "$1"
fi
}
func_match_date() {
local rulename=$1
head -n8 ${TMP_KP_FILE} | grep $rulename | grep -Eo '[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}'
}
#generate version file
func_generate_tmp_ver() {
rm -f ${TMP_KP_FILE}
wget -q -O${TMP_KP_FILE} ${KOOLPROXY_UPDATE_SERVER}/koolproxy.txt
func_match_date rules > ${TMP_VERSION_FILE} && func_match_date video >> ${TMP_VERSION_FILE}
}
func_generate_extra_tmp_ver() {
rm -f ${TMP_KP_FILE}
wget -q -O${TMP_KP_FILE} ${KOOLPROXY_UPDATE_SERVER}/add_rules.txt
func_match_date update >> ${TMP_VERSION_FILE}
}
func_update_koolproxy_rules() {
local rule_type=$1
local rule_basename=$2
if [ -s "$TMP_VERSION_FILE" ]; then
func_my_logger " ========== 在线版本检测 =========="
# 检查规则更新
case "$rule_type" in
"static")
rules_date_local=`cat ${KP_STORE_DIR}/version| awk 'NR==1{print}'`
rules_date_web=`cat ${TMP_VERSION_FILE}| awk 'NR==1{print}'`
;;
"video")
rules_date_local=`cat ${KP_STORE_DIR}/version| awk 'NR==2{print}'`
rules_date_web=`cat ${TMP_VERSION_FILE}| awk 'NR==2{print}'`
;;
"add_rules")
rules_date_local=`cat ${KP_STORE_DIR}/version| awk 'NR==3{print}'`
rules_date_web=`cat ${TMP_VERSION_FILE}| awk 'NR==3{print}'`
;;
esac
rules_date_local_ts=$(date -d "$rules_date_local" +%s)
rules_date_web_ts=$(date -d "$rules_date_web" +%s)
if [ "$rules_date_web_ts"== "" ]; then
func_my_logger " $rule_type 规则更新失败,无法获取网络版本号!"
exit 1
fi
#fix old version file
if [ "$rules_date_local_ts" == "" ]; then
rules_date_local_ts=0
fi
if [ "$rules_date_web_ts" -gt "$rules_date_local_ts" ];then
func_my_logger " $rule_type 规则成功检测到更新,开始更新 $rule_type 规则!"
rm -rf /tmp/${rule_basename}
wget -q -O/tmp/${rule_basename} ${KOOLPROXY_UPDATE_SERVER}/${rule_basename}
if [ "$?" == "0" ]; then
cp -f /tmp/${rule_basename} ${KP_STORE_DIR}
func_my_logger " $rule_type 规则更新成功!"
rules_nu_web=`cat /tmp/${rule_basename} | grep -v ! | wc -l`
rm -rf /tmp/${rule_basename}
func_my_logger " ========== $rule_type 规则 =========="
func_my_logger " 本地 $rule_type 规则日期:$rules_date_local"
func_my_logger " ----------------------------------"
func_my_logger " 在线 $rule_type 规则日期:$rules_date_web"
func_my_logger " ----------------------------------"
else
func_my_logger " $rule_type 规则下载失败! 请检查你的网络!"
fi
else
func_my_logger " ========== $rule_type 规则 =========="
func_my_logger " 本地 $rule_type 规则日期:$rules_date_local"
func_my_logger " ----------------------------------"
func_my_logger " 在线 $rule_type 规则日期:$rules_date_web"
func_my_logger " ----------------------------------"
func_my_logger " $rule_type 规则版本未变化,不应用更新!"
fi
else
func_my_logger " 检测在线版本号错误! 请检查你的网络!"
fi
}
func_update_nvram() {
mv -f ${TMP_VERSION_FILE} ${KP_STORE_DIR}
nvram set koolproxy_rules_last_update="`cat ${KP_STORE_DIR}/version|awk 'NR==1{print}'`"
nvram set koolproxy_rules_nu_last_update="`cat ${KP_STORE_DIR}/koolproxy.txt | grep -v ! | wc -l`"
nvram set koolproxy_video_last_update="`cat ${KP_STORE_DIR}/version|awk 'NR==2{print}'`"
}
func_fix_rule_link() {
local filename=$1
test -L ${KP_DATA_DIR}/$filename || ln -sf ${KP_STORE_DIR}/$filename ${KP_DATA_DIR}
}
func_clean() {
rm -f ${TMP_VERSION_FILE}
rm -f ${TMP_KP_FILE}
}
func_update_extra_rules() {
if [ "$KP_EXTRA_RULE_CNT" -gt 0 ]; then
func_my_logger " ========== extra rules detected. start update... ========== "
local rule_num_bound=$(($KP_EXTRA_RULE_CNT-1))
for i in $(seq 0 1 $rule_num_bound)
do
eval cur_extr_rule_url="\$KP_EXTRA_RULE_$i"
base_filename=${cur_extr_rule_url##*/}
func_my_logger "trying to update extra rule $i [$cur_extr_rule_url]."
wget -q -O/tmp/kp_extr_tmp_rule_$i ${cur_extr_rule_url}
newfile_md5sum=$(md5sum /tmp/kp_extr_tmp_rule_$i | cut -d ' ' -f 1)
oldfile_md5sum=$(md5sum ${KP_DATA_DIR}/${base_filename} | cut -d ' ' -f 1)
if [ "$newfile_md5sum" != "$oldfile_md5sum" ] || [ "$newfile_md5sum" == "" ]; then
cp -f /tmp/kp_extr_tmp_rule_$i ${KP_DATA_DIR}/${base_filename}
func_my_logger "update succ! extra rule $i [$base_filename]."
else
func_my_logger "file is up to date! extra rule $i [$base_filename]."
fi
done
func_my_logger " ========== extra rules update done. ========== "
else
func_my_logger " ========== extra rules is disabled. ========== "
fi
}
func_generate_tmp_ver
func_generate_extra_tmp_ver
# do update
func_update_koolproxy_rules static koolproxy.txt
func_update_koolproxy_rules video 1.dat
func_update_koolproxy_rules add_rules add_rules.txt
func_update_nvram
func_fix_rule_link add_rules.txt
func_clean
func_update_extra_rules
将以上脚本内容粘贴至 Rule Update Script 框中,如下图示:
然后 点击 Apply 之后就可以看到规则更新到最新版了:
如果将Log Level设置成 DEBUG 或 INFO级别,你还会看到详细的更新过程:
--EOF
All Comments (7)