Debian Package Management

Debian Package Management

Requirements:
Debian Based Linux Distribution: (Debian, Ubuntu, Linux Mint,etc)
When it comes to managing your software, Linux distributions make it fairly
easy to install, update, or remove installed programs. This is mostly done with
package managers. Today i will be going over Debian’s package manager. dpkg is
the software at the core of the package management system for Debian. It is used
to install, remove, and provide information about .deb packages. This is
considered a low-level tool. We more commonly use apt. apt is more commonly used
then dpkg because it has can also fetch packages from remote locations , as well
as deal with complex package relations, such as resolving dependencies. On top
of that, there are front ends for apt such as aptitude, a program written with
ncurses, and synaptic, a program written with GTK+, which will provide a
friendlier interface for users. Lets run dpkg with the help command

[sourcecode lang=’bash’]
clim@debian:~$ dpkg –help
Usage: dpkg [
…]

Commands:
-i|–install … | -R|–recursive …
–unpack … | -R|–recursive …
-A|–record-avail … | -R|–recursive …
–configure … | -a|–pending
–triggers-only … | -a|–pending
-r|–remove … | -a|–pending
-P|–purge … | -a|–pending
-V|–verify […] Verify the integrity of package(s).
–get-selections […] Get list of selections to stdout.
–set-selections Set package selections from stdin.
–clear-selections Deselect every non-essential package.
–update-avail [] Replace available packages info.
–merge-avail [] Merge with info from file.
–clear-avail Erase existing available info.
–forget-old-unavail Forget uninstalled unavailable pkgs.
-s|–status […] Display package status details.
-p|–print-avail […] Display available version details.
-L|–listfiles … List files ‘owned’ by package(s).
-l|–list […] List packages concisely.
-S|–search … Find package(s) owning file(s).
-C|–audit […] Check for broken package(s).
–yet-to-unpack Print packages selected for installation.
–predep-package Print pre-dependencies to unpack.
–add-architecture Add to the list of architectures.
–remove-architecture Remove from the list of architectures.
–print-architecture Print dpkg architecture.
–print-foreign-architectures Print allowed foreign architectures.
–assert- Assert support for the specified feature.
–validate- Validate a ‘s .
–compare-versions Compare version numbers – see below.
–force-help Show help on forcing.
-Dh|–debug=help Show help on debugging.

-?, –help Show this help message.
–version Show the version.

Assertable features: support-predepends, working-epoch, long-filenames,
multi-conrep, multi-arch, versioned-provides.

Validatable things: pkgname, archname, trigname, version.

Use dpkg with -b, –build, -c, –contents, -e, –control, -I, –info,
-f, –field, -x, –extract, -X, –vextract, –ctrl-tarfile, –fsys-tarfile
on archives (type dpkg-deb –help).

Options:
–admindir= Use instead of /var/lib/dpkg.
–root= Install on a different root directory.
–instdir= Change installation dir without changing admin dir.
–path-exclude= Do not install paths which match a shell pattern.
–path-include= Re-include a pattern after a previous exclusion.
-O|–selected-only Skip packages not selected for install/upgrade.
-E|–skip-same-version Skip packages whose same version is installed.
-G|–refuse-downgrade Skip packages with earlier version than installed.
-B|–auto-deconfigure Install even if it would break some other package.
–[no-]triggers Skip or force consequential trigger processing.
–verify-format= Verify output format (supported: ‘rpm’).
–no-debsig Do not try to verify package signatures.
–no-act|–dry-run|–simulate
Just say what we would do – don’t do it.
-D|–debug= Enable debugging (see -Dhelp or –debug=help).
–status-fd Send status change updates to file descriptor .
–status-logger= Send status change updates to ‘s stdin.
–log= Log status changes and actions to .
–ignore-depends=,…
Ignore dependencies involving .
–force-… Override problems (see –force-help).
–no-force-…|–refuse-…
Stop when problems encountered.
–abort-after Abort after encountering errors.

Comparison operators for –compare-versions are:
lt le eq ne ge gt (treat empty version as earlier than any version);
lt-nl le-nl ge-nl gt-nl (treat empty version as later than any version);
< << = >> > (only for compatibility with control file syntax).

Use ‘apt’ or ‘aptitude’ for user-friendly package management.
clim@debian:~$
[/sourcecode]

So there is alot to take in here, lets start with some basic examples. If I
wanted to manually install a debian package, after downloading the package i
would then use:

[sourcecode lang=’bash’]
clim@debian:~$ sudo dpkg -i filename.deb
[/sourcecode]

