0001-add-pre-realbuild-commands-and-post-realbuild-comman.patch | ||
findunusedbd.sh | ||
README.md | ||
run.sh |
Standalone
Use fatrace
to record all file access during an sbuild
run and find those
build dependencies which have their files never needed. You need superuser
privileges to run this script because of fatrace
.
Run it like follows. In one terminal execute:
$ ./findunusedbd.sh
In another run sbuild like this:
$ sbuild \
--chroot-setup-commands='/home/user/path/to/findunusedbd.sh chroot-setup' \
--pre-realbuild-commands='/home/user/path/to/findunusedbd.sh pre-realbuild' \
--post-realbuild-commands='/home/user/path/to/findunusedbd.sh post-realbuild'
This needs the --pre-realbuild-commands and --post-realbuild-commands to exist
which can be added to sbuild by applying
0001-add-pre-realbuild-commands-and-post-realbuild-comman.patch
to it.
Any unused dependencies can then be found by investigating the file
unneededdepends.list
.
Batch
The process can be automated for multiple packages by passing dsc
files to
run.sh
:
$ ./run.sh ../mysources/*.dsc
This script will put the successful builds in buildsuccess.list
and the found
unused build dependencies as *.unusedbd
for each dsc
file in the current
directory. A second pass on the successfully built dsc
files will then check
each of the found unused build dependencies for their validity by replacing
them by an empty equivs package with no dependencies one after another. The
results of that run are stored in *.unusedbd.real
files for each dsc
file
in the current directory. The run.sh
script expects to find
findunusedbd.sh
directly under /home
. Best try this out in a chroot to not
mess with the host system.
Schroot setup
Create the schroot:
$ sudo sbuild-createchroot --make-sbuild-tarball=/var/lib/sbuild/sid-amd64.tar.gz sid `mktemp -d` http://127.0.0.1:3142/snapshot.debian.org/archive/debian/20140601T000000Z
Enter the schroot:
$ sbuild-shell source:sid-amd64-sbuild
Make apt ignore the Valid-Until
header:
$ echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/80-nocheckvaliduntil
Install equivs
:
$ apt-get install equivs --no-install-recommends
Bugs
- when investigating which build dependencies are unused, virtual packages are not taken into account
- maybe the fake equivs package can be built outside the schroot to avoid the additional dependencies for installing equivs
License
Consider everything in this repository in the public domain. It is a gross hack and I do not care what you do with it.