Welcome to this comprehensive guide on packaging your Rust applications into .deb and .rpm packages! Whether you're distributing your application to Debian/Ubuntu or Fedora/Red Hat users, this guide will walk you through the process step-by-step. By the end, you'll be able to create professional, installable packages for your Rust apps.
Table of Contents
-
Introduction
- Why Package Your Rust Application?
- What Are
.deband.rpmPackages?
-
Prerequisites
- Rust Toolchain
- Required Tools for Packaging
-
Building Your Rust Application
- Compiling for Release
- Stripping Binaries (Optional)
-
Creating a
.debPackage- Installing
cargo-deb - Configuring
Cargo.toml - Building the
.debPackage - Testing the
.debPackage
- Installing
-
Creating an
.rpmPackage- Installing
cargo-rpm - Configuring
Cargo.toml - Building the
.rpmPackage - Testing the
.rpmPackage
- Installing
-
Advanced Topics
- Adding Dependencies
- Including Systemd Services
- Customizing Package Metadata
-
Conclusion
- Best Practices
- Further Reading
1. Introduction
Why Package Your Rust Application?
Packaging your Rust application makes it easier for users to install and manage your software. It ensures compatibility with the system's package manager, simplifies updates, and provides a seamless installation experience.
What Are .deb and .rpm Packages?
-
.deb: Used by Debian-based distributions like Ubuntu. -
.rpm: Used by Red Hat-based distributions like Fedora and CentOS.
Both formats contain the application binaries, metadata, and installation scripts.
2. Prerequisites
Before we start, ensure you have the following:
Rust Toolchain
- Install Rust using
rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Verify installation:
rustc --version
cargo --version
Required Tools for Packaging
-
For
.deb:-
cargo-deb: A Cargo subcommand to create.debpackages. -
dpkg: To test the generated.debpackage.
-
cargo install cargo-deb
sudo apt install dpkg
-
For
.rpm:-
cargo-rpm: A Cargo subcommand to create.rpmpackages. -
rpm: To test the generated.rpmpackage.
-
cargo install cargo-rpm
sudo dnf install rpm
3. Building Your Rust Application
Compiling for Release
Ensure your application is compiled in release mode for optimal performance:
cargo build --release
Stripping Binaries (Optional)
To reduce the size of your binary:
strip target/release/your_app_name
4. Creating a .deb Package
Installing cargo-deb
If you haven't already:
cargo install cargo-deb
Configuring Cargo.toml
Add the following section to your Cargo.toml:
[package.metadata.deb]
maintainer = "Your Name <your.email@example.com>"
copyright = "2023, Your Name"
license-file = ["LICENSE"]
assets = [
["target/release/your_app_name", "usr/bin/", "755"],
]
Building the .deb Package
Run the following command:
cargo deb
This will generate a .deb file in the target/debian/ directory.
Testing the .deb Package
Install the package:
sudo dpkg -i target/debian/your_app_name_0.1.0_amd64.deb
Verify installation:
your_app_name --version
5. Creating an .rpm Package
Installing cargo-rpm
If you haven't already:
cargo install cargo-rpm
Configuring Cargo.toml
Add the following section to your Cargo.toml:
[package.metadata.rpm]
license = "MIT"
requires = ["libc"]
assets = [
["target/release/your_app_name", "/usr/bin/your_app_name", "755"],
]
Building the .rpm Package
Run the following command:
cargo rpm build
This will generate an .rpm file in the target/release/rpmbuild/RPMS/x86_64/ directory.
Testing the .rpm Package
Install the package:
sudo rpm -ivh target/release/rpmbuild/RPMS/x86_64/your_app_name-0.1.0-1.x86_64.rpm
Verify installation:
your_app_name --version
6. Advanced Topics
Adding Dependencies
Specify dependencies in your Cargo.toml:
[package.metadata.deb]
depends = "libc6 (>= 2.28), zlib1g"
[package.metadata.rpm]
requires = "libc >= 2.28, zlib"
Including Systemd Services
For .deb:
[package.metadata.deb]
systemd-units = [
["your_app_name.service", "lib/systemd/system/your_app_name.service", "644"],
]
For .rpm:
[package.metadata.rpm]
systemd-units = [
["your_app_name.service", "/usr/lib/systemd/system/your_app_name.service", "644"],
]
Customizing Package Metadata
You can customize metadata like description, version, and more in the Cargo.toml file.
7. Conclusion
Best Practices
- Test your packages on clean systems.
- Keep your
Cargo.tomlmetadata up-to-date. - Use CI/CD pipelines to automate packaging.
Further Reading
- cargo-deb Documentation
- cargo-rpm Documentation
- Debian Packaging Guide
- RPM Packaging Guide
- My Rust's Telegram Channel
Congratulations! You now know how to package your Rust applications into .deb and .rpm formats.

Top comments (1)
cargo-rpm is end-of-life (since 2022). As it states on its Github readme, one should reach for cargo-generate-rpm instead.