openwrt uci系统语法

在UCI的配置文件通常包含一个或多个配置语句,包含一个或多个用来定义实际值的选项语句的所谓的节。

下面是一个简单的配置示例文件:

package 'example'

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

config 'example' 'test' 语句标志着一个节的开始。这里的配置类型是example,配置名是test。配置中也允许出现匿名节,即自定义了配置类型,而没有配置名的节。配置类型对应配置处理程序来说是十分重要的,因为配置程序需要根据这些信息来处理这些配置项。
option 'string' 'some value' 和 option 'boolean' '1' 定义了一些简单值。文本选项和布尔选项在语法上并没有差异。布尔选项中可以用'0' , 'no', 'off', 或者'false'来表示false值,或者也可以用'1', 'yes','on'或者'true'来表示真值。
以list关键字开头的多个行,可用于定义包含多个值的选项。所有共享一个名称的list语句,会组装形成一个值列表,列表中每个值出现的顺序,和它在配置文件中的顺序相同。如上例种中,列表的名称是'collection',它包含了两个值,即'first item'和'second item'。
'option'和'list'语句的缩进可以增加配置文件的可读性,但是在语法不是必须的。
通常不需要为标识符和值加引号,只有当值包括空格或者制表符的时候,才必须加引号。同时,在使用引号的时候,可以用双引号代替单引号。

下面列举的例子都是符合uci语法的正确配置:

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

反之,以下配置则存在语法错误

option 'example" "value' (引号不匹配)
option example some value with space (值中包含空格,需要为值加引号)
还有一点是必须知道的,即UCI标识符和配置文件名称所包含的字符必须是由a-z, 0-9和_组成。 选项值则可以包含任意字符,只要这个值是加了引号的。

命令行实用工具

使用awk、grep等命令来解析Openwr的配置文件是低效和不明智的做法,建议用户通过uci工具对openwrt进行配置。

下面将给出一些例子,来展示uci这个强大的工具。

用法
root@OpenWrt:/lib/config# uci

用法: uci [] []

命令:

batch
export     [<config>]
import     [<config>]
changes    [<config>]
commit     [<config>]
add        <config> <section-type>
add_list   <config>.<section>.<option>=<string>
show       [<config>[.<section>[.<option>]]]
get        <config>.<section>[.<option>]
set        <config>.<section>[.<option>]=<value>
delete     <config>[.<section[.<option>]]
rename     <config>.<section>[.<option>]=<name>
revert     <config>[.<section>[.<option>]]

参数:

