mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
fix some target VLAN switch untagged settings
This commit is contained in:
parent
6f413dab28
commit
b1266c659b
@ -9,9 +9,10 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
include $(INCLUDE_DIR)/version.mk
|
include $(INCLUDE_DIR)/version.mk
|
||||||
|
include $(INCLUDE_DIR)/feeds.mk
|
||||||
|
|
||||||
PKG_NAME:=base-files
|
PKG_NAME:=base-files
|
||||||
PKG_RELEASE:=173.3
|
PKG_RELEASE:=181
|
||||||
PKG_FLAGS:=nonshared
|
PKG_FLAGS:=nonshared
|
||||||
|
|
||||||
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
||||||
@ -19,7 +20,14 @@ PKG_BUILD_DEPENDS:=usign/host
|
|||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|
||||||
# Extend depends from version.mk
|
# Extend depends from version.mk
|
||||||
PKG_CONFIG_DEPENDS += CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE
|
PKG_CONFIG_DEPENDS += \
|
||||||
|
CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE \
|
||||||
|
CONFIG_NAND_SUPPORT \
|
||||||
|
CONFIG_CLEAN_IPKG \
|
||||||
|
CONFIG_PER_FEED_REPO \
|
||||||
|
CONFIG_PER_FEED_REPO_ADD_DISABLED \
|
||||||
|
CONFIG_PER_FEED_REPO_ADD_COMMENTED \
|
||||||
|
$(foreach feed,$(FEEDS_INSTALLED),CONFIG_FEED_$(feed))
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
@ -31,8 +39,8 @@ endif
|
|||||||
define Package/base-files
|
define Package/base-files
|
||||||
SECTION:=base
|
SECTION:=base
|
||||||
CATEGORY:=Base system
|
CATEGORY:=Base system
|
||||||
DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +fstools +fwtool
|
DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool
|
||||||
TITLE:=Base filesystem for Lede
|
TITLE:=Base filesystem for OpenWrt
|
||||||
URL:=http://openwrt.org/
|
URL:=http://openwrt.org/
|
||||||
VERSION:=$(PKG_RELEASE)-$(REVISION)
|
VERSION:=$(PKG_RELEASE)-$(REVISION)
|
||||||
endef
|
endef
|
||||||
@ -107,9 +115,16 @@ ifdef CONFIG_SIGNED_PACKAGES
|
|||||||
endef
|
endef
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_NAND_SUPPORT),)
|
||||||
|
define Package/base-files/nand-support
|
||||||
|
rm -f $(1)/lib/upgrade/nand.sh
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
|
||||||
define Package/base-files/install
|
define Package/base-files/install
|
||||||
$(CP) ./files/* $(1)/
|
$(CP) ./files/* $(1)/
|
||||||
$(Package/base-files/install-key)
|
$(Package/base-files/install-key)
|
||||||
|
$(Package/base-files/nand-support)
|
||||||
if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \
|
if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \
|
||||||
$(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \
|
$(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \
|
||||||
fi
|
fi
|
||||||
@ -171,6 +186,15 @@ define Package/base-files/install
|
|||||||
echo "$$$${conffile##$(1)}" >> $(1)/CONTROL/conffiles; \
|
echo "$$$${conffile##$(1)}" >> $(1)/CONTROL/conffiles; \
|
||||||
fi \
|
fi \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
$(if $(CONFIG_INCLUDE_CONFIG), \
|
||||||
|
echo -e "# Build configuration for board $(BOARD)/$(SUBTARGET)/$(PROFILE)\n" >$(1)/etc/build.config; \
|
||||||
|
cat $(BIN_DIR)/config.seed >>$(1)/etc/build.config)
|
||||||
|
|
||||||
|
$(if $(CONFIG_CLEAN_IPKG),, \
|
||||||
|
mkdir -p $(1)/etc/opkg; \
|
||||||
|
$(call FeedSourcesAppend,$(1)/etc/opkg/distfeeds.conf); \
|
||||||
|
$(VERSION_SED) $(1)/etc/opkg/distfeeds.conf)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
ifneq ($(DUMP),1)
|
ifneq ($(DUMP),1)
|
||||||
|
@ -223,7 +223,7 @@ generate_static_system() {
|
|||||||
uci -q batch <<-EOF
|
uci -q batch <<-EOF
|
||||||
delete system.@system[0]
|
delete system.@system[0]
|
||||||
add system system
|
add system system
|
||||||
set system.@system[-1].hostname='LEDE'
|
set system.@system[-1].hostname='OpenWrt'
|
||||||
set system.@system[-1].timezone='UTC'
|
set system.@system[-1].timezone='UTC'
|
||||||
set system.@system[-1].ttylogin='0'
|
set system.@system[-1].ttylogin='0'
|
||||||
set system.@system[-1].log_size='64'
|
set system.@system[-1].log_size='64'
|
||||||
@ -233,10 +233,10 @@ generate_static_system() {
|
|||||||
set system.ntp='timeserver'
|
set system.ntp='timeserver'
|
||||||
set system.ntp.enabled='1'
|
set system.ntp.enabled='1'
|
||||||
set system.ntp.enable_server='0'
|
set system.ntp.enable_server='0'
|
||||||
add_list system.ntp.server='0.lede.pool.ntp.org'
|
add_list system.ntp.server='0.openwrt.pool.ntp.org'
|
||||||
add_list system.ntp.server='1.lede.pool.ntp.org'
|
add_list system.ntp.server='1.openwrt.pool.ntp.org'
|
||||||
add_list system.ntp.server='2.lede.pool.ntp.org'
|
add_list system.ntp.server='2.openwrt.pool.ntp.org'
|
||||||
add_list system.ntp.server='3.lede.pool.ntp.org'
|
add_list system.ntp.server='3.openwrt.pool.ntp.org'
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if json_is_a system object; then
|
if json_is_a system object; then
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
root:x:0:
|
root:x:0:
|
||||||
daemon:x:1:
|
daemon:x:1:
|
||||||
adm:x:4:
|
adm:x:4:
|
||||||
|
tty:x:5:
|
||||||
mail:x:8:
|
mail:x:8:
|
||||||
audio:x:29:
|
audio:x:29:
|
||||||
www-data:x:33:
|
www-data:x:33:
|
||||||
|
@ -72,6 +72,7 @@ load_led() {
|
|||||||
[ -n "$dev" ] && {
|
[ -n "$dev" ] && {
|
||||||
echo $dev > /sys/class/leds/${sysfs}/device_name
|
echo $dev > /sys/class/leds/${sysfs}/device_name
|
||||||
echo $mode > /sys/class/leds/${sysfs}/mode
|
echo $mode > /sys/class/leds/${sysfs}/mode
|
||||||
|
echo $interval > /sys/class/leds/${sysfs}/interval
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ USE_PROCD=1
|
|||||||
validate_system_section()
|
validate_system_section()
|
||||||
{
|
{
|
||||||
uci_validate_section system system "${1}" \
|
uci_validate_section system system "${1}" \
|
||||||
'hostname:string:lede' \
|
'hostname:string:OpenWrt' \
|
||||||
'conloglevel:uinteger' \
|
'conloglevel:uinteger' \
|
||||||
'buffersize:uinteger' \
|
'buffersize:uinteger' \
|
||||||
'timezone:string:UTC' \
|
'timezone:string:UTC' \
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
DISTRIB_ID='%D'
|
DISTRIB_ID='%D'
|
||||||
DISTRIB_RELEASE='%V'
|
DISTRIB_RELEASE='%V'
|
||||||
DISTRIB_REVISION='%R'
|
DISTRIB_REVISION='%R'
|
||||||
DISTRIB_CODENAME='%n'
|
|
||||||
DISTRIB_TARGET='%S'
|
DISTRIB_TARGET='%S'
|
||||||
DISTRIB_ARCH='%A'
|
DISTRIB_ARCH='%A'
|
||||||
DISTRIB_DESCRIPTION='%D %N %V %C'
|
DISTRIB_DESCRIPTION='%D %V %C'
|
||||||
DISTRIB_TAINTS='%t'
|
DISTRIB_TAINTS='%t'
|
||||||
|
@ -41,14 +41,15 @@ disable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
|
err=1
|
||||||
name="$(basename "${initscript}")"
|
name="$(basename "${initscript}")"
|
||||||
disable
|
[ "$START" ] && \
|
||||||
[ -n "$START" -o -n "$STOP" ] || {
|
ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" && \
|
||||||
echo "/etc/init.d/$name does not have a START or STOP value"
|
err=0
|
||||||
return 1
|
[ "$STOP" ] && \
|
||||||
}
|
ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}" && \
|
||||||
[ "$START" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}"
|
err=0
|
||||||
[ "$STOP" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}"
|
return $err
|
||||||
}
|
}
|
||||||
|
|
||||||
enabled() {
|
enabled() {
|
||||||
@ -88,6 +89,10 @@ service_triggers() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service_data() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
service_running() {
|
service_running() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -122,12 +127,14 @@ ${INIT_TRACE:+set -x}
|
|||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
|
procd_lock
|
||||||
stop_service "$@"
|
stop_service "$@"
|
||||||
procd_kill "$(basename ${basescript:-$initscript})" "$1"
|
procd_kill "$(basename ${basescript:-$initscript})" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
reload() {
|
reload() {
|
||||||
if eval "type reload_service" 2>/dev/null >/dev/null; then
|
if eval "type reload_service" 2>/dev/null >/dev/null; then
|
||||||
|
procd_lock
|
||||||
reload_service "$@"
|
reload_service "$@"
|
||||||
else
|
else
|
||||||
start
|
start
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
kernel.panic=3
|
kernel.panic=3
|
||||||
kernel.core_pattern=/tmp/%e.%t.%p.%s.core
|
kernel.core_pattern=/tmp/%e.%t.%p.%s.core
|
||||||
|
fs.suid_dumpable=2
|
||||||
|
|
||||||
net.ipv4.conf.default.arp_ignore=1
|
net.ipv4.conf.default.arp_ignore=1
|
||||||
net.ipv4.conf.all.arp_ignore=1
|
net.ipv4.conf.all.arp_ignore=1
|
||||||
|
@ -202,7 +202,7 @@ add_group_and_user() {
|
|||||||
if [ -n "$gname" ] && [ -n "$gid" ]; then
|
if [ -n "$gname" ] && [ -n "$gid" ]; then
|
||||||
group_exists "$gname" || group_add "$gname" "$gid"
|
group_exists "$gname" || group_add "$gname" "$gid"
|
||||||
elif [ -n "$gname" ]; then
|
elif [ -n "$gname" ]; then
|
||||||
group_add_next "$gname"; gid=$?
|
gid="$(group_add_next "$gname")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$uname" ]; then
|
if [ -n "$uname" ]; then
|
||||||
@ -235,6 +235,10 @@ default_postinst() {
|
|||||||
rm -fR $root/rootfs-overlay/
|
rm -fR $root/rootfs-overlay/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "/usr/lib/opkg/info/${pkgname}.list"; then
|
||||||
|
kmodloader
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then
|
if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then
|
||||||
. /lib/functions/system.sh
|
. /lib/functions/system.sh
|
||||||
[ -d /tmp/.uci ] || mkdir -p /tmp/.uci
|
[ -d /tmp/.uci ] || mkdir -p /tmp/.uci
|
||||||
@ -292,9 +296,7 @@ group_add() {
|
|||||||
[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
|
[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
|
||||||
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
|
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
|
||||||
echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
|
echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
|
||||||
rc=$?
|
|
||||||
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
|
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
|
||||||
return $rc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group_exists() {
|
group_exists() {
|
||||||
@ -304,14 +306,17 @@ group_exists() {
|
|||||||
group_add_next() {
|
group_add_next() {
|
||||||
local gid gids
|
local gid gids
|
||||||
gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
|
gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
|
||||||
[ -n "$gid" ] && return $gid
|
if [ -n "$gid" ]; then
|
||||||
|
echo $gid
|
||||||
|
return
|
||||||
|
fi
|
||||||
gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
|
gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
|
||||||
gid=100
|
gid=65536
|
||||||
while [ -n "$(echo $gids | grep $gid)" ] ; do
|
while [ -n "$(echo "$gids" | grep "^$gid$")" ] ; do
|
||||||
gid=$((gid + 1))
|
gid=$((gid + 1))
|
||||||
done
|
done
|
||||||
group_add $1 $gid
|
group_add $1 $gid
|
||||||
return $gid
|
echo $gid
|
||||||
}
|
}
|
||||||
|
|
||||||
group_add_user() {
|
group_add_user() {
|
||||||
@ -334,8 +339,8 @@ user_add() {
|
|||||||
local rc
|
local rc
|
||||||
[ -z "$uid" ] && {
|
[ -z "$uid" ] && {
|
||||||
uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3)
|
uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3)
|
||||||
uid=100
|
uid=65536
|
||||||
while [ -n "$(echo $uids | grep $uid)" ] ; do
|
while [ -n "$(echo "$uids" | grep "^$uid$")" ] ; do
|
||||||
uid=$((uid + 1))
|
uid=$((uid + 1))
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@ -344,9 +349,7 @@ user_add() {
|
|||||||
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
|
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
|
||||||
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
|
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
|
||||||
echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
|
echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
|
||||||
rc=$?
|
|
||||||
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
|
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
|
||||||
return $rc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
user_exists() {
|
user_exists() {
|
||||||
|
@ -1,6 +1,18 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2013 OpenWrt.org
|
# Copyright (C) 2013 OpenWrt.org
|
||||||
|
|
||||||
|
get_dt_led() {
|
||||||
|
local label
|
||||||
|
local ledpath
|
||||||
|
local basepath="/proc/device-tree"
|
||||||
|
local nodepath="$basepath/aliases/led-$1"
|
||||||
|
|
||||||
|
[ -f "$nodepath" ] && ledpath=$(cat "$nodepath")
|
||||||
|
[ -n "$ledpath" ] && label=$(cat "$basepath$ledpath/label")
|
||||||
|
|
||||||
|
echo "$label"
|
||||||
|
}
|
||||||
|
|
||||||
led_set_attr() {
|
led_set_attr() {
|
||||||
[ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
|
[ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ _ucidef_finish_switch_roles() {
|
|||||||
json_select ..
|
json_select ..
|
||||||
json_select ..
|
json_select ..
|
||||||
|
|
||||||
if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then
|
if [ ${need_tag:-0} -eq 1 -o ${want_untag:-0} -ne 1 ]; then
|
||||||
num="${num}t"
|
num="${num}t"
|
||||||
device="${device}.${index}"
|
device="${device}.${index}"
|
||||||
fi
|
fi
|
||||||
@ -358,19 +358,59 @@ ucidef_add_vdsl_modem() {
|
|||||||
json_select ..
|
json_select ..
|
||||||
}
|
}
|
||||||
|
|
||||||
ucidef_set_led_netdev() {
|
ucidef_set_led_ataport() {
|
||||||
|
_ucidef_set_led_trigger "$1" "$2" "$3" ata"$4"
|
||||||
|
}
|
||||||
|
|
||||||
|
_ucidef_set_led_common() {
|
||||||
local cfg="led_$1"
|
local cfg="led_$1"
|
||||||
local name="$2"
|
local name="$2"
|
||||||
local sysfs="$3"
|
local sysfs="$3"
|
||||||
local dev="$4"
|
|
||||||
local mode="${5:-link tx rx}"
|
|
||||||
|
|
||||||
json_select_object led
|
json_select_object led
|
||||||
|
|
||||||
json_select_object "$1"
|
json_select_object "$1"
|
||||||
json_add_string name "$name"
|
json_add_string name "$name"
|
||||||
json_add_string type netdev
|
|
||||||
json_add_string sysfs "$sysfs"
|
json_add_string sysfs "$sysfs"
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_default() {
|
||||||
|
local default="$4"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string default "$default"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_gpio() {
|
||||||
|
local gpio="$4"
|
||||||
|
local inverted="$5"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger "$trigger"
|
||||||
|
json_add_string type gpio
|
||||||
|
json_add_int gpio "$gpio"
|
||||||
|
json_add_boolean inverted "$inverted"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_ide() {
|
||||||
|
_ucidef_set_led_trigger "$1" "$2" "$3" ide-disk
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_netdev() {
|
||||||
|
local dev="$4"
|
||||||
|
local mode="${5:-link tx rx}"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string type netdev
|
||||||
json_add_string device "$dev"
|
json_add_string device "$dev"
|
||||||
json_add_string mode "$mode"
|
json_add_string mode "$mode"
|
||||||
json_select ..
|
json_select ..
|
||||||
@ -378,24 +418,106 @@ ucidef_set_led_netdev() {
|
|||||||
json_select ..
|
json_select ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_oneshot() {
|
||||||
|
_ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_portstate() {
|
||||||
|
local port_state="$4"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger port_state
|
||||||
|
json_add_string type portstate
|
||||||
|
json_add_string port_state "$port_state"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_rssi() {
|
||||||
|
local iface="$4"
|
||||||
|
local minq="$5"
|
||||||
|
local maxq="$6"
|
||||||
|
local offset="${7:-0}"
|
||||||
|
local factor="${8:-1}"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string type rssi
|
||||||
|
json_add_string name "$name"
|
||||||
|
json_add_string iface "$iface"
|
||||||
|
json_add_string minq "$minq"
|
||||||
|
json_add_string maxq "$maxq"
|
||||||
|
json_add_string offset "$offset"
|
||||||
|
json_add_string factor "$factor"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_switch() {
|
||||||
|
local trigger_name="$4"
|
||||||
|
local port_mask="$5"
|
||||||
|
local speed_mask="$6"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger "$trigger_name"
|
||||||
|
json_add_string type switch
|
||||||
|
json_add_string port_mask "$port_mask"
|
||||||
|
json_add_string speed_mask "$speed_mask"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
_ucidef_set_led_timer() {
|
||||||
|
local trigger_name="$4"
|
||||||
|
local delayon="$5"
|
||||||
|
local delayoff="$6"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger "$trigger_name"
|
||||||
|
json_add_int delayon "$delayon"
|
||||||
|
json_add_int delayoff "$delayoff"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_timer() {
|
||||||
|
_ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
|
||||||
|
}
|
||||||
|
|
||||||
|
_ucidef_set_led_trigger() {
|
||||||
|
local trigger_name="$4"
|
||||||
|
|
||||||
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
|
json_add_string trigger "$trigger_name"
|
||||||
|
json_select ..
|
||||||
|
|
||||||
|
json_select ..
|
||||||
|
}
|
||||||
|
|
||||||
ucidef_set_led_usbdev() {
|
ucidef_set_led_usbdev() {
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local dev="$4"
|
local dev="$4"
|
||||||
|
|
||||||
json_select_object led
|
_ucidef_set_led_common "$1" "$2" "$3"
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string type usb
|
json_add_string type usb
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string device "$dev"
|
json_add_string device "$dev"
|
||||||
json_select ..
|
json_select ..
|
||||||
|
|
||||||
json_select ..
|
json_select ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ucidef_set_led_usbhost() {
|
||||||
|
_ucidef_set_led_trigger "$1" "$2" "$3" usb-host
|
||||||
|
}
|
||||||
|
|
||||||
ucidef_set_led_usbport() {
|
ucidef_set_led_usbport() {
|
||||||
local obj="$1"
|
local obj="$1"
|
||||||
local name="$2"
|
local name="$2"
|
||||||
@ -404,12 +526,9 @@ ucidef_set_led_usbport() {
|
|||||||
shift
|
shift
|
||||||
shift
|
shift
|
||||||
|
|
||||||
json_select_object led
|
_ucidef_set_led_common "$obj" "$name" "$sysfs"
|
||||||
|
|
||||||
json_select_object "$obj"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string type usbport
|
json_add_string type usbport
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_select_array ports
|
json_select_array ports
|
||||||
for port in "$@"; do
|
for port in "$@"; do
|
||||||
json_add_string port "$port"
|
json_add_string port "$port"
|
||||||
@ -421,171 +540,7 @@ ucidef_set_led_usbport() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ucidef_set_led_wlan() {
|
ucidef_set_led_wlan() {
|
||||||
local cfg="led_$1"
|
_ucidef_set_led_trigger "$1" "$2" "$3" "$4"
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local trigger="$4"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string type trigger
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string trigger "$trigger"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_switch() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local trigger="$4"
|
|
||||||
local port_mask="$5"
|
|
||||||
local speed_mask="$6"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string type switch
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string trigger "$trigger"
|
|
||||||
json_add_string port_mask "$port_mask"
|
|
||||||
json_add_string speed_mask "$speed_mask"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_portstate() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local port_state="$4"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string type portstate
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string trigger port_state
|
|
||||||
json_add_string port_state "$port_state"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_default() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local default="$4"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string default "$default"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_gpio() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local gpio="$4"
|
|
||||||
local inverted="$5"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string type gpio
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string trigger "$trigger"
|
|
||||||
json_add_int gpio "$gpio"
|
|
||||||
json_add_boolean inverted "$inverted"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_ide() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string trigger ide-disk
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
__ucidef_set_led_timer() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local trigger="$4"
|
|
||||||
local delayon="$5"
|
|
||||||
local delayoff="$6"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string type "$trigger"
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_int delayon "$delayon"
|
|
||||||
json_add_int delayoff "$delayoff"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_oneshot() {
|
|
||||||
__ucidef_set_led_timer $1 $2 $3 "oneshot" $4 $5
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_timer() {
|
|
||||||
__ucidef_set_led_timer $1 $2 $3 "timer" $4 $5
|
|
||||||
}
|
|
||||||
|
|
||||||
ucidef_set_led_rssi() {
|
|
||||||
local cfg="led_$1"
|
|
||||||
local name="$2"
|
|
||||||
local sysfs="$3"
|
|
||||||
local iface="$4"
|
|
||||||
local minq="$5"
|
|
||||||
local maxq="$6"
|
|
||||||
local offset="$7"
|
|
||||||
local factor="$8"
|
|
||||||
|
|
||||||
json_select_object led
|
|
||||||
|
|
||||||
json_select_object "$1"
|
|
||||||
json_add_string type rssi
|
|
||||||
json_add_string name "$name"
|
|
||||||
json_add_string iface "$iface"
|
|
||||||
json_add_string sysfs "$sysfs"
|
|
||||||
json_add_string minq "$minq"
|
|
||||||
json_add_string maxq "$maxq"
|
|
||||||
json_add_string offset "$offset"
|
|
||||||
json_add_string factor "$factor"
|
|
||||||
json_select ..
|
|
||||||
|
|
||||||
json_select ..
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ucidef_set_rssimon() {
|
ucidef_set_rssimon() {
|
||||||
@ -601,7 +556,6 @@ ucidef_set_rssimon() {
|
|||||||
json_select ..
|
json_select ..
|
||||||
|
|
||||||
json_select ..
|
json_select ..
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ucidef_add_gpio_switch() {
|
ucidef_add_gpio_switch() {
|
||||||
|
@ -113,7 +113,7 @@ preinit_ip() {
|
|||||||
preinit_config_board
|
preinit_config_board
|
||||||
fi
|
fi
|
||||||
|
|
||||||
preinit_net_echo "Doing Lede Preinit\n"
|
preinit_net_echo "Doing OpenWrt Preinit\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
preinit_ip_deconfig() {
|
preinit_ip_deconfig() {
|
||||||
|
@ -5,8 +5,12 @@
|
|||||||
run_failsafe_hook() {
|
run_failsafe_hook() {
|
||||||
[ "$pi_preinit_no_failsafe" = "y" ] && return
|
[ "$pi_preinit_no_failsafe" = "y" ] && return
|
||||||
if [ "$FAILSAFE" = "true" ]; then
|
if [ "$FAILSAFE" = "true" ]; then
|
||||||
|
lock /tmp/.failsafe
|
||||||
boot_run_hook failsafe
|
boot_run_hook failsafe
|
||||||
lock -w /tmp/.failsafe
|
while [ ! -e /tmp/sysupgrade ]; do
|
||||||
|
lock -w /tmp/.failsafe
|
||||||
|
done
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,10 +8,13 @@ failsafe_netlogin () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
failsafe_shell() {
|
failsafe_shell() {
|
||||||
lock /tmp/.failsafe
|
local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
|
||||||
ash --login
|
[ -n "$console" ] || console=console
|
||||||
echo "Please reboot system when done with failsafe network logins"
|
[ -c "/dev/$console" ] || return 0
|
||||||
while true; do sleep 1; done
|
while true; do
|
||||||
|
ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
|
||||||
|
sleep 1
|
||||||
|
done &
|
||||||
}
|
}
|
||||||
|
|
||||||
boot_hook_add failsafe failsafe_netlogin
|
boot_hook_add failsafe failsafe_netlogin
|
||||||
|
@ -6,143 +6,33 @@ RAM_ROOT=/tmp/root
|
|||||||
libs() { ldd $* 2>/dev/null | sed -r 's/(.* => )?(.*) .*/\2/'; }
|
libs() { ldd $* 2>/dev/null | sed -r 's/(.* => )?(.*) .*/\2/'; }
|
||||||
|
|
||||||
install_file() { # <file> [ <file> ... ]
|
install_file() { # <file> [ <file> ... ]
|
||||||
|
local target dest dir
|
||||||
for file in "$@"; do
|
for file in "$@"; do
|
||||||
|
if [ -L "$file" ]; then
|
||||||
|
target="$(readlink -f "$file")"
|
||||||
|
dest="$RAM_ROOT/$file"
|
||||||
|
[ ! -f "$dest" ] && {
|
||||||
|
dir="$(dirname "$dest")"
|
||||||
|
mkdir -p "$dir"
|
||||||
|
ln -s "$target" "$dest"
|
||||||
|
}
|
||||||
|
file="$target"
|
||||||
|
fi
|
||||||
dest="$RAM_ROOT/$file"
|
dest="$RAM_ROOT/$file"
|
||||||
[ -f $file -a ! -f $dest ] && {
|
[ -f "$file" -a ! -f "$dest" ] && {
|
||||||
dir="$(dirname $dest)"
|
dir="$(dirname "$dest")"
|
||||||
mkdir -p "$dir"
|
mkdir -p "$dir"
|
||||||
cp $file $dest
|
cp "$file" "$dest"
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
install_bin() { # <file> [ <symlink> ... ]
|
install_bin() {
|
||||||
|
local src files
|
||||||
src=$1
|
src=$1
|
||||||
files=$1
|
files=$1
|
||||||
[ -x "$src" ] && files="$src $(libs $src)"
|
[ -x "$src" ] && files="$src $(libs $src)"
|
||||||
install_file $files
|
install_file $files
|
||||||
shift
|
|
||||||
for link in "$@"; do {
|
|
||||||
dest="$RAM_ROOT/$link"
|
|
||||||
dir="$(dirname $dest)"
|
|
||||||
mkdir -p "$dir"
|
|
||||||
[ -f "$dest" ] || ln -s $src $dest
|
|
||||||
}; done
|
|
||||||
}
|
|
||||||
|
|
||||||
supivot() { # <new_root> <old_root>
|
|
||||||
/bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o bind $1 $1
|
|
||||||
mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \
|
|
||||||
/bin/mount -o noatime,move /proc $1/proc && \
|
|
||||||
pivot_root $1 $1$2 || {
|
|
||||||
/bin/umount -l $1 $1
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
/bin/mount -o noatime,move $2/sys /sys
|
|
||||||
/bin/mount -o noatime,move $2/dev /dev
|
|
||||||
/bin/mount -o noatime,move $2/tmp /tmp
|
|
||||||
/bin/mount -o noatime,move $2/overlay /overlay 2>&-
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
run_ramfs() { # <command> [...]
|
|
||||||
install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \
|
|
||||||
/sbin/pivot_root /sbin/reboot /bin/sync /bin/dd /bin/grep \
|
|
||||||
/bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" /bin/dd \
|
|
||||||
/bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \
|
|
||||||
/bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \
|
|
||||||
/bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \
|
|
||||||
/bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \
|
|
||||||
/bin/mknod
|
|
||||||
|
|
||||||
install_bin /bin/uclient-fetch /bin/wget
|
|
||||||
install_bin /sbin/mtd
|
|
||||||
install_bin /sbin/mount_root
|
|
||||||
install_bin /sbin/snapshot
|
|
||||||
install_bin /sbin/snapshot_tool
|
|
||||||
install_bin /usr/sbin/ubiupdatevol
|
|
||||||
install_bin /usr/sbin/ubiattach
|
|
||||||
install_bin /usr/sbin/ubiblock
|
|
||||||
install_bin /usr/sbin/ubiformat
|
|
||||||
install_bin /usr/sbin/ubidetach
|
|
||||||
install_bin /usr/sbin/ubirsvol
|
|
||||||
install_bin /usr/sbin/ubirmvol
|
|
||||||
install_bin /usr/sbin/ubimkvol
|
|
||||||
install_bin /usr/sbin/partx
|
|
||||||
install_bin /usr/sbin/losetup
|
|
||||||
install_bin /usr/sbin/mkfs.ext4
|
|
||||||
for file in $RAMFS_COPY_BIN; do
|
|
||||||
install_bin ${file//:/ }
|
|
||||||
done
|
|
||||||
install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA
|
|
||||||
|
|
||||||
[ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
|
|
||||||
|
|
||||||
supivot $RAM_ROOT /mnt || {
|
|
||||||
echo "Failed to switch over to ramfs. Please reboot."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
/bin/mount -o remount,ro /mnt
|
|
||||||
/bin/umount -l /mnt
|
|
||||||
|
|
||||||
grep /overlay /proc/mounts > /dev/null && {
|
|
||||||
/bin/mount -o noatime,remount,ro /overlay
|
|
||||||
/bin/umount -l /overlay
|
|
||||||
}
|
|
||||||
|
|
||||||
# spawn a new shell from ramdisk to reduce the probability of cache issues
|
|
||||||
exec /bin/busybox ash -c "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
kill_remaining() { # [ <signal> ]
|
|
||||||
local sig="${1:-TERM}"
|
|
||||||
echo -n "Sending $sig to remaining processes ... "
|
|
||||||
|
|
||||||
local my_pid=$$
|
|
||||||
local my_ppid=$(cut -d' ' -f4 /proc/$my_pid/stat)
|
|
||||||
local my_ppisupgraded=
|
|
||||||
grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && {
|
|
||||||
local my_ppisupgraded=1
|
|
||||||
}
|
|
||||||
|
|
||||||
local stat
|
|
||||||
for stat in /proc/[0-9]*/stat; do
|
|
||||||
[ -f "$stat" ] || continue
|
|
||||||
|
|
||||||
local pid name state ppid rest
|
|
||||||
read pid name state ppid rest < $stat
|
|
||||||
name="${name#(}"; name="${name%)}"
|
|
||||||
|
|
||||||
local cmdline
|
|
||||||
read cmdline < /proc/$pid/cmdline
|
|
||||||
|
|
||||||
# Skip kernel threads
|
|
||||||
[ -n "$cmdline" ] || continue
|
|
||||||
|
|
||||||
if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then
|
|
||||||
# Running as init process, kill everything except me
|
|
||||||
if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then
|
|
||||||
echo -n "$name "
|
|
||||||
kill -$sig $pid 2>/dev/null
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
case "$name" in
|
|
||||||
# Skip essential services
|
|
||||||
*procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*|*relayd*) : ;;
|
|
||||||
|
|
||||||
# Killable process
|
|
||||||
*)
|
|
||||||
if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
|
|
||||||
echo -n "$name "
|
|
||||||
kill -$sig $pid 2>/dev/null
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
run_hooks() {
|
run_hooks() {
|
||||||
@ -175,28 +65,31 @@ v() {
|
|||||||
[ "$VERBOSE" -ge 1 ] && echo "$@"
|
[ "$VERBOSE" -ge 1 ] && echo "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_string() {
|
||||||
|
local v="$1"
|
||||||
|
v="${v//\\/\\\\}"
|
||||||
|
v="${v//\"/\\\"}"
|
||||||
|
echo "\"$v\""
|
||||||
|
}
|
||||||
|
|
||||||
rootfs_type() {
|
rootfs_type() {
|
||||||
/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }'
|
/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }'
|
||||||
}
|
}
|
||||||
|
|
||||||
get_image() { # <source> [ <command> ]
|
get_image() { # <source> [ <command> ]
|
||||||
local from="$1"
|
local from="$1"
|
||||||
local conc="$2"
|
local cat="$2"
|
||||||
local cmd
|
|
||||||
|
|
||||||
case "$from" in
|
if [ -z "$cat" ]; then
|
||||||
http://*|ftp://*) cmd="wget -O- -q";;
|
local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
|
||||||
*) cmd="cat";;
|
|
||||||
esac
|
|
||||||
if [ -z "$conc" ]; then
|
|
||||||
local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
|
|
||||||
case "$magic" in
|
case "$magic" in
|
||||||
1f8b) conc="zcat";;
|
1f8b) cat="zcat";;
|
||||||
425a) conc="bzcat";;
|
425a) cat="bzcat";;
|
||||||
|
*) cat="cat";;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}"
|
$cat "$from" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
get_magic_word() {
|
get_magic_word() {
|
||||||
@ -328,12 +221,14 @@ default_do_upgrade() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
do_upgrade() {
|
do_upgrade_stage2() {
|
||||||
v "Performing system upgrade..."
|
v "Performing system upgrade..."
|
||||||
if type 'platform_do_upgrade' >/dev/null 2>/dev/null; then
|
if [ -n "$do_upgrade" ]; then
|
||||||
platform_do_upgrade "$ARGV"
|
eval "$do_upgrade"
|
||||||
|
elif type 'platform_do_upgrade' >/dev/null 2>/dev/null; then
|
||||||
|
platform_do_upgrade "$IMAGE"
|
||||||
else
|
else
|
||||||
default_do_upgrade "$ARGV"
|
default_do_upgrade "$IMAGE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then
|
if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then
|
||||||
@ -341,12 +236,11 @@ do_upgrade() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
v "Upgrade completed"
|
v "Upgrade completed"
|
||||||
[ -n "$DELAY" ] && sleep "$DELAY"
|
sleep 1
|
||||||
ask_bool 1 "Reboot" && {
|
|
||||||
v "Rebooting system..."
|
v "Rebooting system..."
|
||||||
umount -a
|
umount -a
|
||||||
reboot -f
|
reboot -f
|
||||||
sleep 5
|
sleep 5
|
||||||
echo b 2>/dev/null >/proc/sysrq-trigger
|
echo b 2>/dev/null >/proc/sysrq-trigger
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
329
package/base-files/files/lib/upgrade/nand.sh
Normal file
329
package/base-files/files/lib/upgrade/nand.sh
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2014 OpenWrt.org
|
||||||
|
#
|
||||||
|
|
||||||
|
. /lib/functions.sh
|
||||||
|
|
||||||
|
# 'kernel' partition on NAND contains the kernel
|
||||||
|
CI_KERNPART="${CI_KERNPART:-kernel}"
|
||||||
|
|
||||||
|
# 'ubi' partition on NAND contains UBI
|
||||||
|
CI_UBIPART="${CI_UBIPART:-ubi}"
|
||||||
|
|
||||||
|
ubi_mknod() {
|
||||||
|
local dir="$1"
|
||||||
|
local dev="/dev/$(basename $dir)"
|
||||||
|
|
||||||
|
[ -e "$dev" ] && return 0
|
||||||
|
|
||||||
|
local devid="$(cat $dir/dev)"
|
||||||
|
local major="${devid%%:*}"
|
||||||
|
local minor="${devid##*:}"
|
||||||
|
mknod "$dev" c $major $minor
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_find_volume() {
|
||||||
|
local ubidevdir ubivoldir
|
||||||
|
ubidevdir="/sys/devices/virtual/ubi/$1"
|
||||||
|
[ ! -d "$ubidevdir" ] && return 1
|
||||||
|
for ubivoldir in $ubidevdir/${1}_*; do
|
||||||
|
[ ! -d "$ubivoldir" ] && continue
|
||||||
|
if [ "$( cat $ubivoldir/name )" = "$2" ]; then
|
||||||
|
basename $ubivoldir
|
||||||
|
ubi_mknod "$ubivoldir"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_find_ubi() {
|
||||||
|
local ubidevdir ubidev mtdnum
|
||||||
|
mtdnum="$( find_mtd_index $1 )"
|
||||||
|
[ ! "$mtdnum" ] && return 1
|
||||||
|
for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
|
||||||
|
[ ! -d "$ubidevdir" ] && continue
|
||||||
|
cmtdnum="$( cat $ubidevdir/mtd_num )"
|
||||||
|
[ ! "$mtdnum" ] && continue
|
||||||
|
if [ "$mtdnum" = "$cmtdnum" ]; then
|
||||||
|
ubidev=$( basename $ubidevdir )
|
||||||
|
ubi_mknod "$ubidevdir"
|
||||||
|
echo $ubidev
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_get_magic_long() {
|
||||||
|
dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||||
|
}
|
||||||
|
|
||||||
|
get_magic_long_tar() {
|
||||||
|
( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
identify_magic() {
|
||||||
|
local magic=$1
|
||||||
|
case "$magic" in
|
||||||
|
"55424923")
|
||||||
|
echo "ubi"
|
||||||
|
;;
|
||||||
|
"31181006")
|
||||||
|
echo "ubifs"
|
||||||
|
;;
|
||||||
|
"68737173")
|
||||||
|
echo "squashfs"
|
||||||
|
;;
|
||||||
|
"d00dfeed")
|
||||||
|
echo "fit"
|
||||||
|
;;
|
||||||
|
"4349"*)
|
||||||
|
echo "combined"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "unknown $magic"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
identify() {
|
||||||
|
identify_magic $(nand_get_magic_long "$1" "${2:-0}")
|
||||||
|
}
|
||||||
|
|
||||||
|
identify_tar() {
|
||||||
|
identify_magic $(get_magic_long_tar "$1" "$2")
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_restore_config() {
|
||||||
|
sync
|
||||||
|
local ubidev=$( nand_find_ubi $CI_UBIPART )
|
||||||
|
local ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
||||||
|
[ ! "$ubivol" ] &&
|
||||||
|
ubivol="$( nand_find_volume $ubidev rootfs )"
|
||||||
|
mkdir /tmp/new_root
|
||||||
|
if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
|
||||||
|
echo "mounting ubifs $ubivol failed"
|
||||||
|
rmdir /tmp/new_root
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
mv "$1" "/tmp/new_root/sysupgrade.tgz"
|
||||||
|
umount /tmp/new_root
|
||||||
|
sync
|
||||||
|
rmdir /tmp/new_root
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_upgrade_prepare_ubi() {
|
||||||
|
local rootfs_length="$1"
|
||||||
|
local rootfs_type="$2"
|
||||||
|
local has_kernel="${3:-0}"
|
||||||
|
local has_env="${4:-0}"
|
||||||
|
|
||||||
|
local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
||||||
|
if [ ! "$mtdnum" ]; then
|
||||||
|
echo "cannot find ubi mtd partition $CI_UBIPART"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||||
|
if [ ! "$ubidev" ]; then
|
||||||
|
ubiattach -m "$mtdnum"
|
||||||
|
sync
|
||||||
|
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! "$ubidev" ]; then
|
||||||
|
ubiformat /dev/mtd$mtdnum -y
|
||||||
|
ubiattach -m "$mtdnum"
|
||||||
|
sync
|
||||||
|
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||||
|
[ "$has_env" -gt 0 ] && {
|
||||||
|
ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
|
||||||
|
ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
|
||||||
|
local root_ubivol="$( nand_find_volume $ubidev rootfs )"
|
||||||
|
local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
||||||
|
|
||||||
|
# remove ubiblock device of rootfs
|
||||||
|
local root_ubiblk="ubiblock${root_ubivol:3}"
|
||||||
|
if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
|
||||||
|
echo "removing $root_ubiblk"
|
||||||
|
if ! ubiblock -r /dev/$root_ubivol; then
|
||||||
|
echo "cannot remove $root_ubiblk"
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# kill volumes
|
||||||
|
[ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || true
|
||||||
|
[ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true
|
||||||
|
[ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
|
||||||
|
|
||||||
|
# update kernel
|
||||||
|
if [ "$has_kernel" = "1" ]; then
|
||||||
|
if ! ubimkvol /dev/$ubidev -N $CI_KERNPART -s $kernel_length; then
|
||||||
|
echo "cannot create kernel volume"
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# update rootfs
|
||||||
|
local root_size_param
|
||||||
|
if [ "$rootfs_type" = "ubifs" ]; then
|
||||||
|
root_size_param="-m"
|
||||||
|
else
|
||||||
|
root_size_param="-s $rootfs_length"
|
||||||
|
fi
|
||||||
|
if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then
|
||||||
|
echo "cannot create rootfs volume"
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# create rootfs_data for non-ubifs rootfs
|
||||||
|
if [ "$rootfs_type" != "ubifs" ]; then
|
||||||
|
if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
|
||||||
|
echo "cannot initialize rootfs_data volume"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sync
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_do_upgrade_success() {
|
||||||
|
local conf_tar="/tmp/sysupgrade.tgz"
|
||||||
|
|
||||||
|
sync
|
||||||
|
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||||
|
echo "sysupgrade successful"
|
||||||
|
umount -a
|
||||||
|
reboot -f
|
||||||
|
}
|
||||||
|
|
||||||
|
# Flash the UBI image to MTD partition
|
||||||
|
nand_upgrade_ubinized() {
|
||||||
|
local ubi_file="$1"
|
||||||
|
local mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
||||||
|
|
||||||
|
[ ! "$mtdnum" ] && {
|
||||||
|
CI_UBIPART="rootfs"
|
||||||
|
mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! "$mtdnum" ]; then
|
||||||
|
echo "cannot find mtd device $CI_UBIPART"
|
||||||
|
umount -a
|
||||||
|
reboot -f
|
||||||
|
fi
|
||||||
|
|
||||||
|
local mtddev="/dev/mtd${mtdnum}"
|
||||||
|
ubidetach -p "${mtddev}" || true
|
||||||
|
sync
|
||||||
|
ubiformat "${mtddev}" -y -f "${ubi_file}"
|
||||||
|
ubiattach -p "${mtddev}"
|
||||||
|
nand_do_upgrade_success
|
||||||
|
}
|
||||||
|
|
||||||
|
# Write the UBIFS image to UBI volume
|
||||||
|
nand_upgrade_ubifs() {
|
||||||
|
local rootfs_length=`(cat $1 | wc -c) 2> /dev/null`
|
||||||
|
|
||||||
|
nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
|
||||||
|
|
||||||
|
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||||
|
local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
||||||
|
ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
|
||||||
|
|
||||||
|
nand_do_upgrade_success
|
||||||
|
}
|
||||||
|
|
||||||
|
nand_upgrade_tar() {
|
||||||
|
local tar_file="$1"
|
||||||
|
local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
|
||||||
|
|
||||||
|
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
|
||||||
|
board_dir=${board_dir%/}
|
||||||
|
|
||||||
|
local kernel_length=`(tar xf $tar_file ${board_dir}/kernel -O | wc -c) 2> /dev/null`
|
||||||
|
local rootfs_length=`(tar xf $tar_file ${board_dir}/root -O | wc -c) 2> /dev/null`
|
||||||
|
|
||||||
|
local rootfs_type="$(identify_tar "$tar_file" ${board_dir}/root)"
|
||||||
|
|
||||||
|
local has_kernel=1
|
||||||
|
local has_env=0
|
||||||
|
|
||||||
|
[ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && {
|
||||||
|
tar xf $tar_file ${board_dir}/kernel -O | mtd write - $CI_KERNPART
|
||||||
|
}
|
||||||
|
[ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0
|
||||||
|
|
||||||
|
nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env"
|
||||||
|
|
||||||
|
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||||
|
[ "$has_kernel" = "1" ] && {
|
||||||
|
local kern_ubivol="$(nand_find_volume $ubidev $CI_KERNPART)"
|
||||||
|
tar xf $tar_file ${board_dir}/kernel -O | \
|
||||||
|
ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
|
||||||
|
}
|
||||||
|
|
||||||
|
local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
||||||
|
tar xf $tar_file ${board_dir}/root -O | \
|
||||||
|
ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
|
||||||
|
|
||||||
|
nand_do_upgrade_success
|
||||||
|
}
|
||||||
|
|
||||||
|
# Recognize type of passed file and start the upgrade process
|
||||||
|
nand_do_upgrade() {
|
||||||
|
if [ -n "$IS_PRE_UPGRADE" ]; then
|
||||||
|
# Previously, nand_do_upgrade was called from the platform_pre_upgrade
|
||||||
|
# hook; this piece of code handles scripts that haven't been
|
||||||
|
# updated. All scripts should gradually move to call nand_do_upgrade
|
||||||
|
# from platform_do_upgrade instead.
|
||||||
|
export do_upgrade="nand_do_upgrade '$1'"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local file_type=$(identify $1)
|
||||||
|
|
||||||
|
if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then
|
||||||
|
platform_nand_pre_upgrade "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs"
|
||||||
|
|
||||||
|
case "$file_type" in
|
||||||
|
"ubi") nand_upgrade_ubinized $1;;
|
||||||
|
"ubifs") nand_upgrade_ubifs $1;;
|
||||||
|
*) nand_upgrade_tar $1;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
|
||||||
|
# 3 types of files:
|
||||||
|
# 1) UBI - should contain an ubinized image, header is checked for the proper
|
||||||
|
# MAGIC
|
||||||
|
# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume,
|
||||||
|
# header is checked for the proper MAGIC
|
||||||
|
# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty
|
||||||
|
# "CONTROL" file (at this point its content isn't verified)
|
||||||
|
#
|
||||||
|
# You usually want to call this function in platform_check_image.
|
||||||
|
#
|
||||||
|
# $(1): board name, used in case of passing TAR file
|
||||||
|
# $(2): file to be checked
|
||||||
|
nand_do_platform_check() {
|
||||||
|
local board_name="$1"
|
||||||
|
local tar_file="$2"
|
||||||
|
local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null`
|
||||||
|
local file_type="$(identify $2)"
|
||||||
|
|
||||||
|
[ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
|
||||||
|
echo "Invalid sysupgrade file."
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
150
package/base-files/files/lib/upgrade/stage2
Executable file
150
package/base-files/files/lib/upgrade/stage2
Executable file
@ -0,0 +1,150 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /lib/functions.sh
|
||||||
|
. /lib/functions/system.sh
|
||||||
|
|
||||||
|
export IMAGE="$1"
|
||||||
|
COMMAND="$2"
|
||||||
|
|
||||||
|
export ARGV="$IMAGE"
|
||||||
|
export ARGC=1
|
||||||
|
|
||||||
|
export SAVE_CONFIG=1
|
||||||
|
export SAVE_PARTITIONS=1
|
||||||
|
|
||||||
|
export INTERACTIVE=0
|
||||||
|
export VERBOSE=1
|
||||||
|
export CONFFILES=/tmp/sysupgrade.conffiles
|
||||||
|
export CONF_TAR=/tmp/sysupgrade.tgz
|
||||||
|
|
||||||
|
RAMFS_COPY_BIN= # extra programs for temporary ramfs root
|
||||||
|
RAMFS_COPY_DATA= # extra data files
|
||||||
|
|
||||||
|
|
||||||
|
[ -f "$CONF_TAR" ] || export SAVE_CONFIG=0
|
||||||
|
[ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0
|
||||||
|
|
||||||
|
include /lib/upgrade
|
||||||
|
|
||||||
|
|
||||||
|
supivot() { # <new_root> <old_root>
|
||||||
|
/bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o bind $1 $1
|
||||||
|
mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \
|
||||||
|
/bin/mount -o noatime,move /proc $1/proc && \
|
||||||
|
pivot_root $1 $1$2 || {
|
||||||
|
/bin/umount -l $1 $1
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
/bin/mount -o noatime,move $2/sys /sys
|
||||||
|
/bin/mount -o noatime,move $2/dev /dev
|
||||||
|
/bin/mount -o noatime,move $2/tmp /tmp
|
||||||
|
/bin/mount -o noatime,move $2/overlay /overlay 2>&-
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_to_ramfs() {
|
||||||
|
for binary in \
|
||||||
|
/bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \
|
||||||
|
pivot_root mount_root reboot sync kill sleep \
|
||||||
|
md5sum hexdump cat zcat bzcat dd tar \
|
||||||
|
ls basename find cp mv rm mkdir rmdir mknod touch chmod \
|
||||||
|
'[' printf wc grep awk sed cut \
|
||||||
|
mtd partx losetup mkfs.ext4 \
|
||||||
|
ubiupdatevol ubiattach ubiblock ubiformat \
|
||||||
|
ubidetach ubirsvol ubirmvol ubimkvol \
|
||||||
|
snapshot snapshot_tool \
|
||||||
|
$RAMFS_COPY_BIN
|
||||||
|
do
|
||||||
|
local file="$(which "$binary" 2>/dev/null)"
|
||||||
|
[ -n "$file" ] && install_bin "$file"
|
||||||
|
done
|
||||||
|
install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA
|
||||||
|
|
||||||
|
[ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
|
||||||
|
|
||||||
|
supivot $RAM_ROOT /mnt || {
|
||||||
|
echo "Failed to switch over to ramfs. Please reboot."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
/bin/mount -o remount,ro /mnt
|
||||||
|
/bin/umount -l /mnt
|
||||||
|
|
||||||
|
grep /overlay /proc/mounts > /dev/null && {
|
||||||
|
/bin/mount -o noatime,remount,ro /overlay
|
||||||
|
/bin/umount -l /overlay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kill_remaining() { # [ <signal> [ <loop> ] ]
|
||||||
|
local loop_limit=10
|
||||||
|
|
||||||
|
local sig="${1:-TERM}"
|
||||||
|
local loop="${2:-0}"
|
||||||
|
local run=true
|
||||||
|
local stat
|
||||||
|
local proc_ppid=$(cut -d' ' -f4 /proc/$$/stat)
|
||||||
|
|
||||||
|
echo -n "Sending $sig to remaining processes ... "
|
||||||
|
|
||||||
|
while $run; do
|
||||||
|
run=false
|
||||||
|
for stat in /proc/[0-9]*/stat; do
|
||||||
|
[ -f "$stat" ] || continue
|
||||||
|
|
||||||
|
local pid name state ppid rest
|
||||||
|
read pid name state ppid rest < $stat
|
||||||
|
name="${name#(}"; name="${name%)}"
|
||||||
|
|
||||||
|
# Skip PID1, our parent, ourself and our children
|
||||||
|
[ $pid -ne 1 -a $pid -ne $proc_ppid -a $pid -ne $$ -a $ppid -ne $$ ] || continue
|
||||||
|
|
||||||
|
local cmdline
|
||||||
|
read cmdline < /proc/$pid/cmdline
|
||||||
|
|
||||||
|
# Skip kernel threads
|
||||||
|
[ -n "$cmdline" ] || continue
|
||||||
|
|
||||||
|
echo -n "$name "
|
||||||
|
kill -$sig $pid 2>/dev/null
|
||||||
|
|
||||||
|
[ $loop -eq 1 ] && run=true
|
||||||
|
done
|
||||||
|
|
||||||
|
let loop_limit--
|
||||||
|
[ $loop_limit -eq 0 ] && {
|
||||||
|
echo
|
||||||
|
echo "Failed to kill all processes."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
killall -9 telnetd
|
||||||
|
killall -9 dropbear
|
||||||
|
killall -9 ash
|
||||||
|
|
||||||
|
kill_remaining TERM
|
||||||
|
sleep 3
|
||||||
|
kill_remaining KILL 1
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
|
||||||
|
IS_PRE_UPGRADE=1 platform_pre_upgrade "$IMAGE"
|
||||||
|
|
||||||
|
# Needs to be unset again because of busybox weirdness ...
|
||||||
|
IS_PRE_UPGRADE=
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$(rootfs_type)" ]; then
|
||||||
|
echo "Switching to ramdisk..."
|
||||||
|
switch_to_ramfs
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Exec new shell from ramfs
|
||||||
|
exec /bin/busybox ash -c "$COMMAND"
|
@ -1,17 +1,15 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
. /lib/functions/system.sh
|
. /lib/functions/system.sh
|
||||||
|
|
||||||
# initialize defaults
|
# initialize defaults
|
||||||
RAMFS_COPY_BIN="" # extra programs for temporary ramfs root
|
|
||||||
RAMFS_COPY_DATA="" # extra data files
|
|
||||||
export MTD_CONFIG_ARGS=""
|
export MTD_CONFIG_ARGS=""
|
||||||
export INTERACTIVE=0
|
export INTERACTIVE=0
|
||||||
export VERBOSE=1
|
export VERBOSE=1
|
||||||
export SAVE_CONFIG=1
|
export SAVE_CONFIG=1
|
||||||
export SAVE_OVERLAY=0
|
export SAVE_OVERLAY=0
|
||||||
export SAVE_PARTITIONS=1
|
export SAVE_PARTITIONS=1
|
||||||
export DELAY=
|
|
||||||
export CONF_IMAGE=
|
export CONF_IMAGE=
|
||||||
export CONF_BACKUP_LIST=0
|
export CONF_BACKUP_LIST=0
|
||||||
export CONF_BACKUP=
|
export CONF_BACKUP=
|
||||||
@ -25,7 +23,6 @@ export TEST=0
|
|||||||
while [ -n "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
-i) export INTERACTIVE=1;;
|
-i) export INTERACTIVE=1;;
|
||||||
-d) export DELAY="$2"; shift;;
|
|
||||||
-v) export VERBOSE="$(($VERBOSE + 1))";;
|
-v) export VERBOSE="$(($VERBOSE + 1))";;
|
||||||
-q) export VERBOSE="$(($VERBOSE - 1))";;
|
-q) export VERBOSE="$(($VERBOSE - 1))";;
|
||||||
-n) export SAVE_CONFIG=0;;
|
-n) export SAVE_CONFIG=0;;
|
||||||
@ -50,10 +47,9 @@ done
|
|||||||
export CONFFILES=/tmp/sysupgrade.conffiles
|
export CONFFILES=/tmp/sysupgrade.conffiles
|
||||||
export CONF_TAR=/tmp/sysupgrade.tgz
|
export CONF_TAR=/tmp/sysupgrade.tgz
|
||||||
|
|
||||||
export ARGV="$*"
|
IMAGE="$1"
|
||||||
export ARGC="$#"
|
|
||||||
|
|
||||||
[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
|
[ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: $0 [<upgrade-option>...] <image file or URL>
|
Usage: $0 [<upgrade-option>...] <image file or URL>
|
||||||
$0 [-q] [-i] <backup-command> <file>
|
$0 [-q] [-i] <backup-command> <file>
|
||||||
@ -90,7 +86,7 @@ EOF
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -n "$ARGV" -a -n "$NEED_IMAGE" ] && {
|
[ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && {
|
||||||
cat <<-EOF
|
cat <<-EOF
|
||||||
-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade.
|
-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade.
|
||||||
Do not specify both -b|-r and a firmware image.
|
Do not specify both -b|-r and a firmware image.
|
||||||
@ -112,14 +108,8 @@ add_uci_conffiles() {
|
|||||||
|
|
||||||
add_overlayfiles() {
|
add_overlayfiles() {
|
||||||
local file="$1"
|
local file="$1"
|
||||||
if [ -d /overlay/upper ]; then
|
find /overlay/upper/etc/ -type f -o -type l | sed \
|
||||||
local overlaydir="/overlay/upper"
|
|
||||||
else
|
|
||||||
local overlaydir="/overlay"
|
|
||||||
fi
|
|
||||||
find $overlaydir/etc/ -type f -o -type l | sed \
|
|
||||||
-e 's,^/overlay\/upper/,/,' \
|
-e 's,^/overlay\/upper/,/,' \
|
||||||
-e 's,^/overlay/,/,' \
|
|
||||||
-e '\,/META_[a-zA-Z0-9]*$,d' \
|
-e '\,/META_[a-zA-Z0-9]*$,d' \
|
||||||
-e '\,/functions.sh$,d' \
|
-e '\,/functions.sh$,d' \
|
||||||
-e '\,/[^/]*-opkg$,d' \
|
-e '\,/[^/]*-opkg$,d' \
|
||||||
@ -130,20 +120,26 @@ add_overlayfiles() {
|
|||||||
# hooks
|
# hooks
|
||||||
sysupgrade_image_check="fwtool_check_image platform_check_image"
|
sysupgrade_image_check="fwtool_check_image platform_check_image"
|
||||||
sysupgrade_pre_upgrade="fwtool_pre_upgrade"
|
sysupgrade_pre_upgrade="fwtool_pre_upgrade"
|
||||||
[ $SAVE_OVERLAY = 0 -o ! -d /overlay/etc ] && \
|
|
||||||
sysupgrade_init_conffiles="add_uci_conffiles" || \
|
if [ $SAVE_OVERLAY = 1 ]; then
|
||||||
|
[ ! -d /overlay/upper/etc ] && {
|
||||||
|
echo "Cannot find '/overlay/upper/etc', required for '-c'"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
sysupgrade_init_conffiles="add_overlayfiles"
|
sysupgrade_init_conffiles="add_overlayfiles"
|
||||||
|
else
|
||||||
|
sysupgrade_init_conffiles="add_uci_conffiles"
|
||||||
|
fi
|
||||||
|
|
||||||
include /lib/upgrade
|
include /lib/upgrade
|
||||||
|
|
||||||
[ "$1" = "nand" ] && nand_upgrade_stage2 $@
|
|
||||||
|
|
||||||
do_save_conffiles() {
|
do_save_conffiles() {
|
||||||
local conf_tar="${1:-$CONF_TAR}"
|
local conf_tar="${1:-$CONF_TAR}"
|
||||||
|
|
||||||
[ -z "$(rootfs_type)" ] && {
|
[ -z "$(rootfs_type)" ] && {
|
||||||
echo "Cannot save config while running from ramdisk."
|
echo "Cannot save config while running from ramdisk."
|
||||||
ask_bool 0 "Abort" && exit
|
ask_bool 0 "Abort" && exit
|
||||||
|
rm -f "$conf_tar"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
|
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
|
||||||
@ -157,7 +153,7 @@ do_save_conffiles() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if [ $CONF_BACKUP_LIST -eq 1 ]; then
|
if [ $CONF_BACKUP_LIST -eq 1 ]; then
|
||||||
add_uci_conffiles "$CONFFILES"
|
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
|
||||||
cat "$CONFFILES"
|
cat "$CONFFILES"
|
||||||
rm -f "$CONFFILES"
|
rm -f "$CONFFILES"
|
||||||
exit 0
|
exit 0
|
||||||
@ -184,8 +180,33 @@ type platform_check_image >/dev/null 2>/dev/null || {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "$IMAGE" in
|
||||||
|
http://*)
|
||||||
|
wget -O/tmp/sysupgrade.img "$IMAGE"
|
||||||
|
IMAGE=/tmp/sysupgrade.img
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
IMAGE="$(readlink -f "$IMAGE")"
|
||||||
|
|
||||||
|
case "$IMAGE" in
|
||||||
|
'')
|
||||||
|
echo "Image file not found."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
/tmp/*) ;;
|
||||||
|
*)
|
||||||
|
v "Image not in /tmp, copying..."
|
||||||
|
cp -f "$IMAGE" /tmp/sysupgrade.img
|
||||||
|
IMAGE=/tmp/sysupgrade.img
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
export ARGV="$IMAGE"
|
||||||
|
export ARGC=1
|
||||||
|
|
||||||
for check in $sysupgrade_image_check; do
|
for check in $sysupgrade_image_check; do
|
||||||
( eval "$check \"\$ARGV\"" ) || {
|
( $check "$IMAGE" ) || {
|
||||||
if [ $FORCE -eq 1 ]; then
|
if [ $FORCE -eq 1 ]; then
|
||||||
echo "Image check '$check' failed but --force given - will update anyway!"
|
echo "Image check '$check' failed but --force given - will update anyway!"
|
||||||
break
|
break
|
||||||
@ -211,6 +232,7 @@ elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
|
|||||||
[ $TEST -eq 1 ] || do_save_conffiles
|
[ $TEST -eq 1 ] || do_save_conffiles
|
||||||
export SAVE_CONFIG=1
|
export SAVE_CONFIG=1
|
||||||
else
|
else
|
||||||
|
[ $TEST -eq 1 ] || rm -f "$CONF_TAR"
|
||||||
export SAVE_CONFIG=0
|
export SAVE_CONFIG=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -218,28 +240,26 @@ if [ $TEST -eq 1 ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $SAVE_PARTITIONS -eq 0 ]; then
|
||||||
|
touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap
|
||||||
|
else
|
||||||
|
rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap
|
||||||
|
fi
|
||||||
|
|
||||||
run_hooks "" $sysupgrade_pre_upgrade
|
run_hooks "" $sysupgrade_pre_upgrade
|
||||||
|
|
||||||
# Some platforms/devices may want different sysupgrade process, e.g. without
|
install_bin /sbin/upgraded
|
||||||
# killing processes yet or calling ubus system upgrade method.
|
v "Commencing upgrade. All shell sessions will be closed now."
|
||||||
# This is needed e.g. on NAND devices where we just want to trigger stage1 at
|
|
||||||
# this point.
|
|
||||||
if type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
||||||
platform_pre_upgrade "$ARGV"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ubus call system upgrade
|
COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
|
||||||
touch /tmp/sysupgrade
|
|
||||||
|
|
||||||
if [ ! -f /tmp/failsafe ] ; then
|
if [ -n "$FAILSAFE" ]; then
|
||||||
kill_remaining TERM
|
printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
|
||||||
sleep 3
|
lock -u /tmp/.failsafe
|
||||||
kill_remaining KILL
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$(rootfs_type)" ]; then
|
|
||||||
v "Switching to ramdisk..."
|
|
||||||
run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade'
|
|
||||||
else
|
else
|
||||||
do_upgrade
|
ubus call system sysupgrade "{
|
||||||
|
\"prefix\": $(json_string "$RAM_ROOT"),
|
||||||
|
\"path\": $(json_string "$IMAGE"),
|
||||||
|
\"command\": $(json_string "$COMMAND")
|
||||||
|
}"
|
||||||
fi
|
fi
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
NAME="%D"
|
NAME="%D"
|
||||||
VERSION="%V, %N"
|
VERSION="%V"
|
||||||
ID="%d"
|
ID="%d"
|
||||||
ID_LIKE="lede openwrt"
|
ID_LIKE="lede openwrt"
|
||||||
PRETTY_NAME="%D %N %V"
|
PRETTY_NAME="%D %V"
|
||||||
VERSION_ID="%v"
|
VERSION_ID="%v"
|
||||||
HOME_URL="%m"
|
HOME_URL="%m"
|
||||||
BUG_URL="%b"
|
BUG_URL="%b"
|
||||||
@ -15,4 +15,4 @@ LEDE_DEVICE_MANUFACTURER="%M"
|
|||||||
LEDE_DEVICE_MANUFACTURER_URL="%m"
|
LEDE_DEVICE_MANUFACTURER_URL="%m"
|
||||||
LEDE_DEVICE_PRODUCT="%P"
|
LEDE_DEVICE_PRODUCT="%P"
|
||||||
LEDE_DEVICE_REVISION="%h"
|
LEDE_DEVICE_REVISION="%h"
|
||||||
LEDE_RELEASE="%D %N %V %C"
|
LEDE_RELEASE="%D %V %C"
|
||||||
|
@ -158,18 +158,11 @@ if VERSIONOPT
|
|||||||
config VERSION_DIST
|
config VERSION_DIST
|
||||||
string
|
string
|
||||||
prompt "Release distribution"
|
prompt "Release distribution"
|
||||||
default "LEDE"
|
default "OpenWrt"
|
||||||
help
|
help
|
||||||
This is the name of the release distribution.
|
This is the name of the release distribution.
|
||||||
If unspecified, it defaults to OpenWrt.
|
If unspecified, it defaults to OpenWrt.
|
||||||
|
|
||||||
config VERSION_NICK
|
|
||||||
string
|
|
||||||
prompt "Release version nickname"
|
|
||||||
help
|
|
||||||
This is the release codename embedded in the image.
|
|
||||||
If unspecified, it defaults to the name of source branch.
|
|
||||||
|
|
||||||
config VERSION_NUMBER
|
config VERSION_NUMBER
|
||||||
string
|
string
|
||||||
prompt "Release version number"
|
prompt "Release version number"
|
||||||
@ -190,7 +183,7 @@ if VERSIONOPT
|
|||||||
config VERSION_REPO
|
config VERSION_REPO
|
||||||
string
|
string
|
||||||
prompt "Release repository"
|
prompt "Release repository"
|
||||||
default "http://downloads.lede-project.org/releases/17.01-SNAPSHOT"
|
default "http://downloads.lede-project.org/snapshots"
|
||||||
help
|
help
|
||||||
This is the repository address embedded in the image, it defaults
|
This is the repository address embedded in the image, it defaults
|
||||||
to the trunk snapshot repo; the url may contain the following placeholders:
|
to the trunk snapshot repo; the url may contain the following placeholders:
|
||||||
@ -199,15 +192,13 @@ if VERSIONOPT
|
|||||||
%v .. Configured release version number or "snapshot", lowercase
|
%v .. Configured release version number or "snapshot", lowercase
|
||||||
%C .. Configured release revision code or value of %R, uppercase
|
%C .. Configured release revision code or value of %R, uppercase
|
||||||
%c .. Configured release revision code or value of %R, lowercase
|
%c .. Configured release revision code or value of %R, lowercase
|
||||||
%N .. Release name, uppercase
|
%D .. Distribution name or "OpenWrt", uppercase
|
||||||
%n .. Release name, lowercase
|
%d .. Distribution name or "openwrt", lowercase
|
||||||
%D .. Distribution name or "Lede", uppercase
|
|
||||||
%d .. Distribution name or "lede", lowercase
|
|
||||||
%T .. Target name
|
%T .. Target name
|
||||||
%S .. Target/Subtarget name
|
%S .. Target/Subtarget name
|
||||||
%A .. Package architecture
|
%A .. Package architecture
|
||||||
%t .. Build taint flags, e.g. "no-all busybox"
|
%t .. Build taint flags, e.g. "no-all busybox"
|
||||||
%M .. Manufacturer name or "Lede"
|
%M .. Manufacturer name or "OpenWrt"
|
||||||
%P .. Product name or "Generic"
|
%P .. Product name or "Generic"
|
||||||
%h .. Hardware revision or "v0"
|
%h .. Hardware revision or "v0"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user