diff --git a/mimir/mimir.spec b/mimir/mimir.spec new file mode 100644 index 0000000000..5be4be1c6b --- /dev/null +++ b/mimir/mimir.spec @@ -0,0 +1,133 @@ +## +## mimir.spec -- OpenPKG RPM Package Specification +## Copyright (c) 2000-2025 OpenPKG Project +## +## Permission to use, copy, modify, and distribute this software for +## any purpose with or without fee is hereby granted, provided that +## the above copyright notice and this permission notice appear in all +## copies. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +## SUCH DAMAGE. +## + +# package version +%define V_base 3.0.0 +%define V_snap 20251121 + +# package information +Name: mimir +Summary: Prometheus Long-Term Storage +URL: https://grafana.com/oss/mimir/ +Vendor: Grafana Labs +Packager: OpenPKG Project +Distribution: OpenPKG Community +Class: EVAL +Group: Database +License: AGPL +Version: %{V_base}.%{V_snap} +Release: 20251121 + +# list of sources +Source0: http://download.openpkg.org/components/versioned/mimir/mimir-%{V_snap}.tar.xz +Source1: mimir.yaml +Source2: rc.mimir + +# build information +BuildPreReq: OpenPKG, openpkg >= 20160101, go +PreReq: OpenPKG, openpkg >= 20160101 + +%description + Grafana Mimir provides horizontally scalable, highly available, + multi-tenant, long-term storage for Prometheus. + +%track + prog mimir = { + version = %{V_base} + url = https://github.com/grafana/mimir/releases + regex = tree/v(\d+\.\d+\.\d+) + } + +%prep + %setup -q -n mimir + +%build + # build program + export GOPATH=`pwd` + cd src/github.com/grafana/mimir + go build -v -o bin/mimir cmd/mimir/main.go + go build -v -o bin/mimirtool cmd/mimirtool/main.go + go build -v -o bin/query-tee cmd/query-tee/main.go + go build -v -o bin/metaconvert cmd/metaconvert/main.go + +%install + # create directory hierarchy + %{l_shtool} mkdir -f -p -m 755 \ + $RPM_BUILD_ROOT%{l_prefix}/bin \ + $RPM_BUILD_ROOT%{l_prefix}/sbin \ + $RPM_BUILD_ROOT%{l_prefix}/libexec/mimir \ + $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \ + $RPM_BUILD_ROOT%{l_prefix}/etc/mimir \ + $RPM_BUILD_ROOT%{l_prefix}/var/mimir/log \ + $RPM_BUILD_ROOT%{l_prefix}/var/mimir/run \ + $RPM_BUILD_ROOT%{l_prefix}/var/mimir/db + + # install program + %{l_shtool} install -c -s -m 755 \ + src/github.com/grafana/mimir/bin/mimirtool \ + $RPM_BUILD_ROOT%{l_prefix}/bin/ + %{l_shtool} install -c -s -m 755 \ + src/github.com/grafana/mimir/bin/mimir \ + $RPM_BUILD_ROOT%{l_prefix}/sbin/ + %{l_shtool} install -c -s -m 755 \ + src/github.com/grafana/mimir/bin/query-tee \ + src/github.com/grafana/mimir/bin/metaconvert \ + $RPM_BUILD_ROOT%{l_prefix}/libexec/mimir/ + + # install default configuration + %{l_shtool} install -c -m 644 %{l_value -s -a} \ + %{SOURCE mimir.yaml} $RPM_BUILD_ROOT%{l_prefix}/etc/mimir/ + + # install run-command script + %{l_shtool} install -c -m 755 %{l_value -s -a} \ + %{SOURCE rc.mimir} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/ + + # determine installation files + %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \ + %{l_files_std} \ + '%config %{l_prefix}/etc/mimir/*' \ + '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/mimir' \ + '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/mimir/*' + +%files -f files + +%clean + +%post + if [ $1 -eq 2 ]; then + # after upgrade, restart service + eval `%{l_rc} mimir status 2>/dev/null` + [ ".$mimir_active" = .yes ] && %{l_rc} mimir restart + fi + exit 0 + +%preun + if [ $1 -eq 0 ]; then + # before erase, stop service and remove log files + %{l_rc} mimir stop 2>/dev/null + rm -rf $RPM_INSTALL_PREFIX/var/mimir/log/* >/dev/null 2>&1 || true + rm -rf $RPM_INSTALL_PREFIX/var/mimir/run/* >/dev/null 2>&1 || true + rm -rf $RPM_INSTALL_PREFIX/var/mimir/db/* >/dev/null 2>&1 || true + fi + exit 0 + diff --git a/mimir/mimir.yaml b/mimir/mimir.yaml new file mode 100644 index 0000000000..8cbf984032 --- /dev/null +++ b/mimir/mimir.yaml @@ -0,0 +1,53 @@ +## +## mimir.conf -- mimir(8) startup configuration options +## + +multitenancy_enabled: false + +blocks_storage: + backend: filesystem + bucket_store: + sync_dir: @l_prefix@/var/mimir/db/tsdb-sync + filesystem: + dir: @l_prefix@/var/mimir/db/tsdb-data + tsdb: + dir: @l_prefix@/var/mimir/db/tsdb + +compactor: + data_dir: @l_prefix@/var/mimir/db/compactor + sharding_ring: + kvstore: + store: memberlist + +distributor: + ring: + instance_addr: 127.0.0.1 + kvstore: + store: memberlist + +ingester: + ring: + instance_addr: 127.0.0.1 + kvstore: + store: memberlist + replication_factor: 1 + +ruler_storage: + backend: filesystem + filesystem: + dir: @l_prefix@/var/mimir/db/rules + +ruler: + rule_path: @l_prefix@/var/mimir/db/ruler + +server: + http_listen_port: 9009 + log_level: error + +store_gateway: + sharding_ring: + replication_factor: 1 + +activity_tracker: + filepath: @l_prefix@/var/mimir/log/mimir-activity.log + diff --git a/mimir/rc.mimir b/mimir/rc.mimir new file mode 100644 index 0000000000..7fb0e3f5c8 --- /dev/null +++ b/mimir/rc.mimir @@ -0,0 +1,63 @@ +#!@l_prefix@/bin/openpkg rc +## +## rc.mimir -- Run-Commands +## + +%config + mimir_enable="$openpkg_rc_def" + mimir_daemon="yes" + mimir_log_prolog="true" + mimir_log_epilog="true" + mimir_log_numfiles="10" + mimir_log_minsize="1M" + mimir_log_complevel="9" + +%common + mimir_cfgfile="@l_prefix@/etc/mimir/mimir.yaml" + mimir_pidfile="@l_prefix@/var/mimir/run/mimir.pid" + mimir_logfile="@l_prefix@/var/mimir/log/mimir.log" + mimir_signal () { + [ -f $mimir_pidfile ] && kill -$1 `cat $mimir_pidfile` + } + +%status -u @l_rusr@ -o + mimir_usable="unknown" + mimir_active="no" + rcService mimir enable yes && \ + mimir_signal 0 && mimir_active="yes" + echo "mimir_enable=\"$mimir_enable\"" + echo "mimir_usable=\"$mimir_usable\"" + echo "mimir_active=\"$mimir_active\"" + +%start -u @l_rusr@ + rcService mimir enable yes || exit 0 + rcService mimir active yes && exit 0 + rcVarIsYes mimir_daemon || exit 0 + ( eval "nohup @l_prefix@/sbin/mimir -config.file $mimir_cfgfile >$mimir_logfile 2>&1 &" + echo $! >$mimir_pidfile + ) >/dev/null 2>&1 + +%stop -u @l_rusr@ + rcService mimir enable yes || exit 0 + rcService mimir active no && exit 0 + rcVarIsYes mimir_daemon || exit 0 + mimir_signal TERM + sleep 2 + rm -f $mimir_pidfile >/dev/null 2>&1 || true + +%restart -u @l_rusr@ + rcService mimir enable yes || exit 0 + rcService mimir active no && exit 0 + rcVarIsYes mimir_daemon || exit 0 + rc mimir stop start + +%daily -u @l_susr@ + rcService mimir enable yes || exit 0 + rcVarIsYes mimir_daemon || exit 0 + shtool rotate -f \ + -n ${mimir_log_numfiles} -s ${mimir_log_minsize} -d \ + -z ${mimir_log_complevel} -m 664 -o @l_rusr@ -g @l_rgrp@ \ + -P "${mimir_log_prolog}" \ + -E "${mimir_log_epilog}; rc mimir restart" \ + $mimir_logfile +