Crate rpm

Source
Expand description

§rpm-rs

A library providing API to parse rpms as well as creating rpms from individual files.

All supported compression types are behind feature flags. All of them except bzip2 are enabled by default. They can be disable if these compression algorithms are unused.

§Example

use rpm::{
    signature::pgp::{
        Signer,
        Verifier
    },
};
use std::str::FromStr;

let raw_secret_key = std::fs::read("./test_assets/secret_key.asc")?;
// It's recommended to use timestamp of last commit in your VCS
let source_date = 1_600_000_000;
let pkg = rpm::PackageBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
    .compression(rpm::CompressionType::Gzip)
    .with_file(
        "./test_assets/awesome.toml",
        rpm::FileOptions::new("/etc/awesome/config.toml").is_config(),
    )?
    // file mode is inherited from source file
    .with_file(
        "./test_assets/awesome.py",
        rpm::FileOptions::new("/usr/bin/awesome"),
    )?
    .with_file(
        "./test_assets/awesome.toml",
        // you can set a custom mode and custom user too
        rpm::FileOptions::new("/etc/awesome/second.toml")
            .mode(rpm::FileMode::regular(0o644))
            .user("hugo"),
    )?
    .pre_install_script("echo preinst")
    // If you don't need reproducible builds,
    // you can remove the following line
    .source_date(source_date)
    .build_host(gethostname::gethostname().to_str().unwrap_or("host"))
    .add_changelog_entry(
        "Max Mustermann <max@example.com> - 0.1-29",
        "- was awesome, eh?",
        chrono::DateTime::parse_from_rfc2822("Wed, 19 Apr 2023 23:16:09 GMT")
            .expect("Date 1 is correct. qed"),
    )
    .add_changelog_entry(
        "Charlie Yom <test2@example.com> - 0.1-28",
        "- yeah, it was",
        // Raw timestamp for 1996-08-14 05:20:00
        840_000_000,
    )
    .requires(rpm::Dependency::any("wget"))
    .vendor("corporation or individual")
    .url("www.github.com/repo")
    .vcs("git:repo=example_repo:branch=example_branch:sha=example_sha")
    .build_and_sign(Signer::load_from_asc_bytes(&raw_secret_key)?)?;
let mut f = std::fs::File::create("/tmp/awesome.rpm")?;
pkg.write(&mut f)?;

// reading
let raw_pub_key = std::fs::read("test_assets/public_key.asc")?;
let pkg = rpm::Package::open("/tmp/awesome.rpm")?;
// verifying
pkg.verify_signature(Verifier::load_from_asc_bytes(&raw_pub_key)?)?;

Re-exports§

pub use ::chrono;

Modules§

signature

Structs§

ChangelogEntry
User facing accessor type for a changelog entry
Dependency
Description of a dependency as present in a RPM header record.
DependencyFlags
Empty
Initial empty builder.
Evr
A full RPM “version” specifier has 3 different components - Epoch, Version, and Release.
FileCaps
FileDigest
FileEntry
User facing accessor type for a file entry with contextual information
FileFlags
FileIterator
FileOptions
FileOptionsBuilder
FileOwnership
User facing accessor type representing ownership of a file
FileVerifyFlags
Header
Nevra
A full RPM “NEVRA” consists of 5 different components - Name, Epoch, Version, Release, and Architecture.
Package
A complete rpm file.
PackageBuilder
Create an RPM file by specifying metadata and files using the builder pattern.
PackageFileEntry
Describes a file present in the rpm file.
PackageMetadata
PackageSegmentOffsets
Offsets into an RPM Package (from the start of the file) demarking locations of each section
RpmFile
Scriptlet
Description of a scriptlet as present in a RPM header record
ScriptletFlags
Flags to configure scriptlet execution,
Sha256Writer
A wrapper for calculating the sha256 checksum of the contents written to it
SignatureHeaderBuilder
base signature header builder
Timestamp
Timestamp as a number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z).
WithDigest
Builder beyond the empty stage, already containing a digest.
WithSignature
Builder already has a hash and is ready for completion.

Enums§

CompressionType
Supported payload compression types.
CompressionWithLevel
Supported compression types, with an associated compression level. This is used for setting a custom compression configuration during RPM building.
Compressor
DigestAlgorithm
Error
FileMode
IndexSignatureTag
IndexTag
TimestampError

Constants§

DIR_FILE_TYPE
HEADER_I18NTABLE
HEADER_IMAGE
HEADER_IMMUTABLE
HEADER_MAGIC
header magic recognition (not the lead!)
HEADER_REGIONS
HEADER_SIGBASE
HEADER_SIGNATURES
HEADER_SIGTOP
HEADER_TAGBASE
INDEX_ENTRY_SIZE
Size (in bytes) of each entry in the index
INDEX_HEADER_SIZE
Size (in bytes) of the index header (the fixed portion of each header)
LEAD_SIZE
Size (in bytes) of the package “lead” section
REGULAR_FILE_TYPE
RPM_MAGIC
rpm magic as part of the lead header
SYMBOLIC_LINK_FILE_TYPE

Traits§

ConstructionStage
A marker trait for builder stages
Tag
Header tag.

Functions§

rpm_evr_compare
Compare two strings as RPM EVR values
validate_caps_text