从Cargo项目生成二进制RPM包 (.rpm)
项目描述
cargo-generate-rpm
Cargo 命令行工具,用于从Cargo项目生成二进制 RPM包 (.rpm)。
此命令不依赖于 rpmbuild
,并使用 rpm-rs 生成没有spec文件的RPM包文件。
安装
cargo install cargo-generate-rpm
用法
cargo build --release
strip -s target/release/XXX
cargo generate-rpm
在您的Cargo项目中运行 cargo generate-rpm
后,将在 target/generate-rpm/XXX.rpm
创建一个二进制RPM包文件。您可以使用 -o
选项更改RPM包文件的位置。
在运行 cargo generate-rpm
之前,先运行 cargo run --release
并删除调试符号(strip -s target/release/XXX
),因为这些符号在当前版本中不会在 cargo generate-rpm
中运行。
配置
此命令从 Cargo.toml
文件 生成RPM元数据
[package.metadata.generate-rpm]
选项
- name:包名。如果不存在,则使用
package.name
。 - version:包版本。如果不存在,则使用
package.version
。 - license:包许可证。如果不存在,则使用
package.license
。 - summary:包摘要/描述。如果不存在,则使用
package.description
。 - url:包主页URL。如果不存在,则使用
package.homepage
。如果两者都不存在,则使用package.repository
。 - assets:(必需) 包中包含的文件数组
- source:该资产的Rust项目位置。(例如:
target/release/XXX
)允许使用通配符*
。 - dest:安装目标。(例如:
/usr/bin/XXX
)它应该是文件路径或以/
结尾的目录路径。如果source包含通配符*
,则它必须是一个目录,而不是文件路径。 - 模式:以八进制字符串表示的权限。(例如,
755
表示-rwxr-xr-x
) - config:如果是一个配置文件,则设置为true。
- doc:如果是一个文档文件,则设置为true。
- user:文件的拥有者。
- group:文件的组拥有者。
- source:该资产的Rust项目位置。(例如:
- release:可选的发布字符串。
- epoch:可选的纪元数字。
- pre_install_script:可选的预安装脚本字符串。
- pre_uninstall_script:可选的预卸载脚本字符串。
- post_install_script:可选的安装后脚本字符串。
- post_uninstall_script:可选的卸载后脚本字符串。
- requires:可选的依赖项列表。
- auto-req:可选字符串
"no"
用于禁用自动依赖项处理。 - require-sh:可选布尔值
false
用于省略 Requirements 中的/bin/sh
。 - obsoletes:可选的过时列表。
- conflicts:可选的冲突列表。
- provides:可选的提供列表。
- vendor:可选的供应商字符串。
添加如二进制文件、.desktop
文件或图标等资产,应按以下方式编写。
[package.metadata.generate-rpm]
assets = [
{ source = "target/release/XXX", dest = "/usr/bin/XXX", mode = "755" },
{ source = "<path_relative_to_project_root>/XXX.desktop", dest = "/usr/share/applications/XXX.desktop", mode = "644" },
{ source = "<path_relative_to_project_root>/*/apps/XXX.png", dest = "/usr/share/icons/hicolor/", mode = "644" },
]
[package.metadata.generate-rpm.{requires,obsoletes,conflicts,provides}]
选项
依赖项如 "requires"、"obsoletes"、"conflicts" 和 "provides" 应与 Cargo.toml 中的依赖项类似编写。
[package.metadata.generate-rpm.requires]
alternative = "*"
filesystem = ">= 3"
此示例表示,该软件包需要任何版本的 alternative
以及所有 3.0 或更高版本的 filesystem
。
以下表格列出了版本比较
比较 | 含义 |
---|---|
package = "*" |
任何版本号的软件包 |
package = "< version" |
版本号小于版本的软件包 |
package = "<= version" |
版本号小于或等于版本的软件包 |
package = "= version" |
版本号等于版本的软件包 |
package = "> version" |
版本号大于版本的软件包 |
package = ">= version" |
版本号大于或等于版本的软件包 |
需要在版本和符号(如 <
、<=
等)之间放置一个空格... 不接受 package = "version"
,而是使用 package = "= version"
。
此命令自动确定软件包所需的共享库。有时可能不希望自动依赖项处理。在这种情况下,软件包作者可以将 package.metadata.generate-rpm.auto-req
设置为 "no"
,或者执行此命令的用户可以指定命令行选项 --auto-req no
。
--auto-req auto
:以下规则用于确定首选的自动依赖项处理过程- 如果
package.metadata.generate-rpm.auto-req
设置为"no"
或"disabled"
,则禁用该过程。 - 如果
/usr/lib/rpm/find-requires
存在,则使用它(与--auto-req /usr/lib/rpm/find-requires
相同的行为)。 - 否则,使用内置过程(与
--auto-req builtin
相同的行为)。
- 如果
--auto-req builtin
:使用ldd
的内置过程。--auto-req /path/to/find-requires
:使用指定的外部程序。此行为与原始的rpmbuild
相同。--auto-req no
:禁用该过程。
/bin/sh
总是添加到软件包要求中。要禁用它,将 package.metadata.generate-rpm.require-sh
设置为 false
。如果您使用 pre_install_script
等脚本或您的资产包含 shell 脚本,则不应这样做。
覆盖配置
[package.metadata.generate-rpm]
可以被覆盖。以下命令行选项用于此目的
--metadata-overwrite=TOML_FILE.toml
:使用指定 TOML 文件的内容覆盖[package.metadata.generate-rpm]
选项。--metadata-overwrite=TOML_FILE.toml#TOML.PATH
:使用 TOML 文件的 TOML 路径中指定的表格覆盖[package.metadata.generate-rpm]
选项。仅接受通过点连接的纯键序列作为 TOML 路径。包含引号键(如metadata."παραλλαγή"
)的路径不可接受。-s 'toml "text"'
或--set-metadata='toml "text"'
:用内联TOML文本覆盖[package.metadata.generate-rpm]
选项。由于文本中包含空格,因此必须将参数文本(内联TOML文本)放在引号内。--variant=VARIANT
:用TOML文件中[package.metadata.generate-rpm.variants.VARIANT]
指定的表覆盖[package.metadata.generate-rpm]
选项。这是对--metadata-overwrite=path/to/Cargo.toml#package.metadata.generate-rpm.variants.VARIANT
的简写。它旨在提供Cargo.toml中的多个元数据变体,并允许用户使用 --variant=name 选项选择变体。
这些选项可以指定多次,最后写入的指定将被应用。例如,参数 -s 'release = "alpha"' --metadata-overwrite=beta.toml
(其中 beta.toml 包含 release = "beta"
)将给出 release = "beta"
。
高级用法
工作空间
要从工作空间成员生成RPM包,请在工作空间目录中执行 cargo generate-rpm
,并通过选项 -p
指定包(目录路径)。
cargo build --release
strip -s target/release/XXX
cargo generate-rpm -p XXX
[package.metadata.generate-rpm]
选项应写入 XXX/Cargo.toml
。
当指定了选项 -p
时,首先,资产文件 source
应被视为从当前目录的相对路径。如果未找到,则被视为从包的目录的相对路径。如果两者都未找到,则 cargo generate-rpm
将失败并显示错误。
例如,source = target/bin/XXX
通常被视为从当前目录的相对路径。因为工作空间中的所有包共享一个位于工作空间目录 target
下的公共输出目录。
交叉编译
此命令支持与 cargo build
相同的 --target-dir
和 --target
选项。根据这些选项,此命令更改RPM包文件的位置,并替换资产源位置的 target/release/
。
cargo build --release --target x86_64-unknown-linux-gnu
cargo generate-rpm --target x86_64-unknown-linux-gnu
当指定了 --target-dir TARGET-DIR
和 --target x86_64-unknown-linux-gnu
时,将创建一个二进制RPM文件,位于 TARGET-DIR/x86_64-unknown-linux-gnu/generate-rpm/XXX.rpm
,而不是 target/generate-rpm/XXX.rpm
。在这种情况下,资产源 { source = "target/release/XXX", dest = "/usr/bin/XXX" }
将被视为 TARGET-DIR/x86_64-unknown-linux-gnu/release/XXX
,而不是 target/release/XXX
。
您可以使用 CARGO_BUILD_TARGET
环境变量代替 --target
选项,以及 CARGO_BUILD_TARGET_DIR
或 CARGO_TARGET_DIR
代替 --target-dir
。
有效载荷压缩类型
生成的RPM文件的默认有效载荷压缩类型是zstd。您可以使用 --payload-compress TYPE
指定有效载荷压缩类型:none,gzip或zstd。
对于旧系统(例如centos7),请明确指定旧压缩类型,例如 --payload-compress none
。
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分发
构建分发
哈希值 for cargo_generate_rpm-0.10.1-py3-none-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 041c4142e562410dd9d65e75dd1ad8ca7cbde28350373304c535c373715e2488 |
|
MD5 | 1d92c4ca9598933c52884b2de2565421 |
|
BLAKE2b-256 | c6e00cea335b05e0baf41ad7ba91fdfc8b3f7f7174fdb3ac62be08423faaaf66 |
哈希值 for cargo_generate_rpm-0.10.1-py3-none-win32.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e781dda0f4f75e207e7c7350c13b1b4ab539dfe6541e439c3fcdf434e7b5daaa |
|
MD5 | ee35f942db845e2f444be54e618e6387 |
|
BLAKE2b-256 | 214f46d741f2ed77cfe40b9a984887a298b026bcbf702b8717844c5fbd841848 |
哈希值 for cargo_generate_rpm-0.10.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cd066930eaadc548f3267a9188ffb5abfc9c76bbf0e1a96e8e4eeeeb388ced3d |
|
MD5 | 6bfe738666112c4c5c49a7a64f2c6ab1 |
|
BLAKE2b-256 | 834ec7edde5f6df21c70f1826c91fe37e2e8f14b0928087713369f7ba3cc3e38 |
哈希值 for cargo_generate_rpm-0.10.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fbbc7fe843269d26a4ffb4c2511540e217cfb9d7db765775a8faf83edb4915f4 |
|
MD5 | 5a8cd18aad9ca63361173d6f4d610926 |
|
BLAKE2b-256 | 427f9929a93a7d4af473060467c1a82463daa00db7bd9d560e318d1499185572 |
散列值 for cargo_generate_rpm-0.10.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1300a5487a51cb23378318f8aec3eadfe73671e70226aa1c5c6f36fd77920feb |
|
MD5 | 227d4c7610c8b38026b307578044780f |
|
BLAKE2b-256 | c9775a947bdd2508713cfbf36149426ad0b13a68bda073eaeb5235bc964460b8 |
散列值 for cargo_generate_rpm-0.10.1-py3-none-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b2d2d76177e2f82c9aede6b1fef482ccf0a1abb2badb3bb7bb997f0e1054fa7 |
|
MD5 | f5fc99eb80f18fed053380db63cfa9b8 |
|
BLAKE2b-256 | 8d08ced4457355313c87d12eb1ef2103ed98a5dd2ae97e8092721cfdcf15d505 |
散列值 for cargo_generate_rpm-0.10.1-py3-none-macosx_10_7_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b9741b1c12b79dd9d2ddddebecca17621c68dc21e1265f248f8b96ea2da2e6dd |
|
MD5 | e369a85e5dffcbd1e24ad7c9b191fd21 |
|
BLAKE2b-256 | 226e3d21b5fcf53deea3a23e23d9f694f4f83bcf8e1b8fed63b597d90642a080 |