KoolShare

 找回密码
 立即注册
搜索
楼主: Jack-

[精品存档] 华硕路由器官方固件开机自动运行脚本方法

  [复制链接]

6

主题

42

帖子

121

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
108
魔法值
0
注册时间
2016-7-1
发表于 2018-1-26 13:19:24 | 显示全部楼层
帖子写得相当用心,大致分为五个部分:
一、为什么要自动运行
二、为实现这功能参考了哪些帖子,请教哪些大神
三、学习并修改命令及参数
四、最终实现自己脚本完美运行的目的
五、给出自己脚本的模板让坛友参考

我的路由是华硕RT-AC88U,需要有个官方固件开机自动运行多拨的脚本,在论坛里有个多拨的脚本,感觉直接复制套用开机自动运行模板应该不行。
本人初次涉及脚本,典型小白一枚。楼主是否能帮忙修改下多拨脚本以适用开机自动运行?
多拨脚本链接在此:http://koolshare.cn/thread-123990-1-1.html

另复制此脚本代码如下:
#!/bin/sh
clear

check(){
a=`ifconfig | grep ppp[0-9] | awk 'END{print NR}'`
R_BOLD="\033[31m\033[1m"
G_BOLD="\033[32m\033[1m"
NORM="\033[0m"

if [ $a -ge "10" ];then
        k=" "
else
        k="  "
fi

s=" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"
z=" ┃                               ┃"
x=" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
l="┃"


if [ $a -le "1" ];then
     start
else
    echo "$s"
    echo "$z"
    echo -e  " $l$k 已经$G_BOLD $a $NORM拨,是否继续多拨?   $l"
    echo "$z"
echo -e " $l   直接$R_BOLD回车$NORM转到自动均衡模式    $l "
    echo "$z"
    echo "$x"
        read -p '请输入Y/N:' yn
    if echo "$yn" | grep -q '^[yY]\+$'; then
        start
    else
        addroute
    fi
fi

}

start(){
    echo "$s"
    echo " $l      梅林多拨脚本V1.1         $l"
    echo " $l      原作者:Archeb           $l"
    echo " $l         bbis 改进版           $l"
    echo "$x"
    read -p '请输入多拨数量:' num
    if echo "$num" | grep -q '^[0-9]\+$'; then
        duobo
    else
        echo "请确认您的输入无误,在检查后重新输入"
        clear
        start
    fi
}


duobo(){
echo -e "$G_BOLD***********************************************************$NORM"
    echo -e "已设定多拨数量为$R_BOLD $num $NORM"
    echo '正在复制文件...'
    i=0
    let num-=2 #下标为0,然后系统自带一个所以要-2
    #/usr/sbin/pppd file /tmp/ppp/options.wan0  #如果需要并发拨号,将第一个注释符#去掉
    while [ $i -le $num ]
    do
       cp /tmp/ppp/options.wan0 /jffs/options.duobo$i
       sed -i "s/linkname .*/linkname duobo$i/" /jffs/options.duobo$i
       echo -e "拨号进程$R_BOLD $i $NORM开始拨号..."
       /usr/sbin/pppd file /jffs/options.duobo$i
       let i+=1
    done
     
    let num+=1 #把系统那个加回去
    echo "等待拨号完毕..."
    while [ "`ifconfig | grep ppp$num`" == "" ]
    do
        ping 127.0.0.1 -c 3 > /dev/null
        done

addroute
}

addroute(){
a=`ifconfig | grep ppp[0-9] | awk 'END{print NR}'`
echo -e "$G_BOLD***********************************************************$NORM"
        echo "正在配置路由表..."
        ip route del default
        cmd="ip route add default"
i=1
    while [ $i -le $a ]
    do
        pppoe=`ifconfig | grep ppp[0-9] | awk '{print $1}'| sed -n "$i p"`
        ip=`ifconfig | grep -E 'ppp[0-9]|P-t-P' | awk '{print $3}' | grep P-t-P | head -$i | cut -d ':' -f 2 | tail -1`
        cmd="${cmd} nexthop via $ip dev $pppoe weight 1 "
        let i+=1
        done
        $cmd
        ip route flush cache
addiptables
}

