Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision Next revisionBoth sides next revision | ||
| docs:guide-user:advanced:sysupgrade_extras [2021/11/16 08:18] – created vgaetera | docs:guide-user:advanced:sysupgrade_extras [2023/12/01 01:36] – [Instructions] minimize write operations vgaetera | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Sysupgrade extras ====== | ====== Sysupgrade extras ====== | ||
| - | {{section> | + | {{section> |
| - | {{page> | + | ===== Introduction ===== |
| + | * This instruction extends the functionality of [[docs:techref:sysupgrade|Sysupgrade]] on [[docs: | ||
| + | * Follow the [[docs: | ||
| + | |||
| + | ===== Features ===== | ||
| + | * Check the latest firmware release available. | ||
| + | * Download the firmware image and verify its checksum. | ||
| + | * Allow to force/skip upgrade matching the current release. | ||
| + | * Save/ | ||
| ===== Options ===== | ===== Options ===== | ||
| ^ Option ^ Description ^ | ^ Option ^ Description ^ | ||
| - | | '' | + | | '' |
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| ===== Instructions ===== | ===== Instructions ===== | ||
| Line 16: | Line 27: | ||
| local SYSUP_CMD=" | local SYSUP_CMD=" | ||
| case " | case " | ||
| - | (-a) sysupgrade_auto | + | (-A|-U) sysupgrade_proc " |
| + | (-S) service_save ;; | ||
| + | (-R) service_restore | ||
| (*) command sysupgrade " | (*) command sysupgrade " | ||
| esac | esac | ||
| } | } | ||
| - | sysupgrade_auto() { | + | sysupgrade_proc() { |
| - | . /etc/openwrt_release | + | . /etc/os-release |
| - | if grep -q -e "\s/ | + | local SYSUP_VER=" |
| - | then SYSUP_TYPE="generic-squashfs-combined" | + | local SYSUP_URL=" |
| - | else SYSUP_TYPE=" | + | local SYSUP_REV=" |
| + | if [ "${SYSUP_REV}" | ||
| + | || [ "${SYSUP_CMD}" | ||
| + | then shift | ||
| + | local SYSUP_DEV="$(sysupgrade_dev)" | ||
| + | local SYSUP_PROF=" | ||
| + | local SYSUP_FS=" | ||
| + | local SYSUP_TYPE=" | ||
| + | local SYSUP_EFI=" | ||
| + | local SYSUP_IMG=" | ||
| + | sysupgrade " | ||
| fi | fi | ||
| - | case " | + | } |
| - | (SNAPSHOT) | + | |
| - | SYSUP_IMG="openwrt-${DISTRIB_ARCH/ | + | sysupgrade_ver() { |
| - | SYSUP_URL="https:// | + | case "${VERSION_ID}" |
| - | snapshots/ | + | (snapshot) echo " |
| - | (*) | + | (*) wget -O - \ |
| - | SYSUP_URL=" | + | " |
| - | SYSUP_VER=" | + | | jsonfilter -e "$[*][' |
| - | | jsonfilter -e "@[*][' | + | | sed -e "/ |
| - | | sort -r -V \ | + | |
| - | | sed -e "/ | + | |
| - | SYSUP_IMG=" | + | |
| - | SYSUP_URL=" | + | |
| - | releases/ | + | |
| esac | esac | ||
| - | uclient-fetch -P /tmp " | ||
| - | gunzip -k / | ||
| - | sysupgrade -i / | ||
| } | } | ||
| - | EOF | ||
| - | # Configure uci-defaults | + | sysupgrade_url() { |
| - | cat << | + | echo "https://downloads.openwrt.org/\ |
| - | if [ ! -e / | + | releases/${SYSUP_VER}/targets/${OPENWRT_BOARD}" |
| - | && lock -n /var/lock/root-resize \ | + | } |
| - | && [ -e / | + | |
| - | then | + | sysupgrade_rev() { |
| - | BOOT=" | + | wget -O - "${SYSUP_URL}/version.buildinfo" |
| - | DISK="${BOOT%%[0-9]*}" | + | } |
| - | PART=" | + | |
| - | ROOT="${DISK}${PART}" | + | sysupgrade_dev() { |
| - | OFFS=" | + | ubus call system board \ |
| - | | sed -n -e "\|^${ROOT}\s*|s///p")" | + | | jsonfilter -e "$[' |
| - | echo -e "p\nd\n${PART}\nn\np\n${PART}\n${OFFS}\n\nn\np\nw" | + | } |
| - | | fdisk "${DISK}" | + | |
| - | touch /etc/ | + | sysupgrade_prof() { |
| - | lock -u /var/lock/root-resize | + | case "${OPENWRT_BOARD}" |
| + | (x86/*) echo "generic" | ||
| + | (*) echo "${SYSUP_DEV//,/_}" | ||
| + | esac | ||
| + | } | ||
| + | |||
| + | sysupgrade_fs() { | ||
| + | ubus call system board \ | ||
| + | | jsonfilter | ||
| + | } | ||
| + | |||
| + | sysupgrade_type() | ||
| + | case "${OPENWRT_BOARD}" | ||
| + | (x86/*) echo " | ||
| + | (*) echo " | ||
| + | esac | ||
| + | } | ||
| + | |||
| + | sysupgrade_efi() { | ||
| + | if [ -d /sys/firmware/efi ] | ||
| + | then echo "-efi" | ||
| fi | fi | ||
| - | exit 1 | + | } |
| - | EOF | + | |
| - | cat << " | + | sysupgrade_img() { |
| - | if grep -q -e "\s/\sext4\s" | + | wget -O - "${SYSUP_URL}/profiles.json" \ |
| - | && [ ! -e / | + | | jsonfilter |
| - | && lock -n / | + | [' |
| - | && | + | &&@[' |
| - | then | + | } |
| - | BOOT="$(sed -n -e "/ | + | |
| - | DISK=" | + | service_save() |
| - | PART="$((${BOOT##*[^0-9]}+1))" | + | local SVC_NAME="$(ls /etc/init.d)" |
| - | ROOT=" | + | local SVC_STATE |
| - | LOOP="$(losetup -f)" | + | for SVC_NAME in ${SVC_NAME} |
| - | losetup "${LOOP}" | + | do if command service |
| - | fsck.ext4 -y "${LOOP}" | + | then SVC_STATE="enable" |
| - | resize2fs | + | else SVC_STATE="disable" |
| - | touch / | + | |
| - | lock -u / | + | |
| - | reboot | + | |
| fi | fi | ||
| - | exit 1 | + | uci -q batch << EOI |
| + | set system.service=' | ||
| + | del_list system.service.enable=' | ||
| + | del_list system.service.disable=' | ||
| + | add_list system.service.' | ||
| + | EOI | ||
| + | done | ||
| + | uci commit system | ||
| + | } | ||
| + | |||
| + | service_restore() { | ||
| + | local SVC_NAME | ||
| + | local SVC_STATE=" | ||
| + | for SVC_STATE in ${SVC_STATE} | ||
| + | do SVC_NAME=" | ||
| + | for SVC_NAME in ${SVC_NAME} | ||
| + | do command service " | ||
| + | done | ||
| + | done | ||
| + | } | ||
| EOF | EOF | ||
| - | cat << " | + | . / |
| - | if grep -q -e " | + | |
| - | && | + | # Configure startup scripts |
| - | && lock -n / | + | cat << " |
| - | && [ -e /etc/opkg-restore-init ] | + | if [ ! -e /etc/service-restore |
| - | then | + | then . /etc/profile.d/sysupgrade.sh |
| - | LOOP=" | + | sysupgrade |
| - | | sed -n -e " | + | touch /etc/service-restore |
| - | ROOT=" | + | |
| - | | sed -e "s|^|/dev|" | + | |
| - | OFFS=" | + | |
| - | LOOP=" | + | |
| - | losetup -o " | + | |
| - | fsck.f2fs -f " | + | |
| - | mount " | + | |
| - | umount " | + | |
| - | resize.f2fs " | + | |
| - | touch /etc/f2fs-resize | + | |
| - | lock -u / | + | |
| - | reboot | + | |
| fi | fi | ||
| exit 1 | exit 1 | ||
| EOF | EOF | ||
| cat << " | cat << " | ||
| - | / | + | / |
| EOF | EOF | ||
| + | </ | ||
| + | |||
| + | ===== Examples ===== | ||
| + | <code bash> | ||
| + | # Automated interactive Sysupgrade | ||
| + | sysupgrade -A -i | ||
| + | |||
| + | # Forced interactive Sysupgrade | ||
| + | sysupgrade -U -i | ||
| </ | </ | ||
| ===== Automated ===== | ===== Automated ===== | ||
| <code bash> | <code bash> | ||
| - | uclient-fetch -O sysupgrade-extras.sh " | + | wget -U "" |
| . ./ | . ./ | ||
| </ | </ | ||