How to query APT configuration

Query APT configuration to inspect specific options or create universal Debian utilities.

Query all APT configuration options

Query and display all APT configuration options.

$ apt-config dump 
APT "";
APT::Architecture "amd64";
APT::Build-Essential "";
APT::Build-Essential:: "build-essential";
APT::Install-Recommends "1";
APT::Install-Suggests "0";
[...]
Dir "/";
Dir::State "var/lib/apt";
Dir::State::lists "lists/";
Dir::State::cdroms "cdroms.list";
Dir::State::mirrors "mirrors/";
Dir::State::extended_states "extended_states";
Dir::State::status "/var/lib/dpkg/status";
[...]
Acquire::AllowInsecureRepositories "0";
Acquire::AllowWeakRepositories "0";
Acquire::AllowDowngradeToInsecureRepositories "0";
[...]
CommandLine::AsString "apt-config dump";

Query all APT configuration options and display cache settings.

$ apt-config dump | grep "^Dir\( \|::Cache\)"
Dir "/";
Dir::Cache "var/cache/apt";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "srcpkgcache.bin";
Dir::Cache::pkgcache "pkgcache.bin";
Dir::Cache::Backup "backup/";

Use specific format and additional utilities like grep and cut to query and display regular expressions matching packages that will not be automatically removed.

$ apt-config dump --no-empty --format '%f,%v%n' | grep NeverAutoRemove | grep -v  "^$" | cut -d, -f2 
^firmware-linux.*
^linux-firmware$
^linux-image-4\.9\.0-3-amd64$
^linux-headers-4\.9\.0-3-amd64$
^linux-image-extra-4\.9\.0-3-amd64$
^linux-signed-image-4\.9\.0-3-amd64$
^kfreebsd-image-4\.9\.0-3-amd64$
^kfreebsd-headers-4\.9\.0-3-amd64$
^gnumach-image-4\.9\.0-3-amd64$
^.*-modules-4\.9\.0-3-amd64$
^.*-kernel-4\.9\.0-3-amd64$
^linux-backports-modules-.*-4\.9\.0-3-amd64$
^linux-tools-4\.9\.0-3-amd64$

Investigate potential impact on APT configuration.

$ diff  <(apt-config dump | grep -v CommandLine::AsString) <(apt-config -o APT::Install-Suggests=1 dump | grep -v CommandLine::AsString)
6c6
< APT::Install-Suggests "0";
---
> APT::Install-Suggests "1";
$ diff <(apt-config dump | grep -v CommandLine::AsString) <(apt-config -o Acquire::http::Proxy="http://192.168.33.10:3142" dump | grep -v CommandLine::AsString)
188a189,190
> Acquire::http "";
> Acquire::http::Proxy "http://192.168.33.10:3142";

Query individual APT configuration options

Query and display individual APT configuration options.

$ eval $(apt-config shell Dir Dir)
$ eval $(apt-config shell CacheDir Dir::Cache)
$ echo ${Dir}${CacheDir}
/var/cache/apt

It is especially useful inside shell scripts to create universal configuration utilities.

# bash function
# return source list file path for provided name
function source_list_file_path() {
  local name dir etc src

  if [ -n "${1}" ]; then
    name="${1}"

    # set defaults
    dir="/"
    etc="etc/apt"
    src="sources.list.d"

    # query configuration options
    eval $(apt-config shell dir Dir)
    eval $(apt-config shell etc Dir::Etc)
    eval $(apt-config shell src Dir::Etc::sourceparts)

    # return path for source list file
    echo "${dir}${etc}/${src}/${name}.list"
  fi
}
$ source_list_file_path "jenkins"
/etc/apt/sources.list.d/jenkins.list

Alternatively, you can use APT configuration to store and query options to setup custom application, but there are probably better ways to achieve this goal.

Read apt-config manual page.

Milosz Galazka's Picture

About Milosz Galazka

Milosz is a Linux Foundation Certified Engineer working for a successful Polish company as a system administrator and a long time supporter of Free Software Foundation and Debian operating system. He is also open for new opportunities and challenges.

Gdansk, Poland https://sleeplessbeastie.eu