File thanos.spec of Package thanos
#
# spec file for package thanos
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2024-2025 Georg Pfuetzenreuter <mail+rpm@georg-pfuetzenreuter.net>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define components sidecar store compact receive rule query query-frontend
Name: thanos
Version: 0.39.2
Release: 0
Summary: Highly available Prometheus setup
License: Apache-2.0
Group: System/Monitoring
URL: https://thanos.io
Source0: %{name}-%{version}.tar.zst
Source1: vendor.tar.gz
Source2: %{name}.sysuser
Source3: %{name}.env
Source4: %{name}-component.env
Source5: %{name}-component.service
Source6: %{name}.apparmor
BuildRequires: apparmor-rpm-macros
BuildRequires: go >= 1.23
BuildRequires: golang-packaging
BuildRequires: sysuser-tools
BuildRequires: zstd
%systemd_ordering
%description
Thanos is a set of components that can be composed into a highly available metric system with unlimited storage capacity, which can be added seamlessly on top of existing Prometheus deployments.
%package sidecar
Summary: Thanos Sidecar Service
Requires: %{name} = %{version}
BuildArch: noarch
%description sidecar
Thanos Sidecar: connects to Prometheus, reads its data for query and/or uploads it to cloud storage.
%package store
Summary: Thanos Store Gateway Service
Requires: %{name} = %{version}
BuildArch: noarch
%description store
Thanos Store Gateway: serves metrics inside of a cloud storage bucket.
%package compact
Summary: Thanos Compactor Service
Requires: %{name} = %{version}
BuildArch: noarch
%description compact
Thanos Compactor: compacts, downsamples and applies retention on the data stored in the cloud storage bucket.
%package receive
Summary: Thanos Receiver Service
Requires: %{name} = %{version}
BuildArch: noarch
%description receive
Thanos Receiver: receives data from Prometheus’s remote write write-ahead log, exposes it, and/or uploads it to cloud storage.
%package rule
Summary: Thanos Ruler Service
Requires: %{name} = %{version}
BuildArch: noarch
%description rule
Thanos Ruler/Rule: evaluates recording and alerting rules against data in Thanos for exposition and/or upload.
%package query
Summary: Thanos Querier Service
Requires: %{name} = %{version}
BuildArch: noarch
%description query
Thanos Querier/Query: implements Prometheus’s v1 API to aggregate data from the underlying components.
%package query-frontend
Summary: Thanos Query Frontend Service
Requires: %{name} = %{version}
BuildArch: noarch
%description query-frontend
Thanos Query Frontend: implements Prometheus’s v1 API to proxy it to Querier while caching the response and optionally splitting it by queries per day.
%prep
%autosetup -a1 -p1
%build
go build \
-buildmode=pie \
-ldflags='
-X github.com/prometheus/common/version.Version=%{version}
-X github.com/prometheus/common/version.BuildUser=abuild@reproducible
-X github.com/prometheus/common/version.BuildDate=19700101-00:00:00
-s -w' \
-mod=vendor \
./cmd/thanos
%sysusers_generate_pre %{SOURCE2} %{name}
%install
install -vd \
%{buildroot}%{_bindir} \
%{buildroot}%{_sbindir} \
%{buildroot}%{_sharedstatedir}/%{name} \
%{buildroot}%{_sysconfdir}/apparmor.d \
%{buildroot}%{_sysconfdir}/default \
%{buildroot}%{_sysusersdir} \
%{buildroot}%{_unitdir} \
%{nil}
install -v %{name} %{buildroot}%{_bindir}/%{name}
install -m0644 -v %{SOURCE2} %{buildroot}%{_sysusersdir}/%{name}.conf
install -m0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/default/%{name}
install -m0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/apparmor.d/%{name}
putconf () {
for component in %{components}
do
case "$component" in
sidecar ) component_pretty='Sidecar' ;;
store ) component_pretty='Store Gateway' ;;
compact ) component_pretty='Compactor' ;;
receive ) component_pretty='Receiver' ;;
rule ) component_pretty='Ruler' ;;
query ) component_pretty='Querier' ;;
query-frontend ) component_pretty='Query Frontend' ;;
* ) echo 'putconf() called with unhandled %%components' ; exit 1 ;;
esac
component_upper="$(echo "$component" | tr '[:lower:]' '[:upper:]')"
sed \
-e "s/__COMPONENT__/$component/" \
-e "s/__COMPONENT_PRETTY__/$component_pretty/" \
-e "s/__COMPONENT_UPPER__/$component_upper/" \
"${1}" > "${2}%{name}-${component}${3}"
done
}
putconf %{SOURCE4} %{buildroot}%{_sysconfdir}/default/
putconf %{SOURCE5} %{buildroot}%{_unitdir}/ .service
for component in %{components}
do
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-"$component"
done
# does some dockery things
#check
#go test ./...
### BEGIN scriptlets for main package
%pre -f %{name}.pre
%post
%{apparmor_reload %{_sysconfdir}/apparmor.d/%{name}}
### END scriptlets for main package
### BEGIN scriptlets for sidecar
%pre sidecar
%service_add_pre %{name}-sidecar.service
%post sidecar
%service_add_post %{name}-sidecar.service
%preun sidecar
%service_del_preun %{name}-sidecar.service
%postun sidecar
%service_del_postun %{name}-sidecar.service
### END scriptlets for sidecar
### BEGIN scriptlets for store
%pre store
%service_add_pre %{name}-store.service
%post store
%service_add_post %{name}-store.service
%preun store
%service_del_preun %{name}-store.service
%postun store
%service_del_postun %{name}-store.service
### END scriptlets for store
### BEGIN scriptlets for compact
%pre compact
%service_add_pre %{name}-compact.service
%post compact
%service_add_post %{name}-compact.service
%preun compact
%service_del_preun %{name}-compact.service
%postun compact
%service_del_postun %{name}-compact.service
### END scriptlets for compact
### BEGIN scriptlets for receive
%pre receive
%service_add_pre %{name}-receive.service
%post receive
%service_add_post %{name}-receive.service
%preun receive
%service_del_preun %{name}-receive.service
%postun receive
%service_del_postun %{name}-receive.service
### END scriptlets for receive
### BEGIN scriptlets for rule
%pre rule
%service_add_pre %{name}-rule.service
%post rule
%service_add_post %{name}-rule.service
%preun rule
%service_del_preun %{name}-rule.service
%postun rule
%service_del_postun %{name}-rule.service
### END scriptlets for rule
### BEGIN scriptlets for query
%pre query
%service_add_pre %{name}-query.service
%post query
%service_add_post %{name}-query.service
%preun query
%service_del_preun %{name}-query.service
%postun query
%service_del_postun %{name}-query.service
### END scriptlets for query
### BEGIN scriptlets for query-frontend
%pre query-frontend
%service_add_pre %{name}-query-frontend.service
%post query-frontend
%service_add_post %{name}-query-frontend.service
%preun query-frontend
%service_del_preun %{name}-query-frontend.service
%postun query-frontend
%service_del_postun %{name}-query-frontend.service
### END scriptlets for query-frontend
%files
%license LICENSE
%doc CHANGELOG.md README.md SECURITY.md
%{_bindir}/%{name}
%{_sysusersdir}/%{name}.conf
%attr(0750,%{name},%{name}) %dir %{_sharedstatedir}/%{name}
%config(noreplace) %{_sysconfdir}/default/%{name}
%dir %{_sysconfdir}/apparmor.d
%attr(0644,-,-) %config %{_sysconfdir}/apparmor.d/%{name}
%files sidecar
%config(noreplace) %{_sysconfdir}/default/%{name}-sidecar
%{_unitdir}/%{name}-sidecar.service
%{_sbindir}/rc%{name}-sidecar
%files store
%config(noreplace) %{_sysconfdir}/default/%{name}-store
%{_unitdir}/%{name}-store.service
%{_sbindir}/rc%{name}-store
%files compact
%config(noreplace) %{_sysconfdir}/default/%{name}-compact
%{_unitdir}/%{name}-compact.service
%{_sbindir}/rc%{name}-compact
%files receive
%config(noreplace) %{_sysconfdir}/default/%{name}-receive
%{_unitdir}/%{name}-receive.service
%{_sbindir}/rc%{name}-receive
%files rule
%config(noreplace) %{_sysconfdir}/default/%{name}-rule
%{_unitdir}/%{name}-rule.service
%{_sbindir}/rc%{name}-rule
%files query
%config(noreplace) %{_sysconfdir}/default/%{name}-query
%{_unitdir}/%{name}-query.service
%{_sbindir}/rc%{name}-query
%files query-frontend
%config(noreplace) %{_sysconfdir}/default/%{name}-query-frontend
%{_unitdir}/%{name}-query-frontend.service
%{_sbindir}/rc%{name}-query-frontend
%changelog