KoolProxy规则更新脚本免刷固件更新方法[2017-04-01] » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

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

Tagged in :

All Comments (7)
Gravatar image
Gravatar image
jacksun
老师,使用该固件,koolproxy插件开启后,使用正常。但选择单独使用视频广告过滤后,视频广告无法过滤。只有同时使用网页广告过滤和视频广告过滤,广告过滤才正常。老师,能单独使用视频广告过滤吗?谢谢!
Gravatar image
荒野无灯
我测试过,单独开启video 过滤,正常。 确保你升级到了最新版。
Gravatar image
Chandler
h大,我从恩山一路找到你的博客就想求教您一个问题 k2 固件里面的l2tp共享密钥怎么设置? 十分感谢
Gravatar image
荒野无灯
k2 UI界面不支持设置 l2tp的共享密钥以及不支持ipsec. 如果要做这个,需要启用strongswan. (固件已有支持,但是没有UI设置)
Gravatar image
hqhlwz
如何 在K2路由中導入腳本呢?
Gravatar image
jj24
大神,无法更新了,可能是因为网站的新规则文件中的首行变成了“!x -----[KoolProxy Plus 3.3.4]”,所以每次检测版本都显示'Plus 3.3.4],导致无法更新规则。
Gravatar image
jj24
1.0.2新脚本可正常更新