File minio.spec of Package minio

#
# spec file for package minio
#
# Copyright (c) 2023 SUSE LLC
#
# 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/
#


Name:           minio
Version:        20230721T211244Z
Release:        0
Summary:        High Performance Object Storage
License:        AGPL-3.0-or-later
Group:          Productivity/Databases/Servers
URL:            https://min.io/
Source:         %{name}-%{version}.tar.xz
Source1:        vendor.tar.xz
Source2:        https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/distributed/minio.service
Source3:        %{name}-user.conf
BuildRequires:  sysuser-tools
%{sysusers_requires}
BuildRequires:  fdupes
BuildRequires:  go >= 1.19
BuildRequires:  golang-packaging >= 15.0.8
BuildRequires:  systemd-rpm-macros
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%{systemd_requires}
Requires(post): systemd

%description
MinIO is a High Performance Object Storage released under Apache License v2.0.
It is API compatible with Amazon S3 cloud storage service. Use MinIO to build
high performance infrastructure for machine learning, analytics and application
data workloads.

%prep
%setup -q
%setup -q -T -D -a 1

%build
export GO111MODULE=on
export MINIO_VERSION=$(echo %{version} | sed -e 's/\(....\)\(..\)\(..\)T\(..\)\(..\)\(..\)Z/\1-\2-\3T\4:\5:\6Z/g')

%goprep github.com/minio/minio
sed -i 's/diskFillFraction = 0.99$/diskFillFraction = 0.9999/' %{_builddir}/go/src/github.com/minio/minio/cmd/globals.go
sed -i 's/diskFillFraction = 0.99$/diskFillFraction = 0.9999/' %{_builddir}/%{name}-%{version}/cmd/globals.go
grep -r diskFillFraction %{_builddir}
%gobuild -mod=vendor -ldflags="-X github.com/minio/minio/cmd.Version=${MINIO_VERSION} -X github.com/minio/minio/cmd.ReleaseTag=RELEASE.${MINIO_VERSION}" ...

%sysusers_generate_pre %{SOURCE3} %{name}

%install
install -D -m 0755 %{_builddir}/go/bin/minio %{buildroot}%{_bindir}/minio

mkdir -p %{buildroot}%{_unitdir}
sed -e 's+/usr/local+'%{_prefix}'+g' %{SOURCE2} > %{buildroot}%{_unitdir}/minio.service

mkdir -p %{buildroot}%{_sbindir}
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcminio

mkdir -p %{buildroot}%{_sysusersdir}
install -m 0644 %{SOURCE3} %{buildroot}%{_sysusersdir}/

mkdir -p %{buildroot}%{_sysconfdir}/minio/certs

mkdir -p %{buildroot}%{_sysconfdir}/default
cat <<EOF >> %{buildroot}%{_sysconfdir}/default/minio
# Remote volumes to be used for MinIO server.
# Uncomment line before starting the server.
# MINIO_VOLUMES=http://node{1...6}/export{1...32}

# Root credentials for the server.
# Uncomment both lines before starting the server.
# MINIO_ROOT_USER=Server-Root-User
# MINIO_ROOT_PASSWORD=Server-Root-Password

MINIO_OPTS="--certs-dir /etc/minio/certs"
EOF

mkdir -p %{buildroot}%{_localstatedir}/lib/minio

%check
%gotest github.com/minio/minio

%pre -f %{name}.pre
%service_add_pre minio.service

%preun
%service_del_preun minio.service

%post
%service_add_post minio.service

%postun
%service_del_postun minio.service

%files
%defattr(-,root,root)
%license LICENSE
%doc README.md  README.fips.md SECURITY.md VULNERABILITY_REPORT.md
%{_bindir}/minio
%{_sbindir}/rcminio
%{_unitdir}/minio.service
%{_sysusersdir}/%{name}-user.conf
%config %{_sysconfdir}/default/minio
%attr(0755,minio-user,minio-user) %dir %{_sysconfdir}/minio
%attr(0755,minio-user,minio-user) %dir %{_sysconfdir}/minio/certs
%attr(0755,minio-user,minio-user) %dir %{_localstatedir}/lib/minio

%changelog
openSUSE Build Service is sponsored by