11Name: chelon
22Version: 1.0.0
33Release: 2%{?dist }
4- Summary: Remote GPG package signing service (Chelon)
4+ Summary: Remote GPG package signing service
55
66License: GPL-2.0 -or-later
77Vendor: Atomicorp, Inc.
@@ -11,15 +11,25 @@ Source0: %{name}-%{version}.tar.gz
1111
1212BuildArch: noarch
1313
14- # Runtime dependencies (all from Fedora repos)
14+ %description
15+ Chelon is a secure remote signing service for RPM packages and repository
16+ metadata. Build servers send package hashes to Chelon via HTTPS API and
17+ receive GPG signatures in response, eliminating the need for private keys on
18+ build infrastructure.
19+
20+ This is a meta-package that can install both server and client components.
21+
22+ #
23+ # Server subpackage
24+ #
25+ %package server
26+ Summary: Chelon signing service server
1527Requires: python3
1628Requires: python3-flask
1729Requires: python3-gnupg
1830Requires: python3-pydantic
1931Requires: gnupg2
2032Requires: systemd
21-
22- # Needed for user/group creation in %pre
2333Requires(pre): shadow-utils
2434
2535# Prevent auto-generated requires for user/group (we create them in %pre)
@@ -28,11 +38,24 @@ Requires(pre): shadow-utils
2838Provides: user(chelon)
2939Provides: group(chelon)
3040
31- %description
32- Chelon is a secure remote signing service for RPM packages and repository
33- metadata. Build servers send package hashes to Chelon via HTTPS API and
34- receive GPG signatures in response, eliminating the need for private keys on
35- build infrastructure.
41+ %description server
42+ Chelon signing service server component. This package contains the signing
43+ service daemon, systemd unit, and admin tools for managing tokens and audit logs.
44+
45+ Install this package on the signing server (e.g., gamera).
46+
47+ #
48+ # Client subpackage
49+ #
50+ %package client
51+ Summary: Chelon signing client tools
52+ Requires: python3
53+
54+ %description client
55+ Chelon signing client tools. This package contains command-line tools for
56+ signing RPM packages and repository metadata using a remote Chelon service.
57+
58+ Install this package on build servers and workstations that need to sign packages.
3659
3760%prep
3861%setup -q
@@ -44,6 +67,7 @@ build infrastructure.
4467# Create directory structure
4568install -d %{buildroot }%{_bindir }
4669install -d %{buildroot }%{_datadir }/%{name }/server
70+ install -d %{buildroot }%{_datadir }/%{name }/client
4771install -d %{buildroot }%{_sysconfdir }/%{name }
4872install -d %{buildroot }%{_unitdir }
4973install -d %{buildroot }%{_localstatedir }/lib/%{name }
@@ -54,50 +78,78 @@ install -m 644 server/signing_engine.py %{buildroot}%{_datadir}/%{name}/server/
5478install -m 644 server/auth.py %{buildroot }%{_datadir }/%{name }/server/
5579install -m 644 server/audit.py %{buildroot }%{_datadir }/%{name }/server/
5680
57- # Install CLI tools
81+ # Install server admin tool
5882install -m 755 tools/chelon-admin %{buildroot }%{_bindir }/
5983
84+ # Install client tools
85+ install -m 755 tools/chelon-sign-rpm %{buildroot }%{_bindir }/
86+ install -m 755 tools/chelon-sign-repomd %{buildroot }%{_bindir }/
87+ install -m 644 tools/chelon_client.py %{buildroot }%{_datadir }/%{name }/client/
88+
6089# Install systemd unit
6190install -m 644 systemd/chelon.service %{buildroot }%{_unitdir }/
6291
6392# Install default config
6493install -m 600 config/chelon.conf %{buildroot }%{_sysconfdir }/%{name }/
6594
66- %pre
95+ #
96+ # Server scriptlets
97+ #
98+ %pre server
6799# Create chelon user if it doesn't exist
68100getent group chelon > /dev/null || groupadd -r chelon
69101getent passwd chelon > /dev/null || \
70102 useradd -r -g chelon -d %{_localstatedir }/lib/%{name } -s /sbin/nologin \
71103 -c " Chelon signing service" chelon
72104exit 0
73105
74- %post
106+ %post server
75107%systemd_post chelon.service
76108# Fix ownership of data directory
77109chown -R chelon:chelon %{_localstatedir }/lib/%{name } 2> /dev/null || true
78110
79- %preun
111+ %preun server
80112%systemd_preun chelon.service
81113
82- %postun
114+ %postun server
83115%systemd_postun_with_restart chelon.service
84-
85- %files
116+ # Only remove user if package is being erased (not upgraded)
117+ if [ $1 -eq 0 ]; then
118+ userdel chelon 2> /dev/null || true
119+ groupdel chelon 2> /dev/null || true
120+ fi
121+
122+ #
123+ # File lists
124+ #
125+ %files server
86126%doc README.md
87- %attr(0755, root, root) % {_datadir }/%{name }/
127+ %{_datadir }/%{name }/server /
88128%{_bindir }/chelon-admin
89129%{_unitdir }/chelon.service
90- %config(noreplace) %attr(0600, chelon, chelon) %{_sysconfdir }/%{name }/chelon.conf
91- %dir %attr(0750, chelon, chelon) %{_localstatedir }/lib/%{name }
92- %dir %attr(0750, root, chelon) %{_sysconfdir }/%{name }/
130+ %attr(0750,root,chelon) %dir %{_sysconfdir }/%{name }
131+ %attr(0600,chelon,chelon) %config(noreplace) %{_sysconfdir }/%{name }/chelon.conf
132+ %attr(0750,chelon,chelon) %dir %{_localstatedir }/lib/%{name }
133+
134+ %files client
135+ %doc README.md
136+ %{_bindir }/chelon-sign-rpm
137+ %{_bindir }/chelon-sign-repomd
138+ %{_datadir }/%{name }/client/
93139
94140%changelog
95- * Wed Jan 07 2026 Atomicorp <support@atomicorp.com> - 1.0.0-2
141+ * Tue Jan 07 2026 Atomicorp <support@atomicorp.com> - 1.0.0-2
142+ - Split into server and client subpackages
143+ - Add client signing tools (chelon-sign-rpm, chelon-sign-repomd)
96144- Add binary data signing support
97145- Update HTTP API endpoints and request/response formats
98- - Introduce new client tools for interacting with the signing service
99- * Tue Jan 06 2026 Atomicorp <support@atomicorp.com> - 1.0.0-1
100- - Initial release as Chelon
146+ - Unified logging to journald/syslog
147+ - Enhanced audit logging with request tracing
148+ - Fixed hardcoded admin tool paths
149+ - Code review fixes: config ownership, SSL validation, payload size checks
150+
151+ * Mon Jan 06 2026 Atomicorp <support@atomicorp.com> - 1.0.0-1
152+ - Initial package
101153- Flask-based HTTP API for remote signing
102154- Support for Legacy and Modern GPG keys
103155- Token-based authentication
0 commit comments