DiffDebScript

Differences between revisions 2 and 3
Revision 2 as of 2006-05-02 01:32:05
Size: 2057
Editor: 88-107-52-117
Comment:
Revision 3 as of 2006-05-02 01:59:38
Size: 1909
Editor: 88-107-52-117
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
# E.g: ./diffdeb origdebs/gimp_2.2.8-2ubuntu6_i386.deb origdebs/gimp_2.2.11-1ubuntu1_i386.deb diff
Line 61: Line 59:
#ar -r test.deb gimp_2.2.11-1ubuntu1_i386/*

Here are two proof-of-concept scripts for creating and applying binary diffs of debian packages for smaller downloads on upgrades. You need to install bsdiff for this to work. JamesHall

diffdeb script:

echo "Syntax: diffdeb old new diff"

mkdir ./working
mkdir ./working/old
mkdir ./working/new

# Extract old deb (ar)
cd ./working/old
ar x ../../$1

cd ../../

# Extract new deb (ar)
cd ./working/new
ar x ../../$2

cd ../../

# Extract old deb contents (gzip)
cd ./working/old
gunzip -f control.tar.gz
gunzip -f data.tar.gz

cd ../../

# Extract new deb contents (gzip)
cd ./working/new
gunzip -f control.tar.gz
gunzip -f data.tar.gz

cd ../../

# Make each into a tar
cd ./working/old
tar cf old.tar *

cd ../../

cd ./working/new
tar cf new.tar *

cd ../../
# Make binary diff
bsdiff ./working/old/old.tar ./working/new/new.tar $3

# Force recursive removal of folder 'working'
rm -fr working/

patchdeb script:

echo "Usage patchdeb olddeb newdeb patch"

mkdir ./working
mkdir ./working/old
mkdir ./working/new

# Extract old deb (ar)
cd ./working/old
ar x ../../$1

# Extract old deb contents (gzip)
gunzip -f control.tar.gz
gunzip -f data.tar.gz

# Make into a tar
tar cf old.tar *
cd ../../

# Patch it
bspatch ./working/old/old.tar ./working/new/new.tar $3

cd ./working/new
tar xf new.tar
rm new.tar

cd ../../
cd ./working/old
rm old.tar

cd ../../

# Recreate proper debian ar's
cd ./working/new
gzip control.tar
gzip data.tar
ar r new.deb debian-binary control.tar.gz data.tar.gz 
sed 's/data.tar.gz\//data.tar.gz /' new.deb > new1.deb
sed 's/control.tar.gz\//control.tar.gz /' new1.deb > new2.deb
sed 's/binary\//binary /' new2.deb > new3.deb

cd ../../
mv ./working/new/new3.deb $2


# Force recursive removal of folder 'working'
rm -fr working/

DiffDebScript (last edited 2008-08-06 16:16:11 by localhost)