addiptables(){
echo "添加路由完毕,开始配置防火墙NAT..."
iptables -t nat -F POSTROUTING
subnet=`ifconfig | grep -A 1 'br' | tail -1 | awk '{print $2}' | cut -d ':' -f 2`
i=1
    while [ $i -le $a ]
    do
        pppoe=`ifconfig | grep ppp[0-9] | awk '{print $1}'| sed -n "$i p"`
        iptables -t nat -A POSTROUTING -s $subnet/24 -o $pppoe -j MASQUERADE
        let i+=1
        done
        iptables -t nat -A POSTROUTING -s $subnet/24 -o br0 -j MASQUERADE
        final

}

final(){
        echo -e "多拨脚本运行完毕,适配$G_BOLD『 `ifconfig | grep ppp[0-9] | awk 'END{print NR}'` 』$NORM拨叠加,请打开测速网站测试"
        echo -e "查看多拨是否均衡命令:$R_BOLD iptables -t nat -L POSTROUTING -nv $NORM"
        echo  
        iptables -t nat -L POSTROUTING -nv
        echo -e "$G_BOLD***********************************************************$NORM"
        echo -1 > /proc/sys/net/ipv4/rt_cache_rebuild_count
}

check

点评

目前不需要开机自动运行此脚本了,原因1:是该脚本在我的7267版官固中执行一段时间后,所有LED灯全灭,虽然不影响上网。原因2:是多拨在每隔一段时间就会掉部分线程,需要定时执行脚本,但官固好像没法实现脚本的定   发表于 2018-2-2 11:12
可以实现,虽然我没有这方面的需求(动态 IP)但是我乐意帮你写一个开机启动脚本,然后你自己试试看。  发表于 2018-2-2 05:26

6

主题

42

帖子

121

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
108
魔法值
0
注册时间
2016-7-1
发表于 2018-2-2 11:12:07 | 显示全部楼层
江山 发表于 2018-1-26 13:19
帖子写得相当用心,大致分为五个部分:
一、为什么要自动运行
二、为实现这功能参考了哪些帖子,请教哪些大 ...

目前不需要开机自动运行此脚本了,原因1:是该脚本在我的7267版官固中执行一段时间后,所有LED灯全灭,虽然不影响上网。原因2:是多拨在每隔一段时间就会掉部分线程,需要定时执行脚本,但官固好像没法实现脚本的定时执行

点评

其实脚本已经写好了,我还是发出来吧:(  发表于 2018-2-2 16:39
掉线后没有办法重播i,除非加入个守护进程,但是这样会导致内存溢出  发表于 2018-2-2 16:39

12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-2 16:44:04 | 显示全部楼层
本帖最后由 Jack- 于 2018-2-2 09:45 编辑
江山 发表于 2018-1-26 06:19
帖子写得相当用心,大致分为五个部分:
一、为什么要自动运行
二、为实现这功能参考了哪些帖子,请教哪些大 ...

解压所有文件到U盘根目录(FAT32或NTFS格式).pdf (1.57 KB, 下载次数: 23)

点评

@bbis  发表于 2018-2-2 16:45

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-6 02:10:12 | 显示全部楼层
楼主您好,我的目的是自动执行单线复用的VLAN配置命令,把您的延迟代码后加入了robocfg命令,但反复尝试都不能成功。脚本格式和语句我确认了多次,应该没有问题。后来看到79楼@xiaolu坛友所说的,新版本的固件已经不能自动运行.asusrouter了,我的AC66U B1是最新版本的固件3.0.0.4.384_20308。但我是个小白,不知道还有哪里没做对,所以想跟您再确认一下,是否新版本已经不能用这个方法了呢?

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-6 02:18:29 | 显示全部楼层
xiaolu 发表于 2018-1-15 11:50
ac5300官方固件3.0.0.4.380_7743不能自动运行.asusrouter了,而是会判断你安装的pkg来选择运行脚本,直接放 ...

您好,非常感谢!用您的脚本成功运行了。还是想请教一下,这个方法是什么原理,.asusrouter文件和/lib目录下的那些代码都是pkg包必须的组成部分吗?会起到什么作用?谢谢

2

主题

58

帖子

335

积分

中级魔法师

Rank: 3Rank: 3

精华
0
门户文章
0
魔力币
320
魔法值
0
注册时间
2016-2-20
发表于 2018-2-6 12:40:51 | 显示全部楼层
本帖最后由 xiaolu 于 2018-2-6 12:43 编辑
fstyle 发表于 2018-2-6 02:18
您好,非常感谢!用您的脚本成功运行了。还是想请教一下,这个方法是什么原理,.asusrouter文件和/lib目 ...

/usr/sbin/下的app_init_run.sh app_check_folder.sh脚本会判断pkg配置(就是asusware.arm/lib/ipkg/info下的配置文件)是否存在,然后运行asusware.arm/etc/init.d/下的相关启动脚本,.asusrouter已经不会执行了。

点评

谢谢:)  发表于 2018-2-7 04:03

