nthykier / apt-file

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DESCRIPTION

apt-file helps you to find in which package a file is included. This application has the same behaviour as the web version found at https://packages.debian.org.

Additionally you can list all files included in a package without installing or downloading it (see dpkg -S and dpkg --contents for more details about listing a package content).

GETTING STARTED

With apt-file, you can find files in packages or which packages contains a given file. To do this, apt-file needs access to the Contents files, which are usually available from your mirror. This is done with:

apt update

The apt command downloads the Contents files listed in its configuration. Here, apt-file installs /etc/apt/apt.conf.d/50apt-file.conf to have apt download indices of binary packages (.deb files). Once downloaded, you can now search in these indices by using:

apt-file search bin/lintian
# (or: apt-file find bin/lintian)

Alternatively, you can list all the files in a given package by using:

apt-file show lintian
# (or: apt-file list lintian)

NOTE: In apt-file 3, show and list takes an exact package name! In earlier versions of apt-file, any substring would do and it could return multiple results. If you want to use a substring search in apt-file 3, please use the "--substring-match" option.

By default, apt-file will analyse the "deb" indices. You can have it look at other indices by using the "--index-names" option.

apt-file --index-names dsc search frontend/lintian

apt-file --index-names deb,udeb search bin/parted

apt-file --index-names deb,udeb --substring-match show parted

This of course requires that you have the relevant indices available. The indices listed in the examples above are all present in the default /etc/apt/apt.conf.d/50apt-file.conf, although some of them are disabled.

Upgrading from apt-file 2

The upgrade from apt-file 2 to apt-file comes with a number of important changes.

Backwards incompatible changes

  • The format of /etc/apt/apt-file.conf is now an APT configuration file.
  • The following command line options have been removed:
    • --cache
    • --cdrom-mount / -d
    • --dummy / -y
    • --non-interactive / -N
  • Command line options/commands have changed behaviour/meaning
    • The "-c" option is now "--config" (reads an APT config file)
    • The "show"/"list" command now does an "exact match" (-F) by default. Use "--substring-match" to get the previous behaviour.
    • The "-a" option cannot be used with "source" or "udeb-$ARCH". Please use the new "--index-names" option. Remember to configure APT to download the extra Contents files.
  • User caches are no longer supported by default.
    • This can be emulated via a user config file to change the APT cache location.
  • The "diffindex-download" and "diffindex-rred" tools have been removed.
  • apt-file has changed its exit codes.
    • Notably, it returns "non-zero" when there are no matches to the queries.
    • Please review the manpage for the different exit codes.
  • apt-file now uses "gnu-getopt" option style parsing.
    • If you have been relying on the undocumented feature of using "+" instead of "-" when specifying options, it will no longer work.

Improvements due to using APT's acquire system

  • Contents files are now updated when using "apt update".
    • If download sizes or/and speed are a concern, please review the "OPTIMISING CONTENTS DOWNLOADS" section below.
  • apt-file now supports the Contents files being compressed in any compression format supported by APT.
  • apt-file now supports any sources.list file and download protocol that apt supports. This includes:
    • The deb822 sources files
    • Protocols like "mirror" or "tor+http(s)"
    • Respecting APT's proxy settings

OPTIMISING CONTENTS DOWNLOADS

There are a couple of methods to optimise the time / bandwidth used by fetching new Contents files.

  • Ensure that PDiffs are enabled for Contents files
    • This is the default for apt-file/3, but your local configuration might have disabled it.
    • Keep in mind that PDiff cannot be used for the initial download or if it has been too long since your last update.
    • NB: Not all suites/distributions provide these. Notably Ubuntu's development suites do ''not'' offer PDiffs.
  • Use apt/1.2 and its LZ4 compression for Contents files (requires PDiffs)
    • When fetching PDiffs, apt will recompress the Contents files as LZ4, which is vastly faster to decompress/compress than gzip.
    • This also gives a much faster search speed with apt-file.
  • Disable fetching of Contents files you do not need/want.
    • See the "Choosing which Contents files to fetch" section below.

If you are tracking a rapidly updating distribution, which does ''not'' have PDiffs, you probably want to disable fetching Contents by default for that distribution.

Choosing which Contents files to fetch

Even if you track multiple suites (or mirrors), you may not want to download Contents files for all of them.

Here are a couple of suggestions:

  • If you track unstable + testing, you can probably omit the Contents files for testing without any issues.
  • Contents-dsc (source) has a rather large churn and even its PDiffs are large.
    • It is not enabled by default, but consider if you really need it before enabling it.

Configuring APT to fetch fewer Contents files

There are several ways to do this:

  • Disable all Contents files by default and then enable them on a per source.list entry basis.

    • The example config file 60disable-contents-fetching.conf may be a useful starting point. The full path is /usr/share/doc/apt-file/examples/60disable-contents-fetching.conf
  • Disable Contents files for a given source.list entry

To disable/enable Contents fetching globally, simply set:

Acquire::IndexTargets::deb::Contents-deb::DefaultEnabled

in your APT config to the desired value. This works similarly with other indices (remember to replace "::deb::" with "::deb-src::" for the "Contents-dsc" target).

Then in your sources.list, you can manually enable/disable them on a per target basis:

deb [target+=Contents-deb] $MIRROR/debian unstable main ...
deb [target-=Contents-deb] $MIRROR/debian unstable main ...

Note that the "Contents-dsc" should be on a "deb-src" entry.

For more information on this, please refer to "man 5 sources.list" and "man 5 apt.conf"

Download sizes

If you are interested in the download sizes involved, here are a few numbers from Debian amd64 unstable (only the main component).

  • Full Contents: ~30MB (per download)
    • Measured in Feb 2016.
  • PDiffs: ~1.15MB/day
    • Average of PDiffs over 14 days in Feb 2016.

Accordingly, if you update your Contents files more frequently than every once every ~26 days, it is (on average) cheaper to use PDiffs. Of course, if you use a different distribution, your mileage may vary.

NOTE: The "apt update" after installing apt-file 3 (or upgrading from apt-file 2) cannot use PDiffs. This is because PDiffs are basically patches to your existing Contents files.

PDiffs and speed

The original PDiff support in APT unfortunately suffered from a number of performance issues. This has lead to the general opinion that "PDiffs are slow".

However, APT has implemented a number of improvements to the PDiff performance (note that "rred" is the program applying the PDiffs).

  • Client-side PDiff merging since APT 0.9.14.3~exp2 (2014-01)
    • This greatly reduces the time taken to apply multiple PDiffs
    • Note that apt-file 2 had this feature for a long time.
  • Buffered reads in "rred" since APT 1.1.6 and 1.1.7 (2015-12)
  • Parallel running of "rred" since APT 1.2~exp1 (2016-01)
    • This makes APT apply PDiffs on Packages and Contents files in parallel (provided you got multiple CPU cores).
  • Recompression of Contents files to lz4 since APT 1.2~exp1 (2016-01)
    • This removes a major overhead in reading and writing gzipped Contents files.
    • This comes at a cost of compression ratio (~x2).
    • Alternatively, if disk space is important, you can use a better compressor (e.g. xz) at the cost of more time spent compressing.

If you are interested in the details of these improvements in APT, please have a look at the following blog posts of Julian Andres Klode:

About


Languages

Language:Perl 89.7%Language:Shell 7.0%Language:Makefile 3.3%