Debian packages from Cargo projects Build Status

This is a Cargo helper command which automatically creates Debian packages (.deb) from Cargo projects.

Installation

sh cargo install cargo-deb

Requires Rust 1.19+, Debian/Ubuntu, dpkg, ldd, and optionally liblzma-dev.

Usage

sh cargo deb

Upon running cargo deb from the base directory of your Rust project, the Debian package will be created in target/debian/<project_name>_<version>_<arch>.deb. This package can be installed with dpkg -i target/debian/*.deb.

If you would like to handle the build process yourself, you can use cargo deb --no-build so that the cargo-deb command will not attempt to rebuild your project.

Debug symbols are stripped from the main binary by default. To keep debug symbols, either set [profile.release] debug = true in Cargo.toml or run cargo deb --no-strip.

cargo deb --install builds and installs the project system-wide.

Configuration

This command obtains basic information it needs from the Cargo.toml file. It uses Cargo fields: name, version, license, license-file, description, readme, homepage, and repository. However, as these fields are not enough for a complete Debian package, you may also define a new table, [package.metadata.deb] that contains maintainer, copyright, license-file, depends, extended-description, section, priority, and assets.

[package.metadata.deb] options

Example Cargo.toml additions

toml [package.metadata.deb] maintainer = "Michael Aaron Murphy <mmstickman@gmail.com>" copyright = "2017, Michael Aaron Murphy <mmstickman@gmail.com>" license-file = ["LICENSE", "4"] extended-description = """\ A simple subcommand for the Cargo package manager for \ building Debian packages from Rust projects.""" depends = "$auto" section = "utility" priority = "optional" assets = [ ["target/release/cargo-deb", "usr/bin/", "755"], ["README.md", "usr/share/doc/cargo-deb/README", "644"], ]

Systemd Manager:

toml [package.metadata.deb] maintainer = "Michael Aaron Murphy <mmstickman@gmail.com>" copyright = "2015-2016, Michael Aaron Murphy <mmstickman@gmail.com>" license-file = ["LICENSE", "3"] depends = "$auto" extended-description = """\ Written safely in Rust, this systemd manager provides a simple GTK3 GUI interface \ that allows you to enable/disable/start/stop services, monitor service logs, and \ edit unit files without ever using the terminal.""" section = "admin" priority = "optional" assets = [ ["assets/org.freedesktop.policykit.systemd-manager.policy", "usr/share/polkit-1/actions/", "644"], ["assets/systemd-manager.desktop", "usr/share/applications/", "644"], ["assets/systemd-manager-pkexec", "usr/bin/", "755"], ["target/release/systemd-manager", "usr/bin/", "755"] ]