[package] # Note: some of these values are also used when building Debian packages below. name = "krill" version = "0.15.1-dev" edition = "2024" rust-version = "1.85" authors = ["NLnet Labs "] description = "Resource Public Key Infrastructure (RPKI) daemon" homepage = "https://www.nlnetlabs.nl/projects/routing/krill/" repository = "https://github.com/NLnetLabs/krill" keywords = ["rpki", "routing-security", "bgp"] readme = "README.md" license = "MPL-2.0" exclude = [ "test-resources/*", "tests/*", ".github/*", "docker/*", "pkg/*", "Dockerfile", ] [dependencies] arc-swap = "1.7.1" base64 = "0.22.1" bytes = "1" chrono = { version = "0.4.39", features = ["serde"] } clap = { version = "4.5.37", features = ["cargo", "derive", "env", "wrap_help"]} fd-lock = "4.0.4" fern = { version = "0.7.1", features = ["syslog-7"] } futures-util = "0.3" hex = "0.4" http-body-util = "0.1" hyper = { version = "1.6.0", features = ["server"] } hyper-util = { version = "0.1", features = [ "server" ] } intervaltree = "0.2.7" lazy_static = "1.5" libflate = "2.1.0" log = "0.4" openssl = { version = "0.10", features = ["v110"] } percent-encoding = "2.3.1" pin-project-lite = "0.2.16" rand = "0.9" regex = { version = "1.11.1", default-features = false, features = [ "std" ] } reqwest = { version = "0.12.23", features = ["json"] } rpki = { version = "0.18.6", features = ["ca", "compat", "rrdp"] } rustls-pemfile = "2.2.0" serde = { version = "1.0", features = ["derive", "rc"] } serde_json = "1.0" tempfile = "3.19.1" tokio = { version = "1", features = [ "macros", "rt", "rt-multi-thread", "signal", "time" ] } tokio-rustls = { version = "0.26", default-features = false, features = [ "ring", "logging", "tls12" ] } toml = "0.9.5" url = { version = "2.5.4", features = ["serde"] } uuid = { version = "1.16", features = ["serde", "v4"] } # Dependencies used by the "hsm" feature backoff = { version = "0.4.0", optional = true } cryptoki = { version = "0.10", optional = true } kmip = { version = "0.4.3", package = "kmip-protocol", features = [ "tls-with-openssl" ], optional = true } r2d2 = { version = "0.8.10", optional = true } secrecy = { version = "0.8", features = ["serde"], optional = true } # Dependencies used by the "multi-user" feature basic-cookies = { version = "0.1", optional = true } openidconnect = { version = "4.0.0", optional = true, default-features = false } rpassword = { version = "7.4.0", optional = true } scrypt = { version = "0.11", optional = true, default-features = false } unicode-normalization = { version = "0.1", optional = true } urlparse = { version = "0.7", optional = true } # Disable compiler optimizations for the pkcs11 crate because otherwise with a release build the # `pReserved = ptr::null_mut()` assignment done by `CK_C_INITIALIZE_ARGS::default()` appears to be optimized out. This # causes SoftHSMv2 to fail with error CKR_ARGUMENTS_BAD and to log to syslog "SoftHSM.cpp(436): pReserved must be set to # NULL_PTR". Disabling optimizations for the pkcs11 crate "solves" this problem. # [profile.release.package.pkcs11] # opt-level = 0 [target.'cfg(unix)'.dependencies] syslog = "7.0.0" nix = { version = "0.30.1", features = ["user"] } [features] default = ["multi-user", "hsm"] hsm = ["backoff", "kmip", "cryptoki", "r2d2", "secrecy"] multi-user = [ "basic-cookies", "openidconnect", "rpassword", "scrypt", "unicode-normalization", "urlparse", ] # Preview features - not ready for production use rta = [] # Internal features - not for external use hsm-tests-kmip = ["hsm"] hsm-tests-pkcs11 = ["hsm"] [dev-dependencies] tar = "0.4" stderrlog = "0.6" tempfile = "3.19.1" urlparse = "0.7" # Make sure that Krill crashes on panics, rather than losing threads and # limping on in a bad state. [profile.release] panic = "abort" # ------------------------------------------------------------------------------ # START DEBIAN PACKAGING # # Configurations for the cargo-deb cargo plugin which builds Debian packages in # target/debian/ when invoked with: cargo deb. Tested with cargo-deb v1.23.1. # Use `--variant` to select which section below to use. Variant sections inherit # and override the settings in the base [package.metadata.deb] section. The # configs vary because of differing degrees of OpenSSL and systemd support # across operating systems. # # Note that as the postinst script uses the adduser command we declare a # dependency on the adduser package to keep the lintian tool happy. # Note: krill.conf is deliberately NOT specified as a "conf-file" because it is # generated. # # The GitHub Actions pkg.yml workflow definition file uses these configurations # to build and test Ubuntu/Debian packages for Krill. # # See: # - https://github.com/mmstick/cargo-deb # - https://lintian.debian.org/tags/systemd-service-file-outside-lib.html # - https://www.debian.org/doc/debian-policy/ch-files.html#behavior # - .github/workflows/pkg.yml [package.metadata.deb] name = "krill" priority = "optional" section = "net" extended-description-file = "pkg/debian/description.txt" license-file = ["LICENSE", "0"] depends = "$auto, passwd, libssl1.1" maintainer-scripts = "pkg/debian/" changelog = "target/debian/changelog" # this will be generated by the pkg workflow copyright = "Copyright (c) 2019, NLnet Labs. All rights reserved." assets = [ [ "target/release/krill", "/usr/bin/krill", "755", ], [ "target/release/krillc", "/usr/bin/krillc", "755", ], [ "defaults/krill.conf", "/usr/share/doc/krill/krill.conf", "644", ], [ "doc/krill.1.gz", "/usr/share/man/man1/krill.1.gz", "644", ], [ "doc/krill.conf.5.gz", "/usr/share/man/man5/krill.conf.5.gz", "644", ], [ "doc/krillc.1.gz", "/usr/share/man/man1/krillc.1.gz", "644", ], [ "pkg/common/krill.service.preset", "/usr/lib/systemd/system-preset/50-krill.preset", "644", ], ] systemd-units = { unit-name = "krill", unit-scripts = "pkg/common", enable = false } # Packaging configuration for the `krillup` binary rather than Krill itself. As # we want the built binary to match that built for Krill we want the same # dynamic or static OpenSSL linking too. Rather than inherit from # [package.metadata.deb] and override fields to build a different package (which # cargo deb variants weren't intended for), instead we use the same approach # that we are forced to use for `cargo generate-rpm` (see below) where the the # `pkg` GitHub Actions workflow renames the `package.metadata.deb` section out # of the way and renames this section to `package.metadata.deb` to use it as the # base configuration instead. [package.metadata.deb_alt_base_krillup] name = "krillup" priority = "optional" section = "net" extended-description-file = "pkg/debian/description-krillup.txt" license-file = ["LICENSE", "0"] depends = "$auto, passwd, libssl1.1" changelog = "target/debian/changelog" # this will be generated by the pkg workflow copyright = "Copyright (c) 2019, NLnet Labs. All rights reserved." assets = [ [ "target/release/krillup", "/usr/bin/krillup", "755", ], [ "doc/krillup.1.gz", "/usr/share/man/man1/krillup.1.gz", "644", ], ] [package.metadata.deb_alt_base_krillta] name = "krillta" priority = "optional" section = "net" extended-description-file = "pkg/debian/description-krillta.txt" license-file = ["LICENSE", "0"] depends = "$auto, passwd, libssl1.1" changelog = "target/debian/changelog" # this will be generated by the pkg workflow copyright = "Copyright (c) 2023, NLnet Labs. All rights reserved." assets = [ [ "target/release/krillta", "/usr/bin/krillta", "755", ], [ "doc/krillta.1.gz", "/usr/share/man/man1/krillta.1.gz", "644", ], ] # Variant of the Debian packaging configuration that: # a) statically links with OpenSSL when building a Debian package because the # newest OpenSSL available on Ubuntu 16.04 at the time of writing is 1.0.2g # (see: https://packages.ubuntu.com/xenial/openssl) while Krill requires # OpenSSL >= 1.1.0. # b) uses a simpler systemd service unit file because Ubuntu 16.04 doesn't # support newer features supported by Ubuntu 18.04 and 20.04. [package.metadata.deb.variants.ubuntu-jammy] depends = "$auto, passwd, libssl3" [package.metadata.deb.variants.debian-bookworm] depends = "$auto, passwd, libssl3" [package.metadata.deb.variants.debian-trixie] depends = "$auto, passwd, libssl3, adduser" [package.metadata.deb.variants.ubuntu-noble] depends = "$auto, passwd, libssl3" # Cross compilation variants: # Note: we have to specifiy dependencies manually because we don't run cargo-deb # on the target platform and so it cannot determine the dependencies correctly # for us. [package.metadata.deb.variants.debian-bullseye-armv7-unknown-linux-gnueabihf] depends = "adduser, passwd, libc6 (>= 2.28), libssl1.1" # END DEBIAN PACKAGING # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ # START RPM PACKAGING # # Configurations for the cargo-generate-rpm cargo plugin which builds RPM # packages in target/generate-rpm/ when invoked with: cargo generate-rpm # [package.metadata.generate-rpm] name = "krill" # See: https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing license = "MPLv2.0" assets = [ { source = "target/release/krill", dest = "/usr/bin/krill", mode = "755" }, { source = "target/release/krillc", dest = "/usr/bin/krillc", mode = "755" }, { source = "target/rpm/krill.service", dest = "/lib/systemd/system/krill.service", mode = "644" }, { source = "defaults/krill.conf", dest = "/usr/share/doc/krill/krill.conf", mode = "644", doc = true }, { source = "doc/krill.1.gz", dest = "/usr/share/man/man1/krill.1.gz", mode = "644", doc = true }, { source = "doc/krill.conf.5.gz", dest = "/usr/share/man/man5/krill.conf.5.gz", mode = "644", doc = true }, { source = "doc/krillc.1.gz", dest = "/usr/share/man/man1/krillc.1.gz", mode = "644", doc = true }, { source = "pkg/common/krill.service.preset", dest = "/lib/systemd/system-preset/50-krill.preset", mode = "644" }, ] auto-req = "disabled" # These get set using cargo-generate-rpm --set-metadata at package build time. #post_install_script = ... #pre_uninstall_script = ... #post_uninstall_script = ... # Ensure that the useradd tool is present by depending on its package [package.metadata.generate-rpm.requires] shadow-utils = "*" # A variant of the RPM packaging configuration that package the `krillup` binary # instead of Krill itself. The `cargo generate-rpm` command doesn't itself know # how to use this alternate configuration, instead the `pkg` GitHub Actions # workflow renames the `package.metadata.generate-rpm` section out of the way # and renames this section to `package.metadata.generate-rpm` to use it instead. [package.metadata.generate-rpm-alt-base-krillup] name = "krillup" # See: https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing license = "MPLv2.0" assets = [ { source = "target/release/krillup", dest = "/usr/bin/krillup", mode = "755" }, { source = "doc/krillup.1.gz", dest = "/usr/share/man/man1/krillup.1.gz", mode = "644", doc = true }, ] auto-req = "disabled" [package.metadata.generate-rpm-alt-base-krillta] name = "krillta" # See: https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing license = "MPLv2.0" assets = [ { source = "target/release/krillta", dest = "/usr/bin/krillta", mode = "755" }, { source = "doc/krillta.1.gz", dest = "/usr/share/man/man1/krillta.1.gz", mode = "644", doc = true }, ] auto-req = "disabled" # END RPM PACKAGING # ------------------------------------------------------------------------------