| 
									
										
										
										
											2024-01-05 19:19:50 +00:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | # ANSI color codes for green (OK) and red (FAIL) | 
					
						
							|  |  |  | BLUE='\033[0;34m' | 
					
						
							|  |  |  | GREEN='\033[0;32m' | 
					
						
							|  |  |  | RED='\033[0;31m' | 
					
						
							|  |  |  | NC='\033[0m' # No Color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Check if the user is in the docker group | 
					
						
							|  |  |  | if ! groups $(whoami) | grep &>/dev/null '\bdocker\b'; then | 
					
						
							|  |  |  |     echo -e "${RED}You need to be in the docker group to run this script without root privileges.${NC}" | 
					
						
							|  |  |  |     echo "Please run the following command to add yourself to the docker group:" | 
					
						
							|  |  |  |     echo "  sudo usermod -aG docker $(whoami)" | 
					
						
							|  |  |  |     echo "Then log out and log back in or run the script with sudo." | 
					
						
							|  |  |  |     exit 1 | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | # Command-line switch check | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | if [ "$1" != "-y" ]; then | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  |     echo "### Setting up Docker for Multi-Arch Builds." | 
					
						
							|  |  |  |     echo "### Requires Docker packages from https://get.docker.com/" | 
					
						
							| 
									
										
										
										
											2025-06-14 10:22:04 +00:00
										 |  |  |     echo "### Run with -y if you meet the requirements!" | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  |     exit 0 | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | # Check if the mybuilder exists and is running | 
					
						
							|  |  |  | echo -n "Checking if buildx builder 'mybuilder' exists and is running..." | 
					
						
							|  |  |  | if ! docker buildx inspect mybuilder --bootstrap >/dev/null 2>&1; then | 
					
						
							|  |  |  |     echo | 
					
						
							|  |  |  |     echo -n "  Creating and starting buildx builder 'mybuilder'..." | 
					
						
							|  |  |  |     if docker buildx create --name mybuilder --driver docker-container --use >/dev/null 2>&1 && \
 | 
					
						
							|  |  |  |        docker buildx inspect mybuilder --bootstrap >/dev/null 2>&1; then | 
					
						
							|  |  |  |         echo -e " [${GREEN}OK${NC}]" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         echo -e " [${RED}FAIL${NC}]" | 
					
						
							|  |  |  |         exit 1 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     echo -e " [${GREEN}OK${NC}]" | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | # Ensure QEMU is set up for cross-platform builds | 
					
						
							|  |  |  | echo -n "Ensuring QEMU is configured for cross-platform builds..." | 
					
						
							| 
									
										
										
										
											2025-06-14 10:22:04 +00:00
										 |  |  | if docker run --rm --privileged tonistiigi/binfmt --install all >/dev/null 2>&1; then | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  |     echo -e " [${GREEN}OK${NC}]" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     echo -e " [${RED}FAIL${NC}]" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | # Ensure arm64 and amd64 platforms are active | 
					
						
							|  |  |  | echo -n "Ensuring 'mybuilder' supports linux/arm64 and linux/amd64..." | 
					
						
							|  |  |  | active_platforms=$(docker buildx inspect mybuilder --bootstrap | grep -oP '(?<=Platforms: ).*') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [[ "$active_platforms" == *"linux/arm64"* && "$active_platforms" == *"linux/amd64"* ]]; then | 
					
						
							|  |  |  |     echo -e " [${GREEN}OK${NC}]" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     echo | 
					
						
							|  |  |  |     echo -n "  Enabling platforms linux/arm64 and linux/amd64..." | 
					
						
							|  |  |  |     if docker buildx create --name mybuilder --driver docker-container --use --platform linux/amd64,linux/arm64 >/dev/null 2>&1 && \
 | 
					
						
							|  |  |  |        docker buildx inspect mybuilder --bootstrap >/dev/null 2>&1; then | 
					
						
							|  |  |  |         echo -e " [${GREEN}OK${NC}]" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         echo -e " [${RED}FAIL${NC}]" | 
					
						
							|  |  |  |         exit 1 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "${BLUE}### Done.${NC}" | 
					
						
							| 
									
										
										
										
											2022-01-22 01:04:21 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "${BLUE}Examples:${NC}" | 
					
						
							|  |  |  | echo -e "  ${BLUE}Manual multi-arch build:${NC}" | 
					
						
							|  |  |  | echo "    docker buildx build --platform linux/amd64,linux/arm64 -t username/demo:latest --push ." | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "  ${BLUE}Documentation:${NC} https://docs.docker.com/desktop/multi-arch/" | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "  ${BLUE}Build release with Docker Compose:${NC}" | 
					
						
							|  |  |  | echo "    docker compose build" | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "  ${BLUE}Build and push release with Docker Compose:${NC}" | 
					
						
							|  |  |  | echo "    docker compose build --push" | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "  ${BLUE}Build a single image with Docker Compose:${NC}" | 
					
						
							|  |  |  | echo "    docker compose build tpotinit" | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "  ${BLUE}Build and push a single image with Docker Compose:${NC}" | 
					
						
							|  |  |  | echo "    docker compose build tpotinit --push" | 
					
						
							| 
									
										
										
										
											2024-09-05 12:38:33 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-09-11 10:42:17 +00:00
										 |  |  | echo -e "${BLUE}Resolve buildx issues:${NC}" | 
					
						
							|  |  |  | echo "    docker buildx create --use --name mybuilder" | 
					
						
							|  |  |  | echo "    docker buildx inspect mybuilder --bootstrap" | 
					
						
							|  |  |  | echo "    docker login -u <username>" | 
					
						
							|  |  |  | echo "    docker login ghcr.io -u <username>" | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo -e "${BLUE}Fix segmentation faults when building arm64 images:${NC}" | 
					
						
							| 
									
										
										
										
											2025-06-14 10:22:04 +00:00
										 |  |  | echo "    docker buildx rm mybuilder && docker run --rm --privileged tonistiigi/binfmt --install all" | 
					
						
							| 
									
										
										
										
											2024-09-07 00:35:04 +00:00
										 |  |  | echo |