OBS-URL: https://build.opensuse.org/package/show/systemsmanagement/hashicorp-serf?expand=0&rev=4
140 lines
4.8 KiB
RPMSpec
140 lines
4.8 KiB
RPMSpec
#
|
|
# spec file for package hashicorp-serf
|
|
#
|
|
# Copyright (c) 2025 SUSE LLC and contributors
|
|
#
|
|
# 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/
|
|
#
|
|
|
|
# Make sure we work on Leap/SLE 15.x
|
|
%{!?_distconfdir: %global _distconfdir %{_sysconfdir}}
|
|
|
|
Name: hashicorp-serf
|
|
URL: https://github.com/hashicorp/serf
|
|
Summary: Service orchestration and management tool
|
|
License: Apache-2.0 AND BSD-3-Clause AND MIT AND MPL-2.0
|
|
Version: 0.10.2
|
|
Release: 0
|
|
Group: System/Management
|
|
Source: hashicorp-serf-%{version}.tar.xz
|
|
Source1: vendor.tar.gz
|
|
Source2: serf.service
|
|
Source3: 00-default.json
|
|
Source4: system-user-serf.conf
|
|
Source5: LICENSE
|
|
BuildRequires: golang(API) >= 1.23
|
|
BuildRequires: systemd-rpm-macros
|
|
Requires(pre): sysuser-tools
|
|
Requires(post): systemd
|
|
Requires(preun): systemd
|
|
Requires(postun): systemd
|
|
%sysusers_requires
|
|
|
|
# Upstream wants 64-bit (e.g., they store 1<<63-1 in integers, etc)
|
|
ExcludeArch: %ix86 %arm
|
|
|
|
%description
|
|
Serf is a service orchestration and management tool.
|
|
|
|
It offers a decentralized, lightweight, highly available and fault
|
|
tolerant solution for service discovery and orchestration that runs
|
|
on Linux, Mac OS-X and Windows.
|
|
|
|
An efficient and lightweight gossip protocol is used to communicate
|
|
among the nodes, and node failures are detected and notified to the rest
|
|
of the cluster. An event system is built on top of Serf, so that events
|
|
such as deploys, configuration changes, et.c, can be propagated around.
|
|
Serf is also completely masterless, meaning there's no single point of
|
|
failure.
|
|
|
|
This package provides the agent that should be started on every node.
|
|
|
|
%prep
|
|
%autosetup -p1 -a 1
|
|
|
|
%build
|
|
for cmd in cmd/* ; do
|
|
go build -mod=vendor -v -o bin/$(basename $cmd) ./$cmd
|
|
done
|
|
|
|
%install
|
|
install -d -m 0755 %{buildroot}%{_bindir}
|
|
install -m 0755 bin/* %{buildroot}%{_bindir}/
|
|
|
|
install -d -m 0755 %{buildroot}%{_sysconfdir}/serf/config.d
|
|
install -d -m 0755 %{buildroot}%{_distconfdir}/serf/config.d
|
|
install -d -m 0755 %{buildroot}%{_sharedstatedir}/serf
|
|
|
|
install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/serf.service
|
|
install -D -m 0644 %{SOURCE4} %{buildroot}%{_sysusersdir}/system-user-serf.conf
|
|
install -D -m 0644 %{SOURCE3} %{buildroot}%{_distconfdir}/serf/config.d/00-default.json
|
|
|
|
# Manually copy the documentation in place as there are multiple
|
|
# files with the same name (README.md), and that wouldn't be handled
|
|
# properly if we do this via the doc macro in the file section
|
|
install -d -m 755 %{buildroot}%{_docdir}/%{name}
|
|
install -d -m 755 %{buildroot}%{_docdir}/%{name}/client
|
|
install -d -m 755 %{buildroot}%{_docdir}/%{name}/demo/vagrant-cluster
|
|
install -d -m 755 %{buildroot}%{_docdir}/%{name}/demo/web-load-balancer
|
|
install -d -m 755 %{buildroot}%{_docdir}/%{name}/ops-misc
|
|
|
|
install -m 644 README.md %{buildroot}%{_docdir}/%{name}/
|
|
install -m 644 CHANGELOG.md %{buildroot}%{_docdir}/%{name}/
|
|
cp -r docs %{buildroot}%{_docdir}/%{name}/
|
|
install -m 644 client/README.md %{buildroot}%{_docdir}/%{name}/client/
|
|
install -m 644 demo/vagrant-cluster/README.md %{buildroot}%{_docdir}/%{name}/demo/vagrant-cluster/
|
|
install -m 644 demo/web-load-balancer/README.md %{buildroot}%{_docdir}/%{name}/demo/web-load-balancer/
|
|
install -m 644 ops-misc/README.md %{buildroot}%{_docdir}/%{name}/ops-misc/
|
|
|
|
%check
|
|
# We can run some tests, but not the one that check the actual CLI
|
|
# tool, as those would require mDNS and other networking features
|
|
# that we don't have available here in OBS.
|
|
PKGS="./serf/... ./coordinate/..."
|
|
|
|
# We also bettr skip the ones that have an internal timeout that
|
|
# often reveals itself to be to short for OBS workers.
|
|
SKIPS="TestMemberEventCoalesce_Basic"
|
|
|
|
go test -mod=vendor -v -skip "$SKIPS" $PKGS
|
|
|
|
%pre
|
|
%service_add_pre serf.service
|
|
%sysusers_create_package %{name} %{SOURCE4}
|
|
|
|
%post
|
|
%systemd_post serf.service
|
|
|
|
%preun
|
|
%systemd_preun serf.service
|
|
|
|
%postun
|
|
%systemd_postun_with_restart serf.service
|
|
|
|
%files
|
|
%{_bindir}/serf
|
|
%attr(0750, serf, serf) %dir %{_sharedstatedir}/serf
|
|
%dir %{_sysconfdir}/serf
|
|
%dir %{_sysconfdir}/serf/config.d
|
|
%if "%{_distconfdir}" != "%{_sysconfdir}"
|
|
%dir %{_distconfdir}/serf
|
|
%dir %{_distconfdir}/serf/config.d
|
|
%endif
|
|
%{_sysusersdir}/system-user-serf.conf
|
|
%{_unitdir}/serf.service
|
|
%{_distconfdir}/serf/config.d/00-default.json
|
|
%license LICENSE
|
|
# See above...
|
|
%doc %{_docdir}/%{name}
|
|
|
|
%changelog
|