pkgsrc-rs
A Rust interface to the pkgsrc infrastructure, binary package archives, and the pkg_install pkgdb.
This is being developed alongside:
- mktool, a collection of tools that provide fast alternate implementations for various pkgsrc/mk scripts.
- bob, a pkgsrc package builder.
- pm, an exploration of what a binary package manager might look like (not currently being developed).
You should expect things to change over time as each interface adapts to better support these utilities, though I will still make sure to use semver versioning accordingly to avoid gratuitously breaking downstream utilities.
Example
This is a simple implementation of pkg_info(8) that supports the default
output format, i.e. list all currently installed packages and their single-line
comment.
use ;
use Path;
Status
- pkg_match() is implemented and verified to be correct against a large input of matches.
- Metadata handles "+*" files contained in an archive and is able to verify that the archive contains a valid package.
- PkgDB handles local pkg databases, currently supporting the regular file-backed repository, but with flexible support for future sqlite3-backed repositories.
- Summary handles pkg_summary(5) parsing and generation.
MSRV
As a library I want to keep it to as old an MSRV as reasonable, and so the current requirements are:
edition = "2021"rust-version = "1.74.1"
as calculated by cargo msrv. The limiting factor for supporting even older
versions is serde. The plan is to keep the requirements to the minimum that
our dependencies require.
License
This project is licensed under the ISC license.
Testing/compatibility notes
Generate list of dependency matches.
| |
Generate list of package names
Implement the following algorithm in both C and Rust and compare output
while ; do
while ; do
done
done
As an added bonus, the C version took 55 seconds to generate 158,916,879 matches, whilst the Rust version took 42 seconds.