File node_exporter.spec of Package node_exporter

%define realname node_exporter
%define realver  1.9.1
%define srcext   tar.gz

%define promu_ver 0.17.0

%if %{defined suse_version}
%if ! %{defined _fillupdir}
%define _fillupdir /var/adm/fillup-templates
%endif
%define sysconffile %{_fillupdir}/sysconfig.node_exporter
%else
%define sysconffile %{_sysconfdir}/sysconfig/node_exporter
%endif

# Common info
Name:          %{realname}
Version:       %{realver}
Release:       wiz%{?extraver:0.}1%{?dist}
License:       Apache-2.0
Group:         System/Monitoring
URL:           https://github.com/prometheus/node_exporter
Summary:       Exporter for machine metrics

# Install-time parameters
Requires:      systemd
%if "%{expand:%_vendor}" == "suse"
Requires:      %{fillup_prereq}
%endif

# Build-time parameters
BuildRequires: go >= 1.10
BuildRequires: systemd-devel
BuildRoot:     %{_tmppath}/%{name}-root
Source0:       https://codeload.github.com/prometheus/node_exporter/%{srcext}/refs/tags/v%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}
Source1:       https://codeload.github.com/prometheus/promu/%{srcext}/refs/tags/v%{promu_ver}#/promu-%{promu_ver}.%{srcext}
# go mod vendor -v && tar -Jcvf ../promu-vendor.tar.xz vendor && rm -rf vendor/
Source2:       promu-vendor.tar.xz
# go mod vendor -v && tar -Jcvf ../node-vendor.tar.xz vendor && rm -rf vendor/
Source3:       node-vendor.tar.xz
# Configs
Source12:      node_exporter.sysconfig
Source13:      node_exporter.service

%description
Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, written in Go with pluggable metric collectors.

# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}%{?extraver} -a1 -a3
# Add flags to skip debug symbols
%{__sed} -ri \
 -e '/^\s*flags:/ s|$| -gcflags=all=-dwarf=false -buildmode=pie -mod=vendor -v|' \
 -e '/^\s*ldflags:/ a\        -s\n        -w' \
 .promu.yml

# Build step (compile/build binaries, documentation, etc)
%build
_CFLAGS='%{optflags}'
_LDFLAGS='-Wl,--as-needed -Wl,--strip-all -Wl,-z,now -Wl,-z,relro'
export GOPATH=$(pwd -P)/gomodules
export GOCACHE=$(pwd -P)/.gocache
export GOTRACEBACK=crash
export CGO_ENABLED=1
export CGO_CFLAGS="$_CFLAGS"
export CGO_LDFLAGS="$_LDFLAGS"
cd promu-%{promu_ver}
tar -Jxf %{S:2}
go build -v -mod=vendor -o ../bin/promu
cd ..
%{__make} %{?_smp_mflags} build \
  PROMU=$(pwd -P)/bin/promu

# Install built stuff
%install
# Install binaries
%{__install} -D -m0755 node_exporter %{buildroot}%{_bindir}/node_exporter
# Install sysconfig file
%{__install} -D -m0644 %{S:12} %{buildroot}%{sysconffile}
# Systemd unit file
%{__install} -D -m0644 %{S:13} %{buildroot}%{_unitdir}/node_exporter.service

# Cleanup
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}

# Files list
%files
%defattr(-,root,root)
%license LICENSE
%doc CHANGELOG.md MAINTAINERS.md NOTICE README.md
%doc docs
%{_bindir}/*
%config(noreplace) %{sysconffile}
%{_unitdir}/node_exporter.service

%if "%{expand:%_vendor}" == "suse"

%pre
%{service_add_pre node_exporter.service}

%post
%{fillup_only}
%{service_add_post node_exporter.service}

%preun
%{service_del_preun node_exporter.service}
%{stop_on_removal node_exporter.service}

%postun
%{service_del_postun node_exporter.service}
%{restart_on_update node_exporter.service}

%endif

%changelog
openSUSE Build Service is sponsored by