aptly 0.8 - .udeb support, search and filtering

aptly 0.8 has been released today. For installation instructions, please proceed to Download page.

Most important new features are:

Searching for Packages

aptly has powerful query language which allows to select subset of packages. Query language is used in many commands: pulling packages between snapshots, copying, moving packages between local repositories, filtering mirror contents, etc.
aptly 0.8 allows to use queries to search mirrors, snapshots and local repos for packages matching condition. E.g. all packages that have been built from source package apt:

$ aptly mirror search wheezy-main '$Source (apt)'
apt-doc_0.9.7.9+deb7u1_all
apt-transport-https_0.9.7.9+deb7u1_amd64
apt-utils_0.9.7.9+deb7u1_amd64
libapt-pkg4.12_0.9.7.9+deb7u1_amd64
apt_0.9.7.9+deb7u1_amd64
libapt-pkg-dev_0.9.7.9+deb7u1_i386
apt_0.9.7.9+deb7u1_i386
libapt-pkg-doc_0.9.7.9+deb7u1_all
libapt-pkg-dev_0.9.7.9+deb7u1_amd64
libapt-inst1.5_0.9.7.9+deb7u1_amd64
libapt-inst1.5_0.9.7.9+deb7u1_i386
apt-utils_0.9.7.9+deb7u1_i386
apt-transport-https_0.9.7.9+deb7u1_i386
libapt-pkg4.12_0.9.7.9+deb7u1_i386

aptly can also search whole package database for packages matching condition. For example, all packages with name starting with pam, not including source packages:

$ aptly package search 'Name (% pam*), !$Architecture (source)'
pam-dbus-notify_0.2.1-1_all
paml_4.5-1_amd64
paman_0.9.4-1_i386
pam-pkcs11-dbg_0.6.8-1_amd64
pamusb-common_0.5.0-4_i386
pamusb-common_0.5.0-4_amd64
pamusb-tools_0.5.0-4_all
paman_0.9.4-1_amd64
paml-doc_4.5-1_all
pam-pkcs11-dbg_0.6.8-1_i386

We can get details about packages, including its inclusion into other objects:

$ aptly package show -with-references libattr1_1:2.4.46-8_amd64
Package: libattr1
Version: 1:2.4.46-8
Installed-Size: 61
Priority: required
...

References to package:
  mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy
  mirror [wheezy-main-src]: http://mirror.yandex.ru/debian/ wheezy [src]
  snapshot [wheezy-7.5]: Snapshot from mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy

Filtering Snapshots

Now snapshots could be filtered directly to produce other snapshots. Prior to that, the same effect could be achieved using empty snapshot as one of the arguments to aptly snapshot pull command. Filtering is based on package queries as well. E.g. extract ‘required’ part of Debian into separate snapshot:

$ aptly snapshot filter wheezy-7.5 wheezy-7.5-required 'Priority (required)'
Loading packages (56121)...
Building indexes...

Snapshot wheezy-7.5-required successfully filtered.
You can run 'aptly publish snapshot wheezy-7.5-required' to publish snapshot as Debian repository.

$ aptly snapshot show wheezy-7.5-required
Name: wheezy-7.5-required
Created At: 2014-10-03 21:50:30 MSK
Description: Filtered 'wheezy-7.5', query was: 'Priority (required)'
Number of packages: 113

.udeb Support

aptly now supports .udeb (micro-deb) packages in mirrors, local repos and published repositories. .udeb packages are used by Debian installer during initial installation phase. With .udeb support, it should be possible to install Debian from repository published by aptly. As aptly doesn’t support yet mirroring without resigning (leaving Debian signature as-is), it would require some changes to installer in order to support custom key.

Concurrent Mirror Update

Prior to version 0.8, aptly was locking database (which prevented any concurrent operations) during whole aptly mirror update run, which included download of package files that might take hours. aptly 0.8 would unlock the database after package index download (right before package files download), so during download phase other commands could be run, e.g. create another mirror, take snapshots, publish other repositories and so on. aptly locks repository being updated during package download to prevent modifications to the repository.

All Changes

Full list of changes since 0.7.1: