Crate pkgsrc

Crate pkgsrc 

Source
Expand description

§pkgsrc

pkgsrc is a cross-platform package management system originally developed for NetBSD, now available on many Unix-like operating systems. This crate provides types and utilities for working with pkgsrc packages, the package database, and pkgsrc infrastructure.

It is used by bob, a pkgsrc package builder, and mktool, a collection of fast alternate implementations for various pkgsrc/mk scripts.

§Modules

The crate is organised into modules that handle different aspects of pkgsrc:

ModulePurpose
archiveRead and create binary package archives
dependParse and match package dependencies
deweyDewey decimal version comparisons
digestCryptographic hash functions for file verification
distinfoParse and verify distinfo files
kvParse KEY=VALUE formatted data
metadataRead package metadata from +* files
patternMatch packages against glob, dewey, and alternate patterns
pkgdbAccess the installed package database
pkgnameParse package names into name and version components
pkgpathParse pkgsrc package paths (category/package)
plistParse packing list (PLIST) files
scanindexParse pbulk-index scan output
summaryParse pkg_summary(5) files

§Examples

Read an installed package’s metadata from the package database:

use pkgsrc::metadata::FileRead;
use pkgsrc::PkgDB;

let db = PkgDB::open("/var/db/pkg")?;
for entry in db {
    let pkg = entry?;
    println!("{}: {}", pkg.pkgname(), pkg.comment()?);
}

Extract files from a binary package:

use pkgsrc::Archive;

let mut archive = Archive::open("/path/to/package.tgz")?;
for entry in archive.entries()? {
    let entry = entry?;
    println!("{}", entry.path()?.display());
}

Parse a pkg_summary file to enumerate available packages:

use pkgsrc::summary::Summary;
use std::fs::File;
use std::io::BufReader;

let file = File::open("pkg_summary")?;
let reader = BufReader::new(file);
for entry in Summary::from_reader(reader) {
    let pkg = entry?;
    println!("{}: {}", pkg.pkgname(), pkg.comment());
}

Match packages using patterns:

use pkgsrc::Pattern;

let pattern = Pattern::new("perl>=5.30")?;
assert!(pattern.matches("perl-5.38.0"));
assert!(!pattern.matches("perl-5.28.0"));

§Feature Flags

  • serde: Enable serialization and deserialization support via serde for various types.

Re-exports§

pub use crate::archive::Archive;
pub use crate::depend::Depend;
pub use crate::depend::DependError;
pub use crate::depend::DependType;
pub use crate::dewey::Dewey;
pub use crate::dewey::DeweyError;
pub use crate::digest::Digest;
pub use crate::distinfo::Distinfo;
pub use crate::metadata::Metadata;
pub use crate::pattern::Pattern;
pub use crate::pattern::PatternError;
pub use crate::pkgdb::DBType;
pub use crate::pkgdb::PkgDB;
pub use crate::pkgname::PkgName;
pub use crate::pkgpath::PkgPath;
pub use crate::pkgpath::PkgPathError;
pub use crate::plist::Plist;
pub use crate::scanindex::ScanIndex;
pub use crate::scanindex::ScanIndexIter;
pub use crate::summary::Summary;

Modules§

archive
Read and write pkgsrc binary packages.
depend
Package dependency parsing and matching.
dewey
Dewey decimal version comparison.
digest
Digest hashing and validation. The Digest module is mostly a thin wrapper around the digest crate and a selection of hashes provided by the RustCrypto project, with some additional features for a pkgsrc context.
distinfo
pkgsrc distinfo file parsing and processing.
kv
Type-safe KEY=VALUE parsing for various pkgsrc formats.
metadata
Package metadata from +* files.
pattern
Package pattern matching with globs and version constraints.
pkgdb
Package database access.
pkgname
Package name parsing into base, version, and revision components.
pkgpath
Package path (category/name) handling.
plist
Packing list parsing and generation.
scanindex
Parse make pbulk-index output into package records.
summary
Parsing and generation of pkg_summary(5) package metadata.