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
openSUSE Build Service is sponsored by