Just a quick note, i use sudo to switch to root to install the package. Next
if i just wanted to name the packages that are currently installed, i can use

[sourcecode lang=’bash’]
clim@debian:~$ dpkg -l
[/sourcecode]

And to remove a package its simply

[sourcecode lang=’bash’]
clim@debian:~$ dpkg -r packagename
[/sourcecode]

If you ever stop an upgrade while it is running you may need to run:

[sourcecode lang=’bash’]
clim@debian:~$sudo dpkg –configure -a
[/sourcecode]

This will require administrative privileges so using sudo is required for this
as well as installing packages. Lets go over apt now.
APT stands for Advanced Package Tool. It is a free-software user interface
which works with core libraries to handle software. It simplifies the process of
managing software on Debian-based systems by automating the retrieval,
configuration and installation of software packages. Its done by either
pre-compiled binaries, or compiling the source code. The manpage for this one is
a bit more formatted:

[sourcecode lang=’bash’]
clim@debian:~$man apt
APT(8) APT APT(8)

NAME
apt – command-line interface

SYNOPSIS
apt [-h] [-o=config_string] [-c=config_file] [-t=target_release]
[-a=architecture] {list | search | show | update |
install pkg [{=pkg_version_number | /target_release}]… |
remove pkg… | upgrade | full-upgrade | edit-sources |
{-v | –version} | {-h | –help}}

DESCRIPTION
apt provides a high-level commandline interface for the package
management system. It is intended as an end user interface and enables
some options better suited for interactive usage by default compared to
more specialized APT tools like apt-get(8) and apt-cache(8).

Much like apt itself, its manpage is intended as an end user interface
and as such only mentions the most used commands and options partly to
not duplicate information in multiple places and partly to avoid
overwhelming readers with a cornucopia of options and details.

update (apt-get(8))
update is used to download package information from all configured
sources. Other commands operate on this data to e.g. perform
package upgrades or search in and display details about all
packages available for installation.

upgrade (apt-get(8))
upgrade is used to install available upgrades of all packages
currently installed on the system from the sources configured via
sources.list(5). New packages will be installed if required to
satisfy dependencies, but existing packages will never be removed.
If an upgrade for a package requires the removal of an installed
package the upgrade for this package isn’t performed.

full-upgrade (apt-get(8))
full-upgrade performs the function of upgrade but will remove
currently installed packages if this is needed to upgrade the
system as a whole.

install, reinstall, remove, purge (apt-get(8))
Performs the requested action on one or more packages specified via
regex(7), glob(7) or exact match. The requested action can be
overridden for specific packages by append a plus (+) to the
package name to install this package or a minus (-) to remove it.

A specific version of a package can be selected for installation by
following the package name with an equals (=) and the version of
the package to select. Alternatively the version from a specific
release can be selected by following the package name with a
forward slash (/) and codename (buster, bullseye, sid …) or suite
name (stable, testing, unstable). This will also select versions
from this release for dependencies of this package if needed to
satisfy the request.

Removing a package removes all packaged data, but leaves usually
small (modified) user configuration files behind, in case the
remove was an accident. Just issuing an installation request for
the accidentally removed package will restore its function as
before in that case. On the other hand you can get rid of these
leftovers by calling purge even on already removed packages. Note
that this does not affect any data or configuration stored in your
home directory.

autoremove (apt-get(8))
autoremove is used to remove packages that were automatically
installed to satisfy dependencies for other packages and are now no
longer needed as dependencies changed or the package(s) needing
them were removed in the meantime.

You should check that the list does not include applications you
have grown to like even though they were once installed just as a
dependency of another package. You can mark such a package as
manually installed by using apt-mark(8). Packages which you have
installed explicitly via install are also never proposed for
automatic removal.

search (apt-cache(8))
search can be used to search for the given regex(7) term(s) in the
list of available packages and display matches. This can e.g. be
useful if you are looking for packages having a specific feature.
If you are looking for a package including a specific file try apt-
file(1).

show (apt-cache(8))
Show information about the given package(s) including its
dependencies, installation and download size, sources the package
is available from, the description of the packages content and much
more. It can e.g. be helpful to look at this information before
allowing apt(8) to remove a package or while searching for new
packages to install.

list (work-in-progress)
list is somewhat similar to dpkg-query –list in that it can
display a list of packages satisfying certain criteria. It supports
glob(7) patterns for matching package names as well as options to
list installed (–installed), upgradeable (–upgradeable) or all
available (–all-versions) versions.

edit-sources (work-in-progress)
edit-sources lets you edit your sources.list(5) files in your
preferred texteditor while also providing basic sanity checks.

