autoimport: support processing individual files
[~helmut/debian-dedup.git] / README
1 Required packages
2 -----------------
3
4     aptitude install python python-debian python-lzma curl python-jinja2 python-werkzeug sqlite3 python-imaging python-yaml python-concurrent.futures
5
6 Create a database
7 -----------------
8 The database name is currently hardcoded as `test.sqlite3`. So copy the SQL
9 statements from `schema.sql` into `sqlite3 test.sqlite3`. In addition it is
10 highly recommended to put the database into WAL mode. Otherwise all your
11 reading queries will block forever when doing an import. This setting is
12 permanent.
13
14     PRAGMA journal_mode = WAL;
15
16 Import packages
17 ---------------
18 Import individual packages by feeding them to importpkg.py and readyaml.py:
19
20     ./importpkg.py < somepkg.deb | ./readyaml.py
21
22 You can import your local apt cache:
23
24     ./autoimport.py /var/cache/apt/archives
25
26 Import a full mirror (only http supported):
27
28     ./autoimport.py -n -p http://your.mirror.example/debian
29
30 Viewing the results
31 -------------------
32 Run `./webapp.py` and enjoy a webinterface at `0.0.0.0:8800` or inspect the
33 SQL database by hand. Here are some example queries.
34
35 Finding the 100 largest files shared with multiple packages.
36
37     SELECT a.package, a.filename, b.package, b.filename, a.size FROM content AS a JOIN hash AS ha ON a.id = ha.cid JOIN hash AS hb ON ha.hash = hb.hash JOIN content AS b ON b.id = hb.cid WHERE (a.package != b.package OR a.filename != b.filename) ORDER BY a.size DESC LIMIT 100;
38
39 Finding those top 100 files that save most space when being reduced to only
40 one copy in the archive.
41
42     SELECT hash, sum(size)-min(size), count(*), count(distinct package) FROM content JOIN hash ON content.id = hash.cid WHERE hash.function = "sha512" GROUP BY hash ORDER BY sum(size)-min(size) DESC LIMIT 100;
43
44 Finding PNG images that do not carry a .png file extension.
45
46     SELECT package, filename, size FROM content JOIN hash ON content.id = hash.cid WHERE function = "image_sha512" AND filename NOT LIKE "%.png";
47
48 Finding .gz files which either are not gziped or contain errors.
49
50     SELECT content.package, content.filename FROM content WHERE filename LIKE "%.gz" AND (SELECT count(*) FROM hash WHERE hash.cid = content.id AND hash.function = "gzip_sha512") = 0;