【硬创邦】跟hoowa学做智能路由(六):系统基础配置

在这一章当中,我们将介绍在OpenWRT系统下的编辑和配置的基础指令和操作知识,因为后续的章节主要用于介绍如何配置路由的相关功能,在配置的操作时我们需要掌握编辑和处理的方法。 本章中,编辑和配置的基础方法我们分为三种,三种方式都可以操作成功。分别为:

  1. 使用VI编辑器: 适合教学时直接修改配置文件。
  2. 使用UCI进行编辑: 适合教学时使用,更适合用于自己开发的第三方程序修改配置文件。
  3. 使用SCP下载到本地编辑: 适合教学和系统的测试,文件通过SCP工具下载到本地修改,完成后再上传到服务器上(要注意使用Notepad++或editplus或ue这类支持unix格式文本文件编辑器)

 VI编辑器介绍

vi(Visual Interface)是Linux上最通用的标准编辑器,几乎99.99%的Linux发行版中都包含它。vi可以在不需要图形界面的情况下实现对文件的查看、修改、删除、查找、替换等众多功能。vi的操作,适用于通过串口直接修改文件,以及通过ssh远程登入系统修改文件。 在OpenWRT中,系统允许通过vi编辑器直接修改UCI配置文件,从而实现对系统的配置。

 VI的操作方法

在本节我们就简单的介绍下VI的基本操作方法。

vi指令语法: vi [文件名]

如果指定的文件名不存在,将会在内存中自动创建一个空文件,等待保存时保存到磁盘上。如果文件名存在则将打开该文件。vi在打开文件后有两种工作模式:

  • vi指令模式: 在这个模式下,不能对文件做修改,指令输入内容在屏幕的左下方显示。
  • vi编辑模式: 在编辑模式下,可以对文件内容进行修改,删减,或增加。在OpenWRT的系统下,我们可以输入键盘上的主键盘区内容,也可以使用上下左右箭头按键调整位置。

两种模式切换: 在指令模式下,按键盘上的字母"i"既进入编辑模式(insert方式),这个时候可对文件进行修改编辑。在编辑模式下按键盘的esc键,即可返回指令模式,可以输入指令。 vi支持的指令列表,所有指令都要输入":"作为指令开头,以回车作为指令结束:

退出vi编辑器指令,放弃对文件的修改: :q! 退出vi编辑器: :q 保存当前内容: :w 保存退出: :wq 强制保存退出: :wq! 搜索字符: :/[字符内容]

操作举例:

键盘输入 i 进入编辑模式,然后可以随便输入一些字符(这时已经可以写文字了)

保存退出:进入指令模式,输入保存退出指令:wq 该文件即保存。再次使用vi /tmp/test打开文件即可看到文件保存内容。

 认识UCI

众所周知,在Linux下各种软件包有各种不同的配置脚本,每个配置脚本的语法格式和操作方式不同,这样的设计虽然可以体现出各软件包自身的优势,同时也增加了智能路由产品开发的难度。在这一点上OpenWRT下的UCI技术无疑是一种创新。

UCI是(Unified Configuration Interface)集中式配置信息管理接口的缩写,他是OpenWRT引进的一套配置参数管理机制。UCI管理了OpenWRT下最主要的系统配置,并且提供了简单,容易,标准化的人机交互接口。UCI的管理包含了网络配置,无线配置,系统信息配置等作为路由器的系统主要配置参数。UCI可以帮助开发人员快速的开发出基于OpenWRT的智能路由产品的控制界面(诸如浏览器界面,手机界面等)。

在OpenWRT下有大量的软件包的配置实用了UCI兼容模式。大量的应用程序其实都有他们自己的配置文件,比如samba的配置文件默认是/etc/samba/samba.conf,但是在OpenWRT下samba软件包使用的配置方式也是UCI。当执行/etc/init.d/samba start的时候,启动脚本将通过UCI的shell解码器分析/etc/config/samba配置文件,并且生成需要的/etc/samba/samba.conf配置,来完成配置。

OpenWRT下服务软件加载流程(samba举例):

启动脚本--->/etc/config/samba(UCI解码器)--->/etc/samba/samba.conf--->启动samba服务

OpenWRT下配置处理流程(samba举例):

uci命令--->UCI编解码器--->/etc/config/samba

由于uci配置文件非常适合人机交互,因此如果你是需要人工修改配置,也可以简单的使用常见的vi编辑器直接修改配置:

vi /etc/config/samba

默认的OpenWRT系统拥有以下几个配置文件,随着软件包的增加系统配置文件数量也会增加:

dhcp 路由器的DHCP服务,面向LAN口下计算机提供IP地址分配服务 dropbear SSH服务 firewall 路由转发,端口转发,防火墙规则 fstab 外部存储器配置 network WAN / LAN 网络配置 system 时间服务器时区配置 wireless 无线网络配置

 UCI配置文件格式

UCI默认情况下只处理/etc/config中的配置文件,通过参数指定也可以让它来处理其它位置的配置文件。UCI的配置文件同XML不同(XML的设计更适应机器读取),而UCI配置文件的设计对于人读取非常友好。所以即使你手工修改这些配置也是没有任何问题的。

UCI文件内容格式举例:

config 'example' 'test'
option 'string' 'some value'
option 'boolean' '1'
list 'collection' 'first item'
list 'collection' 'second item'

从config开始一直到下一个config出现中间的内容表示一个段配置(以下均用Section表达),其作用类似编程语言中的{}作用,是表示一个区域数据。

Section开始语法: config '类型' '名字'

其中上面例子的example就是这个配置的类型,而test就是这个配置的名字。UCI允许"匿名"的配置存在所以可能存在只有"类型"而没有"名字"的配置。

