2016-02-18 20:16:41 -05:00
|
|
|
PWD := $(shell pwd)
|
|
|
|
GOPATH := $(shell go env GOPATH)
|
2017-06-26 21:07:06 -04:00
|
|
|
LDFLAGS := $(shell go run buildscripts/gen-ldflags.go)
|
2017-06-02 17:05:51 -04:00
|
|
|
|
2019-09-11 19:27:59 -04:00
|
|
|
GOARCH := $(shell go env GOARCH)
|
2019-06-04 03:59:40 -04:00
|
|
|
GOOS := $(shell go env GOOS)
|
|
|
|
|
2019-09-20 19:19:56 -04:00
|
|
|
VERSION ?= $(shell git describe --tags)
|
2024-02-14 16:36:02 -05:00
|
|
|
REPO ?= quay.io/minio
|
|
|
|
TAG ?= $(REPO)/minio:$(VERSION)
|
2019-09-20 19:19:56 -04:00
|
|
|
|
2023-03-04 23:57:35 -05:00
|
|
|
GOLANGCI_DIR = .bin/golangci/$(GOLANGCI_VERSION)
|
|
|
|
GOLANGCI = $(GOLANGCI_DIR)/golangci-lint
|
|
|
|
|
2017-07-15 14:57:39 -04:00
|
|
|
all: build
|
2014-11-30 16:55:10 -05:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
checks: ## check dependencies
|
2018-02-13 23:59:19 -05:00
|
|
|
@echo "Checking dependencies"
|
2015-02-22 00:38:04 -05:00
|
|
|
@(env bash $(PWD)/buildscripts/checkdeps.sh)
|
2015-02-02 00:18:46 -05:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
help: ## print this help
|
2022-08-03 02:10:22 -04:00
|
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' Makefile | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-40s\033[0m %s\n", $$1, $$2}'
|
2021-10-01 14:53:06 -04:00
|
|
|
|
|
|
|
getdeps: ## fetch necessary dependencies
|
2019-03-27 19:16:17 -04:00
|
|
|
@mkdir -p ${GOPATH}/bin
|
2023-12-06 21:17:03 -05:00
|
|
|
@echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOLANGCI_DIR)
|
2024-03-21 13:21:35 -04:00
|
|
|
@echo "Installing msgp" && go install -v github.com/tinylib/msgp@v1.1.10-0.20240227114326-6d6f813fff1b
|
2021-11-05 15:20:08 -04:00
|
|
|
@echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest
|
2015-03-09 19:15:06 -04:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
crosscompile: ## cross compile minio
|
2019-01-21 22:57:23 -05:00
|
|
|
@(env bash $(PWD)/buildscripts/cross-compile.sh)
|
|
|
|
|
2023-03-09 18:15:30 -05:00
|
|
|
verifiers: lint check-gen
|
2020-09-28 16:33:34 -04:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
check-gen: ## check for updated autogenerated files
|
2020-09-28 16:33:34 -04:00
|
|
|
@go generate ./... >/dev/null
|
2020-10-02 14:10:39 -04:00
|
|
|
@(! git diff --name-only | grep '_gen.go$$') || (echo "Non-committed changes in auto-generated code is detected, please commit them to proceed." && false)
|
2015-08-22 21:34:00 -04:00
|
|
|
|
2023-03-09 18:15:30 -05:00
|
|
|
lint: getdeps ## runs golangci-lint suite of linters
|
2023-04-07 10:51:31 -04:00
|
|
|
@echo "Running $@ check"
|
|
|
|
@$(GOLANGCI) run --build-tags kqueue --timeout=10m --config ./.golangci.yml
|
|
|
|
|
|
|
|
lint-fix: getdeps ## runs golangci-lint suite of linters with automatic fixes
|
2019-09-11 19:27:59 -04:00
|
|
|
@echo "Running $@ check"
|
2023-03-09 18:15:30 -05:00
|
|
|
@$(GOLANGCI) run --build-tags kqueue --timeout=10m --config ./.golangci.yml --fix
|
2020-08-24 15:11:20 -04:00
|
|
|
|
2017-07-15 14:57:39 -04:00
|
|
|
check: test
|
2023-09-19 06:19:26 -04:00
|
|
|
test: verifiers build build-debugging ## builds minio, runs linters, tests
|
2017-09-12 19:56:33 -04:00
|
|
|
@echo "Running unit tests"
|
2024-01-24 16:36:44 -05:00
|
|
|
@MINIO_API_REQUESTS_MAX=10000 CGO_ENABLED=0 go test -v -tags kqueue ./...
|
2018-08-28 04:27:01 -04:00
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-root-disable: install-race
|
2023-04-28 15:24:14 -04:00
|
|
|
@echo "Running minio root lockdown tests"
|
|
|
|
@env bash $(PWD)/buildscripts/disable-root.sh
|
|
|
|
|
2024-04-19 08:48:19 -04:00
|
|
|
test-ilm: install-race
|
|
|
|
@echo "Running ILM tests"
|
|
|
|
@env bash $(PWD)/docs/bucket/replication/setup_ilm_expiry_replication.sh
|
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-decom: install-race
|
2022-07-04 17:02:54 -04:00
|
|
|
@echo "Running minio decom tests"
|
|
|
|
@env bash $(PWD)/docs/distributed/decom.sh
|
2022-07-16 22:35:24 -04:00
|
|
|
@env bash $(PWD)/docs/distributed/decom-encrypted.sh
|
|
|
|
@env bash $(PWD)/docs/distributed/decom-encrypted-sse-s3.sh
|
2022-07-17 11:43:14 -04:00
|
|
|
@env bash $(PWD)/docs/distributed/decom-compressed-sse-s3.sh
|
2022-07-04 17:02:54 -04:00
|
|
|
|
2024-01-02 18:08:18 -05:00
|
|
|
test-versioning: install-race
|
|
|
|
@echo "Running minio versioning tests"
|
|
|
|
@env bash $(PWD)/docs/bucket/versioning/versioning-tests.sh
|
|
|
|
|
2023-12-08 15:04:54 -05:00
|
|
|
test-configfile: install-race
|
|
|
|
@env bash $(PWD)/docs/distributed/distributed-from-config-file.sh
|
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-upgrade: install-race
|
2021-11-21 13:41:30 -05:00
|
|
|
@echo "Running minio upgrade tests"
|
|
|
|
@(env bash $(PWD)/buildscripts/minio-upgrade.sh)
|
|
|
|
|
2021-11-10 21:18:09 -05:00
|
|
|
test-race: verifiers build ## builds minio, runs linters, tests (race)
|
2020-01-10 05:35:06 -05:00
|
|
|
@echo "Running unit tests under -race"
|
|
|
|
@(env bash $(PWD)/buildscripts/race.sh)
|
|
|
|
|
2021-11-10 21:18:09 -05:00
|
|
|
test-iam: build ## verify IAM (external IDP, etcd backends)
|
2021-11-09 12:25:13 -05:00
|
|
|
@echo "Running tests for IAM (external IDP, etcd backends)"
|
2022-07-21 04:24:03 -04:00
|
|
|
@MINIO_API_REQUESTS_MAX=10000 CGO_ENABLED=0 go test -tags kqueue -v -run TestIAM* ./cmd
|
2021-11-09 12:25:13 -05:00
|
|
|
@echo "Running tests for IAM (external IDP, etcd backends) with -race"
|
2022-07-21 04:24:03 -04:00
|
|
|
@MINIO_API_REQUESTS_MAX=10000 GORACE=history_size=7 CGO_ENABLED=1 go test -race -tags kqueue -v -run TestIAM* ./cmd
|
2021-11-04 11:16:30 -04:00
|
|
|
|
fix: IAM import for LDAP should replace mappings (#19607)
Existing IAM import logic for LDAP creates new mappings when the
normalized form of the mapping key differs from the existing mapping key
in storage. This change effectively replaces the existing mapping key by
first deleting it and then recreating with the normalized form of the
mapping key.
For e.g. if an older deployment had a policy mapped to a user DN -
`UID=alice1,OU=people,OU=hwengg,DC=min,DC=io`
instead of adding a mapping for the normalized form -
`uid=alice1,ou=people,ou=hwengg,dc=min,dc=io`
we should replace the existing mapping.
This ensures that duplicates mappings won't remain after the import.
Some additional cleanup cases are also covered. If there are multiple
mappings for the name normalized key such as:
`UID=alice1,OU=people,OU=hwengg,DC=min,DC=io`
`uid=alice1,ou=people,ou=hwengg,DC=min,DC=io`
`uid=alice1,ou=people,ou=hwengg,dc=min,dc=io`
we check if the list of policies mapped to all these keys are exactly
the same, and if so remove all of them and create a single mapping with
the normalized key. However, if the policies mapped to such keys differ,
the import operation returns an error as the server cannot automatically
pick the "right" list of policies to map.
2024-04-25 11:49:53 -04:00
|
|
|
test-iam-ldap-upgrade-import: build ## verify IAM (external LDAP IDP)
|
|
|
|
@echo "Running upgrade tests for IAM (LDAP backend)"
|
|
|
|
@env bash $(PWD)/buildscripts/minio-iam-ldap-upgrade-import-test.sh
|
|
|
|
|
2023-06-15 15:43:26 -04:00
|
|
|
test-sio-error:
|
|
|
|
@(env bash $(PWD)/docs/bucket/replication/sio-error.sh)
|
|
|
|
|
2023-01-24 18:46:33 -05:00
|
|
|
test-replication-2site:
|
2022-06-06 05:54:39 -04:00
|
|
|
@(env bash $(PWD)/docs/bucket/replication/setup_2site_existing_replication.sh)
|
2023-01-24 18:46:33 -05:00
|
|
|
|
|
|
|
test-replication-3site:
|
|
|
|
@(env bash $(PWD)/docs/bucket/replication/setup_3site_replication.sh)
|
|
|
|
|
|
|
|
test-delete-replication:
|
2022-12-29 01:48:33 -05:00
|
|
|
@(env bash $(PWD)/docs/bucket/replication/delete-replication.sh)
|
2021-11-10 21:18:09 -05:00
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-replication: install-race test-replication-2site test-replication-3site test-delete-replication test-sio-error ## verify multi site replication
|
2023-01-24 18:46:33 -05:00
|
|
|
@echo "Running tests for replicating three sites"
|
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-site-replication-ldap: install-race ## verify automatic site replication
|
2022-01-07 20:41:43 -05:00
|
|
|
@echo "Running tests for automatic site replication of IAM (with LDAP)"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-multi-site-ldap.sh)
|
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-site-replication-oidc: install-race ## verify automatic site replication
|
2022-01-07 20:41:43 -05:00
|
|
|
@echo "Running tests for automatic site replication of IAM (with OIDC)"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-multi-site-oidc.sh)
|
2021-12-08 14:50:15 -05:00
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
test-site-replication-minio: install-race ## verify automatic site replication
|
2022-01-07 22:11:54 -05:00
|
|
|
@echo "Running tests for automatic site replication of IAM (with MinIO IDP)"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-multi-site-minio-idp.sh)
|
2024-03-28 13:44:56 -04:00
|
|
|
@echo "Running tests for automatic site replication of SSE-C objects"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-ssec-object-replication.sh)
|
|
|
|
@echo "Running tests for automatic site replication of SSE-C objects with SSE-KMS enabled for bucket"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-sse-kms-object-replication.sh)
|
|
|
|
@echo "Running tests for automatic site replication of SSE-C objects with compression enabled for site"
|
|
|
|
@(env bash $(PWD)/docs/site-replication/run-ssec-object-replication-with-compression.sh)
|
2022-01-07 22:11:54 -05:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
verify: ## verify minio various setups
|
2019-12-02 18:54:26 -05:00
|
|
|
@echo "Verifying build with race"
|
2022-05-30 13:58:37 -04:00
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -race -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
2017-09-12 19:56:33 -04:00
|
|
|
@(env bash $(PWD)/buildscripts/verify-build.sh)
|
2015-01-21 03:50:23 -05:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
verify-healing: ## verify healing and replacing disks with minio binary
|
2020-01-10 05:35:06 -05:00
|
|
|
@echo "Verify healing build with race"
|
2022-05-30 13:58:37 -04:00
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -race -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
2020-01-10 05:35:06 -05:00
|
|
|
@(env bash $(PWD)/buildscripts/verify-healing.sh)
|
2024-04-25 17:55:41 -04:00
|
|
|
@(env bash $(PWD)/buildscripts/verify-healing-empty-erasure-set.sh)
|
2022-09-07 10:25:39 -04:00
|
|
|
@(env bash $(PWD)/buildscripts/heal-inconsistent-versions.sh)
|
2016-08-04 19:48:50 -04:00
|
|
|
|
2022-08-03 02:10:22 -04:00
|
|
|
verify-healing-with-root-disks: ## verify healing root disks
|
2022-08-04 19:10:08 -04:00
|
|
|
@echo "Verify healing with root drives"
|
2022-07-13 19:29:44 -04:00
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -race -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
|
|
|
@(env bash $(PWD)/buildscripts/verify-healing-with-root-disks.sh)
|
|
|
|
|
2022-08-03 02:10:22 -04:00
|
|
|
verify-healing-with-rewrite: ## verify healing to rewrite old xl.meta -> new xl.meta
|
|
|
|
@echo "Verify healing with rewrite"
|
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -race -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
|
|
|
@(env bash $(PWD)/buildscripts/rewrite-old-new.sh)
|
|
|
|
|
2022-04-20 15:49:05 -04:00
|
|
|
verify-healing-inconsistent-versions: ## verify resolving inconsistent versions
|
|
|
|
@echo "Verify resolving inconsistent versions build with race"
|
2022-05-30 13:58:37 -04:00
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -race -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
2022-04-20 15:49:05 -04:00
|
|
|
@(env bash $(PWD)/buildscripts/resolve-right-versions.sh)
|
|
|
|
|
2023-09-19 06:19:26 -04:00
|
|
|
build-debugging:
|
|
|
|
@(env bash $(PWD)/docs/debugging/build.sh)
|
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
build: checks ## builds minio to $(PWD)
|
2018-02-13 23:59:19 -05:00
|
|
|
@echo "Building minio binary to './minio'"
|
2022-01-02 12:15:06 -05:00
|
|
|
@CGO_ENABLED=0 go build -tags kqueue -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
2014-11-01 20:04:24 -04:00
|
|
|
|
2021-02-09 12:29:43 -05:00
|
|
|
hotfix-vars:
|
|
|
|
$(eval LDFLAGS := $(shell MINIO_RELEASE="RELEASE" MINIO_HOTFIX="hotfix.$(shell git rev-parse --short HEAD)" go run buildscripts/gen-ldflags.go $(shell git describe --tags --abbrev=0 | \
|
|
|
|
sed 's#RELEASE\.\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)T\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)Z#\1-\2-\3T\4:\5:\6Z#')))
|
2021-12-02 20:33:37 -05:00
|
|
|
$(eval VERSION := $(shell git describe --tags --abbrev=0).hotfix.$(shell git rev-parse --short HEAD))
|
|
|
|
|
2023-11-30 18:25:51 -05:00
|
|
|
hotfix: hotfix-vars clean install ## builds minio binary with hotfix tags
|
2024-03-26 19:49:14 -04:00
|
|
|
@wget -q -c https://github.com/minio/pkger/releases/download/v2.2.9/pkger_2.2.9_linux_amd64.deb
|
2024-01-31 04:01:30 -05:00
|
|
|
@wget -q -c https://raw.githubusercontent.com/minio/minio-service/v1.0.1/linux-systemd/distributed/minio.service
|
2024-03-26 19:49:14 -04:00
|
|
|
@sudo apt install ./pkger_2.2.9_linux_amd64.deb --yes
|
2023-11-30 18:25:51 -05:00
|
|
|
@mkdir -p minio-release/$(GOOS)-$(GOARCH)/archive
|
|
|
|
@cp -af ./minio minio-release/$(GOOS)-$(GOARCH)/minio
|
|
|
|
@cp -af ./minio minio-release/$(GOOS)-$(GOARCH)/minio.$(VERSION)
|
|
|
|
@minisign -qQSm minio-release/$(GOOS)-$(GOARCH)/minio.$(VERSION) -s "${CRED_DIR}/minisign.key" < "${CRED_DIR}/minisign-passphrase"
|
|
|
|
@sha256sum < minio-release/$(GOOS)-$(GOARCH)/minio.$(VERSION) | sed 's, -,minio.$(VERSION),g' > minio-release/$(GOOS)-$(GOARCH)/minio.$(VERSION).sha256sum
|
|
|
|
@cp -af minio-release/$(GOOS)-$(GOARCH)/minio.$(VERSION)* minio-release/$(GOOS)-$(GOARCH)/archive/
|
|
|
|
@pkger -r $(VERSION) --ignore
|
2021-12-02 20:33:37 -05:00
|
|
|
|
|
|
|
hotfix-push: hotfix
|
2023-11-30 18:25:51 -05:00
|
|
|
@scp -q -r minio-release/$(GOOS)-$(GOARCH)/* minio@dl-0.minio.io:~/releases/server/minio/hotfixes/linux-amd64/
|
|
|
|
@scp -q -r minio-release/$(GOOS)-$(GOARCH)/* minio@dl-0.minio.io:~/releases/server/minio/hotfixes/linux-amd64/archive
|
|
|
|
@scp -q -r minio-release/$(GOOS)-$(GOARCH)/* minio@dl-1.minio.io:~/releases/server/minio/hotfixes/linux-amd64/
|
|
|
|
@scp -q -r minio-release/$(GOOS)-$(GOARCH)/* minio@dl-1.minio.io:~/releases/server/minio/hotfixes/linux-amd64/archive
|
2022-02-03 18:40:32 -05:00
|
|
|
@echo "Published new hotfix binaries at https://dl.min.io/server/minio/hotfixes/linux-amd64/archive/minio.$(VERSION)"
|
2021-12-02 20:33:37 -05:00
|
|
|
|
|
|
|
docker-hotfix-push: docker-hotfix
|
2022-02-03 18:40:32 -05:00
|
|
|
@docker push -q $(TAG) && echo "Published new container $(TAG)"
|
2020-12-08 11:12:13 -05:00
|
|
|
|
2021-12-02 20:33:37 -05:00
|
|
|
docker-hotfix: hotfix-push checks ## builds minio docker container with hotfix tags
|
2021-01-28 18:54:41 -05:00
|
|
|
@echo "Building minio docker image '$(TAG)'"
|
2022-02-03 18:40:32 -05:00
|
|
|
@docker build -q --no-cache -t $(TAG) --build-arg RELEASE=$(VERSION) . -f Dockerfile.hotfix
|
2021-01-28 18:54:41 -05:00
|
|
|
|
2023-01-12 04:39:12 -05:00
|
|
|
docker: build ## builds minio docker container
|
2020-06-28 11:15:15 -04:00
|
|
|
@echo "Building minio docker image '$(TAG)'"
|
2022-02-03 18:40:32 -05:00
|
|
|
@docker build -q --no-cache -t $(TAG) . -f Dockerfile
|
2018-09-25 13:33:25 -04:00
|
|
|
|
2023-09-16 05:28:06 -04:00
|
|
|
install-race: checks ## builds minio to $(PWD)
|
2024-02-16 20:15:57 -05:00
|
|
|
@echo "Building minio binary with -race to './minio'"
|
2023-09-16 05:28:06 -04:00
|
|
|
@GORACE=history_size=7 CGO_ENABLED=1 go build -tags kqueue -race -trimpath --ldflags "$(LDFLAGS)" -o $(PWD)/minio 1>/dev/null
|
2024-02-16 20:15:57 -05:00
|
|
|
@echo "Installing minio binary with -race to '$(GOPATH)/bin/minio'"
|
2023-09-16 05:28:06 -04:00
|
|
|
@mkdir -p $(GOPATH)/bin && cp -f $(PWD)/minio $(GOPATH)/bin/minio
|
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
install: build ## builds minio and installs it to $GOPATH/bin.
|
2018-02-13 23:59:19 -05:00
|
|
|
@echo "Installing minio binary to '$(GOPATH)/bin/minio'"
|
2019-05-07 13:39:26 -04:00
|
|
|
@mkdir -p $(GOPATH)/bin && cp -f $(PWD)/minio $(GOPATH)/bin/minio
|
2018-02-13 23:59:19 -05:00
|
|
|
@echo "Installation successful. To learn more, try \"minio --help\"."
|
2014-11-01 20:04:24 -04:00
|
|
|
|
2021-10-01 14:53:06 -04:00
|
|
|
clean: ## cleanup all generated assets
|
2017-06-02 17:05:51 -04:00
|
|
|
@echo "Cleaning up all the generated files"
|
2016-02-10 19:40:09 -05:00
|
|
|
@find . -name '*.test' | xargs rm -fv
|
2019-02-13 07:59:36 -05:00
|
|
|
@find . -name '*~' | xargs rm -fv
|
2022-07-21 10:25:54 -04:00
|
|
|
@find . -name '.#*#' | xargs rm -fv
|
|
|
|
@find . -name '#*#' | xargs rm -fv
|
2018-02-13 23:59:19 -05:00
|
|
|
@rm -rvf minio
|
|
|
|
@rm -rvf build
|
|
|
|
@rm -rvf release
|
2020-04-01 03:04:25 -04:00
|
|
|
@rm -rvf .verify*
|
2023-11-30 18:25:51 -05:00
|
|
|
@rm -rvf minio-release
|
|
|
|
@rm -rvf minio.RELEASE*.hotfix.*
|
|
|
|
@rm -rvf pkger_*.deb
|