- Notifications
You must be signed in to change notification settings - Fork125
The X Binary Package System (XBPS)
License
Unknown, Unknown licenses found
Licenses found
void-linux/xbps
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The X Binary Package System (in short XBPS) is a binary package systemdesigned 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 totallycompatible with POSIX/SUSv2/C99 standards, andreleased with aSimplified BSD license (2 clause). There is a welldocumented API provided by the XBPS Library that is the basis for its frontendsto handle binary packages and repositories. Some highlights:
- Supportsmultiple local/remote repositories (HTTP/HTTPS/FTP).
- RSA signed remote repositories (NEW in 0.27).
- Supportsmultiple compression formats for repositories:gzip (zlib), bzip2, lz4, xz,zstd (default).
- Supportsmultiple compression formats for package archives:gzip (zlib), bzip2, lz4, xz,zstd (default).
- SHA256 hashes for package metadata, files and binary packages.
- Supportspackage states (ala dpkg) to mitigate broken packageinstalls/updates.
- Ability toresume partial package install/updates.
- Ability tounpack only files that have been modified in package updates.
- Ability to usevirtual packages.
- Ability toignore completely any number of packages in dependency resolution.
- Ability tocheck for incompatible shared libraries in reversedependencies.
- Ability toupdate reverse dependencies of any number of packages orgloballyin a single transaction.
- Ability toreplace packages.
- Ability toput packages on hold (to never update them. NEW in 0.16).
- Ability topreserve/update configuration files.
- Ability toforce reinstallation of any installed package.
- Ability todowngrade any installed package.
- Ability toexecute pre/post install/remove/update scriptlets.
- Ability tocheck package integrity: missing files, hashes, missing orunresolved (reverse)dependencies, dangling or modified symlinks, etc.
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 theAUTHORS
file for a complete list of contributors.
Thanks to all who have contributed.
To build this you'll need:
- A C99 compiler (clang, gcc, pcc, tcc)
- A POSIX compatible shell
- GNU make
- pkgconf
- zlib
- openssl orlibressl
- libarchive >= 3.3.3 with lz4 and zstd support.
and optionally:
- graphviz anddoxygen(--enable-api-docs) to build API documentation.
- atf >= 0.15 (--enable-tests) to build theKyua test suite.
$ 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 usethe libxbps shared library at$ORIGIN/../lib
, that means that if xbpsis installed to$HOME/xbps-git/usr
, the executables will use$HOME/xbps-git/usr/lib
to locatelibxbps
.
Happy testing!
To run the test suite make surekyua is installed and run the following:
$ ./configure --enable-tests$ make$ make check
Standard configure script (not generated by GNU autoconf).
$ ./configure --prefix=/blah$ make -jX$ make install
By default PREFIX is set/usr/local
and may be changed by setting--prefix
in theconfigure
script. TheDESTDIR
variable is also supported at theinstall 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 theirsha256checksums.
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 repositories
In 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<package expression>
. 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:
<
less than>
greater than<=
less than or equal to>=
greater than or equal to
Such example would be
foo>=2.0
orblah-foo<=1.0
.
Repositories can be declared in a configuration file of theconfiguration
orsystem configuration
directories:
<sysconfdir>/xbps.d
- The configuration directory (set to/etc/xbps.d
)<sharedir>/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<sharedir>/xbps.d
.By default theXBPS
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
configuration
directory are added to the head of the list, while repositories specified viasystem configuration
directories 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
<package expression>
in local packages. This behaviourcan be changed by enabling the-R
or--repository
option to force repository mode.
To query the list of installed packages:
$ xbps-query -l
To query the list of working repositories:
$ xbps-query -L
To query the list of installed packages that were installed manually (not as dependencies):
$ xbps-query -m
To query the list of packages on hold (won't be upgraded automatically):
$ xbps-query -H
To 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 -O
To query a package and show its meta information:
$ xbps-query <package expression>
Additionally the
-p or --property
option can be used to only show a specific key of a package:
$ xbps-query --property=pkgver xbpsxbps-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 <package expression>
To query a package and show required run-time dependencies:
$ xbps-query -x <package expression>
To query a package and show required reverse run-time dependencies:
$ xbps-query -X <package expression>
To query for packages matching a file with specified pattern(s) (ownedby mode):
$ xbps-query -o <pattern>
Where
<pattern>
is a shell wildcard pattern as explained in fnmatch(3); e.g"*.png"
.
Multiple
<patterns>
can be specified as arguments.
To query for packages matching pkgname/version/description with specified pattern(s) (search mode):
$ xbps-query -s <pattern>
The same rules explained above in the
ownedby
mode shall be applied.
To synchronize remote repository index files:
$ xbps-install -S
The
-S, --sync
option can be combined while installing or updating packages, i.exbps-install -Su
.
To install a package:
$ xbps-install <package expression>
To install multiple packages at once:
$ xbps-install <package expression> <package expressions>
To update a single package:
$ xbps-install -u <package expression>
To update all packages (also known as dist-upgrade in Debian/Ubuntu):
$ xbps-install -u
The
-n, --dry-run
option 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 <package name>
To recursively remove unneeded dependencies that were installed by the target package:
$ xbps-remove -R <package name>
To remove package orphans:
$ xbps-remove -o
To clean the cache directory and remove outdated packages and/or packages with wrong hash:
$ xbps-remove -O
To remove package orphans and clean the cache repository both options can be combined, i.e
xbps-remove -Oo
.
Thexbps-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 packagereconfiguration. By default and unless the-f, --force
option is set, only packages thatwere not configured will be processed.
Its usage is simple, specify a package name or-a, --all
for all packages:
$ xbps-reconfigure [-f] <package name> | -a
Thexbps-pkgdb(1)
utility may be used to check for errors in packages and in the package database.It is also used to update thepackage database format (if there have been changes). It works exactly thesame way asxbps-reconfigure(1)
and expects a package name or -a, --all for all packages.
$ xbps-pkgdb <package name> | -a
To put a package on hold mode (won't be upgraded in dist-upgrade mode):
$ xbps-pkgdb -m hold <package name>
To remove a package from hold mode:
$ xbps-pkgdb -m unhold <package name>
To put a package in automatic mode (as it were installed as a dependency):
$ xbps-pkgdb -m auto <package name>
To put a package in manual mode (won't be detected as orphan):
$ xbps-pkgdb -m manual <package name>
To update the pkgdb format to the latest one:
$ xbps-pkgdb -u
NOTE: updating the pkgdb format does not happen too frequently, therefore it's only necessary in rare circumstances.
This command only has 3 operation modes:
Add [-a, --all]: adds the specified packages into the specified repository and removes previous entry if found:
$ xbps-rindex -a /path/to/repository/*.xbps
The
-f, --force
option can be used to forcefully register a package into the repository index, even if the same version is already registered.
Clean [-c, --clean]: cleans the index of the specified repository by removing outdated or invalid entries (nonexistent packages, unmatched hashes, etc):
$ xbps-rindex -c /path/to/repository
Remove-obsoletes [-r, --remove-obsoletes]: removes obsolete packages in repository (outdated, broken and unmatched hashes):
$ xbps-rindex -r /path/to/repository
Upgrade all packages in the system, without asking for an answer:
# xbps-install -Syu
Clean the cache directory and remove package orphans:
# xbps-remove -Oo
Show information of a package available in repositories:
$ xbps-query -R xbps
Show filelist of a package available in repositories:
$ xbps-query -Rf xbps
Find the packages that own the file/bin/ls
in repositories:
$ xbps-query -Ro /bin/ls
Make a package keepable (won't be detected as orphan):
# xbps-pkgdb -m manual xbps
Search for packages in repositories matching thexbps
pattern in itspkgver
andshort_desc
objects:
$ xbps-query -Rs xbps
Remove a package and all unnecessary dependencies that were installed:
# xbps-remove -R xbmc
Appending repositories via command line:
$ xbps-query --repository=<url> ...# xbps-install --repository=<url> ...
Switch an installed package to onhold mode (won't be updated viaxbps-install -u
):
# xbps-pkgdb -m hold <pkgname>
Switch an installed package to theunhold mode (will be updated if there are updates):
# xbps-pkgdb -m unhold <pkgname>
Check for errors on installed packages and in pkgdb:
# xbps-pkgdb -a
Listing all files not managed by xbps:
#!/bin/shtmp=$(mktemp -dt xbps-disownedXXXXXX)pkg=$tmp/pkgfs=$tmp/fstrap"rm -rf$tmp" EXITxbps-query -o\*| cut -d'' -f2| sort>$pkgfind /boot /etc /opt /usr /var -xdev -type f -print| sort>$fscomm -23$fs$pkg
About
The X Binary Package System (XBPS)