DiffDebScript

Differences between revisions 2 and 4 (spanning 2 versions)
Revision 2 as of 2006-05-02 01:32:05
Size: 2057
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"
# E.g: ./diffdeb origdebs/gimp_2.2.8-2ubuntu6_i386.deb origdebs/gimp_2.2.11-1ubuntu1_i386.deb diff
echo "Usage: diffdeb old new diff"
Line 16: Line 39:
ar x ../../$1 ar xo ../../$1
Line 22: Line 45:
ar x ../../$2 ar xo ../../$2
Line 28: Line 51:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 35: Line 58:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 55: Line 78:
Line 61: Line 83:
#ar -r test.deb gimp_2.2.11-1ubuntu1_i386/*
echo "Usage patchdeb olddeb newdeb patch"
echo "Usage: patchdeb olddeb newdeb patch"
Line 70: Line 91:
ar x ../../$1 ar xo ../../$1
Line 73: Line 94:
gunzip -f control.tar.gz
gunzip -f data.tar.gz
gunzip -fN control.tar.gz
gunzip -fN data.tar.gz
Line 108: 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)