评分

1

查看全部评分

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-7 01:00:46 | 显示全部楼层
本帖最后由 fstyle 于 2018-2-7 01:24 编辑
xiaolu 发表于 2018-2-6 12:40
/usr/sbin/下的app_init_run.sh app_check_folder.sh脚本会判断pkg配置(就是asusware.arm/lib/ipkg/info下 ...

感谢您的指导,我cat了app_init_run.sh和app_check_folder.sh这两个文件,没有看懂代码的逻辑判断是什么意思,但是大概明白了为什么会执行/etc/init.d/下的文件,于是我根据您和楼主的思路对脚本进行了精简,只需要保留3个文件,在AC66U B1,固件版本3.0.0.4.384_20308上测试通过,成功实现了开机自动运行脚本。
这3个文件分别是
  1. \asusware.arm\.asusrouter
  2. \asusware.arm\etc\init.d\S50asusstartd
  3. \asusware.arm\lib\ipkg\info\asusstartd.control
复制代码
其中
1.    \asusware.arm\.asusrouter不会被执行,所以可以是空白文件(不能没有)

2.    \asusware.arm\etc\init.d\S50asusstartd是需要执行的脚本,我的是设置单线复用VLAN,代码为:
  1. #!/bin/sh
  2. robocfg vlans reset vlan 1 ports "0t 1 2 3 4 5t" vlan 2 ports "0t 5u"
  3. logger VLAN Configuration is COMPLETE!!!
复制代码
3.    \asusware.arm\lib\ipkg\info\asusstartd.control用途是让系统识别需要执行的脚本文件S50asusstartd,代码为:
  1. Enabled: yes
复制代码

虽然成功了,但感觉是瞎猫碰到死耗子,其中许多原理都不太清楚。其实这个方法与楼主是基本一致的,U盘中的\asusware.arm目录被链接到了/opt,并自动执行了其中的脚本文件,只是新版本固件下执行的是/opt/etc/init.d中的指定脚本而非.asusrouter。另外,在系统记录中发现,开机后这个脚本被执行了5次,sh /opt/S50asusstartd.1 start命令1次,sh /opt/S50asusstartd.1 firewall-start命令4次,实在不明白其中的奥妙。因为解决了一个问题有些兴奋,啰里啰唆写了一大堆,还是希望能和大家共同讨论进步吧。再次感谢楼主@Jack-和@xiaolu的帮助。

asusware.arm.rar.pdf

705 Bytes, 下载次数: 64

请去掉.pdf扩展名后打开

点评

谢谢,我已经通过 @xiaolu 回答知道原因  发表于 2018-2-7 04:03
能否方便透露下您的固件版本及设备型号,如果有条件,我想测试下为什么不会执行 .asusrouter 了,因为脚本在 .asusrouter 中是最靠谱的!  发表于 2018-2-7 03:53
多次执行容易引起内存泄漏,而且,一旦启动脚本挂载成功,只有恢复出厂设置才能彻底删除该启动项目(即使删除脚本,也会检查该目录下文件)  发表于 2018-2-7 03:49
其实从最开始 /etc/SXXname 就可以被执行,但是我也发现了,会被多次执行的问题,只要改用 .asusrouter 就没有这样事情,但这看来被新版固件去除了  发表于 2018-2-7 03:48
谢谢你的研究,已置顶到帖子第一页  发表于 2018-2-7 03:46

12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-7 04:33:26 | 显示全部楼层
本帖最后由 Jack- 于 2018-2-6 23:05 编辑
fstyle 发表于 2018-2-6 18:00
感谢您的指导,我cat了app_init_run.sh和app_check_folder.sh这两个文件,没有看懂代码的逻辑判断是什么意 ...

我有个方法让脚本不会重复运行,至少重复运行后不会发生内存泄漏

需要这样做
\asusware.arm\etc\init.d\S50asusstartd 中不写脚本,只写一个引导到另外一个脚本的命令,例如 \opt\test
然后 test 这个脚本加入一个获取路由器当前时间的命令,如果获取正确的时间则关闭脚本。如果不正确的例如 2015.1.1 0:00 则运行接下来的脚本。因为联网后会 NTP 同步时间,所以没有正确时间这个可以作为首次启动后的指标。
然后你的脚本随便写喽
需要注意一点,最好不要再添加新的 SXXname,而是将新的写在脚本在 test 脚本中,或者由 test 引导到其他脚本。
最终结果就是:开机后>运行 S50asusstartd > 运行 test > 运行你的脚本
而如果重复执行,就会这样:重复 > 运行 S50asusstartd > 运行 test > 结束

内存溢出实在可怕,这算是一个解决方案。
不过,以上我并不会写出来。

即使没有出现内存溢出,就像我之前写的添加 hosts 脚本一样,如果不断运行 hosts 文件会有多个重复的内容,然后会导致系统查询 DNS 时宕机、报错,其实这种事情之前真的发生过,虽然可以通过在修改 hosts 脚本前加上一个重置命令保证每次都是不重复的,但是不如上面我所说的检查机制这个方法更好。

谢谢,欢迎继续讨论,如果感兴趣的话。

参考资料:
  1. time=`uptime |awk -F up '{print $1}' |awk '{sub("^ *","");sub(" *$","");print}'`
  2. #获取路由器的时间
复制代码
http://koolshare.cn/thread-70241-1-1.html

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-7 23:50:42 | 显示全部楼层
本帖最后由 fstyle 于 2018-2-7 23:55 编辑
Jack- 发表于 2018-2-7 04:33
我有个方法让脚本不会重复运行,至少重复运行后不会发生内存泄漏

需要这样做

确实如您所说的,现在这种执行脚本的方式感觉上总是有点不太靠谱,尤其是反复执行这一点。但我没明白,为什么需要引导到另一个脚本文件呢?这和直接在\asusware.arm\etc\init.d\S50asusstartd中获取时间再加一个判断语句有什么不同?

另外,判断系统时间是否异常这个办法不适合我,因为单线复用需要配置好VLAN后才能正确拨号,在获取到NTP时间前已经执行了4次脚本了(详见以下记录)
  1. ...
  2. Feb 14 08:00:19 WAN Connection: Fail to connect with some issues.
  3. ...
  4. Feb 14 08:00:30 admin:  sh /opt/S50asusstartd.1 start
  5. Feb 14 08:00:30 admin: VLAN Configuration is COMPLETE!!!
  6. ...
  7. Feb 14 08:00:46 admin:  sh /opt/S50asusstartd.1 firewall-start
  8. Feb 14 08:00:46 admin: VLAN Configuration is COMPLETE!!!
  9. Feb 14 08:00:50 WAN Connection: WAN was restored.
  10. ...
  11. Feb 14 08:00:51 ntp: start NTP update
  12. ...
  13. Feb 14 08:00:53 admin:  sh /opt/S50asusstartd.1 firewall-start
  14. Feb 14 08:00:54 admin: VLAN Configuration is COMPLETE!!!
  15. ...
  16. Feb 14 08:00:58 admin:  sh /opt/S50asusstartd.1 firewall-start
  17. Feb 14 08:00:58 admin: VLAN Configuration is COMPLETE!!!
  18. ...
  19. Feb 14 08:01:04 ntp: start NTP update
  20. Feb 14 08:01:07 ntp: start NTP update
  21. Feb  7 22:56:39 rc_service: ntp 847:notify_rc restart_upnp
  22. ...
  23. Feb  7 22:57:06 admin:  sh /opt/S50asusstartd.1 firewall-start
  24. Feb  7 22:57:06 admin: VLAN Configuration is COMPLETE!!!
  25. ...
复制代码
我注意到您引用的参考资料中,uptime命令还可以获取开机时间,似乎用这个判断更合适,但该时间无法精确到秒,比较烦人,我想再研究一下还有什么更好的办法。实在不行就执行robocfg show,判断VLAN配置是否已经符合要求。我刚开始学习shell脚本,还得再琢磨。

12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-8 01:48:23 | 显示全部楼层
本帖最后由 Jack- 于 2018-2-7 19:27 编辑
fstyle 发表于 2018-2-7 16:50
确实如您所说的,现在这种执行脚本的方式感觉上总是有点不太靠谱,尤其是反复执行这一点。但我没明白,为 ...

在这方面,不得不承认我已经算是外行了。所以,我只能提供一些思路,我没办法给出答案。因此这也是一篇外行人写的探索性质的帖子。

之所以要用一个脚本引导到另外一个,是因为我认为形成一个树状结构有助于今后的扩展补充,和排错梳理。当然这一切只是一个外行人的疏浅看法。
还有一个目的是 /init.d/SXXXXX 目录下的脚本一旦执行过第一次,就会加入开机启动项目中,即使脚本文件已经删除,你仍能在系统日志中看到尝试启动这个脚本。只有重置才能删除这个启动项目。所以,只保留一个,我认为比较好,至少更容易删除:)

