我们为R1设置了密码,开启了SSH,并安装了web管理界面。
本文中,我们将讲述如何修改主机名,时区,以及设置R1上那个绿色的LED。
除此之外,我们还将探索一下,这些修改是如何实现的。
配置主机名、时区、LED
有了web界面,配置主机名,时区,LED那是相当的简单了。
http://192.168.1.1
登录管理界面
在System->System界面下,即可设置主机名(hostname),以及时区
在此例中,我们将默认主机名(OpenWrt)修改为(JoyWrt)
时区从UTC修改为Asia/Hong Kong (东八区,北京时间,北京和香港同为东八区)
点"Save & Apply" (保存并应用), 即可生效。是不是很简单。
按照之前系列的文章一步一步设置过来的兄弟,一定会对R1左上角的绿色LED印象深刻。
用家乡话说,那叫贼亮贼亮的,尤其是夜晚,有些刺眼恼人。
现在不必纠结了,是关掉还是让它偶尔闪烁一下,你都可以做到。
在System->LED Configuration界面,你可以自定义LED灯的行为。
其中Trigger代表如何触发, 默认是defaulton(常亮),我们可以将之关闭(none)
甚至可以让其规律闪烁(blink)。
上图既通过定时器,控制绿色LED亮一秒,暗两秒。
设置机制
通过上述内容,我们学会了如何设置主机名,时区,LED。
但是我们的本意是折腾,而不是简单应用。
那么接下来,就是探究一下这些设置是如何起作用的呢?
我们知道,大部分设置(Or 所有设置?)都是保存在/etc/config/目录下,
那么我们来看看之前这三项设置都保存到哪里呢?
/etc/config/system 这个文件看起来很贴边,打开看看:
-
config system
-
option conloglevel '8'
-
option cronloglevel '8'
-
option hostname 'JoyWrt'
-
option zonename 'Asia/Hong Kong'
-
option timezone 'HKT-8'
-
-
config timeserver 'ntp'
-
list server '0.openwrt.pool.ntp.org'
-
list server '1.openwrt.pool.ntp.org'
-
list server '2.openwrt.pool.ntp.org'
-
list server '3.openwrt.pool.ntp.org'
-
option enabled '1'
-
-
config led
-
option default '0'
-
option name 'TEST'
-
option sysfs 'lamobo:green:usr'
-
option trigger 'timer'
-
option delayon '1000'
-
option delayoff '2000'
-
通过测试,我们直接修改这些配置,并重启,也是一样的效果。
现在我们多了一种修改配置的手段了。
那么,接下来,这些设置又是被如何读取以及应用的呢?
让我们关注这个文件:
/etc/init.d/system
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org
START=10
USE_PROCD=1
validate_system_section()
{
uci_validate_section system system "${1}" \
'hostname:string:OpenWrt' \
'conloglevel:uinteger' \
'buffersize:uinteger' \
'timezone:string:UTC' \
'zonename:string'
}
system_config() {
local cfg="$1"
local hostname conloglevel buffersize timezone zonename
validate_system_section "${1}" || {
echo "validation failed"
return 1
}
echo "$hostname" > /proc/sys/kernel/hostname
[ -z "$conloglevel" -a -z "$buffersize" ] || dmesg ${conloglevel:+-n $conloglevel} ${buffersize:+-s $buffersize}
echo "$timezone" > /tmp/TZ
[ -n "$zonename" ] && [ -f "/usr/share/zoneinfo/$zonename" ] && ln -s "/usr/share/zoneinfo/$zonename" /tmp/localtime
# apply timezone to kernel
date -k
}
reload_service() {
config_load system
config_foreach system_config system
}
service_triggers()
{
procd_add_reload_trigger "system"
procd_add_validation validate_system_section
}
start_service() {
reload_service
}
从这个脚本可以看出,当我们启动或者重载这个服务时,会:读取配置文件、加载配置项、遍历配置项(验证、设置)
而这个脚本
/etc/init.d/led
负责从/etc/config/system中读取led设置部分,并对其设置。
以文中配图为例,主要起作用的是这部分代码:
-
"timer")
-
[ -n "$delayon" ] && \
-
echo $delayon > /sys/class/leds/${sysfs}/delay_on
-
[ -n "$delayoff" ] && \
-
echo $delayoff > /sys/class/leds/${sysfs}/delay_off
-
;;
-
一点困惑
对于设置时区部分,我曾尝试直接在配置文件中写入UTC+8
结果得出的时间竟然与北京时间相差16个小时。
写入UTC-8,结果正常。
对此很难理解。
http://en.wikipedia.org/wiki/Time_zone
http://en.wikipedia.org/wiki/UTC_offset
http://en.wikipedia.org/wiki/List_of_UTC_time_offsets
从维基百科的资料描述,我们无疑属于东八区UTC+8,为何要设置成UTC-8才对呢?
希望各路高手予以解答。