Merge pull request #14 from ccrisan/configurable-panic-action

Intelligent Panic Action
This commit is contained in:
Calin Crisan 2018-10-16 23:23:06 +03:00 committed by GitHub
commit 3b4da58f69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 198 additions and 158 deletions

View File

@ -2,26 +2,26 @@
test -n "$os_version" || source /etc/init.d/base
msg_begin "Detecting disk device"
root_dev=$(cat /proc/cmdline | grep -oE 'root=[/a-z0-9]+' | cut -d '=' -f 2)
if [[ "$root_dev" =~ ^([/a-z0-9]+)(p[0-9])$ ]]; then # e.g. /dev/mmcblk0p2
disk_dev=${BASH_REMATCH[1]}
boot_dev=${disk_dev}p1
data_dev=${disk_dev}p3
elif [[ "$root_dev" =~ ^([/a-z0-9]+)([0-9])$ ]]; then # e.g. /dev/sdc2
disk_dev=${BASH_REMATCH[1]}
boot_dev=${disk_dev}1
data_dev=${disk_dev}3
else
msg_fail "unknown ($root_dev)"
exit 1
fi
msg_done "$disk_dev"
test -b $data_dev && exit 0
case "$1" in
start)
msg_begin "Detecting disk device"
root_dev=$(cat /proc/cmdline | grep -oE 'root=[/a-z0-9]+' | cut -d '=' -f 2)
if [[ "$root_dev" =~ ^([/a-z0-9]+)(p[0-9])$ ]]; then # e.g. /dev/mmcblk0p2
disk_dev=${BASH_REMATCH[1]}
boot_dev=${disk_dev}p1
data_dev=${disk_dev}p3
elif [[ "$root_dev" =~ ^([/a-z0-9]+)([0-9])$ ]]; then # e.g. /dev/sdc2
disk_dev=${BASH_REMATCH[1]}
boot_dev=${disk_dev}1
data_dev=${disk_dev}3
else
msg_fail "unknown ($root_dev)"
exit 1
fi
msg_done "$disk_dev"
test -b $data_dev && exit 0
msg_begin "Creating data partition"
root_end=$(partx -s -g -o END $root_dev)
data_start=$(($root_end + 1))
@ -68,5 +68,3 @@ case "$1" in
exit 1
esac
# always exit with a successful status
exit 0

View File

@ -6,7 +6,7 @@ mount_fs() {
msg_begin "Mounting filesystems"
/bin/mount -T /etc/fstab.disk -a &&
/bin/mount -T /etc/fstab.extra -a &&
if [ -r /data/etc/fstab.user ]; then /bin/mount -T /data/etc/fstab.user -a; fi
if [[ -r /data/etc/fstab.user ]]; then /bin/mount -T /data/etc/fstab.user -a; fi
test $? == 0 && msg_done || msg_fail
}
@ -29,6 +29,8 @@ mk_tty_login() {
case "$1" in
start)
mount_fs
# we need to source conf again, now that /data is available
test -n "$os_debug" || source /etc/init.d/conf
test "$os_debug" == "true" && remount_rw
mk_tty_login

View File

@ -9,11 +9,11 @@ case "$1" in
start)
msg_begin "Loading kernel modules"
if [ -r $sys_modules_file ]; then
if [[ -r $sys_modules_file ]]; then
cat $sys_modules_file | while read line; do test -n "$line" && /sbin/modprobe $line &>/dev/null; done
fi
if [ -r $modules_file ]; then
if [[ -r $modules_file ]]; then
cat $modules_file | while read line; do test -n "$line" && /sbin/modprobe $line &>/dev/null; done
fi

View File

