#!/usr/bin/bash # Generates single-file from-scratch and delta update files for all or some of the # refs in an OSTree repo. # # To use it run "generate-deltas REPODIR DESTDIR" which will look at all the refs in the # repo and make updates to the latest version putting them in the DESTDIR directory. # To apply these on a live system, do something like: # $ ostree static-delta apply-offline cs9-x86_64-qemu-upgrade-demo-79da0b2f1b119e99137eaef9680fae9820a9edcd5cac4f6d7c23279498c578f6.update # $ rpm-ostree rebase 79da0b2f1b119e99137eaef9680fae9820a9edcd5cac4f6d7c23279498c578f6 if [ "$#" -lt 2 ]; then echo "Usage generate-deltas REPODIR DESTDIR [REFS..]" exit 1 fi REPO=$1 DIR=$2 shift 2 if [ "$#" -gt 0 ]; then REFS="$@" else REFS=$(ostree --repo=$REPO refs) fi mkdir -p $DIR NUM_DELTAS=3 for REF in $REFS; do REF_AS_FILE=$(echo $REF | sed "s%/%-%g" ) HEAD=$(ostree --repo=$REPO rev-parse $REF) # Generate full update for HEAD: echo Generating non-delta update for $REF commit $HEAD ostree static-delta generate --repo=$REPO --inline --min-fallback-size=0 --empty --filename=$DIR/$REF_AS_FILE-$HEAD.update $HEAD # Generate deltas to HEAD from up to the last 3 parents PARENT=$HEAD for i in seq $NUM_DELTAS; do if ! PARENT=$(ostree --repo=$REPO rev-parse $PARENT^ 2>/dev/null); then break; fi echo Generating delta update for $REF commit $HEAD from commit $PARENT ostree static-delta generate --repo=$REPO --inline --min-fallback-size=0 --from=$PARENT --filename=$DIR/$REF_AS_FILE-$PARENT-$HEAD.update $HEAD done done