卓泰科技 发表于 2015-2-14 14:41:22

【Joytag 香蕉R1学习】OpenWrt for R1:设置主机名、时区、LED

在《【Joytag 香蕉R1学习】OpenWrt for R1有线路由, Telnet,SSH, LuCI》一文中,
我们为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'
是不是找到啦? 主机名,时区,LED,还有NTP设置(本例中我们没改)

通过测试,我们直接修改这些配置,并重启,也是一样的效果。
现在我们多了一种修改配置的手段了。

那么,接下来,这些设置又是被如何读取以及应用的呢?
让我们关注这个文件:
/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才对呢?
希望各路高手予以解答。

页: [1]
查看完整版本: 【Joytag 香蕉R1学习】OpenWrt for R1:设置主机名、时区、LED