rpm/lib.rs
1//! # rpm-rs
2//!
3//! A library providing API to parse rpms as well as
4//! creating rpms from individual files.
5//!
6//! # Example
7//!
8//! ```rust
9//!
10//! use rpm::{
11//! signature::pgp::{
12//! Signer,
13//! Verifier
14//! }
15//! };
16//! use std::str::FromStr;
17//!
18//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
19//! let raw_secret_key = std::fs::read("./test_assets/secret_key.asc")?;
20//! let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
21//! .compression(rpm::Compressor::from_str("gzip")?)
22//! .with_file(
23//! "./test_assets/awesome.toml",
24//! rpm::RPMFileOptions::new("/etc/awesome/config.toml")
25//! .is_config(),
26//! )?
27//! // file mode is inherited from source file
28//! .with_file(
29//! "./test_assets/awesome.py",
30//! rpm::RPMFileOptions::new("/usr/bin/awesome"),
31//! )?
32//! .with_file(
33//! "./test_assets/awesome.toml",
34//! // you can set a custom mode and custom user too
35//! rpm::RPMFileOptions::new("/etc/awesome/second.toml")
36//! .mode(0o100744)
37//! .user("hugo"),
38//! )?
39//! .pre_install_script("echo preinst")
40//! .add_changelog_entry("me", "was awesome, eh?", 123123123)
41//! .add_changelog_entry("you", "yeah, it was", 12312312)
42//! .requires(rpm::Dependency::any("wget"))
43//! .build_and_sign(
44//! Signer::load_from_asc_bytes(&raw_secret_key)?
45//! )?;
46//! let mut f = std::fs::File::create("./target/awesome.rpm")?;
47//! pkg.write(&mut f)?;
48//!
49//! // reading
50//! let raw_pub_key = std::fs::read("./test_assets/public_key.asc")?;
51//! let rpm_file = std::fs::File::open("./target/awesome.rpm")?;
52//! let mut buf_reader = std::io::BufReader::new(rpm_file);
53//! let pkg = rpm::RPMPackage::parse(&mut buf_reader)?;
54//! // verifying
55//! pkg.verify_signature(Verifier::load_from_asc_bytes(&raw_pub_key)?)?;
56//! # Ok(())
57//! # }
58//! ```
59
60mod errors;
61pub use crate::errors::*;
62
63pub(crate) mod constants;
64pub use crate::constants::*;
65
66mod sequential_cursor;
67
68mod rpm;
69pub use crate::rpm::*;
70
71#[cfg(test)]
72mod tests;
73
74#[cfg(all(test, feature = "test-with-podman"))]
75mod compat_tests;