Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for using podman to util/docker_build.sh #10819

Merged
merged 2 commits into from
Feb 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion docs/getting_started_docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ This project includes a Docker workflow that will allow you to build a new firmw

## Requirements

The main prerequisite is a working `docker` install.
The main prerequisite is a working `docker` or `podman` install.
* [Docker CE](https://docs.docker.com/install/#supported-platforms)
* [Podman](https://podman.io/getting-started/installation)

## Usage

Expand Down Expand Up @@ -38,6 +39,13 @@ util/docker_build.sh
# Reads parameters as input (leave blank for all keyboards/keymaps)
```

You can manually set which container runtime you want to use by setting the `RUNTIME` environment variable to it's name or path.
By default docker or podman are automatically detected and docker is preferred over podman.

```bash
RUNTIME="podman" util/docker_build.sh keyboard:keymap:target
```

## FAQ

### Why can't I flash on Windows/macOS
Expand Down
39 changes: 30 additions & 9 deletions util/docker_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,27 @@ done
if [ $# -gt 1 ]; then
errcho "$USAGE"
exit 1
elif ! command -v docker >/dev/null 2>&1; then
errcho "Error: docker not found"
errcho "See https://docs.docker.com/install/#supported-platforms for installation instructions"
exit 2
fi

# Allow $RUNTIME to be overriden by the user as an environment variable
# Else check if either docker or podman exit and set them as runtime
# if none are found error out
if [ -z "$RUNTIME" ]; then
if command -v docker >/dev/null 2>&1; then
RUNTIME="docker"
elif command -v podman >/dev/null 2>&1; then
RUNTIME="podman"
else
errcho "Error: no compatible container runtime found."
errcho "Either podman or docker are required."
errcho "See https://podman.io/getting-started/installation"
errcho "or https://docs.docker.com/install/#supported-platforms"
errcho "for installation instructions."
exit 2
fi
fi


# Determine arguments
if [ $# -eq 0 ]; then
printf "keyboard=" && read -r keyboard
Expand All @@ -41,20 +56,26 @@ if [ -z "$keyboard" ]; then
keyboard=all
fi
if [ -n "$target" ]; then
if [ "$(uname)" = "Linux" ] || docker-machine active >/dev/null 2>&1; then
usb_args="--privileged -v /dev:/dev"
else
# IF we are using docker on non Linux and docker-machine isn't working print an error
# ELSE set usb_args
if [ ! "$(uname)" = "Linux" ] && [ "$RUNTIME" = "docker" ] && ! docker-machine active >/dev/null 2>&1; then
errcho "Error: target requires docker-machine to work on your platform"
errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos"
errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead"
exit 3
else
usb_args="--privileged -v /dev:/dev"
fi
fi
dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows

if [ "$RUNTIME" = "docker" ]; then
uid_arg="--user $(id -u):$(id -g)"
fi

# Run container and build firmware
docker run --rm -it $usb_args \
--user $(id -u):$(id -g) \
"$RUNTIME" run --rm -it $usb_args \
$uid_arg \
-w /qmk_firmware \
-v "$dir":/qmk_firmware \
-e ALT_GET_KEYBOARDS=true \
Expand Down