我记得最开始我是这样做的 /asusware.arm/etc/init.d/SXXXXX 目录下有个脚本引导到一个我在 /asusware.arm/xxxxx/目录下的所有脚本。当然后来我直接用 asusware.arm/.asusrouter 这个脚本引导到  /asusware.arm/xxxxx/目录下的所有脚本。

我再提供一个想法:
写一个脚本:向路由器内部 /tmp/ 目录生成一个 0 字节的文件,命名一个特别的文件名。然后检查是否存在这个文件,如果存在不执行脚本,如果不存在执行脚本且执行脚本完成后写入这个文件。
首次开机:执行检查脚本 > 执行命令脚本 > 写入检查文件 > 结束运行
重复运行:执行检查脚本 > 结束运行
这个思路是受到你提到的检查 VLAN 想到的,只不过检查 VLAN 可能不是很适用于其他人。
(之所以向 /tmp/ 目录写文件是因为,这个目录下的内容每次开机都会清空,0 字节是为了保护路由器的闪存读写次数)
部分命令是:
  1. # 在 tmp 目录创建 Imhere 文件
  2. touch /tmp/imhere

  3. # 查找 tmp 目录下是否有 Imhere 文件
  4. find /tmp -type f -name "imhere"
复制代码
希望这个点子可以帮到你:)

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-8 03:44:57 | 显示全部楼层
本帖最后由 fstyle 于 2018-2-8 03:49 编辑
Jack- 发表于 2018-2-8 01:48
在这方面,不得不承认我已经算是外行了。所以,我只能提供一些思路,我没办法给出答案。因此这也是一篇外 ...

