debian-apt.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Mon, 22 Feb 2016 12:41:52 +0200
changeset 1903 901e7394849f
parent 1882 c9390070dc36
child 1905 fba288d59662
permissions -rw-r--r--
Decrease intent to increase space usage on mobile.

.. -*- coding: utf-8; -*-
.. include:: HEADER.rst

======
 Apt.
======
.. contents::

Conf files.
===========

See man sources.list(5), apt.conf(5), apt_preferences(5).

``/etc/apt/sources.list``::

  deb http://ftp.debian.org.ua/debian/ stable main contrib non-free
  deb http://ftp2.debian.org.ua/debian/ testing main contrib non-free
  deb http://ftp2.debian.org.ua/debian/ unstable main contrib non-free
  deb http://ftp.uk.debian.org/debian/ experimental main contrib non-free
  deb http://www.deb-multimedia.org testing main non-free

Package priority.
=================

``/etc/apt/preferences``::

  Package: *
  Pin: release a=stable
  Pin-Priority: 800

  Package: *
  Pin: release a=testing
  Pin-Priority: 900

  Package: *
  Pin: release a=unstable
  Pin-Priority: 700

  Package: *
  Pin: release a=experimental
  Pin-Priority: 600

Example that prevent installing ``*systemd*`` packages (priority strictly below
``0`` forbid package to be installed)::

  Package: systemd
  Pin: origin ""
  Pin-Priority: -1

  Package: *systemd*
  Pin: origin ""
  Pin-Priority: -1

Example that avoid installing packages from different distribution (priority
strictly below ``100`` cause a version to be installed only if there is no
installed version of the package), you should keep main distribution priority
above foreign distro priority::

  Package: *
  Pin: release a=testing
  Pin-Priority: 990

  Package: *
  Pin: release o=Kali
  Pin-Priority: 50

To discover package priority::

  bash# apt-cache madison emacs24
     emacs24 |   24.5+1-3 | http://ftp.us.debian.org/debian/ testing/main amd64 Packages
     emacs24 |   24.4+1-5 | http://http.kali.org/kali/ kali-current/main amd64 Packages
     emacs24 |   24.5+1-3 | http://ftp.us.debian.org/debian/ testing/main Sources

  bash# apt-cache policy emacs24
  emacs24:
    Installed: 24.5+1-3
    Candidate: 24.5+1-3
    Version table:
   *** 24.5+1-3 0
          990 http://ftp.us.debian.org/debian/ testing/main amd64 Packages
          100 /var/lib/dpkg/status
       24.4+1-5 0
           50 http://http.kali.org/kali/ kali-current/main amd64 Packages

  bash# aptitude versions emacs24
  Package emacs24:
  p   24.4+1-5                                      kali-current              50
  i   24.5+1-3                                      testing                   990

Debian releases.
================

Workflow::

  experimental → unstable (sid) → testing → stable

Which package from witch release::

  $ aptitude search ~S~i~Astable
  $ aptitude search ~S~i~Atesting
  $ aptitude search ~S~i~Aunstable
  $ aptitude search ~S~i~Aexperimental

 * https://wiki.debian.org/DebianReleases
 * https://wiki.debian.org/DebianOldStable
 * https://wiki.debian.org/DebianStable
 * https://wiki.debian.org/DebianTesting
 * https://wiki.debian.org/DebianUnstable
 * https://wiki.debian.org/DebianExperimental

Setup backport.
===============

Main backports archive located at http://www.backports.org.

To get packeges gpg sign key::

  $ su
  ...
  $ wget -O - http://backports.org/debian/archive.key | apt-key add -
  $ ^D

Write where packeges places::

  $ cat /etc/apt/sources.list
  deb http://www.backports.org/debian/ etch-backports main contrib non-free

Importing package signing key.
==============================

Usualy you can safely update keyring via ``debian-keyring`` package because it
is signed by prevoius keyring::

  $ sudo apt-get install debian-keyring

Defferent 3rd party provide keys for download. If you trust key (or get it in a
trusted way) it is easy to import it::

  $ sudo apt-key add $FILE.pgp

Another way to resolve warning::

  $ sudo apt-get update
  ...
  W: There is no public key available for the following key IDs:
  9AA38DCD55BE302B
  W: GPG error: http://http.us.debian.org etch Release: The following signatures
  couldn't be verified because the public key is not available: NO_PUBKEY
  9AA38DCD55BE302B
  ...

is to use key servers directly::

  $ gpg --keyserver pgp.mit.edu --recv-key 9AA38DCD55BE302B \
  --keyserver-options http-proxy=http://user:pass@192.168.1.1:3128
  gpg: requesting key 55BE302B from hkp server pgp.mit.edu
  gpg: key 55BE302B: public key "Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>" imported
  gpg: no ultimately trusted keys found
  gpg: Total number processed: 1
  gpg:               imported: 1  (RSA: 1)

  $ gpg --export 9AA38DCD55BE302B | sudo apt-key add -
  OK

Install build dependency for package.
=====================================
::

  $ apt-get install build-essential    # install dev LIBC and GCC C/C++
  $ sudo apt-get build-dep $package

If all you want is checking what packages are needed to build a given package::

  $ apt-cache showsrc $package

or check 'Build-Depends' attribute in::

  $ apt-cache show $package

Delete config file for removed packages.
========================================

To get list of such packages use one of::

  $ aptitude search ~c
  $ grep-status -n -sPackage -FStatus config-files

To remove them::

  $ aptitude purge ~c

Delete obsolete packages.
=========================

To get list of such packages use::

  $ aptitude search ~o

To remove them::

  $ aptitude purge ~o

To remove packages that were automatically installed to satisfy dependencies and
are now no longer needed::

  $ sudo apt-get autoremove

Clean up packages cache.
========================

Remove everything from ``/var/cache/apt/archives/`` and
``/var/cache/apt/archives/partial/``::

  $ sudo apt-get clean

Removes package files that can no longer be downloaded, and are largely
useless::

  $ sudo apt-get autoclean

Check package files for modification.
=====================================
::

  $ sudo debsums --changed

Search for packages.
====================
::

  $ aptitude search '?tag(works-with::logfile)'

Find nearest mirror.
====================
::

  $ sudo apt-get install netselect-apt
  $ netselect-apt stable
  $ netselect-apt testing
  $ netselect-apt unstable
  $ netselect-apt experimental
  $ netselect-apt sid

Newer approach for selecting mirror is via DNS. Just use::

  http://httpredir.debian.org/

Show dependency graph.
======================
::

  $ apt-cache dotty $PKG | dot -Tsvg >$PKG.svg && see $PKG.svg

  $ sudo apt-get install debtree
  $ debtree $PKG | dot -Tsvg >$PKG.svg && see $PKG.svg

  $ sudo apt-get install apt-rdepends
  $ apt-rdepends $PKG
  $ apt-rdepends -r $PKG
  $ apt-rdepends -d $PKG | dot -Tsvg >$PKG.svg && see $PKG.svg
  $ apt-rdepends -d -r $PKG | dot -Tsvg >$PKG.svg && see $PKG.svg