Some commands accept package queries to identify list of packages to
process. Package query syntax almost matches reprepro query language.
Query consists of the following simple terms:
-with-packages flag: name_version_arch, e.g.:
libmysqlclient18_5.5.35-rel33.0-611.squeeze_amd64package_name followed by optional version
specification and architecture limit, e.g: mysql-client (>= 3.6).Priority (optional).Supported fields:
Filename, MD5sum, SHA1, SHA256, Size, Files,
Checksums-SHA1, Checksums-SHA256.$Source is a name of source package (for binary packages)$SourceVersion is a version of source package$Architecture is Architecture for binary packages and source
for source packages, when matching with equal (=) operator,
package with any architecture matches all architectures but
source.$Version has the same value as Version, but comparison operators
use Debian version precedence rules$PackageType is deb for binary packages, udeb for .udeb packages
and source for source packagesOperators:
=: strict match, default operator if no operator is given>=, <=, =, >> (strictly greater), << (strictly less):
lexicographical comparison for all fields and special rules when
comparing package versions%: pattern matching, like shell patterns, supported special
symbols are: [^]?*, e.g.: $Version (% 3.5-*)~: regular expression matching, e.g.: Name (~ .*-dev)Simple terms could be combined into more complex queries using operators
, (and), | (or) and ! (not), parentheses () are used to change
operator precedence. Match value could be enclosed in single (') or
double (") quotes if required to resolve ambiguity, quotes inside
quoted string should escaped with slash (\).
Examples:
mysql-client: matches package mysql-client of any version and
architecture (including source), also matches packages that
Provide: mysql-client.mysql-client (>= 3.6): matches package mysql-client with version
greater or equal to 3.6. Valid operators for version are: >=,
<=, =, >> (strictly greater), << (strictly less).mysql-client {i386}: matches package mysql-client on
architecture i386, architecture all matches all architectures
but source.mysql-client (>= 3.6) {i386}: version and architecture conditions
combined.libmysqlclient18_5.5.35-rel33.0-611.squeeze_amd64: direct package
reference.$Source (nginx): all binary packages with nginx as source
package.!Name (~ .*-dev), mail-transport, $Version (>= 3.5): matches all
packages that provide mail-transport with name that has no suffix
-dev and with version greater or equal to 3.5.Name: query matches all the packages (as it means “package name is not
empty”).When specified on command line, query may have to be quoted according to shell rules, so that it stays single argument:
$ aptly repo import percona stable 'mysql-client (>= 3.6)'
You can use package queries filter mirrors to include only packages with limited priorities:
$ aptly mirror create -filter="Priority (required)" wheezy-required http://mirror.yandex.ru/debian/ wheezy main
Or download single packages and all its dependencies:
$ aptly mirror create -filter="nginx" -filter-with-deps wheezy-required http://mirror.yandex.ru/debian/ wheezy main
Pull packages with complex conditions:
$ aptly snapshot pull snapshot1 source snapshot2 '!Name (% *-dev), $Version (>= 3.5)'
Or remove packages based on query:
$ aptly repo remove local-repo 'Name (% http-*) | $Source (webserver)'
Query could be tested by using family of search commands: for mirrors, snapshots and local repos.