XBPS 0.39 is out

A new XBPS stable version has been released: 0.39. This is a major release that supports local search, preserve files, post-install/pre-remove messages, reverse checking of shared libraries (among other things).

Release notes:

  • Updated bash/zsh completions for >= 0.38 with new features (Contributed by Eivind Uggedal and Christian Neukirchen respectively).

  • xbps-rindex: fix -a/--add mode to create repodata archives with 0664 permissions; and do not create a new archive if the file cannot be open/locked, error out instead… otherwise the file lock is ignored.

  • A minor build fix for the musl C library.

  • Disabled best pkg matching code for performance reasons. When installing or updating a package without any version component, the first repo containing it wins. Previously the repository with the greatest version won. Use a specific package expression to match packages in multiple repos, or switch the order of the repos instead.

  • Added bash completion for xbps-*. Contributed by Eivind Uggedal.

  • Added zsh completion for xbps-* and xbps-src. Contributed by Christian Neukirchen.

  • xbps-query(8): added -s/--search local mode; local pkg queries are now possible.

  • pkgdb-0.38 format: the pkgdb plist file now contains all pkg metadata objects plus the pkgdb specific ones (automatic-install, install-date, metafile-sha256) with the pkg files list being the exception. The pkgdb code will automatically convert the pkgdb files to the new format the first time it’s accesed.

    This effectively implements a two phase upgrade, the first time to upgrade the pkgdb format and the second one to execute the real operation.

    The pkg metadata files stored in metadir (/var/db/xbps) now just contains its pkg files list objects, everything else is stored in pkgdb. This allows libxbps to speed up the process of checking for unmet shared libraries, among other things.

  • libxbps: added support to check pkg shlib-{provides,requires} objects for all pkgs in the transaction to be updated. This will make impossible to update a package to a newer version that contains incompatible shlibs used in its revdeps.

  • xbps-rindex(8): -r/--remove-obsoletes is now ~5x faster.

  • xbps-remove(8): -O/--clean-cache is now ~10% faster.

  • libxbps: xbps_repo_{open,close}() gained an additional argument to acquire/release a POSIX file lock (see lockf(3)) to serialize write access to the repository archive. This obsoletes the POSIX named semaphores that were used in xbps-rindex(8), which only allowed to add/clean a repository per architecture, even if it wasn’t the same local repository!

  • libxbps: the fetch code now is able to connect to HTTPS without the need of /etc/services being available; We don’t expect those ports to change anytime!

  • xbps-uchroot(8) is now only built on linux, because it’s not portable to other Operating Systems.

  • Added support to replace virtual packages when the package to be installed matches a virtual pkgname, for example:

    • nvidia is installed and provides the libGL virtual pkgname.
    • libGL matches the virtual pkgname and therefore replaces the nvidia pkg.
  • xbps-query(8): added –fulldeptree long option to print a full dependency tree for a package; this supersedes -xx which was broken since 0.37.

  • xbps-query(8): fix a segfault with -Rf when there’s no network connectivity. Reported by Gottox.

  • xbps-uchroot(8): do not remount / unnecessarily; just mount it as private and nosuid once; this is enough for our use cases.

  • xbps-query(8): --show/-S mode now explicitly prints pkg metadata keys with the bold ANSI escape code.

  • xbps-query(8): --search --property now works with <integer> objects, i.e:

    $ xbps-query -s ‘’ -p filename-size

  • xbps-remove(8): -O/--clean-cache no longer triggers an assertion when the cache directory is empty.

  • Implemented support to preserve existent on-disk files, by always ignoring the pkg content if the file has been matched. Details here.

    The new “preserve” keyword can be used in the xbps configuration file, as well as for the system and configuration directories:


Full path to a file or globbing can be used:

  • Always preserve files that exist on disk, but are managed by a package. When such condition ocurrs install the pkg configuration file as file.new-<version>. This fixes GH issue #50.

  • Implemented support for post-install and pre-remove messages, as explained in issue #44.

    xbps-create(8) will read the {INSTALL,REMOVE}.msg files and will add its contents into the {install,remove}-msg data objects on its metadata plist file.

  • xbps-install(8): added support to list packages that will be downloaded, if those were available in a remote repository and were not in the cache directory.

  • Before accepting a transaction, xbps now checks if there’s enough free space on the target rootdir (on disk) to proceed with the operation. In code terms, xbps_transaction_prepare() now returns ENOSPC if the size of the transaction exceeds the size of the free space. Close issue #7.

  • When installing or updating packages, now proper statistics are generated when a binary package from a remote repository exists in the cachedir, and when a package has the “preserve” property.

  • libxbps: return ENXIO and a meaningful error message if a package that is going to be installed or updated has invalid dependencies, i.e:

$ xbps-install --repository=$HOME/repo -n foo
ERROR: foo-1.0_1: can't guess pkgname for dependency '>=invalid-spec_1'
Package `foo' contains invalid dependencies, exiting.

This fixes #43 (xbps-install: unhelpful message for invalid dependency) submitted by Dominik Honnef.

  • libxbps: fixed a new issue with packages that provide/replace the same virtual package that is going to be replaced. The issue could be reproduced easily by installing any awk package (gawk, mawk, or nawk), which are providing/replacing the “awk” virtual package.

  • libfetch: synchronized with NetBSD pkgsrc/libfetch.

  • libfetch: add support for TLS SNI (Server Name Identification) from NetBSD, with some minor debug changes. This fixes GH issue #41.

Please report issues at https://github.com/voidlinux/xbps/issues.