mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			160 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			160 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | ||
| #
 | ||
| # OpenIPC.org | v.20211129
 | ||
| #
 | ||
| 
 | ||
| set -e
 | ||
| 
 | ||
| soc=$(fw_printenv -n soc) || (echo -e "\n\e[1;31mSOC not defined in U-Boot ENV ....\e[0m\n"; exit 1)
 | ||
| kernel=$(awk -F ':' '/"kernel"/ {print $1}' /proc/mtd)
 | ||
| rootfs=$(awk -F ':' '/"rootfs"/ {print $1}' /proc/mtd)
 | ||
| overlay=$(awk -F ':' '/"rootfs_data"/ {print $1}' /proc/mtd)
 | ||
| github="https://github.com/OpenIPC/firmware/releases/download/latest"
 | ||
| option="-s --connect-timeout 30 --max-time 60"
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| stop_services() {
 | ||
|   echo -e "\n\e[1;31mForced shutdown of services...\e[0m\n"
 | ||
|   killall majestic || true
 | ||
|   killall crond klogd ntpd rngd syslogd || true
 | ||
| }
 | ||
| 
 | ||
| check_memory() {
 | ||
|   echo -e "\n\e[1;31mCheck RAM size...\e[0m\n"
 | ||
|   free
 | ||
| }
 | ||
| 
 | ||
| download_firmware() {
 | ||
|   if [ $remotely -eq 1 ]; then
 | ||
|     echo -e "\n\e[1;31mDownloading the latest firmware...\e[0m\n"
 | ||
|     echo ${1}
 | ||
|     curl ${option} -L "${1}" -o - | gzip -d | tar xvf - -C /tmp || (echo -e "\n\e[1;31mError receiving the update file, execution was interrupted....\e[0m\n"; exit 1)
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| writing_kernel() {
 | ||
|   if [ $update_kernel -eq 1 ]; then
 | ||
|     echo -e "\n\e[1;31mWriting a new kernel...\e[0m\n"
 | ||
|     flashcp -v "${1}" /dev/${kernel}
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| writing_rootfs() {
 | ||
|   if [ $update_rootfs -eq 1 ]; then
 | ||
|     echo -e "\n\e[1;31mWriting a new rootfs...\e[0m\n"
 | ||
|     flashcp -v "${1}" /dev/${rootfs}
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| clearing_overlayfs() {
 | ||
|   if [ $clear_overlayfs -eq 1 ]; then
 | ||
|     sleep 1
 | ||
|     echo -e "\n\e[1;31mСlearing the overlayfs partition...\e[0m\n"
 | ||
|     flash_eraseall -j /dev/${overlay}
 | ||
|   fi
 | ||
| }
 | ||
| 
 | ||
| quick_reboot() {
 | ||
|   echo -e "\n\e[1;31mRebooting without any questions...\e[0m\n"
 | ||
|   sleep 1
 | ||
|   reboot -f
 | ||
| }
 | ||
| 
 | ||
| print_usage() {
 | ||
| 	echo "Usage:  ./sysupgrade [-option]"
 | ||
| 	echo "options:"
 | ||
| 	echo "Remotely:"
 | ||
| 	echo "    -k                       update kernel"
 | ||
| 	echo "    -r                       update rootfs"
 | ||
| 	echo "    --url=URL                URL for update file (.tgz format)"
 | ||
|   echo "Locally:"
 | ||
| 	echo "    --kernel=[FILE]          update kernel from file (uImage format)"
 | ||
| 	echo "    --rootfs=[FILE]          update rootfs from file (squashfs format)"
 | ||
|   echo
 | ||
| 	echo "    -n                       clear overlayfs"
 | ||
| 	echo "    -x                       no reboot after upgrade"
 | ||
| 	echo "    -h                       help information"
 | ||
| }
 | ||
| 
 | ||
| update_kernel=0
 | ||
| update_rootfs=0
 | ||
| clear_overlayfs=0
 | ||
| no_reboot=0
 | ||
| usage=0
 | ||
| from_url=0
 | ||
| remotely=0
 | ||
| locally=0
 | ||
| 
 | ||
| for arg in $@
 | ||
| do
 | ||
| 	case $arg in
 | ||
| 		"-k")
 | ||
| 			update_kernel=1
 | ||
|       remotely=1
 | ||
| 			;;
 | ||
| 		"-r")
 | ||
| 			update_rootfs=1
 | ||
|       remotely=1
 | ||
| 			;;
 | ||
| 		"-n")
 | ||
| 			clear_overlayfs=1
 | ||
| 			;;
 | ||
| 		"-x")
 | ||
| 			no_reboot=1
 | ||
| 			;;
 | ||
| 		"-h")
 | ||
| 			usage=1
 | ||
| 			;;
 | ||
|     *)
 | ||
|       case $(echo $arg | cut -d= -f1) in
 | ||
|         "--kernel")
 | ||
|           kernel_file=$(echo =$arg | cut -d= -f3-)
 | ||
|           update_kernel=1
 | ||
|           locally=1
 | ||
|           ;;
 | ||
|         "--rootfs")
 | ||
|           rootfs_file=$(echo =$arg | cut -d= -f3-)
 | ||
|           update_rootfs=1
 | ||
|           locally=1
 | ||
|           ;;
 | ||
|         "--url")
 | ||
|           url=$(echo =$arg | cut -d= -f3-)
 | ||
|           from_url=1
 | ||
|           remotely=1
 | ||
|           ;;
 | ||
|         *)
 | ||
|           usage=1;
 | ||
|           ;;
 | ||
|       esac    
 | ||
| 	esac
 | ||
| done
 | ||
| 
 | ||
| if [ $remotely -eq $locally ] || [ $usage -eq 1 ]; then
 | ||
|   print_usage
 | ||
|   exit 1
 | ||
| fi
 | ||
| 
 | ||
| [ -z "${kernel_file}" ] && kernel_file="/tmp/uImage.${soc}"
 | ||
| [ -z "${rootfs_file}" ] && rootfs_file="/tmp/rootfs.squashfs.${soc}"
 | ||
| 
 | ||
| if [ $from_url -eq 1 ]; then
 | ||
|   if [ -z "${url}" ]; then
 | ||
|     echo -e "\n\e[1;31mThere is no URL to update file...\e[0m\n"
 | ||
|     exit 1
 | ||
|   fi
 | ||
| else
 | ||
|   if [ "$(curl -o /dev/null -s -w '%{http_code}\n' http://github.com)" != "301" ]; then
 | ||
|     echo -e "\n\e[1;31mThere is no access to the github.com, please check the Internet connection...\e[0m\n"
 | ||
|     exit 1
 | ||
|   fi
 | ||
|   url="${github}/openipc.${soc}-br.tgz"
 | ||
| fi
 | ||
| 
 | ||
| stop_services
 | ||
| download_firmware "${url}" && check_memory && writing_kernel "${kernel_file}" && writing_rootfs "${rootfs_file}" && clearing_overlayfs
 | ||
| 
 | ||
| if [ $no_reboot -eq 0 ]; then
 | ||
|   quick_reboot
 | ||
| fi
 |