Xs Evolution Automatic Firmware Updating Apr 2026

Make it executable:

Check your exact model:

log() echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE mkdir -p $WORK_DIR cd $WORK_DIR wget --timeout=30 -q $MANIFEST_URL -O manifest.json || log "Manifest download failed"; exit 1; 2. Extract remote version REMOTE_VER=$(jq -r .version manifest.json) log "Current: $CURRENT_VER, Remote: $REMOTE_VER" 3. Compare versions (semver compare or simple string) if [ "$CURRENT_VER" = "$REMOTE_VER" ]; then log "Already up to date." rm -rf $WORK_DIR exit 0 fi 4. Check battery (if applicable) if command -v xs_battery >/dev/null; then BATT=$(xs_battery percent) MIN_BATT=$(jq -r .min_battery_percent manifest.json) if [ "$BATT" -lt "$MIN_BATT" ]; then log "Battery too low ($BATT% < $MIN_BATT%). Skipping update." exit 0 fi fi 5. Download firmware FW_URL=$(jq -r .url manifest.json) wget --timeout=120 -q $FW_URL -O firmware.bin || log "Firmware download failed"; exit 1; 6. Verify checksum EXPECTED_SHA=$(jq -r .checksum manifest.json | cut -d: -f2) ACTUAL_SHA=$(sha256sum firmware.bin | cut -d' ' -f1) if [ "$EXPECTED_SHA" != "$ACTUAL_SHA" ]; then log "Checksum mismatch! Aborting." exit 1 fi 7. Verify digital signature (using openssl) openssl dgst -sha256 -verify $SIGN_PUBKEY -signature firmware.sig firmware.bin || log "Signature verification failed." exit 1 8. Trigger vendor-specific flashing Example for RAUC (common on XS Evolution): rauc install firmware.bin >> $LOG_FILE 2>&1 Example for custom flash tool: xs_flash -w firmware.bin -b /dev/mtdblock2 log "Update triggered. Device will reboot if successful." 9. Cleanup (optional, post-reboot) rm -rf $WORK_DIR XS Evolution Automatic Firmware updating

Enable cron if not already: