#bom #bill-of-materials #mkbom #lsbom

stuckliste

A library for reading and writing MacOS bill-of-materials (BOM) files

8 releases

new 0.3.7 Dec 8, 2024
0.3.6 Dec 8, 2024

#288 in Filesystem

Download history 385/week @ 2024-12-04

385 downloads per month
Used in stuckliste-cli

GPL-3.0 license

115KB
3K SLoC

stuckliste

Crates.io Version Docs dependency status

MacOS's bill-of-materials (BOM) files reader/writer library that is fuzz-tested against the original mkbom and lsbom utilities. Includes re-implementation of these utilities as well.

Introduction

stuckliste is a library that offers types and methods for reading/writing MacOS bill-of-materials (BOM) files. These files are generic storage container for various type of information with the most common type being receipts — files that contains a list of all files and directories owned by a package and that are usually stored under /Library/Receipts. The library is fuzz-tested against MacOS's mkbom and lsbom utilities ensuring that it produces structurely the same output.

Installation

The easiest way to use stuckliste is via command line interface.

cargo install stuckliste-cli

Usage

As a command-line application

mkbom /tmp /tmp/receipt.bom
lsbom /tmp/receipt.bom

As a library

use std::fs::File;
use std::io::Error;
use stuckliste::receipt::{Receipt, ReceiptBuilder};

fn create_receipt() -> Result<(), Error> {
    let file = File::create("/tmp/receipt.bom")?;
    let receipt = ReceiptBuilder::new().create("/tmp")?;
    receipt.write(file)?;
    Ok(())
}

fn read_receipt() -> Result<(), Error> {
    let file = File::open("/tmp/receipt.bom")?;
    let receipt = Receipt::read(file)?;
    for (path, metadata) in receipt.entries()?.into_iter() {
        println!("{:?}: {:?}", path, metadata);
    }
    Ok(())
}

BOM reference

The BOM file structure is explained in a separate document.

References

This work is based on the following reverse-engineering efforts.

Dependencies

~0.1–6.5MB
~37K SLoC