-c <path>  set the search path for config files (default: /etc/config)
-d <str>   set the delimiter for list values in uci show
-f <file>  use <file> as input instead of stdin
-m         when importing, merge data into an existing package
-n         name unnamed sections on export (default)
-N         don't name unnamed sections
-p <path>  add a search path for config change files
-P <path>  add a search path for config change files and use as default
-q         quiet mode (don't print error messages)
-s         force strict mode (stop on parser errors, default)
-S         disable strict mode
-X         do not use extended syntax on 'show'

例子:

导出整个配置

root@OpenWrt:~# uci export uhttpd
package 'uhttpd'

config 'uhttpd' 'main'
    list 'listen_http' '0.0.0.0:80'
    list 'listen_http' '0.0.0.0:8080'
    list 'listen_https' '0.0.0.0:443'
    option 'home' '/www'
    option 'rfc1918_filter' '1'
    option 'cert' '/etc/uhttpd.crt'
    option 'key' '/etc/uhttpd.key'
    option 'cgi_prefix' '/cgi-bin'
    option 'script_timeout' '60'
    option 'network_timeout' '30'
    option 'tcp_keepalive' '1'

config 'cert' 'px5g'
    option 'days' '730'
    option 'bits' '1024'
    option 'country' 'DE'
    option 'state' 'Berlin'
    option 'location' 'Berlin'
    option 'commonname' 'OpenWrt'

root@OpenWrt:~#

查看所有配置项的值

root@OpenWrt:~# uci show uhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_http=0.0.0.0:80 0.0.0.0:8080
uhttpd.main.listen_https=0.0.0.0:443
uhttpd.main.home=/www
uhttpd.main.rfc1918_filter=1
uhttpd.main.cert=/etc/uhttpd.crt
uhttpd.main.key=/etc/uhttpd.key
uhttpd.main.cgi_prefix=/cgi-bin
uhttpd.main.script_timeout=60
uhttpd.main.network_timeout=30
uhttpd.main.tcp_keepalive=1
uhttpd.px5g=cert
uhttpd.px5g.days=730
uhttpd.px5g.bits=1024
uhttpd.px5g.country=DE
uhttpd.px5g.state=Berlin
uhttpd.px5g.location=Berlin
uhttpd.px5g.commonname=OpenWrt
root@OpenWrt:~#

查看特定配置项的值

root@OpenWrt:~# uci get uhttpd.@uhttpd[0].listen_http
0.0.0.0:80 0.0.0.0:8080
root@OpenWrt:~#

查询网络接口的状态

root@OpenWrt:~# uci -P/var/state show network.wan
network.wan=interface
network.wan.ifname=eth0.1
network.wan.proto=dhcp
network.wan.defaultroute=0
network.wan.peerdns=0
network.wan.device=eth0.1
network.wan.ipaddr=10.11.12.13
network.wan.broadcast=255.255.255.255
network.wan.netmask=255.255.255.0
network.wan.gateway=10.11.12.1
network.wan.dnsdomain=
network.wan.dns=10.11.12.100 10.11.12.200
network.wan.up=1
network.wan.lease_gateway=10.11.12.1
network.wan.lease_server=10.11.12.25
network.wan.lease_acquired=1262482940
network.wan.lease_lifetime=5400
network.wan.lease_hostname=x-10-11-12-13
root@OpenWrt:~#

添加防火墙规则

这是一个添加SSH端口转发到防火墙规则的例子,和'-1'使用的一个例子。

root@OpenWrt:~# uci add firewall rule
root@OpenWrt:~# uci set firewall.@rule[-1].src=wan
root@OpenWrt:~# uci set firewall.@rule[-1].target=ACCEPT
root@OpenWrt:~# uci set firewall.@rule[-1].proto=tcp
root@OpenWrt:~# uci set firewall.@rule[-1].dest_port=22
root@OpenWrt:~# uci commit firewall
root@OpenWrt:~# /etc/init.d/firewall restart

本文章由http://www.wifidog.pro/2015/07/27/openwrt-uci%E8%AF%AD%E6%B3%95.html整理编辑,转载请注明出处

openwrt 固件的uci系统

UCI系统
"uci"是"Unified Configuration Interface"(统一配置界面)的缩写,意在OpenWrt整个系统的配置集中化。

系统配置应容易,更直接且在此有文档描述,从而使你的生活更轻松!

(它是White Russian系列OpenWrt基于nvram的配置的后继改进。)

许多程序在系统某处拥有自己的配置文件,

比如/etc/network/interfaces, /etc/exports, /etc/dnsmasq.conf或者 /etc/samba/samba.conf,

有时它们还使用稍有不同的语法。

在OpenWrt中你无需为此烦恼,我们只需更改UCI配置文件!

你不需要为了某个更改起效而重启系统!参阅下文中的命令行实用工具以了解如何做到这点。

还有不要忘了官方程序包(official binaries)里包含了很多后台程序,但默认情况下并未启用!

比如cron后台程序默认并未激活,因而只编辑crontab并无作用。

你需要用/etc/init.d/crond start起动它或用/etc/init.d/crond enable激活它。 大部分后台程序都可以disable(禁用),stop(停止)和restart(重起)。 还有一些非UCI配置你可以参阅。

共同原则

OpenWrt的所有配置文件皆位于/etc/config/目录下。每个文件大致与它所配置的那部分系统相关。可用文本编辑器、"uci" 命令行实用程序或各种编程API(比如 Shell, Lua and C)来编辑/修改这些配置文件。

配置文件

文件位置 描述
基本配置
/etc/config/dhcp dnsmasq和DHCP的配置
/etc/config/dropbear SSH服务端选项
/etc/config/firewall 中央防火墙配置
/etc/config/network 交换,接口和路由配置
/etc/config/system 杂项与系统配置
/etc/config/timeserver rdate的时间服务器列表
/etc/config/wireless 无线设置和无线网络的定义
IPv6
/etc/config/ahcpd Ad-Hoc配置协议(AHCP) 服务端配置以及转发器配置
/etc/config/aiccu AICCU 客户端配置
/etc/config/dhcp6c WIDE-DHCPv6 客户端配置
/etc/config/dhcp6s WIDE-DHCPv6 服务端配置
/etc/config/gw6c GW6c 客户端配置
/etc/config/radvd 路由通告 (radvd) 配置
其他
/etc/config/etherwake 以太网唤醒: etherwake
/etc/config/fstab 挂载点及swap
/etc/config/hd-idle 另一个可选的硬盘空闲休眠进程(需要路由器支持usb硬盘)
/etc/config/httpd 网页服务器配置选项(Busybox 自带httpd, 已被舍弃)
/etc/config/luci 基础 LuCI 配置
/etc/config/luci_statistics 包统计配置
/etc/config/mini_snmpd mini_snmpd 配置
/etc/config/mountd OpenWrt 自动挂载进程(类似autofs)
/etc/config/multiwan 简单多WAN出口配置
/etc/config/ntpclient ntp客户端配置,用以获取正确时间
/etc/config/pure-ftpd Pure-FTPd 服务端配置
/etc/config/qos QoS配置(流量限制与整形)
/etc/config/samba samba配置(Microsoft文件共享)
/etc/config/snmpd SNMPd(snmp服务进程) 配置
/etc/config/sshtunnel sshtunnel配置
/etc/config/stund STUN 服务端配置
/etc/config/transmission BitTorrent配置
/etc/config/uhttpd Web服务器配置(uHTTPd)
/etc/config/upnpd miniupnpd UPnP服务器配置
/etc/config/ushare uShare UPnP 服务器配置
/etc/config/vblade vblade 用户空间AOE(ATA over Ethernet)配置
/etc/config/vnstat vnstat 下载器配置
/etc/config/wifitoogle 使用按钮来开关WiFi的脚本
/etc/config/wol Wake-on-Lan: wol
/etc/config/znc ZNC 配置

本文章由http://www.wifidog.pro/2015/07/23/openwrt-uci.html整理编辑,转载请注明出处

openwrt刷固件恢复原厂固件

There is little point in merely uninstalling OpenWrt, what you actually want to do, is to replace OpenWrt with the original firmware. You are here, because the wiki-page for your device, does not help you with that. So, first have a look at the flash.layout

To replace OpenWrt with the original firmware, you most probably do not have to change the boot partition, or the partition containing specific information like NVRAM or ART. Even if you overwrote the bootloader when you installed OpenWrt on your device.

通过OpenWrt CLI恢复原厂

You can use the program mtd for this:

cd /tmp
wget http://www.example.org/original_firmware.bin
mtd -r write /tmp/original_firmware.bin firmware

OpenWrt has no built-in "pleasantries" to prevent you from going back to original firmware. But sometimes you need to be careful, see e.g. back.to.original.firmware.

If you get a error message on the above mtd command like "no valid command given" you are using an old version of mtd which doesn't support the -r or -e parameters.

Download a newer statically compiled version

cd /tmp
wget http://www.freewrt.org/downloads/tools/mtd-static
chmod a+x mtd.static
wget http://www.example.org/original.trx
./mtd.static -e linux -r write original.trx linux

TIP: PLEASE READ - Common mistakes thread section 2 also. It describes when you should use the

openwrt-brcm-2.4-squashfs.trx

image.
Only flash a trx, never flash a bin file?
If you only have a Linksys .bin firmware file, this is not a problem, simply cut off the header before using the commands below:

dd bs=32 skip=1 if=original.bin of=original.trx

TIP: If your replacement firmware has a web interface, remember to flush your browser cache, sessions etc. This will avoid misleading 404 errors.

通过OpenWrt的WebUI管理界面恢复原厂固件
通过 Booloader恢复原厂固件

To flash the original firmware back again via the bootloader, please follow the procedures already described in Installing OpenWrt. They are basically the same.

本文章由http://www.wifidog.pro/2015/07/16/openwrt%E5%8D%87%E7%BA%A7%E5%9B%BA%E4%BB%B6-1.html整理编辑,转载请注明出处

openwrt 登录管理页面openwrt管理页面密码

Openwrt没有现成的密码!你必须要在你通过telnet第一次登陆的时候设置一个。

系统

任何全新的被安装上的可爱的Openwrt镜像,都会开启这些默认设置:

  • dnsmasq (DHCP daemon) (一个负责分配IP地址和dns转发的服务)正在运行
  • 内部接口(一般是网卡口)的IP地址会被设置为192.168.1.1/24
  • 内部接口对外分配的IP地址范围在192.168.1.100 -250之间
  • dropbear (SSH daemon) 没有在运行
  • telnet daemon在标准端口上运行(23)

在全新安装Openwrt以后,在你设置一个密码之前系统会一直引导进入这个状态
通过telnet登陆

1.通过telnet 192.168.1.1登陆你的路由:

BusyBox v1.17.3 (2011-02-22 23:42:42 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 ATTITUDE ADJUSTMENT (bleeding edge, r26290) ----------
  * 1/4 oz Vodka      Pour all ingredents into mixing
  * 1/4 oz Gin        tin with ice, strain into glass.
  * 1/4 oz Amaretto
  * 1/4 oz Triple sec
  * 1/4 oz Peach schnapps
  * 1/4 oz Sour mix
  * 1 splash Cranberry juice
 -----------------------------------------------------
root@openwrt:~$

2.在提示框中输入passwd. 你将会得到为root用户设置一个新密码的提示:

root@openwrt:~$ passwd
Changing password for root
New password:
Retype password:
Password for root changed by root
root@openwrt:~$

3.请选择一个安全密码.
4.在你设置一个密码以后telnet守护进程将会被禁用,在提示框中输入exit退出
5.无需重启,现在SSH已经可以用了,如果WebUI(LuCI)同TLS-modules一起安装的话,那么HTTPS也同时起效了。
6.再次使用ssh root@192.168.1.1登陆,或者使用签名认证
7.继续基础配置

登陆到WebUI
LuCI

打开你的浏览器,通过路由器的默认地址(通常是 192.168.1.1)连接它,登录用户名使用root',密码为空''

然后点击顶栏右边的Administration(管理),然后移到左边的System(系统)(只是鼠标移上去,别点击),点击弹出的菜单里面的Admin Password(管理员密码) 一个用来更改密码的页面会显示出来
openwrt.-.admin.password.-.luci.png

将你想要的密码填入Password(密码)域,在Confirmation(确认)域中重复这个密码.最后点击Submit(提交).

现在你的密码已设置。

X-Wrt

打开浏览器,连接它的默认地址(通常是192.168.1.1)到路由器。该webif现在请您设置一个密码。写你的密码进入新密码字段并再次确认密码字段,然后单击设置。

登陆问题

如果你遇到登陆问题,比如你无法登陆这个很可能是因为你的Linux或者Windows系统的防火墙设置问题,如果你有任何防火墙,你也许需要屏蔽他们,同事,只要你在OpenWrt中设置了一个密码,telnet将不再起作用(见上)

在设置密码以后没有SSH访问功能

过一到两分钟再试。在第一次启动的时候OpenWrt会忙于设置文件系统和生成SSH密钥;SSH服务器在密钥未生成以前不会启动。

本文章由http://www.wifidog.pro/2015/07/15/openwrt%E5%AF%86%E7%A0%81.html整理编辑,转载请注明出处