RPM Format
Concepts
RPM (Red Hat Package Manager) is a package format used primarily by Linux distributions. RPM files contain compressed CPIO payloads with the actual package files.
RPM Structure
RPM files contain:
package.rpm
├── Lead # Legacy header (obsolete)
├── Signature # Package signatures
├── Header # Package metadata
└── Payload # Compressed CPIO archive
├── usr/bin/ # Executables
├── usr/lib/ # Libraries
└── usr/share/ # Documentation, dataWhen to Use Recursive
Use recursive_packages: true to extract file contents:
# Without recursive - you get payload.cpio.gz
Excavate::Archive.new('package.rpm').extract
# Result: package/payload.cpio.gz
# With recursive - you get actual files
Excavate::Archive.new('package.rpm').extract(recursive_packages: true)
# Result: package/usr/bin/..., package/usr/lib/..., etc.Extracting Specific Content
Common Use Cases
CLI Usage
# Extract RPM recursively
excavate -r package.rpm
# Extract with filter
excavate -r --filter "**/bin/*" package.rpmTechnical Details
Excavate uses the Omnizip gem’s RPM support:
-
Extracts RPM lead, signature, and header
-
Decompresses payload based on compression type
-
Names output based on RPM metadata
Supported Payload Compressions
RPM payloads may use various compressions:
-
GZIP (
.cpio.gz) -
XZ (
.cpio.xz) -
BZIP2 (
.cpio.bz2) -
Zstandard (
.cpio.zst)
All are handled automatically with recursive extraction.
Related Topics
-
TAR Format - Related Unix archive format