mirror of
				https://github.com/minio/minio.git
				synced 2025-10-25 14:21:49 +02:00 
			
		
		
		
	The current code considers a pool with all root disks to be as part of a testing environment even if there are other pools with mounted disks. This will result to illegitimate writing in root disks. Fix this by simplifing the logic: require MINIO_CI_CD in order to skip root disk check.
		
			
				
	
	
		
			259 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| trap 'catch $LINENO' ERR
 | |
| 
 | |
| # shellcheck disable=SC2120
 | |
| catch() {
 | |
|     if [ $# -ne 0 ]; then
 | |
|        echo "error on line $1"
 | |
|        for site in sitea siteb sitec; do
 | |
|            echo "$site server logs ========="
 | |
|            cat "/tmp/${site}_1.log"
 | |
|            echo "==========================="
 | |
|            cat "/tmp/${site}_2.log"
 | |
|        done
 | |
|     fi
 | |
| 
 | |
|     echo "Cleaning up instances of MinIO"
 | |
|     pkill minio
 | |
|     pkill -9 minio
 | |
|     rm -rf /tmp/multisitea
 | |
|     rm -rf /tmp/multisiteb
 | |
|     rm -rf /tmp/multisitec
 | |
| }
 | |
| 
 | |
| catch
 | |
| 
 | |
| set -e
 | |
| export MINIO_CI_CD=1
 | |
| export MINIO_BROWSER=off
 | |
| export MINIO_ROOT_USER="minio"
 | |
| export MINIO_ROOT_PASSWORD="minio123"
 | |
| export MINIO_KMS_AUTO_ENCRYPTION=off
 | |
| export MINIO_PROMETHEUS_AUTH_TYPE=public
 | |
| export MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=
 | |
| unset MINIO_KMS_KES_CERT_FILE
 | |
| unset MINIO_KMS_KES_KEY_FILE
 | |
| unset MINIO_KMS_KES_ENDPOINT
 | |
| unset MINIO_KMS_KES_KEY_NAME
 | |
| 
 | |
| go build ./docs/debugging/s3-check-md5/
 | |
| wget -O mc https://dl.minio.io/client/mc/release/linux-amd64/mc \
 | |
|     && chmod +x mc
 | |
| wget -O mc.RELEASE.2021-03-12T03-36-59Z https://dl.minio.io/client/mc/release/linux-amd64/archive/mc.RELEASE.2021-03-12T03-36-59Z \
 | |
|     && chmod +x mc.RELEASE.2021-03-12T03-36-59Z
 | |
| 
 | |
| minio server --address 127.0.0.1:9001 "http://127.0.0.1:9001/tmp/multisitea/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9002/tmp/multisitea/data/disterasure/xl{5...8}" >/tmp/sitea_1.log 2>&1 &
 | |
| minio server --address 127.0.0.1:9002 "http://127.0.0.1:9001/tmp/multisitea/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9002/tmp/multisitea/data/disterasure/xl{5...8}" >/tmp/sitea_2.log 2>&1 &
 | |
| 
 | |
| minio server --address 127.0.0.1:9003 "http://127.0.0.1:9003/tmp/multisiteb/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9004/tmp/multisiteb/data/disterasure/xl{5...8}" >/tmp/siteb_1.log 2>&1 &
 | |
| minio server --address 127.0.0.1:9004 "http://127.0.0.1:9003/tmp/multisiteb/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9004/tmp/multisiteb/data/disterasure/xl{5...8}" >/tmp/siteb_2.log 2>&1 &
 | |
| 
 | |
| minio server --address 127.0.0.1:9005 "http://127.0.0.1:9005/tmp/multisitec/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9006/tmp/multisitec/data/disterasure/xl{5...8}" >/tmp/sitec_1.log 2>&1 &
 | |
| minio server --address 127.0.0.1:9006 "http://127.0.0.1:9005/tmp/multisitec/data/disterasure/xl{1...4}" \
 | |
|       "http://127.0.0.1:9006/tmp/multisitec/data/disterasure/xl{5...8}" >/tmp/sitec_2.log 2>&1 &
 | |
| 
 | |
| sleep 30
 | |
| 
 | |
| export MC_HOST_sitea=http://minio:minio123@127.0.0.1:9001
 | |
| export MC_HOST_siteb=http://minio:minio123@127.0.0.1:9004
 | |
| export MC_HOST_sitec=http://minio:minio123@127.0.0.1:9006
 | |
| 
 | |
| ./mc mb sitea/bucket
 | |
| ./mc version enable sitea/bucket
 | |
| ./mc mb -l sitea/olockbucket
 | |
| 
 | |
| ./mc mb siteb/bucket/
 | |
| ./mc version enable siteb/bucket/
 | |
| ./mc mb -l siteb/olockbucket/
 | |
| 
 | |
| ./mc mb sitec/bucket/
 | |
| ./mc version enable sitec/bucket/
 | |
| ./mc mb -l sitec/olockbucket
 | |
| 
 | |
| echo "adding replication config for site a -> site b"
 | |
| remote_arn=$(./mc admin bucket remote add sitea/bucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9004/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| echo "adding replication rule for a -> b : ${remote_arn}"
 | |
| sleep 1
 | |
| ./mc replicate add sitea/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync"
 | |
| sleep 1
 | |
| 
 | |
| echo "adding replication config for site b -> site a"
 | |
| remote_arn=$(./mc admin bucket remote add siteb/bucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9001/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for b -> a : ${remote_arn}"
 | |
| ./mc replicate add siteb/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync"
 | |
| sleep 1
 | |
| 
 | |
| echo "adding replication config for site a -> site c"
 | |
| remote_arn=$(./mc admin bucket remote add sitea/bucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9006/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for a -> c : ${remote_arn}"
 | |
| ./mc replicate add sitea/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 2
 | |
| sleep 1
 | |
| echo "adding replication config for site c -> site a"
 | |
| remote_arn=$(./mc admin bucket remote add sitec/bucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9001/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for c -> a : ${remote_arn}"
 | |
| ./mc replicate add sitec/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 2
 | |
| sleep 1
 | |
| echo "adding replication config for site b -> site c"
 | |
| remote_arn=$(./mc admin bucket remote add siteb/bucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9006/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for b -> c : ${remote_arn}"
 | |
| ./mc replicate add siteb/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 3
 | |
| sleep 1
 | |
| 
 | |
| echo "adding replication config for site c -> site b"
 | |
| remote_arn=$(././mc admin bucket remote add sitec/bucket \
 | |
|    http://minio:minio123@127.0.0.1:9004/bucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for c -> b : ${remote_arn}"
 | |
| ./mc replicate add sitec/bucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 3
 | |
| sleep 1
 | |
| echo "adding replication config for olockbucket site a -> site b"
 | |
| remote_arn=$(././mc admin bucket remote add sitea/olockbucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9004/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket a -> b : ${remote_arn}"
 | |
| ./mc replicate add sitea/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync"
 | |
| sleep 1
 | |
| echo "adding replication config for site b -> site a"
 | |
| remote_arn=$(././mc admin bucket remote add siteb/olockbucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9001/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket b -> a : ${remote_arn}"
 | |
| ./mc replicate add siteb/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync"
 | |
| sleep 1
 | |
| echo "adding replication config for olockbucket site a -> site c"
 | |
| remote_arn=$(././mc admin bucket remote add sitea/olockbucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9006/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket a -> c : ${remote_arn}"
 | |
| ./mc replicate add sitea/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 2
 | |
| sleep 1
 | |
| echo "adding replication config for site c -> site a"
 | |
| remote_arn=$(././mc admin bucket remote add sitec/olockbucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9001/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket c -> a : ${remote_arn}"
 | |
| ./mc replicate add sitec/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 2
 | |
| sleep 1
 | |
| echo "adding replication config for site b -> site c"
 | |
| remote_arn=$(././mc admin bucket remote add siteb/olockbucket/ \
 | |
|    http://minio:minio123@127.0.0.1:9006/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket b -> c : ${remote_arn}"
 | |
| ./mc replicate add siteb/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 3
 | |
| sleep 1
 | |
| echo "adding replication config for site c -> site b"
 | |
| remote_arn=$(././mc admin bucket remote add sitec/olockbucket \
 | |
|    http://minio:minio123@127.0.0.1:9004/olockbucket \
 | |
|    --service "replication" --json | jq -r ".RemoteARN")
 | |
| sleep 1
 | |
| echo "adding replication rule for olockbucket c -> b : ${remote_arn}"
 | |
| ./mc replicate add sitec/olockbucket/ \
 | |
|    --remote-bucket "${remote_arn}" \
 | |
|    --replicate "existing-objects,delete,delete-marker,replica-metadata-sync" --priority 3
 | |
| sleep 1
 | |
| 
 | |
| echo "Set default governance retention 30d"
 | |
| ./mc retention set --default governance 30d sitea/olockbucket
 | |
| 
 | |
| echo "Copying data to source sitea/bucket"
 | |
| ./mc cp --encrypt "sitea/" --quiet /etc/hosts sitea/bucket
 | |
| sleep 1
 | |
| 
 | |
| echo "Copying data to source sitea/olockbucket"
 | |
| ./mc cp --quiet /etc/hosts sitea/olockbucket
 | |
| sleep 1
 | |
| 
 | |
| echo "Verifying the metadata difference between source and target"
 | |
| if diff -pruN <(./mc stat --json sitea/bucket/hosts | jq .) <(./mc stat --json siteb/bucket/hosts | jq .) | grep -q 'COMPLETED\|REPLICA'; then
 | |
|     echo "verified sitea-> COMPLETED, siteb-> REPLICA"
 | |
| fi
 | |
| 
 | |
| if diff -pruN <(./mc stat --json sitea/bucket/hosts | jq .) <(./mc stat --json sitec/bucket/hosts | jq .) | grep -q 'COMPLETED\|REPLICA'; then
 | |
|     echo "verified sitea-> COMPLETED, sitec-> REPLICA"
 | |
| fi
 | |
| 
 | |
| echo "Verifying the metadata difference between source and target"
 | |
| if diff -pruN <(./mc stat --json sitea/olockbucket/hosts | jq .) <(./mc stat --json siteb/olockbucket/hosts | jq .) | grep -q 'COMPLETED\|REPLICA'; then
 | |
|     echo "verified sitea-> COMPLETED, siteb-> REPLICA"
 | |
| fi
 | |
| 
 | |
| if diff -pruN <(./mc stat --json sitea/olockbucket/hosts | jq .) <(./mc stat --json sitec/olockbucket/hosts | jq .) | grep -q 'COMPLETED\|REPLICA'; then
 | |
|     echo "verified sitea-> COMPLETED, sitec-> REPLICA"
 | |
| fi
 | |
| 
 | |
| sleep 5
 | |
| 
 | |
| head -c 221227088 </dev/urandom >200M
 | |
| ./mc.RELEASE.2021-03-12T03-36-59Z cp --config-dir ~/.mc --encrypt "sitea" --quiet 200M "sitea/bucket/200M-enc-v1"
 | |
| ./mc.RELEASE.2021-03-12T03-36-59Z cp --config-dir ~/.mc --quiet 200M "sitea/bucket/200M-v1"
 | |
| 
 | |
| ./mc cp --encrypt "sitea" --quiet 200M "sitea/bucket/200M-enc-v2"
 | |
| ./mc cp --quiet 200M "sitea/bucket/200M-v2"
 | |
| 
 | |
| sleep 10
 | |
| 
 | |
| echo "Verifying ETag for all objects"
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9001/ -bucket bucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9002/ -bucket bucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9003/ -bucket bucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9004/ -bucket bucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9005/ -bucket bucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9006/ -bucket bucket
 | |
| 
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9001/ -bucket olockbucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9002/ -bucket olockbucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9003/ -bucket olockbucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9004/ -bucket olockbucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9005/ -bucket olockbucket
 | |
| ./s3-check-md5 -versions -access-key minio -secret-key minio123 -endpoint http://127.0.0.1:9006/ -bucket olockbucket
 | |
| 
 | |
| catch
 |