DiffDebScript

Differences between revisions 3 and 4
Revision 3 as of 2006-05-02 01:59:38
Size: 1909
Editor: 88-107-52-117
Comment:
Revision 4 as of 2006-05-02 23:37:17
Size: 2486
Editor: 88-107-52-117
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

recompress-deb script will recompress debian packages using proper versions of gzip and ar:
{{{
#!/bin/bash
echo "Usage: recompress-deb input output"
mkdir ./working

cd ./working
ar xo ../$1
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz

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/new3.deb $2
rm -fr working/
}}}
Line 6: Line 31:
echo "Syntax: diffdeb old new diff" echo "Usage: diffdeb old new diff"
Line 14: Line 39:
ar x ../../$1 ar xo ../../$1
Line 20: Line 45:
ar x ../../$2 ar xo ../../$2
Line 26: Line 51:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 33: Line 58:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 53: Line 78:
Line 59: Line 83:
echo "Usage patchdeb olddeb newdeb patch" echo "Usage: patchdeb olddeb newdeb patch"
Line 67: Line 91:
ar x ../../$1 ar xo ../../$1
Line 70: Line 94:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 105: Line 129:

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

recompress-deb script will recompress debian packages using proper versions of gzip and ar:

echo "Usage: recompress-deb input output"
mkdir ./working

cd ./working
ar xo ../$1
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz

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/new3.deb $2
rm -fr working/

diffdeb script:

echo "Usage: diffdeb old new diff"

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

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

cd ../../

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

cd ../../

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

cd ../../

# Extract new deb contents (gzip)
cd ./working/new
gunzip -fN control.tar.gz
gunzip -fN 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 xo ../../$1

# Extract old deb contents (gzip)
gunzip -fN control.tar.gz
gunzip -fN 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)