Skip to content

openwrt - uci-defaults

https://openwrt.org/docs/guide-developer/uci-defaults

/etc/uci-defaults目录下的脚本为设备在第一次启动时或者恢复出厂设置时执行的脚本。正常的重启系统不会继续运行;

因为在第一次执行成功后,uci-defaults目录下的脚本都被删除了

uci-defaults目录下的脚本是被boot脚本调用的。

# cat /etc/init.d/boot

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=10
STOP=90

uci_apply_defaults() {
        . /lib/functions/system.sh

        cd /etc/uci-defaults || return 0
        files="$(ls)"
        [ -z "$files" ] && return 0
        mkdir -p /tmp/.uci
        for file in $files; do
                ( . "./$(basename $file)" ) && rm -f "$file"
        done
        # 循环地执行/etc/uci-defaults目录下的脚本,对执行成功的脚本直接删除
        uci commit
}

boot() {
        [ -f /proc/mounts ] || /sbin/mount_root
        [ -f /proc/jffs2_bbc ] && echo "S" > /proc/jffs2_bbc
        [ -f /proc/net/vlan/config ] && vconfig set_name_type DEV_PLUS_VID_NO_PAD

        mkdir -p /var/run
        mkdir -p /var/log
        mkdir -p /var/lock
        mkdir -p /var/state
        mkdir -p /var/tmp
        mkdir -p /tmp/.uci
        chmod 0700 /tmp/.uci
        touch /var/log/wtmp
        touch /var/log/lastlog
        touch /tmp/resolv.conf.auto
        ln -sf /tmp/resolv.conf.auto /tmp/resolv.conf
        grep -q debugfs /proc/filesystems && /bin/mount -o noatime -t debugfs debugfs /sys/kernel/debug
        [ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe

        /sbin/kmodloader

        [ ! -f /etc/config/wireless ] && {
                # compat for brcm47xx and mvebu
                sleep 1
        }

        /bin/config_generate
        uci_apply_defaults
        sync

        # temporary hack until configd exists
        /sbin/reload_config
}

如果执行ls /etc/uci-defaults,发现该目录是空的

root@Thingoo:~# ls /etc/uci-defaults/
root@Thingoo:~# 

如果要知道一开始uci-defaults有多少个文件,可以到/rom/etc/uci-defaults/目录查看

root@Thingoo:~# ls /rom/etc/uci-defaults/
09_fix-checksum          13_fix_group_user        30_uboot-envtools
10-fstab                 20_migrate-feeds         40_luci-udpxy
10_migrate-shadow        30_luci-theme-bootstrap  50_luci-mod-admin-full
12_network-generate-ula  30_luci-theme-material
root@Thingoo:~# 

对于想要默认uci配置时,可以将脚本安装到uci-defaults目录下,可以查找相关package进行参考。

find package -type f -exec grep -inrH "uci-defaults" {} \; 2>/dev/null