openwrt - 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,发现该目录是空的
如果要知道一开始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进行参考。