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/"
|
|
|
|
echo "### Use on x64 only!"
|
|
|
|
echo "### Run with -y if you fit the requirements!"
|
|
|
|
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..."
|
|
|
|
if docker run --rm --privileged multiarch/qemu-user-static --reset -p yes >/dev/null 2>&1; then
|
|
|
|
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}"
|
|
|
|
echo " docker run --rm --privileged multiarch/qemu-user-static --reset -p yes"
|
2024-09-07 00:35:04 +00:00
|
|
|
echo
|