脚本被永久加入了开机启动项目这件事还是比较让人担忧的,但为了达到需求也只能妥协了,而且我觉得重启路由器这招应该能应对大部分可能出现的问题了。对于重复执行的问题,您的主意非常棒,我也找到了解决方法,就是从开机时间下手。

我查到一篇博客《awk获取Linux运行时间》,文中写到:
对于Linux的运行时间,可以通过命令uptime来获取,但实际上的时间是记录在/proc/uptime这个文件里的,单位是秒,通过uptime命令获取到的是已经转换了为具体的运行时间。通过uptime获取运行时间的同时,还会打印出本地当前时间,以及CPU的负载,有时候进行监控或者其他需求的时候不需要这些东西,那可以直接从/proc/uptime里提取。

原来uptime命令也是读取了一个数据,既然知道了数据的位置,一切都好办了,我把我的脚本中加入了开机时间的判断,超过45秒后不再执行VLAN配置命令,同时也对robocfg show返回的数据进行了二次判断:
  1. #!/bin/sh
  2. tinfo=`cat /proc/uptime`
  3. stime=${tinfo%%.*}
  4. if [ $stime -le 45 ]; then
  5.      REresult=`robocfg show`
  6.      vstat=${REresult##*mac_hash}
  7.      vlanstat=`printf %s $vstat`
  8.      if [ $vlanstat != "1:vlan1:0t12345t2:vlan2:0t5" ]; then
  9.           robocfg vlans reset vlan 1 ports "0t 1 2 3 4 5t" vlan 2 ports "0t 5u"
  10.      fi
  11. fi
复制代码

我对于Shell脚本编程完全是新手,不会使用awk、sed等高级命令,只用了内置操作符进行了一些字符串判断。为了帮助其他人,我解释一下命令,大神们别笑话我。

第2行
  1. tinfo=`cat /proc/uptime`
复制代码
这个命令获取了/proc/uptime文件的内容,赋值给tinfo变量,示例如下:
  1. 862.94 1572.25
复制代码
只有两个数字,第一个就是开机时间,单位为秒。

第3行
  1. stime=${tinfo%%.*}
复制代码
使用字符串操作截取了tinfo字符串第一个小数点前的部分,也就是开机秒数的整数值,便于后续if语句的逻辑判断。


评分

1

查看全部评分

12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-8 05:23:15 | 显示全部楼层
本帖最后由 Jack- 于 2018-2-7 22:42 编辑
fstyle 发表于 2018-2-7 20:44
脚本被永久加入了开机启动项目这件事还是比较让人担忧的,但为了达到需求也只能妥协了,而且我觉得重启路 ...

您的这个脚本真的很棒!请原谅我几乎看不懂代码的含义:(

关于脚本永久启动项
脚本被加入永久启动项的问题通过引导来缓解是可行的,毕竟 /init.d/ 只有一个被加入永久启动项要比多个要好。但是最好的解决方法是不在 /init.d/ 目录下放脚本(我不知道您有没有试过在 asusstartd.control 文件中写入自己的脚本,如果能执行就好了!)

关于您的脚本
我认为时间方案可能还是不够精确,而写入 0 字节文件应该可以 100% 保证不会重复运行,而且不必参考时间因素(即使路由器花了很久才开机)

关于多次启动
对了,我想重复执行有没有可能和 USB 重复挂载有关系?因为我注意到我的路由器在开机时会 USB 指示灯会反复亮好几次。

一个请求
另外,您有没有使用 Radius 的需求?但是我一个人似乎搞不定这件事(在 USB 脚本上),这是教程:https://github.com/RMerl/asuswrt ... us2-through-Entware  如果您有意,也许我们可以一起试试看!

最后
其实原厂固件可玩性可不止于此。我再给一把钥匙:https://github.com/gygy/asus_factory_image 其中的开启原厂固件 JFFS2 和 安装 Entware 做完后,你的路由器比 Asus-Merlin 还要强大(因为 Asus-Merlin 没有预制 Entware)。当然,我不是很喜欢用路由器内的存储,因为担心寿命。我还会继续使用 USB 作为扩展存储目录。

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-8 16:46:58 | 显示全部楼层
Jack- 发表于 2018-2-8 05:23
您的这个脚本真的很棒!请原谅我几乎看不懂代码的含义:(

关于脚本永久启动项

哈哈,共同讨论进步吧,生命不息,折腾不止嘛。我写这个脚本完全是一边查着资料一边试出来,现学现卖的。幸亏临近过年没什么事,要在平时沉迷于折腾这些早被媳妇弄死了。
(1)\lib\ipkg\info\asusstartd.control似乎并不是一个脚本文件,而更像一个配置信息文件。如果在U盘上安装Download Master,这个目录下会出现数个.control文件,大致是这种格式:
  1. Package: XXXXXX
  2. Architecture: arm
  3. Priority: optional
  4. Section: net
  5. Version: 0.1
  6. OptionalUtility:
  7. Maintainer: ASUS
  8. Source: http://127.0.0.1/
  9. URL: http://www.asusnetwork.net:8081/index.asp
  10. Description: web server
  11. Depends:uclibc-opt,zlib,pcre,libstdc++,spawn-fcgi,bzip2
  12. Suggests:
  13. Conflicts:
  14. Enabled: yes
复制代码
我测试了下,只要有Enabled: yes这一行就能保证\etc\init.d\下同文件名的脚本能够运行,其他的似乎都是一些信息。

(2)您的提醒非常好,我也刚刚意识到这个问题, 时间方案并不完全可靠,虽然多次测试都证明45秒内可以完成路由器核心的启动,但谁也无法保证不出意外,尤其是以后固件更新后。这个脚本我会再想办法优化。

(3)USB 重复挂载和Radius相关的我研究一下再回复您,Radius还从来没用过,正好可以学习一下。

(4)看了https://github.com/gygy/asus_factory_image,我的理解是梅林上的许多强大和易用的功能其实就是用图形化界面替代了命令行,难怪会被官方认可,原来并没有脱离这个框架。不过命令行的操作方式确实门槛有点高,看来又有得折腾了


12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-8 17:38:21 | 显示全部楼层
fstyle 发表于 2018-2-8 09:46
哈哈,共同讨论进步吧,生命不息,折腾不止嘛。我写这个脚本完全是一边查着资料一边试出来,现学现卖的。 ...

(1)看来只能通过 /init.d/ 实现自启动
(2)0 字节文件似乎很好解决
(3)USB 反复挂载可能是系统底层的问题,所以,这个问题讨论下去价值不大
(4)您可能没有用过 WPA-2 企业版加密,我有台云服务器,配置有 Radius,路由器填入地址就可以使用,但是需要在线,且有公网 IP,要不要试试看?很容易,不过,我想改成本地 Radius 就有点麻烦了。
(5)原版 Asus-Merlin 只有 JFFS2 和一些已有的功能加强外,没有其他的了。要是实现其他功能还是要命令行。

1

主题

39

帖子

97

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
91
魔法值
0
注册时间
2017-3-24
发表于 2018-2-8 18:14:22 | 显示全部楼层
Jack- 发表于 2018-2-8 17:38
(1)看来只能通过 /init.d/ 实现自启动
(2)0 字节文件似乎很好解决
(3)USB 反复挂载可能是系统底层 ...

脚本开机自启这个问题在现有条件下好像没有太多向上突破的空间了啊。Radius一般家用用户还真用不上,是不是也可以用本地设备当服务器?我记得好像看见过有人用NAS做这个的

12

主题

511

帖子

858

积分

高级魔法师

Rank: 4

精华
0
门户文章
0
魔力币
771
魔法值
5
注册时间
2017-4-24
 楼主| 发表于 2018-2-8 19:05:52 | 显示全部楼层
本帖最后由 Jack- 于 2018-2-8 16:43 编辑
fstyle 发表于 2018-2-8 11:14
脚本开机自启这个问题在现有条件下好像没有太多向上突破的空间了啊。Radius一般家用用户还真用不上,是不 ...

是的,开机启动似乎真的不值得讨论了。Radius 其实还很好用的,可以实现一个设备一个密码,可以保证单一密码外泄不会造成大问题。是可以通过 NAS 或其他设备架设 Radius 服务器,但是那需要更多的电量消耗及费用支出,直接在路由器本身架设就没有这种顾虑。

1

主题

8

帖子

19

积分

魔法学徒

Rank: 1

精华
0
门户文章
0
魔力币
17
魔法值
0
注册时间
2017-12-31
发表于 2018-2-15 00:07:44 来自手机 | 显示全部楼层
楼主能不能简单直接点,我是新手看不懂,我用u盘要怎么保存脚本,我双拨后打开网页有问题,想用论坛里的脚本,但不知道怎么用,原厂固件

0

主题

11

帖子

195

积分

初级魔法师

Rank: 2

精华
0
门户文章
0
魔力币
193
魔法值
0
注册时间
2018-5-5
发表于 2018-5-26 18:15:21 | 显示全部楼层
Jack- 发表于 2018-2-8 01:48
在这方面,不得不承认我已经算是外行了。所以,我只能提供一些思路,我没办法给出答案。因此这也是一篇外 ...

不错,这种方式可以避免

联系我们|手机版|KoolShare ( 沪ICP备13045430号 )

GMT+8, 2019-1-19 02:32 , Processed in 0.076161 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表