参数定义语法: option '键' '值'

option表示当前的配置中的键/值定义语法。上面例子定义了一个键为'string',值为'some value'的配置参数。

列表定义语法: list '集合名字' '值'

list表示一种集合参数,UCI会根据相同集合名字生成一个数组(以上例子数据中包含'first item'和'second item'两个值)给予相应的软件包使用。 UCI允许的参数格式:

option example value
option 'example' value
option example "value"
option "example" 'value'
option 'example' "value"

当遇到上面错误的时候,UCI还是可以很好的工作,但是如果遇到下面的格式,UCI将出现问题:

option 'example" "value'
option example some value with space

还有一点非常重要:尽量使用常规字符去处理器UCI,特殊字符(ACSII标准之外)有可能会破坏数据结构的完整性。

 UCI文件读写方式

UCI文件的读写有两种方式:

  • UCI文件的读写可以通过OpenWRT附带的uci指令来完成,这种读写方式可以用于命令行也可以用于自己开发的WEB程序来操作。
  • 直接使用系统的vi编辑器直接修改UCI文件,所做的修改也可以被系统所识别。

 UCI指令读取配置

语法格式: uci [<options>] <command> [<arguments>] 查看类语法:

uci get <config>.<section>[.<option>] 取得一个键的值 或根据段的名字取得类型
uci show [<config>[.<section>[.<option>]]] 显示出全部 / 配置文件 / 段 / 键 的完整格式
uci changes [<config>] 显示出全部 / 配置文件 的未保存修改(经过commit语法保存后就不再有记录)

变更类语法:

uci add <config> <section-type> 增加一个匿名段配置到配置文件中
uci set <config>.<section>[.<option>]=<value> (增加/修改)一个有名字的段 / 增加一个段中的键和值
uci add_list <config>.<section>.<option>=<string> 增加一个列表集合数据到配置文件中
uci del_list <config>.<section>.<option>=<string> 删除一个指定值的列表集合数据
uci delete <config>[.<section>[[.<option>][=<id>]]] 删除一个 段 / 键 / 指定值的键
uci commit [<config>] 将变更保存在文件中,或保存全部变更到各自文件

UCI在读取的时候优先显示内存中的缓存,其次显示文件中的。UCI在进行变更的时候只变更内存的,如果要使变更生效需要执行commit将其写入文件。 来举个例子。首先产生一个用来做测试的样本测试:

root@OpenWrt:~# cp /etc/config/system /etc/config/mytest

查看当前状态:

取出mytest.ntp.server的值:

增加一个名为mytest类型为hello的段到mytest文件中:

root@OpenWrt:~# uci set mytest.mytest=hello

增加一个配置到这个段中:

root@OpenWrt:~# uci set mytest.mytest.enable=1

修改mytest.@system[0].hostname这个参数:

root@OpenWrt:~# uci set mytest.@system[0].hostname=hoowa

删除掉一个ntp.server的值:

root@OpenWrt:~# uci del_list mytest.ntp.server=2.openwrt.pool.ntp.org

查看都修改了啥:

保存修改:

root@OpenWrt:~# uci commit mytest

看看文件有啥变化:

举例,开启wifi功能:

root@OpenWrt:/# uci set wireless.radio0.disabled=0
root@OpenWrt:/# uci commit wireless

让wifi开启生效:

root@OpenWrt:/# wifi

 使用SCP进行文件传输

SCP(Secure copy)是OpenWRT中的SSH附带的文件传输功能,SCP在操作上类似FTP可以实现一个安全的数据文件传输。

SCP适用于调试阶段的程序文件上下载,从而进行快速测试,这是个非常不错的工具。

第一步:正式开放SSH

在默认的情况下由于没有密码,所以SSH无法登入。首先修改系统超级账户密码,在提示中填写两次新密码:

root@OpenWrt:/# passwd

完成后重启SSH的服务:

root@OpenWrt:/# /etc/init.d/dropbear restart

第二步: 安装WinSCP

大家可以使用一个winscp的工具实现这个操作。winscp工具已经放在了教学服务器上,下载地址为http://182.92.3.46/hoowa/openwrt/tools/winscp439setup.zip。安装这个工具软件,然后让你的电脑连接到开发板的wifi上(在上边案例中,你已经开启过wifi了,对吗?),同时打开软件。

第三步: 点击新建

主机名填写IP地址,默认的开发板是192.168.1.1
端口填写22
用户名填写root
密码就填写刚才设置的那个密码
文件协议选择SCP

点击连接, 连接过程中有提示找不到group指令,没关系直接确认就行了。

第四步:文件处理

登入后,操作起来就像FTP工具一样,左侧是你的电脑,右侧是开发板系统,你可以上载下载文件。

在本章,我们介绍了三种进行配置编辑的方法,请选择其中一种最为你进行后续操作所使用的方式即可。其他的用到了再回来学习也可以的。

到这里,我们在硬件部分的第一次操作基本完成,接下来将进入软件环节,来学习如何配置出一个具备完整功能的路由系统来。

最后,大家现在可以开始提问,在雷锋网(公众号:雷锋网)文章评论、公众号「宅客」:letshome、QQ群:196302618、邮箱:DIYRouter#163.com都可以提交,问题我将会在下章的时候统一解答。需要提醒下,我并不是高手,我回答问题有三个原则:1、我会的我直接回答 2、我不太会的我看着回答 3、我不会的我瞎忽悠 所以我给的答案是否正确需要大家自行判断。

雷锋网原创文章,未经授权禁止转载。详情见转载须知

【硬创邦】跟hoowa学做智能路由(六):系统基础配置

(完)