您的位置:首页 > 运维架构

校园网&openwrt记(二)应用的大体设计

2016-02-25 17:32 387 查看
  接下来就开始了我的校园网与openwrt折腾记,由于好一段时间了,简单回忆下好了。

  当时刚接触openwrt的时候还好提前学了linux的基础,使用起来还算马马虎虎,但是因为linux是初学,所以在控制台打命令的时候经常有问题和许多不懂的地方。不过,还好有鸟哥神作和搜索大法在手,遇到问题靠查阅和搜索都能够迎刃而解。当时,在openwrt上敲打各种命令,使得我这个linux新手很快就有了一定的飞跃,发现看书看得再多还不如做个东西学得快。这也使得后面项目完成打下了坚实基础。

  为了快速完成这个应用,淘宝上弄了一个能够装openwrt的路由器(需要较大的flash和内存),上恩山学习了下刷固件的方法,并且也尝试了各种固件,当时就单单是烧写固件都够我感觉到折腾的了。当刷了一个我较为满意的固件后,就可以开始制作应用了。

  

  下面先简单说一下openwrt文件系统中一些比较重要的目录和文件:

* /etc/init.d

  这个目录包含许多系统各种服务的启动和停止脚本,系统开机时服务的启动和关机的启动脚本都在于此。

* /etc/rc.d

  这个目录下都是一些指向/etc/init.d目录下众多脚本的符号链接文件,Sxx(xx表示数字)开头的链接文件表示开机后将会根据数字xx的大小来启动该项服务,而K则相反,根据数字xx的大小来关闭该服务。如S20network和K90network,说明/etc/init.d/network服务将在开机的时候启动优先,而关机时却是很晚才关闭的。

* /etc/config

  这个目录下是openwrt的配置文件——UCI文件。UCI是集中式配置信息管理接口(Unified Configuration Interface)的缩写,他是OpenWrt引进的一套配置参数管理系统。

  日前已有大量软件包支持UCI模式管理,但不是所有的软件包,支持的软件包是这样来完成。

启动的(以samba举例):

1. 启动脚本/etc/init.d/samba

2. 启动脚本通过UCI分析库从/etc/config/samba获得启动参数

3. 启动脚本完成正常启动

* /etc/rc.local:系统启动完各种服务之后、系统启动完毕之前要执行的启动项可以写在这个脚本当中。

* /etc/crontabs/root:系统启动后定时执行的任务可以写在这个脚本中。

  由于应用要实现的目标是:路由器开机后向学校的一个特定的服务器(权且假设为10.0.0.123)发送获取pppoe拨号权限的udp包,在服务器验证成功后路由器进行pppoe拨号,从而成功上网。所以可以有以下两种作法:

1. 启动项方法

  制作发送udp和重新拨号脚本myscript,并配置该脚本在rc.local中,保证其在/etc/init.d/network服务启动后,即网络启动后能够成功发送udp包给服务器,再经过重新pppoe拨号后就可以上网了,这样路由器开启之后就可以达到自动联网的目的。

  但是要想保证断线后自动重连,还需要写一个脚本来完成检测上网状态和断线重连这一个任务,可以简单写一个脚本cronscript来ping几个常用且稳定的DNS来判断网络是否正常,当发现断网则运行之前的脚本myscript来重新联网,那应该怎么样达到持续检测呢?这里可以简单使用crontab机制,每分钟运行一次cronscript脚本;或者让cronscript改写在一个while循环中,然后在rc.local中直接后台启动(加上 &)。前者比较简单,后者检测得更为频繁。

2. init服务方法

  这个方法将应用作为系统服务myservice来制作,结合/etc/init.d/,/etc/rc.d,/etc/config这几个目录编写相应的脚本,使得在路由器开启时便自动发送udp包并拨号上网,然后以服务形式在后台检测网络状态,断网后自动重连。这里需要注意的是/etc/rc.d的顺序,该应用启动顺序应该大于network,即network使S20的话,myservice应该S21或更大,关闭时则应先于network,可以直接K10myservice。

  之后将会详细说这两种方法,其中第二种方法还涉及到了openwrt的web管理界面luci的应用开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openwrt