SCRIPT USAGE AND DIFFERENCES FROM OTHER APT TOOLS
The apt(8) commandline is designed as an end-user tool and it may
change behavior between versions. While it tries not to break backward
compatibility this is not guaranteed either if a change seems
beneficial for interactive use.

All features of apt(8) are available in dedicated APT tools like apt-
get(8) and apt-cache(8) as well. apt(8) just changes the default value
of some options (see apt.conf(5) and specifically the Binary scope). So
you should prefer using these commands (potentially with some
additional options enabled) in your scripts as they keep backward
compatibility as much as possible.

SEE ALSO
apt-get(8), apt-cache(8), sources.list(5), apt.conf(5), apt-config(8),
The APT User’s guide in /usr/share/doc/apt-doc/, apt_preferences(5),
the APT Howto.

DIAGNOSTICS
apt returns zero on normal operation, decimal 100 on error.

BUGS
APT bug page[1]. If you wish to report a bug in APT, please see
/usr/share/doc/debian/bug-reporting.txt or the reportbug(1) command.

AUTHOR
APT team

NOTES
1. APT bug page
http://bugs.debian.org/src:apt

APT 1.8.2 27 January 2019 APT(8)
[/sourcecode]

Some of the common things you may need to do is update the system as well as
upgrade. When you first install Debian, or Ubuntu, or whatever Debian-based
Linux Distribution you choose, you will most likely perform this command:

[sourcecode lang=’bash’]
clim@debian:~$ sudo apt update && sudo apt upgrade
[sudo] password for clim:
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://ftp.us.debian.org/debian buster InRelease
Hit:3 http://ftp.us.debian.org/debian buster-updates InRelease
Hit:4 https://packagecloud.io/AtomEditor/atom/any any InRelease
Reading package lists… Done
Building dependency tree
Reading state information… Done
All packages are up to date.
Reading package lists… Done
Building dependency tree
Reading state information… Done
Calculating upgrade… Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
clim@debian:~$
[/sourcecode]

So what did i just do? Well first i ran apt update, which will update your
system to determine what programs have newer versions online, after you update
your repository, you then have to run upgrade to install the upgrades available.
I have ran this command fairly recently, so there is not any available upgrades.
So how did this work? Well the update command checks a specific file on your
computer for specific addresses of servers containing the packages.

[sourcecode lang=’bash’]
clim@debian:~$ cat /etc/apt/sources.list
#

# deb cdrom:[Debian GNU/Linux 9.5.0 _Buster_ – Official amd64 NETINST 20180714-10:25]/ buster main

#deb cdrom:[Debian GNU/Linux 9.5.0 _Buster_ – Official amd64 NETINST 20180714-10:25]/ buster main

deb http://ftp.us.debian.org/debian/ buster main
deb-src http://ftp.us.debian.org/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main

# buster-updates, previously known as ‘volatile’
deb http://ftp.us.debian.org/debian/ buster-updates main
deb-src http://ftp.us.debian.org/debian/ buster-updates main
[/sourcecode]

Lets break down this file located at /etc/apt/sources.list. The first string
determines if you are looking for packages (“deb”) or sources (“deb-src”). The
next string is the location of the repository. The third string is the version
name, Debian’s current version is Buster . And the last is just the main
repository, however there are others as well. Im not quite sure where the Atom
IDE repository is stored, as you saw above, it checked a third-party link to
ATOM. Maybe its stored in my /etc/apt/sources.list.d/ directory. This contains
additional source list fragments. I do believe i installed Atom via dpkg so I am
not quite sure. Well anyway. Your configuration file is at /etc/apt/apt.conf and
also contains a directory similar to the sources list that has file fragments (
located at /etc/apt/apt.conf.d/). You can also find archives in /var/cache/apt
And the storage area for package state information at /var/lib/apt/lists/ .
Those last couple are not really used by the user though, it may be useful to have
that information.
So apt’s main keywords you will use are: install , remove, update, upgrade ,
autoclean and dist-upgrade as such:

[sourcecode lang=’bash’]
clim@debian:~$ sudo apt update
clim@debian:~$ sudo apt upgrade
clim@debian:~$ sudo apt install programName
clim@debian:~$ sudo apt remove programName
clim@debian:~$ sudo apt autoclean
clim@debian:~$ sudo apt dist-upgrade
[/sourcecode]

For the last little piece of information, when you are installing, usually it
will come back with a list of suggested packages for extra features of your
program so you can use the flag –install-suggests as such:

[sourcecode lang=’bash’]
clim@debian:~$ sudo apt install programName –install-suggests
[/sourcecode]

 

Leave a Reply