@ -10,15 +10,15 @@ case "$1" in
start)
msg_begin "Setting hostname"
if ! [ -f $hostname_file ]; then
if [ -f $boot_hostname_file ]; then
if ! [[ -f $hostname_file ]]; then
if [[ -f $boot_hostname_file ]]; then
cp $boot_hostname_file $hostname_file
elif [ -f $sys_hostname_file ]; then
elif [[ -f $sys_hostname_file ]]; then
cp $sys_hostname_file $hostname_file
fi
fi
if [ -f $hostname_file ]; then
if [[ -f $hostname_file ]]; then
hostname=$(cat $hostname_file)
else
hostname="$os_prefix-$board_sn"

View File

@ -16,7 +16,7 @@ test "$hash" == "$sys_hash" && exit 0
test -d $post_upgrade_dir || exit 0
function version_gt() {
if [ "$1" != "$2" ] && [ $(echo -e "$2\n$1" | sort -t . | head -n 1) == "$2" ]; then
if [[ "$1" != "$2" ]] && [[ $(echo -e "$2\n$1" | sort -t . | head -n 1) == "$2" ]]; then
return 0
else
return 1
@ -29,7 +29,7 @@ function run_post_upgrade() {
versions=$(ls -1 $post_upgrade_dir | cut -d '.' -f 1)
for v in $versions; do
if [ -z "$version" ] || version_gt $v $version; then
if [[ -z "$version" ]] || version_gt $v $version; then
msg_begin "Post-upgrading to version $v"
out=$($post_upgrade_dir/$v.sh 2>&1)
test $? == 0 && msg_done || msg_fail

View File

@ -14,10 +14,10 @@ link_watch_timeout=20
test -f $watch_conf && source $watch_conf
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi
@ -34,8 +34,8 @@ watch() {
while true; do
sleep 5
if ! running; then
logger -t hostapd -s "dead, rebooting"
reboot
logger -t hostapd -s "dead, calling panic action"
panic_action hostapd
break
fi
done
@ -49,7 +49,7 @@ start() {
while ! ifconfig $iface >/dev/null 2>&1; do
sleep 1
count=$(($count + 1))
if [ $count -ge 5 ]; then
if [[ $count -ge 5 ]]; then
msg_fail "no device"
return 1
fi
@ -61,7 +61,7 @@ start() {
iwconfig $iface power off &> /dev/null
$prog $conf &> $log &
if [ "$link_watch" == "yes" ]; then
if [[ "$link_watch" == "yes" ]]; then
watch &
fi

View File

@ -12,20 +12,20 @@ sys_watch_conf="/etc/watch.conf"
boot_watch_conf="/boot/watch.conf"
watch_conf="/data/etc/watch.conf"
if ! [ -f $watch_conf ]; then
if [ -f $boot_watch_conf ]; then
if ! [[ -f $watch_conf ]]; then
if [[ -f $boot_watch_conf ]]; then
cp $boot_watch_conf $watch_conf
elif [ -f $sys_watch_conf ]; then
elif [[ -f $sys_watch_conf ]]; then
cp $sys_watch_conf $watch_conf
fi
fi
source $watch_conf
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi
@ -39,7 +39,6 @@ ssid=$(cat $conf | grep ssid | grep -v scan_ssid | cut -d '"' -f 2)
test -n "$ssid" || exit 0
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
test "$os_networkless" == "true" && exit 0
@ -54,12 +53,12 @@ watch() {
if connected; then
count=0
else
if [ $count -lt $link_watch_timeout ]; then
if [[ $count -lt $link_watch_timeout ]]; then
count=$(($count + 5))
logger -t wifi -s "disconnected"
else
logger -t wifi -s "disconnected for $link_watch_timeout seconds, rebooting"
reboot
logger -t wifi -s "disconnected for $link_watch_timeout seconds, calling panic action"
panic_action wifi
fi
fi
done
@ -75,7 +74,7 @@ start() {
while ! ifconfig $os_wlan >/dev/null 2>&1; do
sleep 1
count=$(($count + 1))
if [ $count -ge 5 ]; then
if [[ $count -ge 5 ]]; then
msg_fail "no device"
return 1
fi
@ -94,7 +93,7 @@ start() {
break
fi
if [ $count -gt $link_watch_timeout ] || ! pidof wpa_supplicant > /dev/null; then
if [[ $count -gt $link_watch_timeout ]] || ! pidof wpa_supplicant > /dev/null; then
test -n "$module" && msg_fail "failed ($module)"|| msg_fail
return 1
fi
@ -102,7 +101,7 @@ start() {
count=$(($count + 1))
done
if [ "$link_watch" == "true" ]; then
if [[ "$link_watch" == "true" ]]; then
watch &
fi

View File

@ -11,10 +11,10 @@ watch_conf="/data/etc/watch.conf"
source $watch_conf
if ! [ -d $conf ]; then
if [ -d $boot_conf ]; then
if ! [[ -d $conf ]]; then
if [[ -d $boot_conf ]]; then
cp -r $boot_conf $conf
elif [ -d $sys_conf ]; then
elif [[ -d $sys_conf ]]; then
cp -r $sys_conf $conf
fi
fi
@ -23,7 +23,6 @@ test -e $conf/modem || exit 0
test -e $conf/apn || exit 0
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
test "$os_networkless" == "true" && exit 0
@ -38,12 +37,12 @@ watch() {
if connected; then
count=0
else
if [ $count -lt $link_watch_timeout ]; then
if [[ $count -lt $link_watch_timeout ]]; then
count=$(($count + 5))
logger -t ppp -s "disconnected"
else
logger -t ppp -s "disconnected for $link_watch_timeout seconds, rebooting"
reboot
logger -t ppp -s "disconnected for $link_watch_timeout seconds, calling panic action"
panic_action ppp
fi
fi
done
@ -65,13 +64,13 @@ start() {
# wait for modem
modem=$(head -n 1 $conf/modem)
if ! [ -e /dev/$modem ]; then
if ! [[ -e /dev/$modem ]]; then
udev_trigger_add 4 &
fi
count=0
while true; do
if [ -e /dev/$modem ] || [ $count -gt $link_watch_timeout ]; then
if [[ -e /dev/$modem ]] || [[ $count -gt $link_watch_timeout ]]; then
break
fi
@ -79,7 +78,7 @@ start() {
sleep 1
done
if ! [ -e /dev/$modem ]; then
if ! [[ -e /dev/$modem ]]; then
msg_fail "modem /dev/$modem not present"
return
fi
@ -93,7 +92,7 @@ start() {
break
fi
if [ $count -gt $link_watch_timeout ] || ! pidof pppd > /dev/null; then
if [[ $count -gt $link_watch_timeout ]] || ! pidof pppd > /dev/null; then
msg_fail
return
fi
@ -101,7 +100,7 @@ start() {
count=$(($count + 1))
done
if [ "$link_watch" == "true" ]; then
if [[ "$link_watch" == "true" ]]; then
watch &
fi

View File

@ -4,10 +4,10 @@ sys_conf="/etc/bluetooth.conf"
boot_conf="/boot/bluetooth.conf"
conf="/data/etc/bluetooth.conf"
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi
@ -46,10 +46,10 @@ start() {
while ! hciconfig $hci &>/dev/null; do
sleep 1
count=$(($count + 1))
if [ $count -ge 10 ]; then
if [[ $count -ge 10 ]]; then
msg_fail "no device"
logger -t bluetooth -s "bluetooth device not available, rebooting"
reboot
logger -t bluetooth -s "bluetooth device not available, calling panic action"
panic_action bluetooth
return 1
fi
done

View File

@ -11,10 +11,10 @@ link_nego_timeout=10
source $watch_conf
if ! [ -f $static_conf ]; then
if [ -f $boot_static_conf ]; then
if ! [[ -f $static_conf ]]; then
if [[ -f $boot_static_conf ]]; then
cp $boot_static_conf $static_conf
elif [ -f $sys_static_conf ]; then
elif [[ -f $sys_static_conf ]]; then
cp $sys_static_conf $static_conf
fi
fi
@ -22,21 +22,20 @@ fi
test -r $static_conf && source $static_conf
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
watch_eth() {
count=0
while true; do
sleep 5
if [ "$(cat /sys/class/net/$os_eth/operstate 2>/dev/null)" == "up" ]; then
if [[ "$(cat /sys/class/net/$os_eth/operstate 2>/dev/null)" == "up" ]]; then
count=0
else
if [ $count -lt $link_watch_timeout ]; then
if [[ $count -lt $link_watch_timeout ]]; then
count=$(($count + 5))
logger -t ethernet -s "disconnected"
else
logger -t ethernet -s "disconnected for $link_watch_timeout seconds, rebooting"
reboot
logger -t ethernet -s "disconnected for $link_watch_timeout seconds, calling panic action"
panic_action network
fi
fi
done
@ -50,12 +49,12 @@ watch_ip() {
if ip addr show dev $iface | grep inet &>/dev/null; then
count=0
else
if [ $count -lt $ip_watch_timeout ]; then
if [[ $count -lt $ip_watch_timeout ]]; then
count=$(($count + 5))
logger -t network -s "$iface has no IP address"
else
logger -t network -s "$iface had no IP address for $ip_watch_timeout seconds, rebooting"
reboot
logger -t network -s "$iface had no IP address for $ip_watch_timeout seconds, calling panic action"
panic_action network
fi
fi
done
@ -72,16 +71,16 @@ start_wlan() {
return 1
fi
if [ "$(cat /sys/class/net/$os_wlan/carrier 2>/dev/null)" != "1" ]; then
if [[ "$(cat /sys/class/net/$os_wlan/carrier 2>/dev/null)" != "1" ]]; then
msg_fail "no link"
return 1
fi
if [ -n "$mtu" ]; then
if [[ -n "$mtu" ]]; then
ip link set mtu $mtu dev $os_wlan
fi
if [ -n "$static_ip" ]; then
if [[ -n "$static_ip" ]]; then
msg_done $static_ip
ifconfig $os_wlan $static_ip up
static_ip="" # won't be used again
@ -90,7 +89,7 @@ start_wlan() {
dhclient -cf "$dh_conf" $os_wlan
fi
if [ "$ip_watch" == "true" ] && ip addr show dev $os_wlan | grep inet &>/dev/null; then
if [[ "$ip_watch" == "true" ]] && ip addr show dev $os_wlan | grep inet &>/dev/null; then
watch_ip $os_wlan &
fi
}
@ -104,7 +103,7 @@ start_eth() {
while ! ifconfig $os_eth >/dev/null 2>&1; do
sleep 1
count=$(($count + 1))
if [ $count -ge $w ]; then
if [[ $count -ge $w ]]; then
msg_done "no device"
return 1
fi
@ -116,10 +115,10 @@ start_eth() {
# wait for operstate
w=3
count=0
while [ "$(cat /sys/class/net/$os_eth/operstate 2>&1)" == "unknown" ]; do
while [[ "$(cat /sys/class/net/$os_eth/operstate 2>&1)" == "unknown" ]]; do
sleep 1
count=$(($count + 1))
if [ $count -ge $w ]; then
if [[ $count -ge $w ]]; then
msg_done "no link"
return 1
fi
@ -128,20 +127,20 @@ start_eth() {
# wait for link
test "$link_watch" == "true" || link_nego_timeout=5
count=0
while [ "$(cat /sys/class/net/$os_eth/carrier 2>&1)" != "1" ]; do
while [[ "$(cat /sys/class/net/$os_eth/carrier 2>&1)" != "1" ]]; do
sleep 1
count=$(($count + 1))
if [ $count -ge $link_nego_timeout ]; then
if [[ $count -ge $link_nego_timeout ]]; then
msg_done "no link"
return 1
fi
done
if [ -n "$mtu" ]; then
if [[ -n "$mtu" ]]; then
ip link set mtu $mtu dev $os_eth
fi
if [ -n "$static_ip" ]; then
if [[ -n "$static_ip" ]]; then
msg_done $static_ip
ifconfig $os_eth $static_ip up
static_ip="" # won't be used again
@ -150,11 +149,11 @@ start_eth() {
dhclient -cf "$dh_conf" $os_eth
fi
if [ "$link_watch" == "true" ]; then
if [[ "$link_watch" == "true" ]]; then
watch_eth &
fi
if [ "$ip_watch" == "true" ] && ip addr show dev $os_eth | grep inet &>/dev/null; then
if [[ "$ip_watch" == "true" ]] && ip addr show dev $os_eth | grep inet &>/dev/null; then
watch_ip $os_eth &
fi
}
@ -173,16 +172,16 @@ start() {
test -r /data/etc/ppp/modem && ifconfig | grep $os_ppp &>/dev/null && ppp_ok="ok"
# if wifi or ppp link ok, start eth in background
if [ "$wlan_ok" == "ok" ] || [ "$ppp_ok" == "ok" ]; then
if [[ "$wlan_ok" == "ok" ]] || [[ "$ppp_ok" == "ok" ]]; then
start_eth &>/dev/null &
else
start_eth && eth_ok="ok"
fi
if [ "$eth_ok" != "ok" ] && [ "$wlan_ok" != "ok" ] && [ "$ppp_ok" != "ok" ]; then
if [ "$link_watch" == "true" ]; then
logger -t network -s "no network connection available, rebooting"
reboot
if [[ "$eth_ok" != "ok" ]] && [[ "$wlan_ok" != "ok" ]] && [[ "$ppp_ok" != "ok" ]]; then
if [[ "$link_watch" == "true" ]]; then
logger -t network -s "no network connection available, calling panic action"
panic_action network
return 1
else
logger -t network -s "no network connection available"
@ -190,13 +189,13 @@ start() {
fi
fi
if [ -n "$static_gw" ]; then
if [[ -n "$static_gw" ]]; then
msg_begin "Setting static gateway to $static_gw"
ip route add default via $static_gw
test $? == 0 && msg_done || msg_fail
fi
if [ -n "$static_dns" ]; then
if [[ -n "$static_dns" ]]; then
msg_begin "Setting static DNS server to $static_dns"
echo "nameserver $static_dns" > /etc/resolv.conf
test $? == 0 && msg_done || msg_fail

View File

@ -7,12 +7,11 @@ netwatch_interval=20
test -f $watch_conf && source $watch_conf || exit 0
if [ -z "$netwatch_host" ] || [ -z "$netwatch_port" ]; then
if [[ -z "$netwatch_host" ]] || [[ -z "$netwatch_port" ]]; then
exit 0
fi
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
test "$os_networkless" == "true" && exit 0
@ -24,13 +23,13 @@ watch() {
if nc -z -w $netwatch_timeout $netwatch_host $netwatch_port </dev/null >/dev/null 2>&1; then
count=0
else
if [ $count -lt $netwatch_retries ]; then
if [[ $count -lt $netwatch_retries ]]; then
logger -t netwatch -s "cannot connect to $netwatch_host:$netwatch_port"
count=$(($count + 1))
continue
else
logger -t netwatch -s "cannot connect to $netwatch_host:$netwatch_port, rebooting"
reboot
logger -t netwatch -s "cannot connect to $netwatch_host:$netwatch_port, calling panic action"
panic_action netwatch
fi
fi
done

View File

@ -4,10 +4,10 @@ sys_conf="/etc/firewall.sh"
boot_conf="/boot/firewall.sh"
conf="/data/etc/firewall.sh"
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi

View File

@ -7,10 +7,10 @@ conf="/data/etc/dnsmasq.conf"
log="/var/log/dnsmasq.log"
prog="/usr/sbin/dnsmasq"
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi

View File

@ -11,18 +11,18 @@ sys_ntp_conf="/etc/ntp.conf"
boot_ntp_conf="/boot/ntp.conf"
ntp_conf="/data/etc/ntp.conf"
if ! [ -f $conf ]; then
if [ -f $boot_conf ]; then
if ! [[ -f $conf ]]; then
if [[ -f $boot_conf ]]; then
cp $boot_conf $conf
elif [ -f $sys_conf ]; then
elif [[ -f $sys_conf ]]; then
cp $sys_conf $conf
fi
fi
if ! [ -f $ntp_conf ]; then
if [ -f $boot_ntp_conf ]; then
if ! [[ -f $ntp_conf ]]; then
if [[ -f $boot_ntp_conf ]]; then
cp $boot_ntp_conf $ntp_conf
elif [ -f $sys_ntp_conf ]; then
elif [[ -f $sys_ntp_conf ]]; then
cp $sys_ntp_conf $ntp_conf
fi
fi
@ -30,7 +30,6 @@ fi
test -f $conf || exit 0
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
test "$os_networkless" == "true" && exit 0
@ -70,7 +69,7 @@ start_ntp() {
cat $ntp_conf | grep -v iburst > ${ntp_conf}.tmp
if [ -n "$date_ntp_server" ]; then
if [[ -n "$date_ntp_server" ]]; then
echo "server $date_ntp_server iburst" > $ntp_conf
else
cat $sys_ntp_conf | grep iburst > $ntp_conf
@ -101,7 +100,7 @@ stop_ntp() {
}
start() {
if [ "$date_method" == "http" ]; then
if [[ "$date_method" == "http" ]]; then
start_http
else
start_ntp
@ -111,7 +110,7 @@ start() {
}
stop() {
if [ "$date_method" == "http" ]; then
if [[ "$date_method" == "http" ]]; then
stop_http
else
stop_ntp

View File

@ -8,7 +8,7 @@ test -n "$os_version" || source /etc/init.d/base
start() {
msg_begin "Starting crond"
if [ -d $sys_conf ]; then
if [[ -d $sys_conf ]]; then
/usr/sbin/crond -c $sys_conf
fi

View File

@ -5,7 +5,6 @@ conf="/etc/sshd_config"
test -f $conf || exit 0
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
test "$os_networkless" == "true" && exit 0

View File

@ -1,7 +1,6 @@
#!/bin/bash
test -n "$os_version" || source /etc/init.d/base
test -n "$os_debug" || source /etc/init.d/conf
msg_info() {
echo " # $1"

View File

@ -4,6 +4,10 @@ source /etc/version
board_sn=$(/etc/init.d/boardsn)
board_name=$(cat /etc/board)
test -n "$os_debug" || source /etc/init.d/conf
source /etc/init.d/panic
msg_begin() {
echo -n " * $1: "
}

View File

@ -0,0 +1,7 @@
#!/bin/bash
source /etc/init.d/panic
# reset panic counter after a successful boot
echo 0 > ${_PANIC_COUNTER_FILE}

View File

@ -4,26 +4,26 @@ _sys_conf="/etc/os.conf"
_boot_conf="/boot/os.conf"
_conf="/data/etc/os.conf"
if ! [ -f $_conf ]; then
if [ -f $_boot_conf ]; then
if ! [[ -d /data/etc ]]; then
# use boot/system variants if we don't have the data partition mounted
if [[ -f $_boot_conf ]]; then
source $_boot_conf
elif [[ -f $_sys_conf ]]; then
source $_sys_conf
fi
return
fi
if ! [[ -f $_conf ]]; then
if [[ -f $_boot_conf ]]; then
cp $_boot_conf $_conf
elif [ -f $_sys_conf ]; then
elif [[ -f $_sys_conf ]]; then
cp $_sys_conf $_conf
fi
fi
source $_conf
has_net_conn() {
test "$os_networkless" == "true" && return 1
addr_eth=$(ip addr show dev $os_eth 2>/dev/null | grep inet | tr -s ' ' | sed -r 's/^\s+//' | cut -d ' ' -f 2)
addr_wlan=$(ip addr show dev $os_wlan 2>/dev/null | grep inet | tr -s ' ' | sed -r 's/^\s+//' | cut -d ' ' -f 2)
if [ -n "$addr_eth" ] || [ -n "$addr_wlan" ]; then
return 0
else
return 1
fi
}
if [[ -f $_conf ]]; then
source $_conf
fi

View File

@ -0,0 +1,28 @@
#!/bin/bash
_PANIC_COUNTER_FILE="/var/lib/panic_counter"
_PANIC_REBOOT_DELAY_FACTOR=10
_PANIC_REBOOT_DELAY_MAX=3600 # reboot at least once an hour in case of panic
panic_action() {
# read counter from file
panic_counter=$(cat ${_PANIC_COUNTER_FILE} 2>/dev/null || echo 0)
# write increased counter back to file
echo $((panic_counter + 1)) > ${_PANIC_COUNTER_FILE}
delay=$((_PANIC_REBOOT_DELAY_FACTOR * panic_counter))
if [[ "${delay}" -gt "${_PANIC_REBOOT_DELAY_MAX}" ]]; then
delay=${_PANIC_REBOOT_DELAY_MAX}
fi
if [[ "${delay}" -gt 0 ]]; then
logger -t panic -s "rebooting in ${delay} seconds (caused by $1)"
sleep ${delay}
fi
logger -t panic -s "rebooting (caused by $1)"
/sbin/reboot
}

View File

@ -10,8 +10,8 @@ echo "---- shutting down $os_name $os_version ----" >> $boot_log
# stop all init scripts in /etc/init.d,
# executing them in reverse numerical order.
(for i in $(ls -r /etc/init.d/S??*); do
[ ! -x "$i" ] && continue
[ -f /data/etc/no_$(basename $i) ] && continue
if ! [[ -x "$i" ]]; then continue; fi
if [[ -f /data/etc/no_$(basename $i) ]]; then continue; fi
$i stop
done& echo $! > $pid_file) | tee -a $boot_log &

View File

@ -10,9 +10,9 @@ echo "---- booting $os_name $os_version ----" >> $tmp_boot_log
# start all init scripts in /etc/init.d,
# executing them in numerical order.
(for i in /etc/init.d/S??*; do
[ ! -x "$i" ] && continue
[ -f /data/etc/no_$(basename $i) ] && continue
(for i in /etc/init.d/S??* /etc/init.d/bootdone; do
if ! [[ -x "$i" ]]; then continue; fi
if [[ -f /data/etc/no_$(basename $i) ]]; then continue; fi
$i start || break
done& echo $! > $pid_file) | tee -a $tmp_boot_log &

View File

@ -1,7 +1,15 @@
#!/bin/bash
# carry on with the script in case of error
set +e
# write buffers to disk
/bin/sync
(sleep 10 && /usr/bin/killall -STOP watchdog) &
# allow the shutdown script 20 seconds to shut down,
# after which we stop feeding the watchdog
(sleep 20 && /usr/bin/killall -STOP watchdog) &
# actual reboot command
/bin/busybox reboot

View File

@ -8,7 +8,7 @@ govdir="/sys/devices/system/cpu/cpufreq/$gov"
configure() {
echo $gov > $cpufreqdir/scaling_governor
if [ $gov == "ondemand" ]; then
if [[ $gov == "ondemand" ]]; then
echo 50 > $govdir/up_threshold
echo 100000 > $govdir/sampling_rate
echo 50 > $govdir/sampling_down_factor

View File

@ -21,7 +21,7 @@ get_throttled_since_boot() {
watch_now() {
while true; do
t=$(get_throttled_now)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "currently: $t"
fi
@ -32,7 +32,7 @@ watch_now() {
watch_since_boot() {
while true; do
t=$(get_throttled_since_boot)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "since boot: $t"
break
fi

View File

@ -11,8 +11,8 @@ test -d "/proc/device-tree/soc/gpio@7e200000/uart0_pins" || exit 0 # no rpi blu
test -n "$os_version" || source /etc/init.d/base
function start() {
if [ "$(cat /proc/device-tree/aliases/uart0)" = "$(cat /proc/device-tree/aliases/serial1)" ] ; then
if [ "$(wc -c /proc/device-tree/soc/gpio@7e200000/uart0_pins/brcm\,pins | cut -f 1 -d ' ')" = " 16" ] ; then
if [[ "$(cat /proc/device-tree/aliases/uart0)" = "$(cat /proc/device-tree/aliases/serial1)" ]] ; then
if [[ "$(wc -c /proc/device-tree/soc/gpio@7e200000/uart0_pins/brcm\,pins | cut -f 1 -d ' ')" = " 16" ]] ; then
/usr/bin/hciattach -t5 /dev/serial1 bcm43xx 3000000 flow - &>/dev/null
else
/usr/bin/hciattach -t5 /dev/serial1 bcm43xx 921600 noflow - &>/dev/null

View File

@ -8,7 +8,7 @@ govdir="/sys/devices/system/cpu/cpufreq/$gov"
configure() {
echo $gov > $cpufreqdir/scaling_governor
if [ $gov == "ondemand" ]; then
if [[ $gov == "ondemand" ]]; then
echo 50 > $govdir/up_threshold
echo 100000 > $govdir/sampling_rate
echo 50 > $govdir/sampling_down_factor

View File

@ -21,7 +21,7 @@ get_throttled_since_boot() {
watch_now() {
while true; do
t=$(get_throttled_now)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "currently: $t"
fi
@ -32,7 +32,7 @@ watch_now() {
watch_since_boot() {
while true; do
t=$(get_throttled_since_boot)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "since boot: $t"
break
fi

View File

@ -8,7 +8,7 @@ govdir="/sys/devices/system/cpu/cpufreq/$gov"
configure() {
echo $gov > $cpufreqdir/scaling_governor
if [ $gov == "ondemand" ]; then
if [[ $gov == "ondemand" ]]; then
echo 50 > $govdir/up_threshold
echo 100000 > $govdir/sampling_rate
echo 50 > $govdir/sampling_down_factor

View File

@ -21,7 +21,7 @@ get_throttled_since_boot() {
watch_now() {
while true; do
t=$(get_throttled_now)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "currently: $t"
fi
@ -32,7 +32,7 @@ watch_now() {
watch_since_boot() {
while true; do
t=$(get_throttled_since_boot)
if [ -n "$t" ]; then
if [[ -n "$t" ]]; then
logger -t throttlewatch -s "since boot: $t"
break
fi

View File

@ -9,8 +9,8 @@ test -f $conf || test -f $boot_conf || test -f $sys_conf || exit 0
test -n "$os_version" || source /etc/init.d/base
function start() {
if [ "$(cat /proc/device-tree/aliases/uart0)" = "$(cat /proc/device-tree/aliases/serial1)" ] ; then
if [ "$(wc -c /proc/device-tree/soc/gpio@7e200000/uart0_pins/brcm\,pins | cut -f 1 -d ' ')" = " 16" ] ; then
if [[ "$(cat /proc/device-tree/aliases/uart0)" = "$(cat /proc/device-tree/aliases/serial1)" ]] ; then
if [[ "$(wc -c /proc/device-tree/soc/gpio@7e200000/uart0_pins/brcm\,pins | cut -f 1 -d ' ')" = " 16" ]] ; then
/usr/bin/hciattach -t5 /dev/serial1 bcm43xx 3000000 flow - &>/dev/null
else
/usr/bin/hciattach -t5 /dev/serial1 bcm43xx 921600 noflow - &>/dev/null