10 个版本 (重大更新)

0.8.1 2021 年 10 月 25 日
0.7.0 2021 年 9 月 3 日
0.6.0 2020 年 8 月 18 日
0.4.0 2020 年 4 月 22 日
0.2.1 2019 年 6 月 30 日

#1346解析器实现 中排名

每月 28 次下载
3 个 包中使用

Apache-2.0

330KB
4.5K SLoC

RPM-RS

用于解析和创建 RPM 文件的纯 Rust 库。

目标

  • 易于使用的 API
  • 纯 Rust 以便于在大型项目中使用
  • 与 Spec 文件的独立性。包装的纯程序化接口。
  • 兼容 CentOS 7 / Fedora(我可能会扩展 SUSE 的测试用例)

非目标

RPM 有许多晦涩难懂的功能。我不想重新实现它们所有。此库专注于我认为有用的那些。此库不构建软件,如 rpmbuild。它用于将最终产品打包为 RPM。

状态

  • RPM 创建
  • 基本 RPM 读取
  • RPM 签名和签名验证
  • RPM 读取的高级 API

示例

use rpm;
use rpm::signature::pgp::{Signer,Verifier};

let raw_secret_key = std::fs::read("/path/to/gpg.secret.key")?;
let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
            .compression(rpm::Compressor::from_str("gzip")?)
            .with_file(
                "./awesome-config.toml",
                RPMFileOptions::new("/etc/awesome/config.toml").is_config(),
            )?
            // file mode is inherited from source file
            .with_file(
                "./awesome-bin",
                RPMFileOptions::new("/usr/bin/awesome"),
            )?
             .with_file(
                "./awesome-config.toml",
                // you can set a custom mode and custom user too
                RPMFileOptions::new("/etc/awesome/second.toml").mode(0o100744).user("hugo"),
            )?
            .pre_install_script("echo preinst")
            .add_changelog_entry("me", "was awesome, eh?", 123123123)
            .add_changelog_entry("you", "yeah, it was", 12312312)
            .requires(Dependency::any("wget"))
            .build_and_sign(Signer::load_from_asc_bytes(&raw_secret_key)?)
let mut f = std::fs::File::create("./awesome.rpm")?;
pkg.write(&mut f)?;

// reading
let raw_pub_key = std::fs::read("/path/to/gpg.key.pub")?;
let rpm_file = std::fs::File::open("test_assets/389-ds-base-devel-1.3.8.4-15.el7.x86_64.rpm")?;
let mut buf_reader = std::io::BufReader::new(rpm_file);
let pkg = rpm::RPMPackage::parse(&mut buf_reader)?;
// verifying
pkg.verify_signature(Verifier::load_from_asc_bytes(&raw_pub_key)?)?;

依赖项

~10–14MB
~248K SLoC