Openwrt /etc/rc.button/reset 保存配置安全脚本
来源:互联网 发布:python re 编辑:程序博客网 时间:2024/05/21 05:41
写一个/etc/rc.button/reset脚本来对安全,状态还有配置改变的反馈做相应的处理
远程操作按下reset按键,并存储配置,脚本文件:
#!/bin/shPATH="$PATH:/usr/local/sbin/:/usr/local/bin/"# Only run on button release.[[ "${ACTION}" = "released" ]] || exit 0# logger "$BUTTON pressed for $SEEN seconds"# env >> /tmp/reset-buttonif [[ "$SEEN" -le 1 ]] ; then MESSAGE="RESET BUTTON: Retain current overlay, restore safebackup, and reboot" echo "$MESSAGE" > /dev/console logger "$MESSAGE" safebackup restore && reboot &elif [[ "$SEEN" -ge 3 -a "$SEEN" -le 5 ]] ; then MESSAGE="RESET BUTTON: Wipe overlay, restore safebackup, and reboot" echo "$MESSAGE" > /dev/console logger "$MESSAGE" safebackup fullrestoreelif [[ "$SEEN" -ge 9 -a "$SEEN" -le 12 ]] ; then MESSAGE="RESET BUTTON: Wipe overlay (factory reset) and reboot" echo "$MESSAGE" > /dev/console logger "$MESSAGE" jffs2reset -y && reboot &else MESSAGE="RESET BUTTON: Error. Pressed for $SEEN seconds. Do nothing." echo "$MESSAGE" > /dev/console logger "$MESSAGE"fi
另一个安全备份脚本:
#!/bin/sh# This script was written to run under the busybox ash shell.## Save and restore a safe configuration backup state for the host.export BAKDIR="/safebackups"export SAVEFILE="/safebackups/safebackup-$(hostname)-$(date +%Y%m%d%H%M%S)-$$.tar.gz"export RESTOREFILE=$(find /safebackups/ -maxdepth 1 -mindepth 1 -type f -name 'safebackup-*.tar.gz' | head -n 1 2> /dev/null)export SYSUPGRADE_CONF_TAR="/tmp/sysupgrade.tgz"PIDFILE="/tmp/$(basename $0.pid)"MYNAME=$(basename $0)#--echoerr() { # Print errors to stderr. echo "$@" 1>&2;}f_validate_restore() { # Validate before a restoration. # If there is no restore file, there is nothing we can do. if ! [[ -f "$RESTOREFILE" ]] ; then echoerr "" echoerr "ERROR: No restore file could be found." echoerr "" exit 1 fi}f_save() { # Save a backup. echo "" # Make sure the BAKDIR exists. If not, create it. if ! [[ -d "$BAKDIR" ]] ; then echo "$BAKDIR does not exist, so creating it." mkdir "$BAKDIR" chmod o-rwx "$BAKDIR" fi # Remove old backups prior to the new save. We only keep one backup at a time. echo -n "Removing old backups..." rm -rf /safebackups/safebackup-*.tar.gz echo " Done" # Save the new backup. sysupgrade -b "$SAVEFILE" echo "sysupgrade backup saved to $SAVEFILE" echo ""}f_restore() { # Restore the backup. f_validate_restore echo "" echo "Restoring sysupgrade backup from file: $RESTOREFILE" sysupgrade -r "$RESTOREFILE" echo " Done" echo ""}f_fullrestore() { # Wipe the overlay flash, and restore from backup. # This is a complicated and dangerous process. This is mostly based on what the sysupgrade script does. # FIXME: ext-root problems? Reference notes. f_validate_restore echo "" echo "Wiping overlay and restoring sysupgrade backup from file: $RESTOREFILE" echoerr "WARNING: Network access will be lost during this process and the host will be rebooted." echo "" # Copy the safe backup to /tmp cp "$RESTOREFILE" "$SYSUPGRADE_CONF_TAR" || { echoerr "ERROR: Unable cp restore file to /tmp" ; exit 1 ; } # # Source required functions. source /lib/functions.sh for EACH in /lib/upgrade/*.sh ; do source "$EACH" ; done # # run_hooks will disable the process watchdog and do other important tasks. run_hooks "" $sysupgrade_pre_upgrade # # No idea what this does, and may not be needed at all. ubus call system upgrade # # Kill off all non-critical processes. kill_remaining TERM ; sleep 3 ; kill_remaining KILL # # This is the important part. This runs the ramfs, pivots root, erases the overlay, and restores the config backup. # WARNING: Remember that when we do run_ramfs, we lose access to the old filesystem, possibly functions, envrionment, etc. run_ramfs 'mtd -e rootfs_data jffs2write $SYSUPGRADE_CONF_TAR rootfs_data ; reboot -f' # # Nothing from here on our matters. We've already rebooted. # SYSUPGRADE_CONF_TAR is restored on reboot by /lib/preinit/80_mount_root and erased by /etc/init.d/done # echo " Done" echo ""}#--case "$1" in save ) f_save ;; restore ) f_restore ;; fullrestore ) f_fullrestore ;; *) echo "" echo "Usage: $MYNAME save|restore|fullrestore" echo " WARNING: fullrestore implies a overlay wipe and reboot" echo "" exit 1 ;;esac
在做reset复位之前,先要进行安全备份,没有备份,就不会进行复位:
button按下0-1秒,保存配置并重启,overlay没有擦除
button按下3-5秒,overly被擦除,存储配置,重启
button按下9-12秒,进行出厂复位,overlay配擦除,没有配置存储
warning: 该脚本不是Openwrt通用脚本,仅作参考,需要根据不用的路由器做出对应修改
0 0
- Openwrt /etc/rc.button/reset 保存配置安全脚本
- CentOS boot脚本 /etc/rc.d/rc.local
- /etc/rc.d/rc.local 自动加载linux 脚本
- OpenWrt 系统定制WR841N Reset Button不工作
- OpenWrt 脚本配置
- Openwrt /etc/config/network 配置解析
- linux的启动脚本顺序--/etc/rc.d/init.d
- linux启动后执行脚本(/etc/rc.local文件)
- linux中/etc/rc.local脚本的作用
- 开机启动服务chkconfig开机启动脚本/etc/rc.local
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- 理解Linux系统/etc/init.d目录和/etc/rc.local脚本
- LeetCode | Happy Number
- curl命令
- Hibernate中HQL函数汇总及其说明
- MFC学习之 在Button控件上画线
- QT——QWidget、QMainWindow、 QDialog用法区别解析
- Openwrt /etc/rc.button/reset 保存配置安全脚本
- AUTOCAD shift+鼠标中键 旋转视图后的还原方法
- 将table边框改为细线
- MySQL DATE_FORMAT() 函数
- 徐家俊:华为十年
- iOS动画——Layer Animations(一)
- Maven Dependency mediation
- 【nginx】nginx读书笔记
- linux 下xinetd