123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #!/bin/sh
- # This file is part of the OpenADK project.
- # Validate update.
- GRUB=$(which grub-reboot)
- if [ "${GRUB}" = "/usr/sbin/grub-reboot" ]; then
- REVERSE=0
- else
- REVERSE=1
- fi
- DISK=@@DISK@@
- if [ $REVERSE -eq 1 ]; then
- PART0="/dev/${DISK}p1"
- PART1="/dev/${DISK}p2"
- else
- PART0="/dev/${DISK}2"
- PART1="/dev/${DISK}3"
- fi
- APPLIANCE_NAME=OpenADK
- BOOT0_NAME="OpenADK1"
- BOOT1_NAME="OpenADK2"
- CURRENT_SYS="$(rdev /|awk '{ print $1 }' )"
- TIMEOUT=45
- STAT_FILE="/tmp/update_status"
- SSH_KEY_FOLDER=/etc/dropbear/
- SSH_KEYS=("dropbear_dss_host_key" "dropbear_ecdsa_host_key" "dropbear_rsa_host_key")
- DEBUG=1
- if [ "x$1" == "xtest" ];then
- TIMEOUT=1
- fi
- get_interface(){
- ip route list | grep '^default' | cut -d\ -f 5
- }
- get_nw_mask(){
- # This function will get the NW Mask in the form /x e.g. /16
- local BIT=$(ip a s $(get_interface)| grep inet\ | cut -d/ -f2| cut -d\ -f1)
- echo $BIT
- }
- getip() {
- DEFDEVICE=$(ip route list | grep ^default | cut -d\ -f5)
- IPADDR=$(ip a s $(ip route list | grep ^default | cut -d\ -f5) | grep inet\ | grep 'inet' | cut -d\ -f 6 | cut -d/ -f1)
- echo $IPADDR
- }
- chk_initial_save(){
- if [ $(cfgfs status | wc -l) -gt 0 ];then
- echo "please save configuration"
- fi
- }
- updatebootflag(){
- case "$CURRENT_SYS" in
- "$PART1")
- sfdisk -A /dev/$DISK 1
- ;;
- "$PART0")
- sfdisk -A /dev/$DISK 2
- ;;
- *)
- echo "Current partition $CURRENT_SYS not recognized"
- exit 1
- ;;
- esac
- }
- updategrub(){
-
- mount -o remount,rw /boot
- case "$CURRENT_SYS" in
- "$PART1")
- grub-set-default OpenADK2
- ;;
- "$PART0")
- grub-set-default OpenADK1
- ;;
- *)
- echo "Current partition $CURRENT_SYS not recognized"
- exit 1
- ;;
- esac
- sync
- mount -o remount,ro /boot
- }
- base_check() {
- NET_PROGS="$(netstat -tulpn 2>/dev/null)"
- TESTS=0
- TESTSUM=0
- #test start: check if dropbear is running
- T_NAME=dropbear
- if [[ $NET_PROGS = *"/dropbear"* ]];then
- logger -t update "check $T_NAME OK"
- TESTS=$(( $TESTS + 1 ))
- else
- logger -t update "check $T_NAME FAILURE"
- fi
- ((TESTSUM = TESTSUM +1))
- #test end
- }
- if [ -f /installation_date.txt ];then
- echo "Update was applied at:" > $STAT_FILE
- echo "$(head -n1 /installation_date.txt)" >> $STAT_FILE
- else
- rm -f $STAT_FILE
- fi
- # Do some checks before setting the new partiton as default boot partition.
- if ( [ -f /firmware_check ] || [ "x$1" = "xtest" ] );then
- logger -t update "check now!"
- base_check
- i=0
- while [ $TESTS -lt $TESTSUM ];do
- base_check
- [ $DEBUG -gt 0 ] && echo "$i Only $TESTS from $TESTSUM are passed wait until $TIMEOUT"
- sleep 1
- i=$(( $i + 1 ))
- if [ $i -ge $TIMEOUT ];then
- break
- fi
- done
- else
- logger -t update "$APPLIANCE_NAME validate nothing to do..."
- if [ -f $STAT_FILE ];then
- echo "Last update was successful" >> $STAT_FILE
- else
- echo "Firmware check was successful" >> $STAT_FILE
- fi
- n=0
- chk_initial_save
- exit 0
- fi
- if [ $TESTS -eq $TESTSUM ]; then
- logger -t update "All Tests passed."
- if [ "x$1" = "x" ]; then
- logger -t update "Set default boot partition for bootloader."
- mount -o remount,rw /
- rm /firmware_check
- mount -o remount,ro /
- echo "System check was successful" >> $STAT_FILE
- if [ $REVERSE -eq 1 ]; then
- echo "Nothing todo. All fine."
- logger -t update "Nothing todo. All fine."
- else
- updategrub
- fi
- fi
- else
- if [ $REVERSE -eq 1 ]; then
- updatebootflag
- fi
- logger -t update "Not all tests passed. The default system remains on the current partition."
- logger -t update "Please try to reboot the system and repeat the update."
- echo "ERROR last system update failed, please reboot and try again." >> $STAT_FILE
- exit 1
- fi
|