Three fields of the description decide whether a package suits this machine.
Version: 1.0-1 is the program's version and, after the last hyphen, the package build number. The tree version is longer, 2.1.1-2ubuntu3.24.04.2: the program is 2.1.1, the rest is the Ubuntu build. Versions are compared as a whole string.
The architecture says which processor the package is built for. all goes on any: inside there are only scripts and text. tree and nginx are amd64 — they contain machine code, and the architecture shows in the archive name tree_…_amd64.deb too. dpkg --print-architecture prints the machine's architecture, here amd64.
A dependency in the Depends field names packages that must be installed. The sign in brackets sets the version:
| Entry | What fits |
|---|---|
lab-pkg-data (= 1.0-1) |
exactly version 1.0-1 |
libc6 (>= 2.38) |
version 2.38 or newer |
iproute2 |
any version |
dpkg checks a dependency against the package database. A dependency archive in the next file does not meet the requirement until it is installed.
lab-pkg-data 2.0-1 is installed. You install a lab-pkg-report archive with Depends: lab-pkg-data (= 1.0-1). Is the requirement met?
-
dpkg checks the dependency against the package database. An archive in the next file does not get into the database until it is installed.
-
The
=sign requires exactly that version. "This one or newer" is written as>=.
(= 1.0-1) requires lab-pkg-data at exactly this version to be installed. With 2.0-1 dpkg leaves lab-pkg-report unconfigured and says which dependency is not met.
Key points
-
Read the package version from the
Versionfield as a whole string. -
allsuits any processor,amd64only machines of that architecture. -
Dependsis checked against the package database: an installed package of a suitable version is needed.