firmware/general/overlay/usr/sbin/sysupgrade

167 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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 1 ] && [ $locally -eq 1 ] || [ $usage -eq 1 ]; then
print_usage
exit 1
fi
[ $locally -eq 0 ] && remotely=1
if [ $update_kernel -eq 0 ] && [ $update_rootfs -eq 0 ] && [ $locally -eq 0 ]; then
update_kernel=1
update_rootfs=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