diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 88dbca5aea438f2ae7df22de5b7daa7c25f896f4..6fdbebf62cb413b8ba5eda4759c234a2094a3e29 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -136,6 +136,26 @@ build_deb: paths: - target/debian/duniter*.deb +build_rpm: + stage: deploy + extends: .env + rules: + - if: $CI_COMMIT_REF_NAME =~ /^wip*$/ + when: manual + - if: $CI_COMMIT_TAG + when: never + - <<: *is_network_branch + when: never + - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"' + - when: manual + script: + - cargo install cargo-generate-rpm + - cargo build -Zgit=shallow-deps --release + - cargo generate-rpm -p node + artifacts: + paths: + - target/generate-rpm/duniter*.rpm + tests: stage: tests extends: .env diff --git a/docs/packaging/build-rpm.md b/docs/packaging/build-rpm.md new file mode 100644 index 0000000000000000000000000000000000000000..eb461f7fd1b89cc824fb9b38e277304faabbafbd --- /dev/null +++ b/docs/packaging/build-rpm.md @@ -0,0 +1,20 @@ +# How to Build the Duniter RPM Package + +1. Install dependencies: + ```sh + # Fedora + sudo dnf install clang cmake protobuf-compiler openssl-devel + ``` +2. Compile the project: + ```sh + cargo build --release + ``` +3. Install `cargo-generate-rpm`: + ```sh + cargo install cargo-generate-rpm + ``` +4. Build the package: + ```sh + cargo generate-rpm -p node + ``` +5. The `.rpm` package will be located in the `target/generate-rpm` folder. diff --git a/node/Cargo.toml b/node/Cargo.toml index 7e853ef8b18dbda307615661a978fa8597e06667..9f69ecf44563c77443f4930e3b60e443d25ac7b2 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -212,3 +212,14 @@ assets = [ "755", ], ] + +[package.metadata.generate-rpm] +assets = [ + { source = "../target/release/duniter", dest = "/usr/bin/duniter2", mode = "755" }, + { source = "../resources/debian/duniter.sysusers", dest = "/usr/lib/sysusers.d/duniter.conf", mode = "0644" }, + { source = "../resources/debian/env_file", dest = "/etc/duniter/env_file", config = true, mode = "0640" }, + { source = "../LICENSE", dest = "/usr/share/licenses/duniter/LICENSE" }, + { source = "../resources/debian/duniter-mirror.service", dest = "/usr/lib/systemd/system/duniter-mirror.service", mode = "0644" }, + { source = "../resources/debian/duniter-smith.service", dest = "/usr/lib/systemd/system/duniter-smith.service", mode = "0644" }, + { source = "../resources/debian/duniter-smith.service", dest = "/usr/lib/systemd/system/distance-oracle.service", mode = "0644" }, +] diff --git a/resources/debian/duniter.sysusers b/resources/debian/duniter.sysusers new file mode 100644 index 0000000000000000000000000000000000000000..53040c301ea7c9bdb8d7ed67d981a83344386f2a --- /dev/null +++ b/resources/debian/duniter.sysusers @@ -0,0 +1,2 @@ +#Type Name ID GECOS Home directory Shell +u duniter - "Duniter user" /var/lib/duniter /sbin/nologin