The X Binary Package System (XBPS)
The X Binary Package System (in short XBPS) is a binary package system designed and implemented from scratch. Its goal is to be fast, easy to use, bug-free, featureful and portable as much as possible.
The XBPS code is totally compatible with POSIX/SUSv2/C99 standards, and released with a Simplified BSD license (2 clause). There is a well documented API provided by the XBPS Library that is the basis for its frontends to handle binary packages and repositories. Some highlights:
XBPS contains an almost complete test suite, currently with ~200 test cases, and its number is growing daily! If you find any issue and you can reproduce it, we will fix it and a new test case will be created. No more regressions!
XBPS is brought to you by:
and many other contributors in the free community that have helped improving it.
See the AUTHORS file for a complete list of contributors.
Thanks to all who have contributed.
To build this you'll need:
and optionally:
$ git clone https://github.com/void-linux/xbps
$ cd xbps
$ ./configure --enable-rpath --prefix=/usr --sysconfdir=/etc
$ make -j$(nproc)
$ make DESTDIR=~/xbps-git install clean
$ export PATH=~/xbps-git/usr/bin:$PATH
$ xbps-query -V
...Thanks to --enable-rpath you can install it anywhere and it will still use
the libxbps shared library at $ORIGIN/../lib, that means that if xbps
is installed to $HOME/xbps-git/usr, the executables will use
$HOME/xbps-git/usr/lib to locate libxbps.
Happy testing!
To run the test suite make sure kyua is installed and run the following:
$ ./configure --enable-tests
$ make
$ make checkStandard configure script (not generated by GNU autoconf).
$ ./configure --prefix=/blah
$ make -jX
$ make installBy default PREFIX is set /usr/local and may be changed by setting --prefix
in the configure script. The DESTDIR variable is also supported at the
install stage.
There are some more options that can be tweaked, see them with
./configure --help.
Good luck!
Binaries for Linux compiled statically with the musl C library are available:
These builds are available on all official void mirrors, along with their sha256 checksums.
The xbps package includes the following utilities (among others, not a complete list):
xbps-create (1) - XBPS utility to create binary packagesxbps-dgraph (1) - XBPS utility to generate dot(1) graphsxbps-install (1) - XBPS utility to install and update packagesxbps-pkgdb (1) - XBPS utility to report and fix issues in pkgdbxbps-query (1) - XBPS utility to query for package and repository informationxbps-reconfigure (1) - XBPS utility to configure installed packagesxbps-remove (1) - XBPS utility to remove packagesxbps-rindex (1) - XBPS utility to handle local binary package repositoriesIn the following sections there will be a brief description of how these utilities currently work.
In the following examples there will be commands accepting an argument such as ``. A package expression is a form to match a pattern; currently XBPS >= 0.19 supports 3 ways to specify them:
by specifying a package name, i.e foo.
by specifying the exact package name and version, i.e foo-1.0_1.
by specifying a package name and version separated by any of the following version comparators:
= greater than or equal to Such example would be foo>=2.0 or blah-foo/xbps.d - The configuration directory (set to /etc/xbps.d)
/xbps.d - The system directory (set to /usr/share/xbps.d)
A configuration file bearing the same filename in /etc/xbps.d overrides the one from /xbps.d.
By default the XBPS package provides only the main Void repository in the /usr/share/xbps.d/00-repository-main.conf file.
Additional repositories can be added by installing any of the following XBPS packages or creating new configuration files manually:
$ xbps-query -Rs void-repo
[*] void-repo-debug-3_1 Void Linux drop-in file for the debug repository
[*] void-repo-multilib-3_1 Void Linux drop-in file for the multilib repository
[*] void-repo-multilib-nonfree-3_1 Void Linux drop-in file for the multilib/nonfree repository
[*] void-repo-nonfree-3_1 Void Linux drop-in file for the nonfree repository
$Repositories specified in the
configurationdirectory are added to the head of the list, while repositories specified viasystem configurationdirectories are appended to the existing list.
If no repositories are found it's possible to declare them manually via the command line option
--repository, currently accepted inxbps-install(1)andxbps-query(1).
xbps-query(1) will try to match `` in local packages. This behaviour can be changed by enabling the
-Ror--repositoryoption to force repository mode.
To query the list of installed packages:
$ xbps-query -lTo query the list of working repositories:
$ xbps-query -LTo query the list of installed packages that were installed manually (not as dependencies):
$ xbps-query -mTo query the list of packages on hold (won't be upgraded automatically):
$ xbps-query -HTo query the list of installed package orphans (packages that were installed as dependencies but there is not any package currently that requires it):
$ xbps-query -OTo query a package and show its meta information:
$ xbps-query Additionally the
-p or --propertyoption can be used to only show a specific key of a package:
$ xbps-query --property=pkgver xbps
xbps-0.19_1
$Multiple properties can be specified by delimiting them with commas, i.e
-p key,key2.
To query a package and show its file list:
$ xbps-query -f To query a package and show required run-time dependencies:
$ xbps-query -x To query a package and show required reverse run-time dependencies:
$ xbps-query -X To query for packages matching a file with specified pattern(s) (ownedby mode):
$ xbps-query -o Where `` is a shell wildcard pattern as explained in fnmatch(3); e.g
"*.png".
Multiple `` can be specified as arguments.
To query for packages matching pkgname/version/description with specified pattern(s) (search mode):
$ xbps-query -s The same rules explained above in the
ownedbymode shall be applied.
To synchronize remote repository index files:
$ xbps-install -SThe
-S, --syncoption can be combined while installing or updating packages, i.exbps-install -Su.
To install a package:
$ xbps-install To install multiple packages at once:
$ xbps-install To update a single package:
$ xbps-install -u To update all packages (also known as dist-upgrade in Debian/Ubuntu):
$ xbps-install -uThe
-n, --dry-runoption can be used to print what packages will be updated and/or installed and doesn't need permissions in the target rootdir, which can be useful to list updates.
To remove a package:
$ xbps-remove To recursively remove unneeded dependencies that were installed by the target package:
$ xbps-remove -R To remove package orphans:
$ xbps-remove -oTo clean the cache directory and remove outdated packages and/or packages with wrong hash:
$ xbps-remove -OTo remove package orphans and clean the cache repository both options can be combined, i.e
xbps-remove -Oo.
The xbps-reconfigure(1) utility may be used to configure packages that were not previously
(perhaps due to a power outage, process killed, etc) or simply to force package
reconfiguration. By default and unless the -f, --force option is set, only packages that
were not configured will be processed.
Its usage is simple, specify a package name or -a, --all for all packages:
$ xbps-reconfigure [-f] | -aThe xbps-pkgdb(1) utility may be used to check for errors in packages and in the package database.
It is also used to update the package database format (if there have been changes). It works exactly the
same way as xbps-reconfigure(1) and expects a package name or -a, --all for all packages.
$ xbps-pkgdb | -aTo put a package on hold mode (won't be upgraded in dist-upgrade mode):
$ xbps-pkgdb -m hold To remove a package from hold mode:
$ xbps-pkgdb -m unhold To put a package in automatic mode (as it were installed as a dependency):
$ xbps-pkgdb -m auto To put a package in manual mode (won't be detected as orphan):
$ xbps-pkgdb -m manual To update the pkgdb format to the latest one:
$ xbps-pkgdb -uNOTE: updating the pkgdb format does not happen too frequently, therefore it's only necessary in rare circumstances.
No open issues yet, or sync has not completed.