%define fullversion 2021-10-23T03-28-24Z %define realversion %(echo %{fullversion} | sed -e 's/[^0-9]//g' | cut -c -8) %define clientversion 2021-10-07T04-19-58Z %define clientshort %(echo %{fullversion} | sed -e 's/[^0-9]//g' | cut -c -8) %global _hardened_build 1 %define minio_user minio %define minio_group minio %define minio_home /var/lib/minio/ Name : minio Version : %{realversion} Release : 1%{?dist} Summary : Web Object Cloud Storage Server Group : System/Web License : Apache License URL : https://min.io #Source0 : https://github.com/minio/minio/archive/RELEASE.2020-05-08T02-40-49Z.tar.gz Source1 : minio-server.config Source2 : minio-gateway.config Source3 : minio-server.service Source4 : minio-gateway.service BuildRequires : golang BuildRequires : git %description MinIO is an object storage server. It is compatible with Amazon S3 cloud storage service. It is best suited for storing unstructured data such as photos, videos, log files, backups and container / VM images. Size of an object can range from a few KBs to a maximum of 5TiB. %package server Summary: Web Object Cloud Storage Server Requires: minio %description server Minio Server Package %package gateway Summary: Web Object Cloud Storage Server Requires: minio %description gateway Minio Gateway Package %package client Summary: Web Object Cloud Storage Client %description client Minio Client %prep %setup -T -q -c %{name}-%{realversion} export GOPATH=`pwd` export GO111MODULE=on mkdir -p go/src/github.com/minio/ cd go/src/github.com/minio/ git clone https://github.com/minio/minio git clone https://github.com/minio/mc %build export GOPATH=`pwd` export GO111MODULE=on export CGO_ENABLED=0 export GOPROXY=https://goproxy.io cd go/src/github.com/minio pushd minio git checkout tags/RELEASE.%{fullversion} export COMMIT=$(git rev-parse HEAD) export SHORTCOMMIT=$(git rev-parse --short HEAD) export BUILDDATE=$(date +%Y%m%d) sed 's/goGetTag = "DEVELOPMENT.GOGET"/goGetTag = "RELEASE.%{fullversion}"/' -i cmd/build-constants.go sed 's/Version = goGetTag/Version = "%{fullversion}"/' -i cmd/build-constants.go sed 's/ReleaseTag = goGetTag/ReleaseTag = "RELEASE.%{fullversion}"/' -i cmd/build-constants.go sed 's/CommitID = goGetTag/CommitID = "'$COMMIT'"/' -i cmd/build-constants.go sed 's/ShortCommitID = CommitID\[:12\]/ShortCommitID = "'$SHORTCOMMIT'"/' -i cmd/build-constants.go go generate go build -v -tags kqueue -trimpath --ldflags "-X github.com/minio/minio/cmd.ReleaseTag=RELEASE.%{fullversion} -X github.com/minio/minio/cmd.CommitID=$COMMIT -X github.com/minio/minio/cmd.ShortCommitID=$SHORTCOMMIT -X github.com/minio/minio/cmd.Version=%{version} -extldflags -s -w -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \n') -buildid %{version}" -o minio popd pushd mc git checkout tags/RELEASE.%{clientversion} go build -v -tags kqueue -trimpath --ldflags "-X github.com/minio/minio/cmd.ReleaseTag=RELEASE.%{fullversion} -X github.com/minio/minio/cmd.CommitID=$COMMIT -X github.com/minio/minio/cmd.ShortCommitID=$SHORTCOMMIT -X github.com/minio/minio/cmd.Version=%{version} -extldflags -s -w -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \n') -buildid %{version}" -o minio-mc popd %install install -p -D -m 0555 go/src/github.com/minio/minio/minio %{buildroot}%{_bindir}/minio install -p -D -m 0555 go/src/github.com/minio/mc/minio-mc %{buildroot}%{_bindir}/minio-mc install -p -D -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/minio/server install -p -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/minio/gateway install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_unitdir}/minio-server.service install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_unitdir}/minio-gateway.service install -p -d -m 0700 %{buildroot}%{minio_home} %pre getent group %{minio_group} > /dev/null || groupadd -r %{minio_group} getent passwd %{minio_user} > /dev/null || useradd -r -d %{minio_home} -g %{minio_group} -s /bin/bash -c "minio user" %{minio_user} exit 0 %post server %systemd_post minio-server.service %preun server %systemd_preun minio-server.service %postun server %systemd_postun minio-server.service %post gateway %systemd_post minio-gateway.service %preun gateway %systemd_preun minio-gateway.service %postun gateway %systemd_postun minio-gateway.service %check cd go/src/github.com/minio/minio ./minio --version | tee v v=$(awk '/version/{print $3}' v) test "$v" = RELEASE.%{fullversion} %files %doc %caps(cap_net_bind_service=+ep) %{_bindir}/minio %attr(700,%{minio_user},%{minio_group}) %dir %{minio_home} %files server %config(noreplace) %{_sysconfdir}/%{name}/server %{_unitdir}/minio-server.service %files gateway %config(noreplace) %{_sysconfdir}/%{name}/gateway %{_unitdir}/minio-gateway.service %files client %{_bindir}/minio-mc %changelog